| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Austausch von Schriftkopftexten (2039 mal gelesen)
|
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 20. Aug. 2010 07:05 <-- editieren / zitieren --> Unities abgeben:
Guten Maorgen, Ich versuche mittels API (Visual Studio 2010) in einer Zeichnung einen Text im Schriftfeld zu ersetzen! Als Beispiel habe ich ein ben. def. Property aus dem 3D Modell der Zeichnung im Schriftkopf und möchte dessen Text durch einen anderen Text ersetzen. Nun versuche ich dies mit der Funktion 'SetPromptResultText' leider bekomme ich dabei immer eine Ausnahme 'Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))' doch weiß ich nicht welches Argument bzw welcher Parameter falsch sein sollte?? Mein Code:
Code:
Dim oDoc As Inventor.DrawingDocument = TryCast(InvApp.ActiveDocument, Inventor.DrawingDocument) Dim oSheet As Inventor.Sheet = oDoc.ActiveSheet Dim TitleBlock As Inventor.TitleBlock = oSheet.TitleBlock Dim oTextBoxes As Inventor.TextBoxes = TitleBlock.Definition.Sketch.TextBoxes For Each oTextbox As Inventor.TextBox In oTextBoxes Try If InStr(TitleBlock.GetResultText(oTextbox), "Text") Then TitleBlock.SetPromptResultText(oTextbox, "Neuer Text") End If Catch ex As Exception End Try Next
Vielleicht kann mir jemand helfen, danke im Voraus!! ------------------ Geht nicht gibts nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 20. Aug. 2010 20:51 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
|
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 21. Aug. 2010 06:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für die Antwort! Habe nun mal versucht über das Property oTextBox.Text den Text zu setzen. Bekomme aber auch hier eine Ausnahme: Unbekannter Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL)) Hat jemand eine Idee?? ------------------ Geht nicht gibts nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 21. Aug. 2010 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo Probier's mal so: Code: Private Sub changetitleblocktext()Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oTitleBlock As TitleBlockDefinition Set oTitleBlock = oDoc.TitleBlockDefinitions.Item(1) 'ggf. anpassen Dim oSketch As DrawingSketch Call oTitleBlock.Edit(oSketch) Dim oTextBox As TextBox Set oTextBox = oSketch.TextBoxes.Item(1) 'ggf. anpassen oTextBox.Text = "test" Call oTitleBlock.ExitEdit(True) End Sub
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 22. Aug. 2010 11:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für den Vorschlag! Mit deiner Variante bearbeitet man natürlich die Schriftfelder in den Zeichnungsressourcen und nicht das Schriftfeld am Blatt! Mhh anscheinend muss ich einen anderen Weg gehen! LG und Danke! ------------------ Geht nicht gibts nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 22. Aug. 2010 20:43 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo Bei mir hatte das Bearbeiten der Definition auch direkten Einfluß auf das eingefügte Schriftfeld. Meines Wissens sind eingefügte Schriftfelder auch lediglich eine Referenz auf die Definition. Naja, wenn du den richtigen Weg findest, bin ich auch dran interessiert. Nebenbei bemerkt, dein oDoc.ActiveSheet.TitelBlock.Definition ist mM das gleiche wie oDoc.TitleBlockDefinition. ------------------ MfG RK [Diese Nachricht wurde von rkauskh am 22. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mssoftware Mitglied alles mögliche
Beiträge: 76 Registriert: 15.06.2005 Design Suite 2011-2016 Ultimate Microsoft Visual Studio Professional 2010<P>i7 2600K @3,4Ghz Windows 7 64bit nvidia GTX 760 16GB RAM 2x SSD256GB NAS 1TB (gespiegelt)
|
erstellt am: 23. Aug. 2010 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Probier es mal hiermit: Code:
For Each oTextbox As Inventor.TextBox In oTextBoxes Try Debug.WriteLine(oTextbox.Text.ToLower) If oTextbox.Text.ToLower = "<test>" Then TitleBlock.SetPromptResultText(oTextbox, "Neuer Text") End If Catch ex As Exception End Try Next
Bei mir funktioniert es. Wo genau kommt denn die Fehlermeldung, bei der "If InStr(TitleBlock.GetResultText(oTextbox), "Text") Then" oder beim schreiben der Variabel? Gruß Maik Schmitz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 24. Aug. 2010 07:16 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, @mssoftware Ich habe deinen Code mal getestet! Die Exception tritt noch immer auf, genau wenn der neue Text über SetPromptResultText gesetzt werden sollte. Wie hast du TitleBlock belegt?? über ActiveSheet.TitleBlock?? Da unser Kunde Texte im Schriftfeld aus dem 3D-Modell holt diese aber durch Propertys aus der Zeichnung ersetzen möchte werde ich, nachdem dies so nicht funktioniert, wohl die Propertys im Modell überschreiben oder die Schriftfelder austauschen! ------------------ Geht nicht gibts nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 24. Aug. 2010 07:55 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo Nochmal, SetPromptTextResult funktioniert NUR mit angeforderten Eingaben! Nachdem nun endlich raus ist, daß ein benutzerdefiniertes iPropertie des Modells durch ein benutzerdefiniertes iPropertie der Zeichnung ersetzt werden soll, kann man auch sagen, daß dazu meines Wissens das Propertie "FormattedText" der TextBox überschrieben werden muss. Man könnte mit einer Ersetzungsregel a) model durch drawing ersetzen und b) den Propertienamen. Viel Spaß. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mssoftware Mitglied alles mögliche
Beiträge: 76 Registriert: 15.06.2005 Design Suite 2011-2016 Ultimate Microsoft Visual Studio Professional 2010<P>i7 2600K @3,4Ghz Windows 7 64bit nvidia GTX 760 16GB RAM 2x SSD256GB NAS 1TB (gespiegelt)
|
erstellt am: 24. Aug. 2010 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Guten morgen. Zitat: ... Wie hast du TitleBlock belegt?? über ActiveSheet.TitleBlock?? ...
Habie ich genauso aus deinem Beispiel übernommen: Code: Dim oDoc As Inventor.DrawingDocument = TryCast(oInventorApp.ActiveDocument, Inventor.DrawingDocument) Dim oSheet As Inventor.Sheet = oDoc.ActiveSheet Dim TitleBlock As Inventor.TitleBlock = oSheet.TitleBlock Dim oTextBoxes As Inventor.TextBoxes = TitleBlock.Definition.Sketch.TextBoxes For Each oTextbox As Inventor.TextBox In oTextBoxes Try Debug.WriteLine(oTextbox.Text.ToLower) If oTextbox.Text.ToLower = "test" Then TitleBlock.SetPromptResultText(oTextbox, "Neuer Text") End If Catch ex As Exception MsgBox(ex.Message) End Try Next
Welche API Version verwendest du? Ich habe IV 2010. Ist die Zeichnung schreibgeschützt? Ansonsten weiß ich auch nicht mehr woran es liegen könnte. Gruß Maik Schmitz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 24. Aug. 2010 08:50 <-- editieren / zitieren --> Unities abgeben:
Hallo, @rkauskh Was bedeutet "angeforderte Eingaben" Den "FormattedText" zu ändern habe ich schon versucht, leider lässt er mich den String nicht ändern! Hast du das schon mal gemacht, vll hast du ein Beispiel?? @mssoftware Habe nun deinen Code nochmal getestet, noch immer die Ausnahme bei SetPromptResultText! Ich verwende hier Inventor 2010 (Autodesk.Inventor.Interop 14.0.0.0) und die Zeichnung ist natürlich nicht schreibgeschützt. Welches OS hast du bzw. 32 od. 64Bit?? ------------------ Geht nicht gibts nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 24. Aug. 2010 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo Angeforderte Eingaben sind die Art von Textfeldern, die beim neu Erstellen einer Zeichnung bzw. beim neu Einfügen eines Zeichnungsblattes den Dialog hochpoppen lassen, in dem die angeforderten Eingaben vom User auszufüllen sind. Um ein benutzerdefiniertes iProp des Modells zu ändern auf ein benutzerdefiniertes iProp der Zeichnung, probiert mal: Code: Private Sub changetitleblocktext()Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oTitleBlock As TitleBlockDefinition Set oTitleBlock = oDoc.TitleBlockDefinitions.Item(1) 'ggf. anpassen Dim oSketch As DrawingSketch Call oTitleBlock.Edit(oSketch) Dim oTextBox As TextBox Set oTextBox = oSketch.TextBoxes.Item(24) 'ggf. anpassen oTextBox.FormattedText = "<Property Document='drawing' PropertySet='User Defined Properties' Property='bendefiPropZeichnung' FormatID='{D5CDD505-2E9C-101B-9397-08002B2CF9AE}' PropertyID='38'>bendefiPropZeichnung</Property>"
Call oTitleBlock.ExitEdit(True) End Sub
Die internen Bezeichner des iProps müßt ihr an eure Gegebenheiten anpassen. Ansonsten sollte es laufen, außer mein 2011er hat dort wieder mehr Fähigkeiten als der 2010er. Im 2011er Inventor scheint es einen Bug zu geben. Es wird immer das erste Schriftfeld in der Liste der Zeichnungsresourcen geöffnet, nicht das was man ihm sagt. Prüft mal, ob das im 2010er auch schon so ist. Wenn ja, müßte man noch die Reihenfolge umsortieren. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mssoftware Mitglied alles mögliche
Beiträge: 76 Registriert: 15.06.2005 Design Suite 2011-2016 Ultimate Microsoft Visual Studio Professional 2010<P>i7 2600K @3,4Ghz Windows 7 64bit nvidia GTX 760 16GB RAM 2x SSD256GB NAS 1TB (gespiegelt)
|
erstellt am: 24. Aug. 2010 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo. Ich hab es auf einem Win 7 Rechner mit 64 bit ausprobiert. Sollte allerdings nicht daran liegen. Bei einem angefordertem Textfeld, wird bei absetzen eines Symboles oder beim einfügen eines Schriftfeldes, der Inhalt durch ein Eingabefenster angefordert. Siehe erstes Bild. "Angeforderte Eingaben" können nur in skizzierten Symbolen und Schriftfeldern definiert werden. z.B. Schriftfeld bearbeiten -> Text einfügen -> als Typ "Angeforderte Eingabe" auswählen und den Text mit z.B. Test überschreiben In diesem Fall würde oTextBox.text = "Test" sein. @rkauskh Zitat: Um ein benutzerdefiniertes iProp des Modells zu ändern auf ein benutzerdefiniertes iProp der Zeichnung, probiert mal:
Warum nicht gleich die Variabel im Model schreiben und in der Zeichnung auf die Variabel im Model verweisen? So machen wir es zumindestens seit Jahren. Code: Dim ivvargruppe As String = Nothing Dim propname As String = "Part Number" '= Bauteilnummer Dim wertschreiben As Boolean = True Dim neuerwert As String = "neue Bauteilnummer" 'ivvargruppe = "Inventor Summary Information" '**Inventor - Zusammenfassungsinformationen 'ivvargruppe = "Inventor Document Summary Information" '**Inventor - Zus.-fassungsinfo f. Dokument ivvargruppe = "Design Tracking Properties" '**Design Tracking - Eigenschaften 'ivvargruppe = "Inventor User Defined Properties" '**Inventor - Benutzerdefinierte Eigenschaften Dim props As PropertySet Dim prop As [Property] Dim wert As String = "" Dim propvorhanden As Boolean = False oIVDoc = oInventorApp.ActiveDocument For Each props In oIVDoc.PropertySets() If props.Name = ivvargruppe Then For Each prop In props If prop.Name.ToLower = propname.ToLower Then propvorhanden = True Try If wertschreiben Then prop.Value = neuerwert Else wert = prop.Value.ToString End If Catch ex As Exception MsgBox(ex.Message) End Try Exit For End If Next If ivvargruppe = "Inventor User Defined Properties" And wertschreiben And propvorhanden = False Then props.Add(neuerwert, propname) End If Next End Sub
Ist eigentlich eine eigenständige Funktion in vb.net gewesen, deswegen die ganzen Werte oben als DIM... Die Funktion kann eine iProp lesen und schreiben. Die Iprop wird anhand seines internen Namens identifiziert. Geht auch mittels "DisplayName", allerdings hat man dann Probleme, wenn Inventor keine deutsche Version ist. Gruß Maik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FERODO Mitglied Software Application Engineer
Beiträge: 40 Registriert: 24.11.2007 DELL Precision M6400 Intel Core 2 Extreme 8GB Ram<P>Inventor Pro 2010 PSPro 2010
|
erstellt am: 24. Aug. 2010 12:26 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 24. Aug. 2010 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Hallo @mssoftware Zitat: Warum nicht gleich die Variabel im Model schreiben und in der Zeichnung auf die Variabel im Model verweisen?
Hmm, gute Frage. War jetzt so vom TE nicht gefordert, aber könnte man auch machen. Aktualisiert ihr manuell oder bei OnSave? Ich habe bei solchen Synchronisiersachen immer die Angst, daß der User auf der falschen Seite Änderungen einpflegt und nicht merkt, das seine Änderung übergebügelt wird. Leider lassen sich iProps nicht auf nur lesen setzen. @FERODO Schön das es jetzt läuft. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mssoftware Mitglied alles mögliche
Beiträge: 76 Registriert: 15.06.2005 Design Suite 2011-2016 Ultimate Microsoft Visual Studio Professional 2010<P>i7 2600K @3,4Ghz Windows 7 64bit nvidia GTX 760 16GB RAM 2x SSD256GB NAS 1TB (gespiegelt)
|
erstellt am: 25. Aug. 2010 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für FERODO
Guten morgen, wir pflegen die iProps manuell mit einer selbst geschriebenen externen Software, mit der wir gleich eine Anbindung an Profile haben. Profile Projektnummer eingeben und die Kundendaten werden per Oracle View vom Prg gelesen und können dann an die Zeichnung bzw. die 3D Modelle übertragen werden. Gruß Maik Schmitz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |