Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Makro bei Add sehr langsam

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:  Makro bei Add sehr langsam (3239 mal gelesen)
woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 12. Jan. 2015 11: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 zusammen.

Folgende Aufgabe hab ich gelöst.
Ich habe einen Hauptköper, dem ich etliche Körper hinzufügen möchte (ADD)(es sind je nach Aufgabe zwischen 3000 - und 9000).
Das Makro funktioniert auch, d.h. es macht was es soll. Allerdings dauert es bei 3000 Stück ca. 12 h und bei 9000 Stück stürtz Catia irgendwann ab.

Hat irgendjemand eine Idee warum das so ist und wie man das schneller bzw. so machen kann das das Makro durchläuft.

Vielen Dank

Hier das Makro:


Set partDocument1 = CATIA.ActiveDocument

Set part1 = partDocument1.Part


'Prüfen ob Makro von einem Part aus gestartet wird
If Not (TypeName(CATIA.ActiveDocument) = "PartDocument") Then
    Dim Box
    Box = MsgBox("Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", 48, "Hinweis")
    End
End If

Set bodies1 = part1.Bodies

Dim body1 As Body
Set body1 = bodies1.Item("StarDustBody")

Dim anzahl As Integer

anzahl = 0

part1.InWorkObject = body1

On Error Resume Next
For I = Start To Ende
   
    Err.Clear
    Set body2 = bodies1.Item(NameBody & I)
   
    Set shapeFactory1 = part1.ShapeFactory
    Set add1 = shapeFactory1.AddNewAdd(body2)
   
    part1.Update
   
    If Err.Number <> 0 Then
       
       
        part1.InWorkObject = body2
       
        Dim hybridShapeFactory1 As HybridShapeFactory
        Set hybridShapeFactory1 = part1.HybridShapeFactory
       
        Dim hybridShapeDirection1 As HybridShapeDirection
        Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 1#)
       
        Dim translate1 As Translate
        Set translate1 = shapeFactory1.AddNewTranslate2(-0.2)
       
        Dim hybridShapeTranslate1 As HybridShapeTranslate
        Set hybridShapeTranslate1 = translate1.HybridShape
       
        hybridShapeTranslate1.VectorType = 0
       
        hybridShapeTranslate1.Direction = hybridShapeDirection1
       
        part1.InWorkObject = hybridShapeTranslate1
       
        part1.Update
     
        anzahl = anzahl + 1
       
        part1.InWorkObject = body1
       
    End If
     
 
Next I

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: 12. Jan. 2015 14:03    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo woodpeeker,

die Updates schlucken am Meisten.

Aber: Wozu das ganze, bitte?

Wie lautet denn die Aufgabenstellung?

Gruß,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 12. Jan. 2015 14:17    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 Joe,

Danke für die Antwort.
Ohne die Updates funktioniert die Fehlerabfrage nicht.
Wenn ein fehler auftritt muss das makro anderst reagieren.
Was ich nicht verstehe warum die ersten 1000 ganz schnell gehen und
es danach so langsam läuft.
Wenn ich das Makro zuerst im 1000 durchlaufen lasse und dann beende und
das Makro nochmal laufen lasse mit den nächsten 1000 ist es um einiges langsamer
als beim ersten durchlauf?!?

Zur Aufgabe.
Ich habe eine Grundfläche (Vorgabe) und die Einzelnen Körper die dem Hauptkörper zugefühgt werden
sollen sind kleine Bausteine. Beides erhalte ich von unserem Kunden.
Um das Teil herstellen zu können, benötige ich aber einen einzelen Solid.
Verstehst Du was ich meine?

lg steffi


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: 12. Jan. 2015 14:32    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

ich les aus dem ganzen eine Anleitung heraus zum Thema: Wie blockiere ich meinen Rechner für 12 h?

Das kann's nicht sein.

Soweit ich das sehe, fährst Du nur in -Z.
Reicht's nicht, zuerst nur den Wert zu ermitteln und anschliessend - in einem Rutsch - die Höhe zu ändern?

Kannst Du ein Bild posten?

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 12. Jan. 2015 14:42    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 Joe,

hmmm vielleicht hast Du recht. Ich fang nochmal an.

Ich hab den Hauptkörper und nehm den ersten Körper und Add ihn zum Hauptkörper.
Falls es funktioniert alles gut und er nimmt den nächsten. Falls nicht verschiebt er den Körper
und versucht es nochmal usw.
Ohne die Schleife mit der Fehlerabfrage kann ich nicht feststellen ob ich ihn hinzufügen kann oder nicht?!?

Am besten wäre es ich würde alle Hinzufügen die Funktionieren und alle Anderen am Ende um die 0,2 mm verschieben
und dann erneut zum Hauptkörper zu Adden.

Aber das würde genauso lange dauern weil ich ja erst mal komplet einmal durchlaufen muss. Oder gibt es da eine andere möglichkeit.

Wenn ich diese Aktion per Hand mache bekomm ich bei jedem Körper eine Fehlermeldung bei welcher ich auf edit oder delete klicken muss und
das dauert meherere Stunden.

Mit meiner Lösung läuft der PC übernacht und am nächsten Morgen ist der Körper fertig. So der Plan. Funktioniert leider nur bei einer Anzahl von 3000 Stück.

Ich bin über jede andere Idee sehr dankbar. Ist mein erster versuch bei der Catia programmierung.

lg steffi

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 12. Jan. 2015 15:12    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

Hab das grad es grad ohne update ausprobiert. Das Makro läuft ganz schnell durch.
Allerdings hab ich dann wieder das problem das ich beim anschließenden update die einzelnen
Körper per hand verschieben muss.

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

Rainer Schulze
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. im Ruhestand


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

Beiträge: 4419
Registriert: 24.09.2012

erstellt am: 12. Jan. 2015 15:50    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 woodpeeker 10 Unities + Antwort hilfreich

>>Allerdings hab ich dann wieder das problem das ich beim anschließenden update die einzelnen Körper per hand verschieben muss.

Ich bin nicht geübt in dieser Art der Programmierung. Aber ich würde darüber nachdenken, ob es nicht eine einfache Randbedingung für das Gelingen des Addierens gibt. Dann würde ich zuerst diese Prüfung und eventuelle Verschiebung durchführen.

------------------
Rainer Schulze

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

Thomas Harmening
Ehrenmitglied V.I.P. h.c.
Arbeiter ツ



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

Beiträge: 2897
Registriert: 06.07.2001

NX 10
Win 7

