diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts index 2151ddd92552b66eb6812e0183cb579fd5166085..f737e1d4c03120fa6833e76c3dd0eb8ed21093d8 100644 --- a/src/app/components/fixedvar-results/var-results.component.ts +++ b/src/app/components/fixedvar-results/var-results.component.ts @@ -15,6 +15,9 @@ import { ResultsComponent } from "./results.component"; }) export class VarResultsComponent extends ResultsComponent { + /** size of the longest variated parameter */ + public size: number; + /** résultats non mis en forme */ protected _varResults: VarResults; @@ -33,54 +36,56 @@ export class VarResultsComponent extends ResultsComponent { super(); } + /** Refreshes results and builds the dataset */ public set results(r: VarResults) { this._varResults = r; - this._results = []; this._headers = []; + const nDigits = this.appSetupService.displayDigits; + if (this._varResults) { - const nDigits = this.appSetupService.displayDigits; - let i = 0; - for (const x of this._varResults.variatedParameter.valuesIterator) { - const pval = x.toFixed(nDigits); - this._results.push({ "param": pval, "result": this._varResults.resultElements[i] }); - i++; + // A. build headers + for (let i = 0; i < this._varResults.variatedParameters.length; i++) { + this._headers.push(this._varResults.variableParamHeaders[i]); } - - this._headers.push(this._varResults.variableParamHeader); if (this._varResults.calculatedParameterHeader) { this._headers.push(this._varResults.calculatedParameterHeader); } - this._headers = this._headers.concat(this._varResults.extraResultHeaders); - } - } - public get hasResults(): boolean { - return this._varResults && this._varResults.hasResults; - } - - public get headers() { - return this._headers; - } + // B. pre-extract variable parameters valueslet longest = 0; + const varValues = []; + // find longest list + this.size = 0; + for (let i = 0; i < this._varResults.variatedParameters.length; i++) { + const vs = this._varResults.variatedParameters[i].valuesIterator.count(); + if (vs > this.size) { + this.size = vs; + } + } + // get extended values lists for each variable parameter + for (const v of this._varResults.variatedParameters) { + const vv = []; + const iter = v.getExtendedValuesIterator(this.size); + while (iter.hasNext) { + const nv = iter.next(); + vv.push(nv.value.toFixed(nDigits)); + } + varValues.push(vv); + } - /** - * Returns a combination of and results and extraResults for mat-table - */ - public get dataSet() { - const data = []; - const nDigits = this.appSetupService.displayDigits; - if (this._results) { - for (let i = 0; i < this._results.length; i++) { - const r = this._results[i]; + // C. build dataset + for (let i = 0; i < this._varResults.resultElements.length; i++) { const re: ResultElement = this._varResults.resultElements[i]; - if (re) { - // for each computation step, build ordered list of : variable param value; result; extra results + // build ordered list of : variable params values; result; extra results + const list = []; - // 1. variable param value - const list = [ r.param ]; + // 1. variable params values for this computation step + for (const vv of varValues) { + list.push(vv[i]); + } // 2. result if (re.vCalc) { // sometimes does no exist (ex: Section Parametree) @@ -97,11 +102,25 @@ export class VarResultsComponent extends ResultsComponent { } } - data.push(list); + this._results.push(list); } } } - return data; + } + + public get hasResults(): boolean { + return this._varResults && this._varResults.hasResults; + } + + public get headers() { + return this._headers; + } + + /** + * Returns a combination of results and extraResults for mat-table + */ + public get dataSet() { + return this._results; } public exportAsSpreadsheet() { diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts index f11fa831b984fb65843f48fe335130c958ceb23d..f5328dc134c1abbd23c1687cf375f4a98c5ae93e 100644 --- a/src/app/components/remous-results/remous-results.component.ts +++ b/src/app/components/remous-results/remous-results.component.ts @@ -368,7 +368,7 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck } private get abscisseIterator(): INumberIterator { - return this._remousResults.varResults.variatedParameter.paramDefinition.valuesIterator; + return this._remousResults.varResults.variatedParameters[0].paramDefinition.valuesIterator; } private connectRessaut(lineFlu: LineData, lineTor: LineData) { diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts index 875a52747478bf419389556ca866c3ce033eef8c..08c12186f48d4bda67b88076264f4ed650edd790 100644 --- a/src/app/formulaire/definition/form-compute-fixedvar.ts +++ b/src/app/formulaire/definition/form-compute-fixedvar.ts @@ -1,4 +1,4 @@ -import { Nub, Result, ComputeNode } from "jalhyd"; +import { Nub } from "jalhyd"; import { FormCompute } from "./form-compute"; import { NgParameter, ParamRadioConfig } from "../ngparam"; @@ -14,18 +14,18 @@ export class FormComputeFixedVar extends FormCompute { return this._formResult as FormResultFixedVar; } - private getVariatedParameter(): NgParameter { - const res = this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR); - if (res !== undefined) { - return res; - } - - const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); - for (const p of pms) { - if (p.paramDefinition.hasMultipleValues) { - return p; + private getVariatedParameters(): NgParameter[] { + let res: NgParameter[] = []; + res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); + if (res.length === 0) { + const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK); + for (const p of pms) { + if (p.paramDefinition.hasMultipleValues) { + res.push(p); + } } } + return res; } private getComputedParameter(): NgParameter { @@ -42,15 +42,15 @@ export class FormComputeFixedVar extends FormCompute { const computedParam: NgParameter = this.getComputedParameter(); this.formResult.resetResults(); // to avoid adding fixed parameters more than once (see below) this.formResult.addFixedParameters(); - const varParam: NgParameter = this.getVariatedParameter(); + const varParams: NgParameter[] = this.getVariatedParameters(); - if (varParam === undefined) { + if (varParams.length === 0) { // pas de paramètre à varier this.formResult.fixedResults.result = nub.result; this.formResult.fixedResults.calculatedParameter = computedParam; } else { // il y a un paramètre à varier - this.formResult.varResults.variatedParameter = varParam; + this.formResult.varResults.variatedParameters = varParams; this.formResult.varResults.calculatedParameter = computedParam; this.formResult.varResults.result = nub.result; diff --git a/src/app/formulaire/definition/form-compute-section-parametree.ts b/src/app/formulaire/definition/form-compute-section-parametree.ts index d30352a577096f548986041f60cde084b368e641..3e833eed46eeac7a0a991bafde36403d373036b9 100644 --- a/src/app/formulaire/definition/form-compute-section-parametree.ts +++ b/src/app/formulaire/definition/form-compute-section-parametree.ts @@ -39,10 +39,10 @@ export class FormComputeSectionParametree extends FormCompute { const sect: acSection = sectNub.section; this._sectionResults.section = sect; - const varParam = this._formSection.getSectionVariatedParameter(); - if (varParam) { + const varParams = this._formSection.getSectionVariatedParameters(); + if (varParams.length > 0) { // résultats variés avec tous les résultats complémentaires - this._varResults.variatedParameter = varParam; + this._varResults.variatedParameters = varParams; this._varResults.result = sectNub.result; this._varResults.update(false); } else { diff --git a/src/app/formulaire/definition/form-def-section.ts b/src/app/formulaire/definition/form-def-section.ts index 309a06613147474af44c2a683d39d325122842e3..a2c011e8df49e4a62fa8010da406a92e1322c1dd 100644 --- a/src/app/formulaire/definition/form-def-section.ts +++ b/src/app/formulaire/definition/form-def-section.ts @@ -18,8 +18,8 @@ export class FormDefSection { return this._sectionSourceId !== undefined; } - public getSectionVariatedParameter(): NgParameter { - return this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR); + public getSectionVariatedParameters(): NgParameter[] { + return this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR); } public getSectionComputedParam(): { symbol: string, label: string } { diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts index 0154d6ae487375456d7897b826d265f59d6df597..679d3b1f3f4058d76279820637706cf9e3224621 100644 --- a/src/app/formulaire/ngparam.ts +++ b/src/app/formulaire/ngparam.ts @@ -237,6 +237,10 @@ export class NgParameter extends InputField implements Observer { return this._paramDef.valueList; } + public get inferredValuesList() { + return this._paramDef.getInferredValuesList(); + } + public get isValid() { if (this.radioState === undefined) { return false; @@ -296,6 +300,10 @@ export class NgParameter extends InputField implements Observer { } } + public getExtendedValuesIterator(size: number): INumberIterator { + return this._paramDef.getExtendedValuesIterator(size); + } + /** * notification envoyée après la modification de la valeur du paramètre */ diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts index 1127bf61fb4b6b2015f46bee279a9dbb3bfccfbe..6d6e1f6e104badd016b4c449f01127e889ee05f0 100644 --- a/src/app/results/remous-results.ts +++ b/src/app/results/remous-results.ts @@ -137,7 +137,7 @@ export class RemousResults extends CalculatorResults { this._log.addLog(this._result.globalLog); this._varResults = new VarResults(); - this._varResults.variatedParameter = new NgParameter(this._xValues, undefined); + this._varResults.variatedParameters = [ new NgParameter(this._xValues, undefined) ]; this._varResults.calculatedParameter = new NgParameter(new ParamDefinition(null, "Ligne d'eau", ParamDomainValue.POS_NULL), undefined); this._varResults.result = this._result; diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts index 891f7c008aa8375fef89edc1c1b5469eafb942a8..f00cfdabb8abef4755c5b1020d393aba31fd4cf2 100644 --- a/src/app/results/var-results.ts +++ b/src/app/results/var-results.ts @@ -8,14 +8,14 @@ import { GraphType } from "./graph-type"; export class VarResults extends CalculatedParamResults implements PlottableData { /** - * paramètre varié + * paramètres variés */ - private _variatedParam: NgParameter; + private _variatedParams: NgParameter[]; /** - * titre de la 1ère colonne des résultats variés + * titre des colonnes des résultats variés */ - private _variableParamHeader: string; + private _variableParamHeaders: string[]; /** * clés des résultats complémentaires @@ -53,23 +53,25 @@ export class VarResults extends CalculatedParamResults implements PlottableData public reset() { super.reset(); - this._variableParamHeader = undefined; + this._variableParamHeaders = []; this._extraResultHeaders = []; this.extraResultKeys = []; this._yValues = []; } - public get variatedParameter(): NgParameter { - return this._variatedParam; + public get variatedParameters(): NgParameter[] { + return this._variatedParams; } - public set variatedParameter(p: NgParameter) { - this._variatedParam = p; - this._variableParamHeader = CalculatorResults.paramLabel(this._variatedParam, true); + public set variatedParameters(p: NgParameter[]) { + this._variatedParams = p; + this._variableParamHeaders = this._variatedParams.map((v) => { + return CalculatorResults.paramLabel(v, true); + }); } - public get variableParamHeader() { - return this._variableParamHeader; + public get variableParamHeaders() { + return this._variableParamHeaders; } public get yValues() { @@ -88,20 +90,21 @@ export class VarResults extends CalculatedParamResults implements PlottableData // 1. calculated param ? if (this.calculatedParameter && this.calculatedParameter.symbol === symbol) { return this.calculatedParameterHeader; - } else + } // 2. variated param ? - if (this.variatedParameter.symbol === symbol) { - return this.variableParamHeader; - } else { - // 3. Result element ? - // calculator type for translation - const sn = this.result.sourceNub; - let ct = sn.calcType; - if (sn.parent) { - ct = sn.parent.calcType; + for (let i = 0; i < this.variatedParameters.length; i++) { + if (this._variatedParams[i].symbol === symbol) { + return this.variableParamHeaders[i]; } - return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol); } + // 3. Result element ? + // calculator type for translation + const sn = this.result.sourceNub; + let ct = sn.calcType; + if (sn.parent) { + ct = sn.parent.calcType; + } + return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol); } /** @@ -117,19 +120,20 @@ export class VarResults extends CalculatedParamResults implements PlottableData series.push(r.vCalc); } } - } else + } // 2. variated param ? - if (this.variatedParameter.symbol === symbol) { - for (const v of this.variatedParameter.valuesIterator) { - series.push(v); + for (let i = 0; i < this.variatedParameters.length; i++) { + if (this._variatedParams[i].symbol === symbol) { + for (const v of this.variatedParameters[i].valuesIterator) { + series.push(v); + } } - } else { - // 3. Result element ? - for (const r of this.result.resultElements) { // re:ResultElement - for (const k in r.extraResults) { - if (k === symbol) { - series.push(r.extraResults[k]); - } + } + // 3. Result element ? + for (const r of this.result.resultElements) { // re:ResultElement + for (const k in r.extraResults) { + if (k === symbol) { + series.push(r.extraResults[k]); } } } @@ -146,7 +150,9 @@ export class VarResults extends CalculatedParamResults implements PlottableData if (this.calculatedParameter) { res.push(this.calculatedParameter.symbol); } - res.push(this.variatedParameter.symbol); + for (const v of this._variatedParams) { + res.push(v.symbol); + } for (const erk of this.extraResultKeys) { res.push(erk); } @@ -154,8 +160,10 @@ export class VarResults extends CalculatedParamResults implements PlottableData } public update(displaySymbol: boolean) { - if (this._variableParamHeader === undefined) { - this._variableParamHeader = CalculatorResults.paramLabel(this.variatedParameter, displaySymbol); + if (this._variableParamHeaders.length === 0) { + this._variableParamHeaders = this._variatedParams.map((v) => { + return CalculatorResults.paramLabel(v, true); + }); } // valeurs du paramètre à calculer @@ -181,7 +189,7 @@ export class VarResults extends CalculatedParamResults implements PlottableData } else if (this.extraResultKeys.length > 0) { defaultY = this.extraResultKeys[0]; } - this.chartX = this.chartX || this.variatedParameter.symbol; + this.chartX = this.chartX || this.variatedParameters[0].symbol; this.chartY = defaultY; // calculator type for translation @@ -202,10 +210,10 @@ export class VarResults extends CalculatedParamResults implements PlottableData // (might be the previous variated parameter, that is not accessible anymore) const aca = this.getAvailableChartAxis(); if (! aca.includes(this.chartX)) { - this.chartX = this.variatedParameter.symbol; + this.chartX = this.variatedParameters[0].symbol; } if (! aca.includes(this.chartY)) { - this.chartY = this.variatedParameter.symbol; + this.chartY = this.variatedParameters[0].symbol; } } }