segunda-feira, 9 de março de 2015

Aula 13 – Funções de Entrada de Dados – Parte 1

 

Olá pessoal, nessa aula vamos aprender como fornecer ao Autolisp dados fornecidos pelo usuário e como manipular esses dados dentro do programa, essa aula é muito simples principalmente se você já absorveu o conteúdo das aulas anteriores.

As funções que vamos aprender hoje são as funções GET, para não ter uma quantidade muito grande de funções para dar exemplos, vamos dividir essa aula em três partes assim teremos tempo para ver vários exemplos diferentes.

GETPOINT

O Getpoint retornará uma lista contendo os pontos X Y e Z do ponto que foi indicado pelo usuário

Sintaxe:

(Getpoint [ponto de laço] [mensagem para o usuário])

Ponto de laço = deve ser uma lista contendo as coordenadas X Y e Z

Mensagem para o usuário = deverá ser uma string

Todos os argumentos para a função Getpoint são opcionais (lembre-se em uma sintaxe qualquer argumento cercado por colchetes é opcional) podendo simplesmente usar a função assim (Getpoint) que ela funcionará, veja o exemplo abaixo sem usar nenhum argumento para a função Getpoint.

(setq pt (Getpoint))

A linha de programação acima solicitara que o usuário clique em um ponto na tela, o resultado dessa interação será ima lista contendo X Y e Z.

clip_image001

X = 369922.0

Y = 309640.0

Z = 0.0

Podemos fazer uso dos argumentos também e deixar o programa mais amigável, uma forma de fazer isso é dando uma mensagem que vai auxiliar o usuário a entender o que deve ser feito, veja a linha de programação abaixo:

(setq pt (Getpoint “\nClique sobre o local desejado”))

ATENÇÃO: Na mensagem acima temos um delimitador \n (barra n) isso informa ao Autolisp que ele deverá pular uma linha e depois imprimir a mensagem na linha de comando, faremos sempre uso desse delimitador em nossos programas.

A linha de programação acima funcionará igual ao exemplo anterior com a diferença que o usuário receberá na linha de comando uma mensagem que vai auxilia-lo.

clip_image002

Veja que ele escreveu na linha de comando a mensagem e na frente ele retornou a lista contendo as coordenadas X Y e Z essa lista foi armazenada na variável PT e poderemos usar essa variável a qualquer momento em nosso programa.

Podemos também fazer uso do argumento ponto de laço esse ponto de laço mostrara uma linha auxiliar a partir do ponto de laço fornecido, veja o exemplo abaixo:

(defun c: se()

(setq pt1 (Getpoint “\nClique sobre o primeiro ponto: “))

(setq pt2 (Getpoint pt1 “\nClique sobre o segundo ponto: “))

)

Esse comando acima chamado SE solicita na primeira linha que o usuário clique em qualquer ponto da tela, esse ponto será armazenado na variável PT1, depois ele pede um segundo ponto porem foi fornecido como ponto de laço a variável PT1, quando o usuário for clicar no segundo ponto uma linha auxiliar aparecerá tendo como ponto base o ponto fornececido inicial e que foi armazenado em PT1.

clip_image003

Essa linha auxiliar é muito util quando por exemplo queremos traçar uma linha assim podemos vizualizar o resultado antes mesmo de clicar no ponto.

Agora vamos fazer um exemplo um pouco mais complicado utilizando a função Getpoint, vamos fazer um programa onde o usuário clica em um ponto e o programa desenha um quadrado de 10x10, por enquanto faremos um quarado com um valor gravado direito no programa, mas nas próximas aulas aprenderemos quando alterar esse valor durante a execução do programa.

Vamos pensar um pouco antes de sair programando. Se utilizarmos a função GETPOINT teremos apenas uma lista contendo as coordenadas de X Y e Z, porem já aprendemos a manipular uma lista sendo assim podemos ter de forma separada os valores de X Y e Z e a partir desses valores somar valores e criar novos pontos e assim criar o nosso quadrado, veja a imagem abaixo isso facilitará o entendimento do exercício.

clip_image004

Do PT1 ao PT2 estamos deslocando apenas em X

Do PT1 ao PT3 estamos deslocando em X e Y

Do PT1 ao PT4 estamos deslocando apenas em Y

Vamos então dar início ao programa

(defun c:qa()
  (setq pt1 (Getpoint "\nClique sobre o local desejado: "))
  (setq x (car pt1))
  (setq y (car (cdr pt1)))
  (setq pt2 (list (+ x 10) y))
  (setq pt3 (list (+ x 10) (+ y 10)))
  (setq pt4 (list x (+ y 10)))
  (command "line" pt1 pt2 pt3 pt4 pt1 "")
  )

Vamos entender o programa

1) Criamos a variável PT1 usando Getpoint e armazenamos nela uma lista contendo X Y e Z

2) Usando a função CAR pegamos o valor da coordenada X e armazenamos em uma variável também chamada X

3) Usando a função CAR e CDR pegamos o valor da coordenada Y e armazenamos em uma variável também chamada Y

4) Criamos uma variável PT2 nela armazenamos  uma lista, essa lista foi criada com os seguintes dados:

(+ x 10) = que é o valor de X da variável PT1 somando 10

Y = que é o valor de Y da variável PT1

Note que do ponto pt1 ao pt2 nos movemos apenas em X portanto somamos 10 apenas a essa coordenada.

5) Criamos uma variável PT3 nela armazenamos  uma lista, essa lista foi criada com os seguintes dados:

(+ x 10) = que é o valor de X da variável PT1 somando 10

(+ y 10) = que é o valor de Y da variável PT1 somando 10

Lembre-se que estamos sempre partindo do ponto PT1 e se olharmos perceberemos que nos movemos tanto em X quanto em Y para chegar a esse ponto.

5) Criamos uma variável PT4 nela armazenamos  uma lista, essa lista foi criada com os seguintes dados:

x = que é o valor de X da variável PT1

(+ y 10) = que é o valor de Y da variável PT1 somando 10

Olhando sempre pelo ponto PT1 notamos que para chegar o PT4 nos movemos apenas em Y, portanto somamos mais 10 apenas em Y.

6) Criamos a linha partindo de PT1 e terminamos em PT1 para fechar o quadrado.

Quem tiver a oportunidade de assistir a vídeo aula poderá ver esse exemplo melhor explicado.

Abaixo segue o link do vídeo aula no meu canal Manual de Cad no youtube.

https://www.youtube.com/watch?v=nJ29pGNKbx4&feature=youtu.be

Espero que tenham gostado.

 

Abaixo seguem os exercicios

1) Utilizando o getpoint crie um comando que  que desenhe uma escada com 3 degraus com 10 cm de altura e 15 de comprimento. o Usuário deverá clicar em apenas um ponto.

2) Tente refazer o exemplo da Aula 12 utilizando o getpoint.

Sergio Fernandes

Manual de Cad.

Nenhum comentário:

Postar um comentário