不需要遍历模型空间即可选择实体(包括所有图纸空间)
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.GraphicsInterface;
using IFoxCAD.Cad;
using System.Globalization;
using System.Security.Cryptography;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Markup;
using Path = System.IO.Path;
namespace IfoxDemo
{
public class 窗选类()
{
[CommandMethod("xx")]
public void 全选实体()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
var a = ed.SelectAll();
var b = a.Value;
var c = b.GetObjectIds();
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
foreach (ObjectId id in c)
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForRead);
if ((ent is null)|| (ent.IsErased)) continue;
ent.ChangeEntityColor(1);
}
tr.Commit();
}
}
}
}
var dd = db.CurrentSpaceId; 获取当前空间id
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.GraphicsInterface;
using IFoxCAD.Cad;
using System.Globalization;
using System.Security.Cryptography;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Markup;
using Path = System.IO.Path;
namespace IfoxDemo
{
public class 窗选类()
{
[CommandMethod("xx")]
public void 全选实体_实体与模型空间的关系()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
var a = ed.SelectAll();
var b = a.Value;
var c = b.GetObjectIds();
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
foreach (ObjectId id in c)
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForRead);
if ((ent is null)|| (ent.IsErased)) continue;
if (ent.OwnerId == btr.ObjectId)//实体所属的id是模型空间的id,即实体在模型空间
{
ent.ChangeEntityColor(1);
}
var ms =BlockTableRecord.ModelSpace;
var ps = BlockTableRecord.PaperSpace;
ed.WriteMessage($"实体所属的块名是 {ent.BlockName},-实体所属的id是{ ent.OwnerId}-模型空间的id是{ btr.ObjectId}-模型空间字符串名{ms}-图纸空间字符串名{ps}\n");
/*实体所属的块名是 *Paper_Space2,-实体所属的id是(2384862761408)-模型空间的id是(2385749615088)-模型空间字符串名*MODEL_SPACE-图纸空间字符串名*PAPER_SPACE
* Autodesk.AutoCAD.DatabaseServices.Ellipse-(2384865853728)-(2384862761408)-*Paper_Space2
*
* 实体所属的块名是 *Paper_Space2,-实体所属的id是(2384862761408)-模型空间的id是(2385749615088)-模型空间字符串名*MODEL_SPACE-图纸空间字符串名*PAPER_SPACE
* Autodesk.AutoCAD.DatabaseServices.Viewport-(2384862761936)-(2384862761408)-*Paper_Space2
*
* 实体所属的块名是 *Model_Space,-实体所属的id是(2385749615088)-模型空间的id是(2385749615088)-模型空间字符串名*MODEL_SPACE-图纸空间字符串名*PAPER_SPACE
* Autodesk.AutoCAD.DatabaseServices.Circle-(2384865854240)-(2385749615088)-*Model_Space
*
*/
//实体获取
ed.WriteMessage($"{ent.GetType()}-{ent.ObjectId}-{ent.OwnerId}-{ent.BlockName}\n");
//Autodesk.AutoCAD.DatabaseServices.Circle-(2384865854240)-(2385749615088)-*Model_Space
}
tr.Commit();
}
}
}
}