我取得了一些进步!我让它完全按照我想要的做,但它正在将原始选定的线更改为DASHDOT以及新创建的偏移线。看看这个,我很难理解什么,如果有的话,变量指的是已经创建的新行。有人有什么建议吗?
- (defun c:test ( / ss->lst pairpts revpl dist ss )
- (vl-load-com)
- (defun ss->lst ( ss flag / id lst )
- (if (eq 'PICKSET (type ss))
- (repeat (setq id (sslength ss))
- (
- (lambda ( name )
- (setq lst
- (cons
- (if flag (vlax-ename->vla-object name)
- name
- )lst
- )
- )
- )(ssname ss (setq id (1- id)))
- )
- )
- )
- )
- (defun pairpts ( _list / l pt )
- (foreach x (reverse _list)
- (if pt
- (setq l (cons (cons x pt) l) pt nil)
- (setq pt (cons x pt))
- )
- ) l
- )
- (defun revpl ( vla-obj / catch openpl )
- (and (eq :vlax-false (setq openpl (vla-get-closed vla-obj)))
- (vla-put-closed vla-obj :vlax-true)
- )
- (setq catch
- (vl-catch-all-apply (function vlax-invoke)
- (list vla-obj
- 'offset (vla-get-length vla-obj)
- )
- )
- )
- (and (eq :vlax-false openpl)
- (vla-put-closed vla-obj :vlax-false)
- )
- (if (vl-catch-all-error-p catch)
- (vlax-put vla-obj 'coordinates
- (apply (function append)
- (reverse
- (pairpts (vlax-get vla-obj 'coordinates))
- )
- )
- ) (and catch (vla-delete (car catch)))
- )
- vla-obj
- )
- (if (and (setq dist (distance '(0.0 0.0) '(36.0 0.0)))
- (setq ss (ss->lst (ssget '((0 . "lwpolyline"))) t)))
- (foreach x ss
- (vla-put-linetype x "DASHDOT")
- (car
- (vlax-invoke (revpl x)
- 'offset dist
- )
- )
- )
- ) (princ)
- )
|