;------------------------------------------------------------------------------------------------------------------------------------- ; ; Schnittstelle zu anderen Modulen: ; ; INPUT ; ===== ; ; Parameter : ; ; Typ Variablename Variablebeschreibung [Wertebereich] ; list lboxref Referenzbox ; list lboxvgl Vergleichsbox ; ; ; OUTPUT ; ====== ; ; Parameter : ; ; Typ Variablenname Variablenbeschreibung [Wertebereich] ; int ilage Code für Lagemöglichkeiten der beiden Flächen ; 10 -> Vergleichsfläche links von der Referenzfläche ; 20 -> Vergleichsfläche über der Referenzfläche ; 30 -> Vergleichsfläche rechts von der Referenzfläche ; 40 -> Vergleichsfläche unter der Referenzfläche ; 50 -> Vergleichsfläche liegt vollständig in der Referenzfläche ; 60 -> Vergleichsfläche überdeckt vollständig die Referenzfläche ; 70 -> Vergleichsfläche schneidet Referenzfläche ; evtl. ermittelte 2. Stelle: ; 1 -> vollständig links von der Referenzfläche ; 2 -> vollständig über der Referenzfläche ; 3 -> vollständig rechts von der Referenzfläche ; 4 -> vollständig unter der Referenzfläche ; ;------------------------------------------------------------------------------------------------------------------------------------- ; ( defun lage_vergleichen ( lboxref lboxvgl / ilage lpktluref lpktluvgl lpktroref lpktrovgl rxluref rxluvgl rxroref rxrovgl ryluref ryluvgl ryroref ryrovgl ) ; Die Werte für die Referenzbox ermitteln (setq lpktluref (nth 0 lboxref)) (setq rxluref (nth 0 lpktluref)) (setq ryluref (nth 1 lpktluref)) (setq lpktroref (nth 1 lboxref)) (setq rxroref (nth 0 lpktroref)) (setq ryroref (nth 1 lpktroref)) ; Die Werte für die Vergleichsbox ermitteln (setq lpktluvgl (nth 0 lboxvgl)) (setq rxluvgl (nth 0 lpktluvgl)) (setq ryluvgl (nth 1 lpktluvgl)) (setq lpktrovgl (nth 1 lboxvgl)) (setq rxrovgl (nth 0 lpktrovgl)) (setq ryrovgl (nth 1 lpktrovgl)) ; Den Code der Lage ermitteln (setq ilage 0) (cond ; VGL liegt innerhalb von REF (REF überdeckt VGL) ((and (>= rxluvgl rxluref) (>= ryluvgl ryluref) (<= rxrovgl rxroref) (<= ryrovgl ryroref)) (setq ilage 50) ) ; VGL umschliesst REF (VGL überdeckt REF) ((and (<= rxluvgl rxluref) (<= ryluvgl ryluref) (>= rxrovgl rxroref) (>= ryrovgl ryroref)) (setq ilage 60) ) ; VGL liegt links von REF ((<= rxrovgl rxluref) (setq ilage 10) ; innerhalb der Y-Ausdehnung von REF (if (<= ryrovgl ryluref) (setq ilage 14) ; unterhalb von REF ) ; if (if (>= ryluvgl ryroref) (setq ilage 12) ; über REF ) ; if ) ; VGL liegt rechts von REF ((>= rxluvgl rxroref) (setq ilage 30) ; innerhalb der Y-Ausdehnung von REF (if (<= ryrovgl ryluref) (setq ilage 34) ; unterhalb von REF ) ; if (if (>= ryluvgl ryroref) (setq ilage 32) ; über REF ) ; if ) ; VGL über REF ((>= ryluvgl ryroref) (setq ilage 20) ; innerhalb der X-Ausdehnung von REF (if (<= rxrovgl rxluref) (setq ilage 23) ; links von REF ) ; if (if (>= rxluvgl rxroref) (setq ilage 21) ; rechts von REF ) ; if ) ; VGL unterhalb von REF ((<= ryrovgl ryluref) (setq ilage 40) ; innerhalb der X-Ausdehnung von REF (if (<= rxrovgl rxluref) (setq ilage 43) ; links von REF ) ; if (if (>= rxluvgl rxroref) (setq ilage 41) ; rechts von REF ) ; if ) ; VGL schneidet REF (t ; else (setq ilage 70) ) ) ; cond ; Rückgabewert ilage ) ; Modulende