Skip to content

Commit 31f86fb

Browse files
committed
Implement GetAreaOfPlates method and add Nodal Load functions in Load class; enhance tools with safe array input functions
1 parent 602d273 commit 31f86fb

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

openstaad/geometry.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -480,21 +480,17 @@ def DeletePlate(self,plate):
480480
self._geometry.DeletePlate(plate)
481481

482482

483-
def _GetAreaOfPlate(self,plate):
484-
safe_n1 = make_safe_array_double(1)
485-
x = make_variant_vt_ref(safe_n1, automation.VT_ARRAY | automation.VT_R8)
486-
487-
self._geometry.GetAreaOfPlates([plate],x)
483+
def GetAreaOfPlates(self,plates: list) -> list[float]:
488484

489-
return x.value[0][0]
490-
491-
def GetAreaOfPlates(self,plates):
492-
areas = []
493-
for plate in plates:
494-
area = self._GetAreaOfPlate(plate)
495-
areas.append(area)
496-
497-
return areas
485+
safe_palte_list = make_safe_array_int_input(plates)
486+
plate_list = make_variant_vt_ref(safe_palte_list, automation.VT_ARRAY | automation.VT_I4)
487+
488+
safe_area = make_safe_array_double(len(plates))
489+
area = make_variant_vt_ref(safe_area, automation.VT_ARRAY | automation.VT_R8)
490+
491+
self._geometry.GetAreaOfPlates(plate_list,area)
492+
493+
return area.value[0]
498494

499495

500496

openstaad/load.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ def __init__(self):
2121
"GetLoadCaseTitle",
2222
"GetReferenceLoadCaseCount",
2323
"SetLoadActive",
24-
"SetReferenceLoadActive"
24+
"SetReferenceLoadActive",
25+
"AddNodalLoad",
26+
"ClearReferenceLoadCase"
2527
]
2628

2729
for function_name in self._functions:
@@ -156,6 +158,17 @@ def SetReferenceLoadActive(self,load_case:int):
156158
"""
157159
return self._load.SetReferenceLoadActive(load_case)
158160

161+
def AddNodalLoad(self, nodes : list[int], fx : float, fy:float, fz:float, mx:float, my:float, mz:float):
162+
def make_safe_array_long(array):
163+
return automation._midlSAFEARRAY(ctypes.c_long).create(array)
164+
165+
safe_list = make_safe_array_long(nodes)
166+
varNodeNo = make_variant_vt_ref(safe_list, automation.VT_ARRAY | automation.VT_I4)
167+
168+
self._load.AddNodalLoad(varNodeNo,fx, fy, fz, mx, my, mz)
169+
170+
def ClearReferenceLoadCase(self,reference_load_number: int):
171+
self._load.ClearReferenceLoadCase(reference_load_number)
159172

160173

161174

openstaad/root.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ def __init__(self):
1818
'GetSTAADFile',
1919
'GetSTAADFileFolder',
2020
'NewSTAADFile',
21-
'SaveModel'
21+
'SaveModel',
22+
'CloseSTAADFile',
23+
'OpenSTAADFile'
2224
]
2325

2426
for function_name in self._functions:
@@ -255,3 +257,13 @@ def SaveModel(self,silent:int):
255257
self._root.SaveModel(silent)
256258

257259

260+
def CloseSTAADFile(self):
261+
self._root.CloseSTAADFile()
262+
263+
def OpenSTAADFile(self, file_name: str):
264+
"""
265+
Opens a .STD file.
266+
"""
267+
self._root.OpenSTAADFile(file_name)
268+
269+

openstaad/tools.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ def make_variant_vt_ref(obj, var_type):
2525
def make_safe_array_long_input(lista):
2626
return automation._midlSAFEARRAY(ctypes.c_long).create(lista)
2727

28+
def make_safe_array_int_input(lista):
29+
return automation._midlSAFEARRAY(ctypes.c_int).create(lista)
30+
2831

2932
APICALL = {'file':'',
3033
'geometry':'Geometry',

0 commit comments

Comments
 (0)