From dae6be04bd45a21b00ab862088595b59fb6ac9b2 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Wed, 22 May 2019 15:55:49 +0200
Subject: [PATCH] CreateStructure: set parent Nub pointer

---
 src/structure/factory_structure.ts | 53 ++++++++++++++++++++++--------
 1 file changed, 39 insertions(+), 14 deletions(-)

diff --git a/src/structure/factory_structure.ts b/src/structure/factory_structure.ts
index 48d711d0..164b908a 100644
--- a/src/structure/factory_structure.ts
+++ b/src/structure/factory_structure.ts
@@ -20,7 +20,9 @@ import { StructureWeirFree } from "./structure_weir_free";
 import { StructureWeirSubmergedLarinier } from "./structure_weir_submerged_larinier";
 
 export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructure,
-                                dbg: boolean = false): Structure {
+                                dbg: boolean = false
+): Structure {
+    let ret: Structure;
     const oCd: {[s: string]: number} = {SeuilR: 0.4, VanneR: 0.6, SeuilT: 1.36};
     const rectStructPrms: RectangularStructureParams = new RectangularStructureParams(
         0,  // Q
@@ -47,35 +49,44 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
     switch (loiDebit) {
         case LoiDebit.WeirCem88d:
             rectStructPrms.Cd.v = oCd.SeuilR; // Cd Cem88d en seuil
-            return new StructureWeirCem88d(rectStructPrms, dbg);
+            ret =  new StructureWeirCem88d(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.WeirCem88v:
             rectStructPrms.Cd.v = oCd.VanneR; // Cd Cem88d en seuil
-            return new StructureWeirCem88v(rectStructPrms, dbg);
+            ret =  new StructureWeirCem88v(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.GateCem88d:
             rectStructPrms.Cd.v = oCd.SeuilR; // Cd Cem88d en vanne
-            return new StructureGateCem88d(rectStructPrms, dbg);
+            ret =  new StructureGateCem88d(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.GateCem88v:
             rectStructPrms.Cd.v = oCd.VanneR; // Cd Cem88d en vanne
-            return new StructureGateCem88v(rectStructPrms, dbg);
+            ret =  new StructureGateCem88v(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.Cunge80:
             rectStructPrms.Cd.v = oCd.VanneR; // Cd Cunge80 qu'on soit en seuil ou vanne
-            return new StructureCunge80(rectStructPrms, dbg);
+            ret =  new StructureCunge80(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.RectangularOrificeFree:
-            return new StructureRectangularOrificeFree(rectStructPrms, dbg);
+            ret =  new StructureRectangularOrificeFree(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.RectangularOrificeSubmerged:
-            return new StructureRectangularOrificeSubmerged(rectStructPrms, dbg);
+            ret =  new StructureRectangularOrificeSubmerged(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.WeirFree:
-            return new StructureWeirFree(rectStructPrms, dbg);
+            ret =  new StructureWeirFree(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.WeirSubmergedLarinier:
-            return new StructureWeirSubmergedLarinier(rectStructPrms, dbg);
+            ret =  new StructureWeirSubmergedLarinier(rectStructPrms, dbg);
+            break;
 
         case LoiDebit.KIVI:
             const structKiviPrm: StructureKiviParams = new StructureKiviParams(
@@ -87,7 +98,9 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
                 oCd.SeuilR, // alpha
                 0.001,      // béta
                 100);       // ZRAM : cote Radier Amont
-            return new StructureKivi(structKiviPrm, dbg);
+            ret =  new StructureKivi(structKiviPrm, dbg);
+            break;
+
         case LoiDebit.TriangularWeirFree:
             const structTriangPrms: TriangularStructureParams = new TriangularStructureParams(
                 0,          // Q
@@ -98,7 +111,9 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
                 oCd.SeuilT  // Cd pour un seuil triangulaire
                 // W = Infinity par défaut pour un seuil
             );
-            return new StructureTriangularWeir(structTriangPrms, dbg);
+            ret =  new StructureTriangularWeir(structTriangPrms, dbg);
+            break;
+
         case LoiDebit.TriangularTruncWeirFree:
             const structTriTruncPrms: TriangularTruncStructureParams = new TriangularTruncStructureParams(
                 0,          // Q
@@ -110,9 +125,11 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
                 oCd.SeuilT  // Cd pour un seuil triangulaire
                 // W = Infinity par défaut pour un seuil
             );
-            return new StructureTriangularTruncWeirFree(structTriTruncPrms, dbg);
+            ret =  new StructureTriangularTruncWeirFree(structTriTruncPrms, dbg);
+            break;
+
         case LoiDebit.OrificeSubmerged:
-            return new StructureOrificeSubmerged(
+            ret = new StructureOrificeSubmerged(
                 new StructureOrificeSubmergedParams(
                     0,      // Q
                     102,    // Z1
@@ -122,8 +139,16 @@ export function CreateStructure(loiDebit: LoiDebit, parentNub?: ParallelStructur
                 ),
                 dbg
             );
+            break;
 
         default:
             throw new Error(`type de LoiDebit ${LoiDebit[loiDebit]} non pris en charge`);
     }
+
+    // set reference to parent
+    if (parentNub) {
+        ret.parent = parentNub;
+    }
+
+    return ret;
 }
-- 
GitLab