Вы находитесь на странице: 1из 95

CAD: O lado criativo

Exercícios para desenvolver a criatividade de arquitetos e designers da era


digital

Gabriela Celani, Ph.D.


[Orelha esquerda]

Este livro divide-se em duas partes. Na primeira são apresentados diferentes princípios compositivos
frequentemente utilizados por arquitetos e designers, organizados nos seguintes capítulos: simetria,
formas paramétricas, recursão, composições aleatórias, composições regradas e formas emergentes.
Na segunda parte propõe-se a automatização de processos repetitivos, através da algoritmização de
processos de projeto e da geração automática de alternativas. Cada capítulo começa com uma análise
de exemplos do uso de cada sistema compositivo na arquitetura e design. Em seguida, são sugeridos
exercícios para a criação de composições com a utilização de comandos do AutoCAD de forma
inovadora ou de técnicas de programação em VBA, sempre de maneira simples e accessível para o
programador principiante.
[Orelha direita]

Nascida e criada em São Paulo, capital, formei-me em arquitetura em 1989 pela FAU-USP.
Trabalhei a seguir no Rio de Janeiro, desenvolvendo projetos residenciais. Em 1992 mudei-me para
São José dos Campos, SP, onde lecionei CAD em cursos de engenharia civil e arquitetura, enquanto
desenvolvia estudos de mestrado na FAU-USP. Em 1997, mudei-me para Boston, nos Estados
Unidos, onde trabalhei como free-lancer em diversos escritórios de arquitetura. Em 1999 iniciei o
curso de Ph.D. em Design & Computation no M assachusetts Institute of Technology (M IT), onde fui
assistente de ensino e pesquisa dos professores William M itchell, Terry Knight e Takehiko
Nagakura, tendo ainda a oportunidade de criar minha própria disciplina. Defendi minha tese em
julho de 2002 e desde então voltei a residir no Brasil.

Gabriela Celani
celani@alum.mit.edu
[Dedicatória]

Para meus pais, Adela e Dino, e para minha tia, Antonieta, com quem aprendi muito mais do que em
qualquer uma das escolas e universidades que frequentei.
Introdução
As origens do CAD

Ao contrário do que muita gente pensa, CAD não é um programa de computador específico, nem
muito menos uma abreviação de “AutoCAD”, o programa gráfico vetorial criado e comercializado
pela empresa americana AutoDesk. A sigla CAD nada mais é do que a breviação de computer-aided
design, ou seja, projeto (de arquitetura, engenharia, desenho industrial, etc.) auxiliado por
computador, não importando, em princípio, o tipo de uso que se faz do computador ou o programa
que se utiliza. Embora diferentes tipos de programas se enquadrem nessa definição, como programas
de análise estrutural, de simulação de processos ou de otimização, existe uma tendência em se
associar a palavra CAD a programas gráficos vetoriais, ou seja, ao CAD interativo, aquele que
permite a visualização da forma - definida matematicamente - através de uma representação gráfica
digital.

Embora as primeiras aplicações da informática no projeto – principalmente mecânico – datem da


década de 50, foi no início dos anos 60 que surgiu o CAD interativo, no M assachusetts Institute of
Technology (M IT), com o programa “Sketchpad” de Ivan Sutherland. Os primeiros sistemas de
CAD comerciais foram desenvolvidos especialmente para o cliente e destinavam-se a executar
tarefas complicadas, como por exemplo o cálculo de diagramas de vizinhança baseados na teoria dos
grafos para o planejamento espacial de edifícios extremamente complexos. Como nessa época a
interação homem-máquina ainda não estava muito desenvolvida, e como a mão-do-obra para o
desenho técnico era barata e de boa qualidade, o computador praticamente não era utilizado na
representação da forma. No entanto, com a rápida evolução dos computadores em termos de
velocidade de processamento e memória RAM , além do desenvolvimento de monitores raster de alta
resolução, houve um deslocamento dos objetivos originais do CAD de auxiliar do processo de
criação para auxiliar da representação do projeto. Segundo William M itchell, professor do M IT, a
teria sido do computador pessoal. M itchell localiza nos anos 80 esse ponto de inflexão, exatamente
no momento em que se procurou adaptar os complexos programas de CAD de então para atender ao
incipiente mercado de computadores pessoais.

Nos anos 80, os PC’s, surgidos na década anterior, ainda não se comparavam ao poder de
processamento dos computadores de grande porte. Por outro lado, a fim de se viabilizar
economicamente a comercialização em larga escala, era preciso criar programas menos específicos,
que pudessem ser utilizados por um grande número de usuários diferentes. Por estes motivos, o CAD
foi reduzido praticamente a um mero programa de representação da forma. Segundo M itchell (1990),
o efeito negativo dessa adaptação teria sido “estabelecer uma concepção simplista do CAD na
cabeça dos arquitetos”, retardando as possibilidades de uma utilização mais inteligente e avançada
do mesmo.

A quem este livro se destina

Este livro surgiu a partir de uma série de experimentos educacionais com CAD realizados em
diferentes cursos de arquitetura e engenharia civil. Ele se destina a qualquer pessoa que queira
aprender a utilizar o computador para projetar de uma maneira criativa, não importando seu
conhecimento prévio do assunto.
M uitas pessoas se consideram usuários avançados de programas gráficos difícies de utilizar, mas
nunca tiveram a oportunidade de refletir sobre o tipo de uso que fazem deles. Se este uso fôr
relacionado meramente à representação da forma, estes usuários terão sem dúvida algo a aprender
com este livro, onde são sugeridas formas inovadoras de se utilizar técnicas tradicionais, com o
objetivo de tornar mais eficiente o processo de criação na mídia eletrônica.

Por outro lado, algumas pessoas com grande sensibilidade artística temem iniciar seu aprendizado de
CAD, pois não vêem nesse tipo de software nenhuma relação com a criatividade. Para elas, os livros
tradicionais de CAD não passam de manuais técnicos indecifráveis, e embora elas saibam que deve
haver algum meio de se usar o computador de uma maneira criativa, o caminho parece muito árduo.
Com este livro, estas pessoas poderão aprender a utilizar o CAD de uma forma criativa, através de
exercícios divertidos, avançando suavemente das etapas mais simples para as mais avançadas.

Como este livro pretende atender a um público bastante diversificado, os exercícios foram divididos
de maneira a permitir que os novatos aprendam todos os detalhes, enquanto os usuários experientes
podem pular os exercícios inicias de cada capítulo, seguindo diretamente para os mais avançados. As
introduções teóricas, no entanto, servirão igualmente para todos, pois têm como objetivo estabelecer
relações entre os processos de criação da forma na arquitetura e nos programas de CAD.

Embora este livro tenha sido desenvolvido com o intuito de ser um livro-texto para disciplinas de
CAD em cursos relacionados ao design, ele pode ser igualmente utilizado por auto-didatas.

Material e tempo necessários

Os exercícios descritos neste livro foram desenvolvidos especialmente para o programa AutoCAD
versão 2000, com a linguagem de programação VBA, cujo editor acompanha o próprio AutoCAD.
No entanto, isto não impede que estes exercícios sejam adaptados a outros programas de CAD e
linguagens de programação aos quais o leitor esteja mais habituado. Dependendo do conhecimento
prévio do programa de CAD e do tempo disponível, serão necessárias de duas semanas de estudo
diário até um semestre de estudo semanal para o aprendizado de todo o conteúdo do livro. Os
exercícios do primeiro capítulo não envolvem nenhum tipo de programação, podendo ser facilmente
desenvolvidos por leitores principiantes. Nos demais capítulos há sempre a opção de se desenvolver
um pequeno programa utilizando os tutoriais, ou de se utilizar programa prontos, fáceis de instalar,
desenvolvidos especialmente para este livro, que se encontram no CDROM em anexo e que também
podem ser obtidos através da Internet. Como este livro não pretende ser um manual de AutoCAD, é
aconselhável que os menos experientes disponham também de um livro que explique cada comando
do programa detalhadamente.

Agradecimentos

Além do CNPq e do fundo Rosenblith, que custearam minha pesquisa de doutorado, este trabalho
não teria sido possível sem a inestimável contribuição de todos os meus alunos com seus criativos
trabalhos que ilustram este livro. Sou também infinitamente grata a Terry Knight e William M itchell,
meus orientadores do M IT, e aos professores M arcelo Giacaglia e Doris Kowaltowski, pela
oportunidade que me deram de testar meu método de ensino com seus alunos.
Capítulo 1: Simetria

Antigamente, o conceito de simetria estava relacionado com a relação entre as partes e o todo numa
composição. Segundo Vitrúvio, grande teórico da arquitetura que viveu na época do império
romano, "a simetria é derivada da proporção, da calibração mútua de cada elemento com o todo."
Já no mundo moderno, a palavra simetria é normalmente associada a composições geradas por um
processo de reflexão ao longo de um eixo central, a chamada simetria “bilateral” 1. No entanto, o
conceito de simetria envolve também todo tipo de composição em que existe uma repetição
ordenada de partes ao longo de eixos ou ao redor deles. M arch e Steadman definem os seguintes
tipos de simetria no plano: cíclica, diédrica, de frizo e de papel de parede. Ao contrário do que muita
gente pensa, segundo eles, a arquitetura moderna “não aboliu as simetrias, apenas a reintroduziu de
maneira mais original”. As plantas de Frank Lloyd Wright na Figura 1 mostram exemplos do uso da
simetria cíclica e diédrica em algumas de suas plantas.

Figura 1: Plantas de F. L. Wright com simetria cíclica e diédrica.

Figura 2: Os diferentes grupos de simetria no plano. March e Steadman

1
“Bilateral” é a denominação in formal da simetria diédrica com rotação de 0o . No entanto, muitas associam a palavra
simetria exclusivamente a este tipo de composição.
A simetria é também um tema constante em composições da azulejaria clássica e moderna. Observe,
por exemplo, os mosaicos de Alberti e os painéis de Athos Bulcão na Figura 3. Nos dois exemplos,
apesar de distantes no tempo, utilizam o mesmo conceitos de repetição de formas segundo operações
geométricas. A única diferença está no fato de Alberti repetir suas formas dentro de um mesmo
azulejo, enquanto Athos Bulcão as repete em azulejos separados.

Figura 3: Mosaicos da Capela Rucelai, de Alberti., e painéis de azulejos de Athos Bulcão.

Exercícios

Alguns comandos do AutoCAD estão diretamente relacionados com as operações geométricas de


geração de simetrias vistas acima. Por exemplo, o comando M IRROR permite a criação de figuras
com simetria bilateral, obtida por reflexão. O comando ARRAY – opção RECTANGULAR –
permite a criação das formas mais simples de simetria de frizo e de papel de parede. Obtidas
exclusivamente por translação. Já o comando ARRAY – opção POLAR – permite a criação de
composições com simetria cíclica, obtida por rotação. A simetria de tipo diédrica pode ser obtida
com uma combinação dos comandos M IRROR e ARRAY – opção POLAR, numa combinação de
processos de reflexão e rotação. Do mesmo modo, a combinação desses três comandos permitem a
criação de formas complexas de frizo e papel de parede.

1. Composições simétricas estáticas

Desenhe, com o comando SOLID, uma figura semelhante à da


Figura 4. Em seguida, experimente criar as composições simétricas da Figura 2, utilizando apenas os
comandos M IRROR e ARRAY.

Figura 4: Figura-base.

Dicas:
1. Para acionar qualquer comando, você pode selecioná-lo em um menu ou digitá-lo diretamente na
linha de comando, na parte inferior da tela.
2. Os comandos M IRROR e ARRAY se encontram no menu superior M ODIFY.
3. O comando SOLID se encontra no menu superior DRAW/SURFACES/2D SOLID.
4. Quando utilizar o comando SOLID, clique nos vértices do polígono desejado na ordem mostrada
na Figura 5.
5. Leia sempre a linha de comando na parte inferior da tela para saber o que um comando espera
que você faça para dar prosseguimento ao processo.

Figura 5: Sequência corret a para indicação de pontos de um polígono com o comando SOLID.

2. Composições simétricas semi-dinâmicas

Observe que no exercício anterior, após a aplicação dos comandos de repetição da figura-base, a
mesma não pode mais ser alterada, sem que para isso seja necessário refazer completamente a
composição. Neste exercício vamos utilizar um recurso mais avançado do AutoCAD, o bloco, para
atualizar automaticamente as cópias da figura-base caso esta seja modificada posteriormente.

Desenhe novamente, com o comando SOLID, uma figura semelhante à da


Figura 4. Em seguida, transforme-a em um bloco com o comando BLOCK. Insira seu bloco e repita
com ele as operações do exercício anterior, obtendo assim composições com simetria bilateral, de
frizo, de papel de parede e cíclica.

Agora redefina seu bloco e observe a atualização automática de suas composições simétricas.
M odifique seu bloco quantas vezes desejar, até obter um resultado interessante em todas as suas
composições simétricas, como na Figura 6.

Figura 6: Composições simétricas com diferentes figuras-b ase.


Dicas:

1. Para acionar qualquer comando, você pode selecioná-lo em um menu ou digitá-lo diretamente na
linha de comando, na parte inferior da tela.
2. O comando BLOCK se encontra no menu superior DRAW/BLOCK/M AKE
3. Para redefinir seu bloco siga os passos abaixo:

a. Insira uma nova cópia de seu bloco.


b. Exploda-a com o comando EXPLODE (do menu M ODIFY).
c. M odifique sua forma clicando em cada um de seus
vértices e arrastando-os.
d. Redefina seu bloco através do mesmo processo de criação de blocos, dando-lhe novamente seu
nome antigo e respondendo “Yes” à pergunta “Redefine block?”.

3. Composições simétricas dinâmicas

No exercício anterior, após a modificação da figura-base e redefinição do bloco, pôde-se observar


suas consequências nas diferentes composições simétricas. No entanto, nenhuma das tentativas
intermediárias no processo de redefinição do bloco foram testadas nessas compoosições. A fim de se
estabelecer um processo ainda mais dinâmico na geração das composições com simetria, vamos
agora criar ambientes interativos com o uso de múltiplas viewports. As figuras abaixo mostram
alguns exemplos de composições com simetria bilaterial em dois eixos, de frizo vertical, de papel de
parede e cíclica criadas com essa técnica por alunos de graduação em arquitetura.

Figura 7: Composições simétricas geradas com o auxílio de viewports. Créditos (de cima para baixo e da esquerda para
a direita): Marcelo Nakazaki, ...

3.a. Composições bilaterais dinâmicas

Em uma folha de layout, crie 4 viewports quadradas, e desenhe em uma das viewports uma figura
que não possua nenhum tipo de simetria própria, como na Figura 8.
Viewport A Viewport B

Viewport D Viewport C

Figura 8: 4 viewports quadradas na folha de layout.


Em seguida, altere os ângulos de visão das viewports B, C e D para que cada uma delas passe a
mostrar uma imagem rotacionada ou refletida da figura que você criou. Para isso, utilize os seguintes
comandos:

• Na viewport B, utilize o comando VPOINT com os valores 0,0,-1 para conseguir uma
imagem refletida da figura original.
• Na viewport C, utilize o comando DVIEW com o valor 180 na opção TWIST, para conseguir
uma imagem invertida da figura original.
• Finalmente, na viewport D, utilize as duas oprações acima, na mesma ordem em que
aparecem, para conseguir uma imagem ao mesmo tempo refletida e invertida da figura
original.

Dicas:

1. Viewports são vistas para o M odel Space arranjadas em uma página de layout. Clique na orelha
“Layout 1” logo abaixo da área de desenho para passar para o espaço de layout, também
chamado “paper space”.
2. No paper space, crie 4 viewports com o comando VIEW/VIEWPORTS/4VIEWPORTS. Clique
primeiramente em um ponto qualquer da área de desenho e em seguida digite, na linha de
comando: @20,20. Você criará 4 janelas idênticas de dimensão 10x10 unidades. Utilize o
zoom para aproximá-las ou afastá-las, conforme necessário.
3. Para ativar qualquer uma dessas janelas, clique no botão PAPER logo abaixo da área de desenho,
e depois clique dentro da viewport desejada. Ao se criar uma figura em uma das janelas, a
mesma aparecerá nas demais janelas. Para reativar o espaço de layout, clique novamente no
botão com a inscrição M ODEL abaixo da área de prompt.
4. Se você desejar tornar as molduras das viewports invisíveis, use o comando FORM AT/LAYER
para criar um novo layer e congelá-lo. Em seguida, ative o paper space, selecione as molduras
das viewports, e no seletor de layers clique no layer congelado. As molduras irão sumir, mas
não o seu conteúdo.
5. Para evitar que o tamanho e posição das figuras seja diferente em cada viewport, use o comando
VIEW/ZOOM /SCALE, digitando nXP, onde n é um valor arbitrário, porém igual para todas as
viewports. Após essa operação, evite utilizar o comando ZOOM de dentro das viewports
novamente, o que acarretaria uma mudança de tamanho em apenas uma das janelas. Ao invés
disso, experimente usar o comando M ODIFY/SCALE, o que provocará uma modificação
simultânea em todas as janelas. Pelo mesmo motivo, utilize o comando M ODIFY/MOVE ao
invés do comando VIEW/PAN para reposicionar simultaneamente todas as figuras.
6. O uso de determinados comandos, como o SKETCH e o SPLINE, não acarretam uma
atualização simultânea das demais viewports até que os mesmos sejam finalizados.

O resultado será parecido ao que é mostrado na Figura 9. A gora continue acrescentando figuras à sua
composição e editando as mesmas, observando, em tempo real, as consequências dessas alterações
em sua composição simétrica.

Viewport A Viewport B

Viewport D Viewport C

Figura 9: Resultado das operações de modificação de pontos


de vista nas viewports.

3.b. Composições de frizo e papel de parede dinâmicas

Utilize o mesmo princípio para criar ambientes para o desenvolvimento de outras composições com
simetria de frizo e de papel de parede. Para isso, comece criando uma viewport no Paper Space e
utilizando o comando MODIFY/ARRAY, opção RECTANGULAR, para criar matrizes com uma
única linha e diversas colunas (para simetria de frizo) ou com diversas linhas e colunas (para
simetria de papel de parede). Observe como um objeto desenhado ou modificado em apenas uma
dessas viewports é simultaneamente atualizado em todas as demais janelas, como na Figura 10.

Figura 10: Ambiente de viewports para o desenvolvimento de simetria de papel de parede.


Observe que a operação de multiplicação das viewports é feita com o paper space ativado, enquanto
a modificação da figura que se repete em todas as viewports é obtida com o model space ativado, e
qualquer uma das viewports acionada.
Agora, em outra folha de layout experimente criar a seguinte variação: insira duas viewports
idênticas e rotacione a vista de apenas uma delas em 90o. Em seguida, utilize o comando
MODIFY/ARRAY para criar uma matriz com cópias de ambas, como na Figura 11.

Figura 11: Ambiente de viewports para o desenvolvimento de simetria de papel de parede com viewports com diferentes
ângulos de rotação.
Experimente outras variações de frizos e papel de parede, com diferentes rotações e reflexões.
Observe que para que os módulos sejam iguais as rotações deverão ser sempre múltiplas de 90o.

3.c. Composições cíclicas dinâmicas

Para criar ambientes para o projeto de composições cíclicas você pode sobrepôr viewports com
vistas em diferentes ângulos de rotação. Para criar composições cíclicas a 120o, comece criando
quatro viewports iguais e quadradas, com o comando VIEW/VIEWPORTS/4 VIEWPORTS numa
nova folha de layout. Apague uma delas, pois você só vai utilizar três, e desenhe algo no model
space, só para servir de referência, como na Figura 12.

Viewport B
Viewport A

Viewport D

Figura 12: 3 Viewports idênticas.


Em seguida, selecione a viewport B e utilize o comando DVIEW – opção TWIST – para rotacionar o
ângulo de visualização em 120o. A gora, faça o mesmo com a viewport D, porém mudando o ângulo
para 260o. Você obterá uma composição semelhante à da Figura 13.
Figura 13: As 3 viewports com seus ângulos rotacionados em 0, 120 e 240o .

Você deve ter observado que agora o tamanho das figuras nas diferentes viewports ficou
ligeiramente diferente. Isso ocorre porque ao se utilizar o comando D VIEW o nível de zoom é
automaticamente ajustado para EXTANTS, ou seja, o programa tenta exibir tudo o que foi
desenhado no M odel Space dentro de cada viewport. No entanto, os diferentes ângulos de
visualização fazem com que esse ajuste gere diferentes escalas de zoom em cada janela. Para corrigir
esse problema, utilize o comando VIEW/ZOOM /SCALE, digitando nXP (onde n é um valor
arbitrário), procurando exibir a figura em um tamanho menor, como na Figura 14. Além disso, use o
comando M ODIFY/M OVE para mover a figura para fora do centro da viewport, de maneira que não
haja sobreposição da mesma quando as viewports forem sobrepostas.

Figura 14: As 3 viewports com o nível de zoom normalizado e com a figura movida para for a do centro.

Finalmente, acione o paper space (clicando no botão Paper, abaixo da área de prompt) e use o
comando M ODIFY/M OVE para mover as viewports B e C exatamente sobre a viewport A. Agora,
acione novamente o model space (clicando no botão M odel, abaixo da área de prompt), clique dentro
das viewports sobrepostas, e faça modificações em sua figura ou adiciones novas figuras. Você verá
como as três cópias da figura original são dinamicamente atualizadas, de maneira semelhante ao que
ocorre na Figura 15.
Figura 15: As 3 viewports sobrepostas. Observe como novas composições com simetria cíclica são generadas em tempo
real com a movimentação da figura

Tente criar outras composições cíclicas com viewports configuradas para diferentes ângulos de
exibição. Por exemplo, você pode sobrepôr quatro viewports com os ângulos 0, 90, 180 e 270o, cinco
viewports com os ângulos 0, 72, 144, 216 e 288o, etc. , como na Figura 16. Para isto basta dividir
360o no número de objetos que você quer dispôr ao redor do centro de sua composição

Figura 16: Ambiente para o desenvolvimento simultâneo de composições com diferentes tipos de simetria.

3.d. Composições diédricas

Tente também criar outros ambientes para o desenvolvimento de composições simétricas


envolvendo mais de uma das técnica vistas acima, como por exemplo as composições diédricas com
diferentes ângulos de rotação, como na figura abaixo. Para isso, sobreponha viewports com
diferentes ângulos de rotação e viewports com reflexão (utilizando para isso o comando VPOINT
com os valores 0,0,-1) e rotação nos mesmos ângulos.
Figura 17: A soma de 6 viewports produz uma composição diédrica com ângulos de 0, 120 e 240o.

3.e. Composições especiais

Tente também criar outros ambientes especiais para o desenvolvimento de composições com
simetria que possam ajudar em seus projetos. Experimente usar viewports com formatos diferentes,
como na Figura 18. Use diferentes configurações de layers em cada viewport para trabalhar com
diversos módulos simultaneamente, como na Figura 19. Os ambientes assim criados se aplicam não
apenas ao projeto gráfico, como também ao projeto urbanístico. Observe um ambiente de viewports
criado para o estudo do projeto de Oak Park, de Frank Lloyd Wright, na Figura 20. De maneira
semelhante, desenvolva um pequeno projeto na sua área utilizando um ambiente com viewports.

Figura 18: Uso de viewports com formato livre nesta composição com módulos triangulares.

Figura 19: Uso de diferentes con figu raçõ es de layers em diferentes viewports.
Figura 20: Oak Park, de F.L.Wright e um estudo de sua simetria com viewports em AutoCAD.

Dicas:

1. No AutoCAD 2000, o número máximo de viewports que podem ser criadas em um mesmo
layout é 64.
2. Para movimentar, modificar ou configurar a visualização de layers em uma viewport, o paper
space deve estar ativo. Para isso, observe se o botão logo abaixo da área do prompt exibe a
palavra PAPER. Se o mesmo exibir a palavra M ODEL, clique sobre ele para voltar ao espaço
de layout.
3. Para criar viewports não retangulares utilize os comandos VIEW/VIEWPORTS/POLYGONAL
VIEWPORTS ou VIEW/VIEWPORTS/OBJECTS.
4. Para obter diferentes configurações de layers em diferentes viewports, acione o comando layer
(FORM AT/LAYER) e ligue ou desligue os layers desejados na coluna “Active VP Freeze”.

Discussão

1. Quais as vantagens e desvantagens de se utilizar cada uma das técnicas utilizadas nos três
exercícios deste capítulo?

2. Quais as aplicações que o ambiente interativo para geração de composições simétricas


poderia ter na sua área de estudo ou trabalho?

3. Quais as vantagens do uso de um ambiente com viewports em relação aos métodos


tradicionais de projeto na sua área?

Referências bibliográficas

M arch and Steadman. The Geometry of Environment


Capítulo 2: Formas paramétricas
Na matemática, parâmetros são diferentes valores que podem ser atribuídos a uma determinada
variável, permitindo o cálculo de diferentes soluções para um problema. Toda equação expressa
através de parâmetros é uma equação paramétrica. Um bom exemplo é a equação da reta, y = mx +
b, onde m e b são parametros constantes que definem seu ângulo de inclinação e seu ponto de
cruzamento com o eixo vertical, e x e y são as variáveis que representam as coordenadas de cada
ponto da reta, do início ao fim. Dados m e b, para cada valor de x Є R corresponde apenas um valor
de y. Uma vez que a substituição é feita (e.g. y=2x+3 ou y=0x+1) a equação deixa de ser paramétrica
e passa a representar uma reta específica, como r e s, na Figura 21.

Por exemplo:

reta r reta s
m=2 e b=3 m=0 e b=1
para x = -2, y = 2 .-2 + 3 = -1 para x = -2, y = 0 .-2 + 3 = 1
para x = -1, y = 2 .-1 + 3 = 1 para x = -1, y = 0 .-1 + 3 = 1
para x = 0, y = 2 . 0 + 3 = 3 para x = 0, y = 0 . 1 + 1 = 1
para x = 1, y = 2 . 1 + 3 = 5 para x = 1, y = 0 . 1 + 1 = 1
para x = 2, y = 2 . 2 + 3 = 7 para x = 2, y = 0 . 2 + 1 = 1
para x = 3, y = 2 . 3 + 3 = 9 para x = 3, y = 0 . 3 + 1 = 1
para x = 4, y = 2 . 4 + 3 = 11 para x = 4, y = 0 . 4 + 1 = 1
para x = 5, y = 2 . 5 + 3 = 13 para x = 5, y = 0 . 5 + 1 = 1

Figura 21: Retas r e s, obtidas pelas equações y=2.x+3 e y=0.x+1, com x variando entre –2 e 5.

Embora as retas r e s não sejam idênticas, elas possuem em comum uma característica fundamental:
a linearidade. Da mesma forma, na natureza, parâmetros são utilizados na geração de formas
diferentes, porém com as mesmas características fundamentais. Isto permite a geração de uma
grande quantidade de indivíduos com características próprias, porém definidos por uma mesma
“fórmula”. Tomemos como exemplo as diferentes raças de cães existentes. Todas possuem o mesmo
número de ossos em seus esqueletos, cada um com a mesma função que nas demais raças, porém
com diferentes proporções. No entanto, apesar dessa semelhança, é grande a diferença existente
entre um Basset e um São Bernardo, ou entre um Chiuaua e um Setter Irlandês.
Na arquitetura diferentes parâmetros são também utilizados na definição de diferentes formas a
partir de um mesmo conceito. Observe, por exemplo, os edifícios do M useu de Arte M oderna do Rio
de Janeiro e a escola Brasil-Paraguay, ambos de Afonso Eduardo Reidy, Observe também o edifício
do ginásio de Guarulhos de João Villanova Artigas. Os perfís laterais de todos estes edifícios podem
ser considerados versões paramétricas da Figura 21, onde os ângulos de inclinação das laterais e do
telhado, assim como a largura das bases e a distância entre elas receberam diferentes valôres.

Figura 22: Esquema simplificado do perfil do edi fício do MAM,


mostrando os seus parâmetros.

Reidy: MAM -Rio

Reidy: Escola Brasil-Paraguay


Artigas: Ginasio de Guarulhos

A comparação entre as fachadas dos edifícios do Palácio das Relações Exteriores, em Brasília, e da
editora M ondadori, em M ilão, ambos de Oscar Niemeyer, revela uma outra forma de uso de
parâmetros (Figura 23). Ambos são definidos por uma seqüência linear de arcos. No entanto, no
primeiro, todos os arcos são idênticos, à exceção dos que se encontram nos cantos do edifício. Já no
segundo, os arcos parecem ter larguras aleatórias, o que confere à obra um interêsse especial, além
de grande originalidade.

Figura 23: Palácio das Relações Exteriores (esquerda) e editora Mondadori (direita), ambos de Oscar Niemey er.

Além de parâmetros diretamente relacionados a dimensões, alguns parâmetros podem estar


relacionados com a presença ou não de certas características. Por exemplo, as janelas de diferentes
obras de Louis Khan apresentam sem dúvidas grandes semelhanças, apesar de suas diferentes
proporções e das variações nas dimensões da fenda inferior. Além disso, a verga superior pode
apresentar ou não um arco, o qual pode variar do semi-círculo ao arco abatido (Figura 24). Note
também que, quando a verga se apresenta em forma de arco, a altura das laterias da abertura pode ser
igual a zero.

Figura 24: Janelas de Louis Khan.

M uitas vezes, elementos de uma mesma obra são repetidos com diferentes parâmetros, porém
seguindo uma sequência lógica, crescente ou decrescente, ascendente ou descendente, como na
sequência logarítmica da espiral, encontrada em diversos exemplares do mundo animal e vegetal, e
também na arquitetura. Outros exemplos podem ser encontrados nas patas de alguns insetos, ou nas
folhas das extremidades dos galhos das árvores. O mesmo conceito foi utilizado por Frank Lloyd
Wright nas colunas de Grandma's house ( Figura 25 ). Este tipo de composição pode ser representado
por uma função recursiva, que será explicada com maiores detalhes no próximo capítulo.

Figura 25: F. L. Wright: Colunas da Grandma's house.

O uso de formas paramétricas no projeto, determinadas por valores aleatórios ou por sequências
lógicas, gera respectivamente formas mais e menos inesperadas. Em algumas situações pode ser
interessante obter certa regularidade, como no caso das colunas de F. L. Wright. No palácio do do
Planalto a regularidade é ainda maior, pois todos os arcos possuem exatamente as mesmas
dimensões (o que chamamos de simetria linear). Já no edifício da Editora M ondadori, de Niemeyer,
o uso de valores aleatórios, às vezes crescentes, às vezes decrescentes, surpreende a quem vê a obra
pela primeira vez. O uso uso de versões paramétricas de uma mesma forma ajuda ainda a estabelecer
relações visuais entre as partes de um edifício, favorecendo a continuidade na leitura do mesmo. A
vista do observador sente-se como que “atraída” pelas partes semelhantes.

Os exercícios abaixo utilizam comandos de AutoCAD e programação em VBA para explorar


variações paramétricas das formas.

Exercícios

A maneira mais simples de se trabalhar com formas paramétricas no AutoCAD é através do uso de
blocos, que podem ser inseridos no desenho com diferentes fatôres de escala. Embora poucos
saibam, no processo de inserção de blocos, não é necessário que os fatôres de escala em X, Y e Z
sejam iguais. O uso de fatôres diferentes permite obter distorções interessantes nas figuras inseridas.

1. Transformando cubos em pilares, vigas e lajes

Neste exercício, utilizaremos diferentes fatôres de escala em X, Y e Z de um bloco em forma de


cubo para construir com ele uma estrutura composta por pilares, vigas e laje.
1. Crie um cubo com o comando BOX.
2. Em seguida, transforme-o em um bloco chamado “Cubo”, com ponto de inserção em um dos
vértices.
3. Agora insira o bloco “Cubo” repetidas vezes, com diferentes fatôres de escala em X, Y e Z, de
maneira a criar formas semelhantes às que aparecem na Figura 6.
4. Finalmente, com o comando M OVE e o botão OSNAP ligado, monte sua estrutura, posicionando
cada peça através de seus vértices.

Figura 26: Estrutura criada com versões paramétricas de um cubo.

Dica:

Para visualizar seu desenho em perspectiva isométrica, digite o comando VPOINT, seguido por dois
Enters. Posicione o observador através de movimentos do eixo trípode que aparacerá na tela. Outra
opção é utilizar as vistas pré-setadas do AutoCAD, disponíveis no menú
VIEW/3DVIEW/...ISOM ETRIC.

2. Arcos paramétricos

Neste exercício, vamos desenhar uma seqüência de arcos semelhante à do edifício da Editora
M ondadori, de Niemeyer, utilizando para isso apenas um bloco que será previamente definido.

1. Comece criando um arco semelhante ao que aparece na Figura 27, com os comandos LINE e ARC
ou SPLINE.

Dica:

O comando SPLINE permite que você desenhe um arco concordante com as linhas verticais que o
delimitam. Para isso, especifique 3 pontos do arco (inicial, médio e final) e em seguida pressione o
Enter. O promt pedirá para que sejam especificadas as direções de tangência das extremidades do
arco. Com o botão ORTHO ligado, basta clicar em qualquer ponto da tela abaixo de cada um dos
pontos inicial e final do arco.
Figura 27: Bloco “Arco”.

2. Em seguida, transforme o arco recém-criado em um bloco (comando BLOCK), que você chamará
de “arco”. Utilize o ponto A, que aparece na Figura 27, como ponto de inserção.
3. Agora comece a inserir seu bloco repetidas vezes, mantando a escala em Y uniforme, porém
variando a escala em X. Não é necessário alterar a escala em Z.

Figura 28: Composição com o bloco “Arco” inserido com diferentes fatôres de escala.

3. Arcos paramétricos em VBA

Observe que, no exercício anterior, os arcos inseridos nem sempre apresentavam uma concordância
perfeita com as colunas. Além disso, a largura das colunas variava juntamente com a largura do arco,
pois não havia maneira de se determinar proporções independentes para cada uma dessas partes do
bloco. Para obter tal precisão você teria que criar seus arcos manualmente, utilizando sempre a
mesma uma seqüência de comandos, porém com diferentes valores de largura e ponto de inserção a
cada novo arco. Para automatizar esse procedimento, vamos criar um programa em VBA que
permite inserir arcos e colunas com quaisquer dimensões, mantendo a concordância entre eles.

Atenção:

Antes de utilizar o editor de VBA do AutoCAD, configure o Windows de maneira que o ponto, e
não a vírgula, seja utilizado como separador das casa decimais. Para isso abra o menú de
“Configurações Regionais” do “Painel de Controle” (menú Iniciar/Configurações/Painel de
Controle). Em seguida, clique na guia “Números” e substitua a vírgula (,) pelo ponto (.) no campo
“Símbolo decimal”. A maioria dos sistemas em português utiliza a vírgula nesse campo, enquanto os
sistemas em inglês utilizam o ponto. Como o AutoCAD utiliza a vírgula como separador de
coordenadas (x,y,z), o ponto é necessário para que números com casas decimais gerados pelo
sistema não sejam confundidos com pares ordenados.

A linguagem de programação Visual Basic for Application é uma variação da linguagem Visual
Basic utilizada para a automatização de rotinas e customização de diversos programas do ambiente
Windows, como o Word, o Excell e o Access. Todos esses programas imcluem um editor de VBA
onde se pode desenvolver programas específicos para cada aplicação. A partir da versão 2000, o
AutoCAD passou também a incluir um ambiente de desenvolvimento de VBA, o VBA Interactive
Development Editor (VBAIDE). Para acessar o VBAIDE do AutoCAD, utilize o comando de menú
TOOLS/MACRO/Visual Basic Editor. A figura ? mostra as principais áreas do VBAIDE:
1. Barra de menús e barra de botões.
2. Janela de código de um módulo (o módulo ou M odule é inserido através do comando de
menú INSERT/M ODULE).
3. Janela de código de uma caixa de diálogo (a caixa de diálogo ou UserForm é inserida através
do comando de menú INSERT/USERFORM ).
4. Janela de desenho de uma caixa de diálogo (aberta através do comando de menú
VIEW/CODE).
5. Caixa de ferramentas ou Toolbox, de onde se retira os comandos que compõem o layout de
um UserForm (aberta através do comando de menú VIEW/TOOLBOX).
6. Janela do projeto, onde se visualiza os elementos que compõem o programa, como
ThisDrawing (arquivo DWG aberto no AutoCAD), UserForms e M odules (aberta através do
comando de menú VIEW/PROJECT EXPLORER).
7. Janela de propriedades, onde se visualiza as propriedades do elementos selecionado, como as
cores e o título (Caption) de um UserForm (aberta através do comando de menú
VIEW/PROPERTIES WINDOW).

Figura 29: Áreas do editor de VBA do AutoCAD – VBAIDE.

O VBAIDE permite criar interfaces gráficas de maneira fácil e interativa. A interface de um


programa consiste nos elementos de interação entre o computador e o usuário. No VBAIDE você
pode criar caixas de diálogo (UserForms) com diferentes tipos de interatividade, bastanto para isso
“arrastar” os controles desejados da ToolBox, como botões, listas, campos de texto, barras de
rolagem, imagens, etc.

Vamos começar nosso programa criando uma interface gráfica. Para isso, siga os passos abaixo:

1. Carregue o AutoCAD e inicie um novo desenho


2. Carregue o editor de VBA: TOOLS/M ACRO/VISUAL BASIC EDITOR.
3. Grave seu projeto com o nome ASSISTENTE-DE-ARCOS.DVB, utilizando para isso o
comando FILE/SA VE.
4. Insira um UserForm em seu projeto, e digite no campo Caption da janela de propriedades o
nome Assistente de Arcos. Se a janela de propriedades não estiver aparecendo, abra-a com o
comando de menú VIEW/PROPERTIES WINDOW.
5. Se a Toolbox não estiver aparecendo, abra-a com o o comando de menú
VIEW/TOOLBOX. Arraste quatro legendas (Label) da Toolbox para seu UserForm. M ude
a propriedade Caption de cada uma delas para “Altura”, “Largura”, “Altura da base do
arco” e “Espessura do pilar”. Para que o texto caiba dentro das legendas, pode ser
necessário torná-las mais largas, esticando-as por um de seus cantos.
6. Arraste quatro campos de texto (TextBox) da Toolbox para seu UserForm, cada um ao lado
de uma legenda.
7. Arraste um botão (CommandButton) da Toolbox para a parte inferior de seu UserForm.
M ude a propriedade Caption do botão para “Inserir”.

Sua interface deverá ficar parecida com a que aparece na Figura 30.

Figura 30: Interface do programa “ Assistente de Arcos”.

8. O próximo passo consiste em acrescentar o código necessário para permitir que os dados
inseridos pelo usuário sejam captados pelo programa e tornar o botão “Inserir” funcionante.
Os comandos que executam essas tarefas devem ser digitados na janela de código do
UserForm, que pode ser visualizada com o comando de menú VIEW/CODE.
9. Na página de código que se abrirá, a primeira etapa da programação consiste em declarar as
variáveis do problema, informando que tipo de dados elas conterão. Digite, no topo da
página:

Dim altura As Double


Dim largura As Double
Dim espessura As Double
Dim base As Double
Dim insercao As Double

Tipos de variáveis:

Para as variáveis numéricas, os tipos mais comuns utilizados são Double (número com casa decimal
positivo ou negativo) e Integer (número inteiro positivo ou negativo).
Para maiores informações tipos de variáveis, consulte o assunto “Data Type” no Help do VBAIDE.

10. Em seguida, é preciso adicionar os comandos necessários para que os campos de texto
capturem os valores deigitados pelo usuário, atribuindo-os às variáveis declaradas. Para
isso, retorne à janela de layout do UserForm (VIEW/OBJECT) e clique duplo sobre o
primeiro campo de texto. A janela de código se abrirá e duas linhas serão acrescentadas
automaticamente. Digite, entre as linhas criadas, o código em negrito abaixo:

Private Sub txtAltura_Change()


altura = Val(UserForm1.TextBox1.Value)
End Sub

Função Val():

A função Val() assegura que o valor do campo de texto nunca será nulo. Se o usuário não digitar
nenhum valor nesse campo, ou se ele digitar algum valor inválido, como caracteres não numéricos, o
valor atribuído à variável será zero e o programa poderá ser executado normalmente.

11. Repita a operação para cada um dos campos de texto, digitando as linhas abaixo em negrito:

Private Sub txtLargura_Change()


largura = Val(UserForm1.TextBox2.Value)
End Sub

Private Sub txtBase_Change()


base = Val(UserForm1.TextBox3.Value)
End Sub

Private Sub txtEspessura_Change()


espessura = Val(UserForm1.TextBox4.Value)
End Sub

Atenção!!

Se você tiver modificado o nome (propriedade Name) dos campos de texto, do botão ou do
UserForm, faça as alterações correspondentes no código acima. Caso contrário, seu programa não
funcionará corretamente.

12. Finalmente, acrescentaremos o código necessário para tornar o botão “Inserir” funcionante.
Para isso, clique duplo sobre ele e digite, entre as linhas criadas automaticamente, o código
abaixo em negrito. As linhas precedidas pelo caracter ‘ são apenas comentários que
explicam as linhas seguintes, e que você não precisa necessariamente copiar. Essas linhas
não serão “lidas” pelo AutoCAD quando o programa fôr executado, e por tanto não
precisam necessariamente ser copiadas.

Private Sub cmdInserir_Click()

‘Esconder o UserForm para desenhar na tela do AutoCAD


UserForm1.Hide

‘A seguir, os comandos de desenho PLINE, LINE e SPLINE são


‘enviados ao AutoCAD, juntamente com todos os Enters (vbCr)e
‘dados numéricos necessários para a criação do arco.

ThisDrawing.SendCommand ("pline" & vbCr & insercao & ",0,0"_


& vbCr & "@" & altura & "<90" & vbCr & "@" & largura & "<0"_
& vbCr & "@" & altura & "<-90" & vbCr & "c" & vbCr)

ThisDrawing.SendCommand ("line" & vbCr & (insercao +_


espessura) & ",0,0" & vbCr & "@" & base & "<90" & vbCr & vbCr)

ThisDrawing.SendCommand ("line" & vbCr & (insercao +_


largura - espessura) & ",0,0" & vbCr & "@" & base & "<90" &_
vbCr & vbCr)

ThisDrawing.SendCommand ("spline" & vbCr & (insercao +_


espessura) & "," & base & vbCr & "@" & (largura / 2_
- espessura) & "," & (altura - base - espessura) & vbCr & "@"_
& (largura / 2 - espessura) & "," & (-(altura – base_
- espessura)) & vbCr & vbCr & "@1<-90" & vbCr & "@1<-90" &_
vbCr)

Atenção!!

Na função ThisDrawing.SendCommand, lembre-se que:

● O nome do comando enviado, assim como as respostas dadas durante a interação, devem vir entre
aspas (“”).
● O “enter” é indicado pela expressão vbCr, que significa “Visual Basic Carriage Return”)
● O caracter & (“e” comercial) é utilizado para ligar cada parte da mensagem enviada ao AutoCAD.
Ele aparece entre o nome do comando e o “enter” que vem em seguida. Depois, entre esse “enter” e
a resposta à pergunta que o comando envia, e assim por diante.
● Valores numéricos informados ao AutoCAD podem ser substituídos por variáveis, e nesse caso
não necessitam das aspas. O & é utilizado para formar respostas compostas por partes fixas e
variáveis (e.g. espessura & ",0" informa ao AutoCAD o ponto cujo valor de X é igual ao valor
da variável espessura e cujo valor deY é igual a zero).

Dica:

O caracter “_” é utilizado para indicar a continuação de uma função na linha seguinte. Em seu
programa, você pode optar por dividir suas funções em linhas mais curtas, como aqui, ou omitir os
símbolos “_” que aparecem neste livro e digitar cada função numa única linha, mais longa.

‘A coordenada X do ponto de inserção do arco, inicialmente


‘zero, é acrescida da largura do arco desenhado, a fim de que
‘o próximo arco não seja inserido sobre o anterior, e sim à
‘sua direita
insercao = insercao + largura

‘O comando ZOOM EXTENTS ajusta o layout da tela para que o


‘arco seja visualizado
ThisDrawing.SendCommand ("zoom" & vbCr & “e” & vbCr)

‘Apresentar novamente o UserForm para permitir que o usuário


‘continue inserindo arcos
UserForm1.Show

End Sub

13. Teste seu programa com diferentes valores e observe como os diferentes arcos gerados são
inseridos lado a lado, em seqüência, como na Figura 31.

Figura 31: Arcos gerados pelo assistente de arcos com diferent es valores de
altura total, altura da base do arco, largura total e largura da coluna.

Discussão

1. ???

2. ???

Referências bibliográficas

???
Capítulo 3: Recursão

Na matemática, uma função recursiva é aquela que utiliza variáveis criadas durante o processo,
através da aplicação sucessiva de uma mesma rotina. Um bom exemplo de funções recursivas são as
que criam fractais, como a da curva de Koch, na Figura 32.

Figura 32: Plantas de F. L. Wright com simetria cíclica e diédrica.

Embora nos pareça uma figura é uma figura complexa, a curva de Koch é gerada a partir de uma
regra extremamente simples. A regra determina que toda reta encontrada que se assemelhe à figura
denominada “iniciador” deve ser substituída por quatros retas semelhantes, porém reduzidas e
organizadas de acôrdo com a figura denominada “gerador”. É possível, assim, identificar, na figura
gerada, quatro instâncias do “iniciador”, cada uma das quais pode ser então substituída por novos
geradores, e assim sucessivamente.

Quando o processo acima descrito é aplicado a um triângulo, como na Figura 33, o resultado obtido
assemelha-se a um cristal de neve, sendo também conhecido como ilha de Koch. É interessante notar
que, a cada vez que a regra é aplicada, o perímetro da ilha de Koch é aumentado em 1/3, enquanto
sua área sofre aumento gradativamente menor, e portanto desproporcional ao aumento do perímetro,
o que coloca em dúvida nossa concepção euclidiana de espaço e dimensão.

Figura 33: Ilha de Koch.

Na natureza, assim como na arquitetura e no design em geral, encontramos diversos exemplos de


formas geradas a partir de processos recursivos. Estas podem ser divididos em sub-categorias, de
acôrdo com as características do processo recursivo. Uma das formas mais simples de recursão
consiste na repetição de uma forma ao redor de um eixo central, em escala gradativamente maior,
como na seção de um tronco de árvore ou nos arcos concêntricos da porta de uma catedral gótica. A
Figura 34 mostra regras de geração dessas duas formas.

Figura 34: Formas concêntricas e as regras de composição que as produzem: uma seção de tronco de árvo re e a porta de
uma catedral gótica.

Uma variação do processo recursivo concêntrico é o concêntrico nuclear. Nele, as subdivisões


ocorrem ao redor de novos núcleos ao redor de um núcleo central. Observe, por exemplo, um dente
de leão. Na extremidade de cada haste ocorre uma subdivisão em novas hastes. O mesmo conceito
foi utilizado por Howard em sua teoria das cidades-jardim, de 19XX, onde núcleos habitacionais
suburbanos se organizavam ao redor de um núcleo urbano central, reproduzindo sua polarização em
menor escala.

Figura 35: Recursão nuclear: dente de leão e cidad e-jardim.

Outro exemplo de processo recursivo onde novos elementos com escala diferente são acrescentados
ao original ocorre nas composições em espiral. Nelas, à semelhança das formas com simetria cíclica,
cada novo elemento é inserido ao redor de um ponto com um novo ângulo de rotação, porém em
tamanho maior ou menor que o anterior. Este tipo de composição pode ser encontrado em plantas,
animais e na arquitetura contemporânea, como nos exemplos mostrados na Figura 36.
Figura 36: Espirais em um broto de samambaia, em um caramujo, e na estação de Lyon, do arquiteto Santiago
Calatrava.

Um processo recursivo pode também ocorrer de fora para dentro. A Figura 37 mostra diferentes
exemplos de subdivisão interna, desde uma folha de samambaia até um vitral gótico, uma rosácea ou
a abside de uma igreja medieval. Os jardins do Taj M ahal e o teto do British Institute of Art, de
Louis Khan, são casos semelhantes de subdivisões recursivas de um quadrado.
m

Figura 37: Subdivisão interna de uma folha de samambaia, de um vitral gótico, e de arcos roânicos. Subdivisão
recu rsiva do quadrado nos jardins do Taj Mahal e no teto do British Art institute, de Louis Khan.

Outro exemplo de processo recursivo é o entroncamento que ocorre naturalmente nos galhos das
árvores. Na estrutura da galeria XXX em Toronto, o arquiteto espanho Santiago Calatrava, também
utilizou a subdivisão recursiva para conferir leveza ao conjunto. Os “galhos” superiores são mais
curtos e esbeltos do que os inferiores, e o número de pontos de apoio no piso é bem menor que o de
apoios da cobertura.
Figura 38: Entroncamento recursivo em galhos de árvores e na estrutura da galleria XXX, de Santiago Calatrava.

Exercícios

O uso de técnicas simples em AutoCAD, com viewports (como nos exercícios de simetria) e blocos,
permite explorar algumas das possibilidades do desenho recursivo. No entanto, pode-se também
programar o AutoCAD para que ele efetue operações recursivamente, tomando como parâmetros
para operações sucessivas as variáveis geradas em operações anteriores. Os exercíos X a XX
utilizam essas técnicas mais simples. Já os exercícios X a XX utilizam ambientes especialmente
desenvolvido em VBA que possibilita o uso de operações recursivas em 2D e 3D, e que podem ser
obtidos a partir da web-site XXXXX (ou que se encontram disponíveis no CDROM que acompanha
este livro).

1. Criando uma composições recursiva em AutoCad

Não existe, no AutoCAD, nenhum comando específico para se desenhar formas geradas através de
processos recursivos. Para se criar uma composição em espiral, por exemplo, seria necessário seguir
as etapas abaixo:

1. Desenhar uma forma semelhante à que aparece na Figura 39.


2. Criar um bloco com a figura desenhada, chamando-o de “folha” (DRAW/BLOCK/M AKE)
3. Inserir o bloco criado no ponto (0,0), com fatôr de escala 1 em X, Y e Z, e ângulo de rotação
0o (INSERT/BLOCK).
4. Inserir sucessivamente o bloco “folha” no ponto (0,0), porém a cada vez com diferentes
fatôres de escala e ângulos de rotação, de acôrdo com a tabela 1.

Figura 39: Figura-base.

Observe que na tabela abaixo os fatôres de escala aumentam em progressão geométrica (por
multiplicação), enquanto os ângulos de inserção aumentam em escala aritmética (por soma). A
figura resultante será uma composição em espiral semelhante à Figura 40.
Inserção Ponto de inserção Fatôr de escala Ângulo de rotação
1a (0,0) 1 0o
2a (0,0) (1 x 1.2) 1.2 (0o + 30o) 30o
3a (0,0) (1.2 x 1.2) 1.44 (30o + 30o) 60o
4a (0,0) (1.44 x 1.2) 1.728 (60o + 30o) 90o
5a (0,0) (.7281 x 1.2) 2.0736 (90o + 30o) 120o
6a (0,0) (2.0728 x 1.2) 2.48832 (120o + 30o) 150o
7a (0,0) (2.48832 x 1.2) 2.985984 (150o + 30o) 180o
8a (0,0) (2.985984 x 1.2) 3.5831808 (180o + 30o) 210o
Tabela 1: Ponto de inserção, fatôres de escala e ângulos de rotação do bloco “folha”.

Figura 40: Composição em espiral.

2. Composições recursivas dinâmicas com viewports

É possível montar uma combinação de viewports no paper space que simule alguns tipos de
composições recursivas, permitindo que você desenhe a figura-base ao mesmo tempo em que
observa sua repetição em posições e escalas diferentes. Conforme a figura-base é modificada, as
demais versões são atualizadas dinamicamente. A fim de obter variações de escala nas diversas
viewports, é preciso aplicar fatôres de Zoom progressivamente maiores ou menores, de acôrdo com
uma proporção correta. Siga as indicações abaixo para montar ambientes de desenho recursivo
concêntrico, linear e em espiral. Se preferir, copie os arquivos XX, XXX e XXX do CDROM que
acompanha este livro. Neles os ambientes de viewports já se encontram prontos para você começar a
criar suas composições recursivas.

2.a. Ambiente dinâmico para desenho de composições recursivas concêntricas e em espiral


com viewports

1. Inicie um novo desenho em AutoCad e grave-o


File/Save as R1-seunome.DWG
2. Acione o Paper Space
Clique na orelha "Layout1" na parte inferior da area de desenho
3. Crie uma viewport quadrada para o M odel Space
View/Viewports/1 Viewport
Specify corner of viewport: 0,0
Specify opposite corner: 10,10
4. Desenhe algo no M odel Space e ajuste o nível de Zoom para nXP
View/Zoom/Extents (para aproximar ou afastar a viewport criada)
Clique no botão "Paper" abaixo da área do Prompt
Draw/Polyline etc.
Desenhe dentro da viewport
View/Zoom/Extents (para visualizar todo o desenho)
View/Zoom/Scale nXP (para visualizar o desenho na distância desejada)
Obs: o valor de n dependerá das unidades utlizadas em seu desenho. Tente, por exemplo, um valor
entre 0.02 e 2, seguido de XP.
5. Crie uma matriz 2x2 com cópias da primeira viewport
Clique no botão "M odel" abaixo da área do Prompt
M odify/Array· Select Objects: (clique na borda da viewport criada)
Enter type of Array: R
Enter number of rows: 2
Enter number of columns: 2
Enter the distance between rows: 10
Enter the distance between columns: 10
View/Zoom/Extents
6. M antenha a vista da viewport inferior esquerda e modifique as demais vistas para obter escalas
sucessivamente menores. Por exemplo, para reduzir o fatôr de escala pela metade a cada nova figura,
utilize os fatôres n, n/2, n/4 e n/8.
Para obter uma ampliação gradativa, utilize, por exemplo, 1, 1.5, 2.25 e 3.375. Para uma ampliação
exponencial, utilize
Clique no botão "Paper" abaixo da área do Prompt
Clique dentro da viewport inferior direita.
Utilize o comando ZOOM /SCALE n/2 XP para tornar a figura menor.
Repita a operação nas demais janelas, utilizando os valores n/4 XP e n/8 XP.
Se desejar, acrescente mais viewports ao seu ambiente, sempre reduzindo seu fatôr de ZOOM de
acôrdo com a proporção adequada.

Finalmente, sobreponha todas as viewports, torne o model space corrente (ou clique-duplo dentro
das viewports) e comece a desenhar uma figura. Observe como surgem simultaneamente cópias
concêntricas da figura com diferentes escalas, como na Figura 41.

Figura 41: Arranjo de viewports para geração de omposições recursivas con cêntricas.

Crie novamente 4 viewports quadradas, só que desta vez, além de alterar os fatôres de ZOOM de
cada uma delas, aplique rotações sucessivas a cada uma das vistas. Por exemplo:

Nível de Zoom 1XP 2 XP 4 XP 8 XP


Rotação 0o 90 o 180 o 270 o
Para rotacionar as vistas em cada viewport, utilize o comando DVIEW, visto no capítulo anterior.
Para alterar o nível de ZOOM de cada uma delas, utilize o comando ZOOM /SCALE. Finalmente,
sobreponha todas as viewports, torne o model space corrente (ou clique-duplo dentro das viewports)
e comece a desenhar uma figura. Observe como surgem simultaneamente cópias dela com diferentes
escalas e rotações, formando uma espiral, como na Figura 42.

Figura 42: Arranjo de viewports para geração de omposições recursivas em espiral.

Dicas:

6. pp

3. Recursão automatizada com VBA

Embora o exercício anterior permita uma visualização dos resultados da composição recursiva em
tempo real, seus resultados não são efetivamente desenhados no paper space; para transformá-los em
desenhos que você pode continuar transformando e detalhando, até que eles se tornem algo ainda
mais complexo, você teria de aplicar a técnica de inserção de blocos explicada no exercício II.1,
porém com pontos de inserção, fatôres de escala e ângulos de rotação específicos para cada caso. A
fim de tornar esse trabalho menos exaustivo, uma boa opção é utilizar a programação em VBA para
automatizar essa sequência de comandos, como no exercício abaixo II.3.a. Posteriormente, você
pode acresecentar a ele mais variáveis, para que seu programa execute diferentes tipos de desenhos
com recursão, como no exercício II.3.b.

Atenção:

Antes de utilizar o editor de VBA do AutoCAD, configure o Windows de maneira que o ponto, e
não a vírgula, seja utilizado como separador das casa decimais. Para isso abra o menú de
“Configurações Regionais” do “Painel de Controle” (menú Iniciar/Configurações/Painel de
Controle). Em seguida, clique na guia “Números” e substitua a vírgula (,) pelo ponto (.) no campo
“Símbolo decimal”. A maioria dos sistemas em português utiliza a vírgula nesse campo, enquanto os
sistemas em inglês utilizam o ponto. Como o AutoCAD utiliza a vírgula como separador de
coordenadas (x,y,z), o ponto é necessário para que números com casas decimais gerados pelo
sistema não sejam confundidos com pares ordenados.

[repetir esta nota em todos os capítulos]

3.a. Recursão fixa

1. Inicie um novo programa em AutoCAD e crie nele um bloco semelhanteao do exercício II.1,
chamando-o de “folha”.
1. Abra o editor de VBA do AutoCAD (TOOLS/MACRO/VISUAL BASIC EDITOR).
2. No editor de VBA, insira um novo módulo (INSERT/M ODULE) e crie uma nova macro
(INSERT/PROCEDURE). Preencha a caixa de diálogo “Add procedure” com as informações
abaixo:

Figura 43: Caix a de diálogo “Add Procedure”.


Como resultado, o texto abaixo aparecerá no seu novo módulo:

Public Sub Recursao()

End Sub

Observe que o programa já deixou uma linha de espaço entre o início e o fim do procedimento, para
que você o preencha com os comandos que desejar.
3. Apesar do VBA ser uma linguagem orientada a objetos, ela também permite que você crie scripts
de comandos de AutoCAD (com os quais você já está familiarizado), através do comando
SendCommand do objeto ThisDrawing. Para inserí-lo, você pode digitá-lo diretamente entre as
linhas de sua macro, como no código abaixo, seguindo sempre a seqüência objeto.comando:

Public Sub Recursao()


ThisDrawing.SendCommand
End Sub

Dica:

Para saber quais são os objetos disponíveis no VBAIDE e seus respectivos “comandos” (ou
métodos), você pode utilizar o Object Browser. Para isso abra-o pelo menu
WINDOW/OBJECTBROWSER. Para encontrar o comando “SendCommand”, por exemplo,
selecione ACADProject, no campo superior esquerdo em que se encontra a expressão <All
Libraries>. Selecione, a seguir, o ítem ThisDrawing, como na figura abaixo. Procure na lista da
direita o comando “SendCommand”, e na parte inferior da janela veja sua descrição detalhada.
Figura 44: Object Browser.

Você notará que assim que digitar a palavra ThisDrawing seguida por um ponto, uma tela com todos
os comandos referentes a ThisDrawing (que é um “objeto”) surgirá no meio do texto. Basta digitar a
letra “s” e a lista mostrará o comando “SendCommand”.

Clique duplo nele para que ele seja digitado na sua página de código. Em seguida, digite um espaço
logo após o comando inserido. O editor de VBA lhe informará o que você deve digitar a seguir,
como na figura abaixo. Após o comando SendCommand, é ncessário digitar o nome de um comando
do AutoCAD em forma de string, ou seja, entre aspas, e dentro de parênteses.
Digite o comando “-insert”, como no código abaixo.Use o menos antes do nome do comando para
evitar que o AutoCAD abra a diaolog box. Assim, você poderá passar a ele outras informações
realtivas à inserção do bloco através da linha de prompt.

4. Grave seu programa (FILE/SAVE) com o nome Recursão.dvb. Em seguida, volte ao AutoCAD e
teste sua macro, através do comando TOOLS/M ACRO/M ACROS. Na caixa de diálogo M acros,
selecione a macro cujo nome termina com as palavras ...Recursao.dvb!M odule1.Recursão e
pressione o botão “Run”. Você verá que o comando “-insert” foi digitado na área de prompt do
AutoCAD. Por enquanto pode não parecer muito, mas com essa técnica pode-se estabelecer
sequências completas de comandos que podem automatizar procedimentos repetitivos e fastidiosos
de desenho.
5. A seguir, você irá adicionar ao seu código todos os caracteres que digitaria na linha de prompt do
AutoCAD se estivesse utilizando o comando “-insert”, sempre entre aspas, inclusive os “enters”, só
que estes serão representados pelos caracteres vbcr (sem aspas), abeviação de Visual Basic Carriage
Return. As palavras e caracteres devem ser sempre separadas dos “enters” pelo símbolo &, conforme
mostra o código abaixo:

Public Sub Recursao()


ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "1" & vbCr & "1" & vbCr & "0" _
& vbCr)
End Sub

Observe que o comando seve ser todo escrito em uma só linha. Caso você deseje dividí-lo em duas
ou mais linhas, para melhor visualização, como no exemplo acima, digite _ ao final de cada linha
que se quebra.

6. Grave seu programa (FILE/SAVE) e volte ao AutoCAD para testá-lo novamente


(TOOLS/MACRO/M ACROS). Você verá que desta vez ele fará a inserção do bloco no ponto 0,0,
com fatôr de escala 1 e com ângulo de rotação 0o.
7. De maneira semelhante, crie comandos que inserem outras cópias do bloco “folha”, porém com
diferentes fatôres de escala e ângulos de rotação, como no exemplo abaixo:

Public Sub Recursao()


ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "1" & vbCr & "1" & vbCr & "0" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "1.2" & vbCr & "1.2" & vbCr & "30" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "1.44" & vbCr & "1.44" & vbCr & "60" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "1.728" & vbCr & "1.728" & vbCr & "90" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "2.0736" & vbCr & "2.0736" & vbCr & "120" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "2.48832" & vbCr & "2.48832" & vbCr & "150" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "2.985984" & vbCr & "2.985984" & vbCr & "180" _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & "3.5831808" & vbCr & "3.5831808" & vbCr & _
"210" & vbCr)
End Sub

Teste seu programa. A gora, ele deve criar uma espiral semelhante à que você desenhou no exercício
anterior.

Com o programa acima pode-se criar espirais formadas por diferentes figuras, através da redefinição
do bloco “folha”, como na figura abaixo.

Figura 45: Novas espirais criadas a partir da redefinição do bloco “folha”.

3.b. Recursão com parâmetros

Agora que você já criou seu primeiro programa, você pode desejar criar outras espirais, formadas
por blocos inseridos em diferentes ângulos de rotação e com diferentes fatôres de escala. Você pode,
inclusive, querer variar os fatôres de escala em x, y e z de acôrdo com diferentes regras de
progressão. Para isso, é necessário criar um programa um pouco mais complexo, que receba
parâmetros passados pelo usuário, executando essa mesma sequência de comandos de acôrdo com
eles.

1. No topo da sua página de código (M odule1) informe ao programa as variáveis que você irá utilizar
e qual o tipo de dado que elas informarão. Neste caso, chamaremos nossas variáveis de AA
(acréscimo de ângulo) e AE (acréscimo de escala). Ambas serão números reais (Double).

2. Agora, no início de sua função “Recursão”, estabeleça os valores das variáveis AA e AE:
Public Sub Recursao()
AA = 30
AE = 1.2
...

3. Em seguida, substitua os valores em cada etapa de inserção do bloco “folha” pelas variáveis AA e
AE, multiplicando-as e elevando-as quando necessário:

ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _


& vbCr & "0,0" & vbCr & AE ^ 0 & vbCr & AE ^ 0 & vbCr & 0 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 1 & vbCr & AE ^ 1 & vbCr & 1 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 2 & vbCr & AE ^ 2 & vbCr & 2 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 3 & vbCr & AE ^ 3 & vbCr & 3 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 4 & vbCr & AE ^ 4 & vbCr & 4 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 5 & vbCr & AE ^ 5 & vbCr & 5 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 6 & vbCr & AE ^ 6 & vbCr & 6 * AA _
& vbCr)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ 7 & vbCr & AE ^ 7 & vbCr & 7 * AA _
& vbCr)

4. M ova a espiral criada anteriormente para outro local da tela e teste novamente seu programa
(TOOLS/MACROS/MACRO). Você verá que ele faz exatamente o que fazia anteriormente. No
entanto, se quisermos mudar, por exemplo, o acréscimo do ângulo de 30 para 40 graus e o acréscimo
da escala de 1.2 para 1.3, essa ação será muito mais simples do que antes. Se desejar, faça essa
modificação e observe o resultado.

5. Agora observe que o único valor que ainda não parametrizamos é o número de recursões. Para
parametrizarmos esse valor será necessário criar uma estrutura de código que permita que o mesmo
seja repetido o número de vezes indicado, tomando parâmetros correspondentes a cada vez. Comece
declarando a variável NR (número de recursões) como um número inteiro (Integer).

Dim NR As Integer

6. Em seguida, confira um valor a sua nova variável e mude a estrutura de seu código para que ele
seja repetido:

Public Sub Recursao()


AA = 30
AE = 1.2
NR = 0
Do While NR <= 7
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ NR & vbCr & AE ^ NR & vbCr & NR * _
AA & vbCr)
NR = NR + 1
Loop
End Sub

Observe que o valor inicial conferido à variável NR foi zero. No entanto, esse valor é acrescido de
uma unidade cada vez que o comando de inserção do bloco é executado. A estrutura de repetição
“Do While/Loop” foi utilizada para fazer com que esse comando seja repetido até que a variável NR
alcance seu valor máximo, ou seja, 7. Como ela começa com o valor 0, o código é executado 8
vezes, e o resultado obtido é idêntico à espiral anterior.

3.c. Recursão com parâmetros e interface gráfica

A nova macro é muito mais curta e simples do que a antiga. No entanto, para que novos valores
sejam utilizados, é necessário que ela seja modificada no código, o que exige noções de
programação por parte do usuário. Para evitar esse problema, vamos criar uma interface gráfica que
permita ao usuário informar valores para o acréscimo no ângulo e fatôr de escala cada vez que
utilizar o programa.

1. Comece inserindo em seu projeto um UserForm (INSERT/USERFORM ). O UserForm nada mais


é do que uma caixa de diálogo que permitirá a entrada de dados para serem utilizados por seu
programa. Junto com ela, aparecerá a ToolBox, ou caixa de ferramentas, de onde você escolherá os
botões e outros mecanismos interativos como mostra a Figura 46. Além da ToolBox, você verá
também a tabela de propriedades do novo UserForm, em baixo, à esquerda. Caso elas não apareçam,
utilize os comandos de menu VIEW/TOOLBOX e VIEW/PROPERTIES WINDOW
respectivamente para ativá-las.

Figura 46: UserForm e Tool Box .


2. O próximo passo consiste em “arrastar” até seu UserForm os dispositivos de contrôle necessários.
Para a entrada de dados referentes aos acréscimos de ângulo e escala utilizaremos o contrôle
chamado TextBox, indicado pelos caracteres “ab|” na ToolBox. Além disso, utilizaremos elementos
do tipo Label, indicados pela letra “A” na ToolBox, para identificar os campos de entrada de dados,
e um botão para acionar a macro, como mostra a figura abaixo.

Figura 47: UserForm pronto, com campos para entrada de fatôr de escala, ângulo de rotação e número de
repetiçõ es.

3. O nome dos elementos que colocamos no UserForm e o texto ou legenda que aparece neles pode
ser modificados em seus respectivos painéis de propriedades. M odifique os nomes desses elementos
de acôrdo com a tabela abaixo.

Elemento Nome (Name) Legenda (Caption)


Caixa de diálogo (UserForm) UserForm1 Espiral
Legenda (Label) Label1 Fatôr de escala
Campo de texto (TextBox) TxtBxEscala -
Legenda (Label) Label2 Ângulo de rotação
Campo de texto (TextBox) TxtBxRotacao -
Legenda (Label) Label3 No. de repetições
Campo de texto (TextBox) TxtBxRepeticoes -
Botão (CommandButton) CmdBtExecutar Executar macro

Observe que a janela de diálogo (UserForm) também recebeu uma nova legenda. Siga exatamente os
nomes sugeridos acima para que seu programa funcione perfeitamente neste exercício.

4. A seguir, clique duplo no botão “Executar”. A janela de código do UserForm se abrirá e uma
função relacionada ao acionamento do botão será criada automaticamente. Seu nome será “Private
Sub CmdBtExecutar_Click()”, ou seja, ela será acionada toda vez que ocorrer um click no botão
“Executar”. A ação de clicar em um botão chama-se evento. Na área logo abaixo do início da
função, copie o código que estava no M odule1. Copie também as declarações de variáveis bem no
topo da página, mas não copie as atribuições de valores às variáveis, pois estas serão informadas
pelo usuário através dos campos de texto. Seu código ficará assim:
Dim AA As Double
Dim AE As Double
Dim NR As Integer
Dim i as Integer

Private Sub CmdBtExecutar_Click()


i = 0
Do While i < (NR – 1)
ThisDrawing.SendCommand ("-insert" & vbCr & "folha" _
& vbCr & "0,0" & vbCr & AE ^ i & vbCr & i ^ NR & vbCr & i * AA _
& vbCr)
i = i + 1
Loop
End Sub

Observe que a variável i (índice) é usada como um contador, com valor inicial igual a zero, cujo
valor é acrescido de uma unidade a cada vez que o código é executado, até atingir o valor do número
de repetições (NR) menos um.

5. O passo seguinte será fazer com que valores digitados nos campos de texto sejam capturados e
atribuídos às respectivas variáveis. Para isso volte ao UserForm (clicando duplo na palavra
UserForm que aparece na janela de projetos ACADProject, na área superior esquerda da tela).
Clique duplo em cada um dos campos de texto. Cada vez que você fizer isso, será criada, na janela
de código, uma função que será ativada toda vez que um novo valor fôr digitado pelo usuário.
Digite, logo após o início de cada função, as seguintes linhas de código:

Private Sub TxtBxEscala_Change()


AE = UserForm1.TxtBxEscala.Value
End Sub

Private Sub TxtBxAngulo_Change()


AA = UserForm1.TxtBxAngulo.Value
End Sub

Private Sub TxtBxRepeticoes_Change()


NR = UserForm1.TxtBxRepeticoes.Value
End Sub

Teste seu programa, com o comando de menú RUN/RUN SUB. Após digitar os valores desejados e
clicar no botão “executar”, você terá de fechar a janela clicando no botão na parte superior direita da
mesma. Acione o AutoCAD e observe o resultado. Se você tiver utilizado os valores 1.2, 30 e 8, ele
deverá ser igual ao dos exercícios anteriores.

Dica:

Alterne entre a vista da janela de código e da caixa de diálogo (UserForm) utilizando os comandos
do menu VIEW/CODE e VIEW/OBJECT.

6. O penúltimo passo será adicionar um comando à função Private Sub CmdBtExecutar_Click(),


para que ela feche a caixa de diálogo após executar o código. Para isso, adicione o seguinte comando
logo após o comando Loop:
Unload Me

Macros:

No AutoCAD a palavra M ACRO pode designer duas coisas diferentes. De maneira genérica,
MACRO significa uma sequência de comandos de programação. A M ACRO criada no exercício
acima é um atalho que executa as linhas de código no módulo M odule1 do programa Expiral.dvb.
Ela permite que o usuário que não entende de programação utilize seu programa, sem a necessidade
de carregar o editor de VBA.

Outra forma de se criar M ACROS no AutoCAD é através da programação de botões de Toolbars.


Nesse caso, as seqüências são em geral curtas, e ao invés do VBA utiliza-se uma sintaxe específica
(M enu M acro Syntax), como no exemplo abaixo:

Figura 48: Macro em botões de toolbars.

7. Finalmente, vamos criar uma macro que carregará a caixa de diálogo a partir do menú de macros
do AutoCAD, sem a necessidade de se carregar o ambiente de desenvolvimento VBAIDE. Para isso,
adicione as seguintes linha de código ao M odule1:

Public Sub Interface()


UserForm1.Show
End Sub

Volte ao AutoCAD, abra a janela de macros (TOOLS/M ACRO/M ACROS) e selecione a macro que
termina com as palavras Espiral.dvb!M odule1.Interface. Pressione o botão “Run” e crie uma nova
espiral.

Gravando o programa juntamente com o arquivo de desenho


Para que um usuário utilize o programa desenvolvido acima, ele deverá carregá-lo, no AutoCAD
após ter iniciado um novo arquivo de desenho ou aberto um arquivo DWG existente, através do
comando de menú TOOLS/M ACRO/LOAD PROJECT, que abre a janela Open VBA Project.

Figura 49: Janela para seleção do programa VBA a ser carreg ado.

Opcionalmente, pode-se gravar um programa em VBA juntamente com um arquivo DWG. Nesse
caso, ao se abrir o desenho no AutoCAD, as macros contidas no programa nele embutido serão
automaticamente disponibilizadas, sem a necessidade de se carregar outros programas. Esta é uma
boa opção para se guardar em um único arquivo programas em VBA e os desenhos com eles obtidos.

Para embutir um programa VBA num arquivo DWG, siga os passos abaixo:

1. Abra a tela VBA M anager: TOOL/M ACRO/VBA MANAGER


2. Selecione o projeto chamado ACADProject – Global1.
3. Clique no botão Embed.
4. Surgirá um novo projeto chamado ACADProject – name do arquivo.dwg
5. Feche a janela. A partir desse momento, quando você salvar seu desenho estará gravando junto
seu programa em VBA.
6. Ao se abrir um arquivo DWG com programas VBA embutidos, uma mensagem aparacerá
perguntando se você deseja ativar as M acros ou não. Responda Sim para que as mesmas sejam
automaticamente carregadas.

Atenção!!

Arquivos com macros podem conter vírus. Assim como uma macro pode apresentar uma interface
para a criação de espirais, ela pode também ser programada para enviar comandos que apagam seus
arquivos ou formatam seu disco rígido. Tanto no AutoCAD como em qualquer outro software (como
no Word, Excel ou Access) só permita a ativação de M acros em arquivos de origem conhecida.

4. Assistente de Recursão 2D e 3D

Na página WWW.WEB.M IT.EDU/ALUM /CELANI/WWW você pode fazer gratuitamente o


download dos programas assistente-de-recursão2d.dwg e assistente-de-recursão3d.dwg. De maneira
semelhante ao programa desenvolvido no exercício anterior, eles permitem que se aplique uma série
de operações de transformação a uma figura recursivamente, incluindo translação, rotação, reflexão
e escala (no primeiro não necessariamente uniforme em X e Y), porém com maior flexibilidade. Os
“programas” nada mais são do que arquivos DWG onde determinadas configurações de layers e
viewports foram previamente estabelecidas, e nos quais foram embutidas algumas rotinas em VBA.
Por esse motivo, para se “rodar” o programa não é necessário instalá-lo ou carregá-lo, bastando
apenas abrir o arquivo dw g no AutoCAD 2000 ou 2002, aceitando a opção “enable macros”. Esses
programas são experimentais e não estão livres de pequenos defeitos, mas podem ajudá-lo a criar
formas muito interessantes, como as que aparecem nas figuras ? a ?, desenvolvidas por alunos dos
cursos de engenharia civil e arquitetura da UNICAM P e FAU-USP.

Discussão

1. Qual a relação que existe entre simetria e recursão? Como você geraria as diferentes formas
de simetria vistas no Capítulo I através de processos recursivos?

2. Qual a relação que existe entre formas paramétricas e recursão? Como você geraria as
espirais desenhadas neste capítulo através de processos de parametrização da forma?

3. Faça uma pequena pesquisa procurando localizar obras de arquitetura em que a recursão é
utilizada como princípio compositivo, seja através de fractais ou de processos repetitivos de
subdivisão, entroncamento, repetição concêntrica ou nuclear.

4. Procure localizar também projetos em que o autor utiliza regras compositivas, aplicando-as
aqui e ali, mas não necessariamente em uma seqüência recursiva.

Referências bibliográficas

Batty, M . Fractal Cities, P. Longley, 1994. The geometry of the Koch curve (p.61-63).
Capítulo 4: Composições regradas

As composições recursivas vistas no capítulo anterior podem ser também chamadas de composições
regradas, pois são obtidas através de regras de transformação que são sucessivamente aplicadas às
figuras obtidas em cada etapa.

Composições regradas, no entanto, não são necessariamente recursivas. Uma regra compositiva pode
ou não ser utilizada sempre que a forma à qual ela se aplica seja encontrada. Um exemplo simples é
a utilização de janelas em canto por arquitetos modernistas. Num projeto em que o arquiteto decide
utilizar esse princípio compositivo, toda a vez que um canto externo livre é encontrado, ele tem a
opção de aplicar a regra, substituindo a parede cheia por uma janela em canto, como mostra a figura
?, ou não. É perfeitamente possível criar um programa que substitua todos os cantos encontrados em
uma planta por janelas em “L”. No entanto, esse programa não seria 100% eficiente, pois dependeria
da leitura do que é realmente um “canto externo” (figura ?) e da avaliação de outras variáveis
arquitetônicas, como a existência de outras janelas na proximidade, a orientação da janela em canto,
a vista que ela terá, a área máxima de aberturas desejada em cada cômodo, e assim por diante. Além
disso, o programa poderia “confundir” outras formas em L, com paredes em canto, e realizar
substituições equivocadas. Isso sem contar que seria praticamente impossível para o programa
detectar corretamente formas emergentes, como na Figura 50(direita), o que você certamente faria
num piscar de olhos. Para que todos esses fatôres sejam levados em conta, seria preciso criar um
programa muito complexo e específico, o que fugiria do escopo deste livro, mas ainda assim você
pode utilizar, “manualmente”, esse processo compositivo em seus projetos.

Figura 50: Planta em que janelas de canto foram inseridas corretamente (centro) e de man eira equivocada (direita).

Um outro exemplo do uso de substituições durante o projeto consiste em criar variações de um


mesmo design através da substituição de suas formas básicas por outras. Frank Lloyd Wright
explorou esse processo em algumas das residências que projetou. Observe, por exemplo, as plantas
das residências na Figura 51. Em todas a organização espacial é a mesma, porém em cada caso
Wright utilizou uma figura geométrica diferente como motivo de sua composição.
Figura 51: Plantas esquemáticas das residências Jester (1938), Life (1938) e Sundt (1941).

