Poser: first pass at reinstating rotation sliders

master
Angeldark Raymaker 2025-04-06 22:23:47 +01:00
parent 800b759cff
commit 983a0637dc
3 changed files with 151 additions and 59 deletions

View File

@ -165,6 +165,10 @@ bool FSFloaterPoser::postBuild()
mPosYSlider = getChild<LLSliderCtrl>("av_position_leftright"); mPosYSlider = getChild<LLSliderCtrl>("av_position_leftright");
mPosZSlider = getChild<LLSliderCtrl>("av_position_updown"); mPosZSlider = getChild<LLSliderCtrl>("av_position_updown");
mAdvRotXSlider = getChild<LLSliderCtrl>("limb_pitch_slider");
mAdvRotYSlider = getChild<LLSliderCtrl>("limb_yaw_slider");
mAdvRotZSlider = getChild<LLSliderCtrl>("limb_roll_slider");
mAdvPosXSlider = getChild<LLSliderCtrl>("Advanced_Position_X"); mAdvPosXSlider = getChild<LLSliderCtrl>("Advanced_Position_X");
mAdvPosYSlider = getChild<LLSliderCtrl>("Advanced_Position_Y"); mAdvPosYSlider = getChild<LLSliderCtrl>("Advanced_Position_Y");
mAdvPosZSlider = getChild<LLSliderCtrl>("Advanced_Position_Z"); mAdvPosZSlider = getChild<LLSliderCtrl>("Advanced_Position_Z");
@ -797,6 +801,25 @@ void FSFloaterPoser::onCommitSlider(const LLUICtrl* slider, const S32 id)
break; break;
} }
case 4: // limb_pitch_slider
{
mPitchSpnr->setValue(value);
onYawPitchRollChanged();
break;
}
case 5: // limb_yaw_slider
{
mYawSpnr->setValue(value);
onYawPitchRollChanged();
break;
}
case 6: // limb_roll_slider
{
mRollSpnr->setValue(value);
onYawPitchRollChanged();
break;
}
case 10: // Advanced_Scale_X case 10: // Advanced_Scale_X
{ {
mScaleXSpnr->setValue(value); mScaleXSpnr->setValue(value);
@ -1816,10 +1839,15 @@ F32 FSFloaterPoser::clipRange(F32 value)
void FSFloaterPoser::onYawPitchRollChanged(bool skipUpdateTrackpad) void FSFloaterPoser::onYawPitchRollChanged(bool skipUpdateTrackpad)
{ {
LLVector3 absoluteRotation, deltaRotation; LLVector3 absoluteRotation, deltaRotation;
absoluteRotation.mV[VX] = (F32)mYawSpnr->getValue().asReal() * DEG_TO_RAD; absoluteRotation.mV[VX] = (F32)mYawSpnr->getValue().asReal();
absoluteRotation.mV[VY] = (F32)mPitchSpnr->getValue().asReal() * DEG_TO_RAD; absoluteRotation.mV[VY] = (F32)mPitchSpnr->getValue().asReal();
absoluteRotation.mV[VZ] = (F32)mRollSpnr->getValue().asReal() * DEG_TO_RAD; absoluteRotation.mV[VZ] = (F32)mRollSpnr->getValue().asReal();
mAdvRotXSlider->setValue(absoluteRotation.mV[VY]);
mAdvRotYSlider->setValue(absoluteRotation.mV[VX]);
mAdvRotZSlider->setValue(absoluteRotation.mV[VZ]);
absoluteRotation *= DEG_TO_RAD;
deltaRotation = absoluteRotation - mLastSliderRotation; deltaRotation = absoluteRotation - mLastSliderRotation;
mLastSliderRotation = absoluteRotation; mLastSliderRotation = absoluteRotation;
@ -1853,6 +1881,9 @@ void FSFloaterPoser::refreshRotationSlidersAndSpinners()
mYawSpnr->setValue(rotation.mV[VX] *= RAD_TO_DEG); mYawSpnr->setValue(rotation.mV[VX] *= RAD_TO_DEG);
mPitchSpnr->setValue(rotation.mV[VY] *= RAD_TO_DEG); mPitchSpnr->setValue(rotation.mV[VY] *= RAD_TO_DEG);
mRollSpnr->setValue(rotation.mV[VZ] *= RAD_TO_DEG); mRollSpnr->setValue(rotation.mV[VZ] *= RAD_TO_DEG);
mAdvRotXSlider->setValue(rotation.mV[VY]);
mAdvRotYSlider->setValue(rotation.mV[VX]);
mAdvRotZSlider->setValue(rotation.mV[VZ]);
} }
void FSFloaterPoser::refreshPositionSlidersAndSpinners() void FSFloaterPoser::refreshPositionSlidersAndSpinners()

View File

@ -448,6 +448,9 @@ public:
LLSliderCtrl* mPosXSlider{ nullptr }; LLSliderCtrl* mPosXSlider{ nullptr };
LLSliderCtrl* mPosYSlider{ nullptr }; LLSliderCtrl* mPosYSlider{ nullptr };
LLSliderCtrl* mPosZSlider{ nullptr }; LLSliderCtrl* mPosZSlider{ nullptr };
LLSliderCtrl* mAdvRotXSlider{ nullptr };
LLSliderCtrl* mAdvRotYSlider{ nullptr };
LLSliderCtrl* mAdvRotZSlider{ nullptr };
LLSliderCtrl* mAdvPosXSlider{ nullptr }; LLSliderCtrl* mAdvPosXSlider{ nullptr };
LLSliderCtrl* mAdvPosYSlider{ nullptr }; LLSliderCtrl* mAdvPosYSlider{ nullptr };
LLSliderCtrl* mAdvPosZSlider{ nullptr }; LLSliderCtrl* mAdvPosZSlider{ nullptr };

View File

@ -975,7 +975,7 @@ width="430">
<tab_container <tab_container
follows="all" follows="all"
halign="center" halign="center"
height="235" height="263"
layout="topleft" layout="topleft"
name="modifier_tabs" name="modifier_tabs"
tab_height="20" tab_height="20"
@ -986,7 +986,7 @@ width="430">
width="215"> width="215">
<panel <panel
follows="left|right|top|bottom" follows="left|right|top|bottom"
height="290" height="265"
background_visible="false" background_visible="false"
layout="topleft" layout="topleft"
mouse_opaque="false" mouse_opaque="false"
@ -1000,9 +1000,9 @@ width="430">
name="limb_rotation" name="limb_rotation"
follows="left|right|top" follows="left|right|top"
top="2" top="2"
height="170" height="160"
width="170" width="160"
left="10" left="15"
tool_tip="Change the rotation of the currently selected body part(s). Hold Ctrl to move slow. Roll the wheel to adjust the 3rd axis. Use Shift or Alt to swap which rotations change" tool_tip="Change the rotation of the currently selected body part(s). Hold Ctrl to move slow. Roll the wheel to adjust the 3rd axis. Use Shift or Alt to swap which rotations change"
pinch_mode="false" pinch_mode="false"
infinite_scroll_mode="true"/> infinite_scroll_mode="true"/>
@ -1011,75 +1011,132 @@ width="430">
name="limb_pitch_label" name="limb_pitch_label"
height="10" height="10"
layout="topleft" layout="topleft"
left="2" left="5"
top_pad="2" top_pad="2"
width="57"> width="200">
Up/Down: Up/Down:
</text> </text>
<slider
label=""
label_width="0"
follows="left|top"
height="14"
increment="0.1"
initial_value="0"
layout="topleft"
show_text="false"
left="3"
min_val="-180"
max_val="180"
name="limb_pitch_slider"
top_pad="2"
width="130" >
<slider.commit_callback
function="Poser.CommitSlider"
parameter="4"/>
</slider>
<spinner
height="16"
decimal_digits="2"
follows="left|top"
increment="0.01"
top_pad="-19"
left_pad="0"
name="limb_pitch_spinner"
min_val="-180"
max_val="180"
width="53">
<spinner.commit_callback
function="Poser.CommitSpinner"
parameter="4"/>
</spinner>
<text <text
follows="left|top" follows="left|top"
name="limb_yaw_label" name="limb_yaw_label"
height="10" height="10"
layout="topleft" layout="topleft"
left_pad="5" left="5"
top_pad="-10" top_pad="2"
width="57"> width="200">
Left/Right: Left/Right:
</text> </text>
<slider
label=""
label_width="0"
follows="left|top"
height="14"
increment="0.1"
initial_value="0"
layout="topleft"
show_text="false"
left="3"
min_val="-180"
max_val="180"
name="limb_yaw_slider"
top_pad="2"
width="130" >
<slider.commit_callback
function="Poser.CommitSlider"
parameter="5"/>
</slider>
<spinner
height="16"
decimal_digits="2"
follows="left|top"
increment="0.01"
top_pad="-19"
left_pad="0"
name="limb_yaw_spinner"
min_val="-180"
max_val="180"
width="53">
<spinner.commit_callback
function="Poser.CommitSpinner"
parameter="5"/>
</spinner>
<text <text
follows="left|top" follows="left|top"
name="limb_roll_label" name="limb_roll_label"
height="10" height="10"
layout="topleft" layout="topleft"
left_pad="5" left="5"
top_pad="-10" top_pad="2"
width="200"> width="200">
Roll: Roll:
</text> </text>
<slider
label=""
label_width="0"
follows="left|top"
height="14"
increment="0.1"
initial_value="0"
layout="topleft"
show_text="false"
left="3"
min_val="-180"
max_val="180"
name="limb_roll_slider"
top_pad="2"
width="130" >
<slider.commit_callback
function="Poser.CommitSlider"
parameter="6"/>
</slider>
<spinner <spinner
height="16" height="16"
decimal_digits="2" decimal_digits="2"
follows="left|top" follows="left|top"
increment="0.1" increment="0.01"
left="2" top_pad="-19"
top_pad="5" left_pad="0"
name="limb_pitch_spinner" name="limb_roll_spinner"
min_val="-180" min_val="-180"
max_val="180" max_val="180"
width="57"> width="53">
<spinner.commit_callback <spinner.commit_callback
function="Poser.CommitSpinner" function="Poser.CommitSpinner"
parameter="4"/> parameter="6"/>
</spinner>
<spinner
height="16"
decimal_digits="2"
follows="left|top"
increment="0.1"
top_pad="-16"
left_pad="5"
name="limb_yaw_spinner"
min_val="-180"
max_val="180"
width="57">
<spinner.commit_callback
function="Poser.CommitSpinner"
parameter="5"/>
</spinner>
<spinner
height="16"
decimal_digits="2"
follows="left|top"
increment="0.1"
top_pad="-16"
left_pad="5"
name="limb_roll_spinner"
min_val="-180"
max_val="180"
width="57">
<spinner.commit_callback
function="Poser.CommitSpinner"
parameter="6"/>
</spinner> </spinner>
</panel> </panel>
<panel <panel
@ -1468,12 +1525,13 @@ width="430">
</button> </button>
<button <button
follows="left|top" follows="left|top"
height="21" height="18"
layout="topleft" layout="topleft"
label="Copy L &gt; R" label="Copy L &gt; R"
name="button_symmetrize_left_to_right" name="button_symmetrize_left_to_right"
tool_tip="Click to copy change from left side to right side." tool_tip="Click to copy change from left side to right side."
left="14" left="14"
top_pad="0"
width="70" > width="70" >
<button.commit_callback <button.commit_callback
function="Poser.Symmetrize" function="Poser.Symmetrize"
@ -1481,7 +1539,7 @@ width="430">
</button> </button>
<button <button
follows="left|top" follows="left|top"
height="21" height="19"
layout="topleft" layout="topleft"
label="Copy R &gt; L" label="Copy R &gt; L"
name="button_symmetrize_right_to_left" name="button_symmetrize_right_to_left"