1. 程式人生 > >夢想CAD控件關於比較問題

夢想CAD控件關於比較問題

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控件關於比較問題