diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 3e41839530..ca16c0456c 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -148,6 +148,9 @@ const U8 LL_PCODE_PATH_IGNORE = 0x00;
const U8 LL_PCODE_PATH_MIN = 0x01; // min/max needs to be >> 4 of real min/max
const U8 LL_PCODE_PATH_LINE = 0x10;
const U8 LL_PCODE_PATH_CIRCLE = 0x20;
+//<-- Working33 by Gregory Maurer
+const U8 LL_PCODE_PATH_CIRCLE_33 = 0x21;
+//Working33 -->
const U8 LL_PCODE_PATH_CIRCLE2 = 0x30;
const U8 LL_PCODE_PATH_TEST = 0x40;
const U8 LL_PCODE_PATH_FLEXIBLE = 0x80;
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 3764512d52..702415c72e 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -91,6 +91,22 @@ enum {
MI_TUBE,
MI_RING,
MI_SCULPT,
+ MI_PATH_LINE_PROFILE_CIRCLE_HALF,
+ MI_PATH_CIRCLE_PROFILE_CIRCLE_HALF,
+ MI_PATH_CIRCLE2_PROFILE_SQUARE,
+ MI_PATH_CIRCLE2_PROFILE_TRI,
+ MI_PATH_CIRCLE2_PROFILE_CIRCLE,
+ MI_PATH_CIRCLE2_PROFILE_CIRCLE_HALF,
+ MI_PATH_TEST_PROFILE_SQUARE,
+ MI_PATH_TEST_PROFILE_TRI,
+ MI_PATH_TEST_PROFILE_CIRCLE,
+ MI_PATH_TEST_PROFILE_CIRCLE_HALF,
+ //<-- Working33 by Gregory Maurer
+ MI_PATH_33_PROFILE_CIRCLE,
+ MI_PATH_33_PROFILE_SQUARE,
+ MI_PATH_33_PROFILE_TRIANGLE,
+ MI_PATH_33_PROFILE_HALFCIRCLE,
+ //Working33 -->
MI_NONE,
MI_VOLUME_COUNT
};
@@ -748,6 +764,56 @@ void LLPanelObject::getState( )
{
selected_item = MI_TUBE;
}
+ else if ( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_EQUALTRI )
+ {
+ selected_item = MI_PATH_CIRCLE2_PROFILE_TRI;
+ }
+ else if ( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_SQUARE )
+ {
+ selected_item = MI_PATH_CIRCLE2_PROFILE_SQUARE;
+ }
+ else if ( path == LL_PCODE_PATH_CIRCLE2 && profile == LL_PCODE_PROFILE_CIRCLE_HALF )
+ {
+ selected_item = MI_PATH_CIRCLE2_PROFILE_CIRCLE_HALF;
+ }
+ else if ( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_SQUARE )
+ {
+ selected_item = MI_PATH_TEST_PROFILE_SQUARE;
+ }
+ else if ( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_EQUALTRI )
+ {
+ selected_item = MI_PATH_TEST_PROFILE_TRI;
+ }
+ else if ( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_CIRCLE )
+ {
+ selected_item = MI_PATH_TEST_PROFILE_CIRCLE;
+ }
+ else if ( path == LL_PCODE_PATH_TEST && profile == LL_PCODE_PROFILE_CIRCLE_HALF )
+ {
+ selected_item = MI_PATH_TEST_PROFILE_CIRCLE_HALF;
+ }
+ else if ( path == LL_PCODE_PATH_LINE && profile == LL_PCODE_PROFILE_CIRCLE_HALF )
+ {
+ selected_item = MI_PATH_LINE_PROFILE_CIRCLE_HALF;
+ }
+ //<-- Working33 by Gregory Maurer
+ else if ( path == LL_PCODE_PATH_CIRCLE_33 && profile == LL_PCODE_PROFILE_CIRCLE )
+ {
+ selected_item = MI_PATH_33_PROFILE_CIRCLE;
+ }
+ else if ( path == LL_PCODE_PATH_CIRCLE_33 && profile == LL_PCODE_PROFILE_SQUARE )
+ {
+ selected_item = MI_PATH_33_PROFILE_SQUARE;
+ }
+ else if ( path == LL_PCODE_PATH_CIRCLE_33 && profile == LL_PCODE_PROFILE_ISOTRI )
+ {
+ selected_item = MI_PATH_33_PROFILE_TRIANGLE;
+ }
+ else if ( path == LL_PCODE_PATH_CIRCLE_33 && profile == LL_PCODE_PROFILE_CIRCLE_HALF )
+ {
+ selected_item = MI_PATH_33_PROFILE_HALFCIRCLE;
+ }
+ //Working33 -->
else
{
llinfos << "Unknown path " << (S32) path << " profile " << (S32) profile << " in getState" << llendl;
@@ -872,6 +938,8 @@ void LLPanelObject::getState( )
// Radius offset.
F32 radius_offset = volume_params.getRadiusOffset();
// Limit radius offset, based on taper and hole size y.
+//KC: Phoenix capability
+#if 0
F32 radius_mag = fabs(radius_offset);
F32 hole_y_mag = fabs(scale_y);
F32 taper_y_mag = fabs(taper_y);
@@ -896,6 +964,7 @@ void LLPanelObject::getState( )
radius_offset = max_radius_mag;
}
}
+#endif
mSpinRadiusOffset->set( radius_offset);
calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset);
@@ -907,6 +976,8 @@ void LLPanelObject::getState( )
// Skew
F32 skew = volume_params.getSkew();
// Limit skew, based on revolutions hole size x.
+//KC: Phoenix capability
+#if 0
F32 skew_mag= fabs(skew);
F32 min_skew_mag = 1.0f - 1.0f / (revolutions * scale_x + 1.0f);
// Discontinuity; A revolution of 1 allows skews below 0.5.
@@ -926,6 +997,7 @@ void LLPanelObject::getState( )
skew = min_skew_mag;
}
}
+#endif
mSpinSkew->set( skew );
calcp->setVar(LLCalc::SKEW, skew);
}
@@ -939,11 +1011,12 @@ void LLPanelObject::getState( )
BOOL top_shear_x_visible = TRUE;
BOOL top_shear_y_visible = TRUE;
BOOL twist_visible = TRUE;
- BOOL advanced_cut_visible = FALSE;
- BOOL taper_visible = FALSE;
- BOOL skew_visible = FALSE;
- BOOL radius_offset_visible = FALSE;
- BOOL revolutions_visible = FALSE;
+ //KC: Phoenix capability, allow all transforms
+ BOOL advanced_cut_visible = TRUE;
+ BOOL taper_visible = TRUE;
+ BOOL skew_visible = TRUE;
+ BOOL radius_offset_visible = TRUE;
+ BOOL revolutions_visible = TRUE;
BOOL sculpt_texture_visible = FALSE;
F32 twist_min = OBJECT_TWIST_LINEAR_MIN;
F32 twist_max = OBJECT_TWIST_LINEAR_MAX;
@@ -957,11 +1030,11 @@ 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;
+ top_size_x_visible = TRUE;
+ top_size_y_visible = TRUE;
+ top_shear_x_visible = TRUE;
+ top_shear_y_visible = TRUE;
+ twist_visible = TRUE;
advanced_cut_visible = TRUE;
advanced_is_dimple = TRUE;
twist_min = OBJECT_TWIST_MIN;
@@ -1030,6 +1103,10 @@ void LLPanelObject::getState( )
mSpinScaleY->set( scale_y );
calcp->setVar(LLCalc::X_HOLE, scale_x);
calcp->setVar(LLCalc::Y_HOLE, scale_y);
+ mSpinScaleX->setMinValue(0.0f);
+ mSpinScaleX->setMaxValue(1.0f);
+ mSpinScaleY->setMinValue(0.0f);
+ mSpinScaleY->setMaxValue(1.0f);
break;
case MI_TORUS:
case MI_TUBE:
@@ -1046,12 +1123,20 @@ void LLPanelObject::getState( )
default:
if (editable)
{
- mSpinScaleX->set( 1.f - scale_x );
- mSpinScaleY->set( 1.f - scale_y );
- mSpinScaleX->setMinValue(-1.f);
- mSpinScaleX->setMaxValue(1.f);
- mSpinScaleY->setMinValue(-1.f);
- mSpinScaleY->setMaxValue(1.f);
+ F32 tmp_scale_x = scale_x;
+ F32 tmp_scale_y = scale_y;
+ if ( selected_item == MI_BOX || selected_item == MI_CYLINDER || selected_item == MI_PRISM)
+ {
+ tmp_scale_x = 1.f - tmp_scale_x;
+ tmp_scale_y = 1.f - tmp_scale_y;
+ }
+ mSpinScaleX->set( tmp_scale_x );
+ mSpinScaleY->set( tmp_scale_y );
+ mSpinScaleX->setMinValue(-4000.f);
+ mSpinScaleX->setMaxValue(4000.f);
+ mSpinScaleY->setMinValue(-4000.f);
+ mSpinScaleY->setMaxValue(4000.f);
+ // Torus' Hole Size is Box/Cyl/Prism's Taper
calcp->setVar(LLCalc::X_TAPER, 1.f - scale_x);
calcp->setVar(LLCalc::Y_TAPER, 1.f - scale_y);
@@ -1063,6 +1148,8 @@ void LLPanelObject::getState( )
}
// Check if we need to limit the hollow based on the hole type.
+//KC: Phoenix capability
+#if 0
if ( selected_hole == MI_HOLE_SQUARE &&
( selected_item == MI_CYLINDER || selected_item == MI_TORUS ||
selected_item == MI_PRISM || selected_item == MI_RING ||
@@ -1072,9 +1159,10 @@ void LLPanelObject::getState( )
mSpinHollow->setMaxValue(70.f);
}
else
+#endif
{
mSpinHollow->setMinValue(0.f);
- mSpinHollow->setMaxValue(95.f);
+ mSpinHollow->setMaxValue(100.f);
}
// Update field enablement
@@ -1470,6 +1558,78 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
path = LL_PCODE_PATH_CIRCLE;
break;
+ case MI_PATH_LINE_PROFILE_CIRCLE_HALF:
+ profile = LL_PCODE_PROFILE_CIRCLE_HALF;
+ path = LL_PCODE_PATH_LINE;
+ break;
+
+ case MI_PATH_CIRCLE_PROFILE_CIRCLE_HALF:
+ profile = LL_PCODE_PROFILE_CIRCLE_HALF;
+ path = LL_PCODE_PATH_CIRCLE;
+ break;
+
+ case MI_PATH_CIRCLE2_PROFILE_SQUARE:
+ profile = LL_PCODE_PROFILE_SQUARE;
+ path = LL_PCODE_PATH_CIRCLE2;
+ break;
+
+ case MI_PATH_CIRCLE2_PROFILE_TRI:
+ profile = LL_PCODE_PROFILE_EQUALTRI;
+ path = LL_PCODE_PATH_CIRCLE2;
+ break;
+
+ case MI_PATH_CIRCLE2_PROFILE_CIRCLE:
+ profile = LL_PCODE_PROFILE_CIRCLE;
+ path = LL_PCODE_PATH_CIRCLE2;
+ break;
+
+ case MI_PATH_CIRCLE2_PROFILE_CIRCLE_HALF:
+ profile = LL_PCODE_PROFILE_CIRCLE_HALF;
+ path = LL_PCODE_PATH_CIRCLE2;
+ break;
+
+ case MI_PATH_TEST_PROFILE_SQUARE:
+ profile = LL_PCODE_PROFILE_SQUARE;
+ path = LL_PCODE_PATH_TEST;
+ break;
+
+ case MI_PATH_TEST_PROFILE_TRI:
+ profile = LL_PCODE_PROFILE_EQUALTRI;
+ path = LL_PCODE_PATH_TEST;
+ break;
+
+ case MI_PATH_TEST_PROFILE_CIRCLE:
+ profile = LL_PCODE_PROFILE_CIRCLE;
+ path = LL_PCODE_PATH_TEST;
+ break;
+
+ case MI_PATH_TEST_PROFILE_CIRCLE_HALF:
+ profile = LL_PCODE_PROFILE_CIRCLE_HALF;
+ path = LL_PCODE_PATH_TEST;
+ break;
+
+//<-- Working33 by Gregory Maurer
+ case MI_PATH_33_PROFILE_CIRCLE:
+ profile = LL_PCODE_PROFILE_CIRCLE;
+ path = LL_PCODE_PATH_CIRCLE_33;
+ break;
+
+ case MI_PATH_33_PROFILE_SQUARE:
+ profile = LL_PCODE_PROFILE_SQUARE;
+ path = LL_PCODE_PATH_CIRCLE_33;
+ break;
+
+ case MI_PATH_33_PROFILE_TRIANGLE:
+ profile = LL_PCODE_PROFILE_ISOTRI;
+ path = LL_PCODE_PATH_CIRCLE_33;
+ break;
+
+ case MI_PATH_33_PROFILE_HALFCIRCLE:
+ profile = LL_PCODE_PROFILE_CIRCLE_HALF;
+ path = LL_PCODE_PATH_CIRCLE_33;
+ break;
+//Working33 -->
+
default:
llwarns << "Unknown base type " << selected_type
<< " in getVolumeParams()" << llendl;
@@ -1560,6 +1720,8 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
// Hollowness
F32 hollow = mSpinHollow->get() / 100.f;
+//KC: Phoenix capability
+#if 0
if ( selected_hole == MI_HOLE_SQUARE &&
( selected_type == MI_CYLINDER || selected_type == MI_TORUS ||
selected_type == MI_PRISM || selected_type == MI_RING ||
@@ -1567,6 +1729,7 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
{
if (hollow > 0.7f) hollow = 0.7f;
}
+#endif
volume_params.setHollow( hollow );
@@ -1610,6 +1773,8 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
// Revolutions
F32 revolutions = mSpinRevolutions->get();
+//KC: Phoenix capability
+#if 0
if ( selected_type == MI_SPHERE )
{
// Snap values to valid sphere parameters.
@@ -1680,6 +1845,7 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
}
}
}
+#endif
volume_params.setRatio( scale_x, scale_y );
volume_params.setSkew(skew);
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index ae73d081c3..4fabe35e32 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1687,6 +1687,64 @@ even though the user gets a free copy.
label="Sculpted"
name="Sculpted"
value="Sculpted" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+