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

  1. /* CMD: ½ModifyAlign                                                    */
  2. /* By Brett Evan Hester      13032 Copenhill Rd. Dallas, Tx. 75240-5302 */
  3.     MacrosName = "ModifyAlign"
  4. /* Macro Type:                                                          */
  5. /* MODIFIES    * OBJECTS   * BKG NEEDED   * SELECTED     * REMEMBERS    */
  6. /* Description:                                                         */
  7.  
  8. Info1A = "!Modify Alignment ©            Information 1 of 2"
  9. Info1B = ""
  10. Info1C = "@This macro moves the current layer, in reference"
  11. Info1D = "@to a background layer.  If a background is not  "
  12. Info1E = "@available, coords. 0, 0, 0 are used as a base.  "
  13. Info1F = ""
  14. Info1G = "þ ... EDGE: aligns that edge of the object with "
  15. Info1H = "  the selected counterpart in the background.   "
  16. Info1I = "þ CENTER: aligns the center point of the object "
  17. Info1J = "  to the position selected in the background.   "
  18. Info1K = 'þ "X" is for no movement on the selected axis.  '
  19. Info1L = ""
  20. Info1M = "þ DISPLAY RESULTS will show the amount the obj. "
  21. Info1N = "  was moved in accordance with the selected.    "
  22.  
  23. Info2A = "!Modify Alignment ©            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.  
  46. /* -------------------------------------------------------------------- */
  47.                                     /* Reading Global Macro Preferences */
  48. BEHDefaultFilePath = "Sys:"
  49. BEHSettingsSavedTo = "T:"
  50. BEHSpeechAndSound = "1"
  51.  
  52. IF (EXISTS("S:PlugInPrefs")) THEN DO
  53.     IF (~OPEN(PlugInPrefs, "S:PlugInPrefs", 'R')) THEN BREAK
  54.     IF (READLN(PlugInPrefs) ~= "PlugInPrefs") THEN BREAK
  55.     BEHDefaultFilePath = READLN(PlugInPrefs)
  56.     BEHSettingsSavedTo = READLN(PlugInPrefs)
  57.     BEHSpeechAndSound = READLN(PlugInPrefs)
  58.     CALL CLOSE PlugInPrefs
  59. END
  60.  
  61. /* -------------------------------------------------------------------- */
  62.                                             /* Recalling Macro Settings */
  63. ReqCLX = 2 ; ReqCLY = 2 ; ReqCLZ = 2
  64. ReqBLX = 2 ; ReqBLY = 2 ; ReqBLZ = 2
  65.  
  66. PrefsFileName = BEHSettingsSavedTo||MacrosName||".PLUG"
  67.  
  68. IF (EXISTS(PrefsFileName)) THEN DO
  69.     IF (~OPEN(PrefsFile, PrefsFileName, 'R')) THEN BREAK
  70.     IF (READLN(PrefsFile) ~= MacrosName) THEN BREAK
  71.  
  72.     PARSE value READLN(PrefsFile) with ReqCLX ReqCLY ReqCLZ .
  73.     PARSE value READLN(PrefsFile) with ReqBLX ReqBLY ReqBLZ .
  74.  
  75.     CALL CLOSE PrefsFile
  76. END
  77.  
  78. /* -------------------------------------------------------------------- */
  79.                                             /* Info on Current Layer(s) */
  80. CL = CurLayer()
  81. CLBox = BoundingBox(CL)
  82. PARSE var CLBox CLN CLX1 CLX2 CLY1 CLY2 CLZ1 CLZ2
  83.                                           /* Current Layer Center Point */
  84. CLCX = (CLX1 / 2) + (CLX2 / 2)
  85. CLCY = (CLY1 / 2) + (CLY2 / 2)
  86. CLCZ = (CLZ1 / 2) + (CLZ2 / 2)
  87.                                             /* Current Layer Total Size */
  88. CLTX = CLX2 - CLX1
  89. CLTY = CLY2 - CLY1
  90. CLTZ = CLZ2 - CLZ1
  91.  
  92. /* -------------------------------------------------------------------- */
  93.                                          /* Info on Background Layer(s) */
  94. BL = CurBLayer()
  95. BLBox = BoundingBox(BL)
  96. PARSE var BLBox BLN BLX1 BLX2 BLY1 BLY2 BLZ1 BLZ2
  97.                                           /* Current Layer Center Point */
  98. BLCX = (BLX1 / 2) + (BLX2 / 2)
  99. BLCY = (BLY1 / 2) + (BLY2 / 2)
  100. BLCZ = (BLZ1 / 2) + (BLZ2 / 2)
  101.                                             /* Current Layer Total Size */
  102. BLTX = BLX2 - BLX1
  103. BLTY = BLY2 - BLY1
  104. BLTZ = BLZ2 - BLZ1
  105.  
  106. /* ******************************************************************** */
  107.                                                    /* Main Body of Code */
  108. CALL MenuRequester
  109. CALL SaveSettings
  110. CALL Calculations
  111. IF BEHInfo = 2 THEN CALL DisplayResults
  112. CALL Move(PosX PosY PosZ)
  113. CALL Exiting
  114.  
  115. /* ******************************************************************** */
  116.                                                       /* User Interface */
  117. MenuRequester:
  118.  
  119.     CALL Req_Begin("Modify Alignment ©   by Brett Hester")
  120.  
  121.     CALL Req_AddControl("þ","T","Align Current Layer's:")
  122.     ReqA = Req_AddControl("X","CH","Left Edge Center RightEdge X")
  123.     ReqB = Req_AddControl("Y","CH","LowerEdge Center UpperEdge X")
  124.     ReqC = Req_AddControl("Z","CH","FrontEdge Center Back Edge X")
  125.     CALL Req_AddControl("þ","T","With Background Layer's:")
  126.     ReqD = Req_AddControl("X","CH","Left Edge Center RightEdge")
  127.     ReqE = Req_AddControl("Y","CH","LowerEdge Center UpperEdge")
  128.     ReqF = Req_AddControl("Z","CH","FrontEdge Center Back Edge")
  129.     CALL Req_AddControl("","T","|¼ Negative -      + Positive ½|","")
  130.     BEHInfo = Req_AddControl("",'CH',"Information Display Results")
  131.  
  132.     CALL Req_SetVal(ReqA, ReqCLX)
  133.     CALL Req_SetVal(ReqB, ReqCLY)
  134.     CALL Req_SetVal(ReqC, ReqCLZ)
  135.     CALL Req_SetVal(ReqD, ReqBLX)
  136.     CALL Req_SetVal(ReqE, ReqBLY)
  137.     CALL Req_SetVal(ReqF, ReqBLZ)
  138.     CALL Req_SetVal(BEHInfo, 0)
  139.  
  140.     OKorCancel = Req_Post() ; IF OKorCancel = 0 THEN CALL Exiting
  141.  
  142.     ReqCLX = Req_GetVal(ReqA)
  143.     ReqCLY = Req_GetVal(ReqB)
  144.     ReqCLZ = Req_GetVal(ReqC)
  145.     ReqBLX = Req_GetVal(ReqD)
  146.     ReqBLY = Req_GetVal(ReqE)
  147.     ReqBLZ = Req_GetVal(ReqF)
  148.     BEHInfo = Req_GetVal(BEHInfo)
  149.  
  150.     CALL Req_End()
  151.  
  152.     IF BEHInfo = 1 THEN CALL InformationWindows
  153.  
  154. RETURN
  155.  
  156. /* -------------------------------------------------------------------- */
  157.                                                         /* Calculations */
  158. Calculations:
  159.  
  160.     IF ReqBLX = 1 THEN XOffset = BLX1
  161.     IF ReqBLX = 2 THEN XOffset = BLCX
  162.     IF ReqBLX = 3 THEN XOffset = BLX2
  163.  
  164.     IF ReqBLY = 1 THEN YOffset = BLY1
  165.     IF ReqBLY = 2 THEN YOffset = BLCY
  166.     IF ReqBLY = 3 THEN YOffset = BLY2
  167.  
  168.     IF ReqBLZ = 1 THEN ZOffset = BLZ1
  169.     IF ReqBLZ = 2 THEN ZOffset = BLCZ
  170.     IF ReqBLZ = 3 THEN ZOffset = BLZ2
  171.  
  172.     IF ReqCLX = 1 THEN PosX = XOffset - CLX1
  173.     IF ReqCLX = 2 THEN PosX = XOffset - CLCX
  174.     IF ReqCLX = 3 THEN PosX = XOffset - CLX2
  175.     IF ReqCLX = 4 THEN PosX = 0
  176.  
  177.     IF ReqCLY = 1 THEN PosY = YOffset - CLY1
  178.     IF ReqCLY = 2 THEN PosY = YOffset - CLCY
  179.     IF ReqCLY = 3 THEN PosY = YOffset - CLY2
  180.     IF ReqCLY = 4 THEN PosY = 0
  181.  
  182.     IF ReqCLZ = 1 THEN PosZ = ZOffset - CLZ1
  183.     IF ReqCLZ = 2 THEN PosZ = ZOffset - CLCZ
  184.     IF ReqCLZ = 3 THEN PosZ = ZOffset - CLZ2
  185.     IF ReqCLZ = 4 THEN PosZ = 0
  186.  
  187. RETURN
  188.  
  189. /* -------------------------------------------------------------------- */
  190.                                                      /* Display Results */
  191. DisplayResults:
  192.  
  193.     Length = 0
  194.     IF LENGTH(PosX) > Length THEN Length = LENGTH(PosX)
  195.     IF LENGTH(PosY) > Length THEN Length = LENGTH(PosY)
  196.     IF LENGTH(PosZ) > Length THEN Length = LENGTH(PosZ)
  197.     PosX = LEFT(PosX,LENGTH)
  198.     PosY = LEFT(PosY,LENGTH)
  199.     PosZ = LEFT(PosZ,LENGTH)
  200.     Spacer = LEFT("",LENGTH)
  201.  
  202.     IF ReqCLX = 1 THEN DisplayCLX = "LEFT  EDGE"
  203.     IF ReqCLX = 2 THEN DisplayCLX = "  CENTER  "
  204.     IF ReqCLX = 3 THEN DisplayCLX = "RIGHT EDGE"
  205.     IF ReqBLX = 1 THEN DisplayBLX = "LEFT  EDGE"
  206.     IF ReqBLX = 2 THEN DisplayBLX = "  CENTER  "
  207.     IF ReqBLX = 3 THEN DisplayBLX = "RIGHT EDGE"
  208.  
  209.     IF ReqCLY = 1 THEN DisplayCLY = "LOWER EDGE"
  210.     IF ReqCLY = 2 THEN DisplayCLY = "  CENTER  "
  211.     IF ReqCLY = 3 THEN DisplayCLY = "UPPER EDGE"
  212.     IF ReqBLY = 1 THEN DisplayBLY = "LOWER EDGE"
  213.     IF ReqBLY = 2 THEN DisplayBLY = "  CENTER  "
  214.     IF ReqBLY = 3 THEN DisplayBLY = "UPPER EDGE"
  215.  
  216.     IF ReqCLZ = 1 THEN DisplayCLZ = "FRONT EDGE"
  217.     IF ReqCLZ = 2 THEN DisplayCLZ = "  CENTER  "
  218.     IF ReqCLZ = 3 THEN DisplayCLZ = "BACK  EDGE"
  219.     IF ReqBLZ = 1 THEN DisplayBLZ = "FRONT EDGE"
  220.     IF ReqBLZ = 2 THEN DisplayBLZ = "  CENTER  "
  221.     IF ReqBLZ = 3 THEN DisplayBLZ = "BACK  EDGE"
  222.  
  223.     ReqC = ""; ReqD = ""; ReqE = ""; ReqF = ""; ReqG = ""; ReqH = ""
  224.  
  225.     ReqA = "!Modify Alignment ©   by Brett Evan Hester 214-233-5493"
  226.     ReqB = ""
  227.     IF ReqCLX ~= 4 THEN DO
  228.         ReqC = "Aligning the            w/BKG's            ; Move X ="||Spacer
  229.         ReqD = "@             "||DisplayCLX||"         "||DisplayBLX||"           "||PosX
  230.     END
  231.     IF ReqCLY ~= 4 THEN DO
  232.         ReqE = "Aligning the            w/BKG's            ; Move Y ="||Spacer
  233.         ReqF = "@             "||DisplayCLY||"         "||DisplayBLY||"           "||PosY
  234.     END
  235.     IF ReqCLZ ~= 4 THEN DO
  236.         ReqG = "Aligning the            w/BKG's            ; Move Z ="||Spacer
  237.         ReqH = "@             "||DisplayCLZ||"         "||DisplayBLZ||"           "||PosZ
  238.     END
  239.     ReqI = ""
  240.  
  241.     OKorCancel = Notify(2, ReqA, ReqB, ReqC, ReqD, ReqE, ReqF, ReqG, ReqH, ReqI)
  242.     IF OKorCancel = 0 THEN CALL Exiting
  243.  
  244. RETURN
  245.  
  246. /* -------------------------------------------------------------------- */
  247.                                             /* Recording Macro Settings */
  248. SaveSettings:
  249.  
  250.     IF (OPEN(PrefsFile, PrefsFileName, 'W')) THEN DO
  251.         CALL WRITELN(PrefsFile, MacrosName)
  252.  
  253.         CALL WRITELN(PrefsFile, ReqCLX ReqCLY ReqCLZ)
  254.         CALL WRITELN(PrefsFile, ReqBLX ReqBLY ReqBLZ)
  255.  
  256.         CALL CLOSE PrefsFile
  257.     END
  258.  
  259. RETURN
  260.  
  261. /* -------------------------------------------------------------------- */
  262.                                                               /* Ending */
  263. Exiting:
  264.  
  265.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  266.     EXIT
  267.  
  268. RETURN
  269.  
  270. /* -------------------------------------------------------------------- */
  271.                                                  /* Information Windows */
  272. InformationWindows:
  273.  
  274.     OKorCancel = Notify(2, Info1A, Info1B, Info1C, Info1D, Info1E, Info1F, Info1G, Info1H, Info1I, Info1J, Info1K, Info1L, Info1M, Info1N)
  275.     IF OKorCancel = 1 THEN CALL Notify(1, Info2A, Info2B, Info2C, Info2D, Info2E, Info2F, Info2G, Info2H, Info2I, Info2J, Info2K, Info2L, Info2M, Info2N)
  276.     CALL MenuRequester
  277.  
  278. RETURN
  279.  
  280. /* -------------------------------------------------------------------- */
  281.                                                       /* Error Handling */
  282. SYNTAX:
  283. ERROR:
  284.  
  285.     ErrCode = RC
  286.     ErrLine = SIGL
  287.     ErrInfo = ERRORTEXT(ErrCode)
  288.  
  289.     Err1 = "!Sorry!"
  290.     Err2 = "An Error has been detected"
  291.     Err3 = "@þ Macro -            "
  292.     Err4 = "@þ Line Number -      "
  293.     Err5 = "@þ Error Code -       "
  294.     Err6 = "@þ Error Description -"
  295.     Err7 = "@¤ Please Inform -    "
  296.     Err8 = '  "Error Notice"     '
  297.     Err9 = "  13032 Copenhill Rd."
  298.     Err10 = "  Dallas, TX. 75240  "
  299.  
  300.     Call Notify(1,Err1,Err2,Err3,MacrosName,Err4,ErrLine,Err5,ErrCode,Err6,ErrInfo,Err7,Err8,Err9,Err10)
  301.  
  302. /* -------------------------------------------------------------------- */
  303.                                              /* Advanced Error Handling */
  304.     CALL SETCLIP("ErrorMacro",MacrosName)
  305.     CALL SETCLIP("ErrorLine",ErrLine)
  306.     CALL SETCLIP("ErrorCode",ErrCode)
  307.     CALL SETCLIP("ErrorDesc",ErrInfo)
  308.  
  309.     PARSE SOURCE TempA TempB ErrFile TempC TempD TempE
  310.  
  311.     CALL SETCLIP("ErrorFile",ErrFile)
  312.  
  313. /* -------------------------------------------------------------------- */
  314.  
  315.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  316.     EXIT
  317.