Results 1 to 10 of 14

Thread: Slideshow script

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Feb 2010
    Location
    Nevada
    Posts
    139

    Slideshow script

    Here's a script I dorked out for creating a slide show from the layers in an ArtRage file.

    You can specify for how long to show each picture, and how long it takes to transition between pictures (so you could set up reference pictures for 3-minute sketching, for example, or make a doofy animation).

    It will show Sticker and Text layers, but ignores hidden layers.

    I've tried it with up to 100 layers (now that was a big file) with a smallish jpg image imported to each layer. It didn't eat any layers or anything when I tested it, but please do use with caution

    Please let me know if you encounter any problems or have any suggestions!

    Update: Now includes options to loop and randomize!

    Code:
    //===========================================================================
    //===========================================================================
    //                            ArtRage Script File.
    //===========================================================================
    //===========================================================================
    
    
    //===========================================================================
    // Version Block - Script version and ArtRage version:
    //===========================================================================
    
    <Version>
        ArtRage Version: ArtRage 3 Studio Pro
        ArtRage Build: 3.5.1
        Professional Edition: No
        Script Version: 1
    </Version>
    
    
    //===========================================================================
    // Header block - Info about the painting/person who generated this script:
    //===========================================================================
    
    <Header>
        // === Project data
        Painting Name: "SlideShow"
        Painting Width: 900
        Painting Height: 321
        Painting DPI: 299
        Mask Edge Map Width: 954
        Mask Edge Map Height: 862
        // === Author data
        Author Name: "Ti-Chen Feng"
        Script Name: "Slide Show"
        Comment: "Shows each layer of an ArtRage file one at a time, as in a slideshow."
        Script Type: ""
        Script Feature Flags: 0
    </Header>
    
    
    
    //===========================================================================
    // Script data follows:
    //===========================================================================
    
    
    
    //Function: fade old layer out and new layer in
    void Transition( int nStepSize, int nOldLayer, int nNewLayer )  {
      int i = 0
      real rOpacity = 0.0
    
      if ( nStepSize==11 ) nStepSize=100
      for ( i=nStepSize; i<100; i+=nStepSize )  {
        rOpacity = i/100.0
        Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { nNewLayer, rOpacity }
        Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { nOldLayer, 1.0-rOpacity }
      }
    
      //Ensure that final opacities are 0% and 100%
      Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { nNewLayer, 1 }
      Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { nOldLayer, 0 }
    }
    
    
    
    //Function: randomize slide array. Remember to exclude the Blank slide and only shuffle elements [1] through [nSlideCountF]
    intarray RandomizeSlides( intarray naSlidesF, int nSlideCountF )  {
      int i = 0
      int nRandom = 0
      int nHolder = 0
    
      Randomize()
      NoteBox("Randomizing... this may take a while, depending on the number of slides.", 270, 50, 100, 100, 0, 0.5, 0)
      for( i=nSlideCountF; i>2; i-- )  {
        nRandom = Random(1, i)
        nHolder = naSlidesF[nRandom]
        naSlidesF[nRandom] = naSlidesF[i]
        naSlidesF[i] = nHolder
    //    MessageBox("%%nSlideCountF slides, i=%%i, random number=%%nRandom")
      }
      DismissNoteBox(0)
      return(naSlidesF)
    }
    
    
    //Function: remove the background layer that was added, restore the pods and panels
    void Cleanup()  {
      Wait: 0   EvType: Command   CommandID: CID_DeleteSpecificLayer   ParamType: uint32   Value: { 0 }
      Wait: 0   EvType: Command   CommandID: CID_SetClearCanvas   ParamType: flag   Value: { false }
      exit
    }
    
    
    
    <Events>
    
    flag fRandomize = NO
    int i = 0
    int j = 0
    int nTransition = 5
    int nLayerID = 0
    int nLayerCount = 0
    int nReps = 0
    int nSlideCount = 0
    intarray naSlides = { 0 }
    real rPause = 10.0
    
    
    
    //Visual appeal: hide pods and panels, add a bottom background layer, and make the background opaque
    Wait: 0   EvType: Command   CommandID: CID_SetClearCanvas   ParamType: flag   Value: { true }
    Wait: 0   EvType: Command   CommandID: Add New Layer
    nLayerID = CurrentLayerIndex()
    Wait: 0   EvType: Command   CommandID: CID_MoveSpecificLayer   ParamType: LayerTwoOp   Value: { nLayerID, 0 }
    Wait: 0   EvType: Command   CommandID: LayerName   Idx: 0   Name: "Blank"
    //All this work to make a white background!
    Wait: 0   EvType: Command   CommandID: CID_SelectSpecificLayer   ParamType: uint32   Value: { 0 }
    Wait: 0   EvType: Command   CommandID: SetForeColour   ParamType: Pixel   Value: { 0x0FFFFFFFF }
    Wait: 0   EvType: Command   CommandID: CID_ToolSelect   ParamType: ToolID   Value: { 4921 (Fill Tool ) }
    Wait: 0   EvType: Command   CommandID: SetToolProperty   ParamType: ToolProp   Value: { 0x0B2D05E65 (Opacity), 1 }
    Wait: 0   EvType: Command   CommandID: SetToolProperty   ParamType: ToolProp   Value: { 0x0B2D05E57 (Spread), 0 }
    Wait: 0   EvType: Command   CommandID: SetToolProperty   ParamType: ToolProp   Value: { 0x0B2D05E47 (Blend Mode), 0 }
    Wait: 0   EvType: Command   CommandID: SetToolProperty   ParamType: ToolProp   Value: { 0x0B2D05E58 (Antialias Edge ), 0 }
    Wait: 0   EvType: Command   CommandID: SetToolProperty   ParamType: ToolProp   Value: { 0x0B2D05E44 (Single Layer), 1 }
    <StrokeEvent>
      <StrokeHeader>
        <EventPt> Wait: 0 Loc: (1, 1) Pr: 1 Ti: 1 Ro: 0 Rv: NO Iv: NO </EventPt>
        <Recorded> No </Recorded>
      </StrokeHeader>
      Wait: 0   Loc: (1, 1) Pr: 1 Ti: 1 Ro: 0 Rv: NO Iv: NO
    </StrokeEvent>
    
    
    
    //Initalization: (group-type layers and hidden layers do not count as slides)
    //  set opacity of slides to 0%, index slide IDs to an array (naSlides) for easy reference
    NoteBox("Initializing... this may take a while, depending on the number of layers.", 270, 50, 100, 100, 0, 0.5, 0)
    nLayerCount = LayerCount()
    for ( i=1; i<nLayerCount; i++ )  {
      if ( (LayerType(i)==0 || LayerType(i)>3) && LayerVisible(i) ) { 
        if ( LayerOpacity(i) > 0 ) {
          Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { i, 0 }
        }
        naSlides.Add(i)
      }
    //  Wait: 0   EvType: Command   CommandID: CID_SelectSpecificLayer       ParamType: uint32      Value: { i }
    }
    DismissNoteBox(0)
    
    
    
    //If there is only 1 slide, what's the point? Exit the script.
    nSlideCount = naSlides.GetSize()
    if ( nSlideCount < 3 )  {
      MessageBox("It's not a very good slide show with only one picture!\nImport images to more layers.")
      Cleanup()
      //The script should never see this 'exit', but it's in here just to be sure!
      exit
    }
    
    
    
    //Ask for and verify user input
    InputBox("Pause time on each slide (0.0-300.0): $$rPause\nTransition time between slides (0-10): $$nTransition\nNumber of times to repeat the show: $$nReps\nRandomize slides? $$fRandomize")
    if (rPause<0)  rPause=0; if (rPause>300) rPause=300
    if (nTransition<0)  nTransition=0; if (nTransition>10) nTransition=10
    if (nReps<0) nReps=0
    
    
    
    //Display current slide for 'rPause' time, then call the Transition function to display next slide
    Wait: 0   EvType: Command   CommandID: CID_SetSpecificLayerOpacity   ParamType: LayerProp   Value: { naSlides[1], 1 }
    for ( i=0; i<=nReps; i++ )  {
      if(fRandomize)  {  naSlides = RandomizeSlides(naSlides, nSlideCount-1)  }     //exclude the Blank slide
      for ( j=1; j<nSlideCount-1; j++ )  {
        Wait: (rPause)
        Transition( 11-nTransition, naSlides[j], naSlides[j+1] )
      }
      //Special treatment needed for looping back to the beginning
      Wait: (rPause)
      Transition( 11-nTransition, naSlides[j], naSlides[1] )
    }
    
    
    
    Cleanup()
    
    //110727
    Attached Files Attached Files
    Last edited by terrygillooly; 07-27-2011 at 08:12 PM. Reason: fix code
    Cat Boxes, a web comic

  2. #2
    Join Date
    Mar 2006
    Location
    Ambient Design
    Posts
    3,875
    Ooo, nice idea.
    AndyRage's mantra for graphics engine code:
    "Sure - how hard can it be?"

  3. #3
    Join Date
    May 2009
    Location
    3438 ft above sea level
    Posts
    2,950
    Great Job Terry
    Hehehe to 'dorked' out

    This would be a great asset to anyone wanting to show off a painting in different stages, Placing each stage on a new layer.
    "I paint because I love to cut mats" (Arthur Alexander)

  4. #4
    Join Date
    Feb 2010
    Location
    Nevada
    Posts
    139
    Thanks guys!

    I added looping and randomizing and fixed a couple of errors (no doubt introducing more in the process).
    Cat Boxes, a web comic

  5. #5
    Join Date
    Jul 2007
    Posts
    27
    I need to learn to check the forums first. This may be exactly what I am looking for... If I can figure out how to use the script. lol

    Right I have no idea how to run the scripts. I use play script and it pops up something it goes then nothing. Any info somewhere on actually using them.

    Normally recorded scripts play fine just none of these tools from this part of the forum.

    Cheers

    Mike
    Last edited by mykyl1966; 07-26-2011 at 10:55 PM.

  6. #6
    Join Date
    Mar 2006
    Posts
    3,810
    After copying the script text into a text editor, make sure to save it as a UTF 16 format file ( with extension .arscript ). Check this post for info:

    http://www2.ambientdesign.com/forums...ad.php?t=35944

    If you still have problems, let us know.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •