You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Forge Edit2D自定义工具集配置及与Revit坐标缩放匹配问题咨询

解决Edit2D Polyline到Revit Design Automation的缩放与坐标对齐问题

我之前也碰到过类似的单位和坐标匹配问题,给你分享几个可行的解决方案:

一、创建自定义工具集配置UnitHandler

你提到的MyToolSetName其实是一个包含unitHandler属性的简单对象(并没有想象中复杂),核心是实现单位转换的两个方法,让Edit2D和Revit的单位统一。

Edit2D默认使用英寸作为单位,而如果你的Revit项目需要用英尺,就需要在这个工具集中定义转换逻辑:

// 定义自定义工具集,处理单位转换
const FootUnitToolSet = {
  unitHandler: {
    // 将Edit2D的英寸坐标转换为Revit的英尺坐标
    convertToHost: (value) => value / 12,
    // 将Revit的英尺坐标转换回Edit2D的英寸坐标(用于双向编辑场景)
    convertFromHost: (value) => value * 12
  }
};

// 注册这个工具集到Edit2D
edit2d.registerTools('FootUnitToolSet', FootUnitToolSet);

注册后,Edit2D在输出Polyline路径时会自动应用这个单位转换,后续传给Design Automation的坐标就是英尺单位了。

二、对齐坐标系方向

除了单位,还要注意Edit2D和Revit的坐标系差异:

  • Edit2D的Y轴是向下的(符合常规2D绘图习惯)
  • Revit的Y轴是向上的(符合建筑坐标系)

所以在传递Polyline点数据时,需要翻转Y坐标,确保形状方向一致:

// 从Edit2D获取原始Polyline点
const edit2dPolylinePoints = myPolyline.getPoints();

// 转换单位+翻转Y轴
const revitReadyPoints = edit2dPolylinePoints.map(point => ({
  x: point.x / 12, // 英寸转英尺
  y: -point.y / 12 // 翻转Y轴适配Revit坐标系
}));

// 把revitReadyPoints传给Design Automation API

三、确保Revit项目单位匹配

最后要确认你的Design Automation使用的Revit模板或目标文件,其项目单位已经设置为英尺:

  • 如果是使用自定义模板,提前在Revit中把项目单位的长度设置为英尺
  • 也可以在Design Automation的C#脚本中显式指定单位,避免依赖模板设置:
using (Transaction trans = new Transaction(doc, "Create Polyline"))
{
    trans.Start();
    List<XYZ> revitPoints = new List<XYZ>();
    foreach (var p in inputPoints)
    {
        // 直接使用传入的英尺坐标创建点
        revitPoints.Add(new XYZ(p.x, p.y, 0));
    }
    PolyLine polyline = PolyLine.Create(revitPoints);
    doc.Create.NewDetailCurve(doc.ActiveView, polyline);
    trans.Commit();
}

把这三步结合起来,应该就能解决缩放和坐标匹配的问题了。

内容的提问来源于stack exchange,提问作者mdaguerre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:47:28