Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Probleme mit If-Funktion

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:  Probleme mit If-Funktion (1733 mal gelesen)
caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

erstellt am: 29. Jan. 2004 15:01    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,

ich bin neu als AutoLISP'ler und noch in der Übungsphase. Ich hab mir ein Programm geschrieben mit dem ich einen Pfeil für eine Ansicht erzeuge. Nun möchte ich am Ende eine Abfrage einbauen die es ermöglicht einen zweiten und dritten usw. Pfeil zu zeichnen. Ich wollte das mit If regeln aber kriegs ums ... nicht hin.

Kann mir jemand 'nen Tipp geben?

Hier der Code:

; Dieses Programm erzeugt einen Ansichtspfeil mit dem Befehl Polylinie; mit Winkelfunktion berechnet
;
; Programmstart mit: APFEIL2
;
; Verwendete Variablen: osn Einstellungen für Ofang sichern
orth Einstellungen für Ortho sichern
; P1 Startpunkt Ansichtspfeil
; P2 Endpunkt Ansichtspfeil (Pfeilspitze)
; br1_2 1/2 Pfeilbreite
; sk Skalierung für Ansichtspfeil
; wi Winkel Ansichtspfeil
; gra Argument für Winkelumrechnungsfumktion
;
  ;============== Winkelumrechnung Grad-Bogenmaß =====================

(Defun grabo (gra)
(* PI (/ gra 180.0))
)

;========================= Hauptfunktion =============================
;
(Defun C:APFEIL2(/ P1 P2 P3 P4 P5 P6 sk wi br1_2b osn orth)
(setq osn (getvar "osmode")) ; Systemeinstellungen sichern (Ofang);
(setq orth (getvar "orthomode")) ; Systemeinstellungen sichern (Ortho);
(setvar "osmode" 0) ; Alle Objektfangmodi ausschalten
(setvar "osmode" 9) ; Ofang Endpunkt und Punkt für Start- u. Endpunktdefinition einschalten

 
  ===================================================================
 


 
  ;===================== Eingabeabfragen =============================
;
(setq P1 (getpoint "\nStartpunkt für Ansichtspfeil (Ende)? "))
(setq P2 (getpoint "\nEndpunkt für Ansichtspfeil (Pfeilspitze)? "))
(initget (+ 1 2 4))
(setq sk (getreal "\nPfeil skalieren? Faktor: "))
;
  ;======== Auswertung der Eingaben / Berechnung der Punkte ==========
;
(setq wi (angle P1 P2)) ; Winkel ermitteln
(setvar "osmode" 0) ; Ofang ausschalten (wegen evtl. Probleme beim Zeichnen)
(setq br1_2 (* (* (sin (grabo 15)) 30) sk)) ; 1/2 Pfeilbreite berechnen und zuweisen
(setq P3 (polar P1 wi (* 50 sk))) ; Eckpunkte des Pfeils berechnen
(setq P4 (polar P3 (+ wi (* 1.5 PI)) br1_2))
(setq P2 (polar P4 (+ wi (grabo 15)) (* 30 sk)))
(setq P5 (polar P2 (+ wi (grabo 165)) (* 30 sk)))
(setq P6 (polar P5 (+ wi (grabo 270)) br1_2))
;
  ;================= Zeichnen des Ansichtspfeils == ==================
;
(command "_pline" P1 P3 P4 P2 P5 P6 "")
   
 
;
;==================== Rücksetzen Systemeinstellungen =================
;
(setvar "osmode" osn) ; Wiederherstellen der ursprünglichen Ofänge
(setvar "orthomode" orth) ; Wiederherstellen des ursprünglichen Ortho
;
;=====================================================================

;
;
(Princ) ; Unterdrücken des Rückgabewertes "NIL" der Funktion
) ; Ende der Funktion

Vielen Dank
caxman

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

.

erstellt am: 29. Jan. 2004 15:07    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 caxman 10 Unities + Antwort hilfreich

Nutze die while -function für solche Programm-Schleifen!
z.B.:

  (setq Modus "J")
  (while (= Modus "J")
...
Programm
... 
    (initget "J N")
    (setq MODUS (getkword (strcat "\n Nochmal <J>a <N>ein: <N> ")))
    (if (not MODUS) (setq MODUS "N"))
  )

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

[Diese Nachricht wurde von CADmium am 29. Jan. 2004 editiert.]

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 29. Jan. 2004 15:10    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 caxman 10 Unities + Antwort hilfreich

Hallo caxman,

geh mal auf meine Seite. Dort unter Hilfe -> Training gibt es derzeit 4 Teile zur Einführung in AutoLISP.
Wenn du das Zeichnen unbestimmt vieler Ansichtspfeile erreichen möchtest, dann ist eine (while ..) Schleife die richtige Funktion.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 29. Jan. 2004 18: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 caxman 10 Unities + Antwort hilfreich

Hi Caxman,
willkommen im Club ;-).
Ich habe Deine Funktion mal ein wenig aufgepeppt:
Code:

;|
Dieses Programm erzeugt einen Ansichtspfeil mit dem Befehl Polylinie; mit Winkelfunktion berechnet

Programmstart mit: APFEIL2

Verwendete Variablen: osn Einstellungen für Ofang sichern
ORTH EINSTELLUNGEN FÜR ORTHO SICHERN
P1 Startpunkt Ansichtspfeil
P2 Endpunkt Ansichtspfeil (Pfeilspitze)
br1_2 1/2 Pfeilbreite
sk Skalierung für Ansichtspfeil
wi Winkel Ansichtspfeil
gra Argument für Winkelumrechnungsfumktion
|;

;;;============== Winkelumrechnung Grad-Bogenmaß =====================

(defun GRABO (GRA)
  (* pi (/ GRA 180.0))
) ;_ end of Defun

;;;========================= Hauptfunktion =============================

(defun C:APFEIL2 (/ BR1_2 ORTH OSN P1 P2 P3 P4 P5 P6 SK WI)
  (setq OSN  (getvar "osmode")          ; Systemeinstellungen sichern (Ofang);
        ORTH (getvar "orthomode")
  )                                    ; Systemeinstellungen sichern (Ortho);
  (setvar "osmode" 9)                  ; Ofang Endpunkt und Punkt für Start- u. Endpunktdefinition einschalten


;;;===================================================================
;;;===================== Eingabeabfragen =============================
  (setq P1 t) ;_ Wert auf wahr, damit die Schleife das erste mal duchlaufen wird
  (while P1
    (setq P1 (getpoint "\nStartpunkt (PfeilEnde) für Ansichtspfeil (Space/Enter/R.Klick für ENDE): "))
    (if P1
      (progn
        (setq
          P2 (getpoint P1
                      "\nEndpunkt (Pfeilspitze)für Ansichtspfeil (Space/Enter/R.Klick für ENDE): ? "
            ) ;_ end of getpoint
        ) ;_ end of setq
        (if P2
          (progn
            (initget (+ 2 4))
            (setq SK
                  (getreal
                    "\nPfeil skalieren? Faktor (Space/Enter/R.Klick für KEINE Skalierung): "
                  ) ;_ end of getreal
            ) ;_ end of setq
            (if (not SK)
              (setq SK 1)
            ) ;_ end of if

;;;======== Auswertung der Eingaben / Berechnung der Punkte ==========

            (setvar "osmode" 0) ;_ Ofang ausschalten (wegen evtl. Probleme beim Zeichnen)
            (setq WI    (angle P1 P2) ;_ Winkel ermitteln                 
                  BR1_2 (* (* (sin (GRABO 15)) 30) SK) ;_ 1/2 Pfeilbreite berechnen und zuweisen
                  P3    (polar P1 WI (* 50 SK)) ;_ Eckpunkte des Pfeils berechnen
                  P4    (polar P3 (+ WI (* 1.5 pi)) BR1_2)
                  P2    (polar P4 (+ WI (GRABO 15)) (* 30 SK))
                  P5    (polar P2 (+ WI (GRABO 165)) (* 30 SK))
                  P6    (polar P5 (+ WI (GRABO 270)) BR1_2)
            ) ;_ end of setq

;;;================= Zeichnen des Ansichtspfeils == ==================

            (command "_pline" P1 P3 P4 P2 P5 P6 "")
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of while

;;;==================== Rücksetzen Systemeinstellungen =================

  (setvar "osmode" OSN)                ; Wiederherstellen der ursprünglichen Ofänge
  (setvar "orthomode" ORTH)            ; Wiederherstellen des ursprünglichen Ortho

;;;=====================================================================

  (princ)                              ; Unterdrücken des Rückgabewertes "NIL" der Funktion
)                                      ; Ende der Funktion


(princ "\Pfeil zeichen, Funktion mit \"APFEIL2\" starten.")
(princ) ;_ silent load



.

------------------
Ciao,
Marc

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