Revision标记和云例程
我正在尝试创建lisp以:[列表=1]
[*]询问我正在处理的修订号:(setq RN)对于这个示例,我将使用8
[*]取该值并将其用于为修订标记(PE\U Rev8-Delta)创建图层名称
[*]使用该层插入修订增量
[*]将该值用于增量块中的属性。
[*]使用RN值为修订云(PE_Rev8-cloud)创建层名称,并将其置为当前
[*]启动revcloud命令。
[/列表]
我知道的问题是:
[列表]
[*]我不知道如何接受“RN”值并将其用作层名称创建的一部分。
[*]我不知道如何使插入比例因子(setq SF)成为dimscale(setq DS)时间的乘积。1(出于某种原因,我工作的公司将其所有块插入到dimscale的0.1处,似乎未来的任务应该是重新缩放主块…)
下面是我代码的一部分,我用红色文本和*s突出显示了我的问题区域。如果你看到其他我应该想到的东西,请告诉我。
感谢您的帮助和投入!
(defun c:PE_rev ()
(setq oldlayer (getvar "clayer"))
(setvar "cmdecho" 0)
; create revision tag layer then insert tag
;Get Revision number
(SETQ RN (GETREAL "Revision number"))
;**Problem 1** (COMMAND "_.LAYER" "M" "PE_Rev8-Delta" "C" "40" "PE_Rev8-Delta" "S" "PE_Rev8-Delta" "")
(SETQ DS (GETVAR "DIMSCALE"))
;**Problem 2** (SETQ SF (***))
(TERPRI)
(SETQ PT (GETPOINT "SELECT INSERTION POINT:"))
(TERPRI)
; (SETQ RA (GETPOINT "0"))
;
; EY_Rev is the revision tag symbol located at H:\Eng\a_blocks\Symbols;
;
(COMMAND "-INSERT" "EY_REV" "S" PT SF "" "" RN "" "0")) 1.(setq LN(strcat“PE_Rev”(rtos RN)“-Delta”);使用LN作为层名称;如果使用(rtos RN 2 0),它将返回一个整数,(rtos RN 2 1)将返回1个小数点。
2.(setq SF(*DS 0.1));SF将是dimscale的0.1倍,可以缩短为(*(getvar“dimscale”)0.1)
我没有用这些测试你的代码,但我认为应该可以 好的,我做了一些修改,以遵循我认为你说的,但我现在得到了一些其他问题。
[列表]
[*]当我对修订号问题回答24时,图层名为“PE_Rev2”-delta,delta中的数字为24.00000000000000
[*]有没有办法抑制我的标签中的小数点和14个0?
当我为rev#输入7时,我得到:
命令:pe\U rev
输入修订号:7
-图层
当前图层:“PE_外部参照”
输入选项
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck/Unlock
/状态]:M
输入新层的名称(成为当前层):
PE_Rev7.0000“-Delta
层名称无效。
; 错误:功能已取消
这是我的更新代码:
(defun c:PE_rev ()
(setq oldlayer (getvar "clayer"))
(setvar "cmdecho" 1)
; create revision tag layer then insert tag portion;;;;;;;;;;;;;;;;;;
;Get Revision number
(SETQ RN (GETREAL "Enter Revision number: "))
(Setq LND (strcat "PE_Rev"(rtos RN)"-Delta"))
; if you use (rtos RN 2 0) it will return an integer, (rtos RN 2 1)
(SETQ SF (* (getvar "dimscale") 0.1))
` (TERPRI)
(COMMAND "-LAYER" "M" LND "C" "40" LND "S" LND "")
(SETQ PT (GETPOINT "SELECT INSERTION POINT:"))
(TERPRI)
;
; EY_Rev is the revision tag symbol located at H:\Eng\a_blocks\Symbols;
(COMMAND "-INSERT" "H:\\Eng\\a_blocks\\Symbols\\EY_REV" PT SF "" "" RN)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Revision cloud portion;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; create revision layer then cloud
; (if (null (tblsearch "layer" "PE_revT-1"))
(Setq LNC (strcat "PE_Rev"(rtos RN)"-Cloud"))
(COMMAND "-LAYER" "M" LNCD "C" "40" LNC "S" LNC "")
(c:revcloud)
(setvar "clayer" oldlayer)
(princ)
) ^^^^^^^^^^^
或者,如果版本号中不需要小数点,请使用(getint)而不是(getreal),并使用(itoa)而不是(rtos)。
****编辑****
事实上如果使用(rtos RN 2 0),它将返回一个没有小数点的数字字符串,而不是整数
此外,我认为在代码的修订云部分中没有将LNCD设置为变量
****编辑****
现在我想起来了,为什么不尝试使用(setq RN(Getstring“Enter Revision Number:”)并一起消除(rtos)/(itoa)。 好了,就这样。。。
现在是最后几个问题:
[列表]
[*]我可以输入RN默认值到最后一个值吗,这样如果我连续做一堆,我就不必一直重新输入它了?
[*]当我开始和结束云时,我可以自动执行例程来选择标记上的中点osnap吗,还是应该等待并使用某种修剪功能来使用标记线修剪云?
[*]当我运行整个例程并完成云时,我不会切换回原始层。我不记得如何让它在完成REVCLOUD命令后采取下一步。
非常感谢您的帮助!
(defun c:PE_rev ()
(setq OL (getvar "clayer"))
(setvar "cmdecho" 1)
; create revision tag layer then insert tag portion;;;;;;;;;;;;;;;;;;
;Get Revision number
(SETQ RN (GETINT "Enter Revision number: "))
(Setq LND (strcat "PE_Rev"(itoa RN)"-Delta"))
; if you use (rtos RN 2 0) it will return an integer, (rtos RN 2 1)
(SETQ SF (* (getvar "dimscale") 0.1))
` (TERPRI)
(COMMAND "-LAYER" "M" LND "C" "40" LND "S" LND "")
(SETQ PT (GETPOINT "SELECT INSERTION POINT:"))
(TERPRI)
;
; EY_Rev is the revision tag symbol located at H:\Eng\a_blocks\Symbols;
(COMMAND "-INSERT" "H:\\Eng\\a_blocks\\Symbols\\EY_REV" PT SF "" "" RN)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Revision cloud portion;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; create revision layer then cloud
(Setq LNC (strcat "PE_Rev"(itoa RN)"-Cloud"))
; (if (null (tblsearch "layer" LNC))
(COMMAND "-LAYER" "M" LNC "C" "40" LNC "S" LNC "")
(comand revcloud)
(setvar "clayer" OL)
(princ)
) (定义c:PE_版本()
(初始错误)
(setvar“cmdecho”1)
; 创建修订标记层,然后插入标记部分;;;;;;;;;;;;;;;;;;
;获取修订号
(如果(null*GLOBALRN*)
(setq*GLOBALRN*1)
)
(initget 6)
(SETQ)
RN(GETINT
(STRCAT“输入修订号:”)
)
)
(如果(非RN)
(setq RN*GLOBALRN*)
(SETQ*GLOBALRN*RN)
)
(Setq LND(strcat“PE_Rev”(itoa RN)“-Delta”))
; 如果使用(rtos RN 2 0),它将返回一个整数,(rtos RN 2 1)
(SETQ SF(*(getvar“dimscale”)0.1))
`
(ERPI)
(命令“-LAYER“M”LND“C”40“LND”S“LND”)
(SETQ PT(GETPOINT“选择插入点:”))
(ERPI)
;
; EY\U Rev是位于H:\Eng\a\U块\符号处的修订标签符号;
(命令“-插入“H:\\Eng\\a\u blocks\\Symbols\\EY\u REV”
PT SF
"" ""
注册护士
)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;修订云部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 创建修订层,然后创建云线
(Setq LNC(strcat“PE_Rev”(itoa RN)“-云”)
; (if(null(tblsearch“layer”LNC))
(命令“-LAYER“M”LNC“C”40“LNC”S“LNC”)
(comand revcloud)
(while(>(getvar“CmdActive”)0)(命令暂停)
(重置)
(普林斯)
)
(defun initerr();初始化错误
(setq oldlayer(getvar“clayer”);保存设置
(setq oldsnap(getvar“osmode”))
(setq oldpick(getvar“pickbox”))
(设定温度*误差*);保存*错误*
(setq*错误*陷阱);重新分配*错误*
(普林斯)
) ;德芬
;;;*===========================================================
(defun陷阱(errmsg);定义陷阱
(命令nil nil nil)
(if(not(member errmsg’(“console break”“函数已取消”))
)
(princ(strcat“\n错误:“errmsg”);打印消息
)
;(命令“undo”“b”);撤消返回(这是RON可选的)
(setvar“clayer”oldlayer);重置设置
(setvar“blipmode”1)
(setvar“menuecho”0)
(setvar“highlight”1)
(setvar“osmode”oldsnap)
(setvar“pickbox”oldpick)
(原理“\n错误重置环境”);通知用户
(ERPI)
(setq*误差*温度);还原*错误*
(普林斯)
) ;德芬
;;;*===========================================================
(取消重置();定义重置
(setq*误差*温度);还原*错误*
(setvar“clayer”oldlayer);重置设置
(setvar“blipmode”1)
(setvar“menuecho”0)
(setvar“highlight”1)
(setvar“osmode”oldsnap)
(setvar“pickbox”oldpick)
(普林斯)
) ;德芬
;;; 对于您希望更好地在内部使用WIPEOUT的装饰
;;;你的街区 嗨,我想用威兹曼的Lisp程序,但我有两个问题,
1) 我不确定lisp如何将修订号传递给delta的块属性,因此我不确定如何为此创建修订块。
2) 一旦插入增量,脚本似乎就结束了,云永远不会被创建。
是否可以先绘制云,然后选择三角形的插入点?
谢谢
页:
[1]