A sintaxe descrita e o arquivo de texto onde é usado serão chamados de layout de plotadora ou apenas layout.
Um layout típico [layout] contém de uma a várias páginas [page] de descrição de um desenho de plotadora.
A descrição da página [page] especifica somente:
Atributos da página: formato de papel em milímetros (unidade de comprimento global) e margens que determinam a área de trabalho em uma página.
Posição, tamanho e outros atributos de campos retangulares chamados de viewports [views], onde os desenhos serão localizados. As viewports podem conter textos adicionais (que serão abordados abaixo). Esses textos devem estar localizados perto da borda de uma vista, pois seu centro será preenchido com um desenho.
As tabelas [table], organizadas em linhas [row], compostas por células [cell] que, por sua vez, normalmente são preenchidas com textos [text].
Posição e atributos de textos [text]. O texto a ser incluído em um desenho pode ser definido como uma sequência de caracteres simples entre aspas (“...”) ou como as chamadas expressões, listadas no módulo de desenho. As expressões têm sua própria sintaxe. Elas podem ter a forma de uma data, nome do projeto etc. Também podem ter formas mais complexas, dependendo do conteúdo dos desenhos em uma página, por exemplo, a escala do desenho em uma vista, peso/massa do aço de armadura em uma viga/vão.
Exemplo:
O exemplo apresentado abaixo é uma extração de layouts reais encontrada na pasta de arquivos de configuração do Robot. Ele contém uma descrição de um desenho de viga de CA.
# As linhas que começam com este sinal pertencem a um comentário.
# Os comentários podem ser inseridos com um recuo.
# Os comentários no início de um arquivo devem conter uma pequena característica do conteúdo do arquivo.
# Veja um cabeçalho ideal:
# Desenho de viga (cada vão em uma nova página):
# vão único + duas seções + lista de armaduras
# Tabela (contendo dados típicos para CA) na parte inferior de uma página
# (Formato recomendado – A4)
[LAYOUT]
[page]
format = 297, 210 # formato do papel
margins = left 7, right 7, bottom 7, top 7
[view]
label = @elev # legenda @elev, usada em expressões de texto
pos = 3, 97 # canto inferior esquerdo: 3 mm na parte esquerda, 97 mm na parte inferior
size = 213, 95 # tamanho: 213x95 mm
type = "beam/bay" # vão único de viga
[view]
label = @sec1 # legenda da primeira seção
pos = 3, 29
size = 105, 65
type = "beam/bay/section"
[view]
label = @sec2 # legenda da segunda seção
pos = 111, 29
size = 105, 65
type = "beam/bay/section"
[view]
pos = right 0, top 0 # canto superior direito: 0 mm na parte direita, 0 mm na parte superior
size = 65, 169
type = "beam/bay/steel" # lista de armaduras em um vão de viga
[table]
pos = 0,0
# mesmo que o usuário altere o formato do papel, ele deve manter
# as margens esquerda e direita (aqui: zero) e a altura de toda a tabela
fixed = left right, vertical
# primeiro, você deve determinar a largura de colunas sucessivas da tabela
col = 100
col = 100
col = 83
# agora, você deve descrever cada linha
[row]
row = 4 # você deve determinar a altura da linha
# você pode descrever células em cada linha
[cell]
colspan = 2 # 2 colunas são mescladas nessa célula
[text]
pos = 3,50% # 3 mm na parte esquerda e a meia altura
font = height 2 # altura da fonte 2 mm
text = "Firm"
[text]
pos = 25%,50% # a 1/4 da distância inteira na parte esquerda e a meia altura
font = height 2
text = "Address"
[text]
pos = 65%,50%
font = height 2
text = "Telephone"
[text]
pos = 82%,50%
font = height 2
text = "Fax"
[cell]
rowspan = 2 # 2 colunas são mescladas nessa célula
[text]
pos = 3,top 25% # 3 mm na parte esquerda e a 1/4 da altura na parte superior
font = height 2
# Abaixo você pode ver um exemplo de uma expressão de texto, em que:
# pontos – função como operadores que mesclam textos em um texto
# @elev – objeto que será necessário para execução
# um serviço (essa é uma legenda de uma viewport na página)
# "steel" – o primeiro argumento na lista sempre
# determina o tipo de serviço (aqui: peso do aço).
# O formato (inscrição/número) dos seguintes argumentos depende
# estritamente do tipo de serviço.
# Observação:
# Listar a subexpressão @elev(...) pode terminar em falha. Assim, toda a expressão
# falha e, como resultado, você obtém uma sequência vazia, e não
# "Ribbed steel = kg" ou "Ribbed steel = 0kg"
text = " Ribbed steel = " . @elev("steel","kg","L") . "kg"
[text]
pos = 50%,top 25%
font = height 2
text = "Concrete = " . @elev("concrete","m^3") . "m3"
[text]
pos = 3,bottom 25%
font = height 2
text = "Plain steel = " . @elev("steel","kg","T") . "kg"
[text]
pos = 50%,bottom 25%
font = height 2
text = "Formwork = " . @elev("formwork","m^2") . "m2"
[row]
row = 5
[cell]
rowspan = 3
[cell]
rowspan = 3
[text]
pos = 3,bottom 25%
font = height 5
text = "Section " . @elev("section","cm","x")
[row]
row = 9
[cell]
[text]
pos = 3,top 25%
font = height 2
text = "Lower cover " . @elev("cover","cm","B") . "cm"
[text]
pos = 3,bottom 25%
font = height 2
text = "Lateral cover " . @elev("cover","cm","L") . "cm"
[text]
pos = right 25,50%
font = height 5
text = ""
[row]
row = 9
[cell]
[text]
pos = 3,top 25%
font = height 2
text = "Elevation scale " . @elev("scale","m/m","/")
[text]
pos = 3,bottom 25%
font = height 2
text = "Section scale " . @sec1("scale","m/m","/")
[text]
pos = right 25,50%
font = height 4, aspect 0.7
text = "Page"
[end]
Comentários finais:
As palavras-chave estão sempre em inglês. A mesma regra se aplica aos serviços ("scale", "steel", "section" etc.). Em ambos os casos, o programa não diferencia maiúsculas de minúsculas. É possível usar abreviaturas em palavras-chave, por exemplo, “Pos” que significa “posição”.
Cada página em um layout sempre tem um tamanho. Isso não significa que uma página só pode ser usada para o formato de papel determinado. O módulo de desenho aumentará/reduzirá uma página de layout proporcionalmente à configuração atual do dispositivo de impressão (impressora/plotadora). No entanto, se você criar um layout que será usado para diferentes formatos de papel, será recomendável defini-lo para o menor formato de papel viável.
Um layout tem uma estrutura hierárquica, com base na dependência pai-filho/filhos. A posição e o tamanho de um elemento filho são sempre expressos em relação ao elemento pai. O posicionamento padrão de um elemento filho (borda inferior esquerda) é executado com relação ao lado esquerdo da página e à parte inferior do elemento pai, a não ser que o comando relevante diga o contrário, por exemplo, “pos = right 3, 50%”. Ao determinar a posição e o tamanho de um filho, é possível usar números absolutos (interpretados como milímetros) ou percentuais do tamanho do elemento pai na direção relevante (a seleção de um desses modos é significativa no caso de modificação do formato do papel).
É possível dividir os objetos entre os que têm dimensões (representadas como formas retangulares) e os que não têm dimensões (no momento, há somente um: texto). Eles podem ser chamados, abreviadamente, objetos 1D e objetos 2D. No caso de elementos pais que têm ambos os tipos de objetos filhos, é preciso especificar primeiro os filhos sem dimensões e só depois continuar a listar os objetos espaciais.
[page], [area] e [cell] podem conter os dois tipos de objetos, enquanto [view] somente objetos 1D. Obviamente, as células [cell] pertencem exclusivamente a linhas de tabela, enquanto as páginas [page] pertencem exclusivamente a um layout [layout].
Os atributos (posição, tamanho etc.) são designados ao objeto por meio de comandos relevantes que são escritos diretamente após a palavra-chave – entre colchetes [...] – abrindo a definição de um objeto.
O atributo de orientação pode ser atribuído a uma tabela [table]. Isso é feito por meio do comando: “orientation = ...”. Na configuração padrão, as tabelas ficam na vertical, ou seja, o programa aceita o comando padrão “orientation = top”. Se desejar, por exemplo, posicionar uma tabela ao longo da borda direita da página, você deverá escrever “orientation = left”.
O exemplo apresentado acima não ilustra as possibilidades de definição de áreas [area]. Uma área tem os atributos de posição e tamanho. É usada para organizar outros objetos em um desenho. Ela pode ter algumas consequências na modificação do formato da página, mas somente no caso em que um layout contém fórmulas: “fixed = ...”. As áreas podem ser usadas em situações excepcionais. Elas são, é claro, invisíveis em desenhos projetados.
A sintaxe apresentada é relativamente “à prova de erros”, mas você deve prestar especial atenção ao fato de que uma descrição de uma tabela [table] ou uma área [area] sempre termina com [end].
As células de tabelas vazias não precisarão ser especificadas, se terminarem uma linha descrita e seu tamanho for 1x1.
A fonte de texto padrão nas células da tabela concorda com a seguinte descrição: “font = height 3, align left middle, angle 0”. A posição da fonte padrão é definida por “pos = 3, 50%”.
Tipos de desenhos
Assume-se que os layouts de plotadora não devem conter informações detalhadas sobre o conteúdo dos desenhos que preenchem as viewports. Se eles contiverem essas informações, elas deverão ser minimizadas e ser transparentes para o módulo de desenho que nunca usará esse tipo de informação. Essas informações são frequentemente introduzidas na forma do comando “type = ...” direcionado a uma viewport. As informações são usadas pelos módulos do Robot que são clientes do módulo de desenho e ativadas por um arquivo em lote. Os módulos podem ler um layout e, graças às informações “type”, obter orientação sobre os requisitos do autor do layout. Após ler um layout, os módulos do Robot podem modificá-lo, normalmente adicionando mais páginas. Isso explica por que o exemplo de layout acima produz, por exemplo, duas páginas para uma viga de dois vãos, embora o layout contenha a descrição de apenas uma página.
Tipos de desenhos em módulos de CA
"beam" |
viga inteira em uma elevação |
"beam/bay" |
vão de viga única |
"beam/bay/section" |
seção de vão da viga |
"beam/steel" |
listagem de aço para a vida inteira |
"beam/bay/steel" |
listagem de aço para um vão |
"column" |
coluna em uma elevação |
"column/section" |
seção da coluna |
"column/steel" |
listagem de armaduras da coluna |