乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 3

[编程交流] 需要小帮助,获得普林斯

[复制链接]

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 06:07:19 | 显示全部楼层 |阅读模式
大家好,
 
我正在做一个lisp,并试图在屏幕上显示一条错误消息,说明出了什么问题以及为什么不能继续。
 
这是我的错误消息。它应该只显示一个。目前,它正在做这两件事。有人能告诉我为什么要这样做吗?
 
“***错误***绘图单位不是公制。请尝试英寸选项”
“***错误***绘图单位不是英寸。请尝试公制选项”
 
请原谅我的“不太干净”LISP编码方法。
我已经发布了截短的LISP,这里提到的一些defun没有附上。
 
谢谢
 
 
 
  1. (defun C:PRES2A (/ OIU Dunits)
  2.          (setq OIU (getvar "insunits"))
  3.          (initget "I M")
  4.          (setq Dunits (getkword "\nIs this Inch template or Metric? (I,M) <Inches>:"))
  5.          (if (= Dunits nil) (setq Dunits "I"))
  6.   (if (and (= Dunits "I")
  7.                   (= OIU 1)
  8.            (not (tblsearch "LAYER" "FORMAT"))
  9.               )               
  10.             (progn      
  11.        (Inch)
  12.        (blkrem)
  13.               (alert "\nblocks cleaning complete.")
  14.             ); end progn
  15.      (princ "\n*** Error *** Drawing unit is not Inches. Try Metric option")
  16.          );end if
  17.   (if (and (= Dunits "M")
  18.                   (= OIU 4)
  19.            (not (tblsearch "LAYER" "FORMAT"))
  20.               )
  21.             (progn      
  22.        (Metric)
  23.        (blkrem)
  24.               (alert "\nBlocks cleaning complete.")
  25.              ); end progn
  26.     (princ "\n*** Error *** Drawing unit is not Metric. Try Inch option")
  27.          );end if
  28. (princ)
  29. ) ; end of program
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 06:43:25 | 显示全部楼层
变量Dunits的选择是“I”或“M”,因此如果Dunits是“I”,则它不能是“M”,反之亦然。如果表达足够的话。
 
请记住,INSUNIT有20个可能的值。
 
此外,该表达式(非(tblsearch“LAYER”“FORMAT”))应位于程序的开头,因为它是一个要求,与Dunits值无关。
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:06:03 | 显示全部楼层
像这样的?我猜你画的单位不是1或4。如上所述;有点多余,但我刚刚添加到您的代码中。
 
  1. (defun c:pres2a (du / iu)
  2.    (setq iu (getvar 'insunits))
  3.        (if
  4.            (= iu (or 1 4))
  5.            (progn
  6.                (initget "i m")
  7.                    (if
  8.                        (= du nil)
  9.                        (setq du "i")
  10.                    )
  11.                        (setq du (getkword (strcat "\nIs the drawing imperial or metric [i/m] <" du "> : ")))
  12.                        (if
  13.                            (and
  14.                                (= du "i")
  15.                                (= iu 1)
  16.                                (not (tblsearch "LAYER" "FORMAT"))
  17.                            )
  18.                                (progn
  19.                                    (Inch)
  20.                                    (blkrem)
  21.                                    (alert "\nblock cleaning complete")
  22.                                )
  23.                                (princ "\n*** Error *** Drawing unit not imperial, use metric option!")
  24.                        )
  25.                        (if
  26.                            (and
  27.                                (= du "m")
  28.                                (= iu 4)
  29.                                (not (tblsearch "LAYER" "FORMAT"))
  30.                            )
  31.                                (progn
  32.                                    (metric)
  33.                                    (blkrem)
  34.                                    (alert "\nblock cleaning complete")
  35.                                )
  36.                                (princ "\n*** Error *** Drawing unit not metric, use imperial option!")
  37.                        )
  38.            )
  39.            (princ "\nYou silly goose, units must be inches or millimeters!")
  40.        )
  41. (princ)
  42. )
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:22:47 | 显示全部楼层
你好,pBe
我认为你在这一点上是正确的。我需要在起跑线上加上这个。
 
嗨CheSyn
绘图单位始终为公制或英制,仅此两种。
 
 
:) 
这就是为什么我要写这个lisp:图形是从Solidworks转换到AutoCAD的。dwg格式。进入AutoCAD后,我需要删除整个图纸,只保留内部对象。同时删除不再需要的标准块。由于英寸和公制的模板大小不同,我需要获取单位信息,以验证我是否错误地运行了要删除的错误坐标。
 
tblsearch是我最近添加的安全功能。如果有人意外或故意在标准AutoCAD图形上运行此实用程序,则模板包含一个名为“Format”的图层,该图层将检测并终止。我看到我的一些用户滥用了我的试用工具,但他们并不知道其中的原因。这是我最近学到的东西。但我确实希望他们把它搞乱,这样我就可以一步一步地进一步改进它。
 
谢谢你们的帮助。
当做
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 18:32 , Processed in 0.384538 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表