You are on page 1of 73

Introduo | 1

ArchiStation 2013

Guia de programao ASX 2.0

Introduo | 2

ArchiStation 2013

Guia de programao ASX 2.0

As informaes contidas neste documento esto sujeitas a alteraes sem aviso prvio. Nenhuma parte deste documento pode ser reproduzida ou transmitida de qualquer forma ou meio, eletrnico ou mecnico, sem a permisso por escrito da Hemero Software Ltda.

2012 Hemero Software Ltda. Todos os direitos reservados.


Hemero e ArchiStation so marcas registradas da Hemero Software Ltda. Microsoft, Windows, Windows NT, Windows 95, Windows 98, Windows 2000, Windows XP, Windows Vista e logotipos associados so marcas registradas da Microsoft Corporation. Intel, Pentium e logotipos associados so marcas comerciais ou marcas registradas da Intel Corporation. OpenGL e logotipos associados so marcas registradas da Silicon Graphics, Inc. GeForce marca registrada da NVIDIA Corporation. Radeon marca registrada da ATI, Inc. POV-Ray e Persistence of Vision so marcas registradas da Persistence of Vision Raytracer Pty. Ltd.

As demais marcas citadas neste documento so de propriedade de seus respectivos fabricantes.

Reviso 008 - Outubro/2012

Introduo | 3

Contedo
Introduo................................................................................................................................................. 7 Linguagem de programao ...................................................................................................................................................7 A Interface de programao ASX ..........................................................................................................................................7 O primeiro script ASX ......................................................................................................................................................................8 Explicao do funcionamento do script .............................................................................................................................9 Estrutura do C/C++ ............................................................................................................................... 10 Sintaxe ................................................................................................................................................................................................ 10 Identificadores ........................................................................................................................................................................... 10 Declarao de variveis ............................................................................................................................................................... 10 Tipos bsicos de variveis ..................................................................................................................................................... 10 Exemplos de declarao de variveis ............................................................................................................................... 10 Variveis globais e locais ....................................................................................................................................................... 11 Avaliando expresses ................................................................................................................................................................... 11 Operador de atribuio .......................................................................................................................................................... 11 Operadores aritmticos.......................................................................................................................................................... 11 Incrementos e decrementos ................................................................................................................................................. 12 Operadores de relao e lgicos........................................................................................................................................ 12 Instrues condicionais ............................................................................................................................................................... 13 if e else .......................................................................................................................................................................................... 13 Instrues de repetio ............................................................................................................................................................... 13 for .................................................................................................................................................................................................... 13 break e continue ....................................................................................................................................................................... 14 while ............................................................................................................................................................................................... 15 while do ........................................................................................................................................................................................ 15 Declarando funes ...................................................................................................................................................................... 15 Funo sem retorno de valor ............................................................................................................................................... 15 Funo com passagem de parmetros ............................................................................................................................ 16 Funo com retorno de valor .............................................................................................................................................. 16 Classes e objetos ............................................................................................................................................................................ 17 Cadeias de caracteres .................................................................................................................................................................. 18 Cdigo ASCII............................................................................................................................................................................... 18 Mtodos associados ................................................................................................................................................................ 19 Funes relacionadas a strings................................................................................................................................................. 19 Definindo e manipulando pontos no espao tridimensional.......................................................... 20 A classe point .................................................................................................................................................................................. 20 Descrio dos mtodos .......................................................................................................................................................... 20 Funes para Desenhar ......................................................................................................................... 22

Introduo | 4

Criando um linha ...................................................................................................................................................................... 22 Outras funes ........................................................................................................................................................................... 22 Alterando as propriedades de desenho ............................................................................................................................... 23 Camadas ....................................................................................................................................................................................... 23 Ajustando a espessura e a altura ........................................................................................................................................ 23 Desenhando objetos com algoritmos e expresses matemticas ........................................................................ 24 Obtendo dados do usurio ................................................................................................................... 26 Fazendo com que o usurio indique um ponto ........................................................................................................... 26 Obtendo nmeros inteiros.................................................................................................................................................... 27 Obtendo nmeros reais ......................................................................................................................................................... 27 Obtendo cadeias de caractres........................................................................................................................................... 28 Outras funes de entrada de dados .................................................................................................................................... 28 Componentes ASX ................................................................................................................................. 29 Criando um Componente ASX ................................................................................................................................................. 30 Editando as propriedades .......................................................................................................................................................... 32 Adicionando novas propriedades ........................................................................................................................................... 33 Controlando os valores das propriedades...................................................................................................................... 34 Organizando a disposio das propriedades ................................................................................................................ 34 Descrio e nomes com acento no Inspetor de objetos .......................................................................................... 35 Outros tipos de propriedades ............................................................................................................................................. 36 Exemplos de componentes........................................................................................................................................................ 36 Cerca - funo PointAt();........................................................................................................................................................ 36 Escada............................................................................................................................................................................................ 38 Espiral - senos e cossenos ..................................................................................................................................................... 39 Integrando novos comandos a interface do ArchiStation............................................................... 41 Barra de ferramentas .................................................................................................................................................................... 41 Adicionando botes a barra de ferramentas (Toolbar) ............................................................................................. 41 Adicionando itens ao menu principal .................................................................................................................................... 43 Tratamento de arquivos de dados ...................................................................................................... 44 Operaes de leitura do arquivo ........................................................................................................................................ 44 Operaes de escrita do arquivo ....................................................................................................................................... 45 Manipulao do cursor do arquivo ................................................................................................................................... 45 Obtendo dados de planilhas do MS Excel ......................................................................................... 48 Listas de armazenamento ..................................................................................................................... 50 Definindo o item selecionado ............................................................................................................................................. 51 Mtodos genricos associados s listas .......................................................................................................................... 51 Mtodos especiais da classe stringList ............................................................................................................................ 51 Mtodos especiais da classe pointList ............................................................................................................................. 52

Introduo | 5

ASX 2.0 Adicionando materiais, blocos, perfis e hachuras ........................................................... 53 Adicionando materiais ................................................................................................................................................................. 53 Adicionando blocos ...................................................................................................................................................................... 53 Funes para inserir blocos .................................................................................................................................................. 54 Adicionando perfis ........................................................................................................................................................................ 54 Funes para criar perfis (Mudar para Shaped) ........................................................................................................... 54 Adicionando hachuras ................................................................................................................................................................. 55 Funes para criar hachuras ................................................................................................................................................. 55 ASX 2.0 Acessando dados do projeto .............................................................................................. 56 Mtodos para modificar objetos ............................................................................................................................................. 57 Acessando as propriedades dos objetos.............................................................................................................................. 58 Lista de objetos e suas propriedades .................................................................................................................................... 58 Exemplos de aplicaes .............................................................................................................................................................. 60 Lista de materiais ...................................................................................................................................................................... 60 Acessando as tabelas ................................................................................................................................................................... 62 Objetos da tabela Layers ....................................................................................................................................................... 62 Objetos da tabela Materials ................................................................................................................................................. 63 Objetos da tabela Blocks ....................................................................................................................................................... 63 ASX 2.0 Selecionando objetos .......................................................................................................... 64 Funes de seleo .................................................................................................................................................................. 64 Obtendo acesso aos objetos selecionados ......................................................................................................................... 64 Lista de Funes ..................................................................................................................................... 65 Funes para Desenhar ............................................................................................................................................................... 65 Alterarando propriedades .......................................................................................................................................................... 65 Funes de controle ..................................................................................................................................................................... 66 Entrada de dados ........................................................................................................................................................................... 66 Funes Matemticas................................................................................................................................................................... 67 Funes Aritmticas ................................................................................................................................................................. 67 Gerador de nmeros aleatrios .......................................................................................................................................... 68 Funes Trigonomtricas ...................................................................................................................................................... 68 Funes de geometria ............................................................................................................................................................ 68 Funes de converso ................................................................................................................................................................. 69 Caixas de dialogo........................................................................................................................................................................... 69 MessageBox() - Caixa de mensagem de texto .............................................................................................................. 69 GetFile() - Dialogo de seleo de nome de arquivo ................................................................................................... 69 Variveis do sistema .................................................................................................................................................................... 70 Modificao da interface ............................................................................................................................................................ 71 A classe Toolbar ........................................................................................................................................................................ 71

Introduo | 6

Adicionando itens ao menu principal do ArchiStation .............................................................................................. 71 Obtendo dados de planilhas do MS Excel ........................................................................................................................... 72 Tipos de variveis do AngelScript ....................................................................................................... 73 Valores booleanos .................................................................................................................................................................... 73 Nmeros inteiros ...................................................................................................................................................................... 73 Nmeros reais ............................................................................................................................................................................ 73 Cadeia de caracteres ............................................................................................................................................................... 73

Introduo | 7

CAPTULO 1

Introduo
A partir da verso 2011 a tecnologia ASX foi implementada no Archistation. Este recurso permite aos usurios o desenvolvimento de novos comandos e componentes inteligentes, utilizando a interface de programao integrada. Este guia pretende descrever os recursos e possibilidades que ajudaro voc a criar solues personalizadas de acordo com suas necessidades especificas.

Linguagem de programao
Uma linguagem de programao um mtodo padronizado para expressar instrues ao computador, contendo regras sintticas e semnticas para definir um programa, que permitir especificar precisamente sobre quais dados o computador vai atuar. As instrues ASX do ArchiStation so baseadas em linguagem C/C++, utilizando as bibliotecas do interpretador AngelScript. Para saber mais sobre a linguagem utilizada acesse http://www.angelcode.com/angelscript.

A Interface de programao ASX


ASX, sigla para ArchiStation Extended, uma interface criada para fornecer ao usurio uma plataforma integrada de desenvolvimento, tornando o processo de programao simples e rpido. Para acessar selecione no menu principal o item Ferramentas Editor de Scripts ASX.

O Editor ASX De modo geral, com scripts ASX voc poder: Implementar novos comandos e aplicaes para fazer aquilo que voc precisa Adicionar novos itens a interface do ArchiStation Acessar arquivos do disco para ler e salvar informaes em formatos personalizados Criar componentes inteligentes baseados em scripts

Introduo | 8

O primeiro script ASX


1. Acesse no menu principal Ferramentas Editor de scripts ASX.
Ao acessar pela primeira vez o editor de scripts, a funo void main() j esta declarada. por esta funo que o ArchiStation vai iniciar a execuo do script.

