长度的非线性的放大
请教:如何获取物体的长度(在x, y, z方向上),该函数的目的是SCALE一个物体,比例是关于长度的非线性函数,所以想先获得物体的原长度,再代入这个函数得到新的长度,再把这个新长度赋给物体,这三步我都不是很清楚,请帮我修改一下下面的程序,它是针对一个box的,如果是关于一个较复杂的电视机的,该如何操作?谢谢你们!
xqy66@hotmail.com
DEFUN XFunc
(Xscale)
(+ (EXPT Xscale 3.0) Xscale 1.0)
)
(DEFUN YFunc (Yscale)
(+ (* Yscale Yscale) (* 2.0 Yscale) 5.0)
)
(DEFUN ZFunc (Zscale)
(+ (EXPT Zscale 1.0) Zscale 2.0)
)
(DEFUN bboxe (bbox / L W H UX UY UZ)
(SETQ bbox ((VLA-GETBOUNDINGBOX obj 'll 'ur)
(MAPCAR 'VLAX-SAFEARRAY->LIST (LIST ll ur)))
)
(SETQ ll (CAR bbox)
ur (CADR bbox)
)
(SETQ L1 (- (CAR ur) (CAR ll))
W1 (- (CADR ur) (CADR ll))
H1 (- (CADDR ur) (CADDR ll))
)
(SETQ L (APPLY 'XFunc (LIST L1))
W (APPLY 'YFunc (LIST W1))
H (APPLY 'ZFunc (LIST H1))
)
(SETQ UX (+ (CAR ur) L)
UY (+ (CADR ur) W)
UZ (+ (CADDR ur) H)
)
(VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 1 UX)
(VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 2 UY)
(VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 3 UZ)
(VLAX-SAFEARRAY->LIST bbox)
)
(DEFUN c:testbb (/ obj bbox L W H)
(vl-load-com)
(SETQ obj (VLAX-ENAME->VLA-OBJECT (CAR (ENTSEL "\nPick the box to
scale: "))))
(bboxe obj XFunc YFunc ZFunc)
(PROMPT "\box has been scaled.")
(PRINC)
)
页:
[1]