| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Wert von Benutzer iPart in Zusammenbau ändern (1308 mal gelesen)
|
rucksacktraeger Mitglied Techn.Zeichner
Beiträge: 5 Registriert: 17.12.2007
|
erstellt am: 17. Dez. 2007 11:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe einen Zusammenbau und darin das Benutzer iPart rohr43,2x2. jetzt möchte ich per vba den wert laenge (benutzerdefiniert) in der Tabelle vom iPart auf 337 mm (abgeleitet von einem Parameter im Zusammenbau- da muss ich mal auch noch sehen wie ich den auselesen kann...) ändern. Wie mach ich das? Ich bin hier echt nicht weitergekommen... Vielen Dank für Hilfe Pete PS: Bin VB6 Amateurprogrammierer, aber für Inventor hab ich bisher noch nie was programmiert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2008 SP1 MDT2008 WIN XP SP2, Vista x64 Asus A8N-SLI, AMD Opteron 180 , 4GB, Quadro FX 3400
|
erstellt am: 17. Dez. 2007 18:09 <-- editieren / zitieren --> Unities abgeben: Nur für rucksacktraeger
Hallo, den gewünschten Parameter im iPart als Exportparamter markieren. Es wird automatisch ein benutzerdefiniertes Propertie mit dem gleichen Namen erzeugt. Das geht ohne VBA. Mit VBA dann das benutzerdefinierte Property bearbeiten. Sub test1() 'vorher Property Laenge in der Bauteildatei als benutzerdefiniertes Property anlegen Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oPropset As PropertySet Set oPropset = oPartDoc.PropertySets.Item("User Defined Properties") Dim oPropLaenge As Property Set oPropLaenge = oPropset.Item("Laenge") MsgBox oPropLaenge.Value End Sub Grüße Manfred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rucksacktraeger Mitglied Techn.Zeichner
Beiträge: 5 Registriert: 17.12.2007
|
erstellt am: 18. Dez. 2007 09:05 <-- editieren / zitieren --> Unities abgeben:
Also erst einmal, VIELEN DANK!!! Mit der Methode ChangeRow bin ich an die Programmier-Grenzen von Autodesk gestoßen. (siehe hier) Laut Hilfe (siehe 'ChangeRow Method') und können hiermit auch benutzerdefinierte Parameter geändert werden, aber praktisch geht das nciht weil von Autodesk noch nicht programmiert :-( (siehe i.a. Autodesk link) Also hatte ich es schon aufgegeben. Nun bin ich aber schon die ganze Zeit deinen Code am testen. Ich habe das Häckchen als Exportparameter gesetzt und kann mir dann auch mit deinem code das Maß richtig anzeigen lassen. 1. Aber ich will es ja nicht nur lesen, sondern schreiben! Mit diesem code geht es nciht.... Code: Sub test1() ...Dim oPropLaenge As Property Set oPropLaenge = oPropset.Item("laenge") MsgBox oPropLaenge.Value oPropset.Item("laenge") = 15 MsgBox oPropLaenge.Value End Sub
2. Ich will den benutzdefinierten Wert ja nicht im Einzelteil ändern, sondern im Zusammenbau. Dazu möchte ich mir den eben angezeigten Wert auch im Zusammenbau anzeigen lassen. Ich dachte es funktionert wie folgt, aber da habe ich mich geirrt... Keine Ahnung wo der Fehler ist. Es kommt bei der Zeile 'Set oPropLaenge = oPropset.Item("laenge")' die Meldung: 'Die Methode 'Item' für das Objekt '_IRxPropertySet' ist fehlgeschlagen'
Code: Sub ChangeTableRow() Dim oApp As Inventor.Application Set oApp = GetObject(, "Inventor.Application") Set oAsm = oApp.ActiveDocument Set oOcc = oAsm.ComponentDefinition.Occurrences(1) '1 für erstes Objekt im Baum oOcc.EditDim oPropset As PropertySet Set oPropset = oAsm.PropertySets.Item("User Defined Properties") Dim oPropLaenge As Property Set oPropLaenge = oPropset.Item("laenge") MsgBox oPropLaenge.Value oApp.CommandManager.[_StartCommand] 43312 End Sub
hast du noch einen Tipp für mich bezüglich der beiden Fragen? Wenn nicht, muss ich das ganze Projekt abbrechen :-( LG Pete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2008 SP1 MDT2008 WIN XP SP2, Vista x64 Asus A8N-SLI, AMD Opteron 180 , 4GB, Quadro FX 3400
|
erstellt am: 18. Dez. 2007 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für rucksacktraeger
Versuch es mal hiermit: Sub GetUserProperty() 'Asm mit Part, das das Benutzerproperty "Laenge" enthält Dim oAsmDoc As AssemblyDocument Set oAsmDoc = ThisApplication.ActiveDocument Dim Laenge As Double MsgBox oAsmDoc.ReferencedDocuments.Item(1).FullFileName Laenge = oAsmDoc.ReferencedDocuments.Item(1).PropertySets.Item("User Defined Properties").Item("Laenge").Value MsgBox Laenge End Sub Grüße Manfred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2008 SP1 MDT2008 WIN XP SP2, Vista x64 Asus A8N-SLI, AMD Opteron 180 , 4GB, Quadro FX 3400
|
erstellt am: 18. Dez. 2007 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für rucksacktraeger
Die Anweisung: oPropset.Item("laenge") = 15 erzeugt unter anderem einen Fehler, weil du die Objektdefiniton und Ojekteigenschaften verwechselst. Du musst der Eigenschaft Value des Objektes oPropLaenge (ist gleich =oPropset.item("Laenge")) den Wert 15 zuweisen. Grüße Manfred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rucksacktraeger Mitglied Techn.Zeichner
Beiträge: 5 Registriert: 17.12.2007
|
erstellt am: 21. Dez. 2007 14:33 <-- editieren / zitieren --> Unities abgeben:
So, da bin ich wieder. Mich hat die Magen-Darm-Grippe für ein paar Tage ausser Gefecht gesetzt. Eigentlich wünsche ich dir ja nicht, dass du noch so kurz vor Weihnachten am Arbeiten bist, aber ich glaube nur du kannst mir jetzt weiterhelfen... Also das mit dem Value hab ich natürlich übersehen *grmpf* So kann ich zwar das Property ändern (wenn ich es später in einer anderen sub abfrage, erscheint laenge als 100), aber wenn ich in Inventor auf Parameter gehe, dann ist laenge nicht 100, sondern nach wie vor 300 :-( Wie kann ich also den Parameter laenge so ändern, dass er das Bauteil darauf abändert? Frohe Weihnachten Peter Code: Sub SetPropertyInIPart() Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oPropset As PropertySet Set oPropset = oPartDoc.PropertySets.Item("User Defined Properties") Dim oPropLaenge As Property Set oPropLaenge = oPropset.Item("laenge") MsgBox oPropLaenge.Value oPropLaenge.Value = 100 MsgBox oPropLaenge.Value End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2008 SP1 MDT2008 WIN XP SP2, Vista x64 Asus A8N-SLI, AMD Opteron 180 , 4GB, Quadro FX 3400
|
erstellt am: 22. Dez. 2007 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für rucksacktraeger
Werden Parameter geändert, muss das Bauteil anschließend aktualisiert werden. Dies mach der Benutzer normalerweise beim Klicken auf den Button "Aktualisieren". In VBA sieht das so aus: Nachdem du den Wert des Properties Laenge geändert hast, fehlt noch:
If oPartDoc.RequiresUpdate = True then oPartDoc.Update End if Grüße Manfred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |