AutoLisp例程帮助
大家好,这是我第一次以会员身份访问该网站。过去我从这个网站上收集了很多有用的信息,为此我感谢大家。我需要一个在任何地方都找不到的lisp例程,并且对lisp还不够熟悉,无法编写一个。所以基本上,我说的是‘救命!’
我画了一堆平面图案,其中我画了一堆小弧段和偏移线。偏移距离随我选择的每个连续弧长的长度而变化。现在,我必须选择“List”来获取弧长,然后在请求偏移距离时将其复制并粘贴到命令行中。听起来很简单,但当我处理一大堆事情时,它会变得乏味。我只想在要求偏移距离时能够拾取一条弧,偏移距离与拾取的弧长相同。有道理?
非常感谢任何人的帮助! 以下是一个简短而快速的计划:
(defun c:arcoff ( / en ex )
(while
(progn (setvar 'errno 0) (setq en (car (entsel "\nSelect Arc: ")))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (= 'ename (type en))
(if (= "ARC" (cdr (assoc 0 (setq ex (entget en)))))
(command "_.offset"
(*(cdr (assoc 40 ex))
(rem (+ pi pi (- (cdr (assoc 51 ex)) (cdr (assoc 50 ex)))) (+ pi pi))
)
en "\\" ""
)
(princ "\nObject is not an Arc.")
)
t
)
)
)
)
(princ)
) 欢迎来到CADTutor!
**编辑-按照惯例,李打败了我!哈哈,无论如何,至少这表明了一种选择。
尝试一下:
(vl-load-com)
(defun c:OFAM () (c:OffsetArcMultiple))
(defun c:OffsetArcMultiple (/ *error* eName acDoc oArc)
(princ "\rOFFSETARCMULTIPLE ")
(defun *error* (msg)
(if acDoc
(vla-endundomark acDoc)
)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(while (and (/= nil (setq eName (car (entsel "\nSelect arc to offset: "))))
(= "ARC" (cdr (assoc 0 (entget eName))))
)
(progn
(or
acDoc
(not
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
)
)
)
(vla-offset
(setq oArc (vlax-ename->vla-object eName))
(vla-get-arclength oArc)
)
(*error* nil)
)
)
)
谢谢大家!这些对于偏移弧段非常有用!我应该在我的请求中更具体一点-对不起,我实际上是想偏移一条单独的直线,但当被问及偏移距离时,我想为偏移距离选择一个弧段(见附件) 我建议如下:
[列表]
[*]偏移
[*]至
[*]
[*]多个
[*]选择弧端点。
[/列表] 谢谢李,我们快到了。当我选择两个端点时,它使用它们之间的直线距离,而不是实际弧长(见附件)。虽然这两个距离很近,但我需要在这些模式中非常精确,十行累积误差可以相加。
对不起,当然,我不知道我是怎么忽略了这个事实的。
尝试快速修改我以前的代码:
(defun c:arcoff ( / _select en ex )
(defun _select ( msg obj / en )
(while
(progn (setvar 'errno 0) (setq en (car (entsel msg)))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (= 'ename (type en))
(if (not (wcmatch (cdr (assoc 0 (entget en))) obj))
(princ "\nInvalid object selected.")
)
)
)
)
)
en
)
(if (setq en (_select "\nSelect Object to Offset: " "*LINE"))
(while (setq ex (_select "\nSelect Arc: " "ARC"))
(setq ex (entget ex))
(command "_.offset"
(*(cdr (assoc 40 ex))
(rem (+ pi pi (- (cdr (assoc 51 ex)) (cdr (assoc 50 ex)))) (+ pi pi))
)
en "\\" ""
)
(setq en (entlast))
)
)
(princ)
) 天哪,就是这样!!!!!谢谢李-它工作得很好,我应该在几年前发布这个。谢谢你们的帮助-我将永远感激!!
同时,您是否可以推荐一本专门的书来开始学习AutoLisp?
页:
[1]