1.0.208 • Published 15 days ago

mxcad v1.0.208

Weekly downloads
-
License
MIT
Repository
github
Last release
15 days ago

快速入门

mxcad必须和mxdraw一起使用 如果你不了解mxdraw库 请参考:https://mxcadx.gitee.io/mxdraw_docs/

安装

CDN

<script scr="https://unpkg.com/mxdraw/dist/mxdraw.umd.js" ></script>
<script scr="https://unpkg.com/mxcad/dist/mxcad.umd.js"></script>

NPM

npm install mxdraw mxcad

基本用法

::: tip 重要提示

因为mxcad默认使用了SharedArrayBuffer 需要在服务端设置相应对应的响应头:

// nodejs 为例
const http = require('http');
http.createServer((req, res)=> {
    res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
    res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
})

:::

需要canvas元素

<div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>

推荐使用vite作为构建工具

import { createMxCad } from "mxcad"
createMxCad({
    canvas: "#myCanvas",
    locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
    fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
}).then((mxcad)=> {
    // 我想换一个文件显示?
    mxcad.openWebFile(new URL("../assets/test2.mxweb", import.meta.url).href)
    // 我想保存我修改后的文件?
    // (你可以在dom元素事件函数中调用,这样可以使用一些最新的浏览器特性保存文件)
    mxcad.saveFile()
})

示例参考

在git中查看示例 github | gitee

或者通过 执行以下命令查看所有实例

git clone https://github.com/mxcad/mxcad_docs
cd examples
npm install -g pnpm
pnpm install
pnpm run -r dev

你还可以通过演练场在线编辑修改代码查看运行后的效果

在vite中使用

1.安装vite

npm install vite -D

2.在项目根目录新建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: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
    <script type="module" src="./src/index.ts"></script>
</body>
</html>

3.在根目录下新建src目录 在src目录下新建index.ts文件(vite默认支持ts)代码如下:

import { createMxCad } from "mxcad"
import { MxFun } from "mxdraw"

createMxCad({
    canvas: "#myCanvas",
    locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
    fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
})

4.在src目录下创建assets并复制test.mxweb文件到该目录下

5.在根目录下创建vite.config.ts文件

import { defineConfig } from "vite"

export default defineConfig({
    server: {
        headers: {
          "Cross-Origin-Opener-Policy": "same-origin",
          "Cross-Origin-Embedder-Policy": "require-corp",
        }
    }
})

6.完成以上步骤在根目录执行如下命令

npx vite

在webpack中使用

1.安装

npm install webpack webpack-cli copy-webpack-plugin@5 -D

2.在根目录下创建webpack.config.js文件

const path = require('path');
// copy-webpack-plugin@5 兼容webpack4和5的版本请放心使用
const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
  mode: process.env.development === "development" ? "development" : "production",
  entry: './src/index.js',
  devServer: {
    static: './dist',
    headers: {
      "Cross-Origin-Opener-Policy": "same-origin",
      "Cross-Origin-Embedder-Policy": "require-corp"
    }
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js',
  },
  plugins: [
    new CopyWebpackPlugin([
      // 拷贝mxcad wasm 相关的核心代码 mxcad默认请求的路径是 /* 所有 需要把文件放dist2d下
      {
        from: "node_modules/mxcad/dist/wasm/2d/*",
        to: path.resolve(__dirname, "dist"),
        flatten: true
      },
      // 必须要字体文件来显示图纸中的文字,mxcad库默认请求URL路径为 /fonts/* 所有需要放在dist/fonts下
      {
        from: "node_modules/mxcad/dist/fonts",
        to: path.resolve(__dirname, "dist/fonts"),
        flatten: true,
        toType: "dir"
      },
    ])
  ],
  // mxcad 和 mxdraw库的js代码打包超过webpack默认限制的大小,需要设置hints: false关闭警告
  performance: {
    hints: false,
  }
};

3.在根目录新建index.html文件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>起步</title>
    <script src="https://unpkg.com/lodash@4.17.20"></script>
  </head>
  <body>
     <div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
    <script src="./src/index.js"></script>
  </body>
</html>

4.在根目录新建src目录 并在src目录下新建index.js文件

createMxCad({
    canvas: "#myCanvas",
    // 通过需要访问:http:xxx.com/test.mxweb 获取对应的文件
    // 请你自行提供该文件
    fileUrl: "test.mxweb"
})

5.完成上述步骤执行npx webpack serve命令运行查看效果

