(前端3D模型开发)网页三维CAD中加载和保存STEP模型

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
简介: 本文介绍了如何使用`mxcad3d`库在网页上实现STEP格式三维模型的导入与导出。首先,通过官方教程搭建基本项目环境,了解核心对象如MxCAD3DObject、Mx3dDbDocument等的使用方法。接着,编写了加载和保存STEP模型的具体代码,包括HTML界面设计和TypeScript逻辑实现。最后,通过运行项目验证功能,展示了从模型加载到保存的全过程。此外,`mxcad3d`还支持多种其他格式的三维模型文件操作。

前言

1.在网页CAD中进行三维建模的时候经常需要导入和导出STEP格式的三维模型文件,本文将介绍如何使用mxcad3d来导入导出STEP三维模型。
2.首先我们需要学习mxcad3d的基本使用方法,可以通过官方的入门教程来搭建一个最基本的项目模板,快速入门API接口的使用说明

代码编写和效果展示

1.根据官方快速入门教程来创建一个名为Test3dImportAndExport的项目,如下图:
1732263264955.jpg

2.接口说明

MxCAD3DObject视图文档对象;创建视图文档对象并通过canvas进行初始化,该对象包含一个用于显示的canvas视图,以及一个保存模型信息的文档。
Mx3dDbDocument 文档对象;视图文档对象中包含一个此类型的文档对象,文档对象可以在内部创建标签对象用于保存模型的形状以及颜色材质贴图等信息。
Mx3dDbLabel标签对象;由文档对象创建,通过标签对象的各种方法可以保存模型的形状以及各种信息。

加载模型的API,代码如下:

       /**
        * 读取模型文件并解析为文档。
        * @param theFile - 要读取的文件对象。
        * @param theFormat - 模型文件格式。
        * @returns 返回一个 Promise,解析结果为布尔值,表示成功或失败。
        */
       read(theFile: File, theFormat: MdGe.MxFormat): Promise<boolean>;

read方法是Mx3dDbDocument对象的一个方法,此方法用于读取指定格式的模型文件,并且会在Mx3dDbDocument对象中创建标签用于保存模型信息;该方法接受一个File类型的对象,以及MdGe.MxFormat枚举类型指定的模型格式,以下是MdGe.MxFormat枚举所定义的所有枚举值:

       enum MxFormat {
   
           Format_Unknown = 0,
           Format_Image = 1,
           Format_3DS = 2,
           Format_3MF = 3,
           Format_AMF = 4,
           Format_COLLADA = 5,
           Format_DXF = 6,
           Format_FBX = 7,
           Format_GLTF = 8,
           Format_IGES = 9,
           Format_OBJ = 10,
           Format_OCCBREP = 11,
           Format_OFF = 12,
           Format_PLY = 13,
           Format_STEP = 14,
           Format_STL = 15,
           Format_VRML = 16,
           Format_X3D = 17,
           Format_Blender = 18
       }

保存模型的API:

/**
        * 写入文档到指定路径。
        * @param theFilePath - 文件路径。
        * @param theFormat - 文件格式。
        * @returns 返回布尔值,表示是否成功写入。
        */
       write(theFilePath: string, theFormat: MdGe.MxFormat): boolean;

write方法是Mx3dDbDocument对象的一个方法,此方法用于保存为指定格式的模型文件;该方法接受一个File类型的对象,以及MdGe.MxFormat枚举类型指定的模型格式。

3.编写导入和保存STEP模型文件的代码
在index.html中插入两个按钮"打开STEP模型","保存为STEP文件" ;index.html的完整代码如下所示:

   <!DOCTYPE html>
   <html lang="en">
   <head>
       <meta charset="UTF-8">
       <meta http-equiv="X-UA-Compatible" content="IE=edge">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>vite use mxcad</title>
   </head>
   <body>
       <div style="height: 800px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
       <button id="open">打开STEP模型</button>
       <button id="save">保存为STEP文件</button>
       <script type="module" src="./src/index.ts"></script>
   </body>
   </html>

在src/index.ts中编写两个函数loadSTEP(),saveSTEP()分别用于打开STEP模型、保存为STEP文件,src/index.ts的完整代码如下所示:

import {
    MdGe, Mx3dGeColor, Mx3dGeCSYSR, Mx3dGeDir, Mx3dGePoint, Mx3dMkBox, Mx3dMkSphere, MxCAD3DObject } from "mxcad";
   // 创建mxcad3d对象
   const mxcad3d = new MxCAD3DObject();
   // 初始化mxcad3d对象
   mxcad3d.create({
   
     // canvas元素的css选择器字符串(示例中是id选择器),或canvas元素对象
     canvas: "#myCanvas",
     // 获取加载wasm相关文件(wasm/js/worker.js)路径位置
     locateFile: (fileName) => new URL(`/node_modules/mxcad/dist/wasm/3d/${
     fileName}`, import.meta.url).href
   });
   // 初始化完成
   mxcad3d.on("init", () => {
   
     console.log("初始化完成");
   });
   function loadSTEP() {
   
     const input = document.createElement("input");
     input.type = "file";
     input.style.display = "none";
     input.accept = ".step,.stp";
     input.onchange = async () => {
   
       if (!input.files) return;
       const aFile = input.files[0];
       const doc = mxcad3d.getDocument();
       const status = await doc.read(aFile, MdGe.MxFormat.Format_STEP);
       console.log(aFile.name + ": 读取" + status ? "成功!" : "失败!");
     };
     input.click();
   }
   function saveSTEP() {
   
     mxcad3d.removeAll();  // 将视图文档对象中的文档内容清空,并清除视图中显示的图形
     // 创建一些图形
     const box = new Mx3dMkBox(new Mx3dGePoint(), new Mx3dGePoint(100, 100, 100)); // 创建一个立方体,对角点在(0,0,0)和(100,100,100)
     const boxShape = box.Shape(); // 获取立方体图形对象
     const sphere = new Mx3dMkSphere(new Mx3dGeCSYSR(new Mx3dGePoint(200, 50, 50), new Mx3dGeDir(0, 0, 1)), 50); // 创建一个球体,半径为50,中心点在(200,50,50)
     const sphereShape = sphere.Shape(); // 获取球体图形对象
     // 创建一些颜色
     const green = new Mx3dGeColor(MdGe.MxNameOfColor.Color_NOC_GREEN);  // 创建一个颜色对象,颜色为绿色
     const red = new Mx3dGeColor(MdGe.MxNameOfColor.Color_NOC_RED);  // 创建一个颜色对象,颜色为红色
     const doc = mxcad3d.getDocument(); // 获取文档对象
     const boxShapeLabel = doc.addShapeLabel(); // 文档中增加一个boxShapeLabel标签,用于保存boxShape形状和对应的颜色等信息
     const sphereShapeLabel = doc.addShapeLabel(); // 文档中增加一个sphereShapeLabel标签,用于保存sphereShape形状和对应的颜色等信息
     boxShapeLabel.setShape(boxShape); // boxShapeLabel保存boxShape形状
     boxShapeLabel.setColor(green); // boxShapeLabel的颜色为绿色
     sphereShapeLabel.setShape(sphereShape); // sphereShapeLabel保存sphereShape形状
     sphereShapeLabel.setColor(red); // sphereShapeLabel的颜色为红色
     mxcad3d.update();  // 更新视图显示
     const status = doc.write("mode.step", MdGe.MxFormat.Format_STEP);
     console.log("保存" + (status ? "成功!" : "失败!"));
   } 
   // 立即执行函数,给button添加点击事件
   (function addEventToButton() {
   
     const btnOpen = document.querySelector("#open");
     const btnSave = document.querySelector("#save");
     if (btnOpen && btnSave) {
   
       btnOpen.addEventListener("click", () => {
   
         loadSTEP();
       });
       btnSave.addEventListener("click", () => {
   
         saveSTEP();
       });
     }
   })();

4.运行项目,测试打开STEP模型
按照官方快速入门教程,新建终端,运行npx vite命令来运行项目,观察效果如下:
1732263745406.jpg
模型被成功打开,如下图:
1732263814652.jpg

5.测试保存为STEP文件
点击“保存为STEP文件”按钮后,首先移除了原来导入的模型,然后创建了一个立方体和球体并显示,最后点击对话框的保存按钮,模型就成功保存为了STEP模型文件,保存成功后可再次通过“打开STEP模型”按钮来打开刚刚保存的mode.step这个模型文件:
1732264092108.jpg

6.mxcad3d 不止能打开STEP格式的模型文件,还能打开STL、IGES等格式的模型文件,大家不妨自行测试。

相关文章
Echarts实战案例代码(19):利用visualMap视觉映射组件制作五色玫瑰工作进程图
Echarts实战案例代码(19):利用visualMap视觉映射组件制作五色玫瑰工作进程图
235 0
|
3天前
|
人工智能 前端开发 PyTorch
【AI系统】动态图与静态图转换
从 TensorFlow、PyTorch 到 PaddlePaddle、MindSpore、MegEngine,主流 AI 框架经历了动静分离、动静结合到动静统一的发展过程。这些框架通过动态图转静态图技术,实现了计算效率与灵活性的平衡,显著提升了 AI 开发效率和产品应用的便利性。
34 14
|
2月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
679 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
3月前
|
JavaScript 前端开发 API
在线三维CAD中创建一个三维管道模型(网页浏览编辑三维CAD)
本文介绍了如何使用mxcad3d创建三维管道模型。mxcad3d提供了丰富的API,使复杂的管道结构设计变得直观简便。首先需安装mxcad包并初始化项目。接着,通过编写JavaScript函数实现圆角方管的绘制,并将其添加到web界面中。点击绘制按钮即可生成管道模型并实时展示。这为网页CAD中的三维建模任务提供了强大支持。相关代码与项目可在[mxcad3d官方仓库](https://gitee.com/mxcadadox/mxcad_docs/tree/master/examples3D/Test3dPipe.7z)获取。
在线三维CAD中创建一个三维管道模型(网页浏览编辑三维CAD)
|
2月前
|
JSON 数据格式 计算机视觉
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
本文介绍了如何使用OpenCV和Python根据JSON标注文件获取并绘制目标区域,同时可将裁剪的图像单独保存。通过示例代码,展示了如何读取图片路径、解析JSON标注、绘制标注框并保存裁剪图像的过程。此外,还提供了相关的博客链接,供读者进一步学习。
44 0
|
4月前
|
Web App开发 应用服务中间件 定位技术
three.js:三维模型加载量测试
three.js:三维模型加载量测试
192 4
|
4月前
|
存储 前端开发 定位技术
osgEarth使用笔记4——加载矢量数据
osgEarth使用笔记4——加载矢量数据
140 0
|
5月前
【wavesurfer.js实战范例】多区域音频标注(含区域实时切换显示)
【wavesurfer.js实战范例】多区域音频标注(含区域实时切换显示)
158 0
|
7月前
|
数据可视化
GEE错误——影像加载过程中出现的图层无法展示的解决方案
GEE错误——影像加载过程中出现的图层无法展示的解决方案
118 0
|
编解码 关系型数据库 计算机视觉
【OpenCV图像处理1】图像&视频的加载与显示(上)
【OpenCV图像处理1】图像&视频的加载与显示(上)
266 0