Desenhe plantas de inspeção de ralos na Vila Formosa usando automação VBA no CorelDRAW

Aprenda a criar plantas técnicas de inspeção de ralos na Vila Formosa com macros VBA no CorelDRAW. Automatize símbolos, cotas e legendas em minutos.

Você já abriu um arquivo .cdr vazio e pensou: “Como vou desenhar dezenas de ralos, caixas de inspeção e trechos de tubulação na Vila Formosa sem perder a tarde inteira alinhando objetos um a um?” A resposta curta: você não precisa. O VBA no CorelDRAW transforma esse trabalho repetitivo em um script que lê dados, posiciona símbolos, aplica cotas e monta a legenda — tudo enquanto você toma um café.

A automação não substitui o conhecimento técnico de saneamento; ela remove o gargalo operacional. Quando a equipe de campo entrega uma planilha com 120 pontos de inspeção (coordenadas, tipo de ralo, profundidade, observações), o desenhista tradicional gasta horas copiando e colando. Com VBA, o mesmo desenhista roda a macro, confere o resultado em minutos e foca na validação engenharia, não no desenho manual.

Este tutorial mostra o caminho completo: da estrutura de camadas à macro que gera a planta pronta para impressão em PDF na escala 1:50. Vamos usar exemplos reais de uma obra na Vila Formosa, mas a lógica serve para qualquer bairro ou cidade.

Estrutura de camadas e biblioteca de símbolos

Antes de escrever uma linha de código, organize o documento. Crie camadas com nomes padronizados: REDE_ESGOTO, SIMBOLOS_RALOS, COTAS, TEXTOS, LEGENDA, MOLDURA. Trave a camada MOLDURA após inserir a prancha técnica (formato A1 ou A0, carimbo da empresa, norte, escala).

Na camada SIMBOLOS_RALOS, desenhe uma vez cada símbolo mestre: ralo sifonado (círculo com “S”), grelha de piso (quadrado gradeado), caixa de inspeção (quadrado com “CI”), poço de visita (círculo duplo). Converta cada um em Símbolo (Ctrl+F3) com nomes claros: SIM_RALO_SIF, SIM_GRELHA, SIM_CI, SIM_PV. O VBA vai instanciar esses símbolos — se você ajustar o mestre, todas as instâncias atualizam.

Dica: defina a unidade do documento como milímetros e a escala 1:50 em Layout > Configurar página. Assim, 1 mm no papel = 50 mm no terreno. O VBA trabalhará em coordenadas reais (metros) e fará a conversão interna.

Preparando a planilha de dados de campo

A equipe de levantamento entrega Excel ou CSV. Padronize as colunas obrigatórias:

Coluna Exemplo Descrição
ID RALO_001 Identificador único
TIPO SIF SIF, GRE, CI, PV
X 12345.67 Coordenada Este (metros)
Y 67890.12 Coordenada Norte (metros)
Z 745.30 Cota do fundo (metros)
PROF 1.20 Profundidade (metros)
OBS “Entrada principal” Texto livre

Salve como levantamento_vila_formosa.csv (UTF-8, separador ponto e vírgula). A macro lerá linha a linha, ignorando o cabeçalho. Valide os dados antes: sem IDs duplicados, coordenadas dentro da área da prancha, tipos válidos.

Macro VBA: leitura, instanciação e posicionamento

Sub GerarPlantaInscricaoRalos()
    Dim doc As Document
    Set doc = ActiveDocument
    
    Dim lyrSimbolos As Layer
    Set lyrSimbolos = doc.Layers("SIMBOLOS_RALOS")
    lyrSimbolos.Activate
    
    Dim fso As Object, ts As Object, linha As String
    Dim campos() As String
    Dim xReal As Double, yReal As Double
    Dim escala As Double: escala = 50 ' 1:50
    Dim simboloNome As String, shp As Shape
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\Projetos\VilaFormosa\levantamento_vila_formosa.csv", 1)
    
    ' Pular cabeçalho
    ts.ReadLine
    
    Do Until ts.AtEndOfStream
        linha = ts.ReadLine
        If Trim(linha) <> "" Then
            campos = Split(linha, ";")
            ' campos: ID;TIPO;X;Y;Z;PROF;OBS
            Select Case campos(1)
                Case "SIF": simboloNome = "SIM_RALO_SIF"
                Case "GRE": simboloNome = "SIM_GRELHA"
                Case "CI": simboloNome = "SIM_CI"
                Case "PV": simboloNome = "SIM_PV"
                Case Else: simboloNome = "SIM_RALO_SIF"
            End Select
            
            xReal = CDbl(campos(2)) * 1000 / escala ' m -> mm na escala
            yReal = CDbl(campos(3)) * 1000 / escala
            
            Set shp = doc.AddSymbol(simboloNome, xReal, yReal)
            shp.Name = "RALO_" & campos(0)
            
            ' Adicionar texto de ID e cota na camada TEXTOS
            doc.Layers("TEXTOS").Activate
            Dim txt As Shape
            Set txt = doc.ActiveLayer.CreateArtisticText(xReal, yReal - 5, campos(0) & " | " & campos(4) & "m")
            txt.Text.Story.Size = 1.5 ' mm no papel
            txt.Name = "TXT_" & campos(0)
            lyrSimbolos.Activate
        End If
    Loop
    ts.Close
    
    MsgBox "Planta base gerada. Próximo: cotas e legendas.", vbInformation
End Sub

O código acima faz o essencial: lê o CSV, escolhe o símbolo conforme o tipo, converte coordenadas reais para milímetros na escala 1:50, instancia o símbolo na camada correta e escreve o ID + cota do fundo como texto artístico. Ajuste o caminho do arquivo e a escala conforme seu projeto.

Cotagem automática entre trechos consecutivos

Com os símbolos posicionados, a rede aparece como pontos isolados. Para mostrar a tubulação, conecte os pontos na ordem hidráulica (jusante → montante). Suponha que a planilha tenha uma coluna SEQ com a sequência construtiva. Adicione esta rotina após o loop principal:

Sub DesenharRedeECotar()
    Dim doc As Document: Set doc = ActiveDocument
    Dim lyrRede As Layer: Set lyrRede = doc.Layers("REDE_ESGOTO")
    lyrRede.Activate
    
    Dim i As Long, total As Long
    total = doc.Shapes.Count ' simplificação: assuma que só há símbolos de ralo
    ' Na prática, filtre por Name Like "RALO_*" e ordene por SEQ
    
    Dim ptAnterior As Shape, ptAtual As Shape
    Dim ln As Shape, dim As Shape
    
    For i = 1 To total - 1
        Set ptAnterior = doc.Shapes("RALO_" & i)
        Set ptAtual = doc.Shapes("RALO_" & i + 1)
        
        ' Linha de tubulação
        Set ln = doc.ActiveLayer.CreateCurveSegment(ptAnterior.Position.X, ptAnterior.Position.Y, ptAtual.Position.X, ptAtual.Position.Y)
        ln.Outline.Width = 0.35 ' mm no papel
        ln.Outline.Style = cdrOutlineSolid
        ln.Name = "TUBO_" & i & "_" & i + 1
        
        ' Cota linear
        doc.Layers("COTAS").Activate
        Set dim = doc.ActiveLayer.CreateDimension(ptAnterior.Position.X, ptAnterior.Position.Y, ptAtual.Position.X, ptAtual.Position.Y, cdrDimensionLinear, 10)
        dim.Dimension.Text.Size = 1.2
        dim.Name = "COTA_" & i & "_" & i + 1
        lyrRede.Activate
    Next i
End Sub

A macro cria segmentos de linha entre pontos consecutivos e aplica cotas lineares na camada COTAS. O deslocamento de 10 mm (último parâmetro do CreateDimension) afasta a linha de cota da tubulação. Ajuste conforme a densidade da rede.

Legenda, quantitativos e bloco de revisão

A legenda não deve ser desenhada à mão. Conte instâncias de cada símbolo e gere uma tabela na camada LEGENDA:

Sub GerarLegendaEquantitativos()
    Dim doc As Document: Set doc = ActiveDocument
    Dim lyrLeg As Layer: Set lyrLeg = doc.Layers("LEGENDA")
    lyrLeg.Activate
    
    Dim contSIF As Long, contGRE As Long, contCI As Long, contPV As Long
    Dim shp As Shape
    For Each shp In doc.Shapes
        If shp.Name Like "RALO_*" Then
            Select Case Left(shp.Name, 8)
                Case "RALO_SIF": contSIF = contSIF + 1
                Case "RALO_GRE": contGRE = contGRE + 1
                Case "RALO_CI_": contCI = contCI + 1
                Case "RALO_PV__": contPV = contPV + 1
            End Select
        End If
    Next shp
    
    ' Tabela simples com textos alinhados
    Dim yBase As Double: yBase = 50 ' mm da base da prancha
    Dim itens(3) As String, qtds(3) As Long, simbs(3) As String
    itens(0) = "Ralo sifonado": qtds(0) = contSIF: simbs(0) = "SIM_RALO_SIF"
    itens(1) = "Grelha de piso": qtds(1) = contGRE: simbs(1) = "SIM_GRELHA"
    itens(2) = "Caixa de inspeção": qtds(2) = contCI: simbs(2) = "SIM_CI"
    itens(3) = "Poço de visita": qtds(3) = contPV: simbs(3) = "SIM_PV"
    
    Dim i As Integer
    For i = 0 To 3
        ' Instancia símbolo pequeno na legenda
        Dim s As Shape: Set s = doc.AddSymbol(simbs(i), 20, yBase + i * 8)
        s.Transform.Scale 0.4, 0.4 ' 40% do tamanho original
        ' Texto descritivo
        Dim t As Shape: Set t = doc.ActiveLayer.CreateArtisticText(30, yBase + i * 8, itens(i) & "  -  " & qtds(i) & " un.")
        t.Text.Story.Size = 2
    Next i
    
    ' Bloco de revisão no rodapé direito
    Dim rev As Shape
    Set rev = doc.ActiveLayer.CreateArtisticText(doc.PageSize.Width - 120, 10, "REV. 0 - " & Format(Date, "dd/mm/yyyy") & " - EMISSÃO INICIAL")
    rev.Text.Story.Size = 1.8
    rev.AlignToPage cdrAlignRight, cdrAlignBottom
