Muthanna 发表于 2022-7-5 21:35:07

读取属性值为bei

大家好,
我是一名软件开发人员,我用C++和Java编程,但最近我接到一项任务,帮助我们的工程部门编写一些代码+脚本,以修复他们遇到的cad打印问题。
 
我们的问题是使用第三方应用程序生成AutoCad图形。第三部分应用程序将dimscale设置为1:000;但图形的标题栏比例属性具有正确的比例值。
 
我的任务是用lisp和我们的脚本编写代码来自动化这个过程;这将需要程序读取比例属性的值,并将其应用于图形dimscale。
 
在阅读了一些教程并搜索了网页后,我浏览了一些完成大部分任务的功能。。。感谢这个社区及其论坛。
 
我的主函数读取从其中一个线程获得的属性值,如下所示:
 
(defun c:AttLst (/ ss eLst bEnt aEnt aEntLst aVal blkLst)
(vl-load-com)
(if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 66 1)
(if (getvar "CTAB")
(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(foreach e eLst
(setq bEnt (cdr (assoc 2 (entget e)))
aEnt (entnext e))
(while (= "ATTRIB" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
(if (= (cdr (assoc 2 aEntLst)) "SCALE")
(progn
(setq aVal (cdr (assoc 1 aEntLst))
blkLst (cons (cons bEnt aVal) blkLst))))
(setq aEnt (entnext aEnt)))))
(princ "\n<!> No Attributed Blocks Found <!>"))
(alert (vl-princ-to-string blkLst))
(princ))
 
当比例值没有空格时,此函数非常有效;但当有空格时,它只返回比例值的右侧
 
示例1:
比例1:5==>结果=((标题栏名称1:5))
 
示例2:
比例1:10==>结果=((标题栏名称。1:))
 
如示例2所示,返回值缺少右侧值
你能帮我解决这个问题吗?为什么它只返回左侧?

BIGAL 发表于 2022-7-5 21:54:20

使用布局将标题栏剪切并粘贴到真实比例为1:1的布局上可能更容易,然后使用比例为dimscale的mview窗口仍应工作。也许发布一个dwg会有助于理解这个问题。

Muthanna 发表于 2022-7-5 21:59:46

虽然我不知道你使用布局是什么意思。但我应该指出,我们需要在一批图形上自动执行此任务。
 
我已经让这段代码完美地工作了,直到它遇到一些打印,在比例属性值中的冒号字符前后都有空格。
 
当我使用命令“ddatte”手动检查图形,然后选择比例对象时,弹出窗口,该窗口具有正确的比例值。
 
有没有更好的方法可以在不损失任何部分的情况下读取刻度值?

SLW210 发表于 2022-7-5 22:13:30

请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。

Jef! 发表于 2022-7-5 22:24:37

这很有趣,因为代码看起来很好,我试过了,无论属性内部是什么,它都可以正常工作。。
"1:5"
"1:10"
" 1:10"
" 1 : 10 "
我还尝试了使用多个字段、空格以及两者的组合,甚至尝试了addind通配符(/\#?)它工作得非常好。
据我所知,没有“更好的方法”,因为代码遍历了所有块的所有属性,搜索所有名为“scale”的属性。
如果找到一个,它将使用包含块名称的点对更新返回的列表,然后更新属性中包含的值。
 
 
我唯一能看到的是,你有两个属性,一个名为“SCALE”,包含值1:另一个(名称不同)包含分母。不幸的是,当你用ddatte手动检查你的值时,阅读你的评论,这使得这个假设过时了。
也许如果你发布一张不起作用的图,我们可以找出一些东西,因为有了给定的信息,我就不知所措了。

Muthanna 发表于 2022-7-5 22:44:25

嗨,杰夫,
 
感谢您调查这个问题。我自己也用不同的组合测试过这段代码,它们都能工作;但有几张图是失败的。
由于某种原因,这些图纸给出了错误的结果,正如我在上面的帖子中指定的那样。
 
我将让一些人看看这些图纸,看看它们为什么不同,以及它们是否有一些需要修复的特殊设置/属性/标记!
页: [1]
查看完整版本: 读取属性值为bei