Stereonet 3D Demo#
Comprehensive demonstration of Stereonet3D functionality in Dips Python API.
This script demonstrates Stereonet3D services including: - View Management: Create, Get, Close views - Entity Visibility: Poles, Intersections, Contours, Global Planes, Overlay - Entity Options: Pole options, Intersection options, Contour settings - Group Visibility: Sets, Planes, Traverses, Folds - Legend and Display Settings: Weighted, VectorMode - Entity References: Get and set individual entity visibility/options - Data Filters: Get and set active filter
Note: Stereonet3D does not have Kinematic Analysis or Projection Mode settings.
Code Snippet: Stereonet3DDemo.py#
"""
Comprehensive demonstration of Stereonet3D functionality in Dips Python API.
This script demonstrates Stereonet3D services including:
- View Management: Create, Get, Close views
- Entity Visibility: Poles, Intersections, Contours, Global Planes, Overlay
- Entity Options: Pole options, Intersection options, Contour settings
- Group Visibility: Sets, Planes, Traverses, Folds
- Legend and Display Settings: Weighted, VectorMode
- Entity References: Get and set individual entity visibility/options
- Data Filters: Get and set active filter
Note: Stereonet3D does not have Kinematic Analysis or Projection Mode settings.
"""
import math
from dips import DipsApp, BuiltInDataFormatters
# Helper value wrappers
from dips.TrendPlungeVal import TrendPlungeVal
from dips.ColorSurrogateVal import ColorSurrogateVal
# Entity options and visibility wrappers
from dips.PoleEntityOptionsVal import PoleEntityOptionsVal
from dips.IntersectionOptionsVal import IntersectionOptionsVal
from dips.ContourEntityVisibilityVal import ContourEntityVisibilityVal
from dips.ContourOptionsVal import ContourOptionsVal
from dips.GlobalPlaneEntityVisibilityVal import GlobalPlaneEntityVisibilityVal
from dips.StereonetOverlayEntityVisibilityVal import StereonetOverlayEntityVisibilityVal
from dips.StereonetOverlaySettingsVal import StereonetOverlaySettingsVal
from dips.VectorDensityContourSettingsVal import VectorDensityContourSettingsVal
from dips.QuantitativeContourSettingsVal import QuantitativeContourSettingsVal
from dips.SetVersusSetVal import SetVersusSetVal
from dips.FoldEntityOptionsVal import FoldEntityOptionsVal
from dips.SetEntityOptionsVal import SetEntityOptionsVal
from dips.UserPlaneEntityOptionsVal import UserPlaneEntityOptionsVal
from dips.TraverseEntityOptionsVal import TraverseEntityOptionsVal
# Data wrappers
from dips.DiscontinuityDataVal import DiscontinuityDataVal
from dips.OrientationDataSetVal import OrientationDataSetVal
# =============================================================================
# SAMPLE DATA CREATION
# =============================================================================
def create_sample_traverse_with_poles(model):
"""Create a sample traverse with discontinuities (poles) for demonstration."""
ods = model.GetDefaultOrientationDataSet()
ods.name = "Sample Traverse for Stereonet3D Demo"
ods.orientation_convention = DipsApp.enums.eOrientationConvention.TrendPlungeOrientation
ods.orientation_data_type = DipsApp.enums.eOrientationDataType.SpotMapping
ods.discontinuity_orientation_convention = DipsApp.enums.eOrientationConvention.TrendPlungeOrientation
# Use built-in unit formatters
ods.traverse_elevation_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.traverse_xyz_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.traverse_depth_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.survey_distance_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.discontinuity_distance_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.discontinuity_xyz_unit = BuiltInDataFormatters.LengthMeterDataFormatter
ods.discontinuity_persistence_unit = BuiltInDataFormatters.LengthMeterDataFormatter
# Create sample poles with different orientations
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()
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)
return ods
# =============================================================================
# VIEW MANAGEMENT DEMONSTRATIONS
# =============================================================================
def demonstrate_view_management(model):
"""Demonstrate view creation and listing."""
print("\n" + "=" * 60)
print("VIEW MANAGEMENT")
print("=" * 60)
# Get existing views
views = model.GetStereonet3DViewList()
print(f" Found {len(views)} existing Stereonet3D view(s)")
# Create a new view
print(" Creating new Stereonet3D view...")
new_view = model.CreateStereonet3DView()
view_value = new_view.GetValue()
print(f" ✓ Created view: '{view_value.view_name}'")
return new_view
# =============================================================================
# ENTITY VISIBILITY DEMONSTRATIONS
# =============================================================================
def demonstrate_entity_visibility(view):
"""Demonstrate all entity visibility settings."""
print("\n" + "=" * 60)
print("ENTITY VISIBILITY")
print("=" * 60)
view.SetPoleEntityVisibility(True)
print(" ✓ SetPoleEntityVisibility: True")
view.SetIntersectionEntityVisibility(True)
print(" ✓ SetIntersectionEntityVisibility: True")
view.SetContourEntityVisibility(True)
print(" ✓ SetContourEntityVisibility: True")
view.SetGlobalMeanPlaneEntityVisibility(True)
print(" ✓ SetGlobalMeanPlaneEntityVisibility: True")
view.SetGlobalBestFitPlaneEntityVisibility(True)
print(" ✓ SetGlobalBestFitPlaneEntityVisibility: True")
view.SetStereonetOverlayEntityVisibility(True)
print(" ✓ SetStereonetOverlayEntityVisibility: True")
# =============================================================================
# ENTITY OPTIONS DEMONSTRATIONS
# =============================================================================
def demonstrate_pole_options(view, model):
"""Demonstrate pole entity options."""
print("\n" + "=" * 60)
print("POLE OPTIONS")
print("=" * 60)
pole_options = PoleEntityOptionsVal()
pole_options.pole_mode = DipsApp.enums.ePoleMode.Vector
pole_options.show_pole_planes = False
pole_options.show_pole_vector_lines = True
view.SetPoleEntityOptions(pole_options)
print(" ✓ SetPoleEntityOptions (Vector mode)")
def demonstrate_intersection_options(view, model):
"""Demonstrate intersection entity options."""
print("\n" + "=" * 60)
print("INTERSECTION OPTIONS")
print("=" * 60)
intersection_options = model.GetDefaultIntersectionOptions()
view.SetIntersectionEntityOptions(intersection_options)
print(" ✓ SetIntersectionEntityOptions")
view.SetIntersectionType(DipsApp.enums.eIntersectionType.AllPoleIntersections)
print(" ✓ SetIntersectionType (AllPoleIntersections)")
sets = model.GetSetList()
if len(sets) >= 2:
set_vs_set = SetVersusSetVal()
set_vs_set.set_a = sets[0]
set_vs_set.set_b = sets[1]
view.SetSetVersusSet(set_vs_set)
print(" ✓ SetSetVersusSet")
else:
print(" - SetSetVersusSet (needs 2+ sets)")
def demonstrate_contour_options(view, model):
"""Demonstrate contour entity options and settings."""
print("\n" + "=" * 60)
print("CONTOUR OPTIONS")
print("=" * 60)
contour_visibility = ContourEntityVisibilityVal()
contour_visibility.is_visible = True
view.SetContourEntityOptions(contour_visibility)
print(" ✓ SetContourEntityOptions")
view.SetContourType(DipsApp.enums.eContourType.PoleVectorDensity)
print(" ✓ SetContourType (PoleVectorDensity)")
density_settings = model.GetDefaultVectorDensityContourSettings()
view.SetPoleVectorDensityContourSettings(density_settings)
print(" ✓ SetPoleVectorDensityContourSettings")
density_settings = model.GetDefaultVectorDensityContourSettings()
view.SetIntersectionVectorDensityContourSettings(density_settings)
print(" ✓ SetIntersectionVectorDensityContourSettings")
quant_settings = model.GetDefaultQuantitativeContourSettings()
view.SetQuantitativeContourSettings(quant_settings)
print(" ✓ SetQuantitativeContourSettings")
contour_options = model.GetDefaultContourOptions()
view.SetPoleVectorContourOptions(contour_options)
print(" ✓ SetPoleVectorContourOptions")
contour_options = model.GetDefaultContourOptions()
view.SetIntersectionVectorContourOptions(contour_options)
print(" ✓ SetIntersectionVectorContourOptions")
contour_options = model.GetDefaultContourOptions()
view.SetQuantitativeContourOptions(contour_options)
print(" ✓ SetQuantitativeContourOptions")
def demonstrate_global_plane_options(view):
"""Demonstrate global plane options."""
print("\n" + "=" * 60)
print("GLOBAL PLANE OPTIONS")
print("=" * 60)
global_mean = GlobalPlaneEntityVisibilityVal()
global_mean.is_visible = True
view.SetGlobalMeanPlaneEntityOptions(global_mean)
print(" ✓ SetGlobalMeanPlaneEntityOptions")
global_best_fit = GlobalPlaneEntityVisibilityVal()
global_best_fit.is_visible = True
view.SetGlobalBestFitPlaneEntityOptions(global_best_fit)
print(" ✓ SetGlobalBestFitPlaneEntityOptions")
def demonstrate_stereonet_overlay(view):
"""Demonstrate stereonet overlay options."""
print("\n" + "=" * 60)
print("STEREONET OVERLAY")
print("=" * 60)
overlay_visibility = StereonetOverlayEntityVisibilityVal()
overlay_visibility.is_visible = True
overlay_settings = StereonetOverlaySettingsVal()
overlay_settings.option = DipsApp.enums.eStereonetOverlayOption.Polar
overlay_settings.color = ColorSurrogateVal.FromRGBA(128, 128, 128)
overlay_visibility.stereonet_overlay_settings = overlay_settings
view.SetStereonetOverlayEntityOptions(overlay_visibility)
print(" ✓ SetStereonetOverlayEntityOptions (Polar)")
overlay_visibility = StereonetOverlayEntityVisibilityVal()
overlay_visibility.is_visible = True
overlay_settings = StereonetOverlaySettingsVal()
overlay_settings.option = DipsApp.enums.eStereonetOverlayOption.Equatorial
overlay_settings.color = ColorSurrogateVal.FromRGBA(0, 0, 255)
overlay_visibility.stereonet_overlay_settings = overlay_settings
view.SetStereonetOverlayEntityOptions(overlay_visibility)
print(" ✓ SetStereonetOverlayEntityOptions (Equatorial)")
overlay_visibility = StereonetOverlayEntityVisibilityVal()
overlay_visibility.is_visible = True
overlay_settings = StereonetOverlaySettingsVal()
overlay_settings.option = DipsApp.enums.eStereonetOverlayOption.CustomOverlay
overlay_settings.color = ColorSurrogateVal.FromRGBA(255, 0, 0)
overlay_settings.custom_orientation = TrendPlungeVal.FromTrendPlunge(45, 60)
overlay_visibility.stereonet_overlay_settings = overlay_settings
view.SetStereonetOverlayEntityOptions(overlay_visibility)
print(" ✓ SetStereonetOverlayEntityOptions (Custom)")
# =============================================================================
# GROUP VISIBILITY DEMONSTRATIONS
# =============================================================================
def demonstrate_group_visibility(view):
"""Demonstrate all group visibility settings."""
print("\n" + "=" * 60)
print("GROUP VISIBILITY")
print("=" * 60)
view.SetSetWindowEntityGroupVisibility(True)
print(" ✓ SetSetWindowEntityGroupVisibility: True")
view.SetMeanSetPlaneEntityGroupVisibility(True)
print(" ✓ SetMeanSetPlaneEntityGroupVisibility: True")
view.SetUserPlaneEntityGroupVisibility(True)
print(" ✓ SetUserPlaneEntityGroupVisibility: True")
view.SetTraverseEntityGroupVisibility(True)
print(" ✓ SetTraverseEntityGroupVisibility: True")
view.SetFoldWindowEntityGroupVisibility(True)
print(" ✓ SetFoldWindowEntityGroupVisibility: True")
view.SetBestFitFoldPlaneEntityGroupVisibility(True)
print(" ✓ SetBestFitFoldPlaneEntityGroupVisibility: True")
# =============================================================================
# LEGEND AND DISPLAY SETTINGS
# =============================================================================
def demonstrate_legend_and_settings(view):
"""Demonstrate legend and display settings."""
print("\n" + "=" * 60)
print("LEGEND AND DISPLAY SETTINGS")
print("=" * 60)
view.SetLegendVisibility(True)
print(" ✓ SetLegendVisibility: True")
view.SetIsWeighted(False)
print(" ✓ SetIsWeighted: False")
view.SetVectorMode(DipsApp.enums.eVectorMode.Pole)
print(" ✓ SetVectorMode: Pole")
# =============================================================================
# ENTITY REFERENCE DEMONSTRATIONS
# =============================================================================
def demonstrate_entity_references(view):
"""Demonstrate getting and setting entity references."""
print("\n" + "=" * 60)
print("ENTITY REFERENCES")
print("=" * 60)
entities = view.GetSetWindowEntityVisibilityList()
print(f" ✓ GetSetWindowEntityVisibilityList: {len(entities)} found")
entities = view.GetMeanSetPlaneEntityVisibilityList()
print(f" ✓ GetMeanSetPlaneEntityVisibilityList: {len(entities)} found")
entities = view.GetUserPlaneEntityVisibilityList()
print(f" ✓ GetUserPlaneEntityVisibilityList: {len(entities)} found")
entities = view.GetTraverseEntityVisibilityList()
print(f" ✓ GetTraverseEntityVisibilityList: {len(entities)} found")
entities = view.GetFoldWindowEntityVisibilityList()
print(f" ✓ GetFoldWindowEntityVisibilityList: {len(entities)} found")
entities = view.GetBestFitFoldPlaneEntityVisibilityList()
print(f" ✓ GetBestFitFoldPlaneEntityVisibilityList: {len(entities)} found")
def demonstrate_individual_entity_visibility(view):
"""Demonstrate setting visibility and options for individual entities."""
print("\n" + "=" * 60)
print("INDIVIDUAL ENTITY VISIBILITY/OPTIONS")
print("=" * 60)
entities = view.GetSetWindowEntityVisibilityList()
if entities:
entities[0].SetStereonet3DSetWindowEntityVisibility(True)
print(" ✓ SetStereonet3DSetWindowEntityVisibility: True")
else:
print(" - SetStereonet3DSetWindowEntityVisibility: No set windows available")
entities = view.GetMeanSetPlaneEntityVisibilityList()
if entities:
entities[0].SetStereonet3DMeanSetPlaneEntityVisibility(True)
print(" ✓ SetStereonet3DMeanSetPlaneEntityVisibility: True")
opts = SetEntityOptionsVal()
opts.show_label = True
entities[0].SetMeanSetPlaneEntityOptions(opts)
print(" ✓ SetStereonet3DMeanSetPlaneEntityOptions")
else:
print(" - SetStereonet3DMeanSetPlaneEntityVisibility: No mean set planes available")
entities = view.GetUserPlaneEntityVisibilityList()
if entities:
entities[0].SetStereonet3DUserPlaneEntityVisibility(True)
print(" ✓ SetStereonet3DUserPlaneEntityVisibility: True")
opts = UserPlaneEntityOptionsVal()
opts.show_label = True
entities[0].SetStereonet3DUserPlaneEntityOptions(opts)
print(" ✓ SetStereonet3DUserPlaneEntityOptions")
else:
print(" - SetStereonet3DUserPlaneEntityVisibility: No user planes available")
entities = view.GetTraverseEntityVisibilityList()
if entities:
entities[0].SetStereonet3DTraverseEntityVisibility(True)
print(" ✓ SetStereonet3DTraverseEntityVisibility: True")
opts = TraverseEntityOptionsVal()
opts.show_label = True
entities[0].SetStereonet3DTraverseEntityOptions(opts)
print(" ✓ SetStereonet3DTraverseEntityOptions")
else:
print(" - SetStereonet3DTraverseEntityVisibility: No traverses available")
entities = view.GetFoldWindowEntityVisibilityList()
if entities:
entities[0].SetStereonet3DFoldWindowEntityVisibility(True)
print(" ✓ SetStereonet3DFoldWindowEntityVisibility: True")
else:
print(" - SetStereonet3DFoldWindowEntityVisibility: No fold windows available")
entities = view.GetBestFitFoldPlaneEntityVisibilityList()
if entities:
entities[0].SetStereonet3DFoldEntityVisibility(True)
print(" ✓ SetStereonet3DFoldEntityVisibility: True")
opts = FoldEntityOptionsVal()
opts.show_label = True
entities[0].SetStereonet3DFoldEntityOptions(opts)
print(" ✓ SetStereonet3DFoldEntityOptions")
else:
print(" - SetStereonet3DFoldEntityVisibility: No fold entities available")
# =============================================================================
# DATA FILTER DEMONSTRATIONS
# =============================================================================
def demonstrate_active_data_filter(view, model):
"""Demonstrate active data filter management."""
print("\n" + "=" * 60)
print("ACTIVE DATA FILTER")
print("=" * 60)
active_filter = view.GetActiveDataFilter()
if active_filter:
filter_value = active_filter.GetValue()
print(f" ✓ GetActiveDataFilter: '{filter_value.name}'")
else:
print(" ✓ GetActiveDataFilter: None (no active filter)")
filters = model.GetDataFilterList()
if filters:
view.SetActiveDataFilter(filters[0])
filter_value = filters[0].GetValue()
print(f" ✓ SetActiveDataFilter: '{filter_value.name}'")
else:
print(" - SetActiveDataFilter: No filters available")
# =============================================================================
# VIEW CLOSE DEMONSTRATION
# =============================================================================
def demonstrate_close_view(view):
"""Demonstrate closing a view."""
print("\n" + "=" * 60)
print("CLOSE VIEW")
print("=" * 60)
view_value = view.GetValue()
view_name = view_value.view_name
view.CloseStereonet3DView()
print(f" ✓ CloseStereonet3DView: '{view_name}'")
# =============================================================================
# MAIN
# =============================================================================
def main():
"""Main demonstration function."""
print("=" * 60)
print("Dips API - Stereonet3D Comprehensive Demo")
print("=" * 60)
# Connect to Dips
print("\nConnecting to Dips application...")
app = DipsApp.LaunchApp(62535)
print("✓ Connected to Dips")
model = app.GetModel()
# Create sample data if needed
print("\n" + "-" * 60)
print("SAMPLE DATA SETUP")
print("-" * 60)
traverses = model.GetTraverseList()
if len(traverses) == 0:
print("Creating sample traverse with poles...")
ods = create_sample_traverse_with_poles(model)
model.AddTraverse(ods)
print(f" ✓ Created traverse with {len(ods.discontinuity_list)} poles")
else:
print(f" ✓ Found {len(traverses)} existing traverse(s)")
# Get or create a view
views = model.GetStereonet3DViewList()
if views:
view = views[0]
print(f" Using existing view: '{view.GetValue().view_name}'")
else:
view = demonstrate_view_management(model)
# Run all demonstrations
demonstrate_entity_visibility(view)
demonstrate_pole_options(view, model)
demonstrate_intersection_options(view, model)
demonstrate_contour_options(view, model)
demonstrate_global_plane_options(view)
demonstrate_stereonet_overlay(view)
demonstrate_group_visibility(view)
demonstrate_legend_and_settings(view)
demonstrate_entity_references(view)
demonstrate_individual_entity_visibility(view)
demonstrate_active_data_filter(view, model)
# Create and close a new view to demonstrate view lifecycle
print("\n" + "-" * 60)
print("VIEW LIFECYCLE DEMO")
print("-" * 60)
new_view = model.CreateStereonet3DView()
print(f" ✓ Created new view: '{new_view.GetValue().view_name}'")
demonstrate_close_view(new_view)
# Show the application
print("\n" + "-" * 60)
app.Show()
# Summary
print("\n" + "=" * 60)
print("DEMONSTRATION COMPLETE")
print("=" * 60)
print("""
Stereonet3D services demonstrated (47 methods):
VIEW MANAGEMENT (3 methods):
- GetStereonet3DViewList
- CreateStereonet3DView
- CloseStereonet3DView
ENTITY VISIBILITY (6 methods):
- SetPoleEntityVisibility
- SetIntersectionEntityVisibility
- SetContourEntityVisibility
- SetGlobalMeanPlaneEntityVisibility
- SetGlobalBestFitPlaneEntityVisibility
- SetStereonetOverlayEntityVisibility
ENTITY OPTIONS (12 methods):
- SetPoleEntityOptions
- SetIntersectionEntityOptions
- SetIntersectionType
- SetSetVersusSet
- SetContourEntityOptions
- SetContourType
- SetPoleVectorDensityContourSettings
- SetIntersectionVectorDensityContourSettings
- SetQuantitativeContourSettings
- SetPoleVectorContourOptions
- SetIntersectionVectorContourOptions
- SetQuantitativeContourOptions
- SetGlobalMeanPlaneEntityOptions
- SetGlobalBestFitPlaneEntityOptions
- SetStereonetOverlayEntityOptions
GROUP VISIBILITY (6 methods):
- SetSetWindowEntityGroupVisibility
- SetMeanSetPlaneEntityGroupVisibility
- SetUserPlaneEntityGroupVisibility
- SetTraverseEntityGroupVisibility
- SetFoldWindowEntityGroupVisibility
- SetBestFitFoldPlaneEntityGroupVisibility
LEGEND AND SETTINGS (3 methods):
- SetLegendVisibility
- SetIsWeighted
- SetVectorMode
ENTITY REFERENCE LISTS (6 methods):
- GetSetWindowEntityVisibilityList
- GetMeanSetPlaneEntityVisibilityList
- GetUserPlaneEntityVisibilityList
- GetTraverseEntityVisibilityList
- GetFoldWindowEntityVisibilityList
- GetBestFitFoldPlaneEntityVisibilityList
INDIVIDUAL ENTITY VISIBILITY/OPTIONS (10 methods):
- SetStereonet3DSetWindowEntityVisibility
- SetStereonet3DMeanSetPlaneEntityVisibility
- SetStereonet3DMeanSetPlaneEntityOptions
- SetStereonet3DUserPlaneEntityVisibility
- SetStereonet3DUserPlaneEntityOptions
- SetStereonet3DTraverseEntityVisibility
- SetStereonet3DTraverseEntityOptions
- SetStereonet3DFoldWindowEntityVisibility
- SetStereonet3DFoldEntityVisibility
- SetStereonet3DFoldEntityOptions
DATA FILTER (2 methods):
- GetActiveDataFilter
- SetActiveDataFilter
""")
if __name__ == "__main__":
main()