Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Makro mit Enter wiederholen?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Makro mit Enter wiederholen? (1423 mal gelesen)
Knochenjäger
Mitglied
Techniker

Sehen Sie sich das Profil von Knochenjäger an!   Senden Sie eine Private Message an Knochenjäger  Schreiben Sie einen Gästebucheintrag für Knochenjäger

Beiträge: 1
Registriert: 02.07.2009

erstellt am: 02. Jul. 2009 21:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 02. Jul. 2009 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von richmotion an!   Senden Sie eine Private Message an richmotion  Schreiben Sie einen Gästebucheintrag für richmotion

Beiträge: 12
Registriert: 24.11.2008

erstellt am: 13. Jul. 2009 08:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 13. Jul. 2009 08:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

CADffm leicht irritiert.

------------------
die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 13. Jul. 2009 08:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von MZjochen an!   Senden Sie eine Private Message an MZjochen  Schreiben Sie einen Gästebucheintrag für MZjochen

Beiträge: 18
Registriert: 14.02.2006

ACAD 2010, WIN XP/Vista

erstellt am: 13. Jul. 2009 20:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von richmotion an!   Senden Sie eine Private Message an richmotion  Schreiben Sie einen Gästebucheintrag für richmotion

Beiträge: 12
Registriert: 24.11.2008

erstellt am: 21. Jul. 2009 11:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von richmotion an!   Senden Sie eine Private Message an richmotion  Schreiben Sie einen Gästebucheintrag für richmotion

Beiträge: 12
Registriert: 24.11.2008

erstellt am: 21. Jul. 2009 21:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 22. Jul. 2009 10:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Knochenjäger 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz