FREObject KinectDevice::freSetRGBMode(FREObject argv[]) { unsigned int width; FREGetObjectAsUint32(argv[1], &width); unsigned int height; FREGetObjectAsUint32(argv[2], &height); lockRGBMutex(); setRGBMode(rgbImageBytesGenerator->getSourceWidth(), rgbImageBytesGenerator->getSourceHeight(), width, height, createBoolFromFREObject(argv[3])); unlockRGBMutex(); return NULL; }
extern "C" FREObject RigidBodyremoveConstraintRef(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[]) { FREObject as3_body = argv[0]; FREObject as3_constraint = argv[1]; btRigidBody* body; btTypedConstraint* constraint; FREGetObjectAsUint32(as3_body, (uint32_t*)&body); FREGetObjectAsUint32(as3_constraint, (uint32_t*)&constraint); body->removeConstraintRef(constraint); return NULL; }
FREObject KinectDevice::freSetInfraredMode(FREObject argv[]) { unsigned int width; FREGetObjectAsUint32(argv[1], &width); unsigned int height; FREGetObjectAsUint32(argv[2], &height); lockInfraredMutex(); infraredImageBytesGenerator->setTargetSize(width, height); infraredImageBytesGenerator->setTargetMirrored(createBoolFromFREObject(argv[3])); unlockInfraredMutex(); return NULL; }
extern "C" FREObject RigidBodygetConstraintRef(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[]) { FREObject as3_body = argv[0]; FREObject as3_index = argv[1]; btRigidBody* body; uint32_t index; FREGetObjectAsUint32(as3_body, (uint32_t*)&body); FREGetObjectAsUint32(as3_index, &index); btTypedConstraint* ref = body->getConstraintRef(index); FREObject as3ref; FRENewObjectFromUint32((uint32_t)ref, &as3ref); return as3ref; }
FREObject FlyCapture2_startCamera(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ FREObject retObj; unsigned int nr; FREGetObjectAsUint32(argv[0], &nr); fc2Manager.startCamera(nr); return NULL; }
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; }
FREObject FlyCapture2_getCameraInfo(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ FREObject retObj; unsigned int nr; FREGetObjectAsUint32(argv[0], &nr); retObj = fc2Manager.getCameraInfo(nr); return retObj; }
bool FREGetUint32(FREObject object, uint32* val) { // really, Adobe ...? #ifdef LINUX return (FREGetObjectAsUInt32(object, val) == FRE_OK); #else return (FREGetObjectAsUint32(object, val) == FRE_OK); #endif }
FREObject KinectDevice::freSetPointCloudMode(FREObject argv[]) { lockPointCloudMutex(); unsigned int width; FREGetObjectAsUint32(argv[1], &width); unsigned int height; FREGetObjectAsUint32(argv[2], &height); unsigned int density; FREGetObjectAsUint32(argv[4], &density); pointCloudGenerator->setTargetSize(width, height); pointCloudGenerator->setTargetDensity(density); pointCloudGenerator->setIncludeRGB(createBoolFromFREObject(argv[5])); pointCloudGenerator->setTargetMirrored(createBoolFromFREObject(argv[3])); unlockPointCloudMutex(); return NULL; }
//start policy FREObject LeapNative_setPolicyFlags(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { leapnative::LNLeapDevice* device; FREGetContextNativeData(ctx, (void **) &device); uint32_t flags; FREGetObjectAsUint32(argv[0], &flags); return device->setPolicyFlags(flags); }
FREObject KinectDevice::freGetPointCloudFrame(FREObject argv[]) { FREObject objectPointsByteArray = argv[1]; const unsigned int numPointBytes = pointCloudGenerator->getByteArrayLength() * sizeof(short); if(numPointBytes == 0) return NULL; lockPointCloudMutex(); FREByteArray pointsByteArray; FREObject pointsLength; FRENewObjectFromUint32(numPointBytes, &pointsLength); FRESetObjectProperty(objectPointsByteArray, (const uint8_t*) "length", pointsLength, NULL); FREAcquireByteArray(objectPointsByteArray, &pointsByteArray); memcpy(pointsByteArray.bytes, pointCloudGenerator->getTargetBytes(), numPointBytes); FREReleaseByteArray(objectPointsByteArray); //set the region information? FREObject asPointCloudRegions = argv[2]; if(asPointCloudRegions != NULL && &pointCloudRegions != 0) { //loop through these actionscript regions and get the native info back FREObject asPointCloudRegion, asRegionId; FREObject asNumPoints; unsigned int regionId; uint32_t freNumRegions; FREGetArrayLength(asPointCloudRegions, &freNumRegions); for(unsigned int i = 0; i < freNumRegions; i++) { FREGetArrayElementAt(asPointCloudRegions, i, &asPointCloudRegion); FREGetObjectProperty(asPointCloudRegion, (const uint8_t *) "regionId", &asRegionId, NULL); FREGetObjectAsUint32(asRegionId, ®ionId); //get the region with this id from the device memory for(unsigned int j = 0; j < numRegions; j++) { PointCloudRegion *nativeRegion = &pointCloudRegions[j]; if(nativeRegion->regionId == regionId) { //update the actionscript properties FRENewObjectFromUint32(nativeRegion->numPoints, &asNumPoints); FRESetObjectProperty(asPointCloudRegion, (const uint8_t *) "numPoints", asNumPoints, NULL); break; } } } } unlockPointCloudMutex(); return NULL; }
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; }
extern "C" FREObject RigidBodygetNumConstraintRefs(FREContext ctx, void *funcData, uint32_t argc, FREObject argv[]) { FREObject as3_body = argv[0]; btRigidBody* body; FREGetObjectAsUint32(as3_body, (uint32_t*)&body); uint32_t num = body->getNumConstraintRefs(); FREObject as3num; FRENewObjectFromUint32(num, &as3num); return as3num; }
FREObject KinectDevice::freGetUserMaskFrame(FREObject argv[]) { unsigned int trackingID; FREGetObjectAsUint32(argv[1], &trackingID); if(trackingID > 0) trackingID--; const unsigned int numUserMaskBytes = userMasksGenerator->getTargetPixelCount() * 4; FREObject objectByteArray = argv[2]; FREByteArray byteArray; FREObject length; FRENewObjectFromUint32(numUserMaskBytes, &length); FRESetObjectProperty(objectByteArray, (const uint8_t*) "length", length, NULL); FREAcquireByteArray(objectByteArray, &byteArray); lockUserMaskMutex(); memcpy(byteArray.bytes, userMasksGenerator->getTargetBytes()[trackingID], numUserMaskBytes); unlockUserMaskMutex(); FREReleaseByteArray(objectByteArray); return NULL; }
FREObject sendByte(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { FREObject result; uint32_t dataToSend; int sendResult = 0; FREGetObjectAsUint32(argv[0], &dataToSend); sendResult = SendByte(comPort, (unsigned char)dataToSend); if (sendResult == -1) { FRENewObjectFromBool(0, &result); } else { FRENewObjectFromBool(1, &result); } return result; }
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, ®ionId); 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; }
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; }
uint32_t getUInt32FromFREObject(FREObject uintAS) { uint32_t result = 0; FREGetObjectAsUint32(uintAS, &result); return result; }