llsdutil_math.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llsdutil_math.cpp
  3.  * @author Phoenix
  4.  * @date 2006-05-24
  5.  * @brief Implementation of classes, functions, etc, for using structured data.
  6.  *
  7.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2006-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #include "linden_common.h"
  35. #include "llsdutil_math.h"
  36. #include "v3math.h"
  37. #include "v4math.h"
  38. #include "v3dmath.h"
  39. #include "v2math.h"
  40. #include "llquaternion.h"
  41. #include "v4color.h"
  42. #if LL_WINDOWS
  43. # define WIN32_LEAN_AND_MEAN
  44. # include <winsock2.h> // for htonl
  45. #elif LL_LINUX || LL_SOLARIS
  46. # include <netinet/in.h>
  47. #elif LL_DARWIN
  48. # include <arpa/inet.h>
  49. #endif
  50. #include "llsdserialize.h"
  51. // vector3
  52. LLSD ll_sd_from_vector3(const LLVector3& vec)
  53. {
  54. LLSD rv;
  55. rv.append((F64)vec.mV[VX]);
  56. rv.append((F64)vec.mV[VY]);
  57. rv.append((F64)vec.mV[VZ]);
  58. return rv;
  59. }
  60. LLVector3 ll_vector3_from_sd(const LLSD& sd, S32 start_index)
  61. {
  62. LLVector3 rv;
  63. rv.mV[VX] = (F32)sd[start_index].asReal();
  64. rv.mV[VY] = (F32)sd[++start_index].asReal();
  65. rv.mV[VZ] = (F32)sd[++start_index].asReal();
  66. return rv;
  67. }
  68. // vector4
  69. LLSD ll_sd_from_vector4(const LLVector4& vec)
  70. {
  71. LLSD rv;
  72. rv.append((F64)vec.mV[VX]);
  73. rv.append((F64)vec.mV[VY]);
  74. rv.append((F64)vec.mV[VZ]);
  75. rv.append((F64)vec.mV[VW]);
  76. return rv;
  77. }
  78. LLVector4 ll_vector4_from_sd(const LLSD& sd, S32 start_index)
  79. {
  80. LLVector4 rv;
  81. rv.mV[VX] = (F32)sd[start_index].asReal();
  82. rv.mV[VY] = (F32)sd[++start_index].asReal();
  83. rv.mV[VZ] = (F32)sd[++start_index].asReal();
  84. rv.mV[VW] = (F32)sd[++start_index].asReal();
  85. return rv;
  86. }
  87. // vector3d
  88. LLSD ll_sd_from_vector3d(const LLVector3d& vec)
  89. {
  90. LLSD rv;
  91. rv.append(vec.mdV[VX]);
  92. rv.append(vec.mdV[VY]);
  93. rv.append(vec.mdV[VZ]);
  94. return rv;
  95. }
  96. LLVector3d ll_vector3d_from_sd(const LLSD& sd, S32 start_index)
  97. {
  98. LLVector3d rv;
  99. rv.mdV[VX] = sd[start_index].asReal();
  100. rv.mdV[VY] = sd[++start_index].asReal();
  101. rv.mdV[VZ] = sd[++start_index].asReal();
  102. return rv;
  103. }
  104. //vector2
  105. LLSD ll_sd_from_vector2(const LLVector2& vec)
  106. {
  107. LLSD rv;
  108. rv.append((F64)vec.mV[VX]);
  109. rv.append((F64)vec.mV[VY]);
  110. return rv;
  111. }
  112. LLVector2 ll_vector2_from_sd(const LLSD& sd)
  113. {
  114. LLVector2 rv;
  115. rv.mV[VX] = (F32)sd[0].asReal();
  116. rv.mV[VY] = (F32)sd[1].asReal();
  117. return rv;
  118. }
  119. // Quaternion
  120. LLSD ll_sd_from_quaternion(const LLQuaternion& quat)
  121. {
  122. LLSD rv;
  123. rv.append((F64)quat.mQ[VX]);
  124. rv.append((F64)quat.mQ[VY]);
  125. rv.append((F64)quat.mQ[VZ]);
  126. rv.append((F64)quat.mQ[VW]);
  127. return rv;
  128. }
  129. LLQuaternion ll_quaternion_from_sd(const LLSD& sd)
  130. {
  131. LLQuaternion quat;
  132. quat.mQ[VX] = (F32)sd[0].asReal();
  133. quat.mQ[VY] = (F32)sd[1].asReal();
  134. quat.mQ[VZ] = (F32)sd[2].asReal();
  135. quat.mQ[VW] = (F32)sd[3].asReal();
  136. return quat;
  137. }
  138. // color4
  139. LLSD ll_sd_from_color4(const LLColor4& c)
  140. {
  141. LLSD rv;
  142. rv.append(c.mV[0]);
  143. rv.append(c.mV[1]);
  144. rv.append(c.mV[2]);
  145. rv.append(c.mV[3]);
  146. return rv;
  147. }
  148. LLColor4 ll_color4_from_sd(const LLSD& sd)
  149. {
  150. LLColor4 c;
  151. c.setValue(sd);
  152. return c;
  153. }