乐筑天下

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

[编程交流] 增量变量序列

[复制链接]

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:33:12 | 显示全部楼层 |阅读模式
你好
 
我做了一些搜索,没有看到任何答案。
 
如果我有一个代表对象选择集的变量,我将如何为每个对象分配不同的变量,如obj1、obj2等。?这可能是某种循环,但我似乎不太明白如何将其组合在一起。
 
这将与(vla IntersectWith)函数一起使用,以查找圆和圆弧在我的图形中的相交位置,并返回诸如circleArcInt1、circleArcInt2等点。
 
如果有人能帮忙,我将不胜感激!
 
感谢您的时间和关注!
 
起草人Joe
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:38:59 | 显示全部楼层
使用列表来存储所有对象和所有点可能更有意义。使用列表当然是更典型的Lisp方法,您应该可以轻松找到示例。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:47:06 | 显示全部楼层
(ssname ss x)将使用选择集ss中的x值拉出实体,唯一需要注意的是,选择集以x=0开始
 
  1. (repeat (setq x (sslength ss))
  2. (princ (ssname ss (setq x (- x 1))))
  3. )
回复

使用道具 举报

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:50:14 | 显示全部楼层
谢谢你,Roy_043&BIGAL!
 
我将进一步查看列表,看看是否可以使用提供的代码。搜索列表信息导致我搜索“IntersectWith”,并注意到Lee_Mac有一些有用的子程序,可以帮助我做我正在寻找的事情。我不知道我以前怎么没有遇到过它。我必须对他的例程进行一些测试,看看输出是什么样子,看看如何使用它。
 
我会让你知道,如果我遇到了问题和/或张贴我的代码,一旦我得到了事情的解决。
 
非常感谢您迄今为止的帮助!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:58:08 | 显示全部楼层
不要害怕发布一个前后图像,它可能是已经做过的事情,或者有代码关闭。
回复

使用道具 举报

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:01:28 | 显示全部楼层
没错,比格尔。我将在下一次有机会的时候发布我目前拥有的信息,希望今天晚些时候。
回复

使用道具 举报

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:05:07 | 显示全部楼层
你好
 
正当我附上了“之前”和“之后”的图片,我正试图做什么。
 
我在这里找到了Lee_Mac的交集函数,它们可以很好地返回选择集的交点。(对李说!)我想我需要一种方法,将“Before”图像中的每个圆存储为单独的变量,以便我可以将它们与每个交点对应的点一起使用,以在“Scale”命令中使用。
 
我仍在寻找一种方法来编码顺序变量,如Circle1、Circle2、Circle3和Circle4。
 
如果有人对如何实现这一目标有更多的建议,和/或我在“后”图中的总体目标,我将非常感谢为他们学习。
 
非常感谢。
183316x5sjnj3bwn3bg3zk.png
183317vkt4m0itx0ljvvlv.png
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:09:26 | 显示全部楼层
使用ssget F选项,按连接顺序拖动圆圈,目前没有互联网,所以在iPad上发送。
回复

使用道具 举报

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:14:59 | 显示全部楼层
谢谢你的建议BIGAL!
 
我之前没有提到,我要尽可能少的用户输入。我当然可以把它作为另一种选择。回到Roy_43关于使用列表的建议,昨天结束时,我能够将我想要的作为变量放入列表中。我只需要将“cad”、“caddr”等转换成我之前尝试过的变量。我也没有提及这幅画代表了什么,以防有人好奇。围绕外部的4个圆是从钢板上切下的圆形零件。中心的圆代表氧焊枪切割机的穿透点,直线和圆弧是每个零件的导入/导出,短斜线用于帮助找到圆弧和圆的交点。也许其他人可以利用我最终得到的东西。稍后我会发布一些代码,我相信有更有效的方法来实现这一点。
 
起草人Joe
回复

使用道具 举报

7

主题

39

帖子

