コード例 #1
0
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 ) );
  }
}
コード例 #2
0
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
}