Search code examples
line-plotdm-script

How do I set LinePlot line thickness and style? (DigitalMicrograph script)


The scripting help documentation of DigitalMicrograph offers an example for setting LinePlot styles with respect of colour and fill (see example script below).

However, the ImageDisplay menu for LinePlots also allows setting line styles (dotted, dashed,...) line thickness and transparency. Can somebody give an example on how to set these values, please?

// create image and image document
ImageDocument imageDoc = CreateImageDocument( "New ImageDocument" ) 
number width = 256
number height = 5
image img := RealImage("Line Plot Test", 4, width, height )
img = sin( irow + icol/100 )

// add LinePlotImageDisplay to ImageDocument
ImageDisplay imgdsp = imageDoc.ImageDocumentAddImageDisplay( img, 3 )
imgdsp.LinePlotImageDisplaySetContrastLimits( -1.1, 1.1 )
imgdsp.LinePlotImageDisplaySetDoAutoSurvey( 0, 0 )

// draw fill and line for slice 0
imgdsp.LinePlotImageDisplaySetSliceDrawingStyle(0, 3)
// set line color to red
imgdsp.LinePlotImageDisplaySetSliceComponentColor(0, 0, 1, 0, 0)
// set fill color to yellow
imgdsp.LinePlotImageDisplaySetSliceComponentColor(0, 1, 0.9, 0.9, 0)

// draw fill for slice 1 and 2
imgdsp.LinePlotImageDisplaySetSliceDrawingStyle(1, 2)
imgdsp.LinePlotImageDisplaySetSliceDrawingStyle(2, 2)

// draw line for slice 3 and 4
imgdsp.LinePlotImageDisplaySetSliceDrawingStyle(3, 1)
imgdsp.LinePlotImageDisplaySetSliceDrawingStyle(4, 1)

imageDoc.ImageDocumentShow()

Solution

  • The commands you are looking for are:

    • void LinePlotImageDisplaySetSliceLineThickness( LinePlotImageDisplay lpid, Number slice_id, Number lineThickness )

    • void LinePlotImageDisplaySetSliceLineStyle( LinePlotImageDisplay lpid, Number slice_id, Number lineStyle )

    • void LinePlotImageDisplaySetSliceTransparency( LinePlotImageDisplay lpid, Number sliceIndex, Boolean doTransparent, Number transparency )

    They are demonstrated in the example below. Note that the visibility of line styles depend on the number of points in a LinePlot. If the LinePlot has more data points than displayed pixels, you may not notice the line style as it is defined 'in between' data points:

    Result of example script

    // create image and image document
    ImageDocument imageDoc = CreateImageDocument( "New ImageDocument" ) 
    number width = 64
    number height = 10
    image img := RealImage("Line Plot Test", 4, width, height )
    img = sin( irow + icol / iwidth * 2 * Pi() ) + ( irow < ( height / 2 ) ? 1.5 : -1.5 ) 
    
    // add LinePlotImageDisplay to ImageDocument
    ImageDisplay imgdsp = imageDoc.ImageDocumentAddImageDisplay( img, 3 )
    imgdsp.LinePlotImageDisplaySetContrastLimits( -2.6, 2.6 )
    imgdsp.LinePlotImageDisplaySetDoAutoSurvey( 0, 0 )
    
    // Line style demo
    for ( number i = 0 ; i < height / 2 ; i++ )
    {
        number index = i + height / 2
        // Set Line - drawing (no fill)
        imgdsp.LinePlotImageDisplaySetSliceDrawingStyle( index , 1 )
        // Set black line
        imgdsp.LinePlotImageDisplaySetSliceComponentColor( index , 0 , 0, 0, 0 )
        // Set LineThickness
        imgdsp.LinePlotImageDisplaySetSliceLineThickness( index , height / 2 - i + 1 )
        // Set LineStyle 
        imgdsp.LinePlotImageDisplaySetSliceLineStyle( index , i )
    }
    
    // Transparecny demo
    for ( number i = 0 ; i < height / 2 ; i++ )
    {
        number index = i 
    
        // Set Fill & Line - drawing 
        imgdsp.LinePlotImageDisplaySetSliceDrawingStyle( index , 1 + 2 )
        // Set black fill & red line
        imgdsp.LinePlotImageDisplaySetSliceComponentColor( index , 1 , 0 , 0 , 0 )
        imgdsp.LinePlotImageDisplaySetSliceComponentColor( index , 0 , 255 , 0 , 0 )
        // Set transparency ( 70% transparency = 30% opacity )
        imgdsp.LinePlotImageDisplaySetSliceTransparency( index , 1 , 0.7 )
    }
    
    imageDoc.ImageDocumentShow()