home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 20 / AACD20.BIN / AACD / Graphics / PerfectPaint / rexx / bridge / Anim_Brush.rx next >
Text File  |  2000-08-20  |  7KB  |  377 lines

  1. /*
  2.     Arexx Text Script
  3. */
  4.  
  5.     call addlib("rexxmathlib.library", 5, -30, 0)
  6.  
  7.     options results
  8.   parse ARG Port x y b
  9.     ADDRESS value Port
  10.  
  11.     pp_AvoidRefresh
  12.  
  13.     pp_CountFrames
  14.     Total_Frame=result
  15.     Start_Frame=1
  16.     End_Frame=Total_Frame
  17.     if End_Frame<2 then do
  18.         pp_Warn 'Make*an*Anim*first.'
  19.         pp_PermitRefresh
  20.         EXIT
  21.     end
  22.  
  23.     pp_GetDepth
  24.     Dp=result
  25.  
  26.     pp_GetWidthB
  27.     Bw=result
  28.  
  29.     pp_GetHeightB
  30.     Bh=result
  31.  
  32.     if Bw=0|Bh=0 then DO
  33.         pp_Warn 'Take*a*Brush*first.'
  34.         pp_PermitRefresh
  35.         EXIT        
  36.     END
  37.  
  38.     Start_Shearx=0
  39.     Start_Sheary=0
  40.     Start_rotx=0
  41.     Start_roty=0
  42.     Start_rotz=0
  43.     Start_size=100
  44.     Start_Opacity=100
  45.  
  46.     End_Shearx=0
  47.     End_Sheary=0
  48.     End_rotx=0
  49.     End_roty=0
  50.     End_rotz=0
  51.     End_size=100
  52.     End_Opacity=100
  53.  
  54.     R=-1
  55.  
  56.     ADDRESS value Port
  57.  
  58.     Path=0;Type=0
  59.  
  60. DO UNTIL R>-1
  61.  
  62.     D.2='*Frame*(*#'||Start_Frame||'->#'||End_Frame||'*)*'
  63.  
  64.     D.3='*Shear*X*(*'||Start_Shearx||'*->*'||End_Shearx||'*)*'
  65.     D.4='*Shear*Y*(*'||Start_Sheary||'*->*'||End_sheary||'*)*'
  66.     D.5='*Rot*X*(*'||Start_rotx||'*->*'||End_rotx||'*)*'
  67.     D.6='*Rot*Y*(*'||Start_roty||'*->*'||End_roty||'*)*'
  68.     D.7='*Rot*Z*(*'||Start_rotz||'*->*'||End_rotz||'*)*'
  69.  
  70.     D.8='*Size*%*(*'||Start_size||'*->*'||End_size||'*)*'
  71.     D.9='*Opacity*(*'||Start_Opacity||'*->*'||End_Opacity||'*)*'
  72.  
  73.     pp_DialogInit 250 270 "*MOVE*" 10
  74.     pp_Cycle 0 70 5 100 16 "Path" 1 "None|Left|Right|Up|Down" Path
  75.     pp_Cycle 1 70 25 100 16 "Type" 1 "In|Out" Type
  76.         j=55
  77.         DO i=2 to 9
  78.             pp_Button i 20 j 200 16 D.i
  79.             j=j+20
  80.             if i=2 then DO;j=j+10;END
  81.             if i=7 then DO;j=j+10;END
  82.         END
  83.     pp_Dialog
  84.     R=result
  85.  
  86.     pp_GetDialog 0
  87.     Path=result
  88.  
  89.     pp_GetDialog 1
  90.     Type=result
  91.  
  92.     if R=-9 then DO
  93.         pp_DialogInit 150 80 "*OPACITY*" 2
  94.             pp_Integer 0 60 5 50 16 "Start" 1 Start_Opacity
  95.             pp_Integer 1 60 25 50 16 "End" 1 End_Opacity
  96.         pp_Dialog
  97.         rc=result
  98.         IF rc=1 then DO
  99.             pp_GetDialog 0
  100.             Start_Opacity=result
  101.             pp_GetDialog 1
  102.             End_Opacity=result        
  103.         END            
  104.     END
  105.  
  106.     if R=-8 then DO
  107.         pp_DialogInit 150 80 "*SIZE*%*" 2
  108.             pp_Integer 0 60 5 50 16 "Start" 1 Start_size
  109.             pp_Integer 1 60 25 50 16 "End" 1 End_size
  110.         pp_Dialog
  111.         rc=result
  112.         IF rc=1 then DO
  113.             pp_GetDialog 0
  114.             Start_size=result
  115.             pp_GetDialog 1
  116.             End_size=result    
  117.         END            
  118.     END
  119.  
  120.     if R=-5 then DO
  121.         pp_DialogInit 150 80 "*ROT*X*" 2
  122.             pp_Integer 0 60 5 50 16 "Start" 1 Start_rotx
  123.             pp_Integer 1 60 25 50 16 "End" 1 End_rotx
  124.         pp_Dialog
  125.         rc=result
  126.         IF rc=1 then DO
  127.             pp_GetDialog 0
  128.             Start_rotx=result
  129.             pp_GetDialog 1
  130.             End_rotx=result        
  131.         END            
  132.     END
  133.  
  134.     if R=-6 then DO
  135.         pp_DialogInit 150 80 "*ROT*Y*" 2
  136.             pp_Integer 0 60 5 50 16 "Start" 1 Start_roty
  137.             pp_Integer 1 60 25 50 16 "End" 1 End_roty
  138.         pp_Dialog
  139.         rc=result
  140.         IF rc=1 then DO
  141.             pp_GetDialog 0
  142.             Start_roty=result
  143.             pp_GetDialog 1
  144.             End_roty=result        
  145.         END            
  146.     END
  147.  
  148.     if R=-7 then DO
  149.         pp_DialogInit 150 80 "*ROT*Z*" 2
  150.             pp_Integer 0 60 5 50 16 "Start" 1 Start_rotz
  151.             pp_Integer 1 60 25 50 16 "End" 1 End_rotz
  152.         pp_Dialog
  153.         rc=result
  154.         IF rc=1 then DO
  155.             pp_GetDialog 0
  156.             Start_rotz=result
  157.             pp_GetDialog 1
  158.             End_rotz=result        
  159.         END            
  160.     END
  161.  
  162.  
  163.     if R=-2 then DO
  164.         pp_DialogInit 150 80 "*FRAME*" 2
  165.             pp_Integer 0 60 5 50 16 "Start" 1 Start_Frame
  166.             pp_Integer 1 60 25 50 16 "End" 1 End_Frame
  167.         pp_Dialog
  168.         rc=result
  169.         IF rc=1 then DO
  170.             pp_GetDialog 0
  171.             Start_Frame=result
  172.  
  173.             pp_GetDialog 1
  174.             End_Frame=result
  175.  
  176.             IF End_Frame>Total_Frame THEN DO
  177.                 End_Frame=Total_Frame
  178.             END
  179.  
  180.             IF Start_Frame>End_Frame THEN DO
  181.                 Start_Frame=1
  182.             END
  183.  
  184.         END            
  185.     END
  186.  
  187.     if R=-3 then DO
  188.         pp_DialogInit 150 80 "*SHEAR*X*" 2
  189.             pp_Integer 0 60 5 50 16 "Start" 1 Start_Shearx
  190.             pp_Integer 1 60 25 50 16 "End" 1 End_Shearx
  191.         pp_Dialog
  192.         rc=result
  193.         IF rc=1 then DO
  194.             pp_GetDialog 0
  195.             Start_Shearx=result
  196.             pp_GetDialog 1
  197.             End_Shearx=result        
  198.         END            
  199.     END
  200.  
  201.     if R=-4 then DO
  202.         pp_DialogInit 150 80 "*SHEAR*Y*" 2
  203.             pp_Integer 0 60 5 50 16 "Start" 1 Start_Sheary
  204.             pp_Integer 1 60 25 50 16 "End" 1 End_Sheary
  205.         pp_Dialog
  206.         rc=result
  207.         IF rc=1 then DO
  208.             pp_GetDialog 0
  209.             Start_Sheary=result
  210.             pp_GetDialog 1
  211.             End_Sheary=result        
  212.         END            
  213.     END
  214.  
  215. END
  216.  
  217.     if R=0 then DO
  218.         pp_PermitRefresh
  219.         EXIT
  220.     END    
  221.     
  222.     ADDRESS COMMAND
  223.  
  224.     file='ram:t/pp_Bmove'
  225.  
  226.     IF EXISTS(file) THEN DO
  227.         'delete >nil: ram:t/pp_Bmove'
  228.     END
  229.  
  230.     IF OPEN('c',file,'W') then DO
  231.  
  232.         CALL WRITELN('c',Start_rotx)
  233.         CALL WRITELN('c',End_rotx)
  234.  
  235.         CALL WRITELN('c',Start_roty)
  236.         CALL WRITELN('c',End_roty)
  237.  
  238.         CALL WRITELN('c',Start_rotz)
  239.         CALL WRITELN('c',End_rotz)
  240.  
  241.         CALL WRITELN('c',Start_Shearx)
  242.         CALL WRITELN('c',End_Shearx)
  243.  
  244.         CALL WRITELN('c',Start_Sheary)
  245.         CALL WRITELN('c',End_Sheary)
  246.  
  247.         CALL WRITELN('c',Start_Size)
  248.         CALL WRITELN('c',End_Size)
  249.  
  250.         CALL WRITELN('c',Start_Opacity)
  251.         CALL WRITELN('c',End_Opacity)
  252.  
  253.         CALL CLOSE('c')
  254.     END
  255.  
  256.     ADDRESS value Port
  257.  
  258.     pp_GetWidth
  259.     W=result
  260.  
  261.     pp_GetHeight
  262.     H=result
  263.  
  264.     HX=Bw/2
  265.     HY=Bh/2
  266.  
  267.     Start_X=x
  268.     End_X=x
  269.     Start_Y=y
  270.     End_Y=y
  271.  
  272.     IF Path=1 then DO
  273.         IF Type=0 then DO
  274.             Start_X=HX*-1
  275.         END
  276.         ELSE
  277.         DO
  278.             End_X=HX*-1
  279.         END
  280.     END
  281.  
  282.     IF Path=2 then DO
  283.         IF Type=0 then DO
  284.             Start_X=W+HX
  285.         END
  286.         ELSE
  287.         DO
  288.             End_X=W+HX
  289.         END
  290.     END
  291.  
  292.     IF Path=3 then DO
  293.         IF Type=0 then DO
  294.             Start_Y=HY*-1
  295.         END
  296.         ELSE
  297.         DO
  298.             End_Y=HY*-1
  299.         END
  300.     END
  301.  
  302.     IF Path=4 then DO
  303.         IF Type=0 then DO
  304.             Start_Y=H+HY
  305.         END
  306.         ELSE
  307.         DO
  308.             End_Y=H+HY
  309.         END
  310.     END
  311.  
  312.     step=(End_Frame-Start_Frame)
  313.  
  314.     Step_rotx=(End_rotx-Start_rotx)/Step
  315.     Step_roty=(End_roty-Start_roty)/Step
  316.     Step_rotz=(End_rotz-Start_rotz)/Step
  317.     Step_Size=(End_Size-Start_Size)/Step
  318.     Step_Shearx=(End_Shearx-Start_Shearx)/Step
  319.     Step_Sheary=(End_Sheary-Start_Sheary)/Step
  320.     Step_Opacity=(End_Opacity-Start_Opacity)/Step
  321.  
  322.     Step_X=(End_X-Start_X)/Step
  323.     Step_Y=(End_Y-Start_Y)/Step
  324.     
  325.  
  326.     DO i=Start_Frame to End_Frame
  327.  
  328.         pp_GotoFrame i
  329.  
  330.         rotx=trunc(Start_rotx+Step_rotx*(i-Start_Frame)+0.5,0)
  331.         roty=trunc(Start_roty+Step_roty*(i-Start_Frame)+0.5,0)
  332.         rotz=trunc(Start_rotz+Step_rotz*(i-Start_Frame)+0.5,0)
  333.         Shearx=trunc(Start_Shearx+Step_Shearx*(i-Start_Frame)+0.5,0)
  334.         Sheary=trunc(Start_Sheary+Step_Sheary*(i-Start_Frame)+0.5,0)
  335.         Size=trunc(Start_Size+Step_Size*(i-Start_Frame)+0.5,0)
  336.         Opacity=trunc(Start_Opacity+Step_Opacity*(i-Start_Frame)+0.5,0)
  337.         X=trunc(Start_X+Step_X*(i-Start_Frame)+0.5,0)
  338.         Y=trunc(Start_Y+Step_Y*(i-Start_Frame)+0.5,0)
  339.         
  340.         pp_BrushOpacity Opacity
  341.  
  342.         Erxy=0
  343.         IF rotx=90|rotx=-90|rotx=270|rotx=-270|rotx=450|rotx=-450 then DO
  344.             Erxy=1
  345.         END
  346.         IF roty=90|roty=-90|roty=270|roty=-270|roty=450|roty=-450 then DO
  347.             Erxy=1
  348.         END
  349.  
  350.         IF Opacity>0 & Erxy=0 then DO    
  351.  
  352.             IF Size~=100 then DO
  353.                 SX=trunc((Bw*Size)/100+0.5,0)
  354.                 SY=trunc((Bh*Size)/100+0.5,0)
  355.                 pp_ScaleBrush SX SY
  356.             END
  357.  
  358.             IF rotx~=0|roty~=0|rotz~=0 then DO
  359.                 pp_BrushEffect 0 rotx roty rotz 1
  360.             END
  361.  
  362.             IF Shearx~=0 then DO
  363.                 pp_BrushEffect 1 Shearx 0 0 0
  364.             END
  365.  
  366.             IF Sheary~=0 then DO
  367.                 pp_BrushEffect 2 0 Sheary 0 0
  368.             END
  369.  
  370.             pp_Plot X Y
  371.         END
  372.         pp_RestoreBrush
  373.     END
  374.  
  375.     pp_GotoFrame Start_Frame
  376.     pp_PermitRefresh
  377.