Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Ansichtsstatus setzen per VBA?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
PLM TechnologieForum Essen
Autor Thema:  Ansichtsstatus setzen per VBA? (2061 mal gelesen)
Erzmichel
Mitglied
Dipl Ing Maschbau


Sehen Sie sich das Profil von Erzmichel an!   Senden Sie eine Private Message an Erzmichel  Schreiben Sie einen Gästebucheintrag für Erzmichel

Beiträge: 362
Registriert: 18.05.2012

Win 10
Intel i7-7700K 4,2GHz
16 GB RAM
Quadro K2200

erstellt am: 06. Sep. 2018 11:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin liebe Mitmausschubser,
ich will mich ein wenig in die API von SolidWorks einarbeiten.
An einem expliziten Beispiel. Ich möchte eine(m) Bauteil/Baugruppe einen Ansichtsstauts verpassen und eine Farbe zuweisen.

Zum Hintergrund, ich möchte bei uns die Kaufteile mit einem Ansichtsstatus versehen. Damit kann ich dann schnell visuell in der Baugruppe die Kaufteile identifizieren. Aber ich möchte es auch zurückschalten können, da wir auch Renderngs machen wollen.
Ich habe schon den Makrorecorder drüber laufen lassen. Leider war ohne Ergebnis. Es wurde nichts aufgezeichnet. 
Geht das überhaupt? Kann ich Ansichtsstatus greifen?
Danke für eure Anregungen.  

------------------
Grüße vom
Erzmichel

