ObjectARX:C# ObjectARX--关于实体

1.得到模型空间中所有实体:
        public List<Autodesk.AutoCAD.DatabaseServices.ObjectId> GetEntitiesInModelSpace()
        {
            List<Autodesk.AutoCAD.DatabaseServices.ObjectId> objects = new List<Autodesk.AutoCAD.DatabaseServices.ObjectId>();
           
            using (Autodesk.AutoCAD.DatabaseServices.Transaction transaction =
                Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction())
            {
                Autodesk.AutoCAD.DatabaseServices.BlockTable blockTable =
                    (Autodesk.AutoCAD.DatabaseServices.BlockTable)transaction.GetObject(
                    Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase.BlockTableId,
                    Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                Autodesk.AutoCAD.DatabaseServices.BlockTableRecord blockTableRecord =
                    (Autodesk.AutoCAD.DatabaseServices.BlockTableRecord)transaction.GetObject(
                    blockTable[Autodesk.AutoCAD.DatabaseServices.BlockTableRecord.ModelSpace],
                    Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                foreach (Autodesk.AutoCAD.DatabaseServices.ObjectId objId in blockTableRecord)
                {
                    objects.Add(objId);
                }
                transaction.Commit();
            }
            return objects;
        }
2.如何通过ObjectId得到一个实体:
        private DBObject GetObject(ObjectId id)
        {
            DBObject obj = null;
            using (Transaction transaction = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction())
            {
                obj = transaction.GetObject(id, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead, true);
                transaction.Commit();
            }
            return obj;
        }
1. 如何添加实体:
        public static void AppendEntity(Entity ent)
        {
            using (Transaction transaction =
                HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
            {
                BlockTableRecord blockTableRecord;
                //get block table record of current space
                blockTableRecord = (BlockTableRecord)transaction.GetObject(
                    HostApplicationServices.WorkingDatabase.CurrentSpaceId,
                    OpenMode.ForWrite);
                blockTableRecord.AppendEntity(ent);
                transaction.AddNewlyCreatedDBObject(ent, true);
                transaction.Commit();
            }
            return;
        }
2. 如何给实体添加XData:
        public static bool AttachXData(DBObject obj, int MyData)
        {
            RegAppTableRecord app = new RegAppTableRecord();
            app.Name = "MyData";
            using (Transaction transaction =
                Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction())
            {
                try
                {
                    Database workingdatabase = HostApplicationServices.WorkingDatabase;
 
                    SymbolTable table = (SymbolTable)transaction.GetObject(workingdatabase.RegAppTableId,
                        Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, false);
                    if (!table.Has(app.Name))
                    {
                        table.Add(app);
                        transaction.AddNewlyCreatedDBObject(app, true);
                    }
                    if (!obj.IsWriteEnabled)
                        obj.UpgradeOpen();
                    obj.XData = new ResultBuffer(
                        new TypedValue((int)DxfCode.ExtendedDataRegAppName, app.Name),
                        new TypedValue((int)DxfCode.ExtendedDataInteger32, MyData));
                    transaction.Commit();
                    transaction.Dispose();
                }
                catch
                {
                    return false;
                }
            }
            return true;
        }
 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blucexi/archive/2006/09/27/1296484.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值