# PipelineTopographic.sml # Sample standalone script to demonstrate an image pipeline application # using a single RVC source and a target consisting of several RVC raster objects. # Script input: a DEM raster object in a Project File. # Script output: RVC raster objects for Slope, Aspect, Shading, Profile Curvature, # and Plan Curvature, computed using the SML classes equivalent to the Topographic # Properties process in TNTmips. # The FOCALTOPOGRAPHIC filter computes and creates output objects in the following order: # Slope, Aspect, Shading, Profile Curvature, and Plan Curvature. The FOCALTOPOGRAPHIC_SETTINGS # class specifies which of these products should be computed and with what parameters. # If the script computes more than one of these products, set up the pipeline target using an # ObjItemList (a hash of RVC_OBJITEMs returned by the DlgGetObjectSet() function). Output objects # should be selected in the above order, and the number of objects prompted for must match the # number of products the script tells the filter to produce. # 8 January 2008 # Revised 12 February 2008 # Randy Smith, MicroImages, Inc. # Requires Version 2007:73 or later of the TNT products. numeric err; # error number returned # error checking procedure proc ReportError(numeric linenum, numeric err) { printf("FAILED -line: %d, error: %d\n", linenum - 1, err); PopupError(err); } ######################################## Main program ######################################### clear(); # CHOOSE INPUT DEM class RVC_RASTER DEM; # the input Digital Elevation Model raster GetInputRaster(DEM); if (DEM.$Info.Type == "binary" or # check for appropriate raster type DEM.$Info.Type == "16-bit color RGB" or DEM.$Info.Type == "16-bit color BGR" or DEM.$Info.Type == "24-bit color RGB" or DEM.$Info.Type == "24-bit color BGR") { print("Binary or composite rasters cannot be used as input for this script. Exiting now."); Exit(); } # Set processing parameters for topographic filter; # In practice these settings could be read from a dialog window created by the script. class IMAGE_PIPELINE_FILTER_FOCALTOPOGRAPHIC_SETTINGS settings; settings.SetSurfaceFittingMethod("QLSF"); # use Quadratic least squares fit settings.SetDoSlope(1); # compute slope raster; 0 = don't compute settings.SetSlopeDataType("FLOAT32"); # set slope raster to 32-bit floating point settings.SetSlopeUnits("Degrees"); # compute slope in degrees rather than percent settings.SetDoAspect(1); # compute Aspect; 0 = don't compute settings.SetAspectDataType("SINT16"); # set aspect raster to 16-bit signed integer settings.SetDoShading(1); # compute the shading raster; 0 = don't compute settings.SetShadingDataType("UINT8"); # set shading raster to 8-bit unsigned integer settings.SetShadingMethod("HighContrast"); settings.SetElevationAngleOfSun(60); # sun elevation angle in degrees settings.SetDirectionOfSun(300); # set azimuth of direction to sun (clockwise from 0 at north) settings.SetDoProfile(1); # compute profile curvature settings.SetDoPlan(1); # compute plan curvature settings.SetCurvatureDataType("FLOAT32"); # set curvature rasters to 32-bit floating point settings.SetCurvatureUnits("RadiansPer100Meter"); # set labels for prompt dialog to select output objects; # labels should be in the order shown, even if some are omitted. class STRINGLIST labelList; # list of labels for the selection dialog for the output objects labelList.AddToEnd("Slope"); labelList.AddToEnd("Aspect"); labelList.AddToEnd("Shading"); labelList.AddToEnd("Profile"); labelList.AddToEnd("Plan"); # CHOOSE OUTPUT # Prompt for the output rasters using the labelList. # DlgGetObjectSet populates a hash of ObjItems for the output; new rasters will then be created # by the TARGET_RVC with the desired compression. The ObjectPaths of the ObjItems are not # valid until the output rasters are actually created by the pipeline. class RVC_OBJITEM outObjItemList[]; # hash of object items for output class STRING prompt$ = "Choose new raster objects for the output:"; err = DlgGetObjectSet(prompt$, "Raster", labelList, outObjItemList, "NewOnly,AllowAutoName"); if ( err < 0) ReportError(_context.CurrentLineNum, err); # PIPELINE SOURCE # set the input DEM as the pipeline source using its ObjItem class IMAGE_PIPELINE_SOURCE_RVC source_DEM(DEM.GetObjItem() ); err = source_DEM.Initialize(); if ( err < 0) ReportError(_context.CurrentLineNum, err); else print("Source DEM initialized."); # PIPELINE FILTER # set up the topographic properties filter class IMAGE_PIPELINE_FILTER_FOCALTOPOGRAPHIC topoFilt(source_DEM, settings); err = topoFilt.Initialize(); if ( err < 0) ReportError(_context.CurrentLineNum, err); else print("Topographic filter initialized."); # PIPELINE TARGET # set output rasters as pipeline target using the ObjItem list returned by the DlgGetObjectSet function class IMAGE_PIPELINE_TARGET_RVC target_rvc(topoFilt, outObjItemList); target_rvc.SetCompression("DPCM", 0); err = target_rvc.Initialize(); if ( err < 0) ReportError(_context.CurrentLineNum, err); else print("Target initialized."); # EXECUTE the pipeline process print("Processing..."); target_rvc.Process(); print("Done.");