| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Text? (1618 mal gelesen)
|
Willynchen_neu Mitglied

 Beiträge: 24 Registriert: 07.11.2005
|
erstellt am: 05. Mrz. 2006 12:14 <-- editieren / zitieren --> Unities abgeben:         
Hallöchen, ich hab mal eine Frage. Ich hab eine Zeichnung mit bestimmten Höhen. Diese Höhen lass ich mir als Bemaßung in der Zeichnung anzeigen. Jetzt möchte ich diesen Text formatieren. Bsp.: 123,230 Es soll, wenn am Ende eine Null steht, diese gelöscht werden. Es steht dann praktisch 123,23 da. Leider weiß ich nicht, was das für ein Text ist (Mtext...etc.) und weiß deshalb auch nicht, wie ich darauf zugreifen soll. Kann mir da irgendjemand einen Tip geben? Hab auch schon versucht über Suchen/Ersetzen im ACAD zugehen. Leider weiß ich nicht, was hier die Ersatzzeichen sind. Evtl. muß man ja garnix programmieren?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 05. Mrz. 2006 17:29 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
Hallo, ich glaube du willst was machen was jedem Vermesser absolut gegen die Hutschnur geht. Gibt es bei einem Mass 3 Nachkommastellen ist es mit einer Genauigkeit von 1mm , gibt es nur eine dann ahlt auf 1dm. Diese Information willst du gerede zerstören. Wenn es aber unbedingt sein muss, kannst du das unter den Eigenschaften der Bemassung einstellen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Willynchen_neu Mitglied

 Beiträge: 24 Registriert: 07.11.2005
|
erstellt am: 05. Mrz. 2006 18:54 <-- editieren / zitieren --> Unities abgeben:         
 ....naja....nicht jedem vermesser (also mir :-D ) geht das gegen die hutschnur...ich kann ja nur die genauigkeit angeben mit der ich gemessen hab und die ich garantieren kann...klar kann man auf mm angeben aber was soll das bei ner geländeaufnahme so....zurück zum thema... ich hab mich etwas falsch ausgedrückt...also die daten kommen über eine scriptdatei in die zeichnung z.b ".....layer se PH_Schutzziel_1 text 4530577.000,5664363.000,137.120 2.000 100.0 137.120..." also nix anderes als: befehl 'text'und dann den eingabeaufforderungen folgen...nur automatisch...und nun will ich die texte (137.120) in der zeichnung aufsuchen und ändern, nur fehlt mir dazu die richtige idee...ich habs mit 'suche/ersetze' versucht (auch in der scriptdatei) die entsprechenden höhentexte aufsuchen und ändern aber mir fehlt der richtige suchalgorithmus z.B. suche nach *.**0...ersetze durch *.**...aber das nimmt autocad2004 irgendwie nicht.... [Diese Nachricht wurde von Willynchen_neu am 05. Mrz. 2006 editiert.] [Diese Nachricht wurde von Willynchen_neu am 05. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 05. Mrz. 2006 20:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
Hi, här? irgendwie raff' ichs noch nicht so ganz, also deine Maße sind Texte und stehen in einer Zeile, eg: "137.12000 0.050 1200.2 1.1234 1.00000" Wenn ja, das geht mit RE oder nem Split s.u. - aber erklär doch bitte nochmal genau, wie das Ganze bei Dir aussieht, dText? mtext? mehrere standalone Nummerntexte oder echt alle Nummern in einer Zeile??? Gruss Nancy --
Code:
Sub x() Dim re As Object, s$ Set re = CreateObject("vbscript.regexp") re.Global = 1 s = "137.12000 0.050 1200.2 1.1234 1.00000" re.Pattern = "(\d+\.\d\d)\d+" Debug.Print 1, re.Replace(s, "$1") Dim arr, i arr = Split(Replace(s, ".", ",")) For i = 0 To UBound(arr) arr(i) = FormatNumber(arr(i), 2) 'oder alternativ 'arr(i) = Round(arr(i), 2) Next Debug.Print 2, Join(arr) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 05. Mrz. 2006 20:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 05. Mrz. 2006 20:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
Oder bau dir doch ein kleines Progi. Code:
Option ExplicitPrivate Sub BT_Ausführen_Click() Dim Text As String, T_pos&, T_Len& Dim Anzahl& If Val(Me.lbl_Anzahl.Caption) = 0 Then MsgBox "Es sind noch keine Entities gewählt !", vbCritical Exit Sub End If Anzahl = Val(lbl_Anzahl) Select Case Me.TabStrip1.SelectedItem.key Case "ERSETZEN" FrmFortschritt.Show FrmFortschritt.Caption = "Texte tauschen ..." FrmFortschritt.ProgressBar1.value = 0 FrmFortschritt.ProgressBar1.Max = Anzahl Me.Visible = False ' ... Case "RUNDEN" Dim wert#, strWert$ FrmFortschritt.Show FrmFortschritt.Caption = "Zahlen runden ..." FrmFortschritt.ProgressBar1.value = 0 FrmFortschritt.ProgressBar1.Max = Anzahl Me.Visible = False ' Wenn Layer gesperrt On Error Resume Next For i = 0 To Anzahl - 1 FrmFortschritt.ProgressBar1.value = i + 1 Set obj_ACAD_Entity = obj_ACAD_Grafikauswahl(i) Select Case obj_ACAD_Entity.EntityType Case acText, acMText strWert = Replace(obj_ACAD_Entity.TextString, ",", ".") wert = Val(strWert) strWert = Format$(wert, "0." & String(Val(Me.Nachkommastellen.Text), "0")) obj_ACAD_Entity.TextString = prefix.Text & strWert & suffix.Text obj_ACAD_Entity.Update Case Else 'MsgBox "Falsches Entity" & cr & "[" & Entity.EntityName & "]", vbInformation End Select Next i End Select ende: Unload FrmFortschritt Me.Visible = True End Sub
Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Willynchen_neu Mitglied

 Beiträge: 24 Registriert: 07.11.2005
|
erstellt am: 07. Mrz. 2006 14:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, erstmal vielen Dank für die Antwort. Also das mit den Daten vor dem Einlesen formatieren geht schlecht. Nochmal zur Erklärung. Ich bekomme die Daten über ein externes Programm in ein Script gewandelt. In dem Programm ist die Genauigkeit von 3 Nachkommastellen fest veranktert. Hier kann ich nichts ändern. Leider. Das gewandelte Script besteht aus 1 Spalte, in der alles hinein gepackt ist. Dazu kommt aber noch, daß die 1. Zeile die Angaben der Meßpunkte für einen bestimmten Layer enthält, die 2. Zeile dann die Angaben für die Texte in dem Layer, die 3. Zeile wieder die Angaben für die Punkte in einem anderen Layer, die 4. Zeile die Texte für den anderen Layer usw. Da jedoch in der Layerzeile mehr Angaben stehen, als in der Textzeile, geht das mit Text in Spalten machen über Excel auch nur sehr mühselig. Naja hatte nun versucht dein Programm zu basteln, aber ich komme irgendwie nicht richtig zu Fach. Was bzw. wie muß ich denn die obj_ACAD_Entity definieren? Dein Programm ist ja dann auch schon der reinste Luxus. Eigentlich wollt ich ja nur wissen, wie ich bzw. was ich alles definieren muß, um den Text im ACAD ansprechen zu können. Vielleicht kann mir jemand einen Tip geben, wo es dazu mal nen guten Überblick gibt? Bin noch am Lernen und leider kein Profi. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 07. Mrz. 2006 22:32 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
Moment mal, ich stell' mich jetzt mal ganz doof;-) Also: > Ich bekomme die Daten über ein externes Programm in ein Script gewandelt. > In dem Programm ist die Genauigkeit von 3 Nachkommastellen fest veranktert. weiter schreibst du: > Da jedoch in der Layerzeile mehr Angaben stehen, als in der Textzeile, > geht das mit Text in Spalten machen über Excel auch nur sehr mühselig. Du sprichst von einem reinen Textfile, ja? Oder halt *.scr? Wenn ja, wäre es IMHO gleich besser mit dem evil_by_root, also das File zu ändern, als erst im Nachgang dann durch alle Acad-Texte zu iterieren. Bin aber zugegebenermassen ein ziemlicher N00b mit scr, also kannst evtl. mal 'nen Auszug von dem Script zeigen? Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 08. Mrz. 2006 20:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
Hallo Willynchen_neu, um Text im Acad/VBA ansprechen zu können brauchst du nicht viel. zB.
Code: Sub texte() Dim object As AcadObject For Each object In ThisDrawing.ModelSpace Hier einfügen was du machen willst... End If Next object End Sub
Aber ich würd auch lieber die scr-Datei bearbeiten. Wenn du mal ein paar Zeilen ins Forum stellst, kann man da mehr sagen. Eine (allerdings nicht ungefährliche) Idee wäre zb. globale Textersetzung im Script. Befehle bzw. Werte werden im Script duch Blanks getrennt. Wenn du nun immer die 0 in der letzten Stelle weg haben willst kannst du event. den String "0 " durch " " ersetzen. Aber bitte aufpassen, das kann auch an Stellen vorkommen wo du das haben willst, wie gesagt ein Muser würde helfen. mfg didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 08. Mrz. 2006 20:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Willynchen_neu
sorry hab eine Zeile verschluckt: Code: Sub text() Dim object As AcadObject For Each object In ThisDrawing.ModelSpace If object.ObjectName = "acdbtext" Then ... End If Next object End Sub
damit bearbeitest du alle Texte im Modelbereich... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Willynchen_neu Mitglied

 Beiträge: 24 Registriert: 07.11.2005
|
erstellt am: 09. Mrz. 2006 14:14 <-- editieren / zitieren --> Unities abgeben:         
 Hallöchen miteinander, erstmal vielen Dank für die Antworten. Habe jetzt sehr viel rumgebastelt und einige Varianten zustande gebracht. Meist ist der korrekte Ablauf des Tools dann aber daran gescheitert, daß keine Platzhalterzeichen erkannt worden sind. Jetzt hab ich aber doch nochmal gründlichst das Forum durchforstet und das hier gefunden: http://ww3.cad.de/foren/ubb/Forum259/HTML/000340.shtml Das hab ich jetzt für meine Sache umgestrickt und es funktioniert supi Der eigentliche Hinweis in diesem Beitrag war die Sache mit dem Verweis....jetzt klappen meine eigenen Varianten sogar auch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |