• Este fórum é a tradução automática de www.cad3d.it/forum1 - a comunidade italiana de design. Vários termos não foram traduzidos corretamente.

Aplicar a função lisp em blocos selecionados

psluca91

Guest
Boa tarde para todos,

Peço desculpa com antecedência se o assunto já foi tratado em outros tópicos e para a banalidade do assunto, mas eu não fui capaz de encontrar um guia ou discussões que me ajudam através da função de pesquisa.

Escrevi o seguinte lisp tomando o código de outro lisp encontrado na rede:
Código:
;; mudar a cor por camada na respectiva cor e camada "0"
(defun c:ccb (/ b_name col)
(setq b_name (cdr)))
(command "-bedit" b_name)
(setq listobj (sget "x"))

(setq nobj (sslength listobj)

(setq control 0)

(enquanto (< nobj control)




(setq obj (entget (sname listobj control)))
(cor de setq (assoc '62 obj)

(se (= cor nil)
(progn)
(setq objlay (assoc '8 obj)
(setq laycol (cdr (assoc '62 (tblsearch "layer"))))
(command "_change" (cdar obj) "_prop" "_color" laycol ")
);
);

(controle setq (+ control 1))

) ; enquanto encerramento do controlo
(comando "_chprop" "_all" "_layer" 0 "_bclose")
); fechamento extinto
o lisp funciona, mas eu tenho que selecionar os blocos um por um. Como posso fazer para executar o lisp em vários blocos ao mesmo tempo?

Obrigado com antecedência!
 
você nomeia o bloco para mudar para a variável b_name(setq b_name (cdr)))se você quiser selecionar mais de um bloco, você deve primeiro selecionar (por meio de uma coisa como SECÇÃO)
uma lista de blocos e atribuí-los a uma variável, dizemos Blklist.
para não fazer o lisp ir errado, Eu recomendo uma filtragem no ssget que só tomar os blocos (sget(0. "bloco"então conte quantos blocos você selecionou (comprimento Blklist)e uma verificação variável - diga numdefinir um contador que chamaremos contagem a 0 (- Sim. contagem 0)

e, em seguida, embalar todo o seu lisp em uma repetição de quantos itens você tem na lista Blklist

;; mudar a cor por camada na respectiva cor e camada "0"
(defun c:ccb (/ b_name col)

múltipla seleção e número de cálculo de objetos(
repetir num(- Sim. b_name Nome blklist count)
(
- Sim. contagem (+ contagem 1)
...

) ;

); fechamento extinto
 
Crystal, enquanto te agradeço a resposta rápida!

Tentei criar o código como de sua sugestão, mas encontrei erros:

- se imposto (setq blklist (sget '(0 . "block")))))), ele me exclui da seleção (incluindo blocos) e eu não posso, portanto, iniciar o lisp que me dá o seguinte erro: "selecionar objetos: ; erro: mau argumento tipo: lselsetp nil".

- se eu remover o filtro "bloco" e selecionar manualmente os blocos, sempre me dá o mesmo erro... .

Vou recuperar o código de mim.
Código:
;;; câmbia colore blocco e camada 0
(defun c:ccb4 (/ b_name col)
(setq blklist (sget )

(setq num (sslength listaobj)

(setq count 0)

(Repetir número)
(setq b_name ssname blklist count)
(contagem de setq (+ contagem 1))
(command "-bedit" b_name)
(setq listaobj (sget "x"))

(setq nobj (sslength listaobj)

(setq controllo 0)

(enquanto (< controllo nobj)




(setq obj (entget (sname listaobj controllo)))
(cor de setq (assoc '62 obj)

(se (= cor nil)
(progn
(setq objlay (assoc '8 obj)
(setq laycol (cdr)))
(command "_change" (cdar obj) "_prop" "_color" laycol ")
);; chiusura progn
);; chiusura se cor nil

(setq controllo (+ controllo 1))

;;chiusura enquanto controllo
(command "_chprop" "_all" "_layer" 0 "_bclose" "")
) ;
);
Onde estou errado?
 
Encontrei um erro aqui:

setq blklist (sget )

(setq num (sslength listobj)

em:

setq blklist (sget )

(setq num (sslength blklist)

agora o comando começa, mas pára na abertura do bloco, onde parece para mim como o nome do bloco "mudança" e dentro do bloco não há nada. Na barra de comando, esta palavra parece-me:
"comando: ccb4
selecionar objetos: canto oposto: 2 encontrado
selecionar objetos: - O quê?
insira o nome do bloco ou [?]:
Nome de bloco inválido.
Digite o nome do bloco ou [?]: _change regenerando modelo.
comando: <bad entity="" ffa818b0="" name:="">"</bad>
 
(0) “Block” deve se tornar (0 . "inserir") - isto para filtragem

(setq num (sslength) Lista de desejos) - contar o número de entidades para uma lista que não existe. teste substituindo-o com (setq num (sslength Blklist)
 
ho apportato le modificache come da te suggerito, ma continua a bloccarsi all'interno del editor blocchi di un blocco inesistente....

queste le righe di comando che mi escono...

comando: _appload ccb5.lsp carregado com sucesso.
comando: ; error: malformed list on input
comando:
comando: ccb5
selecionar objetos: especificar canto oposto: 2 encontrado
selecionar objetos: - O quê?
insira o nome do bloco ou [?]:
Nome de bloco inválido.
Digite o nome do bloco ou [?]: _change regenerando modelo.
comando: <bad a468a920="" entity="" name:=""></bad>
 
o problema reside no uso do comando bedit.

o nome da entidade que você possui na variável b_name é o nome interior disso e só isso entidade.
se você tiver 5 instâncias do bloco Poplar, você terá 5 valores b_name diferente, não sei se fui claro

para o comando bedit você deve passar o nome do bloco, não o de sua instância, caso contrário bedit acredita que você quer editar um bloco que é chamado <entity 7ff75520dc10="" name:=""></entity> e não Poplar que você quer editar

Como resolver? rapidamente, atribuindo o nome do bloco (não sua instância) a uma nova variável, dizemos Nome_blVier fa?
(setq) Nome_bl (cdr) b_name)

você está dizendo atribuir ao name_bl a parte restante (cdr) do grupo 2 (assoc '2) levando-a da lista completa (entget) da entidade b_name.

neste ponto no bedit você não tem que passar mais b_name, mas name_bl
(command "-bedit" Nome_bl)

No entanto, uma vez que você seleciona um número de blocos diferentes em que haverá mais instâncias do mesmo bloco, você vai se encontrar editando o mesmo bloco já editado várias vezes, e eu não sei se isso pode gerar mais falhas de programa.
você também pode ter problemas em blocos dinâmicos, como estes últimos quando variados em comparação com a "base" tomar um novo nome, tipo anônimo (start for asterisk)

para ter mais velocidade de execução você deve aprofundar o comando tblsearch e tentar obter os nomes dos blocos existentes no projeto para editar uma vez o bloco de origem, não suas instâncias
 

Estatísticas do fórum

Tópicos
58,521
Mensagens
499,056
Membros
104,110
Último membro
ChristianR

Membros online

Nenhum membro online agora.
Voltar
Topo