从(到)径向移动对象
大家好我有许多组件建模,与图纸完成。
现在,我得到了一个修改,它要求我更改管道直径,但我也必须“径向移动”加强板。
请看图片:
我必须将管尺寸从红色改为绿色,我必须“径向移动”黄色板以接触绿色管。
我认为这是一个常见问题,因此AutoCad将有一个命令。没有找到它。
好的,一定有Lisp程序的地方。也找不到。
我是否忽略了某个角落?
对一个人来说做一个不是太复杂吗?这当然是给我的。
提前感谢,
神经网络 老实说,这可能是一个“太简单了,麻烦不了”的例子
将UCS设置为其中一个支撑板,并将其移动到新位置(TBH I可能懒得去做这件事,而是使用“强制”交点捕捉点:将光标悬停在targhet半径上,当你得到一个X…osnap符号时单击,然后在沿板线重复一个点之前弹出)。如果我选择的是阻力最小的纯路径,那么我会擦除其他三个盘子,镜像剩下的一个,重新创建四个盘子。
我可以考虑一个极性阵列,它引导我去。。。
由于您使用的是ACAD 2014,因此您最好的“正确操作”方式是使用一种新的“智能”/“关联”阵列。至少,这将允许你移动其中一个盘子,并让其他三个(或更多,如果你的一些场景需要)调整自己以适应。但调查可能会显示,选择管状体作为阵列板的“路径”将允许您更改其半径,并使四个板自我更新-这很可能就是您希望的LISP!
DJE 一个动态块可以做到这一点,附加的只是一个简单的版本来说明如何。
翅片。图纸 这是一个快速拍打在一起。
(defun c:moverad ()
(setq cobj1 (vlax-ename->vla-object (car (entsel "\nSelect First Circle:"))))
(setq cobj2 (vlax-ename->vla-object (car (entsel "\nSelect Second Circle:"))))
(setq rad1 (vlax-get-property cobj1 'Radius))
(setq rad2 (vlax-get-property cobj2 'Radius))
(setq ctr1 (vlax-safearray->list (vlax-variant-value (vlax-get-property cobj1 'Center))))
(setq ctr2 (vlax-safearray->list (vlax-variant-value (vlax-get-property cobj2 'Center))))
(setq drad (- rad1 rad2))
(while (setq ss (ssget))
(setq bp (getpoint ctr1 "\nSelect Base Point:"))
(if (> drad 0)
(setq ang (angle bp ctr1))
(setq ang (angle ctr1 bp))
)
(setq np (polar bp ang (abs drad)))
(command "MOVE" ss "" bp np)
)
(princ)
) 谢谢你的回复。
这个问题有点复杂:
-我必须修改100多个程序集。
-我提前制作了钢,模型与图形表示相联系,如果我删除模型中的对象并用其他对象替换它们,图纸上的尺寸和其他一些东西将变得疯狂(我希望我得到了正确的词-疯狂),因此我必须移动现有的对象。
Associatve阵列很棒,但遗憾的是,由于基板不是正方形,sup之间的角度不是正方形,因此使用镜像选项创建对象。板不是90度。
最后但并非最不重要的一点是,物体已经制作好了。我会尽量避免删除现有的,并使一个新的。。。高级钢图纸材料。。。
无论如何,谢谢你抽出时间。
我想我必须提到我正在使用Advance Steel,我想删除已经创建的3d Advance对象。
不过,带有动态块的ida看起来很有趣,如果我能用高级对象制作它们,我会在有时间的时候进行一些实验。
非常感谢。
@Hippe013:
谢谢你的代码,我真的很感激,但在尝试使用它时出现了一些问题:
再次感谢您抽出时间,
干杯
神经网络 每个“fin”都需要单独选择。当它要求基点时,这是选择将移动到的角度。
选择外圆:
选择内圈:
选择右上角的对象:
选择基点:(沿基线移动,从基点向中心移动,距离半径差)
选择右下角的对象:
选择基点:
选择左下角的对象:
选择基点:
选择左上角的对象:
选择基点:
完成。 也许这是一个简单的代码,但要小心选择和输入参考点。。。
(defun c:radialmove ( / *error* pick k ent p entplst c orth pp d )
(defun *error* ( msg )
(if pick (setvar 'pickbox pick))
(if orth (setvar 'orthomode orth))
(if msg (prompt msg))
(princ)
)
(command "_.ucs" "_W")
(setq pick (getvar 'pickbox))
(setvar 'pickbox 5)
(setq k 0)
(while
(setq ent (car (entsel (strcat "\nPick entity (" (itoa (setq k (1+ k))) ") on which to perform radial move (ENTER OR RIGHT CLICK OR MISSED SELECTION WITH LEFT CLICK - FINISH)"))))
(setq p (getpoint (strcat "\nPick or specify reference point of entity (" (itoa k) ") from which to perform radial move : ")))
(setq entplst (cons (cons p ent) entplst))
(if ent t nil)
)
(setq c (getpoint "\nPick or specify center point for radial move : "))
(setq orth (getvar 'orthomode))
(setvar 'orthomode 1)
(command "_.ucs" "_3P" c (car (last entplst)) "")
(command "_.move" (cdr (last entplst)) "" (trans (car (last entplst)) 0 1) "\\")
(setq pp (trans (getvar 'lastpoint) 1 0))
(command "_.ucs" "_P")
(setq d (- (distance c (car (last entplst))) (distance c pp)))
(setq entplst (cdr (reverse entplst)))
(foreach entp entplst
(command "_.move" (cdr entp) "" (car entp) (polar c (angle c (car entp)) (- (distance c (car entp)) d)))
)
(command "_.ucs" "_P")
(*error* nil)
(princ)
)
另一个代码-您现在可以确保不会错过选择。。。它与sel一起工作。集合,但您可以单独选择每个实体,而不用担心会错过选择。。。
(defun c:radialmove ( / *error* k loop entss ent p i entplst c orth pp d )
(defun *error* ( msg )
(if orth (setvar 'orthomode orth))
(if msg (prompt msg))
(princ)
)
(command "_.ucs" "_W")
(setq k 0)
(setq loop t)
(while loop
(prompt (strcat "\nPick entity sel.set (" (itoa (setq k (1+ k))) ") on which to perform radial move (ENTER OR RIGHT CLICK - FINISH)"))
(setq entss (ssget "_:L"))
(if entss
(progn
(setq p (getpoint (strcat "\nPick or specify reference point of entity sel.set (" (itoa k) ") from which to perform radial move : ")))
(setq i (sslength entss))
(while (setq ent (ssname entss (setq i (1- i))))
(setq entplst (cons (cons p ent) entplst))
)
)
(setq loop nil)
)
)
(setq c (getpoint "\nPick or specify center point for radial move : "))
(setq orth (getvar 'orthomode))
(setvar 'orthomode 1)
(command "_.ucs" "_3P" c (car (last entplst)) "")
(command "_.move" (cdr (last entplst)) "" (trans (car (last entplst)) 0 1) "\\")
(setq pp (trans (getvar 'lastpoint) 1 0))
(command "_.ucs" "_P")
(setq d (- (distance c (car (last entplst))) (distance c pp)))
(setq entplst (cdr (reverse entplst)))
(foreach entp entplst
(command "_.move" (cdr entp) "" (car entp) (polar c (angle c (car entp)) (- (distance c (car entp)) d)))
)
(command "_.ucs" "_P")
(*error* nil)
(princ)
)
M、 R。 @Hippe13:
谢谢,我一下子就选择了,这就是问题所在。
谢谢Marko,它也在工作。
但对你们两个来说,有一个问题:
为什么需要为每个肋骨选择基点/参考点你们都有相同的方法,所以我想应该是这样。
所有肋骨与中心的距离相同,为什么不可能选择所有肋骨,选择中心、外圈,然后是内圈?
无论如何,谢谢你们的时间和帮助
干杯
神经网络
Hvala Marko公司 所有“肋骨”以相同的距离朝中心移动,但朝中心的角度不同。对于每个“肋骨”,您需要定义将对象向中心移动的角度。 p0peye,
你的肋骨在单个参考点/基点上碰到红色圆圈了吗?如果是这样的话,你可以用‘Intersectwith’方法得到这些点,如果你只有这种情况,不同的圆和肋骨接触,那么当然可以只选择红色的圆,然后选择绿色的圆,例程就可以完成这项工作。。。但在一般情况下,你们并没有那个些圆,肋骨/实体可能分散在中心点周围,并且与中心点的距离不同,所以一般情况下的例程必须看起来像我们发布的。。。这就是答案,是的,必须是这样。。。有关如何使用圆圈对特定情况进行编码的更多信息,请使用以下方法搜索www:interestwith-method。。。如果我有空闲时间,也许我会写它。。。目前,您必须对一般方法感到满意。。。
M、 R。
Nema na cemu,za drugi metod bitno je da rebra dodiruju krug u tacno po jednoj tacki,ako'与nadje 2 tacke po rebru相交,rezultat bi bio nejasan(CAD bi uzeo u obzir to sto mu se kaze-prva,druga,treca,…tacka kao bazna tacka)i pomeranje bi bilo neprecizno u tom slucaju。。。Ako nesto nije jasno,slobodno pitaj。。。Bas me intersuje da li ces se snaci,“strpljenje i vreme i dudov list u svilu pretvara…”
页:
[1]
2