诡异的朦胧。。。
嘿一直在玩命令自定义等游戏,并开发了一个宏,该宏将把工作层更改为另一个基本上用于标注的层,然后在选择时将标注样式设置为另一个,最后生成一个标注,有效地为其前一个层创建一个统一的标注,最后切换回前一个层。所有工作正常,直到指定用于所述尺寸的指定层在图形中不存在,然后AutoCAD询问该怎么做。显然,为要创建的新层设计代码是有意义的,这很好,但我的问题是;当出现这样的问题时,宏可能需要满足两个分支中的一个,为了克服这种情况,将使用何种编码?我猜还有其他方法可以解决这个问题,比如总是要求在一个特定的名称下创建一个层,不管它是否存在,然后以这种方式成功,但一定有更好的方法吗?以下是我到目前为止的想法,请随意批评。
^C层_s“CSP_DIMS”-dimstyle;R、 \_dimaligned\\\_上一个图层
干杯,伙计们! 我会使用一个反应器来执行这类任务,从所有维度命令中做出反应。
嗯。有没有可能让我沉迷于这方面的信息?即使是一个链接或什么都可以。我对它有点陌生,CAD中的F1今天并不友好;[
对不起,我正在为你准备东西 好的,像这样:
(defun c:ReON ()
(vl-load-com)
(if (not *Dim:React*)
(progn
(setq *Dim:React*
(vlr-command-reactor nil
(list
(cons :vlr-CommandWillStart 'StrtComm)
(cons :vlr-CommandEnded 'EndComm)
(cons :vlr-CommandCancelled'CanComm))))
(if (not (tblsearch "LAYER" "CSP_DIMS"))
(vla-add
(vla-get-layers
(vla-get-ActiveDocument
(vlax-get-acad-object))) "CSP_DIMS"))
(princ "\n<<- Reactor Initiated ->>")))
(princ))
(defun StrtComm (React Args / *doc)
(setq old#lay (getvar "CLAYER"))
(if (wcmatch (strcase (car Args)) "DIM*")
(setvar "CLAYER" "CSP_DIMS")))
(defun EndComm (React Args)
(if (and old#lay
(wcmatch (strcase (car Args)) "DIM*"))
(setvar "CLAYER" old#lay)))
(defun CanComm (React Args)
(if (and old#lay
(wcmatch (strcase (car Args)) "DIM*"))
(setvar "CLAYER" old#lay)))
(defun c:ReOFF (/ old#lay)
(if *Dim:React*
(progn
(vlr-remove *Dim:React*)
(setq *Dim:React* nil)
(princ "\n<<- Reactor Deactivated ->>")))
(princ))
说明:
[列表]
[*]键入ReON以激活反应器。每个绘图任务只需要调用一次。
[*]绘制一些尺寸。
[*]如果要停用反应器,请键入ReOFF。
[/列表] 或者,也可以合并dimstyle:
(defun c:ReON ( )
(vl-load-com)
(setq *doc
(vla-get-ActiveDocument
(vlax-get-acad-object)))
(if (not *Dim:React*)
(progn
(setq *Dim:React*
(vlr-command-reactor nil
(list
(cons :vlr-CommandWillStart 'StrtComm)
(cons :vlr-CommandEnded 'EndComm)
(cons :vlr-CommandCancelled'CanComm))))
(if (not (tblsearch "LAYER" "CSP_DIMS"))
(vla-add
(vla-get-layers *doc) "CSP_DIMS"))
(if (not (tblsearch "DIMSTYLE" "Tester"))
(vla-add
(vla-get-Dimstyles *doc) "Tester"))
(princ "\n<<- Reactor Initiated ->>")))
(princ))
(defun StrtComm (React Args)
(setq old#lay (getvar "CLAYER"))
(if (wcmatch (strcase (car Args)) "DIM*")
(progn
(vl-catch-all-apply
(function
(lambda ( )
(vla-put-ActiveDimstyle *doc
(vla-item
(vla-get-Dimstyles *doc) "Tester")))))
(setvar "CLAYER" "CSP_DIMS"))))
(defun EndComm (React Args)
(if (and old#lay
(wcmatch (strcase (car Args)) "DIM*"))
(setvar "CLAYER" old#lay)))
(defun CanComm (React Args)
(if (and old#lay
(wcmatch (strcase (car Args)) "DIM*"))
(setvar "CLAYER" old#lay)))
(defun c:ReOFF (/ old#lay *doc)
(if *Dim:React*
(progn
(vlr-remove *Dim:React*)
(setq *Dim:React* nil)
(princ "\n<<- Reactor Deactivated ->>")))
(princ))
哇,'粗文字!我继续把上面的代码放到了我的acaddoc中。pgp文件,它确实像一个符咒。我现在的问题是,作为手动调用“REON”命令的替代方法,我是否可以将其合并到我的维度按钮中,这样每次单击按钮时它都会启动“REON”,这样我就不必记得运行它(当然,之后再次关闭它),这是否会因为后续发生的潜在错误而不利?此外,虽然您的回复确实解决了我的维度难题,但我想了解更多您用于获得此类结果的编码。显然,与我正在使用的过于简单的方法相比,这是一种更强大的方法。如果你能建议我进一步阅读这个主题,我将不胜感激。非常感谢你迄今为止给我的一切! 您只需要在绘图会话开始时调用reON一次,反应器将一直工作,直到调用reOFF或关闭绘图。
你可以把代码放进你的阿卡多克。lsp文件,并包括另一行:
(c:reON)
以便每次打开图形时都会启动反应器。
关于反应堆的信息,我认为AfraLISP有一些信息:
http://www.afralisp.net/vl/reactors1.htm
还要检查Visual LISP编辑器(VLIDE)帮助文件。
李 太棒了非常感谢,这又是一个骗局 没问题,
一个最终版本-这将在执行命令后重置旧的标注样式:
(defun c:ReON ( )
(setq *dim_lay* "CSP_DIMS";; <<-- Change these
*dim_sty* "Tester"
)
(vl-load-com)
(setq *doc
(vla-get-ActiveDocument
(vlax-get-acad-object)))
(if (not *Dim:React*)
(progn
(setq *Dim:React*
(vlr-command-reactor nil
(list
(cons :vlr-CommandWillStart 'StrtComm)
(cons :vlr-CommandEnded 'EndComm)
(cons :vlr-CommandCancelled'CanComm))))
(if (not (tblsearch "LAYER" *dim_lay*))
(vla-add
(vla-get-layers *doc) *dim_lay*))
(if (not (tblsearch "DIMSTYLE" *dim_sty*))
(vla-add
(vla-get-Dimstyles *doc) *dim_sty*))
(princ "\n<<- Reactor Initiated ->>")))
(princ))
(defun StrtComm (React Args)
(setq old#lay (getvar "CLAYER") old#sty (getvar "DIMSTYLE"))
(if (or (wcmatch (strcase (car Args)) "*DIM*")
(eq "QLEADER" (strcase (car Args))))
(progn
(vl-catch-all-apply
(function
(lambda ( )
(vla-put-ActiveDimstyle *doc
(vla-item
(vla-get-Dimstyles *doc) *dim_sty*)))))
(setvar "CLAYER" *dim_lay*))))
(defun EndComm (React Args)
(if (and old#lay old#sty
(wcmatch (strcase (car Args)) "DIM*"))
(progn
(vl-catch-all-apply
(function
(lambda ( )
(vla-put-ActiveDimstyle *doc
(vla-item
(vla-get-Dimstyles *doc) old#sty)))))
(setvar "CLAYER" old#lay)))
(princ))
(defun CanComm (React Args)
(if (and old#lay old#sty
(wcmatch (strcase (car Args)) "DIM*"))
(progn
(vl-catch-all-apply
(function
(lambda ( )
(vla-put-ActiveDimstyle *doc
(vla-item
(vla-get-Dimstyles *doc) old#sty)))))
(setvar "CLAYER" old#lay)))
(princ))
(defun c:ReOFF (/ old#lay old#sty *doc *dim_lay* *dim_sty*)
(if *Dim:React*
(progn
(vlr-remove *Dim:React*)
(setq *Dim:React* nil)
(princ "\n<<- Reactor Deactivated ->>")))
(princ))
填充顶部的表格。
要在会话中期更改配置,只需再次键入ReOn-这不会影响Reactor,但会影响层和样式选择。
如果要完全停用反应器,请键入reOff。
页:
[1]
2