c#autocad怎么将jpg图片绑定到dwg

朋友们,谁知道C#怎么用autocadapi2019将jpg图片插入dwg中,不用一定要有这个图片资源打开也能看见图片的,只能用ole吗?现有个需求就是用代码实现,将jpg图片插入dwg签名位置,可能会存在多个图纸空间,修改的话还需要删除这个签名插入新的签名,或者删除当前签名位置前面的所有签名!

img


我用光栅插入的但是没有这个图片资源只显示路径的,比谢!

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

要使用C#的AutoCAD API将jpg图片插入dwg文件,并且不要求打开该图片资源即可在AutoCAD中查看图片,您可以考虑使用OLE对象来实现。

以下是大致的步骤:

  1. 首先,确保您已经在C#项目中引用了AutoCAD的相关库,并进行了正确的初始化。
  2. 创建一个AutoCAD的Application对象,打开目标的dwg文件。
    using Autodesk.AutoCAD.ApplicationServices;
     using Autodesk.AutoCAD.DatabaseServices;
     
     // 创建一个AutoCAD的Application对象
     Application app = new Application();
     // 打开dwg文件
     Document doc = app.DocumentManager.Open("your_file_path.dwg");
     
  3. 使用数据库事务,在指定的图纸空间中插入OLE对象。
    using Autodesk.AutoCAD.EditorInput;
     using Autodesk.AutoCAD.Geometry;
     using Autodesk.AutoCAD.Interop;
     using Autodesk.AutoCAD.Interop.Common;
     
     // 获取当前图纸空间
     Editor editor = doc.Editor;
     ObjectId spaceId = editor.CurrentSpaceId;
     BlockTableRecord btr = doc.Database.TransactionManager.GetObject(spaceId, OpenMode.ForWrite) as BlockTableRecord;
     
     // 删除之前的签名或图片
     foreach (ObjectId objectId in btr)
     {
         DBObject obj = objectId.GetObject(OpenMode.ForRead);
         if (obj is Entity)
         {
             Entity entity = (Entity)obj;
             // 根据需要的条件删除之前的签名或图片
             if (entity is Ole2Frame && entity.Layer == "YourLayerName")
             {
                 entity.UpgradeOpen();
                 entity.Erase();
             }
         }
     }
     
     // 插入新的OLE对象
     Point3d insertionPoint = new Point3d(10, 10, 0);  // 设置插入位置
     string imagePath = "your_image_path.jpg";  // 设置图片路径
     
     Ole2Frame oleFrame = new Ole2Frame();
     oleFrame.InsertionPoint = insertionPoint;
     oleFrame.ScaleFactors = new Scale3d(1, 1, 1);
     oleFrame.FileName = imagePath;
     oleFrame.Layer = "YourLayerName";
     oleFrame.UpdateThumbnail();
     
     btr.AppendEntity(oleFrame);
     doc.TransactionManager.QueueForGraphicsFlush();
     
     // 保存并关闭dwg文件
     doc.Save();
     doc.Close();
     

这样,您可以通过以上步骤使用AutoCAD API将jpg图片以OLE对象的形式插入到dwg文件中。请根据实际情况修改代码中的文件路径、图纸空间、插入位置等参数。