00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <QtScript/QScriptEngine>
00023 #include <QtScript/QScriptContext>
00024 #include <QtScript/QScriptValue>
00025 #include <QtCore/QStringList>
00026 #include <QtCore/QDebug>
00027 #include <qmetaobject.h>
00028
00029 #include <QVariant>
00030 #include <qdatastream.h>
00031 #include <qquaternion.h>
00032 #include <qvector3d.h>
00033 #include <qvector4d.h>
00034
00035 static const char* const qtscript_QQuaternion_function_names[] =
00036 {
00037 "QQuaternion"
00038
00039 , "fromAxisAndAngle"
00040 , "nlerp"
00041 , "slerp"
00042
00043 , "conjugate"
00044 , "isIdentity"
00045 , "isNull"
00046 , "length"
00047 , "lengthSquared"
00048 , "normalize"
00049 , "normalized"
00050 , "operator_add_assign"
00051 , "operator_divide_assign"
00052 , "equals"
00053 , "operator_multiply_assign"
00054 , "operator_subtract_assign"
00055 , "readFrom"
00056 , "rotatedVector"
00057 , "scalar"
00058 , "setScalar"
00059 , "setVector"
00060 , "setX"
00061 , "setY"
00062 , "setZ"
00063 , "toVector4D"
00064 , "vector"
00065 , "writeTo"
00066 , "x"
00067 , "y"
00068 , "z"
00069 , "toString"
00070 };
00071
00072 static const char* const qtscript_QQuaternion_function_signatures[] =
00073 {
00074 "\nQVector4D vector\nqreal scalar, QVector3D vector\nqreal scalar, qreal xpos, qreal ypos, qreal zpos"
00075
00076 , "QVector3D axis, qreal angle\nqreal x, qreal y, qreal z, qreal angle"
00077 , "QQuaternion q1, QQuaternion q2, qreal t"
00078 , "QQuaternion q1, QQuaternion q2, qreal t"
00079
00080 , ""
00081 , ""
00082 , ""
00083 , ""
00084 , ""
00085 , ""
00086 , ""
00087 , "QQuaternion quaternion"
00088 , "qreal divisor"
00089 , "QQuaternion q2"
00090 , "QQuaternion quaternion\nqreal factor"
00091 , "QQuaternion quaternion"
00092 , "QDataStream arg__1"
00093 , "QVector3D vector"
00094 , ""
00095 , "qreal scalar"
00096 , "QVector3D vector\nqreal x, qreal y, qreal z"
00097 , "qreal x"
00098 , "qreal y"
00099 , "qreal z"
00100 , ""
00101 , ""
00102 , "QDataStream arg__1"
00103 , ""
00104 , ""
00105 , ""
00106 ""
00107 };
00108
00109 static const int qtscript_QQuaternion_function_lengths[] =
00110 {
00111 4
00112
00113 , 4
00114 , 3
00115 , 3
00116
00117 , 0
00118 , 0
00119 , 0
00120 , 0
00121 , 0
00122 , 0
00123 , 0
00124 , 1
00125 , 1
00126 , 1
00127 , 1
00128 , 1
00129 , 1
00130 , 1
00131 , 0
00132 , 1
00133 , 3
00134 , 1
00135 , 1
00136 , 1
00137 , 0
00138 , 0
00139 , 1
00140 , 0
00141 , 0
00142 , 0
00143 , 0
00144 };
00145
00146 static QScriptValue qtscript_QQuaternion_throw_ambiguity_error_helper(
00147 QScriptContext* context, const char* functionName, const char* signatures )
00148 {
00149 QStringList lines = QString::fromLatin1( signatures ).split( QLatin1Char( '\n' ) );
00150 QStringList fullSignatures;
00151 for( int i = 0; i < lines.size(); ++i )
00152 fullSignatures.append( QString::fromLatin1( "%0(%1)" ).arg( functionName ).arg( lines.at( i ) ) );
00153 return context->throwError( QString::fromLatin1( "QQuaternion::%0(): could not find a function match; candidates are:\n%1" )
00154 .arg( functionName ).arg( fullSignatures.join( QLatin1String( "\n" ) ) ) );
00155 }
00156
00157 Q_DECLARE_METATYPE( QQuaternion* )
00158 Q_DECLARE_METATYPE( QDataStream* )
00159
00160
00161
00162
00163
00164 static QScriptValue qtscript_QQuaternion_prototype_call( QScriptContext* context, QScriptEngine* )
00165 {
00166 #if QT_VERSION > 0x040400
00167 Q_ASSERT( context->callee().isFunction() );
00168 uint _id = context->callee().data().toUInt32();
00169 #else
00170 uint _id;
00171 if( context->callee().isFunction() )
00172 _id = context->callee().data().toUInt32();
00173 else
00174 _id = 0xBABE0000 + 26;
00175 #endif
00176 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00177 _id &= 0x0000FFFF;
00178 QQuaternion* _q_self = qscriptvalue_cast<QQuaternion*>( context->thisObject() );
00179 if( !_q_self )
00180 {
00181 return context->throwError( QScriptContext::TypeError,
00182 QString::fromLatin1( "QQuaternion.%0(): this object is not a QQuaternion" )
00183 .arg( qtscript_QQuaternion_function_names[_id+4] ) );
00184 }
00185
00186 switch( _id )
00187 {
00188 case 0:
00189 if( context->argumentCount() == 0 )
00190 {
00191 QQuaternion _q_result = _q_self->conjugate();
00192 return qScriptValueFromValue( context->engine(), _q_result );
00193 }
00194 break;
00195
00196 case 1:
00197 if( context->argumentCount() == 0 )
00198 {
00199 bool _q_result = _q_self->isIdentity();
00200 return QScriptValue( context->engine(), _q_result );
00201 }
00202 break;
00203
00204 case 2:
00205 if( context->argumentCount() == 0 )
00206 {
00207 bool _q_result = _q_self->isNull();
00208 return QScriptValue( context->engine(), _q_result );
00209 }
00210 break;
00211
00212 case 3:
00213 if( context->argumentCount() == 0 )
00214 {
00215 qreal _q_result = _q_self->length();
00216 return qScriptValueFromValue( context->engine(), _q_result );
00217 }
00218 break;
00219
00220 case 4:
00221 if( context->argumentCount() == 0 )
00222 {
00223 qreal _q_result = _q_self->lengthSquared();
00224 return qScriptValueFromValue( context->engine(), _q_result );
00225 }
00226 break;
00227
00228 case 5:
00229 if( context->argumentCount() == 0 )
00230 {
00231 _q_self->normalize();
00232 return context->engine()->undefinedValue();
00233 }
00234 break;
00235
00236 case 6:
00237 if( context->argumentCount() == 0 )
00238 {
00239 QQuaternion _q_result = _q_self->normalized();
00240 return qScriptValueFromValue( context->engine(), _q_result );
00241 }
00242 break;
00243
00244 case 7:
00245 if( context->argumentCount() == 1 )
00246 {
00247 QQuaternion _q_arg0 = qscriptvalue_cast<QQuaternion>( context->argument( 0 ) );
00248 QQuaternion _q_result = _q_self->operator+=( _q_arg0 );
00249 return qScriptValueFromValue( context->engine(), _q_result );
00250 }
00251 break;
00252
00253 case 8:
00254 if( context->argumentCount() == 1 )
00255 {
00256 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00257 QQuaternion _q_result = _q_self->operator/=( _q_arg0 );
00258 return qScriptValueFromValue( context->engine(), _q_result );
00259 }
00260 break;
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270 case 10:
00271 if( context->argumentCount() == 1 )
00272 {
00273 if(( qMetaTypeId<QQuaternion>() == context->argument( 0 ).toVariant().userType() ) )
00274 {
00275 QQuaternion _q_arg0 = qscriptvalue_cast<QQuaternion>( context->argument( 0 ) );
00276 QQuaternion _q_result = _q_self->operator*=( _q_arg0 );
00277 return qScriptValueFromValue( context->engine(), _q_result );
00278 }
00279 else if(( qMetaTypeId<qreal>() == context->argument( 0 ).toVariant().userType() ) )
00280 {
00281 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00282 QQuaternion _q_result = _q_self->operator*=( _q_arg0 );
00283 return qScriptValueFromValue( context->engine(), _q_result );
00284 }
00285 }
00286 break;
00287
00288 case 11:
00289 if( context->argumentCount() == 1 )
00290 {
00291 QQuaternion _q_arg0 = qscriptvalue_cast<QQuaternion>( context->argument( 0 ) );
00292 QQuaternion _q_result = _q_self->operator-=( _q_arg0 );
00293 return qScriptValueFromValue( context->engine(), _q_result );
00294 }
00295 break;
00296
00297 case 12:
00298 if( context->argumentCount() == 1 )
00299 {
00300 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00301 operator>>( *_q_arg0, *_q_self );
00302 return context->engine()->undefinedValue();
00303 }
00304 break;
00305
00306 case 13:
00307 if( context->argumentCount() == 1 )
00308 {
00309 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00310 QVector3D _q_result = _q_self->rotatedVector( _q_arg0 );
00311 return qScriptValueFromValue( context->engine(), _q_result );
00312 }
00313 break;
00314
00315 case 14:
00316 if( context->argumentCount() == 0 )
00317 {
00318 qreal _q_result = _q_self->scalar();
00319 return qScriptValueFromValue( context->engine(), _q_result );
00320 }
00321 break;
00322
00323 case 15:
00324 if( context->argumentCount() == 1 )
00325 {
00326 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00327 _q_self->setScalar( _q_arg0 );
00328 return context->engine()->undefinedValue();
00329 }
00330 break;
00331
00332 case 16:
00333 if( context->argumentCount() == 1 )
00334 {
00335 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00336 _q_self->setVector( _q_arg0 );
00337 return context->engine()->undefinedValue();
00338 }
00339 if( context->argumentCount() == 3 )
00340 {
00341 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00342 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00343 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00344 _q_self->setVector( _q_arg0, _q_arg1, _q_arg2 );
00345 return context->engine()->undefinedValue();
00346 }
00347 break;
00348
00349 case 17:
00350 if( context->argumentCount() == 1 )
00351 {
00352 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00353 _q_self->setX( _q_arg0 );
00354 return context->engine()->undefinedValue();
00355 }
00356 break;
00357
00358 case 18:
00359 if( context->argumentCount() == 1 )
00360 {
00361 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00362 _q_self->setY( _q_arg0 );
00363 return context->engine()->undefinedValue();
00364 }
00365 break;
00366
00367 case 19:
00368 if( context->argumentCount() == 1 )
00369 {
00370 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00371 _q_self->setZ( _q_arg0 );
00372 return context->engine()->undefinedValue();
00373 }
00374 break;
00375
00376 case 20:
00377 if( context->argumentCount() == 0 )
00378 {
00379 QVector4D _q_result = _q_self->toVector4D();
00380 return qScriptValueFromValue( context->engine(), _q_result );
00381 }
00382 break;
00383
00384 case 21:
00385 if( context->argumentCount() == 0 )
00386 {
00387 QVector3D _q_result = _q_self->vector();
00388 return qScriptValueFromValue( context->engine(), _q_result );
00389 }
00390 break;
00391
00392 case 22:
00393 if( context->argumentCount() == 1 )
00394 {
00395 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00396 operator<<( *_q_arg0, *_q_self );
00397 return context->engine()->undefinedValue();
00398 }
00399 break;
00400
00401 case 23:
00402 if( context->argumentCount() == 0 )
00403 {
00404 qreal _q_result = _q_self->x();
00405 return qScriptValueFromValue( context->engine(), _q_result );
00406 }
00407 break;
00408
00409 case 24:
00410 if( context->argumentCount() == 0 )
00411 {
00412 qreal _q_result = _q_self->y();
00413 return qScriptValueFromValue( context->engine(), _q_result );
00414 }
00415 break;
00416
00417 case 25:
00418 if( context->argumentCount() == 0 )
00419 {
00420 qreal _q_result = _q_self->z();
00421 return qScriptValueFromValue( context->engine(), _q_result );
00422 }
00423 break;
00424
00425 case 26:
00426 {
00427 QString result;
00428 QDebug d( &result );
00429 d << *_q_self;
00430 return QScriptValue( context->engine(), result );
00431 }
00432
00433 default:
00434 Q_ASSERT( false );
00435 }
00436 return qtscript_QQuaternion_throw_ambiguity_error_helper( context,
00437 qtscript_QQuaternion_function_names[_id+4],
00438 qtscript_QQuaternion_function_signatures[_id+4] );
00439 }
00440
00441 static QScriptValue qtscript_QQuaternion_static_call( QScriptContext* context, QScriptEngine* )
00442 {
00443 uint _id = context->callee().data().toUInt32();
00444 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00445 _id &= 0x0000FFFF;
00446 switch( _id )
00447 {
00448 case 0:
00449 if( context->thisObject().strictlyEquals( context->engine()->globalObject() ) )
00450 {
00451 return context->throwError( QString::fromLatin1( "QQuaternion(): Did you forget to construct with 'new'?" ) );
00452 }
00453 if( context->argumentCount() == 0 )
00454 {
00455 QQuaternion _q_cpp_result;
00456 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00457 return _q_result;
00458 }
00459 else if( context->argumentCount() == 1 )
00460 {
00461 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00462 QQuaternion _q_cpp_result( _q_arg0 );
00463 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00464 return _q_result;
00465 }
00466 else if( context->argumentCount() == 2 )
00467 {
00468 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00469 QVector3D _q_arg1 = qscriptvalue_cast<QVector3D>( context->argument( 1 ) );
00470 QQuaternion _q_cpp_result( _q_arg0, _q_arg1 );
00471 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00472 return _q_result;
00473 }
00474 else if( context->argumentCount() == 4 )
00475 {
00476 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00477 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00478 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00479 qreal _q_arg3 = qscriptvalue_cast<qreal>( context->argument( 3 ) );
00480 QQuaternion _q_cpp_result( _q_arg0, _q_arg1, _q_arg2, _q_arg3 );
00481 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00482 return _q_result;
00483 }
00484 break;
00485
00486 case 1:
00487 if( context->argumentCount() == 2 )
00488 {
00489 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00490 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00491 QQuaternion _q_result = QQuaternion::fromAxisAndAngle( _q_arg0, _q_arg1 );
00492 return qScriptValueFromValue( context->engine(), _q_result );
00493 }
00494 if( context->argumentCount() == 4 )
00495 {
00496 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00497 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00498 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00499 qreal _q_arg3 = qscriptvalue_cast<qreal>( context->argument( 3 ) );
00500 QQuaternion _q_result = QQuaternion::fromAxisAndAngle( _q_arg0, _q_arg1, _q_arg2, _q_arg3 );
00501 return qScriptValueFromValue( context->engine(), _q_result );
00502 }
00503 break;
00504
00505 case 2:
00506 if( context->argumentCount() == 3 )
00507 {
00508 QQuaternion _q_arg0 = qscriptvalue_cast<QQuaternion>( context->argument( 0 ) );
00509 QQuaternion _q_arg1 = qscriptvalue_cast<QQuaternion>( context->argument( 1 ) );
00510 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00511 QQuaternion _q_result = QQuaternion::nlerp( _q_arg0, _q_arg1, _q_arg2 );
00512 return qScriptValueFromValue( context->engine(), _q_result );
00513 }
00514 break;
00515
00516 case 3:
00517 if( context->argumentCount() == 3 )
00518 {
00519 QQuaternion _q_arg0 = qscriptvalue_cast<QQuaternion>( context->argument( 0 ) );
00520 QQuaternion _q_arg1 = qscriptvalue_cast<QQuaternion>( context->argument( 1 ) );
00521 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00522 QQuaternion _q_result = QQuaternion::slerp( _q_arg0, _q_arg1, _q_arg2 );
00523 return qScriptValueFromValue( context->engine(), _q_result );
00524 }
00525 break;
00526
00527 default:
00528 Q_ASSERT( false );
00529 }
00530 return qtscript_QQuaternion_throw_ambiguity_error_helper( context,
00531 qtscript_QQuaternion_function_names[_id],
00532 qtscript_QQuaternion_function_signatures[_id] );
00533 }
00534
00535 QScriptValue qtscript_create_QQuaternion_class( QScriptEngine* engine )
00536 {
00537 engine->setDefaultPrototype( qMetaTypeId<QQuaternion*>(), QScriptValue() );
00538 QScriptValue proto = engine->newVariant( qVariantFromValue(( QQuaternion* )0 ) );
00539 for( int i = 0; i < 27; ++i )
00540 {
00541 QScriptValue fun = engine->newFunction( qtscript_QQuaternion_prototype_call, qtscript_QQuaternion_function_lengths[i+4] );
00542 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i ) ) );
00543 proto.setProperty( QString::fromLatin1( qtscript_QQuaternion_function_names[i+4] ),
00544 fun, QScriptValue::SkipInEnumeration );
00545 }
00546
00547 engine->setDefaultPrototype( qMetaTypeId<QQuaternion>(), proto );
00548 engine->setDefaultPrototype( qMetaTypeId<QQuaternion*>(), proto );
00549
00550 QScriptValue ctor = engine->newFunction( qtscript_QQuaternion_static_call, proto, qtscript_QQuaternion_function_lengths[0] );
00551 ctor.setData( QScriptValue( engine, uint( 0xBABE0000 + 0 ) ) );
00552 for( int i = 0; i < 3; ++i )
00553 {
00554 QScriptValue fun = engine->newFunction( qtscript_QQuaternion_static_call,
00555 qtscript_QQuaternion_function_lengths[i+1] );
00556 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i + 1 ) ) );
00557 ctor.setProperty( QString::fromLatin1( qtscript_QQuaternion_function_names[i+1] ),
00558 fun, QScriptValue::SkipInEnumeration );
00559 }
00560
00561 return ctor;
00562 }