在Solidworks工程圖中,我們圖中的各類元素都會(huì)放在某個(gè)圖層中,本文就和大家一起了解下Solidworks中與圖層相關(guān)的LayerMgr圖層管理對(duì)象和Layer圖層對(duì)象。
實(shí)例1:添加圖層
本例中將給工程圖添加一個(gè)SwNew的圖層脖祈,顏色為藍(lán)色伴网。
實(shí)例代碼:
API_Learn.Learn_Layer.AddLayer(Doc, "SwNew", Colors.Blue);
public static void AddLayer(ModelDoc2 SwDoc, string Layname, Color cl)//"SwLayer"
{
LayerMgr SwLayerMgr = SwDoc.GetLayerManager();
Layer SwLayer = SwLayerMgr.GetLayer(Layname);
if (SwLayer == null)
{
System.Windows.MessageBox.Show("無(wú)圖層【"+ Layname + "】,將新建!");
SwLayerMgr.AddLayer(Layname, "新建描述1", GetColorRefWPF(cl), (int)swLineStyles_e.swLineCENTER, (int)swLineWeights_e.swLW_THICK3);
SwLayer = SwLayerMgr.GetLayer(Layname);
if (SwLayer != null)
{
System.Windows.MessageBox.Show("圖層新建成功!");
}
else
{
System.Windows.MessageBox.Show("圖層新建失敗!");
}
}
else
{
System.Windows.MessageBox.Show("圖層已存在!");
}
}
#region WPF方式顏色值轉(zhuǎn)化
public static int GetColorRefWPF(Color cl)
{
return ((cl.R | (cl.G << 8)) | (cl.B << 0x10));
}
#endregion
運(yùn)行效果
實(shí)例分析
LayerMgr對(duì)象主要用于圖層管理戒财,如添加,刪除披诗,獲取等。
Layer對(duì)象主要代表一個(gè)圖層的實(shí)例,如新建的SwNew圖層整袁。
LayerMgr::AddLayer方法用于添加圖層,方法中的顏色參數(shù)佑吝,Solidworks使用了ColorRef值坐昙,非.Net平臺(tái)。需要進(jìn)行轉(zhuǎn)化芋忿,實(shí)例中是WPF中的轉(zhuǎn)化方式炸客,此外,如下是Winform中的轉(zhuǎn)化方式戈钢。
public static uint GetColorRefWinForm(Color cl)
{
int nColor = cl.ToArgb();
int blue = nColor & 255;
int green = nColor >> 8 & 255;
int red = nColor >> 16 & 255;
return Convert.ToUInt32(blue << 16 | green << 8 | red);
}
實(shí)例2:圖層切換
當(dāng)我們要在某個(gè)圖層上繪制新圖形時(shí)痹仙,需要先切換到需要的圖層。
實(shí)例代碼
API_Learn.Learn_Layer.ChangeLayer(Doc, "SwNew");
public static void ChangeLayer(ModelDoc2 SwDoc, string LayerName)
{
LayerMgr SwLayerMgr = SwDoc.GetLayerManager();
if (SwLayerMgr.GetCurrentLayer() != LayerName)
{
string[] laynames = SwLayerMgr.GetLayerList();
if (laynames.Contains(LayerName))//說(shuō)明訊在需要的圖層
{
SwLayerMgr.SetCurrentLayer(LayerName);
System.Windows.MessageBox.Show("圖層【" + LayerName + "】切換成功");
}
else
{
System.Windows.MessageBox.Show("圖層【" + LayerName + "】不存在!");
}
}
else
{
System.Windows.MessageBox.Show("當(dāng)前圖層已經(jīng)是【" + LayerName + "】");
}
}
運(yùn)行效果
實(shí)例3:獲取圖層元素
我們可以通過(guò)Layer::GetItems方法逆趣,獲得屬于該圖層中的各類元素蝶溶。進(jìn)而對(duì)各類工程圖元素進(jìn)行深一步的操作。
實(shí)例代碼
API_Learn.Learn_Layer.GetItemsForLayer(Doc, "圖層元素");
public static void GetItemsForLayer(ModelDoc2 SwDoc, string LayerName)
{
LayerMgr SwLayerMgr = SwDoc.GetLayerManager();
Layer SwLayer = SwLayerMgr.GetLayer(LayerName);
StringBuilder Sb = new StringBuilder("");
object[] ObjAnnotations = SwLayer.GetItems((int)swLayerItemsOption_e.swLayerItemsOption_Annotations);
SwDoc.ClearSelection2(true);
foreach (object ObjAnnotation in ObjAnnotations)
{
Annotation SwAnn = (Annotation)ObjAnnotation;
swAnnotationType_e AnnTp = (swAnnotationType_e)SwAnn.GetType();
Sb.Append("注解:" + AnnTp.ToString().Trim() + "\r\n");
SwAnn.Select(true);
}
object[] ObjSketchBlocks = SwLayer.GetItems((int)swLayerItemsOption_e.swLayerItemsOption_SketchBlockInstance);
foreach (object ObjSketchBlock in ObjSketchBlocks)
{
SketchBlockInstance SwSBI = (SketchBlockInstance)ObjSketchBlock;
Sb.Append("圖塊:" + SwSBI.Name + "\r\n");
}
object[] ObjSketchSegments = SwLayer.GetItems((int)swLayerItemsOption_e.swLayerItemsOption_SketchSegments);
foreach (object ObjSketchSegment in ObjSketchSegments)
{
SketchSegment SwSS = (SketchSegment)ObjSketchSegment;
swSketchSegments_e SSTp = (swSketchSegments_e)SwSS.GetType();
Sb.Append("草圖:" + SSTp.ToString().Trim() + "\r\n");
SwSS.Select(true);
}
System.Windows.MessageBox.Show(Sb.ToString().Trim());
}
運(yùn)行效果
如下圖為本文的示例程序,源碼可上我的Github下載抖所。操作步驟可見文章[《公眾號(hào)源碼Github分享庫(kù)》]實(shí)例序號(hào)26