除了“撤消”选项外,该选项在处理矩形多段线(正方形)时更好一些。
- (defun c:TesT (/ *error* acdoc e lst i j l d p1 p2 ang p3 p4)
- ;;===== TharwaT =====;;
- ;;===== 31.07.2011 =====;;
- (vl-load-com)
- (defun *error* (msg)
- (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
- (princ (strcat "\n** Error: " msg " **"))
- )
- (princ)
- )
- (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (if (not x)
- (setq x 1.0)
- )
- (if
- (and
- (setq e (car (entsel "\n Select a polyline : ")))
- (member (cdr (assoc 0 (entget e)))
- '("LWPOLYLINE" "POLYLINE")
- )
- (setq
- x (cond ((getdist (strcat "\n Specify the Depth distance <"
- (rtos x 2)
- "> :"
- )
- )
- )
- (atoi x)
- )
- )
- )
- (progn
- (vla-StartUndoMark acdoc)
- (setq lst (vl-remove-if-not
- (function (lambda (x)
- (eq (car x) 10)
- )
- )
- (entget e)
- )
- )
- (setq i 0
- j 1
- )
- (if (not (eq 4 (setq l (length lst))))
- (setq l (1- l))
- )
- (repeat l
- (setq
- d (distance
- (setq p1 (vlax-curve-getpointatparam e i))
- (setq p2 (vlax-curve-getpointatparam e (setq i (1+ i))))
- )
- )
- (setq ang (angle p1 p2))
- (entmakex
- (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- '(90 . 5)
- '(70 . 1)
- (cons 10 p1)
- (cons 10 p2)
- (cons 10 (setq p3 (polar p2 (- ang 1.5708) x)))
- (cons 10 (setq p4 (polar p3 (angle p2 p1) d)))
- )
- )
- )
- (vla-EndUndoMark acdoc)
- )
- (princ
- "\n You missed the Polyline or it's not a Polyline !! ... "
- )
- )
- (princ)
- )
Tharwat |