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

  1. /* CMD: ½Information                                                    */
  2. /* By Brett Evan Hester      13032 Copenhill Rd. Dallas, Tx. 75240-5302 */
  3.     MacrosName = "Information"
  4. /* Macro Type:                                                          */
  5. /* INFORMATION * SELECTED                                               */
  6. /* Description:                                                         */
  7.  
  8. Info1A = "!Information ©                 Information 1 of 2"
  9. Info1B = ""
  10. Info1C = "@This macro will provide information about the   "
  11. Info1D = "@currently selected points, in the form of,      "
  12. Info1E = "@measurements and distances.                     "
  13. Info1F = ""
  14. Info1G = "þ CENTER and SIZE of the selected.              "
  15. Info1H = ""
  16. Info1I = "þ SHORTEST and LONGEST distance between any two "
  17. Info1J = "  points. Distance provided on every axis and   "
  18. Info1K = "  distance regardless of axis.                  "
  19. Info1L = ""
  20. Info1M = ""
  21. Info1N = ""
  22.  
  23. Info2A = "!Information ©                 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.  
  56. LongestWidth = 0
  57. ShortestWidth = 9999999999999999
  58. LongestHeight = 0
  59. ShortestHeight = 9999999999999999
  60. LongestDepth = 0
  61. ShortestDepth = 9999999999999999
  62. Longest = 0
  63. Shortest = 9999999999999999
  64.  
  65. /* -------------------------------------------------------------------- */
  66.  
  67. CALL SEL_MODE(USER)
  68.  
  69. NumberOfPnts = XFrm_Begin()
  70.  
  71.     BaseVector = XFrm_GetPos(1)
  72.     PARSE var BaseVector X1 Y1 Z1
  73.  
  74.     LeftEdge = X1
  75.     RightEdge = X1
  76.  
  77.     UpperEdge = Y1
  78.     LowerEdge = Y1
  79.  
  80.     FrontEdge = Z1
  81.     BackEdge = Z1
  82.  
  83. CALL XFrm_End
  84.  
  85.  
  86. CALL Meter_Begin(NumberOfPnts, "Information ©   by Brett Hester","Scanning...")
  87.  
  88. DO ia = 1 to NumberOfPnts
  89.  
  90.     NumberOfPnts = XFrm_Begin()
  91.  
  92.     VectorA = XFrm_GetPos(ia)
  93.  
  94.     PARSE var VectorA X1 Y1 Z1
  95.  
  96.     IF X1 < LeftEdge THEN LeftEdge = X1
  97.     IF Y1 < LowerEdge THEN LowerEdge = Y1
  98.     IF Z1 < FrontEdge THEN FrontEdge = Z1
  99.  
  100.     IF X1 > RightEdge THEN RightEdge = X1
  101.     IF Y1 > UpperEdge THEN UpperEdge = Y1
  102.     IF Z1 > BackEdge THEN BackEdge = Z1
  103.  
  104.     CALL Meter_Step()
  105.  
  106.     DO ib = 1 to NumberOfPnts
  107.  
  108.         VectorB = XFrm_GetPos(ib)
  109.  
  110.         PARSE var VectorB X2 Y2 Z2
  111.  
  112.         If X2 > X1 THEN Width = X2 - X1
  113.         If X2 < X1 THEN Width = X1 - X2
  114.         If X2 = X1 THEN Width = 0
  115.         Width = ABS(Width)
  116.  
  117.         If Y2 > Y1 THEN Height = Y2 - Y1
  118.         If Y2 < Y1 THEN Height = Y1 - Y2
  119.         If Y2 = Y1 THEN Height = 0
  120.         Height = ABS(Height)
  121.  
  122.         If Z2 > Z1 THEN Depth = Z2 - Z1
  123.         If Z2 < Z1 THEN Depth = Z1 - Z2
  124.         If Z2 = Z1 THEN Depth = 0
  125.         Depth = ABS(Depth)
  126.  
  127.         Skew = Sqrt((Width * Width) + (Depth * Depth))
  128.  
  129.         Total = Sqrt((Skew * Skew) + (Height * Height))
  130.  
  131.         IF Width > LongestWidth THEN DO
  132.             LongestWidth = Width
  133.         END
  134.         IF Width ~= 0 THEN DO
  135.             IF Width < ShortestWidth THEN DO
  136.                 ShortestWidth = Width
  137.             END
  138.         END
  139.  
  140.         IF Height > LongestHeight THEN DO
  141.             LongestHeight = Height
  142.         END
  143.         IF Height ~= 0 THEN DO
  144.             IF Height < ShortestHeight THEN DO
  145.                 ShortestHeight = Height
  146.             END
  147.         END
  148.  
  149.         IF Depth > LongestDepth THEN DO
  150.             LongestDepth = Depth
  151.         END
  152.         IF Depth ~= 0 THEN DO
  153.             IF Depth < ShortestDepth THEN DO
  154.                 ShortestDepth = Depth
  155.             END
  156.         END
  157.  
  158.         IF Total > Longest THEN DO
  159.             Longest = Total
  160.         END
  161.         IF Total ~= 0 THEN DO
  162.             IF Total < Shortest THEN DO
  163.                 Shortest = Total
  164.             END
  165.         END
  166.  
  167.     END
  168.     CALL XFrm_End
  169. END
  170. CALL Meter_End()
  171.  
  172. /* -------------------------------------------------------------------- */
  173.  
  174. IF LongestWidth = 9999999999999999 THEN LongestWidth = 0
  175. IF ShortestWidth = 9999999999999999 THEN ShortestWidth = 0
  176. IF LongestHeight = 9999999999999999 THEN LongestHeight = 0
  177. IF ShortestHeight = 9999999999999999 THEN ShortestHeight = 0
  178. IF LongestDepth = 9999999999999999 THEN LongestDepth = 0
  179. IF ShortestDepth = 9999999999999999 THEN ShortestDepth = 0
  180. IF Longest = 9999999999999999 THEN Longest = 0
  181. IF Shortest = 9999999999999999 THEN Shortest = 0
  182.  
  183. /* -------------------------------------------------------------------- */
  184.  
  185. Width = RightEdge - LeftEdge
  186. Height = UpperEdge - LowerEdge
  187. Depth = BackEdge - FrontEdge
  188.  
  189. /* -------------------------------------------------------------------- */
  190.                                               /* For Information Window */
  191. BEHInfo = 1
  192.                       /* For Coming Back to Main Menu after Info Window */
  193. DO WHILE BEHInfo
  194. /* -------------------------------------------------------------------- */
  195.                                                       /* User Interface */
  196.     CALL Req_Begin("Information ©                  by Brett Hester")
  197.                                                    /* Adding Requesters */
  198.     ReqA = Req_AddControl("þ   Center",'V', '1')
  199.     ReqB = Req_AddControl("þ     Size",'V', '1')
  200.     CALL Req_AddControl("",'T', " Width       Height     Depth")
  201.     ReqC = Req_AddControl("þ Shortest",'V', '1')
  202.     ReqD = Req_AddControl("¤  Overall",'N', '1')
  203.     ReqE = Req_AddControl("þ  Longest",'V', '1')
  204.     ReqF = Req_AddControl("¤  Overall",'N', '1')
  205.     ReqG = Req_AddControl("",'CH', "Information")
  206.                                                   /* Setting Requesters */
  207.     CALL Req_SetVal(ReqA, 0)
  208.     CALL Req_SetVal(ReqB, Width Height Depth)
  209.     CALL Req_SetVal(ReqC, ShortestWidth ShortestHeight ShortestDepth)
  210.     CALL Req_SetVal(ReqD, Shortest)
  211.     CALL Req_SetVal(ReqE, LongestWidth LongestHeight LongestDepth)
  212.     CALL Req_SetVal(ReqF, Longest)
  213.     CALL Req_SetVal(ReqG, 0)
  214.                                                       /* OK or Cancel? */
  215.     OKorCancel = Req_Post()
  216.     IF OKorCancel = 0 THEN DO
  217.         IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  218.         EXIT
  219.     END
  220.                                             /* Retrieving User's Input */
  221.     Req = Req_GetVal(ReqA)
  222.     Req = Req_GetVal(ReqB)
  223.     Req = Req_GetVal(ReqC)
  224.     Req = Req_GetVal(ReqD)
  225.     Req = Req_GetVal(ReqE)
  226.     Req = Req_GetVal(ReqF)
  227.     BEHInfo = Req_GetVal(ReqG)
  228.  
  229.     CALL Req_End()
  230.  
  231.     IF BEHInfo = 1 THEN CALL InformationWindows
  232.  
  233. END
  234.  
  235. /* -------------------------------------------------------------------- */
  236.                                                               /* Ending */
  237. IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  238. EXIT
  239.  
  240. /* -------------------------------------------------------------------- */
  241.                                                  /* Information Windows */
  242. InformationWindows:
  243.  
  244.     OKorCancel = Notify(2, Info1A, Info1B, Info1C, Info1D, Info1E, Info1F, Info1G, Info1H, Info1I, Info1J, Info1K, Info1L, Info1M, Info1N)
  245.     IF OKorCancel = 1 THEN CALL Notify(1, Info2A, Info2B, Info2C, Info2D, Info2E, Info2F, Info2G, Info2H, Info2I, Info2J, Info2K, Info2L, Info2M, Info2N)
  246.  
  247. RETURN
  248.  
  249. /* -------------------------------------------------------------------- */
  250.                                                       /* Error Handling */
  251. SYNTAX:
  252. ERROR:
  253.  
  254.     ErrCode = RC
  255.     ErrLine = SIGL
  256.     ErrInfo = ERRORTEXT(ErrCode)
  257.  
  258.     Err1 = "!Sorry!"
  259.     Err2 = "An Error has been detected"
  260.     Err3 = "@þ Macro -            "
  261.     Err4 = "@þ Line Number -      "
  262.     Err5 = "@þ Error Code -       "
  263.     Err6 = "@þ Error Description -"
  264.     Err7 = "@¤ Please Inform -    "
  265.     Err8 = '  "Error Notice"     '
  266.     Err9 = "  13032 Copenhill Rd."
  267.     Err10 = "  Dallas, TX. 75240  "
  268.  
  269.     Call Notify(1,Err1,Err2,Err3,MacrosName,Err4,ErrLine,Err5,ErrCode,Err6,ErrInfo,Err7,Err8,Err9,Err10)
  270.  
  271. /* -------------------------------------------------------------------- */
  272.                                              /* Advanced Error Handling */
  273.     CALL SETCLIP("ErrorMacro",MacrosName)
  274.     CALL SETCLIP("ErrorLine",ErrLine)
  275.     CALL SETCLIP("ErrorCode",ErrCode)
  276.     CALL SETCLIP("ErrorDesc",ErrInfo)
  277.  
  278.     PARSE SOURCE TempA TempB ErrFile TempC TempD TempE
  279.  
  280.     CALL SETCLIP("ErrorFile",ErrFile)
  281.  
  282. /* -------------------------------------------------------------------- */
  283.  
  284.     IF (VT3DLib) THEN CALL REMLIB("LWModelerARexx.port")
  285.     EXIT
  286.