| |
| 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: aus LISP ein SCRIPT aufrufen und dann weiter in LISP (2213 mal gelesen)
|
alterHausmeister Mitglied Hausmeister
Beiträge: 470 Registriert: 02.02.2009 Hardwareprobleme: keine Softwareprobleme: P3D-2023/2025
|
erstellt am: 05. Aug. 2010 00:10 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle, ich habe folgende Situation: 1. Fremdsoftware liefert ein SCRIPT, daß ein Bauteil beinhaltet. 2. Vorbereiten der aktuellen Zeichnung in LISP und schließlich SCRIPT ausführen. 3. Nacharbeiten weiter in der LISP-Datei, um die Zeichnung fertigzustellen. Ich komme nach dem Ausführen des SCRIPT nicht in das aufrufende LISP zurück. Funktioniert ein solcher Rücksprung in die aufrufende LISP-Datei oder befinde ich mich wieder einmal auf dem Holzweg? Ein (command "_script" "c:/Bauteil.scr") kommt nicht zurück. Bei BAT-Dateien (die älteren unter Euch werden sich erinnern ...) gab es einen call-Befehl, um den Rückweg in die aufrufende Datei zu gewährleisten.
Die Vor- und Nacharbeit der Zeichnung funktioniert schon wie gewollt. Auf der einen Seite sollte das SCRIPT unverändert bleiben, auf der anderen Seite sind eben Anpassungen in der Darstellung erforderlich. ------------------ lg, der Hausmeister _______________________________________ 46 + 1 = ein Lächeln Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 05. Aug. 2010 06:42 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
Morgen, ungetestet und auf die Schnelle Code: (defun C:Startsc () (if (findfile "C:/Pfad/meinscript.scr") (command "_script" "C:/Pfad/meinscript.scr") ) )
Wenn du das Ganze in einem Lisp-Proggi einbaust vllt. noch mittels script eine Variable am Ende schalten und diese im lisp prüfen. Bei bestandener Prüfung sollte das script durchgelaufen sein. Edit: Fehler abfangen und ggf. die Laufzeit beschränken?!
Code: (if (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (vl-cmdf "_script" ...
------------------ Mfg Heiko
Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." [Diese Nachricht wurde von Dorfy am 05. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Aug. 2010 08:24 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Aug. 2010 10:03 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
Zitat: Original erstellt von cadffm: Mich würde sehr der Punkt "1. Fremdsoftware liefert ein SCRIPT, daß ein Bauteil beinhaltet." interessieren ! Ihr habt ein Programm welches ein AutoCAD-SCRipt erzeugt, immer wieder neu -um Daten bereit zu stellen
War mal eine Zeit lang modern. Vor allem bei Applikaionen, die auch in LT Versionen funktionieren sollten. Die Applis haben dabei sogar ziemlich komplexe Scripte erzeugt, die dann per SendKey in die Befehlszeile geschossen wurden. [Diese Nachricht wurde von fuchsi am 05. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Aug. 2010 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
danke für die Info Fuchsi ! @AlterHausmeister Ich würde 2 Lisp´s machen.. Lisp1 starten - am Ende das Script aufrufen ..script läuft.... und am Ende das Lisp2 starten(aus dem Script heraus) Falls du die Erstellung des Scriptes nicht beeinflussen kannst, dann mußt du eben in Lisp1 das Script um eine Zeile erweitern (Aufruf des Lisp2) ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Aug. 2010 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
das Problem ist dabei, dass das LISP und das Script nicht sauber syncron abgearbeitet werden Beispiel das aufrufende Lisp Code: (defun c:xx () (alert "vorher") (command "._script" "d:/test/test.scr") (alert "nachher") )
Die Scriptdatei
Code: ._line 0,0,0 1,0,0 (alert "script")
was passiert
Zuerst das Alert Vorher Dan das Alert Nachher Und zum Schluss das Alert Script Eigentlich wollten wir es ja ganz anders. IMHO, die einzige Möglichkeit, die ich sehe, dass das Fremappli Script zu Schluss Dein Nachbearbeitungslisp aufruft.
Viele Fremdapplikationen bauen jedoch diese Scripte dynamisch zusammen. Damit hat man leider keine Möglichkeit, das Script zu verändern. Alleridngs habe ichs chon Applis gesehen, die diese Scripte aus einer Art Script-Templates zusammenbauen. Hier könnte man durch Verändern des Templates sehr wohl diesen Lispaufruf einbauen. Kommt halt auf die Fremdappli drauf an. Eine andere Möglichkeit ist, dass das aufrufende Lisp die Scriptdatei Zeile für zeile einliest (open Read-line close), dabei eine temporäre Kopie schreibt, Zum Schluss in die Kopie den Lispaufruf reinschreiben, und die Kopie mittels (command "script" "tempscript.scr") starten. 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. Aug. 2010 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Aug. 2010 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
Zitat: Original erstellt von CADmium: und ein Script, welches Lisp1 Sript Lisp2 lädt und abarbeitet ?
Diese Idee hatte ich auch schon. ausprobiert Script1 stoppt beim Aufruf von Script2. Also Lisp2 wird nicht mehr abgearbeitet.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Aug. 2010 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Aug. 2010 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
Zitat: Original erstellt von cadffm: auch und wenn man (versucht) RESUME im 2.Script zu benutzen ? [i](ok, ungetestet von mir)[/i]
Wir haben, scheints ziemlich ähnliche Ideen. Nein geht nicht Hier mal eine kleiner Test Mein Script d:\test\test.scr schaut wieder gleich aus
Code: ._line 0,0,0 1,0,0 (alert "script")
mein aufrufendes Lisp schaut jetztz so aus
Code:
(defun c:MyScript ( / ) (setq fTmpScr (open "c:\\temp\\Tempscr.scr" "w")) (setq fScr (open "d:\\test\\test.scr" "r")) (write-line "(alert \"vorher\")" fTmpScr) (while (setq dat (read-line fScr)) (write-line dat fTmpScr) ) (write-line "(alert \"nachher\")" fTmpScr) (close fTmpScr) (close fScr) (command "._script" "c:\\temp\\Tempscr") )
Und was passiert. Genau dass was wir wollen
Alert VORHER Alert SCRIPT Alert NACHHER das Lisp erstellt erinfach eine temp. Kopie des Scriptes, und baut vorher und nacher einen Lispaufruf (bzw. nur eine ALERT) ein.
Das Temp Script schaut dann so aus Code: (alert "vorher") ._line 0,0,0 1,0,0 (alert "script") (alert "nachher")
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alterHausmeister Mitglied Hausmeister
Beiträge: 470 Registriert: 02.02.2009
|
erstellt am: 05. Aug. 2010 13:24 <-- editieren / zitieren --> Unities abgeben:
Danke für die Denkanstöße, dann werde ich das heute abend mal ausprobieren. Bin eben erst wieder zurück im Büro ... Es ist aber wirklich so, daß diese (sicherlich betagte Software) auf diese Weise arbeitet. Die Ergebnisse sind recht komplex und es wäre nicht sinnvoll, alles selbst noch einmal zu zeichnen. Leider ist dieses erzeugte SCRIPT mit kleinen Fehlern behaftet, die auf diesem Wege ausgemerzt werden sollten. ------------------ lg, der Hausmeister _______________________________________ 46 + 1 = ein Lächeln Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alterHausmeister Mitglied Hausmeister
Beiträge: 470 Registriert: 02.02.2009 Hardwareprobleme: keine Softwareprobleme: P3D-2023/2025
|
erstellt am: 06. Aug. 2010 09:09 <-- editieren / zitieren --> Unities abgeben:
Ich wollte mal wieder die Eierlegende Wollmilchsau ... Der Weg von Fuchsi ist für meinen Fall vernünftig. Damit schreibe ich die entsprechenden Anpassungen vor und hinter das SCRIPT und führe es dann aus. Da ich die Vor- und Nachbereitungen noch für andere Zeichnungen/Pro_blem-Stellungen nutzen wollte, hatte ich im Verlauf eine IF-Anweisung zur SCHRIPT-Ausführung vorgesehen. Durch eine Teilung in 2 getrennte Abläufe ist alles supi. Danke ------------------ lg, der Hausmeister _______________________________________ 46 + 1 = ein Lächeln Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 06. Aug. 2010 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 06. Aug. 2010 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
|
alterHausmeister Mitglied Hausmeister
Beiträge: 470 Registriert: 02.02.2009
|
erstellt am: 06. Aug. 2010 11:06 <-- editieren / zitieren --> Unities abgeben:
Nicht Lachen, das ist eine ernste Sache ... Aber laß mal, ich verstehe auch nicht jede Signatur. ------------------ lg, der Hausmeister _______________________________________ 46 + 1 = ein Lächeln 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: 11. Aug. 2010 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für alterHausmeister
Hallo, dann will ich auch noch einen weiteren Denkanstoß liefern: Lies das Script ein, und konvertiere dieses zu Lisp-Code. Jeder Zeile ein (Command voran stellen und die Befehlszeilen-Argumente entsprechend anhängen. Somit kann man jedes beliebige Script in einer Lisp-Datei nutzen. (So mache ich das zumindest). Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |