明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: magicboy555

[提问] 求大神指导快速切换图层的LSP代码修改

[复制链接]
发表于 2014-11-17 13:06 | 显示全部楼层
自动切换图层,你可以参考下,(注:网络收集,感谢原作者!)
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;自动图层切换
  2. (defun xlr-autolayer ()
  3. ;;;;  (setvar "cmdecho" 0)
  4. ;;;;  (if (null (tblsearch "layer" "text"))
  5. ;;;;    (set_layer_list "text" 3 "continuous")
  6. ;;;;  )
  7. ;;;;  (if (null (tblsearch "layer" "标注"))
  8. ;;;;    (set_layer_list "标注" 3 "continuous")
  9. ;;;;  )
  10.   (vl-load-com)
  11. ;;;; 图层初始化列表 内容:commands layers color linetype plottable
  12.   (setq *doc (vla-get-activedocument (vlax-get-acad-object)))
  13.   (setq *lays (vla-get-layers *doc))
  14.   (setq  *laylst
  15.    (list (list "DIMANGULAR" "DIM." 8 "continuous" T)
  16.          (list "DIMALIGNED" "DIM." 8 "continuous" T)
  17.          (list "DIMBASELINE" "DIM." 8 "continuous" T)
  18.          (list "DIMCENTER" "DIM." 8 "continuous" T)
  19.          (list "DIMCONTINUE" "DIM." 8 "continuous" T)
  20.          (list "DIMDIAMETER" "DIM." 8 "continuous" T)
  21.          (list "DIMLINEAR" "DIM." 8 "continuous" T)
  22.          (list "DIMORDINATE" "DIM." 8 "continuous" T)
  23.          (list "DIMRADIUS" "DIM." 8 "continuous" T)
  24.          (list "QDIM" "DIM." 8 "continuous" T)
  25.          (list "QLEADER" "引线标注" 8 "continuous" T)
  26.        (list "DIMARC" "DIM." 8 "continuous" T)
  27.          (list "DTEXT" "TEXT" 3 "continuous" T)
  28.          (list "MTEXT" "TEXT" 3 "continuous" T)
  29.          (list "TEXT" "TEXT" 3 "continuous" T)
  30.          (list "BHATCH" "填充" 8 "continuous" T)
  31.          (list "HATCH" "填充" 8 "continuous" T)
  32.          (list "POINT" "点" 4 "continuous" T)
  33.          (list "XLINE" "辅助线" 1 "continuous" T)
  34.          (list "REVCLOUD" "修订内容" 6 "continuous" T)
  35. ;;;;(list "LINE" "0" NIL "continuous" T)
  36. ;;;;(list "XREF" "引用" 7 "continuous" T)
  37.          (list "circle" "临时标记" 1 "continuous" T)
  38.        (list "RECTANG" "预用" 8 "continuous" T)
  39. ;;;;(list "pline" "多义线" 2 "center" T)
  40.    )
  41.   )
  42.   (setq OldLayer nil)
  43.   (setq *cmdlst (mapcar 'strcase (mapcar 'car *laylst)))
  44.   (mapcar '(lambda (x) (vlr-command-reactor nil x))
  45.     (list  '((:vlr-commandWillStart . xlr-start))
  46.     '((:vlr-commandEnded . xlr-end))
  47.     '((:vlr-commandCancelled . xlr-cancel))
  48.     )
  49.   )
  50.   (vlr-editor-reactor
  51.     nil
  52.     '((:vlr-commandwillstart . xlr-edit))
  53.   )
  54. )
  55. ;;;;----------------------------------------------------------------------------;;;;
  56. (defun xlr-edit  (CALL CALLBACK /)
  57.   (foreach N *laylst
  58.     (if  (= (strcase (car CALLBACK)) (strcase (car N)))
  59. ;;;; 命令反应器返回信息如果与设置的命令相同.
  60.       (progn  ;;;;建立图层

  61.   (apply 'xsetlays (cdr N))
  62. ;;;;(setvar "CLAYER" (cadr N));设为当前层.
  63.       )
  64.     )
  65.   )
  66. )
  67. ;;;;----------------------------------------------------------------------------;;;;
  68. (defun xlr-start (calling-reactor xlr-startInfo /)
  69.   (foreach N *laylst
  70.     (if  (= (strcase (car xlr-startInfo)) (strcase (car N)))
  71. ;;;; 命令反应器返回信息如果与设置的命令相同.
  72.       (progn  ;;;;建立图层

  73.   (apply 'xsetlays (cdr N))
  74. ;;;;(setvar "CLAYER" (cadr N));设为当前层.
  75.       )
  76.     )
  77.   )
  78. )
  79. ;;;;----------------------------------------------------------------------------;;;;
  80. (defun xlr-end (calling-reactor xlr-endInfo / cmd)
  81.   (setq cmd (car xlr-endInfo))
  82.   (if (member cmd *cmdlst)
  83.     (if  (/= oldlayer nil)
  84.       (progn
  85.   (setvar "CLAYER" OldLayer)
  86.   (setq OldLayer nil)
  87.       )
  88.     )
  89.   )
  90. )
  91. ;;;;----------------------------------------------------------------------------;;;;
  92. (defun xlr-cancel (calling-reactor xlr-cancelInfo / cmd)
  93.   (setq cmd (car xlr-cancelInfo))
  94.   (if (member cmd *cmdlst)
  95.     (if  (/= oldlayer nil)
  96.       (progn
  97.   (setvar "CLAYER" OldLayer)
  98.   (setq OldLayer nil)
  99.       )
  100.     )
  101.   )
  102. )
  103. ;;;;----------------------------------------------------------------------------;;;;
  104. ;;;;----------------------------------------------------------------------------;;;;
  105. (defun xsetlays  (LAY-NAM COLOR LTYPE plotk / LAYOBJ LTYPESOBJ)

  106.   (if (tblobjname "layer" LAY-NAM)
  107.     (progn
  108.       (if (/= (strcase (getvar "CLAYER"))
  109.         (strcase LAY-NAM)
  110.     )
  111.   (setq OldLayer (getvar "CLAYER"))
  112.   (progn
  113.     (if (= oldlayer nil)
  114.       (setq OldLayer LAY-NAM)
  115.     )
  116.   )
  117.       )
  118.       (setvar "CLAYER" lay-nam)
  119.     )
  120.     (progn  ;;;;添加图层.
  121.       (vl-catch-all-error-p
  122.   (vl-catch-all-apply 'vla-add (list *lays LAY-NAM))
  123.       )
  124.       (setq LAYOBJ (vla-item *lays LAY-NAM))
  125.       (if (not (tblobjname "ltype" LTYPE)) ;添加线型.
  126.   (progn
  127.     (setq LTYPESOBJ (vla-get-linetypes *doc))
  128.     (vla-load LTYPESOBJ LTYPE (findfile "acad.lin"))
  129. ;;;;>>> 要加强,在多个*.lin寻找
  130.     (vlax-release-object LTYPESOBJ)
  131.   )
  132.       );;;;解冻(如冻结),解锁,设图层为当前,设图层颜色,可打印特性.
  133.       (vla-put-layeron layobj :vlax-true)
  134.       (vla-put-lock layobj :vlax-false)
  135.       (if (= (strcase (getvar "CLAYER")) (strcase lay-nam)) ;解冻.
  136.   (vla-put-freeze layobj :vlax-false)
  137.       )
  138.       (vla-put-color layobj color)
  139.       (vla-put-linetype layobj LTYPE)
  140.       (vla-put-plottable
  141.   layobj
  142.   (if plotk
  143.     :vlax-true
  144.     :vlax-false
  145.   )
  146.       )
  147.     )
  148.   )
  149. )
  150. (xlr-autolayer)  ;;;;加载启动!

点评

赞一个!  发表于 2016-3-18 22:09
发表于 2014-11-18 08:38 | 显示全部楼层
说真的  我也没看懂
 楼主| 发表于 2014-11-18 09:30 | 显示全部楼层
ㄘ丶转裑ㄧ灬 发表于 2014-11-17 13:06
自动切换图层,你可以参考下,(注:网络收集,感谢原作者!)

这个看不懂啊....
发表于 2014-11-18 12:55 | 显示全部楼层
magicboy555 发表于 2014-11-18 09:30
这个看不懂啊....

只需加载就行。。然后你正常操作绘图命令。。。
代码里面一些线型、颜色的修改,等你熟悉CAD了就知道很简单的。。
 楼主| 发表于 2014-11-18 15:02 | 显示全部楼层
ㄘ丶转裑ㄧ灬 发表于 2014-11-18 12:55
只需加载就行。。然后你正常操作绘图命令。。。
代码里面一些线型、颜色的修改,等你熟悉CAD了就知道很简 ...

加载进去好像没用哦
发表于 2014-11-18 20:27 | 显示全部楼层
发表于 2014-11-18 21:00 | 显示全部楼层
11楼转发的程序是很有有用的,G版也有一个更强大的。
红色圈起来的是CAD的命令,画黑色的是图层名,蓝色圈起来的是图层的线型。
程序加载后是看不出有什么反应的,但CAD运行 红色圈起来的 命令时,就会自动把命令产生的东西转到画黑色的地方的图层,,,,,,
如果要在程序里设置 线宽、颜色、打印,那就得有劳大师们高抬贵手了。
我也是不懂的,只是用着用着,看多了,知道一点点

本帖子中包含更多资源

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

x
发表于 2014-11-20 09:41 | 显示全部楼层
好资料  感谢分享!
发表于 2014-11-28 21:55 | 显示全部楼层
(command "_.-LAYER" "_OFF" "*" "y" "_ON" "DD" "_SET" "DD" "")给你这个,你自已去做吧
发表于 2014-11-28 21:56 | 显示全部楼层
;以下自动建常用图层
;;by amtonny
;;2008.02.20
;;c:
;(vl-load-com)
;(vl-load-all "cad")
;(1)
(defun s::startup () (c:1))
(defun c:1 (/ layer n dd c dx ux uu bz dm us uz um uj assy assy2 ds p dim pt l center style Standard)
(setvar "blipmode" 0)
  (setvar "osmode" 183)
  (setvar "ORTHOMODE" 1)
(setvar "MODEMACRO" (strcat "<潘工智能冲模助手>全局标注比例" (rtos (getvar "DIMLFAC") 2 2)))
  (command "_.-LAYER" "On" "*" "U" "*" "t" "*" "")
(command "layer" "n" "DD" "c" "2" "DD" "lw" "0.25" "DD" "")
(command "layer" "n" "DX" "c" "1" "DX" "lw" "0.25" "DX" "")
(command "layer" "n" "UX" "c" "210" "UX" "lw" "0.25" "UX" "")
(command "layer" "n" "UU" "c" "7" "UU" "lw" "0.25" "UU" "")
(command "layer" "n" "BZ" "c" "3" "BZ" "lw" "0.25" "BZ" "")
(command "layer" "n" "DM" "c" "4" "DM" "lw" "0.25" "DM" "")
(command "layer" "n" "US" "c" "42" "US" "lw" "0.25" "US" "")
(command "layer" "n" "UZ" "c" "5" "UZ" "lw" "0.25" "UZ" "")
(command "layer" "n" "UM" "c" "183" "UM" "lw" "0.25" "UM" "")
(command "layer" "n" "UJ" "c" "111" "UJ" "lw" "0.25" "UJ" "")
(command "layer" "n" "ASSY" "c" "252" "ASSY" "")
(command "layer" "n" "ASSY2" "c" "123" "ASSY2" "")
(command "layer" "n" "DS" "c" "7" "DS" "lw" "0.13" "DS" "")
(command "layer" "n" "P" "c" "7" "P" "lw" "0.13" "P" "")
(command "layer" "n" "DIM" "c" "7" "DIM" "lw" "0.15" "DIM" "")
(command "layer" "n" "c" "c" "7" "c" "lw" "0.13" "C" "")
(command "layer" "n" "PT" "c" "4" "PT" "lw" "0.13" "PT" "")
(command "layer" "l" "DASHED2" "PT" "lw" "0.13" "DASHED2"  "")
(command "layer" "n" "CENTER" "c" "1" "CENTER""lw" "0.13" "CENTER" "")
;(command "layer" "n" "Spring" "c" "1" "CENTER""lw" "0.13" "CENTER" "")
;(command "layer" "l" "CENTER" "CENTER" "" )
;(command "layer" "n" "PUB_TITLE" "c" "4" "PUB_TITLE" "lw" "0.13" "PUB_TITLE" "")
(command "style" "Standard" "宋体" "0" "0.8" "0" "n" "n")
(command "style" "ROMANS" "宋体" "0" "0.8" "0" "n" "n")
  (setq date0 (menucmd "M=$(edtime,$(getvar,date), YY.MO.DD)"))
(prompt "\n 快速建立图层程序由软件工程师潘工设计开发,欢迎使用")
(princ date0)
(prin1)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 14:07 , Processed in 0.205362 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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