13/11/2017
Как проверить действительность объекта ShapeManager для Solid3D
Если Solid3D имеет недействительный объект shape manager – это практически всегда приводит к аварийному завершению AutoCAD если не выполнить соответствующую проверку.Вы можете проверить валидность Solid3d при помощи команды _SOLIDEDIT.
Код - Auto/Visual LISP: [Выделить]
- ;51 это метка примитива Solid3d
- (command "._solidedit" "_B" "_C" "51" "_X" "_X")
При помощи ObjectARX:
Код - C++: [Выделить]
- Acad::ErrorStatus selectEntity(AcDbObjectId& eId)
- {
- ads_name en;
- ads_point pt;
- ads_entsel(_T("\nВыберите примитив: "), en, pt);
- return acdbGetObjectId(eId, en);
- }
- void solidCheckForValidASM()
- {
- AcDbObjectId solId = AcDbObjectId::kNull;
- if (!eOkVerify(selectEntity(solId))) return;
- AcDbSmartObjectPointer pSolid(solId, AcDb::kForRead);
- if (!eOkVerify(pSolid.openStatus())) return;
- // Получаем доступ к указателю
- if (nullptr == pSolid.object()) return;
- std::unique_ptr pEnt(new AcBrBrep());
- // Передаём указатель в BREP API
- if(pEnt->set(*pSolid.object())!= AcBr::eOk) return;
- bool isGoodAsmBody = pEnt->checkEntity();
- if (!isGoodAsmBody)
- {
- acedAlert(_T("Нулевой или недействительный Shape Manager"));
- }
- return;
- }
Источник: http://adndevblog.typepad.com/autocad/2017/10/check-if-solid3d-has-valid-shape-manger-object.html
Автор перевода: Александр Ривилис
Отредактировано 20.11.2017 в 20:18:57
Обсуждение: http://adn-cis.org/forum/index.php?topic=8147
Опубликовано 13.11.2017Отредактировано 20.11.2017 в 20:18:57