乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 98|回复: 0

[编程交流] 将选定块定义颜色更改为颜色 2

[复制链接]

6

主题

10

帖子

10

银币

初来乍到

Rank: 1

铜币
26
发表于 2022-9-21 16:53:24 | 显示全部楼层 |阅读模式
这是开发中的 lisp 例程。将选定块定义中的所有文本更改为颜色 2。
  1. ;;;   File Name: COLOR-TEXT-OBJECTS-IN-SELECTED-BLOCKS-TO-COLOR-2.LSP
  2. ;;;   Description:  Changes all the text in selected block definitions to color 2.
  3. ;;;   Will skip alfl XREF & XREF dependent blocks.
  4. ;;;
  5. (defun C:CHTXTINSELBLOCKSCOLOR2 (/ ent el s1 blk_name num nval antw atel atoff e1 e2 en tag nl en C SS K CBL BLK CBL2 C ACL ALY NLY EE NCL NEWE eset cntr enlist pt BLKDATA NEWCOLOR NEWLAYER XREFFLAG XDEPFLAG BLKENTNAME COUNT ENTDATA OLDCOLOR BLKENTNAME *ERROR* ERR-UBC LAY_NAME LT OLDERR)
  6. (graphscr)
  7. (setvar "cmdecho" 0)
  8. (command "_undo" "_m")
  9. (prompt "\nCOLOR-TEXT-OBJECTS-IN-SELECTED-BLOCKS-TO-COLOR-2.LSP - Versie 1.0")
  10. (prompt "\nAutoCAD lisp routine voor het selecteren en wijzigen in blocks van de kleur van alle text-objecten in AutoCAD kleur 2 geel")
  11. (prompt "\nBehandelt geen XREF & geneste blokken")
  12. (graphscr)
  13.   (setvar "cmdecho" 0)
  14.   (setvar "attreq" 0)
  15.   (command "undo" "mark")
  16.   (princ "\n\rSelekteer een block waarvan je de attributen kleur wilt aanpassen !")
  17.   (if (setq ent (car (entsel "\n<Wijs een blok aan = Automatisch>  / Enter=handmatig  >>")))
  18.    (progn
  19.     (setq el (entget ent))
  20.     (if (= (cdr (assoc 0 el)) "INSERT")
  21.      (progn
  22.       ;(setq s1 (ssget "x" (list (cons 2 (cdr (assoc 2 el))))))
  23.       (setq blk_name (cdr (assoc 2 el)) lay_name (cdr (assoc 8 el)))
  24.       (setq s1 (ssget "x" (list (cons 2 blk_name) (cons 8 lay_name))))
  25.       (princ (strcat "\nSelekteren van alle blokken:" blk_name " op laag:"lay_name ))
  26.      )
  27.     )
  28.    )
  29.    ;else
  30.    (progn (princ "\n\rSelekteer een blok >>")
  31.     (setq s1 (ssget))
  32.    )
  33.   )
  34.   (if s1
  35.    (progn (setq num (1- (sslength s1)) atoff '())
  36.    (terpri) (terpri)
  37.    (initget 1 "J j N n")
  38.    (setq nval (getstring "\nNieuwe Attribuut kleur NUMMER :"))
  39.    (setq antw (getstring "\Alle attribuut kleuren aanpassen  [J/N]"))
  40.   (if  (or (= antw "N") (= antw "n"))
  41.    (progn (while (setq ent (car (nentsel "\nVan elke attributen moeten de kleuren aangepast worden...>>")))
  42.   (setq atel (entget ent))
  43.    (setq atoff (append atoff (list (cdr (assoc 2 atel))))) ) ) )
  44.   (while  (/= num -1)
  45.    (setq e1 (ssname s1 num))
  46.    (setq e2 (entget e1))
  47.    (if (and (=  (cdr (assoc 66 e2)) 1)
  48.             (= (cdr (assoc 0 e2)) "INSERT")
  49.        )
  50.   (progn
  51.    (prompt"\e[2J")
  52.    (princ (strcat "\rOgenblikje... Nog " (itoa num) " blokken.... " ))
  53.    (setq en (entnext e1) el (entget en))
  54.    (while (/= (cdr (assoc 0 el)) "SEQEND")
  55.     (if (and (member (setq tag (cdr (assoc 2 el))) atoff))
  56.      (progn
  57. ;(setq nl (cons 40 nval) ol (assoc 40 el) el (subst nl ol el))
  58. ;(entmod el)
  59.      (command  "attedit" "y" "" "" "" (cdr (car el)) "color" nval "")
  60.      )
  61.       (if (or (= antw "J") (= antw "j"))
  62.        (progn
  63. ;(setq nl (cons 40 nval) ol (assoc 40 el) el (subst nl ol el))
  64. ;(entmod el)
  65.        (command "attedit" "y" "" "" "" (cdr (car el)) "color" nval "")
  66.        )
  67.       )
  68.     )
  69.     (setq en (entnext en) el (entget en))
  70.    )
  71.    (entupd en)
  72.    )
  73.   )
  74.   (setq num (1- num)) ) ) )
  75. (defun err-ubc (s)                                ; If an error (such as CTRL-C) occurs
  76.                                                 ; while this command is active...
  77.         (if (/= s "Function cancelled")
  78.                   (princ (strcat "\nError: " s))
  79.         )
  80.         (setq *error* olderr)                        ; Restore old *error* handler
  81.         (princ)
  82. );err-ubc
  83.         (setq olderr *error* *error* err-ubc)
  84.         (initget "?")
  85.         (while
  86.                 (or (eq (setq C (getint "\nType nieuw kleur code/<?>: ")) "?")
  87.                     (null C)
  88.                     (> C 256)
  89.                     (< C 0)
  90.                 );or
  91.                 (textscr)
  92.                 (princ "\n                                                           ")
  93.                 (princ "\n                 Kleur code     |   Kleur omschrijving     ")
  94.                 (princ "\n                ________________|_________________________ ")
  95.                 (princ "\n                                |                          ")
  96.                 (princ "\n                       2        |      GEEL - YELLOW       ")
  97.                 (princ "\n                                               \n\n\n")
  98.                 (initget "?")
  99.         );while
  100.                 (prompt "\nSelecteer blokken om bij te werken. ")
  101.         (SETQ SS (SSGET '((0 . "INSERT"))))
  102.         (SETQ K 0)
  103.         (WHILE (< K (SSLENGTH SS))
  104.                 (setq CBL (tblsearch "BLOCK" (CDR (ASSOC 2 (ENTGET (SETQ BLK (SSNAME SS K)))))))
  105.                 (SETQ CBL2 (CDR (ASSOC -2 CBL)))
  106.                 (WHILE (BOUNDP 'CBL2)
  107.                         (SETQ EE (ENTGET CBL2))
  108.                         ;Update layer value
  109.                          (SETQ NCL (CONS 62 C))
  110.                         (SETQ ACL (ASSOC 62 EE))
  111.                         (IF (= ACL nil)
  112.                                 (SETQ NEWE (APPEND EE (LIST NCL)))
  113.                                 (SETQ NEWE (SUBST NCL ACL EE))
  114.                         );if
  115.                         (ENTMOD NEWE)
  116.                         (SETQ CBL2 (ENTNEXT CBL2))
  117.                 );end while
  118.                 (ENTUPD BLK)
  119.                 (SETQ K (1+ K))
  120.         );end while
  121.         (setq *error* olderr)
  122.         (princ)
  123. ;)
  124. (setq eset
  125. (ssget
  126. (list
  127. (cons -4 "<OR")
  128. (cons 0 "MTEXT")
  129. (cons 0 "TEXT")
  130. (cons -4 "OR>")
  131. )
  132. )
  133. )
  134. (if (and eset (> (sslength eset) 0))
  135. (progn
  136. (setq cntr 0 lt (getvar "dimscale"))
  137. (while(< cntr (sslength eset))
  138. (setq en(ssname eset cntr))
  139. (setq enlist(entget en))
  140. (setq pt(cdr(assoc 10 enlist)))
  141. (grclear)
  142. (redraw)
  143. (grdraw pt (setq pt(polar pt 2.9671 (* lt 12.2080))) 90 -1)
  144. (grdraw pt (setq pt(polar pt 0.7854 (* lt 4.5020))) 90 -1)
  145. (grdraw pt (setq pt(polar pt 2.3562 (* lt 20.0000))) 90 -1)
  146. (grdraw pt (setq pt(polar pt 0.7854 (* lt 5.0000))) 90 -1)
  147. (grdraw pt (setq pt(polar pt 5.4978 (* lt 20.0000))) 90 -1)
  148. (grdraw pt (setq pt(polar pt 0.7854 (* lt 4.5020))) 90 -1)
  149. (grdraw pt (setq pt(polar pt 4.8869 (* lt 12.2080))) 90 -1)
  150. (command "CHANGE" en "" "Properties" "Color" "2" "")
  151. (grdraw pt (setq pt(polar pt 2.9671 (* lt 12.2080))) 90 -1)
  152. (grdraw pt (setq pt(polar pt 0.7854 (* lt 4.5020))) 90 -1)
  153. (grdraw pt (setq pt(polar pt 2.3562 (* lt 20.0000))) 90 -1)
  154. (grdraw pt (setq pt(polar pt 0.7854 (* lt 5.0000))) 90 -1)
  155. (grdraw pt (setq pt(polar pt 5.4978 (* lt 20.0000))) 90 -1)
  156. (grdraw pt (setq pt(polar pt 0.7854 (* lt 4.5020))) 90 -1)
  157. (grdraw pt (setq pt(polar pt 4.8869 (* lt 12.2080))) 90 -1)
  158. (setq cntr(+ cntr 1))
  159. )
  160. )
  161. )
  162. (alert (strcat "Aantal gewijzigde text-veld-objecten en/of Mtext-veld-objecten: " (itoa cntr) "."))
  163. (grclear)
  164. (redraw)
  165. (command ".undo" "group")
  166.    (setq BLKDATA (tblnext "BLOCK" t))
  167.    (setq NEWCOLOR (cons 62 2))  ;this will set 62 (color) to 2
  168. ;   (setq NEWLAYER (cons 8 "0"))  ;this will set 8 (layer) to 0
  169.    ; While there is an entry in the block table to process, continue
  170.    (while BLKDATA
  171.       (prompt "\nRedefining colors for block: ")
  172.       (princ (cdr (assoc 2 BLKDATA)))
  173.       ; Check to see if block is an XREF or is XREF dependent
  174.       (setq XREFFLAG (assoc 1 BLKDATA))
  175.       (setq XDEPFLAG (cdr (assoc 70 BLKDATA)))
  176.       ; If block is not XREF or XREF dependent, i.e., regular block, then proceed.
  177.       (if (and (not XREFFLAG) (/= (logand XDEPFLAG 32) 32))
  178.          (progn
  179.             (setq BLKENTNAME (cdr (assoc -2 BLKDATA)))
  180.             (setq COUNT 1)
  181.             (terpri)
  182.             ; As long as we haven't reached the end of the block's defintion, get the data
  183.             ; for each entity and change its color assignment to BYLAYER.
  184.             (while BLKENTNAME
  185.                (princ COUNT)
  186.                (princ "\r")
  187.                (setq ENTDATA (entget BLKENTNAME)); get entities data
  188.                (setq OLDCOLOR (assoc 62 ENTDATA))  ;get entities old color value
  189.                (if OLDCOLOR                         ; if value exist (null = bylayer)
  190.                   (entmod (subst newcolor oldcolor ENTDATA)) ; substitute old color to byblock
  191.                   (entmod (cons newcolor ENTDATA))      ; modify ent data w/ byblock values
  192.                )
  193.                (setq BLKENTNAME (entnext BLKENTNAME)) ;if attributes exist, then edit next one
  194.                (setq COUNT (+ COUNT 1));
  195.             ) ;end while for attribute trap
  196.          ) ;progn
  197.          (progn
  198.             (princ "    XREF...skipping!")
  199.          ) ;progn
  200.       );end if not an Xref
  201.       (setq BLKDATA (tblnext "BLOCK")) ;next block please
  202.    ) ;end while loop of blk data available to edit
  203. (command ".undo" "end")
  204. (command ".regen")
  205. (setvar "cmdecho" 1)
  206. (prompt "\nDe AutoCAD-selecteren-en-wijzigen-van-de-kleur-van-text-objecten-in-blocks-naar-AutoCAD-kleur-2-geel-routine opdracht is beëindigd, er zijn geen objecten meer geselecteerd. Start de routine opnieuw met AutoCAD commando: CHTXTINSELBLOCKSCOLOR2")
  207. (princ)
  208. )
  209. (princ "\nCOLOR-TEXT-OBJECTS-IN-SELECTED-BLOCKS-TO-COLOR-2.LSP - AutoCAD lisp routine wijzigt in geselcteerde blocks de tekst kleur in geel. AutoCAD kleur 2.")
  210. (princ "\nStart deze AutoCAD-trim-routine met AutoCAD commando: chtxtinselblockscolor2")
  211. (princ)


回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 02:01 , Processed in 0.138447 second(s), 54 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表