pbrt_r3/core/misc/
float_file.rs1use 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}