void main() { //Adicione aqui o cdigo do script }

Na linguagem C/C++ os sinais '{' e '}' so utilizados para delimitar blocos de cdigo, sendo que neste caso indicam o inicio e o fim da funo void main(). O sinal '//' utilizado para inserir comentrios no cdigo, indica que todos os caracteres at o final da linha devero ser ignorados no processo de execuo do script.

2. Digite o cdigo logo abaixo do comentrio de maneira que o script fique assim:
Ateno! A linguagem C/C++ case sensitive (diferencia maisculas de minsculas) importante digitar as maisculas e minsculas conforme indicado. Dica: Se voc esta utilizando a verso digital deste documento em seu computador, poder selecionar os cdigos nos exemplos e copiar pressionando <Ctrl+C> e depois colar no editor ASX com <Ctrl+V>.

void main() { //Adicione aqui o cdigo do script point p1,p2; Prompt("Entre com o primeiro ponto:"); GetPoint(p1); Prompt("Entre com o segundo ponto:"); GetPoint(p2,p1); Line(p1,p2); }

para salvar o projeto. A janela Salvar como exibida e automaticamente direcionada para a pasta Plugins da instalao do ArchiStation. Entre com o nome "teste" pressione o boto Salvar.

3. Pressione o boto

4. Pressione o boto

para executar o script.

O script solicita ao usurio a indicao de dois pontos e cria uma linha entre eles. O script ento encerrado e o controle devolvido ao usurio.

Introduo | 9

Ao salvar o script na pasta Plugins, voc estar implementando um novo comando que poder ser acessado atravs do Quadro comando, digitando seu nome seguido da tecla <ENTER>. Neste caso, ao digitar teste <ENTER> o script ser executado novamente. DICA: Todos os arquivos de script com extenso .asx salvos na pasta Plugins da instalao do ArchiStation podem ser executados entrando com seu nome no Quadro de comando.

Explicao do funcionamento do script


Se voc no tem experincia com linguagens de programao pode no entender muito bem a explicao a seguir. Mas fique tranquilo, as instrues utilizadas neste script sero descritas detalhadamente nos prximos captulos. A primeira linha digitada dentro da funo void main(), declara dois objetos do tipo point (pontos do ArchiStation), denominados p1 e p2, que sero usados pelo script.
point p1,p2;

A funo Prompt() chamada para exibir o texto entre aspas no Quadro de comando.

Prompt("Entre com o primeiro ponto:");

A funo GetPoint() solicita ao usurio a entrada de um ponto que ser armazenado em p1.

GetPoint(p1);

A funo Prompt() novamente chamada para exibir outro texto.

Prompt("Entre com o segundo ponto:");

Agora, uma variao da funo GetPoint(), com dois parmetros, solicita ao usurio a entrada do ponto p2 de forma ancorada a p1. Ou seja, uma linha de apoio ser desenhada entre p1 e o cursor do mouse at que o usurio indique o segundo ponto que ser armazenado em p2.

GetPoint(p2,p1);

Agora com os objetos p1 e p2 atualizadas com os valores introduzidos pelo usurio, a funo Line() desenha uma linha entre os dois pontos.

Line(p1,p2);

Estrutura do C/C++ | 10

CAPTULO 2

Estrutura do C/C++
Sintaxe
Todo o programa em C inicia sua execuo pela funo void main(), sendo obrigatria sua declarao no programa principal. As instrues de uma funo devem estar contidas dentro de um bloco de dados, que podem conter vrias instrues, so iniciados pelo sinal abrir chaves '{' e encerrado pelo fechar chaves '}'. Em uma funo podem haver mais de um bloco de dados, e o mesmo nmero de chaves abertas deve ser o de chaves fechadas. Todas as instrues devem ser encerradas pelo sinal ponto e vrgula ';' e podem ser uma declarao, expresso ou a chamada de uma funo.

Identificadores
Os identificadores so utilizados para nomear funes, variveis e outros objetos que podem ser definidos pelo usurio. So formados por letras, nmeros ou pelo sinal '_' (underline). O primeiro caractere deve sempre ser uma letra ou o sinal '_' (underline). As letras no devem possuir acentos ou cedilhas e h diferenciao entre maisculas e minsculas.

Declarao de variveis
Variveis so identificadores em que podemos atribuir e modificar os valores. Antes de utilizar uma varivel em C/C++, ela deve ser declara de acordo com o tipo de dados que vai armazenar. A declarao de uma varivel deve ser realizada com a seguinte sintaxe:

<tipo de varivel> <identificador>;

Tipos bsicos de variveis


Os tipos mais comuns de variveis so: bool Valores booleanos que podem ser false (falso ou 0) ou true (verdadeiro ou 1). int Nmeros inteiros compreendidos entre -2.147.483.648 e 2.147.483.648 double Nmeros reais, decimais ou de ponto flutuante string Cadeia de caracteres

Exemplos de declarao de variveis


Declara a varivel 'a' como um inteiro:
int a;

Declara a varivel 'Nome' como uma cadeia de caracteres:


string Nome;

Opcionalmente, no momento da declarao, voc poder atribuir um valor a varivel:


int a=5; double pi=3.1416; string Nome="Teste";

Estrutura do C/C++ | 11

E tambm poder declarar vrias variveis do mesmo tipo em uma nica instruo, separando-as por vrgula:
int a=5 , b=10 , c; string Nome="Teste" , Descricao="Desenha uma linha";

Em C, as aspas so utilizadas para representar cadeias de caracteres. Por exemplo, 1234 um valor numrico e diferente de "1234" que uma cadeia de caracteres. por isso que os valores atribudos as variveis do tipo string so definidos entre Aspas.

Variveis globais e locais


As variveis declaradas no incio de cdigo, antes da declarao da funo void main(), so consideradas variveis globais , podem ser acessadas em qualquer parte do programa, incluindo outras funes. As variveis declaradas dentro de uma funo so consideradas variveis locais, podem ser acessadas apenas dentro do blocos de dados onde foram declaradas ou de seus sub-blocos. Exemplo:
int pi=3.14; // varivel global void main() { double a=2; // varivel local }

Avaliando expresses
A avaliao de expresses executada por meio de operadores.

Operador de atribuio
O operador de atribuio o sinal de '=' (igual), utilizado para atribuir valores as variveis. Exemplos:
pi = 3.1416; a = b;

Operadores aritmticos
Os principais operadores aritmticos do C so os mesmos utilizados na maioria das linguagens: + * / % (e) Adio Subtrao Multiplicao Diviso Mdulo - Diviso na qual retornado o resto. Parnteses

Estrutura do C/C++ | 12

Exemplos:
a = a + 5; x = y + (3 * c);

O operador de adio tambm pode ser utilizado para unir duas ou mais cadeias de caracteres:
string Texto="Nome: "; Texto = Texto + "ArchiStation";

No ambiente do AngelScript, ao tentamos adicionar valores numrico de tipo int ou double a uma cadeia de caracteres, os valores numricos so tratados como cadeia de caracteres:

double pi = 3.1416; string A = "O valor de pi igual a "+pi; Prompt(A);

Executando este script obteremos como resposta no Quadro de comando:


O valor de pi igual a 3.1416 COMANDO:

Incrementos e decrementos
Em C tambm podemos fazer o uso dos operadores de incremento e decremento para os valores de tipo numricos: ++ -Incrementa (adiciona 1) Decrementa (subtrai 1)

Exemplos:
x++; // Equivalente a x=x+1; y--; // Equivalente a y=y-1;

Operadores de relao e lgicos


Os operadores de relao retornam apenas os valores 1 para verdadeiro e 0 para falso, de acordo com a relao dos operandos entre si, enquanto que os operadores lgicos referem-se as maneiras como estas relaes podem ser associadas. So normalmente utilizados em instrues condicionais.

Relacionais: > Maior que >= Maior ou igual < Menor que <= Menor ou igual == Igual != Diferente

Lgicos: && || !

AND (e) OR (ou) NOT (no)

Estrutura do C/C++ | 13

Instrues condicionais
if e else
As instrues if e else permitem ao processador executar uma instruo ou outra de acordo com o resultado da avaliao de uma condio. Sintaxe:
if ( <condio> ) < instruo se condio verdadeira >;

ou
if ( <condio> ) < instruo se condio verdadeira >; else < instruo se condio falsa >;

Exemplos:
// Se o valor de 'A' igual a B, adiciona 1 em A if ( A==0 ) A=A+1; // Se o valor de 'A' negativo, torna positivo if ( A<0 ) A=A*-1; // Mostra no Quadro de comandos a mensagem se 'A' maior que 20 if ( A>20 ) Prompt( "A maior que 20." ); else Prompt( "A menor ou igual a 20." );

Observao: Em C/C++ o sinal para verificar e igualdade so dois sinais de igual seguidos '=='. Apenas um sinal de igual '=' representa uma instruo de atribuio. As instrues tambm podem estar agrupadas em blocos de dados:
// Mostra se 'A' e (operador &&) 'B' so maiores que 20 if ( A>20 && B>20 ) { Prompt("A e B so maiores que 20."); } else { if ( A>20 ) Prompt( "A maior que 20." ); if ( B>20 ) Prompt( "B maior que 20." ); }

Instrues de repetio
for
A instruo for permite definir uma varivel de controle e implementar um loop de instrues que ser executado iterativamente enquanto a condio for verdadeira, incrementado a varivel de controle um valor definido a cada iterao. Sintaxe:
for( <inicializao>; <condio>; <incremento> ) < instruo enquanto a condio for verdadeira >;

Estrutura do C/C++ | 14

A inicializao um comando de atribuio usado para estabelecer a varivel de controle do loop. A condio uma expresso de relao que avalia a varivel de controle e de acordo com o resultado executa as instrues do loop. Aps cada execuo do loop, o incremento determina como a varivel de controle ser alterada. Exemplo: O trecho de cdigo a seguir estabelece um loop em que a varivel de controle 'a' inicializada com o valor 1 e ser incrementada a cada iterao enquanto 'a' for menor ou igual a 5.
for( int a=1; a<=5; a++ ) Prompt("Iterao: "+a+"/5.");

Com a execuo deste cdigo, o Quadro de comando mostrar :


Iterao: Iterao: Iterao: Iterao: Iterao: COMANDO: 1/5 2/5 3/5 4/5 5/5

A instruo a ser repetida, tambm poder ser um bloco de dados:


for( int a=1; a<=5; a++ ) { Prompt("Iterao: "+a+"/5."); if(a==5)Prompt("Fim."); }

break e continue
As instrues break e continue permitem um controle maior sobre a execuo dos blocos de loops em instrues de repetio. Quando o comando break encontrado em qualquer lugar dentro do bloco de loop, ele causa seu trmino. O processamento continuar pelo cdigo seguinte ao loop. Exemplo: A instruo for utilizada sem parmetros na forma for(;;) causa um loop infinito. Empregaremos o comando break para interromper o loop quando 'a' for maior que 5. Obteremos a mesma resposta no Quadro de comando obtida com o exemplo anterior.
int a=0; for(;;) { a=a+1; if(a>5) { Prompt("Fim."); break; } Prompt("Iterao: "+a+"/5."); }

O comando continue fora a prxima iterao do loop. Esta operao salta o resto das instrues do bloco de loop, realiza o incremento e retorna ao incio do bloco de loop. Ateno! O uso de instrues de repetio podem fazer o programa cair em elo infinito, da modo a nunca permitir o fim da execuo do script. Nestes e outros casos onde seja necessrio interromper a execuo do script, mantenha as duas teclas Ctrl pressionadas at paralisar a execuo.

Estrutura do C/C++ | 15

Exemplo: O seguinte trecho de cdigo mostra todos os nmeros entre 1 e 100 divisveis por 7.
for( int a=1; a<=100; a++ ) { //Se o resto da diviso por 7 no for 0 continua if(a%7!=0)continue; Prompt("O nmero "+a+" divisvel por 7."); }

while
A instruo while implementa um loop que ser executado enquanto a condio for verdadeira. Sintaxe:
while( <condio> ) < instruo enquanto a condio for verdadeira >;

while do
O conjunto de instrues do while primeiro executa o bloco de instrues, s ento avaliar a condio que caso seja verdadeira repetir o loop. Sintaxe:
do < instruo > while( <condio> );

Declarando funes
Funes so trechos de cdigo autnomos, separados do programa principal que servem para realizar determinadas tarefas. Vrias funes j so pr-definidas pela interface do ArchiStation e sero apresentadas neste manual mais adiante. Voc poder declarar e criar novas funes utilizando a seguinte sintaxe:

<tipo de retorno> <identificador> ( <parmetros> ) { <instrues da funo> }

Funo sem retorno de valor


Quando a funo no retorna valores ela deve ser declarada como void. Exemplo: Este script completo mostra a funo principal void main() chamando a funo void mensagem(), declarada logo a seguir no cdigo e mostra a mensagem "Ol!".
void main() { //Chama a funo mensagem() mensagem(); } //Declara a funo mensagem() void mensagem() { Prompt("Ol!"); }

Estrutura do C/C++ | 16

Funo com passagem de parmetros


Para receber um parmetro, a funo deve declarar o tipo e nome da varivel que dever receber o valor, se for mais de um parmetro, devero ser separados por vrgula. Exemplo:
void main() { //Chama a funo mensagem() mensagem("Ol"); } //Declara a funo mensagem() com o parmetro 'A' do tipo string void mesagem(string A) { Prompt("A mensagem : "+A); }

Funo com retorno de valor


Para criar uma funo que retorna valores, inicialmente devemos informar o tipo de dados que ser retornado em sua declarao. Usamos ento o comando return para retornar o valor. Toda vez que retornamos um valor a funo terminada e o processamento retorna ao ponto onde foi chamada. O valor retornado pode ou no ser aproveitado, de acordo com as necessidades apresentadas pelo contexto. Exemplo: Neste exemplo, chamamos a funo Soma(), declarada para retornar valores do tipo double, e atribumos o valor retornado a varivel 'A'.
void main() { //Declara as variveis A, B e C double A,B=10,C=25; //Chama a funo Soma(), o valor retornado ser atribudo a 'A' A = Soma(B,C); Prompt("A soma de B com C igual a "+A+"."); } //Declara a funo Soma() que retornar um valor do tipo double double Soma(double v1,double v2) { // Retorna a soma dos parmetros de entrada v1 e v2 return(v1+v2); }

A execuo deste script deve mostrar no Quadro de comando:


A soma de B com C igual a 35. COMANDO:

Estrutura do C/C++ | 17

Classes e objetos
Classes so dados estruturados que permitem agrupar diversas variveis em nico objeto. As classes devem ser declaradas no incio do script, antes da funo void main(), e a sintaxe :

class <identificador> { <lista de membros> };

Exemplo: Cria uma classe chamada "MinhaData " com trs variveis do tipo int.
class MinhaData { int Dia int Mes; int Ano; }

Declarar um objeto da classe "MinhaData" semelhante a declarao de uma varivel. Exemplo: Declaramos o objeto "Inicio" da classe "MinhaData".
MinhaData Inicio;

Para acessar as variveis da classe, utilizamos o identificador do objeto seguido pelo sinal ponto '.' e o identificador da varivel:
Inicio.Dia=10; Inicio.Mes=6; Inicio.Ano=2011;

Tambm podemos associar funes as classes, que chamamos mtodos. Exemplo: Adicionamos na classe "MinhaData" o mtodo AdicionaMes() que tem por objetivo adicionar um Ms a data. Se o limite de 12 meses (Dezembro) for ultrapassado, ento incrementar a varivel "Ano" e retornar "Mes" ao valor inicial 1 (Janeiro).
class MinhaData { //Variveis int Dia; int Mes; int Ano; //Mtodos void AdicionaMes() { Mes++; if(Mes>12) { Ano++; Mes=1; } } }

Estrutura do C/C++ | 18

Os mtodos das classes so acessados de maneira semelhante as variveis, com o indentificador do objeto seguido de sinal ponto '.' e o nome da funo. Exemplo: Agora podemos usar o mtodo para adicionar um ms a data do objeto "Inicio", criado anteriormente.

Inicio.AdicionaMes();

Cadeias de caracteres
A classe string utilizada para armazenar e manipular cadeias de caracteres. Exemplo:
//Declara a string A e atribui o valor "ABC" string A="ABC";

Voc poder realizar operaes de adio entre cadeias de caracteres.:


//Declara a string B e atribui o valor "DEF" string B="DEF"; //Soma as strings A e B obtendo em C o valor "ABCDE" string C=A+B;

Adio com variveis numricas tambm possvel, sendo que seus valores so convertidos em cadeias de caracteres antes da operao.

int D=456; string E="123"+D;

Repare que, neste caso, o valor atribudo a string E "123456" e no a soma dos valores numricos.

Cdigo ASCII
Cada caractere da cadeia possui um cdigo ASCII. Para acessar o cdigo ASCII de um caractere utilize a notao string[n], onde n representa a posio do caractere na cadeia, contagem que iniciada em 0: Exemplo:
//Declara a string str e atribui o valor "Ol!" string str="Ol!"; //Declara a varivel numrica 'a' //e atribui o valor em ASCII do primeiro caractere de str int a=str[0];

Neste exemplo, a varivel numrica a passa a armazenar o valor 79, que o cdigo ASCII para 'O', o primeiro caractere da string str.

Estrutura do C/C++ | 19

Mtodos associados
int string.length(); Retorna o tamanho da string, ou seja, o nmero total de caracteres. Exemplo:
string str="ArchiStation"; int a=str.length();

Onde a passa a armazenar o nmero de caracteres da string str. string string.substr (int posio, int comprimento); Retorna parte de uma cadeia de caracteres a partir da posio e comprimento especificados. int string.findFirst (const string str); int string.findFirst (const string str, int incio); Retorna a posio da primeira ocorrncia da string str dentro da cadeia de caracteres. Se nenhuma ocorrncia for encontrada retorna -1. Opcionalmente, use o parmetro incio para especificar a posio de incio da busca. int string.findLast (const string str); int string.findLast (const string str, int incio); Retorna a posio da ltima ocorrncia da string str dentro da cadeia de caracteres. Se nenhuma ocorrncia for encontrada retorna -1. Opcionalmente, use o parmetro incio para especificar a posio de incio da busca.

Funes relacionadas a strings


string Chr(int ASCII); Retorna uma string contendo o caractere correspondente ao cdigo ASCII especificado. string strUpperCase(string str); Retorna a string com todos os caracteres convertidos em maisculas. string strLowerCase (string str); Retorna a string com todos os caracteres convertidos em minsculas. Exemplos:
// Coloca em strA a palavra "ArchiStation" ( Chr(110) = "n" ) string strA="ArchiStatio"+Chr(110); // Coloca em strB os caracteres de strA em maisculas ("ARCHISTATION") string strB=strUpperCase(strA);

Definindo e manipulando pontos no espao tridimensional | 20

CAPTULO 3

Definindo e manipulando pontos no espao tridimensional


A classe point
A classe point utilizada pelo ArchiStation para criar e manipular pontos no espao tridimensional. Definida com as propriedades x, y, e z para armazenar os valores de coordenadas no plano cartesiano, e a propriedade alt, utilizada de modo particular pelo ArchiStation para associar um valor relativo a altura de cada ponto. Seus mtodos permitem copiar, mover, girar, espelhar e alterar a escala de suas coordenadas. Definio: class point { // Variveis double x; double y; double z; double alt; //Mtodos void Copy(point@ p); void Move(double X, double Y, double Z); void Scale(point@ base, double EscX, double EscY, double EscZ); void Rotate(point@ base, double ngulo); void Rotate3D(point@ l1, point@ l2, double ngulo); void Mirror(point@ l1, point@ l2); }

Descrio dos mtodos


void point.Copy(point@ p); Torna os valores iguais ao ponto p. void point.Move(double X, double Y, double Z); Move o ponto as distncias especificadas para cada eixo. void point.Scale(point@ base, double EscX, double EscY, double EscZ); Escala o ponto em relao ao ponto base os fatores especificados para cada eixo. void point.Rotate(point@ base, double ngulo); Gira o ponto em torno do eixo Z, a partir do ponto base o ngulo especificado. void point.Rotate3D(point@ l1, point@ l2, double ngulo); Gira o ponto em torno do eixo definido pelos pontos l1 e l2 o ngulo especificado.

Definindo e manipulando pontos no espao tridimensional | 21

void point.Mirror(point@ l1, point@ l2); Espelha o ponto em relao a reta que passa por l1 e l2. Exemplo de como declarar um objeto point e atribuir valores as suas coordenadas:

//Declara o identificador p1 como objeto point point p1; //Atribui valores as coordenadas x, y, z, e alt. p1.x=10; p2.y=20; p3.z=0; p4.alt=270;

Voc tambm poder declarar um objeto point e atribuir valores na mesma instruo adicionando as coordenadas desejadas entre parnteses, separadas por vrgula. Os valores para as coordenas Z e alt podem ser omitidos, neste caso considerados iguais a 0.

//Declara o ponto p1 e atribui valores para x e y point p1(10,20); //Declara o ponto p2 e atribui valores para x, y e z point p2(10,20,30); //Declara o ponto p3 e atribui valores para x e y, z e alt point p3(10,20,30,270);

Exemplos de utilizao dos mtodos da classe point para manipulao das coordenadas de posio no espao:

//Copia os valores das coordenadas (x,y,z e alt) do ponto p2 para o ponto p1 p1.Copy(p2); //Move o ponto p1 a distncia indicada em cada um dos eixos X, Y e Z p1.Move(10,20,30);

Quando necessrio, os pontos podem ser definidos sem que seja necessrio declarar um identificador, apenas indicando point e os valores das coordenadas especificadas entre parnteses separadas por vrgula. Exemplo:

//Gira o ponto p1 45 graus em torno do eixo definido na posio 50,50 p1.Rotate( point(50,50), 45);

Funes para Desenhar | 22

CAPTULO 4

Funes para Desenhar


Neste captulo sero apresentados os comandos que podem ser utilizados para adicionar novos objetos as desenho na rea de edio do ArchiStation.

Criando um linha
Para desenhar uma linha entre dois pontos, utilizamos a funo Line(). void Line(point@ p1, point@ p2); A linha ser desenhada na camada e espessura correntes, conforme especificado na barra de formatao. A altura da linha ser definida pelo valor alt dos pontos indicados. Exemplo: Cria uma linha entre os pontos p1 e p2.
Line (p1, p2);

Os pontos, objetos da classe point , podem ser definidos dentro dos parmetros da funo, sem que seja necessrio declarar identificadores: Exemplo: Cria uma linha entre coodenadas (0, 0, 0) e as coordenadas (100, 100, 0).
Line ( point(0, 0, 0) , point(100, 100) );

Na definio dos pontos tambm podemos utilizar variveis, expresses matemticas, coordenadas de pontos existentes e at aproveitar o valor retornado por chamadas a outras funes:
Line ( point(p1.x, p1.y, z) , point(p2.x+100, p2.y+50 , CalculaZ(p2.z) ) );

Outras funes
void Circle(point@ Centro, double Raio); Desenha um crculo com centro e raio indicados. void Arc(point@ Centro, double Raio, double nguloInicial, double nguloFinal); Desenha um arco definido por centro, raio, ngulos inicial e final. void Ellipse(point@ Centro, double RaioX, double RaioY, double nguloInicial, double nguloFinal, double nguloRotacao); Cria uma elipse definida por Centro, Raios no eixo X e Y, ngulos inicial, final e de rotao. void Face(point@ p1, point@ p2, point@ p3, point@ p4); Desenha uma face definida pelos quatro pontos indicados.

Funes para Desenhar | 23

void Face(point@ p1, point@ p2, point@ p3, point@ p4, bool edge1, bool edge2, bool edge3, bool edge4); Desenha uma face definida pelos quatro pontos indicados, sendo que as variveis edge definem quais das arestas sero visveis ou invisveis. bool Face(point@ p1, point@ p2, point@ p3, point@ p4, bool edge1, bool edge2, bool edge3, bool edge4, double u1, double v1, double u2, double v2, double u3, double v3, double u4, double v4); Desenha uma face definida pelos quatro pontos indicados, sendo que as variveis edge definem quais das arestas sero visveis ou invisveis, e associa as coordenadas de mapeamento uv de textura u1, v1, u2, v2, u3, v3, u4 e v4 para cada um dos pontos. As coordenadas de mapeamento padro so (0,0), (0,1), (1,1) e (1,0). void Text(point@ Posicao, string Texto, double Tamanho, double Rotacao); Desenha um texto na posio, tamanho e rotao indicados.

Alterando as propriedades de desenho


Camadas
Para adicionar um nova camada ao desenho utilize a funo AddLayer(). void AddLayer(string Nome, int Cor, string LType); Cria uma camada com nome, cor e estilo de trao especificados. LType o estilo de trao. void AddLayer(string Nome, int Cor, string LType, string Material); Cria uma camada com nome, cor, estilo de trao e material especificados (ASX 2.0). Se o material especificado no for encontrado no desenho principal, ser procurado no script ASX e adicionado ao desenho se encontrado. Para tornar corrente uma camada use a funo SetLayer(). bool SetLayer(string Nome); Se a camada no existir ou no for possvel a tornar corrente, a funo retorna false. Exemplo: Torna corrente a camada "Cerca", se ela no existir, adiciona a nova camada.
if(!SetLayer("Cerca")) { // Cria a camada "Cerca" na cor Verde AddLayer("Cerca", RGB(0,255,0) ,""); SetLayer("Cerca"); }

Ajustando a espessura e a altura


Para especificar a espessura e altura correntes utilizamos as funes SetWidth() e SetHeight(): bool SetWidth(double Espessura); Torna corrente a espessura indicada.

Funes para Desenhar | 24

bool SetHeight(double Altura); Torna corrente a altura indicada.

Exemplo:
// Ajusta a espessura corrente para 10 unidades SetWidth(15); // Ajusta a altura corrente para 60 unidades SetHeight(60);

Desenhando objetos com algoritmos e expresses matemticas


Voc poder utilizar scripts que combinam algoritmos, expresses matemticas e funes de desenho para criar objetos mais complexos. 1 Exemplo - Grade Podemos utilizar o comando de repetio for() e a funo Line() para criar uma grade.

void main() { //Cria as linhas no sentido do eixo Y for(int x=0; x<=1000; x=x+50) Line( point( x, 0), point(x,1000) ); //Cria as linhas no sentido do eixo X for(int y=0; y<=1000; y=y+50) Line( point( 0, y), point(1000,y) ); }

Grade de linhas 1000 x 1000 unidades com espaamento 50 unidades criada pelo exemplo acima. 2 Exemplo - Relgio Voc poder utilizar a funo Circle() para desenhar o contorno do relgio.

Funes para Desenhar | 25

Circle( point(0,0), 100 );

Mas para desenhar os marcadores das horas? Funes matemticas podem ser empregadas para realizar estes clculos. Uma volta completa em um crculo tem 360 graus, ou 2 x em radianos. No relgio, os nmero esto posicionados a cada 30 graus, ou /6 radianos. Vamos criar uma comando for() para fazer a varivel angulo percorrer os valores de 0 a 360 graus, saltando 30 graus por vez.

for(int angulo=0; angulo<360; angulo=angulo+30)

Para cada valor de angulo utilizamos a funo radians() para converter de graus para radianos e utilizamos as funes de trigonometria sin() e cos() para calcular o valor de "seno" e "cosseno" do angulo, utilizados para se calcular a posio de x e y de cada hora.
double x= cos( radians(angulo) ); double y= sin( radians(angulo) );

Por fim, multiplicamos os valores de obtidos de x e y pelo raio do crculo que desejamos e criamos as linhas de marcao das horas com a funo Line().
Line( point(x*80, y*80), point(x*100, y*100));

Cdigo completo do exemplo:


void main() { Circle( point(0,0), 100); for(int angulo=0; angulo<360; angulo=angulo+30) { double x=cos( radians(angulo) ); double y=sin( radians(angulo) ); Line( point(x*80, y*80), point(x*100, y*100)); } }

Relgio desenhado com operaes matemticas seno e cosseno. Observao: Divises por zero interrompem a execuo do script. Antes de realizar uma diviso, procure sempre verificar se o denominador diferente de 0.

Obtendo dados do usurio | 26

CAPTULO 5

Obtendo dados do usurio


Neste captulo sero descritos os comandos que permitem interagir com o usurio, obtendo dados como pontos, distncias, valores numricos ou cadeias de caracteres (strings).

Fazendo com que o usurio indique um ponto


Uma das principais funes de entrada de dados a GetPoint(), que interrompe a execuo do script e aguarda at que o usurio especifique ponto na tela ou digite suas coordenadas no Quadro de comando. O ponto ento armazenado em um objeto do tipo point indicado. bool GetPoint(point@ in); Exemplo: O script pede ao usurio que indique um ponto e cria um crculo com raio de 25 unidades no local indicado.
void main() { // Declara p1 como objeto point point p1; // Escreve a mensagem no Quadro de comando Prompt("Especifique um ponto:"); // Solicita que o usurio entre com um ponto e armazena em p1 GetPoint(p1); // Cria um crculo com centro em p1 e raio 25 Circle(p1,25); }

Outra variao da funo GetPoint() permite que o usurio especifique um ponto mantendo o cursor do mouse ancorado a um ponto especificado.

Cursor do mouse

Ponto ncora

bool GetPoint(point@ in, point@ ancora);

Obtendo dados do usurio | 27

Exemplo:
void main() { // Declara p1 e p2 como objetos point point p1,p2; Prompt("Especifique o primeiro ponto:"); // Solicita o ponto p1 GetPoint(p1); Prompt("Especifique o segundo ponto:"); // Solicita o ponto p2, mantendo o cursor ancorado a p1 GetPoint(p2,p1); // Cria um crculo com centro em p1 // e raio definido pela distncia a entre p1 e p2 Circle(p1, Distance(p1,p2) ); }

No exemplo foi utilizada a funo Distance() para calcular a distncia entre dois pontos indicados e determinar o raio para criar o crculo.

Obtendo nmeros inteiros


A funo GetInt() interrompe a execuo do script at que o usurio entre com um nmero inteiro atravs do Quadro de comando. Se a entrada digitada pelo usurio for incorreta, a mensagem *Entrada descartada* ser exibida e o sistema torna a aguardar at que um valor satisfatrio seja digitado. void GetInt(int &in); Solicita a entrada de um nmero inteiro. Exemplo:
// Declara uma varivel numrica inteira do tipo int int i; // Escreve a mensagem e solicita ao usurio a entrada de um valor inteiro Prompt("Entre com um nmero inteiro:"); GetInt(i);

Obtendo nmeros reais


A funo GetReal() semelhante a GetInt(), mas obtm valores reais. void GetReal(double &in); Solicita a entrada de um nmero real. Exemplo:
//Declara uma varivel numrica de preciso double double N; // Escreve a mensagem e solicita ao usurio a entrada de um valor real Prompt("Entre com um nmero real:"); GetReal(N);

Obtendo dados do usurio | 28

Obtendo cadeias de caractres


A funo GetString() pode ser utilizada para obter uma cadeia de caracteres do usurio. bool GetString(string &in); Solicita a entrada de uma cadeia de caracteres. Exemplo:
//Declara uma varivel string string S; // Escreve a mensagem e solicita ao usurio a entrada de uma string Prompt("Entre com uma cadeia de caracteres:"); GetSrting(S); // Mostra o que o usurio digitou Prompt("Vo digitou: "+S);

Outras funes de entrada de dados


bool GetCorner(point@ in, point@ p1); Solicita a entrada de um ponto usando como referncia a rea retangular criada a partir do ponto p1. void GetDist(double &in); Solicita a entrada de uma distncia. Se o usurio indicar um ponto no desenho, ser solicitada a entrada de mais um ponto e retornada a distncia entre os dois. void GetDist(double &in, point@ p1); Solicita a entra de uma distncia. Se o usurio indicar um ponto no desenho, ser retornada a distncia deste ponto ao ponto p1. void GetAngle(double &in); Solicita a entrada de um valor angular. Se o usurio indicar um ponto no desenho, ser solicitada a entrada de mais um ponto e retornado o ngulo do segmento formado com os dois pontos. void GetAngle(double &in, point@ p1); Solicita a entrada de um valor angular. Se o usurio indicar um ponto no desenho, ser retornado o ngulo do segmento formado com o ponto indicado e o ponto p1.

Componentes ASX | 29

CAPTULO 6

Componentes ASX
A criao de Componentes ASX uma das mais interessantes e produtivas formas de se utilizar a tecnologia ASX. So componentes inteligentes, desenhados a partir de scripts, que podem mudar de forma de acordo com os ajustes em suas propriedades. A imagem capa deste tutorial teve o emprego amplo destes componentes:

Guarda-corpo

Painel #1

Escada rolante

Componentes ASX | 30

Agora que voc j sabe um pouco sobre a linguagem de programao, algumas funes para desenhar e como obter dados do usurio, esta pronto para criar seu primeiro Componente ASX.

Criando um Componente ASX


1. No Quadro Lateral <F11> selecione a guia Componentes.

2.

Clique sobre o cone Criar um novo componente

3.

Na caixa de dialogo selecione a opo ASX - Baseado em Script.

4.

A caixa de dialogo seguinte conter opes de modelos de script que podem ser utilizados como base para seu componente. Para este exemplo optamos por selecionar a opo Baseado em dois pontos editveis.

Componentes ASX | 31

Editor ASX O modelo escolhido cria automaticamente nas propriedades do componente os pontos p1 e p2 que podem ser acessados pelo script, e declara duas funes essenciais para o funcionamento do componente. A funo Insert(), chamada para administrar a coleta de informaes do usurio ao inserir o componente no desenho, e a funo Create(), chamada pelo sistema quando for necessrio criar ou recriar a sua geometria. 5. Altere o nome do componente modificando na caixa Nome do componente o texto de "ASX-1" para "Linha ASX". Edite a funo Create() para adicionar as instrues mostradas no quadro a seguir:

6.

void Create() { Line(p1, p2); }

7.

Pressione o boto Fechar para encerrar a edio do script.

Pronto! Voc criou seu primeiro componente ASX. Ele desenha apenas uma linha entre os dois pontos indicados pelo usurio. Mas j um bom comeo. Para inserir-lo selecione o componente Linha ASX no gerenciador de componentes do Quadro Lateral e arraste para a tela de edio. Ao inserir o componente no desenho a funo Insert() chamada. Repare que as frases que aparecem no Quadro de comando enquanto indica os pontos de insero do componente so as das instrues Prompt() declaradas no cdigo da funo Insert(). Voc poder modificar as instrues desta funo para coletar os dados de acordo com as propriedades que seu componente necessitar.

Componentes ASX | 32

Logo depois que indicar os dois pontos a funo termina, e ento a funo Create() chamada para criar a geometria do componente, que simplesmente usa a instruo Line() para desenhar a linha entre os pontos p1 e p2 declarados nas propriedades do componente como objetos da classe point.

Editando as propriedades
As propriedades dos componentes declaradas como point so administradas pelo ArchiStation como pontos editveis pelo usurio, ou seja, ao selecionar o componente os pontos sero realados e, ao clicar sobre um deles, poder indicar visualmente uma nova posio no desenho para mover o ponto ou teclar <ESC> para cancelar o movimento.

Componente "Linha ASX" inserido no desenho e selecionado, pontos editveis realados em azul. Ao selecionar individualmente o componente e pressionar tecla <F11> para exibir o Inspetor de objetos, as propriedades do componente sero relacionadas associadas aos seus respectivos valores. Qualquer alterao nos valores far com que a funo Create() seja chamada novamente para recriar a geometria do componente. Nestes casos, o ArchiStation armazena e gerencia os dados para possibilitar as operaes Desfazer... e Refazer... caso o usurio deseje desfazer a alterao nos valores das propriedades.

Observe que particularmente no ArchiStation, cada ponto possui as coordenadas x, y, z e ainda a coordenada de altura alt. Alterando a propriedade alt do ponto para um valor diferente de 0, a linha passa a ser desenhada com altura atribuda, e os pontos editveis de altura (tringulos em azul), tambm sero realados. A edio destes pontos altera apenas a propriedade de altura alt do ponto para o valor que ajuste ao nvel indicado, sem afetar x, y, ou z, ou seja, o ponto permanece fixo na posio.

Componentes ASX | 33

Adicionando novas propriedades


Para adicionar ou remover propriedades de um componente ASX, ou mesmo editar os nomes desta propriedades, no poder haver nenhuma instncia dele inserida no desenho. Ento selecione e pressione a tecla <Delete> para apagar qualquer componente do tipo "Linha ASX" que criamos anteriormente que esteja inserido no desenho. Agora, no gerenciador de componentes do Quadro lateral, selecione o componente "Linha ASX" e pressione o boto Propriedades do componente para acessar novamente o Editor ASX.

No quadro a esquerda do Editor voc ver a guia Propriedades, e logo abaixo a relao das propriedades declaradas no Editor ASX para o componente. A primeira coluna mostra o tipo da propriedade, a segunda coluna mostra seu identificador, ou seja, o nome que associa a propriedade ao cdigo do script. Se o quadro de seleo na ltima coluna estiver marcado, indica que a propriedade visvel e pode ser editada pelo usurio atravs do Inspetor de objetos.

Pressione o primeiro boto Criar uma nova propriedade para adicionar uma propriedade ao componente. A nova propriedade dever aparecer no final da lista. Selecione a propriedade recm criada. Uma caixa deve ser mostrada sobre o tipo de propriedade. Clique sobre a caixa e selecione o tipo double. Clique agora sobre o identificador da propriedade, na coluna central. Com o texto em edio, altere para Espessura.

Pronto! Declaramos uma nova propriedade chamada Espessura. Vamos agora fazer uso dela no cdigo. Para inicializar a propriedade quando o componente for inserido no desenho, adicione a seguinte linha no final da funo Insert():
Espessura=15;

Agora, na funo Create(), adicione a instruo SetWidth() para ajustar a espessura de desenho:
SetWidth( Espessura);

Componentes ASX | 34

O cdigo todo deve ficar assim:


void Insert() { Prompt("Entre com o primeiro ponto:"); GetPoint(p1); Prompt("Entre com o segundo ponto:"); GetPoint(p2,p1); //Inicializa a propriedade espessura Espessura=15; } void Create() { //Ajusta a espessura SetWidth( Espessura); //Desenha a linha Line(p1, p2); }

Agora, ao inserir o componente no desenho, a Linha ASX ser desenhada com 15 unidades de espessura, valor com que a propriedade Espessura foi inicializada. Ao selecionar o componente e acessar o Inspetor de objetos <F11> a propriedade Espessura que acabamos de criar estar disponvel para a edio do usurio. Qualquer ajuste no valor desta propriedade ser correspondido prontamente no desenho do componente.

Controlando os valores das propriedades


No exemplo, a propriedade Espessura foi inicializada com o valor de 15 unidades e pode assumir posteriormente qualquer valor que o usurio venha a especificar. Para impor limites aos valores que uma propriedade pode atingir voc poder adicionar restries no cdigo do script. Por exemplo, supondo que desejamos criar um componente que permita o valor mximo para Espessura de 50 unidades, ento, colocamos uma linha para verificar e ajustar seu valor antes que seja utilizada pelo script, ou seja, antes da instruo SetWidth():

// Se a Espessura for maior que 50, ajusta para 50 if( Espessura>50 ) Espessura=50;

Assim, se o usurio tentar ajustar a Espessura para um valor superior a 50, ela assumir o valor 50 antes que o componente seja totalmente recriado.

Organizando a disposio das propriedades


Alguns componentes podem possuir muitas propriedades de diferentes tipos, e cabe ao desenvolvedor organizar as informaes para torn-las claras ao usurio dos componentes. A primeira coisa que pode ser feita a ordenao da lista. A ordem que as propriedades so mostradas no Editor ASX ser a mesma visualizada posteriormente no Inspetor de objetos quando o componente for selecionado. Voc poder alterar esta ordem selecionando a propriedade e clicando sobre o boto posio na ordem ou para descer uma posio na ordem. para ascender uma

Componentes ASX | 35

Outra forma de manter os dados organizados criando grupos de propriedades separadas por categorias. Para isso, voc deve adicionar propriedades do tipo separator. Este tipo de propriedade no pode ser acessada pelo cdigo, mas surge como uma guia visvel no Inspetor de objetos quando o componente selecionado agrupando todas as propriedades includas na seqncia da lista, at um novo separator ou o fim da lista.

separator "Geometria"

Por fim, se uma propriedade no mais necessria, selecione e clique em propriedade do componente.

para excluir a

Descrio e nomes com acento no Inspetor de objetos


Como em C/C++ no so permitidos acentos nos nomes de identificadores, se voc desejar que nomes com acentos, espaos ou outros caracteres especiais sejam mostrados na indicao da propriedade no Inspetor de objetos, voc dever utilizar a descrio da propriedade. No Editor ASX, clique sobre o identificador da propriedade com o boto direito do mouse e adicione a descrio desejada para a propriedade. Esse nome, quando preenchido, substitura o identificador da propriedade nos controles visveis ao usurio.

Caixa de dialogo para edio da descrio.

Componentes ASX | 36

Outros tipos de propriedades


A tabela a seguir mostra os 11 tipos possveis de propriedades:
Tipo bool int double string point separator information Descrio

intList doubleList stringList pointList

Valor booleano, pode ser true ou false. No Inspetor aparecem como Sim ou No. Valor numrico inteiro. Valor numrico de preciso double. Cadeia de caracteres. Ponto com coordenadas x, y, z e alt. Se for visvel, passa a ser selecionvel. Utilizado apenas para separar os dados quando relacionados no Inspetor de objetos. uma cadeia de caracteres acessvel da mesma forma que o tipo string, mas o usurio no consegue alterar seu valor atravs do Inspetor de objetos. Serve apenas para informar o usurio sobre alguma circunstncia do componente. Lista de nmeros inteiros. O funcionamento das listas ser explicado adiante. Lista de valores de preciso double. Lista de valores strings. Lista de pontos.

Exemplos de componentes
Agora que voc j aprendeu sobre o funcionamento dos Componentes ASX, e j sabe criar e controlar suas propriedades, esta pronto para criar os mais variados tipos de componentes que podero agilizar suas tarefas e aprimorar seus projetos. Inclumos aqui cdigos de componentes e algumas explicaes que podero servir de base para o desenvolvimento de seus prprios componentes.

Cerca - funo PointAt();


Tabela de propriedades: Tipo Identificador point p1 point p2

void Insert() { Prompt("Entre com o primeiro ponto:"); GetPoint(p1); Prompt("Entre com o segundo ponto:"); GetPoint(p2,p1); //Ajusta a altura da cerca p1.alt=150; p2.alt=150; } void Create() { //Variveis double Tabua=10, Espaco=3; //Ajusta a espessura da cerca SetWidth(3);

Componentes ASX | 37

//Calcula a distncia entre p1 e p2 double Distancia=Distance(p1,p2); //Declara os pontos que sero usados no clculo point ini,fim; //Percorre a distncia entre p1 e p2 colocando as tbuas for(double Posicao=0; Posicao<Distancia-Tabua; Posicao+=(Tabua+Espaco) ) { // Calcula os pontos de incio e fim da tbua PointAt(ini, p1, p2, Posicao); PointAt(fim, p1, p2, Posicao+Tabua); //Desenha a tbua Line( ini, fim); } }

A funo PointAt() uma das instrues mais importantes deste cdigo, e uma das mais utilizadas no desenvolvimento de Componentes ASX. Sua definio : void PointAt(point@ p, point@ p1 , point@ p2, double Distancia); Ela atualiza o ponto p para a posio a contada a partir de p1, percorrida a distncia indicada em direo a p2. Considerando no calculo, inclusive, as diferenas na cota Z e as variaes da altura alt dos pontos. Neste caso, utilizamos a funo PointAt() para calcularmos o ponto de inicio de cada tbua, usando como distncia de referncia a Posio, e tambm o ponto onde cada tbua termina, usando como distncia a Posio + Largura da Tbua. A cada tbua desenhada, incrementamos a Posio com a Largura da Tbua e o Espao entre elas.

Cerca com 150 unidades de altura em p1 e p2

Cerca com alturas diferentes em cada ponto

Como a funo PointAt() considera at diferenas de altura entre os pontos em seu calculo, voc poder ajustar alturas diferentes para cada ponto do componente inserido atravs das propriedades no Inspetor de objetos e observar os resultados. Dica: Voc pode aprimorar este componente removendo a declarao das variveis Tabua e Espaco, e adicionando-as como propriedades de tipo double, editveis pelo usurio. No esquea de inicializar seus valores na funo Insert();.

Componentes ASX | 38

Escada
Tabela de propriedades: Tipo Identificador point p1 point p2 double Degrau_Altura double Degrau_Largura

void Insert() { Prompt("Entre com o primeiro ponto:"); GetPoint(p1); Prompt("Entre com o segundo ponto:"); GetPoint(p2,p1); //Inicializa as propriedades Degrau_Altura=16; Degrau_Largura=31; } void Create() { //Ajusta p2 para o mesmo nvel de p1 p2.z=p1.z; //Calcula a distncia entre p1 e p2 double Distancia=Distance(p1,p2); //Largura da escada SetWidth(120); point ini,fim; //Altura inicial double Z=Degrau_Altura; //Percorre a distncia entre p1 e p2 desenhando os degraus for(double Posicao=0; Posicao<Distancia; Posicao=Posicao+Degrau_Largura) { //Calcula os pontos de incio e fim do degrau PointAt(ini, p1, p2, Posicao); PointAt(fim, p1, p2, Posicao+Degrau_Largura); //Desenha o degrau Line( point(ini.x, ini.y, p1.z+Z-5, 5), point(fim.x, fim.y, p1.z+Z-5, 5)); //Incremento da altura Z=Z+Degrau_Altura; } }

Neste exemplo, devemos criar alm das propriedades point p1 e p2, as propriedades do tipo double Degrau_Largura e Degrau_Altura. O nmero de degraus ser obtido em funo da distncia entre p1 e p2.

Componentes ASX | 39

Para desenhar os degraus da escada seguido o mesmo princpio utilizado para desenhar as tbuas da cerca no exemplo anterior, utilizando a funo PointAt() e uma posio de referncia para cada degrau. A diferena basicamente o desenho do degrau utilizando coordenadas definidas por point para especificar a coordenada Z com o mesmo valor, e a altura fixa de 5 unidades para o elemento do degrau.

Espiral - senos e cossenos


Tabela de propriedades: Tipo Identificador point p1 point p2

void Insert() { Prompt("Entre com o primeiro ponto:"); GetPoint(p1); Prompt("Entre com o segundo ponto:"); GetPoint(p2,p1); } void Create() { //Calcula a distncia entre p1 e p2, sem considerar as coordenadas Z double Distancia=Distance( point(p1.x,p1.y), point(p2.x,p2.y) ); //Inicializa o Raio em 0 double Raio=0; //Calcula o acrscimo que dever ser somado ao raio //para 4 voltas (cada volta tem 360 graus) double Acrescimo=Distancia/(360*4); //Obtm o angulo de sada (em radianos) double Angulo=Angle(p1,p2); point ini,fim; //Percorre as quatro voltas de ngulo em ngulo for(double a=0; a<=360*4; a++) { //Calcula a posio com as funes seno e cosseno fim.x=cos( radians(a)+Angulo )*Raio+p1.x; fim.y=sin( radians(a)+Angulo )*Raio+p1.y; //Se j possui os valores ini e fim desenha a linha if(a>0) Line(ini,fim); //Copia as coordenadas do ponto fim no ponto ini ini.Copy(fim); //Soma o acrscimo para aumentar o raio a cada ngulo Raio=Raio+Acrescimo; } }

Componentes ASX | 40

Este componente desenha uma espiral, com centro em p1, com 4 voltas terminando exatamente sobre p2. Primeiramente calculada a distncia entre p1 e p2 para obter o raio final da espiral. O valor inicial do Raio 0 e ser incrementado a cada ngulo pelo valor de Acrescimo. O ngulo inicial, entre os pontos p1 e p2, obtido com a funo Angle(), que retorna o valor em radianos. Este ngulo vai nos permitir chegar ao ponto final da espiral exatamente sobre o ponto p2. A funo for() inicia o loop que far o valor de a passar de 0 at 360 x 4, ou 1440, o total angular para 4 voltas completas. As funes de trigonometria de seno e cosseno so ento aplicadas para se obter a posio de cada ponto da espiral. Na realidade, se removssemos do cdigo a soma do acrscimo e especificssemos um valor para o Raio constante, obteramos um crculo perfeito. Lembrando que nesse caso, seria necessrio apenas uma volta, ou 360 graus.

Integrando novos comandos a interface do ArchiStation | 41

CAPTULO 7

Integrando novos comandos a interface do ArchiStation


Depois de criar cdigo para novos comandos, com certeza voc desejar criar atalhos para acesslos com mais rapidez, como botes em barras de ferramentas ou um itens no menu principal do ArchiStation. Este captulo descreve as funes que permitem a incorporao de recursos customizveis a interface do programa.

Barra de ferramentas
Exemplo de barra de ferramentas Para criar uma nova barra de ferramentas chamamos a funo CreateToolbar() que retornar um objetos da classe Toolbar. Toolbar CreateToolbar(string Ttulo); Exemplo: O cdigo declara o objeto tb como Toolbar e cria uma nova barra de ferramentas com o ttulo "Meus comandos".
Toolbar tb=CreateToolbar("Meus comandos");

Adicionando botes a barra de ferramentas (Toolbar)


Para adicionar controles a uma barra de ferramentas, utilizamos a funo ToolBar.AddButton(). Toolbar. AddButton(string Ttulo, string Imagem, string Comando, string Descrio); Toolbar. AddButton(string Ttulo, int Imagem, string Comando, string Descrio); Adiciona um boto a barra de ferramentas (Toolbar).

Integrando novos comandos a interface do ArchiStation | 42

Ttulo Imagem

Nome associado ao boto Se for uma string, deve referir-se ao arquivo ao local onde est a imagem a ser aplicada ao cone do boto. Se for um inteiro (int) refere-se ao nmero da imagem na lista de imagens do container ASX. A imagem poder ser de qualquer tamanho, mas para manter o padro da interface recomendamos que utilize preferencialmente imagens no tamanho 16 x 16.

Comando

Comando que deve ser chamado ao se clicar o boto. O comando pode ser: Um comando do ArchiStation, exemplo: "_linha" Chamada a uma funo definida no prprio script. O nome da funo deve ser precedido por um duplo sinal de dois pontos ("::"). Exemplo: "::funcao()" Chamada a uma funo de outro script localizado na pasta "/Plugins" da instalao do ArchiStation. Neste caso deve ser indicado o nome do arquivo, o sinal "::" seguidos pela funo. Exemplo: "arquivo::funcao()"

Observao: As funes chamadas devem ser definidas como "void". Exemplo:


void Comprimentar() { Prompt("Ola!"); }

Descrio

Dica que aparece quando o usurio mantm o cursor do mouse sobre o boto por alguns instantes.

Exemplos:
//Declara o objeto tb e cria uma Toolbar com o ttulo "Nova Toolbar" Toolbar tb=CreateToolbar("Nova Toolbar"); //Adiciona um boto com a imagem obtida a partir de arquivo tb.AddButton("Linha","copiar.bmp","_linha","Desenha uma linha"); //Boto com a imagem obtida na lista do container ASX tb.AddButton("Retangulo",0,"_retangulo","Desenha um retngulo"); //Boto que chama a funo "novocomando()" definida dentro do script tb.AddButton("Novo Comando",0,"::novocomando()","Chama o novo comando");

Integrando novos comandos a interface do ArchiStation | 43

Adicionando itens ao menu principal


Voc poder adicionar novos menus e sub-menus itens ao menu Plugins do ArchiStation. Para isso utilizamos uma classe pr-definida pelo ArchiStation denominada MenuItem. Para criar um item no menu Plugins utilize a funo CreateMenuItem(), que adicionar um item ao menu PlugIns do ArchiStation e retornar um objeto da classe MenuItem, que poder ser utilizado para a criao de sub-itens ou sub-menus. MenuItem CreateMenuItem(string Ttulo, string Comando); O parmetro Comando deve seguir o mesmo preceito descrito para o comando ToolBar.AddButton(). Se voc deseja criar sub-itens ou sub-menus a partir deste menu, especifique o parmetro Comando apenas com os sinais de abre e fecha aspas ("") . Exemplo:
//Declara o objeto menu e cria um novo item em PlugIns MenuItem menu = CreateMenuItem("Novo Menu","");

Agora, para criar um sub-item no menu utilize o mtodo MenuItem.AddSubMenuItem(). Esta funo deve retornar um novo objeto da classe MenuItem, de modo que possa utiliz-lo para criar mais um sub-nvel de menus ou itens. MenuItem MenuItem.AddSubMenuItem (string Ttulo, string Comando); Exemplo:
//Adiciona um item ao menu menu.AddSubMenuItem("Cria uma linha","_linha"); //Declara o menu2 e cria um novo sub-menu ao menu MenuItem menu2 = menu.AddSubMenuItem("Novo Menu 2","");

Tratamento de arquivos de dados | 44

CAPTULO 8

Tratamento de arquivos de dados


Para ler ou escrever dados de um arquivo, os seguintes procedimentos devem ser realizados: Abrir o arquivo para leitura ou escrita; Ler ou escrever os dados; Fechar o arquivo.

Os objetos da classe file so responsveis pelo tratamento de arquivos de dados. Os mtodos associados a classe file so: int file.open(string filename, string mode); Abre um arquivo para leitura, escrita ou edio. Parmetros: filename: Nome do arquivo mode: "r" - Abre o arquivo em modo leitura; "w" - Abre o arquivo para escrita. Sobrescreve o arquivo existente se houver; "a" - Abre o arquivo para adicionar dados. int file.close(); Fecha o arquivo. int file.getSize(); Retorna o tamanho do arquivo em bytes. bool file.isEndOfFile(); Retorna true se o final do arquivo foi atingido.

Operaes de leitura do arquivo


int file.readString(uint length, string &str); L um nmero especfico de bytes para a string str. int file.readLine(string &str); L todo o contedo at a prxima linha de caracteres. int64 file.readInt(uint bytes); L um nmero inteiro com sinal com o tamanho especificado em bytes. uint64 file.readUInt(uint bytes); L um nmero inteiro sem sinal com o tamanho especificado em bytes. float file.readFloat(); L um nmero de preciso float. double file.readDouble(); L um nmero de preciso double.

Tratamento de arquivos de dados | 45

Operaes de escrita do arquivo


int file.writeString(string in); Escreve uma cadeia de caracteres string no arquivo. int file.writeInt(int64 v, uint bytes); Escreve um nmero inteiro com sinal com o tamanho especificado em bytes. int file.writeUInt(uint64 v, uint bytes); Escreve um nmero inteiro sem sinal com o tamanho especificado em bytes.. int file.writeFloat(float v); Escreve um nmero de preciso float no arquivo. int file.writeDouble(double v); Escreve um nmero de preciso double no arquivo.

Manipulao do cursor do arquivo


int file.getPos(); Retorna a posio do manipulador de leitura e escrita no arquivo. int file.setPos(int pos); Ajusta a posio do manipulador de leitura e escrita do arquivo. int file.movePos(int delta); Faz um deslocamento de delta bytes na posio do manipulador de leitura e escrita. Observao: As funes de tratamento de arquivos no esto disponveis na verso de demonstrao. Exemplo: Script bsico que faz a leitura do arquivo file.txt.
void main() { // Declara o objeto file file f; // Declara a string str string str; // Abre o arquivo em modo de leitura "r" if( f.open("file.txt", "r") >= 0 ) { // L todo arquivo para a string str f.readString(f.getSize(), str); // Fecha o arquivo f.close(); } }

Tratamento de arquivos de dados | 46

Para um exemplo prtico de acesso a arquivos de dados desenvolvemos um script que l o arquivo "dados.txt", disponvel na pasta Plugins da instalao do ArchiStation, que contm coordenadas de pontos que sero utilizadas para a criao de uma estrutura metlica tridimensional composta por linhas. As informaes do arquivo dados.txt esto organizadas no seguinte formato: Cada linha do texto contm informaes para criao de uma linha no desenho; As informaes esto organizadas em dois conjuntos de trs nmeros que representam as coordenadas dos pontos da linha, sendo x1, y1, z1 e x2, y2 e z2; x1 = comea na posio 0 e ocupa 10 dgitos (string inicia pelo caractere na posio 0); y1 = comea na posio 11 e ocupa 10 dgitos; z1 = comea na posio 22 e ocupa 10 dgitos; x2 = comea na posio 33 e ocupa 10 dgitos; y2 = comea na posio 44 e ocupa 10 dgitos; z2 = comea na posio 55 e ocupa 10 dgitos.

Arquivo dados.txt Arquivo IO.asx disponvel na pasta Plugins do ArchiStation:


void main() { //Solicita ao usurio para indicar um arquivo com extenso *.txt string Arquivo=GetFile("","","txt"); //Declara o objeto file file f; // Abre o arquivo em modo de leitura if( f.open(Arquivo, "r") >= 0 ) { //Declara as variveis que sero utilizadas string str; double x1,y1,z1,x2,y2,z2; //Inicia um loop infinito for(;;) {

Tratamento de arquivos de dados | 47

//Le uma linha do arquivo f.readLine(str); //Se o final do arquivo foi atingido encerra o loop if( f.isEndOfFile() )break; //Obtem os caracteres de cada coordenada com o mtodo substr(); //e converte em nmeros (double) com a funo atof(); x1=atof( str.substr(0,10) ); y1=atof( str.substr(11,10) ); z1=atof( str.substr(22,10) ); x2=atof( str.substr(33,10) ); y2=atof( str.substr(44,10) ); z2=atof( str.substr(55,10) ); //Cria a linha com os dados dos pontos obtidos do arquivo Line( point(x1,y1,z1), point(x2,y2,z2) ); } //Fecha o arquivo f.close(); } else { //Mensagem no caso de ocorrer erro na tentativa de abrir o arquivo Prompt("No foi possvel abrir o arquivo"); } }

Voc pode executar este script digitando IO e teclando <ENTER> no Quadro de comando do ArchiStation. A funo GetFile(), no incio do script, faz com que uma caixa de dialogo de seleo de arquivos aparea, indique o arquivo dados.txt e clique em Abrir. Os dados em formato de cadeias de caracteres so convertidos para valores numricos pela funo atof(), que converte strings em nmeros de preciso double. Logo aps o trmino da execuo do script, selecione o modo de Edio em Vista 3D estrutura metlica deve ser visualizada na tela. ea

Estrutura metlica obtida a partir da leitura do arquivo dados.txt

Obtendo dados de planilhas do MS Excel | 48

CAPTULO 9

Obtendo dados de planilhas do MS Excel


Utilizando a tecnologia OLE Automation o ArchiStation pode se conectar a planilhas do MS Excel e obter dados que podem ser utilizados para desenhar ou complementar informaes de componentes do desenho. Os procedimentos devem ser realizados nesta ordem: Abrir o arquivo do Excel; Selecionar a planilha que vai ser utilizada; Obter o valor das clulas desejadas; Fechar o arquivo do Excel; Para cada um dos procedimentos listados acima existe uma funo, descritas a seguir: bool ExcelOpenFile(string Arquivo); Abre um arquivo do Excel para manipulao. O MS Excel deve estar instalado no seu computador. Se o nome do arquivo no especificar a pasta, o ArchiStation procurar o arquivo na pasta Plugins. Retorna true se obteve xito, caso contrrio retorna false. bool ExcelSetSheet(string Sheet); Seleciona qual planilha do arquivo ser manipulada. Retorna true se obteve xito, caso contrrio retorna false. string ExcelGetItem(int Col, int Line); Retorna uma string com o valor do item na coluna e linha indicados. bool ExcelCloseFile(); Fecha o arquivo. Retorna true se obteve xito, caso contrrio retorna false.

Obtendo dados de planilhas do MS Excel | 49

Exemplo - Arquivo Excel.asx disponvel na pasta Plugins do ArchiStation:


void main() { //Solicita ao usurio para indicar um arquivo com extenso *.xls string Arquivo=GetFile("Localizar o arquivo 'dados.xls'",PluginsDir(),"xls"); //Abre o arquivo do Excel if(ExcelOpenFile(Arquivo)) { //Seleciona a planilha que ser manipulada if(ExcelSetSheet("Plan1")) { //Declara a string que vai receber o valor dos itens double x1,y1,z1,x2,y2,z2; //Pega os valores da linha 1 at a linha 177 for(int Linha=1; Linha<=177; Linha++) { //Obtm os caracteres de cada clula com a funo //string ExcelGetItem(int Coluna, int Linha); //e converte em nmeros (double) com a funo atof(); x1=atof( ExcelGetItem(1,Linha) ); y1=atof( ExcelGetItem(2,Linha) ); z1=atof( ExcelGetItem(3,Linha) ); x2=atof( ExcelGetItem(4,Linha) ); y2=atof( ExcelGetItem(5,Linha) ); z2=atof( ExcelGetItem(6,Linha) ); //Cria a linha com os dados dos pontos obtidos Line( point(x1,y1,z1), point(x2,y2,z2) ); } } else { MessageBox( "A planilha 'Plan1' no existe no arquivo.","","ArchiStation",5); } //Fecha o arquivo ExcelCloseFile(); } else { MessageBox("No foi possvel abrir o arquivo.","","ArchiStation",5); } }

Neste exemplo, ao executar o script a funo GetFile() exibe a caixa de dialogo de seleo de arquivo. Selecione o arquivos dados.xls e clique em Abrir. Este arquivo contm os mesmos valores do arquivo dados.txt do exemplo do captulo anterior, mas com os valores das coordenadas organizados da coluna 1 a coluna 6, e da linha 1 at a linha 177. A conexo com o Excel iniciada e o arquivo aberto com a funo ExcelOpenFile(). A planilha "Plan1" selecionada com a funo ExcelSetSheet(). As informaes das clulas so obtidas com a funo ExcelGetItem() e convertidas para nmeros de preciso double com a funo atof(). Os dados so ento utilizados para criar as linhas da estrutura at a linha 177. Por fim a funo ExcelCloseFile() chamada para fechar o arquivo e encerrar a conexo com o Excel. A funo MessageBox() exibir uma caixa de dialogo no caso de ocorrer algum problema na leitura do arquivo. Esta funo est descrita detalhadamente no Apndice A, no final deste documento.

Listas de armazenamento | 50

C A P T U L O 10

Listas de armazenamento
O ArchiStation permite criar quatro tipos de listas de itens para armazenamento de dados, so elas: intList - Lista de valores inteiros int; doubleList - Lista de valores reais de preciso double; stringList - Lista de Cadeias de caracteres do tipo string; pointList - Lista de objetos da classe point.

Para utilizar uma lista de armazenamento, o primeiro passo a declarao do tipo de lista e seu identificador:
//Declara uma lista para valores inteiros intList Lista;

Para adicionar itens na lista utilize o mtodo Add((tipo) Valor) ou o mtodo Insert(int ndice, (tipo) Valor). O ndice do primeiro item armazenado na lista ser 0, e ndice do ltimo item da lista ser o nmero total de itens da lista menos 1.
//Adiciona itens na lista Lista.Add(10); Lista.Add(30); //Insere o item de valor 20 na posio 1, no meio da lista Lista.Insert(1,20);

Para saber quantos itens esto armazenados na lista utilize o mtodo Count(), e para recuperar seus valores utilize o mtodo GetItem(int ndice).
//Percorre todos os valores da lista for(int a=0; a<Lista.Count(); a++) { //Mostra os valores da lista no Quadro de comando Prompt("O item na posio "+a+" igual a "+Lista.GetItem(a)+"."); }

Com a execuo deste script obter como resultado a seguinte mensagem no Quadro de comando:
O item na posio 0 igual a 10. O item na posio 1 igual a 20. O item na posio 2 igual a 30.

Observao: Os valores armazenados nas listas de componentes ASX inseridos no desenho declaradas atravs da interface do Editor ASX como propriedades do componente, sero salvos automaticamente no arquivo do projeto. Os valores da lista podem ser alterados com a funo SetItem():
Lista.SetItem(1,15);

Listas de armazenamento | 51

Definindo o item selecionado


Voc poder definir qual item da lista est selecionado atravs dos mtodos GetItemIndex() e SetItemIndex(). As listas podem aparecer como propriedades editveis no Inspetor de Objetos quanto o componente selecionado. O item selecionado ser mostrado em uma caixa de seleo. Caso o usurio clicar sobre a caixa, todos os itens da lista sero mostrados. Se o usurio escolher um item diferente, o valor do ItemIndex ser alterado. O ItemIndex ajustado para o valor -1 indica que nenhum item da lista est selecionado, e a caixa de seleo aparecer em branco.

Mtodos genricos associados s listas


void (tipo)List. Add((tipo)Item); Adiciona um item na lista. void (tipo)List. Insert(int index, (tipo)Item); Insere um item na lista na posio especificada. (tipo) (tipo)List. GetItem(int index); Retorna o valor de um item da lista. void (tipo)List. SetItem(int index, (tipo)Valor ); Define o valor de um item da lista. int (tipo)List.Count(); Retorna quantos itens a lista possui armazenados. void (tipo)List.Move(int ndiceAtual, int Novondice); Troca a posio de um item na lista. void (tipo)List.Delete(int index); Apaga um item da lista. void (tipo)List.Clear(); Apaga todos os itens da lista. int (tipo)List.GetItemIndex(); Retorna o ndice selecionado da lista. Se nenhum item estiver selecionado retorna -1. void (tipo)List.SetItemIndex(int index); Define o ndice selecionado da lista.

Mtodos especiais da classe stringList


void stringList.Sort (); Ordena alfabeticamente os itens da lista. int stringList.IndexOf(string Valor); Retorna o ndice do primeiro item da lista que possuir o valor especificado. Se o valor no for encontrado na lista, retorna -1.

Listas de armazenamento | 52

Exemplo:
void main() { //Declara uma lista de strings stringList Lista; //Adiciona alguns pontos na lista Lista.Add("Projetos"); Lista.Add("Tridimensionais"); Lista.Add("ArchiStation"); //Coloca os itens da lista em ordem alfabtica Lista.Sort(); //Mostra a posio do item "ArchiStation" Prompt("A posio de 'ArchiStation' na lista "+ Lista.IndexOf("ArchiStation")+"."); }

Este script cria uma lista de strings, adiciona alguns valores, chama a funo Sort() para ordenar os itens e usa a funo IndexOf() para retornar a nova posio do item "ArchiStation". Ao executar este cdigo, voc deve obter no Quadro de comando a seguinte mensagem:
A posio de 'ArchiStation' na lista 0.

Mtodos especiais da classe pointList


point& pointList.Item(int index); Retorna o objeto armazenado na posio indicada. Diferente da funo GetItem(), que retorna uma cpia do objeto armazenado, a funo Item() retorna o prprio objeto armazenado. Sendo que, qualquer alterao nos valores do objeto retornado por esta funo afetar diretamente os valores armazenados na lista, no sendo necessrio chamar SetItem() para esta funo. Exemplo:
void main() { //Declara a lista de pontos pointList ListadePontos; //Adiciona alguns pontos na lista ListadePontos.Add( point(10,10,0) ); ListadePontos.Add( point(20,20,0) ); ListadePontos.Add( point(30,30,0) ); //Percorre todos os itens da lista for(int a=0; a<ListadePontos.Count(); a++) { //Declara um ponteiro para um objeto da classe point //e aponta para o objeto da lista point @p=ListadePontos.Item(a); //Move o ponto p.Move(10,10,0); } }

Este script cria uma lista de pontos, adiciona alguns valores e movimenta todos os pontos da lista 10 unidades no eixo X e 10 unidades no eixo Y.

ASX 2.0 Adicionando materiais, blocos, perfis e hachuras | 53

C A P T U L O 11

ASX 2.0 Adicionando materiais, blocos, perfis e hachuras


Com o ASX 2.0, possvel adicionar colees de materiais, blocos, perfis e hachuras a um script ASX. Estes elementos podem ser utilizados no cdigo para adicionar novos elementos ao desenho.

Adicionando materiais
Para adicionar uma coleo de blocos ao script ASX 1. No quadro a direita do cdigo do scritpt a clique sobre a guia Blocos. 2. Clique como boto direito do mouse sobre o quadro. 3. No menu, selecione a opo Abrir blocos. 4. Selecione a pasta e o arquivo de blocos que deseja adicionar e pressione OK. Os materiais podem ser utilizados na criao de novas camadas.

Adicionando blocos

Editor ASX Inserindo uma coleo de blocos Para adicionar uma coleo de blocos ao script ASX 1. No quadro a direita do cdigo do script clique sobre a guia Blocos. 2. Clique com o boto direito do mouse sobre o quadro. 3. No menu, selecione a opo Abrir blocos. 4. Selecione a pasta e o arquivo de blocos que deseja adicionar e pressione OK.

ASX 2.0 Adicionando materiais, blocos, perfis e hachuras | 54

Funes para inserir blocos


bool Insert(string Nome, point@ Insero, double Rotao); Insere um bloco no desenho com a escala e rotao indicados. bool Insert(string Nome, point@ Insero, double Escala, double Rotao); Insere um bloco no desenho com a escala e rotao indicados. bool Insert(string Nome, point@ Insero, double EscX, , double EscY, double EscZ, double Rotao); Insere um bloco no desenho com escalas diferentes para cada um dos eixos axiais. bool Insert(string Nome, point@ Insero, double EscX, , double EscY, double EscZ, double Rotao, point@ VetorDeExtruso); Insere um bloco no desenho com escalas diferentes para cada um dos eixos axiais. Ao inserir um bloco no desenho com um dos comandos relacionados acima, caso a definio de bloco indicada pelo nome no existir no desenho, ela ser procurada na relao de blocos do script ASX e inserida no desenho. Se a definio de bloco indicada no for encontrada, o bloco no ser inserido e a funo retornar false.

Adicionando perfis
Para adicionar uma coleo de perfis ao script ASX 1. No quadro a direita do cdigo do script clique sobre a guia Perfis. 2. Clique com o boto direito do mouse sobre o quadro. 3. No menu, selecione a opo Abrir perfis. 4. Selecione a pasta e o arquivo de perfis que deseja adicionar e pressione OK.

Funes para criar perfis (Mudar para Shaped)


bool Perfilado(string Perfil, pointList@ ListaDePontos); Cria um perfilado com o perfil indicado atravs da lista de pontos. bool Perfilado(string Perfil, pointList@ ListaDePontos, double Escala); Cria um perfilado com o perfil indicado atravs da lista de pontos na escala indicada. bool Perfilado_Orto(string Perfil, pointList@ ListaDePontos); Cria um perfilado ortogonal com o perfil indicado atravs da lista de pontos. bool Perfilado_Orto (string Perfil, pointList@ ListaDePontos, double Escala); Cria um perfilado ortogonal com o perfil indicado atravs da lista de pontos na escala indicada.
Observao: Perfilados ortogonais sempre mantm o perfil de extruso 90 graus em relao ao cho, giram apenas pelo eixo Z, variando a direo nos eixos X e Y. Veja no Guia do usurio mais sobre os perfis ortogonais.

ASX 2.0 Adicionando materiais, blocos, perfis e hachuras | 55

Adicionando hachuras
Para adicionar uma coleo de hachuras ao script ASX 1. No quadro a direita do cdigo do script clique sobre a guia Hachuras. 2. Clique com o boto direito do mouse sobre o quadro. 3. No menu, selecione a opo Abrir hachuras. 4. Selecione a pasta e o arquivo de hachuras que deseja adicionar e pressione OK.

Funes para criar hachuras


bool Hatch(string Hachura, pointList@ ListaDePontos); Cria uma regio hachurada na regio definida pela lista de pontos. bool Hatch(string Hachura, pointList@ ListaDePontos, double Escala, double Rotao); Cria uma regio hachurada com a escala e rotao indicadas na regio definida pela lista de pontos.

ASX 2.0 Acessando dados do projeto | 56

C A P T U L O 12

ASX 2.0 Acessando dados do projeto


Todos os dados do projeto so organizados em elementos da classe TDrawing. Definio da classe TDrawing: class TDrawing { TList Objects; // Lista de objetos do projeto (Pavimento em edio) TList Layers; // Lista de camadas TList Materials; // Lista de materias TList Blocks; // Lista de definies de bloco } O projeto em edio fica armazenado no objeto Drawing e seus objetos so armazenados na lista Drawing.Objects em elementos da classe TObject. Definio da classe TObject: class TObject { //Retorna uma string com o nome da classe do objeto string ClassName(); //Mtodos para modificar objetos void Copy(point@ p); void Move(double X, double Y, double Z); void Scale(point@ base, double EscX, double EscY, double EscZ); void Rotate(point@ base, double ngulo); void Rotate3D(point@ l1, point@ l2, double ngulo); void Mirror(point@ l1, point@ l2); //Mtodos para acessar propriedades bool GetBoolean(string Propriedade); bool SetBoolean(string Propriedade, bool Valor); int GetInt(string Propriedade); bool SetInt(string Propriedade, int Valor); double GetDouble(string Propriedade); bool SetDouble(string Propriedade, double Valor); string GetString(string Propriedade); bool SetString(string Propriedade, string Valor); bool GetPoint(string Propriedade, point@ p); bool SetPoint(string Propriedade, point@ p); }

ASX 2.0 Acessando dados do projeto | 57

Segue um exemplo mostrando como pode ser feito o acesso a lista de objetos do projeto Drawing.Objects:

void main() { //Exibe quantos objetos existem no projeto Prompt("Existem "+Drawing.Objects.Count()+" objetos no desenho."); //Pega objeto por objeto for(int a=0; a<Drawing.Objects.Count(); a++) { //Pega o objeto da lista TObject @Object=Drawing.Objects.Items(a); //Exibe o tipo de objeto Prompt("O objeto "+a+" do tipo "+Object.ClassName()); } }

O mtodo ClassName() utilizado no cdigo retorna uma string com o tipo de objeto. Os tipos mais comuns de objetos so: LINE, CIRCLE, ARC, ELLIPSE, TEXT, INSERT, HATCH, SHAPED e ASX.

Mtodos para modificar objetos


void TObject.Move (double X, double Y, double Z); Move o objeto o valor indicado para cada eixo. void TObject.Scale(point@ base, double EscX, double EscY, double EscZ); Escala o objeto em relao ao ponto base com os fatores especificados para cada eixo. void TObject.Rotate(point@ base, double ngulo); Gira o objeto em torno do eixo Z, a partir do ponto base o ngulo especificado. void TObject.Rotate3D(point@ l1, point@ l2, double ngulo); Gira o objeto em torno do eixo definido pelos pontos l1 e l2 o ngulo especificado. void TObject.Mirror(point@ l1, point@ l2); Espelha o objeto em relao a reta que passa por l1 e l2. Exemplo de cdigo que move todos os objetos do projeto:
void main() { //Pega objeto por objeto for(int a=0; a<Drawing.Objects.Count(); a++) { //Pega o objeto da lista TObject @Object=Drawing.Objects.Items(a); //Move o objeto Object.Move(100,0,0); } }

ASX 2.0 Acessando dados do projeto | 58

Acessando as propriedades dos objetos


O acesso as propriedades individuais de cada objeto do projeto do ArchiStation feito atravs dos mtodos da classe TObject, compostos por um conjunto de instrues Get para pegar valores e instrues Set para ajustar valores: bool TObject::GetBoolean(string Propriedade); Pega o valor de uma propriedade booleana do objeto. bool TObject::SetBoolean(string Propriedade, bool Valor); Ajusta o valor de uma propriedade booleana do objeto. int TObject::GetInt(string Propriedade); Pega o valor de uma propriedade int do objeto. bool TObject::SetInt(string Propriedade, int Valor); Ajusta o valor de uma propriedade int do objeto. double TObject::GetDouble(string Propriedade); Pega o valor de uma propriedade double do objeto. bool TObject::SetDouble(string Propriedade, double Valor); Ajusta o valor de uma propriedade double do objeto. string TObject::GetString(string Propriedade); Pega o valor de uma propriedade string do objeto. bool TObject::SetString(string Propriedade, string Valor); Ajusta o valor de uma propriedade string do objeto. bool TObject::GetPoint(string Propriedade, point@ p); Copia para o ponto p o valor de uma propriedade point do objeto. bool TObject::SetPoint(string Propriedade, point@ p); Ajusta o valor de uma propriedade point do objeto o valor para do ponto p.

Lista de objetos e suas propriedades


Objeto Tipo point point Objeto Tipo point double LINE (Linha) Propriedade Start End Descrio Ponto inicial Ponto final

CIRCLE (Crculo) Propriedade Descrio Center Centro Radius Raio

ASX 2.0 Acessando dados do projeto | 59

Objeto Tipo point double double double Objeto Tipo point double double double double double Objeto Tipo Point String String Double Double Int

ARC (Arco) Propriedade Center Radius StartAngle EndAngle ELLIPSE (Elipse) Propriedade Center Xradius Yradius StartAngle EndAngle Rotation TEXT (Texto) Propriedade Insertion Text Style Size Rotation Justification

Descrio Centro Raio ngulo inicial em graus ngulo final em graus

Descrio Centro Raio no eixo X Raio no eixo Y ngulo inicial em graus ngulo final em graus ngulo de rotao em graus

Descrio Posio do texto Texto Estilo de texto Tamanho do texto ngulo de rotao em graus Justificao do texto

//em baixo 0-esquerda 1-centro 2-direita //meio 3-esquerda 4-centro 5-direta //em cima 6-esquerda 7-centro 8-direita Objeto Tipo point bool bool bool bool double double double double Objeto Tipo point string double double double double 3DFACE (Face) Propriedade P1, P2, P3, P4 Edge1 Edge2 Edge3 Edge4 U1, V1 U2, V2 U3, V3 U4, V4

Descrio Os quatro pontos que determinam face Primeira aresta visvel Segunda aresta visvel Terceira aresta visvel Quarta aresta visvel Coordenada UV de mapeamento para textura do ponto 1 Coordenada UV de mapeamento para textura do ponto 2 Coordenada UV de mapeamento para textura do ponto 3 Coordenada UV de mapeamento para textura do ponto 4

INSERT (Bloco inserido no desenho) Propriedade Descrio Insertion Ponto de insero Name Nome do bloco Rotation ngulo de rotao em graus Xscale Fator de escala no eixo X Yscale Fator de escala no eixo Y Zscale Fator de escala no eixo Z

ASX 2.0 Acessando dados do projeto | 60

double double double Objeto Tipo string double double Objeto Tipo string double

Xvector Yvector Zvector

Coordenada X do vetor de extruso Coordenada Y do vetor de extruso Coordenada Z do vetor de extruso

HATCH (Hachura) Propriedade Descrio Name Nome do padro da hachura Scale Fator de escala para desenhar o padro Rotation ngulo de rotao do padro em graus SHAPED (Perfilado) Propriedade Descrio Name Nome do perfil Scale Fator de escala para desenhar o padro

Objeto ASX (Componente ASX) Tipo Propriedade Descrio Componentes ASX podem ser acessados pelo nome de suas propriedades definidos no script.

Exemplos de aplicaes
Lista de materiais

Este exemplo como criar uma tabela mostrando as quantidades de blocos do tipo especificado que esto inseridos no desenho:

ASX 2.0 Acessando dados do projeto | 61

void main() { //Define as variveis para a contagem int Mesa4=0, Mesa5=0 ,Mesa8=0 ,Cadeiras=0; //Faz a contagem dos blocos for(int a=0; a<Drawing.Objects.Count(); a++) { TObject @Object=Drawing.Objects.Items(a); if(Object.ClassName()=="INSERT") { string Bloco=Object.GetString("NAME"); //Mesa de 4 lugares if(Bloco=="Mesa_d4") { Cadeiras+=4; Mesa4+=1; } //Mesa de 5 lugares if(Bloco=="Mesa_d5_canto") { Cadeiras+=5; Mesa5+=1; } //Mesa de 8 lugares if(Bloco=="Mesa_d8") { Cadeiras+=8; Mesa8+=1; } } } //Pede o ponto de insero da tabela point p1; Prompt("Indique o ponto insero da tabela:"); GetPoint(p1); //Cria a tabela SetLayer("0"); Text( point(p1.x+10, p1.y, p1.z) , "Objeto", 10, 0); Text( point(p1.x+240, p1.y, p1.z) , "Quantidade", 10, 0); p1.Move(0,-5,0); Line( p1, point(p1.x+320, p1.y, p1.z) ); p1.Move(0,-15,0); Text( point(p1.x+10, p1.y, p1.z) , "Mesa para 4", 10, 0); Text( point(p1.x+240, p1.y, p1.z) , ""+Mesa4, 10, 0); p1.Move(0,-5,0); Line( p1, point(p1.x+320, p1.y, p1.z) ); p1.Move(0,-15,0); Text( point(p1.x+10, p1.y, p1.z) , "Mesa para 5", 10, 0); Text( point(p1.x+240, p1.y, p1.z) , ""+Mesa5, 10, 0); p1.Move(0,-5,0); Line( p1, point(p1.x+320, p1.y, p1.z) ); p1.Move(0,-15,0); Text( point(p1.x+10, p1.y, p1.z) , "Mesa para 8", 10, 0); Text( point(p1.x+240, p1.y, p1.z) , ""+Mesa8, 10, 0); p1.Move(0,-5,0); Line( p1, point(p1.x+320, p1.y, p1.z) );

ASX 2.0 Acessando dados do projeto | 62

p1.Move(0,-15,0); Text( point(p1.x+10, p1.y, p1.z) , "Cadeiras", 10, 0); Text( point(p1.x+240, p1.y, p1.z) , ""+Cadeiras, 10, 0); p1.Move(0,-5,0); Line( p1, point(p1.x+320, p1.y, p1.z) ); }

Acessando as tabelas
Objetos da tabela Layers
Objeto Tipo string string int int double int double double bool bool LAYER (Camada) Propriedade Descrio Name Nome da camada Material Nome do material associado a camada Color Cor com que a camada desenhada na tela Printer_Color Cor com que a camada impressa Printer_Width Espessura do trao para impresso (Pena) DXF_Code Cdigo de cor DXF Width Espessura ajustada inicialmente quando a camada tornada corrente Height Altura ajustada inicialmente quando a camada tornada corrente Visible Indicador de visibilidade da camada Frozen Indica quando a camada esta congelada

Exemplo: Este script mostra a quantidade e o nome de todas as camadas definidas no desenho, acessando a lista Drawing.Layers.
void main() { //Mostra quantas camadas existem no desenho Prompt("Existem "+Drawing.Layers.Count()+" camadas no desenho."); //Camada por camada for(int a=0; a<Drawing.Layers.Count(); a++) { //Pega a camada TObject @Object=Drawing.Layers.Items(a); //Pega o nome na propriedade "NAME" string Nome=Object.GetString("NAME"); //Mostra o nome Prompt("-> "+Nome); }

ASX 2.0 Acessando dados do projeto | 63

Objetos da tabela Materials


Objeto Tipo string MATERIAL (Material) Propriedade Descrio Name Nome do material

Objetos da tabela Blocks


Objeto Tipo string BLOCK (Bloco) Propriedade Descrio Name Nome do bloco

Exemplo: Similar ao script anterior, mas agora mostra a quantidade e nomes dos materiais e blocos definidos no desenho acessando as listas Drawing.Materials e Drawing.Blocks.
void main() { Prompt("Existem "+Drawing.Materials.Count()+" materiais no desenho."); for(int a=0; a<Drawing.Materials.Count(); a++) { TObject @Object=Drawing.Materials.Items(a); string Nome=Object.GetString("Name"); Prompt(" -> "+Nome); } Prompt("Existem "+Drawing.Blocks.Count()+" blocos definidos no desenho."); for(int a=0; a<Drawing.Blocks.Count(); a++) { TObject @Object=Drawing.Blocks.Items(a); string Nome=Object.GetString("Name"); Prompt(" -> "+Nome); } } }

ASX 2.0 Selecionando objetos | 64

C A P T U L O 13

ASX 2.0 Selecionando objetos


A partir do ArchiStation 2013 foram adicionados novos comandos e recursos aos scripts ASX. Um destes aprimoramentos permite a interao do script com objetos j criados no desenho. Para isso, foram criadas as seguintes funes:

Funes de seleo
void ssGet(); Solicita ao usurio que selecione objetos por qualquer meio disponvel. bool ssGet(point@ p1); Selecione o objeto encontrado no ponto indicado. Retorna true se encontrou algum objeto, seno retorna false. bool ssGet(point@ p1, point@ p2); Seleo por janela. Seleciona todos objetos inteiramente contidos dentro da janela determinada pelos pontos p1 e p2. bool ssGetc(point@ p1, point@ p2); Seleo por cruzamento. Seleciona todos objetos inteiramente contidos ou que cruzarem com as bordas da janela determinada pelos pontos p1 e p2.

Obtendo acesso aos objetos selecionados


A lista global que armazena os objetos selecionados a Selection, e pode ser usada de maneira similar a lista de objetos do projeto Drawing.Objects. Exemplo:
void main() { //Pede ao usurio que selecione alguns objetos Prompt("Selecione objetos:"); ssGet(); //Mostra a quantidade de objetos selecionados Prompt("Voc selecionou "+Selection.Count()+" objetos."); }

Lista de Funes | 65

APNDICE A

Lista de Funes
Funes para Desenhar
bool Line(point@ p1, point@ p2); Desenha uma linha entre os pontos p1 ao p2. bool Circle(point@ Centro, double Raio); Desenha um crculo com centro e raio indicados. bool Arc(point@ Centro, double Raio, double AnguloInicial, double AnguloFinal); Desenha um arco definido por centro, raio, ngulos inicial e final. bool Ellipse(point@ Centro, double RaioX, double RaioY, double AnguloInicial, double AnguloFinal, double AnguloRotacao); Cria uma elipse definida por Centro, Raios no eixo X e Y, ngulos inicial, final e de rotao. bool Face(point@ p1 ,point@ p2, point@ p3, point@ p4); Desenha uma face definida pelos quatro pontos indicados. bool Face(point@ p1, point@ p2, point@ p3, point@ p4, bool edge1, bool edge2, bool edge3, bool edge4); Desenha uma face definida pelos quatro pontos indicados, sendo que as variveis edge definem quais das arestas sero visveis ou invisveis. bool Face(point@ p1, point@ p2, point@ p3, point@ p4, bool edge1, bool edge2, bool edge3, bool edge4, double tx1, double ty1, double tx2, double ty2, double tx3, double ty3, double tx4, double ty4); Desenha uma face definida pelos quatro pontos indicados, sendo que as variveis edge definem quais das arestas sero visveis ou invisveis, e associa as coordenadas de mapeamento de textura tx1, ty1, tx2, ty2, tx3, ty3, tx4 e ty4 para cada um dos pontos. As coordenadas de mapeamento padro so (0,0), (0,1), (1,1) e (1,0). bool Text(point@ Posicao, string Texto, double Tamanho, double Rotacao); Desenha um texto na posio, tamanho e rotao indicados. bool Text(point@ Posicao, string Texto, double Tamanho, double Rotacao, int Justificacao ); Desenha um texto na posio, tamanho, rotao e justificao indicados.

Alterarando propriedades
bool AddLayer(string Nome, int CorRGB, string LType); Adiciona uma nova camada ao desenho. void AddLayer(string Nome, int Cor, string LType, string Material); Cria uma camada com nome, cor, estilo de trao e material especificados (ASX 2.0).

Lista de Funes | 66

bool SetLayer(string Nome); Define a camada indicada como corrente. Se a camada no existir ou no for possvel a tornar corrente, a funo retorna false. string GetCurrentLayer(); Retorna na varivel o nome da camada corrente. bool SetWidth(double width); Especifica a Espessura corrente. bool SetHeight(double height); Especifica a Altura corrente. void SetGroup(int group); Especifica o nmero do grupo em que os prximos objetos sero desenhados. SetGroup(0) especifica que os objetos no sero agrupados. int SetNewGroup(); Especifica que os prximos objetos sero criados em um novo agrupamento retornando seu nmero.

Funes de controle
bool Redraw(); Redesenha a tela, torna os objetos criados pelo script visveis. Obs.: A funo Redraw chamada ao trmino da execuo do script. void Prompt(string Mensagem); Exibe uma mensagem na linha de comando. void SetHelp (string Arquivo, string Tpico); Define o arquivo .chm (Microsoft Compiled HTML Help) e o nome do tpico que ser exibido se o usurio chamar o a Ajuda do ArchiStation pressionando a tecla <F1>. Se o nome do arquivo for fornecido sem a pasta, o ArchiStation ir procur-lo na pasta Plugins. Exemplos:
SetHelp("MeuHelp.chm","Estrutura"); SetHelp("D:\\MeuHelp.chm","Estrutura"); SetHelp(PluginsDir()+"Aplicativo\\MeuHelp.chm","Estrutura");

void Help (string Arquivo, string Tpico); void Help (); Mostra o arquivo de ajuda indicado. Se nenhum parmetro for passado na chamada da funo, o sistema exibir o arquivo e tpico da ltima configurao.

Entrada de dados
Os valores dos comandos de entrada de dados so retornados nas variveis indicadas por "in". bool GetPoint(point@ in); Solicita a entrada de um ponto. O Ponto pode ser indicado no desenho, ou digitado no Quadro de comando.

Lista de Funes | 67

bool GetPoint(point@ in, point@ p1); Solicita a entrada de um ponto usando como referncia o ponto p1. bool GetCorner(point@ in, point@ p1); Solicita a entrada de um ponto usando como referncia a rea retangular criada a partir do ponto p1. void GetDist(double &in); Solicita a entrada de uma distncia. Se o usurio indicar um ponto no desenho, ser solicitada a entrada de mais um ponto e retornada a distncia entre os dois. void GetDist(double &in, point@ p1); Solicita a entra de uma distncia. Se o usurio indicar um ponto no desenho, ser retornada a distncia deste ponto ao ponto p1. void GetAngle(double &in); Solicita a entrada de um valor angular. Se o usurio indicar um ponto no desenho, ser solicitada a entrada de mais um ponto e retornado o ngulo do segmento formado com os dois pontos. void GetAngle(double &in, point@ p1); Solicita a entrada de um valor angular. Se o usurio indicar um ponto no desenho, ser retornado o ngulo do segmento formado com o ponto indicado e o ponto p1. void GetReal(double &in); Solicita a entrada de um nmero real. void GetInt(int &in); Solicita a entrada de um nmero inteiro. bool GetString(string &in); Solicita a entrada de uma cadeia de caracteres.

Funes Matemticas
Funes Aritmticas
int abs(int i); Retorna o valor absoluto de um inteiro. double fabs(double d); Retorna o valor absoluto de um valor de ponto flutuante. double sqrt(double d); Retorna a raiz quadrada. double exp(double d); d Retorna a constante de uler elevada a um valor, e . double pow(double da, double db); db Retorna 'da' elevado a potncia 'db', da .

Lista de Funes | 68

double log(double d); d Retorna o logaritmo natural, log e .

Gerador de nmeros aleatrios


int random(int num); Retorna um nmero inteiro aleatrio entre 0 e num-1. void srand(int seed); Inicializa o gerador de nmeros aleatrios com a semente indicada pelo valor de seed. Seed=1 o valor inicial do gerador. void randomize(); Inicializa o gerador de nmeros aleatrios com uma semente de valor aleatrio.

Funes Trigonomtricas
double sin(double Ang); Calcula o seno do ngulo fornecido em radianos. double cos(double Ang); Calcula o co-seno do ngulo fornecido em radianos. double atan(double d); Calcula o arco tangente em radianos de um valor double. double radians(double degrees); Converte o ngulo de graus para radianos. double degrees(double radians); Converte o ngulo de radianos para graus.

Funes de geometria
double Angle(point@ p1, point@ p2); Retorna o ngulo em radianos de inclinao do segmento definido pelos pontos indicados. double Distance(point@ p1, point@ p2); Retorna a distncia espacial entre os pontos indicados. void Polar(point@ p1, double ngulo, double Distncia); Atualiza p1 com o ponto definido na Distncia indicada seguindo na direo apontada pelo ngulo (em radianos) especificado. void PointAt(point@ *p, point@ *p1 , point@ *p2, double Distancia); Atualiza o ponto p para a posio em relao a p1, percorrida a distncia indicada em direo a p2. void Parallel(point@ *l1, point@ *l2, point@ *p1, point@ *p2, double Distancia); Atualiza a posio dos pontos l1 e l2 para os valores paralelos ao segmento entre p1 e p2 a distncia indicada.

Lista de Funes | 69

bool Perpend(point@ p, point@ p1, point@ l1, point@ l2); Atualiza o ponto p com o ponto que forma com p1 a perpendicular com a reta que liga l1 e l2. Retorna true se o ponto p pertence ao seguimento de reta formado por l1 e l2. void Intersection(point@ i, point@ l1, point@ l2, point@ p1, point@ p2); Atualiza i com o ponto a interseo entre os segmentos l1, l2 e p1, p2.

Funes de converso
int atoi(string str); Converte uma cadeia de caracteres em um valor inteiro int. double atof(string str); Converte uma cadeia de caracteres em um valor de ponto flutuante double. int RGB(char Red, int Green, int Blue); Retorna valor de referncia de cor no padro RGB. Os valores para Red, Green e Blue devem estar compreendidos entre 0 e 255.

Caixas de dialogo
MessageBox() - Caixa de mensagem de texto
int MessageBox(string Mensagem, string Texto, string Ttulo, int Tipo); Exibe uma caixa de mensagem com texto na tela e retorna a opo escolhida pelo usurio. Parmetros: Mensagem Texto Ttulo

Caixa de mensagem de texto Tipo: 0 = OK; 1 = OK e CANCELAR; 2 = REPETIR e CANCELAR; 3 = SIM e NO; 4 = SIM, NO e CANCELAR; 5 = cone de exclamao; 6 = cone de informao; 7 = cone de asterisco; 8 = cone de questo; Cdigos dos valores de retorno: 1 = OK; 2 = CANCELAR; 4 = REPETIR; 6 = SIM; 7 = NO;

GetFile() - Dialogo de seleo de nome de arquivo


string getfile(string Titulo, string Pasta, string Extenso);

Lista de Funes | 70

Exibe a caixa de dialogo padro do Windows para seleo de nome de arquivo e retorna o nome completo incluindo a pasta do arquivo selecionado. Parmetros: Titulo: Ttulo da janela; Pasta: Define a pasta inicial de busca do arquivo; Extenso: Extenso do nome do arquivo a ser selecionado sem ponto. Ttulo Pasta

Extenso

Caixa de dialogo de seleo de arquivo

Variveis do sistema
string AppDir(); Retorna a pasta de instalao do ArchiStation. string PluginsDir(); Retorna a pasta de Plugins do ArchiStation. string FileDir(); Retorna a pasta do projeto que se encontra em edio. Se no houver arquivo aberto, o valor retornado ser "". string Date(); Retorna a data do sistema no formato DD/MM/AAAA. string Time(); Retorna a hora do sistema no formato HH:MM 24 horas. string Version(); Retorna a verso do ArchiStation.

Lista de Funes | 71

Modificao da interface
A classe Toolbar
Toolbar CreateToolbar(string Titulo); Cria uma nova barra de ferramentas (Toolbar) com o ttulo especificado. void Toolbar.AddButton(string Ttulo, string Imagem, string Comando, string Descrio); void Toolbar.AddButton(string Ttulo, int Imagem, string Comando, string Descrio); Adiciona um boto a barra de ferramentas (Toolbar). Ttulo Imagem Nome associado ao boto Se for uma string, deve referir-se a ao arquivo onde est a imagem que deve ser aplicada ao cone do boto. Se for um inteiro (int) refere-se ao nmero da imagem na lista de imagens do container ASX. Comando que deve ser chamado ao se clicar o boto. O comando pode ser: Um comando do ArchiStation, exemplo: _linha Chamada a uma funo definida no prprio script. O nome da funo deve ser precedido por um duplo sinal de dois pontos (::). Exemplo: ::funcao() Chamada a uma funo de outro script localizado na pasta "/Plugins" da instalao do ArchiStation. Neste caso deve ser indicado o nome do arquivo, o sinal "::" seguidos pela funo. Exemplo: arquivo::funcao()

Comando

Observao: As funes chamadas devem ser definidas como "void". Descrio Dica que aparece quando o usurio mantm o cursor do mouse sobre o boto por alguns instantes.

Adicionando itens ao menu principal do ArchiStation


MenuItem CreateMenuItem(string Ttulo, string Comando); Adiciona um item ao menu Plugins do ArchiStation, retornando o objeto da classe MenuItem criado, que pode ser utilizado para adicionar sub itens. MenuItem MenuItem.AddSubMenuItem (string Ttulo, string Comando); Mtodo da classe MenuItem que adiciona um sub item ao menu. Retorna o novo objeto MenuItem criado.

Lista de Funes | 72

Obtendo dados de planilhas do MS Excel


bool ExcelOpenFile(string Titulo); Abre um arquivo do Excel para manipulao. O MS Excel deve estar instalado no seu computador. Retorna true se obteve xito, caso contrrio retorna false. bool ExcelSetSheet(string Sheet); Seleciona qual planilha do arquivo ser manipulada. Retorna true se obteve xito, caso contrrio retorna false. string ExcelGetItem(int Col, int Line); Retorna uma string com o valor do item na coluna e linha indicados. Observao: para utilizar como valores numricos, use as funes de converso atoi() ou atof(). bool ExcelCloseFile(); Fecha o arquivo. Retorna true se obteve xito, caso contrrio retorna false.

Tipos de variveis do AngelScript | 73

APNDICE B

Tipos de variveis do AngelScript


Valores booleanos
bool um tipo de dados booleano que pode assumir apenas dois valores: true (verdadeiro) ou false (falso). As palavras chave true e false so constantes que podem ser utilizadas em expresses.

Nmeros inteiros
Tipo int8 int16 int int64 uint8 uint16 uint uint64 Valor mnimo -128 -32,768 -2,147,483,648 -9,223,372,036,854,775,808 0 0 0 0 Valor mximo 127 32,767 2,147,483,647 9,223,372,036,854,775,807 255 65,535 4,294,967,295 18,446,744,073,709,551,615

Nmeros reais
Tipo
float double

Intervalo de valores
+/- 3.402823466e+38 +/- 1.7976931348623158e+308

Menor valor positivo


1.175494351e-38 2.2250738585072014e-308

Dgitos
6 15

Cadeia de caracteres
O tipo string utilizado para armazenamento e manipulao de cadeias de caracteres.

You might also like