Fandom

Mini-Wikia

(rk-bogencentrum-ermitteln)

1.771Seiten in
diesem Wiki
Seite hinzufügen
Diskussion0 Share

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.

Diese Funktion gehört zu Raumkrümmung (Projekt).


Hier soll zu einem Bogen aus Startpunkt SPt, Zwischenpunkt ZPt und Endpunkt EPt der Centrumspunkt CPt ermittelt werden.

Dieser beschreibt zusammen mit SPt und EPt den selben Bogen wird aber später so besser verarbeitet werden können.


Um dies zu bewerkstelligen habe ich mich hingesetzt und Skizzen zu Papier gebracht mit Kreisbögen, Sehnen und rechtwinkligen Dreiecken. Ich habe mir vorzustellen versucht welche Winkelfunktionen ich benutzen könnte und wie ich um Himmels Willen an den Centrumspunkt gelangen kann!


Doch da ich von natur aus faul bin habe ich mich an etwas anderes erinnert:

Man muss nicht immer alles rechnerisch erledigen. Oft ist es einfacher die vorhandenen ACAD-Befehle zu nutzen!



  1. Also wir zeichen einen Bogen. Dessen Standardeingabe erfolgt ja über 3 Punkte.
  2. Dann ermitteln wir das Centrum des zuletzt gezeichneten Objektes. (Das ist natürlich der Bogen) und weisen es CPt zu.
  3. Der Bogen wird gelöscht


ACAD-Befehle können durch Command auch in Lisp genutzt werden. So können wir Punkt 1. erledigen: (command "bogen" SPt ZPt EPt)


Punkt 2. ist etwas schwerer zu erklären. Das sollte an anderer Stelle erfolgen. Aber nur kurz zum auseinanderhalte:

(cdr (assoc 10 (entget (entlast))))
entlast steht für das zuletzt gezeichnete Element.
entget holt eine verschachtelte Liste mit Objekteigenschaften.
assoc 10 sucht die Unterliste mit dem Bezeichner 10 (hier bei einem Bogen das Centrum)
cdr reduziert diese Unterliste auf den Inhalt ohne erstes Element. Nötig, da das erste Element 10 lautet und nicht benötigt wird. Der Rest sind Punktkoordinaten.

Die Zuweisung dieser Koordinaten erfolgt durch Setq


Punkt 3. wird wieder durch Command erledigt: (command "löschen" (entlast) "")


Alles noch schön über Defun in eine Funktion packen, als letzten Befehl einfach die Variable anführen  -damit diese ausgegeben wird- und wir erhalten:

(defun rk-bogencentrum-ermitteln (SPt ZPt EPt)
   (command "bogen" SPt ZPt EPt)
   (setq CPt 
       (cdr 
          (assoc 10 
            (entget (entlast))
           )
        )
    )
    (command "löschen" (entlast) "")

    CPt
)

Hier kann man schön sehen, dass eine gewisse Strukturierung das Programm erheblich übersichtlicher macht! Ich hoffe das kommt auf jedem Browser entsprechend rüber!


Zum testen folgende Zeile eingeben:

(setq Pt (rk-bogencentrum-ermitteln (getpoint "SPt: ") (getpoint "ZPt: ") (getpoint "EPt: ")))

Nun haben wir eine Variable Pt. Darin ist ein Punkt in Form einer Liste definiert. Diese können wir jetzt immer wieder aufrufen indem wir ein Ausrufezeichen voransetzten.

Wenn wir nun

!Pt

schreiben, spuckt ACAD die Koordinaten-Liste aus.

Noch besser ist, wenn wir in einem Normal Befehl (Kreis, Linie etc...) nach einem Punkt gefragt werden, können wir einfach !Pt schreiben und enter drücken.

Auch bei Fandom

Zufälliges Wiki