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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
简介: 本文介绍了如何使用`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等格式的模型文件,大家不妨自行测试。

相关文章
|
11天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
115 18
|
18天前
|
开发框架 前端开发 JavaScript
uniapp开发鸿蒙,是前端新出路吗?
相信不少前端从业者一听uniapp支持开发鸿蒙Next后非常振奋。猫林老师作为7年前端er也是非常激动,第一时间体验了下。在这里也给大家分享一下我的看法
66 17
|
23天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
74 3
|
21天前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
52 0
|
2月前
|
XML 前端开发 JavaScript
前端大神揭秘:如何让你的网页秒变炫酷,让用户欲罢不能的5大绝招!
前端开发不仅是技术活,更是艺术创作。本文揭秘五大前端开发技巧,包括合理运用CSS动画、SVG图形、现代JavaScript框架、优化网页性能及注重细节设计,助你打造炫酷网页,提升用户体验。
90 30
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
63 5
|
2月前
|
缓存 监控 前端开发
前端性能优化实战:从加载速度到用户体验
前端性能优化实战:从加载速度到用户体验
|
3月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
231 14
|
3月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
67 0
|
3月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。