首页 技术 正文
技术 2022年11月12日
0 收藏 532 点赞 2,773 浏览 3028 个字
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;namespace BlockImport
{
public class BlockImportClass
{
[CommandMethod("tt")]
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 文件的名字
#if false
sourceFileName = ed.GetString("\n输入来源DWG的完整路径: "); //把源 DWG 读入辅助数据库
sourceDb.ReadDwgFile(sourceFileName.StringResult, System.IO.FileShare.Read, true, "");
#else
sourceDb.ReadDwgFile(@"D:\桌面\T.dwg", System.IO.FileShare.Read, true, "");
#endif
//用集合变量来存储块 ID 的列表
var blockIds = new ObjectIdCollection();
using (Transaction tr = sourceDb.TransactionManager.StartTransaction())
{
//打开块表
BlockTable bt = tr.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false) as BlockTable;
//在块表中检查每个块
foreach (ObjectId btrId in bt)
{
var btr = tr.GetObject(btrId, OpenMode.ForRead, false) as BlockTableRecord;
//只添加有名块和非 layout 块(layout 块是非 MS 和非 PS 的块)
if (!btr.IsAnonymous && !btr.IsLayout)
blockIds.Add(btrId);
btr.Dispose(); //释放块表记录引用变量所占用的资源
}
bt.Dispose();//释放块表引用变量所占用的资源 //没有作改变,不需要提交事务
tr.Dispose();
}
//用 WblockCloneObjects 把所有的块从源库拷贝块到目的库的块表中
//这只能实现导入块到指定的数据库中,但不是深度克隆,
//若对块参照实行深度克隆的话,其所引用的块也会被克隆到指定的数据库中
IdMapping mapping = new IdMapping();
sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, mapping, DuplicateRecordCloning.Replace, false);
ed.WriteMessage
("\n复制 "
+ blockIds.Count.ToString()
+ " 个块的定义"
//+ sourceFileName.StringResult
+ " 到当前绘图的块表记录."
);
}
catch (Autodesk.AutoCAD.Runtime.Exception ex)
{
ed.WriteMessage("\n复制过程中的错误: " + ex.Message);
}
sourceDb.Dispose();
}
}
}

说一下acad的bug及问题

说一下acad的bug及问题

这是一个kean在博客的dbx例子,也就是后台打开dwg…

这个例子有个问题,利用它插入图元之后,(某些情况下)单行文字会出现基点不在文字图形的中间,我称为”文字偏移”.

原因是文字或属性使用了”新宋体”,然后使用了”中间,正中,中等等..”非”左”的对齐方式,这将导致这事件发生….其他字体貌似没有发现问题,仅仅发生在”新宋体”上…

左 AttachmentPoint.BaseLeft肯定不会,其他尚未测试…

而我用lisp调用insert命令实现没有这个问题….

文字偏移的情况会保存到dwg内,但是直接打开图纸双击文字,(不加载问题功能前提下)它又会恢复原状!!!气煞我也!! 遇到不妨用代码移动一个0,0到0,0

解决方案是:

1,来源数据库的文字样式表修改”新宋体”为任何一种大字体,

2,再更改文字实体对齐方式为”“,

3,再进行克隆(WblockCloneObjects)….

4,最后在目标数据库还原样式….(已经亲测,必须这样做,只改一项都不行)

注意的是修改Dbtxt的对齐方式从 左 到 其他 时候,要提交一次事务,再开事务,才能获得到单行文字的新基点(很奇葩!),再能从新基点移动到旧基点..

这样克隆(WblockCloneObjects)才不会出现文字矩阵的错误!!

//还原操作
db.TraverseTextStyleTable(tr, tstr =>
{
tstr.UpgradeOpen();
if (tstr.Name == "SD_宋体")
{
tstr.Font = new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("宋体", false, false, , );
}
});


可惜的是e大复现了两次都没有成功复现我这个问题,

所以我没能正确告诉桌子如何修改的bug(毕竟他们是歪果仁)

后来群里有个人说,如果使用了开图复制,那么文字矩阵不会出错.

我的配置是32位修改的Acad2008安装到64位的win10上,但是我的Acad2019也会出现同样的情况,而e大用英文的2019却没有复现成功…

文字偏移在外部参照绑定的时候也会出现,但是insert却不会,而最新的ACAD2020里面的insert小面板也会,可见桌子的代码传承有问题,(这个时候没有说我为什么喜欢用旧版本了吧)

绑定参照后”新宋体”出现文字偏移效果见下图:

说一下acad的bug及问题

*************************************************************************************************************************************************************************************************************************

2008netapi如果你建一个块,再删除他,再添加一个同名块,用名称获取块定义会得到删除了的那个,然后爆了,

这在2008所有符号表上均存在,所以要循环获取并容错处理,或检测id是否已经被删除,

而高版本已经修复了这个问题.

Autodesk 至今都没有公开动态块的纯代码,大家可以通过分析动态块表记录组码和xdata来进行这里的操作..

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294