void QgsExpression::initGeomCalculator( const QgsExpressionContext *context ) { // Set the geometry calculator from the context if it has not been set by setGeomCalculator() if ( context && ! d->mCalc ) { QString ellipsoid = context->variable( QStringLiteral( "project_ellipsoid" ) ).toString(); QgsCoordinateReferenceSystem crs = context->variable( QStringLiteral( "_layer_crs" ) ).value<QgsCoordinateReferenceSystem>(); QgsCoordinateTransformContext tContext = context->variable( QStringLiteral( "_project_transform_context" ) ).value<QgsCoordinateTransformContext>(); if ( crs.isValid() ) { d->mCalc = std::shared_ptr<QgsDistanceArea>( new QgsDistanceArea() ); d->mCalc->setEllipsoid( ellipsoid.isEmpty() ? GEO_NONE : ellipsoid ); d->mCalc->setSourceCrs( crs, tContext ); } } // Set the distance units from the context if it has not been set by setDistanceUnits() if ( context && distanceUnits() == QgsUnitTypes::DistanceUnknownUnit ) { QString distanceUnitsStr = context->variable( QStringLiteral( "project_distance_units" ) ).toString(); if ( ! distanceUnitsStr.isEmpty() ) setDistanceUnits( QgsUnitTypes::stringToDistanceUnit( distanceUnitsStr ) ); } // Set the area units from the context if it has not been set by setAreaUnits() if ( context && areaUnits() == QgsUnitTypes::AreaUnknownUnit ) { QString areaUnitsStr = context->variable( QStringLiteral( "project_area_units" ) ).toString(); if ( ! areaUnitsStr.isEmpty() ) setAreaUnits( QgsUnitTypes::stringToAreaUnit( areaUnitsStr ) ); } }
void OpenNIDevice::readUserTrackerFrame(shared_ptr<DepthFrame> depthFrame, shared_ptr<MaskFrame> maskFrame, shared_ptr<SkeletonFrame> skeletonFrame, shared_ptr<MetadataFrame> metadataFrame) { nite::UserTrackerFrameRef oniUserTrackerFrame; // Because readFrame method is a waiting read, if readUserTrackerFrame is invoked when // last frame has already been read, then return inmediately. if (m_device.isFile() && m_lastFrame >= this->getTotalFrames()) return; if (m_oniUserTracker.readFrame(&oniUserTrackerFrame) != nite::STATUS_OK) { throw 1; } if (!oniUserTrackerFrame.isValid()) { throw 2; } m_lastFrame = dai::max<int>(m_lastFrame, oniUserTrackerFrame.getFrameIndex()); // Depth Frame if (depthFrame) { m_oniDepthFrame = oniUserTrackerFrame.getDepthFrame(); int strideDepth = m_oniDepthFrame.getStrideInBytes() / sizeof(openni::DepthPixel) - m_oniDepthFrame.getWidth(); if (strideDepth > 0) { qWarning() << "WARNING: OpenNIDevice - Not managed depth stride!!!"; throw 3; } depthFrame->setDataPtr(640, 480, (uint16_t*) m_oniDepthFrame.getData()); depthFrame->setIndex(m_oniDepthFrame.getFrameIndex()); depthFrame->setDistanceUnits(dai::DISTANCE_MILIMETERS); } // Load User Labels (copy) if (maskFrame) { const nite::UserMap& userMap = oniUserTrackerFrame.getUserMap(); int strideUser = userMap.getStride() / sizeof(nite::UserId) - userMap.getWidth(); if (strideUser > 0) { qWarning() << "WARNING: OpenNIRuntime - Not managed user stride!!!"; throw 1; } const nite::UserId* pLabel = userMap.getPixels(); for (int i=0; i < userMap.getHeight(); ++i) { uint8_t* pMask = maskFrame->getRowPtr(i); for (int j=0; j < userMap.getWidth(); ++j) { pMask[j] = *pLabel; pLabel++; } } maskFrame->setIndex(oniUserTrackerFrame.getFrameIndex()); } // Registration if (m_manual_registration) { depth2color(depthFrame, maskFrame); } // Process Users if (skeletonFrame) { skeletonFrame->clear(); skeletonFrame->setIndex(oniUserTrackerFrame.getFrameIndex()); } if (metadataFrame) { metadataFrame->boundingBoxes().clear(); metadataFrame->setIndex(oniUserTrackerFrame.getFrameIndex()); } const nite::Array<nite::UserData>& users = oniUserTrackerFrame.getUsers(); for (int i=0; i<users.getSize(); ++i) { const nite::UserData& user = users[i]; if (user.isNew()) { m_oniUserTracker.startSkeletonTracking(user.getId()); } else if (user.isVisible()) { // Get Boundingbox if (metadataFrame) { const nite::BoundingBox niteBoundingBox = user.getBoundingBox(); const NitePoint3f bbMin = niteBoundingBox.min; const NitePoint3f bbMax = niteBoundingBox.max; dai::BoundingBox boundingBox(dai::Point3f(bbMin.x, bbMin.y, bbMin.z), dai::Point3f(bbMax.x, bbMax.y, bbMax.z)); metadataFrame->boundingBoxes().append(boundingBox); } // Get Skeleton if (skeletonFrame) { const nite::Skeleton& oniSkeleton = user.getSkeleton(); const nite::SkeletonJoint& head = user.getSkeleton().getJoint(nite::JOINT_HEAD); if (oniSkeleton.getState() == nite::SKELETON_TRACKED && head.getPositionConfidence() > 0.5) { auto daiSkeleton = skeletonFrame->getSkeleton(user.getId()); if (daiSkeleton == nullptr) { daiSkeleton = make_shared<dai::Skeleton>(dai::Skeleton::SKELETON_OPENNI); daiSkeleton->setDistanceUnits(dai::DISTANCE_MILIMETERS); skeletonFrame->setSkeleton(user.getId(), daiSkeleton); } OpenNIDevice::copySkeleton(oniSkeleton, *(daiSkeleton.get())); //daiSkeleton->computeQuaternions(); } } } else if (user.isLost()) { m_oniUserTracker.stopSkeletonTracking(user.getId()); } } // End for }