如何把选择集内的曲线按照到已知点的距离进行重新排序
(vl-load-com)(princ "选择辅助线\n")
(setq m_ent1 (car(entsel)))
(setq ent1_s(vlax-curve-getStartPoint p1))
(print "请选择需要扫描的区域:")
(setq ss(ssget))
(setq lengss (sslength ss))
(setq bb 0)
(while (< bb lengss)
(setq p1 (ssname ss bb))
(setq ed (entget p1))
下面不知道该如何写了
即把ss内的所有曲线按照到ent-s点的距离有小到大重新排序
望各位高手指教,谢谢
先谢谢楼上的了,再琢磨你的算法 刚看到这个帖子,顶一下 有高手指导指导吗 猜想至今久悬状况,应是没看懂您的需求而当个过客
各行各业,同中有异....
想办法把您的问题叙述至让人家不费力就能懂 ...
花了十分钟,简单的测试了一下,错误处理不够强大,其它的你自已整
(defun c:test (/ m_select ss lengss bb entlst p1)
(setq m_select (entsel "\n选择辅助线:"))
(if (and m_select (setq m_ent1 (car m_select))) ;_有效选择
(progn
(print "请选择需要扫描的区域:")
(setq ss (ssget)) ;选择集
(if ss ;_选择集有效
(progn
(setq lengss (sslength ss))
(setq bb 0)
(setq entlst nil)
(while (< bb lengss)
(setq p1 (ssname ss bb))
(setq bb (1+ bb))
(setq entlst (cons p1 entlst))
) ;_循环将选择集加入到表
(setq pt (cadr m_select)) ;_ent-s点
(setq sortentlst;_排序后的表
(vl-sort
entlst
'(lambda (curveA curveB / nearpa nearpb dista distB)
(setq nearpA
(vlax-curve-getClosestPointTo curveA pt)
)
(setq nearpB
(vlax-curve-getClosestPointTo curveB pt)
)
(setq distA (DISTANCE (trans nearpA 0 1) pt))
(setq distA (DISTANCE (trans nearpB 0 1) pt))
(<= distA distB) ;_从小到大
;;(>= distA distB);_从大到小
)
)
) ;_排序
)
(princ "\n选择集无效!")
)
)
(princ "\n曲线无效!")
)
(princ)
)
(defun c:tt ()
(if (and (setq p1 (getpoint "\n基点<退出>: "))
(setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
)
(progn
(setq i -1
lst '()
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq p2 (vlax-curve-getClosestPointTo s1 p1)
dist (distance p1 p2)
lst(cons (list dist s1) lst)
)
)
(if lst
(progn
(setq lst (vl-sort lst '(lambda (a b) (< (car a) (car b))))
lst (mapcar 'cadr lst)
)
(princ "\n!lst = ")
(princ lst)
)
)
)
)
(princ)
)
caiqs 的程序可以运行,但不是我要的结果,你只是把距离排序了,没有把距离对应的曲线也排序,我要的是曲线按照距离的大小排序,不过还是非常感谢 caiqs 的程序可以运行,但不是我要的结果,你只是把距离排序了,没有把距离对应的曲线也排序,我要的是曲线按照距离的大小排序,不过还是非常感谢
运行结果:
排序前的曲线图元是:(<图元名: 7ef6b1c8> <图元名: 7ef6b1d0> <图元名: 7ef6b1d8> <图元名: 7ef6b270>
<图元名: 7ef6b340> <图元名: 7ef6b378> <图元名: 7ef6b3b0>)
排序后的曲线图元是:(<图元名: 7ef6b1c8> <图元名: 7ef6b1d0> <图元名: 7ef6b1d8> <图元名: 7ef6b270>
<图元名: 7ef6b340> <图元名: 7ef6b378> <图元名: 7ef6b3b0>)
排序前后图元顺序没有变 6楼的程序解决我的难题,感谢,同时非常感谢大家的关注, 问一个弱智问题,知道图元名,如何调用图元名对应的实体
页:
[1]
2