Skip to content
Snippets Groups Projects
Commit 1dd6d735 authored by mathias.chouet's avatar mathias.chouet
Browse files

RemousResults: fix bug in connectRessaut

parent 9af4027a
No related branches found
No related tags found
1 merge request!63Resolve "Passer les courbes de remous en cotes"
import { Component, ViewChild, DoCheck } from "@angular/core";
import { ArrayReverseIterator, ResultElement, INumberIterator, CourbeRemousParams, CourbeRemous } from "jalhyd";
import { INumberIterator, CourbeRemousParams, CourbeRemous } from "jalhyd";
import { I18nService } from "../../services/internationalisation.service";
import { LogComponent } from "../../components/log/log.component";
......@@ -398,61 +398,25 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck
private connectRessaut(lineFlu: LineData, lineTor: LineData) {
if (lineFlu !== undefined && lineTor !== undefined) {
const tX = lineFlu.tx.slice(0); // copie
tX.sort((a, b) => {
if (a > b) {
return 1;
}
if (a < b) {
return -1;
}
return 0;
});
let minXflu; // abscisse de début de la courbe fluviale
let itX = this.abscisseIterator;
for (const re of this._remousResults.result.resultElements) {
if (!itX.hasNext) {
throw new Error("RemousResultsComponent.connectRessaut() : erreur interne (itérateur sur x)");
}
const x = itX.next().value;
if (re.getValue("flu") !== undefined) {
minXflu = x;
break;
const p = this._remousResults.varResults.variatedParameters[0].paramDefinition;
const xs = p.getInferredValuesList();
// 1e passe : prolonger la torrentielle
outerloop1:
for (let i = 0; i < xs.length; i++) {
const x = xs[i];
if (lineTor.getYat(x) === null) {
lineTor.setPoint(x, lineFlu.getYat(x));
break outerloop1;
}
}
if (minXflu !== undefined && minXflu !== tX[0]) {
// la courbe fluviale ne démarre pas au début, on ajoute un point de raccord avec la ligne torrentielle
const i = tX.indexOf(minXflu);
const xflu = tX[i - 1];
const yflu = lineTor.getYat(xflu);
lineFlu.setPoint(xflu, yflu);
}
let maxXtor; // abscisse de fin de la courbe torrentielle
const itRE = new ArrayReverseIterator<ResultElement>(this._remousResults.result.resultElements);
itX = this.abscisseIterator;
for (const r of itRE) {
if (!itX.hasNext) {
throw new Error("RemousResultsComponent.connectRessaut() : erreur interne (itérateur sur x)");
// 2e passe : prolonger la fluviale
outerloop2:
for (let i = xs.length - 1; i >= 0; i--) {
const x = xs[i];
if (lineFlu.getYat(x) === null) {
lineFlu.setPoint(x, lineTor.getYat(x));
break outerloop2;
}
const x = itX.next();
if (r.getValue("tor") !== undefined) {
maxXtor = x.value;
break;
}
}
if (maxXtor !== undefined && maxXtor !== tX[tX.length - 1]) {
// la courbe torrentielle ne finit pas à la fin des abscisses, on ajoute un point de raccord avec la ligne fluviale
const i = tX.indexOf(maxXtor);
const xflu = tX[i + 1];
const yflu = lineFlu.getYat(xflu);
lineTor.setPoint(xflu, yflu);
}
}
}
......@@ -523,7 +487,6 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck
}
// lignes d'eau torrentielle et fluviale
let lineFlu: LineData;
if (this._remousResults.hasFluData) {
lineFlu = gr1.newLine(0);
......@@ -579,11 +542,9 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck
}
// raccordement ligne fluviale -> torrentielle pour dessiner le ressaut
this.connectRessaut(lineFlu, lineTor);
// ajout des données au graphique
if (lineTor !== undefined) {
lineTor.data = {
label: this.uitextLigneTorrentielle,
......
......@@ -98,7 +98,7 @@ export class RemousResults extends CalculatorResults {
// série de valeurs de X
this._xValues = new ParamDefinition(p, "Abscisse", ParamDomainValue.POS_NULL);
this._xValues.paramValues.setValues(0, Long, Dx);
this._xValues.setValues(0, Long, Dx);
}
public get log() {
......
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