Develop Autodesk Inventor Addin using C# – Part 1

Part 1a

Part 1b

Watch High Resolution video of both above videos on AR-CAD

I hope you have gone through my earlier video tutorial and post, as they provide a good (if not great) foundation for basic concepts of Autodesk Inventor API and how it Inventor can be customized using Visual C#. In the previous posts, we had connected to Inventor as an external exe file, which runs out 0f process with respect to Inventor and hence can be considered slow. To make the addins work faster and to give the end user a better work-flow and experience, we have to make an addin which is internal to Inventor and which runs in-process with respect to Inventor.

In the above videos ( they have been broken into part 1a and 1b as youtube couldn’t upload the whole video, which is 12 mins long), basic introduction is given to “How to develop an addin to Inventor using C#”. Please go through it and I hope the explanation in it is good enough to get you started. In Next versions of this tutorial, I shall try to increase the complexities. If there are any doubts/ clarifications / suggestions, I would love to hear from you as comments to this post. Watch High Resolution video of both above videos on AR-CAD

Customize Autodesk Inventor API using C# – Part 3

In continuation to my previous post on Customizing Inventor using C#, I go a step further and interact with an opened Assembly through API. I have ported the code from VBA to C# for the example explained in Introduction to Inventor API and VBA (Visual Basic for Applications). The attached document is from Autodesk University of 2003.

Start a new C# Windows Application project in Visual Studio 2005, as done in previous tutorial. Design the form as shown in the image to the left. Double clicking on Hide / Show will take you to Form1.cs in the Code Viewer window and add/append the following code into it. Please note that I have changed the Names/Identifiers of form elements to txtSearchName , cmdShow, cmdHide as explained in the above tutorial document.

In this example, when you hit ‘F5’ or Debug, a windows form appears as shown. Type a part name in the Search Field and hit “Hide”. If any part(s) exist in the opened assembly with that name, it/they would be made invisible. If its hidden and you hit on “Show”, the part would be made visible. In our case, we have made Piston part invisible in the engine assembly that ships with Inventor as an example assembly. Save the application by File> Save All in Visual Studio.

You can also use this Windows Application by executing the .exe file that is produced, when you debug/build your application. In my case, its at My DocumentsVisual Studio 2005ProjectsWindowsApplication1WindowsApplication1binDebugWindowsApplication1.exe . Double clicking on the exe file would also popup the Form that was developed.

Form1.cs code

[sourcecode language=’c#’]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
//Instantiate a variable with Inventor.Application object.
//It should have a scope throughout this Class
private Inventor.Application oApp=(Inventor.Application)System.Runtime.
InteropServices.Marshal.GetActiveObject(“Inventor.Application”);

//Declare oAsmDoc to have a scope within this Class
private Inventor.AssemblyDocument oAsmDoc;
public Form1()
{
InitializeComponent();

//Check that a document is open
if (oApp.Documents.Count == 0)
{
MessageBox.Show(“An Assembly must be active”);

}
//Check that an assembly document is active
if (oApp.ActiveDocument.DocumentType !=
Inventor.DocumentTypeEnum.kAssemblyDocumentObject)
{
MessageBox.Show(“As Assembly document must be active”);

}
//First Type Cast ActiveDocument into AssemblyDocument
//Set a reference to the active document
oAsmDoc = (Inventor.AssemblyDocument) oApp.ActiveDocument;
}

private void cmdHide_Click(object sender, EventArgs e)
{
//Call the function that traverses the assembly
// and sets the visibility.
SetVisibility(oAsmDoc.ComponentDefinition.Occurrences,
txtSearchName.Text, false);

//Update the View.
oApp.ActiveView.Update();
}

private void cmdShow_Click(object sender, EventArgs e)
{
//Call the function that traverses the assembly
// and sets the visibility.
SetVisibility(oAsmDoc.ComponentDefinition.Occurrences,
txtSearchName.Text, true);

//Update the View.
oApp.ActiveView.Update();
}

private static void SetVisibility
(Inventor.ComponentOccurrences Occurences, string SearchName,
bool VisibilityOn)
{
//Iterate through each of the occurences
//in the collection provided.
foreach (Inventor.ComponentOccurrence oOccurence in Occurences)
{//Check to see if the occurence name matches the search name
//The strings are converted to lower case
// to remove context sensitivity.
if(oOccurence.Name.ToLower().Contains(SearchName.ToLower()))
{//Check to see if the visibility is different than the specified
if (oOccurence.Visible != VisibilityOn)
{//Set the Visibility of the occurence.
oOccurence.Visible = VisibilityOn;
}
}
}
}
}
}
[/sourcecode]

Customize Autodesk Inventor API using C# – Part 2


Watch High Resolution video on AR-CAD

I hope you have gone through my previous posts on Inventor API a) Introduction to Autodesk Inventor API and Customization and b) Customize Autodesk Inventor using C#. It is also assumed that you have gone through DevTV: Introduction to Inventor Programming Video, which is on Inventor Customization page. In the above video, we connect to Inventor API from Visual C# (Visual Studio 2005). I have just replaced the VB.NET code that was used in DevTV tutorial with the corresponding C# code. You can see the comparison below. Please note how GetObject in VB.NET is replaced by a much more lengthier code. If the above youtube video is not very clear, watch it on AR-CAD.

VB.NET Code
[sourcecode language=’vb’]
Dim oApp As Inventor.Application
oApp = GetObject( , “Inventor.Application”)
MsgBox(“Number of open docs = ” & oApp.Documents.Count)
[/sourcecode]

Visual C# Code
[sourcecode language=’c#’]
Inventor.Application oApp;
//The below initialization is on a single line
oApp =
(Inventor.Application)System.Runtime.InteropServices.Marshall.
GetActiveObject(“Inventor.Application”);

int number_int = oApp.Documents.Count;
string number_string = Convert.ToString(number_int);

MessageBox.Show (“Number of open docs =” + number_string);
[/sourcecode]

Customize Autodesk Inventor API using C#

In continuation of previous post on Introduction to Inventor API and Customization, this blog post will show some insights on how to customize Inventor API using Visual C# and Visual Studio 2005.

It is assumed that you have installed Autodesk Inventor (Version 10 or above) and Visual Studio 2005. As per the discussion over Inventor Customization forum, it is suggested that you have Visual Studio 2003 or 2005 for the Inventor Addin Template to work properly. At present, Addin Template does not get installed in Visual Studio 2008.

To get started with Visual C# and Visual Studio IDE (Integrated Development Environment), watch the following Videos from MSDN Library.

  1. Introduction to Visual C# 2008 Express Edition. Though we would be using Visual Studio 2005 for our development purpose, Visual C# Express Edition has similar functionality as Visual Studio. In this video, basic understanding of how an IDE works could be gained and also how C# programs and projects are developed and built.
  2. Introduction to C# Programming Language. This video shows how to develop C# applications using Visual Studio 2005. It is highly recommended that you download this package installer and upon installation on your system, you have a copy of Video downloaded and also a MS Word Document which is basically a transcript for the Video and also explains Basics of C# in a very good way.

I hope you also have downloaded DevTv: Introduction to Inventor Programming from Inventor Customization Page. In this video, Mr. Wayne Brill of Autodesk has explained API concepts very well, but they are either in VB6 or VB.NET. I would like to highlight to the audience that even in Inventor Programmers Help (Located in Help tab), most of the code examples are given in VB.NET or VBA.

I would try to bridge the gap by giving out equivalent C# code in the blog posts to follow. You may also be interested to check out a free VB.Net to VC# translator I stumbled upon, though I haven’t used it yet.

Introduction to Autodesk Inventor API and Customization

Update: IN-Motion, a Motion and Dynamic Simulation Addin for Autodesk Inventor has been launched by us.

Update: Video tutorials on usage of IN-Motion for Dynamic Simulation of Autodesk Inventor Assemblies.

Autodesk Inventor Logo For those in CAD (Computer Aided Design) field, Autodesk would have been a very common company they would have come across. One of the most famous CAD software, AutoCAD belongs to their stable. Autodesk Inventor is somewhat an extension of AutoCAD, specific for Manufacturing section and deals mainly with 3D CAD, solid modeling of parts and then building assemblies out of them, Rapid Prototyping and many more advanced features. Inventor has been a great success in this field and it is evident from the fact that there are more than 800,000 official licensed users of Inventor across the world.

One of the strong points for the success is the fact that Autodesk has opened its API (Application Program Interface) to developers who can extend the base product to fit into their requirements. This is called Customization of the CAD package. Inventor also has its API exposed to developers through COM (Component Object Model) interface using which developers can customize the base installation of Inventor to tailor made needs such as automating a certain process or developing addins/ addons/ plugins which do specific task.

For those, who want to get started with Inventor API customization using their SDK (Software Development Kit), the following steps can be followed.

  1. Introduction to Inventor API and VBA (Visual Basic for Applications). The attached document is from Autodesk University of 2003. Though it may seem to be old, its a very good starting point and the code works even in latest versions of Inventor.
  2. You may also consider going through the 3 part series of Focused VBA for Inventor, which is a part of AUGI Training Program (2007) : Part 1, Part 2 and Part 3.
  3. Visit Inventor Customization page and get more insight, by watching 1 hour video on Basics of Inventor API and developing addins for Inventor (DevTV: Introduction to Inventor Programming )
  4. Decide upon which .NET technology you would be comfortable in developing Addins and Standalone applications (Either of VB.NET, VC++ or Visual C#)
  5. Browse through Inventor Customization forum to get more insights, code examples and also problems faced by other developers and also an active Autodesk support team which answers those queries
  6. If you happen to progress well, consider joining Autodesk Developers Network (ADN) and also attend AUGI Training Programs (ATP)
  7. Also you can keep a track on my Blog as I would be trying to pen down my learning, developing full fledged Addins for Inventor and also other major CAD software.

Glad am back to CAD World.. Crossroads of my Career

Update: IN-Motion, a Motion and Dynamic Simulation Addin for Autodesk Inventor has been launched by us.

Crossroads in Career Its been quite some time since I blogged. I was pretty much occupied with the Confusion I had in my mind, as I had hit a Cross-Roads of my career. After quitting my job at HeroHonda R&D, I teamed up with my mentor, Aik-Siong Koh in US and we started off with AR-CAD in April 2007. Since he is an expert at CAD (Motion Simulation) and he had used Smalltalk to develop freeCAD, I also had to learn Smalltalk to help him in further development. Our initial plan was to develop Motion Add-ons/Add-ins or Plug-ins for various CAD software such as Autodesk Inventor, SolidWorks, Rhino CAD and others. Somehow in the due course, we thought of exploring Web 2.0 using Seaside, which is a web framework built on Smalltalk. The idea was that I could learn Smalltalk and also explore Web 2.0 as we had plans for integration of Web and CAD.

We started developing Caartz using Seaside. It took us a long time to get it out. During this period, I learnt Smalltalk, Seaside, OOP, Basic Linux Setup and Usage, various Web related configurations such as Apache, load-balancing etc. When Caartz was launched, it was just a lot of things we had learnt and we had no plans to make money out of it. Since I had gathered experience in Web domain, I completely forgot that I had to return to CAD to make Motion Add-ons.

Then I helped a friend to develop a couple of websites and took a Web Developer Job in a Bangalore based Services Startup. Though the work there involved me in whole life cycle of a project and was very challenging, I thought I was missing something there. Being a Mechanical Engineer from a reputed Engineering College with a lot of interest in CAD, I had a feeling that I was not doing what I was supposed to do. After a couple of months in that Web Startup, I quit it and again I have teamed up with my mentor in US to develop CAD Add-ons.

This time, we are very serious about our path we are going to follow to become a very known name in Motion Simulation Domain. We have completely revamped AR-CAD website as the first step. My mentor already has Motion Simulation code in Smalltalk. I am learning VBA and .NET C# to develop an Add-in which talks to both Autodesk Inventor COM API and our Smalltalk code. As of today, I am able to make simple VBA Add-ons for Inventor and hopefully within next 6 months, we would be ready to sell our Motion Add-ons for Inventor. Once it is done, we would then develop Motion Add-ons for other CAD software.

Jist of my post is that I had come across a Crossroads a year ago and chose a road which took me to Web 2.0 domain. Somewhere down the line, I realized that I wasn’t enjoying it and came back to the crossroads and now I have chosen the road which takes me into CAD world and I am glad that I am finding it interesting and challenging.