| |
 | Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE) |
Autor
|
Thema: Positional Link für ein Textfeld erzeugen (512 mal gelesen)
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 19. Jul. 2022 09:41 <-- editieren / zitieren --> Unities abgeben:         
Hallo Community, ich habe eine Frage an euch Ich arbeite aktuell an einem Makro mit welchem die Indexierung unserer Zeichnungsableitungen vereinfacht bzw. schneller gemacht werden soll. Jetzt bin ich allerdings auf ein problem gestoßen für das ich bisher noch keine Lösung gefunden habe. Das Makro erzeugt den neuen Index der Zeichnung in einem Textfeld (soweit so gut ). Jetzt sollte ich aber dem Textfeld noch ein "Positional_Link" zu einer Bemaßung bzw. zu einem anderen Textfeld zuweisen. Auf konventionellem Weg in der Catia GUI ist das ja verhältnissmäßig einfach, aber ich finde bisher einfach keine Anweisung mit der ich das im VBA erzeugen könnten. Wisst ihr vllt. wie ich das in VBA bewerkstellige? Vielen Dank euch schonmal. Grüße Andy
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 19. Jul. 2022 09:50 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Hallo, hierzu hat das Textelement/Objekt eine entsprechende Eigenschaft. Aus der Doku:
Property AssociativeElement() As CATBaseDispatch Returns or sets the associative object of the drawing text. Example: This example sets an associative line of the MyText drawing text to top left position. MyText.AssociativeElement = line
Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 20. Jul. 2022 10:16 <-- editieren / zitieren --> Unities abgeben:         
Hi Randle, danke für den hinweis. Hab das ganze jetzt mal mit AssociativeElment ausprobiert und in der Tat die beiden Textfelder sind jetzt mit einander verlinkt. Vielen Dank dafür schonmal! Weißt du (oder sonst jemand aus unserer Community ) ob es auch die Möglichkeit gibt die Verküpung dahingehend zu erweitern, dass das verknüpft Textfeld auch automatisch an der Position des "Master" Textfeld erzeugt wird? Also wie wenn eine User im Catia ein Textfeld mit preSelect erstellt. Schaut euch mal das Bild im Anhang an, dann glaube ich es wird noch bissel klarer was ich meine Grüße 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: 20. Jul. 2022 10:20 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Servus Geht vermutlich nicht. Du musst wohl irgendwie die erforderliche x- und y-Position aus deinem Referenzelement ermitteln. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 20. Jul. 2022 10:46 <-- editieren / zitieren --> Unities abgeben:         
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 09:10 <-- editieren / zitieren --> Unities abgeben:         
Guten morgen Zusammen, ich habe nochmals eine Frage zu dem Thema. Ich verwende nun im Makro die Methode "AssociativeElement()" um ein Textfeld mit einem anderen Textfeld zu verlinken. Das ganze funktioniert auch wunderbar, solange ich beide Textfelder im Makro neu erzeuge. Wenn ich aber eine Vorselection eines bereitsbestehnden Texfeld vornehme und dann das neu erzeugte Textfeld mit dem bestehenden Textfeld verlinken möchte, funktioniert das ganze iwie nicht mehr. Ich vermute mal, dass das daran liegt, dass die Vorauswahl nicht als "DrawingText" Objekt zurückgegeben wird? Habt Ihr hier eine Idee woran das liegen könnte bzw. wie ich das Problem lösen kann? Vielen Dank schonmal an euch Nachfolgend noch ein Auszug aus meinem Makro Code: -------------------------------------------------------------------------------------------------------------------------------------- Option Explicit 'Def. Public Variables Public drawingDocument1 As DrawingDocument Public drawingSheets1 As DrawingSheets Public drawingSheet1 As DrawingSheet Public drwViews1 As DrawingViews Public drwView1 As DrawingView Public USel Public Index As String Sub CATMain() 'Auswahl des Aktiven DRW Dokuments Set drawingDocument1 = CATIA.ActiveDocument 'Auswahl aller Seiten des Aktiven DRW Dokuments Set drawingSheets1 = drawingDocument1.Sheets 'Auswahl der ersten Seite des Aktiven DRW Dokuments Set drawingSheet1 = drawingSheets1.Item("Sheet.1") 'Erzeugen einer Liste aller Drawing Views Set drwViews1 = drawingSheet1.Views 'Auswahl der ersten DrawingView Set drwView1 = drwViews1.ActiveView Dim I As Integer Set USel = CATIA.ActiveDocument.Selection If USel.Count > 0 Then Index = "AA" 'InputBox("Änderungsindex Eingeben:", Title) For I = 1 To USel.Count If USel.Item(I).Type = "DrawingText" Then '--------------------------------------------------------------------- 'MsgBox (USel.Item(I).Type) 'Erzeugen einer Liste aller Texte Dim TextCollection As DrawingTexts Set TextCollection = drwView1.Texts 'Erzeugt einen Text an der Position x=50 und y=50 Dim InOb As DrawingText Dim MyText As DrawingText Dim Title As String Title = "Index" Set InOb = USel.Item(I).Value 'Set TestText = TextCollection.Add("Das ist ein Testobjekt", pX, pY) Dim pX As Double Dim pY As Double pX = 50 pY = 50 Set MyText = TextCollection.Add(Index, pX, pY - 7.5) MyText.AssociativeElement = InOb --------------------------------------------------------------------------------------------------------------------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Jul. 2022 09:39 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Moin, was ist denn genau das Problem, was geht denn nicht? Also wenn ich das Makro ausführe UND vorher einen bestehenden Text auswähle funktioniert es. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 10:09 <-- editieren / zitieren --> Unities abgeben:         
Moin Randle, bei mir leider nicht. Beim Debuggen kommt bei mir immer ein Run-time error '424' Object requiered (siehe Bild im Anhang) und der Debugger markiert dann auch die nachfolgende Zeile gelb im Code. "Set InOb = USel.Item(I).Type" Grüße 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: 25. Jul. 2022 10:16 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
|
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Jul. 2022 10:17 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Hallo, ok, wenn du das in deinem eigentlichen Code so geschrieben hast, ist das klar. In deinem geposteten Ausschnitt steht: Code:
Set InOb = USel.Item(I).Value
und nicht Code:
Set InOb = USel.Item(I).Type
Die Eigenschaft Type gibt einen String (mit dem Typnamen) zurück und kein DrawingText. Vielleicht solltest du die auch noch mal die Methode "SelectElement2" des "Selection" Objektes ansehen. Damit kannst du den Anwender auffordern ein Objekt auszuwählen. Du kannst dann sogar die Auswahl auf bestimmte Objekttypen (z.B. DrawingText) beschränken. Gruß Randle
------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 10:34 <-- editieren / zitieren --> Unities abgeben:         
Oh Verzeihung das war mein Fehler. Ich hab hier schon bissel herum gespielt. Ursprünglich stand da auch tatsächlich " Set InOb = USel.Item(I).Value ". Er bringt dann aber bei mir auch einen Fehler und zwar Run-Time-Error '-2147467259' (siehe Bild im Anahng). Der Debugger Markiert nun die Zeile " MyText.AssociativeElement = InOb ". Ich hab euch das Bild auch wieder in den Anhang gelegt. Kurze Frage noch zu SelectElement2: Wenn ich mich recht erinnere, dann kann ich bei SelectElement2 sowohl ein Vorauswahl als auch eine Auswahl während des Makros zulassen? Grüße 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: 25. Jul. 2022 10:39 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Servus Erzeugst du auch den Text auch in der gleichen Ansicht? (ggf direkt aus dem selektierten Element auf die Ansicht schliessen) Zu deiner Frage zu SelectElement2: ja Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 10:52 <-- editieren / zitieren --> Unities abgeben:         
Moin, ja also wenn ich deine Frage richtig verstanden habe, dann ja . Also im Grunde möchte ich einen Textfeld (oder später auch noch eine Bemaßung) Markieren und dann soll beim betätigen des Makros ein verlinktes Textfeld an das ausgewählte Textfeld erzeugt werden. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Jul. 2022 11:07 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Hallo, das mit der Ansicht ist ein guter Hinweis von Bernd. Aktuell erzeugst du dein Textfeld in der aktiven Ansicht. Wenn das ausgewählte Textfeld aber in einer anderen Ansicht ist, kann es zu entsprechenden Fehlern führen. Du solltest also aus dem ausgewählten Textfeld die Parentview auslesen und dann in dieser dann deinen Index-Text erzeugen. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 13:57 <-- editieren / zitieren --> Unities abgeben:         
Hi, Ihr zwei seit der Wahsinn. Ihr habt absolut Recht. Es liegt "nur" daran, das die falsche Ansicht aktiv ist. Wenn ich die richtige Ansicht auswahl, funktioniert das Makro ohne Fehler. Ich dank euch schonmal für den Input. Sehe ich das richtig, das ich die ParentView mit GenerativeBehavior.ParentView auslesen und in ein Objekt setzen kann? Grüße 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: 25. Jul. 2022 14:01 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Servus Wenn du eine Dimension oder ein DrawingText selektiert hast, sollte auch (ungetestet): Code: Set InOb = USel.Item(I).Value Set oView = InOb.Parent.Parent
gehen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Jul. 2022 14:06 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Hallo, also in deinem Fall würde ich es so machen: Code:
Dim CurrentView as DrawingView Set CurrentView = InOb.Parent.Parent
Das Ganze musst du nach
Code:
Set InOb = USel.Item(I).Value
einfügen. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 25. Jul. 2022 14:07 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 14:39 <-- editieren / zitieren --> Unities abgeben:         
Mhhh was du jetzt mit dem Nachtrag genau meinst habe ich jetzt leider nicht ganz verstanden. Meine spontan Idee wäre jetzt eigentlich gewesen, das ich in jedem Schleifendurchlauf immer die Ansicht aktive setze, in der das Textfeld ist. Also sprich in der schleife: switchView As DrawingView switchView = drwViews.currentView Weil klar ich kann natürlich meinen Index mit einem DrawingView Objekt verlinken, das muss ja zwangsläufig ein DrawingText Objekt sein. Oder habe ich hier einen Denkfehler und das ganze funktioniert so nicht? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 25. Jul. 2022 14:48 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jul. 2022 14:48 <-- editieren / zitieren --> Unities abgeben:          Nur für AndyMattes
Servus Du brauchst fast nie was aktiv zu setzen um was zu bearbeiten. Also zB: Code: Set InOb = USel.Item(I).Value Set oView = InOb.Parent.Parent Set oDrawingTexts = oView.Texts Set MyText = oDrawingTexts.Add(Index, pX, pY - 7.5) 'usw. ...
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software

 Beiträge: 26 Registriert: 13.05.2022
|
erstellt am: 26. Jul. 2022 13:14 <-- editieren / zitieren --> Unities abgeben:         
Servus, es ging jetzt zwar ein bischen, aber jetzt hat es doch glick gemacht Ich brauche in dem Fall je meine TextCollection gar nicht mehr, weil ich ja oDrawingTexts eine neu Liste anlege in Abhägigkeit von InOb, Das ist tasächlich echt lessig, da es den Code für das Makro nochmals vereinfacht. Ich dank euch beiden sehr. Ihr wart mir hier eine Große Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |