全图比较

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

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

  1. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  2. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  3. 梦想CAD控件图层COM接口知识点

    梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...

  4. 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD

    (百度百科连接) 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...

  5. 梦想CAD控件文字COM接口知识点

    一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...

  6. 梦想CAD控件网页版搜索图面上的文字

    在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...

  7. 梦想CAD控件COM接口自定义命令

    在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...

  8. 梦想CAD控件网页版关于自定义命令

    在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...

  9. 梦想CAD控件安卓界面控制

    CAD控件界面上所有元素都可以控制显示或隐藏,下面将逐一介绍详细用法. 设置工具文件 MxFunction.setToolFile 设置工具文件.详细说明如下: 参数 说明 String sFile ...

  10. 梦想CAD控件安卓交互绘图

    在cad使用过程中,动态绘制的使用会使我们绘图速度大大加快.在此演示中,我们绘制了直线.多段线.点.样条线.圆.圆弧.椭圆.椭圆弧等实体. 用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明 ...

随机推荐

  1. 怎样在win8系统下建立wifi热点

     2012年10月26日,微软正式推出Windows 8操作系统,不少用户也都升级到了最新的Win8.大家知道.在Win7系统下,我们非常方便的就在命令提示符下建立了WIFI热点.那么Win8上是 ...

  2. javascript返回顶端源代码

    <div style="display:none" id="goTopBtn"><img src="http://www.unity ...

  3. java并发编程之Semaphore

    信号量(Semaphore).有时被称为信号灯.是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们可以正确.合理的使用公共资源. 一个计数信号量.从概念上讲,信号量维护了一个许可集.如 ...

  4. HDU1236 排名 题解

    Problem Description 今天的上机考试尽管有实时的Ranklist,但上面的排名仅仅是依据完毕的题数排序,没有考虑  每题的分值,所以并非最后的排名.给定录取分数线.请你敲代码找出最后 ...

  5. .net的程序的逆向分析。

    背景:碰到一个由c#写的exe,由于之前没有分析过.net的程序,记录下分析流程. 1)peid加载判断类型,可以看出没有加壳. 2)搜索c#的反编译以及调试工具. 1.NET.Reflector以及 ...

  6. C#.NEt-GDI+中的Pen測试

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. 阳性比例 mysql CASE UNION ALL

    阳性比例 mysql CASE UNION ALL SELECT t.*,t.type_0/all_ FROM ( SELECT FROM_UNIXTIME(create_time,'%Y-%m-%d ...

  8. SuperSocket中的Server是如何初Initialize的

    第一个函数 d:\sourcecode\github\supersocket\quickstart\basic\telnetserver_startbyconfig\program.cs static ...

  9. [翻译]NUnit--Getting Started(二)

    Getting Started with NUnit 如果你打算开始学习,到下载页面选择一个NUnit版本.安装页面包含了安装说明. 开始NUnit阅读Quick Start页面.验证了一个C#银行应 ...

  10. 2018.09.08 DL24 Day1 总结

    补一下之前的总结…… T1.restaurant 这道题还是很简单的嘛,子恒dalao非常良心.我们把招牌菜和所需要的菜品绑定在一起就成了完全背包,然后直接跑一遍完全背包即可. #include< ...