+
+ if (OutNE)
+ {
+ TopTools_IndexedDataMapOfShapeShape NonFOutNE;
+ anIt.Initialize( InW );
+ for( ; anIt.More(); anIt.Next() )
+ {
+ const TopoDS_Shape& OSH = anIt.Value();
+ TopExp_Explorer exp(OSH, TopAbs_EDGE);
+ for (;exp.More();exp.Next())
+ {
+ const TopoDS_Edge& OE = TopoDS::Edge(exp.Current());
+ const TopTools_ListOfShape& ls = anAlgo.Modified(OE);
+ TopTools_ListIteratorOfListOfShape itls(ls);
+ for (;itls.More();itls.Next())
+ NonFOutNE.Add(itls.Value(), OSH);
+ }
+ }
+
+ //filter edges; if face contain an edge => keep it
+ TopTools_IndexedMapOfShape AllEdges; //edges from output shape
+ for (anIt.Initialize(outShs); anIt.More();anIt.Next())
+ TopExp::MapShapes(anIt.Value(), TopAbs_EDGE, AllEdges);
+
+ for (int i = 1; i <= NonFOutNE.Extent(); i++)
+ {
+ const TopoDS_Shape& CE = NonFOutNE.FindKey(i);
+ const TopoDS_Shape& V = NonFOutNE.FindFromIndex(i);
+ if (AllEdges.Contains(CE))
+ OutNE->Add(CE, V);
+ }
+ }
+
+ //map all sub-shapes from the original InSh to modified shapes
+ if (OInSH2MSH)
+ {
+ TopTools_IndexedMapOfShape allSh;
+ TopExp::MapShapes(InSh, allSh);
+ for(int i = 1; i <= allSh.Extent(); i++ )
+ {
+ const TopoDS_Shape& or_sh = allSh(i);
+ const TopTools_ListOfShape& ls = anAlgo.Modified(or_sh);
+ OInSH2MSH->Add(or_sh, ls);
+ }
+ }
+