MAINT-3223 Texture repeats synch feature

Mnikolenko Productengine 2017-04-27 17:26:32 +03:00
parent 9dcb80e637
commit 69db7cd947
4 changed files with 320 additions and 50 deletions

View File

@ -11878,6 +11878,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>SyncMaterialSettings</key>
<map>
<key>Comment</key>
<string>SyncMaterialSettings</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SnapshotQuality</key>
<map>
<key>Comment</key>

View File

@ -131,13 +131,13 @@ BOOL LLPanelFace::postBuild()
childSetCommitCallback("combobox shininess",&LLPanelFace::onCommitShiny,this);
childSetCommitCallback("combobox bumpiness",&LLPanelFace::onCommitBump,this);
childSetCommitCallback("combobox alphamode",&LLPanelFace::onCommitAlphaMode,this);
childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureInfo, this);
childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureInfo, this);
childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureInfo, this);
childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureScaleX, this);
childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureScaleY, this);
childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureRot, this);
childSetCommitCallback("rptctrl",&LLPanelFace::onCommitRepeatsPerMeter, this);
childSetCommitCallback("checkbox planar align",&LLPanelFace::onCommitPlanarAlign, this);
childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this);
childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this);
childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureOffsetX, this);
childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureOffsetY, this);
childSetCommitCallback("bumpyScaleU",&LLPanelFace::onCommitMaterialBumpyScaleX, this);
childSetCommitCallback("bumpyScaleV",&LLPanelFace::onCommitMaterialBumpyScaleY, this);
@ -691,6 +691,8 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
}
getChildView("radio_material_type")->setEnabled(editable);
getChildView("checkbox_sync_settings")->setEnabled(editable);
childSetValue("checkbox_sync_settings", gSavedSettings.getBOOL("SyncMaterialSettings"));
updateVisibility();
bool identical = true; // true because it is anded below
@ -1862,12 +1864,39 @@ void LLPanelFace::onSelectNormalTexture(const LLSD& data)
sendBump(nmap_id.isNull() ? 0 : BUMPY_TEXTURE);
}
//static
void LLPanelFace::syncOffsetX(LLPanelFace* self, F32 offsetU)
{
LLSelectedTEMaterial::setNormalOffsetX(self,offsetU);
LLSelectedTEMaterial::setSpecularOffsetX(self,offsetU);
self->getChild<LLSpinCtrl>("TexOffsetU")->forceSetValue(offsetU);
self->sendTextureInfo();
}
//static
void LLPanelFace::syncOffsetY(LLPanelFace* self, F32 offsetV)
{
LLSelectedTEMaterial::setNormalOffsetY(self,offsetV);
LLSelectedTEMaterial::setSpecularOffsetY(self,offsetV);
self->getChild<LLSpinCtrl>("TexOffsetV")->forceSetValue(offsetV);
self->sendTextureInfo();
}
//static
void LLPanelFace::onCommitMaterialBumpyOffsetX(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setNormalOffsetX(self,self->getCurrentBumpyOffsetU());
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetX(self,self->getCurrentBumpyOffsetU());
}
else
{
LLSelectedTEMaterial::setNormalOffsetX(self,self->getCurrentBumpyOffsetU());
}
}
//static
@ -1875,7 +1904,15 @@ void LLPanelFace::onCommitMaterialBumpyOffsetY(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setNormalOffsetY(self,self->getCurrentBumpyOffsetV());
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetY(self,self->getCurrentBumpyOffsetV());
}
else
{
LLSelectedTEMaterial::setNormalOffsetY(self,self->getCurrentBumpyOffsetV());
}
}
//static
@ -1883,7 +1920,15 @@ void LLPanelFace::onCommitMaterialShinyOffsetX(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setSpecularOffsetX(self,self->getCurrentShinyOffsetU());
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetX(self, self->getCurrentShinyOffsetU());
}
else
{
LLSelectedTEMaterial::setSpecularOffsetX(self,self->getCurrentShinyOffsetU());
}
}
//static
@ -1891,7 +1936,31 @@ void LLPanelFace::onCommitMaterialShinyOffsetY(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setSpecularOffsetY(self,self->getCurrentShinyOffsetV());
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetY(self,self->getCurrentShinyOffsetV());
}
else
{
LLSelectedTEMaterial::setSpecularOffsetY(self,self->getCurrentShinyOffsetV());
}
}
//static
void LLPanelFace::syncRepeatX(LLPanelFace* self, F32 scaleU)
{
LLSelectedTEMaterial::setNormalRepeatX(self,scaleU);
LLSelectedTEMaterial::setSpecularRepeatX(self,scaleU);
self->sendTextureInfo();
}
//static
void LLPanelFace::syncRepeatY(LLPanelFace* self, F32 scaleV)
{
LLSelectedTEMaterial::setNormalRepeatY(self,scaleV);
LLSelectedTEMaterial::setSpecularRepeatY(self,scaleV);
self->sendTextureInfo();
}
//static
@ -1904,7 +1973,16 @@ void LLPanelFace::onCommitMaterialBumpyScaleX(LLUICtrl* ctrl, void* userdata)
{
bumpy_scale_u *= 0.5f;
}
LLSelectedTEMaterial::setNormalRepeatX(self,bumpy_scale_u);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexScaleU")->forceSetValue(self->getCurrentBumpyScaleU());
syncRepeatX(self, bumpy_scale_u);
}
else
{
LLSelectedTEMaterial::setNormalRepeatX(self,bumpy_scale_u);
}
}
//static
@ -1917,7 +1995,17 @@ void LLPanelFace::onCommitMaterialBumpyScaleY(LLUICtrl* ctrl, void* userdata)
{
bumpy_scale_v *= 0.5f;
}
LLSelectedTEMaterial::setNormalRepeatY(self,bumpy_scale_v);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexScaleV")->forceSetValue(self->getCurrentBumpyScaleV());
syncRepeatY(self, bumpy_scale_v);
}
else
{
LLSelectedTEMaterial::setNormalRepeatY(self,bumpy_scale_v);
}
}
//static
@ -1930,7 +2018,16 @@ void LLPanelFace::onCommitMaterialShinyScaleX(LLUICtrl* ctrl, void* userdata)
{
shiny_scale_u *= 0.5f;
}
LLSelectedTEMaterial::setSpecularRepeatX(self,shiny_scale_u);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexScaleU")->forceSetValue(self->getCurrentShinyScaleU());
syncRepeatX(self, shiny_scale_u);
}
else
{
LLSelectedTEMaterial::setSpecularRepeatX(self,shiny_scale_u);
}
}
//static
@ -1943,7 +2040,24 @@ void LLPanelFace::onCommitMaterialShinyScaleY(LLUICtrl* ctrl, void* userdata)
{
shiny_scale_v *= 0.5f;
}
LLSelectedTEMaterial::setSpecularRepeatY(self,shiny_scale_v);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexScaleV")->forceSetValue(self->getCurrentShinyScaleV());
syncRepeatY(self, shiny_scale_v);
}
else
{
LLSelectedTEMaterial::setSpecularRepeatY(self,shiny_scale_v);
}
}
//static
void LLPanelFace::syncMaterialRot(LLPanelFace* self, F32 rot)
{
LLSelectedTEMaterial::setNormalRotation(self,rot * DEG_TO_RAD);
LLSelectedTEMaterial::setSpecularRotation(self,rot * DEG_TO_RAD);
self->sendTextureInfo();
}
//static
@ -1951,7 +2065,16 @@ void LLPanelFace::onCommitMaterialBumpyRot(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setNormalRotation(self,self->getCurrentBumpyRot() * DEG_TO_RAD);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexRot")->forceSetValue(self->getCurrentBumpyRot());
syncMaterialRot(self, self->getCurrentBumpyRot());
}
else
{
LLSelectedTEMaterial::setNormalRotation(self,self->getCurrentBumpyRot() * DEG_TO_RAD);
}
}
//static
@ -1959,7 +2082,16 @@ void LLPanelFace::onCommitMaterialShinyRot(LLUICtrl* ctrl, void* userdata)
{
LLPanelFace* self = (LLPanelFace*) userdata;
llassert_always(self);
LLSelectedTEMaterial::setSpecularRotation(self,self->getCurrentShinyRot() * DEG_TO_RAD);
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
self->getChild<LLSpinCtrl>("TexRot")->forceSetValue(self->getCurrentShinyRot());
syncMaterialRot(self, self->getCurrentShinyRot());
}
else
{
LLSelectedTEMaterial::setSpecularRotation(self,self->getCurrentShinyRot() * DEG_TO_RAD);
}
}
//static
@ -1994,6 +2126,92 @@ void LLPanelFace::onCommitTextureInfo( LLUICtrl* ctrl, void* userdata )
self->updateUI(true);
}
// static
void LLPanelFace::onCommitTextureScaleX( LLUICtrl* ctrl, void* userdata )
{
LLPanelFace* self = (LLPanelFace*) userdata;
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
F32 bumpy_scale_u = self->getChild<LLUICtrl>("TexScaleU")->getValue().asReal();
if (self->isIdenticalPlanarTexgen())
{
bumpy_scale_u *= 0.5f;
}
syncRepeatX(self, bumpy_scale_u);
}
else
{
self->sendTextureInfo();
}
self->updateUI(true);
}
// static
void LLPanelFace::onCommitTextureScaleY( LLUICtrl* ctrl, void* userdata )
{
LLPanelFace* self = (LLPanelFace*) userdata;
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
F32 bumpy_scale_v = self->getChild<LLUICtrl>("TexScaleV")->getValue().asReal();
if (self->isIdenticalPlanarTexgen())
{
bumpy_scale_v *= 0.5f;
}
syncRepeatY(self, bumpy_scale_v);
}
else
{
self->sendTextureInfo();
}
self->updateUI(true);
}
// static
void LLPanelFace::onCommitTextureRot( LLUICtrl* ctrl, void* userdata )
{
LLPanelFace* self = (LLPanelFace*) userdata;
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncMaterialRot(self, self->getChild<LLUICtrl>("TexRot")->getValue().asReal());
}
else
{
self->sendTextureInfo();
}
self->updateUI(true);
}
// static
void LLPanelFace::onCommitTextureOffsetX( LLUICtrl* ctrl, void* userdata )
{
LLPanelFace* self = (LLPanelFace*) userdata;
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetX(self, self->getChild<LLUICtrl>("TexOffsetU")->getValue().asReal());
}
else
{
self->sendTextureInfo();
}
self->updateUI(true);
}
// static
void LLPanelFace::onCommitTextureOffsetY( LLUICtrl* ctrl, void* userdata )
{
LLPanelFace* self = (LLPanelFace*) userdata;
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
syncOffsetY(self, self->getChild<LLUICtrl>("TexOffsetV")->getValue().asReal());
}
else
{
self->sendTextureInfo();
}
self->updateUI(true);
}
// Commit the number of repeats per meter
// static
void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata)
@ -2017,44 +2235,62 @@ void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata)
LLSelectedTE::getObjectScaleS(obj_scale_s, identical_scale_s);
LLSelectedTE::getObjectScaleS(obj_scale_t, identical_scale_t);
LLUICtrl* bumpy_scale_u = self->getChild<LLUICtrl>("bumpyScaleU");
LLUICtrl* bumpy_scale_v = self->getChild<LLUICtrl>("bumpyScaleV");
LLUICtrl* shiny_scale_u = self->getChild<LLUICtrl>("shinyScaleU");
LLUICtrl* shiny_scale_v = self->getChild<LLUICtrl>("shinyScaleV");
switch (material_type)
if (gSavedSettings.getBOOL("SyncMaterialSettings"))
{
case MATTYPE_DIFFUSE:
{
LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
}
break;
LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
case MATTYPE_NORMAL:
{
LLUICtrl* bumpy_scale_u = self->getChild<LLUICtrl>("bumpyScaleU");
LLUICtrl* bumpy_scale_v = self->getChild<LLUICtrl>("bumpyScaleV");
bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter);
bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter);
bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter);
bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter);
shiny_scale_u->setValue(obj_scale_s * repeats_per_meter);
shiny_scale_v->setValue(obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter);
}
else
{
switch (material_type)
{
case MATTYPE_DIFFUSE:
{
LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
}
break;
case MATTYPE_NORMAL:
{
bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter);
bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter);
}
break;
case MATTYPE_SPECULAR:
{
shiny_scale_u->setValue(obj_scale_s * repeats_per_meter);
shiny_scale_v->setValue(obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter);
}
break;
default:
llassert(false);
break;
}
break;
case MATTYPE_SPECULAR:
{
LLUICtrl* shiny_scale_u = self->getChild<LLUICtrl>("shinyScaleU");
LLUICtrl* shiny_scale_v = self->getChild<LLUICtrl>("shinyScaleV");
shiny_scale_u->setValue(obj_scale_s * repeats_per_meter);
shiny_scale_v->setValue(obj_scale_t * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter);
LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter);
}
break;
default:
llassert(false);
break;
}
// vertical scale and repeats per meter depends on each other, so force set on changes
self->updateUI(true);

