乐筑天下

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

[编程交流] 全局更改文本h的列表

[复制链接]

20

主题

53

帖子

32

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-6 10:35:01 | 显示全部楼层 |阅读模式
您好,是否有任何人拥有lisp例程,可以全局更改块中文本、多行文字和属性的高度和宽度因子:(。非常感谢您的帮助。
 
谢谢
勇气犬
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:45:31 | 显示全部楼层
这是一种在块定义和现有插入中更改它的粗略方法。
 
但要小心预格式化的多行文字。
 
  1. (defun c:Redefine_Block_Text (/ *error* itemp GetName ENT OBJ UFLAG)
  2. (vl-load-com)
  3. ;; Lee Mac  ~  11.03.10
  4. (defun *error* (msg)
  5.    (and uFlag (vla-EndUndoMark *doc))
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ))
  9. (defun itemp (collection item / result)
  10.    (if (not (vl-catch-all-error-p
  11.               (setq result (vl-catch-all-apply (function vla-item)
  12.                              (list collection item)))))
  13.        result))
  14. (setq *doc (cond (*doc) ((vla-get-ActiveDocument
  15.                             (vlax-get-acad-object)))))
  16. (setq GetName (lambda (obj) (if (vlax-property-available-p obj 'EffectiveName)
  17.                                (vla-get-EffectiveName obj)
  18.                                (vla-get-Name obj))))
  19. (or *hdef* (setq *hdef* 1.0))
  20. (or *twid* (setq *twid* 1.0))
  21. (while
  22.    (progn
  23.      (setq ent (car (entsel "\nSelect Block to Change: ")))
  24.      (cond (  (eq 'ENAME (type ent))
  25.               (if (eq "AcDbBlockReference"
  26.                       (vla-get-Objectname
  27.                         (setq obj (vlax-ename->vla-object ent))))
  28.                 (progn
  29.                   (setq uFlag (not (vla-StartUndoMark *doc)))
  30.                   (initget 6)
  31.                   (setq *hdef* (cond ((getdist "\nSpecify New Text Height: "))   (*hdef*)))
  32.                   
  33.                   (initget 6)
  34.                   (setq *twid* (cond ((getdist "\nSpecify Text Width Factor: ")) (*twid*)))
  35.                   (if (ssget "_X" (list (cons 0 "INSERT") (cons 2 (GetName obj)) (cons 66 1)))
  36.                     (progn
  37.                       (vlax-for sObj (setq ss (vla-get-ActiveSelectionSet *doc))
  38.                         
  39.                         (foreach att (append (vlax-invoke sObj 'GetAttributes)
  40.                                              (vlax-invoke sObj 'GetConstantAttributes))
  41.                           (vla-put-Height att *hdef*)
  42.                           (if (eq :vlax-false (vla-get-MTextAttribute att))
  43.                             (vla-put-ScaleFactor att *twid*)
  44.                             (vla-put-TextString att (strcat "{\\W" (vl-princ-to-string *twid*) ";"
  45.                                                             (vla-get-TextString att) "}")))))
  46.                       (vla-delete ss)))
  47.                   (vlax-for sub (itemp (vla-get-Blocks *doc) (GetName obj))
  48.                     (cond (  (vl-position (vla-get-ObjectName sub) '("AcDbText" "AcDbAttributeDefinition"))
  49.                              (vla-put-Height sub *hdef*)
  50.                              (vla-put-ScaleFactor sub *twid*))
  51.                           (  (eq "AcDbMText" (vla-get-ObjectName sub))
  52.                              (vla-put-Height sub *hdef*)
  53.                              (vla-put-TextString sub (strcat "{\\W" (vl-princ-to-string *twid*) ";"
  54.                                                              (vla-get-TextString sub) "}")))))
  55.                   (setq uFlag (vla-EndUndomark *doc))
  56.                   (vla-Regen *doc AcActiveViewport))
  57.                 (princ "\n** Object Must be a Block **"))))))
  58. (princ))      
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 10:48:28 | 显示全部楼层
 
尚未测试。。。但这一定是另一个伟大的惯例。。。你怎么能这么快?
 
我无法想象你的大脑处于顶端。。。数字和漂浮在周围的东西。。。我是我办公室的autocad解决方案负责人,我用过你的一些Lisp。。。我必须考虑开始付款
 
但是,我甚至还没有创建我的paypal帐户。。。我想当我决定开始使用paypal时,我会付钱的。。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:53:18 | 显示全部楼层
 
它就像我打字一样快。。。我确切地知道我想要使用的过程,以及使用什么等。我使用一些代码块,如错误处理程序,以避免反复键入它。。。但实际上这只是练习。
 
我的Lisp程序没有付款要求。。。我写它们是为了消遣(和这里的大多数成员一样),但当然,我们都很乐意接受捐款
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:03:39 | 显示全部楼层
 
向论坛捐款。没有它,这一切都不可能。
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:08:11 | 显示全部楼层
李,你好,
是否有可能在选定数量的块上执行此操作?如果是的话,那太好了,因为这就是我一直在寻找的!
 
谢谢
geonor公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:12:38 | 显示全部楼层
我已经有一段时间没有看了,但我知道当前代码将改变所选块的所有引用-您是否希望选择多个不同的块?
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:18:27 | 显示全部楼层
谢谢你的回复。
问题是,数据已从GIS导出到DXF。块的名称基于GIS中的对象类别和对象的唯一句柄。这意味着,有相同类型的区块(例如下水道人孔),但区块名称不同。这就像有1000份相同引用的副本(每个副本有不同的块/引用名称)。对于所有这些,我想更改所有包含文本的宽度/高度。所以我一直在研究的是一个过程,它允许修改一个块中的所有文本,以获得多个选定的块。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:24:52 | 显示全部楼层
嗨,试试这个:
 
  1. (defun c:RedefineBlockText ( / *error* doc blocks GetName ss undo )
  2. (vl-load-com)
  3. ;; © Lee Mac 2010
  4. (defun *error* ( msg )
  5.    (and undo (vla-EndUndoMark doc))
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ)
  9. )
  10. (setq doc    (vla-get-ActiveDocument (vlax-get-acad-object))
  11.        blocks (vla-get-Blocks doc))
  12. (setq GetName
  13.    (lambda ( obj )
  14.      (if (vlax-property-available-p obj 'EffectiveName)
  15.        (vla-get-EffectiveName obj)
  16.        (vla-get-Name obj)
  17.      )
  18.    )
  19. )
  20. (mapcar '(lambda ( sym val ) (or (boundp sym) (set sym val))) '(*hdef* *twid*) '(1. 1.))
  21. (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
  22.    (
  23.      (lambda ( i / e o n done atts sub )
  24.        (initget 6)
  25.        (setq *hdef* (cond ( (getdist "\nSpecify New Text Height: "  ) ) ( *hdef* )))
  26.       
  27.        (initget 6)
  28.        (setq *twid* (cond ( (getdist "\nSpecify Text Width Factor: ") ) ( *twid* )))
  29.       
  30.        (setq undo (not (vla-StartUndoMark doc)))
  31.       
  32.        (while (setq e (ssname ss (setq i (1+ i))))
  33.          (setq o (vlax-ename->vla-object e))
  34.          (if (not (vl-position (setq n (GetName o)) done))
  35.            (progn
  36.              (if (setq atts (ssget "_X" (list (cons 0 "INSERT") (cons 2 n) (cons 66 1))))
  37.                (
  38.                  (lambda ( j / f p att )
  39.                   
  40.                    (while (setq f (ssname atts (setq j (1+ j))))
  41.                      (setq p (vlax-ename->vla-object f))
  42.                      (foreach att (append (vlax-invoke p 'GetAttributes)
  43.                                           (vlax-invoke p 'GetConstantAttributes))
  44.                        
  45.                        (vla-put-Height att *hdef*)
  46.                        (if (eq :vlax-false (vla-get-MTextAttribute att))
  47.                          (vla-put-ScaleFactor att *twid*)
  48.                          (vla-put-TextString att
  49.                            (strcat "{\\W" (vl-princ-to-string *twid*) ";" (vla-get-TextString att) "}")
  50.                          )
  51.                        )
  52.                      )
  53.                    )
  54.                  )
  55.                  -1
  56.                )
  57.              )
  58.              (vlax-for sub (LM:Itemp Blocks n)
  59.                (cond
  60.                  ( (vl-position (vla-get-ObjectName sub) '("AcDbText" "AcDbAttributeDefinition"))
  61.                   
  62.                    (vla-put-Height sub *hdef*)
  63.                    (vla-put-ScaleFactor sub *twid*)
  64.                  )
  65.                  ( (eq "AcDbMText" (vla-get-ObjectName sub))
  66.                   
  67.                    (vla-put-Height sub *hdef*)
  68.                    (vla-put-TextString sub
  69.                      (strcat "{\\W" (vl-princ-to-string *twid*) ";" (vla-get-TextString sub) "}")
  70.                    )
  71.                  )
  72.                )
  73.              )
  74.              (setq done (cons n done))
  75.            )
  76.          )
  77.        )
  78.        (setq undo (vla-EndUndoMark doc))
  79.        (vla-Regen doc AcActiveViewport)
  80.      )
  81.      -1
  82.    )
  83. )
  84. (princ)
  85. )
  86. ;;-----------------------=={ Itemp }==------------------------;;
  87. ;;                                                            ;;
  88. ;;  Retrieves the item with index 'item' if present in the    ;;
  89. ;;  specified collection, else nil                            ;;
  90. ;;------------------------------------------------------------;;
  91. ;;  Author: Lee McDonnell, 2010                               ;;
  92. ;;                                                            ;;
  93. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  94. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  95. ;;------------------------------------------------------------;;
  96. ;;  Arguments:                                                ;;
  97. ;;  coll - the VLA Collection Object                          ;;
  98. ;;  item - the index of the item to be retrieved              ;;
  99. ;;------------------------------------------------------------;;
  100. ;;  Returns:  the VLA Object at the specified index, else nil ;;
  101. ;;------------------------------------------------------------;;
  102. (defun LM:Itemp ( coll item )
  103. ;; © Lee Mac 2010
  104. (if
  105.    (not
  106.      (vl-catch-all-error-p
  107.        (setq item
  108.          (vl-catch-all-apply
  109.            (function vla-item) (list coll item)
  110.          )
  111.        )
  112.      )
  113.    )
  114.    item
  115. )
  116. )
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:29:53 | 显示全部楼层
测试和享受,
这套程序非常有效,而且做得非常完美。
太棒了,非常感谢。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 16:56 , Processed in 0.775774 second(s), 72 queries .

© 2020-2025 乐筑天下

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