AutoCAD C# 程序插入OLE图片
autocad,c#,程序,插入,ole,图片
·
浏览次数 : 17
小编点评
## 生成内容时需要带简单的排版
根据博客文章,以下是生成内容时需要带的排版:
1. **`var fn = @\"D:\\NetDriveDir\\OneDrive\\软件工具\\MNYT.png\";`**:将图片文件路径赋值到 `fn` 中。
2. **`var bm = Bitmap.FromFile(fn);`**:将图片文件加载到 `bm` 中。
3. **`Clipboard.SetImage(bm);`**:将 `bm` 设置剪贴板图片。
4. **`var pt = new Point3d(10, 20, 0);`**:创建一个坐标为 (10, 20, 0) 的点。
5. **`var cmdstrInsetOle = new List<string>(){ \"_pasteclip\", $\"{pt.X},{pt.Y}\"};`**:创建一个包含两项指令的列表,用于设置点的位置。
6. **`var cr = env.acEd.CommandAsync(cmdstrInsetOle.ToArray());`**:创建命令异步,使用指令列表传递给 `acEd` 对象。
7. **`cr.OnCompleted(() =>{...})`**:异步完成事件的回调函数。
8. **`Clipboard.Clear();`**:清除剪贴板。
9. **`using (var tr=env.acDb.TransactionManager.StartTransaction()){`**:开启数据库事务。
10. **`var ole = tr.GetObject(psr.Value[0].ObjectId, OpenMode.ForRead) as Ole2Frame;`**:从事务中获取对象,并将其转换为 Ole2Frame 类型。
11. **`if (ole.Type!= Ole2Frame.ItemType.Embedded)`**:检查对象类型,如果不是嵌入式格式,则进行转换。
12. **`ole.UpgradeOpen();`**:将对象转换为嵌入式格式。
13. **`ole.DowngradeOpen();`**:将对象再次转换为 Ole2Frame 类型。
14. **`tr.Commit();`**:提交事务。
15. **`}`**:退出事务。
需要注意的是,由于图片文件格式可能不同,可能需要进行格式转换。建议在运行代码之前检查图片文件格式,并将格式一致的图片加载到 `bm` 中。
正文
参考博客地址
https://www.cnblogs.com/edata/p/17474704.html
var fn = @"D:\NetDriveDir\OneDrive\软件工具\MNYT.png";
var bm = Bitmap.FromFile(fn);
Clipboard.SetImage(bm);
var pt = new Point3d(10, 20, 0);
var cmdstrInsetOle = new List<string>()
{
"_pasteclip",
$"{pt.X},{pt.Y}"
};
var cr = env.acEd.CommandAsync(cmdstrInsetOle.ToArray());
cr.OnCompleted(() =>
{
env.acEd.WriteMessage($"插入old {fn} 完成\n");
Clipboard.Clear();
//var psr = env.acEd.SelectLast();
//using (var tr=env.acDb.TransactionManager.StartTransaction())
//{
// var ole = tr.GetObject(psr.Value[0].ObjectId, OpenMode.ForRead) as Ole2Frame;
// if (ole.Type!= Ole2Frame.ItemType.Embedded)
// {
// ole.UpgradeOpen();
// ole.DowngradeOpen();
// tr.Commit();
// }
//}
});
但是无法激活ole需要手工转换下
然后双击即可打开old源文件
与AutoCAD C# 程序插入OLE图片相似的内容: