mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-30 01:00:32 +05:00
rnc:
- Fix of the contour correction mechanism - Added some debug tools - Call to FeatureDetector methods with nex parameters - Test of a segment detector
This commit is contained in:
parent
8873ba0d36
commit
9746242e57
@ -79,7 +79,8 @@
|
|||||||
// Constructors
|
// Constructors
|
||||||
enum{
|
enum{
|
||||||
CONTOURS,
|
CONTOURS,
|
||||||
CORNERS
|
CORNERS,
|
||||||
|
LINES
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -119,8 +120,8 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
|||||||
mainFrame()->RadioButton2->setText(tr("GEOM_CORNERS"));
|
mainFrame()->RadioButton2->setText(tr("GEOM_CORNERS"));
|
||||||
// mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
// mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
// mainFrame()->RadioButton2->close();
|
// mainFrame()->RadioButton2->close();
|
||||||
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
// mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
mainFrame()->RadioButton3->close();
|
// mainFrame()->RadioButton3->close();
|
||||||
|
|
||||||
// myViewGroup = new DlgRef_3Radio(centralWidget());
|
// myViewGroup = new DlgRef_3Radio(centralWidget());
|
||||||
// myViewGroup->GroupBox1->setTitle(tr("GEOM_VIEW"));
|
// myViewGroup->GroupBox1->setTitle(tr("GEOM_VIEW"));
|
||||||
@ -143,12 +144,14 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
|||||||
mySelButton = new QPushButton(mySelectionGroup);
|
mySelButton = new QPushButton(mySelectionGroup);
|
||||||
mySelButton->setIcon(image1);
|
mySelButton->setIcon(image1);
|
||||||
myLineEdit = new QLineEdit(mySelectionGroup);
|
myLineEdit = new QLineEdit(mySelectionGroup);
|
||||||
|
myCheckBox = new QCheckBox(mySelectionGroup);
|
||||||
|
|
||||||
mySnapshotLabel = new QLabel(mySelectionGroup);
|
mySnapshotLabel = new QLabel(mySelectionGroup);
|
||||||
mySelectGrpLayout->addWidget(myLineEdit, 0, 1);
|
mySelectGrpLayout->addWidget(myLineEdit, 0, 1);
|
||||||
mySelectGrpLayout->addWidget(mySelButton, 0, 0);
|
mySelectGrpLayout->addWidget(mySelButton, 0, 0);
|
||||||
mySelectGrpLayout->addWidget(mySnapshotLabel, 1, 1);
|
mySelectGrpLayout->addWidget(mySnapshotLabel, 1, 1);
|
||||||
mySelectGrpLayout->addWidget(myPushButton, 1, 0);
|
mySelectGrpLayout->addWidget(myPushButton, 1, 0);
|
||||||
|
mySelectGrpLayout->addWidget(myCheckBox, 2, 0);
|
||||||
|
|
||||||
myOutputGroup = new DlgRef_3Radio(centralWidget());
|
myOutputGroup = new DlgRef_3Radio(centralWidget());
|
||||||
myOutputGroup->GroupBox1->setTitle(tr("GEOM_DETECT_OUTPUT"));
|
myOutputGroup->GroupBox1->setTitle(tr("GEOM_DETECT_OUTPUT"));
|
||||||
@ -378,6 +381,13 @@ void EntityGUI_FeatureDetectorDlg::ConstructorsClicked(int id)
|
|||||||
mySnapshotLabel->setText(tr("GEOM_COLOR_FILTER"));
|
mySnapshotLabel->setText(tr("GEOM_COLOR_FILTER"));
|
||||||
initName(tr("GEOM_CONTOURS"));
|
initName(tr("GEOM_CONTOURS"));
|
||||||
break;
|
break;
|
||||||
|
case LINES:
|
||||||
|
// myViewGroup->hide();
|
||||||
|
// mySelectionGroup->hide();
|
||||||
|
// mySelectionGroup->show();
|
||||||
|
mySnapshotLabel->setText(tr(""));
|
||||||
|
initName(tr("GEOM_LINES"));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -593,15 +603,17 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
}
|
}
|
||||||
else if (myConstructorId == CONTOURS)
|
else if (myConstructorId == CONTOURS)
|
||||||
{
|
{
|
||||||
if( !aRect.isEmpty() )
|
int method = 0 ; //CANNY
|
||||||
|
if( !aRect.isEmpty() && aRect.width() > 1 )
|
||||||
{
|
{
|
||||||
aDetector->SetROI( aRect );
|
aDetector->SetROI( aRect );
|
||||||
|
method = 1 ; //COLORFILTER
|
||||||
}
|
}
|
||||||
|
|
||||||
GEOM::GEOM_ICurvesOperations_var aCurveOperations = myGeomGUI->GetGeomGen()->GetICurvesOperations( getStudyId() );
|
GEOM::GEOM_ICurvesOperations_var aCurveOperations = myGeomGUI->GetGeomGen()->GetICurvesOperations( getStudyId() );
|
||||||
// GEOM::GEOM_ICurvesOperations::_narrow( getOperation() );
|
// GEOM::GEOM_ICurvesOperations::_narrow( getOperation() );
|
||||||
|
|
||||||
aDetector->ComputeContours();
|
aDetector->ComputeContours( method );
|
||||||
std::vector< std::vector<cv::Point> > contours = aDetector->GetContours();
|
std::vector< std::vector<cv::Point> > contours = aDetector->GetContours();
|
||||||
std::vector<cv::Vec4i> hierarchy = aDetector->GetContoursHierarchy();
|
std::vector<cv::Vec4i> hierarchy = aDetector->GetContoursHierarchy();
|
||||||
|
|
||||||
@ -613,6 +625,11 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
|
|
||||||
bool insert;
|
bool insert;
|
||||||
|
|
||||||
|
// TEST for debug only
|
||||||
|
// GEOM::GEOM_Object_var aRemovedPnt;
|
||||||
|
// GEOM::ListOfGO_var removedPnts = new GEOM::ListOfGO();
|
||||||
|
// int r = 0;
|
||||||
|
|
||||||
MESSAGE("hierarchy.size() =" << hierarchy.size())
|
MESSAGE("hierarchy.size() =" << hierarchy.size())
|
||||||
for( ; idx >= 0; idx = hierarchy[idx][0])
|
for( ; idx >= 0; idx = hierarchy[idx][0])
|
||||||
{
|
{
|
||||||
@ -625,6 +642,7 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
std::vector< cv::Point >::iterator it_next;
|
std::vector< cv::Point >::iterator it_next;
|
||||||
GEOM::GEOM_Object_var aGeomContourPnt;
|
GEOM::GEOM_Object_var aGeomContourPnt;
|
||||||
GEOM::ListOfGO_var geomContourPnts = new GEOM::ListOfGO();
|
GEOM::ListOfGO_var geomContourPnts = new GEOM::ListOfGO();
|
||||||
|
|
||||||
geomContourPnts->length( contour.size() );
|
geomContourPnts->length( contour.size() );
|
||||||
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
@ -642,7 +660,7 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
std::vector<int> pnt (pnt_array, pnt_array + sizeof(pnt_array) / sizeof(int) );
|
std::vector<int> pnt (pnt_array, pnt_array + sizeof(pnt_array) / sizeof(int) );
|
||||||
|
|
||||||
pnt_it=existing_points.insert(pnt);
|
pnt_it=existing_points.insert(pnt);
|
||||||
if (pnt_it.second == true) // To avoid double points in the contours
|
if (pnt_it.second == true || !myCheckBox->isChecked() ) // To avoid double points in the contours
|
||||||
{
|
{
|
||||||
insert = true;
|
insert = true;
|
||||||
if (it!=contour.begin()) // From the second point on perform some checking to avoid loops in the contours we build
|
if (it!=contour.begin()) // From the second point on perform some checking to avoid loops in the contours we build
|
||||||
@ -665,22 +683,44 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
|
|
||||||
double u_v_sinus = u_v_det / (norme_u * norme_v);
|
double u_v_sinus = u_v_det / (norme_u * norme_v);
|
||||||
|
|
||||||
if (u_v_sinus < Precision::Confusion())
|
if (fabs(u_v_sinus) < Precision::Confusion())
|
||||||
{
|
{
|
||||||
insert =false;
|
// TEST for debug only
|
||||||
|
// if (myCheckBox->isChecked())
|
||||||
|
// {
|
||||||
|
// MESSAGE("correction appliquee : fabs(u_v_sinus) ="<<fabs(u_v_sinus))
|
||||||
|
// MESSAGE("it->x = "<<it->x)
|
||||||
|
// MESSAGE("it->y = "<<it->y)
|
||||||
|
// MESSAGE("it_previous->x = "<<it_previous->x)
|
||||||
|
// MESSAGE("it_previous->y = "<<it_previous->y)
|
||||||
|
// MESSAGE("it_next->x = "<<it_next->x)
|
||||||
|
// MESSAGE("it_next->y = "<<it_next->y)
|
||||||
|
// MESSAGE("norme_u = "<<norme_u)
|
||||||
|
// MESSAGE("norme_v = "<<norme_v)
|
||||||
|
// MESSAGE("u_v_det = "<<u_v_det)
|
||||||
|
// }
|
||||||
|
insert = !myCheckBox->isChecked(); // TEST correction appliquee que si la checkbox est cochee
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
double x = -0.5 *width + it->x;
|
||||||
|
double y = 0.5 *height - it->y;
|
||||||
|
double z = 0;
|
||||||
if (insert)
|
if (insert)
|
||||||
{
|
{
|
||||||
double x = -0.5 *width + it->x;
|
|
||||||
double y = 0.5 *height - it->y;
|
|
||||||
double z = 0;
|
|
||||||
aGeomContourPnt = aBasicOperations->MakePointXYZ( x,y,z );
|
aGeomContourPnt = aBasicOperations->MakePointXYZ( x,y,z );
|
||||||
geomContourPnts->length( j+1 );
|
geomContourPnts->length( j+1 );
|
||||||
geomContourPnts[j] = aGeomContourPnt;
|
geomContourPnts[j] = aGeomContourPnt;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
// TEST for debug only
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// aRemovedPnt = aBasicOperations->MakePointXYZ( x,y,z );
|
||||||
|
// removedPnts->length( r+1 );
|
||||||
|
// removedPnts[r] = aRemovedPnt;
|
||||||
|
// r++;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -705,10 +745,47 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
GEOM::GEOM_Object_var aContoursCompound = aShapesOperations->MakeCompound(geomContours);
|
GEOM::GEOM_Object_var aContoursCompound = aShapesOperations->MakeCompound(geomContours);
|
||||||
|
// TEST for debu only GEOM::GEOM_Object_var aRemovedPntsCompound = aShapesOperations->MakeCompound(removedPnts);
|
||||||
if ( !aContoursCompound->_is_nil() )
|
if ( !aContoursCompound->_is_nil() )
|
||||||
{
|
{
|
||||||
objects.push_back( aContoursCompound._retn() );
|
objects.push_back( aContoursCompound._retn() );
|
||||||
}
|
}
|
||||||
|
// TEST for debug only
|
||||||
|
// if ( !aRemovedPntsCompound->_is_nil() )
|
||||||
|
// {
|
||||||
|
// objects.push_back( aRemovedPntsCompound._retn() );
|
||||||
|
// }
|
||||||
|
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(myConstructorId ==LINES)
|
||||||
|
{
|
||||||
|
aDetector->ComputeLines();
|
||||||
|
std::vector<cv::Vec4i> lines = aDetector->GetLines();
|
||||||
|
GEOM::GEOM_Object_var Pnt1;
|
||||||
|
GEOM::GEOM_Object_var Pnt2;
|
||||||
|
GEOM::GEOM_Object_var aLine;
|
||||||
|
|
||||||
|
GEOM::ListOfGO_var geomLines = new GEOM::ListOfGO();
|
||||||
|
int linesCount=0;
|
||||||
|
for( int i = 0; i < lines.size(); i++ )
|
||||||
|
{
|
||||||
|
Pnt1 = aBasicOperations->MakePointXYZ( -0.5 *width + lines[i][0], 0.5 *height - lines[i][1], 0 );
|
||||||
|
Pnt2 = aBasicOperations->MakePointXYZ( -0.5 *width + lines[i][2], 0.5 *height - lines[i][3], 0 );
|
||||||
|
aLine = aBasicOperations->MakeLineTwoPnt( Pnt1, Pnt2 );
|
||||||
|
if ( !aLine->_is_nil() )
|
||||||
|
{
|
||||||
|
geomLines->length(linesCount + 1);
|
||||||
|
geomLines[linesCount] = aLine;
|
||||||
|
linesCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GEOM::GEOM_Object_var aLinesCompound = aShapesOperations->MakeCompound(geomLines);
|
||||||
|
if ( !aLinesCompound->_is_nil() )
|
||||||
|
{
|
||||||
|
objects.push_back( aLinesCompound._retn() );
|
||||||
|
}
|
||||||
|
|
||||||
res=true;
|
res=true;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <gp_Ax3.hxx>
|
#include <gp_Ax3.hxx>
|
||||||
|
|
||||||
class QLineEdit;
|
class QLineEdit;
|
||||||
|
class QCheckBox;
|
||||||
class QGroupBox;
|
class QGroupBox;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
@ -92,6 +93,7 @@ private:
|
|||||||
QPushButton* mySelButton;
|
QPushButton* mySelButton;
|
||||||
|
|
||||||
QLineEdit* myLineEdit;
|
QLineEdit* myLineEdit;
|
||||||
|
QCheckBox* myCheckBox;
|
||||||
|
|
||||||
// DlgRef_3Radio* myViewGroup;
|
// DlgRef_3Radio* myViewGroup;
|
||||||
DlgRef_3Radio* myOutputGroup;
|
DlgRef_3Radio* myOutputGroup;
|
||||||
|
Loading…
Reference in New Issue
Block a user