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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本文介绍了如何使用`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等格式的模型文件,大家不妨自行测试。

相关文章
|
13天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
6天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
1月前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
1天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
|
5天前
|
Cloud Native Apache 流计算
PPT合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
3040 10
PPT合集|Flink Forward Asia 2024 上海站
|
2天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
874 11
|
19天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
5863 16
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
12天前
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。