碰到了两个奇怪的无法解决的bug,求助
本帖最后由 hadessna 于 2025-4-23 15:40 编辑弄了个绘制垫块的lisp,原理上就是绘制一个矩形+两条对角线,另外加上文字尺寸,并归层建块插入。有两种输入模式,默认是鼠标点击两个对角点绘制,第二种是空格或回车后输入尺寸插入。尺寸取值四舍五入取整,小于1时取1。当宽度小于高度,插入块时把对象旋转90°
目前有两个无法理解的bug
1、在DK垫块测试环境.dwg文档中,把图纸内的白色矩形删掉(即空白图纸),首次运行DK时,前一段代码正常执行,但是执行到建块之前就停止并报错。第二次运行DK就正常了……
2、当输入宽度和高度尺寸相等(即len=wid)也会报错,排查了一下,是尺寸转换的时候出错的,我本意是想当输入的宽度小于高度时,把这两个变量值调转,我尝试用
(SETQ len (VL-SORT (LIST len wid) '<) wid (CAR len) len(CADR len));
和
(if swap-flag
(setq temp len len wid wid temp))
两种转换方式都不成功,而且把条件参数改为(setq swap-flag (<= len wid))也不行,让我一个新手实在是摸不着头脑
找了一下DeepSeek,也解决不了,只能厚着脸皮来这里求助大佬了。
本帖最后由 tryhi 于 2025-4-23 16:07 编辑
hadessna 发表于 2025-4-23 15:23
1、这是同一个问题,在我发出来的那个dwg文件中删除矩形后,其实就已经是空白文档来的了,我的lisp里面有 ...
1、你创建图层的代码是错误的,并没有创建成功
2、定义全局*error*容易引起其他程序冲突
3、手动模式下第53、54行的p1、p2必然被运行导致出错,除非你上传的lsp不是你在用的lsp
第一个问题,报错是变量未定义,把83行的(setq oldLayer (getvar "CLAYER")); 保存原始图层,放到59行的if前面可解决
第二个问题,饭点到了,没看 tryhi 发表于 2025-4-23 12:12
第一个问题,报错是变量未定义,把83行的(setq oldLayer (getvar "CLAYER")); 保存原始图层,放到59行的i ...
你这时间观念太强了,差评。:lol tryhi 发表于 2025-4-23 12:12
第一个问题,报错是变量未定义,把83行的(setq oldLayer (getvar "CLAYER")); 保存原始图层,放到59行的i ...
感谢指导,我尝试了一下,还是一样的效果,当图纸里面是没有图元的空白图纸的时候,还是会在0,0的原点坐标位置把矩形、对角线、文字正常执行绘制出来,但是却没有执行后续的建块和插入操作…… 本帖最后由 tryhi 于 2025-4-23 14:59 编辑
hadessna 发表于 2025-4-23 14:38
感谢指导,我尝试了一下,还是一样的效果,当图纸里面是没有图元的空白图纸的时候,还是会在0,0的原点坐 ...
你提的这个是另外的问题了,不是那个变量报错的问题了,只能说这代码写出了不少问题,空白图报错是缺少“Text”“Gasket”层,
还有你最后那句(*error* nil)又是干嘛的?
另外输入模式下报错是因为调用了p1、p2变量,你都没有输入p1、p2,后面调用那肯定出错
本帖最后由 hadessna 于 2025-4-23 15:27 编辑
tryhi 发表于 2025-4-23 14:51
你提的这个是另外的问题了,不是那个变量报错的问题了,只能说这代码写出了不少问题,空白图报错是缺少“ ...
1、这是同一个问题,在我发出来的那个dwg文件中删除矩形后,其实就已经是空白文档来的了,我的lisp里面有编写了如果存在“Text”“Gasket”层就跳过,如果没有图层才会建立这两个图层,但是我这个dwg文件已经有这两个图层了……而且,执行DK后,他实际上已经切换了图层并把图元绘制出来了,只是没有执行后面的建块和插入代码
2、(*error* nil)是抄的论坛通用代码,就是在修改部分系统变量的情况下,比如捕捉模式和图层切换,如果中途按esc退出去,导致最后的恢复变量的代码还没有执行,这时候这个通用代码就可以让系统变量变回去,(*error* nil)和主程序之前那些代码都是论坛的通用代码,不影响运行的。
3、手动输入模式下,插入点的insertPt是通过点击来指定的,跟p1、p2变量无关(setq insertPt (getpoint "\n指定插入点: ")),点击两点模式下,才会调用p1、p2自动计算插入点。
另外,不管是手动输入还是点击输入,只要是宽度和高度相等,都会报错……
tryhi 发表于 2025-4-23 15:40
1、你创建图层的代码是错误的,并没有创建成功
2、定义全局*error*容易引起其他程序冲突
3、手动模式下 ...
按你说的,我把那些P1P2变量调整了一下位置,第二个问题确实是解决了,谢谢
不过新建图层我改成了command函数,空白图纸上首次运行依然还是出错
本帖最后由 tryhi 于 2025-4-23 16:10 编辑
hadessna 发表于 2025-4-23 16:06
按你说的,我把那些P1P2变量调整了一下位置,第二个问题确实是解决了,谢谢
不过新建图层我改成了comm ...
空白图纸是因为你的startEnt没处理好,你下载我上传的lsp去看吧
发现你的lsp是UTF-8,CAD2021以上版本?没用过这么高的版本,可能有些不一样
tryhi 发表于 2025-4-23 15:40
1、你创建图层的代码是错误的,并没有创建成功
2、定义全局*error*容易引起其他程序冲突
3、手动模式下 ...
大佬,请收下我的膝盖,谢谢
页:
[1]