Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  search Schleife in Schleife

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Martin K an!   Senden Sie eine Private Message an Martin K  Schreiben Sie einen Gästebucheintrag für Martin K

Beiträge: 141
Registriert: 24.01.2002

erstellt am: 11. Feb. 2013 11:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin K 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Martin K an!   Senden Sie eine Private Message an Martin K  Schreiben Sie einen Gästebucheintrag für Martin K

Beiträge: 141
Registriert: 24.01.2002

erstellt am: 11. Feb. 2013 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin K 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Martin K an!   Senden Sie eine Private Message an Martin K  Schreiben Sie einen Gästebucheintrag für Martin K

Beiträge: 141
Registriert: 24.01.2002

erstellt am: 11. Feb. 2013 18:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 12054
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Feb. 2013 19:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Martin K 10 Unities + Antwort hilfreich

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ß
Bernd

EDIT: 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


Sehen Sie sich das Profil von Martin K an!   Senden Sie eine Private Message an Martin K  Schreiben Sie einen Gästebucheintrag für Martin K

Beiträge: 141
Registriert: 24.01.2002

erstellt am: 12. Feb. 2013 08:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd

Ich hatte schon "Item" und Item2" ausprobiert.

Fehlermeldung:
Das Objekt unterstützt diese eigenschaft oder Methode nicht:'hybBodyWork.HybridBodies.Item(1).Value'

Gruß Martin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Martin K
Mitglied
Konstrukteur, CAD Administrator


Sehen Sie sich das Profil von Martin K an!   Senden Sie eine Private Message an Martin K  Schreiben Sie einen Gästebucheintrag für Martin K

Beiträge: 141
Registriert: 24.01.2002

Windows 10
CATIA V5-6R2032 SP03

erstellt am: 12. Feb. 2013 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz