Opa!!, então, já que eu postei uma lisp para corridors, que tal uma para as pipenetworks agora?
Bom, a idéia é a seguinte: Você desenhou uma pipenetwork, mó grande, aí adicionou labels com o comando AeccAddNetworkPlanLabels e teve de editar alguns tubos, ou estruturas... Em fim..., mas as labels de alguns se perderam... é só usar o mesmo comando certo? Mais ou menos... Se fizer isso, os elementos que já possuem labels terão duas labels após a execução do comando... Até aí não é muito problema, mas se você "strechou" alguma, terá dois textos visíveis na tela, aí, só apagando manualmente...
É serviço pro estagiário, hehehehe
Me pergunto, porque este comando não tem um filtro...
Em fim, uma lisp para colocar label só nos elementos que não tem as benditas:
Note que, com alguns poucos ajustes, dá até para colocar labels específicas, por exemplo, nos tubos, colocamos as labels de costume, com o comprimento, declividade, etc, mas alguns projetos pedem que coloquemos as labels de cota no final do tubo, por exemplo:
Vê a label de cor verde? aqui no Paraná, a sanepar exige que, se num poço de visita o tubo chegue a mais de 70cm da cota de fundo do poço, se faça um tubo de queda.
Bom, a idéia é a seguinte: Você desenhou uma pipenetwork, mó grande, aí adicionou labels com o comando AeccAddNetworkPlanLabels e teve de editar alguns tubos, ou estruturas... Em fim..., mas as labels de alguns se perderam... é só usar o mesmo comando certo? Mais ou menos... Se fizer isso, os elementos que já possuem labels terão duas labels após a execução do comando... Até aí não é muito problema, mas se você "strechou" alguma, terá dois textos visíveis na tela, aí, só apagando manualmente...
É serviço pro estagiário, hehehehe
Me pergunto, porque este comando não tem um filtro...
Em fim, uma lisp para colocar label só nos elementos que não tem as benditas:
mais...
Como de costume, copie ela e salve num arquivo de extensão LSP. Claro que você deve copiar tambem a lisp de controle de erros (aqui), ou comentar as linhas que fazem referência a ela.;função que obtem o ponteiro para a pipenetwork que contem
;o objeto "part", que pode ser um Pipe ou uma Structure
(defun ps->get-pipenetwork (part / AcApp PipeApp versao
PipeDoc net coll pipenetwork)
;primeiro, obtem a collection de networks
;para isso, pega o ponteiro para o documento
;PipeDocument atual:
(setq AcApp (vlax-get-acad-object)
versao (vla-get-version AcApp)
versao (vl-position (substr versao 1 4)
'("18.0" "17.2" "17.1" "17.0"))
versao (nth versao '("7.0" "6.0" "5.0" "4.0"))
PipeApp (vla-GetInterfaceObject AcApp
(strcat "AeccXUiPipe.AeccPipeApplication."
versao))
PipeDoc (vla-get-activedocument PipeApp)
;agora vê que tipo de objeto é:
coll (if (= "AeccDbPipe"
(vla-get-objectname part))
"Pipes"
"Structures")
;pega seu objectid:
partid (vla-get-objectid part))
;em todas as pipenetworks do desenho atual
;procure na coleção correta, qual contem um objeto
;de id igual ao informado:
(vlax-for net (vlax-get-property Pipedoc 'Pipenetworks)
(vlax-for obj (vlax-get-property net coll)
(if (= partid (vla-get-objectid obj))
(setq pipenetwork net))))
;devolve a pipenetwork encontrada:
pipenetwork)
;verifica se o objeto tem alguma label ou não
;se nao tiver, adicione uma:
(defun ps->labelme (obj / s2)
(if (= 0 (vla-get-count (vlax-get-property obj "Labels")))
(progn
;preselecione o objeto:
(setq s2 (ssadd (vlax-vla-object->ename obj) (ssadd)))
(sssetfirst s2 s2 )
;adicione a label:
(command "AeccAddNetworkPartPlanLabel")
(sssetfirst nil nil))))
;função principal:
(defun c:pslabel (/ ss part net)
;obviamente, precisará do vl-load-com:
(vl-load-com)
;inicia o controle de erros:
(tbn:error-init '(("cmdecho" 0) nil))
;pede a seleção de um Pipe ou Structure:
(prompt "\nClique em um tubo ou estrutura")
(setq ss (ssget ":S"
'((0 . "aecc_pipe,aecc_structure")))
part (vlax-ename->vla-object (ssname ss 0))
;determine em que pipenetwork o objeto selecionado está:
net (ps->get-pipenetwork part))
;em todos os tubos desta pipenetwork,
;adicione label se não tiver:
(vlax-for obj (vlax-get-property net "Pipes")
(ps->labelme obj))
;faça o mesmo em todas as estruturas:
(vlax-for obj (vlax-get-property net "Structures")
(ps->labelme obj))
;restaure o controle de erros do cad:
(tbn:error-restore))
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, tbn:error-restore
;o objeto "part", que pode ser um Pipe ou uma Structure
(defun ps->get-pipenetwork (part / AcApp PipeApp versao
PipeDoc net coll pipenetwork)
;primeiro, obtem a collection de networks
;para isso, pega o ponteiro para o documento
;PipeDocument atual:
(setq AcApp (vlax-get-acad-object)
versao (vla-get-version AcApp)
versao (vl-position (substr versao 1 4)
'("18.0" "17.2" "17.1" "17.0"))
versao (nth versao '("7.0" "6.0" "5.0" "4.0"))
PipeApp (vla-GetInterfaceObject AcApp
(strcat "AeccXUiPipe.AeccPipeApplication."
versao))
PipeDoc (vla-get-activedocument PipeApp)
;agora vê que tipo de objeto é:
coll (if (= "AeccDbPipe"
(vla-get-objectname part))
"Pipes"
"Structures")
;pega seu objectid:
partid (vla-get-objectid part))
;em todas as pipenetworks do desenho atual
;procure na coleção correta, qual contem um objeto
;de id igual ao informado:
(vlax-for net (vlax-get-property Pipedoc 'Pipenetworks)
(vlax-for obj (vlax-get-property net coll)
(if (= partid (vla-get-objectid obj))
(setq pipenetwork net))))
;devolve a pipenetwork encontrada:
pipenetwork)
;verifica se o objeto tem alguma label ou não
;se nao tiver, adicione uma:
(defun ps->labelme (obj / s2)
(if (= 0 (vla-get-count (vlax-get-property obj "Labels")))
(progn
;preselecione o objeto:
(setq s2 (ssadd (vlax-vla-object->ename obj) (ssadd)))
(sssetfirst s2 s2 )
;adicione a label:
(command "AeccAddNetworkPartPlanLabel")
(sssetfirst nil nil))))
;função principal:
(defun c:pslabel (/ ss part net)
;obviamente, precisará do vl-load-com:
(vl-load-com)
;inicia o controle de erros:
(tbn:error-init '(("cmdecho" 0) nil))
;pede a seleção de um Pipe ou Structure:
(prompt "\nClique em um tubo ou estrutura")
(setq ss (ssget ":S"
'((0 . "aecc_pipe,aecc_structure")))
part (vlax-ename->vla-object (ssname ss 0))
;determine em que pipenetwork o objeto selecionado está:
net (ps->get-pipenetwork part))
;em todos os tubos desta pipenetwork,
;adicione label se não tiver:
(vlax-for obj (vlax-get-property net "Pipes")
(ps->labelme obj))
;faça o mesmo em todas as estruturas:
(vlax-for obj (vlax-get-property net "Structures")
(ps->labelme obj))
;restaure o controle de erros do cad:
(tbn:error-restore))
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, tbn:error-restore
Note que, com alguns poucos ajustes, dá até para colocar labels específicas, por exemplo, nos tubos, colocamos as labels de costume, com o comprimento, declividade, etc, mas alguns projetos pedem que coloquemos as labels de cota no final do tubo, por exemplo:
Vê a label de cor verde? aqui no Paraná, a sanepar exige que, se num poço de visita o tubo chegue a mais de 70cm da cota de fundo do poço, se faça um tubo de queda.