| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | SolidCAM auf der GROB Hausmesse 2024 |
Autor
|
Thema: API - Feature einfärben (2451 mal gelesen)
|
AlexSchaaf Mitglied
Beiträge: 21 Registriert: 23.09.2014 SWX 2014 SP5
|
erstellt am: 30. Okt. 2014 15:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, Ich habe ein Makro, dass ein Part mit 4 Features erzeugt. Diese Features sind alles einzelne Körper, die gefärbt werden sollen. Ich finde leider keine Methode, mit der ich das Feature, dass ich mit FeatureExtrusion2 erstelle, einfärben kann. Momentan habe ich einfach eine Traversal durch die Bodies, die dann nacheinander gefärbt werden, allerdings finde ich das sehr unschön und würde gerne, direkt nach dem erzeugen des features, die Farben setzen. Gibt es keinen API Call ohne Interface Objekt? Gruß Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 30. Okt. 2014 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSchaaf
Hallo Alex Der Rückgabewert von FeatureExtrusion2 ist ja ein Feature-Objekt. Also kannst du das doch gleich Einfärben. CodeSchnippsel mit Ergänzungen zum Beispiel aus der API-Hilfe http://help.solidworks.com/2011/English/api/sldworksapi/Create_and_Edit_Linear_Sketch_Pattern_Example_VB.htm Code: ' Create the extrude feature Set swFeatureMgr = swModel.FeatureManager Set swFeature = swFeatureMgr.FeatureExtrusion2(True, False, False, 0, 0, 0.0508, 0.381, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, True, True, True, 0, 0, False) Dim vMatProp As Variant vMatProp = swModel.MaterialPropertyValues vMatProp(0) = 0# vMatProp(1) = 0# vMatProp(2) = 1# swFeature.SetMaterialPropertyValues2 vMatProp, swInConfigurationOpts_e.swThisConfiguration, "" ' Fit the model in the graphics area swModel.ViewZoomtofit2
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexSchaaf Mitglied
Beiträge: 21 Registriert: 23.09.2014 SWX 2014 SP5
|
erstellt am: 31. Okt. 2014 08:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, vielen dank für deine schnelle hilfe. Leider stürzt mein Solid durch diese Funktion ab. Die letzten Zeilen im Error Log sind folgende: Code: <AD2> "LOAD_ADDIN" "sldfuncfeat.dll" "sldFuncFeat" [0.03] "19.4.0.66" 9 COM.new 1307534961 7 <DOC_OPEN> ".PRTDOT" 1, 1, 0, 0, 3 <EVENT> [EVT_SWITCH_TO_PART] <PROCMEM> CMD:nobiggrin cOpen ATTR:PageFileBytes=313565184 ATTR:PageFileBytesPeak=315584512 ATTR:PoolNonpagedBytes=183380 ATTR:PoolPagedBytes=2184248 ATTR:PrivateBytes=313565184 ATTR:VirtualBytes=2216644608 ATTR:VirtualBytesPeak=2218663936 ATTR:WorkingSet=322428928 ATTR:WorkingSetPeak=324435968 ATTR:AvailableReservesMask=7 ATTR:GDIHandlesTotal=10000 ATTR:GDIHandlesUsed=1179 </PROCMEM> <ED>uiSkRectangleProp_c "Rechteck" <*ED>[0.23] <ED>uiDveSketchMessageDlg_c "Skizze bearbeiten" <*ED>[0.05] <ED>uiSkRectangleProp_c "Rechteck" <*ED>[0.16]
Es geht aber nichtmal der SolidWorks Absturzbericht auf, nur die Windows Meldung "SldWrks.exe funktioniert nicht mehr" Gruß Alex 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: 31. Okt. 2014 08:29 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSchaaf
Hallo Alex Zitat: Original erstellt von AlexSchaaf: Leider stürzt mein Solid durch diese Funktion ab. [...] Es geht aber nichtmal der SolidWorks Absturzbericht auf, nur die Windows Meldung "SldWrks.exe funktioniert nicht mehr"
Durch welche Funktion? Andreas hat dir oben je nur einen Codeausschnitt gegeben, den du in dein Makro einbauen musst. Bleibt das Makro vielleicht mit einem Fehler im Editor hängen und deswegen reagiert das SolidWorks nicht mehr? Hast du irgendwo eine Endlosschleife im Makro gebaut? Wartet dein Makro irgendwo auf eine Eingabe, die nicht kommt? Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexSchaaf Mitglied
Beiträge: 21 Registriert: 23.09.2014 SWX 2014 SP5
|
erstellt am: 31. Okt. 2014 08:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, Also meine Subs sind eigentlich erstmal nur nach Typ Aufgebaut:
Code: Private Sub buildAufspannplatte() Dim myDisplayDim As Object Dim boolstatus As Boolean Dim myFeature As Object Dim vSkLines As Variant Dim vMatProp As Variant boolstatus = swModel.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0) swModel.SketchManager.InsertSketch False swApp.SetUserPreferenceToggle swInputDimValonCreate, False swModel.ClearSelection2 True vSkLines = swModel.SketchManager.CreateCenterRectangle(0, 0, 0, dAufspannLength / 2, dAufspannWidth / 2, 0) swModel.ClearSelection2 True boolstatus = swModel.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0) Set myDisplayDim = swModel.AddDimension2(0, dAufspannHeight + 0.0005, 0) swModel.ClearSelection2 True boolstatus = swModel.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0) Set myDisplayDim = swModel.AddDimension2(dAufspannWidth + 0.0005, 0, 0) swModel.ClearSelection2 True Set myFeature = swModel.FeatureManager.FeatureExtrusion2(True, False, True, 0, 0, dAufspannHeight, 0, False, False, False, False, 0, 0, False, False, False, False, False, True, True, swStartOffset, dZwischenHeight, True) vMatProp = swModel.MaterialPropertyValues vMatProp(0) = 0# vMatProp(1) = 0# vMatProp(2) = 1# myFeature.SetMaterialPropertyValues2 vMatProp, swInConfigurationOpts_e.swThisConfiguration, ""
Beim SingleStep Läuft er problemlos bis zur letzten Code Zeile, dann ist es vorbei. Fehler gibt er keine aus und sobald ich die SetMaterialPropertyValues2 Funktion wieder entferne läuft alles. Gruß Edit: Wenn ich die SolidWorks Konstante swInConfigurationOpts_e.swThisConfiguration durch 1 ersetze, geht das Debugger Fenster auf. Folgende Fehlermeldung ist zu sehen:
Code: Laufzeitfehler '-1072365553 (c015000f)': Automatisierungsfehler
[Diese Nachricht wurde von AlexSchaaf am 31. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 31. Okt. 2014 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für AlexSchaaf
Hallo Alex Hier mal ein komplettes Beispiel, welches bei mir funktioniert. Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swModelDocExt As SldWorks.ModelDocExtension Dim swSketchMgr As SldWorks.SketchManager Dim swFeature As SldWorks.Feature Dim swFeatureMgr As SldWorks.FeatureManager Dim vSkLines As Variant Dim boolstatus As Boolean Sub main() Set swApp = Application.SldWorks ' Create part document Set swModel = swApp.NewDocument(swApp.GetUserPreferenceStringValue(8), 0, 0, 0) 'Set swModel = swApp.ActiveDoc ' Select the Front plane 'Name der Ebene anpassen Set swModelDocExt = swModel.Extension boolstatus = swModelDocExt.SelectByID2("Vorne", "PLANE", 0, 0, 0, False, 0, Nothing, 0) ' Open a sketch and sketch a rectangle Set swSketchMgr = swModel.SketchManager swSketchMgr.InsertSketch True vSkLines = swSketchMgr.CreateCornerRectangle(-0.08, 0.05, 0, 0.08, -0.05, 0) ' Create the extrude feature Set swFeatureMgr = swModel.FeatureManager Set swFeature = swFeatureMgr.FeatureExtrusion2(True, False, False, 0, 0, 0.05, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False) 'Farbe auf Blau ändern '[ R, G, B, Ambient, Diffuse, Specular, Shininess, Transparency, Emission ] Dim vMatProp(8) As Double vMatProp(0) = 0 'R vMatProp(1) = 0 'G vMatProp(2) = 1 'B vMatProp(3) = 1 'Ambient vMatProp(4) = 1 'Diffuse vMatProp(5) = 0.8 'Specular vMatProp(6) = 0.3 'Shininess vMatProp(7) = 0 'Transparency vMatProp(8) = 0 'Emission 'Farbe dem Feature zuweisen swFeature.SetMaterialPropertyValues2 vMatProp, 1, "" ' Fit the model in the graphics area swModel.ViewZoomtofit2 End Sub
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexSchaaf Mitglied
Beiträge: 21 Registriert: 23.09.2014 SWX 2014 SP5
|
erstellt am: 31. Okt. 2014 10:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, und wieder einmal hast du mir die Lösung gebracht, ich danke dir! Es lag bei mir an der Definition des FeatureManagers. Nachdem ich den FeatureManager in ein eigenes Object geschoben habe, funktioniert es auch bei mir. Seltsam finde ich das aber schon, da es doch eigentlich egal sein müsste, ob ich
Code: Set swFeatureMgr = swModel.FeatureManager Set swFeature = swFeatureMgr.FeatureExtrusion2(True, False, False, 0, 0, 0.05, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False) swFeature.SetMaterialPropertyValues2 vMatProp, 1, ""
oder Code: set swFeature = swModel.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, 0.05, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False) swFeature.SetMaterialPropertyValues2 vMatProp, 1, ""
Kannst du mir dazu noch eine erklärung geben? Im Objekt swFeature sollte doch in beiden fällen das selbe enthalten sein? Gruß Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlexSchaaf Mitglied
Beiträge: 21 Registriert: 23.09.2014 SWX 2014 SP5
|
erstellt am: 04. Nov. 2014 15:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, Im Anhang habe ich mal das Fertige Makro. Falls jemand dazu verbesserungsvorschläge hat, auch bezüglich des Programmierstils, bin ich jederzeit dafür offen.
Falls jemand code von mir adaptiert, würde ich mich über einen credit freuen. Danke nochmal an Andreas, der mir die Farbfunktion mehr oder weniger geliefert hat =) Gruß Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|