| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Lisp von c# aus laden ohne! SendStringToExecute (2377 mal gelesen)
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 17. Mai. 2011 09:29 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin auf der Suche nach einer Möglichkeit eine Lisp-Datei von c#.Net aus zu laden. Dies darf allerdings nicht als <SendStringToExecute> passieren, da das Laden in einem Reactor geschehen soll. LoadArx / LoadDVb habe ich gefunden, aber nichts für LSP. Hat jemand eine Idee? (und falls ja -> Welche?) Besten Dank! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 17. Mai. 2011 17:13 <-- editieren / zitieren -->
Hi, wenn Du das VL-ActiveX-Objekt verwendest, dann kannst Du direkte LISP-Statements absetzen, damit auch (load "C:/TEMP/TEST.LSP") funktionieren. Basis im Form von VBA findest Du >>>hier<<< HTH, - alfred - ------------------ www.hollaus.at |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 17. Mai. 2011 22:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, Ich danke dir ... aber das funktioniert leider nicht. Ich kann den Lisp-Befehl ohne Probleme auf dem von dir beschriebenen Weg absetzen, wenn ich diesen via [CommandMethod(..)] einbinde. Im Reactor verursacht selbe Routine leider einen Fehler funktioniert dieser leider nicht ( - da kann ich die funcall-Methode nicht aufrufen. Schade, wäre aber eine Lösung gewesen. Danke Dir dennoch .. wer weiß, wann ich diese Lösung noch einmal brauchen kann. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 17. Mai. 2011 23:25 <-- editieren / zitieren --> Unities abgeben:
Update! Hintergrund: Ich bastel an einer Datenbankbasierten UserVerwaltung. Soll heißen: Es gibt Benutzer und Benutzergruppen, in einer Datenbank werden Systemvariablen, Menü's, Support-Pfade und eben zu ladende Lisp-Dateien vorgehalten. Das Programm liest die Infos' entsprechend des Eintragungen in der Datenbank aus und biegt das System entsprechend hin. Das hat den Vorteil, man brauch nur eine DLL in das Image mit einschieben, und der Rest wird ohne irgendwelche Änderungen an der acad-Lisp oder sonstwo erledigt. Ich habe nun, da ja Lisp's bekanntlich mit jedem Dokument geladen werden wüssen, einen DocumentCreated-Reactor eingebaut, der eben am Ende der Dokumenterzeugung die notwendigen Lisp's lädt (der Rest wird ja einmalig bei der Initialisierung eingestellt). In diesem Reactor (der seltsamerweise in den verschiedenen AutoCAD-Versionen zu unterschiedlichen Zeitpunkten anspringt) funktioniert das Laden nicht via SendStringtoExecute und nicht über den von dir genannten Weg. Nun das Update: In dem DocumentCreated-Reactor füge ich nun einen DocumentLockModeChanged-Rektor hinzu, der sich dann selber wieder löscht, nachdem die Lisp-geladen wurden. Innerhalb dieses Reactors funktioniert das Laden nun wunderbar. Danke dir nochmal Alfred! Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Mai. 2011 07:58 <-- editieren / zitieren -->
Hi Holger, danke für Deine Rückmeldung! Ja Da ich mit LISP nicht viel (eigentlich NIL ) am Hut habe, kann ich die Funktionalität/Auswirkungen von LISP-Reaktoren in Zusammenhang mit dem VL-ActiveX-Objekt leider gar nicht abschätzen. Ich arbeite mehr in der dotNET-Umgebung und so wie Du es beschreibst, hätte ich das Eventhandling von dotNET genutzt, um zu erkennen, ob/wann ein neues Doc geöffnet wurde (Event auf DocumentManager.xxx) und von da aus agiert (Initialisierung, LISP-Files laden, ...). Umso besser, dass Du für Dich eine Lösung gefunden hast! Danke für die Beschreibung, damit bin ich zumindest gewarnt, wenn mal wer mit LISP+Reaktoren kommt, und ich das von der App aus laden soll. - alfred - ------------------ www.hollaus.at |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 19. Mai. 2011 08:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, zur Info: ich nehme das .Net-Event-Handling. Aber es ist eben so, dass das DocumentCreated (aus der DocCollection) nicht beim Starten von Acad anspringt, und auch dort das Absetzen von SendStringToExecute nicht funktioniert. Da jedoch in .Net nur LoadArx und LoadDVB vorhanden ist .. und ich aber ein LoadLisp brauche, musste ich einen anderen Weg finden. Und als Ergänzung: Ich arbeite nahezu nur noch in C#.Net - es ist für mich inzwischen schneller und besser zu handhaben als das Lisp. Man bekommt deutlich schnellere Programme hin, mit deutlich besseren Oberflächen. Die Möglichkeiten die man dort hat (aber wem erzähl ich das) sind um ein Vielfaches größer als in Lisp .. gerade wenn man in Richtung Applikationen unterwegs ist. Die Lisp-Engine ist eben auf dem Stand von 19XX stehen geblieben. Schade zwar, aber wohl auch nicht zu ändern. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 823 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 23. Mai. 2011 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für Brischke
Zitat: Original erstellt von Brischke: Hallo Alfred,zur Info: ich nehme das .Net-Event-Handling. Aber es ist eben so, dass das DocumentCreated (aus der DocCollection) nicht beim Starten von Acad anspringt, und auch dort das Absetzen von SendStringToExecute nicht funktioniert. Da jedoch in .Net nur LoadArx und LoadDVB vorhanden ist .. und ich aber ein LoadLisp brauche, musste ich einen anderen Weg finden.
Hallo Holger, prüf' doch mal, ob DocumentCreated vor oder nach dem Aufruf von S::Startup anspringt. Eventuell kannst Du diese Funktion nutzen, um Deine Lisps zu laden. Zitat: Und als Ergänzung: Ich arbeite nahezu nur noch in C#.Net - es ist für mich inzwischen schneller und besser zu handhaben als das Lisp. Man bekommt deutlich schnellere Programme hin, mit deutlich besseren Oberflächen. Die Möglichkeiten die man dort hat (aber wem erzähl ich das) sind um ein Vielfaches größer als in Lisp .. gerade wenn man in Richtung Applikationen unterwegs ist. Die Lisp-Engine ist eben auf dem Stand von 19XX stehen geblieben. Schade zwar, aber wohl auch nicht zu ändern.
Ja, so ist das wohl. Trotzdem: die Programmentwicklung in Lisp ist immer noch um einen Faktor deutlich größer 2 schneller als in C#, und bei den meisten AutoCAD-Apps kommt's den Kunden mE dann doch eher auf die dadurch eingesparten Kosten an als auf ein schneller laufendes Programm oder mehr Gimmicks im GUI. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 23. Mai. 2011 13:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Achim, danke für den Tip mit dem s::statup. Das geht leider nicht, da die Original-Dateien unverändert bleiben sollen. ich habe es inzwischen hinbekommen. Allerdings ist mir die Reactor-Geschichte sehr suspekt. Ich habe das jetzt wie folgt gelöst. Das CL-Com-Objekt ist erst verfügbar (der Zugriff darauf) nach dem dieses via (vl-load-com) instanziert wurde. Ich kann also über das VL-COM-Object meine Lisp's nicht laden, da nicht sicher gestellt ist, dass das VL-Com-Object auch tatsächlich zur Verfügung steht. Deim Start von AutoCAD frage ich den DocumentLockmode ab. Da dieser beim Start häufig wechselt, wersuche ich immer, wenn das Document als nicht gesperrt deklariert ist, die Lisp's via SendStringToExecute zu laden. Das funktioniert allerdins nur zu dem Zeitpunkt, wenn das Document endgültig frei gegeben ist - aber dann funktioniert es. Allerdings funzt das <SendStringToExecute> auf diesem Wege nicht, wenn man ein neues Dokument öffnet oder erstellt. Da ich aber beim Start von Acad sicher gestellt habe, dass das (vl-load-com) ausgeführt wurdfe, kann ich nun, darüber die Lisp's laden. Noch ein Wort zu den Entwicklungszeiten: Ich habe mir inzwischen eine so umfangreiche C#-Bibliothek und eine spezielle Projekt-Vorlage erstellt, dass ich wirklich behaupte, ebenso schnell in C# wie in Lisp zu sein. Das mag nicht auf alle Aufgabenstellungen zutreffen, wohl aber auf die, mit denen ich es am häufigsten zu tun habe. Da sich mein Aufgabenschwerpunkt sehr in Richtung CAFM-Datenaufbereitung und Informationsaustausch zwischen Acad /AutoCAD Architecture und Datenbanken / Excel / XML-Dateien verschoben hat, bietet mir das .Net-Framework hier hervorragende Möglichkeiten, die ich seitens Lisp nicht zur Verfügung habe - folglich erst noch erstellen müsste. Ein Großteil meiner Kunden sieht es auch als sehr positiv an, dass sich zum. Bsp die Programmeinstellungen in die AutoCAD-Optionen integrieren und man nicht in irgendwelchen Konfigurationsdateien Eintragungen vornehmen muss. Das macht die Programme intuitiv, vor allem auch von den Normalanwendern bedien- und konfigurierbar.
Was ich sehr häufig (zumindest für den internen Gebrauch) mache, dass ich die Entwicklungsumgebungen mische. Die fehlenden Lisp-Funktionen, programmiere ich in .Net-C# und nutze diese dann von Lisp aus. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 823 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 23. Mai. 2011 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Brischke
Zitat: Original erstellt von Brischke: Hallo Achim,danke für den Tip mit dem s::statup. Das geht leider nicht, da die Original-Dateien unverändert bleiben sollen.
Nein, ich dachte, dass Du die bereits geladene (die kann ja von überall her kommen) S::STARTUP-Funktion von C# aus manipulierst. Da die S::STARTUP mit DEFUN-Q definiert werden soll, liegt die als manipulierbare Liste vor, an die Du beliebige Erweiterungen hängen kannst, ohne irgend welche Dateien manipulieren zu müssen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|