DWG C# でテキストを検索

DWG 図面ファイルには、2D または 3D の設計データが含まれています。デザイナー、エンジニア、建築家の間で広く使用されています。特定のシナリオでは、DWG ファイル内のテキストを検索する必要がある場合があります。したがって、この記事では、C# でプログラムによって DWG ファイル内のテキストを検索する方法について説明します。

DWG 図面ファイル内のテキストを検索 – C# API 構成

Aspose.CAD for .NET は、DWG、DXF、およびその他のいくつかの ファイル フォーマット など、さまざまな CAD 図面の作成または操作をサポートします。 ダウンロード セクションから DLL ファイルをダウンロードするか、次の NuGet インストール コマンドを実行することで、API を簡単にセットアップできます。

PM> Install-Package Aspose.CAD

C# を使用して DWG ファイル内のテキストを検索する方法

次の手順は、C# を使用して DWG ファイル内のテキストを検索する方法を示しています。

  1. 既存の DWG ファイルをロードします。
  2. CadText エンティティを反復してテキストを検索します。
  3. 特定のレイアウトでテキストを検索します。
  4. ファイルを PDF 形式にエクスポートします。

C# で DWG 図面ファイルのテキストを検索

C# を使用して DWG ファイル内のテキストを検索するには、次の手順に従う必要があります。

  1. CadImage クラスの既存の DWG ファイルを読み込みます。
  2. CadText エンティティを反復してテキストを検索します。
  3. 特定のレイアウトでテキストを検索します。
  4. ファイルを PDF 形式にエクスポートします。

次のコード サンプルは、C# を使用して DWG ファイル内のテキストを検索する方法を示しています。

// 既存の DWG ファイルを CadImage としてロードします。
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // ファイル内のテキストを検索する 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // CadText エンティティを反復処理しますが、CadMText などの他のエンティティにもテキストが含まれる場合があります。
        IterateCADNodes(entity);
    }

    // 特定のレイアウトのテキストを検索して、すべてのレイアウト名を取得し、各レイアウトを対応するブロックとエンティティにリンクします
    CadLayoutDictionary layouts = cadImage.Layouts;
    string[] layoutNames = new string[layouts.Count];
    int i = 0;
    foreach (CadLayout layout in layouts.Values)
    {
        layoutNames[i++] = layout.LayoutName;
        System.Console.WriteLine("Layout " + layout.LayoutName + " is found");

        // ブロックを検索、DWG のみに適用
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // コレクションcadBlockEntity.Entitiesには、特定のレイアウト上のすべてのエンティティに関する情報が含まれています
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // PDFにエクスポート
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // 選択したレイアウトのcadBlockEntityコレクションまたはレイアウトのBlockTableRecordHandle(dxf用)によるentitiesOnLayoutsコレクションが空の場合
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

    pdfOptions.VectorRasterizationOptions = rasterizationOptions;
    cadImage.Save("SearchText_CAD.pdf", pdfOptions);
}





public static void SearchTextInDWGAutoCADFile()
{
    // ドキュメント ディレクトリへのパス。            
    string sourceFilePath = "search.dwg";
    // 既存の DWG ファイルを CadImage としてロードします。 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // エンティティ セクションでテキストを検索する 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // ブロック セクション内のテキストを検索する 
    foreach (CadBlockEntity blockEntity in cadImage.BlockEntities.Values)
    {
        foreach (var entity in blockEntity.Entities)
        {
            IterateCADNodes(entity);
        }
    }
}



private static void IterateCADNodes(CadBaseEntity obj)
{
    switch (obj.TypeName)
    {
        case CadEntityTypeName.TEXT:
            CadText childObjectText = (CadText)obj;

            Console.WriteLine(childObjectText.DefaultValue);

            break;

        case CadEntityTypeName.MTEXT:
            CadMText childObjectMText = (CadMText)obj;

            Console.WriteLine(childObjectMText.Text);

            break;

        case CadEntityTypeName.INSERT:
            CadInsertObject childInsertObject = (CadInsertObject)obj;

            foreach (var tempobj in childInsertObject.ChildObjects)
            {
                IterateCADNodes(tempobj);
            }
            break;

        case CadEntityTypeName.ATTDEF:
            CadAttDef attDef = (CadAttDef)obj;

            Console.WriteLine(attDef.DefaultString);
            break;

        case CadEntityTypeName.ATTRIB:
            CadAttrib attAttrib = (CadAttrib)obj;

            Console.WriteLine(attAttrib.DefaultText);
            break;
    }
}

無料の一時ライセンスを取得する

無料の一時ライセンス をリクエストすることで、評価制限なしで API の機能をテストできます。

結論

この記事では、C# でプログラムによって DWG ファイル内のテキストを検索する方法を学習しました。さらに、ドキュメント セクションを参照して、API のさまざまな機能を調べることができます。ご不明な点がございましたら、フォーラム までご連絡ください。

関連項目

ASP.NETに基づくDWGファイルのビューア