Measuring - Keep showing dimensioning after scaling
This commit is contained in:
parent
34391a14a2
commit
a0a0b0d253
@ -150,6 +150,17 @@ struct MeasurementResult {
|
|||||||
bool has_any_data() const {
|
bool has_any_data() const {
|
||||||
return angle.has_value() || distance_infinite.has_value() || distance_strict.has_value() || distance_xyz.has_value();
|
return angle.has_value() || distance_infinite.has_value() || distance_strict.has_value() || distance_xyz.has_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void transform(const Transform3d& trafo) {
|
||||||
|
if (angle.has_value())
|
||||||
|
angle->transform(trafo);
|
||||||
|
if (distance_infinite.has_value())
|
||||||
|
distance_infinite->transform(trafo);
|
||||||
|
if (distance_strict.has_value())
|
||||||
|
distance_strict->transform(trafo);
|
||||||
|
if (distance_xyz.has_value())
|
||||||
|
distance_xyz = trafo * *distance_xyz;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Returns distance/angle between two SurfaceFeatures.
|
// Returns distance/angle between two SurfaceFeatures.
|
||||||
|
@ -303,14 +303,7 @@ bool GLGizmoMeasure::on_mouse(const wxMouseEvent &mouse_event)
|
|||||||
if (m_selected_features != selected_features_old && m_selected_features.second.feature.has_value()) {
|
if (m_selected_features != selected_features_old && m_selected_features.second.feature.has_value()) {
|
||||||
m_measurement_result = Measure::get_measurement(*m_selected_features.first.feature, *m_selected_features.second.feature, m_measuring.get());
|
m_measurement_result = Measure::get_measurement(*m_selected_features.first.feature, *m_selected_features.second.feature, m_measuring.get());
|
||||||
// transform to world coordinates
|
// transform to world coordinates
|
||||||
if (m_measurement_result.angle.has_value())
|
m_measurement_result.transform(m_volume_matrix);
|
||||||
m_measurement_result.angle->transform(m_volume_matrix);
|
|
||||||
if (m_measurement_result.distance_infinite.has_value())
|
|
||||||
m_measurement_result.distance_infinite->transform(m_volume_matrix);
|
|
||||||
if (m_measurement_result.distance_strict.has_value())
|
|
||||||
m_measurement_result.distance_strict->transform(m_volume_matrix);
|
|
||||||
if (m_measurement_result.distance_xyz.has_value())
|
|
||||||
m_measurement_result.distance_xyz = TransformHelper::model_to_world(*m_measurement_result.distance_xyz, m_volume_matrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -357,7 +350,14 @@ void GLGizmoMeasure::data_changed()
|
|||||||
|
|
||||||
m_last_inv_zoom = 0.0f;
|
m_last_inv_zoom = 0.0f;
|
||||||
m_last_plane_idx = -1;
|
m_last_plane_idx = -1;
|
||||||
m_selected_features.reset();
|
if (m_pending_scale) {
|
||||||
|
m_measurement_result = Measure::get_measurement(*m_selected_features.first.feature, *m_selected_features.second.feature, m_measuring.get());
|
||||||
|
// transform to world coordinates
|
||||||
|
m_measurement_result.transform(m_volume_matrix);
|
||||||
|
m_pending_scale = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_selected_features.reset();
|
||||||
m_selection_raycasters.clear();
|
m_selection_raycasters.clear();
|
||||||
m_editing_distance = false;
|
m_editing_distance = false;
|
||||||
m_is_editing_distance_first_frame = true;
|
m_is_editing_distance_first_frame = true;
|
||||||
@ -1007,6 +1007,9 @@ void GLGizmoMeasure::render_dimensioning()
|
|||||||
selection.scale(ratio * Vec3d::Ones(), type);
|
selection.scale(ratio * Vec3d::Ones(), type);
|
||||||
wxGetApp().plater()->canvas3D()->do_scale(""); // avoid storing another snapshot
|
wxGetApp().plater()->canvas3D()->do_scale(""); // avoid storing another snapshot
|
||||||
wxGetApp().obj_manipul()->set_dirty();
|
wxGetApp().obj_manipul()->set_dirty();
|
||||||
|
|
||||||
|
// update measure on next call to data_changed()
|
||||||
|
m_pending_scale = true;
|
||||||
};
|
};
|
||||||
auto action_exit = [this]() {
|
auto action_exit = [this]() {
|
||||||
m_editing_distance = false;
|
m_editing_distance = false;
|
||||||
|
@ -116,6 +116,7 @@ class GLGizmoMeasure : public GLGizmoBase
|
|||||||
KeyAutoRepeatFilter m_ctrl_kar_filter;
|
KeyAutoRepeatFilter m_ctrl_kar_filter;
|
||||||
|
|
||||||
SelectedFeatures m_selected_features;
|
SelectedFeatures m_selected_features;
|
||||||
|
bool m_pending_scale{ false };
|
||||||
bool m_editing_distance{ false };
|
bool m_editing_distance{ false };
|
||||||
bool m_is_editing_distance_first_frame{ true };
|
bool m_is_editing_distance_first_frame{ true };
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user