0032342: Draw Harness - preload basic Tcl scripts into WebAssembly
[occt.git] / src / DRAWEXE / DRAWEXE.cxx
1 // Created on: 2003-08-11
2 // Created by: Sergey ZARITCHNY
3 // Copyright (c) 2003-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <Draw.hxx>
17 #include <DBRep.hxx>
18 #include <DrawTrSurf.hxx>
19 #include <Message.hxx>
20 #include <Message_PrinterSystemLog.hxx>
21 #include <NCollection_IndexedMap.hxx>
22 #include <Standard_ErrorHandler.hxx>
23
24 #ifdef OCCT_NO_PLUGINS
25   #include <BOPTest.hxx>
26   #include <DPrsStd.hxx>
27   #if defined(HAVE_OPENGL) || defined(HAVE_GLES2)
28   #include <OpenGlTest.hxx>
29   #endif
30   #include <TObjDRAW.hxx>
31   #include <ViewerTest.hxx>
32   #include <XSDRAWSTLVRML.hxx>
33   #include <XDEDRAW.hxx>
34 #endif
35
36 #ifdef OCCT_NO_PLUGINS
37 //! Mimic pload command by loading pre-defined set of statically linked plugins.
38 static Standard_Integer Pload (Draw_Interpretor& theDI,
39                                Standard_Integer  theNbArgs,
40                                const char**      theArgVec)
41 {
42   NCollection_IndexedMap<TCollection_AsciiString, TCollection_AsciiString> aPlugins;
43   for (Standard_Integer anArgIter = 1; anArgIter < theNbArgs; ++anArgIter)
44   {
45     TCollection_AsciiString anArg (theArgVec[anArgIter]);
46     anArg.UpperCase();
47     if (anArg == "DEFAULT")
48     {
49       aPlugins.Add ("TOPTEST");
50     }
51     else if (anArg == "MODELING")
52     {
53       aPlugins.Add ("TOPTEST");
54     }
55     else if (anArg == "VISUALIZATION")
56     {
57       aPlugins.Add ("AISV");
58     }
59     else if (anArg == "OCAFKERNEL")
60     {
61       aPlugins.Add ("DCAF");
62     }
63     else if (anArg == "DATAEXCHANGEKERNEL")
64     {
65       aPlugins.Add ("XSDRAW");
66     }
67     else if (anArg == "OCAF")
68     {
69       aPlugins.Add ("AISV");
70       aPlugins.Add ("DCAF");
71     }
72     else if (anArg == "DATAEXCHANGE")
73     {
74       aPlugins.Add ("XSDRAW");
75       aPlugins.Add ("XDEDRAW");
76       aPlugins.Add ("AISV");
77     }
78     else if (anArg == "XDE")
79     {
80       aPlugins.Add ("XSDRAW");
81       aPlugins.Add ("XDEDRAW");
82     }
83     else if (anArg == "ALL")
84     {
85       aPlugins.Add ("TOPTEST");
86       aPlugins.Add ("DCAF");
87       aPlugins.Add ("XSDRAW");
88       aPlugins.Add ("XDEDRAW");
89       aPlugins.Add ("AISV");
90     }
91     else
92     {
93       aPlugins.Add (anArg);
94     }
95   }
96
97   for (NCollection_IndexedMap<TCollection_AsciiString, TCollection_AsciiString>::Iterator aPluginIter (aPlugins);
98        aPluginIter.More(); aPluginIter.Next())
99   {
100     const TCollection_AsciiString& aPlugin = aPluginIter.Value();
101     if (aPlugin == "TOPTEST")
102     {
103       BOPTest::Factory (theDI);
104     }
105     else if (aPlugin == "DCAF")
106     {
107       DPrsStd::Factory (theDI);
108     }
109     else if (aPlugin == "AISV")
110     {
111       ViewerTest::Factory (theDI);
112     }
113   #if defined(HAVE_OPENGL)
114     else if (aPlugin == "GL"
115           || aPlugin == "OPENGL")
116     {
117       OpenGlTest::Factory (theDI);
118     }
119   #endif
120   #if defined(HAVE_GLES2)
121     else if (aPlugin == "GLES"
122           || aPlugin == "OPENGLES")
123     {
124       OpenGlTest::Factory (theDI);
125     }
126   #endif
127     else if (aPlugin == "XSDRAW")
128     {
129       XSDRAWSTLVRML::Factory (theDI);
130     }
131     else if (aPlugin == "XDEDRAW")
132     {
133       XDEDRAW::Factory (theDI);
134     }
135     //else if (aPlugin == "TOBJ")       { TObjDRAW::Factory (theDI); }
136     //else if (aPlugin == "QACOMMANDS") { QADraw::Factory (theDI); }
137     else
138     {
139       theDI << "Error: unknown plugin '" << aPlugin << "'";
140       return 1;
141     }
142   }
143
144   return 0;
145 }
146 #endif
147
148 //=======================================================================
149 //function : Draw_InitAppli
150 //purpose  : 
151 //=======================================================================
152
153 void Draw_InitAppli (Draw_Interpretor& theDI)
154 {
155 #if defined(__EMSCRIPTEN__)
156   // open JavaScript console within the Browser to see this output
157   Handle(Message_PrinterSystemLog) aJSConsolePrinter = new Message_PrinterSystemLog ("DRAWEXE");
158   Message::DefaultMessenger()->AddPrinter (aJSConsolePrinter);
159 #endif
160
161   Draw::Commands (theDI);
162   DBRep::BasicCommands (theDI);
163   DrawTrSurf::BasicCommands (theDI);
164
165 #ifdef OCCT_NO_PLUGINS
166   theDI.Add ("pload" , "pload [[Key1] [Key2] ...]: Loads Draw plugins",
167              __FILE__, Pload, "Draw Plugin");
168 #endif
169 }
170
171 #include <Draw_Main.hxx>
172 DRAW_MAIN