From e1902bbf3bd22e980284fdb264e52b9d4a3460cb Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 27 May 2024 14:29:45 +0200 Subject: [PATCH] Port rest of validation check to new infra --- crates/fj-core/src/validate/sketch.rs | 30 +++++-------------- .../validation/checks/multiple_references.rs | 20 ++++++++++++- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index d8b5680be..3d6f6ebf4 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -3,12 +3,9 @@ use fj_math::Winding; use crate::{ geometry::Geometry, storage::Handle, - topology::{Cycle, HalfEdge, Sketch}, + topology::{Cycle, HalfEdge, Region, Sketch}, validation::{ - checks::{ - AdjacentHalfEdgesNotConnected, MultipleReferencesToObject, - ReferenceCounter, - }, + checks::{AdjacentHalfEdgesNotConnected, MultipleReferencesToObject}, ValidationCheck, }, }; @@ -26,13 +23,18 @@ impl Validate for Sketch { AdjacentHalfEdgesNotConnected::check(self, geometry, config) .map(Into::into), ); + errors.extend( + MultipleReferencesToObject::::check( + self, geometry, config, + ) + .map(Into::into), + ); errors.extend( MultipleReferencesToObject::::check( self, geometry, config, ) .map(Into::into), ); - SketchValidationError::check_object_references(self, config, errors); SketchValidationError::check_exterior_cycles( self, geometry, config, errors, ); @@ -67,22 +69,6 @@ pub enum SketchValidationError { } impl SketchValidationError { - fn check_object_references( - sketch: &Sketch, - _config: &ValidationConfig, - errors: &mut Vec, - ) { - let mut cycles = ReferenceCounter::new(); - - sketch.regions().iter().for_each(|r| { - r.all_cycles().for_each(|c| { - cycles.count(c.clone(), r.clone()); - }) - }); - - errors.extend(cycles.multiples().map(Into::into)); - } - fn check_exterior_cycles( sketch: &Sketch, geometry: &Geometry, diff --git a/crates/fj-core/src/validation/checks/multiple_references.rs b/crates/fj-core/src/validation/checks/multiple_references.rs index 1d82a0bd1..24042fa4c 100644 --- a/crates/fj-core/src/validation/checks/multiple_references.rs +++ b/crates/fj-core/src/validation/checks/multiple_references.rs @@ -2,7 +2,7 @@ use std::{any::type_name_of_val, collections::HashMap, fmt}; use crate::{ storage::Handle, - topology::{Cycle, HalfEdge, Sketch}, + topology::{Cycle, HalfEdge, Region, Sketch}, validation::ValidationCheck, }; @@ -34,6 +34,24 @@ where } } +impl ValidationCheck for MultipleReferencesToObject { + fn check<'r>( + object: &'r Sketch, + _: &'r crate::geometry::Geometry, + _: &'r crate::validation::ValidationConfig, + ) -> impl Iterator + 'r { + let mut cycles = ReferenceCounter::new(); + + for region in object.regions() { + for cycle in region.all_cycles() { + cycles.count(cycle.clone(), region.clone()); + } + } + + cycles.multiples() + } +} + impl ValidationCheck for MultipleReferencesToObject { fn check<'r>( object: &'r Sketch,