RS3Scripting 4.42.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.
- rs3/ApplicationManager.py +77 -0
- rs3/ColorPicker.py +123 -0
- rs3/CommonEnums.py +16 -0
- rs3/Compute.py +105 -0
- rs3/ExternalVolume.py +48 -0
- rs3/Geometry.py +74 -0
- rs3/Model.py +795 -0
- rs3/ModelEnums.py +9 -0
- rs3/RS3Modeler.py +109 -0
- rs3/Restraints.py +91 -0
- rs3/Selection.py +123 -0
- rs3/__init__.py +18 -0
- rs3/_client.py +57 -0
- rs3/_proxyObject.py +5 -0
- rs3/generatedFiles/BFPCommonMessage_pb2.py +38 -0
- rs3/generatedFiles/BFPCommonMessage_pb2.pyi +47 -0
- rs3/generatedFiles/BFPCommonMessage_pb2_grpc.py +24 -0
- rs3/generatedFiles/BeamDataService_pb2.py +37 -0
- rs3/generatedFiles/BeamDataService_pb2.pyi +5 -0
- rs3/generatedFiles/BeamDataService_pb2_grpc.py +226 -0
- rs3/generatedFiles/BeamService_pb2.py +37 -0
- rs3/generatedFiles/BeamService_pb2.pyi +5 -0
- rs3/generatedFiles/BeamService_pb2_grpc.py +140 -0
- rs3/generatedFiles/BeamStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/BeamStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/BeamStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/BeamsResultsQueryService_pb2.py +50 -0
- rs3/generatedFiles/BeamsResultsQueryService_pb2.pyi +48 -0
- rs3/generatedFiles/BeamsResultsQueryService_pb2_grpc.py +141 -0
- rs3/generatedFiles/BoltDataService_pb2.py +37 -0
- rs3/generatedFiles/BoltDataService_pb2.pyi +5 -0
- rs3/generatedFiles/BoltDataService_pb2_grpc.py +226 -0
- rs3/generatedFiles/BoltService_pb2.py +37 -0
- rs3/generatedFiles/BoltService_pb2.pyi +5 -0
- rs3/generatedFiles/BoltService_pb2_grpc.py +140 -0
- rs3/generatedFiles/BoltsResultsQueryService_pb2.py +51 -0
- rs3/generatedFiles/BoltsResultsQueryService_pb2.pyi +75 -0
- rs3/generatedFiles/BoltsResultsQueryService_pb2_grpc.py +141 -0
- rs3/generatedFiles/ClientService_pb2.py +40 -0
- rs3/generatedFiles/ClientService_pb2.pyi +15 -0
- rs3/generatedFiles/ClientService_pb2_grpc.py +97 -0
- rs3/generatedFiles/CommonGeometryMessages_pb2.py +52 -0
- rs3/generatedFiles/CommonGeometryMessages_pb2.pyi +92 -0
- rs3/generatedFiles/CommonGeometryMessages_pb2_grpc.py +24 -0
- rs3/generatedFiles/CommonMessages_pb2.py +66 -0
- rs3/generatedFiles/CommonMessages_pb2.pyi +145 -0
- rs3/generatedFiles/CommonMessages_pb2_grpc.py +24 -0
- rs3/generatedFiles/CompositeLinerDataService_pb2.py +47 -0
- rs3/generatedFiles/CompositeLinerDataService_pb2.pyi +51 -0
- rs3/generatedFiles/CompositeLinerDataService_pb2_grpc.py +227 -0
- rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.py +63 -0
- rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.pyi +139 -0
- rs3/generatedFiles/CompositeLinerResultsQueryService_pb2_grpc.py +314 -0
- rs3/generatedFiles/CompositeLinerService_pb2.py +37 -0
- rs3/generatedFiles/CompositeLinerService_pb2.pyi +5 -0
- rs3/generatedFiles/CompositeLinerService_pb2_grpc.py +140 -0
- rs3/generatedFiles/ComputeService_pb2.py +48 -0
- rs3/generatedFiles/ComputeService_pb2.pyi +56 -0
- rs3/generatedFiles/ComputeService_pb2_grpc.py +147 -0
- rs3/generatedFiles/ExternalVolumesService_pb2.py +45 -0
- rs3/generatedFiles/ExternalVolumesService_pb2.pyi +34 -0
- rs3/generatedFiles/ExternalVolumesService_pb2_grpc.py +270 -0
- rs3/generatedFiles/FieldStressService_pb2.py +37 -0
- rs3/generatedFiles/FieldStressService_pb2.pyi +5 -0
- rs3/generatedFiles/FieldStressService_pb2_grpc.py +140 -0
- rs3/generatedFiles/FieldStressSourceService_pb2.py +85 -0
- rs3/generatedFiles/FieldStressSourceService_pb2.pyi +182 -0
- rs3/generatedFiles/FieldStressSourceService_pb2_grpc.py +657 -0
- rs3/generatedFiles/GaussPointFailureMessage_pb2.py +37 -0
- rs3/generatedFiles/GaussPointFailureMessage_pb2.pyi +14 -0
- rs3/generatedFiles/GaussPointFailureMessage_pb2_grpc.py +24 -0
- rs3/generatedFiles/HydraulicStageFactorService_pb2.py +45 -0
- rs3/generatedFiles/HydraulicStageFactorService_pb2.pyi +36 -0
- rs3/generatedFiles/HydraulicStageFactorService_pb2_grpc.py +227 -0
- rs3/generatedFiles/JointDataService_pb2.py +45 -0
- rs3/generatedFiles/JointDataService_pb2.pyi +30 -0
- rs3/generatedFiles/JointDataService_pb2_grpc.py +313 -0
- rs3/generatedFiles/JointResultsQueryService_pb2.py +54 -0
- rs3/generatedFiles/JointResultsQueryService_pb2.pyi +92 -0
- rs3/generatedFiles/JointResultsQueryService_pb2_grpc.py +141 -0
- rs3/generatedFiles/JointService_pb2.py +45 -0
- rs3/generatedFiles/JointService_pb2.pyi +30 -0
- rs3/generatedFiles/JointService_pb2_grpc.py +227 -0
- rs3/generatedFiles/JointStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/JointStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/JointStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/LinerDataService_pb2.py +37 -0
- rs3/generatedFiles/LinerDataService_pb2.pyi +5 -0
- rs3/generatedFiles/LinerDataService_pb2_grpc.py +226 -0
- rs3/generatedFiles/LinerService_pb2.py +37 -0
- rs3/generatedFiles/LinerService_pb2.pyi +5 -0
- rs3/generatedFiles/LinerService_pb2_grpc.py +140 -0
- rs3/generatedFiles/LinerStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/LinerStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/LinerStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialDataService_pb2.py +37 -0
- rs3/generatedFiles/MaterialDataService_pb2.pyi +5 -0
- rs3/generatedFiles/MaterialDataService_pb2_grpc.py +226 -0
- rs3/generatedFiles/MaterialDatumService_pb2.py +45 -0
- rs3/generatedFiles/MaterialDatumService_pb2.pyi +38 -0
- rs3/generatedFiles/MaterialDatumService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialHydraulicDataService_pb2.py +93 -0
- rs3/generatedFiles/MaterialHydraulicDataService_pb2.pyi +193 -0
- rs3/generatedFiles/MaterialHydraulicDataService_pb2_grpc.py +829 -0
- rs3/generatedFiles/MaterialHydraulicModelService_pb2.py +55 -0
- rs3/generatedFiles/MaterialHydraulicModelService_pb2.pyi +79 -0
- rs3/generatedFiles/MaterialHydraulicModelService_pb2_grpc.py +313 -0
- rs3/generatedFiles/MaterialInitialConditionsService_pb2.py +37 -0
- rs3/generatedFiles/MaterialInitialConditionsService_pb2.pyi +5 -0
- rs3/generatedFiles/MaterialInitialConditionsService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialJointService_pb2.py +49 -0
- rs3/generatedFiles/MaterialJointService_pb2.pyi +52 -0
- rs3/generatedFiles/MaterialJointService_pb2_grpc.py +183 -0
- rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2.py +69 -0
- rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2.pyi +130 -0
- rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2_grpc.py +398 -0
- rs3/generatedFiles/MaterialJointStageFactorService_pb2.py +45 -0
- rs3/generatedFiles/MaterialJointStageFactorService_pb2.pyi +42 -0
- rs3/generatedFiles/MaterialJointStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialStageFactorsService_pb2.py +37 -0
- rs3/generatedFiles/MaterialStageFactorsService_pb2.pyi +5 -0
- rs3/generatedFiles/MaterialStageFactorsService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialStiffnessFormulaService_pb2.py +47 -0
- rs3/generatedFiles/MaterialStiffnessFormulaService_pb2.pyi +54 -0
- rs3/generatedFiles/MaterialStiffnessFormulaService_pb2_grpc.py +140 -0
- rs3/generatedFiles/MaterialStiffnessService_pb2.py +53 -0
- rs3/generatedFiles/MaterialStiffnessService_pb2.pyi +66 -0
- rs3/generatedFiles/MaterialStiffnessService_pb2_grpc.py +313 -0
- rs3/generatedFiles/MaterialStrengthService_pb2.py +105 -0
- rs3/generatedFiles/MaterialStrengthService_pb2.pyi +243 -0
- rs3/generatedFiles/MaterialStrengthService_pb2_grpc.py +833 -0
- rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.py +47 -0
- rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.pyi +43 -0
- rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2_grpc.py +228 -0
- rs3/generatedFiles/MeshSettingsService_pb2.py +41 -0
- rs3/generatedFiles/MeshSettingsService_pb2.pyi +16 -0
- rs3/generatedFiles/MeshSettingsService_pb2_grpc.py +184 -0
- rs3/generatedFiles/ModelFunctionService_pb2.py +119 -0
- rs3/generatedFiles/ModelFunctionService_pb2.pyi +331 -0
- rs3/generatedFiles/ModelFunctionService_pb2_grpc.py +871 -0
- rs3/generatedFiles/ModelService_pb2.py +342 -0
- rs3/generatedFiles/ModelService_pb2.pyi +962 -0
- rs3/generatedFiles/ModelService_pb2_grpc.py +3322 -0
- rs3/generatedFiles/PileDataService_pb2.py +55 -0
- rs3/generatedFiles/PileDataService_pb2.pyi +63 -0
- rs3/generatedFiles/PileDataService_pb2_grpc.py +399 -0
- rs3/generatedFiles/PileForepoleResultsQueryService_pb2.py +51 -0
- rs3/generatedFiles/PileForepoleResultsQueryService_pb2.pyi +63 -0
- rs3/generatedFiles/PileForepoleResultsQueryService_pb2_grpc.py +141 -0
- rs3/generatedFiles/PileStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/PileStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/PileStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/PlainStrandCableBoltService_pb2.py +44 -0
- rs3/generatedFiles/PlainStrandCableBoltService_pb2.pyi +30 -0
- rs3/generatedFiles/PlainStrandCableBoltService_pb2_grpc.py +140 -0
- rs3/generatedFiles/ProjectSettingsDataService_pb2.py +69 -0
- rs3/generatedFiles/ProjectSettingsDataService_pb2.pyi +119 -0
- rs3/generatedFiles/ProjectSettingsDataService_pb2_grpc.py +786 -0
- rs3/generatedFiles/RFCApplicationService_pb2.py +34 -0
- rs3/generatedFiles/RFCApplicationService_pb2.pyi +27 -0
- rs3/generatedFiles/RFCApplicationService_pb2_grpc.py +145 -0
- rs3/generatedFiles/RS3ModelerService_pb2.py +50 -0
- rs3/generatedFiles/RS3ModelerService_pb2.pyi +45 -0
- rs3/generatedFiles/RS3ModelerService_pb2_grpc.py +183 -0
- rs3/generatedFiles/RelativeStageFactorService_pb2.py +40 -0
- rs3/generatedFiles/RelativeStageFactorService_pb2.pyi +17 -0
- rs3/generatedFiles/RelativeStageFactorService_pb2_grpc.py +97 -0
- rs3/generatedFiles/RestraintsService_pb2.py +62 -0
- rs3/generatedFiles/RestraintsService_pb2.pyi +84 -0
- rs3/generatedFiles/RestraintsService_pb2_grpc.py +312 -0
- rs3/generatedFiles/ResultsQueryCommonMessage_pb2.py +56 -0
- rs3/generatedFiles/ResultsQueryCommonMessage_pb2.pyi +85 -0
- rs3/generatedFiles/ResultsQueryCommonMessage_pb2_grpc.py +24 -0
- rs3/generatedFiles/ResultsQueryService_pb2.py +87 -0
- rs3/generatedFiles/ResultsQueryService_pb2.pyi +185 -0
- rs3/generatedFiles/ResultsQueryService_pb2_grpc.py +745 -0
- rs3/generatedFiles/SelectionService_pb2.py +49 -0
- rs3/generatedFiles/SelectionService_pb2.pyi +51 -0
- rs3/generatedFiles/SelectionService_pb2_grpc.py +269 -0
- rs3/generatedFiles/SolidsResultsQueryService_pb2.py +93 -0
- rs3/generatedFiles/SolidsResultsQueryService_pb2.pyi +213 -0
- rs3/generatedFiles/SolidsResultsQueryService_pb2_grpc.py +195 -0
- rs3/generatedFiles/StageFactorService_pb2.py +58 -0
- rs3/generatedFiles/StageFactorService_pb2.pyi +79 -0
- rs3/generatedFiles/StageFactorService_pb2_grpc.py +226 -0
- rs3/generatedFiles/StiffnessStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/StiffnessStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/StiffnessStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/StrengthStageFactorService_pb2.py +37 -0
- rs3/generatedFiles/StrengthStageFactorService_pb2.pyi +5 -0
- rs3/generatedFiles/StrengthStageFactorService_pb2_grpc.py +140 -0
- rs3/generatedFiles/WaterByLocationDataService_pb2.py +61 -0
- rs3/generatedFiles/WaterByLocationDataService_pb2.pyi +95 -0
- rs3/generatedFiles/WaterByLocationDataService_pb2_grpc.py +312 -0
- rs3/generatedFiles/WaterPressureGridDataService_pb2.py +63 -0
- rs3/generatedFiles/WaterPressureGridDataService_pb2.pyi +107 -0
- rs3/generatedFiles/WaterPressureGridDataService_pb2_grpc.py +312 -0
- rs3/generatedFiles/__init__.py +3 -0
- rs3/loadings/LoadingEnums.py +6 -0
- rs3/loadings/Loadings.py +15 -0
- rs3/loadings/__init__.py +0 -0
- rs3/loadings/fieldStress/AdvancedConstant.py +115 -0
- rs3/loadings/fieldStress/AdvancedGravity.py +176 -0
- rs3/loadings/fieldStress/Constant.py +119 -0
- rs3/loadings/fieldStress/FieldStress.py +38 -0
- rs3/loadings/fieldStress/Gravity.py +206 -0
- rs3/loadings/fieldStress/_PropertyAccessor.py +41 -0
- rs3/loadings/fieldStress/__init__.py +0 -0
- rs3/mesh/Graded.py +59 -0
- rs3/mesh/Mesh.py +50 -0
- rs3/mesh/MeshEnums.py +16 -0
- rs3/mesh/Uniform.py +35 -0
- rs3/mesh/_PropertyAccessor.py +10 -0
- rs3/mesh/__init__.py +0 -0
- rs3/projectSettings/Dynamic.py +110 -0
- rs3/projectSettings/Groundwater.py +118 -0
- rs3/projectSettings/ProjectSettingEnums.py +108 -0
- rs3/projectSettings/ProjectSettings.py +43 -0
- rs3/projectSettings/ShearStrengthReduction.py +130 -0
- rs3/projectSettings/SolverOptions.py +88 -0
- rs3/projectSettings/Stages.py +162 -0
- rs3/projectSettings/StressAnalysis.py +183 -0
- rs3/projectSettings/Units.py +82 -0
- rs3/projectSettings/_PropertyAccessor.py +133 -0
- rs3/projectSettings/__init__.py +0 -0
- rs3/properties/CustomHydraulicModel.py +129 -0
- rs3/properties/DiscreteFunction.py +147 -0
- rs3/properties/GeneralizedAnisotropicFunction.py +98 -0
- rs3/properties/IPropertyGroupAccessors.py +12 -0
- rs3/properties/PropertyEnums.py +387 -0
- rs3/properties/ShearNormalFunction.py +94 -0
- rs3/properties/SnowdenStrengthFunction.py +115 -0
- rs3/properties/_PropertyAccessor.py +111 -0
- rs3/properties/__init__.py +0 -0
- rs3/properties/beam/Beam.py +86 -0
- rs3/properties/beam/BeamCommon.py +175 -0
- rs3/properties/beam/Standard.py +97 -0
- rs3/properties/beam/Truss.py +23 -0
- rs3/properties/beam/_PropertyAccessor.py +9 -0
- rs3/properties/beam/__init__.py +0 -0
- rs3/properties/bolt/Bolt.py +81 -0
- rs3/properties/bolt/EndAnchored.py +77 -0
- rs3/properties/bolt/FullyBonded.py +78 -0
- rs3/properties/bolt/PlainStrandCable.py +151 -0
- rs3/properties/bolt/Swellex.py +106 -0
- rs3/properties/bolt/Tieback.py +176 -0
- rs3/properties/bolt/_PropertyAccessor.py +7 -0
- rs3/properties/bolt/__init__.py +0 -0
- rs3/properties/groundwater/WaterByLocation.py +83 -0
- rs3/properties/groundwater/WaterGrid.py +120 -0
- rs3/properties/groundwater/_PropertyAccessor.py +36 -0
- rs3/properties/groundwater/__init__.py +0 -0
- rs3/properties/joint/BartonBandis.py +118 -0
- rs3/properties/joint/GeosyntheticHyperbolic.py +158 -0
- rs3/properties/joint/Joint.py +176 -0
- rs3/properties/joint/MaterialDependent.py +107 -0
- rs3/properties/joint/MohrCoulomb.py +169 -0
- rs3/properties/joint/NoneSlip.py +68 -0
- rs3/properties/joint/_PropertyAccessor.py +9 -0
- rs3/properties/joint/__init__.py +0 -0
- rs3/properties/liner/Geosynthetic.py +85 -0
- rs3/properties/liner/Liner.py +83 -0
- rs3/properties/liner/ReinforcedConcrete.py +216 -0
- rs3/properties/liner/Standard.py +183 -0
- rs3/properties/liner/_PropertyAccessor.py +7 -0
- rs3/properties/liner/__init__.py +0 -0
- rs3/properties/liningComposition/LiningComposition.py +244 -0
- rs3/properties/liningComposition/_PropertyAccessor.py +7 -0
- rs3/properties/liningComposition/__init__.py +0 -0
- rs3/properties/material/Material.py +74 -0
- rs3/properties/material/__init__.py +0 -0
- rs3/properties/material/constitutiveModel/AnisotropicLinear.py +149 -0
- rs3/properties/material/constitutiveModel/AnisotropicLinearPlanarBase.py +72 -0
- rs3/properties/material/constitutiveModel/BarcelonaBasic.py +158 -0
- rs3/properties/material/constitutiveModel/BartonBandis.py +77 -0
- rs3/properties/material/constitutiveModel/BaseConstitutiveModel.py +11 -0
- rs3/properties/material/constitutiveModel/BoundingSurfacePlasticity.py +88 -0
- rs3/properties/material/constitutiveModel/CamClay.py +144 -0
- rs3/properties/material/constitutiveModel/ChSoil.py +111 -0
- rs3/properties/material/constitutiveModel/ConstitutiveModel.py +87 -0
- rs3/properties/material/constitutiveModel/CySoil.py +137 -0
- rs3/properties/material/constitutiveModel/DiscreteFunction.py +39 -0
- rs3/properties/material/constitutiveModel/DoubleYield.py +130 -0
- rs3/properties/material/constitutiveModel/DruckerPrager.py +136 -0
- rs3/properties/material/constitutiveModel/GeneralizedAnisotropic.py +39 -0
- rs3/properties/material/constitutiveModel/GeneralizedHoekBrown.py +226 -0
- rs3/properties/material/constitutiveModel/HardeningSoil.py +156 -0
- rs3/properties/material/constitutiveModel/HardeningSoilWithSmallStrain.py +170 -0
- rs3/properties/material/constitutiveModel/HoekBrown.py +125 -0
- rs3/properties/material/constitutiveModel/Hyperbolic.py +77 -0
- rs3/properties/material/constitutiveModel/JointedGeneralizedHoekBrown.py +184 -0
- rs3/properties/material/constitutiveModel/JointedMohrCoulomb.py +173 -0
- rs3/properties/material/constitutiveModel/ManzariAndDafalias.py +148 -0
- rs3/properties/material/constitutiveModel/ModifiedCamClay.py +11 -0
- rs3/properties/material/constitutiveModel/MohrCoulomb.py +147 -0
- rs3/properties/material/constitutiveModel/MohrCoulombUnsaturatedZoneCalculations.py +80 -0
- rs3/properties/material/constitutiveModel/MohrCoulombWithCap.py +154 -0
- rs3/properties/material/constitutiveModel/Norsand.py +146 -0
- rs3/properties/material/constitutiveModel/PowerCurve.py +119 -0
- rs3/properties/material/constitutiveModel/Shansep.py +214 -0
- rs3/properties/material/constitutiveModel/ShearNormalFunction.py +34 -0
- rs3/properties/material/constitutiveModel/SnowdenAnisotropicLinear.py +108 -0
- rs3/properties/material/constitutiveModel/SoftSoil.py +104 -0
- rs3/properties/material/constitutiveModel/SoftSoilCreep.py +111 -0
- rs3/properties/material/constitutiveModel/SofteningHardening.py +214 -0
- rs3/properties/material/constitutiveModel/SwellingRock.py +202 -0
- rs3/properties/material/constitutiveModel/UnsaturatedZoneCalculations.py +138 -0
- rs3/properties/material/constitutiveModel/VerticalStressRatio.py +113 -0
- rs3/properties/material/constitutiveModel/_PropertyAccessor.py +96 -0
- rs3/properties/material/constitutiveModel/__init__.py +0 -0
- rs3/properties/material/constitutiveModel/jointOption/BartonBandis.py +109 -0
- rs3/properties/material/constitutiveModel/jointOption/MaterialJoint.py +48 -0
- rs3/properties/material/constitutiveModel/jointOption/MaterialJointOptions.py +32 -0
- rs3/properties/material/constitutiveModel/jointOption/MohrCoulomb.py +142 -0
- rs3/properties/material/constitutiveModel/jointOption/PlaneOrientationBase.py +92 -0
- rs3/properties/material/constitutiveModel/jointOption/SimpleHyperbolic.py +112 -0
- rs3/properties/material/constitutiveModel/jointOption/_PropertyAccessor.py +61 -0
- rs3/properties/material/constitutiveModel/jointOption/__init__.py +0 -0
- rs3/properties/material/constitutiveModel/stiffness/BaseStiffness.py +11 -0
- rs3/properties/material/constitutiveModel/stiffness/DuncanChangHyperbolic.py +128 -0
- rs3/properties/material/constitutiveModel/stiffness/GeneralizedHoekBrownEstimation.py +50 -0
- rs3/properties/material/constitutiveModel/stiffness/LinearIsotropic.py +106 -0
- rs3/properties/material/constitutiveModel/stiffness/NonlinearIsotropic.py +104 -0
- rs3/properties/material/constitutiveModel/stiffness/Orthotropic.py +296 -0
- rs3/properties/material/constitutiveModel/stiffness/TransverselyIsotropic.py +186 -0
- rs3/properties/material/constitutiveModel/stiffness/_PropertyAccessor.py +33 -0
- rs3/properties/material/constitutiveModel/stiffness/__init__.py +0 -0
- rs3/properties/material/constitutiveModel/stiffness/formula/Formula1.py +96 -0
- rs3/properties/material/constitutiveModel/stiffness/formula/Formula2.py +136 -0
- rs3/properties/material/constitutiveModel/stiffness/formula/Formula3.py +113 -0
- rs3/properties/material/constitutiveModel/stiffness/formula/_PropertyAccessor.py +37 -0
- rs3/properties/material/constitutiveModel/stiffness/formula/__init__.py +0 -0
- rs3/properties/material/datum/CohesionDatumDependency.py +99 -0
- rs3/properties/material/datum/Datum.py +23 -0
- rs3/properties/material/datum/FrictionAngleDatumDependency.py +99 -0
- rs3/properties/material/datum/YoungsModulusDatumDependency.py +78 -0
- rs3/properties/material/datum/_PropertyAccessor.py +26 -0
- rs3/properties/material/datum/__init__.py +0 -0
- rs3/properties/material/hydraulic/FEAGroundwater/Brooks.py +71 -0
- rs3/properties/material/hydraulic/FEAGroundwater/Custom.py +79 -0
- rs3/properties/material/hydraulic/FEAGroundwater/FEAGroundwater.py +85 -0
- rs3/properties/material/hydraulic/FEAGroundwater/Fredlund.py +82 -0
- rs3/properties/material/hydraulic/FEAGroundwater/Gardner.py +72 -0
- rs3/properties/material/hydraulic/FEAGroundwater/HydraulicMethodVectors.py +97 -0
- rs3/properties/material/hydraulic/FEAGroundwater/HydraulicParametersCommon.py +157 -0
- rs3/properties/material/hydraulic/FEAGroundwater/Simple.py +37 -0
- rs3/properties/material/hydraulic/FEAGroundwater/VanGenuchten.py +94 -0
- rs3/properties/material/hydraulic/FEAGroundwater/_PropertyAccessor.py +16 -0
- rs3/properties/material/hydraulic/FEAGroundwater/__init__.py +0 -0
- rs3/properties/material/hydraulic/Hydraulic.py +111 -0
- rs3/properties/material/hydraulic/PhreaticConditions.py +37 -0
- rs3/properties/material/hydraulic/StaticGroundwater.py +100 -0
- rs3/properties/material/hydraulic/WaterConditions.py +110 -0
- rs3/properties/material/hydraulic/_PropertyAccessor.py +31 -0
- rs3/properties/material/hydraulic/__init__.py +0 -0
- rs3/properties/material/initialConditions/InitialConditions.py +108 -0
- rs3/properties/material/initialConditions/_PropertyAccessor.py +11 -0
- rs3/properties/material/initialConditions/__init__.py +0 -0
- rs3/properties/material/stageFactors/StageFactors.py +77 -0
- rs3/properties/material/stageFactors/_PropertyAccessor.py +7 -0
- rs3/properties/material/stageFactors/__init__.py +0 -0
- rs3/properties/pile/EndCondition.py +109 -0
- rs3/properties/pile/Linear.py +69 -0
- rs3/properties/pile/MohrCoulomb.py +123 -0
- rs3/properties/pile/MultiLinear.py +70 -0
- rs3/properties/pile/Pile.py +108 -0
- rs3/properties/pile/PileCommon.py +99 -0
- rs3/properties/pile/_PropertyAccessor.py +9 -0
- rs3/properties/pile/__init__.py +0 -0
- rs3/properties/stageFactors/IStageFactorBase.py +10 -0
- rs3/properties/stageFactors/StageFactorBaseInterfaces.py +24 -0
- rs3/properties/stageFactors/StageFactorInterfaces.py +70 -0
- rs3/properties/stageFactors/_StageFactorInterface.py +48 -0
- rs3/properties/stageFactors/_StageFactorPropertyAccessor.py +18 -0
- rs3/properties/stageFactors/__init__.py +0 -0
- rs3/results/BeamResults.py +181 -0
- rs3/results/BoltResults.py +214 -0
- rs3/results/CompositeLinerResults.py +374 -0
- rs3/results/JointResults.py +160 -0
- rs3/results/PileForepoleResults.py +219 -0
- rs3/results/ResultEnums.py +146 -0
- rs3/results/Results.py +661 -0
- rs3/results/ResultsCommon.py +66 -0
- rs3/results/SolidElementResults.py +175 -0
- rs3/results/SolidNodalResults.py +248 -0
- rs3/results/SolidResults.py +206 -0
- rs3/results/YieldedElement.py +33 -0
- rs3/results/__init__.py +0 -0
- rs3scripting-4.42.0.dist-info/METADATA +70 -0
- rs3scripting-4.42.0.dist-info/RECORD +393 -0
- rs3scripting-4.42.0.dist-info/WHEEL +5 -0
- rs3scripting-4.42.0.dist-info/licenses/License.txt +20 -0
- rs3scripting-4.42.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
from typing import Optional, Union, List, Dict, Tuple
|
|
2
|
+
|
|
3
|
+
import rs3.generatedFiles.BoltsResultsQueryService_pb2_grpc as BoltsResultsQueryService_pb2_grpc
|
|
4
|
+
|
|
5
|
+
from rs3._client import Client
|
|
6
|
+
|
|
7
|
+
from rs3.results.ResultsCommon import _ResultsQueryBase, _NodeValuePairCollection
|
|
8
|
+
from rs3.results.YieldedElement import YieldedElement
|
|
9
|
+
from rs3.results.ResultEnums import BoltDataType, BoltGaussPointFailureType
|
|
10
|
+
from rs3.Geometry import Cube, Cylinder, Sphere
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BoltNodeResult:
|
|
14
|
+
def __init__(self, grpcNodalResult):
|
|
15
|
+
self._grpcNodalResult = grpcNodalResult
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def NodeID(self):
|
|
19
|
+
return self._grpcNodalResult.nodeInformation.nodeID
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def XCoordinate(self):
|
|
23
|
+
return self._grpcNodalResult.nodeInformation.location.x
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def YCoordinate(self):
|
|
27
|
+
return self._grpcNodalResult.nodeInformation.location.y
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def ZCoordinate(self):
|
|
31
|
+
return self._grpcNodalResult.nodeInformation.location.z
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def EntityName(self):
|
|
35
|
+
return self._grpcNodalResult.entityInformation.name
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def EntityID(self):
|
|
39
|
+
return self._grpcNodalResult.entityInformation.ID
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def BoltIndex(self) -> int:
|
|
43
|
+
'''
|
|
44
|
+
Get the bolt index for this node.
|
|
45
|
+
|
|
46
|
+
The boltIndex is an integer index that identifies which bolt or bolt pattern instance
|
|
47
|
+
this node belongs to. The indexing starts at 1 (1-based).
|
|
48
|
+
|
|
49
|
+
- For a single bolt: The boltIndex is a sequential index (1, 2, 3, ...) that uniquely
|
|
50
|
+
identifies each individual bolt in the model.
|
|
51
|
+
- For a bolt pattern: The boltIndex represents the index of the bolt instance within
|
|
52
|
+
the pattern. All nodes belonging to the same bolt instance in a pattern will
|
|
53
|
+
have the same boltIndex value.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
int: The bolt index for this node, starting from 1.
|
|
57
|
+
'''
|
|
58
|
+
return self._grpcNodalResult.indexToPattern
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class BoltElementResults:
|
|
62
|
+
def __init__(self, grpcElementResults):
|
|
63
|
+
self._grpcElementResults = grpcElementResults
|
|
64
|
+
self._nodeResultsByDataType = self._buildNodeResultsByDataType(grpcElementResults)
|
|
65
|
+
self._yieldedElement = YieldedElement(grpcElementResults.failurePoint, failureTypeEnum=BoltGaussPointFailureType) if grpcElementResults.HasField('failurePoint') else None
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def ElementID(self):
|
|
69
|
+
return self._grpcElementResults.elementInformation.elementID
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def EntityName(self):
|
|
73
|
+
return self._grpcElementResults.entityInformation.name
|
|
74
|
+
|
|
75
|
+
@property
|
|
76
|
+
def EntityID(self):
|
|
77
|
+
return self._grpcElementResults.entityInformation.ID
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def NodeIDs(self):
|
|
81
|
+
return list(self._grpcElementResults.elementInformation.nodeIDs)
|
|
82
|
+
|
|
83
|
+
def getNodeResult(self, dataType: BoltDataType) -> List[float]:
|
|
84
|
+
if dataType not in self._nodeResultsByDataType:
|
|
85
|
+
raise ValueError(f"Data type {dataType} not found")
|
|
86
|
+
return self._nodeResultsByDataType[dataType].ResultValues
|
|
87
|
+
|
|
88
|
+
def getResultsInNodeDataTuple(self, dataType: BoltDataType) -> List[Tuple[int, float]]:
|
|
89
|
+
if dataType not in self._nodeResultsByDataType:
|
|
90
|
+
raise ValueError(f"Data type {dataType} not found")
|
|
91
|
+
return self._nodeResultsByDataType[dataType].NodeValuePairs
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def BoltIndex(self) -> int:
|
|
95
|
+
'''
|
|
96
|
+
Get the bolt index for this element.
|
|
97
|
+
|
|
98
|
+
The boltIndex is an integer index that identifies which bolt or bolt pattern instance
|
|
99
|
+
this element belongs to. The indexing starts at 1 (1-based).
|
|
100
|
+
|
|
101
|
+
- For a single bolt: The boltIndex is a sequential index (1, 2, 3, ...) that uniquely
|
|
102
|
+
identifies each individual bolt in the model.
|
|
103
|
+
- For a bolt pattern: The boltIndex represents the index of the bolt instance within
|
|
104
|
+
the pattern. All elements belonging to the same bolt instance in a pattern will
|
|
105
|
+
have the same boltIndex value.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
int: The bolt index for this element, starting from 1.
|
|
109
|
+
'''
|
|
110
|
+
return self._grpcElementResults.boltID
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def YieldedElement(self):
|
|
114
|
+
return self._yieldedElement
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _buildNodeResultsByDataType(self, grpcElementResults):
|
|
118
|
+
nodeIdResultPairs = [(nodeID, nodeValue) for nodeID, nodeValue in zip(grpcElementResults.elementInformation.nodeIDs, grpcElementResults.nodeValues)]
|
|
119
|
+
pairsByType: Dict[BoltDataType, List[tuple[int, float]]] = {dt: [] for dt in BoltDataType}
|
|
120
|
+
for nodeID, nodeValue in nodeIdResultPairs:
|
|
121
|
+
pairsByType[BoltDataType.AXIAL_FORCE].append((nodeID, nodeValue.axisForce))
|
|
122
|
+
pairsByType[BoltDataType.AXIAL_STRESS].append((nodeID, nodeValue.axisStress))
|
|
123
|
+
pairsByType[BoltDataType.DISPLACEMENT_X].append((nodeID, nodeValue.displacementX))
|
|
124
|
+
pairsByType[BoltDataType.DISPLACEMENT_Y].append((nodeID, nodeValue.displacementY))
|
|
125
|
+
pairsByType[BoltDataType.DISPLACEMENT_Z].append((nodeID, nodeValue.displacementZ))
|
|
126
|
+
pairsByType[BoltDataType.DISPLACEMENT_TOTAL].append((nodeID, nodeValue.displacementTotal))
|
|
127
|
+
pairsByType[BoltDataType.INTERFACE_SHEAR_FORCE].append((nodeID, nodeValue.interfaceShearForce))
|
|
128
|
+
pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_X].append((nodeID, nodeValue.interfaceDisplacementX))
|
|
129
|
+
pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_Y].append((nodeID, nodeValue.interfaceDisplacementY))
|
|
130
|
+
pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_Z].append((nodeID, nodeValue.interfaceDisplacementZ))
|
|
131
|
+
pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_TOTAL].append((nodeID, nodeValue.interfaceDisplacementTotal))
|
|
132
|
+
return {dt: _NodeValuePairCollection(pairs) for dt, pairs in pairsByType.items()}
|
|
133
|
+
|
|
134
|
+
class BoltResults(_ResultsQueryBase):
|
|
135
|
+
'''
|
|
136
|
+
Entry point to query bolt nodal results for a given stage and SRF.
|
|
137
|
+
|
|
138
|
+
Parameters:
|
|
139
|
+
stageNumber (int): 1-based stage index.
|
|
140
|
+
srfResultIndex (int): 0-based SRF value index. 0 is to query SRF-None values.
|
|
141
|
+
|
|
142
|
+
Notes:
|
|
143
|
+
- entityName is trimmed; empty strings are ignored.
|
|
144
|
+
- region=None leaves the proto field unset (service returns all).
|
|
145
|
+
- Exceptions from the underlying service are propagated as-is by the client.
|
|
146
|
+
|
|
147
|
+
Examples:
|
|
148
|
+
See :ref:`bolt_result_example`.
|
|
149
|
+
'''
|
|
150
|
+
def __init__(self, client: Client, projectId: str, stageNumber: int, srfResultIndex: int):
|
|
151
|
+
super().__init__(client, projectId, stageNumber, srfResultIndex)
|
|
152
|
+
self._queryService = BoltsResultsQueryService_pb2_grpc.BoltResultsQueryServiceStub(client.channel)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def getBoltNodeResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[BoltNodeResult]:
|
|
156
|
+
'''
|
|
157
|
+
Query bolt nodal results at a specific stage and SRF value.
|
|
158
|
+
Parameters:
|
|
159
|
+
entityName: Optional[str]: If provided, only nodes belonging to the specified entity are queried.
|
|
160
|
+
region: Optional[Union[Cube, Cylinder, Sphere]]: Sample region filter. When None, the field is not set in the request (proto3 unset), and the service returns all nodes.
|
|
161
|
+
includeIntersecting: bool: If True, nodes that intersect the sample region are included. When False, only nodes fully contained are included. Ignored when region is None.
|
|
162
|
+
Raises:
|
|
163
|
+
Exception if:
|
|
164
|
+
- stageNumber is less than 1
|
|
165
|
+
- stageNumber is greater than the number of stages in the project
|
|
166
|
+
- _srfResultIndex is less than 0
|
|
167
|
+
- _srfResultIndex is greater than the number of SRF values in the project
|
|
168
|
+
Returns:
|
|
169
|
+
list[BoltNodeResult]: A list of bolt nodal results wrappers for the requested stage and SRF value.
|
|
170
|
+
'''
|
|
171
|
+
request = self._makeRequest(entityName, region, includeIntersecting)
|
|
172
|
+
stream = self._queryService.QueryBoltNodalResults(request)
|
|
173
|
+
allResults = []
|
|
174
|
+
totalQueriedNodesCount = None
|
|
175
|
+
for chunk in stream:
|
|
176
|
+
if chunk.HasField('header'):
|
|
177
|
+
header = chunk.header
|
|
178
|
+
totalQueriedNodesCount = header.totalQueriedNodesCount
|
|
179
|
+
elif chunk.HasField('data'):
|
|
180
|
+
allResults.extend(chunk.data.results)
|
|
181
|
+
if totalQueriedNodesCount != len(allResults):
|
|
182
|
+
raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(allResults)}.")
|
|
183
|
+
return [BoltNodeResult(r) for r in allResults]
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def getBoltElementResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[BoltElementResults]:
|
|
187
|
+
'''
|
|
188
|
+
Query bolt element results at a specific stage and SRF value.
|
|
189
|
+
Parameters:
|
|
190
|
+
entityName: Optional[str]: If provided, only elements belonging to the specified entity are queried.
|
|
191
|
+
region: Optional[Union[Cube, Cylinder, Sphere]]: Sample region filter. When None, the field is not set in the request (proto3 unset), and the service returns all elements.
|
|
192
|
+
includeIntersecting: bool: If True, elements that intersect the sample region are included. When False, only elements fully contained are included. Ignored when region is None.
|
|
193
|
+
Raises:
|
|
194
|
+
Exception if:
|
|
195
|
+
- stageNumber is less than 1
|
|
196
|
+
- stageNumber is greater than the number of stages in the project
|
|
197
|
+
- _srfResultIndex is less than 0
|
|
198
|
+
- _srfResultIndex is greater than the number of SRF values in the project
|
|
199
|
+
Returns:
|
|
200
|
+
list[BoltElementResults]: A list of bolt element results wrappers for the requested stage and SRF value.
|
|
201
|
+
'''
|
|
202
|
+
request = self._makeRequest(entityName, region, includeIntersecting)
|
|
203
|
+
stream = self._queryService.QueryBoltElementResults(request)
|
|
204
|
+
allResults = []
|
|
205
|
+
totalQueriedElementsCount = None
|
|
206
|
+
for chunk in stream:
|
|
207
|
+
if chunk.HasField('header'):
|
|
208
|
+
header = chunk.header
|
|
209
|
+
totalQueriedElementsCount = header.totalQueriedElementsCount
|
|
210
|
+
elif chunk.HasField('data'):
|
|
211
|
+
allResults.extend(chunk.data.results)
|
|
212
|
+
if totalQueriedElementsCount != len(allResults):
|
|
213
|
+
raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(allResults)}.")
|
|
214
|
+
return [BoltElementResults(r) for r in allResults]
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
import rs3.generatedFiles.CompositeLinerResultsQueryService_pb2_grpc as CompositeLinerResultsQueryService_pb2_grpc
|
|
3
|
+
import rs3.generatedFiles.CompositeLinerResultsQueryService_pb2 as CompositeLinerResultsQueryService_pb2
|
|
4
|
+
import rs3.generatedFiles.ResultsQueryCommonMessage_pb2 as ResultsQueryCommonMessage_pb2
|
|
5
|
+
from rs3._proxyObject import _ProxyObject
|
|
6
|
+
from rs3._client import Client
|
|
7
|
+
from rs3.Geometry import Cube, Cylinder, Sphere
|
|
8
|
+
from rs3.results.ResultEnums import *
|
|
9
|
+
|
|
10
|
+
class LinerNodalResults:
|
|
11
|
+
"""
|
|
12
|
+
Nodal result wrapper with per-material data access.
|
|
13
|
+
|
|
14
|
+
Notes:
|
|
15
|
+
- EntityNames/EntityIDs correspond to owning entities for this node.
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
def __init__(self, grpcNodalResults):
|
|
19
|
+
self._grpcNodalResults = grpcNodalResults
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def EntityName(self):
|
|
23
|
+
return self._grpcNodalResults.entityInformation.name
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def EntityID(self):
|
|
27
|
+
return self._grpcNodalResults.entityInformation.ID
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def LayerIndex(self):
|
|
31
|
+
return self._grpcNodalResults.compositeLinerStructureInformation.layerIndex
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def NodeID(self):
|
|
35
|
+
return self._grpcNodalResults.nodeInformation.nodeID
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def XCoordinate(self):
|
|
39
|
+
return self._grpcNodalResults.nodeInformation.location.x
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def YCoordinate(self):
|
|
43
|
+
return self._grpcNodalResults.nodeInformation.location.y
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def ZCoordinate(self):
|
|
47
|
+
return self._grpcNodalResults.nodeInformation.location.z
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def AssignedPropertyName(self):
|
|
51
|
+
return self._grpcNodalResults.compositeLinerStructureInformation.assignedPropertyName
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def AttachedLinerLayersAboveIndex(self):
|
|
55
|
+
return list(self._grpcNodalResults.compositeLinerStructureInformation.attachedLinerLayerUpperIndex)
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def AttachedLinerLayersBelowIndex(self):
|
|
59
|
+
return list(self._grpcNodalResults.compositeLinerStructureInformation.attachedLinerLayerLowerIndex)
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def AttachedInterfaceLayerAboveIndex(self):
|
|
63
|
+
return self._grpcNodalResults.compositeLinerStructureInformation.attachedInterfaceLayerUpperIndex
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def AttachedInterfaceLayerBelowIndex(self):
|
|
67
|
+
return self._grpcNodalResults.compositeLinerStructureInformation.attachedInterfaceLayerLowerIndex
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def NodeDetails(self):
|
|
71
|
+
return {"NodeID" : self.NodeID,
|
|
72
|
+
"XCoordinate": self.XCoordinate,
|
|
73
|
+
"YCoordinate": self.YCoordinate,
|
|
74
|
+
"ZCoordinate": self.ZCoordinate,
|
|
75
|
+
"EntityName": self.EntityName,
|
|
76
|
+
"LayerIndex": self.LayerIndex
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
class LinerElementResults:
|
|
80
|
+
"""
|
|
81
|
+
Element-level results wrapper for a specific stage/SRF context.
|
|
82
|
+
|
|
83
|
+
Notes:
|
|
84
|
+
- AttachedNodes returns a copy of node IDs; modifying it does not affect internal state.
|
|
85
|
+
- getResult(dataType) returns the value of that node in the given element when it is in the global coordinate system.
|
|
86
|
+
It returns the average across the elements about that node when the local axes is defined.
|
|
87
|
+
|
|
88
|
+
"""
|
|
89
|
+
def __init__(self, grpcElementResults):
|
|
90
|
+
self._grpcElementResults = grpcElementResults
|
|
91
|
+
self._linerResults = grpcElementResults.linerNodalResults
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def ElementID(self):
|
|
95
|
+
return self._grpcElementResults.elementInformation.elementID
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def AttachedNodeIDs(self):
|
|
99
|
+
return list(self._grpcElementResults.elementInformation.nodeIDs)
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def EntityName(self):
|
|
103
|
+
return self._grpcElementResults.entityInformation.name
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def EntityId(self):
|
|
107
|
+
return self._grpcElementResults.entityInformation.ID
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def LayerIndex(self):
|
|
111
|
+
return self._grpcElementResults.compositeLinerStructureInformation.layerIndex
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def AssignedPropertyName(self):
|
|
115
|
+
return self._grpcElementResults.compositeLinerStructureInformation.assignedPropertyName
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def AttachedLinerLayersAboveIndex(self):
|
|
119
|
+
return list(self._grpcElementResults.compositeLinerStructureInformation.attachedLinerLayerUpperID)
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def AttachedLinerLayersBelowIndex(self):
|
|
123
|
+
return list(self._grpcElementResults.compositeLinerStructureInformation.attachedLinerLayerLowerID)
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def AttachedInterfaceLayerAboveIndex(self):
|
|
127
|
+
return self._grpcElementResults.compositeLinerStructureInformation.attachedInterfaceLayerUpperID
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def AttachedInterfaceLayerBelowIndex(self):
|
|
131
|
+
return self._grpcElementResults.compositeLinerStructureInformation.attachedInterfaceLayerLowerID
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def FailureType(self):
|
|
135
|
+
return LinerGaussPointFailureCombinations(self._grpcElementResults.failureType)
|
|
136
|
+
|
|
137
|
+
def getResults(self, dataType: LinerResultTypes) -> list[float]:
|
|
138
|
+
if not self._linerResults:
|
|
139
|
+
raise ValueError("No liner results available")
|
|
140
|
+
|
|
141
|
+
result = self._linerResults[0]
|
|
142
|
+
return getattr(result, dataType.value)
|
|
143
|
+
|
|
144
|
+
class InterfaceNodalResults:
|
|
145
|
+
'''
|
|
146
|
+
Nodal result wrapper with per-material data access.
|
|
147
|
+
|
|
148
|
+
Notes:
|
|
149
|
+
- EntityNames/EntityIDs correspond to owning entities for this node.
|
|
150
|
+
|
|
151
|
+
'''
|
|
152
|
+
def __init__(self, grpcNodalResults):
|
|
153
|
+
self._grpcNodalResults = grpcNodalResults
|
|
154
|
+
|
|
155
|
+
@property
|
|
156
|
+
def EntityName(self):
|
|
157
|
+
return self._grpcNodalResults.entityInformation.name
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def EntityID(self):
|
|
161
|
+
return self._grpcNodalResults.entityInformation.ID
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def LayerIndex(self):
|
|
165
|
+
return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.layerIndex
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def AssignedPropertyName(self):
|
|
169
|
+
return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.assignedPropertyName
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
def AttachedLinerLayersAboveIndex(self):
|
|
173
|
+
return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerUpperIndex
|
|
174
|
+
|
|
175
|
+
@property
|
|
176
|
+
def AttachedLinerLayersBelowIndex(self):
|
|
177
|
+
return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerLowerIndex
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def NodeID(self):
|
|
181
|
+
return self._grpcNodalResults.nodeInformation.nodeID
|
|
182
|
+
|
|
183
|
+
@property
|
|
184
|
+
def XCoordinate(self):
|
|
185
|
+
return self._grpcNodalResults.nodeInformation.location.x
|
|
186
|
+
|
|
187
|
+
@property
|
|
188
|
+
def YCoordinate(self):
|
|
189
|
+
return self._grpcNodalResults.nodeInformation.location.y
|
|
190
|
+
|
|
191
|
+
@property
|
|
192
|
+
def ZCoordinate(self):
|
|
193
|
+
return self._grpcNodalResults.nodeInformation.location.z
|
|
194
|
+
|
|
195
|
+
class InterfaceElementResults:
|
|
196
|
+
'''
|
|
197
|
+
Element-level results wrapper for a specific stage/SRF context.
|
|
198
|
+
|
|
199
|
+
Notes:
|
|
200
|
+
- AttachedNodes returns a copy of node IDs; modifying it does not affect internal state.
|
|
201
|
+
'''
|
|
202
|
+
def __init__(self, grpcElementResults):
|
|
203
|
+
self._grpcElementResults = grpcElementResults
|
|
204
|
+
self._interfaceResults = grpcElementResults.jointNodalResults
|
|
205
|
+
|
|
206
|
+
@property
|
|
207
|
+
def ElementID(self):
|
|
208
|
+
return self._grpcElementResults.elementInformation.elementID
|
|
209
|
+
|
|
210
|
+
@property
|
|
211
|
+
def AttachedNodeIDs(self):
|
|
212
|
+
return list(self._grpcElementResults.elementInformation.nodeIDs)
|
|
213
|
+
|
|
214
|
+
@property
|
|
215
|
+
def EntityName(self):
|
|
216
|
+
return self._grpcElementResults.entityInformation.name
|
|
217
|
+
|
|
218
|
+
@property
|
|
219
|
+
def EntityID(self):
|
|
220
|
+
return self._grpcElementResults.entityInformation.ID
|
|
221
|
+
|
|
222
|
+
@property
|
|
223
|
+
def LayerIndex(self):
|
|
224
|
+
return self._grpcElementResults.compositeLinerLinerAttachmentInformation.layerIndex
|
|
225
|
+
|
|
226
|
+
@property
|
|
227
|
+
def AssignedPropertyName(self):
|
|
228
|
+
return self._grpcElementResults.compositeLinerLinerAttachmentInformation.assignedPropertyName
|
|
229
|
+
|
|
230
|
+
@property
|
|
231
|
+
def AttachedLinerLayersAboveIndex(self):
|
|
232
|
+
return self._grpcElementResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerUpperIndex
|
|
233
|
+
|
|
234
|
+
@property
|
|
235
|
+
def AttachedLinerLayersBelowIndex(self):
|
|
236
|
+
return self._grpcElementResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerLowerIndex
|
|
237
|
+
|
|
238
|
+
@property
|
|
239
|
+
def FailureType(self):
|
|
240
|
+
return JointGaussPointFailureCombinations(self._grpcElementResults.failureType)
|
|
241
|
+
|
|
242
|
+
def getResults(self, dataType: InterfaceResultTypes) -> list[float]:
|
|
243
|
+
if not self._interfaceResults:
|
|
244
|
+
raise ValueError("No liner results available")
|
|
245
|
+
|
|
246
|
+
result = self._interfaceResults[0]
|
|
247
|
+
return getattr(result, dataType.value)
|
|
248
|
+
|
|
249
|
+
class CompositeLinerResults(_ProxyObject):
|
|
250
|
+
'''
|
|
251
|
+
Entry point to query composite liner nodal/element results for a given stage and SRF.
|
|
252
|
+
|
|
253
|
+
Parameters:
|
|
254
|
+
stageNumber (int): 1-based stage index.
|
|
255
|
+
srfResultIndex (int): 0-based SRF value index. 0 is to query SRF-None values.
|
|
256
|
+
|
|
257
|
+
Notes:
|
|
258
|
+
- entityName is trimmed; empty strings are ignored.
|
|
259
|
+
- region=None leaves the proto field unset (service returns all).
|
|
260
|
+
- Exceptions from the underlying service are propagated as-is by the client.
|
|
261
|
+
|
|
262
|
+
Examples:
|
|
263
|
+
See :ref:`composite_liner_result_example`.
|
|
264
|
+
'''
|
|
265
|
+
|
|
266
|
+
def __init__(self, client: Client, projectId: str, stageNumber: list[int], srfResultIndex: int):
|
|
267
|
+
super().__init__(client, projectId)
|
|
268
|
+
self._queryService = CompositeLinerResultsQueryService_pb2_grpc.CompositeLinerResultsQueryServiceStub(self._client.channel)
|
|
269
|
+
self._stageNumber = stageNumber
|
|
270
|
+
self._srfResultIndex = srfResultIndex
|
|
271
|
+
|
|
272
|
+
def getLinerNodeResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[LinerNodalResults]:
|
|
273
|
+
request = self._makeRequest(entityName, region, includeIntersecting)
|
|
274
|
+
stream = self._queryService.GetLinerNodeResults(request)
|
|
275
|
+
|
|
276
|
+
results = []
|
|
277
|
+
totalQueriedNodesCount = None
|
|
278
|
+
|
|
279
|
+
for chunk in stream:
|
|
280
|
+
if chunk.HasField('header'):
|
|
281
|
+
header = chunk.header
|
|
282
|
+
totalQueriedNodesCount = header.totalQueriedNodesCount
|
|
283
|
+
elif chunk.HasField('data'):
|
|
284
|
+
results.extend(chunk.data.results)
|
|
285
|
+
|
|
286
|
+
if totalQueriedNodesCount != len(results):
|
|
287
|
+
raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(results)}")
|
|
288
|
+
|
|
289
|
+
return [LinerNodalResults(r) for r in results]
|
|
290
|
+
|
|
291
|
+
def getLinerElementResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[LinerElementResults]:
|
|
292
|
+
request = self._makeRequest(entityName, region, includeIntersecting)
|
|
293
|
+
stream = self._queryService.GetLinerElementResults(request)
|
|
294
|
+
|
|
295
|
+
results = []
|
|
296
|
+
totalQueriedElementsCount = None
|
|
297
|
+
|
|
298
|
+
for chunk in stream:
|
|
299
|
+
if chunk.HasField('header'):
|
|
300
|
+
header = chunk.header
|
|
301
|
+
totalQueriedElementsCount = header.totalQueriedElementsCount
|
|
302
|
+
elif chunk.HasField('data'):
|
|
303
|
+
results.extend(chunk.data.results)
|
|
304
|
+
|
|
305
|
+
if totalQueriedElementsCount != len(results):
|
|
306
|
+
raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(results)}")
|
|
307
|
+
|
|
308
|
+
return [LinerElementResults(r) for r in results]
|
|
309
|
+
|
|
310
|
+
def getInterfaceNodeResults(self, entityNames: Optional[list[str]] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[InterfaceNodalResults]:
|
|
311
|
+
request = self._makeRequest(entityNames, region, includeIntersecting)
|
|
312
|
+
stream = self._queryService.GetInterfaceNodeResults(request)
|
|
313
|
+
|
|
314
|
+
results = []
|
|
315
|
+
totalQueriedNodesCount = None
|
|
316
|
+
|
|
317
|
+
for chunk in stream:
|
|
318
|
+
if chunk.HasField('header'):
|
|
319
|
+
header = chunk.header
|
|
320
|
+
totalQueriedNodesCount = header.totalQueriedNodesCount
|
|
321
|
+
elif chunk.HasField('data'):
|
|
322
|
+
results.extend(chunk.data.results)
|
|
323
|
+
|
|
324
|
+
if totalQueriedNodesCount != len(results):
|
|
325
|
+
raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(results)}")
|
|
326
|
+
|
|
327
|
+
return [InterfaceNodalResults(r) for r in results]
|
|
328
|
+
|
|
329
|
+
def getInterfaceElementResults(self, entityNames: Optional[list[str]] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[InterfaceElementResults]:
|
|
330
|
+
request = self._makeRequest(entityNames, region, includeIntersecting)
|
|
331
|
+
stream = self._queryService.GetInterfaceElementResults(request)
|
|
332
|
+
|
|
333
|
+
results = []
|
|
334
|
+
totalQueriedElementsCount = None
|
|
335
|
+
|
|
336
|
+
for chunk in stream:
|
|
337
|
+
if chunk.HasField('header'):
|
|
338
|
+
header = chunk.header
|
|
339
|
+
totalQueriedElementsCount = header.totalQueriedElementsCount
|
|
340
|
+
elif chunk.HasField('data'):
|
|
341
|
+
results.extend(chunk.data.results)
|
|
342
|
+
|
|
343
|
+
if totalQueriedElementsCount != len(results):
|
|
344
|
+
raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(results)}")
|
|
345
|
+
|
|
346
|
+
return [InterfaceElementResults(r) for r in results]
|
|
347
|
+
|
|
348
|
+
def setCoordinateSystem(self, coordinateSystemName : str) -> None:
|
|
349
|
+
request = CompositeLinerResultsQueryService_pb2.SetCoordinateSystemRequest(_projectId=self._objectId, coordinateSystemName=coordinateSystemName)
|
|
350
|
+
self._client.callFunction(self._queryService.SetCoordinateSystem, request)
|
|
351
|
+
|
|
352
|
+
def getCoordinateSystem(self) -> str:
|
|
353
|
+
request = CompositeLinerResultsQueryService_pb2.GetCoordinateSystemRequest(_projectId=self._objectId)
|
|
354
|
+
return self._client.callFunction(self._queryService.GetCoordinateSystem, request).coordinateSystemName
|
|
355
|
+
|
|
356
|
+
def _makeRequest(self, entityName: Optional[str], region: Optional[Union[Cube, Cylinder, Sphere]], includeIntersecting: bool = True) -> ResultsQueryCommonMessage_pb2.ResultsQueryRequest:
|
|
357
|
+
request = ResultsQueryCommonMessage_pb2.ResultsQueryRequest(
|
|
358
|
+
_projectId=self._objectId,
|
|
359
|
+
stageNumber=self._stageNumber,
|
|
360
|
+
srfValueNumber=self._srfResultIndex)
|
|
361
|
+
|
|
362
|
+
if entityName:
|
|
363
|
+
# Trim whitespace inside each string if needed
|
|
364
|
+
request.entityName = entityName.strip()
|
|
365
|
+
|
|
366
|
+
if region is not None:
|
|
367
|
+
if isinstance(region, (Cube, Cylinder, Sphere)):
|
|
368
|
+
common_region = region.toCommonGeometryObject()
|
|
369
|
+
request.sampleRegion.region.CopyFrom(common_region)
|
|
370
|
+
request.sampleRegion.includeIntersecting = includeIntersecting
|
|
371
|
+
else:
|
|
372
|
+
raise TypeError(f"Unsupported region type: {type(region)}")
|
|
373
|
+
|
|
374
|
+
return request
|