midas-civil 1.0.5__tar.gz → 1.0.8__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.

Potentially problematic release.


This version of midas-civil might be problematic. Click here for more details.

Files changed (41) hide show
  1. {midas_civil-1.0.5 → midas_civil-1.0.8}/PKG-INFO +1 -1
  2. midas_civil-1.0.8/midas_civil/_BoundaryChangeAssignment.py +278 -0
  3. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/__init__.py +5 -5
  4. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_element.py +62 -2
  5. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_group.py +1 -1
  6. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_load.py +1 -1
  7. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_mapi.py +2 -1
  8. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_model.py +40 -41
  9. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_movingload.py +1 -1
  10. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_node.py +1 -1
  11. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_result.py +1 -2
  12. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_result_extract.py +0 -1
  13. midas_civil-1.0.8/midas_civil/_section/_TapdbSecSS.py +47 -0
  14. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/__init__.py +61 -24
  15. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/_compositeSS.py +4 -4
  16. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/_dbSecSS.py +16 -2
  17. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/_pscSS.py +6 -6
  18. midas_civil-1.0.8/midas_civil/_section/_tapPSC1CellSS.py +186 -0
  19. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/_unSupp.py +2 -2
  20. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_settlement.py +0 -1
  21. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_temperature.py +1 -1
  22. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_tendon.py +1 -0
  23. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_thickness.py +0 -1
  24. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_utils.py +3 -3
  25. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil.egg-info/PKG-INFO +1 -1
  26. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil.egg-info/SOURCES.txt +3 -0
  27. {midas_civil-1.0.5 → midas_civil-1.0.8}/setup.py +1 -1
  28. {midas_civil-1.0.5 → midas_civil-1.0.8}/LICENSE +0 -0
  29. {midas_civil-1.0.5 → midas_civil-1.0.8}/README.md +0 -0
  30. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_analysiscontrol.py +0 -0
  31. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_boundary.py +0 -0
  32. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_construction.py +0 -0
  33. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_construction_backup.py +0 -0
  34. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_material.py +0 -0
  35. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_result copy.py +0 -0
  36. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_section/_offsetSS.py +0 -0
  37. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil/_view.py +0 -0
  38. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil.egg-info/dependency_links.txt +0 -0
  39. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil.egg-info/requires.txt +0 -0
  40. {midas_civil-1.0.5 → midas_civil-1.0.8}/midas_civil.egg-info/top_level.txt +0 -0
  41. {midas_civil-1.0.5 → midas_civil-1.0.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: midas_civil
3
- Version: 1.0.5
3
+ Version: 1.0.8
4
4
  Summary: Python library for MIDAS Civil NX
5
5
  Home-page: https://github.com/MIDASIT-Co-Ltd/midas-civil-python
6
6
  Author: Sumit Shekhar
@@ -0,0 +1,278 @@
1
+ from ._mapi import *
2
+ from ._load import *
3
+
4
+
5
+ class BoundaryChangeAssignment:
6
+
7
+ data = []
8
+
9
+ def __init__(self,
10
+ # Support options
11
+ bSPT: bool = False,
12
+ bSPR: bool = False,
13
+ bGSPR: bool = False,
14
+ bCGLINK: bool = False,
15
+ bSSSF: bool = False,
16
+ bPSSF: bool = False,
17
+ bRLS: bool = False,
18
+ bWSSF: bool = False,
19
+ bESSF: bool = False,
20
+ bCDOF: bool = False,
21
+ # Boundary settings
22
+ vBOUNDARY: list = None,
23
+ # Load analysis settings for ST type
24
+ ST_load_assignments: list = None,
25
+ # Load analysis settings for other types
26
+ MV: str = None,
27
+ SM: str = None,
28
+ THRSEV: str = None,
29
+ PO: str = None,
30
+ THNS: str = None,
31
+ ULAT: str = None):
32
+ """
33
+ Boundary Change Assignment constructor.
34
+
35
+ Parameters:
36
+ bSPT: Support (default False)
37
+ bSPR: Point Spring Support (default False)
38
+ bGSPR: General Spring Support (default False)
39
+ bCGLINK: Change General Link Property (default False)
40
+ bSSSF: Section Stiffness Scale Factor (default False)
41
+ bPSSF: Plate Stiffness Scale Factor (default False)
42
+ bRLS: Beam End Release (default False)
43
+ bWSSF: Wall Stiffness Scale Factor (default False)
44
+ bESSF: Element Stiffness Scale Factor (default False)
45
+ bCDOF: Constrain DOF associated with specified displacements/Settlements by boundary group combinations (default False)
46
+ vBOUNDARY: List of boundary assignments in format [["L1", "BG2"], ["L2", "BG1"]]
47
+ ST_load_assignments: List of ST type load cases with BGCNAME assignments in format [["Self-weight", "L1"], ["SIDL", "UNCHANGED"]]
48
+ MV, SM, THRSEV, PO, THNS, ULAT: Boundary group names for respective analysis types
49
+
50
+ Examples:
51
+ # Basic boundary change assignment
52
+ BoundaryChangeAssignment(
53
+ bSPT=True,
54
+ bCDOF=True,
55
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
56
+ ST_load_assignments=[["Self-weight", "L1"]],
57
+ MV="L1"
58
+ )
59
+
60
+ # Complex assignment with multiple load types
61
+ BoundaryChangeAssignment(
62
+ bSPT=True,
63
+ bSPR=False,
64
+ bGSPR=False,
65
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
66
+ ST_load_assignments=[["Self-weight", "L1"], ["SIDL", "L2"]],
67
+ MV="L1",
68
+ SM="L2",
69
+ THRSEV="L1"
70
+ )
71
+ """
72
+
73
+ # ID is always 1 based on the pattern
74
+ self.ID = 1
75
+
76
+ # Set support parameters
77
+ self.bSPT = bSPT
78
+ self.bSPR = bSPR
79
+ self.bGSPR = bGSPR
80
+ self.bCGLINK = bCGLINK
81
+ self.bSSSF = bSSSF
82
+ self.bPSSF = bPSSF
83
+ self.bRLS = bRLS
84
+ self.bWSSF = bWSSF
85
+ self.bESSF = bESSF
86
+ self.bCDOF = bCDOF
87
+
88
+ # Process boundary data
89
+ self.vBOUNDARY = self._process_boundary_data(vBOUNDARY)
90
+
91
+ # Process load analysis data
92
+ self.vLOADANAL = self._process_load_analysis_data(
93
+ ST_load_assignments, MV, SM, THRSEV, PO, THNS, ULAT
94
+ )
95
+
96
+ # Add to static list
97
+ BoundaryChangeAssignment.data.append(self)
98
+
99
+ # Automatically execute the data when instance is created
100
+ self._execute()
101
+
102
+ def _process_boundary_data(self, vBOUNDARY):
103
+ """
104
+ Process boundary data from list format to required JSON structure.
105
+ Input: [["L1", "BG2"], ["L2", "BG1"]]
106
+ Output: [{"BGCNAME": "L1", "vBG": ["BG2"]}, {"BGCNAME": "L2", "vBG": ["BG1"]}]
107
+ """
108
+ if not vBOUNDARY:
109
+ return []
110
+
111
+ boundary_list = []
112
+ for boundary_pair in vBOUNDARY:
113
+ if len(boundary_pair) == 2:
114
+ boundary_list.append({
115
+ "BGCNAME": boundary_pair[0],
116
+ "vBG": [boundary_pair[1]]
117
+ })
118
+
119
+ return boundary_list
120
+
121
+ def _get_load_cases(self):
122
+ """
123
+ Get load cases from the system using Load_Case.get() command.
124
+ This simulates the API call that would retrieve current load cases.
125
+ """
126
+ try:
127
+ # This would be replaced with actual API call: Load_Case.get()
128
+ # For now, using the provided example data structure
129
+ load_cases_response = Load_Case.get()
130
+ return load_cases_response.get('STLD', {})
131
+ except:
132
+ # Fallback to empty if API call fails
133
+ return {}
134
+
135
+ def _convert_st_assignments_to_dict(self, ST_load_assignments):
136
+ """
137
+ Convert ST_load_assignments from list format to dictionary format.
138
+ Input: [["Self-weight", "L1"], ["SIDL", "UNCHANGED"]]
139
+ Output: {"Self-weight": "L1", "SIDL": "UNCHANGED"}
140
+ """
141
+ if not ST_load_assignments:
142
+ return {}
143
+
144
+ assignments_dict = {}
145
+ for assignment_pair in ST_load_assignments:
146
+ if len(assignment_pair) == 2:
147
+ assignments_dict[assignment_pair[0]] = assignment_pair[1]
148
+
149
+ return assignments_dict
150
+
151
+ def _process_load_analysis_data(self, ST_load_assignments, MV, SM, THRSEV, PO, THNS, ULAT):
152
+ """
153
+ Process load analysis data combining user input with system load cases.
154
+ """
155
+ load_anal_list = []
156
+
157
+ # Get current load cases from system
158
+ load_cases = self._get_load_cases()
159
+
160
+ # Process ST type load cases
161
+ st_cases = {case_data['NAME']: case_data for case_data in load_cases.values() } # Assuming ST cases are USER type
162
+
163
+ # Convert ST_load_assignments from list format to dictionary format for internal processing
164
+ st_assignments_dict = self._convert_st_assignments_to_dict(ST_load_assignments)
165
+
166
+ if st_cases:
167
+ for case_name in st_cases.keys():
168
+ bgcname = "UNCHANGED" # Default value
169
+
170
+ # If user provided specific assignment for this load case
171
+ if st_assignments_dict and case_name in st_assignments_dict:
172
+ bgcname = st_assignments_dict[case_name]
173
+
174
+ load_anal_list.append({
175
+ "TYPE": "ST",
176
+ "BGCNAME": bgcname,
177
+ "LCNAME": case_name
178
+ })
179
+
180
+ # Process other load analysis types
181
+ analysis_types = {
182
+ "MV": MV,
183
+ "SM": SM,
184
+ "THRSEV": THRSEV,
185
+ "PO": PO,
186
+ "THNS": THNS,
187
+ "ULAT": ULAT
188
+ }
189
+
190
+ for analysis_type, bgcname in analysis_types.items():
191
+ load_anal_entry = {
192
+ "TYPE": analysis_type,
193
+ "BGCNAME": bgcname if bgcname is not None else "UNCHANGED"
194
+ }
195
+ load_anal_list.append(load_anal_entry)
196
+
197
+ return load_anal_list
198
+
199
+ def _execute(self):
200
+ """
201
+ Automatically sends the BoundaryChangeAssignment to the system when created.
202
+ """
203
+ json_data = {"Assign": {}}
204
+
205
+ boundary_data = {
206
+ "bSPT": self.bSPT,
207
+ "bSPR": self.bSPR,
208
+ "bGSPR": self.bGSPR,
209
+ "bCGLINK": self.bCGLINK,
210
+ "bSSSF": self.bSSSF,
211
+ "bPSSF": self.bPSSF,
212
+ "bRLS": self.bRLS,
213
+ "bWSSF": self.bWSSF,
214
+ "bESSF": self.bESSF,
215
+ "bCDOF": self.bCDOF,
216
+ "vBOUNDARY": self.vBOUNDARY,
217
+ "vLOADANAL": self.vLOADANAL
218
+ }
219
+
220
+ json_data["Assign"][str(self.ID)] = boundary_data
221
+
222
+ # Execute the API call
223
+ MidasAPI("PUT", "/db/bcct", json_data)
224
+
225
+ def __str__(self):
226
+ """
227
+ String representation of the BoundaryChangeAssignment.
228
+ """
229
+ return f"BoundaryChangeAssignment(ID={self.ID}, Boundaries={len(self.vBOUNDARY)}, LoadAnalyses={len(self.vLOADANAL)})"
230
+
231
+ def __repr__(self):
232
+ """
233
+ Detailed representation of the BoundaryChangeAssignment.
234
+ """
235
+ return (f"BoundaryChangeAssignment(ID={self.ID}, "
236
+ f"bSPT={self.bSPT}, bCDOF={self.bCDOF}, "
237
+ f"Boundaries={self.vBOUNDARY}, "
238
+ f"LoadAnalyses={self.vLOADANAL})")
239
+
240
+
241
+
242
+ # Example usage:
243
+ """
244
+ # Example 1: Basic boundary change assignment
245
+ boundary_assignment = BoundaryChangeAssignment(
246
+ bSPT=True,
247
+ bCDOF=True,
248
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
249
+ ST_load_assignments=[["Self-weight", "L1"]],
250
+ MV="L1"
251
+ )
252
+
253
+ # Example 2: Complex assignment with multiple settings
254
+ complex_assignment = BoundaryChangeAssignment(
255
+ bSPT=True,
256
+ bSPR=False,
257
+ bGSPR=False,
258
+ bCGLINK=False,
259
+ bSSSF=False,
260
+ bPSSF=False,
261
+ bRLS=False,
262
+ bCDOF=True,
263
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
264
+ ST_load_assignments=[["Self-weight", "L1"], ["SIDL", "UNCHANGED"]],
265
+ MV="UNCHANGED",
266
+ SM="L2",
267
+ THRSEV="L1",
268
+ PO="UNCHANGED",
269
+ THNS="UNCHANGED",
270
+ ULAT="UNCHANGED"
271
+ )
272
+
273
+ # Example 3: Minimal assignment with defaults
274
+ minimal_assignment = BoundaryChangeAssignment(
275
+ bSPT=True,
276
+ vBOUNDARY=[["L1", "BG2"]]
277
+ )
278
+ """
@@ -1,6 +1,6 @@
1
1
  import requests
2
2
  from ._mapi import *
3
- _version_ = "1.0.5"
3
+ _version_ = "1.0.8"
4
4
 
5
5
 
6
6
  print('')
@@ -42,8 +42,8 @@ from ._temperature import *
42
42
  from ._tendon import *
43
43
  from ._view import *
44
44
 
45
- from ._movingload import*
46
- from ._settlement import*
47
- from ._analysiscontrol import*
48
-
45
+ from ._movingload import *
46
+ from ._settlement import *
47
+ from ._analysiscontrol import *
48
+ from ._BoundaryChangeAssignment import*
49
49
 
@@ -1,14 +1,14 @@
1
1
  from ._mapi import *
2
2
  from ._node import *
3
3
  from ._group import _add_elem_2_stGroup
4
- from ._group import _add_node_2_stGroup
4
+ from ._group import _add_node_2_stGroup,Group
5
5
  import numpy as np
6
6
  from scipy.interpolate import splev, splprep
7
7
  from math import hypot
8
8
  import math
9
9
 
10
10
 
11
- def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=True) -> list:
11
+ def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=True,yEcc=0,zEcc=0) -> list:
12
12
  ''' Returns point list and beta angle list'''
13
13
  pointsArray = np.array(pointsArray)
14
14
  x_p, y_p , z_p = pointsArray[:,0] , pointsArray[:,1] , pointsArray[:,2]
@@ -84,6 +84,7 @@ def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=T
84
84
  return align_fine_points
85
85
 
86
86
 
87
+
87
88
  def _nodeDIST(a:Node,b:Node):
88
89
  return round(hypot((a.X-b.X),(a.Y-b.Y),(a.Z-b.Z)),6)
89
90
 
@@ -109,6 +110,43 @@ def _triangleAREA(a:Node,b:Node,c:Node):
109
110
  mag = np.linalg.norm(np.cross(v1, v2))
110
111
  return float(0.5 * mag) , np.cross(v1, v2)/mag
111
112
 
113
+ def _calcVector(deltaLocation):
114
+ Z_new = np.array([0.000001,0,1])
115
+ X_new = np.array(deltaLocation)
116
+ Y_new = np.cross(Z_new, X_new)
117
+
118
+ Z_new = np.cross(X_new, Y_new) # Recomputing
119
+
120
+ X_new = X_new / (np.linalg.norm(X_new)+0.000001)
121
+ Y_new = Y_new / (np.linalg.norm(Y_new)+0.000001)
122
+ Z_new = Z_new / (np.linalg.norm(Z_new)+0.000001)
123
+
124
+ return [X_new,Y_new,Z_new]
125
+
126
+ def _pointOffset(pts,yEcc,zEcc):
127
+ norm = []
128
+ norm.append(_calcVector(np.subtract(pts[1],pts[0])))
129
+
130
+ for i in range(len(pts)-2):
131
+ X_new1 = np.array(np.subtract(pts[i+1],pts[i]))
132
+ X_new2 = np.array(np.subtract(pts[i+2],pts[i+1]))
133
+
134
+ X_new1 = X_new1 / (np.linalg.norm(X_new1)+0.000001)
135
+ X_new2 = X_new2 / (np.linalg.norm(X_new2)+0.000001)
136
+
137
+ norm.append(_calcVector(np.add(X_new1,X_new2)))
138
+
139
+ norm.append(_calcVector(np.subtract(pts[-1],pts[-2])))
140
+
141
+ # print(norm)
142
+
143
+ pt_new = []
144
+ for i in range(len(pts)):
145
+ pt_new.append(pts[i]+yEcc*norm[i][1]+zEcc*norm[i][2])
146
+
147
+ return pt_new
148
+
149
+
112
150
  def _ADD(self):
113
151
  """
114
152
  Adds an element to the main list. If the ID is 0, it auto-increments.
@@ -412,6 +450,28 @@ class Element:
412
450
  beam_obj.append(Element.Beam(beam_nodes[i],beam_nodes[i+1],mat,sect,angle,group,id_new,bLocalAxis))
413
451
 
414
452
  return beam_obj
453
+
454
+ @staticmethod
455
+ def PLine2(points_loc:list,n_div:int=0,deg:int=1,includePoint:bool=True,mat:int=1,sect:int=1,angle:float=0, group = "" , id: int = 0,bLocalAxis=False,yEcc=0,zEcc=0):
456
+
457
+ beam_nodes =[]
458
+ beam_obj = []
459
+ if n_div == 0 :
460
+ i_loc = points_loc
461
+ else:
462
+ i_loc = _interpolateAlignment(points_loc,n_div,deg,0,includePoint,yEcc,zEcc)
463
+
464
+ i_loc2 = _pointOffset(i_loc,yEcc,zEcc)
465
+ for i in i_loc2:
466
+ Enode=Node(i[0],i[1],i[2])
467
+ beam_nodes.append(Enode.ID)
468
+
469
+ for i in range(len(i_loc2)-1):
470
+ if id == 0 : id_new = 0
471
+ else: id_new = id+i
472
+ beam_obj.append(Element.Beam(beam_nodes[i],beam_nodes[i+1],mat,sect,angle,group,id_new,bLocalAxis))
473
+
474
+ return beam_obj
415
475
 
416
476
  class Truss(_common):
417
477
  def __init__(self, i: int, j: int, mat: int = 1, sect: int = 1, angle: float = 0, group = "" , id: int = 0):
@@ -330,4 +330,4 @@ class Group:
330
330
  def delete(cls):
331
331
  cls.Groups=[]
332
332
  cls.ids=[]
333
- MidasAPI("DELETE",cls.url)
333
+ MidasAPI("DELETE",cls.url)
@@ -737,4 +737,4 @@ class Load:
737
737
  item['GROUP_NAME'],
738
738
  values,
739
739
  item['ID']
740
- )
740
+ )
@@ -1,6 +1,7 @@
1
1
  import requests
2
2
  import sys
3
- import winreg
3
+ try:import winreg
4
+ except: pass
4
5
 
5
6
 
6
7
 
@@ -195,46 +195,46 @@ class Model:
195
195
 
196
196
 
197
197
 
198
- @staticmethod
199
- def _create2(request = "update", set = 1, force = "KN", length = "M", heat = "BTU", temp = "C"):
200
- """request["update" to update a model, "call" to get details of existing model], \nforce[Optional], length[Optional], heat[Optional], temp[Optional].
201
- \nSample: model() to update/create model. model("call") to get details of existing model and update classes.\n
202
- set = 1 => Functions that don't need to call data from connected model file.\n
203
- set = 2 => Functions that may need to call data from connected model file."""
204
- Model.units(force, length, heat, temp)
205
- if MAPI_KEY.data == []: print(f"Enter the MAPI key using the MAPI_KEY command.")
206
- if MAPI_KEY.data != []:
207
- if set == 1:
208
- if request == "update" or request == "create" or request == "PUT":
209
- if Node.json() != {"Assign":{}}: Node.create()
210
- if Element.json() != {"Assign":{}}: Element.create()
211
- if Section.json() != {"Assign":{}}: Section.create()
212
- if Group.json_BG() != {"Assign":{}}: Group.create_BG()
213
- if Group.json_LG() != {"Assign":{}}: Group.create_LG()
214
- if Group.json_TG() != {"Assign":{}}: Group.create_TG()
215
- if Material.json() != {"Assign":{}}: Material.create()
216
- if request == "call" or request == "GET":
217
- Node.sync()
218
- Element.sync()
219
- Section.sync()
220
- Group.sync()
221
- Material.sync()
222
- if set == 2:
223
- if request == "update" or request == "create" or request == "PUT":
224
- if Node.json() != {"Assign":{}}: Node.create()
225
- if Element.json() != {"Assign":{}}: Element.create()
226
- if Section.json() != {"Assign":{}}: Section.create()
227
- if Group.json_BG() != {"Assign":{}}: Group.create_BG()
228
- if Group.json_LG() != {"Assign":{}}: Group.create_LG()
229
- if Group.json_TG() != {"Assign":{}}: Group.create_TG()
230
- if Material.json() != {"Assign":{}}: Material.create()
231
- if Group.json_SG() != {"Assign":{}}: Group.create_SG()
232
- if request == "call" or request == "GET":
233
- Node.update_class()
234
- Element.update_class()
235
- Section.update_class()
236
- Group.update_class()
237
- Material.update_class()
198
+ # @staticmethod
199
+ # def _create2(request = "update", set = 1, force = "KN", length = "M", heat = "BTU", temp = "C"):
200
+ # """request["update" to update a model, "call" to get details of existing model], \nforce[Optional], length[Optional], heat[Optional], temp[Optional].
201
+ # \nSample: model() to update/create model. model("call") to get details of existing model and update classes.\n
202
+ # set = 1 => Functions that don't need to call data from connected model file.\n
203
+ # set = 2 => Functions that may need to call data from connected model file."""
204
+ # Model.units(force, length, heat, temp)
205
+ # if MAPI_KEY.data == []: print(f"Enter the MAPI key using the MAPI_KEY command.")
206
+ # if MAPI_KEY.data != []:
207
+ # if set == 1:
208
+ # if request == "update" or request == "create" or request == "PUT":
209
+ # if Node.json() != {"Assign":{}}: Node.create()
210
+ # if Element.json() != {"Assign":{}}: Element.create()
211
+ # if Section.json() != {"Assign":{}}: Section.create()
212
+ # if Group.json_BG() != {"Assign":{}}: Group.create_BG()
213
+ # if Group.json_LG() != {"Assign":{}}: Group.create_LG()
214
+ # if Group.json_TG() != {"Assign":{}}: Group.create_TG()
215
+ # if Material.json() != {"Assign":{}}: Material.create()
216
+ # if request == "call" or request == "GET":
217
+ # Node.sync()
218
+ # Element.sync()
219
+ # Section.sync()
220
+ # Group.sync()
221
+ # Material.sync()
222
+ # if set == 2:
223
+ # if request == "update" or request == "create" or request == "PUT":
224
+ # if Node.json() != {"Assign":{}}: Node.create()
225
+ # if Element.json() != {"Assign":{}}: Element.create()
226
+ # if Section.json() != {"Assign":{}}: Section.create()
227
+ # if Group.json_BG() != {"Assign":{}}: Group.create_BG()
228
+ # if Group.json_LG() != {"Assign":{}}: Group.create_LG()
229
+ # if Group.json_TG() != {"Assign":{}}: Group.create_TG()
230
+ # if Material.json() != {"Assign":{}}: Material.create()
231
+ # if Group.json_SG() != {"Assign":{}}: Group.create_SG()
232
+ # if request == "call" or request == "GET":
233
+ # Node.update_class()
234
+ # Element.update_class()
235
+ # Section.update_class()
236
+ # Group.update_class()
237
+ # Material.update_class()
238
238
 
239
239
 
240
240
 
@@ -403,4 +403,3 @@ class Model:
403
403
 
404
404
 
405
405
 
406
-
@@ -1428,4 +1428,4 @@ class MovingLoad:
1428
1428
 
1429
1429
 
1430
1430
 
1431
- #--------------------------------------Test---------------------------------------------
1431
+ #--------------------------------------Test---------------------------------------------
@@ -289,4 +289,4 @@ class NodeLocalAxis:
289
289
 
290
290
  # for j in a['NODE'].keys():
291
291
 
292
- # Node(round(a['NODE'][j]['X'],6), round(a['NODE'][j]['Y'],6), round(a['NODE'][j]['Z'],6), id=int(j), group='', merge=0)
292
+ # Node(round(a['NODE'][j]['X'],6), round(a['NODE'][j]['Y'],6), round(a['NODE'][j]['Z'],6), id=int(j), group='', merge=0)
@@ -151,5 +151,4 @@ class LoadCombination:
151
151
  print("No load combinations are defined to delete.")
152
152
  for i in list(json.keys()):
153
153
  MidasAPI("DELETE",LoadCombination.com_map.get(i) + a)
154
- #---------------------------------------------------------------------------------------------------------------
155
-
154
+ #---------------------------------------------------------------------------------------------------------------
@@ -204,4 +204,3 @@ class Result :
204
204
  ss_json = MidasAPI("POST","/post/table",js_dat)
205
205
  _setUNIT(currUNIT)
206
206
  return _JSToDF_ResTable(ss_json)
207
-
@@ -0,0 +1,47 @@
1
+ from ._offsetSS import Offset
2
+ from ._offsetSS import _common
3
+
4
+ class _SS_TAPERED_DBUSER(_common):
5
+
6
+ """ Create Standard USER DEFINED sections"""
7
+
8
+ def __init__(self,Name='',Shape='',params_I:list=[],params_J:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
9
+ """ Shape = 'SB' 'SR' for rectangle \n For cylinder"""
10
+ self.ID = id
11
+ self.NAME = Name
12
+ self.TYPE = 'TAPERED'
13
+ self.SHAPE = Shape
14
+ self.PARAMS_I = params_I
15
+ self.PARAMS_J = params_J
16
+ self.OFFSET = Offset
17
+ self.USESHEAR = useShear
18
+ self.USE7DOF = use7Dof
19
+ self.DATATYPE = 2
20
+
21
+ def __str__(self):
22
+ return f' > ID = {self.ID} | USER DEFINED STANDARD SECTION \nJSON = {self.toJSON()}\n'
23
+
24
+
25
+ def toJSON(sect):
26
+ js = {
27
+ "SECTTYPE": sect.TYPE,
28
+ "SECT_NAME": sect.NAME,
29
+ "SECT_BEFORE": {
30
+ "SHAPE": sect.SHAPE,
31
+ "TYPE": sect.DATATYPE,
32
+ "SECT_I": {
33
+ "vSIZE": sect.PARAMS_I
34
+ },
35
+ "SECT_J": {
36
+ "vSIZE": sect.PARAMS_J
37
+ }
38
+ }
39
+ }
40
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
41
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
42
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
43
+ return js
44
+
45
+ @staticmethod
46
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
47
+ return _SS_TAPERED_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],js['SECT_BEFORE']['SECT_J']['vSIZE'],offset,uShear,u7DOF,id)
@@ -1,16 +1,17 @@
1
- print('Section MODULE LOADED...')
2
-
3
- from ._pscSS import SS_PSC_12CELL,SS_PSC_I,SS_PSC_Value
4
- from ._dbSecSS import SS_DBUSER
1
+ from ._pscSS import _SS_PSC_12CELL,_SS_PSC_I,_SS_PSC_Value
2
+ from ._dbSecSS import _SS_DBUSER
5
3
  from ._offsetSS import Offset
6
- from ._unSupp import SS_UNSUPP,SS_STD_DB
7
- from ._compositeSS import SS_COMP_PSC_I,SS_COMP_STEEL_I_TYPE1
4
+ from ._unSupp import _SS_UNSUPP,_SS_STD_DB
5
+ from ._compositeSS import _SS_COMP_PSC_I,_SS_COMP_STEEL_I_TYPE1
6
+ from ._TapdbSecSS import _SS_TAPERED_DBUSER
7
+
8
+ from ._tapPSC1CellSS import _SS_TAP_PSC_1CELL
8
9
 
9
10
  from midas_civil import MidasAPI
10
11
 
11
12
 
12
13
  class _helperSECTION:
13
- NAME, SHAPE, TYPE, OFFSET, USESHEAR, USE7DOF = 0,0,0,0,0,0
14
+ ID, NAME, SHAPE, TYPE, OFFSET, USESHEAR, USE7DOF = 0,0,0,0,0,0,0
14
15
  def update():
15
16
  pass
16
17
  def toJSON():
@@ -74,21 +75,27 @@ def _JS2OBJ(id,js):
74
75
 
75
76
 
76
77
  if type == 'DBUSER':
77
- if js['SECT_BEFORE']['DATATYPE'] ==2: obj = SS_DBUSER._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
78
- else: obj = SS_STD_DB(id,name,type,shape,offset,uShear,u7DOF,js)
78
+ if js['SECT_BEFORE']['DATATYPE'] ==2: obj = _SS_DBUSER._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
79
+ else: obj = _SS_STD_DB(id,name,type,shape,offset,uShear,u7DOF,js)
79
80
 
80
81
  elif type == 'PSC' :
81
- if shape in ['1CEL','2CEL']: obj = SS_PSC_12CELL._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
82
- elif shape in ['PSCI']: obj = SS_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
83
- elif shape in ['VALU']: obj = SS_PSC_Value._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
84
- else: obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
82
+ if shape in ['1CEL','2CEL']: obj = _SS_PSC_12CELL._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
83
+ elif shape in ['PSCI']: obj = _SS_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
84
+ elif shape in ['VALU']: obj = _SS_PSC_Value._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
85
+ else: obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
85
86
 
86
87
  elif type == 'COMPOSITE':
87
- if shape in ['CI']: obj = SS_COMP_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
88
- elif shape in ['I']: obj = SS_COMP_STEEL_I_TYPE1._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
89
- else: obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
88
+ if shape in ['CI']: obj = _SS_COMP_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
89
+ elif shape in ['I']: obj = _SS_COMP_STEEL_I_TYPE1._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
90
+ else: obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
91
+
92
+ elif type == 'TAPERED' :
93
+ if js['SECT_BEFORE']['TYPE'] ==2: obj = _SS_TAPERED_DBUSER._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
94
+ elif shape in ['1CEL']: obj = _SS_TAP_PSC_1CELL._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
95
+ else: obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
96
+
90
97
  else :
91
- obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
98
+ obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
92
99
 
93
100
 
94
101
  _SectionADD(obj)
@@ -108,7 +115,7 @@ class Section:
108
115
  json = {"Assign":{}}
109
116
  for sect in cls.sect:
110
117
  js = sect.toJSON()
111
- json["Assign"][sect.ID] = js
118
+ json["Assign"][str(sect.ID)] = js
112
119
  return json
113
120
 
114
121
  @staticmethod
@@ -144,7 +151,7 @@ class Section:
144
151
  @staticmethod
