| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen |
Autor
|
Thema: Länge und Durchmesser auslesen mit VB (981 mal gelesen)
|
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 13. Apr. 2005 12:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich möchte für ein Add-In die Länge und den Durchmesser aller Schrauben in meiner Baugruppe auslesen. Ich finde alle Schrauben über ihr Kennwort "Screw" mittels Feature.name, habe jedoch keine Ahnung wie ich an die Geometriedaten herankomme. Kann mir jemand weiterhelfen? Danke Michael Hammer
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: 13. Apr. 2005 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
Hallo Michael. Erst mal: Willkommen im SWX-Forum! Wenn z.B. in allen Skizzen der Schraubenmodelle das Mass für den Durchmesser resp. Länge gleich heissen, könntest Du das richtige Mass raussuchen und dann den Wert auslesen. ------------------ Gruss Andreas A+E Müller AG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 13. Apr. 2005 15:34 <-- editieren / zitieren --> Unities abgeben:
Hm Leider habe ich das Problem, dass die Schrauben zwar meistens schon unterschiedlich heissen (und somit andere Geometriedaten haben) aber es gibt auch fast gleiche Schrauben, die sich nur in der Länge unterscheiden aber genau gleich heissen, deswegen benötige ich unbedingt die Geometriedaten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArsDesignare Mitglied
Beiträge: 50 Registriert: 19.03.2005 Dell M60 Win2k SP4 SWX2004 SP5.0
|
erstellt am: 13. Apr. 2005 16:23 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
|
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 13. Apr. 2005 17:06 <-- editieren / zitieren --> Unities abgeben:
|
u.clemens Mitglied Konstrukteur
Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 13. Apr. 2005 18:10 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
also ich würde das Problem mit Dateieigenschaften zu lösen versuchen ... einerseits könnte man allen Schrauben die Eigenschaft "Hallo, ich bin eine Schraube" mitgeben und die kann man dann per API auswerten, anderseits (und aus meiner Sicht noch besser) - Du linkst die betreffenden Werte, die Du brauchst, in Dateieigenschaften und wertest diese dann aus. P.S. haben denn Deine Schrauben überhaupt Bemaßungen? Also wir verwenden die VarBox und das sind alles Import-Feature - die somit keine Maße haben ... ------------------ mfg uc [Diese Nachricht wurde von u.clemens am 13. Apr. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 13. Apr. 2005 18:16 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 14. Apr. 2005 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
|
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 14. Apr. 2005 12:59 <-- editieren / zitieren --> Unities abgeben:
Ok, meiner Ansicht nach läuft das irgendwie in die falsche Richtung, deshalb möchte ich mal meinen Quellcode hier reinstellen: 'Variablen, Objekte Anlegen Dim CurModelDoc As SldWorks.ModelDoc2 Dim CurFeature As SldWorks.feature Dim x As Integer Dim Komponentenzaehler As Integer Dim Komponentenfeld() As String Dim Komponentenlaenge() As Double Dim komponentendurchmesser() As Double 'Variablen, Objekte Initialisieren x = 0 Set CurModelDoc = swApp.ActiveDoc() Set CurFeature = CurModelDoc.FirstFeature() 'Anzahl der Elemente ermitteln While Not CurFeature Is Nothing Komponentenzaehler = Komponentenzaehler + 1 Set CurFeature = CurFeature.GetNextFeature() Wend 'Feldgroessen festlegen ReDim Komponentenfeld(Komponentenzaehler + 1) ReDim Komponentenlaenge(Komponentenzaehler + 1) ReDim komponentendurchmesser(Komponentenzaehler + 1) Set CurFeature = CurModelDoc.FirstFeature() 'Auslesen der Komponenteneigenschaften in die Komponentenfelder While Not CurFeature Is Nothing Komponentenfeld(x) = CurFeature.Name 'Komponentenlaenge(x) = ??? 'Komponentendurchmesser(x) = ??? x = x + 1 Set CurFeature = CurFeature.GetNextFeature() Wend Das ist im Prinzip der Teil, wo ich nicht weiterkomme, denn alles weitere (Stringverarbeitung, Rechnungen etc.) ist mit Visual Basic sehr leicht realisierbar! Vielen Dank für die bisherigen Tipps Michael Hammer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PASCAM Mitglied Diplom Informatiker
Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 14. Apr. 2005 13:37 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
Hallo Michael, Du hast doch schon fast alles: Das CutFeature ist ein Feature, daher bekommst Du mit GetFirstDiplayDimension das erste Maß, die weteren mit GetNect5 von DisplayDimension. Das eigentliche Maß bekommst Du vom DisplayDimension mittels GetDimension. Jetzt kann es sein, dass der Durchmesser in der Skizze ist. Dann musst Du Dir vom Feature einfach die Skizze geben lassen (Child oder Parent) und das gleiche machen (auch eine Skizze ist ein Feature). Damit muesstest Du Dein Problem loesen koennen. Gruss, Ralph ------------------ PASCAM Ralph Müller Softwareentwicklung 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: 14. Apr. 2005 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
Hallo Michael. Zitat: Original erstellt von MichaelHammer: Ok, meiner Ansicht nach läuft das irgendwie in die falsche Richtung...
Hmmm...kann sein, dass wir komplett verschiedene Sprachen sprechen, aber meineserachtens läuft das schon in die richtige Richtung. Nur befürchte ich ,dass Du (oder ich) das nicht richtig verstehst. Ich denke es gibt für Dich 2 Möglichkeiten: 1. Du schreibst in eine Dateieigenschaft "Inbusschraube DIN 912 M10x25". Dann kannst Du in Deinem Programm diese Eigenschaft auslesen und die gewünschten Werte ("M10 und "25") extrahieren. Wenn Du keine solche Eigenschaft hast, dannst Du sie logischerweise auch nicht auslesen, d.h. du könntest 2. Das Mass in Deinem Modell das die Länge resp. Durchmesser definiert, bekommt einen spezifischen Namen (z.B. "Länge"). Dann kannst Du die Features durchackern bis Du dieses Mass gefunden hast und dann den Wert auslesen. If MassName = "Länge" then Komponentenlaenge(x) = Wert_von_Mass End If If MassName = "Durchmesser" then Komponentendurchmesser(x) = Wert_von_Mass End If 3. Vielleicht gibt es noch einen anderen Weg... Du musst aber bei allen Möglichkeiten eine Standardiesierung über alle Komponenten (Schrauben) vorgeben, damit Dein Programm sagen kann: "Wenn ich das gefunden habe, kann ich den Wert auslesen". Sonst hast Du keine Chance, ich wüsste jedenfalls nicht wie
------------------ Gruss Andreas A+E Müller AG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Piet Mitglied Konstruktionsleiter & Konstrukteur
Beiträge: 661 Registriert: 20.11.2001 SWx 2021
|
erstellt am: 14. Apr. 2005 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für MichaelHammer
Vielleicht versteh ich dein Problem ja auch falsch, aber die Anzahl und Größe von Schrauben braucht man doch für jede Stückliste. Ich mach es daher im Prinzip wie Andreas: Die Schrauben sind als Konfigurationsteile angelegt. In der Tabelle erzeuge ich mir mit der Excel-Funktion "verketten" eine Spalte mit dem Titel "Beschreibung", die aus den Tabellenmaßen automatisch z.B. den Wert "M6x30" erzeugt. Dazu gebe ich der Schraube die benutzerdefinierte Eigenschaft "Benennung", z.B. mit dem Wert "Schraube DIN912". Die Eigenschaften "Benennung" und "Beschreibung" frage ich in meiner Stückliste ab, und hab damit meine gewünschte Übersicht. Piet Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichaelHammer Mitglied
Beiträge: 6 Registriert: 13.04.2005
|
erstellt am: 20. Apr. 2005 09:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Um Die Eigenschaften Länge und Durchmesser zuzuweisen kann doch nur während der Konstruktion geschehen, und das ist nicht vorgesehen, sondern nur eine nachträgliche analyse. Und wie in dem bild gezeigt, haben zwei Schrauben den gleichen Namen, aber unterschiedliche Länge, was aber über den Namen nicht bestimmt werden kann. Es kann durchaus sein, dass ich ihre Herangehensweise nicht verstehe, aber den Programmiertipp fand ich irgendwie besser (auch wenn er nicht so richtig funktioniert hat) aber hier mal der erweiterte code, meine frage dazu währe, wie sketch verwendet werden müsste. Vielen Dank für die bisherigen Vorschläge, Anregungen Set CurFeature = CurModelDoc.FirstFeature() While Not CurFeature Is Nothing 'MsgBox "jetzt bin ich im feature" + CurFeature.Name 'Funktion prüft of das Teil eine Schraube ist... If treffer(CurFeature.Name) = True Then 'Set CurSubFeature = CurFeature.GetFirstSubFeature 'While Not CurSubFeature Is Nothing MsgBox "jetzt bin ich im subfeature" + CurSubFeature.Name Set CurDispDimension = CurFeature.GetFirstDisplayDimension While Not CurDispDimension Is Nothing MsgBox "jetzt bin ich in der dimension!" Set CurAnnotation = CurDispDimension.GetAnnotation Set CurDimension = CurDispDimension.GetDimension MsgBox CurDimension.Value MsgBox CurDimension.FullName MsgBox CurAnnotation.Width MsgBox CurDimension.GetSystemValue2("") Set CurDispDimension = CurFeature.GetNextDisplayDimension(CurDispDimension) Wend End If Set CurFeature = CurFeature.GetNextFeature() Wend tut aber noch nicht so ganz! MfG Michael Hammer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |