rookie37 发表于 2022-7-6 10:24:21

移动宏

我有数百件物品要搬。它们都将处于不同的角度和距离。如果没有宏,我会迷路,因为所有这些项目看起来都一样,可能会移动正确的距离,但移动错误的对象。我也会移动正确的物体,但移动的距离不对:(
 
我启动了一个宏。这更好地解释了我在追求什么
 
请帮忙
 
;
;   prompt for input
;
(setq dist(getdist"\nEnter the distance to move: "))
(setq angl(getreal"\nEnter the angle: "))
(setq obj(getreal"\npick the object you want moved: "))
;
;
;



(setq xvalue(   (cos angl)*dist    )
(setq yvalue(   (sin angl)*dist    )

;


(COMMAND "move"obj 0,0 @xvalue,yvalue "")

移动宏。图纸

CALCAD 发表于 2022-7-6 10:41:36

新手37,
根据你的想法,这是一个有点“颜色”的
 
; mvm.lsp - move selected objects to a specified distance at an angle
;         and color them green

(defun dtr (a) ;Degrees to radians conversion
(* pi (/ a 180.0))
)

(defun c:mvm (/ dis angl objset n en el bse vec)
(setq dis (getdist"\n Enter the distance to move: "))
(setq angl (getreal"\n Enter the angle: "))
(princ "\n Pick the object(s) you want moved: ")
(setq objset (ssget))
(setq n (- (sslength objset) 1))
(while (> n -1) ; make the moved objects green
(setq en (ssname objset n))
(setq el (entget en))
(setq el (subst (cons 62 3) (assoc 62 el) el))
(entmod el)
(setq n (- n 1))
)
(setq angl (dtr angl))
(setq bse (list 0 0 0)) ; set the base 0,0,0
(setq vec (polar bse angl dis)) ; obtain vector
(command "_.move" objset "" bse vec)
(princ)
)

Lee Mac 发表于 2022-7-6 10:56:51

另一种方法
 

(defun c:mvm ( / _toColour ) (vl-load-com)

(defun _toColour ( entity colour )
   (entmod
   (if (assoc 62 (entget entity))
       (subst (cons 62 colour) (assoc 62 (entget entity)))
       (append (entget entity) (list (cons 62 colour)))
   )
   )
)

(mapcar
   (function
   (lambda ( fun string symbol default )
       (set symbol
         (cond
         (
             (
               (eval fun)
               (strcat string " <"
               (rtos
                   (set symbol
                     (cond ( (eval symbol) ) ( default ))
                   )
               )
               "> : "
               )
             )
         )
         ( (eval symbol) )
         )
       )
   )
   )
   '(getdist getangle)
   '("\nEnter Distance " "\nEnter Angle ") '(*dis* *ang*) '(1.0 0.0)
)

(
   (lambda ( SelSet i / base disp )      
   (setq base (vlax-3D-point '(0. 0. 0.))
         disp (vlax-3D-point (polar '(0. 0. 0.) *ang* *dis*)))
   
   (if SelSet
       (while (setq entity (ssname SelSet (setq i (1+ i))))
         (_toColour entity 30)

         (vla-move (vlax-ename->vla-object entity) base disp)
       )
   )
   )
   (ssget) -1
)

(princ)
)

rookie37 发表于 2022-7-6 11:05:41

这为我节省了很多工作,没有它几乎是可以撤销的。非常感谢。
 
我想对它进行修改。为了解释,我会告诉你我用它做什么。
 
我正在用autocad制作一部动画电影。在电影的一秒钟里,我画了24幅画。有一种比我现在做的更简单的方法。(Inventor、3DsMax和autocad可能已经可以做到这一点,但我不知道如何做到)我仍在研究其他方法,但与此同时,我正在这样做。
 
如果我想让一个对象在电影的一秒钟内移动30毫米,我将第1帧的距离输入为1.25毫米。然后在第2帧上输入2.5mm的距离。我一直这样做直到第24帧
 
我想第二个宏,将提示我的总距离,然后为需要达到这个距离的帧数。使用单独宏的原因是,它不会一直运行。然而,如果你能在不运行的情况下将其与此结合,除非我要求,那就更好了
 
然后在上面的宏上,而不是
 
(setq dis(getdist“\n输入要移动的距离:”)
 
改为put
 
不幸的是,每个帧上的角度仍然不同
 
无论你是否做出上述改变,我仍然非常感谢你的帮助。宏仍然可以节省大量时间。(也许还有理智的节约者)

BIGAL 发表于 2022-7-6 11:18:36

对于我记得几年前在Autodesk上玩的一部电影,你可能会更好地使用其他软件,它内置了变形功能,只需拾取你的对象,将其移动到其他地方,更改其形状,软件就会自动添加所有中间步骤。将正方形改为圆形等

alanjt 发表于 2022-7-6 11:35:49

李提交的有趣转折。。。
 
5
页: [1]
查看完整版本: 移动宏