-->
No ultimo post falei um pouco sobre como criar um exemplo de aplicativo para AutoCAD usando dotNET. Bom foi uma breve introdução mas nós sabemos que sair do básico e fazer algo mais concreto é bem mais complicado do que estava lá. Pensando nisso a Autodesk deixou um presentinho para quem baixa o ObjectARX que são alguns exemplos, aqui no meu são 10 exemplos.
Eu inicialmente queria explicar exatamente o que é o ObjectARX mas a verdade é que eu sei somente que ele é um pacote de DLL's para nos conectar ao AutoCAD. Quando "instalamos", ou melhor, descompactamos as ferramentas ele cria uma pasta na raiz onde é colocado uma série de DLL e alguns arquivos para nos ajudar a criara aplicativos para AutoCAD.
A primeira pasta que você deve dar uma olha é a pasta "classmap", nessa pasta está contido um arquivo dwg que contem a organização de todas as classes hierárquicas do ObjsectARX, se algo existe para interagir lá está o objeto. Não é necessário entende-lo a fundo a final, saber que existe naõ significa necessariamente que o objeto pode ser utilizado ao seu prazer, contudo é um instrumento de consulta.
A segunda pasta, em ordem alfabética, é a pasta "docs" que se referena a nada menos que os documentação do ObjectARX. O arxdoc.chm fala de como trabalhar com o ObjectARX o que ele é de fato, então nada melhor do que uma boa leitura para você.
A terceira pasta é a "inc" nela esta contida a biblioteca em C++, na verdade, os arquivos headrer que compilados geram a biblioteca que utilizamos nos programas em .NET. E nas pastas inc-win32 e inc-x64 estão o restante das bibliotecas que é dependente da versão do windows. É meus amigos as referências para 32bits e 64bits são diferentes isso significa que toda vez que fizer um código tem que faze-lo numa versão para 32bits e outra para 64bits o que é lamentável.
A quarta pasta é a "samples". Vamos falar bastante dela nessa seção. Dentro dela contem os arquivos exemplos para utilizar tanto na programação com .NET como na programação com C++ que é um pouco mais veloz na execução mas mais complicada na criação, vou tentar falar das duas no blog mas vou dar mais enfase no inicio a .NET mesmo, assim vamos nos concentrar na pasta "dotNET". Dentro da pasta exitem 10 exemplos em que nessa série de artigos vou falar de cada um deles e demonstrar as coisas básicas do dotNET.
Pro fim, só para completar temos a pasta "Utils", que realmente é util como vamos ver mais a frente. Ela contem algumas coisas uteis como o AModeler que serve para estruturar sólidos partindo de superfícies em CAD e o AsdkHlrApi18 que serve para calcular linhas apagadas, em fim como diria o grande Jack, sempre por partes ...
Exemplo HelloWorld
O primeiro exemplo que está na pasta "ObjectARX\sampeles\dotNET\" é o HelloWorld. Este exemplo é um pocuo mais avançado do que aquele que eu mostrei no ultimo post. Na verdade ele utiliza o código Initialize() para inicializar uma barra de ferramentas simples com três botões ao modo antigo do windows.
O Exemplo é meio chato porque ele derruba um pouco aquele padrão de MyCommands.vb e MyPlugin.vb porque ele monta as duas classes no mesmo arquivo HelloWorld.vb
A primeira classe HelloWorldApp que implementa a inicialização da DLL do AutoCAD, IExtensionApplication, a barra de ferramentas é criada.
Como a barra de ferramentas tem ícones, o primeiro de tudo é achar onde estão os benditos ícones e referencia-los, isso é o que o código acima faz, pega a direção relativa de onde está jogada a DLL e pega a pasta imediatamente acima, ou seja, a pasta do projeto onde estão os dois ícones do programa tbBut0.bmp e tbBut1.bmp.
Note que são bitmap's! isso mesmo as imagens tem fundo fixo o que fica um coco se você mudar o tema do windows e não casar o seu bitmap...
Continuando a explicação, as barras tradicionais do windows são chamadas de Toolbar, ou barra de ferramentas simplesmente e o mecanismo é simples: você cria uma barra, insere na coleção de barras ativas do AutoCAD e nessa barra você adiciona botões. Os botões são entidades que podem ser colocadas na barra de maneira ilimitada e exatamente isso que ele faz no código abaixo. Observe que cada botão é atribuito um comando de linha de comando do AutoCAD, então, acontece que quando você cria um botão ele não faz nada além de chamar um comando na linha de comando do AutoCAD assim como se você tive-se-o digitado manualmente - isso na barra antiga.
Como isso está dentro da função initialize() vai ser executado assim que você der NETLOAD na DLL do projeto compilado.
Se o seu computador é fresco como meu certamente você terá problemas em depurar o código porque o projeto não vem previamente configurado com o AutoCAD 2012, por isso, você nas propriedades do projeto na aba "Debug" e selecionar para executar o acad.exe.
Ocorrendo tudo certo você vai ver a sua bizarra barra de ferramentas completamente isolada e que não segue o padrão novo do AutoCAD, em todos os casos foi bem simples de se implementar.
Como eu disse cada botão chama um comando e os comando são códigos dissociados que estão logo abaixo no programa na classe HelloWorldCommands que contêm três Sub's (a sub é uma main(void) do C#).
Vamos analisar cada função.
A primeira função tem a função HelloCommand que é chamada pelo AutoCAD sob o nome "HELLO", então se você carregou a DLL você pode executar a função escrevendo "HELLO" na linha de comando ou apenas clicando sobre o primeiro botão.
Observe que a função HelloCommand só tem uma unica linha de comando que pega o AutoCAD, seu documento ativa, ou seja, o que você esta vendo, pega o Editor dele que é na verdade a linha de comando do AutoCAD e escreve um texto ("Message") "Hello World!", simples assim.
A segunda função HelloFormCommand() pega um formulário de quando padrão a apresenta na tela do AutoCAD as moldes do Windows. O arquivo do formulário esta junto do projeto em HelloWorldForm.vb e se você der um clique duplo sobre ele vai aparecer o formulário para ser editado.
Então quando você chama o botão o formulário é gerado e apresentado na tela do AutoCAD sobre tudo.
O ultimo comando é o mais complicado, trata-se de escrever "Hello World!" no AutoCad e para isso ele acessa toda a estrutura de objetos do AutoCAD criando um texto no estilo MText e forçando-o no desenho ativo. A explicação mais completa vou deixar para o próximo post.
Eu sei que eu fiquei muito tempo sem postar nada, mas nesse ano eu pretendo mudar isso. Quero publicar aqui um post por semana com alguma novidade sobre programação para AutoCAD em .NET. Espero que estejam gostando dos post e estejam sendo úteis.
Eu inicialmente queria explicar exatamente o que é o ObjectARX mas a verdade é que eu sei somente que ele é um pacote de DLL's para nos conectar ao AutoCAD. Quando "instalamos", ou melhor, descompactamos as ferramentas ele cria uma pasta na raiz onde é colocado uma série de DLL e alguns arquivos para nos ajudar a criara aplicativos para AutoCAD.
A primeira pasta que você deve dar uma olha é a pasta "classmap", nessa pasta está contido um arquivo dwg que contem a organização de todas as classes hierárquicas do ObjsectARX, se algo existe para interagir lá está o objeto. Não é necessário entende-lo a fundo a final, saber que existe naõ significa necessariamente que o objeto pode ser utilizado ao seu prazer, contudo é um instrumento de consulta.
A segunda pasta, em ordem alfabética, é a pasta "docs" que se referena a nada menos que os documentação do ObjectARX. O arxdoc.chm fala de como trabalhar com o ObjectARX o que ele é de fato, então nada melhor do que uma boa leitura para você.
A terceira pasta é a "inc" nela esta contida a biblioteca em C++, na verdade, os arquivos headrer que compilados geram a biblioteca que utilizamos nos programas em .NET. E nas pastas inc-win32 e inc-x64 estão o restante das bibliotecas que é dependente da versão do windows. É meus amigos as referências para 32bits e 64bits são diferentes isso significa que toda vez que fizer um código tem que faze-lo numa versão para 32bits e outra para 64bits o que é lamentável.
A quarta pasta é a "samples". Vamos falar bastante dela nessa seção. Dentro dela contem os arquivos exemplos para utilizar tanto na programação com .NET como na programação com C++ que é um pouco mais veloz na execução mas mais complicada na criação, vou tentar falar das duas no blog mas vou dar mais enfase no inicio a .NET mesmo, assim vamos nos concentrar na pasta "dotNET". Dentro da pasta exitem 10 exemplos em que nessa série de artigos vou falar de cada um deles e demonstrar as coisas básicas do dotNET.
Pro fim, só para completar temos a pasta "Utils", que realmente é util como vamos ver mais a frente. Ela contem algumas coisas uteis como o AModeler que serve para estruturar sólidos partindo de superfícies em CAD e o AsdkHlrApi18 que serve para calcular linhas apagadas, em fim como diria o grande Jack, sempre por partes ...
Exemplo HelloWorld
O primeiro exemplo que está na pasta "ObjectARX\sampeles\dotNET\" é o HelloWorld. Este exemplo é um pocuo mais avançado do que aquele que eu mostrei no ultimo post. Na verdade ele utiliza o código Initialize() para inicializar uma barra de ferramentas simples com três botões ao modo antigo do windows.
O Exemplo é meio chato porque ele derruba um pouco aquele padrão de MyCommands.vb e MyPlugin.vb porque ele monta as duas classes no mesmo arquivo HelloWorld.vb
A primeira classe HelloWorldApp que implementa a inicialização da DLL do AutoCAD, IExtensionApplication, a barra de ferramentas é criada.
- Dim helloModule As System.Reflection.Module = System.Reflection.Assembly.GetExecutingAssembly().GetModules()(0)
- Dim helloModulePath As String = helloModule.FullyQualifiedName
- Try
- helloModulePath = helloModulePath.Substring(0, helloModulePath.LastIndexOf("\"))
- helloModulePath = helloModulePath.Substring(0, helloModulePath.LastIndexOf("\"))
- Catch
- MsgBox("Error with Module Path")
- Exit Sub
- End Try
Como a barra de ferramentas tem ícones, o primeiro de tudo é achar onde estão os benditos ícones e referencia-los, isso é o que o código acima faz, pega a direção relativa de onde está jogada a DLL e pega a pasta imediatamente acima, ou seja, a pasta do projeto onde estão os dois ícones do programa tbBut0.bmp e tbBut1.bmp.
Note que são bitmap's! isso mesmo as imagens tem fundo fixo o que fica um coco se você mudar o tema do windows e não casar o seu bitmap...
Continuando a explicação, as barras tradicionais do windows são chamadas de Toolbar, ou barra de ferramentas simplesmente e o mecanismo é simples: você cria uma barra, insere na coleção de barras ativas do AutoCAD e nessa barra você adiciona botões. Os botões são entidades que podem ser colocadas na barra de maneira ilimitada e exatamente isso que ele faz no código abaixo. Observe que cada botão é atribuito um comando de linha de comando do AutoCAD, então, acontece que quando você cria um botão ele não faz nada além de chamar um comando na linha de comando do AutoCAD assim como se você tive-se-o digitado manualmente - isso na barra antiga.
- Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
- Dim hwTb As Autodesk.AutoCAD.Interop.AcadToolbar = acadApp.MenuGroups.Item(0).Toolbars.Add("Hello World!")
- Dim tbBut0 As Autodesk.AutoCAD.Interop.AcadToolbarItem = hwTb.AddToolbarButton(0, "Hello", "Hello World - Hello command", "_HELLO ")
- tbBut0.SetBitmaps(helloModulePath + "\tbBut0.bmp", helloModulePath + "\tbBut0.bmp")
- Dim tbBut1 As Autodesk.AutoCAD.Interop.AcadToolbarItem = hwTb.AddToolbarButton(1, "HelloForm", "Hello World - HelloForm command", "_HelloForm ")
- tbBut1.SetBitmaps(helloModulePath + "\tbBut1.bmp", helloModulePath + "\tbBut1.bmp")
- Dim tbBut2 As Autodesk.AutoCAD.Interop.AcadToolbarItem = hwTb.AddToolbarButton(2, "HelloText", "Hello World - Hello command", "_HELLOTEXT ")
- tbBut2.SetBitmaps(helloModulePath + "\tbBut0.bmp", helloModulePath + "\tbBut0.bmp")
Se o seu computador é fresco como meu certamente você terá problemas em depurar o código porque o projeto não vem previamente configurado com o AutoCAD 2012, por isso, você nas propriedades do projeto na aba "Debug" e selecionar para executar o acad.exe.
Ocorrendo tudo certo você vai ver a sua bizarra barra de ferramentas completamente isolada e que não segue o padrão novo do AutoCAD, em todos os casos foi bem simples de se implementar.
Como eu disse cada botão chama um comando e os comando são códigos dissociados que estão logo abaixo no programa na classe HelloWorldCommands que contêm três Sub's (a sub é uma main(void) do C#).
Vamos analisar cada função.
- ' Defines a command which prompt a message on the AutoCAD command line
- <Autodesk.AutoCAD.Runtime.CommandMethod("HELLO")> _
- Public Sub HelloCommand()
- Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(vbNewLine + "Hello World!" + vbNewLine)
- End Sub
Observe que a função HelloCommand só tem uma unica linha de comando que pega o AutoCAD, seu documento ativa, ou seja, o que você esta vendo, pega o Editor dele que é na verdade a linha de comando do AutoCAD e escreve um texto ("Message") "Hello World!", simples assim.
- ' Defines a command which displays a Windows form
- <Autodesk.AutoCAD.Runtime.CommandMethod("HELLOFORM")> _
- Public Sub HelloFormCommand()
- Dim dlg As New HellowWorldForm()
- Application.ShowModalDialog(dlg)
- End Sub
O ultimo comando é o mais complicado, trata-se de escrever "Hello World!" no AutoCad e para isso ele acessa toda a estrutura de objetos do AutoCAD criando um texto no estilo MText e forçando-o no desenho ativo. A explicação mais completa vou deixar para o próximo post.
Eu sei que eu fiquei muito tempo sem postar nada, mas nesse ano eu pretendo mudar isso. Quero publicar aqui um post por semana com alguma novidade sobre programação para AutoCAD em .NET. Espero que estejam gostando dos post e estejam sendo úteis.
Com certeza são úteis.
ResponderExcluir