首页 > 其他分享 >(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型

时间:2024-09-05 18:23:13浏览次数:9  
标签:const 三维 Mx3dGePoint 一个三维 push new 100 Mx3dShapeEdge CAD

前言

在网页CAD中进行三维建模是一项有趣的任务。本文将介绍如何利用mxcad3d来创建三维管道模型。该工具提供了一系列三维建模功能的API,使得建立复杂的管道结构变得简单直观。

公众号:梦想云图网页CAD。

安装

在此之前,需要先安装mxcad包,安装的步骤可以查看梦想CAD官方的入门教程:https://help.mxdraw.com/?pid=32,如下图:

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_3d

本次教程我们新建一个Test3dPipe目录,然后在此目录中按照官方入门教程进行初始化项目,最后使用VS Code打开这个项目,如下图: 

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_网页CAD_02

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_网页3D_03

本次教程的完整项目代码可以在这里下载:https://gitee.com/mxcadx/mxcad_docs/tree/master/examples3D/Test3dPipe.7z


代码编写及效果展示

1. 添加绘制按钮

在index.html文件中添加一个按钮,用于点击后绘制管道,如下图: 

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_网页CAD_04

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_网页3D_05

2. 编写绘制管道的函数

2.1本教程演示如何创建一个圆角方管,以下是在index.ts绘制圆角方管的函数代码,先导入需要用到的模块,代码如下:

// 从mxcad中导入需要用到的模块
import { MxCAD3DObject, MdGe, Mx3dAlgoFillet2d, Mx3dGeColor, Mx3dGeCSYSR, Mx3dGeDir, Mx3dGeMaterial, Mx3dGeomCircle,
Mx3dGePlane, Mx3dGePoint, Mx3dMkFace, Mx3dMkPipe, Mx3dShapeDownCast, Mx3dShapeEdge,
Mx3dShapeFace, Mx3dShapeWire, Mx3dWireTool } from "mxcad"

2.2编写绘制管道的函数,代码如下:

  function drawRoundRectPipe() {  
     // 管道用到的颜色材质  
    const grayColor = new Mx3dGeColor(MdGe.MxNameOfColor.Color_NOC_GRAY25);  
    const mat = new Mx3dGeMaterial(MdGe.MxNameOfMaterial.Material_NOM_Steel);  
     // 管道的路径,由直线和圆弧构成,必须C1连续。  
    let wire: Mx3dShapeWire;  
    {  
      const pt1 = new Mx3dGePoint(0, 0, 0);  
      const pt2 = new Mx3dGePoint(0, 0, 85);  
       // 直线段  
      const edge1 = new Mx3dShapeEdge(pt1, pt2);         
      const filletCsysr1 = new Mx3dGeCSYSR(new Mx3dGePoint(15, 0, 85), new Mx3dGeDir(0, -1, 0), new Mx3dGeDir(0, 0, 1));  
      const fillet1 = new Mx3dGeomCircle(filletCsysr1, 15);  
       // 圆弧  
      const edge2 = fillet1.Edge(0, Math.PI / 2);  
      const pt3 = new Mx3dGePoint(15, 0, 100);  
      const pt4 = new Mx3dGePoint(85, 0, 100);  
       // 直线段  
      const edge3 = new Mx3dShapeEdge(pt3, pt4);  
      const filletCsysr2 = new Mx3dGeCSYSR(new Mx3dGePoint(85, 15, 100), new Mx3dGeDir(0, 0, 1), new Mx3dGeDir(0, -1, 0));  
      const fillet2 = new Mx3dGeomCircle(filletCsysr2, 15);  
       // 圆弧  
      const edge4 = fillet2.Edge(0, Math.PI / 2);  
      const pt5 = new Mx3dGePoint(100, 15, 100);  
      const pt6 = new Mx3dGePoint(100, 85, 100);  
       // 直线段  
      const edge5 = new Mx3dShapeEdge(pt5, pt6);  
      const filletCsysr3 = new Mx3dGeCSYSR(new Mx3dGePoint(100, 85, 115), new Mx3dGeDir(1, 0, 0), new Mx3dGeDir(0, 0, -1));  
      const fillet3 = new Mx3dGeomCircle(filletCsysr3, 15);  
       // 圆弧  
      const edge6 = fillet3.Edge(0, Math.PI / 2);  
      const pt7 = new Mx3dGePoint(100, 100, 115);  
      const pt8 = new Mx3dGePoint(100, 100, 200);  
       // 直线段  
      const edge7 = new Mx3dShapeEdge(pt7, pt8);  
      const shape = Mx3dWireTool.ConnectEdgesToWires([edge1, edge2, edge3, edge4, edge5, edge6, edge7], 1e-6, false)[0];  
       // 得到最后连接组合而成的管道路径  
      wire = Mx3dShapeDownCast.Wire(shape);  
    }  
     // 管道横截面形状,由一个内圆角方形和外圆角方形之间构成的区域  
    let faceRoundRect:Mx3dShapeFace;  
    {  
      const pts: Mx3dGePoint[] = [];  
      const pt1 = new Mx3dGePoint(0, 0, 0);  
      const pt2 = new Mx3dGePoint(0, 10, 0);  
      const pt3 = new Mx3dGePoint(10, 10, 0);  
      const pt4 = new Mx3dGePoint(10, 0, 0);     
      pts.push(pt2);  
      pts.push(pt3);  
      pts.push(pt4);  
      pts.push(pt1);  
       // 四条直线段构成正方形  
      const edges: Mx3dShapeEdge[] = [];  
      const edge1 = new Mx3dShapeEdge(pt1, pt2);  
      const edge2 = new Mx3dShapeEdge(pt2, pt3);  
      const edge3 = new Mx3dShapeEdge(pt3, pt4);  
      const edge4 = new Mx3dShapeEdge(pt4, pt1);  
      edges.push(edge1);  
      edges.push(edge2);  
      edges.push(edge3);  
      edges.push(edge4);     
       // 四条直线段,循环进行二维倒圆角,圆角放入arcs数组。  
      const arcs: Mx3dShapeEdge[] = [];  
      for(let i = 0; i < edges.length; i++)  
      {  
         // 矩形所在平面,默认构造就是在XOY平面(右手系)  
        const pln = new Mx3dGePlane();  
         // 二维倒圆角算法对象  
        const f2d = new Mx3dAlgoFillet2d();  
        if (i < edges.length - 1) {  
           // 初始化时,传入两条要进行倒圆角的直线段,以及他们所在的平面(必须是在同一平面)  
          f2d.Init(edges[i], edges[i + 1], pln);  
           // 执行倒圆角算法,圆角半径为2  
          f2d.Perform(2);  
           // Result方法返回倒圆角算法在所在点执行倒圆角后的圆弧段,Result方法传入第一个参数是要执行倒圆角的点,因为我们当前是两个直线段倒圆角,所以就只有在这两个直线段的交点或延长后的交点倒圆角,只有这个一个交点,所以这里就传入这个交点,如果不是两直线段倒圆角,比如一个直线段和一个圆弧,他们就可能有两个交点,这时就要指定要返回哪个交点处倒圆角的结果了。第二个参数和第三个参数分别传入参与倒圆角的两条直线段,Result方法会将这两个参数修改为倒圆角之后改变过后的两条直线段。  
          arcs.push(f2d.Result(pts[i], edges[i], edges[i + 1]));  
        }  
        else{  
          f2d.Init(edges[i], edges[0], pln);  
          f2d.Perform(2);  
          arcs.push(f2d.Result(pts[i], edges[i], edges[0]));  
        }  
      }  
       // 连接所有的直线段和圆弧  
      const wireOuterShape = Mx3dWireTool.ConnectEdgesToWires([...edges, ...arcs], 1e-6, false)[0];  
       // 外圈  
      const wireOuter = Mx3dShapeDownCast.Wire(wireOuterShape);  
       // 内圈  
      const wireInner = wireOuter.Scaled(new Mx3dGePoint(5, 5, 0), 0.8);  
       // 内圈方向要进行个反向  
      wireInner.reverse();  
       // 生成内外圈之间构成的环面  
      const faceMaker = new Mx3dMkFace(wireOuter, true);  
      faceMaker.Add(wireInner);  
      faceRoundRect = faceMaker.Face();  
       // 移动到中心位置和管道路径起点一致  
      faceRoundRect.TranslateByVec(-5, -5, 0);  
    }  
   // 通过路径和截面生成管道形状  
    const pipe = new Mx3dMkPipe(wire, faceRoundRect);  
    const pipeShape = pipe.Shape();  
    
   // 给pipeShape设置材质颜色,放入模型文档并显示  
    mxcad3d.removeAll();  
    const doc = mxcad3d.getDocument();  
    const pipeShapeLabel = doc.addShapeLabel();  
    pipeShapeLabel.setShape(pipeShape);  
    pipeShapeLabel.setMaterial(mat);  
    pipeShapeLabel.setColor(grayColor);  
    mxcad3d.update();  
}

2.3然后给绘制按钮添加点击事件,触发绘制管道函数的调用,代码如下:

// 给button添加点击事件,点击后调用drawRoundRectPipe函数,进行圆角方管的绘制
// 立即执行函数 
(function addEventToButton(){  
  const btn = document.querySelector("button");  
  if (btn) {  
    btn.addEventListener("click", () =>  {  
      drawRoundRectPipe();  
    });  
  }  
})()

点击绘制管道按钮,效果如下图:

(VUE查看三维CAD图纸)在线三维CAD中创建一个三维管道模型_网页CAD_06

标签:const,三维,Mx3dGePoint,一个三维,push,new,100,Mx3dShapeEdge,CAD
From: https://blog.51cto.com/u_10455293/11929786

相关文章

  • 告别CAD运行难题:一键解决dbghelp.dll错误的方法
    当你在使用CAD(计算机辅助设计)软件时遇到dbghelp.dll错误,这可能会导致软件无法正常运行或频繁崩溃。不过,你不必过于担心,因为这个问题通常可以通过几种方法来解决。以下是一些简单而有效的方法,旨在帮助你一键解决dbghelp.dll错误。方法一:使用系统文件检查器(SFC)Windows操作系统......
  • autocad软件许可优化解决方案
    Autocad软件介绍Autodesk是世界领先的设计软件和数字内容创建公司,用于建筑设计、土地资源开发、生产、公用设施、通信、媒体和娱乐。始建于1982年,Autodesk提供设计软件、Internet门户服务、无线开发平台及定点应用,帮助遍及150多个国家的四百万用户推动业务,保持竞争力。公......
  • 用民间版CAD,厂长三领警告函!PLM和Autodesk见招拆招
    2021年我在一个泵厂上班,那时厂里没采购PLM、MES、ERP,我们享受着传统制造业最后的荣光。一个炎热的下午,兼管研发的庞总来到研发设计部,逮住我们的头头孙哥一顿臭骂。庞总人如其名,二百多斤的身板很有威慑力,发起火来眼镜随着鼻子上下抖动,我们都低头看鞋,怕笑出声。原因无他,因为我们的一......
  • Comsol 三维结构声子晶体禁带及其传输特性
    1.带隙结构:声子晶体的带隙结构描述了声子在材料中传播的允许和禁止频率范围。它以色散关系的形式表示,显示了声子频率与晶体中的波矢之间的关系。2.声子禁带:声子禁带是带隙结构中的一个频率范围,在这个范围内声子被禁止在晶体中传播。它是由于晶体结构的周期性排列导致的声......
  • 三维GIS开发必学框架|Cesium入门教程合集(提供完整版入门教程+视频)
    Cesium入门教程合集【Cesium入门教程】第一篇:Cesium简介与快速入门【Cesium入门教程】第二篇:基础操作与地图控制【Cesium入门教程】第三篇:Cesium实体(Entity)与数据源(DataSources)【Cesium入门教程】第四篇:Cesium图元(Primitive)与高级特性【Cesium入门教程】第五篇:Ces......
  • cuda编程[1]:一二三维网格和块的核函数
    目录前言核函数一维二维三维结果分析前言所有的代码下载链接:code。以下代码展示了如何在CUDA中打印网格和线程的索引信息。代码包括一维、二维和三维的网格和块的设置,并定义了多个内核函数来输出当前的索引信息。核函数打印线程索引__global__voidprint_idx_kerne......
  • cad.net 该死的填充
    捕捉点卡顿cad现在采用了一种密集填充就不显示的策略.系统变量hpmaxlines:默认值100000(十万).其实挺傻的,我们无论何时都要看到填充啊.不然我怎么删掉密集填充呢?不然我还以为没有填充再填充一次呢~它卡顿是发生在画图期间,鼠标经过填充区域密集计算交点,端点...密集计算长......
  • 如何在网页3D CAD中创建一个三维管道模型
    前言在网页CAD中进行三维建模是一项有趣的任务。本文将介绍如何利用mxcad3d来创建三维管道模型。该工具提供了一系列三维建模功能的API,使得建立复杂的管道结构变得简单直观。公众号:梦想云图网页CAD。安装在此之前,需要先安装mxcad包,安装的步骤可以查看梦想CAD官方的入门教程:htt......
  • 中望CAD 专业 v2024 解锁版下载与安装教程 (CAD三维制图)
    安装步骤ZWCAD2024-SP1.3-x64-Chs-Setup+Crack:ZWCAD2024-SP1.3-x64-Chs-Setup+Crack.zip1、下载解压后点击如下进行安装2、选择安装目录,最好不要安装在系统盘(C盘)3、安装中...耐心等待2-3分钟4、安装完先不要运行它,点击完成即可5、回到我们解压的文件夹里面,访问crack文件......
  • Autodesk Maya v2025 激活版下载及安装教程 (三维动画建模渲染)
    前言AutodeskMaya是一款用于三维动画、建模、仿真和渲染的软件。它是电影、电视、游戏和虚拟现实等领域中最流行的专业工具之一,被广泛用于制作复杂的特效和动画。功能完善,工作灵活,制作效率高,真实感强,是一款高端电影制作软件。它集成了最先进的动画和数字特效技术的别名和波前。......