【发布时间】:2018-09-27 06:31:26
【问题描述】:
我需要更换多年前构建的 Flash 查看器,以显示来自 AutoCAD 的交互式 2D 平面图。
目前,AutoCAD 文件被读取并转换为 XML 文件,其中包含代表平面图对象的多边形的 X 和 Y 坐标:房间、墙壁、资产等。绘图中的对象是可点击的,并且可以根据主题视图设置为可见或不可见。
有时这些平面图可能比较大,有很多点。
我已经尝试使用像 LeafletJS 这样的 web 地图控件,因为它已经具有 PAN 和 ZOOM 功能,我可以插入可点击的标记,并管理图层,以便我可以通过主题观点。我已将地图 CRS 设置为指标,并将数据加载为 GeoJSON。不幸的是,对于现实世界的中型平面图,它太慢而且有时变得反应迟钝。
下面的示例由 18630 个线对象组成,在平移时反应不是很明显。
所以现在我想使用 SVG 或 CANVAS 在浏览器中直接绘制平面图。 我更喜欢使用 CANVAS,因为它比 SVG 快得多,如果支持也使用 WebGL,但我必须依赖库才能拥有 事件处理程序以及像 DOM 一样简单的对象管理。
所以现在我要问的是,像 threeJS 这样的库是否可以处理这样的简单任务,即使我需要映射 2D 对象,并且选择它是否是正确的技术。特别是,是否可以使用threeJS:
- 要将事件侦听器分配给对象以获取其 ID?
- 要将 CSS3 规则应用于对象样式,例如突出显示房间或桌子?
- ThreeJS 可以轻松地绘制到 SVG 或 Canvas 元素?
- 借助 ThreeJS,我还可以轻松管理平移和缩放吗?
- 是否也可以在移动设备上显示? (Android 和 iOS)
如果有人知道更好的库或技术来完成这项任务,我完全可以提出任何建议。
(请注意,我只需要 2D 绘图,因为 3D 已经使用 Revit 的其他技术构建)
【问题讨论】:
-
使用 SVG 时不需要 JS 或任何库,因为它已经满足您的要求:原生平移和缩放;有一个 DOM;可以使用 XLink 设置可点击对象;原生 CSS 支持;可以在任何现代浏览器中打开而无需进一步依赖等等。我建议直接将CAD文件导出为SVG - JS绘制计划的要求来自哪里? (您显然已经在 CAD 软件中绘制了平面图。只导出它的一些几何图形并重新绘制它听起来很奇怪。)
-
@feeela 是的 SVG 绝对比画布容易,但我读到当有很多点时会有性能问题。也许我可以尝试在问题中绘制相同的平面图并查看结果。我无法直接从 AutoCAD 导出到 SVG,因为我需要根据图层名称支持主题视图、显示/隐藏特定图层为对象分配属性等等……顺便说一句,感谢 SVG 和 XLink 的建议。
-
你应该根据一个相当大的示例文件自己检查性能。
-
18000 行对于任何渲染器来说听起来都太多了。我会找到减少或拆分等的方法
-
OK 同意;)对于 SVG 渲染器来说太多了。可以用于硬件加速渲染器;)
标签: javascript html svg canvas three.js