AutoLISP编写坦克3D履带仅单个旋转问题求助
AutoLISP履带旋转问题排查与修复
问题根源
e2实体已被销毁:执行subtract命令时,AutoCAD会自动删除被减去的实体(也就是e2指向的挤出实体),此时e2变成了无效的图元ID,后续调用rotate3d自然没反应。- 镜像生成的第二条履带没存实体ID:
mirror3d确实生成了第二条履带,但代码没把这个新实体的ID存下来,导致没法对它执行旋转。
修正后的代码
(defun tracks (ip / e1 e2 e_mirror) (command "ucs" '(0 -30 2.5) "") (setq ip2 '(0 0 0) p1 (rpoint3d ip 15.166 4.5 0) p2 (rpoint3d ip 17.166 2.5 0) p3 (rpoint3d ip 17.166 -2.5 0) p4 (rpoint3d ip 15.166 -4.5 0) p5 (rpoint3d ip -15.166 -4.5 0) p6 (rpoint3d ip -17.166 -2.5 0) p7 (rpoint3d ip -17.166 2.5 0) p8 (rpoint3d ip -15.166 4.5 0) ) (command "color" 5 "" ) (command "pline" p1 p2 p3 p4 p4 p5 p6 p7 p8 p1 "" ) (setq e1 (entlast)) (command "offset" 1 e1 ip2 "") (setq e2 (entlast)) (command "extrude" e1 "" 6 "") (setq e1 (entlast)) (command "extrude" e2 "" 6 "") (setq e2 (entlast)) (command "subtract" e1 "" e2 "") (setq e1 (entlast)) ; e1现在是差集后的履带实体,e2已被删除 (command "ucs" '(0 34 -9.5) "") (command "mirror3d" e1 "" ip ipx ipy "n") (setq e_mirror (entlast)) ; 保存镜像生成的第二条履带实体 ; 旋转第一条履带 (command "rotate3d" e1 "" "Y" ip 90) ; 旋转第二条履带(镜像后的实体) (command "rotate3d" e_mirror "" "Y" ip 90) (princ) )
核心修改说明
- 新增
e_mirror变量,在mirror3d执行后用entlast获取第二条履带的实体ID,确保能对它执行旋转操作。 - 废弃已失效的
e2变量,改用保存的镜像实体变量操作第二条履带。 - 函数定义里明确声明所有局部变量,避免污染全局变量。
内容的提问来源于stack exchange,提问作者Ristori
相关产品推荐
相关产品推荐

