网页CAD绘制墙体和二次开发室内设计软件断点移动平面图

室内平面图中墙体是最重要的图形之一,其中砖墙、混凝土墙、钢架墙、隔墙、隔热墙等类型的墙在设计图中均有不同的表现方式,墙体的用途一般可以分为一般墙、虚墙、卫生隔断、阳台挡板、矮墙等,根据不同的需求绘制对应的墙体能够增强建筑设计的专业性和准确性。下面我们将介绍如何使用mxcad实现基础墙体功能,并展示其实践运用效果。

下述的墙体功能为一个基于mxcad开发的demo示例,因此存在无法百分百适配用户实际使用需求的情况,用户可在下述源码的基础上基于mxcad实现二次开发一次来适配实际需求。

功能开发

mxcad墙体功能的核心思想是通过继承mxcad中的自定义实体[McDbCustomEntity],自己实现一个独立的墙体对象,以及通过监测墙体相交的变化实现自主计算墙体绘制的一系列逻辑。如果你对mxcad中的自定义实体还不熟悉,点击[自定义实体开发文档链接]了解自定义实体是什么,内部存在的方法以及如何通过该实体实现自定义的功能实体。

1.封装计算墙体对应的多段线方法

在计算墙体多段线的方法中,我们需要传入墙体开始点、墙体结束点和墙体宽度,如果目标墙体存在与其他墙体相交产生拐点的情况还需要传入目标墙体生成的拐点。为了方便后续与其他墙体之间的比对和计算,我们将返回墙体的四个断点(pt1,pt2,pt3,pt4)、整体多段线(pl)、以及所在的中心直线(line),参考代码:

2.实现自定义墙体类:McDbTestWall

3.计算墙体相交后的断点和拐点。

计算与目标墙体相交的墙体,参考代码:

//相交墙体集合constintersectingWalls:McObjectId[]=[];/***startPoint:墙体开始点*endPoint:墙体结束点*wallWidth:墙体宽度*/const{pt1,pt3,line}=getPolyline(startPoint,endPoint,wallWidth);constlength=line.getLength().val;//设置过滤器,过滤出自定义实体letfilter=newMxCADResbuf();filter.AddString("McDbCustomEntity",5020);constss=newMxCADSelectionSet();ss.crossingSelect(pt1.x-length,pt1.y-length,pt3.x+length,pt3.y+length,filter);//与其他墙体相交if(ss.count()!==0){ss.forEach(id=>{constent=id.getMcDbEntity();if((entasMcDbCustomEntity).getTypeName()==="McDbTestWall"){intersectingWalls.push(id);}});}

根据相交墙体信息获取墙体断点与拐点,参考代码:

4.整合绘制墙体方法:MxdrawWalls

5.调用MxdrawWalls绘制墙体

6.夹点编辑、实体删除情况处理

调用夹点编辑监听事件,监听墙体变化,当墙体位置发生改变则触发墙体更新方法,参考代码:

constmxcad:McObject=MxCpp.getCurrentMxCAD();//监听wall夹点变化mxcad.mxdraw.on("objectGripEdit",(grips)=>{grips.forEach((grip)=>{constid=newMcObjectId(grip.id,grip.type==="mxcad"McObjectIdType.kMxCAD:McObjectIdType.kMxDraw);if(id.isErase())return;constwall=id.getMcDbEntity()asMcDbTestWall;if(!wall)return;if(wall.objectName==="McDbCustomEntity"&&(wallasMcDbCustomEntity).getTypeName()==="McDbTestWall"){//更新绘制wallconstnewWall=newMxdrawWalls();newWall.updateWall(id,true);mxcad.clearMxCurrentSelect();};})})

调用实体选择监听事件,监听实体选择,若监听到选择的墙体被删除则触法墙体更新方法,参考代码:

//监听mxcad选择,若wall被删除则触发更新constoldSelectIds:McObjectId[]=[];mxcad.on("selectChange",(ids:McObjectId[])=>{if(ids.length>0){ids.forEach(id=>{constentity=id.getMcDbEntity();if(entity&&entity.objectName==="McDbCustomEntity"&&(entityasMcDbCustomEntity).getTypeName()==="McDbTestWall"){oldSelectIds.push(id)}})}else{setTimeout(()=>{oldSelectIds.forEach(id=>{if(id.isErase()){constnewWall=newMxdrawWalls();newWall.updateWall(id,false);}});oldSelectIds.length=0;},0)}})

THE END
1.装修干货小白也能做装修效果图(附教程)我的老破小准备装修了,我发现了一个宝藏 app :酷家乐。可以自己随意做装修效果图,重点是免费免费免费 有了它新手小白也能轻松搞定装修效果图! 由于老破小实在太破了,若没有效果图指导,深怕一个不小心就翻车了,先做个设计图最保险! 下面跟大家说说操作步骤 第一步:搜索“酷家乐“,一定要电脑网页版https://m.dianping.com/ugcdetail/144082596?sceneType=0&bizType=29&msource=baiduappugc
2.快速绘制户型图,5分钟让你get完整家装设计!哔哩哔哩892 -- 0:51 App 第一次尝试用平板画水电布局设计,感觉很不错 1374 -- 0:31 App 别不信,10分钟绘制一套完整的水电图纸! 1085 -- 1:03 App 手机平板拍图纸,就能创建三维户型图还能直接在上面做装修设计 3898 -- 0:46 App 自己画水电图,轻松对接水电师傅! 5392 1 2:02 App 如何把一张平面图,快速https://m.bilibili.com/video/BV1oY4y1y7Tj
3.装修风格效果图怎么做?装修风格效果图制作指南装修风格效果图是装修设计中的重要环节,它可以帮助我们清晰地展示最终装修的视觉效果。以下是制作装修风格效果图的详细步骤:一、准备工作 1、确定风格 在开始制图之前,确定装修的基本风格,如现代简约、北欧、中式、工业风等。2、收集灵感 浏览设计杂志、网站、设计博客等,收集灵感和想法。3、测量空间 准确测量待https://baijiahao.baidu.com/s?id=1782596009437556126&wfr=spider&for=pc