找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2095|回复: 3

[研讨] 关于 Ucs 下曲线构造 Ge 问题

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-17 17:54:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 st788796 于 2014-10-17 18:01 编辑

API XDGE函数库构造的 Ge 都是在 WCS 下的 Ge 曲线,在 help  中

与图元类型关联的坐标系
图元
注意
三维图元,例如直线、点、三维面、三维多段线、三维顶点、三维网格、三维网格顶点,
这些图元不在特定平面上。所有点都用世界坐标表示。这些图元中,只有直线和点可以拉伸。它们的拉伸方向可以不同于世界 Z
二维图元,如圆、圆弧、实面、宽线、文字、属性、属性定义、形、插入、二维多段线、二维顶点、优化多段线、图案填充、图像
这些图元本质上是平面。所有点都用对象坐标表示。这些图元可以拉伸。它们的拉伸方向可以不同于世界 Z
标注
有些标注点用 WCS 表示,有些用 OCS 表示
视口
用世界坐标表示

对 二维图元 不能直接用 (xdge::constructor ent) 方式构造,另外,如果构造函数中是取 DB 实体的某些参数构造也会出现和原曲线不在同一位置情况,以 ARC 为例

ARC DXF 组码中记录的 50 51 角度不是 OCS 角度,是 ARC 投影到 WCS X/Y 平面后的角度

WCS 查看

命令: li LIST 找到 1 个
                  圆弧        图层: 0
                            空间: 模型空间
                   句柄 = 1b6
                圆心 点, X=4750.7758  Y=2565.4562  Z=-270.7440
                半径 1490.9467
相对于 UCS 的拉伸方向:
                   X=   0.6181  Y=  -0.4747  Z=   0.6266
            长度 2289.6329
             累计角度 1.53569062r

执行 UCS O

命令: li LIST
选择对象: 找到 1 个
选择对象:
                  圆弧        图层: 0
                            空间: 模型空间
                   句柄 = 1b6
                圆心 点, X=   0.0000  Y=   0.0000  Z=   0.0000
                半径 1490.9467
                起点 角度 0.00000000r
                端点 角度 1.53569062r
            长度 2289.6329

构造 Ge, 逆时针取三点方式会有警告提示,但构造成功,用 Make 方法在原位置生成 Arc

命令: (setq ge (xdge::constructor "kCircArc3d" (getpoint) (getpoint) (getpoint)))
忽略倾斜、不按统一比例缩放的对象。
忽略倾斜、不按统一比例缩放的对象。
忽略倾斜、不按统一比例缩放的对象。<图元名: 1e85d08>
命令: (xdge::entity:make ge)
<图元名: 7ef993b8>

查看属性

_$ (xdge::getpropertyvalue ge "startang" "endang")
(0.0 1.53569)
_$ (xdrx_getpropertyvalue (car (entsel)) "startangle" "endangle")
(3.37997 4.91566)
_$ (abs (apply '- (xdrx_getpropertyvalue (car (entsel)) "startangle" "endangle")))
1.53569
_$

用 DB 曲线构造 Ge 时,使用 XDGE 需要考虑二维曲线的坐标系,可以先取得 ECS 对 GE 进行一次变换以对齐原曲线

2014 以上的  GetGeCurve 没有这个问题,可以构造正确位置 GeCurve

20141017175042.png
20141017175123.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-10-18 07:55:00 | 显示全部楼层
本帖最后由 st788796 于 2014-10-18 07:59 编辑

经过对比,2014 以下(因为没有 GetGeCurve 函数,需要自己构造 ToGeCurve)

1 AcGeCircArc3d 由 AcDbArc 转换时
  a、Arc 只能由三点方式才能构造通用的 GeCircArc3d

  1. AcGeCircArc3d(
  2.     const AcGePoint3d& startPoint,
  3.     const AcGePoint3d& pnt,
  4.     const AcGePoint3d& endPoint
  5. );
复制代码

b Circle 要用

  1. AcGeCircArc3d(
  2.     const AcGePoint3d& cent,
  3.     const AcGeVector3d& nrm,
  4.     double radius
  5. );
复制代码


2 Ellipse 用到了 majorvector minorvector 三维矢量,能够构造和 UCS 下 DB 实体位置一致的 Ge 曲线

3 LwPolyline 构造的直线段是投影到 WCS X/Y 平面的线段,ARC 段将不一致(目前 API 的 xdge::constructro ),由 UCS 下的 LWPOLYLINE 构造 GeCompositeCrv3d 尚存 BUG
20141018075636.jpg
20141018075839.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-10-18 09:27:27 | 显示全部楼层
看了下 飞狐 版主的 Net 版  ToCurve3d 方法,这个好像对 UCS 下 ARC 有问题,和原曲线对不上的
  1. public static CircularArc3d ToCurve3d(this Arc arc)
  2. {
  3.         Plane plane = new Plane(arc.get_Center(), arc.get_Normal());
  4.          return new CircularArc3d(arc.get_Center(), arc.get_Normal(), plane.GetCoordinateSystem().get_Xaxis(), arc.get_Radius(), arc.get_StartAngle(), arc.get_EndAngle());
  5. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-11 22:40:26 | 显示全部楼层
新的API已经解决。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-9 08:05 , Processed in 0.183746 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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