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

  1. /* CMD: ½MotionToCurve                                                  */
  2. /* By Brett Evan Hester      13032 Copenhill Rd. Dallas, Tx. 75240-5302 */
  3.     MacrosName = "MotionToCurve"
  4. /* Macro Type:                                                          */
  5. /* CREATES     * MOTIONS   * OBJECTS      * REMEMBERS                   */
  6. /* Description:                                                         */
  7.  
  8. /*        "Motion To Curve ©                               "            */
  9. /*        "This macro loads a motion file and makes a curve"            */
  10. /*        "in modeler.                                     "            */
  11.  
  12. /*        "Special Thanks to:                              "            */
  13. /*        "Arnie Cachelin  Henry Ribron    Mark J. Holland "            */
  14. /*        "J. Phil Kelso   Terry Wester    Steven K. Simms "            */
  15. /*        "Kevin DeRita    Greg Glaser     William S. Hawes"            */
  16. /*        "NewTek ©        Commodore ©     INOVAtronics ©  "            */
  17.  
  18. /*        "This macro represents a lot of time & hard work."            */
  19. /*        "Encourage people to create new ones and not kill"            */
  20. /*        "that possibility by stealing those that are out."            */
  21.  
  22. /* -------------------------------------------------------------------- */
  23.                                      /* Start Error Detection (See End) */
  24. SIGNAL ON ERROR
  25. SIGNAL ON SYNTAX
  26.                                                    /* Address LightWave */
  27. VT3DLib = ADDLIB("LWModelerARexx.port",0)
  28. ADDRESS "LWModelerARexx.port"
  29.  
  30. /* -------------------------------------------------------------------- */
  31.                                     /* Reading Global Macro Preferences */
  32. BEHDefaultFilePath = "Sys:"
  33. BEHSettingsSavedTo = "T:"
  34. BEHSpeechAndSound = "1"
  35.  
  36. IF (EXISTS("S:PlugInPrefs")) THEN DO
  37.     IF (~OPEN(PlugInPrefs, "S:PlugInPrefs", 'R')) THEN BREAK
  38.     IF (READLN(PlugInPrefs) ~= "PlugInPrefs") THEN BREAK
  39.     BEHDefaultFilePath = READLN(PlugInPrefs)
  40.     BEHSettingsSavedTo = READLN(PlugInPrefs)
  41.     BEHSpeechAndSound = READLN(PlugInPrefs)
  42.     CALL CLOSE PlugInPrefs
  43. END
  44.  
  45. /* -------------------------------------------------------------------- */
  46.                                             /* Recalling Macro Settings */
  47. FilePath = "Motions"
  48. FileName = ""
  49.  
  50. PrefsFileName = BEHSettingsSavedTo||MacrosName||".PLUG"
  51.  
  52. IF (EXISTS(PrefsFileName)) THEN DO
  53.     IF (~OPEN(PrefsFile, PrefsFileName, 'R')) THEN BREAK
  54.     IF (READLN(PrefsFile) ~= MacrosName) THEN BREAK
  55.  
  56.     FilePath = READLN(PrefsFile)
  57.     FileName = READLN(PrefsFile)
  58.  
  59.     CALL CLOSE PrefsFile
  60. END
  61.  
  62. /* ******************************************************************** */
  63.                                                    /* Main Body Of Code */
  64. CALL FileRequester
  65. CALL SaveSettings
  66. CALL ReadMotion
  67. CALL CreateCurve
  68. CALL Exiting
  69.  
  70. /* ******************************************************************** */
  71.                                                       /* File Requester */
  72. FileRequester:
  73.  
  74.     FileReq = GetFileName("-- Load Motion --", FilePath, FileName)
  75.     IF FileReq = "(none)" THEN CALL Exiting
  76.  
  77.     CALL ExtractName
  78.     CALL VerifyFile
  79.  
  80. RETURN
  81.  
  82. /* -------------------------------------------------------------------- */
  83.                                                /* Extract Name and Path */
  84. ExtractName:
  85.  
  86.     FileReqLength = LENGTH(FileReq)
  87.     FileDivider = LASTPOS("/",FileReq)
  88.     IF FileDivider = 0 THEN FileDivider = LASTPOS(":",FileReq)
  89.     FileNameLength = FileReqLength - FileDivider
  90.  
  91.     FilePath = STRIP(LEFT(FileReq, FileDivider),"T","/")
  92.     FileName = RIGHT(FileReq, FileNameLength)
  93.  
  94. RETURN
  95.  
  96. /* -------------------------------------------------------------------- */
  97.                                                          /* Verify File */
  98. VerifyFile:
  99.  
  100.     IF (~OPEN(ReadMeFile, FileReq, 'R')) THEN DO
  101.         CALL Notify(1,"!Sorry!",'@Unable to load "'||FileReq||'"')
  102.         CALL FileRequester
  103.     END
  104.  
  105.     IF UPPER(READLN(ReadMeFile)) ~= "LWMO" THEN DO
  106.         CALL Notify(1,"!Sorry!",'@File "'||FileReq||'"',"not recognized as being a motion file.")
  107.         CALL CLOSE(ReadMeFile)
  108.         CALL FileRequester
  109.     END
  110.  
  111. RETURN
  112.  
  113. /* -------------------------------------------------------------------- */
  114.                                                  /* Reading Motion File */
  115. ReadMotion:
  116.  
  117.     CALL READLN(ReadMeFile)                                  /* Magic #  */
  118.     CALL READLN(ReadMeFile)                                  /* Channels */
  119.     NumOfKeys = READLN(ReadMeFile)                           /* # Keys   */
  120.  
  121.     DO i=1 TO NumOfKeys
  122.         Key.i = READLN(ReadMeFile)                         /* XYZ HPB WHD */
  123.         CALL READLN(ReadMeFile)                            /* Key, Spline */
  124.     END
  125.  
  126.     CALL CLOSE(ReadMeFile)
  127.  
  128. RETURN
  129.  
  130. /* -------------------------------------------------------------------- */
  131.                                                       /* Creating Curve */
  132. CreateCurve:
  133.  
  134.     CALL Add_Begin()
  135.     PointList = ""
  136.  
  137.     DO i=1 TO NumOfKeys
  138.         PARSE var Key.i PX PY PZ .
  139.         CALL Add_Point(PX PY PZ)
  140.         PointList = PointList i
  141.     END
  142.  
  143.     CALL Add_Curve(PointList)
  144.     CALL Add_End()
  145.  
  146. RETURN
  147.  
  148. /* -------------------------------------------------------------------- */
  149.                                                /* Saving Macro Settings */
  150. SaveSettings:
  151.  
  152.     IF (OPEN(PrefsFile, PrefsFileName, 'W')) THEN DO
  153.         CALL WRITELN(PrefsFile, MacrosName)
  154.  
  155.         CALL WRITELN(PrefsFile, FilePath)
  156.         CALL WRITELN(PrefsFile, FileName)
  157.  
  158.         CALL CLOSE PrefsFile
  159.     END
  160.  
  161. RETURN
  162.  
  163. /* -------------------------------------------------------------------- */
  164.                                                               /* Ending */
  165. Exiting:
  166.  
  167.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  168.     EXIT
  169.  
  170. RETURN
  171.  
  172. /* -------------------------------------------------------------------- */
  173.                                                       /* Error Handling */
  174. SYNTAX:
  175. ERROR:
  176.  
  177.     ErrCode = RC
  178.     ErrLine = SIGL
  179.     ErrInfo = ERRORTEXT(ErrCode)
  180.  
  181.     Err1 = "!Sorry!"
  182.     Err2 = "An Error has been detected"
  183.     Err3 = "@þ Macro -            "
  184.     Err4 = "@þ Line Number -      "
  185.     Err5 = "@þ Error Code -       "
  186.     Err6 = "@þ Error Description -"
  187.     Err7 = "@¤ Please Inform -    "
  188.     Err8 = '  "Error Notice"     '
  189.     Err9 = "  13032 Copenhill Rd."
  190.     Err10 = "  Dallas, TX. 75240  "
  191.  
  192.     Call Notify(1,Err1,Err2,Err3,MacrosName,Err4,ErrLine,Err5,ErrCode,Err6,ErrInfo,Err7,Err8,Err9,Err10)
  193.  
  194. /* -------------------------------------------------------------------- */
  195.                                              /* Advanced Error Handling */
  196.     CALL SETCLIP("ErrorMacro",MacrosName)
  197.     CALL SETCLIP("ErrorLine",ErrLine)
  198.     CALL SETCLIP("ErrorCode",ErrCode)
  199.     CALL SETCLIP("ErrorDesc",ErrInfo)
  200.  
  201.     PARSE SOURCE TempA TempB ErrFile TempC TempD TempE
  202.  
  203.     CALL SETCLIP("ErrorFile",ErrFile)
  204.  
  205. /* -------------------------------------------------------------------- */
  206.  
  207.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  208.     EXIT
  209.