圖層操作


圖層的的添加

 

///acDoc  要添加的文檔

///strLayerName  圖層名字

///color 圖層顏色

///

public ObjectId CreateCadLayer(Document acDoc, string strLayerName,System.Drawing.Color color)
{
  try
  {
  if (String.IsNullOrEmpty(strLayerName))
    return ObjectId.Null;

  ObjectId layerId = new ObjectId();

  using(DocumentLock doclock = acDoc.LockDocument())
  {
    using(Transaction tr = acDoc.Database.TransactionManager.StartTransaction())
    {
      LayerTable lt = tr.GetObject(acDoc.Database.LayerTableId, OpenMode.ForWrite) as LayerTable;
      if (lt.Has(strLayerName))
      {
        layerId = lt[strLayerName];
      }
      else
      {
        LayerTableRecord layer = new LayerTableRecord();
        layer.Name = strLayerName;
        layer.Color = Autodesk.AutoCAD.Colors.Color.FromColor(color);
        layerId = lt.Add(layer);
        tr.AddNewlyCreatedDBObject(layer, true);
      }
      tr.Commit();
      tr.Dispose();
    }
  }
  return layerId;
}
catch (System.Exception ex)
{
  MessageBox.Show(ex.Message, "提示");
  return ObjectId.Null;
}

 

圖層刪除

///layer 要刪除的圖層名

using (Transaction tr = doc.Database.TransactionManager.StartTransaction())
{
  LayerTable lt = tr.GetObject(doc.Database.LayerTableId, OpenMode.ForWrite) as LayerTable;
  LayerTableRecord ltr = tr.GetObject(lt[layer], OpenMode.ForWrite) as LayerTableRecord;
  lt.GenerateUsageData();
  if ((doc.Database.Clayer == lt[layer])          //"0"和“Defpoints"以及當前圖層不可以刪除,若要刪除當前圖層,必須先修改當前圖層到其他圖層
  || layer == "0" || layer == "Defpoints")       //最好是0圖層  代碼 doc.Database.Clayer = lt["0"];
  {
  tr.Commit();
  //
  }

  else

  {

  tr.Erase(true);

  tr.Commit();
  }
}

 

獲取全部的CAD圖層名字 //當然也可以獲取LayerTableRecord的其他記錄 比如ObjectId ,linewith,color等

public  void GetAllCadLayerName(Document acDoc, out List<string> lyList)
{
  lyList = new List<string>();
  try
  {
    Database acDb = acDoc.Database;
    using (Transaction tr = acDb.TransactionManager.StartTransaction())
    {
      LayerTable lyTbl = tr.GetObject(acDb.LayerTableId, OpenMode.ForRead) as LayerTable;
      foreach (ObjectId layerId in lyTbl)
      {
        LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForRead);
        if (ltr != null /*&& !ltr.Name.Equals("0")*/)
        {
          lyList.Add(ltr.Name);
        }
      }
      tr.Commit();
    }
  }
  catch (System.Exception ex)
  {
    MessageBox.Show(ex.Message, "提示");
    return;
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM