fbsdk/fbmanipulator.h Source File

fbmanipulator.h
Go to the documentation of this file.
1 #ifndef __FBMANIPULATOR_H__
2 #define __FBMANIPULATOR_H__
3 /**************************************************************************
4  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
5  All Rights Reserved.
6 
7  The coded instructions, statements, computer programs, and/or related
8  material (collectively the "Data") in these files contain unpublished
9  information proprietary to Autodesk, Inc. and/or its licensors, which is
10  protected by Canada and United States of America federal copyright law
11  and by international treaties.
12 
13  The Data may not be disclosed or distributed to third parties, in whole
14  or in part, without the prior written consent of Autodesk, Inc.
15  ("Autodesk").
16 
17  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
18  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
19  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR
20  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES
21  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
22  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT
23  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR
24  FREE.
25 
26  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
27  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR
28  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE
29  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS
30  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR
31  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF
32  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT
33  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE
34  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS
35  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
36 
37 **************************************************************************/
38 
43 #include <kaydaradef.h>
44 #ifndef FBSDK_DLL
45 
48  #define FBSDK_DLL K_DLLIMPORT
49 #endif
50 
51 #include <fbsdk/fbcomponent.h>
52 #include <fbcontrols/fbcontrols.h>
53 
54 #ifdef FBSDKUseNamespace
55  namespace FBSDKNamespace {
56 #endif
57 
58 FB_FORWARD( FBModel );
59 
62 
69 #define FBRegisterManipulator( ClassName, Label, Description, IconFilename ) \
70  HIObject RegisterManipulator##ClassName( HIObject /*pOwner*/,const char* pName,void * /*pData*/) \
71  { \
72  ClassName *Class = new ClassName( Label ); \
73  Class->mAllocated = true; \
74  if (Class->FBCreate()) { \
75  return Class->GetHIObject(); \
76  } else { \
77  delete Class; \
78  return NULL; \
79  } \
80  } \
81  FBLibraryModule( ClassName ) \
82  { \
83  FBRegisterObject( ClassName,"Manipulators",Label,Description,RegisterManipulator##ClassName,true, IconFilename ); \
84  }
85 
90 #define FBManipulatorDeclare( ClassName, Parent ) \
91  FBClassDeclare( ClassName,Parent); \
92  public: \
93  ClassName(const char* pName):Parent(pName) { FBClassInit; } \
94  private:
95 
99 #define FBManipulatorImplementation( ThisComponent ) \
100  FBClassImplementation( ThisComponent )
101 
103 // FBManipulator
110 };
111 
112 __FB_FORWARD( FBManipulator );
113 
115 class FBSDK_DLL FBManipulator : public FBComponent {
116  __FBClassDeclare( FBManipulator,FBComponent );
117 public:
122  FBManipulator(const char* pName, HIObject pObject=NULL);
123 
124  virtual bool FBCreate ();
125 
126  // ***** Picking routines ******
127  //---- Rectangle -----
128 
132  void PickRectStart(FBManipulatorPickType pType);
133 
135  void PickRectMotion();
136 
138  void PickRectStop();
139 
140  //---- Single Pick -----
141 
145  void Pick(FBManipulatorPickType pType);
146 
147  //---- Pick Result -----
148 
152  int PickGetCount();
153 
158  FBModel* PickGetModel(int pIndex);
159 
164  FBVertex PickGetPoint(int pIndex);
165 
169  int GetViewerWidth();
170 
174  int GetViewerHeight();
175 
179  int GetPanePosX();
180 
184  int GetPanePosY();
185 
189  int GetPaneWidth();
190 
194  int GetPaneHeight();
195 
196  // Render begin/end
202  void FBModelRenderBegin(FBModel* pModel);
203 
205  void FBModelRenderEnd();
206 
216  virtual bool ViewInput(int pMouseX, int pMouseY, FBInputType pAction, int pButtonKey,int pModifier); // same as FBView
217 
221  virtual void ViewExpose();
222 
223 public:
224  FBPropertyBool Active;
225  FBPropertyBool AlwaysActive;
226  FBPropertyBool Visible;
227  FBPropertyBool DefaultBehavior;
228  FBPropertyString ViewerText;
229  FBPropertyCamera CurrentCamera;
230  FBPropertyBool ConsumeEvent;
231  // Custom manipulators will be called first, before the standard MotionBuilder manipulators.
232  // Remark: If your manipulator consumes an event, it must consumes all the event until the transaction is finished.
233  // For example, if you consume the mouse down but not the mouse up, the other manipulator might be in an inconsistent state.
234 };
235 
237 // Property list
239 FB_DEFINE_LIST( FBSDK_DLL, Manipulator );
240 
242 class FBSDK_DLL FBPropertyListManipulator : public FBPropertyBaseList< FBManipulator* >
243 {
248  virtual int Add ( FBManipulator* pItem );
252  virtual void RemoveAt( int pIndex );
253 public:
258  virtual FBManipulator* operator[](int pIndex);
262  virtual int GetCount();
263 };
264 
266 // FBManipulatorTransform
268 __FB_FORWARD( FBManipulatorTransform );
269 
270 FB_DEFINE_COMPONENT( FBSDK_DLL, ManipulatorTransform );
271 
278 };
279 
280 FB_DEFINE_ENUM( FBSDK_DLL, ManipulatorTransformType );
281 
283 class FBSDK_DLL FBManipulatorTransform : public FBManipulator {
284  __FBClassDeclare( FBManipulatorTransform,FBManipulator );
285 public:
290  FBManipulatorTransform(const char *pName,HIObject pObject=NULL);
291 
292  FBPropertyManipulatorTransformType Type;
293  FBPropertyBool IconVisible;
294  FBPropertyBool VertexSelectionEnabled;
295  FBPropertyBool VertexManipulationEnabled;
296 };
297 
298 #ifdef FBSDKUseNamespace
299  }
300 #endif
301 #endif
#define __FBClassDeclare(Name, Parent)
For internal use only.
Definition: fbcomponent.h:132
#define FB_DEFINE_COMPONENT(DllTag, Type)
Define a component and give it the ability to be a property.
Definition: fbproperties.h:139
#define FB_DEFINE_LIST(DllTag, Type)
Define a component list.
Definition: fbproperties.h:161
class FBVector4< float > FBVertex
Vertex.
Definition: fbtypes.h:597
#define FBSDK_DLL
Be sure that FBSDK_DLL is defined only once...
Definition: fbmanipulator.h:48
#define NULL
Definition: kaydara.h:179
#define FB_DEFINE_ENUM(DllTag, Type)
Define an enum and give it the ability to be a property.
Definition: fbproperties.h:148
Contains the user interface components for the SDK.
Definition: Python-ast.h:18
#define __FB_FORWARD(ClassName)
Forwarding of class and typedef declaration.
Definition: fbtypes.h:68
#define FBSDKNamespace
FBSDKNamespace define.
Definition: fbversion.h:64
Basic class definitions.
FBInputType
Types of input events.
Definition: fbcontrols.h:123
class FBPropertyBaseComponent< FBCamera * > FBPropertyCamera
Definition: fbcamera.h:58
#define FB_FORWARD(ClassName)
Forwarding of class and typedef declaration.
Definition: fbtypes.h:62
FBManipulatorTransformType
Manipulator transform stles.
FBManipulatorPickType
Types of manipulator picking.
class FBPropertyBase< bool, kFBPT_bool > FBPropertyBool
Property: bool