home *** CD-ROM | disk | FTP | other *** search
/ Corel Draw 7 / CD7_CAD.ISO / cad / movie.csc < prev    next >
Text File  |  1996-10-28  |  15KB  |  451 lines

  1. 'This script makes a movie of any object created in CorelCAD using Corel PHOTO-PAINT
  2. '
  3. '************************************************************************************************
  4. '*********************         MOVIE SCRIPT        **********************************************
  5. '************************************************************************************************
  6. '************************************************************************************************
  7. 'April 6, 1996    
  8. '
  9. '    This script creates a movie (AVI file) out of any object created in CorelCAD. The object is
  10. '  rotated around X degrees in Y steps, at each step, the object is rendered, then exported as    
  11. '  a bitmap (BMP file). These BMP files combine to make the movie in Corel PhotoPaint.
  12. '
  13. '    The best way to run the script is to use the static view. You must set a rotation point for the
  14. '  object to be rotated about. The easiest way to get a well centered movie is to define the center of
  15. '  gravity of your object (found under engineering properties) as a rotation point. Use Zoom commands to
  16. '  get the best preview (what your movie will look like).
  17. '
  18. ' The user defines:
  19. '                - File name of movie file(*.AVI) to be created
  20. '                - Axis to revolve object around (X,Y,or Z)
  21. '                - Number of degrees to rotate around
  22. '                - Whether all objects or only selected objects are rotated
  23. '                - Coordinate to revolve object around
  24. '                    (center of gravity would work, use Tools:Measure:Engineering Properties)
  25. '                - Number of steps (# of bitmaps to be exported from a 360 Degree rotation)
  26. '                - Type of rendering desired
  27. '                - Color of object to be rendered
  28. '
  29. 'Written by Dave Climie (U of W),   ⌐ 1995-96 Corel Corporation. All rights reserved.
  30. 'Modified by Dave Mckeen, ⌐ 1995-96 Corel Corporation. All rights reserved.
  31. '************************************************************************************************
  32. '************************************************************************************************
  33. '************************        DECLARATIONS       *********************************************
  34. '************************************************************************************************
  35. '************************************************************************************************
  36.  
  37. DECLARE SUB MoviePreview(DontZoom%,NumSteps%,x#,y#,z#,XorYorZ%,Ang#,RotatePart%)
  38. DECLARE SUB DoChangeColor(RotatePart%)        'Changes color of object if user wants.
  39.  
  40. DIM Angle$                'user enters an angle
  41. DIM Ang#                    'converted from a string to a number
  42. DIM i%
  43. DIM LastSlashPos%            'stores the position of the last backslash file name string
  44. DIM PosPeriod%
  45. DIM MovieName$
  46. DIM PathBitMap$            'Stores the pathname to which the bitmap files will be stored
  47. DIM NumSteps%                'Defines the # of bitmaps to be saved from a 360 Degree rotation
  48. DIM AngleEachStep#            'Defines angle drawing will rotate each time
  49. DIM StepArray$(8)            'Gives the user a choice for # of steps
  50. DIM StepNum%                'Defines the # in array , selection for # of steps (default 20)
  51. DIM ShadeNum%
  52. DIM ShadeType$(8)
  53. DIM ErrorVar%                'Used to make sure user enters a correct path name
  54. DIM XCoord$,YCoord$,ZCoord$    'Variables used to store point of rotation (string)
  55. DIM X#,Y#,Z#                'Variables used to store point of rotation (value)
  56. DIM XorYorZ%                'Stores 1 if user wants rotate around X-axis, etc...
  57. DIM DontZoom%                'false if the user wants to use zoom to fit for the view to render
  58.                         'If true, view zoom is not changed, but user must enter coords for 
  59.                         ' point of rotation.
  60.  
  61. Dim RotatePart%                ' false if the user wants to rotate all objects, true for selected only
  62. Dim NumOb&
  63.  
  64.  
  65. 'TLK IS THE ONE
  66. '************************************************************************************************
  67. '************************************************************************************************
  68.  
  69. REM         Warns the user he/she needs photoPaint
  70.  
  71.     
  72. BEGIN DIALOG TLK 302, 103, "Movie Maker"
  73.     TEXT  8, 6, 292, 18, "This script uses CorelCAD and Corel PHOTO-PAINT 7 to generate a movie file of a rotating model. Corel PHOTO-PAINT 7 must be installed on your system for the script to function."
  74.     TEXT  8, 32, 292, 16, "This script will generate a large movie file (*.AVI) and a single bitmap file (*.BMP), which will both be placed in a user-defined directory."
  75.     TEXT  9, 53, 157, 8, "Click NEXT to proceed or CANCEL to exit the Script."
  76.     PUSHBUTTON  207, 83, 44, 16, "Next >>>"
  77.     CANCELBUTTON  251, 83, 44, 16
  78.     TEXT  8, 65, 263, 11, "Please allow about 30 minutes for the completion of a movie."
  79. END DIALOG
  80.  
  81.     Return = DIALOG(TLK)        'Runs the dialog box'
  82.     If Return = 2 then STOP        ' If the user presses ESC, the script gets cancelled
  83.  
  84.     ShadeType(1) = "Hidden Line View"
  85.     ShadeType(2) = "Flat Shading"
  86.     ShadeType(3) = "Gouraud Shading"
  87.     ShadeType(4) = "Phong Shading"
  88.     ShadeType(5) = "Preview"
  89.     ShadeType(6) = "Full Render"
  90.     ShadeType(7) = "Ray Traced Preview"
  91.     ShadeType(8) = "Ray Traced Render"
  92.  
  93.     ShadeNum = 3
  94.  
  95.     StepArray(1) = 5
  96.     StepArray(2) = 10
  97.     StepArray(3) = 15
  98.     StepArray(4) = 20
  99.     StepArray(5) = 30
  100.     StepArray(6) = 40
  101.     StepArray(7) = 50    
  102.     StepArray(8) = 60
  103.  
  104.     StepNum = 4
  105.  
  106.     DontZoom = 0
  107.     XCoord$="0"
  108.     YCoord$="0"
  109.     ZCoord$="0"
  110.     XorYorZ = 2    
  111.     Angle = "360"
  112.     MovieName = "C:\"  
  113.     RotatePart = 0
  114.  
  115.  
  116. START:    
  117.  
  118. DONECOLORCHANGE:
  119. BEGIN DIALOG StartDia 346, 155, "Movie Information"
  120.     TEXTBOX  64, 6, 113, 13, MovieName$
  121.     TEXTBOX  80, 28, 26, 14, Angle$
  122.     OPTIONGROUP RotatePart%
  123.         OPTIONBUTTON  20, 43, 70, 9, "&Rotate all objects"
  124.         OPTIONBUTTON  20, 56, 95, 8, "&Rotate selected objects"
  125.     OPTIONGROUP DontZoom%
  126.         OPTIONBUTTON  13, 84, 158, 8, "&Static view (recommended) - Set rotation point"
  127.         OPTIONBUTTON  13, 112, 132, 11, "&Use fit to view for each frame"
  128.     TEXTBOX  33, 97, 22, 13, XCoord$
  129.     TEXTBOX  73, 97, 22, 13, YCoord$
  130.     TEXTBOX  111, 97, 22, 13, ZCoord$
  131.     OPTIONGROUP XorYorZ%
  132.         OPTIONBUTTON  132, 34, 40, 9, "&X-Axis"
  133.         OPTIONBUTTON  132, 44, 40, 10, "&Y-Axis"
  134.         OPTIONBUTTON  132, 56, 40, 9, "&Z-Axis"
  135.     LISTBOX  188, 14, 58, 74, StepArray$, StepNum%
  136.     LISTBOX  262, 14, 74, 74, ShadeType$, ShadeNum%
  137.     PUSHBUTTON  191, 108, 48, 14, "A&ll"
  138.     PUSHBUTTON  239, 108, 48, 14, "S&elected"
  139.     PUSHBUTTON  287, 108, 48, 14, "&Out"
  140.     PUSHBUTTON  139, 135, 48, 13, "&Change Color"
  141.     PUSHBUTTON  190, 135, 48, 13, "&Preview"
  142.     OKBUTTON  242, 135, 48, 13
  143.     CANCELBUTTON  293, 135, 48, 13
  144.     TEXT  6, 8, 56, 8, "&File name (*.AVI): "
  145.     TEXT  24, 99, 8, 8, "X:"
  146.     TEXT  63, 99, 8, 8, "Y:"
  147.     TEXT  102, 99, 6, 8, "Z:"
  148.     GROUPBOX  124, 20, 52, 51, "Rotation axis"
  149.     GROUPBOX  5, 73, 172, 56, "Rotation Origin"
  150.     TEXT  16, 31, 60, 8, "&Angle of rotation:"
  151.     GROUPBOX  6, 20, 114, 51, "Rotation"
  152.     GROUPBOX  182, 3, 70, 91, "Number of frames"
  153.     GROUPBOX  257, 3, 84, 91, "Rendering type"
  154.     GROUPBOX  182, 97, 159, 32, "Zoom"
  155. END DIALOG
  156.  
  157.     return = DIALOG(StartDia)    'Runs the dialog box
  158.     If return = 2 then stop        'If the user presses ESC, cancels the script
  159.     If return = 6 then 
  160.         DoChangeColor (RotatePart)
  161.         Goto DoneColorChange    
  162.     ENDIF
  163.  
  164.     X=VAL(XCoord)
  165.     Y=VAL(YCoord)
  166.     Z=VAL(ZCoord)
  167.  
  168.     If (VAL(Angle) = 0) then 
  169.             ErrorVar = True
  170.         else Ang = Val(Angle)
  171.     endif
  172.     
  173.     NumSteps = VAL(StepArray(StepNum))
  174.     AngleEachStep = Ang/NumSteps
  175. WithObject "CorelCAD.Automation.1"    
  176.     If return = 3 then 
  177.         .ZoomToAll
  178.         goto start    
  179.     endif
  180.     If return = 4 then 
  181.         .ZoomToSelected
  182.         goto start
  183.     endif
  184.     If return = 5 then 
  185.         .ZoomOut                
  186.         goto start
  187.     endif
  188. END Withobject
  189.     If return = 7 then
  190.         MoviePreview DontZoom,NumSteps,X,Y,Z,XorYorZ,Ang,RotatePart
  191.         Goto Start
  192.     ENDIF
  193.  
  194.     ErrorVar = False    
  195.  
  196.     MovieName = LTRIM(MovieName)
  197.     MovieName = RTRIM(MovieName)
  198.     MovieName = UCASE(MovieName)
  199.     If ((ASC(LEFT(MovieName,1)) < ASC("A")) OR (ASC(LEFT(MovieName,1))) > ASC("Z")) then ErrorVar = True
  200.     If NOT(ASC(MID(MovieName,2,1))=ASC(":")) then ErrorVar = True
  201.     If NOT(ASC(MID(MovieName,3,1))=ASC("\")) then ErrorVar = True 
  202.     If (ASC(Right(MovieName,1)) = ASC("\")) then ErrorVar = True
  203.     If NOT((Right(MovieName,4))=".AVI") then MovieName=MovieName & ".AVI"    
  204.     
  205.     PosPeriod = 0
  206.     If ErrorVar=False then
  207.         For i%=1 to Len(MovieName)
  208.             If Mid(MovieName,i,1)="\" then LastSlashPos=i
  209.             If Mid(MovieName,i,1)="." then
  210.                 if posPeriod <> 0 then
  211.                         ErrorVar=true                'Error if we have more than one period
  212.                     else PosPeriod=i                'stores the position of the period in PosPeriod
  213.                 endif
  214.             endif
  215.         Next i
  216.         PathBitMap = LEFT(MovieName,LastSlashPos)
  217.     ENDIF
  218.  
  219.     If (PosPeriod <>0) and UCASE(right(MovieName,4)) <> ".AVI" then ErrorVar = True
  220.     REM ErrorVar = FALSE            '*** TAKE OUT REM IF YOU WANT TO OVERIDE ERROR TRAP ***
  221.  
  222.     If ErrorVar = true then
  223.  
  224. BEGIN DIALOG ErrorVarDia 296, 94, "Error"
  225.     TEXT  22, 8, 188, 19, "Corel Script has detected that your pathname entry is invalid. Please verify, and change accordingly."
  226.     GROUPBOX  22, 33, 143, 43, "Examples  "
  227.     OKBUTTON  184, 52, 40, 15
  228.     CANCELBUTTON  226, 52, 40, 15
  229.     TEXT  32, 46, 48, 8, "c:\movie.avi"
  230.     TEXT  97, 46, 48, 8, "D:\Widget"
  231.     TEXT  34, 61, 112, 8, "c:\Corel\CAD\Rotating Coil.AVI"
  232. END DIALOG
  233.  
  234.         ret = DIALOG(ErrorVarDia)
  235.         If ret = 2 then STOP
  236.  
  237.         MovieName = "C:\"   
  238.         Angle = "360"
  239.         Goto Start
  240.     ENDIF
  241.  
  242.     WITHOBJECT "CorelPhotoPaint.automation.7"
  243.         .setvisible -1
  244.         .FileNew 1000,700,1,85,85,0,-1,1,0,0,0,0,255,255,255,0
  245.     END WITHOBJECT
  246. WITHOBJECT "CorelCAD.Automation.1"
  247. If RotatePart = 1 then
  248.     Total& = .gettotalnumberobjects()
  249.     .Group 
  250.     .applyName "Rotating These"
  251.     NumOb = 2
  252.     NumOb = .CountObject ("Rotating These")
  253.     If (NumOb = 0) then
  254.         MESSAGE "You have no objects selected. Objects must be selected for partial rotations. Try again."
  255.         stop
  256.     endif
  257. endif    
  258.  
  259. For i%=1 to NumSteps 
  260.  
  261.  
  262.         .setvisible -1
  263.  
  264.         If ShadeNum = 1 then
  265.                 .HideEntireView TRUE,False,False,False
  266.             Else
  267.                 .ShadeEntireView TRUE, FALSE, ShadeNum-2, FALSE
  268.         Endif
  269.         .FileExport PathBitMap & "BitMapForMovie.BMP",769,1000,700, 85, 85, 4
  270.         If RotatePart = 0 then
  271.                 .SelectAll
  272.             else
  273.                 For j%=1 to Total                
  274.                     
  275.                     .selectnext
  276.                     CurrentName$ = .GetName()
  277.                     If CurrentName = "Rotating These" then goto blah
  278.  
  279.             next j
  280.             blah:
  281.                     .selectnext
  282.                     .selectprevious    
  283.         endif            
  284.  
  285.         Select Case XorYorZ
  286.             Case 0
  287.                 .RotateXaxis 0,AngleEachStep,X,Y,Z
  288.             Case 1
  289.                 .RotateYaxis 0,AngleEachStep,X,Y,Z            
  290.             Case 2
  291.                 .RotateZaxis 0,AngleEachStep,X,Y,Z
  292.         End Select    
  293.         If DontZoom = 1 then .ZoomToAll
  294.     END WITHOBJECT
  295.  
  296.     WITHOBJECT "CorelPhotoPaint.automation.7"
  297.             .setvisible -1
  298.             .MovieInsertFile PathBitMap & "BitMapForMovie.BMP",0,0,0,0,0,i,0
  299.     END WITHOBJECT
  300. Next i        
  301.  
  302. WITHOBJECT "CorelCAD.Automation.1"
  303.  
  304.         If RotatePart = 0 then
  305.                 .SelectAll
  306.             else
  307.                 For j%=1 to Total                
  308.                     .selectnext
  309.                     CurrentName$ = .GetName()
  310.                     If CurrentName = "Rotating These" then goto blah2
  311.                 next j
  312.             blah2:
  313.             .selectnext
  314.             .selectprevious
  315.             .ungroup 
  316.         endif            
  317.  
  318.         Select Case XorYorZ
  319.             Case 0
  320.                 .RotateXaxis 0,360-Ang,X,Y,Z
  321.             Case 1
  322.                 .RotateYaxis 0,360-Ang,X,Y,Z            
  323.             Case 2
  324.                 .RotateZaxis 0,360-Ang,X,Y,Z
  325.         End Select
  326.             .wireframe
  327. END WITHOBJECT
  328.  
  329. WITHOBJECT "CorelPhotoPaint.automation.7"
  330.  
  331.     .MovieDeleteFrame 1,1
  332.  
  333.      For j%=1 to NumSteps
  334.         .MovieGotoFrame j
  335.     '    .ImageConvert 4, 2, 100, 0, 0, 0, 0
  336.     Next j
  337.     .MovieRewind
  338.  
  339.     .fileSave MovieName,1536,0    'This has no compression, compression didnt seem to change file size
  340. END WITHOBJECT                    '  ( i tried all settings)
  341.  
  342. '************************************************************************************************
  343. '************************************************************************************************
  344. '************************************************************************************************
  345. SUB MoviePreview(DontZoom%,NumSteps%,X#,Y#,Z#,XorYorZ%,Ang#,RotatePart%)
  346.  
  347. DIM AngleEach#
  348. DIM NumObj&
  349.  
  350.     AngleEach = Ang/NumSteps
  351. WithObject "CorelCAD.Automation.1"
  352.  
  353.     If RotatePart = 0 then
  354.             .SelectAll
  355.         else
  356.             .group
  357.             .ApplyName "Rotating These"            
  358.             NumObj = .countObject ("Rotating These")
  359.             If NumObj = 0 then
  360.                 MESSAGE "You have no objects selected. Objects must be selected for partial rotations. Try again."
  361.                 stop
  362.             endif
  363.     endif            
  364.     For i%=1 to NumSteps 
  365.         Select Case XorYorZ
  366.             Case 0
  367.                 .RotateXaxis 0,AngleEach,X,Y,Z
  368.             Case 1
  369.                 .RotateYaxis 0,AngleEach,X,Y,Z            
  370.             Case 2
  371.                 .RotateZaxis 0,AngleEach,X,Y,Z
  372.         End Select    
  373.         If DontZoom = 1 then .zoomToAll
  374.     Next i
  375.  
  376.         Select Case XorYorZ
  377.             Case 0
  378.                 .RotateXaxis 0,360-Ang,X,Y,Z
  379.             Case 1
  380.                 .RotateYaxis 0,360-Ang,X,Y,Z            
  381.             Case 2
  382.                 .RotateZaxis 0,360-Ang,X,Y,Z
  383.         End Select    
  384.  
  385.     If RotatePart = 0 then .UnGroup ' *********************MARKER************************************************    
  386.     If RotatePart = 1 then .UnGroup
  387.  
  388. End WithObject
  389. END SUB
  390. '************************************************************************************************
  391. '************************************************************************************************
  392. '************************************************************************************************
  393.  
  394. SUB DoChangeColor(RotatePart%)
  395.  
  396. DIM ColorChoice%
  397. DIM Color$(7)
  398. DIM Red%,Green%,Blue%
  399.  
  400. ColorChoice = 1
  401. Color(1)="Red"
  402. Color(2)="Orange"
  403. Color(3)="Yellow"
  404. Color(4)="Green"
  405. Color(5)="Blue"
  406. Color(6)="Indigo"
  407. Color(7) ="Violet"
  408.  
  409. BEGIN DIALOG ColorDlg 97, 115, "CHANGE COLOR"
  410.     GROUPBOX  4, 6, 83, 85, "Colors Available"
  411.     LISTBOX  15, 20, 62, 67, Color$, ColorChoice%
  412.     OKBUTTON  14, 96, 34, 14
  413.     CANCELBUTTON  49, 96, 34, 14
  414. END DIALOG
  415.  
  416.  
  417.     RET% = DIALOG(ColorDlg)
  418.     If RET = 2 then goto Done:
  419.  
  420. WithObject "CorelCAD.Automation.1"
  421.     
  422.     If RotatePart = 0 then .SelectAll    
  423.  
  424.     Select Case ColorChoice
  425.         Case 1
  426.             .ChangeColor 255, 0, 51
  427.         Case 2
  428.             .ChangeColor 255, 153, 0
  429.         Case 3
  430.             .ChangeColor 255, 255, 0
  431.         Case 4
  432.             .ChangeColor 51, 255, 0
  433.         Case 5
  434.             .ChangeColor 0, 0, 255
  435.         Case 6    
  436.             .ChangeColor 0, 255, 255
  437.         Case 7
  438.             .ChangeColor 51, 0, 102
  439.     END SELECT
  440. End WithObject
  441.  
  442. DONE:
  443. END SUB
  444.  
  445.  
  446. '****************************************************************************************************************
  447. '****************************************************************************************************************
  448. '****************************************************************************************************************
  449. '****************************************************************************************************************
  450.  
  451.