乐筑天下

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

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

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 06:45:23 | 显示全部楼层
注意,传递给foreach函数的符号是任意的(当然前提是它不是受保护的符号)。
考虑以下示例:
我会让你找出为什么会有额外的“5”
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:47:32 | 显示全部楼层
啊哈!
丁丁,
所以foreach语句使用一个任意赋值,Henrique称之为“a”,因为实际上它是属性,但foreach语句的工作方式是
对于attlist(属性列表)中的每个项目,执行以下功能;
 
  1. (setq rt (vla-get-Rotation a))
  2. (if (and (> rt (/ pi 2.)) (< rt (* pi 1.5)));; and
  3.   (progn
  4.     (setq rt (+ pi rt))
  5.     (vlax-put-property a 'Rotation rt)

 
简单地说,a=foreach中给出的列表中的每个项目,而不是指定的变量或受保护的符号,
但是,为了得到每个属性的旋转,并将其设置为变量“rt”,然后例程将其转换为弧度或其他值,仍然可以理解最后几行。例程如何知道如何将它们与被修改的块的属性相关联,我不确定,但这似乎就是它的行为方式,并且理解foreach是第1步、第2步或其他什么。还有一些,但进展很好。
 
谢谢李,
对于列表(1、2、3、4、5)中的每个项目(x/y/z),创建该项目。因此,在所有foreach语句上都是12345,返回最后一个值,即5,这就是为什么它被追加到末尾。
...至少我相信
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:49:56 | 显示全部楼层
为了证实和加深我的理解,
  1. (foreach z '(1 2 3 4 5) (princ (+ z 1)))

按预期返回234566。
很好,这很有帮助,我知道有一个断开,但一旦理解了最初lsp中的“a”是如何得出的,我就很接近了。谢谢你告诉我这是一个任意值,如果我的理解正确的话,它的意思是“给定列表中的项目”
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:54:02 | 显示全部楼层
听起来你已经知道了。TWISI,该名称与您可能选择在函数中其他位置创建的任何变量名称一样任意,但它专门用于该子例程,即foreach,因此不需要作为局部变量列出。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 06:59:03 | 显示全部楼层
事实上,“a”不是(foreach)循环的局部变量,而是它的参数。。。
例如,您可以使用此代码模拟(foreach)函数:
 
  1. (defun _foreach ( el lst expr / n r )
  2. (setq n -1)
  3. (while (set el (nth (setq n (1+ n)) lst))
  4.    (setq r (eval expr))
  5. )
  6. r
  7. )
  8. (_foreach 'a (list 1 2 3 4)
  9. (quote
  10.    (progn
  11.      (if (null x) (setq x 0))
  12.      (setq x (+ x a))
  13.    )
  14. )
  15. )

 
但使用实(foreach)函数执行相同的操作更简单:
 
  1. (foreach a (list 1 2 3 4)
  2. (if (null x) (setq x 0))
  3. (setq x (+ x a))
  4. )

 
正如你所见,它只有4行。。。
 
M、 R。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:00:06 | 显示全部楼层
是的,neophoible的反应很有趣。
让我考虑下一步使用lambdas,因为我注意到只有在lambdas中,现在foreach中才有只需要vars作为参数的子函数,
而不是使用while和repeat,这是其他循环函数。重复似乎很简单,但我需要做一些研究的时候。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:04:59 | 显示全部楼层
 
对的
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:05:52 | 显示全部楼层
 
嘿,irneb,我意识到你用最后一句话很好地回答了我的问题,特别是“它取一个列表,并将该列表中的每一项放入变量you name”,如果我能够在此之前建立连接,那当然就足够了,但我认为正是李的示例帮助我准确理解了var的使用方式。感谢你们和今天早上我对你们关于属性旋转的第一句话很感兴趣。。。“基本上,您需要计算每个属性的插入点和框大小,因此在旋转它们之后,您也需要将它们彼此移开。”
那么,让我抓拍一些图片来展示它现在的表现:
071151lhpac6zc53y533y3.jpg
有一个相同阀门的两个相互旋转180度的快速快照。你可以看到这对文本是如何成立的,但我们试图让它看起来是这样的:
071152faunyiaycpihjcjp.jpg
如果90度旋转的每个配件都将其文本设置为270度旋转,但设置为270度旋转的阀门附带的文本将很好,如上图所示,不需要任何旋转。
 
我确实知道这些块上的插入点设置在拟合的中间,所以希望这对任何需要插入点的编码都有帮助。
早上好,干杯!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:09:43 | 显示全部楼层
试试这个修改Brandon,
检查属性的旋转是否在90度和270度之间。在弧度中,pi=180度,因此pi/2=90度,1.5*pi=270。我来给你分一下
请注意,这些函数一次可以比较多个项目。这可用于使其更容易:
现在,在您的情况下,您希望文本始终介于180度(倒置)、270度(作为附件)和360度以下(即0-刚好在右侧向上之前)。因此,您可以使用以下测试来查看它们是否在180之前:
  1. 12
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:12:00 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:57 , Processed in 1.366650 second(s), 72 queries .

© 2020-2025 乐筑天下

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