Está en la página 1de 41

;;-------------------------------------------------------------------------- ARQUIVO 01

;; Curso E.Fernal de AutoLISP


;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:ponto1 (/ ponto)


(SETVAR "CMDECHO" 0)
(ALERT
"Esta funo ir solicitar o fornecimento (opcional) de um ponto..."
)
(SETQ ponto (GETPOINT "\n-> Fornea um ponto : "))
(IF ponto
(ALERT (STRCAT "Voc forneceu o ponto \n( "
(RTOS (CAR ponto) 2 (GETVAR "LUPREC"))
"\t"
(RTOS (CADR ponto) 2 (GETVAR "LUPREC"))
"\t"
(RTOS (CADDR ponto) 2 (GETVAR "LUPREC"))
")"
)
)
(ALERT "Voc no forneceu nenhum ponto...")
)
(PRINC )
)

;; fim da rotina

;| incio de comentrios sobre esta funo

Os textos entre [ ] so opcionais, podem ou no ser incluidos...

DEFUN a funo do AutoLISP que define uma nova funo.


'DEfine FUNction'

Sintaxe
(DEFUN [c:]nome-da-funcao ( [argumentos] / [variaveis-locais] )
...expressoes...
[...expressoes...]
[................]
[...expressoes...]
)

Quando o nome da funo precedido por c:, como neste


exemplo, ento ao se carregar o arquivo ser criado um
novo comando. Para executar este comando, bastando digitar
este nome, sem o C:
Caso contrrio, ser necessrio digitar o nome da funo
entre parnteses.
Toda nova funo criada com o AutoLISP sobrepe-se s
j existentes, portanto voc deve assegurar-se de no
utilizar nomes j existentes. Para checar, voc pode
utilizar a funo ATOMS-FAMILY do AutoLISP ou digitar
!nome-da-funcao e teclar Enter. Caso o retorno seja nil,
ento at este momento o nome est disponvel.
Argumentos devem ser passados somente para funes sem C:,
embora possam ser passados nos dois casos.
Voc deve declarar como locais as variveis que somente
sero utilizadas nesta rotina, para evitar que as mesmas
permaneam na memria inutilmente.

****************************************************************************************
SETVAR a funo do AutoLISP que permite alterar uma varivel
de sistema do AutoCAD
****************************************************************************************
"CMDECHO" a varivel de sistema do AutoCAD que define se o echo
dos comandos ser ou no eliminado. 0 (zero) elimina o echo,
e 1 o habilita.
Obs.: No h nenhum sentido em habilit-lo, exceto quando estamos
programando e desejamos acompanhar uma determinada etapa de
procedimentos.
****************************************************************************************
ALERT a funo do AutoLISP que apresenta o quadro de mensagens
AutoCAD Message - Esta funo exige um s argumento,
e este tem quer ser um string de caracteres...
(strings so caracteres entre aspas)
****************************************************************************************
SETQ a funo do AutoLISP que atribui a uma varivel um valor
Sintaxe
(SETQ variavel1 valor1
[variavel2 valor2]
[variaveln valorn]
[variavel255 valor255]
)
****************************************************************************************
GETPOINT a funo AutoLISP que solicita ao operador o fornecimento
de um ponto, seja clicando ou entrando pelo teclado.
****************************************************************************************
IF uma funo que existe em todas linguagens de programao e quer dizer
SE.
Sintaxe
(IF condicao
expressao1
[expressao2]
)
Se a condio 'condicao' for verdadeira, ento a funo
executar a expresso 'expressao1'. Caso contrrio,
executar a expresso 'expressao2', se esta estiver
presente.
****************************************************************************************
STRCAT a funo do AutoLISP que concatena (une) dois ou mais strings de
caracteres.
Sintaxe
(STRCAT string1 string2 [string3] [string-n] )
Exemplo :
(STRCAT "Este "
" um string "
"formado por "
" 4 sub-strings"
)
retorna
"Este um string formado por 4 sub-strings"
****************************************************************************************
RTOS a funo do AutoLISP que converte um nmero real em string.
(Real TO String)
Vide opoes para RTOS no catlogo de funes
Exemplos :
(RTOS 12.5589 1 4) -> retorna "1.2559E+01"
(RTOS 12.5589 2 4) -> retorna "12.5589"
(RTOS 12.5589 3 4) -> retorna "1'-0.5589""
(RTOS 12.5589 4 4) -> retorna "1'-0 9/16""
(RTOS 12.5589 5 4) -> retorna "12 9/16"
****************************************************************************************
CAR a funo do AutoLISP que retorna o primeiro elemento de uma lista.
Sintaxe
(CAR lista)
Exemplos :
(CAR (LIST 1 2 3)) -> retorna 1
(CAR (LIST 3 2 1)) -> retorna 3
****************************************************************************************
GETVAR a funo do AutoLISP que recupera o valor de uma varivel
de
sistema do AutoCAD
Sintaxe
(GETVAR variavel-de-sistema)
variavel-de-sistema deve ser o nome da variavel
desejada, em STRING
Utilize o comando SETVARS deste curso para
conhecer estas variveis.
****************************************************************************************
"LUPREC" a varivel de sistema do AutoCAD que armazena o nmero
de casas decimais. Voc pode alterar este valor digitando, na linha
de comandos do AutoCAD a palavra LUPREC . Tecle Enter e defina o
valor desejado que deve estar entre 0 e 16
****************************************************************************************
PRINC a funo do AutoLISP que envia um string para a linha de
comandos ou para um arquivo. Se usada sem argumentos, elimina o
ltimo retorno do AutoLISP. Sempre usada ao fim dos comandos
definidos com AutoLISP, para uma saida silenciosa e elegante.
Sintaxe
(PRINC [string [arquivo]])
****************************************************************************************
Fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 02
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:ponto2 (/ ponto)


(SETVAR "CMDECHO" 0)
(ALERT
"Esta funo ir solicitar o fornecimento (obrigatrio) de um ponto..."
)
(INITGET 1)
(SETQ ponto (GETPOINT "\n-> Fornea um ponto : "))
(ALERT (STRCAT "Voc forneceu o ponto \n( "
(RTOS (CAR ponto) 2 (GETVAR "LUPREC"))
"\t"
(RTOS (CADR ponto) 2 (GETVAR "LUPREC"))
"\t"
(RTOS (CADDR ponto) 2 (GETVAR "LUPREC"))
")"
)
)
(PRINC )
)

;; fim da rotina

;| incio de comentrios sobre esta funo

Os textos entre [ ] so opcionais, podem ou no ser incluidos...

INITGET a funo do AutoLISP que define qual opo ser tomada


para uma funo seguinte, que dever ser uma destas :

ENTSEL
NENTSEL
NENTSELP
GETINT
GETREAL
GETDIST
GETANGLE
GETORIENT
GETPOINT
GETCORNER
GETKWORD
Os bits de controle mais usados so :

1 - Impede que a resposta seja um toque na barra de espao


2 - Impede que a resposta seja 0 (zero)
4 - Impede que a resposta seja um nmero negativo
8 - Permite fornecer um ponto fora dos limites definidos

vlida a soma dos bits, portanto


(INITGET 7) -> ou 1 + 2 + 4
impede a entrada de um nmero que no seja maior
que zero.

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 03
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:real1 (/ numero)


(SETVAR "CMDECHO" 0)
(ALERT
"Esta funo ir solicitar o fornecimento (opcional) de um nmero real..."
)
(SETQ numero (GETREAL "\n-> Fornea um nmero : "))
(IF numero
(ALERT (STRCAT "Voc forneceu o nmero " (RTOS numero 2 5)))
(ALERT "Voc no forneceu nenhum nmero...")
)
(PRINC )
)

;; fim da rotina

;| incio de comentrios sobre esta funo

GETREAL a funo do AutoLISP que permite ao operador fornecer


um nmero real, atravs do teclado. Caso no seja utilizada a
funo INITGET, a entrada pelo usurio poder ser nula, caso
se tecle Enter ou a barra de espaos sem antes digitar um
nmero qualquer.
Vide 'Como obter um nmero real, 2' como forar o usurio a
realmente fornecer um nmero.

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 04
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:real2 (/ numero)


(SETVAR "CMDECHO" 0)
(ALERT
"Esta funo ir solicitar o fornecimento (obrigatrio) de um nmero real..."
)
(INITGET 1)
(SETQ numero (GETREAL "\n-> Fornea um nmero : "))
(ALERT
(STRCAT "Voc forneceu o nmero " (RTOS numero 2 5))
)
(PRINC )
)

;; fim da rotina

;| incio de comentrios sobre esta funo

A funo INITGET foi usado com o bit 1, que impede que se


tecle Enter ou a barra de espaos como resposta.
Deste modo, enquanto o operador no digitar um nmero, seja
negativo, zero ou maior que zero, o AutoLISP seguir pedindo
por um nmero real.

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 05
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:real3 (/ numero)


(SETVAR "CMDECHO" 0)
(ALERT
(STRCAT "Esta funo ir solicitar o fornecimento"
"\n(obrigatrio) de um nmero real dIFerente de zero..."
)
)
(INITGET 3)
(SETQ numero (GETREAL "\n-> Fornea um nmero : "))
(ALERT (STRCAT "Voc forneceu o nmero " (RTOS numero 2 5)))
(PRINC )
)

