< Home

< Table of Contents

REFERENCE MANUAL

sprk_ops.h
1 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc.
2 //
3 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc.,
4 // and considered a trade secret as defined under civil and criminal statutes.
5 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of
6 // unauthorized use or misappropriation of its trade secrets. Use of this information
7 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under
8 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use.
9 
10 #ifndef SPRK_STD_OPERATORS_H
11 #define SPRK_STD_OPERATORS_H
12 
13 #include "sprk.h"
14 
15 #include <list>
16 #include <stack>
17 
18 #ifdef _MSC_VER
19 #ifndef STATIC_APP
20 # ifdef SPROCKETS
21 # define SPRK_API __declspec (dllexport)
22 # else
23 # define SPRK_API __declspec (dllimport)
24 # endif
25 #endif
26 #else
27 # include <stddef.h>
28 # if defined(LINUX_SYSTEM) && defined(SPROCKETS)
29 # ifndef STATIC_APP
30 # define SPRK_API __attribute__ ((visibility ("default")))
31 # endif
32 # endif
33 #endif
34 
35 #ifndef SPRK_API
36 # define SPRK_API
37 #endif
38 
39 
40 namespace HPS
41 {
42 
54 class SPRK_API PanOrbitZoomOperator : public Operator
55 {
56 public:
57  PanOrbitZoomOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
59  virtual UTF8 GetName() const { return "HPS_PanOrbitZoomOperator"; }
60 
65  virtual bool OnMouseDown(MouseState const & in_state);
70  virtual bool OnMouseUp(MouseState const & in_state);
75  virtual bool OnMouseMove(MouseState const & in_state);
76 
81  virtual bool OnTouchDown(TouchState const & in_state);
86  virtual bool OnTouchUp(TouchState const & in_state);
91  virtual bool OnTouchMove(TouchState const & in_state);
92 
93 private:
94  WorldPoint start;
95 
96  WindowPoint start_point, new_point;
97  Vector start_sphere_pos, new_sphere_pos;
98 
99  bool operator_active;
100  float zoom_limit;
101  float focal_length;
102  WindowPoint last_zoom;
103  Vector last_relative;
104  float zoom_start_field_width;
105  float zoom_start_field_height;
106  Vector zoom_start_camera_look;
107 
108  void ZoomStart();
109  void UpdateZoom(float zoom_factor);
110  void UpdateZoomLimit();
111  void UpdatePan(WorldPoint const & newLocation);
112  void UpdateRoll(Vector const & relative);
113 };
114 
122 class SPRK_API PanOperator : public Operator
123 {
124 public:
125  PanOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
127  virtual UTF8 GetName() const { return "HPS_PanOperator"; }
128 
133  virtual bool OnMouseDown(MouseState const & in_state);
138  virtual bool OnMouseUp(MouseState const & in_state);
143  virtual bool OnMouseMove(MouseState const & in_state);
144 
149  virtual bool OnTouchDown(TouchState const & in_state);
154  virtual bool OnTouchUp(TouchState const & in_state);
159  virtual bool OnTouchMove(TouchState const & in_state);
160 
161 private:
162  bool PanCommon(WindowPoint const & in_loc, KeyPath const & in_key_path);
163 
164  bool operator_active;
165  TouchID tracked_touch_ID;
166  WorldPoint start;
167 };
168 
176 class SPRK_API OrbitOperator : public Operator
177 {
178 public:
179  OrbitOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
181  virtual UTF8 GetName() const { return "HPS_OrbitOperator"; }
182 
187  virtual bool OnMouseDown(MouseState const & in_state);
192  virtual bool OnMouseUp(MouseState const & in_state);
197  virtual bool OnMouseMove(MouseState const & in_state);
198 
203  virtual bool OnTouchDown(TouchState const & in_state);
208  virtual bool OnTouchUp(TouchState const & in_state);
213  virtual bool OnTouchMove(TouchState const & in_state);
214 
215 private:
216  bool OrbitCommon(WindowPoint const & in_loc);
217 
218  bool operator_active;
219  TouchID tracked_touch_ID;
220  WindowPoint start_point, new_point;
221  Vector start_sphere_pos, new_sphere_pos;
222 };
223 
224 
225 class SPRK_API RelativeOrbitOperator : public Operator
226 {
227 
228 public:
235  RelativeOrbitOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonMiddle(), ModifierKeys in_modifier_trigger = ModifierKeys());
236  virtual UTF8 GetName() const { return "HPS_RelativeOrbitOperator"; }
237 
238  virtual bool OnMouseDown(MouseState const & in_state);
239  virtual bool OnMouseUp(MouseState const & in_state);
240  virtual bool OnMouseMove(MouseState const & in_state);
241 
242  virtual bool OnTouchDown(TouchState const & in_state);
243  virtual bool OnTouchUp(TouchState const & in_state);
244  virtual bool OnTouchMove(TouchState const & in_state);
245 
246 private:
247  bool OrbitCommon(WindowPoint const & in_loc);
248 
249  Point fauxTarget;
250  bool operator_active;
251  TouchID tracked_touch_ID;
252  Vector start_sphere_pos, new_sphere_pos;
253  WindowPoint start_point, new_point;
254 };
255 
263 class SPRK_API ZoomOperator : public Operator
264 {
265 public:
266  ZoomOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
268  virtual UTF8 GetName() const { return "HPS_ZoomOperator"; }
269 
274  virtual bool OnMouseDown(MouseState const & in_state);
279  virtual bool OnMouseUp(MouseState const & in_state);
284  virtual bool OnMouseMove(MouseState const & in_state);
285 
290  virtual bool OnTouchDown(TouchState const & in_state);
295  virtual bool OnTouchMove(TouchState const & in_state);
296 
297 private:
298  bool operator_active;
299  TouchID tracked_touch_ID;
300  WindowPoint start_point;
301  float zoom_limit;
302  float focal_length;
303  WindowPoint last_zoom;
304  Vector last_relative;
305  float zoom_start_field_width;
306  float zoom_start_field_height;
307  Vector zoom_start_camera_look;
308  Point zoom_start_camera_target;
309 
310  void ZoomStart();
311  void UpdateZoom(float zoom_factor);
312  void UpdateZoomLimit();
313 };
314 
315 
316 class SPRK_API ConstructRectangleOperator : public Operator
317 {
318 public:
319  ConstructRectangleOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys(), bool draw_faces = false);
320  virtual UTF8 GetName() const { return "HPS_ConstructRectangleOperator"; }
321 
322  virtual void OnViewAttached();
323 
324  virtual bool OnMouseDown(MouseState const & in_state);
325  virtual bool OnMouseUp(MouseState const & in_state);
326  virtual bool OnMouseMove(MouseState const & in_state);
327 
328  virtual bool OnTouchDown(TouchState const & in_state);
329  virtual bool OnTouchUp(TouchState const & in_state);
330  virtual bool OnTouchMove(TouchState const & in_state);
331 
332  bool IsRectangleValid() const { return is_rect_valid; }
333 
335  Rectangle GetRectangle() const { return rect; }
336 
337 private:
338  bool ConstructRectCommon(WindowPoint const & in_loc);
339  void SetupConstructionSegment();
340 
341  bool draw_faces;
342  bool use_center_marker;
343  bool is_rect_valid;
344  bool operator_active;
345  WindowPoint start_point;
346  SegmentKey scratch_seg;
347  Rectangle rect;
348  LineKey temp_line_key;
349  PolygonKey temp_polygon_key;
350  MarkerKey temp_marker_key;
351  TouchID tracked_touch_ID;
352 };
353 
355 {
356 public:
357  ZoomBoxOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
358  virtual UTF8 GetName() const { return "HPS_ZoomBoxOperator"; }
359 
360  virtual bool OnMouseUp(MouseState const & in_state);
361  virtual bool OnTouchUp(TouchState const & in_state);
362 
363 private:
364  bool ZoomCommon(WindowKey const & in_window, KeyPath const & in_event_path);
365 
366 };
367 
378 {
379 public:
392  SelectAreaOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
393 
394  virtual UTF8 GetName() const { return "HPS_SelectAreaOperator"; }
395 
396  virtual void OnViewAttached();
397 
398  virtual bool OnMouseUp(MouseState const & in_state);
399  virtual bool OnTouchUp(TouchState const & in_state);
400 
405  SelectionResults GetActiveSelection() const;
406 
412  void SetSelectionOptions(SelectionOptionsKit const & in_options) { selection_options = in_options; }
413 
417  SelectionOptionsKit GetSelectionOptions() const { return selection_options; }
418 
419 private:
420  bool SelectCommon(WindowKey & in_window, ModifierKeys in_modifiers = ModifierKeys());
421 
422  SelectionResults active_selection;
423  SelectionOptionsKit selection_options;
424 };
425 
426 
428 {
429 public:
436  HighlightAreaOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
437 
438  virtual UTF8 GetName() const { return "HPS_HighlightAreaOperator"; }
439 
440  virtual void OnViewAttached();
441 
442  virtual bool OnMouseUp(MouseState const & in_state);
443  virtual bool OnTouchUp(TouchState const & in_state);
444 
450  void SetHighlightOptions(HighlightOptionsKit const & in_options) { highlight_options = in_options; }
451 
455  HighlightOptionsKit GetHighlightOptions() const { return highlight_options; }
456 
457 private:
458  bool HighlightCommon(WindowKey & in_window, ModifierKeys in_modifiers);
459 
460  HighlightOptionsKit highlight_options;
461 
462 };
463 
464 
474 class SPRK_API SelectOperator : public Operator
475 {
476 public:
489  SelectOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
490 
491  virtual UTF8 GetName() const { return "HPS_SelectOperator"; }
492 
493  virtual bool OnMouseDown(MouseState const & in_state);
494  virtual bool OnTouchDown(TouchState const & in_state);
495 
500  SelectionResults GetActiveSelection() const;
501 
505  void SetSelectionOptions(SelectionOptionsKit const & in_options) { selection_options = in_options; }
506 
510  SelectionOptionsKit GetSelectionOptions() const { return selection_options; }
511 
512 private:
513  bool SelectCommon(Point const & in_loc, WindowKey & in_window, ModifierKeys in_modifiers = ModifierKeys());
514 
515  SelectionResults active_selection;
516  SelectionOptionsKit selection_options;
517 };
518 
519 
520 class SPRK_API HighlightOperator : public SelectOperator
521 {
522 public:
527  HighlightOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
528 
529  virtual UTF8 GetName() const { return "HPS_HighlightOperator"; }
530 
531  virtual bool OnMouseDown(MouseState const & in_state);
532  virtual bool OnTouchDown(TouchState const & in_state);
533 
537  void SetHighlightOptions(HighlightOptionsKit const & in_options) { highlight_options = in_options; }
538 
542  HighlightOptionsKit GetHighlightOptions() const { return highlight_options; }
543 
544 private:
545  bool HighlightCommon(WindowKey & in_window, ModifierKeys in_modifiers);
546 
547  HighlightOptionsKit highlight_options;
548 };
549 
550 class SPRK_API MouseWheelOperator : public Operator
551 {
552 public:
553  enum class ZoomType
554  {
555  Fast,
556  Accurate,
557  };
558 
563  MouseWheelOperator(ZoomType in_default_type = ZoomType::Accurate, ModifierKeys in_alternate_type_modifiers = ModifierKeys::KeyControl());
564 
565  virtual UTF8 GetName() const { return "HPS_MouseWheelOperator"; }
566 
568  void UpdateZoomLimit();
569 
570  virtual bool OnMouseWheel(MouseState const & in_state);
571 
572  virtual void OnModelAttached();
573 
574 private:
575  float zoom_limit;
576  ZoomType zoom_type;
577  ModifierKeys zoom_modifier;
578 };
579 
591 class SPRK_API TurntableOperator : public Operator
592 {
593 public:
594  TurntableOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
596  virtual UTF8 GetName() const { return "HPS_TurntableOperator"; }
597 
603  virtual bool OnMouseDown(MouseState const & in_state);
608  virtual bool OnMouseUp(MouseState const & in_state);
613  virtual bool OnMouseMove(MouseState const & in_state);
618  virtual bool OnMouseWheel(MouseState const & in_state);
619 
625  virtual bool OnTouchDown(TouchState const & in_state);
630  virtual bool OnTouchUp(TouchState const & in_state);
636  virtual bool OnTouchMove(TouchState const & in_state);
637 
638 private:
639  void TurntableCommon(WindowPoint const & delta, Vector const & rotation_axis);
640  void CalculateCenterPoint(WindowKey const & window, Point const & location);
641 
642  bool operator_active;
643  bool center_point_set;
644  WorldPoint center_point;
645  TouchID tracked_touch_ID;
646  WindowPoint start_point;
647 };
648 
654 class SPRK_API ZoomFitTouchOperator : public Operator
655 {
656 public:
659  virtual UTF8 GetName() const { return "HPS_ZoomFitTouchOperator"; }
660 
665  virtual bool OnTouchDown(TouchState const & in_state);
670  virtual bool OnTouchUp(TouchState const & in_state);
671 
672 private:
673  TouchID tracked_touch_ID;
674 };
675 
698 class SPRK_API FlyOperator : public Operator
699 {
700 public:
701  FlyOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonRight(), ModifierKeys in_modifier_trigger = ModifierKeys());
703  virtual UTF8 GetName() const { return "HPS_FlyOperator"; }
704 
719  virtual bool OnKeyDown(KeyboardState const & in_state);
723  virtual bool OnKeyUp(KeyboardState const & in_state);
724 
729  virtual bool OnMouseDown(MouseState const & in_state);
733  virtual bool OnMouseUp(MouseState const & in_state);
738  virtual bool OnMouseMove(MouseState const & in_state);
744  virtual bool OnMouseWheel(MouseState const & in_state);
745 
750  virtual bool OnTouchDown(TouchState const & in_state);
754  virtual bool OnTouchUp(TouchState const & in_state);
759  virtual bool OnTouchMove(TouchState const & in_state);
760 
765  virtual bool OnTimerTick(TimerTickEvent const & in_event);
766 
767  virtual void OnModelAttached();
768  virtual void OnViewAttached();
769  virtual void OnViewDetached();
770 
771  /* getters/setters for inverting the X and Y axis */
772  void InvertXAxis() { invert_x_axis = !invert_x_axis;}
773  void InvertYAxis() { invert_y_axis = !invert_y_axis;}
774  bool IsXAxisInverted() { return invert_x_axis; }
775  bool IsYAxisInverted() { return invert_y_axis; }
776 
777  /* getters/setters for sensitivity */
778  /* Keyboard sensitivity affects the speed of movement of action triggered from the keyboard, such as walking forward by pressing W */
779  float GetKeyboardSensitivity() { return keyboard_sensitivity; }
780  void SetKeyboardSensitivity(float in_keyboard_sensitivity) { keyboard_sensitivity = in_keyboard_sensitivity; }
781 
782  /* Mouse sensitivity affects the speed of movement of action triggered from the mouse, such as rotating */
783  float GetMouseSensitivity() { return mouse_sensitivity; }
784  void SetMouseSensitivity(float in_mouse_sensitivity) { mouse_sensitivity = in_mouse_sensitivity; }
785 
786  /* Left Joystick sensitivity affects the speed of movement of action triggered from the left joystick on touch devices */
787  float GetLeftJoystickSensitivity() { return left_joystick_sensitivity; }
788  void SetLeftJoystickSensitivity(float in_left_joystick_sensitivity) { left_joystick_sensitivity = in_left_joystick_sensitivity; }
789 
790  /* Right Joystick sensitivity affects the speed of movement of action triggered from the right joystick on touch devices */
791  float GetRightJoystickSensitivity() { return right_joystick_sensitivity; }
792  void SetRightJoystickSensitivity(float right_joystick_sensitivity) { right_joystick_sensitivity = right_joystick_sensitivity; }
793 
794  /* getters/setters for joystick dead zone
795  The dead zone is an area around the initial touch down position where the user can move its finger
796  without triggering any movement.
797  The default value is 0.07. */
798  float GetJoystickDeadZone() { return joystick_dead_zone; }
799  void SetJoystickDeadZone(float in_dead_zone) { joystick_dead_zone = in_dead_zone; }
800 
801 protected:
802 
803  enum MovementFlags
804  {
805  no_movement = 0x0000,
806  moving_forward = 0x0001,
807  moving_back = 0x0002,
808  moving_left = 0x0004,
809  moving_right = 0x0008,
810  moving_up = 0x0010,
811  moving_down = 0x0020,
812  roll_left = 0x0040,
813  roll_right = 0x0080,
814  rotating = 0x0100,
815  move_with_touch = 0x0200,
816  rotate_with_touch = 0x0400
817  };
818 
819  unsigned int movement_flags;
820 
821  //movement functions
822  void MoveLeft(Point & position, Point & target, Vector & up);
823  void MoveRight(Point & position, Point & target, Vector & up);
824  void MoveUp(Point & position, Point & target, Vector & up);
825  void MoveDown(Point & position, Point & target, Vector & up);
826  void MoveForward(Point & position, Point & target, Vector const & direction);
827  void MoveBack(Point & position, Point & target, Vector const & direction);
828  void MoveWithTouch(Point & position, Point & target, Vector & up, Vector const & walking_direction);
829  void RotateScene(Point & position, Point & target);
830  void RotateWithTouch(Point & position, Point & target);
831  void RotateCommon(Point const & delta, Point & position, Point & target);
832 
833 private:
834 
835  enum class TouchPosition
836  {
837  Left,
838  Right,
839  None
840  };
841 
842  //touch IDs tracked by the operator
843  TouchID left_side_touch;
844  TouchID right_side_touch;
845  TouchID second_right_touch;
846 
847  //current and start location for touch operations
848  WindowPoint start_point;
849  WindowPoint left_start_point;
850  WindowPoint right_start_point;
851  WindowPoint current_right_touch_position;
852  WindowPoint second_right_start_point;
853  WindowPoint current_second_right_touch_position;
854  WindowPoint start_mid_point;
855 
856  //virtual joystick information
857  SegmentKey left_joystick_segment;
858  SegmentKey right_joystick_segment;
859  float joystick_dead_zone;
860 
861  //step length for left touch, right touch, and desktop operation
862  float keyboard_sensitivity;
863  float old_keyboard_sensitivity;
864  float left_joystick_sensitivity;
865  float old_left_joystick_sensitivity;
866  float right_joystick_sensitivity;
867  float old_right_joystick_sensitivity;
868  float mouse_sensitivity;
869 
870  //operator state flags
871  bool two_right_fingers_down;
872  bool invert_x_axis;
873  bool invert_y_axis;
874  Drawing::Handedness world_handedness;
875  bool shift_pressed;
876  bool ctrl_pressed;
877  KeyPath event_path;
878  WindowPoint rotation_location;
879  WindowPoint moving_position;
880 
881  //utility functions
882  void UpdateKeyboardState(KeyboardState const & in_state);
883  void ComputeReasonableStepLength();
884  void CreateJoystick(TouchState const & in_state, TouchPosition touch_position);
885 };
886 
918 class SPRK_API WalkOperator : public FlyOperator
919 {
920 public:
921  WalkOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonRight(), ModifierKeys in_modifier_trigger = ModifierKeys());
922 
924  virtual UTF8 GetName() const { return "HPS_WalkOperator"; }
925 
926  virtual void OnViewAttached();
927 
932  virtual bool OnTimerTick(TimerTickEvent const & in_event);
933 
934  /* Getters / Setters for the plane the operator walks on. */
935  void SetGroundPlane(Plane const & in_plane) { ground = in_plane; }
936  Plane GetGroundPlane() { return ground; }
937 
938  /* Getters / Setters for camera vertical offset from the ground plane */
939  void SetWalkerHeight(float height) { height_off_ground = height; }
940  float GetWalkerHeight() { return height_off_ground; }
941 
942 private:
943  Plane ground;
944  Vector walking_direction;
945  float height_off_ground;
946 
947  void CalculateGroundPlane();
948  void SnapToPlane();
949  void AdjustWalkingDirection(Vector const & camera_direction, Vector const & camera_up);
950 };
951 
961 class SPRK_API SimpleWalkOperator : public WalkOperator
962 {
963 public:
964  SimpleWalkOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
965 
967  virtual UTF8 GetName() const { return "HPS_SimpleWalkOperator"; }
968 
972  virtual bool OnKeyDown(KeyboardState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
976  virtual bool OnKeyUp(KeyboardState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
981  virtual bool OnMouseWheel(MouseState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
982 
987  virtual bool OnMouseDown(MouseState const & in_state);
992  virtual bool OnMouseMove(MouseState const & in_state);
996  virtual bool OnMouseUp(MouseState const & in_state);
997 
1002  virtual bool OnTouchDown(TouchState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
1007  virtual bool OnTouchMove(TouchState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
1011  virtual bool OnTouchUp(TouchState const & in_state) { HPS_UNREFERENCED(in_state); return false; }
1012 
1017  virtual bool OnTimerTick(TimerTickEvent const & in_event);
1018 
1019 private:
1020  void MoveWithMouse(Point & position, Point & target);
1021 
1022  KeyPath event_path;
1023  WindowPoint rotation_location;
1024  WindowPoint start_point;
1025  bool moving;
1026 };
1027 
1028 
1087 {
1088 public:
1089  CuttingSectionOperator(MouseButtons in_mouse_trigger = MouseButtons::ButtonLeft(), ModifierKeys in_modifier_trigger = ModifierKeys());
1090 
1092  virtual UTF8 GetName() const { return "HPS_CuttingSectionOperator"; }
1093 
1094  virtual void OnModelAttached();
1095  virtual void OnViewAttached();
1096  virtual void OnViewDetached();
1097 
1098  /* This function programmatically assigns a cutting plane to this operator from a plane equation.
1099  * If this operator has already had a cutting plane associated with it, the cutting plane set using
1100  * this function replaces the previous cutting plane.
1101  * \param in_plane A Plane object describing the cutting plane to be inserted. */
1102  void InsertCuttingPlaneFromEquation(Plane const & in_plane);
1103 
1109  virtual bool OnMouseDown(MouseState const & in_state);
1110 
1114  virtual bool OnMouseUp(MouseState const & in_state);
1115 
1121  virtual bool OnMouseMove(MouseState const & in_state);
1122 
1128  virtual bool OnTouchDown(TouchState const & in_state);
1129 
1133  virtual bool OnTouchUp(TouchState const & in_state);
1134 
1139  virtual bool OnTouchMove(TouchState const & in_state);
1140 
1145  virtual bool OnTimerTick(TimerTickEvent const & in_event);
1146 
1149  float GetIndicatorScale() const { return indicator_scale; }
1150 
1153  void SetIndicatorScale(float in_scale) { indicator_scale = in_scale; }
1154 
1157  MaterialMappingKit GetPlaneMaterial() const { return plane_material; }
1158 
1161  void SetPlaneMaterial(MaterialMappingKit const & in_plane_material);
1162 
1165  HighlightOptionsKit GetPlaneHighlightOptions() const { return highlight_options; }
1166 
1169  void SetPlaneHighlightOptions(HighlightOptionsKit const & in_highlight_options) { highlight_options = in_highlight_options; }
1170 
1173  bool GetMouseOverHighlighting() const { return enable_mouse_over_highlighting; }
1174 
1177  void SetMouseOverHighlighting(bool in_enable_mouse_over_highlighting) { enable_mouse_over_highlighting = in_enable_mouse_over_highlighting; }
1178 
1179 private:
1180 
1181  enum class OpState
1182  {
1183  Uninitialized,
1184  Initialized,
1185  Translating
1186  };
1187 
1188  void InsertNormalIndicator(float scale);
1189  void InsertCuttingPlaneGeometry();
1190  void MouseOverHighlighting(MouseState const & in_state);
1191  void TranslateCuttingPlane(KeyPath const & in_event_path, WindowPoint const & in_event_location);
1192  bool HandleMouseAndTouchDown(WindowKey const & in_event_source, int in_number_of_clicks,
1193  KeyPath const & in_event_path, WindowPoint const & in_event_location);
1194 
1195  TouchID tracked_touch_ID;
1196  CuttingSectionKey section_key;
1197  SegmentKey plane_segment_key;
1198  ShellKey plane_key;
1199  MaterialMappingKit plane_material;
1200  SegmentKey indicator_seg;
1201  OpState op_state;
1202  WorldPoint start_world_point;
1203  SelectionOptionsKit selection_options;
1204  SelectionOptionsKit mouse_over_selection_options;
1205  float indicator_scale;
1206  Vector plane_normal;
1207  bool plane_normal_valid;
1208  WorldPoint anchor_point;
1209  SimpleCuboid model_bounding;
1210 
1211  UpdateNotifier last_highlight_notifier;
1212  bool last_skipped_highlight_state_valid;
1213  MouseState last_skipped_highlight_state;
1214  bool is_plane_highlighted;
1215  PortfolioKey portfolio;
1216  SegmentKey style_segment;
1217  HighlightOptionsKit highlight_options;
1218  bool enable_mouse_over_highlighting;
1219 
1220  View attached_view;
1221  KeyArray navigation_keys;
1222 };
1223 
1224 
1225 
1226 
1227 }
1228 #endif
1229 
1230 
1231 
1232 
Definition: hps.h:5899
Handedness
Definition: hps.h:1261
virtual UTF8 GetName() const
Definition: sprk_ops.h:491
virtual bool OnMouseWheel(MouseState const &in_state)
Definition: sprk_ops.h:981
static MouseButtons ButtonRight()
Definition: hps.h:40582
Definition: sprk_ops.h:961
Definition: sprk_ops.h:263
virtual UTF8 GetName() const
Definition: sprk_ops.h:181
Definition: hps.h:32640
HighlightOptionsKit GetHighlightOptions() const
Definition: sprk_ops.h:455
Definition: sprk_ops.h:377
SelectionOptionsKit GetSelectionOptions() const
Definition: sprk_ops.h:510
virtual UTF8 GetName() const
Definition: sprk_ops.h:967
Definition: hps.h:41012
Definition: hps.h:7136
Definition: sprk_ops.h:54
Definition: hps.h:3348
ZoomType
Definition: sprk_ops.h:553
void SetIndicatorScale(float in_scale)
Definition: sprk_ops.h:1153
virtual UTF8 GetName() const
Definition: sprk_ops.h:236
Definition: hps.h:14414
virtual UTF8 GetName() const
Definition: sprk_ops.h:438
SelectionOptionsKit GetSelectionOptions() const
Definition: sprk_ops.h:417
Definition: sprk_ops.h:591
virtual bool OnTouchDown(TouchState const &in_state)
Definition: sprk_ops.h:1002
void SetPlaneHighlightOptions(HighlightOptionsKit const &in_highlight_options)
Definition: sprk_ops.h:1169
Definition: sprk_ops.h:474
Definition: sprk_ops.h:176
Definition: sprk_ops.h:316
Definition: sprk_ops.h:654
virtual bool OnTouchMove(TouchState const &in_state)
Definition: sprk_ops.h:1007
void SetSelectionOptions(SelectionOptionsKit const &in_options)
Definition: sprk_ops.h:505
Definition: sprk_ops.h:1086
Definition: hps.h:40934
virtual UTF8 GetName() const
Definition: sprk_ops.h:320
Definition: sprk_ops.h:698
Definition: sprk_ops.h:427
virtual UTF8 GetName() const
Definition: sprk_ops.h:394
virtual UTF8 GetName() const
Definition: sprk_ops.h:565
virtual UTF8 GetName() const
Definition: sprk_ops.h:924
virtual UTF8 GetName() const
Definition: sprk_ops.h:127
virtual UTF8 GetName() const
Definition: sprk_ops.h:659
virtual bool OnTouchUp(TouchState const &in_state)
Definition: sprk_ops.h:1011
Definition: hps.h:6647
Definition: hps.h:40460
Definition: hps.h:38319
Definition: hps.h:5603
Definition: hps.h:39649
Definition: hps.h:37671
Definition: hps.h:40856
virtual UTF8 GetName() const
Definition: sprk_ops.h:358
Definition: sprk_ops.h:520
virtual UTF8 GetName() const
Definition: sprk_ops.h:1092
Definition: hps.h:38596
Definition: hps.h:40109
bool GetMouseOverHighlighting() const
Definition: sprk_ops.h:1173
virtual UTF8 GetName() const
Definition: sprk_ops.h:529
Rectangle GetRectangle() const
Definition: sprk_ops.h:335
void SetSelectionOptions(SelectionOptionsKit const &in_options)
Definition: sprk_ops.h:412
virtual bool OnKeyDown(KeyboardState const &in_state)
Definition: sprk_ops.h:972
void SetMouseOverHighlighting(bool in_enable_mouse_over_highlighting)
Definition: sprk_ops.h:1177
Definition: sprk_ops.h:225
void SetHighlightOptions(HighlightOptionsKit const &in_options)
Definition: sprk_ops.h:450
float GetIndicatorScale() const
Definition: sprk_ops.h:1149
HighlightOptionsKit GetHighlightOptions() const
Definition: sprk_ops.h:542
virtual UTF8 GetName() const
Definition: sprk_ops.h:268
Definition: sprk_ops.h:550
virtual UTF8 GetName() const
Definition: sprk_ops.h:596
Definition: sprk_ops.h:918
static MouseButtons ButtonLeft()
Definition: hps.h:40578
static MouseButtons ButtonMiddle()
Definition: hps.h:40586
Definition: hps.h:8211
static ModifierKeys KeyControl()
Definition: hps.h:40224
MaterialMappingKit GetPlaneMaterial() const
Definition: sprk_ops.h:1157
virtual UTF8 GetName() const
Definition: sprk_ops.h:59
Definition: hps.h:8413
Definition: hps.h:21429
virtual UTF8 GetName() const
Definition: sprk_ops.h:703
Definition: hps.h:21694
Definition: sprk.h:965
Definition: sprk_ops.h:122
virtual bool OnKeyUp(KeyboardState const &in_state)
Definition: sprk_ops.h:976
HighlightOptionsKit GetPlaneHighlightOptions() const
Definition: sprk_ops.h:1165
void SetHighlightOptions(HighlightOptionsKit const &in_options)
Definition: sprk_ops.h:537
Definition: sprk_ops.h:354