Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Autollisp Problem.

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:  Autollisp Problem. (440 mal gelesen)
FiRePhoeniX
Mitglied
Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau


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

Beiträge: 127
Registriert: 22.04.2007

AutoCad 2007

erstellt am: 03. Jan. 2008 11: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

Hi,
ich bescheftige mich seit ein paar Tagen mit Autolisp. Komme meiner meinung auch gut vorran. Aber jetzt ist schicht im Schacht  meine kenntnise reichen einfach nicht aus. Ich wollte das so machen das man ein Rohrdurchmesser wählt. Und dann soll das Programm den block mit den richtigen Duchmesser einfügen. Klingt leicht sagen die experten für mich ist das ein bisschen schwer. Ok ich muss dazu dagen das ist mein erstes Programm  . Ok kommen wir zur sache, das Programm was ich geschrieben habe macht eingentlich das was ich will es fügt die Blöcke ein aber am ende steht da immer der satz "Fehler: no function definition: nil". Trotz eingefügten Blockes.  Ich vermutte mal ich hab den IF befehl falsch. Könnte mir einer helfen bitte ich verzweifle mit meinem geringen wissen.
Danke im vorraus
mfg
FirePhoeniX

hier der Code
-----------------------------------------------

(defun C:schacht4 ()
    (setq ein (getpoint "\nBasispunkt Wählen."))
      (setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :"))
        (if (= DN 150)
                (command "einfüge" "szg150.dwg" Ein "1" "1" "0")
                ((if (= DN 200)
                (command "einfüge" "szg200.dwg" Ein "1" "1" "0")
                ((if (= DN 250)
                (command "einfüge" "szg250.dwg" Ein "1" "1" "0")
                ((if (= DN 300)
                (command "einfüge" "szg300.dwg" Ein "1" "1" "0")
                ((if (= DN 350)
                (command "einfüge" "szg350.dwg" Ein "1" "1" "0")
                ((if (= DN 400)
                (command "einfüge" "szg400.dwg" Ein "1" "1" "0")
                ((if (= DN 450)
                (command "einfüge" "szg450.dwg" Ein "1" "1" "0")
                ((if (= DN 500)
                (command "einfüge" "szg500.dwg" Ein "1" "1" "0")
                (prompt "\nschade")
              )
              )
            )
            )
          )
          )
        )
        ) 
      )
      )
    )
    )
  )
  )
)       

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1760
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 03. Jan. 2008 11:24    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 FiRePhoeniX 10 Unities + Antwort hilfreich

Hallo FirePhoenix,

so einen Beitrag würde ich ins LISP-Forum schieben, dort ist er sicherlich besser aufgehoben.

Für Dein Problem: anstatt immer mit if abzufragen würde ich COND verwenden, weil Du nicht nur nach wahr oder falsch abfragst, sondern mehrere Möglichkeiten vorgibst.

Folgender Code ist ungetestet, aber so ungefähr sollte es funktionieren:

Code:

(defun C:schacht4 ( / ein DN)
  (setq ein (getpoint "\nBasispunkt Wählen."))
  (setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :"))
        (cond ((= DN 150)
                (command "einfüge" "szg150.dwg" Ein "1" "1" "0"))
                ((= DN 200)
                (command "einfüge" "szg200.dwg" Ein "1" "1" "0"))
                ((= DN 250)
                (command "einfüge" "szg250.dwg" Ein "1" "1" "0"))
                ((= DN 300)
                (command "einfüge" "szg300.dwg" Ein "1" "1" "0"))
                ((= DN 350)
                (command "einfüge" "szg350.dwg" Ein "1" "1" "0"))
                ((= DN 400)
                (command "einfüge" "szg400.dwg" Ein "1" "1" "0"))
                ((= DN 450)
                (command "einfüge" "szg450.dwg" Ein "1" "1" "0"))
                ((= DN 500)
                (command "einfüge" "szg500.dwg" Ein "1" "1" "0"))
        ('T (alert "schade.")))
               
              )

------------------
viele Grüße

Jörn

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

FiRePhoeniX
Mitglied
Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau


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

Beiträge: 127
Registriert: 22.04.2007

AutoCad 2007

erstellt am: 03. Jan. 2008 11: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

Danke joern bosse für die schnelle antwort. Ich hab das mit dem Befehl cond probiert habs aber nicht hinbekommen hab ne Klammer vergessen  . Sorry das ich das hier rein geschrieben habe wusste nicht wo hin damit.
Danke noch mal.
Hätte aber trotzdem noch ne frage.
Warum hast du am anfang des programms ( / ein DN) geschrieben was bedeudet das? Teilst du die Variable ein durch die variable DN aber warum. Steh gerade voll auf dem Schlauch. Die zweite frage ist Was macht der Befehl alert??
Könntest du mir das erklären. Wie gesagt bin anfänger .

mfg

FiRePhoeniX

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1760
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 03. Jan. 2008 11:57    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 FiRePhoeniX 10 Unities + Antwort hilfreich

Hallo FirePhoenix,

( / ein DN)

das ist reine Gewohnheit, damit werden die Variablen "ein" und "DN" lokal deklariert, d.h. sobald die Funktion durchgelaufen ist sind diese Variablen nicht mehr belegt. Wenn Du das nicht machst könnte es zu Problemen kommen, wenn mehrere Funktionen die gleichen Variablennamen verwenden.
(Der Schrägstrick steht hier nicht für "geteilt", sondern nur als Trennung zwischen globalen  und lokalen Variablen)


(alert "hallo FirePhoenix")

Tippe den Klammerausdruck mal in Deine Befehlszeile von AutoCAD ein, dann wirst Du sehen 

Und wenn Du noch Literatur brauchst, da kann ich Dir das AutoLISP-Kochbuch empfehlen:  http://ww3.cad.de/foren/ubb/Forum54/HTML/017491.shtml#000000

------------------
viele Grüße

Jörn

[Diese Nachricht wurde von joern bosse am 03. Jan. 2008 editiert.]

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

FiRePhoeniX
Mitglied
Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau


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

Beiträge: 127
Registriert: 22.04.2007

AutoCad 2007

erstellt am: 03. Jan. 2008 12:06    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

danke alles verstanden.
Ich wuss dich aber warnen das ist nicht der letzet beitrag von mir über dieses Thema .

mfg

FiRePhoeniX

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

cad4fun
Ehrenmitglied



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

Beiträge: 1846
Registriert: 06.12.2004

privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit
HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
ATI FirePro V (FireGL V) Graphics Adapter
Treiberversion: 15.201.1151.1008

erstellt am: 03. Jan. 2008 13:23    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 FiRePhoeniX 10 Unities + Antwort hilfreich

ein wenig kürzer

(defun C:s4 ( / ein DN BL)
  (setq ein (getpoint "\nBasispunkt Wählen."))
  (setq DN (getstring "\nRohrdurchmesser wählen von 150 - 1000 [?] :"))
  (setq BL  (strcat "szg" DN ".dwg" ))
  (command "einfüge" BL Ein "1" "1" "0")
  ('T (alert "schade."))
)

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

FiRePhoeniX
Mitglied
Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau


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

Beiträge: 127
Registriert: 22.04.2007

AutoCad 2007

erstellt am: 03. Jan. 2008 13:42    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

cool danke für denn kurzen Code.
Hilft mir zwar wenig da ich ihn nicht verstehe aber trotzdem danke  . Ich hätte sofort noch ne frage:
Wie kann ich eine wiederholunh einbauen. Ich will das so haben wenn man nichts von der Liste gewählt hat kommt der alert "schade"(hab ich schon geändert aber zu erklärung)jetzt geht das lisp programm aus. Soll es aber nicht es soll auf die Zeiche:
(setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :"))
zurück gehen um einen anderen wert einzugeben. Das soll so lange gehen bis der richtige wert eingeben wurde.
Hoffe das ist verständlich.

mfg

FiRePhoeniX

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

cad4fun
Ehrenmitglied



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

Beiträge: 1846
Registriert: 06.12.2004

privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit
HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
ATI FirePro V (FireGL V) Graphics Adapter
Treiberversion: 15.201.1151.1008

erstellt am: 03. Jan. 2008 13: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 FiRePhoeniX 10 Unities + Antwort hilfreich

Um Fehleingaben zu verhindern schau Dir "getkword" an.
Und zum Verständnis des Kurzcodes musst DIr nur "strcat" anschauen

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1760
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 03. Jan. 2008 14: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 FiRePhoeniX 10 Unities + Antwort hilfreich

Hallo,
schau Dir noch mal folgende Code an, er ist wieder ungetestet, aber man könnte so eine While-Schleife integrieren, so das der Benutzer den DN-Wert nochmal eingeben kann wenn er falsch ist. Ich hoffe, die Kommentare helfen Dir weiter.
Code:

(defun C:s4 ( / ein DN)
  ;;;der Variablen einen Wert ungleich nil zuweisen, damit die erste
  ;;;While-Schleife durchlaufen werden kann
  (setq DN 'T)
  ;;;wenn ein Basispunkt gewählt wird
  (if(setq ein (getpoint "\nBasispunkt Wählen."))
    ;;;dann eine While-Schleife, solange DN einen Wert hat
    (while DN
      ;;;Wenn DN und die zugehörige DWG-Datei vorhanden
      (if(and(setq DN (getstring "\nRohrdurchmesser wählen von 150 - 1000 [?] :"))
    (findfile (strcat "szg" DN ".dwg" )))
;;;dann füge den Block ein und setzt DN auf nil,
;;;damit while beendet wird
(progn
  (command "einfüge" (strcat "szg" DN ".dwg" ) ein "1" "1" "0")
  (setq DN nil))
;;;wenn nicht, dann prüfen, ob Eingabe gemacht wurde oder nicht
;;;wenn DN (dann war der Wert falsch, weil die zugehörige
;;;DWG-Datei nicht gefunden worden ist)
(if DN (alert "falscher Rohdurchmesser"))));;;end while
    (alert "kein Basispunkt gewählt.")))

------------------
viele Grüße

Jörn

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

FiRePhoeniX
Mitglied
Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau


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

Beiträge: 127
Registriert: 22.04.2007

AutoCad 2007

erstellt am: 03. Jan. 2008 14: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

danke joern bosse das du dir so viel mühe gemacht hast.
Der code ich cool. Aber mit dem befehl getkword geht das einfacher meiner meinung und hat den gleichen sinn. ( das gute an den Befehel ich kenn ihn mir ist der nur nicht eingefallen weil ich ihn nur ein mal kurz angetestet habe)
aber danke für alle ich seit die bessten.

mfg

FiRePhoeniX

[Diese Nachricht wurde von FiRePhoeniX am 03. Jan. 2008 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)2024 CAD.de | Impressum | Datenschutz