| |
| 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: Makro mit Enter wiederholen? (1508 mal gelesen)
|
Knochenjäger Mitglied Techniker
Beiträge: 1 Registriert: 02.07.2009
|
erstellt am: 02. Jul. 2009 21:38 <-- editieren / zitieren --> Unities abgeben:
Hallo! Wie kann ich ein Makro, dass ich aus LISP heraus gestartet habe zB.: (C:Makro) nachher durch einfaches Drücken von ENTER wiederholen? Es wird immer nur ein Befehl von der Tastatur oder vom Menü zurückgerufen. Eine System-Variable dafür oder vielleicht eine undokumentierte habe ich noch nicht entdeckt. Irgendwo muss ja der wiederholbare Befehlsname gespeichert sein? Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 02. Jul. 2009 22:01 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Mit "Makro" meinst du also eine Lispfunktion (defun c:MEINEFUNK ()(princ "hello")) ? Gegenfrage: wie startest du diese denn (wenn nicht über ein Menü oder der Tastatur) ? Falls du diese Funktion in einem anderen Lisp aufrufst kannst du dir die Antwort selbst geben - denn mit Enter kann man ja nur den letzten Befehl wiederholen und bei sowas: (defun ANDERE ()(c:meinefunk)) wäre ja ANDERE die letzte Funktion und nicht MEINEFUNK - und bei ANDERE wäre dann wieder die Frage wie diese denn gestartet wurde. Entweder war das schon die (unbefriedigende) Antwort oder du erklärst mal konkret an einem Beispiel. ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
richmotion Mitglied
Beiträge: 12 Registriert: 24.11.2008
|
erstellt am: 13. Jul. 2009 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Natürlich sind beides Funktionen; bei uns hat es sich aber so eingebürgert, zu jenen 'Makros' zu sagen, die man wie einen AutoCAD-Befehl ohne Klammern mit der Tastatur eingeben kann. Deshalb hier ein Beispiel: (defun C:MAKRO1 () (hoppsasa ....) (trallala ....) (C:MAKRO2) (princ) ) Ich will also einmal MAKRO1 aufrufen und dann mit ENTER nur mehr MAKRO2 beliebig oft wiederholen. Mit anderen Worten möchte ich vorgeben können, welcher Befehl mit ENTER später gestartet wird.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 13. Jul. 2009 08:46 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Jul. 2009 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
da Makro2 als Funktion gestartet wurde und nicht als Befehlsaufruf über die Eingabe in der Befehlszeile , wird das wohl mit der Enterwiederholung nichts. ... Ein Dreh wäre , der Aufruf über Sendkeys und wscript.shell .. aber ob dann die Reihenfolge der Abarbeitung dann noch so läuft ?? ------------------ - 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 |
MZjochen Mitglied Techniker
Beiträge: 18 Registriert: 14.02.2006 ACAD 2010, WIN XP/Vista
|
erstellt am: 13. Jul. 2009 20:47 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Ich gehe folgenden Weg in meinem MENU rufe ich alle eigenen Funktionen so auf: ^C^C^P(JG_START "meine-funktion" "Datei-in-der-meine-funktion-steht") JG_RESTART für alle Funktion in der schreibweise (meine-funktion) bzw. so ^C^C^P(JG_START '(meine-funktion arg1 arg2 ...) "Datei-in-der-meine-funktion-steht") JG_RESTART für alle Funktion in der schreibweise (C:meine-funktion) oder (meine-funktion arg1 arg2 ...) Der Trick In der Funktion JG_START wird eine globale Variable $JG_START_PRG gesetzt, die anschließend mit der Funktion C:JG_RESTART im Menu JG_RESTART aufgerufen wird Innerhalb der nun aufgerufenen Funktion kann dann die globale Variable $JG_START_PRG wieder neu gesetzt werden [in deinem Fall so (setq $JG_START_PRG '(C:MAKRO2))] so dass anschließend mit ENTER eben diese Funktion gestartet wird
Aufruf im Menu: ^C^C^P(JG_START "MAKRO1" "Datei-MAKRO1") JG_RESTART für Funktion ohne C: (defun MAKRO1 () (hoppsasa ....) (trallala ....) (setq $JG_START_PRG '(C:MAKRO2)) (C:MAKRO2) (princ) ) ^C^C^P(JG_START '(C:MAKRO1) "Datei-MAKRO1") JG_RESTART für Funktion mit C: (defun C:MAKRO1 () (hoppsasa ....) (trallala ....) (setq $JG_START_PRG '(C:MAKRO2)) (C:MAKRO2) (princ) ) (defun JG_START (Name File) (if (= (type name) 'LIST) (if (not (eval (car Name))) (progn (load File) ) ) (if (not (eval (read Name))) (progn (load File) ) ) ) (setq $JG_START_PRG Name) (princ) ) (defun C:JG_RESTART () (if (= (type $JG_START_PRG) 'LIST) (eval $JG_START_PRG) (eval (list (read $JG_START_PRG))) ) (princ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
richmotion Mitglied
Beiträge: 12 Registriert: 24.11.2008
|
erstellt am: 21. Jul. 2009 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Vorerst einmal Danke für die bisherigen Bemühungen; ich hätte aber doch lieber eine vom Menü unabhängige Lösung. Wobei ich wieder zu meiner ersten Anfrage zurückkomme, wo ich den Befehlsnamen in einer (undokumentierten) System-Variablen vermute (wie z.B. die Vorgabe für's nächste Schraffur-Muster oder den Namen vom nächsten einzufügenden Block).AutoCAD konnte schon immer das letzte Kommando mit ENTER wiederholen (kenne ich seit Rel. 2.5).In der Windows-Registry ist er jedoch nicht gespeichert, das habe ich überprüft; ausserdem gab's die damals noch lange nicht. Es macht auch keinen Sinn, das dauerhaft zu speichern, weil es für jede geöffnete Zeichnung ein anderer ist und bei jeder ACAD-Sitzung neu beginnt.In der AutoCAD Object-Struktur bin ich aber auch nicht fündig geworden, ebensowenig bei den im WEB preisgegebenen undokumentierten System-Variablen. Deshalb werde ich mir jetzt das Leben nehmen und mich mit (exit) seitlich runterlassen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 21. Jul. 2009 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Zitat: Original erstellt von richmotion: ... Deshalb hier ein Beispiel:(defun C:MAKRO1 () (hoppsasa ....) (trallala ....) (C:MAKRO2) (princ) ) Ich will also einmal MAKRO1 aufrufen und dann mit ENTER nur mehr MAKRO2 beliebig oft wiederholen. Mit anderen Worten möchte ich vorgeben können, welcher Befehl mit ENTER später gestartet wird.
Also in DIESEM Fall könnte es so gehen: statt (C:MAKRO2) das hier: Code: (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "MACRO2 ")
Grüsse, Henning------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
richmotion Mitglied
Beiträge: 12 Registriert: 24.11.2008
|
erstellt am: 21. Jul. 2009 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Bingo ! Der Wink war goldrichtig, vielen Dank. Zum Glück hab' ich mit dem (exit) noch etwas gewartet. In den unendlichen Weiten von AutoCAD scheint's ja doch für fast alles eine Lösung zu geben. 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: 22. Jul. 2009 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für Knochenjäger
Hm. Eventuell mit der Umgebungsvariable "LASTPROMPT" möglich. Code: (defun C:Makro1 ( / ) (if (= (getvar "lastprompt") "Befehl:") ; Makro1 wurde mit ENTER wiederholt, sonst würde "Befehl: Makro1" drin stehen (c:makro2) (progn (print "Ausführung-Makro1") (c:makro2) ) ) (princ) ) (defun C:makro2 ( / ) (print "Ausführung-Makro2") )
ergibt folgenden Ablauf Befehl: makro1
"Ausführung-Makro1" "Ausführung-Makro2" Befehl: Befehl: <- hier mit ENTER widerholt !! MAKRO1 "Ausführung-Makro2" Befehl: Leider steht halt ind er Systemvaruiable auch das Befehl: drin, somit ist dieses Construkt nicht mehrsprachig verwendbar [Diese Nachricht wurde von fuchsi am 22. Jul. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |