【CAD插件开发】读取外面块和图层

0 评论
/
4 阅读
/
2420 字
13 2025-02
[CommandMethod("GetLayerPro")]
public static void GetLayerPro()
{
    Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
    //新建一个数据库对象以读取Dwg文件          
    Database db = new Database(false, true);
    string fileName = "C:\\Drawing3.dwg";
    //如果指定文件名的文件存在          
    if(System.IO.File.Exists(fileName))
    {
        //把文件读入到数据库中          
        db.ReadDwgFile(fileName, System.IO.FileShare.Read, true, null);
        using(Transaction trans = db.TransactionManager.StartTransaction())
        {
            //获取数据库的图层表对象      
            LayerTable lt = (LayerTable) trans.GetObject(db.LayerTableId, OpenMode.ForRead);
            //循环遍历每个图层                   
            foreach(ObjectId layerId in lt)
            {
                LayerTableRecord ltr = (LayerTableRecord) trans.GetObject(layerId, OpenMode.ForRead);
                if(ltr != null)
                {
                    Autodesk.AutoCAD.Colors.Color layerColor = ltr.Color;
                    ed.WriteMessage("\n图层名称为:" + ltr.Name);
                    ed.WriteMessage("\n图层颜色为:" + layerColor.ToString());
                }
            }
            trans.Commit();
        }
    }
}


[CommandMethod("GetEntitiesFromLayer")]
public static void GetEntitiesFromLayer(string layerName)
{
    Database db = HostApplicationServices.WorkingDatabase;
    Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
    using(Transaction trans = db.TransactionManager.StartTransaction())
    {
        LayerTable lt = (LayerTable) trans.GetObject(db.LayerTableId, OpenMode.ForRead);
        if(lt.Has(layerName))
        {
            BlockTableRecord ltr = (BlockTableRecord) trans.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
            foreach(ObjectId objId in ltr)
            {
                Entity ent = (Entity) trans.GetObject(objId, OpenMode.ForRead);
                // 假设该图层中有一个圆       
                Circle myCircle = (Circle) ent;
                if(ent.Layer == layerName && myCircle != null)
                {
                    Point3d cirCenter = myCircle.Center;
                    ed.WriteMessage("\n圆心为:" + cirCenter.ToString());
                }
            }
        }
        trans.Commit();
    }
}
    暂无数据