对于任何想制作李·麦克的vpoutline的人来说。lsp为这些奇怪的视口工作,从李的网页下载李的脚本,然后更改此功能:
- (defun c:vpo ( / *error* _lwvertices cen ent lst ocs vpe vpt vpt2)
- (defun *error* ( msg )
- (LM:endundo (LM:acdoc))
- (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
- (princ (strcat "\nError: " msg))
- )
- (princ)
- )
- (LM:startundo (LM:acdoc))
- (cond
- ( (/= 1 (getvar 'cvport))
- (princ "\nCommand not available in Modelspace.")
- )
- ( (setq vpt (LM:ssget "\nSelect viewport: " '("_+.:E:S" ((0 . "VIEWPORT")))))
-
- (setq vpt2 (ssname vpt 0))
- (setq vpt (entget vpt2))
- (if (setq ent (cdr (assoc 340 vpt)))
- (progn
- (if (member '(100 . "AcDb2dPolyline") (entget ent))
- (progn
- (setq lst (vpo:lw2dvertices (entnext vpt2)))
- )
- (progn
- (setq lst (vpo:lwvertices (entget ent)))
- )
- )
- )
- (progn
- (setq cen (mapcar 'list (cdr (assoc 10 vpt))
- (list
- (/ (cdr (assoc 40 vpt)) 2.0)
- (/ (cdr (assoc 41 vpt)) 2.0)
- )
- )
- lst (mapcar
- '(lambda ( a ) (cons (mapcar 'apply a cen) '(42 . 0.0)))
- '((- -) (+ -) (+ +) (- +))
- )
- )
- )
- )
- (setq vpe (cdr (assoc -1 vpt))
- ocs (cdr (assoc 16 vpt))
- )
- (entmake
- (append
- (list
- '(000 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length lst))
- '(070 . 1)
- '(410 . "Model")
- )
- (apply 'append
- (mapcar
- '(lambda ( x )
- (list (cons 10 (trans (pcs2wcs (car x) vpe) 0 ocs)) (cdr x))
- )
- lst
- )
- )
- (list (cons 210 ocs))
- )
- )
- )
- )
- (LM:endundo (LM:acdoc))
- (princ)
- )
... 并添加此额外功能:
- (defun vpo:lw2dvertices ( e / ent)
- (setq ent e)
- (setq e (entget e))
- (if (eq (assoc 42 e) nil)
- (progn
- ;;For whatever reason the first vertex is not to be used
- (if (setq e (member (assoc 10 e) e))
- (vpo:lw2dvertices (entnext ent))
- )
- )
- (progn
- (if (setq e (member (assoc 10 e) e))
- (cons
- (cons (cdr (assoc 10 e)) (assoc 42 e))
- (vpo:lw2dvertices (entnext ent))
- )
- )
- )
- )
- )
这是一个丑陋的黑客,但工作。谢谢lee mac提供的原始示例。 |