Through the Interface——用.NET从外部DWG文件导入块

原文:Import blocks from an external DWG file using .NET

我们将用一个“side database”来从另外一个在内存中加载的,但并不加载到AutoCAD编辑器中的图形来把块导入到编辑器中的当前图形中

下面是C#代码。内部的注释描述了进行的操作。顺便说一下,代码可以很容易地转换成一个可以在AutoCAD外部使用的RealDWG应用(我们只需要简单地把destDb从MdiActiveDocument数据库改为HostApplicationServices的WorkingDatabase并使用另一个的用户界面来获取/输出字符串给用户)。

using System;
using Autodesk.AutoCAD;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System.Collections.Generic;

namespace BlockImport
{
  public class BlockImportClass
  {
    [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
      {
        // Get name of DWG from which to copy blocks
        sourceFileName =
          ed.GetString("\nEnter the name of the source drawing: ");
        // Read the DWG into a side database
        sourceDb.ReadDwgFile(sourceFileName.StringResult,
                            System.IO.FileShare.Read,
                            true,
                            "");

        // Create a variable to store the list of block identifiers
        ObjectIdCollection blockIds = new ObjectIdCollection();

        Autodesk.AutoCAD.DatabaseServices.TransactionManager tm =
          sourceDb.TransactionManager;

        using (Transaction myT = tm.StartTransaction())
        {
          // Open the block table
          BlockTable bt =
              (BlockTable)tm.GetObject(sourceDb.BlockTableId,
                                      OpenMode.ForRead,
                                      false);

          // Check each block in the block table
          foreach (ObjectId btrId in bt)
          {
            BlockTableRecord btr =
              (BlockTableRecord)tm.GetObject(btrId,
                                            OpenMode.ForRead,
                                            false);
            // Only add named & non-layout blocks to the copy list
            if (!btr.IsAnonymous && !btr.IsLayout)
              blockIds.Add(btrId);
            btr.Dispose();
          }
        }
        // Copy blocks from source to destination database
        IdMapping mapping = new IdMapping();
        sourceDb.WblockCloneObjects(blockIds,
                                    destDb.BlockTableId,
                                    mapping,
                                    DuplicateRecordCloning.Replace,
                                    false);
        ed.WriteMessage("\nCopied "
                        + blockIds.Count.ToString()
                        + " block definitions from "
                        + sourceFileName.StringResult
                        + " to the current drawing.");
      }
      catch(Autodesk.AutoCAD.Runtime.Exception ex)
      {
          ed.WriteMessage("\nError during copy: " + ex.Message);
      }
      sourceDb.Dispose();
    }
  }
}

这一切就是这么简单。上的各种对象/属性/方法的更多信息,可以在ObjectARX参考中查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 .NET 开发的应用程序中,我们可以使用一些第三方库或 API,来读取和展示 dxf/dwg 文件。常用的有以下几种: 1. AutoCAD .NET API:AutoCAD 自带的 API,可以在应用程序中使用它来读取和处理 dxf/dwg 文件。不过要注意需要安装 AutoCAD 软件,且使用该 API 需要一定的 AutoCAD 的编程经验。 2. TX Text Control:这是一款非常流行的文本处理控件,可以读取和展示多种文档格式,包括 dxf/dwg。使用该控件,我们可以将 dxf/dwg 文件转换为图像数据,并在应用程序中以图片的形式展示。 3. AutoCAD OEM:这是针对 CAD 软件开发的 OEM 组件,支持读取和处理 dxf/dwg 文件。可以根据客户需求定制开发,但是需要一定的 CAD 技术储备。 4. Open Design Alliance:这是一个非盈利性质的组织,专注于 CAD 相关技术的研发和开发。它提供了一系列的 API 和软件库,可以用于读取和展示 dxf/dwg 文件,同时支持多种平台和语言。 总之,无论采用哪种方案,读取和展示 dxf/dwg 文件都需要借助相应的工具和技术。我们需要根据自己的需求和实际情况,选择最适合的方案进行实施。 ### 回答2: 在计算机辅助设计(CAD)领域中,DXF和DWG是两种常见的文件格式。这些格式通常用于保存复杂的图形和模型,如建筑设计图纸和机械零件。通过使用.NET框架提供的类库和工具,我们可以轻松地读取和展示这些类型的文件。 读取DXF和DWG文件的过程涉及到解析文件中的元素和实体,并将其转换为可视化对象。为了实现这个目标,我们可以使用专门的库,如Open Design Alliance的Teigha库,或者使用.NET框架中提供的AutoCAD、Draw和CADInterop等类库。 在使用这些库进行文件读取和展示之前,我们需要安装相应的包,并且熟悉DXF和DWG文件的结构和格式。接下来,我们可以使用类似于以下的代码片段来读取和展示这些文件: ``` using Autodesk.AutoCAD.ApplicationServices.Core; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; // 打开DWG文件 Database db = new Database(false, true); db.ReadDwgFile("path/to/file.dwg", FileOpenMode.OpenForReadAndAllShare, true, ""); // 获取模型空间 BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable; BlockTableRecord btr = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForRead) as BlockTableRecord; // 遍历实体并将其添加到场景中 foreach (ObjectId id in btr) { Entity ent = id.GetObject(OpenMode.ForRead) as Entity; if (ent != null) // 成功读取实体 { // 将实体转换为渲染对象 // ... // 添加渲染对象到场景中 // ... } } //展示文件,保存并关闭 db.SaveAs("path/to/output.dwg", DwgVersion.Current); db.CloseInput(true); ``` 在代码中,我们首先打开DWG文件并获取其中的模型空间。随后,我们遍历该空间的所有实体,并将其转换为能够被渲染的对象,然后将其添加到场景中。最后,我们可以保存渲染结果并关闭文件。 总之,使用.NET框架读取和展示DXF和DWG文件是可行的,需要使用特定的类库并了解文件格式和结构。有了这些工具和知识,我们可以轻松地在.NET平台上实现各种CAD应用程序。 ### 回答3: Dxf和Dwg文件是一种常见的CAD文件格式,它们在制图行业和工业设计中应用广泛。为了实现这样的需求,我们可以采用.net平台的Autodesk AutoCAD API来读取和展示这些文件。 通过使用Autodesk AutoCAD API,我们可以轻松地读取dxf和dwg文件。首先,我们需要创建一个CAD应用程序并加载AutoCAD API。然后,我们可以使用API来打开dxf或dwg文件并读取文件中的对象和实体。这些读取的数据可以用于展示文件的各个部分,如图层、、文本、线条和基本几何形状等。 读取并展示dxf和dwg文件的过程中,我们需要注意一些细节。例如,在读取时需要确定文件的版本和在展示时需要考虑线条宽度等样式信息。此外,在处理较大的CAD文件时,需要考虑性能优化,以确保程序的运行速度。 总的来说,通过使用Autodesk AutoCAD API,我们可以实现对dxf和dwg文件的读取和展示,并可以在应用程序中添加自定义样式和交互功能以满足用户需求。这种技术应用广泛,是制图行业和工业设计的重要组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值