22/10/2013
Как показать диалоговое окно редактирования поля (Field) средствами ObjectARX
Вы можете показать диалоговое окно AutoCAD редактирования поля, используя функцию “AcFdUiInvokeFieldDialog”. При помощи этой функции можно показать диалог и вернуть объект поля, выбранный пользователем, переданный как первый параметр. Код ниже показывает как это сделать:
Код - C++: [Выделить]
- void addFieldWithDialog()
- {
- AcGePoint3d pnt1;
- // Указываем начальную точку
- if(acedGetPoint(NULL, L"\nУкажите точку вставки ",
- asDblArray(pnt1)) != RTNORM)
- {
- return;
- }
- AcDbDatabase *pDb =
- acdbHostApplicationServices()->workingDatabase();
- AcDbField *pField = NULL;
- Acad::ErrorStatus es;
- // Вызываем диалоговое окно выбора поля..
- if(AcFdUiInvokeFieldDialog(pField, FALSE, pDb) == IDOK)
- {
- // Открываем пространство модели для записи
- AcDbObjectId modelId;
- modelId = acdbSymUtil()->blockModelSpaceId(pDb);
- AcDbBlockTableRecord *pBlockTableRecord;
- es = acdbOpenAcDbObject((AcDbObject*&)pBlockTableRecord,
- modelId, AcDb::kForWrite);
- // создаём Mtext;
- AcDbMText *pMText = new AcDbMText();
- pMText->setLocation(pnt1);
- // добавляем его в БД
- AcDbObjectId objectId;
- pBlockTableRecord->appendAcDbEntity(objectId, pMText);
- AcDbObjectId fieldId;
- // добавляем поле
- es = pMText->setField(_T("TEXT"), pField, fieldId);
- es = pField->evaluate(AcDbField::kDemand, pDb);
- pField->close();
- pMText->close();
- pBlockTableRecord->close();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/07/showing-autocad-field-dialog-box-using-objectarx.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=277
Опубликовано 22.10.2013Отредактировано 22.10.2013 в 12:41:33