Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: AutoCAD .NET API C# ::: Dicas & Truques ::: Criação de Plug-ins e Add-ons

Como criar o seu primeiro plug-in para o AutoCAD usando ObjectARX, Visual Studio 2019 e C#

Quantidade de visualizações: 252 vezes
Nesta dica mostrarei passo-a-passo como você pode criar o seu primeiro plug-in para o AutoCAD 2023 usando ObjectARX, Visual Studio 2019 e C#. O primeiro passo é ter em mente que o AutoCAD 2023 requer códigos C# ou VB.NET que têm como alvo o .NET Framework 4.8. Mesmo se a versão do seu .NET Framework for superior a isso, teremos que alterar o alvo para 4.8. Mais adiante eu mostro como isso pode ser feito.

Como o tempo passa muito rápido, pode ser que você esteja lendo essa dica com uma instalação do AutoCAD 2024 ou mais recente. Antes de continuar, pesquise a versão do .NET Framework exigida pela sua versão.

Então, vamos começar. Na minha máquina eu tenho o AutoCAD 2023, o Visual Studio 2019 (embora eu já tenha o VS 2022, uso a versão 2019 para o desenvolvimento de plug-ins para o AutoCAD e o Revit) e o .NET Framework 5.0. Lembre-se: mais adiante vou mostrar como colocar como target o .NET Framework 4.8.

Como instalar o ObjectARX SDK

Antes de iniciarmos o desenvolvimento de plug-ins para o AutoCAD, nós precisamos do SDK do ObjectARX. Para fazer o download, acesse a URL https://www.autodesk.com/developer-network/platform-technologies/autocad/objectarx-download e escolha a versão para a sua instalação do AutoCAD. Na minha máquina o diretório "inc" do ObjectARX que contém os assemblies que vamos usar no nosso plug-in está localizado em "C:\Autodesk\ObjectARX\inc".

Criando o projeto C# no Visual Studio

Inicie o Visual Studio 2019 e vá no menu Arquivo -> Novo -> Projeto. Na janela "Criar um novo projeto", selecione Biblioteca de Classes e marque a linguagem C#. Clique o botão Próximo.

Na janela "Configurar seu novo projeto", dê o nome "PrimeiroPluginAutoCAD" para o campo Nome do projeto e, em seguida, escolha o local que você quer salvá-lo. Para este exemplo eu salvei o projeto no diretório "C:\estudos_autocad". Clique o botão Próximo.

Na janela "Informações adicionais" nós podemos selecionar a Estrutura de Destino. Se você não tiver o .NET Framework 4.8, escolha a mais superior e recente. Para esta dica eu coloquei .NET 5.0. Mais adiante a gente vai editar o arquivo de configuração do projeto para termos como alvo o .NET Framework 4.8. Clique o botão Criar.

Até o momento o nosso plug-in contém o seguinte código:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;

namespace PrimeiroPluginAutoCAD {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hello World!");
    }
  }
}

Veja que ainda está longe do nosso objetivo, mas vamos com calma.

Como adicionar referências aos assemblies do ObjectARX SDK

Antes de continuarmos nós precisamos resolver as dependências para os assemblies do ObjectARX SDK. Para isso, vá no Gerenciador de Soluções, expanda o item PrimeiroPluginAutoCAD, clique com o botão direito no nó Dependências e escolha a opção Adicionar Referência de Projeto.

Na janela Gerenciador de Referências, vá na opção Procurar -> Recente. Clique o botão Procurar e vá até o diretório "C:\Autodesk\ObjectARX\inc". Localize o arquivo AcMgd.dll, selecione-o e clique o botão Adicionar. Faça o mesmo com os arquivos AcDbMgd.dll e AcCoreMgd.dll. Para finalizar, clique o botão Ok na janela Gerenciador de Referências, expanda cada uma das referências que adicionamos e marque a opção Local da Cópia como "não".

Código completo para o plug-in do AutoCAD usando ObjectARX, Visual Studio 2019 e C#

Já temos tudo que precisamos. Está na hora de escrever o código do Plug-in. Modifique o conteúdo do arquivo Program.cs para a seguinte versão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

[assembly: CommandClass(typeof(PrimeiroPluginAutoCAD.Class1))]
namespace PrimeiroPluginAutoCAD {
  public class Class1 {
    [CommandMethod("desenharlinha")]
    public void HelloCommand() {
      // acessamos o documento ativo do AutoCAD e a base de dados
      Document doc = Application.DocumentManager.MdiActiveDocument;
      Database db = doc.Database;

      // criamos uma nova sessão
      using (Transaction transacao = db.TransactionManager.StartTransaction()) {
        // acessamos a tabela de blocos para escrita
        BlockTable tabelaBlocos;
        tabelaBlocos = transacao.GetObject(db.BlockTableId,
          OpenMode.ForWrite) as BlockTable;
        BlockTableRecord regTabelaBlocos;
        regTabelaBlocos = transacao.GetObject(tabelaBlocos[BlockTableRecord.ModelSpace],
          OpenMode.ForWrite) as BlockTableRecord;

        // vamos criar uma nova linha
        Line linha = new Line(new Point3d(0, 0, 0), new Point3d(50, 100, 0));
        
        // adicionamos a linha à tabela de blocos e à base de dados
        regTabelaBlocos.AppendEntity(linha);
        transacao.AddNewlyCreatedDBObject(linha, true);
        
        // finalizamos a transação
        transacao.Commit();
      }
    }
  }
}

Agora, vá até o diretório "C:\estudos_autocad\PrimeiroPluginAutoCAD" e abra o arquivo PrimeiroPluginAutoCAD.csproj para edição (pode ser no Bloco de Notas, Notepad++, etc). Altere o valor do elemento <TargetFramework> para:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<TargetFramework>net48</TargetFramework>

Hora de compilar o plug-in. Clique na opção Compilação -> Compilar Solução. Se tudo correu bem você encontrará um arquivo PrimeiroPluginAutoCAD.dll no diretório "C:\estudos_autocad\PrimeiroPluginAutoCAD\", dentro da pasta "bin\Debug\net4.8". Este é o arquivo do nosso plug-in do AutoCAD.

Como executar o meu plug-in C# no AutoCAD

Agora que já temos o arquivo PrimeiroPluginAutoCAD.dll, abra o AutoCAD e digite NETLOAD na janela de comando e pressione Enter. Na janela Choose .NET Assembly você deverá selecionar o arquivo PrimeiroPluginAutoCAD.dll e clicar o botão Open.

Não se assuste com o texto "O autor deste complemento não pôde ser verificado. O que deseja fazer?". Este aviso é muito comum quando estamos instalando plug-ins no AutoCAD. Se você tem certeza que o plug-in foi baixado de uma fonte confiável, basta clicar no botão Sempre Carregar e ir em frente.

Agora é só digitar "DESENHARLINHA" na janela de comandos e ver uma linha ser desenhada automaticamente nas coordenadas (0, 0, 0) e (50, 100, 0). Deu tudo certo? Agora é só aprofundar os seus conhecimentos no desenvolvimento de plug-ins para o AutoCAD usando ObjectARX, Visual Studio 2019 e C#.

Link para compartilhar na Internet ou com seus amigos:

AutoCAD .NET API C# ::: Dicas & Truques ::: Linha, Linhas, Comando LINE

Como selecionar uma linha no AutoCAD e mostrar a equação da reta correspondente usando AutoCAD .NET C# API

Quantidade de visualizações: 318 vezes
Em algumas situações nós queremos posicionar pontos ou outros desenhos em cima de uma linha, ou seja, em cima de uma reta. Uma das melhores formas de fazer isso é obtendo a equação reduzida da reta e usar as coordenadas x e y correspondentes.

Nesta dica eu mostro como isso pode ser feito usando a AutoCAD .NET C# API. O primeiro passo é pedir para o usuário selecionar a linha na área de desenho do AutoCAD usando doc.Editor.GetEntity().

Em seguida nós obtemos as coordenadas iniciais e finais da linha usando as propriedades StartPoint e EndPoint do objeto AcadLine. Para finalizar nós calculamos a equação reduzida da reta e exibimos o resultado.

Fique atento ao código que calcula o coeficiente angular e linear da reta. Considere o caso em que o coeficiente angular ou linear é igual a 0.

Veja o código AutoCAD .NET API C# completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;

[assembly: CommandClass(typeof(PluginEstudos.Class1))]
namespace PluginEstudos {
  public class Class1 {
    [CommandMethod("estudos")]
    public void Estudos() {
      // vamos obter o documento atual
      Document doc = Application.DocumentManager.MdiActiveDocument;
      // vamos obter a base de dados
      Database db = doc.Database;

      // opções da seleção
      PromptEntityOptions opcoes = new 
        PromptEntityOptions("\nSelecione uma linha: ");

      // obtemos o resultado da seleção
      PromptEntityResult resultado = doc.Editor.GetEntity(opcoes);

      // a seleção foi feita com sucesso
      if (resultado.Status != PromptStatus.OK) {
        Application.ShowAlertDialog("Nenhum elemento selecionado.");
        return;
      }

      // obtemos o id do objeto selecionado
      ObjectId id_objeto = resultado.ObjectId;

      // iniciamos uma transação
      using (Transaction trans = db.TransactionManager.StartTransaction()) {
        BlockTable tabela_blocos;
        BlockTableRecord reg_tabela_blocos;

        // obtemos a entidade selecionada
        Entity ent = trans.GetObject(id_objeto, OpenMode.ForWrite) as Entity;
        
        // a entidade selecionada é uma linha
        if (ent is Line) {
          Line linha = ent as Line;
          // vamos obter o ponto inicial da linha
          Point3d ponto_inicial = linha.StartPoint;
          // vamos obter o ponto final da linha
          Point3d ponto_final = linha.EndPoint;
          string sinal = "+";
          // vamos calcular o coeficiente angular da reta
          Double m = (ponto_final.Y - ponto_inicial.Y) / (ponto_final.X - ponto_inicial.X);
          // vamos calcular o coeficiente linear
          double n = ponto_inicial.Y - (m * ponto_inicial.X);

          // coeficiente linear menor que zero? O sinal será negativo   
          if (n < 0) {
            sinal = "-";
            n = n * -1;
          }

          // abre o model space para escrita
          tabela_blocos = trans.GetObject(db.BlockTableId,
            OpenMode.ForRead) as BlockTable;
          reg_tabela_blocos = trans.GetObject(tabela_blocos[BlockTableRecord.ModelSpace],
            OpenMode.ForWrite) as BlockTableRecord;

          // vamos calcular as coordenadas x e y do ponto médio que
          // será usado para posicionar o texto
          double x = (ponto_inicial.X + ponto_final.X) / 2;
          double y = (ponto_inicial.Y + ponto_final.Y) / 2;

          // criamos um novo texto
          DBText texto = new DBText();
          texto.TextString = "y = " + m.ToString("0.00") + "x"
            + " " + sinal + " " + n.ToString("0.00");
          texto.SetDatabaseDefaults();
          texto.Height = 5;
          texto.Position = new Point3d(x, y - texto.Height, 0);
          // adicionamos o texto no desenho
          reg_tabela_blocos.AppendEntity(texto);
          trans.AddNewlyCreatedDBObject(texto, true);
        }
        else {
          Application.ShowAlertDialog("Você não selecionou uma linha.");
        }

        // salvamos a transação
        trans.Commit();
      }
    }
  }
}

Ao executar este código AutoCAD .NET C# API e selecionar uma linha nós teremos um resultado parecido com:

Selecione uma linha [Usuário seleciona a linha]
[Mostra a equação reduzida da reta como um texto posicionado no ponto médio da linha]

Como forma de testar ainda mais o código, defina um valor para o x e experimente plotar um ponto na área de desenho do AutoCAD. Você verá que o ponto cai exatamente em cima da linha, ou seja, da reta que a representa.


AutoCAD .NET API C# ::: Dicas & Truques ::: Polyline - Polilinha

Como selecionar uma polilinha no AutoCAD e mostrar as coordenadas de suas vértices usando a AutoCAD .NET C# API

Quantidade de visualizações: 298 vezes
Em várias situações nós precisamos efetuar cálculos usando os vértices de uma polilinha. Nesta dica eu mostro como podemos pedir para o usuário selecionar uma polilinha na área de desenho do AutoCAD e mostrar as coordenadas x e y de cada um dos vértices.

No código abaixo eu trato duas formas de polilinhas no AutoCAD: a polilinha 2D Polyline e a polilinha 3D, representada pelo objeto Polyline3d. Note que as formas de se extrair os vértices desses dois objetos são completamente diferentes.

Se a polilinha for 2D, seus vértices são extraído usando-se a função GetPoint2dAt(), que retorna um objeto Point2d. Se a polilinha for 3D, ela será representada por um objeto da classe Polyline3d, e seus vértices são retornados como objetos PolylineVertex3d a partir de uma chamada à função GetObject() da classe Transaction.

Veja o código AutoCAD .NET C# API completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;

[assembly: CommandClass(typeof(PluginEstudos.Class1))]
namespace PluginEstudos {
  public class Class1 {
    [CommandMethod("estudos")]
    public void Estudos() {
      // vamos obter o documento atual
      Document doc = Application.DocumentManager.MdiActiveDocument;
      // vamos obter a base de dados
      Database db = doc.Database;

      // vamos pedir para o usuário selecionar uma polilinha
      PromptEntityResult resultado = doc.Editor.GetEntity(
        "Selecione uma polilinha: ");

      // a seleção foi feita com sucesso
      if (resultado.Status != PromptStatus.OK) {
        Application.ShowAlertDialog("Nenhum elemento selecionado.");
        return;
      }

      // iniciamos uma transação
      using (Transaction trans = db.TransactionManager.StartTransaction()) {
        // obtemos a polilinha selecionada
        DBObject objeto = trans.GetObject(resultado.ObjectId, OpenMode.ForRead);

        // vamos testar se a polilinha é do tipo leve ou otimizada
        Polyline polilinha2d = objeto as Polyline;
        if (polilinha2d != null) {
          // vamos percorrer todos os vértices, um de cada vez
          int numero_vertices = polilinha2d.NumberOfVertices;
          for (int i = 0; i < numero_vertices; i++) {
            // vamos obter um objeto Point2d ou Point3d
            Point2d ponto = polilinha2d.GetPoint2dAt(i);
            // e escrevemos na janela de comandos
            doc.Editor.WriteMessage("\nX = " + ponto.X.ToString("0.00") +
              "; Y = " + ponto.Y.ToString("0.00"));
          }
        }
        // é uma polilinha do tipo pesada, ou heavy
        else {
          Polyline3d polilinha3d = objeto as Polyline3d;
          if (polilinha3d != null) {
            // percorremos cada um dos vértices
            foreach (ObjectId id_vertice in polilinha3d) {
              PolylineVertex3d vertice3d = (PolylineVertex3d)trans.GetObject(
                id_vertice, OpenMode.ForRead);
              // e escrevemos na janela de comandos
              doc.Editor.WriteMessage("\nX = " + vertice3d.Position.X.ToString("0.00") +
                "; Y = " + vertice3d.Position.Y.ToString("0.00"));
            }
          }
        }

        // fechamos a transação
        trans.Commit();
      }
    }
  }
}

Ao executar este código AutoCAD .NET C# API nós teremos o seguinte resultado:

Command: Selecione uma polilinha:
X = 168.91; Y = 159.91
X = 415.17; Y = 126.24
X = 317.08; Y = 24.18
X = 80.53; Y = 104.29


Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Materiais empregados para instalação de água fria e esgoto

Em terminais de pias e acessórios embutidos na parede, onde são rosqueadas mangueiras e conexões, é indicada a aplicação de joelhos reforçados, em que a rosca é metálica, embutida sob pressão no PVC. A identificação dessa conexão é por um anel azul em sua face. Em relação ao joelho convencional, que é todo em PVC, a vantagem é:

A) estética, uma vez que a face do joelho proporciona um acabamento rente ao azulejo superior à comum.

B) econômica pois elimina uma série de outros componentes e conexões.

C) o sistema de engate rapido por meio de utilização de anel de vedação junto à rosca.

D) o fato de que, com o joelho reforçado, o risco de acontecer trinca resultante de aperto é menor.

E) que fica exposta, eliminando o encaixe na alvenaria, diferentemente das comuns.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Qual o resultado da execução do seguinte código JavaScript?

document.write(1 +  "2" + "2");

A) O valor 122 será exibido.

B) O valor 5 será exibido.

C) O valor 32 será exibido.

D) O valor NaN será exibido.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

São exemplos de objetos do espaço físico que compreendem o estudo da hidrografia, com exceção de

A) nascentes.

B) lagos.

C) rios.

D) matas.

E) aquíferos.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Qual o resultado da execução do seguinte código Python?

estados = {"SP": "SÃO PAULO", "GO": "GOIÁS",
  "RJ": "RIO DE JANEIRO", "MG": "MINAS GERAIS"}
print("GO" in estados)

A) "GO"

B) True

C) False

D) "SP", "GO", "RJ", "MG"

E) "GOIÁS"
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Turbomáquinas

Uma turbomáquina é um dispositivo no qual a energia é transferida para ou de um fluido em movimento contínuo. A linha da lâmina gira e altera a pressão do fluido, realizando trabalhos no fluido (bomba hidráulica) ou realizando o trabalho na linha da lâmina pelo fluido (turbina).

Qual classe de máquinas hidráulicas é especialmente excluída quando é considerada essa definição apresentada?

A) Essa definição exclui a classe de turbinas eólicas, pois, apesar de referenciar o termo genérico "turbina", não engloba os dispositivos cujos fluidos não são a água e cuja a vazão do fluido pode ser variável.

B) Essa definição exclui as máquinas hidráulicas que contêm um eixo de rotação. Nesse caso, foram excluídos, especialmente, os motores hidráulicos, um grupo amplo e com muitos dispositivos com vazão alta.

C) Essa definição exclui a classe de dispositivos chamados máquinas de deslocamento positivo. Nesses dispositivos, há limites móveis que forçam o fluido a se mover ou são forçados a se mover pelo fluido.

D) Essa definição exclui a classe de dispositivos chamados motores elétricos. Tais máquinas hidráulicas são responsáveis por receber a energia mecânica produzida por dispositivos, como as turbinas eólicas.

E) Essa definição exclui a classe de dispositivos chamados máquinas de deslocamento negativo. Nesses dispositivos, há limites móveis que forçam o fluido a se mover ou são forçados a se mover pelo fluido.
Verificar Resposta Estudar Cards Todas as Questões

Veja mais Dicas e truques de AutoCAD .NET API C#

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 44 usuários muito felizes estudando em nosso site.