114
1万
中流砥柱
使用道具 举报
8
50
42
初来乍到
;;;=======================================================;;;=======================================================;;;;;; FUNCTION: Area Division (AreaDiv.lsp);;; Calculates the area of a partitioned region.;;;;;; AUTHOR;;; Copyright © 2009 Lee McDonnell;;; (contact Lee Mac, CADTutor.net);;;;;; VERSION;;; 1.0 ~ 23.03.2009;;;;;;=======================================================;;;=======================================================(defun c:ADiv (/ *error* vlst ovar doc spc cEnt ParamLst vpt cCur cAng clen grlist arpt spt pt1 pt2 iLin iArr iLst ptLst plst stpar vpts aPly int1 int2 2vpts bPly ObjArr Regs aReg bReg tCenLst tCen tht Area_text) (vl-load-com) (defun *error* (msg) (grtext) (redraw) (if ovar (mapcar 'setvar vlst ovar)) (if (not (member msg '("Function cancelled" "quit / exit abort"))) (princ (strcat "\n<!> Error: " (strcase msg) " <!>"))) (princ)) (setq vlst '("CMDECHO" "OSMODE") ovar (mapcar 'getvar vlst)) (mapcar 'setvar vlst '(0 0)) (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)) spc (if (zerop (vla-get-activespace doc)) (if (= (vla-get-mspace doc) :vlax-true) (vla-get-modelspace doc) (vla-get-paperspace doc)) (vla-get-modelspace doc))) (if (and (setq cEnt (entsel "\nSelect Edge for Segregation: ")) (eq "LWPOLYLINE" (cdadr (entget (car cEnt))))) (progn (setq vpt (osnap (cadr cEnt) "_nea") cCur (vlax-ename->vla-object (car cEnt)) cAng (angle '(0 0 0) (vlax-curve-getFirstDeriv cCur (vlax-curve-getParamAtPoint cCur vpt)))) (setq clen (distance (vlax-curve-getPointatParam cCur (fix (vlax-curve-getParamAtPoint cCur vpt))) (vlax-curve-getPointatParam cCur (1+ (fix (vlax-curve-getParamAtPoint cCur vpt)))))) (setq ParamLst (mapcar '(lambda (cVert) (vlax-curve-getParamAtPoint cCur cVert)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget (car cEnt)))))) (grtext -1 "Select Area Segregation...") (while (= 5 (car (setq grlist (grread t 1)))) (redraw) (if (= 'list (type (setq arpt (cadr grlist)))) (progn (setq spt (vlax-curve-getClosestPointto cCur arpt) pt1 (polar spt cAng (/ clen 3.0)) pt2 (polar spt cAng (/ clen -3.0))) (grdraw pt1 pt2 3)))) (setq iLin (vla-Addline spc (vlax-3D-point spt) (vlax-3D-point (polar spt cAng clen))) iArr (vlax-variant-value (vla-IntersectWith iLin cCur acExtendThisEntity))) (if (> (vlax-safearray-get-u-bound iArr 1) 0) (progn (setq iLst (vlax-safearray->list iArr)) (while (not (zerop (length iLst))) (setq ptLst (cons (list (car iLst) (cadr iLst) (caddr iLst)) ptLst) iLst (cdddr iLst))) (and (vla-delete iLin) (setq iLin nil)) (if (> (length ptlst) 1) (progn (setq plst (vl-sort (list (setq int1 (vlax-curve-getParamAtPoint cCur (car ptLst))) (setq int2 (vlax-curve-getParamAtPoint cCur (cadr ptLst)))) '<) stpar (1+ (fix (car plst)))) (while (< stpar (cadr plst)) (setq plst (append plst (list stpar)) stpar (1+ stpar))) (setq plst (vl-sort plst '<) vpts (apply 'append (mapcar '(lambda (x) (list (car x) (cadr x))) (mapcar '(lambda (p) (vlax-curve-getPointatParam cCur p)) plst)))) (setq vpts (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length vpts)))) vpts))) (setq aPly (vla-AddLightWeightPolyline spc vpts)) (vla-put-closed aPly :vlax-true) (setq ParamLst (vl-sort (append (vl-remove-if '(lambda (param) (member param plst)) ParamLst) (list int1 int2)) '<) 2vpts (apply 'append (mapcar '(lambda (x) (list (car x) (cadr x))) (mapcar '(lambda (p) (vlax-curve-getPointatParam cCur p)) ParamLst)))) (setq 2vpts (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length 2vpts)))) 2vpts))) (setq bPly (vla-AddLightWeightPolyline spc 2vpts)) (vla-put-Closed bPly :vlax-true)