Cerca testo in DWG C#

I file di disegno DWG contengono dati di progettazione 2D o 3D. È ampiamente utilizzato da designer, ingegneri e architetti. In alcuni scenari, potrebbe essere necessario trovare del testo in un file DWG. Di conseguenza, questo articolo illustra come cercare testo in un file DWG a livello di codice in C#.

Trova testo nel file di disegno DWG – Configurazione API C#

Aspose.CAD for .NET supporta la creazione o la manipolazione di diversi disegni CAD come DWG, DXF e molti altri formati di file. Puoi configurare facilmente l’API scaricando i file DLL dalla sezione Download o eseguendo il seguente comando di installazione NuGet:

PM> Install-Package Aspose.CAD

Come cercare testo nel file DWG usando C#

I passaggi seguenti mostrano come cercare testo in un file DWG utilizzando C#:

  1. Carica un file DWG esistente.
  2. Cerca il testo scorrendo le entità CadText.
  3. Cerca testo su un layout specifico.
  4. Esporta il file in formato PDF.

Cerca testo nel file di disegno DWG in C#

È necessario seguire i passaggi seguenti per cercare testo in un file DWG utilizzando C#:

  1. Carica un file DWG esistente con la classe CadImage.
  2. Cerca il testo scorrendo le entità CadText.
  3. Cerca il testo su un layout specifico.
  4. Esporta il file in formato PDF.

L’esempio di codice seguente mostra come cercare testo in un file DWG utilizzando C#:

// Carica un file DWG esistente come CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Cerca il testo nel file 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Iteriamo attraverso entità CadText, ma alcune altre entità possono contenere anche testo, ad esempio CadMText e altri
        IterateCADNodes(entity);
    }

    // Cerca il testo su un layout specifico, ottieni tutti i nomi dei layout e collega ogni layout con il blocco corrispondente con le entità
    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");

        // Trova blocco, applicabile solo per DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // La raccolta cadBlockEntity.Entities contiene informazioni su tutte le entità su un layout specifico
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // Esporta in PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // Se la raccolta cadBlockEntity per il layout selezionato o la raccolta entityOnLayouts per BlockTableRecordHandle del layout (per dxf) è vuota
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

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





public static void SearchTextInDWGAutoCADFile()
{
    // Il percorso della directory dei documenti.            
    string sourceFilePath = "search.dwg";
    // Carica un file DWG esistente come CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Cerca il testo nella sezione delle entità 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Cerca il testo nella sezione del blocco 
    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;
    }
}

Ottieni una licenza temporanea gratuita

Puoi testare le funzionalità dell’API senza alcuna limitazione di valutazione richiedendo una licenza temporanea gratuita.

Conclusione

In questo articolo si è appreso come cercare testo in un file DWG a livello di codice in C#. Inoltre, puoi esplorare diverse funzionalità dell’API dando un’occhiata alla sezione documentazione. In caso di dubbi, scriveteci a forum.

Guarda anche

Visualizzatore di file DWG basato su ASP.NET