mirror of
https://github.com/hannobraun/Fornjot
synced 2025-02-12 02:05:53 +00:00
Move model parameter parsing out of main
This commit is contained in:
parent
556de36cd6
commit
f1a0b02065
@ -1,5 +1,7 @@
|
||||
use std::{path::PathBuf, str::FromStr as _};
|
||||
|
||||
use anyhow::anyhow;
|
||||
use fj_host::Parameters;
|
||||
use fj_kernel::algorithms::Tolerance;
|
||||
use fj_math::Scalar;
|
||||
|
||||
@ -15,8 +17,8 @@ pub struct Args {
|
||||
pub export: Option<PathBuf>,
|
||||
|
||||
/// Parameters for the model, each in the form `key=value`
|
||||
#[clap(short, long)]
|
||||
pub parameters: Vec<String>,
|
||||
#[clap(short, long, parse(try_from_str = parse_parameters))]
|
||||
pub parameters: Option<Parameters>,
|
||||
|
||||
/// Model deviation tolerance
|
||||
#[clap[short, long, parse(try_from_str = parse_tolerance)]]
|
||||
@ -33,6 +35,27 @@ impl Args {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_parameters(input: &str) -> anyhow::Result<Parameters> {
|
||||
let mut parameters = Parameters::empty();
|
||||
|
||||
for parameter in input.split(',') {
|
||||
let mut parameter = parameter.splitn(2, '=');
|
||||
|
||||
let key = parameter
|
||||
.next()
|
||||
.ok_or_else(|| anyhow!("Expected model parameter key"))?
|
||||
.to_owned();
|
||||
let value = parameter
|
||||
.next()
|
||||
.ok_or_else(|| anyhow!("Expected model parameter value"))?
|
||||
.to_owned();
|
||||
|
||||
parameters.0.insert(key, value);
|
||||
}
|
||||
|
||||
Ok(parameters)
|
||||
}
|
||||
|
||||
fn parse_tolerance(input: &str) -> anyhow::Result<Tolerance> {
|
||||
let tolerance = f64::from_str(input)?;
|
||||
let tolerance = Scalar::from_f64(tolerance);
|
||||
|
@ -6,7 +6,7 @@ mod input;
|
||||
mod window;
|
||||
|
||||
use std::path::PathBuf;
|
||||
use std::{collections::HashMap, time::Instant};
|
||||
use std::time::Instant;
|
||||
|
||||
use fj_host::{Model, Parameters};
|
||||
use fj_interop::{debug::DebugInfo, mesh::Mesh};
|
||||
@ -61,29 +61,14 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
|
||||
let model = Model::from_path(path, config.target_dir)?;
|
||||
|
||||
let mut parameters = HashMap::new();
|
||||
for parameter in args.parameters {
|
||||
let mut parameter = parameter.splitn(2, '=');
|
||||
|
||||
let key = parameter
|
||||
.next()
|
||||
.expect("model parameter: key not found")
|
||||
.to_owned();
|
||||
let value = parameter
|
||||
.next()
|
||||
.expect("model parameter: value not found")
|
||||
.to_owned();
|
||||
|
||||
parameters.insert(key, value);
|
||||
}
|
||||
let parameters = args.parameters.unwrap_or_else(Parameters::empty);
|
||||
|
||||
let shape_processor = ShapeProcessor {
|
||||
tolerance: args.tolerance,
|
||||
};
|
||||
|
||||
if let Some(path) = args.export {
|
||||
let shape = model.load_once(&Parameters(parameters))?;
|
||||
let shape = model.load_once(¶meters)?;
|
||||
let shape = shape_processor.process(&shape);
|
||||
|
||||
let vertices =
|
||||
@ -111,7 +96,7 @@ fn main() -> anyhow::Result<()> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let watcher = model.load_and_watch(Parameters(parameters))?;
|
||||
let watcher = model.load_and_watch(parameters)?;
|
||||
|
||||
let event_loop = EventLoop::new();
|
||||
let window = Window::new(&event_loop);
|
||||
|
Loading…
Reference in New Issue
Block a user