Beispiel #1
0
bool FacetOperator::open(QueryEvaluatorInternal * queryEvaluatorInternal, PhysicalPlanExecutionParameters & params){

	ASSERT(this->getPhysicalPlanOptimizationNode()->getChildrenCount() == 1);

	// first prepare internal structures based on the input
    preFilter(this->queryEvaluatorInternal);

    this->getPhysicalPlanOptimizationNode()->getChildAt(0)->getExecutableNode()->open(this->queryEvaluatorInternal,params);
    return true;
}
Beispiel #2
0
PCPtr getCloudWithoutMutex(const ofVec3f& min, const ofVec3f& max, int stride)
{
	if (min.x < 0 || min.y < 0
		|| max.x > KINECT_DEFAULT_WIDTH || max.y > KINECT_DEFAULT_HEIGHT
		|| min.x > max.x || min.y > max.y)
	{
		PCL_ERROR ("Wrong arguments to obtain the cloud\n");
		return PCPtr(new PC());
	}

	float voxelSize = mapinect::Constants::CLOUD_VOXEL_SIZE;
	if(mapinect::IsFeatureUniformDensityActive())
	{
		voxelSize = mapinect::Constants::CLOUD_VOXEL_SIZE_FOR_STRIDE(stride);
		stride = 1;
	}
	const int minStride = ::min(mapinect::Constants::CLOUD_STRIDE_H, mapinect::Constants::CLOUD_STRIDE_V);
	const int hStride = stride + mapinect::Constants::CLOUD_STRIDE_H - 1;
	const int vStride = stride + mapinect::Constants::CLOUD_STRIDE_V - 1;

	// Allocate space for max points available
	PCPtr partialCloud(new PC());
	partialCloud->width    = ceil((max.x - min.x) / hStride);
	partialCloud->height   = ceil((max.y - min.y) / vStride);
	partialCloud->is_dense = false;
	partialCloud->points.resize(partialCloud->width * partialCloud->height);
	register float* depthMap = gKinect->getDistancePixels();
	// Iterate over the image's rectangle with step = stride
	register int depthIndex = 0;
	int cloudIndex = 0;
	for(int v = min.y; v < max.y; v += vStride) {
		for(register int u = min.x; u < max.x; u += hStride) {
			depthIndex = v * KINECT_DEFAULT_WIDTH + u;

			PCXYZ& pt = partialCloud->points[cloudIndex];
			cloudIndex++;

			// Check for invalid measures
			if(depthMap[depthIndex] == 0)
			{
				pt.x = pt.y = pt.z = 0;
			}
			else
			{
				ofVec3f pto = gKinect->getWorldCoordinateFor(u,v);

				if(pto.z > mapinect::Constants::CLOUD_Z_MAX)
				{
					pt.x = pt.y = pt.z = 0;
				}
				else
				{
					pt.x = pto.x;
					pt.y = pto.y;
					pt.z = pto.z;
				}
			}
		}
	}

	if(mapinect::IsFeatureUniformDensityActive())
	{
		PCPtr preFilter(new PC(*partialCloud));
		pcl::VoxelGrid<pcl::PointXYZ> sor;
		sor.setInputCloud (preFilter);
		sor.setLeafSize (voxelSize, voxelSize, voxelSize);
		sor.filter(*partialCloud);
	}

	return transformCloud(partialCloud, gTransformation->getWorldTransformation());
}