| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Blatt/Rahmen/Schriftfeld hinzufügen + Text einfügen (2158 mal gelesen)
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 12. Jun. 2015 07:37 <-- editieren / zitieren --> Unities abgeben:
Schönnen guten Tag miteinander, 1.Problem: Ich möchte über eine Auswahl ein neues Blatt mit Rahmen und Schriftfeld einfügen. Ich habe dazu folgenden Code: Dim ThisApplication As Inventor.Application ThisApplication = GetObject(, "Inventor.Application") Dim oDrawDoc As DrawingDocument oDrawDoc = ThisApplication.ActiveDocument Dim oNewSheet As Sheets oNewSheet = oDrawDoc.Sheets Call oNewSheet.Add(DrawingSheetSizeEnum.kA4DrawingSheetSize) '################################################# 'Neuen Rahmen einfügen
Dim oSheet As Sheet oSheet = oDrawDoc.ActiveSheet Call oSheet.AddBorder("A3 DIN") '################################################# 'Neues Schriftfeld einfügen Dim oTitleBlockDef As TitleBlockDefinition oTitleBlockDef = oDrawDoc.TitleBlockDefinitions.Item("Schriftfeld") Dim oTitleBlock As TitleBlock oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef)
Fragen: -in der letzten Zeile fliegt er raus und bringt die Fehlermeldung: Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 E_INVALIDARG)) -Wie kann ich beim Blatt einstellen ob es Hoch oder Quer sein soll? Ist jetzt immer quer was ich nicht will -Wie kann ich den Blattname gleich vergeben? 2. Problem: Ich erstelle auf dem Blatt automatisch eine Skizze, das klappt alles super. In die Skizze soll dann Text mit rein. den Text bring ich mit dem Code rein: Call oSketch.TextBoxes.AddByRectangle(ThisApplication.TransientGeometry.CreatePoint2d(4.1, 2.8 ), _ ThisApplication.TransientGeometry.CreatePoint2d(5, 2.3 ), "Text") kann man hier irgendwie die Schriftgröße und den Zeilenabstand festlegen? Kann man die ausrichtung fetslegen?
Sind jetzt ganz schön viele Fragen auf einaml Einen schönen Tag wünsch ich noch. MfG Felix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 15. Jun. 2015 08:36 <-- editieren / zitieren --> Unities abgeben:
Also ich hab jetzt durch langes Probieren übers We verschiedenes hinbekommen: -Blattausrichtung und Benennung: Call oNewSheet.Add( DrawingSheetSizeEnum.kA3DrawingSheetSize, -> Blattgröße PageOrientationTypeEnum.kLandscapePageOrientation, ->Ausrichtung (k.Landscape=Quer ; kPortrait = Hoch) "Neu erstellt") -> Name -Text einfügen: Call oSketch.TextBoxes.AddByRectangle(ThisApplication.TransientGeometry.CreatePoint2d(5, 5), _ ThisApplication.TransientGeometry.CreatePoint2d(8, 8), "Hallo2", TextStyle:="engl.") Über TextStyle kann ein Stil fetsgelegt werden. In dem Stil kann man alles einstellen was man will (Größe,Zeilenabstand,Ausrichtung,Farbe....) Ist zwar nicht die beste Variante da man dadurch viele Stil´s definieren muss aber naja es geht erstmal. Nur den fehler bei einfügen des Schriftfeldes den kann ch mir immer noch ni erklären? Weis da vielleicht jemand Rat? MfG Felix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 17. Jun. 2015 08:16 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Felix, ich hab mir deinen Code mal kopiert und das mit dem Schriftfeld ausprobiert. Bei mir funktioniert es reibungslos. Habe ein Schriftfeld genommen, was bei mir in den Zeichnungsressourcen vorhanden ist und das fügt er ohne zu meckern ein. Hast du eventuell einen Schreibfehler beim Namen des Schriftfeldes?
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 17. Jun. 2015 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Ich glaube ich habe deinen Fehler gefunden. Du möchtest doch sicher auf dem neuen sheet ein Schriftfeld einfügen, oder? Dann musst du das auch in dem Code schreiben. Also nicht:
Code: oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef)
sondern: Code: oTitleBlock = oNewSheet.AddTitleBlock(oTitleBlockDef)
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 17. Jun. 2015 08:54 <-- editieren / zitieren --> Unities abgeben:
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 17. Jun. 2015 09:01 <-- editieren / zitieren --> Unities abgeben:
Ok Chris hab grad eine neue Erkenntnis bekommen....deine Korrektur stimmt nicht. Es muss osheet heisen. Ich hab grad raus bekommenwie der Fehler entsteht. Es gibt in Schriftfeldern ja die möglichkeiten Eingaben zu fordern. (kennst ja bestimmt, das kleine Fenster was nach dem neu erstellen einer Zeichnung aufgeht) Wenn die drin sind entsteht ein Fehler: Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG)) Also wenn man keine Angeforderten Eingaben drin hat klapt das einfügen. Das heißt man müsste die Eingaben irgendwie mit übergeben oder? 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: 17. Jun. 2015 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 17. Jun. 2015 09:05 <-- editieren / zitieren --> Unities abgeben:
Ah okay das wusste ich nicht danke Aber da ich eh gerade alle Vorlagen erneuer und die Daten nicht mehr über angefordete Eingaben in das Schriftfeld hole sondern direkt über die Properties sollten ja keine Fehler deswegen entstehen MfG Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 19. Jun. 2015 11:04 <-- editieren / zitieren --> Unities abgeben:
Also Ralf mit den Prompstrings komm ich noch nicht so ganz klar. Ich hab verschieden Schriftfelder wo Eingaben gefordert sind. Kann ich irgendwie abfragen wie viele Eingaben gefordert sind? Wenn ich die angeforderten Abfrage anlege gebe ich denen ja einen Name ( Bsp: Projektnummer) Kann ich jetzt mit Code suchen welcher Prompstring den Name hat? Und kann ich wenn bereits ein Schriftfeld angelegt ist die Eingaben auch auslesen? ------------------ ---------------------------------- Mit freundlichen Grüßen Felix [Diese Nachricht wurde von Fiedel93felix am 19. Jun. 2015 editiert.] 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: 19. Jun. 2015 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Die Strings müssen im Array in der korrekten Anzahl und Reihenfolge stehen, wie sie beim normalen Einfügen abgefragt werden. Man kann leider keine andere Zuordnung vornehmen. Die Anzahl der Eingaben kann meines Wissens nicht direkt abgefragt werden. Dazu müßtest du vor dem Einfügen durch alle Textboxen der TitleBlockDefinition gehen und im Text-Property nachsehen ob da was mit <Prompt> drinsteht. Da es deine Schriftfelder sind, müßtest du doch aber wissen wie viele Eingaben erforderlich sind oder? Den Inhalt der jeweiligen TextBox kannst du mit der TitleBlock.GetPromptResultText Methode abfragen und mit TitleBlock.SetPromptResultText schreiben. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 19. Jun. 2015 12:50 <-- editieren / zitieren --> Unities abgeben:
Vielen dank für die Antwort Ralf ich hatte grad selbst eine Lösung gefunden, wie das abfragen der einzelnen Inhalte klappt. Dim oSketch As DrawingSketch oSketch = oDrawDoc.ActiveSheet.TitleBlock.Definition.Sketch Dim oTextBox As TextBox Dim Projekt As String Dim i As Integer i = 0 For Each oTextBox In oSketch.TextBoxes If Left(oTextBox.FormattedText, 7) = "<Prompt" Then If oTextBox.Text = "Projekt" Then Projekt = oTitleBlock.GetResultText(oTextBox) Exit For Else i = i + 1 End If End If Next Frage: Um raus zu bekommem wie viele Eingaben nach dem Platzieren gefordert sind könnte man da alle Textboxen des Schriftfeldes durchlaufen? Also bevor das Schriftfeld platziert wurde. Geht das irgendwie?
------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 19. Jun. 2015 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Das eingefügte Schriftfeld ist ja "nur" eine Art Verknüpfung zur TitleBlockDefinition. Wenn du vor dem Platzieren die Zahl der angeforderten Eingaben ermitteln willst, mußt du die TitleBlockDefinition untersuchen.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 22. Jun. 2015 15:06 <-- editieren / zitieren --> Unities abgeben:
Danke Ralf für deine Hilfe. Und für alle die mal in die Verlegenheit kommen ein Blatt mit Rahmen und Schriftfeld einzufügen hier mein Code: Er fügt das ausgewählte Blatt ein, dann den Ausgewählten Rahmen, dann das ausgewählte Schriftfeld und lässt dabei alle angeforderten Angaben erstmal leer. Die können ja ohne Probleme danach noch bearbeitet werden. Dim ThisApplication As Inventor.Application ThisApplication = GetObject(, "Inventor.Application") Dim oDrawDoc As DrawingDocument oDrawDoc = ThisApplication.ActiveDocument Dim oNewSheet As Sheets oNewSheet = oDrawDoc.Sheets 'Blatt erstellen Call oNewSheet.Add(DrawingSheetSizeEnum.kA3DrawingSheetSize, PageOrientationTypeEnum.kLandscapePageOrientation, "Test") '' -> A3 ->Querformat ->Blattname 'Neuen Rahmen einfügen
Dim oSheet As Sheet oSheet = oDrawDoc.ActiveSheet Call oSheet.AddBorder("A3 DIN") '' ->Name des Rahmens (muss existieren) 'Neues Schriftfeld einfügen Dim oTitleBlockDef As TitleBlockDefinition oTitleBlockDef = oDrawDoc.TitleBlockDefinitions.Item("Schriftfeld A4") ' ->Name Schriftfeld(Muss existieren) Dim oSketch As DrawingSketch oSketch = oTitleBlockDef.Sketch Dim oTitleBlock As TitleBlock Dim oTextBox As TextBox 'Schriftfeld nach Anzahl angeforderten Angaben abfragen Dim i As Integer i = 0 For Each oTextBox In oSketch.TextBoxes If Left(oTextBox.FormattedText, 7) = "<Prompt" Then i += 1 End If Next 'Schriftfeld einfügen If i = 0 Then oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef) Else Dim sPromptStrings(i - 1) As String For z As Integer = 0 To i - 1 sPromptStrings(z) = z Next oTitleBlock = oSheet.AddTitleBlock(oTitleBlockDef, , sPromptStrings) End If Wer Fragen hat oder manches vielleicht anders machen würde, einfach antworten.
------------------ ---------------------------------- Mit freundlichen Grüßen
Felix [Diese Nachricht wurde von Fiedel93felix am 22. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 25. Jun. 2015 10:22 <-- editieren / zitieren --> Unities abgeben:
Ich hätte da doch noch ne Frage zu den PromptString. Kann ich nach dem Platzieren auch noch auf die Propmpstring zugreifen. Also ich hab die Zahl die das Promptstring hat und will das jetzt editieren. ------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 25. Jun. 2015 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Hatte ich oben schonmal geschrieben:
Zitat: Den Inhalt der jeweiligen TextBox kannst du mit der TitleBlock.GetPromptResultText Methode abfragen und mit TitleBlock.SetPromptResultText schreiben.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 25. Jun. 2015 11:52 <-- editieren / zitieren --> Unities abgeben:
Erstmal danke Ralf Aber ich hab ein Teil in meiner Frage vergessen... Kann man die Promptstring auch ändern, ohne alle Textboxen einers Schriftfeldes nach der gewünschten zu durchsuchen? Also beim erstellen des Schriftfeldes hat der gewünschte wert den SPrompString(2). Diesen String möchte ich jetzt erst aus dem platzierten Schriftfeld abfragen und dann evt. ändern. Aber dabei möchte ich eigentlich nicht den Weg gehen alle Textboxen des Schriftfeldes abzufragen... Ich hoffe jetzt ist es verständlicher formuliert ------------------ ---------------------------------- Mit freundlichen Grüßen Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |