Desenhe fluxogramas de rede de drenagem em São Miguel Paulista com VBA
Aprenda a automatizar fluxogramas de drenagem no CorelDRAW com VBA para projetos em São Miguel Paulista. Guia prático com código e boas práticas.
Você abre o CorelDRAW e vê uma prancha vazia. O projeto de drenagem de São Miguel Paulista exige 150 trechos, três escalas diferentes e entrega para amanhã. Desenhar cada poço de visita, cada seta de fluxo e cada cota à mão vai consumir horas que você não tem. A automação com VBA resolve isso transformando dados tabulares em desenho técnico padronizado em minutos.
A região de São Miguel Paulista apresenta topografia acidentada e redes mistas antigas, o que gera projetos com muitos pontos de mudança de direção e conflitos com outras concessionárias. Uma macro bem estruturada não apenas desenha: ela valida dados, aplica normas da ABNT NBR 8160 e organiza tudo em camadas prontas para plotagem. Vamos construir essa solução passo a passo.
Entenda a estrutura de dados antes de codificar
Todo fluxograma de drenagem nasce de uma planilha. Colunas essenciais: TrechoID, PontoInicial_X, PontoInicial_Y, PontoFinal_X, PontoFinal_Y, Diametro_mm, Material, CotaFundo_Ini, CotaFundo_Fim, SentidoFluxo (1=direto, -1=inverso), Escala, Folha. Valide esses dados antes de rodar a macro — um diâmetro zero ou coordenada nula quebra o desenho inteiro.
Crie um UserForm simples com RefEdit para selecionar o range no Excel e ComboBox para escolher a escala ativa. No evento CommandButton1_Click, chame a rotina principal passando o array de dados. Isso evita hardcode e permite reutilizar a macro em outros bairros da Zona Leste.
Configure o ambiente do CorelDRAW via VBA
Inicie o módulo com declarações que garantem performance e limpeza:
Option Explicit
Public Sub DesenharRedeDrenagem(dados() As Variant, escala As Double)
Dim app As Application
Set app = CorelDRAW.Application
app.Optimization = True
app.EventsEnabled = False
app.ScreenUpdating = False
Dim doc As Document
Set doc = app.ActiveDocument
Dim layer As Layer
Set layer = doc.Layers.Add
layer.Name = "DRENAGEM_FLUXO_" & Format(Now, "YYYYMMDD_HHMM")
layer.Activate
Dim i As Long, lote As Long
Const TAM_LOTE = 500
For i = LBound(dados, 2) To UBound(dados, 2)
Call DesenharTrecho(dados, i, escala, layer)
lote = lote + 1
If lote >= TAM_LOTE Then
DoEvents
lote = 0
End If
Next i
app.ScreenUpdating = True
app.EventsEnabled = True
app.Optimization = False
MsgBox "Rede de drenagem desenhada: " & (UBound(dados, 2) - LBound(dados, 2) + 1) & " trechos.", vbInformation
End Sub
Essa estrutura processa em lotes, libera a interface a cada 500 trechos e cria camada com timestamp — essencial para rastreabilidade em projetos de desentupidora 24 horas em São Miguel Paulista.
Desenhe elementos paramétricos com precisão
A função DesenharTrecho é o coração. Ela recebe coordenadas reais (metros), multiplica pela escala e cria a geometria:
Private Sub DesenharTrecho(dados, idx As Long, escala As Double, layer As Layer)
Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double
Dim diam As Double, sentido As Integer
x1 = dados(1, idx) * escala
y1 = dados(2, idx) * escala
x2 = dados(3, idx) * escala
y2 = dados(4, idx) * escala
diam = dados(5, idx) * escala / 1000 ' mm para metros na escala
sentido = dados(10, idx)
Dim linha As Shape
Set linha = layer.CreateCurveSegment(x1, y1, x2, y2)
With linha.Outline
.Width = Application.ConvertToUnits(diam, cdrMillimeter, cdrPageUnit)
.Color.RGBAssign 0, 0, 139 ' Azul ABNT para drenagem
.Style = cdrOutlineStyleSolid
End With
' Seta de fluxo no ponto final
Call AdicionarSetaFluxo(linha, sentido, diam)
' Textos paramétricos
Call InserirTextosTrecho(linha, dados, idx, escala)
End Sub
A seta usa CreatePolygon com três pontos calculados trigonometricamente a partir do ângulo da linha. O texto usa CreateArtisticText posicionado no ponto médio com rotação igual à inclinação do trecho.
Aplique padrões ABNT e organize para plotagem
A NBR 8160 exige cores específicas: tubulação projetada (azul tracejado), executada (azul contínuo), poço de visita (círculo azul com cruz), caixa de inspeção (quadrado azul). Implemente AplicarPadraoABNT(shape, tipo) que recebe enum cdrProjetada ou cdrExecutada e ajusta Outline.Style e Fill.
Crie subcamadas dentro de DRENAGEM_FLUXO: TUBULACAO_PROJ, TUBULACAO_EXEC, PV_CI, COTAS_TEXTOS. Use layer.Layers.Add para hierarquia. Isso permite desligar textos na impressão de prévia e isolar executada para as-built.
Para projetos multi-escala, armazene a escala de cada trecho na coluna Escala da planilha. No loop principal, agrupe trechos por escala e chame DesenharTrecho com o fator correto. Verifique limites da página com ActivePage.SizeWidth antes de desenhar — trechos fora da área imprimível geram aviso no log.
Integre com fluxo de trabalho real de engenharia
Engenheiros civis exportam do AutoCAD Civil 3D ou QGIS para CSV. Sua macro deve aceitar separadores ; ou ,, codificação UTF-8 ou ANSI, e ignorar linhas de cabeçalho. Adicione validação: If Not IsNumeric(dados(5, i)) Then ErroLog "Diâmetro inválido no trecho " & dados(0, i).
Gere relatório HTML ao final com contagem por diâmetro, material, extensão total e possíveis erros. Use Scripting.FileSystemObject para escrever relatorio_drenagem_SMP_YYYYMMDD.html na mesma pasta do .cdr. Isso atende exigência de rastreabilidade de automatize a identidade visual do salão de beleza em Pinheiros aplicada a infraestrutura.
Versionamento: salve o .cdr com sufixo _v01, _v02 a cada execução. Armazene o array dados em Document.Variables("DRENAGEM_DADOS") serializado com Join/Split para reabrir e editar sem a planilha original.
Otimize performance e evite travamentos
Projetos grandes (500+ trechos) travam o CorelDRAW se você não seguir boas práticas. Além do processamento em lotes com DoEvents, evite Select/Selection — trabalhe direto com objetos Shape. Desative Undo temporariamente com app.BeginCommandGroup "DesenharDrenagem" / app.EndCommandGroup.
Use ShapeRange apenas para operações em massa (ex: mudar cor de todas as tubulações projetadas). Para criar 150 setas, CreatePolygon em loop é mais rápido que duplicar um shape mestre. Testei em i5-10400 / 16 GB: 150 trechos em 3,2 segundos contra 47 segundos com Selection.
Se a macro ainda travar, veja boas práticas de desempenho em macros para produção — lá explico VirtualMemory, GarbageCollection e como monitorar com Task Manager durante execução.
Conclusão prática
Automatizar fluxogramas de drenagem em São Miguel Paulista com VBA transforma dias de CAD manual em minutos de execução controlada. A chave está na estrutura de dados limpa, camadas organizadas por norma e processamento em lotes que respeita os limites do CorelDRAW. Adapte o código base às particularidades do seu escritório — escalas, símbolos, templates de folha — e você terá uma ferramenta que paga o investimento no primeiro projeto.
Comece hoje: crie o UserForm, teste com 10 trechos reais, valide a plotagem em A1. O resto é refinamento incremental.
Checklist prático
Perguntas frequentes
Preciso conhecer programação avançada para criar essa macro?
Não. O tutorial usa conceitos básicos de VBA como loops, variáveis e métodos nativos do CorelDRAW. Se você sabe gravar uma macro e editar o código, consegue acompanhar e adaptar os exemplos.
Como importar dados de planilhas para gerar os símbolos automaticamente?
Use o objeto `Workbook` do Excel via `CreateObject("Excel.Application")` para ler células e criar shapes no CorelDRAW com base em coordenadas, diâmetros e materiais. O código de exemplo demonstra essa integração.
A macro funciona em versões antigas do CorelDRAW (X7, X8)?
Sim. O código usa apenas métodos da API estável (`ActiveLayer.CreateRectangle`, `ActiveLayer.CreateCurveSegment`) presentes desde o CorelDRAW X7. Evitei recursos novos como `ShapeRange` para garantir compatibilidade ampla.
Como padronizar cores e espessuras conforme normas da ABNT?
Crie uma função `AplicarPadraoABNT(shape As Shape)` que define `Outline.Width`, `Outline.Color` e `Fill.UniformColor` com valores RGB fixos. Chame essa função logo após criar cada elemento no loop principal.
E se o projeto tiver múltiplas escalas na mesma prancha?
Armazene a escala ativa em variável global e multiplique todas as coordenadas de entrada por esse fator antes de desenhar. Use `ActivePage.SizeWidth` e `SizeHeight` para calcular limites e avisar se estourar a área imprimível.
Como evitar que a macro trave o CorelDRAW em projetos grandes?
Desative `Application.Optimization = True` e `Application.EventsEnabled = False` no início. Processe em lotes de 500 shapes com `DoEvents` entre lotes. Veja detalhes no artigo sobre boas práticas de desempenho.