乐于分享
好东西不私藏

钢结构节点插件开发手记:连接板绘制的锐角/钝角分支修复

钢结构节点插件开发手记:连接板绘制的锐角/钝角分支修复

在 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)
求交方式LineToLineLineToPlane
参考线定义次梁上表面次梁上表面投影到翼缘下表面
       
     

但核心几何原理相同:钝角时参考线互换,偏移方向反转。

参考线在次梁腹板两侧的分布:

+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. 1. 对比参考实现:项目中已有的成熟方法是最好的参照。通过对比 Draw_BtoBPin_HH_ConnectionPlate,快速定位了缺少的分支逻辑。
  2. 2. 几何问题要考虑全空间:钢构件之间的空间关系会随角度变化而改变。"一侧"和"另一侧"在锐角和钝角时是不同的。
  3. 3. 参考线选择影响定位:即使最终偏移量相同,使用不同的参考线(sL3 vs sL4)会导致沿梁方向的定位偏移。这是因为两条平行线与同一个斜面的交点在不同位置。