AFLOW
 
Loading...
Searching...
No Matches
aurostd_xparser.h
Go to the documentation of this file.
1// ***************************************************************************
2// * *
3// * Aflow STEFANO CURTAROLO - Duke University 2003-2024 *
4// * *
5// ***************************************************************************
6
7#ifndef _AUROSTD_XPARSER_H_
8#define _AUROSTD_XPARSER_H_
9
10#include <filesystem>
11#include <fstream>
12#include <iostream>
13#include <map>
14#include <memory>
15#include <string>
16#include <utility>
17#include <vector>
18
19#include "aurostd.h"
20#include "aurostd_xmatrix.h"
21#include "aurostd_xvector.h"
22
23// compound specification is how a compound is specified
24// composition (Mn2Pt3) is ORTHOGONAL to pseudopotential string (Mn_pvPt)
25// for instance, H1.25 can be a pseudopotential and NOT a composition
30
31// CO20190712 - see VASP_PseudoPotential_CleanName_InPlace() in aflow_ivasp.cpp
32const std::string CAPITAL_LETTERS_PP_LIST =
33 "_GW2" // CO20190712 - potpaw_LDA/potpaw_LDA.20100505/Li_AE_GW2
34 ",_GW" // CO20190712 - potpaw_PBE/potpaw_PBE.20100506/As_GW
35 ",_ZORA" // CO20190712 - potpaw_PBE/potpaw_PBE.20100506/Pt_ZORA
36 ",_LDApU" // CO20190712 - potpaw_LDA/potpaw_LDA.20100505/Zn_sv_LDApU
37 ",_AE" // CO20190712 - potpaw_LDA/potpaw_LDA.20100505/Li_AE_GW2
38 ",_NC2" // CO20190712 - potpaw_LDA/potpaw_LDA.20100505/As_NC2
39 ",_200eV"
40 "";
41
42namespace aurostd {
43 void VASP_PseudoPotential_CleanName_InPlace(std::string& species, bool capital_letters_only = false, bool remove_floats = true); // CO20190712 //CO20210623 - added remove_floats
45 void elementsFromCompositionString(const std::string& input); // CO20190712
46 template <class utype> void elementsFromCompositionString(const std::string& input, std::vector<std::string>& velements, std::vector<utype>& vcomposition); // CO20190712
47 void elementsFromPPString(const std::string& input, std::vector<std::string>& velements, bool keep_pp = false); // CO20190712
49 // returns UNSORTED vector<string> from string
50 std::vector<std::string> getElements(const std::string& input); // CO20190712
51 std::vector<std::string> getElements(const std::string& input, elements_string_type e_str_type, bool clean = true, bool sort_elements = false, bool keep_pp = false, std::ostream& oss = std::cout);
52 template <class utype>
53 std::vector<std::string> getElements(const std::string& input, std::vector<utype>& vcomposition, bool clean = true, bool sort_elements = false, bool keep_pp = false, std::ostream& oss = std::cout);
54 std::vector<std::string> getElements(const std::string& input, elements_string_type e_str_type, std::ofstream& FileMESSAGE, bool clean = true, bool sort_elements = false, bool keep_pp = false, std::ostream& oss = std::cout);
55 template <class utype>
56 std::vector<std::string> getElements(const std::string& input, std::vector<utype>& vcomposition, elements_string_type e_str_type, bool clean = true, bool sort_elements = false, bool keep_pp = false, std::ostream& oss = std::cout);
57 template <class utype>
58 std::vector<std::string> getElements(
59 const std::string& input, std::vector<utype>& vcomposition, elements_string_type e_str_type, std::ofstream& FileMESSAGE, bool clean = true, bool sort_elements = false, bool keep_pp = false, std::ostream& oss = std::cout);
60} // namespace aurostd
61
62// HE20220314 BEGIN X3DWriter
63namespace aurostd {
64 class x3DWriter {
65 private:
67 void copy(const x3DWriter& x3w);
68
72 std::shared_ptr<void> obj;
73 };
74 std::vector<storage_object> objects;
75
77 struct Sphere {
79 double radius;
80 std::string material;
81 };
82
84 struct ConvexFacets {
85 std::vector<xvector<double>> vertexes;
86 std::vector<std::vector<uint>> facets;
87 std::string material;
88 };
89
91 struct OpenCylinder {
95 double radius;
96 std::string material;
97 double height;
98 double phi; // rotation around 1 0 0
99 double theta; // rotation around 0 0 1
100 };
101
103 struct Material {
104 std::string name;
106 double ambient;
107 double opacity;
108 double specular;
109 double diffuse;
111 Material() : ambient(0.6), opacity(1.0), specular(0.05), diffuse(0.4) {};
112 };
113
114 double max_distance = 0.0;
115 double tachyon_zoom = 2.0;
116 const double tachyon_camera_angle = 45.0;
118 std::vector<std::pair<xvector<double>, xvector<double>>> tachyon_lattice_views;
120 static std::string x3d_material(const std::shared_ptr<x3DWriter::Material>& material);
121
122 const float turbo_cmap[256][3] = {
123 {0.18995, 0.07176, 0.23217},
124 {0.19483, 0.08339, 0.26149},
125 {0.19956, 0.09498, 0.29024},
126 {0.20415, 0.10652, 0.31844},
127 {0.20860, 0.11802, 0.34607},
128 {0.21291, 0.12947, 0.37314},
129 {0.21708, 0.14087, 0.39964},
130 {0.22111, 0.15223, 0.42558},
131 {0.22500, 0.16354, 0.45096},
132 {0.22875, 0.17481, 0.47578},
133 {0.23236, 0.18603, 0.50004},
134 {0.23582, 0.19720, 0.52373},
135 {0.23915, 0.20833, 0.54686},
136 {0.24234, 0.21941, 0.56942},
137 {0.24539, 0.23044, 0.59142},
138 {0.24830, 0.24143, 0.61286},
139 {0.25107, 0.25237, 0.63374},
140 {0.25369, 0.26327, 0.65406},
141 {0.25618, 0.27412, 0.67381},
142 {0.25853, 0.28492, 0.69300},
143 {0.26074, 0.29568, 0.71162},
144 {0.26280, 0.30639, 0.72968},
145 {0.26473, 0.31706, 0.74718},
146 {0.26652, 0.32768, 0.76412},
147 {0.26816, 0.33825, 0.78050},
148 {0.26967, 0.34878, 0.79631},
149 {0.27103, 0.35926, 0.81156},
150 {0.27226, 0.36970, 0.82624},
151 {0.27334, 0.38008, 0.84037},
152 {0.27429, 0.39043, 0.85393},
153 {0.27509, 0.40072, 0.86692},
154 {0.27576, 0.41097, 0.87936},
155 {0.27628, 0.42118, 0.89123},
156 {0.27667, 0.43134, 0.90254},
157 {0.27691, 0.44145, 0.91328},
158 {0.27701, 0.45152, 0.92347},
159 {0.27698, 0.46153, 0.93309},
160 {0.27680, 0.47151, 0.94214},
161 {0.27648, 0.48144, 0.95064},
162 {0.27603, 0.49132, 0.95857},
163 {0.27543, 0.50115, 0.96594},
164 {0.27469, 0.51094, 0.97275},
165 {0.27381, 0.52069, 0.97899},
166 {0.27273, 0.53040, 0.98461},
167 {0.27106, 0.54015, 0.98930},
168 {0.26878, 0.54995, 0.99303},
169 {0.26592, 0.55979, 0.99583},
170 {0.26252, 0.56967, 0.99773},
171 {0.25862, 0.57958, 0.99876},
172 {0.25425, 0.58950, 0.99896},
173 {0.24946, 0.59943, 0.99835},
174 {0.24427, 0.60937, 0.99697},
175 {0.23874, 0.61931, 0.99485},
176 {0.23288, 0.62923, 0.99202},
177 {0.22676, 0.63913, 0.98851},
178 {0.22039, 0.64901, 0.98436},
179 {0.21382, 0.65886, 0.97959},
180 {0.20708, 0.66866, 0.97423},
181 {0.20021, 0.67842, 0.96833},
182 {0.19326, 0.68812, 0.96190},
183 {0.18625, 0.69775, 0.95498},
184 {0.17923, 0.70732, 0.94761},
185 {0.17223, 0.71680, 0.93981},
186 {0.16529, 0.72620, 0.93161},
187 {0.15844, 0.73551, 0.92305},
188 {0.15173, 0.74472, 0.91416},
189 {0.14519, 0.75381, 0.90496},
190 {0.13886, 0.76279, 0.89550},
191 {0.13278, 0.77165, 0.88580},
192 {0.12698, 0.78037, 0.87590},
193 {0.12151, 0.78896, 0.86581},
194 {0.11639, 0.79740, 0.85559},
195 {0.11167, 0.80569, 0.84525},
196 {0.10738, 0.81381, 0.83484},
197 {0.10357, 0.82177, 0.82437},
198 {0.10026, 0.82955, 0.81389},
199 {0.09750, 0.83714, 0.80342},
200 {0.09532, 0.84455, 0.79299},
201 {0.09377, 0.85175, 0.78264},
202 {0.09287, 0.85875, 0.77240},
203 {0.09267, 0.86554, 0.76230},
204 {0.09320, 0.87211, 0.75237},
205 {0.09451, 0.87844, 0.74265},
206 {0.09662, 0.88454, 0.73316},
207 {0.09958, 0.89040, 0.72393},
208 {0.10342, 0.89600, 0.71500},
209 {0.10815, 0.90142, 0.70599},
210 {0.11374, 0.90673, 0.69651},
211 {0.12014, 0.91193, 0.68660},
212 {0.12733, 0.91701, 0.67627},
213 {0.13526, 0.92197, 0.66556},
214 {0.14391, 0.92680, 0.65448},
215 {0.15323, 0.93151, 0.64308},
216 {0.16319, 0.93609, 0.63137},
217 {0.17377, 0.94053, 0.61938},
218 {0.18491, 0.94484, 0.60713},
219 {0.19659, 0.94901, 0.59466},
220 {0.20877, 0.95304, 0.58199},
221 {0.22142, 0.95692, 0.56914},
222 {0.23449, 0.96065, 0.55614},
223 {0.24797, 0.96423, 0.54303},
224 {0.26180, 0.96765, 0.52981},
225 {0.27597, 0.97092, 0.51653},
226 {0.29042, 0.97403, 0.50321},
227 {0.30513, 0.97697, 0.48987},
228 {0.32006, 0.97974, 0.47654},
229 {0.33517, 0.98234, 0.46325},
230 {0.35043, 0.98477, 0.45002},
231 {0.36581, 0.98702, 0.43688},
232 {0.38127, 0.98909, 0.42386},
233 {0.39678, 0.99098, 0.41098},
234 {0.41229, 0.99268, 0.39826},
235 {0.42778, 0.99419, 0.38575},
236 {0.44321, 0.99551, 0.37345},
237 {0.45854, 0.99663, 0.36140},
238 {0.47375, 0.99755, 0.34963},
239 {0.48879, 0.99828, 0.33816},
240 {0.50362, 0.99879, 0.32701},
241 {0.51822, 0.99910, 0.31622},
242 {0.53255, 0.99919, 0.30581},
243 {0.54658, 0.99907, 0.29581},
244 {0.56026, 0.99873, 0.28623},
245 {0.57357, 0.99817, 0.27712},
246 {0.58646, 0.99739, 0.26849},
247 {0.59891, 0.99638, 0.26038},
248 {0.61088, 0.99514, 0.25280},
249 {0.62233, 0.99366, 0.24579},
250 {0.63323, 0.99195, 0.23937},
251 {0.64362, 0.98999, 0.23356},
252 {0.65394, 0.98775, 0.22835},
253 {0.66428, 0.98524, 0.22370},
254 {0.67462, 0.98246, 0.21960},
255 {0.68494, 0.97941, 0.21602},
256 {0.69525, 0.97610, 0.21294},
257 {0.70553, 0.97255, 0.21032},
258 {0.71577, 0.96875, 0.20815},
259 {0.72596, 0.96470, 0.20640},
260 {0.73610, 0.96043, 0.20504},
261 {0.74617, 0.95593, 0.20406},
262 {0.75617, 0.95121, 0.20343},
263 {0.76608, 0.94627, 0.20311},
264 {0.77591, 0.94113, 0.20310},
265 {0.78563, 0.93579, 0.20336},
266 {0.79524, 0.93025, 0.20386},
267 {0.80473, 0.92452, 0.20459},
268 {0.81410, 0.91861, 0.20552},
269 {0.82333, 0.91253, 0.20663},
270 {0.83241, 0.90627, 0.20788},
271 {0.84133, 0.89986, 0.20926},
272 {0.85010, 0.89328, 0.21074},
273 {0.85868, 0.88655, 0.21230},
274 {0.86709, 0.87968, 0.21391},
275 {0.87530, 0.87267, 0.21555},
276 {0.88331, 0.86553, 0.21719},
277 {0.89112, 0.85826, 0.21880},
278 {0.89870, 0.85087, 0.22038},
279 {0.90605, 0.84337, 0.22188},
280 {0.91317, 0.83576, 0.22328},
281 {0.92004, 0.82806, 0.22456},
282 {0.92666, 0.82025, 0.22570},
283 {0.93301, 0.81236, 0.22667},
284 {0.93909, 0.80439, 0.22744},
285 {0.94489, 0.79634, 0.22800},
286 {0.95039, 0.78823, 0.22831},
287 {0.95560, 0.78005, 0.22836},
288 {0.96049, 0.77181, 0.22811},
289 {0.96507, 0.76352, 0.22754},
290 {0.96931, 0.75519, 0.22663},
291 {0.97323, 0.74682, 0.22536},
292 {0.97679, 0.73842, 0.22369},
293 {0.98000, 0.73000, 0.22161},
294 {0.98289, 0.72140, 0.21918},
295 {0.98549, 0.71250, 0.21650},
296 {0.98781, 0.70330, 0.21358},
297 {0.98986, 0.69382, 0.21043},
298 {0.99163, 0.68408, 0.20706},
299 {0.99314, 0.67408, 0.20348},
300 {0.99438, 0.66386, 0.19971},
301 {0.99535, 0.65341, 0.19577},
302 {0.99607, 0.64277, 0.19165},
303 {0.99654, 0.63193, 0.18738},
304 {0.99675, 0.62093, 0.18297},
305 {0.99672, 0.60977, 0.17842},
306 {0.99644, 0.59846, 0.17376},
307 {0.99593, 0.58703, 0.16899},
308 {0.99517, 0.57549, 0.16412},
309 {0.99419, 0.56386, 0.15918},
310 {0.99297, 0.55214, 0.15417},
311 {0.99153, 0.54036, 0.14910},
312 {0.98987, 0.52854, 0.14398},
313 {0.98799, 0.51667, 0.13883},
314 {0.98590, 0.50479, 0.13367},
315 {0.98360, 0.49291, 0.12849},
316 {0.98108, 0.48104, 0.12332},
317 {0.97837, 0.46920, 0.11817},
318 {0.97545, 0.45740, 0.11305},
319 {0.97234, 0.44565, 0.10797},
320 {0.96904, 0.43399, 0.10294},
321 {0.96555, 0.42241, 0.09798},
322 {0.96187, 0.41093, 0.09310},
323 {0.95801, 0.39958, 0.08831},
324 {0.95398, 0.38836, 0.08362},
325 {0.94977, 0.37729, 0.07905},
326 {0.94538, 0.36638, 0.07461},
327 {0.94084, 0.35566, 0.07031},
328 {0.93612, 0.34513, 0.06616},
329 {0.93125, 0.33482, 0.06218},
330 {0.92623, 0.32473, 0.05837},
331 {0.92105, 0.31489, 0.05475},
332 {0.91572, 0.30530, 0.05134},
333 {0.91024, 0.29599, 0.04814},
334 {0.90463, 0.28696, 0.04516},
335 {0.89888, 0.27824, 0.04243},
336 {0.89298, 0.26981, 0.03993},
337 {0.88691, 0.26152, 0.03753},
338 {0.88066, 0.25334, 0.03521},
339 {0.87422, 0.24526, 0.03297},
340 {0.86760, 0.23730, 0.03082},
341 {0.86079, 0.22945, 0.02875},
342 {0.85380, 0.22170, 0.02677},
343 {0.84662, 0.21407, 0.02487},
344 {0.83926, 0.20654, 0.02305},
345 {0.83172, 0.19912, 0.02131},
346 {0.82399, 0.19182, 0.01966},
347 {0.81608, 0.18462, 0.01809},
348 {0.80799, 0.17753, 0.01660},
349 {0.79971, 0.17055, 0.01520},
350 {0.79125, 0.16368, 0.01387},
351 {0.78260, 0.15693, 0.01264},
352 {0.77377, 0.15028, 0.01148},
353 {0.76476, 0.14374, 0.01041},
354 {0.75556, 0.13731, 0.00942},
355 {0.74617, 0.13098, 0.00851},
356 {0.73661, 0.12477, 0.00769},
357 {0.72686, 0.11867, 0.00695},
358 {0.71692, 0.11268, 0.00629},
359 {0.70680, 0.10680, 0.00571},
360 {0.69650, 0.10102, 0.00522},
361 {0.68602, 0.09536, 0.00481},
362 {0.67535, 0.08980, 0.00449},
363 {0.66449, 0.08436, 0.00424},
364 {0.65345, 0.07902, 0.00408},
365 {0.64223, 0.07380, 0.00401},
366 {0.63082, 0.06868, 0.00401},
367 {0.61923, 0.06367, 0.00410},
368 {0.60746, 0.05878, 0.00427},
369 {0.59550, 0.05399, 0.00453},
370 {0.58336, 0.04931, 0.00486},
371 {0.57103, 0.04474, 0.00529},
372 {0.55852, 0.04028, 0.00579},
373 {0.54583, 0.03593, 0.00638},
374 {0.53295, 0.03169, 0.00705},
375 {0.51989, 0.02756, 0.00780},
376 {0.50664, 0.02354, 0.00863},
377 {0.49321, 0.01963, 0.00955},
378 {0.47960, 0.01583, 0.01055}
379 };
380
381 public:
383 double join_threshold = 1E-5;
384 double tachyon_camera_theta = 0.0;
385 double tachyon_camera_phi = 0.0;
388 //@brief available animation formats
389 enum class animation_format { GIF, WEBM, MP4 };
391 std::vector<std::pair<std::string, std::string>> meta;
392 x3DWriter();
393 x3DWriter(const x3DWriter& x3w);
395 x3DWriter& operator=(const x3DWriter& x3w);
396 void clear();
397
398 void prepareSceneLattice(const xmatrix<double>& lattice);
399 void addMaterial(const std::string& name, const xvector<double>& color);
400 void addMaterial(const Material& newMaterial);
401 std::vector<std::string> addColorSpreadMaterial(uint count);
402 template <class Container> std::map<std::string, std::string> addNamedColorSpreadMaterial(const Container& names);
403
404 void addSphere(const xvector<double>& center, double radius, const std::string& material = "bm_black");
405 void addSpheres(const std::vector<xvector<double>>& center, double radius, const std::string& material = "bm_black");
406 void addOpenCylinder(const xvector<double>& base, const xvector<double>& apex, double radius, const std::string& material = "bm_grey");
407 void addConvexFacets(const std::vector<xvector<double>>& vertexes, const std::vector<std::vector<uint>>& facets, const std::string& material = "bm_grey_glass", const xvector<double>& shift = {0, 0, 0});
408 void addConvexFacets(const std::vector<xvector<double>>& vertexes, const std::vector<std::vector<uint>>& facets, const xvector<double>& shift);
409 void addLatticeBox(const xmatrix<double>& lattice, double radius, const std::string& material = "bm_black", bool axis = false);
410
411 void joinFacets(std::vector<xvector<double>>& vertexes, std::vector<std::vector<uint>>& facets, const std::vector<xvector<double>>& new_vertexes, const std::vector<std::vector<uint>>& new_facets) const;
412
413 void animate(float duration, const std::filesystem::path& out_folder, uint fps = 30, bool lr = true);
414
415 std::string toHTML();
416 std::string toX3D(bool include_xml = true, bool replace_material = false);
417 std::string toTachyon();
418 };
419} // namespace aurostd
420// HE20220314 END X3DWriter
421
422namespace aurostd {
423 std::vector<std::string> extractJsonKeysAflow(const std::string& json);
424 std::string extractJsonValueAflow(const std::string& json, std::string key);
425 std::vector<std::string> extractJsonVectorAflow(const std::string& json, std::string key); // SD20220504
426 std::vector<std::vector<std::string>> extractJsonMatrixAflow(const std::string& json, std::string key); // SD20220504
427} // namespace aurostd
428
429#endif // _AUROSTD_XPARSER_H_
430
431// ***************************************************************************
432// * *
433// * Aflow STEFANO CURTAROLO - Duke University 2003-2024 *
434// * *
435// ***************************************************************************
unsigned uint
Definition aurostd.h:39
elements_string_type
@ composition_string
@ pp_string
const std::string CAPITAL_LETTERS_PP_LIST
tools to create 3D scence and export them in different
void addOpenCylinder(const xvector< double > &base, const xvector< double > &apex, double radius, const std::string &material="bm_grey")
add a OpenCylinder to the scene
void addLatticeBox(const xmatrix< double > &lattice, double radius, const std::string &material="bm_black", bool axis=false)
add a box forming a unit cell to the scene
const float turbo_cmap[256][3]
rgb values of the turbo colormap
int tachyon_lattice_views_idx
active lattice view (-1 default tachyon viewpoint is used)
void joinFacets(std::vector< xvector< double > > &vertexes, std::vector< std::vector< uint > > &facets, const std::vector< xvector< double > > &new_vertexes, const std::vector< std::vector< uint > > &new_facets) const
combine overlapping vertexes and facets
xvector< double > scene_center
center of the scene (should be set before adding objects to the scene)
double tachyon_camera_phi
tachyon camera angle phi | rotation around 0 0 1
static std::string x3d_material(const std::shared_ptr< x3DWriter::Material > &material)
void copy(const x3DWriter &x3w)
create a copy of x3DWriter
void addSpheres(const std::vector< xvector< double > > &center, double radius, const std::string &material="bm_black")
add a set of Sphere with a list of center and constant radius and materials
void prepareSceneLattice(const xmatrix< double > &lattice)
prepare a scene to show a lattice by setting the center and a view collection
const double tachyon_camera_angle
lense angle for the camera rendering with tachyon
x3DWriter & operator=(const x3DWriter &x3w)
assignment operator
std::vector< std::pair< std::string, std::string > > meta
meta data like title, description, reference (link back to auid)
x3DWriter()
class constractor
animation_format ani_type
animation type (default GIF)
std::map< std::string, std::string > addNamedColorSpreadMaterial(const Container &names)
std::vector< std::string > addColorSpreadMaterial(uint count)
create a set of materials using the turbo colormap
std::vector< storage_object > objects
storage for scene objects
double tachyon_camera_theta
tachyon camera angle theta | rotation around 1 0 0
void addConvexFacets(const std::vector< xvector< double > > &vertexes, const std::vector< std::vector< uint > > &facets, const xvector< double > &shift)
void addSphere(const xvector< double > &center, double radius, const std::string &material="bm_black")
add a Sphere to the scene
void animate(float duration, const std::filesystem::path &out_folder, uint fps=30, bool lr=true)
prepare an animation
xvector< double > tachyon_camera_position
camera position for tachyon
std::vector< std::pair< xvector< double >, xvector< double > > > tachyon_lattice_views
collection of camera views based on prepareSceneLattice
std::string toHTML()
save scene as x3d and embed it in a html file
void tachyon_calculate_camera()
calculate the camera position (used fot tachyon)
std::string toTachyon()
save scene for the tachyon renderer use tachyon to render the generated file
std::string toX3D(bool include_xml=true, bool replace_material=false)
save scene as x3d (xml)
double join_threshold
threshould to join vertexes when using joinFacets
~x3DWriter()
default class de-constructor
double tachyon_zoom
zoom value for rendering the camera rendering with tachyon
void addMaterial(const std::string &name, const xvector< double > &color)
add a new basic Material
double max_distance
maximum distance of scene object from the scene center (for camera position calculation)
void addConvexFacets(const std::vector< xvector< double > > &vertexes, const std::vector< std::vector< uint > > &facets, const std::string &material="bm_grey_glass", const xvector< double > &shift={0, 0, 0})
void clear()
reconstruct / clear
void VASP_PseudoPotential_CleanName_InPlace(string &species, bool capital_letters_only, bool remove_floats)
vector< string > extractJsonKeysAflow(const string &json)
string extractJsonValueAflow(const string &json, string key)
vector< vector< string > > extractJsonMatrixAflow(const string &json, string key)
void elementsFromCompositionString(const string &input, vector< string > &velements)
vector< string > extractJsonVectorAflow(const string &json, string key)
void elementsFromPPString(const string &input, vector< string > &velements, bool keep_pp)
vector< string > getElements(const string &input)
Scene object settings for facets.
std::vector< xvector< double > > vertexes
std::vector< std::vector< uint > > facets
Storage object for material settings.
Material()
create a default Material
Scene object settings for cylinders.
Scene object settings for spheres.
Helper to store different scene objects (utalizing shared pointers)