yrnomad 发表于 2022-7-6 09:45:29

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"))

lpseifert 发表于 2022-7-6 09:56:20

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)
 
我没有用这些测试你的代码,但我认为应该可以

yrnomad 发表于 2022-7-6 10:09:05

好的,我做了一些修改,以遵循我认为你说的,但我现在得到了一些其他问题。
 
[列表]
[*]当我对修订号问题回答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)
)

lpseifert 发表于 2022-7-6 10:18:23

^^^^^^^^^^^
 
或者,如果版本号中不需要小数点,请使用(getint)而不是(getreal),并使用(itoa)而不是(rtos)。
 
****编辑****
 
事实上如果使用(rtos RN 2 0),它将返回一个没有小数点的数字字符串,而不是整数
 
此外,我认为在代码的修订云部分中没有将LNCD设置为变量
 
****编辑****
 
现在我想起来了,为什么不尝试使用(setq RN(Getstring“Enter Revision Number:”)并一起消除(rtos)/(itoa)。

yrnomad 发表于 2022-7-6 10:35:05

好了,就这样。。。
 
现在是最后几个问题:
 
[列表]
[*]我可以输入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)
)

wizman 发表于 2022-7-6 10:42:33

(定义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的装饰
;;;你的街区

p0026376 发表于 2022-7-6 10:49:41

嗨,我想用威兹曼的Lisp程序,但我有两个问题,
 
1) 我不确定lisp如何将修订号传递给delta的块属性,因此我不确定如何为此创建修订块。
2) 一旦插入增量,脚本似乎就结束了,云永远不会被创建。
 
是否可以先绘制云,然后选择三角形的插入点?
 
谢谢
页: [1]
查看完整版本: Revision标记和云例程