10 #ifndef SPRK_STD_OPERATORS_H
11 #define SPRK_STD_OPERATORS_H
17 #include <unordered_map>
22 struct hash<HPS::RGBColor>
27 (51 + std::hash<float>()(x.red)) * 51 + std::hash<float>()(x.green) * 51 + std::hash<float>()(x.blue));
35 # define SPRK_OPS_API __declspec (dllexport)
37 # define SPRK_OPS_API __declspec (dllimport)
42 # if defined(LINUX_SYSTEM) && defined(SPRK_OPS)
44 # define SPRK_OPS_API __attribute__ ((visibility ("default")))
79 virtual bool OnMouseDown(
MouseState const & in_state);
84 virtual bool OnMouseUp(
MouseState const & in_state);
89 virtual bool OnMouseMove(
MouseState const & in_state);
95 virtual bool OnTouchDown(
TouchState const & in_state);
100 virtual bool OnTouchUp(
TouchState const & in_state);
105 virtual bool OnTouchMove(
TouchState const & in_state);
113 bool operator_active;
118 float zoom_start_field_width;
119 float zoom_start_field_height;
121 size_t current_touches;
124 void UpdateZoom(
float zoom_factor);
125 void UpdateZoomLimit();
148 virtual bool OnMouseDown(
MouseState const & in_state);
153 virtual bool OnMouseUp(
MouseState const & in_state);
158 virtual bool OnMouseMove(
MouseState const & in_state);
164 virtual bool OnTouchDown(
TouchState const & in_state);
169 virtual bool OnTouchUp(
TouchState const & in_state);
174 virtual bool OnTouchMove(
TouchState const & in_state);
179 bool operator_active;
180 HPS::TouchID tracked_touch_ID;
202 virtual bool OnMouseDown(
MouseState const & in_state);
207 virtual bool OnMouseUp(
MouseState const & in_state);
212 virtual bool OnMouseMove(
MouseState const & in_state);
218 virtual bool OnTouchDown(
TouchState const & in_state);
223 virtual bool OnTouchUp(
TouchState const & in_state);
228 virtual bool OnTouchMove(
TouchState const & in_state);
233 bool operator_active;
234 HPS::TouchID tracked_touch_ID;
253 virtual bool OnMouseDown(
MouseState const & in_state);
254 virtual bool OnMouseUp(
MouseState const & in_state);
255 virtual bool OnMouseMove(
MouseState const & in_state);
257 virtual bool OnTouchDown(
TouchState const & in_state);
258 virtual bool OnTouchUp(
TouchState const & in_state);
259 virtual bool OnTouchMove(
TouchState const & in_state);
267 bool operator_active;
268 HPS::TouchID tracked_touch_ID;
292 virtual bool OnMouseDown(
MouseState const & in_state);
297 virtual bool OnMouseUp(
MouseState const & in_state);
302 virtual bool OnMouseMove(
MouseState const & in_state);
308 virtual bool OnTouchDown(
TouchState const & in_state);
313 virtual bool OnTouchMove(
TouchState const & in_state);
316 bool operator_active;
317 HPS::TouchID tracked_touch_ID;
323 float zoom_start_field_width;
324 float zoom_start_field_height;
329 void UpdateZoom(
float zoom_factor);
330 void UpdateZoomLimit();
340 virtual void OnViewAttached();
342 virtual bool OnMouseDown(
MouseState const & in_state);
343 virtual bool OnMouseUp(
MouseState const & in_state);
344 virtual bool OnMouseMove(
MouseState const & in_state);
346 virtual bool OnTouchDown(
TouchState const & in_state);
347 virtual bool OnTouchUp(
TouchState const & in_state);
348 virtual bool OnTouchMove(
TouchState const & in_state);
350 bool IsRectangleValid()
const {
return is_rect_valid; }
356 bool ConstructRectCommon(
WindowPoint const & in_loc);
357 void SetupConstructionSegment();
360 bool use_center_marker;
362 bool operator_active;
369 HPS::TouchID tracked_touch_ID;
378 virtual bool OnMouseUp(
MouseState const & in_state);
379 virtual bool OnTouchUp(
TouchState const & in_state);
414 virtual void OnViewAttached();
416 virtual bool OnMouseUp(
MouseState const & in_state);
417 virtual bool OnTouchUp(
TouchState const & in_state);
458 virtual void OnViewAttached();
460 virtual bool OnMouseUp(
MouseState const & in_state);
461 virtual bool OnTouchUp(
TouchState const & in_state);
511 virtual bool OnMouseDown(
MouseState const & in_state);
512 virtual bool OnTouchDown(
TouchState const & in_state);
549 virtual bool OnMouseDown(
MouseState const & in_state);
550 virtual bool OnTouchDown(
TouchState const & in_state);
586 void UpdateZoomLimit();
590 virtual void OnModelAttached();
592 virtual void OnViewAttached();
623 virtual bool OnMouseDown(
MouseState const & in_state);
628 virtual bool OnMouseUp(
MouseState const & in_state);
633 virtual bool OnMouseMove(
MouseState const & in_state);
638 virtual bool OnMouseWheel(
MouseState const & in_state);
645 virtual bool OnTouchDown(
TouchState const & in_state);
650 virtual bool OnTouchUp(
TouchState const & in_state);
656 virtual bool OnTouchMove(
TouchState const & in_state);
662 bool operator_active;
663 bool center_point_set;
665 HPS::TouchID tracked_touch_ID;
686 virtual bool OnTouchDown(
TouchState const & in_state);
691 virtual bool OnTouchUp(
TouchState const & in_state);
694 HPS::TouchID tracked_touch_ID;
750 virtual bool OnMouseDown(
MouseState const & in_state);
754 virtual bool OnMouseUp(
MouseState const & in_state);
759 virtual bool OnMouseMove(
MouseState const & in_state);
765 virtual bool OnMouseWheel(
MouseState const & in_state);
771 virtual bool OnTouchDown(
TouchState const & in_state);
775 virtual bool OnTouchUp(
TouchState const & in_state);
780 virtual bool OnTouchMove(
TouchState const & in_state);
788 virtual void OnModelAttached();
789 virtual void OnViewAttached();
790 virtual void OnViewDetached();
793 void InvertXAxis() { invert_x_axis = !invert_x_axis;}
794 void InvertYAxis() { invert_y_axis = !invert_y_axis;}
795 bool IsXAxisInverted() {
return invert_x_axis; }
796 bool IsYAxisInverted() {
return invert_y_axis; }
800 float GetKeyboardSensitivity() {
return keyboard_sensitivity; }
801 void SetKeyboardSensitivity(
float in_keyboard_sensitivity) { keyboard_sensitivity = in_keyboard_sensitivity; }
804 float GetMouseSensitivity() {
return mouse_sensitivity; }
805 void SetMouseSensitivity(
float in_mouse_sensitivity) { mouse_sensitivity = in_mouse_sensitivity; }
808 float GetLeftJoystickSensitivity() {
return left_joystick_sensitivity; }
809 void SetLeftJoystickSensitivity(
float in_left_joystick_sensitivity) { left_joystick_sensitivity = in_left_joystick_sensitivity; }
812 float GetRightJoystickSensitivity() {
return right_joystick_sensitivity; }
813 void SetRightJoystickSensitivity(
float in_right_joystick_sensitivity) { right_joystick_sensitivity = in_right_joystick_sensitivity; }
819 float GetJoystickDeadZone() {
return joystick_dead_zone; }
820 void SetJoystickDeadZone(
float in_dead_zone) { joystick_dead_zone = in_dead_zone; }
826 no_movement = 0x0000,
827 moving_forward = 0x0001,
828 moving_back = 0x0002,
829 moving_left = 0x0004,
830 moving_right = 0x0008,
832 moving_down = 0x0020,
836 move_with_touch = 0x0200,
837 rotate_with_touch = 0x0400
840 unsigned int movement_flags;
856 enum class TouchPosition
864 HPS::TouchID left_side_touch;
865 HPS::TouchID right_side_touch;
866 HPS::TouchID second_right_touch;
880 float joystick_dead_zone;
883 float keyboard_sensitivity;
884 float old_keyboard_sensitivity;
885 float left_joystick_sensitivity;
886 float old_left_joystick_sensitivity;
887 float right_joystick_sensitivity;
888 float old_right_joystick_sensitivity;
889 float mouse_sensitivity;
892 bool two_right_fingers_down;
903 void UpdateKeyboardState(KeyboardState
const & in_state);
904 void ComputeReasonableStepLength();
905 void CreateJoystick(
HPS::TouchState const & in_state, TouchPosition touch_position);
947 virtual void OnViewAttached();
948 virtual void OnModelAttached();
957 void SetGroundPlane(
HPS::Plane const & in_plane) { ground = in_plane; }
958 HPS::Plane GetGroundPlane() {
return ground; }
961 void SetWalkerHeight(
float height) { height_off_ground = height; }
962 float GetWalkerHeight() {
return height_off_ground; }
967 float height_off_ground;
969 void CalculateGroundPlane();
1009 virtual bool OnMouseDown(
MouseState const & in_state);
1014 virtual bool OnMouseMove(
MouseState const & in_state);
1018 virtual bool OnMouseUp(
MouseState const & in_state);
1125 virtual void OnModelAttached();
1126 virtual void OnViewAttached();
1127 virtual void OnViewDetached();
1133 void SetPlanes(PlaneArray
const & in_planes);
1137 PlaneArray GetPlanes();
1144 virtual bool OnMouseDown(
MouseState const & in_state);
1149 virtual bool OnMouseUp(
MouseState const & in_state);
1156 virtual bool OnMouseMove(
MouseState const & in_state);
1163 virtual bool OnTouchDown(
TouchState const & in_state);
1168 virtual bool OnTouchUp(
TouchState const & in_state);
1174 virtual bool OnTouchMove(
TouchState const & in_state);
1212 void SetMouseOverHighlighting(
bool in_enable_mouse_over_highlighting) { enable_mouse_over_highlighting = in_enable_mouse_over_highlighting; }
1217 void SetSectioning(
bool in_sectioning);
1226 void SetIndicatorVisibility(
bool in_use_indicator);
1230 bool GetIndicatorVisibility() {
return (op_state == OpState::Uninitialized || op_state == OpState::FacePicking) ?
true :
false; }
1235 void SetPlaneVisibility(
bool in_visibility);
1239 bool GetPlaneVisibility();
1243 void SetupOperatorSegment();
1244 void InsertNormalIndicator(
float scale);
1245 ShellKey InsertCuttingPlaneGeometry();
1246 void MouseOverHighlighting(
MouseState const & in_state);
1247 void TranslateCuttingPlane(
KeyPath const & in_event_path,
WindowPoint const & in_event_location);
1248 bool HandleMouseAndTouchDown(
WindowKey const & in_event_source,
int in_number_of_clicks,
1250 void ViewAlignSectionPlanes(HPS::PlaneArray & in_out_planes)
const;
1251 typedef std::pair<CuttingSectionKey, std::vector<ShellKey>> SectionInfo;
1252 typedef std::vector<SectionInfo> SectionArray;
1253 SectionArray sections;
1261 size_t translating_plane_offset;
1262 ShellKey translating_plane_representation;
1264 TouchID tracked_touch_ID;
1271 float indicator_scale;
1273 bool plane_normal_valid;
1278 bool last_skipped_highlight_state_valid;
1280 bool is_plane_highlighted;
1284 bool enable_mouse_over_highlighting;
1285 bool skip_mouse_overs;
1288 KeyArray navigation_keys;
1329 enum class MarkupType
1342 virtual void OnViewAttached() OVERRIDE;
1348 virtual
bool OnMouseDown(
MouseState const & in_state) OVERRIDE;
1353 virtual
bool OnMouseUp(
MouseState const & in_state) OVERRIDE;
1361 virtual
bool OnMouseMove(
MouseState const & in_state) OVERRIDE;
1368 virtual
bool OnTouchDown(
TouchState const & in_state) OVERRIDE;
1373 virtual
bool OnTouchUp(
TouchState const & in_state) OVERRIDE;
1381 virtual
bool OnTouchMove(
TouchState const & in_state) OVERRIDE;
1388 virtual
bool OnKeyDown(
KeyboardState const & in_state) OVERRIDE;
1395 virtual
bool OnTextInput(HPS::
UTF8 const & in_text) OVERRIDE;
1398 MarkupType GetMarkupType() {
return markup_type; }
1430 void DeleteMarkups();
1438 channel = GetClassID();
1444 channel = GetClassID();
1446 markup_key = in_markup_key;
1453 if (in_event.
GetChannel() == Object::ClassID<MarkupInsertedEvent>())
1456 markup_key = that.markup_key;
1483 class KeyboardHiddenEventHandler :
public EventHandler
1486 KeyboardHiddenEventHandler()
1490 virtual ~KeyboardHiddenEventHandler()
1493 virtual HandleResult Handle(Event
const * )
1495 markup_operator->keyboard_active =
false;
1497 markup_operator->ResetCameras();
1498 return HandleResult::Handled;
1501 void SetOperator(MarkupOperator * in_operator) { markup_operator = in_operator; }
1504 MarkupOperator * markup_operator;
1507 std::unordered_multimap<RGBColor, SegmentKey> attribute_map;
1509 MarkupType markup_type;
1510 SegmentKey markup_segment;
1511 SegmentKey current_segment;
1512 Attributes current_attributes;
1514 static const RGBColor default_color;
1515 static const TextAttributeKit default_text_attributes;
1516 static const LineAttributeKit default_line_attributes;
1519 bool start_new_line;
1520 LineKey current_line;
1521 size_t current_line_size;
1522 CircleKey current_circle;
1523 LineKey current_circle_line;
1524 LineKey current_rectangle;
1526 bool start_new_note;
1528 bool keyboard_active;
1529 TextKey default_text;
1530 TextKey current_text;
1531 SizeTArray text_columns;
1532 size_t current_text_row;
1534 bool operator_active;
1535 TouchID tracked_touch_id;
1536 TouchID second_tracked_touch_id;
1538 CameraKit original_camera;
1539 CameraKit original_markup_camera;
1541 KeyboardHiddenEventHandler handler;
1543 bool SetupConstructionSegments();
1544 void LookupSegment();
1545 void CreateNewMarkupSegment();
1546 void DrawFreehand(Point
const & location);
1548 void DrawCircle(Point
const & location);
1549 void DrawCircleFromTwoPoints(Point
const & point_one, Point
const & point_two);
1550 void DrawRectangleFromTwoPoints(Point
const & point_one, Point
const & point_two);
1551 void DrawRectangle(Point
const & location);
1552 void CenterCameras(Point
const & main_camera_center, Point
const & markup_camera_center);
1553 void ResetCameras();
Handedness
Definition: hps.h:1258
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:509
MarkupInsertedEvent(Event const &in_event)
Definition: sprk_ops.h:1451
virtual bool OnMouseWheel(MouseState const &in_state)
Definition: sprk_ops.h:1003
bool GetSectioning()
Definition: sprk_ops.h:1221
An InvalidSpecificationException is thrown when a method is called with non-sensical or contradictory...
Definition: hps.h:5579
SegmentKey GetSegmentKey()
Definition: sprk_ops.h:1427
Definition: sprk_ops.h:983
Definition: sprk_ops.h:281
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:196
HPS::HighlightOptionsKit GetHighlightOptions() const
Definition: sprk_ops.h:473
Definition: sprk_ops.h:395
HPS::SelectionOptionsKit GetSelectionOptions() const
Definition: sprk_ops.h:528
void SetMarkupType(MarkupType in_markup_type)
Definition: sprk_ops.h:1401
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:989
Definition: sprk_ops.h:68
ZoomType
Definition: sprk_ops.h:571
void SetIndicatorScale(float in_scale)
Definition: sprk_ops.h:1188
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:251
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:456
HPS::SelectionOptionsKit GetSelectionOptions() const
Definition: sprk_ops.h:435
Definition: sprk_ops.h:611
virtual bool OnTouchDown(TouchState const &in_state)
Definition: sprk_ops.h:1024
void SetPlaneHighlightOptions(HighlightOptionsKit const &in_highlight_options)
Definition: sprk_ops.h:1204
Definition: sprk_ops.h:492
Definition: sprk_ops.h:191
TextAttributeKit GetTextAttributes()
Definition: sprk_ops.h:1412
void SetLineAttribute(LineAttributeKit const &in_line_attributes)
Definition: sprk_ops.h:1422
Definition: sprk_ops.h:334
Definition: sprk_ops.h:1432
Definition: sprk_ops.h:675
virtual bool OnTouchMove(TouchState const &in_state)
Definition: sprk_ops.h:1029
void SetSelectionOptions(HPS::SelectionOptionsKit const &in_options)
Definition: sprk_ops.h:523
Definition: sprk_ops.h:1108
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:338
Definition: sprk_ops.h:719
Definition: sprk_ops.h:445
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:412
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:583
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:945
Definition: sprk_ops.h:1326
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:142
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:680
bool GetIndicatorVisibility()
Definition: sprk_ops.h:1230
virtual bool OnTouchUp(TouchState const &in_state)
Definition: sprk_ops.h:1033
RGBColor GetColor()
Definition: sprk_ops.h:1405
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:376
Definition: sprk_ops.h:538
intptr_t GetChannel() const
Definition: hps.h:6203
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:1123
bool GetMouseOverHighlighting() const
Definition: sprk_ops.h:1208
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:547
HPS::Rectangle GetRectangle() const
Definition: sprk_ops.h:353
void SetSelectionOptions(HPS::SelectionOptionsKit const &in_options)
Definition: sprk_ops.h:430
virtual bool OnKeyDown(KeyboardState const &in_state)
Definition: sprk_ops.h:994
void SetMouseOverHighlighting(bool in_enable_mouse_over_highlighting)
Definition: sprk_ops.h:1212
Definition: sprk_ops.h:240
LineAttributeKit GetLineAttributes()
Definition: sprk_ops.h:1419
void SetHighlightOptions(HPS::HighlightOptionsKit const &in_options)
Definition: sprk_ops.h:468
float GetIndicatorScale() const
Definition: sprk_ops.h:1184
HPS::HighlightOptionsKit GetHighlightOptions() const
Definition: sprk_ops.h:560
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:286
Definition: sprk_ops.h:568
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:616
Definition: sprk_ops.h:939
static ModifierKeys KeyControl()
Definition: hps.h:42113
MaterialMappingKit GetPlaneMaterial() const
Definition: sprk_ops.h:1192
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:73
void SetTextAttribute(TextAttributeKit const &in_text_attributes)
Definition: sprk_ops.h:1415
virtual HPS::UTF8 GetName() const
Definition: sprk_ops.h:724
Event * Clone() const
Definition: sprk_ops.h:1466
void SetColor(RGBColor const &in_color)
Definition: sprk_ops.h:1408
Definition: sprk_ops.h:137
virtual HPS::UTF8 GetName() const OVERRIDE
Definition: sprk_ops.h:1340
virtual bool OnKeyUp(KeyboardState const &in_state)
Definition: sprk_ops.h:998
HighlightOptionsKit GetPlaneHighlightOptions() const
Definition: sprk_ops.h:1200
MarkupInsertedEvent()
Definition: sprk_ops.h:1436
void SetHighlightOptions(HPS::HighlightOptionsKit const &in_options)
Definition: sprk_ops.h:555
Definition: sprk_ops.h:372