lucianno
2007-10-04, 06:28 PM
em uma rotina lisp, tenho um loop inicial que sera dado em um arquivo
txt enquanto não alcançar a linha final. Dentro desse loop existe
outro que será dado enqto houver objetos que correspondam às
características recuperadas do aquivo txt.
Porém, ao recuperar um propriedade no txt e efetuar a seleção no
desenho, caso o mesmo não exista é retornado um erro e a rotina é
cancelada.
Como poderia tratar esse erro, fazendo o lisp se comportar de maneira
que se um objeto não exista no desenho o loop externo passe para a
próxima linha efetuando tal busca até o final do arquivo.
segue abaixo um trecho do lisp para a verificação:
(while (setq linha (read-line file))
(setq elev (atoi linha)
sel (ssget "x" (list (cons 38 elev)))
)
(if (= sel nil)
(alert "Objeto não encontrado!!!")
)
(while (> (sslength sel) 0)
(setq ent (ssname sel 0))
(command "zoom" "o" ent "")
(new_dialog "dlcPlantio" dclBox)
(action_tile "sim" "(done_dialog 0)")
(action_tile "nao" "(done_dialog 1)")
(setq dlg (start_dialog))
(if (= dlg 0)
(progn
(command "chprop" ent "" "c" 6 "")
)
)
(ssdel ent sel)
)
)
Quando efetuo o comando:
(ssget "x" (list (cons 38 elev)))
e não existe nenhum objeto no desenho com tal propriedade, recebo um
erro, o que causa o cancelamento instantâneo da rotina
impossibilitando o termino do script.
; error: bad argument type: lselsetp nil
Qual seria a saída para tal situação!?!?
sei que existe um função vl-catch-all-apply
qual a forma correta de se usar?
antecipadamente, muito obrigado.
Luciano
txt enquanto não alcançar a linha final. Dentro desse loop existe
outro que será dado enqto houver objetos que correspondam às
características recuperadas do aquivo txt.
Porém, ao recuperar um propriedade no txt e efetuar a seleção no
desenho, caso o mesmo não exista é retornado um erro e a rotina é
cancelada.
Como poderia tratar esse erro, fazendo o lisp se comportar de maneira
que se um objeto não exista no desenho o loop externo passe para a
próxima linha efetuando tal busca até o final do arquivo.
segue abaixo um trecho do lisp para a verificação:
(while (setq linha (read-line file))
(setq elev (atoi linha)
sel (ssget "x" (list (cons 38 elev)))
)
(if (= sel nil)
(alert "Objeto não encontrado!!!")
)
(while (> (sslength sel) 0)
(setq ent (ssname sel 0))
(command "zoom" "o" ent "")
(new_dialog "dlcPlantio" dclBox)
(action_tile "sim" "(done_dialog 0)")
(action_tile "nao" "(done_dialog 1)")
(setq dlg (start_dialog))
(if (= dlg 0)
(progn
(command "chprop" ent "" "c" 6 "")
)
)
(ssdel ent sel)
)
)
Quando efetuo o comando:
(ssget "x" (list (cons 38 elev)))
e não existe nenhum objeto no desenho com tal propriedade, recebo um
erro, o que causa o cancelamento instantâneo da rotina
impossibilitando o termino do script.
; error: bad argument type: lselsetp nil
Qual seria a saída para tal situação!?!?
sei que existe um função vl-catch-all-apply
qual a forma correta de se usar?
antecipadamente, muito obrigado.
Luciano