Webinar Autodesk – Automação de Projetos: Inventor + Forge

Objetivo Aplicação Desenvolver uma aplicação que crie imagens de miniatura de arquivos ‘.ipt’ sem possuir o Inventor apenas arrastando o arquivo (drag and drop) na aplicação: Estrutura da aplicação A aplicação se comunica com a API do Forge através de…

06/01/2022 leandro.paradiso

Objetivo

Aplicação

Desenvolver uma aplicação que crie imagens de miniatura de arquivos ‘.ipt’ sem possuir o Inventor apenas arrastando o arquivo (drag and drop) na aplicação:

Estrutura da aplicação

A aplicação se comunica com a API do Forge através de requisições HTTP.Utilizaremos a API de Design Automation que possui os recursos para se comunicar com a Nuvem da Autodesk onde é mantido:

  • Inventor Core (Versão do Inventor que roda na nuvem);
  • Inventor AddIn (Código que executa ações no Inventor Core);
  • Bucket (Storage disponibilizado para upload/download).

Fluxo de desenvolvimento

Inicia-se com o Inventor AddIn onde tem-se o núcleo da solução. Segue-se com o setup do Forge para preparar para o consumo da aplicação. Finalmente elabora-se a aplicação: lógica e interface.

Aviso

O foco desse tutorial é ser didático e facilitar o processo de entendimento do fluxo de trabalho envolvendo a API de “Design Automation” do Forge, portanto o tutorial não visa segurança nem performance.

Requisitos

  • Visual Studio
  • Visual Studio Code
  • Conhecimentos de Frontend (HTML/CSS/JS)
  • Backend (NodeJs)
  • Inventor API

Desenvolvimento

Inventor AddIn

1. Instalar o plugin Design Automation for Inventor para o Visual Studio

Link: https://marketplace.visualstudio.com/items?itemName=Autodesk.DesignAutomation2.

2. Crie um novo projeto com o template instalado no passo anterior:

Será exibido o template do projeto com uma solução contendo 3 projetos:

  • DebugPluginLocally: Usado para Debug do AddIn usando o Inventor instalado localmente;
  • Interaction: Template que permite enviar o AddIn empacotado para o Forge;
  • Plugin Project: Na imagem já aparece renomeado para InventorThumbnailAddinPlugine representa o código que será executado na nuvem.

3. No projeto InventorThumbnailAddinPlugin adicionamos um arquivo de classe chamado CreateThumbnailAutomationonde vamos implementar a classe que realizará a automação:

Em resumo estamos posicionando a câmera e salvando a tela como Bitmap para gerar a imagem miniatura (512 x 512) e salvando a imagem como “thumbnail.bmp”.

4. Com a automação realizada precisamos garantir que o Inventor Core saberá como ativar e desativar esse AddIn. Para
isso alteramos o arquivo “StandardAddInServer” (renomeado nesse tutorial para “PluginServer”):

  1. Com tudo pronto podemos “buildar” o AddIn. Certifique-se que o projeto InventorThumbnailAddinPlugin esteja selecionado como “Start up project”:

Build a aplicação e como resultado teremos:

Essa é uma das grande vantagens de usarmos o template da Autodesk para o projeto. O AddIn já é empacotado e zipado da maneira correta para enviarmos para o Forge.

Forge Setup

Antes de iniciarmos a configuração do Forge para essa aplicação, é importante entendermos 4 conceitos que são utilizados pela API de Design Automation:

  • Engine: Se refere a aplicação na qual executaremos a automação;
  • AppBundle: É o AddIn da aplicação “empacotado” para ser lido pelo Forge;
  • Activity: É o template das tarefas (WorkItem) onde é relacionado o AppBundle, a saída e a entrada de dados;
  • WorkItem: Representa uma tarefa a ser executado no AddIn.

Para simplificar esse tutorial, realizaremos a configuração do Forge através do Insomnia que é uma plataforma de API onde podemos gerar requisições HTTP.

1. Para iniciar, é necessário ter uma conta ativa no Forge (pode ser a trial) e criar uma aplicação que representaram e liberaram as chamadas que realizaremos através da nossa aplicação.

No site do Forge, clique em create app:

Selecione a API de Design Automation e de Data Management e salve a cadastro. Como resultado teremos duas
informações essenciais para a comunicação com o Forge: o CLIENT ID e o CLIENT SECRET.

2. Para realizar a autenticação com o Forge, realizaremos uma requisição no Insomnia, passando no corpo da requisição os dados necessários:

O resultado da requisição será um objeto com três propriedades (contendo o TOKEN que precisamos para os próximos
passos):

Com isso estamos autenticados e podemos fazer uso da API do Forge com segurança.

3. Para registrar o AppBundle:

Como resposta teremos um objeto JSON contendo os dados necessários para realizarmos o upload do nosso

4. Upload do AppBundle: De posse dos dados da requisição anterior realizaremos uma nova requisição contendo nosso AddIn que foi criado no capítulo anterior:

5. Criaremos um alias para o AppBundle. Isso ajuda pois cada AppBundle, cada atividade ou tarefas podem ter várias
versões:

Assim informamos a API que quando declaramos o id “prod” estamos utilizando a versão 1.

  1. Para que possamos executar uma ação, é necessário criar uma Activity, que formatará como serão feitas as requisições das tarefas a serem executadas na nuvem.
  • commandLine: Contém o que será executado. No caso estamos solicitando que o servidor rode o Inventor abrindo um arquivo com nosso AddIn sendo executado;
  • parameters: Indicamos que o parâmetro de entrada é um arquivo “.ipt” que será obtido por meio do método GET e o arquivo de saída é um arquivo bitmap com o nome “thumbnail.bmp”;
  • engine: Em qual software e versão as tarefas serão executadas;
  • appBundles: Em quais appBundle utilizaremos.

7. Da mesma forma que fizemos com o AppBundle, criaremos um alias para a Activity:

Com isso temos o Forge configurado para receber

Aplicação

A ideia da aplicação é apresentar uma interface onde se possa realizar o upload de um arquivo “.ipt” e utilizarmos ele para executar uma tarefa no Forge seguindo a Activity que foi gerada no capítulo anterior.

Para a aplicação utilizaremos NodeJs para o backend e HTML/CSS/JS para o frontend.

Para o desenvolvimento usaremos o VS Code.

  1. Implementamos a interface com funcionalidade de “drag and drop”:

2. Na interface inserimos um form que enviará o arquivo para a rota “/uploads”:

3.Criamos a rota “/uploads” para lidar com o arquivo:

  • Aqui estamos utilizando o Multer para auxiliar no processo de upload do arquivo e salvando em uma pasta chamada“uploads”;
  • Definimos o caminho do arquivo no servidor;
  • Executamos a função getImagefromModel do módulo api que retorna uma Promise. Em caso de sucesso salvamos a imagem na pasta “/images” no nosso servidor.

O módulo api importado no código é onde eu separei a lógica que lidara com o Forge que será detalhada no próximo
tópico.

4. Para simplificar o código vamos isolar as funcionalidades que realizaram o acesso a API do Forge:

A função principal é a getImagefromModel que encapsula todo o processo de se obter a imagem do arquivo.

A primeiro coisa é garantir que estamos autenticados. Aqui estamos importando as credenciais que são as mesma
utilizadas no capítulo Forge Setup para realizar a autenticação. Com o token obtido da autenticação conseguimos realizar as demais chamadas a API do Forge:

Após isso realizamos o upload do arquivo para a nuvem e geramos as duas urls (do arquivo e da imagem) que serão
acessados pela WorkItem que criaremos:

Finalmente criamos o workItem que implementa a Activity criada anteriormente passando como argumentos as urls de entrada e saída. Foi criado um loop para checar o progresso da tarefa até que ela termine. Ao final recebemos como resposta da requisição a imagem miniatura em Bitmap.

try {
await this.setWorkItem();
} catch (error) {
console.log(error);
}

5. Para visualizar essas imagens na página inicial da aplicação, adicionamos no servidor mais uma rota:

Através da view engine ejs podemos passar as imagens que já foram geradas como argumentos para a renderização da página:

Considerações finais

O código e a aplicação apresentadas possuem intenção didática em como funciona um fluxo de trabalho usando a API de Design Automation do Forge, não tendo qualquer preocupação relacionada a performance, usabilidade e/ou segurança.

Referências

Simple introduction to Design Automation for Inventor

Simple introduction to Design Automation for Inventor

If you have problems with this part, or simply want to skip the creation of an
Inventor plugin, here’s a zip file with our plugin’s source code and binaries:
InventorThumbnailAddin.zip. Edit: there’s now a Visual Studio Project Template
https://forge.autodesk.com/blog/simple-introduction-design-automation-inventor

Visual Studio Market Place – Design Automation for Inventor

Design Automation for Inventor – Visual Studio Marketplace

All the installed templates are available when creating a new project. Open Visual Studio Create a new project (File → New → Project) Select “Visual C#” group Pick an installed template (e.g. “Design Automation for Inventor”) Enter a name https://marketplace.visualstudio.comitems?itemName=Autodesk.DesignAutomation

Autodesk Forge API Reference

https://forge.autodesk.com/en/docs/design-automation/v3/reference/http/

Author: @Vinícius Souza


Cadastre-se em nossa newsletter!

Receba nossos conteúdos em primeira mão
e fique por dentro de todas as nossas novidades.