midas-civil 1.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. midas_civil/_BoundaryChangeAssignment.py +278 -0
  2. midas_civil/__init__.py +51 -0
  3. midas_civil/_analysiscontrol.py +585 -0
  4. midas_civil/_boundary.py +888 -0
  5. midas_civil/_construction.py +1004 -0
  6. midas_civil/_element.py +1346 -0
  7. midas_civil/_group.py +337 -0
  8. midas_civil/_load.py +967 -0
  9. midas_civil/_loadcomb.py +159 -0
  10. midas_civil/_mapi.py +249 -0
  11. midas_civil/_material.py +1692 -0
  12. midas_civil/_model.py +522 -0
  13. midas_civil/_movingload.py +1479 -0
  14. midas_civil/_node.py +532 -0
  15. midas_civil/_result_table.py +929 -0
  16. midas_civil/_result_test.py +5455 -0
  17. midas_civil/_section/_TapdbSecSS.py +175 -0
  18. midas_civil/_section/__init__.py +413 -0
  19. midas_civil/_section/_compositeSS.py +283 -0
  20. midas_civil/_section/_dbSecSS.py +164 -0
  21. midas_civil/_section/_offsetSS.py +53 -0
  22. midas_civil/_section/_pscSS copy.py +455 -0
  23. midas_civil/_section/_pscSS.py +822 -0
  24. midas_civil/_section/_tapPSC12CellSS.py +565 -0
  25. midas_civil/_section/_unSupp.py +58 -0
  26. midas_civil/_settlement.py +161 -0
  27. midas_civil/_temperature.py +677 -0
  28. midas_civil/_tendon.py +1016 -0
  29. midas_civil/_thickness.py +147 -0
  30. midas_civil/_utils.py +529 -0
  31. midas_civil/_utilsFunc/__init__.py +0 -0
  32. midas_civil/_utilsFunc/_line2plate.py +636 -0
  33. midas_civil/_view.py +891 -0
  34. midas_civil/_view_trial.py +430 -0
  35. midas_civil/_visualise.py +347 -0
  36. midas_civil-1.4.1.dist-info/METADATA +74 -0
  37. midas_civil-1.4.1.dist-info/RECORD +40 -0
  38. midas_civil-1.4.1.dist-info/WHEEL +5 -0
  39. midas_civil-1.4.1.dist-info/licenses/LICENSE +21 -0
  40. midas_civil-1.4.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,347 @@
