0026936: Drawbacks of inlining in new type system in OCCT 7.0 -- manual
[occt.git] / src / AIS / AIS_C0RegularityFilter.cxx
CommitLineData
b311480e 1// Created on: 1998-02-04
2// Created by: Julia GERASIMOVA
3// Copyright (c) 1998-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
7fd59977 17
42cf5bc1 18#include <AIS_C0RegularityFilter.hxx>
7fd59977 19#include <BRep_Tool.hxx>
42cf5bc1 20#include <GeomAbs_Shape.hxx>
21#include <SelectMgr_EntityOwner.hxx>
22#include <Standard_Type.hxx>
7fd59977 23#include <StdSelect_BRepOwner.hxx>
42cf5bc1 24#include <TopExp.hxx>
25#include <TopoDS.hxx>
26#include <TopoDS_Face.hxx>
27#include <TopoDS_Shape.hxx>
28#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
29#include <TopTools_ListIteratorOfListOfShape.hxx>
7fd59977 30
31//=======================================================================
32//function : AIS_C0RegularityFilter
33//purpose :
34//=======================================================================
7fd59977 35AIS_C0RegularityFilter::AIS_C0RegularityFilter(const TopoDS_Shape& aShape)
36{
37 TopTools_IndexedDataMapOfShapeListOfShape SubShapes;
38 TopExp::MapShapesAndAncestors(aShape,TopAbs_EDGE,TopAbs_FACE,SubShapes);
39 Standard_Boolean Ok;
40 for (Standard_Integer i = 1; i <= SubShapes.Extent(); i++) {
41 Ok = Standard_False;
42 TopTools_ListIteratorOfListOfShape it(SubShapes(i));
43 TopoDS_Face Face1, Face2;
44 if (it.More()) {
45 Face1 = TopoDS::Face(it.Value());
46 it.Next();
47 if (it.More()) {
48 Face2 = TopoDS::Face(it.Value());
49 it.Next();
50 if (!it.More()) {
51 GeomAbs_Shape ShapeContinuity =
52 BRep_Tool::Continuity(TopoDS::Edge(SubShapes.FindKey(i)),Face1,Face2);
53 Ok = (ShapeContinuity == GeomAbs_C0);
54 }
55 }
56 }
57 if (Ok) {
58 TopoDS_Shape curEdge = SubShapes.FindKey( i );
59 myMapOfEdges.Add(curEdge);
60 }
61 }
62}
63
64//=======================================================================
65//function : ActsOn
66//purpose :
67//=======================================================================
68
69Standard_Boolean AIS_C0RegularityFilter::ActsOn(const TopAbs_ShapeEnum aType) const
70{
71 return (aType == TopAbs_EDGE);
72}
73
74//=======================================================================
75//function : IsOk
76//purpose :
77//=======================================================================
78
79Standard_Boolean AIS_C0RegularityFilter::IsOk(const Handle(SelectMgr_EntityOwner)& EO) const
80{
5b111128 81 Handle(StdSelect_BRepOwner) aBO (Handle(StdSelect_BRepOwner)::DownCast(EO));
82 if (aBO.IsNull())
7fd59977 83 return Standard_False;
84
5b111128 85 const TopoDS_Shape& aShape = aBO->Shape();
7fd59977 86
87 if(aShape.ShapeType()!= TopAbs_EDGE)
88 return Standard_False;
89
90 return (myMapOfEdges.Contains(aShape));
91}