Codificação de Programas
Codificação de programas DP
Em um ambiente de projeto, onde novos programas de desenho são desenvolvidos diariamente por um ou mais projetistas, a falta de organização pode levar uma perda de tempo excessiva na codificação e teste dos programas. A perda é maior ainda quando há a necessidade de se alterar programas DP prontos ou adaptar um programa DP para desenhos ligeiramente diferentes.
Para aumentar a organização dos programas DP desenvolvidos, é desejável que:
- Os programas sejam codificados de uma forma legível;
- Que tenham uma documentação que descreva as variáveis utilizadas (incluindo nós);
- Que tenham uma estrutura simples;
- Que tenham uma documentação dos blocos usados e como gera-los, quando for o caso.
O tempo adicional gasto para organizar programas DP é rapidamente recuperado quando é preciso corrigir / alterar programas prontos. Sugerimos neste capítulo alguns procedimentos de codificação e documentação de programas.
Tornando um programa legível
Compare os 2 trechos de programa listados a seguir e decida qual é mais fácil de ler:
PROGRAMA 1
DES'TMP'
INC'NOS'
34 31@0,-%GRAVATA
35 32@0,%GRAVATA
36 X34+(%ALT2-%ALT1),Y2
37 36@%ALT1,0
38 X37,Y3
39 X36,Y38
POL 36 37 38 39 36
POL 36 34 31
POL 39 35 32
FIM
PROGRAMA 2
DESENHO 'TMP'
INCLUI 'NOS'
34 31 @0,-%GRAVATA
35 32 @0,%GRAVATA
36 X34 + (%ALT2 - %ALT1),Y2
37 36 @%ALT1,0
38 X37,Y3
39 X36,Y38
POL 36 37 38 39 36
POL 36 34 31
POL 39 35 32
FIM
Ambos programas são válidos e equivalentes; o segundo programa é mais legível. O DP permite o uso livre de espaços e linhas em branco, assim como o uso do caractere de tabulação (rotulado no teclado como Tab ou duas flechas contrapostas). Para deixar mais claro o programa:
Separamos definições diferentes (tais como nós e poligonais) por linhas em branco;
Tabulamos os dados, deixando alinhados números de nós, coordenadas X, Y, etc.
Identamento de comandos
Chama-se de "Identamento" ao deslocamento que se faz nos comandos para o lado direito da linha, com o objetivo de diferenciar a seção de programa a que pertence cada comando. O exemplo abaixo mostra um programa sem identamento e um com:
Sem identamento:
DESENHO 'TMP'
INCLUI 'NOS'
REPETE I = 10
NUM J = %I + 1
SE %J = 11
NUM J = 1
FIM
NUM K = %J + 1
SE %K = 11
NUM K = 1
FIM
POLIGONAL %I %J %K
FIM
FIM
Com identamento:
DESENHO 'TMP'
NCLUI 'NOS'
REPETE I= 10
NUM J= %I + 1
SE %J= 11
NUM J = 1
FIM
NUM K = %J + 1
SE %K = 11
NUM K = 1
FIM
POLIGONAL %I %J %K
FIM
FIM
Neste exemplo, o comando REPETE controla um certo número de outros comandos. No programa sem identamento não ficam claros quais são os comandos controlados pelo REPETE (além disto, fica fácil esquecer de colocar um FIM no lugar certo). No segundo programa identou-se:
Um nível para todos os comandos dentro da seção DESENHO;
Um nível para todos os comandos controlados pelo REPETE;
Um nível para os comandos controlados pelo SE.
Note que os níveis de identamento são acumulativos.
Comentários
Programas DP são altamente simbólicos, e um comando como:
POL 10 11 12 13 10
não representa nada para quem lê, além de uma poligonal que pode estar em qualquer parte do desenho. Comentários devem ser livremente usados ao longo do programa para mostrar o que o programa está fazendo. Por exemplo:
$
$Contorno da vista em planta
$
POL 10 11 12 13 10 $ retangulo projetado
Variáveis Usadas
São 2 os tipos de variáveis usadas em um subprograma: os parâmetros e as outras variáveis locais.
Documentação de Parâmetros
Praticamente não há meio de não documentar os parâmetros usados em um subprograma. Existe uma palavra chave especial, COMENTÁRIO, que serve para descrever um parâmetro. O gerador de programas DP procura esta descrição e usa para o projetista digitar os parâmetros; sem a descrição a digitação de dados fica difícil.
Documentação de variáveis locais
As variáveis locais também podem ser divididas em duas categorias principais: os nós e as demais variáveis.
A única documentação razoável para nós é gráfica; o melhor é plotar um exemplo do desenho paramétrico e anotar a posição dos nós no desenho. Os parâmetros e outras variáveis também podem ser marcados sobre o desenho.
No caso das variáveis locais criadas dentro do subprograma, o melhor é abrir uma seção LOCAIS e declarar cada variável, comentando do lado. Por exemplo:
LOCAIS
N NBFLEX $ número de barras de flexão
N BITFLEX $ bitola de flexão
N NBCIS $ número de barras de cisalhamento
N BITCIS $ bitolas de cisalhamento
FIM
Independência de Escala
Desenhos por computador seriam sempre independentes da escala usada se não existissem textos no desenho. Como isto normalmente não acontece, torna-se necessário levar em consideração a escala quando se faz um programa.
O DP mantém um fator de escala atual do desenho (cujo default é 50), e multiplica os tamanhos de textos por esta escala. Para quem programa isto facilita, pois o texto sairá sempre proporcional a escala de desenho, para um único tamanho definido, em centímetros de plotagem.
No entanto, apenas os tamanhos de texto são multiplicados automaticamente. Como fazer para colocar um determinado nó a direita do outro, na escala do papel? A solução seria multiplicar 5 pela escala atual, tal como em:
21 @ 5*%_ESCALA, 0
TEXTO 1 @ 0, -1.5*%HTEX*%_ESCALA 'TEXTO'
Para facilitar o projetista, a escala de desenho, quando variável, deve ser parâmetro de entrada do subprograma. Por exemplo:
PARAMETROS
...
N ESCALA = %_ESCALA COM 'Escala 1:x'
FIM
DEFINE ESCALA %ESCALA
A escala foi declarada como parâmetro, e o seu valor default é o mesmo da escala atual do DP, normalmente 1:50. Logo no começo do programa nós reatribuimos o valor da escala do DP, com o comando DEFINE ESCALA.
Documentação de Programas de Biblioteca
Assim como existe uma pasta de documentação de desenhos paramétricos para o projetista, deve existir uma de documentação de programas, especialmente para os projetistas-programadores. Esta pasta deve incluir um exemplo de um desenho processado, um mapa dos nós sobre o desenho e a listagem, codificada como sugerimos. Não há necessidade de documentação complementar quando o programa já é suficientemente documentado internamente. Nas páginas a seguir nós vemos o exemplo de uma documentação deste tipo.
Subprograma SAPATA.DPS
Documentação de NÓS
Listagem do SAPATA.DPS
$
$Sapatas - todas as medidas em cm
$
PARÂMETROS
A TITULOCOM 'Titulo da sapata'
N ESCALA = %_ESCALACOM 'Escala 1:x'
N MULTI = 1 COM 'Multiplicador do numero de sapatas'
N COMPRIMCOM 'Comprimento X (cm)'
N LARGURACOM 'Largura Y (cm)'
N COMPILCOM 'Comprimento X do pilar (cm)'
N LARPILCOM 'Largura Y do pilar (cm)'
N GRAVATACOM 'Tamanho da gravata (cm)'
N ALT1COM 'Altura 1 (cm)'
N ALT2COM 'Altura 2 (cm)'
N BITXCOM 'Bitola na direcao X (mm)'
N ESPXCOM 'Espacamento na direcao X (cm)'
N BITYCOM 'Bitola na direcao Y (mm)'
N ESPYCOM 'Espacamento na direcao Y (cm)'
N DOBRACOM 'Comprimento da dobra (cm)'
N RECOBR = 1.5COM 'Recobrimento (cm)'
FIM
$
$Define tamanho de texto e escala de desenho
$
DEFINE TAMTTX 0.22
DEFINE ESCALA%ESCALA
LOCAIS
N NBX$ numero de barras, direcao X
N NBY$ numero de barras na direcao Y
N CMPX$ Comprimento do ferro, X
N CMPY$ Comprimento do ferro, Y
N DELTA$ deslocamento do gabarito do ferro
N HTEX = %_TAMTTX*%_ESCALA$ altura de texto de ferros
N HTEX1S = 0.7
N HTEX2S = 0.4
N HTEX1 = %HTEX1S*%_ESCALA$ altura de titulo
N HTEX2 = %HTEX2S*%_ESCALA$ altura de escala
FIM
$
$Raio de desenho dos ferros, FI 25 para maior efeito
$
N RAIO = 1.25
$
$Vista em Planta
$
10,0
21 @%COMPRIM,0
32 @0,%LARGURA
4X1,Y3
POL12341
51 @(%COMPRIM - (%COMPIL + (2*%GRAVATA)))/2,-
(%LARGURA - (%LARPIL + (2*%GRAVATA)))/2
65 @%COMPIL + (2*%GRAVATA), 0
76 @0,%LARPIL + (2*%GRAVATA)
8X5,Y7
POL56785
SE%ALT2 <> %ALT1
POL15
POL26
POL37
POL48
FIM
95 @ %GRAVATA, %GRAVATA
106 @-%GRAVATA, %GRAVATA
117 @-%GRAVATA, -%GRAVATA
128 @ %GRAVATA, -%GRAVATA
POL91011129
$
$Projecao X
$
19X9,Y1 - (1.5*%_ESCALA)
1819 @%COMPIL,0
1718 @0,-1.2*%_ESCALA
20X19,Y17
POL2017181920
16X1,Y20 - (%ALT2 - %ALT1)
1316 @0,-%ALT1
14X2,Y13
15X14,Y16
2220 @-%GRAVATA,0
2117 @%GRAVATA,0
POL1314151613
POL162220
POL152117
2313 @%RECOBR,%RECOBR
2423 @0,%DOBRA
2514 @-%RECOBR,%RECOBR
2625 @0,%DOBRA
POL24232526
N DELTA= %RECOBR + (0.5 * %_ESCALA) + %DOBRA
2323 @0,-%DELTA
2424 @0,-%DELTA
2525 @0,-%DELTA
2626 @0,-%DELTA
POL24232526
N CMPX= %COMPRIM - (2*%RECOBR) + (2*%DOBRA)
N NBX= FIX ((%LARGURA - (2*%RECOBR))/ %ESPX) + 1
TEXTO(X23+X25)/2, Y23 - (1.5*%HTEX)NVD 1 CENTRADO -
'%NBX P1 { %BITX C/%ESPX C=%.0CMPX'
N CMPX= %CMPX - (2*%DOBRA)
TEXTO(X23+X25)/2, Y23 + (0.5*%HTEX) CENTRADO '%.0CMPX'
TEXTO23 @ -(0.5*%HTEX),%HTEX ANG 90 NVD 1'E%DOBRA'
TEXTO25 @ (1.5*%HTEX),%HTEX ANG 90 NVD 1'D%DOBRA'
$
$Projecao Y
$
30X2 + (1.5*%_ESCALA),Y10
3130 @ (1.2*%_ESCALA),0
32X31,Y11
33X30,Y32
POL3031323330
3431 @0,-%GRAVATA
3532 @0,%GRAVATA
36X34 + (%ALT2 - %ALT1),Y2
3736 @%ALT1,0
38X37,Y3
39X36,Y38
POL3637383936
POL363431
POL393532
4137 @-%RECOBR-(2*%RAIO), %RECOBR
4041 @-%DOBRA,0
4238 @-%RECOBR-(2*%RAIO), -%RECOBR
43X40,Y42
POL40414243
N DELTA= %RECOBR + (0.5 * %_ESCALA) + %DOBRA
4040 @%DELTA,0
4141 @%DELTA,0
4242 @%DELTA,0
4343 @%DELTA,0
POL40414243
N CMPY= %LARGURA - (2*%RECOBR) + (2*%DOBRA)
N NBY= FIX ((%COMPRIM -(2*%RECOBR))/ %ESPY) + 1
TEXTOX41 + (1.5*%HTEX), (Y41+Y42)/2 NVD 2 CENTRADO ANG 90 -
'%NBY P2 { %BITY C/%ESPY C=%.0CMPY'
N CMPY= %CMPY - (2*%DOBRA)
TEXTOX41 - (0.5*%HTEX), (Y41+Y42)/2 CENTRADO ANG 90 -
'%.0CMPY'
TEXTO40 @ 0,-1.5*%HTEX NVD 2 'E%DOBRA'
TEXTO43 @ 0,0.5*%HTEX NVD 2 'D%DOBRA'
$
$Titulo da sapata, escala, multiplicador
$
1004 @0,4*%_ESCALA
TEXTO100HTEX %HTEX1S NVD 222 -
'%TITULO'
SE( %MULTI > 1)
101100 @ (LEN ('%TITULO')+1)*%HTEX1, 0
TEXTO101 HTEX %HTEX2S NVD 202 '%MULTI'
TEXTO101 @2*%HTEX2,0 HTEX %HTEX2S 'x'
FIM
102100 @0,-1.5*%HTEX2
TEXTO102HTEX %HTEX2S'(Esc 1:%_ESCALA)'
$
$Cotagens - nivel 221 para nao interferir com a extracao de ferros
$
DEFINE COTNIV 221
COT VER 1 4 1 @-1.6 *%_ESCALA,0
COT VER 1 X1,Y51 @-0.8 *%_ESCALA,0
COT COM X1,Y84
COT HOR 434@0,1.6*%_ESCALA
COT HOR 4X8,Y4 4 @0,0.8*%_ESCALA
COT COM X7,Y4X3,Y4
COT HOR 191819 @0,0.8*%_ESCALA
COT VER 303330 @-0.8 *%_ESCALA,0
SE %ALT1 <> %ALT2
COT VER 14 15 14 @0.8 *%_ESCALA,0
FIM
COT VER 14X15,Y1714 @1.6 *%_ESCALA,0
COT HOR 202220 @0,0.8*%_ESCALA
COT HOR 172117 @0,0.8*%_ESCALA
103(X13+X14)/2,Y13
104103 @0,%RECOBR
COT VER 103 104103
$
$Ferros nas secoes transversais - chamamos o DP DISTFER
$
2313 @ %RECOBR ,%RECOBR + %RAIO
2514 @-%RECOBR ,%RECOBR + %RAIO
DP'DISTFER' (C 1=23 C 2=25 N NELEM = %NBY N RAIO = %RAIO)
4137 @-%RECOBR - %RAIO, %RECOBR
4238 @-%RECOBR - %RAIO, -%RECOBR
DP'DISTFER' (C 1=41 C 2=42 N NELEM = %NBX N RAIO = %RAIO)
FIM
Listagem do DISTFER.DPS
$
$DISTFER.DPSDesenho de ferros distribuidos entre 2 pontos
$
PARAMETROS
C 1$ Coordenadas do primeiro ponto
C 2$ Coordenadas do segundo ponto
N NELEM$ Numero de elementos inseridos
A ELEM = 'FERCOR'$ Nome do bloco unitario inserido
N RAIO$ Raio de desenho
FIM
LOCAIS
N DNO$ Distancia entre os nos
N VX$ Versores da reta
N VY$
N I$ contador
FIM
N DNODIST12$ dist 1-2
N VX(X2 - X1) / %DNO$ versor X da reta
N VY(Y2 - Y1) / %DNO$ versor Y da reta
11 @ %VX * %RAIO, %VY * %RAIO$ 1 no centro do elem
22 @-%VX * %RAIO, -%VY * %RAIO$ 2 no centro do elem
N VX (X2 - X1) / (%NELEM - 1)$ VX agora e' o incr
N VY(Y2 - Y1) / (%NELEM - 1)$ VY idem
REPETEI= %NELEM
INSERE'%ELEM'1ESC %RAIO
11 @%VX, %VY
FIM
FIM