DOTNET, AutoCAD e blocos

É, as imagens do blog sumiram... mas não adianta ficar choramingando... pede pra sair!!!! pede pra sair sr 01!!!!

Hoje vou mudar um pouco e postar um código pra substituir blocos de diversos desenhos.

O caso é o seguinte: nosso contratante sismou que queria um bloco do carimbo diferente com layers diferentes, etc.

Temos trocentos arquivos DWG, com trocentos layouts cada. Imagina o trabalhão de substituir cada bloco de cada desenho....

Sim, você deve (deveria!!!) ter usado XREF, mas por algum motivo, não o fez. Terá de fazer não mão!!!

Serviço, não?

Bom, existem muitas formas de fazer isso, e como sou programador (ou não!!!), claro que escrevi algumas linhas pra me resolver isso

O programa resultou nisto:


No primeiro campo informamos o nome do bloco antigo.

No segundo campo, informamos um dwg que contem um bloco com o mesmo nome, porem editado.

Fiz assim, porque este bloco possui atributos dinâmicos.

Depois, no terceiro campo você escolhe a pasta onde estão os trocentos arquivos a modificar.

O último campo tem o nome do atributo dinâmico de "Visibility State". Se não tiver isso, deixe em branco.

Bem simples, né?

Aí é só mandar rodar e esperar.....
Um fiz aqui com 125 arquivos de 1.2MB cada e levou uns 5 minutos!!! Isso porque usei o RAMDISK e porque a técnica que usei para abrir o desenho, não precisa fazer nenhum "Regen", que é o que realmente demora no autocad.

Bom, o programa em sí é funcional, e nele voce poderá ver como abrir um dwg, editar e salvar

Compilei para o cad 2012, a DLL está na pasta ./bin/debug

use NETLOAD para carregar e TROCABLOCOS para usar

o código fonte está disponível. Usei o VS 2010

Se você gostar, posta um comentário aí!!!


O código fonte e o executável estão aqui

10 comentários:

  1. Bacaninha, Neyton, muito util. Vc faz uso do novo accoreconsole da versao 2013? Ele pode ser utilizado tb para processamento em lotes.

    ResponderExcluir
  2. Gostei do post,
    bem que vc poderia começar a publicar mais alguns sobre API e .NET
    valeu

    ResponderExcluir
  3. Legal, que bom que gostaram!!!

    Já uso o 2013 sim. o programa pode ser modificado facilmente para rodar nele

    ResponderExcluir
  4. Ei Neyton, vc tem ideia qdo a galera da autodesk vai colocar no site a versão atualizada do country kit do brasil, q vai ter aquela correção das estacas das notas de serviço?!

    ResponderExcluir
  5. Olá Neyton,
    você falou que usa uma técnica "Jedi" para acelerar processos...

    "...a técnica que usei para abrir o desenho,
    não precisa fazer nenhum 'Regen',
    que é o que realmente demora no autocad."

    Te pergunto: Essa "técnica Jedi" também serve para plotagem? Ou existe alguma semelhante para isso?

    Meu arquivos de CAD (de terraplenagem principalmente) tem uns 150 ou mais layouts e isso leva horas para gerar os PDFs, sem contar que passear de aba em aba no geométrico é outro suplício na hora de plotar... Um projeto já levou 10 minutos para mudar de aba e outros tantos para imprimir...

    Lembra do AutoCAD 10?
    Ele tinha um menu no início e você escolhia a opção 1) New, 2) Open, 3) Plot, etc.
    Você plotava direto sem abrir/visualizar o desenho.

    Tem alguma "técnica" que possibilite plotar todos os layouts sem abrir o desenho?
    Ou o PUBLISH é a única saida?

    []s

    ResponderExcluir
  6. Procure pelo post sobre sheetset . É o que você quer.

    ResponderExcluir
  7. Boa idéia Neyton, mas gostaria de saber como faço para instala-lo.
    obrigado

    ResponderExcluir
  8. Boa Idéia Neyton, mas eu posso substituir uma palavra de layouts em vários arquivos?E como eu instalo esse arquivos que você comenta ae encima?Obrigado

    Att
    GAbriel

    ResponderExcluir
  9. para instalar:
    digite APPLOAD na linha de comando e selecione a DLL do programa, que está na pasta "./bin/debug"

    para substituir uma palavra em vários layouts da mesma forma que este programa faz, você terá de ter condições de localizar ela. Exemplo: se a palavra é um atributo de bloco, bastaria achar as inserções dos blocos, iterar sobre seus atributos e localizar um atributo específico.

    mas se o texto é um text, terá de criar um filtro de seleção que aceite TEXT ou MTEXT, onde o conteúdo seja o texto antigo e depois substituir o texto

    ResponderExcluir