Professional Documents
Culture Documents
ArchiStation 2013
Introduo | 2
ArchiStation 2013
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.
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.
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
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
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.
A funo Prompt() chamada para exibir o texto entre aspas no Quadro de comando.
A funo GetPoint() solicita ao usurio a entrada de um ponto que ser armazenado em p1.
GetPoint(p1);
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:
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.
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:
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;
Relacionais: > Maior que >= Maior ou igual < Menor que <= Menor ou igual == Igual != Diferente
Lgicos: && || !
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.");
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:
Estrutura do C/C++ | 16
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 :
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";
Adio com variveis numricas tambm possvel, sendo que seus valores so convertidos em cadeias de caracteres antes da operao.
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.
CAPTULO 3
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);
CAPTULO 4
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.
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.
Exemplo:
// Ajusta a espessura corrente para 10 unidades SetWidth(15); // Ajusta a altura corrente para 60 unidades SetHeight(60);
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.
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.
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));
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.
CAPTULO 5
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
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.
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.
2.
3.
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.
7.
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
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
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.
// 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.
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
Componentes ASX | 36
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.
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.
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.
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.
CAPTULO 7
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");
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()"
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");
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","");
CAPTULO 8
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.
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.
//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
CAPTULO 9
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
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.
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.
C A P T U L O 11
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.
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.
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.
C A P T U L O 12
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.
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 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
double double double Objeto Tipo string double double Objeto Tipo string double
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:
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) );
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); }
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); } } }
C A P T U L O 13
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.
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
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;
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
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.
Lista de Funes | 72
APNDICE B
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
Dgitos
6 15
Cadeia de caracteres
O tipo string utilizado para armazenamento e manipulao de cadeias de caracteres.