网易首页 > 网易号 > 正文 申请入驻

WEB预览CAD(手机小程序浏览DWG)二次开发图层表的方法

0
分享至

前言

在DWG数据库中,图层存放在图层层表 McDbLayerTable() 当中,层表中每一条记录称为图层表记录对象 McDbLayerTableRecord() 。每一个图层表记录对象都对应一个图层,而且可以设置颜色、线型、关闭/打开、冻结等属性,其中DWG数据库默认总是有一个"0"层,该层不能被删除。

图层表操作

1. 获取当前控件的数据库图层表

我们可以通过调用 mxcad 中的 `MxCpp.getCurrentMxCAD()` 得到当前的控件, 然后调用控件实例的 getDatabase() 方法得到数据库实例 McDbDatabase() ,在该数据库实例中调用 getLayerTable() 方法我们就能获取到层表 McDbLayerTable() 。

[数据库层表 McDbLayerTable()]

(https://mxcadx.gitee.io/mxcad_docs/api/classes/2d.McDbLayerTable.html)

[图层表记录对象 McDbLayerTableRecord ]

(https://mxcadx.gitee.io/mxcad_docs/api/classes/2d.McDbLayerTableRecord.html)

[数据库实例 McDbDatabase()]

(https://mxcadx.gitee.io/mxcad_docs/api/classes/2d.McDbDatabase.html) 查看详细属性和方法说明。

import{ MxCpp} from"mxcad"
// 得到当前控件
constmxcad= MxCpp.getCurrentMxCAD();
// 拿到当前控件的数据库图层表
constlayerTable= mxcad.getDatabase().getLayerTable();

2. 添加图层

我们可以通过调用 mxcad 实例对象中的addLayer()方法添加自定义图层,并设置 drawLayer 属性将添加图层为绘制图层,点击 [McObject.addLayer()]:

(https://mxcadx.gitee.io/mxcad_docs/api/classes/2d.McObject.html#addlayer) 查看详细属性和方法说明。

import{ McApp} from"mxcad"
constmxcad= McApp.getCurrentMxCAD()
mxcad.addLayer("图层名称")
mxcad.drawLayer= "图层名称"

我们还可以通过实例化一个图层表记录对象 McDbLayerTableRecord() ,设置该图层颜色,线型,关闭/打开,冻结等属性后调用 add() 方法添加到图层层表中。

import{ McCmColor, MxCpp, McDbLayerTableRecord, McDb} from"mxcad"
// 得到当前控件
constmxcad= MxCpp.getCurrentMxCAD();
// 实例化一个图层数据对象并设置这个图层的一些属性
constlayer= newMcDbLayerTableRecord()
layer.color= newMcCmColor(0, 0, 0)
layer.isFrozen= true
layer.isLocked= true
layer.isOff= true
layer.lineWeight= McDb.LineWeight.kLnWt018
layer.name= "图层名称"
// 拿到当前控件的数据库图层表
constlayerTable= mxcad.getDatabase().getLayerTable();
// 将图层数据对象添加到图层表中会得到一个标识该图层数据的对象ID
constobjId= layerTable.add(layer)
// 更新显示
mxcad.updateDisplay()

3. 遍历所有图层

我们可以通过调用数据库层表 McDbLayerTable() 中的 getAllRecordId() 方法获取所有图层id,再调用 getMcDbLayerTableRecord() 方法返回图层表记录对象 McDbLayerTableRecord() ,得到所有图层数据。

import{ MxCpp} from"mxcad"
letlayerTable= MxCpp.getCurrentMxCAD().getDatabase().getLayerTable();
letaryId= layerTable.getAllRecordId();
aryId.forEach((id) =>{
letlayerRec= id.getMcDbLayerTableRecord();
if(layerRec=== null) return;
console.log(layerRec);
console.log("layerRec.color:"+ layerRec.color.getColorString());
console.log("layerRec.name:"+ layerRec.name);

4. 删除图层

我们得到目标图层表记录对象 McDbLayerTableRecord 后可调用该对象实例的 erase() 方法删除对象。

import{ MxCpp} from"mxcad"
letlayerTable= MxCpp.getCurrentMxCAD().getDatabase().getLayerTable()
letlayerId= layerTable.get("图层名字")
letlayerRec= layerId.getMcDbLayerTableRecord()
layerRec.erase()
// 更新显示
mxcad.updateDisplay()

此外,我们还可以通过图层表的JSON序列化和反序列化来删除图层。

import{ McCmColor, MxCpp, McDbLayerTableRecord, McDb} from"mxcad"
constlayerTable= mxcad.getDatabase().getLayerTable();
constlayerJsonString= layerTable.getJson()
constlayerJson= JSON.parse(layerJsonString)
// 只要保留以下几个名称的图层
constkeepLayerNames= ["0", "排水", "testLayer1"]
constkeepLayers= layerJson.filter((layerJsonObj)=>{
returnkeepLayerNames.includes(layerJsonObj.name)
constkeepLayersJsonString= JSON.stringify(keepLayers)
layerTable.setJson(keepLayersJsonString)
// 最后我们可以通过has方法检查图层是否存在 get方法传入图层名来得到对应的对象ID
console.log("testLayer1", layerTable.has("testLayer1"))
console.log("testLayer1", layerTable.get("testLayer1"))

mxcad 中修改图层的基础操作为得到数据库层表对象,然后根据层名得到层表记录对象,设置层表记录对应属性值。下面以让用户在CAD图上选择一个对象,然后操作对象所在的图层为例:

* 获取目标图层:

import{ MxCADSelectionSet, MxCADUiPrPoint} from"mxcad"
constss= newMxCADSelectionSet();
constgetPoint= newMxCADUiPrPoint()
getPoint.setMessage("请选择目标对象")
constpoint= awaitgetPoint.go()
if(!point) return
constindex= ss.pointSelect(point.x, point.y)
constent= ss.item(index).getMcDbEntity()
if(!ent) return
constlayerId= ent.layerId
letlayerRec= layerId.getMcDbLayerTableRecord()
console.log(layerRec)

*获取或设置图层是否被关闭:被关闭上的图层实体无法参与操作编辑。

constoffVal= layerRec.isOff
// 关闭图层
layerRec.isOff= true
// 更新显示
mxcad.updateDisplay()

*获取或设置图层是否被冻结:被冻结上的图层实体,不会参显示数据的生成,这样可以加快显示速度,和打开图纸的速度,它与关闭属性相比,冻结后的图层不但看不见,并且在内存中也不参加显示。

constfrozenVal= layerRec.isFrozen
// 冻结图层
layerRec.isFrozen= true
// 更新显示
mxcad.updateDisplay()

*获取或设置图层是否被锁定:锁定后的图层上的实体不能编辑,但可以选择。

constlockVal= layerRec.isLocked
// 锁定图层
layerRec.isLocked= true
// 更新显示
mxcad.updateDisplay(

*获取或设置图层颜色。

constcolorVal= layerRec.color
// 设置图层颜色为红色
layerRec.color= newMcCmColor(255,0,0)
// 更新显示
mxcad.updateDisplay()
在线示例

示例项目地址: [在线CAD梦想画图](https://demo.mxdraw3d.com:3000/mxcad/),点击图标打开图层特性管理器,可操作当前图纸内的所有图层,如下图所示:



特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
你在体制内捅过的最大篓子是啥? 网友: 那一刻我连自己埋哪都想好了

你在体制内捅过的最大篓子是啥? 网友: 那一刻我连自己埋哪都想好了

热闹的河马
2024-06-18 18:24:22
网友曝大S闪婚具俊晔真相:具说有9400万存款,大S误认为是人民币

网友曝大S闪婚具俊晔真相:具说有9400万存款,大S误认为是人民币

小咪侃娱圈
2024-06-16 11:13:35
这瓜真骚!!!

这瓜真骚!!!

一个岛岛
2024-06-17 23:56:32
内蒙男子怀疑妻子出轨,在房间安装7个摄像头,情夫身份令他崩溃

内蒙男子怀疑妻子出轨,在房间安装7个摄像头,情夫身份令他崩溃

飞云如水
2024-06-16 21:18:14
电动车新国标再度修订,车主们该何去何从?

电动车新国标再度修订,车主们该何去何从?

趣说世界哈
2024-06-17 07:34:26
沈阳地头蛇看上加代媳妇,趁拍戏对她侵犯,加代用尽力量复仇杀红眼

沈阳地头蛇看上加代媳妇,趁拍戏对她侵犯,加代用尽力量复仇杀红眼

古今档案
2024-05-20 16:03:56
杨澜采访中问林徽因儿子:“你母亲穿着旗袍,怎么爬房梁?”梁从诫用7个字霸气回怼

杨澜采访中问林徽因儿子:“你母亲穿着旗袍,怎么爬房梁?”梁从诫用7个字霸气回怼

小孩说
2024-06-18 11:03:07
国足是怎么把中锋角色弄丢的?14年前埋下的根,现在仍在付出代价

国足是怎么把中锋角色弄丢的?14年前埋下的根,现在仍在付出代价

篮球侍郎
2024-06-17 22:06:49
昔日“彩电大王”走向没落,被美公司欠款40亿,如今沦为三线品牌

昔日“彩电大王”走向没落,被美公司欠款40亿,如今沦为三线品牌

李哥三观很正
2024-06-14 17:51:29
大赛在即!阿根廷球衣2022世界杯冠军盾将被换为2021美洲杯冠军盾

大赛在即!阿根廷球衣2022世界杯冠军盾将被换为2021美洲杯冠军盾

刺头体育
2024-06-18 08:12:59
提档7天,避开沈腾,耗资2.5亿,谢霆锋这片要打响暑期档第一枪?

提档7天,避开沈腾,耗资2.5亿,谢霆锋这片要打响暑期档第一枪?

靠谱电影君
2024-06-18 20:06:30
中国人狂买100英寸电视的背后:价格竞争激烈 已杀到7999元

中国人狂买100英寸电视的背后:价格竞争激烈 已杀到7999元

快科技
2024-06-17 08:29:56
明星真实关系藏不住了!倪妮在台上领奖,高叶突然大声喝彩到破音

明星真实关系藏不住了!倪妮在台上领奖,高叶突然大声喝彩到破音

仙人掌说娱乐
2024-06-17 15:17:34
卢宁:为我的失误向队友们道歉 我想继续留在皇马效力

卢宁:为我的失误向队友们道歉 我想继续留在皇马效力

直播吧
2024-06-18 01:22:12
菲律宾摊牌了,公开要整个南沙群岛:055大驱已达战斗状态

菲律宾摊牌了,公开要整个南沙群岛:055大驱已达战斗状态

笔墨V
2024-06-18 23:18:58
2024年美国总统大选最新追踪民调

2024年美国总统大选最新追踪民调

特特农村生活
2024-06-18 22:13:56
俄24年来首次访朝,丢煤气罐的概率为0

俄24年来首次访朝,丢煤气罐的概率为0

难得君
2024-06-19 00:05:42
湖南:小伙捧鲜花表白女技师,做足疗一见钟情,网友:长得很哇塞

湖南:小伙捧鲜花表白女技师,做足疗一见钟情,网友:长得很哇塞

百晓史
2024-06-02 09:09:36
西方终于察觉不对!普京“靠山”浮出水面?北约加起来都打不过!

西方终于察觉不对!普京“靠山”浮出水面?北约加起来都打不过!

文雅笔墨
2024-06-16 15:29:46
天生“坏种”!被判10年的李天一出狱后,令人作呕的一幕出现了

天生“坏种”!被判10年的李天一出狱后,令人作呕的一幕出现了

琪琪故事记
2024-06-14 09:42:01
2024-06-19 01:08:49
CAD梦想画图
CAD梦想画图
是一款极速轻量级的CAD软件
574文章数 121关注度
往期回顾 全部

科技要闻

第一批小米车主,已经开始卖车了

头条要闻

土耳其率先破门 1-0领先格鲁吉亚 穆尔杜世界波

头条要闻

土耳其率先破门 1-0领先格鲁吉亚 穆尔杜世界波

体育要闻

对于凯尔特人来说 谁是MVP根本不重要

娱乐要闻

被曝新恋情,张碧晨王琳凯发声辟谣

财经要闻

官方:税务部门没有倒查30年的安排

汽车要闻

全球最低价 现代IONIQ 5N预售价39.88万

态度原创

教育
游戏
亲子
艺术
公开课

教育要闻

高考志愿填报,这些误区你应该知道

《艾尔登法环》DLC GS10分:新物品为游戏注入活力

亲子要闻

假如把感冒喝药变成颁奖典礼……

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版