Civil 3d - tutoriais - parte 13 - DATASHORTCUT - a XREF do c3d


Use DATASHORTCUTs. Não sabe o que é isso? putz.. bom assunto pra fazer um tutô, né? Bom, basicamente é como XREF, mas com entidades do civil 3d, tais como alinhamentos, greides, superfícies....



Imagine o seguinte: você tem um levantamento topográfico gigantesco, com 50 mil pontos... e precisa lançar nele um loteamento, com umas 100 ruas por exemplo e você dispõe de uns 5 desenhistas pra fazer isso... Bom, todos acessarem o mesmo desenho ao mesmo tempo não dá, cada um fazer uma cópia e sair desenhando não é lá uma boa solução... e se o topógrafo tiver de fazer alguma complementação? Como atualizar o MDT (Modelo Digital do Terreno, ou surface se preferir) de cada um dos desenhistas??



Então, passa a ser interessante que este MDT esteja num arquivo único, separado dos arquivos dos desenhistas, onde apenas o topógrafo mexa, certo?



Cada alteração que ele fizer, os desenhistas são notificados pelo próprio c3d, bastando sincronizar o desenho.



Mas como isso funciona?

Faça o MDT. Salve este arquivo e em seguida use o comando AECCSHOWSHORTCUTS:





Esta tela é do C3d 2008, no 2009 é um pouco diferente, aliás, é até mais inteligente o tratamento que que deram a esta função... deposi vemos como se faz nele.



Com isso, se abre esta tela:





Ela mostra os Shortcuts criados e dá os comando para criar outros...

Então para criar um shortcut, clique o botão destacado:







Será pedido que você selecione alguma coisa.... Selecione a superfície do terreno.

Pronto, veja que agora existe uma entrada no nó "Surfaces":







Bom, agora vamos usar este datashortcut em outro desenho, isto é, vamos adicionar uma referência da surface noutro desenho, como se adicionássemos o dwg que tem o terreno como uma "External Rerference" (XREF). Mas primeiro, precisams EXPORTAR as datashortcuts, para que possamos IMPORTAR no outro desenho:







Abra um novo desenho, use novamente o comando AECCSHOWSHORTCUTS:







E Clique o botão destacado:







Procure o arquivo de shortcuts que você salvou no passo anterior.

Agora, expanda o nó "Surfaces", clique com o botão direito do mouse sebre o nome da surface, e clique "Create reference":







Irá abrir aquela telinha de criar surfaces:





Note que no campo "Surface Reference" está indicado o nome o caminho do DWG que contém a superfície, de resto é idêntico ao comando "CREATESURFACE", você precisa dar um nome, ou aceitar o nome original, definir o estilo e pronto, sua superfície está criada.



Note ainda, que ao salvar este desenho seu arquivo será bem pequeno, mesmo que o desenho que realmente tem a superfície seja grande. Isso ocorre porque a superfície não está neste desenho e sim no arquivo original. O que tem aqui é uma refêrencia a ela. Assim, tudo o que você usou para montar este MDT, seja pontos, breaklines, curvas de nível existentes, etc, está lá no arquivo original.



Agora, todos os desenhistas pode repetir este ultimo passo, isto é, criar a referência ao MDT e trabalhar, cada um criando um conjunto de alinhamentos e a medida que eles vão criando, vão criando também os Datashortcuts dos seus alinhamentos e greides:







Em seguida, os estagiários podem importar as datashortcuts da superfície e dos alinhamentos e desenhar as "Sample Line Groups" e desenhar as "Sections Views" ("cortar" as seções transversais).



Tenho certeza que você notará uma produtividade muito grande, pois muitas pessoas poderão trabalhar no mesmo projeto, alem disso, você já deve ter notado que um desenho com muitos alinhamentos, muitas seções, etc, demora bem mais para abrir, para fazer "rebuilds" de corridor...



É como diria Jack, vamos por partes, hehehehe



Ainda falta falar do c3d 2009... Nele, a primeira coisa a fazer, é setar a pasta de projeto... Notou que no 2008 não foi preciso? Bem... no 2009 é...:





Vai pedir pra procurar uma pasta, escolha onde você salvou o MDT:





Em seguida, abra o Toolspace (comando ShowTS), deixe o "Master View" ( lá no topo )aparecendo e clique:





O 2009 salva cada datashortcut num arquivo XML separado, coisa que o 2008 não faz e ele os gerencia sozinho, coisa que o 2008 também não faz... Em resumo é bem mais prático...



Em fim, ao aparecer esta tela, apenas dê o nome da pasta no campo "Name" e clique OK:





E para criar os datashortcut, clique com o botão direito do mouse sobre o nó Datashortcut, como na figura:





Vai abrir esta tela:





Veja que você pode criar os Datashortcuts apenas marcando as caixinhas, ou pode escolher os elementos na tela ao clicar o botão "Pick in Drawing". Isso não te obriga a ter os elementos desenhados na tela, isto é, com os estilos ligados, como no 2008....



Agora é só ir no novo desenho e com o Toolspace aberto, mostrando o "Master View", expanda o nó "Datashortcuts", expanda o nó "Surfaces", clique com o botão direito do mouse sobre a superfície e clique "Create Reference":







Percebe que é mais intuitivo no 2009?



Bom, quando você for fazer um novo projeto, lembre-se de setar a "Working Folder" senão você verá as Datashortcuts dos projetos antigos....



É isso....

Mais Fields - Nome do Layout

Que tal incluir um texto no carmbo da prancha, que contenha o nome do layout em que ele está? Legal né? Com Fields é fácil, veja:

(defun C:nlayout (/ thisdrawing paper pt alt utility)
;carrega as VLs
  (vl-load-com)

  (
setq
;pega o documento atual:
    thisdrawing (vla-get-activedocument
          (vlax-get-acad-object))
;pega o layout:
    paper  (vla-get-paperspace thisdrawing)
;funções do tipo "get alguma" coisa:
    utility (vla-get-utility thisdrawing)
;pede a seleção de um texto:
    pt      (vla-getpoint
          utility
          nil
          "\nClique um ponto:")
    alt     (vla-getdistance
          utility
          nil
          "\nAltura do texto:"))

;cria um text no paper, com o nome do layout:
  (vla-addtext paper
    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
        (itoa (vla-get-objectid
            (vla-get-layout paper)))
        ">%).Name \\f \"%tc1\">%")
    pt
    alt
)
  (
princ))


Assim, você pode numerar os layouts e ter certeza de que no carimbo estará certo o texto. Detalhe: se você usar depois o "Copy/Move" num layout ara criar a próxima página (se não faz assim, experimente clicar com o botão direito do mouse sobre a aba do layout atual e usar o Copy/Move), esta Field será atualizada para usar o nome da página correta!! E se renomear algum layout, a field se atualiza sozinha, muito legal, hehehe!!!

Para usar é simples, carrega a lisp com APPLOAD e digita NLAYOUT na linha de comando:

Como tabelar pontos

Esses tempos atráz, me pediram um programa que criasse uma tabela com as coordenadas dos pontos de um desenho... Bem aí está:
ver isso!!!

(vl-load-com)
(
defun c:tabelar (/ ss NumRows InsertionPoint NumColumns RowHeight ColWidth
          model table nRow id ent vla
)
  (
setq ss             (ssget ":S" '((0 . "POINT")))
    NumRows        (sslength ss)
    InsertionPoint (vlax-3d-point 
                         (getpoint "\nEntre com um ponto"))
    NumColumns 3   ;nome, x, y -> 3
    RowHeight 2
    ColWidth 10
    model (vla-get-modelspace 
                (vla-get-activedocument (vlax-get-acad-object)))
    table (vla-addtable model InsertionPoint
        (1+ NumRows) ;uma linha pro titulo...
                     ;ou vai depender do estilo da tabela
        NumColumns RowHeight ColWidth)
    nRow 0)
  (
repeat NumRows
    (setq ent (ssname ss nRow)
      vla (vlax-ename->vla-object ent)
      id  (vla-get-ObjectID vla)
      nRow (1+ nRow))
    

    ;escreve o nº do ponto na coluna 1
    (vla-Settextstring
      table
 ;a tabela em si
      nRow  ;linha
      0     ;coluna
      (* nRow 3) ;"id" da celula
      (itoa nRow) ;conteudo da celula
      )
    

    ;escreve o X na coluna 2:
    (vla-Setformula
      table
 ;a tabela em si
      nRow  ;linha
      1     ;coluna
      (+ 1 (* nRow 3)) ;"id" da celula
      (strcat ;cria uma "field" q mostra o X
    "%<\\AcObjProp Object(%<\\_ObjId "
    (itoa id)
    ">%).Coordinates \\f \"%pt1\">%"))
    

    ;escreve o Y na coluna 3:
    (vla-Setformula table nRow 2 (+ 2 (* nRow 3))
      (
strcat ;cria uma "field" q mostra o Y
    "%<\\AcObjProp Object(%<\\_ObjId "
    (itoa id)
    ">%).Coordinates \\f \"%pt2\">%")))
  ;atualiza a tabela:
  (vla-GenerateLayout table))


Para usar é simples, carrega a lisp, desenha alguns pontos ( comando POINT ) e chama a lisp na linha de comando: TABELAR
Será pedido um ponto de inserção e será criada uma TABLE do autocad com as coordenadas X e Y desses pontos.

Bem bobinho este programa, eu sei, mas servirá de exemplo para quem quer saber como usar FIELD e desenhar TABLE com lisp.