home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / Raytracing / Raytracer / LW5VT09.LHA / Toaster / Arexx_examples / PlugIns / ModifyToCubic.lwm < prev    next >
Encoding:
Text File  |  1996-06-10  |  7.4 KB  |  217 lines

  1. /* CMD: ½ModifyToCubic                                                  */
  2. /* By Brett Evan Hester      13032 Copenhill Rd. Dallas, Tx. 75240-5302 */
  3.     MacrosName = "ModifyToCubic"
  4. /* Macro Type:                                                          */
  5. /* MODIFIES    * OBJECTS   * SELECTED     * TIME NEEDED                 */
  6. /* Description:                                                         */
  7.  
  8. Info1A = "!Modify To Cubic ©             Information 1 of 2"
  9. Info1B = ""
  10. Info1C = "@This macro reshapes the current object into that"
  11. Info1D = "@of a cube or cubic based object.                "
  12. Info1E = ""
  13. Info1F = "þ The default CENTER is that of the current obj."
  14. Info1G = "þ The default RADIUS is that of the current obj."
  15. Info1H = "þ Each AXIS defaults to OFF if the obj. is flat "
  16. Info1I = "  on that axis.                                 "
  17. Info1J = "¤ If all are turned on, six sides are flat.     "
  18. Info1K = "¤ If two are turned on, the object is flat on   "
  19. Info1L = "  four of the six sides.                        "
  20. Info1M = "¤ If only one axis is chosen, two out of the six"
  21. Info1N = "  sides are flat.                               "
  22.  
  23. Info2A = "!Modify To Cubic ©             Information 2 of 2"
  24. Info2B = "@               Plug-Ins and Go! ©               "
  25. Info2C = "                           Hester and associates"
  26. Info2D = "                           13032 Copenhill Road "
  27. Info2E = "                           Dallas, Texas 75240  "
  28. Info2F = "@Special Thanks to:                              "
  29. Info2G = "Arnie Cachelin  Henry Ribron    Mark J. Holland "
  30. Info2H = "J. Phil Kelso   Terry Wester    Steven K. Simms "
  31. Info2I = "Kevin DeRita    Greg Glaser     William S. Hawes"
  32. Info2J = "NewTek ©        Commodore ©     INOVAtronics ©  "
  33. Info2K = ""
  34. Info2L = "@This macro represents a lot of time & hard work."
  35. Info2M = "@Encourage people to create new ones and not kill"
  36. Info2N = "@that possibility by stealing those that are out."
  37.  
  38. /* -------------------------------------------------------------------- */
  39.                                      /* Start Error Detection (See End) */
  40. SIGNAL ON ERROR
  41. SIGNAL ON SYNTAX
  42.                                                    /* Address LightWave */
  43. VT3DLib = ADDLIB("LWModelerARexx.port",0)
  44. ADDRESS "LWModelerARexx.port"
  45.                                                   /* Add Math Functions */
  46. MATHLIB= "rexxmathlib.library"
  47. IF POS(MATHLIB , SHOW('L')) = 0 THEN
  48.     IF ~ADDLIB(MATHLIB , 0 , -30 , 0) THEN DO
  49.         CALL Notify(1,"!Can't find "MATHLIB)
  50.         IF VT3DLib THEN CALL REMLIB("LWModelerARexx.port")
  51.         EXIT
  52.     END
  53.  
  54. /* -------------------------------------------------------------------- */
  55.                                                /* Retrieving Layer Info */
  56. Box = BoundingBox()
  57. PARSE var Box N X1 X2 Y1 Y2 Z1 Z2
  58.  
  59. IF N = 0 THEN DO
  60.     CALL Notify(1,"!Sorry!","@An object must be present for this macro.")
  61.     CALL Exiting
  62. END
  63.  
  64. CntX = (X1/2)+(X2/2) ; CntY = (Y1/2)+(Y2/2) ; CntZ = (Z1/2)+(Z2/2)
  65. RadX = (X2-X1)/2     ; RadY = (Y2-Y1)/2     ; RadZ = (Z2-Z1)/2
  66.  
  67. IF RadX = 0 THEN ReqAxisX = 0 ; ELSE ReqAxisX = 1
  68. IF RadY = 0 THEN ReqAxisY = 0 ; ELSE ReqAxisY = 1
  69. IF RadZ = 0 THEN ReqAxisZ = 0 ; ELSE ReqAxisZ = 1
  70.  
  71. /* ******************************************************************** */
  72.                                                    /* Main Body Of Code */
  73. CALL MenuRequester
  74. CALL TransformObject
  75. CALL Exiting
  76.  
  77. /* ******************************************************************** */
  78.                                                       /* User Interface */
  79. MenuRequester:
  80.  
  81.     CALL Req_Begin("Modify To Cubic ©         by Brett Hester")
  82.  
  83.     ReqA = Req_AddControl("Center",'V',1)
  84.     ReqB = Req_AddControl("Radius",'V',1)
  85.     ReqC = Req_AddControl("X Axis",'B')
  86.     ReqD = Req_AddControl("Y Axis",'B')
  87.     ReqE = Req_AddControl("Z Axis",'B')
  88.     ReqF = Req_AddControl("",'CH', "Information")
  89.  
  90.     CALL Req_SetVal(ReqA, CntX CntY CntZ)
  91.     CALL Req_SetVal(ReqB, RadX RadY RadZ)
  92.     CALL Req_SetVal(ReqC, ReqAxisX)
  93.     CALL Req_SetVal(ReqD, ReqAxisY)
  94.     CALL Req_SetVal(ReqE, ReqAxisZ)
  95.     CALL Req_SetVal(ReqF, 0)
  96.  
  97.     OKorCancel = Req_Post() ; IF OKorCancel = 0 THEN CALL Exiting
  98.  
  99.     ReqCenter = Req_GetVal(ReqA)
  100.     ReqRadius = Req_GetVal(ReqB)
  101.     ReqAxisX = Req_GetVal(ReqC)
  102.     ReqAxisY = Req_GetVal(ReqD)
  103.     ReqAxisZ = Req_GetVal(ReqE)
  104.     BEHInfo = Req_GetVal(ReqF)
  105.  
  106.     PARSE var ReqCenter CntX CntY CntZ
  107.     PARSE var ReqRadius RadX RadY RadZ
  108.  
  109.     CALL Req_End()
  110.  
  111.     IF BEHInfo = 1 THEN CALL InformationWindows
  112.  
  113. RETURN
  114.  
  115. /* -------------------------------------------------------------------- */
  116.                                                     /* Transform Object */
  117. TransformObject:
  118.  
  119.     N = XFrm_Begin()
  120.     CALL Meter_Begin(N, "Modifing To Cubic-Based Shape")
  121.     DO i = 1 to N
  122.         PARSE value XFrm_GetPos(i) with OldX OldY OldZ .
  123.  
  124.         OldRadX = OldX-CntX ; OldRadY = OldY-CntY ; OldRadZ = OldZ-CntZ
  125.  
  126.         ScaleX = 0 ; ScaleY = 0 ; ScaleZ = 0
  127.  
  128.         IF OldRadX ~= 0 THEN ScaleX = ABS(RadX / OldRadX)
  129.         IF OldRadY ~= 0 THEN ScaleY = ABS(RadY / OldRadY)
  130.         IF OldRadZ ~= 0 THEN ScaleZ = ABS(RadZ / OldRadZ)
  131.                                      /* Creating Largest Possible Scale */
  132.         Scale = ScaleX + ScaleY + ScaleZ
  133.  
  134.           /* Finding which axis would be hit first by the current point */
  135.         IF ScaleX ~= 0 THEN DO
  136.             IF ScaleX < Scale THEN Scale = ScaleX
  137.         END
  138.         IF ScaleY ~= 0 THEN DO
  139.             IF ScaleY < Scale THEN Scale = ScaleY
  140.         END
  141.         IF ScaleZ ~= 0 THEN DO
  142.             IF ScaleZ < Scale THEN Scale = ScaleZ
  143.         END
  144.  
  145.         NewX = (OldRadX * Scale) + CntX
  146.         NewY = (OldRadY * Scale) + CntY
  147.         NewZ = (OldRadZ * Scale) + CntZ
  148.  
  149.         IF ReqAxisX = 0 THEN NewX = OldX
  150.         IF ReqAxisY = 0 THEN NewY = OldY
  151.         IF ReqAxisZ = 0 THEN NewZ = OldZ
  152.  
  153.         CALL XFrm_SetPos(i, NewX NewY NewZ)
  154.         CALL Meter_Step()
  155.     END
  156.     CALL Meter_End()
  157.     CALL XFrm_End()
  158.  
  159. RETURN
  160.  
  161. /* -------------------------------------------------------------------- */
  162.                                                               /* Ending */
  163. Exiting:
  164.  
  165.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  166.     EXIT
  167.  
  168. RETURN
  169.  
  170. /* -------------------------------------------------------------------- */
  171.                                                  /* Information Windows */
  172. InformationWindows:
  173.  
  174.     OKorCancel = Notify(2, Info1A, Info1B, Info1C, Info1D, Info1E, Info1F, Info1G, Info1H, Info1I, Info1J, Info1K, Info1L, Info1M, Info1N)
  175.     IF OKorCancel = 1 THEN CALL Notify(1, Info2A, Info2B, Info2C, Info2D, Info2E, Info2F, Info2G, Info2H, Info2I, Info2J, Info2K, Info2L, Info2M, Info2N)
  176.     CALL MenuRequester
  177.  
  178. RETURN
  179.  
  180. /* -------------------------------------------------------------------- */
  181.                                                       /* Error Handling */
  182. SYNTAX:
  183. ERROR:
  184.  
  185.     ErrCode = RC
  186.     ErrLine = SIGL
  187.     ErrInfo = ERRORTEXT(ErrCode)
  188.  
  189.     Err1 = "!Sorry!"
  190.     Err2 = "An Error has been detected"
  191.     Err3 = "@þ Macro -            "
  192.     Err4 = "@þ Line Number -      "
  193.     Err5 = "@þ Error Code -       "
  194.     Err6 = "@þ Error Description -"
  195.     Err7 = "@¤ Please Inform -    "
  196.     Err8 = '  "Error Notice"     '
  197.     Err9 = "  13032 Copenhill Rd."
  198.     Err10 = "  Dallas, TX. 75240  "
  199.  
  200.     Call Notify(1,Err1,Err2,Err3,MacrosName,Err4,ErrLine,Err5,ErrCode,Err6,ErrInfo,Err7,Err8,Err9,Err10)
  201.  
  202. /* -------------------------------------------------------------------- */
  203.                                              /* Advanced Error Handling */
  204.     CALL SETCLIP("ErrorMacro",MacrosName)
  205.     CALL SETCLIP("ErrorLine",ErrLine)
  206.     CALL SETCLIP("ErrorCode",ErrCode)
  207.     CALL SETCLIP("ErrorDesc",ErrInfo)
  208.  
  209.     PARSE SOURCE TempA TempB ErrFile TempC TempD TempE
  210.  
  211.     CALL SETCLIP("ErrorFile",ErrFile)
  212.  
  213. /* -------------------------------------------------------------------- */
  214.  
  215.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  216.     EXIT
  217.