RS3Scripting 4.43.0__py3-none-any.whl → 4.44.0__py3-none-any.whl

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 (122) hide show
  1. rs3/CommonEnums.py +8 -1
  2. rs3/ExternalVolume.py +12 -1
  3. rs3/Geometry.py +22 -0
  4. rs3/Model.py +38 -0
  5. rs3/Selection.py +92 -2
  6. rs3/_client.py +1 -1
  7. rs3/entities/BaseEntity.py +85 -0
  8. rs3/entities/beam/__init__.py +0 -0
  9. rs3/entities/beam/beam.py +12 -0
  10. rs3/entities/bolt/__init__.py +0 -0
  11. rs3/entities/bolt/bolt.py +11 -0
  12. rs3/entities/entity.py +48 -0
  13. rs3/entities/joint/__init__.py +0 -0
  14. rs3/entities/joint/joint.py +11 -0
  15. rs3/entities/liningComposition/__init__.py +0 -0
  16. rs3/entities/liningComposition/liningComposition.py +11 -0
  17. rs3/entities/pile/__init__.py +0 -0
  18. rs3/entities/pile/pile.py +11 -0
  19. rs3/generatedFiles/BFPCommonMessage_pb2.py +38 -38
  20. rs3/generatedFiles/BFPCommonMessage_pb2.pyi +47 -47
  21. rs3/generatedFiles/BFPCommonMessage_pb2_grpc.py +24 -24
  22. rs3/generatedFiles/BeamsResultsQueryService_pb2.py +50 -50
  23. rs3/generatedFiles/BeamsResultsQueryService_pb2.pyi +48 -48
  24. rs3/generatedFiles/BeamsResultsQueryService_pb2_grpc.py +141 -141
  25. rs3/generatedFiles/BoltsResultsQueryService_pb2.py +51 -51
  26. rs3/generatedFiles/BoltsResultsQueryService_pb2.pyi +75 -75
  27. rs3/generatedFiles/BoltsResultsQueryService_pb2_grpc.py +141 -141
  28. rs3/generatedFiles/ClientService_pb2.py +40 -40
  29. rs3/generatedFiles/ClientService_pb2.pyi +15 -15
  30. rs3/generatedFiles/ClientService_pb2_grpc.py +97 -97
  31. rs3/generatedFiles/CommonGeometryMessages_pb2.py +52 -52
  32. rs3/generatedFiles/CommonGeometryMessages_pb2.pyi +92 -92
  33. rs3/generatedFiles/CommonGeometryMessages_pb2_grpc.py +24 -24
  34. rs3/generatedFiles/CommonMessages_pb2.py +31 -7
  35. rs3/generatedFiles/CommonMessages_pb2.pyi +82 -0
  36. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.py +63 -63
  37. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.pyi +139 -139
  38. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2_grpc.py +314 -314
  39. rs3/generatedFiles/ComputeService_pb2.py +48 -48
  40. rs3/generatedFiles/ComputeService_pb2.pyi +56 -56
  41. rs3/generatedFiles/ComputeService_pb2_grpc.py +147 -147
  42. rs3/generatedFiles/ExternalVolumesService_pb2.py +2 -2
  43. rs3/generatedFiles/ExternalVolumesService_pb2_grpc.py +92 -6
  44. rs3/generatedFiles/GaussPointFailureMessage_pb2.py +37 -37
  45. rs3/generatedFiles/GaussPointFailureMessage_pb2.pyi +14 -14
  46. rs3/generatedFiles/GaussPointFailureMessage_pb2_grpc.py +24 -24
  47. rs3/generatedFiles/GroupsService_pb2.py +45 -0
  48. rs3/generatedFiles/GroupsService_pb2.pyi +36 -0
  49. rs3/generatedFiles/GroupsService_pb2_grpc.py +227 -0
  50. rs3/generatedFiles/JointResultsQueryService_pb2.py +54 -54
  51. rs3/generatedFiles/JointResultsQueryService_pb2.pyi +92 -92
  52. rs3/generatedFiles/JointResultsQueryService_pb2_grpc.py +141 -141
  53. rs3/generatedFiles/MaterialHydraulicModelService_pb2.py +55 -55
  54. rs3/generatedFiles/MaterialHydraulicModelService_pb2.pyi +79 -79
  55. rs3/generatedFiles/MaterialJointService_pb2.py +49 -49
  56. rs3/generatedFiles/MaterialJointService_pb2.pyi +52 -52
  57. rs3/generatedFiles/MaterialJointService_pb2_grpc.py +183 -183
  58. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.py +47 -47
  59. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.pyi +43 -43
  60. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2_grpc.py +228 -228
  61. rs3/generatedFiles/ModelService_pb2.py +251 -235
  62. rs3/generatedFiles/ModelService_pb2.pyi +50 -0
  63. rs3/generatedFiles/ModelService_pb2_grpc.py +172 -0
  64. rs3/generatedFiles/ModifyBeamEntityService_pb2.py +37 -0
  65. rs3/generatedFiles/ModifyBeamEntityService_pb2.pyi +5 -0
  66. rs3/generatedFiles/ModifyBeamEntityService_pb2_grpc.py +398 -0
  67. rs3/generatedFiles/ModifyBoltEntityService_pb2.py +37 -0
  68. rs3/generatedFiles/ModifyBoltEntityService_pb2.pyi +5 -0
  69. rs3/generatedFiles/ModifyBoltEntityService_pb2_grpc.py +398 -0
  70. rs3/generatedFiles/ModifyCompositeLinerEntity_pb2.py +37 -0
  71. rs3/generatedFiles/ModifyCompositeLinerEntity_pb2.pyi +5 -0
  72. rs3/generatedFiles/ModifyCompositeLinerEntity_pb2_grpc.py +398 -0
  73. rs3/generatedFiles/ModifyJointEntityService_pb2.py +37 -0
  74. rs3/generatedFiles/ModifyJointEntityService_pb2.pyi +5 -0
  75. rs3/generatedFiles/ModifyJointEntityService_pb2_grpc.py +398 -0
  76. rs3/generatedFiles/ModifyPileEntityService_pb2.py +37 -0
  77. rs3/generatedFiles/ModifyPileEntityService_pb2.pyi +5 -0
  78. rs3/generatedFiles/ModifyPileEntityService_pb2_grpc.py +398 -0
  79. rs3/generatedFiles/ModifyPileEntity_pb2.py +37 -0
  80. rs3/generatedFiles/ModifyPileEntity_pb2.pyi +5 -0
  81. rs3/generatedFiles/ModifyPileEntity_pb2_grpc.py +226 -0
  82. rs3/generatedFiles/PileDataService_pb2.py +55 -55
  83. rs3/generatedFiles/PileDataService_pb2.pyi +63 -63
  84. rs3/generatedFiles/PileDataService_pb2_grpc.py +399 -399
  85. rs3/generatedFiles/PileForepoleResultsQueryService_pb2.py +51 -51
  86. rs3/generatedFiles/PileForepoleResultsQueryService_pb2.pyi +63 -63
  87. rs3/generatedFiles/PileForepoleResultsQueryService_pb2_grpc.py +141 -141
  88. rs3/generatedFiles/ResultsQueryCommonMessage_pb2.py +56 -56
  89. rs3/generatedFiles/ResultsQueryCommonMessage_pb2.pyi +85 -85
  90. rs3/generatedFiles/ResultsQueryCommonMessage_pb2_grpc.py +24 -24
  91. rs3/generatedFiles/ResultsQueryService_pb2.py +46 -46
  92. rs3/generatedFiles/ResultsQueryService_pb2.pyi +4 -2
  93. rs3/generatedFiles/ResultsQueryService_pb2_grpc.py +745 -745
  94. rs3/generatedFiles/SelectionService_pb2.py +49 -49
  95. rs3/generatedFiles/SelectionService_pb2.pyi +51 -51
  96. rs3/generatedFiles/SelectionService_pb2_grpc.py +269 -269
  97. rs3/generatedFiles/SolidsResultsQueryService_pb2.py +93 -93
  98. rs3/generatedFiles/SolidsResultsQueryService_pb2.pyi +213 -213
  99. rs3/generatedFiles/SolidsResultsQueryService_pb2_grpc.py +195 -195
  100. rs3/generatedFiles/SupportEntityService_pb2.py +51 -0
  101. rs3/generatedFiles/SupportEntityService_pb2.pyi +73 -0
  102. rs3/generatedFiles/SupportEntityService_pb2_grpc.py +183 -0
  103. rs3/properties/Group.py +76 -0
  104. rs3/properties/_PropertyAccessor.py +12 -0
  105. rs3/properties/beam/Beam.py +1 -1
  106. rs3/properties/joint/Joint.py +3 -3
  107. rs3/properties/liner/Liner.py +1 -1
  108. rs3/properties/liner/_PropertyAccessor.py +7 -7
  109. rs3/properties/liningComposition/LiningComposition.py +4 -1
  110. rs3/properties/material/Material.py +5 -3
  111. rs3/properties/material/constitutiveModel/jointOption/MaterialJoint.py +7 -0
  112. rs3/properties/pile/Pile.py +1 -1
  113. rs3/properties/stageFactors/IStageFactorBase.py +9 -9
  114. rs3/properties/stageFactors/_StageFactorPropertyAccessor.py +17 -17
  115. rs3/results/ResultEnums.py +10 -1
  116. rs3/results/Results.py +56 -28
  117. rs3scripting-4.44.0.dist-info/METADATA +135 -0
  118. {rs3scripting-4.43.0.dist-info → rs3scripting-4.44.0.dist-info}/RECORD +121 -84
  119. {rs3scripting-4.43.0.dist-info → rs3scripting-4.44.0.dist-info}/WHEEL +1 -1
  120. rs3scripting-4.43.0.dist-info/METADATA +0 -70
  121. {rs3scripting-4.43.0.dist-info → rs3scripting-4.44.0.dist-info}/licenses/License.txt +0 -0
  122. {rs3scripting-4.43.0.dist-info → rs3scripting-4.44.0.dist-info}/top_level.txt +0 -0
