乐筑天下

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

[编程交流] 从(到)径向移动对象

[复制链接]

8

主题

28

帖子

20

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 23:14:40 | 显示全部楼层 |阅读模式
大家好
我有许多组件建模,与图纸完成。
现在,我得到了一个修改,它要求我更改管道直径,但我也必须“径向移动”加强板。
请看图片:
001441cyq0zwm4fyy4zqgg.png
我必须将管尺寸从红色改为绿色,我必须“径向移动”黄色板以接触绿色管。
我认为这是一个常见问题,因此AutoCad将有一个命令。没有找到它。
好的,一定有Lisp程序的地方。也找不到。
我是否忽略了某个角落?
对一个人来说做一个不是太复杂吗?这当然是给我的。
 
提前感谢,
神经网络
回复

使用道具 举报

0

主题

61

帖子

62

银币

限制会员

铜币
-1
发表于 2022-7-5 23:20:10 | 显示全部楼层
老实说,这可能是一个“太简单了,麻烦不了”的例子
 
将UCS设置为其中一个支撑板,并将其移动到新位置(TBH I可能懒得去做这件事,而是使用“强制”交点捕捉点:将光标悬停在targhet半径上,当你得到一个X…osnap符号时单击,然后在沿板线重复一个点之前弹出)。如果我选择的是阻力最小的纯路径,那么我会擦除其他三个盘子,镜像剩下的一个,重新创建四个盘子。
 
我可以考虑一个极性阵列,它引导我去。。。
 
由于您使用的是ACAD 2014,因此您最好的“正确操作”方式是使用一种新的“智能”/“关联”阵列。至少,这将允许你移动其中一个盘子,并让其他三个(或更多,如果你的一些场景需要)调整自己以适应。但调查可能会显示,选择管状体作为阵列板的“路径”将允许您更改其半径,并使四个板自我更新-这很可能就是您希望的LISP!
 
DJE
回复

使用道具 举报

10

主题

598

帖子

594

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 23:27:37 | 显示全部楼层
一个动态块可以做到这一点,附加的只是一个简单的版本来说明如何。
翅片。图纸
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 23:30:00 | 显示全部楼层
这是一个快速拍打在一起。
 
  1. (defun c:moverad ()
  2. (setq cobj1 (vlax-ename->vla-object (car (entsel "\nSelect First Circle:"))))
  3. (setq cobj2 (vlax-ename->vla-object (car (entsel "\nSelect Second Circle:"))))
  4. (setq rad1 (vlax-get-property cobj1 'Radius))
  5. (setq rad2 (vlax-get-property cobj2 'Radius))
  6. (setq ctr1 (vlax-safearray->list (vlax-variant-value (vlax-get-property cobj1 'Center))))
  7. (setq ctr2 (vlax-safearray->list (vlax-variant-value (vlax-get-property cobj2 'Center))))
  8. (setq drad (- rad1 rad2))
  9. (while (setq ss (ssget))
  10.    (setq bp (getpoint ctr1 "\nSelect Base Point:"))
  11.    (if (> drad 0)
  12.      (setq ang (angle bp ctr1))
  13.      (setq ang (angle ctr1 bp))
  14.      )
  15.    (setq np (polar bp ang [color="red"](abs[/color] drad[color="red"])[/color]))
  16.    (command "MOVE" ss "" bp np)
  17.    )
  18. (princ)
  19. )
回复

使用道具 举报

8

主题

28

帖子

20

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 23:37:27 | 显示全部楼层
谢谢你的回复。
这个问题有点复杂:
-我必须修改100多个程序集。
-我提前制作了钢,模型与图形表示相联系,如果我删除模型中的对象并用其他对象替换它们,图纸上的尺寸和其他一些东西将变得疯狂(我希望我得到了正确的词-疯狂),因此我必须移动现有的对象。
 
Associatve阵列很棒,但遗憾的是,由于基板不是正方形,sup之间的角度不是正方形,因此使用镜像选项创建对象。板不是90度。
最后但并非最不重要的一点是,物体已经制作好了。我会尽量避免删除现有的,并使一个新的。。。高级钢图纸材料。。。
无论如何,谢谢你抽出时间。
 
我想我必须提到我正在使用Advance Steel,我想删除已经创建的3d Advance对象。
不过,带有动态块的ida看起来很有趣,如果我能用高级对象制作它们,我会在有时间的时候进行一些实验。
非常感谢。
 
 
@Hippe013:
 
谢谢你的代码,我真的很感激,但在尝试使用它时出现了一些问题:
001447edoon4hdge4ny7oe.jpg
再次感谢您抽出时间,
干杯
神经网络
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 23:44:06 | 显示全部楼层
每个“fin”都需要单独选择。当它要求基点时,这是选择将移动到的角度。
选择外圆:
选择内圈:
选择右上角的对象:
选择基点:(沿基线移动,从基点向中心移动,距离半径差)
选择右下角的对象:
选择基点:
选择左下角的对象:
选择基点:
选择左上角的对象:
选择基点:
完成。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:45:16 | 显示全部楼层
也许这是一个简单的代码,但要小心选择和输入参考点。。。
 
  1. (defun c:radialmove ( / *error* pick k ent p entplst c orth pp d )
  2. (defun *error* ( msg )
  3.    (if pick (setvar 'pickbox pick))
  4.    (if orth (setvar 'orthomode orth))
  5.    (if msg (prompt msg))
  6.    (princ)
  7. )
  8. (command "_.ucs" "_W")
  9. (setq pick (getvar 'pickbox))
  10. (setvar 'pickbox 5)
  11. (setq k 0)
  12. (while
  13.    (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)"))))
  14.    (setq p (getpoint (strcat "\nPick or specify reference point of entity (" (itoa k) ") from which to perform radial move : ")))
  15.    (setq entplst (cons (cons p ent) entplst))
  16.    (if ent t nil)
  17. )
  18. (setq c (getpoint "\nPick or specify center point for radial move : "))
  19. (setq orth (getvar 'orthomode))
  20. (setvar 'orthomode 1)
  21. (command "_.ucs" "_3P" c (car (last entplst)) "")
  22. (command "_.move" (cdr (last entplst)) "" (trans (car (last entplst)) 0 1) "\")
  23. (setq pp (trans (getvar 'lastpoint) 1 0))
  24. (command "_.ucs" "_P")
  25. (setq d (- (distance c (car (last entplst))) (distance c pp)))
  26. (setq entplst (cdr (reverse entplst)))
  27. (foreach entp entplst
  28.    (command "_.move" (cdr entp) "" (car entp) (polar c (angle c (car entp)) (- (distance c (car entp)) d)))
  29. )
  30. (command "_.ucs" "_P")
  31. (*error* nil)
  32. (princ)
  33. )

 
另一个代码-您现在可以确保不会错过选择。。。它与sel一起工作。集合,但您可以单独选择每个实体,而不用担心会错过选择。。。
 
  1. (defun c:radialmove ( / *error* k loop entss ent p i entplst c orth pp d )
  2. (defun *error* ( msg )
  3.    (if orth (setvar 'orthomode orth))
  4.    (if msg (prompt msg))
  5.    (princ)
  6. )
  7. (command "_.ucs" "_W")
  8. (setq k 0)
  9. (setq loop t)
  10. (while loop
  11.    (prompt (strcat "\nPick entity sel.set (" (itoa (setq k (1+ k))) ") on which to perform radial move (ENTER OR RIGHT CLICK - FINISH)"))
  12.    (setq entss (ssget "_:L"))
  13.    (if entss
  14.      (progn
  15.        (setq p (getpoint (strcat "\nPick or specify reference point of entity sel.set (" (itoa k) ") from which to perform radial move : ")))
  16.        (setq i (sslength entss))
  17.        (while (setq ent (ssname entss (setq i (1- i))))
  18.          (setq entplst (cons (cons p ent) entplst))
  19.        )
  20.      )
  21.      (setq loop nil)
  22.    )
  23. )
  24. (setq c (getpoint "\nPick or specify center point for radial move : "))
  25. (setq orth (getvar 'orthomode))
  26. (setvar 'orthomode 1)
  27. (command "_.ucs" "_3P" c (car (last entplst)) "")
  28. (command "_.move" (cdr (last entplst)) "" (trans (car (last entplst)) 0 1) "\")
  29. (setq pp (trans (getvar 'lastpoint) 1 0))
  30. (command "_.ucs" "_P")
  31. (setq d (- (distance c (car (last entplst))) (distance c pp)))
  32. (setq entplst (cdr (reverse entplst)))
  33. (foreach entp entplst
  34.    (command "_.move" (cdr entp) "" (car entp) (polar c (angle c (car entp)) (- (distance c (car entp)) d)))
  35. )
  36. (command "_.ucs" "_P")
  37. (*error* nil)
  38. (princ)
  39. )

M、 R。
回复

使用道具 举报

8

主题

28

帖子

20

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 23:54:19 | 显示全部楼层
@Hippe13:
谢谢,我一下子就选择了,这就是问题所在。
谢谢Marko,它也在工作。
 
但对你们两个来说,有一个问题:
 
为什么需要为每个肋骨选择基点/参考点你们都有相同的方法,所以我想应该是这样。
所有肋骨与中心的距离相同,为什么不可能选择所有肋骨,选择中心、外圈,然后是内圈?
 
无论如何,谢谢你们的时间和帮助
 
干杯
神经网络
 
Hvala Marko公司
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 23:59:04 | 显示全部楼层
所有“肋骨”以相同的距离朝中心移动,但朝中心的角度不同。对于每个“肋骨”,您需要定义将对象向中心移动的角度。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:03:31 | 显示全部楼层
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…”
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:16 , Processed in 0.363188 second(s), 75 queries .

© 2020-2025 乐筑天下

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