midas-civil 0.0.1__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.

@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) [2025] [MIDAS India]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,54 @@
1
+ Metadata-Version: 2.4
2
+ Name: midas_civil
3
+ Version: 0.0.1
4
+ Summary: Python library for MIDAS Civil NX
5
+ Author: Sumit Shekhar
6
+ Author-email: sumit.midasit@gmail.com
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Dynamic: author
10
+ Dynamic: author-email
11
+ Dynamic: description
12
+ Dynamic: description-content-type
13
+ Dynamic: license-file
14
+ Dynamic: summary
15
+
16
+ # MIDAS CIVIL NX Python
17
+
18
+
19
+ **`midas-civil`** is a Python library that provides an interface to interact with MIDAS Civil NX using Python scripts.
20
+ This library allows engineers and developers to automate tasks, extract structural analysis results, manipulate model data, and integrate MIDAS Civil NX with other tools or pipelines using Python.
21
+
22
+ ---
23
+
24
+ ## Features
25
+
26
+ * **Model Interaction**: Create, modify, and query elements, nodes, materials, sections, and boundary conditions.
27
+
28
+ * **Automation**: Run simulations and extract results automatically using Python scripts.
29
+
30
+ * **Data Extraction**: Access analysis results including forces, displacements, reactions, stresses, etc.
31
+
32
+ * **Integration**: Seamlessly connect MIDAS Civil NX with data analysis tools like pandas, NumPy, and visualization tools like matplotlib.
33
+
34
+
35
+ ## Installation
36
+ You can install the library using pip:
37
+
38
+ ```py
39
+ pip install midas-civil
40
+ ```
41
+
42
+
43
+ **Requirements:**
44
+ * Python 3+
45
+ * MIDAS Civil NX
46
+
47
+
48
+ ## Documentation
49
+ Python Documentation: [midas python](https://sumit-shekhar.github.io/midasapi-python/)
50
+ API Reference: [Manual](https://support.midasuser.com/hc/en-us/articles/33016922742937-MIDAS-API-Online-Manual)
51
+
52
+
53
+ ## License
54
+ This project is licensed under the MIT License.
@@ -0,0 +1,39 @@
1
+ # MIDAS CIVIL NX Python
2
+
3
+
4
+ **`midas-civil`** is a Python library that provides an interface to interact with MIDAS Civil NX using Python scripts.
5
+ This library allows engineers and developers to automate tasks, extract structural analysis results, manipulate model data, and integrate MIDAS Civil NX with other tools or pipelines using Python.
6
+
7
+ ---
8
+
9
+ ## Features
10
+
11
+ * **Model Interaction**: Create, modify, and query elements, nodes, materials, sections, and boundary conditions.
12
+
13
+ * **Automation**: Run simulations and extract results automatically using Python scripts.
14
+
15
+ * **Data Extraction**: Access analysis results including forces, displacements, reactions, stresses, etc.
16
+
17
+ * **Integration**: Seamlessly connect MIDAS Civil NX with data analysis tools like pandas, NumPy, and visualization tools like matplotlib.
18
+
19
+
20
+ ## Installation
21
+ You can install the library using pip:
22
+
23
+ ```py
24
+ pip install midas-civil
25
+ ```
26
+
27
+
28
+ **Requirements:**
29
+ * Python 3+
30
+ * MIDAS Civil NX
31
+
32
+
33
+ ## Documentation
34
+ Python Documentation: [midas python](https://sumit-shekhar.github.io/midasapi-python/)
35
+ API Reference: [Manual](https://support.midasuser.com/hc/en-us/articles/33016922742937-MIDAS-API-Online-Manual)
36
+
37
+
38
+ ## License
39
+ This project is licensed under the MIT License.
@@ -0,0 +1,24 @@
1
+ from ._mapi import *
2
+ from ._model import *
3
+ from ._boundary import *
4
+ # from .section import *
5
+ from ._utils import *
6
+ from ._node import *
7
+ from ._element import *
8
+ from ._load import *
9
+ from ._group import *
10
+ from ._result_extract import *
11
+
12
+ #--- TESTING IMPORTS ---
13
+ from ._material import *
14
+ from ._section import *
15
+ # from .element_new import *
16
+
17
+ from ._result_extract import *
18
+ from ._construction import *
19
+ from ._thickness import *
20
+
21
+ print('')
22
+ print('*'*20,' MIDAS CIVIL-NX PYTHON LIBRARY 🐍 ','*'*20)
23
+ print('')
24
+
@@ -0,0 +1,504 @@
1
+ from ._mapi import *
2
+ from ._model import *
3
+ from ._node import *
4
+ from ._group import *
5
+
6
+ def convList(item):
7
+ if type(item)!=list:
8
+ return [item]
9
+ else:
10
+ return item
11
+
12
+
13
+ class Boundary:
14
+
15
+ @classmethod
16
+ def create(cls):
17
+ """Creates Boundary elements in MIDAS Civil NX"""
18
+ if cls.Support.sups!=[]: cls.Support.create()
19
+ if cls.ElasticLink.links!=[]: cls.ElasticLink.create()
20
+ if cls.RigidLink.links!=[]: cls.RigidLink.create()
21
+
22
+
23
+ @classmethod
24
+ def delete(cls):
25
+ """Delets Boundary elements from MIDAS Civil NX and Python"""
26
+ cls.Support.delete()
27
+ cls.ElasticLink.delete()
28
+ cls.RigidLink.delete()
29
+
30
+ @classmethod
31
+ def sync(cls):
32
+ """Sync Boundary elements from MIDAS Civil NX to Python"""
33
+ cls.Support.sync()
34
+ cls.ElasticLink.sync()
35
+ cls.RigidLink.sync()
36
+
37
+
38
+
39
+
40
+ class Support:
41
+ """Create Support Object in Python \n\nNode ID, Constraint, Boundary Group. Sample: Support(3, "1110000") or Support(3, "pin"). \nValid inputs for DOF are 1s and 0s or "pin", "fix", "free" (no capital letters).
42
+ \nIf more than 7 characters are entered, then only first 7 characters will be considered to define constraint."""
43
+ sups = []
44
+ def __init__(self, node, constraint, group = ""):
45
+ if not isinstance(constraint, str): constraint = str(constraint)
46
+ if constraint == "pin": constraint = "111"
47
+ if constraint == "fix": constraint = "1111111"
48
+ if constraint == "roller": constraint = "001"
49
+ if len(constraint) < 7: constraint = constraint + '0' * (7-len(constraint))
50
+ if len(constraint) > 7: constraint = constraint[:7]
51
+ string = ''.join(['1' if char != '0' else '0' for char in constraint])
52
+
53
+
54
+
55
+ self.NODE = node
56
+ self.CONST = string
57
+ self.GROUP = group
58
+ self.ID = len(Boundary.Support.sups) + 1
59
+ Boundary.Support.sups.append(self)
60
+
61
+ @classmethod
62
+ def json(cls):
63
+ """Creates JSON from Supports objects defined in Python"""
64
+ json = {"Assign":{}}
65
+ ng = []
66
+ for i in Boundary.Support.sups:
67
+ if i.NODE in Node.ids:
68
+ json["Assign"][i.NODE] = {"ITEMS":
69
+ [{"ID": i.ID,
70
+ "CONSTRAINT":i.CONST,
71
+ "GROUP_NAME": i.GROUP}]
72
+ }
73
+ if i.NODE not in Node.ids: ng.append(i.NODE)
74
+ if len(ng) > 0: print("These nodes are not defined: ", ng)
75
+ return json
76
+
77
+ @staticmethod
78
+ def create():
79
+ """Creates Supports in MIDAS Civil NX"""
80
+ MidasAPI("PUT","/db/cons",Boundary.Support.json())
81
+
82
+ @staticmethod
83
+ def get():
84
+ """Get the JSON of Supports from MIDAS Civil NX"""
85
+ return MidasAPI("GET","/db/cons")
86
+
87
+ @staticmethod
88
+ def sync():
89
+ """Sync Supports from MIDAS Civil NX to Python"""
90
+ a = Boundary.Support.get()
91
+ if a != {'message': ''}:
92
+ if list(a['CONS'].keys()) != []:
93
+ Boundary.Support.sups = []
94
+ for j in a['CONS'].keys():
95
+ Boundary.Support(int(j),a['CONS'][j]['ITEMS'][0]['CONSTRAINT'])
96
+
97
+ @staticmethod
98
+ def delete():
99
+ """Delete Supports from MIDAS Civil NX and Python"""
100
+ Boundary.Support.sups=[]
101
+ return MidasAPI("DELETE","/db/cons")
102
+
103
+
104
+
105
+
106
+ #---------------------------------------------------------------------------------------------------------------
107
+ #Class to define Elastic Links:
108
+ class ElasticLink:
109
+
110
+ # list to store all link instances
111
+ links = []
112
+
113
+ def __init__(self,
114
+ i_node: int,
115
+ j_node: int,
116
+ group: str = "",
117
+ id: int = None,
118
+ link_type: str = "GEN",
119
+ sdx: float = 0,
120
+ sdy: float = 0,
121
+ sdz: float = 0,
122
+ srx: float = 0,
123
+ sry: float = 0,
124
+ srz: float = 0,
125
+ shear: bool = False,
126
+ dr_y: float = 0.5,
127
+ dr_z: float = 0.5,
128
+ beta_angle: float = 0,
129
+ dir: str = "Dy",
130
+ func_id: int = 1,
131
+ distance_ratio: float = 0):
132
+ """
133
+ Elastic link.
134
+ Parameters:
135
+ i_node: The first node ID
136
+ j_node: The second node ID
137
+ group: The group name (default "")
138
+ id: The link ID (optional)
139
+ link_type: Type of link (GEN, RIGID, TENS, COMP, MULTI LINEAR, SADDLE, RAIL INTERACT) (default "GEN")
140
+ sdx: Spring stiffness in X direction (default 0)
141
+ sdy: Spring stiffness in Y direction (default 0)
142
+ sdz: Spring stiffness in Z direction (default 0)
143
+ srx: Rotational stiffness around X axis (default 0)
144
+ sry: Rotational stiffness around Y axis (default 0)
145
+ srz: Rotational stiffness around Z axis (default 0)
146
+ shear: Consider shear effects (default False)
147
+ dr_y: Distance ratio for Y direction (default 0.5)
148
+ dr_z: Distance ratio for Z direction (default 0.5)
149
+ beta_angle: Rotation angle in degrees (default 0)
150
+ dir: Direction for MULTI LINEAR or RAIL INTERACT links (default "Dy")
151
+ func_id: Function ID for MULTI LINEAR or RAIL INTERACT links (default 1)
152
+ distance_ratio: Distance ratio for MULTI LINEAR or RAIL INTERACT links (default 0)
153
+
154
+ Examples:
155
+ ```python
156
+ # General link with all stiffness parameters
157
+ ElasticLink(1, 2, "Group1", 1, "GEN", 1000, 1000, 1000, 100, 100, 100)
158
+ # Rigid link
159
+ ElasticLink(3, 4, "Group2", 2, "RIGID")
160
+ # Tension-only link
161
+ ElasticLink(5, 6, "Group3", 3, "TENS", 500)
162
+ # Compression-only link
163
+ ElasticLink(7, 8, "Group4", 4, "COMP", 500)
164
+ # Rail Track Type link
165
+ ElasticLink(9, 10, "Group5", 5, "RAIL INTERACT", dir="Dy", func_id=1)
166
+ # Multi Linear Link
167
+ ElasticLink(11, 12, "Group6", 6, "MULTI LINEAR", dir="Dy", func_id=1)
168
+ # Saddle type link
169
+ ElasticLink(13, 14, "Group7", 7, "SADDLE")
170
+ ```
171
+ """
172
+ # Check if group exists, create if not
173
+ if group != "":
174
+ chk = 0
175
+ a = [v['NAME'] for v in Group.Boundary.json()["Assign"].values()]
176
+ if group in a:
177
+ chk = 1
178
+ if chk == 0:
179
+ Group.Boundary(group)
180
+
181
+ # Validate link type
182
+ valid_types = ["GEN", "RIGID", "TENS", "COMP", "MULTI LINEAR", "SADDLE", "RAIL INTERACT"]
183
+ if link_type not in valid_types:
184
+ link_type = "GEN"
185
+
186
+ # Validate direction for MULTI LINEAR
187
+ if link_type == "MULTI LINEAR":
188
+ valid_directions = ["Dx", "Dy", "Dz", "Rx", "Ry", "Rz"]
189
+ if dir not in valid_directions:
190
+ dir = "Dy"
191
+
192
+ # Validate direction for RAIL INTERACT
193
+ if link_type == "RAIL INTERACT":
194
+ valid_directions = ["Dy", "Dz"]
195
+ if dir not in valid_directions:
196
+ dir = "Dy"
197
+
198
+ self.I_NODE = i_node
199
+ self.J_NODE = j_node
200
+ self.GROUP_NAME = group
201
+ self.LINK_TYPE = link_type
202
+ self.ANGLE = beta_angle
203
+
204
+ # Parameters for all link types
205
+ self.SDx = sdx
206
+ self.SDy = sdy
207
+ self.SDz = sdz
208
+ self.SRx = srx
209
+ self.SRy = sry
210
+ self.SRz = srz
211
+ self.bSHEAR = shear
212
+ self.DR_Y = dr_y
213
+ self.DR_Z = dr_z
214
+
215
+ # Parameters for MULTI LINEAR and RAIL INTERACT
216
+ self.Direction = dir
217
+ self.Function_ID = func_id
218
+ self.Distance_ratio = distance_ratio
219
+
220
+ # Auto-assign ID if not provided
221
+ if id is None:
222
+ self.ID = len(Boundary.ElasticLink.links) + 1
223
+ else:
224
+ self.ID = id
225
+
226
+ # Add to static list
227
+ Boundary.ElasticLink.links.append(self)
228
+
229
+ @classmethod
230
+ def json(cls):
231
+ """
232
+ Converts ElasticLink data to JSON format for API submission.
233
+ Example:
234
+ # Get the JSON data for all links
235
+ json_data = ElasticLink.json()
236
+ print(json_data)
237
+ """
238
+ data = {}
239
+
240
+ for link in cls.links:
241
+ link_data = {
242
+ "NODE": [link.I_NODE, link.J_NODE],
243
+ "LINK": link.LINK_TYPE,
244
+ "ANGLE": link.ANGLE,
245
+ "BNGR_NAME": link.GROUP_NAME
246
+ }
247
+
248
+ # Add type-specific parameters
249
+ if link.LINK_TYPE == "GEN":
250
+ link_data["R_S"] = [False] * 6
251
+ link_data["SDR"] = [
252
+ link.SDx,
253
+ link.SDy,
254
+ link.SDz,
255
+ link.SRx,
256
+ link.SRy,
257
+ link.SRz
258
+ ]
259
+ link_data["bSHEAR"] = link.bSHEAR
260
+ if link.bSHEAR:
261
+ link_data["DR"] = [link.DR_Y, link.DR_Z]
262
+ else:
263
+ link_data["DR"] = [0.5, 0.5]
264
+
265
+ elif link.LINK_TYPE in ["TENS", "COMP"]:
266
+ link_data["SDR"] = [link.SDx, 0, 0, 0, 0, 0]
267
+ link_data["bSHEAR"] = link.bSHEAR
268
+ if link.bSHEAR:
269
+ link_data["DR"] = [link.DR_Y, link.DR_Z]
270
+ else:
271
+ link_data["DR"] = [0.5, 0.5]
272
+
273
+ elif link.LINK_TYPE == "MULTI LINEAR":
274
+ direction_mapping = {
275
+ "Dx": 0, "Dy": 1, "Dz": 2, "Rx": 3, "Ry": 4, "Rz": 5
276
+ }
277
+ link_data["DIR"] = direction_mapping.get(link.Direction, 0)
278
+ link_data["MLFC"] = link.Function_ID
279
+ link_data["DRENDI"] = link.Distance_ratio
280
+
281
+ elif link.LINK_TYPE == "RAIL INTERACT":
282
+ direction_mapping = {"Dy": 1, "Dz": 2}
283
+ link_data["DIR"] = direction_mapping.get(link.Direction, 0)
284
+ link_data["RLFC"] = link.Function_ID
285
+ link_data["bSHEAR"] = link.bSHEAR
286
+ if link.bSHEAR:
287
+ link_data["DEENDI"] = link.Distance_ratio
288
+ else:
289
+ link_data["DR"] = [0.5, 0.5]
290
+
291
+ data[link.ID] = link_data
292
+
293
+ return {"Assign": data}
294
+
295
+ @classmethod
296
+ def create(cls):
297
+ """
298
+ Sends all ElasticLink data to Midas API.
299
+ Example:
300
+ ElasticLink(1, 2, "Group1", 1, "GEN", 1000, 1000, 1000, 100, 100, 100)
301
+ # Send to the API
302
+ ElasticLink.create()
303
+ """
304
+ MidasAPI("PUT", "/db/elnk", cls.json())
305
+
306
+ @classmethod
307
+ def get(cls):
308
+ """
309
+ Retrieves ElasticLink data from Midas API.
310
+ Example:
311
+ api_data = ElasticLink.get()
312
+ print(api_data)
313
+ """
314
+ return MidasAPI("GET", "/db/elnk")
315
+
316
+ @classmethod
317
+ def sync(cls):
318
+ """
319
+ Updates the ElasticLink class with data from the Midas API.
320
+ Example:
321
+ ElasticLink.sync()
322
+ """
323
+ cls.links = []
324
+ a = cls.get()
325
+
326
+ if a != {'message': ''}:
327
+ for link_id, link_data in a.get("ELNK", {}).items():
328
+ sdx = sdy = sdz = srx = sry = srz = 0
329
+ shear = False
330
+ dr_y = dr_z = 0.5
331
+ direction = "Dy"
332
+ func_id = 1
333
+ distance_ratio = 0
334
+
335
+ if link_data["LINK"] == "GEN" and "SDR" in link_data:
336
+ sdx, sdy, sdz, srx, sry, srz = link_data["SDR"]
337
+ shear = link_data.get("bSHEAR")
338
+ if shear and "DR" in link_data:
339
+ dr_y, dr_z = link_data["DR"]
340
+
341
+ elif link_data["LINK"] in ["TENS", "COMP"] and "SDR" in link_data:
342
+ sdx = link_data["SDR"][0]
343
+ shear = link_data.get("bSHEAR")
344
+ if shear and "DR" in link_data:
345
+ dr_y, dr_z = link_data["DR"]
346
+
347
+ elif link_data["LINK"] == "MULTI LINEAR":
348
+ dir_mapping = {0: "Dx", 1: "Dy", 2: "Dz", 3: "Rx", 4: "Ry", 5: "Rz"}
349
+ direction = dir_mapping.get(link_data.get("DIR"), "Dy")
350
+ func_id = link_data.get("MLFC")
351
+ distance_ratio = link_data.get("DRENDI")
352
+
353
+ elif link_data["LINK"] == "RAIL INTERACT":
354
+ dir_mapping = {1: "Dy", 2: "Dz"}
355
+ direction = dir_mapping.get(link_data.get("DIR"), "Dy")
356
+ func_id = link_data.get("RLFC")
357
+ shear = link_data.get("bSHEAR")
358
+ if shear and "DEENDI" in link_data:
359
+ distance_ratio = link_data["DEENDI"]
360
+
361
+ Boundary.ElasticLink(
362
+ link_data["NODE"][0],
363
+ link_data["NODE"][1],
364
+ link_data.get("BNGR_NAME"),
365
+ int(link_id),
366
+ link_data["LINK"],
367
+ sdx, sdy, sdz, srx, sry, srz,
368
+ shear, dr_y, dr_z,
369
+ link_data.get("ANGLE"),
370
+ direction, func_id, distance_ratio
371
+ )
372
+
373
+ @classmethod
374
+ def delete(cls):
375
+ """
376
+ Deletes all elastic links from the database and resets the class.
377
+ Example:sss
378
+ ElasticLink.delete()
379
+ """
380
+ cls.links = []
381
+ return MidasAPI("DELETE", "/db/elnk")
382
+ #---------------------------------------------------------------------------------------------------------------
383
+
384
+
385
+ #Class to define Rigid Links:
386
+ class RigidLink:
387
+
388
+ links = []
389
+
390
+ def __init__(self,
391
+ master_node: int,
392
+ slave_nodes: list,
393
+ group: str = "",
394
+ id: int = None,
395
+ dof: int = 111111,):
396
+ """
397
+ Rigid link.
398
+ Parameters:
399
+ master_node: The first node ID
400
+ slave_nodes: The second node ID
401
+ group: The group name (default "")
402
+ id: The link ID (optional)
403
+ dof: Fixity of link (default 111111)
404
+
405
+ Examples:
406
+ ```python
407
+ # General link with all stiffness parameters
408
+ RigidLink(1, [2,3], "Group1", 1, 111000)
409
+ ```
410
+ """
411
+
412
+ # Check if group exists, create if not
413
+ if group != "":
414
+ chk = 0
415
+ a = [v['NAME'] for v in Group.Boundary.json()["Assign"].values()]
416
+ if group in a:
417
+ chk = 1
418
+ if chk == 0:
419
+ Group.Boundary(group)
420
+
421
+
422
+ self.M_NODE = master_node
423
+ self.S_NODE = convList(slave_nodes)
424
+ self.GROUP_NAME = group
425
+ self.DOF = dof
426
+
427
+ # Auto-assign ID if not provided
428
+ if id is None:
429
+ self.ID = len(Boundary.RigidLink.links) + 1
430
+ else:
431
+ self.ID = id
432
+
433
+ # Add to static list
434
+ Boundary.RigidLink.links.append(self)
435
+
436
+
437
+ @classmethod
438
+ def json(cls):
439
+ """
440
+ Converts RigidLink data to JSON format for API submission.
441
+ Example:
442
+ # Get the JSON data for all links
443
+ json_data = RigidLink.json()
444
+ print(json_data)
445
+ """
446
+ json = {"Assign": {}}
447
+ for link in cls.links:
448
+ if link.M_NODE not in list(json["Assign"].keys()):
449
+ json["Assign"][link.M_NODE] = {"ITEMS": []}
450
+
451
+ json["Assign"][link.M_NODE]["ITEMS"].append({
452
+ "ID": link.ID,
453
+ "GROUP_NAME": link.GROUP_NAME,
454
+ "DOF": link.DOF,
455
+ "S_NODE": convList(link.S_NODE),
456
+ })
457
+ return json
458
+
459
+ @classmethod
460
+ def create(cls):
461
+ """
462
+ Sends all RigidLink data to Midas API.
463
+ Example:
464
+ RigidLink(1, 2, "Group1", 1, "GEN", 1000, 1000, 1000, 100, 100, 100)
465
+ # Send to the API
466
+ RigidLink.create()
467
+ """
468
+ MidasAPI("PUT", "/db/RIGD", cls.json())
469
+
470
+ @classmethod
471
+ def get(cls):
472
+ """
473
+ Retrieves Rigid Link data from Midas API.
474
+ Example:
475
+ api_data = RigidLink.get()
476
+ print(api_data)
477
+ """
478
+ return MidasAPI("GET", "/db/RIGD")
479
+
480
+ @classmethod
481
+ def sync(cls):
482
+ """
483
+ Updates the RigidLink class with data from the Midas API.
484
+ Example:
485
+ RigidLink.sync()
486
+ """
487
+ cls.links = []
488
+ a = cls.get()
489
+ if a != {'message': ''}:
490
+ for i in a['RIGD'].keys():
491
+ for j in range(len(a['RIGD'][i]['ITEMS'])):
492
+ itm = a['RIGD'][i]['ITEMS'][j]
493
+ Boundary.RigidLink(int(i),itm['S_NODE'],itm['GROUP_NAME'],itm['ID'],itm['DOF'])
494
+
495
+ @classmethod
496
+ def delete(cls):
497
+ """
498
+ Deletes all rigid links from the database and resets the class.
499
+ Example:
500
+ ElasticLink.delete()
501
+ """
502
+ cls.links = []
503
+ return MidasAPI("DELETE", "/db/RIGD")
504
+ #---------------------------------------------------------------------------------------------------------------