Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Schlecht geschrieben oder veraltet?

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:  Schlecht geschrieben oder veraltet? (948 mal gelesen)
STRGALTDEL
Mitglied
Tischler


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

Beiträge: 61
Registriert: 15.02.2003

erstellt am: 16. Mrz. 2003 22:48    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 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


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

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 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 STRGALTDEL 10 Unities + Antwort hilfreich

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



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: 17. Mrz. 2003 10:50    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 STRGALTDEL 10 Unities + Antwort hilfreich

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


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

Beiträge: 61
Registriert: 15.02.2003

erstellt am: 17. Mrz. 2003 21:33    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

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.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 18. Mrz. 2003 13:13    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 STRGALTDEL 10 Unities + Antwort hilfreich

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


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

Beiträge: 61
Registriert: 15.02.2003

erstellt am: 18. Mrz. 2003 21:38    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 CADchup

jo, kann ich mal machen.

@Alle:

schönen Dank...
Frank

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