From 01ed71cbcf3f71e900720b218758a47769eaa076 Mon Sep 17 00:00:00 2001 From: phr0z3nt04st Date: Tue, 1 Jun 2010 17:47:28 -0500 Subject: [PATCH] Added extra shapes and removed some limits. --- indra/newview/llpanelobject.cpp | 220 ++++++++++++++++-- .../skins/default/xui/en-us/floater_tools.xml | 31 +++ 2 files changed, 227 insertions(+), 24 deletions(-) diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 4edd70b24..2e750759c 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -87,6 +87,19 @@ enum { MI_TUBE, MI_RING, MI_SCULPT, + // + MI_HEMICYLINDER, + + MI_SPIRAL_CIRCLE, + MI_SPIRAL_SQUARE, + MI_SPIRAL_TRIANGLE, + MI_SPIRAL_SEMICIRCLE, + + MI_TEST_CYLINDER, + MI_TEST_BOX, + MI_TEST_PRISM, + MI_TEST_HEMICYLINDER, + // MI_NONE, MI_VOLUME_COUNT }; @@ -676,10 +689,12 @@ void LLPanelObject::getState( ) { selected_item = MI_PRISM; } - else if (path == LL_PCODE_PATH_FLEXIBLE) // shouldn't happen - { - selected_item = MI_CYLINDER; // reasonable default - } + // that was messin up my hemicylinder + //else if (path == LL_PCODE_PATH_FLEXIBLE) // shouldn't happen + //{ + // selected_item = MI_CYLINDER; // reasonable default + //} + // else if ( path == LL_PCODE_PATH_CIRCLE && profile == LL_PCODE_PROFILE_CIRCLE && scale_y > 0.75f) { selected_item = MI_SPHERE; @@ -692,11 +707,13 @@ void LLPanelObject::getState( ) { selected_item = MI_SPHERE; } - else if ( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_CIRCLE ) - { - // Spirals aren't supported. Make it into a sphere. JC - selected_item = MI_SPHERE; - } + // spirals are supported by me + //else if ( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_CIRCLE ) + //{ + // // Spirals aren't supported. Make it into a sphere. JC + // selected_item = MI_SPHERE; + //} + // else if ( path == LL_PCODE_PATH_CIRCLE && profile == LL_PCODE_PROFILE_EQUALTRI ) { selected_item = MI_RING; @@ -705,6 +722,63 @@ void LLPanelObject::getState( ) { selected_item = MI_TUBE; } + // + else if( linear_path && profile == LL_PCODE_PROFILE_CIRCLE_HALF) + { + selected_item = MI_HEMICYLINDER; + } + // Spirals + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_CIRCLE ) + { + selected_item = MI_SPIRAL_CIRCLE; + } + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_SQUARE ) + { + selected_item = MI_SPIRAL_SQUARE; + } + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_ISOTRI ) + { + selected_item = MI_SPIRAL_TRIANGLE; + } + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_EQUALTRI ) + { + selected_item = MI_SPIRAL_TRIANGLE; + } + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_RIGHTTRI ) + { + selected_item = MI_SPIRAL_TRIANGLE; + } + else if( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_CIRCLE_HALF ) + { + selected_item = MI_SPIRAL_SEMICIRCLE; + } + // Test path + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_CIRCLE ) + { + selected_item = MI_TEST_CYLINDER; + } + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_SQUARE ) + { + selected_item = MI_TEST_BOX; + } + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_ISOTRI ) + { + selected_item = MI_TEST_PRISM; + } + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_EQUALTRI ) + { + selected_item = MI_TEST_PRISM; + } + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_RIGHTTRI ) + { + selected_item = MI_TEST_PRISM; + } + else if( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_CIRCLE_HALF ) + { + selected_item = MI_TEST_HEMICYLINDER; + } + + // else { llinfos << "Unknown path " << (S32) path << " profile " << (S32) profile << " in getState" << llendl; @@ -911,17 +985,47 @@ void LLPanelObject::getState( ) switch (selected_item) { case MI_SPHERE: - top_size_x_visible = FALSE; - top_size_y_visible = FALSE; - top_shear_x_visible = FALSE; - top_shear_y_visible = FALSE; - //twist_visible = FALSE; + // + case MI_SPIRAL_CIRCLE: + case MI_SPIRAL_SQUARE: + case MI_SPIRAL_TRIANGLE: + case MI_SPIRAL_SEMICIRCLE: + //top_size_x_visible = FALSE; + //top_size_y_visible = FALSE; + //top_shear_x_visible = FALSE; + //top_shear_y_visible = FALSE; + //advanced_cut_visible = TRUE; + //advanced_is_dimple = TRUE; + //twist_min = OBJECT_TWIST_MIN; + //twist_max = OBJECT_TWIST_MAX; + //twist_inc = OBJECT_TWIST_INC; + // Just like the others except no radius + size_is_hole = TRUE; + skew_visible = TRUE; advanced_cut_visible = TRUE; - advanced_is_dimple = TRUE; + taper_visible = TRUE; + radius_offset_visible = FALSE; + revolutions_visible = TRUE; twist_min = OBJECT_TWIST_MIN; twist_max = OBJECT_TWIST_MAX; twist_inc = OBJECT_TWIST_INC; break; + case MI_TEST_BOX: + case MI_TEST_CYLINDER: + case MI_TEST_PRISM: + case MI_TEST_HEMICYLINDER: + cut_visible = FALSE; + advanced_cut_visible = TRUE; + taper_visible = FALSE; + radius_offset_visible = FALSE; + revolutions_visible = FALSE; + top_shear_x_visible = FALSE; + top_shear_y_visible = FALSE; + twist_min = OBJECT_TWIST_MIN; + twist_max = OBJECT_TWIST_MAX; + twist_inc = OBJECT_TWIST_INC; + // + break; case MI_TORUS: case MI_TUBE: @@ -979,7 +1083,10 @@ void LLPanelObject::getState( ) // Check if we need to change top size/hole size params. switch (selected_item) { - case MI_SPHERE: + // + //case MI_SPHERE: + // Sphere fall through to default: set scale_x min/max, dunno why + // case MI_TORUS: case MI_TUBE: case MI_RING: @@ -1410,7 +1517,47 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params) profile = LL_PCODE_PROFILE_CIRCLE; path = LL_PCODE_PATH_CIRCLE; break; - + // + case MI_HEMICYLINDER: + profile = LL_PCODE_PROFILE_CIRCLE_HALF; + path = LL_PCODE_PATH_LINE; + break; + // Spirals + case MI_SPIRAL_CIRCLE: + profile = LL_PCODE_PROFILE_CIRCLE; + path = LL_PCODE_PATH_CIRCLE2; + break; + case MI_SPIRAL_SQUARE: + profile = LL_PCODE_PROFILE_SQUARE; + path = LL_PCODE_PATH_CIRCLE2; + break; + case MI_SPIRAL_TRIANGLE: + profile = LL_PCODE_PROFILE_EQUALTRI; + path = LL_PCODE_PATH_CIRCLE2; + break; + case MI_SPIRAL_SEMICIRCLE: + profile = LL_PCODE_PROFILE_CIRCLE_HALF; + path = LL_PCODE_PATH_CIRCLE2; + break; + // Test path + case MI_TEST_CYLINDER: + profile = LL_PCODE_PROFILE_CIRCLE; + path = LL_PCODE_PATH_TEST; + break; + case MI_TEST_BOX: + profile = LL_PCODE_PROFILE_SQUARE; + path = LL_PCODE_PATH_TEST; + break; + case MI_TEST_PRISM: + profile = LL_PCODE_PROFILE_EQUALTRI; + path = LL_PCODE_PATH_TEST; + break; + case MI_TEST_HEMICYLINDER: + profile = LL_PCODE_PROFILE_CIRCLE_HALF; + path = LL_PCODE_PATH_TEST; + break; + // + default: llwarns << "Unknown base type " << selected_type << " in getVolumeParams()" << llendl; @@ -1537,7 +1684,22 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params) // Scale X,Y F32 scale_x = mSpinScaleX->get(); F32 scale_y = mSpinScaleY->get(); - if ( was_selected_type == MI_BOX || was_selected_type == MI_CYLINDER || was_selected_type == MI_PRISM) + // + //if ( was_selected_type == MI_BOX || was_selected_type == MI_CYLINDER || was_selected_type == MI_PRISM) + if ( was_selected_type == MI_BOX || was_selected_type == MI_CYLINDER || was_selected_type == MI_PRISM || + was_selected_type == MI_SPHERE || + was_selected_type == MI_HEMICYLINDER || + was_selected_type == MI_SPIRAL_CIRCLE || + was_selected_type == MI_SPIRAL_SQUARE || + was_selected_type == MI_SPIRAL_TRIANGLE || + was_selected_type == MI_SPIRAL_SEMICIRCLE || + was_selected_type == MI_TEST_BOX || + was_selected_type == MI_TEST_PRISM || + was_selected_type == MI_TEST_CYLINDER || + was_selected_type == MI_TEST_HEMICYLINDER + ) + // but why put sphere here if the other circle-paths aren't? + // { scale_x = 1.f - scale_x; scale_y = 1.f - scale_y; @@ -1559,13 +1721,23 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params) if ( selected_type == MI_SPHERE ) { // Snap values to valid sphere parameters. - scale_x = 1.0f; - scale_y = 1.0f; - skew = 0.0f; - taper_x = 0.0f; - taper_y = 0.0f; + // make scale (taper (hole size?)) work for sphere, part 2 of 2 + //scale_x = 1.0f; + //scale_y = 1.0f; + // + // testing skew + //skew = 0.0f; + // + // + // Make OTHER taper work for sphere + //taper_x = 0.0f; + //taper_y = 0.0f; + // radius_offset = 0.0f; - revolutions = 1.0f; + // + // Revolutions works fine on sphere + //revolutions = 1.0f; + // } else if ( selected_type == MI_TORUS || selected_type == MI_TUBE || selected_type == MI_RING ) diff --git a/indra/newview/skins/default/xui/en-us/floater_tools.xml b/indra/newview/skins/default/xui/en-us/floater_tools.xml index 5b4861cd2..f8664bc8f 100644 --- a/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/indra/newview/skins/default/xui/en-us/floater_tools.xml @@ -716,6 +716,37 @@ Sculpted + + + Hemicylinder + + + + Spiral Circle + + + Spiral Square + + + Spiral Triangle + + + Spiral Semicircle + + + + Test Cylinder + + + Test Box + + + Test Prism + + + Test Hemicylinder + +