|  |  | 
|  | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 | 
|  |  | 
|  | Erfolgreich unterwegs mit der KISTERS 3DViewStation , ein Whitepaper 
 | 
| Autor | Thema:  Positional Link für ein Textfeld erzeugen (1345 /  mal gelesen) | 
 | AndyMattes Mitglied
 Key User for CAD,PLM and FEM Software
 
  
 
      Beiträge: 69Registriert: 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üßeAndy
 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Randle Mitglied
 CAD/PLM Consultant
 
    
 
      Beiträge: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 69Registriert: 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: 12117Registriert: 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: 69Registriert: 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: 69Registriert: 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 VariablesPublic 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 DokumentsSet 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=50Dim 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: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 69Registriert: 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: 12117Registriert: 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: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 69Registriert: 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: 12117Registriert: 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: 69Registriert: 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: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 69Registriert: 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: 12117Registriert: 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: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 758Registriert: 12.04.2003
 Win10 x64CATIA 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: 69Registriert: 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: 69Registriert: 13.05.2022
 |    erstellt am: 25. Jul. 2022 14:48  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 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: 69Registriert: 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 |