From: <bma...@us...> - 2011-09-27 16:05:27
|
Revision: 6454 http://fudaa.svn.sourceforge.net/fudaa/?rev=6454&view=rev Author: bmarchan Date: 2011-09-27 16:05:20 +0000 (Tue, 27 Sep 2011) Log Message: ----------- Add : Saisie interactive d'un transect Modified Paths: -------------- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivVisuPanel.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivEditAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivTransectModel.java Added Paths: ----------- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivNewTransectAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivEditableModel.java Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -36,6 +36,7 @@ import org.fudaa.fudaa.piv.action.PivComputeAverageAction; import org.fudaa.fudaa.piv.action.PivComputeLaunchAction; import org.fudaa.fudaa.piv.action.PivComputeParamAction; +import org.fudaa.fudaa.piv.action.PivNewTransectAction; import org.fudaa.fudaa.piv.action.PivImportGRPAction; import org.fudaa.fudaa.piv.action.PivImportGridAction; import org.fudaa.fudaa.piv.action.PivImportTransectAction; @@ -215,6 +216,7 @@ setEnabledForAction("PIV_GRID", bprjOpen && bprjHasTransfImg); setEnabledForAction("IMPORT_GRID", bprjOpen && bprjHasTransfImg); setEnabledForAction("IMPORT_TRANSECT", bprjOpen && bprjHasTransfImg); + setEnabledForAction("CREATE_TRANSECT", bprjOpen && bprjHasTransfImg); setEnabledForAction("PIV_COMPUTE", bprjOpen); setEnabledForAction("COMPUTE_AVERAGE", bprjOpen); setEnabledForAction("RESULTS_SHOW_VELOCITIES", bprjOpen && project.getVelResults()!=null); @@ -673,6 +675,8 @@ mn.addSeparator(PivResource.getS("R\xE9sultats")); mn.add(new PivComputeAverageAction(this)); mn.add(get2dFrame().getVisuPanel().getShowVelocitiesAction().buildMenuItem(EbliComponentFactory.INSTANCE)); + mn.addSeparator(PivResource.getS("Post-traitement")); + mn.add(get2dFrame().getVisuPanel().getNewTransectAction()); mn.addSeparator(PivResource.getS("Vue")); ButtonGroup bg=new ButtonGroup(); AbstractButton itOriginalView=get2dFrame().getVisuPanel().getOriginalViewAction().buildMenuItem(EbliComponentFactory.INSTANCE); Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivVisuPanel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivVisuPanel.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivVisuPanel.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -39,6 +39,7 @@ import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.ebli.trace.TraceLigneModel; import org.fudaa.fudaa.piv.action.PivComputeGridDefinitionAction; +import org.fudaa.fudaa.piv.action.PivNewTransectAction; import org.fudaa.fudaa.piv.action.PivEditAction; import org.fudaa.fudaa.piv.action.PivOriginalViewAction; import org.fudaa.fudaa.piv.action.PivOrthoGRPAction; @@ -117,15 +118,13 @@ ZCalqueMultiPointEditable cqRealOrthoPoints_; ZCalqueMultiPointEditable cqRealControlPoints_; ZCalqueImageRaster cqRealImg_; + /** L'affichage d'un transect */ + ZCalqueLigneBriseeEditable cqTransect_; PivIASALayer cqIASA_; - /** Le calque d'\xE9dition du contour de grille. */ - ZCalqueEditionInteraction cqCntGrilleEdition_; - /** Le calque d'edition des points de r\xE9f\xE9rence. */ - ZCalqueEditionInteraction cqGRPEdition_; + /** Le calque d'\xE9dition. */ + ZCalqueEditionInteraction cqEdition_; /** L'affichage des r\xE9sultats moyenn\xE9s */ ZCalqueFleche cqVelResults; - /** L'affichage d'un transect */ - ZCalqueLigneBriseeEditable cqTransect_; PivIASAModel mdlIASA; PivCntGridModel mdlCntGrid; @@ -150,6 +149,7 @@ private PivOrthoGRPAction actOrthoGRP_; private PivShowVelocityAction actShowVelocities_; private PivEditAction actEdit_; + private PivNewTransectAction actNewTransect_; /** * Construction des calques. Une partie est d\xE9j\xE0 construite par d\xE9faut dans @@ -230,6 +230,7 @@ removeAllCalqueDonnees(); addCqInfos(); + buildEditionLayer(); buildTransfLayers(); buildRealLayers(); buildOriginalLayers(); @@ -244,10 +245,10 @@ actTransfView_=new PivTransfViewAction((PivImplementation)getCtuluUI()); actRealView_=new PivRealViewAction((PivImplementation)getCtuluUI()); actOrthoGRP_=new PivOrthoGRPAction(this); - actOrthoGRP_.setCalqueInteraction(cqGRPEdition_); actOrthoGRP_.setCalqueOrthoPoints(cqOrthoPoints_); actComputeGrid_=new PivComputeGridDefinitionAction(this); - actComputeGrid_.setCalqueInteraction(cqCntGrilleEdition_); + actNewTransect_=new PivNewTransectAction(this); + actNewTransect_.setTransectLayer(cqTransect_); actShowVelocities_=new PivShowVelocityAction((PivImplementation)getCtuluUI()); actEdit_=new PivEditAction(this); getScene().addSelectionListener(actEdit_); @@ -297,6 +298,14 @@ } /** + * Retourne l'action pour la saisie d'un transect. + * @return L'action. + */ + public EbliActionAbstract getNewTransectAction() { + return actNewTransect_; + } + + /** * Retourne l'action pour voir les vitesses. * @return L'action. */ @@ -311,6 +320,13 @@ public EbliActionAbstract getEditAction() { return actEdit_; } + + /** + * @return Le calque d'edition de formes. + */ + public ZCalqueEditionInteraction getEditionLayer() { + return cqEdition_; + } /** * Switch les calques de la vue suivant le type de vue attendu. @@ -423,6 +439,20 @@ } /** + * Construction du calque de saisie de formes. + */ + protected void buildEditionLayer() { + cqEdition_=new ZCalqueEditionInteraction(); + cqEdition_.setName("cqEdition"); + cqEdition_.setGele(true); + cqEdition_.setLineModel(new TraceLigneModel(TraceLigne.LISSE, 1, Color.RED)); + cqEdition_.setIconModel(new TraceIconModel(TraceIcon.PLUS, 5, Color.RED)); + + // Ce calque peut \xEAtre ajout\xE9 d\xE9s le d\xE9but, il n'apparait pas dans l'arbre de calques + getController().addCalqueInteraction(cqEdition_); + } + + /** * Construction des calques pour l'image originale. */ protected void buildOriginalLayers() { @@ -439,17 +469,6 @@ cqOriginalImg_ = new ZCalqueImageRaster(); cqOriginalImg_.setTitle(PivResource.getS("Image d'origine")); cqOriginalImg_.setName("cqImg"); - - // Un calque de cr\xE9ation de formes interactif. - cqGRPEdition_=new ZCalqueEditionInteraction(); - cqGRPEdition_.setName("cqGRPEdition"); - cqGRPEdition_.setTypeForme(DeForme.MULTI_POINT); - cqGRPEdition_.setGele(true); - cqGRPEdition_.setIconModel(new TraceIconModel(TraceIcon.PLUS, 5, Color.RED)); - cqGRPEdition_.setFormEndedByDoubleClic(false); - - // Ce calque peut \xEAtre ajout\xE9 d\xE9s le d\xE9but, il n'apparait pas dans l'arbre de calques - getController().addCalqueInteraction(cqGRPEdition_); } /** @@ -508,6 +527,7 @@ } }); + // Layer des transect cqTransect_= new ZCalqueLigneBriseeEditable(); cqTransect_.setTitle(PivResource.getS("Transect")); cqTransect_.setName("cqTransect"); @@ -515,6 +535,7 @@ cqTransect_.setLineModel(1, new TraceLigneModel(TraceLigne.POINTILLE, 1, Color.YELLOW.darker())); cqTransect_.setIconModel(1, new TraceIconModel(TraceIcon.LOSANGE_PLEIN, 3, Color.YELLOW.darker())); cqTransect_.setDestructible(false); + cqTransect_.setEditor(editGeom_); } /** @@ -551,16 +572,6 @@ cqTransfImage_ = new ZCalqueImageRaster(); cqTransfImage_.setTitle(PivResource.getS("Image ortho")); cqTransfImage_.setName("cqTransfImg"); - - // Un calque de saisie du contour de grille. - cqCntGrilleEdition_=new ZCalqueEditionInteraction(); - cqCntGrilleEdition_.setName("cqCntGrilleEdition"); - cqCntGrilleEdition_.setTypeForme(DeForme.POLYGONE); - cqCntGrilleEdition_.setGele(true); - cqCntGrilleEdition_.setLineModel(new TraceLigneModel(TraceLigne.LISSE, 1, Color.RED)); - - // Ce calque peut \xEAtre ajout\xE9 d\xE9s le d\xE9but, il n'apparait pas dans l'arbre de calques - getController().addCalqueInteraction(cqCntGrilleEdition_); } /** Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -14,6 +14,7 @@ import javax.swing.SwingUtilities; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; +import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteractionTargetI; import org.fudaa.ebli.calque.edition.ZEditionAttributesDataI; @@ -41,6 +42,8 @@ private ZCalqueEditionInteraction cqEdition_; /** La palette pour la reprise. */ private PivPaletteEditPolygon palette_; + /** Le controller d'edition */ + private EditionController controller_; /** * Un editeur qui r\xE9agit \xE0 la saisie d'une forme pour la grille. @@ -138,6 +141,8 @@ public PivComputeGridDefinitionAction(PivVisuPanel _pn) { super(PivResource.getS("D\xE9finition de la grille..."), null, "PIV_GRID"); pnCalques_=_pn; + controller_=new EditionController(); + setCalqueInteraction(_pn.getEditionLayer()); setEnabled(false); } @@ -145,10 +150,8 @@ * Definit le calque d'interaction associ\xE9 \xE0 l'action. * @param _cq Le calque. Peut \xEAtre <tt>null</tt>. */ - public void setCalqueInteraction(ZCalqueEditionInteraction _cq) { + private void setCalqueInteraction(ZCalqueEditionInteraction _cq) { cqEdition_=_cq; - if (cqEdition_!=null) - cqEdition_.setListener(new EditionController()); } /** @@ -175,6 +178,7 @@ } + @Override public String getEnableCondition() { return PivResource.getS("Il doit exister au moins une image transform\xE9e"); } @@ -195,6 +199,9 @@ */ @Override public void doAfterDisplay() { + cqEdition_.setListener(controller_); + cqEdition_.setTypeForme(DeForme.POLYGONE); + cqEdition_.setFormEndedByDoubleClic(true); pnCalques_.setCalqueInteractionActif(cqEdition_); palette_.currentFormeChanged(null); } Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivEditAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivEditAction.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivEditAction.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -1,14 +1,13 @@ package org.fudaa.fudaa.piv.action; import java.awt.event.ActionEvent; -import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZSelectionEvent; import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.commun.EbliActionSimple; import org.fudaa.fudaa.piv.PivResource; import org.fudaa.fudaa.piv.PivVisuPanel; -import org.fudaa.fudaa.piv.layer.PivCntGridModel; -import org.fudaa.fudaa.piv.layer.PivOrthoPointsModel; +import org.fudaa.fudaa.piv.layer.PivEditableModel; /** * Une action pour \xE9diter la g\xE9om\xE9trie. Le projet est mis a jour suite @@ -35,22 +34,21 @@ * Affiche la fenetre d'\xE9dition pour les g\xE9om\xE9tries autoris\xE9es. * @param _e L'evenement pour l'action. */ + @Override public void actionPerformed(final ActionEvent _e) { - if (pnCalques_.getScene().getCalqueActif() instanceof ZCalqueAffichageDonneesInterface) { - ZCalqueAffichageDonneesInterface cq=(ZCalqueAffichageDonneesInterface) pnCalques_.getScene().getCalqueActif(); - if (cq.getLayerSelection()!=null && cq.getLayerSelection().isOnlyOnIndexSelected()) { + if (pnCalques_.getScene().getCalqueActif() instanceof ZCalqueEditable) { + ZCalqueEditable cq=(ZCalqueEditable) pnCalques_.getScene().getCalqueActif(); + if (cq.getLayerSelection()!=null && !cq.getLayerSelection().isEmpty()) { cq.editSelected(); - if (cq.modeleDonnees() instanceof PivOrthoPointsModel) { - ((PivOrthoPointsModel)cq.modeleDonnees()).geometryChanged(); + if (cq.modeleDonnees() instanceof PivEditableModel) { + ((PivEditableModel)cq.modeleDonnees()).geometryChanged(); } - else if(cq.modeleDonnees() instanceof PivCntGridModel) { - ((PivCntGridModel)cq.modeleDonnees()).geometryChanged(); - } } } } + @Override public String getEnableCondition() { return PivResource.getS("S\xE9lectionner une g\xE9om\xE9trie"); } @@ -60,11 +58,13 @@ * @param _evt L'evenement de selection. */ public void selectionChanged(ZSelectionEvent _evt) { - if (pnCalques_.getScene().getCalqueActif() instanceof ZCalqueAffichageDonneesInterface) { - ZCalqueAffichageDonneesInterface cq=(ZCalqueAffichageDonneesInterface) pnCalques_.getScene().getCalqueActif(); - boolean b=cq.getLayerSelection()!=null && cq.getLayerSelection().isOnlyOnIndexSelected(); - b&=cq.modeleDonnees() instanceof PivOrthoPointsModel || cq.modeleDonnees() instanceof PivCntGridModel; - super.setEnabled(b); + boolean b=false; + if (pnCalques_.getScene().getCalqueActif() instanceof ZCalqueEditable) { + ZCalqueEditable cq=(ZCalqueEditable) pnCalques_.getScene().getCalqueActif(); + + b=cq.getLayerSelection()!=null && !cq.getLayerSelection().isEmpty(); + b&=cq.getEditor()!=null && (cq.getModelEditable() instanceof PivEditableModel); } + super.setEnabled(b); } } Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivNewTransectAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivNewTransectAction.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivNewTransectAction.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -0,0 +1,308 @@ +/* + * @creation 3 juil. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.piv.action; + +import com.memoire.bu.BuButton; +import com.memoire.bu.BuDesktop; +import com.memoire.fu.FuLog; +import java.awt.Container; +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.AbstractButton; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JInternalFrame; +import javax.swing.SwingUtilities; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; +import org.fudaa.ebli.calque.dessin.DeForme; +import org.fudaa.ebli.calque.edition.BPaletteEdition; +import org.fudaa.ebli.calque.edition.BPaletteEditionClientInterface; +import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; +import org.fudaa.ebli.calque.edition.ZCalqueEditionInteractionTargetI; +import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; +import org.fudaa.ebli.calque.edition.ZEditionAttributesDataI; +import org.fudaa.ebli.calque.edition.ZEditorLigneBriseePanel; +import org.fudaa.ebli.commun.EbliActionPaletteAbstract; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrPolygone; +import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.fudaa.piv.PivResource; +import org.fudaa.fudaa.piv.PivVisuPanel; +import org.fudaa.fudaa.piv.metier.PivTransect; + +/** + * Une action pour cr\xE9er un transect. Cette action est + * utilis\xE9e comme controlleur \xE0 la palette et au calque d'\xE9dition d\xE9di\xE9. + * + * @author Bertrand Marchand (mar...@de...) + * @version $Id$ + */ +public class PivNewTransectAction extends EbliActionPaletteAbstract { + + private PivVisuPanel pnCalques_; + /** Le calque d'\xE9dition. */ + private ZCalqueEditionInteraction cqEdition_; + /** Le calsue des ortho points */ + private ZCalqueLigneBriseeEditable cqTransect_; + /** La palette */ + private BPaletteEdition palette_; + /** Le panneau d'edition des param\xE8tres du multipoint */ + private ZEditorLigneBriseePanel pnParams; + /** Le controller d'edition */ + private EditionController controller_; + /** Le listener de propri\xE9t\xE9 du calque d'interaction */ + private EditionLayerPropertyListener propListener_; + + /** + * Le controlleur pour l'\xE9dition. + */ + class EditionController implements ZCalqueEditionInteractionTargetI { + + public void atomicChanged() { + // On notifie la palette que la forme a chang\xE9, pour activer ou non le bouton fin d'edition. + FuLog.debug("atomicChanged"); + pnParams.atomicChanged(); + } + + /** Non utilis\xE9 */ + public boolean addNewMultiPoint(GrPolyligne _pg, ZEditionAttributesDataI _data) { + return true; + } + + /** Non utilis\xE9 */ + public void setMessage(String _s) { + } + + /** Non utilis\xE9 */ + public void unsetMessage() { + } + + /** Non utilis\xE9 */ + public boolean addNewPolygone(GrPolygone _pg, ZEditionAttributesDataI _data) { + return true; + } + + /** Non utilis\xE9 */ + public boolean addNewPoint(GrPoint _point, ZEditionAttributesDataI _data) { + return true; + } + + /** Non utilis\xE9 */ + public boolean addNewRectangle(GrPoint _pt, GrPoint _pt2, ZEditionAttributesDataI _data) { + return true; + } + + /** + * Ajoute la forme en cours au calque. + * @param _pl La polyligne + * @param _data Les valeurs associ\xE9es a chaque point. + * @return Si false, la saisie n'est pas stopp\xE9e. + */ + public boolean addNewPolyligne(GrPolyligne _pl, ZEditionAttributesDataI _data) { + if (_pl.sommets_.nombre() < 2) { + pnCalques_.getCtuluUI().error(PivResource.getS("Le nombre de points doit \xEAtre sup\xE9rieur \xE0 1.")); + return false; + } + + // Initialisation du Z polyligne + for (int i=0; i<_pl.sommets_.nombre(); i++) { + _pl.sommet(i).z_=(Double) _data.getValue(PivVisuPanel.ATT_IND_ZR, i); + } + + PivTransect transect=new PivTransect(); + transect.setStraight(_pl); + pnCalques_.getProject().setTransect(transect); + hideWindow(); + + return true; + } + + /** Non utilis\xE9 */ + public void pointMove(double _x, double _y) { + } + } + + /** + * Le listener qui r\xE9agit en fonction du gel du calque d'interaction. + */ + class EditionLayerPropertyListener implements PropertyChangeListener { + + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("gele")) { + if (pnParams!=null) + pnParams.calqueInteractionChanged(); + } + } + } + + /** + * Classe g\xE9rant la disparition et la r\xE9apparition du panel quand la fen\xEAtre + * principale est r\xE9duite. + */ + class Piv2dFrameListener extends InternalFrameAdapter { + public void internalFrameActivated(final InternalFrameEvent _e) { + if(window_!=null) + window_.setVisible(true); + } + public void internalFrameDeactivated(final InternalFrameEvent _e) { + if(window_!=null) + window_.setVisible(false); + } + } + + /** + * Constructeur de l'action, avec le panneau des calques. + * @param _pn Le panneau des calques. + */ + public PivNewTransectAction(PivVisuPanel _pn) { + super(PivResource.getS("D\xE9finition d'un transect..."), null, "CREATE_TRANSECT"); + pnCalques_=_pn; + controller_=new EditionController(); + propListener_=new EditionLayerPropertyListener(); + setCalqueInteraction(_pn.getEditionLayer()); + + setEnabled(false); + } + + /** + * Definit le calque d'interaction associ\xE9 \xE0 l'action. + * @param _cq Le calque. Peut \xEAtre <tt>null</tt>. + */ + private void setCalqueInteraction(ZCalqueEditionInteraction _cq) { + if (cqEdition_!=null) { + cqEdition_.removePropertyChangeListener("gele", propListener_); + } + + cqEdition_=_cq; + + if (cqEdition_!=null) { + cqEdition_.addPropertyChangeListener("gele", propListener_); + } + } + + /** + * Definit le calque contenant le transect. + * @param _cq Le calque du transect. + */ + public void setTransectLayer(ZCalqueLigneBriseeEditable _cq) { + cqTransect_=_cq; + } + + /** + * Surcharg\xE9 pour demander \xE0 l'utilisateur s'il souhaite modifier le contour. + */ + @Override + public void changeAction() { + if (isSelected()) + pnCalques_.setViewMode(PivVisuPanel.MODE_REAL_VIEW); + + // Si pas de points ou ok pour les supprimer, on lance l'action. + if (pnCalques_.getProject().getTransect()==null || + pnCalques_.getCtuluUI().question( + PivResource.getS("Modification du transect"), + PivResource.getS("Un transect existe d\xE9j\xE0. Voulez vous le remplacer ?"))) { + pnCalques_.getProject().setTransect(null); + super.changeAction(); + } + // Pas de modification. + else { + setSelected(false); + } + } + + @Override + public String getEnableCondition() { + return PivResource.getS("Il doit exister au moins une image transform\xE9e"); + } + + /** + * Surchag\xE9 pour d\xE9finir le desktop au moment de l'affichage. + */ + @Override + public void showWindow() { + // Necessaire, sinon la palette est visualis\xE9e en externe. Ne peut \xEAtre fait avant, car le desktop n'est pas + // encore existant. + setDesktop((BuDesktop)SwingUtilities.getAncestorOfClass(BuDesktop.class,pnCalques_)); + super.showWindow(); + } + + /** + * Surcharg\xE9 pour activer le calque d'\xE9dition apr\xE8s affichage. + */ + @Override + public void doAfterDisplay() { + cqEdition_.setListener(controller_); + cqEdition_.setTypeForme(DeForme.LIGNE_BRISEE); + cqEdition_.setFormEndedByDoubleClic(true); + pnCalques_.setCalqueInteractionActif(cqEdition_); + } + + /** + * Surcharg\xE9 pour rendre inactif le calque d'\xE9dition apr\xE8s que la palette a + * \xE9t\xE9 ferm\xE9e. + */ + @Override + public void hideWindow() { + // Le calque d'interaction est rendu inactif. + pnCalques_.unsetCalqueInteractionActif(cqEdition_); + if (cqEdition_!=null) + cqEdition_.cancelEdition(); + setSelected(false); + super.hideWindow(); + } + + @Override + public JComponent buildContentPane() { + if (palette_==null){ + palette_=new BPaletteEdition(pnCalques_.getScene()); + palette_.setTargetClient(new BPaletteEditionClientInterface() { + public void doAction(String _com, BPaletteEdition _emitter) { + if (BPaletteEdition.ADD_POLYLINE_ACTION.equals(_com)) { + AbstractButton bt=_emitter.getSelectedButton(); + if (bt==null) { + palette_.setEditorPanel(null); + } + else { + BuButton btValider=new BuButton(PivResource.PIV.getIcon("valider"),PivResource.getS("Fin de saisie")); + btValider.setToolTipText(PivResource.getS("Terminer la saisie des points et valider")); + + cqEdition_.setTypeForme(DeForme.LIGNE_BRISEE); + pnParams=new ZEditorLigneBriseePanel(palette_,cqEdition_); + pnParams.replaceAddButton(btValider); + pnParams.setCoordinateDefinitions(pnCalques_.getCoordinateDefinitions()); + pnParams.targetChanged(cqTransect_); + pnParams.setPreferredSize(new Dimension(300,300)); + palette_.setEditorPanel(pnParams.getComponent()); + cqEdition_.setFeatures(pnParams.getAttributeContainer()); + } + Object o = SwingUtilities.getAncestorOfClass(JInternalFrame.class, palette_); + if (o == null) { + o = SwingUtilities.getAncestorOfClass(JDialog.class, palette_); + if (o != null) { + ((JDialog) o).pack(); + } + } + else { + ((JInternalFrame) o).pack(); + } + } + } + }); + palette_.setButtonVisible(null, false); + palette_.setButtonSelected(BPaletteEdition.ADD_POLYLINE_ACTION); + + // Ecoute de la fen\xEAtre principale pour pouvoir se r\xE9duire avec elle + final Container c = SwingUtilities.getAncestorOfClass(JInternalFrame.class, pnCalques_); + if (c instanceof JInternalFrame) + ((JInternalFrame) c).addInternalFrameListener(new Piv2dFrameListener()); + } + return palette_.getComponent(); + } +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivNewTransectAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -21,6 +21,7 @@ import javax.swing.SwingUtilities; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; +import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.BPaletteEdition; import org.fudaa.ebli.calque.edition.BPaletteEditionClientInterface; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; @@ -55,6 +56,10 @@ private BPaletteEdition palette_; /** Le panneau d'edition des param\xE8tres du multipoint */ private ZEditorLigneBriseePanel pnParams; + /** Le controller d'edition */ + private EditionController controller_; + /** Le listener de propri\xE9t\xE9 du calque d'interaction */ + private EditionLayerPropertyListener propListener_; /** * Le controlleur pour l'\xE9dition. @@ -143,7 +148,20 @@ public void pointMove(double _x, double _y) { } } + + /** + * Le listener qui r\xE9agit en fonction du gel du calque d'interaction. + */ + class EditionLayerPropertyListener implements PropertyChangeListener { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("gele")) { + if (pnParams!=null) + pnParams.calqueInteractionChanged(); + } + } + } + /** * Classe g\xE9rant la disparition et la r\xE9apparition du panel quand la fen\xEAtre * principale est r\xE9duite. @@ -166,6 +184,11 @@ public PivOrthoGRPAction(PivVisuPanel _pn) { super(PivResource.getS("Points de r\xE9f\xE9rence..."), null, "ORTHO_GRP"); pnCalques_=_pn; + + controller_=new EditionController(); + propListener_=new EditionLayerPropertyListener(); + setCalqueInteraction(_pn.getEditionLayer()); + setEnabled(false); } @@ -173,24 +196,15 @@ * Definit le calque d'interaction associ\xE9 \xE0 l'action. * @param _cq Le calque. Peut \xEAtre <tt>null</tt>. */ - public void setCalqueInteraction(ZCalqueEditionInteraction _cq) { + private void setCalqueInteraction(ZCalqueEditionInteraction _cq) { + if (cqEdition_!=null) { + cqEdition_.removePropertyChangeListener("gele", propListener_); + } + cqEdition_=_cq; - if (cqEdition_!=null) - cqEdition_.setListener(new EditionController()); - - cqEdition_.addPropertyChangeListener("gele", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - cqEditionPropertyChange(evt); - } - }); -// if (palette_!=null) -// palette_.setCalqueInteraction(_cq); - } - - private void cqEditionPropertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("gele")) { - pnParams.calqueInteractionChanged(); + if (cqEdition_!=null) { + cqEdition_.addPropertyChangeListener("gele", propListener_); } } @@ -245,6 +259,9 @@ */ @Override public void doAfterDisplay() { + cqEdition_.setListener(controller_); + cqEdition_.setTypeForme(DeForme.MULTI_POINT); + cqEdition_.setFormEndedByDoubleClic(false); pnCalques_.setCalqueInteractionActif(cqEdition_); } @@ -277,6 +294,7 @@ BuButton btValider=new BuButton(PivResource.PIV.getIcon("valider"),PivResource.getS("Fin de saisie")); btValider.setToolTipText(PivResource.getS("Terminer la saisie des points et valider")); + cqEdition_.setTypeForme(DeForme.MULTI_POINT); pnParams=new ZEditorLigneBriseePanel(palette_,cqEdition_); pnParams.replaceAddButton(btValider); pnParams.setCoordinateDefinitions(pnCalques_.getCoordinateDefinitions()); Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -14,9 +14,9 @@ * Un modele pour le contour de grille * * @author Bertrand Marchand (mar...@de...) - * @version $Id:$ + * @version $Id$ */ -public class PivCntGridModel extends ZModeleLigneBriseeEditable { +public class PivCntGridModel extends ZModeleLigneBriseeEditable implements PivEditableModel { // L'attribut utilis\xE9 pour l'affichage des lignes suivant une palette de couleurs. // public static final GISAttributeInteger ATT_IND_COL=new GISAttributeInteger("color",false); // Le projet. Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivEditableModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivEditableModel.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivEditableModel.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -0,0 +1,18 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.fudaa.fudaa.piv.layer; + +/** + * Un modele de calque editable au sens PIV. Ce type de modele r\xE9agit \xE0 la commande + * d'\xE9dition. + * @author Bertrand Marchand (mar...@de...) + */ +public interface PivEditableModel { + + /** + * Appel\xE9 en cas d'\xE9dition de la g\xE9om\xE9trie => On remet a jour le projet + */ + void geometryChanged(); +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivEditableModel.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -23,7 +23,7 @@ * @author Bertrand Marchand (mar...@de...) * @version $Id$ */ -public class PivOrthoPointsModel extends ZModeleMultiPointEditable { +public class PivOrthoPointsModel extends ZModeleMultiPointEditable implements PivEditableModel { /** L'attribut utilis\xE9 pour la saisie de X r\xE9el. */ public static final GISAttributeDouble ATT_IND_XR=new GISAttributeDouble(PivResource.getS("X r\xE9el"),true) { Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivTransectModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivTransectModel.java 2011-09-27 15:53:27 UTC (rev 6453) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivTransectModel.java 2011-09-27 16:05:20 UTC (rev 6454) @@ -4,11 +4,10 @@ import org.fudaa.ctulu.gis.GISAttribute; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; -import org.fudaa.ebli.geometrie.GrPolygone; import org.fudaa.ebli.geometrie.GrPolyligne; import org.fudaa.fudaa.piv.PivVisuPanel; -import org.fudaa.fudaa.piv.metier.PivCntGrid; import org.fudaa.fudaa.piv.metier.PivProject; +import org.fudaa.fudaa.piv.metier.PivTransect; /** * Un modele pour la visualisation d'un transect @@ -16,7 +15,7 @@ * @author Bertrand Marchand (mar...@de...) * @version $Id$ */ -public class PivTransectModel extends ZModeleLigneBriseeEditable { +public class PivTransectModel extends ZModeleLigneBriseeEditable implements PivEditableModel { // L'attribut utilis\xE9 pour l'affichage des lignes suivant une palette de couleurs. // public static final GISAttributeInteger ATT_IND_COL=new GISAttributeInteger("color",false); // Le projet. @@ -63,26 +62,32 @@ // zl.getModel(PivVisuPanel.ATT_LABEL) .setObject(0, lbData, null); } } - + /** * Appel\xE9 en cas d'\xE9dition de la g\xE9om\xE9trie => On remet a jour le projet */ + @Override public void geometryChanged() { + + PivTransect trans=null; GISZoneCollectionLigneBrisee zp=(GISZoneCollectionLigneBrisee)getGeomData(); + + if (zp.getNbGeometries() != 0) { + zp.initZCoordinate(0); + CoordinateSequence seq=zp.getCoordinateSequence(0); + int nbPts=seq.size(); - CoordinateSequence seq=zp.getCoordinateSequence(0); - - int nbPts=seq.size(); - if (isGeometryFermee(0)) { - nbPts--; + GrPolyligne pl=new GrPolyligne(); + for (int i=0; i < nbPts; i++) { + pl.sommets_.ajoute(seq.getOrdinate(i, 0), seq.getOrdinate(i, 1), seq.getOrdinate(i, 2)); + } + trans=prj_.getTransect(); + if (trans == null) { + trans=new PivTransect(); + } + trans.setStraight(pl); } - GrPolygone pl=new GrPolygone(); - for (int i=0; i<nbPts; i++) { - pl.sommets_.ajoute(seq.getX(i),seq.getY(i),0); - } - PivCntGrid cnt=prj_.getComputeCntGrid(); - cnt.setContour(pl); - prj_.setComputeCntGrid(cnt); + prj_.setTransect(trans); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |