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

如何将APS Viewer标记坐标转换为AutoCAD图纸坐标以生成多段线?

APS Viewer标记坐标转DWG图纸坐标实操流程

核心思路

你需要把Viewer中标记的三维坐标,转换成DWG图纸空间(布局)的二维坐标,才能在Design Automation里创建对应多段线。以下是具体步骤:

1. 确认Viewer当前视图类型

首先明确你是在模型空间还是**布局(图纸空间)**里绘制的标记:

  • 调用viewer.getCurrentViewable(),返回对象若is2d为true且name是布局名(比如"Layout1"),则处于布局视图;
  • 若is2d为false(3D模型)或无布局名,则处于模型空间。

2. 获取视口ID(vpId)的正确方法

之前找不到vpId,是因为没在正确时机调用方法:

  • 必须等模型完全加载,监听viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, () => { ... })后再操作;
  • 布局视图下,调用viewer.model.getDocumentNode().getViewports(),返回当前布局的所有视口列表,每个视口对象的id就是vpId;
  • 若在视口内绘制标记,还可以用viewer.hitTest(screenX, screenY),返回结果里的viewportId就是当前点击对应的视口ID。

3. 坐标转换步骤

情况一:在布局视口内绘制标记(图纸空间操作)

拿到Viewer中的三维点viewerPoint(比如标记工具返回的THREE.Vector3)和vpId后:

  1. 获取视口的变换矩阵:const vpTransform = viewer.model.getViewportTransform(vpId);
  2. 转换为图纸空间坐标:
    const paperPoint = viewerPoint.clone().applyMatrix4(vpTransform);
    // paperPoint的x、y即为图纸空间二维坐标,z值可忽略
    

该矩阵已包含视口的缩放、平移、旋转等变换,直接应用即可得到正确坐标。

情况二:在模型空间绘制标记,需转到图纸空间

如果标记在模型空间,先获取目标布局视口的参数:

  • 从视口对象中拿到scale(模型单位与图纸单位的比例)、position(视口在图纸空间的左上角坐标);
  • 转换公式(注意DWG坐标系Y轴向上,Viewer的Y轴可能需反转,视模型情况调整):
    // modelPoint为Viewer中获取的模型空间点
    const paperX = viewport.position.x + (modelPoint.x / viewport.scale);
    const paperY = viewport.position.y + (modelPoint.y / viewport.scale);
    

4. 传递坐标到Design Automation生成多段线

将转换后的二维点数组(比如[{x: ..., y: ...}, ...])传给Design Automation的AutoCAD插件:

  • 在插件中使用AutoCAD .NET API的Polyline.Create()方法,传入点集合,注意切换到对应布局空间(比如Database.CurrentSpaceId = layoutId)。

常见坑点

  • 坐标反转:DWG的Y轴向上,Viewer的Y轴可能向下,转换后若坐标颠倒,将Y值取反即可;
  • 视口匹配:若布局有多个视口,需确保标记点属于目标视口,用hitTest返回的viewportId匹配最准确;
  • 单位问题:确认Viewer与DWG的单位一致,或在转换时加入单位换算系数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:20:30