旋转属性问题
(defun hms:attrt (/ ATTLST OBJ RT S1)
(if (setq s1 (ssget "_L" '((0 . "INSERT") (66 . 1))))
(progn
(setq obj (vlax-ename->vla-object (ssname s1 0)))
(setq attlst (vlax-invoke obj 'GetAttributes))
(foreach a attlst
(setq rt (vla-get-Rotation a))
(if (and (> rt (/ pi 2.)) (< rt (* pi 1.5)));; and
(progn
(setq rt (+ pi rt))
(vlax-put-property a 'Rotation rt)
);; progn
);; if
);; foreach
);; progn
);; if
(princ)
);; hms:attrt
hmsilva工具箱中的一个,这对我需要它做的大部分事情都很有用,除了一个问题。。。。如果配件旋转90度,我需要将属性旋转到270度,以使所有文本保持从左到右从上到下的读取方式,并且可以修改此例程,但这高于我目前的技能水平。如果有人愿意帮忙修改上述内容,我将不胜感激 一个简单的问题:如果你的配件有多个标签,你仍然希望它们彼此对齐吗?一、 e.你不想这样:
您更希望这样:
是的,确切地说,你是如何在第二个图像中得到它的,除了文本需要与属性水平旋转的文本相距180,以便从左到右从上到下读取。
这可能违反直觉,但这是我们的领导希望文本对齐的方式。
我能够理解Henrique工具箱attrt中的许多代码行,但实际上并没有遵循(foreach)语句,如果您能够解释它们,我可能能够正确地修改它。
关于这一点和VLISP的属性处理,一个简单的问题是,“a”变量是否等同于我在“(vlax invoke obj’GetAttributes))之后经常看到的“attributes”,但我从来没有看到它(setq)’d,这使我认为VLISP将“a”理解为“属性”,好像它是一个定义的符号而不是一个变量。。。希望这是有道理的。
谢谢你的回复,我知道随着你的关注,这将很快得到解决!为此,干杯! 您可以尝试更改:
>和
收件人:
>=和
M、 R。
对于align,我不知道Irneb在想什么。。。你必须等待他的回应。。。 也作为快速注释;
我并没有要求Henrique解释他自己的程序,因为那个人已经帮了我很多,基本上在我们创建一个程序的时候一直握着我的手。
如果可能的话,我尽量让他放松 那会怎么样?
要知道,通过修改,它将使小于或大于,小于或等于,大于或等于,但如果将属性旋转90度更改为270度,那么这会做什么,从而对块旋转90度的属性进行180度交换。
我们在绘图中使用正交,并且我们不会手动创建或修改(很多)等轴测图,因此我们实际上几乎只处理90/180/270/0,尽管与奇数旋转的兼容性并不差。
只是试着理解,而不是试图给一个困难的时间 我必须花更多的时间来解释。这不是对Henrique代码的简单更改-您基本上需要计算出每个属性的插入点和框大小,因此在旋转它们之后,您也需要将它们彼此移开。今晚晚些时候再联系他们。现在有点忙。
变量是由foreach更改的变量。foreach是一个循环,它获取一个列表,并将该列表中的每个项目放入您命名的变量中,然后使用该变量运行其余的行。类似这样的情况:(setq myList '(1 2 3 4 5) total 0)
(foreach item myList
(setq total (+ total item)))这将与您所做的相同(尽管foreach在这里更为优化,因为它不会花费为每个项目进行第n次所需的时间):
(setq myList '(1 2 3 4 5) total 0 index 0)
(while (< index (length myList))
(setq item(nth index myList)
total (+ total item)
index (1+ index))) 是的,谢谢你,Irneb,但我试图找出“a”是否是一个全局符号而不是局部变量,因为它在defun行中既没有设置,也没有定义为局部变量。
这让我想到“a=属性”,这是一种无需首先分配(setq a属性)即可修改属性的方法。。。
希望在这方面澄清一点,在那里的例行程序中使用的“a”。
再次感谢! “a”是(foreach)循环的局部变量,在完整的循环集完成后(当处理列表中的每个元素时),它为零-这就是每个(foreach)循环的工作方式。。。 我懂了。。。。这很有帮助,但我仍然不理解它是如何知道a=属性的,即使它在foreach上方的行中提取了所有属性
(setq attlst (vlax-invoke obj 'GetAttributes))
(foreach a attlst
(setq rt (vla-get-Rotation a))
(if (and (> rt (/ pi 2.)) (< rt (* pi 1.5)));; and
......
因此,它分配“obj”的“getattributes”并分配给“attlst”,然后立即启动foreach函数,然后设置一个等于每个“a”旋转的变量。
我将研究这一行“(vlax invoke obj'GetAttributes)”,也许它会说它创建了每个属性的列表,可以在某种程度上用“a”或“at”或“att”调用。
希望我能澄清自己没有遵循这个例程的逻辑,可能与我缺乏vlisp知识有关,但我现在要做一些研究。
页:
[1]
2