Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SW2008 API: Komponentenmuster: Kinder ermitteln

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
Autor Thema:  SW2008 API: Komponentenmuster: Kinder ermitteln (1922 mal gelesen)
oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 10. Dez. 2010 14:17    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 zusammen!

Ich möchte per API alle referenzierten Komponenten eines Musters in einem Variant-Array speichern.
Dazu hab ich es bereits realisiert, dass ich über ".IsPatternInstance" alle Komponenten einer Baugruppe ermittle, die in einem Linearen Komponentenmuster gemustert wurden.
Bei den gemusterten Komponenten handelt es sich bei mir um virtuelle Komponenten.
Ich kann über den bereits geschriebenen Code eindeutig die Komponenten ermitteln, die die Ursprungskomponente eines Musters sind.
Nun möchte ich wie gesagt die davon abstammenden Kopien als Pointer in einem Array speichern. Leider Funktioniert die GetChildren Funktion nicht, bzw. liefert immer nur ein Variant der Länge -1 (also Leer) zurück.
Ich hab es momentan so realisiert, dass ich die Namen der Komponenten zur identifizierung der zugehörigkeit einer Komponente zu einer Ursprungskomponente nutze - allerdings ist diese Methode sehr unsicher und liefert mir oftmals im weiteren Verlauf Fehler.

Habt ihr eine Idee, wie ich ein Array mit Pointern auf die erzeugten Kopien einer Komponente eines Musters erhalten kann?


Gruß


Alex

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 15. Dez. 2010 07:26    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

Niemand?

Hmm... weiß denn jemand wie ich alle Komponenten einer Baugruppe der Reihe nach durchgehen kann? Mit Features gehts ja mit FirstFeature und NextFeature... bei Baugruppen kenn ich bisher nur die Getchildren Variante, wo man alle Kinder in ungeordneter Reihenfolge in einem Array bekommt...

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: 15. Dez. 2010 09:49    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo oeNkraD (uPs, jETzt HaB iCH nen KnOtEn in dEN fInGeRn),

theoretisch müsstest du auch eine Baugruppe mit FirstFeature/GetNextFeature durchlaufen können. Das hab ich aber noch nicht selbst probiert, bei meinen Aufgaben hat bisher immer das GetChildren gereicht.

Zum ersten Beitrag: die Aufgabenstellung hört sich für mich zumindest so speziell an, dass ich keine Lust verspüre mehrere halbe Stunden erst mal darein zu setzen die Umgebung nachzustellen. Vielleicht wäre es in solchen Situationen einfacher, wenn du ein komplettes Testszenario mit Baugruppe, Modellen und Beispielcode hochlädst, damit die potentiellen Helfer einen Anfang haben. Es sei denn, du vertraust auf dein Glück, dass genau das schon mal jemand gemacht hat und direkt sagen kann, wo der Knackpunkt ist 

Ciao,
Stefan

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

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

Hofe
Mitglied
Werkzeugmacher


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

Beiträge: 440
Registriert: 12.01.2008

Computer: Aldi
Schreibtisch: Ikea
Werkbank: Baumarkt
Software:
1967-2021, viele Updates und SP's, aber sicher nicht alle, deswegen immer wieder Sicherheitslücken

erstellt am: 15. Dez. 2010 09:53    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 oeNkraD 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StefanBerlitz:
Hallo oeNkraD (uPs, jETzt HaB iCH nen KnOtEn in dEN fInGeRn)

Auch "Alex" genannt 

Rückwärts ergibt der Nick sogar Sinn.

------------------
Ist mir egal, wer Dein Vater ist; solange ich angle läuft hier keiner übers Wasser!

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 15. Dez. 2010 11:20    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  

Also folgendes hab ich mir gedacht:

Code:
Sub main()

    Dim swApp                       As SldWorks.SldWorks

    Dim swModel                     As SldWorks.ModelDoc2

    Dim swFeatMgr                   As SldWorks.FeatureManager

    Dim swConfigMgr                 As SldWorks.ConfigurationManager

    Dim swConfig                    As SldWorks.Configuration
   
    Dim swRootComp                  As SldWorks.Component2


   
   

    Set swApp = CreateObject("SldWorks.Application")

    Set swModel = swApp.ActiveDoc
   
    If swModel Is Nothing Then
   
        MsgBox ("Keine Datei geöffnet")
       
        End
       
    Else
   
        If swModel.GetType() = swDocDRAWING Then
       
            MsgBox ("Zeichnungen nicht Unterstützt!")
           
            End
           
        End If
   
    End If
   
    Set swFeatMgr = swModel.FeatureManager
   
    Set swConfigMgr = swModel.ConfigurationManager

    Set swConfig = swConfigMgr.ActiveConfiguration

    Set swConf = swModel.GetActiveConfiguration

    Set swRootComp = swConf.GetRootComponent
   
    swFeatMgr.EnableFeatureTree = False
   
    swModel.ClearSelection2 True
 
 
 
    If Not swModel.GetType() = swDocPART Then
     
        TraverseComponent swRootComp

    End If
   
   
   
    swModel.ClearSelection2 True
   
    swFeatMgr.EnableFeatureTree = True