View File

@ -162,7 +162,12 @@ protected:
// Callback funcs for individual controls
//
static void onCommitTextureInfo( LLUICtrl* ctrl, void* userdata);
static void onCommitTextureInfo(LLUICtrl* ctrl, void* userdata);
static void onCommitTextureScaleX(LLUICtrl* ctrl, void* userdata);
static void onCommitTextureScaleY(LLUICtrl* ctrl, void* userdata);
static void onCommitTextureRot(LLUICtrl* ctrl, void* userdata);
static void onCommitTextureOffsetX(LLUICtrl* ctrl, void* userdata);
static void onCommitTextureOffsetY(LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyScaleX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyScaleY( LLUICtrl* ctrl, void* userdata);
@ -170,6 +175,12 @@ protected:
static void onCommitMaterialBumpyOffsetX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyOffsetY( LLUICtrl* ctrl, void* userdata);
static void syncRepeatX(LLPanelFace* self, F32 scaleU);
static void syncRepeatY(LLPanelFace* self, F32 scaleV);
static void syncOffsetX(LLPanelFace* self, F32 offsetU);
static void syncOffsetY(LLPanelFace* self, F32 offsetV);
static void syncMaterialRot(LLPanelFace* self, F32 rot);
static void onCommitMaterialShinyScaleX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyScaleY( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyRot( LLUICtrl* ctrl, void* userdata);

View File

@ -148,6 +148,18 @@
top_pad="1"
value="2"/>
</radio_group>
<check_box
control_name="SyncMaterialSettings"
follows="top|left"
height="20"
initial_value="false"
label="Lock repeat"
layout="topleft"
left="8"
name="checkbox_sync_settings"
tool_tip="Adjust all maps repeats simultaneously"
top_pad="-16"
width="160" />
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@ -159,7 +171,7 @@
left="10"
name="texture control"
tool_tip="Click to choose a picture"
top_pad="7"
top_pad="5"
width="64" />
<text
type="string"