#include "HYDROGUI_RecognizeContoursDlg.h"
#include "HYDROGUI_Module.h"
#include "HYDROGUI_Shape.h"
-#include "HYDROGUI_Tool.h"
+#include "HYDROGUI_Tool2.h"
#include "HYDROGUI_UpdateFlags.h"
+#include "HYDROGUI_OCCSelector.h"
+#include "HYDROGUI_ZLayers.h"
#include <HYDROData_Document.h>
#include <HYDROData_GeomTool.h>
#include <SUIT_Desktop.h>
#include <SUIT_ViewManager.h>
+#include <BRepBuilderAPI_GTransform.hxx>
+#include <gp_GTrsf.hxx>
+
#include <QDialog>
+#include <QDir>
#include <QTemporaryFile>
/**
{
HYDROGUI_Operation::startOperation();
+ // Set preview view manager
+ if ( !getPreviewManager() ) {
+ setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>(
+ module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
+ }
+
+ if ( !isApplyAndClose() ) {
+ return;
+ }
+
// Get the selected image
myImage = Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
if ( myImage.IsNull() ) {
abort();
return;
}
+ QString anImageName = myImage->GetName();
// Create temporary graphics file
QImage aQImage = myImage->Image();
- myTmpImageFile = new QTemporaryFile( myImage->GetName() );
+ myTmpImageFile = new QTemporaryFile( QDir::tempPath() + QDir::separator() + anImageName );
if ( !myTmpImageFile->open() ||
!aQImage.save( myTmpImageFile->fileName(), "PNG", 100 ) ) {
abort();
// Reset the panel
aPanel->reset();
+ aPanel->setImageName( anImageName );
// Get active study
SalomeApp_Study* aStudy =
QString aGeomPictureEntry;
- HYDROData_GeomTool::createFaceInGEOM(
- aGeomEngine, aDSStudy, aQImage.width(), aQImage.height(), myImage->GetName(), aGeomPictureEntry );
+ HYDROData_GeomTool::createFaceInGEOM( aGeomEngine, aDSStudy, aQImage.width(), aQImage.height(),
+ anImageName, aGeomPictureEntry );
if ( !aGeomPictureEntry.isEmpty() ) {
aStudy->setObjectProperty( aViewMgr->getGlobalId(), aGeomPictureEntry,
// update the object browser
module()->getApp()->updateObjectBrowser( true );
- // select the picture
- SUIT_DataOwnerPtrList aList( true );
- aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( aGeomPictureEntry ) ) );
- selectionMgr()->setSelected(aList );
+ // browse the published GEOM picture
+ QStringList anEntries;
+ anEntries << aGeomPictureEntry;
+ browseObjects( anEntries );
// Add GEOM picture object entry to the list of temporary geom objects
myTmpGeomObjects << aGeomPictureEntry;
*/
void HYDROGUI_RecognizeContoursOp::commitOperation()
{
- cleanup();
+ if ( isApplyAndClose() ) {
+ cleanup();
+ }
HYDROGUI_Operation::commitOperation();
}
QString& theErrorMsg,
QStringList& theBrowseObjectsEntries )
{
+ // Check the original image
+ if ( myImage.IsNull() ) {
+ return false;
+ }
+
// Get panel
HYDROGUI_RecognizeContoursDlg* aPanel =
::qobject_cast<HYDROGUI_RecognizeContoursDlg*>( inputPanel() );
return false;
}
+ // Get selected polylines
+ QStringList aSelectedtPolylines = aPanel->getSelectedtPolylineNames();
+ // Remove the selected polylines from the panel
+ aPanel->removePolylineNames( aSelectedtPolylines );
+
// Create polylines
- foreach ( QString aName, aPanel->getSelectedtPolylineNames() ) {
+ foreach ( QString aName, aSelectedtPolylines ) {
TopoDS_Shape aShape = myPolylineShapes.value( aName )->getTopoShape();
if ( aShape.IsNull() ) {
continue;
if( !aPolylineObj.IsNull() ) {
aPolylineObj->SetName( aName );
- aPolylineObj->ImportShape( aShape );
+ aPolylineObj->ImportShape( aShape, false, NULL );
aPolylineObj->SetWireColor( HYDROData_PolylineXY::DefaultWireColor() );
+
aPolylineObj->Update();
module()->setIsToUpdate( aPolylineObj );
}
+
+ // Remove the shape from the map
+ HYDROGUI_Shape* aShapeToDelete = myPolylineShapes.take( aName );
+ delete aShapeToDelete;
}
-
+
theUpdateFlags = UF_Model;
return true;
Handle(AIS_InteractiveContext) aCtx = NULL;
// Display preview
- if ( !getPreviewManager() ) {
- setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>(
- module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
- }
-
OCCViewer_ViewManager* aViewManager = getPreviewManager();
if ( aViewManager ) {
if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) {
+ // aViewer->enablePreselection( true );
+ // aViewer->enableSelection( true );
aCtx = aViewer->getAISContext();
connect( aViewer, SIGNAL( selectionChanged() ), this, SLOT( onViewerSelectionChanged() ) );
}
}
+ QTransform aTrsf = myImage->Trsf();
+ QImage anImage = myImage->Image();
+ QRectF aRect( QPointF( 0, 0 ), QPointF( anImage.width(), anImage.height() ) );
+ aRect = aTrsf.mapRect( aRect );
+ aTrsf.setMatrix( aTrsf.m11(), aTrsf.m12(), aTrsf.m13(),
+ aTrsf.m21(), -aTrsf.m22(), aTrsf.m23(),
+ aTrsf.m31() + aRect.width() * 0.5, aTrsf.m32 () - aRect.height() * 0.5, aTrsf.m33() );
+
+ /*
+ QTransform aTrsf = myImage->Trsf();
+ gp_Mat aMat( aTrsf.m11(), aTrsf.m21(), 0,
+ aTrsf.m12(), -aTrsf.m22(), 0,
+ 0, 0, 1 );
+ QImage anImage = myImage->Image();
+ QRectF aRect( QPointF( 0, 0 ), QPointF( anImage.width(), anImage.height() ) );
+ aRect = aTrsf.mapRect( aRect );
+ gp_XYZ aVec( aTrsf.m31() + aRect.width() * 0.5,
+ aTrsf.m32() - aRect.height() * 0.5, 0 );
+
+ BRepBuilderAPI_GTransform aBuilder( gp_GTrsf( aMat, aVec ) );
+ */
+
+ Handle(HYDROData_PolylineXY) aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
+ QStringList aNamesList;
for ( int i = 1; i <= aSubShapes.Length(); i++ ) {
- const TopoDS_Shape& aSubShape = aSubShapes.Value( i );
-
+ TopoDS_Shape aSubShape = aSubShapes.Value( i );
+
+ // Transform the sub-shape
+ aPolylineObj->ImportShape( aSubShape, false, NULL );
+ aPolylineObj->Transform( aTrsf );
+
+ /*
+ aBuilder.Perform( aSubShape, Standard_True );
+ if ( aBuilder.IsDone() ) {
+ aSubShape = aBuilder.Shape();
+ }*/
+
HYDROGUI_Shape* aShape = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() );
- aShape->setShape( aSubShape, true, false );
-
+ aShape->setShape( aPolylineObj->GetShape(), true, false );
+ aShape->setBorderColor( HYDROData_PolylineXY::DefaultWireColor(), false, false );
+
QString aPrefix = QString("%1_%2_%3").arg( myImage->GetName(), "Contour", QString::number( i ) );
QString aName = HYDROGUI_Tool::GenerateObjectName( module(), aPrefix, QStringList(), true );
myPolylineShapes.insert( aName, aShape);
+ aNamesList << aName;
}
- if ( !aCtx.IsNull() ) { //@MZN
+ aPolylineObj->Remove();
+
+ if ( !aCtx.IsNull() ) {
+ UpdateZLayersOfHilightPresentationsOfDisplayedObjects( aCtx, Graphic3d_ZLayerId_TopOSD );
aCtx->UpdateCurrentViewer();
}
HYDROGUI_RecognizeContoursDlg* aPanel =
::qobject_cast<HYDROGUI_RecognizeContoursDlg*>( inputPanel() );
if ( aPanel ) {
- aPanel->setPolylineNames( myPolylineShapes.keys() );
+ aPanel->setPolylineNames( aNamesList );
}
}
}
*/
void HYDROGUI_RecognizeContoursOp::onSelectionChanged( const QStringList& theSelectedNames )
{
- foreach ( QString aName, myPolylineShapes.keys() ) {
- bool isSelected = theSelectedNames.contains( aName );
- myPolylineShapes[aName]->highlight( isSelected, true );
+ Handle(AIS_InteractiveContext) aCtx = NULL;
+
+ OCCViewer_ViewManager* aViewManager = getPreviewManager();
+ if ( aViewManager ) {
+ if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) {
+ aCtx = aViewer->getAISContext();
+ }
+ }
+
+ if ( !aCtx.IsNull() ) {
+ foreach ( QString aName, myPolylineShapes.keys() ) {
+ Handle(AIS_InteractiveObject) anObject =
+ myPolylineShapes.value(aName)->getAISObject();
+
+ bool isSelected = theSelectedNames.contains( aName );
+ if ( ( isSelected && !aCtx->IsSelected( anObject) ) ||
+ ( !isSelected && aCtx->IsSelected( anObject) ) ) {
+ aCtx->AddOrRemoveSelected( anObject, Standard_False );
+ }
+ // myPolylineShapes[aName]->highlight( isSelected, true );
+ }
+ aCtx->UpdateCurrentViewer();
}
}
return;
}
- Handle(AIS_InteractiveContext) aCtx = NULL;
OCCViewer_ViewManager* aViewManager = getPreviewManager();
+ Handle(AIS_InteractiveContext) aCtx = NULL;
if ( aViewManager ) {
if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) {
aCtx = aViewer->getAISContext();
QStringList aSelectedNames;
foreach ( QString aName, myPolylineShapes.keys() ) {
- bool isSelected = aCtx->IsSelected( myPolylineShapes[aName]->getAISObject() );
+ bool isSelected = aCtx->IsSelected( myPolylineShapes.value(aName)->getAISObject() );
if ( isSelected ) {
aSelectedNames << aName;
}
// update the object browser
module()->getApp()->updateObjectBrowser( true );
}
-}
\ No newline at end of file
+}