明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6264|回复: 32

求改lsp,点中文字后就可以以文字内容建立图层,但颜色总是白色,改随层

  [复制链接]
发表于 2008-5-16 22:53:00 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-5-16 23:36:00 | 显示全部楼层

看看这是不是你要的吧
  1. (defun c:JTHWAX598 (/ ANS EN LN OC TN)
  2. (prompt "\n**<用途:依文字名称新建图层>**")
  3. (defun LA-TO-VLA (ename)
  4.   (vlax-ename->vla-object ename)
  5.   )
  6. (defun AR_DXF (#code #ename)
  7.   (cdr (assoc #code (entget #ename)))
  8.   )
  9. (setvar "cmdecho" 0)  ;;关闭指令行回应
  10. (command "undo" "be") ;;设置程序起始
  11. (setq EN (car (nentselp "\n选取文字:")))
  12. (setq TN (AR_DXF 1 EN)) ;文字内容
  13. (setq TN (vl-string-subst "" ":" TN))
  14. (setq TN (vl-string-subst "" "%" TN))
  15. (setq OC (vla-get-color (LA-TO-VLA EN))) ;颜色代码
  16. (setq LN (AR_DXF 8 EN)) ;图层名称
  17. (if (= (type (tblsearch "layer" TN)) 'list)
  18.   (print "图层已经存在!")
  19.   (progn
  20.    (cond
  21.     ((= OC 0) (setq ANS 7))
  22.     ((= OC 256)
  23.      (setq ANS (cdr (assoc 62 (tblsearch "layer" LN))))
  24.      )
  25.     (t (setq ANS OC))
  26.     )
  27.    (MKLA TN ANS)
  28.    (vla-put-layer (LA-TO-VLA EN) TN)
  29.    )
  30.   )
  31. (command "undo" "e") ;;设置程序结尾
  32. (prin1)
  33. )
 楼主| 发表于 2008-5-17 00:03:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-5-17 08:19:00 | 显示全部楼层

原来要求还要改线型喔
那试看看下面改过的吧
  1. (defun C:JTHWAX609 (/ ANS EN LAS LN LS OC TN )
  2. (prompt "\N**<用途:依文字名称新建图层>**")
  3. (defun LA-TO-VLA (ENAME)
  4.   (vlax-ename->vla-object ENAME)
  5.   )
  6. (defun AR_DXF (#CODE #ENAME)
  7.   (cdr (assoc #CODE (entget #ENAME)))
  8.   )
  9. (defun MKLA_V2 (A B C)
  10.   (if (= (tblsearch "LAYER" A) NIL)
  11.    (command "_.LAYER" "M" A "C" B A "L" C A "")
  12.    (command "_.LAYER" "T"   A     "S"   A "C"   B
  13.      A   "U" A     "ON"  A   "L" C     A
  14.      ""
  15.      )
  16.    )
  17.   )
  18. (setvar "CMDECHO" 0)
  19. (command "UNDO" "BE")
  20. (setq EN (car (nentselp "\N选取文字:")))
  21. (setq TN (AR_DXF 1 EN))
  22. (setq TN (vl-string-subst "" ":" TN))
  23. (setq TN (vl-string-subst "" "%" TN))
  24. (setq OC (vla-get-color (LA-TO-VLA EN)))
  25. (setq LN (AR_DXF 8 EN))
  26. (setq LS (AR_DXF 6 EN))
  27. (if (= (type (tblsearch "LAYER" TN)) 'list)
  28.   (print "图层已经存在!")
  29.   (progn
  30.    (cond
  31.     ((= OC 0)
  32.      (setq ANS 7)
  33.      (if LS
  34.       (setq LAS LS)
  35.       (setq LAS "")
  36.       )
  37.      )
  38.     ((= OC 256)
  39.      (if LS
  40.       (setq LAS LS)
  41.       (setq LAS "")
  42.       )
  43.      (setq ANS (cdr (assoc 62 (tblsearch "LAYER" LN))))
  44.      )
  45.     (t
  46.      (setq ANS OC)
  47.      (if LS
  48.       (setq LAS LS)
  49.       (setq LAS "")
  50.       )
  51.      )
  52.     )
  53.    (MKLA_V2 TN ANS LAS)
  54.    (vla-put-layer (LA-TO-VLA EN) TN)
  55.    )
  56.   )
  57. (command "UNDO" "E")
  58. )
 楼主| 发表于 2008-5-17 10:30:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-5-17 12:48:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-5-17 14:47:00 | 显示全部楼层

(defun c:createlayer(/ ACADDOC ACOLOR ALAYER ALINETYPE LAYERNAME LAYEROBJ TXTENT TXTOBJ)
  (vl-load-com)
  (setq Acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  (if (setq Txtent (entsel "\n选择文字"))
    (progn
      (setq Txtobj (vlax-ename->vla-object (car txtent))
     LayerName (vla-get-textstring Txtobj)
     Alayer (vla-get-activelayer acaddoc)
     Acolor (getvar "CECOLOR")
     Alinetype (vla-get-name (vla-get-activelinetype acaddoc))
     )
      (if (tblsearch "LAYER" LayerName)
 (alert (strcat "\n图层" LayerName "已经存在!"))
 (progn
   (setq Layerobj (vla-add (vla-get-layers acaddoc) LayerName))
   (if (or (= Acolor "BYLAYER")(= Acolor "BYBLOCK"))
     (vla-put-color Layerobj (vla-get-color Alayer))
     (vla-put-color Layerobj Acolor)
     )
   (if (or (= Alinetype "BYLAYER")(= Acolor "BYBLOCK"))
     (vla-put-linetype Layerobj (vla-get-linetype Alayer))
     (vla-put-linetype Layerobj Alinetype)
     )
   (vla-put-activelayer acaddoc Layerobj)
   )
 )
      )
    )
  (princ)
  )

 楼主| 发表于 2008-5-17 18:31:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-5-17 20:40:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-5-17 21:27:00 | 显示全部楼层
(defun c:changelayer(/ENT OBJ OBJCOLOR OBJLAYER)
  (vl-load-com)
  (if (setq Ent (entsel "\n选择目标对象: "))
    (progn
      (setq obj (vlax-ename->vla-object (car Ent))
     objlayer (vla-get-layer obj)
     objcolor (vla-get-color obj)
     )
      (setvar "CLAYER" objlayer)
      (setvar "CECOLOR" (itoa objcolor))
      )
    )
  (princ)
  )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-25 10:19 , Processed in 0.202611 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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