start of wolman implementation
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user