| |
| 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: Koordinatenausgabe Befehlszeile/Zwischenablage (2315 mal gelesen)
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 19. Sep. 2005 15:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum! Ich habe eine Funktion geschrieben die mir die Koordinate eines angeklickten Punktes so anzeigt, dass ich das Ergebnis direkt wieder in die Befehlszeile von ACAD kopieren kann. also nich wie in ACAD eingebaut Befehl: '_id Punkt angeben: X = 3450660.0000 Y = 5621930.0000 Z = 0.0000 sondern: Befehl: XYZ Punkt angeben: 3450660.0000,5621930.0000,0.0000 Der Code dazu sieht so aus: Code:
(defun c:xyz ( / xyz) (setq xyz (getpoint "Punkt angeben: ")) (setq xyz (strcat (rtos (car xyz)) "," (rtos (cadr xyz)) "," (rtos (caddr xyz)))) (princ xyz) (princ) )
Jetzt möchte ich die Ausgabe so gestalten, dass ich den Wert in Excel einfügen kann und die drei Zahlen gleich in drei Zellen (nebeneinander) stehen. Ich habe schon versucht das "," durch "\t" zu ersetzen (ein Tabulator würde das in Excel regeln), aber es kommen nur Leerzeichen rüber . Ein ";" hilft nicht weiter, weil es von Excel nicht als Trennzeichen anerkannt wird . Vielleicht kann man die Zahlen mit VLisp in die Zwischeablage schieben ? ------------------ Nodda,
Stefan [Diese Nachricht wurde von s.wickel am 19. Sep. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 19. Sep. 2005 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
Jan1 Mitglied CAD Consultant
Beiträge: 17 Registriert: 12.05.2004
|
erstellt am: 20. Sep. 2005 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo Stefan, ich habe da noch einen alternativen Vorschlag, der in eine ähnliche Richtung geht. Diese lösung hat allerdings einen gewaltigen Nachteil -> es kostet viel Zeit. (defun setClipboardData (sData / vlaIE) (vl-load-com) (if (setq vlaIE (vlax-create-object "InternetExplorer.Application")) (progn (vlax-invoke-method vlaIE 'navigate "about:blank") (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property vlaIE 'Document) 'ParentWindow) 'ClipBoardData) 'SetData "text" sData) (vlax-invoke-method vlaIE 'quit) ); end progn ); end if ); end defun Gruß, Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 20. Sep. 2005 15:58 <-- editieren / zitieren --> Unities abgeben:
Hallo! Danke für Antworten. Mir ging es eigentlich darum, die Koordinaten aus der Befehlszeile in die Zwischenablage zu kopieren (von Hand). Mit der Ausgabe für das ACAD-Koordinatenformat (mit Kommas getrennt) funktioniert das wunderbar. Einfach die Zwischenablage wieder in die Befehlszeile einfügen, fertig. Das Problem war, dass wenn ich eine solche Koordinaten in Excel einfüge ich erstmal den Textstring, der aus der Zwischenablage kommt bearbeiten muss und in drei Teile teilen, die ich dann auf drei Zellen verteile. Wenn in der Zwischenablage ein String vorhanden ist, dessen drei Teile mit TABs getrennt sind, dann fügt Excel diese automatisch in drei Zellen ein (das Probelem mit Kommas und Punkten als Dezimaltrennzeichen ist marginal). Leider habe ich es nicht geschafft einen Text in die Befehlszeile zu drucken, der TABs enthält, die werden nämlich als Leerzeichen dargestellt. Deshalb war ich auf die Idee gekommen, den String direkt in die Zwischenablage zu kopieren. Aber diese Lösungen sind mir zu aufwändig. Da kann ich noch tausend mal von Hand kopieren und nachbearbeiten. Viele Dank für die Unterstützung. ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 20. Sep. 2005 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo Stefan, warum die Tab's in der Eingabeaufforderung nicht funktionieren kann ich Dir auch nicht sagen, aber Du könntest doch Deine ermitelten Koordinaten in eine Textdatei schreiben, quasi erstmal mit jedem Aufruf von "xyz" sammeln, und dann in einem Abwasch in die Exceldatei kopieren: Code:
(defun c:xyz (/ xyz datei) (setq xyz (getpoint "Punkt angeben: ")) (setq datei (open "c:/tab.txt" "a")) (write-line (strcat (rtos (car xyz)) "\t" (rtos (cadr xyz)) "\t" (rtos (caddr xyz))) datei) (close datei) (princ) )
Wenn Du wieder von vorne beginnen willst, mußst Du die Datei tab.txt nur wieder löschen. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 20. Sep. 2005 17:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn! Das wurde ja auch in dem anderen oben angegebenen Thread empfohlen. Ich werde es wohl so machen, dass die Datei dann auch automatisch mit dem Editor geöffnet wird, denn es geht mir dabei immer nur um einzelene Koordinaten, die ich weiterverarbeiten will. Für mehr habe ich ein eigenes Programm (das ich dringen mal überarbeiten muss). Danke für deinen Vorschlag. Stefan ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 20. Sep. 2005 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
komisch ist das schon, erst gings bei mir nicht damit: Code:
(defun c:xyz ( / xyz) (setq xyz (getpoint "Punkt angeben: ")) (setq xyz (strcat (rtos (car xyz)) "\t" (rtos (cadr xyz)) "\t" (rtos (caddr xyz)))) (princ xyz) (princ) )
Soll heissen, auch ich hatte den string in einer Zelle mit Leerzeichen. Daraufhin hab' ich nachdem das in der ZA war, versucht via Makro in Excel einzufügen, mir schienen "\t" == 6 Spaces:
Code:
Sub x() Dim d As New DataObject, s d.GetFromClipboard s = Split(d.GetText, Space(6)) Range(ActiveCell, ActiveCell.Offset(0, UBound(s))) = s Set d = Nothing End Sub
Seltsamerweise ging dann irgendwie plötzlich auch das 'normale' Paste im Excel. [BTW, xl2000] Irgendwie verstehe ich grade nicht so recht, was wie weshalb warum auf einmal;-) auch keine Ahnung was das "\t" für einen keycode hat, nen chr(9)=vbtab jedenfalls nicht ...Irgendwie suspekt mit dem acad-tab, ich würde das Teil mit nem ";" als Delimiter princ'en lassen, das aus der commandline kopieren und in Excel halt dann via Makro einfügen, kann man sich ja auf nen Button legen. Bei der ";" Variante sähe die Zeile statt:
Code:
s = Split(d.GetText, Space(6)) 'so aus s = Split(d.GetText, ";")
Ist aber wirklich nur was für vereinzelte Copy-Aktionen, um den Umweg über *.txt *.csv zu sparen, bzw. macht halt dasselbe wie Menu > Daten > Text in Spalten ;-)Gruss Nancy [Diese Nachricht wurde von startrek am 20. Sep. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 04. Okt. 2005 14:41 <-- editieren / zitieren --> Unities abgeben:
Hallo alle die Ihr mir helfen wolltet! Noch mal Danke für Eure Mühe. Ich habe die richtige Funktion in DOSLIB gefunden. Mit dos_clipboard kann man einen Text in die Zwischenablage kopieren und TABs bleiben erhalten. Zwar habe ich die Funktion dann nicht selbst geschrieben, aber irgendwo hören meine Programmierkenntnisse eben auf (mache ich ja nur nebenher). ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 09. Sep. 2022 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Sep. 2022 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
dos_clipboard erwartet doch einfach nur einen String (oder sehe ich das falsch?) und der Rest steht im ersten Posting, was für einen Code willst du da haben (dos_clipboard "Der\tblöde\tString")
edit Nachtrag, zum Beispiel so:
Code: (defun c:xyz ( / xyz) (setq xyz (getpoint "Punkt angeben: ")) (princ (strcat "\n" (rtos (car xyz)) "," (rtos (cadr xyz)) "," (rtos (caddr xyz)))) (if dos_clipboard (dos_clipboard (strcat (rtos (car xyz)) "\t" (rtos (cadr xyz)) "\t" (rtos (caddr xyz)))) (princ " (doslib nicht geladen)") ) (princ) )
Mein Tip: Anzeigekoordinate in WKS wenn das WKS aktiv ist, BKS und WKS Koordinaten wenn kein WKS aktiv ist und eine Option (oder zwei verschiedene Funktionsnamen) für den Übertrag wahlweise als WKS oder BKS Daten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |