Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Copy & Paste

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:  Copy & Paste (7294 mal gelesen)
Makronizer
Mitglied
Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung


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

Beiträge: 51
Registriert: 15.09.2009

erstellt am: 13. Nov. 2009 11:38    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 liebe Makrogemeinde,

ich habe mal wieder ein Problem, wo ich ohne eure Hilfe nicht weiterkomme...

Randinformationen:

Ich habe ein Makro geschrieben, welches über eine erste Selektionen den Namen eines Bodies ausliest, diesen Namen in einer zweiten Multiselektion sucht, diese gesuchten Bodies kopiert und in ein Part (dritte selektion) in einen gewünschten Körper (4te Selektion) über AddNewAdd mit "As Result" einfügt.
Dies funktioniert wunderbar, solang es sich um unterschiedliche Normteile handelt.

Ziel ist es allerdings auch aus gleichen Normteilen (x-mal mit Copy Paste eingefügt, unterscheidet sich also im Namen nur durch die .x im Instance Name) die Bodies zu kopieren. Und dies funktioniert nicht. Sind die Part Namen gleich, so fügt er zwar die Bodies hinzu, die Referenz ist allerdings immer das gleiche Part, bei Normteilen bedeutet dies, das die Position nicht die gleiche ist.

Ich hoffe, ich konnte dies einigermaßen gut erklären.

Ich möchte also auf den Instance Name inklusive des .x zugreifen um die richtige Referenz zu bekommen, habe leider im Watch-Fenster keine Informationen darüber gefunden.

Irgendwelche Ideen?


Code:

Set oactivePart = abodies(i).Parent.Parent <--- der Name dieses Parent ist bei mehrfach eingefügten Normteilen immer gleich, das heißt er aktiviert beliebig ein Part und kopiert den richtigen Körper aus dem falschen Part, bzw mit der falschen Position!
Brauche daher den Zugriff auf das richtige Part

[Diese Nachricht wurde von Makronizer am 13. Nov. 2009 editiert.]

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

pittyplatsh
Mitglied



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

Beiträge: 62
Registriert: 27.12.2008

CATIA V5 R16 SP3

erstellt am: 14. Nov. 2009 13: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 Makronizer 10 Unities + Antwort hilfreich

Ich würde sagen dass der Code zu wenig ist um zu sagen wo es klemmt. Ein möglichen fehler würde ich in den Selektionen vermuten. Poste bitte mal den gesamten Block von Selektion bis Einfügen der Parts.

Liebe Grüße,
pitty

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

Makronizer
Mitglied
Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung


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

Beiträge: 51
Registriert: 15.09.2009

erstellt am: 16. Nov. 2009 11: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

Die Selektionen funktionieren ja. Das Problem liegt in der Aktivierung des Parts, wo der Körper herauskopiert werden soll. Hier wird scheinbar nach zufallsprinzip ein Part aktiviert, da die Normteile ja alle die gleiche PartNumber besitzen. ich poste mal den kompletten Code des Makros. Bin für jede  Hilfe dankbar.

Set activedoc = CATIA.ActiveDocument

If Err.Number <> 0 Then
    MsgBox "Es ist kein Dokument geöffnet", 16, makroname + " " + Version
    Exit Sub
End If


If (Right(activedoc.Name, 10) <> "CATProduct") Then
    MsgBox "Aktives Dokument ist keine Baugruppe", 16, makroname + " " + Version
    Exit Sub
End If

' Selektion definieren --------------------------------------------------------------
   
    ' Auswahl festlegen ----------------------------------------------------------
    Dim selElements(0)
    selElements(0) = "Part"
   
    'ZielPart angeben ------------------------------------------------------------
    Dim selElements3(0)
    selElements3(0) = "Body"
 
   
    ' Selektion definieren und leeren --------------------------------------------
   
    Dim userSel3 As Object
    Set userSel3 = CATIA.ActiveDocument.Selection
    userSel3.Clear
   
    'Selektion vornehmen lassen -------------------------------------------------
    Dim G As String
    G = userSel3.SelectElement2(selElements3, "Referenz-Publikation wählen.", True)
   
    Dim oSelElem3 As SelectedElement
    Set oSelElem3 = CATIA.ActiveDocument.Selection.Item(1)

    Dim searchString1 As String
    searchString1 = oSelElem3.Value.Name
   
    ' Selektion der Parts, in denen String gesucht und selektiert werden soll -------------------
   
    Set onormteil_window = CATIA.ActiveWindow

    Dim abodies()
    ReDim abodies(0)

    Dim awindowfilter(1)
    awindowfilter(0) = "Part"
    awindowfilter(1) = "Product"

    Set oSel = CATIA.ActiveDocument.Selection
    ibody = 1
    t = 1
    Do

        oSel.Clear
        sstatus = oSel.SelectElement2(awindowfilter, "Selektieren Part " & ibody & " zum weiterkopieren (ESC um weiter zu machen)", True)
       
        ibody = ibody + 1
        t = t + 1
        If sstatus <> "Normal" Then
            Exit Do
        End If
   
        Dim oSelElem2 As SelectedElement
        Set oSelElem2 = CATIA.ActiveDocument.Selection.Item(1)
       
        Dim foundString1 As Object
        Set foundString1 = oSelElem2.Value.Bodies.GetItem(searchString1)
       
        Dim bbodies
       
       
        Set abodies(UBound(abodies)) = foundString1
        ReDim Preserve abodies(UBound(abodies) + 1)
        'osel.Clear
        'osel.Add obody
        'osel.Copy

Loop

Set oSel = CATIA.ActiveDocument.Selection
oSel.Clear


Dim aparts(10, 10)

