Schnittpunkte zwischen Geraden

Es folgt ein ausführlich auskommentiertes Beispiel :-)

(defun C:LinSP ()

   ;; der Befehl (entsel) besitzt zwei Rückgaben:
   ;; erstens den Objektbezeichner aus der Datenbank und
   ;; zweitens den Punkt, an dem das Objekt gepickt wurde.
   ;; Der Befehl gibt eine Liste aus beiden zurück.
   ;; Daher ist das erste Listenelement zu wählen, wenn man sich
   ;; auf das Objekt selbst beziehen will.

   (setq Linie1 (car (entsel "\n Erste Linie wählen ... ")))
   (redraw Linie1 3)

   (setq Linie2 (car (entsel "\n Zweite Linie wählen ... ")))
   (redraw Linie2 3)

   ;; --------------------------------------------------------------


   ;; der Befehl (entget) gibt eine Liste mit den Angaben aus der
   ;; Zeichnungs-Datenbank  zurück.

   (setq LineEntity1 (entget Linie1))
   (setq LineEntity2 (entget Linie2))

   (setq PA1 (cdr (assoc 10 LineEntity1))
         PE1 (cdr (assoc 11 LineEntity1))

         PA2 (cdr (assoc 10 LineEntity2))
         PE2 (cdr (assoc 11 LineEntity2)) )


   ;; der Befehl (inters) findet in jedem Fall einen Schnittpunkt.
   ;; Wenn das fünfte Element nicht NIL ist, muss der Schnittpunkt
   ;; auf einer der beiden Linien liegen, ansonsten darf er auch
   ;; ausserhalb liegen.
   ;; Für alle nicht gefundenen Schnittpunkte ist die Rückgabe NIL.

   (setq SP (inters PA1 PE1 PA2 PE2 NIL))


   ;; Wenn der Schnittpunkt existiert, dann zeichnet das Programm
   ;; einen Kreis darauf. Dessen Radius entspricht 1/100 der Distanz
   ;; zwischen P1 und P2.
   ;; Der Befehl gibt eine Liste aus beiden Rückgaben zurück.
   ;; Wenn kein Schnittpunkt existiert, dann teilt das Programm es
   ;; dem Nutzer mit...

   ;; Das Regenerieren ist unbedingt notwendig, wenn das Highlighting der
   ;; Linien wieder entfernt werden soll.

   (if SP
      (progn
         (command "_circle" SP (/ (distance PA1 PA2) 100) )
         (command "_regen")
      )
      (progn
         (alert "Leider kein Schnittpunkt vorhanden :-(")
         (command "_regen")
      )
   )
)


  © Stefan Lagotzki 2001