00001 #ifndef _FBXSDK_QUERY_H_
00002 #define _FBXSDK_QUERY_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include <kaydaradef.h>
00040 #ifndef KFBX_DLL
00041 #define KFBX_DLL K_DLLIMPORT
00042 #endif
00043
00044 #include <fbxcore/kfbxpropertydef.h>
00045 #include <kfbxplugins/kfbxproperty.h>
00046
00047 #include <fbxfilesdk_nsbegin.h>
00048
00049
00050
00051
00052
00053
00057 class KFBX_DLL KFbxQuery {
00058
00059 public:
00061 virtual kFbxFilterId GetUniqueId() const { return 0x1452e230; }
00062
00064 virtual bool IsValid(KFbxProperty const &pProperty) const;
00066 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00067
00072 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00073
00074 public:
00076 void Ref();
00078 void Unref();
00079 protected:
00080 KFbxQuery();
00081 virtual ~KFbxQuery();
00082 private:
00083 class KFbxInternalFilter : public KFbxConnectionPointFilter{
00084 public:
00085 KFbxInternalFilter(KFbxQuery *pQuery);
00086 ~KFbxInternalFilter();
00087
00088
00089 public:
00090 KFbxConnectionPointFilter* Ref();
00091 void Unref();
00092 kFbxFilterId GetUniqueId() const { return mQuery->GetUniqueId(); }
00093 bool IsValid (KFbxConnectionPoint* pConnect) const;
00094 bool IsValidConnection (KFbxConnectionPoint* pConnect,kFbxConnectionType pType) const;
00095 bool IsEqual (KFbxConnectionPointFilter* pConnectFilter) const;
00096 public:
00097 KFbxQuery* mQuery;
00098
00099 };
00100
00101 KFbxInternalFilter mFilter;
00102 int mRefCount;
00103
00104 friend class KFbxProperty;
00105 friend class KFbxInternalFilter;
00106 };
00107
00108
00109
00110
00111 enum eFbxQueryOperator { eFbxAnd,eFbxOr } ;
00112
00117 class KFBX_DLL KFbxQueryOperator : public KFbxQuery {
00118
00119 public:
00121 static KFbxQueryOperator* Create(KFbxQuery* pA,eFbxQueryOperator pOperator,KFbxQuery* pB);
00122
00123 protected:
00124 KFbxQueryOperator(KFbxQuery* pA,eFbxQueryOperator pOperator,KFbxQuery* pB);
00125 virtual ~KFbxQueryOperator();
00126
00127
00128 public:
00129
00131 virtual kFbxFilterId GetUniqueId() const{ return 0x945874; }
00132
00134 virtual bool IsValid(KFbxProperty const &pProperty) const;
00135
00137 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00138
00140 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00141 private:
00142 KFbxQuery *mA,*mB;
00143 eFbxQueryOperator mOperator;
00144 };
00145
00146
00147
00148
00149 enum eFbxUnaryQueryOperator { eFbxNot };
00150
00154 class KFBX_DLL KFbxUnaryQueryOperator : public KFbxQuery {
00155
00156 public:
00158 static KFbxUnaryQueryOperator* Create(KFbxQuery* pA,eFbxUnaryQueryOperator pOperator);
00159
00160 protected:
00161 KFbxUnaryQueryOperator(KFbxQuery* pA,eFbxUnaryQueryOperator pOperator);
00162 virtual ~KFbxUnaryQueryOperator();
00163
00164
00165 public:
00166
00168 virtual kFbxFilterId GetUniqueId() const{ return 0x945874BB; }
00169
00171 virtual bool IsValid(KFbxProperty const &pProperty) const;
00172
00174 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00175
00177 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00178 private:
00179 KFbxQuery *mA;
00180 eFbxUnaryQueryOperator mOperator;
00181 };
00182
00183
00184
00185
00189 class KFBX_DLL KFbxQueryClassId : public KFbxQuery {
00190
00191 public:
00193 static KFbxQueryClassId* Create(kFbxClassId pClassId);
00194
00195 protected:
00196 KFbxQueryClassId(kFbxClassId pClassId);
00197
00198
00199 public:
00200
00202 virtual kFbxFilterId GetUniqueId() const{ return 0x14572785; }
00203
00205 virtual bool IsValid(KFbxProperty const &pProperty) const;
00207 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00208
00210 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00211 private:
00212 kFbxClassId mClassId;
00213 };
00214
00215
00216
00217
00218
00222 class KFBX_DLL KFbxQueryIsA : public KFbxQuery {
00223
00224 public:
00226 static KFbxQueryIsA* Create(kFbxClassId pClassId);
00227
00228 protected:
00229 KFbxQueryIsA(kFbxClassId pClassId);
00230
00231
00232 public:
00233
00235 virtual kFbxFilterId GetUniqueId() const{ return 0x1457278F; }
00236
00238 virtual bool IsValid(KFbxProperty const &pProperty) const;
00239
00241 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00242
00244 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00245 private:
00246 kFbxClassId mClassId;
00247 };
00248
00249
00250
00251
00252
00256 class KFBX_DLL KFbxQueryProperty : public KFbxQuery {
00257
00258 public:
00260 static KFbxQueryProperty* Create();
00261
00262 protected:
00263 KFbxQueryProperty();
00264
00265
00266 public:
00267
00269 virtual kFbxFilterId GetUniqueId() const{ return 0x9348203; }
00270
00272 virtual bool IsValid(KFbxProperty const &pProperty) const;
00273
00275 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00277 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00278 private:
00279 };
00280
00281
00282
00283
00284
00288 class KFBX_DLL KFbxQueryConnectionType : public KFbxQuery {
00289
00290 public:
00291
00293 static KFbxQueryConnectionType* Create(kFbxConnectionType pConnectionType);
00294
00295 protected:
00296 KFbxQueryConnectionType(kFbxConnectionType pConnectionType);
00297
00298
00299 public:
00300
00302 virtual kFbxFilterId GetUniqueId() const{ return 0x14587275; }
00303
00305 virtual bool IsValid(KFbxProperty const &pProperty) const;
00307 virtual bool IsValid(KFbxProperty const &pProperty,kFbxConnectionType pType) const;
00309 virtual bool IsEqual(KFbxQuery *pOtherQuery) const;
00310 private:
00311 kFbxConnectionType mConnectionType;
00312 };
00313
00314
00315
00316
00317 class KFbxCriteria {
00318 public:
00319 static KFbxCriteria ConnectionType(kFbxConnectionType pConnectionType)
00320 {
00321 return KFbxCriteria(KFbxQueryConnectionType::Create(pConnectionType));
00322 }
00323 static KFbxCriteria ObjectType(kFbxClassId pClassId)
00324 {
00325 return KFbxCriteria(KFbxQueryClassId::Create(pClassId));
00326 }
00327 static KFbxCriteria ObjectIsA(kFbxClassId pClassId)
00328 {
00329 return KFbxCriteria(KFbxQueryIsA::Create(pClassId));
00330 }
00331 static KFbxCriteria Property()
00332 {
00333 return KFbxCriteria(KFbxQueryProperty::Create());
00334 }
00335 inline KFbxCriteria()
00336 : mQuery(0)
00337 {
00338 }
00339 inline KFbxCriteria(KFbxCriteria const &pCriteria)
00340 : mQuery(pCriteria.mQuery)
00341 {
00342 if( mQuery )
00343 mQuery->Ref();
00344 }
00345
00346 inline ~KFbxCriteria()
00347 {
00348 if( mQuery )
00349 mQuery->Unref();
00350 }
00351 private:
00352 inline KFbxCriteria(KFbxQuery* pQuery)
00353 : mQuery(pQuery)
00354 {
00355 }
00356 public:
00357 inline KFbxCriteria &operator=(KFbxCriteria const &pCriteria)
00358 {
00359 if( this != &pCriteria )
00360 {
00361 KFbxQuery* lQuery = mQuery;
00362 mQuery = pCriteria.mQuery;
00363
00364 if( mQuery )
00365 mQuery->Ref();
00366
00367 if( lQuery )
00368 lQuery->Unref();
00369 }
00370
00371 return *this;
00372 }
00373 inline KFbxCriteria operator && (KFbxCriteria const &pCriteria) const
00374 {
00375 return KFbxCriteria(KFbxQueryOperator::Create(GetQuery(),eFbxAnd,pCriteria.GetQuery()));
00376 }
00377 inline KFbxCriteria operator || (KFbxCriteria const &pCriteria) const
00378 {
00379 return KFbxCriteria(KFbxQueryOperator::Create(GetQuery(),eFbxOr,pCriteria.GetQuery()));
00380 }
00381 inline KFbxCriteria operator !() const
00382 {
00383 return KFbxCriteria(KFbxUnaryQueryOperator::Create(GetQuery(), eFbxNot));
00384 }
00385
00386 public:
00387 inline KFbxQuery* GetQuery() const { return mQuery; }
00388 private:
00389 KFbxQuery* mQuery;
00390 };
00391
00392 #include <fbxfilesdk_nsend.h>
00393
00394 #endif // #ifndef _FBXSDK_Document_H_
00395
00396