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; }
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()); }