bohoon 发表于 2022-7-5 23:23:40

强制尺寸

这是我的第一个帖子,所以首先我想欢迎大家。我希望我能从你们身上学到很多。
 
我想写一个简单的(我希望如此)lisp,这将帮助我在办公室的工作很多。我们收到的图纸是2d的,但是从bentley软件上制作的3d模型创建的。因此,即使未更改所有尺寸,也会覆盖所有尺寸。我们被要求在每一个被缩短的维度上划线。我想要实现的是,通过一个命令,选择图纸中的所有尺寸,检查它们是否与实际测量相匹配(这是我真正感到困惑的地方),如果没有,则覆盖它们(在覆盖的文本之前放置%%o)。
稍后,我想对它进行一点开发,也许可以添加选择全部或仅选择维度的选项,但它不是“必须具备的”
 
我的lisp水平非常基本。到目前为止,我宁愿做更多的脚本,而不是lisp,但我想了解更多,这就是为什么我感谢所有的帮助,这和尽可能多的评论,以帮助我了解它是如何工作的。
 
感谢您的回复

Bill Tillman 发表于 2022-7-5 23:32:41

首先,欢迎来到论坛。你会在这里找到许多答案和想法。但是你的帖子有点让人困惑。。。如果你能在未来的帖子上做些什么,这将帮助你和我们为你提供更多帮助。不要写“我想做什么……”然后再花40个单词来完成你想做的部分。只是一个建议。
 
无论如何,如果我理解你的问题是,你想选择图纸中的所有尺寸,并通过“检查哪些尺寸被缩短了…”你的意思是将选择范围缩小到包含文本覆盖的选项吗?如果是这样的话,我们可能会引导您使用一些LISP代码,它正是这样做的。我知道我看到过CAD教员的帖子,他们经常这样做,以检查他们的学生在绘制时没有通过在他们的作品中使用文本覆盖来走捷径。

Jef! 发表于 2022-7-5 23:41:27

欢迎来到cadtutor!
 
 
如果我能很好地理解:
-每个dim都会被一个值覆盖
-您要检查覆盖的值是否对应于“真实”维度
-如果未加下划线,则将更改的值覆盖为dims。
 
 
这是可以实现的,但需要知道的事情很少。
-覆盖值是手动生成还是自动生成?(它们总是采用相同的格式吗?)
-被覆盖维度的格式是什么?
-未覆盖维度的格式是什么?
-维度是否包含任何非数字字符?
 
 
虽然很容易获得图形中所有尺寸的实值和覆盖值,但使用lisp将实数尺寸值与手写字符串覆盖进行比较可能是另一回事。
例如:将12.128与“10-1/8”…或“12.125”进行比较。或“12-1/8”
 
 
另一件需要记住的事情是,维度的实际值可以是12.128,如上所述。如果覆盖样式为建筑样式,则比较值可以为“12-1/8”……这意味着,如果精度为1/16,则必须进行检查,因此,如果覆盖的值不同于图纸的精度,则必须将其评估为等效值。
 
 
我做了一个lisp,我必须将覆盖的值与实际值进行比较,如果没有样本,就无法进一步处理。
你能提供要求的信息和样品图纸吗?

bohoon 发表于 2022-7-5 23:47:26

感谢您的两个回复
 
比尔,我明白你的意思,我会尽量避免这么多的文字。我看到了你提到的这些口吃,并试图将它们转换为我的需要,但不幸的是,我还不够好,自己做这件事。在我的情况下,所有维度都被覆盖
但问题是,只在覆盖值与实际测量值不匹配的情况下添加前缀“%%o”。
 
杰夫!我将尝试回答您的问题:
-1-它们是自动生成的,但不确定格式,因为样式可以在创建二维图形之前更改
-2和3-你所说的格式到底是什么意思?英制还是公制?如果对这两种情况都是这样,那么我们总是使用带小数点的公制尺寸(例如12.125),因此您用“12-1/8”描述的情况和等效值的评估永远不会发生
-4-不,它们总是数字
 
这些类型的图纸是典型的车间图纸,不会使用建筑尺寸。
如果我没有解释你的问题,或者我误解了你的疑虑,请再问我一次。再次感谢您的帮助。

Jef! 发表于 2022-7-5 23:52:11

挑战是比较字符串和实数。。。但知道它们是自动生成和十进制的,我认为这消除了许多最坏的情况。 
好吧,知道维度是带小数点的度量是一个开始。说到格式,我指的是dimstyle管理器(修改按钮)上“主要单位”选项卡中显示的所有内容。(不过,不要麻烦给我AutoCAD的值,因为尺寸不是由AutoCAD生成的)。 
作为信息,这些将是
-单位格式(建筑、十进制、工程、分数、科学等)
-单位精度(尺寸值四舍五入)这可以应用于任何单位格式(通用建筑基本英制尺寸标注的精度为1/16)“,常见的英制十进制标注的精度为0.000/0.0000。我对公制没有太多研究,但我想可以使用精度0.0。我仍然会确保实值和覆盖值之间的差异大于将其标记为覆盖之前的精度,因为建模时有人可能错误地键入了1.32而不是1.3)
-小数分隔符(当尺寸实值为1.25mm时,覆盖值可能为1.25mm。这取决于软件放置覆盖与cad设置。)
-分数格式(不适用于您的情况,但具有架构格式的1/2“和½”是两种不同的东西)
 
