| |
| 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: Alle Materialien rekursiv von A auf B? (1018 mal gelesen)
|
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 10. Apr. 2014 10:42 <-- editieren / zitieren --> Unities abgeben:
|
RolandD Mitglied
Beiträge: 559 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 10. Apr. 2014 20:27 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Philipp, könnte etwa so gehen:
Code: Public Sub Material_change()Dim oDoc As Document Set oDoc = ThisApplication.ActiveDocument 'Objekt herstellen If oDoc.DocumentType <> kAssemblyDocumentObject Then Exit Sub Dim oPropSet As PropertySet Dim Material As String Material = "" For Each Bauteil In oDoc.ReferencedDocuments Set oPropSet = Bauteil.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}") 'Design Tracking Properties If Bauteil.DocumentType = kPartDocumentObject Then Material = oPropSet.Item("Material").Value 'MsgBox oPropSet.Item("Part Number").Value + " : " + Material If oPropSet.Item("Material").Value = "Allgemein" Then Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Open(Bauteil.FullFileName, True) oPropSet.Item("Material").Value = "1.4305" 'MsgBox oPropSet.Item("Part Number").Value + " -geändert auf: " + oPropSet.Item("Material").Value 'ThisApplication.SilentOperation = True 'Speichern ohne Meldungsfenster oPartDoc.Close (False) 'ThisApplication.SilentOperation = False 'später, wes es funktioniert Speichern ohne Dialog 'Call Bauteil.Update 'Call Bauteil.Save End If End If 'Bauteil.DocumentType Next Bauteil End Sub
Aber: Die IPT mit Material "Allgemein" wird zwar geöffnet und das Material auf 1.4305 geändert. Die Anzeige in den iProperties steht aber immer noch auf Allgemein! In der IDW wird aber das neue 1.4305 angezeigt !?!? ------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 11. Apr. 2014 09:32 <-- editieren / zitieren --> Unities abgeben:
|
RolandD Mitglied
Beiträge: 559 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 11. Apr. 2014 10:11 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo, Das weiß ich auch nicht. Deshalb habe ich es ja erwähnt. Probier doch bitte das Makro aus und melde mal zurück, was bei dir passiert. Um einen besseren Überblick zu erhalten, die MsgBox wieder anzeigen. Vielleicht finden wir ja gemeinsam eine Lösung. Ich erstelle für jede Maschine für den Einkauf und die Fertigung eine Einzelteilstückliste, die ich in Excel exportiere. Darin habe ich das Problem mit Material Allgemein oder Generisch bisher dadurch gelöst, dass ich die Spalte Material bedingt formatiere: Allgemein oder Generisch wird darin rot eingefärbt. ------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001
|
erstellt am: 11. Apr. 2014 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
|
RolandD Mitglied
Beiträge: 559 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 11. Apr. 2014 17:03 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo SEHER, Da deine Inventor-Tools ja genau das gewünschte machen (Material ersetzen) Könntest du uns doch einen Tip geben, welchen Parameter wir ändern müssen, dass tatsächlich das Material und nicht nur das iProp "Material" geändert wird ?
------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 11. Apr. 2014 22:41 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Nicht das iProp, sondern das zugewiesene Material ändern.
Code: Sub ChangeMaterial() Dim oDoc As PartDocument Set oDoc = ThisApplication.ActiveDocument Dim oMat As Material For Each oMat In oDoc.Materials If oMat.Name = "1.4305" Then oDoc.ComponentDefinition.Material = oMat Exit For End If Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 14. Apr. 2014 08:38 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf danke für die Hilfe jedoch verstehe ich deinen Code nicht. Code:
Sub ChangeMaterial() Dim oDoc As PartDocument ' Warum PartDocument? Ich will ja alle Bauteile einer Assembly durchgehen? Set oDoc = ThisApplication.ActiveDocument Dim oMat As Material For Each oMat In oDoc.Materials ' Muss man in der Schleife nicht die einzelnen .ipts durchgehen von der iam? If oMat.Name = "1.4301" Then 'Ich will doch von Allgemein zu 1.4301 warum suche ich dann nach 1.4301? oDoc.ComponentDefinition.Material = oMat ' Exit For 'Wenn ein Material zutrift (if abfrage) dann werden alle anderen ignoriert? (Exit For)? End If Next End Sub
Müsste es von der Logik her nicht so sein? Code:
Public Sub ChangeMaterial(oldmat as Material = "Allgemein", newmat as Material = "1.4301") 'Habe versucht Parameter mitzugeben will aber so irgendwie nicht Dim oDoc As AssemblyDocument Dim oMat As Material Set oDoc = ThisApplication.ActiveDocument Dim oldmat As Material Dim newmat As Material Set oldmat = "Allgemein" Set newmat = "1.4301" For Each <Bauteil> In <Baugruppe> If <Bauteil.Material> = oldmat Then <Bauteil.Material> = newmat End If Next End Sub
------------------ Grüße aus Wien Philipp http://black-evolution.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 14. Apr. 2014 21:56 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Das du meinen Code nicht verstehst liegt daran das es nicht das fertige Programm für dich ist, sondern ein Beispiel für die Zuweisung des Materials in einem Bauteil. Ich dachte du willst selber noch was tun. Probier's mal so: Code: Public Sub Material_change()If ThisApplication.ActiveDocument.DocumentType <> kAssemblyDocumentObject Then Exit Sub Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim Material As Material Dim oDoc As Document For Each oDoc In oAssDoc.ReferencedDocuments If oDoc.DocumentType = kPartDocumentObject Then If oDoc.ActiveMaterial.Name = "Allgemein" Then For Each oMat In oDoc.Materials If oMat.Name = "1.4305" Then oDoc.ComponentDefinition.Material = oMat Exit For End If Next End If End If Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |