Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  VBASkript - Mehrere Part Bodies einem Part hinzufügen mit Add

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:  VBASkript - Mehrere Part Bodies einem Part hinzufügen mit Add (1045 mal gelesen)
jupo2804
Mitglied


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

Beiträge: 9
Registriert: 24.07.2017

Catia v5 r24, Windows 7

erstellt am: 04. Dez. 2017 17:22    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 Catia Gemeinde,

ich versuche gerade mehrere Parts mit gleichem Namensbeginn, mit Hilfe eines Catia Skriptes einem anderen Part hinzuzufügen. Manuelll ist dies kein Problem, allerdings würde ich das ganze gerne automatisieren. Seltsamerweise passiert bei mir allerdings gar nichts im Moment, sprich die Zeilen scheinen ignoriert zu werden (keine Fehlermeldung oder ähnliches aber auch keine Operation). Der Code sieht wie folgt aus;

Sub CATMain()
Dim sFilterP(0)
Dim oSelectionP
Dim oSelPa
Dim sFilterPa(0)
Dim oSelectionPa
Dim selection1 As Selection
Dim iAnzBodiesAll as Integer
Dim bodies1 As Bodies
Dim oSelPart As PartDocument
Dim body2 As Body
Dim shapeFactory1 As Factory


Set oSelPa = CATIA.ActiveDocument.Selection
    sFilterPa(0) = "Part"
    oSelectionPa = oSelPa.SelectElement2(sFilterPa, "Please select *_BONDED CATPart!", True)
If oSelectionPa ="Normal" Then
Set oSelPart= oSelPa.Item(1).Value
'MsgBox "oSelPa.Item(1).Value " & oSelPart.Name
End If

iAnzBodiesAll = bodies1.Count

Dim AllBondedBodiesArray() As Object
ReDim AllBondedBodiesArray(iAnzBodiesAll)

Set body2 = bodies1.Item(1)
Set shapes1 = body2.Shapes

For i=1 To iAnzBodiesAll
if left(bodies1.Item(i).Name,12) = "PartBody_APM" Then
Set shapeFactory1 = oSelPart.ShapeFactory
Set bodies1 = oSelPart.Bodies
Set body1 = bodies1.Item(i)
oSelPart.InWorkObject = body2
shapeFactory1.AddNewAdd body1
End if
Next

oSelPart.Update

oSelPa.Clear

Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
product1.Update


Ich bin um jede Hilfestellung und Tipps dankbar.

Besten Dank im voraus,
Julien

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: 04. Dez. 2017 17: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 jupo2804 10 Unities + Antwort hilfreich

Servus Julien

Bitte in Zukunft deinen Code in entsprechende Tags posten.
Da du in VBA programmierst: verwende doch das Watch- bzw Local-Fenster
Einige Anregungen:
- du verwendest bodies1 obwohl dies zuvor noch nicht zugewiesen wurde
- wird deine Schleife über den Array überhaupt durchlaufen (iAnzBodiesAll ???)
- wenn die Selektion per ESC abgebrochen wurde wird der Code trotzem abgearbeitet (Prüfung der Rückgabe nochmal anschauen)
- wenn du sprechende Namen für deine Objekte verwendest verstehst du deinen eigenen Code (auch noch in einigen Wochen) besser (was ist body1 ??)

Gruß
Bernd

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

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

jupo2804
Mitglied


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

Beiträge: 9
Registriert: 24.07.2017

Catia v5 r24, Windows 7

erstellt am: 08. Dez. 2017 17: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

Danke Bernd für deine Antwort.

Das hat mir schon weitergeholfen. Du hattest recht mit der Schleife. Ich habe den bodies1 vergessen zu definieren, somit war der Count auch nicht möglich.

Nun habe ich noch ein weiteres Problem. Wenn ich die Schleife durchlaufe und bei jedem Namensmatch, den Körper einem anderen Körper hinzufüge, verringert sich die Gesamtzahl meiner Körper und am Ende der Schleife bekomme ich eine Fehlermeldung. Gibt es eine Möglichkeit, diese Fehlermeldung zu ignorieren oder die Laufvariable anzupassen?

Code:

Sub CATMain()
Dim sFilterP(0)
Dim oSelectionP
Dim oSelPa
Dim sFilterPa(0)
Dim oSelectionPa

Set oSelPa = CATIA.ActiveDocument.Selection
    sFilterPa(0) = "Part"
    oSelectionPa = oSelPa.SelectElement2(sFilterPa, "Please select _MACHINED_2 CATPart!", True)
If oSelectionPa ="Normal" Then
'Dim oSelPart As PartDocument
Set oSelPart= oSelPa.Item(1).Value
'MsgBox "oSelPa.Item(1).Value " & oSelPart.Name
'MsgBox oSelPart.object(1)
End If

Dim body1 As Body
Dim body2 As Body
Dim bodies1 As Bodies
Dim shapes1 As Shapes
Dim shapeFactory1 As Factory

Set bodies1 = oSelPart.Bodies
Dim iAnzBodiesAll As Integer
iAnzBodiesAll = bodies1.Count

Set body2 = bodies1.Item(1)
Set shapes1 = body2.Shapes

For i=2 To iAnzBodiesAll

Do while left(bodies1.Item(i).Name,10) = "APM_INSERT"
Set shapeFactory1 = oSelPart.ShapeFactory
Set bodies1 = oSelPart.Bodies
Set body1 = bodies1.Item(i)
oSelPart.InWorkObject = body2
shapeFactory1.AddNewAdd body1
loop

Next

oSelPart.Update

oSelPa.Clear

Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
product1.Update

End Sub


Ich hoffe, diesmal habe ich den Code richtig eingefügt.

Vielen Dank und viele Grüsse,
Julien

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: 08. Dez. 2017 17:25    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 jupo2804 10 Unities + Antwort hilfreich

Servus

Dann lass doch deine Schleife von hinten nach vorne laufen. zB

Code:
For i=iAnzBodiesAll to 2 Step -1
Obwohl ich mir nicht sicher bin ob sich die Anzahl der Bodies ändert.
Wie lautet die Fehlermeldung?
Welchen Zweck hat den die While-Schleife (würde die for-next nicht reichen)?

Gruß
Bernd

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

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

jupo2804
Mitglied


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

Beiträge: 9
Registriert: 24.07.2017

Catia v5 r24, Windows 7

erstellt am: 11. Dez. 2017 09: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

Servus,

alles klar. Danke für den Tipp mit der Schleife von hinten startend. Das hat mein Problem gelöst.

Die Anzahl der Bodies ändert sich beim Durchlauf der Schleife, da jedes Mal, wenn ein Body mit Suchnamen gefunden wird zum gewünschten Body hinzugefügt wird. Dadurch verschwindet er aus der ursprünglichen Bodies-Liste vom selektierten Part.
Wenn z.B. der erste Body aus der Liste verschwindet, wandert der ursprünglich 2. Body auf die 1. Position hoch. Die For-Schleife geht allerdings zum 2. Schritt über und durchsucht den zweiten Body nach der Namensübereinstimmung. Allerdings ist in dem Fall der urprünglich 3. Body nun der 2. Body und der urpsrüngliche 2. Body wird übersprungen.
Die While-Schleife bezweckt daher, dass bei einem Match einfach der derzeitige Iterationsschritt so oft durchlaufen wird, bis kein Match mehr vorhanden ist. Das Problem, was ich nun hatte, ist dass die For-Schleife trotzdem bis zum letzten Schritt durchlaufen will, obwohl die Anzahl der Bodies reduziert ist, die die Schleife durchlaufen kann. Daher kam der Fehler "The method Item failed".

Wenn man die For Schleife allerdings von hinten startet, hat man dieses Problem nicht mehr und ich kann mir auch die While-Schleife sparen.

Vielen Dank nochmals und beste Grüsse,
Julien

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