32

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:21:30 | 显示全部楼层
我已经用以下3段代码完成了我在之前和之后的图片中描述的内容。到目前为止,99.999%的代码归功于李。
 
  1. ;; Intersections in Set  -  Lee Mac
  2. ;; Returns a list of all points of intersection between all objects in a supplied selection set.
  3. ;; sel - [sel] Selection Set
  4. (defun LM:intersectionsinset2 (sel / id1 id2 ob1 ob2 rtn)
  5. (repeat (setq id1 (sslength sel))
  6.    (setq ob1 (vlax-ename->vla-object (ssname sel (setq id1 (1- id1)))))
  7.    (if        (= (setq ob1type (vla-get-ObjectName ob1)) "AcDbLine")
  8.      (princ)
  9.      (progn
  10. (setq sslist (cons (ssname sel id1) sslist))
  11. (repeat        (setq id2 id1)
  12.   (setq        ob2 (vlax-ename->vla-object
  13.               (ssname sel (setq id2 (1- id2)))
  14.             )
  15.   )
  16.   (if (= (setq ob2type (vla-get-ObjectName ob2)) "AcDbCircle")
  17.     (princ)
  18.     (LM:intersections ob1 ob2 acextendnone)
  19.   )                                ;end if
  20. )                                ;end repeat
  21.      )                                        ;progn
  22.    )                                        ;end if
  23. )                                        ;end repeat
  24.                                 ;(apply 'append (reverse rtn))  
  25. )

 
  1. ;; Intersections  -  Lee Mac
  2. ;; Returns a list of all points of intersection between two objects
  3. ;; for the given intersection mode.
  4. ;; ob1,ob2 - [vla] VLA-Objects
  5. ;;     mod - [int] acextendoption enum of intersectwith method
  6. (defun LM:intersections        (ob1 ob2 mod / lst rtn int)
  7. (setq lst (vlax-invoke ob1 'intersectwith ob2 mod))
  8. (repeat (/ (length lst) 3)
  9.    (setq rtn (cons (list (setq a (car lst))
  10.                   (setq b (cadr lst))
  11.                   (setq c (caddr lst))
  12.             )
  13.             rtn
  14.       )
  15.   int (vlax-3d-point lst)
  16.    )
  17.    (vla-ScaleEntity ob1 int newrad)
  18. )
  19. )

 
  1. ;; Test Program  -  Lee Mac
  2. ;;;(defun c:interset ( / sel )
  3. ;;;    (if (setq sel (ssget))
  4. ;;;        (foreach pnt (LM:intersectionsinset sel)
  5. ;;;            (entmake (list '(0 . "POINT") (cons 10 pnt)))
  6. ;;;        )
  7. ;;;    )
  8. ;;;    (princ)
  9. ;;
  10. ;;;(vl-load-com) (princ)
  11. (defun c:interset (/ sel)
  12. (setvar "cmdecho" 0)
  13. (setq cc1 (ssget "_X" '((0 . "CIRCLE"))))
  14. (command "-insert" "*clover chain.dwg" pause 1 "")
  15. (setq circle (ssname cc1 0))
  16. (setq rad (cdr (assoc 40 (entget circle))))
  17. (setq newrad (/ rad 0.5))
  18. (setq sel (ssget "X" '((0 . "CIRCLE,LINE") (8 . "daisy chain"))))
  19. (LM:intersectionsinset2 sel)
  20. (command "._erase" (ssget "X" '((0 . "LINE") (8 . "daisy chain"))) "")
  21. (setvar "cmdecho" 1)
  22. (princ)
  23. )
  24. (vl-load-com)
  25. (princ)

 
现在,进入下一步。我试图找到一种方法来移动所有物体,如前一幅后图所示,靠得更近,使每个圆的边缘相距1英寸,如果没有任何用户输入,则用户输入最少。我可以使用“偏移”和“拉伸”命令将所有碎片靠得更近,我想知道是否有不同的编码方式来实现这一点?下面是我在完成代码时想要的:
 
183318xgyhqzbqw5nigqqc.png
 
目前我的想法是一次在两个圆周围使用边界框,首先是底部的水平圆,然后是垂直的右圆,以此类推。使用边界框的角点作为交叉窗口的点,使用“拉伸”命令选择要移动的对象。如果有人有任何意见或想法,我很乐意看到他们。我将继续研究这个()并看看我能想出什么并发回。
 
起草人Joe
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 06:14 , Processed in 0.419946 second(s), 74 queries .

© 2020-2025 乐筑天下

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