Вы находитесь на странице: 1из 27

AutoLISP / Visual LISP - Parte 1

Robert Green - CAD-Manager.com

AutoLISP / Visual LISP uma maneira poderosa de estender a funcionalidade AutoCAD e torn-lo mais produtivo, mas muitos evitar us-lo porque acho que muito
difcil de aprender. No to! Este curso comea no incio, definindo arquivos de chave, em seguida, move-se rapidamente atravs de sintaxe bsica, incluindo pontos,
listas, acessar a linha de comando, armazenar e recuperar variveis, escrever suas prprias funes de comando, definindo / retirar definio comandos, tipos de dados,
funes lgicas IF e NO , trabalhando com conjuntos simples e controlar o AutoCAD start-up de modo todas as funes de carga automaticamente. Para tornar tudo
mais fcil de entender, usaremos alguns exemplos do mundo real e at mesmo dar-lhe alguns projetos de casa voc pode trabalhar depois da aula para estender a sua
aprendizagem. Se voc quiser bater o poder de AutoLISP e aumentar a sua produtividade, apertar o cinto para esta sesso.

Sobre o Palestrante:

Robert o chefe da Verdes Grupo Robert Consulting e um alto-falante veterano de 14 anos na Universidade de Autodesk. Voc j
deve ter lido seu trabalho em Cadalyst revista, onde autores a coluna "CAD Manager", ou em seu bi-mensal Boletim do CAD Manager. Ele
formado em Engenharia Mecnica do Instituto de Tecnologia da Gergia e ganhou suas habilidades de CAD a partir de 23 anos de
uso do software AutoCAD, MicroStation, e MCAD. Desde que comeou a sua prpria empresa em 1991, Robert tem exercido
funes de consultoria e de ensino para clientes privados, e em todo os EUA e Canad.

rgreen@CAD-Manager.com
O AutoLISP Vusual LISP - Parte 1
Robert Green

Origens e expectativas

AutoLISP um descendente de Lisp comum, que na verdade uma linguagem de programao muito antiga que foi concebida para
aplicaes de inteligncia artificial. Ele tambm passou a ser de cdigo aberto e, portanto, um ideal (e gratuita) caminho para AutoCAD a
ser alargados com uma linguagem de programao. Desde AutoLISP no tem que ser compilado, o que significa que voc pode executar
programas diretamente, ele foi ainda mais ideal como quase ningum, mas codificadores hard-core mesmo sabia o que um compilador
programa foi em meados da dcada de 1980.

AutoLISP uma linguagem muito poderosa que pode levar anos para aprender e dominar. Eu tenho trabalhado com ele desde 1990 e
eu ainda aprender coisas novas sobre AutoLISP em cada projeto. Dito isto, eu gostaria de dizer que h muita coisa que voc pode fazer
com AutoLISP sem ter que ser um atleta de programao se voc abordar as coisas com uma abordagem de estilo livro de receitas e
usar rotinas existentes.

Principais arquivos, funes e variveis

A primeira coisa a entender que AutoLISP tem alguns arquivos-chave e uma funo chave que realizar operaes de arranque para
voc. Os arquivos de chave pode conter cdigo personalizado AutoLISP que voc quer carregado sempre que o AutoCAD iniciado. H
tambm algumas funes teis que AutoLISP tem predefinidos para executar operaes de inicializao para voc. Vou resumir tudo
aqui:

ACAD200? .lsp Nomes como ACAD2005.LSP, ACAD2006.LSP, ACAD2008.LSP, ACAD2010.LSP, etc. Esse arquivo

carrega em primeiro lugar quando o AutoCAD iniciado.

ACAD.LSP Esse arquivo carrega segundo quando o AutoCAD iniciado.

ACAD200? DOC.LSP Nomes como ACAD2005DOC.LSP, ACAD2006DOC.LSP, ACAD2007DOC.LSP,


ACAD2008DOC.LSP, ACAD2009DOC.LSP, etc. Esse arquivo carrega terceira
quando o AutoCAD iniciado.

ACADDOC.LSP Esse arquivo carrega quarto quando o AutoCAD iniciado.

MENUNAME.MNL Esse arquivo carrega depois que os arquivos anteriores, mas apenas quando o seu homlogo do
menu CUI (um CUI ou CUIx) carregado no AutoCAD. Ao colocar o cdigo do AutoLISP neste
arquivo que voc pode ter certeza que o cdigo ser carregado na memria apenas quando o
menu pai est em uso.

ACADLSPASDOC Esta varivel controla o carregamento de ACAD.LSP. arquivo acad.lsp apenas cargas uma vez a
menos que voc defina a varivel ACADLSPASDOC para
1 em vez da configurao padro de 0.

2
O AutoLISP Vusual LISP - Parte 1
Robert Green

EXERCCIO: Principais arquivos, Funes e Variveis

Para verificar se voc pode criar um arquivo AutoLISP que carrega e executa, siga estes passos:

Abra um editor de texto como o Notepad

Digite a seguinte linha na sesso Notepad tomando muito cuidado para corresponder a todos os parnteses e aspas
como eu tenho

(Prompt O arquivo ACADDOC.LSP foi carregado.)

Agora salve o arquivo com o nome ACADDOC.LSP e coloque o arquivo na pasta de suporte do seu software
aplicativo AutoCAD. Os locais mais comuns seria a seguinte dependendo da sua verso do AutoCAD:

C: \ Arquivos de Programas \ AutoCAD 2006 \ Support C: \


Program Files \ AutoCAD 2007 \ Support C: \ Program Files \
AutoCAD 2008 \ Support

Comece AutoCAD e verificar seu histrico de linha de comandos (use a tecla F2) para ter certeza que a mensagem O
arquivo ACADDOC.LSP foi carregado Aparece.

Iniciar vrias sesses de desenho na mesma sesso de AutoCAD e verificar se a mesma mensagem exibida
para a histria prompt de comando como cada um comea a desenhar.

Recomendao

A metodologia acima recomendado para adicionar sintaxe bsica AutoLISP ao seu ambiente AutoCAD. Usando a metodologia
ACADDOC.LSP voc no precisa se preocupar com a configurao ACADLSPASDOC e desde que o arquivo provavelmente
no existe em sua instalao j, h essencialmente zero chance de voc escrever sobre ou destruir qualquer personalizao
existente.

Nota 1: Usando ACADDOC.LSP nos rendimentos diretrio APOIO resultados mximos, de baixa complexidade e muito
menos chance de estragar alguma coisa.

Nota 2: Certifique-se de usar um editor de texto simples como o Bloco de notas, em vez de um programa de processamento de texto como o
Word. Notepad ir retirar caracteres estranhos como aspas atrasadas que podem causar seu programa para funcionar mal.

3
O AutoLISP Vusual LISP - Parte 1
Robert Green

noes bsicas de sintaxe


Portanto, agora que voc sabe quais arquivos para colocar o seu cdigo AutoLISP em, vamos estabelecer as noes bsicas de sintaxe AutoLISP para que

voc possa comear a escrever algum cdigo. Os temas bsicos que voc precisa entender so:

Listas e argumentos
Regras de AutoLISP
variveis
Funes
Acessando a linha de comando
Caracteres especiais
A entrada do usurio

Vamos examinar esses tpicos usando uma combinao de palestra e exibio de exemplos de cdigo. Por favor, entenda que, dadas as
limitaes de tempo eu no posso desenvolver plenamente toda a teoria por trs desses comandos. Vou ter de lhe pedir para confiar em
mim por enquanto, em seguida, pesquisar a linguagem mais bem mais tarde, quando voc tem um conhecimento prtico da lngua.
Vamos comear!

Listas e argumentos

Qualquer coisa que voc faz em AutoLISP formatado como uma lista. As listas podem ter ambos os argumentos e funes
embutidas dentro deles para que voc possa realizar vrias atividades. Aqui esto alguns exemplos:

(+ 20 30) Aqui + a funo e os dois nmeros so


ARGUMENTOS

( Linha comando 0.0 1.1 ) Aqui COMANDO a funo, todos os outros so ARGUMENTOS

Se voc estudar mais voc vai comear a ver que qualquer entidade AutoCAD pode ser descrito como uma lista complexa como esta:

((-1 <Entidade nome: 400b1580>.) (0 "LINHA") (330..... <Entidade nome: 40094cf8>) (5 "378") (100 "AcDbEntity") (67 0) (410 .
"modelo") (8 "2") (100. "AcDbLine") (10 198,441 78,786 0,0) (11
247,87 179,589 0,0) (0,0 210 0,0 1,0))

Embora no seja bvio, esta lista descreve uma linha que desenhada na camada de 2, com um ponto inicial e ponto final e um vector UCS

de 0,0,1. Uma vez que voc comear a ler listas, voc est no seu caminho! As listas so simplesmente uma maneira de informaes grupo ou

a apresentao de informaes, na forma de argumentos para uma funo como ilustrado acima. As listas de entidades AutoCAD permitem que

voc

4
O AutoLISP Vusual LISP - Parte 1
Robert Green

executar aes em entidades de AutoCAD atravs de tcnicas mais avanadas de programao do que veremos hoje. Eu s
quero voc para ter um vislumbre do que est sob o cap do AutoCAD.

Regras de AutoLISP

Para cada (h um igual e oposta) - Einstein cerca de 1939

Como isso: (Setq A 3,0)

