From: <emm...@us...> - 2008-11-19 09:52:17
|
Revision: 4225 http://fudaa.svn.sourceforge.net/fudaa/?rev=4225&view=rev Author: emmanuel_martin Date: 2008-11-19 09:52:12 +0000 (Wed, 19 Nov 2008) Log Message: ----------- bugfix #88 Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-11-18 21:54:47 UTC (rev 4224) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-11-19 09:52:12 UTC (rev 4225) @@ -574,45 +574,55 @@ if (nbPoints <= 0) { continue; } - - final GrPoint ptOri = new GrPoint(); - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); if (!isRapide()) initTrace(ligneModel, i); - final GrPoint ptDest = new GrPoint(); - // Dessine le premier segment avec une fleche si l'option est activ\xE9e - if(nbPoints>=2){ - modele_.point(ptDest, i, nbPoints - 2); - ptDest.autoApplique(versEcran); - // Pour les polygone \xE7a se passe plus loin - if(showLineOrientation_&&!modele_.isGeometryFermee(i)) - tl.dessineFleche(_g, (int)ptDest.x_, (int)ptDest.y_, (int)ptOri.x_, (int)ptOri.y_, 5, 3); - else - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - ptOri.initialiseAvec(ptDest); + + if(nbPoints <2) + continue; + + // Affichage de la polyligne ou polygone \\ + /* + * On part de la fin pour commencer \xE0 afficher la fleche si l'option est + * activ\xE9e. Pour \xEAtre sur que la fleche s'affiche correctement, on + * recherche deux points non confondus. + */ + GrPoint ptDest=new GrPoint(); + GrPoint ptOrig=new GrPoint(); + int j; + // Si c'est une polyligne on prend le dernier point si c'est un polygone, + // on prend le premier (le permier et le dernier doivent \xEAtre confondus). + if(modele_.isGeometryFermee(i)){ + modele_.point(ptDest, i, 0); + modele_.point(ptOrig, i, nbPoints-1); + j=nbPoints-1; } - // Dessine le reste - for (int j = nbPoints - 3; j >= 0; j--) { - // le point de dest est initialise - modele_.point(ptDest, i, j); - ptDest.autoApplique(versEcran); - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - ptOri.initialiseAvec(ptDest); + else { + modele_.point(ptDest, i, nbPoints-1); + modele_.point(ptOrig, i, nbPoints-2); + j=nbPoints-2; } - if (modele_.isGeometryFermee(i)) { - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); - // La fl\xE8che pour les polygone - if(showLineOrientation_) - tl.dessineFleche(_g, (int)ptOri.x_, (int)ptOri.y_, (int)ptDest.x_, (int)ptDest.y_, 5, 3); - else - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + // Recherche du point pr\xE9c\xE9dent non identique + while(ptOrig.x_==ptDest.x_&&ptOrig.y_==ptDest.y_&&j>0) + modele_.point(ptOrig, i, --j); + if(j==0&&(ptOrig.x_==ptDest.x_&&ptOrig.y_==ptDest.y_)) + continue; + ptOrig.autoApplique(versEcran); + ptDest.autoApplique(versEcran); + // Dessin de la fleche + if(showLineOrientation_) + tl.dessineFleche(_g, (int)ptOrig.x_, (int)ptOrig.y_, (int)ptDest.x_, (int)ptDest.y_, 11, 5); + else + tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); + // Dessin du reste de la ligne + j--; + for(;j>=0;j--){ + ptDest.initialiseAvec(ptOrig); + modele_.point(ptOrig, i, j); + ptOrig.autoApplique(versEcran); + tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); } - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); } - + // on trace les icones apres pour qu'ils soient dessin\xE9s au-dessus des lignes. if (icone != null && !isRapide()) { for (int i = nombre - 1; i >= 0; i--) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2008-11-18 21:54:47 UTC (rev 4224) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2008-11-19 09:52:12 UTC (rev 4225) @@ -16,6 +16,7 @@ import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluNamedCommand; +import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; @@ -262,6 +263,8 @@ * @param _cmd Le container de commandes. */ public void invertOrientation(final int _idxGeom, CtuluCommandContainer _cmd){ + CtuluCommandComposite cmd=new CtuluCommandComposite(); + // Inversion des coordonn\xE9es LineString geom=(LineString)getGeomData().getGeometry(_idxGeom); CoordinateSequence seq=geom.getCoordinateSequence(); for(int i=0;i<seq.size()/2;i++) @@ -270,9 +273,21 @@ seq.setOrdinate(i, j, seq.getOrdinate(seq.size()-1-i, j)); seq.setOrdinate(seq.size()-1-i, j, valTmp); } + // Inversion des attributs + for(int i=0;i<getAttributeNb();i++) + if(getAttribute(i).isAtomicValue()){ + GISAttributeModel values=(GISAttributeModel) getDataModel(i).getObjectValueAt(_idxGeom); + for(int j=0;j<values.getSize()/2;j++){ + Object valTmp=values.getObjectValueAt(j); + values.setObject(j, values.getObjectValueAt(values.getSize()-1-j), cmd); + values.setObject(values.getSize()-1-j, valTmp, cmd); + } + } + // Fires fireModelAction(_idxGeom, geom, ZModelListener.GEOMETRY_ACTION_MODIFY); - if (_cmd!=null) - _cmd.addCmd(new CtuluNamedCommand() { + fireAttributeValueChangeAction(this, -1, null, _idxGeom, null); + if (_cmd!=null){ + cmd.addCmd(new CtuluNamedCommand() { public void redo() { invertOrientation(_idxGeom, null); } @@ -283,5 +298,7 @@ return FudaaLib.getS("Inversion de l'orientation"); } }); + _cmd.addCmd(cmd.getSimplify()); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |