在 Tekla Structures 二次开发项目中,我们为箱型主梁 + H型次梁的连接节点开发了一套参数化绘制工具。其中连接板(ContourPlate)的绘制是核心功能之一。
最近在测试中发现:当主次梁夹角为钝角(>90°)时,连接板的几何位置不正确。而在锐角(<=90°)情况下一切正常。
问题本质
连接板的定位依赖于主梁和次梁参考线/面的交点计算。当主次梁夹角从锐角变为钝角时,次梁腹板的"内侧"和"外侧"相对主梁的空间关系发生了翻转,需要使用不同的参考线和偏移方向。
但原代码只根据 SecondaryASide(连接板在次梁的哪一侧)做了一个简单的二分支判断,完全没有考虑夹角的影响。
修复思路
参考对比
项目里已有一个成熟的 H型主梁 + H型次梁铰接方法 Draw_BtoBPin_HH_ConnectionPlate,它正确处理了锐角和钝角两种情况:
if (RealAngle < 90.00 - eps)
{
// 锐角:用 mL2×sL3 和 mL1×sL2 求交
}
else
{
// 钝角:用 mL2×sL2 和 mL1×sL3 求交(参考线互换)
}关键发现:锐角和钝角时,求交的参考线对发生了交换(sL2 和 sL3 互换,sL4 和 sL5 互换),同时偏移方向也反转了。
映射到 BoxH 方法
BoxH 方法(箱型主梁)与 HH 方法(H型主梁)的几何计算方式不同:
| 对比项 | HH 方法 | BoxH 方法 |
|---|---|---|
| 主梁参考 | 线(Line) | 面(GeometricPlane) |
| 求交方式 | LineToLine | LineToPlane |
| 参考线定义 | 次梁上表面 | 次梁上表面投影到翼缘下表面 |
但核心几何原理相同:钝角时参考线互换,偏移方向反转。
参考线在次梁腹板两侧的分布:
+vSnf 方向 ←—————————— 次梁腹板中心 ——————————→ -vSnf 方向
sL1(翼缘外边缘)
sL2(腹板外表面 + 加劲肋厚度)
sL3(腹板外表面) sL4(腹板外表面)
sL5(腹板外表面 + 加劲肋厚度)
sL6(翼缘外边缘)钝角时 sL3 ↔ sL2、sL4 ↔ sL5 互换的原因:从主梁视角看,次梁的"近侧"和"远侧"参考线互换了。
具体修改
1. 添加夹角计算
在方向向量计算完成后,添加主次梁夹角:
double RealAngle = GetAngle(vSf, mainBeam); // 0°~180°2. 从二分支扩展为四分支
原来的结构:
if (data.SecondaryASide == 1) { /* side 1 */ }
else { /* side 2 */ }修改为:
if (RealAngle <= 90)
{
if (data.SecondaryASide == 1) { /* 锐角 + side 1 */ }
else { /* 锐角 + side 2 */ }
}
else
{
if (data.SecondaryASide == 1) { /* 钝角 + side 1 */ }
else { /* 钝角 + side 2 */ }
}3. 四种情况的参考线和偏移
以 SecondaryASide == 1(连接板在 +vSnf 方向)为例:
| 情况 | LJPT1 参考线 | LJPT1 偏移 | LJPT2 参考线 | LJPT2 偏移 |
|---|---|---|---|---|
| 锐角 | sL3Down | +vSnf × 0.5×板厚 | sL3Down | +vSnf × 0.5×肋厚 |
| 钝角 | sL2Down | **-**vSnf × 0.5×肋厚 | sL2Down | **-**vSnf × 0.5×肋厚 |
钝角的变化:
- • 参考线从 sL3(腹板外表面)换为 sL2(腹板外表面 + 加劲肋厚度)
- • 偏移方向从 +vSnf 反转为 -vSnf
SecondaryASide != 1 的情况类似,sL4 ↔ sL5 互换。
4. Pin 版额外修复
铰接版本 Draw_BtoBPin_BoxH_ConnectionPlate 还有两个独立 bug:
参考线错误:SecondaryASide == 1 时 LJPT1 用了 sL4Down(-vSnf 侧)而非 sL3Down(+vSnf 侧)。由于 sL3Down 和 sL4Down 在 vSnf 方向相差一个腹板厚度,它们与 mLCut 平面的交点在 vSf 方向的位置不同,会导致连接板沿次梁方向偏移。
ContourPoint 顺序不一致:Pin 版为 LJPT2, LJPT1, LJPT4, LJPT3,Rigid 版为 LJPT1, LJPT2, LJPT3, LJPT4。顺序不同会导致板的法线方向相反。统一为后者。
几何验证
修复后四种情况的连接板中心位置(从次梁腹板中心计):
| 情况 | 参考线位置 | 偏移 | 总偏移 |
|---|---|---|---|
| 锐角, side=1 | +0.5×WebT | +0.5×StiffT | +0.5×(WebT+StiffT) |
| 钝角, side=1 | +0.5×WebT+StiffT | -0.5×StiffT | +0.5×(WebT+StiffT) |
| 锐角, side≠1 | -0.5×WebT | -0.5×StiffT | -0.5×(WebT+StiffT) |
| 钝角, side≠1 | -0.5×WebT-StiffT | +0.5×StiffT | -0.5×(WebT+StiffT) |
四种情况的总偏移量完全一致,保证了连接板在对称位置的几何正确性。
总结
这次修复的核心教训:
- 1. 对比参考实现:项目中已有的成熟方法是最好的参照。通过对比
Draw_BtoBPin_HH_ConnectionPlate,快速定位了缺少的分支逻辑。 - 2. 几何问题要考虑全空间:钢构件之间的空间关系会随角度变化而改变。"一侧"和"另一侧"在锐角和钝角时是不同的。
- 3. 参考线选择影响定位:即使最终偏移量相同,使用不同的参考线(sL3 vs sL4)会导致沿梁方向的定位偏移。这是因为两条平行线与同一个斜面的交点在不同位置。
夜雨聆风