Assim no: (Setq A 3,0)) ou (A 3,0 setq

O mesmo vale para aspas!

Como isso: (Nome setq Robert Green)

Assim no: (Setq nome Robert Green) ou (nome setq Robert Green)

Ao formatar nmeros sempre evitar pares pontilhadas invlidos.

Como isso: (Setq A 0,5)

Assim no: (Um setq 0,5)

funes aritmticas um pouco diferentes do que voc est acostumado. Por exemplo:

linguagem padro AutoLISP equivalente Resultado

8+4 (8 + 4) 12

8 + 2,3 (+ 8 2.3) 12,3

5.0 4.0 (/ 5,0 4,0) S1.25

5 4.0 (/ 5 4.0) 1,25

5,0 4 (/ 5.0 4) 1,25

54 (/ 5 4) 1 (Por qu? Inteiros!)

5
O AutoLISP Vusual LISP - Parte 1
Robert Green

Mais matemtica complexa fica um pouco persnickety. Olhe para os exemplos a seguir e lembrar que AutoLISP trabalha de dentro
para fora em relao ao parnteses. Por exemplo:

linguagem padro AutoLISP equivalente Resultado

(8 + 4) * 3 (* (+ 8 4) 3) 36

(3.0 * 5.0) 4.0 (/ (* 3.0 5.0) 4.0) 3,75

((4 + 4) * 3) 2 (/ (* (+ 4 4) 3 2)) 12

Vou falar mais sobre os tipos de dados em uma prxima sesso, mas por agora tomar nota cuidadosa assim que voc inserir nmeros
(reais ou inteiros) tem tudo a ver com a forma como os nmeros so processadas.

Acessando a linha de comando


Para fazer AutoCAD e AutoLISP apertar as mos, a habilidade mais bsica definida voc vai precisar acessar a linha de

comando. I aludiu idia de uma funo de comando com argumentos na seo anterior, mas eu no fiz qualquer exemplos

prticos reais. Vamos dar uma olhada em alguns exemplos possveis de falar com AutoCAD atravs da interface de linha de

comando AutoLISP. Se voc queria desenhar uma linha entre dois pontos fornecidos pelo usurio na tela, voc faria o seguinte:

Digitar LINHA para iniciar o comando de linha

Clique PONTO para a primeira localizao do ponto

Clique PONTO para o segundo local de ponto

Digitar ENTRAR para interromper o comando

Em AutoLISP voc faz-lo desta maneira:

(Comando linha pause pause )

Nota: A instruo PAUSE espera para o usurio e o igual a bater a tecla ENTER. Por qu? Porque essa a maneira o
pessoal da Autodesk configur-lo!

Que tal mais alguns exemplos de acesso linha de comando que voc pode querer realmente usar? Aqui esto alguns
exemplos:

6
O AutoLISP Vusual LISP - Parte 1
Robert Green

funo AutoLISP propsito _

(Comando VIEWRES y 5000) Conjuntos visualizar resoluo para nenhum crculos serrilhadas

(Comando colora PORCAMADA) Define a cor para PORCAMADA

(Comando -linetype set PORCAMADA ) Define o tipo de linha para PORCAMADA

( Menu comando menuname.mnc) arquivo menu de cargas de sua escolha

Agora vamos olhar para um exemplo com a entrada do usurio:

funo AutoLISP propsito _

(Comando VIEWRES y pausa) Define resoluo vista a um valor de usurio

variveis

Embora sabendo sobre listas uma coisa, fazer algo funcional com listas depende de ser capaz de armazenar e passar variveis
dentro de listas.

As primeiras coisas primeiro: Como voc armazenar uma varivel? Vamos dizer que voc queria para armazenar um chamado valor da
varivel que tem o nmero de 12,7 associado a ele. A fim de definir a varivel precisamos usar a funo SETQ (pense definido igual) como
este:

(VALOR setq 12,7)

Esta varivel particular seria uma varivel nmero real. Alguns outros tipos de variveis so mostrados aqui como referncia:

(VALOR setq 1) Este seria um INTEIRO varivel

(VALOR setq Happy) Este seria um CORDA varivel

(VALOR setq 1) Este seria um INTEIRO varivel

Agora, quando voc interage com AutoCAD voc tem que passar a varivel na linha de comando. Utilize este caso como um
exemplo:

(VIEWRES_VALUE setq 5000)

(Comando VIEWRES y viewres_value)

7
O AutoLISP Vusual LISP - Parte 1
Robert Green

O que aconteceria neste caso?

(Setq VIEWRES_VALUE Happy Birthday!)

(Comando VIEWRES y viewres_value)

Isso no faria muito sentido, no ? Quando voc escreve um programa que voc tem que ter certeza de que as variveis que voc
usa corresponder-se com os comandos do AutoCAD as variveis so falar para. Faz sentido para passar um valor numrico para o
comando VIEWRES, mas no faz qualquer sentido para envi-lo uma varivel do tipo string. Compreender esse truque simples de
digitao varivel torna as coisas muito mais fcil.

A entrada do usurio

Vamos dizer que voc queria escrever um programa que iria criar uma roda com alguns raios na mesma. Bem, quantos raios devem

a roda tem? Se voc escrever um programa com um nmero conhecido de raios, digamos 8, o programa poderia, ento, desenhar

rodas com 8 raios. No seria melhor escrever um programa que desenha rodas com um nmero varivel de raios? Para essa

matria, como sobre a escrita de um programa onde voc especificar o nmero de raios e o dimetro da roda? A fim de especificar

quantos raios so no volante e quo grande o dimetro , voc precisa perguntar ao usurio definir essas variveis como este:

(Getdist \ nInput uma distncia:) Solicita ao usurio valor de distncia

(Getreal \ nInput um nmero real:) Solicita ao usurio valor de nmero real

(GetInt \ nInput um nmero inteiro:) Pede ao utilizador para o valor inteiro

(GetString \ nInput texto:) Solicita ao usurio seqncia de valor / personagem

Agora vamos associar a entrada do usurio nos d a uma varivel chamada como esta:

(Setq user_dist (getdist \ nInput uma distncia:)) (setq user_real

(getreal \ nInput um nmero real:)) (setq user_int (getInt \ nInput um

nmero inteiro:)) (setq user_string (getString \ text nInput: ))

Ou, para revisitar nossa analogia raios / roda, e quanto a isso:

(Setq wheel_dia (getdist \ nDigite roda dimetro:))

(Raios setq (getInt \ nmero nInsira de raios:))

8
O AutoLISP Vusual LISP - Parte 1
Robert Green

funes de comando do usurio


OK, ns sabemos como coletar informaes do usurio e sabemos como passar que a entrada de linha de comando do AutoCAD. Mas

como podemos fazer tudo isso de uma forma que acrescenta ao conjunto nativa do AutoCAD de comandos? Afinal, no seria ideal se

pudssemos escrever rotinas AutoLISP que enganam AutoCAD em pensar que tinha novos comandos? Se fizermos um bom trabalho,

nossos usurios de CAD nem vai saber que j programados comandos para eles. Vamos dar alguns exemplos simples para que voc

possa ver como ele funciona:

A ideia: Queremos criar um comando ZA que faz um zoom tudo.

O cdigo: (Defun C: ZA () (comando .ZOOM

a) (princ)

Aqui est o que a rotina est fazendo em uma base linha por linha:

(Defun C: ZA () Reserva um comando chamado ZA sem entradas para o comando que explica a
() aps o nome do comando. No se preocupe porque o () funciona como faz
agora; para obter mais para isso exigiria cobertura muito mais detalhada.

(Comando .ZOOM a) Acopla a linha de comando e passa os argumentos


. ZOOM e A para todos para o processador de comando. Por que o na frente
de zoom, voc pergunta? Porque garante que usaremos o comando nativa
ZOOM em vez de qualquer outra verso que pode ser redefinido. Mais sobre
isso mais tarde.

(Princ) Limpa o console de impresso e suprime AutoLISP de sair resultado NIL na


linha de comando como a funo termina. No se preocupe por que ela
funciona, ele s faz e seu programa vai olhar muito mais limpo para us-lo.

) Fecha a funo fora. Isso realmente equilibra os paren misbalanced contar na


primeira linha da funo. (Voc fez notar o desequilbrio, certo?)

9
O AutoLISP Vusual LISP - Parte 1
Robert Green

Aqui est um pouco mais eu gosto de usar:

(Defun C: VR ()

(Comando VIEWRES y 5000)

(Defun C: BL ()

(Comando colora PORCAMADA) (comando -linetype

set PORCAMADA ) (princ)

Mais funes de comando do usurio


Vamos olhar para algumas funes adicionais e tentar descobrir por que eles trabalham e pr em marcha acima a complexidade um pouco para
manter as coisas interessantes. Vou comentar sobre o cdigo no formulrio de comentrio (isto , o cdigo inclui um caractere ; o que nos
permite escrever comentrios em nossa programao). Aqui vai:

A ideia: Queremos criar um comando FZ que executa um comando fil, mas garante que o raio definido
para 0,0 por isso fil cantos afiados.

(Defun c: fz () ; Definir um comando FZ

(Setvar filletrad 0.0) ; Defina o raio de concordncia para 0,0 usando SETVAR

(Comando .fillet pause pausa) ; Invocar FILLET e esperar por duas entradas do usurio

(Princ) ; Desmarque a linha de comando

Aprendemos que podemos definir as variveis do AutoCAD usando a funo SETVAR muito facilmente. Acontece que voc pode definir
uma varivel usando SETVAR e pode ler o valor de qualquer varivel usando, de forma inteligente o suficiente, getvar. No sei qual
varivel voc precisa? Consulte o arquivo de ajuda AutoCAD sob a SETVAR tpico Comando e voc encontrar uma lista de todas as
variveis e o que eles fazem!

10
O AutoLISP Vusual LISP - Parte 1
Robert Green

O programa ir funcionar, mas seria melhor se ns checar o valor do raio de concordncia em primeiro lugar e, em seguida, fez com que ns

coloc-lo de volta a forma que encontramos quando nosso programa feito em execuo. Veja como:

(Defun c: fz () ; Definir um comando FZ

(Setq old_filletrad (getvar filletrad)) ; Armazenar o valor do raio fil de idade

(Setvar filletrad 0.0) ; Defina o raio de concordncia para 0,0 usando SETVAR

(Comando .fillet pause pausa) ; Invocar FILLET e esperar por entradas do usurio

(Setvar filletrad old_filletrad) ; Coloque o raio do filete de volta

(Princ) ; Desmarque a linha de comando

Este exemplo ilustra a leitura de um valor varivel de sistema em uma varivel de AutoLISP, em seguida, usando essa varivel mais tarde no

programa de raio de concordncia do AutoCAD ao seu valor anterior. isso a! No to ruim, realmente.

Auto purga (ATP)

Aqui est uma funo que eu gosto de usar diariamente. Ele faz um AutoPurge e salvar (combinando assim dois comandos para um) atravs

da introduo de ATP:

(Defun c: ATP ()

(Comando -purge a * n .qsave) (princ)

11
O AutoLISP Vusual LISP - Parte 1
Robert Green

Fechando as coisas - Cool stuff saber


Existem algumas outras pequenas coisas teis para polvilhar em suas sesses AutoLISP que eu vou abordar aqui e comentar
um por um:

Comentrio Lines

Voc pode ter notado o meu uso do personagem-e-vrgula em alguns exemplos. O ponto e vrgula o caractere de comentrio em

AutoLISP que permite embutir notas no cdigo. Acho comentando muito til porque vrios meses a partir de agora quando eu estou

trabalhando em um programa que eu no me lembro o que eu estava fazendo caminho de volta quando eu escrevi o programa. Tudo

o que vem depois do ponto e vrgula simplesmente ignorado at a prxima linha do programa iniciado.

Trao - Comandos Form


Por que eu uso -PURGE em vez de apenas PURGE no exemplo ATP?

Eu usei o formulrio trao do comando PURGE especificamente porque eu no queria que a forma de dilogo da invocao de
comando. Embora a forma de dilogo de comandos como purga e CAMADA so legais para o usurio, um comando AutoLISP no
pode chegar e pegar o mouse para interagir com o comando, certo?

Portanto, se um comando tem uma caixa de dilogo, como CAMADA por exemplo, apenas tentar colocar um trao - em frente do comando e ver

se funciona!

Eu prefiro usar a forma pitada de comandos porque eu posso sempre ir para o prompt de comando do AutoCAD e tipo na
forma trao do comando e ver exatamente como ele ir se comportar. Por isso, cometer menos erros escrevendo meus
programas!

Crdito extra: Se voc um gluto de olhar punio na referncia funo AutoLISP (encontr-lo sob o sistema de ajuda
AutoCAD) e olhar para cima a funo INITDIA. Esta funo AutoLISP fornece uma explicao mais detalhada de como os
dilogos so tratados dentro de funes AutoLISP.

Ponto .Os comandos Form

No meu exemplo de programao FILLET, por que eu digite o comando como .FILLET em vez de apenas FAIXA?

Eu usei a forma dot do comando apenas no caso de algum gerente CAD empreendedora tinha indefinido o comando FILLET
anteriormente. A forma dot do comando permite que voc chamar o comando, mesmo que tenha sido indefinido. Falaremos mais
sobre retirar definio funes em breve.

12
O AutoLISP Vusual LISP - Parte 1
Robert Green

Usurios de alerta

Voc pode enviar uma mensagem para o usurio assim: ( alerta Mensagem vai aqui)

Nota: O usurio deve confirmar o alerta clicando no boto OK!

comandos retirar definio

Voc pode ativar os comandos AutoCAD fora como este:

(Comando .undefine LINE) (comando

.undefine TORUS)

Dessa forma, se voc no quiser que os usurios brincando com um comando, basta deslig-lo. Coloque o cdigo no seu arquivo
ACAD.LSP e ele vai ter o efeito equivalente a desativao vocabulrio comando do AutoCAD.

Retirar definio e alertando

Voc pode no definir um comando e alertar o usurio assim:

(Comando .undefine TORUS) (defun C:

TORUS ()

(Alerta Eu no quero que voc usar esse comando!) (Princ)

13
O AutoLISP Vusual LISP - Parte 1
Robert Green

Redefinir via AutoCAD

Para trazer um comando de volta simplesmente usar o comando de redefinir no prompt de comando do AutoCAD como esta:

Comando: redefinir Inserir o nome do

comando: toro

Redefinir via AutoLISP

Agora lev-la mais um passo e redefinir a funo com um alerta para o usurio assim:

(Comando .undefine TORUS) (defun C:

TORUS ()

(Alerta Eu no quero que voc usar esse comando!) (Princ)

Desta forma, o usurio receber a mensagem!

Controladores comando echo

Muitas vezes voc pode ter um programa que chama um comando, mas voc no deseja que o usurio veja o comando que voc
invocado. Como exemplo, a funo BL escrevi anteriormente poderia ser feito para ser executado em STEALTH MODO fazendo isso:

(Defun C: BL ()

(Setvar cmdecho 0) ; Transforma o echo off

(Comando colora PORCAMADA) (comando -linetype

set PORCAMADA ) (setvar cmdecho 1)

; Acontece o eco de volta

(Princ)

14
O AutoLISP Vusual LISP - Parte 1
Robert Green

Kicking It Up a Notch

operadores condicionais
Tudo comea com a injeo lgica em seus programas para que eles possam realmente ser inteligente via ramificao e looping estruturas. Na

linguagem de programao ns chamamos esses tipos de funes de operadores condicionais.

Para que seus programas para executar operaes lgicas que voc precisa usar operadores condicionais como IF, WHILE e
COND dependendo das circunstncias particulares.

O IF condicional

Vamos dar o pontap inicial com o comando IF.

formato bsico: (IF (expresso de teste) (CASE


TRUE) (CASE FALSE)

Como voc pode ver o comando IF avalia um teste para ver se o teste verdadeiro ou falso. O resultado do
comando IF vai ento dois um verdadeiro caso e um falso caso. Portanto, o comando IF pode ser pensada como
uma bifurcao na estrada lgico uma vez que existem dois resultados distintos.

Pseudo-cdigo: Um usurio solicitado para uma varivel inteira chamada RAIOS


Se a varivel tem um valor inferior a 20, em seguida, imprimir menos de 20 Se a varivel tem um valor maior do
que / igual a 20, em seguida, imprimir mais de 20

cdigo real: (If (<raios 20) (alertar menos de 20)


; verdadeiro caso

(Alerta mais de 20) ; falso caso


)

O COND condicional

15
O AutoLISP Vusual LISP - Parte 1
Robert Green

COND como um super SE comando na medida em que permite avaliar um caso de teste e tomar medidas, mas voc pode ter
qualquer nmero de resultados em vez das declaraes IF dois resultados. Vamos ver a estrutura do comando:

formato bsico: (COND

((Teste de expresso 1) (RESULTADO))

((Teste de expresso 2) (RESULTADO))

((Teste de expresso 3) (RESULTADO))

Note-se que h mais parnteses para acompanhar e que a estrutura um pouco diferente do que se, mas a
premissa bsica muito parecido com IF.

Pseudo-cdigo: Um usurio solicitado para uma varivel inteira chamada RAIOS


Se a varivel tem um valor inferior a 10, em seguida, imprimir pequena roda para a tela Se a varivel entre
10 e 15 print RODA DE MDIO Se a varivel for superior a 15 print RODA GRANDE

cdigo real: (raios setq (getInt \ nmero nInsira de raios:)) (cond

((<Raios 10) (alertar pequena roda))


((E (> = raios 10) (<= raios 15)) (alertar RODA DE MDIO)) ((> raios 15) (alertar Grande roda))

Nota: Veja como o operador E era usado para avaliar um caso de teste mais complexo? No caso dos raios MDIO tinha de estar
na gama de entre 10 e 15, de modo foram necessrias duas avaliaes.

O ENQUANTO condicional
A principal utilizao do ENQUANTO condicional para executar uma estrutura de loop para qualificar as entradas do utilizador. Vamos ver a

estrutura do comando:

formato bsico: (OBTER VARIVEL)

(AO (EXPRESSO DE ENSAIO SOBRE VARIVEL)

16
O AutoLISP Vusual LISP - Parte 1
Robert Green

(Declarao 1)

(Declarao N)

Vamos dizer que queremos solicitar ao usurio uma srie de raios, mas o nmero de raios deve ser inferior a 20 para os nossos
propsitos. Como podemos lidar com um caso em que o usurio nos d um nmero incorreto? Vamos usar o ENQUANTO
condicional como este:

(Raios setq 0) (ao mesmo

tempo (<raios 20)

(Raios setq (getInt \ nmero nInsira de raios:))


)

Neste caso, inicializar a varivel para menos de 20 por isso vamos entrar no loop while. Agora, se um usurio entra um valor para
raios que inferior a 20 que vai ser preso no lao. Se eles entram em um valor de 20 ou superior a expresso de teste verdadeiro
e a rotina cancelada. Simples o suficiente.

Exemplo condicional
Vamos agora escrever um programa que usa estruturas condicionais para conseguir alguma lgica complexa. Aqui est o cdigo

pseudo para o exemplo:

Solicitar ao usurio uma srie de raios


Certifique-se de que eles lhe do, pelo menos, 8 raios, mas no mais de 24 raios
Escrever pequena ou mdia GRANDE para a tela com base nas regras que usamos no exemplo COND

Cdigo real
Primeiro eu vou escrever o cdigo que assegura a entrada do usurio e aplica os casos mximos e mnimos raios. Esta estrutura de loop

usar uma funo ENQUANTO juntamente com um caso de teste complexo como este:

(raios setq 0)
(Enquanto (ou (<raios 8) (> raios 24))
(Raios setq (getInt \ nDigite nmero de raios [de 8 a 24]:))
)

Veja como isso vai ficar o usurio no circuito de entrada, se os raios so muito poucos ou muitos? Agora, a parte do cdigo que
faz com que o pequeno, mdio ou grande designao:

17
O AutoLISP Vusual LISP - Parte 1
Robert Green

(cond
((<Raios 10) (alertar pequena roda))
((E (> = raios 10) (<= raios 15)) (alertar RODA DE MDIO)) ((> raios 15) (alertar Grande roda))

18
O AutoLISP Vusual LISP - Parte 1
Robert Green

Pontos e Manipulao Lista


Na sua essncia, o AutoCAD um programa que manipula entidades grficas usando a lista de associao voc agora visto para
controlar aspectos como camada, cor, etc. Mas do ponto de vista geomtrico AutoCAD toda sobre os pontos. Como um exemplo,
qualquer linha tem dois pontos de controlo, enquanto um crculo tem uma ponta de centragem e um ponto no crculo que define o raio
do crculo.

Nossa misso agora entender como trabalhar com os pontos para a construo de geometria. Primeiro alguns princpios bsicos:

Obter uma PT1 ponto de um usurio assim: ( setq pt1 (getpoint \ nSelecione um ponto:))
Agora obter PT2 da mesma forma como esta: ( setq pt2 (getpoint \ nSelecione um ponto:))

Voc tem agora dois pontos 3D armazenados nas variveis PT1 e PT2 certo?

CAR, CADR, Caddr


Para decompor pontos em seu X, Y e Z coordena voc precisa saber como usar as funes do CAR, CADR e Caddr. Vamos
demonstrar:

O valor X de PT1 seria: ( pt1 carro)


O valor de Y de PT1 seria: ( PT1 CADR)
O valor Z de PT1 seria: ( Caddr pt1)

Por qu? Porque assim que algum definiu! Apenas memorize essas funes e vamos mover longitudinalmente.

LISTA

Agora vamos dizer que voc gostaria de desenhar um crculo com um ponto de origem que est na coordenada X do PT1 e Y e Z
de coordenadas do PT2. Alm disso, o raio do crculo deve ter um valor de
11.5. Veja como esse cdigo seria:
(Comando .circle (lista (pt1 carro) (CADR pt2) (Caddr pt2)) 11.5)

19
O AutoLISP Vusual LISP - Parte 1
Robert Green

A parte inesperado aqui a declarao LIST, mas o conceito fcil, considerando o seguinte:

Para construir um ponto que voc deve ter um X, Y e Z de coordenadas.


As funes CAR, CADR e Caddr permitir-lhe obter o X, Y e Z.
A funo LISTA simplesmente concatena as coordenadas juntos em um ponto
O comando CIRCLE assume o ponto como entrada

Uma vez que voc comear a pensar LISTA cada vez que voc acessar um ponto e seguir as regras bsicas acima torna-se fcil.

Exemplo expandido
Vamos agora reforar o nosso programa roda de criao, adicionando mais algumas exigncias. Aqui est o cdigo pseudo para o
exemplo:

Solicitar ao usurio um ponto para o centro da roda


Para as pequenas rodas usar comprimento raio de 8, mdio recebe 10 e grande recebe 12
Desenhe um falou pela primeira vez no ponto central

Matriz falou primeiro com o nmero apropriado de raios

Cdigo real

Primeiro eu vou escrever o cdigo que assegura a entrada do usurio e aplica os casos mximos e mnimos raios. Esta estrutura de loop

usar uma funo ENQUANTO juntamente com um caso de teste complexo como este:

(raios setq 0)
(Enquanto (ou (<raios 8) (> raios 24))
(Raios setq (getInt "\ nDigite nmero de raios [de 8 a 24]:"))
)

(Wheel_center setq (getpoint "\ ponto central nSelecione da roda:"))

(cond
((<Raios 10) (comando ".line" wheel_center "@ 8 <0" ""))
((E (> = raios 10) (<= raios 15)) (comando ".line" wheel_center "@ 10 <0" "")) ((> raios 15) ( ".line" comando
wheel_center "@ 12 < 0" ""))
)

(Comando "-array" "ltima" "" "p" wheel_center raios "360" "y")

20
O AutoLISP Vusual LISP - Parte 1
Robert Green

Como eu sabia como escrever a lgica matriz? Eis algumas sugestes:

Use o comando -ARRAY para que voc interagir com o prompt de comando no uma caixa de dilogo
Use o objeto LTIMA desenhado para construir o conjunto de seleo

Use o para fechar as selees


Use as variveis WHEEL_CENTER e raios para passar a entrada do usurio na linha de comando
V atravs do comando manualmente para obter o seqenciamento

Um pouco mais

Vamos agora mudar o programa para que ele sempre vai desenhar os raios nas rodas camada que tem uma atribuio de cor de
amarelo assim:

(raios setq 0)
(Enquanto (ou (<raios 8) (> raios 24))
(Raios setq (getInt "\ nDigite nmero de raios [de 8 a 24]:"))
)

(Wheel_center setq (getpoint "\ ponto central nSelecione da roda:"))

(Comando "-layer" "fazer" "rodas" "cor" "amarelo" "" "")

(cond
((<Raios 10) (comando ".line" wheel_center "@ 8 <0" ""))
((E (> = raios 10) (<= raios 15)) (comando ".line" wheel_center "@ 10 <0" "")) ((> raios 15) ( ".line" comando
wheel_center "@ 12 < 0" ""))
)

(Comando "-array" "ltima" "" "p" wheel_center raios "360" "y")

Novamente, veja a sequncia de comando -CAMADA manualmente e voc vai ver onde eu recebi a ordem de operandos.

21
O AutoLISP Vusual LISP - Parte 1
Robert Green

Edifcio Entidade Define - SSGET

Digamos que voc queria construir um programa que iria encontrar todos os crculos em seu desenho, no importa qual camada eles

estavam em e alter-las a uma camada chamados crculos com uma cor PORCAMADA de azul.

Primeiro, vamos desenhar um crculo em AutoCAD e usar a funo GE da sesso anterior para ter uma idia de como o crculo
construdo. Aqui est a lista resultante de uma entidade crculo:

((-1 <nome da entidade: 7efa0390>.) (0 "CRCULO") (330..... <Entidade nome: 7ef9ecf8>) (5 "14A") (100 "AcDbEntity") (67 0) (410 .
"modelo") (8. "0") (100. "AcDbCircle") (10 39,9536 25,0516
0.0) (40. 8,1027) (210 0,0 0,0 1,0))

Note-se a par (0. "CRCULO"), que indica o tipo de entidade e (8. "0"), o qual indica a camada. Sabemos que o crculo tem um
atributo de cor PORCAMADA porque a lista entidade no inclui um (62
. X) par (em que X seria o nmero cor AutoCAD). Eu sei que isso tudo pode parecer confuso no incio, mas se voc usar a funo
GE eu dar-lhe explorar diversas entidades que voc vai comear a ver os padres.

Nota: Voc tambm pode obter informaes sobre parmetros da lista entidade no Ajuda do desenvolvedor seo do sistema AutoCAD

ajuda.

Agora vamos dar o salto para a construo de conjuntos de seleo com SSGET usando um exemplo. Primeiro vamos olhar para a construo de um

conjunto que vamos armazenar como um nome de varivel chamada CIRCLE_SET que encontra todos os crculos no desenho no importa qual camada

esto em:

(Setq circle_set (ssget "x" '((0. "CIRCLE"))))

Este um exemplo de filtragem conjunto de seleo que denotado pelo x no formato do comando. O que vem a seguir uma
lista citado de todos os pares associativas de dados que voc gostaria de procurar na construo do conjunto. Quanto menos
itens na lista citada, mais ampla de pesquisa. Aqui est um exemplo de encontrar apenas crculos em GEOM camada:

(Setq circle_set (ssget "x" '((0. "CIRCLE") (8 "GEOM"))))

O que este exemplo encontrar:

(Setq circle_set (ssget "x" '((0. "CRCULO") (62. 2))))

Isso iria encontrar crculos que so amarelo. Lembre-se o parmetro (62. X) Eu te dei mais cedo?

22
O AutoLISP Vusual LISP - Parte 1
Robert Green

Onde usar isso?

Em qualquer lugar que voc normalmente exigem um conjunto de seleo de objetos como este:

(Comando "mudana" circle_set "" ... propriedades mudana aqui ...)

ou

(Comando "apagar" circle_set "")

No torn-lo muito complicado, a funo SSGET simplesmente permite que voc construa conjuntos atravs de filtragem assim como voc faria em

AutoCAD ... apenas mais fcil isso tudo!

Carregando Cdigo

Depois de ter escrito um programa e depurado que voc gostaria de salvar o seu cdigo em seu prprio arquivo LSP para sua
convenincia. Portanto, a questo torna-se como voc pode carregar programas no ambiente AutoCAD? Bem, existem algumas
maneiras que eu vou cobrir brevemente aqui.

Opo 1 - Usando appload

Voc sempre pode carregar um arquivo de LSP utilizando AutoCAD de APPLOAD comando para navegar para o arquivo e carreg-lo. O nico

problema com apploading um programa que os resultados da carga sero perdidas na prxima vez que voc sair do AutoCAD se voc no

sabe o truque. Para usar APPLOAD simplesmente digite-o na linha de comando.

Se voc quiser carregar o seu programa sempre AutoCAD comea simplesmente usar

o Sute Startup CONTEDO boto para adicionar o nome do programa

permanentemente como mostrado direita.

utilizao APPLOAD tem suas vantagens na medida em

que graficamente orientada e fcil de navegar, mas

para realmente ganhar o controle sobre seus programas

e inicializao do AutoCAD usando o ACADDOC.LSP

d os melhores resultados

ento vamos olhar para ele em seguida.

23
O AutoLISP Vusual LISP - Parte 1
Robert Green

Opo 2 - Carregar do ACADDOC.LSP

Desde o ACADDOC.LSP automaticamente carregado durante a inicializao do AutoCAD voc pode simplesmente inserir uma linha em seu arquivo

ACADDOC.LSP que carrega o programa remotamente parecido com isto:

(Carga c: \\ mydirectory \\ myprogram.lsp)

Onde os parmetros mydirectory e MYPROGRAM so simplesmente substitudos pelos valores apropriados. Observe
os caracteres \\ necessrios para pathing!

Centralizando seu cdigo

Neste caso queremos carregar um arquivo AutoLISP externo com alguns utilitrios nele (chamados UTILS.LSP) que reside em uma
unidade de rede. O contedo do ADADDOC.LSP ficaria assim:

(If (findfile "x: \\ AutoLISP \\ utils1.lsp"); findfile verifica se o arquivo existe


(Carga "x: \\ AutoLISP \\ utils1.lsp"))
)

Agora voc tem uma maneira de carregar arquivos de um local de rede remoto para que os programas podem ser mantidos em um s

lugar! Esta a melhor maneira de carregar programas (especialmente se voc um gerente de CAD) porque voc nunca tem que visitar

mquina do usurio para modificar suas utilidades.

Compilar o cdigo

Vamos enfrent-lo, se voc colocar o cdigo LSP desprotegido em seu algum rede vai invadir-lo e alter-lo. No seria mais
sensato simplesmente proteger seu cdigo de adulterao antes que isso acontea? Pode apostar que faria e a boa notcia que o
compilador Visual LISP permite-lhe faz-lo facilmente.

Os passos so simples:

Saiba onde o programa que voc est compilando est localizado (exemplo: C: \ TEST \ MYPROG.LSP)

Inicie o ambiente de desenvolvimento integrado Visual LISP, digitando VLIDE no prompt de comando do
AutoCAD

Compilar seu programa usando a seguinte sintaxe: (VLISP-compilar 'st c: \\ test \\ myprog.lsp)

24
O AutoLISP Vusual LISP - Parte 1
Robert Green

Os resultados desta compilao ser que agora voc tem C: \ TEST \ MYPROG.FAS como um (ou rpido Load) arquivo formatado compilado.

Este arquivo pode ser carregado no meio da funo APPLOAD ou usando um comando de carga como esta:

(carga c: \\ \\ de teste) myprog.fas

Seguro e seguro! Agora que melhor.

VLIDE Ambiente (e Ajuda)

Voc tambm pode escrever seu cdigo na janela de VLIDE (veja abaixo) e obter o benefcio de um drop-down selector de funes e
correspondncia parntese. Alguns programadores realmente como o ambiente VLIDE enquanto outros (eu includo) preferem usar seu
prprio programa de edio. De qualquer forma bom. simplesmente uma questo de preferncia.

Se voc optar por cavar a interface VLIDE passar algum tempo com o utilitrio de ajuda fornecidos com ele.

25
O AutoLISP Vusual LISP - Parte 1
Robert Green

Enquanto ns estamos sobre o tema da ajuda, use a seo de Ajuda do desenvolvedor do sistema AutoCAD ajuda e voc encontrar

toneladas de informaes sobre todas as funes VLIDE e funes AutoLISP tambm.

26
O AutoLISP Vusual LISP - Parte 1
Robert Green

materiais
Voc pode baixar o guia atualizado claro, PowerPoint e captura de vdeo (com quaisquer notas adicionais ou correes) para esta

apresentao no meu site www.CAD-Manager.com Na pgina de download usando a senha LISP1 (sem as aspas). Sinta-se livre

para me enviar e-mail em rgreen@cad-manager.com com acompanhamento perguntas.

Outros Materiais de Referncia

Voc pode encontrar uma grande variedade de informaes sobre personalizao, programao e gesto de CAD
no meu site: www.CAD-Manager.com

Transferncias: Eu encontrei CAD Depot a ser uma fonte muito til para domnio pblico utilitrios AutoLISP voc pode usar como
inspirao para suas prprias rotinas. Voc pode encontrar a rea de AutoLISP em:

http://www.caddepot.com

Alm rotinas AutoLISP, h um monte de outras matrias Nice em CAD Depot pena algum do seu tempo de navegao.

AutoLISP ajuda: Tambm no se esquea de verificar os recursos de ajuda do AutoCAD na seo Guia do desenvolvedor para uma
riqueza de informaes sobre comandos e funes AutoLISP. Voc pode at querer tentar trabalhar o exemplo tutorial JARDIM
PATH agora que voc tem um pouco de compreenso de como lidar com AutoLISP.

27

Вам также может понравиться