;; | ---------------------------------------------------------------------------- ;; | PL_MapMask ;; | ---------------------------------------------------------------------------- ;; | Function : Creates an Opaque mask out of polylines and/or Circles by turning ;; | them into REGION entities. ;; | Author : Rakesh Rao ;; | Argument : 'ss' - The selection set to be the mask boundaries. ;; | The selection set can contain LINEs, POLYLINEs and CIRCLEs. ;; | LINEs will be Offset by corridor width ;; | POLYLINEs, if open will be Offset by corridor width ;; | POLYLINEs, if closed will not be Offset and taken as such. ;; | CIRCLEs will be used a such. ;; | 'Scl' - Scale for masking ;; | 'Upoly' - flag to determine if Universal polygon required or not. ;; | None ;; | Action : Returns the name of the REGION entity created which is the mask at ;; | an elevation of 10000 for the entities underlying. ;; | Updated : April 23, 1998 ;; | Comment : This function can be used to either mask a certain portion of the ;; | drawing from being viewed or the other way round i.e mask the rest ;; | of the drawing from being viewed except the areas specified. ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun PL_MapMask (ss Scl UPoly / Lst ssl ename entl cnt elast la pt1 pt2 vlist vlist1 vlist2 p11 p12 p21 p22 ename1 ename2 Rss elast1 ss1 en flag OS ) (setq ename nil) (if ss (progn (setq OS (getvar "OSMODE")) (setvar "OSMODE" 0) (LA_mk_c_lyr "0" "") (if UPoly (progn (setq Lst (scrext) pt1 (car Lst) pt2 (cadr Lst) ) (command "._Pline" pt1 (list (car pt1) (cadr pt2) 0.0) pt2 (list (car pt2) (cadr pt1) 0.0) "_Close" "_Region" (entlast) "" ) (setq UPoly (entlast)) )) (setq ssl (sslength ss) Rss (ssadd) cnt 0 ) (repeat ssl (setq ename (ssname ss cnt) entl (entget ename) en (LI_item 0 entl) cnt (1+ cnt) ) (cond ((= en "CIRCLE") (command "._Region" ename "") (ssadd (entlast) Rss) ) ((member en (list "LINE" "POLYLINE")) (if (= en "LINE") (setq flag 0 vlist (list (LI_item 10 entl) (LI_item 11 entl))) (setq flag (LI_item 70 entl) vlist (PL_plist ename)) ) (if (zerop (logand flag 1)) (progn (LA_mk_c_lyr "0" "") (command "._Mline" "_Justification" "_Zero" "_Scale" Scl) (foreach pt vlist (command pt)) (command "") (setq elast (MI_xentlast)) (command "._Explode" (entlast)) (setq ss1 (MI_after elast) ss1 (PL_PlJoin ss1 nil) ) (if (and ss1 (= (sslength ss1) 2)) (progn (setq vlist1 ( PL_plist (ssname ss1 0) ) vlist2 ( PL_plist (ssname ss1 1) ) p11 (nth 0 vlist1) p12 (nth (1- (length vlist1) ) vlist1) p21 (nth 0 vlist2) p22 (nth (1- (length vlist2) ) vlist2) ) (command "._Line" p11 p21 "") (setq ename1 (entlast)) (command "._Line" p12 p22 "") (setq ename2 (entlast)) (command "._Pedit" (ssname ss1 0) "_Join" (ssname ss1 1) ename1 ename2 "" "_X" "._Pedit" (entlast) "_Close" "_X" ) (setq elast (entlast)) (command "._Region" (entlast) "") (setq elast1 (entlast)) (if (not (equal elast elast1)) (ssadd elast1 Rss) ) )) ) (progn (command "._Region" ename "") (ssadd (entlast) Rss) )) ) ) ) (setq elast (entlast) ssl (sslength Rss) ) (if (> ssl 1) (command "._Union" Rss "")) (setq elast1 (entlast)) (if UPoly (progn (if (not (equal elast elast1)) (command "._Subtract" UPoly "" elast1 "") (command "._Subtract" UPoly "" (ssname Rss 0) "") ) )) (setq ename (entlast)) (command "._Move" ename "" (list 0.0 0.0 10000.0) "") (setvar "OSMODE" 0) )) ename )