找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[求助] 拾取一条线,相连线均亮显----已经解决,谢谢众乡亲!

[复制链接]

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-5-5 19:16:24 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-5-5 19:03
元老呀,后面亮显语句是错了°主要还是那个递归子函数运行不了,我百思不得其解,郁闷几天了

递归中的n是局部函数,每次都重新开始,最终可能陷入一个“死循环”,如果不用局部函数,则可能出现“漂移”,得到的不是想要的值。
建议换个思路,不用递归,可以用选择集或表遍历及增减,避开这个问题。
不懂vl函数,所以也不测试了,就建议在这里了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9789个

财富等级: 富甲天下

发表于 2014-5-5 20:49:55 | 显示全部楼层
本帖最后由 zxq0220 于 2014-5-5 22:18 编辑

错误多多。下面是改好的。
  1. (defun C:W2 (/ E N P)
  2. (defun HH:EndPtEnts (p e fuzz / E1 N PT SS)
  3.   (setq ss (ssget "_C" p p '((0 . "LINE,*POLYLINE,SPLINE,ARC"))))
  4.   (if (> (sslength ss) 1) (progn
  5.    (ssdel e ss)
  6.    (repeat (setq n (sslength ss))
  7.     (setq e1 (ssname ss (setq n (1- n))))
  8.     (if (not (eq e0 e1)) (progn
  9.      (ssadd e1 ss0)
  10.      (setq pt (vlax-curve-getStartPoint e1))
  11.      (if (not (equal (distance p pt) 0.0 fuzz)) (HH:EndPtEnts pt e1 fuzz))
  12.      (setq pt (vlax-curve-getEndPoint e1))
  13.      (if (not (equal (distance p pt) 0.0 fuzz)) (HH:EndPtEnts pt e1 fuzz))
  14.     ))
  15.    )
  16.   (setq ss nil)
  17.   ))
  18. )
  19. (setq ss0 (ssget "_+.:E:S" '((0 . "LINE,*POLYLINE,SPLINE,ARC"))))
  20. (setq e0 (ssname ss0 0))
  21. (setq p (vlax-curve-getStartPoint e0))
  22. (HH:EndPtEnts p e0 0.1)
  23. (setq p (vlax-curve-getEndPoint e0))
  24. (HH:EndPtEnts p e0 0.1)
  25. (repeat (setq n (sslength ss0)) (redraw (ssname ss0 (setq n (1- n))) 3))
  26. )

点评

当线围合成闭合时,选择集数量的最大范围! 命令: w2 选择对象: ; 错误: 超出选择集数量的最大范围 命令:  详情 回复 发表于 2014-5-5 22:04

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 为什么你行我不行,这世界太不公平了!

查看全部评分

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

使用道具 举报

发表于 2014-5-5 22:04:56 | 显示全部楼层
zxq0220 发表于 2014-5-5 20:49
错误多多。下面是改好的。

当线围合成闭合时,选择集数量的最大范围!

命令: w2
选择对象:
; 错误: 超出选择集数量的最大范围
命令:


点评

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

使用道具 举报

已领礼包: 9789个

财富等级: 富甲天下

发表于 2014-5-5 22:19:35 | 显示全部楼层
夜来风语声 发表于 2014-5-5 22:04
当线围合成闭合时,选择集数量的最大范围!

命令: w2

程序改好了。再试试。

点评

当线围合成闭合时,选择集数量的最大范围! ... 还是这个错误哟!  详情 回复 发表于 2014-5-6 08:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-6 01:09:07 | 显示全部楼层
非递归
  1. (defun c:tt (/ e lst ss lss0 sp0 ep0 sp ep tlst p)
  2.   (if (setq e
  3.              (ssget "_+.:S:E" '((0 . "arc,*line")))
  4.       )
  5.     (progn
  6.       (setq e        (ssname e 0)
  7.             lst        (list (vlax-curve-getstartpoint e)
  8.                       (vlax-curve-getendpoint e)
  9.                 )
  10.             ss        (ssadd)
  11.       )
  12.       (ssadd e ss)
  13.       (while lst
  14.         (setq tlst (cons (car lst) tlst)
  15.               p (car lst)
  16.               lst  (cdr lst)
  17.         )
  18.         (if (setq
  19.               ss0 (ssget "_C" p p '((0 . "arc,*line")))
  20.             )
  21.           (progn
  22.             (setq l (sslength ss0))
  23.             (while (setq ee (ssname ss0 (setq l (1- l))))
  24.               (setq sp0        (vlax-curve-getstartpoint ee)
  25.                     ep0        (vlax-curve-getendpoint ee)
  26.               )
  27.               (if
  28.                 (and
  29.                   (not (vl-some '(lambda (x) (equal x sp0 1e-3)) lst))
  30.                   (not (vl-some '(lambda (x) (equal x sp0 1e-3)) tlst))
  31.                 )
  32.                  (progn
  33.                    (setq lst (cons sp0 lst))
  34.                    (ssadd ee ss)
  35.                  )
  36.               )
  37.               (if
  38.                 (and
  39.                   (not (vl-some '(lambda (x) (equal x ep0 1e-3)) lst))
  40.                   (not (vl-some '(lambda (x) (equal x ep0 1e-3)) tlst))
  41.                 )
  42.                  (progn
  43.                    (setq lst (cons ep0 lst))
  44.                    (ssadd ee ss)
  45.                  )
  46.               )
  47.             )
  48.           )
  49.         )
  50.       )
  51.       (if ss
  52.         (sssetfirst nil ss)
  53.       )
  54.     )
  55.   )
  56.   (princ)
  57. )

点评

遇到多个封闭合线时,还是有缺陷的。  发表于 2014-5-6 10:29

评分

参与人数 2D豆 +9 收起 理由
/db_自贡黄明儒_ + 4 很给力!经验;技术要点;资料分享奖!
q3_2006 + 5 很完美!

查看全部评分

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-5-6 08:44:06 | 显示全部楼层
zxq0220 发表于 2014-5-5 22:19
程序改好了。再试试。

当线围合成闭合时,选择集数量的最大范围!
... 还是这个错误哟!

点评

(defun C:W2 (/ E N P) (defun HH:EndPtEnts (p e fuzz / E1 EN N PT SS) (cond ((and (setq ss (ssget "_C" p p '((0 . "*LINE,ARC")))) (> (sslength ss) 1) ) (repeat (set  详情 回复 发表于 2014-5-6 10:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2014-5-6 10:26:01 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2014-5-6 10:39 编辑
q3_2006 发表于 2014-5-6 08:44
当线围合成闭合时,选择集数量的最大范围!
... 还是这个错误哟!

(defun C:W2 (/ E N P)
  (defun HH:EndPtEnts (p e fuzz / E1 EN N PT SS)
    (cond
      ((and
  (setq ss (ssget "_C" p p '((0 . "*LINE,ARC"))))
  (> (sslength ss) 1)
       )
       (repeat (setq n (sslength ss0))
  (setq en (ssname ss0 (setq n (1- n))))
  (cond ((ssmemb en ss) (ssdel en ss)))
       )
       (repeat (setq n (sslength ss))
  (setq e1 (ssname ss (setq n (1- n))))
  (ssadd e1 ss0)
  (setq pt (vlax-curve-getStartPoint e1))
  (cond ((not (equal p pt fuzz)) (HH:EndPtEnts pt e1 fuzz)))
  (setq pt (vlax-curve-getEndPoint e1))
  (cond ((not (equal p pt fuzz)) (HH:EndPtEnts pt e1 fuzz)))
       )
      )
    )
  )
  (setq ss0 (ssget "_+.:E:S" '((0 . "*LINE,ARC"))))
  (setq e0 (ssname ss0 0))
  (setq p (vlax-curve-getStartPoint e0))
  (HH:EndPtEnts p e0 0.1)
  (setq p (vlax-curve-getEndPoint e0))
  (HH:EndPtEnts p e0 0.1)
  (repeat (setq n (sslength ss0)) (redraw (ssname ss0 (setq n (1- n))) 3))
)
1.gif

点评

只要是在递归里用选择集,就会有选择集数量超限的风险! 以下是非递归法,不存在选择数量超限问题: [/post]  详情 回复 发表于 2014-5-6 13:19
请黄工帮忙解决下这个问题....http://www.xdcad.net/forum/thread-673592-1-1.html...主要是想学好递归...现成严重半调子...但递归用的人好少...范例太少....复杂点我就转不过来了....拜托抽空看看...谢谢!  详情 回复 发表于 2014-5-6 11:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-5-6 11:02:18 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-5-6 10:26
(defun C:W2 (/ E N P)
  (defun HH:EndPtEnts (p e fuzz / E1 EN N PT SS)
    (cond


请黄工帮忙解决下这个问题....http://www.xdcad.net/forum/thread-673592-1-1.html主要是想学好递归...现在严重半调子...递归用的人好少...范例太少....复杂点我就转不过来了....拜托抽空看看...谢谢!

点评

悄悄的告诉你,千万别告诉他人,黄工也是严重半调子呢。  发表于 2014-5-6 15:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-5-6 11:15:00 | 显示全部楼层
q3_2006 发表于 2014-5-6 11:02
请黄工帮忙解决下这个问题....http://www.xdcad.net/forum/thread-673592-1-1.html主要是想学好递归... ...

那个问题要求不清晰,换句话说,关联表不是那样用的。
比如表中有'(5 6)和'(6 5),岂不要死循环,如果remove,怎知该那个在前?
表的处理应该针对应用的题目比较容易,有目的、有输入条件才好想办法。那个楼主在3楼似乎提到与多段线顶点有关,不说还好些,说了更不清楚了。

点评

这个是群里网友的求助,处理直线端点表什么的可以是扩展功能,就这个表'((6 7)(1 2)(3 4)(6 5)(2 3)(7 8)),凡是x或y有一项相同就分为同一组,这个用递归写我就绕不过来...拜托长老用递归法解决下,谢谢了....即使表中有'  详情 回复 发表于 2014-5-6 13:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-5-6 13:09:59 | 显示全部楼层
ll_j 发表于 2014-5-6 11:15
那个问题要求不清晰,换句话说,关联表不是那样用的。
比如表中有'(5 6)和'(6 5),岂不要死循环,如果re ...

这个是群里网友的求助,处理直线端点表什么的可以是扩展功能,就这个表'((6 7)(1 2)(3 4)(6 5)(2 3)(7 8)),凡是x或y有一项相同就分为同一组,这个用递归写我就绕不过来...拜托长老用递归法解决下,谢谢了....即使表中有'(5 6)和'(6 5)...也没关系...加入同一组内的表就不在查找范围内了,不会死循环..也无所谓顺序的....只要分成一组就行.....

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-5-6 13:19:45 | 显示全部楼层
本帖最后由 牢固 于 2018-6-12 11:30 编辑
/db_自贡黄明儒_ 发表于 2014-5-6 10:26
(defun C:W2 (/ E N P)
  (defun HH:EndPtEnts (p e fuzz / E1 EN N PT SS)
    (cond

只要是在递归里用选择集,就会有选择集数量超限的风险!
以下是非递归法,不存在选择数量超限问题:
Array,本帖隐藏的内容需要发帖数高于 2 才可浏览,你当前发帖数为


点评

严重抗议,太精简了!!!  发表于 2014-5-6 15:59
http://www.xdcad.net/forum/thread-673592-1-1.html G版也顺便看下这个呗....希望用递归方法解决....看来大家对递归都不怎么感冒呢....只有G版之前用递归法帮我解决过问题呀...拜托了....  详情 回复 发表于 2014-5-6 14:53

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2014-5-6 14:53:26 | 显示全部楼层
牢固 发表于 2014-5-6 13:19
只要是在递归里用选择集,就会有选择集数量超限的风险!
以下是非递归法,不存在选择数量超限问题:
[/p ...

http://www.xdcad.net/forum/thread-673592-1-1.html
G版也顺便看下这个呗....希望用递归方法解决....看来大家对递归都不怎么感冒呢....只有G版之前用递归法帮我解决过问题呀...拜托了....{:soso_e154:}

点评

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

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

发表于 2014-5-8 15:59:56 | 显示全部楼层
(defun cs-get-link ( / ent)
  (setq ssed '() sss '())
  (if (setq ent (car (entsel)))
    (progn
      (setq ent (cs-ch-ss ent "vla")) ;;;将ENAME转换为Vla-OBJECT
      (cs-get-sublink ent)
      (if ssed
        (sssetfirst nil (cs-ch-ss ssed "ss"));;;将图元列表转换为选择集
      )
      )
    )
  ssed
  )

(defun cs-get-sublink (ent / JINGDU PT1 PT2 SS0 SS1 SS2 X)
  (setq jingdu 0.001)
  (setq pt1 (vlax-curve-getStartPoint ent)
        pt2 (vlax-curve-getendPoint ent))
  (if (not (member pt1 sss))
    (setq ss1 (ssget "c" pt1 pt1)
          sss (cons pt1 sss))
    (setq ss1 nil)
    )
  (if (not (member pt2 sss))
    (setq ss2 (ssget "c" pt2 pt2)
          sss (cons pt2 sss))
    (setq ss2 nil)
    )
  (setq ss0 (append (cs-ch-ss ss1 "vla") (cs-ch-ss ss2 "vla")));;;将ENAME转换为Vla-OBJECT
  (setq ss0 (mapcar '(lambda (x)
                       (if (not (member x ssed)) x))
                    ss0))
  (setq ss0 (vl-remove nil ss0))
  (setq ss0 (mapcar '(lambda(x)
                       (if (or (equal pt1 (vlax-curve-getStartPoint x) jingdu)
                               (equal pt2 (vlax-curve-getStartPoint x) jingdu)
                               (equal pt1 (vlax-curve-getendPoint x) jingdu)
                               (equal pt2 (vlax-curve-getendPoint x) jingdu)
                               )
                         x)
                       )
                    ss0))
  (setq ss0 (vl-remove nil ss0))
  (setq ssed (append ss0 ssed))
  (foreach item ss0
    (cs-get-sublink item)
    )
  )

点评

大佬也出手了  详情 回复 发表于 2014-5-8 20:16

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 01:37 , Processed in 0.296103 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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