Pesquisar texto em DWG C#

Os arquivos de desenho DWG contêm dados de projeto 2D ou 3D. É amplamente utilizado por designers, engenheiros e arquitetos. Em determinados cenários, pode ser necessário localizar algum texto em um arquivo DWG. Da mesma forma, este artigo discute como pesquisar texto em um arquivo DWG programaticamente em C#.

Localizar texto no arquivo de desenho DWG - Configuração da API C#

Aspose.CAD para .NET suporta a criação ou manipulação de diferentes desenhos CAD como DWG, DXF e vários outros formatos de arquivo. Você pode configurar facilmente a API baixando os arquivos DLL da seção Downloads ou executando o seguinte comando de instalação NuGet:

PM> Install-Package Aspose.CAD

Como pesquisar texto em arquivo DWG usando C#

As etapas a seguir demonstram como pesquisar texto em um arquivo DWG usando C#:

  1. Carregue um arquivo DWG existente.
  2. Pesquise texto iterando por meio de entidades CadText.
  3. Pesquise texto em um layout específico.
  4. Exporte o arquivo para o formato PDF.

Pesquisar texto no arquivo de desenho DWG em C#

Você precisa seguir as etapas abaixo para pesquisar texto em um arquivo DWG usando C#:

  1. Carregue um arquivo DWG existente com a classe CadImage.
  2. Pesquise por texto iterando através de entidades CadText.
  3. Pesquise texto em um layout específico.
  4. Exporte o arquivo para o formato PDF.

O exemplo de código abaixo mostra como pesquisar texto em um arquivo DWG usando C#:

// Carregue um arquivo DWG existente como CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Procurar texto no arquivo 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Nós iteramos através de entidades CadText, mas algumas outras entidades também podem conter texto, por exemplo, CadMText e outras
        IterateCADNodes(entity);
    }

    // Pesquise por texto em layout específico, obtenha todos os nomes de layout e vincule cada layout ao bloco correspondente com 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");

        // Localizar bloco, aplicável somente para DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // A coleção cadBlockEntity.Entities contém informações sobre todas as entidades em um layout específico
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

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

    // Se a coleção cadBlockEntity para o layout selecionado ou a coleção entityOnLayouts pelo BlockTableRecordHandle do layout (para dxf) estiver vazia
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

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





public static void SearchTextInDWGAutoCADFile()
{
    // O caminho para o diretório de documentos.            
    string sourceFilePath = "search.dwg";
    // Carregue um arquivo DWG existente como CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Pesquise por texto na seção de entidades 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Pesquise por texto na seção do bloco 
    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;
    }
}

Obtenha licença temporária gratuita

Você pode testar os recursos da API sem nenhuma limitação de avaliação solicitando uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu como pesquisar texto em um arquivo DWG programaticamente em C#. Além disso, você pode explorar diferentes recursos da API dando uma olhada na seção documentação. Em caso de dúvidas, escreva-nos para forum.

Veja também

Visualizador de arquivos DWG baseado em ASP.NET