Radiant:
binds... * M1 click: tunnel selector * shift + m2 drag: paint objects selection * ctrl + m1: select brush face * ctrl + m2 drag: paint faces selection * shift + m2: tunnel selector * shift + m1 drag: rectangular toggle selector * ctrl + m2: tunnel face selector * ctrl + m1 drag: rectangular selector of brush faces * alt + m2 drag: 2d zoom in/out * ctrl + m2: quick clipper mode (quits one after split done)
This commit is contained in:
parent
09b97bb415
commit
fab6205991
|
|
@ -2577,6 +2577,8 @@ enum EModifier
|
||||||
eToggle,
|
eToggle,
|
||||||
eReplace,
|
eReplace,
|
||||||
eCycle,
|
eCycle,
|
||||||
|
eSelect,
|
||||||
|
eDeselect,
|
||||||
};
|
};
|
||||||
|
|
||||||
RadiantSelectionSystem() :
|
RadiantSelectionSystem() :
|
||||||
|
|
@ -2769,16 +2771,27 @@ void deselectAll(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deselectComponentsOrAll( bool components ){
|
||||||
|
if ( components ) {
|
||||||
|
setSelectedAllComponents( false );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deselectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SelectPoint( const View& view, const float device_point[2], const float device_epsilon[2], RadiantSelectionSystem::EModifier modifier, bool face ){
|
void SelectPoint( const View& view, const float device_point[2], const float device_epsilon[2], RadiantSelectionSystem::EModifier modifier, bool face ){
|
||||||
|
//globalOutputStream() << device_point[0] << " " << device_point[1] << "\n";
|
||||||
|
#ifdef _DEBUG
|
||||||
ASSERT_MESSAGE( fabs( device_point[0] ) <= 1.0f && fabs( device_point[1] ) <= 1.0f, "point-selection error" );
|
ASSERT_MESSAGE( fabs( device_point[0] ) <= 1.0f && fabs( device_point[1] ) <= 1.0f, "point-selection error" );
|
||||||
|
#else
|
||||||
|
if( fabs( device_point[0] ) >= 1.0f || fabs( device_point[1] ) >= 1.0f ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if ( modifier == eReplace ) {
|
if ( modifier == eReplace ) {
|
||||||
if ( face ) {
|
deselectComponentsOrAll( face );
|
||||||
setSelectedAllComponents( false );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
deselectAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
//nothingSelected() doesn't consider faces, selected in non-component mode, m
|
//nothingSelected() doesn't consider faces, selected in non-component mode, m
|
||||||
|
|
@ -2834,7 +2847,7 @@ void SelectPoint( const View& view, const float device_point[2], const float dev
|
||||||
while ( i != selector.end() )
|
while ( i != selector.end() )
|
||||||
{
|
{
|
||||||
if ( ( *i ).second->isSelected() ) {
|
if ( ( *i ).second->isSelected() ) {
|
||||||
( *i ).second->setSelected( false );
|
deselectComponentsOrAll( face );
|
||||||
++i;
|
++i;
|
||||||
if ( i != selector.end() ) {
|
if ( i != selector.end() ) {
|
||||||
i->second->setSelected( true );
|
i->second->setSelected( true );
|
||||||
|
|
@ -2849,40 +2862,77 @@ void SelectPoint( const View& view, const float device_point[2], const float dev
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
if( !CycleSelectionOccured ){
|
if( !CycleSelectionOccured ){
|
||||||
if ( face ){
|
deselectComponentsOrAll( face );
|
||||||
setSelectedAllComponents( false );
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
deselectAll();
|
|
||||||
}
|
|
||||||
( *selector.begin() ).second->setSelected( true );
|
( *selector.begin() ).second->setSelected( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case RadiantSelectionSystem::eSelect:
|
||||||
|
{
|
||||||
|
( *selector.begin() ).second->setSelected( true );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RadiantSelectionSystem::eDeselect:
|
||||||
|
{
|
||||||
|
( *selector.begin() ).second->setSelected( false );
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( modifier == eCycle || modifier == eReplace ){
|
else if( modifier == eCycle ){
|
||||||
if ( face ){
|
deselectComponentsOrAll( face );
|
||||||
setSelectedAllComponents( false );
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SelectPoint_InitPaint( const View& view, const float device_point[2], const float device_epsilon[2], bool face ){
|
||||||
|
#ifdef _DEBUG
|
||||||
|
ASSERT_MESSAGE( fabs( device_point[0] ) <= 1.0f && fabs( device_point[1] ) <= 1.0f, "point-selection error" );
|
||||||
|
#else
|
||||||
|
if( fabs( device_point[0] ) >= 1.0f || fabs( device_point[1] ) >= 1.0f ){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined ( DEBUG_SELECTION )
|
||||||
|
g_render_clipped.destroy();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
View scissored( view );
|
||||||
|
ConstructSelectionTest( scissored, SelectionBoxForPoint( device_point, device_epsilon ) );
|
||||||
|
|
||||||
|
SelectionVolume volume( scissored );
|
||||||
|
SelectionPool selector;
|
||||||
|
if ( face ) {
|
||||||
|
Scene_TestSelect_Component( selector, volume, scissored, eFace );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Scene_TestSelect( selector, volume, scissored, Mode(), ComponentMode() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !selector.failed() ) {
|
||||||
|
SelectableSortedSet::iterator best = selector.begin();
|
||||||
|
if ( ( *best ).second->isSelected() ) {
|
||||||
|
( *best ).second->setSelected( false );
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
deselectAll();
|
( *best ).second->setSelected( true );
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectArea( const View& view, const float device_point[2], const float device_delta[2], RadiantSelectionSystem::EModifier modifier, bool face ){
|
void SelectArea( const View& view, const float device_point[2], const float device_delta[2], RadiantSelectionSystem::EModifier modifier, bool face ){
|
||||||
if ( modifier == eReplace ) {
|
if ( modifier == eReplace ) {
|
||||||
if ( face ) {
|
deselectComponentsOrAll( face );
|
||||||
setSelectedAllComponents( false );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
deselectAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined ( DEBUG_SELECTION )
|
#if defined ( DEBUG_SELECTION )
|
||||||
|
|
@ -3524,6 +3574,8 @@ DeviceVector m_current;
|
||||||
DeviceVector m_epsilon;
|
DeviceVector m_epsilon;
|
||||||
ModifierFlags m_state;
|
ModifierFlags m_state;
|
||||||
bool m_mouse2;
|
bool m_mouse2;
|
||||||
|
bool m_paintInitialized;
|
||||||
|
bool m_paintSelect;
|
||||||
const View* m_view;
|
const View* m_view;
|
||||||
RectangleCallback m_window_update;
|
RectangleCallback m_window_update;
|
||||||
|
|
||||||
|
|
@ -3567,7 +3619,7 @@ void testSelect_simpleM1( DeviceVector position ){
|
||||||
|
|
||||||
|
|
||||||
bool selecting() const {
|
bool selecting() const {
|
||||||
return m_state != c_modifier_manipulator;
|
return m_state != c_modifier_manipulator && !m_mouse2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setState( ModifierFlags state ){
|
void setState( ModifierFlags state ){
|
||||||
|
|
@ -3591,16 +3643,36 @@ void modifierDisable( ModifierFlags type ){
|
||||||
|
|
||||||
void mouseDown( DeviceVector position ){
|
void mouseDown( DeviceVector position ){
|
||||||
m_start = m_current = device_constrained( position );
|
m_start = m_current = device_constrained( position );
|
||||||
|
m_paintInitialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseMoved( DeviceVector position ){
|
void mouseMoved( DeviceVector position ){
|
||||||
m_current = device_constrained( position );
|
m_current = device_constrained( position );
|
||||||
draw_area();
|
if( !m_mouse2 ){
|
||||||
|
draw_area();
|
||||||
|
}
|
||||||
|
else if( m_paintInitialized ){
|
||||||
|
getSelectionSystem().SelectPoint( *m_view, &position[0], &m_epsilon[0],
|
||||||
|
m_paintSelect ? RadiantSelectionSystem::eSelect : RadiantSelectionSystem::eDeselect,
|
||||||
|
( m_state & c_modifier_face ) != c_modifierNone );
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
DeviceVector delta( position - m_start );
|
||||||
|
if ( fabs( delta.x() ) > m_epsilon.x() || fabs( delta.y() ) > m_epsilon.y() ) {
|
||||||
|
m_paintSelect = getSelectionSystem().SelectPoint_InitPaint( *m_view, &position[0], &m_epsilon[0], ( m_state & c_modifier_face ) != c_modifierNone );
|
||||||
|
m_paintInitialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
typedef MemberCaller1<Selector_, DeviceVector, &Selector_::mouseMoved> MouseMovedCaller;
|
typedef MemberCaller1<Selector_, DeviceVector, &Selector_::mouseMoved> MouseMovedCaller;
|
||||||
|
|
||||||
void mouseUp( DeviceVector position ){
|
void mouseUp( DeviceVector position ){
|
||||||
testSelect( device_constrained( position ) );
|
if( !m_paintInitialized ){
|
||||||
|
testSelect( device_constrained( position ) );
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_start = m_current = DeviceVector( 0.0f, 0.0f );
|
||||||
|
}
|
||||||
|
|
||||||
g_mouseMovedCallback.clear();
|
g_mouseMovedCallback.clear();
|
||||||
g_mouseUpCallback.clear();
|
g_mouseUpCallback.clear();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user