Forum:CATIA V5 Programmierung
Thema:Selektion in der Schleife läuft auf Fehler
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Erich

Beiträge: 164 / 0

I7-980X 12GB
Nvidia Quadro FX3800M
Windows 7 Ultimate 64Bit

Hallo
für folgendes Script bräuchte ich Unterstützung. Es soll
alle Bodies ohne Partbodies im Produkt finden und wenn diese
leer sind, löschen. D.h. diesen Code habe ich hier im Forum
gefunden und etwas erweitert. Nach dem löschen bekomme ich in
der Zeile "Set body1 = Selection1.Item(i).Value" einen Fehler.
Wer kann mir hierzu weiterhelfen. Danke im Vorraus.

Sub CATMain()
  Dim productDocument1
  Dim selection1
  Dim body1
  Dim part1
  Set productDocument1 = CATIA.ActiveDocument
  Set selection1 = productDocument1.Selection
  Selection1.Search "CATPrtSearch.BodyFeature,all" 'Alle Bodies im aktiven Dokument suchen
  For i = 1 To Selection1.Count


      Set body1 = Selection1.Item(i).Value


      Set part1 = body1
      Do While Not TypeName(part1) = "Part"
          Set part1 = part1.parent
      Loop
      If body1.Shapes.Count = 0 And body1.Sketches.Count = 0 And NOT _
      part1.MainBody.GetItem("ModelElement").InternalName = body1.GetItem("ModelElement").InternalName Then
          Selection1.Add body1
          Selection1.Delete
          Selection1.clear
      End If
  Next
End Sub

------------------
mfg
Erich

bgrittmann

Beiträge: 11034 / 18

CATIA V5R19

Servus Erich

Arbeite mal die Schleife von hinten nach vorne ab. Sonst kommt der Zähler etwas durcheinander (die höheren Nummern gibt es nicht mehr).

Code:
For i = Selection1.Count to 1 Step -1

Des weiteren: es gibt nur eine Selektion. Wenn du im ersten Schleifendruchlauf mit Delete alle Elemente löschst oder per Clear alles deselkierts ist ja nichts mehr selektiert du die Schleife läuft in einen Fehler.
Vorschlag: Schleife über die Selektion (von hinten nach vorne laufen lassen), wenn der Körper die Bedingung NICHT erfüllt (Hauptkörper, Elemente im Körper, ...) diesen aus der Selektion entfernen (Remove).
Nach der Schleife über Delete alle noch selektierten Elemente löschen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Erich

Beiträge: 164 / 0

I7-980X 12GB
Nvidia Quadro FX3800M
Windows 7 Ultimate 64Bit

Hallo Bernd
vielen Dank für die Hinweise.
Bin wohl das Thema zu schnell angegangen.
Jetzt verstanden und Script läuft.

------------------
mfg
Erich