0030773: Application Framework - To allow to inherit existing attributes to reuse...
[occt.git] / src / TDataXtd / TDataXtd_Axis.cxx
1 // Created on: 2009-04-06
2 // Copyright (c) 2009-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15
16 #include <BRep_Tool.hxx>
17 #include <BRepAdaptor_Curve.hxx>
18 #include <BRepBuilderAPI_MakeEdge.hxx>
19 #include <Geom_Curve.hxx>
20 #include <Geom_Line.hxx>
21 #include <Geom_TrimmedCurve.hxx>
22 #include <GeomAbs_CurveType.hxx>
23 #include <gp_Lin.hxx>
24 #include <Standard_GUID.hxx>
25 #include <Standard_Type.hxx>
26 #include <TDataStd.hxx>
27 #include <TDataXtd.hxx>
28 #include <TDataXtd_Axis.hxx>
29 #include <TDF_Attribute.hxx>
30 #include <TDF_Label.hxx>
31 #include <TDF_RelocationTable.hxx>
32 #include <TNaming_Builder.hxx>
33 #include <TNaming_NamedShape.hxx>
34 #include <TNaming_Tool.hxx>
35 #include <TopAbs.hxx>
36 #include <TopLoc_Location.hxx>
37 #include <TopoDS.hxx>
38 #include <TopoDS_Edge.hxx>
39
40 IMPLEMENT_DERIVED_ATTRIBUTE(TDataXtd_Axis, TDataStd_GenericEmpty)
41
42 //=======================================================================
43 //function : GetID
44 //purpose  : 
45 //=======================================================================
46 const Standard_GUID& TDataXtd_Axis::GetID () 
47 {
48   static Standard_GUID TDataXtd_AxisID("2a96b601-ec8b-11d0-bee7-080009dc3333");
49   return TDataXtd_AxisID;
50 }
51
52
53
54 //=======================================================================
55 //function : Set
56 //purpose  : 
57 //=======================================================================
58
59 Handle(TDataXtd_Axis) TDataXtd_Axis::Set (const TDF_Label& L)
60
61   Handle(TDataXtd_Axis) A; 
62   if (!L.FindAttribute(TDataXtd_Axis::GetID(),A)) {
63     A = new TDataXtd_Axis ();
64     L.AddAttribute(A);
65   }  
66   return A;
67 }
68
69
70 //=======================================================================
71 //function : Set
72 //purpose  : 
73 //=======================================================================
74
75 Handle(TDataXtd_Axis) TDataXtd_Axis::Set (const TDF_Label& L, const gp_Lin& line)
76
77   Handle(TDataXtd_Axis) A = Set (L);
78
79   Handle(TNaming_NamedShape) aNS;
80   if(L.FindAttribute(TNaming_NamedShape::GetID(), aNS)) {
81     if(!aNS->Get().IsNull())
82        if(aNS->Get().ShapeType() == TopAbs_EDGE) {
83          TopoDS_Edge anEdge = TopoDS::Edge(aNS->Get());
84          BRepAdaptor_Curve anAdaptor(anEdge);
85          if(anAdaptor.GetType() == GeomAbs_Line) {
86            gp_Lin anOldLine = anAdaptor.Line();
87            if(anOldLine.Direction().X() == line.Direction().X() &&
88               anOldLine.Direction().Y() == line.Direction().Y() &&
89               anOldLine.Direction().Z() == line.Direction().Z() &&
90               anOldLine.Location().X() == line.Location().X() &&
91               anOldLine.Location().Y() == line.Location().Y() &&
92               anOldLine.Location().Z() == line.Location().Z()
93               )
94              return A;
95          }
96        }
97   }
98   TNaming_Builder B (L);
99   B.Generated (BRepBuilderAPI_MakeEdge(line));
100   return A;
101 }
102
103
104 //=======================================================================
105 //function : TDataXtd_Axis
106 //purpose  : 
107 //=======================================================================
108
109 TDataXtd_Axis::TDataXtd_Axis () { }
110
111
112
113
114 //=======================================================================
115 //function : ID
116 //purpose  : 
117 //=======================================================================
118
119 const Standard_GUID& TDataXtd_Axis::ID() const {  return GetID(); }
120
121
122 //=======================================================================
123 //function : Dump
124 //purpose  : 
125 //=======================================================================
126
127 Standard_OStream& TDataXtd_Axis::Dump (Standard_OStream& anOS) const
128 {  
129   anOS << "Axis";
130   return anOS;
131 }