Manipulando eventos no AutoCAD - Parte 1

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

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

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?