nkmjg 发表于 2024-2-23 16:11:08

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]
查看完整版本: ObjectArx获取实体周长