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 Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe . Double clicking on the exe file would also popup the Form that was developed.
Form1.cs code
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;
}
}
}
}
}
}
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
Dim oApp As Inventor.Application
oApp = GetObject( , "Inventor.Application")
MsgBox("Number of open docs = " & oApp.Documents.Count)
Visual C# Code
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);
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.
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.
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)
Decide upon which .NET technology you would be comfortable in developing Addins and Standalone applications (Either of VB.NET, VC++ or Visual C#)
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
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.
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.
I am a Mechanical Engineer turned CAD Enthusiast. My interests include CAD, Web 2.0 and would love to integrate both. I enjoy Seaside, CodeIgniter. Of late, I have started developing CAD Add-ins for various CAD software including Autodesk Inventor and SpaceClaim