Autor
|
Thema: Externe Info auf alle E³-Zeichenblätter platzieren... (1618 mal gelesen)
|
Cad-Mium Mitglied
Beiträge: 4 Registriert: 04.02.2014
|
erstellt am: 04. Feb. 2014 14:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr Cad-Ionen, ich möchte gerne (muss! ) mittels eines Scripts eine externe Info (aus einer Datei) auf jedes(!) E³.-Zeichenblatt in ein bestimmtes Attributfeld (Blatteigenschaften...) platzieren. Eigentlich habe ich fast alles fertig, - die ext. Datei ist seziert, die Info ausgelesen und formatiert und liegt als String vor -, aber ich bekome zum verrecken den Text nicht auf das Blatt, geschweige denn auf alle Blätter eines Projekts. Und die E³-Doku ist auch so schei... , dass dazu noch nicht einmal ein Beispiel angegeben ist. Deshalb meine Frage(n): 1. Wie bekomme ich alle Zeichenblätter durchgetackert und 2. wie bekomme ich dabei meinen Text in ein Attributfeld gestanzt (Feld #21, "Unterlagennummer") Bitte kurzes Beispiel! Danke!!! Cad-Mium Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 04. Feb. 2014 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für Cad-Mium
Hi, schau mal hier... Code:
Public Sub SetData_AllSheets() Dim iSheetIds As Object Dim iSheetId As Integer Try E3Prj.GetSheetIds(iSheetIds) For Each iSheetId In iSheetIds SetData_Sheet(iSheetId) Next Catch ex As Exception MsgBox(ex.ToString, MsgBoxStyle.Critical, "Fehler in Modul SetData_AllSheets") Application.DoEvents() End Try End Sub
Public Sub SetData_Sheet(ByVal SheetID As Integer) Dim E3Sht As E3.e3Sheet Try E3Sht = E3Prj.CreateSheetObject E3Sht.SetId(SheetID) E3Sht.SetAttributeValue("Feld #21", "Unterlagennummer") E3Sht = Nothing Catch ex As Exception E3Sht = Nothing MsgBox(ex.ToString, MsgBoxStyle.Critical, "Fehler in Modul SetData_Sheet") Application.DoEvents() End Try End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
[Diese Nachricht wurde von RSchulz am 04. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad-Mium Mitglied
Beiträge: 4 Registriert: 04.02.2014
|
erstellt am: 05. Feb. 2014 13:31 <-- editieren / zitieren --> Unities abgeben:
Hi Rick, Teilerfolg! Mit ein paar Modifikationen läuft die Sache , aber nur für "richtige" Attribute, also die, die auch in der Attributliste aufgeführt sind. Ich möchte aber ein Texttypenfeld füllen (die mit dem 'T' davor --> siehe Bild). Wenn ich deinen Code entsprechend in E3Sht = E3Prj.CreateSheetObject E3Txt = E3Prj.CreateTextObject E3Sht.SetId(SheetID) E3Txt.SetAttributeValue("Unterlagennummer", Stextstring) abändere, bekomme ich zwar keine Fehlermeldung, aber es passiert auch nichts . Vielen Dank trotzdem bis hierhin! Cad-Mium! [Diese Nachricht wurde von Cad-Mium am 05. Feb. 2014 editiert.]
[Diese Nachricht wurde von Cad-Mium am 05. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 05. Feb. 2014 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für Cad-Mium
|
K0NFUZIUS Moderator
Beiträge: 258 Registriert: 06.02.2006
|
erstellt am: 05. Feb. 2014 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für Cad-Mium
Da bist Du ein bisschen auf dem Holzweg! E3Txt.SetAttributeValue() setzt an einem Text ein Attribut! diese Funktionalität ist neu ab E³.series 2012! Was Du aber möchtest ist: ein Attribut an einem Blatt vergeben und dieses anzeigen! Das heißt Dein Attribut Träger ist ein Blattobjekt. Wie Du es programmiert hast wäre der Attributträger aber ein Textobjekt und das bringt Dich nicht weiter. Sprich in der Datenbank muss Dein Attribut 'Unterlagennummer' ein Blatt Attribut sein. Jetzt hast Du folgende Möglichkeit. Entweder Du fügst zu jedem Blatt eine Textstelle hinzu welche dieses Attribut anzeigt, das wäre das einfachste. Oder Du erzeugst eine Textstelle für das Attribut über AttributeInterface:: DisplayAttribute() Mein Vorschlag: Füge im Datenbankeditor einen neuen Texttyp ein der Dein Blatt Attribut repräsentiert ( Format -> Texttypen -> Zugewiesenes Attribut ) Addiere im Datenbankeditor den Text an Deinem Blattformat und aktualisiere das Blatt im Projekt.
Wenn Du jetzt über COM das Attribut am Blatt setzt wird es automatisch angezeigt. E3Sht.SetAttributeValue("Unterlagennummer", Stextstring) Ich hoffe das löst Deine Verwirrung auf und erzeugt nicht noch mehr Gruß Jörg
[Diese Nachricht wurde von K0NFUZIUS am 05. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad-Mium Mitglied
Beiträge: 4 Registriert: 04.02.2014
|
erstellt am: 06. Feb. 2014 09:44 <-- editieren / zitieren --> Unities abgeben:
@Konfuzius Der Texttyp (hier in diesem Fall "Unterlagennummer") existiert auf unseren Blättern bereits (siehe Bild = Ausschnitt aus Blatteigenschaften). Nur kann ich den Wert (Inhalt) nicht ändern. Der Code E3Sht.SetAttributeValue("Unterlagennummer", Stextstring) führt zu der Fehlermeldung: W - Unbekannter Attributname 'Unterlagennummer' Wenn ich es mit E3txt.SetAttributeValue("Unterlagennummer", Stextstring) probiere, kommt keine Fehlermeldung, aber es passiert auch nichts. Der Code von Rick funktioniert prinzipiell, aber nur wenn das Feld wirklich aus Datenbankeditor -> Format -> Attributnamen... stammt! Zur Not muss ich das Texttypenfeld "Unterlagennummer" in ein Attributnamenfeld änderen, aber das würde ich ungern tun wollen! Es muss doch eine Möglichkeit geben, ein blödes Textfeld zu beschreiben. Cad-Mium
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 06. Feb. 2014 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für Cad-Mium
|
K0NFUZIUS Moderator
Beiträge: 258 Registriert: 06.02.2006
|
erstellt am: 06. Feb. 2014 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für Cad-Mium
Hallo Rick, hallo CAD' @Rick genau das meinte ich Es muss erst mal untersucht werden ob der Texttyp richtig definiert ist also dem Attribut zugeordnet ist. Wenn allerdings das Attribut nicht gesetzt werden kann liegt's am Attributdefinition Als zweites bitte ich Dich mal einen Screenshot von der Attributdefinition aus dem DBE zu schicken. ( Format -> Attributnamen... ) !! Sollte das ein neuen Attribut sein dann musst Du davor im Projekt die 'Konfiguration aktualisieren.
Zitat:
Der Code von Rick funktioniert prinzipiell, aber nur wenn das Feld wirklich aus Datenbankeditor -> Format -> Attributnamen... stammt!
Ehm ja so funktioniert E³ nun mal Du kannst kein Attribut "erfinden" das es in der Datenbank nicht gibt ?!?! Also Attribut anlegen.. Texttyp mit Attribut verknüpfen ... glücklich sein Gruß Jörg
[Diese Nachricht wurde von K0NFUZIUS am 06. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad-Mium Mitglied
Beiträge: 4 Registriert: 04.02.2014
|
erstellt am: 07. Feb. 2014 13:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Freunde des gepflegten Wahnsinns! Jetzt geht er!! Die Sache das Textfeld mit einem Atrribut zu verknüpfen habe ich auch schon in Erwägung gezogen, aber ich dachte mir, es muss doch auch einfacher gehen, ein simples Textfeld zu beschreiben. Hier ist die Lösung (so wie ich sie mir vorgestellt hatte): Code:
Set sht = prj.CreateSheetObject Set txt = prj.CreateTextObject shtcnt = prj.GetSheetIds(SheetIds) For Each shtId In SheetIds 'hier ist Rick's Schleife sht.SetId shtId txtcnt = sht.GetTextIds(TextIds) '>>>>>> den Trick hab' ich gesucht!!! For Each txtId In TextIds 'hier ist meine Schleife txt.SetId txtId If( txt.GetTypeId() = 21) Then 'das Textfeld "Unterlagennummer" hat die Nummer 21 Txt.SetText "Mein Text" 'oder Variable... Exit For 'hier braucht er nicht mehr weiterzufräsen weil -> End If 'Textfeld wurde gefunden! Next 'nächstes Textfeld Next 'nächstes Blatt
So, dann braucht man nämlich nix im DBE oder an den Blättern ändern! Danke euch beiden! Beste Grüße Cad-Mium [Diese Nachricht wurde von Cad-Mium am 07. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |