Tutorial#

Code asciciated with Dips Scripting Tutorial.

Code Snippet: Tutorial#

import math

from dips import BuiltInDataFormatters, DipsAPI_pb2, DipsApp

from dips.DiscontinuityDataVal import DiscontinuityDataVal

from dips.FillFormatVal import FillFormatVal

from dips.LineFormatVal import LineFormatVal

from dips.OrientationDataSetVal import OrientationDataSetVal

from dips.TextFormatVal import TextFormatVal

from dips.TextToolEntityInfoVal import TextToolEntityInfoVal


# Start up the application with a port number

# this port number must be between 49152 and 65535, and not be in use by another program

app = DipsApp.LaunchApp(62535)


# Access the app model, this object is what allows access to most functionality in Dips

model = app.GetModel()


# Create a traverse with some simple parameters 

ods = model.GetDefaultOrientationDataSet()

ods.name = "Spot Mapping - Example"

ods.orientation_data_type = DipsAPI_pb2.eOrientationDataType.SpotMapping

ods.discontinuity_orientation_convention = DipsAPI_pb2.eOrientationConvention.TrendPlungeOrientation


ods.traverse_elevation_unit = BuiltInDataFormatters.LengthMeterDataFormatter

ods.traverse_xyz_unit = BuiltInDataFormatters.LengthMeterDataFormatter

ods.discontinuity_xyz_unit = BuiltInDataFormatters.LengthMeterDataFormatter

ods.discontinuity_persistence_unit = BuiltInDataFormatters.LengthMeterDataFormatter


# Create a variety of sample poles with different orientations

# Format: (trend_deg, plunge_deg) - since above we set discontinuity_orientation_convention to DipsAPI_pb2.eOrientationConvention.TrendPlungeOrientation

sample_poles = [

(45, 30),

(90, 45),

(135, 60),

(180, 30),

(225, 45),

(270, 60),

(315, 30),

(0, 45),

(60, 75),

(120, 25),

(240, 50),

(300, 40),

]


for trend_deg, plunge_deg in sample_poles:

    discontinuity = DiscontinuityDataVal()

    # Note: From the scripting interface angles are typically specified in radians

    discontinuity.orientation1.angle_radians = math.radians(trend_deg)

    discontinuity.orientation2.angle_radians = math.radians(plunge_deg)

    discontinuity.quantity = 1.0

    ods.discontinuity_list.append(discontinuity)


# Add the new traverse to the model

# This step adds the traverse to the Dips model, and will cause it to be part of current project

traveseRef = model.AddTraverse(ods)


# Now create a new 2D stereonet

# this will create the view, and the object returned will allow further interaction with this view

# you can also access all existing stereonet views in the model with model.Get2DStereonets()

stereonetViewRef = model.CreateStereonet2DView()


# Create a text tool for the stereonet

tool = TextToolEntityInfoVal()

tool.name = "Test Text Tool"

tool.is_visible = True

tool.text = "Hello Dips Scripting!"

tool.anchor_point.coordinate_option = DipsAPI_pb2.eAnchorCoordinateOption.Spherical

tool.anchor_point.spherical_point.trend.angle_radians = math.radians(45)

tool.anchor_point.spherical_point.plunge.angle_radians = math.radians(45)


# Set line format

line_format = LineFormatVal()

line_format.line_width = 1

tool.line_format = line_format


# Set fill format

fill_format = FillFormatVal()

fill_format.apply_fill = False

tool.fill_format = fill_format


# Set text format

text_format = TextFormatVal()

text_format.text_horizontal_alignment = DipsAPI_pb2.eTextHorizontalAlignment.Center

text_format.text_color.a = 255

text_format.text_color.r = 15

text_format.text_color.g = 15

text_format.text_color.b = 255

text_format.font_name = "Arial"

text_format.font_size = 12

tool.text_format = text_format


# Add the text tool to the stereonet

# the object returned allows for further modification to the text tool

# you can also access any existing text tools with stereonetViewRef.GetStereonet2DTextTools()

textToolref = stereonetViewRef.AddStereonet2DTextTool(tool)


# Some objects like Traverses, User Planes, and Sets are added to the entire project and will be visible 

# on all stereonets. In order to control how they are visualized on a specific stereonet they can be accessed 

# like this:

traverseVisibilities = stereonetViewRef.GetTraverseEntityVisibilityList()


# There should always be 1 traverse here, since we just added one

if traverseVisibilities:

    # Access the first one (the one we just added)

    traverseVisibility = traverseVisibilities[0]

    # We could also create a new traverseEntityVisibilityVal object (an object which holds all traverse visibilty options)

    # but since we only want to edit one option we can also get this traverses current settings, and edit the single value we want

    entityVisibilityVal = traverseVisibility.GetValue()

    # For example, hide the traverse label

    entityVisibilityVal.options.show_label = False

    # And now this line is what will apply the visiblity options to the traverse

    traverseVisibility.SetTraverseEntityOptions(entityVisibilityVal.options)


# Some objects like contour settings only have one per stereonet and are contolled more directly

stereonetViewRef.SetContourEntityVisibility(True)