Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Schleife für begrenzete Körperanzahl

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
Autor Thema:  Schleife für begrenzete Körperanzahl (601 mal gelesen)
Estafanos
Mitglied



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

Beiträge: 27
Registriert: 17.07.2012

Catia V5 R22, Windows 7

erstellt am: 15. Aug. 2016 08:14    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 Zusammen,
ich möchte gerne nur 500-Bodies von dem Mainbody mit der Booleschen Operation „Remove“ abziehen. Bei dem nächsten Ausführen des Makros sollen die nächsten 500 Bodies (wenn die Anzahl der Bodies, die nicht mit der booleschen Operation "Remove" in MainBody sind, kleiner ist als 500, dann nur bis zu dieser Anzahl an Bodies) auch von dem Mainbody abgezogen werden. Das Problem liegt darin, dass mein Arbeitsspeicher voll wird und CATIA sehr langsam wird. Ich muss CATIA schließen und neu starten. Viele Grüße Estafanos

Sub RemoveBodies()

Dim oPartDoc            As document
Dim oHybridBodies      As HybridBodies
Dim oPart              As Part
Dim hybridShapeFactory1 As Factory
Dim oHybridBody        As HybridBody
Dim j                  As Integer
Dim oBodies            As Bodies
Dim oBody              As Body

        Set oPartDoc = CATIA.ActiveDocument
        Set oPart = oPartDoc.Part
        Set hybridShapeFactory1 = oPart.HybridShapeFactory
        Set oHybridBodies = oPart.HybridBodies
        Set oBodies = oPart.Bodies
        Set oShapeFactory = oPart.ShapeFactory
        oPart.InWorkObject = oPart.MainBody
       
        For j = 2 To 500

                    Set oBody = oBodies.Item(j)
                    If oBody.InBooleanOperation = False Then
                        Set oAdd = oShapeFactory.AddNewRemove(oBody)
                        On Error Resume Next
                        oPart.UpdateObject (oAdd)
                       
                        iErr = Err.Number
                       
                        If (iErr = 438) Then
                            oPart.Inactivate oAdd
                        End If
                        If (iErr = -2147467259) Then
                        oPart.Inactivate oAdd
                        End If
                       
                    End If
                    On Error GoTo 0
        Next
        oPart.Update
        CATIA.ActiveDocument.Save
       
End Sub

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 15. Aug. 2016 09:30    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 Estafanos 10 Unities + Antwort hilfreich

Servus
Du könntest die Schleife über alle Körper laufen lassen noch einen zusätzlichen Zähler als Abbruchkirterium mitlaufen lassen.
grobe Struktur:
Code:
For j = 1 To oBodies.Count

Set oBody = oBodies.Item(j)

'hier noch prüfen ob der aktuelle Körper nicht der Mainbody ist

'den Zähler auswerten
if iCountRemove > 500 then
    exit For
end if

If oBody.InBooleanOperation = False Then
  Set oAdd = oShapeFactory.AddNewRemove(oBody)
  On Error Resume Next
  oPart.UpdateObject (oAdd)
                     
  iErr = Err.Number
                     
  If (iErr = 438) Then
      oPart.Inactivate oAdd
  elseIf (iErr = -2147467259) Then
      oPart.Inactivate oAdd
  Else
    'falls der Remove erfolgreich war den Zähler erhöhen
    iCountRemove = iCountRemove + 1
  End If
                     
  On Error GoTo 0
  Err.clear
Next


Gruß
Bernd

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

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 15. Aug. 2016 10: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 Estafanos 10 Unities + Antwort hilfreich

Hi Estafanos,

um die Prozedur zu beschleunigen würd' ich die Bodies zuerst zusammenfassen und danach in einer Op abziehen.
Und beim Zusammenfassen auf kurze Ketten achten, ähnlich hier:

http://ww3.cad.de/foren/ubb/Forum137/HTML/005787.shtml#000047

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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)2023 CAD.de | Impressum | Datenschutz