| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
| |
| UNITEC wird offizieller Systemintegrator von AVEVA, eine Pressemitteilung
|
Autor
|
Thema: API: Schnittverläufe formatieren (2045 mal gelesen)
|
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 08. Sep. 2011 14:38 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich schreibe gerade ein Makro in Excel, das Schnittansichten und Einzelheiten formatieren soll (also Werte für TextColor in den DrawingViews-Items ändern). Das ganze funktioniert insofern gut, dass die Ansichten korrekt umformatiert werden. Ich würde jedoch auch gerne die Schnittverläufe und Einzelheitsmarkierungen auf die selbe Weise formatieren. Die finde ich nicht in "SolidEdge Spy" und weiß daher nicht, wie ich es angehen soll. Google und Suchfunktion halfen mir nicht. Weiß jemand Rat?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 09. Sep. 2011 10:49 <-- editieren / zitieren --> Unities abgeben:
Die Verläufe und Einzelheitsmarkierungen habe ich mittlerweile gefunden. Diese liegen unter Application/ActiveDocument/ActiveSheet/DrawingViews/Items/DrawingView XYZ/Annotation. Auch hier lässt sich TextColor einstellen. Aber wie stelle ich das mit VisualBasic an? Die anderen Formatierungen habe ich so hinbekommen (abgeguckt beim draftscale-Makro): Code:
Private Sub setColor() Dim mApp As SolidEdgeFramework.Application Dim mDraft As SolidEdgeDraft.DraftDocument Dim oViews As Object mApp = GetObject(, "SolidEdge.Application") mDraft = mApp.ActiveDocument For Each oViews In mDraft.ActiveSheet.DrawingViews oViews.TextColor = "16711680" 'blau Next End Sub
Jetzt muss jedoch noch "tiefer" in die Datenhierachie und für jedes Item die TextColor in Annotations setzen, falls es eine Annotations-Eigenschaft gibt.
Weiß jemand, wie ich das anstelle? [Diese Nachricht wurde von HerrJemineh am 09. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
Beiträge: 7478 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 09. Sep. 2011 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für HerrJemineh
|
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 09. Sep. 2011 11:20 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Arne Peters: Der Editor hat doch einen Objektbrowser, der Auskunft über die Eigenschaften der Objekte gibt. Oder sind die Objekte da nicht drin.
Den hat er, aber ich komme nicht an die einzelnen Items ran. Bis zu dieser Strukturtiefe komme ich: Code: Application \- ActiveDocument \- ActiveSheet \- DrawingViews
Allerdings kann ich mir die Items, die in DrawingViews stecken, nicht aufschlüsseln lassen. Die Struktur sieht in meinem Fall zum Beispiel so aus: Code: Application \- ActiveDocument \- ActiveSheet \- DrawingViews \- Items \- DrawingView 43865 \- DrawingView 43986 \- DrawingView 44006 \- DrawingView 44861 \- Annotation
VBA bietet mir zwar ".Item" (ohne s am Ende) an, aber ich weiß nicht, wie ich damit umgehen muss, um die DrawingViews weiter aufzuschlüsseln. Ich möchte wie gesagt an die Zeile "Annotation" heranzukommen, durch die Vervollständigung von VBA komme ich da jedoch nicht ran -- aber ich weiß ja auch die ID-Nummern der DrawingViews vorher nicht. Vermutlich müssen die einzelnen Items mit einer Schleife "aufgeklappt" und editiert werden!? Aber wie? Ein Code-Beispiel konnte ich leider noch nicht finden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
Beiträge: 7478 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 09. Sep. 2011 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für HerrJemineh
|
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 09. Sep. 2011 11:52 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Arne Peters: Das DrwaingView-Objekt enthält doch diverse Methoden, Eigenschaften und Objekte.
Das ändert leider nichts an der Tatsache, dass ich nicht weiß, wie ich an "Annotation" herankomme. Wie gesagt klappt es gut, dass ich TextColor von meinen DrawingViews-Items ändern kann. Wie ich aber TextColor ItemXYZ.Annotation ändere, weiß ich eben nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wksyspro Mitglied Dipl.-Ing.
Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 09. Sep. 2011 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für HerrJemineh
Hallo Jemineh, deklariere die Laufvariable für eine einzelne DrawingView, sowie der DrawingViews-Auflistung explizit mit dem korrekten Solid Edge Datentyp anstatt Object. Dann erhältst Du auch die gewünschte IntelliSense-Hilfe zur Auswahl der Eigenschaften und Methoden eines DrawingView Objekts. Anbei Dein dazu leicht abgeänderter Code: Code:
Private Sub setColor() Dim mApp As SolidEdgeFramework.Application Dim mDraft As SolidEdgeDraft.DraftDocument Dim oView As SolidEdgeDraft.DrawingView ' Einzelnes DrawingView Objekt! mApp = GetObject(, "SolidEdge.Application") mDraft = mApp.ActiveDocument For Each oView In mDraft.ActiveSheet.DrawingViews oView.TextColor = "16711680" 'blau Next End Sub
------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 12. Sep. 2011 11:18 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von wksyspro: Hallo Jemineh,deklariere die Laufvariable für eine einzelne DrawingView, sowie der DrawingViews-Auflistung explizit mit dem korrekten Solid Edge Datentyp anstatt Object. Dann erhältst Du auch die gewünschte IntelliSense-Hilfe zur Auswahl der Eigenschaften und Methoden eines DrawingView Objekts.[...]
Danke, das ist schon mal ein guter Hinweis. Mein oben beschriebenes Problem ist leider immer noch nicht gelöst -- ich weiß nicht, wie ich an die einzelnen Items "herankomme". Falls jemand noch einen Hinweis parat hat, würde ich mich freuen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wksyspro Mitglied Dipl.-Ing.
Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 12. Sep. 2011 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für HerrJemineh
@HerrJemineh, innerhalb der obigen Schleife erhältst Du mittels oView.Annotation eine Referenz vom Typ Object. Diesen Object-Typ kannst Du in diesem Fall in den Typ DetailEnvelope konvertieren (per CType). Dann erschließt sich Dir auch der Zugriff auf die TextColor-Eigenschaft der Annotation usw. CType(oView.Annotation, SolidEdgeDraft.DetailEnvelope).TextColor ------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrJemineh Mitglied
Beiträge: 10 Registriert: 08.09.2011 Solid Edge ST3, Visual Basic 2010 Express
|
erstellt am: 13. Sep. 2011 10:58 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von wksyspro: @HerrJemineh,innerhalb der obigen Schleife erhältst Du mittels oView.Annotation eine Referenz vom Typ Object. Diesen Object-Typ kannst Du in diesem Fall in den Typ DetailEnvelope konvertieren (per CType). Dann erschließt sich Dir auch der Zugriff auf die TextColor-Eigenschaft der Annotation usw. CType(oView.Annotation, SolidEdgeDraft.DetailEnvelope).TextColor
Danke, das hat mir sehr geholfen, super! Mein Code sieht in reduzierter Form momentan so aus:
Code: Dim mApp As SolidEdgeFramework.Application Dim mDraft As SolidEdgeDraft.DraftDocument Dim oColor As IntegeroColor = "16711680" 'blau mApp = GetObject(, "SolidEdge.Application") mDraft = mApp.ActiveDocument For Each oView In mDraft.ActiveSheet.DrawingViews ' Färbe Captions für Schnitte und Einzelheiten oView.TextColor = oColor ' Wenn die Ansicht eine Annotation (Schnitt, Einzelheit, ...) hat, versuche das ' jeweilige Detail einzufärben:
If oView.Annotation IsNot Nothing Then Try ' Wenn es eine Einzelheit ist, versuche zu färben: CType(oView.Annotation, SolidEdgeDraft.DetailEnvelope).TextColor = oColor Catch ' ... ansonsten versuche, ob es als Schnittverlauf klappt: Try CType(oView.Annotation, SolidEdgeDraft.CuttingPlane).TextColor = oColor Catch ex As Exception ' Wenn auch das nicht klappt, gib einen Hinweis aus: MsgBox("Ein Detail konnte nicht gefärbt werden." + vbNewLine + ex.Message) End Try End Try End If Next
Das ist natürlich ziemlich quick+dirty, aber es funktioniert vorerst. Wenn jemand einen Tipp hat, wie man um die verschachtelte Try-Anweisung herumkommen kann, immer her damit.
Ansonsten bin ich soweit zufrieden. Danke für eure Tipps! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wksyspro Mitglied Dipl.-Ing.
Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 13. Sep. 2011 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für HerrJemineh
@HerrJemineh, nun, statt des verschachtelten Try/Catch Konstrukts und Verwendung von CType, das eine Ausnahme auslöst, wenn die Konvertierung nicht möglich ist, kannst Du TryCast verwenden. TryCast liefert im Fehlerfall Nothing zurück, so dass Du das Ergebnis mit IsNot Nothing überprüfen kannst und dann davon abhängig den Zugriff auf den gewandelten Objekttyp wagen kannst. ------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |