diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 27d4802fa..deece5cd1 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -3,7 +3,7 @@ use std::iter::repeat; use crate::{ geometry::Geometry, storage::Handle, - topology::{Cycle, HalfEdge, Region, Solid, Vertex}, + topology::{Cycle, Face, HalfEdge, Region, Solid, Vertex}, validation::{ checks::{MultipleReferencesToObject, ReferenceCounter}, ValidationCheck, @@ -20,6 +20,12 @@ impl Validate for Solid { errors: &mut Vec, geometry: &Geometry, ) { + errors.extend( + MultipleReferencesToObject::::check( + self, geometry, config, + ) + .map(Into::into), + ); errors.extend( MultipleReferencesToObject::::check( self, geometry, config, @@ -156,17 +162,14 @@ impl SolidValidationError { errors: &mut Vec, ) { let mut faces = ReferenceCounter::new(); - let mut regions = ReferenceCounter::new(); solid.shells().iter().for_each(|s| { s.faces().into_iter().for_each(|f| { faces.count(f.clone(), s.clone()); - regions.count(f.region().clone(), f.clone()); }) }); errors.extend(faces.multiples().map(Into::into)); - errors.extend(regions.multiples().map(Into::into)); } } diff --git a/crates/fj-core/src/validation/checks/multiple_references.rs b/crates/fj-core/src/validation/checks/multiple_references.rs index 19fc8a6ab..9dff58505 100644 --- a/crates/fj-core/src/validation/checks/multiple_references.rs +++ b/crates/fj-core/src/validation/checks/multiple_references.rs @@ -3,7 +3,7 @@ use std::{any::type_name_of_val, collections::HashMap, fmt}; use crate::{ geometry::Geometry, storage::Handle, - topology::{Cycle, HalfEdge, Region, Sketch, Solid}, + topology::{Cycle, Face, HalfEdge, Region, Sketch, Solid}, validation::{ValidationCheck, ValidationConfig}, }; @@ -73,6 +73,24 @@ impl ValidationCheck for MultipleReferencesToObject { } } +impl ValidationCheck for MultipleReferencesToObject { + fn check<'r>( + object: &'r Solid, + _: &'r Geometry, + _: &'r ValidationConfig, + ) -> impl Iterator + 'r { + let mut regions = ReferenceCounter::new(); + + for shell in object.shells() { + for face in shell.faces() { + regions.count(face.region().clone(), face.clone()); + } + } + + regions.multiples() + } +} + impl ValidationCheck for MultipleReferencesToObject { fn check<'r>( object: &'r Solid,