CAD二次开发 --关于图层方面的应用

LayerTable(层表)是存放LayerTableRecord(层表记录)的容器,层表记录就是图层。
1.根据图层名过滤对象

public ObjectIdCollection GetObjectIdsAtLayer(string name)
{
    var doc = Application.DocumentManager.MdiActiveDocument;
    var ed = doc.Editor;
    ObjectIdCollection ids = new ObjectIdCollection();
    var layerList = new List<TypedValue>
    {               
        new TypedValue(Convert.ToInt32(DxfCode.LayerName), name),
    };
    SelectionFilter sf = new SelectionFilter(layerList.ToArray());
    PromptSelectionResult psr = ed.GetSelection(sf);
    if (psr.Status == PromptStatus.OK)
    {
        ObjectId[] id = psr.Value.GetObjectIds();
        for (int i = 0; i < id.Length; i++)
        {
            ids.Add(id[i]);
        }
    }
    return ids;
}

2.建立指定名字、颜色的图层

 public ObjectId Addin(string layerName, short colorIndex, Database db)
 {
     short colorIndex1 = (short)(colorIndex % 256);
     using (Transaction tr = db.TransactionManager.StartTransaction())
     {
       LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
       ObjectId layerId = ObjectId.Null;
       if (lt.Has(layerName) == false)
       {
         LayerTableRecord ltr = new LayerTableRecord();
         ltr.Name = layerName;
         ltr.Color = Color.FromColorIndex(ColorMethod.ByColor, colorIndex1);
         layerId = lt.Add(ltr);
         tr.AddNewlyCreatedDBObject(ltr, true);
       }
       tr.Commit();
       return layerId;
     }
 }

3.点击对象,获取该对象的图层名

private string acquireLayer(string keywords)
{
    var doc = Application.DocumentManager.MdiActiveDocument;
    var ed = doc.Editor;
    var db = doc.Database;
    PromptEntityOptions peo = new PromptEntityOptions(keywords);
    var per = ed.GetEntity(peo);
    if (per.Status == PromptStatus.OK)
    {
       using (var tr = db.TransactionManager.StartTransaction())
       {
           var polyLine = (Polyline)tr.GetObject(per.ObjectId, OpenMode.ForWrite);
           if (polyLine != null)
           {
               return polyLine.Layer;
           }
           tr.Commit();
       }
    }
    return string.Empty;
}

4. 新建图层,并判断该图层是否已经存在。

 private void AddLayer(string layerName)
{
    doc = Application.DocumentManager.MdiActiveDocument;
    db = doc.Database;
    ed = doc.Editor;
    string LayerName = "";
    using (Transaction tr = db.TransactionManager.StartTransaction())
    {
        LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
        if (lt.Has(layerName))
            ed.WriteMessage("此图层已存在");
        else
        {
             LayerName = layerName;
        }
        LayerTableRecord ltr = new LayerTableRecord();
        ltr.Name = LayerName;
        PromptIntegerOptions pio = new PromptIntegerOptions("\n 请输入图层的颜色");
        PromptIntegerResult prs = ed.GetInteger(pio);
        if (prs.Status == PromptStatus.OK)
        {
            colorIndex = (short)prs.Value;
            short colorIndex1 = (short)(colorIndex % 256);
            ltr.Color = Color.FromColorIndex(ColorMethod.ByColor, colorIndex1);
        }
        ObjectId layerId = lt.Add(ltr);
        tr.AddNewlyCreatedDBObject(ltr, true);
        db.Clayer = layerId;
        tr.Commit();
    }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值