rs3/CommonEnums.py CHANGED
@@ -13,4 +13,11 @@ class AutoRestraintsType(Enum):
13
13
  class ExternalVolumeRoles(Enum):
14
14
  GEOLOGY = "Geology"
15
15
  CONSTRUCTION = "Construction"
16
- EXCAVATION = "Excavation"
16
+ EXCAVATION = "Excavation"
17
+
18
+ class SupportTypes(Enum):
19
+ BEAM = 1
20
+ BOLT = 2
21
+ PILE = 3
22
+ JOINT = 4
23
+ COMPOSITE_LINER = 5
rs3/ExternalVolume.py CHANGED
@@ -17,7 +17,7 @@ class ExternalVolume(_ProxyObject):
17
17
  self._propertyAccessor = PropertyAccessor(client, projectID, self._externalVolumesService)
18
18
 
19
19
  def setName(self, name : str):
20
- request = CommonMessages_pb2.SetPropertyRequest(objectId=self._objectId, propertyName="Name", value=CommonMessages_pb2.PropertyValue(stringValue=name))
20
+ request = CommonMessages_pb2.SetEntityPropertyRequest(entityId=self._objectId, propertyIdOrName=name)
21
21
  self._client.callFunction(self._externalVolumesService.SetExternalVolumeName, request)
