ObjectArx获取实体周长
以下方法只能用于继承于AcDbCurve的类型主要使用两个接口
派生类中此函数的实现应返回, 并将endParam设置为曲线端点的参数。
如果成功则返回Acad::eOk。
默认情况下, 该函数返回Acad::eNotImplemented。virtual Acad::ErrorStatus getEndParam(double&endParam) const;
计算从曲线的起点到param指定的点的曲线段的长度。
如果成功则返回Acad::eOk, 如果param超出范围则返回Acad::eInvalidInput。对于其他错误, 实现者必须决定使用什么返回值。有关可能的ErrorStatus值, 请参阅acdb.h头文件。
在默认实现中, 该函数返回Acad::eNotImplemented。
virtual Acad::ErrorStatus getDistAtParam(double param, double& dist) const;
/*!
* @brief 获取实体周长
* @param const AcDbObjectId& id 实体id(必须是继承于AcDbCurve的实体)
* @param double &perimeter 输出周长
*
* @date 2021年11月24日
*/
bool getPerimeter(const AcDbObjectId& id, double &perimeter)
{
bool ret = false;
AcDbEntity *pEnt = NULL;
Acad::ErrorStatus es = acdbOpenObject(pEnt, id, AcDb::kForRead);
if (es != Acad::eOk)
return ret;
if (pEnt->isKindOf(AcDbCurve::desc()))
{
double endParam;
AcDbCurve *pCurve = AcDbCurve::cast(pEnt);
pCurve->getEndParam(endParam);
pCurve->getDistAtParam(endParam, perimeter);
ret = true;
}
pEnt->close();
return ret;
}
页:
[1]