| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | SOLIDWORKS Visualize Grundlagen Schulung, ein Seminar am 17.11.2025
|
|
Autor
|
Thema: Eigenschaften auslesen (API) (2119 mal gelesen)
|
ulix Mitglied Produktionsingenieur

 Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 24. Mai. 2005 15:22 <-- editieren / zitieren --> Unities abgeben:         
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)

 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 / zitieren --> Unities abgeben:          Nur für ulix
|
ulix Mitglied Produktionsingenieur

 Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 24. Mai. 2005 16:11 <-- editieren / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 24. Mai. 2005 16:23 <-- editieren / zitieren --> Unities abgeben:          Nur für ulix
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)

 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 / zitieren --> Unities abgeben:          Nur für ulix
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

 Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 25. Mai. 2005 09:11 <-- editieren / zitieren --> Unities abgeben:         
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)

 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 / zitieren --> Unities abgeben:          Nur für ulix
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

 Beiträge: 68 Registriert: 22.01.2003 SWX 2004 Office Educ.
|
erstellt am: 25. Mai. 2005 12:08 <-- editieren / zitieren --> Unities abgeben:         
|