1、选择图框(可以是块);
2、计算图框的最小包围框;
3、用上面计算好的包围框选择该范围内的封闭PLINE矩形;
4、循环计算各矩形的四个角点组成表;
5、分别对各矩形角点表排序,先排X后排Y;
6、对各矩形的一个角点排序,方法同上;
7、按顺序输出结果。 程序未经调试。另外:小数点后可以有零吧。;[提取1號矩形左下角點的坐標及X軸長度,Y軸長度,]X軸55.4 Y軸58. X軸長度52. Y軸長度39.
;[提取2號矩形右下角點的坐標及X軸長度,Y軸長度,]X軸2163.7 Y軸60.5 X軸長度72.Y軸長度61.
;[提取3號矩形左上角點的坐標及X軸長度,Y軸長度,]X軸2162.3 Y軸870.75 X軸長度45. Y軸長度54.
;[提取4號矩形右上角點的坐標及X軸長度,Y軸長度,]X軸53. Y軸869.3 X軸長度36. Y軸長度85
;55.4 58. 52. 39.
;2163.7 60.5 72. 61.
;2162.3 870.75 45. 54.
;53. 869.3 36. 85.
(defun c:nn()
(setvar "osmode" 0)
(setq p1 (getpoint "\n 請選擇窗口的第1點:"))
(setq p2 (getcorner p1 "\n 請選擇窗口的第1點:"))
(if (setq ss (ssget "w" P1 P2 '((0 . "LWPOLYLINE") (70 . 1) (90 . 4)))) (progn
(setq n -1)
(setq ptlst (list))
(if (= (sslength ss) 4) (progn
(repeat (sslength ss)
(setq ent (ssname ss (setq i (1+ i))))
(setq plst (list))
(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
(setq plst (vl-sort plst '(lambda (a b) (< (cadr a) (cadr b)))))
(setq plst (vl-sort plst '(lambda (a b) (< (car a) (car b)))))
(setq ptlst (cons plst ptlst))
)
(setq ptlst (vl-sort ptlst '(lambda (a b) (< (cadar a) (cadar b)))))
(setq ptlst (vl-sort ptlst '(lambda (a b) (< (caar a) (caar b)))))
(if (setq fn (findfile "558.txt"))
(setq fp (open fn "a"))
(setq fp (open "558.txt" "w"))
)
(setvar "DIMZIN" 0)
(setq lenlst (list))
(mapcar '(lambda (x) (list (-(car (last x)) (caar x)) (-(cadr(last x)) (cadar x)))) ptlst)
(setq pt1 (caar ptlst)
pt2 (cadadr ptlst)
pt3 (cadr(caddr ptlst))
pt4 (car(last ptlst)))
(setq i 1)
(foreach x lenlst
(setq pt (eval(read(strcat "pt" (itoa i)))))
(print (rtos (car pt) 2 1) fp) (princ " " fp)
(princ (rtos (cadr pt) 2 1) fp) (princ " " fp)
(princ (rtos (car x) 2 1) fp) (princ " " fp)
(princ (rtos (cadr x) 2 1) fp)
)
(close fp)
))
))
(princ)
)
楼主给的txt文件数据就是错的! ;; 角落矩形 2013-11-06
(defun c:test1405 ()
(xyp-CMDLA0)
(defun xyp-aaa (point ptn aa bb cc / pt ss s1 pt ww hh tx)
(setq pt (xyp-Get-PtNearPtn point ptn)
ss (ssget "c" pt pt '((0 . "*polyline")))
s1 (ssname ss 0)
pt (xyp-9pt s1 aa)
ww (distance pt (xyp-9pt s1 bb))
hh (distance pt (xyp-9pt s1 cc))
tx (list (car pt) (cadr pt) ww hh)
)
(xyp-strcat (mapcar 'xyp-2str tx) " ")
)
(setq lst '())
(if (setq ss (ssget '((0 . "LINE") (62 . 1))))
(progn
(setq s0 (entlast))
(xyp-PeditJoin ss 0)
(setq ss1 (xyp-SSelEntnext s0)
p1 (xyp-9pt ss1 1)
p3 (xyp-9pt ss1 3)
p7 (xyp-9pt ss1 7)
p9 (xyp-9pt ss1 9)
ptn (mapcar '(lambda (x) (xyp-9pt x 1)) (xyp-ss2list ss1))
lst (list (xyp-aaa p1 ptn 1 3 7)
(xyp-aaa p3 ptn 3 1 9)
(xyp-aaa p7 ptn 7 9 1)
(xyp-aaa p9 ptn 9 7 3)
)
)
)
)
(xyp-List2File lst "558a" "txt")
(xyp-CMDLA1)
)
页:
[1]
2