OpenGeodeWeb-Viewer 1.32.1rc1__tar.gz → 1.33.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/PKG-INFO +1 -1
  2. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/pyproject.toml +1 -1
  3. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/PKG-INFO +1 -1
  4. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/SOURCES.txt +4 -1
  5. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/__init__.py +1 -0
  6. opengeodeweb_viewer-1.33.0/src/opengeodeweb_viewer/rpc/viewer/schemas/explode.json +30 -0
  7. opengeodeweb_viewer-1.33.0/src/opengeodeweb_viewer/rpc/viewer/schemas/explode.py +31 -0
  8. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +5 -0
  9. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/vtk_pipeline.py +132 -6
  10. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/vtk_protocol.py +13 -0
  11. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/tests/test_viewer_protocols.py +12 -0
  12. opengeodeweb_viewer-1.33.0/tests/test_vtk_pipeline.py +206 -0
  13. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/LICENSE +0 -0
  14. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/README.md +0 -0
  15. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/requirements.txt +0 -0
  16. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/setup.cfg +0 -0
  17. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/dependency_links.txt +0 -0
  18. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/entry_points.txt +0 -0
  19. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/requires.txt +0 -0
  20. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/OpenGeodeWeb_Viewer.egg-info/top_level.txt +0 -0
  21. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/__init__.py +0 -0
  22. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/app.py +0 -0
  23. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/config.py +0 -0
  24. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/object/object_methods.py +0 -0
  25. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/py.typed +0 -0
  26. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/generic_protocols.py +0 -0
  27. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/schemas/__init__.py +0 -0
  28. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/schemas/deregister.json +0 -0
  29. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/schemas/deregister.py +0 -0
  30. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/schemas/register.json +0 -0
  31. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/generic/schemas/register.py +0 -0
  32. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/cell/cells_attribute_cell_protocols.py +0 -0
  33. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/cell/schemas/__init__.py +0 -0
  34. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/cell/schemas/attribute.json +0 -0
  35. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/cell/schemas/attribute.py +0 -0
  36. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/vertex/cells_attribute_vertex_protocols.py +0 -0
  37. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/vertex/schemas/__init__.py +0 -0
  38. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/vertex/schemas/attribute.json +0 -0
  39. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/attribute/vertex/schemas/attribute.py +0 -0
  40. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/cells_protocols.py +0 -0
  41. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/__init__.py +0 -0
  42. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/color.json +0 -0
  43. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/color.py +0 -0
  44. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/visibility.json +0 -0
  45. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/cells/schemas/visibility.py +0 -0
  46. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/edge/edges_attribute_edge_protocols.py +0 -0
  47. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/edge/schemas/__init__.py +0 -0
  48. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/edge/schemas/attribute.json +0 -0
  49. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/edge/schemas/attribute.py +0 -0
  50. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/vertex/edges_attribute_vertex_protocols.py +0 -0
  51. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/vertex/schemas/__init__.py +0 -0
  52. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/vertex/schemas/attribute.json +0 -0
  53. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/attribute/vertex/schemas/attribute.py +0 -0
  54. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/edges_protocols.py +0 -0
  55. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/__init__.py +0 -0
  56. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/color.json +0 -0
  57. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/color.py +0 -0
  58. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/visibility.json +0 -0
  59. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/visibility.py +0 -0
  60. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.json +0 -0
  61. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/edges/schemas/width.py +0 -0
  62. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +0 -0
  63. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/attribute/vertex/points_attribute_vertex_protocols.py +0 -0
  64. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/attribute/vertex/schemas/__init__.py +0 -0
  65. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/attribute/vertex/schemas/attribute.json +0 -0
  66. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/attribute/vertex/schemas/attribute.py +0 -0
  67. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +0 -0
  68. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/__init__.py +0 -0
  69. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/color.json +0 -0
  70. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/color.py +0 -0
  71. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/size.json +0 -0
  72. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/size.py +0 -0
  73. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/visibility.json +0 -0
  74. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/points/schemas/visibility.py +0 -0
  75. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/polygon/polygons_attribute_polygon_protocols.py +0 -0
  76. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/polygon/schemas/__init__.py +0 -0
  77. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/polygon/schemas/attribute.json +0 -0
  78. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/polygon/schemas/attribute.py +0 -0
  79. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/vertex/polygons_attribute_vertex_protocols.py +0 -0
  80. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/vertex/schemas/__init__.py +0 -0
  81. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/vertex/schemas/attribute.json +0 -0
  82. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/attribute/vertex/schemas/attribute.py +0 -0
  83. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py +0 -0
  84. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/__init__.py +0 -0
  85. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/color.json +0 -0
  86. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/color.py +0 -0
  87. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/visibility.json +0 -0
  88. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polygons/schemas/visibility.py +0 -0
  89. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/polyhedron/polyhedra_attribute_polyhedron_protocols.py +0 -0
  90. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/polyhedron/schemas/__init__.py +0 -0
  91. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/polyhedron/schemas/attribute.json +0 -0
  92. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/polyhedron/schemas/attribute.py +0 -0
  93. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/vertex/polyhedra_attribute_vertex_protocols.py +0 -0
  94. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/vertex/schemas/__init__.py +0 -0
  95. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/vertex/schemas/attribute.json +0 -0
  96. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/attribute/vertex/schemas/attribute.py +0 -0
  97. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py +0 -0
  98. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/__init__.py +0 -0
  99. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/color.json +0 -0
  100. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/color.py +0 -0
  101. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/visibility.json +0 -0
  102. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/polyhedra/schemas/visibility.py +0 -0
  103. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/__init__.py +0 -0
  104. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/apply_textures.json +0 -0
  105. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/apply_textures.py +0 -0
  106. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/color.json +0 -0
  107. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/color.py +0 -0
  108. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/deregister.json +0 -0
  109. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/deregister.py +0 -0
  110. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/highlight.json +0 -0
  111. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/highlight.py +0 -0
  112. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/register.json +0 -0
  113. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/register.py +0 -0
  114. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/visibility.json +0 -0
  115. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/mesh/schemas/visibility.py +0 -0
  116. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/polyhedron/blocks_attribute_polyhedron_protocols.py +0 -0
  117. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/polyhedron/schemas/__init__.py +0 -0
  118. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/polyhedron/schemas/attribute.json +0 -0
  119. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/polyhedron/schemas/attribute.py +0 -0
  120. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/vertex/blocks_attribute_vertex_protocols.py +0 -0
  121. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/vertex/schemas/__init__.py +0 -0
  122. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/vertex/schemas/attribute.json +0 -0
  123. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/attribute/vertex/schemas/attribute.py +0 -0
  124. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py +0 -0
  125. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/schemas/__init__.py +0 -0
  126. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/schemas/color.json +0 -0
  127. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/schemas/color.py +0 -0
  128. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/schemas/visibility.json +0 -0
  129. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/blocks/schemas/visibility.py +0 -0
  130. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/attribute/vertex/corners_attribute_vertex_protocols.py +0 -0
  131. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/attribute/vertex/schemas/__init__.py +0 -0
  132. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/attribute/vertex/schemas/attribute.json +0 -0
  133. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/attribute/vertex/schemas/attribute.py +0 -0
  134. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py +0 -0
  135. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/schemas/__init__.py +0 -0
  136. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/schemas/color.json +0 -0
  137. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/schemas/color.py +0 -0
  138. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/schemas/visibility.json +0 -0
  139. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/corners/schemas/visibility.py +0 -0
  140. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py +0 -0
  141. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/edges/schemas/__init__.py +0 -0
  142. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/edges/schemas/visibility.json +0 -0
  143. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/edges/schemas/visibility.py +0 -0
  144. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/edge/lines_attribute_edge_protocols.py +0 -0
  145. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/edge/schemas/__init__.py +0 -0
  146. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/edge/schemas/attribute.json +0 -0
  147. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/edge/schemas/attribute.py +0 -0
  148. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/vertex/lines_attribute_vertex_protocols.py +0 -0
  149. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/vertex/schemas/__init__.py +0 -0
  150. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/vertex/schemas/attribute.json +0 -0
  151. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/attribute/vertex/schemas/attribute.py +0 -0
  152. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py +0 -0
  153. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/schemas/__init__.py +0 -0
  154. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/schemas/color.json +0 -0
  155. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/schemas/color.py +0 -0
  156. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/schemas/visibility.json +0 -0
  157. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/lines/schemas/visibility.py +0 -0
  158. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/model_protocols.py +0 -0
  159. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py +0 -0
  160. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/schemas/__init__.py +0 -0
  161. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/schemas/size.json +0 -0
  162. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/schemas/size.py +0 -0
  163. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/schemas/visibility.json +0 -0
  164. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/points/schemas/visibility.py +0 -0
  165. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/__init__.py +0 -0
  166. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/deregister.json +0 -0
  167. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/deregister.py +0 -0
  168. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/get_blocks_bounds.json +0 -0
  169. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/get_blocks_bounds.py +0 -0
  170. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/highlight.json +0 -0
  171. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/highlight.py +0 -0
  172. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/register.json +0 -0
  173. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/register.py +0 -0
  174. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/visibility.json +0 -0
  175. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/schemas/visibility.py +0 -0
  176. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/polygon/schemas/__init__.py +0 -0
  177. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/polygon/schemas/attribute.json +0 -0
  178. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/polygon/schemas/attribute.py +0 -0
  179. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/polygon/surfaces_attribute_polygon_protocols.py +0 -0
  180. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/vertex/schemas/__init__.py +0 -0
  181. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/vertex/schemas/attribute.json +0 -0
  182. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/vertex/schemas/attribute.py +0 -0
  183. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/attribute/vertex/surfaces_attribute_vertex_protocols.py +0 -0
  184. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py +0 -0
  185. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/__init__.py +0 -0
  186. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/apply_textures.json +0 -0
  187. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/apply_textures.py +0 -0
  188. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/color.json +0 -0
  189. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/color.py +0 -0
  190. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/visibility.json +0 -0
  191. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/model/surfaces/schemas/visibility.py +0 -0
  192. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/__init__.py +0 -0
  193. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/import_project.json +0 -0
  194. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/import_project.py +0 -0
  195. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/kill.json +0 -0
  196. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/kill.py +0 -0
  197. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/release_database.json +0 -0
  198. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/schemas/release_database.py +0 -0
  199. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/utils_protocols.py +0 -0
  200. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/axes.json +0 -0
  201. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/axes.py +0 -0
  202. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/clipping_planes.json +0 -0
  203. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/clipping_planes.py +0 -0
  204. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/get_point_position.json +0 -0
  205. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/get_point_position.py +0 -0
  206. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/grid_scale.json +0 -0
  207. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/grid_scale.py +0 -0
  208. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/highlight.json +0 -0
  209. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/highlight.py +0 -0
  210. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/pick_colormap.json +0 -0
  211. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/pick_colormap.py +0 -0
  212. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/picked_ids.json +0 -0
  213. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/picked_ids.py +0 -0
  214. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/preview_points.json +0 -0
  215. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/preview_points.py +0 -0
  216. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/render.json +0 -0
  217. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/render.py +0 -0
  218. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_camera.json +0 -0
  219. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_camera.py +0 -0
  220. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_ruler.json +0 -0
  221. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_ruler.py +0 -0
  222. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_visualization.json +0 -0
  223. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/reset_visualization.py +0 -0
  224. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/ruler.json +0 -0
  225. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/ruler.py +0 -0
  226. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/set_background_color.json +0 -0
  227. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/set_background_color.py +0 -0
  228. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.json +0 -0
  229. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/set_z_scaling.py +0 -0
  230. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/shrink.json +0 -0
  231. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/shrink.py +0 -0
  232. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/slice.json +0 -0
  233. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/slice.py +0 -0
  234. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/take_screenshot.json +0 -0
  235. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/take_screenshot.py +0 -0
  236. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/threshold.json +0 -0
  237. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/threshold.py +0 -0
  238. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/update_camera.json +0 -0
  239. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/update_camera.py +0 -0
  240. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/update_data.json +0 -0
  241. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/rpc/viewer/schemas/update_data.py +0 -0
  242. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/typed_rpc.py +0 -0
  243. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/src/opengeodeweb_viewer/utils_functions.py +0 -0
  244. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/tests/test_generic_protocols.py +0 -0
  245. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/tests/test_typed_rpcs.py +0 -0
  246. {opengeodeweb_viewer-1.32.1rc1 → opengeodeweb_viewer-1.33.0}/tests/test_utils_protocols.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Viewer
