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 [out] 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值