找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1814|回复: 13

[LISP程序]:把text转为属性图块

[复制链接]
发表于 2002-12-13 16:11:25 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;把text转为属性图块
  2. ;;By LUCAS
  3. (defun C:C_DEF (/ HOLDECHO HOLDBLIP HOLDREQ SS SSS N A AA A1 A73 HH
  4.                 LST_210        LST_10
  5.                )

  6.   (defun DXF (A1 A2 /)
  7.     (setq ENT (cdr (assoc A1 A2)))
  8.   )

  9.   (defun GETATT        (E ATTNAME / N ATT E1 EN EN1 RSLT)
  10.     (setq EN (entget E)
  11.           E1 E
  12.     )
  13.     (if        (and (= (DXF 0 EN) "INSERT")
  14.              (= (DXF 66 EN) 1)
  15.         )
  16.       (progn
  17.         (setq E1  (entnext E1)
  18.               ATT (strcase ATTNAME)
  19.         )
  20.         (while (and E1
  21.                     (setq EN1 (entget E1))
  22.                     (= (DXF 0 EN1) "ATTRIB")
  23.                )
  24.           (setq RSLT (append RSLT (list (DXF -1 EN1))))
  25.           (setq E1 (entnext E1))
  26.         )
  27.       )
  28.     )
  29.     (setq N 0)
  30.     (repeat (length RSLT)
  31.       (entmod (subst (nth N LST_210)
  32.                      (assoc 210 (entget (nth N RSLT)))
  33.                      (entget (nth N RSLT))
  34.               )
  35.       )
  36.       (entmod (subst (nth N LST_10)
  37.                      (assoc 10 (entget (nth N RSLT)))
  38.                      (entget (nth N RSLT))
  39.               )
  40.       )
  41.       (setq N (1+ N))
  42.     )
  43.     (entupd (entlast))
  44.   )

  45.   (command "_.undo" "_group")
  46.   (setq HOLDECHO (getvar "cmdecho"))
  47.   (setq HOLDBLIP (getvar "blipmode"))
  48.   (setq HOLDREQ (getvar "attreq"))
  49.   (setvar "cmdecho" 0)
  50.   (setvar "blipmode" 0)
  51.   (while (or (= SSS NIL) (= SS NIL))
  52.     (setq SSS (ssget))
  53.     (setq SS (ssget "P" '((0 . "TEXT"))))
  54.   )
  55.   (command "_.UCS" "")
  56.   (setq N 0)
  57.   (setq HH (ssadd))
  58.   (repeat (sslength SS)
  59.     (setq A (ssname SS N))
  60.     (setq LST_210 (append LST_210 (list (assoc 210 (entget A)))))
  61.     (setq LST_10 (append LST_10 (list (assoc 10 (entget A)))))
  62.     (setq AA (member '(100 . "AcDbEntity") (entget A)))
  63.     (setq A73 (cdr (assoc 73 AA)))
  64.     (setq A1 (cdr (assoc 1 AA)))
  65.     (entmake (append '((0 . "ATTDEF"))
  66.                      (reverse (cddr (reverse AA)))
  67.                      '((100 . "AcDbAttributeDefinition")
  68.                        (70 . 8)
  69.                        ;;(73 . 0)
  70.                       )
  71.                      (list (cons 74 A73)
  72.                            (cons 3 A1)
  73.                            (cons 2 A1)
  74.                      )
  75.              )
  76.     )
  77.     (ssadd (entlast) HH)
  78.     (setq N (1+ N))
  79.   )
  80.   (command "_.erase" SS "")
  81.   (setq A (rtos (* (getvar "CDATE") 1E8)))
  82.   (command "_.BLOCK" A "0,0" HH SSS "")
  83.   (setvar "attreq" 0)
  84.   (command "_.INSERT" A "0,0" "" "" "")
  85.   (setvar "attreq" HOLDREQ)
  86.   (GETATT (entlast) A)                        ;处理text对象不在X-Y平面
  87.   (command "_.UCS" "P")
  88.   (setvar "blipmode" HOLDBLIP)
  89.   (setvar "cmdecho" HOLDECHO)
  90.   (command "_.undo" "_end")
  91.   (princ)
  92. )
  93. (prompt "\nType C_DEF")
  94. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-12-13 19:02:26 | 显示全部楼层
...       
        (while (and E1
                    (setq EN1 (entget E1))
                    (= (DXF 0 EN1) "ATTRIB")
               )
          (setq RSLT (append RSLT (list (DXF -1 EN1))))
          (setq E1 (entnext E1))
        )
      )
....
请问这里面的dxf是哪里的函数,AUTOCAD自带的吗?下面的reverse(...)呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 18:13:32 | 显示全部楼层
变成无名块?没什么用啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-7 21:08:23 | 显示全部楼层
最初由 好为人师 发布
[B]变成无名块?没什么用啊 [/B]



如果你做统计就很有用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-8-23 00:28:51 | 显示全部楼层
最初由 125740513 发布
[B]


如果你做统计就很有用。 [/B]


请详述,请教。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-29 08:57:18 | 显示全部楼层
无名块有什么意义哦,请详述
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-1 21:57:22 | 显示全部楼层
不是无名的,斑竹的程序可以说是快速定义可编辑属性的块。块的名称是计算机的时间,只是比较长。修改为下面的就可以输入块的名称了,如果直接回车还是以原来的方式命名。

;;把text转为属性图块
;;By LUCAS
;;add block name dim
(defun C:C_DEF (/ HOLDECHO HOLDBLIP HOLDREQ SS SSS N A AA A1 A73 HH
                LST_210        LST_10
               )

  (defun DXF (A1 A2 /)
    (setq ENT (cdr (assoc A1 A2)))
  )

  (defun GETATT        (E ATTNAME / N ATT E1 EN EN1 RSLT)
    (setq EN (entget E)
          E1 E
    )
    (if        (and (= (DXF 0 EN) "INSERT")
             (= (DXF 66 EN) 1)
        )
      (progn
        (setq E1  (entnext E1)
              ATT (strcase ATTNAME)
        )
        (while (and E1
                    (setq EN1 (entget E1))
                    (= (DXF 0 EN1) "ATTRIB")
               )
          (setq RSLT (append RSLT (list (DXF -1 EN1))))
          (setq E1 (entnext E1))
        )
      )
    )
    (setq N 0)
    (repeat (length RSLT)
      (entmod (subst (nth N LST_210)
                     (assoc 210 (entget (nth N RSLT)))
                     (entget (nth N RSLT))
              )
      )
      (entmod (subst (nth N LST_10)
                     (assoc 10 (entget (nth N RSLT)))
                     (entget (nth N RSLT))
              )
      )
      (setq N (1+ N))
    )
    (entupd (entlast))
  )

  (command "_.undo" "_group")
  (setq HOLDECHO (getvar "cmdecho"))
  (setq HOLDBLIP (getvar "blipmode"))
  (setq HOLDREQ (getvar "attreq"))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (while (or (= SSS NIL) (= SS NIL))
    (setq SSS (ssget))
    (setq SS (ssget "P" '((0 . "TEXT"))))
  )
  (command "_.UCS" "")
  (setq N 0)
  (setq HH (ssadd))
  (repeat (sslength SS)
    (setq A (ssname SS N))
    (setq LST_210 (append LST_210 (list (assoc 210 (entget A)))))
    (setq LST_10 (append LST_10 (list (assoc 10 (entget A)))))
    (setq AA (member '(100 . "AcDbEntity") (entget A)))
    (setq A73 (cdr (assoc 73 AA)))
    (setq A1 (cdr (assoc 1 AA)))
    (entmake (append '((0 . "ATTDEF"))
                     (reverse (cddr (reverse AA)))
                     '((100 . "AcDbAttributeDefinition")
                       (70 . 8)
                       ;;(73 . 0)
                      )
                     (list (cons 74 A73)
                           (cons 3 A1)
                           (cons 2 A1)
                     )
             )
    )
    (ssadd (entlast) HH)
    (setq N (1+ N))
  )
  (command "_.erase" SS "")
  (setq A (getstring "Input new block name: "))  ;; add
  (if (= A "")
  (setq A (rtos (* (getvar "CDATE") 1E8)))
   )                                                                      ;; add
  (command "_.BLOCK" A "0,0" HH SSS "")
  (setvar "attreq" 0)
  (command "_.INSERT" A "0,0" "" "" "")
  (setvar "attreq" HOLDREQ)
  (GETATT (entlast) A)                        ;处理text对象不在X-Y平面
  (command "_.UCS" "P")
  (setvar "blipmode" HOLDBLIP)
  (setvar "cmdecho" HOLDECHO)
  (command "_.undo" "_end")
  (princ)
)
(prompt "\nType C_DEF")
(princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 35个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

发表于 2019-1-20 20:45:27 | 显示全部楼层
125740513 发表于 2006-11-1 21:57
不是无名的,斑竹的程序可以说是快速定义可编辑属性的块。块的名称是计算机的时间,只是比较长。修改为下面 ...

图块的基点飞得很远,如果图块的基点在图块区域范围就好了,请求完善。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 158个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 9042个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 20:14 , Processed in 0.468210 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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