3
- Version: 1.32.1rc1
3
+ Version: 1.33.0
4
4
  Summary: OpenGeodeWeb-Viewer is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Viewer
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "OpenGeodeWeb-Viewer"
8
- version = "1.32.1-rc.1"
8
+ version = "1.33.0"
9
9
  dynamic = ["dependencies"]
10
10
  authors = [{ name = "Geode-solutions", email = "team-web@geode-solutions.com" }]
11
11
  description = "OpenGeodeWeb-Viewer is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Viewer
3
- Version: 1.32.1rc1
3
+ Version: 1.33.0
4
4
  Summary: OpenGeodeWeb-Viewer is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Viewer
@@ -197,6 +197,8 @@ src/opengeodeweb_viewer/rpc/viewer/schemas/axes.json
197
197
  src/opengeodeweb_viewer/rpc/viewer/schemas/axes.py
198
198
  src/opengeodeweb_viewer/rpc/viewer/schemas/clipping_planes.json
199
199
  src/opengeodeweb_viewer/rpc/viewer/schemas/clipping_planes.py
200
+ src/opengeodeweb_viewer/rpc/viewer/schemas/explode.json
201
+ src/opengeodeweb_viewer/rpc/viewer/schemas/explode.py
200
202
  src/opengeodeweb_viewer/rpc/viewer/schemas/get_point_position.json
