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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llmaniptranslate.h
  3.  * @brief LLManipTranslate class definition
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLMANIPTRANSLATE_H
  33. #define LL_LLMANIPTRANSLATE_H
  34. #include "llmanip.h"
  35. #include "lltimer.h"
  36. #include "v4math.h"
  37. #include "llquaternion.h"
  38. class LLManipTranslate : public LLManip
  39. {
  40. public:
  41. class ManipulatorHandle
  42. {
  43. public:
  44. LLVector3 mStartPosition;
  45. LLVector3 mEndPosition;
  46. EManipPart mManipID;
  47. F32 mHotSpotRadius;
  48. ManipulatorHandle(LLVector3 start_pos, LLVector3 end_pos, EManipPart id, F32 radius):mStartPosition(start_pos), mEndPosition(end_pos), mManipID(id), mHotSpotRadius(radius){}
  49. };
  50. LLManipTranslate( LLToolComposite* composite );
  51. virtual ~LLManipTranslate();
  52. static  U32     getGridTexName() ;
  53. static  void    destroyGL();
  54. static void restoreGL();
  55. virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
  56. virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
  57. virtual BOOL handleHover(S32 x, S32 y, MASK mask);
  58. virtual void render();
  59. virtual void handleSelect();
  60. virtual void highlightManipulators(S32 x, S32 y);
  61. virtual BOOL handleMouseDownOnPart(S32 x, S32 y, MASK mask);
  62. virtual BOOL canAffectSelection();
  63. protected:
  64. enum EHandleType {
  65. HANDLE_CONE,
  66. HANDLE_BOX,
  67. HANDLE_SPHERE 
  68. };
  69. void renderArrow(S32 which_arrow, S32 selected_arrow, F32 box_size, F32 arrow_size, F32 handle_size, BOOL reverse_direction);
  70. void renderTranslationHandles();
  71. void renderText();
  72. void renderSnapGuides();
  73. void renderGrid(F32 x, F32 y, F32 size, F32 r, F32 g, F32 b, F32 a);
  74. void renderGridVert(F32 x_trans, F32 y_trans, F32 r, F32 g, F32 b, F32 alpha);
  75. void highlightIntersection(LLVector3 normal, 
  76.  LLVector3 selection_center, 
  77.  LLQuaternion grid_rotation, 
  78.  LLColor4 inner_color);
  79. F32 getMinGridScale();
  80. private:
  81. S32 mLastHoverMouseX;
  82. S32 mLastHoverMouseY;
  83. BOOL mSendUpdateOnMouseUp;
  84. BOOL mMouseOutsideSlop; // true after mouse goes outside slop region
  85. BOOL mCopyMadeThisDrag;
  86. S32 mMouseDownX;
  87. S32 mMouseDownY;
  88. F32 mAxisArrowLength; // pixels
  89. F32 mConeSize; // meters, world space
  90. F32 mArrowLengthMeters; // meters
  91. F32 mGridSizeMeters;
  92. F32 mPlaneManipOffsetMeters;
  93. LLVector3 mManipNormal;
  94. LLVector3d mDragCursorStartGlobal;
  95. LLVector3d mDragSelectionStartGlobal;
  96. LLTimer mUpdateTimer;
  97. LLVector4 mManipulatorVertices[18];
  98. F32 mSnapOffsetMeters;
  99. LLVector3 mSnapOffsetAxis;
  100. LLQuaternion mGridRotation;
  101. LLVector3 mGridOrigin;
  102. LLVector3 mGridScale;
  103. F32 mSubdivisions;
  104. BOOL mInSnapRegime;
  105. BOOL mSnapped;
  106. LLVector3 mArrowScales;
  107. LLVector3 mPlaneScales;
  108. LLVector4 mPlaneManipPositions;
  109. };
  110. #endif