找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 165|回复: 0

ObjectArx获取实体周长

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-2-23 16:11:08 | 显示全部楼层 |阅读模式
以下方法只能用于继承于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;

  1. /*!
  2. * @brief 获取实体周长
  3. * @param const AcDbObjectId& id 实体id(必须是继承于AcDbCurve的实体)
  4. * @param [out] double &perimeter 输出周长
  5. *
  6. * @date 2021年11月24日
  7. */
  8. bool getPerimeter(const AcDbObjectId& id, double &perimeter)
  9. {
  10.     bool ret = false;
  11.     AcDbEntity *pEnt = NULL;
  12.     Acad::ErrorStatus es = acdbOpenObject(pEnt, id, AcDb::kForRead);
  13.     if (es != Acad::eOk)
  14.         return ret;
  15.     if (pEnt->isKindOf(AcDbCurve::desc()))
  16.     {
  17.         double endParam;
  18.         AcDbCurve *pCurve = AcDbCurve::cast(pEnt);
  19.         pCurve->getEndParam(endParam);
  20.         pCurve->getDistAtParam(endParam, perimeter);
  21.         ret = true;
  22.     }
  23.     pEnt->close();
  24.     return ret;
  25. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:40 , Processed in 0.124073 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表