ADN Open CIS
Сообщество программистов Autodesk в СНГ

13/11/2017

Как проверить действительность объекта ShapeManager для Solid3D

Если Solid3D имеет недействительный объект shape manager – это практически всегда приводит к аварийному завершению AutoCAD если не выполнить соответствующую проверку.

Вы можете проверить валидность Solid3d при помощи команды _SOLIDEDIT.

Код - Auto/Visual LISP: [Выделить]
  1. ;51 это метка примитива Solid3d
  2. (command "._solidedit" "_B" "_C" "51" "_X" "_X")

При помощи ObjectARX:

Код - C++: [Выделить]
  1. Acad::ErrorStatus selectEntity(AcDbObjectId& eId)
  2. {
  3.     ads_name en;
  4.     ads_point pt;     
  5.     ads_entsel(_T("\nВыберите примитив: "), en, pt);
  6.     return acdbGetObjectId(eId, en);
  7. }
  8.  
  9. void solidCheckForValidASM()
  10. {
  11.         AcDbObjectId solId = AcDbObjectId::kNull;
  12.         if (!eOkVerify(selectEntity(solId))) return;
  13.  
  14.         AcDbSmartObjectPointer pSolid(solId, AcDb::kForRead);
  15.         if (!eOkVerify(pSolid.openStatus())) return; 
  16.  
  17.         // Получаем доступ к указателю
  18.         if (nullptr == pSolid.object()) return;
  19.         std::unique_ptr pEnt(new AcBrBrep());
  20.  
  21.         // Передаём указатель в BREP API
  22.         if(pEnt->set(*pSolid.object())!= AcBr::eOk) return;
  23.        
  24.         bool isGoodAsmBody = pEnt->checkEntity();
  25.         if (!isGoodAsmBody)
  26.         {
  27.                acedAlert(_T("Нулевой или недействительный Shape Manager"));
  28.         }
  29.  
  30.         return;
  31. }

 

Источник: http://adndevblog.typepad.com/autocad/2017/10/check-if-solid3d-has-valid-shape-manger-object.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=8147

Опубликовано 13.11.2017
Отредактировано 20.11.2017 в 21:18:57