diff --git a/include/GrainsAsEllipsoids.h b/include/GrainsAsEllipsoids.h
index 5029a9a..4a5d65f 100644
--- a/include/GrainsAsEllipsoids.h
+++ b/include/GrainsAsEllipsoids.h
@@ -33,7 +33,7 @@ public:
void setGrainColorsTable(const RGBAColorsTableType& colorTable);
- void exportResultsAsCloud();
+ bool exportResultsAsCloud();
// INIT SPHERE
diff --git a/src/ActionA.cpp b/src/ActionA.cpp
index b425774..e139f45 100644
--- a/src/ActionA.cpp
+++ b/src/ActionA.cpp
@@ -72,8 +72,8 @@ void G3PointAction::GetG3PointAction(ccPointCloud *cloud, ccMainAppInterface *ap
s_g3PointAction->init();
// do actions immediately for debug
- s_g3PointAction->segment();
- s_g3PointAction->fit();
+ // s_g3PointAction->segment();
+ // s_g3PointAction->fit();
}
RGBAColorsTableType getRandomColors(int randomColorsNumber)
@@ -615,6 +615,7 @@ bool G3PointAction::exportLocalMaximaAsCloud()
parent->addChild(cloud, ccHObject::DP_PARENT_OF_OTHER, 0);
m_app->addToDB(cloud);
+ cloud->setEnabled(false);
return true;
}
@@ -982,7 +983,6 @@ void G3PointAction::fit()
m_dlg->emitSignals(); // force to send parameters to m_grainsAsEllipsoids
m_cloud->getParent()->addChild(m_grainsAsEllipsoids);
- m_app->addToDB(m_grainsAsEllipsoids);
m_app->updateUI();
}
diff --git a/src/GrainsAsEllipsoids.cpp b/src/GrainsAsEllipsoids.cpp
index 7a6a1c4..7faf7ce 100644
--- a/src/GrainsAsEllipsoids.cpp
+++ b/src/GrainsAsEllipsoids.cpp
@@ -78,7 +78,7 @@ void GrainsAsEllipsoids::setGrainColorsTable(const RGBAColorsTableType& colorTab
}
}
-void GrainsAsEllipsoids::exportResultsAsCloud()
+bool GrainsAsEllipsoids::exportResultsAsCloud()
{
// create cloud
// QString cloudName = m_cloud->getName() + "_g3point";
@@ -87,13 +87,8 @@ void GrainsAsEllipsoids::exportResultsAsCloud()
for (int idx = 0; idx < m_center.size(); idx++)
{
- // get the rotation matrix of the grain
- Eigen::Matrix3f rotation(m_rotationMatrix[idx].transpose());
- // get the center of the grain
Eigen::Vector3f center {m_center[idx].x(), m_center[idx].y(), m_center[idx].z()};
- // get the axis of the grain
- Eigen::Vector3f uz {0, 0, 1};
- Eigen::Vector3f point = center + rotation * uz;
+ Eigen::Vector3f point = center;
CCVector3 ccPoint(point(0), point(1), point(2));
cloud->addPoint(ccPoint);
}
@@ -103,15 +98,104 @@ void GrainsAsEllipsoids::exportResultsAsCloud()
{
for (int index = 0; index < cloud->size(); index++)
{
- ccColor::Rgb color(m_grainColors[index].x * ccColor::MAX,
- m_grainColors[index].y * ccColor::MAX,
- m_grainColors[index].z * ccColor::MAX);
+ ccColor::Rgb color(m_grainColors[index].x * ccColor::MAX * 0.8,
+ m_grainColors[index].y * ccColor::MAX * 0.8,
+ m_grainColors[index].z * ccColor::MAX * 0.8);
cloud->setPointColor(index, color);
}
}
+ int sfIdx;
+ CCCoreLib::ScalarField* sf;
+
+ // EXPORT g3point_index
+ sfIdx = cloud->addScalarField("g3point_index");
+ if (sfIdx == -1)
+ {
+ ccLog::Error("[GrainsAsEllipsoids::exportResultsAsCloud] impossible to allocate g3point_index scalar field");
+ return false;
+ }
+ sf = cloud->getScalarField(sfIdx);
+ for (int index = 0; index < cloud->size(); index++)
+ {
+ sf->setValue(index, index);
+ }
+ sf->computeMinAndMax();
+
+ //
+ int sfIdxRadiusX = cloud->addScalarField("g3point_radius_x");
+ int sfIdxRadiusY = cloud->addScalarField("g3point_radius_y");
+ int sfIdxRadiusZ = cloud->addScalarField("g3point_radius_z");
+ if (sfIdxRadiusX == -1 || sfIdxRadiusY == -1 || sfIdxRadiusZ == -1)
+ {
+ ccLog::Error("[GrainsAsEllipsoids::exportResultsAsCloud] impossible to allocate scalar fields to export the radii");
+ return false;
+ }
+ CCCoreLib::ScalarField* sfRadiusX = cloud->getScalarField(sfIdxRadiusX);
+ CCCoreLib::ScalarField* sfRadiusY = cloud->getScalarField(sfIdxRadiusY);
+ CCCoreLib::ScalarField* sfRadiusZ = cloud->getScalarField(sfIdxRadiusZ);
+ for (int index = 0; index < cloud->size(); index++)
+ {
+ sfRadiusX->setValue(index, m_radii[index].x());
+ sfRadiusY->setValue(index, m_radii[index].y());
+ sfRadiusZ->setValue(index, m_radii[index].z());
+ }
+ sfRadiusX->computeMinAndMax();
+ sfRadiusY->computeMinAndMax();
+ sfRadiusZ->computeMinAndMax();
+ //
+
+ //
+ int sfIdxR00 = cloud->addScalarField("g3point_r00");
+ int sfIdxR01 = cloud->addScalarField("g3point_r01");
+ int sfIdxR02 = cloud->addScalarField("g3point_r02");
+ int sfIdxR10 = cloud->addScalarField("g3point_r10");
+ int sfIdxR11 = cloud->addScalarField("g3point_r11");
+ int sfIdxR21 = cloud->addScalarField("g3point_r12");
+ int sfIdxR20 = cloud->addScalarField("g3point_r20");
+ int sfIdxR12 = cloud->addScalarField("g3point_r21");
+ int sfIdxR22 = cloud->addScalarField("g3point_r22");
+ if (sfIdxR00 == -1 || sfIdxR01 == -1 || sfIdxR02 == -1
+ || sfIdxR10 == -1 || sfIdxR11 == -1 || sfIdxR12 == -1
+ || sfIdxR20 == -1 || sfIdxR21 == -1 || sfIdxR22 == -1)
+ {
+ ccLog::Error("[GrainsAsEllipsoids::exportResultsAsCloud] impossible to allocate scalar fields to export the rotation");
+ return false;
+ }
+ CCCoreLib::ScalarField* sfR00 = cloud->getScalarField(sfIdxR00);
+ CCCoreLib::ScalarField* sfR01 = cloud->getScalarField(sfIdxR01);
+ CCCoreLib::ScalarField* sfR02 = cloud->getScalarField(sfIdxR02);
+ CCCoreLib::ScalarField* sfR10 = cloud->getScalarField(sfIdxR10);
+ CCCoreLib::ScalarField* sfR11 = cloud->getScalarField(sfIdxR11);
+ CCCoreLib::ScalarField* sfR12 = cloud->getScalarField(sfIdxR12);
+ CCCoreLib::ScalarField* sfR20 = cloud->getScalarField(sfIdxR20);
+ CCCoreLib::ScalarField* sfR21 = cloud->getScalarField(sfIdxR21);
+ CCCoreLib::ScalarField* sfR22 = cloud->getScalarField(sfIdxR22);
+ for (unsigned int index = 0; index < cloud->size(); index++)
+ {
+ sfR00->setValue(index, m_rotationMatrix[index](0, 0));
+ sfR01->setValue(index, m_rotationMatrix[index](0, 1));
+ sfR02->setValue(index, m_rotationMatrix[index](0, 2));
+ sfR10->setValue(index, m_rotationMatrix[index](1, 0));
+ sfR11->setValue(index, m_rotationMatrix[index](1, 1));
+ sfR12->setValue(index, m_rotationMatrix[index](1, 2));
+ sfR20->setValue(index, m_rotationMatrix[index](2, 0));
+ sfR21->setValue(index, m_rotationMatrix[index](2, 1));
+ sfR22->setValue(index, m_rotationMatrix[index](2, 2));
+ }
+ sfR00->computeMinAndMax();
+ sfR01->computeMinAndMax();
+ sfR02->computeMinAndMax();
+ sfR10->computeMinAndMax();
+ sfR11->computeMinAndMax();
+ sfR12->computeMinAndMax();
+ sfR20->computeMinAndMax();
+ sfR21->computeMinAndMax();
+ sfR22->computeMinAndMax();
+ //
+
cloud->showColors(true);
- cloud->setPointSize(5);
+ cloud->setPointSize(9);
ccHObject* parent = m_cloud->getParent();
int nbChildren = parent->getChildrenNumber();
@@ -132,6 +216,8 @@ void GrainsAsEllipsoids::exportResultsAsCloud()
parent->addChild(cloud, ccHObject::DP_PARENT_OF_OTHER, 0);
m_app->addToDB(cloud);
+
+ return true;
}
// INIT ORIGINAL SPHERE
diff --git a/ui/qG3PointDialog.ui b/ui/qG3PointDialog.ui
index 3d3e4c2..3a4f81a 100644
--- a/ui/qG3PointDialog.ui
+++ b/ui/qG3PointDialog.ui
@@ -17,7 +17,7 @@
-
- 1
+ 0