| |
| 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 – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Was sind Reaktoren? (2199 mal gelesen)
|
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001
|
erstellt am: 27. Mai. 2004 09:49 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 27. Mai. 2004 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Hallo Georg, Reactoren sind Programme, die nicht durch einen bestimmten Befehl gestartet werden, sondern durch irgendein Ereignis. Es gibt verschiedene Reactoren. Eine Auswahl zum Verständnis: Systemvariablen-Editor -> springt an ... wenn Änderungen an irgendeiner SysVar vorgenommen werden. Befehlsreaktoren -> springt z.B. an ... wenn ein Befehl gestartet, abgebrochen oder beendet wird. Objektreaktoren -> springt z.B. an ... wenn ein Objekt erzeugt, geändert oder gelöscht wird. es gibt noch einige mehr, die du aber in der Hilfe nachlesen kannst. Die Reactoren können fest in der Zeichnung gespeichert werden, dann sind diese persistent oder eben nicht (transient Einen Reactor zu programmieren ist ansich keine Schwierigkeit. Das sind nur ein paar Zeilen. Ereignis festlegen (Reactortyp) und dann die aufzurufende Lispfunktion dafür benennen. Die Schwierigkeit besteht darin, das Verhalten der Reactoren zu erfassen und auch zu berücksichtigen. Es kann sehr leicht geschehen, dass man sich mit den Reactoren ganz schnell in eine Endlosschleife begibt. Z.B. dann, wenn man einem Objekt mehrere Reactoren verpasst, deren Verhalten zueinander nicht sauber programmiert wurde. Dieses Wissen/Erfahrungen allerdings, wirst du kaum irgendwo nachlesen können. Das Erstellen der Reaktoren ist in der Hilfe (für meine Begriffe) sehr gut beschrieben. Hast du ein konkretes Problem? dann beschreib das mal, dann kann man auch gezielt darauf eingehen. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001
|
erstellt am: 27. Mai. 2004 11:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, folgendes Problem: Habe eine Zeichnung. In dieser werden die Einstellungen für Plotter etc. gespeichert. Bei einem Absturz werden die Reaktoren beschädigt. Wie kann ich diese wieder auf einen bestimmten Stand zurücksetzen? Danke Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 27. Mai. 2004 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Hallo Georg, was heißt beschädigt? Rücksetzen geht nicht. Du kannst die Reactoren entfernen und neu dranbauen .. aber was für einen Zwischenstand soll es denn da geben? Wie ist (wenn vorhanden) die Fehlermeldung? Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001
|
erstellt am: 27. Mai. 2004 11:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, die Zeichnung läßt sich wiederherstellen (nach Absturz). Beim anschließenden Speichern stürzt Autocad 2004 Mechanical ab. Wie kann ich alle Reaktoren löschen bzw. auslesen? Danke Georg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
valerich Mitglied Programmierer
Beiträge: 12 Registriert: 22.09.2003
|
erstellt am: 27. Mai. 2004 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 27. Mai. 2004 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Naja, die von Adesk gebastelten bleiben von diesem Aufruf allerdings unberührt.(Soweit meine Erfahrung.) Deshalb ist es schwierig dazu jetzt eine verlässliche Auskunft zu geben. Kommen denn keine Fehlermeldungen, die du hier mal posten könntest? Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001
|
erstellt am: 27. Mai. 2004 12:45 <-- editieren / zitieren --> Unities abgeben:
|
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. Mai. 2004 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Ich bring mal eine etwas andere Definition: Reaktoren in AutoCAD sind das, was man in anderen Sprachen Eventhandler nennt. Stimmt schon, sie reagieren auf Ereignisse - das Problem ist aber, dass sie auch Ereignisse verursachen: AutoCAD-Abstürze. Ich habe so einige Reaktor-Programme geschrieben, die nach einer Probezeit dann doch wieder eingestampft wurden. Ein Beispiel: Vollautomatisches Setzen eines Bem-Layers, spart einem ja eine Menge Arbeit im Laufe der Zeit. Niemand, der sich den Code angesehen hat, konnte irgendeinen Fehler oder eine Unsauberkeit entdecken. Nach zwei oder drei Monaten Einsatz konnte der Fehler reproduzierbar festgemacht werden: Wurde nach einer Bemaßung im übernächsten Befehl ein bestimtes Entity gezeichnet (ich glaube, es war ein Ray), hat sich Acad ziemlich eilig verabschiedet. Ich hab's jedenfalls noch immer nicht geschafft, irgendein sinnvolles Reaktorprogramm zu schreiben, das dann auch über einen längeren Zeitraum ohne Stabilitätsprobleme benutzt werden konnte. Zurück zur Definition: Reaktoren in AutoCAD sind das, was man in anderen Sprachen Eventhandler nennt. In AutoCAD heissen sie aber Reaktoren, weil sie einem das Gefühl vermitteln, direkt neben einem solchen zu wohnen;-) Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 29. Mai. 2004 12:58 <-- editieren / zitieren -->
Zitat: Original erstellt von mapcar: Ich habe so einige Reaktor-Programme geschrieben, die nach einer Probezeit dann doch wieder eingestampft wurden. Ein Beispiel: Vollautomatisches Setzen eines Bem-Layers, spart einem ja eine Menge Arbeit im Laufe der Zeit. Niemand, der sich den Code angesehen hat, konnte irgendeinen Fehler oder eine Unsauberkeit entdecken. Nach zwei oder drei Monaten Einsatz konnte der Fehler reproduzierbar festgemacht werden: Wurde nach einer Bemaßung im übernächsten Befehl ein bestimtes Entity gezeichnet (ich glaube, es war ein Ray), hat sich Acad ziemlich eilig verabschiedet. Ich hab's jedenfalls noch immer nicht geschafft, irgendein sinnvolles Reaktorprogramm zu schreiben, das dann auch über einen längeren Zeitraum ohne Stabilitätsprobleme benutzt werden konnte.
Es stimmt - Autodesk hat da einigen Murks gemacht. Die Sache mit Abstürzen bei speziellen Befehlen (z.B. auch ABSTAND als ersten Befehl nach der Initialisierung der Reaktoren, Deinen Hinweis auf RAY muss ich noch prüfen) habe ich auch oft erlebt, und ich habe herausgefunden, dass es für diesen Bug in AutoCAD eine Umgehung gibt. Folgendes musst Du dabei beachten: 1. ein Editor-Reaktor (also z.B. Command-Ended) muss solche Befehle explizit abfangen, eine "globale" Falle in einem COND Abschnitt genügt nicht. 2. Die Reaktorfunktion muss für diese Befehle "gar nichts" zurück geben, also z.B. (prin1). Die Rückgabe von NIL erzeugt einen Fehler. Beispiel für die Editor-Reaktor-Funktion bei Command-Ended, der auf SCHIEBEN rreagieren soll: so ist es u.U. fehlerhaft: ... (COND ((= callingcommand "MOVE") (dowhatiwantformove) ) (T (princ "\nother command")) ) und so geht's ohne Absturz: ... (COND ((= callingcommand "MOVE") (dowhatiwantformove) ) ((= callingcommand "DIST") (princ "\nDIST ended") (prin1) ) (T (princ "\nother command")) ) Eine andere Fehlerquelle scheinen Timing-Probleme zu sein, die Abstürze beim Öffnen einer Zeichnung verursachen. Ich vermute, dass S::STARTUP die AutoCAD-Initialisierung nicht mehr vollständig abwartet (Autodesk soll praktisch keine LISP-Programmierer mehr haben, so dass S::STARTUP nicht an neuere Anforderungen angepasst wurde). Das konnte ich lösen, indem ich vor der Initialisierung der Reaktoren von meinem Programm ein Dummy-Objekt erzeugen und gleich wieder löschen lasse. Das Objekt wartet mit seiner Erzeugung nämlich solange, bis das möglich ist, und danach kann man auch gefahrlos die Reaktoren initialisieren. Ganz schlimm ist es auch, wenn Leute im Single-Document-Mode mehrere AutoCAD-Sitzungen parallel geöffnet haben, und zwischen diesen Zeichnungen dann Copy&Paste machen. Da ist also viel Ausprobiererei nötig, und die Umgehungen der Bugs sind nicht unbedingt straightforward und logisch. Und nach AutoCAD Updates geht u.U. alles wieder von vorne los. Aber immerhin verwende ich in meinen ArchTools schon seit längerer Zeit Reaktoren, die allermeistens auch ganz zufriedenstellend arbeiten. Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
kist Mitglied
Beiträge: 78 Registriert: 20.01.2005 Acad 2010 Windows XP SP3
|
erstellt am: 30. Nov. 2005 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Hallo Bin gerade dabei mich mit Reaktoren zu beschäftigen und zu lernen. Jetzt bin ich auf meiner Suche nach Info über diesen etwas älteren Beitrag gestolpert. Die letzten beiden Postings sind ja nicht gerade viel versprechend, allerdings auch schon ein Zeit`l her. Haben sich die Probleme in ACAD2006 verbessert? Macht es überhaupt Sinn sich mit Reaktoren überhaupt zu beschäftigen? ------------------ schöne Grüsse 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: 30. Nov. 2005 20:16 <-- editieren / zitieren --> Unities abgeben: Nur für GeorgK
Zitat: Original erstellt von kist: HalloBin gerade dabei mich mit Reaktoren zu beschäftigen und zu lernen. Jetzt bin ich auf meiner Suche nach Info über diesen etwas älteren Beitrag gestolpert. Die letzten beiden Postings sind ja nicht gerade viel versprechend, allerdings auch schon ein Zeit`l her. Haben sich die Probleme in ACAD2006 verbessert? Macht es überhaupt Sinn sich mit Reaktoren überhaupt zu beschäftigen?
Klar macht das Sinn. Aber unter allen Umständen sauber arbeitende Programme mit Reaktoren zu programmieren, kostet schon eine ganze Menge Blut, Schweiss und Tränen. Sieh' mal in das ArchTools Forum - da wirst Du einige Berichte von Anwendern über Abstürze finden, die ich bei mir partout nicht nachvollziehen konnte. Ich hab' sogar eine Umfrage bei meinen Anwendern darüber gamcht - bei etwa 30% gab's diese Abstürze, bei den anderen nicht. Das Problem hat sich schließlich als Timing-Problem heraus gestellt, wobei es auf die Netzwerkkonfiguration der Rechner ankam ...
Inzwischen läuft ArchTools mit seinen Reaktoren sehr stabil - jedenfalls auch nicht instablier als AutoCAD ohne ArchTools :-) Tom Berger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |