夢想cad在網頁開發時如何獲取圖層操作的資訊
DWG資料庫中,圖層存放在圖層層表中,層表類名:MxDrawLayerTable,它的詳細介面說明參考:
層表中每一條記錄稱為層表記錄,類名:MxDrawLayerTableRecord,它的詳細介面說明引數:
每一個層,有顏色,線型,關閉/開啟,凍結等屬性,DWG資料庫預設總是有一個"0"層,該層不能被刪除。
影片演示:
A. 當前層
當前層表示DWG資料庫預設層,向資料庫中新增一個物件時,預設放到該層上,該屬性隨圖存放,透過系統變數CLAYER操作,系統變數設定參考:
設定當前層程式碼JS:
// 新建一個圖層 mxOcx.AddLayer("MyLayerName"); // 設定當前層 mxOcx.SetSysVarString("CLAYER", "MyLayerName"); // 設定控制元件Draw函式使得的層 mxOcx.LayerName = "MyLayerName";
或者這樣:
// 新增層 mxOcx.AddLayer("aaaa"); // 得到當前資料庫 var database = mxOcx.GetDatabase(); // 設定當前層 database.CurrentlyLayerName = "aaaa";
B.新增圖層
例如JS程式碼:
// 新建一個圖層 mxOcx.AddLayer("MyLayerName"); // 設定控制元件Draw函式使得的層 mxOcx.LayerName = "MyLayerName";
或使用層表Add方法來新增一個圖層
// sNewLayerName新建立的圖層名 var sNewLayerName = "TestNewLayer"; //返回控制元件的資料庫物件 var database = mxOcx.GetDatabase(); var layerTable = database.GetLayerTable(); // 向層表中新增一個層表記錄 var layerTableRec = layerTable.Add(sNewLayerName); // 設定新圖層的顏色。SetRGB var color = layerTableRec.Color; color.SetRGB(255, 0, 0); layerTableRec.Color = color; // 把新建的層設定成當前層 database.CurrentlyLayerName = sNewLayerName;
C.遍歷所有圖層
下面程式碼是遍歷層表中所有層表記錄,並得到所有圖層名,在遍歷的迴圈中,得到每個層表記錄物件,可以去修改它的屬性
function GetAllLayer() { var database = mxOcx.GetDatabase(); // 得到所有圖層名 var sRet = null; //返回資料庫中的層表物件 var spLayerTable = database.GetLayerTable(); //建立一個遍歷層表中所有圖層的遍歷器 var spIter = spLayerTable.NewIterator(); //移動當前遍歷器位置 for(;!spIter.Done();spIter.Step(true,true)) { //返回遍歷器當前位置的記錄 var spLayerRec = spIter.GetRecord(); //符號表記錄名屬性 var sName = spLayerRec.Name; // 0零層不參加比較 if(sName != "0") { if(sRet == null) sRet = sName; else { sRet = sRet +","+sName; } } } alert(sRet);}
D. 隱藏圖層
隱藏一個圖層的實現思路,得到資料庫層表物件,然後根據層名得到層表記錄物件,設定層表記錄IsOff屬性值。
例如程式碼,讓使用者在CAD圖上選擇一個物件,然後隱藏物件所在的圖層C#:
// 隱藏選擇實體的層。var ent = mxOcx.GetEntity("選擇要關閉圖層的實體:");if(ent == null){ return;}if (ent == null){ return;}var sLayerName = ent.Layer;var database = mxOcx.GetDatabase();var layerTable = database.GetLayerTable();var layerTableRec = layerTable.GetAt(sLayerName, false);if(layerTable != null){ layerTableRec.IsOff = true;}
E. 顯示圖層
如下例子,得到層表,然後迴圈得到所有層表記錄,並開啟圖層顯示
例如程式碼 JS:
function OpenAllLayer() { var database = mxOcx.GetDatabase(); //返回資料庫中的層表物件 var spLayerTable = database.GetLayerTable(); //建立一個遍歷層表中所有圖層的遍歷器 var spIter = spLayerTable.NewIterator(); //移動當前遍歷器位置 for(;!spIter.Done();spIter.Step(true,true)) { //返回遍歷器當前位置的記錄 var spLayerRec = spIter.GetRecord(); var sName = spLayerRec.Name; var layerRec=spLayerTable.GetAt(sName,false); if(layerRec) { layerRec.IsOff = false; alert("成功顯示圖層"); } } }
F. 鎖定圖層
鎖定後的圖層上的實體不能編輯,但可以選擇,如果想也不能選擇,設定控制元件InitSet屬性值為:
SelectLockLayer=N
下面演示,遍歷所有圖層表記錄,並設定圖層為鎖定狀態,
例如程式碼 JS:
function LockeAllLayer() { //返回控制元件的資料庫物件 var database = mxOcx.GetDatabase(); //返回資料庫中的層表物件 var layerTable = database.GetLayerTable(); //建立一個遍歷層表中所有圖層的遍歷器 var iter = layerTable.NewIterator(); for (; !iter.Done(); iter.Step()) { //返回遍歷器當前位置的記錄 var layerRec = iter.GetRecord(); layerRec.IsLocked = true; alert("成功鎖定圖層"); }}
F. 凍結圖層
被凍結上的圖層實體,不會參顯示資料的生成,這樣可以加快顯示速度,和開啟圖紙的速度,它與關閉屬性相比,凍結後的圖層不但看不見,並且在記憶體中也不參加顯示。
// 凍結選擇實體的層。 var ent = mxOcx.GetEntity("選擇要凍結圖層的實體:"); if(ent == null) { return; } if (ent == null) { return; } var sLayerName = ent.Layer; var database = mxOcx.GetDatabase(); var layerTable = database.GetLayerTable(); var layerTableRec = layerTable.GetAt(sLayerName, false); if(layerTable != null) { layerTableRec.IsFrozen = true; alert("成功凍結圖層"); }
G.呼叫圖層管理介面
例如程式碼JS:
mxOcx.SendStringToExecute("MxLayerManager");
H.得到圖層上所有物件
我們透過構造選擇集,使用圖層名過慮來得到某個層上所有物件,關於選擇集的類說明參考:
例如程式碼 JS:
// 建立一個過濾資料連表物件。 var filter = mxOcx.NewResbuf(); // 把層名加入過濾條件,8是DXF組碼,0表示是的是一個層名。 filter.AddStringEx("0", 8); //定義選擇集物件 var ss = mxOcx.NewSelectionSet(); // 選擇圖上的所有物件。 ss.Select2(5, null, null, null,filter); var i = 0; var listId = new Array(); // 遍歷所有物件,得到物件id. for (; i < ss.Count;i++) { var e = ss.Item(i); listId.push(e.ObjectID); } return listId;
I. 設定指定圖層上的實體不能選擇
透過控制元件InitSet屬性,來設定特定圖層上的實體不能選擇,有關IniSet的詳細說明,參考:
比如 JS:
// 設定Layer1,Layer2,Layer3圖層上的實體不能選擇 mxOcx.Iniset = "DisableSelectLayer=Layer1;Layer2;Layer3";
J. 設定CAD實體物件,到指定層上
實體物件都有一個層屬性,可以直接修改該屬性。
比如JS:
var ent = mxOcx.GetEntity("選擇圖層的實體:"); if(ent == null) { return; } if (ent == null) { return; } // 得到資料庫物件. var database = mxOcx.GetDatabase(); // 得到層表. var layerTable = database.GetLayerTable(); var sLayerName = "layer"; // 得到層。 var layer = layerTable.GetAt(sLayerName, true); if (layer == null) { // 如果沒有層,就新建一個層。 mxOcx.AddLayer(sLayerName); } else { // 如果層被刪除,就反刪除。 layer.SetProp("unErase", null); } // 設定實體層名到指定層上。 ent.Layer = sLayerName; alert("已將該實體設定到指定圖層");
K.判斷該層上是否有物件,是不是一個
無用
的層。
在CAD圖上,一般需要遍歷所有塊表記錄中的實體物件,才判斷某個圖層上是有物件實體,然後才能放心刪除一個圖層,因為一個圖層上如果有實體物件,你刪除該圖層時,實體物件就會引用一個無效的圖層。
所以控制元件專門提供一個定製函式,用來判斷該圖上是否有實體物件:
比如 JS:
MxDrawResbuf param = (MxDrawResbuf)axMxDrawX1.Call("ExApp_isUselessLayer", "圖層1"); if(param.AtLong(1) == 1) { MessageBox.Show("該圖層上沒有物件"); }
L.刪除資料庫所有無用的圖層
我們提供一個定製函式,來遍歷圖上的所有物件,判斷出圖層上沒有物件,然後刪除。
比如 JS:
axMxDrawX1.Cal("ExApp_DeleteUselessLayer");
M.修改圖層亮度
控制元件提供,讓CAD圖層上的所有物件,按指定亮度顯示功能,比如亮度設定0,表示物件顯示成灰色,一般一些背景不讓修改的物件放在背景層上,然後把亮度設定成0.
例如設定圖層 222按50%顯示, JS程式碼:
var param = mxOcx.NewResbuf();// 圖層名 param.AddStringEx("222");// 圖層亮度. param.AddDoubleEx(50);// 不自動呼叫更新函式。 param.AddLongEx(0); mxOcx.CallEx("Mx_SetLayerBright", param);
N. 得到圖層亮度
下面是得到圖層的亮度,222表示的是圖層名字。
JS程式碼:
var ret = mxOcx.Call("Mx_GetLayerBright", "222"); if (ret.AtString(0) == "Ok") { alert(ret.AtDouble(1).toString()); }
O. 刪除圖層
在刪除圖層前,最好判斷一個該圖層上是否有CAD繪圖物件,如果有的話就不要刪除圖層
JS程式碼:
private bool DeleteLayer(String sLayerName) { // 判斷圖上是否物件。 MxDrawResbuf param = (MxDrawResbuf)axMxDrawX1.Call("ExApp_isUselessLayer", sLayerName); if (param.AtLong(1) != 1) { // 圖上還有物件,不能刪除。 return false; } // 得到資料庫物件. MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase(); // 得到層表. MxDrawLayerTable layerTable = database.GetLayerTable(); // 得到層。 MxDrawLayerTableRecord layer = layerTable.GetAt(sLayerName, false); if (layer == null) { // 沒有該層 return false; } else { // 刪除圖層。 layer.Erase(); return true; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29511035/viewspace-2776384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CAD夢想畫圖操作介面
- 夢想CAD控制元件網頁開發--圖形資料庫(文字樣式)控制元件網頁資料庫
- 在CAD夢想畫圖中如何使用PLAN命令
- 夢想CAD控制元件(網頁CAD,web瀏覽cad) 2022.09.20更新控制元件網頁Web
- CAD夢想畫圖(線上CAD)如何上傳檔案
- CAD夢想畫圖2021.09.04更新
- CAD夢想畫圖---雲線
- CAD夢想畫圖中的“延伸命令”
- CAD夢想畫圖中的“分解命令”
- CAD夢想畫圖--審圖示記
- CAD夢想畫圖如何進行重畫、繪圖模式繪圖模式
- 如何修改CAD夢想畫圖繪圖視窗的背景顏色繪圖
- 夢想CAD雲圖與GIS結合演示網址
- CAD夢想畫圖如何自定義座標系統
- Lavarel Ajax 分頁時 獲取分頁資訊
- 想獲取JS載入網頁的源網頁的原始碼,不想獲取JS載入後的資料JS網頁原始碼
- CAD夢想畫圖產品簡介
- .NET微信網頁開發之網頁授權獲取使用者基本資訊網頁
- CAD夢想畫圖中的“線型設定”
- CAD夢想畫圖中的“熱鍵快捷命令”
- CAD夢想畫圖中的“繪圖工具——多線段”繪圖
- CAD夢想畫圖的瀏覽模式與繪圖模式模式繪圖
- selenium 是否能獲取網頁裡出現的提示資訊?(如圖)網頁
- CAD如何設定圖層
- 資訊爆炸時代,如何獲取優質資訊?
- 夢想CAD控制元件 2021.09.05更新控制元件
- Chrome 獲取網頁顏色(文字、圖片)Chrome網頁
- Python應用開發——爬取網頁圖片Python網頁
- ElasticSearch 獲取es資訊以及索引操作Elasticsearch索引
- CAD夢想畫圖的命令輸入、結束、重複與撤銷
- 微信網頁授權並獲取使用者資訊網頁
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer
- 獲取地圖的資訊到input裡地圖
- 短視訊app開發,獲取開屏廣告頁廣告倒數計時總秒數APP
- 最簡單的網路圖片的爬取 --Pyhon網路爬蟲與資訊獲取爬蟲
- Appium常用操作之「Toast提示資訊獲取」APPAST
- “夢想江湖,從新出發”《新夢想世界》正式開啟
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer