Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Befehlsablauf in Lisp

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
Autor Thema:   Befehlsablauf in Lisp (1240 mal gelesen)
CeZet
Mitglied



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

Beiträge: 95
Registriert: 28.08.2003

erstellt am: 06. Aug. 2004 15:53    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

Hi zusammen

Ich habe am morgen bereit im AutoCAD-Forum einen Beitrag verfasst zum Thema Lisp oder Script für meine Wünsche. Anfangs versuchte ich es in Lisp, stieg dann aber mittags um wieder auf Script und muss nun damit auch wieder aufgeben, da es zuwenig kann für meine Bedürfnisse. Besser gesagt, ich müsste die Schnellauswahl im Script benützen können, geht aber nicht so wie ich gelesen habe.

Das heisst, umsteigen auf Lisp. ich hoffe ihr helft mir bei meinen Startschwierigkeiten:

Im grossen und ganzen geht es um einen Planaufbereitungsautomatismus. Burst-Befehl, Ursprung, Textstilstandard setzen, Layer verändern und einzelne Objekte verändern.

1.)
Wie starte ich den Burst-Befehl in einem Lisp genau? Lisp in Lisp wäre das ja, und das ohne eigentliche Abfrage des Anwenders. Folgendes geht nicht leider:

(defun c:Test ( )
(command "_burst" "ALLE" "")
)

2.) Ist es möglich die ganzen Abläufe auf Modell und Layout gleichzeitig anzuwenden?

3.)Wie bringe ich die Schnellauswahl in LISP hin? Ich möchte z.B. einen Objekttyp (z.B. Schraffur) auswählen und diesen löschen oder auf einen anderen Layer werfen.

Wenn mir geholfen werden kann ist mein Weekend gerettet ;-)

Grüsse
CeZet

[Diese Nachricht wurde von CeZet am 06. Aug. 2004 editiert.]

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1911
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 06. Aug. 2004 21:05    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 CeZet 10 Unities + Antwort hilfreich

zu 1 Starten tust du es so : (burst) falls nicht geladen, - erst laden (load "burst")
aber dann wars das auch schon, da du keine Parameter uebergeben werden kannst.
bleibt dir nur noch uebrig die burst lisp zu aendern.

zu 2 - hm weiss nicht genau

zu 3 z.B. so (setq as (ssget "X" ((0 . "HATCH"))))
(if as (repeat (sslength as)(explode(ssname as 0))(setq as(ssdel(ssname as 0)))))

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Urlaub bis 22.08.04

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: 13435
Registriert: 30.11.2003

.

erstellt am: 06. Aug. 2004 22:09    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 CeZet 10 Unities + Antwort hilfreich

zu 1: der befehl burst ist eigentlich so definiert
(defun c:burst (...)
  ...
  (defun burst(...)
  )
  (burst)
)
der korrekte Aufruf aus Lisp müßte demnach (c:burst) sein, da aber in c:burst nichts weiter geschieht als burst zu definieren und dann aufzurufen, funzt auch der vom Wiesel genannte Aufruf, auch mit der Einschränkung hinsichtlich der Parameterübergabe (der Auswahlsatz wird erst in der Routine erzeugt)  
2. nicht so wie du willst 
3.da hat Wiesel ein ' vergessen ->
  (setq as (ssget "X" '((0 . "HATCH"))))
  und explode ist nicht löschen, aber was solls

das nur der Vollständigkeit halber.
@Wiesel .. Geh mal besser tauchen  und lispel erst in 2 Wochen wieder.


------------------
  - Thomas -

[Diese Nachricht wurde von CADmium am 08. Aug. 2004 editiert.]

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 09. Aug. 2004 00:41    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 CeZet 10 Unities + Antwort hilfreich

Schönes Beispiel für das, was ich immer wieder (und ob's jemand hören will oder nicht) hier erzähle. So sollte ein Interface aussehen:

(defun c:machwas()
  (machwas(objekte-wählen))
  (princ)
)

(defun machwas(objekte / )
  (...)
)

Hätte sich Adesk an diese einfachen Grundregeln gehalten, wäre das jetzt kein Problem. Lokale Funktionen wie in burst.lsp sind ein nettes Feature - aber da hat man etwas übertrieben: Alles lokal zu (defun c:burst()...) ist zuviel des Guten, so bleibt nur noch ein Befehl ohne Parameter übrig.

Cadwiesel hat da durchaus Recht: burst.lsp ändern! Und zwar so, dass sie dem Schema oben entspricht. Also nur die Objektauswahl in (defun c:burst()...), alles Andere in (defun burst()...). Das sollte kein Problem sein, alles funktioniert nach wie vor, und man kann's auch von woanders benutzen.

Das hier steht in burst.lsp oben drin:
If you copy this computer program without permission of Autodesk, you are violating the law.

Tja, musste alleine rausfinden;-)

Gruß, Axel Strube-Zettler

------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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: 13435
Registriert: 30.11.2003

.

erstellt am: 09. Aug. 2004 08:19    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 CeZet 10 Unities + Antwort hilfreich

@Axel : Volle Zustimmung, bloß bei mir sieht's immer so aus
(defun machwas(objekte / )
  (...)
)
(defun c:machwas()
  (machwas(objekte-wählen))
  (princ)
)

Du siehst, dein Predigen hat zumindest bei mir Anklang gefunden!

Tja, und zu burst ... wo fängt das Plagiat an ? -> aber dein Tipp zum "alleine Rausfinden" ist wohl das sicherste

------------------
- Thomas -

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 09. Aug. 2004 19:20    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 CeZet 10 Unities + Antwort hilfreich

Ich wollte eigentlich noch eine 100%ig Plagiatfreie Lösung liefern. Mein Ansatz: Genau das, was man immer macht, wenn solche 'Inkompatibilitäten' vorliegen: Man lädt die Datei 'burst.lsp', biegt aber temporär den load-Vorgang ein bisschen um, so dass das Ganze dann passt. Auf diese Weise kann man mal eine SCHEME-Funktion im LISP-Interpreter fahren oder umgekehrt.

Naheliegend der Gedanke, die wenigen notwendigen Änderungen am burst-sourcecode 'on the fly' durchzuführen.

Etwa so:

Code:

(defun m-burst( / o_defun o_code r)
  (setq o_defun defun
        defun defun-q
        r(load"burst")
        o_code c:burst
        defun o_defun
        r(load"burst")
  )
  ... Code manipulieren ...
)

Wären noch ein paar Zeilen gewesen, und man hätte ein m-burst gehabt, das genau das macht, was gebraucht wird. Leider scheitert es mal wieder an den Fehlern im VLISP-Interpreter, die ich hier schon so oft beklagt habe. Teile des Lisp-Codes werden sonstwo evaluiert, aber nicht im Interpreter. Obwohl man defun den Wert von defun-q verpassen kann (setq defun defun-q) => #<SUBR @0af12974 DEFUN-Q>, wird weiterhin defun-ohne-q ausgeführt.

Gegen solche groben Fehler im Interpreter ist man nun mal völlig machtlos. Schade - und eines Prä-Alpha-Releases würdig.

Gruß, Axel Strube-Zettler

 

------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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)2020 CAD.de | Impressum | Datenschutz