Integration of OCCT 6.5.0 from SVN
[occt.git] / src / TestTopOpeDraw / TestTopOpeDraw_SaveRestore.cxx
1 // File:        TestTopOpeDraw_SaveResTore.cxx
2 // Created:     Wed Apr 10 10:58:52 1996
3 // Author:      Jean-Yves LEBEY
4
5 #include <Draw_Appli.hxx>
6 #include <Draw.hxx>
7 #include <Draw_Drawable3D.hxx>
8 #include <TestTopOpeDraw_DrawableSHA.hxx>
9 #include <TestTopOpeDraw_DrawableC3D.hxx>
10 #include <TestTopOpeDraw_DrawableMesure.hxx>
11 #include <DrawTrSurf_Curve.hxx>
12 #include <BRep_Builder.hxx>
13 #include <BRep_Tool.hxx>
14 #include <BRepTools_ShapeSet.hxx>
15 #include <Geom_Curve.hxx>
16 #include <Geom_BSplineCurve.hxx>
17 #include <TopoDS.hxx>
18 #include <TopoDS_Shape.hxx>
19 #include <TopoDS_Edge.hxx>
20 #include <TColgp_HArray1OfPnt.hxx>
21 #include <TColgp_Array1OfPnt.hxx>
22 #include <TestTopOpeTools_Mesure.hxx>
23
24 // pour sauver un DrawableSHA
25
26 //=======================================================================
27 //function : stestTopOpe
28 //purpose  : 
29 //=======================================================================
30
31 static Standard_Boolean stestTopOpe(const Handle(Draw_Drawable3D)& D) 
32 {
33   Standard_Boolean res = D->IsInstance(STANDARD_TYPE(TestTopOpeDraw_DrawableSHA));
34   return res;
35 }
36
37
38 //=======================================================================
39 //function : ssaveTopOpe
40 //purpose  : 
41 //=======================================================================
42
43 static void ssaveTopOpe (const Handle(Draw_Drawable3D)& D, ostream& OS)
44 {  
45   Handle(TestTopOpeDraw_DrawableSHA) N;
46   N = Handle(TestTopOpeDraw_DrawableSHA)::DownCast(D);
47   if ( !N.IsNull()) {
48     BRep_Builder B;
49     BRepTools_ShapeSet S(B);
50     S.Add(N->Shape());
51     S.Write(OS);
52     S.Write(N->Shape(),OS);
53   }
54   else cout <<"TestTopOpeDraw::ssaveTopOpe : error" << endl; 
55 }
56
57 static Standard_Real    size    = 100.;
58 static Standard_Integer nbIsos  = 2;
59 static Standard_Integer discret = 30;
60 //=======================================================================
61 //function : srestoreTopOpe
62 //purpose  : 
63 //=======================================================================
64
65 static Handle(Draw_Drawable3D) srestoreTopOpe (istream& IS)
66 {  
67   BRep_Builder B;
68   BRepTools_ShapeSet S(B);
69   S.Read(IS);
70   TopoDS_Shape theShape;
71   S.Read(theShape,IS);
72   Handle(DBRep_DrawableShape) N;
73   N = new DBRep_DrawableShape(theShape,
74                               Draw_vert,
75                               Draw_jaune,
76                               Draw_rouge,
77                               Draw_bleu,
78                               size,
79                               nbIsos,
80                               discret);
81   return N;
82 }
83
84
85 //=======================================================================
86 //function : ssrTopOpe
87 //purpose  : 
88 //=======================================================================
89
90 static Draw_SaveAndRestore ssrTopOpe
91 ("TestTopOpeDraw_DrawableSHA",
92  stestTopOpe,ssaveTopOpe,srestoreTopOpe);
93
94 // pour sauver une DrawableC3D
95
96 //=======================================================================
97 //function : ctestTopOpe
98 //purpose  : 
99 //=======================================================================
100
101 static Standard_Boolean ctestTopOpe(const Handle(Draw_Drawable3D)& D) 
102 {
103   Standard_Boolean res = D->IsInstance(STANDARD_TYPE(TestTopOpeDraw_DrawableC3D));
104   return res;
105 }
106
107
108 //=======================================================================
109 //function : csaveTopOpe
110 //purpose  : 
111 //=======================================================================
112
113 static void csaveTopOpe (const Handle(Draw_Drawable3D)& D, ostream& OS)
114 {
115
116
117   Handle(DrawTrSurf_Curve) N;
118   N = Handle(DrawTrSurf_Curve)::DownCast(D);
119   if ( !N.IsNull()) {
120     Handle(Geom_Curve) GC;
121     GC = N->GetCurve();
122     BRep_Builder BB;
123     TopoDS_Edge E;
124     BB.MakeEdge(E, GC, 1.0e-7);
125     BRep_Builder B;
126     BRepTools_ShapeSet S(B);
127     S.Add(E);
128     S.Write(OS);
129     S.Write(E,OS);
130   }
131   else cout <<"TestTopOpeDraw::csaveTopOpe : error" << endl; 
132 }
133
134 //=======================================================================
135 //function : crestoreTopOpe
136 //purpose  : 
137 //=======================================================================
138
139 static Handle(Draw_Drawable3D) crestoreTopOpe (istream& IS)
140 {  
141   BRep_Builder B;
142   BRepTools_ShapeSet S(B);
143   S.Read(IS);
144   TopoDS_Shape theShape;
145   S.Read(theShape,IS);
146   TopoDS_Edge& E = TopoDS::Edge(theShape);
147   Standard_Real f, l;
148   Handle(Geom_Curve) C3d = BRep_Tool::Curve(E, f, l);
149   Handle(TestTopOpeDraw_DrawableC3D) N;
150   N = new TestTopOpeDraw_DrawableC3D(C3d,Draw_blanc);
151   return N;
152 }
153
154
155 //=======================================================================
156 //function : csrTopOpe
157 //purpose  : 
158 //=======================================================================
159
160 static Draw_SaveAndRestore csrTopOpe
161 ("TestTopOpeDraw_DrawableC3D",
162  ctestTopOpe,csaveTopOpe,crestoreTopOpe);
163
164
165 // pour sauver une DrawableMesure
166
167 //=======================================================================
168 //function : mtestTopOpe
169 //purpose  : 
170 //=======================================================================
171
172 static Standard_Boolean mtestTopOpe(const Handle(Draw_Drawable3D)& D) 
173 {
174   Standard_Boolean res = D->IsInstance(STANDARD_TYPE(TestTopOpeDraw_DrawableMesure));
175   return res;
176 }
177
178
179 //=======================================================================
180 //function : msaveTopOpe
181 //purpose  : 
182 //=======================================================================
183
184 static void msaveTopOpe (const Handle(Draw_Drawable3D)& D, ostream& OS)
185 {  
186   Handle(DrawTrSurf_Curve) N;
187   N = Handle(DrawTrSurf_Curve)::DownCast(D);
188   if ( !N.IsNull()) {
189     Handle(Geom_BSplineCurve) BS;
190     BS = Handle(Geom_BSplineCurve)::DownCast(N->GetCurve());
191     BRep_Builder BB;
192     TopoDS_Edge E;
193     BB.MakeEdge(E, BS, 1.0e-7);
194     BRep_Builder B;
195     BRepTools_ShapeSet S(B);
196     S.Add(E);
197     S.Write(OS);
198     S.Write(E,OS);
199   }
200   else cout <<"TestTopOpeDraw::msaveTopOpe : error" << endl; 
201 }
202
203 //=======================================================================
204 //function : mrestoreTopOpe
205 //purpose  : 
206 //=======================================================================
207
208 static Handle(Draw_Drawable3D) mrestoreTopOpe (istream& IS)
209 {  
210   BRep_Builder B;
211   BRepTools_ShapeSet S(B);
212   S.Read(IS);
213   TopoDS_Shape theShape;
214   S.Read(theShape,IS);
215   TopoDS_Edge& E = TopoDS::Edge(theShape);
216   Standard_Integer NbPoles;
217   Standard_Real f, l;
218   Handle(Geom_Curve) C3d = BRep_Tool::Curve(E, f, l);
219   Handle(Geom_BSplineCurve) BS;
220   BS = Handle(Geom_BSplineCurve)::DownCast(C3d);
221   NbPoles = BS->NbPoles();
222   TColgp_HArray1OfPnt* Pnt = new TColgp_HArray1OfPnt(1, NbPoles);
223   BS->Poles(Pnt->ChangeArray1());
224   TestTopOpeTools_Mesure Mes(Pnt);
225   Handle(TestTopOpeDraw_DrawableMesure) N;
226   N = new TestTopOpeDraw_DrawableMesure(Mes, Draw_blanc, Draw_rose);
227   return N;
228 }
229
230
231 //=======================================================================
232 //function : msrTopOpe
233 //purpose  : 
234 //=======================================================================
235
236 static Draw_SaveAndRestore msrTopOpe
237 ("TestTopOpeDraw_DrawableMesure",
238  mtestTopOpe,msaveTopOpe,mrestoreTopOpe);