rickh 发表于 2022-7-6 07:46:45

确定dwg单位是否为长度

大家好,
我正在写一个小例程来输出acres、sf、sy等。。。所以我想检查长度的绘图单位,以确保它们设置为英尺。
 
我知道如果我在c3d中键入“-dwgunits”(或“-aecdwgunits”),第一项就是我要找的,如下所示。
 
有人能给我指出正确的方向,从lisp内部检查这个值吗?非常感谢!
 
绘图单位:
1.英寸
2、脚
3.毫米
4.厘米
5、分米
6.仪表
长度单位:

JPlanera 发表于 2022-7-6 08:08:21

试试这个
 
(setq DU (getvar "insunits"))

rickh 发表于 2022-7-6 08:18:26

谢谢你的回复,但是单位和长度单位不一样。。。通过“-aecdwgunits”命令运行,最后一个设置询问您是否要匹配这两个选项:
 
将单位与绘图单位匹配?[是/否]:

JPlanera 发表于 2022-7-6 08:32:47

Match INSUNITS应始终为“是”。否则,以英寸为单位绘制的块在插入时将转换为毫米。。。你为什么要这样?将其更改为YES,以上代码将起作用。。。除非有理由需要插入单位与绘图单位不同。。。对我来说没有意义。

rickh 发表于 2022-7-6 08:40:58

很抱歉我同意-INSUNIT应该匹配(尽管有时首选unitless)。。。。
 
但这不是重点。我试图检查图纸的长度单位(getvar???)如果可能的话。我的观点是,检查insunits并不能保证长度单位是相同的。
 
Civil 3d中出现问题的一个例子是,当某人从没有Civil 3d的架构师(例如)那里获得acad文件时。civil 3d(设置选项卡)中的图形单位只允许英尺或米。但是,这些实例中的原始文件不是使用civil 3d创建的,因此长度单位可能为“英寸”。至于INSUNIT,它们可能来自外部客户。。。。但就我而言,这无关紧要。在这些文件中,选择英尺或米并返回“设置”选项卡以设置单位后,您将看到“英寸”不再是有效的选择。这是一个用户的问题,他们不了解正在发生的一切。我只是想防止错误的输出,而不假设他们知道自己在做什么。
 
我希望这篇文章不是以消极的态度阅读的。。。。只是想解释一下我的推理。如果他们的长度单位没有设置为英尺,我想向他们发送一条禁止信息。。。。。如果它们不匹配,也许我可以添加一条消息。。。。
 
谢谢

jvillarreal 发表于 2022-7-6 08:47:01

JPlanera的建议是你最好的选择。
这是给你的读物:http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Command-DwgUnits/td-p/1922109
我附上了我的区域程序,作为您如何在程序中使用insunits的示例。
AC_AREA-CALC_v2.1_原件。lsp
页: [1]
查看完整版本: 确定dwg单位是否为长度