#[cfg(not(all(feature = "glam", feature = "debug_probe_code")))]
compile_error!(
"All of the traits 'glam' and 'debug_probe_code' features must be enabled for tests"
);
use hronn::prelude::*;
#[test]
fn test_collision_ball_glam_f64() -> Result<(), HronnError> {
use hronn::prelude::*;
use std::{env, path::Path};
use vector_traits::glam::{DVec3, Vec3};
let test_data_filename = "cube.obj";
let bounding_shape_filename = "boundingshape.obj";
let result_filename = "toolpath.obj";
let probe_radius = 0.5;
let minimum_z = 0.0;
let step = 0.3699999749660492;
type ProcessingType = DVec3;
type MeshType = Vec3;
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let filename = Path::new(&manifest_dir)
.join("test_data")
.join(test_data_filename);
let bs_filename = Path::new(&manifest_dir)
.join("test_data")
.join(bounding_shape_filename);
let result_filename = Path::new(&manifest_dir).join(result_filename);
let mesh_analyzer = MeshAnalyzerBuilder::<ProcessingType, MeshType>::default()
.load_from_obj(&filename)?
.build()?;
let probe = BallNoseProbe::<ProcessingType, MeshType>::new(&mesh_analyzer, probe_radius)?;
let pattern = {
let bs = Obj::<MeshType>::new_from_file(&bs_filename)?;
let (aabb, hull) = generate_convex_hull_then_aabb(&bs.vertices)?;
MeanderPattern::<ProcessingType, MeshType>::new(aabb, hull, step)?
};
let config = SearchPatternConfig::<ProcessingType, MeshType>::new(&probe, minimum_z);
match pattern.search(&mesh_analyzer, &config)? {
StrategyResult::MeshData(mesh) => {
if false {
mesh.save_as_obj(&result_filename, "mesh")?;
}
}
StrategyResult::LineData(line) => {
if false {
line.save_as_obj(&result_filename, "line")?;
}
}
}
Ok(())
}
#[allow(clippy::excessive_precision)]
#[test]
fn test_collision_ball_glam_f32() -> Result<(), HronnError> {
use hronn::prelude::*;
use std::{env, path::Path};
use vector_traits::glam::{Vec3, Vec3A};
let test_data_filename = "cube.obj";
let bounding_shape_filename = "boundingshape.obj";
let probe_radius = 0.5;
let minimum_z = 0.0;
let step = 0.3699999749660492;
type ProcessingType = Vec3A;
type MeshType = Vec3;
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let filename = Path::new(&manifest_dir)
.join("test_data")
.join(test_data_filename);
let bs_filename = Path::new(&manifest_dir)
.join("test_data")
.join(bounding_shape_filename);
let mesh_analyzer = MeshAnalyzerBuilder::<ProcessingType, MeshType>::default()
.load_from_obj(&filename)?
.build()?;
let probe = BallNoseProbe::<ProcessingType, MeshType>::new(&mesh_analyzer, probe_radius)?;
let pattern = {
let bs = Obj::<MeshType>::new_from_file(&bs_filename)?;
let (aabb, hull) = generate_convex_hull_then_aabb(&bs.vertices)?;
MeanderPattern::<ProcessingType, MeshType>::new(aabb, hull, step)?
};
let config = SearchPatternConfig::<ProcessingType, MeshType>::new(&probe, minimum_z);
let _ = pattern.search(&mesh_analyzer, &config)?;
Ok(())
}
#[allow(clippy::excessive_precision)]
#[test]
fn test_collision_se_glam_f32() -> Result<(), HronnError> {
use hronn::prelude::*;
use std::{env, path::Path};
use vector_traits::glam::Vec3;
let test_data_filename = "cube.obj";
let bounding_shape_filename = "boundingshape.obj";
let probe_radius = 0.5;
let minimum_z = 0.0;
let step = 0.3699999749660492;
type ProcessingType = Vec3;
type MeshType = Vec3;
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let filename = Path::new(&manifest_dir)
.join("test_data")
.join(test_data_filename);
let bs_filename = Path::new(&manifest_dir)
.join("test_data")
.join(bounding_shape_filename);
let mesh_analyzer = MeshAnalyzerBuilder::<ProcessingType, MeshType>::default()
.load_from_obj(&filename)?
.build()?;
let probe = SquareEndProbe::new(&mesh_analyzer, probe_radius)?;
let pattern = {
let bs = Obj::<MeshType>::new_from_file(&bs_filename)?;
let (aabb, hull) = generate_convex_hull_then_aabb(&bs.vertices)?;
MeanderPattern::<ProcessingType, MeshType>::new(aabb, hull, step)?
};
let config = SearchPatternConfig::<ProcessingType, MeshType>::new(&probe, minimum_z);
let _ = pattern.search(&mesh_analyzer, &config)?;
Ok(())
}
#[allow(clippy::excessive_precision)]
#[test]
fn test_collision_se_tri_glam_f32() -> Result<(), HronnError> {
use hronn::prelude::*;
use std::{env, path::Path};
use vector_traits::glam::Vec3;
let test_data_filename = "cube.obj";
let bounding_shape_filename = "boundingshape.obj";
let probe_radius = 0.5;
let minimum_z = 0.0;
let step = 0.3699999749660492;
type ProcessingType = Vec3;
type MeshType = Vec3;
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let filename = Path::new(&manifest_dir)
.join("test_data")
.join(test_data_filename);
let bs_filename = Path::new(&manifest_dir)
.join("test_data")
.join(bounding_shape_filename);
let mesh_analyzer = MeshAnalyzerBuilder::<ProcessingType, MeshType>::default()
.load_from_obj(&filename)?
.build()?;
let probe = SquareEndProbe::new(&mesh_analyzer, probe_radius)?;
let pattern = {
let bs = Obj::<MeshType>::new_from_file(&bs_filename)?;
let (aabb, hull) = generate_convex_hull_then_aabb(&bs.vertices)?;
TriangulatePattern::<ProcessingType, MeshType>::new(aabb, hull, step)?
};
let config = SearchPatternConfig::<ProcessingType, MeshType>::new(&probe, minimum_z);
let _ = pattern.search(&mesh_analyzer, &config)?;
Ok(())
}