145
152
  def DBUSER(Name='',Shape='',parameters:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
146
153
  args = locals()
147
- sect_Obj = SS_DBUSER(**args)
154
+ sect_Obj = _SS_DBUSER(**args)
148
155
  _SectionADD(sect_Obj)
149
156
  return sect_Obj
150
157
 
@@ -158,7 +165,7 @@ class Section:
158
165
  BI1=0,BI11=0,BI12=0,BI21=0,BI3=0,BI31=0,BI32=0,BI4=0,
159
166
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
160
167
  args = locals()
161
- sect_Obj = SS_PSC_12CELL(**args)
168
+ sect_Obj = _SS_PSC_12CELL(**args)
162
169
  _SectionADD(sect_Obj)
163
170
  return sect_Obj
164
171
 
@@ -172,7 +179,7 @@ class Section:
172
179
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
173
180
 
174
181
  args = locals()
175
- sect_Obj = SS_COMP_PSC_I(**args)
182
+ sect_Obj = _SS_COMP_PSC_I(**args)
176
183
 
177
184
  _SectionADD(sect_Obj)
178
185
  return sect_Obj
@@ -183,7 +190,7 @@ class Section:
183
190
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
184
191
 
185
192
  args = locals()
186
- sect_Obj = SS_PSC_Value(**args)
193
+ sect_Obj = _SS_PSC_Value(**args)
187
194
 
188
195
  _SectionADD(sect_Obj)
189
196
  return sect_Obj
@@ -203,7 +210,7 @@ class Section:
203
210
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
204
211
 
205
212
  args = locals()
206
- sect_Obj = SS_COMP_PSC_I(**args)
213
+ sect_Obj = _SS_COMP_PSC_I(**args)
207
214
 
208
215
  _SectionADD(sect_Obj)
209
216
  return sect_Obj
@@ -214,11 +221,41 @@ class Section:
214
221
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
215
222
 
216
223
  args = locals()
217
- sect_Obj = SS_COMP_STEEL_I_TYPE1(**args)
224
+ sect_Obj = _SS_COMP_STEEL_I_TYPE1(**args)
225
+
226
+ _SectionADD(sect_Obj)
227
+ return sect_Obj
228
+
229
+ class Tapered:
230
+
231
+ @staticmethod
232
+ def DBUSER(Name='',Shape='',params_I:list=[],params_J:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
233
+ args = locals()
234
+ sect_Obj = _SS_TAPERED_DBUSER(**args)
218
235
 
219
236
  _SectionADD(sect_Obj)
220
237
  return sect_Obj
221
238
 
239
+ @staticmethod
240
+ def PSC1CEL(Name='',Joint=[0,0,0,0,0,0,0,0],
241
+ HO1_I=0,HO2_I=0,HO21_I=0,HO22_I=0,HO3_I=0,HO31_I=0,
242
+ BO1_I=0,BO11_I=0,BO12_I=0,BO2_I=0,BO21_I=0,BO3_I=0,
243
+ HI1_I=0,HI2_I=0,HI21_I=0,HI22_I=0,HI3_I=0,HI31_I=0,HI4_I=0,HI41_I=0,HI42_I=0,HI5_I=0,
244
+ BI1_I=0,BI11_I=0,BI12_I=0,BI21_I=0,BI3_I=0,BI31_I=0,BI32_I=0,BI4_I=0,
245
+
246
+ HO1_J=0,HO2_J=0,HO21_J=0,HO22_J=0,HO3_J=0,HO31_J=0,
247
+ BO1_J=0,BO11_J=0,BO12_J=0,BO2_J=0,BO21_J=0,BO3_J=0,
248
+ HI1_J=0,HI2_J=0,HI21_J=0,HI22_J=0,HI3_J=0,HI31_J=0,HI4_J=0,HI41_J=0,HI42_J=0,HI5_J=0,
249
+ BI1_J=0,BI11_J=0,BI12_J=0,BI21_J=0,BI3_J=0,BI31_J=0,BI32_J=0,BI4_J=0,
250
+
251
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
252
+ args = locals()
253
+ sect_Obj = _SS_TAP_PSC_1CELL(**args)
254
+
255
+ _SectionADD(sect_Obj)
256
+ return sect_Obj
257
+
258
+
222
259
 
223
260
 
224
261
  #--------------------------------- T A P E R E D G R O U P ---------------------------------------------
@@ -1,7 +1,7 @@
1
1
  from ._offsetSS import Offset
2
2
  from ._offsetSS import _common
3
3
 
4
- class SS_COMP_PSC_I(_common):
4
+ class _SS_COMP_PSC_I(_common):
5
5
 
6
6
  """ Create Standard USER DEFINED sections"""
7
7
 
@@ -178,7 +178,7 @@ class SS_COMP_PSC_I(_common):
178
178
  except: e2 = 0
179
179
 
180
180
 
181
- return SS_COMP_PSC_I(name,False,joint,
181
+ return _SS_COMP_PSC_I(name,False,joint,
182
182
  slab[0],slab[1],slab[2],
183
183
  vA[0],
184
184
  vA[1],vA[2],vA[3],vA[4],vA[5],vA[6],vA[7],vA[8],vA[9],
@@ -190,7 +190,7 @@ class SS_COMP_PSC_I(_common):
190
190
  offset,uShear,u7DOF,id)
191
191
 
192
192
 
193
- class SS_COMP_STEEL_I_TYPE1(_common):
193
+ class _SS_COMP_STEEL_I_TYPE1(_common):
194
194
 
195
195
  """ Create Standard USER DEFINED sections"""
196
196
 
@@ -275,7 +275,7 @@ class SS_COMP_STEEL_I_TYPE1(_common):
275
275
  except: e2 = 0
276
276
 
277
277
 
278
- return SS_COMP_STEEL_I_TYPE1(name,
278
+ return _SS_COMP_STEEL_I_TYPE1(name,
279
279
  slab[0],slab[1],slab[2],
280
280
  vS[0],vS[2],vS[3],vS[1],vS[4],vS[5],
281
281
  secti['MATL_ELAST'],secti['MATL_DENS'],secti['MATL_POIS_S'],secti['MATL_POIS_C'],secti['MATL_THERMAL'],
@@ -1,7 +1,7 @@
1
1
  from ._offsetSS import Offset
2
2
  from ._offsetSS import _common
3
3
 
4
- class SS_DBUSER(_common):
4
+ class _SS_DBUSER(_common):
5
5
 
6
6
  """ Create Standard USER DEFINED sections"""
7
7
 
@@ -40,4 +40,18 @@ class SS_DBUSER(_common):
40
40
 
41
41
  @staticmethod
42
42
  def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
43
- return SS_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],offset,uShear,u7DOF,id)
43
+ return _SS_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],offset,uShear,u7DOF,id)
44
+
45
+ def _centerLine(shape):
46
+ H = shape.PARAMS[0]
47
+ B = shape.PARAMS[1]
48
+ tw = shape.PARAMS[2]
49
+ tf = shape.PARAMS[3]
50
+
51
+ sect_lin_con = [[1,2],[3,1]]
52
+
53
+ sect_cg = [0,0]
54
+
55
+ sect_shape = [[0,0],[B,0],[0,-H]]
56
+ sect_thk = [tf,tw]
57
+ sect_thk_off = [-tf/2,-tw/2]
@@ -3,7 +3,7 @@ from ._offsetSS import _common
3
3
 
4
4
 
5
5
 
6
- class SS_PSC_12CELL(_common):
6
+ class _SS_PSC_12CELL(_common):
7
7
  def __init__(self,Name='',Shape='1CEL',Joint=[0,0,0,0,0,0,0,0],
8
8
  HO1=0,HO2=0,HO21=0,HO22=0,HO3=0,HO31=0,
9
9
  BO1=0,BO11=0,BO12=0,BO2=0,BO21=0,BO3=0,
@@ -107,7 +107,7 @@ class SS_PSC_12CELL(_common):
107
107
  vC = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
108
108
  vD = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
109
109
  joint = js['SECT_BEFORE']['JOINT']
110
- return SS_PSC_12CELL(name,shape,joint,
110
+ return _SS_PSC_12CELL(name,shape,joint,
111
111
  vA[0],vA[1],vA[2],vA[3],vA[4],vA[5],
112
112
  vB[0],vB[1],vB[2],vB[3],vB[4],vB[5],
113
113
  vC[0],vC[1],vC[2],vC[3],vC[4],vC[5],vC[6],vC[7],vC[8],vC[9],
@@ -122,7 +122,7 @@ class SS_PSC_12CELL(_common):
122
122
 
123
123
 
124
124
 
125
- class SS_PSC_I(_common):
125
+ class _SS_PSC_I(_common):
126
126
  def __init__(self,Name='',Symm = True,Joint=[0,0,0,0,0,0,0,0,0],
127
127
  H1=0,
128
128
  HL1=0,HL2=0,HL21=0,HL22=0,HL3=0,HL4=0,HL41=0,HL42=0,HL5=0,
@@ -261,7 +261,7 @@ class SS_PSC_I(_common):
261
261
  vC = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
262
262
  vD = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
263
263
  joint = js['SECT_BEFORE']['JOINT']
264
- return SS_PSC_I(name,symm,joint,
264
+ return _SS_PSC_I(name,symm,joint,
265
265
  vA[0],
266
266
  vA[1],vA[2],vA[3],vA[4],vA[5],vA[6],vA[7],vA[8],vA[9],
267
267
  vB[0],vB[1],vB[2],vB[3],vB[4],vB[5],vB[6],
@@ -300,7 +300,7 @@ def _poly_dir(poly,rot='CCW'):
300
300
 
301
301
 
302
302
 
303
- class SS_PSC_Value(_common):
303
+ class _SS_PSC_Value(_common):
304
304
  def __init__(self,Name:str,
305
305
  OuterPolygon:list,InnerPolygon:list=[],
306
306
  Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
@@ -422,4 +422,4 @@ class SS_PSC_Value(_common):
422
422
  h_pt.append([pt['X'],pt['Y']])
423
423
  inner_pt.append(h_pt)
424
424
 
425
- return SS_PSC_Value(name,outer_pt,inner_pt,offset,uShear,u7DOF,id)
425
+ return _SS_PSC_Value(name,outer_pt,inner_pt,offset,uShear,u7DOF,id)
@@ -0,0 +1,186 @@
1
+ from ._offsetSS import Offset
2
+ from ._offsetSS import _common
3
+
4
+
5
+
6
+ class _SS_TAP_PSC_1CELL(_common):
7
+ def __init__(self,Name='',Joint=[0,0,0,0,0,0,0,0],
8
+ HO1_I=0,HO2_I=0,HO21_I=0,HO22_I=0,HO3_I=0,HO31_I=0,
9
+ BO1_I=0,BO11_I=0,BO12_I=0,BO2_I=0,BO21_I=0,BO3_I=0,
10
+ HI1_I=0,HI2_I=0,HI21_I=0,HI22_I=0,HI3_I=0,HI31_I=0,HI4_I=0,HI41_I=0,HI42_I=0,HI5_I=0,
11
+ BI1_I=0,BI11_I=0,BI12_I=0,BI21_I=0,BI3_I=0,BI31_I=0,BI32_I=0,BI4_I=0,
12
+
13
+ HO1_J=0,HO2_J=0,HO21_J=0,HO22_J=0,HO3_J=0,HO31_J=0,
14
+ BO1_J=0,BO11_J=0,BO12_J=0,BO2_J=0,BO21_J=0,BO3_J=0,
15
+ HI1_J=0,HI2_J=0,HI21_J=0,HI22_J=0,HI3_J=0,HI31_J=0,HI4_J=0,HI41_J=0,HI42_J=0,HI5_J=0,
16
+ BI1_J=0,BI11_J=0,BI12_J=0,BI21_J=0,BI3_J=0,BI31_J=0,BI32_J=0,BI4_J=0,
17
+
18
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
19
+
20
+ self.ID = id
21
+ self.NAME = Name
22
+ self.SHAPE = '1CEL'
23
+ self.TYPE = 'TAPERED'
24
+
25
+ self.JO1=bool(Joint[0])
26
+ self.JO2=bool(Joint[1])
27
+ self.JO3=bool(Joint[2])
28
+ self.JI1=bool(Joint[3])
29
+ self.JI2=bool(Joint[4])
30
+ self.JI3=bool(Joint[5])
31
+ self.JI4=bool(Joint[6])
32
+ self.JI5=bool(Joint[7])
33
+
34
+ self.OFFSET = Offset
35
+ self.USESHEAR = bool(useShear)
36
+ self.USE7DOF = bool(use7Dof)
37
+
38
+ self.HO1_I = HO1_I
39
+ self.HO2_I = HO2_I
40
+ self.HO21_I = HO21_I
41
+ self.HO22_I= HO22_I
42
+ self.HO3_I = HO3_I
43
+ self.HO31_I = HO31_I
44
+
45
+ self.BO1_I = BO1_I
46
+ self.BO11_I = BO11_I
47
+ self.BO12_I = BO12_I
48
+ self.BO2_I = BO2_I
49
+ self.BO21_I = BO21_I
50
+ self.BO3_I = BO3_I
51
+
52
+ self.HI1_I = HI1_I
53
+ self.HI2_I = HI2_I
54
+ self.HI21_I = HI21_I
55
+ self.HI22_I = HI22_I
56
+ self.HI3_I = HI3_I
57
+ self.HI31_I = HI31_I
58
+ self.HI4_I = HI4_I
59
+ self.HI41_I = HI41_I
60
+ self.HI42_I = HI42_I
61
+ self.HI5_I = HI5_I
62
+
63
+ self.BI1_I = BI1_I
64
+ self.BI11_I = BI11_I
65
+ self.BI12_I = BI12_I
66
+ self.BI21_I = BI21_I
67
+ self.BI3_I = BI3_I
68
+ self.BI31_I = BI31_I
69
+ self.BI32_I = BI32_I
70
+ self.BI4_I = BI4_I
71
+
72
+
73
+
74
+
75
+ self.HO1_J = HO1_J
76
+ self.HO2_J = HO2_J
77
+ self.HO21_J = HO21_J
78
+ self.HO22_J= HO22_J
79
+ self.HO3_J = HO3_J
80
+ self.HO31_J = HO31_J
81
+
82
+ self.BO1_J = BO1_J
83
+ self.BO11_J = BO11_J
84
+ self.BO12_J = BO12_J
85
+ self.BO2_J = BO2_J
86
+ self.BO21_J = BO21_J
87
+ self.BO3_J = BO3_J
88
+
89
+ self.HI1_J = HI1_J
90
+ self.HI2_J = HI2_J
91
+ self.HI21_J = HI21_J
92
+ self.HI22_J = HI22_J
93
+ self.HI3_J = HI3_J
94
+ self.HI31_J = HI31_J
95
+ self.HI4_J = HI4_J
96
+ self.HI41_J = HI41_J
97
+ self.HI42_J = HI42_J
98
+ self.HI5_J = HI5_J
99
+
100
+ self.BI1_J = BI1_J
101
+ self.BI11_J = BI11_J
102
+ self.BI12_J = BI12_J
103
+ self.BI21_J = BI21_J
104
+ self.BI3_J = BI3_J
105
+ self.BI31_J = BI31_J
106
+ self.BI32_J = BI32_J
107
+ self.BI4_J = BI4_J
108
+
109
+
110
+ def __str__(self):
111
+ return f' > ID = {self.ID} | PSC 1-2 CELL SECTION \nJSON = {self.toJSON()}\n'
112
+
113
+
114
+ def toJSON(sect):
115
+ js = {
116
+ "SECTTYPE": "TAPERED",
117
+ "SECT_NAME": sect.NAME,
118
+ "SECT_BEFORE": {
119
+ "SHAPE": sect.SHAPE,
120
+ "TYPE" : 11,
121
+ "SECT_I": {
122
+ "vSIZE_PSC_A": [sect.HO1_I,sect.HO2_I,sect.HO21_I,sect.HO22_I,sect.HO3_I,sect.HO31_I],
123
+ "vSIZE_PSC_B": [sect.BO1_I,sect.BO11_I,sect.BO12_I,sect.BO2_I,sect.BO21_I,sect.BO3_I,],
124
+ "vSIZE_PSC_C": [sect.HI1_I,sect.HI2_I,sect.HI21_I,sect.HI22_I,sect.HI3_I,sect.HI31_I,sect.HI4_I,sect.HI41_I,sect.HI42_I,sect.HI5_I],
125
+ "vSIZE_PSC_D": [sect.BI1_I,sect.BI11_I,sect.BI12_I,sect.BI21_I,sect.BI3_I,sect.BI31_I,sect.BI32_I,sect.BI4_I],
126
+ "S_WIDTH" : sect.HO1_I
127
+ },
128
+ "SECT_J": {
129
+ "vSIZE_PSC_A": [sect.HO1_J,sect.HO2_J,sect.HO21_J,sect.HO22_J,sect.HO3_J,sect.HO31_J],
130
+ "vSIZE_PSC_B": [sect.BO1_J,sect.BO11_J,sect.BO12_J,sect.BO2_J,sect.BO21_J,sect.BO3_J,],
131
+ "vSIZE_PSC_C": [sect.HI1_J,sect.HI2_J,sect.HI21_J,sect.HI22_J,sect.HI3_J,sect.HI31_J,sect.HI4_J,sect.HI41_J,sect.HI42_J,sect.HI5_J],
132
+ "vSIZE_PSC_D": [sect.BI1_J,sect.BI11_J,sect.BI12_J,sect.BI21_J,sect.BI3_J,sect.BI31_J,sect.BI32_J,sect.BI4_J],
133
+ "S_WIDTH" : sect.HO1_J
134
+ },
135
+ "Y_VAR": 1,
136
+ "Z_VAR": 1,
137
+ "WARPING_CHK_AUTO_I": True,
138
+ "WARPING_CHK_AUTO_J": True,
139
+ "SHEAR_CHK": False,
140
+ "WARPING_CHK_POS_I": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
141
+ "WARPING_CHK_POS_J": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
142
+ "USE_WEB_THICK_SHEAR": [[True, True,True],[True,True,True]],
143
+ "WEB_THICK_SHEAR": [[0,0,0],[0,0,0]],
144
+ "USE_WEB_THICK": [True,True],
145
+ "WEB_THICK": [0,0],
146
+ "USE_SYMMETRIC": False,
147
+ "USE_SMALL_HOLE": False,
148
+ "USE_USER_DEF_MESHSIZE": False,
149
+ "USE_USER_INTPUT_STIFF": False,
150
+ "PSC_OPT1": "",
151
+ "PSC_OPT2": "",
152
+ "JOINT": [sect.JO1,sect.JO2,sect.JO3,sect.JI1,sect.JI2,sect.JI3,sect.JI4,sect.JI5]
153
+ }
154
+ }
155
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
156
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
157
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
158
+ return js
159
+
160
+
161
+ @staticmethod
162
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
163
+ #--- PSC 1,2 CELL -------------------
164
+ vA_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_A']
165
+ vB_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_B']
166
+ vC_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
167
+ vD_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
168
+
169
+ vA_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_A']
170
+ vB_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_B']
171
+ vC_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_C']
172
+ vD_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_D']
173
+
174
+ joint = js['SECT_BEFORE']['JOINT']
175
+ return _SS_TAP_PSC_1CELL(name,joint,
176
+ *vA_I,*vB_I,*vC_I,*vD_I,
177
+ *vA_J,*vB_J,*vC_J,*vD_J,
178
+ offset,uShear,u7DOF,id)
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
@@ -1,7 +1,7 @@
1
1
  from ._offsetSS import _common
2
2
 
3
3
 
4
- class SS_UNSUPP(_common):
4
+ class _SS_UNSUPP(_common):
5
5
 
6
6
  """ Store Unsupported section"""
7
7
 
@@ -29,7 +29,7 @@ class SS_UNSUPP(_common):
29
29
  js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
30
30
  return js
31
31
 
32
- class SS_STD_DB(_common):
32
+ class _SS_STD_DB(_common):
33
33
 
34
34
  """ Store Unsupported section"""
35
35
 
@@ -157,4 +157,3 @@ class Settlement:
157
157
  a['SMLC'][i]['ST_GROUPS'],
158
158
  int(i)
159
159
  )
160
-
@@ -641,4 +641,4 @@ class Temperature:
641
641
  def delete():
642
642
  """Delete Beam Section Temperatures from MIDAS Civil NX and Python"""
643
643
  Temperature.BeamSection.temps = []
644
- return MidasAPI("DELETE", "/db/btmp")
644
+ return MidasAPI("DELETE", "/db/btmp")
@@ -2,6 +2,7 @@
2
2
  from ._mapi import *
3
3
  from ._utils import *
4
4
  from ._load import *
5
+ from ._group import *
5
6
 
6
7
 
7
8
  def _JStoObj_Relax(js):
@@ -139,4 +139,3 @@ class Thickness(_common):
139
139
  _JS2Obj(sect_id,a['THIK'][sect_id])
140
140
 
141
141
 
142
-
@@ -1,5 +1,5 @@
1
- from ._model import *
2
- from ._mapi import *
1
+ # from ._model import *
2
+ # from ._mapi import *
3
3
 
4
4
  #Function to remove duplicate set of values from 2 lists
5
5
  # def unique_lists(li1, li2):
@@ -86,4 +86,4 @@ def zz_add_to_dict(dictionary, key, value):
86
86
  def _convItem2List(item):
87
87
  if isinstance(item,list):
88
88
  return item
89
- return [item]
89
+ return [item]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: midas_civil
3
- Version: 1.0.5
3
+ Version: 1.0.8
4
4
  Summary: Python library for MIDAS Civil NX
5
5
  Home-page: https://github.com/MIDASIT-Co-Ltd/midas-civil-python
6
6
  Author: Sumit Shekhar
@@ -2,6 +2,7 @@ LICENSE
2
2
  README.md
3
3
  setup.cfg
4
4
  setup.py
5
+ midas_civil/_BoundaryChangeAssignment.py
5
6
  midas_civil/__init__.py
6
7
  midas_civil/_analysiscontrol.py
7
8
  midas_civil/_boundary.py
@@ -29,9 +30,11 @@ midas_civil.egg-info/SOURCES.txt
29
30
  midas_civil.egg-info/dependency_links.txt
30
31
  midas_civil.egg-info/requires.txt
31
32
  midas_civil.egg-info/top_level.txt
33
+ midas_civil/_section/_TapdbSecSS.py
32
34
  midas_civil/_section/__init__.py
33
35
  midas_civil/_section/_compositeSS.py
34
36
  midas_civil/_section/_dbSecSS.py
35
37
  midas_civil/_section/_offsetSS.py
36
38
  midas_civil/_section/_pscSS.py
39
+ midas_civil/_section/_tapPSC1CellSS.py
37
40
  midas_civil/_section/_unSupp.py
@@ -5,7 +5,7 @@ with open('README.md','r') as f:
5
5
 
6
6
 
7
7
  setup(name='midas_civil',
8
- version='1.0.5',
8
+ version='1.0.8',
9
9
  description='Python library for MIDAS Civil NX',
10
10
  author='Sumit Shekhar',
11
11
  author_email='sumit.midasit@gmail.com',
File without changes
File without changes
File without changes