diff options
Diffstat (limited to 'linden/indra/newview/llpanelobject.cpp')
-rw-r--r-- | linden/indra/newview/llpanelobject.cpp | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp index 75f479c..b0274e6 100644 --- a/linden/indra/newview/llpanelobject.cpp +++ b/linden/indra/newview/llpanelobject.cpp | |||
@@ -47,6 +47,7 @@ | |||
47 | // project includes | 47 | // project includes |
48 | #include "llagent.h" | 48 | #include "llagent.h" |
49 | #include "llbutton.h" | 49 | #include "llbutton.h" |
50 | #include "llcalc.h" | ||
50 | #include "llcheckboxctrl.h" | 51 | #include "llcheckboxctrl.h" |
51 | #include "llcolorswatch.h" | 52 | #include "llcolorswatch.h" |
52 | #include "llcombobox.h" | 53 | #include "llcombobox.h" |
@@ -110,6 +111,9 @@ BOOL LLPanelObject::postBuild() | |||
110 | // Top | 111 | // Top |
111 | //-------------------------------------------------------- | 112 | //-------------------------------------------------------- |
112 | 113 | ||
114 | // Build constant tipsheet | ||
115 | childSetAction("build_math_constants",onClickBuildConstants,this); | ||
116 | |||
113 | // Lock checkbox | 117 | // Lock checkbox |
114 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); | 118 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); |
115 | childSetCommitCallback("checkbox locked",onCommitLock,this); | 119 | childSetCommitCallback("checkbox locked",onCommitLock,this); |
@@ -342,6 +346,8 @@ void LLPanelObject::getState( ) | |||
342 | } | 346 | } |
343 | } | 347 | } |
344 | 348 | ||
349 | LLCalc* calcp = LLCalc::getInstance(); | ||
350 | |||
345 | LLVOVolume *volobjp = NULL; | 351 | LLVOVolume *volobjp = NULL; |
346 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) | 352 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) |
347 | { | 353 | { |
@@ -358,6 +364,7 @@ void LLPanelObject::getState( ) | |||
358 | 364 | ||
359 | // Disable all text input fields | 365 | // Disable all text input fields |
360 | clearCtrls(); | 366 | clearCtrls(); |
367 | calcp->clearAllVariables(); | ||
361 | return; | 368 | return; |
362 | } | 369 | } |
363 | 370 | ||
@@ -366,6 +373,8 @@ void LLPanelObject::getState( ) | |||
366 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); | 373 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); |
367 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); | 374 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); |
368 | 375 | ||
376 | childSetEnabled("build_math_constants",true); | ||
377 | |||
369 | S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); | 378 | S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); |
370 | BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )) | 379 | BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )) |
371 | && (selected_count == 1); | 380 | && (selected_count == 1); |
@@ -384,12 +393,18 @@ void LLPanelObject::getState( ) | |||
384 | mCtrlPosX->set( vec.mV[VX] ); | 393 | mCtrlPosX->set( vec.mV[VX] ); |
385 | mCtrlPosY->set( vec.mV[VY] ); | 394 | mCtrlPosY->set( vec.mV[VY] ); |
386 | mCtrlPosZ->set( vec.mV[VZ] ); | 395 | mCtrlPosZ->set( vec.mV[VZ] ); |
396 | calcp->setVar(LLCalc::X_POS, vec.mV[VX]); | ||
397 | calcp->setVar(LLCalc::Y_POS, vec.mV[VY]); | ||
398 | calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]); | ||
387 | } | 399 | } |
388 | else | 400 | else |
389 | { | 401 | { |
390 | mCtrlPosX->clear(); | 402 | mCtrlPosX->clear(); |
391 | mCtrlPosY->clear(); | 403 | mCtrlPosY->clear(); |
392 | mCtrlPosZ->clear(); | 404 | mCtrlPosZ->clear(); |
405 | calcp->clearVar(LLCalc::X_POS); | ||
406 | calcp->clearVar(LLCalc::Y_POS); | ||
407 | calcp->clearVar(LLCalc::Z_POS); | ||
393 | } | 408 | } |
394 | 409 | ||
395 | 410 | ||
@@ -404,12 +419,18 @@ void LLPanelObject::getState( ) | |||
404 | mCtrlScaleX->set( vec.mV[VX] ); | 419 | mCtrlScaleX->set( vec.mV[VX] ); |
405 | mCtrlScaleY->set( vec.mV[VY] ); | 420 | mCtrlScaleY->set( vec.mV[VY] ); |
406 | mCtrlScaleZ->set( vec.mV[VZ] ); | 421 | mCtrlScaleZ->set( vec.mV[VZ] ); |
422 | calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]); | ||
423 | calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]); | ||
424 | calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]); | ||
407 | } | 425 | } |
408 | else | 426 | else |
409 | { | 427 | { |
410 | mCtrlScaleX->clear(); | 428 | mCtrlScaleX->clear(); |
411 | mCtrlScaleY->clear(); | 429 | mCtrlScaleY->clear(); |
412 | mCtrlScaleZ->clear(); | 430 | mCtrlScaleZ->clear(); |
431 | calcp->setVar(LLCalc::X_SCALE, 0.f); | ||
432 | calcp->setVar(LLCalc::Y_SCALE, 0.f); | ||
433 | calcp->setVar(LLCalc::Z_SCALE, 0.f); | ||
413 | } | 434 | } |
414 | 435 | ||
415 | mLabelSize->setEnabled( enable_scale ); | 436 | mLabelSize->setEnabled( enable_scale ); |
@@ -429,12 +450,18 @@ void LLPanelObject::getState( ) | |||
429 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); | 450 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); |
430 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); | 451 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); |
431 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); | 452 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); |
453 | calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]); | ||
454 | calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]); | ||
455 | calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]); | ||
432 | } | 456 | } |
433 | else | 457 | else |
434 | { | 458 | { |
435 | mCtrlRotX->clear(); | 459 | mCtrlRotX->clear(); |
436 | mCtrlRotY->clear(); | 460 | mCtrlRotY->clear(); |
437 | mCtrlRotZ->clear(); | 461 | mCtrlRotZ->clear(); |
462 | calcp->clearVar(LLCalc::X_ROT); | ||
463 | calcp->clearVar(LLCalc::Y_ROT); | ||
464 | calcp->clearVar(LLCalc::Z_ROT); | ||
438 | } | 465 | } |
439 | 466 | ||
440 | mLabelRotation->setEnabled( enable_rotate ); | 467 | mLabelRotation->setEnabled( enable_rotate ); |
@@ -687,8 +714,9 @@ void LLPanelObject::getState( ) | |||
687 | F32 end_t = volume_params.getEndT(); | 714 | F32 end_t = volume_params.getEndT(); |
688 | 715 | ||
689 | // Hollowness | 716 | // Hollowness |
690 | F32 hollow = volume_params.getHollow(); | 717 | F32 hollow = 100.f * volume_params.getHollow(); |
691 | mSpinHollow->set( 100.f * hollow ); | 718 | mSpinHollow->set( hollow ); |
719 | calcp->setVar(LLCalc::HOLLOW, hollow); | ||
692 | 720 | ||
693 | // All hollow objects allow a shape to be selected. | 721 | // All hollow objects allow a shape to be selected. |
694 | if (hollow > 0.f) | 722 | if (hollow > 0.f) |
@@ -741,6 +769,10 @@ void LLPanelObject::getState( ) | |||
741 | mSpinCutEnd ->set( cut_end ); | 769 | mSpinCutEnd ->set( cut_end ); |
742 | mCtrlPathBegin ->set( adv_cut_begin ); | 770 | mCtrlPathBegin ->set( adv_cut_begin ); |
743 | mCtrlPathEnd ->set( adv_cut_end ); | 771 | mCtrlPathEnd ->set( adv_cut_end ); |
772 | calcp->setVar(LLCalc::CUT_BEGIN, cut_begin); | ||
773 | calcp->setVar(LLCalc::CUT_END, cut_end); | ||
774 | calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin); | ||
775 | calcp->setVar(LLCalc::PATH_END, adv_cut_end); | ||
744 | 776 | ||
745 | // Twist | 777 | // Twist |
746 | F32 twist = volume_params.getTwist(); | 778 | F32 twist = volume_params.getTwist(); |
@@ -759,18 +791,24 @@ void LLPanelObject::getState( ) | |||
759 | 791 | ||
760 | mSpinTwist ->set( twist ); | 792 | mSpinTwist ->set( twist ); |
761 | mSpinTwistBegin ->set( twist_begin ); | 793 | mSpinTwistBegin ->set( twist_begin ); |
794 | calcp->setVar(LLCalc::TWIST_END, twist); | ||
795 | calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin); | ||
762 | 796 | ||
763 | // Shear | 797 | // Shear |
764 | F32 shear_x = volume_params.getShearX(); | 798 | F32 shear_x = volume_params.getShearX(); |
765 | F32 shear_y = volume_params.getShearY(); | 799 | F32 shear_y = volume_params.getShearY(); |
766 | mSpinShearX->set( shear_x ); | 800 | mSpinShearX->set( shear_x ); |
767 | mSpinShearY->set( shear_y ); | 801 | mSpinShearY->set( shear_y ); |
802 | calcp->setVar(LLCalc::X_SHEAR, shear_x); | ||
803 | calcp->setVar(LLCalc::Y_SHEAR, shear_y); | ||
768 | 804 | ||
769 | // Taper | 805 | // Taper |
770 | F32 taper_x = volume_params.getTaperX(); | 806 | F32 taper_x = volume_params.getTaperX(); |
771 | F32 taper_y = volume_params.getTaperY(); | 807 | F32 taper_y = volume_params.getTaperY(); |
772 | mSpinTaperX->set( taper_x ); | 808 | mSpinTaperX->set( taper_x ); |
773 | mSpinTaperY->set( taper_y ); | 809 | mSpinTaperY->set( taper_y ); |
810 | calcp->setVar(LLCalc::X_TAPER, taper_x); | ||
811 | calcp->setVar(LLCalc::Y_TAPER, taper_y); | ||
774 | 812 | ||
775 | // Radius offset. | 813 | // Radius offset. |
776 | F32 radius_offset = volume_params.getRadiusOffset(); | 814 | F32 radius_offset = volume_params.getRadiusOffset(); |
@@ -800,10 +838,12 @@ void LLPanelObject::getState( ) | |||
800 | } | 838 | } |
801 | } | 839 | } |
802 | mSpinRadiusOffset->set( radius_offset); | 840 | mSpinRadiusOffset->set( radius_offset); |
841 | calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset); | ||
803 | 842 | ||
804 | // Revolutions | 843 | // Revolutions |
805 | F32 revolutions = volume_params.getRevolutions(); | 844 | F32 revolutions = volume_params.getRevolutions(); |
806 | mSpinRevolutions->set( revolutions ); | 845 | mSpinRevolutions->set( revolutions ); |
846 | calcp->setVar(LLCalc::REVOLUTIONS, revolutions); | ||
807 | 847 | ||
808 | // Skew | 848 | // Skew |
809 | F32 skew = volume_params.getSkew(); | 849 | F32 skew = volume_params.getSkew(); |
@@ -828,6 +868,7 @@ void LLPanelObject::getState( ) | |||
828 | } | 868 | } |
829 | } | 869 | } |
830 | mSpinSkew->set( skew ); | 870 | mSpinSkew->set( skew ); |
871 | calcp->setVar(LLCalc::SKEW, skew); | ||
831 | } | 872 | } |
832 | 873 | ||
833 | // Compute control visibility, label names, and twist range. | 874 | // Compute control visibility, label names, and twist range. |
@@ -839,7 +880,7 @@ void LLPanelObject::getState( ) | |||
839 | BOOL top_shear_x_visible = TRUE; | 880 | BOOL top_shear_x_visible = TRUE; |
840 | BOOL top_shear_y_visible = TRUE; | 881 | BOOL top_shear_y_visible = TRUE; |
841 | BOOL twist_visible = TRUE; | 882 | BOOL twist_visible = TRUE; |
842 | BOOL advanced_cut_visible = FALSE; | 883 | BOOL advanced_cut_visible = TRUE; |
843 | BOOL taper_visible = FALSE; | 884 | BOOL taper_visible = FALSE; |
844 | BOOL skew_visible = FALSE; | 885 | BOOL skew_visible = FALSE; |
845 | BOOL radius_offset_visible = FALSE; | 886 | BOOL radius_offset_visible = FALSE; |
@@ -864,6 +905,7 @@ void LLPanelObject::getState( ) | |||
864 | //twist_visible = FALSE; | 905 | //twist_visible = FALSE; |
865 | advanced_cut_visible = TRUE; | 906 | advanced_cut_visible = TRUE; |
866 | advanced_is_dimple = TRUE; | 907 | advanced_is_dimple = TRUE; |
908 | advanced_is_slice = FALSE; | ||
867 | twist_min = OBJECT_TWIST_MIN; | 909 | twist_min = OBJECT_TWIST_MIN; |
868 | twist_max = OBJECT_TWIST_MAX; | 910 | twist_max = OBJECT_TWIST_MAX; |
869 | twist_inc = OBJECT_TWIST_INC; | 911 | twist_inc = OBJECT_TWIST_INC; |
@@ -877,6 +919,7 @@ void LLPanelObject::getState( ) | |||
877 | size_is_hole = TRUE; | 919 | size_is_hole = TRUE; |
878 | skew_visible = TRUE; | 920 | skew_visible = TRUE; |
879 | advanced_cut_visible = TRUE; | 921 | advanced_cut_visible = TRUE; |
922 | advanced_is_slice = FALSE; | ||
880 | taper_visible = TRUE; | 923 | taper_visible = TRUE; |
881 | radius_offset_visible = TRUE; | 924 | radius_offset_visible = TRUE; |
882 | revolutions_visible = TRUE; | 925 | revolutions_visible = TRUE; |
@@ -931,6 +974,8 @@ void LLPanelObject::getState( ) | |||
931 | case MI_RING: | 974 | case MI_RING: |
932 | mSpinScaleX->set( scale_x ); | 975 | mSpinScaleX->set( scale_x ); |
933 | mSpinScaleY->set( scale_y ); | 976 | mSpinScaleY->set( scale_y ); |
977 | calcp->setVar(LLCalc::X_HOLE, scale_x); | ||
978 | calcp->setVar(LLCalc::Y_HOLE, scale_y); | ||
934 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); | 979 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); |
935 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); | 980 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); |
936 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); | 981 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); |
@@ -945,6 +990,14 @@ void LLPanelObject::getState( ) | |||
945 | mSpinScaleX->setMaxValue(1.f); | 990 | mSpinScaleX->setMaxValue(1.f); |
946 | mSpinScaleY->setMinValue(-1.f); | 991 | mSpinScaleY->setMinValue(-1.f); |
947 | mSpinScaleY->setMaxValue(1.f); | 992 | mSpinScaleY->setMaxValue(1.f); |
993 | |||
994 | // Torus' Hole Size is Box/Cyl/Prism's Taper | ||
995 | calcp->setVar(LLCalc::X_TAPER, 1.f - scale_x); | ||
996 | calcp->setVar(LLCalc::Y_TAPER, 1.f - scale_y); | ||
997 | |||
998 | // Box/Cyl/Prism have no hole size | ||
999 | calcp->setVar(LLCalc::X_HOLE, 0.f); | ||
1000 | calcp->setVar(LLCalc::Y_HOLE, 0.f); | ||
948 | } | 1001 | } |
949 | break; | 1002 | break; |
950 | } | 1003 | } |
@@ -1155,7 +1208,7 @@ void LLPanelObject::getState( ) | |||
1155 | mSculptTextureRevert = LLUUID::null; | 1208 | mSculptTextureRevert = LLUUID::null; |
1156 | } | 1209 | } |
1157 | 1210 | ||
1158 | 1211 | ||
1159 | //---------------------------------------------------------------------------- | 1212 | //---------------------------------------------------------------------------- |
1160 | 1213 | ||
1161 | mObject = objectp; | 1214 | mObject = objectp; |
@@ -1920,6 +1973,8 @@ void LLPanelObject::clearCtrls() | |||
1920 | childSetEnabled("advanced_cut", FALSE); | 1973 | childSetEnabled("advanced_cut", FALSE); |
1921 | childSetEnabled("advanced_dimple", FALSE); | 1974 | childSetEnabled("advanced_dimple", FALSE); |
1922 | childSetVisible("advanced_slice", FALSE); | 1975 | childSetVisible("advanced_slice", FALSE); |
1976 | |||
1977 | childSetEnabled("build_math_constants",false); | ||
1923 | } | 1978 | } |
1924 | 1979 | ||
1925 | // | 1980 | // |
@@ -1961,6 +2016,9 @@ void LLPanelObject::onCommitRotation( LLUICtrl* ctrl, void* userdata ) | |||
1961 | LLPanelObject* self = (LLPanelObject*) userdata; | 2016 | LLPanelObject* self = (LLPanelObject*) userdata; |
1962 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; | 2017 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; |
1963 | self->sendRotation(btn_down); | 2018 | self->sendRotation(btn_down); |
2019 | |||
2020 | // Needed to ensure all rotations are shown consistently in range | ||
2021 | self->refresh(); | ||
1964 | } | 2022 | } |
1965 | 2023 | ||
1966 | // static | 2024 | // static |
@@ -2055,3 +2113,9 @@ void LLPanelObject::onCommitSculptType(LLUICtrl *ctrl, void* userdata) | |||
2055 | 2113 | ||
2056 | self->sendSculpt(); | 2114 | self->sendSculpt(); |
2057 | } | 2115 | } |
2116 | |||
2117 | // static | ||
2118 | void LLPanelObject::onClickBuildConstants(void *) | ||
2119 | { | ||
2120 | gViewerWindow->alertXml("ClickBuildConstants"); | ||
2121 | } | ||