iProperties zijn de metadata van Inventor-bestanden: projectnummer, ontwerper, revisie, materiaal, massa. Ze verschijnen in de titelbord, in de stuklijst en in Vault. Via C# kun je iProperties lezen, aanpassen en zelfs eigen property sets aanmaken. Dit artikel toont alle technieken voor een volledige metadata-automatisering.
Structuur van iProperties
iProperties zijn georganiseerd in Property Sets. De ingebouwde sets zijn: Inventor Summary Information, Inventor Document Summary Information, Design Tracking Properties en Custom. Elke set heeft een unieke GUID en een verzameling Property-objecten met naam, waarde en type.
iProperty lezen
using Inventor;
public string LeesProperty(Document doc, string setNaam, string propNaam)
{
foreach (PropertySet ps in doc.PropertySets)
{
if (ps.DisplayName == setNaam || ps.Name == setNaam)
{
foreach (Property prop in ps)
{
if (prop.DisplayName == propNaam || prop.Name == propNaam)
return prop.Value?.ToString() ?? "";
}
}
}
return "";
}
// Gebruik:
string ontwerper = LeesProperty(doc, "Inventor Summary Information", "Author");
string revisie = LeesProperty(doc, "Design Tracking Properties", "Revision Number");
string massa = LeesProperty(doc, "Design Tracking Properties", "Mass");
iProperty schrijven
public void StelPropertyIn(Document doc, string setNaam, string propNaam, object waarde)
{
foreach (PropertySet ps in doc.PropertySets)
{
if (ps.DisplayName == setNaam || ps.Name == setNaam)
{
foreach (Property prop in ps)
{
if (prop.DisplayName == propNaam || prop.Name == propNaam)
{
prop.Value = waarde;
doc.Save2(false); // sla op zonder dialoog
return;
}
}
}
}
throw new Exception($"Property '{propNaam}' in set '{setNaam}' niet gevonden.");
}
// Gebruik:
StelPropertyIn(doc, "Inventor Summary Information", "Author", "David D.");
StelPropertyIn(doc, "Design Tracking Properties", "Revision Number", "B");
StelPropertyIn(doc, "Design Tracking Properties", "Description", "Steunbeugel aluminium");
Snellere toegang via bekende property-ID's
De meest gebruikte iProperties hebben bekende ID's. Dit is sneller dan zoeken op naam:
// Design Tracking Properties GUID
var dtpGuid = "{32853F0F-3444-11d1-9E93-0060B03C1CA6}";
// Revision Number heeft PropertyID 8
var dtpSet = doc.PropertySets[dtpGuid];
var revisie = dtpSet[8]; // PropertyID
revisie.Value = "C";
doc.Save2(false);
Alle properties uitlezen als woordenboek
public Dictionary> LeesAlleProperties(Document doc)
{
var resultaat = new Dictionary>();
foreach (PropertySet ps in doc.PropertySets)
{
var setDict = new Dictionary();
foreach (Property prop in ps)
{
try { setDict[prop.DisplayName] = prop.Value; }
catch { /* sommige properties geven een fout als ze leeg zijn */ }
}
resultaat[ps.DisplayName] = setDict;
}
return resultaat;
}
Eigen Property Set aanmaken
Naast de ingebouwde sets kun je eigen sets aanmaken voor projectspecifieke metadata:
public PropertySet MaakEigenPropertySet(Document doc, string setNaam)
{
// Controleer of de set al bestaat
foreach (PropertySet ps in doc.PropertySets)
if (ps.DisplayName == setNaam) return ps;
// Nieuwe set aanmaken
var nieuwSet = doc.PropertySets.Add(setNaam);
nieuwSet.Add("ProjectNummer", "PROJ-001");
nieuwSet.Add("Klant", "ACME Corp.");
nieuwSet.Add("Goedgekeurd", false);
doc.Save2(false);
return nieuwSet;
}
Batchverwerking van meerdere bestanden
Het meest krachtige gebruik van iProperty-automatisering is het bijwerken van honderden bestanden in één keer:
public void BatchUpdateProperties(string map, string revisie, string ontwerper)
{
var app = (Application)Marshal.GetActiveObject("Inventor.Application");
foreach (var bestand in Directory.GetFiles(map, "*.ipt", SearchOption.AllDirectories))
{
Document doc = null;
try
{
doc = app.Documents.Open(bestand, false); // false = niet zichtbaar
StelPropertyIn(doc, "Inventor Summary Information",
"Author", ontwerper);
StelPropertyIn(doc, "Design Tracking Properties",
"Revision Number", revisie);
doc.Save2(false);
Console.WriteLine($"✓ {Path.GetFileName(bestand)}");
}
catch (Exception ex)
{
Console.WriteLine($"✗ {Path.GetFileName(bestand)}: {ex.Message}");
}
finally
{
doc?.Close(true);
}
}
}
iProperties exporteren naar CSV
public void ExporteerNaarCsv(string map, string uitvoerCsv)
{
var app = (Application)Marshal.GetActiveObject("Inventor.Application");
var regels = new List { "Bestand,Ontwerper,Revisie,Beschrijving,Massa" };
foreach (var bestand in Directory.GetFiles(map, "*.ipt"))
{
var doc = app.Documents.Open(bestand, false);
try
{
var ont = LeesProperty(doc, "Inventor Summary Information", "Author");
var rev = LeesProperty(doc, "Design Tracking Properties", "Revision Number");
var desc = LeesProperty(doc, "Design Tracking Properties", "Description");
var mass = LeesProperty(doc, "Design Tracking Properties", "Mass");
regels.Add($"{Path.GetFileName(bestand)},{ont},{rev},{desc},{mass}");
}
finally { doc.Close(true); }
}
File.WriteAllLines(uitvoerCsv, regels, System.Text.Encoding.UTF8);
Console.WriteLine($"CSV opgeslagen: {uitvoerCsv}");
}
iProperties in een drawing gebruiken
In Inventor-tekeningen kun je iProperties refereren via velden in het titelbord. Je kunt via code ook de iProperties van het brondocument (het onderdeel) lezen via de drawingdocument:
var drawingDoc = (DrawingDocument)doc;
// De sheets bevatten view-referenties naar part-documenten
foreach (Sheet sheet in drawingDoc.Sheets)
{
foreach (DrawingView view in sheet.DrawingViews)
{
var referencedDoc = view.ReferencedDocumentDescriptor.ReferencedDocument;
string partNaam = LeesProperty(referencedDoc, "Design Tracking Properties", "Part Number");
Console.WriteLine($"Sheet '{sheet.Name}' toont onderdeel: {partNaam}");
}
}
Veelgemaakte fouten
Property.Value geeft null — sommige properties zijn niet ingevuld. Gebruik altijd prop.Value?.ToString() ?? "".
Save2 vs Save — gebruik doc.Save2(false) om op te slaan zonder een dialoogvenster. doc.Save() kan een dialoog tonen voor nieuwe bestanden.
Set-naam vs DisplayName — de interne naam (ps.Name) en de weergavenaam (ps.DisplayName) kunnen verschillen. Zoek op beide om zeker te zijn.
Massa is alleen-lezen — Mass is een berekende property en kan niet direct worden ingesteld. Ze wordt automatisch bijgewerkt bij doc.Update().
Samenvatting
iProperties zijn de metadata-laag van Inventor-bestanden en de sleutel tot correcte stuklijsten, titelborden en Vault-integratie. Met C# kun je properties lezen, schrijven, exporteren naar CSV en in bulk bijwerken voor honderden bestanden — zonder dat een gebruiker ook maar één bestand hoeft te openen.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.