明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4096|回复: 10

[提问] 根据文件名改属性块(求简化)

[复制链接]
发表于 2014-10-29 10:20:56 | 显示全部楼层 |阅读模式
本帖最后由 spp_wall 于 2014-10-29 10:25 编辑

;根据文件名改属性块 文件名格式: 图号空格图名空格总页码空格
(DEFUN CHATTRIB (OLDATT NEWATT)
(IF (AND ;(PRINC "\nSelect Block with attribute 选择带属性图块 :")

                  ;(SETQ SS (SSGET '((0 . "INSERT") (66 . 1))))
                  
        (SETQ SS (SSGET "X" '((0 . "INSERT") (66 . 1)(2 . "KX-目录属性块"))));只选择"KX-目录属性块"
                  )
                  (PROGN
  (SETQ I -1)
  (REPEAT (SSLENGTH SS)
   (SETQ ENT (ENTGET (SSNAME SS (SETQ I (1+ I))))
         ENT1 ENT)
   (WHILE (= (CDR (ASSOC 0 (SETQ ENT1 (ENTGET (ENTNEXT (CDR (ASSOC -1 ENT1))))))) "ATTRIB")
    (IF (= (CDR (ASSOC 1 ENT1)) OLDATT) (PROGN
  (SETQ ENT1 (SUBST (CONS 1 NEWATT) (ASSOC 1 ENT1) ENT1))
  (ENTMOD ENT1)
  (ENTMOD ENT)
))
   )
  )
))
(PRINC)
)

(defun strsplit(str splits / i a b)
  (while(<""str)
    (if(vl-remove'nil(mapcar'(lambda(x)(vl-string-search x str))splits))
      (setq i(car(vl-sort(vl-remove'nil(mapcar'(lambda(x)(if(setq l(vl-string-search x str))(cons l x)))splits))
       '(lambda(s1 s2)(<(car s1)(car s2)))))
      a(cons(substr str 1(car i))a)b(cons(cdr i)b)
      str(substr str(+(car i)(strlen(cdr i))1)))
      (setq a(cons str a)b(cons "" b)str"")))
  (list(reverse a)(reverse b)))

(DEFUN C:gtm ()
(SETQ OATT (GETSTRING "\n原始图名:"));这里能不能改成点选属性块中的属性而不是输入

        (vl-load-com)
(setq  kx-tm (cadr(car(strsplit(getvar "dwgname")'(" ")))))

(CHATTRIB OATT kx-tm )
  (PRINC)
)

(DEFUN C:gth ()
(SETQ OATT (GETSTRING "\n原始图号:"));这里能不能改成点选属性块中的属性而不是输入

        (vl-load-com)
(setq  kx-th (car(car(strsplit(getvar "dwgname")'(" ")))))

(CHATTRIB OATT kx-th )
  (PRINC)
)

(DEFUN C:gzym ()
(SETQ OATT (GETSTRING "\n原始总页码:"));这里能不能改成点选属性块中的属性而不是输入

        (vl-load-com)
(setq  kx-zym (caddr(car(strsplit(getvar "dwgname")'(" ")))))

(CHATTRIB OATT kx-zym )
  (PRINC)
)

想省去输入原始属性块中值,改成点选属性块!求大家出手简化!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-10-29 11:51:29 | 显示全部楼层
  1. (vl-load-com)

  2. (defun strsplit        (string delimited / pos lst)
  3.   (while (setq pos (vl-string-search delimited string))
  4.     (setq lst         (cons (substr string 1 pos) lst)
  5.           string (substr string (+ pos 1 (strlen delimited)))
  6.     )
  7.   )
  8.   (reverse (cons string lst))
  9. )

  10. (defun parse-filename ()
  11.   (strsplit (vl-string-trim " \r\t\n" (vl-filename-base (getvar "DWGNAME"))) " ")
  12. )
  13. ;; ("MM-01" "平面图" "5")

  14. (defun c:tt (/ block i kx ss tag)
  15.   (setq kx (parse-filename))

  16.   (if (setq ss (ssget "X" '((0 . "INSERT") (66 . 1) (2 . "KX-目录属性块"))))
  17.     (progn
  18.       (setq i -1)
  19.       (repeat (sslength ss)
  20.         (setq block (vlax-ename->vla-object (ssname ss (setq i (1+ i)))))

  21.         (foreach att (vlax-safearray->list
  22.                        (vlax-variant-value (vla-getattributes block))
  23.                      )
  24.           (setq tag (vla-get-tagstring att))
  25.           (cond
  26.             ((= "总页码" tag)
  27.              (vla-put-textstring att (nth 2 kx))
  28.             )
  29.             ((= "图号" tag)
  30.              (vla-put-textstring att (nth 0 kx))
  31.             )
  32.             ((= "图名" tag)
  33.              (vla-put-textstring att (nth 1 kx))
  34.             )
  35.           )
  36.         )
  37.       )
  38.     )
  39.   )
  40.   (princ)
  41. )
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2014-10-29 11:57:03 | 显示全部楼层
vectra 发表于 2014-10-29 11:51

比我要求的还快!!!谢谢!
发表于 2014-10-29 12:39:20 | 显示全部楼层
这是什么意思啊。没看懂。有图吗?
 楼主| 发表于 2014-10-29 14:42:53 | 显示全部楼层
hooboxu 发表于 2014-10-29 12:39
这是什么意思啊。没看懂。有图吗?

上面不是有图么
发表于 2014-10-29 14:53:23 | 显示全部楼层
这个好啊,叼炸天,学习了
 楼主| 发表于 2014-10-29 14:57:31 | 显示全部楼层
本帖最后由 spp_wall 于 2014-10-29 15:09 编辑
vectra 发表于 2014-10-29 11:51

再请教下
(ssget "X" '((0 . "INSERT")(66 . 1) ));可以选择所有的属性块
如果还要添加其他特定的属性块 应该怎么改呢!

点评

(ssget '((0 . "INSERT")(66 . 1) )) 手动选好了 (ssget "X" '((0 . "INSERT") (66 . 1) (2 . "KX-目录属性块,其它块名,KX-*")))可以用逗号分开所有已知名字的块或使用通配符   发表于 2014-10-29 20:44
发表于 2014-10-29 20:26:12 | 显示全部楼层
没看到有图片啊
发表于 2014-12-26 22:31:03 | 显示全部楼层
这个吊炸天啊
发表于 2021-12-7 13:39:24 | 显示全部楼层
大佬牛666  好用  CAD版图号名称分离程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:49 , Processed in 0.168290 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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