用DWGDirect插件里的ReadDwgFile方法,报这个错,不知道什么原因,怎么解决,请大虾帮忙啊
- C# code
protected void btn_save_Click(object sender, EventArgs e) { string path = "../imgfile/201207/201207171339369062.dwg"; //AcadDatabase acaddb = new AcadDatabase(); //DataTable dt = Hun.BLL.CadAdd; //int blocks = acaddb.Blocks.Count; getCAD(path); } public void getCAD(string path) { Database db = new Database(); try { //把DWG文件读入到一个临时的内存数据库中 //using (db = new Database(false, true)) //{ db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null); //现在进入数据库并获得数据库的块表引用 Transaction trans = db.TransactionManager.StartTransaction(); BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false, true); //从块表的模型空间特性中获得块表记录,块表记录对象包含DWG文件数据库实体 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead, false, true); foreach (ObjectId btrId in btr) { DBObject entBlock = (DBObject)trans.GetObject(btrId, OpenMode.ForRead, false, true); if (entBlock.GetRXClass().DxfName.ToUpper() == "INSERT") { BlockReference bRef = (BlockReference)entBlock; if (bRef.AttributeCollection.Count != 0) { System.Collections.IEnumerator bRefEnum = bRef.AttributeCollection.GetEnumerator(); while (bRefEnum.MoveNext()) { ObjectId aId = (ObjectId)bRefEnum.Current;//这一句极其关键 AttributeReference aRef = (AttributeReference)trans.GetObject(aId, OpenMode.ForRead, false, true); TextBox1.Text = aRef.TextString; } } } } trans.Commit(); //提交事务处理 btr.Dispose(); bt.Dispose(); } //} catch (System.Exception ex) { Response.Write("\n出错啦: " + ex.Message); } finally { db.Dispose(); services.Dispose(); } }
------解决方案--------------------------------------------------------
需要先初始化Teigha,再读图形文件,否则报错,如下:
using (Teigha.Runtime.Services srv = new Teigha.Runtime.Services())
{
//读取DWG文件
}
你用的哪个版本,发给我一下topia@163.com