Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Eigenschaften auslesen (API)

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
  
eDrawings - Ein Viewer für alle Fälle
Autor Thema:  Eigenschaften auslesen (API) (1687 mal gelesen)
ulix
Mitglied
Produktionsingenieur


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

Beiträge: 68
Registriert: 22.01.2003

SWX 2004 Office Educ.

erstellt am: 24. Mai. 2005 15: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

Hallo,

ich habe mit dem Traverse Assembly Example aus der API Hilfe ein kleines Makro gebaut -oder will es mir bauen- welches alle im Assembly verbauten Parts auf bestimmte Eigenschaften untersucht.

irgendwo hat sich aber noch ein Fehler eingeschlichen, bzw. vermute ich, dass die Vorgehensweise falsch ist oder etwas fehlt... retval wird immer als leer angegeben, obwohl eine Eigenschaft gesetzt ist.

Vielen Dank und sonnige Grüsse


vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        Debug.Print swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
        retval = swModel.CustomInfo2(swChildComp.Name2, "Eigenschaft")
        If retval = "yes" Then
            bRet = swComp.Select(True)
        End If

    Next i

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: 24. Mai. 2005 15: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 Nur für ulix 10 Unities + Antwort hilfreich

Hallo ulix,

in der Zeile

Code:
retval = swModel.CustomInfo2(swChildComp.Name2, "Eigenschaft")

muss der Konfigurationsname hin und nicht der Name der Komponente 

Ciao,
Stefan

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

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

ulix
Mitglied
Produktionsingenieur


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

Beiträge: 68
Registriert: 22.01.2003

SWX 2004 Office Educ.

erstellt am: 24. Mai. 2005 16:11    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

Sali Stefan,

Die Eigenschaft ist Dokumenten- und nicht konfigurationsspezifisch, d.h. mit dem Konfigurationsname erhalte ich einen leeren String zurück.

Gemäss API-Hilfe kann man Dokumentenspezifische Eigenschaften mit einem leeren String beim Konfigurations-Namem Argument abfragen.

Erhalte dann aber auch einen leeren String zurück.

        retval = swModel.CustomInfo2("", "Eigenschaft")
        If retval = "yes" Then
            bRet = swComp.Select(True)
        End If

Trotzdem danke.

Gruess

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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 24. Mai. 2005 16:23    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 ulix 10 Unities + Antwort hilfreich

Hallo Ulix.

retval = swModel.CustomInfo2("", "Eigenschaft")

ist meineserachtens richtig. Wenn Du trotzdem einen leeren String zurückbekommst fragt sich:
- hast Du wirklich was drin in der CustomInfo?
- ist die CustomInfo im Modell als String deklariert?
- ist "Eigenschaft" wirklich korrekt geschrieben?
- als was hast Du >retval< deklariert?
- ist >swModel< das richtige Objekt das Du haben willst?
- ..... mehr fällt mir im Moment nicht ein!

Grüsse nach Zürich (bei uns im Aargau ist es auch sonnig  )!

------------------
Gruss
Andreas
A+E Müller AG

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: 25. Mai. 2005 07:27    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 ulix 10 Unities + Antwort hilfreich

Hallo ulix,

> Die Eigenschaft ist Dokumenten- und nicht konfigurationsspezifisch [...]

Tja, wichtige Info, die gefehlt hat 

Dann ist es richtig, dort einen Leerstring reinzuschreiben, aber dein Konstrukt oben kann eben ganz bestimmt nicht klappen. Die restlichen Möglichkeiten hat Andreas ja schon aufgeschrieben, ich vermute auch, dass du das falsche ModelDoc (also swModel) Object nutzen willst, wie du das erhälst steht leider nicht in dem Codeschnipsel drin 

Ciao,
Stefan

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

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

ulix
Mitglied
Produktionsingenieur


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

Beiträge: 68
Registriert: 22.01.2003

SWX 2004 Office Educ.

erstellt am: 25. Mai. 2005 09:11    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

Morgen miteinander,

Zitat:

Tja, wichtige Info, die gefehlt hat.

Mein Fehler, hab mir erst gedacht, dass die Dokumenteneigenschaften vererbt werden und erst auf Deinen ersten Tip hin bemerkt, dass das zwei verschiedene Paar Schuhe sind...

