关于ssget "F" 选择排序的问题。
本帖最后由 kanxiaokan 于 2019-10-5 15:41 编辑用 ssget "F" 选择的圆排序有问题。图二中圆孔密集地方数字不是按顺序排序。比如 4 5 6 1 2 3 7 8 9 10 11..... 实际需要 1 2 3 4 5 6 7 8....
这个问题怎么处理?
部分代码如下:
(setq
ss (ssget
"F"
(list (vlax-get obj 'StartPoint)
(vlax-get obj 'EndPoint)
)
(list '(0 . "CIRCLE") (cons 8 (vlax-get obj 'Layer)))
)
) (repeat (sslength ss)
(setq e2 (ssname ss j))
(setq o (cdr (assoc 10 (entget e2))))
(entmake (list (cons 0 "TEXT")
(cons 8 "BJS")
(cons 10 o)
(cons 40 0.5)
(cons 1 (itoa ii))
)
)
(setq ii (1+ ii))
间距太小,如需排序,请程序里进行排序 言戲無軍 发表于 2019-10-5 18:42
间距太小,如需排序,请程序里进行排序
谢谢回复,已经解决问题了 kanxiaokan 发表于 2019-10-7 07:58
谢谢回复,已经解决问题了
怎么解决的 言戲無軍 发表于 2019-10-7 10:46
怎么解决的
以中心为基点,按Y和X的大小排序。 ;;17 [功能] 点表排序(141差)
;;ssPts: 1 选择集,返回图元列表
;; 2 点表(1到n维 1维时key只能是x或X),返回点表
;; 3 图元列表,返回图元列表
;; 4 字符列表或者数值列表
;;Key: "xyzXYZ"任意组合,例如"yX",y在前表示y坐标优先,小y表示从小到大(注:二维点时,不能有z)
;;FUZZ: 允许误差
;;注:点表可以1到n维混合,Key长度不大于点的最小维数。
;;示例1 (HH:ssPts:Sort (ssget) "YxZ" 0.5);返回(<Entity name: 7ef7b3a8> <Entity name: 7ef7b3a0>)
;;示例2 (HH:ssPts:Sort (list '(2 3) '(3 5)) "Yx" 0.5);返回((3 5) (2 3))
;;示例3 (HH:ssPts:Sort '(<Entity name: 7ef79a28> <Entity name: 7ef79a10>) "YxZ" 0.5)
;;示例4 (HH:ssPts:Sort (list "DF" "ZX" "A" "DD" "A") "X" 1)=>("ZX" "DF" "DD" "A" "A")
;;示例5 (HH:ssPts:Sort (list 5 8 5.0 9 5) "X" 1)=>(9 8 5 5.0)
;;本程序是在fsxm的扩展 自贡黄明儒 2014年3月22日
(defun HH:ssPts:Sort (ssPts KEY FUZZ / E EN FUN LST N)
;;1 点列表排序
(defun sortpts (PTS FUN xyz FUZZ)
(vl-sort pts
'(lambda (a b)
(if (not (equal (xyz a) (xyz b) fuzz))
(fun (xyz a) (xyz b))
)
)
)
)
;;2 排序先后
(defun sortpts1 (PTS KEY FUZZ)
(setq Key (vl-string->list Key))
(foreach xyz (reverse Key)
(cond ((< xyz 100)
(setq fun >)
(setq xyz (nth (- xyz 88) (list car cadr caddr)))
)
(T
(setq fun <)
(setq xyz (nth (- xyz 120) (list car cadr caddr)))
)
)
(setq Pts (sortpts Pts fun xyz fuzz))
)
)
;;3 本程序主程序
(cond
((= (type ssPts) 'PICKSET)
(repeat (setq n (sslength ssPts))
(if (and (setq e (ssname ssPts (setq n (1- n))))
(setq en (entget e))
)
(setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
)
)
(mapcar 'last (sortpts1 lst KEY FUZZ))
)
((Listp ssPts)
(cond
((vl-consp (car ssPts)) (sortpts1 ssPts KEY FUZZ))
((= (type (car ssPts)) 'ENAME)
(foreach e ssPts
(if (setq en (entget e))
(setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
)
)
(mapcar 'last (sortpts1 lst KEY FUZZ))
)
(T
(cond ((equal key "X") (vl-sort ssPts '>))
((equal key "x") (vl-sort ssPts '<))
)
)
)
)
)
)
wyl219 发表于 2019-10-10 18:13
;;17 [功能] 点表排序(141差)
;;ssPts: 1 选择集,返回图元列表
;; 2 点表(1到n维 1维时key只能是x或X ...
很感谢!!!学习!!!
页:
[1]