diff --git a/interface/src/ui/MetavoxelEditor.cpp b/interface/src/ui/MetavoxelEditor.cpp index 12f727f139..fc7abe28fd 100644 --- a/interface/src/ui/MetavoxelEditor.cpp +++ b/interface/src/ui/MetavoxelEditor.cpp @@ -58,19 +58,21 @@ MetavoxelEditor::MetavoxelEditor() : _gridPlane->addItem("X/Z"); _gridPlane->addItem("Y/Z"); _gridPlane->setCurrentIndex(GRID_PLANE_XZ); + connect(_gridPlane, SIGNAL(currentIndexChanged(int)), SLOT(centerGridPosition())); formLayout->addRow("Grid Spacing:", _gridSpacing = new QDoubleSpinBox()); _gridSpacing->setMinimum(-FLT_MAX); _gridSpacing->setMaximum(FLT_MAX); _gridSpacing->setPrefix("2^"); _gridSpacing->setValue(-3.0); - connect(_gridSpacing, SIGNAL(valueChanged(double)), SLOT(updateGridPosition())); + connect(_gridSpacing, SIGNAL(valueChanged(double)), SLOT(alignGridPosition())); formLayout->addRow("Grid Position:", _gridPosition = new QDoubleSpinBox()); _gridPosition->setMinimum(-FLT_MAX); _gridPosition->setMaximum(FLT_MAX); - updateGridPosition(); - + alignGridPosition(); + centerGridPosition(); + _value = new QGroupBox(); _value->setTitle("Value"); topLayout->addWidget(_value); @@ -182,7 +184,15 @@ void MetavoxelEditor::createNewAttribute() { updateAttributes(nameText); } -void MetavoxelEditor::updateGridPosition() { +void MetavoxelEditor::centerGridPosition() { + const float CENTER_OFFSET = 0.5f; + float eyePosition = (glm::inverse(getGridRotation()) * Application::getInstance()->getCamera()->getPosition()).z - + Application::getInstance()->getAvatar()->getScale() * CENTER_OFFSET; + double step = getGridSpacing(); + _gridPosition->setValue(step * floor(eyePosition / step)); +} + +void MetavoxelEditor::alignGridPosition() { // make sure our grid position matches our grid spacing double step = getGridSpacing(); _gridPosition->setSingleStep(step); diff --git a/interface/src/ui/MetavoxelEditor.h b/interface/src/ui/MetavoxelEditor.h index 3782007e38..6fe5b26398 100644 --- a/interface/src/ui/MetavoxelEditor.h +++ b/interface/src/ui/MetavoxelEditor.h @@ -32,7 +32,8 @@ private slots: void updateValueEditor(); void createNewAttribute(); - void updateGridPosition(); + void centerGridPosition(); + void alignGridPosition(); void render();