End Sub

Sub TraverseComponent(swComp As SldWorks.Component2)


    Dim swChildComp                 As SldWorks.Component2
   
   
    Set swChildComp = swComp.FirstFeature
   
   
    While Not swChildComp Is Nothing

               
        If Not swChildComp.GetModelDoc() Is Nothing Then

            If swChildComp.GetModelDoc.GetType() = swDocASSEMBLY Then
           
                MsgBox ("Assembly")
           
            Else
           
                MsgBox (swChildComp.Name2())
           
            End If
           
        End If
       
        swChildComp = swComp.GetNextFeature()

    Wend
   
    MsgBox ("fertig")
   
End Sub


Leider kommt bei dem durchlauf des "traversecomp..." Sub mit first Feature und NextFeature nichts zu stande.

Meine Baugruppen haben ein Hauptbaugruppe, eine Unterbaugruppe (Teilweise mit Parts und BG Features), eine weitere Unterbaugruppe (Parts und BG Features)

Ich möchte jetz über das Makro jedes Part abrufen und zwar in der Reihenfolge, wie es im Designtree steht. wie schon erwähnt liefert GetChildren dazu nur ein wirres Durcheinander - für mich unbrauchbar...


Liebe Grüße

Alex (oeNkraD schreibt sich doch ganz flüssig von der Hand  :zwinker

[Diese Nachricht wurde von oeNkraD am 15. Dez. 2010 editiert.]

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 15. Dez. 2010 12:15    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

Ok: Darüber bekomm ich alles schön in Reihenfolge des Designtrees. Hervoragend...

Code:
Sub main()

    Dim swApp                      As SldWorks.SldWorks

    Dim swModel                    As SldWorks.ModelDoc2

    Dim swFeat                      As SldWorks.Feature


   

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swFeat = swModel.FirstFeature

   

    MsgBox (swModel.GetPathName)


    Do While Not swFeat Is Nothing

        If swFeat.GetTypeName2 = "Reference" Then

            MsgBox (swFeat.Name)
           
        End If

        Set swFeat = swFeat.GetNextFeature

    Loop

End Sub



Aber wie komm ich von einem Feature wieder zu einem Component2-Pointer? Geht das irgendwie direkt oder muss ich da irgendwie, über den Namen, was zurecht basteln?


Gruß

Alex

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



Anzeige:Infos zum Werbeplatz >>

speedyPDM CAD APP für Andere, Datenaustausch, Allgemeine Werkzeuge

speedyPDM ist das führende technische Dokumenten- und Produktdatenmanagementsystem für Solidworks, Solid Edge, Inventor, AutoCAD, ZWCAD, BricsCAD, Office und Email inklusive Revisionsmanagement.

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: 15. Dez. 2010 13:19    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo Alex (ist doch einfacher, meine Finger werden langsam alt und träge  ),

da bist du doch schon gut weiter gekommen. Du kannst dann von da aus weitermachen wie z.B.

Code:
Sub main()
   
    Dim swApp As Object
    Dim AssemblyDoc As Object
    Dim Feature As Object
    Dim Component As Object
   
    Set swApp = CreateObject("SldWorks.Application")
    Set AssemblyDoc = swApp.ActiveDoc
   
    ' dann das erste Feature holen
    Set Feature = AssemblyDoc.FirstFeature
    ' und solange noch Featuires da sind Schleife drehen
    While Not Feature Is Nothing
       
        ' mal ein paar Infos rausschreiben
        Debug.Print Feature.Name, Feature.GetTypeName2

        ' hier kann man jetzt alles Mögliche mit dem Feature machen
        If Feature.GetTypeName2 = "Reference" Then
            Set Component = Feature.GetSpecificFeature2
            Debug.Print Component.GetPathName
        End If
       
        ' auf zum nächsten Feature
        Set Feature = Feature.GetNextFeature()
        featcount = featcount + 1
    Wend

End Sub



Dann noch eine Rekursion einbauen, um automatisch die Unterbaugruppen zu durchforsten und dann auf das nächste Problem warten 

Ciao,
Stefan

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

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