找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1303|回复: 7

[其他]:Spline 和 Pline 自身交点问题(总结)

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-3-11 17:49:48 | 显示全部楼层 |阅读模式

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

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

×
Spline 和 Pline 自身交点问题(总结)

  1. 1 有一种情况的 spline 自身交点是求不出的,绘制 Spline,用适当的距离 Offset
  2. Spline,对 Offset 后的 Spline 一个端点拉伸使其自相交并只有一个交点,注意只
  3. 需要端点跨过,控制点不跨过,这样的交点是无法用IntersectWith求得的,用XDAPI
  4. 的xdrx_getinters求也是 Nil。当控制点也跨过时的交点IntersectWith可求,
  5. xdrx_getinters 仍求不出。
  6. (或者说对起始或结束部分相交但控制点不跨线)

  7. 2 IntersecWith 对 Pline 和 Spline 求交点
  8.   Pline 不管自身是否相交都返回点表
  9.    1)未样条化未自相交的返回顶点表(不包括起点和终点)
  10.    2)未样条化且有交点的返回顶点和交点表
  11.    3)样条化的Pline
  12.       a S 的Pline返回控制点、拟合点、交点(如果有)
  13.       b F 的Pline返回拟合点、交点(如果有)
  14.      如果起点和终点属于交点则包含,否则不在返回点表之内
  15.    Spline 返回的点表要 vlax-safearray-get-u-bound 判断
  16.    1)不含交点空
  17.    2)有交点但无法求出如开始所述情况
  18.    3)仅返回交点表(不含2的交点)

  19. 3 已样条化后再拉直的 Pline 在某些情况下其 Coordinates 等不可用

  20. 4 Spline Offset 后的 Spline 的 Fitpoints 不可用
复制代码

一个测试
[PHP]
;;写曲线选择集交点时对样条化Lwpolyline的一个测试
;;
;;
;;添加非重复点
(defun ea:point_to_points (pt pts)
  (cons        pt
        (apply 'append
               (mapcar '(lambda        (x)
                          (if (not (equal x pt 0.001))
                            (list x)
                          )
                        )
                       pts
               )
        )
  )
)
;;(x1 y1 z1 x2 y2 z2 ...) -> ((x1 y1 z1) (x2 y2 z2) ...)
(defun ea:arrypoints_to_list (points / pts pint)
  (setq        points
         (vlax-safearray->list
           (vlax-variant-value points)
         )
  )
  (while (> (length points) 0)                ;交点表处理
    (setq pint (list (car points)        ;第一个点
                     (cadr points)
                     (caddr points)
               )
    )
    (if        pts
      (setq pts (ea:point_to_oints pint pts))
      (setq pts (list pint))
    )
    (setq points (cdddr points))
  )
  pts
)
;;
;;获取样条化多义线的顶点表
;;Pedit - F 返回拟合点
;;        S 返回样条拟合点和控制点(coordinates)
(defun ea:poly_vertex (poly / lst e pts)
  (setq lst (entget poly))
  (if (or (= (cdr (assoc 70 lst)) 2)
          (= (cdr (assoc 70 lst)) 4)
      )
    (while (/= (cdr (assoc 0 (entget (setq e (entnext poly)))))
               "SEQEND"
           )
      (setq pts (cons (cdr (assoc 10 (entget e))) pts))
      (setq poly e)
    )
  )
  (reverse pts)
)
;;
;;多义线、拟合多义线、样条化多义线交点及顶点测试
(defun ea:poly_inters (/ e pts pts1)
  (setq e (vlax-ename->vla-object (car (entsel))))
  ;;自身交点返回拟合点及交点,不包括起点、终点
  ;;非拟合的返回顶点表及交点
  (setq        pts (ea:arraypoints_to_list
              (vla-intersectwith
                e
                e
                acExtendNone
              )
            )
  )
  ;;(apply 'command (cons ".pline" pts))
  ;;(command)
  ;;Pedi - s & f 后返回控制点
  ;;样条化后再拉直的Lwpolyline coordinates 不可用
  (setq pts1 (ea:arraypoints_to_list (vla-get-coordinates e)))
  (list pts pts1)
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-6 08:09:56 | 显示全部楼层

Re: [其他]:Spline 和 Pline 自身交点问题(总结)

最初由 eachy 发布
[B]Spline 和 Pline 自身交点问题(总结)
[code]
1 有一种情况的 spline 自身交点是求不出的...[/B]


不知道你说的情况具体是什么样子, 试试这个函数:
(acet-geom-self-intersect splst nil)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-5-6 08:29:02 | 显示全部楼层

Re: Re: [其他]:Spline 和 Pline 自身交点问题(总结)

最初由 lsjjm 发布
[B]

不知道你说的情况具体是什么样子, 试试这个函数:
(acet-geom-s... [/B]

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

使用道具 举报

发表于 2004-5-6 08:43:47 | 显示全部楼层

Re: Re: Re: [其他]:Spline 和 Pline 自身交点问题(总结)

最初由 eachy 发布
[B]
你求附件图中的交点试试,或者捕捉交点。 [/B]


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

使用道具 举报

发表于 2004-5-6 10:33:05 | 显示全部楼层
1,那个附图能求自身焦点
2,ea,我在cad2004中文版测试你的程序,没有返回值(包括pline),没时间检查是什么原因,你自己测试下。
3。lsjjm说说你的方法,最好是完整的一个测试函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-5-6 11:03:42 | 显示全部楼层
最初由 陌生人 发布
[B]1,那个附图能求自身焦点
2,ea,我在cad2004中文版测试你的程序,没有返回值(包括pline),没时间检查是什么原因,你自己测试下。
3。lsjjm说说你的方法,最好是完整的一个测试函数。 [/B]

搞错了,你重新下载上面的附件试试求交点


  1. (acet-geom-self-intersect
  2.   (ACET-GEOM-SPLINE-POINT-LIST (car (entsel)) nil)
  3.   nil
  4. )
复制代码

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

使用道具 举报

发表于 2007-6-30 10:49:11 | 显示全部楼层
试一下我修改的曲线自相交函数,改写后归于lepolypline polyline spline均适用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-3 17:38:50 | 显示全部楼层
看我的这个程序, 两种方法
或者到我的网盘下载 http://muzicad.ys168.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 08:24 , Processed in 0.458850 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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