inserção de blocos por rotinas autolisp

Dicas sobre ObjectDCL...

Moderador: Moderadores

Responder
Avatar do usuário
Orlei
Bronze 1/3
Bronze 1/3
Mensagens: 122
Registrado em: Sáb 24 Jun 2006 12:00:00 am
Localização: Cascavel-Pr

inserção de blocos por rotinas autolisp

Mensagem por Orlei » Ter 11 Jul 2006 10:53:46 am

amigos
tenho uma dúvida e gostaria de ajuda se possivel

sou iniciante no desenvolvimento de aplicações Autolisp
faço aplicações bastante rudimentares, porém funionais para meu trabalho
uso o ACAD.LISP para carregar estas rotinas, porém alguns blocos de desenho
estão em pastas de trabalho (servidor de rede), e que tenho que indicar o path via

Options
Files
Support File Search Path --> Add --> Browse

mais é muito chato ter de digitar os Path cada vez que eu esqueço
de ligar a rede (conectar plug no Notbook) e inicio o Autocad, pois eles apagam estes Path
ficando apenas o Default do Autocad ou aqueles que tem uma Letra especefica F: E: Z:
quando estão no tipo " \\blocos\\desenho eles apagam

o que posso fazer para eles manterem os links ou
tem alguma maneira de instalar estes caminhos automaticamente (via rotina)?

toda ajuda será muito bem vinda

Autocad versão 2004

Avatar do usuário
Rogerio
Master
Master
Mensagens: 2034
Registrado em: Ter 23 Mar 2004 12:00:00 am

Mensagem por Rogerio » Ter 11 Jul 2006 11:58:32 am

Eu usei a parte da rotina que o Neyton postou em outro tópico,

mas ao aplicar o foreach, é acrescentado apenas o último caminho.

Alguém sabe por que?

