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# APIQuantidade 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# APIQuantidade 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 |
JavaScript - Como testar se uma string termina com uma determinada substring em JavaScript usando a função endsWith() PHP - Como inserir um determinado número de zeros antes de um número em PHP usando a função sprintf() |
Códigos Fonte |
Software 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 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 |