找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1663|回复: 7

[曲线] (XDGL::Curve:ToCompositeCrv3d)连续曲线构造AcGeCompositeCrv3d

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-10-13 19:09:54 | 显示全部楼层 |阅读模式
函数发布
函数名称: XDGL::Curve:ToCompositeCrv3d
调用格式: (XDGL::Curve:ToCompositeCrv3d clst)
参数说明: clst -- 曲线列表
返回值: AcGeCompositeCrv3d
函数简介: 连续曲线构造 AcGeCompositeCrv3d
函数来源: 原创
函数作者: eachy
适用版本: XDRX API 
最后更新时间: 2014-10-13
备注: -
演示图片: -

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

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

×
  1. (defun XDGL::Curve:ToCompositeCrv3d (_clst / _endtoend gelst fcrv nlst nl tf
  2.                                            crv mod c3d
  3.                                     )
  4.   (defun _endtoend (l1 / sc lc sc_sp lc_ep sp ep tf tf1)
  5.     (setq sc (car nlst)
  6.           lc (last nlst)
  7.           sc_sp (caadr sc)
  8.           lc_ep (last (cadr lc))
  9.           sp (caadr l1)
  10.           ep (last (cadr l1))
  11.     )
  12.     (if (or
  13.           (if (setq tf1 (equal sp sc_sp 1e-6))
  14.             (setq tf 0)
  15.             tf1
  16.           )
  17.           (if (setq tf1 (equal ep sc_sp 1e-6))
  18.             (setq tf 1)
  19.             tf1
  20.           )
  21.           (if (setq tf1 (equal sp lc_ep 1e-6))
  22.             (setq tf 2)
  23.             tf1
  24.           )
  25.           (if (setq tf1 (equal ep lc_sp 1e-6))
  26.             (setq tf 3)
  27.             tf1
  28.           )
  29.         )
  30.       tf
  31.     )
  32.   )
  33.   (setq gelst (xdge::constructor _clst)
  34.         gelst (mapcar
  35.                 '(lambda (x)
  36.                    (list x (xdge::getpropertyvalue x "hasStartPoint"
  37.                                                    "hasEndPoint"
  38.                            )
  39.                    )
  40.                  )
  41.                 gelst
  42.               )
  43.         fcrv (car gelst)
  44.         gelst (cdr gelst)
  45.         nlst (list fcrv)
  46.   )
  47.   (while gelst
  48.     (if (setq nl (vl-member-if '(lambda (x / sc lc sp ep sc_sp lc_ep)
  49.                                   (_endtoend x)
  50.                                 ) gelst
  51.                  )
  52.         )
  53.       (progn
  54.         (setq crv (car nl)
  55.               mod (_endtoend crv)
  56.         )
  57.         (cond
  58.           ((= mod 0)
  59.             (setq nlst (cons (list (xdge::setpropertyvalue (car crv)
  60.                                                            "reverseParam"
  61.                                    ) (reverse (cadr crv))
  62.                              ) nlst
  63.                        )
  64.             )
  65.           )
  66.           ((= mod 1)
  67.             (setq nlst (cons crv nlst))
  68.           )
  69.           ((= mod 2)
  70.             (setq nlst (reverse (cons crv (reverse nlst))))
  71.           )
  72.           (t
  73.             (setq nlst (reverse (cons (list (xdge::getpropertyvalue
  74.                                                                     (car crv) "reverseParam"
  75.                                             ) (reverse (cadr crv))
  76.                                       ) (reverse nlst)
  77.                                 )
  78.                        )
  79.             )
  80.           )
  81.         )
  82.       )
  83.     )
  84.     (setq gelst (cdr gelst))
  85.   )                                       ; 改变原曲线为首尾相接
  86.   (setq nlst (mapcar
  87.                'car
  88.                nlst
  89.              )
  90.   )
  91.   (setq c3d (xdge::constructor "kCompositeCrv3d" nlst))
  92.   (xdge::free nlst)
  93.   c3d
  94. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2014-10-13 22:04:19 来自手机 | 显示全部楼层
Arc Ellipse (非闭合)Lwpolyline 属一个平面内曲线,但是这个平面倾斜时各节点可表现为不同标高
AcGeCompositeCrv2d中有逆时针Arc, 3d没有,有多种情况待验证

点评

3D可以通过计算BULGE,正负来判断顺逆时针。  详情 回复 发表于 2014-10-13 23:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-10-13 23:16:06 | 显示全部楼层
eachy 发表于 2014-10-13 22:04
Arc Ellipse (非闭合)Lwpolyline 属一个平面内曲线,但是这个平面倾斜时各节点可表现为不同标高
AcGeComp ...

3D可以通过计算BULGE,正负来判断顺逆时针。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-13 23:30:49 来自手机 | 显示全部楼层
XDSoft 发表于 2014-10-13 23:16
3D可以通过计算BULGE,正负来判断顺逆时针。

两码事,比如两条空间line,  中间一个ucs 平面 arc 连接,这个按Arx 关于AcGeCompositeCrv3d定义,首尾相接即可,但中间这个圆弧在什么情况下可以将三个线段构造成一个AcGeCompositeCrv3d需要验证
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-10-14 00:35:19 | 显示全部楼层
空间3D就不会出现这样的线和ARC相连的,因为连接不起来,因为3DPOLYLINE只能是直线段组成,不能有ARC。带ARC的,只能所有曲线在一个空间平面上 ,相对顶点连接才有意义。这样的实体才能用2D POLYLINE来表示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-14 05:57:04 来自手机 | 显示全部楼层
XDSoft 发表于 2014-10-14 00:35
空间3D就不会出现这样的线和ARC相连的,因为连接不起来,因为3DPOLYLINE只能是直线段组成,不能有ARC。带AR ...

你说的没错,但构造AcGeCompositeCrv3d没有说有这个限制,com3d仅是一个数学模型,构造它是为了利用它的特性和方法,eachy这个函数意图是将一组线构造个com3d模型,不是3dpoly,两者不同
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 19:35 , Processed in 0.253435 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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