| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: AddText nimmt Koordinaten nicht (1711 mal gelesen)
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 11:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich will mit AddText Texte entsprechend einer Textdatei einfügen, aber AC versteht meine Koordinateneingabe nicht. Da wird immer 0,0,0 genommen. Dim TextObj As AcadText Dim myCorner(0 To 2) As Double '... Datei lesen, Werte zuweisen usw. Set TextObj = ThisDrawing.ModelSpace.AddText(myText, myCorner, myHeight) An anderen Stellen hat das aber schon geklappt. Gibt es einen Trick? Mir ist so, wie wenn ich schon gehört hätte, da müssten bestimmte Datentypen verwendet oder zugewiesen werden. MfG, wwwilli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Sep. 2009 11:32 <-- editieren / zitieren -->
Hi, hier steht aber nirgends, welche Koordinaten Du zuweist, mit >> Dim myCorner(0 To 2) As Double wird die Variable mal deklariert und die 3 Array-Items auf 0.0 gesetzt, danach fügst Du den Text ein, der steht dann natürlich auf 0,0,0. Mach mal einen Breakpoint bei 'Set TextObj = ...' und lass Dir die Inhalte von 'myCorner' ausgeben. ...oder zeig uns, wo Du die Werte einstellst. - alfred - ------------------ www.hollaus.at |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 15. Sep. 2009 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
schon mit dem Beispiel aus der Hilfe verglichen .. speziell die Zuweisung .... Sub Example_AddText() ' This example creates a text object in model space. Dim textObj As AcadText Dim textString As String Dim insertionPoint(0 To 2) As Double Dim height As Double ' Define the text object textString = "Hello, World." insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0 height = 0.5 ' Create the text object in model space Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height) ZoomAll End Sub
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 12:46 <-- editieren / zitieren --> Unities abgeben:
Also dann: Da sind schon ein paar Verrenkungen auf dem Weg zu myCorner zu sehen, die eigentlich überflüssig erscheinen.
Code: Option Explicit Private Const makTitel$ = "TexteAusDateiEinfuegen v0.01" 'a Sub TexteAusDateiEinfuegen() Dim iZ As Integer, iP As Integer Dim txtFile$, zeilE$ Dim TextObj As AcadText Dim xNew, yNew, zNew Dim myCorner(0 To 2) As Double Dim myText$, myRotat As Double, myHeight As Double Dim errMsg$ Dim textDaten() As String 'On Error GoTo fehlerende errMsg = "Textdatei" txtFile = InputBox("In die aktuelle Zeichnung werden Texte eingefügt." _ + vbCr + "Texte und Koordinaten werden aus einer Datei" _ + vbCr + "eingelesen." + vbCr _ + vbCr + "Pfad und Name der Textdatei, mit Extension:", makTitel, "") If txtFile = "" Then Exit Sub 'abbrechen If Dir$(txtFile, vbNormal) = "" Then GoTo fehlerende Open txtFile For Input As #1 iZ = 0 iP = 0 Do While Not EOF(1) 'zeile lesen iZ = iZ + 1 errMsg = "Zeile" + Str(iZ) Line Input #1, zeilE If Left$(zeilE, 1) = "'" Then GoTo L1000 'daten interpretieren und plausibilitätsprüfung 'xwert;ywert;zwert;drehungaltgrad;hoehe;text; textDaten = Split(zeilE, ";") If UBound(textDaten) < 5 Then GoTo fehlerende1 If textDaten(0) = "" Then GoTo fehlerende1 If textDaten(1) = "" Then GoTo fehlerende1 If textDaten(2) = "" Then GoTo fehlerende1 If textDaten(3) = "" Then GoTo fehlerende1 If textDaten(4) = "" Then GoTo fehlerende1 If textDaten(5) = "" Then GoTo fehlerende1 xNew = CDbl(Val(textDaten(0))) 'X yNew = CDbl(Val(textDaten(1))) 'Y zNew = CDbl(Val(textDaten(2))) 'Z=0 myCorner(0) = xNew: myCorner(1) = yNew: myCorner(2) = zNew If myCorner(0) = 0# Then GoTo fehlerende1 If myCorner(1) = 0# Then GoTo fehlerende1 myRotat = Val(textDaten(3)) * 3.1415926535 / 180# myHeight = Val(textDaten(4)) myText = textDaten(5) Set TextObj = ThisDrawing.ModelSpace.AddText(myText, myCorner, myHeight) TextObj.Rotation = myRotat TextObj.Alignment = acAlignmentCenter 'textausrichtung fest eingestellt. ZoomExtents iP = iP + 1 L1000: Loop Close #1 MsgBox "Fertig." + vbCr + "Zeilen gelesen:" + Str(iZ) _ + vbCr + "Punkte eingefügt:" + Str(iP), , makTitel Exit Sub fehlerende1: Close #1 fehlerende: MsgBox "Fehler." + vbCr + errMsg, , makTitel End Sub
Textdatei (Test-Beispiel): 'xwert;ywert;zwert;drehungaltgrad;hoehe;text; 100;200;0;45;1.5;Text mit 45 Grad; 102;202;0;70;1.5;Text mit 70 Grad; 110;205;0;135;1.5;Text mit 135 Grad; 101;206;0;180;1.5;Text mit 180 Grad; 105.5;210;0;300;1.5;Text mit 300 Grad; MfG, wwwilli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Sep. 2009 12:53 <-- editieren / zitieren -->
Hi, nur bevor ich mir dieses lokal herrichte, offensichtlichen Fehler kann ich auf die schnelle nicht sehen, was passiert bei Dir, wenn Du einen Breakpoint setzt bei der Texterstellung und dann 'myCorner'-Inhalt überprüfst? Steht da 0,0,0 drin, dann musst Du dich mit schrittweiser Exektution durch so eine Schleife durchbasteln. Steht da etwas anderes als 0,0,0 drin, dann probier mal in einer TestSub nur mal eine Koordiante (<> 0,0,0) zu definieren und einen Text zu erstellen, ob der dann auch auf 0,0,0 zu liegen kommt. Lass uns die Resultate obiger Tests wissen. - alfred - ------------------ www.hollaus.at |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 13:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, die Koordinaten werden offenbar richtig aus der Textdatei gelesen. Die Kontrolle auf X=0 und Y=0 ist eigentlich meines Wissens schon drin, schon als Plausibilitätskontrolle der Eingabedaten. Kurz vor set textobj kann ich mycorner(0) und mycorner(1) mit richtigen Daten überprüfen (mit debug.print). Trotzdem kommt der Text falsch auf 0,0,0. Auch wenn ich unmittelbar vor set textobj
Code: mycorner(0) = 200 mycorner(1) = 250
einfüge, kommt der Text trotzdem auf 0,0,0. Diese folgende kleine Sub setzt den Text aber richtig auf 200,250,0:
Code: Sub TextEinfuegen() Dim TextObj As AcadText Dim myCorner(0 To 2) As Double myCorner(0) = 200 myCorner(1) = 250 myCorner(2) = 0 Set TextObj = ThisDrawing.ModelSpace.AddText("Beispiel", myCorner, 1) ZoomExtents End Sub
MfG, wwwilli
[Diese Nachricht wurde von wwwilli am 15. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 13:50 <-- editieren / zitieren --> Unities abgeben:
So, jetzt habe ich ACAD nochmal gestartet, jetzt geht es. Keine Ahnung, warum und wie, alles so wie gewünscht. Vielleicht liegt es auch dran, dass eTrust nicht mehr auf meinem PC rumnoddelt. Sorry. Ich danke Euch fürs Mitdenken. MfG, wwwilli [Diese Nachricht wurde von wwwilli am 15. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 14:07 <-- editieren / zitieren --> Unities abgeben:
Doch auch wieder nicht. Ich hatte noch etwas geändert zwischendurch. Es scheint an der Zeile zu liegen: Code: TextObj.Alignment = acAlignmentCenter
Da kommt bei mir alles auf 0,0,0. Wenn ich setze:
Code: TextObj.Alignment = acAlignmentLeft
dann wird es richtig (allerdings eben nicht zentriert, wie ich es mir vorgestellt hatte). Damit kann ich weiter experimentieren...MfG, wwwilli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 15. Sep. 2009 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
na wenn du den Text einen anderen Ausrichtepunkt verpasst, mußt du dann auch TextAlignmentPoint setzen ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 15. Sep. 2009 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Sep. 2009 14:43 <-- editieren / zitieren --> Unities abgeben:
Ja, jetzt wo ich es sage, sieht es jeder, nicht wahr... Nun, das mit dem AlignmentPoint hatte und habe ich nicht verstanden, kann mich aber einarbeiten, muss eigentlich hier aber nicht sein. Ich dachte, "textobj.alignment=irgendwas" wäre das selbe, wie wenn ich im DWG unter den Element-Eigenschaften die Ausrichtung auf "irgendwas" ändere. War wohl zu einfach gedacht, würde ich aber jederzeit nächstesmal wieder so denken. MfG, wwwilli Herr Weiß-ich-nicht wohnt übrigens an der Autobahn. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Sep. 2009 14:54 <-- editieren / zitieren -->
Hi, >> Ja, jetzt wo ich es sage, sieht es jeder, nicht wahr... Oh JA, da war wohl das erste Codeschnippsel Auslöser für 'zu oberflächlich überfliegen' Deines größeren Codeteils, da war ich zumindest zu sehr fixiert auf 'wo ändern sich die Koordinaten auf 0,0,0'. >> ...das selbe, wie wenn ich im DWG unter den Element-Eigenschaften >> die Ausrichtung auf "irgendwas" ändere...
Na dann schau Dir mal das Eigenschaftsfenster im AutoCAD an, wenn Du die Ausrichtung von linksbündig auf zentriert stellst. Du wirst hier bemerken, dass AutoCAD auch hier 2 Punkte für einen Text führt (Position und Textausrichtung) und bei der Änderung der Ausrichtung den jeweils anderen 'mitzieht'. Nun ist die Situation, dass Du die Ausrichtung nicht per UserInterface von AutoCAD machst, sondern im eigenen Programm, damit gibt AutoCAD die Verantwortung auch an Dich ab. - alfred - ------------------ www.hollaus.at |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 15. Sep. 2009 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
'Tschuldige bitte, dass ich Deinen code nicht Zeile für Zeile auseinandergenommen habe vorher... Ist ja auch dasselbe. Wie im verlinkten thread angedeutet: Vergleich mal den Text, den Du in der dwg mit Ausrichtung links erzeugt hast, mit einem, dem Du die Ausrichtung Mitte verpaßt hast. Schau Dir dabei das Eigenschaftenfenster genau an: Geometrieteil (Position X,Y,Z) <> Textteil Textausrichtung X,Y,Z) der AlignmentPoint gehört nunmal zur Ausrichtung dazu, kann ja von uns keiner was für ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Excel -Suche | RuA-Suche | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 16. Sep. 2009 09:57 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|