API Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
ManagedDesignCommand.h
Go to the documentation of this file.
1#pragma once
2#include <NDEVR/DesignCommand.h>
3#include <NDEVR/Model.h>
4#include <NDEVR/Geometry.h>
5#include <NDEVR/Material.h>
6#include <NDEVR/Pointer.h>
7namespace NDEVR
8{
10 {
11 public:
13 {
14 e_none
15 , e_set_transform
16 , e_validate
17 , e_set_geometry_property
18 , e_set_material_property
19 , e_set_model_property
20 , e_set_model_material_mode
21 , e_set_design_property
22 , e_create_property
23 , e_normal_expansion
24 , e_set_winding_mode
25 , e_center_align
26 , e_smooth_laplacian
27 , e_smooth_cotangent
28 , e_remove_smoothing
29 , e_fill_holes_by_neighbor
30 , e_make_closed_solid
31 , e_update_vertex
32 , e_calculate_tangents
33 , e_set_normal_mode
34 , e_flip_normals
35 , e_remove_duplicates
36 , e_set_UV_mode
37 , e_set_UV_color
38 , e_set_UV_image
39 , e_set_real_thickness
40 , e_scale_object
41 , e_set_UV_intensity
42 , e_set_UV_property_channel
43 , e_set_shader
44 , e_calibrate_scan
45 , e_delete_enclosed_area
48 , e_clear_all
49 , e_color_by_channel
50 , e_read_from_file
51 , e_read_from_database
52 , e_create_material
53 , e_create_geometry
55 , e_set_metadata
56 , e_append_data
57 , e_set_active_filters
58 , e_add_active_filters
59 , e_slice_into_polylines
60 , e_remove_filter
61 , e_auto_register
62 , e_place_object
63 };
64 public:
66 protected:
67 explicit ManagedDesignCommand(CommandType command);
68 ManagedDesignCommand(CommandType command, const String& params);
69
70 template<class t_arg_type>
71 ManagedDesignCommand(CommandType command, const t_arg_type& param_a)
72 : command_type(command)
73 {
74 setParams(String(param_a));
75 }
76 template<class t_arg_type_a, class t_arg_type_b>
77 ManagedDesignCommand(CommandType command, const t_arg_type_a& param_a, const t_arg_type_b& param_b)
78 : command_type(command)
79 {
80 setParams(String(param_a) + "|" + String(param_b));
81 }
82 template<class t_arg_type_a, class t_arg_type_b, class t_arg_type_c>
83 ManagedDesignCommand(CommandType command, const t_arg_type_a& param_a, const t_arg_type_b& param_b, const t_arg_type_c& param_c)
84 : command_type(command)
85 {
86 setParams(String(param_a) + "|" + String(param_b) + "|" + String(param_c));
87 }
88 template<class t_arg_type_a, class t_arg_type_b, class t_arg_type_c, class t_arg_type_d>
89 ManagedDesignCommand(CommandType command, const t_arg_type_a& param_a, const t_arg_type_b& param_b, const t_arg_type_c& param_c, const t_arg_type_d& param_d)
90 : command_type(command)
91 {
92 setParams(String(param_a) + "|" + String(param_b) + "|" + String(param_c) + "|" + String(param_d));
93 }
94 public:
95 bool isAsyncExecution() const override;
96 void setParams(const Buffer<String>& params)
97 {
98 m_command_params = params;
99 }
100 void setParams(const String& params)
101 {
102 m_command_params = params.splitString('|');
103 }
104 const Buffer<String>& params() const
105 {
106 return m_command_params;
107 }
108 const Buffer<String>& undoParams(const UUID& uuid) const
109 {
110 auto iter = m_undo_params.find(uuid);
111 if (iter == m_undo_params.end())
112 {
113 static Buffer<String> empty;
114 return empty;
115 }
116 return iter.value();
117 }
119 {
120 return m_undo_params;
121 }
123 {
124 return m_undo_params;
125 }
126 template<class t_arg_type>
127 void setUndoParams(const UUID& uuid, const t_arg_type& params)
128 {
129 if(!m_undo_params.hasKey(uuid))
130 m_undo_params.insert({ uuid, {String(params)} });
131 }
132 template<class t_arg_type_a, class t_arg_type_b>
133 void setUndoParams(const UUID& uuid, const t_arg_type_a& param_a, const t_arg_type_b& param_b)
134 {
135 if (!m_undo_params.hasKey(uuid))
136 m_undo_params.insert({ uuid, {String(param_a), String(param_b)} });
137 }
138 template<class t_arg_type_a, class t_arg_type_b, class t_arg_type_c>
139 void setUndoParams(const UUID& uuid, const t_arg_type_a& param_a, const t_arg_type_b& param_b, const t_arg_type_c& param_c)
140 {
141 if (!m_undo_params.hasKey(uuid))
142 m_undo_params.insert({ uuid, {String(param_a), String(param_b), String(param_c)} });
143 }
144 bool hasUndo(const UUID& uuid) const
145 {
146 return m_undo_params.hasKey(uuid);
147 }
148 void execute(DesignObjectLookup* lookup) override;
149 bool canGroupWith(const DynamicPointer<DesignCommand>& command) override;
150 bool canCombineWith(const DynamicPointer<DesignCommand>& command) override;
151 void combineWith(const DynamicPointer<DesignCommand>& command) override;
152 void removeUndo(const UUID& uuid)
153 {
154 m_undo_params.erase(uuid);
155 }
156
157
159 {
160 return new ManagedDesignCommand(e_place_object, transform);
161 }
163 {
164 return new ManagedDesignCommand(e_set_transform, transform);
165 }
166 template<class t_type>
168 {
169 return new ManagedDesignCommand(e_set_geometry_property, geo_property, value);
170 }
171 template<class t_type>
173 {
174 return new ManagedDesignCommand(e_set_material_property, mat_property, value);
175 }
176 template<class t_type>
178 {
179 return new ManagedDesignCommand(e_set_model_property, mod_property, value);
180 }
182 {
183 return new ManagedDesignCommand(e_set_model_material_mode, property, mode);
184 }
185 template<class t_type>
186 static DynamicPointer<DesignCommand> SetProperty(DesignObject::DesignProperty design_property, const t_type& value)
187 {
188 return new ManagedDesignCommand(e_set_design_property, design_property, value);
189 }
195 {
196 return new ManagedDesignCommand(e_create_geometry, name);
197 }
199 {
200 return new ManagedDesignCommand(e_create_material, name);
201 }
203 {
204 return new ManagedDesignCommand(e_validate);
205 }
207 {
208 return new ManagedDesignCommand(e_scale_object, Vector<3, fltp08>(scale));
209 }
211 {
212 return new ManagedDesignCommand(e_scale_object, scale);
213 }
214 static DynamicPointer<DesignCommand> ScaleObject(const fltp08& scale, const Vector<3, fltp08>& scale_center)
215 {
216 return new ManagedDesignCommand(e_scale_object, Vector<3, fltp08>(scale), scale_center);
217 }
219 {
220 return new ManagedDesignCommand(e_scale_object, scale, scale_center);
221 }
223 {
224 return new ManagedDesignCommand(e_set_real_thickness, real_thickness);
225 }
227 {
228 return new ManagedDesignCommand(e_smooth_laplacian, number_of_iterations);
229 }
231 {
232 return new ManagedDesignCommand(e_smooth_cotangent, number_of_iterations);
233 }
234 static DynamicPointer<DesignCommand> SmoothLaplacianCommand(uint04 number_of_iterations, fltp08 shrink_rate, fltp08 grow_rate)
235 {
236 return new ManagedDesignCommand(e_smooth_laplacian, number_of_iterations, shrink_rate, grow_rate);
237 }
238 static DynamicPointer<DesignCommand> SmoothCotangentCommand(uint04 number_of_iterations, fltp08 shrink_rate, fltp08 grow_rate)
239 {
240 return new ManagedDesignCommand(e_smooth_cotangent, number_of_iterations, shrink_rate, grow_rate);
241 }
242 template<class t_type>
243 static DynamicPointer<DesignCommand> UpdateVertex(VertexProperty property, uint04 vertex_id, const t_type& new_location)
244 {
245 return new ManagedDesignCommand(e_update_vertex, property, vertex_id, new_location);
246 }
248 {
249 return new ManagedDesignCommand(e_remove_smoothing);
250 }
252 {
253 return new ManagedDesignCommand(e_remove_duplicates);
254 }
256 {
257 return new ManagedDesignCommand(e_delete_enclosed_area);
258 }
260 {
261 return new ManagedDesignCommand(e_set_UV_mode, uv_type, uv_mode);
262 }
264 {
265 return new ManagedDesignCommand(e_set_UV_color, uv_color);
266 }
268 {
269 return new ManagedDesignCommand(e_set_UV_color, uv_type, uv_color);
270 }
271 static DynamicPointer<DesignCommand> SetUVImage(UVType uv_type, const String& uv_image)
272 {
273 return new ManagedDesignCommand(e_set_UV_image, uv_type, uv_image);
274 }
276 {
277 return new ManagedDesignCommand(e_fill_holes_by_neighbor);
278 }
283 static DynamicPointer<DesignCommand> Group(const String& model_name = String())
284 {
285 return new ManagedDesignCommand(e_group, model_name);
286 }
288 {
289 return new ManagedDesignCommand(e_set_UV_intensity, uv_type, uv_intensity);
290 }
292 {
293 return new ManagedDesignCommand(e_set_UV_property_channel, uv_type, uv_channel);
294 }
296 {
297 return new ManagedDesignCommand(e_color_by_channel, vertex_channel);
298 }
300 {
301 return new ManagedDesignCommand(e_set_winding_mode, mode);
302 }
304 {
305 return new ManagedDesignCommand(e_make_closed_solid, is_closed_solid);
306 }
308 {
309 return new ManagedDesignCommand(e_set_normal_mode, mode);
310 }
312 {
313 return new ManagedDesignCommand(e_set_active_filters, filters);
314 }
316 {
317 return new ManagedDesignCommand(e_add_active_filters, filters);
318 }
319 static DynamicPointer<DesignCommand> AutoRegister(const String& filters, const UUID& reference)
320 {
321 return new ManagedDesignCommand(e_auto_register, reference, filters);
322 }
324 {
325 return new ManagedDesignCommand(e_remove_filter, index);
326 }
328 {
329 return new ManagedDesignCommand(e_set_normal_mode, mode, smooth_angle);
330 }
331 static DynamicPointer<DesignCommand> CalibrateScan(bool calibrate_yaw, InterpolationValues value = InterpolationValues::e_linear)
332 {
333 return new ManagedDesignCommand(e_calibrate_scan, calibrate_yaw, value);
334 }
335 static DynamicPointer<DesignCommand> CalibrateScan(Angle<fltp08> angle, bool calibrate_yaw, InterpolationValues value = InterpolationValues::e_linear)
336 {
337 return new ManagedDesignCommand(e_calibrate_scan, angle, calibrate_yaw, value);
338 }
339 static DynamicPointer<DesignCommand> CalculateTangents(bool calc_tangent, bool calc_bitangent)
340 {
341 return new ManagedDesignCommand(e_calculate_tangents, calc_tangent, calc_bitangent);
342 }
344 {
345 return new ManagedDesignCommand(e_slice_into_polylines, transform, spacing);
346 }
348 {
349 return new ManagedDesignCommand(e_flip_normals);
350 }
352 {
353 return new ManagedDesignCommand(e_append_data, info);
354 }
355 static DynamicPointer<DesignCommand> SetMetadata(const String& label, const String& value)
356 {
357 return new ManagedDesignCommand(e_set_metadata, label, value);
358 }
360 {
361 return new ManagedDesignCommand(e_clear_all);
362 }
364 {
365 String name = this->name().translation("en_US");
366 if (targets.size() > 0)
367 {
368 name.add('[');
369 for (const UUID& target_id : targets)
370 {
371 name += String(target_id) + ",";
372 }
373 name.last() = ']';
374 }
375 else
376 {
377 name.append("[]");
378 }
379 if (params().size() > 0)
380 {
381 name.add('(');
382 for (const String& param : params())
383 {
384 name += String(param) + "|";
385 }
386 name.last() = ')';
387 }
388 else
389 {
390 name.append("()");
391 }
392 return name;
393 }
394 virtual TranslatedString name() const override;
395 virtual String icon() const override;
396 void deleteEnclosedSelection(DesignObjectLookup* lookup);
400 };
402}
#define NDEVR_DESIGN_API
Definition DLLInfo.h:77
#define NDEVR_DESIGN_T_API
Definition DLLInfo.h:78
Stores an angle in an optimized format.
Definition StringStream.h:352
The equivelent of std::vector but with a bit more control. The basic array unit of the library.
Definition Buffer.hpp:64
void add(t_type &&object)
Definition Buffer.hpp:199
decltype(auto) last()
Definition Buffer.hpp:977
Definition DesignCommand.h:46
DesignProperty
Definition DesignObject.h:94
Definition DesignObjectLookup.h:61
Definition Dictionary.h:48
Definition Pointer.hpp:303
GeometryProperty
Definition Geometry.h:99
Definition ManagedDesignCommand.h:10
static DynamicPointer< DesignCommand > SetUVColor(const RGBColor &uv_color)
Definition ManagedDesignCommand.h:263
static DynamicPointer< DesignCommand > Explode()
Definition ManagedDesignCommand.h:279
const Dictionary< UUID, Buffer< String > > & undoParams() const
Definition ManagedDesignCommand.h:118
static DynamicPointer< DesignCommand > CalculateTangents(bool calc_tangent, bool calc_bitangent)
Definition ManagedDesignCommand.h:339
static DynamicPointer< DesignCommand > SetUVImage(UVType uv_type, const String &uv_image)
Definition ManagedDesignCommand.h:271
static DynamicPointer< DesignCommand > ScaleObject(const fltp08 &scale)
Definition ManagedDesignCommand.h:206
static DynamicPointer< DesignCommand > SetMaterialProperty(Material::MaterialProperties mat_property, const t_type &value)
Definition ManagedDesignCommand.h:172
static DynamicPointer< DesignCommand > SetMetadata(const String &label, const String &value)
Definition ManagedDesignCommand.h:355
static DynamicPointer< DesignCommand > ValidateCommand()
Definition ManagedDesignCommand.h:202
Buffer< String > m_command_params
Definition ManagedDesignCommand.h:398
CommandType
Definition ManagedDesignCommand.h:13
static DynamicPointer< DesignCommand > SmoothCotangentCommand(uint04 number_of_iterations)
Definition ManagedDesignCommand.h:230
static DynamicPointer< DesignCommand > SetWindingMode(WindingMode mode)
Definition ManagedDesignCommand.h:299
String toString() const
Definition ManagedDesignCommand.h:363
static DynamicPointer< DesignCommand > RemoveSmoothingCommand()
Definition ManagedDesignCommand.h:247
CommandType command_type
Definition ManagedDesignCommand.h:397
static DynamicPointer< DesignCommand > ClearAll()
Definition ManagedDesignCommand.h:359
static DynamicPointer< DesignCommand > SetProperty(DesignObject::DesignProperty design_property, const t_type &value)
Definition ManagedDesignCommand.h:186
static DynamicPointer< DesignCommand > SliceIntoPolylines(const Matrix< fltp08 > &transform, const Vector< 3, fltp08 > &spacing)
Definition ManagedDesignCommand.h:343
static DynamicPointer< DesignCommand > UpdateVertex(VertexProperty property, uint04 vertex_id, const t_type &new_location)
Definition ManagedDesignCommand.h:243
bool hasUndo(const UUID &uuid) const
Definition ManagedDesignCommand.h:144
static DynamicPointer< DesignCommand > SetUVIntensity(UVType uv_type, fltp08 uv_intensity)
Definition ManagedDesignCommand.h:287
static DynamicPointer< DesignCommand > ScaleObject(const Vector< 3, fltp08 > &scale)
Definition ManagedDesignCommand.h:210
static DynamicPointer< DesignCommand > SetNormalMode(NormalMode mode, Angle< fltp08 > smooth_angle)
Definition ManagedDesignCommand.h:327
static DynamicPointer< DesignCommand > SetUVPropertyChannel(UVType uv_type, String uv_channel)
Definition ManagedDesignCommand.h:291
static DynamicPointer< DesignCommand > SetRealThickness(fltp08 real_thickness)
Definition ManagedDesignCommand.h:222
static DynamicPointer< DesignCommand > SetModelProperty(Model::ModelProperty mod_property, const t_type &value)
Definition ManagedDesignCommand.h:177
static DynamicPointer< DesignCommand > Delete()
Definition ManagedDesignCommand.h:190
void setUndoParams(const UUID &uuid, const t_arg_type &params)
Definition ManagedDesignCommand.h:127
static DynamicPointer< DesignCommand > MakeClosedSolid(bool is_closed_solid)
Definition ManagedDesignCommand.h:303
static DynamicPointer< DesignCommand > ScaleObject(const fltp08 &scale, const Vector< 3, fltp08 > &scale_center)
Definition ManagedDesignCommand.h:214
static DynamicPointer< DesignCommand > SetModelMaterialMode(PrimitiveProperty property, Model::MaterialMode mode)
Definition ManagedDesignCommand.h:181
static DynamicPointer< DesignCommand > CreateGeometry(const String &name="")
Definition ManagedDesignCommand.h:194
static DynamicPointer< DesignCommand > PlaceObject(const Matrix< fltp08 > &transform)
Definition ManagedDesignCommand.h:158
const Buffer< String > & params() const
Definition ManagedDesignCommand.h:104
static DynamicPointer< DesignCommand > SetNormalMode(NormalMode mode)
Definition ManagedDesignCommand.h:307
static DynamicPointer< DesignCommand > RemoveDuplicateVertices()
Definition ManagedDesignCommand.h:251
static DynamicPointer< DesignCommand > SmoothCotangentCommand(uint04 number_of_iterations, fltp08 shrink_rate, fltp08 grow_rate)
Definition ManagedDesignCommand.h:238
ManagedDesignCommand(CommandType command, const t_arg_type &param_a)
Definition ManagedDesignCommand.h:71
static DynamicPointer< DesignCommand > SmoothLaplacianCommand(uint04 number_of_iterations)
Definition ManagedDesignCommand.h:226
static DynamicPointer< DesignCommand > SendInfo(const String &info)
Definition ManagedDesignCommand.h:351
static DynamicPointer< DesignCommand > SetTransform(const Matrix< fltp08 > &transform)
Definition ManagedDesignCommand.h:162
static DynamicPointer< DesignCommand > Group(const String &model_name=String())
Definition ManagedDesignCommand.h:283
static DynamicPointer< DesignCommand > SetUVColor(UVType uv_type, const RGBColor &uv_color)
Definition ManagedDesignCommand.h:267
static DynamicPointer< DesignCommand > SetActiveFilters(const String &filters)
Definition ManagedDesignCommand.h:311
const Buffer< String > & undoParams(const UUID &uuid) const
Definition ManagedDesignCommand.h:108
void setUndoParams(const UUID &uuid, const t_arg_type_a &param_a, const t_arg_type_b &param_b)
Definition ManagedDesignCommand.h:133
static DynamicPointer< DesignCommand > AutoRegister(const String &filters, const UUID &reference)
Definition ManagedDesignCommand.h:319
static DynamicPointer< DesignCommand > SetUVMode(UVType uv_type, Material::UVMode uv_mode)
Definition ManagedDesignCommand.h:259
void setParams(const String &params)
Definition ManagedDesignCommand.h:100
static DynamicPointer< DesignCommand > RemoveActiveFilter(const uint04 &index)
Definition ManagedDesignCommand.h:323
static DynamicPointer< DesignCommand > FillHolesByNeighbor()
Definition ManagedDesignCommand.h:275
static DynamicPointer< DesignCommand > CalibrateScan(bool calibrate_yaw, InterpolationValues value=InterpolationValues::e_linear)
Definition ManagedDesignCommand.h:331
Dictionary< UUID, Buffer< String > > m_undo_params
Definition ManagedDesignCommand.h:399
static DynamicPointer< DesignCommand > SetGeometryProperty(Geometry::GeometryProperty geo_property, const t_type &value)
Definition ManagedDesignCommand.h:167
static DynamicPointer< DesignCommand > FlipNormals()
Definition ManagedDesignCommand.h:347
static DynamicPointer< DesignCommand > ColorByChannel(String vertex_channel)
Definition ManagedDesignCommand.h:295
ManagedDesignCommand(CommandType command, const t_arg_type_a &param_a, const t_arg_type_b &param_b, const t_arg_type_c &param_c)
Definition ManagedDesignCommand.h:83
static DynamicPointer< DesignCommand > CreateMaterial(const String &name="")
Definition ManagedDesignCommand.h:198
ManagedDesignCommand(CommandType command, const t_arg_type_a &param_a, const t_arg_type_b &param_b, const t_arg_type_c &param_c, const t_arg_type_d &param_d)
Definition ManagedDesignCommand.h:89
static DynamicPointer< DesignCommand > AddActiveFilters(const String &filters)
Definition ManagedDesignCommand.h:315
static DynamicPointer< DesignCommand > DeleteEnclosedArea()
Definition ManagedDesignCommand.h:255
static DynamicPointer< DesignCommand > CalibrateScan(Angle< fltp08 > angle, bool calibrate_yaw, InterpolationValues value=InterpolationValues::e_linear)
Definition ManagedDesignCommand.h:335
static DynamicPointer< DesignCommand > ScaleObject(const Vector< 3, fltp08 > &scale, const Vector< 3, fltp08 > &scale_center)
Definition ManagedDesignCommand.h:218
Dictionary< UUID, Buffer< String > > undoParams()
Definition ManagedDesignCommand.h:122
void setParams(const Buffer< String > &params)
Definition ManagedDesignCommand.h:96
void setUndoParams(const UUID &uuid, const t_arg_type_a &param_a, const t_arg_type_b &param_b, const t_arg_type_c &param_c)
Definition ManagedDesignCommand.h:139
static DynamicPointer< DesignCommand > SmoothLaplacianCommand(uint04 number_of_iterations, fltp08 shrink_rate, fltp08 grow_rate)
Definition ManagedDesignCommand.h:234
void removeUndo(const UUID &uuid)
Definition ManagedDesignCommand.h:152
ManagedDesignCommand(CommandType command, const t_arg_type_a &param_a, const t_arg_type_b &param_b)
Definition ManagedDesignCommand.h:77
MaterialProperties
Definition Material.h:108
UVMode
Definition Material.h:68
Definition Matrix.hpp:173
MaterialMode
Definition Model.h:57
ModelProperty
Definition Model.h:99
Represents a color in the RGB space with optional alpha transparency.
Definition RGBColor.h:53
Definition String.h:40
NDEVR_BASE_API Buffer< String, uint04, ObjectAllocator< false > > splitString(char delimiter, bool preserve_empty=true) const
Definition String.cpp:57
NDEVR_BASE_API String & append(const String &string)
Definition String.cpp:484
Definition StringStream.h:62
Definition TranslatedString.h:9
Definition UUID.h:66
An element of a vector space. An element of the real coordinate space Rn Basis vector,...
Definition Vector.hpp:62
Definition ACIColor.h:37
NormalMode
Definition DesignObjectBase.h:105
VertexProperty
Definition DesignObjectBase.h:52
PrimitiveProperty
Definition DesignObjectBase.h:44
InterpolationValues
Values that represent interpolation functions. Useful in large or complicated geological or time.
Definition BaseValues.hpp:255
WindingMode
Definition DesignObjectBase.h:97
uint32_t uint04
-Defines an alias representing a 4 byte, unsigned integer -Can represent exact integer values 0 throu...
Definition BaseValues.hpp:120
double fltp08
Defines an alias representing an 8 byte floating-point number.
Definition BaseValues.hpp:181
UVType
Definition DesignObjectBase.h:127