Autor
|
Thema: Fill-Fläche und -Umfang messen (4783 mal gelesen)
|
lbecker Mitglied Dipl.-Ing.
Beiträge: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche 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 Reference Set 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: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 12. Mai. 2012 22:55 <-- editieren / zitieren --> Unities abgeben: Nur für lbecker
|
lbecker Mitglied Dipl.-Ing.
Beiträge: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche Hardware
|
erstellt am: 12. Mai. 2012 22:59 <-- editieren / zitieren --> Unities abgeben:
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 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: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 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: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche Hardware
|
erstellt am: 12. Mai. 2012 23:19 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 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: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche 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: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 13. Mai. 2012 19:16 <-- editieren / zitieren --> Unities abgeben: Nur für lbecker
|
lbecker Mitglied Dipl.-Ing.
Beiträge: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche Hardware
|
erstellt am: 13. Mai. 2012 19:35 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 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: 8 Registriert: 28.04.2012 CATIA V5 R19/R20 unterschiedliche Hardware
|
erstellt am: 13. Mai. 2012 21:55 <-- editieren / zitieren --> Unities abgeben:
|
MichaX Mitglied Bachelorand
Beiträge: 20 Registriert: 13.03.2017 Windows 7 Professional Catia 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 Documents Set documents1 = CATIA.Documents Dim partDocument1 As PartDocument Set partDocument1 = documents1.Item("Kabelkanal.CATPart") Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridBodies1 As HybridBodies Set 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).Value Set 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üße Micha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 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: 20 Registriert: 13.03.2017 Windows 7 Professional Catia 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 Documents Set documents1 = CATIA.Documents Dim partDocument1 As PartDocument Set partDocument1 = documents1.Item("Kabelkanal.CATPart") Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridBodies1 As HybridBodies Set 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).Value Set 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: 11780 Registriert: 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: 20 Registriert: 13.03.2017 Windows 7 Professional Catia 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: 20 Registriert: 13.03.2017 Windows 7 Professional Catia 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).Value Set Referenz = part1.CreateReferenceFromObject(Wert) Set Measurable01 = TheSPAWorkbench.GetMeasurable(Referenz) flaecheArray(i, 1) = Measurable01.Area Next part1.Update Dim selection02 As Selection Set 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: 11780 Registriert: 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: 20 Registriert: 13.03.2017 Windows 7 Professional Catia V5 R19
|
erstellt am: 07. Apr. 2017 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für lbecker
|