Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Problem mit command-Aufruf ab 2015 version

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:  Problem mit command-Aufruf ab 2015 version (972 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Aug. 2015 09: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

Hier mal nachgehakt, wie die Profies mit command / command-s zwischen der jeweiligen Acadversion umgehen.
Einmal warum hat man die command-Anweisung umgekrämpelt zum anderen, wenn meine Applikation ab der 2013-version laufen soll müsste ich quasi eine Abfrage nach der angew. Acadversion machen, um dann entweder command oder command-s zu verwenden. Ist das lösbar, ohne das ich jede command-zeile zweimal schreiben muss.
Als Gedanke
(defun commands()
  (wenn Acad2013-2014
  (dann command
  (wenn Acad2015->
    (dann command-s
  )
Das lässt sich so leiter nich umsetzen, wieso?

Code:
((< (cadr (cd:SYS_AcadInfo)) 20.0) ; bis Acad 2014 version
      (defun commands ()
(command)
)
      )
      ;_$ ; error: no function definition: nil

Als zweites Problem habe ich, das die *error*-Methode nicht richtig anspringt, wenn ich versuche eine command-s Anweisung abzubrechen, deshalb war mein erster Gedanke einen while-loop mit grread abzufragen

Code:
(while loop
    (setq code (grread T 8))
    (cond
      ((equal code '(2 102))
      (princ "\n Finished!")
      (break)
      )
      (T (doLayout))
      )
    )

Wiederum eine Sackgasse, liege ich falsch, dass man command-s mit Esc abbrechen kann. Dann könnte ich mir das Gedöns sparen ?

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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: 03. Aug. 2015 10:11    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 cadplayer 10 Unities + Antwort hilfreich

Teil1
Wenn du im echten Code "richtigen Code" und keine Schreib/Syntaxfehler machst, dann geht das.
Wenn niedriger Version XY, dann Funktion command-s definieren..
So sollte es gehen und das machen auch andere.

Teil2
Das steht eigentlich in der Doku zur Funktion beschrieben, auch wenn es Ausnahmen gibt(meine Meinung).

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Aug. 2015 11:17    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

Das hat funktioniert
Meine Umsetzung so...
Code:
(defun commands(name arg1 arg2 arg3 arg4 arg5)
    (cond
      ((>= (cadr (cd:SYS_AcadInfo)) 20.0) ; Acad 2015 version
      (command-s name arg1 arg2 arg3 arg4 arg5)
      )
      ((< (cadr (cd:SYS_AcadInfo)) 20.0) ; bis Acad 2014 version
      (command name arg1 arg2 arg3 arg4 arg5)
)
      )
      )

Vielleicht gibt es eine bessere Lösung.
Da ich hiermit eine Beschränkung in der Anzahl der Argumente an command-Aufruf habe.
Gibt es eine Möglichkeit diese Beschränkung aufzuheben?

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 03. Aug. 2015 11:21    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


Command-S.lsp

 
Mal zum Testen, der vollständige Code mit dem Linien-Befehl
Die nicht genutzten Argumente habe ich mit "0" belegt.
Dumm, wie ich finde

=> Der Linienbefehl verlangt nach einem zweiten Punkt

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Aug. 2015 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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
... wenn meine Applikation ab der 2013-version laufen soll müsste ich quasi eine Abfrage nach der angew. Acadversion machen...

AutoCAD versteht ab 2012 command wie command-s.
Dein Vorgehen ist folglich überhaupt nicht erforderlich.

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Aug. 2015 11:40    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

Führe ich selbigen Code, der in 2014er version einwandfrei läuft in 2015er version kommt es jedoch zu Problemen im command-Aufruf.
Ersetze ich folglich alle Command-Aufrufe durch command-s, geht es wieder


Problematik mit Argumenten ist so gelöst

Code:
(defun commands(lst)
    (cond
      ((>= (cadr (cd:SYS_AcadInfo)) 20.0) ; Acad 2015 version
      (foreach n lst
(command-s n)
)
      )
      ((< (cadr (cd:SYS_AcadInfo)) 20.0) ; bis Acad 2014 version
      (foreach n lst
(command n)
)
      )
      )
    )

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Aug. 2015 11: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 cadplayer 10 Unities + Antwort hilfreich

nimm Code, der in der 2015er einwandfrei läuft und lass den in 2014 laufen. Sollte ohne Probleme funktionieren.

Grüße!
Holger

Zu dem Warum Autodesk dies überhaupt gemacht hat nur soviel: Durch die Umstellung des Commandhandlings ist nun eine asynchrone Befehlsausführung möglich. Das bedeutet, dass ein Befehl angestartet werden kann, und noch bevor dieser fertig ist, kann in der Zeichnung weiter gearbeitet werden.

------------------
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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Aug. 2015 12:03    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

Gut zu wissen Holger!
Aber aus irgendeinen Grund gibt es damit ebenfalls Probleme, die vielleicht irgendwo anders herrühren.
Habs aber im Hinterkopf - Danke!

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 03. Aug. 2015 13: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

Holger, kurze Rückmeldung - hab meine Fehler beseitigt und funktioniert einwandfrei nach deiner Formulierung.

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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