| |
| KISTERS 3DViewStation - Der Schlüssel zur Einsparung von CAD-Lizenzen, eine Pressemitteilung
|
Autor
|
Thema: Copy Paste Makro (14053 mal gelesen)
|
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 17. Mrz. 2009 13:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Leudz und CATIA Specialistz, ich habe in einem Produkt mit zwei Parts, die jeweils GeoSet's beitzen. Aus einem GeoSet, möchte ich was kopieren (Translate) und ins andere GeoSet einfügen (AsResult). Ich habe bereits ein Makro aufgezeichnet und wollte es mal durchlaufen lassen. Eine Fehlermeldung war das Resultat. Cool wenn einer mir mit dem Problem helfen kann. peace'n greetz sefonse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 17. Mrz. 2009 14:45 <-- editieren / zitieren --> Unities abgeben:
Language="VBSCRIPT" Sub CATMain() Set productDocument1 = CATIA.ActiveDocument Set selection1 = productDocument1.Selection selection1.Clear Set documents1 = CATIA.Documents Set partDocument1 = documents1.Item("TEST-Teil-1.CATPart") Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Einfaerbeflaechen") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapeTranslate1 = hybridShapes1.Item("Translate-1") selection1.Add hybridShapeTranslate1 selection1.Copy Set documents1 = CATIA.Documents
Set partDocument1 = documents1.Item("ET-TEST-Teil.CATPart") Set part1 = partDocument1.Part Set parameters1 = part1.Parameters Set hybridShapeSurfaceExplicit1 = parameters1.Item("Translate-1") part1.UpdateObject hybridShapeSurfaceExplicit1 End Sub Das ist das Makro welches ich aufgezeichnet habe. hier Fehlermeldung: Set hybridShapeSurfaceExplicit1 = parameters1.Item("Translate-1") "The method item failed" ist die Fehlermeldung peace Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 17. Mrz. 2009 15:02 <-- editieren / zitieren --> Unities abgeben:
Language="VBSCRIPT" Sub CATMain() Set productDocument1 = CATIA.ActiveDocument Set selection1 = productDocument1.Selection selection1.Clear Set documents1 = CATIA.Documents Set partDocument1 = documents1.Item("TEST-Teil-1.CATPart") Set part1 = partDocument1.Part Set bodies1 = part1.Bodies Set body1 = bodies1.Item("Translate-1") selection1.Add body1 selection1.Copy Set partDocument2 = documents1.Item("ET-TEST-Teil.CATPart") Set part2 = productDocument1.Part Set selection2 = partdocument2.selection selection2.Add part2 selection2.PasteSpecial "CATPrtAsResult" part2.Update End Sub Mein zweites Makro gibt genau die gleiche Fehlermeldung an der angedeuteten Zeile. Katja iz ne blöde Zicke, aber trotzdem nimmt sie jeder durch
peace Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 17. Mrz. 2009 23:26 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Hallo sefonse, darf ich mal fragen, warum Du den funktionieren Teil aus dem ersten Makro nicht 1:1 übernimmst, sondern änderst und Dich dann auch noch wunderst, warum er nicht mehr funktioniert? Wenn Du Dein Teil "TEST-Teil-1.CATPart" nicht geändert hast, kann es gar nicht funktionieren, denn beim ersten Mal war Dein "Translate-1" ein "HybridShape" und nun soll es ein "Body" sein! Als logische Konsequenz Deiner Beiträge sollte das zweite Script so lauten: Code: Language="VBSCRIPT" Sub CATMain()Set productDocument1 = CATIA.ActiveDocument Set selection1 = productDocument1.Selection selection1.Clear Set documents1 = CATIA.Documents Set partDocument1 = documents1.Item("TEST-Teil-1.CATPart") Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Einfaerbeflaechen") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapeTranslate1 = hybridShapes1.Item("Translate-1") selection1.Add hybridShapeTranslate1 selection1.Copy Set partDocument2 = documents1.Item("ET-TEST-Teil.CATPart") Set part2 = productDocument1.Part Set selection2 = partdocument2.selection selection2.Add part2 selection2.PasteSpecial "CATPrtAsResult" part2.Update End Sub
mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 18. Mrz. 2009 11:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, danke für deine Antwort. Set part2 = productDocument1.Part 6.Zeile von unten, Fehlermeldung: description: das objekt ünterstützt die eigenschaft der methode nicht --> 'productdocument1.part HILFE!!! peace Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 18. Mrz. 2009 11:23 <-- editieren / zitieren --> Unities abgeben:
|
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 18. Mrz. 2009 12:39 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 18. Mrz. 2009 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Servus Änder die Zeile mal in: Code: Set partDocument2 = documents1.Item("ET-TEST-Teil.CATPart") Set part2 = productDocument2.Part
Ist das Bauteil "ET-TEST-Teil.CATPart" geöffnet?Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 18. Mrz. 2009 13:23 <-- editieren / zitieren --> Unities abgeben:
|
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 19. Mrz. 2009 01:04 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Hallo sefonse, sorry, da hatte ich doch noch eine falsche Zeile übersehen! Die Zeile für "Part2" muss natürlich wie folgt lauten: Code: Set part2 = partDocument2.Part Set selection2 = partDocument2.selection
Dann sollte es funktionieren... mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 19. Mrz. 2009 17:05 <-- editieren / zitieren --> Unities abgeben:
|
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 19. Mrz. 2009 22:44 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Aha, was erwartest du? Wo sind deine Lösungsansätze, ausser dem Aufzeichnungscode? Code: Sub copyanpasteresult() 'Set CATIA = GetObject("", "CATIA.Application")Dim oActiveDoc As ProductDocument Set oActiveDoc = CATIA.ActiveDocument 'Ob_a_P_u_P_s Dim oPart1Doc As PartDocument Dim oPart2Doc As PartDocument Set oPart1Doc = oActiveDoc.Product.Products.Item(1).ReferenceProduct.Parent Set oPart2Doc = oActiveDoc.Product.Products.Item(2).ReferenceProduct.Parent 'z_ko_Obj_u_Ein_s Dim oCopyObject As HybridShape Dim oPasteObject As HybridBody Set oCopyObject = oPart1Doc.Part.HybridBodies.Item(1).HybridShapes.Item("Translate-1") Set oPasteObject = oPart2Doc.Part.HybridBodies.Item("Man piss die Wand an") 'ko_u_ei_ oActiveDoc.Selection.Clear oActiveDoc.Selection.Add oCopyObject oActiveDoc.Selection.Copy oActiveDoc.Selection.Clear oActiveDoc.Selection.Add oPasteObject oActiveDoc.Selection.PasteSpecial "CATPrtResultWithOutLink" oPart2Doc.Part.Update Ende der Suppe
Produkt aktiv, 2 Parts, das zu kopierende Item ("Translate-1") im Quellpart und im Zielpart, ein Geoset ("Man piss die Wand an") aus (Donnie Brasco) oder auch Antwort http://ww3.cad.de/foren/ubb/Forum137/HTML/003196.shtml#000002 und ich erkenne immer noch nicht mehr, als nur das Posten von aufgezeichneten Befehlsfolgen... ...aber macht mal
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 19. Mrz. 2009 23:44 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Hallo sefonse, ich falle doch immer wieder darauf rein: Es gibt nur eine Selection im aktiven (Root-)Product! Also muss die Zeile Code: Set selection2 = partdocument2.selection
so lauten:Code: Set selection2 = CATIA.ActiveDocument.selection selection2.Clear
Ansonsten sind auch die Fragen von "Thomas Harmening" nicht von der Hand zu weisen: Hast Du Dich schon mal tiefer in die VB-Programmierung versucht einzuarbeiten? mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 22. Mrz. 2009 19:14 <-- editieren / zitieren --> Unities abgeben:
@alle: danke, aber irendwie läuft es nicht, ich versuche mich schon hineinzu arbeiten, jedoch hat mir das buch(Makroprogrammierung mit Visual Basic Script) nur teilweise geholfen. Es kann doch außerdem nicht so kompliziert sein copy/pastespecial als automatische operation zu editieren. Ihr würdet mir sehr bei meiner Diplomarbeit behilflig sein, wenn wir es tatsächlich hinkriegen. peace'n greetz sefone Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 23. Mrz. 2009 19:58 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
wie thomas schon schrieb... es ist auch ganz einfach... ich habe etwas ähniches zum kopieren von publizierten bodys gemacht. Code: '# COPY AS RESULT WITH LINK function CopyAsResult(quellPart, quellBody, zielPart) dim s '## deklarieren der selektion set s = CATIA.ActiveDocument.Selection '## zuweisen von s s.Clear '## vorhandene selektion löschen s.Add(quellBody.Valuation) '## quellbody der selektion hinzufügen s.Copy() '## selektion kopieren s.Clear '## selektion erneut löschen s.Add(zielPart) '## zielpart der selektion hinzufügen s.PasteSpecial "CATPrtResult" '## einfügen '[...] abschnitt zum umbenennen entfernt zielPart.UpdateObject zielPart.Bodies.Item(zielPart.Bodies.Count) '## kleines update zum schluss end function
vor der wilden progammiererrei kann ich da nur etwas zu lesen empfehlen. der hanser verlag bietet einiges zu dem thema. oder einfach mal die reference anlesen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sefonse Mitglied Student
Beiträge: 18 Registriert: 24.02.2009
|
erstellt am: 24. Mrz. 2009 10:27 <-- editieren / zitieren --> Unities abgeben:
|
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 24. Mrz. 2009 20:35 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
hmm, soll ich jetzt mitraten? ... gezippte 23 entpacken, Product23 laden, Desingmodus, Fokus auf das Produkt. und wahlweise das Catscript oder das catvbs ausführen... IMHO sollte in beiden Fällen die Fläche als Result ins andere Part kopiert werden. ... was ist denn das Thema der Diplomarbeit? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DuffM4nUS Mitglied Konstrukteur
Beiträge: 26 Registriert: 14.04.2016 @ WORK CATIA V5 R19 SP9 Windows 7 x64 Professional SP1 i7-3740 @ 2.7GHz 16GB RAM NVIDIA Quadro 3000M 500GB SHDD
|
erstellt am: 04. Dez. 2017 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Hallo an euch Experten! Ich möchte mit folgendem Code alle PartBodies eines Assemblies sukzessive kopieren und als Result mit Link in ein bestehendes Part innerhalb des Assemblies einfügen. Das Ziel-Part ist dabei vorher manuell "aktiv" (blau markiert) gemacht wurden. Der Code funktioniert bis auf die Kopieroperation wunderbar. Für jede Hilfe bin ich sehr dankbar! Ich habe es bereits mit einer zweiten Selektion, Selektion auf PartDokument und den hier im Forum hervorgebrachten Lösungen versucht. Selbst wenn ich es mit dem Makrorekorder aufzeichne kommt immer der Fehler: "Selected Elements not allowed for this operation". Vielen Dank für Tipps & Hilfestellungen! Steve Code: Option ExplicitDim oActivePart As Part Dim oSel As Selection Dim strActivePartName As String Sub CATMain() Dim oRoot As ProductDocument Dim oInstance As Product Set oRoot = CATIA.ActiveDocument Set oSel = oRoot.Selection oRoot.Product.ApplyWorkMode DESIGN_MODE oSel.Clear oSel.Search "(CATPrtSearch.PartFeature),in" Set oInstance = GetActivePart(oSel.Item(1).Value.Name) Set oActivePart = oInstance.ReferenceProduct.Parent.Part strActivePartName = oActivePart.Name oSel.Clear Call CopyPartBody(oRoot.Product.Products) oActivePart.Update End Sub Function CopyPartBody(oAssembly As Products) On Error GoTo 0 Dim oProduct As Product Dim oPartBody As Body For Each oProduct In oAssembly If oProduct.Products.Count = 0 Then If oProduct.PartNumber <> strActivePartName Then oSel.Clear Set oPartBody = oProduct.ReferenceProduct.Parent.Part.MainBody oSel.Add oPartBody oSel.Copy oSel.Clear oSel.Add oActivePart oSel.PasteSpecial "CATPrtResult" oSel.Clear End If Else Call CopyPartBody(oProduct.Products) End If Next End Function Function GetActivePart(DocumentName As String) On Error GoTo 0 Dim oDocuments As Documents Dim oDocument As Document Dim oProduct As Product Set oDocuments = CATIA.Documents For Each oDocument In oDocuments For Each oProduct In oDocument.Product.Products If DocumentName = oProduct.PartNumber Then Set GetActivePart = oProduct Exit Function End If Next Next End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sm1leX Mitglied Maschinenbau (B.Eng)
Beiträge: 27 Registriert: 13.09.2018 Win 10 64-bit Intel Xeon E5-1620 CATIA V5 R28/R29 Solidworks
|
erstellt am: 04. Okt. 2018 07:54 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Guten Tag allerseits in einem alten Thema, ich habe das Vorhaben, ein Copy Paste Makro zu bauen, dass mir eine Fläche aus einem Geoset eines Parts in ein Geoset eines anderen Parts einfügt. Klappt wunderbar mit der o.g. Vorlage 23.zip. Allerdings greift diese nur auf GeoSets erster Ordnung zu. Ich habe ein GeoSet im GeoSet. Dort soll es rein. Kann mir einer hierzu den Lösungsweg nennen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Okt. 2018 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für sefonse
Servus Indem du auf das entsprechende Unter-GeoSet per Namen zugreifst zB: Code: Set oPasteObject = Part2Doc.Part.HybridBodies.Item("NameDesOberGeoSets").HybridBodies.Item("NameDesUnterGeoSets")
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |