明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: tukuitk

[注意]怎样实现这个?

  [复制链接]
 楼主| 发表于 2003-11-3 16:59:00 | 显示全部楼层
把期限延到明天下午或中午,OK?
让我再想想!
发表于 2003-11-3 17:02:00 | 显示全部楼层
等你!
 楼主| 发表于 2003-11-4 08:33:00 | 显示全部楼层
龙兄,我昨晚把它做出来了,解决了你提出来的那两个问题,请你指教!!!
另,我想看看你的源代码,谢谢!!!

  1. ;;;creatTextList
  2. (defun creatTextList (/ ss i ent)
  3.   (princ "\n请选择单行文字或多行文字:")
  4.   (setq ss (ssget '((0 . "*TEXT"))))
  5.   (setq i 0)
  6.   (repeat (SSLENGTH ss)
  7.     (setq ent (ssname ss i))
  8.     (setq
  9.       TextList (append TextList (list (cdr (assoc 1 (entget ent)))))
  10.     )
  11.     (setq i (+ i 1))
  12.   )
  13. )
  14. ;;;getEntAttribList
  15. (defun getEntAttribList        (entBlock / ent)
  16.   (setq ent (entnext entBlock))
  17.   (while (and ent
  18.               (/= (cdr (assoc 0 (entget ent))) "SEQEND")
  19.               (= (cdr (assoc 0 (entget ent))) "ATTRIB")
  20.          )
  21.     (if        (/= (cdr (assoc 2 (entget ent))) nil)
  22.       (progn
  23.         (setq enameList        (append        enameList
  24.                                 (list (cdr (assoc -1 (entget ent))))
  25.                         )
  26.         )
  27.         (setq tagList (append tagList
  28.                               (list (cdr (assoc 2 (entget ent))))
  29.                       )
  30.         )
  31.       )
  32.     )
  33.     (setq ent (entnext ent))
  34.   )
  35.   (princ)
  36. )
  37. ;;;Fill
  38. (defun Fill (Attribe Text tag / okEnt jj)
  39.   (if (= (cdr (assoc 2 (entget Attribe))) tag)
  40.     (progn
  41.       (setq
  42.         okEnt (subst (cons 1 Text)
  43.                      (assoc 1 (entget Attribe))
  44.                      (entget Attribe)
  45.               )
  46.       )
  47.       (entmod okEnt)
  48.       (entupd Attribe)
  49.     )
  50.   )
  51. )

  52. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;main;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  53. (defun c:AttFill (/             ssBlock        j           jj
  54.                   Block0     u                entBlockList
  55.                   TagList    ShowList        v           TextList
  56.                   ok             input        AttRefList ReList
  57.                   AttribeList                tagList           enameList
  58.                  )
  59.   (setvar "CMDECHO" 0)
  60.   (command "undo" "begin")
  61.   (creatTextList)
  62.   (princ "\n请选择属性参照:")
  63.   (setq ssBlock (ssget '((0 . "INSERT"))))
  64.   (setq j 0)
  65.   (while (< j (sslength ssBlock))
  66.     (setq Block0 (ssname ssBlock j))
  67.     (setq entBlockList (append entBlockList (list Block0)))
  68.     (setq j (1+ j))
  69.   )
  70.   (setq jj 0)
  71.   (setq input 0)
  72.   (while (< jj (length entBlockList))
  73.     (getEntAttribList (nth jj entBlockList))
  74.     (setq TagList tagList)
  75.     (setq AttribeList enameList)
  76.    
  77.     (setq v 0
  78.           ShowList ""
  79.     )
  80.     (princ
  81.       (strcat "\n 所选的第" (itoa (+ 1 jj v)) "文字将填到: \n")
  82.     )
  83.     (repeat (length TagList)
  84.       (setq ShowList
  85.              (strcat ShowList
  86.                      (strcat (itoa v) "-" (nth v TagList) "  ")
  87.              )
  88.       )
  89.       (setq v (1+ v))
  90.     )

  91.     (setq ok (getint (strcat ShowList "   <" (itoa input) ">   ")))
  92.     (if        (= ok nil)
  93.       (setq ok input)
  94.       (setq input ok)
  95.     )
  96.     (if        (<= ok v)
  97.       (if (<= (+ jj 1) (length TextList))
  98.         (fill (nth ok AttribeList)
  99.               (nth jj TextList)
  100.               (nth ok TagList)
  101.         )
  102.         (setq jj (+ 1 (length entBlockList)))
  103.       )
  104.       (exit)
  105.     )
  106.     (setq TagList nil
  107.           tagList nil
  108.           enameList nil
  109.     )
  110.     (setq jj (1+ jj))
  111.   )
  112.   (command "undo" "end")
  113.   (princ)
  114. )

评分

参与人数 1威望 +1 金钱 +2 贡献 +4 激情 +2 收起 理由
龙龙仔 + 1 + 2 + 4 + 2 【好评】奖励努力有成果

查看全部评分

发表于 2003-11-4 12:23:00 | 显示全部楼层
;;其實程序都是差不多
(defun DXF (A1 A2)
  (cdr (assoc A1 A2))
)

(defun CREATTEXTLIST (/ N OBJ)
  (prompt "\n请选择单行文字或多行文字: ")
  (setq SS (ssget '((0 . "*TEXT"))))
  (setq N 0)
  (repeat (sslength SS)
    (setq OBJ (DXF 1 (entget (ssname SS N))))
    (setq TEXTLIST (append TEXTLIST (list OBJ)))
    (setq N (1+ N))
  )
)

(defun GETATT (E / E1 EN1 RSLT)
  (setq E1 (entnext E))
  (while (and E1
              (setq EN1 (entget E1))
              (= (DXF 0 EN1) "ATTRIB")
         )
    (setq ATTREF_OBJLIST (append ATTREF_OBJLIST (list (DXF -1 EN1))))
    (setq
      RSLT (append RSLT (list (DXF 2 (entget (DXF -1 EN1)))))
    )
    (setq E1 (entnext E1))
  )
  RSLT
)

(defun C:KRCAD (/           BLOCKLIST  N                 TAGLIST    SHOWLIST
                V           TEXTLIST   OK         ATTREF_OBJLIST
                INPUT           SS
               )
  (CREATTEXTLIST)
  (princ "\n请选择属性参照: ")
  (setq        BLOCKLIST (ssget '((0 . "INSERT") (66 . 1)))
        N          0
  )
  (if BLOCKLIST
    (progn
      (setq INPUT 0)
      (repeat (sslength BLOCKLIST)
        (redraw (ssname BLOCKLIST N) 3)
        (redraw (ssname SS N) 3)
        (setq TAGLIST (GETATT (ssname BLOCKLIST N)))
        (setq V        0
              SHOWLIST ""
        )
        (princ
          (strcat "\n 所选的第" (itoa N) "文字将填到: \n")
        )
        (repeat        (length TAGLIST)
          (setq        SHOWLIST
                 (strcat SHOWLIST
                         (strcat (itoa V) "-" (nth V TAGLIST) "  ")
                 )
          )
          (setq V (1+ V))
        )
        (setq OK (getint (strcat SHOWLIST "   <" (itoa INPUT) ">   ")))
        (if (= OK NIL)
          (setq OK INPUT)
          (setq INPUT OK)
        )
        (if (<= OK V)
          (progn
            (setq ENT (entget (nth OK ATTREF_OBJLIST)))
            (setq
              ENT (subst (cons 1 (nth N TEXTLIST)) (assoc 1 ENT) ENT)
            )
            (entmod ENT)
            (entupd (nth OK ATTREF_OBJLIST))
          )
          (exit)
        )
        (redraw (ssname SS N) 4)
        (redraw (ssname BLOCKLIST N) 4)
        (setq TAGLIST NIL
              ATTREF_OBJLIST NIL
        )
        (setq N (1+ N))
      )
    )
    (alert "所选块中无属性参照!")
  )
  (princ)
)
 楼主| 发表于 2003-11-4 12:47:00 | 显示全部楼层
龙兄的程序中还加了亮显,程序也专业,不错!其中还有一些地方值得我们学习,谢谢龙兄!
另外,飞哥你能把你的程序传上来吗?我想有了对比才有总结,才能有所收获,对吧!

在这个程序的不断完善及求多种解决方法的过程中,我的收获很多。感谢龙兄的激励和帮助!!!
发表于 2003-11-4 13:51:00 | 显示全部楼层
呵呵,我没写!
 楼主| 发表于 2003-11-4 14:39:00 | 显示全部楼层
飞哥,你若写的话,你的思路能说说吗?渴望着呢……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 05:36 , Processed in 0.140427 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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