22
22
  def getName(self) -> str:
23
23
  return self._propertyAccessor.getStringValue("Name")
@@ -39,6 +39,17 @@ class ExternalVolume(_ProxyObject):
39
39
  response : ExternalVolumesService_pb2.GetAppliedMaterialPropertyResponse = self._client.callFunction(self._externalVolumesService.GetAppliedMaterialProperty, request)
40
40
  return response.materialName
41
41
 
42
+ def setGrouping(self, stageNum : int, groupName : str):
43
+ """
44
+ Assign group to the given stage by the group name. To ungroup the material, "Ungrouped" should be used as the groupName.
45
+ """
46
+ request = CommonMessages_pb2.SetGroupingRequest(objectId=self._objectId, stageNum=stageNum, groupName=groupName)
47
+ self._client.callFunction(self._externalVolumesService.SetGrouping, request)
48
+ def getGrouping(self, stageNum : int):
49
+ request = CommonMessages_pb2.GetGroupingRequest(objectId=self._objectId, stageNum=stageNum)
50
+ response : CommonMessages_pb2.GetGroupingResponse = self._client.callFunction(self._externalVolumesService.GetGrouping, request)
51
+ return response.groupName
52
+
42
53
  def getVolume(self) -> str:
43
54
  return self._propertyAccessor.getDoubleProperty("Volume")
44
55
 
rs3/Geometry.py CHANGED
@@ -47,6 +47,13 @@ class Cube(Geometry):
47
47
  geometry_ = CommonGeometryMessages.Geometry(box=box_)
48
48
  return geometry_
49
49
 
50
+ def toCommonVolumeGeometryObject(self):
51
+ corner1_ = CommonGeometryMessages.Point(x=self.corner1.x, y=self.corner1.y, z=self.corner1.z)
52
+ corner2_ = CommonGeometryMessages.Point(x=self.corner2.x, y=self.corner2.y, z=self.corner2.z)
53
+ box_ = CommonGeometryMessages.Box(corner1=corner1_, corner2=corner2_, rotationAboutX=self.rotationAboutX, rotationAboutY=self.rotationAboutY, rotationAboutZ=self.rotationAboutZ)
54
+ geometry_ = CommonGeometryMessages.VolumeGeometry(box=box_)
55
+ return geometry_
56
+
50
57
  @dataclass
51
58
  class Cylinder(Geometry):
52
59
  axisStartPoint: Point
@@ -60,6 +67,14 @@ class Cylinder(Geometry):
60
67
  cylinder_ = CommonGeometryMessages.Cylinder(axisStartPoint=axisStartPoint_, axisEndPoint=axisEndPoint_, radius=radius_)
61
68
  geometry_ = CommonGeometryMessages.Geometry(cylinder=cylinder_)
62
69
  return geometry_
70
+
71
+ def toCommonVolumeGeometryObject(self):
72
+ axisStartPoint_ = CommonGeometryMessages.Point(x=self.axisStartPoint.x, y=self.axisStartPoint.y, z=self.axisStartPoint.z)
73
+ axisEndPoint_ = CommonGeometryMessages.Point(x=self.axisEndPoint.x, y=self.axisEndPoint.y, z=self.axisEndPoint.z)
74
+ radius_ = self.radius
75
+ cylinder_ = CommonGeometryMessages.Cylinder(axisStartPoint=axisStartPoint_, axisEndPoint=axisEndPoint_, radius=radius_)
76
+ geometry_ = CommonGeometryMessages.VolumeGeometry(cylinder=cylinder_)
77
+ return geometry_
63
78
 
64
79
  @dataclass
65
80
  class Sphere(Geometry):
@@ -71,4 +86,11 @@ class Sphere(Geometry):
71
86
  radius_ = self.radius
72
87
  sphere_ = CommonGeometryMessages.Sphere(center=center_, radius=radius_)
73
88
  geometry_ = CommonGeometryMessages.Geometry(sphere=sphere_)
89
+ return geometry_
90
+
91
+ def toCommonVolumeGeometryObject(self):
92
+ center_ = CommonGeometryMessages.Point(x=self.center.x, y=self.center.y, z=self.center.z)
93
+ radius_ = self.radius
94
+ sphere_ = CommonGeometryMessages.Sphere(center=center_, radius=radius_)
95
+ geometry_ = CommonGeometryMessages.VolumeGeometry(sphere=sphere_)
74
96
  return geometry_
rs3/Model.py CHANGED
@@ -136,6 +136,14 @@ class ModelBase:
136
136
  result = result_.result
137
137
  return result
138
138
 
139
+ def getGroupByName(self, groupName: str) -> str:
140
+ _projectId_ = self._projectId
141
+ groupName_ = groupName
142
+ request = ModelService.getGroupByNameRequest(_projectId=_projectId_, groupName=groupName_)
143
+ result_ = self._client.callFunction(self._ModelService.getGroupByName, request)
144
+ result = result_.result
145
+ return result
146
+
139
147
  def getDiscreteFunctionByName(self, discreteFunctionName: str) -> str:
140
148
  _projectId_ = self._projectId
141
149
  discreteFunctionName_ = discreteFunctionName
@@ -245,6 +253,13 @@ class ModelBase:
245
253
  result = [obj for obj in result_.result]
246
254
  return result
247
255
 
