| |
| 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: Befehlabruch bei Eingabe von 0 (1275 mal gelesen)
|
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 12. Okt. 2005 17:42 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Lispgemeinde, ich habe 2 Anliegen und zwar wuerde mich intressieren wie ich bei einer einer Eingabe von null mein Programm dahingehen trimme, dass ich nichts gezeichnet bekomme. Habe ein Programm geschrieben, dass mir Saulenlaengen in einem Giebel bereichnet, nun wenn ich die fortlaufenden Grundmasse eingebe moechte ich dass es mir bei der Eingabe von 0 diese nicht ausfuehrt. bis jetzt zeichnet es mir immer einen Saule ueber die Eingabe von zuvor. In der 2. Angelegenheit kommt wieder mein leidigs Problem mit der Texteingabe zur Sprache und zwar moechte ich einen einen Schriftkopf machen, der ueber meiner Zeichnung erscheint. Es soll eine Abfrage kommen, in der ich den Giebelnamen eingeben kann, z.B. A Und dann haette ich gern dass mir mein Programm ueber die Zeichnung "Giebel A" schreibt. Hoffe mir kann da jemand auf die Spruenge helfen, schaffe es leider selbst nicht. viele Gruesse Karli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SebZ Mitglied Bauingenieur Tiefbau
Beiträge: 189 Registriert: 17.10.2004 AutoCAD 2010 Civil 3D DACH WinXP Professional 2002 SP3 MS Office 2007 Intel Core2Duo 2.80 GHz, 3.00 GB RAM
|
erstellt am: 12. Okt. 2005 18:06 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
1: Wenn deine Eingabe in einer Variablen gespeichert wird, dann kannst du das ganz einfach steuern, z.b. (if (/= eingabe 0) (progn .... ; alle weiteren Schritte ) ; end progn .... ; was passiert, wenn die Eingabe=0 ist? (optional) ) ; end if 2: Schau mal in der Lispreferenz unter GETSTRING nach. ------------------ Gruß SebZ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 12. Okt. 2005 19:36 <-- editieren / zitieren --> Unities abgeben:
Hallo SebZ, ich moechte dass bei der Eingabe von 0 fuer das Grundmass das Programm alle weiteren Schritte, wie das Zeichnen oder Bemassung der Saeule nicht ausfuehrt. Leider weiss ich nicht was ich jetzt eingebe an der Stelle " .... ; was passiert, wenn die Eingabe=0 ist? (optional)" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanJP Mitglied CAD-Admin
Beiträge: 837 Registriert: 09.11.2000 AutoCAD ,MAP 3D, Civil 3D, Recap Pro, InfraWorks, VehicleTracking alles bis 2024, BBSoft, Win 10 Enterprise, Canon PlotClient Canon TX2000, TX3000
|
erstellt am: 12. Okt. 2005 19:42 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
Hallo Karli, sollen wir hier raten, wie Dein Programm aussieht? Wann gibst Du 0 ein, was sind fortlaufende Eingaben, öffnet Dein Programm eine Dialogbox? Sei mir nicht böse, aber bei deiner Fragestellung kann ich mir beim besten Willen nicht vorstellen, dass Du das Programm geschrieben hast. Auch zu Deinem zweiten Problem wird mir die Aufgabenstellung nicht klar.
------------------ gruß Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 12. Okt. 2005 20:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Stephan, habe jetzt versucht die Datei anzuhaengen, aber leider kommt da die Meldung "ungueltige Anlage". Weiss nicht woran das liegt. Aber wenn du denkst dass du mir weiterhelfen koenntest, dann kannn ich dir auch ne mail schicken Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 12. Okt. 2005 22:20 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
Hi Karli Einen Programmabbruch kann man mit (exit) erzwingen. z.B. ... (setq var (getreal "\nWert einegeben:")) (if (= var 0) (exit)) ... oder man läßt von gar keine "0" als Eingabe zu mit (initget). ... (initget 2) ; bei nächster Eingabe keine '0' zulassen -> siehe Lisp Hilfe (setq var (getreal "\nWert eingebn:")) ... Grüße Andi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 12. Okt. 2005 23:38 <-- editieren / zitieren --> Unities abgeben:
Ich denke dass es hilfreich waere, wenn ich mein Programm hier anhaengen koennte, leider hackt's da bei mir... Vieleicht hatte einer von euch auch schon dieses Problem mit der "ungueltige Anlage". Waere gut zu wissen, was ich falsch mache beim hochladen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4189 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 13. Okt. 2005 06:01 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
|
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 14. Okt. 2005 18:22 <-- editieren / zitieren --> Unities abgeben:
So jetzt habe ich es auch geschafft die Datei hochzuladen, ich hoffe dass jetzt etwas Licht ins Dunkle kommt. Gleich noch ein paar sinnvolle Angaben, dass ihr euch etwas darunter vorstellen koennt: Gable Width: 500 Pitch Rise: 12 Step: 3 Pitch+: 2 alle Gainmasse: 12 alle Centermasse: 50 Ist etwas schwer sich etwas drunter vorzustellen, da alle Eingaben in Inch erfolgen und sich sicher die Wenigsten etwas unter den Begriffen vorstellen koennen, aber wenn es dann gezeichnet ist, wird klar worauf ich hinaus will (das hoffe ich zumindest:-). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4189 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 14. Okt. 2005 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
|
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 14. Okt. 2005 21:26 <-- editieren / zitieren --> Unities abgeben: Nur für Karli 99
Hi Karli ! Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargh !!!!!!!!!!! Sorry für den lauten Schrei, aber Dein Lispprogramm ist ziemlich vermurkst ! - läuft es auf meinem Acad (Deutsch) nicht , da nicht alle Befehle und Optionen mit "_" beginnen. Außerdem ist bei den Circle-Befehlen irgendwie der Wurm drin (im Textfenster "unbekannter Befehl _CIRCLE") - keine lokalen Variablen definiert (dafür jede Menge globale Variablen) Wenn Du schon globale Variablen definiertst (z.B. für Vorgabewerte), dann kennzeichne diese z.B. mit Sternchen - *globaleVariable* - Eingabe, Berechnung und Zeichnen doppelt programmiert. Das ist nicht nötig, wenn Du den Vorgabewerte den Variablen vor der Eingabe zuweist. Dann brauchst Du nur den Programmteil in der while-Schleife. - Du kannst Dir einiges an Programmierarbeit sparen, wenn Du dir eigene Funktionen defierst, für Sachen die öfters vorkommen. z.B. Eingaben mit Vorgabewerten. Diese Funktionen kannst Du dann auch in eine seperate Datei (z.B. Library.lsp) auslagern. Am Programmanfang einfach vor dem ersten Defun ein (load "Libraray") setzen, dann stehen Dir die Funktionen zur Verfügung. - Die Rechnerei mit den Bemassungen könnte man auch mit einer Funktion sparen. (siehe LibraryFunktion 'dim-ver') Schau Dir mal Mapcar's Seiten an. Da findest Du einiges zur LISP-Programmierung. http://www.tutorial.autolisp.info/ Hier mal ein Beispielcode Code: (defun c:gable (/ run p1) (setq run t) (while run ;; Vorgabewerte setzen (wenn noch 'nil) (mapcar '(lambda (var val) (if (not (eval var)) (set var val) ) ) ;; Variablen (global) ' (*s1* *an* *st* . . . etc) ;; zugehörige Vorgabewerte ' (500.0 12.0 0 . . . etc) ) ;; Benutzer Eingaben (setq p1 (getpoint "\nPosition: ") *s1* (getdist>0 "Gable Width (inches)" *s1*) *an* (getdist>0 "Pitch Rise" *an*) *st* (getdist= "Step" *st*) ..etc ) ...weiteres programm... (setq run (getkword_flag "Go on" t)) ) ;while ) Library Funktionen: ;;;-------------------------------- ;;; Zeichnet Bemaßung mit Abstand von den Endpukten ;;; Argumente: pt1 - 1.Punkt für Hilfslinie ;;; pt2 - 2.Punkt für Hilfslinie ;;; dist1 - Abstand der Hilflinien von pt1/pt2 (positiv=rechts negativ = links) ;;; dist2 - Abstand der Bemaßungslinie von pt1 (positiv=rechts negativ = links) ;;; text - Textüberschreibung OHNE "<>" ;;; Beispiel: (dim-ver <Punkt1> <Punkt2> 1.0 11.0 " Testbemassung") ;;;-------------------------------- (defun dim-ver (pt1 pt2 dist1 dist2 text /) (command "_dim" "_ver" (polar pt1 0.0 dist1) (polar pt2 0.0 dist1) "_T" (strcat "<>" text) (polar pt1 0.0 dist2) "exit" ) ) ;;;-------------------------------- ;;; GETKWORD_FLAG - Ja/Nein Abfrage ;;; Anfragetext,Vorgabe T/nil ;;; gibt T/nil zurück ;;;-------------------------------- (defun getkword_flag (anfrage vorgabe / word) (initget "Yes No") (setq word (getkword (strcat "\n" anfrage " (Yes / No) <" (if vorgabe "Yes" "No" ) ">: " ) ) ) (cond ((= word "Yes") t) ((= word "No") nil) (t vorgabe) ) ) ;;;-------------------------------- ;;; GETDIST= - gedist mit Vorgabewert ;;;-------------------------------- (defun getdist= (anfrage vorgabe) (initget 0) (cond ((getdist (strcat "\n" anfrage " <" (rtos vorgabe 2 (getvar "LUPREC")) ">: "))) (t (float vorgabe)) ) ) ;;;-------------------------------- ;;; GETDIST>0 - gedist mit Vorgabewert (größer 0) ;;;-------------------------------- (defun getdist>0 (anfrage vorgabe) (initget (+ 2 4)) (cond ((getdist (strcat "\n" anfrage " <" (rtos vorgabe 2 (getvar "LUPREC")) ">: "))) (t (float vorgabe)) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 14. Okt. 2005 22:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Andi, dass mein Programm nicht sauber ist, weiss ich selbst. Ich habe das programmieren mit Lisp auch nie richtig gelernt und versuche es halt mir einigermassen hinzubasteln... Bin aber schon stolz dass ich soweit gekommen bin und es hier auf meinem Firmenrechner laeuft. Ich weiss nicht wieso es in der deutschen Version nicht geht. Werde mal schauen ob ich am Wochenende Zeit und Lust habe mich da noch bisschen in deine Angaben einzuarbeiten. Schon mal danke fuer die Hilfe... Und Sorry dass dir meinetwegen die Haare zu Berge stehen (-; es ist sicher fuer nen Profi wie dich lustig was so manch einer zusammenstuempert... aber wie gesagt bei mir lauft es erstmal Allen Beteiligten noch ein schoenes Wochenende Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Karli 99 Mitglied Zimmerer
Beiträge: 17 Registriert: 18.08.2005
|
erstellt am: 14. Okt. 2005 23:12 <-- editieren / zitieren --> Unities abgeben:
|