def shared_faces(self, other, as_compound=False): """ Get shared faces between this shape and the other. :param afem.topology.entities.Shape other: The other shape. :param bool as_compound: Option to return shared shapes as a single compound. :return: Shared faces. :rtype: list(afem.topology.entities.Face) or afem.topology.entities.Compound """ this_map = TopTools_IndexedMapOfShape() TopExp.MapShapes_(self.object, Shape.FACE, this_map) if this_map.Extent() == 0: return [] other_map = TopTools_IndexedMapOfShape() TopExp.MapShapes_(other.object, Shape.FACE, other_map) if other_map.Extent() == 0: return [] faces = [] for i in range(1, this_map.Size() + 1): f1 = this_map.FindKey(i) if other_map.Contains(f1): faces.append(Shape.wrap(f1)) if as_compound: return Compound.by_shapes(faces) return faces
def _get_shapes(self, type_): """ Get sub-shapes of a specified type from the shape. """ map_ = TopTools_IndexedMapOfShape() TopExp.MapShapes_(self.object, type_, map_) shapes = [] for i in range(1, map_.Size() + 1): shapes.append(Shape.wrap(map_.FindKey(i))) return shapes
def test_FindSubShape(self): """ Test XCAFDoc_ShapeTool:FindSubShape. """ names = [ 'back face', 'front face', 'left face', 'right face', 'bottom face', 'top face' ] labels = TDF_LabelSequence() self._tool.GetShapes(labels) self.assertFalse(labels.IsEmpty()) self.assertEqual(labels.Length(), 1) label = labels.Value(1) named_shape = TNaming_NamedShape() status, named_shape = label.FindAttribute(TNaming_NamedShape.GetID_(), named_shape) self.assertTrue(status) shape = named_shape.Get() self.assertEqual(shape.ShapeType(), TopAbs_ShapeEnum.TopAbs_SOLID) map_ = TopTools_IndexedMapOfShape() TopExp.MapShapes_(shape, TopAbs_ShapeEnum.TopAbs_FACE, map_) for i in range(1, map_.Size() + 1): face = map_.FindKey(i) status, sub_label = self._tool.FindSubShape(label, face) self.assertTrue(status) name = TDataStd_Name() status, name = sub_label.FindAttribute(TDataStd_Name.GetID_(), name) self.assertTrue(status) name = name.Get().ToExtString() self.assertEqual(name, names[i - 1])