| |
| Dassault PLM Integrationen mit der 3DViewStation, eine Pressemitteilung
|
Autor
|
Thema: Workaround Veröffentlichungen bzw. Publications (17734 mal gelesen)
|
Florian Held Mitglied Teamleiter CAD-Solutions
Beiträge: 81 Registriert: 07.09.2006
|
erstellt am: 13. Nov. 2007 07:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe zu dem Thema schon einige interessante Beiträge gefunden und würde gerne hiermit die wichtigsten Punkte zu Veröffentlichungen zusammenfassen und noch ungelöste probleme diskutieren bzw. natürlich versuchen zu lösen ;-). Zunächst einmal die ungelösten Probleme, weiter unten platziere ich ein paar Musterlösungen in catvbs (VBscript). Natürlich liefere ich die Beispiel/Musterlösungen nicht aus reiner Gutmütigkeit sondern hoffe dass mir auch jemand bei den noch ungelösten Problemen hilft ;-) --- ungelöste Probleme ------------------------------------------------------------------------------------------------------------ Name einer Publication ändern, Element mit umbennenn und Verknüpfungen anpassen. http://ww3.cad.de/foren/ubb/Forum137/HTML/001818.shtml#000000 Mit folgenden Problemen kämpfe ich und versuche Sie zunächst nacheinander zu lösen: 1. Umbenennen einer Veröffentlichung – Wie geht das ohne löschen und neu einfügen? 2. Das Element der Publication mit umbenennen oder nicht? Von Hand gibt es hier unter Tools -> Veröffentlichungen -> Optionen Einstellmöglichkeiten 3. Das Element wurde bereits als Ergebnis mit Verknüpfung weitergegeben und der Verknüpfung soll bestehen bleiben. Von Hand: Ist dass Produkt und die Parts mit den Import-Links geladen, würde sich die Veröffentlichung bei umbenennen unter Tools -> Veröffentlichungen mit einem kleinen Fenster nach folgendem „Motto“ melden: Hi, diese Parts verwenden die nun umbenannte Veröffentlichung, soll ich ihnen mitteilen dass diese nun anders heißt (Verknüpfungen bleiben intakt) oder nicht (Verknüpfung unterbrochen da Veröffentlichung nicht mehr gefunden wird). Aufruf
Code:
Funktion
Code:
Publizierte und als Ergebnis mit Verknüpfung kopierte Elemente prüfen (Nur in diesem Beitrag) Werden Elemente als Ergebnis mit Verknüpfung weitergegeben möchte ich die Erfolgreiche wiedergabe ins ZielPart prüfen, ob die Elemente dort wirklich angekommen sind, da aufgrund von z.B. Kontextfehlern dies ja nicht unbedingt der Fall sein muss. Zudem möchte ich Optional das Element im Zielpart umbenennen und von mir aus die Positionsnummer des Partes als Präfix einfügen damit man leichter Erkennt woher das Element kommt.
Bin ich noch am basteln, trage ich nach. Wenn mir jemand unter die Arme greifen will und den Code postet habe ich auch nix dagegen ;-) Aufruf
Code:
Funktion
Code:
--- Tutorial mit Beispielen --------------------------------------------------------------------------------------------------------- Publication in VBScript (Publications aus selektierten Elementen erstellen) http://ww3.cad.de/foren/ubb/Forum137/HTML/000853.shtml#000000 http://ww3.cad.de/foren/ubb/Forum137/HTML/002480.shtml#000000 Eins vorweg: Werden veröffentlichungen mit Makro erstellt bzw. verändert, aktualisiert sich die Liste der Publications erst wenn man von Hand Tools -> Veröffentlichungen aufruft oder dass Part speichert/schließt/öffnet. Also nicht gleich verzweifeln wenn des Makro anscheinend gar nichts macht. Klingt komisch ist aber so ;-) Aufruf
Code:
Sub CATMain()' <START:Selektierte_Elemente_publizieren> Set MyPart = CATIA.ActiveDocument Set MySel = MyPart.Selection Set MyPart = CATIA.ActiveDocument If MySel.Count = 0 Then MsgBox "Nix selektiert - Abbruch!", vbInformation Exit Sub Else X = MsgBox("Sollen die ausgewählten Elemente Veröffentlicht werden?", vbYesNo) If X <> 6 Then Exit Sub End If For i = 1 To MySel.Count Call AddPublication(MyPart.Product, MySel.Item(i)) Next MsgBox "Fertig, nicht vergessen ggf. Tools -> Veröffentlichungen aufzurufen oder Part speichern/schließen/öffnen um Anzeige zu aktualisieren!", vbInformation ' <ENDE:Selektierte_Elemente_publizieren> end Sub
Funktion
Code:
Function AddPublication(MyPartproduct, MyElement) 'Publiziert ein Element Set MyParentProduct = MyPartproduct MyRefName = MyParentProduct.PartNumber & "/!" & MyElement.Value.Name Set MyRef = MyParentProduct.CreateReferenceFromName(MyRefName) MyElement = "Publication_von_" & MyElement.Value.Name MyPartproduct.Publications.Add (MyElement) MyParentProduct.Publications.SetDirect MyElement, MyRef End Function
Publications löschen (Nur in diesem Beitrag) Etwas unwiderruflich zu löschen geht immer einfach: Aufruf
Code:
Sub CATMain()' <START:Publications_entfernen> Set MyParentDoc = CATIA.ActiveDocument.Product MyPublist = GetPublications(CATIA.ActiveDocument) MyString = "" For i = LBound(MyPublist) To UBound(MyPublist) X = MsgBox("Folgende Veröffentlichung löschen?" & Chr(10) & MyPublist(i).Name, vbYesNo, "Sind Sie sicher?") If X = 6 Then MyString = MyString & MyPublist(i).Name & Chr(10) Call RmPublications(MyParentDoc, MyPublist(i)) End If Next MsgBox "Gelöschte Publications:" & Chr(10) & MyString MsgBox "Fertig, nicht vergessen ggf. Tools -> Veröffentlichungen aufzurufen oder Part speichern/schließen/öffnen um Anzeige zu aktualisieren!", vbInformation ' <ENDE:Publications_entfernen> end Sub
Funktion
Code:
Function RmPublications(MyParentDoc, MyCurPub) ' Entfernt eine Publication MyParentDoc.Publications.Remove MyCurPub.Name End Function Function GetPublications(MyPart) 'Gibt ein Array mit allen Publications als Objekte zurück Dim MyPubarr() For i = 1 To MyPart.Product.Publications.Count ReDim Preserve MyPubarr(i - 1) Set MyPubarr(i - 1) = MyPart.Product.Publications.Item(i) Next GetPublications = MyPubarr End Function
Vorhandene Publication auslesen (durchlaufen und ausgeben) (Nur in diesem Beitrag) Ist auch nicht weiter Spektakulär: Aufruf
Code:
Sub CATMain()' <START:Publications_durchlaufen> MyPublist = GetPublications(CATIA.ActiveDocument) MyString = "" For i = LBound(MyPublist) To UBound(MyPublist) MyString = MyString & MyPublist(i).Name & Chr(10) Next MsgBox MyString ' <ENDE:Publications_durchlaufen> End Sub
Funktion
Code:
Function GetPublications(MyPart) 'Gibt ein Array mit allen Publications als Objekte zurück Dim MyPubarr() For i = 1 To MyPart.Product.Publications.Count ReDim Preserve MyPubarr(i - 1) Set MyPubarr(i - 1) = MyPart.Product.Publications.Item(i) Next GetPublications = MyPubarr End Function
Element einer Publication ändern (Nur in diesem Beitrag) Bin ich noch am basteln, trage ich nach. Wenn mir jemand unter die Arme greifen will und den Code postet habe ich auch nix dagegen ;-) Aufruf
Code:
Funktion
Code:
Copy / Paste in einer Produkt-Part-Struktur (Als Ergebnis mit Verknüpfung kopieren) http://ww3.cad.de/foren/ubb/Forum137/HTML/002366.shtml#000000 Also zunächst einmal folgende vorgehensweise: 1. Produkt mit den beiden Parts (Ursprung A und Ziel B) ist geöffnet (und aktiv) 2. Ursprungspart A aktivieren 3. Element, welches weitergegeben werden soll, markieren 4. Wenn nicht veröffentlicht dann mittels Makro Veröffentlichung erzeugen (Kopieren des Elementes ggf. auch ohne Veröffentlichung möglich, kommt auf die Tools Optionen an aber mit Veröffentlichungen ist es eh besser) 5. „Im Produkt“ Zielpart B aktivieren 6. Als Ergebnis mit Verknüpfung einfügen. 7. Ergebnis gegenprüfen wegen möglicher Zyklen/Loops und Kontextfehler Folgendes ist dabei zu beachten: A. Man kann vom Ursprungspart A ein Element (z.B. Punkt) an dass Zielteil weitergeben B. Will man nun ein meinentwegen komplett anderes Element (z.B. Linie) wieder als Ergebnis mit Verknüpfung an das Ursprungspart A weitergeben so funktioniert dies nicht, da Catia keine Zyklen/Loops/Zirkelbezüge oder wie man es nennen will zu lässt. Dabei ist es egal ob der Punkt etwas mit der Linie zu tun hat oder nicht, Catia sagt schon bei den Dateien die sich im Kreis aufeinander beziehen würden: Nö, geht net! Und was von Hand nicht geht, geht per Makro natürlich auch nicht ;-) C. Zirkelbezüge entstehen auch über mehrere Dateien. Sprich wenn man Elemente wie folgt weitergibt Part A -> Part B -> Part C -> Part D -> Part A, dann geht dies auch nicht und man erhält die Fehlermeldung: Schleifenkonstruktion. Diese (von mir „große Schleifen“;) getauft sind besonders tückisch, da man Sie nicht so leicht erkennt. Vom Prinzip her aber das gleiche: Part A gibt etwas an Dateien weiter, welche am Ende der Kette wieder etwas an Part A weitergeben möchten, ergo: Zirkelbezüge D. Man kann Elemente innerhalb einer Baugruppe nur mit Verknüpfung von Part zu Part weitergeben, wenn der Kontext korrekt ist. Stehen die Parts in unterschiedlichen Kontexten kann man verallgemeinert gesagt keine Verknüpfung weitergeben, ergo auch nicht per Makro. Dies greift aber schon tief in die Thematik von Verknüpfungen und da es hier um die Automation geht vertiefe ich dies Anwenderwissen hier nicht weiter. E. Das in den Tools -> Optionen Verknüpfungen erlaubt sind setze ich natürlich voraus sonst klappts ja grundsätzlich net ;-) Bin ich noch am basteln, trage ich nach. Wenn mir jemand unter die Arme greifen will und den Code postet habe ich auch nix dagegen ;-) Aufruf
Code:
Funktion
Code:
Publications im aktiven Produkt ohne Element erstellen und Liste im Baum aktualisieren (Nur in diesem Beitrag) Der Trick die Veröffentlichungsliste im Baum durch öffnen in neuem Fenster zu aktualisieren macht nur Sinn wenn es sich um das ActiveDocument (Oberstes Produkt) handelt, da sonst das verarbeitete Unterprodukt in neuem Fenster geöffnet wird und das zuvor angezeigte Oberste Produkt geschlossen wird.
Aufruf
Code:
Sub CATMAIN() ' Publications ohne Element in CATPart erstellen ------------------ Set Publications1 = CATIA.ActiveDocument.Product.Publications 'Als Beispiel 3 veröffentlichungen ohne Element hinzufügen Set Publication1 = Publications1.Add("Name") Set Publication1 = Publications1.Add("Telefonummer") Set Publication1 = Publications1.Add("Brustumfang") ' In Neuem Fenster öffnen um Publication-Liste "zu aktualisieren" Set myViewpoint3D = CATIA.ActiveWindow.ActiveViewer.Viewpoint3D Set MyOldWindow = CATIA.ActiveWindow Set MyNewWindow = CATIA.ActiveDocument.NewWindow MyOldWindow.Close CATIA.ActiveWindow.ActiveViewer.viewpoint3D = myViewpoint3D end sub
[Diese Nachricht wurde von Florian Held am 16. Mai. 2008 editiert.]
[Diese Nachricht wurde von Florian Held am 03. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian Held Mitglied Teamleiter CAD-Solutions
Beiträge: 81 Registriert: 07.09.2006 Catia V5 R19 WinXP 64Bit unter VBA
|
erstellt am: 16. Mai. 2008 15:59 <-- editieren / zitieren --> Unities abgeben:
|
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 16. Dez. 2008 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hi Florian! Da du dich offenbar mit Macros auskennst, wollte ich fragen, ob du mir helfen kannst ( ich kenne mich gar nicht aus ). Wie muß mein Macro aussehen: ich habe im 3D Modell 3 Punkte auf der selben Fläche ( nur eine Koordinate ändert sich; sie liegen untereinander). Ein vierter Punkt liget hinter den drei ( zusätzliche Koordinate ist anders). Jetzt möchte ich mit einem MAcro die 4 Punkte selektieren und inder DRW soll eine Draufsicht auf die Fläche gemacht werden ( auf der die ersten drei Punkte liegen ) und die 3D-Koordinaten der 4 Punkte sollen erschienen. Weißt du, wie man das Macro schreibt? Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian Held Mitglied Teamleiter CAD-Solutions
Beiträge: 81 Registriert: 07.09.2006
|
erstellt am: 17. Dez. 2008 13:52 <-- editieren / zitieren --> Unities abgeben:
Hi Tweety79, bitte erstelle einen neuen Beitrag direkt im forum V5_Programmierung, hat ja mit Punlications welchen dieser Beitrag gewidtmet ist nicht wirklich viel zu tun. Ich hab leider nur "3D-Makroprogrammierung" gemacht, denke daher einige hier im Forum kennen sich mit Makros in Verbindung mit Drawings besser aus. ------------------ MfG, Florian Held Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dadidldi Mitglied
Beiträge: 22 Registriert: 18.03.2009 CATIA R19 CatScript
|
erstellt am: 29. Mai. 2009 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hi, mit dem letzten Punkt "Publication-Liste aktualisieren" habe ich ein Problem. Ich habe die Code Zeilen in mein Makro kopiert. Wenn ich es durchlaufen lassen scheint auch alles korrekt zu funktionieren. Er macht ein neues Fenster mit meinem Produkt auf und schließt das Alte. Aber die Liste ist dann nicht aktualisiert. Die Publications können immer noch nicht verwendet werden. (Sie stehen zwar im Baum aber man kann Sie nicht selektieren) Als mögliche Fehler Ursache sehe ich meine Produkt-Struktur. Die ist wie folgt: --Haupt-Produkt !--Produkt X ! !--Part1.1 ! !--Publications 'hier sind die vom Makro erzeugte Publications ! !--Part1.2 ! !--Part2 !--Part3 !--Part4 Kann mir jemand vielleicht genau erklären wo das Problem ist und was ich dagegen machen könnte? Alles was mir einfällt ist den Speicherort des Master-Produkts auszulesen, es zu schließen und es dann neu zu öffnen (und dann muss natürlich Activate Terminal Node machen). Grüße Dadi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MICHLICK Mitglied CAD Methodik Entwickler (CATIA; NX)
Beiträge: 455 Registriert: 20.06.2001 Der Aufwand bei Änderungen ist groß, wenn die Finger schneller klicken als das Gehirn denkt.
|
erstellt am: 03. Jun. 2009 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo Florian, ich habe es zwar noch nicht ausprobiert aber möglicherweise hilft bei: Publication in VBScript (Publications aus selektierten Elementen erstellen)
ein kleines Update. Füge mal ein MyParentDoc.Update ein.
------------------ Gruß Michael B. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Florian Held Mitglied Teamleiter CAD-Solutions
Beiträge: 81 Registriert: 07.09.2006
|
erstellt am: 03. Jun. 2009 10:11 <-- editieren / zitieren --> Unities abgeben:
@Dadidldi Ich habe meinen Beitrag editiert, war vielleicht etwas ungenau ausgedrückt. Das CATIA.ActiveDocument in meinem Beispiel wird zwar über .Product angesprochen, allerdings handelt es sich dabei um ein CATPart. Kann mir vorstellen dass der Fehler daher rührt, da ich das Script mit Veröffentlichungen in CATProdukten noch nicht betrieben habe. @MICHLICK Meines Wissens nach hatte das Partupdate damals nichts gebracht, weshalb ich die "In neuem Fenster öffnen" Lösung als Backuplösung verwende. In R17 SP4 HF30 in catvba ausgeführt scheint dass Problem gar nicht mehr zu existieren. Habe soeben dass Script nochmal laufen lassen und die Veröffentlichungen werden korrekt erstellt und sofort im Baum unter "Publications" korrekt aufgelistet (Ohne in neuem Fenster öffnen oder von Hand in Tools-> Veröffentlichungen zu gehen. Auf jeden Fall Danke für die Ideen und Zuschriften sofern ich nicht wieder Wochenlang von CAD.de getrennt bin wie vor kurzem bin ich stehts bemüht dies Thema weiter zu verfolgen ------------------ MfG, Florian Held [Diese Nachricht wurde von Florian Held am 03. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
compimento Mitglied
Beiträge: 9 Registriert: 15.03.2007
|
erstellt am: 09. Dez. 2010 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
|
Beny Mitglied Konstrukteur - Standardisierung
Beiträge: 36 Registriert: 15.11.2010
|
erstellt am: 19. Jan. 2011 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo, Ich bin durch Zufall auf dieses hilfreiche Workaround gestoßen. Da ist eig genau so etwas beschrieben wie ich es benötigte. (der Code läuft auch super und .CATScript) ich müsste den aber in vba ausführen lassen und bin schon fleißig am variablen declarieren aber ich weiß nich was ich mit dieser Zeile machen muss, damit sie ohne Problem weiterläuft.
MyParentDoc.Publications.Remove MyCurPub.Name Er sagt dann immer das ein element benötigt wird (obwohl ich alle weiter oben definiert habe) (das Programm soll einfach alle makros eines Parts rauslöschen.) Anbei der gesammte code, von weiter oben aus .CATScript (den ich nur bischen umbenannt habe, da ich ihn noch nicht ganz verstehe ^^):
Dim AktuellesPartDocument As PartDocument Set AktuellesPartDocument = CATIA.ActiveDocument '.Product Dim AktuellesPart As Part Set AktuellesPart = AktuellesPartDocument.Part Dim MyPublist ' As Publication MyPublist = GetPublications(CATIA.ActiveDocument) Dim Mystring As String Mystring = "" Dim i For i = LBound(MyPublist) To UBound(MyPublist) Dim X X = MsgBox("Folgende Veröffentlichung löschen?" & Chr(10) & MyPublist(i).Name, vbYesNo, "Sind Sie sicher?") If X = 6 Then Mystring = Mystring & MyPublist(i).Name & Chr(10) Dim MyCurPub AktuellesPartDocument.Product.Publications.Remove (MyCurPub.Name) 'AktuellesPartDocument.Publications.Remove MyCurPub.Name < Orginaltext von oben als .CATScript
End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 20. Jan. 2011 00:49 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo Beny, ich habe jetzt nicht versucht alles zu verstehen, doch wenn nur das "Remove" Dein Problem ist, sollte es mit "MyPublist(i).Name" anstelle von "MyCurPub.Name" gehen. Falls nicht, gib einfach Bescheid! 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 |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 13. Jul. 2011 21:24 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hi, hat es denn mittlerweile jemand hinbekommen, veröffentlichungen umzubenennen bzw. falls nicht, ist es möglich die Elemente wieder per Makro zu synchronisieren, nachdem eine Veröffentlichung entfernt und neu angelegt wurde? MfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasJay Mitglied Dipl-Ing
Beiträge: 159 Registriert: 19.04.2011 CATIA V5 R19
|
erstellt am: 27. Feb. 2013 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
|
Kay Petri Mitglied Konstrukteur Catia V5
Beiträge: 24 Registriert: 18.06.2012 Workstation HP 840
|
erstellt am: 04. Nov. 2014 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo Leute, Ich versuche die ganze zeit schon Publications in einem part zu suchen und jede publication in ein neues einzelnes part zu kopieren. Selbes mache ich derzeit mit Geometrical Sets. Das funktioniert wunderbar, aber der workaround mit publications ist mir gänzlich unbekannt. Ich hab versucht entsprechenden code von hier zu verwenden, jedoch wird bei meiner kopier methode immer ein object reqiurred angezeigt. Scheinbar haben ja ein paar leute schon mit publications kopiert, wäre schön wenn hier jemand seinen code zur verfügung stellt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 07. Nov. 2014 06:55 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Zitat: Original erstellt von Kay Petri: Scheinbar haben ja ein paar leute schon mit publications kopiert, wäre schön wenn hier jemand seinen code zur verfügung stellt.
Laut deinem ersten Teilsatz, willst du einen nicht funktionierenden Code? 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: 07. Nov. 2014 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus Ohne Link hat es bei mir so funktioniert (nur mit ein paar Linien probiert): Code: Sub CopyPublications()Dim oPartDoc As PartDocument Dim oPartDoc2 As PartDocument Dim osel As Object Dim osel2 As Object Dim oPubs As Publications Dim oPub As Publication Dim i As Integer Set oPartDoc = CATIA.ActiveDocument
Set osel = oPartDoc.Selection Set oPubs = oPartDoc.Product.Publications For i = 1 To oPubs.Count Set oPub = oPubs.Item(1) osel.Clear osel.Add oPub.Valuation osel.Copy Set oPartDoc2 = CATIA.Documents.Add("Part") Set osel2 = oPartDoc2.Selection osel2.Clear osel2.Add oPartDoc2.Part osel2.PasteSpecial "CATPrtResultWithOutLink" oPartDoc2.Part.Update Next End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 68 Registriert: 23.07.2010 Catia V5-6 R24 Release 2014 HF20
|
erstellt am: 08. Jul. 2015 07:24 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
also damit füge ich publizierte Budies ein ... funktioniert ohne Probleme: Code: '--------------- Body in neues Part einfügen Set auswahlBodies = AuswahlPart.Part.Bodies Set AuswahlCopy2 = auswahlBodies.Item(1) Set PartSel = AuswahlPart.Selection PartSel.Add AuswahlCopy2 Select Case Opt_linked Case Is = True PartSel.PasteSpecial "CATPrtResult" Case Is = False PartSel.PasteSpecial "CATPrtResultWithOutLink" End Select '--------------- Ende Body in neues Part einfügen
Ich habe allerdings ein ganz anderes Problem, bei dem ihr mir vielleicht helfen könnt. Vor dem Einfügen prüfe ich ob die gewählten Bodies überhaupt publiziert sind - allerdings habe ich im Moment nur eine Methode entwickelt, die das über die Bezeichnung macht. Nun wurde ja leider schon festgestellt, dass sich Publications nicht mit umbenennen, falls das Feature dazu geändert wird. Das topediert natürlich meinen Abgleich und das Makro erkennt die Publication nicht mehr. Kennt jmd. eine Methode die Prüfung auf die interne Verlinkung anfzubauen, die ja unabhängig von der Benennung ist? Das wäre extrem toll! 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: 08. Jul. 2015 07:39 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus Wie machst du den Vergleich über den Namen? ggf könntest du über "Valuation" der Publictaion dir den Namen (Displayname) des Objekts (bzw der Reference) ermitteln. Danach zb den Namen der Reference auswerten oder mit der Reference des "angeblich veröffentlichen Körpers" vergleichen Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 68 Registriert: 23.07.2010 Catia V5-6 R24 Release 2014 HF20
|
erstellt am: 08. Jul. 2015 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo Bernd, der Abgleich läuft über Listen. Ich lese also alle Publications ein und vergleiche diese dann mit den zu publizierenden Bodies. Code: '--------------- Abfrage, ob alle Elemente publiziert sind If AnzahlPublications > 0 Then For i = 1 To AnzahlSelection Dim gesuchterString As String 'MsgBox PubListe(i) gesuchterString = PartListe(i) 'MsgBox gesuchterString If IsInArray(gesuchterString, PubListe()) Then 'do nothing 'MsgBox ("Publication da") Else unvollst_Pub = MsgBox(gesuchterString + " ist nicht publiziert!" + Chr(10) + Chr(10) + "Sollen alle Bodies ohne Verlinkung kopiert werden?", 1, "Nicht alle Bodies sind publiziert.") If unvollst_Pub = vbOK Then Opt_linked = False GoTo Verlinkung_gecancelt End If If unvollst_Pub = vbCancel Then JobStopper = JobStopper + 1 End If End If Next End If '--------------- Ende Abfrage, ob alle Elemente publiziert sind
Ideal wäre es natürlich wenn das Ganze über die internen Links in Catia geprüft werden kann und man sich nicht auf diese blöden Namen stützen muss. Allerdings ist mir nicht bekannt wie man auf die Links zugreifen und diese abgleichen kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 115 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 14. Jul. 2015 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Hallo, Ich würde empfehlen auf die internen Namen zurück zu greifen, um die Namen zu vergleichen. Es ist in CATIA nämlich möglich mehrere Geometrical Set mit den gleichen Namen zu haben. Code: Dim IntName as String Set IntName = MyGeometricalSet.GetItem("ModelElement").InternalName
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 68 Registriert: 23.07.2010 Catia V5-6 R24 Release 2014 HF20
|
erstellt am: 14. Jul. 2015 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
das mit dem InternalName ist wahrscheinlich genau dass was ich gesucht habe ... ich werde dies testen. Danke. In meinem Makro wird geprüft, ob Namen doppelt verwendet worden, um einen dadurch verursachten Fehler abzufangen. edit: habe gerade mal damit herumgespielt ... das scheint nur bei wirklichen geometrischen Elementen zu funktionieren. Wenn ich es mit einer Publication probiere, gibt es einen Fehler. [Diese Nachricht wurde von sto.teac am 14. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 59 Registriert: 24.04.2018 Catia V5 R32 SP2 | Windows 10 Pro
|
erstellt am: 25. Okt. 2019 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Altes Thema, jedoch habe ich dazu eine Frage. Ich will in einem Part mehrere Körper veröffentlichen. In dem Part sind jedoch ein paar Körper schon veröffentlicht ein paar nicht. Es gibt auch Körper die den selben Körpernamen besitzen. Da das Makro einen Fehler bringt, wenn ein Körper schon eine Veröffentlichung besitzt, wollte ich jetzt vor dem Veröffentlichen prüfen, ob der Körper eine Veröffentlichung hat. In meinem Part kann es nun auch vorkommen dass ein Körper veröffentlicht wurde, und im späteren Verlauf wurde der Name des Körpers verändert. Das reine Vergleichen von Körpernamen und Veröffentlichen bringt somit also nichts. Kann mann irgendwie prüfen ob ein Körper eine Veröffentlichung besitzt? Hat jemand eine Lösung? 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: 25. Okt. 2019 19:03 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus Du könntest von dem zu prüfenden Körper die Referenz bilden und diese mit den Referenzen der Veröffentlichungen vergleichen: Code: MyRefName = oPartDocument.Product.PartNumber & "/!" & oBody.Name Set MyRef = oPartDocument.Product.CreateReferenceFromName(MyRefName)Set MyPub = oPartDocument.Product.Publications.item(1) If MyRef.DisplayName = MyPub.Valuation.DisplayName then MsgBox "Publication und Objekt sind identisch" end if
In diesem Beispiel-Code ist der Körper als erste Veröffentlichung vorhanden. (Schleife über alle Veröffentlichungen laufen lassen) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 59 Registriert: 24.04.2018 Catia V5 R32 SP2 | Windows 10 Pro
|
erstellt am: 28. Okt. 2019 06:56 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Funktioniert ja nicht wegen: "In meinem Part kann es nun auch vorkommen dass ein Körper veröffentlicht wurde, und im späteren Verlauf wurde der Name des Körpers verändert. Das reine Vergleichen von Körpernamen und Veröffentlichen bringt somit also nichts." Oder habe ich einen Denkfehler? 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: 28. Okt. 2019 08:31 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus Wenn du wissen willst ob ein bestimmter Körper veröffentlicht ist: Referenz vom Körper bilden -> Schleife über alle Veröffentlichungen -> Referenzen vergleichen -> falls diese übereinstimmen ist der Körper veröffentlicht (lässt sich schön in eine Function auslagern) Falls du alle Körper prüfen willst, einfach eine Schleife über alle Körper (in Boole'schen Operationen verwendete ausschließen) Oder was ist deine Anwendung die du suchst? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 59 Registriert: 24.04.2018 Catia V5 R32 SP2 | Windows 10 Pro
|
erstellt am: 28. Okt. 2019 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus, ja soweit klar. Jetzt habe ich aber ein Part in dem der Name der Veröffentlichung und der Körpername nicht übereinstimmen. (Kommt daher, dass im Adapter ein Körper mal veröffentlicht worden ist, und dann in anderen Parts wiederverwendet worden ist. Vor der Fertigstellung des Projekts wurden im Adapter nochmal vor den Körpernamen Positionsnummern etc. geschrieben). Somit kann ich die Referenzen nicht vergleichen, weil nach Änderung des Körpernamen, der Name der Veröffentlichung beim alten Namen bleibt... 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: 28. Okt. 2019 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für Florian Held
Servus Dann teste doch mal meinen Code. Es wird wohl einen Grund haben warum ich das so einen Umweg beim Namensvergleich mache. Gruß Bernd PS: Wenn die Körpernamen mehrfach vorkommen hast du ein Problem. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |