按坐标自动生成序号的问题
请教各位前辈,我想写一个小程序,可以实现:批量自动在每个矩形中心位置生成序号,且序号是根据矩形中点的位置坐标从小到大进行编排的,前辈们有什么建议或者编写思路可以分享下吗? 其它都好说,只是这个矩形是由什么构成的,4个线段,还是一个pline 线,还是多条线形成的网格(交点处需计算出坐标点,像轴网那样的) vitalgg 发表于 2021-1-8 07:49其它都好说,只是这个矩形是由什么构成的,4个线段,还是一个pline 线,还是多条线形成的网格(交点处需计算 ...
矩形是由“rectang”命令生成的,本质上是一个封闭的多段线(pline) 我的思路是:
1.读取所选多段线,计算中心点坐标,存入list
2.从list读取坐标点,根据你的【大、小】规则整理list重新排列
3.根据排列好的中心点坐标,依次entmake序号TEXT 參照了http://bbs.mjtd.com/forum.php?mod=viewthread&tid=96724 6樓 zml84
改了一下
(defun c:tt ()
(vl-load-com)
(princ "\n请选择要排序的实体...")
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(progn
;; 1、获取点位表
(setq lst '()
i 0
)
(repeat (sslength ss)
(setq en(ssname ss i)
pt1 (Vlax-Invoke-Method (Vlax-Ename->Vla-Object en) 'GetBoundingBox 'pa 'pb) ;取出物件左下右上的点
pt1(vlax-safearray->list pa) ;左下点
pt2(vlax-safearray->list pb) ;右上点
ang (angle pt1 pt2 ) ;左下右上的角度
yx (/ (distance pt1 pt2 ) 2) ;左下右上的一半距离
pt (polar pt1 ang yx ) ;左下右上的中点座标
lst (cons pt lst)
i (1+ i)
)
)
;; 2、排序
(setq
lst (vl-sort
lst
(function
(lambda (e1 e2)
(if (equal (cadr e1) (cadr e2) 1e1)
(< (car e1) (car e2))
(< (cadr e1) (cadr e2))
)
)
)
)
)
;; 3、写序号文字
(setq i 1)
(foreach pt lst
(command "_.text" "j" "mc""non"pt (getvar "TEXTSIZE") 0 (itoa i))
(setq i (1+ i))
)
)
)
(princ)
)
看是不是您需要的 hh_lj007 发表于 2021-1-8 10:50
我的思路是:
1.读取所选多段线,计算中心点坐标,存入list
2.从list读取坐标点,根据你的【大、小】规则 ...
好的,谢谢前辈,我试下~ bssurvey 发表于 2021-1-8 12:00
參照了http://bbs.mjtd.com/forum.php?mod=viewthread&tid=96724 6樓 zml84
改了一下
(defun c:tt ()
多谢大佬,拜谢~
页:
[1]