Manipulando eventos no AutoCAD - Parte 1

0 milhões de comentários
Bom dia pessoal!!!

Vamos sair um pouco desses programas que estou criando e vamos voltar um pouco nas origens do blog.

Vamos de "tutô"!!!

Neste, vamos tentar entender EVENTOS.

O que são eventos?

Eventos são ações disparadas em certas situações, por exemplo, quando desenhamos uma simples linha no cad, um evento ObjectAppended é disparado no database do desenho atual.

Este evento informará o "sender", no caso qual database (pro caso de você ter vários desenhos abertos) e mais algumas informações em uma classe "ObjectEventArgs". Nela, terá uma propriedade que informa qual objeto foi adicionado.

Bem, esta postagem não é a ajuda da API do AutoCAD, então se você quer ver mais explicações sobre este evento, deve olhar lá na ajuda da API, ok?

Usamos eventos sempre que queremos que o nosso programa reaja a uma ação do usuário (ah, o usuário.... este ser incompreendido, heheheh)

Não seria legal que quando o usuário carrega seu programa, este já "configura" os menus, adiciona o programa no "autoload" para que não precise mais fazer NETLOAD depois da primeira vez alem de "ligar" outros eventos no programa?

Seria, né? Então vamos ver o primeiro evento que vamos precisar: INITIALIZE/TERMINATE



Para usar os eventos de inicialização e encerramento, precisaremos de uma classe publica que implemente "IExtensionApplication" que está no NameSpace "Autodesk.AutoCAD.Runtime"

Note, esta classe é criada e executada UMA UNICA VEZ após o NETLOAD. Em princípio, você não deve criar outras instâncias desta classe durante a execução do AutoCAD.

Após o usuário ter feito o NETLOAD, o AutoCAD procura por uma classe que implemente este "IExtensionApplication" e se encontra, a instancia e executa o método INITIALIZE.

Quando o usuário FECHAR o AutoCAD, antes de encerrar, o AutoCAD executa o método TERMINATE desta classe.

Quer dizer que é aí que eu colocaria "PROGRAMA CARREGADO" pra aparecer após o netload??
Isso mesmo, Veja:


E pra carregar o menu, adicionar o programa no autoload? Bem, isso tudo você irá implementar dentro da sub Initialize, conforme descrevo no "Curso de Programação para Civil 3D e AutoCAD".

Para que o seu programa funcione bem, é preciso "escutar" uma série de eventos em diversos objetos. Os principais são:

Para o documento ( o dwg em si ):
DocumentCreateStarted
DocumentCreated
DocumentActivated
BeginDocumentClose
BeginSave
SaveComplete

Para o database ( a base de dados do documento ):
ObjectAppended
ObjectErased
ObjectModified

E para os comandos que o usuário for usando:
CommandWillStart
CommandCanceled
CommandEnded
CommandFailed

Estes são os que eu mais uso. Não significa que você irá usar todos e também não significa que só tem esses, ok?

Bom, esta postagem será a primeira parte sobre eventos. 

Em breve, a segunda parte. Nela, vamos ver as "assinaturas" (sintaxe de como usar) destes eventos e como adicionar um mecanismo de "liga/desliga" ok?





Criando Lista de Materiais no programa SOLIDOS

0 milhões de comentários
Estava faltando este vídeo também, hehehe

Este vídeo mostra o processo de criação de lista de materiais a serem utilizadas no lançamento das redes.
Esta lista pode ser feita com dispositivos que foram criados em outros projetos, ou importados de um catálogo externo, compatíveis com o programa SOLIDOS.
Também mostra como criar uma rede e lançar os dispositivos usando a lista de materiais criada.
Link de download do programa SOLIDOS: https://tbn2net.com/SOLIDOS



Extraindo a compensação lateral no civil 3D com ajuda do DDM

0 milhões de comentários
Fazia tempo que estava devendo este vídeo.

Bem, então agora não devo mais!!!

Este vídeo irá mostrar como obter as áreas da compensação lateral, descontando-a dos cortes e aterros, para que se possa calcular a escavação de compensação lateral separadamente do corte, uma vez que este serviço não implica em carga e transporte. 

Link do programa DDM, para cálculo de distribuição de terraplenagem em obras lineares: https://tbn2net.com/DDM


Link com o exemplo do vídeo: https://tbn2net.com/static/secoes.zip

 


O que é compensação lateral?

Bem, na terraplenagem de rodovias, normalmente temos o corte e o aterro apenas, quando muito, o corte é dividido em primeira, segunda e terceira categorias.

