start of wolman implementation

This commit is contained in:
Paul Leroy
2025-01-29 23:43:04 +01:00
parent ed3f3e1707
commit 1324735722
5 changed files with 69 additions and 4 deletions
+1
View File
@@ -35,6 +35,7 @@ public:
bool cluster();
void fit();
void exportResults();
void wolman();
bool processNewStacks(std::vector<std::vector<int>>& newStacks, int pointCount);
bool merge(XXb& condition);
bool keep(Xb& condition);
+2
View File
@@ -28,6 +28,7 @@ public:
void emitOnlyOneChanged(int idx){emit onlyOneChanged(idx);}
void emitFit(){emit fit();}
void emitExportResults(){emit exportResults();}
void emitWolman(){emit wolman();}
void emitTransparencyChanged(double transparency){emit transparencyChanged(transparency);}
void emitDrawSurfaces(bool state){emit drawSurfaces(state);}
void emitDrawLines(bool state){emit drawLines(state);}
@@ -58,6 +59,7 @@ signals:
void getBorders();
void fit();
void exportResults();
void wolman();
void allClicked(bool state);
void onlyOneClicked(bool state);
+55 -1
View File
@@ -974,13 +974,66 @@ void G3PointAction::fit()
}
void G3PointAction::exportResults()
{
{
if (m_grainsAsEllipsoids)
{
m_grainsAsEllipsoids->exportResultsAsCloud();
}
}
Eigen::VectorXf arange(double start, double stop, double step)
{
// Values are generated within the half-open interval [0, stop)
double range = (stop - start);
int n_steps = floor(range / step) + 1;
return Eigen::VectorXf(n_steps);
}
void G3PointAction::wolman()
{
int n_iter = 100;
Eigen::VectorXf x_grid;
Eigen::VectorXf y_grid;
// rebuild a matrix with the coordinates of the centers of the grains
int n_grains = m_grainsAsEllipsoids->m_center.size();
Eigen::VectorXf b_axis(n_grains);
Eigen::VectorXi labels_ellipsoids(n_grains);
for (int i = 0; i < n_grains; i++)
{
b_axis(i) = 2 * m_grainsAsEllipsoids->m_radii[i].y(); // files are in radius, we need diameters
labels_ellipsoids(i) = i;
}
int n_points = m_grainsAsEllipsoids->m_cloud->size();
Eigen::VectorXf x(n_points);
Eigen::VectorXf y(n_points);
Eigen::VectorXf z(n_points);
Eigen::VectorXi labels_grains(n_points);
for (int i = 0; i < n_points; i++)
{
const CCVector3* P = m_grainsAsEllipsoids->m_cloud->getPoint(i);
x(i) = P->x;
y(i) = P->y;
z(i) = P->z;
}
float dx = 1.1 * b_axis.maxCoeff();
for (int k = 0; k < n_iter; k++)
{
float r1 = (float) rand()/RAND_MAX;
float r2 = (float) rand()/RAND_MAX;
float dx =
Eigen::VectorXf x_grid = arange(x.minCoeff(), x.maxCoeff(), dx);
std::cout << "r1 " << r1 << ", r2 " << r2 << std::endl;
}
}
bool G3PointAction::cleanLabels()
{
ccLog::Print("[cleanLabels]");
@@ -1611,6 +1664,7 @@ void G3PointAction::showDlg()
connect(m_dlg, &G3PointDialog::fit, s_g3PointAction, &G3Point::G3PointAction::fit);
connect(m_dlg, &G3PointDialog::exportResults, s_g3PointAction, &G3Point::G3PointAction::exportResults);
connect(m_dlg, &G3PointDialog::wolman, s_g3PointAction, &G3Point::G3PointAction::wolman);
connect(m_dlg, &QDialog::finished, s_g3PointAction, &G3Point::G3PointAction::clean);
connect(m_dlg, &QDialog::finished, s_g3PointAction, &G3Point::G3PointAction::resetDlg); // dialog is defined with Qt::WA_DeleteOnClose
+1
View File
@@ -25,6 +25,7 @@ G3PointDialog::G3PointDialog(QString cloudName, QWidget *parent)
connect(this->ui->pushButtonFit, &QPushButton::clicked, this, &G3PointDialog::emitFit);
connect(this->ui->pushButtonExportResults, &QPushButton::clicked, this, &G3PointDialog::emitExportResults);
connect(this->ui->pushButtonWolman, &QPushButton::clicked, this, &G3PointDialog::emitWolman);
connect(this->ui->checkBoxSurfaces, &QCheckBox::clicked, this, &G3PointDialog::emitDrawSurfaces);
connect(this->ui->checkBoxWireframes, &QCheckBox::clicked, this, &::G3PointDialog::emitDrawLines);
connect(this->ui->checkBoxPoints, &QCheckBox::clicked, this, &G3PointDialog::emitDrawPoints);
+10 -3
View File
@@ -99,7 +99,7 @@
<bool>true</bool>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::UpDownArrows</enum>
<enum>QAbstractSpinBox::ButtonSymbols::UpDownArrows</enum>
</property>
<property name="maximum">
<double>360.000000000000000</double>
@@ -353,10 +353,17 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonWolman">
<property name="text">
<string>Wolman</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -397,7 +404,7 @@
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>