diff --git a/src/app/calculators/cond_distri/conddistri.component.html b/src/app/calculators/cond_distri/conddistri.component.html index 53ea04a29d03f9a9fb030676e72c084b9212a59e..7ba35b110097af4afb1703fba2c53e3a6fdcf3be 100644 --- a/src/app/calculators/cond_distri/conddistri.component.html +++ b/src/app/calculators/cond_distri/conddistri.component.html @@ -6,16 +6,28 @@ </div> <div style="text-align:center;"> - <table *ngIf="_showResults"> + <!-- table des résultats fixées --> + <table *ngIf="_showFixedResults" style="float: left"> <tr> <th>Paramètres fixés</th> <th>Valeurs</th> </tr> - <tr *ngFor="let r of _results; let i=index" [class]="getResultClass(i)"> + <tr *ngFor="let r of _fixedResults; let i=index" [class]="getFixedResultClass(i)"> <td class="result_label">{{r.label}}</td> <td class="result_value">{{r.value}}</td> </tr> </table> + <!-- table des résultats variés --> + <table *ngIf="_showVarResults" style="float: left"> + <tr> + <th>{{_variableParamHeader}}</th> + <th>{{_variableResultHeader}}</th> + </tr> + <tr *ngFor="let r of _varResults; let i=index" [class]="getVarResultClass(i)"> + <td class="result_label ">{{r.param}}</td> + <td class="result_value ">{{r.result}}</td> + </tr> + </table> </div> <!-- <tr *ngFor="let r of _results; let i=index" [class]="getResultClass(i)"> diff --git a/src/app/calculators/cond_distri/conddistri.component.ts b/src/app/calculators/cond_distri/conddistri.component.ts index 6321250c80675416da8edfa1b3e6b2e7d0e435a2..7df80e243c3f76151539c35a661a336412107b28 100644 --- a/src/app/calculators/cond_distri/conddistri.component.ts +++ b/src/app/calculators/cond_distri/conddistri.component.ts @@ -58,11 +58,22 @@ export class CondDistriComponent implements OnInit, DoCheck { private _fieldSets: FieldSet[] = []; /** - * affichage de la table des résultats + * affichage de la table des résultats non variés */ - private _showResults: boolean = false; + private _showFixedResults: boolean = false; - private _results: Object[]; + private _fixedResults: Object[]; + + /** + * affichage de la table des résultats variés + */ + private _showVarResults: boolean = false; + + private _variableParamHeader: string; + + private _variableResultHeader: string; + + private _varResults: Object[]; /** * symbole du paramètre à calculer par défaut (cf config "idCal") @@ -214,6 +225,14 @@ export class CondDistriComponent implements OnInit, DoCheck { } ngDoCheck() { + // let q = this.getParamFromSymbol("Q"); // A VIRER !!!! + // if (q != undefined) { + // q.radioState = ParamRadioConfig.VAR; + // q.minValue = 1.5; + // q.maxValue = 6; + // q.stepValue = 0.3; + // } + if (this.intlService.localeChanged) { const promise = this.loadLocalisation() .then(() => { @@ -320,8 +339,6 @@ export class CondDistriComponent implements OnInit, DoCheck { return p.v; case ParamRadioConfig.VAR: - throw "non supported"; - case ParamRadioConfig.CAL: return undefined; } @@ -338,11 +355,35 @@ export class CondDistriComponent implements OnInit, DoCheck { return this.getParamFromState(ParamRadioConfig.VAR); } - private addResult(p: NgParameter, v: number, fixedPrec: number) { - this._results.push({ "label": p.symbol + ": " + p.label + " (" + p.unit + ")", "value": v.toFixed(fixedPrec) }); + private paramLabel(p: NgParameter): string { + return p.symbol + ": " + p.label + " (" + p.unit + ")"; + } + + private addFixedResult(p: NgParameter, v: number, fixedPrec: number) { + this._fixedResults.push({ "label": this.paramLabel(p), "value": v.toFixed(fixedPrec) }); + } + + private addFixedResults(nDigits: number) { + this._fixedResults = []; + for (let fs of this._fieldSets) { + for (let p of fs.params) { + if (p.radioState == ParamRadioConfig.FIX && p.symbol !== "Pr") { + this.addFixedResult(p, p.v, nDigits); + } + } + } + + this._showFixedResults = true; + } + + private addVarResult(paramVal: number, resVal: number, fixedPrec: number) { + this._varResults.push({ "param": paramVal.toFixed(fixedPrec), "result": resVal.toFixed(fixedPrec) }); } private doCompute() { + this._showVarResults = false; + let computedParam = this.getComputedParameter(); + let Q: number = this.getParameterValue("Q"); // débit Q let D: number = this.getParameterValue("D"); // diamètre D let J: number = this.getParameterValue("J"); // perte de charge J @@ -350,32 +391,52 @@ export class CondDistriComponent implements OnInit, DoCheck { let Nu: number = this.getParameterValue("Nu"); // Viscosité dynamique Nu let prec: number = this.getParameterValue("Pr"); // précision let nDigits = -Math.log10(prec); -// console.log(nDigits); - - let computed = this.getComputedParameter(); let prms = new ConduiteDistribParams(Q, D, J, Lg, Nu); let nub = new ConduiteDistrib(prms); - let res = nub.Calc(computed.symbol, 0, prec).vCalc; - this._results = []; - for (let fs of this._fieldSets) { - for (let p of fs.params) { - if (p.radioState == ParamRadioConfig.FIX && p.symbol !== "Pr") { - // this._results.push({ "label": p.label, "value": p.v }); - this.addResult(p, p.v, nDigits); - } - } + let varParam = this.getVariatedParameter(); + if (varParam == undefined) { + // pas de paramètre à varier + + let res = nub.Calc(computedParam.symbol, 0, prec).vCalc; + + this.addFixedResults(nDigits); + this.addFixedResult(computedParam, res, nDigits); } - // this._results.push({ "label": computed.label, "value": res }); - this.addResult(computed, res, nDigits); + else { + // il y a un paramètre à varier - this._showResults = true; + this.addFixedResults(nDigits); + this._variableParamHeader = this.paramLabel(varParam); + this._variableResultHeader = this.paramLabel(computedParam); + + let min: number = +varParam.minValue; + let max: number = +varParam.maxValue; + let step: number = +varParam.stepValue; + + this._varResults = []; + for (let val = min; val <= max; val += step) { + prms[varParam.symbol].v = val; + + let res = nub.Calc(computedParam.symbol, 0, prec).vCalc; + this.addVarResult(val, res, nDigits); + } + for (let vr of this._varResults) { + console.log(vr); + } + + this._showVarResults = true; + } } - private getResultClass(i: number) { - if (i == this._results.length - 1) + private getFixedResultClass(i: number) { + if (this.getVariatedParameter() == undefined && i == this._fixedResults.length - 1) return "result_id_2" return "result_id_" + String(i & 1); } + + private getVarResultClass(i: number) { + return "result_id_" + String(i & 1); + } } diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts index f3e38a8f5d1c03f31bfa8c64789d44cea7df3d7b..affee7f79d04a7f8c198a818c05639ca7302554d 100644 --- a/src/app/components/param-field-line/param-field-line.component.ts +++ b/src/app/components/param-field-line/param-field-line.component.ts @@ -132,6 +132,13 @@ export class ParamFieldLineComponent implements DoCheck { return undefined; } + /** + * retourne l'état du radio "paramètre à varier" sous forme booléenne + */ + private get isRadioVarChecked(): boolean { + return this._param.radioState == ParamRadioConfig.VAR; + } + /* * gestion des événements clic sur les radios : * envoi d'un message au composant parent diff --git a/src/app/components/param-field-line/param-field-line.html b/src/app/components/param-field-line/param-field-line.html index fdf5ec1f93dcee3556d5591067c5a54c7c5a7804..a3fc4efb44c58abfa7a2292135b182fd2c4363d7 100644 --- a/src/app/components/param-field-line/param-field-line.html +++ b/src/app/components/param-field-line/param-field-line.html @@ -21,22 +21,37 @@ <input *ngIf="hasRadioCal()" type="radio" name="radio_param_{{symbol}}" value="cal" (click)="onRadioClick(symbol, 'cal')" [checked]=radioCalCheck [disabled]=isDisabled/> </td> - - <!-- - <td align="center"> - <input type="radio" id="fix_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="fix" onclick="gestion_radios('FT_rLargeurFond', 'fix')" - checked="checked" /> +</tr> +<tr *ngIf="isRadioVarChecked"> + <td></td> + <td></td> + <td> + De la valeur minimum </td> - - <td align="center"> - <input type="radio" id="var_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="var" onclick="gestion_radios('FT_rLargeurFond', 'var')" - /> + <td> + <input [(ngModel)]="_param.minValue"> + <!-- +<tr *ngIf="isRadioVarChecked()"> + --> </td> - - <td align="center"> - <input type="radio" id="cal_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="cal" onclick="gestion_radios('FT_rLargeurFond', 'cal')" - /> +</tr> +<tr *ngIf="isRadioVarChecked"> + <td></td> + <td></td> + <td> + à la valeur maximum + </td> + <td> + <input [(ngModel)]="_param.maxValue"> + </td> +</tr> +<tr *ngIf="isRadioVarChecked"> + <td></td> + <td></td> + <td> + avec un pas de : + </td> + <td> + <input [(ngModel)]="_param.stepValue"> </td> - --> - </tr> \ No newline at end of file diff --git a/src/app/services/ngparam.ts b/src/app/services/ngparam.ts index f9e9c79ae989ff429ff6cfda4eb29a52a49da8cb..c90df03f9f18b5ac6af21246edecb671fad1678c 100644 --- a/src/app/services/ngparam.ts +++ b/src/app/services/ngparam.ts @@ -1,4 +1,4 @@ -import { ParamDefinition, ErrorMessage } from 'jalhyd'; +import { ParamDefinition, ParamDomainValue, ErrorMessage } from 'jalhyd'; export enum ParamRadioConfig { /** @@ -26,8 +26,32 @@ export class NgParameter { public radioConfig: ParamRadioConfig; public radioState: ParamRadioConfig; public isDefault: boolean = false; // archi bug du langage ! si on relit cette propriété sans l'avoir modifiée entre-temps, elle vaut undefined ! + public minValue: number; // valeur min dans le cas ParamRadioConfig.VAR + public maxValue: number; // valeur max dans le cas ParamRadioConfig.VAR + public stepValue: number; // pas de progression dans le cas ParamRadioConfig.VAR constructor(private _paramDef: ParamDefinition) { + switch (this._paramDef.getDomain().domain) { + case ParamDomainValue.ANY: + this.minValue = -10; + this.maxValue = 10; + this.stepValue = 0.5; + break; + + case ParamDomainValue.POS: + case ParamDomainValue.NOT_NULL: + case ParamDomainValue.INTERVAL: + this.minValue = 0.01; + this.maxValue = 10; + this.stepValue = 0.5; + break; + + case ParamDomainValue.POS_NULL: + this.minValue = 0; + this.maxValue = 10; + this.stepValue = 0.5; + break; + } } get symbol(): string {