;; fim da rotina

;| incio de comentrios sobre esta funo

A funo INITGET foi usado com o bit 3, que impede que se


tecle Enter, a barra de espaos ou ainda 0 (ZERO) como resposta.
Deste modo, enquanto o operador no digitar um nmero DIFERENTE
de zero, o AutoLISP seguir pedindo por um nmero real.

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 06
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:real4 (/ numero)


(SETVAR "CMDECHO" 0)
(ALERT
(STRCAT "Esta funo ir solicitar o fornecimento"
"\n(obrigatrio) de um nmero real MAIOR que zero..."
)
)
(INITGET 7)
(SETQ numero (GETREAL "\n-> Fornea um nmero : "))
(ALERT
(STRCAT "Voc forneceu o nmero " (RTOS numero 2 5))
)
(PRINC )
)
;; fim da rotina

;| incio de comentrios sobre esta funo

A funo INITGET foi usado com o bit 7, que impede que se


tecle Enter, a barra de espaos, 0 (ZERO) ou um nmero menor que 0
como resposta.
Deste modo, enquanto o operador no digitar um nmero MAIOR QUE
ZERO, o AutoLISP seguir pedindo por um nmero real.

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 07
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:entrar (/ dh w@)


(SETVAR "CMDECHO" 0)
(IF (> (SETQ dh (LOAD_DIALOG "c:\\curso\\dcl\\curso.dcl")) 0)
(IF (NEW_DIALOG "ENTRADAS" dh)
(PROGN
(IF ((NOT dado1)
(SETQ dado1 "100")
)
(IF ((NOT dado2)
(SETQ dado2 "200")
)
(IF ((NOT dado3)
(SETQ dado3 "300")
)
(IF ((NOT dado4)
(SETQ dado4 "400")
)
(SET_TILE "dado1" dado1)
(SET_TILE "dado2" dado2)
(SET_TILE "dado3" dado3)
(SET_TILE "dado4" dado4)
(ACTION_TILE
"dado1"
"(SETQ dado1 $value)(check_number dado1)"
)
(ACTION_TILE
"dado2"
"(SETQ dado2 $value)(check_number dado2)"
)
(ACTION_TILE
"dado3"
"(SETQ dado3 $value)(check_number dado3)"
)
(ACTION_TILE
"dado4"
"(SETQ dado4 $value)(check_number dado4)"
)
(ACTION_TILE "cancel" "(DONE_DIALOG 0)")
(ACTION_TILE "accept" "(DONE_DIALOG 1)")
(ACTION_TILE
"help"
"(ALERT \"Rotina de demonstrao de como entrar com\ndados em um quadro de dilogo.\")"
)
(SETQ w@ (START_DIALOG))
(UNLOAD_DIALOG dh)
(COND ((= w@ 0) (PRINC "\n-> Cancelado..."))
((= w@ 1)
(ALERT "Nesta parte voc deve continuar o programa...")
)
)
)
nil
)
(ALERT "Arquivo DCL no pde ser carregado...")
)
(PRINC )
)

;| fim da rotina

incio de comentrios

LOAD_DIALOG a funo AutoLISP que carrega para a memria um arquivo .DCL,


que contm definies de quadros de dilogo do AutoCAD.
Se este carregamento for bem sucedido, o retorno ser um nmero
inteiro MAIOR que zero. Caso contrrio, a funo retornar zero ou
menor que zero, indicando o fracasso do carregamento.
Podemos armazenar este valor em uma varivel, no caso 'dh', e
prosseguir com a rotina somente no caso de sucesso do carregamento,
isto , se 'dh' for maior que zero.
***************************************************************************************
NEW_DIALOG a funo que localiza, dentro do conteudo do arquivo .DCL
carregado pela funo LOAD_DIALOG, por um determinado quadro, neste
exemplo "ENTRADAS".
Se localizado e correto, ento o quadro lanado na tela.
Em DCL, MAISCULAS so diferentes de MINSCULAS, portanto poderamos
ter, no mesmo arquivo, um quadro com o nome de "ENTRADAS", outro com
o nome de "entradas", ainda outro com o nome de "Entradas" e assim
por diante. A linguagem DCL segue a sintaxe de C
Se a funo fracassar, isto , se no arquivo DCL carregado no houver
(neste exemplo) o quadro "ENTRADAS", o AutoLISP automaticamente
enviar uma mensagem de erro padro. Observe que, por isso, retornamos
'nil' no nosso cdigo.
**************************************************************************************
PROGN uma funo que permite diversas expresses AutoLISP. Ela foi utilizada
porque a funo IF s permite avaliar uma expresso, caso o retorno seja
verdadeiro, e uma expresso alternativa, caso contrrio.

Dentro deste PROGN


Como, at aqui, tudo est OK, inicializamos as variveis globais, que
chamamos de 'DADO1', 'DADO2', 'DADO3' e 'DADO4'. Estas devem ser
strings de caracteres ou ento, convertidas para este tipo de tomo,
pois, em um quadro de dilogo, smente strings so permitidas.
Observe a expresso

(IF ((NOT dado1)


(SETQ dado1 "100")
)
Ela diz o seguinte :

Se a varivel 'dado1' no tiver valor, isto , for 'nil',


ento atribua a ela o valor de "100"

Obviamente, se ela tiver valor, suponhamos "345.45", nada


ser feito e ela, portanto, continuar com este valor.

Idem para as demais variveis 'dado2', 'dado3' e 'dado4'

Um outro modo seria :

(IF dado1
nil
(SETQ dado1 "100")
)

que quer dizer :

Se a varivel 'dado1' tiver valor, isto , for


diferente de 'nil', ento 'nil', isto , no faa
nada. Caso contrrio, atribua varivel 'dado1'
o valor de "100"

**************************************************************************************
SET_TILE a funo AutoLISP que insere um valor em um 'tile' de um
quadro de dilogo.
Neste exemplo, os tiles so do tipo 'edit_box', ou campo de edio
de textos.
**************************************************************************************
ACTION_TILE a funo AutoLISP que permite chamar uma funo 'callback'
ao se selecionar um 'tile' em um quadro de dilogo do AutoCAD.
A expresso
(ACTION_TILE
"dado1"
"(SETQ dado1 $value)(check_number dado1)"
)

significa o seguinte :
execute as expresses
(SETQ dado1 $value)(check_number dado1)
para o tile cuja identificador, ou $key, "dado1"

Observe que os parmetros para ACTION_TILE so dois strings:


o primeiro a chave do tile, exatamente como definido
no arquivo .DCL e o segundo um string representando
expresses vlidas para o AutoLISP.
**************************************************************************************
DONE_DIALOG a funo do AutoLISP que se aplica para qualquer um
dos tiles do quadro de dilogo. Normalmente utilizada nos
tiles "cancel", "accept", "help" e "info", mas voc poder
utiliz-la onde quizer.
Ela retorna sempre um inteiro, que poder ser pr-determinado,
caso voc o fornea.
Sintaxe
(DONE_DIALOG [inteiro-de-retorno])

**************************************************************************************
START_DIALOG a funo que retira o quadro de dilogo da tela e retorna
o 'inteiro-de-retorno' especificado por cada chamada da funo
DONE_DIALOG.
Armazenando este 'inteiro-de-retorno' em uma varivel,
podemos encaminhar a rotina para uma opo entre
muitas.
No exemplo acima, a expresso
(SETQ w@ (START_DIALOG))
armazena 'inteiro-de-retorno' em 'w@', sendo que :
w@ = 1 se o usurio clicou o boto "Ok"
w@ = 0 se o usurio clicou o boto "Cancel"
**************************************************************************************
UNLOAD_DIALOG a funo que elimina da memria todo o conteudo do arquivo
.DCL carregado pela funo LOAD_DIALOG e cujo ponteiro identificador
foi, neste exemplo, atribuido varivel 'dh'.
**************************************************************************************
COND uma funo do AutoLISP equivalente "select case" do VB, "case" do
DELPHI, "switch" do C.
Ela avalia as expresses em sequncia e retorna a primeira avaliao
que resultar verdadeira.
Uma alternativa pode ser fornecida, e deve ser inserida em ltimo
lugar, atravs da funo 'T' (que significa TRUE, ou verdadeiro).
Exemplo :
(COND
((> 1 5) (ALERT "1 maior que cinco"))
((< 5 1) (ALERT "5 menor que 1"))
((= "a" "b")
(ALERT "A letra 'a' igual letra 'b'")
)
(T
(ALERT
(STRCAT
"Esta mensagem ser sempre exibida, pois todas"
"\nas expresses anteriores so bobagens..."
)
)
)
)
***************************************************************************************

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 08
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:associacao () (le-arquivo "DXF" ".TXT") (PRINC ))

;| inicio de comentrios

Neste caso, definimos o comando ASSOCIACAO, que executa a funo


le-arquivo, que por sua vez est definida no arquivo LISP001.LSP.
Observe o cdigo fonte desta funo :

(DEFUN le-arquivo (arquivo extensao / arq linha


lista dh w@ narq diretorio
mensagem
)
(SETVAR "CMDECHO" 0)
(SETQ diretorio (SUBSTR extensao 2)
narq nil
narq (FINDFILE
(STRCAT "C:\\CURSO\\" diretorio "\\" arquivo extensao)
)
)
(IF (AND narq (SETQ arq (OPEN narq "r")))
(PROGN
(WHILE (SETQ linha (READ-LINE arq))
(SETQ lista (APPEND lista (LIST linha)))
)
(CLOSE arq)
(IF (> (SETQ dh (LOAD_DIALOG "C:\\CURSO\\DCL\\CURSO.DCL")) 0)
(IF (NEW_DIALOG "curso001" dh)
(PROGN (SET_TILE
"texto"
(SETQ mensagem
(STRCAT "Arquivo C:\\CURSO\\"
diretorio
"\\"
(STRCASE arquivo)
extensao
)
)
)
(START_LIST "lista")
(MAPCAR 'ADD_LIST lista)
(END_LIST)
(SET_TILE "lista" "18")
(ACTION_TILE "accept" "(DONE_DIALOG 2)")
(ACTION_TILE "cancel" "(DONE_DIALOG 0)")
(ACTION_TILE "abrir" "(DONE_DIALOG 1)")
(ACTION_TILE
"help"
"(ALERT (STRCAT \"Este o \" mensagem))"
)
(SETQ w@ (START_DIALOG))
(UNLOAD_DIALOG dh)
(COND ((= w@ 0) (PRINC "\n-> Encerrado..."))
((= w@ 2) (PRINC "\n-> Ok, saindo da rotina..."))
((= w@ 1)
((STARTAPP
(STRCAT "NOTEPAD.EXE"
" C:\\CURSO\\"
diretorio
"\\"
arquivo
extensao
)
)
)
)
)
nil
)
(ALERT "Arquivo DCL no pde ser carregado...")
)
)
(ALERT (STRCAT "C:\\CURSO\\"
diretorio
"\\"
(STRCASE arquivo)
(STRCASE extensao)
" no encontrado!"
)
)
)
(PRINC )
)

e aqui, como esta nica funo usada para criar comandos diversos,
com um nico trabalho...

(DEFUN c:sintaxe () (le-arquivo "SINTAXE" ".TXT") (PRINC ))


(DEFUN c:cur-intro () (le-arquivo "INTRO" ".TXT") (PRINC ))
(DEFUN c:funcoes () (le-arquivo "FUNCOES" ".TXT") (PRINC ))
(DEFUN c:ASSOCiacao () (le-arquivo "DXF" ".TXT") (PRINC ))
(DEFUN c:estrutura () (le-arquivo "ESTRUT" ".TXT") (PRINC ))
(DEFUN c:lisp001 () (le-arquivo "LISP001" ".LSP") (PRINC ))
(DEFUN c:SETVARs () (le-arquivo "SETVAR" ".TXT") (PRINC ))
(DEFUN c:dcls () (le-arquivo "CURSO" ".DCL") (PRINC ))
(DEFUN c:compdcls () (le-arquivo "COMPDCL" ".DCL") (PRINC ))
(DEFUN c:listas () (le-arquivo "LISTAS" ".TXT") (PRINC ))
(DEFUN c:cur-aju () (le-arquivo "CUR-AJU" ".TXT") (PRINC ))
(DEFUN c:forb () (le-arquivo "FORB" ".TXT") (PRINC ))
(DEFUN c:slides () (le-arquivo "SLIDES" ".LSP") (PRINC ))
(DEFUN c:global () (le-arquivo "GLOBAL" ".LSP") (PRINC ))

fim de comentrios
|;

;;-------------------------------------------------------------------------- ARQUIVO 09
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:comenta ()
(ALERT
;|
este trecho um comentrio desde a palavra
'este' e encerrando-se na palavra
'trmino'
|;
"Neste comando existe um comentrio INLINE"
)
);| INICIO DE COMENTARIOS 1
Estas rotinas fazem parte do curso E.Fernal de AutoLISP
http://www.gr-acad.com.br

Demonstraremos como inserir slides em uma imagem de um quadro de dilogo,


atravs do comando 'SLIDES1'
Aps Ok, digite SLIDES1 e tecle Enter para conferir...

A rotina utiliza um arquivo .DCL, que C:\\CURSO\DCL\SLIDES.DCL, cujo


conteudo so as linhas abaixo, at a marca 'EOF'

slides : dialog { label = "Curso E.Fernal de AutoLISP";


:text{label="Como inserir slides";alignment=centered;key="tx1";}
:row{
:column{
:image_button{key="i1";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i4";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i7";width=16;aspect_ratio=0.66;color=0;}}
:column{
:image_button{key="i2";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i5";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i8";width=16;aspect_ratio=0.66;color=0;}}
:column{
:image_button{key="i3";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i6";width=16;aspect_ratio=0.66;color=0;}
:image_button{key="i9";width=16;aspect_ratio=0.66;color=0;}}
}
spacer_1;
:row{
:toggle{key="to1";label="moldura";}
ok_cancel_help;
}}

'EOF de C:\CURSO\DCL\SLIDES.DCL

Criaremos agora o comando SLIDES1 para carregar este dcl e inserir slides no mesmo.
Deveremos ter a biblioteca de slides C:\CURSO\SLB\SLB001.SLB, que dever conter os
slides 'teste1', 'teste2', 'teste3' ... at 'teste9'

FIM DE COMENTARIOS 1
|;
(DEFUN c:slides1 (/ dcl_id dcl_response x moldura flip last_pick)
(SETVAR "CMDECHO" 0)
;;--A funo abaixo um exemplo de uma funo 'call-back', que ser executada ao
;;--se clicar em um elemento do quadro de dilogo, no caso o TOGGLE "to1"
(DEFUN moldura (value / color)
(IF (= value "1")
(SET_TILE
"tx1"
"moldura em resposta funo 'call-back'"
)
(SET_TILE "tx1" "Eliminamos a moldura...")
)
(FOREACH
x '("i1" "i2" "i3" "i4" "i5" "i6" "i7" "i8" "i9")
(SETQ color (COND ((= value "1") 1)
((= value "0") 0)
)
)
(START_IMAGE x)
(FILL_IMAGE 0 0 (DIMX_TILE x) 5 color)
(FILL_IMAGE 0 0 5 (DIMY_TILE x) color)
(FILL_IMAGE
0
(- (DIMY_TILE x) 5)
(DIMX_TILE x)
(DIMY_TILE x)
color
)
(FILL_IMAGE
(- (DIMX_TILE x) 5)
0
(DIMX_TILE x)
(DIMY_TILE x)
color
)
(END_IMAGE)
)
)
;;--FIM DA FUNO 'call-back' QUE SER EXECUTADA AO SE CLICAR NO toggle
;;--Inicio da funo 'call-back' flip
(DEFUN flip (key)
(IF last_pick
(MODE_TILE last_pick 4)
)
(MODE_TILE key 4)
(SETQ last_pick key)
(SET_TILE "tx1" (STRCAT "Iluminando a imagem " key))
)
;;--FIM DE flip
(IF (> (SETQ dcl_id (LOAD_DIALOG "c:\\curso\\dcl\\slides.dcl"))
0
)
(IF (NEW_DIALOG "slides" dcl_id)
(PROGN
;|
(ALERT (STRCAT "dx = "
((ITOA (DIMX_TILE "i1"))
"\ndy = "
((ITOA (DIMY_TILE "i1"))
)
)
;; (DIMX_TILE = 96
;; (DIMY_TILE = 63
|;
(FOREACH
x '("i1" "i2" "i3" "i4" "i5" "i6" "i7" "i8" "i9")
(START_IMAGE x)
(SLIDE_IMAGE
5
5
(- (DIMX_TILE x) 5)
(- (DIMY_TILE x) 10)
(STRCAT "c:\\curso\\slb\\slb001(teste" (SUBSTR x 2) ")")
)
(END_IMAGE)
)
(FOREACH
x '("i1" "i2" "i3" "i4" "i5" "i6" "i7" "i8" "i9")
(ACTION_TILE x "(flip $key)")
)
(ACTION_TILE "to1" "(moldura $value)")
(ACTION_TILE "accept" "(DONE_DIALOG 1)")
(ACTION_TILE "cancel" "(DONE_DIALOG 0)")
(ACTION_TILE
"help"
"(ALERT \"Mensagem para ajuda deve ser aqui, ou ento utilizar uma funo call-back\")"
)
(SETQ dcl_response (START_DIALOG))
(UNLOAD_DIALOG dcl_id)
(COND ((= dcl_response 0)
(ALERT "Voc saiu apertando 'Cancel'...")
)
((= dcl_response 1)
(ALERT "Programar algo de til neste campo...")
)
)
)
nil
)
(ALERT
"Arquivo C:\\CURSO\\DCL\\SLIDES.DCL no pde ser carregado..."
)
)
(PRINC )
)

;;-------------------------------------------------------------------------- ARQUIVO 10
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:slides2 (/ dh w@ ajuda


executiva-aqui bloco-a-inserir
lista selecionar
)
(SETVAR "CMDECHO" 0)
(SETQ p1 nil
lista '()
bloco-a-inserir nil
)
;;---------------------------------------------------------------
;;funcoes locais, exigidas se o usurio pressionar o boto "Help"
;;ou o boto "Ok"
;;
;; A funo abaixo ser disparada toda vez que o usurio clicar no botao "Help"
(DEFUN ajuda ()
(ALERT
(STRCAT "Este texto pode ser substituido por uma mensagem mais"
"\nadequada cada uma das rotinas."
"\nEste somente um exemplo..."
)
)
)
;; A funo abaixo ser executada toda vez que o usurio clicar um item
;; na lista de blocos disponveis...
(DEFUN selecionar (value / dx dy)
(SETQ bloco-a-inserir (NTH (ATOI value) lista)
dx (DIMX_TILE "imagem")
dy (DIMY_TILE "imagem")
)
;;(ALERT (STRCAT "Dx = " ((ITOA dx) "\nDy = " ((ITOA dy)))
;; ALERT acima retornou dx = 180 e dy = 180
(SET_TILE "saida" (STRCAT "Inserir " bloco-a-inserir))
(START_IMAGE "imagem")
(FILL_IMAGE 0 0 dx dy 0)
(SLIDE_IMAGE
0
0
dx
dy
(STRCAT "c:\\curso\\slb\\slb001(" bloco-a-inserir ")")
)
(END_IMAGE)
bloco-a-inserir
)
;; A funo abaixo ser disparada se o usurio clicar no boto "Ok"
(DEFUN executiva-aqui (/ p1)
(IF bloco-a-inserir
(IF (SETQ
p1 (GETPOINT "\n-> Selecione ponto de insero do bloco : ")
)
(ALERT
(STRCAT
"Voc forneceu o ponto..."
"\nNeste trecho, a rotina dever ser programada para"
"\ninserir o bloco selecionado, se encontrado..."
"\nIsto dever ser feito substituindo-se este 'ALERT' por"
"\nexpresses AutoLISP que localizem o arquivo externo e/ou"
"\no bloco na tabela de blocos, inserindo-o ou com o comando"
"\n'INSERT' ou usando a funo (ENTMAKE '((0 . \"INSERT\")....))"
"\nO comandos SLIDES3 uma rplica deste, inserindo blocos...")
)
(ALERT "Ponto de insero no foi fornecido...")
)
(ALERT "Bloco no foi selecionado...")
)
)
;;-----------------------------------------FIM DAS FUNCOES LOCAIS
(IF (> (SETQ dh (LOAD_DIALOG "C:\\CURSO\\DCL\\SLIDES2.DCL")) 0)
(IF (NEW_DIALOG "slides2" dh) ; o nome do quadro tem que ser exatamente o
; mesmo do arquivo .DCL, inclusive respeitando
; minsculas e masculas
(PROGN ;; Criamos uma lista com o nome dos blocos disponveis
(SETQ lista '("Bloco1" "Bloco2" "Bloco3"
"Bloco4" "Bloco5" "Bloco6"
"Bloco7" "Bloco8" "Bloco9"
"Bloco10"
)
)
;; Inserimos esta lista no campo 'list_box' do quadro de dilogo
(START_LIST "lista") ; esta chave "lista" deve ser exatamente igual
; ao que foi escrito no arquivo .DCL
(MAPCAR 'ADD_LIST lista)
(END_LIST)
;; Ok, a lista foi inserida no quadro de dilogo.
(ACTION_TILE "accept" "(DONE_DIALOG 1)")
(ACTION_TILE "cancel" "(DONE_DIALOG 0)")
(ACTION_TILE "lista" "(selecionar $value)")
(ACTION_TILE "help" "(ajuda)")
;;apertar "Help" dispara a funcao 'ajuda'
(SETQ w@ (START_DIALOG))
;;Aqui o quadro de dilogo retirado
; da tela
(UNLOAD_DIALOG dh)
;;e aqui, o arquivo DCL eliminado da memria
(COND ((= w@ 0) (PRINC "\n-> Cancelado..."))
;; Aqui o usurio apertou "Cancel"
((= w@ 1) (executiva-aqui))
;; Aqui o usurio apertou "Ok"
)
)
nil
)
(ALERT
"Arquivo C:\\CURSO\\DCL\\SLIDES2.DCL no pde ser carregado..."
)
)
(PRINC )
)

;;-------------------------------------------------------------------------- ARQUIVO 11
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------

(DEFUN c:txt1 (/ p1 p2 dh w@
ang pmedio altura estilo expert
string oldlay dcl-da-string path
meu_error old-error afonte
)
(SETVAR "CMDECHO" 0)
;;------------------------------------- Incio de COMENTRIOS 0
;; Abaixo definimos uma funo de erro, para o caso do usurio,
;; no meio da rotina, clicar'ESC' ou 'CTRL + C'. Assim, prevenimos
;; o trace do AutoLISP, bem como restauramos as variveis modificadas
;; por necessidade da rotina, e ainda descarregamos o arquivo .DCL
;; da memria...
;;
;; Lembrar que *error* uma funo do AutoLISP que pode ser redefinida...
;;
;;------------------------------------- Fim de COMENTRIOS 0
(DEFUN meu_error (msg)
(PRINC "\n-> Erro : ")
(PRINC msg)
(PRINC )
(IF expert
(SETVAR "EXPERT" expert)
)
(IF estilo
(SETVAR "TEXTSTYLE" estilo)
)
(IF dh
(UNLOAD_DIALOG dh)
)
(PRINC )
)
(SETQ old-error *error*
*error* meu_error
)
;;------------------------------------- Incio de COMENTRIOS 1
;; A funo 'dcl-da-string' lana o quadro de dilogo para insero
;; do texto a ser escrito. Este armazenado na varivel 'STRING',
;; e retornado por esta funo.
;;------------------------------------- Fim de COMENTRIOS 1
(DEFUN dcl-da-string ()
(IF (NEW_DIALOG "txt1" dh)
(PROGN (SETQ string nil)
(ACTION_TILE "texto" "(SETQ string $value)")
(ACTION_TILE "accept" "(DONE_DIALOG)")
(START_DIALOG)
)
(ALERT
"Erro : Arquivo SUPPORT\\DCL-TXT1.DCL no pde ser escrito..."
)
)
string
)
;;------------------------------------- Incio de COMENTRIOS 2
;;
;; o trecho ABAIXO localiza o diretrio SUPPORT do AutoCAD e
;; armazena seu path na varivel 'path'.
;; Caso o arquivo DCL 'DCL-TXT1.DCL' no exista neste diretrio,
;; ele ser escrito. Este um MODO DE GARANTIR a existncia de
;; pequenos arquivos DCL.
;;
;;------------------------------------- Fim de COMENTARIOS 2
(SETQ path (SUBSTR (FINDFILE "ACAD.PAT")
1
(- (STRLEN (FINDFILE "ACAD.PAT")) 8)
)
)
(IF ((NOT (FINDFILE (STRCAT path "DCL-TXT1.DCL")))
(PROGN
(SETQ arq (OPEN (STRCAT path "DCL-TXT1.DCL") "w"))
(PRINC "txt1 : dialog { label = \"Curso E.Fernal de AutoLISP\";\n"
arq
)
(PRINC "initial_focus = \"texto\";\n" arq)
(PRINC
":edit_box { label = \"Texto = \"; key = \"texto\"; edit_width = 40; \n"
arq
)
(PRINC "allow_accept = true;\n" arq)
(PRINC "is_tab_stop = false; }\n" arq)
(PRINC "ok_only;}" arq)
(CLOSE arq)
(SETQ arq nil)
)
nil
)
;; O arquivo DCL-TXT1.DCL, SE NO EXISTIA, AGORA EXISTE...
(SETQ path nil
dh nil
dh (LOAD_DIALOG "DCL-TXT1.DCL")
; agora carregamos o arquivo DCL para a memria
)
;;-------------------------------------- Inicializamos a altura_da_fonte, se
;;-------------------------------------- esta varivel ainda no existir....
;;-------------------------------------- Ela ser o valor por DEFAULT
(IF ((NOT altura_da_fonte)
(SETQ altura_da_fonte 12.5)
)
;;-------------------------------------- Fim da inicializao
;;--------------- Aqui pedimos a altura para os textos.
;;--------------- Caso o usurio tecle enter sem entrar com
;;--------------- um valor vlido, altura_da_fonte ser adotada...
(SETQ altura (GETREAL (STRCAT "\n-> Favor indicar a altura da fonte < "
(RTOS altura_da_fonte 2 6)
">:"
)
)
estilo (GETVAR "TEXTSTYLE")
expert (GETVAR "EXPERT")
oldlay (GETVAR "CLAYER")
)
(IF (OR ((NOT altura) ;Se no houver 'altura'...
(= altura 0.0) ;Ou se ela for zero
(MINUSP altura) ;Ou ainda se for um nmero negativo...
)
(SETQ altura altura_da_fonte) ;Ento 'altura' ser altura_da_fonte!
)
(SETQ altura_da_fonte altura) ;E 'altura_da_fonte' ser 'altura', assim
;'altura' ser tornada DEFAULT...
;;----------------------------------------------------------------------------------
;;--------------------------- Se a camada 'TEXTOS-MAPAS' no existir, ser criada...
(IF (NULL (TBLSEARCH "LAYER" "TEXTOS-MAPAS"))
(COMMAND "_.LAYER" "M" "TEXTOS-MAPAS" "S" oldlay "")
)
;;----------------------------------------------------------------------------------
;;--------------------------- Se o estilo 'VERDANA' no existir, ser criado...
(SETVAR "EXPERT" 5)
(IF (NULL (TBLSEARCH "style" "VERDANA"))
(COMMAND "style" "VERDANA" "ROMANS.SHX" 0.0 1.0 0.0 "N" "N" "N")
nil
)
(SETQ retorno (TBLSEARCH "style" "VERDANA"))
;;-------------------- Eis um possvel 'RETORNO'
;|
((0 . "style")
(2 . "VERDANA")
(70 . 0)
(40 . 7.77)
(41 . 1.0)
(50 . 0.0)
(71 . 0)
(42 . 7.77)
(3 . "ROMANS.SHX")
(4 . "")
)
|;
;;-------------------- Precisamos verificar se a 'altura' ZERO...
(SETQ afonte (CDR (ASSOC 40 retorno)))
;;----------------------------------------------------------------------------------
;;Agora iniciamos o LOOPING 'WHILE'. Enquanto fornecermos P1, ele solicitar P2 e, se
;;este for fornecido, ir solicitar o texto por intermdio de um quadro de dilogo e
;;o escrever. Se o texto for vazio, isto , um string "", ele no ser escrito.
;;----------------------------------------------------------------------------------
(WHILE (SETQ p1 (GETPOINT "\n-> Primeiro ponto referencial : "))
(IF (SETQ p2 (GETPOINT p1 "\n-> Segundo ponto referencial : "))
(PROGN (SETQ ;;------------------ Localizamos o ponto mdio de P1 e P2
pmedio (POLAR p1 (ANGLE p1 p2) (/ (DISTANCE p1 p2) 2.0))
;;------------------ Calculamos o ngulo entre P1 e P2
ang (ANGLE p1 p2)
;;------------------ Sempre ajustamos o ngulo 'ang' do texto...
ang (COND ((AND (>= ang 0.0) (<= ang (* PI 0.5))) ang)
((< ang (* PI 1.5)) (+ ang PI))
(T ang)
)
;;------------------ eliminamos 'string' para garantir um novo
;;------------------ fornecimento de 'string'
string nil
)
;;---------------- Aqui solicitamos o 'string' a escrever...
(dcl-da-string)
;;---------------- O string vlido?
(IF (AND string (> (STRLEN string) 0))
;;---------------- Sim, vlido...
;;---------------- Usamos 'COMMAND' para escrever o texto...
(IF (= afonte 0.0)
;;----------------- O estilo tem altura 0.0, ento o texto ser
;;----------------- escrito com a altura solicitada...
(COMMAND "_.TEXT"
"MC"
"_NON"
pmedio
altura
(* 180.0 (/ ang PI))
string
"_.CHPROP"
(ENTLAST)
""
"LA"
"TEXTOS-MAPAS"
""
)
;;----------------- O estilo 'VERDANA' tem altura definida, ento esta
;;----------------- prevalecer para o texto...
(COMMAND "_.TEXT"
"MC"
"_NON"
pmedio
(* 180.0 (/ ang PI))
string
"_.CHPROP"
(ENTLAST)
""
"LA"
"TEXTOS-MAPAS"
""
)
)
;;--------------------- No, o string invlido.
;;--------------------- Ento retornamos 'NIL'
nil
)
)
(ALERT "P2 no fornecido, recomeando...")
; P2 inexistente, volta ao 'WHILE'
)
;;----------------------- No forneceu P1, ento encerra o looping 'WHILE'...
)
;;----------------------------------------- Agora reconfiguramos o AutoCAD tal
;;----------------------------------------- como estava...
(IF estilo
(SETVAR "textstyle" estilo)
)
(IF expert
(SETVAR "EXPERT" expert)
)
;;----------------------------------------- E aqui, descarregamos o DCL da memria...
(IF dh
(UNLOAD_DIALOG dh)
)
;;----------------------------------------- Restabelecemos *error* ao original...
(SETQ *error* old-error)
(PRINC )
)
;;----------------- A est!!!!!!!
;;-----------------
;;-----------------EOF de txt1.lsp

;;-------------------------------------------------------------------------- ARQUIVO 12
;; Curso E.Fernal de AutoLISP
;; efernal@gr-acad.com.br
;; http://www.gr-acad.com.br
;; NO ALTERE ESTE ARQUIVO OU A ROTINA PODER NO FUNCIONAR ADEQUADAMENTE...
;; incio da rotina
;;---------------------------------------------------------------------------
;;
;;*****************************************************************************;;
;|
Obs.:
Esta rotina uma rplica do arquivo c:\curso\dup\slides2.lsp,
tendo sido alterada a funo 'EXECUTIVA_AQUI', trocando o (ALERT ...)
por outras mensagens...
Voc pode trocar os paths dos arquivos .dwg, devendo ainda substituir
os slides na biblioteca C:\CURSO\SLB\SLB001, ou mesmo substituindo
paths e bibliotecas.
A lista de blocos poder ser alterada, substituindo-se "Bloco1", "Bloco2",
etc., pelos nomes dos seus blocos...
|;
;;*****************************************************************************;;
(DEFUN c:slides3 (/ dh w@ ajuda
executiva-aqui bloco-a-inserir
lista selecionar
)
(SETVAR "CMDECHO" 0)
(SETQ p1 nil
lista '()
bloco-a-inserir nil
)
;;---------------------------------------------------------------
;;funcoes locais, exigidas se o usurio pressionar o boto "Help"
;;ou o boto "Ok"
;;
;; A funo abaixo ser disparada toda vez que o usurio clicar no botao "Help"
(DEFUN ajuda ()
(ALERT
(STRCAT "Este texto pode ser substituido por uma mensagem mais"
"\nadequada cada uma das rotinas."
"\nEste somente um exemplo..."
)
)
)
;; A funo abaixo ser executada toda vez que o usurio clicar um item
;; na lista de blocos disponveis...
(DEFUN selecionar (value / dx dy)
(SETQ bloco-a-inserir (NTH (ATOI value) lista)
dx (DIMX_TILE "imagem")
dy (DIMY_TILE "imagem")
)
;;(ALERT (STRCAT "Dx = " ((ITOA dx) "\nDy = " ((ITOA dy)))
;; ALERT acima retornou dx = 180 e dy = 180
(SET_TILE "saida" (STRCAT "Inserir " bloco-a-inserir))
(START_IMAGE "imagem")
(FILL_IMAGE 0 0 dx dy 0)
(SLIDE_IMAGE
0
0
dx
dy
(STRCAT "c:\\curso\\slb\\slb001(" bloco-a-inserir ")")
)
(END_IMAGE)
bloco-a-inserir
)
;; A funo abaixo ser disparada se o usurio clicar no boto "Ok"
(DEFUN executiva-aqui (/ p1)
(IF bloco-a-inserir
(IF (SETQ
p1 (GETPOINT "\n-> Selecione ponto de insero do bloco : ")
)
;;*******************************************************************
;|
(ALERT
(STRCAT
"Voc forneceu o ponto..."
"\nNeste trecho, a rotina dever ser programada para"
"\ninserir o bloco selecionado, se encontrado..."
"\nIsto dever ser feito substituindo-se este 'ALERT' por"
"\nexpresses AutoLISP que localizem o arquivo externo e/ou"
"\no bloco na tabela de blocos, inserindo-o ou com o comando"
"\n'INSERT' ou usando a funo (ENTMAKE '((0 . \"INSERT\")....))"
"\nO comandos SLIDES3 uma rplica deste, inserindo blocos...")
)
|;
;; acima, o trecho que foi substituido
;; abaixo, o trecho que entrou -> (COND ...)
;;*******************************************************************
(COND
((TBLSEARCH "BLOCK" bloco-a-inserir)
(COMMAND "_.INSERT" bloco-a-inserir "_NON" p1 1.0 1.0 pause)
)
((FINDFILE
(STRCAT "C:\\CURSO\\DWG\\" bloco-a-inserir ".DWG")
)
(COMMAND
"_.INSERT"
(FINDFILE
(STRCAT "C:\\CURSO\\DWG\\" bloco-a-inserir ".DWG")
)
"_NON"
p1
1.0
1.0
pause
)
)
(T
(ALERT
"Bloco no est presente no desenho e no foi encontrado em C:\\CURSO\\DWG\\"
)
)
)
;; fim do trecho que entrou...
(ALERT "Ponto de insero no foi fornecido...")
)
(ALERT "Bloco no foi selecionado...")
)
)
;;-----------------------------------------FIM DAS FUNCOES LOCAIS
(IF (> (SETQ dh (LOAD_DIALOG "C:\\CURSO\\DCL\\SLIDES2.DCL")) 0)
(IF (NEW_DIALOG "slides2" dh) ; o nome do quadro tem que ser exatamente o
; mesmo do arquivo .DCL, inclusive respeitando
; minsculas e masculas
(PROGN ;; Criamos uma lista com o nome dos blocos disponveis
(SETQ lista '("Bloco1" "Bloco2" "Bloco3"
"Bloco4" "Bloco5" "Bloco6"
"Bloco7" "Bloco8" "Bloco9"
"Bloco10"
)
)
;; Inserimos esta lista no campo 'list_box' do quadro de dilogo
(START_LIST "lista") ; esta chave "lista" deve ser exatamente igual
; ao que foi escrito no arquivo .DCL
(MAPCAR 'ADD_LIST lista)
(END_LIST)
;; Ok, a lista foi inserida no quadro de dilogo.
(ACTION_TILE "accept" "(DONE_DIALOG 1)")
(ACTION_TILE "cancel" "(DONE_DIALOG 0)")
(ACTION_TILE "lista" "(selecionar $value)")
(ACTION_TILE "help" "(ajuda)")
;;apertar "Help" dispara a funcao 'ajuda'
(SETQ w@ (START_DIALOG))
;;Aqui o quadro de dilogo retirado
; da tela
(UNLOAD_DIALOG dh)
;;e aqui, o arquivo DCL eliminado da memria
(COND ((= w@ 0) (PRINC "\n-> Cancelado..."))
;; Aqui o usurio apertou "Cancel"
((= w@ 1) (executiva-aqui))
;; Aqui o usurio apertou "Ok"
)
)
nil
)
(ALERT
"Arquivo C:\\CURSO\\DCL\\SLIDES2.DCL no pde ser carregado..."
)
)
(PRINC )
)
;; Exemplos de listas...

(SETQ lista1 '(1 2 3 4 5 6 7 8 9 10))

;; Lista1 ; retorna (1 2 3 4 5 6 7 8 9 10)

(CAR lista1) ; retorna 1


(CADR lista1) ; retorna 2
(CADDR lista1) ; retorna 3
(CADDDR lista1) ; retorna 4
(CDR lista1) ; retorna (2 3 4 5 6 7 8 9 10)
(CDDR lista1) ; retorna (3 4 5 6 7 8 9 10)
(CDDDR lista1) ; retorna (4 5 6 7 8 9 10)
(REVERSE lista1) ; retorna (10 9 8 7 6 5 4 3 2 1)
(MEMBER 3 lista1) ; retorna (3 4 5 6 7 8 9 10)
(MEMBER 8 lista1) ; retorna (8 9 10)
(NTH 0 lista1) ; retorna 1
(NTH 1 lista1) ; retorna 2
(NTH 2 lista1) ; retorna 3
(NTH 3 lista1) ; retorna 4
(NTH 4 lista1) ; retorna 5
(NTH 5 lista1) ; retorna 6
(NTH 6 lista1) ; retorna 7
(NTH 7 lista1) ; retorna 8
(NTH 8 lista1) ; retorna 9
(NTH 9 lista1) ; retorna 10
(NTH 10 lista1) ; retorna nil
(LAST lista1) ; retorna 10

(SETQ lista2 (LIST 1 2 3 4 5 6 7 8 9 10))

;; Lista2 retorna (1 2 3 4 5 6 7 8 9 10)

(SETQ a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10)
(SETQ lista3 (LIST a b c d e f g h i j))

;; Lista3 retorna (1 2 3 4 5 6 7 8 9 10)

(SETQ lista4
'(("PARAFU1" 16)
("PARAFU2" 20)
("PARAFU3" 25)
("PARAFU4" 30))

;; Lista4 retorna (("PARAFU1" 16)("PARAFU2" 20)("PARAFU3" 25)("PARAFU4" 30))

(ASSOC "PARAFU1" lista4) ; retorna ("PARAFU1" 16)


(CAR (ASSOC "PARAFU1" lista4)) ; retorna "PARAFU1"
(CADR (ASSOC "PARAFU1" lista4)) ; retorna 16
Programando quadros de dilogo. A linguagem DCL. Cdigos fonte de
exemplos diversos, comeando com quadros muito simples at os
mais complicados...

Primeira parte...

Em DCL, todas as palavras reservadas devem estar em minsculas.


Os valores de chaves ['key'] e rtulos ['label'], alm do prprio nome
do dilogo, podem estar em maisculas ou minsculas. No poder
haver, em uma definio de quadro de dilogo, 'keys' com o mesmo
nome. Se isto ocorrer, o usurio receber a mensagem 'Redefining
key...' em sua rotina AutoLISP, alm do que voc ter uma
indefinio dentro de sua rotina.
As palavras "LAYER", "Layer", "LAyer" e "LAYer" so todas distintas e
poderiam ser usadas em uma mesma definio de quadro de dilogo.

Cdigo fonte do quadro de dilogo acima...

dup1_01 : dialog
{
label = "E.Fernal Software";
initial_focus = "ins-val";
: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
ok_cancel_help;
}

Cdigo fonte do quadro de dilogo acima...

dup1_02 : dialog
{ label = "E.Fernal Software";
initial_focus = "ins-val";
: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
: radio_row { label = "Unidade mtrica";
: radio_button { label = "Milmetros"; key = "mm"; value = 1; }
: radio_button { label = "Centmetros"; key = "cm"; }
: radio_button { label = "Metros"; key = "me"; }
}
: spacer { width = 0.75; }
ok_cancel_help;
}
Cdigo fonte do quadro de dilogo acima...

dup1_03 : dialog
{ label = "E.Fernal Software";
initial_focus = "ins-val";
: edit_box { label = "Insira valor"; key = "ins-val"; edit_width = 12; }
: radio_row { label = "Unidade mtrica";
: radio_button { label = "Milmetros"; key = "mm"; value = 1; }
: radio_button { label = "Centmetros"; key = "cm"; }
: radio_button { label = "Metros"; key = "me"; }
}
: spacer { width = 0.75; }
: row
{
: button { label = "Layer >"; key = "la"; fixed_width = true; }
: text { label = ""; key = "LA"; width = 35; }
}
: spacer { width = 0.75; }
ok_cancel_help;
}

;|
INCIO DE COMENTRIOS

'dup1_03' o nome do quadro de dilogo. Este nome dever ser digitado, em sua
rotina AutoLISP, exatamente como est neste arquivo dcl, no trecho

(NEW_DIALOG "dup1_03" dcl_id)

Caso contrrio, o carregamento deste quadro de dilogo fracassar.


'initial_focus' ativa o campo 'edit_box' cuja 'key' "ins-val". Ao ser lanado,
o usurio poder imediatamente digitar o valor deste campo.
'radio_row' abre uma caixa para uma linha de radio_buttons. Neste caso, inserimos
3 destes componentes. Eles so excludentes : smente um poder estar assinalado.
O retorno "1" para assinalado e "0" para vasio. Neste caso poderemos tambm
atribuir uma varivel, no caso 'unidade_metrica', a chave do componente
assinalado
EXEMPLO :

(FOREACH x '("mm" "cm" "me")


(ACTION_TILE x "(SETQ unidade_metrica $key)")
)

Colocamos um espaamento de 0.75 simplesmente por motivos estticos...


'row' nos permite colocar uma srie de componentes em uma linha: neste caso,
temos um 'button' e um 'text'.
Finalmente, usamos um componente definido no arquivo "BASE.DCL" do AutoCAD,
neste caso 'ok_cancel_help', que insere um boto "OK", cuja chave "accept", um
boto
"Cancel", cuja chave "cancel" e, finalmente, um boto "Help", cuja chave
"help"
FIM DE COMENTRIOS
|;

Segunda parte...

Palavras chave da linguagem DCL


Em AZUL, palavras reservadas que indicam componentes
Em VERMELHO, palavras reservadas que indicam atributos dos componentes

@include
diretiva de incluso, permite que voc defina clusters em um arquivo parte,
e o inclua em todas os demais arquivos .DCL
SINTAXE @include "c:\\curso\\dcl\\base.dcl"

alignment
define o alinhamento de componentes de quadros de dilogo.
EXEMPLO : text { label = "Componente 'text' com alinhamento normal"; }
: text { label = "Componente 'text' com alinhamento 'centered'";
alignment = centered; }
: text { label = "Componente 'text' com alinhamento 'right'";
alignment = right; }

O default alinhamento pela esquerda.

allow_accept
propriedade dos tiles tipo 'edit_box', 'image_button' e 'list_box'
ativa o boto cuja propriedade 'is_default' seja 'true', quando um
destes componentes, com 'allow_accept = true', for selecionado
EXEMPLO : edit_box { label = "Digite texto";
key = "texto"; edit_width = 40; edit_limit = 55;
allow_accept = true;
}

aspect_ratio
define a proporo entre largura e altura de um componente 'image' ou
'image_button'
SINTAXE : image { key = "i1"; width = 40; aspect_ratio = 0.75; }

big_increment
aplica-se ao componente do tipo 'slider' e define o menor valor incremental
ao se deslizar o boto interno deste componente
EXEMPLO : slider { key = "Temperatura"; min_value = 0;
max_value = 100; small_increment = 1;
big_increment = 10;
}

boxed_column
abre uma caixa de enquadramento para uma coluna de componentes diversos,
permitindo um rtulo.
SINTAXE : boxed_column { label = "Lineweights";
[...demais componentes aqui...]
}
boxed_radio_column
abre uma caixa de enquadramento para uma coluna de 'radio_button',
permitindo um rtulo.
SINTAXE : boxed_radio_column { label = "Caixa de enquadramento";
[...demais componentes aqui...]
}

boxed_radio_row
abre uma caixa de enquadramento para uma coluna de 'radio_button'
SINTAXE : boxed_radio_row { label = "Iso&metric Snap/Grid";
: radio_button { label = "&left"; key = "left"; }
: radio_button { label = "&Top"; key = "top"; }
: radio_button { label = "&right"; key = "right"; }
}

boxed_row
abre uma caixa de enquadramento para uma linha de componentes diversos
SINTAXE : boxed_radio_row { label = "boxed_row";
[...demais-componentes aqui...]
}

button
insere um boto
SINTAXE : button { label = "Cores"; key = "btn1"; width = 12; }
cancel_button
insere um boto "Cancel"
SINTAXE cancel_button;

centered
propriedade de um alinhamento
EXEMPLO : text { label = "Escolha bloco"; alignment = centered; }

color
define a cor de um quadro de imagem 'image' ou 'image_button'
SINTAXE : image { key = "i1"; color = 0; width = 40; aspect_ratio = 0.5; }

color_palette_1_7 vide no BASE.DCL do AutoCAD


color_palette_1_9 vide no BASE.DCL do AutoCAD
color_palette_0_9 vide no BASE.DCL do AutoCAD
color_palette_250_255 vide no BASE.DCL do AutoCAD

column
abre uma coluna para componentes diversos
SINTAXE : column {
[...demais componentes aqui...]
}

concatenation
concatena strings em um componente 'text'
EXEMPLO : concatenation {

default_button vide no BASE.DCL do AutoCAD

default_dcl_settings
dialog
define um quadro de dilogo
SINTAXE MEU_DCL_01 : dialog { label = "Dcl nmero 1";
: text { label = "Teste de dcl"; alignment = centered; }
ok_only;
}

edit12_box vide no BASE.DCL do AutoCAD


edit32_box vide no BASE.DCL do AutoCAD

edit_box
abre um campo de edio de texto
SINTAXE : edit_box { label = "edit_box"; key = "raio";
edit_width = 12; edit_limit = 16;
}

edit_width
define a largura de um componente 'edit_box' - vide acima

errtile
abre um campo 'text' padronizado, cujo 'key' "error".
SINTAXE errtile;

heigth
define a altura de componentes.
EXEMPLO : list_box { label = "Opes"; height = 12; width = 40;
key = "lista";
}

false

fcf_ebox vide no BASE.DCL do AutoCAD


fcf_ebox1 vide no BASE.DCL do AutoCAD
fcf_ibut vide no BASE.DCL do AutoCAD
fcf_ibut1 vide no BASE.DCL do AutoCAD
files_bottomdf vide no BASE.DCL do AutoCAD
files_topdfM vide no BASE.DCL do AutoCAD

fixed_width
assegura que o componente tenha somente a largura mnima necessria
EXEMPLO : button { label = "Largura"; key = "btn1"; fixed_width = true;
}

help_button
insere um boto "Help" padronizado, cujo 'key' "help"
SINTAXE help_button;

icon_image
image
abre um quadro de imagem
SINTAXE : image { key = "img35"; width = 40; aspect_ratio = 0.77;
color = -15;
}

image_block
image_button
abre um quadro de imagem clicvel
SINTAXE : image_button { key = "img36"; width = 40; aspect_ratio = 0.77;
color = -15;
}
info_button
insere um boto "Info" padronizado, cujo 'key' "info"
SINTAXE info_button;

initial_focus
lana o foco sobre o tile especificado
SINTAXE initial_focus = "componente";

is_cancel
define um componente qualquer como componente de saida
EXEMPLO : button { label = "Encerra"; key = "sair";
is_cancel = true;
}

is_default
is_tab_stop

is_error_tile vide no BASE.DCL do AutoCAD

key
define a chave para cada um dos componentes
EXEMPLO : edit_box { label = "Altura em mm"; key = "altura";
edit_width = 12; edit_limit = 16;
}

label
define o rtulo de um componente - vide acima

list
insere um 'list_box' ou 'popup_list' com uma lista de strings
EXEMPLO : popup_list { label = "Opes"; key = "pop"; width = 30;
list = "Bloco 1\nBloco 2\nBloco 3\nBloco 4\nBloco 5";
}

list_box
abre um componente 'list'
SINTAXE : list_box { label = "AutoLISP"; key = "lista";
width = 28; height = 16;
}
multiple_select
permite selecionar mais de uma linha em componentes 'list_box' e/ou 'popup_list'
EXEMPLO : list_box { label = "AutoLISP"; key = "lista";
width = 28; height = 16; multiple_select = true;
}
o default 'false' e no precisa ser inserido

ok_button
insere um boto 'OK' padronizado, cujo 'key' "accept"
SINTAXE ok_button;

ok_cancel
insere um par de botes padronizados, sendo o primeiro 'OK' e o segundo
'Cancel', e cujos 'key' so "accept" e "cancel"
SINTAXE ok_cancel;

ok_cancel_help
insere trs botes padronizados, sendo o primeiro 'OK', o segundo
'Cancel' e o terceiro 'Help', e cujos 'key' so "accept", "cancel" e "help"
SINTAXE ok_cancel_help;

ok_cancel_err
insere dois botes, o primeiro 'OK', cujo 'key' "accept", o segundo 'Cancel',
com 'key' igual a "cancel" e uma linha 'errtile', cujo 'key' "error"

ok_cancel_help_errtile
idem acima, com mais um boto "Help", cujo 'key' "help"
ok_cancel_help_info
insere os botoes 'OK', 'Cancel', 'Help' e 'Info', cujos 'keys' so, respectivamente,
"accept", "cancel", "help" e "info"

ok_only
insere um boto 'OK' cujo 'key' "accept", pr-definido no BASE.DCL do AutoCAD

paragraph
popup_list
insere um componente tipo lista
SINTAXE : popup_list { label = "popup_list"; key = "pop1"; }

radio_column
abre uma coluna de 'radio_button'
SINTAXE : radio_column {
: radio_button { label = "Opo 1"; key = "opt1"; }
: radio_button { label = "Opo 2"; key = "opt2"; }
: radio_button { label = "Opo 3"; key = "opt3"; }
: radio_button { label = "Opo 4"; key = "opt4"; }
}

radio_row
abre uma linha de 'radio_button'
SINTAXE : radio_row {
: radio_button { label = "radio_button 1"; key = "opt1"; }
: radio_button { label = "radio_button 2"; key = "opt2";
}
}

retirement_button
right
row
abre uma linha de componentes
SINTAXE : row {
[...demais componentes aqui...]
}

slider
insere um componente deslizante
SINTAXE : slider { key = "sli"; min_value = 1; max_value = 100;
big_increment = 10; small_increment = 1;
}

small_increment
aplica-se ao componente do tipo 'slider' e define o menor valor incremental
ao se deslizar o boto interno deste componente
EXEMPLO : slider { key = "Temperatura"; min_value = 0;
max_value = 100; small_increment = 1;
big_increment = 10;
}

spacer
define um espaamento entre componentes
SINTAXE : spacer { width = 3; }

spacer_0
um 'spacer' com espaamento 0
SINTAXE spacer_0;

spacer_1
um 'spacer' com espaamento 1
SINTAXE spacer_1;

std_rq_color vide no BASE.DCL do AutoCAD

swatch

tabs
aplica-se somente a componentes 'list_box' e 'popup_list', e define, nestes
componentes, os espaos de tabulao de um texto.
EXEMPLO : list_box { label = "Tabela 1"; key = "tabela1";
width = 80; height = 12;
tabs = "8 16 24 32 40";
}

text_part

text_25 vide no BASE.DCL do AutoCAD

toggle
define um componente assinvel
SINTAXE : toggle { label = "Deseja cotar?"; key = "cotar"; value = 1; }

true
define uma propriedade como verdadeira
EXEMPLO : list_box { label = "Selecione"; key = "lista";
width = 40; height = 12;
multiple_select = true;
}

value
inicializa o valor de retorno do componente
EXEMPLO : toggle { label = "Deseja cotar?"; key = "cotar"; value = 1; }
acima, o 'toggle' estar assinalado na abertura do quadro de dilogo e
abaixo, estar desmarcado.
: toggle { label = "Deseja cotar?"; key = "cotar"; value = 0; }
o default 0

width
define a largura de um componente
EXEMPLO : button { label = "Boto"; key = "b1"; width = 30; }

Exemplos diversos

////////// cdigo fonte do quadro de dilogo da esquerda


alo1 : dialog { label = "Como criar quadros de dilogo";
: text { label = "Um quadro bem simples..."; alignment = centered; }
: button { key = "accept";
is_default = true;
label = "OK";
fixed_width = true;
alignment = centered;
}
}
////////// cdigo fonte do quadro de dilogo da direita
alo2 : dialog { label = "Como criar quadros de dilogo";
: text { label = "Um quadro bem simples..."; alignment = centered; }
ok_button;
}

// Next available MSG number is 15


// MODULE_ID BASE_DCL_
/* Next available MSG number is 24 */

// BASE.DCL Version 1.1


//
// Copyright 1991-1994,1996-1997 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software
// for any purpose and without fee is hereby granted, provided
// that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
//.
//
// Define common prototypes and subassemblies for use by
// ACAD.DCL and user-defined dialogs (AutoCAD), and by
// ACLT.DCL (AutoCAD LT).

// (The primitive widgets are set up automatically by init_dialog. The


// equivalent DCL is shown here (commented out) for reference.)

// dialog {
// layout = vertical;
// is_enabled = false;
// }
//
// cluster {
// layout = horizontal;
// }
//
// radio_cluster {
// layout = horizontal;
// is_enabled = true;
// }
//
// tile {
// layout = horizontal;
// is_enabled = true;
// }
//
// text : tile {
// fixed_height = true; // inhibit vertical expansion
// }
//
// image : tile {
// }
//
// button : tile {
// fixed_height = true;
// is_tab_stop = true;
// }
//
// image_button : button {
// is_tab_stop = true;
// }
//
// toggle : tile {
// fixed_height = true;
// is_tab_stop = true;
// }
//
// radio_button : tile {
// fixed_height = true;
// is_tab_stop = true;
// }
//
// list_box : tile {
// is_tab_stop = true;
// height = 10;
// width = 10;
// }
//
// edit_box : tile {
// fixed_height = true;
// is_tab_stop = true;
// }
//
// popup_list : tile {
// is_tab_stop = true;
// fixed_height = true;
// }
//
// slider : tile {
// is_tab_stop = true;
// }
//
// spacer : tile {
// }

//----- Styles of clusters.

row : cluster {
horizontal_margin = none;
vertical_margin = none;
children_alignment = centered;
}

column : cluster {
layout = vertical;
horizontal_margin = none;
vertical_margin = none;
}

boxed_row : cluster {
label = " ";
boxed = true;
children_alignment = centered;
}

boxed_column : cluster {
layout = vertical;
label = " ";
boxed = true;
}

//----- Styles of radio clusters.

radio_row : radio_cluster {
horizontal_margin = none;
vertical_margin = none;
children_alignment = centered;
}
radio_column : radio_cluster {
layout = vertical;
horizontal_margin = none;
vertical_margin = none;
}

boxed_radio_row : radio_cluster {
label = " ";
boxed = true;
children_alignment = centered;
}

boxed_radio_column : radio_cluster {
layout = vertical;
label = " ";
boxed = true;
}

//----- Horizontal and vertical blocks of running text.

concatenation : cluster {
fixed_width = true;
fixed_height = true;
children_alignment = centered;
}

paragraph : cluster {
layout = vertical;
fixed_height = true;
}

text_part : text {
horizontal_margin = none;
vertical_margin = none;
}

text_25 : text {
width = 25;
}

//----- Common spacers.

spacer_0 : spacer {
height = 0;
width = 0;
horizontal_margin = none;
vertical_margin = none;
}

spacer_1 : spacer {
height = 1;
width = 1;
horizontal_margin = none;
vertical_margin = none;
}

//----- The normal default widget.

default_button : button {
is_default = true;
}

//----- Standard prototype for making consistent "dialog retirement buttons".


// Used below for the predefined retirement buttons, and for user-defined
// dialogs that need retirement buttons with specialized verbs.

retirement_button : button {
fixed_width = true;
width = 8;
alignment = centered;
}

//----- Standard dialog retirement buttons. Unless one is building a dialog


// retirement subassembly containing specialized verbs, these will
// normally not be used directly by DCL code outside of base.dcl; use
// the pre-built subassemblies in the next section.

ok_button : retirement_button {
label = " OK ";
key = "accept";
is_default = true;
}

cancel_button : retirement_button {
label = "Cancel";
key = "cancel";
is_cancel = true;
}

help_button : retirement_button {
label = "&Help";
key = "help";
is_help = true;
}

info_button : retirement_button {
label = "&Info...";
key = "info";
}

//----- Pre-built arrays of dialog bottom-line buttons.

ok_only : column {
fixed_width = true;
alignment = centered;
: ok_button {
is_cancel = true;
}
}

ok_cancel : column {
: row {
fixed_width = true;
alignment = centered;
ok_button;
: spacer { width = 2; }
cancel_button;
}
}

ok_cancel_help : column {
: row {
fixed_width = true;
alignment = centered;
ok_button;
: spacer { width = 2; }
cancel_button;
: spacer { width = 2; }
help_button;
}
}

ok_cancel_help_info : column {
: row {
fixed_width = true;
alignment = centered;
ok_button;
: spacer { width = 2; }
cancel_button;
: spacer { width = 2; }
help_button;
: spacer { width = 2; }
info_button;
}
}

//----- Error reporting tiles.

errtile : text {
label = "";
key = "error";
width = 35; // must be long enough to hold error msgs
is_error_tile = true;
}

// A custer consisting of OK, Cancel, and Help on one line with the error tile
// below.

ok_cancel_help_errtile : column {
ok_cancel_help;
errtile;
}

// The same thing without the Help button for subdialogues that have no help
// available.

ok_cancel_err : column {
ok_cancel;
errtile;
}

//----- Currently, the only dcl setting is the audit_level which controls the
// level of semantic error checking applied during a load_dialog operation.
// (0 = none, 1 = errors, 2 = warnings, 3 = hints)
// See AutoCAD's README for details.
default_dcl_settings : tile {
audit_level = 1;
}

//----- Miscellaneous parts used by ACAD.DCL (AutoCAD) & ACLT.DCL (AutoCAD LT).

image_block : image {
key = "show_image";
height = 1;
width = 1;
}

icon_image : image_button {
color = 0;
width = 12;
aspect_ratio = 0.66;
allow_accept = true;
fixed_height = true;
fixed_width = true;
}

edit12_box : edit_box {
edit_width = 12;
edit_limit = 148; // 18 * 8 (CIF/MIF size)
}

edit32_box : edit_box {
edit_width = 32;
edit_limit = 2048; // MAX_VALUE (256 * 8 (CIF/MIF size))
}

// The following are for the color-selection dialogs

swatch : image_button {
vertical_margin = none;
horizontal_margin = none;
fixed_height = true;
fixed_width = true;
height = 1.5;
width = 3;
allow_accept = true;
}

color_palette_1_7 : row { // Standard colors 1-7


: swatch { color = 001; key = "001"; }
: swatch { color = 002; key = "002"; }
: swatch { color = 003; key = "003"; }
: swatch { color = 004; key = "004"; }
: swatch { color = 005; key = "005"; }
: swatch { color = 006; key = "006"; }
: swatch { color = 007; key = "007"; }
}

color_palette_1_9 : row { // Standard colors, plus 8 and 9


color_palette_1_7;
: swatch { color = 008; key = "008"; }
: swatch { color = 009; key = "009"; }
}

color_palette_0_9 : row { // Standard colors, plus 0, 8, and 9


: swatch { color = 000; key = "000"; }
color_palette_1_9;
}

color_palette_250_255 : row { // Grey shades 250-255


: swatch { color = 250; key = "250"; }
: swatch { color = 251; key = "251"; }
: swatch { color = 252; key = "252"; }
: swatch { color = 253; key = "253"; }
: swatch { color = 254; key = "254"; }
: swatch { color = 255; key = "255"; }
}

std_rq_color :column{
:column {
:boxed_row {
fixed_width = true;
label = "Standard Colors";
color_palette_1_9;
}
:row {
:boxed_row {
fixed_width = true;
label = "Gray Shades";
color_palette_250_255;
}
:boxed_row {
fixed_width = true;
label = "Logical Colors";
:button {
label = "BY&LAYER";
key = "256";
}
:button {
label = "BY&BLOCK";
key = "000";
}
}
}
}
:boxed_column {
label = "Full Color Palette";
:image_button{
key = "hiside";
alignment = centered;
width = 40;
height = 4;
allow_accept = true;
is_enabled = false;
}
:image_button{
alignment = centered;
key = "loside";
width = 40;
height = 4;
allow_accept = true;
is_enabled = false;
}
}
:row {
fixed_width = true;
alignment = centered;
children_alignment = bottom;
:edit12_box {
label = "Color:";
key = "color_edit";
allow_accept = true;
}
:swatch {
key = "color_image";
}
}
ok_cancel_help_errtile;
}

// The preceding are for color-selection dialogs

// Top and bottom sub-assemblies for the files dialogue


files_topdf : column {
: edit_box {
key = "pedit";
label = "&Pattern:";
edit_width = 35;
}
: row {
: text {
label = "Directory:";
}
: text {
key = "dirtext";
width = 35;
}
}
}

files_bottomdf : column {
: edit_box {
key = "fedit";
label = "&File:";
allow_accept = true;
}
ok_cancel;
errtile;
}
fcf_ibut : image_button {
horizontal_margin = none;
width = 3.5;
height = 1.2;
color = 0;
alignment = bottom;
}

fcf_ebox : edit_box {
horizontal_margin = none;
edit_width = 7;
fixed_width = true;
alignment = bottom;
}

fcf_ebox1 : edit_box {
horizontal_margin = none;
edit_width = 3;
edit_limit = 3;
fixed_width = true;
alignment = bottom;
}

fcf_ibut1 : image_button {
width = 5.0;
aspect_ratio = 0.66;
color = 0;
allow_accept = true;
}

También podría gustarte