: find-all ( seq quot: ( elt -- ? ) -- elts )
[ [ length iota ] keep ] dip
[ dupd call( a -- ? ) [ 2array ] [ 2drop f ] if ] curry
- 2map [ ] filter ; inline
+ 2map sift ; inline
: reduce-from ( ... seq identity quot: ( ... prev elt -- ... next ) i -- ... result )
[ swap ] 2dip each-from ; inline
: intersections-into-faces ( face -- faces )\r
clone dup \r
adjacent-faces>> [ intersection-into-face ] with map \r
- [ ] filter ;\r
+ sift ;\r
\r
: (face-silhouette) ( face -- faces )\r
clone dup adjacent-faces>>\r
[ backface?\r
[ intersection-into-silhouette-face ] [ 2drop f ] if \r
] with map \r
- [ ] filter\r
+ sift\r
; inline\r
\r
: face-silhouette ( face -- faces ) \r
! find-adjacencies \r
faces>> { } \r
[ face-silhouette append ] reduce\r
- [ ] filter \r
+ sift\r
<solid> \r
swap >>faces\r
over dimension>> >>dimension \r
ensure-adjacencies\r
[ color>> ] [ faces>> ] bi [ 3array ] dip\r
[ face-project ] with map \r
- [ ] filter \r
+ sift\r
[ ensure-adjacencies ] map\r
;\r
\r