34#include <NDEVR/SnapController.h>
35#if NDEVR_VIEWPORT && NDEVR_MEASURE_MODELS
36#include <NDEVR/PointMeasureModel.h>
37#include <NDEVR/CrossSectionModel.h>
38#include <NDEVR/CommandLockObject.h>
62 , e_measure_cross_section
63 , e_measurement_mode_size
80 MeasurementManager(DesignObjectLookup* manager);
85 ~MeasurementManager();
90 void createNewModel();
96 void addMeasurementPoint(
const Vertex<3, fltp08>& point);
101 virtual void cancel()
override;
107 const UUID& rootModelID()
const {
return m_root_model; }
113 const UUID& currentModel()
const {
return m_current_model; }
119 Model rootModel()
const;
129 void discardModels();
140 void setGenerateNormals(
bool generate_normals);
146 void setAutoWind(
bool auto_wind_shapes);
152 void setRootModel(UUID model);
158 void setIsTouch(
bool touch_mode);
164 bool tryCommandLock();
170 bool hasCommandLock();
176 void lockMovement(
bool lock_movement) { m_lock_movement = lock_movement; }
182 bool movementLocked()
const {
return m_lock_movement; }
188 Buffer<UUID> measurementModelIDs()
const;
194 TranslatedString getHint()
const;
199 void calculateCrossSection();
205 Buffer<PointMeasureModel> pointMeasurements()
const;
211 void setPointNamingFormat(
const TranslatedString& naming_format);
217 void setDistanceNamingFormat(
const TranslatedString& naming_format);
223 void setAngleNamingFormat(
const TranslatedString& naming_format);
229 void setPointType(
const BitFlag& point_types);
235 void setLineEdgeType(
const BitFlag& point_types);
241 void setMarkerScale(fltp08 thickness);
247 BitFlag pointType()
const {
return m_point_type; }
253 BitFlag lineEdgeType()
const {
return m_line_edge_type; }
259 Buffer<AngleMeasureModel> angleMeasurements()
const;
265 const TranslatedString& pointNamingFormat()
const {
return m_point_naming_format; }
271 const TranslatedString& distanceNamingFormat()
const {
return m_distance_naming_format; }
277 bool useLineLeader()
const {
return m_use_line_leader; }
283 bool usePointLeader()
const {
return m_use_point_leader; }
289 void setUsePointLeader(
bool use) { m_use_point_leader = use; }
295 void setUseLineLeader(
bool use) { m_use_line_leader = use; }
301 const TranslatedString& rootName()
const {
return m_root_name; }
307 void setRootName(
const TranslatedString& name);
313 void setCrossSectionSpacing(
const Vector<3, fltp08>& spacing);
319 void setCrossSectionalCenterlineRange(
const Vector<2, fltp08>& spacing);
325 void setCrossSectionalPointRange(
const fltp08 distance);
331 fltp08 crossSectionalPointDistance()
const {
return m_max_point_distance;}
337 Vector<3, fltp08> crossSectionSpacing()
const {
return m_cross_section_spacing; }
343 void setUseParallelVertical(
bool use) { m_cross_section_vertical_parallel = use; };
349 void setUseParallelHorizontal(
bool use) { m_cross_section_horizontal_parallel = use; };
355 void setUseOrthogonal(
bool use) { m_cross_section_orthogonal = use; };
361 void setUseVerticalOrthogonal(
bool use) { m_cross_section_vertical_orthogonal = use; };
367 bool useParallelVertical()
const {
return m_cross_section_vertical_parallel; };
373 bool useParallelHorizontal()
const {
return m_cross_section_horizontal_parallel; };
379 bool useOrthogonal()
const {
return m_cross_section_orthogonal; };
385 bool useVerticalOrthogonal()
const {
return m_cross_section_vertical_orthogonal; };
391 Vector<2, fltp08> crossSectionalCenterlineRange()
const {
return m_cross_section_centerline_range; }
397 void setAngleMode(
const AngleMode& mode) { m_angle_mode = mode; }
403 AngleMode angleMode()
const {
return m_angle_mode; }
409 void setAutoSetLockPlane(
bool autoset_lock_plane);
414 virtual void finish()
override;
421 Resource<MeasureMode> measure_mode;
426 virtual void begin()
override;
433 void autoName(
const Model& model, uint04 index);
442 void calculateSolid(Geometry& mesh);
448 Model createRootModel();
456 virtual void setupSelectionInfo(
const MouseEvent& event, Camera* camera, SelectionInfo& info)
override;
463 void updatePrimitive(
const Vertex<3, fltp08>& world_location, Camera* camera);
469 void onSelect(Camera* camera);
477 static Vector<3, Angle<fltp08>> getOrientation(
const Vector<3, fltp08>& lookat,
const Vector<3, fltp08>& up);
485 virtual bool processMouseEvent(MouseControllerEvent& event, SelectionInfo& info)
override;
494 virtual bool processKeyEvent(
const KeyEvent& event, DesignObjectLookup* lookup, Camera* camera)
override;
505 void processResizeEvent(
const MeasureMode& spec, Model& model, Camera* camera);
510 void updateSnapIcon();
512 CommandLockObject m_command_lock;
513 PointMeasureModel m_point_model;
514 DistanceMeasureModel m_distance_measure_model;
515 #if NDEVR_CROSS_SECTION
516 CrossSectionModel m_cross_section_model;
518 AngleMeasureModel m_angle_measure_model;
519 AngleMode m_angle_mode = AngleMode::e_track_mouse;
520 TranslatedString m_point_naming_format;
521 TranslatedString m_distance_naming_format;
522 TranslatedString m_angle_naming_format;
523 TranslatedString m_root_name;
524 Plane<3, fltp08> m_draw_plane;
525 Vector<3, fltp08> m_cross_section_spacing;
526 fltp08 m_max_point_distance = Constant<fltp08>::Invalid;
527 Vector<2, fltp08> m_cross_section_centerline_range = Vector<2, fltp08>(10.0, 30.0);
528 UUID m_current_model;
533 bool m_auto_wind_shapes;
534 bool m_generate_normals;
535 bool m_lock_movement;
537 bool m_is_touch_mode;
538 bool m_use_line_leader;
539 bool m_use_point_leader;
540 bool m_cross_section_horizontal_parallel =
false;
541 bool m_cross_section_vertical_parallel =
false;
542 bool m_cross_section_vertical_orthogonal =
true;
543 bool m_cross_section_orthogonal =
false;
544 bool m_autoset_lock_plane =
true;
Allows for mouse snaps to certain key points of interest in the software.
Logic for reading or writing to a string or a user friendly, TranslatedString.
The primary namespace for the NDEVR SDK.
@ BitFlag
Per-vertex bit flags (selected, hidden, etc.).
double fltp08
Defines an alias representing an 8 byte floating-point number.
uint8_t uint01
-Defines an alias representing a 1 byte, unsigned integer -Can represent exact integer values 0 throu...