网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next
网页CAD中选择图形进行编辑(WEB CAD SDK)HarmonyOS 鸿蒙Next 前言
在网页修改DWG,经常会有对图形进行编辑以及对图形的夹点进行编辑的需求,MxCAD提供的在线版CAD提供了这样的功能,效果如下:
测试地址: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
})
}
效果图如下:
本文提供的源码下载地址:
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
在鸿蒙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进行图形选择和编辑,可以通过以下步骤实现:
-
初始化SDK:首先,确保在鸿蒙Next项目中正确引入并初始化Web CAD SDK。
-
加载CAD文件:使用SDK提供的API加载需要编辑的CAD文件。
-
选择图形:通过鼠标或触摸事件监听用户操作,调用SDK的选择方法(如
selectObject
)来选中图形。 -
编辑图形:选中后,使用SDK提供的编辑功能(如移动、旋转、缩放等)对图形进行修改。
-
保存更改:编辑完成后,调用保存方法(如
saveFile
)将更改保存到文件或服务器。
通过这些步骤,你可以在鸿蒙Next中实现高效的CAD图形编辑功能。