帮我解决这个关于DI的口齿不清的问题
你好谁能帮我让这个Lisp程序的工作。
在*DIM*命令中,lisp应转到您选择的层(按1或2)。
放置尺寸后,图层应返回到选择“DIM”命令之前的图层。
这是现在的代码。
; AFKORTINGEN VAN DE VARIABELEN
;ADDL Automatic dimension layer
;****************************************************************************
(defun CommandReactor:Start ()
(or *CommandReactor*
(setq *CommandReactor*
(vlr-command-reactor
nil
'(
(:vlr-commandcancelled . CommandReactor:CommandEnded)
(:vlr-commandended . CommandReactor:CommandEnded)
(:vlr-commandfailed . CommandReactor:CommandEnded)
(:vlr-commandwillstart . CommandReactor:CommandWillStart)
)
)
)
)
(prompt "\nCommand reactor loaded. ")
(princ)
)
;****************************************************************************
(defun CommandReactor:CommandEnded (rea cmd)
(if (and *OldClayer*
(wcmatch (strcase (car cmd)) "*DIM*")
)
(progn
(setvar 'clayer *OldClayer*)
(setq *OldClayer* nil)
)
)
)
;****************************************************************************
(defun CommandReactor:CommandWillStart (rea cmd)
(if (wcmatch (strcase (car cmd)) "*DIM*")
(progn
(setq *OldClayer* (getvar 'clayer))
(vla-add
(vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
; Kiezen van de DIM layer
(setq ADDL 0)
(while (or (< ADDL 1) (> ADDL 2))
(setq ADDL (getint "\nInput the DIM layer: Dim. (1), Dim. front (2): ")))
) ; end while
;ADDL = 1, Dimension layer
(if (= ADDL 1)
(progn
(command "_layer" "_m" "S-DIMENSIONS" "_c" "3" "" "")
); progn
); if (=ADDL 1)
;ADDL = 2, Dimension front layer
(if (= ADDL 2)
(progn
(command "_layer" "_m" "S-DIMENSIONS front" "_c" "3" "" "")
); progn
); if (=ADDL 2)
(setvar 'clayer *OldClayer*)
)
)
)
;****************************************************************************
(CommandReactor:Start)
(princ)
;****************************************************************************
;****************************************************************************
;****************************************************************************
;****************************************************************************
请帮忙!
谢谢 欢迎来到CADTutor。
你可能会有兴趣看看下面李的gem。
http://www.lee-mac.com/layerdirector.html
李的精彩网站是我最喜欢的网站之一。
谢谢李! 非常感谢。
我贴出的Lisp程序与李的Lisp程序原则相同。
我搜索的唯一“额外”是当你激活时,一个DIM命令,你可以选择一个数字,它会给你数字后面的层。
如果你加载我发布的LISP,你就会明白我的意思。
唯一的问题是Lisp程序或缺少什么,我不知道是什么。
我希望有人能在这方面帮助我。 我仍然需要帮助。 在这里,我对其进行了一些修改:
希望这是你需要的。。。
M、 R。 你好
虽然我认为这不是一个好的方式来使用反应堆这样的任务,但这取决于你们。
注:
[列表]
[*]最好将表示命令名称的字符串从*DIM*更改为所需的命令名称,因为使用当前字符串,即使调用命令DymStyle,也会触发reactor。
[*]不能对反应堆使用命令调用。
[/列表]
这是我的修改,以处理我认为的所有事件,当你不再需要反应堆时,用一个函数结束反应堆。
(vl-load-com)
;; Author: Tharwat Al Shoufi ;;
;; Date: 09.May.2016 ;;
(defun c:CommandReactorStart nil
(or *CommandReactor*
(setq *CommandReactor*
(vlr-command-reactor
nil
'(
(:vlr-commandcancelled . CommandReactor:CommandBroken)
(:vlr-commandended . CommandReactor:CommandEnded)
(:vlr-commandfailed . CommandReactor:CommandBroken)
(:vlr-commandwillstart . CommandReactor:CommandWillStart)
)
)
)
)
(prompt "\nCommand reactor Started.")
(princ)
)
;; ;;
;; ;;
(defun c:CommandReactorEnd nil
(if *CommandReactor*
(vlr-remove *CommandReactor*)
)
(prompt "\nCommand reactor Disabled !")
(princ)
)
;; ;;
;; ;;
(defun CommandReactor:CommandEnded (rea cmd)
(if (and *OldClayer*
(tblsearch "LAYER" *OldClayer*)
(wcmatch (strcase (car cmd)) "*DIM*")
)
(progn
(setvar 'clayer *OldClayer*)
(setq *OldClayer* nil)
)
)
(princ)
)
;; ;;
;; ;;
(defun CommandReactor:CommandBroken (rea cmd)
(if (and *OldClayer*
(tblsearch "LAYER" *OldClayer*)
)
(progn
(setvar 'clayer *OldClayer*)
(setq *OldClayer* nil)
)
)
(princ)
)
;; ;;
;; ;;
(defun CommandReactor:CommandWillStart (rea cmd / lay new name)
(if
(and (wcmatch (strcase (car cmd)) "*DIM*")
(setq *OldClayer* (getvar 'clayer))
(progn
(while (not (and (setq lay
(getint
"\nInput the DIM layer: Dim. (1), Dim. front (2): "
)
)
(< 0 lay 3)
)
)
(alert "\nNumber must be (1) or (2):")
)
lay
)
(setq
new (vla-add (vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
(if (eq lay 1)
(setq name "S-DIMENSIONS")
(setq name "S-DIMENSIONS front")
)
)
)
)
(progn
(vla-put-color new AcGreen)
(setvar 'clayer name)
)
)
(princ)
)
;; ;;
(c:CommandReactorStart)
(princ "\nType CommandReactorStart activate the reactor and CommandReactorEnd to Deactivate")
@塔瓦特
首先,谢谢你!这正是我想要的。
第二,你说这不是一个好方法是什么意思?
你还有什么建议?
再次感谢!
@马尔科·里巴
也谢谢!但在执行连续命令时,有一个小问题。
致以诚挚的问候!
太好了,非常欢迎你。
在我看来,最好的选择是让反应堆在没有用户干预的情况下在后台完成工作,但在您的情况下,您正在中断功能,询问用户有关表示层名称的关键字。
因此,您也可以编写一个简单的例程,要求用户指定三个点,如果创建DimLinear或DimAligned,则可以使用与要求用户为层名称指定数字1或2相同的方式,并且根本不需要reactor。
正如您可能知道的那样,命令名:dimstyle有一个短关键字来调用这个命令,它是d,所以运行我上面发布的代码并点击d,反应器将被触发,并要求您指定数字1或2。因此,这是另一个比reactor更简单的例程的问题,除非将完整的命令名修改为reactor的代码。
你是在第一篇帖子中写这些代码的人吗?
快乐的编码。 不,我在第一篇文章中没有写代码。
我在网上的某个地方找到了这个。
我试图理解你在说什么,但我计划参加课程,学习编写LISP或vb。所以我希望我能理解
我可以问你,如果我想添加另一个附加了另一层的数字,我应该怎么做吗?
谢谢 我可以先问一下你在创建什么样的维度吗?
添加一个数字并不难,但我计划用另一个简单的例程更改反应堆代码。
当你运行我上面发布的代码时,你是否试图点击d?你收到了什么信息?
页:
[1]
2