明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4425|回复: 23

[源码] 【悬赏】提取图框中标记为[图号]的属性值修改当前布局名称

  [复制链接]
发表于 2017-9-27 08:31 | 显示全部楼层 |阅读模式
9明经币
【问题】
为了使用图纸集或者批量发布的功能,布局命名必须做到规范,经常需要复制属性值而后修改布局名称,基本需要双击属性,复制,右键修改布局名称,再黏贴六次点击,上千张图纸就是几千个动作,而且经常会遗漏,希望高手帮助,谢谢!

见附件图框文件

希望实现功能:
1.输入bj则以图框中标记为【图号】的属性值修改当前布局名称,如果当前为模型空间则提示错误
2.输入th则将当前布局名称替换图框中标记为【图号】的属性值(为上面命令的逆操作)

【另】如果能做到在模型空间输入命令则自动把所有布局中图框中这个属性跟布局匹配则另加10个币赏金,当然会强制每个布局只有一个图框文件
图框文件的图块名称为A1_Tileblock或AX_Tileblock...


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

每个布局里必须要放且只能有一个图框。欢迎测试反馈BUG。
发表于 2017-9-27 08:31 | 显示全部楼层
本帖最后由 vectra 于 2017-9-27 16:24 编辑

  1. ;;;(get-att-textstrings (vlax-ename->vla-object (car (entsel))) '("图号" "图名文字1"))
  2. (defun get-att-textstrings (obj names / rt tag)
  3.   (foreach att (vlax-safearray->list
  4.                  (vlax-variant-value (vla-getattributes obj))
  5.                )
  6.     (setq tag (vla-get-tagstring att))
  7.     (if        (member tag names)
  8.       (setq rt (cons (cons tag (vla-get-textstring att)) rt))
  9.     )
  10.   )
  11.   (reverse rt)
  12. )

  13. ;;;(put-att-textstrings (vlax-ename->vla-object (car (entsel))) '(("图号" . "ABC")))
  14. (defun put-att-textstrings (obj values / text)
  15.   (foreach att (vlax-safearray->list
  16.                  (vlax-variant-value (vla-getattributes obj))
  17.                )
  18.     (if        (setq text (cdr (assoc (vla-get-tagstring att) values)))
  19.       (vla-put-textstring att text)
  20.     )
  21.   )
  22. )
  23. ;; 以图框中标记为“图号”的属性值修改当前布局名称
  24. (defun c:th (/ name obj ss)
  25.   (if (= "Model" (getvar "CTAB"))
  26.     (princ "无法在模型空间中使用该命令。")
  27.     (if        (setq ss (ssget        "X"
  28.                         (list '(0 . "INSERT")
  29.                               '(2 . "A*_Tileblock")
  30.                               (cons 410 (getvar "CTAB"))
  31.                         )
  32.                  )
  33.         )
  34.       (progn
  35.         (setq obj  (vlax-ename->vla-object (ssname ss 0))
  36.               name (cdr (assoc "图号" (get-att-textstrings obj '("图号"))))
  37.         )

  38.         (command "_.LAYOUT" "R" "" name)
  39.       )
  40.     )
  41.   )
  42.   (princ)
  43. )


  44. ;; 当前布局名称替换图框中标记为“图号”的属性值
  45. (defun c:bj (/ obj ss)
  46.   (if (= "Model" (getvar "CTAB"))
  47.     (princ "无法在模型空间中使用该命令。")
  48.     (if        (setq ss (ssget        "X"
  49.                         (list '(0 . "INSERT")
  50.                               '(2 . "A*_Tileblock")
  51.                               (cons 410 (getvar "CTAB"))
  52.                         )
  53.                  )
  54.         )
  55.       (progn
  56.         (setq obj (vlax-ename->vla-object (ssname ss 0)))
  57.         (put-att-textstrings obj (list (cons "图号" (getvar "CTAB"))))
  58.       )
  59.     )
  60.   )

  61.   (princ)
  62. )


每个布局里必须要放且只能有一个图框。欢迎测试反馈BUG。




评分

参与人数 1明经币 +1 收起 理由
头大无恼 + 1 很给力!今天只剩一个币的评分额度了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-9-27 16:07 | 显示全部楼层
vectra 发表于 2017-9-27 14:58
每个布局里必须要放且只能有一个图框。欢迎测试反馈BUG。
更新增加批量替换batchth、 batchbj两命令。 ...

测试很不错,超级赞。
回复

使用道具 举报

 楼主| 发表于 2017-9-27 16:12 | 显示全部楼层
另外请您点选我回答,我才能选已解决转币给您
回复

使用道具 举报

发表于 2017-9-27 16:23 | 显示全部楼层
本帖最后由 vectra 于 2017-9-27 16:28 编辑

  1. ;;;(get-att-textstrings (vlax-ename->vla-object (car (entsel))) '("图号" "图名文字1"))
  2. (defun get-att-textstrings (obj names / rt tag)
  3.   (foreach att (vlax-safearray->list
  4.                  (vlax-variant-value (vla-getattributes obj))
  5.                )
  6.     (setq tag (vla-get-tagstring att))
  7.     (if        (member tag names)
  8.       (setq rt (cons (cons tag (vla-get-textstring att)) rt))
  9.     )
  10.   )
  11.   (reverse rt)
  12. )

  13. ;;;(put-att-textstrings (vlax-ename->vla-object (car (entsel))) '(("图号" . "ABC")))
  14. (defun put-att-textstrings (obj values / text)
  15.   (foreach att (vlax-safearray->list
  16.                  (vlax-variant-value (vla-getattributes obj))
  17.                )
  18.     (if        (setq text (cdr (assoc (vla-get-tagstring att) values)))
  19.       (vla-put-textstring att text)
  20.     )
  21.   )
  22. )
  23. ;; 以图框中标记为“图号”的属性值修改当前布局名称
  24. (defun c:th (/ name obj ss)
  25.   (if (= "Model" (getvar "CTAB"))
  26.     (princ "无法在模型空间中使用该命令。")
  27.     (if        (setq ss (ssget        "X"
  28.                         (list '(0 . "INSERT")
  29.                               '(2 . "A*_Tileblock")
  30.                               (cons 410 (getvar "CTAB"))
  31.                         )
  32.                  )
  33.         )
  34.       (progn
  35.         (setq obj  (vlax-ename->vla-object (ssname ss 0))
  36.               name (cdr (assoc "图号" (get-att-textstrings obj '("图号"))))
  37.         )

  38.         (command "_.LAYOUT" "R" "" name)
  39.       )
  40.     )
  41.   )
  42.   (princ)
  43. )


  44. ;; 当前布局名称替换图框中标记为“图号”的属性值
  45. (defun c:bj (/ obj ss)
  46.   (if (= "Model" (getvar "CTAB"))
  47.     (princ "无法在模型空间中使用该命令。")
  48.     (if        (setq ss (ssget        "X"
  49.                         (list '(0 . "INSERT")
  50.                               '(2 . "A*_Tileblock")
  51.                               (cons 410 (getvar "CTAB"))
  52.                         )
  53.                  )
  54.         )
  55.       (progn
  56.         (setq obj (vlax-ename->vla-object (ssname ss 0)))
  57.         (put-att-textstrings obj (list (cons "图号" (getvar "CTAB"))))
  58.       )
  59.     )
  60.   )

  61.   (princ)
  62. )


  63. (defun c:batchbj (/ lname obj ss)

  64.   (vlax-for layout (vla-get-layouts
  65.                      (vla-get-activedocument (vlax-get-acad-object))
  66.                    )
  67.     (setq lname (vla-get-name layout))
  68.     (if        (and
  69.           (not (= :vlax-true (vla-get-modeltype layout)))
  70.           (setq        ss (ssget "X"
  71.                           (list        '(0 . "INSERT")
  72.                                 '(2 . "A*_Tileblock")
  73.                                 (cons 410 lname)
  74.                           )
  75.                    )
  76.           )
  77.         )
  78.       (progn
  79.         (setq obj (vlax-ename->vla-object (ssname ss 0)))
  80.         (put-att-textstrings obj (list (cons "图号" lname)))
  81.       )
  82.     )
  83.   )
  84.   (princ)
  85. )

  86. (defun c:batchth (/ lname name obj ss)

  87.   (vlax-for layout (vla-get-layouts
  88.                      (vla-get-activedocument (vlax-get-acad-object))
  89.                    )
  90.     (setq lname (vla-get-name layout))
  91.     (if        (and
  92.           (not (= :vlax-true (vla-get-modeltype layout)))
  93.           (setq        ss (ssget "X"
  94.                           (list        '(0 . "INSERT")
  95.                                 '(2 . "A*_Tileblock")
  96.                                 (cons 410 lname)
  97.                           )
  98.                    )
  99.           )
  100.         )
  101.       (progn
  102.         (setq obj  (vlax-ename->vla-object (ssname ss 0))
  103.               name (cdr (assoc "图号" (get-att-textstrings obj '("图号"))))
  104.         )

  105.         (setq er (vl-catch-all-apply 'vla-put-name (list layout name)))
  106.         (if (vl-catch-all-error-p er)
  107.           (princ (strcat (vl-catch-all-error-message er) " \"" name "\"")
  108.           )
  109.         )
  110.       )
  111.     )
  112.   )
  113.   (princ)
  114. )

更新增加批量替换batchth、 batchbj两命令。

评分

参与人数 1明经币 +1 收起 理由
头大无恼 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-9-27 16:29 | 显示全部楼层
vectra 发表于 2017-9-27 16:23
更新增加批量替换batchth、 batchbj两命令。

老大,猜测是点第一楼我悬赏下面的那个我回答
回复

使用道具 举报

 楼主| 发表于 2017-9-27 16:30 | 显示全部楼层
本帖最后由 头大无恼 于 2017-9-27 17:12 编辑

版主,已经解决
回复

使用道具 举报

 楼主| 发表于 2017-9-27 17:07 | 显示全部楼层
原来是选择最佳答案
回复

使用道具 举报

发表于 2017-10-3 20:20 | 显示全部楼层
本帖最后由 Atsai 于 2017-10-3 21:00 编辑

将『图号』的属性设置:右键插入功能变数 -> 系统变数 -> ctab
也可以实现楼主要的结果!
附加的档案是我用楼主的档案做成功能变数,试着把他丢到配置看看吧!
图号的内容就是跟着配置名称连动的!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

作图习惯一般是先改图框中的图号,布局名称一般是图纸集或者发布时候用,非常感谢学到了一个新方法  发表于 2018-1-2 13:25
图框块就要放在layout中了,model中的图框不能这么干。  发表于 2017-10-3 20:32
测试一下这个方法。  发表于 2017-10-3 20:31
这样也不错的,就是出图前要记得update fields  发表于 2017-10-3 20:31

评分

参与人数 1金钱 +50 收起 理由
头大无恼 + 50 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2017-10-20 10:07 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 18:43 , Processed in 0.217072 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表