Parameters zijn de basis van parametrisch ontwerp in Inventor. Ze bepalen afmetingen, hoeken en relaties tussen onderdelen. Via de Inventor COM API kun je parameters lezen, aanpassen, aanmaken en zelfs koppelen tussen bestanden. Dit is de kern van automatische maatvoering, configuratietools en parametrische bibliotheken.
Hoe parameters werken in Inventor
Inventor kent drie soorten parameters: Model Parameters (aangemaakt door schetsafmetingen of features), Reference Parameters (berekende waarden, alleen-lezen) en User Parameters (handmatig aangemaakt, volledig bewerkbaar). Je benadert ze allemaal via Document.ComponentDefinition.Parameters.
Verbinding met Inventor maken
using Inventor;
using System.Runtime.InteropServices;
// Haal de actieve Inventor-instantie op (of start er één)
Application inventorApp;
try
{
inventorApp = (Application)Marshal.GetActiveObject("Inventor.Application");
}
catch
{
var type = Type.GetTypeFromProgID("Inventor.Application");
inventorApp = (Application)Activator.CreateInstance(type);
inventorApp.Visible = true;
}
Parameters lezen
public void LeesParameters(PartDocument doc)
{
var parameters = doc.ComponentDefinition.Parameters;
// Alle parameters overlopen
foreach (Parameter param in parameters)
{
string naam = param.Name;
string eenheid = param.Units;
double waarde = (double)param.Value; // interne eenheid (cm voor lengte!)
string uitdr = param.Expression; // bv. "100 mm" of "Breedte / 2"
bool isRead = param.IsReadOnly;
Console.WriteLine($"{naam} = {uitdr} [{eenheid}] readonly={isRead}");
}
}
Let op: Inventor slaat lengtes intern op in centimeters. Een parameter van 100 mm heeft Value = 10.0. Gebruik altijd Expression voor leesbare weergave met eenheid.
Een parameter aanpassen
public void StelParameterIn(PartDocument doc, string naam, string expressie)
{
var parameters = doc.ComponentDefinition.Parameters;
try
{
var param = parameters[naam];
if (param.IsReadOnly)
{
Console.WriteLine($"Parameter '{naam}' is alleen-lezen.");
return;
}
param.Expression = expressie; // bv. "150 mm" of "Hoogte * 2"
doc.Update(); // herbereken het model
Console.WriteLine($"Parameter '{naam}' ingesteld op {expressie}.");
}
catch (Exception ex)
{
Console.WriteLine($"Fout bij aanpassen '{naam}': {ex.Message}");
}
}
Een User Parameter aanmaken
public void MaakUserParameter(PartDocument doc, string naam, string expressie, string eenheid)
{
var userParams = doc.ComponentDefinition.Parameters.UserParameters;
// Controleer of de parameter al bestaat
foreach (UserParameter up in userParams)
if (up.Name == naam) { Console.WriteLine("Al aanwezig."); return; }
// Eenheid als UnitsTypeEnum-string of directe string
userParams.AddByExpression(naam, expressie, eenheid);
doc.Update();
Console.WriteLine($"User parameter '{naam}' aangemaakt met waarde {expressie}.");
}
Parameters met expressies (formules)
Parameters kunnen naar andere parameters verwijzen via expressies. Dit is de basis van parametrisch ontwerp:
// "Dikte = Breedte / 4"
StelParameterIn(doc, "Dikte", "Breedte / 4");
// "Hoogte = Breedte * 1.618" (Gulden snede)
StelParameterIn(doc, "Hoogte", "Breedte * 1.618 mm");
// Constante waarde
StelParameterIn(doc, "Breedte", "200 mm");
Parametertabel importeren vanuit Excel
In productie lees je parameters vaak uit een Excel-bestand of database en pas je meerdere parameters in één keer aan:
public void ImporteerParametersTabel(PartDocument doc, Dictionary tabel)
{
var parameters = doc.ComponentDefinition.Parameters;
var fouten = new List();
foreach (var kv in tabel)
{
try
{
var p = parameters[kv.Key];
if (!p.IsReadOnly)
p.Expression = kv.Value;
}
catch (Exception ex)
{
fouten.Add($"{kv.Key}: {ex.Message}");
}
}
doc.Update(); // één keer herbereken na alle wijzigingen
if (fouten.Any())
Console.WriteLine("Fouten:\n" + string.Join("\n", fouten));
else
Console.WriteLine("Alle parameters bijgewerkt.");
}
Parameters koppelen tussen onderdelen
In een assembly kun je parameters van één onderdeel laten verwijzen naar parameters van een ander onderdeel. Dat doe je via de Derived Parameters-functie of via een gedeelde parameterbestand (ipt/iam). In code kun je de parameter-expressie direct verwijzen naar een extern bestand:
// Verwijzing naar externe parameterbestand (iPart)
param.Expression = "[@Parameters.xlsx]!Breedte";
Parameters vergelijken en valideren
public bool ValideerParameters(PartDocument doc, Dictionary grenzen)
{
var parameters = doc.ComponentDefinition.Parameters;
bool geldig = true;
foreach (var kv in grenzen)
{
var param = parameters[kv.Key];
double val = (double)param.Value * 10; // cm naar mm
if (val < kv.Value.min || val > kv.Value.max)
{
Console.WriteLine($"⚠ {kv.Key} = {val} mm buiten bereik [{kv.Value.min}, {kv.Value.max}] mm");
geldig = false;
}
}
return geldig;
}
Veelgemaakte fouten
Interne eenheid vergeten (cm vs mm) — Parameter.Value geeft de interne waarde in centimeters. Vermenigvuldig altijd met 10 voor mm, of gebruik Expression voor een leesbare waarde met eenheid.
Parameter niet gevonden (IndexOutOfRange) — gebruik een try-catch of controleer vooraf of de naam bestaat via parameters.Count en een loop.
Update vergeten na aanpassing — na het aanpassen van parameters moet je doc.Update() aanroepen om het model opnieuw te berekenen.
Reference Parameters aanpassen — reference parameters zijn het resultaat van berekeningen en kunnen niet direct ingesteld worden. Pas de bron-parameter aan.
Samenvatting
Parameters zijn de sleutel tot flexibele, herbruikbare Inventor-modellen. Via C# kun je parameters lezen, aanpassen, aanmaken en valideren — ideaal voor configuratietools waarbij de gebruiker afmetingen ingeeft en jouw code het model automatisch aanpast. Vergeet nooit de eenheidsconversie (intern = cm) en roep doc.Update() aan na elke aanpassing.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.