sets snap to grid to itterate through selected objects and settle them into the nearest (seected value), ie 1, 2.5, 3.33 ect.

This commit is contained in:
Azaezel 2017-02-22 00:36:53 -06:00
parent 5c8a82180b
commit 7d2315c781
3 changed files with 21 additions and 4 deletions

View file

@ -2254,7 +2254,7 @@ void WorldEditor::on3DMouseDragged(const Gui3DMouseEvent & event)
mGizmo->getProfile()->snapToGrid = snapToGrid;
}
mSelected->offset( mGizmo->getOffset() );
mSelected->offset(mGizmo->getOffset(), mGridSnap ? mGridPlaneSize : 0.f);
// Handle various sticking
terrainSnapSelection( mSelected, event.modifier, mGizmo->getPosition() );

View file

@ -306,9 +306,9 @@ void WorldEditorSelection::offset( const Point3F& offset, F32 gridSnap )
if( gridSnap != 0.f )
{
wPos.x -= mFmod( wPos.x, gridSnap );
wPos.y -= mFmod( wPos.y, gridSnap );
wPos.z -= mFmod( wPos.z, gridSnap );
wPos.x = _snapFloat(wPos.x, gridSnap);
wPos.y = _snapFloat(wPos.y, gridSnap);
wPos.z = _snapFloat(wPos.z, gridSnap);
}
mat.setColumn(3, wPos);
@ -318,6 +318,22 @@ void WorldEditorSelection::offset( const Point3F& offset, F32 gridSnap )
mCentroidValid = false;
}
F32 WorldEditorSelection::_snapFloat(const F32 &val, const F32 &snap) const
{
if (snap == 0.0f)
return val;
F32 a = mFmod(val, snap);
F32 temp = val;
if (mFabs(a) > (snap / 2))
val < 0.0f ? temp -= snap : temp += snap;
return(temp - a);
}
//-----------------------------------------------------------------------------
void WorldEditorSelection::setPosition(const Point3F & pos)

View file

@ -108,6 +108,7 @@ class WorldEditorSelection : public SimPersistSet
//
void offset(const Point3F& delta, F32 gridSnap = 0.f );
void setPosition(const Point3F & pos);
F32 _snapFloat(const F32 &val, const F32 &snap) const;
void setCentroidPosition(bool useBoxCenter, const Point3F & pos);
void orient(const MatrixF &, const Point3F &);