Revit API提交事务报错Line is too short但UI手动操作正常如何解决
问题解决思路
根因分析
这个报错的核心触发原因是参数相等导致的零长度几何生成,你失败的第6条测试数据刚好满足DN=DN_AB=350,若族内部几何公式中存在用两个参数差值做线段长度、偏移量、放样路径长度的逻辑,差值为0时生成的线段长度低于Revit允许的最小几何长度(约0.00254mm,对应内部单位1e-9英尺),就会触发Line is too short报错。
手动操作可正常设置是因为Revit UI层会自动做参数精度截断、异常约束容错,检测到零长度几何时会自动做微小偏移或者跳过无效约束,而API调用默认是严格校验,不会做这类隐式容错处理,所以仅代码调用时会触发异常。
具体解决步骤
- 第一步:核查族文件内部的几何约束公式,定位所有依赖
DN和DN_AB差值计算的几何逻辑,确认是否存在差值为0时生成零长度线段的场景。 - 第二步:代码层增加参数容错校验,赋值前给差值设置最小阈值兜底,参考代码如下:
using (Transaction tr = new Transaction(famDoc)) { tr.Start("add data"); DN = "400"; if (!String.IsNullOrWhiteSpace(DN)) { double dn = Convert.ToDouble(DN); dn = UnitUtils.ConvertToInternalUnits(dn, DisplayUnitType.DUT_MILLIMETERS); // 新增:和DN_AB做差值校验,小于最小允许值则做微小偏移 double minLength = UnitUtils.ConvertToInternalUnits(0.1, DisplayUnitType.DUT_MILLIMETERS); if(Math.Abs(dn - dn_ab) < minLength) { dn_ab = dn - minLength; // 若需要保留原值相等的逻辑,也可在此处跳过对应几何生成的参数设置 } Parameters.SetParameterFamily(famManager, famDoc, "GEOMETRY", ParameterType.Length, false, "DN", dn); } // 新增:提前触发几何重生成,方便定位具体报错点,而非到Commit阶段才报错 famDoc.Regenerate(); tr.Commit(); }
- 第三步:若业务要求必须支持DN和DN_AB完全相等的场景,可修改族的几何定义,新增参数判断分支:当两个参数差值小于阈值时,自动隐藏/禁用依赖差值生成的过渡段、倒角等几何元素,从根源上避免零长度几何生成。
内容的提问来源于stack exchange,提问作者JPais
相关产品推荐
相关产品推荐

