示例#1
0
 FREObject LeapNative_getScreenProject(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
     leapnative::LNLeapDevice* device;
     FREGetContextNativeData(ctx, (void **) &device);
     
     int screenId;
     FREGetObjectAsInt32(argv[0], &screenId);
     
     double pX;
     FREGetObjectAsDouble(argv[1], &pX);
     
     double pY;
     FREGetObjectAsDouble(argv[2], &pY);
     
     double pZ;
     FREGetObjectAsDouble(argv[3], &pZ);
     
     bool normalize = createBoolFromFREObject(argv[4]);
     
     double clampRatio;
     FREGetObjectAsDouble(argv[5], &clampRatio);
     
     Vector position = Vector((float) pX, (float) pY, (float) pZ);
     
     return device->getScreenProject(screenId, position, normalize, (float) clampRatio);
 }
extern "C" FREObject createConeShape(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[])
{
    FREObject as3_rad = argv[0];
    FREObject as3_height = argv[1];
    double rad, height;
    
    FREGetObjectAsDouble(as3_rad, &rad);
    FREGetObjectAsDouble(as3_height, &height);
    
    btCollisionShape* shape = new btConeShape(btScalar(rad), btScalar(height));
    
    FREObject ptr;
    FRENewObjectFromUint32((uint32_t)shape, &ptr);
    return ptr;
}
示例#3
0
    //start device class
    FREObject LeapNative_getDeviceDistanceToBoundary(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
        leapnative::LNLeapDevice* device;
        FREGetContextNativeData(ctx, (void **) &device);
        
        double pX;
        double pY;
        double pZ;
        FREGetObjectAsDouble(argv[0], &pX);
        FREGetObjectAsDouble(argv[1], &pY);
        FREGetObjectAsDouble(argv[2], &pZ);

        Vector position = Vector((float) pX, (float) pY, (float) pZ);

        return device->getDeviceDistanceToBoundary(position);
    }
extern "C" FREObject createRigidBody(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[])
{
    FREObject as3_shape = argv[0];
    FREObject as3_mass = argv[1];
    FREObject as3_inertia = argv[2];
    btCollisionShape* shape;
    double mass;
    
    FREGetObjectAsUint32(as3_shape, (uint32_t*)&shape);
    FREGetObjectAsDouble(as3_mass, &mass);
    
    bool isDynamic = (mass != 0.0f);
    
    btVector3 localInertia(0,0,0);
    if (as3_inertia)
        localInertia = vec3DToBtVector(as3_inertia);
    else if (isDynamic)
        shape->calculateLocalInertia((btScalar)mass, localInertia);
    
//    btMotionState* a3dMotionState = new Away3DMotionState(as3_skin);
    btMotionState* defaultMS = new btDefaultMotionState();
    btRigidBody::btRigidBodyConstructionInfo rbInfo((btScalar)mass, defaultMS, shape, localInertia);
    btRigidBody* body = new btRigidBody(rbInfo);
    
    FREObject ptr;
    FRENewObjectFromUint32((uint32_t)body, &ptr);
    return ptr;
}
示例#5
0
    //start screen class
    FREObject LeapNative_getScreenDistanceToPoint(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
        leapnative::LNLeapDevice* device;
        FREGetContextNativeData(ctx, (void **) &device);

        int screenId;
        double pX;
        double pY;
        double pZ;
        FREGetObjectAsInt32(argv[0], &screenId);
        FREGetObjectAsDouble(argv[1], &pX);
        FREGetObjectAsDouble(argv[2], &pY);
        FREGetObjectAsDouble(argv[3], &pZ);
        
        Vector point = Vector((float) pX, (float) pY, (float) pZ);

        return device->getScreenDistanceToPoint(screenId, point);
    }
示例#6
0
FREObject exposureAtPoint(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
    int32_t id;
    double x, y;
    FREGetObjectAsInt32(argv[0], &id);
    
    FREGetObjectAsDouble(argv[1], &x);
    FREGetObjectAsDouble(argv[2], &y);
    
    CCapture *cap;
    cap = active_cams[id];
    
    if(cap)
    {
        captureExposureAtPoint(cap, (float)x, (float)y);
    }
    return NULL;
}
示例#7
0
FREObject focusAtPoint(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
    int32_t _id;
    double _x, _y;
    FREGetObjectAsInt32(argv[0], &_id);
    
    FREGetObjectAsDouble(argv[1], &_x);
    FREGetObjectAsDouble(argv[2], &_y);
    
    CCapture* cap;
    cap = active_cams[_id];
    
    if(cap)
    {
        captureFocusAtPoint(cap, (float)_x, (float)_y);
    }
    return NULL;
}
 FREObject LeapNative_imageWarp(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
     leapnative::LNLeapDevice* device;
     FREGetContextNativeData(ctx, (void **) &device);
     
     int imageId;
     FREGetObjectAsInt32(argv[0], &imageId);
     
     double pX;
     double pY;
     double pZ;
     FREGetObjectAsDouble(argv[1], &pX);
     FREGetObjectAsDouble(argv[2], &pY);
     FREGetObjectAsDouble(argv[3], &pZ);
     
     Vector xy = Vector((float) pX, (float) pY, (float) pZ);
     
     return device->imageWarp(imageId, xy);
 }
extern "C" FREObject RigidBodysetAngularDamping(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[])
{
    FREObject as3_body = argv[0];
    FREObject as3_damping = argv[1];
    btRigidBody* body;
    double damping;
    
    FREGetObjectAsUint32(as3_body, (uint32_t*)&body);
    FREGetObjectAsDouble(as3_damping, &damping);
    body->setDamping(body->getLinearDamping(), btScalar(damping));
    return NULL;
}
示例#10
0
 FREObject LeapNative_getClosestScreenHit(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
     leapnative::LNLeapDevice* device;
     FREGetContextNativeData(ctx, (void **) &device);
     
     double pX;
     FREGetObjectAsDouble(argv[0], &pX);
     
     double pY;
     FREGetObjectAsDouble(argv[1], &pY);
     
     double pZ;
     FREGetObjectAsDouble(argv[2], &pZ);
     
     double dX;
     FREGetObjectAsDouble(argv[3], &dX);
     
     double dY;
     FREGetObjectAsDouble(argv[4], &dY);
     
     double dZ;
     FREGetObjectAsDouble(argv[5], &dZ);
     
     Vector position = Vector((float) pX, (float) pY, (float) pZ);
     Vector direction = Vector((float) dX, (float) dY, (float) dZ);
     
     return device->getClosestScreenHit(position, direction);
 }
示例#11
0
 FREObject LeapNative_setConfigFloat(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
     leapnative::LNLeapDevice* device;
     FREGetContextNativeData(ctx, (void **) &device);
     
     uint32_t len;
     const uint8_t* key = 0;
     FREGetObjectAsUTF8(argv[0], &len, &key);
     
     double value;
     FREGetObjectAsDouble(argv[1], &value);
     
     return device->setConfigFloat(len, key, (float)value);
 }
 virtual void getWorldTransform(btTransform &worldTrans) const {
     FREObject trans, raw;
     FREGetObjectProperty(skin, (uint8_t*)"transform", &trans, NULL);
     FREGetObjectProperty(trans, (uint8_t*)"rawData", &raw, NULL);
     
     btScalar data[16];
     for (int i=0; i < 16; i++) {
         FREObject val;
         double dval;
         FREGetArrayElementAt(raw, i, &val);
         FREGetObjectAsDouble(val, &dval);
         data[i] = btScalar(dval);
     }
     worldTrans.setFromOpenGLMatrix(data);
 }
示例#13
0
extern "C" FREObject RigidBodysetMassProps(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[])
{
    FREObject as3_body = argv[0];
    FREObject as3_mass = argv[1];
    FREObject as3_intertia = argv[2];
    btRigidBody* body;
    double mass;
    
    FREGetObjectAsUint32(as3_body, (uint32_t*)&body);
    FREGetObjectAsDouble(as3_mass, &mass);
    btVector3 inertia;
    if (as3_intertia) {
        inertia = vec3DToBtVector(as3_intertia);
    } else if (mass == 0.0) {
        inertia = btVector3(0,0,0);
    } else {
        body->getCollisionShape()->calculateLocalInertia(btScalar(mass), inertia);
    }
    body->setMassProps(btScalar(mass), inertia);
    body->updateInertiaTensor();
    return NULL;
}
示例#14
0
FREObject KinectDevice::freSetPointCloudRegions(FREObject argv[])
{
	FREObject asPointCloudRegions = argv[1];
    FREObject asPointCloudRegion, asRegionId, asX, asY, asZ, asWidth, asHeight, asDepth;
    unsigned int regionId;
    double x, y, z, width, height, depth;
    
    uint32_t freNumRegions;
    FREGetArrayLength(asPointCloudRegions, &freNumRegions);
    
    PointCloudRegion *nativeRegions = new PointCloudRegion[freNumRegions];
    
    for(unsigned int i = 0; i < freNumRegions; i++)
    {
        FREGetArrayElementAt(asPointCloudRegions, i, &asPointCloudRegion);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "regionId", &asRegionId, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "x", &asX, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "y", &asY, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "z", &asZ, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "width", &asWidth, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "height", &asHeight, NULL);
        FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "depth", &asDepth, NULL);
        FREGetObjectAsUint32(asRegionId, &regionId);
        FREGetObjectAsDouble(asX, &x);
        FREGetObjectAsDouble(asY, &y);
        FREGetObjectAsDouble(asZ, &z);
        FREGetObjectAsDouble(asWidth, &width);
        FREGetObjectAsDouble(asHeight, &height);
        FREGetObjectAsDouble(asDepth, &depth);
        PointCloudRegion *nativeRegion = new PointCloudRegion();
        nativeRegion->setProperties(regionId, x, y, z, width, height, depth);
        nativeRegions[i] = *nativeRegion;
    }
    
    this->pointCloudRegions = nativeRegions;
    this->numRegions = freNumRegions;
    
    return NULL;
}
示例#15
0
double getDoubleFromFREObject(FREObject arg) {
	double result = 0.0;
	FREGetObjectAsDouble(arg, &result);
	return result;
}
示例#16
0
bool FREGetDouble(FREObject object, double* val) {
	return (FREGetObjectAsDouble(object, val) == FRE_OK);
}