乐筑天下

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

[编程交流] 数组实体集合

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:42:38 | 显示全部楼层
好吧,我要用这个把自己逼疯了。。。
 
为什么此实体集合中缺少一个圆?
 
  1. (defun c:test  (/ l1 c1 eLst ss)
  2. (setq ss (ssadd))
  3. (command "_line" "0,5" "0,11" "")
  4. (setq l1 (entlast))
  5. (command "_circle" "0,5" "5")
  6. (setq c1 (entlast))
  7. (command "-array" l1 c1 "" "P" "0,0" "3" "" "Y")
  8. (setq eLst (Ent_List_to_End c1))
  9. (foreach n eLst (ssadd n ss))
  10. (command "_move" ss l1 "" pause pause)
  11. )
  12. (defun Ent_List_to_End(ent / a)
  13. (reverse
  14.    (if(setq a(entnext ent))
  15.       (cons ent(Ent_List_to_End a)))))

 
似乎太简单了,不会出错
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:47:23 | 显示全部楼层
因为您添加到列表中的第一项是c1的“entnext”;您需要首先将c1添加到列表中。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:48:44 | 显示全部楼层
好的,我接受你的观点,卡尔,但是为什么这不移动c1?
 
  1. (defun c:test  (/ l1 c1 eLst ss)
  2. (setq ss (ssadd))
  3. (command "_line" "0,5" "0,11" "")
  4. (setq l1 (entlast))
  5. (command "_circle" "0,5" "5")
  6. (setq c1 (entlast))
  7. (command "-array" l1 c1 "" "P" "0,0" "3" "" "Y")
  8. (setq eLst (Ent_List_to_End c1))
  9. (foreach n eLst (ssadd n ss))
  10. (command "_move" [b][color=Red]ss l1 c1[/color][/b] "" pause pause)
  11. )
  12. (defun Ent_List_to_End(ent / a)
  13. (reverse
  14.    (if(setq a(entnext ent))
  15.       (cons ent(Ent_List_to_End a)))))
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:52:20 | 显示全部楼层
我得到它确实移动c1,它不移动右下角的圆,这是(entlast)。
 
我误解了你在列表中添加项目的惯例,它最初确实添加了c1,因为它是第一个循环的“a”。但是当“entnext a”为nil时,循环停止,因此实际上无法将最后一项添加到列表中。我想
 
 
**编辑**
这个实体集合例程没有递归版本那么优雅,但似乎可以工作。此外,还修改了移动命令:
 
  1. (defun c:test  ()
  2. (setq ss (ssadd))
  3. (command "_line" "0,5" "0,11" "")
  4. (setq l1 (entlast))
  5. (command "_circle" "0,5" "5")
  6. (setq c1 (entlast))
  7. (command "-array" l1 c1 "" "P" "0,0" "3" "" "Y")
  8. (setq eLst (Ent_List_to_End c1))
  9. (foreach n eLst (ssadd n ss))
  10. (command "_move" ss l1 "" pause pause)
  11. )
  12. (defun Ent_List_to_End(ent / a entlist)
  13.   
  14. (while ent
  15.     (setq entlist (cons ent entlist))
  16.     (setq ent (entnext ent))
  17.   )
  18.   entlist
  19. )
回复

使用道具 举报

1

主题

19

帖子

18

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:57:51 | 显示全部楼层
CarlB的功能很棒!!
如果你仍然想使用你的函数,你可以参考下面的文件,我只添加了另一个函数来选择你的函数错过的对象。
希望这有帮助!!
干杯
选择“上一个”。LSP
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:00:42 | 显示全部楼层
啊,我现在明白了。。。因为它测试实体的entnext,所以它将错过其中一个实体。。。即“entlast”
 
非常感谢卡尔为解决这个问题贡献的时间,我非常感谢。
 
我已经测试了你的代码,正如预期的那样,它工作得很好。
 
在您建议原始代码不包含“entlast”之后,我稍微更改了代码,发现这也有效:
 
同样感谢Badien的代码,非常感谢您的时间。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 16:02:48 | 显示全部楼层
李,
 
使用(ssadd)怎么样-大卫
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:05:59 | 显示全部楼层
谢谢David的建议,这肯定会让事情更加简洁。
 
干杯
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 20:56 , Processed in 0.329418 second(s), 66 queries .

© 2020-2025 乐筑天下

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