乐筑天下

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

[编程交流] 旋转属性问题

[复制链接]

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:11:44 | 显示全部楼层 |阅读模式
  1. (defun hms:attrt (/ ATTLST OBJ RT S1)
  2. (if (setq s1 (ssget "_L" '((0 . "INSERT") (66 . 1))))
  3.    (progn
  4.      (setq obj (vlax-ename->vla-object (ssname s1 0)))
  5.      (setq attlst (vlax-invoke obj 'GetAttributes))
  6.      (foreach a attlst
  7. (setq rt (vla-get-Rotation a))
  8. (if (and (> rt (/ pi 2.)) (< rt (* pi 1.5)));; and
  9.   (progn
  10.     (setq rt (+ pi rt))
  11.     (vlax-put-property a 'Rotation rt)
  12.   );; progn
  13. );; if
  14.      );; foreach
  15.    );; progn
  16. );; if
  17. (princ)
  18. );; hms:attrt

 
hmsilva工具箱中的一个,这对我需要它做的大部分事情都很有用,除了一个问题。。。。如果配件旋转90度,我需要将属性旋转到270度,以使所有文本保持从左到右从上到下的读取方式,并且可以修改此例程,但这高于我目前的技能水平。如果有人愿意帮忙修改上述内容,我将不胜感激
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 06:17:23 | 显示全部楼层
一个简单的问题:如果你的配件有多个标签,你仍然希望它们彼此对齐吗?一、 e.你不想这样:
071149n5peh2nedaaammh2.png
您更希望这样:
071150cumqryrmqzrwzzyt.png
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:18:43 | 显示全部楼层
是的,确切地说,你是如何在第二个图像中得到它的,除了文本需要与属性水平旋转的文本相距180,以便从左到右从上到下读取。
这可能违反直觉,但这是我们的领导希望文本对齐的方式。
我能够理解Henrique工具箱attrt中的许多代码行,但实际上并没有遵循(foreach)语句,如果您能够解释它们,我可能能够正确地修改它。
关于这一点和VLISP的属性处理,一个简单的问题是,“a”变量是否等同于我在“(vlax invoke obj’GetAttributes))之后经常看到的“attributes”,但我从来没有看到它(setq)’d,这使我认为VLISP将“a”理解为“属性”,好像它是一个定义的符号而不是一个变量。。。希望这是有道理的。
谢谢你的回复,我知道随着你的关注,这将很快得到解决!为此,干杯!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 06:24:34 | 显示全部楼层
您可以尝试更改:
 
>和
 
收件人:
 
>=和
 
M、 R。
 
对于align,我不知道Irneb在想什么。。。你必须等待他的回应。。。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:25:46 | 显示全部楼层
也作为快速注释;
我并没有要求Henrique解释他自己的程序,因为那个人已经帮了我很多,基本上在我们创建一个程序的时候一直握着我的手。
如果可能的话,我尽量让他放松
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:28:08 | 显示全部楼层
那会怎么样?
要知道,通过修改,它将使小于或大于,小于或等于,大于或等于,但如果将属性旋转90度更改为270度,那么这会做什么,从而对块旋转90度的属性进行180度交换。
我们在绘图中使用正交,并且我们不会手动创建或修改(很多)等轴测图,因此我们实际上几乎只处理90/180/270/0,尽管与奇数旋转的兼容性并不差。
只是试着理解,而不是试图给一个困难的时间
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 06:31:43 | 显示全部楼层
我必须花更多的时间来解释。这不是对Henrique代码的简单更改-您基本上需要计算出每个属性的插入点和框大小,因此在旋转它们之后,您也需要将它们彼此移开。今晚晚些时候再联系他们。现在有点忙。
变量是由foreach更改的变量。foreach是一个循环,它获取一个列表,并将该列表中的每个项目放入您命名的变量中,然后使用该变量运行其余的行。类似这样的情况:
  1. (setq myList '(1 2 3 4 5) total 0)
  2. (foreach item myList
  3. (setq total (+ total item)))
这将与您所做的相同(尽管foreach在这里更为优化,因为它不会花费为每个项目进行第n次所需的时间):
  1. (setq myList '(1 2 3 4 5) total 0 index 0)
  2. (while (< index (length myList))
  3. (setq item  (nth index myList)
  4.        total (+ total item)
  5.        index (1+ index)))
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:35:24 | 显示全部楼层
是的,谢谢你,Irneb,但我试图找出“a”是否是一个全局符号而不是局部变量,因为它在defun行中既没有设置,也没有定义为局部变量。
这让我想到“a=属性”,这是一种无需首先分配(setq a属性)即可修改属性的方法。。。
希望在这方面澄清一点,在那里的例行程序中使用的“a”。
再次感谢!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 06:39:02 | 显示全部楼层
“a”是(foreach)循环的局部变量,在完整的循环集完成后(当处理列表中的每个元素时),它为零-这就是每个(foreach)循环的工作方式。。。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:40:56 | 显示全部楼层
我懂了。。。。这很有帮助,但我仍然不理解它是如何知道a=属性的,即使它在foreach上方的行中提取了所有属性
  1.   (setq attlst (vlax-invoke obj 'GetAttributes))
  2.      (foreach a attlst
  3. (setq rt (vla-get-Rotation a))
  4. (if (and (> rt (/ pi 2.)) (< rt (* pi 1.5)));; and
  5. ......

 
因此,它分配“obj”的“getattributes”并分配给“attlst”,然后立即启动foreach函数,然后设置一个等于每个“a”旋转的变量。
我将研究这一行“(vlax invoke obj'GetAttributes)”,也许它会说它创建了每个属性的列表,可以在某种程度上用“a”或“at”或“att”调用。
希望我能澄清自己没有遵循这个例程的逻辑,可能与我缺乏vlisp知识有关,但我现在要做一些研究。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:36 , Processed in 0.425034 second(s), 74 queries .

© 2020-2025 乐筑天下

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