| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Quellpfad eines geladenen LSP-Files? (1798 mal gelesen)
|
richmotion Mitglied
Beiträge: 12 Registriert: 24.11.2008
|
erstellt am: 05. Okt. 2009 15:07 <-- editieren / zitieren --> Unities abgeben:
Liebe Lispler ! Ich möchte für div. Kopien von Dateien und Konfigurationen eine Lisp-Funktion automatisch aufrufen. Prinzipiell funktioniert bereits alles zufriedenstellend, wenn sich die LSP im Suchpfad von AutoCAD befindet. Ich möchte nun noch ihren externen Quell-Pfad ermitteln, wenn der Anwender die LSP von irgendwoher mit Drag'n'Drop zum Laden+Starten in den Zeichnungs-Editor zieht. (Also den Sourcepath vom zuletzt geladenen Lispfile abfragen) Kann mir jemand sagen, wie das funktioniert?` lg Richard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Okt. 2009 15:27 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Zitat: Original erstellt von richmotion:
Ich möchte nun noch ihren externen Quell-Pfad ermitteln, wenn der Anwender die LSP von irgendwoher mit Drag'n'Drop zum Laden+Starten in den Zeichnungs-Editor zieht. (Also den Sourcepath vom zuletzt geladenen Lispfile abfragen)Kann mir jemand sagen, wie das funktioniert?`
IMHO gar nicht.... evtl. oder über ne Logfile-Auswertung... ------------------ - 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 |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 05. Okt. 2009 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Zitat: Original erstellt von richmotion: Ich möchte nun noch ihren externen Quell-Pfad ermitteln, wenn der Anwender die LSP von irgendwoher mit Drag'n'Drop zum Laden+Starten in den Zeichnungs-Editor zieht. (Also den Sourcepath vom zuletzt geladenen Lispfile abfragen)Kann mir jemand sagen, wie das funktioniert?`
Dazu gab's im VitalLISP eine schöne Funktion, die Autodesk nach der Übernahme und Umbenennung in VisualLISP leider aus unerfindlichen Gründen entsorgt hat. Der Lisp-Interpreter weiss natürlich, woher eine Lisp-Datei geladen wird, und diese Informationen dann in einer Tabelle zu speichern und vom Lisp-Programm aus abrufbar zu machen, ist ein absolutes Kinderspiel. Betrachte Autodesks Umgang damit als eine Lehrstunde dafür, wie sehr Autodesk VisualLISP wertschätzt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Okt. 2009 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Zitat: Original erstellt von archtools: Dazu gab's im VitalLISP eine schöne Funktion, die Autodesk nach der Übernahme und Umbenennung in VisualLISP leider aus unerfindlichen Gründen entsorgt hat. Der Lisp-Interpreter weiss natürlich, woher eine Lisp-Datei geladen wird, und diese Informationen dann in einer Tabelle zu speichern und vom Lisp-Programm aus abrufbar zu machen, ist ein absolutes Kinderspiel.Betrachte Autodesks Umgang damit als eine Lehrstunde dafür, wie sehr Autodesk VisualLISP wertschätzt.
Womit wir mal wieder beim Thema wären .... wie viel einfacher doch vieles sein könnte ... ist aber leider nicht. Hast du ne sinnvolle Lösung im Autolisp ( so wie es integriert ist) für das Problem ? ------------------ - 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 05. Okt. 2009 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Sorry, ich schnalls nicht, was du eigentlich machen willst. Zitat: Ich möchte für div. Kopien von Dateien und Konfigurationen eine Lisp-Funktion automatisch aufrufen.
??? Zitat: Ich möchte nun noch ihren externen Quell-Pfad ermitteln, wenn der Anwender die LSP von irgendwoher mit Drag'n'Drop zum Laden+Starten in den Zeichnungs-Editor zieht. (Also den Sourcepath vom zuletzt geladenen Lispfile abfragen)
??? Ist das Problem, dass Lisp-funktionen in anderen Verzeichnissen, als wie definiert nicht automatisch korrekt geladen werden ? cp 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: 05. Okt. 2009 22:44 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Hi, Da beim Drag+Drop nichts anderes ausgeführt wird, als "(LOAD [DATEI])" könntest Du VORHER einen Lisp-reactor initialisieren, der eben jeden ausgeführten Lispaufruf auf "LOAD" prüft (Stichwort :vlr-lispWillStart) Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 05. Okt. 2009 22:54 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Zitat: Original erstellt von CADmium: Womit wir mal wieder beim Thema wären .... wie viel einfacher doch vieles sein könnte ... ist aber leider nicht. Hast du ne sinnvolle Lösung im Autolisp ( so wie es integriert ist) für das Problem ?
Keine, die ich praktiziere :-) Aber das einfachste wäre natürlich, Funktionen wie c:appload, (load ...) usw neu zu definieren, so dass Du Herkunft und Inhalt kontrollieren kannst. Eine einfache Variante dafür wäre, mit einem Reaktor die Atoms-Family vor und nach Aufruf solcher Funktionen zu vergleichen, um so für jede Funktion zu wissen, aus welcher Lisp-Datei sie geladen wurde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 05. Okt. 2009 23:53 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Code:
;___forever ... (vl-load-com) ;___das musst dir herrichten wie du es brauchst ... (defun rcb-lispwillstart(a b) b); lsp+path per d+d ;___reaktor online ? ... (defun r-?(r_def r_typ) (apply 'or(mapcar '(lambda(x) (equal(vlr-reactions x)r_def)) (cdar(vlr-reactors r_typ))))) ;___rektor on ! ... (defun r-!(r_def r_typ) (if(not(r-? r_def r_typ)) (apply(read(substr(vl-symbol-name r_typ)2)) (list(vl-symbol-name r_typ) r_def)))) ;___init rektor lisp will start ... (r-! '((:vlr-lispwillstart . rcb-lispwillstart)):vlr-lisp-reactor)
Grüße ... ToXoT [Diese Nachricht wurde von toxot am 05. Okt. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001 Autocad 2005-2010 Microstation V8 Photoshop CS4 + Camera Raw Nikon Capture NX2 Nikon D90
|
erstellt am: 06. Okt. 2009 09:49 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Zitat: Original geschrieben von: wronzky [..]der eben jeden ausgeführten Lispaufruf auf "LOAD" prüft (Stichwort :vlr-lispWillStart)
Zitat: Original erstellt von toxot:
Code:
;___forever ... (vl-load-com) ;___das musst dir herrichten wie du es brauchst ... (defun rcb-lispwillstart(a b) b); lsp+path per d+d ;___reaktor online ? ... (defun r-?(r_def r_typ) (apply 'or(mapcar '(lambda(x) (equal(vlr-reactions x)r_def)) (cdar(vlr-reactors r_typ))))) ;___rektor on ! ... (defun r-!(r_def r_typ) (if(not(r-? r_def r_typ)) (apply(read(substr(vl-symbol-name r_typ)2)) (list(vl-symbol-name r_typ) r_def)))) ;___init rektor lisp will start ... (r-! '((:vlr-lispwillstart . rcb-lispwillstart)):vlr-lisp-reactor)
Grüße ... ToXoT
Danke euch beiden! Funktioniert klasse ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Okt. 2009 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
Schöner Ansatz .. leider auch nur die Halbe Miete da ja nur (load berücksichtig wird .... wie willst du sowas erkennen ? (eval (read(strcat"("(apply 'strcat(mapcar 'chr'(108 111 97 100))) " \"D:/ACAD/Bsp.LSP\")"))) für _appload bräuchte es einen Commandreaktor und und und am Sinnvollsten ist es -wie Tom schon sagt- als Bestandteil des Interpreters ( der weiß , was er wie und woher gelladen hat) und das wäre IMHO seitens Adesk auch nicht so schwer zu integrieren ... gleich auch als Liste Symbol -> Quelldatei/Intern für direkt eingegebene ... aber wie gesagt ... als Workaround ne Idee .. ------------------ - 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 |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 06. Okt. 2009 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Okt. 2009 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
jo seh gerade mit Testweise (defun DT:LISPWILLSTART(REACTOR ARGUMENTS) (princ"\n!!!Lispstart!!!") (princ"\nReaktor : ")(princ REACTOR) (princ"\nARGUMENTS : ")(princ ARGUMENTS) (princ"\n") (princ) ) (vlr-lisp-reactor "TESTUS" '((:vlr-lispwillstart . DT:LISPWILLSTART))) Befehl: Befehl: _appload acad64bit.LSP erfolgreich geladen.
Befehl: !!!Lispstart!!! Reaktor : #<VLR-Lisp-Reactor> ARGUMENTS : ((load "D:/acad64bit.LSP"))
na dann .. daran sieht man IMHO das der Interpreter das schon irgendwie mitkriegt ....
und weiter ? du gehtst die Liste durch und suchst nach load ? .... ------------------ - 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 |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 07. Okt. 2009 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für richmotion
|