乐筑天下

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

[编程交流] 请帮我解决这个“whil”

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:20:14 | 显示全部楼层 |阅读模式
你好
 
只是为了学习过程,我想做一个块的选择集,然后“一个一个”地镜像每个块。因此,我需要用每个循环计算并减去1。。。
 
我怎么一个接一个地到达街区?
 
下面是我的代码,红色部分是怎么回事!
谢谢你的帮助。
 
附:例行公事并不特别,只是为了学习/了解。
 
 
  1. (defun c:test (/)
  2. (setq oldfiledia (getvar "filedia"))
  3. (setvar "filedia" 0)
  4. (prompt
  5.    "\t« « You should now select one ore more blocks » »"
  6. )
  7. (if (setq ss (ssget '((0 . "INSERT"))))
  8.    (progn (setq i (sslength ss))
  9.           (while (not (minusp (setq i (1- i))))
  10.             [color=red](setq blst (entget (ssname ss i))[/color]
  11.                   mpt1 (getpoint "Mirrorline point 1")
  12.                   mpt2 (getpoint "Mirrorline point 2")
  13.             )
  14.             (command "_.mirror" [color=red]blst[/color] mpt1 mpt2)
  15.           )
  16.    )
  17.    (princ "Nothing selected!!")
  18. )
  19. (setvar "filedia" oldfiledia)
  20. (princ)
  21. )
  22. (princ)
  23. ;Code partial comes from "a lesson" LeeMac once taught me :-)
  24. ; I need to localize and make some error trap, I know...;-)
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 11:26:39 | 显示全部楼层
嘿MarcoW
 
  1. [color=red](setq blst (entget (ssname ss i))[/color]

 
重新运行elist,但mirror只接受一个ename或一个选择集
 
  1. (setq blst (ssname ss i))

 
  1. (command "_.mirror" blst "" mpt1 mpt2 ....
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 11:32:20 | 显示全部楼层
只是几个典型的新手错误,但这是一次很好的尝试(坚持下去)
有几种方法可以使用while循环,我所做的这一更正只是其中之一
 
  1. (defun c:test (/)
  2. (setq oldfiledia (getvar "filedia"))
  3. (setvar "filedia" 0)
  4. (prompt
  5.    "\t« « You should now select one ore more blocks » »"
  6. )
  7. (if (setq ss (ssget '((0 . "INSERT"))))
  8.    (progn (setq i (sslength ss))
  9.       (setq cnt 0);_counter
  10.           (while (< cnt i)     
  11.             (setq blst (ssname ss cnt);_did not need entget this gets the entname
  12.                   mpt1 (getpoint "Mirrorline point 1")
  13.                   mpt2 (getpoint "Mirrorline point 2")
  14.             )
  15.      ;_added "" after blst to tell it no more abjects will be selected
  16.      ;_added "no" to the question to delete source object
  17.             (command "_.mirror" blst "" mpt1 mpt2 "no" "")
  18.      (setq cnt (1+ cnt));_add 1 to the counter
  19.           );_while
  20.    )
  21.    (princ "Nothing selected!!")
  22. )
  23. (setvar "filedia" oldfiledia)`
  24. (princ)
  25. )
  26. (princ)
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:41:41 | 显示全部楼层
谢谢你们,我会复制并粘贴到~Vlide~。我会回来问更多关于舒尔的问题!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:46:03 | 显示全部楼层
只是一点编辑。。。
 
  1. (defun c:Test (/ i ss mp1 mp2)
  2. (if (setq i  -1
  3.            ss (ssget "_:L" '((0 . "INSERT")))
  4.      )
  5.    (while (setq e (ssname ss (setq i (1+ i))))
  6.      (and (setq mp1 (getpoint "\nSpecify first mirror point: "))
  7.           (setq mp2 (getpoint mp1 "\nSpecify next mirror point: "))
  8.           (command "_.mirror" e "" "_non" mp1 "_non" mp2)
  9.      )
  10.    )
  11. )
  12. (princ)
  13. )
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:53:58 | 显示全部楼层
谢谢大家帮助我!很棒的学习。虽然我会保留一些问题,但当然!
 
首先:我的常规仍然失败。。。“要点必须明确”
我不知道,但我觉得这和“osnap”有关。转动它不起作用。就在我发布例程之前,我注意到了这一点(下面的红色部分):
 
 
这样的事情会引起那样的麻烦
嗯,Alanjt,谢谢你。
 
我所做的是创建一个例程来镜像我的块,然后再次镜像它们。如果你仔细想想,你会发现这并不是什么都没发生!!
 
这是我的例行公事,欢迎批评!我需要一些时间来创造这一点,我知道这是混乱的,而不是它应该是这样。像variablenames,他们呢?是不是太长了?
 
我使用了很多“老式”lisp(命令“_.mirror”…)。
这是一种避免的方法吗?它慢吗。。。?
 
正如所说:我已经准备好接受一些严肃的评论。
 
提前感谢!!
 
  1. ; double mirror function
  2. ; 21-10-2010 MarcoW
  3. ; great help ~ CADTutor ~
  4. (defun c:test (/ mirrorlinepoint1 mirrorlinepoint2
  5.               selectionset numberblocks counter
  6.               blocklist ent entdata newinspt
  7.               newrot newinspt2 rotdgr)
  8. (setq mirrorlinepoint1 (getpoint "Mirrorline point 1")
  9.        mirrorlinepoint2 (getpoint mirrorlinepoint1 "Mirrorline point 2")
  10. )
  11. (prompt
  12.    "          « « You really should select one ore more blocks now...» »"
  13. )
  14. (if (setq selectionset (ssget '((0 . "INSERT"))))
  15.    (progn (setq numberblocks (sslength selectionset))
  16.           (setq counter 0)
  17.           (while (< counter numberblocks)
  18.             (setq blocklist (ssname selectionset counter))
  19.             (command
  20.               "_.mirror"
  21.               blocklist
  22.               ""
  23.               mirrorlinepoint1
  24.               mirrorlinepoint2
  25.               "no"
  26.               ""
  27.               )
  28.             (setq ent (entlast))
  29.             (setq entdata (entget ent))
  30.             (setq newinspt  (cdr (assoc 10 entdata))
  31.                   newrot    (cdr (assoc 50 entdata))
  32.                   newinspt2 (polar newinspt (+ newrot pi) 50)
  33.             )
  34.             (setq rotdgr (/ (* newrot 180) pi))
  35.             (command "_.mirror"
  36.                      (entlast)
  37.                      ""
  38.                      "_NON"
  39.                      newinspt
  40.                      "_NON"
  41.                      newinspt2
  42.                      "Yes"
  43.                      ""
  44.             )
  45.             (setq counter (1+ counter))
  46.           )
  47.    )
  48.    (princ "Nothing selected!!")
  49. )
  50. (princ)
  51. )
  52. (princ)

 
编辑:我想知道,现在我过滤“插入”。因为其他东西,比如线条等,都不起作用。我需要如何处理它,以便我的例程(测试)为所有选定的块执行它的工作,而所有未选定的块都是“正常镜像的”。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 12:02:13 | 显示全部楼层
很乐意帮忙。
我还想给大家展示一种更简单的方法来逐步通过选择集。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:02:25 | 显示全部楼层
是的,艾伦,你做到了,代码也短得多。
但我对我所取得的成就感到高兴:——)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 12:13:45 | 显示全部楼层
 
你做这件事的方式没有错。我只是告诉你另一条路线。我希望你不要认为我说你的代码相比之下是垃圾,因为这正是我要说的眨眼:
 
只是开玩笑。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:16:27 | 显示全部楼层
 
好吧,Alanjt!!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:47 , Processed in 1.045867 second(s), 72 queries .

© 2020-2025 乐筑天下

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