我仍然需要一个包含这两个维度的样例图形(一些具有实际值的替代,一些具有修改值的替代)这将回答我所有的问题和可能有,节省大量的打字,来回,并给我一些测试。

bohoon 发表于 2022-7-5 23:59:36

你好
我创建了一个典型梁图的示例。我希望你在打开时不会有问题-它实际上是一个3d图形。如果必要的话,我可以把它弄平。
 
你可能会注意到,没有缩短的维度不会被数字覆盖,而只会被符号覆盖。我真的不确定它什么时候变了,但currnet版的宾利就是这样(或者这是内部设置的情况)。很抱歉,因为我误导了你。我应该在发布之前检查一下:/
 
这是否意味着现在它会变得更复杂或更少?
图纸1.dwg

Jef! 发表于 2022-7-6 00:03:23

不,没有必要。。我甚至可以说,最好是lisp直接在自动生成的文件上执行任务。如果之前没有人为操作,输入是恒定的。。。 
 
相反!放弃包含“”的任何重写比尝试操作字符串以将其与实数进行比较更容易。 
 
好的,给你。在开始时,有一个变量排除列表。我使lisp忽略其中的任何项,因此现在它不会修改没有覆盖(“”)的任何维度,也不会修改“”覆盖。任何其他维度都将被覆盖。由于维度具有与原始值相同的覆盖,我没有费心比较覆盖值(OverwritenValue)和实值(realvalue)。没有必要这样做。
 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;LSP routine made by Jef!
;;2014-02-06
;;with no expressed written or applied warranty
;;;;;;;;;;;;;;

(defun c:OverrideFinder ( / working_list counter entity entityslist overwrittenvalue realvalue exclusionlist)
   (command "undo" "be")
   (setq exclusionlist (list "<>" ""));add more if required
(if (setq working_list (ssget "_X" '((0 . "*DIMENSION")) ))
   (progn
(princ "Dimensions detected")
(setq counter 0)
(while (< counter (sslength working_list))
      (setq entity (ssname working_list counter))
      (setq entityslist (entget entity))
               (if (not (member (setq overwrittenvalue (cdr (assoc 1 entityslist))) exclusionlist))
                   (progn
                      (princ "\nDimension processed!")
                      (setq realvalue (cdr (assoc 42 entityslist)))
                      (entmod (subst (cons 1 (strcat "%%o" overwrittenvalue)) (assoc 1 entityslist) entityslist))
                   );progn
                  (princ "\nDimension with no overwride skipped")
               );if
(setq counter (+ 1 counter))
);while
      );progn
   (alert "No dimensions found.. Ungroup first!")
   )
   (princ "Processing finished")
   (command "undo" "end")
)
很漂亮吧?
如果你想学习LISP,请逐个表达式分析所有内容。。
有了奉献精神,就有可能实现许多事情。
我从来并没有参加过任何课程,我的帖子在3或4个月前写的看起来像“if函数的结构”,“setq不需要引号,setvar需要”。。看看我刚做的。事实上,我给自己留下了深刻的印象!
不要犹豫,谷歌任何功能,以充分了解它。做许多书面笔记,这有助于吸收知识。。每次你复习笔记,你都能看到你取得的进步。例如:“嘿,上个月我需要笔记来做一个cond声明”。
如果需要进一步解释,请随时询问。(你应该)
 
 
快乐编码,
干杯
杰夫!

bohoon 发表于 2022-7-6 00:06:18

我刚刚试过,它对我来说非常好。再次感谢您的时间和帮助。我不太懂Lisp程序,但我也印象深刻
我会接受你的建议,逐行分析。我对简单的rutines有很多想法,可以让我的生活更轻松,这就是为什么我确信花在学习lisp上的时间不会被浪费。

bohoon 发表于 2022-7-6 00:13:49

Jef。。。或者其他愿意帮助的人:)
Lisp很好用,但令人遗憾的是,即使在尺寸没有缩短的情况下,也会出现所有尺寸都被覆盖的情况(当程序创建单个元素(如板材、钢型材等)的二维图形时会出现这种情况)
我试图自己改变你的代码,但没有成功。
我想我需要做的是添加一个“if”函数,该函数将比较真实维度值和被覆盖维度值。必须首先将超差值从文本转换为数字。我想将公差设置为1 mm(1个绘图单位)-例如,如果实际值大于/小于覆盖值的1个单位-->尺寸将转到代码中使用的排除列表。我希望你知道我的意思。
你能再帮我一次吗?

marko_ribar 发表于 2022-7-6 00:19:56

替换此行:

(entmod (subst (cons 1 (strcat "%%o" overwrittenvalue)) (assoc 1 entityslist) entityslist))

 
使用此行:

(if (not (equal realvalue (atof overwrittenvalue) 1.0))
   (entmod (subst (cons 1 (strcat "%%o" overwrittenvalue)) (assoc 1 entityslist) entityslist))
)

 
当然,这意味着这些值是可比较的(您的声明,即所有维度都是度量的,并用十进制结构的数字表示)
页: [1] 2
查看完整版本: 强制尺寸