网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next

网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next 前言

在网页修改DWG,经常会有对图形进行编辑以及对图形的夹点进行编辑的需求,MxCAD提供的在线版CAD提供了这样的功能,效果如下:

cke_237.png

测试地址:https://demo.mxdraw3d.com:3000/mxcad/

选择图形编辑功能

mxcad在默认配置下是开启了选择图形的编辑功能, 我们可以通过mxdraw提供的MxFun.setIniset实现各种初始化配置, 配置参数参考iniConfig,代码如下:

import { MxFun } from "mxdraw"

MxFun.setIniset({

// 启动夹点编辑功能, 开启单选图形(mxcad默认开启)

"EnableGripEidt": true,

// 开启多选

"multipleSelect": true

})

通过如上设置, 我们就可以通过鼠标对应的图形进行编辑和选择。

获取当前选择的图形:

import { MxCpp, MxCADUtility, McObjectId, McObjectIdType } from "mxcad"

// 需要等待createMxCad完成创建控件后才能得到

const objIds = MxCADUtility.getCurrentSelect()

objIds.forEach((objId: McObjectId) => {

if(objId.type === McObjectIdType.kMxCAD) {

console.log("CAD图形对象", objId.getMcDbEntity())

}

if(objId.type === McObjectIdType.kMxDraw) {

console.log("绘图对象", objId.getMxDbEntity())

}

})

MxCADSelectionSet

我们也可以通过MxCADSelectionSet进行选择:

import { MxCADSelectionSet, MxCADResbuf, MxCADUiPrPoint } from "mxcad"

const ss = new MxCADSelectionSet();

//选择所有图形元素

ss.allSelect();

ss.forEach(() => {

let ent = id.getMcDbEntity();

if (!ent) return;

console.log(ent)

})

const filter = new MxCADResbuf();

// 添加对象类型,选择集只选择文字类型的对象

filter.AddMcDbEntityTypes("TEXT,MTEXT");

ss.allSelect(filter);

// 第一种方式获取对象id集合

ss.getIds()

// 第二种方式获取对象id集合

ss.forEach((id) => {

let ent = id.getMcDbEntity();

if (!ent) return;

console.log(ent)

})

// 通过单个点选择

const getPoint = new MxCADUiPrPoint()

getPoint.go((point) => {

if(!point) return;

// 加filter过滤选择集, 这里只会选择文字对象

const index = ss.pointSelect(point.x, point.y, filter)

const objId = ss.item(index)

const ent = objId.getMcDbEntity()

console.log(ent)

})

// 通过鼠标选择多个对象

// 加filter过滤选择集, 这里只会选择文字对象

ss.userSelect("框选需要的对象", filter).then((is) => {

if(is) {

// 得到框选的两个选择点

const { pt1, pt2 } = ss.getSelectPoint()

ss.getIds()

ss.forEach((id) => {

let ent = id.getMcDbEntity();

if (!ent) return;

console.log(ent)

})

}

})

还可以手动将图形对象ID添加到当前选择中:

import { McApp } from "mxcad"

let mxcad = MxCpp.getCurrentMxCAD();

let id = mxcad.drawLine(0,0,1000,1000);

mxcad.addCurrentSelect(id);

选择编辑事件:

import { MxCpp } from "mxcad"

// 当图形被当前选中时会触发`selectChange`事件并回调当前已选中的id对象列表

MxCpp.getCurrentMxCAD().on("selectChange", (ids: McObjectId[]) => {})

// 当我们点击某个CAD图形并对其进行编辑或者夹点拖动后, mxdraw会触发`databaseModify`事件表示该图纸已被修改, 并且该事件只会触发一次

const mxdraw = MxCpp.getCurrentMxCAD().getMxDrawObject()

mxdraw.on("databaseModify", () => {

console.log("图纸被修改")

})

下面是一个将选中的图形颜色变成红色的完整代码示例, 可以根据如下代码理解图形的选择:

import { McCmColor, McObjectId, MxCpp, createMxCad } from "mxcad"

import { MxFun } from "mxdraw"

window.onload = async () => {

const mode = "SharedArrayBuffer" in window ? "2d" : "2d-st"

MxFun.setIniset({

// 启动夹点编辑功能, 开启单选图形(mxcad默认开启)

"EnableGripEidt": true,

// 开启多选

"multipleSelect": true

})

await createMxCad({

canvas: "#mxcad",

locateFile: (fileName) => {

return new URL(`/node_modules/mxcad/dist/wasm/${mode}/${fileName}`, import.meta.url).href

},

fileUrl: new URL("../public/test2.mxweb", import.meta.url).href,

fontspath: new URL("../node_modules/mxcad/dist/fonts", import.meta.url).href,

})

let oldColors: (McCmColor | undefined)[] = []

let oldIds: McObjectId[] = []

MxCpp.getCurrentMxCAD().on("selectChange", (ids: McObjectId[]) => {

// 还原颜色

oldIds.forEach((id, index) => {

const color = oldColors[index]

const ent = id.getMcDbEntity()

if(!ent) return

if(color) ent.trueColor = color

})

// 选中更改颜色

oldColors = ids.map((id) => {

const ent = id.getMcDbEntity()

if(!ent) return

const color = ent.trueColor.clone()

ent.trueColor = new McCmColor(255, 0, 0)

return color

})

oldIds = ids

})

}

效果图如下:

cke_238.png

本文提供的源码下载地址:

https://gitee.com/mxcadx/mxdraw-article/tree/master/mxcad选择图形编辑/demo.zip


更多关于网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在鸿蒙Next中,网页CAD中选择图形进行编辑可以通过使用Web CAD SDK实现。Web CAD SDK通常提供了一系列API,用于在网页中加载、显示和编辑CAD图形。在鸿蒙Next中,你可以通过集成Web CAD SDK来实现这些功能。

首先,确保你的开发环境已经配置好鸿蒙Next的开发工具。然后,将Web CAD SDK的库文件引入到你的项目中。你可以通过<script>标签在HTML文件中引入SDK,或者使用模块化的方式在JavaScript中导入。

接下来,初始化Web CAD SDK并加载CAD文件。通常,SDK会提供一个load方法,用于加载CAD文件。你可以通过以下代码示例来加载一个CAD文件:

const cadViewer = new WebCADViewer({
    container: document.getElementById('cad-container')
});

cadViewer.load('path/to/your/cad/file.dwg');

加载完成后,你可以使用SDK提供的API来选择图形进行编辑。例如,使用select方法选择特定的图形元素:

cadViewer.select('elementId');

选择图形后,你可以对其进行编辑操作,如移动、旋转、缩放等。Web CAD SDK通常会提供相应的API来实现这些操作。例如,使用move方法移动选中的图形:

cadViewer.move('elementId', { x: 10, y: 10 });

此外,Web CAD SDK还可能支持撤销、重做、图层管理等功能,具体实现可以参考SDK的官方文档。

在鸿蒙Next中,确保你的应用遵循鸿蒙的UI框架和事件处理机制,以便更好地与Web CAD SDK集成。通过这种方式,你可以在鸿蒙Next应用中实现网页CAD中选择图形进行编辑的功能。

更多关于网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用Web CAD SDK进行图形选择和编辑,可以通过以下步骤实现:

  1. 初始化SDK:首先,确保在鸿蒙Next项目中正确引入并初始化Web CAD SDK。

  2. 加载CAD文件:使用SDK提供的API加载需要编辑的CAD文件。

  3. 选择图形:通过鼠标或触摸事件监听用户操作,调用SDK的选择方法(如selectObject)来选中图形。

  4. 编辑图形:选中后,使用SDK提供的编辑功能(如移动、旋转、缩放等)对图形进行修改。

  5. 保存更改:编辑完成后,调用保存方法(如saveFile)将更改保存到文件或服务器。

通过这些步骤,你可以在鸿蒙Next中实现高效的CAD图形编辑功能。

回到顶部