Attaching AutoCAD Xrefs and inserting them


Attaching AutoCAD Xrefs and inserting them at the origin using .NET
https://www.keanw.com/2015/11/attaching-autocad-xr ... m-at-the-origin-using-net.html

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Runtime;

using System;

using System.IO;

 

namespace XrefAttachAtZero

{

  public static class Extensions

  {

    /// <summary>

    /// Attaches the specified Xref to the current space in the current drawing.

    /// </summary>

    /// <param name="path">Path to the drawing file to attach as an Xref.</param>

    /// <param name="pos">Position of Xref in WCS coordinates.</param>

    /// <param name="name">Optional name for the Xref.</param>

    /// <returns>Whether the attach operation succeeded.</returns>

 

    public static bool XrefAttachAndInsert(

      this Database db, string path, Point3d pos, string name = null

    )

    {

      var ret = false;

      if (!File.Exists(path))

        return ret;

 

      if (String.IsNullOrEmpty(name))

        name = Path.GetFileNameWithoutExtension(path);

 

      try

      {

        using (var tr = db.TransactionManager.StartOpenCloseTransaction())

        {

          var xId = db.AttachXref(path, name);

          if (xId.IsValid)

          {

            var btr =

              (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);

 

            var br = new BlockReference(pos, xId);

            btr.AppendEntity(br);

            tr.AddNewlyCreatedDBObject(br, true);

 

            ret = true;

          }

          tr.Commit();

        }

      }

      catch (Autodesk.AutoCAD.Runtime.Exception)

      { }

 

      return ret;

    }

  }

 

  public class Commands

  {

    [CommandMethod("XAO")]

    public void XrefAttachAtOrigin()

    {

      var doc = Application.DocumentManager.MdiActiveDocument;

      if (doc == null)

        return;

      var db = doc.Database;

      var ed = doc.Editor;

 

      // Ask the user to specify a file to attach

 

      var opts = new PromptOpenFileOptions("Select Reference File");

      opts.Filter = "Drawing (*.dwg)|*.dwg";

      var pr = ed.GetFileNameForOpen(opts);

 

      if (pr.Status == PromptStatus.OK)

      {

        // Attach the specified file and insert it at the origin

 

        var res = db.XrefAttachAndInsert(pr.StringResult, Point3d.Origin);

 

        ed.WriteMessage(

          "External reference {0}attached at the origin.",

          res ? "" : "not "

        );

      }

    }

  }

}

 




ReadDwgFile AttachXRef



欢迎关注微信公众账号ByCAD