A idéia basicamente é que cada point group contenha somente os pontos de uma determinada descrição, o que facilita na hora de criar estilos e na hora de fazer as superfícies.
Por exemplo, se criamos um point group chamado árvore, podemos definir o estilo deste com um bloquinho que seja uma árvore. O mesmo com postes por exemplo, já imaginou que bacana? Isso simplifica bastante o acabamento do desenho…
Também facilita no mdt, porque nossa superfície pode não precisar de alguns pontos, por exemplo, os de fundo de boca de lobo…
O duro é criar todos esses point groups….
Que tal um lispezinho pra isso? Veja:
;funcao que devolve um item da colecao, cria se necessario
;byref_is_new é passado por referencia, diz se é novo
(defun get_or_create (collection name byref_is_new / obj)
(VLAX-FOR O COLLECTION
(IF (= (VLA-GET-NAME O) NAME)
(sETQ OBJ O)
))
(IF OBJ (set byref_is_new nil)
(progn (setq obj (vla-add collection name))
(set byref_is_new t)
))
obj
)
;funcao principal
;escaneia os pontos do desenho e cria point groups com estilos
;para cada descricao de pontodiferente
;autor: neyton luiz dalle molle
;http://tbn2.blogspot.com
;requer inivars.lsp
(defun c:pgforall (/ p desc QueryBuilder pointstyle pointgroup novo)
;inicializa o controle de erros
(tbn:error-init nil)
;em todos os pontos do desenho faça
(vlax-for p (cvlp-get-points aec-adoc)
(setq desc (cvlp-get-rawdescription p))
;se adescricao esta setada, faça
(if (/= desc “”)
(progn
;verifica se existe o pointgroup com este nome
(setq pointgroup
(GET_OR_CREATE
(cvlp-get-pointgroups aec-adoc)
desc
‘novo))
;se for criado um novo, entao
(if novo
(progn
;constroi o filtro e o estilo
(setq QueryBuilder (cvlp-get-QueryBuilder pointgroup)
pointstyle (GET_OR_CREATE
(cvlp-get-pointstyles aec-adoc)
desc
‘novo ))
;define as propriedades do novo pointgroup
(cvlp-put-IncludeRawDescriptions QueryBuilder desc)
(cvlp-put-pointstyle pointgroup pointstyle)
(cvlp-put-MarkerSize pointstyle 0.0003)
(prompt (strcat “n” desc))
)
)
)
)
)
;finaliza ocontrole de erros
(tbn:error-restore)
)
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init
tbn:error-restore
funções cvl*
Para rodar, primeiro copie o código fonte acima, bem como aqueles indicados nos links das subrotinas, colando tudo num mesmo arquivo de texto. Use o bloco de notas do windows….
Salve com a extensão .LSP.
Agora carregue no Civil 3D, para isso use o comando APPLOAD. Selecione a lisp que você salvou.
Agora é só chamar na linha de comando: PGFORALL
Note que alem do point group, o programa já cria um estilo correspondente.
Se você não quer o estilo, basta remover essa parte do código… Fica como exercício pra você descobrir como!!!
Isso ainda funciona? Civil 2021?
falta a rotina dos inivars
Neyton, montei a rotina com todas as sub-rotinas e carreguei no Civil 2011 mas na hora que eu carrego ela me a seguinte mensagem:
Command: ; error: bad argument type: stringp nil
e se eu mando executar a seguinte:
Error: no function definition: CVLP-GET-POINTS
isso mesmo:
(= aec-ver "18.1s (LMS Tech)");2011
muito boa a lisp! agora só uma dúvida, pelo que vi no codigo vou ter que adicionar uma linha abaixo ref. a versão de civil que eu uso?
Ex.: (= aec-ver "17.2s (LMS Tech)");2009
(= aec-ver "18.1s (LMS Tech)");2011
é isso mesmo?
grande abraço e parabens.