Zitat:

- ist >swModel< das richtige Objekt das Du haben willst?


Ich denke mal, da ist der Fehler. Wenn ich das debugge, dann wird mir das richtige Bauteil angezeigt, aber irgendwie ist es nicht geladen (--> Anfänger <--)?

Die Funktion sollte eigentlich sein, dass das Makro die BG nach Teilen oder UBG mit bestimmten Eigenschaften durchforstet und diese selektiert und damit weitere Aktionen durchführt. Am besten aber im Hintergrund, da das bei BG's mit 7000 Teilen sonst etwas zu langsam wird; sprich ich möchte nicht am Bildschirm mitverfolgen was passiert, sondern nur das Resultat sehen.

Anbei der komplette Code. 99% das Traverse Assembly Beispiel und der fehlerhafte Rest von mir 

Gruess, Daniel


----------------------------

Option Explicit

    Dim swApp                      As Object
    Dim swModel                    As Object
    Dim swConf                      As Object
    Dim swRootComp                  As Object
   

Sub TraverseComponent(swComp As Object, nLevel As Long)

    Dim vChildComp                  As Variant
    Dim swChildComp                As Object
    Dim swCompConfig                As Object
    Dim sPadStr                    As String
    Dim i                          As Long
    Dim retval                      As String
    Dim bRet                        As Boolean
   
   

    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        Debug.Print sPadStr & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
        'retval = swModel.CustomInfo2(swChildComp.Name2, "Eigenschaft")
       
   
        Debug.Print swChildComp.ReferencedConfiguration
       
        retval = swModel.CustomInfo2("", "Eigenschaft")
        If retval = "yes" Then
            bRet = swComp.Select(True)
        End If
       
    Next i

End Sub

Private Sub Command1_Click()

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent

    Debug.Print "File = " & swModel.GetPathName

    TraverseComponent swRootComp, 1

End Sub

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: 25. Mai. 2005 10: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 Nur für ulix 10 Unities + Antwort hilfreich

Hallo ulix,

da musst du an ein paar Stellen ändern. Zuerst brauchst du mal das ModelDoc.Objct der Komponente, die du ja untersuchst. Du weiß dem swModel einmal am Anfang das Objekt des aktiven Dokumentes zu und danach nicht mehr; also musst du in den Traverse mit swChildComp.GetModelDoc auch immer das Model-Object umsetzen.

Dann solltest du noch abfangen, ob das Nothing ist, damit du bei unterdrückten oder reduzierten Komponenten nicht auf die Nase fällst.

Und dann versuchst du die übergeordnete Baugruppe zu selektieren, wenn du die richtige Komponente (bzw. Eigenschaft) gefunden hast; da bin ich mir nicht sicher, ob das gewollt ist oder ob du die Komponente selbst haben willst. Ich hab mal die Passagen geändert und gekennzeichnet:

Code:

Sub TraverseComponent(swComp As Object, nLevel As Long)

    Dim vChildComp                  As Variant
    Dim swChildComp                As Object
    Dim swCompConfig                As Object
    Dim sPadStr                    As String
    Dim i                          As Long
    Dim retval                      As String
    Dim bRet                        As Boolean
   
   

    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
       
        Set swModel = swChildComp.GetModelDoc
        If Not swModel Is Nothing Then

            Debug.Print sPadStr & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
            'retval = swModel.CustomInfo2(swChildComp.Name2, "Eigenschaft")
           
       
            Debug.Print swChildComp.ReferencedConfiguration
           
            retval = swModel.CustomInfo2("", "test")
            If retval = "yes" Then
                bRet = swChildComp.Select(True)
            End If
        End If
    Next i


Ich hoffe, damit kommst du jetzt einen Schritt weiter     

Ciao,
Stefan

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

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

ulix
Mitglied
Produktionsingenieur


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

Beiträge: 68
Registriert: 22.01.2003

SWX 2004 Office Educ.

erstellt am: 25. Mai. 2005 12:08    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

Ja, jetzt klappt es einwandfrei, zudem -und das ist fast noch besser- habe ich mit jedem Tip mehr Verständnis der API. 

Danke und 10 Credits

Schönen Tag, Gruess

Daniel

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