乐筑天下

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

[编程交流] 在插入器上旋转动态块

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:05:38 | 显示全部楼层
你的视频是私人的,不能公开观看悬念
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:09:06 | 显示全部楼层
 
Tharwat,哈哈哈,我想这会限制观众数量。。。现在已设置为公开。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:14:38 | 显示全部楼层
虽然我不是3D用户,但我想这段代码应该可以用,试试吧,让我知道。
 
注意:我无法用那个动态块打开您的图形,它是在多面网格中打开的。
 
  1. (vl-load-com)
  2. (defun c:test (/ ss ang i e sn pt)
  3. (if (and (setq ss (ssget "_:L" '((0 . "INSERT"))))
  4.           (setq ang (getangle "\n Specify Angle: "))
  5.      )
  6.    (repeat (setq i (sslength ss))
  7.      (setq e (entget (setq sn (ssname ss (setq i (1- i))))))
  8.      (setq pt (cdr (assoc 10 e)))
  9.      (vla-Rotate3D
  10.        (vlax-ename->vla-object sn)
  11.        (vlax-3D-point (trans pt 1 0))
  12.        (vlax-3D-point (mapcar '+ (trans pt 1 0) '(1. 0. 0.)))
  13.        ang
  14.      )
  15.    )
  16. )
  17. (princ)
  18. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:17:11 | 显示全部楼层
我建议:
  1. ([color=BLUE]defun[/color] c:bx90r ( [color=BLUE]/[/color] a e i p q r s x )
  2.    ([color=BLUE]setq[/color] a ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0))
  3.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] s ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color] '((0 . [color=MAROON]"INSERT"[/color]))))
  4.        ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s))
  5.            ([color=BLUE]setq[/color] e ([color=BLUE]ssname[/color] s ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i)))
  6.                  x ([color=BLUE]entget[/color] e)
  7.                  p ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 x)) e 0)
  8.                  r ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 50 x))
  9.                  q ([color=BLUE]trans[/color] ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 x)) ([color=BLUE]list[/color] ([color=BLUE]cos[/color] r) ([color=BLUE]sin[/color] r) 0.0)) e 0)
  10.            )
  11.            ([color=BLUE]vlax-invoke[/color] ([color=BLUE]vlax-ename->vla-object[/color] e) 'rotate3d p q a)
  12.        )
  13.    )
  14.    ([color=BLUE]princ[/color])
  15. )
  16. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:19:26 | 显示全部楼层
 
基于图形轴旋转块效果很好,这对于我的问题的第一部分来说是完美的。使用相同的代码位,我编辑了您的代码以在图形Z轴上旋转,但是,当我复制最初插入的块时,它不是使用复制的块插入点,而是使用插入原始块的插入点。
 
说明:
如果我在0,0,0处插入块
基于插入点复制该块
将其放置在坐标为1,0,0的位置
使用lisp将块旋转90度(测试)
块现在将旋转90度,但坐标为0,1,0
 
我需要它在旋转90度时保持在0,0,0,这可以实现吗?
 
  1. (vl-load-com)
  2. (defun c:test (/ ss ang i e sn pt)
  3. (if (and (setq ss (ssget "_:L" '((0 . "INSERT"))))
  4.           (setq ang (getangle "\n Specify Angle: "))
  5.      )
  6.    (repeat (setq i (sslength ss))
  7.      (setq e (entget (setq sn (ssname ss (setq i (1- i))))))
  8.      (setq pt (cdr (assoc 10 e)))
  9.      (vla-Rotate3D
  10.        (vlax-ename->vla-object sn)
  11.        (vlax-3D-point (trans pt 1 0))
  12. [color="red"]        (vlax-3D-point (mapcar '+ (trans pt 1 0) '(0. 0. 1.)))[/color]
  13.        ang
  14.      )
  15.    )
  16. )
  17. (princ)
  18. )

 
 
我使用多面网格来允许拉伸并最小化文件大小。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 07:22:48 | 显示全部楼层
我去吃午饭,一切都安排好了。干得好,李。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:26:56 | 显示全部楼层
 
干杯伙计
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:27:44 | 显示全部楼层
 
谢谢李!该代码适用于基于块x轴围绕其插入点旋转块。你能让它基于块z轴旋转吗?如何提示输入轴“\n指定轴:”?
Tharwat在基于图形UCS旋转块的代码中找到了一些东西——可能是两者的混合。
  1. (vl-load-com)
  2. (defun c:test (/ ss ang i e sn pt)
  3. (if (and (setq ss (ssget "_:L" '((0 . "INSERT"))))
  4.           (setq ang (getangle "\n Specify Angle: "))
  5.      )
  6.    (repeat (setq i (sslength ss))
  7.      (setq e (entget (setq sn (ssname ss (setq i (1- i))))))
  8.      (setq pt (cdr (assoc 10 e)))
  9.      (vla-Rotate3D
  10.        (vlax-ename->vla-object sn)
  11.        (vlax-3D-point (trans pt 1 0))
  12.        (vlax-3D-point (mapcar '+ (trans pt 1 0) '(1. 0. 0.)))
  13.        ang
  14.      )
  15.    )
  16. )
  17. (princ)
  18. )

 
我不知道这段代码,否则我会尝试编辑它并使其工作。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:31:06 | 显示全部楼层
 
尝试以下程序:
  1. ([color=BLUE]defun[/color] c:b90r ( [color=BLUE]/[/color] a f i k s )
  2.    ([color=BLUE]setq[/color] a ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0))
  3.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] s ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color] '((0 . [color=MAROON]"INSERT"[/color]))))
  4.        ([color=BLUE]progn[/color]
  5.            ([color=BLUE]initget[/color] [color=MAROON]"X Y Z"[/color])
  6.            ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"Z"[/color] ([color=BLUE]setq[/color] k ([color=BLUE]getkword[/color] [color=MAROON]"\nChoose Block Rotation Axis [X/Y/Z] <X>: "[/color])))
  7.                ([color=BLUE]setq[/color] f
  8.                    ([color=BLUE]lambda[/color] ( l [color=BLUE]/[/color] r )
  9.                        ([color=BLUE]setq[/color] r ([color=BLUE]assoc[/color] 50 l))
  10.                        ([color=BLUE]entmod[/color] ([color=BLUE]subst[/color] ([color=BLUE]cons[/color] 50 ([color=BLUE]+[/color] a ([color=BLUE]cdr[/color] r))) r l))
  11.                    )
  12.                )
  13.                ([color=BLUE]setq[/color] f
  14.                    ([color=BLUE]lambda[/color] ( l [color=BLUE]/[/color] e r )
  15.                        ([color=BLUE]setq[/color] e ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] -1 l))
  16.                              r ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 50 l))
  17.                        )
  18.                        ([color=BLUE]vlax-invoke[/color] ([color=BLUE]vlax-ename->vla-object[/color] e) 'rotate3d
  19.                            ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 l)) e 0)
  20.                            ([color=BLUE]trans[/color]
  21.                                ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 l))
  22.                                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"Y"[/color] k)
  23.                                        ([color=BLUE]list[/color] ([color=BLUE]-[/color] ([color=BLUE]sin[/color] r)) ([color=BLUE]cos[/color] r) 0.0)
  24.                                        ([color=BLUE]list[/color] ([color=BLUE]cos[/color] r) ([color=BLUE]sin[/color] r) 0.0)
  25.                                    )
  26.                                )
  27.                                e 0
  28.                            )
  29.                            a
  30.                        )
  31.                    )
  32.                )
  33.            )
  34.            ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s))
  35.                (f ([color=BLUE]entget[/color] ([color=BLUE]ssname[/color] s ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i)))))
  36.            )
  37.        )
  38.    )
  39.    ([color=BLUE]princ[/color])
  40. )
  41. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])

 
 
顺便说一句,Tharwat的代码没有基于活动UCS执行旋转;我可以想象,他的代码将产生一些模糊的结果,因为块插入点是相对于块OCS表示的,然而,在代码中,相对于活动UCS转换为WCS。这将导致仅当活动UCS与OCS平面平行时,程序才会执行相对于WCS X轴的旋转。
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:35:53 | 显示全部楼层
谢谢李,你真的很有天赋,我很感激你所做的一切。我的下一个任务是这个周末坐下来,试着破译这个代码并理解它是如何工作的——这可能需要一点时间,但我想理解“如何以及为什么”,并尝试自己编写代码,而不是要求别人为我写些东西。我已经使用AutoCAD 15年了,在编写代码方面涉猎很少;宏、简单的LiSP例程和较小的自定义,但看到这些让我兴奋不已,想了解更多。它开始于我有了一个想法,我写了一些简单的东西,你我的朋友把它带到了一个全新的水平。非常感谢您抽出时间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:51 , Processed in 0.574414 second(s), 70 queries .

© 2020-2025 乐筑天下

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