;;; -*- Mode: Lisp; Package: DESIGN; Syntax: Ansi-common-lisp -*-

(defun find-door-segments-to-exterior (tmodel)
  (loop for s in (edges tmodel)
	when (and (closeablep s)
		  (not (completely-interiorp s)))
	  collect s))

(defun find-primary-access-paths (tmodel)
  (loop for (a . rest) on (find-door-segments-to-exterior tmodel)
	with paths
	do (loop for b in rest
		 do (push (paths-from-x-to-y a b tmodel) paths))
	finally (return paths)))

;; returns list of lists, each list contains paths with same start and end nodes

(defun find-primary-access-path-lists (tmodel)
  (loop for (a . rest) on (find-door-segments-to-exterior tmodel)
	with paths
	do (loop for b in rest
		 do (setq paths (append (paths-from-x-to-y a b tmodel) paths)))
	finally (return paths)))

|#
;; old version: assumed door-opening objects attached to segments; not necessarily true
;; may be in new version with derivation...
(defun find-doors-to-exterior (bmodel)
  (loop for e in (design-elements (design-model bmodel))
	when (and (typep e 'door-opening)
		  (not (completely-interiorp e)))
	  collect e))

;; returns list of lists
(defun find-primary-access-path+ (bmodel)
  (loop for (a . rest) on (find-doors-to-exterior bmodel)
	with paths
	do (loop for b in rest
		 do (push (paths-from-x-to-y a b bmodel) paths))
	finally (return paths)))

(defun find-primary-access-paths (bmodel)
  (loop for (a . rest) on (find-doors-to-exterior bmodel)
	with paths
	do (loop for b in rest
		 do (setq paths (append (paths-from-x-to-y a b bmodel) paths)))
	finally (return paths)))
|#

