24/01/2022
Как создать несколько видовых экранов модели с помощью API?
Вопрос:Я хотел бы создать несколько видовых экранов в пространстве модели, например, четыре видовых экрана, которые делили бы экран на четыре равных части, как четыре разных вида одной и той же модели. Кроме того, я хотел бы делать это автоматически для каждого чертежа, который я создаю из пользовательского интерфейса. Как этого можно добиться при помощи ObjectARX?
Ответ:
В приведенном ниже примере кода показано, как создать четыре видовых экрана в пространстве модели с возможными разными представлениями модели. Для простоты задаются только параметры просмотра первого видового экрана.
Что касается выполнения этой обработки на каждом новом чертеже, то нам поможет выполнение нашего кода в реакторе AcApDocManagerReactor::documentCreated
Код - C++: [Выделить]
- void CreateViewPorts(AcDbDatabase* pDatabase, const ACHAR* vpName)
- {
- AcDbViewportTable *pVT;
- pDatabase->getSymbolTable(pVT, AcDb::kForWrite);
- AcDbDictionary* pVisualStyleDic;
- pDatabase->getVisualStyleDictionary(pVisualStyleDic, AcDb::kForRead);
- AcGePoint2d ll, ur;
- AcDbObjectId vStyleId;
- AcDbViewportTableRecord* pVTR1=new AcDbViewportTableRecord;
- ll.set(0,0);
- ur.set(0.5,0.5);
- pVisualStyleDic->getAt(L"2dWireframe", vStyleId);
- pVTR1->setCenterPoint(AcGePoint2d(0, 0));
- pVTR1->setHeight(100);
- pVTR1->setWidth(100);
- pVTR1->setVisualStyle(vStyleId);
- pVTR1->setViewDirection(AcDb::kTopView);
- pVTR1->setLowerLeftCorner(ll);
- pVTR1->setUpperRightCorner(ur);
- pVTR1->setName(vpName);
- AcDbViewportTableRecord *pVTR2=new AcDbViewportTableRecord;
- ll.set(0,0.5);
- ur.set(0.5,1);
- pVTR2->setLowerLeftCorner(ll);
- pVTR2->setUpperRightCorner(ur);
- pVTR2->setName(vpName);
- AcDbViewportTableRecord *pVTR3=new AcDbViewportTableRecord;
- ll.set(0.5,0);
- ur.set(1,0.5);
- pVTR3->setLowerLeftCorner(ll);
- pVTR3->setUpperRightCorner(ur);
- pVTR3->setName(vpName);
- AcDbViewportTableRecord *pVTR4=new AcDbViewportTableRecord;
- ll.set(0.5,0.5);
- ur.set(1,1);
- pVTR4->setLowerLeftCorner(ll);
- pVTR4->setUpperRightCorner(ur);
- pVTR4->setName(vpName);
- pVT->add(pVTR1);
- pVT->add(pVTR2);
- pVT->add(pVTR3);
- pVT->add(pVTR4);
- pVT->close();
- pVTR1->close();
- pVTR2->close();
- pVTR3->close();
- pVTR4->close();
- acedCommandS(RTSTR, L"_.-VPORTS", RTSTR, L"_R", RTSTR, vpName, RTNONE);
- }
Автор перевода: Александр Ривилис
Опубликовано 24.01.2022
Опубликовано 24.01.2022