| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | KISTERS 3DViewStation: Schnelligkeit und Präzision in dem neuen JT-Importer, eine Pressemitteilung
|
Autor
|
Thema: search Schleife in Schleife (1846 mal gelesen)
|
Martin K Mitglied Konstrukteur, CAD Administrator
 
 Beiträge: 141 Registriert: 24.01.2002
|
erstellt am: 11. Feb. 2013 11:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ich habe eine Struktur: GeoSet - darin mehrere GeoSets - darin mehrere Punkte Ich möchte nun das erste Geoset selektieren Danach einzel durch alle darunter liegenden GeoSets nach punkten suchen Ausgabe Name GeoSet - Name Punkt GeoSet selektieren und UnterSetsNamen ausgeben funktioniert. Jetzt müßte ich immer vor der Punkte Suche ein UnterGeoSet aktiv setzten?? Die Zeile "'UnterGeoSet auswählen" funktioniert aber nicht. Den Code habe ich auf das Minimum reduziert. (Außer den Test Abfragen) Wie bekomme ich die SuchSchleife in der SuchSchleife hin? Code: Language="VBSCRIPT" Sub CATMain() MsgBox "Wählen Sie ein Geomtrisches Set aus, in der sich die Punkte befinden", 64, makroname + " " + version Set selGeoSet = CATIA.ActiveDocument.Selection Dim InputObjectType(0) InputObjectType(0) = "HybridBody" Status = selGeoSet.SelectElement2(InputObjectType, "Wählen Sie das Geometrische Set aus", False) If (Status = "Cancel") Then MsgBox "Makro wurde abgebrochen", 16 Exit Sub End If MsgBox selGeoSet.Item(1).Value.Name 'Test Name selektiertes Geoset selGeoSet.Search "CATPrtSearch.OpenBodyFeature,sel" Anzahl = selGeoSet.Count '1. Set ist selektiertes Set MsgBox Anzahl 'Test Anzahl gefundene GeoSets incl. Selekt For i = 2 To Anzahl 'GeoSet Schleife ab zweitem GeoSet MsgBox selGeoSet.Item(i).Value.Name 'Test GeoSetName Set selPoint = selGeoSet.Item(i).Value.Selection 'UnterGeoSet auswählen selPoint.Search "CATPrtSearch.Point,sel" MsgBox selPoint.Count 'Test wieviele Punkte im GoeSet For j = 1 To selPoint.Count 'Point Schleife MsgBox selPoint.Item(j).Value.Name Next selPoint.Clear Next End Sub Danke Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 11. Feb. 2013 14:41 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin K
Hallo Martin, das kann nicht funktionieren, da Du in der Schleife die Selection veränderst, dann aber wieder auf Subelemente der Schleife zugreifst. Du hast nun zwei Optionen: * Inhalt der ersten Schleife zwischenspeichern * Einen anderen Weg versuchen Ein anderer Weg Ich möchte Dir meinen alternativen Weg zunächst vorstellen, da ich ihn für performanter halte. Wenn Du das selektierte GeoSet hast, dann frag es nach den .Hybridbodies, wodurch Du eine Collection aller SubBodies bekommst, die Du dann durchlaufen kannst. Von denen würde ich mir dann die HybridShapes geben lassen und verarbeiten. Wesendlich besser programmeirt und ohne Selection. Alternativ könntest Du auch jedes SubGeoset selektieren, aber das gefällt mir nicht. Inhalt zwischenspeichern Erstell Dir ein Array vom Typ Object und der Größe von .Count2() Deiner Selection. In dieses Array schreibst Du über eine Schleife alle .Item2(lItem).Value() Deiner Selection. In der weiteren Verarbeitung Clear()'st Du dann immer die Selection und fügst das zu verarbeitende Element Deines Arrays arrObjOfSelection(lItem) hinzu und machst Deine bisherige Suche darüber. Viel Erfolg bei der Umsetzung. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila
Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing [Diese Nachricht wurde von HoBLila am 11. Feb. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin K Mitglied Konstrukteur, CAD Administrator
 
 Beiträge: 141 Registriert: 24.01.2002
|
erstellt am: 11. Feb. 2013 15:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo Lila Habs mir fast schon Gedacht dass das so nicht geht! ;-) Deine Idee "Ein anderer Weg" gefällt mir Mit ..."selGeoSet.SelectElement2(InputObjectType, "Wählen Sie das Geometrische Set aus", False)" habe ich das GeoSet selektiert selGeoSet - wie komme ich dann zu den SubGeoSets? ..."Wenn Du das selektierte GeoSet hast, dann frag es nach den .Hybridbodies,..." Wie frage ich nach den Hybridbodies" Danke Gruß Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 11. Feb. 2013 17:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin K
Hallo Martin, rein aus dem Bauch raus: Code:
Dim selGeoSet As ... dim hybBodyWork As ... HybridBody... selGeoSet.SelectElement2(InputObjectType, "Wählen Sie das Geometrische Set aus", False) ... set hybBodyWork = selGeoSet.Item2(1).Value Call MsgBox ("Anzahl enthaltener Bodies: " & hybBodyWork.HybridBodies.Count )
------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin K Mitglied Konstrukteur, CAD Administrator
 
 Beiträge: 141 Registriert: 24.01.2002
|
erstellt am: 11. Feb. 2013 18:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Lila Erstmal vielen Dank Ich glaube mit der Schleife habe ich mich mit meinem bescheidenen Wissen etwas übernommen!! Jetzt habe ich gedacht ich könnte die Punkte Abfrage alleine ....... set hybPointWork = hybBodyWork.HybridBodies.Item2(1).Value Call MsgBox ("Anzahl enthaltener Punkte: " & hybPointWork.HybridShapes.Count ) funktioniert aber leider nicht. :-( Meine letze Bitte an Dich, wie kann ich auch noch die Punkte unter den Geometrischen Sets finden? (HybridShape oder geht auch direkt HybridShapePoint) Danke & Gruß Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Feb. 2013 19:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin K
Servus Was funktioniert in deinem Code nicht? Entweder du lässt die (Selektion)Suche auf dein GeoSet "hybPointWork" los, oder du geht mit einer Schleife durch die Elemente des GeoSets. zB (ungetestet): Code: set hybPointWork = hybBodyWork.HybridBodies.Item(1).Value Counter = 0 for i = 1 to hybPointWork.HybridShapes.Count if TypeName(hybPointWork.HybridShapes.Item(i)) = "HybridShapePoint" then Counter = Counter + 1 next Call MsgBox ("Anzahl enthaltener Punkte: " & CStr(Counter )
Gruß BerndEDIT: Kann sein, dass bei Hybridbodies "Item2" nicht funktioniert sondern nur "Item" (steht zumindest nicht in der Doku. ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 11. Feb. 2013 editiert.] [Diese Nachricht wurde von bgrittmann am 11. Feb. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin K Mitglied Konstrukteur, CAD Administrator
 
 Beiträge: 141 Registriert: 24.01.2002
|
erstellt am: 12. Feb. 2013 08:46 <-- editieren / zitieren --> Unities abgeben:         
|
Martin K Mitglied Konstrukteur, CAD Administrator
 
 Beiträge: 141 Registriert: 24.01.2002 Windows 10 CATIA V5-6R2032 SP03
|
erstellt am: 12. Feb. 2013 09:52 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd Jetzt funktioniert's! Code: -------------------------------------------------------------------------------------- set hybPointWork = hybBodyWork.HybridBodies.Item(1) Counter = 0 for i = 1 to hybPointWork.HybridShapes.Count If TypeName(hybPointWork.HybridShapes.Item(i)) = "HybridShapePointExplicit"_ Or TypeName(hybPointWork.HybridShapes.Item(i)) = "HybridShapePointCoord" then MsgBox hybPointWork.HybridShapes.Item(i).Name Counter = Counter + 1 End If next Call MsgBox ("Anzahl enthaltener Punkte: " & CStr(Counter )) -------------------------------------------------------------------------------------- Ohne .Value Und "HybridShapePoint" geht nicht. Ich muss alle Punkt Typen abfragen. Oder hat jemand eine bessere Idee? Danke Gruß Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |