本帖最后由 ZZXXQQ 于 2014-11-29 08:40 编辑
找规律,分面积 - ;零件分组 明经 ZZXXQQ 2014.11.20
- (defun c:tt ()
- (setvar "CMDECHO" 0)
- (vl-load-com)
- (if (setq ss (ssget "X" '((0 . "ARC,LINE")(62 . 2)))) (progn
- (setq s1 (entlast) sslst (list))
- (command "_.PEDIT" "M" ss "" "Y" "J" "0.02" "")
- (if (setq ss (ssget "X" '((0 . "LWPOLYLINE") (90 . 4)))) (progn
- (repeat (setq i (sslength ss))
- (setq en (ssname ss (setq i (1- i))))
- (vla-getboundingbox (vlax-ename->vla-object en) 'p1 'p2)
- (setq p1 (vlax-safearray->list p1) p2 (vlax-safearray->list p2))
- (setq p1 (mapcar '- p1 '(15 25)) p2 (mapcar '+ p2 '(10 25)))
- (command "_.ERASE" "C" p1 p2 "")
- )
- ))
- (while (setq s1 (entnext s1)) (setq sslst (cons s1 sslst)))
- (setq arealst (mapcar '(lambda (x) (vlax-curve-getArea(vlax-ename->vla-object x))) sslst))
- (setq alst (mapcar 'list arealst sslst))
- (setq alst (vl-sort alst '(lambda (a b) (< (car a) (car b)))))
- (setq tmplst (list))
- (setq aren (car alst))
- (setq ar (car aren))
- (setq enlst (cdr aren))
- (setq i 1)
- (foreach x (cdr alst)
- (setq ttlst (list i (cdr x)))
- (if (equal ar (car x) 1e-5)
- (setq i (1+ i) enlst (append enlst (cdr x)))
- (setq tmplst (append tmplst (list(list i enlst))) i 1 enlst (cdr x) ar (car x) ttlst (list))
- )
- )
- (setq tmplst (append tmplst (list(list i enlst))))
- (setq j 0)
- (foreach x tmplst
- (setq n (car x) j (1+ j))
- (foreach y (cadr x)
- (vla-getboundingbox (vlax-ename->vla-object y) 'pt1 'pt2)
- (setq pt1 (vlax-safearray->list pt1))
- (setq pt2 (vlax-safearray->list pt2))
- (setq pt (mapcar '-
- (mapcar '(lambda (a b) (/ (+ a b) 2)) pt1 (list (car pt2) (cadr pt1))) '(0 20)))
- (command "_.TEXT" "S" "Arial" "M" pt "2.5" "0"
- (strcat "%%U共" (itoa n) "件,编号" (itoa j) "%%U"))
- )
- )
- ))
- (setvar "CMDECHO" 1)
- (princ)
- )
|