erstellt am: 12. Jan. 2015 18:01    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 woodpeeker 10 Unities + Antwort hilfreich

Da du beim verboolen einen Ausgleich von 0,2mm bei einigen Teilen einbaust damit der Zusammenbau klappt.

Wäre es da nicht sinnvoll das Element in StarDustBody um 0,2mm aufzudicken
- alle restlichen Bodys dahinein verboolen und
- zum Schluss eine Aufdickung um -0,2mm um wieder die Original Dicke zu haben

müsste dann auch Händisch gehen alle xxxx Elemente.

  Ich dachte der einzelne Body müsste nur um 0,2 verschoben werden, aber das kann ja je nach Fall mehrmals passieren, die Verschiebung...

Bliebe noch übrig, alle xxxx Bodys in einem ZB_Body zu verbauen, auf alle Stirnflächen eine Aufdickung von xx mm zu machen.
Vom Körper Stardust eine Seite Ableiten, diese Ableitung verwenden um den ZB_Body zu beschneiden.
den Körper Stardust dazuaddieren.

Ist wohl auch nicht richtig, da die Einzelnen Elemente ja in Richtung Stardust verlängert werden...

BTW kann der Kunde nicht gleich die Einzelbodys lagerichtig abliefern?

[Diese Nachricht wurde von Thomas Harmening am 13. Jan. 2015 editiert.]

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: 13. Jan. 2015 00: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 Nur für woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

ich komm noch mal auf meine Ausgangsfrage zurück.

Wozu ist das gut?

Soll es eine Einbau-/Zusammenbau-Untersuchung sein, wie der Tom meint?

Wie entscheidest Du, ob gut oder schlecht?

Innerhalb welcher Umgebung programmierst Du (VBA/Makro-Editor/VB-Compiler)?

Für welches Release?

Bitte ein Bild!

Zum Code:
- Wo definierst Du die Werte für 'Start' und 'Ende' ?
- Woher kommt body2? Wo definierst Du den String für 'NameBody'?
  Solange 'NameBody' undefiniert ist, ist Body2 = Nothing.
  Somit kommt immer ein Fehler.
 
  So wie's hier steht, funktioniert das Makro nicht.

- Wenn ich Deine Beschreibung richtig verstehe, 'ADDierst Du zwischen 3000 und 9000 Bodies auf den vorhandenen 'StarDustBody',
  und zwar packst Du 0.2mm-weise Material dazu (oder ziehst es ab).
  Um die Laufzeit zu verkürzen musst meines Erachtens von den fixen 0.2mm abgehen.
  Konkret: Max. Differenz = 9000 x 0.2mm = ca. 2000mm.
  Das erste Intervall hat 1024mm; Abfrage, ob gut oder schlecht(drunter oder drüber)
  das nächste Intervall hat 512mm, dann 256, 128, 64, 32, 16, 8, 4, 2, 1, ...
  Nach ca. 13 Iterationen und ein wenig rechnen, müsste der richtige Wert gefunden sein.

- MsgBox gibt einen Wert zurück der anzeigt, welchen Button der Anwender gedrückt hat.
  Wenn Du den aber nicht verwertest, dann brauchst auch den Rückgabewert nicht zu definieren. 'Dim Box' kann dann entfallen.

Statt:

Code:

Dim Box
Box = MsgBox("Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", 48, "Hinweis")


geht dann auch:
Code:

MsgBox "Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", 48, "Hinweis"

Aber nochmal: Wozu ist das gut?

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 07:54    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

Guten Morgen,

es geht hauptsächlich draum aus vielen einzelnen Körpern einen ganzen großen zu machen.
Vom Kunden (Automotiv) kommen viele gleine Körper, wir simulieren den Körper (was auch ohne zusammengefügen funktioniert)und stellen anschließend das Teil her. Die Maschine erwartet einen einzelnen dummen Solid. Der Kunde ist König! (dem ist das zusammenfügen zu aufwenig und überlässt es uns). 

Meine Entscheidung:
Ich füge einen Körper hinzu und frage dann nach einem Fehler. Ohne Fehler kommt der nächste Körper dran mit Fehler wird der einzelne Körper um 0,2 mm verschoben. (dann geht das hinzufügen.)

Release 19.


Hier noch ein Teil von dem Makro, welcher die übrigen definitionen festlegt.:

Private Sub CB_Start_Click()

   
   
    NameSureface = TextBox_Grundflaeche.Text
    BodyStart = TextBox_BodyStart.Text
    BodyEnd = TextBox_BodyEnd.Text
   
 
    'Körpernamen splitten
   
    Dim SuchZeichen, Pos1, Pos2
 
   
    SuchZeichen = "."
   
    Pos1 = InStr(1, BodyStart, SuchZeichen, 1)
   
    Pos2 = InStr(1, BodyEnd, SuchZeichen, 1)
   
    NameBody = Left(BodyStart, Pos1)
    Start = CInt(Right(BodyStart, Len(BodyStart) - Pos1))
    Ende = CInt(Right(BodyEnd, Len(BodyEnd) - Pos2))
   
   
 
    Call StarDust
    Unload UserForm_StarDust

End Sub

Deine Erklärung um die Laufzeit zu verkürzen versteh ich leider nicht.
Es ist mein erstes Makro. Ich kann mich auch total blöd anstellen

grüße steffi

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 07:55    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

Bild geht leider nicht. es geht um hochsensible designdaten.

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: 13. Jan. 2015 08:51    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 woodpeeker 10 Unities + Antwort hilfreich

Servus
Was ich nicht ganz verstehe? Durch das Verschieben der Körper änderst du doch die Geometrie. Macht das kein Problem?
Um die mehrfache Iteration für die Verschiebung zu vermeiden, könntest du vor dem Add den Abstand messen.

Gruß
Bernd

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

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 10:04    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 verschiebe Körper die ca. 1.5 X 1.5 mm X 2 mm groß sind um 0,2mm.
Das ist kein Problem.
Was es bringen soll wenn ich den Abstand vorher messe weis ich nciht.
ich hab auch noch nicht verstanden war um ich eine Iteration für die Verschiebung machen soll.

lg steffi

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: 13. Jan. 2015 10:07    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 woodpeeker 10 Unities + Antwort hilfreich

Zitat:

es geht hauptsächlich draum aus vielen einzelnen Körpern einen ganzen großen zu machen.
Vom Kunden (Automotiv) kommen viele gleine Körper, wir simulieren den Körper (was auch ohne zusammengefügen funktioniert)und stellen anschließend das Teil her. Die Maschine erwartet einen einzelnen dummen Solid. Der Kunde ist König! (dem ist das zusammenfügen zu aufwenig und überlässt es uns). 

Klingt nach Cubing?

Zitat:

Meine Entscheidung:
Ich füge einen Körper hinzu und frage dann nach einem Fehler. Ohne Fehler kommt der nächste Körper dran mit Fehler wird der einzelne Körper um 0,2 mm verschoben. (dann geht das hinzufügen.)

Hier schliesse ich mich dem Bernd an. Bist Du sicher, dass das Auto um 2mm niedriger werden darf?

Ausserdem: Handelt sich's bei den Körpern um 'dumme', quaderförmige Bodies?

Zitat:

Deine Erklärung um die Laufzeit zu verkürzen versteh ich leider nicht.
Es ist mein erstes Makro. Ich kann mich auch total blöd anstellen

Das passt ja auch nicht. Ich bin von anderen Annahmen ausgegangen.

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 10:18    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

ist ist nur ein Teil von einem Auto. Ein Designelement das gut aussehen muss. aber ob der Körper 0,2mm weiter oben stehen
ist nicht relewant. Und ich bezweifle auch das es irgendjemand auffällt.

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: 13. Jan. 2015 10:24    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 woodpeeker 10 Unities + Antwort hilfreich

Und da stehen nicht mehrere Lagen aufeinander?

Und es werden alle Elemente gleichmässig in Z verschoben?

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 10:48    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

Die Teile sind alle auf dem Hauptkörper verteil. Die Einzelnen Körper schneiden sich.
Und verschoben werden nur die Körper bei denen eine Addition nicht möglich ist, also
eine Fehlermeldung hervorruft. Im aktuellen Beispiel werden nur ca. 50 verschoben.

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: 13. Jan. 2015 11:37    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 woodpeeker 10 Unities + Antwort hilfreich


Demo.CATPart

 
Meinst Du so ähnlich?

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 13: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

Genau. Nur sind die Körper nicht so schön symetrisch.
ich häng doch mal ein bild an.

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 13. Jan. 2015 13: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

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: 13. Jan. 2015 14:42    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 woodpeeker 10 Unities + Antwort hilfreich

Das sieht aus, als hätte ein Besoffener versucht ein Puzzle zusammen zu setzen.
Die Teile liegen schon an der richtigen Stelle, oder?
Ihr stellt das Teil her? Wie? Lasersintern?

Trotzdem: Ein Add sollte eigentlich immer gehen, auch wenn sich die Bodies nicht berühren.
Das müsstest auch händisch nachvollziehen können.
Wenn sie sich unbedingt berühren müsssen(zusammen hängender Solid), dann mach doch die Grundplatte dicker/höher.
Dann kannst Dir wenigstens die Verschiebeschleife mit InWork und Update sparen.
Und den Update hinter die For-Next-Schleife setzen.

Das Programm sähe dann so aus:

Code:

Sub DoTest()
  Dim oAD As Document
  Dim oADP As Part
  Dim oBds As Bodies
  Dim oBd1 As Body
  Dim oBd2 As Body
  Dim iAnzahl As Integer
  Dim i As Integer
  Dim iStart As Integer
  Dim iEnde As Integer
  Dim strNameBody As String
  Dim oSF As ShapeFactory
  Dim oAddOp As Object 'CATIAAdd
  Dim oHSF As HybridShapeFactory
  Dim oHSD As HybridShapeDirection
  Dim oTrans1 As Translate
  Dim oHSTrans1 As HybridShapeTranslate
 
  Set oAD = CATIA.ActiveDocument
  Set oADP = oAD.Part
 
  'Prüfen ob Makro von einem Part aus gestartet wird
  If Not (TypeName(CATIA.ActiveDocument) = "PartDocument") Then
      MsgBox "Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", vbExclamation, "Hinweis"
      End
  End If
 
  Set oBds = oADP.Bodies
  Set oBd1 = oBds.Item("StarDustBody")
 
  iAnzahl = 0
 
  oADP.InWorkObject = oBd1
 
  On Error Resume Next
  iStart = 2                'von mir eingefügt
  iEnde = 10                '
  strNameBody = "Body."    '
  For i = iStart To iEnde
     
      Err.Clear
      Set oBd2 = oBds.Item(strNameBody & i)
     
      Set oSF = oADP.ShapeFactory
      Set oAddOp = oSF.AddNewAdd(oBd2)
     
'      oADP.Update
     
'      If Err.Number <> 0 Then
'          oADP.InWorkObject = oBd2
'
'          Set oHSF = oADP.HybridShapeFactory
'          Set oHSD = oHSF.AddNewDirectionByCoord(0#, 0#, 1#)
'          Set oTrans1 = oSF.AddNewTranslate2(-0.2)
'          Set oHSTrans1 = oTrans1.HybridShape
'
'          oHSTrans1.VectorType = 0
'          oHSTrans1.Direction = oHSD
'
'          oADP.InWorkObject = oHSTrans1
'          oADP.Update
'
'          iAnzahl = iAnzahl + 1
'          oADP.InWorkObject = oBd1
'      End If
  Next
 
  oADP.Update

End Sub


Ich programmier in VB6. Nachdem ich Deine Programmierumgebung immer noch nicht kenne,
lass ich die Deklarationen jetzt mal so stehen.

Die Routine ist auf mein Modell abgestimmt(zum Testen!).

Probier's mal aus.

Tschau,
Joe

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

Thomas Harmening
Ehrenmitglied V.I.P. h.c.
Arbeiter ツ



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

Beiträge: 2897
Registriert: 06.07.2001

NX 10
Win 7

erstellt am: 13. Jan. 2015 18: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 Nur für woodpeeker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von joehz:
Wenn sie sich unbedingt berühren müsssen(zusammen hängender Solid), dann mach doch die Grundplatte dicker/höher.
meine durchgestrichene Rede ;-)

Mit besonderen Design-Formen im teilweise <mm Bereich , gemustert und dann auf einer gewölbten Fläche---- die reinste Systemkiller.
Einfach mal bei verschieden Autohersteller die Abdeckung der Lautsprecher anschauen - was für ein Profil die haben - die billig Variante ist ein einfaches Drahtnetz ;-)
Aber mal ehrlich, wer von 100 Personen bemerkt diese besondere Hingabe der Oberfläche der Abdeckung, wenn sie sich im Dunkeln des Fussraums befindet 

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 14. Jan. 2015 09:53    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

Kein Mensch merkt das....

Ich programmier das Makro mit vba.

Die Grundplatte dicker machen ist leider auch nicht ziehlführend ich bekomm trotzdem die Fehlermeldung.
Ist es möglich ein update durchzuführen und bei einer fehlermeldung die einzelnen Körper die nicht funktionieren per Makro zu löschen.
Ich hab das Makro jetzt ohne update durchlaufen lassen  (geht sehr schnell) und anschließend mach ich den update. Das problem.
Ich muss wieder per hand jeden einzelne fehlermeldung bearbeiten. wenn das automatisch ginge wär mein problem gelöst.

grüße steffi

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: 14. Jan. 2015 11:09    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

ich hab gestern noch 'n Bisschen gespielt mit dem Problem.
Dazu hab ich meinem demo-Part noch eine Grundplatte spendiert.

Catia ist es bei einem 'Add' gleich, ob sich die zwei Bodies berühren.
Dem Makro ist auch egal, ob die Bodies fortlaufend nummeriert sind.

Deshalb zwei Fragen:
- Wie lautet die Fehlermeldung?
- Kannst Du bei den fraglichen Bodies den 'Add' händisch ausführen?
  (Oder kommt da die gleiche Fehlermeldung?)

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 14. Jan. 2015 11:36    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


Fehler.png


Beispiel.CATPart

 
Hallo Joe,

ob ich die Körper per Hand oder mit dem Makro zusammenfüge ist egel.
Es passiert immer das gleiche.
Das Problem ist auch nicht das sich zwei Körper Berühren sonder eher
so blöd überschneiden, dass ein Add nicht möglich ist.
Die fehlermeldung Häng ich dir mal an und ein Beispiel bekommst Du auch von mir.

Danke!!

lg steffi

[Diese Nachricht wurde von woodpeeker am 14. Jan. 2015 editiert.]

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: 14. Jan. 2015 12:08    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 woodpeeker 10 Unities + Antwort hilfreich

Servus
"Schlechtes Beispiel": beim mir funktioniert das Add.
ggf mal zuvor Part cleanen.

Gruß
Bernd

PS: Bitte Systeminfo ergänzen.

------------------
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: 14. Jan. 2015 12:12    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 woodpeeker 10 Unities + Antwort hilfreich


ErrMsg_01.JPG


Beispiel_2.CATPart


Beispiel_3.CATPart

 
Hallo Steffi,

ich hab mal die Reihenfolge umgedreht - geht.
Zwar auch mit einer Fehlermeldung, aber immerhin.

Komplett ohne Fehlermeldung geht, wenn zuerst alle Klötzchen ge-Added werden,
und zuletzt mit der Platte.
Vielleicht ist das der günstigste Weg:
- Multiselect aller(erstmal einiger) Bodies, ausser dem ersten
- Add auf den ersten Body
- Add auf Platte

Falls Du das Makro nochmal laufen lassen willst, füge noch ein 'DoEvents' in die For-Next-Schleife ein.
Sonst ist der komplette Rechner für die Dauer der Routine blockiert.

Tschau,
Joe

- 3 Anhänge

[Diese Nachricht wurde von joehz am 14. Jan. 2015 editiert.]

[Diese Nachricht wurde von joehz am 14. Jan. 2015 editiert.]

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: 14. Jan. 2015 12: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 woodpeeker 10 Unities + Antwort hilfreich

Hi Bernd,

der Clean bringt leider auch nix.
Zwar war das Modell nicht sauber, aber die Fehlermeldung kommt trotzdem.

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 14. Jan. 2015 16:02    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

ich hab jetzt mal ausprobiert zuerst alle kleinen Bodys zusammenzufühgen, da bekomm ich die gleiche Fehlermeldung.
Es sind wie gesagt 3000-9000 stück, da gibts so viele fälle...

kann ich die Fehlermeldung mit dem Makro steuern? von mir aus kann es die Bodys alle löschen und ich verschieb die dann alle und fühg sie erneut hinzu.

das mit dem doevents ist toll. Danke

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

Thomas Harmening
Ehrenmitglied V.I.P. h.c.
Arbeiter ツ



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

Beiträge: 2897
Registriert: 06.07.2001

NX 10
Win 7

erstellt am: 14. Jan. 2015 19:12    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 woodpeeker 10 Unities + Antwort hilfreich


Beispiel-nicht_updatefaehiger_Assembley_hier_betreffendesFeature-aufgedickt.CATPart


Beispiel-nicht_updatefaehiger_Assembley_hier_aufdicken-und-dann-wieder-negativ-aufdicken.CATPart


Beispiel-nicht_updatefaehiger_Assembley_hier_unterassmbley_erstellen.CATPart

 
3 varianten meinerseits

1) Das entsprechende Feature der nicht funktionierenden boolschen Operation - aufdicken - weiter mit Part update - usw.
2) Die Variante zuerst die Basisträgerfläche aufdicken, alle Elemente dazuaddieren, wieder negativ aufdicken
3) einen unter ZB erstellen
3a) wie 3 - 0,1mm Offset der Oberfläche Stardust, ZB beschneiden und um 0,2mm audicken - mit dem Körper Stardust vereinen

und warum meckert Catia und lässt manche boolsche operation nicht zu - das liegt daran das die Flächen zueinander "tangential schmieren" bzw. Sigularitäten / Kante auf Fläche etc. erzeugen eine Überlappung/ schnittmenge wäre deutlich besser.
Fahre einfach mal mit einer Schnittanalyse durch den Zusammenbau...

ich wäre immer noch bei Variante 2  

[Diese Nachricht wurde von Thomas Harmening am 14. Jan. 2015 editiert.]

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

Thomas Harmening
Ehrenmitglied V.I.P. h.c.
Arbeiter ツ



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

Beiträge: 2897
Registriert: 06.07.2001

NX 10
Win 7

erstellt am: 14. Jan. 2015 19:19    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 woodpeeker 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von woodpeeker:
ich hab jetzt mal ausprobiert zuerst alle kleinen Bodys zusammenzufühgen, da bekomm ich die gleiche Fehlermeldung.
Es sind wie gesagt 3000-9000 stück, da gibts so viele fälle...

Du kannst auch die mit dem Ausrufezeichen versehenen boolschen Operationen lsöchen ( nicht den Body) (, der Boy taucht , dann ja normal wieder im Baum auf.) bis dein ZB duchläuft.

Dann nochmals versuchen, die nicht funktonierenden Bodys dazuzuaddiern, manchmal existiert dann die Problemstelle nicht mehr, da ein anerer dazu addierter Körper das Problem löst.

Ansonsten die entspechenden Flächen Aufdicken, das die Verschmelzung mathematisch eindeutig wird.

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: 14. Jan. 2015 20:59    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

ich hab versuchsweise die Kontaktfläche des Grundkörpers um 0.01mm aufgedickt.
Dann geht's klaglos. Keine Warnung, keine Fehler.

Nur als Anregung.

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 15. Jan. 2015 09:48    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.

Danke für Eure Anregungen.

Ich habe jetzt versucht den Grundkörper aufzudicken einmal mit 3 mm
Alle körper hinzuzufühgen (funktioniert) und anschließend das aufdicken wieder rückgängig zu machen (funktioniret nicht).
Auf ein aufdicken der Grundfläche um 0.01mm bringt bei mir immernoch ganz viele fehlermeldungen. 
Die fehlermeldungen sind auch gar nicht schlimm. ich weiß ja was dann zu tun ist. ich bräuchte nur eine idee wie ich per makro auf die fehlermeldung reagieren kann.

lg steffi

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. Jan. 2015 13:23    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

lt. Bernd läuft Dein Beispiel-Part unter R20 ohne Fehler durch.
Unter R21 läuft's auch (mit Warnung).
Beim Re-Import nach R19 über IGES habe ich aber kein Solid  erzeugen können.
Die Analyse der Flächen ergab, dass die Unterseiten der Kötzchen nicht mit der Fügefläche des Grundkörpers übereinstimmen.
Im Falle der Beispieldatei, weniger als 0.01mm Abstand.
Daher meine Idee mit dem Aufdicken der Grundfläche.

Was meinst Du mit Reagieren auf die Fehlermeldung?
Wie die Meldung wegdrücken/bestätigen, oder was?

Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 15. Jan. 2015 15:15    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 Joe,

ich hab meine Datei mal mit R24 gestartet.
Geht auch nicht. ich bekomm mehr wahrnungen aber auch Fehlermeldungen.

Meine Idee: ich lass die Schleife ohne update durchlaufen und mach das update hinterher. Jetzt lauf ich aber wieder in die Fehlermeldungen hinein auf die ich par hand reagieren muss. Wenn ich per makro sagen könnte Lösch den Add der nicht funktioniret. Wäre mein Problem gelöst.

lg steffi

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. Jan. 2015 15:53    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 woodpeeker 10 Unities + Antwort hilfreich

Den nichtfunktionierenden Add müsstest auch anschliessend löschen können.
Willst Du die Unterbrechungen durch die Fehlermeldungen unterdrücken, damit das Makro ohne Aktion deinerseits durchläuft?

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. Jan. 2015 21:11    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 woodpeeker 10 Unities + Antwort hilfreich

Nur vor dem Update kommt kein Fehler.

Um die zu identifizieren musst den Update direkt nach dem 'Add' lostreten....

In diesem Sinne:

Code:

'---------------------------------------------------------------------------------------
' Procedure : DoTest
' Author    : jherzog
' Date      : 15.01.2015
' Time      : 19:26
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Add bodies to main part
' Parms    : -
' Ret. Value: -
'
' Syntax    : DoTest
'
' Prereqs  : Open Catpart containing multiple bodies
' Remarks  : Invalid Adds are deleted
'---------------------------------------------------------------------------------------
'
Sub DoTest()
  Dim oAD As Document                      'active doc
  Dim oADP As Part                          'active part
  Dim oBd1 As Body                          'main body
  Dim oBd2 As Body                          'body to add
  Dim i As Integer
  Dim tmStart As Date
  Dim tmEnd As Date
  Dim iStart As Integer
  Dim iEnde As Integer
  Dim strNameBody As String                'body name
  Dim oSF As ShapeFactory
  Dim oAddOp As Object 'CATIAAdd            'add operation
  Dim oSel As Selection
  Dim iNumDeleted As Integer            'add error counter
 
  On Error GoTo DoTest_Error

  Set oAD = CATIA.ActiveDocument
  Set oADP = oAD.Part
 
  'Prüfen ob Makro von einem Part aus gestartet wird
  If Not (TypeName(CATIA.ActiveDocument) = "PartDocument") Then
      MsgBox "Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", _
        vbExclamation, "Hinweis"
      End
  End If
 
  Set oBd1 = oADP.Bodies.Item("StarDustBody")      '
 
  Set oSel = oAD.Selection                  'init selection
  oSel.Clear                                'clear selection
 
  oADP.InWorkObject = oBd1                  'set starbody in work
 
  iStart = 16                              'lower coundary
  iEnde = 18                                'upper boundary
  strNameBody = "Body."                    'common string
 
  tmStart = Time$                          'start time keeping
 
  For i = iStart To iEnde
      Err.Clear
      Set oBd2 = oADP.Bodies.Item(strNameBody & i) 'set body to add
      Set oSF = oADP.ShapeFactory
      Set oAddOp = oSF.AddNewAdd(oBd2)            'add body
     
      oADP.Update                            'if this causes an error, add op is deleted
      DoEvents                              'give other progs some cpu time
  Next
 
  oADP.Update                              '
 
  tmEnd = Time$
 
  MsgBox "Start: " & tmStart & vbCrLf _
        & "Ende: " & tmEnd & vbCrLf _
        & iEnde - iStart + 1 & " Bodies handled." & vbCrLf _
        & iNumDeleted & " Add-Ops were deleted.", _
        vbOKOnly, "AddBodyTest"
Exit Sub
'---------------------------------------------------------------------------------------
DoTest_Error:
  Dim errMsg As String
  Dim errRet As VbMsgBoxResult

  Select Case Err.Number
'      Case 438
      Case -2147467259                  'automation error recognized during update
        oSel.Add oAddOp                  'add op to selection(select 'Add')
        oSel.Delete                      'delete add operation
        iNumDeleted = iNumDeleted + 1    'increment counter
        Resume Next                      'return to loop
      Case Else                          'all unhandled errors handled here
        errMsg = Err.Number & ": " & Err.Description & " in procedure DoTest"
        errRet = MyMsgBox(errMsg, vbOKOnly, "DoTest")
  End Select

  'Resume Next                                          'fall thru to quit sub
'---------------------------------------------------------------------------------------
End Sub


Have fun.

Joe

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. Jan. 2015 21:18    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 woodpeeker 10 Unities + Antwort hilfreich

hab was übersehen ...

Nach dem Löschen muss die Selection wieder geleert werden.
Ändere die fehlerroutine ab in:

Code:

      Case -2147467259                  'automation error recognized during update
        oSel.Add oAddOp                  'add op to selection(select 'Add')
        oSel.Delete                      'delete add operation
        iNumDeleted = iNumDeleted + 1    'increment counter
        oSel.Clear                                'clear selection
        Resume Next                      'return to loop


Tschau,
Joe

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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 16. Jan. 2015 09:33    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,

Danke für den Code.
Ich bin schon im Wochenende und versuch das am Montag.
Schönes Wochenende

Steffi

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: 17. Jan. 2015 14: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 woodpeeker 10 Unities + Antwort hilfreich

und noch ein Fix ...

Wenn die Bodies nicht fortlaufend nummeriert sind, werden in der For-Next-Schleife nicht-existierende Bodies angesprochen.
Um den Fehler abzufangen, sind noch folgende Ergänzungen notwendig:

In der Fehlerbehandlung:

Code:

  Select Case Err.Number
      Case 438                          'bei nicht vorhandenem Body(nicht fortlaufend
        Resume GetNextBody              'nummeriert);


In der Schleife:

Code:

      oADP.Update                            'if this causes an error, add op is deleted
      DoEvents                              'give other progs some cpu time
GetNextBody:                                '
  Next


Tschau,
Joe

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: 19. Jan. 2015 20:24    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

mit den Laufzeiten der letzten Routine war ich nicht zufrieden.
Deswegen hab ich noch 'n Bißchen rumgespielt.

Die Philosophie geht auf eine V4-Regel zurück, wonach die History für gute Update-Zeiten in die Breite gehen sollte.

Ich bilde per Add zunächst Pärchen, dann doppelte, quadruple, etc.,
je nachdem wie viele Bodies verknüpft werden sollen.
Gegenwärtig maximal 2^15(integer Bereich, also 32767).
Bei 9000 Bodies würden 16384 Bodies untersucht.
Deswegen gibt's erstmal ca. 7400x Leerlauf(ca. 15 min.)
Bei mir hat der Durchlauf ca. 4h gedauert.
Der letzte Add verknüpft die Bodies mit der Grundplatte.

Lief mit Deiner Beispiel-Datei ohne Fehler durch (1000 Bodies in 4 min.).

Tschau,
Joe


Code:

'---------------------------------------------------------------------------------------
' Procedure : DoTest2
' Author    : jherzog
' Date      : 15.01.2015
' Time      : 19:26
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Add bodies to main part
' Parms    : -
' Ret. Value: -
'
' Syntax    : DoTest2
'
' Prereqs  : Open Catpart containing multiple bodies
' Remarks  : Invalid Adds are deleted
'---------------------------------------------------------------------------------------
'
Sub DoTest2()
  Dim oAD As Document                      'active doc
  Dim oADP As Part                          'active part
  Dim oBd1 As Body                          'main body
  Dim oBd2 As Body                          'body to add
  Dim i As Integer
  Dim tmStart As Date
  Dim tmEnd As Date
  Dim iStart As Integer
  Dim iEnde As Integer
  Dim strNameBody As String                'body name
  Dim oSF As ShapeFactory
  Dim oAddOp As Object 'CATIAAdd            'add operation
  Dim oSel As Selection
  Dim iNumDeleted As Integer                'add error counter
  Dim iNumBodies As Integer                  'no more than 32767 bodies allowed
  Dim n As Integer
 
  On Error GoTo DoTest2_Error

  If CATIA.Documents.Count > 0 Then        'is a doc loaded
      Set oAD = CATIA.ActiveDocument
  Else                                      'if not, quit
      MsgBox "No part loaded. Exiting ...", vbOKOnly Or vbCritical, _
        "DoTest2 - No part loaded"
      Exit Sub
  End If
 
  'Prüfen ob Makro von einem Part aus gestartet wird
  If Not (TypeName(CATIA.ActiveDocument) = "PartDocument") Then
      MsgBox "Makro muss von einem CatPart aus gestartet werden. Makro wird beendet.", _
        vbExclamation, "Hinweis"
      End
  End If
 
  Set oADP = oAD.Part

 
  Set oSel = oAD.Selection                  'init selection
  oSel.Clear                                'clear selection
 
  CATIA.RefreshDisplay = False              'doesn't seem to help any

' calculate region with powers of 2
  iStart = 16                                'lower boundary
  iEnde = 1039                              'upper boundary
 
'  iNumBodies = iEnde - iStart + 1
 
  For n = 1 To 15                          'max integer is 2^15
'      If iNumBodies < 2 ^ n Then Exit For
      If iEnde < 2 ^ n Then Exit For
  Next
 
 
  strNameBody = "Body."                    'common string
 
  tmStart = Time$                          'start time keeping
  Do Until n = 0
      For i = 1 To 2 ^ (n - 1)                      '
        'four cases here:
        '  - oBd1 and oBd2 both exist
        '    - just add
        '  - oBd1 exists, but not oBd2
        '    - no add needed(or possible)
        '  - oBd2 exists, but not oBd1
        '    - no add needed, but rename oBd2 to oBd1
        '  - neither exist
        '    - do nothing
       
        'first we need to determine, if oBd1/2 are indeed bodies;
        'then act accordingly
        Err.Clear
       
        If BodyExists(oADP, strNameBody & i) = True And _
            BodyExists(oADP, strNameBody & 2 ^ n - i + 1) = True Then
            Set oBd1 = oADP.Bodies.Item(strNameBody & i)      '
            oADP.InWorkObject = oBd1              'set in work
            Set oBd2 = oADP.Bodies.Item(strNameBody & 2 ^ n - i + 1) 'set body to add
            Set oSF = oADP.ShapeFactory
            Set oAddOp = oSF.AddNewAdd(oBd2)            'add body
            oADP.Update                            'if this causes an error, add op is deleted
        ElseIf BodyExists(oADP, strNameBody & i) = True And _
            BodyExists(oADP, strNameBody & 2 ^ n - i + 1) = False Then
        ElseIf BodyExists(oADP, strNameBody & i) = False And _
            BodyExists(oADP, strNameBody & 2 ^ n - i + 1) = True Then
            oADP.Bodies.Item(strNameBody & 2 ^ n - i + 1).Name = strNameBody & i
        Else
            'dont do anything
        End If
        DoEvents                              'give other progs some cpu time
GetNextBody:                                    '
      Next
      n = n - 1
  Loop
 
  Set oBd2 = oADP.Bodies.Item("StarDustBody")  '
  oADP.InWorkObject = oBd2                    'set starbody in work
  Set oSF = oADP.ShapeFactory
  Set oAddOp = oSF.AddNewAdd(oBd1)            'add body
  oADP.Update                                  '
  CATIA.RefreshDisplay = True                  'doesn't seem to help any
 
  tmEnd = Time$
 
  MsgBox "Start: " & tmStart & vbCrLf _
        & "Ende: " & tmEnd & vbCrLf _
        & iEnde - iStart + 1 & " Bodies handled." & vbCrLf _
        & iNumDeleted & " Add-Ops were deleted.", _
        vbOKOnly Or vbInformation, "AddBodyTest"
Exit Sub
'---------------------------------------------------------------------------------------
DoTest2_Error:
  Dim errMsg As String
  Dim errRet As VbMsgBoxResult

  Select Case Err.Number
      Case 438                          'bei nicht vorhandenem Body(nicht fortlaufend
        Resume GetNextBody              'nummeriert);
      Case -2147467259                  'automation error recognized during update
        oSel.Add oAddOp                  'add op to selection(select 'Add')
        oSel.Delete                      'delete add operation
        oSel.Clear                      'clear selection
        iNumDeleted = iNumDeleted + 1    'increment counter
        Resume Next                      'return to loop
      Case Else                          'all unhandled errors handled here
        errMsg = Err.Number & ": " & Err.Description & " in procedure DoTest2"
        errRet = MyMsgBox(errMsg, vbOKOnly, "DoTest2")
  End Select

  'Resume Next                                          'fall thru to quit sub
'---------------------------------------------------------------------------------------
End Sub

Function BodyExists(oParent As Part, strBody As String)
  Dim oBd As Body
 
  On Error GoTo BodyExists_Error
  BodyExists = False
  Set oBd = oParent.Bodies.Item(strBody)
  BodyExists = True
BodyExists_Error:

End Function


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

woodpeeker
Mitglied



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

Beiträge: 18
Registriert: 12.01.2015

erstellt am: 21. Jan. 2015 14:03    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 Joe,

vielen vielen Dank für deine Mühe.
Ich habs versuch und es funktioniert.
Beim letzten Add zur Grundfläche bekomm ich immer noch ne fehlermeldung aber das ist nciht schlimm, das geht per hand auch schnell.
Ich hab den Algorithmus noch nicht ganz verstanden, aber es hilft mir sehr weiter.
Danke.

steffi

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: 21. Jan. 2015 16:59    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 woodpeeker 10 Unities + Antwort hilfreich


tree.jpg

 
Hallo Steffi,
Zitat:

Ich habs versuch und es funktioniert.
Beim letzten Add zur Grundfläche bekomm ich immer noch ne fehlermeldung aber das ist nciht schlimm, das geht per hand auch schnell.


der hat sich irgendwie eingeschlichen. Ich bilde mir ein, dass es auch schon ohne die Fehlermeldung lief.

Zitat:

Ich hab den Algorithmus noch nicht ganz verstanden


Bisher: Eine sehr lange Kette von aufeinander folgenden Add-Operationen.
Der Update läuft immer durch alle Stationen.

Jetzt: Viele kurze Ketten mit 1, 2, 4, 8, ... Adds (klapp den Baum auf!)(siehe Bild)

Ich vermute, dass der Update immer nur den direkten Weg nach oben nimmt.

Tschau,
Joe

[Diese Nachricht wurde von joehz am 21. Jan. 2015 editiert.]

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: 23. Jan. 2015 14:33    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 woodpeeker 10 Unities + Antwort hilfreich

Hallo Steffi,

zum Schluss noch 'nen kleinen Bugfix und 'ne Optimierung:

Ergänze die Deklarationen um zwei Werte:

Code:

  Dim bE1 As Boolean
  Dim bE2 As Boolean


und ersetze die If-Abfrage in der For-Schleife mit:

Code:

        bE1 = bBodyExists(oADP, strNameBody & i)
        bE2 = bBodyExists(oADP, strNameBody & 2 ^ n - i + 1)
       
        If bE1 = True And bE2 = True Then
            Set oBd1 = oADP.Bodies.Item(strNameBody & i)      '
            oADP.InWorkObject = oBd1              'set in work
            Set oBd2 = oADP.Bodies.Item(strNameBody & 2 ^ n - i + 1) 'set body to add
            Set oSF = oADP.ShapeFactory
            Set oAddOp = oSF.AddNewAdd(oBd2)            'add body
            oADP.Update                            'if this causes an error, add op is deleted
        ElseIf bE1 = True And bE2 = False Then
            'dont do anything
        ElseIf bE1 = False And bE2 = True Then
            'rename body1
            oADP.Bodies.Item(strNameBody & 2 ^ n - i + 1).Name = strNameBody & i
        Else
            'dont do anything
        End If

Grund: Damit wird vermieden, dass das Makro 4x statt 2x in die BodyExists-Funktion läuft, falls nicht oBd1 und oBd2 existieren.
Macht bei 9000 Bodies ca. 14000 Aufrufe aus = ca. 15 Minuten.

Ausserdem hab ich den Type bei der Funktion BodyExist verschlampt.
Statt:

Code:

Function bBodyExists(oParent As Part, strBody As String)


muss es
Code:

Function bBodyExists(oParent As Part, strBody As String) as Boolean


heißen.
Bei der Gelegenheit hab ich auch die Funktion umbenannt.
Von BodyExists zu bBodyExists.
Die zwei Zeilen mit dem Rückgabewert müssten auch entsprechend geändert werden.

Das war's.

Tschau,
Joe

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: 23. Jan. 2015 15:08    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 woodpeeker 10 Unities + Antwort hilfreich

Servus Joe
Warum greifst du nicht einfach auf die Body-Collection zu, und arbeitest die mit einer Schleife ab. Ist mit sicher einfacher als den Namen zusammenzustellen und prüfen ob des den Body gibt.
Falls die Bodies sortiert sein müssen: Bodies in Collection packen, nicht passende rauswerfen, sortieren

Gruß
Bernd

PS: Ich stelle so blöde Fragen um noch was zu lernen.

------------------
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: 23. Jan. 2015 17:45    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 woodpeeker 10 Unities + Antwort hilfreich


Vorher.JPG


Nachher.JPG

 
Hi Bernd,

Collection abarbeiten:

Einfach n-mal auf den Hauptkörper aufzu'Adden' hat sich als seeehr langsam herausgestellt.
Bei 9000 Bodies dauert's ewig, im Wortsinn. Ich hab den Test nach 10 Stunden abgebrochen.
In einer ruhigen Minute bin ich auf die Idee gekommen, die Bodies pärchenweise zu adden.
Erst zwei, dann vier, etc. Das führt beim Update, dem eigentlichen Zeitfresser, zu wesentlich kürzeren Ketten.
Um das zu erreichen, brauch ich aber 2er-Potenzen.
Das führt dazu, dass ich viele Schein-Bodies bekomme.
Bei 9000 Bodies - nächstgrössere 2er-Potenz = 10^14 = 16384 - hab ich ca. 7300 davon.
Die filtere ich dann nach und nach über die If-Abfrage in der Schleife raus.

Sortieren reicht nicht, weil ich nicht weiss, ob nicht durchlaufend nummeriert wurde.
Ich weiss auch nicht, ob's bei Body.1 anfängt.
Ich hab keinen Zugriff auf das Ausgangsmodell.

So wie ich's jetzt habe, gibt's prinzipiell 4 Möglichkeiten:

- oBd1 und oBd2 existieren: -> Add ausführen; Ergebnis: bei Body.1 mit Body.199 bleibt Body.1 übrig
- oBd1 existiert, oBd2 nicht: -> Nix machen;  Ergebnis: bei Body.1 mit Body.n bleibt Body.1 übrig
- oBd1 existiert nicht, aber oBd2 schon: -> oBd2 nach oBd1 umbenennen; Ergebnis: bei Body.1 mit Body.n bleibt Body.1 übrig
- oBd1 und oBd2 existieren nicht: -> Nix machen.

Auf die Art erhalte ich - eventuell erst nach mehreren Schleifen - zwangsläufig einen durchgehend nummerierten Block.
Zwar nicht das Ziel der Übung, aber ein Nebeneffekt.

Beispiel:

Bodies:
min.Index: 3
max. Index: 11
Index 7 fehlt

Zugewiesenes 2er-Feld:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16

Vorhandene Bodies:
-- -- XX XX XX XX -- XX XX XX XX -- -- -- -- --

Nach erstem Durchlauf:
-- -- 03 04 05 06/11 07/war10 08/09

oder
-- -- 03 04 05 06 07 08

Nach zweitem Durchlauf:
01/war08 02/war07 03/06 04/05

oder
01 02 03 04

dann
01/04 02/03

und endlich

01/02

01

Geschwindigkeit:

Behauptung:
Es werden stets alle Elemente einer Kette upge-dated
Lange Ketten brauchen beim Update länger.

Upzudatende Bodies bei sequenziellem Add:

Beispiel 16 Bodies:

Add1: 2
Add2: 3
Add3: 4
Add4: 5
Add5: 6
Add6: 7
Add7: 8
Add8: 9
Add9: 10
Add10: 11
Add11: 12
Add12: 13
Add13: 14
Add14: 15
Add15: 16

Summe: 7x18+9 = 135

Upzudatende Bodies bei parallem Add:

Add1: 8 x 2 = 16
Add1: 4 x 4 = 16
Add1: 2 x 8 = 16
Add1: 1 x 16 = 16

Summe: 64 (= n * 2 ^ n oder 4 * 2^4 und Feldgrösse = 2^4)

Beispiel: 8 Bodies:

Sequenziell: 35
Parallel: 3 * 2^3 = 24

4 Bodies:

Sequenziell: 9
Parallel: 2 * 2^2 = 8

2 Bodies:
;-)

Struktur nach Add mit 16 vorhandenen Bodies:

Sequenziell:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16

Parallel:

1. Schleife (Pärchen)
01/16 02/15 03/14 04/13 05/12 06/11 07/10 08/09

2. Schleife (Quartette)
01/16//08/09 02/15//07/10 03/14//06/11 04/13//05/12

3. Schleife (Oktette)
01/16//08/09///04/13//05/12 02/15//07/10///03/14//06/11

4. Schleife (??)(Hextette??)
01/16//08/09///04/13//05/12////02/15//07/10///03/14//06/11

Abschliessend sei erwähnt: Mit meiner Methode sind 9000 Adds nach knapp 5h ausgeführt.

Mag sein, dass es noch eleganter geht. Für den Moment bin ich ganz zufrieden.
An der Parallelstruktur führt bei derart vielen Updates kein Weg vorbei.
(Die Updates wurden notwendig, um fehlerhafte Adds aufzuspüren. Die treten aber seitdem ich die Bodies untereinander ver-Adde praktisch nicht mehr auf.
Kann sein, dass es jetzt auch ohne sofortiges Update geht. Das soll aber jemand anderes testen!)

Tschau,
Joe

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: 23. Jan. 2015 17:51    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 woodpeeker 10 Unities + Antwort hilfreich

Servus
Ich meine nicht die Aufteilung wie die Adds erstellt werden (Gruppen bilden), sondern wie du auf die Körper zugreifst (also nicht über den Namen sondern über den Zähler)

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: 23. Jan. 2015 18:56    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 woodpeeker 10 Unities + Antwort hilfreich

Hi Bernd,

ja, weil...

- VB-Syntax ist mir vertrauter wie die CAA-Logik.
- Temperamentssache.
- An Collection hab ich nie gedacht.

Sortiert müssen die Bodies nicht sein, halt ohne MainBody und die Grundplatte(StarDust..).

Wenn ich Dich recht verstehe, denkst Du an:

---Pseudocode-----
Do Until ...
  For i = 1 to Count step 2
      Set InWork Body.Item(i)
      Add Body.Item(i+1)
  next
Loop

Bei ungeradzahligen Count-Werten, muss da noch eine Behandlung des letzten Elementes rein.
Z.B. vorgeschaltet:

  If Bodies.Count MOD 2 = 1 then Count= Bodies.Count - 1

Ignoriert den überschüssigen Body. Spätestens bei der letzten Schleife muss er mit.

Frage: Die Anzahl der vorhandenen Bodies ändert sich ja nicht mit den Adds.
Wie und wo setzt Du den InBooleanOperation ein?
Vorschlag: Innerhalb der Do-Loop, vor der Add-Schleife, die Collection filtern.

Also:
----Pseudocode-----

Dim CollToAdd

  For Each Body in Bodies
    If Body.InBooleanOp = False then
        CollToAdd.Add Body
    End If
  next

Mag sein, dass das auch geht. Die BodyExists-Aufrufe kosten mich bei 9000 Bodies geschätzte 15 Minuten.
Das Kraut machen die Updates fett.

Meine Zeit steht bei 4h45'.  :-)
(Für 9231 Bodies + Grundplatte)

Tschau,
Joe

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