Buscar texto en DWG C#

Los archivos de dibujo DWG contienen datos de diseño 2D o 3D. Es ampliamente utilizado por diseñadores, ingenieros y arquitectos. En ciertos escenarios, es posible que necesite encontrar texto en un archivo DWG. En consecuencia, este artículo analiza cómo buscar texto en un archivo DWG mediante programación en C#.

Buscar texto en el archivo de dibujo DWG: configuración de la API de C#

Aspose.CAD for .NET admite la creación o manipulación de diferentes dibujos CAD como DWG, DXF y varios otros formatos de archivo. Puede configurar fácilmente la API descargando los archivos DLL de la sección Descargas o ejecutando el siguiente comando de instalación NuGet:

PM> Install-Package Aspose.CAD

Cómo buscar texto en un archivo DWG usando C#

Los siguientes pasos demuestran cómo buscar texto en un archivo DWG usando C#:

  1. Cargue un archivo DWG existente.
  2. Busque texto iterando a través de las entidades de CadText.
  3. Busque texto en un diseño específico.
  4. Exporte el archivo a formato PDF.

Buscar texto en archivo de dibujo DWG en C#

Debe seguir los pasos a continuación para buscar texto en un archivo DWG usando C#:

  1. Cargue un archivo DWG existente con la clase CadImage.
  2. Busque texto iterando a través de entidades CadText.
  3. Busque texto en un diseño específico.
  4. Exporte el archivo a formato PDF.

El ejemplo de código a continuación muestra cómo buscar texto en un archivo DWG usando C#:

// Cargue un archivo DWG existente como CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Buscar texto en el archivo 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Iteramos a través de las entidades de CadText, pero algunas otras entidades también pueden contener texto, por ejemplo, CadMText y otras.
        IterateCADNodes(entity);
    }

    // Busque texto en un diseño específico, obtenga todos los nombres de diseño y vincule cada diseño con el bloque correspondiente con entidades
    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");

        // Buscar bloque, aplicable solo para DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // La colección cadBlockEntity.Entities contiene información sobre todas las entidades en un diseño específico
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // Exportar a PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // Si la colección cadBlockEntity para el diseño seleccionado o la colección de entidades OnLayouts por BlockTableRecordHandle del diseño (para dxf) está vacía
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

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





public static void SearchTextInDWGAutoCADFile()
{
    // La ruta al directorio de documentos.            
    string sourceFilePath = "search.dwg";
    // Cargue un archivo DWG existente como CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Buscar texto en la sección de entidades 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Buscar texto en la sección de bloques 
    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;
    }
}

Obtenga una Licencia Temporal Gratis

Puede probar las características de la API sin ninguna limitación de evaluación solicitando una licencia temporal gratuita.

Conclusión

En este artículo, ha aprendido a buscar texto en un archivo DWG mediante programación en C#. Además, puede explorar diferentes características de la API echando un vistazo a la sección documentación. Si tiene alguna inquietud, escríbanos a foro.

Ver también

Visor de archivos DWG basado en ASP.NET