(defun c:asp (/ path_list tbdir);Add Support file Path

(setq path_list '("c:\\pasta" "c:\\pasta1" "c:\\pasta2"));lista dos caminhos

(foreach tbdir path_list
(if (not (vl-string-search (strcase tbdir) (strcase (setq tmp (getenv "ACAD")))))
(setenv "ACAD" (strcat tmp (if (= ";" (substr tmp (strlen tmp) 1)) "" ";") tbdir)))
)

(princ))

[],

Rogério

Avatar do usuário
Rogerio
Master
Master
Mensagens: 2034
Registrado em: Ter 23 Mar 2004 12:00:00 am

Mensagem por Rogerio » Ter 11 Jul 2006 12:37:31 pm

Uma outra alternativa.

Não sei se funciona com redes.

É direto, não verifica se o caminho já está setado ou não.

Existe uma alternativa como ler os caminhos num arquivo .ini,

mas daí já é mais complicado.

(defun c:ap (/ newpaths)
(setq newpaths ";C:\\MyPath1;C:\\MyPath2");seus caminhos
(setenv "ACAD" (strcat (getenv "ACAD") newpaths))
(princ))

[],

Rogerio

Avatar do usuário
FELIXJM
Bronze 3/3
Bronze 3/3
Mensagens: 327
Registrado em: Ter 05 Abr 2005 12:00:00 am

Mensagem por FELIXJM » Ter 11 Jul 2006 1:11:54 pm

Caros amigos, a rotina do amigo Neyton está correta e funcionou perfeitamente, usei o copiar / colar para gravar o texto do e-mail anterior e funcionou corretamente.

OK.

Avatar do usuário
jc105
Bronze 1/3
Bronze 1/3
Mensagens: 153
Registrado em: Qua 07 Abr 2004 12:00:00 am

Mensagem por jc105 » Ter 11 Jul 2006 7:10:38 pm

sua primeira rotina não funcionou pq a função (setenv "ACAD") adiciona a path mas não atualiza a variavel "acad", aí no segundo laço do seu FOREACH, ele procura a pasta1 no
(getenv "ACAD") que não está atualizado, aí ele adiciona em cima do path adicionado no primeiro laço, o mesmo acontece que terceiro laço, que sobrepõe o segundo laço ficando assim somente a ultima pasta adicionada.

Uma soluçao para este problema seria, vc armazenar em tmp os caminhos adicionados logo no inicio da função, e procurar ... aí vc vai concatenando os caminho novos em tmp e somento no final da sua rotina vc manda adicionar (setenv "ACAD" tmp), já com todos os caminhos concatenados em tmp.

tipo assim:

;--------------------------------------

(defun c:asp (/ path_list tbdir);Add Support file Path

(setq path_list '("c:\\pasta" "c:\\pasta1" "c:\\pasta2");lista dos caminhos
tmp (getenv "ACAD"))
(foreach tbdir path_list
(if (not (vl-string-search (strcase tbdir) (strcase tmp)))
(strcat tmp (if (= ";" (substr tmp (strlen tmp) 1)) "" ";") tbdir))
)
(setenv "ACAD" tmp)
(princ))

;-------------------------------------

não dá para testar aki mas é mais ou menos isto...

mas observe que depois que os arquivos ´forem adicionados a path, se vc digitar a função (getenv "ACAD") no prompt do cad, vai perceber que os mesmo NÃO se encontram lá no "acad"!!! vc pode até fechar o autocad e abrir de novo que eles estaram na path mas não nesta variavel ACAD.
E devido a isto se vc utilizar esta rotina para adicionar outras paths vai sobrepor denovo
valeu...
"Há duas formas para viver sua vida:
Uma é acreditar que não existe
milagre... a outra é acreditar que todas as
coisas são um milagre....."
Albert Einstein 1879 - 1955

Avatar do usuário
Orlei
Bronze 1/3
Bronze 1/3
Mensagens: 122
Registrado em: Sáb 24 Jun 2006 12:00:00 am
Localização: Cascavel-Pr

agradecimento

Mensagem por Orlei » Sex 14 Jul 2006 10:54:37 am

obrigado a todos

funcionou a rotina

e alem de tudo foi uma excelente aula

abraços
Guardem as flores, ainda não foi desta vez
----oo0----0oo---
O talento é importante
o esforço é imprescindível
a determinação é fundamental
----oo0----0oo---

Avatar do usuário
Rogerio
Master
Master
Mensagens: 2034
Registrado em: Ter 23 Mar 2004 12:00:00 am

Mensagem por Rogerio » Sex 14 Jul 2006 12:37:45 pm

jc105 escreveu:sua primeira rotina não funcionou pq a função (setenv "ACAD") adiciona ...

mas observe que depois que os arquivos ´forem adicionados a path, se vc digitar a função (getenv "ACAD") no prompt do cad, vai perceber que os mesmo NÃO se encontram lá no "acad"!!! vc pode até fechar o autocad e abrir de novo que eles estaram na path mas não nesta variavel ACAD.
E devido a isto se vc utilizar esta rotina para adicionar outras paths vai sobrepor denovo
valeu...

Jc, muito obrigado pela explicação.

[],


Rogério

Avatar do usuário
Rogerio
Master
Master
Mensagens: 2034
Registrado em: Ter 23 Mar 2004 12:00:00 am

Mensagem por Rogerio » Sex 14 Jul 2006 12:44:47 pm

Jc, não tinha testado ainda quando respondi.

Mas não adicionou os caminhos.

Se alguém puder dar uma olhada (o JC tem dificuldades para postar).

(defun c:asp (/ path_list tbdir);Add Support file Path

(setq path_list '("c:\\pasta" "c:\\pasta1" "c:\\pasta2");lista dos caminhos
tmp (getenv "ACAD"))
(foreach tbdir path_list
(if (not (vl-string-search (strcase tbdir) (strcase tmp)))
(strcat tmp (if (= ";" (substr tmp (strlen tmp) 1)) "" ";") tbdir))
)
(setenv "ACAD" tmp)
(princ))


Grato,


[],

Rogerio

Avatar do usuário
Rogerio
Master
Master
Mensagens: 2034
Registrado em: Ter 23 Mar 2004 12:00:00 am

Mensagem por Rogerio » Sex 14 Jul 2006 1:28:48 pm

o JC arrumou.

Valeu JC.

[],

Rogerio

Beleza rogerio, é que eu esqueci de armazenar em tmp os caminho concatenados.... agora tá ok!!! segue abaixo!!!

(defun c:asp (/ path_list tbdir);Add Support file Path

(setq path_list '("c:\\pasta" "c:\\pasta1" "c:\\pasta2");lista dos caminhos
tmp (getenv "ACAD"))
(foreach tbdir path_list
(if (not (vl-string-search (strcase tbdir) (strcase tmp)))
(setq tmp (strcat tmp (if (= ";" (substr tmp (strlen tmp) 1)) "" ";") tbdir))
)
)
(setenv "ACAD" tmp)
(princ))

_________________
"Há duas formas para viver sua vida:
Uma é acreditar que não existe
milagre... a outra é acreditar que todas as
coisas são um milagre....."
Albert Einstein 1879 - 1955

Responder