float grid = GetSnapGridSize();
Vector3 maxs( m_bounds.origin + m_bounds.extents );
Vector3 mins( m_bounds.origin - m_bounds.extents );
-// globalOutputStream() << "current: " << current << "\n";
+ //globalOutputStream() << "current: " << current << "\n";
for( std::size_t i = 0; i < 3; ++i ){
- if( current[i] != 0.f ){
+ if( fabs( current[i] ) > 0.000001f ){
float snapto1 = float_snapped( maxs[i] + current[i] , grid );
float snapto2 = float_snapped( mins[i] + current[i] , grid );
}
};
-bool g_bAltDragManipulatorResize = false;
+bool g_bAltDragManipulatorResize = false; //+select primitives in component modes
+bool g_bTmpComponentMode = false;
class DragManipulator : public Manipulator
{
{
( *i ).second->setSelected( true );
}
+ g_bTmpComponentMode = m_selected;
}
void setSelected( bool select ){
Scene_TestSelect_Component( selector, volume, scissored, eFace );
}
else{
- Scene_TestSelect( selector, volume, scissored, Mode(), ComponentMode() );
+ Scene_TestSelect( selector, volume, scissored, g_bAltDragManipulatorResize ? ePrimitive : Mode(), ComponentMode() );
}
if ( !selector.failed() ) {
Scene_TestSelect_Component( selector, volume, scissored, eFace );
}
else{
- Scene_TestSelect( selector, volume, scissored, Mode(), ComponentMode() );
+ Scene_TestSelect( selector, volume, scissored, g_bAltDragManipulatorResize ? ePrimitive : Mode(), ComponentMode() );
}
if ( !selector.failed() ){
SelectableSortedSet::iterator best = selector.begin();
/// \todo Support view-dependent nudge.
void NudgeManipulator( const Vector3& nudge, const Vector3& view ){
- if ( ManipulatorMode() == eTranslate || ManipulatorMode() == eDrag ) {
+// if ( ManipulatorMode() == eTranslate || ManipulatorMode() == eDrag ) {
translateSelected( nudge );
- }
+// }
}
void endMove();
if ( Mode() == ePrimitive ) {
if ( ManipulatorMode() == eDrag ) {
+ g_bTmpComponentMode = false;
if( g_bAltDragManipulatorResize ){
Scene_SelectAll_Component( false, SelectionSystem::eVertex );
}
AABB RadiantSelectionSystem::getSelectionAABB() const {
AABB bounds;
if ( !nothingSelected() ) {
- if ( Mode() == eComponent ) {
+ if ( Mode() == eComponent || g_bTmpComponentMode ) {
Scene_BoundsSelectedComponent( GlobalSceneGraph(), bounds );
}
else
#include "preferencesystem.h"
#include "preferences.h"
+bool g_bLeftMouseClickSelector = true;
+
void SelectionSystem_constructPreferences( PreferencesPage& page ){
page.appendCheckBox( "", "Prefer point entities in 2D", getSelectionSystem().m_bPreferPointEntsIn2D );
+ page.appendCheckBox( "", "Left mouse click tunnel selector", g_bLeftMouseClickSelector );
}
void SelectionSystem_constructPage( PreferenceGroup& group ){
PreferencesPage page( group.createPage( "Selection", "Selection System Settings" ) );
GlobalShaderCache().attachRenderable( getSelectionSystem() );
GlobalPreferenceSystem().registerPreference( "PreferPointEntsIn2D", make_property_string( getSelectionSystem().m_bPreferPointEntsIn2D ) );
+ GlobalPreferenceSystem().registerPreference( "LeftMouseClickSelector", make_property_string( g_bLeftMouseClickSelector ) );
SelectionSystem_registerPreferencesPage();
}
class Selector_
{
RadiantSelectionSystem::EModifier modifier_for_state( ModifierFlags state ){
- if ( ( state == c_modifier_toggle || state == c_modifier_toggle_face || state == c_modifier_face ) ) {
+ if ( ( state == c_modifier_toggle || state == c_modifier_toggle_face || state == c_modifier_face || state == c_modifierAlt ) ) {
if( m_mouse2 ){
return RadiantSelectionSystem::eReplace;
}
modifier = RadiantSelectionSystem::eCycle;
}
getSelectionSystem().SelectPoint( *m_view, &position[0], &m_epsilon[0], modifier, false );*/
- getSelectionSystem().SelectPoint( *m_view, &position[0], &m_epsilon[0], m_mouseMoved ? RadiantSelectionSystem::eReplace : RadiantSelectionSystem::eCycle, false );
+ if( g_bLeftMouseClickSelector ){
+ getSelectionSystem().SelectPoint( *m_view, &position[0], &m_epsilon[0], m_mouseMoved ? RadiantSelectionSystem::eReplace : RadiantSelectionSystem::eCycle, false );
+ }
m_start = m_current = device_constrained( position );
}
DeviceVector devicePosition( window_to_normalised_device( position, m_width, m_height ) );
g_bAltDragManipulatorResize = ( modifiers == c_modifierAlt ) ? true : false;
- if ( ( modifiers == c_modifier_manipulator || modifiers == c_modifierAlt ) && m_manipulator.mouseDown( devicePosition ) ) {
+ if ( ( modifiers == c_modifier_manipulator || ( modifiers == c_modifierAlt && getSelectionSystem().Mode() != SelectionSystem::eComponent ) ) && m_manipulator.mouseDown( devicePosition ) ) {
g_mouseMovedCallback.insert( MouseEventCallback( Manipulator_::MouseMovedCaller( m_manipulator ) ) );
g_mouseUpCallback.insert( MouseEventCallback( Manipulator_::MouseUpCaller( m_manipulator ) ) );
}
else
{
- if ( button == c_button_select ) {
- m_selector.m_mouse2 = false;
- }
- else{
- m_selector.m_mouse2 = true;
- }
+ m_selector.m_mouse2 = ( button == c_button_select ) ? false : true;
m_selector.mouseDown( devicePosition );
g_mouseMovedCallback.insert( MouseEventCallback( Selector_::MouseMovedCaller( m_selector ) ) );
g_mouseUpCallback.insert( MouseEventCallback( Selector_::MouseUpCaller( m_selector ) ) );