夢想CAD控件關於比較問題
阿新 • • 發佈:2019-05-14
keyword p s ring lte entity lpad 地方 ren .get
全圖比較
怎麽比較兩個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控件關於比較問題