Fix transformation of new created volume by angle and distance

This commit is contained in:
Filip Sykala 2022-02-21 13:44:24 +01:00
parent 233ea5e0d8
commit 7f73a0e73d

View File

@ -138,13 +138,26 @@ void EmbossCreateJob::process(Ctl &ctl) {
Transform3d::TranslationType tt(offset.x(), offset.y(), offset.z());
m_transformation = Transform3d(tt);
} else {
// TODO: Disable apply common transformation after draggig
// Call after is used for apply transformation after common dragging to rewrite it
m_transformation = Emboss::create_transformation_onto_surface(hit->position, hit->normal);
//m_transformation = Emboss::create_transformation_onto_surface(hit->position, hit->normal);
assert(m_input->hit_vol_tr.has_value());
if (m_input->hit_vol_tr.has_value()) {
Transform3d object_trmat = m_input->raycast_manager->get_transformation(hit->tr_key);
m_transformation = m_input->hit_vol_tr->inverse() * object_trmat * m_transformation;
const FontProp &font_prop = m_input->text_configuration.font_item.prop;
if (font_prop.angle.has_value()) {
double angle_z = *font_prop.angle;
object_trmat *= Eigen::AngleAxisd(angle_z, Vec3d::UnitZ());
}
if (font_prop.distance.has_value()) {
Vec3d translate = Vec3d::UnitZ() * (*font_prop.distance);
object_trmat.translate(translate);
}
Transform3d surface_trmat = Emboss::create_transformation_onto_surface(hit->position, hit->normal);
m_transformation = m_input->hit_vol_tr->inverse() * object_trmat * surface_trmat;
}
}
}