我们将深入探讨如何使用 SACS Python API 创建和管理节点对象。节点(Joint)是结构模型中的基本元素之一,它们定义了结构中各个部件的连接节点。通过对节点的有效管理,可以确保结构模型的准确性和可靠性。
1 创建节点
在结构分析与设计中,节点(Joint)是构建模型的基本元素之一,它代表了结构中连接其他构件(如梁、柱等)的点。在 SACS 软件中,我们可以通过 Python API 来创建和操作这些节点,将它们纳入到整体的结构模型中,进而进行进一步的分析与设计。
1.1 创建模型对象
在创建节点之前,首先需要创建一个模型对象。在 SACS 中,模型是整个结构分析和设计的基础,包含了结构的几何信息、载荷信息、材料属性等。创建模型时,需要指定使用的单位制(如公制单位或英制单位),因为节点的坐标、力、长度等都会受到单位制的影响。
模型对象的创建命令如下:
model = SACS.Model(1)
在这里,SACS.Model(1)表示创建一个新的模型对象,其中的 1 为单位制的选择,如下表所示。
表1 模型单位
X | 0 | 1 | 2 |
---|---|---|---|
坐标(Coordinates) | ft | m | m |
长度(Length) | ft | m | m |
偏移距离(Offset) | in | cm | cm |
跨度(Spacing) | in | cm | cm |
截面尺寸(X-Section Dimension) | in | cm | cm |
截面积(X-Section Area) | in2 | cm2 | cm2 |
惯性矩(Moment of Inertia) | in4 | cm4 | cm4 |
弹簧刚度(Tr. Spring Stiffness) | lb/in | kN/m | kg/m |
转动刚度(Rotational Spring Stiffness) | in·lb/rad | kN·m/rad | kg.m/rad |
角度(Angle) | deg | deg | deg |
屈服强度(Yield Stress) | ksi | kN/cm2 | kN/cm2 |
密度(Density) | lb/ft3 | t/m3 | t/m3 |
热膨胀系数(Coef. Thermal Expansion) | in/in/ºF | cm/cm/℃ | cm/cm/℃ |
分布力(Load. Dist. Force) | kip/ft | kN/m | kg/m |
集中力(Load Conc. Force) | kip | kN | kg |
分布力矩(Load. Dist. Moment) | kip·in/ft | kN·m/m | kg·cm/m |
集中力矩(Load. Conc. Moment) | kip·in | kN·m | kg·cm |
表2 模型计算结果单位
X | 0 | 1 | 2 |
---|---|---|---|
位移(Tr. Displacement) | in | cm | cm |
转动(Rot. Displacement) | rad | rad | rad |
支反力(Reaction Force) | kips | kN | kg |
支座弯矩(Reaction Moment) | kip·in | kN·m | kg·m |
轴力(Member Force) | kips | kN | tonne |
弯矩(Member Moment) | kip·in | kN·m | tonne·cm |
应力(Member Stress) | ksi | N/mm² | kg/cm² |
构件长度(Member Length) | ft | m | m |
板应力(Plate Stress) | ksi | N/mm² | kg/cm² |
1.2 添加节点
在 SACS 中,节点的添加是通过 AddJoint() 方法来实现的。该方法接受两个主要参数:
id:节点的唯一标识符(ID),是一个字符串类型的参数。
coord:节点的位置和旋转信息,通常包括三维坐标和绕各个坐标轴的旋转角度。
1.2.1 元组方式
元组方式用于简洁地传递节点的坐标和旋转信息。语法如下:
new_joint = model.AddJoint(id="J1", coord=(x, y, z, x_rot, y_rot, z_rot))
- x, y, z:表示节点在三维空间中的坐标。
- x_rot, y_rot, z_rot:表示节点绕X、Y、Z轴的旋转角度。如果节点不需要旋转,可以将这三个旋转角度设置为0。
例如,要创建一个节点 J1,坐标为 (1.0, 1.0, 0.0),并且不做任何旋转:
new_joint = model.AddJoint(id="J1", coord=(1.0, 1.0, 0.0, 0, 0, 0))
1.2.2 字典方式
字典方式传递节点的坐标和旋转角度,语法如下:
new_joint = model.AddJoint(
id='J1',
coord={
"X": x,
"Y": y,
"Z": z,
"RX": 0,
"RY": 0,
"RZ": 0
}
)
在这种方式中,通过字典的形式传递坐标和旋转角度,每个键(如 “X”, “Y”, “Z”, “RX”, “RY”, “RZ”) 对应节点在相应坐标轴上的数值。
例如,使用字典方式创建节点 J1,坐标为 (1.0, 1.0, 0.0),没有旋转:
new_joint = model.AddJoint(
id='J1',
coord={
"X": 1.0,
"Y": 1.0,
"Z": 0.0,
"RX": 0,
"RY": 0,
"RZ": 0
}
)
1.2.3 示例代码
假设我们需要在模型中添加一个节点 J1,坐标为 (1.0, 1.0, 0.0),并且没有旋转,下面是两种添加节点的代码示例:
1.2.3.1 使用元组方式
new_joint = model.AddJoint(id="J1", coord=(1.0, 1.0, 0.0, 0, 0, 0))
1.2.3.2 使用字典方式
new_joint = model.AddJoint(
id='J1',
coord={
"X": 1.0,
"Y": 1.0,
"Z": 0.0,
"RX": 0,
"RY": 0,
"RZ": 0
}
)
这段代码创建了一个名为 J1 的节点,并将其坐标设置为 (1.0, 1.0, 0.0),同时没有应用任何旋转(即绕所有坐标轴的旋转角度均为0)。
1.3 检查节点是否添加成功
为了确保节点已成功添加到模型中,可以使用以下代码进行检查:
if new_joint is not None:
print("节点添加成功:", new_joint)
else:
print("节点添加失败")
- 如果 new_joint 不为 None,则表示节点已经成功添加到模型中,可以打印节点的相关信息。
- 如果 new_joint 为 None,则表示节点添加失败,可能是由于传入的参数不合法,或者其他原因导致的错误。
2 节点删除
在 SACS 中,删除节点可以使用 Delete() 方法。需要注意的是,删除一个节点会影响到与其相关的其他数据,例如与该节点连接的梁、柱、支撑和荷载等,因此删除节点时应格外小心。
删除节点的示例如下:
joint = model.AddJoint(id="J1", coord=(1.0, 1.0, 1.0, 0.0, 0.0, 0.0))
result = joint.Delete()
- 第1行代码创建了一个名为 J1 的节点,坐标为 (1.0, 1.0, 1.0),且没有旋转。
- 第2行代码调用 Delete() 方法删除该节点。
3 节点查找
SACS 提供了多种方法来查找模型中的节点。通过 FindJoint() 和 FindJoints() 方法,用户可以方便地根据节点 ID 查找特定的节点或多个节点。
3.1 单个节点查找
使用 FindJoint() 方法可以根据节点的唯一标识符(ID)查找模型中的单个节点。该方法接受一个字符串类型的参数,该参数是节点的 ID,返回与该 ID 对应的节点对象。
例如,要查找 ID 为 “J1” 的节点:
joint = model.FindJoint("J1")
if joint:
coords = joint.Coordinate # 获取节点坐标
print(f"找到节点: {joint.Id}, 坐标: X={coords.X}, Y={coords.Y}, Z={coords.Z}")
else:
print("未找到节点J1")
- FindJoint(“J1”) 查找 ID 为 “J1” 的节点。
- 如果找到该节点,会打印其 ID 和坐标。
- 如果未找到,输出提示信息。
3.2 多个节点查找
使用 FindJoints() 方法可以查找多个节点。该方法支持正则表达式,用于匹配多个节点的 ID。
例如,查找所有 ID 中包含 “Beam” 的节点:
id_pattern = "Beam" # 正则表达式
joints_query = model.FindJoints(id_pattern)
这会返回所有 ID 中包含 “Beam” 的节点集合。
4 节点修改
在 SACS 中,修改节点坐标通常需要访问节点对象的 Coordinate 属性。修改节点坐标可以通过以下几种方法:
4.1 直接给坐标赋值
通过直接赋值来修改节点的坐标是最简单和直接的方式。可以逐个修改 X、Y、Z 坐标。
joint = model.FindJoint("J1") # 查找节点J1
coord = joint.Coordinate # 获取节点的坐标对象
coord.X = 2.0 # 修改X坐标
coord.Y = 3.0 # 修改Y坐标
coord.Z = 4.0 # 修改Z坐标
print(f"节点J1的新坐标为:({coord.X}, {coord.Y}, {coord.Z})")
这种方式直接修改每个坐标的数值,适用于需要逐个调整坐标的情况。
4.2 使用 Values 属性
如果需要同时修改多个坐标分量,可以使用 Values 属性,一次性修改所有坐标。
joint = model.FindJoint("J1")
joint.Coordinate.Values = (2.0, 3.0, 4.0) # 同时修改X, Y, Z坐标
4.3 使用字典的值
如果只想修改部分坐标分量,可以使用字典来指定要修改的部分。
joint = model.FindJoint("J1")
joint.Coordinate.Values = {'X': 5.0, 'Y': 6.0} # 仅修改X和Y坐标
5 总结
基于 Python 的 SACS 中节点管理可以大大提高建模的效率和灵活性。通过 Python API,你可以轻松地进行节点的创建、删除、查找和更新等操作,这对于复杂的结构分析模型尤为重要。在实际应用中,结合批量操作和自动化脚本,可以显著减少手动输入和操作的错误,提升建模速度。
通过不断深入使用 SACS Python API,你可以实现更加精确和高效的结构建模工作。