Autor
|
Thema: Makro Background in Foreground (1395 / mal gelesen)
|
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 19. Sep. 2017 07:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Community, kleine Frage: Ich habe ein Makro geschrieben, welches alle Elemente des Backgroundes in den Vordergrund in eine View kopieren soll. Dies funktioniert soweit ganz gut, nur mit dem kleinen Problem, dass es keine Elemente kopiert, welche als Verlinkung vom Detail Sheet kommen. Wie kann ich diese Elemente ebenfalls per Selektion markieren und kopieren lassen? MfG
Diesaster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Sep. 2017 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Wie selektiert du denn die Elemente im Background? Ideen dazu: - 2D-Komponentenexemplare vor dem kopieren zerlegen - 2D-Komponentenexemplare in einem extra Durchlauf suchen und kopieren - 2D-Komponentenexemplare neu in deine Ansicht einfügen (Position und Detail kannst du von deinem Background auslesen) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 19. Sep. 2017 09:25 <-- editieren / zitieren --> Unities abgeben:
Hallo bgrittmann, ich habe den Backgroundview als oView deklariert und dann entsprechend diesen Code verwendet für Geometrische Element, Tabellen und Texte. Hier einmal exemplarisch für Texte: Code: If oView.Texts.Count > 0 Then For i = 1 To oView.Texts.CountoSel.Add oView.Texts.Item(i) TextCounter = TextCounter + 1 Next End If
Edit: Kann ich auch die 2D.Component mit Link umkopieren? Sprich, nach Möglichkeit, den Link zum Detail-Sheet beibehalten. Gruß Diesaster [Diese Nachricht wurde von Diesaster am 19. Sep. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Sep. 2017 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Hat es einen Grund warum du nicht über die Suche die Texte usw selektierst? Hier ein Beispiel für die 2D-Komponenten: Code: osel.Clear osel.add oView osel.Search "CATDrwSearch.DrwDitto,sel" 'in der Selektion nach 2D-Koponentexemplaren suchen osel.Copy
ggf muss du die 2D-Komponenten in einem eigenen Durchlauf kopieren/einfügen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 19. Sep. 2017 10:22 <-- editieren / zitieren --> Unities abgeben:
Eigentlich hat dies keinen Grund. Ich habe mir das so gedacht. Deine Lösung hat funktioniert. Herzlichen Dank! Man muss allerdings tatsächlich in einem separaten Durchlauf die 2D-Komponenten selektieren. 10 U's für dich. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 21. Sep. 2017 07:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Community, habe leider eine weitere Frage zum Thema. Brauche leider wirklich alles im Hintergrund, egal ob es Linien, Dimensions und co. sind. Nur bekomme ich immer eine Fehlermeldung bei meiner Selektion, wenn ich .Cut und .Paste mache, da immer der Background mit selektiert und kopiert wird. Das möchte ich verhindern. Meine Selektion führe ich momentan so aus: Code: oSel.Search "CATDrwSearch.* , sel"
Wie kann ich nun den Background View aus der Selektion entfernen? Ich habe im Background View aber selbst Texte und co., sowie 2D-Komponenten mit einem Link zum Detail-Sheet. Mit der Funktion FindObjekt konnte ich es leider nicht lösen, oder ich mache etwas falsch. Code: oSel.FindObject "CATIADrawingView"
Vielen Dank für die Hilfe! Gruß Diesaster Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Sep. 2017 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
|
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 27. Sep. 2017 08:10 <-- editieren / zitieren --> Unities abgeben:
Hallo bgrittmann, die Diskussion hat leider nicht weitergeholfen habe deine Edition mit dem Code: "Type!=DrwView,sel"
getestet. Habe ich an deinem Code etwas falsch gemacht, da mein Programm keine Tabellen und Co. selektiert, aufgrund von Type!=DrwView. Mein Code anhand deiner Lösung sieht so aus: Code: oSel.Search "CATDrwSearch.*.Type!=DrwView & CATDrwSearch.*.Type!=DrwSheet, sel"
Habe ich das so richtig umgesetzt oder hätte dies anders aussehen sollen? Edit: Habe folgende Variante getestet:
Code:
Set oView = oViews.Item(2) oSel.Add oView oSel.Search "Type=*,sel" If oSel.Item2(1).Type = "DrawingView" Then oSel.Remove (1) End If
Hier wird fast alle kopiert, aber genau das verstehe ich nicht, da alles selektiert wird. Alle 2D-Komponenten aus dem Detail-View werden kopiert, Linien auch. Nur wenn eine Tabelle z.B. direkt im Background View ist, wird diese ignoriert. Warum?
[Diese Nachricht wurde von Diesaster am 27. Sep. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Sep. 2017 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus In meinem Kurztest wird zumindest alles selektiert. Hattest du nicht zuvor einen (schrittweise arbeiteten) Code der funktioniert hat? ggf müssen manche Elementtypen einzeln kopiert werden. Blöde Frage: Warum willst du den Background überhaupt in eine "normale" View kopieren? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 27. Sep. 2017 10:11 <-- editieren / zitieren --> Unities abgeben:
Ich hatte diesen schrittweise arbeitenden Code ja. Diesen habe ich entfernt auf dein Anraten, es über die Selektion.Search zu lösen. Es gab eine neue Regelung, welche besagt, dass im Hintergrund nichts mehr sein darf. EDIT: Habe gerade mal Rauheitsangaben und Dimensions hinzugefügt. Meine Vermutung ist, dass alles was über die Symbolleisten zur rechten erstellt wird, jedes mal gelöscht wird. [Diese Nachricht wurde von Diesaster am 27. Sep. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Sep. 2017 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Das hab ich dir nicht geraten, ich hab nur gefragt warum du die Suche nicht nutzt (zB nur für einen Elementtyp) und alles über Schleifen löst. Sonderbare Regelung: für was ist sonst der Background da? Was passiert wenn der Maßstab des ganzen Blattes geändert wird? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 28. Sep. 2017 07:20 <-- editieren / zitieren --> Unities abgeben:
Hallo bgrittmann, habe gerade mal die Suche über Edit-> Search gestartet und dort folgendes eingestellt. Workbench Type : Drafting Type : Table Wenn ich jetzt ganz normal in Sheet 1 im Vordergrund bin (nicht Background) und suche nach Tabellen, werden kurioserweise nur alle Tabellen gefunden, welche sich im Vordergrund befinden oder welche im Background als Detail aus dem Detail-Sheet angezogen sind. Warum findet er keine Tabellen, welche im Background erstellt wurden? EDIT: Habe einen Weg gefunden alles mit der Suche zu selektieren und zu kopieren. Habe nur dabei ein kleines Problem. Mein oSel.Paste wird nicht ausgeführt. Hier der Code: Code: Set oView = oViews.Item(2) oView.Activate oSel.Add oView oSel.Search "CATDrwSearch.*,scr" If oSel.Count > 0 Then oSel.Copy Set oView = oViews.Item("2D-Details") oView.Activate oSel.Paste End If oSel.Clear
[Diese Nachricht wurde von Diesaster am 28. Sep. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Sep. 2017 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Mit ",scr" wird nach allem sichtbaren (bzw auch dem Bildschirm) gesucht, und nicht nur in der Selektion (da wäre es ",sel"). Willst du das so? Vermutlich gibt es wieder Probleme dass manche Typen nur einzeln kopiert und eingefügt werden können (zB 2D-Koponenten). (vergleiche auch Anfang der Diskussion) Um zu bestimmen in welche Ansicht eingefügt wird muss diese selektiert werden: Code:
oView.Activate oSel.Add oView oSel.Paste
Gruß Bernd PS: Das aktivieren von Ansichten usw brauchst du fast nie ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Diesaster Mitglied Student
Beiträge: 61 Registriert: 05.11.2015
|
erstellt am: 28. Sep. 2017 09:30 <-- editieren / zitieren --> Unities abgeben:
Danke für die Info. Leider hat nur die Variante mit scr funktioniert. Alternativ müsste ich 2 Selektionen machen. 1. Sichtbarer Bereich 2. Unsichtbarer Bereich und diese jeweils separat abarbeiten. Kann ich z.B. eine 3. Selektion deklarieren und dort beide Selektionen (unsichtbar und sichtbar) zusammenfügen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Sep. 2017 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Nein, es gibt nur eine Selektion. Und warum führst du die Selektion bzw das kopieren nicht in mehren Schritten aus (sichtbar und unsichtbar) Natürlich kannst du das Ergebnis der ersten Suche zwischenspeichern (Array oder Collection), die zweite Suche durchführen und danach die Elemente aus dem Zwischenspeicher wieder zur Selektion hinzufügen (siehe meine Signatur) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Sep. 2017 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für Diesaster
Servus Hier ein Beispiel das die wichtigsten Elemente aus dem Background in eine Ansicht kopiert. Code: Sub CATMain()Dim oDrwDocument As Document Dim oSel As Selection Dim oBackgroundView as Drawingview Dim oTargetView as Drawingview Set oDrwDocument = CATIA.ActiveDocument Set oSel = oDrwDocument.Selection Set oBackgroundView = oDrwDocument.sheets.item(1).views.item(2) Set oTargetView = oDrwDocument.sheets.item(2).views.item(3) 'suchen und kopieren CATIA.HSOSynchronized = false oSel.Clear oSel.add oBackgroundView oSel.Search "((((((((CATDrwSearch.DrwAreaFill + CATDrwSearch.DrwAxisLine) + CATDrwSearch.DrwDatumFeature) + CATDrwSearch.DrwDitto) + CATDrwSearch.DrwDatumTarget) + CATDrwSearch.2DGeometry) + CATDrwSearch.DrwRough) + CATDrwSearch.DrwTable) + CATDrwSearch.DrwText),sel" MsgBox oSel.Count2 & " Elemente selektiert" oSel.Copy oSel.Clear 'einfügen oSel.add oTargetView oSel.paste CATIA.HSOSynchronized = true End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |