说一下acad的bug
Posted jjbox
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说一下acad的bug相关的知识,希望对你有一定的参考价值。
这是一个kean在博客的dbx例子,也就是后台打开dwg,这个例子有个问题,利用他插入图元之后,"新宋体"插入单行文字会出现基点不在文字图形的中间,这情况会保存到dwg内。
arx的情况不清楚,所以请用发送命令或lisp实现...
[CommandMethod("IB")] public void ImportBlocks() { DocumentCollection dm = Application.DocumentManager; Editor ed = dm.MdiActiveDocument.Editor; Database destDb = dm.MdiActiveDocument.Database; Database sourceDb = new Database(false, true); PromptResult sourceFileName; try { //从命令行要求用户输入以得到要导入的块所在的源 DWG 文件的名字 sourceFileName = ed.GetString(" 输入来源DWG的完整路径: "); //把源 DWG 读入辅助数据库 sourceDb.ReadDwgFile(sourceFileName.StringResult, System.IO.FileShare.Read, true, ""); //用集合变量来存储块 ID 的列表 ObjectIdCollection blockIds = new ObjectIdCollection(); Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = sourceDb.TransactionManager; using (Transaction myT = tm.StartTransaction()) { //打开块表 BlockTable bt = (BlockTable)tm.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false); //在块表中检查每个块 foreach (ObjectId btrId in bt) { BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId, OpenMode.ForRead, false); //只添加有名块和非 layout 块(layout 块是非 MS 和非 PS 的块) if (!btr.IsAnonymous && !btr.IsLayout) blockIds.Add(btrId); btr.Dispose(); //释放块表记录引用变量所占用的资源 } bt.Dispose();//释放块表引用变量所占用的资源 //没有作改变,不需要提交事务 myT.Dispose(); } //用 WblockCloneObjects 把所有的块从源库拷贝块到目的库的块表中 //这只能实现导入块到指定的数据库中,但不是深度克隆, //若对块参照实行深度克隆的话,其所引用的块也会被克隆到指定的数据库中 IdMapping mapping = new IdMapping(); sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, mapping, DuplicateRecordCloning.Replace, false); ed.WriteMessage (" 复制 " + blockIds.Count.ToString() + " 块的定义" + sourceFileName.StringResult + " 到当前绘图的块表记录." ); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage(" 复制过程中的错误: " + ex.Message); } sourceDb.Dispose(); }
通过写入块表记录的词典实现裁剪,在高版本中会丢失了翻转裁剪的小三角,据e大说这在arx同样如此,所以只能发送命令或lisp实现.
2008netapi如果你建一个块,再删除他,再添加一个同名块,用名称获取块定义会得到删除了的那个,然后爆了,
这在2008所有符号表上均存在,所以要容错处理或者检测id时候删除.
而高版本已经修复了这个问题.
以上是关于说一下acad的bug的主要内容,如果未能解决你的问题,请参考以下文章