256
+ def getAllGroups(self) -> list[str]:
257
+ _projectId_ = self._projectId
258
+ request = ModelService.getAllGroupsRequest(_projectId=_projectId_)
259
+ result_ = self._client.callFunction(self._ModelService.getAllGroups, request)
260
+ result = [obj for obj in result_.result]
261
+ return result
262
+
248
263
  def getAllBoltPropertiesInUse(self) -> list[str]:
249
264
  _projectId_ = self._projectId
250
265
  request = ModelService.getAllBoltPropertiesInUseRequest(_projectId=_projectId_)
@@ -458,6 +473,18 @@ class ModelBase:
458
473
  request = ModelService.deleteWaterGridPropertyRequest(_projectId=_projectId_, waterGridName=waterGridName_)
459
474
  self._client.callFunction(self._ModelService.deleteWaterGridProperty, request)
460
475
 
476
+ def createNewGroupProperty(self, groupName: str) -> None:
477
+ _projectId_ = self._projectId
478
+ groupName_ = groupName
479
+ request = ModelService.createNewGroupPropertyRequest(_projectId=_projectId_, groupName=groupName_)
480
+ self._client.callFunction(self._ModelService.createNewGroupProperty, request)
481
+
482
+ def deleteGroupProperty(self, groupName: str) -> None:
483
+ _projectId_ = self._projectId
484
+ groupName_ = groupName
485
+ request = ModelService.deleteGroupPropertyRequest(_projectId=_projectId_, groupName=groupName_)
486
+ self._client.callFunction(self._ModelService.deleteGroupProperty, request)
487
+
461
488
  def getDiscreteFunctions(self) -> list[str]:
462
489
  _projectId_ = self._projectId
463
490
  request = ModelService.getDiscreteFunctionsRequest(_projectId=_projectId_)
@@ -550,12 +577,14 @@ from rs3.properties.material.Material import MaterialProperty
550
577
  from rs3.properties.groundwater.WaterByLocation import WaterByLocationProperty
551
578
  from rs3.properties.groundwater.WaterGrid import WaterGridProperty
552
579
  from rs3.ExternalVolume import ExternalVolume
580
+ from rs3.properties.Group import Group
553
581
  from rs3.properties.DiscreteFunction import DiscreteFunction
554
582
  from rs3.properties.ShearNormalFunction import ShearNormalFunction
555
583
  from rs3.properties.GeneralizedAnisotropicFunction import GeneralizedAnisotropicFunction
556
584
  from rs3.properties.CustomHydraulicModel import CustomHydraulicModel
557
585
  from rs3.Restraints import Restraints
558
586
  from rs3.Selection import Selection
587
+ from rs3.entities.entity import Entity
559
588
  from rs3.Compute import Compute
560
589
  from rs3.results.Results import Results
561
590
  from rs3.ModelEnums import *
@@ -569,6 +598,7 @@ class Model(ModelBase):
569
598
  super().__init__(client, projectId)
570
599
  self.ProjectSettings = ProjectSettings(client, projectId)
571
600
  self.Selection = Selection(client, projectId)
601
+ self.Entity = Entity(client, projectId)
572
602
  self.Loadings = Loadings(client, projectId)
573
603
  self.Restraints = Restraints(client, projectId)
574
604
  self.Mesh = Mesh(client, projectId)
@@ -670,6 +700,10 @@ class Model(ModelBase):
670
700
  externalVolumeProp = super().getExternalVolumeByName(externalVolumeName)
671
701
  return ExternalVolume(self._client, externalVolumeProp)
672
702
 
703
+ def getGroupByName(self, groupName) -> Group:
704
+ groupProp = super().getGroupByName(groupName)
705
+ return Group(self._client, groupProp, self._projectId)
706
+
673
707
  def getDiscreteFunctionByName(self, discreteFunctionName) -> DiscreteFunction:
674
708
  discreteFunctionProp = super().getDiscreteFunctionByName(discreteFunctionName)
675
709
  return DiscreteFunction(self._client, discreteFunctionProp)
@@ -726,6 +760,10 @@ class Model(ModelBase):
726
760
  externalVolumesProps = super().getAllExternalVolumes()
727
761
  return [ExternalVolume(self._client, obj) for obj in externalVolumesProps]
728
762
 
763
+ def getAllGroups(self) -> list[Group]:
764
+ groups = super().getAllGroups()
765
+ return [Group(self._client, obj, self._projectId) for obj in groups]
766
+
729
767
  def getAllBoltPropertiesInUse(self) -> list[BoltProperty]:
730
768
  boltProps = super().getAllBoltPropertiesInUse()
731
769
  return [BoltProperty(self._client, obj) for obj in boltProps]
rs3/Selection.py CHANGED
@@ -1,8 +1,16 @@
1
1
  import rs3.generatedFiles.SelectionService_pb2_grpc as SelectionServiceGrpc
2
2
  import rs3.generatedFiles.SelectionService_pb2 as SelectionService
3
+ import rs3.generatedFiles.SupportEntityService_pb2_grpc as SupportEntityServiceGrpc
4
+ import rs3.generatedFiles.SupportEntityService_pb2 as SupportEntityService
3
5
  from rs3._client import Client
4
- from rs3.ExternalVolume import ExternalVolume
5
6
  from rs3.Geometry import *
7
+ from rs3.CommonEnums import SupportTypes
8
+ from rs3.ExternalVolume import ExternalVolume
9
+ from rs3.entities.beam.beam import Beam
10
+ from rs3.entities.bolt.bolt import Bolt
11
+ from rs3.entities.joint.joint import Joint
12
+ from rs3.entities.liningComposition.liningComposition import LiningComposition
13
+ from rs3.entities.pile.pile import Pile
6
14
  from typing import Union
7
15
 
8
16
  class Selection:
@@ -10,6 +18,7 @@ class Selection:
10
18
  self._client = client
11
19
  self._projectId = projectId
12
20
  self._SelectionService = SelectionServiceGrpc.SelectionServiceStub(self._client.channel)
21
+ self._SupportEntityService = SupportEntityServiceGrpc.SupportEntityServiceStub(self._client.channel)
13
22
 
14
23
  def _getExternalVolumesByPoint(self, point: Point) -> list[str]:
15
24
  _projectId_ = self._projectId
@@ -120,4 +129,85 @@ class Selection:
120
129
  """
121
130
  request = SelectionService.getAttachedExternalVolumesByVolumeNameRequest(_projectId=self._projectId, externalVolumeName=externalVolumeName)
122
131
  result_ = self._client.callFunction(self._SelectionService.getAttachedExternalVolumesByVolumeName, request)
123
- return [ExternalVolume(self._client, obj) for obj in result_.result]
132
+ return [ExternalVolume(self._client, obj) for obj in result_.result]
133
+
134
+ def getSupportEntities(self, entityType: SupportTypes, sampleRegion : Union[Cube, Cylinder, Sphere], includeIntersecting : bool = True, stageNumber: int = -1):
135
+ """
136
+ Returns support entities of a specified type that are located within a sampling region.
137
+
138
+ The sampling region can be defined by one of the supported volume geometries (cube,
139
+ cylinder, or sphere). By default, support entities that intersect the sampling region
140
+ are included in the results.
141
+
142
+ Parameters
143
+ ----------
144
+ entityType : SupportTypes
145
+ The type of support entity to retrieve.
146
+
147
+ sampleRegion : Cube | Cylinder | Sphere
148
+ The geometry used to define the sampling region.
149
+
150
+ includeIntersecting : bool, optional
151
+ If ``True`` (default), support entities that intersect the sampling region
152
+ are included. If ``False``, only support entities that are completely
153
+ contained within the sampling region are returned.
154
+
155
+ For support entities composed of multiple components, the intersection test
156
+ is performed against the overall extent of the entity rather than each
157
+ individual component. Consequently:
158
+
159
+ - A beam entity consisting of multiple beam edges is returned even if the sampling region intersects only the space enclosed by the beam edges.
160
+
161
+ - A bolt group or pile group is returned even if the sampling region intersects only the space between the bolts or piles in the group.
162
+
163
+ stageNumber : int, optional
164
+ The stage number from which to retrieve the support entities.
165
+ Specify ``-1`` (default) to get all support entities that are used in the
166
+ model regardless of stage.
167
+
168
+ Returns
169
+ -------
170
+ list
171
+ A list of support entity objects corresponding to the specified
172
+ ``entityType``. The returned list contains one of the following
173
+ object types:
174
+
175
+ - ``Beam`` for ``SupportTypes.BEAM``
176
+ - ``Bolt`` for ``SupportTypes.BOLT``
177
+ - ``Joint`` for ``SupportTypes.JOINT``
178
+ - ``LiningComposition`` for ``SupportTypes.COMPOSITE_LINER``
179
+ - ``Pile`` for ``SupportTypes.PILE``
180
+
181
+ Examples
182
+ --------
183
+ Retrieve all bolts intersecting a sphere:
184
+
185
+ >>> sphere = Sphere(Point(0, 0, 0), 5)
186
+ >>> bolts = model.getSupportEntities(SupportTypes.BOLT, sphere)
187
+
188
+ Retrieve beams completely contained within a cube at stage 3:
189
+
190
+ >>> cube = Cube(Point(0, 0, 0), Point(10, 10, 10))
191
+ >>> beams = model.getSupportEntities(
192
+ ... SupportTypes.BEAM,
193
+ ... cube,
194
+ ... includeIntersecting=False,
195
+ ... stageNumber=3,
196
+ ... )
197
+ """
198
+
199
+ geometry_ = sampleRegion.toCommonVolumeGeometryObject()
200
+ request = SupportEntityService.GetSupportEntitiesByGeometryRequest(_projectId=self._projectId, entityType = entityType.value, geometry=geometry_, includeIntersecting=includeIntersecting, stageNumber=stageNumber)
201
+ result_ = self._client.callFunction(self._SupportEntityService.GetSupportEntitiesByGeometry, request)
202
+
203
+ match entityType:
204
+ case SupportTypes.BEAM:
205
+ return [Beam(self._client, obj) for obj in result_.result]
206
+ case SupportTypes.BOLT:
207
+ return [Bolt(self._client, obj) for obj in result_.result]
208
+ case SupportTypes.JOINT:
209
+ return [Joint(self._client, obj) for obj in result_.result]
210
+ case SupportTypes.COMPOSITE_LINER:
211
+ return [LiningComposition(self._client, obj) for obj in result_.result]
212
+ case SupportTypes.PILE:
213
+ return [Pile(self._client, obj) for obj in result_.result]
rs3/_client.py CHANGED
@@ -6,7 +6,7 @@ import rs3.generatedFiles.ClientService_pb2 as ClientService_pb2
6
6
 
7
7
  class Client:
8
8
  def __init__(self, port):
9
- self.compatibleProgramVersion = "4.043"
9
+ self.compatibleProgramVersion = "4.044"
10
10
  self.connection = self._establishConnection(port)
11
11
  self.logger = logging.getLogger('Rocscience.RS3')
12
12
  atexit.register(self.closeConnection)
@@ -0,0 +1,85 @@
1
+ from rs3._client import Client
2
+ from rs3._proxyObject import _ProxyObject
3
+ import rs3.generatedFiles.CommonMessages_pb2 as CommonMessages_pb2
4
+ from typing import TypeVar, Generic, Type
5
+
6
+ TProperty = TypeVar("TProperty")
7
+
8
+ class BaseEntity(_ProxyObject, Generic[TProperty]):
9
+ def __init__(self, client : Client, objectID : str, service, propertyCls: Type[TProperty]):
10
+ super().__init__(client, objectID)
11
+ self._service = service
12
+ self._property_cls = propertyCls
13
+
14
+ def setName(self, name : str):
15
+ request = CommonMessages_pb2.SetEntityPropertyRequest(entityId=self._objectId, propertyIdOrName=name)
16
+ self._client.callFunction(self._service.SetEntityName, request)
17
+ def getName(self) -> str:
18
+ request = CommonMessages_pb2.GetEntityPropertyRequest(objectId=self._objectId)
19
+ response : CommonMessages_pb2.GetEntityPropertyResponse = self._client.callFunction(self._service.GetEntityName, request)
20
+ return response.propertyIdOrName
21
+
22
+ def setGrouping(self, stageNum : int, groupName : str):
23
+ """
24
+ Assign group to the given stage by the group name. To ungroup the material, "Ungrouped" should be used as the groupName.
25
+ """
26
+ request = CommonMessages_pb2.SetGroupingRequest(objectId=self._objectId, stageNum=stageNum, groupName=groupName)
27
+ self._client.callFunction(self._service.SetGrouping, request)
28
+ def getGrouping(self, stageNum : int):
29
+ request = CommonMessages_pb2.GetGroupingRequest(objectId=self._objectId, stageNum=stageNum)
30
+ response : CommonMessages_pb2.GetGroupingResponse = self._client.callFunction(self._service.GetGrouping, request)
31
+ return response.groupName
32
+
33
+ def setProperty(self, value: TProperty):
34
+ """
35
+ Assigned support properties to the corresponding support entities.
36
+ """
37
+ request = CommonMessages_pb2.SetEntityPropertyRequest(entityId=self._objectId, propertyIdOrName=value._objectId)
38
+ self._client.callFunction(self._service.SetEntityProperty, request)
39
+ def getProperty(self) -> TProperty:
40
+ """
41
+ Get the support properties used on the selected support entity.
42
+ """
43
+ request = CommonMessages_pb2.GetEntityPropertyRequest(objectId=self._objectId)
44
+ response : CommonMessages_pb2.GetEntityPropertyResponse = self._client.callFunction(self._service.GetEntityProperty, request)
45
+ return self._property_cls(self._client, response.propertyIdOrName)
46
+
47
+ def setInstallationStageByStageName(self, value: str):
48
+ """
49
+ Set the installation stage.
50
+ """
51
+ request = CommonMessages_pb2.SetStagingRequest(objectId=self._objectId, isInstallationStage=True, isByName = True, value=CommonMessages_pb2.PropertyValue(stringValue=value))
52
+ self._client.callFunction(self._service.SetStaging, request)
53
+ def setInstallationStageByStageNumber(self, value: int):
54
+ """
55
+ Set the installation stage.
56
+ """
57
+ request = CommonMessages_pb2.SetStagingRequest(objectId=self._objectId, isInstallationStage=True, isByName = False, value=CommonMessages_pb2.PropertyValue(intValue=value))
58
+ self._client.callFunction(self._service.SetStaging, request)
59
+ def getInstallationStage(self) -> int:
60
+ """
61
+ Get the installation stage (not stage index).
62
+ """
63
+ request = CommonMessages_pb2.GetStagingRequest(objectId=self._objectId, isInstallationStage=True)
64
+ response : CommonMessages_pb2.GetStagingResponse = self._client.callFunction(self._service.GetStaging, request)
65
+ return response.value
66
+
67
+ def setRemovalStageByStageName(self, value: str):
68
+ """
69
+ Set the removal stage. "Never" means the entity will not get removed.
70
+ """
71
+ request = CommonMessages_pb2.SetStagingRequest(objectId=self._objectId, isInstallationStage=False, isByName = True, value=CommonMessages_pb2.PropertyValue(stringValue=value))
72
+ self._client.callFunction(self._service.SetStaging, request)
73
+ def setRemovalStageByStageNumber(self, value: int):
74
+ """
75
+ Set the removal stage. -1 means the pile will not get removed.
76
+ """
77
+ request = CommonMessages_pb2.SetStagingRequest(objectId=self._objectId, isInstallationStage=False, isByName = False, value=CommonMessages_pb2.PropertyValue(intValue=value))
78
+ self._client.callFunction(self._service.SetStaging, request)
79
+ def getRemovalStage(self) -> int:
80
+ """
81
+ Get the removal stage (not stage index). If the value is -1, it means the entity will not get removed.
82
+ """
83
+ request = CommonMessages_pb2.GetStagingRequest(objectId=self._objectId, isInstallationStage=False)
84
+ response : CommonMessages_pb2.GetStagingResponse = self._client.callFunction(self._service.GetStaging, request)
85
+ return response.value
File without changes
@@ -0,0 +1,12 @@
1
+ from rs3._client import Client
2
+ import rs3.generatedFiles.ModifyBeamEntityService_pb2_grpc as ModifyBeamEntityService_pb2_grpc
3
+ from rs3.entities.BaseEntity import BaseEntity
4
+ from rs3.properties.beam.Beam import BeamProperty
5
+
6
+ class Beam(BaseEntity[BeamProperty]):
7
+ """
8
+ Beam Entity.
9
+ """
10
+ def __init__(self, client : Client, objectID : str):
11
+ super().__init__(client, objectID, ModifyBeamEntityService_pb2_grpc.ModifyBeamEntityServiceStub(client.channel), BeamProperty)
12
+
File without changes
@@ -0,0 +1,11 @@
1
+ from rs3._client import Client
2
+ import rs3.generatedFiles.ModifyBoltEntityService_pb2_grpc as ModifyBoltEntityService_pb2_grpc
3
+ from rs3.entities.BaseEntity import BaseEntity
4
+ from rs3.properties.bolt.Bolt import BoltProperty
5
+
6
+ class Bolt(BaseEntity[BoltProperty]):
7
+ """
8
+ Bolt Entity.
9
+ """
10
+ def __init__(self, client : Client, objectID : str):
11
+ super().__init__(client, objectID, ModifyBoltEntityService_pb2_grpc.ModifyBoltEntityServiceStub(client.channel), BoltProperty)
rs3/entities/entity.py ADDED
@@ -0,0 +1,48 @@
1
+ from rs3._client import Client
2
+ from rs3.CommonEnums import SupportTypes
3
+ from rs3.entities.beam.beam import Beam
4
+ from rs3.entities.bolt.bolt import Bolt
5
+ from rs3.entities.joint.joint import Joint
6
+ from rs3.entities.liningComposition.liningComposition import LiningComposition
7
+ from rs3.entities.pile.pile import Pile
8
+ import rs3.generatedFiles.SupportEntityService_pb2_grpc as SupportEntityServiceGrpc
9
+ import rs3.generatedFiles.SupportEntityService_pb2 as SupportEntityService
10
+ from rs3._proxyObject import _ProxyObject
11
+
12
+ class Entity(_ProxyObject):
13
+ def __init__(self, client: Client, projectId: str):
14
+ self._client = client
15
+ self._projectId = projectId
16
+ self._SupportEntityService = SupportEntityServiceGrpc.SupportEntityServiceStub(self._client.channel)
17
+
18
+ def getAllSupportEntities(self, entityType: SupportTypes):
19
+ request = SupportEntityService.GetAllSupportEntitiesRequest(_projectId=self._projectId, entityType = entityType.value)
20
+ result_ = self._client.callFunction(self._SupportEntityService.GetAllSupportEntities, request)
21
+
22
+ match entityType:
23
+ case SupportTypes.BEAM:
24
+ return [Beam(self._client, obj) for obj in result_.result]
25
+ case SupportTypes.BOLT:
26
+ return [Bolt(self._client, obj) for obj in result_.result]
27
+ case SupportTypes.JOINT:
28
+ return [Joint(self._client, obj) for obj in result_.result]
29
+ case SupportTypes.COMPOSITE_LINER:
30
+ return [LiningComposition(self._client, obj) for obj in result_.result]
31
+ case SupportTypes.PILE:
32
+ return [Pile(self._client, obj) for obj in result_.result]
33
+
34
+ def getSupportEntityByName(self, entityType: SupportTypes, name: str):
35
+ request = SupportEntityService.GetSupportEntityByNameRequest(_projectId=self._projectId, entityType = entityType.value, name=name)
36
+ result_ = self._client.callFunction(self._SupportEntityService.GetSupportEntityByName, request)
37
+
38
+ match entityType:
39
+ case SupportTypes.BEAM:
40
+ return Beam(self._client, result_.result)
41
+ case SupportTypes.BOLT:
42
+ return Bolt(self._client, result_.result)
43
+ case SupportTypes.JOINT:
44
+ return Joint(self._client, result_.result)
45
+ case SupportTypes.COMPOSITE_LINER:
46
+ return LiningComposition(self._client, result_.result)
47
+ case SupportTypes.PILE:
48
+ return Pile(self._client, result_.result)
File without changes
@@ -0,0 +1,11 @@
1
+ from rs3._client import Client
2
+ import rs3.generatedFiles.ModifyJointEntityService_pb2_grpc as ModifyJointEntityService_pb2_grpc
3
+ from rs3.entities.BaseEntity import BaseEntity
4
+ from rs3.properties.joint.Joint import JointProperty
5
+
6
+ class Joint(BaseEntity[JointProperty]):
7
+ """
8
+ Joint Entity.
9
+ """
10
+ def __init__(self, client : Client, objectID : str):
11
+ super().__init__(client, objectID, ModifyJointEntityService_pb2_grpc.ModifyJointEntityServiceStub(client.channel), JointProperty)
File without changes
@@ -0,0 +1,11 @@
1
+ from rs3._client import Client
2
+ import rs3.generatedFiles.ModifyCompositeLinerEntity_pb2_grpc as ModifyCompositeLinerEntity_pb2_grpc
3
+ from rs3.entities.BaseEntity import BaseEntity
4
+ from rs3.properties.liningComposition.LiningComposition import LiningCompositionProperty
5
+
6
+ class LiningComposition(BaseEntity[LiningCompositionProperty]):
7
+ """
8
+ LiningComposition Entity.
9
+ """
10
+ def __init__(self, client : Client, objectID : str):
11
+ super().__init__(client, objectID, ModifyCompositeLinerEntity_pb2_grpc.ModifyCompositeLinerEntityServiceStub(client.channel), LiningCompositionProperty)
File without changes
@@ -0,0 +1,11 @@
1
+ from rs3._client import Client
2
+ import rs3.generatedFiles.ModifyPileEntityService_pb2_grpc as ModifyPileEntityService_pb2_grpc
3
+ from rs3.entities.BaseEntity import BaseEntity
4
+ from rs3.properties.pile.Pile import PileProperty
5
+
6
+ class Pile(BaseEntity[PileProperty]):
7
+ """
8
+ Pile Entity.
9
+ """
10
+ def __init__(self, client : Client, objectID : str):
11
+ super().__init__(client, objectID, ModifyPileEntityService_pb2_grpc.ModifyPileEntityServiceStub(client.channel), PileProperty)
@@ -1,38 +1,38 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # NO CHECKED-IN PROTOBUF GENCODE
4
- # source: BFPCommonMessage.proto
5
- # Protobuf Python Version: 5.29.0
6
- """Generated protocol buffer code."""
7
- from google.protobuf import descriptor as _descriptor
8
- from google.protobuf import descriptor_pool as _descriptor_pool
9
- from google.protobuf import runtime_version as _runtime_version
10
- from google.protobuf import symbol_database as _symbol_database
11
- from google.protobuf.internal import builder as _builder
12
- _runtime_version.ValidateProtobufRuntimeVersion(
13
- _runtime_version.Domain.PUBLIC,
14
- 5,
15
- 29,
16
- 0,
17
- '',
18
- 'BFPCommonMessage.proto'
19
- )
20
- # @@protoc_insertion_point(imports)
21
-
22
- _sym_db = _symbol_database.Default()
23
-
24
-
25
-
26
-
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x42\x46PCommonMessage.proto\x12\x10\x42\x46PCommonMessage\"\xeb\x01\n\x12\x45lementNodalValues\x12\x11\n\taxisForce\x18\x01 \x01(\x01\x12\x19\n\x11shearForceMinAxis\x18\x02 \x01(\x01\x12\x19\n\x11shearForceMaxAxis\x18\x03 \x01(\x01\x12\x15\n\rmomentMinAxis\x18\x04 \x01(\x01\x12\x15\n\rmomentMaxAxis\x18\x05 \x01(\x01\x12\x15\n\rdisplacementX\x18\x06 \x01(\x01\x12\x15\n\rdisplacementY\x18\x07 \x01(\x01\x12\x15\n\rdisplacementZ\x18\x08 \x01(\x01\x12\x19\n\x11totalDisplacement\x18\t \x01(\x01\"\xeb\x01\n\x14InterfaceNodalValues\x12\x12\n\nshearForce\x18\x01 \x01(\x01\x12\x1a\n\x12normalForceMinAxis\x18\x02 \x01(\x01\x12\x1a\n\x12normalForceMaxAxis\x18\x03 \x01(\x01\x12\x17\n\x0f\x63onfiningStress\x18\x04 \x01(\x01\x12\x19\n\x11rockDisplacementX\x18\x05 \x01(\x01\x12\x19\n\x11rockDisplacementY\x18\x06 \x01(\x01\x12\x19\n\x11rockDisplacementZ\x18\x07 \x01(\x01\x12\x1d\n\x15rockTotalDisplacement\x18\x08 \x01(\x01\x62\x06proto3')
28
-
29
- _globals = globals()
30
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'BFPCommonMessage_pb2', _globals)
32
- if not _descriptor._USE_C_DESCRIPTORS:
33
- DESCRIPTOR._loaded_options = None
34
- _globals['_ELEMENTNODALVALUES']._serialized_start=45
35
- _globals['_ELEMENTNODALVALUES']._serialized_end=280
36
- _globals['_INTERFACENODALVALUES']._serialized_start=283
37
- _globals['_INTERFACENODALVALUES']._serialized_end=518
38
- # @@protoc_insertion_point(module_scope)
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: BFPCommonMessage.proto
5
+ # Protobuf Python Version: 5.29.0
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'BFPCommonMessage.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x42\x46PCommonMessage.proto\x12\x10\x42\x46PCommonMessage\"\xeb\x01\n\x12\x45lementNodalValues\x12\x11\n\taxisForce\x18\x01 \x01(\x01\x12\x19\n\x11shearForceMinAxis\x18\x02 \x01(\x01\x12\x19\n\x11shearForceMaxAxis\x18\x03 \x01(\x01\x12\x15\n\rmomentMinAxis\x18\x04 \x01(\x01\x12\x15\n\rmomentMaxAxis\x18\x05 \x01(\x01\x12\x15\n\rdisplacementX\x18\x06 \x01(\x01\x12\x15\n\rdisplacementY\x18\x07 \x01(\x01\x12\x15\n\rdisplacementZ\x18\x08 \x01(\x01\x12\x19\n\x11totalDisplacement\x18\t \x01(\x01\"\xeb\x01\n\x14InterfaceNodalValues\x12\x12\n\nshearForce\x18\x01 \x01(\x01\x12\x1a\n\x12normalForceMinAxis\x18\x02 \x01(\x01\x12\x1a\n\x12normalForceMaxAxis\x18\x03 \x01(\x01\x12\x17\n\x0f\x63onfiningStress\x18\x04 \x01(\x01\x12\x19\n\x11rockDisplacementX\x18\x05 \x01(\x01\x12\x19\n\x11rockDisplacementY\x18\x06 \x01(\x01\x12\x19\n\x11rockDisplacementZ\x18\x07 \x01(\x01\x12\x1d\n\x15rockTotalDisplacement\x18\x08 \x01(\x01\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'BFPCommonMessage_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_ELEMENTNODALVALUES']._serialized_start=45
35
+ _globals['_ELEMENTNODALVALUES']._serialized_end=280
36
+ _globals['_INTERFACENODALVALUES']._serialized_start=283
37
+ _globals['_INTERFACENODALVALUES']._serialized_end=518
38
+ # @@protoc_insertion_point(module_scope)