峰峰兒 发表于 2013-11-3 15:09:50

qiuhaitao110 发表于 2013-11-4 14:42:44

不太懂你的意思说具体点

峰峰兒 发表于 2013-11-4 16:09:25

ZZXXQQ 发表于 2013-11-4 19:26:52

如果矩形是封闭的PLINE,可以按下面的步骤编程:
1、选择图框(可以是块);
2、计算图框的最小包围框;
3、用上面计算好的包围框选择该范围内的封闭PLINE矩形;
4、循环计算各矩形的四个角点组成表;
5、分别对各矩形角点表排序,先排X后排Y;
6、对各矩形的一个角点排序,方法同上;
7、按顺序输出结果。

峰峰兒 发表于 2013-11-5 12:40:46

ZZXXQQ 发表于 2013-11-6 08:52:15

程序未经调试。另外:小数点后可以有零吧。;[提取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)
)

xyp1964 发表于 2013-11-6 22:03:44

楼主给的txt文件数据就是错的!

xyp1964 发表于 2013-11-6 23:26:27

;; 角落矩形 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)
)

峰峰兒 发表于 2013-11-7 07:56:53

峰峰兒 发表于 2013-11-7 20:41:05

页: [1] 2
查看完整版本: 角落矩形-----LISP------