pbrt_r3/core/misc/
float_file.rs

1use log::*;
2
3use crate::core::base::*;
4use crate::core::error::*;
5
6use std::fs::read_to_string;
7
8pub fn read_float_file(path: &str) -> Result<Vec<Float>, PbrtError> {
9    let s = read_to_string(path)
10        .map_err(|_| PbrtError::error(&format!("Unable to open file \"{}\".", path)))?;
11    let mut values = Vec::new();
12    for (i, line) in s.lines().enumerate() {
13        let line_number = i + 1;
14        let line = line.trim();
15        if line.find('#').is_none() {
16            let mut vv: Vec<Float> = line
17                .split_ascii_whitespace()
18                .map(|token| -> f32 {
19                    if let Ok(f) = token.parse::<f32>() {
20                        return f;
21                    } else {
22                        warn!(
23                            "Unexpected text found at line {} of float file \"{}\"",
24                            line_number, path
25                        );
26                    }
27                    return 0.0;
28                })
29                .map(|f| f as Float)
30                .collect();
31            values.append(&mut vv);
32        }
33    }
34    return Ok(values);
35}