乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 21|回复: 5

[编程交流] 读取属性值为bei

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 21:35:07 | 显示全部楼层 |阅读模式
大家好,
我是一名软件开发人员,我用C++和Java编程,但最近我接到一项任务,帮助我们的工程部门编写一些代码+脚本,以修复他们遇到的cad打印问题。
 
我们的问题是使用第三方应用程序生成AutoCad图形。第三部分应用程序将dimscale设置为1:000;但图形的标题栏比例属性具有正确的比例值。
 
我的任务是用lisp和我们的脚本编写代码来自动化这个过程;这将需要程序读取比例属性的值,并将其应用于图形dimscale。
 
在阅读了一些教程并搜索了网页后,我浏览了一些完成大部分任务的功能。。。感谢这个社区及其论坛。
 
我的主函数读取从其中一个线程获得的属性值,如下所示:
 
  1. (defun c:AttLst (/ ss eLst bEnt aEnt aEntLst aVal blkLst)
  2. (vl-load-com)
  3. (if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 66 1)
  4. (if (getvar "CTAB")
  5. (cons 410 (getvar "CTAB"))
  6. (cons 67 (- 1 (getvar "TILEMODE")))))))
  7. (progn
  8. (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  9. (foreach e eLst
  10. (setq bEnt (cdr (assoc 2 (entget e)))
  11. aEnt (entnext e))
  12. (while (= "ATTRIB" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
  13. (if (= (cdr (assoc 2 aEntLst)) "SCALE")
  14. (progn
  15. (setq aVal (cdr (assoc 1 aEntLst))
  16. blkLst (cons (cons bEnt aVal) blkLst))))
  17. (setq aEnt (entnext aEnt)))))
  18. (princ "\n<!> No Attributed Blocks Found <!>"))
  19. (alert (vl-princ-to-string blkLst))
  20. (princ))

 
当比例值没有空格时,此函数非常有效;但当有空格时,它只返回比例值的右侧
 
示例1:
比例1:5==>结果=((标题栏名称1:5))
 
示例2:
比例1:10==>结果=((标题栏名称。1:))
 
如示例2所示,返回值缺少右侧值
你能帮我解决这个问题吗?为什么它只返回左侧?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 21:54:20 | 显示全部楼层
使用布局将标题栏剪切并粘贴到真实比例为1:1的布局上可能更容易,然后使用比例为dimscale的mview窗口仍应工作。也许发布一个dwg会有助于理解这个问题。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

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

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 22:13:30 | 显示全部楼层
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:44:25 | 显示全部楼层
嗨,杰夫,
 
感谢您调查这个问题。我自己也用不同的组合测试过这段代码,它们都能工作;但有几张图是失败的。
由于某种原因,这些图纸给出了错误的结果,正如我在上面的帖子中指定的那样。
 
我将让一些人看看这些图纸,看看它们为什么不同,以及它们是否有一些需要修复的特殊设置/属性/标记!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 09:09 , Processed in 0.367334 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表