FBX C++ API Reference
fbxconnectionpoint.h
Go to the documentation of this file.
1 /****************************************************************************************
2 
3  Copyright (C) 2015 Autodesk, Inc.
4  All rights reserved.
5 
6  Use of this software is subject to the terms of the Autodesk license agreement
7  provided at the time of installation or download, or which otherwise accompanies
8  this software in either electronic or hard copy form.
9 
10 ****************************************************************************************/
11 
13 #ifndef _FBXSDK_CORE_CONNECTION_POINT_H_
14 #define _FBXSDK_CORE_CONNECTION_POINT_H_
15 
16 #include <fbxsdk/fbxsdk_def.h>
17 
20 
21 #include <fbxsdk/fbxsdk_nsbegin.h>
22 
24 {
25 public:
26  enum EType
27  {
28  eNone = 0,
29  // System or user
30  eSystem = 1 << 0,
31  eUser = 1 << 1,
32  eSystemOrUser = eUser | eSystem,
33  // Type of Link
34  eReference = 1 << 2,
35  eContains = 1 << 3,
36  eData = 1 << 4,
37  eLinkType = eReference | eContains | eData,
38  eDefault = eUser | eReference,
39  eUnidirectional = 1 << 7
40  };
41 };
42 
44 
46 {
47 public:
49  {
50  eDirSrc = 1 << 0, // Contains sources
51  eDirDst = 1 << 1, // Contains destinations
52  eDirUni = 1 << 2, // Connection is not 2 ways
53  eDirBoth = eDirSrc | eDirDst,
54  eDirMask = eDirSrc | eDirDst | eDirUni
55  };
56 
57  enum EType
58  {
59  eStandard = 0,
60  eSubConnection = 1 << 3, // Connect is a sub Connect of another
61  eTypeMask = eSubConnection
62  };
63 
65  {
66  eDefault = 0,
67  eCache = 1 << 4,
68  eAttributeMask = eCache
69  };
70 
72  {
73  eNotAllocated = 0,
74  eAllocated = 1 << 5,
75  eAllocFlagMask = eAllocated
76  };
77 
79  {
80  eNotCleaned = 0,
81  eCleaned = 1 << 6,
82  eCleanedFlagMask = eCleaned
83  };
84 
85  enum EEvent
86  {
102  eSrcReordered
103  };
104 
105  // Constructor/Destructor
106  FbxConnectionPoint(void* pData=0);
107  virtual ~FbxConnectionPoint();
108 
109  void SetFilter(FbxConnectionPointFilter* pConnectFilter, EType pType=eStandard);
110  void InternalClear();
111 
113  void WipeConnectionList();
114  void Destroy();
115  void SubConnectRemoveAll();
116 
117  inline FbxConnectionPoint* GetSubOwnerConnect(){ return GetConnectType() == eSubConnection ? mOwner : NULL; }
118  inline FbxConnectionPointFilter* GetFilter(){ return mFilter; }
119 
120  virtual bool IsInReplace(FbxConnectionPoint* p1, FbxConnectionPoint* p2);
121 
122  inline void SetConnectType(EType pType){ mFlags = (mFlags & ~eTypeMask) | pType; }
123  inline EType GetConnectType(){ return EType(mFlags & eTypeMask); }
124  inline void SetDirection(int pDirections){ mFlags = (mFlags & ~eDirMask) | pDirections; }
125  inline EDirection GetDirection(){ return EDirection(mFlags & eDirMask); }
126  inline void SetAttribute(int pAttributes){ mFlags = (mFlags & ~eAttributeMask) | pAttributes; }
127  inline EAttribute GetAttribute(){ return EAttribute(mFlags & eAttributeMask); }
128  inline void SetAllocatedFlag(bool pBool){ mFlags = ( pBool ) ? mFlags | eAllocated : mFlags & ~eAllocFlagMask; }
129  inline bool GetAllocatedFlag(){ return ( mFlags & eAllocFlagMask ) ? true : false; }
130  inline void SetCleanedFlag(bool pBool){ mFlags = ( pBool ) ? mFlags | eCleaned : mFlags & ~eCleanedFlagMask; }
131  inline bool GetCleanedFlag(){ return ( mFlags & eCleanedFlagMask ) ? true : false; }
132 
133  bool IsValidSrc(FbxConnectionPoint* pConnect);
134  bool IsValidDst(FbxConnectionPoint* pConnect);
135  bool IsValidSrcConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType);
136  bool IsValidDstConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType);
137  bool RequestValidSrcConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType );
138  bool RequestValidDstConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType );
139 
140  bool ConnectSrc(FbxConnectionPoint* pSrc,FbxConnection::EType pConnectionType=FbxConnection::eNone);
141  bool ConnectDst(FbxConnectionPoint* pDst,FbxConnection::EType pConnectionType=FbxConnection::eNone);
142  bool ConnectSrcAt(int pDst_SrcIndex, FbxConnectionPoint* pSrc, FbxConnection::EType pConnectionType=FbxConnection::eNone);
143  bool ConnectDstAt(int pSrc_DstIndex, FbxConnectionPoint* pDst, FbxConnection::EType pConnectionType=FbxConnection::eNone);
144  static bool ConnectConnect(FbxConnectionPoint* pSrc,FbxConnectionPoint* pDst,FbxConnection::EType pConnectionType);
145  static bool ConnectAt(FbxConnectionPoint* pSrc, int pSrc_DstIndex, FbxConnectionPoint* pDst, int pDst_SrcIndex, FbxConnection::EType pConnectionType);
146 
147  bool DisconnectDst(FbxConnectionPoint* pSrc);
148  bool DisconnectSrc(FbxConnectionPoint* pSrc);
149  void DisconnectAllSrc();
150  void DisconnectAllDst();
151  static bool DisconnectConnect(FbxConnectionPoint* pSrc,FbxConnectionPoint* pDst);
152  bool DisconnectDstAt(int pIndex);
153  bool DisconnectSrcAt(int pIndex);
154 
155  bool ReplaceInDst(FbxConnectionPoint* pDstOld, FbxConnectionPoint* pDstNew, int pIndexInNew);
156  bool ReplaceInSrc(FbxConnectionPoint* pSrcOld, FbxConnectionPoint* pSrcNew, int pIndexInNew);
157  bool ReplaceDstAt(int pIndex, FbxConnectionPoint* pDst);
158  bool ReplaceSrcAt(int pIndex, FbxConnectionPoint* pSrc);
159  bool SwapSrc(int pIndexA, int pIndexB);
160 
167  bool MoveSrcAt(int pIndex, int pAtIndex);
168 
175  bool MoveSrcAt(FbxConnectionPoint* pSrc, FbxConnectionPoint* pAtSrc);
176 
177  // Access services
178  bool IsConnectedSrc(FbxConnectionPoint*);
179  bool IsConnectedDst(FbxConnectionPoint*);
180  inline bool IsConnected(FbxConnectionPoint* pConnect) { return IsConnectedSrc(pConnect) || IsConnectedDst(pConnect); }
181 
182  inline int GetSrcCount() const { return mConnectionList.GetSrcCount(); }
183  inline FbxConnectionPoint* GetSrc(int pIndex) const { return mConnectionList.GetSrc(pIndex);}
184  inline FbxConnection::EType GetSrcType(int pIndex) const { return mConnectionList.GetSrcType(pIndex);}
185  inline int GetDstCount() const { return mConnectionList.GetDstCount(); }
186  inline FbxConnectionPoint* GetDst(int pIndex) const { return mConnectionList.GetDst(pIndex);}
187  inline FbxConnection::EType GetDstType(int pIndex) const { return mConnectionList.GetDstType(pIndex);}
188 
189  inline int FindSrc(FbxConnectionPoint* pConnect){ return mConnectionList.FindSrc(pConnect); }
190  inline int FindDst(FbxConnectionPoint* pConnect){ return mConnectionList.FindDst(pConnect); }
191 
192  // Filtered versions
193  inline int GetSrcCount(FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrcCount() : GetSrcCount(); }
194  inline FbxConnectionPoint* GetSrc(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrc(pIndex) : GetSrc(pIndex); }
195  inline FbxConnection::EType GetSrcType(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrcType(pIndex) : GetSrcType(pIndex); }
196  inline int GetDstCount(FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDstCount() : GetDstCount(); }
197  inline FbxConnectionPoint* GetDst(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDst(pIndex): GetDst(pIndex); }
198  inline FbxConnection::EType GetDstType(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDstType(pIndex) : GetDstType(pIndex); }
199 
200  void* GetData(){ return mData; }
201 
202 /*****************************************************************************************************************************
203 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
204 *****************************************************************************************************************************/
205 #ifndef DOXYGEN_SHOULD_SKIP_THIS
206 protected:
207  class ConnectionList
208  {
209  public:
210  ConnectionList();
211  ~ConnectionList();
212 
213  void Clear();
214 
215  void InsertSrcAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pType);
216  void AddSrc(FbxConnectionPoint* pConnect, FbxConnection::EType pType);
217  void RemoveSrcAt(int pIndex);
218  int FindSrc(FbxConnectionPoint* pConnect) const;
219  bool IsConnectedSrc(FbxConnectionPoint* pConnect) const;
220  int GetSrcCount() const;
221  FbxConnectionPoint* GetSrc(int pIndex) const;
222  FbxConnection::EType GetSrcType(int pIndex) const;
223 
224  void InsertDstAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pType);
225  void AddDst(FbxConnectionPoint* pConnect, FbxConnection::EType pType);
226  void RemoveDstAt(int pIndex);
227  int FindDst(FbxConnectionPoint* pConnect) const;
228  int GetDstCount() const;
229  FbxConnectionPoint* GetDst(int pIndex) const;
230  FbxConnection::EType GetDstType(int pIndex) const;
231 
232  protected:
233  struct Connection {
234  Connection(FbxConnectionPoint* pPoint, FbxConnection::EType pType) : mPoint(pPoint), mType(pType) {}
236  };
237 
238  // Separate the arrays for better cache usage when only touching 1 piece of data (eg in FindSrc)
239  // These arrays must be kept in sync (eg during AddSrc, RemoveSrcAt, etc)
240  FbxSet<FbxConnectionPoint*> mSrcListLookup;
241  FbxArray<FbxConnectionPoint*> mSrcPointList;
242  FbxArray<FbxConnection::EType> mSrcTypeList;
243 
244  FbxArray<Connection> mDstList;
245  };
246 
247  void SubConnectAdd(FbxConnectionPoint* pConnect);
248  void SubConnectRemove(FbxConnectionPoint* pConnect);
249  FbxConnectionPoint* SubConnectFind(FbxConnectionPointFilter* pFilter);
250  FbxConnectionPoint* SubConnectGetOrCreate(FbxConnectionPointFilter* pFilter);
251  void SubConnectFill(FbxConnectionPoint* pConnect);
252 
253  virtual bool ConnectNotify(EEvent pAction, FbxConnectionPoint* pThis, int pIndex, FbxConnectionPoint* pConnect=NULL, FbxConnection::EType pConnectionType=FbxConnection::eNone, FbxConnectionPoint* pNewConnect=NULL);
254  virtual void ConnectCleanUp(FbxConnectionPoint* pThis);
255 
256  int FindSrcIndexFromOwnerConnectIndex(FbxConnectionPoint* pOwner, int pOwnerIndex);
257  int FindDstIndexFromOwnerConnectIndex(FbxConnectionPoint* pOwner, int pOwnerIndex);
258 
259  bool InternalMoveSrcBefore(int pIndex, int pBeforeIndex);
260 
261 private:
262  inline void InsertSrcAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType) { mConnectionList.InsertSrcAt(pIndex, pConnect, pConnectionType); }
263  inline void InsertDstAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType) { mConnectionList.InsertDstAt(pIndex, pConnect, pConnectionType); }
264  inline void AddSrc(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType) { mConnectionList.AddSrc(pConnect, pConnectionType); }
265  inline void AddDst(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType) { mConnectionList.AddDst(pConnect, pConnectionType); }
266  inline void RemoveSrcAt(int pIndex){ mConnectionList.RemoveSrcAt(pIndex); }
267  inline void RemoveDstAt(int pIndex){ mConnectionList.RemoveDstAt(pIndex); }
268 
269  static bool InternalConnectBefore(FbxConnectionPoint* pSrc, FbxConnectionPoint* pSrc_BeforeDst, FbxConnectionPoint* pDst, FbxConnectionPoint* pDst_BeforeSrc, FbxConnection::EType pConnectionType);
270  static bool UserConnectBefore(FbxConnectionPoint* pSrc, FbxConnectionPoint* pSrc_BeforeDst, FbxConnectionPoint* pDst, FbxConnectionPoint* pDst_BeforeSrc, FbxConnection::EType pConnectionType);
271  static bool EmitReplaceNotify(FbxConnectionPoint* pDstOwner, FbxConnectionPoint* pSrcOwner, FbxConnectionPoint* pDst, FbxConnectionPoint* pSrc, EEvent pConnectAction, FbxConnectionPoint* pNew);
272 
273  virtual bool SetOwnerConnect(FbxConnectionPoint* pConnect);
274  inline FbxConnectionPoint* GetOwnerConnect(){ return mOwner; }
275  bool ConnectOwnedConnect(FbxConnectionPoint* pConnect);
276  bool DisconnectOwnedConnect(FbxConnectionPoint* pConnect);
277 
278  void* mData;
279  FbxConnectionPoint* mOwner;
280  FbxConnectionPointFilter* mFilter;
281  ConnectionList mConnectionList;
282  FbxArray<FbxConnectionPoint*> mSubConnectList;
283  FbxArray<FbxConnectionPoint*> mSubConnectCreatedList;
284  int mFlags;
285 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
286 };
287 
290 {
291 public:
293 
295  virtual FbxConnectionPointFilter* Ref();
296 
298  virtual void Unref();
299 
301  virtual FbxInt GetUniqueId() const { return 0; }
302 
306  virtual bool IsValid(FbxConnectionPoint* pConnect) const;
307 
312  virtual bool IsValidConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pType) const;
313 
317  virtual bool IsEqual(FbxConnectionPointFilter* pConnectFilter) const;
318 };
319 
320 #include <fbxsdk/fbxsdk_nsend.h>
321 
322 #endif /* _FBXSDK_CORE_CONNECTION_POINT_H_ */
FBX SDK environment definition.
bool IsConnected(FbxConnectionPoint *pConnect)
FbxConnection::EType GetSrcType(int pIndex, FbxConnectionPointFilter *pFilter)
void SetConnectType(EType pType)
int FindDst(FbxConnectionPoint *pConnect)
void SetDirection(int pDirections)
#define NULL
Definition: fbxarch.h:213
FbxConnectionPoint * GetSrc(int pIndex) const
FbxConnectionPoint * GetDst(int pIndex) const
void SetAttribute(int pAttributes)
int GetDstCount(FbxConnectionPointFilter *pFilter)
virtual FbxInt GetUniqueId() const
Get unique filter ID.
void SetCleanedFlag(bool pBool)
int GetSrcCount(FbxConnectionPointFilter *pFilter)
FbxConnection::EType GetDstType(int pIndex) const
This class implements an efficient set based on value comparison, which stores values.
Definition: fbxset.h:25
FbxConnection::EType GetDstType(int pIndex, FbxConnectionPointFilter *pFilter)
FbxConnectionPoint * GetDst(int pIndex, FbxConnectionPointFilter *pFilter)
int FindSrc(FbxConnectionPoint *pConnect)
FbxConnectionPoint * GetSrc(int pIndex, FbxConnectionPointFilter *pFilter)
Class to manage Connect Filter.
FbxConnectionPoint * GetSubOwnerConnect()
#define FBXSDK_DLL
Definition: fbxarch.h:176
FbxConnection::EType GetSrcType(int pIndex) const
void SetAllocatedFlag(bool pBool)
signed int FbxInt
Definition: fbxtypes.h:39
Class for array of basic elements such as pointers and basic types.
Definition: fbxarray.h:37
FbxConnectionPointFilter * GetFilter()