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