偏移Lisp
大家好,我正在尝试编写一个lisp,让用户沿着路径绘制一条线,然后将线向每侧偏移3“,更改两条新线的层并删除原始线。我遇到的问题是使线偏移。我认为使线向每侧偏移的最简单方法是获得extmin和extmax,但这似乎不起作用。
有没有人有其他建议,或者我的代码中有错误?
(defun C:热迹()
(setq ext1(getvar“extmin”))
(setq ext2(getvar“extmax”))
(命令“pline”)
(while(>(getvar“CMDACTIVE”)0)(命令暂停)
(setq entity1(entget(entlast)))
(命令“OFFSET”e n 3 entity1 ext1“”)
(命令“CHANGE”l“p la”p-HEATTRACE“”)
(命令“OFFSET”e y 3 entity1 ext2)
(命令“CHANGE”l“p la”p-HEATTRACE“”)
(命令“擦除”实体1)
(普林斯)
)
非常感谢。 也许,如果您查看一些以前编写的lisp例程,这些例程提供了类似的函数,那么您就会发现实现这一点的方法。首先检查下面的类似螺纹。如果这不适合您,请使用上面的搜索选项和单词“offset”。 您可以绘制PLine,然后使用它:
http://lee-mac.com/doubleoffset.html 或者,考虑以下代码:
(defun c:test ( / layer doc eLast ent obj ) (vl-load-com)
;; Example by Lee Mac 2011-www.lee-mac.com
(setq layer"P-HEATTRACE"
doc (vla-get-ActiveDocument (vlax-get-acad-object))
)
(if (not (tblsearch "LAYER" layer)) (vla-Add (vla-get-Layers doc) layer))
(setq eLast (entlast))
(command "_.pline")
(while (= 1 (logand 1 (getvar 'CMDACTIVE))) (command pause))
(if
(and
(not (equal eLast (setq ent (entlast))))
(setq obj (vlax-ename->vla-object ent))
(vl-every
(function
(lambda ( d / l )
(if
(not
(vl-catch-all-error-p
(setq l
(vl-catch-all-apply 'vlax-invoke (list obj 'Offset d))
)
)
)
(mapcar '(lambda ( o ) (vla-put-Layer o layer)) l)
)
)
)
(list 3.0 -3.0)
)
)
(entdel ent)
)
(princ)
) http://www.cadtutor.net/forum/showthread.php?52810-查找LISP-routine-Multiple-Polyline-Offset 谢谢你们的帮助,伙计们。
李,我在发帖前四处搜索时遇到了你的doubleoffset。我的问题是我对视觉了解不够,无法编辑它。
您发布的测试示例正是我想要实现的。我想我需要学习视觉lisp。它看起来比autolisp强大一点。
再次感谢!
(仍不确定为什么无法使用autolisp调用偏移方向的变量…)
页:
[1]