|  |  | 
|  | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 | 
|  |  | 
|  | KISTERS 3DViewStation - Der Schlüssel zur Einsparung von CAD-Lizenzen, eine Pressemitteilung 
 | 
| Autor | Thema:  Fill-Fläche und -Umfang messen (5396 mal gelesen) | 
 | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 12. Mai. 2012 22:14  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo zusammen, ich brauch mal wieder euren Hilfe... Ich will die Fläche eines selbsterzeugten Fills und den Umfang messen. Die Fills sind eben, können aber einen beliebigen Umfang annehmen. Es wird Area bzw. Get Area nicht erkannt. Kann es sein, das ein Fill kein "surface" oder "wet area" darstellt? Oder das die GetMeasurable-Funktion nicht auf einem Fill funktioniert...?    ...der Quellcode sieht so aus...         Dim ref_Fill As ReferenceSet ref_Fill = part1.CreateReferenceFromObject(hybridShapeFill1)
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
 Set theMeasurable = TheSPAWorkbench.GetMeasurable(ref_Fill)
 MsgBox theMeasurable.GetArea 'erzeugt Fehler
   MsgBox theMeasurable.Area    'erzeugt Fehler
   Dim Flaeche, Umfang As Double
 Flaeche = theMeasurable. ... 'Flaeche
 Umfang = theMeasurable. ... ' ?Perimeter? 'Umfang
 Kann mir bitte jemand unter die Arme greifen... Danke. Gruß Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | moppesle Ehrenmitglied V.I.P. h.c.
 Konstrukteur
 
       
 
      Beiträge: 3437Registriert: 28.05.2009
 CATIA V5 R19 SP9WIN 7 64bit
 |    erstellt am: 12. Mai. 2012 22:55  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   | 
                        | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 12. Mai. 2012 22:59  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | moppesle Ehrenmitglied V.I.P. h.c.
 Konstrukteur
 
       
 
      Beiträge: 3437Registriert: 28.05.2009
 CATIA V5 R19 SP9WIN 7 64bit
 |    erstellt am: 12. Mai. 2012 23:03  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Hallo Lars, leider hab ich was Programmierung betrifft nicht so viel Ahnung. Hatte mal ein Anwendungsfall mit einer Regel um den Umfang zu messen. Dachte es wäre ein Denkanstoß für dich. ------------------Gruß Uwe
 Auch Catia ist nur ein Mensch!     Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | moppesle Ehrenmitglied V.I.P. h.c.
 Konstrukteur
 
       
 
      Beiträge: 3437Registriert: 28.05.2009
 CATIA V5 R19 SP9WIN 7 64bit
 |    erstellt am: 12. Mai. 2012 23:06  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Hallo Lars, hilft das vieleicht? o Property Perimeter( ) As double (Read Only)  Returns the perimeter of a surface. Example:
 This example retrieves the perimeter of NewMeasurable measure.
 Dim APerimeter As double
 APerimeter = NewMeasurable.Perimeter
 ------------------Gruß Uwe
 Auch Catia ist nur ein Mensch!     Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 12. Mai. 2012 23:19  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 13. Mai. 2012 12:26  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Servus Also bei mir funktioniert es mit diesem Code: Code:Dim TheSPAWorkbench As SPAWorkbench
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
 Dim theMeasurable As Measurable
 Set theMeasurable = TheSPAWorkbench.GetMeasurable(ref_fill)
 Dim Umfang As Double
 Umfang = theMeasurable.Perimeter
 MsgBox CStr(Umfang)
 
 Welcher Fehlermeldung kommt bei dir? Liegt es vielleicht nur an der Typkonvertierung bzw an eine falschen Deklaration?
 GrußBernd
 PS: Bitte Systeminfo ausfüllen. ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 13. Mai. 2012 19:09  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Bernd, ich habe jetzt Deinen Code in mein Makro kopiert und trotzdem erhalte ich folgende Fehlermeldung     : Run-time errror '-2147467259 (80004005)Methode 'Perimeter' of object 'Measurable' failed
 Hilft das? Gruß Lars P.S.Wo kann ich die Systeminfo eingeben?
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | moppesle Ehrenmitglied V.I.P. h.c.
 Konstrukteur
 
       
 
      Beiträge: 3437Registriert: 28.05.2009
 CATIA V5 R19 SP9WIN 7 64bit
 |    erstellt am: 13. Mai. 2012 19:16  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   | 
                        | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 13. Mai. 2012 19:35  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 13. Mai. 2012 21:03  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Servus Um was für eine Geometrie des "Fill" handelt es sich?  Geht die Messung mit einer anderen Geometrie? Geht die Messung manuell? Ist die Geometrie zu diesem Zeitpunkt aktualisiert? Was zeigt dir das Watch-Fenster (VBA-Editor) zum Objekt "theMeasurable" und "ref_fill" an? GrußBernd
 PS: ggf mal Screenshot von der Geometrie/Strukturbaum posten ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | lbecker Mitglied
 Dipl.-Ing.
 
 
      Beiträge: 8Registriert: 28.04.2012
 CATIA V5 R19/R20unterschiedliche Hardware
 |    erstellt am: 13. Mai. 2012 21:55  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | MichaX Mitglied
 Bachelorand
 
  
 
      Beiträge: 20Registriert: 13.03.2017
 Windows 7 ProfessionalCatia V5 R19
 |    erstellt am: 07. Apr. 2017 08:31  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Hallo Zusammen,  ich muss diesen Thread nochmal hochziehen... Ich würde gerne die Flächen von einer variablen Anzahl von Fills messen und diese dann in ein Array schreiben.Zuerst selektiere ich mir alle Fills und gehe dann in eine Schleife um die Fläche zu messen und die Werte in ein Array zu schieben.
 Später im Programm möchte ich dann die Werte im Array ordnen und in eine Excel-Datei exportieren. Aber das ist noch eine andere Sache   Hier mal mein aktueller Code: Code:
 Sub CATMain()
 Dim documents1 As DocumentsSet documents1 = CATIA.Documents
 Dim partDocument1 As PartDocumentSet partDocument1 = documents1.Item("Kabelkanal.CATPart")
 Dim part1 As PartSet part1 = partDocument1.Part
 Dim hybridShapeFactory1 As HybridShapeFactorySet hybridShapeFactory1 = part1.HybridShapeFactory
 Dim hybridBodies1 As HybridBodiesSet hybridBodies1 = part1.HybridBodies
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") 'Selection starten und nach allen Fills suchen------------------------------------------------------------Dim selection01 As Selection
 Set selection01 = CATIA.ActiveDocument.Selection
 selection01.Search ".Fill.name=Fill*;all"
 E = selection01.Count
 'E zur Info und als Max-Wert für die Schleife------------------------------------------------------------- For i = E To 1 Step -1   Set Wert = selection01.Item(i).ValueSet Referenz = part1.CreateReferenceFromObject(Wert)
 Set Measurable01 = TheSPAWorkbench.GetMeasurable(Referenz)
 
 ReDim flaecheArray(i)
 
 Measurable01.GetWetArea flaecheArray
 
 
 
 Next End Sub
 
 Ich bekomme jedes mal in dieser Zeile den Fehler: Object doesn't Support this property or method Code:
 Measurable01.GetWetArea flaecheArray
 
 
 Egal ob ich GetWetArea oder GetArea schreibe... Ich denke da ist irgendwo ein Leichtsinnsfehler drin aber ich versuche mich jetzt schon 2 Tage daran und verzweifle so langsam... Habt ihr einen Tipp für mich ? Viele GrüßeMicha
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 07. Apr. 2017 08:55  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Servus Du weißt das Ergebnis der Messung dem gesamten Array zu. Müsstest du nicht diese nur einem Element zuweisen? Code:Measurable01.GetWetArea flaecheArray(i)
 
 Stimmt der Typ des Arrays? Warum redimensionierst du den Array bei jedem Schleifendruchlauf? Du kannst doch die richtige Größe vor der Schleife bestimmen und festlegen. Gibt es in der SPA-Workbench die Methode GetWetArea? (ich hab nur Area gefunden) Hinweis: Bei Arrays startet der Index bei 0, bei der Selection bei 1 (allgemeiner Hinweis, ggf bei dir kein Problem) GrußBernd
 ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | MichaX Mitglied
 Bachelorand
 
  
 
      Beiträge: 20Registriert: 13.03.2017
 Windows 7 ProfessionalCatia V5 R19
 |    erstellt am: 07. Apr. 2017 09:09  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Danke für die Antwort Bernd, da hast du Recht, habe jetzt das Array vor der Schleife dimensioniert.In den Locals sehe ich das das Array den Typ Variant hat.
 Ich denke der Wert der Fläche müsste aber Double sein.
 Hier mal der abgeänderte Code:  Code:
 Sub CATMain()
 Dim documents1 As DocumentsSet documents1 = CATIA.Documents
 Dim partDocument1 As PartDocumentSet partDocument1 = documents1.Item("Kabelkanal.CATPart")
 Dim part1 As PartSet part1 = partDocument1.Part
 Dim hybridShapeFactory1 As HybridShapeFactorySet hybridShapeFactory1 = part1.HybridShapeFactory
 Dim hybridBodies1 As HybridBodiesSet hybridBodies1 = part1.HybridBodies
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") 'Selection starten und nach allen Fills suchen------------------------------------------------------------Dim selection01 As Selection
 Set selection01 = CATIA.ActiveDocument.Selection
 selection01.Search ".Fill.name=Fill*;all"
 E = selection01.Count
 ReDim flaecheArray(E)
 'E zur Info und als Max-Wert für die Schleife-------------------------------------------------------------
 For i = E To 1 Step -1   Set Wert = selection01.Item(i).ValueSet Referenz = part1.CreateReferenceFromObject(Wert)
 Set Measurable01 = TheSPAWorkbench.GetMeasurable(Referenz)
 
 Measurable01.GetArea flaecheArray(i)
 
 
 
 Next End Sub
 
 Ich sehe auch schon in den Locals bei Measureable01 das der Wert der Fläche dort schon drin steht,ich bekomme ihn wohl nur nicht ins Array geschoben.
 Gruß Micha
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 07. Apr. 2017 09:18  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Servus Schau mal in die Doku wie die Methode richtig heißt. Dort findest du auch ein Beispiel wie man den Wert einer Variabel übergibt: Code:flaecheArray(i) = Measurable01.Area
 
 Hinweise zum Code: Packe besser alle Dimensionierung nach vorne im Code, schalt mal "Option Explicit" ein so dass du alle Variablen dimensionieren musst. GrußBernd
 ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | MichaX Mitglied
 Bachelorand
 
  
 
      Beiträge: 20Registriert: 13.03.2017
 Windows 7 ProfessionalCatia V5 R19
 |    erstellt am: 07. Apr. 2017 09:42  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  ahh da war der Fehler ! Vielen Dank, jetzt werde ich mal schauen ob ich das Array mit einer Spalte für den Namen des jeweiligen Fills erweitern kann! Wie immer ein wahnsinnig toller Support hier im Forum   Grüße Micha
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | MichaX Mitglied
 Bachelorand
 
  
 
      Beiträge: 20Registriert: 13.03.2017
 Windows 7 ProfessionalCatia V5 R19
 |    erstellt am: 07. Apr. 2017 10:34  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Jetzt muss ich euch nochmal nerven. Ein Array mit 2 Spalten anlegen funktioniert super,Jedoch möchte ich in die 2. Spalte den Namen des Fills schreiben und diese dann nach den Werten sortieren.
 Leider komme ich nur an CATIA.SelectedElement mit einer Zahl als Index. Code:
 'Selection starten und nach allen Fills suchen------------------------------------------------------------
 Dim selection01 As Selection
 Set selection01 = CATIA.ActiveDocument.Selection
 selection01.Search ".Fill.name=Fill*;all"
 E = selection01.Count2
 F = selection01.Count2
   ReDim flaecheArray(1 To E, 1 To 2)
 'E zur Info und als Max-Wert für die Schleife-------------------------------------------------------------
 For i = E To 1 Step -1   Set Wert = selection01.Item(i).ValueSet Referenz = part1.CreateReferenceFromObject(Wert)
 Set Measurable01 = TheSPAWorkbench.GetMeasurable(Referenz)
 flaecheArray(i, 1) = Measurable01.Area Nextpart1.Update
 Dim selection02 As SelectionSet selection02 = CATIA.ActiveDocument.Selection
 selection02.Search ".Fill.name=Fill*;all"
 F = selection02.Count2
 For j = F To 1 Step -1       flaecheArray(j, 2) = selection02.Item(j).Name Next
 
 
 Ich denke mit  Code:flaecheArray(j, 2) = selection02.Item(j).Name
 
 Komme ich nicht an den richtigen Namen da er durch die Selection wohl nur auf das SelectedElement zugreifen kann.Gibt es da einen Umweg?
 Grüße Micha
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 07. Apr. 2017 10:38  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   
  Servus Warum zweimal die gleiche Suche bzw Schleife? Mach doch gleich: Code:flaecheArray(i, 1) = Measurable01.Area
 flaecheArray(i, 2) = Wert.Name
 
 Gruß Bernd ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                       
 | MichaX Mitglied
 Bachelorand
 
  
 
      Beiträge: 20Registriert: 13.03.2017
 Windows 7 ProfessionalCatia V5 R19
 |    erstellt am: 07. Apr. 2017 10:48  <-- editieren / zitieren -->    Unities abgeben:           Nur für lbecker   |