Como criar rotinas LISP para configurar o desenho.
BricsCAD Lisp
Migrar do AutoCAD
Quando você começar a migrar para o BricsCAD, você descobrirá que praticamente não há diferenças no BricsCAD LISP versus OutroLISP. Seu código é carregado e executado, e a funcionalidade é idêntica. As principais diferenças ao “portar” suas aplicações serão algumas etapas menores de configuração, estrutura de linha de Comando, e possivelmente locais dos arquivos. Para começar, vamos revisar a configuração e o lançamento de seus programas existentes no BricsCAD.
Se você estiver iniciando automaticamente seus programas usando o Acad.lsp ou Acaddoc.lsp, você precisará renomeá-los como on_start.lsp ou on_doc_load.lsp respectivamente. A melhor solução é usar on_doc_load.lsp, em vez de on_start.lsp.
Painel de Configurações do BricsCAD
Para ativar o lançamento automático do seu conjunto de programas, defina a variável de sistema ACADLSPASDOC como 1, ou simplesmente alterne a opção em Configurações/Opções do Programa/Sistema:
Também é recomendável que você gaste um pouco de tempo se familiarizando com o menu Opções/Configuração no BricsCAD, pois existem configurações e opções específicas para o ambiente BricsCAD.
A próxima etapa na caixa de diálogo de configurações seria adicionar as pastas de suporte ao caminho de pesquisa dos Arquivos, localizado em Configurações/Opções do Programa/Arquivos:
Recomenda-se usar os caminhos de suporte adicionados da maneira acima e/ou localizados um nível abaixo da pasta atual do projeto. É uma boa prática usar uma função findfile para validar se o arquivo existe antes de prosseguir com seus comandos, como no método abaixo:
Esse é um dos métodos que você pode usar para carregar suas funções sob-demanda dentro do arquivo on_doc_load.lsp :
Esse é um dos métodos que você pode usar para carregar suas funções sob demanda dentro do arquivo on_start.lsp :
O comando DEFUN (DEfine FUNction) tem o mesmo nome da função dentro do seu arquivo on_doc_load.lsp e aquela função redefine a função de chamada quando esta é iniciada.
Rotinas Lisp de Configuração de Desenho para o BricsCAD
Amostra de código
A rotina simples de configuração de desenho abaixo pode ser adaptada às suas necessidades com o mínimo de mudanças.
(defun C:MYSETUP ( / ) ;define the command line function "mysetup"
(setvar "cmdecho" 0)
(command "_audit" "_y") ;audit current drawing
(command "_-purge" "_all" "*" "_n") ;purge all unused styles, etc
(command "_-layer" "_m" "1" "_c" "1" "" "") ; create layer "1" color "1"
(command "_-layer" "_m" "2" "_c" "2" "" "")
(command "_-layer" "_m" "3" "_c" "3" "" "")
(command "_-layer" "_m" "4" "_c" "4" "" "")
(command "_viewres" "_y" "20000") ;set view resolution to maximum
(setvar "filedia" 1) ;turn file dialogs on
(setvar "attdia" 1) ;turn attribute dialogs on
(setvar "attreq" 1) ;enable attribute editing on placement
(setvar "cecolor" "bylayer") ;set current color bylayer
(setvar "clayer" "0") ;set current layer to "0"
(setvar "maxsort" 5000) ;set maximum layer sort to 5,000
(command "_zoom" "_e" "_zoom" "0.95x") ;zoom extents, then out a little
(setvar "cmdecho" 1)
(princ)
)
Cada linha individual nesta rotina de configuração de desenho poderia ter sido digitada na linha de Comando em BricsCAD®. Ao envolvê-los em uma rotina Lisp, o defun (define function) torna a rotina de configuração do desenho "callable" (chamável) a partir de um menu ou por digitação de seu nome na linha de Comando do BricsCAD®.
Se você não incluir defun, o programa será executado uma vez, quando você carrega este pelo seu nome de arquivo. Usar o defun e carregar essa rotina dentro do seu lsp vai tornar a função disponível a qualquer momento, ao digitar o nome da função: mysetup.
Os comandos com traços precedentes (por exemplo -layer e -purge) são usados para impedir que sejam iniciadas as caixas de diálogo do comando.
Note: Sempre use nomes de comando e opções em Inglês, para evitar falhas nas versões localizadas (não-Inglês) do BricsCAD.
Uma boa prática ao abrir arquivos de outras pessoas é executar uma auditoria (audit) INSPECIONAR seguida de uma limpeza (purge) ELIMINAR para remover quaisquer itens não utilizados.
O comando de limpeza ELIMINAR pode ser executado várias vezes para remover itens aninhados. Veja o exemplo abaixo:
(repeat 3 (command "-purge" "all" "*" "n"))
Note:Eliminar é feito antes de adicionar novas camadas, vazias, pois elas seriam removidas se o fizéssemos depois.
As chamadas de comando para definir camadas podem ser combinadas em uma única instrução de comando, mas é mais fácil ler quando cada linha está sozinha.
As chamadas setvar para definir uma variável de sistema para um valor especificado, por exemplo configurações de estilo para dimensões e texto, configurações de unidade, etc.
A configuração maxsort foi introduzida por dois motivos.
Maxsort controla o número máximo de entradas da caixa de diálogo que serão ordenadas.
O valor padrão para maxsort é 1,000. Com os computadores de hoje e os enormes arquivos de projeto frequentemente encontrados, esse número pode ficar muito baixo.
Se você abrir desenhos onde os nomes das camadas não estarão ordenados em ordem alfabética, o valor padrão Maxsort pode ser o motivo!
Um Criador de Camadas mais versátil para sua rotina de instalação de desenhos
O exemplo a seguir pode ser adicionado à sua versão do mysetup.lsp. Ao criar um arquivo de texto simples “Layers.txt” com um editor como o Bloco de Notas, você pode adicionar uma lista de nomes de camadas a ser criados quando a rotina for executada. Esta é uma alternativa ao processo codificado mostrado acima. Usando a função 'Findfile', BricsCAD vai inicialmente pesquisar na pasta atual, e então na sequencia através das pastas de suporte que você definir para encontrar o arquivo layers.txt. Você pode colocar o arquivo de texto de configuração de camada padrão no caminho de suporte e colocar versões alternativas dele em pastas individuais do projeto.
(if (not (findfile "Layers.txt")) ;"not" = looking for no result from findfile
(alert "Can't find Layers.txt!") ;No file? Yell at the user and exit!
(progn ;Otherwise, do the stuff in the progn group
(setq layerfile (open (findfile "Layers.txt") "r")) ;open layers.txt to "read"
(while (setq layername (read-line layerfile)) ;while reading each line, store the text to layername
(command "-layer" "m" layername "") ;make layer with the layername
) ;end the while loop
(close layerfile) ;close the Layers.txt file
) ;end the progn
) ;end the if