how to get correct ole2Frame.Location?

how to get correct ole2Frame.Location?

lifanvc
Contributor Contributor
422 Views
1 Reply
Message 1 of 2

how to get correct ole2Frame.Location?

lifanvc
Contributor
Contributor

// read file to Database
using Database db = new Database(false, true);
db.ReadDwgFile(fileName, FileShare.ReadWrite, true, null);
db.CloseInput(true);

using Transaction acTrans = db.TransactionManager.StartTransaction(); BlockTable acBlkTbl = acTrans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
// 
BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;

// 1.1 遍历模块空间块记录
foreach (ObjectId objId in acBlkTblRec)
{

Entity entity= acTrans.GetObject(objId, OpenMode.ForRead) as Entity;
if (entityis Ole2Frame ole2Frame)
{
Point3d pt = ole2Frame.Location; // Here  pt={0,0,0}
}
}
how to get corrct Location?



0 Likes
423 Views
1 Reply
Reply (1)
Message 2 of 2

lifanvc
Contributor
Contributor
public void GetOle()
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            using (acDoc.LockDocument()) // immportant
            {
               //using (Database db = new Database(false, true))    // No
                //using (Database db = new Database(true, true))     // No
                //using (Database db = new Database(true, false))    // Yes
                using (Database db = new Database(false, false))     // Yes
                {
                    db.ReadDwgFile("E:\\叠图简单例子\\拆图\\新建文件夹\\我的拆图002.dwg", FileShare.Read, false, null);
                    db.CloseInput(true);
                    using (Transaction acTrans = db.TransactionManager.StartTransaction())
                    {
                        // 以读模式打开块表
                        BlockTable acBlkTbl;
                        acBlkTbl = acTrans.GetObject(db.BlockTableId,
                        OpenMode.ForRead) as BlockTable;
                        // 以读模式打开块表记录模型空间
                        BlockTableRecord acBlkTblRec;
                        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                        OpenMode.ForRead) as BlockTableRecord;
                        // 遍历模型空间里的每个对象,并显示找到的对象的类型
                        foreach (ObjectId acObjId in acBlkTblRec)
                        {
                            Ole2Frame ole2Frame = acTrans.GetObject(acObjId, OpenMode.ForRead) as Ole2Frame;
                            if (ole2Frame != null)
                            {
                                Point3d pt = ole2Frame.Location;
 
                                acDoc.Editor.WriteMessage("\nX:{0},Y:{0}", pt.X, pt.Y);
                            }
                        }
                        // do something with it
 
                    }
                }
            }
        }
0 Likes