Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Erstellen eines CCP-Links

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:  Erstellen eines CCP-Links (3475 mal gelesen)
Knowledge
Mitglied
Dipl. Ing.


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

Beiträge: 106
Registriert: 02.03.2004

erstellt am: 11. Nov. 2008 15:41    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


Beispiel.zip

 
Hallo zusammen,

ich habe mal wieder ein Problem. Ich hoffe, dass mir erneut jemand seine Hilfe zuteil werden lassen wird.

Ziel ist es, eine Ebene von einem CATPart in ein anderes CATpart zu kopieren, dass in einer Produktstruktur verbaut ist.

Szenario:
01: entpacke die zip-Datei im Anhang.
02: Starte CATIA V5 R18 SP2 Hf17
03: lade das Test_Product.CATProduct nach CATIA V5
04: lade das Test_from.CATPart nach CATIA V5
05: Starte die Forumfrage.catvba im VBA-Editor
06: führe das Makro aus.
07: Fehler: "Selected Element(s) not allowed for
    this operation."

Hat jemand eine Ahnung, woran das liegen kann?

Herzlichen Dank für Eure Hilfe.


Anhang: Quellcode für Schnellleser:

Option Explicit
Sub main()
' Auswahl des CATParts ---------------------------------------
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim GeladenenDokumente As Integer
GeladenenDokumente = documents1.Count
Dim PotDokument As PartDocument
Dim PotPart As Part
Dim NameGefundenesElement As String
Dim ii As Integer
Dim OffeneCATPartsGefunden As Integer
OffeneCATPartsGefunden = 0
For ii = 1 To GeladenenDokumente
  If TypeName(documents1.Item(ii)) = "PartDocument" Then
  OffeneCATPartsGefunden = OffeneCATPartsGefunden + 1
  Set PotDokument = documents1.Item(ii)
  PotDokument.Activate
  Set PotPart = PotDokument.Part
  NameGefundenesElement = PotPart.Name
  If NameGefundenesElement = "Test_from" Then
    Set PotDokument = CATIA.ActiveDocument
    ii = GeladenenDokumente
  End If
  End If
Next
' ------------------------------------------------------------
' Auswahl des CATParts ---------------------------------------
Dim part1 As Part
Set part1 = PotDokument.Part
Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies
Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.GetItem("Output")
Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = hybridBody1.HybridShapes
Dim NoHybridShapes1 As Integer
NoHybridShapes1 = hybridShapes1.Count
Dim hybridShape1 As HybridShape
Dim selection1 As Selection
Set selection1 = PotDokument.Selection
selection1.Clear
For ii = 1 To NoHybridShapes1
  If hybridShapes1.Item(ii).Name = "Test_Plane" Then
  Set hybridShape1 = hybridShapes1.Item(ii)
  selection1.Add hybridShape1
  selection1.Copy    ' hier wird die Ebene kopiert.
  End If
Next
' ------------------------------------------------------------ '' Wechsele in das  CATProduct -------------------------------
Dim documents2 As Documents
Set documents2 = CATIA.Documents
GeladenenDokumente = documents2.Count
Dim PotProduct As ProductDocument
Dim PotCATProduct As Product
Dim OffeneCATPProductsGefunden As Integer
OffeneCATPartsGefunden = 0
For ii = 1 To GeladenenDokumente
  If TypeName(documents2.Item(ii)) = "ProductDocument" Then
  OffeneCATPProductsGefunden = OffeneCATPProductsGefunden + 1
  Set PotProduct = documents2.Item(ii)
  PotProduct.Activate
  Set PotCATProduct = PotProduct.Product
  NameGefundenesElement = PotCATProduct.Name
  If NameGefundenesElement = "Test_Product" Then
    Set PotProduct = CATIA.ActiveDocument
    ii = GeladenenDokumente
  End If
  End If
Next
'' --------------------------------------------------------
''' Selektiere einzeln nacheinander die Parts unterhalb ---
''' des Productes und füge die CPG ein. -------------------
Dim productDocument1 As Document
Set productDocument1 = PotProduct
Dim product1 As Product
Set product1 = productDocument1.Product
Dim products1 As Products
Set products1 = product1.Products
Dim product2 As Product
Set product2 = products1.Item(1)
Dim oDocument1 As Document
Set oDocument1 = product2.ReferenceProduct.Parent
Dim Test As String
Test = oDocument1.Name
Dim testDocuments As Documents
Set testDocuments = CATIA.Documents
Dim TestDocument1 As PartDocument
Set TestDocument1 = testDocuments.Item(Test)
Dim oPart As Part
Set oPart = oDocument1.Part
Dim hybridBodies01 As HybridBodies
Set hybridBodies01 = oPart.HybridBodies
Dim hybridBody01 As HybridBody
Set hybridBody01 = hybridBodies01.Item("Input")
Dim hybridShapes02 As HybridShapes
Set hybridShapes02 = hybridBody01.HybridShapes
Dim Selection2 As Selection
Set Selection2 = TestDocument1.Selection
Selection2.Clear
Selection2.Add hybridBody01 'Container in dem es sein soll
Selection2.PasteSpecial ("CATPrtResultWithOutLink")
Selection2.Clear
End Sub

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

Jens Hansen
Mitglied
Senior Consult


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

Beiträge: 1055
Registriert: 05.08.2000

Win7
CATIA V5 R19
VB.Net
C#

erstellt am: 11. Nov. 2008 20:47    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 Knowledge 10 Unities + Antwort hilfreich

Hallo,
ich habe es mal soweit gelöst. Allerdings fehlt noch eine Schleifenbedingung für die reihenweise Auswahl der Parts im produkt. das sollte aber kein Problem darstellen.
Hier der geänderte Quellcode:
########################################
'' Selektiere einzeln nacheinander die Parts unterhalb des Productes und füge die CPG ein. -----------
    Dim productDocument1 As Document
    Set productDocument1 = PotProduct
    Dim product1 As Product
    Set product1 = productDocument1.Product
    Dim products1 As Products
    Set products1 = product1.Products
    Dim product2 As Product
    Set product2 = products1.Item(1) 'Hier wird nur das erste part ausgewählt => es fehlt also noch eine Schleife
    Dim oDocument1 As Document
    Set oDocument1 = product2.ReferenceProduct.Parent
    Dim Test As String
    Test = oDocument1.Name
    Dim testDocuments As Documents
    Set testDocuments = CATIA.Documents
    Dim TestDocument1 As PartDocument
    Set TestDocument1 = testDocuments.Item(Test)
   
    'Neuer Quellcode +++++++++++++++++++++++++++++++++++++++
    CATIA.Documents.Open (testDocuments.Item(Test).FullName)
    Set TestDocument1 = CATIA.ActiveDocument
    Dim oPart As Part
    Set oPart = TestDocument1.Part
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
    Dim hybridBodies01 As HybridBodies
    Set hybridBodies01 = oPart.HybridBodies
    Dim hybridBody01 As HybridBody
    Set hybridBody01 = hybridBodies01.Item("Input")
    Dim hybridShapes02 As HybridShapes
    Set hybridShapes02 = hybridBody01.HybridShapes
    Dim Selection2 As Selection
    Set Selection2 = TestDocument1.Selection
    Selection2.Clear
    Selection2.Add hybridBody01 'Container in dem es sein soll
    Selection2.PasteSpecial ("CATPrtResultWithOutLink")
    Selection2.Clear
   
    'Neuer Quellcode +++++++++++++++++++++++++++++++++++++++
    TestDocument1.Save
    TestDocument1.Close
    productDocument1.Close
    CATIA.Documents.Open (productDocument1.FullName)
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++
######################################

Viel Erfolg

Jens Hansen

------------------
Inoffizielle CATIA-Hilfeseite
Private Seite
Xing

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

Knowledge
Mitglied
Dipl. Ing.


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

Beiträge: 106
Registriert: 02.03.2004

erstellt am: 12. Nov. 2008 08: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

Hallo
Super Lösung; Es läuft!

Siehst du eine Möglichkeit ohne das Öffnen in einem neuen Fenster zu arbeiten?

Schöne Grüße

Ralf

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

Jens Hansen
Mitglied
Senior Consult


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

Beiträge: 1055
Registriert: 05.08.2000

Win7
CATIA V5 R19
VB.Net
C#

erstellt am: 12. Nov. 2008 09: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 Nur für Knowledge 10 Unities + Antwort hilfreich

Hallo,
weniger, da durch öffnen der Datei der expliziete Zugriff ermöglicht wird. Mit Aufwand kann man das neue Fenster minimieren (Fenster auslesen und verkleinern) oder ganz einfach das ganze V5 minimieren - allerdings kriegt dann der Anwender einen Schreck wenn plötzlich V5 weg ist 

SG

Jens Hansen

------------------
Inoffizielle CATIA-Hilfeseite
Private Seite
Xing

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

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 12. Nov. 2008 10:26    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 Knowledge 10 Unities + Antwort hilfreich

Hallo Knowledge, Hallo Jens,

das "Open in new window" ist nicht erforderlich!
Es reicht, die Selection des Root-ProductDocuments zu nehmen, damit ist das Selektieren aller Elemente innerhalb des Rootproducts möglich.
Hier ein aus Makrorekorder und Handarbeit zusammengestückelter Code-Schnippsel:

Code:
Sub CATMain()

    Set partDocument1 = CATIA.ActiveDocument
   
    Set Selection1 = partDocument1.Selection

    Selection1.Clear

    Set part1 = partDocument1.Part

    Set hybridBodies1 = part1.HybridBodies

    Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1")

    Set hybridShapes1 = hybridBody1.HybridShapes

    Set hybridShapePlaneOffset1 = hybridShapes1.Item("Plane.1")

    Selection1.Add hybridShapePlaneOffset1
   
    Selection1.Copy
   
   
    '### 1.Schritt ist abgeschlossen, Ebene befindet sich im Zwischenspeicher
   
    '### ZIEL-Product aktivieren --> NAMEN ANPASSEN
    CATIA.Windows.Item("TEST_PRODUCT.CATProduct").Activate

    '### Selection auf ProductDocument!!!
    Set Selection1 = CATIA.ActiveDocument.Selection
   
    Dim i As Integer, pd As ProductDocument, rp As Product
    Set pd = CATIA.ActiveDocument
    Set rp = pd.Product

    '# Schleife über alle Parts im RootProduct
    For i = 1 To rp.Products.Count
        Set TargetPart = rp.Products.Item(i).ReferenceProduct.Parent.Part
        Selection1.Add TargetPart
        '### Part selektiert -> Ebene wird im 1.GeoSet erstellt
        Selection1.PasteSpecial "CATPrtResultWithOutLink"
        Selection1.Clear
        TargetPart.Update
    Next i
End Sub


Gruß
CAMiCADse

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

Criollo
Mitglied



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

Beiträge: 42
Registriert: 07.11.2008

erstellt am: 12. Nov. 2008 13: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 Knowledge 10 Unities + Antwort hilfreich

Hallo,

ich habe das mit dem Öffnen der Parts aus dem Rootproduct heraus in einem neuen Fenster, auch für meinen Fall (siehe Copy/Paste Problem) angewandt. Es klappt zwar, aber da ich die Geometrien positionsgenau benötige, bin ich in einer Sackgasse.
Über das Einfügen meiner Punkte in das seperat geöffnete Part, werden die Punkte immer in Bezug auf das absolute Achsensystem erstellt (egal ob die Punkte isoliert sind oder nicht).

Gibt es eine Möglichkeit, die Paste-Aktion auch im Kontext des Products durchzuführen . Die von CAMiCADse beschriebene Lösung habe ich schon versucht, leider endet diese immer in der von Knowledge beschriebenen Fehlermeldung.

Vielleicht kann mir dazu ja noch jemand weiterhelfen.

Viele Grüsse
Crio

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

Knowledge
Mitglied
Dipl. Ing.


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

Beiträge: 106
Registriert: 02.03.2004

erstellt am: 12. Nov. 2008 14: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

Hey CAMiCADse

Dein Vorschlag entspricht im Grundsatz dem, was ich oben beschrieben habe.
Jedoch habe ich die Intention das Element in einem bestimmten Ordner abzulegen.

Hast Du dafür eine Idee?

Gruß

Ralf

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

INLU
Mitglied
Konstrukteur Automotive


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

Beiträge: 71
Registriert: 01.03.2008

erstellt am: 28. Jan. 2009 18:26    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 Knowledge 10 Unities + Antwort hilfreich

Hallo Zusammen,

Ich habe ein ähnliches Problem wie Knowledge.

Ich habe ein Product mit zwei Parts geöffnet. Nun möchte ich den Hauptkörper von ein in das andere Part kopieren. Wenn das Produkt aktiv ist(Blau unterlegt), dann funktioniert folgender Code einwandfrei. Wenn aber ein Part aktiv ist, bricht das Makro bei Zeile 80 mit der Fehlermeldung "Die ausgewählten Elemente sind für diese Operation nicht zulässig.". Woran liegt das ? Da ich den Körper im Kontext kopieren möchte, kann ich auch nicht die Parts einzeln öffnen wie in der Problemlösung weiter oben. Ich dachte immer, dass es bei Makros egal ist, welches Element aktiv ist, da man immer vom AktiveDocument ausgeht. Aber anscheinend gibt es da noch Unterschiede.

Code:

10            Set Document = CATIA.ActiveDocument
20            Set oSendepart = Document.Product.Products.Item(1).ReferenceProduct.Parent
30            Set oEmpfangspart = Document.Product.Products.Item(2).ReferenceProduct.Parent
             
40            Set selection1 = Document.Selection
50            Set mainbody1 = oSendepart.Part.MainBody
60            selection1.Clear
70            selection1.Add mainbody1
80            selection1.Copy
90            selection1.Clear
             
100           Set selection2 = Document.Selection
110           selection2.Add oEmpfangspart.Part
             
120           selection2.PasteSpecial "CATPrtResult"
130           selection2.Clear
             
140           oEmpfangspart.Part.Update
----------------

Das Marco läuft als VBA auf R16 SP5

Mfg
   INLU

[Diese Nachricht wurde von INLU am 28. Jan. 2009 editiert.]

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