VB.NET e o autocad

Que tal mudar um pouco a cara dos nosso programinhas e tornar a coisa mais interessante? Vamos experimentar o VB.NET então!!! Com ele podemos usar os forms do Framework, bem mais interessantes que os basiquinhos do VBA e MUIIIIIIIITTO melhor que os famigerados DCLs (objectdcl... nome fácil de pegar nojo, hehehe) vamos fazer algo mais que o famoso "Hello World" que todo tutorial faz, vamos já desenhar uma linha!!!

Para isso, usei o VB.NET Express Edition, di grátis no site da M$ e o Autocad, no caso as versões 2008 de ambos
no editor do VB.Net, crie uma nova "Class Library" e colenela este código:




'acadApp depende de:
Imports AutoCAD = Autodesk.AutoCAD.Interop

'objetos do cad (textot, linha, layer, etc..) dependem de:
Imports AcadLib = Autodesk.AutoCAD.Interop.Common

'CommandMethod depende de:
Imports Autodesk.AutoCAD.Runtime

Public Class teste

'o autocad em si
Public acadApp As AutoCAD.IAcadApplication

'documento corrente
Public Thisdrawing As AutoCAD.IAcadDocument

'é executado ao carregar a dll com o NETLOAD
Public Sub New()
'17.0? = cad 2007
'17.1 = cad 2008
'17.2 = cad 2009
acadApp = GetObject(, "Autocad.Application.17.1")
Thisdrawing = acadApp.ActiveDocument
End Sub

'expoe a sub como um novo comando do autocad
_
Public Sub desenhalinha()
Dim pt1(2), pt2(2) As Double
Dim linha As AcadLib.AcadLine
Dim lay As AcadLib.AcadLayer

'pede o primeiro ponto:
pt1 = Thisdrawing.Utility.GetPoint(, "Entre com o primeiro ponto")

'pede o segundo ponto:
pt2 = Thisdrawing.Utility.GetPoint(pt1, "Entre com o segundo ponto")

'desenha uma linha:
linha = Thisdrawing.ModelSpace.AddLine(pt1, pt2)

'troca o layer, criando se ele nao existe:
Try
linha.Layer = "layer_teste"
Catch
lay = Thisdrawing.Layers.Add("layer_teste")
linha.Layer = "layer_teste"
End Try

End Sub

End Class


Algumas palavras devem aparecer sublinhadas, pois ainda não adicionamos as referências que precisamos, são elas (no caso do cad 2008):
para que possamos criar comandos:
pasta do Autocad\"acmgd.dll"
para que possamos desenhar no cad:
"Autocad 2008 Type Lybrary"
"Autocad/ObjecDBX Commom 17.0 type Libray"

E pronto!!

As partes importantes da classe:
a sub "New" que inicializa qualquer coisa que precisamos ao carregar a dll que será gerada e a linha _ antes da Sub que contem o programa em si

De resto, é algumas adaptações do código VBA para VB.NET, por exemplo:
o tipo "Variant" irá ser o tipo "Object", o legal é que o processo do "copiar/colar" já az essa transformação!!!

No VBA, usamos o Thisdrawing, que no VB não tem, mas aí simulamos ele, como no código acima

E claro, precisamos dos tipos dos objetos do cad ("AcadLayer", "AcadLine", por exemplo) aí fiz outra gambiarra usando o "AcadLib" que aparece no código, veja como criei e usei ele...
Interessante, não?

Compile o código e ele irá gerar o arquivo "teste.dll" na pasta /bin/release ( se você não mudou isso)

Carregue no cad com o comando NETLOAD e na linha de comando chame o novo comando criado: "desenhalinha"
Chique, né?
mais aqui e aqui

4 comentários:

  1. Anônimo7/6/11 08:20

    Como faço isso no Autocad Electrical 2011? Meu conhecimento sobre VB é quase nulo. Vc tem algum tutorial explicando de uma forma básica?

    ResponderExcluir
  2. Neyton,


    Bom dia!

    Eu estou treinando VB.net 2010, porém quando instalei o VB para o Autocad do 2010 ao 2012, percebi que a versão assemelçha-se ao VB 6, como posso então trazer os conceitos do VB.net para o Vb do autocad nessas versões, pois a estrutura e componentes do programa difere bastante.

    Eu poderia criar a aplicação dentro do VB basic express 2012 e usá-lo no autocad? Como poderia fazer isso, coenhece algum material na net falando ou orientando sobre o assunto?

    Agradeço!

    ResponderExcluir
  3. Sim, pode.

    Note que á a interface COM, ou activeX. o vb do autocad, que na verdade é VBA, visual basic for applications, pode ser escrita no VS.

    Ja a interface .NET, que é muito melhor que a COM so pode ser escrita no VS e nao no vba do autocad.

    ResponderExcluir
  4. Boa tarde. Teria alguma literatura para me indicar, pretendo fazer uma rotina para desenhar no autocad 2013, apartir do visualstudio 2012

    ResponderExcluir