明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 663|回复: 6

[提问] 有没有防止lisp修改当前图层的办法?

[复制链接]
发表于 2018-11-27 10:34 | 显示全部楼层 |阅读模式
使用探索者的尺寸标注的时候,经常因为按Esc取消的缘故,造成当前图层从之前的图层变为DIM图层的情况,有没有办法防止因为LISP的编写失误导致自动更改当前图层而变不回去的情况?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-11-27 11:05 | 显示全部楼层
用反应器应该可以做到,之前我用其它软件的时候会修改我的标注样式,后来我也是用反应器处理好
 楼主| 发表于 2018-11-27 14:25 | 显示全部楼层
lch8526 发表于 2018-11-27 11:05
用反应器应该可以做到,之前我用其它软件的时候会修改我的标注样式,后来我也是用反应器处理好

请问lisp如何编写呢?
发表于 2018-11-27 14:58 来自手机 | 显示全部楼层
我用探索者没有你说的情况
发表于 2018-11-27 14:59 来自手机 | 显示全部楼层
我就是觉得探索者的标注后要多按一次esc很烦,不然不能输入下一条命令,而是修改标注文字,真是弱智
 楼主| 发表于 2018-11-27 16:40 | 显示全部楼层
CAD新军 发表于 2018-11-27 14:59
我就是觉得探索者的标注后要多按一次esc很烦,不然不能输入下一条命令,而是修改标注文字,真是弱智

一开始不会出现,但是CAD开时间长了就会有这种情况
发表于 2018-11-28 10:46 | 显示全部楼层
本帖最后由 437271963 于 2018-11-28 13:31 编辑
  1. (defun xlr-autolayer_LL ()
  2.   (vl-load-com)
  3.   ;(TextDim)
  4.   (setq *doc_doc (vla-get-activedocument (vlax-get-acad-object)))
  5.   (setq *lays_lays (vla-get-layers *doc_doc))
  6.   (setq  *laylst_laylst
  7.    '(("DIMANGULAR" "DIM" 3 "continuous" T)
  8.      ("DIMALIGNED" "DIM" 3 "continuous" T)
  9.      ("DIMBASELINE" "DIM" 3 "continuous" T)
  10.      ("DIMCENTER" "DIM" 3 "continuous" T)
  11.      ("DIMCONTINUE" "DIM" 3 "continuous" T)
  12.      ("DIMDIAMETER" "DIM" 3 "continuous" T)
  13.      ("DIMLINEAR" "DIM" 3 "continuous" T)
  14.      ("DIMORDINATE" "DIM" 3 "continuous" T)
  15.      ("DIMRADIUS" "DIM" 3 "continuous" T)
  16.      ("QDIM" "DIM" 3 "continuous" T)
  17.      ("QLEADER" "DIM" 3 "continuous" T)
  18.      ("DTEXT" "TEXT" 3 "continuous" T)
  19.      ("MTEXT" "TEXT" 3 "continuous" T)
  20.      ("TEXT" "TEXT" 3 "continuous" T)
  21.      ("DIM" "DIM" 3 "continuous" T)
  22.    )
  23.   )
  24.   (setq OldLayer_OldLayer nil)
  25.   (setq *cmdlst_cmdlst (mapcar 'strcase (mapcar 'car *laylst_laylst)))
  26.   (mapcar '(lambda (x) (vlr-command-reactor nil x))
  27.     (list  '((:vlr-commandWillStart . xlr-start))
  28.     '((:vlr-commandEnded . xlr-end))
  29.     '((:vlr-commandCancelled . xlr-cancel))
  30.     )
  31.   )
  32.   (vlr-editor-reactor
  33.     nil
  34.     '((:vlr-commandwillstart . xlr-edit))
  35.   )
  36. )

  37. ;;;----------------------------------------------------------------------------;;;
  38. (defun xlr-edit  (CALL CALLBACK / n)
  39.   (foreach N *laylst_laylst
  40.     (if  (= (strcase (car CALLBACK)) (strcase (car N)))
  41.           ; 命令反应器返回信息如果与设置的命令相同.
  42.       (progn        ;建立图层
  43.   (apply 'xsetlays (cdr N))
  44.           ;(setvar "CLAYER" (cadr N));设为当前层.
  45.       )
  46.     )
  47.   )
  48. )
  49. ;;;----------------------------------------------------------------------------;;;
  50. (defun xlr-start (calling-reactor xlr-startInfo / n)
  51.   (foreach N *laylst_laylst
  52.     (if  (= (strcase (car xlr-startInfo)) (strcase (car N)))
  53.           ; 命令反应器返回信息如果与设置的命令相同.
  54.       (progn        ;建立图层
  55.   (apply 'xsetlays (cdr N))
  56.           ;(setvar "CLAYER" (cadr N));设为当前层.
  57.       )
  58.     )
  59.   )
  60. )
  61. ;;;----------------------------------------------------------------------------;;;
  62. (defun xlr-end (calling-reactor xlr-endInfo / cmd)
  63.   (setq cmd (car xlr-endInfo))
  64.   (if (member cmd *cmdlst_cmdlst)
  65.     (if (/= OldLayer_OldLayer nil)
  66.        (progn
  67.            (setvar "CLAYER" OldLayer_OldLayer)
  68.            (setq OldLayer_OldLayer nil)
  69.        )
  70.     )
  71.   )
  72. )
  73. ;;;----------------------------------------------------------------------------;;;
  74. (defun xlr-cancel (calling-reactor xlr-cancelInfo / cmd)
  75.   (setq cmd (car xlr-cancelInfo))
  76.   (if (member cmd *cmdlst_cmdlst)
  77.     (if (/= OldLayer_OldLayer nil)
  78.        (progn
  79.            (setvar "CLAYER" OldLayer_OldLayer)
  80.            (setq OldLayer_OldLayer nil)
  81.        )
  82.     )
  83.   )
  84. )
  85. ;;;----------------------------------------------------------------------------;;;
  86. ;;;----------------------------------------------------------------------------;;;
  87. (defun xsetlays  (LAY-NAM COLOR LTYPE plotk / LAYOBJ LTYPESOBJ)
  88. (if (tblobjname "layer" LAY-NAM)
  89.     (progn
  90.       (if (/= (strcase (getvar "CLAYER"))
  91.         (strcase LAY-NAM)
  92.     )
  93.   (setq OldLayer_OldLayer (getvar "CLAYER"))
  94.   (progn
  95.     (if (= OldLayer_OldLayer nil)
  96.       (setq OldLayer_OldLayer LAY-NAM)
  97.     )
  98.   )
  99.       )
  100.       (setvar "CLAYER" lay-nam)
  101.     )
  102.     (progn        ;添加图层.
  103.       (vl-catch-all-error-p
  104.   (vl-catch-all-apply 'vla-add (list *lays_lays LAY-NAM))
  105.       )
  106.       (setq LAYOBJ (vla-item *lays_lays LAY-NAM))
  107.       (if (not (tblobjname "ltype" LTYPE)) ;添加线型.
  108.   (progn
  109.     (setq LTYPESOBJ (vla-get-linetypes *doc_doc))
  110.     (vla-load LTYPESOBJ LTYPE (findfile "acad.lin"))
  111.           ;>>> 要加强,在多个*.lin寻找
  112.     (vlax-release-object LTYPESOBJ)
  113.   )
  114.       )          ;解冻(如冻结),解锁,设图层为当前,设图层颜色,可打印特性.
  115.       (vla-put-layeron layobj :vlax-true)
  116.       (vla-put-lock layobj :vlax-false)
  117.       (if (= (strcase (getvar "CLAYER")) (strcase lay-nam)) ;解冻.
  118.   (vla-put-freeze layobj :vlax-false)
  119.       )
  120.       (vla-put-color layobj color)
  121.       (vla-put-linetype layobj LTYPE)
  122.       (vla-put-plottable
  123.   layobj
  124.   (if plotk
  125.     :vlax-true
  126.     :vlax-false
  127.   )
  128.       )
  129.     )
  130.   )
  131. )
  132. (xlr-autolayer_LL)
标注的时候,自动切换到图层【DIM】,写文字的时候,自动切换图层【TEXT】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-16 15:28 , Processed in 0.246165 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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