梦想CAD控件关于比较问题

全图比较

怎么比较两个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);

}

原文地址:https://www.cnblogs.com/yzy0224/p/10860937.html

时间: 2024-07-30 17:14:47

梦想CAD控件关于比较问题的相关文章

梦想CAD控件 2019.01.20更新

下载地址:http://www.mxdraw.com/ndetail_10120.html1. 修改CAD不等比例块保存问题2. 修改CAD捕捉时,Z值对捕捉不准的影响3. 修改图片对象选择后,自动跑到最前面问题4. 增加shx文件搜索路径设置选项:ShxPath5. 增加回车运行前一个命令配制选项6.增加控制那些CAD图层可以用来选择对象的配制选项.7. 增加返回CAD块引用的剪切边界功能8. 增加字典遍历器返回当前对象名称函数.9. 增加服务器后台,静默批量dwg转jpg例程,非常适用.10

梦想CAD控件关于曲线问题

IMxDrawCurve 接口 控件中的曲线接口,实现了曲线的相关操作,如求曲线的长度,最近点,面积,曲线上任一点在曲线上的长度 切向方向,曲线交点,坐标变换,打断,偏移,离散等功能. 一.返回曲线组成的闭合区域面积 IMxDrawCurve::GetArea 返回曲线组成的闭合区域面积,具体详细如下: 参数 说明 [out] DOUBLE* pArea 返回闭合区域面积 C#代码计算闭合区域面积:         MxDrawPolyline pl = new MxDrawPolyline()

梦想CAD控件自定义实体实现

一.增加自定义实体对象 调用DrawCustomEntity函数,绘制一个自定义实体对象. 下面代码绘制一个自定义实体,C#代码实现如下: private void DrawMlineCommand() {     MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();     getPt.message = "点取第一点";     if (getPt.go() != MCAD_McUiPrStatus.mcOk)     {         r

梦想CAD控件 2018.7.26更新

下载地址: http://www.mxdraw.com/ndetail_107.html 1.  增加属性匹配功能 2.  增加List命令 3.  增加CAD图纸审图批注功能 4.  环形阵列功能 5.  修改有些CAD实体镜向不对 6.  修改在有些情况下,TrueType字体编辑后,显示不对问题 7.  增加CAD打印对话框调用时,可以设置打印区域参数 原文地址:https://www.cnblogs.com/yzy0224/p/9395162.html

CAD控件:梦想CAD控件功能更新 清除图上的所有高亮实体

1,修正得组里面的实体,把删除实体也返回的错误 2,修正代理实体改不了颜色问题. 3,修正捕捉块插入点,有时会跑到很远的位置问题. 4.MxDrawChange类增加ToBlockReference函数 5.增加MxDraw::DrawToJpgBase64,Mx_DrawToJpgBase64函数,把图纸上的内容保存为Base64字符编码的jpg图片 6.增加Mx_ClearAllHighlight函数,清除图上的所有高亮实体 7.修改缩放实体命令,在动态输入打开后,不能输入比例

CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机控件 Android开发控件 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android SDK 5 1.4. 给Eclipse 安装ADT插件  8 1.5. 运行Eclipse设置Android ADT

高精度快速预览打开dwg文件的CAD控件CAD Image DLL介绍及下载

CAD Image DLL对于DXF格式, DWG格式(AutoCAD R12 到AutoCAD 2004/2005), PLT 以及 HPGL/HPGL2文件都有快速的显示速度和精度,开发者再也不会为如何打开dwg文件?dwg格式用什么打开?犯愁了.CAD Image DLL价格经济,是理想的商业化的程序内置CAD控件,包括Visual Basic, MS Visual C++, MS Visual Studio .NET, Borland Delphi, Borland C++ Builde

手机,平板当中浏览和编辑DWG的CAD控件出来啦!支持ARX二次开发

控件2014.06.30 安卓开发最新更新 发布时间:2014-06-30 22:22:42 开发包下载地址:http://www.mxdraw.com/MxDraw6.0Android(20140630)TryVersion.exe 安卓手机上的apk安装包: http://www.mxdraw.com/MxDrawApp60.apk 安卓快速入门文档: http://www.mxdraw.com/AndroidDev.doc 1. 优化dwg显示速度,现在可以极速显示dwg,比市面上的任何软

CAD控件:界面控制说明和方法

更新时间:2015 年08 月24 日 界面控制说明 目录 1.1 说明: ......................................................................................................................................... 4 1.2 菜单栏 ................................................................