fix(editor): align studs to dominant side when dragging

This commit is contained in:
maelstrom 2025-04-08 00:13:43 +02:00
parent 6bb01dda36
commit 530789f0b3

View file

@ -157,7 +157,7 @@ void MainGLWidget::handleObjectDrag(QMouseEvent* evt) {
// Snap to studs // Snap to studs
Data::Vector3 draggingPartSize = draggingObject->lock()->size; Data::Vector3 draggingPartSize = draggingObject->lock()->size;
Data::Vector3 inverseSurfaceNormal = Data::Vector3::ONE - surfaceNormal.Abs(); Data::Vector3 inverseSurfaceNormal = Data::Vector3::ONE - surfaceNormal.Abs();
glm::vec3 inverseNormalPartSize = (Data::Vector3)(partSize + glm::vec3(localFrame.Rotation() * draggingPartSize)) * inverseSurfaceNormal / 2.f; glm::vec3 inverseNormalPartSize = (Data::Vector3)(partSize - glm::vec3(localFrame.Rotation() * draggingPartSize)) * inverseSurfaceNormal / 2.f;
if (snappingFactor() > 0) if (snappingFactor() > 0)
localFrame = localFrame.Rotation() + glm::round(glm::vec3(localFrame.Position() * inverseSurfaceNormal - inverseNormalPartSize) / snappingFactor()) * snappingFactor() + inverseNormalPartSize localFrame = localFrame.Rotation() + glm::round(glm::vec3(localFrame.Position() * inverseSurfaceNormal - inverseNormalPartSize) / snappingFactor()) * snappingFactor() + inverseNormalPartSize
+ localFrame.Position() * surfaceNormal.Abs(); + localFrame.Position() * surfaceNormal.Abs();