|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus  der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | 
|  |  | 
|  | SolidWorks Spezialanwendungen , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein) 
 | 
| Autor | Thema:  Länge und Durchmesser auslesen mit VB (1272 mal gelesen) | 
 | MichaelHammer Mitglied
 
 
 
      Beiträge: 6Registriert: 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: 1151Registriert: 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: 6Registriert: 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: 50Registriert: 19.03.2005
 Dell M60Win2k SP4
 SWX2004 SP5.0
 |    erstellt am: 13. Apr. 2005 16:23  <-- editieren / zitieren -->    Unities abgeben:           Nur für MichaelHammer   | 
                        | MichaelHammer Mitglied
 
 
 
      Beiträge: 6Registriert: 13.04.2005
 |    erstellt am: 13. Apr. 2005 17:06  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | u.clemens Mitglied
 Konstrukteur
 
    
 
      Beiträge: 964Registriert: 04.07.2000
 engineer's lawo  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: 6Registriert: 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: 1151Registriert: 11.04.2001
 |    erstellt am: 14. Apr. 2005 08:09  <-- editieren / zitieren -->    Unities abgeben:           Nur für MichaelHammer   | 
                        | MichaelHammer Mitglied
 
 
 
      Beiträge: 6Registriert: 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 AnlegenDim 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 Initialisierenx = 0
 Set CurModelDoc = swApp.ActiveDoc()
 Set CurFeature = CurModelDoc.FirstFeature()
 'Anzahl der Elemente ermittelnWhile Not CurFeature Is Nothing
 Komponentenzaehler = Komponentenzaehler + 1
 Set CurFeature = CurFeature.GetNextFeature()
 Wend
 'Feldgroessen festlegenReDim Komponentenfeld(Komponentenzaehler + 1)
 ReDim Komponentenlaenge(Komponentenzaehler + 1)
 ReDim komponentendurchmesser(Komponentenzaehler + 1)
 Set CurFeature = CurModelDoc.FirstFeature() 'Auslesen der Komponenteneigenschaften in die KomponentenfelderWhile 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: 67Registriert: 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: 1151Registriert: 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" thenKomponentenlaenge(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: 661Registriert: 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: 6Registriert: 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 |