ourocode 1.8.1__tar.gz → 1.9.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 (79) hide show
  1. {ourocode-1.8.1/ourocode.egg-info → ourocode-1.9.0}/PKG-INFO +1 -1
  2. ourocode-1.9.0/ourocode/__version__.py +1 -0
  3. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/A0_Projet.py +147 -59
  4. {ourocode-1.8.1 → ourocode-1.9.0/ourocode.egg-info}/PKG-INFO +1 -1
  5. {ourocode-1.8.1 → ourocode-1.9.0}/pyproject.toml +1 -1
  6. ourocode-1.8.1/ourocode/__version__.py +0 -1
  7. {ourocode-1.8.1 → ourocode-1.9.0}/LICENSE +0 -0
  8. {ourocode-1.8.1 → ourocode-1.9.0}/MANIFEST.in +0 -0
  9. {ourocode-1.8.1 → ourocode-1.9.0}/README.md +0 -0
  10. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/__init__.py +0 -0
  11. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_acier.csv +0 -0
  12. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_beton.csv +0 -0
  13. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_bois.csv +0 -0
  14. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_panel.csv +0 -0
  15. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/carte_action_region.csv +0 -0
  16. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/coeff_psy.csv +0 -0
  17. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/exploitation.csv +0 -0
  18. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/gammaM.csv +0 -0
  19. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kdef.csv +0 -0
  20. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kfi.csv +0 -0
  21. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kmod.csv +0 -0
  22. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/limite_fleche.csv +0 -0
  23. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/qualite_acier.csv +0 -0
  24. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/C90_def.png +0 -0
  25. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/CNC2M_4.3.3_tab15.png +0 -0
  26. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/CNC2M_4.3.3_tab16.png +0 -0
  27. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/EN1993-1-8_fig6_11.png +0 -0
  28. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/Kv_def.png +0 -0
  29. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/sign_convention.png +0 -0
  30. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/section_boulon.csv +0 -0
  31. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/categorie_importance.csv +0 -0
  32. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
  33. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/classe_sol.csv +0 -0
  34. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
  35. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
  36. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
  37. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
  38. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
  39. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
  40. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
  41. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
  42. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
  43. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
  44. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
  45. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
  46. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
  47. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
  48. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
  49. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
  50. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
  51. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Ffr.png +0 -0
  52. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC0_Combinaison.py +0 -0
  53. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC1_Neige.py +0 -0
  54. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC1_Vent.py +0 -0
  55. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Assemblage.py +0 -0
  56. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Element_droit.py +0 -0
  57. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Feu.py +0 -0
  58. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Assemblage.py +0 -0
  59. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_CVT.py +0 -0
  60. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Element_droit.py +0 -0
  61. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Feu.py +0 -0
  62. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC8_Sismique.py +0 -0
  63. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/__init__.py +0 -0
  64. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/objet.py +0 -0
  65. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/SOURCES.txt +0 -0
  66. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/dependency_links.txt +0 -0
  67. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/requires.txt +0 -0
  68. {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/top_level.txt +0 -0
  69. {ourocode-1.8.1 → ourocode-1.9.0}/setup.cfg +0 -0
  70. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_A0_Projet.py +0 -0
  71. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC0_Combinaison.py +0 -0
  72. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC1_Neige.py +0 -0
  73. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC3_Assemblage.py +0 -0
  74. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC3_Element_droit.py +0 -0
  75. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Assemblage.py +0 -0
  76. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_CVT.py +0 -0
  77. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Element_droit.py +0 -0
  78. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Feu.py +0 -0
  79. {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC8_Sismique.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ourocode
3
- Version: 1.8.1
3
+ Version: 1.9.0
4
4
  Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
5
5
  Author-email: Anthony PARISOT <contact@ourea-structure.fr>
6
6
  License-Expression: Apache-2.0
@@ -0,0 +1 @@
1
+ __version__ = "1.9.0"
@@ -141,7 +141,7 @@ class Model_generator(Projet):
141
141
  "sections": {},
142
142
  "materials": {},
143
143
  "members": {},
144
- "supports": {},
144
+ "supports": {"classic": {}, "spring": {}},
145
145
  "loads": {},
146
146
  }
147
147
  self._model = None
@@ -692,8 +692,8 @@ class Model_generator(Projet):
692
692
  RZ (bool, optional): Blocage en translation de l'axe X global, si oui alors True.
693
693
  l_appuis (int, optional): longueur d'appuis sur la poutre en mm. Defaults to 0.
694
694
  """
695
- support_id = "S" + str(len(self._data["supports"]) + 1)
696
- self._data["supports"][support_id] = {
695
+ support_id = "S" + str(len(self._data["supports"]["classic"]) + 1)
696
+ self._data["supports"]["classic"][support_id] = {
697
697
  "Noeud": node_id,
698
698
  "DX": DX,
699
699
  "DY": DY,
@@ -703,46 +703,82 @@ class Model_generator(Projet):
703
703
  "RZ": RZ,
704
704
  "Longueur d'appui": l_appuis,
705
705
  }
706
- return self._data["supports"][support_id]
706
+ return self._data["supports"]["classic"][support_id]
707
+
708
+ def add_support_spring(self,
709
+ node_id: str,
710
+ dof: str = ("DX", "DY", "DZ", "RX", "RY", "RZ"),
711
+ stiffness: si.kN/si.m = 0,
712
+ limit_direction: str = ("Aucune limitation", "Tension uniquement", "Compression uniquement")
713
+ ):
714
+ """Ajoute un appuis avec une raideur spécifique dans une direction donnée
715
+
716
+ Args:
717
+ node_id (str): Numéro du noeud sur lequel positionner l'appuis.
718
+ stiffness (si.kN): Raideur dans la direction donné en kN/m pour DX, DY, DZ et en N/radians pour RX, RY, RZ
719
+ dof (str, optional): Degrée de liberté ou appliquer la raideur. Defaults to "DX".
720
+ limit_direction (str, optional): Limitation du sens d'action de la raideur. Defaults to "Aucune limitation".
721
+ """
722
+ support_id = "SSpring" + str(len(self._data["supports"]["spring"]) + 1)
723
+ self._data["supports"]["spring"][support_id] = {
724
+ "Noeud": node_id,
725
+ "Dof": dof,
726
+ "Raideur": stiffness * si.kN/si.m,
727
+ "Limite de direction": limit_direction,
728
+ }
729
+ return self._data["supports"]["spring"][support_id]
707
730
 
708
731
  def create_supports_by_list(self, list_supports: list):
709
- """Ajoute les charges d'une liste pré-définit dans la liste de chargement
732
+ """Ajoute les support d'une liste pré-définit.
710
733
 
711
734
  Args:
712
- list_supports (list): liste de charge.
735
+ list_supports (list): liste de support.
713
736
  """
714
737
  for support in list_supports:
715
738
  self.add_support(*support)
716
739
 
717
740
  def del_support(self, support_id: str):
718
- """Supprime un appui de l'attribut list_supports par son index
741
+ """Supprime un appui par son id
719
742
 
720
743
  Args:
721
744
  support_id (int): id de l'appuis à supprimer.
722
745
  """
723
- return f"L'appui à été supprimé: {self._data["supports"].pop(support_id)}"
746
+ return f"L'appui à été supprimé: {self._data["supports"]["classic"].pop(support_id)}"
724
747
 
725
- def _add_support_to_model(self, support_id: str):
748
+ def _add_support_to_model(self, support_id: str, support_type: str):
726
749
  """Ajoute un appui au model MEF
727
750
 
728
751
  Args:
729
752
  support_id (str): id de l'appui à ajouter
753
+ support_type (str): type de support classic or spring
730
754
  """
731
- support = self._data["supports"][support_id]
732
- self._model.def_support(
733
- support["Noeud"],
734
- support["DX"],
735
- support["DY"],
736
- support["DZ"],
737
- support["RX"],
738
- support["RY"],
739
- support["RZ"],
740
- )
755
+ support = self._data["supports"][support_type].get(support_id, None)
756
+ if support is None:
757
+ raise ValueError(f"Appui {support_id} non trouvé. Le support n'a pas été ajouter au modèle.")
758
+ if support_type == "classic":
759
+ self._model.def_support(
760
+ support["Noeud"],
761
+ support["DX"],
762
+ support["DY"],
763
+ support["DZ"],
764
+ support["RX"],
765
+ support["RY"],
766
+ support["RZ"],
767
+ )
768
+ else:
769
+ limit_val = {"Aucune limitation": None, "Tension uniquement": "+", "Compression uniquement": "-"}
770
+ self._model.def_support_spring(
771
+ support["Noeud"],
772
+ support["Dof"],
773
+ support["Raideur"].value * 10**3,
774
+ limit_val[support["Limite de direction"]],
775
+ )
741
776
  return support_id
742
777
 
743
778
  def _add_supports_to_model(self):
744
- for support_id in self._data["supports"].keys():
745
- self._add_support_to_model(support_id)
779
+ for support_type, supports in self._data["supports"].items():
780
+ for support_id, support in supports.items():
781
+ self._add_support_to_model(support_id, support_type)
746
782
  return "Appuis ajoutés"
747
783
 
748
784
  def get_all_supports(self) -> dict:
@@ -1035,7 +1071,10 @@ class Wood_beam_model(Model_generator):
1035
1071
  d_appuis = longueur / (nbr_appuis - 1)
1036
1072
  for i in range(nbr_appuis):
1037
1073
  node = self.add_node(int(float(i * d_appuis * mt.cos(mt.radians(inclinaison)))), int(float(i * d_appuis * mt.sin(mt.radians(inclinaison)))), 0)
1038
- self.add_support(node, DX=True, DY=True, DZ=True, RX=True, RY=False, RZ=False, l_appuis=l_appuis)
1074
+ if not i:
1075
+ self.add_support(node, DX=True, DY=True, DZ=True, RX=True, RY=False, RZ=False, l_appuis=l_appuis)
1076
+ else:
1077
+ self.add_support(node, DX=False, DY=True, DZ=True, RX=True, RY=False, RZ=False, l_appuis=l_appuis)
1039
1078
 
1040
1079
  for i in range(nbr_appuis-1):
1041
1080
  self.add_member(f"N{i+1}", f"N{i+2}", material, section, poids_propre, rotation=devers, tension_only=False, compression_only=False)
@@ -1313,13 +1352,15 @@ class Model_result(Projet):
1313
1352
  "Mz", n_points=n_points, combo_name=combination
1314
1353
  )
1315
1354
 
1316
- def get_min_max_internal_force(self, member_id: str, combination: str) -> np.array:
1355
+ def get_min_max_internal_force(self, member_id: str, combination: str|list) -> dict:
1317
1356
  """Retourne le maximum et minimum des efforts internes d'une membrure donnée.
1318
1357
 
1319
1358
  Args:
1320
1359
  member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
1321
- ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1322
- combination (str): Le nom de la combinaison à récupérer
1360
+ ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1361
+ combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
1362
+ ex: ["ELU_STR", "ELU_ACC"] dans ce cas le résultat récupéré est
1363
+ le maximum/minimum de toute les combinaisons inclus dans ces tags.
1323
1364
  """
1324
1365
  dict_internal_forces = {}
1325
1366
  for type in ("Nx", "Vy", "Vz", "Mx", "My", "Mz"):
@@ -1330,75 +1371,98 @@ class Model_result(Projet):
1330
1371
  member_id = [member_id]
1331
1372
  max_value = 0
1332
1373
  min_value = 0
1374
+ combi_max = None
1375
+ combi_min = None
1333
1376
  for member in member_id:
1334
1377
  if member not in self._model_generator._model.members:
1335
1378
  raise ValueError(f"La membrure {member} n'est pas dans le model MEF")
1336
1379
 
1337
1380
  if type == "Nx":
1338
1381
  max = self._model_generator._model.members[member].max_axial(
1339
- combo_name=combination
1382
+ combo_tags=combination
1340
1383
  )
1341
1384
  min = self._model_generator._model.members[member].min_axial(
1342
- combo_name=combination
1385
+ combo_tags=combination
1343
1386
  )
1344
1387
  elif type == "Vy":
1345
1388
  max = self._model_generator._model.members[member].max_shear(
1346
- "Fy", combo_name=combination
1389
+ "Fy", combo_tags=combination
1347
1390
  )
1348
1391
  min = self._model_generator._model.members[member].min_shear(
1349
- "Fy", combo_name=combination
1392
+ "Fy", combo_tags=combination
1350
1393
  )
1351
1394
  elif type == "Vz":
1352
1395
  max = self._model_generator._model.members[member].max_shear(
1353
- "Fz", combo_name=combination
1396
+ "Fz", combo_tags=combination
1354
1397
  )
1355
1398
  min = self._model_generator._model.members[member].min_shear(
1356
- "Fz", combo_name=combination
1399
+ "Fz", combo_tags=combination
1357
1400
  )
1358
1401
  elif type == "Mx":
1359
1402
  max = self._model_generator._model.members[member].max_torque(
1360
- combo_name=combination
1403
+ combo_tags=combination
1361
1404
  )
1362
1405
  min = self._model_generator._model.members[member].min_torque(
1363
- combo_name=combination
1406
+ combo_tags=combination
1364
1407
  )
1365
1408
  elif type == "My":
1366
1409
  max = self._model_generator._model.members[member].max_moment(
1367
- "My", combo_name=combination
1410
+ "My", combo_tags=combination
1368
1411
  )
1369
1412
  min = self._model_generator._model.members[member].min_moment(
1370
- "My", combo_name=combination
1413
+ "My", combo_tags=combination
1371
1414
  )
1372
1415
  elif type == "Mz":
1373
1416
  max = self._model_generator._model.members[member].max_moment(
1374
- "Mz", combo_name=combination
1417
+ "Mz", combo_tags=combination
1375
1418
  )
1376
1419
  min = self._model_generator._model.members[member].min_moment(
1377
- "Mz", combo_name=combination
1420
+ "Mz", combo_tags=combination
1378
1421
  )
1379
- if max > max_value:
1380
- max_value = max
1381
- if min < min_value:
1382
- min_value = min
1422
+ if isinstance(max, tuple):
1423
+ if max[0] > max_value:
1424
+ max_value = max[0]
1425
+ combi_max = max[1]
1426
+ if min[0] < min_value:
1427
+ min_value = min[0]
1428
+ combi_min = min[1]
1429
+ else:
1430
+ if max > max_value:
1431
+ max_value = max
1432
+ combi_max = combination
1433
+ if min < min_value:
1434
+ min_value = min
1435
+ combi_min = combination
1383
1436
 
1384
1437
  if "M" in type:
1385
1438
  si_unit = si.N * si.mm
1386
1439
  else:
1387
1440
  si_unit = si.N
1388
- dict_internal_forces[type] = {"Min": min_value * si_unit, "Max": max_value * si_unit}
1441
+ dict_internal_forces[type] = {"Min": (min_value * si_unit, combi_min), "Max": (max_value * si_unit, combi_max)}
1389
1442
  return dict_internal_forces
1390
1443
 
1391
- def get_absolute_internal_force(self, member_id: str, combination: str, type: str = ("Nx", "Vy", "Vz", "Mx", "My", "Mz")):
1444
+ def get_absolute_internal_force(self, member_id: str, combination: str|list, type: str = ("Nx", "Vy", "Vz", "Mx", "My", "Mz"), get_combo_name: bool = ("False", "True")):
1392
1445
  """Retourne la valeur de d'effort absolue pour le type d'effort donné.
1393
1446
 
1394
1447
  Args:
1395
1448
  member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
1396
1449
  ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1397
- combination (str): Le nom de la combinaison à récupérer
1450
+ combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
1451
+ ex: ["ELU_STR", "ELU_ACC"] dans ce cas le résultat récupéré est
1452
+ le maximum/minimum de toute les combinaisons inclus dans ces tags.
1398
1453
  type (str): Le type d'effort interne à retourner. Defaults to ("Nx", "Vy", "Vz", "Mx", "My", "Mz").
1454
+ get_combo_name (bool): Si True, retourne également le nom de la combinaison associée à la valeur. Defaults to False.
1455
+
1399
1456
  """
1400
1457
  ei = self.get_min_max_internal_force(member_id, combination)
1401
- return max(abs(ei[type]["Min"]), ei[type]["Max"])
1458
+ max = "Max"
1459
+ if abs(ei[type]["Min"][0]) > ei[type]["Max"][0]:
1460
+ max = "Min"
1461
+ if get_combo_name:
1462
+ return {"Effort": abs(ei[type][max][0]), "Combinaison": ei[type][max][1]}
1463
+ else:
1464
+ return abs(ei[type][max][0])
1465
+
1402
1466
 
1403
1467
  def show_internal_force_of_member(
1404
1468
  self,
@@ -1414,7 +1478,7 @@ class Model_result(Projet):
1414
1478
  Args:
1415
1479
  member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
1416
1480
  ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1417
- combination (str): Le nom de la combinaison à récupérer
1481
+ combination (str): Le nom de la combinaison à récupérer.
1418
1482
  type (str): Le type d'effort interne à retourner. Defaults to ("Nx", "Vy", "Vz", "Mx", "My", "Mz").
1419
1483
  n_points (int, optional): le nombre de valeur à retrouner le long de la membrure. Defaults to 20.
1420
1484
  screenshot (bool, optional): Définit si l'on souhaite enregistrer un screenshot du graph, si oui alors True. Defaults to False
@@ -1489,13 +1553,15 @@ class Model_result(Projet):
1489
1553
  direction, n_points=n_points, combo_name=combination
1490
1554
  )
1491
1555
 
1492
- def get_min_max_deflection(self, member_id: str, combination: str) -> np.array:
1556
+ def get_min_max_deflection(self, member_id: str, combination: str|list) -> np.array:
1493
1557
  """Retourne le maximum et minimum des efforts internes d'une membrure donnée.
1494
1558
 
1495
1559
  Args:
1496
1560
  member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
1497
1561
  ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1498
- combination (str): Le nom de la combinaison à récupérer
1562
+ combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
1563
+ ex: ["ELS_C", "ELS_QP" "W_inst_Q", "W_net_fin"] dans ce cas le résultat récupéré est
1564
+ le maximum/minimum de toute les combinaisons inclus dans ces tags.
1499
1565
  """
1500
1566
  dict_deflection = {}
1501
1567
  for type in ("dx", "dy", "dz"):
@@ -1506,34 +1572,56 @@ class Model_result(Projet):
1506
1572
  member_id = [member_id]
1507
1573
  max_value = 0
1508
1574
  min_value = 0
1575
+ combi_max = None
1576
+ combi_min = None
1509
1577
  for member in member_id:
1510
1578
  if member not in self._model_generator._model.members:
1511
1579
  raise ValueError(f"La membrure {member} n'est pas dans le model MEF")
1512
1580
  max = self._model_generator._model.members[member].max_deflection(
1513
- type, combo_name=combination
1581
+ type, combo_tags=combination
1514
1582
  )
1515
1583
 
1516
1584
  min = self._model_generator._model.members[member].min_deflection(
1517
- type, combo_name=combination
1585
+ type, combo_tags=combination
1518
1586
  )
1519
- if max > max_value:
1520
- max_value = max
1521
- if min < min_value:
1522
- min_value = min
1523
- dict_deflection[type] = {"Min": min_value * si.mm, "Max": max_value * si.mm}
1587
+ if isinstance(max, tuple):
1588
+ if max[0] > max_value:
1589
+ max_value = max[0]
1590
+ combi_max = max[1]
1591
+ if min[0] < min_value:
1592
+ min_value = min[0]
1593
+ combi_min = min[1]
1594
+ else:
1595
+ if max > max_value:
1596
+ max_value = max
1597
+ combi_max = combination
1598
+ if min < min_value:
1599
+ min_value = min
1600
+ combi_min = combination
1601
+
1602
+ dict_deflection[type] = {"Min": (min_value * si.mm, combi_min), "Max": (max_value * si.mm, combi_max)}
1524
1603
  return dict_deflection
1525
1604
 
1526
- def get_absolute_max_deflection(self, member_id: str, combination: str, direction: str = ("dx", "dy", "dz")):
1605
+ def get_absolute_max_deflection(self, member_id: str, combination: str|list, direction: str = ("dx", "dy", "dz"), get_combo_name: bool=("False", "True")):
1527
1606
  """Retourne la valeur de déplacement absolue pour la direction de la flèche donnée.
1528
1607
 
1529
1608
  Args:
1530
1609
  member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
1531
1610
  ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
1532
- combination (str): Le nom de la combinaison à récupérer
1611
+ combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
1612
+ ex: ["ELS_QP" "W_inst_Q", "W_net_fin"] dans ce cas le résultat récupéré est
1613
+ le maximum/minimum de toute les combinaisons inclus dans ces tags.
1533
1614
  direction (str): La direction locale à retourner. Defaults to ("dx", "dy", "dz").
1615
+ get_combo_name (bool): Si True, retourne également le nom de la combinaison associée à la valeur. Defaults to False.
1534
1616
  """
1535
1617
  deflection = self.get_min_max_deflection(member_id, combination)
1536
- return max(abs(deflection[direction]["Min"]), deflection[direction]["Max"])
1618
+ max = "Max"
1619
+ if abs(deflection[direction]["Min"][0]) > deflection[direction]["Max"][0]:
1620
+ max = "Min"
1621
+ if get_combo_name:
1622
+ return {"Flèche": abs(deflection[direction][max][0]), "Combinaison": deflection[direction][max][1]}
1623
+ else:
1624
+ return abs(deflection[direction][max][0])
1537
1625
 
1538
1626
 
1539
1627
  def show_deflection_of_member(
@@ -1642,7 +1730,7 @@ class Model_result(Projet):
1642
1730
  )
1643
1731
  else:
1644
1732
  interaction = False
1645
- renderer.screenshot(filepath, interact=interaction)
1733
+ renderer.screenshot(filepath, interact=interaction, reset_camera=True)
1646
1734
  return filepath
1647
1735
  else:
1648
1736
  renderer.render_model()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ourocode
3
- Version: 1.8.1
3
+ Version: 1.9.0
4
4
  Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
5
5
  Author-email: Anthony PARISOT <contact@ourea-structure.fr>
6
6
  License-Expression: Apache-2.0
@@ -8,7 +8,7 @@ include = ["ourocode*"]
8
8
 
9
9
  [project]
10
10
  name = "ourocode"
11
- version = "1.8.1"
11
+ version = "1.9.0"
12
12
  description = "Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée."
13
13
  readme = "README.md"
14
14
  authors = [{name = "Anthony PARISOT", email = "contact@ourea-structure.fr"}]
@@ -1 +0,0 @@
1
- __version__ = "1.8.1"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes