Пошук тексту в DWG C#

Файли креслень DWG містять 2D- або 3D-проектні дані. Він широко використовується дизайнерами, інженерами та архітекторами. У деяких випадках вам може знадобитися знайти текст у файлі DWG. Відповідно, у цій статті обговорюється, як шукати текст у файлі DWG програмним способом у C#.

Пошук тексту у файлі креслення DWG – конфігурація C# API

Aspose.CAD for .NET підтримує створення та обробку різних креслень САПР, як-от DWG, DXF та кількох інших форматів файлів. Ви можете легко налаштувати API, завантаживши файли DLL із розділу Завантаження або виконавши наступну команду встановлення NuGet:

PM> Install-Package Aspose.CAD

Як шукати текст у файлі DWG за допомогою C#

Наступні кроки демонструють, як шукати текст у файлі DWG за допомогою C#:

  1. Завантажте існуючий файл DWG.
  2. Шукайте текст, перебираючи сутності CadText.
  3. Пошук тексту на певному макеті.
  4. Експортуйте файл у формат PDF.

Пошук тексту у файлі креслення DWG у C#

Для пошуку тексту у файлі DWG за допомогою C# потрібно виконати наведені нижче дії.

  1. Завантажте наявний файл DWG із класом CadImage.
  2. Шукайте текст, перебираючи сутності CadText.
  3. Пошук тексту на певному макеті.
  4. Експортуйте файл у формат PDF.

У прикладі коду нижче показано, як шукати текст у файлі DWG за допомогою C#:

// Завантажте існуючий файл 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 для вибраного макета або колекція entitiesOnLayouts за BlockTableRecordHandle макета (для dxf) порожня
    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 без будь-яких оціночних обмежень, надіславши запит на безкоштовну тимчасову ліцензію.

Висновок

У цій статті ви дізналися, як здійснювати програмний пошук тексту у файлі DWG на C#. Крім того, ви можете досліджувати різні функції API, переглянувши розділ документація. У разі будь-яких проблем, будь ласка, напишіть нам на форум.

Дивись також

Перегляд файлів DWG на основі ASP.NET