请尝试:
- (defun c:RowAreas (/ lent ldat ss tcirc subss
- total test subss_lst clst rad
- flag new_xxlst listrowdia finallist
- subss_lst Rad areaobj cLst jsx_ename dxf_ent)
- (vl-load-com)
- (if (and (setq lEnt (car (entsel "\nSelect Vertical Line: ")))
- (eq "LINE" (cdadr (entget lEnt))))
- (progn
- (setq lDat (list (cdr (assoc 10 (entget lEnt)))
- (cdr (assoc 11 (entget lEnt)))))
- (princ "\n\nLEFT:\n")
- (repeat 2
- ;(SETQ TEST 1);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (if (setq ss (ssget "_X" (list '(0 . "CIRCLE")(cons -4 (if flag ">=,*,*" "<=,*,*"))
- (cons 10
- (append
- (list
- (apply
- (if flag 'max 'min)
- (mapcar 'car lDat)))
- '(0 0))))))
- (PROGN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (while (not (zerop (sslength ss)))
- (setq dxf_ent (entget (setq jsx_ename (ssname ss 0))))
- (setq tCirc (ssname ss 0))
- (if (setq subSs (ssget "_X" (list (cons 0 "CIRCLE")
- (cons -4 (if flag ">=,=,*" "<=,=,*"))
- (cons 10
- (append
- (list
- (apply
- (if flag 'max 'min)
- (mapcar 'car lDat)))
- (cddr (assoc 10 (entget tCirc))))))))
- (progn
- (setq total 0.0)
- (foreach ent (setq new_xxlst
- (mapcar 'cadr
- (ssnamex subSs)))
- (setq areaobj (vla-get-area
- (vlax-ename->vla-object ent))
- total (+ total areaobj))
- );foreach
- (setq cLst
- (vl-sort
- (mapcar '(lambda (x) (cdr (assoc 10 (entget x)))) new_xxlst)
- '(lambda (x1 x2) (< (car x1) (car x2))));centrepoint
- Rad
- (vl-sort
- (mapcar '(lambda (x) (cdr (assoc 40 (entget x)))) new_xxlst)
- '(lambda (r1 r2) (> r1 r2))));radius
- (setq ListRowDia (cons (append (list (caddr (assoc 10 (entget (car new_xxlst))))) Rad) ListRowDia))
- (mapcar '(lambda (x) (ssdel x ss)) new_xxlst)
- );progn
- );if
- (ssdel jsx_ename ss)
- );while
- (SETQ TEST 1);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (foreach x (mapcar 'cdr (vl-sort ListRowDia '(lambda (x1 x2) (< (car x1) (car x2)))))
-
- (setq FinalList (cons (list test x) FinalList) test (1+ test))
- );foreach
- (PRINC (VL-PRINC-TO-STRING FINALLIST))(SETQ FINALLIST NIL LISTROWDIA NIL);;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- );PROGN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- );if
- (and (not flag) (princ "\n\nRIGHT:\n"))
- (setq flag T)
- );repeat
- );progn
- (princ "\n<!> No Line Selected <!>")
- );if-->for dividing line
- (princ )
- );defun
|