增量变量序列
你好我做了一些搜索,没有看到任何答案。
如果我有一个代表对象选择集的变量,我将如何为每个对象分配不同的变量,如obj1、obj2等。?这可能是某种循环,但我似乎不太明白如何将其组合在一起。
这将与(vla IntersectWith)函数一起使用,以查找圆和圆弧在我的图形中的相交位置,并返回诸如circleArcInt1、circleArcInt2等点。
如果有人能帮忙,我将不胜感激!
感谢您的时间和关注!
起草人Joe 使用列表来存储所有对象和所有点可能更有意义。使用列表当然是更典型的Lisp方法,您应该可以轻松找到示例。 (ssname ss x)将使用选择集ss中的x值拉出实体,唯一需要注意的是,选择集以x=0开始
(repeat (setq x (sslength ss))
(princ (ssname ss (setq x (- x 1))))
)
谢谢你,Roy_043&BIGAL!
我将进一步查看列表,看看是否可以使用提供的代码。搜索列表信息导致我搜索“IntersectWith”,并注意到Lee_Mac有一些有用的子程序,可以帮助我做我正在寻找的事情。我不知道我以前怎么没有遇到过它。我必须对他的例程进行一些测试,看看输出是什么样子,看看如何使用它。
我会让你知道,如果我遇到了问题和/或张贴我的代码,一旦我得到了事情的解决。
非常感谢您迄今为止的帮助! 不要害怕发布一个前后图像,它可能是已经做过的事情,或者有代码关闭。 没错,比格尔。我将在下一次有机会的时候发布我目前拥有的信息,希望今天晚些时候。 你好
正当我附上了“之前”和“之后”的图片,我正试图做什么。
我在这里找到了Lee_Mac的交集函数,它们可以很好地返回选择集的交点。(对李说!)我想我需要一种方法,将“Before”图像中的每个圆存储为单独的变量,以便我可以将它们与每个交点对应的点一起使用,以在“Scale”命令中使用。
我仍在寻找一种方法来编码顺序变量,如Circle1、Circle2、Circle3和Circle4。
如果有人对如何实现这一目标有更多的建议,和/或我在“后”图中的总体目标,我将非常感谢为他们学习。
非常感谢。
使用ssget F选项,按连接顺序拖动圆圈,目前没有互联网,所以在iPad上发送。 谢谢你的建议BIGAL!
我之前没有提到,我要尽可能少的用户输入。我当然可以把它作为另一种选择。回到Roy_43关于使用列表的建议,昨天结束时,我能够将我想要的作为变量放入列表中。我只需要将“cad”、“caddr”等转换成我之前尝试过的变量。我也没有提及这幅画代表了什么,以防有人好奇。围绕外部的4个圆是从钢板上切下的圆形零件。中心的圆代表氧焊枪切割机的穿透点,直线和圆弧是每个零件的导入/导出,短斜线用于帮助找到圆弧和圆的交点。也许其他人可以利用我最终得到的东西。稍后我会发布一些代码,我相信有更有效的方法来实现这一点。
起草人Joe 我已经用以下3段代码完成了我在之前和之后的图片中描述的内容。到目前为止,99.999%的代码归功于李。
;; Intersections in Set-Lee Mac
;; Returns a list of all points of intersection between all objects in a supplied selection set.
;; sel - Selection Set
(defun LM:intersectionsinset2 (sel / id1 id2 ob1 ob2 rtn)
(repeat (setq id1 (sslength sel))
(setq ob1 (vlax-ename->vla-object (ssname sel (setq id1 (1- id1)))))
(if (= (setq ob1type (vla-get-ObjectName ob1)) "AcDbLine")
(princ)
(progn
(setq sslist (cons (ssname sel id1) sslist))
(repeat (setq id2 id1)
(setq ob2 (vlax-ename->vla-object
(ssname sel (setq id2 (1- id2)))
)
)
(if (= (setq ob2type (vla-get-ObjectName ob2)) "AcDbCircle")
(princ)
(LM:intersections ob1 ob2 acextendnone)
) ;end if
) ;end repeat
) ;progn
) ;end if
) ;end repeat
;(apply 'append (reverse rtn))
)
;; Intersections-Lee Mac
;; Returns a list of all points of intersection between two objects
;; for the given intersection mode.
;; ob1,ob2 - VLA-Objects
;; mod - acextendoption enum of intersectwith method
(defun LM:intersections (ob1 ob2 mod / lst rtn int)
(setq lst (vlax-invoke ob1 'intersectwith ob2 mod))
(repeat (/ (length lst) 3)
(setq rtn (cons (list (setq a (car lst))
(setq b (cadr lst))
(setq c (caddr lst))
)
rtn
)
int (vlax-3d-point lst)
)
(vla-ScaleEntity ob1 int newrad)
)
)
;; Test Program-Lee Mac
;;;(defun c:interset ( / sel )
;;; (if (setq sel (ssget))
;;; (foreach pnt (LM:intersectionsinset sel)
;;; (entmake (list '(0 . "POINT") (cons 10 pnt)))
;;; )
;;; )
;;; (princ)
;;
;;;(vl-load-com) (princ)
(defun c:interset (/ sel)
(setvar "cmdecho" 0)
(setq cc1 (ssget "_X" '((0 . "CIRCLE"))))
(command "-insert" "*clover chain.dwg" pause 1 "")
(setq circle (ssname cc1 0))
(setq rad (cdr (assoc 40 (entget circle))))
(setq newrad (/ rad 0.5))
(setq sel (ssget "X" '((0 . "CIRCLE,LINE") (8 . "daisy chain"))))
(LM:intersectionsinset2 sel)
(command "._erase" (ssget "X" '((0 . "LINE") (8 . "daisy chain"))) "")
(setvar "cmdecho" 1)
(princ)
)
(vl-load-com)
(princ)
现在,进入下一步。我试图找到一种方法来移动所有物体,如前一幅后图所示,靠得更近,使每个圆的边缘相距1英寸,如果没有任何用户输入,则用户输入最少。我可以使用“偏移”和“拉伸”命令将所有碎片靠得更近,我想知道是否有不同的编码方式来实现这一点?下面是我在完成代码时想要的:
目前我的想法是一次在两个圆周围使用边界框,首先是底部的水平圆,然后是垂直的右圆,以此类推。使用边界框的角点作为交叉窗口的点,使用“拉伸”命令选择要移动的对象。如果有人有任何意见或想法,我很乐意看到他们。我将继续研究这个()并看看我能想出什么并发回。
起草人Joe
页:
[1]
2