bool LLVolumeMessage::unpackPathParams(LLPathParams* params, LLDataPacker &dp) { U8 value; S8 svalue; U16 temp_u16; dp.unpackU8(value, "Curve"); params->setCurveType( value ); dp.unpackU16(temp_u16, "Begin"); params->setBegin((F32)(temp_u16 * CUT_QUANTA)); dp.unpackU16(temp_u16, "End"); params->setEnd((F32)((50000 - temp_u16) * CUT_QUANTA)); dp.unpackU8(value, "ScaleX"); F32 x = (F32) (200 - value) * SCALE_QUANTA; dp.unpackU8(value, "ScaleY"); F32 y = (F32) (200 - value) * SCALE_QUANTA; params->setScale( x, y ); dp.unpackU8(value, "ShearX"); svalue = *(S8 *)&value; F32 shear_x = (F32) svalue * SHEAR_QUANTA; dp.unpackU8(value, "ShearY"); svalue = *(S8 *)&value; F32 shear_y = (F32) svalue * SHEAR_QUANTA; params->setShear( shear_x, shear_y ); dp.unpackU8(value, "Twist"); svalue = *(S8 *)&value; params->setTwist((F32)(svalue * SCALE_QUANTA)); dp.unpackU8(value, "TwistBegin"); svalue = *(S8 *)&value; params->setTwistBegin((F32)(svalue * SCALE_QUANTA)); dp.unpackU8(value, "RadiusOffset"); svalue = *(S8 *)&value; params->setRadiusOffset((F32)(svalue * SCALE_QUANTA)); dp.unpackU8(value, "TaperX"); svalue = *(S8 *)&value; params->setTaperX((F32)(svalue * TAPER_QUANTA)); dp.unpackU8(value, "TaperY"); svalue = *(S8 *)&value; params->setTaperY((F32)(svalue * TAPER_QUANTA)); dp.unpackU8(value, "Revolutions"); params->setRevolutions((F32)(value * REV_QUANTA + 1.0f)); dp.unpackU8(value, "Skew"); svalue = *(S8 *)&value; params->setSkew((F32)(svalue * SCALE_QUANTA)); return true; }
bool LLVolumeMessage::unpackProfileParams( LLProfileParams* params, LLDataPacker &dp) { bool ok = true; U8 temp_u8; U16 temp_u16; F32 temp_f32; dp.unpackU8(temp_u8, "Curve"); params->setCurveType(temp_u8); dp.unpackU16(temp_u16, "Begin"); temp_f32 = temp_u16 * CUT_QUANTA; if (temp_f32 > 1.f) { LL_WARNS() << "Profile begin out of range: " << temp_f32 << LL_ENDL; LL_WARNS() << "Clamping to 0.0" << LL_ENDL; temp_f32 = 0.f; ok = false; } params->setBegin(temp_f32); dp.unpackU16(temp_u16, "End"); temp_f32 = temp_u16 * CUT_QUANTA; if (temp_f32 > 1.f) { LL_WARNS() << "Profile end out of range: " << 1.f - temp_f32 << LL_ENDL; LL_WARNS() << "Clamping to 1.0" << LL_ENDL; temp_f32 = 1.f; ok = false; } params->setEnd(1.f - temp_f32); dp.unpackU16(temp_u16, "Hollow"); temp_f32 = temp_u16 * HOLLOW_QUANTA; if (temp_f32 > 1.f) { LL_WARNS() << "Profile hollow out of range: " << temp_f32 << LL_ENDL; LL_WARNS() << "Clamping to 0.0" << LL_ENDL; temp_f32 = 0.f; ok = false; } params->setHollow(temp_f32); return ok; }