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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容