1
+ import pyvista as pv
2
+ from midas_civil import Node,Element,Group
3
+ import numpy as np
4
+
5
+ class Visual:
6
+ n_snap = 0 # Goes from 1 to snaps taken
7
+ cur_snap = 0
8
+ visual_info = {}
9
+ plotter = pv.Plotter(window_size=[700,400],title="Sumit's Visualiser TEST")
10
+
11
+ # plotter.camera.clipping_range = (0.000001, 1e6)
12
+ plotter.set_background("white")
13
+ plotter.enable_parallel_projection()
14
+ plotter.show_axes()
15
+ # plotter.ren_win.SetBorders(0)
16
+ plotter.ren_win.SetPosition(600,100)
17
+
18
+ first_launch = True
19
+
20
+ min_z = 0
21
+ min_x = 0
22
+ max_x = 0
23
+ min_y = 0
24
+ max_y = 0
25
+
26
+
27
+ toggle_NodeIDs = True
28
+ toggle_Beam = True
29
+ toggle_Plate = True
30
+ toggle_GroupNodeIDs = False
31
+ toggle_Grid = False
32
+
33
+ def take_snapshot():
34
+ Visual.n_snap+=1
35
+ Visual.cur_snap+=1
36
+
37
+ points = []
38
+ point_ids = []
39
+
40
+ for nd in Node.nodes:
41
+ points.append([nd.X,nd.Y,nd.Z])
42
+ point_ids.append(nd.ID)
43
+
44
+ point_Group_ids = ["." for _ in point_ids]
45
+
46
+ for grup in Group.Structure.Groups:
47
+ if grup.NLIST !=[]:
48
+ idx = 0
49
+ for nID in grup.NLIST:
50
+ n_idx = point_ids.index(nID)
51
+ point_Group_ids[n_idx] = str(idx)
52
+ idx+=1
53
+
54
+
55
+
56
+ lines_point_pair =[]
57
+ lines_id_map = []
58
+ Qplates_point_pair = []
59
+ Qplates_id_map =[]
60
+ Tplates_point_pair = []
61
+ Tplates_id_map = []
62
+
63
+
64
+ for elm in Element.elements:
65
+ if elm.TYPE in ['BEAM','TRUSS']:
66
+ n1 = point_ids.index(elm.NODE[0])
67
+ n2 = point_ids.index(elm.NODE[1])
68
+ lines_point_pair.append([2,n1,n2])
69
+ lines_id_map.append(elm.ID)
70
+
71
+ elif elm.TYPE == 'PLATE':
72
+ n1 = point_ids.index(elm.NODE[0])
73
+ n2 = point_ids.index(elm.NODE[1])
74
+ n3 = point_ids.index(elm.NODE[2])
75
+ if elm._NPOINT == 3 :
76
+ Tplates_point_pair.append([3,n1,n2,n3])
77
+ Tplates_id_map.append(elm.ID)
78
+ elif elm._NPOINT == 4 :
79
+ # print("4 noded element")
80
+ n4 = point_ids.index(elm.NODE[3])
81
+ Qplates_point_pair.append([4,n1,n2,n3,n4])
82
+ Qplates_id_map.append(elm.ID)
83
+
84
+ Visual.visual_info[str(Visual.n_snap)] = {
85
+ "POINTS" : points,
86
+ "POINT_IDS" : point_ids,
87
+ "POINT_GROUP_IDS" : point_Group_ids,
88
+ "LINE_POINTS" : lines_point_pair,
89
+ "LINE_IDS" : lines_id_map,
90
+ "TRI_POINTS" : Tplates_point_pair,
91
+ "TRI_IDS" : Tplates_id_map,
92
+ "QUAD_POINTS" : Qplates_point_pair,
93
+ "QUAD_IDS" : Qplates_id_map
94
+ }
95
+
96
+ # print("TAKING SNAP SHOT ................")
97
+ # print(Visual.n_snap)
98
+ # print(len(points))
99
+ # print(len(Qplates_id_map))
100
+ # print("---------- D O N E -------------")
101
+
102
+ def changeDataBack(checked):
103
+ # print("DATA Change....")
104
+ Visual.cur_snap = max(Visual.cur_snap-1,1)
105
+ # print(Visual.cur_snap)
106
+ displayWindow()
107
+
108
+ def changeDataForw(checked):
109
+ # print("DATA Change....")
110
+ Visual.cur_snap = min(Visual.cur_snap+1,Visual.n_snap)
111
+ # print(Visual.cur_snap)
112
+ displayWindow()
113
+
114
+ def displayWindow():
115
+ if Visual.first_launch == True:
116
+ take_snapshot()
117
+ dPlotter = showVisual(Visual.plotter)
118
+ Visual.first_launch = False
119
+
120
+ dPlotter.view_xy()
121
+ dPlotter.show()
122
+ else:
123
+ Visual.plotter.clear_actors()
124
+ dPlotter = showVisual(Visual.plotter)
125
+ dPlotter.render()
126
+
127
+
128
+ def showVisual(plotter):
129
+
130
+ if Visual.first_launch:
131
+ min_z = 0
132
+ min_x = 0
133
+ max_x = 0
134
+ min_y = 0
135
+ max_y = 0
136
+ for nd in Node.nodes:
137
+ min_z = min(min_z,nd.Z)
138
+ min_x = min(min_x,nd.X)
139
+ max_x = max(max_x,nd.X)
140
+ min_y = min(min_y,nd.Y)
141
+ max_y = max(max_y,nd.Y)
142
+ min_z = int(min_z)
143
+ min_x = int(min_x)
144
+ max_x = int(max_x)
145
+ min_y = int(min_y)
146
+ max_y = int(max_y)
147
+
148
+ Visual.min_x = min_x
149
+ Visual.max_x = max_x
150
+ Visual.min_y = min_y
151
+ Visual.max_y = max_y
152
+ Visual.min_z = min_z
153
+ else :
154
+ min_x = Visual.min_x
155
+ max_x = Visual.max_x
156
+ min_y = Visual.min_y
157
+ max_y = Visual.max_y
158
+ min_z = Visual.min_z
159
+
160
+
161
+ points = Visual.visual_info[str(Visual.cur_snap)]["POINTS"]
162
+ point_ids = Visual.visual_info[str(Visual.cur_snap)]["POINT_IDS"]
163
+ point_Group_ids = Visual.visual_info[str(Visual.cur_snap)]["POINT_GROUP_IDS"]
164
+
165
+ lines_point_pair =Visual.visual_info[str(Visual.cur_snap)]["LINE_POINTS"]
166
+ lines_id_map = Visual.visual_info[str(Visual.cur_snap)]["LINE_IDS"]
167
+
168
+ Tplates_point_pair = Visual.visual_info[str(Visual.cur_snap)]["TRI_POINTS"]
169
+ Tplates_id_map = Visual.visual_info[str(Visual.cur_snap)]["TRI_IDS"]
170
+
171
+ Qplates_point_pair = Visual.visual_info[str(Visual.cur_snap)]["QUAD_POINTS"]
172
+ Qplates_id_map =Visual.visual_info[str(Visual.cur_snap)]["QUAD_IDS"]
173
+
174
+
175
+
176
+ if lines_point_pair!=[] and Visual.toggle_Beam:
177
+ msh = pv.PolyData(points , lines=lines_point_pair)
178
+ msh.cell_data["ids"] = lines_id_map
179
+ plotter.add_mesh(msh, scalars="ids", cmap="plasma", line_width=4,show_edges=False,opacity=0.95,show_scalar_bar=False,name="Lines")
180
+
181
+ if Qplates_point_pair!=[] and Visual.toggle_Plate:
182
+ Qmesh = pv.PolyData(points, Qplates_point_pair)
183
+ Qmesh.cell_data["ids"] = Qplates_id_map
184
+ plotter.add_mesh(Qmesh, scalars="ids", cmap="rainbow", show_edges=True,opacity=0.8,edge_opacity=0.3,show_scalar_bar=False,name="QPlates")
185
+
186
+ if Tplates_point_pair!=[] and Visual.toggle_Plate:
187
+ Tmesh = pv.PolyData(points, Tplates_point_pair)
188
+ Tmesh.cell_data["ids"] = Tplates_id_map
189
+ plotter.add_mesh(Tmesh, scalars="ids", cmap="rainbow", show_edges=True,opacity=0.8,edge_opacity=0.3,show_scalar_bar=False,name="TPlates")
190
+
191
+
192
+
193
+
194
+
195
+
196
+ # SHOW NODE ID ---------------------------------------------------------------------------------------
197
+ if Visual.toggle_NodeIDs and points!=[]:
198
+ plotter.add_point_labels(points, point_ids,
199
+ always_visible=True,shape=None,show_points=True,
200
+ fill_shape=False,
201
+ point_size=10,point_color="red",
202
+ font_size=15, name="LABEL_ID"
203
+ )
204
+
205
+
206
+ #----------------------------------------------------------------------------------------------------
207
+
208
+ #GROUP NODE ID ------------------------------------------------------------------------------------
209
+ if Visual.toggle_GroupNodeIDs and points!=[]:
210
+ plotter.add_point_labels(points, point_Group_ids,
211
+ always_visible=True,shape=None,show_points=True,
212
+ fill_shape=False,
213
+ point_size=10,point_color="orange",
214
+ font_size=17, name="GLABEL_ID"
215
+ )
216
+
217
+
218
+
219
+ # -----------------------------------------------------------------------------------------------------
220
+
221
+
222
+
223
+ # GRID ----------------------------------------------------------------------------------------------
224
+ x_offset = 0.2*(max_x-min_x)+1
225
+ y_offset = 0.2*(max_y-min_y)+1
226
+ x = np.linspace(min_x-x_offset, max_x+x_offset, 21)
227
+ y = np.linspace(min_y-y_offset, max_y+y_offset, 21)
228
+
229
+
230
+ lines = []
231
+ z_off = 1
232
+
233
+ for xi in x:
234
+ lines.append([[xi, y[0], min_z-z_off], [xi, y[-1], min_z-z_off]]) # vertical lines
235
+
236
+ for yi in y:
237
+ lines.append([[x[0], yi, min_z-z_off], [x[-1], yi, min_z-z_off]]) # horizontal lines
238
+
239
+
240
+ grid_lines = pv.PolyData()
241
+ for line in lines:
242
+ grid_lines += pv.Line(line[0], line[1])
243
+
244
+
245
+ if Visual.toggle_Grid:
246
+ plotter.add_mesh(grid_lines, color='gray', line_width=1,name="Grid",opacity=0.3)
247
+
248
+
249
+ #--------------------------------------------------------------------------------------------------------------
250
+
251
+
252
+ def toggle_GridLines(checked):
253
+ if checked:
254
+ Visual.toggle_Grid = True
255
+ plotter.add_mesh(grid_lines, color='gray', line_width=1,name="Grid",opacity=0.3)
256
+ else:
257
+ Visual.toggle_Grid = False
258
+ plotter.remove_actor("Grid")
259
+ plotter.render()
260
+
261
+
262
+ def toggle_GroupNodeID(checked):
263
+ if checked:
264
+ Visual.toggle_GroupNodeIDs = True
265
+ plotter.add_point_labels(points, point_Group_ids,
266
+ always_visible=True,shape=None,show_points=True,
267
+ fill_shape=False,
268
+ point_size=10,point_color="orange",
269
+ font_size=17, name="GLABEL_ID"
270
+ )
271
+ else:
272
+ Visual.toggle_GroupNodeIDs = False
273
+ plotter.remove_actor("GLABEL_ID")
274
+
275
+ plotter.render()
276
+
277
+
278
+
279
+ def toggle_Beams(checked):
280
+ if checked:
281
+ Visual.toggle_Beam = True
282
+ if lines_point_pair!=[]: plotter.add_mesh(msh, scalars="ids", cmap="plasma", line_width=4,show_edges=False,opacity=0.95,show_scalar_bar=False,name="Lines")
283
+ else:
284
+ Visual.toggle_Beam = False
285
+ plotter.remove_actor("Lines")
286
+ plotter.render()
287
+
288
+ def toggle_Plates(checked):
289
+ if checked:
290
+ Visual.toggle_Plate = True
291
+ if Qplates_point_pair!=[]:plotter.add_mesh(Qmesh, scalars="ids", cmap="rainbow", show_edges=True,opacity=0.8,edge_opacity=0.3,show_scalar_bar=False,name="QPlates")
292
+ if Tplates_point_pair!=[]:plotter.add_mesh(Tmesh, scalars="ids", cmap="rainbow", show_edges=True,opacity=0.8,edge_opacity=0.3,show_scalar_bar=False,name="TPlates")
293
+ else:
294
+ Visual.toggle_Plate = False
295
+ plotter.remove_actor("QPlates")
296
+ plotter.remove_actor("TPlates")
297
+ plotter.render()
298
+
299
+ def toggle_nodeID(checked):
300
+ if checked:
301
+ Visual.toggle_NodeIDs = True
302
+ plotter.add_point_labels(points, point_ids,
303
+ always_visible=True,shape=None,show_points=True,
304
+ fill_shape=False,
305
+ point_size=10,point_color="red",
306
+ font_size=15, name="LABEL_ID"
307
+ )
308
+ else:
309
+ Visual.toggle_NodeIDs = False
310
+ plotter.remove_actor("LABEL_ID")
311
+
312
+ plotter.render()
313
+
314
+
315
+ cbox_NodeID_pos = (50,10)
316
+ plotter.add_checkbox_button_widget(toggle_nodeID, value=Visual.toggle_NodeIDs, position=cbox_NodeID_pos, size=20)
317
+ plotter.add_text("Node ID", font_size=6, color='black',position=(cbox_NodeID_pos[0]+25,cbox_NodeID_pos[1]+3))
318
+
319
+ cbox_GrupNodeID_pos = (150,10)
320
+ plotter.add_checkbox_button_widget(toggle_GroupNodeID, value=Visual.toggle_GroupNodeIDs, position=cbox_GrupNodeID_pos, size=20)
321
+ plotter.add_text("Group Node ID", font_size=6, color='black',position=(cbox_GrupNodeID_pos[0]+25,cbox_GrupNodeID_pos[1]+3))
322
+
323
+ cbox_DispBeam_pos = (280,10)
324
+ plotter.add_checkbox_button_widget(toggle_Beams, value=Visual.toggle_Beam, position=cbox_DispBeam_pos, size=20)
325
+ plotter.add_text("Beams", font_size=6, color='black',position=(cbox_DispBeam_pos[0]+25,cbox_DispBeam_pos[1]+3))
326
+
327
+ cbox_DispPlate_pos = (370,10)
328
+ plotter.add_checkbox_button_widget(toggle_Plates, value=Visual.toggle_Plate, position=cbox_DispPlate_pos, size=20)
329
+ plotter.add_text("Plates", font_size=6, color='black',position=(cbox_DispPlate_pos[0]+25,cbox_DispPlate_pos[1]+3))
330
+
331
+ cbox_GridDispl_pos = (450,10)
332
+ plotter.add_checkbox_button_widget(toggle_GridLines, value=Visual.toggle_Grid, position=cbox_GridDispl_pos, size=20)
333
+ plotter.add_text("Grid", font_size=6, color='black',position=(cbox_GridDispl_pos[0]+25,cbox_GridDispl_pos[1]+3))
334
+
335
+ cbox_Animate_pos = (580,10)
336
+ plotter.add_checkbox_button_widget(changeDataBack, value=True, position=cbox_Animate_pos, size=20)
337
+ plotter.add_text("<<", font_size=6, color='red',position=(cbox_Animate_pos[0]+25,cbox_Animate_pos[1]+3))
338
+
339
+ cbox_Animate_pos = (640,10)
340
+ plotter.add_checkbox_button_widget(changeDataForw, value=True, position=cbox_Animate_pos, size=20)
341
+ plotter.add_text(">>", font_size=6, color='green',position=(cbox_Animate_pos[0]+25,cbox_Animate_pos[1]+3))
342
+
343
+
344
+ #--------------------------------------------------------------------------------------------------------------
345
+
346
+
347
+ return plotter
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: midas_civil
3
+ Version: 1.4.1
4
+ Summary: Python library for MIDAS Civil NX
5
+ Home-page: https://github.com/MIDASIT-Co-Ltd/midas-civil-python
6
+ Author: Sumit Shekhar
7
+ Author-email: sumit.midasit@gmail.com
8
+ License: MIT
9
+ Keywords: midas,civil,civil nx,bridge
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: numpy
13
+ Requires-Dist: polars
14
+ Requires-Dist: requests
15
+ Requires-Dist: scipy
16
+ Requires-Dist: colorama
17
+ Requires-Dist: openpyxl
18
+ Requires-Dist: tqdm
19
+ Requires-Dist: gmsh
20
+ Dynamic: author
21
+ Dynamic: author-email
22
+ Dynamic: description
23
+ Dynamic: description-content-type
24
+ Dynamic: home-page
25
+ Dynamic: keywords
26
+ Dynamic: license
27
+ Dynamic: license-file
28
+ Dynamic: requires-dist
29
+ Dynamic: summary
30
+
31
+ # MIDAS CIVIL NX Python
32
+
33
+ ![MIDAS PYTHON](https://midas-rnd.github.io/midasapi-python/assets/banner.png)
34
+
35
+ ---
36
+
37
+ [![PyPI Downloads](https://static.pepy.tech/badge/midas-civil)](https://pepy.tech/projects/midas-civil)
38
+
39
+ **`midas-civil`** is a Python library that provides an interface to interact with MIDAS Civil NX using Python scripts.
40
+ 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.
41
+
42
+
43
+
44
+ ## Features
45
+
46
+ * **Model Interaction**: Create, modify, and query elements, nodes, materials, sections, and boundary conditions.
47
+
48
+ * **Automation**: Run simulations and extract results automatically using Python scripts.
49
+
50
+ * **Data Extraction**: Access analysis results including forces, displacements, reactions, stresses, etc.
51
+
52
+ * **Integration**: Seamlessly connect MIDAS Civil NX with data analysis tools like pandas, NumPy, and visualization tools like matplotlib.
53
+
54
+
55
+ ## Installation
56
+ You can install the library using pip:
57
+
58
+ ```py
59
+ pip install midas-civil
60
+ ```
61
+
62
+
63
+ **Requirements:**
64
+ * Python 3+
65
+ * MIDAS Civil NX
66
+
67
+
68
+ ## Documentation
69
+ Python Documentation: [Documentation](https://midas-rnd.github.io/midasapi-python/)
70
+ API Reference: [JSON Manual](https://support.midasuser.com/hc/en-us/articles/33016922742937-MIDAS-API-Online-Manual)
71
+
72
+
73
+ ## License
74
+ This project is licensed under the MIT License.
@@ -0,0 +1,40 @@
1
+ midas_civil/_BoundaryChangeAssignment.py,sha256=dZplW5ktndbVdEqu48ok5xP3-N1RyuvWySPVTsyG9xs,9526
2
+ midas_civil/__init__.py,sha256=rKGZUbScN-T2JedNOarrSkX2zkfgmLcilXJq-3pED9g,2839
3
+ midas_civil/_analysiscontrol.py,sha256=5DPjo50b-eLQtnsqa3RQlOz4ZS_SU2WQPFCFIrzPgqI,24463
4
+ midas_civil/_boundary.py,sha256=c1KXskXBJEemF_0KgfjxhHHijnZkzLPrWQu2ATK0UtA,34084
5
+ midas_civil/_construction.py,sha256=wVccX91cklYmBTnRVgBW0bP5kZMTTU5zdQ4_vs7mRZU,41593
6
+ midas_civil/_element.py,sha256=wkY_mR6Rz202RK8l_RjlBA-ezq2ygQtViLz2vsTcqSQ,51887
7
+ midas_civil/_group.py,sha256=UcpA_43FpHCrh_xx1VoDVhwVrSWS7ti7NsqI5jkXMRs,9630
8
+ midas_civil/_load.py,sha256=gGnW9LlpjwzOLGz2_e9nM9LoSlblco97WGidUA_scIE,39721
9
+ midas_civil/_loadcomb.py,sha256=jwBur61oEpySBb7v4AzbOpbBEM6CXbcEzvW6-SezC70,7743
10
+ midas_civil/_mapi.py,sha256=ZUM_tZTxWMy3WIAB9YjjlfekGYLAt5tkrvCgWolbYgM,9776
11
+ midas_civil/_material.py,sha256=tPI0Cz-aqVI8Ciq4SGTi4TaJvg3_1yZ9CaS2e36Nwj8,71798
12
+ midas_civil/_model.py,sha256=uWFBEU2z3eJz64ktgS-0qqGFwMxnr9BYH5f1NwmEots,21150
13
+ midas_civil/_movingload.py,sha256=XAHkI6WYsP0O4CT3TfP6TLZRbjk3_M6zZJ30dqGN6Uw,81242
14
+ midas_civil/_node.py,sha256=qfvUbtv4I2QP_zQb1p1p9vFdu0qXSGcOkPavQjj4zck,18191
15
+ midas_civil/_result_table.py,sha256=CfeaOF_PFmS4RorbdQgVtII9yCEAqTVMeCrnqPplCyw,41208
16
+ midas_civil/_result_test.py,sha256=2ytuuGYRXa0sLFhAi6Yj-rsHryorfASvfMAOfCzia9o,252105
17
+ midas_civil/_settlement.py,sha256=05sCLXaaBOvxwMJwm1Z8b1KQZnHAwA0rU3bw3q2qXr8,5203
18
+ midas_civil/_temperature.py,sha256=NLGJ27fv9xu02NYwktaIEQiOQp4B97gUUPeNYXBXmfc,25304
19
+ midas_civil/_tendon.py,sha256=vzRzWY3GZesaLtX-f-E7_wPmzv8dmYunr-kK0hBV15w,33974
20
+ midas_civil/_thickness.py,sha256=aCI_BDytMvpbafb7WjOz4-eSK3fnHTLZpXAvJMojqzQ,3379
21
+ midas_civil/_utils.py,sha256=J8rdJcXVwLDrJ8BllmWACO5h06VQiVk4DcBcsI-Y2i0,23796
22
+ midas_civil/_view.py,sha256=lM-AVBhN_56Q75L1fAyDRzt-c6dRAlSMFAYR8jDV08Q,34733
23
+ midas_civil/_view_trial.py,sha256=9rTp8NJGlaHzhAZXwS74i_98YCp3d_ouqo9B-jKHUeY,14790
24
+ midas_civil/_visualise.py,sha256=35N4Qg3zRwHEHDsNydwRXCZ68V47G4cSchKLSc5HQzA,12494
25
+ midas_civil/_section/_TapdbSecSS.py,sha256=owsdZWcAB2QmygVsvCORfcmDIMvKZIoRVF6VWshF5Qc,5935
26
+ midas_civil/_section/__init__.py,sha256=Xd_tpCyBR5-rXLL74_1l6H_SrfnQM3ZrcEn55NCLIMI,15675
27
+ midas_civil/_section/_compositeSS.py,sha256=mrHOkjHkbuVOLAd1dGEiLruyqmye_mv9H99UJIdWdiQ,9942
28
+ midas_civil/_section/_dbSecSS.py,sha256=m74Nyt5w2XpTosLPD6g95l1oMKAkwShCE6dKKQtAh1g,5493
29
+ midas_civil/_section/_offsetSS.py,sha256=kHjwp_PCeBKWqYKoQCy0s4d8O5Gb0Vk6e1MWMOGxql4,1377
30
+ midas_civil/_section/_pscSS copy.py,sha256=jdiuAKGa9Oku69IhwcGdYn5RcVolloEIFKLCaFb1am4,15216
31
+ midas_civil/_section/_pscSS.py,sha256=TvI31p5elNliNPApKHTcSoEyiXzcniZwidckJhvOrDU,28516
32
+ midas_civil/_section/_tapPSC12CellSS.py,sha256=IZEf49BpVzIEyM672ALNpK5APC901wR2uV0b7A1ugjw,20803
33
+ midas_civil/_section/_unSupp.py,sha256=46A_a5CzDpQM7bqglkFzIvq6VG7Lj9J6qflY3nwZlqI,1674
34
+ midas_civil/_utilsFunc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ midas_civil/_utilsFunc/_line2plate.py,sha256=Zd6Ceq59x3mGu-DCGpE7h2E8IUhodBI1Dzk2flf1B8Y,22275
36
+ midas_civil-1.4.1.dist-info/licenses/LICENSE,sha256=zrL4RwZC4rb-by_ZHKXwKdIwcs6ATy59TPZ9HxPHCrs,1071
37
+ midas_civil-1.4.1.dist-info/METADATA,sha256=zfg2rCRjR5O8sBzcQH_EbCtbDu7ebL0OHZx3gM0ATWY,2147
38
+ midas_civil-1.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
39
+ midas_civil-1.4.1.dist-info/top_level.txt,sha256=_NFmrlN5V9OxJ-PAO4s_om8OA8uupXho3QqZcSsnbuI,12
40
+ midas_civil-1.4.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -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 @@
1
+ midas_civil