21 #include <Inventor/nodes/SoVertexProperty.h>
25 class SoVertexProperty;
31 namespace PCLInventorTools {
44 dstVal->setValue(data[0], data[1]);
55 dstVal->setValue(0.f, 0.f);
65 dstVal->setValue(data, data);
80 dstVal->setValue(data[0], data[1], data[2]);
91 dstVal->setValue(0.f, 0.f, 0.f);
101 dstVal->setValue(data, data, data);
119 *dstVal = (byteVal | (byteVal << 8) | (byteVal << 16) | (byteVal << 24));
130 *dstVal = ((
static_cast<MLuint32>(data[3]) ) |
131 (
static_cast<MLuint32>(data[2]) << 8) |
132 (
static_cast<MLuint32>(data[1]) << 16) |
133 (
static_cast<MLuint32>(data[0]) << 24) );
141 *dstVal = ( (( (*rgbaVal) >> 24) & 0x000000ff) |
142 (( (*rgbaVal) >> 8) & 0x0000ff00) |
143 (( (*rgbaVal) << 8) & 0x00ff0000) |
144 (( (*rgbaVal) << 24) & 0xff000000) );
153 #if defined(_MSC_VER) && !defined(_WIN64) && ((_MSC_VER == 1600) || (_MSC_VER == 1900))
154 #define SpecializedPCLPointXYZ EIGEN_WORKAROUND_MSVC_STL_SUPPORT(pcl::PointXYZ)
156 #define SpecializedPCLPointXYZ pcl::PointXYZ
163 template <
typename DST_VAL_TYPE>
166 const float zeroData_n[4] = {0.f, 0.f, 0.f, 0.f};
173 template <
typename POINT_TYPE,
typename DST_VAL_TYPE>
182 template <
typename DST_VAL_TYPE>
192 template <
typename POINT_TYPE,
typename DST_VAL_TYPE>
197 dstVal[1] += dstVal[0];
254 template <
typename POINT_CLOUD_TYPE,
typename SM_MF_VEC_FIELD_TYPE>
256 SM_MF_VEC_FIELD_TYPE &mfvecField,
258 bool duplicateColors=
false,
259 bool mapToRainbow=
false,
260 bool useCurvatureForColor=
false,
261 bool scaleFromInputRange=
false,
262 float inRangeMin=0.f,
263 float inRangeMax=1.f)
266 if (!scaleFromInputRange){
271 const float scaleWidth = fabs(inRangeMax-inRangeMin) < 10e-6f ? 10e-6f : inRangeMax-inRangeMin;
272 const float scaleWidthInv = 1.f/scaleWidth;
275 const size_t numPoints = pointCloud.points.size();
277 const unsigned int numPointsAsUInt = mlrange_cast<unsigned int>(numPoints);
280 mfvecField.setNum(mlrange_cast<int>(numPoints));
283 auto dataPtr = mfvecField.startEditing();
285 for (
unsigned int c=0; c < numPointsAsUInt; ++c){
289 mfvecField.finishEditing();
294 mfvecField.setNum(mlrange_cast<int>(numPoints * (duplicateColors ? 2u:1u)));
295 auto dataPtr = mfvecField.startEditing();
297 for (
unsigned int c=0; c < numPointsAsUInt; ++c){
300 if (duplicateColors){
308 mfvecField.finishEditing();
314 mfvecField.setNum(mlrange_cast<int>(numPoints * (duplicateColors ? 2u:1u)));
315 auto dataPtr = mfvecField.startEditing();
318 float data[4]={0,0,0,255.9f};
323 const bool allChannelsAreTheSame = isRGBAAssignment && !useCurvatureForColor && !mapToRainbow;
325 float curvatureVal = 0.f;
326 for (
unsigned int c=0; c < numPointsAsUInt; ++c){
328 if (dataVal < inRangeMin){ dataVal = inRangeMin; }
329 else if (dataVal > inRangeMax){ dataVal = inRangeMax; }
330 if (scaleFromInputRange){
331 dataVal = (dataVal-inRangeMin)*scaleWidthInv;
334 if (!allChannelsAreTheSame){
336 float intensityVal = dataVal;
337 float alphaVal = dataVal;
340 if (useCurvatureForColor){
343 if (curvatureVal < inRangeMin){ curvatureVal = inRangeMin; }
344 else if (curvatureVal > inRangeMax){ curvatureVal = inRangeMax; }
345 if (scaleFromInputRange){
346 curvatureVal = (curvatureVal-inRangeMin)*scaleWidthInv;
348 intensityVal = curvatureVal;
353 float retRGB[3]={0.f, 0.f, 0.f};
355 data[0] = retRGB[0]*255.999f;
356 data[1] = retRGB[1]*255.999f;
357 data[2] = retRGB[2]*255.999f;
361 data[0] = data[1] = data[2] = intensityVal*255.999f;
364 if (isRGBAAssignment){
366 data[3] = alphaVal*255.999f;
372 if (duplicateColors){
383 if (duplicateColors){
392 mfvecField.finishEditing();
397 mfvecField.setNum(mlrange_cast<int>(numPoints*2u));
398 auto dataPtr = mfvecField.startEditing();
399 for (
unsigned int c=0; c < numPointsAsUInt; ++c){
403 mfvecField.finishEditing();
408 "Bad enumerator value passed. Not setting any MField values.");
413 "Inventor cannot handle field sets with more than ML_INT32_MAX points which, "
414 "however, are required for the current input data conversion. Not setting the MField values.");
417 mfvecField.deleteValues(0);
419 return isSet ? numPoints : 0u;
432 SoMFInt32 &mfIntField,
433 bool terminateWithMinusOne);
Disables warnings from PCL headers which otherwise cannot be avoided.
Restores disabled warnings from PCL headers which otherwise cannot be avoided.
#define ML_BAD_PARAMETER
A bad/invalid parameter (or even an inappropriate image) has been passed to a module or an algorithm;...
#define ML_PRINT_ERROR(FUNC_NAME, REASON, HANDLING)
Like ML_PRINT_ERROR_DUMP(FUNC_NAME, REASON, HANDLING, RT_OBJ) without a runtime object to be dumped.
Basic types used in the MeVislab binding of the Point Cloud Library(PCL).