201
203
  src/opengeodeweb_viewer/rpc/viewer/schemas/get_point_position.py
202
204
  src/opengeodeweb_viewer/rpc/viewer/schemas/grid_scale.json
@@ -238,4 +240,5 @@ src/opengeodeweb_viewer/rpc/viewer/schemas/update_data.py
238
240
  tests/test_generic_protocols.py
239
241
  tests/test_typed_rpcs.py
240
242
  tests/test_utils_protocols.py
241
- tests/test_viewer_protocols.py
243
+ tests/test_viewer_protocols.py
244
+ tests/test_vtk_pipeline.py
@@ -17,5 +17,6 @@ from .pick_colormap import *
17
17
  from .highlight import *
18
18
  from .grid_scale import *
19
19
  from .get_point_position import *
20
+ from .explode import *
20
21
  from .clipping_planes import *
21
22
  from .axes import *
@@ -0,0 +1,30 @@
1
+ {
2
+ "rpc": "explode",
3
+ "type": "object",
4
+ "properties": {
5
+ "ids": {
6
+ "type": "array",
7
+ "items": {
8
+ "type": "string",
9
+ "minLength": 32,
10
+ "maxLength": 32
11
+ }
12
+ },
13
+ "explode_factor": {
14
+ "type": "number",
15
+ "minimum": 0,
16
+ "maximum": 1
17
+ }
18
+ },
19
+ "required": [
20
+ "ids",
21
+ "explode_factor"
22
+ ],
23
+ "additionalProperties": false,
24
+ "response": {
25
+ "type": "object",
26
+ "properties": {},
27
+ "required": [],
28
+ "additionalProperties": false
29
+ }
30
+ }
@@ -0,0 +1,31 @@
1
+ from opengeodeweb_microservice.schemas import Route, load_schema
2
+ from dataclasses_json import DataClassJsonMixin
3
+ from opengeodeweb_microservice.schemas import print_dataclass
4
+ from dataclasses import dataclass
5
+ from typing import List
6
+
7
+
8
+ @dataclass
9
+ class Explode(DataClassJsonMixin):
10
+ def __post_init__(self) -> None:
11
+ print_dataclass(self)
12
+
13
+ explode_factor: float
14
+ ids: List[str]
15
+
16
+
17
+ @dataclass
18
+ class ExplodeResponse(DataClassJsonMixin):
19
+ def __post_init__(self) -> None:
20
+ print_dataclass(self)
21
+
22
+ pass
23
+
24
+
25
+ explode_route = Route(
26
+ schema=load_schema(__file__),
27
+ params=Explode,
28
+ response=ExplodeResponse,
29
+ )
30
+
31
+ __all__ = ["Explode", "ExplodeResponse", "explode_route"]
@@ -334,6 +334,11 @@ class VtkViewerView(VtkView):
334
334
  self.set_shrink(params.ids, params.shrink_factor)
335
335
  return schemas.ShrinkResponse()
336
336
 
337
+ @typed_rpc(viewer_prefix, schemas.explode_route)
338
+ def setExplode(self, params: schemas.Explode) -> schemas.ExplodeResponse:
339
+ self.set_explode(params.ids, params.explode_factor)
340
+ return schemas.ExplodeResponse()
341
+
337
342
  @typed_rpc(viewer_prefix, schemas.slice_route)
338
343
  def setSlice(self, params: schemas.Slice) -> schemas.SliceResponse:
339
344
  return schemas.SliceResponse(
@@ -23,6 +23,8 @@ from vtkmodules.vtkRenderingAnnotation import (
23
23
  from vtkmodules.vtkRenderingFreeType import vtkVectorText
24
24
  from vtkmodules.vtkFiltersSources import vtkLineSource, vtkSphereSource
25
25
  from vtkmodules.vtkCommonDataModel import (
26
+ vtkBoundingBox,
27
+ vtkCompositeDataSet,
26
28
  vtkDataObject,
27
29
  vtkDataSet,
28
30
  vtkMultiBlockDataSet,
@@ -36,7 +38,8 @@ from vtkmodules.vtkFiltersExtraction import (
36
38
  vtkExtractSelection,
37
39
  )
38
40
  from vtkmodules.vtkFiltersCore import vtkThreshold
39
- from vtkmodules.vtkFiltersGeneral import vtkShrinkFilter
41
+ from vtkmodules.vtkCommonTransforms import vtkTransform
42
+ from vtkmodules.vtkFiltersGeneral import vtkShrinkFilter, vtkTransformFilter
40
43
  from vtkmodules.vtkFiltersCore import vtkAppendFilter
41
44
  from vtkmodules.vtkFiltersGeometry import vtkGeometryFilter
42
45
  from vtkmodules.vtkIOXML import vtkXMLReader
@@ -51,6 +54,8 @@ from opengeodeweb_viewer.utils_functions import (
51
54
  create_color_transfer_function,
52
55
  )
53
56
 
57
+ STACKING_GAP_RATIO = 0.05
58
+
54
59
 
55
60
  @dataclass
56
61
  class ViewerData:
@@ -216,6 +221,7 @@ class VtkPipeline:
216
221
  clipping_filter: vtkExtractGeometry | None = None
217
222
  threshold_filter: vtkThreshold | None = None
218
223
  shrink_filter: vtkShrinkFilter | None = None
224
+ explode_factor: float = 0.0
219
225
  highlight: HighlightPipeline = field(default_factory=HighlightPipeline)
220
226
  blockDataSets: list[vtkDataObject | None] = field(default_factory=list)
221
227
  blockGeodeIds: list[str] = field(default_factory=list)
@@ -262,6 +268,126 @@ class VtkPipeline:
262
268
  pruned.SetBlock(index, child)
263
269
  return pruned
264
270
 
271
+ def source_components(self) -> dict[int, tuple[str, vtkBoundingBox]]:
272
+ components: dict[int, tuple[str, vtkBoundingBox]] = {}
273
+ component_type = ""
274
+ iterator = self.reader.GetOutputDataObject(0).NewTreeIterator()
275
+ iterator.VisitOnlyLeavesOff()
276
+ iterator.InitTraversal()
277
+ while not iterator.IsDoneWithTraversal():
278
+ component = iterator.GetCurrentDataObject()
279
+ if isinstance(component, vtkMultiBlockDataSet):
280
+ component_type = iterator.GetCurrentMetaData().Get(
281
+ vtkCompositeDataSet.NAME()
282
+ )
283
+ elif isinstance(component, vtkDataSet):
284
+ bbox = vtkBoundingBox(component.GetBounds())
285
+ if bbox.IsValid():
286
+ components[iterator.GetCurrentFlatIndex()] = (component_type, bbox)
287
+ iterator.GoToNextItem()
288
+ return components
289
+
290
+ @staticmethod
291
+ def overlaps_in_xy(bbox: vtkBoundingBox, other_bbox: vtkBoundingBox) -> bool:
292
+ return all(
293
+ bbox.GetBound(2 * axis) < other_bbox.GetBound(2 * axis + 1)
294
+ and other_bbox.GetBound(2 * axis) < bbox.GetBound(2 * axis + 1)
295
+ for axis in (0, 1)
296
+ )
297
+
298
+ @staticmethod
299
+ def stacking_shifts(
300
+ stacked_blocks: dict[int, vtkBoundingBox],
301
+ ) -> dict[int, float]:
302
+ stacked_bbox = vtkBoundingBox()
303
+ for bbox in stacked_blocks.values():
304
+ stacked_bbox.AddBox(bbox)
305
+ vertical_gap = STACKING_GAP_RATIO * stacked_bbox.GetLength(2)
306
+ shifts: dict[int, float] = {}
307
+ for flat_index, bbox in sorted(
308
+ stacked_blocks.items(), key=lambda item: item[1].GetBound(4)
309
+ ):
310
+ shifts[flat_index] = max(
311
+ [0.0]
312
+ + [
313
+ placed_bbox.GetBound(5)
314
+ + shifts[placed_index]
315
+ + vertical_gap
316
+ - bbox.GetBound(4)
317
+ for placed_index, placed_bbox in stacked_blocks.items()
318
+ if placed_index in shifts
319
+ and VtkPipeline.overlaps_in_xy(bbox, placed_bbox)
320
+ ]
321
+ )
322
+ return shifts
323
+
324
+ @staticmethod
325
+ def followed_shift(
326
+ component_bbox: vtkBoundingBox,
327
+ stacked_blocks: dict[int, vtkBoundingBox],
328
+ stacked_shifts: dict[int, float],
329
+ ) -> float:
330
+ center = [0.0, 0.0, 0.0]
331
+ component_bbox.GetCenter(center)
332
+ containing_ids = [
333
+ flat_index
334
+ for flat_index, bbox in stacked_blocks.items()
335
+ if bbox.Contains(component_bbox)
336
+ ] or [
337
+ flat_index
338
+ for flat_index, bbox in stacked_blocks.items()
339
+ if bbox.ContainsPoint(center)
340
+ ]
341
+ if not containing_ids:
342
+ return 0.0
343
+ lowest_id = min(
344
+ containing_ids,
345
+ key=lambda flat_index: stacked_blocks[flat_index].GetBound(4),
346
+ )
347
+ return stacked_shifts[lowest_id]
348
+
349
+ def explode_blocks(self, dataset: vtkMultiBlockDataSet) -> vtkMultiBlockDataSet:
350
+ components = self.source_components()
351
+ stacked_blocks = {
352
+ flat_index: bbox
353
+ for flat_index, (component_type, bbox) in components.items()
354
+ if component_type == "blocks"
355
+ }
356
+ stacked_shifts = self.stacking_shifts(stacked_blocks)
357
+ z_shifts = {
358
+ flat_index: (
359
+ stacked_shifts[flat_index]
360
+ if flat_index in stacked_shifts
361
+ else self.followed_shift(bbox, stacked_blocks, stacked_shifts)
362
+ )
363
+ for flat_index, (_, bbox) in components.items()
364
+ }
365
+ return self.translate_blocks(dataset, z_shifts)
366
+
367
+ def translate_blocks(
368
+ self, dataset: vtkMultiBlockDataSet, z_shifts: dict[int, float]
369
+ ) -> vtkMultiBlockDataSet:
370
+ translated_dataset = vtkMultiBlockDataSet()
371
+ translated_dataset.CopyStructure(dataset)
372
+ iterator = dataset.NewTreeIterator()
373
+ iterator.InitTraversal()
374
+ while not iterator.IsDoneWithTraversal():
375
+ block = iterator.GetCurrentDataObject()
376
+ z_shift = z_shifts.get(iterator.GetCurrentFlatIndex(), 0.0)
377
+ if isinstance(block, vtkDataSet) and z_shift != 0.0:
378
+ translation = vtkTransform()
379
+ translation.Translate(0.0, 0.0, z_shift * self.explode_factor)
380
+ transform_filter = vtkTransformFilter()
381
+ transform_filter.SetInputData(block)
382
+ transform_filter.SetTransform(translation)
383
+ transform_filter.Update()
384
+ translated_dataset.SetDataSet(iterator, transform_filter.GetOutput())
385
+ elif block is not None:
386
+ translated_dataset.SetDataSet(iterator, block)
387
+ iterator.GoToNextItem()
388
+ translated_dataset.SetObjectName(dataset.GetObjectName())
389
+ return translated_dataset
390
+
265
391
  def get_block_style(self, block_id: int) -> BlockStyle:
266
392
  if block_id not in self.block_styles:
267
393
  style = BlockStyle(
@@ -353,22 +479,22 @@ class VtkPipeline:
353
479
  ) -> None:
354
480
  mapper = cast(vtkCompositePolyDataMapper, self.mapper)
355
481
  attributes = mapper.GetCompositeDataDisplayAttributes()
482
+ synced_attributes = vtkCompositeDataDisplayAttributes()
356
483
  color_rgb = [0.0, 0.0, 0.0]
357
484
  for source_block, destination_block in zip(self.blockDataSets, new_blocks):
358
485
  if source_block and destination_block:
359
486
  if attributes.HasBlockColor(source_block):
360
487
  attributes.GetBlockColor(source_block, color_rgb)
361
- attributes.SetBlockColor(destination_block, color_rgb)
362
- else:
363
- attributes.RemoveBlockColor(destination_block)
488
+ synced_attributes.SetBlockColor(destination_block, color_rgb)
364
489
  if attributes.HasBlockVisibility(source_block):
365
- attributes.SetBlockVisibility(
490
+ synced_attributes.SetBlockVisibility(
366
491
  destination_block, attributes.GetBlockVisibility(source_block)
367
492
  )
368
493
  if attributes.HasBlockOpacity(source_block):
369
- attributes.SetBlockOpacity(
494
+ synced_attributes.SetBlockOpacity(
370
495
  destination_block, attributes.GetBlockOpacity(source_block)
371
496
  )
497
+ mapper.SetCompositeDataDisplayAttributes(synced_attributes)
372
498
  self.blockDataSets = new_blocks
373
499
  for block_id in self.block_styles:
374
500
  self.update_block_colors(block_id)
@@ -21,6 +21,7 @@ from vtkmodules.vtkCommonDataModel import (
21
21
  vtkDataSet,
22
22
  vtkImplicitBoolean,
23
23
  vtkImageData,
24
+ vtkMultiBlockDataSet,
24
25
  vtkPlane,
25
26
  vtkSelectionNode,
26
27
  )
@@ -203,6 +204,10 @@ class VtkView(VtkTypingMixin, vtk_protocols.vtkWebProtocol):
203
204
  pipeline.filter.Update()
204
205
  filtered_dataset = pipeline.filter.GetOutputDataObject(0)
205
206
  if isinstance(pipeline.mapper, vtkCompositePolyDataMapper):
207
+ if pipeline.explode_factor > 0 and isinstance(
208
+ filtered_dataset, vtkMultiBlockDataSet
209
+ ):
210
+ filtered_dataset = pipeline.explode_blocks(filtered_dataset)
206
211
  pipeline.sync_composite_pipeline(filtered_dataset)
207
212
  return
208
213
  pipeline.mapper.SetInputConnection(pipeline.filter.GetOutputPort())
@@ -268,6 +273,14 @@ class VtkView(VtkTypingMixin, vtk_protocols.vtkWebProtocol):
268
273
  pipeline.shrink_filter = None
269
274
  self.update_pipeline_filter(pipeline)
270
275
 
276
+ def set_explode(self, data_ids: list[str], explode_factor: float) -> None:
277
+ for data_id in data_ids:
278
+ pipeline = self.get_vtk_pipeline(data_id)
279
+ if not isinstance(pipeline.mapper, vtkCompositePolyDataMapper):
280
+ continue
281
+ pipeline.explode_factor = explode_factor
282
+ self.update_pipeline_filter(pipeline)
283
+
271
284
  def set_slice(self, data_ids: list[str], slices: list[SliceElement]) -> list[int]:
272
285
  max_indices = [0, 0, 0]
273
286
  for data_id in data_ids:
@@ -402,6 +402,18 @@ def test_shrink(server: ServerMonitor, dataset_factory: Callable[..., str]) -> N
402
402
  assert server.compare_image("viewer/shrink.jpeg") == True
403
403
 
404
404
 
405
+ def test_explode_mesh(
406
+ server: ServerMonitor, dataset_factory: Callable[..., str]
407
+ ) -> None:
408
+ test_register_mesh(server, dataset_factory)
409
+ server.call(
410
+ VtkViewerView.viewer_prefix
411
+ + VtkViewerView.viewer_schemas_dict["explode"]["rpc"],
412
+ [{"ids": [mesh_id], "explode_factor": 0.5}],
413
+ )
414
+ assert server.compare_image("mesh/register.jpeg") == True
415
+
416
+
405
417
  def test_clipping_then_shrink(
406
418
  server: ServerMonitor, dataset_factory: Callable[..., str]
407
419
  ) -> None:
@@ -0,0 +1,206 @@
1
+ # Standard library imports
2
+
3
+ # Third party imports
4
+ import pytest
5
+ from vtkmodules.vtkCommonDataModel import (
6
+ vtkCompositeDataSet,
7
+ vtkDataSet,
8
+ vtkImageData,
9
+ vtkMultiBlockDataSet,
10
+ vtkPolyData,
11
+ )
12
+ from vtkmodules.vtkCommonExecutionModel import vtkTrivialProducer
13
+ from vtkmodules.vtkFiltersGeneral import vtkShrinkFilter
14
+ from vtkmodules.vtkFiltersSources import vtkCubeSource
15
+ from vtkmodules.vtkIOXML import vtkXMLMultiBlockDataReader
16
+ from vtkmodules.vtkRenderingCore import (
17
+ vtkCompositeDataDisplayAttributes,
18
+ vtkCompositePolyDataMapper,
19
+ )
20
+
21
+ # Local application imports
22
+ from opengeodeweb_viewer.vtk_pipeline import STACKING_GAP_RATIO, VtkPipeline
23
+
24
+
25
+ def test_sync_block_display_attributes_drops_replaced_blocks() -> None:
26
+ mapper = vtkCompositePolyDataMapper()
27
+ mapper.SetCompositeDataDisplayAttributes(vtkCompositeDataDisplayAttributes())
28
+ pipeline = VtkPipeline(vtkXMLMultiBlockDataReader(), mapper)
29
+ source_block = vtkPolyData()
30
+ destination_block = vtkPolyData()
31
+ pipeline.blockDataSets = [source_block]
32
+ attributes = mapper.GetCompositeDataDisplayAttributes()
33
+ attributes.SetBlockVisibility(source_block, False)
34
+ attributes.SetBlockOpacity(source_block, 0.5)
35
+ attributes.SetBlockColor(source_block, [1.0, 0.0, 0.0])
36
+
37
+ pipeline.sync_block_display_attributes([destination_block])
38
+
39
+ attributes = mapper.GetCompositeDataDisplayAttributes()
40
+ assert attributes.GetBlockVisibility(destination_block) == False
41
+ assert attributes.GetBlockOpacity(destination_block) == 0.5
42
+ assert attributes.HasBlockColor(destination_block)
43
+ assert not attributes.HasBlockVisibility(source_block)
44
+ assert not attributes.HasBlockOpacity(source_block)
45
+ assert not attributes.HasBlockColor(source_block)
46
+
47
+
48
+ def box(bounds: list[float]) -> vtkPolyData:
49
+ cube = vtkCubeSource()
50
+ cube.SetBounds(bounds)
51
+ cube.Update()
52
+ return cube.GetOutput()
53
+
54
+
55
+ def solid(bounds: list[float]) -> vtkImageData:
56
+ image = vtkImageData()
57
+ image.SetDimensions(2, 2, 2)
58
+ image.SetOrigin(bounds[0], bounds[2], bounds[4])
59
+ image.SetSpacing(
60
+ bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]
61
+ )
62
+ return image
63
+
64
+
65
+ def component_group(
66
+ name: str, blocks: list[vtkPolyData] | list[vtkImageData]
67
+ ) -> vtkMultiBlockDataSet:
68
+ group = vtkMultiBlockDataSet()
69
+ for index, block in enumerate(blocks):
70
+ group.SetBlock(index, block)
71
+ group.SetObjectName(name)
72
+ return group
73
+
74
+
75
+ def model_of(*groups: vtkMultiBlockDataSet) -> vtkMultiBlockDataSet:
76
+ model = vtkMultiBlockDataSet()
77
+ for index, group in enumerate(groups):
78
+ model.SetBlock(index, group)
79
+ model.GetMetaData(index).Set(vtkCompositeDataSet.NAME(), group.GetObjectName())
80
+ return model
81
+
82
+
83
+ def stacked_model() -> vtkMultiBlockDataSet:
84
+ surfaces = component_group(
85
+ "surfaces",
86
+ [
87
+ box([0, 10, 0, 10, 5, 5]),
88
+ box([0, 10, 0, 10, 9, 9]),
89
+ box([0, 0, 0, 10, 3, 10]),
90
+ ],
91
+ )
92
+ blocks = component_group(
93
+ "blocks",
94
+ [
95
+ solid([0, 10, 0, 10, 0, 7]),
96
+ solid([0, 10, 0, 10, 3, 10]),
97
+ solid([20, 30, 0, 10, 0, 10]),
98
+ ],
99
+ )
100
+ return model_of(surfaces, blocks)
101
+
102
+
103
+ UPPER_BLOCK_ID = 7
104
+ STACKED_HEIGHT = 10
105
+ GAP = STACKING_GAP_RATIO * STACKED_HEIGHT
106
+
107
+
108
+ def explode(
109
+ model: vtkMultiBlockDataSet,
110
+ explode_factor: float,
111
+ shrink_factor: float = 1.0,
112
+ hidden_block_ids: tuple[int, ...] = (),
113
+ ) -> tuple[list[vtkDataSet], list[vtkDataSet]]:
114
+ model_source = vtkTrivialProducer()
115
+ model_source.SetOutput(model)
116
+ mapper = vtkCompositePolyDataMapper()
117
+ mapper.SetCompositeDataDisplayAttributes(vtkCompositeDataDisplayAttributes())
118
+ pipeline = VtkPipeline(model_source, mapper) # type: ignore[arg-type]
119
+ shrink_filter = vtkShrinkFilter()
120
+ shrink_filter.SetShrinkFactor(shrink_factor)
121
+ shrink_filter.SetInputConnection(model_source.GetOutputPort())
122
+ pipeline.filter.SetInputConnection(shrink_filter.GetOutputPort())
123
+ pipeline.filter.Update()
124
+ filtered_model = pipeline.filter.GetOutputDataObject(0)
125
+ pipeline.blockDataSets = pipeline.extract_blocks(filtered_model)
126
+ for block_id in hidden_block_ids:
127
+ mapper.GetCompositeDataDisplayAttributes().SetBlockVisibility(
128
+ pipeline.blockDataSets[block_id], False
129
+ )
130
+ pipeline.explode_factor = explode_factor
131
+ exploded_model = pipeline.explode_blocks(filtered_model)
132
+ return (
133
+ [
134
+ block
135
+ for block in pipeline.extract_blocks(filtered_model)
136
+ if isinstance(block, vtkDataSet)
137
+ ],
138
+ [
139
+ block
140
+ for block in pipeline.extract_blocks(exploded_model)
141
+ if isinstance(block, vtkDataSet)
142
+ ],
143
+ )
144
+
145
+
146
+ def z_ranges(blocks: list[vtkDataSet]) -> list[tuple[float, float]]:
147
+ return [(block.GetBounds()[4], block.GetBounds()[5]) for block in blocks]
148
+
149
+
150
+ def test_explode_blocks_stacks_overlapping_blocks_along_z() -> None:
151
+ (
152
+ interface,
153
+ upper_surface,
154
+ upper_side_surface,
155
+ lower_block,
156
+ upper_block,
157
+ side_block,
158
+ ) = z_ranges(explode(stacked_model(), 1.0)[1])
159
+ assert lower_block == pytest.approx((0, 7))
160
+ assert upper_block == pytest.approx((7 + GAP, 14 + GAP))
161
+ assert side_block == pytest.approx((0, 10))
162
+ assert interface == pytest.approx((5, 5))
163
+ assert upper_surface == pytest.approx((13 + GAP, 13 + GAP))
164
+ assert upper_side_surface == pytest.approx((7 + GAP, 14 + GAP))
165
+
166
+
167
+ def test_explode_blocks_interpolates_with_factor() -> None:
168
+ upper_block = z_ranges(explode(stacked_model(), 0.5)[1])[4]
169
+ assert upper_block == pytest.approx((3 + (4 + GAP) / 2, 10 + (4 + GAP) / 2))
170
+
171
+
172
+ def test_explode_blocks_keeps_components_on_their_block_after_shrink() -> None:
173
+ filtered_blocks, exploded_blocks = explode(stacked_model(), 1.0, shrink_factor=0.8)
174
+ shifts = [
175
+ exploded[0] - filtered[0]
176
+ for filtered, exploded in zip(
177
+ z_ranges(filtered_blocks), z_ranges(exploded_blocks)
178
+ )
179
+ ]
180
+ upper_side_surface, upper_block = shifts[2], shifts[4]
181
+ assert upper_block == pytest.approx(4 + GAP)
182
+ assert upper_side_surface == pytest.approx(4 + GAP)
183
+
184
+
185
+ def test_explode_blocks_stacks_hidden_blocks() -> None:
186
+ upper_block = z_ranges(
187
+ explode(stacked_model(), 1.0, hidden_block_ids=(UPPER_BLOCK_ID,))[1]
188
+ )[4]
189
+ assert upper_block == pytest.approx((7 + GAP, 14 + GAP))
190
+
191
+
192
+ def test_explode_blocks_reuses_unshifted_blocks() -> None:
193
+ filtered_blocks, exploded_blocks = explode(stacked_model(), 1.0)
194
+ lower_block, upper_block = 3, 4
195
+ assert exploded_blocks[lower_block] is filtered_blocks[lower_block]
196
+ assert exploded_blocks[upper_block] is not filtered_blocks[upper_block]
197
+
198
+
199
+ def test_explode_blocks_stacks_block_nested_in_another() -> None:
200
+ blocks = component_group(
201
+ "blocks",
202
+ [solid([0, 10, 0, 10, 0, 10]), solid([0, 10, 0, 10, 0, 4])],
203
+ )
204
+ outer_block, inner_block = z_ranges(explode(model_of(blocks), 1.0)[1])
205
+ assert outer_block[0] == pytest.approx(0)
206
+ assert inner_block[0] == pytest.approx(10 + GAP)