在h5中直接使用

<!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>Document</title>

    <script src="https://unpkg.com/mxdraw" crossorigin="anonymous"></script>
    <script src="https://unpkg.com/mxcad" crossorigin="anonymous"></script>
    <script>
        const { MxFun } = Mx
        const { createMxCad } = mxcad
        window.onload = function() {
            createMxCad({
                canvas: "#myCanvas",
                locateFile(fileName) {
                    /***
                     * 你可以不设置locateFile属性,
                     * 默认通过该https://unpkg.com CDN加载或者无法使用SharedArrayBuffer的情况
                     * mxcad会自动引入2d-st的资源
                     * 2d与2d-st的区别就是2d-st未使用worker多线程优化,
                     * 导致在打开图纸时会阻塞js线程导致打开图纸过程中页面卡死的情况
                     * 推荐使用2d wasm资源,你需要在服务器设置响应头:
                     * "Cross-Origin-Opener-Policy": "same-origin",
                     * "Cross-Origin-Embedder-Policy": "require-corp"
                     * 
                     * 并对于2d wasm资源遵从浏览器同源策略
                     * (也就是说 locateFile返回的url需要是和自己的服务器域名相同的域名端口才行)
                     * */
                    return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
                },
                // 请自行在静态服务器上添加test.mxweb文件 如http://xxx.com/test.mxweb
                fileUrl: "test.mxweb"
            })
        }
    </script>
</head>

<body>
    <div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas" style="height: 300px"></canvas></div>
</body>

</html>

createMxCad 的实现

// 这是createMxCad 实现的大致代码
// 如果你希望整个创建过程是透明公开的,
// 你可以不使用createMxCad 而是使用下面的代码自行创建
import { MxFun, loadCoreCode } from "mxdraw";
import { loadMxCADassembly } from "mxcad"
export default () => {
    loadCoreCode()
    .then(() =>  loadMxCADassembly((MxCpp)=> {
            MxFun.setIniset({
                EnableIntelliSelect: true
            })
            MxFun.createMxObject({
                canvasId: "myCanvas",
                isCPPMxCAD: true,
                callback(mxDraw, dom) {
                    mxDraw.initRendererParam({ webgl2: true });
                    mxDraw.setMouseMiddlePan(true);
                    mxDraw.on("initObject", () => {
                        const THREE = MxFun.getMxFunTHREE()
                        let size = new THREE.Vector2();
                        mxDraw.getRenderer().getSize(size);
                        const mxcadObj = MxCpp.App.CreateMxCAD(size.width, size.height,  "myCanvas", mxDraw.isWebgl2(), mxDraw.getId());
                        mxDraw.initMxCpp(mxcadObj);
                        mxcadObj.openWebFile("test2.mxweb");
                    });
                }
            })
        }
        ,
        (fileName: string)=> {
            // CDN 加载必须使用wasm/2d-st中的资源、因为github的限制无法使用wasm/2d 资源
            // 需要使用wasm/2d需要遵循浏览器同源策略或使用其他手段规避浏览器同源策略
            return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
        }),
    )
    return (<div style="height: 600px; overflow: hidden;"><canvas id="myCanvas" style="height: 300px"></canvas></div>)
}
1.0.208

15 days ago

1.0.207

16 days ago

1.0.206

20 days ago

1.0.205

21 days ago

1.0.204

22 days ago

1.0.203

28 days ago

1.0.202

1 month ago

1.0.201

1 month ago

1.0.200

1 month ago

1.0.198

1 month ago

1.0.199

1 month ago

1.0.197

1 month ago

1.0.195

1 month ago

1.0.194

2 months ago

1.0.193

2 months ago

1.0.192

2 months ago

1.0.191

2 months ago

1.0.189

2 months ago

1.0.190

2 months ago

1.0.187

2 months ago

1.0.188

2 months ago

1.0.186

2 months ago

1.0.185

2 months ago

1.0.184

3 months ago

1.0.183

3 months ago

1.0.182

3 months ago

1.0.181

3 months ago

1.0.180

3 months ago

1.0.178

3 months ago

1.0.179

3 months ago

1.0.177

3 months ago

1.0.176

3 months ago

1.0.175

3 months ago

1.0.174

3 months ago

1.0.173

3 months ago

1.0.172

3 months ago

1.0.171

4 months ago

1.0.169

4 months ago

1.0.170

4 months ago

1.0.168

4 months ago

1.0.167

4 months ago

1.0.165

4 months ago

1.0.166

4 months ago

1.0.164

4 months ago

1.0.163

4 months ago

1.0.161

4 months ago

1.0.160

4 months ago

1.0.162

4 months ago

1.0.159

4 months ago

1.0.158

5 months ago

1.0.156

5 months ago

1.0.155

5 months ago

1.0.157

5 months ago

1.0.154

5 months ago

1.0.153

5 months ago

1.0.152

5 months ago

1.0.150

5 months ago

1.0.151

5 months ago

1.0.149

5 months ago

1.0.148

5 months ago

1.0.147

5 months ago

1.0.146

5 months ago

1.0.145

5 months ago

1.0.144

5 months ago

1.0.143

5 months ago

1.0.142

5 months ago

1.0.141

5 months ago

1.0.140

6 months ago

1.0.132

6 months ago

1.0.131

6 months ago

1.0.134

6 months ago

1.0.133

6 months ago

1.0.130

6 months ago

1.0.139

6 months ago

1.0.136

6 months ago

1.0.135

6 months ago

1.0.138

6 months ago

1.0.137

6 months ago

1.0.101

8 months ago

1.0.107

7 months ago

1.0.106

7 months ago

1.0.109

7 months ago

1.0.108

7 months ago

1.0.103

8 months ago

1.0.102

8 months ago

1.0.105

8 months ago

1.0.104

8 months ago

1.0.121

7 months ago

1.0.120

7 months ago

1.0.123

7 months ago

1.0.122

7 months ago

1.0.129

6 months ago

1.0.128

6 months ago

1.0.125

6 months ago

1.0.124

6 months ago

1.0.127

6 months ago

1.0.126

6 months ago

1.0.110

7 months ago

1.0.112

7 months ago

1.0.111

7 months ago

1.0.118

7 months ago

1.0.117

7 months ago

1.0.119

7 months ago

1.0.114

7 months ago

1.0.113

7 months ago

1.0.116

7 months ago

1.0.115

7 months ago

1.0.100

8 months ago

1.0.88

8 months ago

1.0.87

8 months ago

1.0.86

8 months ago

1.0.85

9 months ago

1.0.89

8 months ago

1.0.91

8 months ago

1.0.90

8 months ago

1.0.95

8 months ago

1.0.94

8 months ago

1.0.93

8 months ago

1.0.92

8 months ago

1.0.99

8 months ago

1.0.98

8 months ago

1.0.97

8 months ago

1.0.96

8 months ago

1.0.62

10 months ago

1.0.61

10 months ago

1.0.60

10 months ago

1.0.66

10 months ago

1.0.65

10 months ago

1.0.64

10 months ago

1.0.63

10 months ago

1.0.69

9 months ago

1.0.68

10 months ago

1.0.67

10 months ago

1.0.73

9 months ago

1.0.72

9 months ago

1.0.71

9 months ago

1.0.70

9 months ago

1.0.77

9 months ago

1.0.76

9 months ago

1.0.75

9 months ago

1.0.74

9 months ago

1.0.79

9 months ago

1.0.78

9 months ago

1.0.80

9 months ago

1.0.84

9 months ago

1.0.83

9 months ago

1.0.82

9 months ago

1.0.81

9 months ago

1.0.44

12 months ago

1.0.43

12 months ago

1.0.42

12 months ago

1.0.41

12 months ago

1.0.48

12 months ago

1.0.47

12 months ago

1.0.46

12 months ago

1.0.45

12 months ago

1.0.49

12 months ago

1.0.51

11 months ago

1.0.50

12 months ago

1.0.55

10 months ago

1.0.54

11 months ago

1.0.53

11 months ago

1.0.52

11 months ago

1.0.59

10 months ago

1.0.58

10 months ago

1.0.57

10 months ago

1.0.56

10 months ago

1.0.39

1 year ago

1.0.38

1 year ago

1.0.40

1 year ago

1.0.29

1 year ago

1.0.28

1 year ago

1.0.27

1 year ago

1.0.33

1 year ago

1.0.32

1 year ago

1.0.31

1 year ago

1.0.30

1 year ago

1.0.37

1 year ago

1.0.36

1 year ago

1.0.35

1 year ago

1.0.34

1 year ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.22

1 year ago

1.0.21

1 year ago

1.0.20

1 year ago

1.0.26

1 year ago

1.0.25

1 year ago

1.0.24

1 year ago

1.0.23

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

0.0.2

1 year ago

1.0.0

1 year ago