@@ -11,43 +11,54 @@ def __init__(self):
1111 self ._geometry = self ._staad .Geometry
1212
1313 self ._functions = [
14+ "AddBeam" ,
15+ "AddNode" ,
16+ "ClearMemberSelection" ,
17+ "CreatePhysicalMember" ,
18+ "DeletePhysicalMember" ,
19+ "DoTranslationalRepeat" ,
20+ "GetAnalyticalMemberCountForPhysicalMember" ,
21+ "GetAnalyticalMembersForPhysicalMember" ,
22+ "GetBeamLength" ,
23+ "GetBeamList" ,
24+ "GetBeamsConnectedAtNode" ,
25+ "GetGroupCount" ,
26+ "GetGroupEntities" ,
27+ "GetGroupEntityCount" ,
28+ "GetGroupNames" ,
29+ "GetIntersectBeamsCount" ,
30+ "GetLastBeamNo" ,
1431 "GetLastNodeNo" ,
32+ "GetLastPhysicalMemberNo" ,
33+ "GetMemberCount" ,
34+ "GetMemberIncidence" ,
1535 "GetNodeCoordinates" ,
1636 "GetNodeCount" ,
1737 "GetNodeDistance" ,
1838 "GetNodeIncidence" ,
1939 "GetNodeList" ,
2040 "GetNodeNumber" ,
41+ "GetNoOfBeamsConnectedAtNode" ,
42+ "GetNoOfSelectedBeams" ,
2143 "GetNoOfSelectedNodes" ,
44+ "GetNoOfSelectedPhysicalMembers" ,
45+ "GetPMemberCount" ,
46+ "GetPhysicalMemberCount" ,
47+ "GetPhysicalMemberList" ,
48+ "GetPhysicalMemberUniqueID" ,
49+ "GetSelectedBeams" ,
2250 "GetSelectedNodes" ,
23- 'GetBeamLength' ,
24- 'GetBeamList' ,
25- 'GetMemberCount' ,
26- 'GetLastBeamNo' ,
27- 'GetMemberIncidence' ,
28- 'GetNoOfSelectedBeams' ,
29- 'GetSelectedBeams' ,
30- 'GetNoOfBeamsConnectedAtNode' ,
31- 'GetBeamsConnectedAtNode' ,
32- 'GetGroupEntities' ,
33- 'GetGroupEntityCount' ,
34- 'ClearMemberSelection' ,
35- 'SelectMultipleBeams' ,
36- 'GetGroupCount' ,
37- 'GetGroupNames' ,
38- 'CreatePhysicalMember' ,
39- 'AddNode' ,
40- 'AddBeam' ,
41- 'DoTranslationalRepeat' ,
42- 'GetIntersectBeamsCount' ,
43- 'IntersectBeams'
51+ "GetSelectedPhysicalMembers" ,
52+ "IntersectBeams" ,
53+ "SelectMultipleBeams" ,
54+ "SelectMultiplePhysicalMembers" ,
55+ "SelectPhysicalMember" ,
56+ "SetPhysicalMemberUniqueID"
4457 ]
4558
4659 for function_name in self ._functions :
4760 self ._geometry ._FlagAsMethod (function_name )
4861
49- ## NODE FUNCTIONS
50-
5162 def GetLastNodeNo (self ):
5263 return self ._geometry .GetLastNodeNo ()
5364
@@ -119,8 +130,6 @@ def GetSelectedNodes(self):
119130 self ._geometry .GetSelectedNodes (lista )
120131
121132 return (lista [0 ])
122-
123- ## BEAM FUNCTIONS
124133
125134 def GetBeamLength (self ,beam ):
126135 length = round (self ._geometry .GetBeamLength (beam )* 1000 )/ 1000
@@ -181,8 +190,6 @@ def GetBeamsConnectedAtNode(self,node):
181190
182191 return list [0 ]
183192
184- ## GROUP FUNCTIONS
185-
186193 def GetGroupEntityCount (self ,group_name ):
187194 return self ._geometry .GetGroupEntityCount (group_name )
188195
@@ -230,16 +237,20 @@ def CreatePhysicalMember(self,member_list:list):
230237 lista_variant = make_variant_vt_ref (safe_list , automation .VT_ARRAY | automation .VT_I4 )
231238 retval = self ._geometry .CreatePhysicalMember (num ,lista_variant ,None )
232239
233-
234-
235240 def AddNode (self ,x :float = 0.0 ,y :float = 0.0 ,z :float = 0.0 ):
236241 retval = self ._geometry .AddNode (x ,y ,z )
237242 return retval
238-
243+
239244 def AddBeam (self ,node_A ,node_B ):
240245 retval = self ._geometry .AddBeam (node_A ,node_B )
241246 return retval
247+
248+ def DeletePhysicalMember (self ,p_member :int ):
249+ self ._geometry .DeletePhysicalMember (p_member )
242250
251+ def GetAnalyticalMemberCountForPhysicalMember (self ,p_member :int ):
252+ return self ._geometry .GetAnalyticalMemberCountForPhysicalMember (p_member )
253+
243254 def make_safe_array_long (data ):
244255 if not isinstance (data , list ):
245256 raise TypeError ("Data must be a list of integers" )
@@ -257,7 +268,7 @@ def make_variant_vt_ref(safe_array, vt_type):
257268 variant .vt = vt_type
258269 variant ._ .parray = safe_array
259270 return variant
260-
271+
261272 def DoTranslationalRepeat (self , varLinkBays : bool , varOpenBase : bool , varAxisDir : int , varSpacingArray : list [float ], varNobays : int , varRenumberBay : bool , varRenumberArray : list , varGeometryOnly : bool ):
262273 try :
263274
@@ -274,7 +285,7 @@ def make_safe_array_double(array):
274285 except Exception as e :
275286 print (f"An error occurred in DoTranslationalRepeat: { e } " )
276287 raise
277-
288+
278289 def IntersectBeams (self , Method : int , BeamNosArray : list [int ], dTolerance : float , NewBeamNosArray : int ):
279290
280291 # Conversión de dTolerance
@@ -298,7 +309,7 @@ def make_safe_array_long(array):
298309 # Llamada a la función interna
299310 retval = self ._geometry .IntersectBeams (Method , BeamNosArray , dTolerance , NewBeamNosArray )
300311 return retval
301-
312+
302313 def GetIntersectBeamsCount (self , BeamNosArray : list [int ], dTolerance : float ):
303314 safe_n1 = make_safe_array_double (1 )
304315 dTolerance = make_variant_vt_ref (safe_n1 , automation .VT_R8 )
@@ -312,8 +323,51 @@ def make_safe_array_long(array):
312323
313324 n_beams = self ._geometry .GetIntersectBeamsCount (BeamNosArray , dTolerance )
314325 return n_beams
315-
316326
317-
327+ #Not Working yet
328+ def GetAnalyticalMembersForPhysicalMember (self , p_member : int ):
329+
330+ no_am = self ._geometry .GetAnalyticalMemberCountForPhysicalMember (p_member )
331+
332+ if no_am == 0 :
333+ return []
334+
335+ safe_list = automation ._midlSAFEARRAY (ctypes .c_int ).create ([0 ] * no_am )
336+
337+ var_p_member = automation .VARIANT (p_member )
338+ var_no_am = automation .VARIANT (no_am )
339+ var_member_list = automation .VARIANT ()
340+ var_member_list ._ .c_void_p = ctypes .addressof (safe_list )
341+ var_member_list .vt = automation .VT_ARRAY | automation .VT_I4 | automation .VT_BYREF
342+
343+ self ._geometry .GetAnalyticalMembersForPhysicalMember (
344+ var_p_member , var_no_am , var_member_list
345+ )
346+
347+ return list (safe_list )
348+
349+ def GetLastPhysicalMemberNo (self ):
350+ return self ._geometry .GetLastPhysicalMemberNo ()
318351
352+ def GetNoOfSelectedPhysicalMembers (self ):
353+ return self ._geometry .GetNoOfSelectedPhysicalMembers ()
319354
355+ def GetPhysicalMemberCount (self ):
356+ return self ._geometry .GetPhysicalMemberCount ()
357+
358+ def GetPhysicalMemberList (self ):
359+ no_p_members = self ._geometry .GetPhysicalMemberCount ()
360+
361+ safe_list = make_safe_array_long (no_p_members )
362+ lista = make_variant_vt_ref (safe_list , automation .VT_ARRAY | automation .VT_I4 )
363+
364+ self ._geometry .GetPhysicalMemberList (lista )
365+
366+ return (lista [0 ])
367+
368+ def GetPhysicalMemberUniqueID (self ,p_member ):
369+ return self ._geometry .GetPhysicalMemberUniqueID (p_member )
370+
371+ def GetPMemberCount (self ):
372+ return self ._geometry .GetPMemberCount ()
373+
0 commit comments