在Solidworks工程图中,我们图中的各类元素都会放在某个图层中,本文就和大家一起了解下Solidworks中与图层相关的LayerMgr图层管理对象和Layer图层对象。
实例1:添加图层
本例中将给工程图添加一个SwNew的图层,颜色为蓝色。
实例代码:
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("无图层【"+ 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方式颜色值转化
public static int GetColorRefWPF(Color cl)
{
return ((cl.R | (cl.G << 8)) | (cl.B << 0x10));
}
#endregion
运行效果
实例分析
LayerMgr对象主要用于图层管理,如添加,删除,获取等。
Layer对象主要代表一个图层的实例,如新建的SwNew图层。
LayerMgr::AddLayer方法用于添加图层,方法中的颜色参数,Solidworks使用了ColorRef值,非.Net平台。需要进行转化,实例中是WPF中的转化方式,此外,如下是Winform中的转化方式。
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);
}
实例2:图层切换
当我们要在某个图层上绘制新图形时,需要先切换到需要的图层。
实例代码
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))//说明讯在需要的图层
{
SwLayerMgr.SetCurrentLayer(LayerName);
System.Windows.MessageBox.Show("图层【" + LayerName + "】切换成功");
}
else
{
System.Windows.MessageBox.Show("图层【" + LayerName + "】不存在!");
}
}
else
{
System.Windows.MessageBox.Show("当前图层已经是【" + LayerName + "】");
}
}
运行效果
实例3:获取图层元素
我们可以通过Layer::GetItems方法,获得属于该图层中的各类元素。进而对各类工程图元素进行深一步的操作。
实例代码
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());
}
运行效果
如下图为本文的示例程序,源码可上我的Github下载。操作步骤可见文章[《公众号源码Github分享库》]实例序号26