| |
| 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: Schlecht geschrieben oder veraltet? (1029 mal gelesen)
|
STRGALTDEL Mitglied Tischler
Beiträge: 61 Registriert: 15.02.2003
|
erstellt am: 16. Mrz. 2003 22:48 <-- editieren / zitieren --> Unities abgeben:
Hi Programmers Ich bin eigentlich ein Lispmuffel, obwohl ich mich schon auf mapcar`s Seiten schlauer gemacht habe,aber warum laufen meist ältere LISP-Funktionen (runtergeladen oder anderswo gefundene...) nicht ohne Weiteres? Ist der Code veraltet oder sind sie einfach nur schlecht geschrieben? Hier ein Beispiel: ; This program extrudes a polygon profile along a 3d spiral path. ; Juan Jose Suarez , 24/9/91 - version 2 ; ;------------------------------------------------------------------ (defun cextrspir () (princ(strcat"\nZooming to spiral circle....")) (command "ZOOM" "w" (setq w1p(polar bpoint 0.707 (* 2 radious))) (setq w2p(polar bpoint 3.847 (* 2 radious))) ) (princ(strcat"\nDrawing spiral..rotation: ")) (setparam) (setval2) (while (<= alfgiro (* pi 2.0)) (setval1) (setq entn1 vect) ; reserve point f/select (command vect) (setq alfgiro (+ alfgiro alfa)) ) ; (command "C") (command) (repeat nrot (setq rotnr(+ rotnr 1)) (princ rotnr) (princ ", ") (repeat npolyg (setq ang (+ ang ainc)) (setval2) (while (<= alfgiro (* pi 2.0)) (setval3) (setq entn2 vect) ;reserve point f/selection (command vect) (setq alfgiro (+ alfgiro alfa)) ) ; (command "C") (command) (command "RULESURF" entn1 entn2) (setval2) (while (<= alfgiro (* pi 2.0)) (setval3) (setq entn1 vect) (command vect) (setq alfgiro (+ alfgiro alfa)) ) ; (command "C") (command) (setq bpoint (mapcar '+ bpoint (list 0 0 dinc))) ) ) (command) ; until done. ) ;------------------------------------------------------------------ (defun setparam () (setq circle (* pi 2.0)) (setq ainc (/ circle npolyg)) (setq dinc (/ growth npolyg)) (setq ang 0.0) (setq dist 0.0) (setq rad (distance ra bpoint)) (setq alfa (/ (* 2.0 pi ) sides)) (command "POINT" bpoint) (setq incre (/ rr 20)); increment for points (future chg) (setvar "SURFTAB1" sides) (setq rotnr 0) ) ;------------------------------------------------------------------ (defun setval1 () (setq cosang (cos alfgiro )) (setq sinang (sin alfgiro )) (setq dint (- rad (* cosang rr))) (setq delev (* sinang rr)) (setq vect (polar bpoint ang dint )) ;interior point (setq vect (mapcar '+ vect (list 0 0 delev))) ) ;------------------------------------------------------------------ (defun setval2 () (setq tp (polar bpoint ang rad)) (command "POINT" tp ) (setq cosang (cos alfa )) (setq sinang (sin alfa )) (setq dint (- rad (* cosang rr))) (setq delev (* sinang rr)) (setq vect (polar bpoint ang dint )) ;interior point (setq vect (mapcar '+ vect (list 0 0 delev))) (command "3DPOLY" vect) (setq alfgiro alfa) ) ;------------------------------------------------------------------ (defun setval3 () (setq cosang (cos alfgiro )) (setq sinang (sin alfgiro )) (setq dint (- rad (* cosang rr))) (setq delev (* sinang rr)) (setq vect (polar bpoint ang dint )) ;interior point (setq vect (mapcar '+ vect (list 0 0 delev))) ) ;------------------------------------------------------------------ ; ; Spiral generation ; (defun C:EXTRSPIR () (setq bv(getvar "BLIPMODE")) (setq ev(getvar "CMDECHO")) (setvar "CMDECHO" 0) (prompt "\nSpiral extrusion of a polygon in 3D") (initget 1) ; bp must not be null (setq bpoint (getpoint "\nCenter point: ")) (initget 7) ; bp must not be null (setq ra (getpoint "\nRadius of spiral: ")) (setq radious(distance ra bpoint)) (setq nrot (getint "\nNumber of rotations <3>: ")) (cond ((null nrot) (setq nrot 3))) (setq growth (getreal "\nGrowth per rotation <1.0>: ")) (cond ((null growth) (setq growth 1.00))) (setq npolyg (getint "\nPolygons per rotation <30>: ")) (cond ((null npolyg) (setq npolyg 30))) (setq sides (getint "\nNumber of sides <3>: ")) (cond ((null sides) (setq sides 3))) (setq angcentr( / pi sides)) (setq rr 9999.9) (while (> rr (/ growth 2.0)) (setq rj (getpoint "\nRadius of polygon: ")) (initget 7) ; nt must not be zero, neg, or null (setq rr(distance rj ra)) (if (> rr (/ growth 2.0)) (setq j(getstring "Radious too big, will overlap spiral... ...try smaller, eg: half of groth (ENTER to continue)")) ) ) (setvar "BLIPMODE" 0) (cextrspir) (setvar "BLIPMODE" bv) (setvar "CMDECHO" ev) nil ) ------------------------------------------------------------------- Die Sache klingt ganz schön, funktioniert bei mir aber nicht! vielen Dank und schöne Grüße... Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
T. Bürger Mitglied Technischer Angestellter
Beiträge: 201 Registriert: 30.01.2001 AMD Athlon XP2000+ ATI Fire GL 8800 Maxtor 4R060J0(60GB) Windows XP-Pro. SP1 Novell 4.1 1024MB Arbeitsspeicher AutoCAD2004 Expresstools LayerManager-Pro
|
erstellt am: 17. Mrz. 2003 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für STRGALTDEL
Hallo STRGALTDEL, das liegt wohl an den englischen Befehlen innerhalb von COMMAND. Du musst bei den Befehlen die Du auch per Tastatur eingeben kannst einfach einen Unterstrich "_" davorsetzen z.B.: (command "ZOOM" "w"... ->englisch (command "_ZOOM" "_w"... ->international obwohl das mit "ZOOM" ein schlechtes Beispiel ist da dieser Befehl auch so in der deutschen Version funktioniert wirst Du das jetzt wohl hinkriegen. Den Code hab ich allerdings nicht ausprobiert/getestet, musst halt ein bischen ausprobieren. Hoffe ich konnte Dir helfen Grüße T. Bürger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 17. Mrz. 2003 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für STRGALTDEL
Ich hab's mal ganz kurz angetestet: Zuerst mal läuft's nur mit einem englischen AutoCAD, ergo: Die Commands internationalisieren, (command "_zoom") usw. Das nächste Problem ist eher eines des Software-Designs: Da wird nach Radien gefragt, aber das Programm erwartet die Eingabe von Punkten. Das Gummiband usw. hat sich der Programmierer gespart. Fazit: wer den Programmcode nicht kennt, kann die Eingaben gar nicht korrekt vornehmen. Bei mir hat dann das Programm tatsächlich einige Segmente gezeichnet, allerdings falsch. Und dann brach es ab mit einem Fehler, den ich noch nicht analysiert habe. Eine mögliche Fehlerursache ist, dass nicht eine einzige Variable lokal deklariert wird, d.h. nicht mal die Minimalanforderungen an saubere Programmierung sind eingehalten. Das Programm generiert übrigens ein Flächenmodell, d.h. das Ergebnis ist nicht kompatibel zu den ACIS-Solids. Um deine Frage exakt zu beantworten: Hier liegt nicht 'veraltet' vor, sondern 'schlecht geschrieben'. Es ist ja schon von 91(!), aber es lief vor zwölf Jahren auch nicht besser als jetzt. War da eigentlich Acad 9 schon auf dem Markt? (_RULESURF usw. wurde mit 9 eingeführt) Gruss, Axel
------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
STRGALTDEL Mitglied Tischler
Beiträge: 61 Registriert: 15.02.2003
|
erstellt am: 17. Mrz. 2003 21:33 <-- editieren / zitieren --> Unities abgeben:
Hallo und schönen Dank! Das mit den Unterstrichen vor den englischen Befehlen hatte ich auch schon ausprobiert - auch ohne Erfolg. Da muß ich wohl noch ein bischen probieren (oder gleich in die Tonne damit)... Ich fürchte,ich werde das Lispeln doch noch lernen müssen. schöne Grüße... Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 18. Mrz. 2003 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für STRGALTDEL
Hi, es reicht nicht, nur die Befehle mit einem Unterstrich zu "internationalisieren". Genauso wichtig sind die Befehlsoptionen: Aus (command "ZOOM" "w") wird dann (command "_.ZOOM" "_w") Falls Du Dich ein wenig in die Materie einlesen willst, schau mal bei www.cadditions.de vorbei. Dort habe ich bei den Downloads eine deutsch-englische Befehlsreferenz mit allen deutschen und englischen Befehlen (inkl. Optionen!) zusammengestellt. Vielleicht hülft's
------------------ www.cadditions.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
STRGALTDEL Mitglied Tischler
Beiträge: 61 Registriert: 15.02.2003
|
erstellt am: 18. Mrz. 2003 21:38 <-- editieren / zitieren --> Unities abgeben:
|