Тема: Выполнение стандартных действий на Double Click (AcDbDoubleClickEdit)
Есть блок с именем "test", при DoubleClick на нем появляется MessageBox. Как сделать так, чтобы MessageBox появлялся при DoubleClick только на блоке с именем "test", а на остальных блоках отрабатывалась стандартная команда eattedit или открывалось окно Properties?
Читал https://www.caduser.ru/forum/topic21416.html – на хуках делать не нравится, хочется сделать на AcDbDoubleClickEdit.
Пишу для Autocad 2006.
void AcDbDoubleClickBlock::startEdit(AcDbEntity *pEnt, AcGePoint3d pt) { // Get the Current Document AcApDocument *pDoc=acDocManager->curDocument(); AcDbBlockReference* pBlock; // Cast the AcDbEntity pointer to AcDbPolyline if(pEnt->isKindOf(AcDbBlockReference::desc()) == Adesk::kTrue) pBlock=AcDbBlockReference::cast(pEnt); else { acutPrintf("Error: Invalid AcDbBlockReference Object"); return; } acDocManager->lockDocument(pDoc, AcAp::kWrite); // Get the ObjectId of the BlockTableRecord where the reference is defined AcDbObjectId blockId = pBlock->blockTableRecord(); AcDbBlockTableRecord* pBlockTableRecord; if (acdbOpenAcDbObject((AcDbObject *&)pBlockTableRecord, blockId, AcDb::kForRead) != Acad::eOk) { acutPrintf("\nFailed to open block-table."); return; } const char* blockName; pBlockTableRecord->getName(blockName); pBlockTableRecord->close(); pBlock->close(); if (!strcmp(blockName, "test")) { AfxMessageBox("Test passed!"); } else { // //execute standard Autocad command // }; // clear the pickfirst selection set. acedSSSetFirst(NULL, NULL); acDocManager->unlockDocument(pDoc); }
В InitApplication()
// Intialize for BlockReference... AcDbDoubleClickBlock *pBlockEdit = new AcDbDoubleClickBlock; AcDbBlockReference::desc()->addX(AcDbDoubleClickEdit::desc(), pBlockEdit);
В UnloadApplication():
// Uninitialize the double-click editing feature // for each entity type AcDbBlockReference::desc()->delX(AcDbDoubleClickEdit::desc());