- MxDraw 云图
- 快速入门
- 前端 mxdraw 和 mxcad 库预览编辑图纸
- 后台使用 Node.js 调用梦想 API
- CAD 与 GIS 集成说明
- 梦想云图 Node.JS 服务
- iOS 开发
- 安卓开发
- 网页 CAD 开发
- 网页快速入门 aspaps.netphpjava
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义实体
- 自定义命令
- 光栅图处理
- 图面搜索
- 控件事件
- 打印控制
- 界面控制
- COM 开发
- 视频教程
- VB 快速入门
- Delphi 快速入门
- CSharp 快速入门
- java 快速入门
- QT 快速入门
- 易语言快速入门
- Powerbuilder 快速入门
- wpf 控件入门
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义命令
- 自定义实体
- 打印控制
- 控件事件
- 图面搜索
- 光栅图处理
- 界面控制
- C++ 开发
- C++ bulider 快速入门
- C++ 快速入门(VS2010)
- C++ 快速入门(com 接口)
- 图纸数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展程序
- 扩展数据
- 自定义函数
- 自定义实体
- 光栅图处理
- 图面搜索
- 控件事件
- 界面控制
- 常见问题
- 试用技术服务申请
- 会员下载最新程序
- 备用下载
- 控件安装运行说明
- 控件最新更新
- 控件功能简介
- 控件图形数据库
- 控件界面控制
- 控件命令执行原理
- 控件系统变量说明
- 控件常见问题说明
- 修改对象属性
- 网页加载 CAD 图纸的两个方案
- MxDraw3D 控件
- 前端基础工程化知识
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
比较
全图比较
怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方法。点击此处在线演示。
实现图纸比较功能,首先将两个控件放入网页中,js代码如下:
<p align="center"> <object classid="clsid:74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl1" codebase="http://www.mxdraw.com/MxDrawX52.CAB#version=7.0.0.1" width=48% height=85% align="left"> <param name="_Version" value="65536"> <param name="_ExtentX" value="24262"> <param name="_ExtentY" value="16219"> <param name="_StockProps" value="0"> <param name="IsRuningAtIE" value="1"> <param name="EnablePrintCmd" value="1"> <param name="ShowStatusBar" value="1"> <param name="ShowMenuBar" value="1"> <param name="ShowToolBars" value="1"> <param name="ShowCommandWindow" value="1"> <param name="ShowModelBar" value="1"> <param name="Iniset" value="AutoActive=N,LoadMrx=PropertyEditor"> <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt"> <SPAN STYLE="color:red">不能装载CAD控件。请确认你可以连接网络或者检查浏览器的选项中安全设置。<a href="http://www.mxdraw.com/MxDrawX52.msi">http://www.mxdraw.com/MxDrawX52.msi 安载CAD控件</a></SPAN> </object> <object classid="clsid:74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl2" codebase="http://www.mxdraw.com/MxDrawX52.CAB#version=7.0.0.1"width=48% height=85% align="right"> <param name="_Version" value="65536"> <param name="_ExtentX" value="24262"> <param name="_ExtentY" value="16219"> <param name="_StockProps" value="0"> <param name="IsRuningAtIE" value="1"> <param name="EnablePrintCmd" value="1"> <param name="ShowStatusBar" value="1"> <param name="ShowMenuBar" value="1"> <param name="ShowToolBars" value="1"> <param name="ShowCommandWindow" value="1"> <param name="ShowModelBar" value="1"> <param name="Iniset" value="AutoActive=N,LoadMrx=PropertyEditor"> <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt"> <SPAN STYLE="color:red">不能装载CAD控件。请确认你可以连接网络或者检查浏览器的选项中安全设置。<a href="http://www.mxdraw.com/MxDrawX52.msi">http://www.mxdraw.com/MxDrawX52.msi 安载CAD控件</a></SPAN> </object>
首先通过id得到两个控件,返回控件的数据库对象,把两个控件里面不同的内容标记出来,具体实现js代码如下:
function AllCompare() { var ocx1 = document.getElementById("MxDrawXCtrl1"); var ocx2 = document.getElementById("MxDrawXCtrl2"); var database1 = ocx1.GetDatabase(); var database2 = ocx2.GetDatabase(); var filter = ocx1.NewResbuf(); var compare1 = ocx1.NewComObject("IMxDrawCompare"); //开始比较 //参数一为比较时使用的原始文件 参数二为修改后的,新的文件 参数三为过滤条件 compare1.Do(database1, database2, filter); //返回比较后,被修改的曲线id var aryDifferent1 = compare1.GetCurveIdsOfTheDifferent(); //把修改的地方,标记出来 //参数一为缩放比例 //参数二为当前图纸,是新修改的图纸,该变量为true,那么在原图不能找到的对象,为新增加对象 compare1.DrawFlag(1.0,false); // 反过来比较一下,用来确定,那些对象是新增加的。 var compare2 = ocx1.NewComObject("IMxDrawCompare"); compare2.Do(database2, database1, filter); var aryDifferent2 = compare2.GetCurveIdsOfTheDifferent(); compare2.DrawFlag(1.0,true); var iErase = 0; var iModify = 0; var iAdd = 0; for (var i = 0;i < aryDifferent1.Count; i++) { //返回链表中的指定位置的对象id var lId = aryDifferent1.AtObjectId(i); //返回比较后,被修改的曲线的位置。用于图上标记被修改的对象 if(compare1.GetIsErase(lId)) { iErase = iErase + 1; } else { iModify = iModify +1; } } for(var i = 0; i < aryDifferent2.Count;i++) { var lId = aryDifferent2.AtObjectId(i); if(compare2.GetIsErase(lId)) { iAdd = iAdd + 1; } } var modfColor = ocx1.NewComObject("IMxDrawModifyTheColor"); modfColor.Do(ocx1.GetDatabase(),3289650); //把指定实体颜色 modfColor.DoEntity(aryDifferent1,255); alert(iModify + "对象修改," + iErase + "对象删除," + iAdd + "对象被增加"); }
网页中演示效果如下,用户可以比教在两个控件里面的图纸内容。
选择范围比较
首先通过id得到两个控件,返回控件的数据库对象,把两个控件里面不同的内容标记出来,具体实现js代码如下:
function DoImpCompare(points, filter) { var ocx1 = document.getElementById("MxDrawXCtrl1"); var ocx2 = document.getElementById("MxDrawXCtrl2"); var database1 = ocx1.GetDatabase(); var database2 = ocx2.GetDatabase(); var compare1 = ocx1.NewComObject("IMxDrawCompare"); compare1.Bound = points; compare1.Do(database1, database2, filter); var aryDifferent1 = compare1.GetCurveIdsOfTheDifferent(); compare1.DrawFlag(1.0, false); // 反过来比较一下,用来确定,那些对象是新增加的。 var compare2 = ocx1.NewComObject("IMxDrawCompare"); compare2.Bound = points; compare2.Do(database2, database1, filter); var aryDifferent2 = compare2.GetCurveIdsOfTheDifferent(); compare2.DrawFlag(1.0, true); var iErase = 0; var iModify = 0; var iAdd = 0; for (var i = 0; i < aryDifferent1.Count; i++) { var lId = aryDifferent1.AtObjectId(i); if (compare1.GetIsErase(lId)) { iErase = iErase + 1; } else { iModify = iModify + 1; } } for (var i = 0; i < aryDifferent2.Count; i++) { var lId = aryDifferent2.AtObjectId(i); if (compare2.GetIsErase(lId)) { iAdd = iAdd + 1; } } alert(iModify + "对象修改," + iErase + "对象删除," + iAdd + "对象被增加"); }
用户可以选取范围内的图纸作比较,具体实现js代码如下:
function BoundCompare() { var ocx1 = document.getElementById("MxDrawXCtrl1"); var getPt = ocx1.NewComObject("IMxDrawUiPrPoint"); getPt.message = "点取第一点"; if(getPt.go() != 1) return; var frstPt = getPt.value(); var getCorner = ocx1.NewUtility(); var secondPt = getCorner.GetCorner(frstPt,"点取第二点:"); if(secondPt == null) return; var points = ocx1.NewComObject("IMxDrawPoints"); points.Add2(frstPt); points.Add2(secondPt); var filter = ocx1.NewResbuf(); DoImpCompare( points, filter); }
网页中演示效果如下,用户可以比教在两个控件里面的图纸内容。
选择圆形范围比较
通过圆形范围把两个控件里面不同的内容标记出来,首先需要动态画一个圆,具体实现js代码如下:
function DoDynWorldDrawFun(dX, dY, pWorldDraw, pData) { var sGuid = pData.Guid; var ocx1 = document.getElementById("MxDrawXCtrl1"); ocx1.SetEventRet(0); if (sGuid == "DrawCircle") { var pt1 = pData.GetPoint("pt1"); if (pt1 == null) return; var pt2 = ocx1.NewPoint(); pt2.x = dX; pt2.y = dY; var dR = pt1.DistanceTo(pt2); pWorldDraw.DrawCircle(pt1.x, pt1.y, dR); } }
用户可以选取圆形范围内的图纸作比较,具体实现js代码如下:
function CircleCompare() { var mxOcx = document.getElementById("MxDrawXCtrl1"); var getPt1 = mxOcx.NewComObject("IMxDrawUiPrPoint"); getPt1.message = "指定圆心"; if (getPt1.go() != 1) { return; } var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint"); getPt2.message = "指定圆上一点"; getPt2.basePoint = getPt1.value(); var spDrawData = getPt2.InitUserDraw("DrawCircle"); spDrawData.SetPoint("pt1", getPt1.value()); getPt2.setUseBasePt(true); if (getPt2.go() != 1) { return; } var cen = getPt1.value(); var pt2 = getPt2.value(); var dR = cen.DistanceTo(pt2); var circle = mxOcx.NewEntity("IMxDrawCircle"); circle.Center = cen; circle.Radius = dR; var points = circle.GetSamplePoints(0.1); if (points.Count < 3) { alert("圆太小"); } var filter = mxOcx.NewResbuf(); DoImpCompare(points, filter); }
网页中演示效果如下,用户可以比教在两个控件里面的图纸内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论