Skip to content
Snippets Groups Projects
Commit 3bddb335 authored by François Grand's avatar François Grand
Browse files

feature : backwater curves: add select to open a parametric section calculator for a given abscissa

refs #496
parent b5675b9e
No related branches found
No related tags found
2 merge requests!225Release v4.17.0,!178Resolve "Courbe de remous: visualiser les profils de sections"
Pipeline #139947 passed
......@@ -124,6 +124,7 @@ import { StructureFieldsetContainerComponent } from "./components/structure-fiel
import { BasinFieldsetContainerComponent } from "./components/basin-fieldset-container/basin-fieldset-container.component";
import { PrebarrageService } from "./services/prebarrage.service";
import { SectionDetailsEntryComponent } from "./components/section-details-entry/section-details-entry.component";
import { SelectSectionDetailsComponent } from "./components/select-section-details/select-section-details.component";
const appRoutes: Routes = [
{ path: "list/search", component: CalculatorListComponent },
......@@ -259,7 +260,8 @@ const appRoutes: Routes = [
SessionPropertiesComponent,
VarResultsComponent,
VerificateurResultsComponent,
SectionDetailsEntryComponent
SectionDetailsEntryComponent,
SelectSectionDetailsComponent
],
providers: [ // services
ApplicationSetupService,
......
......@@ -200,6 +200,8 @@
{{ uitextGenerateRuSp }}
</button>
<select-section-details id="generate-cr-sps" *ngIf="hasCourbeRemousResults" [points]="courbeRemousAbscissae"></select-section-details>
<button mat-raised-button color="accent" id="generate-par-simulation" *ngIf="isPAR"
(click)="generatePARSimulation()" [disabled]="! generatePARSimulationEnabled"
[title]="uitextGenerateParSimulationTitle">
......
......@@ -63,6 +63,8 @@ import { sprintf } from "sprintf-js";
import * as XLSX from "xlsx";
import { ServiceFactory } from "app/services/service-factory";
import { DefinedBoolean } from "app/definedvalue/definedboolean";
import { FormulaireCourbeRemous } from "app/formulaire/definition/form-courbe-remous";
import { RemousResults } from "app/results/remous-results";
@Component({
selector: "hydrocalc",
......@@ -710,6 +712,11 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe
return this.is(CalculatorType.RegimeUniforme);
}
// true if CourbeRemous results are present
public get hasCourbeRemousResults() {
return this.is(CalculatorType.CourbeRemous) && this.hasResults;
}
// true if current Nub is PAR
public get isPAR() {
return this.is(CalculatorType.Par);
......@@ -972,6 +979,20 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe
this.router.navigate(["/calculator", f.uid]);
}
/**
* @returns liste des abscisses du graphe de courbes de remous
*/
public get courbeRemousAbscissae(): number[] {
if (this.hasCourbeRemousResults) {
const crForm = this._formulaire as FormulaireCourbeRemous;
for (const r of crForm.results) {
if (r instanceof RemousResults) {
return r.abscissae;
}
}
}
}
public get generatePARSimulationEnabled(): boolean {
const parCalage = (this._formulaire.currentNub as Par);
return (
......
<mat-select [placeholder]="uitextPlaceholder">
<mat-option *ngFor="let p of points">
<section-details-entry [abscissa]=p></section-details-entry>
</mat-option>
</mat-select>
\ No newline at end of file
mat-select {
border: 1px solid #4dbbe9;
}
import { Component, Input } from '@angular/core';
/**
* liste déroulante de boutons de génération de formulaire "section paramétrée"
*/
@Component({
selector: 'select-section-details',
templateUrl: './select-section-details.component.html',
styleUrls: ['./select-section-details.component.scss']
})
export class SelectSectionDetailsComponent {
private _points: number[];
/**
* abscisses auxquelles on peut créer un formulaire "section paramétrée"
*/
@Input()
public set points(ps: number[]) {
this._points = ps;
}
public get points(): number[] {
return this._points;
}
constructor(
) { }
public get uitextPlaceholder() {
return "Générer une section paramétrée pour...";
}
}
......@@ -116,6 +116,15 @@ export class RemousResults extends CalculatorResults {
this._xValues.setValues(abscissae);
}
/*
* abscisses pour lesquelles on a des résultats
*/
public get abscissae(): number[] {
return this._result.resultElements.map((re) => {
return re.getValue("X");
});
}
public update() {
this._hasFlu = false;
this._hasTor = false;
......
......@@ -870,13 +870,15 @@ export class FormulaireService extends Observable {
const serialisedSection = sn.section.serialise();
const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub;
const secParam = new SectionParametree(sectionCopy as acSection);
// copy value of calculated param
const cp: ParamDefinition = sn.calculatedParam;
const scp: ParamDefinition = secParam.section.getParameter(cp.symbol);
if (cp.hasMultipleValues) {
scp.setValues(sn.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision)));
} else {
scp.singleValue = sn.result.vCalc;
if (sn instanceof RegimeUniforme) {
// copy value of calculated param
const cp: ParamDefinition = sn.calculatedParam;
const scp: ParamDefinition = secParam.section.getParameter(cp.symbol);
if (cp.hasMultipleValues) {
scp.setValues(sn.result.getCalculatedValues().map(v => round(v, this.appSetupService.displayPrecision)));
} else {
scp.singleValue = sn.result.vCalc;
}
}
Session.getInstance().registerNub(secParam);
......
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