Exercícios

Os exercícios abaixo mostram como se criam programas muito simples em VBA que substituem
círculos por quadrados e quadrados por triângulos.

1. Substituindo círculos por quadrados

Para substituir todos os círculos em um desenho por quadrados, é preciso, primeiramente, vasculhar
a coleção de entidades existentes num arquivo DWG, mas especificamente em seu M odelSpace, e
verificar se cada um deles possui a etiqueta “AcDbCircle”, que identifica os objetos do tipo
“círculo”. Para isso, usaremos um comando em VBA que permite repetir uma operação para cada
elemento de um conjunto: o FOR EACH/NEXT. A cada objeto do tipo “círculo” encontrado, o
programa extrairá dele os dados necessários para criar, em seu lugar, um quadrado. Em seguida, o
círculo será apagado.

1. Carregue o AutoCAD e inicie um novo desenho

2. Carregue o editor de VBA: TOOLS/M ACRO/VISUAL BASIC EDITOR.

3. Grave seu projeto com o nome RANDOM .DVB, utilizando para isso o comando
FILE/SA VE.

4. Insira um UserForm em seu projeto, e digite no campo Caption da janela de propriedades o


nome Substituições. Se a janela de propriedades não estiver aparecendo, abra-a com o
comando de menú VIEW/PROPERTIES WINDOW. Para que o texto caiba dentro do
botão, pode ser necessário torná-lo mais largo, esticando-o por um de seus cantos.

5. Arraste um botão (CommandButton) da Toolbox para seu UserForm. Se a Toolbox não


estiver aparecendo, abra-a com o o comando de menú VIEW/TOOLBOX.

6. Para acrescentar o código necessário para tornar o botão funcionante, clique duplo sobre
ele.

7. Na página de código que se abrirá, acrescente os seguintes comandos (em negrito) entre as
linhas já criadas automaticamente:

Dica:
Habitue-se a escrever comentários explicativos em cada seção de seu código. Para isso, basta
preceder o comentário pelo símbolo ‘, como mostram os exemplos abaixo. Desse modo, a linha será
ignorada pelo programa, mas o ajudará a antender as funções que vêm a seguir.

‘ Este é um comentário de linha inteira


Dim i as integer

Dim f as integer ‘ Este é um comentário ao lado do código

Private Sub CommandButton1_Click()

‘Declaração de variáveis:
Dim entidade As Variant
Dim circulo As AcadCircle
Dim nome As String
Dim X As Double
Dim Y As Double
Dim L As Double

‘Esconder UserForm para atuar no editor gráfico do AutoCAD:


Me.Hide

For Each entidade In ThisDrawing.ModelSpace


nome = entidade.ObjectName
If nome = "AcDbCircle" Then
Set circulo = entidade
L = circulo.Diameter
X = circulo.Center(0)
Y = circulo.Center(1)
ThisDrawing.SendCommand ("rectangle" & vbCr & (X - L / 2) & "," _
& (Y - L / 2) & vbCr & (X + L / 2) & "," & (Y + L / 2) & vbCr)
circulo.Delete
End If
Next

ThisDrawing.SendCommand ("regen" & vbCr)

‘Apresentar novamente UserForm:


Me.Show

End Sub

Atenção:

Evite usar caracteres especiais, como o “ç” e acentos gráficos nos nomes das variáveis. Por exemplo,
ao invés de “círculo”, escreva simplesmente “circulo”.

2. Substituindo quadrados e retângulos por triângulos


Este exercício é um pouco mais complexo do que o anterior, pois no AutoCAD quadrados e
retângulos são apenas polylines fechadas com quatro lados ortogonais. Por esse motivo, além de
analisar o nome, o número de vértices e o fechamento de cada objeto desenhado no M odelSpace,
teremos também de verificar a relação entre as coordenadas de seus vértices para termos certeza de
que a figura é realmente um retângulo ou quadrado. Para isso, será necessário utilizar dois IF’s em
sequência, como mostram as instruções abaixo:

1. Insira um novo botão em seu UserForm, mudando o valor do campo Caption para
“Quadrados e retângulos por triângulos”.
2. Clique duplo no novo botão, e acrescente os comandos em negrito entre as linhas de código
geradas automaticamente:

Private Sub CommandButton2_Click()

‘Declaração de variáveis.
Dim entidade As Variant
Dim coordenadas As Variant
Dim nome As String
Dim X1 As Double
Dim Y1 As Double
Dim X2 As Double
Dim Y2 As Double
Dim X3 As Double
Dim Y3 As Double
Dim X4 As Double
Dim Y4 As Double
Dim Raio As Double
Dim Xm As Double
Dim Ym As Double

‘Esconder dialogue box para visualizar tela do AutoCAD.


Me.Hide

‘Verificar cada objeto do ModelSpace, escolhendo apenas os de tipo


‘polyline fechada, com 8 (de 0 a 7) coordenadas, ou seja, 4 vértices com
‘coordenadas X e Y cada um.
For Each entidade In ThisDrawing.ModelSpace
nome = entidade.ObjectName
If nome = "AcDbPolyline" _
And entidade.Closed = True _
And UBound(entidade.Coordinates) = 7 _
Then

‘Extrair valores da lista de coordenadas da polyline analizada,


‘atribuindo-os às variáveis Xn e Yn (n=1 a 4).
coordenadas = entidade.Coordinates
X1 = coordenadas(0)
Y1 = coordenadas(1)
X2 = coordenadas(2)
Y2 = coordenadas(3)
X3 = coordenadas(4)
Y3 = coordenadas(5)
X4 = coordenadas(6)
Y4 = coordenadas(7)

‘Verificar se polyline é realmente um retângulo ortogonal, através da


‘comparação das coordenadas de seus vértices.Prosseguir apenas em caso
‘afirmativo.
If (X1 = X4 And X2 = X3 And Y1 = Y2 And Y3 = Y4) _
Or (X1 = X2 And X3 = X4 And Y1 = Y4 And Y2 = Y3) _
Or (X1 = X4 And X2 = X3 And Y1 = Y2 And Y3 = Y4) _
Then

‘Calcular a média aritmética das coordenadas X e Y do retângulo, que


servirão de centro do triângulo.
Xm = (X1 + X2 + X3 + X4) / 4
Ym = (Y1 + Y2 + Y3 + Y4) / 4

‘Calcular raio do triângulo, através do valor absoluto da média entre


‘comprimento e largura do retângulo divididos pelo coeficiente 1.14, para
‘que suas áreas sejam aproximadamente iguais.Tratar todos os casos
‘possíveis de localização dos vértices 1, 2, 3 e 4.
If X1 <> X2 And Y1 <> Y2 Then
Raio = ((Abs(X1 - X2) + Abs(Y1 - Y2)) / 2) / 1.14
End If

If X1 <> X3 And Y1 <> Y3 Then


Raio = ((Abs(X1 - X3) + Abs(Y1 - Y3)) / 2) / 1.14
End If

If X1 <> X2 And Y1 <> Y3 Then


Raio = ((Abs(X1 - X2) + Abs(Y1 - Y3)) / 2) / 1.14
End If

If X1 <> X3 And Y1 <> Y2 Then


Raio = ((Abs(X1 - X3) + Abs(Y1 - Y2)) / 2) / 1.14
End If

Atenção:

Observe que o comando Abs(operação) foi utilizado nas oprações de cálculo do raio do triângulo
para retirar os sinais negativos que poderiam resultar da subtração de oordenadas X e Y, uma vez
que não se sabe quais delas possuem o maior valor.

‘Desenhar um triângulo com o comando POLYGON, inscrito no círculo de raio


‘obtido acima.
ThisDrawing.SendCommand ("polygon" & vbCr & 3 & vbCr & Xm & "," & Ym &
vbCr & "i" & vbCr & Raio & vbCr)

‘Apagar o retângulo detectado.


entidade.Delete

‘Fechar estruturas de repetição.


End If
End If
Next

ThisDrawing.SendCommand ("regen" & vbCr)


Me.Show

End Sub

Observe como as estruturas de repetição condicionais (IF/THEN) podem ser aninhadas


recursivamente, de maneira que diferentes condições sejam analisadas passo a passo. É importante
notar também como todos os casos possíveis devem ser tratados, para que seu programa não deixe
escapar nehuma exceção à regra. As figuras 1 e 2 mostram todos os casos de igualdade e diferença
entre os valores de X e Y de cada vértice do retângulo, com suas localizações em sentido horário e
anti-horário.

Figura 52: Possíveis relações de igualdade e di ferença entre X e Y em retângulos


com vértices em sentido horário.

Figura 53: Possíveis relações de igualdade e di ferença entre X e Y em retângulos


com vértices em sentido anti-horário.

Discussão

4. Pesquise famílias de objetos ou projetos de arquitetura em que uma mesma composição é


repetida com diferentes figuras geométricas, como nas casas de FLW.
5. Tente desenvolver um pequeno projeto gráfico ou arquitetônico esquemático em AutoCAD
trabalhando apenas com círculos. Em seguida, utilize o programa desenvolvido acima para
transformar essas figuras em quadrados e círculos. Você acha que esse processo poderia
ajudá-lo a encontrar novas formas para seu projeto?
6. Repita a operação acima, mas desta vez, ao transformar seus círculos em quadrados observe
se há, na sobreposição deles, novos quadrados emergentes, como mostra a Figura 54.Utilize
o comando PLINE para criar polylines fechadas sobre essas áreas, a aplique em seguida o
comando que transforma quadrados em triângulos. O programa transformará em triângulos
todos os novos retângulos, além dos quadrados provenientes de círculos. Como você
programaria o AutoCAD para que ele automaticamente encontrasse esses novos retângulos
obtidos com a sobreposição dos quadrados?

Atenção:

Na verdade, a programação utilizada em problemas de detecção de formas emergentes é muito


complexa, sendo um problema freqüentemente abordado pelo campo da inteligência artificial. Uma
operação muito simples para o olho humano pode ser infinitamente complicada para um
computador. Neste caso, a não ser que você deseje se tornar um grande programador, meu conselho
é que utilize sua aptidão natural para detectar formas, combinando-a com a aptidão natural do
computador para efetuar tarefas repetitivas! Os exercícios do próximo capítulo trazem uma
interessante combinação dessas duas aptidões.

Figura 54: Sequência de trans formação de círculos em quadrados e triângulos,


com deteção intermedi ária de retângulos emergentes, ressaltados manualmente com o comando PLINE.

Referências bibliográficas

geometry of the Koch curve (p.61-63).


Capítulo 5: Composições aleatórias

Nem todas as composições seguem princípios rígidos de organização. Algumas vezes, a composição
possui variáveis aleatórias, e ainda assim resulta em um conjunto harmonioso. Observe, por
exemplo, as marcas de pingos de chuva caindo sobre a água parada de um lago (Figura 55). Apesar
de não estarem organizados rigidamente em simetria matricial ou de papel de parede, é possível
dizer que sua distribuição é uniforme.

Figura 55: Pingos d’água caindo em um lago.

Do mesmo modo, ao se analisar o tecido urbano de uma cidade medieval, não se encontra princípios
compositivos clássicos, como a simetria. No entanto, existe nesse tipo de malha urbana uma
homegenidade que é resultante da combinação de regras comuns a todos e de dados pessoais de cada
indivíduo. O método construtivo, por exemplo, é sempre o mesmo, mas o tamanha de cada
residência pode variar entre tais e tais valores. O resultado demonstra uma certa homogeneidade,
como mostra a Figura 56.

Figura 56: Malha urbana de cidade medieval comparad a a uma malha urbana rensacentista.

Em seu livro A Pattern Language (1977), Christopher Alexander descreve diferentes tipos de
padronagens encontradas na natureza e na arquitetura, especialmente em malhas urbanas, que não
são derivadas de princípois rígidos de composição, mas do emprego de determinadas regras com
parâmetros mais ou menos aleatórios, os quais podem, obviamente, exibir certas tendências de
comportamento. Em um livro subsequente (1979), o mesmo autor afirma:

"No nível geométrico, vemos certos elementos físicos que se repetem infinitamente, arranjados
numa quase infinita variedade de combinações.” (p.82)

Programas de computador podem ser utilizados para gerar números aleatórios e criar composições
que parecem ter sido geradas espontaneamente. A vantagem é que, ao contrário dos números
aleatórios gerados por um indivíduo, os números gerados automaticamente são mais uniformemente
distribuídos, podendo ainda apresentar ou tendências baseadas em índices de probabilidades pré-
estabelecidos.
Em VBA, a função Rnd gera números aleatórios entre 0 e 0.999999... Para que ela possa ser
utilizada, é necessário utilizar o comando Ran domize, que inicia o gerador automático de
números.

Para gerar um número inteiro entre dois valores dados, utiliza-se a fórmula abaixo:

Int((ValorMáximo – Valor Mínimo + 1) * Rnd + ValorMínimo)

O exemplo abaixo gera um número inteiro entre 1 e 6:

Dim NumAleat as Integer


Randomize
NumAleat = Int((6 * Rnd) + 1)

Exercícios

Nos exercícios abaixo, vamos gerar automaticamente composições formadas por quadrados
distribuídos aleatoriamente no espaço bidimensional. Em seguida, faremos variações do programa
em que os quadrados receberão cores aleatórias e em que aleatoriamente eles serão substituídos por
círculos. Finalmente, criaremos composições com quadrados que terão uma maior tendência a se
localizar no centro do espaço compositivo do que em sua periferia. O AutoCAD não possui
comandos prontos para este tipo de procedimento, e portanto será necessário criarmos um
programa em VBA específico para esta finalidade. Siga os passos abaixo para que seu programa
funcione corretamente.

Atenção:

Antes de utilizar o editor de VBA do AutoCAD, configure o Windows de maneira que o ponto, e
não a vírgula, seja utilizado como separador das casa decimais. Para isso abra o menú de
“Configurações Regionais” do “Painel de Controle” (menú Iniciar/Configurações/Painel de
Controle). Em seguida, clique na guia “Números” e substitua a vírgula (,) pelo ponto (.) no campo
“Símbolo decimal”. A maioria dos sistemas em português utiliza a vírgula nesse campo, enquanto os
sistemas em inglês utilizam o ponto. Como o AutoCAD utiliza a vírgula como separador de
coordenadas (x,y,z), o ponto é necessário para que números com casas decimais gerados pelo
sistema não sejam confundidos com pares ordenados.

1. Composição com quadrados

8. Carregue o AutoCAD e inicie um novo desenho


9. Carregue o editor de VBA: TOOLS/M ACRO/VISUAL BASIC EDITOR.
10. Grave seu projeto com o nome RANDOM .DVB, utilizando para isso o comando
FILE/SA VE.
11. Insira um UserForm em seu projeto, e digite no campo Caption da janela de propriedades o
nome Composições Randômicas. Se a janela de propriedades não estiver aparecendo, abra-a
com o comando de menú VIEW/PROPERTIES WINDOW. Para que o texto caiba dentro
do botão, pode ser necessário torná-lo mais largo, esticando-o por um de seus cantos.
12. Arraste um botão (CommandButton) da Toolbox para seu UserForm. Se a Toolbox não
estiver aparecendo, abra-a com o o comando de menú VIEW/TOOLBOX.
13. M ude a propriedade Caption do botão para “Quadrados”.
14. Para acrescentar o código necessário para tornar o botão funcionante, clique duplo sobre
ele.
15. Na página de código que se abrirá, acrescente os seguintes comandos (em negrito) entre as
linhas já criadas automaticamente:

Private Sub CommandButton1_Click()

Me.Hide
Dim X As Integer
Dim Y As Integer
Dim L As Integer
Randomize
X = Int((101 * Rnd) -50)
Y = Int((101 * Rnd) -50)
L = Int((10 * Rnd) + 1)
ThisDrawing.SendCommand ("rectangle" & vbCr & X & "," & Y & vbCr _
& (X + L) & "," & (Y + L) & vbCr)
Me.Show

End Sub

Neste código, dois números aleatórios entre –50 e +50 são gerados para comporem o par
ordenado (x,y) que indicará a posição do quadrado na tela. Um outro número aleatório é
gerado para indicar a medida lateral do quadrado (L). Em seguida, o comando
“RECTANGLE” é enviado ao AutoCAD, utilizando como parâmetros os valores gerados.
Deste modo, a cada vez que o botão é acionado, um quadrado de dimensão entre 1 e 10
unidades é inserido por seu canto inferior esquerdo dentro de um espaço de 100 por 100
unidades.

Atenção!!

O símbolo underscore ( _ ) é utilizado ao final de uma linha de código para indicar sua continuidade
na linha seguinte. Outra opção mais simples é escrever todo o código em uma única linha comprida,
o que não pôde ser feito aqui por limitações de espaço.

16. Teste seu programa, com o comando de menú RUN/RUN SUB.

2. Composição com quadrados coloridos

Agora que já temos formas de tamanhos e posições aleatórias, vamos deixar nosso programa
decidir também sobre as cores decada quadrado.

3. Insira um novo botão em seu UserForm, mudando o valor do campo Caption para
“Quadrados coloridos”.
4. Clique duplo nesse novo botão, e copie o código do botão anterior entre as linhas de código
geradas automaticamente.
5. Em seguida, acrescente os comandos em negrito:

Private Sub CommandButton1_Click()


Me.Hide
Dim X As Integer
Dim Y As Integer
Dim L As Integer
Randomize
X = Int((101 * Rnd) -50)
Y = Int((101 * Rnd) -50)
L = Int((10 * Rnd) + 1)

cor = Int((255 * Rnd) + 1)


ThisDrawing.SendCommand ("-color" & vbCr & cor & vbCr)

ThisDrawing.SendCommand ("rectangle" & vbCr & X & "," & Y & vbCr _
& (X + L) & "," & (Y + L) & vbCr)
Me.Show
End Sub

17. Teste seu programa, com o comando de menú RUN/RUN SUB.

Dica:

O uso so do símbolo “–“ na frente do comando COLOR garante que a interação com o mesmo será
feita através do Command Prompt do AutoCAD, e não de uma Dialogue Box. Se esta fôsse
carregada, o VBA não teria como passar informações a ela. Toda a interação feita através da função
ThisDrawing.SendCommand deve ser feita na linha de Prompt.

3. Composição com quadrados e círculos coloridos

Além de dimensões, posições e cores, é possível ainda deixar a cargo do programa a escolha entre
formas diferentes. Após gerar um número aleatório inteiro entre um e dois, podemos atribuir a cada
um desses valores uma forma diferente, por exemplo, um quadrado e um círculo. Se o número
gerado fôr 1, optaremos por um quadrado. Caso ele seja 2, optaremos por círculo. A expressão

IF condição THEN

é utilizada na maioria dos programas, para indicar condições desse tipo, enquanto a palavra

ELSE

precede a opção alternativa, caso a condição desejada não seja cumprida. É necessário ainda indicar
o ponto em que terminam as ações relacionadas à condição imposta, o que no VBA é feito com a
expressão

END IF

Siga os passos abaixo para incluir a escolha de formas em seu código:


1. Insira um novo botão em seu UserForm, mudando o valor do campo Caption para
“Quadrados e círculos”.
6. Clique duplo nesse novo botão, e copie o código do botão anterior entre as linhas de código
geradas automaticamente.
7. Em seguida, acrescente os comandos em negrito:

Private Sub CommandButton1_Click()


Me.Hide
Dim X As Integer
Dim Y As Integer
Dim L As Integer
Randomize
X = Int((101 * Rnd) -50)
Y = Int((101 * Rnd) -50)
L = Int((10 * Rnd) + 1)
cor = Int((255 * Rnd) + 1)

forma = Int((2 * Rnd) + 1)

ThisDrawing.SendCommand ("-color" & vbCr & cor & vbCr)

If forma = 1 Then

ThisDrawing.SendCommand ("rectangle" & vbCr & X & "," & Y & vbCr _
& (X + L) & "," & (Y + L) & vbCr)

Else

ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & _
L & vbCr)

End If

Me.Show
End Sub

Observe que o valor L, que havia sido gerado como dimensão lateral do quadrado, é
aproveitado aqui como diâmetro do círculo. Desse modo, o menor círculo terá o diâmetro
igual a 1 unidade, do mesmo modo que o menor quadrado tem o lado igual a 1 unidade.

18. Teste seu programa, com o comando de menú RUN/RUN SUB.

4. Composição com quadrados tendendo à centralização

Existem diversas maneiras de se simular tendências em programação. A forma utilizada abaixo


é muito simples, mas atende às necessidades do problema proposto. Para simular uma
tendência à localização próxima do centro, um novo número aleatório inteiro entre 1 e 3 será
gerado. A distância do centro, obtida através das coordenadas X e Y, será então dividida pelo
número gerado. Se ele fôr um, a distância não será afetada, mas se ele fôr 2 ou 3, será
respectivamente metado ou um terço da distância original. Em outras palavras, em 66% dos
casos a distância será diminuída, o que resultará numa tendência à centralização. Neste
exercício vamos utilizar somente círculos, que são posicionados atrvés de seus centros.

1. Insira um novo botão em seu UserForm, mudando o valor do campo Caption para “Círculos
centralizados”.
2. Clique duplo nesse novo botão
3. Em seguida, acrescente os comandos em negrito abaixo entre as linhas de código geradas
automaticamente:

Private Sub CommandButton4_Click()

Me.Hide
Dim X As Integer
Dim Y As Integer
Dim L As Integer
Randomize
centro = Int((3 * Rnd) + 1)
X = Int((101 * Rnd) -50)/centro
Y = Int((101 * Rnd) -50)/centro
L = Int((10 * Rnd) + 1)
ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & _
L & vbCr)
Me.Show

End Sub

4. Teste seu programa, com o comando de menú RUN/RUN SUB.

5. Automatizando o processo

Finalmente, podemos automatizar o processo de geração da composição estabelecendo um número


de vezes em que o comando de inserção de quadrados será repetido. Para isso criaremos a variável
“i” (índice), de valor inicial igual a 1, que será acrescida de uma unidade a cada vez que um círculo
fôr criado. O programa repetirá a operação até que a variável i atinja o valor 50, ou seja, até que 50
círculos aleatórios tenham sido inseridos automaticamente.

1. Insira um novo botão em seu UserForm, mudando o valor do campo Caption para
“Composição automática com círculos centralizados”.
2. Clique duplo nesse novo botão, e copie o código do botão anterior entre as linhas de código
geradas automaticamente.
3. Em seguida, acrescente os comandos em negrito:

Private Sub CommandButton4_Click()


Me.Hide
Dim X As Integer
Dim Y As Integer
Dim L As Integer

Dim i As Integer
i = 1
Do While i <= 50

Randomize
centro = Int((3 * Rnd) + 1)
X = Int((101 * Rnd) -50)/centro
Y = Int((101 * Rnd) -50)/centro
L = Int((10 * Rnd) + 1)
ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & _
L & vbCr)

i = i + 1
Loop

Me.Show
End Sub

4. Teste seu programa, com o comando de menú RUN/RUN SUB.


5. Salve seu programa. Para utilizá-lo novamente após reinicializar o AutoCAD, carregue o
arquivo RANDOM .DVB com o comando TOOLS/M ACRO/LOAD PROJECT. Se desejar
gravar seu programa VBA juntamente com um arquivo DWG, repita os passos explicados à
página ?.

Sugestões:

1. Tente criar um botão que desenha círculos concêntricos uniformemente distribuídos, como na
Figura 55. Para isso, repita o comando CIRCLE algumas vezes, diminuindo em cada uma delas o
valor de L, através de divisão por números cada vez maiores:

ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & L & vbCr)
ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & L / 1.5 & vbCr)
ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & L / 2.5 & vbCr)
ThisDrawing.SendCommand ("circle" & vbCr & X & "," & Y & vbCr & L / 4 & vbCr)

2. Experimente utilizar os comandos SOLID ou BOX no lugar de RECTANGLE e DONUT no lugar


de CIRCLE. Você obterá figuras cheias no lugar de quadrados e círculos formados apenas por seus
contornos. Antes de substituir esses comandos no código, experimente utilizá-los no AutoCAD e
anote os dados que devem ser informados passo a passo em cada caso.

3. Crie uma interface que permita ao usuário determinar o número de quadrados inseridos ao
pressionar o último botão.

4. Para que seu programa se torne acessível através do comando TOOLS/M ACRO/MACROS do
AutoCAD (sem a necessidade de se carregar o editor de VBA), insira em seu projeto um módulo
(M odule) e repita os passos explicados à página ?.

Discussão

1. Faça uma pesquisa procurando identificar obras de arquitetura e urbanismo que utilizam
princípios compositivos aleatórios. Nessas composições, quais as regras que são seguidas por
todos os indivíduos e quais os valores que variam de um para o outro? Você consegue
enxergar tendências nessas composições, semelhantes à tendência à centralização do
exercício desenvolvido acima?

2. Olhe novamente a figura ? no capítulo sobre formas paramétricas. Você seria capaz de criar
um programa que gerasse automaticamente sequências de arcos com dimensões aleatórias,
como fez o arquiteto Oscar Niemeyer no projeto do edifício da Editora M ondadori?

Referências bibliográficas

Alexander, C. (1977) A Pattern Language (New York, O xford University Press).Alexander, C.

Alexander, C. (1979) The Timeless Way of Building (New York, O xford University Press).
Capítulo 6: Ambigüidade e emergência

Uma das principais diferenças entre o desenho feito a mão e o desenho feito no computador é o nível
de precisão. Não estou falando de desenhos a nanquim, feitos com régua e esquadro, que podem ser
extremamente precisos, mas dos desenhos feitos com lápis de ponta grossa ou carvão. Também não
me refiro às imagens digitais de tipo raster, aquelas provenientes, por exemplo, da digitalização de
fotos por scanner ou câmera digital. Esses, aliás, podem ser bastantes imprecisos se sua resolução ou
número de pontos fôr baixa. Um arquivo vetorial, criado num programa de CAD como o AutoCAD,
no entanto, não permite nenhum tipo de ambigüidade ou indefinição.

Desenho a mão livre/desenho em CAD

ref.: Why Architects Draw?

Ora, a indefinição é uma qualidade altamente desejável numa representação gráfica onde diversas
decisões ainda não foram tomadas, como espessuras de paredes e dimensões de vãos. É por esse
motivo que muitas pessoas têm dificuldades em utilizar o CAD nas fases iniciais do projeto. Na
minha opinião isso só ocorre por que ainda utilizamos o CAD como substituto do desenho a
nanquim. Se o utilizássemos de maneira mais inteligente ele poderia substituir, com vantagens,
algumas etapas que são normalmente realizadas a mão. Na próxima vez que iniciar um estudo
preliminar de planta baixa em AutoCAD tente, por exemplo, representar as paredes como linhas
simples ao invés de linhas duplas. Utilize dimensões de eixo a eixo ao invés de dimensões internas
acabadas. Quando decidir sobre a espessura das paredes, você pode utilizar o comando M PEDIT
para transformar as linhas de eixo em polylines e dar-lhes a espessura desejada, que poderá ser
facilmente modificada com o mesmo comando, como mostra a figura ?.

evolução do desenho de uma planta em AutoCAD

É claro que o desenho a mão livre nunca será totalmente substituído, pois pois algumas pessoas se
comunicam melhor atavés dele. É por esse motivo que novas interfaces que permitem incluir o
gestos manuais no desenho digital vêm sendo desenvolvidas, como canetas e tabletas com as quais
se pode desenhar a mão livre diretamente no espaço virtual.

Outro aspecto em que o CAD pode auxiliar nas fases iniciais do projeto é no que se refere à deteção
de formas emergentes. Formas emergentes são formas que surgem, propositalmente ou não, a partir
da sobreposição de outras formas. Na figura ?, por exemplo, o retângulo cinza surge da interseção de
dois quadrados.

Arquitetos, designers e artistas gráficos treinados têm facilidade para observar essas figuras
derivadas da sobreposição de outras formas. No entanto, conforme a complexidade do desenho, eles
pode lançar mão de certos recursos que os ajudam a destacar novas formas em uma composição. O
método mais mais conhecido é o da sobreposição de uma folha de papel transparente, onde se
copiam apenas as linhas que interessam ou em que se pintam as áreas que serão somadas para formar
uma nova figura. Observe nas figuras ? a ? como diferentes leituras dos padrões decorativos árabes
podem ser obtidas ao se destacar determinadas formas ou unir campos contíguos com uma mesma
tonalidade.

O método acima descrito pode ser utilizado de maneira análoga, no AutoCAD, com a criação de
novos layers e o uso do comando BHATCH.

No espaço tridimensional, é comum utilizarmos processos aditivos no estudo de volumetrias, quando


trabalhamos com maquetes. Contudo, torna-se difícil realizar operações de interseção e subtração de
formas no mundo real. No espaço virtual do CAD, em que dois corpos podem ocupar o mesmo lugar
no espaço, essas operações tornam-se mais rápidas e práticas, como no último exercício deste
capítulo.

A grande vantagem deste método é que ele permite que se chegue a formas muito complexas a partir
de figuras primitivas.

Exercícios

Quando criança, você provavelmente já brincou muito com emaranhados de linhas que se
transformam em belos desenhos ao se preencher os campos indicados por um ponto. Nos exercícios
abaixo partiremos de composições recursivas obtida com os programas assistente-de-regras 2D e 3D,
introduzidos no último capítulo, para destacar nelas novos padrões, regulares ou irregulares.
1. Formas emergentes em 2D

????????

Figura 57: Você provavelmente já brincou bastante, quando crian ça, com este tipo de composição emergente.

Figura 58: Exemplos de composições emergentes criadas com o comando BHATCH a partir de
composições regradas geradas pelo program a Assistente de Regras 2D.

Dica:
Ao criar suas regras de composição no assistente-de-regras-2D, tente imaginar de ante-mão como
ficarão as sobreposições das figuras-base e que tipo de figuras emergentes você poderá obter com
elas. Desse modo, suas composições serão mais baseadas em sua real intenção artística do que
simplesmente na sorte ou azar.

2. Formas emergentes em 3D

Se você tiver alguma experiência com AutoCAD 3D, tente criar composições semelhantes às do
exercício anterior em 3D, utilizando como ponto de partida uma compoosição gerada pelo programa
assistente-de-regras-3D, que você pode baixar do mesmo site em que encontra a versão 2D. Após
experimentar diferentes combinações entre cópias de um mesmo sólido, comece a aplicar neles as
operações boleanas (UNION, SUBTRACT, INTERSECT). Utilize também o comando SLICE para
aparar as partes indesejadas, como mostra a Figura 59.

Figura 59: Três etapas do processo de desenvolvimento de uma forma


emergent e basead a em uma composição regrada.

Discussão

7. Faça uma pequena pesquisa e procure detectar a utilização das técnicas apresentadas acima
na obra dos gandes mestres da arquitetura. Ao ver uma forma nova e original, pergunte-se
sempre quais as formas primitivas que deram origem a ela.

8. Em seu próximo projeto, fique atento às formas emergentes que irão surgir,
espontaneamente, à medida em que você começa a desenhar. Em seguida, procure sobrepôr ,
deliberadamente, figuras que propiciem o aparecimento de novas formas em seu projeto.
Faça deste método um hábito aliado aos seus métodos pessoais de projetar.

Referências bibliográficas

Emergence (p.61-63).
Capítulo 7: “Algoritmização” de processos de projeto

Um algorítmo nada mais é do que um procedimento sistemático que produz, num número finito de
etapas, a resposta a uma pergunta ou a solução de um problema. Como pudemos observar na
primeira parte deste livro, um programa de computador nada mais é do que um tipo especial de
algorítmo, descrito em linguagem apropriada. Até aqui os algorítmos apresentados foram bastante
simples e pouco abrangentes no processo projetivo, atuando apenas de maneira localizada, gerando
composições abstratas baseadas em processos lógico-matemáticos. Neste capítulo vamos transformar
em algorítmo (“algoritmizar”) um processo de projeto comum no quotidiano de arquitetos, que
muitas vezes é repetido por eles infinitas vezes.

A vantagem de se transformar um procedimento em algorítmo não está apenas na economia de


tempo que se tem ao automatizar essa função. Um bom algorítmo deve ser capaz de lidar com todas
as eventuais exceções à regra que possam ser encontradas. Por isso, a fim de se desenvolver um
algorítmo que realmente funcione em todos os casos possíveis, é necessário conhecer e compreender
a fundo o processo a ser automatizado. Segundo Stiny (1978):

"Como um algorítmo tem de ser especificado em tamanho grau de detalhe, a simples tentativa de se
construir um algorítmo para um determinado processo constitui-se num excelente meio de se
explorar o processo em todos os seus aspectos e características" (p.208).

Daí a importância pedagógica do algorítmo, como ressalta Knuth (1973):

“Têm-se dito frequentemente que uma pessoa não compreende realmente uma coisa até que ela seja
capaz de ensiná-la a alguém. Na verdade, uma pessoa não compreende realmente uma coisa, até
que ela seja capaz de ensiná-la ao computador, isto é, expressá-la através de um algorítmo”
(p.709).

Apesar da palavra algorítmo sugerir o uso da computação, algorítmos vêm sendo utilizados há
séculos, inclusive nas artes e na arquitetura. Um excelente exemplo é o livro do grande mestre
italiano do séc. X VII, Andrea Paládio. Em seu tratado “I Quattro Libri d’Árchittetura”, Paládio
explica, através de linguagem algorítmica, ou seja, passo a passo, as regras para o cálculo das
proporções de abóbadas, colunas, entablaturas, pórticos, escadas e telhados, só para citar alguns
exemplos. No texto extraído do livro de Paládio notamos até mesmo a presença de palavras-chave na
criação de um programa de computador, como os condicionais “SE” e “M AS” (que correspondem,
em programação, a “IF” e “ELSE”):

“Os cômodos podem ser cobertos ou com abóbadas ou com tetos planos. SE tiverem tetos planos, a
altura do piso ao teto deve ser igual à sua largura (...) SE forem abobadados, a altura das abóbada
em cômodos quadrados será um terço maior que sua largura. Mas nos cômodos que são mais
longos que largos (...) a altura será encontrada adicioando-se a largura ao comprimento e
dividindo-se o resultado em duas partes iguais (...)”(Primeiro Livro).

O livro de Paládio é um exemplo perfeito de regras de composição que podem ser automatizadas
com o uso do computador. Todo projeto arquitetônico possui algumas etapas consideradas
“mecânicas”, que consistem simplesmente na aplicação de regras determinadas pelo arquiteto
inicialmente e que serão seguidas todas as vezes que uma determinada situação fôr encontrada.
Exercício

No exercício abaixo você vai aprender a automatizar, de maneira extremamente simplificada, um


procedimento com aplicação bastante prática.

1. Gerador de layout de sanitário

Um bom exemplo de processo repetitivo em arquitetura é o projeto de layout de sanitários coletivos.


Em primeiro lugar, devemos definir bem as regras compositivas de nosso problema. Neste caso, elas
poderiam ser as seguintes:

• Ao se entrar no cômodo, não se deve avistar as cabines com vasos sanitários. Pode-se, no
entanto, avistar a bancada de pias.
• Para um melhor aproveitamento do espaço, as cabines e a bancada da pia devem ser
distribuídos contra as paredes de maior comprimento, num espaço retangular. (Caso o espaço
seja quadrado, não importa a direção do layout.)
• A passagem entre a porta de acesso e o início das cabines deverá ter uma largura mínima de
1.00m.
• O comprimento das cabines será sempre de 1.20m.
• Todas as cabines devem ter a mesma largura, que deverá ser no mínimo de 1.00m.

Após a definição das regras de composição, é necessário estabelecer as condições exigidas para sua
solução. Por exemplo, se o retângulo dado fôr muito pequeno, será impossível desenvolver o layout
de acôrdo com o esquema estabelecido. Do mesmo modo, um espaço muito grande pode requerer
outro tipo de layout especializado (fig.?). Por esse motivo, será exigido que o espaço fornecido tenha
ao menos 2.00m. de comprimento (para acomodar ao menos uma cabine) e entre 2.50 e 4.00m. de
largura (para que o espaço entre as cabines e a bancada da pia seja sempre entre 0.80 e 2.30m.).

figura: restrições caso máximo, caso mínimo (constrains)

Em seguida, é necessário estabelecer os valores que permanecerão constantes em todos os casos,


como a passagem na entrada do sanitário, o comprimento da cabine e a profundidade da bancada.
Finalmente são definidas as variáveis que serão calculadas em cada caso. Estas também estarão
sujeitas a condições. Por exemplo, a largura das cabines deverá ter um valor mínimo de 1.00m.

O quadro abaixo resume os valores que serão utilizados no projeto. Dados os valores L, e C, os
valores N e LC serão calculados para cada caso.

Constantes do Variáveis Condições que Variáveis Condições que


projeto: fornecidas em devem ser calculadas para devem ser
cada caso: analisadas: cada caso: respeitadas no
projeto:
P (passagem na L = largura do 4.00m >= L >= N = número de LC min (largura
entrada) = 1.00m sanitário 2.50m cabines mínima da
CC C = comprimento C >= 2.00m LC = largura da cabine) = 1.00m
(comprimento da do sanitário cabine
cabine) = 1.20
PB
(profundidade da
bancada) =
0.50m.

Por motivo de simplicidade, levaremos em consideração que a planta do sanitário será sempre
retangular, que estará sempre posicionada horizontalmente na tela do computador, e que a porta de
entrada estará sempre no canto inferior esquerdo do retângulo, posicionado no ponto (0,0,0). De
maneira esquemática, o layout do sanitário se parecerá sempre com a Figura 60, variando apenas no
comprimento e largura do cômodo e no número e largura das cabines.

Figura 60: Layout esquemático do sanitário.

Vamos começar nosso programa pelo desenho de sua interface gráfica. Como vimos acima, o
usuário terá de nos informar os valores relativos ao comprimento e largura do espaço para o qual
desenvolveremos um layout. Para isso, vamos utilizar campos de texto onde os valores necessários
serão digitados, além de botões para executar a tarefa e para limpar a tela e reiniciar o projeto.

Para iniciar criar a interface gráfica, siga os passos abaixo:

14. Carregue o AutoCAD e inicie um novo desenho


15. Carregue o editor de VBA: TOOLS/M ACRO/VISUAL BASIC EDITOR.
16. Grave seu projeto com o nome RANDOM .DVB, utilizando para isso o comando
FILE/SA VE.
17. Insira um UserForm em seu projeto, e digite no campo Caption da janela de propriedades o
nome Layout de Sanitário. Se a janela de propriedades não estiver aparecendo, abra-a com
o comando de menú VIEW/PROPERTIES WINDOW. Para que o texto caiba dentro do
botão, pode ser necessário torná-lo mais largo, esticando-o por um de seus cantos.
18. Arraste dois campos de texto (TextBox) da Toolbox para seu UserForm. Arraste também
dois campos de legenda (Label) para o lado de cada TextBox, mudando seus conteúdos
para “Comprimento” e “Largura”. Se a Toolbox não estiver aparecendo, abra-a com o o
comando de menú VIEW/TOOLBOX.
19. Em seguida, arraste dois botões (CommandButton) da Toolbox para seu UserForm,
mudando os valores dos campos Caption para “Gerar layout” e “Reiniciar”. Sua interface
deve ficar parecida com a Figura 61.
Figura 61: Interface do programa “ Layout de Sanitários.”

20. Para acrescentar o código necessário para tornar os comandos da interface funcionantes,
clique duplo sobre cada um eles.
21. Na página de código que se abrirá, acrescente os comandos em negrito apresentados abaixo.
22. Em primeiro lugar, faremos as declarações de variáveis no topo da página de código.
Digite, antes da primeira Sub, as seguintes declarações de variáveis de valor fixo e
circunstancial que serão utilizadas no programa:

'Declaração das variáveis que terão valor fixo


'nesta versão do programa
Dim P As Double
Dim CC As Double
Dim PB As Double
Dim PC As Double

'Declaração das demais variáveis


Dim L As Double
Dim C As Double
Dim LC As Double
Dim N As Integer

Observe que a única variável de tipo Integer (número inteiro) é N, o número de cabines, que não
pode ser um número decimal.

Atenção:

As variáveis de um programa podem ser declaradas dentro ou fora de uma Sub ou função. A
diferença é que a variável declarada dentro de uma Sub tem valor apenas dentro da mesma, enquanto
a variável declarada no início do programa pode ser compartilhada por diversas Subs. Em nosso
caso, as variáveis L e C deverão ser acessadas pelas caixas de texto e pelo botão de geração do
layout, devendo, portanto, ser obrigatoriamente declaradas externamente a essas funções.

23. Em seguida, vamos a crescentar o código necessário para que o valor digitado nas caixas de
texto 1 e 2 seja atribuído, repsectivamente, às variáveis C (comprimento do cômodo) e L
(largura do cômodo).

Private Sub TextBox1_Change()


C = Val(UserForm1.TextBox1.Value)
End Sub
Private Sub TextBox2_Change()
L = Val(UserForm1.TextBox2.Value)
End Sub

24. O próximo passo consiste em desenhar a bancada da pia e as partições das cabines, quando
o primeiro botão fôr acionado. Para isso as dimensões fixas deverão, incialmente, receber
os valores estabelecidos como padrões de projeto.

Private Sub CommandButton1_Click()

'Atribuição de valores às dimensões fixas


P = 1
CC = 1.2
PB = 0.5
PC = 1.2

O próximo passo será calcular o número total de cabines e sua largura

'Cálculo de N (número total de cabines)


N = Int((C - P) / 1)

'Cálculo de LC (largura de cada cabine)


LC = (C - P) / N

Finalmente, as linhas necessárias serão desenhadas na tela, utilizando-se para isso comandos de
AutoCAD misturados a variáveis obtidas no programa:

'Esconder UserForm para desenhar na tela do AutoCAD


Me.Hide

'Desenhar o retângulo que define o cômodo


ThisDrawing.SendCommand ("rectangle" & vbCr & "0,0" & vbCr & C & "," _
& L & vbCr)

'Inserir partições das cabines através de estrutura de repetição


(“Loop”)
Dim i As Integer
For i = 0 To N - 1
ThisDrawing.SendCommand ("line" & vbCr & (P + LC * i) & ",0" & vbCr _
& (P + LC * i) & "," & PC & vbCr & vbCr)
Next i

'Desenhar bancada da pia


ThisDrawing.SendCommand ("line" & vbCr & "0," & (L - PB) & vbCr & C _
& "," & (L - PB) & vbCr & vbCr)

'Recarregar UserForm
Me.Show

End Sub
Observe que o número de cabines foi calculado com a seguinte fórmula: parte inteira do número
resultante da subtração largura da passagem do comprimento do retângulo, e da divisão do
resultado pela largura mínima da cabine (1.00m). Para se obter a parte inteira desse número, foi
utilizada a função Int(), que tranforma o número Real dentro do parênteses em um número
inteiro, eliminando sua parte decimal. Observe também que o desenho das divisórias foi repetido
(N-1) vezes através de uma estrutura de repetição (“loop”), que utiliza um índice i, um número
inteiro ao qual uma unidade é somada a cada vez que o código é repetido. Esse índice participa
do cálculo da coordenada X da linha divisória, que varia a cada nova partição. A Figura 62
mostra a composição das coordenadas utilizadas no desenho das linhas de layout.

Figura 62: Variáveis utilizadas na definição dos pontos do layout.

25. O último passo consiste em apagar tudo o que foi desenhado para iniciar um novo estudo de
layout:

Private Sub CommandButton2_Click()


Me.Hide
ThisDrawing.SendCommand ("erase" & vbCr & "all" & vbCr & vbCr)
Me.Show
End Sub

26. Teste seu programa com diferentes valores de C e L.

2. Estabelecendo limites

Você deve ter notado que alguns dos layouts gerados não parecem adequados aos espaços
definidos. Como vimos acima, tipo de layout que este programa é capaz de fazer se adequa melhor
a espaços com largura entre 2.50 e 4.00m, e comprimento maior ou igual a 2.00m. Para forçar o
usuário a utilizar dimensões dentro dos limites estabelecidos, vamos incluir uma condicional do
tipo IF nas Subs das caixas de texto que apresentará uma caixa de mensagem (M sgBox) avisando o
usuário sobre o problema e cancelando a ação de desenho.

1. Acrescente ao seu código as linhas em negrito abaixo:

Private Sub CommandButton1_Click()

'Atribuição de valores às dimensões fixas


P = 1
CC = 1.2
PB = 0.5
PC = 1.2

'Análise do valor das variáveis L e C


If L = 0 Then
MsgBox "Insira um valor diferente de zero para a largura do cômodo."
End If

If C = 0 Then
MsgBox "Insira um valor diferente de zero para o comprimento do
cômodo."
GoTo Fim
End If

'Cálculo de N (número total de cabines)


N = Int((C - P) / 1)

...

2. Observe como, caso uma condições ou ambas não sejam atendidas, o programa prosseguirá
para a linha “Fim”, através do comando GoTo (“vá para”). Agora é necessário atribuir o
nome “Fim” à última linha da Sub, como mostra o código abaixo em negrito:

...

'Recarregar UserForm
Me.Show

Fim:
End Sub

3. Teste seu programa deixando os campos de texto vazios e preenchendo-os com o valor
zero. Se desejar, imclua também em seu código um teste para valores negativos:

If L <= 0 Then
...
If C <= 0 Then
...

3. Incluindo mais variáveis no programa

Sua interface poderia permitir ainda a seleção de diferentes valores pre-estabelecidos para as
variáveis com valores fixos no programa acima, através do uso de “list-boxes”. Para isso, vamos
incluir em nossa interface uma lista de valores opcionais para a profundidade das cabines.

1. Acrescente à sua interface uma “combo box” (caixa de lista combinada com campo de texto),
arrastando-a da Toolbox. Seu UserForm ficará parecido com a Figura 63. A ComboBox
apresenta valores pré-definidos e ao mesmo tempo permite que o usuário digite novos
valores.
Figura 63: Interface do programa de geração de layout com a ComboBox.

2. Será necessário agora criar uma nova função na página de código, que atribuirá um valor
inicial e adicionará os demais valores opcionais à lista da ComboBox. Para isso, acesse a
página de código (VIEW/CODE) e selecione, na lista da esquerda, no topo da página, a
palavra UserForm. Em seguida, selecione na lista da direita a palavra Initialize. O editor de
VBA criará, automaticamente, uma nova Sub que será ativada toda vez que o UrseForm fôr
carregado. Nessa Sub, copie o código em negrito abaixo:

Sub UserForm_initialize()
UserForm1.ComboBox1.Value = 1.1
UserForm1.ComboBox1.AddItem (1.1)
UserForm1.ComboBox1.AddItem (1.2)
UserForm1.ComboBox1.AddItem (1.3)
End Sub

3. O próximo passo será capturar o valor escolhido pelo usuário. Para isso, clique duplo na
ComboBox e copie o código em negrito na Sub criada automaticamente:

Private Sub ComboBox1_Change()


PC = UserForm1.ComboBox1.Value
End Sub

4. Finalmente, você deve apagar ou comentar a linha de código dentro da Sub do botão “Gerar
Layout” que atribuía um valor fixo à variável PC:

‘PC = 1.2

5. Teste seu programa com diferentes valores de C, L e PC.

O programa apresentado acima realiza apenas as tarefas mais básicas no processo de determinação
do layout do sanitário. Ele poderia facilmente incluir divisórias mais detalhada, com linhas duplas e
portas, e inserir blocos pré-definidos para as pias e vasos sanitários. Tudo depende do tempo que
você está disposto a gastar com seu programa, que por sua vez depende da economia de tempo que
este lhe trará no seu dia-a-dia.
Discussão

9. Como você modificaria o algorítmo de geração de layout de sanitários acima de maneira a


incluir uma cabine para deficientes físicos?

10. Procure indetificar, em seu cotdiano, tarefas repetitivas de projeto que poderiam ser
automatizadas por programas similares ao desenvolvido acima. Estabeleça, para cada uma
delas, quais seriam as variáveis do problema, quais as condições que deveriam ser respitadas,
quais as limitações dos valores fornecidos e gerados, e quais os procedimentos que seriam
efetuados.

Referências bibliográficas

Stiny, George. Algorithmic aesthetics : computer models for criticism and design in the arts.
Berkeley: University of California Press, 1978.

Knuth, D. "Computer Sciences and M athematics", In American Scientist, 61, 6, 1973.

Palladio, A. The Four Books of Architecture. New York: Dover, 1965.


Capítulo 8: Geração automática e seleção de alternativas

Em 1975, época em que ainda eram poucos os arquitetos que utilizavam o computador em seu
cotidiano, William M itchell já previa a divisão do processo de projeto entre humanos e máquinas,
em artigo entitulado “The theoretical foundations of computer aided design” (Os fundamentos
teóricos do CAD):

"O uso menos ambicioso da máquina é dar-lhe apenas funções de representação, deixando a
responsabilidade pela geração e avaliação de soluções com o projetista. Numa versão mais
ambiciosa, a máquina pode receber a função de avaliar soluções produzidas por projetistas
humanos. Alternativamente, as funções poderiam ser revertidas, com a geração de alternativas pela
máquina e sua avaliação por humanos. Quando as soluções em potencial e os critérios para sua
seleção podem ambos ser bem definidos (problema bem definido) então sim um processo de projeto
pode, em tese, ser totalmente automatizado. O mais ambicioso uso da máquina consiste na tentativa
de utilizá-la na solução inteligente de problemas mal definidos." (p.?)

Embora quase trinta anos tenham se passado desde então, hoje o que se vê na maioria dos escritórios
de arquitetura e design é um uso do computador limitado às funções de representação. A geração
automática de alternativas de projeto corresponderia, portanto, a uma evolução do ponto de vista do
tipo de uso que fazemos do computador em nossa profissão.

Um sistema gerativo é aquele que produz uma variedade de soluções em potencial para serem
avaliadas, como, por exemplo, objetos resultantes da enumeração das combinações possíveis de suas
partes. Um sistema gerativo pode ser do tipo exaustivo, que gera todas os opções possíveis, por
"tentativa e erro", analítico, que gera apenas as soluções potencialmente viáveis por dedução, ou
ainda heurístico, que gera apenas as soluções desejáveis.

Um exemplo de sistema gerativo heurístico encontra-se no famoso tratado de arquitetura do


professor da Polytéchnique de Paris do séc. XVIII, Durand. A primeira parte de seu livro Précis de
Léçons dÁrchitecture contém todos os elementos construtivos típicos da arquitetura da época, como
escada, balaustradas, molduras, cornijas, guranições, colunas, etc. Na segunda parte de seu trabalho
encontram-se as orientações sobre como cada uma dessas partes devem ser combinadas, nos planos
horizontal (planta) e vertical (fachada), para formar uma obra de arquitetura. Embora um arquiteto
treinado seja capaz de estabelecer essas combinações facilmente, não seria assim tão fácil programar
um computador para que tomasse as decisões necessárias para criar, por si só, um projeto completo,
ainda que partindo de um sistema como o de Durand. Sistemas enumerativos analíticos e exaustivos
são, por outro lado, relativamente fáceis de se programar. O exercício abaixo mostra um exemplo
bastante simplificado de um sistema gerativo nas duas versões.

Exercício

Imagine que você quizesse explorar as diferentes possibilidades de composição com três
paralelepípedos ortogonais que se interceptam, como na Figura 64. No AutoCAD, você pode fazer
isso modelando sólidos de tamanhos diferentes com o comando BOX. Para modificar as proporções
dos paralelepípedos, no entanto, seria necessário apagá-los e reiniciar todo o processo. Você também
poderia utilizar um bloco criado a partir de um cubo e alterar suas escalas em X, Y e Z toda vez que
quizesse modificar suas proporções. Com o VBA você pode tornar esse tipo de exploração da forma
ainda mais interativo, com o uso de interface apropriada (barras de rolagem) para controlar as
variáveis, ou ainda gerar automaticamente todas as alternativas possíveis dentro de uma gama de
valores.

Figura 64: Composição com três paralelepípedos.

1. Testando volumetrias em ”tempo real”

Neste caso simplificado de geração automática de alternativas, vamos criar uma interface para
permitir a exploração dinâmica das variações de altura (h), largura (l) e comprimento (c) de três
paralelepípedos sobrepostos, conforme mostra a Figura 65.

O volume central, de cor vermelha, será indicado pela letra V, e os laterais, de cores azul e magenta,
serão indicados pelas letras A e M . As variáveis do programa serão seus respectivos pontos de
inserção e suas dimensões.

Atenção:

Ao se utilizar o comando BOX do AutoCAD, o paralelepípedo criado é inserido através do seu


centro de massa, e não do centro de sua base. Por esse motivo, os valores de z de cada bloco serão
acrescidos da metade de suas respectivas alturas quando o comando BOX fôr utilizado, para que
todos os blocos fiquem nivelados pela base.

Observe que o ponto de inserção do bloco central (vermelho) será sempre em (0,0,0). As
coordenadas dos pontos de inserção dos blocos laterias (azul e magenta), representadas pelas
variáveis (Ax, Ay, Az) e (M x, My, Mz), devem ser calculados em função das dimensões do bloco
central:

Ax = -Vl/2
Ay= -Vc/2
Az= -Vh/2

M x= Vl/2
My= Vc/2
Mz= -Vh/2
Figura 65: Relação espacial entre os três paralelepípedos.

Vamos começar o programa pelo layout de sua interface:

27. Carregue o AutoCAD e inicie um novo desenho


28. Carregue o editor de VBA: TOOLS/M ACRO/VISUAL BASIC EDITOR.
29. Grave seu projeto com o nome GERADOR-DE-ALTERNATIVAS.DVB, utilizando para
isso o comando FILE/SAVE.
30. Insira um UserForm em seu projeto, e digite no campo Caption da janela de propriedades o
nome Gerador de Alternativas. Se a janela de propriedades não estiver aparecendo, abra-a
com o comando de menú VIEW/PROPERTIES WINDOW.
31. Se a Toolbox não estiver aparecendo, abra-a com o o comando de menú
VIEW/TOOLBOX.
32. Arraste um botão (CommandButton) da Toolbox para a parte inferior de seu UserForm.
M ude a propriedade Caption do botão para “Inserir/Atualizar”.
33. Arraste três molduras (Frame) da Toolbox para seu UserForm. M ude a propriedade Caption
de cada uma delas para “Vermelho”, “M agenta” e “Azul”. Ajuste o tamanho do UserForm
arrastando-o por um canto para obter mais espaço, caso seja necessário.
34. Arraste três barras de rolagem (SliderBar) da Toolbox para cada uma das molduras
inseridas. M odifique a propriedade Value de cada barra de rolagem para 5. Certifique-se de
que os valores máximo (M ax) e mínimo (M in) no painel de propriedades de cada uma delas
seja respectivamente 1 e 10. Além disso, modifique a propriedade SelStart (valor inicial) de
todas as barras de rolagem para 5.

Atenção:

Se o contrôle SliderBar não estiver aparecendo, clique com o botão da direita no painel “Controls”
da ToolBox e selecione a opção “Additional Controls”.
Na lista de controles adicionais, selecione “M icrosoft Slider Control, version 5.0 (SP2), como mostra
a Figura 66.
Figura 66: Painel de controles adiconais.

Clique no botão OK. O comando SliderBar aparecerá no ToolBox, como mostra a Figura 67 .

Figura 67: ToolBox mostrando o comando SliderBar.

35. Finalmente, arraste três legendas (Label) da Toolbox para cada moldura, cada uma ao lado
de uma barra de rolagem. M ude a propriedade Caption de cada uma delas para
“Comprimento”, “Largura” e “Altura”. Para que o texto caiba dentro delas, pode ser
necessário torná-las mais largas, esticando-as por um de seus cantos. Sua interface deverá
ficar parecida com a que aparece na Figura 30.
Figura 68: Interface do programa “ Gerador de Alternativas ”.

A seguir, vamos declarar as variáveis na página de código do UserForm:

36. Abra a página de código com o ocmando de menú VIEW/CODE e digite, na parte superior
da janela, as declarações abaixo:

Dim Ac As Double
Dim Al As Double
Dim Ah As Double

Dim Mc As Double
Dim Ml As Double
Dim Mh As Double

Dim Vc As Double
Dim Vl As Double
Dim Vh As Double
Dim Ax As Double
Dim Ay As Double
Dim Az As Double

Dim Mx As Double
Dim My As Double
Dim Mz As Double

O próximo passo consiste em tornar o botão “Inserir/Atualizar” funcionante:

37. Volte para a vista de layout do UserForm (VIEW/OBJECT) e clique duplo sobre o botão
“Inserir/Atualizar”. Na página de código que se abrirá, digite os comandos abaixo em
negrito entre as linhas de código geradas automaticamente:

Private Sub CommandButton1_Click()

‘Esconder UserForm para desenhar na tela do AutoCAD.


UserForm1.Hide

‘Apagar tudo o que estiver na tela


ThisDrawing.SendCommand ("erase" & vbCr & "all" & vbCr & vbCr)

‘Atribuir os valores das barras de rolagem às variáveis de


‘dimensionamento dos três blocos

Ac = UserForm1.Slider1.Value
Al = UserForm1.Slider2.Value
Ah = UserForm1.Slider3.Value
Mc = UserForm1.Slider4.Value
Ml = UserForm1.Slider5.Value
Mh = UserForm1.Slider6.Value
Vc = UserForm1.Slider7.Value
Vl = UserForm1.Slider8.Value
Vh = UserForm1.Slider9.Value

‘Calcular as coordenadas do ponto de inserção dos blocos laterias

Ax = -Vl / 2
Ay = -Vc / 2
Az = -Vh/2 + Ah/2

Mx = Vl / 2
My = Vc / 2
Mz = -Vh/2 + Mh/2

‘Desenhar os três blocos rspectivamente nas cores vermelho, azul e


‘magenta com o comando BOX, informando para cada um seu ponto de
‘inserção (coordenadas do centro de massa do bloco), comprimento
‘(length), largura (width) e altura (height).
ThisDrawing.SendCommand ("-color" & vbCr & "red" & vbCr)

ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & "0,0,0" & vbCr_
& "L" & vbCr & Vc & vbCr & Vl & vbCr & Vh & vbCr)

ThisDrawing.SendCommand ("-color" & vbCr & "blue" & vbCr)

ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & Ax & "," & Ay_
& "," & Az & vbCr & "L" & vbCr & Ac & vbCr & Al & vbCr & Ah & vbCr)

ThisDrawing.SendCommand ("-color" & vbCr & "magenta" & vbCr)

ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & Mx & "," & My_
& "," & Mz & vbCr & "L" & vbCr & Mc & vbCr & Ml & vbCr & Mh & vbCr)

‘Apresentar novamente o UserForm para que o usuário possa gerar novas


‘variações da composição.

Me.Show

End Sub

38. Teste seu programa com o ocmando de menú RUN/RUN SUB USERFORM . Após a
primeira inserção de blocos, feche o UserForm e volte à janela do AutoCAD. Estabeleça
um ponto de vista favorável à apreciação dos resultados, digitando os seguinte comandos e
valores en negrito na área de prompt:

Command: VPOINT
Specify a viewpoint or [Rotate] <display compass and tripod>: 1,-1,1
Command: SHADE

2. Visualização dinâmica de alternativas

O programa desenvolvido acima permite apenas que se visualize o resultado após todas as barras de
rolagem terem sido posicionadas. Imagine agora que você quizesse visualizar o resultado
automaticamente a cada vez que uma barra de rolagem fosse movida. Para isso, a mesma seqüência
de comandos ativada ao se clicar no botão “Inserir” deveria ser repetida a cada vez que o usuário
realizasse um movimento em qualquer uma das barras de rolagem. Para evitar a repetição da
seqüência de comandos que digitamos acima, vamos transformá-la em duas funções, uma de
verificação dos valores das barras e outra de criação dos blocos com esses valores. Esses funções
serão chamadas com o comando Call, conforme mostram as instruções abaixo:

1. Insira um procedimento do tipo Função (Function) em seu programa, utilizando para isso o
comando de menú INSERT/PROCEDURE, e preenchendo o campo Name com as palavras
“LimparTela” (sem espaço entre elas).

2. Entre as linhas de código que aparacerão automaticamente, copie a segunda linha do código
que você havia digitado anteriormente na Sub do botão “Inserir” (CommandButton1):
Public Sub LimparTela()

ThisDrawing.SendCommand ("erase" & vbCr & "all" & vbCr & vbCr)

End Sub

3. Insira um novo procedimento do tipo Função (Function) em seu programa, utilizando


novamente o comando de menú INSERT/PROCEDURE, e preenchendo o campo Name com
as palavras “ChecarValores” (sem espaço entre elas).

4. Entre as linhas de código que aparacerão automaticamente, copie parte do código do botão
“Inserir” (CommandButton1) relativa à chacagem de valores das barras de rolagem:

Public Sub ChecarValores()

Ac = UserForm1.Slider1.Value
Al = UserForm1.Slider2.Value
Ah = UserForm1.Slider3.Value
Mc = UserForm1.Slider4.Value
Ml = UserForm1.Slider5.Value
Mh = UserForm1.Slider6.Value
Vc = UserForm1.Slider7.Value
Vl = UserForm1.Slider8.Value
Vh = UserForm1.Slider9.Value

End Sub

5. Insira agora um terceiro procedimento do tipo Função (Function) em seu programa, sempre
com o comando de menú INSERT/PROCEDURE, preenchendo desta vez o campo Name
com a palavra “Inserir”, como mostra a Figura 69.

Figura 69: Caixa de diálogo para inserção de fun ção.


6. Entre as linhas de código que aparacerão automaticamente, copie a parte do código do botão
“Inserir” (CommandButton1) que calculava os valores necessários e criava os blocos no
AutoCAD:

Public Function Inserir()

Ax = -Vl / 2
Ay = -Vc / 2
Az = -Vh / 2 + Ah / 2

Mx = Vl / 2
My = Vc / 2
Mz = -Vh / 2 + Mh / 2

ThisDrawing.SendCommand ("-color" & vbCr & "red" & vbCr)


ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & "0,0,0" & vbCr &_
"L" & vbCr & Vc & vbCr & Vl & vbCr & Vh & vbCr)

ThisDrawing.SendCommand ("-color" & vbCr & "blue" & vbCr)


ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & Ax & "," & Ay &_
"," & Az & vbCr & "L" & vbCr & Ac & vbCr & Al & vbCr & Ah & vbCr)

ThisDrawing.SendCommand ("-color" & vbCr & "magenta" & vbCr)


ThisDrawing.SendCommand ("box" & vbCr & "ce" & vbCr & Mx & "," & My &_
"," & Mz & vbCr & "L" & vbCr & Mc & vbCr & Ml & vbCr & Mh & vbCr)

End Function

7. Substitua as partes retiradas do código do botão “Inserir” pelas linhas em negrito abaixo:

Private Sub CommandButton1_Click()

UserForm1.Hide

Call LimparTela

Call ChecarValores

Call Inserir

UserForm1.Show

End Sub

8. O próximo passo consiste em chamar sa funções “LimparTela”, “Inserir” e “ChecarValores”


a cada vez que uma barra de rolagem fôr clicada. Para isso, clique duplo em cada uma das
barras no UserForm1 e copie para cada uma delas as linhas abaixo em negrito entre as linhas
de código gerado automaticamente:
Private Sub Slider1_Click()

UserForm1.Hide

Call LimparTela

Call ChecarValores

Call Inserir

UserForm1.Show

End Sub

Atenção:

1. O uso da palavra “Call” antes do nome de uma função não é obrigatório. No entanto, ele aumenta
a clareza do código, pois torna explícito o fato de que uma função criada por você – e portanto não
existente anteriormente – está sendo chamada.

2. Poderíamos ter criado uma função única envolvendo os processos de limpeza de tela, checagem
de valores e criação de blocos, que seria chamada pelas barras de rolagem. No entanto, os três
procedimentos foram separados em funções diferentes porque na próxima etapa utilizaremos apenas
dois deles.

3. Observe como seu código ficou muito mais simples de entender ao agruparmos sequências de
comandos em funções cujos nomes descrevem o que está acontecendo.

9. Teste seu programa novamente. Com os comandos Zoom e Pan procure posicionar os blocos
na tela de maneira semelhante à da Figura 70, de modo que ao utilizar as barras de rolagem
você possa visualizar simultaneamente as modificações ocorridas em sua forma.

Figura 70: Posicionamento correto dos blocos na tela.


3. Gerando todas as alternativas possíveis dentro de uma gama de valores

A versão do programa desenvolvida acima já representa uma boa evolução com relação à anterior,
ao mostrar dinamicamente as alterações causadas pelas mudanças nos valores das diferentes
variáveis do sistema. No entanto, não é possível compará-las lado a lado. Vamos agora utilizar o
VBA para gerar, automaticamente, uma gama de alternativas na tela, para que els possam ser
comparadas entre si. Se considerarmos que cada uma das nove variáveis pudesse assumir apenas
valores inteiros entre 1 e 10, teríamos ao todo 109 soluções possíveis para o problema. Como esse
número é muito grande, vamos limitar a gama de valores para apenas dois para cada variável. Para
que o código seja repetido com todos os valores desejados, utilizaremos um tipo de estrutura de
repetição conhecido como FOR/NEXT.

FOR/NEXT:

1. A estrutura de repetição FOR/NEXT atribui uma gama de valores (que vai de um valor mínimo a
um máximo dados) a uma variável, repetindo um mesmo procedimento para cada valor inteiro entre
esses limites. Em nosso caso, cada FOR/NEXT será executado apenas duas vezes, uma com o valor
mínimo 1 e outra com o valor máximo 2.

2. Embora o valor padrão de acréscimo no FOR/NEXT seja uma unidade, você também pode,
opcionalmente, estabelecer outros valores inteiros ou não, positivos ou negativos que serão somados
ou subtraídos ao valor inicial dado, como nos exemplos abaixo:

For x = 2 To 10 Step 2 ‘Valores de x: 2, 4, 6, 8, 10


For x = 3 To 1 Step –1 ‘Valores de x: 3, 2, 1
For x = 1 To 2 Step 0.5 ‘Valores de x: 1, 1.5, 2

No código abaixo não é necessário chamar a função ChecarValores, pois neste caso eles não
dependem das barras de rolagem, e sim da gama de valores atribuída a cada um deles na primeira
linha de cada FOR/NEXT. Dentro da estrutura de repetição FOR/NEXT, teremos de acrescentar uma
função que modifica a origem da UCS, evitando que os blocos criados fiquem sobrepostos. Siga os
passos abaixo para incluir, em sua interface, um botão que gera todas as combinações possíveis dos
três blocos com comprimento, largura e altura variando de 1 a 2 unidades.

1. Aumente a área do UserForm1, caso seja necessário, e insira, em sua parte inferior, um novo
botão (CommandButton), arrastando-o da ToolBox. Na janela de propriedades ou sobre o
próprio botão, mude sua Caption para “Gerar todas as alternativas”.

2. Clique duplo sobre o botão e inclua o seguinte código em negrito entre as linhas criadas
automaticamente:

Private Sub CommandButton2_Click()

‘Esconder janela de interface para desenhar no AutoCAD


Me.Hide

‘Chamar função que limpa a tela


Call LimparTela
‘Atribuir, a cada variável, os valores 1 e 2
For Ac = 1 To 2
For Al = 1 To 2
For Ah = 1 To 2
For Vc = 1 To 2
For Vl = 1 To 2
For Vh = 1 To 2
For Mc = 1 To 2
For Ml = 1 To 2
For Mh = 1 To 2

‘Chamar função que insere blocos


Call Inserir

‘Mover UCS para a esquerda


ThisDrawing.SendCommand ("ucs" & vbCr _
& "m" & vbCr & "4,4,0" & vbCr)

Next
Next
Next
Next
Next
Next
Next
Next
Next

‘Reestabelecer UCS normal


ThisDrawing.SendCommand ("ucs" & vbCr & "w" & vbCr)

‘Visualizar todos os objetos criados


ThisDrawing.SendCommand ("zoom" & vbCr & "e" & vbCr)

‘Apresentar novamente interface


UserForm1.Show

End Sub

Atenção:

O uso de espaçamentos progressivamente maiores dentro das funções e estruturas de repetição não é
obrigatório, mas aumenta a clareza do código.

3. Teste seu programa. A guarde enquanto o AutoCAD modela todas as alternativas, o que pode
demorar um pouco, dependendo de seu computador. Quando o código tiver sido executado,
volta à janela do AutoCAD e utilize os comandos ZOOM e PAN para visualizar mais de
perto as composições geradas.

4. Gerando todas as alternativas que atendem a um requisito


Observe agora que, entre as 29, portanto 512 alternativas geradas acima, há diversos casos em que o
bloco central é englobado por um dos blocos lateris (ou ambos), quando estes têm dimensões
superiores às dele, como mostra a Figura 71. Para evitar que isso aconteça e gerar apenas as
alternativas em que o bloco central possua pelo menos uma dimensão maior que as dos demais
blocos, podemos incluir no código um processo de decisão do tipo IF/THEN que analisará cada caso
e efeturá ou não a modelagem, dependendo do resultado.

Figura 71: Algumas das composições em que o bloco central fica obstruído pelos laterias.

Para obter esta nova gama de possibilidades vamos criar um novo botão, que chamaremos de “Gerar
todas as alternativas desejadas”.

1. Acrescente um novo botão ao seu UserForm, arrastando-o da ToolBox. M odifique o campo


Caption para “Gerar todas as alternativas desejadas”. Se fôr necessário, aumente o tamanho
do UserForm e do botão, arrastando-os por um de seus cantos. A sua interface final deverá
ficar semelhante à Figura 72.

Figura 72: Interface final do programa.

2. Clique duplo sobre o botão criado e copie o código do botão anterior entre as linhas geradas
automaticamente.

3. Em seguida, acrescente as linhas em negrito abaixo na parte central da estrutura de repetição


FOR/NEXT:

Private Sub CommandButton3_Click()


‘Esconder janela de interface para desenhar no AutoCAD
Me.Hide

‘Chamar função que limpa a tela


Call LimparTela

‘Atribuir, a cada variável, os valores 1 e 2


For Ac = 1 To 2
For Al = 1 To 2
For Ah = 1 To 2
For Vc = 1 To 2
For Vl = 1 To 2
For Vh = 1 To 2
For Mc = 1 To 2
For Ml = 1 To 2
For Mh = 1 To 2

‘Checar condição
If Vc > Mc And Vc > Ac Or Vl > Ml And _
Vl > Al Or Vh > Mh And Vh > Ah Then

‘Chamar função que insere blocos


Call Inserir

‘Mover UCS para a esquerda


ThisDrawing.SendCommand ("ucs" & vbCr _
& "m" & vbCr & "4,4,0" & vbCr)

‘Fechar ação condicional


End If

Next
Next
Next
Next
Next
Next
Next
Next
Next

‘Reestabelecer UCS normal


ThisDrawing.SendCommand ("ucs" & vbCr & "w" & vbCr)

‘Visualizar todos os objetos criados


ThisDrawing.SendCommand ("zoom" & vbCr & "e" & vbCr)

‘Apresentar novamente interface


UserForm1.Show

End Sub
4. Teste seu programa. Como os casos em que há sobreposições são 343, desta vez serão
modeladas apenas 169 alernativas, o que reduz significativemente o número de
possibilidades a serem analisadas visualmente, e consequentemente torna os processos de
geração e seleção mais rápidos.

5. Finalmente, para que os usuários de seu programa não necessitem carregar o editor de VBA
do AutoCAD, crie uma macro que carrega o UserForm1. Para isso, insira um módulo
(INSERT/M ODULE), clique duplo sobre ele e insira em seguida um procedimento
(INSERT/PROCEDURE) do tipo Sub, chamando-o de “Gerador”. Entre as linhas de códigos
inseridas automaticamente, copie a linha abaixo em negrito:

Public Sub Gerador()

UserForm1.Show

End Sub

6. Grave seu programa. Para utilizá-lo novamente, carregue-o no AutoCAD com o comando
TOOLS/MACRO/LOAD PROJECT, abrindo a seguir o UserForm com o comando
TOOLS/MACRO/M ACROS.

Discussão

1. Imagine outras situações em que esta técnica de produção automática de alternativas e sua
filtragem poderiam ser úteis em um projeto real de arquitetura.
2. Na sua opinião, qual dos métodos de exploração da forma presentes no exercício acima seria
mais útil no desenvolvimento de um projeto de arquitetura: a geração indiscriminada de
alternativas ou a geração seletiva delas? Justifique sua resposta.

Referências bibliográficas

M itchell, W. J. The theoretical foundations of computer aided design. Environment and Planning B,
2. (1975) 127-150.
Apêndice

O VBA é uma linguagem de programação orientada a objetos. Não foi nosso objetivo, neste livro,
introduzir esse tipo de linguagem, mas sim utilizá-la de forma prática com o objetivos de fazer com
que arquitetos e designers passem a enxergar a computação como uma forma de se trabalhar
criativamente. O ambiente de desenvolvimento de VBA do AutoCAD possui um Help em que você
encontrará explicações e exemplos de todos os comandos de VBA vistos neste livro. Para uma
referência rápida, incluí abaixo um resumo da sintaxe da linguagem VBA e seus principais
operadores e estruturas de repetição. Para maiores informações sobre o VBA consulte a bibliografia
sugerida no final desta seção.

1. Sintaxe

Como na maioria das linguagens orientadas a objeto, a sintaxe básica de um programa em VBA tem
a seguinte estrutura:

Declaração de variáveis:

Diga quais serão as variáveis utilizadas e que tipo de informação elas terão (números, texto,
desenhos de AutoCAD, etc.)

Dim NomeDaVariável As TipoDaVariável

Procedimentos:

Um procedimento pode ser do tipo Função ou Subs, e nada mais é do que um agrupamento de linhas
de código:

Sub NomeDaSub (ParâmetrosOpcionais)

declarações, comandos, etc.

End Sub

Sintaxe do objeto:

A sintaxe do ponto é utilizada para se extrair propriedades ou aplicar ações (denominadas métodos)
em objetos:

objeto.propriedade
objeto.método

Dica:

Como os objetos em VBA possuem um número muito grande de propriedades e métodos, o editor de
VBA do AutoCAD fornece uma lista das caracterísitcas de cada objeto toda vez que um ponto é
digitado ao lado do nome de um objeto. Por exemplo, experimente digitar a palavra ThisDrawing
seguida por um ponto numa página de código do editor de VBA do AutoCAD. ThisDrawing é o
nome do objeto que representa o arquivo DWG que se encontra ativo no AutoCAD. Observe que há
dois tipos de ícones na lista:o tijolo voando indica um método (ação), enquanto a mão segurando
uma ficha indica uma propriedade, como mostra a figura ?.

Figura 73: Lista de métodos e propriedades do objeto thisDrawing, ativada com


a digitação de um ponto (.) após seu nome.

2. Operadores

Operadores aritméticos:

+ Soma
- Subtração
* Multiplicação
/ Divisão (retorna número com casas decimais)
\ Divisão (retorna número inteiro)
^ Potência

Operadores de comparação:

< Maior
<= Maior ou igual
> Menor
>= Menor ou igual
= Igual
<> Diferente

3. Estruturas de repetição

Condicionais:

If...Then...Else Em linha simples If condição Then ação

Em linhas múltiplas If condição Then


ação
End if
Com opção alternativa If condição Then
ação
Else
ação
End if

Select Case Select Case VariávelQueTeráSeuValorComparado


Case Valor1
ação
Case Valor2
ação
Case ValorN
ação
End Select

Laços de código (“loops”):

Do...Loop Do While...Loop Do While condição


ação
Loop

Do...Loop While Do
ação
Loop While condição

Do Until ... Loop Do Until condição


ação
Loop

For...Next For...a=x To y Next For I = Mínimo To Máximo


ação
Next I

For Each...Next For Each Elemento In Grupo


Elemento.ação
Next

Observações:

1. Nas estruturas de repetição é comum a utilização de um “contador” ou “índice”, uma variável do


tipo número inteiro, de valor inicial igual a zero ou um, à qual é somada uma unidade toda vez que o
código é executado. O valor dessa variável é analisado a cada repetição, e a continuação do loop fica
condicionada a ele, como mostra o exemplo abaixo, que será executado 4 vezes consecutivas. Assim
que o valor máximo é aingido, o loop é interrompido e o programa passa a executar as linhas de
código que vêm após ele.

Dim I As Integer
I = 1
Do While I < 5
ação
I = I + 1
Loop

2. A estrutura For Each só pode ser utilizada em grupos de elementos, como Arrays e Collections.
No AutoCAD, alguns exemplos de Collections são os objetos desenhados no M odelSpace de um
arquivo DWG ou os layers nele criados.
Bibliografia recomendada
Uso criativo da computação

Os livros abaixo, escritos por dois grandes mestres da computação gráfica aplicada à arquitetura e às
artes, certamente agradarão aos leitores interessados no uso da programação para a geração de
formas criativas:

M itchell, W. J., Ligget, R. S. & Kvan, T. (1987) The art of computer graphics programming. New
York: Van Nostrand Reinhold.

M itchell utiliza a linguagem de programação Pascal neste belíssimo livro de exercícios de


composição arquitetônica. Apesar de dispormos hoje de linguagens mais apropriadas para a
computação gráfica, o livro continua sendo um clássico e os programas nele contidos podem
ser facilmente adaptados. Este livro se encontra esgotado, mas pode ser encontrado em
“sebos” pela Internet.

M aeda, J. (1999) Design by Numbers (Cambridge, M A, The M IT Press)

Este livro, bem mais recente, traz exercícios práticos para se criar applets animados que você
poderá inserir em suas páginas para Internet. A linguagem utilizada é uma sub-linguagem
baseada em Java, desenvolvida pelo próprio M aeda, e disponível para download de seu site.
Este livro pode ser comprado diretamente pelo site da M IT Press.

Visual Basic for Application

Para os leitores que desejam obter maiores informações sobre a linguagem de programação VBA, o
livro de Lomax serve de referência, enquanto o de Roe traz exercícios práticos aplicados à

Lomax, Paul.VBA in a Nutshell – The language. O’Reilly: Sebastopol, CA, 1998.

Roe, A. G. Using Visual Basic with AutoCAD – Second Edition. Albany, NY: Autodesk Press,
2001.

Вам также может понравиться