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)