11/07/2013
Как использовать метод AcDbRegion::getAreaProp()
Первые три параметра метода описываются как:
- origin — Возвращает начальную точку области
- xAxis — Возвращает ось X области
- yAxis — Возвращает ось Y области
Но учитывая объявления этих параметров как const :
virtual Acad::ErrorStatus getAreaProp(
const AcGePoint3d& origin,
const AcGeVector3d& xAxis,
const AcGeVector3d& yAxis, ... );
const AcGePoint3d& origin,
const AcGeVector3d& xAxis,
const AcGeVector3d& yAxis, ... );
В действительности эти три параметра не выходные, а входные. Если использовать не инициализированные правильно значения, то мы получим в качестве результата код ошибки Acad::eInvalidInput.
Вот правильное использование метода AcDbRegion::getAreaProp():
Код - C++: [Выделить]
- // Заметим, что для краткости кода
- // часть проверок на ошибки пропущена
- //
- void getRegionAreaProp()
- {
- ads_name eNam;
- ads_point pt;
- AcDbObjectId eId;
- if (acedEntSel(L"\nВыберите область: ", eNam, pt) != RTNORM)
- {
- acutPrintf(L"\nНичего не выбрано.");
- return;
- }
- acdbGetObjectId(eId, eNam);
- AcDbEntity* pEnt = NULL;
- if(acdbOpenAcDbEntity(pEnt, eId, AcDb::kForRead) != Acad::eOk)
- {
- acutPrintf(L"\nОшибка открытия примитива.");
- return;
- }
- AcDbRegion* pReg = AcDbRegion::cast(pEnt);
- if(!pReg)
- {
- pEnt->close();
- return;
- }
- double perimeter, area, momInertia[2],
- prodInertia, prinMoments[2],
- radiiGyration[2];
- AcGePoint2d centroid, extentsLow, extentsHigh;
- AcGeVector2d prinAxes[2];
- AcGePoint3d origin;
- AcGeVector3d xAxis;
- AcGeVector3d yAxis;
- // Инициализируем три аргумента
- AcGePlane plane;
- pReg->getPlane(plane);
- plane.getCoordSystem(origin, xAxis, yAxis);
- Acad::ErrorStatus es = pReg->getAreaProp(
- // Эти три параметра входные
- origin, xAxis, yAxis,
- perimeter,
- area,
- centroid,
- momInertia,
- prodInertia,
- prinMoments,
- prinAxes,
- radiiGyration,
- extentsLow,
- extentsHigh);
- assert(es == Acad::eOk);
- // Вы можете сами решить что будете
- // делать с результатами.
- // Я же только напечатаю сообщение:
- acutPrintf(L"\nУспешно получены свойства области.");
- pReg->close();
- }
Источник: http://adndevblog.typepad.com/autocad/2012/05/how-to-use-acdbregiongetareaprop.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=130.0
Опубликовано 11.07.2013
Отредактировано 04.08.2013 в 16:36:20
Отредактировано 04.08.2013 в 16:36:20