1 // Created on: 1997-07-30
2 // Created by: Denis PASCAL
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <DDataStd.hxx>
19 #include <Draw_Interpretor.hxx>
20 #include <Draw_Appli.hxx>
22 #include <TDF_Data.hxx>
23 #include <TDF_Label.hxx>
26 #include <DrawTrSurf.hxx>
30 #include <TopoDS_Vertex.hxx>
31 #include <TopoDS_Edge.hxx>
32 #include <TopoDS_Wire.hxx>
33 #include <TopoDS_Face.hxx>
34 #include <TopoDS_Shell.hxx>
35 #include <TopoDS_Solid.hxx>
37 #include <Geom_Line.hxx>
38 #include <Geom_Plane.hxx>
46 #include <TDataXtd_Geometry.hxx>
47 #include <TDataXtd_Point.hxx>
48 #include <TDataXtd_Axis.hxx>
49 #include <TDataXtd_Plane.hxx>
51 #include <TNaming_Builder.hxx>
53 #include <DDataStd_DrawPresentation.hxx>
55 //=======================================================================
56 //function : DDataStd_SetPoint
57 //purpose : SetPoint (DF, entry, [drawpoint])
58 //=======================================================================
60 static Standard_Integer DDataStd_SetPoint (Draw_Interpretor& di,
67 if (!DDF::GetDF (arg[1], DF)) return 1;
68 DDF::AddLabel (DF, arg[2], L);
70 TDataXtd_Point::Set (L);
74 if (DrawTrSurf::GetPoint (arg[3],p)) {
75 TDataXtd_Point::Set (L,p);
78 di << "DDataStd_SetPoint : not a point\n";
82 DDataStd_DrawPresentation::Display (L);
87 //=======================================================================
88 //function : DDataStd_SetAxis
89 //purpose : SetAxis (DF, entry, drawline])
90 //=======================================================================
92 static Standard_Integer DDataStd_SetAxis (Draw_Interpretor& di,
99 if (!DDF::GetDF (arg[1], DF)) return 1;
100 DDF::AddLabel (DF, arg[2], L);
102 TDataXtd_Axis::Set (L);
105 Handle(Geom_Line) LINE = Handle(Geom_Line)::DownCast(DrawTrSurf::Get (arg[3]));
107 di << "DDataStd_SetAxis : not a line\n";
110 TDataXtd_Axis::Set (L,LINE->Lin());
112 DDataStd_DrawPresentation::Display (L);
118 //=======================================================================
119 //function : DDataStd_SetPlane
120 //purpose : SetPlane (DF, entry, [drawplane])
121 //=======================================================================
123 static Standard_Integer DDataStd_SetPlane (Draw_Interpretor& di,
127 if (nb < 3) return 1;
130 if (!DDF::GetDF (arg[1], DF)) return 1;
131 DDF::AddLabel (DF, arg[2], L);
133 TDataXtd_Plane::Set(L);
136 Handle(Geom_Plane) PLANE = Handle(Geom_Plane)::DownCast(DrawTrSurf::Get (arg[3]));
137 if (PLANE.IsNull()) {
138 di << "DDataStd_SetPlane : not a plane\n";
141 TDataXtd_Plane::Set (L,PLANE->Pln());
143 DDataStd_DrawPresentation::Display (L);
148 //=======================================================================
149 //function : DDataStd_GetPoint
150 //purpose : GetPoint (DF, entry, [drawname])
151 //=======================================================================
153 static Standard_Integer DDataStd_GetPoint (Draw_Interpretor&,
157 if (nb < 3) return 1;
159 if (!DDF::GetDF (arg[1], DF)) return 1;
160 Handle(TDataXtd_Point) A;
162 if (!DDF::Find (DF, arg[2], TDataXtd_Point::GetID(), A)) return 1;
163 if (TDataXtd_Geometry::Point(A->Label(), P)) {
164 if (nb == 4) DrawTrSurf::Set(arg[3], P);
165 else DrawTrSurf::Set(arg[2], P);
172 //=======================================================================
173 //function : DDataStd_GetAxis
174 //purpose : GetAxis (DF, entry, [drawname])
175 //=======================================================================
177 static Standard_Integer DDataStd_GetAxis (Draw_Interpretor&,
181 if (nb < 3) return 1;
183 if (!DDF::GetDF(arg[1],DF)) return 1;
184 Handle(TDataXtd_Axis) A;
185 if (!DDF::Find (DF, arg[2], TDataXtd_Axis::GetID(), A)) return 1;
187 if (TDataXtd_Geometry::Line(A->Label(),l)) {
188 Handle(Geom_Line) L = new Geom_Line (l);
189 if (nb == 4) DrawTrSurf::Set (arg[3], L);
190 else DrawTrSurf::Set (arg[2], L);
196 //=======================================================================
197 //function : DDataStd_GetPlane
198 //purpose : GetPlane (DF, entry, [drawname])
199 //=======================================================================
201 static Standard_Integer DDataStd_GetPlane (Draw_Interpretor&,
205 if (nb < 3) return 1;
207 if (!DDF::GetDF(arg[1],DF)) return 1;
208 Handle(TDataXtd_Plane) A;
209 if (!DDF::Find (DF, arg[2], TDataXtd_Plane::GetID(), A)) return 1;
211 if (TDataXtd_Geometry::Plane(A->Label(),p)) {
212 Handle(Geom_Plane) P = new Geom_Plane (p);
213 if (nb == 4) DrawTrSurf::Set (arg[3], P);
214 else DrawTrSurf::Set (arg[2], P);
220 //=======================================================================
221 //function : DDataStd_SetGeometry
222 //purpose : SetGeometry (DF, entry, [type], [shape])
223 //=======================================================================
224 static Standard_Integer DDataStd_SetGeometry (Draw_Interpretor& di,
228 if (nb < 3) return 1;
231 if (!DDF::GetDF (arg[1], DF)) return 1;
234 if (!DDF::FindLabel(DF, arg[2], L)) DDF::AddLabel(DF, arg[2], L);
239 TopoDS_Shape s = DBRep::Get(arg[4]);
240 if (s.IsNull()) { di <<"shape not found\n"; return 1;}
241 TNaming_Builder SI (L);
245 // set geometry attribute
246 Handle(TDataXtd_Geometry) aGA = TDataXtd_Geometry::Set(L);
249 TDataXtd_GeometryEnum aType;
252 const char* aT = arg[3];
253 if (strcmp(aT,"any") == 0) aType = TDataXtd_ANY_GEOM;
254 else if (strcmp(aT,"pnt") == 0) aType = TDataXtd_POINT;
255 else if (strcmp(aT,"lin") == 0) aType = TDataXtd_LINE;
256 else if (strcmp(aT,"cir") == 0) aType = TDataXtd_CIRCLE;
257 else if (strcmp(aT,"ell") == 0) aType = TDataXtd_ELLIPSE;
258 else if (strcmp(aT,"spl") == 0) aType = TDataXtd_SPLINE;
259 else if (strcmp(aT,"pln") == 0) aType = TDataXtd_PLANE;
260 else if (strcmp(aT,"cyl") == 0) aType = TDataXtd_CYLINDER;
263 di << "DDataStd_SetGeometry : unknown type, must be one of:\n";
264 di << "any/pnt/lin/cir/ell/spl/pln/cyl\n";
270 aType = TDataXtd_Geometry::Type(L);
274 // DDataStd_DrawPresentation::Display (L);
278 //=======================================================================
279 //function : DDataStd_GetGeometryType
280 //purpose : GetGeometryType (DF, entry)
281 //=======================================================================
282 static Standard_Integer DDataStd_GetGeometryType (Draw_Interpretor& di,
286 if (nb != 3) return 1;
289 if (!DDF::GetDF (arg[1], DF)) return 1;
292 if (!DDF::FindLabel(DF, arg[2], L)) DDF::AddLabel(DF, arg[2], L);
294 // get geometry attribute
295 Handle(TDataXtd_Geometry) aGA;
296 if (!L.FindAttribute(TDataXtd_Geometry::GetID(),aGA))
298 di << "TDataStd_Geometry : attribute not found\n";
303 TDataXtd_GeometryEnum aType = aGA->GetType();
306 case TDataXtd_ANY_GEOM: di << "any"; break;
307 case TDataXtd_POINT: di << "pnt"; break;
308 case TDataXtd_LINE: di << "lin"; break;
309 case TDataXtd_CIRCLE: di << "cir"; break;
310 case TDataXtd_ELLIPSE: di << "ell"; break;
311 case TDataXtd_SPLINE: di << "spl"; break;
312 case TDataXtd_PLANE: di << "pln"; break;
313 case TDataXtd_CYLINDER: di <<"cyl"; break;
316 di << "DDataStd_GetGeometry : unknown type\n";
324 //=======================================================================
325 //function : DatumCommands
327 //=======================================================================
329 void DDataStd::DatumCommands (Draw_Interpretor& theCommands)
332 static Standard_Boolean done = Standard_False;
334 done = Standard_True;
335 const char* g = "DData : Standard Attribute Commands";
337 theCommands.Add ("SetPoint",
338 "SetPoint (DF, entry, [drawpoint])",
339 __FILE__, DDataStd_SetPoint, g);
341 theCommands.Add ("SetAxis",
342 "SetAxis (DF, entry, [drawline])",
343 __FILE__, DDataStd_SetAxis, g);
345 theCommands.Add ("SetPlane",
346 "SetPlane (DF, entry, [drawplane])",
347 __FILE__, DDataStd_SetPlane, g);
349 // theCommands.Add ("SetMove",
350 // "SetMove (DF, entry, Shape | [x, y, z, [dx, dy, dz, angle]])",
351 // __FILE__, DDataStd_SetMove, g);
353 theCommands.Add ("GetPoint",
354 "GetPoint (DF, entry, [drawname])",
355 __FILE__, DDataStd_GetPoint, g);
357 theCommands.Add ("GetAxis",
358 "GetAxis (DF, entry, [drawname])",
359 __FILE__, DDataStd_GetAxis, g);
361 theCommands.Add ("GetPlane",
362 "GetPlane (DF, entry, [drawname])",
363 __FILE__, DDataStd_GetPlane, g);
365 theCommands.Add ("SetGeometry",
366 "SetGeometry (DF, entry, [type], [shape])",
367 __FILE__, DDataStd_SetGeometry, g);
369 theCommands.Add ("GetGeometryType",
370 "GetGeometryType (DF, entry)",
371 __FILE__, DDataStd_GetGeometryType, g);