Layer图层对象

在Solidworks工程图中,我们图中的各类元素都会放在某个图层中,本文就和大家一起了解下Solidworks中与图层相关的LayerMgr图层管理对象和Layer图层对象。

image.png

实例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

运行效果

image.png

实例分析

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 + "】");
    }
 }

运行效果

image.png

实例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());
}

运行效果

image.png

如下图为本文的示例程序,源码可上我的Github下载。操作步骤可见文章[《公众号源码Github分享库》]实例序号26

image.png

你可能感兴趣的:(Layer图层对象)