找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4150|回复: 13

[LISP函数]:添加普通文字到图块成为属性

[复制链接]
发表于 2007-2-1 17:08:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
函数共三个变量:
1:图块实体[ENAME]
2:文本实体[ENANE/单个 PICKSET/多个]
3:转换成属性后是否删除文本实体[T/NIL]

返回值:新生成的图块名[ENAME]


  1. (Defun vlobj-attach-attrib (blk atx erase / att bbb nxx tmp rtn)
  2.   (setq        bbb blk
  3.         blk (entget bbb)
  4.   )
  5.   (if (not (assoc 66 blk))
  6.     (setq blk (append blk (list (cons 66 1))))
  7.   )
  8.   (setq nxx (list blk))
  9.   (if (and (entnext bbb)
  10.            (= (cdr (assoc 0 (entget (entnext bbb)))) "ATTRIB")
  11.       )
  12.     (while
  13.       (/= (cdr (assoc 0 (entget (setq bbb (entnext bbb)))))
  14.           "SEQEND"
  15.       )
  16.        (setq nxx (cons (entget bbb) nxx))
  17.     )
  18.   )
  19.   (if (= (type atx) 'ename)
  20.     (setq atx (ssadd atx))
  21.   )
  22.   (if (and (= (type atx) 'pickset)
  23.            (setq bbb -1)
  24.       )
  25.     (progn      
  26.       (repeat (sslength atx)
  27.         (if (and (setq att (ssname atx (setq bbb (1+ bbb))))
  28.                  (setq tmp (cdr (assoc 1 (entget att)))  
  29.                  (setq tmp (list
  30.                              (cons 0 "ATTRIB")
  31.                              (cons 100 "AcDbEntity")
  32.                              (cons 100 "AcDbText")
  33.                              (cons 100 "AcDbAttribute")
  34.                              (cons 1 tmp)
  35.                              (cons 2 (substr tmp 1 10)) ;防止TAG太长
  36.                              (cons 6 "ByBlock")
  37.                              (cons 7 "STANDARD")
  38.                              (cons 8 "0")
  39.                              (list 10 0.0 0.0 0.0)
  40.                              (list 11 0.0 0.0 0.0)
  41.                              (cons 40 1.0)
  42.                              (cons 41 1.0)
  43.                              (cons 50 0.0)
  44.                              (cons 51 0.0)
  45.                              (cons 62 256)
  46.                              (cons 70 0)
  47.                              (cons 72 0)
  48.                              (cons 73 0)
  49.                            )
  50.                  )
  51.             )
  52.           (progn
  53.             (foreach bbb '(7 8 10 11 40 41 50 51 72 73)
  54.               (setq
  55.                 tmp (subst (cons bbb (cdr (assoc bbb (entget att))))
  56.                            (assoc bbb tmp)
  57.                            tmp
  58.                     )
  59.               )
  60.             )
  61.             (setq nxx (cons tmp nxx))
  62.           )
  63.         )
  64.       )
  65.       (setq nxx        (cons (list (cons 0 "SEQEND")
  66.                             (cons 100 "AcDbEntity")
  67.                             (cons 8 (cdr (assoc 8 blk)))
  68.                       )
  69.                       nxx
  70.                 )
  71.       )
  72.       (mapcar 'entmake (reverse nxx))
  73.       (setq rtn (entlast))
  74.       (if (and erase
  75.                (setq bbb -1)
  76.                (entdel (cdr (assoc -1 blk)))
  77.           )
  78.         (repeat        (sslength atx)
  79.           (entdel (ssname atx (setq bbb (1+ bbb))))
  80.         )
  81.       )
  82.     )
  83.   )
  84.   rtn
  85. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-2-1 20:22:21 | 显示全部楼层
怎么用法?三个变量是?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-2 10:59:01 | 显示全部楼层
中间漏了一个括号,下面是改好的,三个变量应该是:
blk--文字属性块图元名(car(entsel))
atx--单行文字,注意是单行文字不是多行文字(car(entsel)),只是搂主说的pickset多选不会用
erase--为空nil时保留原文字,否则删除

  1. (Defun vlobj-attach-attrib (blk atx erase / att bbb nxx tmp rtn)
  2.   (setq        bbb blk
  3.         blk (entget bbb)
  4.   )
  5.   (if (not (assoc 66 blk))
  6.     (setq blk (append blk (list (cons 66 1))))
  7.   )
  8.   (setq nxx (list blk))
  9.   (if (and (entnext bbb)
  10.            (= (cdr (assoc 0 (entget (entnext bbb)))) "ATTRIB")
  11.       )
  12.     (while
  13.       (/= (cdr (assoc 0 (entget (setq bbb (entnext bbb)))))
  14.           "SEQEND"
  15.       )
  16.        (setq nxx (cons (entget bbb) nxx))
  17.     )
  18.   )
  19.   (if (= (type atx) 'ename)
  20.     (setq atx (ssadd atx))
  21.   )
  22.   (if (and (= (type atx) 'pickset)
  23.            (setq bbb -1)
  24.       )
  25.     (progn      
  26.       (repeat (sslength atx)
  27.         (if (and (setq att (ssname atx (setq bbb (1+ bbb))))
  28.                  (setq tmp (cdr (assoc 1 (entget att))))  
  29.                  (setq tmp (list
  30.                              (cons 0 "ATTRIB")
  31.                              (cons 100 "AcDbEntity")
  32.                              (cons 100 "AcDbText")
  33.                              (cons 100 "AcDbAttribute")
  34.                              (cons 1 tmp)
  35.                              (cons 2 (substr tmp 1 10))
  36.                              (cons 6 "ByBlock")
  37.                              (cons 7 "STANDARD")
  38.                              (cons 8 "0")
  39.                              (list 10 0.0 0.0 0.0)
  40.                              (list 11 0.0 0.0 0.0)
  41.                              (cons 40 1.0)
  42.                              (cons 41 1.0)
  43.                              (cons 50 0.0)
  44.                              (cons 51 0.0)
  45.                              (cons 62 256)
  46.                              (cons 70 0)
  47.                              (cons 72 0)
  48.                              (cons 73 0)
  49.                            )
  50.                  )
  51.             )
  52.           (progn
  53.             (foreach bbb '(7 8 10 11 40 41 50 51 72 73)
  54.               (setq
  55.                 tmp (subst (cons bbb (cdr (assoc bbb (entget att))))
  56.                            (assoc bbb tmp)
  57.                            tmp
  58.                     )
  59.               )
  60.             )
  61.             (setq nxx (cons tmp nxx))
  62.           )
  63.         )
  64.       )
  65.       (setq nxx        (cons (list (cons 0 "SEQEND")
  66.                             (cons 100 "AcDbEntity")
  67.                             (cons 8 (cdr (assoc 8 blk)))
  68.                       )
  69.                       nxx
  70.                 )
  71.       )
  72.       (mapcar 'entmake (reverse nxx))
  73.       (setq rtn (entlast))
  74.       (if (and erase
  75.                (setq bbb -1)
  76.                (entdel (cdr (assoc -1 blk)))
  77.           )
  78.         (repeat        (sslength atx)
  79.           (entdel (ssname atx (setq bbb (1+ bbb))))
  80.         )
  81.       )
  82.     )
  83.   )
  84.   rtn
  85. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-2 13:47:01 | 显示全部楼层
Simple VL command

  1. ;;;No error check, ugly codes only, not fully tested
  2. (Defun c:addatt        (/ blk txt yn)
  3.   (if
  4.     (and (setq blk (entsel "\n Please pick the block <Exit>:"))
  5.          (setq blk (Car blk))
  6.          (= (cdr (assoc 0 (entget blk))) "INSERT")
  7.                       (null (redraw blk 3))
  8.          (princ
  9.            "\n Please select text to be attached as attributes <Exit>:"
  10.          )
  11.          (setq txt (ssget '((0 . "text"))))
  12.     )
  13.      (progn
  14.        (initget "Yen No")
  15.        (if (null (setq yn
  16.                         (getkword "\n Erase the attached texts [Yes/No] <Yes>:")
  17.                  )
  18.            )
  19.          (setq yn "Yes")
  20.        )
  21.        (vlobj-attach-attrib blk txt (equal yn "Yes"))
  22.      )
  23.   )
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2007-2-2 13:55:02 | 显示全部楼层
加入属性的 blockdef 仅影响后面 Insert 的图块,以前Insert的 Block 仍旧为不含属性的图块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-2 13:58:28 | 显示全部楼层
此函数仅对点取的图块有效,不会影响之前或之后插入的图块。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-5 07:58:48 | 显示全部楼层
;;很有趣的結構--是圖塊參考帶屬性,非改變原圖塊為屬性圖塊
;;即相同的圖塊名稱,但有的帶屬性,有的卻沒有屬性
;;這會做成處理圖塊程序的複雜度
;;雖然看起來很方便,但個人認為能不用就不要用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2007-2-5 08:18:27 | 显示全部楼层
和这个帖子讨论的是一个问题
http://www.xdcad.net/forum/showthread.php?s=&threadid=562307
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-6 12:26:24 | 显示全部楼层
YMOLD外挂在这方面非常不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-25 20:37:44 | 显示全部楼层
lsp如果修改删除属性文字?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-28 14:31:43 | 显示全部楼层
我现在只关心怎么修改blockdef
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-14 21:00:05 | 显示全部楼层
最初由 mmmm 发布
[B]Simple VL command
[code]
;;;No error check, ugly codes only, not fully tested
(Defun c:addatt        (/ blk txt yn)
  (if
    (and (setq blk (entsel "\n Please pick the block <Exit>:"))
         (setq blk (Ca... [/B]



输入 addatt 后,在cad2004中无法双击编辑, (可用attedit编辑)

双击时命令行提示:
[php]
命令: _.eattedit
此图形不包含带属性的块。
命令: 6757.338078,-91.268613,0.000000
未知命令“6757.338078,-91.268613,0.000000”。按 F1 查看帮助。
[/php]
请问能否做一个可以在cad2004双击编辑的属性块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8733个

财富等级: 富甲天下

发表于 2008-12-27 22:27:07 | 显示全部楼层
楼主可否测试一下程序ddatt.lsp
,为何测试老是不成功阿!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-5 18:54:39 | 显示全部楼层
看到函数就头痛........落过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-9 13:09 , Processed in 0.206656 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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