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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章