llvisualparam.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
- /**
- * @file llvisualparam.cpp
- * @brief Implementation of LLPolyMesh class.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2010, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
- //-----------------------------------------------------------------------------
- // Header Files
- //-----------------------------------------------------------------------------
- #include "linden_common.h"
- #include "llvisualparam.h"
- //-----------------------------------------------------------------------------
- // LLVisualParamInfo()
- //-----------------------------------------------------------------------------
- LLVisualParamInfo::LLVisualParamInfo()
- :
- mID( -1 ),
- mGroup( VISUAL_PARAM_GROUP_TWEAKABLE ),
- mMinWeight( 0.f ),
- mMaxWeight( 1.f ),
- mDefaultWeight( 0.f ),
- mSex( SEX_BOTH )
- {
- }
- //-----------------------------------------------------------------------------
- // parseXml()
- //-----------------------------------------------------------------------------
- BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
- {
- // attribute: id
- static LLStdStringHandle id_string = LLXmlTree::addAttributeString("id");
- node->getFastAttributeS32( id_string, mID );
-
- // attribute: group
- U32 group = 0;
- static LLStdStringHandle group_string = LLXmlTree::addAttributeString("group");
- if( node->getFastAttributeU32( group_string, group ) )
- {
- if( group < NUM_VISUAL_PARAM_GROUPS )
- {
- mGroup = (EVisualParamGroup)group;
- }
- }
- // attribute: value_min, value_max
- static LLStdStringHandle value_min_string = LLXmlTree::addAttributeString("value_min");
- static LLStdStringHandle value_max_string = LLXmlTree::addAttributeString("value_max");
- node->getFastAttributeF32( value_min_string, mMinWeight );
- node->getFastAttributeF32( value_max_string, mMaxWeight );
- // attribute: value_default
- F32 default_weight = 0;
- static LLStdStringHandle value_default_string = LLXmlTree::addAttributeString("value_default");
- if( node->getFastAttributeF32( value_default_string, default_weight ) )
- {
- mDefaultWeight = llclamp( default_weight, mMinWeight, mMaxWeight );
- if( default_weight != mDefaultWeight )
- {
- llwarns << "value_default attribute is out of range in node " << mName << " " << default_weight << llendl;
- }
- }
-
- // attribute: sex
- std::string sex = "both";
- static LLStdStringHandle sex_string = LLXmlTree::addAttributeString("sex");
- node->getFastAttributeString( sex_string, sex ); // optional
- if( sex == "both" )
- {
- mSex = SEX_BOTH;
- }
- else if( sex == "male" )
- {
- mSex = SEX_MALE;
- }
- else if( sex == "female" )
- {
- mSex = SEX_FEMALE;
- }
- else
- {
- llwarns << "Avatar file: <param> has invalid sex attribute: " << sex << llendl;
- return FALSE;
- }
-
- // attribute: name
- static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
- if( !node->getFastAttributeString( name_string, mName ) )
- {
- llwarns << "Avatar file: <param> is missing name attribute" << llendl;
- return FALSE;
- }
- // attribute: label
- static LLStdStringHandle label_string = LLXmlTree::addAttributeString("label");
- if( !node->getFastAttributeString( label_string, mDisplayName ) )
- {
- mDisplayName = mName;
- }
- // JC - make sure the display name includes the capitalization in the XML file,
- // not the lowercased version.
- LLStringUtil::toLower(mName);
- // attribute: label_min
- static LLStdStringHandle label_min_string = LLXmlTree::addAttributeString("label_min");
- if( !node->getFastAttributeString( label_min_string, mMinName ) )
- {
- mMinName = "Less";
- }
- // attribute: label_max
- static LLStdStringHandle label_max_string = LLXmlTree::addAttributeString("label_max");
- if( !node->getFastAttributeString( label_max_string, mMaxName ) )
- {
- mMaxName = "More";
- }
- return TRUE;
- }
- //virtual
- void LLVisualParamInfo::toStream(std::ostream &out)
- {
- out << mID << "t";
- out << mName << "t";
- out << mDisplayName << "t";
- out << mMinName << "t";
- out << mMaxName << "t";
- out << mGroup << "t";
- out << mMinWeight << "t";
- out << mMaxWeight << "t";
- out << mDefaultWeight << "t";
- out << mSex << "t";
- }
- //-----------------------------------------------------------------------------
- // LLVisualParam()
- //-----------------------------------------------------------------------------
- LLVisualParam::LLVisualParam()
- :
- mCurWeight( 0.f ),
- mLastWeight( 0.f ),
- mNext( NULL ),
- mTargetWeight( 0.f ),
- mIsAnimating( FALSE ),
- mID( -1 ),
- mInfo( 0 ),
- mIsDummy(FALSE)
- {
- }
- //-----------------------------------------------------------------------------
- // ~LLVisualParam()
- //-----------------------------------------------------------------------------
- LLVisualParam::~LLVisualParam()
- {
- delete mNext;
- }
- /*
- //=============================================================================
- // These virtual functions should always be overridden,
- // but are included here for use as templates
- //=============================================================================
- //-----------------------------------------------------------------------------
- // setInfo()
- //-----------------------------------------------------------------------------
- BOOL LLVisualParam::setInfo(LLVisualParamInfo *info)
- {
- llassert(mInfo == NULL);
- if (info->mID < 0)
- return FALSE;
- mInfo = info;
- mID = info->mID;
- setWeight(getDefaultWeight(), FALSE );
- return TRUE;
- }
- //-----------------------------------------------------------------------------
- // parseData()
- //-----------------------------------------------------------------------------
- BOOL LLVisualParam::parseData(LLXmlTreeNode *node)
- {
- LLVisualParamInfo *info = new LLVisualParamInfo;
- info->parseXml(node);
- if (!setInfo(info))
- return FALSE;
-
- return TRUE;
- }
- */
- //-----------------------------------------------------------------------------
- // setWeight()
- //-----------------------------------------------------------------------------
- void LLVisualParam::setWeight(F32 weight, BOOL upload_bake)
- {
- if (mIsAnimating)
- {
- //RN: allow overshoot
- mCurWeight = weight;
- }
- else if (mInfo)
- {
- mCurWeight = llclamp(weight, mInfo->mMinWeight, mInfo->mMaxWeight);
- }
- else
- {
- mCurWeight = weight;
- }
-
- if (mNext)
- {
- mNext->setWeight(weight, upload_bake);
- }
- }
- //-----------------------------------------------------------------------------
- // setAnimationTarget()
- //-----------------------------------------------------------------------------
- void LLVisualParam::setAnimationTarget(F32 target_value, BOOL upload_bake)
- {
- // don't animate dummy parameters
- if (mIsDummy)
- {
- setWeight(target_value, upload_bake);
- return;
- }
- if (mInfo)
- {
- if (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
- {
- mTargetWeight = llclamp(target_value, mInfo->mMinWeight, mInfo->mMaxWeight);
- }
- }
- else
- {
- mTargetWeight = target_value;
- }
- mIsAnimating = TRUE;
- if (mNext)
- {
- mNext->setAnimationTarget(target_value, upload_bake);
- }
- }
- //-----------------------------------------------------------------------------
- // setNextParam()
- //-----------------------------------------------------------------------------
- void LLVisualParam::setNextParam( LLVisualParam *next )
- {
- llassert(!mNext);
- mNext = next;
- }
- //-----------------------------------------------------------------------------
- // animate()
- //-----------------------------------------------------------------------------
- void LLVisualParam::animate( F32 delta, BOOL upload_bake )
- {
- if (mIsAnimating)
- {
- F32 new_weight = ((mTargetWeight - mCurWeight) * delta) + mCurWeight;
- setWeight(new_weight, upload_bake);
- }
- }
- //-----------------------------------------------------------------------------
- // stopAnimating()
- //-----------------------------------------------------------------------------
- void LLVisualParam::stopAnimating(BOOL upload_bake)
- {
- if (mIsAnimating && getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
- {
- mIsAnimating = FALSE;
- setWeight(mTargetWeight, upload_bake);
- }
- }
- //virtual
- BOOL LLVisualParam::linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params)
- {
- // nothing to do for non-driver parameters
- return TRUE;
- }
- //virtual
- void LLVisualParam::resetDrivenParams()
- {
- // nothing to do for non-driver parameters
- return;
- }