Tutoriais - Corridors - 10.4 Corridors Boundaries

Credo, faz mó cara que não escrevo nada!!!
Mas tabém, haja tempo, hehehehe.

E aí, já desenhou o Corridor, certo? Já criou uma superficie acabada dele, né?

Já sofreu para colocar a boundary nela, para que a triangulação se limite no corridor né?

Bom, antes de mais nada, esse tutorial só vai servir para o 2010, pois a ferramenta que quero mostrar só apareceu nele...

Vamos tomar como exemplo, a interseção do tutorial 10.1, pegue o dwg aqui

Mande criar a superfície pelos códigos Datum. Para isso, faça:

  1. use o comando EditCorridorProperties. Selecione o corridor da interseção e vá até a aba Surfaces
  2. Clique o botão "Create Corridor Surface":
  3. Em seguida, selecione o Código Datum, e clique o Botão "+" vermelho:
  4. Ah, não sei se mencionei, mas quando você faz a surface pelos "Datum Points", marque a opção "Botton Links", na coluna "Overhnag Correction":

    Pergunte porque, heehehehe, faz um teste: deixe sem isso, faça uma section, depois uma section view, e veja o resultado desta.Pode ser que a superficie crie um bico:
    Agora volte nas propriedades do corridor, e marque a opção "Overhnag Correction" e veja a diferença:

    Entendeu? esta opção faz o seguinte: se tem dois pontos "Datum", onde um está acima do outro (tem Z maior), ele usa o debaixo... Hum!!!!!! por isso as seções sairam esquisitas n o outro tutorial!!!!!
  5. Agora, vá ver a sua superfície, clique OK e veja:

  6. Agora, volte nas propriedades do corridor e vá até a aba "Boundaries", clique no nome da superficie e clique "Add Interactively":

  7. Clique no endpoint do dayligth, pode ser que apareça isso:

    Isso ocorre porque o "Cod Set Style" que usamos, desenha tanto o "dayligth", como o "dayligth" "fill" e "cut", bom, aí aparece uma linha vermelha, que vai desenhando por cima do "dayligth".... Vá até o final e clique o endpoint, depois pegue do outro lado da rua e vai seguindo... veja como fica:
  8. É como desenhar uma polilinha... para fechar, clique "C" de "Close". Vai voltar para a tela das propriedades do Corridor. Na coluna "Definitions", clique o ícone "[...]":

    Veja a tela que se abre:
    No 2007 (ou 2008?), era só nessa tela, se não me engano... Veja que podemos reorganizar, adicionar, apagar segmentos da boundary, etc... É muito pouco intuitivo... Aí no 2009 apareceu esse "Interactively", bem bacana né?
  9. Bom, clique os "OK" até voltar ao desenho:
    Pronto!!!
    Esse é o jeito difícil "Daniel Sam"!!!!
Agora, volte às propriedades do corridor, e apague a boundary!!!

clique para adicionar novamente, mas agora escolha a opção "Add Corridor Extents as outer boundary":

Clique "OK". Fim. É isso...
Esse é o jeito fácil, hehehehe, mas só tem no civil 3d 2010

mas porque não disse antes??? Porque você não vai poder usar essa opção sempre....
Tem vezes que esta opção não aparece... Misteriosamente....

E aí, o que fazer???

Vã na aba Properties e depois clique em "Turn off all the baselines":
Clique "Apply" e depois volte a aba "Boundaries"...
Clique para adicionar a boundary, e lá está a opção!!!! hehehehe
Use ela.
Volte na aba Properties, clique "Turn on all the baselines"... Clique "Ok" e veja os resultados!!!

HUMMM!!!! parabens flipper (alguem tem um link legal pra por aqui???)!!!

hehehe, é isso. Gostou? Quer ter esse e todos os outros tutôs em pendrive ou cd ou no seu email??? veja este link

PipeNetworks - Labels Condicionais

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:
mais...
;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
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.

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.

Update multiplos corridors de uma vez só

Faz tempo que não posto uma lisp, então pra desenferrujar um pouco, que tal fazer um update em vários corridors ao mesmo tempo?

(DEFUN C:UPDCORRIDOR (/ SS ENT VLA)
  (
vl-load-com)
  (
setq ss (ssget '((0 . "AECC_CORRIDOR"))))
  (
REPEAT (SSLENGTH SS)
    (
SETQ ENT (SSNAME SS 0)
      VLA (VLAX-ENAME->VLA-OBJECT ENT))
    (
VLAX-INVOKE-METHOD VLA 'Rebuild)
    (
SSDEL ENT SS)))



Se você, como eu, cria todas as interseções separadas do corridor principal, para nao demorar os rebuilds quano se está projetando, esta lispezinha vai ser muito útil no final, porque ficar dando rebuild um a um é massante!!!

Experimente, ela é bem simples, só copie, salve e carregue que já dá para sair usando!!!