移动宏
我有数百件物品要搬。它们都将处于不同的角度和距离。如果没有宏,我会迷路,因为所有这些项目看起来都一样,可能会移动正确的距离,但移动错误的对象。我也会移动正确的物体,但移动的距离不对:(我启动了一个宏。这更好地解释了我在追求什么
请帮忙
;
; 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 "")
移动宏。图纸 新手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)
)
另一种方法
(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)
)
这为我节省了很多工作,没有它几乎是可以撤销的。非常感谢。
我想对它进行修改。为了解释,我会告诉你我用它做什么。
我正在用autocad制作一部动画电影。在电影的一秒钟里,我画了24幅画。有一种比我现在做的更简单的方法。(Inventor、3DsMax和autocad可能已经可以做到这一点,但我不知道如何做到)我仍在研究其他方法,但与此同时,我正在这样做。
如果我想让一个对象在电影的一秒钟内移动30毫米,我将第1帧的距离输入为1.25毫米。然后在第2帧上输入2.5mm的距离。我一直这样做直到第24帧
我想第二个宏,将提示我的总距离,然后为需要达到这个距离的帧数。使用单独宏的原因是,它不会一直运行。然而,如果你能在不运行的情况下将其与此结合,除非我要求,那就更好了
然后在上面的宏上,而不是
(setq dis(getdist“\n输入要移动的距离:”)
改为put
不幸的是,每个帧上的角度仍然不同
无论你是否做出上述改变,我仍然非常感谢你的帮助。宏仍然可以节省大量时间。(也许还有理智的节约者) 对于我记得几年前在Autodesk上玩的一部电影,你可能会更好地使用其他软件,它内置了变形功能,只需拾取你的对象,将其移动到其他地方,更改其形状,软件就会自动添加所有中间步骤。将正方形改为圆形等 李提交的有趣转折。。。
5
页:
[1]