Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Body aus einem Part in ein anderes Part kopieren

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:  Body aus einem Part in ein anderes Part kopieren (2114 mal gelesen)
AL-Fonse
Mitglied
Entwicklungsingenieur


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

Beiträge: 37
Registriert: 23.02.2010

Win Vista<P>CatiaV5 R16 R19

erstellt am: 14. Aug. 2012 11: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

Servus!

Ich möchte aus einem PartA in einem Produkt den MainBody kopieren und in ein vorhandenes PartB im selben Produkt einfügen.
Siehe folgenden Code:

....

Dim g_oPart As Part
Dim g_oPartDoc As Document
Dim g_oRootDoc As Document
Dim g_oPartDocZiel As Document
Sub CATMain()

    ' CATProduct öffnen
    Set g_oRootDoc = CATIA.ActiveDocument
   
    ' Baum aktivieren
    Dim oSel As Selection
    Set oSel = g_oRootDoc.Selection
    oSel.Clear
    oSel.Add g_oRootDoc.Product
    CATIA.StartCommand ("Activate terminal node")
   
    ' Product in DesignMode laden
    Dim oPRD As Product
    Set oPRD = g_oRootDoc.Product
    oPRD.ApplyWorkMode DESIGN_MODE
   
    ' Rekursiver Durchlauf
    Call IterateNode(oPRD, 1)
   
End Sub
'Rekursiver Durchlauf
Sub IterateNode(ioNode As Product, ByRef iNumber As Integer)

    Dim Datum As Date
    Datum = Date

    ' Prüfen CATPart oder CATProduct
    Dim oNodeDoc As Document
    Set oNodeDoc = ioNode.ReferenceProduct.Parent
    aa = TypeName(oNodeDoc)
   
    If (TypeName(oNodeDoc) = "PartDocument") Then
        'Selektion im geladenen CATProduct ersetzen
        Dim oSelPrd As Selection
        Set oSelPrd = g_oRootDoc.Selection
       
        'Part und MainBody referenzieren
        Dim oPart As Part
        Dim oMainBody As Body
           
        Set oPart = oNodeDoc.Part
        Set oMainBody = oPart.MainBody
       
        ' CATProduct Selektion leeren und mit zu kopierenden Mainbody befüllen
        oSelPrd.Clear
        oSelPrd.Add oMainBody
        oSelPrd.Copy
       
        Dim documents1 As Documents
        Set documents1 = CATIA.Documents
       
        Dim partDocument1 As PartDocument
        Set partDocument1 = documents1.Item("ZielPart.CATPart")

        Set g_oPartDocZiel = partDocument1

        'Set g_oPartDocZiel = CATIA.Documents.Add("Part") ' )*
       
        ' Selektion im neuen Part referenzieren
        Dim oSelPart As Selection
        Set oSelPart = g_oPartDocZiel.Selection
        oSelPart.Clear
        oSelPart.Add g_oPartDocZiel.Product
       
        ' MainBody in Part einfügen
        oSelPart.PasteSpecial ("CATPrtResultWithOutLink")
     
    End If
   
    For i = 1 To ioNode.Products.Count
       
        Call IterateNode(ioNode.Products.Item(i), iNumber)
   
    Next
    'g_oPartDoc.Part.Update
End Sub

...
==> hier kommt dann folgende Fehlermeldung

>>Selected element(s) not allowed for this operation.<<


Erzeuge ich allerdings ein neues Part in welches ich den Mainbody kopiere funktioniert es!(geänderte Zeile im Code siehe )*  )
Kann mir da jemand weiterhlefen.
Besten Dank schon mal.

Gruß AL-Fonse

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 14. Aug. 2012 12:49    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 AL-Fonse 10 Unities + Antwort hilfreich

Hallo,

prüfe mal in den Optionen...

Infrastruktur->Teileinfrasturktur->Allgemein

Dort gibt es eine Option "Externe Auswahl mit Verknüpfung auf öffentliche Elemente beschränken"...wenn diese aktiviert ist, funktioniert dein Code nicht.

Gruß
  Mark

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

AL-Fonse
Mitglied
Entwicklungsingenieur


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

Beiträge: 37
Registriert: 23.02.2010

Win Vista<P>CatiaV5 R16 R19

erstellt am: 14. Aug. 2012 13:06    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 Mark,

der Hacken war zwar gesetzt, aber das ist leider nicht der Grund, denn nach deaktivierung("Restrict external selection with linkto published elements") funktioniert es immer noch nicht.

Gruß AL-Fonse

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 14. Aug. 2012 13: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 Nur für AL-Fonse 10 Unities + Antwort hilfreich

Hallo AL-Fonse,

habe Deinen Code kurz getestet. Bei mir läuft dieser durch, wenn ich die Deklaration ändere....

Code:
Private g_oPart As Part
Private g_oPartDoc As PartDocument
Private g_oRootDoc As ProductDocument
Private g_oPartDocZiel As PartDocument

Gruß
  Mark

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 14. Aug. 2012 13:29    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 AL-Fonse 10 Unities + Antwort hilfreich

Hier der komplatte Code mit ein paar mehr Änderungen...

Code:
Private g_oPart As Part
Private g_oPartDoc As PartDocument
Private g_oRootDoc As ProductDocument
Private g_oPartDocZiel As PartDocument
Private oSel As Selection

Sub CATMain()

    ' CATProduct öffnen
    Set g_oRootDoc = CATIA.ActiveDocument
 
    ' Baum aktivieren
   
    Set oSel = g_oRootDoc.Selection
    oSel.Clear
    oSel.Add g_oRootDoc.Product
    CATIA.StartCommand ("Activate terminal node")
 
    ' Product in DesignMode laden
    Dim oPRD As Product
    Set oPRD = g_oRootDoc.Product
    oPRD.ApplyWorkMode DESIGN_MODE
 
    ' Rekursiver Durchlauf
    Call IterateNode(oPRD, 1)
 
End Sub
'Rekursiver Durchlauf
Sub IterateNode(ioNode As Product, ByRef iNumber As Integer)

    Dim Datum As Date
    Datum = Date

    ' Prüfen CATPart oder CATProduct
    Dim oNodeDoc As Document
    Set oNodeDoc = ioNode.ReferenceProduct.Parent
    aa = TypeName(oNodeDoc)
 
    If (TypeName(oNodeDoc) = "PartDocument") Then
       
        'Part und MainBody referenzieren
        Dim oPart As Part
        Dim oMainBody As Body
         
        Set oPart = oNodeDoc.Part
        Set oMainBody = oPart.MainBody
     
        ' CATProduct Selektion leeren und mit zu kopierenden Mainbody befüllen
        oSel.Clear
        oSel.Add oMainBody
        oSel.Copy
     
        Dim documents1 As Documents
        Set documents1 = CATIA.Documents
     
        Dim partDocument1 As PartDocument
        Set partDocument1 = documents1.Item("ZielPart.CATPart")

        Set g_oPartDocZiel = partDocument1

        oSel.Clear
        oSel.Add g_oPartDocZiel.Part
     
        ' MainBody in Part einfügen
        oSel.PasteSpecial "CATPrtResultWithOutLink"
   
    End If
 
    For i = 1 To ioNode.Products.Count
     
        Call IterateNode(ioNode.Products.Item(i), iNumber)
 
    Next
    'g_oPartDoc.Part.Update
End Sub


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

AL-Fonse
Mitglied
Entwicklungsingenieur


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

Beiträge: 37
Registriert: 23.02.2010

Win Vista<P>CatiaV5 R16 R19

erstellt am: 14. Aug. 2012 15:05    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 Mark!

Vielen Dank, jetzt funktionierts!
Kannst du mir vielleicht kurz erläutern, was der Unterscheid zwischen Dim und Private ist?

Gruß

AL-Fonse

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 14. Aug. 2012 20: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 AL-Fonse 10 Unities + Antwort hilfreich

Hallo AL-Fonse,

in diesem Falle ist das egal. Ich mache das ganz gerne, da ich es übersichtlicher finde. Unter google findest man ein ganze Menge Erklärungen und es wird da recht ausführlich beschrieben.

"Dim" hätte es in diesem Fall auch getan. Viel wichtiger ist in diesem Fall der Datentyp. Ich verwende ungern den Typ "Document"..."PartDocument" und "ProductDocument" finde ich stabiler. Auch habe ich am Ende nicht das "PartDocument" des Zielparts in die Selektion...sondern das Part selber getan.

Code:
oSel.Add g_oPartDocZiel.Part

Das Selection-Objekt vom Hautprodukt kann auch weiter verwendet werden.

Gruß
  Mark

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