2e7cc4e3b33e0d9b65046993bf18307d43ed6ae5
[occt.git] / src / ViewerTest / ViewerTest.hxx
1 // Copyright (c) 1997-1999 Matra Datavision
2 // Copyright (c) 1999-2015 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 #ifndef _ViewerTest_HeaderFile
16 #define _ViewerTest_HeaderFile
17
18 #include <Standard.hxx>
19 #include <Standard_DefineAlloc.hxx>
20 #include <Standard_Macro.hxx>
21
22 #include <Draw_Interpretor.hxx>
23 #include <Standard_Integer.hxx>
24 #include <Standard_CString.hxx>
25 #include <Handle_V3d_View.hxx>
26 #include <Standard_Boolean.hxx>
27 #include <Handle_MMgt_TShared.hxx>
28 #include <TopAbs_ShapeEnum.hxx>
29 #include <Handle_TopTools_HArray1OfShape.hxx>
30 #include <Handle_AIS_InteractiveObject.hxx>
31 #include <AIS_KindOfInteractive.hxx>
32 #include <Handle_TColStd_HArray1OfTransient.hxx>
33 #include <Handle_V3d_Viewer.hxx>
34 #include <Handle_AIS_InteractiveContext.hxx>
35 #include <Handle_ViewerTest_EventManager.hxx>
36 #include <Quantity_NameOfColor.hxx>
37
38 class TCollection_AsciiString;
39 class V3d_View;
40 class MMgt_TShared;
41 class TopoDS_Shape;
42 class TopTools_HArray1OfShape;
43 class AIS_InteractiveObject;
44 class TColStd_HArray1OfTransient;
45 class V3d_Viewer;
46 class AIS_InteractiveContext;
47 class ViewerTest_EventManager;
48 class ViewerTest_EventManager;
49 class ViewerTest_DoubleMapOfInteractiveAndName;
50 class ViewerTest_DoubleMapNodeOfDoubleMapOfInteractiveAndName;
51 class ViewerTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName;
52 class Quantity_Color;
53
54 class ViewerTest
55 {
56 public:
57
58   DEFINE_STANDARD_ALLOC
59
60   //! Loads all Draw commands of  V2d & V3d. Used for plugin.
61   Standard_EXPORT static void Factory (Draw_Interpretor& theDI);
62
63   //! Creates view with default or custom name
64   //! and add this name in map to manage muliple views
65   //! implemented in ViewerTest_ViewerCommands.cxx
66   Standard_EXPORT static TCollection_AsciiString ViewerInit (const Standard_Integer thePxLeft   = 0,
67                                                              const Standard_Integer thePxTop    = 0,
68                                                              const Standard_Integer thePxWidth  = 0,
69                                                              const Standard_Integer thePxHeight = 0,
70                                                              const Standard_CString theViewName = "",
71                                                              const Standard_CString theDisplayName = "");
72
73   Standard_EXPORT static void RemoveViewName (const TCollection_AsciiString& theName);
74
75   Standard_EXPORT static void InitViewName (const TCollection_AsciiString& theName,
76                                             const Handle(V3d_View)&        theView);
77
78   Standard_EXPORT static TCollection_AsciiString GetCurrentViewName();
79
80   //! Removes view and clear all maps
81   //! with information about its resources if necessary
82   Standard_EXPORT static void RemoveView (const TCollection_AsciiString& theViewName,
83                                           const Standard_Boolean         theToRemoveContext = Standard_True);
84
85   //! Removes view and clear all maps
86   //! with information about its resources if necessary
87   Standard_EXPORT static void RemoveView (const Handle(V3d_View)& theView,
88                                           const Standard_Boolean  theToRemoveContext = Standard_True);
89
90   //! Display AIS object in active Viewer and register it in the map of Interactive Objects with specified name.
91   //! @param theName            key to be associated to displayed interactive object
92   //! @param theObject          object to display
93   //! @param theToUpdate        redraw viewer after displaying object
94   //! @param theReplaceIfExists replace the object assigned to specified key
95   //! @return true if new object has been displayed
96   Standard_EXPORT static Standard_Boolean Display (const TCollection_AsciiString&       theName,
97                                                    const Handle(AIS_InteractiveObject)& theObject,
98                                                    const Standard_Boolean               theToUpdate = Standard_True,
99                                                    const Standard_Boolean               theReplaceIfExists = Standard_True);
100
101   //! waits until a shape of type <aType> is picked in the AIS Viewer and returns it.
102   //! if <aType> == TopAbs_Shape, any shape can be picked...
103   //! MaxPick  is the Max number before exiting, if no pick is successful
104   Standard_EXPORT static TopoDS_Shape PickShape (const TopAbs_ShapeEnum aType,
105                                                  const Standard_Integer MaxPick = 5);
106
107   //! wait until the array is filled with picked shapes.
108   //! returns True if the array is filled.
109   //! exit if number of unsuccessful picks =  <MaxPick>
110   Standard_EXPORT static Standard_Boolean PickShapes (const TopAbs_ShapeEnum           aType,
111                                                       Handle(TopTools_HArray1OfShape)& thepicked,
112                                                       const Standard_Integer           MaxPick = 5);
113
114   //! waits until an interactive object of a given Type
115   //! and signature is picked (default values authorize
116   //! selection of any Interactive Object)
117   //! exit if number of unsuccessful picks =  <MaxPick>
118   Standard_EXPORT static Handle(AIS_InteractiveObject) PickObject (const AIS_KindOfInteractive Type      = AIS_KOI_None,
119                                                                    const Standard_Integer      Signature = -1,
120                                                                    const Standard_Integer      MaxPick   = 5);
121
122   //! selection of several interactive objects.
123   //! Number is given by the size of <thepicked>
124   //! exit if number of unsuccesfull picks =  <MaxPick>
125   Standard_EXPORT static Standard_Boolean PickObjects (Handle(TColStd_HArray1OfTransient)& thepicked,
126                                                        const AIS_KindOfInteractive         Type = AIS_KOI_None,
127                                                        const Standard_Integer              Signature = -1,
128                                                        const Standard_Integer              MaxPick = 5);
129
130   Standard_EXPORT static void Commands (Draw_Interpretor& theCommands);
131
132   Standard_EXPORT static void AviCommands (Draw_Interpretor& theCommands);
133
134   Standard_EXPORT static void ViewerCommands (Draw_Interpretor& theCommands);
135
136   Standard_EXPORT static void MyCommands (Draw_Interpretor& theCommands);
137
138   Standard_EXPORT static void RelationCommands (Draw_Interpretor& theCommands);
139
140   Standard_EXPORT static void ObjectCommands (Draw_Interpretor& theCommands);
141
142   Standard_EXPORT static void FilletCommands (Draw_Interpretor& theCommands);
143
144   Standard_EXPORT static void VoxelCommands (Draw_Interpretor& theCommands);
145
146   Standard_EXPORT static void OpenGlCommands (Draw_Interpretor& theCommands);
147
148   Standard_EXPORT static void GetMousePosition (Standard_Integer& xpix, Standard_Integer& ypix);
149
150   Standard_EXPORT static Handle(V3d_Viewer) GetViewerFromContext();
151
152   Standard_EXPORT static Handle(V3d_Viewer) GetCollectorFromContext();
153
154   Standard_EXPORT static const Handle(AIS_InteractiveContext)& GetAISContext();
155
156   Standard_EXPORT static void SetAISContext (const Handle(AIS_InteractiveContext)& aContext);
157
158   Standard_EXPORT static const Handle(V3d_View)& CurrentView();
159
160   Standard_EXPORT static void CurrentView (const Handle(V3d_View)& aViou);
161
162   Standard_EXPORT static void Clear();
163
164   //! puts theMgr as current eventmanager (the move,select,...will be applied to theMgr)
165   Standard_EXPORT static void SetEventManager (const Handle(ViewerTest_EventManager)& theMgr);
166
167   //! removes the last EventManager from the list.
168   Standard_EXPORT static void UnsetEventManager();
169
170   //! clear the list of EventManagers and
171   //! sets the default EventManager as current
172   Standard_EXPORT static void ResetEventManager();
173
174   Standard_EXPORT static Handle(ViewerTest_EventManager) CurrentEventManager();
175
176   Standard_EXPORT static void RemoveSelected();
177
178   Standard_EXPORT static void StandardModeActivation (const Standard_Integer Mode);
179
180   Standard_EXPORT static Quantity_NameOfColor GetColorFromName (const Standard_CString name);
181
182   //! Parses color argument(s) specified within theArgVec[0], theArgVec[1] and theArgVec[2].
183   //! Handles either color specified by name (single argument)
184   //! or by RGB components (3 arguments) in range 0..1.
185   //! The result is stored in theColor on success.
186   //! Returns number of handled arguments (1 or 3) or 0 on syntax error.
187   Standard_EXPORT static Standard_Integer ParseColor (Standard_Integer theArgNb,
188                                                       const char**     theArgVec,
189                                                       Quantity_Color&  theColor);
190
191   //! redraws all defined views.
192   Standard_EXPORT static void RedrawAllViews();
193
194   //! Splits "parameter=value" string into separate
195   //! parameter and value strings.
196   //! @return TRUE if the string matches pattern "<string>=<empty or string>"
197   Standard_EXPORT static Standard_Boolean SplitParameter (const TCollection_AsciiString& theString,
198                                                           TCollection_AsciiString&       theName,
199                                                           TCollection_AsciiString&       theValue);
200
201 private:
202
203   //! Returns a window class that implements standard behavior of
204   //! all windows of the ViewerTest. This includes usual Open CASCADE
205   //! view conventions for mouse buttons (e.g. Ctrl+MB1 for zoom,
206   //! Ctrl+MB2 for pan, etc) and keyboard shortcuts.
207   //! This method is relevant for MS Windows only and respectively
208   //! returns WNT_WClass handle.
209   Standard_EXPORT static const Handle(MMgt_TShared)& WClass();
210
211 friend class ViewerTest_EventManager;
212 friend class ViewerTest_DoubleMapOfInteractiveAndName;
213 friend class ViewerTest_DoubleMapNodeOfDoubleMapOfInteractiveAndName;
214 friend class ViewerTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName;
215
216 };
217
218 #endif // _ViewerTest_HeaderFile