0027457: Modeling - Raise exception if scaled transformation is used for shape location
[occt.git] / src / TopoDS / TopoDS_Iterator.cxx
1 // Created on: 1993-01-21
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #define No_Standard_NoSuchObject
18
19 #include <TopoDS_Iterator.hxx>
20
21 #include <Standard_NoMoreObject.hxx>
22 #include <Standard_NoSuchObject.hxx>
23
24 //=======================================================================
25 //function : Initialize
26 //purpose  : 
27 //=======================================================================
28 void TopoDS_Iterator::Initialize(const TopoDS_Shape& S,
29                                  const Standard_Boolean cumOri,
30                                  const Standard_Boolean cumLoc)
31 {
32   if (cumLoc)
33     myLocation = S.Location();
34   else
35     myLocation.Identity();
36   if (cumOri)
37     myOrientation = S.Orientation();
38   else
39     myOrientation = TopAbs_FORWARD;
40
41   if (S.IsNull())
42     myShapes = TopoDS_ListIteratorOfListOfShape();
43   else
44     myShapes.Initialize(S.TShape()->myShapes);
45
46   if (More()) {
47     myShape = myShapes.Value();
48     myShape.Orientation(TopAbs::Compose(myOrientation,myShape.Orientation()));
49     if (!myLocation.IsIdentity())
50       myShape.Move(myLocation, Standard_False);
51   }
52 }
53
54 //=======================================================================
55 //function : Next
56 //purpose  : 
57 //=======================================================================
58
59 void TopoDS_Iterator::Next()
60 {
61   myShapes.Next();
62   if (More()) {
63     myShape = myShapes.Value();
64     myShape.Orientation(TopAbs::Compose(myOrientation,myShape.Orientation()));
65     if (!myLocation.IsIdentity())
66       myShape.Move(myLocation, Standard_False);
67   }
68 }