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 
19 
20 #include <fbxsdk/fbxsdk_nsbegin.h>
21 
23 {
24 public:
25  enum EType
26  {
27  eNone = 0,
28  // System or user
29  eSystem = 1 << 0,
30  eUser = 1 << 1,
31  eSystemOrUser = eUser | eSystem,
32  // Type of Link
33  eReference = 1 << 2,
34  eContains = 1 << 3,
35  eData = 1 << 4,
36  eLinkType = eReference | eContains | eData,
37  eDefault = eUser | eReference,
38  eUnidirectional = 1 << 7
39  };
40 };
41 
43 
45 {
46 public:
48  {
49  eDirSrc = 1 << 0, // Contains sources
50  eDirDst = 1 << 1, // Contains destinations
51  eDirUni = 1 << 2, // Connection is not 2 ways
52  eDirBoth = eDirSrc | eDirDst,
53  eDirMask = eDirSrc | eDirDst | eDirUni
54  };
55 
56  enum EType
57  {
58  eStandard = 0,
59  eSubConnection = 1 << 3, // Connect is a sub Connect of another
60  eTypeMask = eSubConnection
61  };
62 
64  {
65  eDefault = 0,
66  eCache = 1 << 4,
67  eAttributeMask = eCache
68  };
69 
71  {
72  eNotAllocated = 0,
73  eAllocated = 1 << 5,
74  eAllocFlagMask = eAllocated
75  };
76 
78  {
79  eNotCleaned = 0,
80  eCleaned = 1 << 6,
81  eCleanedFlagMask = eCleaned
82  };
83 
84  enum EEvent
85  {
101  eSrcReordered
102  };
103 
104  // Constructor/Destructor
105  FbxConnectionPoint(void* pData=0);
106  virtual ~FbxConnectionPoint();
107 
108  void SetFilter(FbxConnectionPointFilter* pConnectFilter, EType pType=eStandard);
109  void InternalClear();
110 
112  void WipeConnectionList();
113  void Destroy();
114  void SubConnectRemoveAll();
115 
116  inline FbxConnectionPoint* GetSubOwnerConnect(){ return GetConnectType() == eSubConnection ? mOwner : NULL; }
117  inline FbxConnectionPointFilter* GetFilter(){ return mFilter; }
118 
119  virtual bool IsInReplace(FbxConnectionPoint* p1, FbxConnectionPoint* p2);
120 
121  inline void SetConnectType(EType pType){ mFlags = (mFlags & ~eTypeMask) | pType; }
122  inline EType GetConnectType(){ return EType(mFlags & eTypeMask); }
123  inline void SetDirection(int pDirections){ mFlags = (mFlags & ~eDirMask) | pDirections; }
124  inline EDirection GetDirection(){ return EDirection(mFlags & eDirMask); }
125  inline void SetAttribute(int pAttributes){ mFlags = (mFlags & ~eAttributeMask) | pAttributes; }
126  inline EAttribute GetAttribute(){ return EAttribute(mFlags & eAttributeMask); }
127  inline void SetAllocatedFlag(bool pBool){ mFlags = ( pBool ) ? mFlags | eAllocated : mFlags & ~eAllocFlagMask; }
128  inline bool GetAllocatedFlag(){ return ( mFlags & eAllocFlagMask ) ? true : false; }
129  inline void SetCleanedFlag(bool pBool){ mFlags = ( pBool ) ? mFlags | eCleaned : mFlags & ~eCleanedFlagMask; }
130  inline bool GetCleanedFlag(){ return ( mFlags & eCleanedFlagMask ) ? true : false; }
131 
132  bool IsValidSrc(FbxConnectionPoint* pConnect);
133  bool IsValidDst(FbxConnectionPoint* pConnect);
134  bool IsValidSrcConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType);
135  bool IsValidDstConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType);
136  bool RequestValidSrcConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType );
137  bool RequestValidDstConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType );
138 
139  bool ConnectSrc(FbxConnectionPoint* pSrc,FbxConnection::EType pConnectionType=FbxConnection::eNone);
140  bool ConnectDst(FbxConnectionPoint* pDst,FbxConnection::EType pConnectionType=FbxConnection::eNone);
141  bool ConnectSrcAt(int pDst_SrcIndex, FbxConnectionPoint* pSrc, FbxConnection::EType pConnectionType=FbxConnection::eNone);
142  bool ConnectDstAt(int pSrc_DstIndex, FbxConnectionPoint* pDst, FbxConnection::EType pConnectionType=FbxConnection::eNone);
143  static bool ConnectConnect(FbxConnectionPoint* pSrc,FbxConnectionPoint* pDst,FbxConnection::EType pConnectionType);
144  static bool ConnectAt(FbxConnectionPoint* pSrc, int pSrc_DstIndex, FbxConnectionPoint* pDst, int pDst_SrcIndex, FbxConnection::EType pConnectionType);
145 
146  bool DisconnectDst(FbxConnectionPoint* pSrc);
147  bool DisconnectSrc(FbxConnectionPoint* pSrc);
148  void DisconnectAllSrc();
149  void DisconnectAllDst();
150  static bool DisconnectConnect(FbxConnectionPoint* pSrc,FbxConnectionPoint* pDst);
151  bool DisconnectDstAt(int pIndex);
152  bool DisconnectSrcAt(int pIndex);
153 
154  bool ReplaceInDst(FbxConnectionPoint* pDstOld, FbxConnectionPoint* pDstNew, int pIndexInNew);
155  bool ReplaceInSrc(FbxConnectionPoint* pSrcOld, FbxConnectionPoint* pSrcNew, int pIndexInNew);
156  bool ReplaceDstAt(int pIndex, FbxConnectionPoint* pDst);
157  bool ReplaceSrcAt(int pIndex, FbxConnectionPoint* pSrc);
158  bool SwapSrc(int pIndexA, int pIndexB);
159 
166  bool MoveSrcAt(int pIndex, int pAtIndex);
167 
174  bool MoveSrcAt(FbxConnectionPoint* pSrc, FbxConnectionPoint* pAtSrc);
175 
176  // Access services
177  bool IsConnectedSrc(FbxConnectionPoint*);
178  bool IsConnectedDst(FbxConnectionPoint*);
179  inline bool IsConnected(FbxConnectionPoint* pConnect) { return IsConnectedSrc(pConnect) || IsConnectedDst(pConnect); }
180 
181  inline int GetSrcCount() const { return mConnectionList.GetSrcCount(); }
182  inline FbxConnectionPoint* GetSrc(int pIndex) const { return mConnectionList.GetSrc(pIndex);}
183  inline FbxConnection::EType GetSrcType(int pIndex) const { return mConnectionList.GetSrcType(pIndex);}
184  inline int GetDstCount() const { return mConnectionList.GetDstCount(); }
185  inline FbxConnectionPoint* GetDst(int pIndex) const { return mConnectionList.GetDst(pIndex);}
186  inline FbxConnection::EType GetDstType(int pIndex) const { return mConnectionList.GetDstType(pIndex);}
187 
188  inline int FindSrc(FbxConnectionPoint* pConnect){ return mConnectionList.FindSrc(pConnect); }
189  inline int FindDst(FbxConnectionPoint* pConnect){ return mConnectionList.FindDst(pConnect); }
190 
191  // Filtered versions
192  inline int GetSrcCount(FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrcCount() : GetSrcCount(); }
193  inline FbxConnectionPoint* GetSrc(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrc(pIndex) : GetSrc(pIndex); }
194  inline FbxConnection::EType GetSrcType(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetSrcType(pIndex) : GetSrcType(pIndex); }
195  inline int GetDstCount(FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDstCount() : GetDstCount(); }
196  inline FbxConnectionPoint* GetDst(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDst(pIndex): GetDst(pIndex); }
197  inline FbxConnection::EType GetDstType(int pIndex,FbxConnectionPointFilter* pFilter){ return (pFilter) ? SubConnectGetOrCreate(pFilter)->GetDstType(pIndex) : GetDstType(pIndex); }
198 
199  void* GetData(){ return mData; }
200 
201 /*****************************************************************************************************************************
202 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
203 *****************************************************************************************************************************/
204 #ifndef DOXYGEN_SHOULD_SKIP_THIS
205 protected:
206  class ConnectionList
207  {
208  public:
209  ConnectionList();
210  ~ConnectionList();
211 
212  void Clear();
213 
214  void InsertSrcAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pType);
215  void AddSrc(FbxConnectionPoint* pConnect, FbxConnection::EType pType);
216  void RemoveSrcAt(int pIndex);
217  int FindSrc(FbxConnectionPoint* pConnect) const;
218  int GetSrcCount() const;
219  FbxConnectionPoint* GetSrc(int pIndex) const;
220  FbxConnection::EType GetSrcType(int pIndex) const;
221 
222  void InsertDstAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pType);
223  void AddDst(FbxConnectionPoint* pConnect, FbxConnection::EType pType);
224  void RemoveDstAt(int pIndex);
225  int FindDst(FbxConnectionPoint* pConnect) const;
226  int GetDstCount() const;
227  FbxConnectionPoint* GetDst(int pIndex) const;
228  FbxConnection::EType GetDstType(int pIndex) const;
229 
230  protected:
231  struct Connection {
232  Connection(FbxConnectionPoint* pPoint, FbxConnection::EType pType) : mPoint(pPoint), mType(pType){}
234  };
235  FbxArray<Connection> mSrcList;
236  FbxArray<Connection> mDstList;
237  };
238 
239  void SubConnectAdd(FbxConnectionPoint* pConnect);
240  void SubConnectRemove(FbxConnectionPoint* pConnect);
241  FbxConnectionPoint* SubConnectFind(FbxConnectionPointFilter* pFilter);
242  FbxConnectionPoint* SubConnectGetOrCreate(FbxConnectionPointFilter* pFilter);
243  void SubConnectFill(FbxConnectionPoint* pConnect);
244 
245  virtual bool ConnectNotify(EEvent pAction, FbxConnectionPoint* pThis, int pIndex, FbxConnectionPoint* pConnect=NULL, FbxConnection::EType pConnectionType=FbxConnection::eNone, FbxConnectionPoint* pNewConnect=NULL);
246  virtual void ConnectCleanUp(FbxConnectionPoint* pThis);
247 
248  int FindSrcIndexFromOwnerConnectIndex(FbxConnectionPoint* pOwner, int pOwnerIndex);
249  int FindDstIndexFromOwnerConnectIndex(FbxConnectionPoint* pOwner, int pOwnerIndex);
250 
251  bool InternalMoveSrcBefore(int pIndex, int pBeforeIndex);
252 
253 private:
254  inline void InsertSrcAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType){ mConnectionList.InsertSrcAt(pIndex, pConnect, pConnectionType); }
255  inline void InsertDstAt(int pIndex, FbxConnectionPoint* pConnect, FbxConnection::EType pConnectionType){ mConnectionList.InsertDstAt(pIndex, pConnect, pConnectionType); }
256  inline void RemoveSrcAt(int pIndex){ mConnectionList.RemoveSrcAt(pIndex); }
257  inline void RemoveDstAt(int pIndex){ mConnectionList.RemoveDstAt(pIndex); }
258 
259  static bool InternalConnectBefore(FbxConnectionPoint* pSrc, FbxConnectionPoint* pSrc_BeforeDst, FbxConnectionPoint* pDst, FbxConnectionPoint* pDst_BeforeSrc, FbxConnection::EType pConnectionType);
260  static bool UserConnectBefore(FbxConnectionPoint* pSrc, FbxConnectionPoint* pSrc_BeforeDst, FbxConnectionPoint* pDst, FbxConnectionPoint* pDst_BeforeSrc, FbxConnection::EType pConnectionType);
261  static bool EmitReplaceNotify(FbxConnectionPoint* pDstOwner, FbxConnectionPoint* pSrcOwner, FbxConnectionPoint* pDst, FbxConnectionPoint* pSrc, EEvent pConnectAction, FbxConnectionPoint* pNew);
262 
263  virtual bool SetOwnerConnect(FbxConnectionPoint* pConnect);
264  inline FbxConnectionPoint* GetOwnerConnect(){ return mOwner; }
265  bool ConnectOwnedConnect(FbxConnectionPoint* pConnect);
266  bool DisconnectOwnedConnect(FbxConnectionPoint* pConnect);
267 
268  void* mData;
269  int mFlags;
270  FbxConnectionPoint* mOwner;
271  ConnectionList mConnectionList;
272  FbxArray<FbxConnectionPoint*> mSubConnectList;
273  FbxArray<FbxConnectionPoint*> mSubConnectCreatedList;
274  FbxConnectionPointFilter* mFilter;
275 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
276 };
277 
280 {
281 public:
283 
285  virtual FbxConnectionPointFilter* Ref();
286 
288  virtual void Unref();
289 
291  virtual FbxInt GetUniqueId() const { return 0; }
292 
296  virtual bool IsValid(FbxConnectionPoint* pConnect) const;
297 
302  virtual bool IsValidConnection(FbxConnectionPoint* pConnect, FbxConnection::EType pType) const;
303 
307  virtual bool IsEqual(FbxConnectionPointFilter* pConnectFilter) const;
308 };
309 
310 #include <fbxsdk/fbxsdk_nsend.h>
311 
312 #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)
virtual FbxInt GetUniqueId() const
Get unique filter ID.
#define NULL
Definition: fbxarch.h:210
FbxConnectionPoint * GetDst(int pIndex) const
void SetAttribute(int pAttributes)
int GetDstCount(FbxConnectionPointFilter *pFilter)
FbxConnectionPoint * GetSrc(int pIndex) const
void SetCleanedFlag(bool pBool)
int GetSrcCount(FbxConnectionPointFilter *pFilter)
FbxConnection::EType GetDstType(int pIndex, FbxConnectionPointFilter *pFilter)
FbxConnectionPoint * GetDst(int pIndex, FbxConnectionPointFilter *pFilter)
int FindSrc(FbxConnectionPoint *pConnect)
FbxConnection::EType GetDstType(int pIndex) const
FbxConnectionPoint * GetSrc(int pIndex, FbxConnectionPointFilter *pFilter)
Class to manage Connect Filter.
FbxConnectionPoint * GetSubOwnerConnect()
#define FBXSDK_DLL
Definition: fbxarch.h:173
void SetAllocatedFlag(bool pBool)
signed int FbxInt
Definition: fbxtypes.h:39
FbxConnection::EType GetSrcType(int pIndex) const
Class for array of basic elements such as pointers and basic types.
Definition: fbxarray.h:23
FbxConnectionPointFilter * GetFilter()