| | | 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: autoload ohne autoload (2107 mal gelesen)
|
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 19. Sep. 2009 00:56 <-- editieren / zitieren --> Unities abgeben:
real load on demand? !!! Ersuche um Zusammenarbeit betreffend ...
Code:
;;; ************************************************ ;;; ;) reactor functions executing unknown commands ;;; ;) somwhere available on (our ?) net ;;; ;) no pre-defuns or autoload-definitions ;;; ;) real "on demand load" ;;; ;) treat resources with care ;;; ;) we habe to think about some things again! ;;; ;) by : ToXoT ;;; ;) mailto: spam.halator@gmail.com ;;; ;) www : www.ToXoT.at ... under construction! ;;; ;) best to you ... i like help too! ;;; ************************************************ ;;; r-? ... is reactor active? ;;; (r-? reactor_data callback_function) (defun r-?(r_def r_typ) (apply 'or(mapcar '(lambda(x) (equal(vlr-reactions x)r_def)) (cdar(vlr-reactors r_typ))))) ;;; ************************************************ ;;; r-! ... reactor aktivate! ;;; (r-! reactor_data callback_function) (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)))) ;;; ************************************************ ;;; rcb-unknc ... callback on unknownCommand ... ;;; executes commandUnknown by loading equal file! ;;; !!! commandname == filename !!! ;;; example: ... ;;; unknowncommand: toxisch ;;; filename : toxisch.lsp ;;; ... in it : (defun c:toxisch() ... etc. (defun rcb-unknc (a b / unkn_c) (cond ;;; my dir follow ... ;;; ((load(strcat #lspdir "#C1\\"(setq unkn_c(car b)))()) ;;; alternativ: action not in a-environment ... ;;; ((load (strcat "YOURDIR" (setq unkn_c(car b)))()) ;;; action just in a-environment ... ((load(setq unkn_c(car b))()) (princ(strcat ";) Command <" unkn_c "> loaded on demand! ..." ;;; a-errormessage absurd ... "\n;) ... no attention to absurd: ")) (vla-SendCommand (vla-get-activedocument(vlax-get-acad-object)) (strcat unkn_c(chr 13)))) ('t(princ("\n:( unknown command <" unkn_c "> not found!\n"))))) ;;; ************************************************ ;;; :vlr-unknownCommand ! rcb-unknc ;;; init ... unknowncommand ... callback rcb-unknc (r-! '((:vlr-unknownCommand . rcb-unknc)) :vlr-command-reactor) ;;; *******************************************ToXoT
... die Möglichkeiten (entsprechend Phantasie) könnten doch einige sein. ... über ähnliches für functions(ohne Parameterzwang) vielleicht später. Bestes Euch ... ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 19. Sep. 2009 13:29 <-- editieren / zitieren --> Unities abgeben:
... noch kleine Ergänzung zum Code vorher ... ... (vl-load-com) sollte eingefügt werden! ... dann code laden! Folgendes kleines Testprogramm NICHT in laden! Nur irgendwo in den A-Environment unter "toxisch.lsp" sichern ...
Code:
;;; **************************************************** ;;; toxisch.lsp ... testcode ;;; just put it in a-environment ;;; it should be unknown command! ;;; ... will be loaded and executed if ... ;;; ... reactor callback "rcb-unkn" is online! (defun c:toxisch() (alert ";) <toxisch> loaded and executed! ... have a nice day toxot")) ;;; ****************************************************
... und Command: ... toxisch ... eingeben.Bestes Euch ... ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 19. Sep. 2009 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von toxot: real load on demand?
Wie willst Du das Problem lösen, dass Reaktorfunktionen eine ganze Menge von Dingen nicht tun dürfen, die aber wohl ganz überwiegend von den ungeladenen Befehlen getan werden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 20. Sep. 2009 02:04 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von archtools: Wie willst Du das Problem lösen, dass Reaktorfunktionen eine ganze Menge von Dingen nicht tun dürfen, die aber wohl ganz überwiegend von den ungeladenen Befehlen getan werden?
... hoffe, deine Frage richtig zu interpretieren ... Klarstellung: oben angedeutete Methode macht nur Sinn, wenn du viele Progamme ... - und nicht - ... wenn du nur ein paar verwendest. ok?! Annahme: du meintest, was Reaktoren können und nicht "was sie dürfen". ... Annahme: du meintest nicht, das ungeladene Befehle etwas tun könnten. Zwingend und immer steht vor der Ausführung eines Programmes ein Ladevorgang! Behauptung: unangemeldete und ungeladene Befehle konnten ... - ohne callback rpc-unkn (siehe oben) - - ausser einer Fehlermeldung und anschliessenden Abbruch - ... wirklich gar nichts! Anders mit callback rcb-unknc!... Hier kann der Programmierer entscheiden, was mit ... unknowncommand==unloaded==but loadable==and EXECUTABLE ... passiert. zb.= einfach laden und ausführen "unknown" heisst uU ja nur, dass der Befehl nicht (zB durch autoload oder ähnlichem) beim Türsteher angemeldet war. Aber eben nur: unter Umständen! Es heisst nicht, das der Befehl nicht ladbar und anschliessend ausfürbar ist! Mit callback rpc-unkn ist es egal, ob du 100, 1000 oder 10000 und mehr Befehle "auf Lager" hast. Jetzt musst du nicht mehr wertvolle Ladezeiten und Speicherplatz für das Anmelden für - in einer Sitzung nicht mal benötigten - Befehlen verschwenden. Je grösser deine Programm-Bibliothek ist, desto größer wird der Gewinn an Ladegeschwindigkeit! Sie ist und bleibt gleich Null, egal wieviele Befehle im Bedarfsfall - und nur in diesem! - geladen werden. Hoffe, ich hab dich richtig verstanden. Bestes Dir/Euch ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 20. Sep. 2009 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von toxot: Annahme: du meintest nicht, das ungeladene Befehle etwas tun könnten. Zwingend und immer steht vor der Ausführung eines Programmes ein Ladevorgang!
Ich meinte das, was ich sagte: Reaktorfunktionen dürfen bestimmte Dinge nicht tun, und dazu gehören beispielsweise (command ....) Aufrufe. Wenn Du also aus dem Reaktor eine Lisp-Funktion nachlädtst und diese enthält so einen direkten command-Aufruf, dann stürzt AutoCAD ab. Dasselbe gilt auch für den Fall, dass der dann von Deinem Reaktor aufgerufene Lisp-definierte Befehl so einen command-Aufruf enthält. Und dann dürfen Reaktorfunktionen absolut keine Interaktivität mit dem Anwender haben, die über das "OK-Klicken" in einer Alertbox hinaus geht. Ich schätze mal dass mindestens 99% aller Lisp-Tools, die Anwender so auf ihrer Platte haben, unter diese Ausschlussklausel fallen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 20. Sep. 2009 14:23 <-- editieren / zitieren --> Unities abgeben:
... Gebenbeweis: Reaktor mit Command-Ausführung! ... Testen! ... Voraussetzung: Reaktorprogramme SIEHE OBEN sind geladen! Code:
;;; **************************************************** ;;; toxisch.lsp ... testcode ;;; EXECUTING COMMAND THROUGH REACTOR ;;; just put it in a-environment ;;; it should be unknown command! ;;; ... will be loaded and executed if ... ;;; ... reactor callback "rcb-unkn" is online! (defun c:toxisch() (command "_line" '(0 0) '(100 0)) (alert ";) <toxisch> loaded and (command \"_line\" '(0 0) '(100 0)) executed! ... go on with command\n ... have a nice day toxot")) ;;; ****************************************************
... es geht NATÜRLICH, weil eigentlich der Reaktor nur den Ladevorgang erledigt und die Ausführung erst nachher durch einen vla-SendCommand erledigt wird. Versuch es bitte mit Code anbei mit Methode wie oben beschrieben. Ich war ebenso wie Du fassungslos, dass es ganz problemlos funktioniert. Bestes Dir/Euch ToxoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 20. Sep. 2009 14:32 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von toxot: ... Gegenbeweis: Reaktor mit Command-Ausführung! ... Testen! ... Voraussetzung: Reaktorprogramme SIEHE OBEN sind geladen!
Code:
;;; **************************************************** ;;; toxisch.lsp ... testcode ;;; EXECUTING COMMAND THROUGH REACTOR ;;; just put it in a-environment ;;; it should be unknown command! ;;; ... will be loaded and executed if ... ;;; ... reactor callback "rcb-unkn" is online! (defun c:toxisch() (command "_line" '(0 0) '(100 0)) (alert ";) <toxisch> loaded and (command \"_line\" '(0 0) '(100 0)) executed! ... go on with command\n ... have a nice day toxot")) ;;; ****************************************************
... es geht NATÜRLICH, weil eigentlich der Reaktor nur den Ladevorgang erledigt und die Ausführung erst nachher durch einen vla-SendCommand erledigt wird. Versuch es bitte mit Code anbei mit Methode wie oben beschrieben. Ich war ebenso wie Du fassungslos, dass es ganz problemlos funktioniert. Bestes Dir/Euch ToxoT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 20. Sep. 2009 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
mal nebenbei : Da hatten wir den Konstrukt schon hier .... aber mal ehrlich was habe ich von einem automatischen Nachladen per Reaktor ? Ich lade meine Tools per cui/mnl ... da brauchen die Sachen nicht -unbedingt je Befehl=eine gleichnamige Datei *.lsp sein -im Supportpfad liegen - ich kann auch mal verschiedene Dateiversionen haben und ich kann entscheiden, welche geladen wird -und wenn ich den Befehl aufrufen, dann hab ich keine extra Wartezeiten, denn das bißchen was acad am Start dafür verbrät kann man wohl vernachlässigen (besonders , wenn die Lispbefehle nicht in vielen, sondern nur in ein paar Dateien abgelegt sind -und ein Reaktor bremst mic nicht bei jeder Befehlseingabe aus ... usw. Aber ich will dir die Freude an deinem Programm nicht nehmen, wenn es deine Arbeit erleichtert und deinen Ansprüchen genügt..schön !! ------------------ - 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 |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 20. Sep. 2009 17:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: mal nebenbei : Da hatten wir den Konstrukt schonhier
... richtig. Ich hatte auch mit Henning Kontakt, er hat das Projekt für einen anderen Zweck gedacht und nicht in diskutiertem. Ich suche aber schon lange nach einer solchen Möglichkeit, weil diese unter bestimmten Voraussetzungen eine mächtige Möglichkeit bietet! Vielleicht haben auch andere Programmierer ähnlichen Bedarf. Zitat: .... aber mal ehrlich was habe ich von einem automatischen Nachladen per Reaktor ? Ich lade meine Tools per cui/mnl ... da brauchen die Sachen nicht
Dann hast DU eben keinen Bedarf. Ich bin Dir aber sehr dankbar, dass du mich ordentlich und sachlich "abklopfst". Ich hatte oben schon erwähnt, dass diese Methode nur Sinn macht, wenn sehr viel zu laden ist, und die Ladezeiten problematisch werden. Mit dieser Methode wird aber beim Start der Sitzung eben nur dieses Miniprogramm geladen und alles andere erübrigt sich, da nur bei Bedarf und on the fly geladen wird. Ich gehe also von einem großen Befehlssatz aus. Zitat:
-unbedingt je Befehl=eine gleichnamige Datei *.lsp sein
Vom Prinzip her richtig, aber nicht unbedingt. Denn oben wurde ja nur ein zwar brauchbarer aber noch primitiver Ladebefehl verwendet, um die Funktionalität testen zu können. Da geht mehr. Zitat:
-im Supportpfad liegen
... Nein, im Code der ersten Message stehen schon andere Varianten mit anderen Pfaden. Hier ist natürlich eine eigene Laderoutine von nöten, die sich zB um Pfade, Log, Debug, Registrierung, Versioning usw. kümmern KANN. Es bleibt dem Programmierer überlassen, mit welchen Funktionalitäten er die Laderoutine ausstattet. Durch diese läuft dann aber jeder Befehl(1mal)beim ersten Aufruf. Und nur: wenn unbekannt! Zitat:
- ich kann auch mal verschiedene Dateiversionen haben und kann entscheiden, welche geladen wird
... kein Widerspruch zur Reaktormethode. Schon wenn die nächste Version FOOx.lsp als Datei erstellt ist kann ich Command:FOOx funktionierend aufrufen. Dazu hab ich noch den Vorteil, das die aktuelle Version (FOO.lsp) solange nicht überschrieben wird, bis neue Version (FOOx.lsp) voll funktionstüchtig ist. Zitat:
-und wenn ich den Befehl aufrufe, dann hab ich keine extra Wartezeiten,
Im Profifall werden Befehle mit Autoload oder ähnichem "angemeldet". Das heißt, dass der Command schon bekannt, die wirkliche Routine aber noch nicht geladen ist. Im einfachsten Fall mit zB:(defun C:Foo()(my-loader "foo")(c:foo)) ... oder (AutoLoad ... Das bedeutet, das der Befehl erst beim ersten Aufruf (voll) geladen wird. Wenn alle Befehle bei in meiner Konfiguration voll geladen würden, würden >5sec verloren gehen. Und uU gar kein Befehl in der Sitzung verwendet werden, weil Zeichnung nur gesichtet wird. Dafür wird aber bei jeder Sitzung Zeit verschwendet. Und im Falle, dass sehr viele "Anmeldungen" notwendig sind und das laden von diesen je Sitzung unangenehm spürbar werden ... dann denkt man über solche Möglichkeiten nach. Es gibt aber auch noch andere Fälle, in denen ich mit dieser Möglichkeit EINE MEHR hab. Und das ist bekanntlich die bessere Option. Die könnte der Fall sein, wenn WIR daran denken, eine standardisierte und gepflegte große Routinenbibiothek auf die Beine stellen wollten. Das wär einer der Gründe die angedacht werden könnten. Zitat:
denn das bißchen was acad am Start dafür verbrät kann man wohl vernachlässigen (besonders , wenn die Lispbefehle nicht in vielen, sondern nur in ein paar Dateien abgelegt sind
... die Mengenfrage. Zitat:
-und ein Reaktor bremst mich nicht bei jeder Befehlseingabe aus ...
Durch 10 Zeilen Programmcode "ausbremsen"? Laden (ich nehme Autoload mal an) musst Du bei der ersten Ausführung genauso. Zitat:
Aber ich will dir die Freude an deinem Programm nicht nehmen, wenn es deine Arbeit erleichtert und deinen Ansprüchen genügt..schön !!
Dank dir, das ist sehr nett von Dir. Es kommt hier sicher auf den Fall an, wann - oder besser - ab wann (und hier: open end) diese Methode Sinn macht! Bestes Dir/Euch ToXoT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 20. Sep. 2009 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von toxot: Die könnte der Fall sein, wenn WIR daran denken, eine standardisierte und gepflegte große Routinenbibiothek auf die Beine stellen wollten.
`... naja , ich war auch mal jung und voller Idealismus ... Reini Urban sicher auch ..usw. ------------------ - 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 |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 20. Sep. 2009 20:51 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: `... naja , ich war auch mal jung und voller Idealismus ... Reini Urban sicher auch ..usw.
... Du triffst da die Sache schon genau auf den Punkt! Jung bin ich nicht, aber deswegen hab ich dennoch den Idealismus nicht verloren. Reini hatte ja auch ein ähniches Problem - die Menge. Und viele haben die Stücke aus seinem Code verwendet. Ich finde seine Leistung dennoch äusserst beachtenswert! Er hat sich aus anderen Gründen zurückgezogen. Du hast aber wahrscheinlich gute und verständliche, mir das sagen. Die bis hierher vorgedrungenen Leser haben genug (Nacht)Stunden hinter sich, um Dinge durch Programmierung zu ermöglichen. Der anfängliche Spass ist dann einer gewissen Ernüchterung gewichen. Korrigier mich bitte, wenn ich mit dieser Annahme falsch liege. Es ist ein zweischneidiges Schwert. Ich beschreib die beiden Seiten aber nicht in diesem Forum. Wenn Du aber möchtest, per mail. Dank dir für den Rat! Ich wollte die Sache nur nicht für mich behalten. Bestes Dir/Euch ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 21. Sep. 2009 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von CADmium: `... naja , ich war auch mal jung und voller Idealismus ... Reini Urban sicher auch ..usw.
Jeder, der mit CAD-Programmierung sein Geld verdient, hat sich im Laufe der Jahre selber so eine Programmbibliothek zusammen gebastelt, und die stellt zumindest in meinem Fall den allergrößten Teil meines Kapitals dar. Dank der umfangreichen Bibliothek brauche ich zur Erstellung eines Programms höchstens 20% der Zeit selbst eines in Lisp äußerst kompetenten Anfängers. D.h. ich verdiene viel mehr und kann, wenn ich unbedingt scharf auf einen Auftrag bin, im Preis viel weiter runter gehen. So was gibt man nicht leichtfertig aus seinen Händen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 21. Sep. 2009 12:40 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von toxot: ... es geht NATÜRLICH, weil eigentlich der Reaktor nur den Ladevorgang erledigt und die Ausführung erst nachher durch einen vla-SendCommand erledigt wird.
Das ist interessant und hatte ich noch nie ausprobiert. Ich werde das mit dem vla-SendCommand mal ausführlicher testen und bei Erfolg dann auch von Reaktoren aus anwenden. Das könnte einige Probleme lösen, die mit Reaktoren verbunden sind. Die Sache mit dem demand-load ist auch bei mir kein Thema, ich lade meine Applikationen auch automatisch über's Menü. Das halte ich für den Anwender auch am sinnvollsten, weil der das Programm so ganz einfach durch Laden oder Entladen des Menüs installieren oder de-installieren kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 21. Sep. 2009 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von archtools: Jeder, der mit CAD-Programmierung sein Geld verdient, hat sich im Laufe der Jahre selber so eine Programmbibliothek zusammen gebastelt, und die stellt zumindest in meinem Fall den allergrößten Teil meines Kapitals dar. Dank der umfangreichen Bibliothek brauche ich zur Erstellung eines Programms höchstens 20% der Zeit selbst eines in Lisp äußerst kompetenten Anfängers. D.h. ich verdiene viel mehr und kann, wenn ich unbedingt scharf auf einen Auftrag bin, im Preis viel weiter runter gehen.So was gibt man nicht leichtfertig aus seinen Händen.
Jo ... und wenn ich mir die Funktionsbeschreibeungen deines geomcal so angucke ... könnte auch meine Mathebibo sein ... auch wenn unser Programmstil/ Philosophie hinsichtlich Header, Variablennamen , Funktionsstruktur und Errorhandlich sicher unterschiedlich sind ...deshalb würde ich - wenn ich sie denn hätte- aus deinen Bibos maximal Ideen, aber sicher nur selten Code übernehmen ...
------------------ - 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 |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 21. Sep. 2009 14:14 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: Jo ... deshalb würde ich - wenn ich sie denn hätte- aus deinen Bibos maximal Ideen, aber sicher nur selten Code übernehmen ...
... ich glaub, es geht einigen genau wie Dir. Wir sind unsere Wege gegangen. Und jeder ist gestolpert und mußte die Dinge neu Ordnen. Nur wer nichts tat machte keine Fehler. Immer dann, wenn man mit seinen sieben Sachen auf die nächste Stufe steigen will, muß eine neue Ordnung her. Oder? Es wär für Uns alle von Nutzen, wenn gut geprüfter Code verfügbar und die wenn und abers wirklich abgecheckt wären. Wenn die Namensgebung der Routinen (ähnlich der Layerstrukturen) zukuntsweisend wär. wenn die Header, und dies und das. Und dazu gehören im Zentrum natürlich auch die Lademethoden. usw. Ich meine einfach, Ihr und ich haben zuviele Räder neu erfunden. Viele - wie Mapcar und Reini - haben sich wirklich in Zeug gelegt und haben geholfen zum Quadrat. Aber ich bin mir auch unsicher, ob das heute noch angesagt und es die richtige Zeit in der Enwicklung unseres "Lieb-Hass-Kindes". Danke für Lob UND Tadel! Bestes Dir/Euch ToXoT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 21. Sep. 2009 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von CADmium: Jo ... und wenn ich mir die Funktionsbeschreibeungen deines geomcal so angucke ... könnte auch meine Mathebibo sein ... auch wenn unser Programmstil/ Philosophie hinsichtlich Header, Variablennamen , Funktionsstruktur und Errorhandlich sicher unterschiedlich sind ...deshalb würde ich - wenn ich sie denn hätte- aus deinen Bibos maximal Ideen, aber sicher nur selten Code übernehmen ...
Das IST schon seit weit mehr als 10 Jahren meine Mathebibliothek :-) . Tatsächlich hatte ich mir damals mal die Aufgabe gestellt, die GeomCal-Funktionen in LISP nachzuprogrammieren, weil ich mich mit meinen Apps nicht von GeomCal abhängig machen wollte. Da brauchte ich jetzt nur noch den Formelinterpreter dazu zu schreiben, und da war ich ehrlich gesagt auch überrascht, dass ich das in nur drei Tagen hinkriegte. Die Doku zu schreiben hat deutlich länger gedauert ... :-) Anlass für das Nachprogrammieren des GeomCal war übrigens, dass ich versuche, meine alte Applikation objectiveCAD wiederzubeleben (unter maßgeblichem Einfluss von Holger Brischke). Die war für Nutzereingaben von GeomCal abhängig, und da muss ich den Nutzern auch unter BricsCAD die Möglichkeit geben, mathematische Formeln einzugeben. Einen Markt gibt's für sowas wie Geomcal ja nicht, da bezahlt niemand auch nur 20 ¤ Sharewarepreis. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1991 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 22. Sep. 2009 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Schön, das ich mal wieder Diskussionen auf dieser Ebene hier finden. Seit Axel's Weggang hat es das nur noch seltenst gegeben. Außerdem wundert's mich doch schon etwas, das du (toxot) hier so einsteigst - hast du das Board erst jetzt gefunden, oder was ist dein Grund hier gleich mal eine solche Funktion zu verschenken? Aber es ist tatsächlich bei den Wenigsten der Fall, das sie Funktionen aufrufen, die nicht geladen sind - denke ich. Die meißten rufen ihre Funcs wohl über Werkzeugkästen per Buttonklick auf und da kann mann zu über 90% davon ausgehen, das die Funcs auch dabei geladen werden. Aber ich kenne es auch noch so von früher, das ich so begeistert von einem Programm war, das ich es gleich mal veröffentlicht habe - wenn ich bedenke, so hat bei CADwiesel auch alles angefangen...... ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 22. Sep. 2009 17:14 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADwiesel: Schön, das ich mal wieder Diskussionen auf dieser Ebene hier finden. Seit Axel's Weggang hat es das nur noch seltenst gegeben.
Du, das tut echt gut! Zitat:
Außerdem wundert's mich doch schon etwas, das du (toxot) hier so einsteigst - hast du das Board erst jetzt gefunden, oder was ist dein Grund hier gleich mal eine solche Funktion zu verschenken?
Das ist eine lange Geschichte. Aber diesmal hat ich das Gefühl, das Ding hat Wert. Für mich ist der Wert momentan noch klein und viel Arbeit. Verkaufen: siehe ein paar mails vorher. Mehr Wert hat es, wenn ich es: MIT EUCH TEILE! Und nochmehr Wert bekommt es: wenn Ihr daran TEILNEHMT! Aber bezüglich der Funktionalität der Routine hat es ja einen - neben vielen anderen - Vordenker gegeben (siehe oben). Ich selbst war schon 2004 - im Zuge einer Arbeit für die A-Schnittstelle zu Archiphysik - nahe dran, hatte aber zu wenig Zeit fürs "tiefer rein" in die Reaktoren. Ich hab aber wieder mal recherchiert und bin dann über die Sache von Henning gesolpert, der eigentich eine Art autom. Befehlsgenerator bauen wollt. Ist ohne Zweifel ein Hit. Aber benötigt für die Praxis eine Menge Vorarbeit in den Parser. Das wurde dann Henning auch klar (meine Interpretation) ... dennoch TOLL! Ich hab sofort erkannt "thats it" (aber für einen anderen Zweck) und hab mit Ihm Kontakt aufgenommen ... usw. ... zum Geschenk. An mich treten immer mehr Büros und Firmen heran, für die ich kleine und größere Programme schreibe. Mein Programme können sich leicht an einen Organisation-Standard anpassen, oder diesen auf vorgeben. Und da es sehr viel ist, und manchmal Firmen nur dies oder jenes brauchen entstehen die bekannten Probleme. Oder? Der perfekte "lisp-joiner" (eigentlich besser ein "exporter" oder "herausschneider") hängt bei mir noch immer in den Kinderschuhen. Da meine Biblio hochgradig mit Subroutinen verlinkt ist. Dieser joiner hätte die Aufgabe, ein lauffähiges Einzelprogramm aus dem kompexen Programmsatz (mit allen benötigten Variablen, Layerstrukturen, Initialisierungen usw.) herauszuschneiden. Da dem aber nicht so ist, muss viel Hand angelegt werden. So wie Sonntag Nacht für einen Vollautomaten für Raumbuchblöcke 5 Stunden ... schnipp, schnipp, schnipp ... höchstkonzentriert. Am Schluss war mal eine Seite notwendiger Code. Was ich damit sagen will: Es wär günstig, wenn dass alles viel entspannter, sicher und schnell geht. Voraussetzung: kein Durcheinander in der Art und Weise im Sinne von, dies wird über autolaod, dies über(steht irgenwo im Menü), jenes über startup, da habe ich ausnahme x und dort y usw. Sobald aber jedes Programm über eine einzige Zentrale geladen wird, die der Programmierer in ihrer Funktionalität in der Hand hat, hab ich DIE Möglichkeit, eine Loger mitlaufen zu lassen, der "on the fly" dies oder jenes Programm (mit allen subs) als "stand alone" zusammenstellt. Und dieser Code geht in diese Richtung. Zitat:
Aber es ist tatsächlich bei den Wenigsten der Fall, das sie Funktionen aufrufen, die nicht geladen sind - denke ich. Die meißten rufen ihre Funcs wohl über Werkzeugkästen per Buttonklick auf und da kann mann zu über 90% davon ausgehen, das die Funcs auch dabei geladen werden. Aber ich kenne es auch noch so von früher, das ich so begeistert von einem Programm war, das ich es gleich mal veröffentlicht habe - wenn ich bedenke, so hat bei CADwiesel auch alles angefangen......
... Frage: hats Dir (nicht finanziell)genützt ... bitte an meine mailto! ... zu: geladen ... hier fehlt mir momentan die richtige Wortwahl. Denn eigenlich ist bei meinen Programmen der Code eben nicht geladen. Sondern nur die Definition des Befehlswortes. Ich nehme an, dass (autoload ... ähnlich funktioniert. ... bei den CommandFunctions ... nenne sie "coms" ... (defun: foo()(load "foo")(c:foo)) ... ... und genauso bei den Subfunktionen ... nenne sie "funs ... (defun foo(a b c)(load "foo")(foo a b c)) ... ... wirklich wird hier erst geladen, wenn foo eingegeben, oder (foo 1 2 3) aufgerufen wird. Ist in der Datei dann foo als (defun c:foo() ... definiert, wird die ursprüngliche Definition überschrieben und durch die geladene Version ersetzt. Ist in der Datei (defun c:foo() ... nicht definiert ... wird sie bei jeder Ausführung neu geladen und ausgeführt. Steht dazu noch ein Ausführungsbefehl am Schluß der datei ... (c:foo) ... dann darf die Definition ... (c:foo)) ... klarerweise nicht enthalten. Nur das WIE und WODURCH wird geladen, ist die Frage. Muss ich es in irgendwelche Dateien schreiben - nur Verwaltungsaufwand usw., oder ist der mögliche Punkt für diese kleine WollMilchSau genau hier ... Command: Rumpelstilzchen [ENTER] <<< HIER ... und jetzt kommen die Folgen, wenn die W.M.S. nicht da war>>> Unknown command "RUMPELSTILZCHEN". ps: momentan kann ich diese Fehlermeldung, obwohl sie eigentlich gar nicht mehr stimmt auch, (noch) nicht verhindern, sondern sie nur ad-absurdum führen. Das hat mir der sturen Abfolge dies Reaktors und dem send-command zu tun. A könnte das mit Links regeln, aber: wie schon einige bemerkt haben ... *error* ... und pflege ... und überhaupt:revit ... usw. über ... Command: (rumpelstilzchen) <<< HIER ... und diese Folgen >>> ; error: no function definition: RUMPELSTILZCHEN ... reden wie vielleicht ein ander mal (zum heulen!). Wenn's recht sein sollte. Es hat sehr gut getan, mit Dir zu plaudern. THANKS! Bestes Dir/Euch ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 25. Sep. 2009 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
Zitat: Original erstellt von toxot: ... ('t(princ("\n:( unknown command <" unkn_c "> not found!\n")))))
hier fehlt übrigens noch ein strcat ..... und (load "NAME" ()) ??? da ist IMHO (/= "ERROR" (load "NAME" "ERROR")) besser... da die Rückgabe von load bei Erfolg lt.Doku "unspezifisch" ist und wenn ich deinen Code mal anteste ( mit der toxisch.lsp im Suchpfad )komm ich auf (Autocad Mechanical 2008) Befehl: Befehl: toxisch ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) ; Warnung: Unwind übersprungen bei Ausnahmebedingung ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) Unbekannter Befehl "TOXISCH". Drücken Sie F1-Taste für Hilfe. was ist eigentlich, wenn in der Toxisch.lsp kein Befehl Toxisch definiert wurde? Ruft der Reaktor sich dann in einer Endlosschleife auf ? ich würde bevor ich das senndcomand loslasse zumindest noch mal auf (=(type (read FUNKTIONSNAME))'SUBR) oder so testen .. aber wie schon gesagt .. ich finde das Prog "Ü".. entweder meine Tools sind geladen, oder ich zieh mir die vlx aus dem Explorer schnell in die Zeichnung .. .. und einen Inetautomatismus halte ich auch nicht für glücklich .. warum nicht auch einen Eitrag in den WIN-Autostart und einen Aufruf von Mailto: damit meine Autocadeinsetzenden Bekannten auch was von haben ------------------ - 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 |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 25. Sep. 2009 18:32 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: hier fehlt übrigens noch ein strcat ..... und (load "NAME" ()) ???
Negativ! Annahme: Du meinst die Extension .lsp, .fas .flx Muss nicht angegeben werden. Load lädt wahlweise nach date + extension (or lsp fas ...) Zitat: da ist IMHO (/= "ERROR" (load "NAME" "ERROR")) besser... da die Rückgabe von load bei Erfolg lt.Doku "unspezifisch" ist
Im Code wird spezifisch () im Fehlerfall zurückgegeben. Siehe ... (cond ((load(setq unkn_c(car b)) ()) ; wenn error ---> nil ... Zitat: und wenn ich deinen Code mal anteste ( mit der toxisch.lsp im Suchpfad )komm ich auf (Autocad Mechanical 2008) Befehl: toxisch ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) ... usw.
Positiv! aber nicht in allen Versionen! Kannst Du bestätigen, dass bei Command: toxisch ... abwechseln 2 verschiedene Fehlermeldungen auftreten. Die erste wie angegeben, die zweite (bei wiederholter Eingabe in AU-04 bei mir) ... ; error: ads_undef fails: <name num arc>: C:TOXISCH 2768 22 Unknown command "TOXISCH". Press F1 for help. Fall 2 Fehlersuche hier: ; error: ads_undef fails: <name num arc>: C:TOXISCH 2768 22 Zitat:
was ist eigentlich, wenn in der Toxisch.lsp kein Befehl Toxisch definiert wurde? Ruft der Reaktor sich dann in einer Endlosschleife auf ? ich würde bevor ich das senndcomand loslasse zumindest noch mal auf (=(type (read FUNKTIONSNAME))'SUBR) oder so testen ..
... die Befehle sind schon vor dem sendcommand ausgeführt. Wenn nicht in atoms-family -> keine Ausführung eines coms notwendig. Der Command ist dann ja nicht definiert worden. Zitat:
aber wie schon gesagt .. ich finde das Prog "Ü".. entweder meine Tools sind geladen, oder ich zieh mir die vlx aus dem Explorer schnell in die Zeichnung .. .. und einen Inetautomatismus halte ich auch nicht für glücklich .. warum nicht auch einen Eitrag in den WIN-Autostart und einen Aufruf von Mailto: damit meine Autocadeinsetzenden Bekannten auch was von haben [/B]
... war nur Anstoß Danke für die Bug-Message ... ToXoT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13529 Registriert: 30.11.2003 .
|
erstellt am: 25. Sep. 2009 18:38 <-- editieren / zitieren --> Unities abgeben: Nur für toxot
|
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 25. Sep. 2009 23:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: ne hier ('t(princ("\n unknown command <" unkn_c "> not found!\n")))))
... ist Fehler ... hatte ich vorher nicht gesehen. Weiß auch noch nicht, warum gewisse A-Versionen obenen beschriebenen Fehler in 2 zyklischen Erscheinungen verursachen. Danke für Deine Aufmerksamkeit ... ToXoT Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
toxot Mitglied
Beiträge: 70 Registriert: 05.04.2009
|
erstellt am: 26. Sep. 2009 14:31 <-- editieren / zitieren --> Unities abgeben:
Zitat: und wenn ich deinen Code mal anteste ( mit der toxisch.lsp im Suchpfad )komm ich auf (Autocad Mechanical 2008)Befehl: Befehl: toxisch ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) ; Warnung: Unwind übersprungen bei Ausnahmebedingung ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) ; Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung) Unbekannter Befehl "TOXISCH". Drücken Sie F1-Taste für Hilfe.
... wie oben schon erwähnt, trat dieser Fehler nur in einigen AU-Versionen auf. Workarround und neue Testversion, die diesen Fehler nicht mehr produzieren sollte ... Diese Routine im Supportpfad (zur Zeit!!!) ablegen ... aber nicht in Session laden!
Code:
;;; **************************************************** ;;; toxisch.lsp ... testcode ;;; just put it in a-environment ;;; it should be an "unknown command" in Session! ;;; ... will be loaded and executed if ... ;;; ... reactor callback "rcb-unkn" is online! (defun c:toxisch() (command "_line" '(0 0) '(100 0)) (alert ";) <toxisch> loaded and (command \"_line\" '(0 0) '(100 0)) executed! ... have a nice day toxot")) ;;; ****************************************************
... in Session kann befehl "toxisch" getestet werden. Fehlermeldung von AU ... Unbekannter Befehl "TOXISCH". Drücken Sie F1-Taste für Hilfe. ... ist (noch)berechtigt und richtig. Dann diese Reaktorroutinen in Session laden ...
Code:
;;; ************************************************ ;;; ;) reactor functions executing unknown commands ;;; ;) somwhere available on (our ?) net ;;; ;) no pre-defuns or autoload-definitions ;;; ;) real "on demand load" ;;; ;) treat resources with care ;;; ;) we habe to think about some things again! ;;; ;) by : ToXoT ;;; ;) mailto: spam.halator@gmail.com ;;; ;) www : www.ToXoT.at ... under construction! ;;; ;) best to you ... i like help too! ;;; ;) V:090926 ;;; ************************************************ (defun wait(sec)(setq cdate (+(*(getvar "cdate")1000000.0)sec))(while(<(*(getvar "cdate")1000000.0)cdate))) ;;; ************************************************ ;;; r-? ... is reactor active? ;;; (r-? reactor_data callback_function) (defun r-?(r_def r_typ) (apply 'or(mapcar '(lambda(x) (equal(vlr-reactions x)r_def)) (cdar(vlr-reactors r_typ))))) ;;; ************************************************ ;;; r-! ... reactor aktivate! ;;; (r-! reactor_data callback_function) (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)))) ;;; ************************************************ ;;; rcb-unknc ... callback on unknownCommand ... ;;; executes commandUnknown by loading equal file! ;;; !!! commandname == filename !!! ;;; example: ... ;;; unknowncommand: toxisch ;;; filename : toxisch.lsp ;;; ... in it : (defun c:toxisch() ... etc. (defun rcb-unknc (a b / ); CommandUnknown$ SendCommand$) (vla-SendCommand (vla-get-activedocument(vlax-get-acad-object)) (strcat"(LoadOnDemand " (chr 34) (car b) (chr 34)") ") ));;; ************************************************ ;;; LoadOnDemand ... LispLoader ;;; Testversion in Version: Spasshalber (defun LoadOnDemand(what) (cond ((setq test_load(load what())) (princ (strcat "\r... Fehlermeldung ohne Bedeutung." "\n... Programm geladen ...\n")) (if(car(atoms-family 1 (list(strcat "c:" what)))) (eval(read(strcat "(c:" what ")"))))) ('T ())) (princ)) ;;; ************************************************ ;;; :vlr-unknownCommand ! rcb-unknc ;;; init ... unknowncommand ... callback rcb-unknc (vl-load-com) (r-! '((:vlr-unknownCommand . rcb-unknc)) :vlr-command-reactor) ;;; *******************************************ToXoT
... und UnknownCommand: toxisch eingeben Müßt jetzt in allen Versionen funktionieren. Grüße ... ToXoT [Diese Nachricht wurde von toxot am 26. Sep. 2009 editiert.]
[Diese Nachricht wurde von toxot am 27. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|