使用ActiveX(right?lol)深入到这里给出的第二个代码有点让我不知所措。
编辑:此外,最后一个选择是否会从多个选择中获取新的偏移线?假设我偏移了6条矩形多段线,我希望它抓住每一条新的偏移线并更改线型。对于这个应用程序,可能需要使用ActiveX代码。
实际上,im拍摄的目的是使用此命令所需的唯一用户干预将是选择对象。
(defun c:GPOFF (/ ss e)
(setq ss (ssget "_:L")
(command "_.offset" "3'-0" ss "_non" "0,0" "")
(setq e (entlast))
(command "_.chprop" e "" "_LTYPE" "DASHDOT" "")
(princ)
)
常见错误缺少括号“(”“)”
Tharwat搜索关键字“vla offset”的简单示例 非常感谢。这使命令得以运行,但不幸的是,它只偏移了最后选定的矩形。我假设这是因为我只使用命令标注。回到绘图板!
(defun c:GPOFF ( / ss e)
(setq ss (ssget "_:L"))
(command "_.offset" "3'" ss "_non" "0,0" "")
(setq e (entlast))
(command "_.chprop" e "" "_LTYPE" "DASHDOT" "")
(princ)
)
我取得了一些进步!我让它完全按照我想要的做,但它正在将原始选定的线更改为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)
)
更改为:
(foreach x ss (vla-put-linetype (car (vlax-invoke (revpl x) 'offset dist)) "DASHDOT"))
顺便提一下您应该检查DASHDOT是否已加载,否则程序将失败。
页:
1
[2]