/* CMD: ½AutoSize                                                       */
/* By Brett Evan Hester      13032 Copenhill Rd. Dallas, Tx. 75240-5302 */
	MacrosName = "AutoSize"
/* Macro Type:                                                          */
/* MODIFIES    * OBJECTS   * BKG NEEDED   * SELECTED                    */
/* Description:                                                         */

/*        "Auto Size ©                                     "            */
/*        "This macro resizes the current layer's contents,"            */
/*        "to the size of the background layer.            "            */

/*        "Special Thanks to:                              "            */
/*        "Arnie Cachelin  Henry Ribron    Mark J. Holland "            */
/*        "J. Phil Kelso   Terry Wester    Steven K. Simms "            */
/*        "Kevin DeRita    Greg Glaser     William S. Hawes"            */
/*        "NewTek ©        Commodore ©     INOVAtronics ©  "            */

/*        "This macro represents a lot of time & hard work."            */
/*        "Encourage people to create new ones and not kill"            */
/*        "that possibility by stealing those that are out."            */

/* -------------------------------------------------------------------- */
                                     /* Start Error Detection (See End) */
SIGNAL ON ERROR
SIGNAL ON SYNTAX
                                                   /* Address LightWave */
VT3DLib = ADDLIB("LWModelerARexx.port",0)
ADDRESS "LWModelerARexx.port"

/* -------------------------------------------------------------------- */
                                                      /* Info On Layers */
CALL Sel_Mode(USER)

CL = CurLayer() ; BL = CurBLayer()

PARSE VALUE BoundingBox(CL) WITH CN CX1 CX2 CY1 CY2 CZ1 CZ2
PARSE VALUE BoundingBox(BL) WITH BN BX1 BX2 BY1 BY2 BZ1 BZ2

/* -------------------------------------------------------------------- */
                                                    /* BKG Layer Needed */
IF BN = 0 THEN DO
	CALL Notify(1,"!Sorry!","A Reference Object must be in a background layer.")
	CALL Exiting
END

/* ******************************************************************** */
                                                   /* Main Body of Code */

XCnt = (CX1/2)+(CX2/2) ; YCnt = (CY1/2)+(CY2/2) ; ZCnt = (CZ1/2)+(CZ2/2)

BXS = BX2 - BX1        ; BYS = BY2 - BY1        ; BZS = BZ2 - BZ1
CXS = CX2 - CX1        ; CYS = CY2 - CY1        ; CZS = CZ2 - CZ1

IF CXS ~= 0 THEN BEHX = BXS / CXS  ;  IF CXS = 0 THEN BEHX = 0
IF CYS ~= 0 THEN BEHY = BYS / CYS  ;  IF CYS = 0 THEN BEHY = 0
IF CZS ~= 0 THEN BEHZ = BZS / CZS  ;  IF CZS = 0 THEN BEHZ = 0

/* ******************************************************************** */
                                                      /* User Interface */
ReqA = "!- -- --- Plug Ins: Auto Size © --- -- -"
ReqB = "@by Brett Hester"
ReqC = ""
ReqD = "!- -- --- Object Sized --- -- -"
ReqE = "@by a multiplication of -"
ReqF = BEHX " " BEHY " " BEHZ
ReqG = "@to a new size of -"
ReqH = CXS " " CYS " " CZS

IF Notify(2,ReqA,ReqB,ReqC,ReqD,ReqE,ReqF,ReqG,ReqH) = 1 THEN CALL Scale(BEHX BEHY BEHZ, XCnt YCnt ZCnt)

CALL Exiting

/* -------------------------------------------------------------------- */
                                                              /* Ending */
Exiting:

	IF VT3DLib THEN CALL REMLIB("LWModelerARexx.port")
	EXIT

RETURN

/* -------------------------------------------------------------------- */
                                                      /* Error Handling */
SYNTAX:
ERROR:

	ErrCode = RC
	ErrLine = SIGL
	ErrInfo = ERRORTEXT(ErrCode)

	Err1 = "!Sorry!"
	Err2 = "An Error has been detected"
	Err3 = "@þ Macro -            "
	Err4 = "@þ Line Number -      "
	Err5 = "@þ Error Code -       "
	Err6 = "@þ Error Description -"
	Err7 = "@¤ Please Inform -    "
	Err8 = '  "Error Notice"     '
	Err9 = "  13032 Copenhill Rd."
	Err10 = "  Dallas, TX. 75240  "

	Call Notify(1,Err1,Err2,Err3,MacrosName,Err4,ErrLine,Err5,ErrCode,Err6,ErrInfo,Err7,Err8,Err9,Err10)

/* -------------------------------------------------------------------- */
                                             /* Advanced Error Handling */
	CALL SETCLIP("ErrorMacro",MacrosName)
	CALL SETCLIP("ErrorLine",ErrLine)
	CALL SETCLIP("ErrorCode",ErrCode)
	CALL SETCLIP("ErrorDesc",ErrInfo)

	PARSE SOURCE TempA TempB ErrFile TempC TempD TempE

	CALL SETCLIP("ErrorFile",ErrFile)

/* -------------------------------------------------------------------- */

	IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
	EXIT
