
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi folks,
I would like to ByPass the user input for selection of Regions to be converted to Polyline in the following LISP:
(defun c:Region2Polyline nil
(if (setq ss (ssget '((0 . "REGION"))))
(:Region2Polyline ss))
(princ)
)
;; Gilles Chanteau- 01/01/07
(defun :Region2Polyline (ss / *error* arcbugle acdoc space
n reg norm expl olst blst dlst plst tlst blg pline)
;-----
(defun *error* (msg)
(if (/= msg "Function cancelled")
(princ (strcat "\nError: " msg)))
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(princ))
;-----
(defun arcbulge (arc)
(/ (sin (/ (vla-get-TotalAngle arc) 4))
(cos (/ (vla-get-TotalAngle arc) 4))))
;-----
;-----
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
space (if (= 1 (getvar "CVPORT"))
(vla-get-PaperSpace acdoc)
(vla-get-ModelSpace acdoc)))
(if ss
(repeat (setq i (sslength ss))
(setq reg (vlax-ename->vla-object (ssname ss (setq i (1- i))))
norm (vlax-get reg 'Normal)
expl (vlax-invoke reg 'Explode))
(if (vl-every '(lambda (x) (or (= (vla-get-ObjectName x) "AcDbLine")
(= (vla-get-ObjectName x) "AcDbArc")))
expl)
(progn
(vla-delete reg)
(setq olst (mapcar '(lambda (x) (list x (vlax-get x 'StartPoint) (vlax-get x 'EndPoint)))
expl))
(while olst
(setq blst nil)
(if (= (vla-get-ObjectName (caar olst)) "AcDbArc")
(setq blst (list (cons 0 (arcbulge (caar olst))))))
(setq plst (cdar olst)
dlst (list (caar olst))
olst (cdr olst))
(while (setq tlst (vl-member-if '(lambda (x) (or (equal (last plst) (cadr x) 1e-9)
(equal (last plst) (caddr x) 1e-9)))
olst))
(if (equal (last plst) (caddar tlst) 1e-9)
(setq blg -1)
(setq blg 1))
(if (= (vla-get-ObjectName (caar tlst)) "AcDbArc")
(setq blst (cons (cons (1- (length plst))
(* blg (arcbulge (caar tlst)))
)
blst)))
(setq plst (append plst
(if (minusp blg)
(list (cadar tlst))
(list (caddar tlst))))
dlst (cons (caar tlst) dlst)
olst (vl-remove (car tlst) olst)))
(setq pline (vlax-invoke Space 'addLightWeightPolyline (apply 'append (mapcar '(lambda (x)
(setq x (trans x 0 Norm))
(list (car x) (cadr x)))
(reverse (cdr (reverse plst)))))))
(vla-put-Closed pline :vlax-true)
(mapcar '(lambda (x) (vla-setBulge pline (car x) (cdr x))) blst)
(vla-put-Elevation pline (caddr (trans (car plst) 0 Norm)))
(vla-put-Normal pline (vlax-3d-point Norm))
(mapcar 'vla-delete dlst)))
(mapcar 'vla-delete expl)))
)
)
(c:Region2Polyline)
Is there any way to just load this LISP, being executed for ALL regions without any user input? I've added "(c:Region2Polyline)", but it only loads the command still needing the user to type "all" to select all regions to be converted to polylines. I would like to ByPass this extra input. Thanks!
Solved! Go to Solution.