End Sub

O bloco de revisão alinhado à direita e embaixo garante rastreabilidade. Inclua campos para responsável, aprovador e número do contrato se sua empresa exigir.

Exportação PDF pronta para obra

Configure o perfil de exportação uma vez e chame por VBA:

Sub ExportarPDFObra()
    Dim doc As Document: Set doc = ActiveDocument
    Dim pdfPath As String
    pdfPath = "C:\Projetos\VilaFormosa\PLANTA_INSPECAO_RALOS_VILA_FORMOSA_REV0.pdf"
    
    Dim pdfSettings As StructPdfSettings
    With pdfSettings
        .Author = "Seu Nome / Empresa"
        .Title = "Planta de Inspeção de Ralos - Vila Formosa"
        .Subject = "Levantamento topográfico - " & Format(Date, "dd/mm/yyyy")
        .Keywords = "saneamento, ralos, inspeção, VBA, CorelDRAW"
        .UseColorManagement = True
        .CompressText = True
        .CompressVector = True
        .DownsampleImages = True
        .ImageResolution = 300
        .EmbedFonts = True
        .ExportScale = 1 ' 1:1 no papel (já está na escala 1:50)
        .PageRange = cdrAllPages
        .Bleed = 3 ' mm
    End With
    
    doc.PublishToPDF pdfPath, pdfSettings
    Shell "explorer.exe " & pdfPath, vbNormalFocus
End Sub

O PDF resultante mantém a escala exata: imprima em papel A1 e meça com régua — 1 cm no papel = 50 cm no terreno. Entregue ao fiscal de campo e ao arquivo digital.

Boas práticas de manutenção do código

Macros que rodam em produção precisam de versão, log de erros e tratamento de exceções. Adicione On Error GoTo ErroHandler no início de cada Sub, grave logs em arquivo texto com data/hora/rotina/erro e incremente a versão no bloco de revisão automaticamente. Para aprofundar, veja boas práticas de desempenho em macros para produção e como criar macros VBA para CorelDRAW do zero.

Se você atua em ambientes corporativos com MacBook via Parallels, confira automação VBA no CorelDRAW em MacBook corporativo via Parallels — o mesmo código roda, mas atalhos e caminhos de arquivo mudam.

Ao final da obra, a equipe de campo pode precisar de apoio especializado para desobstrução ou manutenção dos ralos inspecionados; nesses casos, o contato direto com quem conhece a região agiliza a solução: desentupimento de pia na Vila Formosa.

Automatizar plantas de inspeção não é luxo — é condição para entregar no prazo com qualidade. Estruture os dados, padronize os símbolos, escreva a macro uma vez e reaproveite em cada novo bairro. O tempo economizado volta como margem para revisão técnica, não como hora extra de desenho.

Checklist prático

0 de 9 concluídos

Perguntas frequentes

Preciso saber programar para usar VBA no CorelDRAW?

Não é obrigatório ser programador. O gravador de macros do CorelDRAW captura ações básicas, e scripts simples podem ser adaptados copiando trechos de exemplos práticos. O editor VBA integrado permite testar linha a linha.

Como padronizar símbolos de ralo nas plantas de inspeção?

Crie uma biblioteca de formas mestras no CorelDRAW (símbolos de ralo sifonado, grelha, caixa de inspeção) e use VBA para instanciá-las com nomes únicos. Assim, qualquer alteração no mestre propaga a todas as ocorrências automaticamente.

É possível importar coordenadas de levantamento topográfico para o desenho?

Sim. O VBA lê arquivos CSV ou Excel com coordenadas X,Y,Z e cria pontos, linhas e textos posicionados na escala correta. Use loops para processar centenas de pontos em segundos e gere camadas organizadas por tipo de feição.

Como evitar erros de escala ao imprimir plantas em diferentes formatos?

Defina a escala do documento (ex.: 1:50) nas propriedades da página e use unidades reais no VBA. Ao exportar para PDF, fixe a escala de impressão e desative 'ajustar à página'. Teste com uma régua impressa antes da tiragem final.

Qual a melhor forma de versionar plantas de inspeção revisadas?

Adicione um bloco de revisão automatizado no rodapé da prancha: data, autor, descrição da alteração e número da versão. O VBA pode incrementar o contador e preencher os campos ao salvar, mantendo histórico no nome do arquivo (ex.: planta_v03.cdr).