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

08/08/2013

Как вычислить длину примитива в ObjectARX/.NET

Вы можете использовать методы getStartParam() и getEndParam() для получения начального и конечного параметров кривой - унаследованного от AcDbCurve примитива. Затем используя метод getDistAtParam() можно получить длину кривой. Смотрите ниже код для получения длины:

Код - C++: [Выделить]
  1. Acad::ErrorStatus es;
  2. ads_name ename;
  3. ads_point pt;
  4.  
  5. if (RTNORM != acedEntSel(NULL, ename, pt))
  6. {
  7.     return;
  8. }
  9. AcDbObjectId objid;
  10. acdbGetObjectId(objid, ename);
  11. AcDbCurve* pEnt;
  12. acdbOpenObject(pEnt, objid, AcDb::kForRead);
  13.  
  14. double startParam, endParam, startDist, endDist;
  15. es = pEnt->getStartParam(startParam);
  16. es = pEnt->getEndParam(endParam);
  17. es = pEnt->getDistAtParam(startParam, startDist);
  18. es = pEnt->getDistAtParam(endParam, endDist);
  19. acutPrintf(L"\nLength = %f", endDist - startDist);

В .NET можно это сделать аналогично.

Код - C#: [Выделить]
  1. Double a = curve.StartParam;
  2. Double b = curve.EndParam;
  3. Double length = curve.GetDistanceAtParameter(b) -
  4.     curve.GetDistanceAtParameter(a);

 

Источник: http://adndevblog.typepad.com/autocad/2012/05/how-to-calculate-the-length-of-an-entity-in-objectarxnet.html

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

Опубликовано 08.08.2013
Отредактировано 19.08.2013 в 14:51:04