Skip to content
Snippets Groups Projects
Commit 1eaaae44 authored by Céline  TREBEAU's avatar Céline TREBEAU
Browse files

Refactor

- ProjectionModel implementation
parent e52bf48f
No related branches found
No related tags found
3 merge requests!31Gui modifications,!30Version 1.0.2,!27Resolve "MVC Pattern implementation"
Pipeline #79411 passed
......@@ -28,25 +28,33 @@
*/
package fr.pasteur.ida.zellige.gui;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.control.CheckBox;
public class CheckBoxDisplay extends CheckBox
{
private boolean notDisplayed = true;
private SimpleBooleanProperty notDisplayed = new SimpleBooleanProperty( true );
// private boolean notDisplayed = true;
public boolean isNotDisplayed()
{
return notDisplayed;
return notDisplayed.getValue();
}
public void disable()
{
notDisplayed = false;
notDisplayed.setValue( false );
}
public void enable()
{
notDisplayed = true;
notDisplayed.setValue( true );
}
public SimpleBooleanProperty notDisplayedProperty()
{
return notDisplayed;
}
}
......@@ -161,7 +161,7 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
selectionController.getSelectionModel().pretreatedImgProperty().bind( pretreatedImg );
selectionController.getSelectionModel().imagesProperty().bind( images );
constructionController.getConstructionModel().maximumsProperty().bind( selectionController.getSelectionModel().selectedPixelsProperty() );
projectionController.referenceSurfacesProperty().bind( constructionController.getConstructionModel().referenceSurfacesProperty() );
projectionController.getModel().referenceSurfacesProperty().bind( constructionController.getConstructionModel().referenceSurfacesProperty() );
changedParameters.bindBidirectional( selectionController.changedParametersProperty() );
selectionController.changedParametersProperty().bindBidirectional( constructionController.changedParametersProperty() );
constructionController.changedParametersProperty().bindBidirectional( projectionController.changedParametersProperty() );
......@@ -348,7 +348,7 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
{
if ( constructionController.getConstructionModel().referenceSurfacesProperty().getValue() != null )
{
projectionController.runProjection();
projectionController.getModel().runProjection();
}
else
{
......
......@@ -6,13 +6,13 @@
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
......@@ -28,11 +28,8 @@
*/
package fr.pasteur.ida.zellige.gui;
import fr.pasteur.ida.zellige.element.Projection;
import fr.pasteur.ida.zellige.element.ReferenceSurface;
import fr.pasteur.ida.zellige.steps.projection.ReferenceSurfaceProjection;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
......@@ -40,25 +37,18 @@ import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import net.imglib2.img.Img;
import net.imglib2.img.display.imagej.ImageJFunctions;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;
import net.imglib2.type.numeric.integer.UnsignedShortType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
public class ProjectionController< T extends RealType< T > & NativeType< T > > implements Initializable
{
private final static Logger LOGGER = LoggerFactory.getLogger( ProjectionController.class );
SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfaces = new SimpleObjectProperty<>();
SimpleBooleanProperty delta1Functions = new SimpleBooleanProperty( false );
SimpleBooleanProperty delta2Functions = new SimpleBooleanProperty( false );
private final SimpleBooleanProperty changedParameters = new SimpleBooleanProperty();
@FXML
private Spinner< Integer > delta1;
......@@ -79,9 +69,26 @@ public class ProjectionController< T extends RealType< T > & NativeType< T > > i
@FXML
private Spinner< Integer > delta2;
private ProjectionModel< T > model;
@Override
public void initialize( URL url, ResourceBundle resourceBundle )
{
// Model
model = new ProjectionModel<>();
//link Model with View
model.methodProperty().bind( methodComboBox.valueProperty() );
model.delta1Property().bind( delta1.valueProperty() );
model.delta2Property().bind( delta2.valueProperty() );
bindCheckBox( model.rawHMProperty(), model.rawHMDisplayProperty(), rawHeightMap );
bindCheckBox( model.projectionProperty(), model.projectionDisplayProperty(), projection );
bindCheckBox( model.extractedHMProperty(), model.extractedHMDisplayProperty(), extractedHeightMap );
bindCheckBox( model.reduced3DspaceProperty(), model.reduced3DspaceDisplayProperty(), reduced3DSpace );
bindCheckBox( model.segmentedSurfaceProperty(), model.segmentedSurfaceDisplayProperty(), segmentedSurface );
bindCheckBox( model.segmentedSurfaceMaskProperty(), model.segmentedSurfaceMaskDisplayProperty(), segmentedSurfaceMask );
/* Components*/
SpinnerValueFactory< Integer > valueFactory =
new SpinnerValueFactory.IntegerSpinnerValueFactory( 1, 30, 0 );
......@@ -95,14 +102,14 @@ public class ProjectionController< T extends RealType< T > & NativeType< T > > i
delta1.valueProperty().addListener( ( observableValue, integer, t1 ) ->
{
delta1Functions.setValue( false );
model.delta1FunctionsProperty().setValue( false );
resetDisplayMode();
changedParameters.setValue( true );
} );
delta2.valueProperty().addListener( ( observableValue, integer, t1 ) ->
{
delta2Functions.setValue( false );
model.delta2FunctionsProperty().setValue( false );
segmentedSurfaceMask.enable();
changedParameters.setValue( true );
} );
......@@ -110,242 +117,100 @@ public class ProjectionController< T extends RealType< T > & NativeType< T > > i
projection.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta1Functions.getValue() && t1 && projection.isNotDisplayed() )
if ( model.delta1FunctionsProperty().getValue() && t1 && projection.isNotDisplayed() )
{
showProjections();
model.showProjections();
}
} );
rawHeightMap.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta1Functions.getValue() && t1 && rawHeightMap.isNotDisplayed() )
if ( model.delta1FunctionsProperty().getValue() && t1 && rawHeightMap.isNotDisplayed() )
{
showRawHeightMap();
model.showRawHeightMap();
}
} );
extractedHeightMap.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta1Functions.getValue() && t1 && extractedHeightMap.isNotDisplayed() )
if ( model.delta1FunctionsProperty().getValue() && t1 && extractedHeightMap.isNotDisplayed() )
{
showExtractedHeightMaps();
model.showExtractedHeightMaps();
}
} );
reduced3DSpace.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta1Functions.getValue() && t1 && reduced3DSpace.isNotDisplayed() )
if ( model.delta1FunctionsProperty().getValue() && t1 && reduced3DSpace.isNotDisplayed() )
{
showReduced3DSpace();
model.showReduced3DSpace();
}
} );
segmentedSurface.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta1Functions.getValue() && t1 && segmentedSurface.isNotDisplayed() )
if ( model.delta1FunctionsProperty().getValue() && t1 && segmentedSurface.isNotDisplayed() )
{
showSegmentedSurface();
model.showSegmentedSurface();
}
} );
segmentedSurfaceMask.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( delta2Functions.getValue() && t1 && segmentedSurfaceMask.isNotDisplayed() )
if ( model.delta2FunctionsProperty().getValue() && t1 && segmentedSurfaceMask.isNotDisplayed() )
{
showSegmentedSurfaceMask();
model.showSegmentedSurfaceMask();
}
} );
/* Properties*/
referenceSurfaces.addListener( ( observableValue, referenceSurfaces1, t1 ) ->
// Model Properties
model.referenceSurfacesProperty().addListener( ( observableValue, referenceSurfaces1, t1 ) ->
{
if ( t1 == null )
{
delta1Functions.setValue( false );
model.delta1FunctionsProperty().setValue( false );
LOGGER.debug( "REFERENCE_SURFACES is NULL" );
}
else
{
LOGGER.info( "Extraction of {} surfaces", referenceSurfaces.getValue().size() );
LOGGER.info( "Extraction of {} surfaces", model.referenceSurfacesProperty().getValue().size() );
LOGGER.debug( "Compute output delta1" );
setOutputDelta1();
model.setOutputDelta1();
resetDisplayMode();
}
} );
delta1Functions.addListener( ( observableValue, aBoolean, t1 ) ->
model.delta1FunctionsProperty().addListener( ( observableValue, aBoolean, t1 ) ->
{
if ( ! t1 )
{
LOGGER.debug( "DELTA1_FUNCTIONS is NULL" );
delta2Functions.setValue( false );
model.delta2FunctionsProperty().setValue( false );
}
else
{
LOGGER.debug( "Compute output delta2" );
setOutputDelta2();
model.setOutputDelta2();
}
} );
delta2Functions.addListener( ( observable, oldValue, newValue ) ->
model.delta2FunctionsProperty().addListener( ( observable, oldValue, newValue ) ->
{
if ( newValue )
{
showOutput();
model.showOutput();
}
else
{
LOGGER.debug( "DELTA2_FUNCTIONS is NULL" );
}
} );
}
private void showSegmentedSurfaceMask()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(), "Surface_mask_" + referenceSurface.getIndex() );
}
}
private void showSegmentedSurface()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(), "Segmented_surface_" + referenceSurface.getIndex() );
}
}
private void showReduced3DSpace()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(), "Reduced_3D_space_" + referenceSurface.getIndex() );
}
}
private void showExtractedHeightMaps()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted_HM_" + referenceSurface.getIndex() );
}
}
private void showRawHeightMap()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getzMap(), "Raw_HM_" + referenceSurface.getIndex() );
}
}
private void showProjections()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().get(), "Projection_" + referenceSurface.getIndex() );
}
}
public void runProjection()
{
LOGGER.debug( "Starting projections ! " );
if ( ! delta1Functions.getValue() )
{
LOGGER.debug( "Output with delta1 " );
setOutputDelta1();
}
if ( ! delta2Functions.getValue() )
{
LOGGER.debug( "Output with delta2 " );
setOutputDelta2();
}
showOutput();
}
private void showOutput()
{
if ( extractedHeightMap.isSelected() && extractedHeightMap.isNotDisplayed() )
{
showExtractedHeightMaps();
extractedHeightMap.disable();
}
if ( segmentedSurface.isSelected() && segmentedSurface.isNotDisplayed() )
{
showSegmentedSurface();
segmentedSurface.disable();
}
if ( projection.isSelected() && projection.isNotDisplayed() )
{
showProjections();
projection.disable();
}
if ( reduced3DSpace.isSelected() && reduced3DSpace.isNotDisplayed() )
{
showReduced3DSpace();
reduced3DSpace.disable();
}
if ( segmentedSurfaceMask.isSelected() && segmentedSurfaceMask.isNotDisplayed() )
{
showSegmentedSurfaceMask();
segmentedSurfaceMask.disable();
}
if ( rawHeightMap.isSelected() && rawHeightMap.isNotDisplayed() )
{
showRawHeightMap();
rawHeightMap.disable();
}
}
private void setOutputDelta1()
{
int delta = delta1.getValue();
String method = methodComboBox.getValue();
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
Projection< T > projection = referenceSurface.getProjection();
Img< UnsignedShortType > extractedHeightMap = ReferenceSurfaceProjection.getProjectionHeightMap( referenceSurface, method, delta );
projection.setExtractedHeightMap( extractedHeightMap );
projection.setProjection( ReferenceSurfaceProjection.projection1( referenceSurface, method ) );
projection.setSegmentedSurface( ReferenceSurfaceProjection.getSegmentedSurface( extractedHeightMap, referenceSurface.getInput(), referenceSurface.getFactory() ) );
projection.setReduced3DSpace( ReferenceSurfaceProjection.getExtractedHeightMapSubStack( referenceSurface, delta ) );
}
delta1Functions.setValue( true );
}
private void setOutputDelta2()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
Projection< T > projection = referenceSurface.getProjection();
projection.setSegmentedSurfaceMask( ReferenceSurfaceProjection.getSegmentedSurfaceMask( projection.getSegmentedSurface(), delta2.getValue() ) );
}
delta2Functions.setValue( true );
}
public ArrayList< ReferenceSurface< T > > getReferenceSurfaces()
{
return referenceSurfaces.get();
}
public SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfacesProperty()
{
return referenceSurfaces;
}
private void resetDisplayMode()
{
......@@ -363,4 +228,16 @@ public class ProjectionController< T extends RealType< T > & NativeType< T > > i
{
return changedParameters;
}
public ProjectionModel< T > getModel()
{
return model;
}
private void bindCheckBox( BooleanProperty selected, BooleanProperty notDisplayed, CheckBoxDisplay checkBox )
{
selected.bind( checkBox.selectedProperty() );
notDisplayed.bindBidirectional( checkBox.notDisplayedProperty() );
}
}
package fr.pasteur.ida.zellige.gui;
import fr.pasteur.ida.zellige.element.Projection;
import fr.pasteur.ida.zellige.element.ReferenceSurface;
import fr.pasteur.ida.zellige.steps.projection.ReferenceSurfaceProjection;
import javafx.beans.property.*;
import net.imglib2.img.Img;
import net.imglib2.img.display.imagej.ImageJFunctions;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;
import net.imglib2.type.numeric.integer.UnsignedShortType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
public class ProjectionModel< T extends RealType< T > & NativeType< T > >
{
private final static Logger LOGGER = LoggerFactory.getLogger( ProjectionModel.class );
private final SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfaces;
private final SimpleBooleanProperty delta1Functions;
private final SimpleBooleanProperty delta2Functions;
private final IntegerProperty delta1;
private final IntegerProperty delta2;
private final StringProperty method;
private final BooleanProperty rawHM;
private final BooleanProperty projection;
private final BooleanProperty extractedHM;
private final BooleanProperty reduced3Dspace;
private final BooleanProperty segmentedSurface;
private final BooleanProperty segmentedSurfaceMask;
private final BooleanProperty rawHMDisplay;
private final BooleanProperty projectionDisplay;
private final BooleanProperty extractedHMDisplay;
private final BooleanProperty reduced3DspaceDisplay;
private final BooleanProperty segmentedSurfaceDisplay;
private final BooleanProperty segmentedSurfaceMaskDisplay;
public ProjectionModel()
{
this.referenceSurfaces = new SimpleObjectProperty<>();
this.delta1Functions = new SimpleBooleanProperty( false );
this.delta2Functions = new SimpleBooleanProperty( false );
this.method = new SimpleStringProperty();
this.delta1 = new SimpleIntegerProperty();
this.delta2 = new SimpleIntegerProperty();
this.rawHM = new SimpleBooleanProperty();
this.projection = new SimpleBooleanProperty();
this.extractedHM = new SimpleBooleanProperty();
this.reduced3Dspace = new SimpleBooleanProperty();
this.segmentedSurface = new SimpleBooleanProperty();
this.segmentedSurfaceMask = new SimpleBooleanProperty();
this.rawHMDisplay = new SimpleBooleanProperty( true );
this.projectionDisplay = new SimpleBooleanProperty( true );
this.extractedHMDisplay = new SimpleBooleanProperty( true );
this.reduced3DspaceDisplay = new SimpleBooleanProperty( true );
this.segmentedSurfaceDisplay = new SimpleBooleanProperty( true );
this.segmentedSurfaceMaskDisplay = new SimpleBooleanProperty( true );
}
public void showSegmentedSurfaceMask()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(), "Surface_mask_" + referenceSurface.getIndex() );
}
}
public void showSegmentedSurface()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(), "Segmented_surface_" + referenceSurface.getIndex() );
}
}
public void showReduced3DSpace()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(), "Reduced_3D_space_" + referenceSurface.getIndex() );
}
}
public void showExtractedHeightMaps()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted_HM_" + referenceSurface.getIndex() );
}
}
public void showRawHeightMap()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getzMap(), "Raw_HM_" + referenceSurface.getIndex() );
}
}
public void showProjections()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
ImageJFunctions.show( referenceSurface.getProjection().get(), "Projection_" + referenceSurface.getIndex() );
}
}
public void runProjection()
{
LOGGER.debug( "Starting projections ! " );
if ( ! delta1Functions.getValue() )
{
LOGGER.debug( "Output with delta1 " );
setOutputDelta1();
}
if ( ! delta2Functions.getValue() )
{
LOGGER.debug( "Output with delta2 " );
setOutputDelta2();
}
showOutput();
}
public void showOutput()
{
if ( rawHM.get() && rawHMDisplay.getValue() )
{
showRawHeightMap();
rawHMDisplay.setValue( false );
}
if ( projection.get() && projectionDisplay.get() )
{
showProjections();
projectionDisplay.setValue( false );
}
if ( extractedHM.get() && extractedHMDisplay.get() )
{
showExtractedHeightMaps();
extractedHMDisplay.setValue( false );
}
if ( segmentedSurface.get() && segmentedSurfaceDisplay.get() )
{
showSegmentedSurface();
segmentedSurface.setValue( false );
}
if ( reduced3Dspace.get() && reduced3DspaceDisplay.get() )
{
showReduced3DSpace();
reduced3DspaceDisplay.setValue( false );
}
if ( segmentedSurfaceMask.get() && segmentedSurfaceMaskDisplay.get() )
{
showSegmentedSurfaceMask();
segmentedSurfaceMask.setValue( false );
}
}
public void setOutputDelta1()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
Projection< T > projection = referenceSurface.getProjection();
Img< UnsignedShortType > extractedHeightMap = ReferenceSurfaceProjection.getProjectionHeightMap( referenceSurface, method.get(), delta1.intValue() );
projection.setExtractedHeightMap( extractedHeightMap );
projection.setProjection( ReferenceSurfaceProjection.projection1( referenceSurface, this.method.get() ) );
projection.setSegmentedSurface( ReferenceSurfaceProjection.getSegmentedSurface( extractedHeightMap, referenceSurface.getInput(), referenceSurface.getFactory() ) );
projection.setReduced3DSpace( ReferenceSurfaceProjection.getExtractedHeightMapSubStack( referenceSurface, delta1.intValue() ) );
}
delta1Functions.setValue( true );
}
public void setOutputDelta2()
{
for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
{
Projection< T > projection = referenceSurface.getProjection();
projection.setSegmentedSurfaceMask( ReferenceSurfaceProjection.getSegmentedSurfaceMask( projection.getSegmentedSurface(), delta2.intValue() ) );
}
delta2Functions.setValue( true );
}
public ArrayList< ReferenceSurface< T > > getReferenceSurfaces()
{
return referenceSurfaces.get();
}
public SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfacesProperty()
{
return referenceSurfaces;
}
public SimpleBooleanProperty delta1FunctionsProperty()
{
return delta1Functions;
}
public SimpleBooleanProperty delta2FunctionsProperty()
{
return delta2Functions;
}
public IntegerProperty delta1Property()
{
return delta1;
}
public IntegerProperty delta2Property()
{
return delta2;
}
public BooleanProperty rawHMProperty()
{
return rawHM;
}
public boolean isProjection()
{
return projection.get();
}
public BooleanProperty projectionProperty()
{
return projection;
}
public BooleanProperty extractedHMProperty()
{
return extractedHM;
}
public BooleanProperty reduced3DspaceProperty()
{
return reduced3Dspace;
}
public BooleanProperty segmentedSurfaceProperty()
{
return segmentedSurface;
}
public BooleanProperty segmentedSurfaceMaskProperty()
{
return segmentedSurfaceMask;
}
public String getMethod()
{
return method.get();
}
public void setMethod( String method )
{
this.method.set( method );
}
public StringProperty methodProperty()
{
return method;
}
public BooleanProperty rawHMDisplayProperty()
{
return rawHMDisplay;
}
public BooleanProperty projectionDisplayProperty()
{
return projectionDisplay;
}
public BooleanProperty extractedHMDisplayProperty()
{
return extractedHMDisplay;
}
public BooleanProperty reduced3DspaceDisplayProperty()
{
return reduced3DspaceDisplay;
}
public BooleanProperty segmentedSurfaceDisplayProperty()
{
return segmentedSurfaceDisplay;
}
public BooleanProperty segmentedSurfaceMaskDisplayProperty()
{
return segmentedSurfaceMaskDisplay;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment