Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Auslesen und setzen der Konfigurationen einer selektierten Komponente

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
  
Next-Level-Design mit AI in SOLIDWORKS Cloud-Lösungen
Autor Thema:  API - Auslesen und setzen der Konfigurationen einer selektierten Komponente (908 mal gelesen)
Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 13. Sep. 2021 16:25    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


Komponente-konfigurieren.png

 
Hallo,
ich bin auf der Suche nach einem Beispiel zum auslesen und setzen der Konfigurationen einer selektierten Komponente in einer Oberbaugruppe, und zwar ohne die einzelnen Konfigurationen der Oberbaugruppe zu aktivieren.

Mit Rechtsklick auf eine Komponente und Komponente konfigurieren bekomme ich ein Fenster wie im Bild zu sehen.
Hier könnte ich jetzt beliebig modifizieren.
Diese Informationen möchte ich zunächst in ein Array schreiben.

Code:

Dim ConfigCountOBgr    As Long                            'Anzahl der Konfigurationen
Dim ConfigNamesOBgr    As Variant                          'Namen der Konfigurationen
Dim i                  As Integer                          'Zähler
ConfigNamesOBgr = swModel.GetConfigurationNames            'Namen der Konfigurationen
ConfigCountOBgr = UBound(ConfigNamesOBgr)                  'Anzahl der Konfigurationen
   
ReDim Preserve referencedKonfig(ConfigCountOBgr)            'Array erweitern

For i = 0 To ConfigCountOBgr
       
            referencedKonfig(i).Config = Config                'Konfiguration der Oberbaugruppe
            referencedKonfig(i).RefConfig = selModelConfig      'Konfiguration der selektierten Komponente

            If Not CBool(CInt(swComp.IsSuppressed)) Then        'Wenn Komponente nicht unterdrückt ist
                referencedKonfig(i).IsSuppressed = False
            Else
                referencedKonfig(i).IsSuppressed = True
            End If
       
    Next i


Auf die Konfiguration der Oberbaugruppe greife ich wie üblich zu.

Code:

    Set swApp = Application.SldWorks                                           
    Set swModel = swApp.ActiveDoc                                              'aktive Baugruppe
    Set Configuration = swModel.GetActiveConfiguration
    Config = Configuration.Name

Auf die Konfiguration der selektierten Komponente greife ich so zu.

Code:

Dim swComp As SldWorks.Component2
Dim selModelConfig As String
Set swComp = SelMgr.GetSelectedObjectsComponent(i)
selModelConfig = swComp.ReferencedConfiguration                            'Konfigurationsname der selektierten Komponente

Nun müsste ich jede Konfiguration in der Oberbaugruppe aufrufen und dort jeweils die gesuchten Informationen abfragen.
Dies möchte ich aber vermeiden und ohne Konfigwechsel auslesen.
Der Makrorecorder nimmt hier leider nichts passendes auf.

Hat mir jemand den passenden Befehl zu dieser Abfrage?

Im nächsten Schritt wird die Komponente durch eine Unterbaugruppe ersetzt und nun möchte ich dieses Array wieder auslesen und die Konfigurationen wie gehabt einstellen, natürlich auch ohne Konfigwechsel der Oberbaugruppe.

Die Konfiguration der Unterbaugruppe wähle ich momentan mit diesem Befehl aus.

Code:

boolstatus = selModelASM.ReplaceComponents2(uBgrModelPathName, uBgrModelConfig, False, 1, True)

Bei diesem Befehl fehlt auch die Option, die Konfiguration der Oberbaugruppe zu definieren.

Hoffentlich gibt es dazu passende Befehle.
Wer kann weiterhelfen?

Grüße, Andi 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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: 14. Sep. 2021 10:54    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 Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi

Ich hab dir einmal das Auslesen zusammen gebastelt.
(Vorlage: Get configurations of child components relative to configuration of parent)

Code:
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim mDoc As ModelDoc2

Dim swComp As SldWorks.Component2
Dim rootComp As Component2
Dim comp2 As Component2

Dim SelMgr As SelectionMgr
Dim configNames() As String
Dim config As Configuration
Dim childCompsObj() As Object

Dim i As Integer
Dim j As Integer

Public Sub Main()

Set swApp = Application.SldWorks
Set mDoc = swApp.ActiveDoc
Set SelMgr = mDoc.SelectionManager
Set swComp = SelMgr.GetSelectedObjectsComponent(1)

configNames = mDoc.GetConfigurationNames

For i = 0 To UBound(configNames)
Set config = mDoc.GetConfigurationByName(configNames(i))
Set rootComp = config.GetRootComponent3(True)
Debug.Print ("------------Processing config: " + config.Name + "------------")

childCompsObj = rootComp.GetChildren()

For j = 0 To UBound(childCompsObj)
Set comp2 = childCompsObj(j)
If comp2.Name = swComp.Name Then
Debug.Print ("Referenced config for " + comp2.Name2 + " is: " + comp2.ReferencedConfiguration)
Exit For
End If
Next

Next

End Sub


Das Ändern der Konfiguration der eingefügten Baugruppen sollte ähnlich sein. (ReferencedConfiguration Property (IComponent2))

Gruss Andreas

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

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 15. Sep. 2021 08: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

Hallo Andreas, 
wunderbar, das Auslesen klappt jetzt wie gewünscht.
Konnte dein Beispiel in mein Makro integrieren.
Die Reihenfolge der Konfigurationen ist zwar Historienbasiert, aber in diesem Fall benötige ich sie nicht alphabetisch sortiert.
Allerdings hätte ich für das Sortieren bereits eine Routine, für alle Fälle.

Jetzt mache ich mich an die nächsten Schritte ran.

Besten Dank schon mal dafür.
Evtl. melde ich mich nochmal, falls ich irgendwo hängen bleibe.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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