Dim awindowfilter4(1)
awindowfilter4(1) = "Product"
awindowfilter4(0) = "Part"

Dim anumber_of_parts()
On Error Resume Next
ReDim anumber_of_parts(UBound(abodies) - 1)

If Err.Number <> 0 Then
    Exit Sub
End If

On Error GoTo 0

weiter_selektieren = "Ja"

oSel.Clear
n = 0

For n = 0 To UBound(abodies) - 1
        i = 1
       
       
        If n = 1 Then
       
            Msg = "Sie haben mehrere Körper zum Verteilen selektiert." & vbCr & "" & vbCr & "Möchten Sie alle Korrekturkörper in die soeben selektierten Parts kopieren ?" & vbCr & "" & vbCr & "Bei Selektion von NEIN können für die weiteren Korrekturkörper erneut Zielparts selektiert werden." & vbCr & ""
            Select Case MsgBox(Msg, vbQuestion Or vbYesNo, "Körper verteilen")
            Case vbYes
                ' Ja
                weiter_selektieren = "Nein"
            Case vbNo
                ' Nein
                weiter_selektieren = "Ja"
            End Select
       
        End If
       
       
        If weiter_selektieren = "Nein" Then
            For t = 0 To anumber_of_parts(n - 1) - 1
                Set aparts(n, t) = aparts(n - 1, t)
                anumber_of_parts(n) = anumber_of_parts(n - 1)
            Next
       
       
        Else
       
       
            MsgBox "Parts für den Körper " & abodies(n).Name & " werden selektiert."
       
            oSel.Clear
            X = 1
            For X = 1 To 50
               
                Err.Clear
                On Error Resume Next
                oSel.Clear
                sstatus = oSel.SelectElement2(awindowfilter4, "Selektieren Sie das Zielpart " & i & " in welchen der Körper " & abodies(n).Name & " kopiert werden soll.  (ESC um weiter zu machen)", True)
               
               
                If Err.Number <> 0 Then
                   
                    oSel.Clear
                    sstatus = oSel.SelectElement2(awindowfilter4, "Selektieren Sie das Zielpart " & i & " in welchen der Körper " & abodies(n).Name & " kopiert werden soll.  (ESC um weiter zu machen)", True)
               
                End If
               
                On Error GoTo 0
                Err.Clear
     
               
                If sstatus = "Cancel" Then
                        oSel.Clear
                        anumber_of_parts(n) = i - 1
                        Exit For
                           
                Else
               
                     
                       
                        Set otmpobject = oSel.Item(1).Value
                       
                        sseltype = TypeName(otmpobject)
                       
                        If sseltype = "Product" Then
                       
                            otmpobject.ApplyWorkMode DESIGN_MODE
                           
                           
                            'Check if it a Part
                            On Error Resume Next
                            Err.Clear
                           
                            Set otester = otmpobject.ReferenceProduct.Parent.Part
                           
                            If Err.Number = 0 Then
                           
                                Set otmpobject = otester
                               
                                i = i + 1
               
                                Set aparts(n, i - 2) = otmpobject
                             
                            Else
                           
                                Dim sdMsg As String
                                sdMsg = "Sie haben kein Teil selektiert sondern eine Baugruppe."
                                MsgBox sdMsg, vbExclamation Or vbOKOnly, "Selektion"
                               
                            End If
                            On Error GoTo 0
                       
                        Else
                       
                            i = i + 1
                   
                            Set aparts(n, i - 2) = otmpobject
                       
                        End If
               
                End If
           
            Next
       
    End If

Next
    Dim selElements4(0)
    selElements4(0) = "Body"
' Selektion definieren und leeren --------------------------------------------
   
    Dim userSel5 As Object
    Set userSel5 = CATIA.ActiveDocument.Selection
    userSel5.Clear
   
    'Selektion vornehmen lassen -------------------------------------------------
    Dim H As String
    H = userSel5.SelectElement2(selElements4, "übergeordneten Body bestimmen....", True)
   
    Dim oSelElem4 As SelectedElement
    Set oSelElem4 = CATIA.ActiveDocument.Selection.Item(1)

    Dim searchString2 As String
    searchString2 = oSelElem4.Value.Name

For i = 0 To UBound(abodies) - 1
    oSel.Clear
    onormteil_window.Activate
    oSel.Add abodies(i)
    '-------------------------Publikation von Solidkoerper hinzufügen, falls nicht vorhanden --------------------------------
    Set oactivePart = abodies(i).Parent.Parent
    sSolidname = abodies(i).Name
    Set opartDocument = CATIA.ActiveDocument
    Set product1 = oactivePart.Parent.Product.ReferenceProduct
    Set publications1 = product1.Publications
    Err.Clear
    On Error Resume Next
    Set reference1 = product1.CreateReferenceFromName(oactivePart.Name & "/!" & sSolidname)
    Set publication1 = publications1.Add(sSolidname)
    publications1.SetDirect sSolidname, reference1
    On Error GoTo 0
   
    '--------------------------------------
       
    oSel.Copy

   
    For n = 0 To anumber_of_parts(i) - 1

        Set oPart = aparts(i, n)
        On Error Resume Next

        On Error GoTo 0
       
        Set oSel = CATIA.ActiveDocument.Selection
        oSel.Clear
        oSel.Add oPart
        oSel.PasteSpecial "CATPrtResult"
       
        Set obody = oPart.Bodies.Item(oPart.Bodies.Count)
        oPart.InWorkObject = oSelElem4.Value
        Set newadd = oPart.ShapeFactory.AddNewAdd(obody)
        obody.Name = Replace(obody.Name, "Result of ", "")
        newadd.Name = obody.Name
        oPart.InWorkObject = oPart.Bodies.Item(searchString2)
    On Error Resume Next
    oPart.Update
    Next
Next
   
End Sub

Bitte beachten, bei der Zielpart wahl sind mehrere Selektionen noch nicht möglich. Und der filter "Produkt" funktioniert noch nicht, wollte darüber versuchen das richtige Part anzusteuern, leider bisher erfolglos. Das Makro funktioniert, für solche, die keine Parts mit Copy-Paste mehrfach im Produkt haben. (unterschiedliche Part-Namen)

[Diese Nachricht wurde von Makronizer am 16. Nov. 2009 editiert.]

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 16. Nov. 2009 12: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 Makronizer 10 Unities + Antwort hilfreich

Hallo

dein Problem hat mich vor einiger Zeit selbst lange beschäftigt.
Hier: http://ww3.cad.de/foren/ubb/Forum137/HTML/002548.shtml#000005
findest du die Lösung.

Gruß TomTom

------------------
tomtom1972

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

Makronizer
Mitglied
Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung


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

Beiträge: 51
Registriert: 15.09.2009

erstellt am: 16. Nov. 2009 13: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

Vielen Dank für die schnelle Antwort,

versuche mich durch den Baum durchzuhangeln. Ich hoffe, ich verstehe die im obigen Beitrag beschriebene Vorgehensweise. Bezweifele es jedoch, da ich noch nicht über so viel Programmier-Erfahrung verfüge. Die Idee erschien mir gut, nur hapert es mal wieder an der Ausführung. 

Versuche es jedoch weiter.

Gruß

Makronizer

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

Makronizer
Mitglied
Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung


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

Beiträge: 51
Registriert: 15.09.2009

erstellt am: 17. Nov. 2009 08: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

Wenn ich den Beitrag richtig verstehe, dann gehe ich die Struktur durch und deaktiviere die Nodes, aktiviere dann die jeweiligen Parts neu (bei copy Paste 2 Parts) und initiiere dann das Copy&Paste, in dem ich den richtigen Körper und das Part aus der Selektion (bzw Array) herauspicke. Hab ich das soweit richtig verstanden? Könntest Du mir vllt mit nem Bruchstück deines Codes auf die Sprünge helfen? Ich drehe mich seit Tagen im Kreis und da dies ja bekanntlich nicht besonders produktiv ist, werde ich das ganze wohl erstmal aufschieben. Ärgerlich bloss, da es dann das erste Problem in meiner jungen Programmierkarriere wäre, welches ich nicht gelöst habe...    schlecht fürs Ego.

Gruß

Thomas alias Makronizer

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 19. Nov. 2009 06: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 Makronizer 10 Unities + Antwort hilfreich

Moin,

bist du weiter gekommen oder hast du schon das Handtuch geschmissen?
Ist dir die Ursache deines Problems klar?

Gruß

------------------
tomtom1972

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

Makronizer
Mitglied
Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung


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

Beiträge: 51
Registriert: 15.09.2009

erstellt am: 19. Nov. 2009 07: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

Moin Moin TomTom

ja, das Problem ist mir klar. Habe aber bisher keine Lösung gefunden. Habe verschiedene Dinge ausprobiert. Habe bisher nicht mit einem Array gearbeitet und weiß daher nicht, wie ich die Information des Pfades des Bodies innerhalb der Struktur abspeichere. Das ist der einzige Punkt der mir noch fehlt. Ansonsten funktioniert das Makro ja, mal davon abgesehen, das es sicherlich noch "schöner" gestaltet werden kann.  Schmeiße aber nie das Handtuch, es liegt nur auf eis und ich hoffe, dass ich nach einigen weiteren Makros das Problem lösen kann. Ausgebremst hat mich die Tatsache das ein bekannter OEM angefangen mit M und reimt sich auf ercedes für genau den gleichen anwendungsfall ein Hilfspart benutzt (NTI). Bin aber immernoch der Meinung, das es auch so gehen kann (du sagtest ja bereits, das du dich da eingehend mit bechäftigt hast und bist gleicher meinung). Nur wie heißt es so schön im "Kochbuch"? Wenn man sich Tage mit ein und dem selben Problem rumschlägt muss man es auch irgendwann gut sein lassen. (oder so ähnlich) 

Gruß und frohes Schaffen

Thomas

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

V5Playaz
Mitglied
Dipl.-Ing (BA)


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

Beiträge: 447
Registriert: 12.07.2005

DELL PRECISION 390
3,25 GB RAM
WIN XP PRO SP2
CATIA V5 R16-19
Delmia V5 R19
VB6, VB2008
Adobe Acrobat 9 Pro Extended

erstellt am: 26. Mrz. 2010 07: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 Makronizer 10 Unities + Antwort hilfreich

Hallo Thomas,

besteht das Problem mit der Referenz bei gleichnamigen Bodies?

Hast du schon mal versucht die Bodies umzubenennen (automatisch per Schleife)?
Ich hatte nämlich ein ähnliches Problem mit gleichnamigen Solids.

Grüsse Dominik

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 26. Mrz. 2010 10: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 Makronizer 10 Unities + Antwort hilfreich

Hallo,

das Problem besteht beim Kopieren von Bodies aus einer Struktur, in welcher mehrere Instanzen eines Parts zueinander verschoben verbaut sind: Nach dem Paste ist die Lage falsch.
Das Umbenenennen der Bodies hilf gar nichts, da dies in jeder Intanz des Parts erfolt.

Gruß

------------------
tomtom1972

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: 26. Mrz. 2010 19: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 Makronizer 10 Unities + Antwort hilfreich


Fall1.jpg


Fall2.jpg


Fall3.jpg

 
Hallo alle zusammen,

wenn ich euch richtig verstanden habe, habe ich ein ähnliche Problem.

wie in meinem thread ->  http://ww3.cad.de/foren/ubb/Forum137/HTML/003831.shtml  beschrieben, versuche ich auch körper zu kopieren. Ich habe festgestellt, das es einen Unterschied macht, welche Ebene aktiv ist (Im Catiabaum Blau hinterlegt). Dazu ein beispiel:

Ich verwende für alle drei fälle den gleichen Code:

Code:
 
sendepart.Parent.Activate
    Set sel1 = CATIA.ActiveDocument.Selection
    sel1.Clear
Dim i
    i = 1
        For i = 1 To pubs.Count
       
            If ListView1.ListItems(i).Checked = True Then
                sel1.Add veroeff(i).Valuation
            End If
        Next
    sel1.Copy
    sel1.Clear
Set sel2 = Dokument.Selection
        sel2.Clear
        sel2.Add empfaengerpart
        empfaengerpart.sel2.PasteSpecial "CATPrtResult"
        empfaengerpart.Update

Nun zu  den Unterschieden:

Fall1: Siehe Anhang

Die oberste Produktebene ist aktiv(WorkbenchID "Assembly"). Der Code kopiert mir den Körper Cop1 von Part1 in Part3. Soweit alles OK !

Fall2: Siehe Anhang

Die Instanz des Parts, aus dem Kopiert wird ist aktiv(WorkbenchID "Assembly"). Der Code kopiert mir den Körper Cop1 von Part1 in Part3, aber dieses mal im Kontext, wie eigentlich von mir gewollt!

Fall3: Siehe Anhang

Irgendein Part ist aktiv (WorkbenchID"Prtcfg"). Der Code bricht mit einer Fehlermeldung an der Zeile.

Fazit:

Es macht einen Unterschied welche Ebene im Catia aktiv ist. Wenn wie im Fall 3 das Part, aus dem kopiert wird, aktiv ist, kann ich durch einen Workbenchwelchsel (CATIA.StartWorkbench "Assembly") die richtige Ebene aktivieren. In denn anderen Fällen habe ich keine Chance. Sind meine annahmen richtig?


Ich hoffe diese Erkenntnis bringt uns irgendwie weiter. Weiss jemand eine Antwort?

viel Glück
    Lars

[Diese Nachricht wurde von INLU am 26. Mrz. 2010 editiert.]

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 29. Mrz. 2010 07: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 Makronizer 10 Unities + Antwort hilfreich

Moin,

Es ist richtig, das du für das CopyPaste per Script in der Assembly Design Workbench sein musst; ansonsten erzeugst du einen Error.
Darüber hinaus hat das o.a. Problem überhaupt nichts damit zu tun, welche Produkt-Ebene aktiv ist.
Zum Nachvollziehen: Erstelle dir ein Product, füge ein Part (mit Volumen-Geometrie) zu und instanziiere es zum Beispiel 3x mit jeweils 100 mm Verschiebung.
Versuche nun per Script alle Volumen in ein neues Part zu kopieren (also ein ALLCATPart zu erstellen).
Sehr wahrscheinlich werden alle vier Volumen-Geometrien letztendlich die gleiche Transformation haben , sprich: sie liegen auf der selben Stelle. Ohne große Verschachtelungs-Tiefen in der Struktur, in welcher unterschiedliche Ebenen aktiv sein könnten.
Der Grund: wenn du einfach in der Product-Struktur über z.B. das Catia.ActiveDocument.Product.Products.Item(1).ReferenceProduct.Parent zur "Geometrie" und damit ins Dokument (.Part) wechselst geht die Transformation flöten.
Ausser du gehst wie o.b. mit der Deaktivierung der Knoten vor.
Oder: anstatt die Geometrie selbst der Selektion zuzufügen (.Add) erzeugst du jeweils nur eine Referenz und fügst diese in die Selektion. Dies geschieht übers .CreateReferenceFromName (analog der Referenzen z.B. bei der Constraint-Erzeugung).
Da die Referenz den "Pfad" in der Struktur enthält (Product1/Part1.4 ......) wird jeweils die Geometrie der korrekten Instanz (mit korrekter Transformation) kopiert. Das geht wesentlich schneller als mit der Inaktiviererei der Knoten, ist von Code her aber anspruchsvoller.

Gruß TomTom

------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 29. Mrz. 2010 editiert.]

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

die-schwaben
Mitglied


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

Beiträge: 2
Registriert: 11.04.2010

erstellt am: 11. Apr. 2010 08: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 Nur für Makronizer 10 Unities + Antwort hilfreich

Hallo Makronizer,
hast du dein Problem mit dem Kopieren gelöst? Ich habe dasselbe Prob. Mein Macro soll nach einer Publication fragen, das es kopieren soll, und anschließend das Part oder Product wo es diese Publicationen in einen Body kopiert. Anschließend muß es jede Publication aus den einzelnen Instanzen kopieren und in den Body einfügen. Dies muß aber nacheinander erfolgen, da ein Multiselekt der einzelnen Publicationen dazu führt, dass nur eine Publication kopiert wird. Vieleicht kann mir hier das Forum helfen.
Grüße Alfred

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 11. Apr. 2010 08: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 Nur für Makronizer 10 Unities + Antwort hilfreich

Hallo Alfred,

was willst du genau machen? Du willst Publikationen kopieren oder willst du die Features kopieren die publiziert wurden?

Beschreibe mal was genau dein Ausgangsstand ist (vielleicht auch mal eine Testdatei anhängen bzw. zwei ein Ist-Stand und ein Soll-Stand). Deine Beschreibung ist ziemlich wirr 

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

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

die-schwaben
Mitglied


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

Beiträge: 2
Registriert: 11.04.2010

erstellt am: 11. Apr. 2010 11: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 Makronizer 10 Unities + Antwort hilfreich

Hallo Daniel,
danke für deine schnelle Antwort. Ich habe folgende Ausgangssituation. In einem Product sind ein oder mehrere Parts mehrfach eingebaut, also Partname gleich, aber unterschiedliche Instanznames. Diese Parts sind dann auf verschiedene Achsen constraint, und erhalten so ihre Position in der Konstruktion. In diesen Parts sind mehrere Bodies erzeugt, die publiziert sind. Diese Publications müssen kopiert und in einen Body eingefügt werden. Nun könnte man ja diese Publications der einzelnen Instanzen multiselektieren und dann auf einmal in einen Body einfügen, geht aber nicht, da sie ja alle gleich heißen. Sie kommen ja auch aus einem Part. Das ist eben die mühselige Arbeit, die Zeit kostet. Nun möchte ich ein Macro schreiben, das folgendes tut. Es soll als erstes nach der oder den Publications fragen, die kopiert werden sollen, dannach die Selektion abschließen, und dann nach dem Part fragen, in dem die Publications in einen Body eingefügt werden. Dieses Part liegt aber einem anderen Product, als die Publication. Den Body soll es natürlich auch erzeugen. Ich hoffe, es war verständlich und du hast mir eine Lösung.
Grüße Alfred

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: 25. Sep. 2010 15: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 Makronizer 10 Unities + Antwort hilfreich

Hallo TomTom1972,

ich versuche das problem wieder anzugehen. Ich habe deinen vorschlag ausprobiert. Dabei habe ich folgendes festgestellt:

Wenn ich die Publication über Publications.Valuation anspreche, habe ich eine Reference! Trotzdem habe ich das Problem, das er mir die Publication nicht im Kontext kopiert. Ausser ich habe Fall 2, den ich im vorherigen thread angesprochen habe .

Es muss doch möglich sein eine Publication im Kontext zu  kopieren! Oder ist das so geheim??

mfg
  Lars

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 25. Sep. 2010 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 Makronizer 10 Unities + Antwort hilfreich

Hallo Lars,

für das kopieren aus verschiedenen Instanzen eines Parts kann ich auch eine andere Vorgehensweise vorschlagen. Die Bedingung hierzu ist, dass du die Instanznamen der Quellen wissen musst.
Ich habe es noch nie so verwendet, dass ich ein Body von der User selektieren ließ, für das Erstellen eines AllCATParts funktioniert es aber einwandfrei.

Der Trick bei der Sache ist, dass du ganz eindeutig auf eine Body in einen Instanz zugreifen kannst, wenn du den Pfad dafür zusammenstellst und den Reference zum Kopieren über CreateReferenceFromName erzeugst.
Über die Zusammenstellung des Pfades ist hier ein Beitrag.
Sagen wir, du hast
+Root
  +Product A.1
    +Part A.1
    +Part A.2
und in "Part A" ein Body Namens "ZuKopierendeBody", dann lautet dein Pfad "Root/Product A.2/Part A.2/!ZuKopierendeBody".
Für mein Arbeitgeber habe ich ein kleines Makro geschrieben, was eine komplette Baugruppe kopiert und transformiert. Dabei habe ich das kopieren der Bodies wie eben beschrieben gelöst.
Bei Geometrical sets kann der Teil hinter "/!" etwas komplexer aussehen, hier hilft aber der Makrorekorder. Ich setze normalerweise Constraints und zeichne dieses Prozess auf, da ist der Pfad enthalten.
Ich hoffe, das bringt zumindest einige Leser weiter.

Gruß,
Z.

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: 26. Sep. 2010 10:46    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 Makronizer 10 Unities + Antwort hilfreich

Hallo Zoltan,

danke für die Antwort.

Interessanter Ansatz. Eigentlich arbeite ich ganz ungern mit Elementnamen, da sie ja mehrmals vorkommen können. In diesen Fall, arbeite ich aber mit Publicationen, deren Name ja eindeutig ist.
Ich werdes es mal ausprobieren.

mfg
  Lars

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 27. Sep. 2010 13: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 Makronizer 10 Unities + Antwort hilfreich

Hallo INLU,

mit den Namen der Publikationen geht es definitiv nicht, du musst so vorgehen, wie Zoltan es beschrieben hat.
Du musst nicht mit hardgecodeten Strings abeiten (die z.B. der Makrorekorder aufzeichnet), sondern kannst diese während der Laufzeit (deines Scripts) über die Objektnamen erzeugen.
Die verwendete Methode (.CreateReferenceFromName) ist die einzige Art der Referenzerzeugung, die in Strunkturen mit Instanzen eindeutig ist.
Die gleichen Elementnamen können gar nicht vorliegen, da CATIA das beim Erzeugen nicht zulässt. Du kannst z.B. in einem Geo.Set nicht zwei Punkte mit Namen Point.1 erzeugen. In der Referenz ist der "Pfad" innerhalb des Parts mit "abgelegt".

Die Kopiererei funktioniert dann fehlerfrei.

Gruß TomTom

------------------
tomtom1972

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: 30. Sep. 2010 10:43    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 Makronizer 10 Unities + Antwort hilfreich


GleicherName.jpg


Tools-Optionen.jpg

 
Hallo tomtom,

selbstverständlich kann es zwei Elemente in einem geometrischen Set  mit dem gleichen Namen geben.
Dafür gibt es sogar in den Tools Optionen -Infrastruktur - Teileinfrastruktur eine Einstellung.
Daher habe ich schon damit ein Problem, wenn Elemente den gleichen Namen haben.
Wenn man eine Reference über GetReferencefromObject erzeugt, ist das etwas anderes? Das war mir nicht klar.

mfg
  Lars

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 30. Sep. 2010 21: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 Makronizer 10 Unities + Antwort hilfreich

Hallo Lars,

entweder lässt du diese Einstellung nicht zu (du kannst es auch abprüfen), oder du kannst es mit InternalName versuchen.
Nur geht es leider bei Elementen in Geosets kaum bis überhaupt nicht.
Die Möglichkeiten von VB(A) sind leider begrenzt.

Gruß,
Zoltan

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 01. Okt. 2010 08: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 Makronizer 10 Unities + Antwort hilfreich

Hallo INLU,

das kannst du zwar tun (die Elemente umbenennen, so das sie die gleichen Namen haben), CATIA interessiert sich aber für deine Umbenennerei nicht unbedingt.

Das kannst du mal wie folgt ausprobieren:
Öffne ein neues, leeres Product (PRODUCT1).
Füge zwei Unterschiedliche, leere Parts ein (PART1 und PART2) und erzeuge in jedem einen Punkt, der heißt dann jeweils einfach Point.1.
Jetzt startest du den Makrorekorder und erzeugst einen Coincidence Constraint zwischen den zwei Punkten. Makrorekorder anhalten.
Wenn du den Constraint löscht und das aufgezeichnete Script ablaufen lässt, wird der Constraint wieder erzeugt.
Soweit, so gut.
Lösche den Constraint wieder, geh' ins erste Part und benenne deinen ersten Punkt Point.1 in Point.2 um. Erzeuge noch einen neuen, der heisst dann Point.3 und benenne den in Point.1 um.
Jetzt gehst du wieder ins Product und führst das Script aus.
Und jetzt schau mal nach, worauf dein neu erzeugter Constraint geht.
Nicht auf Point.1 sondern auf Point.2, der mal Point.1 war. Obwohl im Script Point.1 steht.
Wenn du im Constraint Definition Menü (den Constraint im Baum doppelklicken, Menü über More aufklappen) den Punkt selektierst und den Mauszeiger auf dem blau unterlegten Feld stehen lässt zeigt CATIA den Pfad zum Punkt an:
PRODUCT1/PART1.1/PART1/Geometrical Set.1/Point.2

Hmmmm. Und was sagt uns das jetzt?

CATIA arbeitet bei der Referenzerstellung mittels .CreateReferenceFromName teilweise mit den InternalNames (wie Zoltan schon vermutet hat) und die kannst du nicht umbenenennen.

An den InternalName (eines jeden CATIA-Objects) kommst über die Methode .GetItem("ModelElement"), also z.B.

Set oModelElement = oObject.GetItem("ModelElement")
sInternalName = oModelElement.InternalName

oObject ist z.B. dein Point.1

Hierbei handelt es sich um eine nicht Dokumentierte Methode, d.h. du findest nichts in der Doku. Lediglich im Objektkatalog in der Klasse CATIAModelElement.
Und in ein paar beiträgen hier im Forum.

Aber weils sonst zu einfach wäre: der InternalName (IN) eines Punktes hat z.B. den Präfix GSM, heißt also GSMPoint.1, für die Referenzerzeugung (RE) darst du "GSM" nicht mitbenutzen.
Der IN eines Geometrical Sets wiederum hat keinen Präfix, der weggelassen werden muss, er heißt z.B. Open_body.1 (so hiessen die Dinger mal vor der R10 oder so), d.h. für die RE verwendet man den kompletten Namen.
Für Bodies ist es wieder anders.

Erzeugst du eine Referenz über .GetReferencefromObject, so kannst du dir das wie folgt vorstellen: du wechselst aus der Instanz eines Parts über das .ReferenceProduct.Parent ins Dokument, dieses gehört zu den CATIA.Documents.Item(n) (Document-Container). Hier sind die Infos der ürsprünglichen Instanz nicht mehr verfügbar, beim angesprochenen Problemfall waren das mehrere Instanzen eines Parts transformiert, d.h. verschoben in einem Product verbaut.
CATIA nimmt dann beim Kopieren im Kontext immer die Transformation vom ersten Part (im Baum) des Products.

Alle Referenzen in Strukturen (mit Instanzen) funktionieren nur über den Namen (Constraints etc.). Siehe auch Doku.

Hoffe das bringt ein wenig Licht ins Dunkel.

Gruß & einen schönen Tag

TomTom

------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 01. Okt. 2010 editiert.]

[Diese Nachricht wurde von tomtom1972 am 01. Okt. 2010 editiert.]

[Diese Nachricht wurde von tomtom1972 am 01. Okt. 2010 editiert.]

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: 01. Okt. 2010 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 Nur für Makronizer 10 Unities + Antwort hilfreich

Hallo Zoltan, Hallo tomtom,

danke für Eure Antworten.

@Zoltan:
Die Option, dass ein Elementname nur einmal verwendet werden darf, ist für mich keine Option,  da sich in meinen Konstruktion die Namen sehr oft wiederholen.

@tomtom:

<Überrascht guckend> Du hast Recht 

Ist mir noch gar nicht aufgefallen. Dann ist der Weg über den Internen Namen ja eine sehr gute Lösung!

So, ich hoffe, dass ich nun mein Kopiermacro fertig bekomme.

Danke Euch


Thx noch einmal für alle Helfer. Ich hoffe, mahl etwas zurück geben zu können!

mfg
  Lars

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 01. Okt. 2010 18: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 Makronizer 10 Unities + Antwort hilfreich

Hallo,

ist eine erfreuliche Überraschung, dass InternalName jetzt auch für GSM Objekte funktioniert. Mein Wissenstand bisher war, dass es hierfür nur bedingt einsetzbar ist.
Das Öffnet natürlich neue Möglichkeiten...

Danke tomtom!

Zoltan

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

alfquattro
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 03.10.2010

Windows 7
Catia V5R19 SP6 64bit

erstellt am: 03. Okt. 2010 00: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 Makronizer 10 Unities + Antwort hilfreich

Hallo TomTom,

ich versuche auch gerade wie meine Vorgänger im product unter Beibehaltung der Constraints Körper von einem Part in einderes zu kopieren.
So wie ich das verstanden habe muss dass was ich kopieren möchte den "kompletten Pfad" aufweisen. Ich bin soweit gekommen, dass ich den
InternalName wie in eurem posting beschrieben von meinem zu kopierenden Körper erzeugt habe. Jetzt komme ich aber nicht weiter. Ein paar Zeilen Code wären ganz schön um zu sehen, was jetzt zu tun ist um die richtige Selektion hinzubekommen.

Vielen Dank

alfquattro

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: 03. Okt. 2010 10: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 Makronizer 10 Unities + Antwort hilfreich

Hallo alfquattro,

hier ein Teil meiner Lösung. Allerdings verwende ich eine Selektion auf veröffentlichte Elemente, also ohne ModelElement Namen. Aber der Weg dahin müßte der Gleiche sein.

Code:

Schnipp------
          'referenz für das Element das kopiertr werden soll
               
          Set oselroot = selektion.Item(1).LeafProduct  ' LeafProduct funktioniert nur mit einer selektion!!
               
          sRefpfad = oselroot.Name
               
            Set oProduct = oselroot
            Do
              Set oProduct = oProduct.Parent.Parent
              sRefpfad = oProduct.Name & "/" & sRefpfad
            Loop Until oProduct Is CATIA.ActiveDocument.Product
                 
               
          selektion.Clear
Schnapp----
Schnipp----
              'referenz für empfangspartpfad zusammensetzen
               
          eRefpfad = selektion.Item(1).LeafProduct.Name
               
            Set oProduct = selektion.Item(1).LeafProduct
            Do
              Set oProduct = oProduct.Parent.Parent
              eRefpfad = oProduct.Name & "/" & eRefpfad
            Loop Until oProduct Is CATIA.ActiveDocument.Product
Schnapp----
Schnipp----
    'Hier werden die Elemente in eine neue selektion eingefügt und in das Zielpart kopiert

    Set sel1 = CATIA.ActiveDocument.Selection
    sel1.Clear

    Dim i
    i = 1
        For i = 1 To pubs.Count
       
            If ListView1.ListItems(i).Checked = True Then
                Dim copref As Reference
                sRefpfad = sRefpfad & "/!" & veroeff(i).Name
                Set copref = CATIA.ActiveDocument.Product.CreateReferenceFromName(sRefpfad)
                sel1.Add copref
            End If
        Next
    sel1.Copy
    sel1.Clear

If CheckBox_kont.Value = True Then
    Set sel2 = dokument.Selection
        sel2.Clear
        Set copref = CATIA.ActiveDocument.Product.CreateReferenceFromName(eRefpfad & "/!" & empfaengerpart.Bodies.Item(1).Name)
        sel2.Add copref
        sel2.PasteSpecial "CATPrtResult"
        empfaengerpart.update
Schnapp----

Ich hoffe, das hilft dir weiter.

mfg
  Lars


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

alfquattro
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 03.10.2010

Windows 7
Catia V5R19 SP6 64bit

erstellt am: 03. Okt. 2010 13: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 Makronizer 10 Unities + Antwort hilfreich

Hallo Lars,

vielen Dank für Deine Antwort. Das ist genau das was ich gebraucht habe. Wie es funktioniert kann ich aus deinem Code gut erkennen.

Leider beschäftige ich mich nur gelegentlich mit der Makroprogrammierung unter V5, so dass ich noch ein kleines Problemchen mit deinem Code habe. Ich vermute dass die "selektion" bei Dir wie folgt definiert ist:

Set selektion = CATIA.ActiveDocument.Selection

Leider kommt es bei mir dann immer zu einer Fehlermeldung (Das Verfahren Item ist fehlgeschlagen) in der Zeile:

Set oselroot = selektion.Item(1).LeafProduct

Ich vermute, dass das etwas mit dem aktiven Catia Dokument zu tun hat. Ich habe im catia ein Produkt auf, dass zwei Parts enthält, dass Quelldokument und das Zieldokument. Über:

Quelldok.Parent.Activate oder Zieldok.Parent.Activate

aktiviere ich entweder das eine oder andere Dokument. Aber wenn ich auch die Aktivierung des Dokuments weglasse bekomme ich die Fehlermeldung, egal ob ich im catia das Fenster mit dem Produkt aufhabe oder eines der parts.

Ich hoffe Ihr könnt aus meiner Beschreibung erkennen was ich noch falsch mache.

Vielen Dank

alfquattro

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: 03. Okt. 2010 15: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 Makronizer 10 Unities + Antwort hilfreich

Hallo alfquattro,

füge mal die Selektion zur Watchliste hinzu, und gucke, ob dort überhaupt ein Element drin ist. Hört sich für mich so an , als wäre sie leer.

Das mit dem Quelldok.Parent.Activate oder Zieldok.Parent.Activate funktioniert so leider nicht. Es ist meines Wissens nach nicht möglich, die Aktivität eines Parts oder Produktes zu beeinflussen (Ich meine das Blau hinterlegte Element im Catiabaum).
Man kann höchstens durch einen Workbenchwechsel erreichen, dass man bei einem aktiven Parts, in das Assembly-Design wechselt.

mfg

   Lars

P.S.: Das kopieren funktioniert anscheinend nur, wenn das Assembly-Design aktiv ist. Die passende Fehlermeldung kommt aber erst, wenn du die selektion kopieren willst. Dann musst du einfach den Workbench wechseln!

[Diese Nachricht wurde von INLU am 03. Okt. 2010 editiert.]

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

alfquattro
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 03.10.2010

Windows 7
Catia V5R19 SP6 64bit

erstellt am: 03. Okt. 2010 17: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 Makronizer 10 Unities + Antwort hilfreich

Hallo,

Das war natürlich mein Fehler. Du hattest Recht es war gar nichts selektiert. Nachdem ich im Baum ein beliebiges Element meines Quelldokumentes selektiert hatte, funktionierte dein Code wunderbar. Wenn ich mir den srefpfad anschaue, sehe ich den Pfad root-producht/Instanzname_UnterProduct/Instanzname_Quellpart.
Ich wollte aber nichts selektieren, das makro soll eine x beliebige Anzahl an Parts in einem bestimmten Product abarbeiten und dabei die publizierten Körper in ein Zielpart mittels boolscher Operation einbauen. Vereinfacht gesagt sieht die Struktur so aus:

root_Product
  Zielpart (Zielpart_Instanz)
  Quell_Product (Quell_Product_Instanz)
     Quelldok_1(Quelldok_1)
     Quelldok_2(Quelldok_2)
     Quelldok_2(Quelldok_2.1)


Soweit so gut. Ich habe den code zum testen wie folgt angepasst:

Set MeineGeo = Quelldok.FindObjectByName("Hauptkörper")
Set selektion = CATIA.ActiveDocument.Selection
selektion.Clear
selektion.Add MeineGeo
Set oselroot = selektion.Item(1).LeafProduct
.....

Das ganze in eine Schleife gepackt damit für jedes Quelldok der srefpfad angezeigt wird. Das funktiniert jetzt ohne dass ich etwas im catia Baum selektieren muss. Aber bei dem Quelldok_2, dass mehrfach verbaut ist, wird im srefpfad immer der Instanzname des zuletzt eingebauten Quelldoks ausgegeben. Mit anderen Worten der srefpfad für Quelldok_2(Quelldok_2) und Quelldok_2(Quelldok_2.1) ist identisch und lautet:

root_Product/Quell_Product_Instanz/Quelldok_2.1

Wenn ich mit der Selektion gearbeitet habe wie in deinem code ursprünglich vorgesehen, gibt das makro bei entsprechender Selektion auch den korrekten srefpfad mit .../Quelldok_2 zwei aus.
Was kann man tun um ohne Selektion im Baum für das erst verbaute Quelldok_2 den korrekten Instanznamen angezeigt zu bekommen?

Nochmals vielen vielen Dank, ohne Deine Hilfe wäre ich wahrscheinlich in Wochen noch nicht so weit gewesen

alfquattro


[Diese Nachricht wurde von alfquattro am 03. Okt. 2010 editiert.]

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

alfquattro
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 03.10.2010

Windows 7
Catia V5R19 SP6 64bit

erstellt am: 03. Okt. 2010 21: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 Makronizer 10 Unities + Antwort hilfreich

Hallo,

habe das ganze zum laufen gebracht. Man steht sich halt manchmal selber im Weg. Ich habe nur noch ene Anmerkung zu dem Code von Lars.
Wenn der Name der Publikation von dem veröffentlichten Element abweicht geht es nicht. Es muss der Name des Körpers angegeben werden der kopiert werden soll und nicht der Pubikationsname. In den meisten Fällen stimmt er überein, bei mir halt nicht. Aber nochmals vielen vielen Dank an Euch.

alfquattro

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: 25. Jan. 2011 13:10    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 Makronizer 10 Unities + Antwort hilfreich

Hallo!

Ich muss das Problem noch einmal aufgreifen. Der Code aus meinem vorherigen Beitrag hat noch einen Hacken.
Wenn ich zwei Elemente im ersten Part habe, die den gleichen Namen tragen, funktioniert das Verwenden von CreateReferenceFromName nicht, da Catia sich dann wohl nicht entscheiden kann. Ich habe daraufhin versucht, die Referenz über pubs.Item(i).Valuation direkt auf das veröffentlichte Objekt zu setzen. Dadurch hat man das Objekt gleich als Referenz, aber die Referenz zeigt nur auf das selektierte Part, und nicht auf die komplette Hierachie der Veröffentlichung. Diese brauche ich aber, da ich sonst nicht im Kontext kopieren kann.
Beispiel:
Referenz mit CreateReferenceFromName ="Product1/Product3.1/Product4.1/Product5.1/Part1.1/!Gusskorrektur_Anguss_Part1"
Referenz mit pubs.Item(i).Valuation =  "Part1/!Gusskorrektur_Anguss_Part1"

Eine weitere Überlegung war, die Referenz mir CreateReferenceFromName auf den InternalName des ModelElementes zu setzt. Das scheint aber auch nicht zu gehen 

Gibt es eine Möglichkeit die Referenzen zu "addieren" ? Oder gibt es eine andere Lösung?

mfg
    INLU

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

MakroNoob
Mitglied
Ingenieur

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

Beiträge: 1
Registriert: 05.04.2012

erstellt am: 05. Apr. 2012 15:44    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 Makronizer 10 Unities + Antwort hilfreich

Soooo,

ich bin der ehemals Makronizer. 3 Jahre ohne CATIA und nu fang ich mal wieder von vorne an. Also nicht wundern, wenn demnächst wieder doofe Fragen kommen. 

LG

Thomas

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