明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 780|回复: 7

[提问] 请教一下,自动图层和最大块包围框lisp冲突,谁能帮看看

[复制链接]
发表于 2024-6-24 19:55:20 | 显示全部楼层 |阅读模式
2个程序都是从论坛下载的,发现他们同时启动加载就会冲突,使用最大块包围框的程序时,就会弹出如下对话框;
并且CAD就一直弹框报错,关都要强行关掉。

我还发现这个包围框的程序和【Gu_xl】版主的自动切换图层也会冲突,估计是这个包围框程序的问题?
有大神能帮忙改一下吗,让他们可以兼容使用,本人不会写程序,只是想找一些程序来提高工作效率,谢谢大家~
以下是自动图层
  1. (defun xlr-autolayer ()
  2.   ;; 图层初始化列表 内容:commands layers color linetype plottable
  3.   (setq *doc (vla-get-activedocument (vlax-get-acad-object)))
  4.   (setq *lays (vla-get-layers *doc))
  5.   (setq  *laylst
  6.     (list (list "DIMANGULAR" "DIM" 3 "continuous" T)
  7.           (list "DIMALIGNED" "DIM" 3 "continuous" T)
  8.           (list "DIMBASELINE" "DIM" 3 "continuous" T)
  9.           (list "DIMCENTER" "DIM" 3 "continuous" T)
  10.           (list "DIMCONTINUE" "DIM" 3 "continuous" T)
  11.           (list "DIMDIAMETER" "DIM" 3 "continuous" T)
  12.           (list "DIMLINEAR" "DIM" 3 "continuous" T)
  13.           (list "DIMORDINATE" "DIM" 3 "continuous" T)
  14.           (list "DIMRADIUS" "DIM" 3 "continuous" T)
  15.           (list "QDIM" "DIM" 3 "continuous" T)
  16.           (list "QLEADER" "DIM" 3 "continuous" T)
  17.           (list "DTEXT" "TXT" 3 "continuous" T)
  18.           (list "MTEXT" "TXT" 3 "continuous" T)
  19.           (list "TEXT" "TXT" 3 "continuous" T)
  20.          ;(list "BHATCH" "填充" 9 "continuous" T)
  21.          ;(list "HATCH" "填充" 9 "continuous" T)
  22.          ;(list "POINT" "点" 4 "continuous" T)
  23.          ;(list "XLINE" "辅助线" 8 "continuous" T)
  24.          ;(list "LINE" "0" NIL "continuous" T)
  25.          ;(list "XREF" "引用" 7 "continuous" T)
  26.          ;(list "pline" "多义线" 2 "center" T)
  27.     )
  28.   )
  29.   (setq OldLayer nil)
  30.   (setq *cmdlst (mapcar 'strcase (mapcar 'car *laylst)))
  31.   (mapcar '(lambda (x) (vlr-command-reactor nil x))
  32.     (list  '((:vlr-commandWillStart . xlr-start))
  33.     '((:vlr-commandEnded . xlr-end))
  34.     '((:vlr-commandCancelled . xlr-cancel))
  35.     )
  36.   )
  37.   (vlr-editor-reactor nil '((:vlr-commandwillstart . xlr-edit)))
  38. )
  39. ;;;----------------------------------------------------------------------------;;;
  40. (defun xlr-edit  (call callback / n)
  41.   (foreach n *laylst
  42.     (if  (= (strcase (car callback)) (strcase (car n)))
  43.       (apply 'xsetlays (cdr n))
  44.     )
  45.   )
  46. )
  47. ;;;----------------------------------------------------------------------------;;;
  48. (defun xlr-start (calling-reactor xlr-startinfo / n)
  49.   (foreach n *laylst
  50.     (if (= (strcase (car xlr-startinfo)) (strcase (car n)))  
  51.       (apply 'xsetlays (cdr n))
  52.     )
  53.   )
  54. )
  55. ;;;----------------------------------------------------------------------------;;;
  56. (defun xlr-end (calling-reactor xlr-endinfo / cmd)
  57.   (setq cmd (car xlr-endinfo))
  58.   (if (member cmd *cmdlst)
  59.     (if (/= oldlayer nil)
  60.       (progn
  61.         (setvar "clayer" oldlayer)
  62.         (setq oldlayer nil)
  63.       )
  64.     )
  65.   )
  66. )
  67. ;;;----------------------------------------------------------------------------;;;
  68. (defun xlr-cancel (calling-reactor xlr-cancelinfo / cmd)
  69.   (setq cmd (car xlr-cancelinfo))
  70.   (if (member cmd *cmdlst)
  71.     (if (/= oldlayer nil)
  72.       (progn
  73.         (setvar "clayer" oldlayer)
  74.         (setq oldlayer nil)
  75.       )
  76.     )
  77.   )
  78. )
  79. ;;;----------------------------------------------------------------------------;;;
  80. ;;;----------------------------------------------------------------------------;;;
  81. (defun xsetlays  (lay-nam color ltype plotk / layobj ltypesobj)
  82.   (defun layeron (layername / layerdata)
  83.     (setq layerdata (entget (tblobjname "LAYER" layername)))
  84.     (if (< (cdr (assoc 62 layerdata)) 0)
  85.       (progn
  86.         (setq layerdata (subst
  87.                           (cons 62 (- 0 (cdr (assoc 62 layerdata))))
  88.                           (assoc 62 layerdata)
  89.                           layerdata
  90.                         )
  91.         )
  92.         (entmod layerdata)
  93.       )
  94.     )
  95.   )
  96.   (if (tblobjname "layer" lay-nam)
  97.     (progn
  98.       (if (/= (strcase (getvar "clayer")) (strcase lay-nam))
  99.         (setq oldlayer (getvar "clayer"))
  100.         (progn
  101.           (if (= oldlayer nil)
  102.             (setq oldlayer lay-nam)
  103.           )
  104.         )
  105.       )
  106.       (layeron lay-nam)
  107.       (setvar "clayer" lay-nam)
  108.     )
  109.     (progn
  110.       (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list *lays lay-nam)))
  111.       (setq layobj (vla-item *lays lay-nam))
  112.       (if (not (tblobjname "ltype" ltype)) ;添加线型.
  113.         (progn
  114.           (setq ltypesobj (vla-get-linetypes *doc))
  115.           (vla-load ltypesobj ltype (findfile "acad.lin"))  ;>>> 要加强,在多个*.lin寻找
  116.           (vlax-release-object ltypesobj)
  117.         )
  118.       )
  119.       (vla-put-layeron layobj :vlax-true)
  120.       (vla-put-lock layobj :vlax-false)
  121.       (vla-put-color layobj color)
  122.       (if (= (strcase (getvar "clayer")) (command "layer" "on" "" "")(strcase lay-nam)) ;解冻.
  123.         (vla-put-freeze layobj :vlax-false)
  124.       )
  125.    
  126.       (vla-put-linetype layobj LTYPE)
  127.       (vla-put-plottable layobj (if plotk :vlax-true :vlax-false))
  128.     )
  129.   )
  130. )
  131. (xlr-autolayer)        ;加载启动!
以下是最大块包围框
  1. ;;;几何关系判断
  2. (defun c:tt (/ box e i ss lst bound rects)
  3.   (defun ebox (e / pa pb)
  4.     (and (= 'ename (type e)) (setq e (vlax-ename->vla-object e)))
  5.     (vlax-invoke-method e 'GetBoundingBox 'pa 'pb)
  6.     (setq pa (trans (vlax-safearray->list pa) 0 1)
  7.           pb (trans (vlax-safearray->list pb) 0 1)
  8.     )
  9.     (list pa pb)
  10.   )
  11.   (defun area (pts) (apply '* (cdr (reverse (apply 'mapcar (cons '- pts)))))) ;_求面积
  12.   (defun pt4 (pt2)
  13.     (list (car pt2) (list (caadr pt2) (cadar pt2)) (cadr pt2) (list (caar pt2) (cadadr pt2)))
  14.   ) ;_对角点生成四角点
  15.   (defun PtInPoly (pt pts)
  16.     (equal pi
  17.            (abs
  18.              (apply '+ (mapcar '(lambda (x y) (rem (- (angle pt x) (angle pt y)) pi)) (cons (last pts) pts) pts))
  19.            )
  20.            1e-6
  21.     )
  22.   ) ;_点是否在凸多边形内(角度法)
  23.   ;;
  24.   (setq ss (ssget '((0 . "INSERT"))))
  25.   (repeat (setq i (sslength ss))
  26.     (setq e (ssname ss (setq i (1- i))))
  27.     (setq lst (cons (ebox e) lst)) ;_提取边界对角点,不生产矩形
  28.   )
  29.   (setq lst (vl-sort lst '(lambda (x1 x2) (> (area x1) (area x2))))) ;_按面积大小排序
  30.   (while lst
  31.     (setq rects (cons (car lst) rects)) ;_矩形对角点集
  32.     (setq bound (pt4 (car lst))) ;_矩形边界
  33.     (setq lst (vl-remove-if '(lambda (x) (and (PtInPoly (car x) bound) (PtInPoly (cadr x) bound))) (cdr lst))) ;_移除大矩形边界内的小矩形
  34.   )
  35.   (mapcar '(lambda (x) (command-s "rectang" (car x) (cadr x))) rects) ;_批量生成矩形
  36.   (princ)
  37. )










本帖子中包含更多资源

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

x
发表于 2024-6-25 09:33:48 | 显示全部楼层
反应器慎用呀,有些毫不相干的,也有影响。
回复 支持 1 反对 0

使用道具 举报

发表于 2024-6-25 08:30:45 | 显示全部楼层
自动图层有问题,也没什么用,关闭就是了。
不明白自动图层有什么作用?
DIM
TEXTLAYER
也可以分层。
发表于 2024-6-25 08:51:55 | 显示全部楼层
自动图层以前还是用的,在 AutoCAD 陆续提供了 DIMLAYER,TEXTLAYER, HPLAYER 之后,基本上可以不需要了。
发表于 2024-6-25 09:16:37 | 显示全部楼层
我从来不用自动图层
要分的图元会在插件加上图层,颜色。
自动图层命令也只能改 command 生成的图元。
发表于 2024-6-25 09:32:15 | 显示全部楼层
e2002 发表于 2024-6-25 08:51
自动图层以前还是用的,在 AutoCAD 陆续提供了 DIMLAYER,TEXTLAYER, HPLAYER 之后,基本上可以不需要了。

哪个版本开始提供的呀?

点评

大家可以去查看帮助文件,其中有一节,是列出当前版本及之前的若干个版本中的 命令 与 系统变量 的变化 (增加/删除/修改)。  发表于 2024-6-25 21:22
 楼主| 发表于 2024-6-25 21:46:04 | 显示全部楼层
gzcsun 发表于 2024-6-25 08:30
自动图层有问题,也没什么用,关闭就是了。
不明白自动图层有什么作用?
DIM

我还真不知道高版本已经做成自带的命令了。。。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-19 03:32 , Processed in 0.155984 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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