乐筑天下

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

[编程交流] 批处理属性编辑器

[复制链接]

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 06:18:18 | 显示全部楼层 |阅读模式
大家好,
 
我的数百个图形中有一个块,现在我需要将其中一个属性的宽度因子值从1.0更改为0.9。我可以使用LSP程序吗?
 
我也尝试过脚本,但由于我糟糕的脚本技能,这是一次不成功的练习。
 
 
干杯
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:26:06 | 显示全部楼层
可以使用脚本调用LISP例程。块/属性的名称是什么?
回复

使用道具 举报

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 06:27:25 | 显示全部楼层
我找到了一个LSP可以帮我:
 
  1. (defun c:att_width(/ att_en width_x ed)
  2. (setq att_en (car (nentsel "\nSelect attribute to change \n")))
  3. (setq ed (entget att_en))
  4. (if (= (cdr(assoc 0 ed)) "ATTRIB")
  5. (progn
  6. (setq width_x (getreal "\nEnter width factor \n"))
  7. (setq ed (subst (cons 41 width_x ) (assoc 41 ed) ed ))
  8. (entmod ed)
  9. (entupd att_en)
  10. (princ)
  11. )
  12. (princ "\nEntity is not an attribute ")
  13. )
  14. (princ)
  15. )

 
遗憾的是,这个lisp的设计要求用户交互选择一个属性,这是一个通过脚本部署的繁琐过程(我更喜欢按名称选择一个块)
 
我的块名是“MRM”(标题块),有一个属性的标签名是“DATE-5”,我特别关注这个属性。如果我可以在“DATE-1”、“DATE-2”上应用相同的宽度因子变化,那就更好了,同时“DATE-5”。
 
谢谢
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 06:31:15 | 显示全部楼层
你可以试试李·麦克的优秀网站上的lisp。
http://www.lee-mac.com/macatt.html
 
如果这不是任务的最佳选择,那么还有很多其他选择,
浏览Lee的可用Lisp库。
 
谢谢李!
回复

使用道具 举报

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 06:38:26 | 显示全部楼层
李无疑是LSP大师。但lisp与属性属性无关。只能设置值。
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:43:45 | 显示全部楼层
试试这个
 
  1. (defun c:test ( / blk att)
  2.    (if
  3.        (setq blk (ssget "_x" '((2 . "MRM"))))
  4.        (progn
  5.            (setq blk (ssname blk 0)
  6.                  att (entnext blk))
  7.            (while
  8.                (/=
  9.                    (cdr (assoc 0 (entget att)))
  10.                    "SEQEND"
  11.                )
  12.                    (if
  13.                        (=
  14.                            (strcase "DATE-")
  15.                            (substr (cdr (assoc 2 (entget att))) 1 5)
  16.                        )
  17.                        (progn
  18.                            (entmod
  19.                                (subst
  20.                                    (cons 41 0.9)
  21.                                    (assoc 41 (entget att))
  22.                                    (entget att)
  23.                                )
  24.                            )
  25.                                (entupd att)
  26.                        )
  27.                    )
  28.                (setq att (entnext att))
  29.            )
  30.        )
  31.        (princ "\nMRM not in drawing!")
  32.    )
  33. (princ)
  34. )

 
标签是否只升到“Date-5”或“Date-6/7/…”曾经出现过吗?
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:44:38 | 显示全部楼层
注意,如果OP想要更改所有“Date”属性,那么这就足够了。节目有多少人无关紧要。只需确保比较子字符串而不是整个字符串。
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:48:51 | 显示全部楼层
 
谢谢你的建议,neophoible。请参阅上面修订的代码。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:53:13 | 显示全部楼层
干得好CheSyn干得好-
 
以下是对代码的一些小建议,以提高简洁性和效率:
几点注意:
 
[列表]
  • 我建议尽可能细化选择过滤器列表,以确保获得准确的选择-例如,在我的代码中,我过滤块名等于“MRM”的属性插入。但是请注意,如果块是动态的,则这将不包括所有动态引用。
    [/列表]
     
    [列表]
  • 不需要对文字字符串进行小写,只需使用大写文字即可。
    [/列表]
     
    [列表]
  • 查看wcmatch函数以进行字符串比较。
    [/列表]
     
    [列表]
  • 为了提高效率,请限制执行相同操作的次数,例如,对于每次迭代(即对于每个属性引用),您将通过entget检索属性DXF数据4次,而每次迭代只需要检索一次该数据,如我的代码所示。
    [/列表]
     
    [列表]
  • 同样,为了效率起见,尽可能引用文字表达式,例如(cons 41 0.9)不包含要计算的表达式,因此可以简单地变成“(41.0.9),无需计算cons函数。
    [/列表]
  • 回复

    使用道具 举报

    1

    主题

    80

    帖子

    79

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 06:59:29 | 显示全部楼层
    李,谢谢你的提示!
     
    我会研究你发布的代码以及你的笔记,以备将来参考。再次感谢!
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 18:50 , Processed in 0.395810 second(s), 72 queries .

    © 2020-2025 乐筑天下

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