Waarom Inventor automatiseren met C#?
Autodesk Inventor stelt vrijwel zijn volledige functieset beschikbaar via een COM-gebaseerde API. Vanuit C# kun je onderdelen, samenstellingen en tekeningen programmatisch aanmaken, parameters aansturen, bestanden exporteren en batchbewerkingen uitvoeren op honderden modellen — alles wat je handmatig kunt doen, kun je scrippen.
Dit bericht richt zich op de snelste weg naar een werkende automatisering: verbinding maken met een actieve Inventor-instantie vanuit een zelfstandige C# console-applicatie. Zodra je het verbindingspatroon begrijpt, volgt de rest — onderdelen, schetsen, parameters — vanzelf.
Vereisten
- Visual Studio 2019 of 2022 (Community-editie is gratis)
- Autodesk Inventor 2020 of later geïnstalleerd
- Basiskennis C# — classes, methoden, using-statements
Twee manieren om Inventor te automatiseren
Voor het schrijven van code helpt het om je opties te kennen:
- Externe applicatie — een zelfstandige .exe of console-app die via COM verbinding maakt met een actief Inventor-proces. Het eenvoudigst te ontwikkelen en te debuggen.
- Inventor Add-In — een DLL die Inventor bij het opstarten laadt, met directe toegang tot het applicatie-object zonder COM-marshalling. Complexere installatie, maar beter voor productietools.
We beginnen met een externe applicatie. De API-aanroepen zijn identiek bij beide methoden.
Stap 1 — Project aanmaken
Maak in Visual Studio een nieuw Console App (.NET Framework)-project aan met als doel .NET Framework 4.8. Noem het InventorAutomatisering.
Stap 2 — Inventor API-referentie toevoegen
Klik met de rechtermuisknop op References → Add Reference → tabblad COM. Zoek naar Autodesk Inventor Object Library en vink het aan.
Staat het niet in de COM-lijst, blader dan direct naar:
C:\Program Files\Autodesk\Inventor 2024\Bin\Autodesk.Inventor.Interop.dll
Stel Embed Interop Types = False in de referentie-eigenschappen in. Als je dit op True laat staan, krijg je runtime-fouten met Inventor's COM-objecten.
Stap 3 — Verbinding maken en een bestand openen
using System;
using System.Runtime.InteropServices;
using Inventor; // Autodesk Inventor COM-namespace
namespace InventorAutomatisering
{
class Program
{
static void Main(string[] args)
{
Inventor.Application inventorApp = null;
try
{
// Probeer verbinding te maken met een al actieve Inventor-instantie.
// Als Inventor niet open is, gooit dit een COMException.
inventorApp = (Inventor.Application)
Marshal.GetActiveObject("Inventor.Application");
Console.WriteLine($"Verbonden met Inventor {inventorApp.SoftwareVersion.DisplayVersion}");
}
catch (COMException)
{
// Inventor is niet actief — start een nieuwe instantie
Console.WriteLine("Inventor niet actief. Nieuwe instantie starten...");
Type inventorType = Type.GetTypeFromProgID("Inventor.Application");
inventorApp = (Inventor.Application)Activator.CreateInstance(inventorType);
inventorApp.Visible = true; // venster zichtbaar maken
}
// Een bestaand onderdeelbestand openen
string filePath = @"C:\Modellen\MijnOnderdeel.ipt";
PartDocument partDoc = (PartDocument)inventorApp.Documents.Open(
filePath,
openVisible: true);
Console.WriteLine($"Geopend: {partDoc.DisplayName}");
// Een gebruikersparameter uitlezen
UserParameter lengthParam = partDoc.ComponentDefinition
.Parameters.UserParameters["Lengte"];
Console.WriteLine($"Lengte = {lengthParam.Value} mm");
// Parameterwaarde wijzigen en het model herbouwen
lengthParam.Value = 150;
partDoc.Update();
Console.WriteLine("Parameter bijgewerkt en model herbouwd.");
}
}
}
Voer dit uit met een open Inventor-onderdeel dat een gebruikersparameter Lengte heeft en je ziet hem live bijwerken.
Stap 4 — Een nieuw onderdeel vanaf nul aanmaken
Bestaande bestanden openen is nuttig, maar de echte kracht zit in het programmatisch aanmaken van geometrie. Zo maak je een nieuw onderdeel met een geëxtrudeerde rechthoek:
static void MaakGeextrudeerdOnderdeel(Inventor.Application app)
{
// Nieuw onderdeeldocument aanmaken met het metrisch sjabloon
string template = app.FileManager.GetTemplateFile(
DocumentTypeEnum.kPartDocumentObject,
SystemOfMeasureEnum.kMetricSystemOfMeasure);
PartDocument doc = (PartDocument)app.Documents.Add(
DocumentTypeEnum.kPartDocumentObject,
template,
createVisible: true);
PartComponentDefinition compDef = doc.ComponentDefinition;
// Schets aanmaken op het XY-vlak
PlanarSketch sketch = compDef.Sketches.Add(
compDef.WorkPlanes[3]); // WorkPlanes[3] = XY-vlak
TransientGeometry tg = app.TransientGeometry;
// Rechthoek van 100x60 mm gecentreerd op het oorsprongspunt
SketchRectangle rect = sketch.SketchLines.AddAsTwoPointRectangle(
tg.CreatePoint2d(-50, -30),
tg.CreatePoint2d( 50, 30));
// Schetsprofilel extruderen over 40 mm
Profile profile = sketch.Profiles.AddForSolid();
ExtrudeFeature extrude = compDef.Features.ExtrudeFeatures.AddByDistanceExtent(
profile,
40,
PartFeatureExtentDirectionEnum.kPositiveExtentDirection,
PartFeatureOperationEnum.kNewBodyOperation);
Console.WriteLine($"Extrusie aangemaakt: {extrude.Name}");
// Bestand opslaan
doc.SaveAs(@"C:\Modellen\GegenereerdeOnderdeel.ipt", saveMetadata: false);
Console.WriteLine("Opgeslagen.");
}
Kernconcepten
Het Application-object is het startpunt voor alles. Hiervanuit bereik je Documents, FileManager, UserInterfaceManager en alle andere objecten op het hoogste niveau.
Componentdefinities bevatten de eigenlijke geometrie. Een PartDocument heeft een PartComponentDefinition; een AssemblyDocument heeft een AssemblyComponentDefinition. Features, parameters, schetsen en werkvlakken leven op de componentdefinitie.
TransientGeometry is een fabriek voor tijdelijke geometrie-objecten zoals punten en vectoren die als argumenten in API-aanroepen worden gebruikt. Objecten die via TransientGeometry worden aangemaakt, worden niet aan het model toegevoegd.
Parameters komen in twee soorten: ModelParameters (automatisch aangemaakt door features) en UserParameters (handmatig of via code). Stuur je automatisering altijd aan via gebruikersparameters in plaats van vaste afmetingen, zodat het model bewerkbaar blijft.
Debugtips
- Sla een verwijzing op naar een Inventor-documentobject en verken het in het Watch-venster van Visual Studio — het objectmodel is te groot om uit het hoofd te leren; live bladeren is de snelste manier.
- Inventor wordt geleverd met een VBA-omgeving (Alt+F11). Eerst prototypen in VBA is vaak sneller dan C# omdat je code kunt uitvoeren zonder te hercompileren.
- Schakel COM-uitzonderingsdetails in: ga in Visual Studio naar Debug → Windows → Exception Settings en vink
COMExceptionaan.
Wat volgt
Met het verbindingspatroon werkend behandelen de volgende lessen:
- Werken met samenstellingen — componenten plaatsen, beperkingen toevoegen
- Batchverwerking — door alle bestanden in een map lopen
- Automatisch exporteren naar PDF, DWG en STEP
- Een echte Inventor Add-In bouwen met een lintknop
De volledige C# voor Inventor-cursus is beschikbaar voor Standard- en Full Access-abonnees in de E-Learning-sectie.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.