[Diese Nachricht wurde von Erzmichel am 06. Sep. 2018 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

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: 06. Sep. 2018 11:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Erzmichel 10 Unities + Antwort hilfreich

Hallo

Du meinst wohl den Anzeigestatus.

Dazu gibt es in der API-Hilfe recht viel dazu.
SolidWorks API Search "display states"

Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Erzmichel
Mitglied
Dipl Ing Maschbau


Sehen Sie sich das Profil von Erzmichel an!   Senden Sie eine Private Message an Erzmichel  Schreiben Sie einen Gästebucheintrag für Erzmichel

Beiträge: 362
Registriert: 18.05.2012

Win 10
Intel i7-7700K 4,2GHz
16 GB RAM
Quadro K2200

erstellt am: 06. Sep. 2018 11:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Genau das habe ich gefunden.
Ich bastel gerade an dem Code:
Ich denke, den kann ich gut als Ausgangspunkt nehmen.

'---------------------------------------------------------------------------
' Preconditions:
' 1. Specified model exists.
' 2. Specified appearance exists.
' 3. Open an Immediate window.
'
' Postconditions:
' 1. Creates Display State 2 and Display State 3 for the active
'    configuration.
' 2. Applies specified appearance to all display states of the active
'    configuration.
' 3. Press F5.
' 4. Deletes specified appearance from all display states of the active
'    configuration.
' 5. Press F5.
' 6. Closes document.
'---------------------------------------------------------------------------
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfig As SldWorks.Configuration
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swEntity As SldWorks.Entity
Dim swSelMgr As SldWorks.SelectionMgr
Dim swRenderMaterial As SldWorks.RenderMaterial
Dim displayStateNames As Variant
Dim status As Boolean
Dim modelName As String
Dim materialName As String
Dim errors As Long
Dim warnings As Long
Dim nbrDisplayStates As Long
Dim i As Long
Dim k As Long
Dim nbrMaterials As Long
Dim materialID1 As Long
Dim materialID2 As Long
Dim materialID1_ToDelete(0) As Long
Dim materialID2_ToDelete(0) As Long

Sub main()

    modelName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2017\tutorial\dimxpert\bracket_auto_manual.sldprt"
    Set swApp = Application.SldWorks
    Set swModel = swApp.OpenDoc6(modelName, swDocPART, swOpenDocOptions_Silent, "", errors, warnings)
    Set swModelDocExt = swModel.Extension


    ' Get active configuration and create a new display
    ' state for this configuration
    Set swConfig = swModel.GetActiveConfiguration
    status = swConfig.CreateDisplayState("Display State 2")
   

    swModel.ForceRebuild3 True
   

    ' Get active configuration and create another new
    ' display state for this configuration
    Set swConfig = swModel.GetActiveConfiguration
    status = swConfig.CreateDisplayState("Display State 3")
   

    swModel.ForceRebuild3 True
   

    ' Create appearance
    materialName = "C:\Program Files\SolidWorks Corp\SolidWorks\data\graphics\materials\metal\steel\stainless steel treadplate.p2m"
    Set swRenderMaterial = swModelDocExt.CreateRenderMaterial(materialName)
   

    ' Select a face and add the appearance to that face
    status = swModelDocExt.SelectByID2("", "FACE", 0.07151920610502, 0.0952597996959, 0.009524999999996, False, 0, Nothing, 0)
    Set swSelMgr = swModel.SelectionManager
    Set swEntity = swSelMgr.GetSelectedObject6(1, -1)
    status = swRenderMaterial.AddEntity(swEntity)
   

    ' Get the names of display states
    displayStateNames = swConfig.GetDisplayStates
    nbrDisplayStates = swConfig.GetDisplayStatesCount
    Debug.Print "This configuration's display states ="
    For i = 0 To (nbrDisplayStates - 1)
        Debug.Print "  Display state name = " & displayStateNames(i)
    Next i
   

    ' Add appearance to all of the display states
    status = swModelDocExt.AddDisplayStateSpecificRenderMaterial(swRenderMaterial, swAllDisplayState, displayStateNames, materialID1, materialID2)
   

    ' Get the appearance IDs and names
    swRenderMaterial.GetMaterialIds materialID1, materialID2
    Debug.Print "    Appearance IDs:"
    Debug.Print "      ID1 = " & materialID1
    Debug.Print "      ID2 = " & materialID2
    nbrMaterials = swModelDocExt.GetRenderMaterialsCount2(swAllDisplayState, Nothing)
    Debug.Print "    Number of appearances: " & nbrMaterials
    For k = 0 To (nbrMaterials - 1)
        Debug.Print "      Name of appearance " & (k + 1) & ": " & swModel.MaterialIdName
    Next k
   

    Dim xcoord As Double
    Dim ycoord As Double
    Dim zcoord As Double
    swRenderMaterial.GetCenterPoint2 xcoord, ycoord, zcoord
    Debug.Print ""
    Debug.Print "Texture-based appearance data:"
    Debug.Print "X coordinate of center point: " & xcoord
    Debug.Print "Y coordinate of center point: " & ycoord
    Debug.Print "Z coordinate of center point: " & zcoord
   

    swRenderMaterial.GetUDirection2 xcoord, ycoord, zcoord
    Debug.Print "X coordinate of U direction: " & xcoord
    Debug.Print "Y coordinate of U direction: " & ycoord
    Debug.Print "Z coordinate of U direction: " & zcoord
       

    swRenderMaterial.GetVDirection2 xcoord, ycoord, zcoord
    Debug.Print "X coordinate of V direction: " & xcoord
    Debug.Print "Y coordinate of V direction: " & ycoord
    Debug.Print "Z coordinate of V direction: " & zcoord
    Debug.Print ""
   

    swModel.ClearSelection2 True
    swModel.ForceRebuild3 True
     

    Debug.Print "Model has an appearance: " & swModelDocExt.HasMaterialPropertyValues
   

    Dim dispStates As Variant
    status = swRenderMaterial.SetLinkedDisplayStates(swAllDisplayState, displayStateNames)
    dispStates = swRenderMaterial.GetLinkedDisplayStates
   

    Dim renderMaterials As Variant
    renderMaterials = swModelDocExt.GetRenderMaterials2(swAllDisplayState, Nothing)
   

    ' Examine the display states of the active configuration
    ' to ensure that the specified appearance was applied to all
    ' display states (click the ConfigurationManager tab and switch
    ' display states at bottom of the Configuration pane)
    ' Continue running the macro after your examination
    Stop
   

    ' Delete the appearance from the part
    materialID1_ToDelete(0) = materialID1
    materialID2_ToDelete(0) = materialID2
    swModelDocExt.DeleteDisplayStateSpecificRenderMaterial (materialID1_ToDelete), (materialID2_ToDelete)
    swModel.ForceRebuild3 True
   

    ' Examine the display states of the active configuration
    ' to ensure that the specified appearance was deleted from all
    ' display states (click the ConfigurationManager tab and switch
    ' display states at bottom of the Configuration pane)
    ' Continue running the macro after your examination
    Stop
   

    ' Close the part without saving changes
    modelName = swModel.GetTitle
    swApp.QuitDoc modelName
   

End Sub

------------------
Grüße vom
Erzmichel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 06. Sep. 2018 11:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Erzmichel 10 Unities + Antwort hilfreich

Hallo Erzmichel,

wie du schon festgestellt hast ist der Makrorecorder von SolidWorks in den wenigsten Fällen wirklich hilfreich, da musst du dir etwas andere Herangehensweisen suchen. Meiner Erfahrung nach ist es das einfachste, zunächst mal die englischen Bezeichnungen herauszufinden, nach denen man stöbern kann, da die API-Hilfe nur auf englisch ist; dazu wiederum ist es am einfachsten sein SolidWorks auf englisch umzustellen und dann einfach z.B. im Featuremanager nachschauen, wie der entsprechende Fachterminus auf englisch ist.

In diesem Fall also: Display State für Anzeigestatus. Damit kanst du dann in der API Hilfe einsteigen, so wie Henry das vorgeschlagen hat. Du willst nun einen neuen Anzeigestatus erzeugen, da hilft dann meist die zusätzlichen Stichworte Add oder Create weiter - damit kommst du dann z.B. auf den Beispielcode "Create, Unlink, and Purge Display States in Part Example (VBA)" in der API Hilfe.

Den kannst du dann analysieren und die Teile verwenden, die du brauchen kannst.

Das sähe dann beispielsweise so aus, um einen Anzeigestatus in der aktiven Konfiguration zu erzeugen:

Code:
Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swConfigMgr    As SldWorks.ConfigurationManager
Dim swConfig        As SldWorks.Configuration

Dim boolstatus      As Boolean

Sub main()
    ' die benötigten Objekte holen
    Set swApp = Application.SldWorks
    ' aktuelles Modell
    Set swModel = swApp.ActiveDoc
    ' den Konfigurationsmanager ...
    Set swConfigMgr = swModel.ConfigurationManager
    ' ... und daher die aktive Konfiguration
    Set swConfig = swModel.ConfigurationManager.ActiveConfiguration
   
    ' jetzt einen neuen Anzeigestatus namens "MeinNeuerAnzeigestatus" hinzufügen
    boolstatus = swConfig.CreateDisplayState("MeinNeuerAnzeigestatus")
   
    If boolstatus Then
        Debug.Print "Anzeigestatus erzeugt: MeinNeuerAnzeigestatus"
    Else
        Debug.Print "Gibt es wohl schon"
    End If
   
    ' damit man den auch im Featuremanager sofort sehen kann
    swModel.ForceRebuild3 True

End Sub



Immer schön kommentieren, damit du hinterher noch weißt, was du tun wolltest und warum gerade so und nicht anders.

Da ist schon mal ein Anfang. Es gibt natürlich noch dutzende Fallstricke und potentielle Fehler, die man abfangen kann/sollte, das Farbenzeug und Erscheinungsbilder (Appearances) in SolidWorks ist auch recht komplex, aber da kannst du dich dann so nach und nach durchhangeln.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Erzmichel
Mitglied
Dipl Ing Maschbau


Sehen Sie sich das Profil von Erzmichel an!   Senden Sie eine Private Message an Erzmichel  Schreiben Sie einen Gästebucheintrag für Erzmichel

Beiträge: 362
Registriert: 18.05.2012

Win 10
Intel i7-7700K 4,2GHz
16 GB RAM
Quadro K2200

erstellt am: 06. Sep. 2018 11:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke Stefan,
darauf werde ich gleich mal aufbauen.
Was ich gemerkt habe, das Thema API ist ganz schön umfabgreich. 
Aber ich denke es lohnt sich. Und wenn ich auf deine Hilfeseite und der Makro-Tauschbörse schaue, Respekt vor den Usern, die Makros schreiben können.
Apropos Tauschbörse, wird die noch gepflegt?

------------------
Grüße vom
Erzmichel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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: 06. Sep. 2018 12:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Erzmichel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Erzmichel:
Apropos Tauschbörse, wird die noch gepflegt?

Nein, nicht wirklich. Ich hab die Seite im Netz gelassen, weil da doch eine Menge Infos drauf stehen, die immer noch vernünftig eingesetzt werden können, aber der Aufwand war dann doch irgendwann zu viel. Und den Hauptzweck hat die Hilfeseite ja lange Jahre erfüllt, als es praktisch nichts in Deutsch und nur wenig in englisch gab.

Mittlerweile findet der geneigte Anwender an allen Ecken und Enden Informationen, nicht zuletzt auch hier im Brett

Aber ganz löschen wollte ich sie dann auch nicht, mit dem Gedrödel rund um die DSVGO habe ich zwar kurz drüber nachgedacht, aber konnte mich dann doch nicht dazu durchringen alles zu löschen. Und ich hoffe inständig, dass mich das nicht irgendwann in den Hintern beißt 

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Erzmichel
Mitglied
Dipl Ing Maschbau


Sehen Sie sich das Profil von Erzmichel an!   Senden Sie eine Private Message an Erzmichel  Schreiben Sie einen Gästebucheintrag für Erzmichel

Beiträge: 362
Registriert: 18.05.2012

Win 10
Intel i7-7700K 4,2GHz
16 GB RAM
Quadro K2200

erstellt am: 06. Sep. 2018 13:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von StefanBerlitz:

Das sähe dann beispielsweise so aus, um einen Anzeigestatus in der aktiven Konfiguration zu erzeugen:


Ich glaube, ich stelle mich zu dumm an. Ich habe den Code kopiert, durchlaufen lassen und nichts passiert.
Immer wenn ich glaube, ich habe was verstanden und dann?   
Ich versenke mich mal ins Thema. Wenn ich nicht wieder auftauche, dann wisst ihr, API ist nix für den Erzmichel. 

------------------
Grüße vom
Erzmichel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Locke79
Mitglied
Arbeitsvorbereitung


Sehen Sie sich das Profil von Locke79 an!   Senden Sie eine Private Message an Locke79  Schreiben Sie einen Gästebucheintrag für Locke79

Beiträge: 12
Registriert: 08.03.2022

erstellt am: 25. Apr. 2023 15:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Erzmichel 10 Unities + Antwort hilfreich

Hallo Stefan,

ist ein super Makro. Da ich nicht wirklich was mit der Programmierung in VBA kann, die Frage kann man das Makro so umschreiben, das es nur bei Teilen den Anzeigestatus hinzufügt und nicht bei BG, sprich ich habe eine BG offen mit 50 Teilen und möchte bei allen Teilen einen Anzeigestatus hinzufügen aber nicht bei der BG.

Grüße


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Heiko Soehnholz
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. (FH) Maschinenbau



Sehen Sie sich das Profil von Heiko Soehnholz an!   Senden Sie eine Private Message an Heiko Soehnholz  Schreiben Sie einen Gästebucheintrag für Heiko Soehnholz

Beiträge: 5463
Registriert: 03.07.2002

SOLIDWORKS 2001 - 2024SP0.1
Elite AE Award 2023
SOLIDWORKS Premium,
Simu, Flow, Plastics, Composer, MBD,
Inspection, PDMP, Visualize, TopsWorks,
DPS Tools, JobBox, MacroSheet, etc.
Passungstabelle von Heinz
WIN10x64 22H2 | HP ZBook 17 Fury G8

erstellt am: 26. Apr. 2023 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Erzmichel 10 Unities + Antwort hilfreich

Moin,

da musst du wohl durch die Baugruppe traversieren.
Hier ist ein Codeschnipsel dazu:

https://www.codestack.net/solidworks-api/document/assembly/components/traversing-tree/

Die Seite bietet so einiges - unbedingt reinschauen!

------------------
Einen schönen Gruß von Heiko
www.dps-software.dewww.dps-akademie.dewww.iknow-solidworks.dewww.youtube.de/dpssoftwaregmbh

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz