| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Variable merken für erneuten Aufruf (1344 mal gelesen)
|
ebla Mitglied Planer
Beiträge: 38 Registriert: 16.01.2012
|
erstellt am: 18. Jul. 2012 18:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich möchte mit folgenden Code, dass mir der letzte Dateipfad bis zum nächsten Aufruf durch den User erhalten bleibt, jedoch ohne Erfolg. (defun c:NIS-DXFeinlesen ( / ech PFAD DATEI POS LISTE ) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (command "_undo" "_begin") (princ PFAD) (princ *NEUERPFAD*) (if (= *NEUERPFAD* nil) (setq PFAD "O:\\FSP\\SWM\\") (setq PFAD *NEUERPFAD*) );end if (setq DATEI (getfiled "NIS-DXF-Datei wählen" PFAD "dxf" 0)) (if Datei (progn (command "_-insert" DATEI (list -4000000000 -5000000000) "1000" "1000" "0") (command "zoom" "g") (if(=(type DATEI) 'STR) (progn (setq PFAD "") (setq POS (vl-string-search "\\"DATEI)) (setq OFFSET 2) (while POS (setq LISTE (cons (substr DATEI 1 POS) LISTE) DATEI (substr DATEI (+ POS 2)) POS (vl-string-search "\\" DATEI) );setq (setq PFAD (strcat PFAD (car LISTE) (chr 92) (chr 92))) );end while (reverse (cons DATEI LISTE)) );end progn );end if (princ (strcat DATEI " eingelesen" "\n" " Es wird jetzt mit der Layerkonvertierung fortfahren...")) (princ (strcat "\n" PFAD "\n"));hier stimmt er noch (setq EingelesenerBlock (strcat(substr DATEI 1 (- (strlen DATEI) 4)))) (setq BlockAufloesen (ssget "X" (list(cons 0 "INSERT")(cons 2 EingelesenerBlock)))) (command "_explode" BlockAufloesen) (c:NISLayerUmsetzen) );end progn (princ "nüschts jemacht...") );end if (command "_undo" "_end") (setvar "CMDECHO" ech) (princ) ) oder bin ich da auf dem Holzweg?
------------------ Ernst Perfektion ist Lähmung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 18. Jul. 2012 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für ebla
Hallo Ernst, ich habe jetzt nicht getestet, ob Dein Berechnen des neuen Pfades klappt, aber Du solltest vielleicht irgendwo am Ende noch den neuen Pad auch abspeichern? (setq *NEUERPFAD* PFAD) Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 18. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ebla Mitglied Planer
Beiträge: 38 Registriert: 16.01.2012
|
erstellt am: 18. Jul. 2012 19:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Henning, danke, das hatte ich vergessen. Trotzdem ist es jetzt so, das die Variable PFAD den Dateipfad jetzt hat, getfiled kann aber diesen nicht verarbeiten. (if *NEUERPFAD* (setq PFAD *NEUERPFAD*) (setq PFAD "O:\\FSP\\SWM\\") );end if (princ (strcat "\n." PFAD ".\n")); hier kommt raus O:\\FSP\\SWM\\HAL - Kistlerhofstraße 70\\Fremdsparten\\Elektro\\ (setq DATEI (getfiled "NIS-DXF-Datei wählen" PFAD "dxf" 0)); hier ist er wieder auf C:\Eigene Dateien\bla bla ------------------ Ernst Perfektion ist Lähmung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 19. Jul. 2012 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für ebla
Hallo Ernst, in Deinem (defun c:...) setzt Du die Variable PFAD als lokale Variable (hinterm / ), d. h. sie gilt nur innerhalb des Programmlaufes. Sobald das Prog fertig ist, "vergisst" es wieder die Belegung und außerhalb des Programmlaufes wird PFAD nicht verändert. Wenn Du PFAD hinterm / weg lässt, dann merkt sich ACAD die Belegung zumindest in dieser Zeichnung während der aktuellen Sitzung. Beispiel:
Code:
Befehl: (setq pfad "Hallo") "Hallo"Befehl: !pfad "Hallo" Befehl: (defun c:X ( / pfad) (setq pfad "Morgen") (print pfad)) C:X Befehl: X "Morgen" "Morgen" Befehl: Befehl: !pfad "Hallo"
HTH Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ebla Mitglied Planer
Beiträge: 38 Registriert: 16.01.2012
|
erstellt am: 19. Jul. 2012 09:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, wie gesagt, auch wenn ich die Variable aus der Definition herausnehme, habe ich das selbe Ergebnis. Vor dem getfiled wird mir die Variable beim princ noch richtig angezeigt. ------------------ Ernst Perfektion ist Lähmung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 19. Jul. 2012 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für ebla
|
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 19. Jul. 2012 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für ebla
Hallo Ernst, dann hilft nur noch eine schrittweise Prüfung. Setz Dir im VL-Editor (den verwendest Du doch hoffentlich?) mal einen Haltepunkt und gehe dann das Prog schrittweise durch. Dabei immer wieder die Belegung von PFAD prüfen, irgendwo muss sich dann was finden. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 19. Jul. 2012 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für ebla
Hallo Ernst, und was ich noch gerade gesehen habe, den neuen PFAD nach Wahl der DATEI aus dem Dateinamen zu ermitteln (also bis zum letzten \\), was Du m. E. in dem (if ... ) Zweig machst, geht noch einfacher, indem Du Dir gleich mit (vl-string-position 92 DATEI 0 T) die Position des ersten \\ von hinten ermittelst und dann mit (substr DATEI 0 (+1 ermittelte Position)) den Pfad holst. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ebla Mitglied Planer
Beiträge: 38 Registriert: 16.01.2012
|
erstellt am: 20. Jul. 2012 18:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, danke für die Idee. Ich hab das noch abgeändert auf (setq PFAD (substr DATEI 1 (+ 1 (vl-string-position 92 DATEI 0 T)))) Hinter DATEI bei substr muss eine 1 stehen, da bei substr die Nummerierung bei 1 losgeht und nicht so wie bei vl-string-position bei 0. Seitdem ich PFAD so setze, kommt er auch bei getfiled so an. Vielen Dank nochmal. U´s sind unterwegs. ------------------ Ernst Perfektion ist Lähmung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |