Rosette Tools Demo#
Demonstration of Rosette Tool functionality in Dips Python API.
This script demonstrates all Rosette tool services including: - Tool Group Visibility: All tools, Text, Arrow, Line, Polyline, Polygon, Rectangle, Ellipse, TrendLine - Tool CRUD operations: Add, Get, Update, Delete, SetVisibility for 8 tool types
Rosette supports 8 tool types (fewer than Stereonet2D which has 13): - Text, Arrow, Line, Polyline, Polygon, Rectangle, Ellipse, TrendLine
Note: General Rosette functionality is demonstrated in RosetteDemo.py
Code Snippet: RosetteToolsDemo.py#
"""
Demonstration of Rosette Tool functionality in Dips Python API.
This script demonstrates all Rosette tool services including:
- Tool Group Visibility: All tools, Text, Arrow, Line, Polyline, Polygon, Rectangle, Ellipse, TrendLine
- Tool CRUD operations: Add, Get, Update, Delete, SetVisibility for 8 tool types
Rosette supports 8 tool types (fewer than Stereonet2D which has 13):
- Text, Arrow, Line, Polyline, Polygon, Rectangle, Ellipse, TrendLine
Note: General Rosette functionality is demonstrated in RosetteDemo.py
"""
import math
from dips import DipsApp, BuiltInDataFormatters
# Helper value wrappers
from dips.AnchorPointVal import AnchorPointVal
from dips.Vector2DVal import Vector2DVal
from dips.LineFormatVal import LineFormatVal
from dips.TrendPlungeVal import TrendPlungeVal
from dips.ColorSurrogateVal import ColorSurrogateVal
# =============================================================================
# HELPER FUNCTIONS
# =============================================================================
def create_anchor_point(trend_deg: float, plunge_deg: float):
"""Create an AnchorPoint from degrees using spherical coordinates."""
ap = AnchorPointVal()
ap.coordinate_option = DipsApp.enums.eAnchorCoordinateOption.Spherical
ap.spherical_point = TrendPlungeVal.FromTrendPlunge(trend_deg, plunge_deg)
return ap
def create_vector2d(x: float, y: float):
"""Create a Vector2D."""
v = Vector2DVal()
v.x = x
v.y = y
return v
def create_line_format(color_rgb: tuple, width: float = 1.0):
"""Create a LineFormat with specified color and width."""
lf = LineFormatVal()
lf.color = ColorSurrogateVal.FromRGBA(*color_rgb)
lf.line_width = width
return lf
def create_text_tool(model, name: str, text: str, trend: float, plunge: float):
"""Create a configured TextToolEntityInfo."""
tool = model.GetDefaultTextToolEntityInfo()
tool.name = name
tool.text = text
tool.is_visible = True
tool.anchor_point = create_anchor_point(trend, plunge)
return tool
def create_arrow_tool(model, name: str, start_trend: float, start_plunge: float, end_trend: float, end_plunge: float):
"""Create a configured ArrowToolEntityInfo."""
tool = model.GetDefaultArrowToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.anchor_point = create_anchor_point(start_trend, start_plunge)
tool.anchor_point_secondary = create_anchor_point(end_trend, end_plunge)
return tool
def create_line_tool(model, name: str, start_trend: float, start_plunge: float, end_trend: float, end_plunge: float):
"""Create a configured LineToolEntityInfo."""
tool = model.GetDefaultLineToolEntityInfo()
tool.name = name
tool.is_visible = True
tool.anchor_point = create_anchor_point(start_trend, start_plunge)
tool.anchor_point_secondary = create_anchor_point(end_trend, end_plunge)
return tool
# =============================================================================
# TOOL GROUP VISIBILITY DEMONSTRATIONS
# =============================================================================
def demonstrate_tool_group_visibility(view):
"""Demonstrate all tool group visibility settings."""
print("\n" + "=" * 60)
print("TOOL GROUP VISIBILITY")
print("=" * 60)
view.SetToolsEntityGroupVisibility(True)
print(" ✓ SetToolsEntityGroupVisibility: True")
view.SetTextToolEntityGroupVisibility(True)
print(" ✓ SetTextToolEntityGroupVisibility: True")
view.SetArrowToolEntityGroupVisibility(True)
print(" ✓ SetArrowToolEntityGroupVisibility: True")
view.SetLineToolEntityGroupVisibility(True)
print(" ✓ SetLineToolEntityGroupVisibility: True")
view.SetPolylineToolEntityGroupVisibility(True)
print(" ✓ SetPolylineToolEntityGroupVisibility: True")
view.SetPolygonToolEntityGroupVisibility(True)
print(" ✓ SetPolygonToolEntityGroupVisibility: True")
view.SetRectangleToolEntityGroupVisibility(True)
print(" ✓ SetRectangleToolEntityGroupVisibility: True")
view.SetEllipseToolEntityGroupVisibility(True)
print(" ✓ SetEllipseToolEntityGroupVisibility: True")
view.SetTrendLineToolEntityGroupVisibility(True)
print(" ✓ SetTrendLineToolEntityGroupVisibility: True")
# =============================================================================
# TOOL MANAGEMENT - ALL 8 TOOL TYPES
# =============================================================================
def demonstrate_text_tool(view, model):
"""Demonstrate Text Tool CRUD operations."""
print("\n TEXT TOOL:")
ref = None
tool = create_text_tool(model, "Demo Text", "Hello Rosette!", 90, 45)
ref = view.AddRosetteTextTool(tool)
print(" ✓ AddRosetteTextTool")
tool_list = view.GetRosetteTextToolList()
print(f" ✓ GetRosetteTextToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteTextToolVisibility(True)
print(" ✓ SetRosetteTextToolVisibility")
value = ref.GetValue()
value.text = "Updated Text!"
ref.UpdateRosetteTextTool(value)
print(" ✓ UpdateRosetteTextTool")
ref.DeleteRosetteTextTool()
print(" ✓ DeleteRosetteTextTool")
def demonstrate_arrow_tool(view, model):
"""Demonstrate Arrow Tool CRUD operations."""
print("\n ARROW TOOL:")
ref = None
tool = create_arrow_tool(model, "Demo Arrow", 0, 0, 90, 45)
ref = view.AddRosetteArrowTool(tool)
print(" ✓ AddRosetteArrowTool")
tool_list = view.GetRosetteArrowToolList()
print(f" ✓ GetRosetteArrowToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteArrowToolVisibility(True)
print(" ✓ SetRosetteArrowToolVisibility")
value = ref.GetValue()
value.name = "Updated Arrow"
ref.UpdateRosetteArrowTool(value)
print(" ✓ UpdateRosetteArrowTool")
ref.DeleteRosetteArrowTool()
print(" ✓ DeleteRosetteArrowTool")
def demonstrate_line_tool(view, model):
"""Demonstrate Line Tool CRUD operations."""
print("\n LINE TOOL:")
ref = None
tool = create_line_tool(model, "Demo Line", 45, 30, 135, 60)
ref = view.AddRosetteLineTool(tool)
print(" ✓ AddRosetteLineTool")
tool_list = view.GetRosetteLineToolList()
print(f" ✓ GetRosetteLineToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteLineToolVisibility(True)
print(" ✓ SetRosetteLineToolVisibility")
value = ref.GetValue()
value.name = "Updated Line"
ref.UpdateRosetteLineTool(value)
print(" ✓ UpdateRosetteLineTool")
ref.DeleteRosetteLineTool()
print(" ✓ DeleteRosetteLineTool")
def demonstrate_polyline_tool(view, model):
"""Demonstrate Polyline Tool CRUD operations."""
print("\n POLYLINE TOOL:")
ref = None
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.AddRosettePolylineTool(tool)
print(" ✓ AddRosettePolylineTool")
tool_list = view.GetRosettePolylineToolList()
print(f" ✓ GetRosettePolylineToolList: {len(tool_list)} found")
if ref:
ref.SetRosettePolylineToolVisibility(True)
print(" ✓ SetRosettePolylineToolVisibility")
value = ref.GetValue()
value.name = "Updated Polyline"
ref.UpdateRosettePolylineTool(value)
print(" ✓ UpdateRosettePolylineTool")
ref.DeleteRosettePolylineTool()
print(" ✓ DeleteRosettePolylineTool")
def demonstrate_polygon_tool(view, model):
"""Demonstrate Polygon Tool CRUD operations."""
print("\n POLYGON TOOL:")
ref = None
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.AddRosettePolygonTool(tool)
print(" ✓ AddRosettePolygonTool")
tool_list = view.GetRosettePolygonToolList()
print(f" ✓ GetRosettePolygonToolList: {len(tool_list)} found")
if ref:
ref.SetRosettePolygonToolVisibility(True)
print(" ✓ SetRosettePolygonToolVisibility")
value = ref.GetValue()
value.name = "Updated Polygon"
ref.UpdateRosettePolygonTool(value)
print(" ✓ UpdateRosettePolygonTool")
ref.DeleteRosettePolygonTool()
print(" ✓ DeleteRosettePolygonTool")
def demonstrate_rectangle_tool(view, model):
"""Demonstrate Rectangle Tool CRUD operations."""
print("\n RECTANGLE TOOL:")
ref = None
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.AddRosetteRectangleTool(tool)
print(" ✓ AddRosetteRectangleTool")
tool_list = view.GetRosetteRectangleToolList()
print(f" ✓ GetRosetteRectangleToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteRectangleToolVisibility(True)
print(" ✓ SetRosetteRectangleToolVisibility")
value = ref.GetValue()
value.name = "Updated Rectangle"
ref.UpdateRosetteRectangleTool(value)
print(" ✓ UpdateRosetteRectangleTool")
ref.DeleteRosetteRectangleTool()
print(" ✓ DeleteRosetteRectangleTool")
def demonstrate_ellipse_tool(view, model):
"""Demonstrate Ellipse Tool CRUD operations."""
print("\n ELLIPSE TOOL:")
ref = None
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.AddRosetteEllipseTool(tool)
print(" ✓ AddRosetteEllipseTool")
tool_list = view.GetRosetteEllipseToolList()
print(f" ✓ GetRosetteEllipseToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteEllipseToolVisibility(True)
print(" ✓ SetRosetteEllipseToolVisibility")
value = ref.GetValue()
value.name = "Updated Ellipse"
ref.UpdateRosetteEllipseTool(value)
print(" ✓ UpdateRosetteEllipseTool")
ref.DeleteRosetteEllipseTool()
print(" ✓ DeleteRosetteEllipseTool")
def demonstrate_trendline_tool(view, model):
"""Demonstrate TrendLine Tool CRUD operations."""
print("\n TREND LINE TOOL:")
ref = None
tool = model.GetDefaultTrendLineToolEntityInfo()
tool.name = "Demo TrendLine"
tool.is_visible = True
tool.trend.angle_radians = math.radians(45)
ref = view.AddRosetteTrendLineTool(tool)
print(" ✓ AddRosetteTrendLineTool")
tool_list = view.GetRosetteTrendLineToolList()
print(f" ✓ GetRosetteTrendLineToolList: {len(tool_list)} found")
if ref:
ref.SetRosetteTrendLineToolVisibility(True)
print(" ✓ SetRosetteTrendLineToolVisibility")
value = ref.GetValue()
value.name = "Updated TrendLine"
ref.UpdateRosetteTrendLineTool(value)
print(" ✓ UpdateRosetteTrendLineTool")
ref.DeleteRosetteTrendLineTool()
print(" ✓ DeleteRosetteTrendLineTool")
def demonstrate_all_tools(view, model):
"""Demonstrate all 8 tool types."""
print("\n" + "=" * 60)
print("TOOL MANAGEMENT (All 8 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_trendline_tool(view, model)
# =============================================================================
# MAIN
# =============================================================================
def main():
"""Main demonstration function."""
print("=" * 60)
print("Dips API - Rosette Tools Demo")
print("=" * 60)
# Connect to Dips
print("\nConnecting to Dips application...")
app = DipsApp.LaunchApp(62535)
print("✓ Connected to Dips")
model = app.GetModel()
# Get or create a Rosette view
print("\n" + "-" * 60)
print("VIEW SETUP")
print("-" * 60)
views = model.GetRosetteViewList()
if views:
view = views[0]
print(f" Using existing view: '{view.GetValue().view_name}'")
else:
view = model.CreateRosetteView()
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 Rosette Tool services demonstrated (49 methods):
TOOL GROUP VISIBILITY (9 methods):
- SetToolsEntityGroupVisibility
- SetTextToolEntityGroupVisibility
- SetArrowToolEntityGroupVisibility
- SetLineToolEntityGroupVisibility
- SetPolylineToolEntityGroupVisibility
- SetPolygonToolEntityGroupVisibility
- SetRectangleToolEntityGroupVisibility
- SetEllipseToolEntityGroupVisibility
- SetTrendLineToolEntityGroupVisibility
TOOLS - 8 tool types, 5 methods each (40 methods):
Tool types: Text, Arrow, Line, Polyline, Polygon, Rectangle,
Ellipse, TrendLine
Methods per type:
- AddRosette[ToolType]Tool
- GetRosette[ToolType]ToolList
- UpdateRosette[ToolType]Tool
- DeleteRosette[ToolType]Tool
- SetRosette[ToolType]ToolVisibility
""")
if __name__ == "__main__":
main()