pab_cloisons.ts 3.93 KiB
import { ParamCalculability, ParamDefinition, ParamFamily} from "../param/param-definition";
import { ParamDomainValue } from "../param/param-domain";
import { CalculatorType, Session } from "../index";
import { Cloisons, CloisonsParams } from "../structure/cloisons";
import { Pab } from "./pab";
class PabCloisonsParams extends CloisonsParams {
   /** Débit d'attrait d'un bassin (m3/s) */
   public _QA: ParamDefinition;
    /**
     * Paramètres communs à toutes les équations de structure
     * @param rQ Débit total (m3/s)
     * @param rZ1 Cote de l'eau amont (m)
     * @param rLB Longueur des bassins (m)
     * @param rBB Largeur des bassins (m)
     * @param rPB Profondeur moyenne (m)
     * @param rDH Hauteur de chute (m)
    constructor(modelCloisonsParams?: CloisonsParams, rQA: number = 0) {
        super(1, 1, 1, 1, 1, 1); // overwritten by init() below
        this.init(modelCloisonsParams);
        // On garde Pr en propre sur cet objet (Pointage impossible car en lecture seule)
        this.addParamDefinition(this.Pr, true);
        // Débit d'attrait
        this._QA = new ParamDefinition(this, "QA", ParamDomainValue.ANY, rQA, ParamFamily.FLOWS);
        this.addParamDefinition(this._QA);
    public get QA() {
        return this._QA;
    public init(modelCloisonsParams: CloisonsParams) {
        // might be undefined when created by a Session
        if (modelCloisonsParams) {
            this.Q = modelCloisonsParams.Q;
            this.Z1 = modelCloisonsParams.Z1;
            this.LB = modelCloisonsParams.LB;
            this.BB = modelCloisonsParams.BB;
            this.PB = modelCloisonsParams.PB;
            this.DH = modelCloisonsParams.DH;
            // Force la MAJ de la map avec les propriétés pointant vers celles de CloisonsParam
            this.addParamDefinitions(modelCloisonsParams);
// tslint:disable-next-line:max-classes-per-file
export class PabCloisons extends Cloisons {
    public parent: Pab;
    constructor(modelCloisons: Cloisons, rQA: number = 0, dbg: boolean = false) {
        super(new PabCloisonsParams(), dbg); // model is set below
        this.initModelCloisons(modelCloisons);
        this._calcType = CalculatorType.PabCloisons;
    /**
     * paramètres castés au bon type
    get prms(): PabCloisonsParams {
        return this._prms as PabCloisonsParams;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
/** * Sets modelCloisons as the current model, initializing the parameters with it */ public initModelCloisons(modelCloisons: Cloisons) { this.prms.init(modelCloisons ? modelCloisons.prms : undefined); this._children = modelCloisons ? modelCloisons.structures : []; } /** * Finds the Cloisons targetted by modelUid and defines it as the current model */ public setModel(modelUid: string) { this.properties.setPropValue("modeleCloisons", modelUid); const cloisons = (Session.getInstance().findNubByUid(modelUid) as Cloisons); if (cloisons) { this.initModelCloisons(cloisons); } else { console.error("PabCloisons.setModel : cannot find target Cloisons"); } } /** * Returns an object representation of the Nub's current state */ public objectRepresentation() { const ret: any = { uid: this.uid, props: this.properties.props, parameters: [] }; // ! do not iterate over local parameters (would copy the parameters of the Cloisons used as model), // just serialise QA ret.parameters.push(this.prms.QA.objectRepresentation()); // ! do not iterate over children Nubs (would copy the children of the Cloisons used as model) return ret; } /** * paramétrage de la calculabilité des paramètres */ protected setParametersCalculability() { super.setParametersCalculability(); this.prms._QA.calculability = ParamCalculability.FREE; } }