| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Zerspanungstreff mit SolidCAM bei der Hoffmann GmbH in Achim/Bremen |
Autor
|
Thema: API: Baugruppenkomponenten auslesen (2550 mal gelesen)
|
Oberparleiter Mitglied Konstrukteur
Beiträge: 706 Registriert: 06.06.2000
|
erstellt am: 05. Jul. 2001 12:59 <-- editieren / zitieren --> Unities abgeben:
Hi SWX Usergemeinde Wie kann ich aus aus einer BG die Teile/Unterbaugruppen in der ersten/zweiten usw Ebene auslesen und wie bekomme ich die Stückzahlen der verbauten Teile/U-BG. Danke in vorraus. Tschue
Oberparleiter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Armin B Mitglied Software Engineer ERP/PLM/CAD
Beiträge: 208 Registriert: 04.09.2000 Sw 2015 SP3
|
erstellt am: 05. Jul. 2001 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für Oberparleiter
|
Oberparleiter Mitglied Konstrukteur
Beiträge: 706 Registriert: 06.06.2000
|
erstellt am: 06. Jul. 2001 12:42 <-- editieren / zitieren --> Unities abgeben:
hi Armin Das Beispiel "Traverse Assembly Excample" hilft mir schon die Teile und UBG's auszulesen. Ich bräuchte aber noch die Stückzahlen. Wie komm ich an diese? Ich denke mit dem Befehl "Child Component Count" sollte es eigendlich gehen nur der Hacken ist den gibts nich für VBA(siehe API-Hilfe). Das steht nur "Note: This method can only be called from COM implementations" wie kann ich den Befehl dennoch verwenden? Danke in Vorraus Tschue Oberparleiter 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: 06. Jul. 2001 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für Oberparleiter
Hallo, du brauchst unter VB (oder VBA) diese Funktion gar nicht. Das Safearray mit den Children gibt dir schon die Anzahl zurück: Code:
Children = Component.GetChildren ChildCount = UBound(Children) + 1 ' das Safearray beginnt die Zählung bei Index 0, deswegen für die Anzahl einen draufrechnen
Manchmal ist VB halt viel einfacher als COM. Ciao, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberparleiter Mitglied Konstrukteur
Beiträge: 706 Registriert: 06.06.2000
|
erstellt am: 09. Jul. 2001 12:36 <-- editieren / zitieren --> Unities abgeben:
HI ÄÄhhhmm irgendwie stehe ich auf der Leitung. Sorry Der Befehl "ChildCount = UBound(Children) + 1" gibt mir doch nur die Anzahl der Komponenten in einer UBG zurück oder verstehe ich das Falsch?????? Ich brauche aber die Anzahl der Teile die in einer BG gleich sind z.B. Schrauben,Stifte,Teile die mehrfach vorhanden sind. Der Befehl "Component.Name" gibt mir z.B. den Text "SchraubeM8x20-<2>" raus wobei die 2 im Featurebaum von SWX fortlaufend ist, wenn ich aber eine Schraube aus meiner BG lösche und wieder eine gleiche Schraube einfüge überspringt mir die Nummerierung eine Ziffer. Ich kann also die Stückzahl aus dem Name auch nicht verwenden. Danke für eure Bemühungen. Tschue FOberparleiter
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: 09. Jul. 2001 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Oberparleiter
Hi, du hast recht, mit dem ChildCount bekommst du die Anzahl der Komponenten in der Baugruppe. Um die Anzahl der einzelnen Komponenteninstanzen herauszubekommen (also wie oft was verbaut ist) mußt du wohl oder übel eine kompletten Loop über die Baugruppe machen und dir z.B. anhand des Pfades ( Component.GetPathName ) selbst merken, welche Komponenten verbaut sind und dann auch selbst zählen, wieviele Instanzen einer bestimmten Komponente vorkommen. Sorry, ich kenn leider keinen einfacheren Weg. Ciao, Stefan ------------------ -- Inoffizielle Solidworks Hilfeseite http://solidworks.cad.de EMail: Stefan.Berlitz@solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Armin B Mitglied Software Engineer ERP/PLM/CAD
Beiträge: 208 Registriert: 04.09.2000 Sw 2015 SP3
|
erstellt am: 09. Jul. 2001 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Oberparleiter
Hallo, da könnten evtl. noch mehr Probleme auftauchen. Hast Du schon mal über Komponentenmuster nachgedacht: Bis Sw2000 war es absolut unmöglich, herauszubekommen, welche Komponenten wie oft in einem Muster verbaut waren (gleiches galt auch für Features). Sw2001 SP2+ bietet jetzt zwar eine Möglichkeit, aber die ist ein bißchen vertrakt und ich kann Dir leider noch keinen gangbaren Weg aufzeigen. Schau Dir mal die API-Hilfe zu: LocalLinearPatternFeatureData, LocalCircularPatternFeatureData und DerivedPatternFeatureData an. Gruß, Armin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Oberparleiter Mitglied Konstrukteur
Beiträge: 706 Registriert: 06.06.2000
|
erstellt am: 09. Jul. 2001 16:39 <-- editieren / zitieren --> Unities abgeben:
HI An den Loop durch die BG habe ich auch schon gedacht muss ich wohl oder übel. An das Komponentenmuster habe ich ehrlich gesagt noch garnicht gedacht. Muss noch ein bisschen darüber Hirnen. Danke für die regen Antworten. Tschue Oberp.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Konstrukteur (m/w/d) | Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Mitarbeitende:n für einen unserer Kunden. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und arbeiten mit an anspruchsvollen Lösungen für die Industrie.... | Anzeige ansehen | Konstruktion, Visualisierung |
|
Oberparleiter Mitglied Konstrukteur
Beiträge: 706 Registriert: 06.06.2000 Celsius R630, P4 Xeon 3,2 3GB Ram, 2x24" an FX3500 U320 SCSI, SWX 2011 SP4.0 WinXP SP3 Nicht weil es schwer ist, wagen wir es nicht, sondern weil wirs nicht wagen, ist es schwer.
|
erstellt am: 10. Jul. 2001 17:04 <-- editieren / zitieren --> Unities abgeben:
HI So also genug Gehirnt. Ich habe den Loop gemacht und es funkt auch mit Lokale Muster ohne Probleme. SWX gibt mir automatisch alle verbauten Teile raus auch diese in dem Muster. Folgend habe ich das Macro. Man koennte es schöner Programmieren aber ich bin kein Profi und wichtig ist es funkt. Sub Main() Dim swApp As Object Dim AssemblyDoc As Object Dim Configuration As Object Dim RootComponent As Object Dim i As Integer Dim s As Integer Dim f Dim Children As Variant Dim UChildren As Variant Dim Child As Object Dim ChildCount As Integer Dim UChildCount As Integer Dim Component As Object Dim UBg As String Dim Stückzahl Dim Komponente(100) As String Dim KompTyp(100) Dim vergleich As String Set swApp = CreateObject("SldWorks.Application") Set AssemblyDoc = swApp.ActiveDoc ' Actives Dokument Set Configuration = AssemblyDoc.GetActiveConfiguration() ' Pointer auf active Konfiguration Set RootComponent = Configuration.GetRootComponent() ' Pointer auf Baugruppe Debug.Print "BG-Name :" & AssemblyDoc.gettitle ' Baugruppenname Children = RootComponent.GetChildren ' List der Kinder holen ChildCount = UBound(Children) + 1 ' childcount = anzahl der Kinder (Komponenten und BG's) Debug.Print "Komponentenanzahl :" & ChildCount For i = 0 To (ChildCount - 1) Set Child = Children(i) ' Pointer auf Kind UChildren = Child.GetChildren ' Liste der UBG holen UChildCount = UBound(UChildren) + 1 ' Püfen ob BG oder Teil If UChildCount <> 0 Then UBg = "BG" Else UBg = "Teil" End If Komponente(i) = Mid(Child.Name, 1, Len(Child.Name) - 2) KompTyp(i) = UBg Next i ' Auf Stückzahl prüfen For f = 0 To i Stückzahl = 0 'Zähler Nullen If Komponente(f) = "" Then GoTo ende vergleich = Komponente(f) ' Komponente in Vergleich übernehmen For s = 0 To i ' Nach Teile suchen If vergleich = Komponente(s) Then ' Der Vergleich Stückzahl = Stückzahl + 1 'Zähler um gefundene Komponente erhöhen Komponente(s) = "" 'Gefundene Komponente löschen End If Next s Debug.Print "Name: " & vergleich & " Stückzahl: " & Stückzahl & " Typ: " & KompTyp(f) ende: Next f End Sub Jo danke an alle SWX User
Tschue Oberparleiter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |