From: <de...@us...> - 2012-05-29 23:49:15
|
Revision: 7249 http://fudaa.svn.sourceforge.net/fudaa/?rev=7249&view=rev Author: deniger Date: 2012-05-29 23:49:08 +0000 (Tue, 29 May 2012) Log Message: ----------- Modified Paths: -------------- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java Added Paths: ----------- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java Added: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java =================================================================== --- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java (rev 0) +++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java 2012-05-29 23:49:08 UTC (rev 7249) @@ -0,0 +1,14 @@ +package org.fudaa.dodico.crue.common; + +import org.fudaa.dodico.crue.config.CrueConfigMetier; + +/** + * + * @author deniger ( genesis) + */ +public class XtComparator extends DoubleComparator{ + + public XtComparator(CrueConfigMetier configMetier) { + super(configMetier.getEpsilon("xt")); + } +} Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java =================================================================== --- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java 2012-05-29 22:03:21 UTC (rev 7248) +++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java 2012-05-29 23:49:08 UTC (rev 7249) @@ -12,31 +12,32 @@ * @author deniger ( genesis) */ public class SectionConfiguration { - - TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_ARRONDI, 2, Color.LIGHT_GRAY); + + TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_ARRONDI, 3, Color.BLUE); LabelConfiguration labelConfiguration = new LabelConfiguration(); private final VisuConfiguration parent; - + public SectionConfiguration(VisuConfiguration parent) { labelConfiguration.alignment = SwingConstants.WEST; iconModel.setTypeLigne(TraceLigne.LISSE); iconModel.setEpaisseurLigne(1f); + iconModel.setBackgroundColor(Color.WHITE); labelConfiguration.distance = 5; this.parent = parent; } - + public LabelConfiguration getLabelConfiguration() { return labelConfiguration; } - + public boolean isInactiveEMHVisible() { return parent.isInactiveEMHVisible(); } - + public int getDiameter() { return iconModel.getTaille(); } - + public void initTraceIcon(TraceIconModel _ligne, CatEMHSection section) { _ligne.updateData(iconModel); } Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java =================================================================== --- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java 2012-05-29 22:03:21 UTC (rev 7248) +++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java 2012-05-29 23:49:08 UTC (rev 7249) @@ -2,7 +2,6 @@ import java.awt.Color; import javax.swing.SwingConstants; -import org.fudaa.dodico.crue.metier.emh.CatEMHSection; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; @@ -15,27 +14,42 @@ public class TraceConfiguration { TraceLigneModel lineModel = new TraceLigneModel(TraceLigne.LISSE, 1.5f, Color.BLACK); - TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_PLEIN, 4, Color.BLACK); - LabelConfiguration labelConfiguration = new LabelConfiguration(); + TraceIconModel iconModel = new TraceIconModel(TraceIcon.CROIX, 4, Color.RED); + LabelConfiguration litLabelConfiguration = new LabelConfiguration(); + LabelConfiguration sectionLabelConfiguration = new LabelConfiguration(); private final VisuConfiguration parent; boolean profilVueDeAmont = false; + private int angleInDegree = 30; + //SwingConstants.RIGHT ou LEFT ou CENTER. + int sectionLabelPosition = SwingConstants.RIGHT; public boolean isProfilVueDeAmont() { return profilVueDeAmont; } public TraceConfiguration(VisuConfiguration parent) { - labelConfiguration.alignment = SwingConstants.WEST; + litLabelConfiguration.alignment = SwingConstants.NORTH; + sectionLabelConfiguration.alignment = SwingConstants.EAST; iconModel.setTypeLigne(TraceLigne.LISSE); iconModel.setEpaisseurLigne(1f); - labelConfiguration.distance = 5; + litLabelConfiguration.distance = 5; this.parent = parent; } - public LabelConfiguration getLabelConfiguration() { - return labelConfiguration; + public int getSectionLabelPosition() { + return sectionLabelPosition; } + + public LabelConfiguration getLitLabelConfiguration() { + return litLabelConfiguration; + } + public LabelConfiguration getSectionLabelConfiguration() { + return sectionLabelConfiguration; + } + + + public void initTraceLigne(TraceLigneModel _ligne, int _idxPoly) { _ligne.updateData(lineModel); } @@ -44,14 +58,37 @@ return parent.isInactiveEMHVisible(); } - public void initTraceIcon(TraceIconModel icon, CatEMHSection section) { + public void initTraceIcon(TraceIconModel icon, int idxBranche) { icon.updateData(iconModel); } /** * @return angle en radians. */ - public double getAngle() { - return Math.toRadians(30); + public double getAngleInRadians() { + return Math.toRadians(angleInDegree); } + boolean litLabelsPainted = true; + boolean sectionLabelPainted = true; + + public boolean isLitLabelsPainted() { + return litLabelsPainted; + } + + public void setLitLabelsPainted(boolean litLabelsPainted) { + this.litLabelsPainted = litLabelsPainted; + } + + public void setSectionLabelPainted(boolean sectionLabelPainted) { + this.sectionLabelPainted = sectionLabelPainted; + } + + public boolean isSectionLabelPainted() { + return sectionLabelPainted; + } + + public void setAngleInDegree(int angleInDegree) { + this.angleInDegree = angleInDegree; + } + } Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java =================================================================== --- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java 2012-05-29 22:03:21 UTC (rev 7248) +++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java 2012-05-29 23:49:08 UTC (rev 7249) @@ -1,24 +1,31 @@ package org.fudaa.fudaa.crue.planimetry.layer; import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; import gnu.trove.TObjectDoubleHashMap; import gnu.trove.TObjectDoubleIterator; import java.awt.Graphics2D; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; +import javax.swing.SwingConstants; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GisAbscCurviligneToCoordinate; +import org.fudaa.dodico.crue.common.XtComparator; import org.fudaa.dodico.crue.config.CrueConfigMetier; import org.fudaa.dodico.crue.metier.emh.CatEMHBranche; import org.fudaa.dodico.crue.metier.emh.DonPrtGeo; import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilSection; -import org.fudaa.dodico.crue.metier.emh.DonPrtGeoSectionIdem; import org.fudaa.dodico.crue.metier.emh.LitNumerote; import org.fudaa.dodico.crue.metier.emh.PtProfil; import org.fudaa.dodico.crue.metier.emh.RelationEMHSectionDansBranche; @@ -29,8 +36,10 @@ import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.fudaa.crue.planimetry.LayerBrancheController; +import org.fudaa.fudaa.crue.planimetry.configuration.TraceConfiguration; import org.fudaa.fudaa.crue.planimetry.configuration.VisuConfiguration; /** @@ -83,7 +92,6 @@ TraceLigne traceLigne = new TraceLigne(); GrPoint pt = new GrPoint(); GrPoint pt2 = new GrPoint(); - Set<Long> uidDone = new HashSet<Long>(); for (int i = nb - 1; i >= 0; i--) { if (!brancheModel.isGeometryVisible(i)) { continue; @@ -95,6 +103,8 @@ GISPolyligne brancheGis = modelController.getBrancheGis(i); TObjectDoubleHashMap<RelationEMHSectionDansBranche> ratiosBySection = brancheModel.getRatio(i, branche, realDistance, crueConfigMetier); + XtComparator xtComparator = new XtComparator(modelController.getCrueConfigMetier()); + Coordinate intersectionBrancheSection = null; for (TObjectDoubleIterator it = ratiosBySection.iterator(); it.hasNext();) { it.advance(); double ratio = it.value(); @@ -115,32 +125,111 @@ } GisAbscCurviligneToCoordinate.find(brancheGis, ratio, tmpResult); pt.initialiseAvec(tmpResult.getCoordinate()); - if (!_clipReel.contientXY(pt)) { - continue; + intersectionBrancheSection = new Coordinate(tmpResult.getCoordinate()); + GISPolyligne traceGIS = createLine(profilSection, brancheGis, tmpResult); + if (isAllOut(traceGIS, _clipReel) && !_clipReel.contientXY(intersectionBrancheSection.x, intersectionBrancheSection.y)) { + return; } - GISPolyligne createLine = createLine(profilSection, brancheGis, tmpResult); - pt.x_ = createLine.getCoordinateSequence().getX(0); - pt.y_ = createLine.getCoordinateSequence().getY(0); + pt.x_ = traceGIS.getCoordinateSequence().getX(0); + pt.y_ = traceGIS.getCoordinateSequence().getY(0); pt.autoApplique(_versEcran); - visuConfiguration.getTraceConfiguration().initTraceLigne(traceLigne.getModel(), i); - for (int j = 1; j < createLine.getCoordinateSequence().size(); j++) { - pt2.x_ = createLine.getCoordinateSequence().getX(j); - pt2.y_ = createLine.getCoordinateSequence().getY(j); + final TraceConfiguration traceConfiguration = visuConfiguration.getTraceConfiguration(); + traceConfiguration.initTraceLigne(traceLigne.getModel(), i); + for (int j = 1; j < traceGIS.getCoordinateSequence().size(); j++) { + pt2.x_ = traceGIS.getCoordinateSequence().getX(j); + pt2.y_ = traceGIS.getCoordinateSequence().getY(j); pt2.autoApplique(_versEcran); traceLigne.dessineTrait(_g, pt.x_, pt.y_, pt2.x_, pt2.y_); pt.initialiseAvec(pt2); } + //on dessine les limite de lits + double xmin = profilSection.getPtProfil().get(0).getXt(); + double length = (profilSection.getPtProfil().get(profilSection.getPtProfilSize() - 1)).getXt(); + TraceIcon icon = new TraceIcon(); + traceConfiguration.initTraceIcon(icon.getModel(), i); + if (icon.getTaille() > 0 && icon.getType() != TraceIcon.RIEN) { + List<LitNumerote> litNumerotes = profilSection.getLitNumerote(); + for (LitNumerote litNumerote : litNumerotes) { + double x = litNumerote.getLimDeb().getXt(); + GisAbscCurviligneToCoordinate.find(traceGIS, (x - xmin) / length, tmpResult); + if (tmpResult.isFound()) { + pt.initialiseAvec(tmpResult.getCoordinate()); + if (_clipReel.contientXY(pt)) { + pt.autoApplique(_versEcran); + icon.paintIconCentre(_g, pt.x_, pt.y_); + } + } + x = litNumerote.getLimFin().getXt(); + GisAbscCurviligneToCoordinate.find(traceGIS, (x - xmin) / length, tmpResult); + if (tmpResult.isFound()) { + pt.initialiseAvec(tmpResult.getCoordinate()); + if (_clipReel.contientXY(pt)) { + pt.autoApplique(_versEcran); + icon.paintIconCentre(_g, pt.x_, pt.y_); + } + } + + } + } + if (traceConfiguration.isLitLabelsPainted()) { + List<LitNumerote> litNumerotes = profilSection.getLitNumerote(); + Map<Double, List<String>> nameByXt = new TreeMap<Double, List<String>>(xtComparator); + for (LitNumerote litNumerote : litNumerotes) { + if (litNumerote.getNomLit() == null || litNumerote.getNomLit().getNom() == null) { + continue; + } + Double xMiddle = (litNumerote.getLimDeb().getXt() + litNumerote.getLimFin().getXt()) / 2; + List<String> names = nameByXt.get(xMiddle); + if (names == null) { + names = new ArrayList<String>(); + nameByXt.put(xMiddle, names); + } + names.add(litNumerote.getNomLit().getNom()); + } + for (Map.Entry<Double, List<String>> entry : nameByXt.entrySet()) { + Double xLabel = entry.getKey(); + GisAbscCurviligneToCoordinate.find(traceGIS, (xLabel - xmin) / length, tmpResult); + if (tmpResult.isFound()) { + List<String> list = entry.getValue(); + String nom = null; + if (list.size() == 1) { + nom = list.get(0); + } else { + Collections.sort(list); + nom = StringUtils.join(list, '\n'); + } + pt.initialiseAvec(tmpResult.getCoordinate()); + if (_clipReel.contientXY(pt)) { + pt.autoApplique(_versEcran); + labelPainter.paintLabels(_g, pt, nom, traceConfiguration.getLitLabelConfiguration()); + } + } + + } + } + if (traceConfiguration.isSectionLabelPainted()) { + int position = traceConfiguration.getSectionLabelPosition(); + pt.initialiseAvec(intersectionBrancheSection); + if (SwingConstants.LEFT == position) { + int nbPt = traceGIS.getNumPoints(); + pt.x_ = traceGIS.getCoordinateN(nbPt).x; + pt.y_ = traceGIS.getCoordinateN(nbPt).y; + } else if (SwingConstants.RIGHT == position) { + pt.x_ = traceGIS.getCoordinateN(0).x; + pt.y_ = traceGIS.getCoordinateN(0).y; + } + if (_clipReel.contientXY(pt)) { + pt.autoApplique(_versEcran); + labelPainter.paintLabels(_g, pt, profilSection.getNom(), traceConfiguration.getSectionLabelConfiguration()); + } + } + } } } protected GISPolyligne createLine(DonPrtGeoProfilSection profilSection, GISPolyligne brancheGis, GisAbscCurviligneToCoordinate.Result tmpResult) { -// if (profilSection == null) { -// DonPrtGeoSectionIdem sectionIdem = (DonPrtGeoSectionIdem) EMHHelper.selectClass(dptg, DonPrtGeoSectionIdem.class); -// //TODO a voir ?? -//// sectionIdem.get -// } if (profilSection == null) { return null; } @@ -184,13 +273,13 @@ double norm = amont.distance(aval); double vx = aval.x - amont.x; double vy = aval.y - amont.y; - double vxTrace = (-vy) / norm; - double vyTrace = (vx) / norm; + double vxTrace = (vy) / norm; + double vyTrace = -(vx) / norm; if (visuConfiguration.getTraceConfiguration().isProfilVueDeAmont()) { vxTrace = -vxTrace; vyTrace = -vyTrace; } - double xAxeHydraulique = (maxMineur - minMineur) / 2;//retrouver la notion d'axe hydraulique... + double xAxeHydraulique = (maxMineur + minMineur) / 2;//retrouver la notion d'axe hydraulique... final Coordinate accrochePt = tmpResult.getCoordinate(); Coordinate rd = new Coordinate(); Coordinate rdMineur = new Coordinate(); @@ -200,8 +289,28 @@ compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - minMineur), rdMineur); compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - xmax), rg); compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - maxMineur), rgMineur); - double angle = visuConfiguration.getTraceConfiguration().getAngle(); - + double angle = visuConfiguration.getTraceConfiguration().getAngleInRadians(); + if (angle != 0) { + final double sinAlpha = Math.sin(angle); + final double cosAlpha = Math.cos(angle); + if (!rd.equals2D(rdMineur)) { + double vxMajeur = rd.x - rdMineur.x; + double vyMajeur = rd.y - rdMineur.y; + double vxAfterRotation = vxMajeur * cosAlpha - vyMajeur * sinAlpha; + double vyAfterRotation = vxMajeur * sinAlpha - vyMajeur * cosAlpha; + rd.x = rdMineur.x + vxAfterRotation; + rd.y = rdMineur.y + vyAfterRotation; + } + if (!rg.equals2D(rgMineur)) { + double vxMajeur = rg.x - rgMineur.x; + double vyMajeur = rg.y - rgMineur.y; + double vxAfterRotation = vxMajeur * cosAlpha - vyMajeur * sinAlpha; + double vyAfterRotation = vxMajeur * sinAlpha - vyMajeur * cosAlpha; + rg.x = rgMineur.x + vxAfterRotation; + rg.y = rgMineur.y + vyAfterRotation; + } + } + return (GISPolyligne) GISGeometryFactory.INSTANCE.createLineString( new Coordinate[]{rd, rdMineur, rgMineur, rg}); } @@ -235,4 +344,14 @@ @Override public void paintSelection(Graphics2D _g, ZSelectionTrace _trace, GrMorphisme _versEcran, GrBoite _clipReel) { } + + private boolean isAllOut(GISPolyligne traceGIS, GrBoite _clipReel) { + CoordinateSequence coordinateSequence = traceGIS.getCoordinateSequence(); + for (int i = coordinateSequence.size() - 1; i >= 0; i--) { + if (_clipReel.contientXY(coordinateSequence.getX(i), coordinateSequence.getY(i))) { + return false; + } + } + return true; + } } Modified: trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java =================================================================== --- trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java 2012-05-29 22:03:21 UTC (rev 7248) +++ trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java 2012-05-29 23:49:08 UTC (rev 7249) @@ -31,7 +31,7 @@ */ @Category(org.fudaa.fudaa.crue.common.TestUI.class) public class TestScenarioBuilder { - + public static EMHScenario buildDefaultScenario() { EMHScenario scenario = new EMHScenario(TestCrueConfigMetierLoaderDefault.DEFAULT, new CrueOptions()); EMHModeleBase modele = new EMHModeleBase(TestCrueConfigMetierLoaderDefault.DEFAULT); @@ -64,9 +64,10 @@ addBranche("Br_5", nd6, nd7, 300, sousModele, 20); return scenario; } - + protected static void addSection(EMHSectionProfil section) { DonPrtGeoProfilSection profil = new DonPrtGeoProfilSection(); + profil.setNom("Prof_" + section.getNom()); section.addInfosEMH(profil); List<PtProfil> profils = new ArrayList<PtProfil>(); List<LitNumerote> litNumerotes = new ArrayList<LitNumerote>(); @@ -89,7 +90,7 @@ profil.setPtProfil(profils); profil.setLitNumerote(litNumerotes); } - + protected static LitNumerote create(List<PtProfil> profils, int idxDeb, int idxFin, boolean mineure, String nom) { LitNumerote stoDroit = new LitNumerote(); stoDroit.setLimDeb(profils.get(idxDeb)); @@ -97,9 +98,9 @@ stoDroit.setIsLitMineur(mineure); stoDroit.setNomLit(new LitNomme(nom)); return stoDroit; - + } - + private static void addBranche(final String brName, CatEMHNoeud nd1, CatEMHNoeud nd2, double length, EMHSousModele sousModele, int nbSection) { CatEMHBranche br = new EMHBranchePdc(brName); @@ -109,7 +110,7 @@ addSections(sousModele, br, length, nbSection); EMHRelationFactory.addRelationContientEMH(sousModele, br); } - + private static void addSections(EMHSousModele sousModele, CatEMHBranche br, double length, int nbSection) { EMHSectionSansGeometrie sectionAmont = new EMHSectionSansGeometrie("St_" + br.getNom() + "_Amont"); EMHSectionSansGeometrie sectionAval = new EMHSectionSansGeometrie("St_" + br.getNom() + "_Aval"); @@ -146,13 +147,13 @@ } br.addListeSections(sections); } - + private static CatEMHNoeud createNode(EMHNoeudFactory fac, final String noeudName, EMHSousModele sousModele) { CatEMHNoeud nd1 = fac.getCatEMHNoeud(noeudName); EMHRelationFactory.addRelationContientEMH(sousModele, nd1); return nd1; } - + private static CatEMHCasier createCasier(CatEMHNoeud noeud, EMHSousModele sousModele) { EMHCasierMNT casier = new EMHCasierMNT("Ca_" + noeud.getNom()); casier.setNoeud(noeud); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |