Stereonet 2D Tools Demo#
Comprehensive demonstration of Stereonet2D Tool functionality in Dips Python API.
This script demonstrates ALL 13 tool types with their full CRUD operations: - Text Tool - Arrow Tool - Line Tool - Polyline Tool - Polygon Tool - Rectangle Tool - Ellipse Tool - Cone Tool - TrendLine Tool - PitchGrid Tool - MeasureAngle Tool - LineIntersectionCalculator Tool - PlaneIntersectionCalculator Tool
For each tool type, demonstrates: - Add (create) - Get (retrieve) - Update (modify) - Delete (remove) - SetVisibility (show/hide)
Code Snippet: Stereonet2DToolsDemo.py#
"""
Comprehensive demonstration of Stereonet2D Tool functionality in Dips Python API.
This script demonstrates ALL 13 tool types with their full CRUD operations:
- Text Tool
- Arrow Tool
- Line Tool
- Polyline Tool
- Polygon Tool
- Rectangle Tool
- Ellipse Tool
- Cone Tool
- TrendLine Tool
- PitchGrid Tool
- MeasureAngle Tool
- LineIntersectionCalculator Tool
- PlaneIntersectionCalculator Tool
For each tool type, demonstrates:
- Add (create)
- Get (list)
- Update
- Delete
- SetVisibility
"""
import math
from dips import DipsApp
from dips import DipsAPI_pb2
# Value wrappers for tools
import dips.TextToolEntityInfoVal
import dips.ArrowToolEntityInfoVal
import dips.LineToolEntityInfoVal
import dips.PolylineToolEntityInfoVal
import dips.PolygonToolEntityInfoVal
import dips.RectangleToolEntityInfoVal
import dips.EllipseToolEntityInfoVal
import dips.ConeToolEntityInfoVal
import dips.TrendLineToolEntityInfoVal
import dips.PitchGridToolEntityInfoVal
import dips.MeasureAngleToolEntityInfoVal
import dips.LineIntersectionCalculatorToolEntityInfoVal
import dips.PlaneIntersectionCalculatorToolEntityInfoVal
# Helper value wrappers
import dips.AnchorPointVal
import dips.TrendPlungeVal
import dips.AngleDataVal
import dips.Vector2DVal
import dips.ColorSurrogateVal
import dips.LineFormatVal
import dips.ConeVal
# =============================================================================
# HELPER FUNCTIONS
# =============================================================================
def create_trend_plunge(trend_deg: float, plunge_deg: float):
"""Create a TrendPlunge from degrees."""
tp = dips.TrendPlungeVal.TrendPlungeVal()
tp.trend = dips.AngleDataVal.AngleDataVal()
tp.trend.angle_radians = math.radians(trend_deg)
tp.plunge = dips.AngleDataVal.AngleDataVal()
tp.plunge.angle_radians = math.radians(plunge_deg)
return tp
def create_color(r: int, g: int, b: int, a: int = 255):
"""Create a Color from RGBA values."""
color = dips.ColorSurrogateVal.ColorSurrogateVal()
color.r = r
color.g = g
color.b = b
color.a = a
return color
def create_anchor_point(trend_deg: float, plunge_deg: float):
"""Create an AnchorPoint with spherical coordinates."""
anchor = dips.AnchorPointVal.AnchorPointVal()
anchor.coordinate_option = DipsAPI_pb2.eAnchorCoordinateOption.Spherical
anchor.spherical_point = create_trend_plunge(trend_deg, plunge_deg)
return anchor
def create_vector2d(x: float, y: float):
"""Create a Vector2D."""
vec = dips.Vector2DVal.Vector2DVal()
vec.x = x
vec.y = y
return vec
def create_line_format(color_rgb=(0, 0, 0), width=1):
"""Create a LineFormat."""
line_format = dips.LineFormatVal.LineFormatVal()
line_format.line_color = create_color(*color_rgb)
line_format.line_width = width
return line_format
# =============================================================================
# TOOL CREATION HELPERS
# =============================================================================
def create_text_tool(model, name: str, text: str, trend_deg: float = 90, plunge_deg: float = 45):
"""Create a TextToolEntityInfo using GetDefault."""
tool = model.GetDefaultTextToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.text = text
tool.anchor_point = create_anchor_point(trend_deg, plunge_deg)
return tool
def create_arrow_tool(model, name: str, start_trend: float, start_plunge: float, end_trend: float, end_plunge: float):
"""Create an ArrowToolEntityInfo using GetDefault."""
tool = model.GetDefaultArrowToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.start_point = create_anchor_point(start_trend, start_plunge)
tool.end_point = create_anchor_point(end_trend, end_plunge)
tool.line_format = create_line_format((255, 0, 0), 2)
return tool
def create_line_tool(model, name: str, start_trend: float, start_plunge: float, end_trend: float, end_plunge: float):
"""Create a LineToolEntityInfo using GetDefault."""
tool = model.GetDefaultLineToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.start_point = create_anchor_point(start_trend, start_plunge)
tool.end_point = create_anchor_point(end_trend, end_plunge)
tool.line_format = create_line_format((0, 0, 255), 2)
return tool
def create_cone_tool(model, name: str, center_trend_deg: float, center_plunge_deg: float, cone_angle_deg: float):
"""Create a ConeToolEntityInfo using GetDefault."""
tool = model.GetDefaultConeToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.color = create_color(255, 255, 0)
cone = dips.ConeVal.ConeVal()
cone.center = create_trend_plunge(center_trend_deg, center_plunge_deg)
cone.cone_angle = dips.AngleDataVal.AngleDataVal()
cone.cone_angle.angle_radians = math.radians(cone_angle_deg)
tool.cone = cone
return tool
# =============================================================================
# TOOL GROUP VISIBILITY
# =============================================================================
def demonstrate_tool_group_visibility(view):
"""Demonstrate all tool group visibility settings."""
print("\n" + "=" * 60)
print("TOOL GROUP VISIBILITY")
print("=" * 60)
tool_group_settings = [
("All Tools", view.SetToolsEntityGroupVisibility),
("Text Tool", view.SetTextToolEntityGroupVisibility),
("Arrow Tool", view.SetArrowToolEntityGroupVisibility),
("Line Tool", view.SetLineToolEntityGroupVisibility),
("Polyline Tool", view.SetPolylineToolEntityGroupVisibility),
("Polygon Tool", view.SetPolygonToolEntityGroupVisibility),
("Rectangle Tool", view.SetRectangleToolEntityGroupVisibility),
("Ellipse Tool", view.SetEllipseToolEntityGroupVisibility),
("Cone Tool", view.SetConeToolEntityGroupVisibility),
("Trend Line Tool", view.SetTrendLineToolEntityGroupVisibility),
("Pitch Grid Tool", view.SetPitchGridToolEntityGroupVisibility),
("Measure Angle Tool", view.SetMeasureAngleToolEntityGroupVisibility),
("Line Intersection Calculator", view.SetLineIntersectionCalculatorToolEntityGroupVisibility),
("Plane Intersection Calculator", view.SetPlaneIntersectionCalculatorToolEntityGroupVisibility),
]
for name, setter in tool_group_settings:
try:
setter(True)
print(f" ✓ {name}: True")
except Exception as e:
print(f" ✗ {name}: {e}")
# =============================================================================
# TOOL MANAGEMENT - ALL 13 TOOL TYPES
# =============================================================================
def demonstrate_text_tool(view, model):
"""Demonstrate Text Tool CRUD operations."""
print("\n TEXT TOOL:")
ref = None
# Add
try:
tool = create_text_tool(model, "Demo Text", "Hello Dips!", 90, 45)
ref = view.AddStereonet2DTextTool(tool)
print(" ✓ AddStereonet2DTextTool")
except Exception as e:
print(f" ✗ AddStereonet2DTextTool: {e}")
# Get list
try:
tool_list = view.GetStereonet2DTextToolList()
print(f" ✓ GetStereonet2DTextToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DTextToolList: {e}")
if ref:
# Set visibility
try:
ref.SetStereonet2DTextToolVisibility(True)
print(" ✓ SetStereonet2DTextToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DTextToolVisibility: {e}")
# Update
try:
value = ref.GetValue()
value.text = "Updated Text!"
ref.UpdateStereonet2DTextTool(value)
print(" ✓ UpdateStereonet2DTextTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DTextTool: {e}")
# Delete
try:
ref.DeleteStereonet2DTextTool()
print(" ✓ DeleteStereonet2DTextTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DTextTool: {e}")
def demonstrate_arrow_tool(view, model):
"""Demonstrate Arrow Tool CRUD operations."""
print("\n ARROW TOOL:")
ref = None
try:
tool = create_arrow_tool(model, "Demo Arrow", 0, 0, 90, 45)
ref = view.AddStereonet2DArrowTool(tool)
print(" ✓ AddStereonet2DArrowTool")
except Exception as e:
print(f" ✗ AddStereonet2DArrowTool: {e}")
try:
tool_list = view.GetStereonet2DArrowToolList()
print(f" ✓ GetStereonet2DArrowToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DArrowToolList: {e}")
if ref:
try:
ref.SetStereonet2DArrowToolVisibility(True)
print(" ✓ SetStereonet2DArrowToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DArrowToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Arrow"
ref.UpdateStereonet2DArrowTool(value)
print(" ✓ UpdateStereonet2DArrowTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DArrowTool: {e}")
try:
ref.DeleteStereonet2DArrowTool()
print(" ✓ DeleteStereonet2DArrowTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DArrowTool: {e}")
def demonstrate_line_tool(view, model):
"""Demonstrate Line Tool CRUD operations."""
print("\n LINE TOOL:")
ref = None
try:
tool = create_line_tool(model, "Demo Line", 45, 30, 135, 60)
ref = view.AddStereonet2DLineTool(tool)
print(" ✓ AddStereonet2DLineTool")
except Exception as e:
print(f" ✗ AddStereonet2DLineTool: {e}")
try:
tool_list = view.GetStereonet2DLineToolList()
print(f" ✓ GetStereonet2DLineToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DLineToolList: {e}")
if ref:
try:
ref.SetStereonet2DLineToolVisibility(True)
print(" ✓ SetStereonet2DLineToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DLineToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Line"
ref.UpdateStereonet2DLineTool(value)
print(" ✓ UpdateStereonet2DLineTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DLineTool: {e}")
try:
ref.DeleteStereonet2DLineTool()
print(" ✓ DeleteStereonet2DLineTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DLineTool: {e}")
def demonstrate_polyline_tool(view, model):
"""Demonstrate Polyline Tool CRUD operations."""
print("\n POLYLINE TOOL:")
ref = None
try:
tool = model.GetDefaultPolylineToolEntityInfo()
tool.name = "Demo Polyline"
tool.is_visible = True
tool.line_format = create_line_format((0, 128, 0), 2)
tool.points.append(create_vector2d(0.0, 0.0))
tool.points.append(create_vector2d(0.5, 0.3))
tool.points.append(create_vector2d(1.0, 0.0))
ref = view.AddStereonet2DPolylineTool(tool)
print(" ✓ AddStereonet2DPolylineTool")
except Exception as e:
print(f" ✗ AddStereonet2DPolylineTool: {e}")
try:
tool_list = view.GetStereonet2DPolylineToolList()
print(f" ✓ GetStereonet2DPolylineToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DPolylineToolList: {e}")
if ref:
try:
ref.SetStereonet2DPolylineToolVisibility(True)
print(" ✓ SetStereonet2DPolylineToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DPolylineToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Polyline"
ref.UpdateStereonet2DPolylineTool(value)
print(" ✓ UpdateStereonet2DPolylineTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DPolylineTool: {e}")
try:
ref.DeleteStereonet2DPolylineTool()
print(" ✓ DeleteStereonet2DPolylineTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DPolylineTool: {e}")
def demonstrate_polygon_tool(view, model):
"""Demonstrate Polygon Tool CRUD operations."""
print("\n POLYGON TOOL:")
ref = None
try:
tool = model.GetDefaultPolygonToolEntityInfo()
tool.name = "Demo Polygon"
tool.is_visible = True
tool.line_format = create_line_format((128, 0, 128), 2)
tool.points.append(create_vector2d(0.0, 0.0))
tool.points.append(create_vector2d(0.5, 0.5))
tool.points.append(create_vector2d(1.0, 0.0))
ref = view.AddStereonet2DPolygonTool(tool)
print(" ✓ AddStereonet2DPolygonTool")
except Exception as e:
print(f" ✗ AddStereonet2DPolygonTool: {e}")
try:
tool_list = view.GetStereonet2DPolygonToolList()
print(f" ✓ GetStereonet2DPolygonToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DPolygonToolList: {e}")
if ref:
try:
ref.SetStereonet2DPolygonToolVisibility(True)
print(" ✓ SetStereonet2DPolygonToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DPolygonToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Polygon"
ref.UpdateStereonet2DPolygonTool(value)
print(" ✓ UpdateStereonet2DPolygonTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DPolygonTool: {e}")
try:
ref.DeleteStereonet2DPolygonTool()
print(" ✓ DeleteStereonet2DPolygonTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DPolygonTool: {e}")
def demonstrate_rectangle_tool(view, model):
"""Demonstrate Rectangle Tool CRUD operations."""
print("\n RECTANGLE TOOL:")
ref = None
try:
tool = model.GetDefaultRectangleToolEntityInfo()
tool.name = "Demo Rectangle"
tool.is_visible = True
tool.line_format = create_line_format((255, 128, 0), 2)
tool.first_corner = create_vector2d(-0.5, -0.5)
tool.second_corner = create_vector2d(0.5, 0.5)
ref = view.AddStereonet2DRectangleTool(tool)
print(" ✓ AddStereonet2DRectangleTool")
except Exception as e:
print(f" ✗ AddStereonet2DRectangleTool: {e}")
try:
tool_list = view.GetStereonet2DRectangleToolList()
print(f" ✓ GetStereonet2DRectangleToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DRectangleToolList: {e}")
if ref:
try:
ref.SetStereonet2DRectangleToolVisibility(True)
print(" ✓ SetStereonet2DRectangleToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DRectangleToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Rectangle"
ref.UpdateStereonet2DRectangleTool(value)
print(" ✓ UpdateStereonet2DRectangleTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DRectangleTool: {e}")
try:
ref.DeleteStereonet2DRectangleTool()
print(" ✓ DeleteStereonet2DRectangleTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DRectangleTool: {e}")
def demonstrate_ellipse_tool(view, model):
"""Demonstrate Ellipse Tool CRUD operations."""
print("\n ELLIPSE TOOL:")
ref = None
try:
tool = model.GetDefaultEllipseToolEntityInfo()
tool.name = "Demo Ellipse"
tool.is_visible = True
tool.line_format = create_line_format((0, 128, 128), 2)
tool.first_corner = create_vector2d(-0.3, -0.3)
tool.second_corner = create_vector2d(0.3, 0.3)
ref = view.AddStereonet2DEllipseTool(tool)
print(" ✓ AddStereonet2DEllipseTool")
except Exception as e:
print(f" ✗ AddStereonet2DEllipseTool: {e}")
try:
tool_list = view.GetStereonet2DEllipseToolList()
print(f" ✓ GetStereonet2DEllipseToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DEllipseToolList: {e}")
if ref:
try:
ref.SetStereonet2DEllipseToolVisibility(True)
print(" ✓ SetStereonet2DEllipseToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DEllipseToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Ellipse"
ref.UpdateStereonet2DEllipseTool(value)
print(" ✓ UpdateStereonet2DEllipseTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DEllipseTool: {e}")
try:
ref.DeleteStereonet2DEllipseTool()
print(" ✓ DeleteStereonet2DEllipseTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DEllipseTool: {e}")
def demonstrate_cone_tool(view, model):
"""Demonstrate Cone Tool CRUD operations."""
print("\n CONE TOOL:")
ref = None
try:
tool = create_cone_tool(model, "Demo Cone", 90, 45, 30)
ref = view.AddStereonet2DConeTool(tool)
print(" ✓ AddStereonet2DConeTool")
except Exception as e:
print(f" ✗ AddStereonet2DConeTool: {e}")
try:
tool_list = view.GetStereonet2DConeToolList()
print(f" ✓ GetStereonet2DConeToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DConeToolList: {e}")
if ref:
try:
ref.SetStereonet2DConeToolVisibility(True)
print(" ✓ SetStereonet2DConeToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DConeToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated Cone"
ref.UpdateStereonet2DConeTool(value)
print(" ✓ UpdateStereonet2DConeTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DConeTool: {e}")
try:
ref.DeleteStereonet2DConeTool()
print(" ✓ DeleteStereonet2DConeTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DConeTool: {e}")
def demonstrate_trendline_tool(view, model):
"""Demonstrate TrendLine Tool CRUD operations."""
print("\n TREND LINE TOOL:")
ref = None
try:
tool = model.GetDefaultTrendLineToolEntityInfo()
tool.name = "Demo TrendLine"
tool.is_visible = True
tool.trend.angle_radians = math.radians(45)
ref = view.AddStereonet2DTrendLineTool(tool)
print(" ✓ AddStereonet2DTrendLineTool")
except Exception as e:
print(f" ✗ AddStereonet2DTrendLineTool: {e}")
try:
tool_list = view.GetStereonet2DTrendLineToolList()
print(f" ✓ GetStereonet2DTrendLineToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DTrendLineToolList: {e}")
if ref:
try:
ref.SetStereonet2DTrendLineToolVisibility(True)
print(" ✓ SetStereonet2DTrendLineToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DTrendLineToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated TrendLine"
ref.UpdateStereonet2DTrendLineTool(value)
print(" ✓ UpdateStereonet2DTrendLineTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DTrendLineTool: {e}")
try:
ref.DeleteStereonet2DTrendLineTool()
print(" ✓ DeleteStereonet2DTrendLineTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DTrendLineTool: {e}")
def demonstrate_pitchgrid_tool(view, model):
"""Demonstrate PitchGrid Tool CRUD operations."""
print("\n PITCH GRID TOOL:")
ref = None
try:
tool = model.GetDefaultPitchGridToolEntityInfo()
tool.name = "Demo PitchGrid"
tool.is_visible = True
tool.pole = create_trend_plunge(90, 45)
ref = view.AddStereonet2DPitchGridTool(tool)
print(" ✓ AddStereonet2DPitchGridTool")
except Exception as e:
print(f" ✗ AddStereonet2DPitchGridTool: {e}")
try:
tool_list = view.GetStereonet2DPitchGridToolList()
print(f" ✓ GetStereonet2DPitchGridToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DPitchGridToolList: {e}")
if ref:
try:
ref.SetStereonet2DPitchGridToolVisibility(True)
print(" ✓ SetStereonet2DPitchGridToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DPitchGridToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated PitchGrid"
ref.UpdateStereonet2DPitchGridTool(value)
print(" ✓ UpdateStereonet2DPitchGridTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DPitchGridTool: {e}")
try:
ref.DeleteStereonet2DPitchGridTool()
print(" ✓ DeleteStereonet2DPitchGridTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DPitchGridTool: {e}")
def demonstrate_measureangle_tool(view, model):
"""Demonstrate MeasureAngle Tool CRUD operations."""
print("\n MEASURE ANGLE TOOL:")
ref = None
try:
tool = model.GetDefaultMeasureAngleToolEntityInfo()
tool.name = "Demo MeasureAngle"
tool.is_visible = True
tool.pole1 = create_trend_plunge(45, 30)
tool.pole2 = create_trend_plunge(135, 60)
ref = view.AddStereonet2DMeasureAngleTool(tool)
print(" ✓ AddStereonet2DMeasureAngleTool")
except Exception as e:
print(f" ✗ AddStereonet2DMeasureAngleTool: {e}")
try:
tool_list = view.GetStereonet2DMeasureAngleToolList()
print(f" ✓ GetStereonet2DMeasureAngleToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DMeasureAngleToolList: {e}")
if ref:
try:
ref.SetStereonet2DMeasureAngleToolVisibility(True)
print(" ✓ SetStereonet2DMeasureAngleToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DMeasureAngleToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated MeasureAngle"
ref.UpdateStereonet2DMeasureAngleTool(value)
print(" ✓ UpdateStereonet2DMeasureAngleTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DMeasureAngleTool: {e}")
try:
ref.DeleteStereonet2DMeasureAngleTool()
print(" ✓ DeleteStereonet2DMeasureAngleTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DMeasureAngleTool: {e}")
def demonstrate_lineintersectioncalculator_tool(view, model):
"""Demonstrate LineIntersectionCalculator Tool CRUD operations."""
print("\n LINE INTERSECTION CALCULATOR TOOL:")
ref = None
try:
tool = model.GetDefaultLineIntersectionCalculatorToolEntityInfo()
tool.name = "Demo LineIntersectionCalc"
tool.is_visible = True
tool.pole1 = create_trend_plunge(0, 45)
tool.pole2 = create_trend_plunge(90, 45)
ref = view.AddStereonet2DLineIntersectionCalculatorTool(tool)
print(" ✓ AddStereonet2DLineIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ AddStereonet2DLineIntersectionCalculatorTool: {e}")
try:
tool_list = view.GetStereonet2DLineIntersectionCalculatorToolList()
print(f" ✓ GetStereonet2DLineIntersectionCalculatorToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DLineIntersectionCalculatorToolList: {e}")
if ref:
try:
ref.SetStereonet2DLineIntersectionCalculatorToolVisibility(True)
print(" ✓ SetStereonet2DLineIntersectionCalculatorToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DLineIntersectionCalculatorToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated LineIntersectionCalc"
ref.UpdateStereonet2DLineIntersectionCalculatorTool(value)
print(" ✓ UpdateStereonet2DLineIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DLineIntersectionCalculatorTool: {e}")
try:
ref.DeleteStereonet2DLineIntersectionCalculatorTool()
print(" ✓ DeleteStereonet2DLineIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DLineIntersectionCalculatorTool: {e}")
def demonstrate_planeintersectioncalculator_tool(view, model):
"""Demonstrate PlaneIntersectionCalculator Tool CRUD operations."""
print("\n PLANE INTERSECTION CALCULATOR TOOL:")
ref = None
try:
tool = model.GetDefaultPlaneIntersectionCalculatorToolEntityInfo()
tool.name = "Demo PlaneIntersectionCalc"
tool.is_visible = True
tool.pole1 = create_trend_plunge(45, 60)
tool.pole2 = create_trend_plunge(225, 30)
ref = view.AddStereonet2DPlaneIntersectionCalculatorTool(tool)
print(" ✓ AddStereonet2DPlaneIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ AddStereonet2DPlaneIntersectionCalculatorTool: {e}")
try:
tool_list = view.GetStereonet2DPlaneIntersectionCalculatorToolList()
print(f" ✓ GetStereonet2DPlaneIntersectionCalculatorToolList: {len(tool_list)} found")
except Exception as e:
print(f" ✗ GetStereonet2DPlaneIntersectionCalculatorToolList: {e}")
if ref:
try:
ref.SetStereonet2DPlaneIntersectionCalculatorToolVisibility(True)
print(" ✓ SetStereonet2DPlaneIntersectionCalculatorToolVisibility")
except Exception as e:
print(f" ✗ SetStereonet2DPlaneIntersectionCalculatorToolVisibility: {e}")
try:
value = ref.GetValue()
value.name = "Updated PlaneIntersectionCalc"
ref.UpdateStereonet2DPlaneIntersectionCalculatorTool(value)
print(" ✓ UpdateStereonet2DPlaneIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ UpdateStereonet2DPlaneIntersectionCalculatorTool: {e}")
try:
ref.DeleteStereonet2DPlaneIntersectionCalculatorTool()
print(" ✓ DeleteStereonet2DPlaneIntersectionCalculatorTool")
except Exception as e:
print(f" ✗ DeleteStereonet2DPlaneIntersectionCalculatorTool: {e}")
def demonstrate_all_tools(view, model):
"""Demonstrate all 13 tool types."""
print("\n" + "=" * 60)
print("TOOL MANAGEMENT (All 13 Tool Types)")
print("=" * 60)
demonstrate_text_tool(view, model)
demonstrate_arrow_tool(view, model)
demonstrate_line_tool(view, model)
demonstrate_polyline_tool(view, model)
demonstrate_polygon_tool(view, model)
demonstrate_rectangle_tool(view, model)
demonstrate_ellipse_tool(view, model)
demonstrate_cone_tool(view, model)
demonstrate_trendline_tool(view, model)
demonstrate_pitchgrid_tool(view, model)
demonstrate_measureangle_tool(view, model)
demonstrate_lineintersectioncalculator_tool(view, model)
demonstrate_planeintersectioncalculator_tool(view, model)
# =============================================================================
# MAIN
# =============================================================================
def main():
"""Main demonstration function."""
print("=" * 60)
print("Dips API - Stereonet2D Tools Demo")
print("=" * 60)
# Connect to Dips
print("\nConnecting to Dips application...")
try:
app = DipsApp.LaunchApp(62535)
print("✓ Connected to Dips")
except Exception as e:
print(f"✗ Failed to connect: {e}")
print("Make sure Dips is running with scripting enabled on port 62535")
return
model = app.GetModel()
# Get or create a Stereonet2D view
print("\n" + "-" * 60)
print("VIEW SETUP")
print("-" * 60)
views = model.GetStereonet2DViewList()
if views:
view = views[0]
print(f" Using existing view: '{view.GetValue().view_name}'")
else:
view = model.CreateStereonet2DView()
print(f" Created new view: '{view.GetValue().view_name}'")
# Run demonstrations
demonstrate_tool_group_visibility(view)
demonstrate_all_tools(view, model)
# Show the application
app.Show()
# Summary
print("\n" + "=" * 60)
print("DEMONSTRATION COMPLETE")
print("=" * 60)
print("""
All Stereonet2D Tool services demonstrated (79 methods):
TOOL GROUP VISIBILITY (14 methods):
- SetToolsEntityGroupVisibility
- SetTextToolEntityGroupVisibility
- SetArrowToolEntityGroupVisibility
- SetLineToolEntityGroupVisibility
- SetPolylineToolEntityGroupVisibility
- SetPolygonToolEntityGroupVisibility
- SetRectangleToolEntityGroupVisibility
- SetEllipseToolEntityGroupVisibility
- SetConeToolEntityGroupVisibility
- SetTrendLineToolEntityGroupVisibility
- SetPitchGridToolEntityGroupVisibility
- SetMeasureAngleToolEntityGroupVisibility
- SetLineIntersectionCalculatorToolEntityGroupVisibility
- SetPlaneIntersectionCalculatorToolEntityGroupVisibility
TOOLS - 13 tool types, 5 methods each (65 methods):
Tool types: Text, Arrow, Line, Polyline, Polygon, Rectangle,
Ellipse, Cone, TrendLine, PitchGrid, MeasureAngle,
LineIntersectionCalculator, PlaneIntersectionCalculator
Methods per type:
- AddStereonet2D[ToolType]Tool
- GetStereonet2D[ToolType]ToolList
- UpdateStereonet2D[ToolType]Tool
- DeleteStereonet2D[ToolType]Tool
- SetStereonet2D[ToolType]ToolVisibility
""")
if __name__ == "__main__":
main()