From: <bma...@us...> - 2009-02-26 21:13:58
|
Revision: 4501 http://fudaa.svn.sourceforge.net/fudaa/?rev=4501&view=rev Author: bmarchan Date: 2009-02-26 21:13:43 +0000 (Thu, 26 Feb 2009) Log Message: ----------- Correction sur trac?\195?\169 d'orientation des lignes. Certaines fleches n'apparaissaient pas. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.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 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -20,6 +20,7 @@ import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrVecteur; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; @@ -211,6 +212,7 @@ 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)){ @@ -228,41 +230,31 @@ 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_){ - // La point de la fleche doit petre LISSE \\ - // Calcule du vecteur entre les deux points - double vecX=ptDest.x_-ptOrig.x_; - double vecY=ptDest.y_-ptOrig.y_; - // Normalisation et rectification de l'erreur d'arrondi. Puissance et - // racine carr\xE9 entrainent des erreurs d'arrondis visible, donc - // inutilisables. - while(vecX>10||vecY>10||vecX<-10||vecY<-10){ - vecX=vecX/2; - vecY=vecY/2; - } + GrVecteur vct=ptDest.soustraction(ptOrig); + vct.autoNormaliseXY(); + vct.autoMultiplication(20); // Cr\xE9ation d'un point interm\xE9diare - double ptInterX=ptDest.x_-vecX; - double ptInterY=ptDest.y_-vecY; - // La barre de la fleche est normale - tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptInterX, ptInterY); + double xorig=ptDest.x_-vct.x_; + double yorig=ptDest.y_-vct.y_; // La point est lisse int typeTrait=tl.getTypeTrait(); tl.setTypeTrait(TraceLigne.LISSE); - tl.dessineFleche(_g, (int)ptInterX, (int)ptInterY, (int)ptDest.x_, (int)ptDest.y_, 11, 5); + tl.dessinePointe(_g, (int)xorig, (int)yorig, (int)ptDest.x_, (int)ptDest.y_, 11, 5); tl.setTypeTrait(typeTrait); } - else - tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); - // Dessin du reste de la ligne - j--; + + // Dessin des segments 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_); + ptDest.initialiseAvec(ptOrig); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -345,33 +345,57 @@ if (!initialisationGraphics(_g)) { return; } + _g.drawLine(_x1, _y1, _x2, _y2); + _g.setColor(oldColor); + _g.setStroke(oldStroke); + + dessinePointe(_g, _x1, _y1, _x2, _y2, _retour, _ecart); + } + + /** + * Trac\xE9 d'une pointe de fleche uniquement, centr\xE9e sur (xpointe,ypointe). + * La direction est donn\xE9e par le deuxieme point (xorig,yorig). + * @param _g Le contexte graphique + * @param _xorig Le x du point d'origine, donnant la direction. + * @param _yorig Le y du point d'origine, donnant la direction. + * @param _xpointe Le x de la pointe de fleche. + * @param _ypointe Le y de la pointe de fleche. + * @param _ecart la distance des extremites de la fleche par rapport au segment + * @param _retour la longueur du retour de la fleche + */ + public void dessinePointe(final Graphics2D _g, final int _xorig, final int _yorig, final int _xpointe, final int _ypointe, + final int _retour, final int _ecart) { + final Color oldColor = _g.getColor(); + final Stroke oldStroke = _g.getStroke(); + if (!initialisationGraphics(_g)) { + return; + } +// _g.drawLine(_xorig, _yorig, _xpointe, _ypointe); if (model_.typeTrait_ == POINT_MARQUE) { - _g.drawLine(_x1, _y1, _x2, _y2); - _g.drawRect(_x1 - 1, _y1 - 1, 2, 2); - _g.drawRect(_x2 - 1, _y2 - 1, 2, 2); + _g.drawRect(_xorig - 1, _yorig - 1, 2, 2); + _g.drawRect(_xpointe - 1, _ypointe - 1, 2, 2); } else { - _g.drawLine(_x1, _y1, _x2, _y2); // la norme du vecteur - final double norme = CtuluLibGeometrie.getDistance(_x1, _y1, _x2, _y2); + final double norme = CtuluLibGeometrie.getDistance(_xorig, _yorig, _xpointe, _ypointe); // Si le retour de la fleche est trop grand on le diminue au 3 de la fleche if (norme == 0) { return; } final double coef = (norme - _retour) / norme; // xd et yd sont les points du traits correspondant a l'extremite des retours de la fleche - final double xd = coef * (_x2 - _x1) + _x1; - final double yd = coef * (_y2 - _y1) + _y1; + final double xd = coef * (_xpointe - _xorig) + _xorig; + final double yd = coef * (_ypointe - _yorig) + _yorig; // vecteur normal au trait - final double xn = (_y1 - _y2) / norme; - final double yn = (_x2 - _x1) / norme; + final double xn = (_yorig - _ypointe) / norme; + final double yn = (_xpointe - _xorig) / norme; // Xe et Ye sont les coordonnees d'une extremite de la fleche double xe = _ecart * xn + xd; double ye = _ecart * yn + yd; - _g.drawLine(_x2, _y2, (int) xe, (int) ye); + _g.drawLine(_xpointe, _ypointe, (int) xe, (int) ye); // Xe et Ye sont les coordonnees de l'autre extremite xe = _ecart * (-xn) + xd; ye = _ecart * (-yn) + yd; - _g.drawLine(_x2, _y2, (int) xe, (int) ye); + _g.drawLine(_xpointe, _ypointe, (int) xe, (int) ye); } _g.setColor(oldColor); _g.setStroke(oldStroke); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -291,7 +291,7 @@ if (pnDecimation_==null) pnDecimation_=new MdlDecimationPanel(); - CtuluCommandComposite cmd=new CtuluCommandComposite(); + CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("D\xE9cimer")); String title; if (getScene().isAtomicMode()) @@ -324,10 +324,10 @@ mdl.decimate(getScene().sceneId2LayerId(idxGeom), idxdeb, idxfin, pnDecimation_.isNbPtsGiven() ? 0:1, pnDecimation_ .getNbPts(), pnDecimation_.getDistance(), cmd); } - - super.getScene().clearSelection(); } } + getScene().clearSelection(); + if(getMng()!=null) getMng().addCmd(cmd.getSimplify()); } @@ -339,7 +339,7 @@ if (pnRaffinement_==null) pnRaffinement_=new MdlRefinementPanel(); - CtuluCommandComposite cmd=new CtuluCommandComposite(); + CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("Raffiner")); String title; if (getScene().isAtomicMode()) @@ -348,7 +348,7 @@ title=MdlResource.getS("Raffinement sur une polyligne"); if (pnRaffinement_.afficheModaleOk(pn_.getFrame(), title)) { - // Les g\xE9om\xE9tries. On n'a plusieurs g\xE9om\xE9tries que dans le cas o\xF9 on n'est + // Les g\xE9om\xE9tries. On a plusieurs g\xE9om\xE9tries que dans le cas o\xF9 on n'est // pas en mode sommet. int[] geoms=getScene().getSelectionHelper().getSelectedIndexes(); for (int i=0; i<geoms.length; i++) { @@ -372,9 +372,8 @@ mdl.refine(getScene().sceneId2LayerId(idxGeom), idxdeb, idxfin, pnRaffinement_.isNbPtsGiven() ? 0:1, pnRaffinement_ .getNbPts(), pnRaffinement_.getDistance(), cmd); } - - super.getScene().clearSelection(); } + getScene().clearSelection(); } if(getMng()!=null) getMng().addCmd(cmd.getSimplify()); @@ -632,7 +631,6 @@ if (mdld instanceof MdlModel2dLine) ((MdlModel2dLine)mdld).invertOrientation(getScene().sceneId2LayerId(geoms[i]), cmd); } - super.getScene().clearSelection(); if (getMng()!=null) getMng().addCmd(cmd.getSimplify()); } 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 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -263,7 +263,6 @@ * @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(); @@ -279,15 +278,16 @@ 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); + values.setObject(j, values.getObjectValueAt(values.getSize()-1-j), null); + values.setObject(values.getSize()-1-j, valTmp, null); } } // Fires fireModelAction(_idxGeom, geom, ZModelListener.GEOMETRY_ACTION_MODIFY); fireAttributeValueChangeAction(this, -1, null, _idxGeom, null); + if (_cmd!=null){ - cmd.addCmd(new CtuluNamedCommand() { + _cmd.addCmd(new CtuluNamedCommand() { public void redo() { invertOrientation(_idxGeom, null); } @@ -298,7 +298,6 @@ 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. |