0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / IFSelect / IFSelect_Selection.cxx
CommitLineData
973c2be1 1// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 2//
973c2be1 3// This file is part of Open CASCADE Technology software library.
b311480e 4//
d5f74e42 5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
b311480e 10//
973c2be1 11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
b311480e 13
42cf5bc1 14
15#include <IFSelect_Selection.hxx>
16#include <IFSelect_SelectionIterator.hxx>
17#include <Interface_EntityIterator.hxx>
7fd59977 18#include <Interface_Graph.hxx>
19#include <Interface_GraphContent.hxx>
42cf5bc1 20#include <Interface_InterfaceError.hxx>
21#include <Standard_Type.hxx>
22#include <TCollection_AsciiString.hxx>
7fd59977 23
92efcf78 24IMPLEMENT_STANDARD_RTTIEXT(IFSelect_Selection,MMgt_TShared)
25
b311480e 26Standard_Boolean IFSelect_Selection::HasUniqueResult () const
7fd59977 27 { return Standard_False; } // eminemment redefinissable
28
29// UniqueResult, c est RootResult passe par une Map (-> mis a plat)
30
31 Interface_EntityIterator IFSelect_Selection::UniqueResult
32 (const Interface_Graph& G) const
33{
34 Interface_EntityIterator iter = RootResult(G);
bc650d41
G
35 if (HasUniqueResult() || !G.ModeStat())
36 return iter;
7fd59977 37 Interface_Graph GG(G);
38 GG.GetFromIter(iter,0);
39 return Interface_GraphContent(GG); // EntityIterator specialise (meme taille)
40}
41
42// CompleteResult, c est RootResult + propagation du partage (Shareds)
43
44 Interface_EntityIterator IFSelect_Selection::CompleteResult
45 (const Interface_Graph& G) const
46{
47 Interface_EntityIterator iter = RootResult(G);
48// On peut utiliser le Graphe a present
49 Interface_Graph GG(G);
50 for (iter.Start(); iter.More(); iter.Next()) {
51 Handle(Standard_Transient) ent = iter.Value();
52 GG.GetFromEntity(ent,Standard_True); // et voila
53 }
54 return Interface_GraphContent(GG); // EntityIterator specialise (meme taille)
55}