@@ -407,6 +407,31 @@ def category(self, category: str):
407407 def groups (self ) -> list [Group ]:
408408 """Get list of groups containing this DAGMC set."""
409409 return [group for group in self .model .groups if self in group ]
410+
411+ def _metadata_group (self , prefix : str ) -> list [Group ]:
412+ """Get single group containing this DAGMC set, with matching prefix."""
413+ for group in self .model .groups :
414+ if self in group and prefix in group .name :
415+ return group
416+ return None
417+
418+ def _metadata_group_name (self , prefix : str ) -> Optional [str ]:
419+ group = self ._metadata_group (prefix )
420+ if group is not None :
421+ return group .name .removeprefix (prefix )
422+ return None
423+
424+ def _set_metadata_group (self , prefix : str , name : str ):
425+ group = self ._metadata_group (prefix )
426+
427+ if group is not None :
428+ # remove surface from existing group
429+ group .remove_set (self )
430+
431+ # create a new group or get an existing group
432+ if name is not None :
433+ group = Group .create (self .model , name = prefix + name )
434+ group .add_set (self )
410435
411436 @abstractmethod
412437 def _get_triangle_sets (self ):
@@ -539,8 +564,9 @@ def create(cls, model: Model, global_id: Optional[int] = None) -> GeometrySet:
539564
540565class Surface (GeometrySet ):
541566
542- _category = 'Surface'
543- _geom_dimension = 2
567+ _category : str = 'Surface'
568+ _geom_dimension : int = 2
569+ _boundary_prefix : str = "boundary:"
544570
545571 def __init__ (self , model : Model , handle : np .uint64 ):
546572 super ().__init__ (model , handle )
@@ -590,32 +616,17 @@ def reverse_volume(self, volume: Volume):
590616 self .senses = [self .forward_volume , volume ]
591617
592618 @property
593- def _boundary_group (self ) -> Optional [Group ]:
594- for group in self .groups :
595- if "boundary:" in group .name :
596- return group
597- return None
619+ def boundary_group (self ) -> Optional [Group ]:
620+ return self ._metadata_group (self ._boundary_prefix )
598621
599622 @property
600623 def boundary (self ) -> Optional [str ]:
601624 """Name of the boundary assigned to this surface."""
602- group = self ._boundary_group
603- if group is not None :
604- return group .name .removeprefix ('boundary:' )
605- return None
606-
625+ return self ._metadata_group_name (self ._boundary_prefix )
626+
607627 @boundary .setter
608628 def boundary (self , name : Optional [str ]):
609- group = self ._boundary_group
610-
611- if group is not None :
612- # Remove surface from existing group
613- group .remove_set (self )
614-
615- # create a new group or get an existing group
616- if name is not None :
617- group = Group .create (self .model , name = f"boundary:{ name } " )
618- group .add_set (self )
629+ self ._set_metadata_group (self ._boundary_prefix , name )
619630
620631 @property
621632 def volumes (self ) -> list [Volume ]:
@@ -646,37 +657,24 @@ class Volume(GeometrySet):
646657
647658 _category : str = 'Volume'
648659 _geom_dimension : int = 3
660+ _material_prefix : str = 'mat:'
649661
650662 def __init__ (self , model : Model , handle : np .uint64 ):
651663 super ().__init__ (model , handle )
652664 self ._check_category_and_dimension ()
653665
654666 @property
655- def _material_group (self ) -> Optional [Group ]:
656- for group in self .groups :
657- if "mat:" in group .name :
658- return group
659- return None
667+ def material_group (self ) -> Optional [Group ]:
668+ return self ._metadata_group (self ._material_prefix )
660669
661670 @property
662671 def material (self ) -> Optional [str ]:
663672 """Name of the material assigned to this volume."""
664- group = self ._material_group
665- if group is not None :
666- return group .name [4 :]
667- return None
673+ return self ._metadata_group_name (self ._material_prefix )
668674
669675 @material .setter
670676 def material (self , name : str ):
671- group = self ._material_group
672-
673- if group is not None :
674- # Remove volume from existing group
675- group .remove_set (self )
676-
677- # create a new group or get an existing group
678- group = Group .create (self .model , name = f"mat:{ name } " )
679- group .add_set (self )
677+ self ._set_metadata_group (self ._material_prefix , name )
680678
681679 @property
682680 def surfaces (self ) -> list [Surface ]:
0 commit comments