梦想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);
}
|
梦想CAD控件关于比较问题的更多相关文章
- 如何在网页中浏览和编辑DWG文件 梦想CAD控件
如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...
- 梦想CAD控件图块COM接口知识点
梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...
- 梦想CAD控件图层COM接口知识点
梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...
- 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD
(百度百科连接) 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...
- 梦想CAD控件网页版搜索图面上的文字
在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...
- 梦想CAD控件COM接口自定义命令
在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...
- 梦想CAD控件网页版关于自定义命令
在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...
- 梦想CAD控件安卓界面控制
CAD控件界面上所有元素都可以控制显示或隐藏,下面将逐一介绍详细用法. 设置工具文件 MxFunction.setToolFile 设置工具文件.详细说明如下: 参数 说明 String sFile ...
- 梦想CAD控件安卓交互绘图
在cad使用过程中,动态绘制的使用会使我们绘图速度大大加快.在此演示中,我们绘制了直线.多段线.点.样条线.圆.圆弧.椭圆.椭圆弧等实体. 用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明 ...
随机推荐
- VS2012 ASP.NET 母版页的创建与使用
在做牛腩新闻公布系统的过程中,须要使用ASP.NET的母版页来抽出全部网页的公共部分,以便更好的复用自己的网页布局和设计. 首先我们来看怎样创建一个新的母版页,例如以下图所看到的: 加入之后,例如以下 ...
- rsync 3.1.1源代码编译安装配置
http://rsync.samba.org/ rsync-3.1.1.tar.gz ---0.卸载rpm # yum remove rsync -----1.安装: tar -zxvf rsync- ...
- 前端开发本地环境配置(Apache+Dreamweaver)
一.安装apache服务器 1.下载apache软件: 2.安装,直接下一步就好: 3.安装好后找到安装文件夹下的conf文件中的httpd.conf: 4.打开httpd.conf文件,做以下修改: ...
- 关于微软网站维护培训时遇到的issues:What is WEDCS?
WEDCS (pronounced “wed-ex”), the Web Events Data Collection Service, is a system for collecting, com ...
- 约瑟夫环问题(Josephus)
约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...
- Guava ---- EventBus事件驱动模型
在软件开发过程中, 难免有信息的共享或者对象间的协作. 怎样让对象间信息共享高效, 而且耦合性低. 这是一个难题. 而耦合性高将带来编码改动牵一发而动全身的连锁效应. Spring的风靡正是由于攻克了 ...
- 2016/1/18 Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- BZOJ 1037: [ZJOI2008]生日聚会Party 四维DP
1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1650 Solved: 971[Submit][ ...
- 【codevs1306】广播操的游戏
求字符串内的非空子串的数量 后缀数组!!! #include<algorithm> #include<cstdlib> #include<cstring> #inc ...
- jar包和动态链接库
1 jar包更接近于动态链接库 java在编译的时候,尽管import了其它的jar包,但是它并没有将其它jar包中的源码拷贝到自己的class文件中,它只是使用了jar包中的名字. 而在执行的时候, ...