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
相关产品推荐
相关产品推荐

