| |
| 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: Befehle bei jeder Zeichnung und nur beim Start (2807 mal gelesen)
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 29. Jul. 2004 15:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Lispler! Hätte folgende Herausforderung: habe acad.lsp so eingestellt, dass sie bei jedem Öffnen einer Zeichnung ausgeführt wird. Das soll auch so sein. Nur hätte ich auch einen Befehl, der nur beim Start von AutoCAD ausgeführt werden soll. Meine Idee wäre: (if (nur eine Zeichnung offen) Befehl) Weiß jemand, wie diese Zeile in AutoLisp übersetzt lautet? Oder hat jemand noch eine bessere Idee? Gruß, Stephan acart. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Jul. 2004 15:22 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Der Ansatz ist Müll - sag was du eigentlich willst (was macht das Lisp?) - oh mann , was´n posting wieder von mir - ------------------ - Sebastian - [Diese Nachricht wurde von cadffm am 29. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 29. Jul. 2004 15:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Sebastian, hab ich mich echt so unverständlich ausgedrückt?? Ich will, wenn ACAD started, ein externes Windows Programm (punkt.exe) ausführen. Das ginge zwar mit acad.lsp, wenn ich diese Lisp-Datei nicht mit jedem Öffnen einer Zeichnung ausführen würde (sondern nur beim Start von ACAD). Da ich acad.lsp aber absichtlich bei jedem Öffnen einer Zeichnung erneut ausführen lasse, würde auch punkt.exe jedesmal in einer neuen Instanz ausgeführt werden, sodass ich am Ende eines arbeitsreichen Tags 50 punkt.exe-Instanzen offen hätte. Meine Idee ist also, trotzdem acad.lsp zu verwenden, aber vor dem ausführen von punkt.exe jedesmal abzufragen, wieviele Zeichnungen offen sind und dann das Ausführen zu unterdrücken, wenn mehr als eine Zeichnung offen ist. Der Zustand, dass beim Ausführen von acad.lsp nur eine Zeichnung offen ist, tritt bei mir nämlich fast nur beim Start von AutoCAD ein. Alles klar? Übrigens, danke dass du deine Antwort noch editiert hast. Ich betrachte das als Entschuldigung. Wollte an dieser Stelle nämlich schon was über die Art der ersten, uneditierten Antwort schreiben. Gruß, Stephan acart
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Jul. 2004 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Ich würde (wie startest du ACAD ?) in meiner ACAD-Verknüpfung ein Script angeben welches mir gestartet wird, in dem lasse ich dann die EXE ausführen - somit habe ich dann das Programm nur 1x gestartet... (ungetestet) ------------------ - Sebastian - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Jul. 2004 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
ACADhilfe unter: "Anpassen des Startvorgangs" Allerdings beim Öffnen ACAD üer Doppelklick auf eine dwg ... hmm ------------------ - Sebastian - [Diese Nachricht wurde von cadffm am 29. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 29. Jul. 2004 15:57 <-- editieren / zitieren --> Unities abgeben:
Danke, gute Idee! Nur starte ich Acad normaler Weise durch Doppelklick auf eine dwg-Datei im Windows-Explorer. Also das mit der (if-Abfrage nach der Anzahl der geöffneten Zeichnungen geht nicht? Gruß, Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Jul. 2004 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 29. Jul. 2004 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 29. Jul. 2004 17:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Axel mapcar! Coool! Danke für die Idee. Das mache ich.... aber wie? Kann ich selbst eine neue Umgebungsvariable erstellen? Wenn ja, wie? Wenn nein, welche vorhandenen soll ich dann nutzen und wie? Und wie geht das mit dem löschen/zurücksetzen beim Beenden von Acad? Was ist ein Reaktor und wie setze ich ihn ein? Gruß, Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 29. Jul. 2004 18:00 <-- editieren / zitieren -->
Zitat: Original erstellt von autocart: Hallo Axel mapcar!Coool! Danke für die Idee. Das mache ich.... aber wie? Kann ich selbst eine neue Umgebungsvariable erstellen? Wenn ja, wie? Wenn nein, welche vorhandenen soll ich dann nutzen und wie? Und wie geht das mit dem löschen/zurücksetzen beim Beenden von Acad? Was ist ein Reaktor und wie setze ich ihn ein? Gruß, Stephan acart
IMO ist die Idee mit den Reaktoren und der Nutzung externer Dateien, Umgebungsvariablen der Registry-Einträge an diesem Punkt viel zu aufwendig und zu fehleranfällig (bleiben beim AutoCAD-Absturz erhalten, beim nächsten AutoCAD-Start wird die Funktion dann nicht ausgeführt). Sehr viel einfacher ist die Nutzung der AutoCAD-Blackboard. Ganz einfach in der ACAD.LSP die S::STARTUP definieren, und in Abhängigkeit einer Blackboard-Variablen die Funktion ausführen oder nicht. Die S::STARTUP muss auf besodnere Weise definiert werden, denn die wird auch von anderen Applikationen gebraucht. Dies ungefähr muss in die ACAD.LSP geschrieben werden: (vl-load-com) (defun-q myapp-start () (if (not (vl-bb-ref 'MYAPPISREADY)) (progn (DO-MYAPPSTARTFUNCTION) (vl-bb-set 'MYAPPISREADY 'T) ) (prin1) ) (cond ((not S::STARTUP) (setq S::STARTUP myapp-start) ) ((AND S::STARTUP (= 'LIST (type S::STARTUP))) (setq S::STARTUP (append S::STARTUP (cdr myapp-start))) ) (T (alert (strcat "MYAPP Warnung:" "\nEine fremde Applikation hat die S::STARTUP Funktion" "\nfehlerhaft eingerichtet." "\nSie wird u.U. nicht korrekt initialisiert" ) ) (setq S::STARTUP myapp-start) ) ) (prin1) Tom Berger
------------------
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 29. Jul. 2004 19:20 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 29. Jul. 2004 19:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Tom! Das ist ja Wahnsinn! Pfeift super! Beim progn hast du übrigens die Klammer vergessen zu schließen. Lässig wäre noch, wenn ACAD das Prog beim schiessen automatisch beendet. Auf jeden Fall ist das jetzt schon ein rießen Schritt vorwärts gewesen. Danke. mg (=mach's gut), Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Jul. 2004 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Mal ein anderer Ansatz. acad.lsp wird nur beim Autocadstart abgearbeitet (einstellen) acaddoc.lsp (wenn vorhanden)...wird bei jedem Dokumentladen abgearbeitet. Oder hab ich was falsch verstanden? ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 30. Jul. 2004 01:02 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Jul. 2004 08:04 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
.. Na weil ich in dem ganzen Thread nichts über die acaddoc.lsp gelesen hatte .. ? Und dafür wird doch eigentlich der Unterschied gemacht: F1 liefert : AutoCAD lädt den Inhalt von drei benutzerspezifischen Dateien automatisch: acad.lsp, acaddoc.lsp und die MNL-Datei, die zum jeweils aktuellen Menü gehört. Die Datei acad.lsp wird vorgabemäßig nur einmal geladen, wenn AutoCAD gestartet wird, während acaddoc.lsp mit jedem einzelnen Dokument (oder jeder Zeichnung) geladen wird. ... Jedesmal, wenn eine Zeichnung geöffnet wird, durchsucht AutoCAD den Bibliothekspfad nach der Datei acaddoc.lsp. Wird eine Datei gefunden, lädt das Programm die Datei in den Speicher. Die Datei acaddoc.lsp wird immer mit jeder Zeichnung geladen, unabhängig von den Einstellungen für ACADLSPASDOC und LISPINIT. Und jenachdem, welche acaddoc.lsp zuerst gefunden wird ( Reihenfolge Supportordner) kann man sogar mehrere "Konfigurationen" fahren. .... ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 30. Jul. 2004 09:58 <-- editieren / zitieren --> Unities abgeben:
AHA! Da ist doch glatt eine wichtige Basis-Info bis jetzt an mir vorbeigegangen. Hallo Thomas und Axel! Das mit der acaddoc.lsp ist mir neu. Anscheinend hab ich das entsprechende Kapitel unter F1 immer ausgelassen (unabsichtlich). Hab' zwar den Namen "acaddoc.lsp" im Forum gelesen, dachte aber, das wäre das gleiche wie "acad.lsp". Vielleicht wegen anderem Userverhalten, anderen Systemen oder Versionen halt ein bissel anders benamst. Naja, sollte bei den Nächsten Namens-Unterschieden, die mir auffallen, doch gleich F1 bemühen. Aber eine acadclose.lsp oder so gibt es nicht, die noch schnell geladen wird, bevor ACAD beendet wird, oder? Alles Gute, Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 30. Jul. 2004 13:12 <-- editieren / zitieren -->
Zitat: Original erstellt von autocart:
Das mit der acaddoc.lsp ist mir neu. Anscheinend hab ich das entsprechende Kapitel unter F1 immer ausgelassen (unabsichtlich). Hab' zwar den Namen "acaddoc.lsp" im Forum gelesen, dachte aber, das wäre das gleiche wie "acad.lsp". Vielleicht wegen anderem Userverhalten, anderen Systemen oder Versionen halt ein bissel anders benamst.
Mir war der Unterschied zwar bekannt, aber dran gedacht hab' ich genau so wenig wie Axel an das Blackboard. Ich verwende selber keine ACAD.LSP oder ACADDOC.LSP, sondern erledige meinen Kram immer in einer *.MNL Datei, die bei jedem Öffnen einer Datei ausgeführt wird. Zitat:
Aber eine acadclose.lsp oder so gibt es nicht, die noch schnell geladen wird, bevor ACAD beendet wird, oder?
Nein, dafür musst Du einen Reaktor bemühen. Tom Berger ------------------
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 02. Aug. 2004 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
an und für sich alles nicht so leicht lösbar. die punkt.exe soll solange laufen, wie die acad.exe läuft, und zwar nur genau 1 mal. beim beenden der acad.exe soll auch die punkt.exe beendet werden. das wirst du so mit lisp nicht ermöglichen können. (zwar das einmalige starten mittels blackboard, aber nicht das beenden, (naja mit einem VBA Reaktor application.AppDeactivate und wilden API -Funktionen die aus dem Taskmanager applis abschiessen)) Besser wäre es eigentlich, wenn Programme , die nur 1mal laufen dürfen, das selbst erledigen die punkt.exe müsste eigentlich schauen, ob sie schon läuft, und wenn das der fall ist, sich selbst gleich wieder beendigen.(in VB erstellte exe mit App.PrevIntance). dann kannst du ja die punkt.exe mit jeder zeichnung starten eine möglichkeit wäre (ungetestet) die acad.exe auf acad1.exe umzutaufen. mit VB eine acad.exe zu basteln, die 1. die punkt.exe startet dann die acad1.exe startet, wartet auf dessen beendigung, und dann die punkt.exe abschiesst. aber das scheint mir eine doch eher brutale methode zu sein.
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 02. Aug. 2004 12:09 <-- editieren / zitieren --> Unities abgeben:
|