前端实现简单 2d autocad 的思路或者参考? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
johnman
V2EX    问与答

前端实现简单 2d autocad 的思路或者参考?

  •  < href="Javascript:" Onclick="downVoteTopic(736448);" class="vote">
  •   johnman 2020 年 12 月 17 日 2325 次点击
    这是一个创建于 1858 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端小白,想做一个简单的 web 2d 类似可以编辑的 autocad 的软件。支持看图或一些基本的画图操作。

    前期看了一些,在线的 autocad 看图软件,是在后端生成 PNG 图片发送到前端 canvas 显示,每次移动、放大、图层隐藏等都是后端生成新的 png 推送到浏览器。感觉这种方式用来显示应该没有问题,不适合用户自己画图或者编辑新的文件。
    我的问题

    [ 1 ] 应该选 canvas 吧? svg 虽然是矢量,dom 效率还是差一些?

    [ 2 ] 如果要画图,还是需要在前端有 dom 节点可以操作并且在前端渲染比较好?

    [ 3 ] 有没有比较好的项目可以参考?在网上搜索了有一个 le5le-topology 感觉不错,但是还是有一点差别,le5le 有点类似 visio

    谢谢各位
    15 条回复    2023-11-19 17:22:24 +08:00
    murmur
        1
    murmur  
       2020 年 12 月 17 日
    autocad 好像不简单,专业性太强,简单了直接没法用了,你的需求是啥,咋突然想到这个东西
    johnman
        2
    johnman  
    OP
       2020 年 12 月 17 日
    @murmur 并不想做成一个专业的 cad 软件,我的需求是
    最简单的可以根据一张背景层图片( 2d 俯视 layout 图,可以是图片,也可以是 autocad 格式的 dxf 图片),用户可以编辑层上面画一些墙、门、窗、地板(这些元素也是俯视即可)等建筑图形,保存成 json 后传回后端。

    当然,如果可以做得智能一些,例如,如果可以处理 dxf 的层,可以把整个 dxf 的一个层都变成墙
    lower
        3
    lower  
       2020 年 12 月 17 日
    你需要的是 web-gl
    用 threejs 搞

    我这有一套现成的代码,不知道有没有兴趣
    lower
        4
    lower  
       2020 年 12 月 17 日
    johnman
        5
    johnman  
    OP
       2020 年 12 月 17 日
    @lower 有 demo 不
    johnman
        6
    johnman  
    OP
       2020 年 12 月 17 日
    @lower github 有个 dxf-parser 及配套的 three-dxf 就是用 threejs 显示 dxf,试了一下还是能够完整显示所有元素
    lower
        7
    lower  
       2020 年 12 月 17 日
    @johnman 之前有,现在好像关了;
    主要就是基于 threejs 搞的,2d/3d 视角的场景都行,,然后就是各种门窗元素就是往场景添加模型,设置模型的各种属性;
    导入导出涉及到解析 dwg 文件格式,这块好像比较复杂。如果有这方面的需求就麻烦了。
    代码是公司的,大概看过,里面写的很乱……想了一下估计对你也没参考价值。
    johnman
        8
    johnman  
    OP
       2020 年 12 月 17 日
    @lower dwg 打算用开源库在后台转换为 dxf 来绕开它,主要是不想搞那么复杂。
    lower
        9
    lower  
       2020 年 12 月 17 日
    @johnman 难搞的就是兼容它,我看那个项目里,解析 dwg 也是服务端搞的,但是在 cad 里画的,要遵守一套复杂严格的规则来创建 /命名层,才能正常识别解析到在线平台里,这一点感觉难搞。
    aec4d
        10
    aec4d  
       2020 年 12 月 17 日 via iPhone
    处理过类似的项目,用 dxf,dxf 规范比较简单。然后写代码在 dxf 和另外一种矢量格式互转就可以了
    horizon
        11
    horizon  
       2020 年 12 月 17 日
    horizon
        12
    horizon  
       2020 年 12 月 17 日
    johnman
        13
    johnman  
    OP
       2020 年 12 月 18 日
    @horizon 这个太合适了。但只能借鉴了。
    fractal3D
        14
    fractal3D  
       2023 年 11 月 19 日
    转成图片是不合适的,因为 cad 不仅仅是预览,还需要有一些数据结构的交互,所以通常会自定义一些数据结构。我们也开发了一个可以支持 dwg 等格式的开发引擎,可以借鉴:
    fractal3D
        15
    fractal3D  
       2023 年 11 月 19 日
    转成图片是不合适的,因为 cad 不仅仅是预览,还需要有一些数据结构的交互,所以通常会自定义一些数据结构。我们也开发了一个可以支持 dwg 等格式的开发引擎,可以借鉴:
    分形三维,https://fractal3d.everxyz.com/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5672 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:10 PVG 15:10 LAX 23:10 JFK 02:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86