LISP2LEARN 发表于 2022-7-6 09:15:38

需要现场帮助

如何在每次设置新绘图页时都不运行代码的情况下,自动更新绘图页上SNUM和缝合的字段值(基于fieldeval)。文件应为“A.1.1一楼平面图.dwg”。谢谢
 
示例代码:
(DEFUN c:TEST ()
(vl-load-com)
(setq DNAME (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 4)))
(setq SNUM (substr dname 1 (vl-string-search " " dname)))
(setq STITLE (substr DNAME (+ (vl-string-search " " dname) 2) 99))
(princ)
)

Lee Mac 发表于 2022-7-6 09:39:06

UPDATEFIELD命令?

LISP2LEARN 发表于 2022-7-6 09:48:57

是的,李。谢谢SNUM和STITLE仅存储第一张纸的值,而不存储在第二张纸上。这是我一直在做的过程。
 
1、新建一张图纸,命名为“a.1.1一层平面图”。
运行例程,将SNUM和STITLE变量作为字段插入并保存图形。
 
2、使用“另存为”创建新图纸“a.1.2二层平面图”。
 
3.运行例程,使SNUM和STITLE得到更新,并使用UPDATEFIELD命令
更新图形上的字段值。
 
4.执行第2步和第3步,直到完成绘图页的设置。
 
有没有办法跳过第3步?保存图形时自动更新字段值(fieldeval=2)。
我尝试了diesel,但没有成功,因为我们有一个糟糕的命名约定“Project#a-1-1 SheetName”。我需要正确地输入DNAME,以便正确显示SNUM。
基于我们的标准。

Lee Mac 发表于 2022-7-6 09:57:36

哦,我明白了-您正在字段表达式中使用LISP变量。这并不理想,因为变量只会保留在活动的绘图任务中,因此如果没有运行LISP(例如在客户端计算机上),字段将无法正确显示。
 
我无法立即找到使用DIESEL对字段进行编码的方法,因此我可以看到的唯一替代方法是使用命令reactor运行LISP程序,在保存之前更新变量。
 
请注意,您的代码可以更改为该值,因为如果图形名称不包含空格,则当前会出错。
 

(defun c:test ( / name pos )
   (setq name (vl-filename-base (getvar 'DWGNAME)))
   (if (setq pos (vl-string-search " " name))
       (setq snum   (substr name 1 pos)
             stitle (substr name (+ pos 2))
       )
   )
   (princ)
)
(vl-load-com)

LISP2LEARN 发表于 2022-7-6 10:15:37

谢谢你给李的小费,我会继续的。再次感谢。

Lee Mac 发表于 2022-7-6 10:20:13

 
如果“项目#”是固定长度,则可以使用DIESEL,但这是一个相当弱的假设。
 
例如,如果“项目#”的长度为8:
 

$(substr,$(getvar,DWGNAME),1,

$(substr,$(getvar,DWGNAME),10,$(-,$(strlen,$(getvar,DWGNAME)),13))
页: [1]
查看完整版本: 需要现场帮助