O serviço de corte normalmente é orçado como "Escavação Carga e Transporte de material de primeira/segunda/terceira categoria com DMT entre XXX e YYY metros"

Isto implica cortar, carregar, transportar e então descarregar o material.

A compensação lateral acontece sempre que tem-se uma seção mista de corte e aterro:


Na imagem acima, vemos este tipo de seção mista

A área vermelha é corte e a área verde é aterro. 

O material cortado nesta seção não será carregado, transportado e descarregado em outro local, mas sim "empurrado" lateralmente. Assim, não faz sentido falar em "escavação, carga e transporte", que seria um serviço de terraplenagem mais carro, por envolver mais componentes (a carga, o transporte e descarga)

Bom, então se faz necessário separar isso. É possível fazer no Civil 3D?
Implicitamente ele faz naquele "Mass Haul Diagram", uma vez que as ordenadas do diagrama de Bruckner são dadas pela equação:

Ordenada(i) = Ordenada(i-1) + VolCorte(i) - VolAterroHomog(i)

Onde:
VolCorte, é o volume de corte GEOMÉTRICO
VolAterroHomog, é o volume de aterro homogeneizado, isto é: Volume de aterro geométrico multiplicado pelo fator de homogeinização (não confundir com o fator de empolamento)

Mas, e os valores? Bem... Aí complica....

O vídeo mostra como obter estes valores do civil 3D, com o uso do meu plugin, o DDM

Para usar ele, baixe ele aqui: https://tbn2net.com/DDM


No exemplo, você verá o material list:


E com ajuda do comando DDMLINK (do programa DDM), obterá as áreas:


No exemplo do arquivo do DDM (que acompanha o DWG), você verá as seguintes equações de importação:

Para importar as áreas do corte que será distribuído LONGITUDINALMENTE, isto é, irão gerar o serviço "Escavação, Carga e Transporte de Material de primeira/segunda/terceira Categoria"

IF( {SLG-1:CORTE} > {SLG-1:ATERRO} * 1.2 , {SLG-1:CORTE} - {SLG-1:ATERRO} * 1.2 , 0 )

Para importar as áreas da compensação lateral de corte, que será distribuído LATERALMENTE, isto é, que irão gerar o serviço "Escavação de material de primeira/segunda/terceira Categoria", portanto sem a carga e sem o transporte e consequentemente com DMT = ZERO:

IF( {SLG-1:CORTE} > {SLG-1:ATERRO} * 1.2 , {SLG-1:ATERRO} * 1.2 , {SLG-1:CORTE} )

Observe, que as equações servem para separar da área de corte que aparece no material list em duas áreas: corte e compensação (explicadas acima)

Para o aterro, também devemos separar do corpo de aterro, o valor da compensação lateral, para isso usei as seguintes equações:

Para calcular as áreas de aterro:

IF( {SLG-1:ATERRO} > {SLG-1:CORTE} / 1.2 , {SLG-1:ATERRO} - {SLG-1:CORTE} / 1.2 , 0 )

Para separar os aterros que receberão a compensação lateral:

IF( {SLG-1:CORTE} / 1.2 > {SLG-1:ATERRO} , {SLG-1:ATERRO}  , {SLG-1:CORTE} / 1.2 )

Este 1,2 que aparece nas equações, nada mais é que o FATOR DE HOMOGEINIZAÇÃO (não confundir com fator de empolamento!). E antes que me pergunte, hora ele divide, hora multiplica, pois devemos comparar as áreas geométricas (no vídeo eu explico melhor, asiste!!!)

Por fim, como queremos que o corte lateral seja colocado no aterro lateral, devemos criar um artifício dentro do DDM para isso.

Este artifício soará como "gambiarra", mas em fim, heheheh, o objetivo do DDM inicialmente foi projeto de ferrovia. lá, temos uma material list um pouco maior:


Este artifício consiste em colocar valores para o CBR, Expansão e Permeabilidade tais que o material de corte só sirva para o aterro e a compensação lateral de corte só sirva para a compensação lateral de aterro. O que fará os DMTs serem necessariamente iguais a ZERO

Ainda tem um outro jeito de fazer isso, que seria usando o recurso de "Limitadores" do DDM. Mas aí você terá de ler na ajuda do plugin como fazer usando ele.

Bom, é isso. Este exemplo é pra mostrar como obter a compensação lateral. Quando sobrar um tempo, vamos fazer aquele estudo de caso que está na ajuda do programa DDM, ok?