| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Technikerschüler der staatlichen Feintechnikschule Schwenningen zu Besuch bei SolidCAM GmbH in Schramberg |
Autor
|
Thema: API Farbe (3497 mal gelesen)
|
Johannes Sauber Mitglied Masterand
Beiträge: 10 Registriert: 12.05.2011
|
erstellt am: 17. Sep. 2012 11:02 <-- editieren / zitieren --> Unities abgeben:
Servus, ich habe vor einiger Zeit ein Makro geschrieben, das Step-Dateien einliest und sie als Jpeg abspeichert also über savebmp. Hierfür muss ich das Model vorbereiten also Hintergrundfarbe, Ansicht etc.. Nun hat sich bei uns die SW Version geändert von SW2010 auf SW2012 was keine gravierenden Probleme bereitet hat lediglich die Modellfarbe zu ändern funktioniert nicht mehr mit dem bisherigen Code. swModel = CType(swApp.ActiveDoc, ModelDoc2) 'Teilefarbe festlegen Dim swXMatProp(8) As Double swXMatProp(0) = CDbl(230 / 255) 'rot swXMatProp(1) = CDbl(230 / 255) 'grün swXMatProp(2) = CDbl(230 / 255) 'blau swXMatProp(3) = CDbl(100 / 100) 'Ambient swXMatProp(4) = CDbl(100 / 100) 'Diffuse swXMatProp(5) = CDbl(100 / 100) 'Specular swXMatProp(6) = CDbl(31 / 100) 'Shininess swXMatProp(7) = CDbl(0 / 100) 'Transparency swXMatProp(8) = CDbl(0 / 100) 'Emission swModel.MaterialPropertyValues = (swXMatProp) swModel.EditRebuild3() Ist diese Problematik bekannt bzw. wie kann ich es ändern, sodass die Teilefarbe in SW 2012 geändert wird? Mfg Johannes
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2019 Solidworks 2021 Sp5.1 Enterprise PDM 2021 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Dell Ultrasharp U2415 Dell M4800
|
erstellt am: 17. Sep. 2012 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für Johannes Sauber
Hi Johannes, Könnte es sein das du erst alle Erscheinunsbilder bei dem Modell entfernen musst damit deine Farbe sichtbar wird?! Nimm mal ein Teil auf welches du dein Makro ändernder hast und schau die die Erscheinungsbildanzeige an und lösche mal alle und lass dein Makro nochmal laufen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 17. Sep. 2012 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für Johannes Sauber
Hallo Johannes, der Code funktioniert bei mir einwandfrei unter SW2012 x64 SP4.0 als VBA-Makro Code: Sub main() Dim swApp As Object Dim Part As Object Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc 'Teilefarbe festlegen Dim swXMatProp(8) As Double swXMatProp(0) = CDbl(120 / 255) 'rot swXMatProp(1) = CDbl(230 / 255) 'grün swXMatProp(2) = CDbl(230 / 255) 'blau swXMatProp(3) = CDbl(100 / 100) 'Ambient swXMatProp(4) = CDbl(100 / 100) 'Diffuse swXMatProp(5) = CDbl(100 / 100) 'Specular swXMatProp(6) = CDbl(31 / 100) 'Shininess swXMatProp(7) = CDbl(40 / 100) 'Transparency swXMatProp(8) = CDbl(0 / 100) 'Emission Part.MaterialPropertyValues = (swXMatProp) Part.EditRebuild3 End Sub
Was klappt denn bei dir nicht, kommt irgendeine Fehlermeldung, oder inwiefern stellt sich das Ergebnis anders dar, als du es erwartest?Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Johannes Sauber Mitglied Masterand
Beiträge: 10 Registriert: 12.05.2011
|
erstellt am: 17. Sep. 2012 12:28 <-- editieren / zitieren --> Unities abgeben:
Servus Stefan, leider ändert sich die Farbe des Objektes nicht. Eine Fehlermeldung erscheint nicht. Bei SW 2010 funktioniert das gleiche Release einwandfrei. Bei SW 2012 funktioniert nur das setzten der Farbe nicht. Der Vorschlag von Carsten klappt. Also wenn ich manuell das Erscheinungsbild lösche. Danke Hierfür! Wie kann ich per Api auf den Body zugreifen, damit ich dein Makro Nr. 31 verwenden kann, da die Methode getBodies2 für mein modeldoc objekt nicht existiert. vbody = ModelDoc.GetBodies2(swSolidBody, False) funktioniert leider nicht. Danke für die Hilfe Johannes Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 17. Sep. 2012 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für Johannes Sauber
Hallo Johannes, hast du es mal mit meinem Quelltext probiert? Welche SW2012 Servicepack hast du? Vielleicht ist irgendwas an dem Modell besonderes, kannst du das hochladen? Warum solltest du keine Volumenkörper kriegen, außer es sind keine da? Oder du hast das falsche ModelDoc erwischt. Machst du die Automatisierung von einem Makro oder einem externen Tool aus? Hast du sicher das richtige SolidWorks-Session erwischt? Alles Fragen, die dir vielleicht helfen das zu lösen, Antworten hab ich im Moment keine, da es prinzipiell mit diesem Code (bei mir) klappt. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Johannes Sauber Mitglied Masterand
Beiträge: 10 Registriert: 12.05.2011
|
erstellt am: 19. Sep. 2012 13:40 <-- editieren / zitieren --> Unities abgeben:
Servus Stefan, danke für die Hinweise! Ich habe es jetzt hinbekommen indem ich über alle Features laufe und dann die Farbe der Komponenten abändere. Ich kann mir zwar immernoch nicht erklären, warum es bei 2010 funktioniert und bei 2012 nicht aber immerhin klappt es jetzt. Hier noch mein Lösungscode. swSelMgr = CType(swModel.SelectionManager, SelectionMgr) Dim strAssemblyName As String = swModel.GetTitle Dim swComponent As Component2 Dim swComponent2 As Component2 Dim oSwFeatureManager As FeatureManager = swModel.FeatureManager Dim bolHit As Boolean = False Dim boolselect As Boolean = False ' Die Farbe ist in jeder Komponente einzeln Hinterlegt! For Each oSWFeature As Feature In CType(oSwFeatureManager.GetFeatures(False), Array) boolselect = swModel.Extension.SelectByID(oSWFeature.Name & "@" & strAssemblyName, "COMPONENT", 0, 0, 0, False, 0, Nothing) If boolselect = True Then swComponent = swSelMgr.GetSelectedObjectsComponent3(1, 0) swComponent2 = CType(swComponent, Component2) swComponent2.MaterialPropertyValues = swXMatPropArray swModel.EditRebuild3() bolHit = True End If Next Servus und Danke Johannes Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |