 - (defun c:tg ( / nr tot_area en1 i bclst pts el text1 text2 text3 m x1 bc_new x2 n a b c ii)
- (vl-load-com)
- (princ "\n请框选矩形:")
- (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 4))))
- (setq nr 0)
- (setq tot_area 0)
- (repeat (sslength ss)
- (setq en1 (ssname ss nr))
- (command "._area" "_O" en1)
- (setq tot_area (+ tot_area (getvar "area")))
- (setq nr (1+ nr))
- )
- (setq i 0 bclst nil pts nil)
- (repeat (sslength ss)
- (setq el (entget (ssname ss i)))
- (setq pts nil)
- (foreach pt el (if (= (car pt) 10) (setq pts (cons (cdr pt) pts))))
- (setq bclst (cons (qab pts) bclst));;;;;qab 为考虑方向子程
- (setq i (1+ i))
- );repeat
- (setq bc_new nil)
- (while bclst
- (setq m (car bclst)
- x1 (length bclst))
- (setq bclst (vl-remove m bclst))
- (setq x2 (length bclst))
- (setq n (- x1 x2))
- (setq bc_new (cons (list m n) bc_new))
- )
- (setq ii 0 text1 nil text2 nil text3 nil)
- (repeat (length bc_new)
- (setq a (caar (nth ii bc_new)))
- (setq b (cdar (nth ii bc_new)))
- (setq c (cadr (nth ii bc_new)))
- (setq text1 (strcat (rtos a 2 2) "*" (rtos b 2 2 ) "*" (rtos c 2 2)))
- (if (< ii (- (length bc_new) 1))
- (setq text1 (strcat text1 "+"))
- )
- (if (= ii 0)
- (setq text2 text1)
- (setq text2 (strcat text2 text1)))
- (setq ii (1+ ii))
- )
- (setq text2 (strcat text2 "=" (rtos tot_area 2 2)))
- ;(cond ((= method1 "1")
- (setq p2 (getpoint "\起始位置"))
- (setq p3 (polar p2 0 3000))
- (command "_.TEXT" "c" p2 "500" "0" text2)
- (princ))
- (defun qab (pts / a b);求边长,考虑方向
- (if (equal (cadr (car pts)) (cadr (cadr pts)) 0.1)
- (progn (setq a (distance (car pts) (cadr pts)))
- (setq b (distance (cadr pts) (caddr pts))))
- (progn (setq a (distance (cadr pts) (caddr pts)))
- (setq b (distance (car pts) (cadr pts)))))
- (cons (atof(rtos a 2 1)) (atof (rtos b 2 1)))
- )
- (defun qbc (pts / b h);求边长,不考虑方向
- (setq b (distance (car pts) (cadddr pts)))
- (setq h (distance (car pts) (cadr pts)))
- (setq b (atof (rtos b 2 1)))
- (setq h (atof (rtos h 2 1)))
- (cons (max b h) (min b h))
- );结束qbc
|