Primeira Equete

Bom, bom, bom... pra primeira enquete até que teve bastante votos (trucoooooo!!!!), olha só:

Então tá né, e tome mais tutorial!!
Veja, tem mais esse

Civil 3d - Tutoriais - Parte 4.1 - User contours

Putz até que em fim um tutorial, hehehe, Vendo pela enquete, que decidiu por maioria esmagadora, se bem que podia ter mais votos...



Mas vamos lá...

Vou usar uma dúvida do meu amigo tibel, lá da comunidade do Civil 3d no
Orkut
. a dúvida era a seguinte: tendo uma superfície, como demarcar a cota de um reservatório?? Me parece que esta deveria ser uma função nativa do c3d... e olha só:: É!!! ainda bem!! hehehe e é até simples de se conseguir:

Primeiro, tenha a superfície (serio??? aff):



Veja que já deixei aparecendo a borda e as curvas de nível (como faz isso? veja o tutorial de superfícies)



De posse disso, abra o Toolspace na guia Settings, localize o estilo da sua superfície e abra-o para edição na guia "Display", nela ligue o "User Contours", veja:





Veja que eu já atribuí layers para os diversos elementos da superfície (triangulação, curvas,
etc.), atribua um para as "User contours"



Agora, nas propriedades da superfície, vá na aba "Analisys".

1) Na caixa "Analysis type", escolha "User-defined contours"

2) No quadro "Ranges" coloque "1" em "Number"

3) Clique o botão que tem uma seta azul, que aponta para baixo. Este que está dentro do quadro "Ranges"

Veja que no quadro "Range Details", apareceu uma linha, nele, na coluna "Elevation" coloque a cota do seu reservatório, no meu exemplo eu usei 623m

Você também pode trocar as propriedades da linha que será criada, clicando os botões da coluna "Display", que está dentro do quadro "Range Details"



Veja como ficou a tela:





Clique os "Apply"s e "OK"s que precisar e veja o resultado:





Veja, a cota que demarquei (634.5 metros") ficou na cor branca (que eu especifiquei)



Legal né?

Com isso, você pode incluir outras curvas de nível no seu desenho, marcar a cota de um reservatório, quem trabalha com usinas vai usar bastante isso.



Ainda complementando a dúvida do meu amigo, dá para extrair a polilinha gerada da superfície sem explodir a mesma, para isso vá no menu a seguir, ou use o comando SURFACEEXTRACTOBJECTS:





Vai aparecer outro quadro de diálogo, nele escolha as opções que desejar, no caso quero so as "User contours":



Pronto, ele irá extrair a polilinha da cota do reservatório!!



Ah, claro, aqui cabe o seguinte: Explorer as diversas opções de análises que se pode fazer duma superfície, veja
lá na guia "Analysis" que tem várias, outra hora posto mais alguma coisa sobre.

ASIN

Função arco-seno, usada na rotina "Trajetória"
(defun asin (x) (/ x (sqrt (- 1.0 (expt x 2)))))

Autoturn mequetrefe

Já ouviu falar do Autoturn?
Muito bom com certeza!!! Se não ouviu falar e faz projeto de acessos rodiviários deveria, hehehe.
Claro que ele tem uma versão demo etc e tal, mas as vezes só precisamos de uma análise rápida, com um veículo de projeto específico e não temos o Autoturn "full", nem mesmo o genérico dele... o que fazemos? Será que a curva que estamos calculando atenderá a superlargura requerida por um ônibus por exemplo?

É o que o programa abaixo faz, dado um eixo que representa a trajetória do eixo da frente de um veículo, calcula a trajetoria do eixo de traz.
Veja a figura:

Imagine uma rótula qualquer, será que a largura das vias é suficiente para um ônibus?
Usando o programa abaixo, ou o Autoturn, podemos desenhar a trajetória dos eixos deste veículo, a saber:
Distância entre eixos: 6.1m
Distância entre rodas: 2.6m

Alimentamos estes valores, e obtemos:

No desenho, a linha amarela é a trajetória do eixo da frente, que o motorista hipoteticamente irá seguir, verde é o caminho executado pelas rodas da frente e magenta o caminho percorrido pelas rodas de traz.
Assim, podemos ver que ele passa, apertado, mas passa!!

Claro que aí ainda temos de levar em conta raios internos mínimos das curvas, velocidade que o veículo fará a curva, etc... Ma pra começo de conversa, já é um indicativo!!
ver o programa...

(Setq trajetoria:disteixo 6.1
      trajetoria:delta 1
      trajetoria:layerfrente "trajeto-frente"
      trajetoria:layertraz "trajeto-traz"
      trajetoria:offset 2.6)

(defun c:trajetoria (/ ss ent pxf pxt angv1 tmp d total
             lst mlt mlf  pxf2 dirtrv alpha dsttrv
             angtrn angv2 rfront angtilt rback pback2
)
  

;salva variáveis de sistema, inicia  controle de erros
  (tbn:error-init (list (list "osmode" (getvar "osmode")) nil))
  

;pergunta pelos parâmetros... TODO: substituir por um dcl, muito chato assim
  (prompt "Selecione as trajetorias do eixo dianteiro:")
  (
setq  ss      (ssget  '((0 . "ARC,*[~M]LINE,LINE")))
         tmp      (getdist (strcat "\nQual a distancia entre eixos <" (rtos trajetoria:disteixo)">"))
         trajetoria:disteixo (if tmp tmp trajetoria:disteixo)
         tmp       (getdist (strcat "\nqual a distancia entre interpolações <" (rtos trajetoria:delta) ">"))
         trajetoria:delta  (if tmp tmp trajetoria:delta)
         tmp      (getstring (strcat "\nQual o layer desenhar a trajetoria frontal? <" trajetoria:layerfrente ">"))
         trajetoria:layerfrente (if (/= "" tmp) tmp trajetoria:layerfrente)
         tmp      (getstring (strcat "\nQual o layer desenhar a trajetoria trazeira? <" trajetoria:layertraz ">"))
         trajetoria:layertraz (if (/= "" tmp) tmp trajetoria:layertraz)
         tmp      (getdist (strcat "\nQual a ditancia entre rodas? <" (rtos trajetoria:offset)">"))
         trajetoria:offset (if tmp tmp trajetoria:offset))

;desliga o osnap
  (setvar "osmode" 0)
  (
repeat (if ss (sslength ss) 0)
    (
setq ent      (ssname ss 0)
          pxf      (vlax-curve-getstartpoint ent)
          angv1    (+ pi (get-tan-of-pt ent pxf)) ;tangente à curva no ponto PXF
          d        trajetoria:delta
          total
    (get-length-of ent) ;comprimento da trajetória
          lst      nil)
    (
ssdel ent ss)

;prezumindo que o estilo seja o standard nao alterado:
    (command "._mline" "j" "z" "s" trajetoria:offset
         (vlax-curve-getstartpoint ent))
    

;desenha a mlina do eixo dianteiro
    (while (< d total)
      (
setq pxt (vlax-curve-getpointatdist ent d)
        lst (cons pxt lst)
            d   (+ d trajetoria:delta))
      (
command pxt))

    (
setq pxt (vlax-curve-getendpoint ent)
      lst (cons pxt  lst))
    (
command pxt "")
    

;corrige o layer da primeira mline
    (remake-ent (entlast) 8 trajetoria:layerfrente)

;desenha a mline do eixo de traz
    (command "._mline" "j" "z" "s" trajetoria:offset
         (polar pxf angv1 trajetoria:disteixo))

;para cada ponto da mline dianteira, calcula o ponto do eixo trazeiro
    (foreach pxf2 (reverse lst)
      (
setq
;; angulo da traj do eixo da frente
    dirtrv   (angle pxf pxf2)
;; angulo das rodas frontais em relação ao veiculo
    alpha    (- angv1 dirtrv)
;; distance front wheels traveled this step
    dsttrv   (distance pxf pxf2)
;; angle vehicle turned this step
        angtrn   (* 2 (atan (/ (sin alpha)
                   (
- (/ (* 2 trajetoria:disteixo) dsttrv)
                  (
cos alpha)))))
        angv2    (+ angv1 angtrn)
;; average front wheel radius this step
        rfront   (/ dsttrv (* 2.0 (sin (/ angtrn 2.0))))
;; average wheel tilt or articulation angle this step
        angtilt  (asin (/ trajetoria:disteixo rfront))
;; average back wheel radius this step
    rback    (/ trajetoria:disteixo (tan angtilt))
    pback2   (polar pxf2 angv2 trajetoria:disteixo)
    pxf      pxf2
    pxt      pback2
    angv1    angv2
)
      (
command pxt))
    (
command "")
;corrige o layer da segunda mline
    (remake-ent (entlast) 8 trajetoria:layertraz))
  (
tbn:error-restore))


Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, get-tan-of-pt, get-length-of, remake-ent, tan, tbn:error-restore, asin

Plotar varios arquivos

É, tô sumido uns dias... mudança de apartamento, contas pra pagar... a internet lá de casa que é uma droga... o dinheiro nao entra... heheheh problemas de todos os brasileiros pra não deixar em branco, vou postar um programinha que fiz para plotar uns arquivos que estou fazendo, veja uma tela dele:

Funciona assim: após carregar o programinha, vá ate o menu tools macros, e carregue a macro "plotarvarios", ele irá apresentar a tela acima, onde você escolhe a pasta origem dos dwgs e a pasta destino dos pdfs ou plts. Note que tem um campo onde você deve escolher o "template" do layout do desenho corrente para ele usar em todos os arquivos selecionados.
Por que assim? Você me pergunta...
Porque assim, você configura uma vez um layout e plota vários desenhos, pois é comum não darmos muita atenção à configuração da pagina nos nossos desenhos...

Aqui tenho de plotar localmente para pdf e no servidor para a ploter, e este programa facilita muito, uma vez que nao preciso configurar ploters diferentes em todos os desenhos...

Claro, que se você só usa uma ploter, o publish é a solução ideal, claro que você terá de configuarar as páginas de todos os layouts dos seus desenhos. "Whatever"!!!

O programa não salva a configuração de página nos desenhos, mas isso é fácil de fazer, basta um "doc.save" no local apropriado (está comentada a linha onde isso deve ser feito)

Experimente, baixe o arquivo e teste!!!