Globali
{
    Cucina_2_5_Pensile_Scocca_RieZ                           ""   25                      NoSave
    Cucina_2_5_Pensile_Fianco_Dim                            ""   [19,0,0]                NoSave
    Cucina_2_5_Pensile_Coperchio_Dim                         ""   [0,19,0]                NoSave
    Cucina_2_5_Pensile_Fondo_Dim                             ""   [0,19,0]                NoSave
    Cucina_2_5_Pensile_Schiena_Dim                           ""   [0,0,8]                 NoSave
    Cucina_2_5_Pensile_Schiena_Rid                           ""   [23,23,0]               NoSave
    Cucina_2_5_Pensile_Schiena_Off                           ""   [11.5,11.5,16.5]        NoSave

    Cucina_2_5_Pensile_SchienaFin_Dim                        ""   [0,0,4]                 NoSave
    Cucina_2_5_Pensile_SchienaFin_Rid                        ""   [2,2,0]                 NoSave
    Cucina_2_5_Pensile_SchienaFin_Off                        ""   [1,1,0]                 NoSave

    Cucina_2_5_Pensile_Anta_Spessore                         ""   22                      NoSave
    Cucina_2_5_Pensile_Anta_VETRINA_Spessore                 ""   23                      NoSave
    Cucina_2_5_Pensile_Anta_RieX                             ""   3                       NoSave
    Cucina_2_5_Pensile_Anta_RieY                             ""   3                       NoSave
    Cucina_2_5_Pensile_Anta_Anta_Aria                        ""   3                       NoSave

    Cucina_2_5_Pensile_Ripiano_Dim                           ""   [0,8,0]                 NoSave
    Cucina_2_5_Pensile_Ripiano_Rid                           ""   [7,0,10.5]              NoSave
    Cucina_2_5_Pensile_Ripiano_Vasistas_Rid                  ""   [0,0,20]                NoSave
    Cucina_2_5_Pensile_Ripiano_Off                           ""   [3.5,0,0.5]             NoSave

    Cucina_2_5_Pensile_Scolapiatti_Telaio_Dim                ""   [0,18,0]                NoSave
    Cucina_2_5_Pensile_Scolapiatti_Telaio_Rid                ""   [0,0,1]                 NoSave

    Cucina_2_5_Pensile_Scolapiatti_Divisorio_Dim             ""   [0,19,0]                NoSave
    Cucina_2_5_Pensile_Scolapiatti_Divisorio_Rid             ""   [0,0,0.5]               NoSave
    Cucina_2_5_Pensile_Scolapiatti_Divisorio_Off             ""   [0,0,0.5]               NoSave

    Cucina_2_5_Pensile_Illuminazione_Fianco_Dim              ""   [15,9,9]                NoSave
    Cucina_2_5_Pensile_Illuminazione_Fianco_Rid              ""   [0,1,0]                 NoSave
    Cucina_2_5_Pensile_Illuminazione_Fianco_Off              ""   [3,0.5,150]             NoSave

    Cucina_2_5_Pensile_Illuminazione_Fondo_STESO_Dim         ""   [0,9,9]                 NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_STESO_Rid         ""   [80,0,0]                NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_STESO_Off         ""   [40,0,40]               NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Dim       ""   [0,12.5,11.5]           NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Rid       ""   [2,0,0]                 NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Off       ""   [1,-1,33.5]             NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Dim  ""   [0,12.5,11.5]           NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Rid  ""   [101,0,0]               NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Off  ""   [50.5,-1,33.5]          NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Dim   ""   [0,15,8.5]              NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Rid   ""   [82,0,0]                NoSave
    Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Off   ""   [41,-1,33.5]            NoSave

    Cucina_2_5_Pensile_Illuminazione_Coperchio_Dim           ""   [0,16,9]                NoSave
    Cucina_2_5_Pensile_Illuminazione_Coperchio_Rid           ""   [1,0,0]                 NoSave
    Cucina_2_5_Pensile_Illuminazione_Coperchio_Off           ""   [0.5,-1,150]            NoSave

    Cucina_2_5_Pensile_Finitura_Dim                          ""   [4,368,349]             NoSave
    Cucina_2_5_Pensile_Finitura_Rid                          ""   [0,0,-25]               NoSave
    Cucina_2_5_Pensile_Finitura_Off                          ""   [0,0,0]                 NoSave
}

Misure
{
   Cucina_2_5_Pensile_Larg "Modulo Pensile - Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 300 450 600 640 750 900 1050 1200
      Reali    300 450 600 640 750 900 1050 1200
   }

   Cucina_2_5_Pensile_Alt  "Modulo Pensile - Altezza" < OnlyDesc;NoDiz >
   {
      Nominali 736 1104 1288
      Reali    736 1104 1288
   }

   Cucina_2_5_Pensile_Prof "Modulo Pensile - Profondita" < OnlyDesc;NoDiz >
   {
      Nominali 350
      Reali    350
   }

   Cucina_2_5_Pensile_Scocca_Tipo  "Modulo Pensile - Scocca: Tipologia" < OnlyDesc;NoDiz >
   {
      Nominali "STANDARD" "SCOLAPIATTI" "CAPPA" "ANGOLO"
      Reali        0            1          2       3
   }

   Cucina_2_5_Pensile_Cappa_Opzione "Modulo Pensile - Cappa: Opzione" < OnlyDesc=1;NoDiz >
   {
      Nominali "LAGO" "SLITTA" "CLIENTE"
      Reali       0      1         2
   }

   Cucina_2_5_Pensile_Anta_Opzione "Modulo Pensile - Anta: Opzione" < OnlyDesc=1;NoDiz>
   {
      Nominali "STANDARD" "VETRINETTA" "VETRINA"
      Reali        0           1           2
   }

   Cucina_2_5_Pensile_Anta_Apertura "Modulo Pensile - Anta: Apertura" < OnlyDesc=1;NoDiz>
   {
      Nominali "BATTENTE" "VASISTAS" "BASCULANTE" "RIBALTA"
      Reali        0           1          2           3
   }

   Cucina_2_5_Pensile_Illuminazione_Fondo_Tipo "Modulo Pensile - Illuminazione Fondo: Tipo" < OnlyDesc=1;NoDiz >
   {
      Nominali "STESO" "INCASSO" "SCOLAPIATTI"
      Reali       0        1           2
   }
}

Subroutine
{
   PROCEDURA Cucina_2_5_Pensile_Dimensioni
   {
      // Eredito variabili utili
      VAR_IMPLICITLY_INHERITS( ATTUALE(), 0)

      var = ""
      vars = "Var_Anta_Apertura_Dsc;Var_Anta_Opzione_Dsc"
      while( strSet( var, lstTok(vars)) != "")
      {
         if( VAR_EXIST( ATTUALE(), var))    { continue }
         if( IS_VAR_FIXED( ATTUALE(), var)) { continue }

         VAR_CREATE_STR( ATTUALE(), var, VAR_VAL_STR( ATTUALE(), var), $MODE_IMPLICIT, "")
      }

      // Dimensioni componenti
      VAR_CREATE_XYZ( ATTUALE(), "Cucina_2_5_Pensile_Fianco_Dim", $Cucina_2_5_Pensile_Fianco_Dim.x, $Cucina_2_5_Pensile_Fianco_Dim.y, $Cucina_2_5_Pensile_Fianco_Dim.z, $MODE_XYZ_ABSOLUTE, "")
      VAR_CREATE_XYZ( ATTUALE(), "Cucina_2_5_Pensile_Fondo_Dim", $Cucina_2_5_Pensile_Fondo_Dim.x, $Cucina_2_5_Pensile_Fondo_Dim.y, $Cucina_2_5_Pensile_Fondo_Dim.z, $MODE_XYZ_ABSOLUTE, "")
      VAR_CREATE_XYZ( ATTUALE(), "Cucina_2_5_Pensile_Coperchio_Dim", $Cucina_2_5_Pensile_Coperchio_Dim.x, $Cucina_2_5_Pensile_Coperchio_Dim.y, $Cucina_2_5_Pensile_Coperchio_Dim.z, $MODE_XYZ_ABSOLUTE, "")

      while( Var_Anta_Opzione_Dsc == "VETRINA")
      {
         if( Var_Anta_Apertura_Dsc == "BATTENTE")
         {
            Cucina_2_5_Pensile_Coperchio_Dim.y = 22
            Cucina_2_5_Pensile_Fondo_Dim.y = 22

            break
         }

         Cucina_2_5_Pensile_Fianco_Dim.x = 22
         break
      }
   }

   PROCEDURA Cucina_2_5_Pensile_Ripiani_Attrezza
   {
      Ripiani = SE_NUM( VAR_VAL( idx_att, "Ripiani") <= 0, 0, Ripiani)

      if( $OnLoadOrder == 1)                                { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 | ACTION() == 1064) { EXITSUB() }
      if( VAR_VAL( idx_att, "OnRicalcola") > 0)             { EXITSUB() }

      // Colleziono ripiani attrezzati in automatico
      wk_ripiano_elm = "Cucina_2_5_Pensile_Ripiano"
      if( Var_Scocca_Tipo_Dsc == "ANGOLO") { wk_ripiano_elm = "Cucina_2_5_Pensile_Ang_RipianoL" }

      COMPONENTI2( "wk_ripiani", idx_att, wk_ripiano_elm)

      wk_ripiano_num = 0
      while( inc(wk_ripiano_num) <= wk_ripiani)
      {
         wk_ripiano_att = wk_ripiani[wk_ripiano_num]

         if( INSERIMENTO2(wk_ripiano_att) != $ins2_attrezzato2)
         {
            DEL_ARRAY_ITEM( idx_att, "wk_ripiani", wk_ripiano_num)
            dec(wk_ripiano_num)
         }
      }

      if( wk_ripiani == Ripiani
        & VAR_VAL( idx_att, "Ripiani_Ricalcola") <= 0)      { EXITSUB() }

      DEL_VAR_MODIFICATE( idx_att, "Ripiani_Ricalcola")
      DEL_VAR( idx_att, "Ripiani_Ricalcola")

      wk_ripiani_num = wk_ripiani

      wk_ripiano_vano_num = 1
      wk_ripiano_vano_alt = VAR_VAL( idx_att, STRCAT( "vano_h_", STR(wk_ripiano_vano_num)))

      // Aggiungo mancanti
      wk_ripiano_passo = ( wk_ripiano_vano_alt + $Cucina_2_5_Pensile_Ripiano_Dim.y)/(Ripiani + 1) // Interasse riferito al centro dei ripiani
      wk_ripiano_num   = wk_ripiani
      while( inc(wk_ripiano_num) <= Ripiani)
      {
         wk_ripiano_alt = wk_ripiano_passo*wk_ripiano_num - $Cucina_2_5_Pensile_Ripiano_Dim.y/2

         COMANDO("PUSH_SITUAZIONE")
         COMANDO( STRCAT( "SETTA ", STR(idx_att)))
         COMANDO( STRCAT( "ELEMENTO_I ", wk_ripiano_elm))
         COMANDO( "STRUTTURA_I")
         COMANDO( STRCAT( "VAR_FIX Ripiano_Num=", STR(wk_ripiano_num)))
         COMANDO("VAR_SET NO_AUTO=1")
         COMANDO( STRCAT( "VANO ", STR(wk_ripiano_vano_num)))
         COMANDO( STRCAT( "ATTREZZA_Y2 ", STR(wk_ripiano_alt)))
         COMANDO("POP_SITUAZIONE")
      }

      // Cancello in eccesso
      wk_ripiano_num = wk_ripiani + 1
      while( dec(wk_ripiano_num) > Ripiani)
      {
         wk_ripiano_att = wk_ripiani[wk_ripiano_num]

         DEL_ARRAY_ITEM( idx_att, "wk_ripiani", wk_ripiano_num)
         COMANDO( STRCAT( "CANCELLA ", STR(wk_ripiano_att)," //Cucina_2_5_Pensile_Ripiani_Attrezza"))
      }

      // Riposiziono
      wk_ripiano_passo = ( wk_ripiano_vano_alt + $Cucina_2_5_Pensile_Ripiano_Dim.y)/(Ripiani + 1)
      wk_ripiano_num   = 0
      while( inc(wk_ripiano_num) <= wk_ripiani)
      {
         wk_ripiano_att = wk_ripiani[wk_ripiano_num]
         wk_ripiano_alt = wk_ripiano_passo*wk_ripiano_num - $Cucina_2_5_Pensile_Ripiano_Dim.y/2

         if( VAR_EXIST( wk_ripiano_att, "base_0_offset") == 0)
         {
            COMANDO( STRCAT( "CHANGE_LEV ", STR(wk_ripiano_att), " ", STR(wk_ripiano_alt), " //Cucina_2_5_Pensile_Ripiani_Attrezza"))
         }
      }

      // Ricalcolo se variati
      if( wk_ripiani_num != Ripiani)
      {
         VAR_CREATE_NUM( idx_att, "OnRicalcola", 1, $MODE_NOSAVE, "")
         COMANDO( STRCAT( "RICALCOLA_UNA ", STR(idx_att), " no_agganciati //Cucina_2_5_Pensile_Ripiani_Attrezza"))
         COMANDO( FMT( "VAR_CHANGE 0 {} OnRicalcola = 0 //Cucina_2_5_Pensile_Ripiani_Attrezza", STR(idx_att)))
      }
   }

   PROCEDURA Cucina_2_5_Pensile_Ripiano_Controllo_Posizione
   {
      if( $OnLoadOrder == 1)                                                         { EXITSUB() }
      if( COMPONENDO())                                                              { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2)                                             { EXITSUB() }

      if( VAR_VAL_STR( -1, "wk_proc_nome") == "Cucina_2_5_Pensile_Ripiani_Attrezza") { EXITSUB() }

      if( VAR_EXIST( idx_att, "base_0_prec"))
      {
         wk_offset_x = VAR_VAL( idx_att, "base_0_offset.x")
         wk_offset_y = VAR_VAL( idx_att, "base_0_offset.y") + ( base_0.y - base_0_prec.y)
         wk_offset_z = VAR_VAL( idx_att, "base_0_offset.z")

         // TODO: da verificare prima di abilitare
         //base_0_offset = [ wk_offset_x, wk_offset_y, wk_offset_z]
         //base_0.y = base_0_prec.y
      }

      base_0_prec = base_0
   }

   PROCEDURA Cucina_2_5_Pensile_Set_Gest_C165_Optional
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1) { EXITSUB() }

      CAT_VM_var     = "C165"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)

      if( VAR_EXIST( idx_att, CAT_VM_gestvar) != 1)          { EXITSUB() }

      // SM002 - Led su fondo
      // SM184 - Led interno su fianco
      // SM193 - Led integrato (solo su pensile scolapiatti)
      // SM194 - Led esterno   (solo su pensile scolapiatti)
      // SM195 - Esterno fianco sinistro laccato
      // SM196 - Esterno fianco destro laccato
      // SM209 - Led interno su coperchio
      CAT_VM_opz = "SM002;SM184;SM193;SM194;SM195;SM196;SM209"
      CAT_VM_sel = ""

      Var_Scocca_Tipo_Dsc = VAR_VAL_STR( idx_att, "Var_Scocca_Tipo_Dsc")

      //SM002/SM193 - Led incassato su fondo/Led integrato (solo su pensile scolapiatti)
      COMPONENTI2( "wk_led_fondo", idx_att, "Cucina_2_5_Pensile_Illuminazione_Fondo")
      if( wk_led_fondo > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, SE_STR( Var_Scocca_Tipo_Dsc == "SCOLAPIATTI", "SM193", "SM002")) }

      // SM184 - Led su fianco
      COMPONENTI2( "wk_led_fianco", idx_att, "Cucina_2_5_Pensile_Illuminazione_Fianco")
      if( wk_led_fianco > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM184") }

      // SM194 - Led esterno (solo su pensile scolapiatti)
      if( Var_Scocca_Tipo_Dsc == "SCOLAPIATTI")
      {
         WITH_ALIAS( "wk_led_steso", "Cucina_2_5_Pensile_Illuminazione_Fondo")

         wk_led_steso_num = 0
         while( inc(wk_led_steso_num) <= wk_led_steso)
         {
            wk_led_steso_idx = wk_led_steso[wk_led_steso_num]

            if( VAR_VAL_STR( wk_led_steso_idx, "Var_Tipo_Dsc") != "STESO")  { continue }

            SET_#(wk_led_steso_idx)
            if( #idx_ref_array <= 0) { continue }

            wk_idx_ref_num = 0
            while( inc(wk_idx_ref_num) <= #idx_ref_array)
            {
               wk_idx_ref_att = #idx_ref_array[wk_idx_ref_num]
               wk_idx_ref_path = PATH_NAME( wk_idx_ref_att, 0)

               if( IS_MATCH( wk_idx_ref_path, STRCAT( path_att, "*")) != 1) { continue }

               AddVal_CAT_VM_sel( CAT_VM_sel, "SM194")

               wk_led_steso_num = wk_led_steso
               break
            }
         }
      }

      //SM209 - Led interno su coperchio
      COMPONENTI2( "wk_led_coperchio", idx_att, "Cucina_2_5_Pensile_Illuminazione_Coperchio")
      if( wk_led_coperchio > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM209") }

      // SM195/SM196 - Fianchi laccati
      COMPONENTI2( "wk_fianco", idx_att, "Cucina_2_5_Pensile_Fusto_Fianco")

      wk_fianco_num = 0
      while( inc(wk_fianco_num) <= wk_fianco)
      {
         wk_fianco_idx = wk_fianco[wk_fianco_num]
         wk_fianco_verso = VAR_VAL( wk_fianco_idx, "Verso")
         wk_fianco_fin_var = GetVarGest( VAR_VAL_STR( wk_fianco_idx, "FIN_var"))
         wk_fianco_fin_val = VAR_VAL_STR( wk_fianco_idx, wk_fianco_fin_var)
         wk_fianco_fin_lac = IS_MATCH( wk_fianco_fin_val, "LC*")

         if( wk_fianco_fin_lac > 0)
         {
            //SM195 - Fianco sx laccato
           if( wk_fianco_verso < 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM195") }

           //SM196 - Fianco dx laccato
           if( wk_fianco_verso > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM196") }
         }
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Cucina_2_5_Pensile_Fianco_Set_Gest_C062_Posizione
   {
      VarAdd = "GEST_C062"
      if( IS_VAR_FIXED( idx_att, VarAdd)) { DEL_VAR_MODIFICATE( idx_att, VarAdd) }

      VAR_VALUESTR_SET( idx_att, VarAdd, SE_STR( Verso > 0, "DX005", "SX005"))
      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Cucina_2_5_Pensile_Illuminazione_Fianco_Attrezza
   {
      if( $OnLoadOrder == 1)                                   { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 | ACTION() == 1064)    { EXITSUB() }
      if( VAR_VAL_STR( idx_att, "Var_Anta_Opzione_Dsc") == "") { EXITSUB() }
      if( VAR_VAL( idx_att, "OnRicalcola") > 0)                { EXITSUB() }
      if( Verso >= 0)                                          { EXITSUB() }

      wk_led_elm = "Cucina_2_5_Pensile_Illuminazione_Fianco"
      wk_led_alt = 0
      wk_led_vano_num = 0
      COMPONENTI2( "wk_led", idx_att, wk_led_elm)
      if( wk_led <= 0
        & Var_Anta_Opzione_Dsc == "VETRINETTA")
      {
         COMANDO("PUSH_SITUAZIONE")
         COMANDO( STRCAT( "SETTA ", STR(idx_att)))
         COMANDO( STRCAT( "ELEMENTO_I ", wk_led_elm))
         COMANDO( "STRUTTURA_I")
         COMANDO("VAR_SET NO_AUTO=1")
         COMANDO( STRCAT( "VANO ", STR(wk_led_vano_num)))
         COMANDO( STRCAT( "ATTREZZA2 ", STR(wk_led_alt)))
         COMANDO("POP_SITUAZIONE")
      }
   }

   PROCEDURA Cucina_2_5_Pensile_Illuminazione_Fianco_Set_Gest_C003
   {
      VarAdd = "GEST_C003"
      if( IS_VAR_FIXED( idx_att, VarAdd))   { DEL_VAR_MODIFICATE( idx_att, VarAdd) }

      VAR_VALUESTR_SET( idx_att, VarAdd, SE_STR( Verso > 0, "DX005", "SX005"))
      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1)  { EXITSUB() }

      CAT_VM_var     = "C008"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)

      if( VAR_EXIST( ATTUALE(), CAT_VM_gestvar) != 1)         { EXITSUB() }

      CAT_VM_opz = "SM059;SM074;SM189;SM191;SM192"
      CAT_VM_sel = ""

      // Variabili appoggio
      Var_Scocca_Tipo_Dsc = VAR_VAL_STR( idx_att, "Var_Scocca_Tipo_Dsc")

      // SM059 - Sag. foro per cappa
      if( Var_Scocca_Tipo_Dsc == "CAPPA")
      {
         wk_add = 0

         wk_case = 0
         while( inc(wk_case) <= 1)
         {
            if( nome_att == "Cucina_2_5_Pensile_Fusto_Fondo")         { wk_add = 1  break }

            if( VAR_EXIST(idx_att, "wk_cappa") != 1 )                 { COMPONENTI2( "wk_cappa", idx_topl, "Cucina_2_5_Pensile_Cappa") }
            if( wk_cappa <= 0)                                        { break }

            wk_cappa_num = 0
            while( inc(wk_cappa_num) <= wk_cappa)
            {
               wk_cappa_idx = wk_cappa[wk_cappa_num]

               if( nome_att == "Cucina_2_5_Pensile_Fusto_Coperchio"
                 & VAR_VAL( wk_cappa_idx, "Var_Cappa_ScassoCop") > 0) { wk_add = 2 }

               if( nome_att == "Cucina_2_5_Pensile_Fusto_Schiena"
                 & VAR_VAL( wk_cappa_idx, "Var_Cappa_ScassoSch") > 0) { wk_add = 3 }
            }
         }

         if( wk_add > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM059") }
      }

      // SM074 - Led incassato
      wk_led_composto = "Cucina_2_5_Pensile_Illuminazione_Fianco"
      if( nome_att == "Cucina_2_5_Pensile_Fusto_Fondo")     { wk_led_composto = "Cucina_2_5_Pensile_Illuminazione_Fondo"     }
      if( nome_att == "Cucina_2_5_Pensile_Fusto_Coperchio") { wk_led_composto = "Cucina_2_5_Pensile_Illuminazione_Coperchio" }

      COMPONENTI2( "wk_led_incasso", idx_att, wk_led_composto)

      if( wk_led_incasso > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM074") }

      // SM189 - Lavorazione uscita cavi led (sui contenitori terminali del led esterno)
      if( nome_att == "Cucina_2_5_Pensile_Fusto_Fondo")
      {
         WITH_ALIAS( "wk_led_steso", "Cucina_2_5_Pensile_Illuminazione_Fondo")

         wk_led_steso_num = 0
         while( inc(wk_led_steso_num) <= wk_led_steso)
         {
            wk_led_steso_idx = wk_led_steso[wk_led_steso_num]

            wk_led_steso_idx_ref = STRCAT( ";", VAR_VAL_STR( wk_led_steso_idx, "idx_ref_strarray"), ";")

            if( IS_MATCH( wk_led_steso_idx_ref, STRCAT( ";", STR(idx_att), ";*"))
              | IS_MATCH( wk_led_steso_idx_ref, STRCAT( "*;", STR(idx_att), ";")))
            {
               AddVal_CAT_VM_sel( CAT_VM_sel, "SM189")

               break
            }
         }
      }

      // SM191/SM192 - 1/2 fori per sensore
      COMPONENTI2( "wk_sens", idx_att, "Cucina_2_5_Pensile_Illuminazione_Sensore")

      if( wk_sens > 0)
      {
         AddVal_CAT_VM_sel( CAT_VM_sel, SE_STR( wk_sens == 1, "SM191", "SM192"))
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Cucina_2_5_Illuminazione_Fianco_Set_Gest_C200
   {
      VarAdd = "GEST_C200"
      if( IS_VAR_FIXED( idx_att, VarAdd))   { DEL_VAR_MODIFICATE( idx_att, VarAdd) }

      // Uscita cavo rispetto al fianco
      // TODO: gestire sovrapposizione moduli
      wk_uscita_led = "SUPERIORE"
      //if( UN_PADRE("ScoccaT_Col*")) { wk_uscita_led = "INFERIORE" }

      // Uscita cavo rispetto al led
      // Il led viene considerato come a luce indiretta che punta verso il retro e applicato sul coperchio
      if( wk_uscita_led == "SUPERIORE") { gest_C200 = SE_STR( Verso < 0, "DX001", "SX001") }
      if( wk_uscita_led == "INFERIORE") { gest_C200 = SE_STR( Verso > 0, "DX001", "SX001") }

      VAR_VALUESTR_SET( idx_att, VarAdd, gest_C200)
      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Cucina_2_5_Pensile_Cappa_Posiziona_Carter
   {
      @escluso = SE_NUM( @Divisorio_Num <= Divisori, 0, 1)

      @X = X
      @Y = Divisori[@Divisorio_Num] - @Yr
      @Z = SE_NUM(Var_Anta_Apertura_Dsc != "BASCULANTE", Z-Cappa_Vano_Z_Aria_Rt, Z-Cappa_Vano_Z_Aria_Rt-Cappa_Vano_Z_Aria_Fr)

      @base_0 = base_0
      @base_0.y = base_0.y + Cappa_Vano_Y + ArraySum( idx_att, "Divisori", 1, @Divisorio_Num - 1)
      @base_0.z = base_0.z + Cappa_Vano_Z_Aria_Rt

      @VAR_Carter = VAR_Carter
   }

   PROCEDURA Cucina_2_5_Pensile_Tipo_Collo
   {
      // Tipi collo gestiti:
      // - 201: PENSILI CUCINA RIG. COLL. LED
      // - 202: PENSILI CUCINA RIG. COLL. LED + 1FF
      // - 203: PENSILI CUCINA RIG. COLL. LED + 2FF

      // 0 - Reset tipo collo attuali, dove possibile
      WITH_VAR_LOCAL( ATTUALE(), "tipoColloCmp", "TIPO_COLLO", $alfa_con_figli, 0, "")
      tipoColloCmp[inc(tipoColloCmp)] = ATTUALE()

      tipoColloCmpNum = 0
      while( inc(tipoColloCmpNum) <= tipoColloCmp)
      {
         tipoColloIdx = tipoColloCmp[tipoColloCmpNum]

         if( IS_VAR_FIXED( tipoColloIdx, "TIPO_COLLO")) { continue }

         DEL_VAR( tipoColloIdx, "TIPO_COLLO")
      }

      // 1 - Componenti che necessitano di tipo collo
      tipoColloCmp = 0

      // 1.1 - Illuminazioni
      // 1.1.1 - Fondo
      COMPONENTI2( "illuminazioniFondo", ATTUALE(), "Cucina_2_5_Pensile_Illuminazione_Fondo")
      MergeArray2Array( ATTUALE(), "illuminazioniFondo", "tipoColloCmp")

      // 1.1.2 - Fianco
      COMPONENTI2( "illuminazioniFianco", ATTUALE(), "Cucina_2_5_Pensile_Illuminazione_Fianco")
      MergeArray2Array( ATTUALE(), "illuminazioniFianco", "tipoColloCmp")

      // 1.1.3 - Coperchio
      COMPONENTI2( "illuminazioniCoperchio", ATTUALE(), "Cucina_2_5_Pensile_Illuminazione_Coperchio")
      MergeArray2Array( ATTUALE(), "illuminazioniCoperchio", "tipoColloCmp")

      // 1.2 - Fasce fianchi di finitura
      COMPONENTI2( "fiaFinFasce", ATTUALE(), "Cucina_2_5_Pensile_FiancoFinitura_Fascia")
      MergeArray2Array( ATTUALE(), "fiaFinFasce", "tipoColloCmp")

      if( tipoColloCmp <= 0) { EXITSUB() }

      // 2 - Assegno tipi collo
      tipoColloCmpNum = 0
      while( inc(tipoColloCmpNum) <= tipoColloCmp)
      {
         tipoColloIdx = tipoColloCmp[tipoColloCmpNum]

         // 2.1 - Solo selezionati
         if( CheckSel_ORD_SOST(tipoColloIdx) <= 0)                                            { continue }

         // 2.2 - Solo accessori utente
         if( GetTopLevelTipo( tipoColloIdx, 0, $ins2_attrezzato) == PADRE( tipoColloIdx, -1)) { continue }

         // 2.3 - Top level di sostituzione
         tipoColloIdxPdrSost = GetTopLevelSost(tipoColloIdx)
         if( tipoColloIdxPdrSost < 0
           | tipoColloIdxPdrSost == tipoColloIdx)                                             { continue }
         if( IS_VAR_FIXED( tipoColloIdxPdrSost, "TIPO_COLLO"))                                { continue }

         // 2.4 - Tipo collo
         tipoCollo = VAR_VAL_STR( tipoColloIdxPdrSost, "TIPO_COLLO")

         while(1)
         {
            // 2.4.1 - Se fixato, tipo collo del componente
            if( IS_VAR_FIXED( tipoColloIdx, "TIPO_COLLO"))
            {
               tipoCollo = VAR_VAL_STR( tipoColloIdx, "TIPO_COLLO")  break
            }

            // 2.4.2 - Tipo collo del top level
            if( tipoCollo != "")                                   { break }

            // 2.4.3 - Ricavo tipo collo
            tipoColloFiaFinSx = 0
            tipoColloFiaFinDx = 0
            COMPONENTI2( "tipoColloFiaFinFasce", tipoColloIdxPdrSost, "Cucina_2_5_Pensile_FiancoFinitura_Fascia")

            tipoColloFiaFinFasciaNum = 0
            while( tipoColloFiaFinSx + tipoColloFiaFinDx < 2
                 & inc(tipoColloFiaFinFasciaNum) <= tipoColloFiaFinFasce)
            {
               tipoColloFiaFinFasciaIdx = tipoColloFiaFinFasce[tipoColloFiaFinFasciaNum]

               tipoColloFiaFinFasciaVerso = VAR_VAL( tipoColloFiaFinFasciaIdx, "Verso")
               if( tipoColloFiaFinFasciaVerso < 0) { tipoColloFiaFinSx = 1 continue }
               if( tipoColloFiaFinFasciaVerso > 0) { tipoColloFiaFinDx = 1 continue }
            }

            tipoCollo = 201 + tipoColloFiaFinSx + tipoColloFiaFinDx
            tipoCollo = STR(tipoCollo)

            break
         }

         // 2.5 - Assegno
         VAR_VALUESTR_SET( tipoColloIdx, "TIPO_COLLO", tipoCollo)
         VAR_VALUESTR_SET( tipoColloIdxPdrSost, "TIPO_COLLO", tipoCollo)
      }
   }
}

Elemento Cucina_2_5_Pensile
{
   Descrizione = "Cucine 2.5: pensile"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include              %path_bdm%\var_db.inc

      X                     "Larghezza"          300        ShowAlways Menu (  Cucina_2_5_Pensile_Larg )  Utente ( )
      Y                     "Altezza"            736        ShowAlways Menu (  Cucina_2_5_Pensile_Alt  )  Utente ( )
      Z                     "Profondita"         350        ShowAlways Menu (  Cucina_2_5_Pensile_Prof )  Utente ( )

      Scocca_Z              "Socca - Profondita" 325

      Var_Scocca_Tipo       "Scocca - Tipo"      0
      Var_Scocca_Tipo_Dsc   "Scocca - Tipo"      "STANDARD" ShowAlways

      Var_Anta_Apertura     "Anta - Apertura"    0
      Var_Anta_Apertura_Dsc "Anta - Apertura"    "BATTENTE" ShowAlways

      Var_Anta_Opzione      "Anta - Opzioni"     0
      Var_Anta_Opzione_Dsc  "Anta - Opzioni"     "STANDARD" ShowAlways

      Var_Cappa_Opzione     "Cappa - Opzioni"    0
      Var_Cappa_Opzione_Dsc "Cappa - Opzioni"    "LAGO"     ShowAlways

      Var_Lamierino         "Lamierino"          0          Boolean

      Verso                 "Verso scocca"      -1                     Menu (  DXSX )

      Watt                  ""                   0

      FLAG_Debug            "Debug"              0          Boolean

      COD_EREDITA           ""                   "PRE;POST"

      M4_A_MURO             ""                   1
      M4_CNT_LINK_MODE__    ""                   2
      M4_CNT_MODE__         ""                   1
      M4_CNT_MODE2__        ""                   1

      FillerM2G             " "                  ""         ShowAlways
      M4_MIS                ""                   "X;Y;Z;Var_*_Dsc;Filler*"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Modello
      GOSUB Cucina_Versione
      GOSUB Mens_Assegna_Riduzioni

      // Valori
      Var_Scocca_Tipo_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Scocca_Tipo", Var_Scocca_Tipo)
      Var_Anta_Apertura_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Apertura", Var_Anta_Apertura)
      Var_Anta_Opzione_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Opzione", Var_Anta_Opzione)
      Var_Cappa_Opzione_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Cappa_Opzione", Var_Cappa_Opzione)

      // Variabili: visibilià e menù
      if( ACTION() == 1)
      {
         if( FLAG_Debug > 0
           | $ATTIVA_DLL == 0)
         {
            VAR_CREATE_NUM( idx_att, "Var_Scocca_Tipo", Var_Scocca_Tipo, $MODE_MISURE, "Cucina_2_5_Pensile_Scocca_Tipo")
            VAR_CREATE_NUM( idx_att, "Var_Anta_Apertura", Var_Anta_Apertura, $MODE_MISURE, "Cucina_2_5_Pensile_Anta_Apertura")
            VAR_CREATE_NUM( idx_att, "Var_Anta_Opzione", Var_Anta_Opzione, $MODE_MISURE, "Cucina_2_5_Pensile_Anta_Opzione")
            VAR_CREATE_NUM( idx_att, "Var_Cappa_Opzione", Var_Cappa_Opzione, $MODE_MISURE, "Cucina_2_5_Pensile_Cappa_Opzione")
         }
      }

      // Anta
      Anta_Tipo = "Blocco"
      if( Cucina_ModelloDsc == "Now")        { Anta_Tipo = "AntaMadiaNow" }
      if( Cucina_ModelloDsc == "Cut"
        | Cucina_ModelloDsc == "36e8")       { Anta_Tipo = "Cuc_Anta"     }
      if( Var_Anta_Opzione_Dsc == "VETRINA") { Anta_Tipo = "Cuc_Anta"     }

      // Lamierino
      if( IS_VAR_FIXED( idx_att, "Var_Lamierino") != 1)
      {
         Var_Lamierino = 0
         if( Var_Anta_Opzione_Dsc == "VETRINETTA") { Var_Lamierino = 1 }

         if( Var_Lamierino == 0)
         {
            WITH_VAR( "Var_Lamierino", "Var_Anta_Opzione_Dsc", $alfa, 1, "VETRINETTA")

            wk_lamierino_num = 0
            while( Var_Lamierino == 0
                 & inc(wk_lamierino_num) <= Var_Lamierino)
            {
               if( VAR_VAL_STR( Var_Lamierino[wk_lamierino_num], "nome_att") == nome_att) { Var_Lamierino = 1 }
            }
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      // Dimensioni
      Scocca_Z = Z - $Cucina_2_5_Pensile_Scocca_RieZ

      Cucina_2_5_Pensile_Anta_Spessore = $Cucina_2_5_Pensile_Anta_Spessore
      if( Var_Anta_Opzione_Dsc == "VETRINA") { Cucina_2_5_Pensile_Anta_Spessore = $Cucina_2_5_Pensile_Anta_VETRINA_Spessore }

      // Vani
      /// Vano ante
      vano_l_0        = X - $Cucina_2_5_Pensile_Anta_RieX
      vano_h_0        = Y - $Cucina_2_5_Pensile_Anta_RieY
      vano_p_0        = Cucina_2_5_Pensile_Anta_Spessore
      vano_0_0.x      = base_0.x + (X - vano_l_0)/2
      vano_0_0.y      = base_0.y + (Y - vano_h_0)/2
      vano_0_0.z      = base_0.z + Z - vano_p_0
      vano_hide_0     = 1
      vano_nome_0     = "Anta"
      vano_elementi_0 = ""

      // Illuminazioni
      if( IS_VAR_FIXED( idx_att, "Watt") != 0) { EXITSUB() }

      Watt = 0
      WITH_VAR_LOCAL( idx_att, "wk_illuminazioni", "Watt", $num_con_figli, 0, "")

      wk_ill_num = 0
      if( inc(wk_ill_num) <= wk_illuminazioni)
      {
         Watt = Watt + VAR_VAL( wk_illuminazioni[wk_ill_num], "Watt")
      }
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Cucina_2_5_Pensile_Set_Gest_C165_Optional
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C007
      }

      if( TABER_REGOLA=="POST" )
      {
         GOSUB Set_Verso
      }
   }

   Procedura TipoCollo
   {
      GOSUB Cucina_2_5_Pensile_Tipo_Collo
   }

   Procedura Vault
   {
      vaultY = VAR_VAL( idx_att, "ORD_Y")
      if( vaultY <= 0) { vaultY = Y }

      if( Cucina_ModelloDsc == "Cut")
      {
         while( Var_Anta_Apertura_Dsc != "BATTENTE")
         {
            if( vaultY <= 368)  { vaultFile = "ASM_012567"  break }
            if( vaultY <= 552)  { vaultFile = "ASM_012568"  break }
            if( vaultY <= 644)  { vaultFile = "ASM_012569"  break }

            break
         }

         while( Var_Anta_Apertura_Dsc != "VASISTAS")
         {
            if( vaultY <= 368)  { vaultFile = "ASM_012566"  break }
            if( vaultY <= 552)  { vaultFile = "ASM_012564"  break }

            break
         }

         while( Var_Anta_Apertura_Dsc != "BASCULANTE")
         {
            if( vaultY <= 552)  { vaultFile = "ASM_012563"  break }
            if( vaultY <= 644)  { vaultFile = "ASM_012544"  break }

            break
         }
      }

      if( Cucina_ModelloDsc == "Now")
      {
         while( Var_Scocca_Tipo_Dsc != "ANGOLO")
         {
            if( vaultY <= 644)  { vaultFile = "ASM_012525"  break }
            if( vaultY <= 736)  { vaultFile = "ASM_012526"  break }
            if( vaultY <= 920)  { vaultFile = "ASM_012527"  break }
            if( vaultY <= 1104) { vaultFile = "ASM_012528"  break }
            if( vaultY <= 1288) { vaultFile = "ASM_012523"  break }

            break
         }

         while( Var_Scocca_Tipo_Dsc == "ANGOLO")
         {
            if( vaultY <= 644)  { vaultFile = "ASM_012579"  break }
            if( vaultY <= 736)  { vaultFile = "ASM_012587"  break }
            if( vaultY <= 920)  { vaultFile = "ASM_012588"  break }
            if( vaultY <= 1104) { vaultFile = "ASM_012589"  break }
            if( vaultY <= 1288) { vaultFile = "ASM_012589"  break }

            break
         }
      }
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 120, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Cucina_2_5_Pensile_Fusto fus
   {
      @Z = Scocca_Z

      @base_0 = base_0

      @HIDE = 0
   }

   Posiziona LamierinoVetrinettaNow lamcop
   {
      @escluso = SE_NUM( Var_Lamierino > 0, 0, 1)

      @X = X
      @Z = 50

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = alto_1.y
      @base_0.z = base_0.z + Z - @Z

      @HIDE = 0
   }

   Posiziona %Anta_Tipo% anta
   {
      @X = vano_l_0
      @Y = vano_h_0
      @Z = vano_p_0

      @base_0 = vano_0_0

      @Verso = Verso
      @AperturaMn = 0 //Vedi AperAnt_368
      @FAttSdoppia = 1
      @SdoppiaAnte = 1

      if( Var_Anta_Apertura_Dsc == "RIBALTA")
      {
         @AperturaMn = 1
         @FAttSdoppia = 0
      }

      if( Var_Anta_Apertura_Dsc == "VASISTAS"
        | Var_Anta_Apertura_Dsc == "BASCULANTE")
      {
         @AperturaMn = 2
         @FAttSdoppia = 0
      }

      // Definizione fasce Now
      // TODO: funzione dedicata, da valutare se inserire qui o nell'elemento posizionato
      if( Cucina_ModelloDsc != "Now") { EXITSUB() }

      @TipoFrontale = 0
      @TipoFrontaleNOW = 6

      @SdoppiaAnte = 1
      @X_Ant_Dx = 617
      @X_Ant_Sx = @X - @X_Ant_Dx - $Cucina_2_5_Pensile_Anta_Anta_Aria
      if( @X_Ant_Sx < 502)
      {
         @X_Ant_Sx = 502
         @X_Ant_Dx = @X - @X_Ant_Sx - $Cucina_2_5_Pensile_Anta_Anta_Aria
      }

      if( @X <= 1047)
      {
         @X_Ant_Dx = 567
         @X_Ant_Sx = @X - @X_Ant_Dx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         if( @X_Ant_Sx < 402)
         {
            @X_Ant_Sx = 402
            @X_Ant_Dx = @X - @X_Ant_Sx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         }
      }

      if( @X <= 897)
      {
         @X_Ant_Dx = 437
         @X_Ant_Sx = @X - @X_Ant_Dx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         if( @X_Ant_Sx < 307)
         {
            @X_Ant_Sx = 307
            @X_Ant_Dx = @X - @X_Ant_Sx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         }
      }

      if( @X <= 747)
      {
         @X_Ant_Dx = 367
         @X_Ant_Sx = @X - @X_Ant_Dx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         if( @X_Ant_Sx < 322)
         {
            @X_Ant_Sx = 322
            @X_Ant_Dx = @X - @X_Ant_Sx - $Cucina_2_5_Pensile_Anta_Anta_Aria
         }
      }

      if( @X <= 637
        | Var_Anta_Apertura_Dsc == "VASISTAS"
        | Var_Anta_Apertura_Dsc == "BASCULANTE" )
      {
         @SdoppiaAnte = 0
         @X_Ant_Dx = 0
         @X_Ant_Sx = @X
      }

      @Y_Ant_Sx = @Y
      @Y_Ant_Dx = @Y

      @VAR_opzione_anta = Var_Anta_Opzione_Dsc
   }

   Posiziona RigaOrdine_NonGraficato alim
   {
      @escluso = SE_NUM( Watt > 0, 0, 1)

      @base_0 = base_0

      @GEST_CODICE = "CU1719"
      @DIM_GEST = 1

      @RIGA_ORDINE = SE_NUM( Var_Anta_Opzione_Dsc == "VETRINETTA", 0, 1)
   }
}

Elemento Cucina_2_5_Pensile_Fusto
{
   Descrizione = "Cucine 2.5: fusto pensile"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       "Larghezza"             300          ShowAlways   Implicit
      Y                       "Altezza"               736          ShowAlways   Implicit
      Z                       "Profondita"            328          ShowAlways

      Var_Scocca_Tipo_Dsc     "Scocca - Tipo"         "STANDARD"   ShowAlways   Implicit
      Var_Anta_Opzione_Dsc    "Anta - Opzioni"        "STANDARD"   ShowAlways   Implicit
      Var_Anta_Apertura_Dsc   "Anta - Apertura"       "BATTENTE"   ShowAlways   Implicit
      Var_Cappa_Opzione_Dsc   "Cappa - Opzioni"       "LAGO"       ShowAlways   Implicit

      Ripiani                 "Ripiani - Num"         0            Utente       (   0-   )
      Ripiani_Ricalcola       "Ripiani - Ricalcola"   0            Boolean

      ConSchienaFin           "Schiena Finitura"      0            Boolean      SaveAlways
      ConFondo                "Fondo"                 1            Boolean

      perCODICE               ""                      ""
      GEST_CODICE             ""                      ""

      FLAG_Debug              "Debug"                 0            Boolean      Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_2_5_Pensile_Dimensioni

      // Esclusione componenti
      /// Fondo
      if( IS_VAR_FIXED( idx_att, "ConFondo") != 1)
      {
         ConFondo = 1
         if( Var_Scocca_Tipo_Dsc == "SCOLAPIATTI") { ConFondo = 0 }
         if( Var_Scocca_Tipo_Dsc == "CAPPA"
           & ( Var_Cappa_Opzione_Dsc == "LAGO"
             | Var_Cappa_Opzione_Dsc == "SLITTA")) { ConFondo = 0 }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      // Vani
      /// Vano interno
      vano_l_0        = X - 2*Cucina_2_5_Pensile_Fianco_Dim.x
      vano_h_0        = Y - Cucina_2_5_Pensile_Coperchio_Dim.y - SE_NUM( ConFondo > 0, Cucina_2_5_Pensile_Fondo_Dim.y, 0)
      vano_p_0        = Z - $Cucina_2_5_Pensile_Schiena_Off.z - $Cucina_2_5_Pensile_Schiena_Dim.z
      vano_0_0.x      = base_0.x + (X - vano_l_0)/2
      vano_0_0.y      = base_0.y + SE_NUM( ConFondo > 0, Cucina_2_5_Pensile_Fondo_Dim.y, 0)
      vano_0_0.z      = base_0.z + Z - vano_p_0
      vano_hide_0     = 1
      vano_nome_0     = "Vano interno"

      /// Scolapiatti
      vano_l_3        = vano_l_0
      vano_h_3        = SE_NUM( Var_Scocca_Tipo_Dsc == "SCOLAPIATTI", ARound( Y - 276, "644;736", -1, 2), 0)
      vano_h_3        = SE_NUM( Y < vano_h_3, Y, vano_h_3)
      vano_p_3        = vano_p_0
      vano_0_3        = vano_0_0
      vano_0_3.y      = base_0.y
      vano_hide_3     = 1
      vano_nome_3     = "Vano scolapiatti"
      vano_elementi_3 = "Cucina_2_5_Pensile_Scolapiatti"

      /// Cappa
      vano_l_2        = vano_l_0
      vano_h_2        = SE_NUM( Var_Scocca_Tipo_Dsc == "CAPPA", vano_h_0, 0)
      vano_p_2        = vano_p_0
      vano_0_2        = vano_0_0
      vano_0_2.y      = base_0.y
      vano_hide_2     = 1
      vano_nome_2     = "Vano cappa"
      vano_elementi_2 = "Cucina_2_5_Pensile_Cappa"

      /// Ripiani
      vano_l_1        = vano_l_0
      vano_h_1        = vano_h_0 - vano_h_2 - vano_h_3
      vano_h_1        = SE_NUM( vano_h_1 < 250, 0, vano_h_1)
      vano_p_1        = vano_p_0 - $Cucina_2_5_Pensile_Ripiano_Rid.z
      if( Var_Anta_Opzione_Dsc != "VETRINA"
        & ( Var_Anta_Apertura_Dsc == "VASISTAS"
          | Var_Anta_Apertura_Dsc == "BASCULANTE")) { vano_p_1 = vano_p_1 - $Cucina_2_5_Pensile_Ripiano_Vasistas_Rid.z }
      vano_0_1        = vano_0_0
      vano_0_1.y      = vano_0_0.y + vano_h_0 - vano_h_1
      vano_0_1.z      = vano_0_0.z + $Cucina_2_5_Pensile_Ripiano_Off.z + ConSchienaFin*$Cucina_2_5_Pensile_SchienaFin_Dim.z
      vano_hide_1     = 0
      vano_nome_1     = "Vano ripiani"
      vano_elementi_1 = "Cucina_2_5_Pensile_Ripiano"
   }

   Controlli
   {
      GOSUB CtrlComune

      // Ripiani
      if( IS_VAR_FIXED( idx_att, "Ripiani") == 0) { Ripiani = FLOOR(vano_h_1 / 368) }
      GOSUB Cucina_2_5_Pensile_Ripiani_Attrezza

      // Schiena finitura
      while( IS_VAR_FIXED( idx_att, "ConSchienaFin") == 0)
      {
         if( ACTION() == 1064)                      { break }
         if( $OnLoadOrder != 0)                     { break }

         ConSchienaFin = 0
         if( VAR_EXIST( idx_att, "GEST_C207") != 1) { break }
         if( GEST_C207 == ""
           | GEST_C207 == "__")                     { break }

         ConSchienaFin = 1
         break
      }
   }

   Gestionale
   {
      GOSUB GestComune

      wk_pdr_codice = VAR_VAL_STR( idx_pdr_gest, "ORD_COD")
      if( wk_pdr_codice != "")
      {
         perCODICE = STRCAT( "F", wk_pdr_codice)

         if( GEST_CODICE != perCODICE)
         {
            GEST_CODICE = perCODICE
            VAR_VALUE_SET( idx_pdr_gest, "flag_CAMBIA_VAR", 1)
         }
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 120, 250, 120]
      @f_rivestimento = "0.9"
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Fianco fncsx
   {
      @Y = Y
      @Z = Z

      @base_0 = base_0

      @Verso = -1
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Fianco fncdx
   {
      @Y = Y
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X - @X

      @Verso = 1
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Fondo fnd
   {
      @escluso = SE_NUM( ConFondo > 0, 0, 1)

      @X = vano_l_0
      @Z = Z

      @base_0 = base_0
      @base_0.x = vano_0_0.x
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Coperchio cop
   {
      @X = vano_l_0
      @Z = Z

      @base_0 = base_0
      @base_0.x = vano_0_0.x
      @base_0.y = base_0.y + Y - @Y
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Schiena sch
   {
      @X = X - $Cucina_2_5_Pensile_Schiena_Rid.x
      @Y = Y - $Cucina_2_5_Pensile_Schiena_Rid.y
      if( Var_Scocca_Tipo_Dsc == "CAPPA"
        & Var_Cappa_Opzione_Dsc == "LAGO") { @Y = @Y - 75 }

      @base_0.x = base_0.x + $Cucina_2_5_Pensile_Schiena_Off.x
      @base_0.y = base_0.y + Y - $Cucina_2_5_Pensile_Schiena_Off.y - @Y
      @base_0.z = vano_0_0.z - @Z
   }

   Posiziona RigaOrdine_Graficata schFin
   {
      @escluso = 1 - ConSchienaFin

      @X = vano_l_0 - $Cucina_2_5_Pensile_SchienaFin_Rid.x
      @Y = vano_h_0 - $Cucina_2_5_Pensile_SchienaFin_Rid.y
      @Z = $Cucina_2_5_Pensile_SchienaFin_Dim.z

      @base_0.x = vano_0_0.x + $Cucina_2_5_Pensile_SchienaFin_Off.x
      @base_0.y = vano_0_0.y + $Cucina_2_5_Pensile_SchienaFin_Off.y
      @base_0.z = vano_0_1.z - @Z

      @FIN_var = "C207"
      @TIPO_COLLO = "SV1"
      @GEST_CODICE = "P01085"
   }

   Posiziona FerramentaModulo_368 fer
   {
      GOSUB posa_blocco

      @X = vano_l_0 + 2*$Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = vano_h_0 + $Cucina_2_5_Pensile_Fondo_Dim.y + $Cucina_2_5_Pensile_Coperchio_Dim.y

      @base_0.x = base_0.x + Cucina_2_5_Pensile_Fianco_Dim.x - $Cucina_2_5_Pensile_Fianco_Dim.x
      @base_0.y = base_0.y + Y - Cucina_2_5_Pensile_Coperchio_Dim.y + $Cucina_2_5_Pensile_Coperchio_Dim.y - @Y

      @ConAttaccaglie = 1
      @Tipo368 = "368-BAT"
   }

   Posiziona Cucina_2_5_Pensile_Cappa cpp
   {
      @escluso = SE_NUM( Var_Scocca_Tipo_Dsc == "CAPPA", 0, 1)

      @X = vano_l_2
      @Y = vano_h_2
      @Z = vano_p_2

      @base_0 = vano_0_2

      @HIDE = 0
   }

   Posiziona Cucina_2_5_Pensile_Scolapiatti scp
   {
      @escluso = SE_NUM( Var_Scocca_Tipo_Dsc == "SCOLAPIATTI", 0, 1)

      @X  = vano_l_3
      @Y  = vano_h_3
      @Z  = vano_p_3
      @Zt = Z

      @base_0 = vano_0_3

      @Var_Coperchio = SE_NUM( vano_h_1 > 0, 1, 0)

      @HIDE = 0
   }
}

Elemento Cucina_2_5_Pensile_Fusto_Fianco
{
   Descrizione = "Modulo Pensile - Fusto - Fianco"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       ""        19
      Y                       ""        736
      Z                       ""        328

      Cucina_Versione         ""        2.5   Implicit
      Cucina_ModelloDsc       ""        ""    Implicit

      Var_Scocca_Tipo_Dsc     ""        ""    Implicit
      Var_Anta_Opzione_Dsc    ""        ""    Implicit
      Var_Anta_Apertura_Dsc   ""        ""    Implicit

      Verso                   ""        0

      COD_EREDITA             ""        "PRE;POST"

      perCODICE               ""        ""
      GEST_CODICE             ""        ""

      FLAG_Debug              "Debug"   0     Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_2_5_Pensile_Dimensioni

      X = Cucina_2_5_Pensile_Fianco_Dim.x

      idx_topl = GetTopLevel(ATTUALE())

      // Finitura, utilizzata anche in Cucina_2_5_Pensile_Set_Gest_C165_Optional
      FIN_var = GetFirstValidVarGest( idx_att, "C032;C002;C001")
   }

   PuntiNotevoli
   {
      GOSUB punti

      // Vani
      /// Vano illuminazione fianco
      vano_l_0        = $Cucina_2_5_Pensile_Illuminazione_Fianco_Dim.x
      vano_h_0        = Y - Cucina_2_5_Pensile_Fondo_Dim.y - Cucina_2_5_Pensile_Coperchio_Dim.y - $Cucina_2_5_Pensile_Illuminazione_Fianco_Rid.y
      vano_p_0        = $Cucina_2_5_Pensile_Illuminazione_Fianco_Dim.z
      vano_0_0.x      = base_0.x + (X - vano_l_0)/2
      vano_0_0.x      = vano_0_0.x - Verso*$Cucina_2_5_Pensile_Illuminazione_Fianco_Off.x
      vano_0_0.y      = base_0.y + Cucina_2_5_Pensile_Fondo_Dim.y + $Cucina_2_5_Pensile_Illuminazione_Fianco_Off.y
      vano_0_0.z      = base_0.z + Z - $Cucina_2_5_Pensile_Illuminazione_Fianco_Off.z - $Cucina_2_5_Pensile_Illuminazione_Fianco_Dim.z/2
      vano_hide_0     = 0
      vano_nome_0     = "Illuminazione_Fianco"
      vano_elementi_0 = "Cucina_2_5_Pensile_Illuminazione_Fianco"

      /// Vano fianco finitura
      vano_l_1        = $Cucina_2_5_Pensile_Finitura_Dim.x
      vano_h_1        = Y - $Cucina_2_5_Pensile_Finitura_Rid.y
      vano_p_1        = Z - $Cucina_2_5_Pensile_Finitura_Rid.z
      vano_0_1        = base_0
      vano_0_1.x      = base_0.x + SE_NUM( Verso > 0, X, -vano_l_1)
      vano_hide_1     = 0
      vano_nome_1     = "Finitura"
      vano_elementi_1 = "Cucina_2_5_Pensile_FiancoFinitura"
   }

   Controlli
   {
      GOSUB CtrlComune

      // Accessori
      /// Led vetrinetta
      // TODO: eliminare, preferisco posizionarlo
      //GOSUB Cucina_2_5_Pensile_Illuminazione_Fianco_Attrezza
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         GOSUB Cucina_2_5_Pensile_Fianco_Set_Gest_C062_Posizione
      }

      if( TABER_REGOLA == "POST")
      {
         GOSUB Cucina_2_5_Fusto_Fianco_Set_Gest_Fin
      }
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "P01051"
      if( Var_Anta_Opzione_Dsc == "VETRINA")
      {
         if( Verso < 0)
         {
            perCODICE = "P01082"
            if( X > $Cucina_2_5_Pensile_Fianco_Dim.x) { perCODICE = SE_STR( Var_Anta_Apertura_Dsc == "RIBALTA", "P01088", "P01090") }
         }

         if( Verso > 0)
         {
            perCODICE = "P01083"
            if( X > $Cucina_2_5_Pensile_Fianco_Dim.x) { perCODICE = SE_STR( Var_Anta_Apertura_Dsc == "RIBALTA", "P01089", "P01091") }
         }
      }

      if( GEST_CODICE != perCODICE)
      {
         GEST_CODICE = perCODICE
         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello pan
   {
      GOSUB posa_blocco

      @FIN_Pannello = FIN_var
      @FIN_Bordo    = "C067"
   }

   Posiziona Cucina_2_5_Pensile_Illuminazione_Fianco ill
   {
      @escluso = 1
      if( Verso < 0
        & Var_Anta_Apertura_Dsc == "BATTENTE"
        & Var_Anta_Opzione_Dsc == "VETRINETTA") { @escluso = 0 }

      @X = vano_l_0
      @Y = vano_h_0
      @Z = vano_p_0

      @base_0 = vano_0_0
   }

   Posiziona SCRITTA_CAD dbgtxt
   {
      @escluso = 1 - FLAG_Debug

      VAR_CREATE_XYZ( ATTUALE(), "DIM", X, Y, Z, $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIM)

      @X = 0.75*@DIM.z
      @Y = @X

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z - 2

      @senso   = SE_NUM( X >= Y, 0, 1)
      @point   = 3
      @faccia  = "R"
      @scritta = FMT( "{} x {} x {}", STR(@DIM.x), STR(@DIM.y), STR(@DIM.z))

      @HIDE = 1
   }
}

Elemento Cucina_2_5_Pensile_Fusto_Coperchio
{
   Descrizione = "Modulo Pensile - Fusto - Coperchio"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       ""                                 262
      Y                       ""                                 19
      Z                       ""                                 328

      Var_Scocca_Tipo_Dsc     ""                                 ""   Implicit
      Var_Anta_Opzione_Dsc    ""                                 ""   Implicit
      Var_Anta_Apertura_Dsc   ""                                 ""   Implicit

      Anta_Tipo               ""                                 ""   Implicit

      Sensore_Led             "Presenza sensore illuminazione"   0

      Sens_Pos                "Posizione sensore illuminazione"  1
      Sens_OffX_sx            ""                                 64
      Sens_OffX_dx            ""                                 0

      perCODICE               ""                                 ""
      GEST_CODICE             ""                                 ""
      FLAG_Debug              "Debug"                            0    Boolean      Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_2_5_Pensile_Dimensioni

      ang = ANG_TOT_NOR(idx_att)

      Y = Cucina_2_5_Pensile_Coperchio_Dim.y

      idx_topl = GetTopLevel(ATTUALE())

      // Sensore
      while( ACTION() != 1064)
      {
         /// Presenza
         while( IS_VAR_FIXED( idx_att, "Sensore_Led") != 1)
         {
            Sensore_Led = 0

            //// Colleziono led
            COMPONENTI2("wk_led", idx_topl, "Cucina_2_5_Pensile_Illuminazione_Fianco")
            if( wk_led <= 0)                           { break }

            wk_led_num = 0
            while( inc(wk_led_num) <= wk_led)
            {
               if( VAR_VAL_STR( wk_led[wk_led_num], "GEST_C201") != "AL011") { continue }

               Sensore_Led = 1
               break
            }

            break
         }

         if( Sensore_Led <= 0)                      { break }

         /// Posizione ( -1 - sx, 0 - doppio, 1 - dx)
         if( IS_VAR_FIXED( idx_att, "Sens_Pos"))    { break }

         //// Colleziono ante
         wk_ant = 0
         wk_ant_sx_dist = -1
         wk_ant_dx_dist = X + 1

         COMPONENTI2( "wk_ant", idx_topl, "Cuc_AntaSingola")
         if( wk_ant <= 0) { COMPONENTI2( "wk_ant", idx_topl, "AntaSingolaMadiaNow") }

         wk_ant_num = 0
         while( inc(wk_ant_num) <= wk_ant)
         {
            wk_ant_idx = wk_ant[wk_ant_num]
            wk_ant_verso = VAR_VAL( wk_ant_idx, "Verso")

            // Preferisco verso gestionale se presente
            wk_ant_c007_idx = GetPrimoWithVar( "GEST_C007", 1, wk_ant_idx, 0, 0, "")
            if( IS_IDX(wk_ant_c007_idx))
            {
               wk_ant_c007 = VAR_VAL_STR( wk_ant_c007_idx, "GEST_C007")
               if( IS_MATCH( wk_ant_c007, "SX*")) { wk_ant_verso = -1 }
               if( IS_MATCH( wk_ant_c007, "DX*")) { wk_ant_verso = 1  }
            }

            if( wk_ant_verso == 0) { continue }

            VAR_INDIRECT_ASSIGN( idx_att, "wk_p1", idx_att, SE_STR( wk_ant_verso < 0, "base_1", "base_2"))
            VAR_INDIRECT_ASSIGN( idx_att, "wk_p2", wk_ant_idx, SE_STR( wk_ant_verso < 0, "base_3", "base_0"))
            wk_p2.y = wk_p1.y
            wk_ant_dist = DistanzaFraPunti( wk_p1, wk_p2, ang)

            if( wk_ant_verso < 0
              & wk_ant_dist > wk_ant_sx_dist) { wk_ant_sx_dist = wk_ant_dist }

            if( wk_ant_verso > 0
              & X - wk_ant_dist < wk_ant_dx_dist) { wk_ant_dx_dist = X - wk_ant_dist }
         }

         //// Determino numero e posizione sensori
         //// NOTA: se un sensore viene sempre utilizzato il sinistro, il destro si sblocca solo con due
         Sens_Pos = -2
         Sens_OffX_sx = 0
         Sens_OffX_dx = X

         wk_sens_dx = 0
         if( wk_ant_dx_dist < X)
         {
            Sens_Pos = -1
            wk_sens_dx = wk_ant_dx_dist + 81.5

            Sens_OffX_sx = wk_sens_dx
            Sens_OffX_dx = wk_sens_dx
         }

         wk_sens_sx = 0
         if( wk_ant_sx_dist > 0)
         {
            Sens_Pos = 1
            wk_sens_sx = wk_ant_sx_dist - 81.5

            Sens_OffX_sx = wk_sens_sx
         }

         if( wk_sens_sx > 0
           & wk_sens_dx > 0) { Sens_Pos = 0 }

         break
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      // Vani
      /// Vano illuminazione coperchio
      vano_l_0        = X - $Cucina_2_5_Pensile_Illuminazione_Coperchio_Rid.x
      vano_h_0        = $Cucina_2_5_Pensile_Illuminazione_Coperchio_Dim.y
      vano_p_0        = $Cucina_2_5_Pensile_Illuminazione_Coperchio_Dim.z
      vano_0_0.x      = base_0.x + $Cucina_2_5_Pensile_Illuminazione_Coperchio_Off.x
      vano_0_0.y      = base_0.y + $Cucina_2_5_Pensile_Illuminazione_Coperchio_Off.y
      vano_0_0.z      = base_0.z + Z - $Cucina_2_5_Pensile_Illuminazione_Coperchio_Off.z - $Cucina_2_5_Pensile_Illuminazione_Coperchio_Dim.z/2
      vano_hide_0     = SE_NUM( lstMatch( "BASCULANTE;VASISTAS;RIBALTA", Var_Anta_Apertura_Dsc) > 0, 0, 1)
      vano_nome_0     = "Illuminazione_Coperchio"
      vano_elementi_0 = "Cucina_2_5_Pensile_Illuminazione_Coperchio"
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "P01050"
      if( Var_Anta_Opzione_Dsc == "VETRINA")
      {
         perCODICE = "P01086"
         if( Y > $Cucina_2_5_Pensile_Coperchio_Dim.y) { perCODICE = "P01080"}
      }

      if( GEST_CODICE != perCODICE)
      {
         GEST_CODICE = perCODICE
         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello pan
   {
      @X = Y
      @Y = X
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X

      @ang_z = 90

      @FIN_Pannello = "C032"
      @FIN_Bordo    = "C067"
   }

   Posiziona Cucina_2_5_Pensile_Illuminazione_Coperchio ill
   {
      @escluso = 1
      if( Var_Anta_Opzione_Dsc == "VETRINETTA"
        & ( Var_Anta_Apertura_Dsc == "VASISTAS"
          | Var_Anta_Apertura_Dsc == "BASCULANTE")) { @escluso = 0 }

      @X = vano_l_0
      @Y = vano_h_0
      @Z = vano_p_0

      @base_0 = vano_0_0
   }

   Posiziona Cucina_2_5_Pensile_Illuminazione_Sensore sens
   {
      @escluso = 1 - Sensore_Led

      @base_0.x = base_0.x - @X/2
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z + Z - @Z + 0.1

      @Sens_Pos = Sens_Pos
      @Sens_OffX_sx = Sens_OffX_sx
      @Sens_OffX_dx = Sens_OffX_dx
   }

   Posiziona SCRITTA_CAD dbgtxt
   {
      @escluso = 1 - FLAG_Debug

      VAR_CREATE_XYZ( ATTUALE(), "DIM", X, Y, Z, $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIM)

      @X = 0.75*@DIM.z
      @Y = @X

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z - 2

      @senso   = SE_NUM( X >= Y, 0, 1)
      @point   = 3
      @faccia  = "R"
      @scritta = FMT( "{} x {} x {}", STR(@DIM.x), STR(@DIM.y), STR(@DIM.z))

      @HIDE = 1
   }
}

Elemento Cucina_2_5_Pensile_Fusto_Fondo
{
   Descrizione = "Modulo Pensile - Fusto - Fondo"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      ""        262
      Y                      ""        19
      Z                      ""        328

      Var_Scocca_Tipo_Dsc    ""        ""   Implicit
      Var_Anta_Opzione_Dsc   ""        ""   Implicit

      perCODICE              ""        ""
      GEST_CODICE            ""        ""

      FLAG_Debug             "Debug"   0    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_2_5_Pensile_Dimensioni

      Y = Cucina_2_5_Pensile_Fondo_Dim.y

      idx_topl = GetTopLevel(ATTUALE())
   }

   PuntiNotevoli
   {
      GOSUB punti

      // Vani
      /// Vano illuminazione fondo
      vano_l_0        = X - $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Rid.x
      vano_h_0        = $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Dim.y
      vano_p_0        = $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Dim.z
      vano_0_0.x      = base_0.x + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Off.x
      vano_0_0.y      = base_0.y + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Off.y
      vano_0_0.z      = base_0.z + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Off.z
      vano_hide_0     = 0
      vano_nome_0     = "Illuminazione_Fondo"
      vano_elementi_0 = "Cucina_2_5_Pensile_Illuminazione_Fondo"
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "P01049"
      if( Var_Anta_Opzione_Dsc == "VETRINA")
      {
         perCODICE = "P01087"
         if( Y > $Cucina_2_5_Pensile_Fondo_Dim.y) { perCODICE = "P01081"}
      }

      if( GEST_CODICE != perCODICE)
      {
         GEST_CODICE = perCODICE
         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello pan
   {
      @X = Y
      @Y = X
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X

      @ang_z = 90

      @FIN_Pannello = "C032"
      @FIN_Bordo    = "C067"
   }

   Posiziona SCRITTA_CAD dbgtxt
   {
      @escluso = 1 - FLAG_Debug

      VAR_CREATE_XYZ( ATTUALE(), "DIM", X, Y, Z, $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIM)

      @X = 0.75*@DIM.z
      @Y = @X

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z - 2

      @senso   = SE_NUM( X >= Y, 0, 1)
      @point   = 3
      @faccia  = "R"
      @scritta = FMT( "{} x {} x {}", STR(@DIM.x), STR(@DIM.y), STR(@DIM.z))

      @HIDE = 1
   }
}

Elemento Cucina_2_5_Pensile_Fusto_Schiena
{
   Descrizione = "Modulo Pensile - Fusto - Schiena"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       Schiena;CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      // Dimensioni reali
      X                                  ""        100
      Y                                  ""        100
      Z                                  ""        8

      // Dimensioni grafiche, corrispondono al vano
      Xg                                 ""        100
      Yg                                 ""        100

      Var_Anta_Opzione_Dsc               ""        ""         Implicit

      Cucina_2_5_Pensile_Fianco_Dim      ""        [19,0,0]   XyzAbsolute   Implicit
      Cucina_2_5_Pensile_Coperchio_Dim   ""        [0,19,0]   XyzAbsolute   Implicit
      Cucina_2_5_Pensile_Fondo_Dim       ""        [0,19,0]   XyzAbsolute   Implicit
      ConFondo                           ""        0          Implicit

      perCODICE                          ""        ""
      GEST_CODICE                        ""        ""

      FLAG_Debug                         "Debug"   0          Boolean       Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      idx_topl = GetTopLevel(ATTUALE())

      GOSUB Stato_8

      // Dimensioni
      Z = $Cucina_2_5_Pensile_Schiena_Dim.z

      Xg = X - 2*(Cucina_2_5_Pensile_Fianco_Dim.x - $Cucina_2_5_Pensile_Schiena_Off.x)
      Yg = Y - (Cucina_2_5_Pensile_Coperchio_Dim.y - $Cucina_2_5_Pensile_Schiena_Off.y) - ConFondo*(Cucina_2_5_Pensile_Fondo_Dim.y - $Cucina_2_5_Pensile_Schiena_Off.y)

      // Finitura
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var = GetFirstValidVarGest( FIN_idx_gest, "C032;C048")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      perCODICE = "P01052"
      if( Var_Anta_Opzione_Dsc == "VETRINA") { perCODICE = "P01084" }

      if( GEST_CODICE != perCODICE)
      {
         GEST_CODICE = perCODICE
         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      @X = Xg
      @Y = Yg
      @Z = Z

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = alto_0.y - (Cucina_2_5_Pensile_Coperchio_Dim.y - $Cucina_2_5_Pensile_Schiena_Off.y) - @Y
      @base_0.z = base_0.z

      GOSUB rivestimento
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }

   Posiziona SCRITTA_CAD dbgtxt
   {
      @escluso = 1 - FLAG_Debug
      if( @escluso > 0) { EXITSUB() }

      VAR_CREATE_XYZ( ATTUALE(), "DIM", X, Y, Z, $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIM)
      VAR_CREATE_XYZ( ATTUALE(), "DIMG", Xg, Yg, Z, $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIMG)
      VAR_CREATE_XYZ( ATTUALE(), "DIMO", VAR_VAL( idx_att, "ORD_X"),
                                         VAR_VAL( idx_att, "ORD_Y"),
                                         VAR_VAL( idx_att, "ORD_Z"), $MODE_XYZ_ABSOLUTE, "")
      max3_var(@DIMO)

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z - 2

      @senso   = SE_NUM( X >= Y, 0, 1)
      @point   = 3
      @faccia  = "R"
      @scritta = FMT( "GRAF: {}x{} | GEST: {}x{} | COD: {}x{}", STR(@DIMG.x), STR(@DIMG.y), STR(@DIM.x), STR(@DIM.y), STR(@DIMO.x), STR(@DIMO.y))

      @X = min( 0.75*@DIM.x/STRLEN(@scritta), 0.75*@DIM.y)
      @Y = @X

      @HIDE = 1
   }
}

Elemento Cucina_2_5_Pensile_Ripiano
{
   Descrizione  = "Modulo Pensile - Ripiano"
   Code         = PEN
   Gruppo       = "PEN"
   Tipo         = Contenitore
   Forma        = ""
   Altimetro    Auto
   Attrezzabile Cucina_2_5_Pensile_Fusto
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      "Larghezza"    262
      Y                      "Spessore"     8
      Z                      "Profondita"   248
      Var_Anta_Opzione_Dsc   ""             ""   Implicit

      RADICE                 ""             ""
      perRADICE              ""             ""

      FLAG_Debug             "Debug"        0    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB NO_AUTO

      Xr = X - $Cucina_2_5_Pensile_Ripiano_Rid.x

      // Finitura
      FIN_idx_gest = idx_gest
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest,"C006;C032")
      FIN_var_gest = GetVarGest(FIN_var)
      FIN_val      = VAR_VAL_STR( FIN_idx_gest, FIN_var_gest)

      f_rivestimento = SE_STR( IS_MATCH( FIN_val, "V*"), "0.9", "0")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         $QueryResult__ = 0

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") == 1) { $QueryResult__ = 1 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR( idx_att, "liv2add*")
      liv2add = 0

      liv_step = 92
      liv_att = liv_step
      liv_max = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_ref))) - liv_step

      while( liv_att <= liv_max)
      {
         AddItem2Array( idx_att, "liv2add", liv_att, "")
         liv_att = liv_att + liv_step
      }

      ArrayCopy( idx_att, "liv2add", "liv2addscr")
      GOSUB livelli_add2
   }

   Procedura cancella
   {
      if( $StartingDel__ != idx_att)            { EXITSUB() }
      if( VAR_VAL( idx_pdr, "OnRicalcola") > 0) { EXITSUB() }

      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //Cancella {}", STR(idx_pdr), nome_att))
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Z = $profondita

      base_0 = $vano_0
      base_0.y = $vano_0.y + $livello - Y/2
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Cucina_2_5_Pensile_Ripiano_Controllo_Posizione
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xr

      perRADICE = "RIPPCUC"
      if( Var_Anta_Opzione_Dsc == "VETRINA") { perRADICE = "RVPV"}

      if( RADICE != perRADICE)
      {
         RADICE = perRADICE
         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }

   Posiziona Blocco rip
   {
      GOSUB posa_blocco

      @X = Xr

      @base_0.x = base_0.x + (X - @X)/2

      GOSUB rivestimento
      @f_rivestimento = f_rivestimento
   }
}

Elemento Cucina_2_5_Pensile_Scolapiatti
{
   Descrizione = "Modulo Pensile - Scolapiatti"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
       #include   %path_bdm%\var_db.inc

       X                        "Larghezza"         262
       Z                        "Profondita"        248
       Zt                       ""                  325
       Y                        "Spessore"          8

       Var_Coperchio            ""                  0

       FLAG_Debug               "Debug"             0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      HIDE = SE_NUM( VAR_VAL_STR( ATTUALE(), "ORD_COD") == "", 3, 0)
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 100, 100, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Scolapiatti scp
   {
      GOSUB posa_blocco
   }

   Posiziona TelaioPenScPiatti_368 tl
   {
      @X = X
      @Z = Zt - $Cucina_2_5_Pensile_Scolapiatti_Telaio_Rid.z

      @base_0 = base_0
      @base_0.x = base_0.x + (X - @X)/2
      @base_0.z = base_0.z + Z - Zt
   }

   Posiziona Cucina_2_5_Pensile_Scolapiatti_Divisorio cop
   {
      @escluso = 1 - Var_Coperchio

      @X = X
      @Y = $Cucina_2_5_Pensile_Scolapiatti_Divisorio_Dim.y
      @Z = Z - $Cucina_2_5_Pensile_Scolapiatti_Divisorio_Rid.z

      @base_0 = base_0
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + Z - @Z
   }
}

Elemento Cucina_2_5_Pensile_Scolapiatti_Divisorio
{
   Descrizione = "Modulo Pensile - Scolapiatti - Divisorio"
   Code        = ""
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""   562
      Y   ""   19
      Z   ""   300
   }

   Assegnazioni
   {
      GOSUB AssComune
      FIN_var = "C032"
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "P01053"
      GEST_IDXPADRE = GetTopLevelSost(idx_att)

      GOSUB GestComune_Post
   }

   Posiziona Pannello pan
   {
      @X = Y
      @Y = X
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X

      @ang_z = 90

      @FIN_Pannello = FIN_var
      @FIN_Bordo    = "C067"
   }
}

Elemento Cucina_2_5_Pensile_Cappa
{
   Descrizione = "Modulo Pensile - Cappa"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Cucina_2_5_Pensile_Cappa

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                              "Larghezza"                                262
      Z                              "Profondita"                               248
      Y                              "Spessore"                                 8

      Cucina_2_5_Pensile_Fondo_Dim   ""                                         [0,19,0]   XyzAbsolute Implicit

      Var_Anta_Apertura_Dsc          ""                                         ""         Implicit
      Var_Cappa_Opzione_Dsc          ""                                         ""         Implicit

      Divisori                       ""                                         0
      Divisori_Y                     ""                                         "0;184;276;368"
      Divisori_Ymax                  ""                                         368

      Var_Cappa_ScassoCop            "Scasso Coperchio"                         0
      Var_Cappa_ScassoSch            "Scasso Schiena"                           0
      Var_Cappa_ScassoFnd            "Scasso Fondo"                             0

      Var_Diam_Scasso                "Diametro scasso"                          160        Utente    (   )
      Var_PosX_ScassoCop             "Scasso cop / div: posizione larghezza"    0          Utente    (   )
      Var_PosZ_ScassoCop             "Scasso cop / div: posizione profondita"   0          Utente    (   )
      Var_PosZ_ScassoDiv             "Scasso divisorio: posizione da retro"     10         ShowAlways

      Filler                         " "                                        ""         ShowAlways

      Var_PosX_ScassoSch             "Posizione larghezza scasso schiena"       0          Utente    (   )
      Var_PosY_ScassoSch             "Posizione altezza scasso schiena"         0          Utente    (   )

      Filler1                        " "                                        ""         ShowAlways

      Var_Lar_ScassoFnd              "Larghezza scasso fondo"                   600        Utente    (   )
      Var_Prf_ScassoFnd              "Profondità scasso fondo"                  250        Utente    (   )

      Var_PosX_ScassoFnd             "Posizione larghezza scasso fondo"         0          Utente    (   )
      Var_PosZ_ScassoFnd             "Posizione profondità scasso fondo"        0          Utente    (   )

      Var_Diam_Foro_Ali              "Diametro foro alimentazione"              60
      Var_PosX_Foro_Ali              "Posizione larghezza foro (centro)"        105
      Var_PosY_Foro_Ali              "Posizione altezza foro (centro)"          310

      RigeneraScasso                 "Rigenera Scasso"                          0          Boolean
      FLAG_Debug                     "Debug"                                    1          Boolean   Implicit

      M4_MIS                         ""                                         "Var*;Filler*"
   }

   Assegnazioni
   {
      GOSUB AssComune

      // Cappa
      Cappa_Vano_Y = 349
      Cappa_Vano_Z_Aria_Rt = 0.5
      Cappa_Vano_Z_Aria_Fr = 30

      // Divisori
      Divisori_Vano = Y - Cappa_Vano_Y
      if( IS_VAR_FIXED( idx_att, "Divisori") == 0)
      {
         Divisori = 0
         if( Y > 552) { Divisori = CEIL( Divisori_Vano/Divisori_Ymax) }

         Divisori_##2 = SE_NUM( Divisori >= 2, Divisori_Ymax, 0)                     Divisori_##2 = ARound( Divisori[2], Divisori_Y, -1, 1) //Secondo sempre fisso
         Divisori_##3 = SE_NUM( Divisori >= 3, (Divisori_Vano - Divisori[2])/2, 0)   Divisori_##3 = ARound( Divisori[3], Divisori_Y, -1, 1) //Terzo di default spartito con il primo
         Divisori_##1 = Divisori_Vano - ArraySum( idx_att, "Divisori", 2, Divisori)                                                         //Primo dinamico
      }
      if( Divisori <= 0) { Cappa_Vano_Y = Y }

      // Carter
      //TODO: DA CAPIRE SE ANCHE SU CAPPA CLIENTE
      VAR_Carter = SE_NUM( Var_Cappa_Opzione_Dsc == "LAGO", 1, 0)

      if( $ATTIVA_DLL & ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"Var_Pos*;Var_*Scasso*;Filler*",1) }

      if( Var_Cappa_Opzione_Dsc != "LAGO")
      {
         if( Var_Cappa_Opzione_Dsc == "CLIENTE" )
         {
            Var_Cappa_ScassoFnd = 1

            wk_offX = 120
            wk_offZ = 25.5
           #ifdef TEC
            wk_offX = 100
           #endif

            VAR_SET_MENU(ATTUALE(),"Var_Lar_ScassoFnd",STRCAT("( 100-",STR(X-wk_offX)," )"))
            VAR_SET_MENU(ATTUALE(),"Var_Prf_ScassoFnd",STRCAT("( 100-",STR(Z-wk_offZ)," )"))

            wk_pos_x_min_fnd = 30 + Var_Lar_ScassoFnd/2
            wk_pos_x_max_fnd = X - wk_pos_x_min_fnd
            wk_pos_z_min_fnd = 0.5 + Var_Prf_ScassoFnd/2
            wk_pos_z_max_fnd = Z - 25 - Var_Prf_ScassoFnd/2
            if( wk_pos_z_min_fnd > wk_pos_z_max_fnd) { wk_pos_z_min_fnd = wk_pos_z_max_fnd }

            VAR_SET_MENU( ATTUALE(), "Var_PosX_ScassoFnd", FMT( "( {} - {} )", STR(wk_pos_x_min_fnd), STR(wk_pos_x_max_fnd)))
            VAR_SET_MENU( ATTUALE(), "Var_PosZ_ScassoFnd", FMT( "( {} - {} )", STR(wk_pos_z_min_fnd), STR(wk_pos_z_max_fnd)))

            HIDE_ON_EDIT(ATTUALE(),"Var_Lar_ScassoFnd;Var_Prf_ScassoFnd;Filler*",0)
         }

         // TODO: da verificare
         VAR_SET_MENU( ATTUALE(), "Var_Diam_Scasso", STRCAT("( 100-180 )"))

         //Scasso coperchio
         wk_pos_x_min_cop = 29 + Var_Diam_Scasso/2
         wk_pos_x_max_cop = X - wk_pos_x_min_cop
         wk_pos_z_min_cop = 55 + Var_Diam_Scasso/2
         if( Divisori > 0)  { wk_pos_z_min_cop = 66 + Var_Diam_Scasso/2 }
         wk_pos_z_max_cop = Z - 0.5 - Var_Diam_Scasso/2

         VAR_SET_MENU( ATTUALE(), "Var_PosX_ScassoCop", FMT( "( {} - {} )", STR(wk_pos_x_min_cop), STR(wk_pos_x_max_cop)))
         VAR_SET_MENU( ATTUALE(), "Var_PosZ_ScassoCop", FMT( "( {} - {} )", STR(wk_pos_z_min_cop), STR(wk_pos_z_max_cop)))

         //Scasso schiena
         wk_pos_x_min_sch = wk_pos_x_min_cop
         wk_pos_x_max_sch = wk_pos_x_max_cop
         wk_pos_y_min_sch = Cappa_Vano_Y + Cucina_2_5_Pensile_Fondo_Dim.y + 48.5
         wk_pos_y_max_sch = Y - Var_Diam_Scasso/2 - 128.5

         VAR_SET_MENU( ATTUALE(), "Var_PosX_ScassoSch", FMT( "( {} - {} )", STR(wk_pos_x_min_sch), STR(wk_pos_x_max_sch)))
         VAR_SET_MENU( ATTUALE(), "Var_PosY_ScassoSch", FMT( "( {} - {} )", STR(wk_pos_y_min_sch), STR(wk_pos_y_max_sch)))

         //Scasso divisorio
         Var_PosZ_ScassoDiv = Z - 0.5 - Var_PosZ_ScassoCop - Var_Diam_Scasso/2

         HIDE_ON_EDIT( ATTUALE(), "Var_Diam_Scasso;Var_PosZ_ScassoCop;Var_PosZ_ScassoDiv;Filler*", 0)
         HIDE_ON_EDIT( ATTUALE(), "Var_PosX_ScassoCop", SE_NUM( Var_Cappa_ScassoCop == 1, 0, 1))
         HIDE_ON_EDIT( ATTUALE(), "Var_PosX_ScassoSch;Var_PosY_ScassoSch;Filler", SE_NUM( Var_Cappa_ScassoSch == 1, 0, 1))
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      /// Eldom
      vano_l_0        = X
      vano_h_0        = Cappa_Vano_Y
      vano_p_0        = Z
      vano_0_0        = base_0
      vano_hide_0     = 0
      vano_nome_0     = "Vano eldom"
      vano_elementi_0 = "CappaGenerica"
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      $QueryResult__ = 0
      if( $query_type == 2)
      {
         if( Var_Cappa_Opzione_Dsc != "SLITTA") { EXITSUB() }

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") != 1) { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      Var_Cappa_ScassoCop = 0
      Var_Cappa_ScassoSch = 0
      if( VAR_EXIST(GetTopLevel(ATTUALE()), "GEST_C202") )
      {
         if( VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C202") == "P0013" ) { Var_Cappa_ScassoCop = 1 }
         if( VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C202") == "P0014" ) { Var_Cappa_ScassoSch = 1 }
      }

      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Var_PosX_ScassoCop")    == 0 )  { Var_PosX_ScassoCop = X/2   }
         if( IS_VAR_FIXED(ATTUALE(),"Var_PosZ_ScassoCop")    == 0 )  { Var_PosZ_ScassoCop = 213   }

         if( IS_VAR_FIXED(ATTUALE(),"Var_PosX_ScassoSch")    == 0 )  { Var_PosX_ScassoSch = X/2   }
         if( IS_VAR_FIXED(ATTUALE(),"Var_PosY_ScassoSch")    == 0 )  { Var_PosY_ScassoSch = Y - Var_Diam_Scasso/2 - 128.5 }

         if( IS_VAR_FIXED(ATTUALE(),"Var_Lar_ScassoFnd")     == 0 )  { Var_Lar_ScassoFnd = X - 120  }
         if( IS_VAR_FIXED(ATTUALE(),"Var_Prf_ScassoFnd")     == 0 )  { Var_Prf_ScassoFnd = Z - 25.5 }

         if( IS_VAR_FIXED(ATTUALE(),"Var_PosX_ScassoFnd")    == 0 )  { Var_PosX_ScassoFnd = X/2 }
         if( IS_VAR_FIXED(ATTUALE(),"Var_PosZ_ScassoFnd")    == 0 )  { Var_PosZ_ScassoFnd = 0.5 + Var_Prf_ScassoFnd/2 }

         if( VAR_EXIST(ATTUALE(),"Var_Diam_Scasso_prec")     == 0 )  { Var_Diam_Scasso_prec     = Var_Diam_Scasso     }

         if( VAR_EXIST(ATTUALE(),"Var_Cappa_ScassoCop_prec") == 0 )  { Var_Cappa_ScassoCop_prec = Var_Cappa_ScassoCop }
         if( VAR_EXIST(ATTUALE(),"Var_PosX_ScassoCop_prec")  == 0 )  { Var_PosX_ScassoCop_prec  = Var_PosX_ScassoCop  }
         if( VAR_EXIST(ATTUALE(),"Var_PosZ_ScassoCop_prec")  == 0 )  { Var_PosZ_ScassoCop_prec  = Var_PosZ_ScassoCop  }
         if( VAR_EXIST(ATTUALE(),"Var_PosZ_ScassoDiv_prec")  == 0 )  { Var_PosZ_ScassoDiv_prec  = Var_PosZ_ScassoDiv  }

         if( VAR_EXIST(ATTUALE(),"Var_Cappa_ScassoSch_prec") == 0 )  { Var_Cappa_ScassoSch_prec = Var_Cappa_ScassoSch }
         if( VAR_EXIST(ATTUALE(),"Var_PosX_ScassoSch_prec")  == 0 )  { Var_PosX_ScassoSch_prec  = Var_PosX_ScassoSch  }
         if( VAR_EXIST(ATTUALE(),"Var_PosY_ScassoSch_prec")  == 0 )  { Var_PosY_ScassoSch_prec  = Var_PosY_ScassoSch  }

         if( VAR_EXIST(ATTUALE(),"Var_Lar_ScassoFnd_prec")   == 0 )  { Var_Lar_ScassoFnd_prec   = Var_Lar_ScassoFnd   }
         if( VAR_EXIST(ATTUALE(),"Var_Prf_ScassoFnd_prec")   == 0 )  { Var_Prf_ScassoFnd_prec   = Var_Prf_ScassoFnd   }
         if( VAR_EXIST(ATTUALE(),"Var_PosX_ScassoFnd_prec")  == 0 )  { Var_PosX_ScassoFnd_prec  = Var_PosX_ScassoFnd  }
         if( VAR_EXIST(ATTUALE(),"Var_PosZ_ScassoFnd_prec")  == 0 )  { Var_PosZ_ScassoFnd_prec  = Var_PosZ_ScassoFnd  }

         if( Var_Lar_ScassoFnd_prec   != Var_Lar_ScassoFnd
           | Var_Prf_ScassoFnd_prec   != Var_Prf_ScassoFnd
           | Var_Diam_Scasso_prec     != Var_Diam_Scasso
           | Var_Cappa_ScassoCop_prec != Var_Cappa_ScassoCop
           | Var_PosX_ScassoCop_prec  != Var_PosX_ScassoCop
           | Var_PosZ_ScassoCop_prec  != Var_PosZ_ScassoCop
           | Var_PosZ_ScassoDiv_prec  != Var_PosZ_ScassoDiv
           | Var_Cappa_ScassoSch_prec != Var_Cappa_ScassoSch
           | Var_PosX_ScassoSch_prec  != Var_PosX_ScassoSch
           | Var_PosY_ScassoSch_prec  != Var_PosY_ScassoSch
           | Var_PosX_ScassoFnd_prec  != Var_PosX_ScassoFnd
           | Var_PosZ_ScassoFnd_prec  != Var_PosZ_ScassoFnd
           )
         {
            Var_Lar_ScassoFnd_prec   = Var_Lar_ScassoFnd
            Var_Prf_ScassoFnd_prec   = Var_Prf_ScassoFnd
            Var_Diam_Scasso_prec     = Var_Diam_Scasso
            Var_Cappa_ScassoCop_prec = Var_Cappa_ScassoCop
            Var_PosX_ScassoCop_prec  = Var_PosX_ScassoCop
            Var_PosZ_ScassoCop_prec  = Var_PosZ_ScassoCop
            Var_PosZ_ScassoDiv_prec  = Var_PosZ_ScassoDiv
            Var_Cappa_ScassoSch_prec = Var_Cappa_ScassoSch
            Var_PosX_ScassoSch_prec  = Var_PosX_ScassoSch
            Var_PosY_ScassoSch_prec  = Var_PosY_ScassoSch
            Var_PosX_ScassoFnd_prec  = Var_PosX_ScassoFnd
            Var_PosZ_ScassoFnd_prec  = Var_PosZ_ScassoFnd

            $wk_EliminaScassi_da_idx = GetTopLevel(ATTUALE())
            GOSUB EliminaScassi
            COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia "))
         }

         if( RigeneraScasso==1 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
            RigeneraScasso = 0
            $wk_EliminaScassi_da_idx = GetTopLevel(ATTUALE())
            GOSUB EliminaScassi
            COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia "))
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona DivOrizLegCappa_368 div1
   {
      @Divisorio_Num = 1
      GOSUB Cucina_2_5_Pensile_Cappa_Posiziona_Carter
   }

   Posiziona DivOrizLegCappa_368 div2
   {
      @Divisorio_Num = 2
      GOSUB Cucina_2_5_Pensile_Cappa_Posiziona_Carter
   }

   Posiziona DivOrizLegCappa_368 div3
   {
      @Divisorio_Num = 3
      GOSUB Cucina_2_5_Pensile_Cappa_Posiziona_Carter
   }

   Posiziona BarraPenCappaSlitta_368 bar
   {
      @escluso = SE_NUM(Var_Cappa_Opzione_Dsc == "SLITTA", 0, 1)

      @X = X

      @base_0 = base_0
      @base_0.y = base_0.y + 2.25
      @base_0.z = base_0.z + Z - 67.5 - @Z
   }

   Posiziona CappaGenerica cpp
   {
      @escluso = SE_NUM( Var_Cappa_Opzione_Dsc == "LAGO", 0, 1)

      @X = X
      @Y = Cappa_Vano_Y
      @Z = Z

      @base_0 = base_0
   }

   Posiziona ForoCappa ScsCop
   {
      @X = Var_Diam_Scasso
      @Y = SE_NUM( Var_Cappa_ScassoSch == 1, Var_PosY_ScassoSch, Y+50)
      @Z = Var_Diam_Scasso

      @base_0.x = base_0.x - @X/2 + Var_PosX_ScassoCop
      @base_0.y = base_0.y + Var_Diam_Scasso/2
      @base_0.z = base_0.z + Z - @X/2 - Var_PosZ_ScassoCop

      @Var_Diam_Scasso = Var_Diam_Scasso
      @Var_PosZ_ScassoDiv = Var_PosZ_ScassoDiv
   }

   Posiziona ForoCappaSchiena ScsSch
   {
      @escluso = SE_NUM( Var_Cappa_ScassoSch, 0, 1)

      @X = Var_Diam_Scasso
      @Y = Var_Diam_Scasso
      @Z = 15

      @base_0.x = base_0.x - @X/2 + Var_PosX_ScassoSch
      @base_0.y = base_0.y + Var_PosY_ScassoSch
      @base_0.z = base_0.z - $Cucina_2_5_Pensile_Schiena_Dim.z/2 - @Z/2
   }

   Posiziona ForoCappaSchiena ScsAli
   {
      @X = Var_Diam_Foro_Ali
      @Y = Var_Diam_Foro_Ali
      @Z = 15

      @base_0.x = base_0.x + X/2 - @X/2 + Var_PosX_Foro_Ali
      @base_0.y = base_0.y + Cucina_2_5_Pensile_Fondo_Dim.y + $Cucina_2_5_Pensile_Schiena_Rid.y / 2 + Var_PosY_Foro_Ali - @X/2
      @base_0.z = base_0.z - $Cucina_2_5_Pensile_Schiena_Dim.z/2 - @Z/2
   }

   Posiziona ForoCappa ScsCppF
   {
      @escluso = SE_NUM( Var_Cappa_ScassoFnd, 0, 1)

      @X = Var_Lar_ScassoFnd
      @Y = 2*Cucina_2_5_Pensile_Fondo_Dim.y
      @Z = Var_Prf_ScassoFnd

      @base_0.x = base_0.x - @X/2 + Var_PosX_ScassoFnd
      @base_0.y = base_0.y - Cucina_2_5_Pensile_Fondo_Dim.y/2
      @base_0.z = base_0.z - @Z/2 + Var_PosZ_ScassoFnd

      @Var_Cappa_ScassoFnd = Var_Cappa_ScassoFnd
      @Var_Lar_ScassoFnd   = Var_Lar_ScassoFnd
      @Var_Prf_ScassoFnd   = Var_Prf_ScassoFnd
   }
}

Elemento Cucina_2_5_Pensile_Angolo
{
   Descrizione = "Cucine 2.5: pensile angolo"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       "Larghezza"            637          ShowAlways
      Y                       "Altezza"              644          ShowAlways
      Z                       "Profondita"           637          ShowAlways

      Scocca_Z                "Socca - Profondita"   325

      Var_Scocca_Tipo         "Scocca - Tipo"        3
      Var_Scocca_Tipo_Dsc     "Scocca - Tipo"        "ANGOLO"     ShowAlways

      Z_Fia_Sx                "Scocca - Fianco Sx"   1
      Z_Fia_Dx                "Scocca - Fianco Dx"   1

      Var_Anta_Apertura       "Anta - Apertura"      0
      Var_Anta_Apertura_Dsc   "Anta - Apertura"      "BATTENTE"   ShowAlways

      Var_Anta_Opzione        "Anta - Opzioni"       0
      Var_Anta_Opzione_Dsc    "Anta - Opzioni"       "STANDARD"   ShowAlways

      AntaSx                  "Larghezza Anta SX"    454
      AntaDx                  "Larghezza Anta DX"    479

      ang                     "Angolo"               90
      tipo_ang_muro           ""                     "S"
      offset_muro             ""                     0

      TIPO__                  ""                     1
      STENDI_AUTO_ANGOLO      ""                     2

      FLAG_Debug              "Debug"                0            Boolean

      COD_EREDITA             ""                     "PRE;POST"

      M4_A_MURO               ""                     -1
      M4_CNT_LINK_MODE__      ""                     2
      M4_CNT_MODE__           ""                     1
      M4_CNT_MODE2__          ""                     1

      FillerM2G               " "                    ""           ShowAlways
      M4_MIS                  ""                     "X;Y;Z;Var_*_Dsc;Filler*"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Modello
      GOSUB Cucina_Versione

      // Valori
      Var_Scocca_Tipo_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Scocca_Tipo", Var_Scocca_Tipo)
      Var_Anta_Apertura_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Apertura", Var_Anta_Apertura)
      Var_Anta_Opzione_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Opzione", Var_Anta_Opzione)

      // Variabili: visibilità e menù
      if( ACTION() == 1)
      {
         if( FLAG_Debug > 0
           | $ATTIVA_DLL == 0)
         {
            VAR_CREATE_NUM( idx_att, "Var_Scocca_Tipo", Var_Scocca_Tipo, $MODE_MISURE, "Cucina_2_5_Pensile_Scocca_Tipo")
            VAR_CREATE_NUM( idx_att, "Var_Anta_Apertura", Var_Anta_Apertura, $MODE_MISURE, "Cucina_2_5_Pensile_Anta_Apertura")
            VAR_CREATE_NUM( idx_att, "Var_Anta_Opzione", Var_Anta_Opzione, $MODE_MISURE, "Cucina_2_5_Pensile_Anta_Opzione")
         }
      }

      // Anta
      Anta_Tipo = "Blocco"
      if( Cucina_ModelloDsc == "Now")  { Anta_Tipo = "AntaMadiaNow" }
      if( Cucina_ModelloDsc == "Cut"
        | Cucina_ModelloDsc == "36e8") { Anta_Tipo = "Cuc_AntaAng"  }

      AntaSx = X - 353
      AntaDx = Z - 328
   }

   PuntiNotevoli
   {
      // Dimensioni
      Z_Fia_Dx = $Cucina_2_5_Pensile_Ang_Fianco_Z
      Z_Fia_Sx = $Cucina_2_5_Pensile_Ang_Fianco_Z

      GOSUB DefPunti_Cucina_2_5_PensileAngolo

      // Vani
      /// Vano ante
      vano_l_0        = X - $Cucina_2_5_Pensile_Anta_RieX
      vano_h_0        = Y - $Cucina_2_5_Pensile_Anta_RieY
      vano_p_0        = $Cucina_2_5_Pensile_Anta_Spessore
      vano_0_0.x      = base_0.x + (X - vano_l_0)/2
      vano_0_0.y      = base_0.y + (Y - vano_h_0)/2
      vano_0_0.z      = base_0.z + Z_Fia_Sx + $Cucina_2_5_Pensile_Anta_Anta_Aria/2
      vano_hide_0     = 1
      vano_nome_0     = "Anta"
      vano_elementi_0 = ""
   }

   Orientamenti
   {
      Sinistra base_0, base_1, alto_0, alto_1
      Destra   base_4, base_3, alto_4, alto_3
      Alto     alto_0, alto_1, alto_4, alto_3
      Basso    base_0, base_1, base_4, base_3
      Fronte   base_1, base_3, alto_1, alto_3
      Retro    base_0, alto_4, alto_0, base_4
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      //GOSUB Cucina_2_5_Pensile_Set_Gest_C165_Optional
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 120, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Cucina_2_5_Pensile_Angolo_Fusto fus
   {
      GOSUB posa_blocco

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang

      @HIDE = 0
   }

   Posiziona %Anta_Tipo% anta
   {
      @X = vano_l_0
      @Y = vano_h_0
      @Z = vano_p_0

      @base_0 = vano_0_0

      @AperturaMn = 0 //Vedi AperAnt_368
      @FAttSdoppia = 1
      @SdoppiaAnte = 1

      @AntaDx = AntaDx
      @AntaSx = AntaSx

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      // Definizione fasce Now
      if( Cucina_ModelloDsc != "Now") { EXITSUB() }

      @TipoFrontale = 0
      @TipoFrontaleNOW = 6
      @FLAG_per_angolo = 1

      @X_Ant_Dx = AntaDx
      @X_Ant_Sx = AntaSx

      @Y_Ant_Sx = @Y
      @Y_Ant_Dx = @Y

      @VAR_opzione_anta = Var_Anta_Opzione_Dsc
   }
}

Elemento Cucina_2_5_Pensile_Angolo_Fusto
{
   Descrizione = "Cucine 2.5: fusto pensile angolo"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       "Larghezza"             637          ShowAlways   Implicit
      Y                       "Altezza"               644          ShowAlways   Implicit
      Z                       "Profondita"            637          ShowAlways

      Var_Scocca_Tipo_Dsc     "Scocca - Tipo"         "ANGOLO"     ShowAlways   Implicit
      Var_Anta_Opzione_Dsc    "Anta - Opzioni"        "STANDARD"   ShowAlways   Implicit
      Var_Anta_Apertura_Dsc   "Anta - Apertura"       "BATTENTE"   ShowAlways   Implicit

      Ripiani                 "Ripiani - Num"         0            Utente       (   0-   )
      Ripiani_Ricalcola       "Ripiani - Ricalcola"   0            Boolean

      Z_Fia_Dx                ""                      1
      Z_Fia_Sx                ""                      1

      perCODICE               ""                      ""
      GEST_CODICE             ""                      ""

      FLAG_Debug              "Debug"                 0            Boolean      Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_2_5_Pensile_Dimensioni
   }

   PuntiNotevoli
   {
      GOSUB DefPunti_Cucina_2_5_PensileAngolo

      // Vani
      /// Vano interno
      vano_l_0        = X - 2*Cucina_2_5_Pensile_Fianco_Dim.x - $Cucina_2_5_Pensile_Ang_Schiena_Off
      vano_h_0        = Y - Cucina_2_5_Pensile_Coperchio_Dim.y - Cucina_2_5_Pensile_Fondo_Dim.y
      vano_p_0        = Z - 2*Cucina_2_5_Pensile_Fianco_Dim.x - $Cucina_2_5_Pensile_Ang_Schiena_Off
      vano_0_0.x      = base_0.x + $Cucina_2_5_Pensile_Ang_Schiena_Spessore
      vano_0_0.y      = base_0.y + Cucina_2_5_Pensile_Fondo_Dim.y
      vano_0_0.z      = base_0.z + $Cucina_2_5_Pensile_Ang_Schiena_Off + $Cucina_2_5_Pensile_Ang_Schiena_Spessore
      vano_hide_0     = 1
      vano_nome_0     = "Vano interno"

      /// Ripiani
      vano_l_1        = vano_l_0
      vano_h_1        = vano_h_0
      vano_h_1        = SE_NUM( vano_h_1 < 250, 0, vano_h_1)
      vano_p_1        = vano_p_0
      vano_0_1.x      = vano_0_0.x + $Cucina_2_5_Pensile_Ang_Ripiano_Off
      vano_0_1.y      = vano_0_0.y + vano_h_0 - vano_h_1
      vano_0_1.z      = vano_0_0.z + $Cucina_2_5_Pensile_Ang_Ripiano_Off
      vano_hide_1     = 0
      vano_nome_1     = "Vano ripiani"
      vano_elementi_1 = "Cucina_2_5_Pensile_Ang_RipianoL"
   }

   Controlli
   {
      GOSUB CtrlComune

      // Ripiani
      if( IS_VAR_FIXED( idx_att, "Ripiani") == 0) { Ripiani = FLOOR(vano_h_1 / 368) }
      GOSUB Cucina_2_5_Pensile_Ripiani_Attrezza
   }

   Gestionale
   {
      GOSUB GestComune

      wk_pdr_codice = VAR_VAL_STR( idx_pdr_gest, "ORD_COD")
      if( wk_pdr_codice != "")
      {
         perCODICE = STRCAT( "F", wk_pdr_codice)

         if( GEST_CODICE != perCODICE)
         {
            GEST_CODICE = perCODICE
            VAR_VALUE_SET( idx_pdr_gest, "flag_CAMBIA_VAR", 1)
         }
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 120, 250, 120]
      @f_rivestimento = "0.9"
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Fianco fncsx
   {
      @X = Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = Y
      @Z = Z_Fia_Sx

      @base_0 = base_0

      @Verso = -1
   }

   Posiziona Cucina_2_5_Pensile_Fusto_Fianco fncdx
   {
      @X = Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = Y
      @Z = Z_Fia_Dx

      @base_0 = base_4
      @base_0.x = base_4.x
      @base_0.z = base_4.z - Cucina_2_5_Pensile_Fianco_Dim.x

      @ang_y = ang - 180

      @Verso = 1
   }

   Posiziona Cucina_2_5_Pensile_Ang_Fusto_Fondo fnd
   {
      @X = X - Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = Cucina_2_5_Pensile_Fondo_Dim.y
      @Z = Z - Cucina_2_5_Pensile_Fianco_Dim.x

      @base_0 = base_0
      @base_0.x = base_0.x + Cucina_2_5_Pensile_Fianco_Dim.x

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang
   }

   Posiziona Cucina_2_5_Pensile_Ang_Fusto_Coperchio cop
   {
      @X = X - Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = Cucina_2_5_Pensile_Coperchio_Dim.y
      @Z = Z - Cucina_2_5_Pensile_Fianco_Dim.x

      @base_0 = base_0
      @base_0.x = base_0.x + Cucina_2_5_Pensile_Fianco_Dim.x
      @base_0.y = base_0.y + Y - @Y

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang
   }

   Posiziona Cucina_2_5_Pensile_Ang_Fusto_Schiena schsx
   {
      @X = vano_l_0
      @Y = vano_h_0
      @Z = $Cucina_2_5_Pensile_Ang_Schiena_Spessore

      @base_0.x = vano_0_0.x
      @base_0.y = vano_0_0.y
      @base_0.z = vano_0_0.z - @Z
   }

   Posiziona Cucina_2_5_Pensile_Ang_Fusto_Schiena schdx
   {
      @X = Z - Cucina_2_5_Pensile_Fianco_Dim.x
      @Y = vano_h_0
      @Z = $Cucina_2_5_Pensile_Ang_Schiena_Spessore

      @base_0.x = base_4.x - $Cucina_2_5_Pensile_Ang_Schiena_Off
      @base_0.y = vano_0_0.y
      @base_0.z = base_4.z - Cucina_2_5_Pensile_Fianco_Dim.x - @X

      @ang_y = ang - 180
   }

   // Posiziona FerramentaModulo_368 fer
   // {
   //    GOSUB posa_blocco

   //    @ConAttaccaglie = 1
   //    @Tipo368  = "368-BAT"
   // }
}

Elemento Cucina_2_5_Pensile_Ang_Fusto_Fondo
{
   Descrizione = "Modulo Pensile Angolo - Fusto - Fondo"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X         "Larghezza"       1
      Y         "Altezza"         1
      Z         "Profondità"      1

      Z_Fia_Sx  ""                1
      Z_Fia_Dx  ""                1

      ang       ""                90
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB DefPunti_Cucina_2_5_PensileAngolo
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "P01056"

      GOSUB GestComune_Post
   }

   Posiziona PannelloL fnd
   {
      @base_0 = base_0

      @X = X
      @Y = Y
      @Z = Z

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang
      @FIN_Pannello = "C032"
      @FIN_Bordo    = "C067"
   }
}

Elemento Cucina_2_5_Pensile_Ang_Fusto_Coperchio
{
   Descrizione = "Modulo Pensile Angolo - Fusto - Coperchio"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X         "Larghezza"       1
      Y         "Altezza"         1
      Z         "Profondità"      1

      Z_Fia_Sx  ""                1
      Z_Fia_Dx  ""                1

      ang       ""                90
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB DefPunti_Cucina_2_5_PensileAngolo
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "P01057"

      GOSUB GestComune_Post
   }

   Posiziona PannelloL cop
   {
      @base_0 = base_0

      @X = X
      @Y = Y
      @Z = Z

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang
      @FIN_Pannello = "C032"
      @FIN_Bordo    = "C067"
   }
}

Elemento Cucina_2_5_Pensile_Ang_Fusto_Schiena
{
   Descrizione = "Modulo Pensile Angolo - Fusto - Schiena"
   Code        = PEN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Schiena

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       ""        100
      Y                       ""        100
      Z                       ""        19

      Var_Scocca_Tipo_Dsc     ""        ""   Implicit

      FIN_var                 ""        "C032"

      FLAG_Debug              "Debug"   0    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "P01058"

      GOSUB GestComune_Post

      //GOSUB Cucina_2_5_Pensile_Fusto_Set_Gest_C008_Lavorazioni
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 120, 120, 120]
      @f_rivestimento = "0.9"
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      @base_0.x = base_0.x
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z

      GOSUB rivestimento
   }
}

Elemento Cucina_2_5_Pensile_Ang_RipianoL
{
   Descrizione = "Ripiano a L"
   Code        = PEN
   Gruppo      = "Ripiano CUCINA"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Attrezzabile Cucina_2_5_Pensile_Angolo_Fusto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              "Larghezza"                581
      Y              "Spessore"                   8
      Z              "Profondità"               581

      Z_Fia_Sx       "Profondità minore SX"     280
      Z_Fia_Dx       "Profondità minore DX"     280

      ang            "Angolo"                    90 Utente ( )

      RADICE         ""                          ""

      FIN_var        ""                      "C014"

      FLAG_Debug     "Debug"                      0 Boolean Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB DefPunti_Cucina_2_5_PensileAngolo
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         $QueryResult__ = 0

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") == 1) { $QueryResult__ = 1 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR( idx_att, "liv2add*")
      liv2add = 0

      liv_step = 92
      liv_att = liv_step
      liv_max = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_ref))) - liv_step

      while( liv_att <= liv_max)
      {
         AddItem2Array( idx_att, "liv2add", liv_att, "")
         liv_att = liv_att + liv_step
      }

      ArrayCopy( idx_att, "liv2add", "liv2addscr")
      GOSUB livelli_add2
   }

   Procedura cancella
   {
      if( $StartingDel__ != idx_att)            { EXITSUB() }
      if( VAR_VAL( idx_pdr, "OnRicalcola") > 0) { EXITSUB() }

      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //Cancella {}", STR(idx_pdr), nome_att))
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      base_0 = $vano_0
      base_0.y = $vano_0.y + $livello - Y/2

      X = $larghezza - 2*$Cucina_2_5_Pensile_Ang_Ripiano_Off
      Z = $profondita - 2*$Cucina_2_5_Pensile_Ang_Ripiano_Off

      ang = @ang
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "P15068"

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 100]
      @f_rivestimento = "0.9"
   }

   Posiziona _grafica_pan_angolo rip
   {
      @base_0 = base_0

      @X = X
      @Y = Y
      @Z = Z

      @Z_Fia_Sx = Z_Fia_Sx
      @Z_Fia_Dx = Z_Fia_Dx

      @ang = ang

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento Cucina_2_5_Pensile_Illuminazione_Fianco
{
   Descrizione = "Modulo Pensile - Illuminazione Fianco"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile  Cucina_2_5_Pensile_Fusto_Fianco
   Alias       OnChangedVar;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      "Larghezza"              15
      Y                      "Profondita"             100
      Z                      "Spessore"               9

      Verso                  ""                       0    Implicit

      Var_Anta_Opzione_Dsc   ""                       ""   Implicit

      Watt                   ""                       0
      Watt_Metro             ""                       8

      RADICE                 ""                       ""

      FLAG_Debug             "Debug"                  1    Boolean   Implicit

      COD_EREDITA            ""                       "PRE"

      VT_VES_STRINGA         "Var_Anta_Opzione_Dsc"   ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB NO_AUTO

      //Assorbimento
      Watt = Watt_Metro * (Y/1000)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      $QueryResult__ = 0

      if( $query_type == 8)
      {
         if( VAR_VAL_STR( $query_p1, "Var_Scocca_Tipo_Dsc") != "STANDARD")   { EXITSUB() }
         if( VAR_VAL_STR( $query_p1, "Var_Anta_Apertura_Dsc") != "BATTENTE") { EXITSUB() }

         COMPONENTI2( "wk_led", $query_p1, nome_att)
         if( wk_led > 0)                                                     { EXITSUB() }

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") != 1)          { EXITSUB() }

         if( VAR_VAL( $query_p1, "X") != $Cucina_2_5_Pensile_Fianco_Dim.x)   { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Y = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_n)))
      Z = $profondita

      base_0 = $vano_0

      Verso = @Verso
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         VT_VES_STRINGA = Var_Anta_Opzione_Dsc

         GOSUB Cucina_2_5_Pensile_Illuminazione_Fianco_Set_Gest_C003
         GOSUB Cucina_2_5_Illuminazione_Fianco_Set_Gest_C200
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //Dimensioni
      GEST_X = Y
      GEST_Y = X

      //Radice
      GEST_CODICE = ""
      RADICE      = "LEDINDP66"

      // Padre gestionale e riga collegata
      if( ins2_att != $ins2_componente)
      {
         GEST_IDXPADRE = GetTopLevelSost(idx_att)
         M2G_FGRIGAINESPLOSO = 1
      }

      GOSUB GestComune_Post
   }

   Procedura PostGestDllValida
   {
      if( $OnRigenera | $OnLoadOrder | ACTION() <= 0) { EXITSUB() }

      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //PostGestDllValida {}", STR(GetTopLevel(idx_att)), nome_att))
   }

   Procedura OnChangedVar
   {
      if( $ChangedIdx != idx_att) { EXITSUB() }

      if( $ChangedVar == "GEST_C201")
      {
         COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //OnChangedVar [{}] - {} ({})", STR(GetTopLevel(idx_att)), STR(idx_att), nome_att, $ChangedVar))
      }
   }

   Procedura Vault
   {
      vaultFile = "Cucina 3%0_illuminazione%"
   }

   Posiziona Blocco led
   {
      GOSUB posa_blocco

      @c_rivestimento = $c_giallo
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 250]
      @f_rivestimento = "0.9"
   }
}

Elemento Cucina_2_5_Pensile_Illuminazione_Fondo
{
   Descrizione = "Modulo Pensile - Illuminazione Fondo"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Alias        Cucina_2_5_Pensile_Illuminazione_Fondo;CamIncidente
   Stendibile   Cucina_2_5_Pensile ModuloPensile_368 ModuloPensileScPiatti_368
   Attrezzabile Cucina_2_5_Pensile_Fusto_Fondo Fondo_368 TelaioPenScPiatti_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                     "Larghezza"              180
      Xr                    ""                       100
      Y                     "Profondita"             12.3
      Yr                    ""                       12.3
      Z                     "Spessore"               12

      Var_Tipo              "Illuminazione - Tipo"   0
      Var_Tipo_Dsc          "Illuminazione - Tipo"   "STESO"   ShowAlways

      Var_Scocca_Tipo_Dsc   ""                       ""        Implicit

      Cucina_Versione       ""                       2.5       Implicit
      Cucina_ModelloDsc     ""                       ""        Implicit
      Var_Anta_Opzione_Dsc  ""                       ""        Implicit

      Watt                  ""                       0
      Watt_Metro            ""                       9.5

      RADICE                ""                       ""
      perRADICE             ""                       ""

      COD_EREDITA           ""                       "PRE;POST"

      M4_DIALOG             ""                       2
      M4_DLINK_MODE__       ""                       0

      CMP2_AZIONI           ""                       "M"
      Stendibile_Nome       ""                       "Cucina_2_5_Pensile;ModuloPensile_368;ModuloPensileScPiatti_368"
      Stendibile_Tipo       ""                       "STANDARD;SCOLAPIATTI"

      INSERITO              ""                       0
      DEL_ME                ""                       ""
      DEL_ME_IDX            ""                       -1

      idx_ref               ""                       -1
      idx_led               ""                       -1

      idx_ref_array         ""                       0
      idx_ref_strarray      ""                       ""
      dim_ref_strarray      ""                       ""

      VT_DIB_STRINGA        "Var_Scocca_Tipo_Dsc"    ""
      FLAG_Debug            "Debug"                  0         Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      // Valori
      Var_Tipo = 0
      if( ins2_att == $ins2_attrezzato | ins2_att == $ins2_attrezzato2) { Var_Tipo = 1 }
      if( UN_PADRE("TelaioPenScPiatti_368")
        | Var_Scocca_Tipo_Dsc == "SCOLAPIATTI" )                        { Var_Tipo = 2 }
      Var_Tipo_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Illuminazione_Fondo_Tipo", Var_Tipo)

      // Dimensioni
      Xr = SE_NUM( Var_Tipo_Dsc == "STESO", X - $Cucina_2_5_Pensile_Illuminazione_Fondo_STESO_Rid.x, X)
      Yr = SE_NUM( Var_Tipo_Dsc == "INCASSO", Y + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_Off.y, Y)

      // Assorbimento
      Watt = Watt_Metro * (X/1000)

      // Variabili tecniche
      /// Passo la tipologia di scocca, nei pensili angolo in distinta vengono scaricati led con tappo
      VT_DIB_STRINGA = Var_Scocca_Tipo_Dsc
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         $QueryResult__ = 0

         COMPONENTI2( "wk_led", $query_p1, nome_att)
         if( wk_led > 0)                                                  { EXITSUB() }

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") != 1)       { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Procedura Stendi
   {
      Var_Tipo = 0

      if( DEL_ME != "") { EXITSUB() }

      if( $stesi_mode_sx == $stesi_Elemento
        & $stesi_mode_dx == $stesi_Elemento)
      {
         // 1 - Idx
         if( IS_IDX($stesi_idx1) != 1) { DEL_ME = FMT( "$stesi_idx1: {} non valido.", STR($stesi_idx1)) }
         if( IS_IDX($stesi_idx2) != 1) { DEL_ME = FMT( "$stesi_idx2: {} non valido.", STR($stesi_idx2)) }
         if( DEL_ME != "") { EXITSUB() }

         // 2 - Nome
         wk_stesi_idx1_nome = NOME($stesi_idx1)
         if( Is_In_StrArray( wk_stesi_idx1_nome, Stendibile_Nome, ";") != 1) { DEL_ME_IDX = $stesi_idx1 DEL_ME = FMT( "$stesi_idx1: [{}] - {}: elemento non permesso ({})", STR($stesi_idx1), wk_stesi_idx1_nome, Stendibile_Nome) }

         wk_stesi_idx2_nome = NOME($stesi_idx2)
         if( Is_In_StrArray( wk_stesi_idx2_nome, Stendibile_Nome, ";") != 1) { DEL_ME_IDX = $stesi_idx2 DEL_ME = FMT( "$stesi_idx2: [{}] - {}: elemento non permesso ({})", STR($stesi_idx2), wk_stesi_idx2_nome, Stendibile_Nome) }
         if( DEL_ME != "") { EXITSUB() }

         // 3 - Versione
         wk_stesi_idx1_versione = VAR_VAL( $stesi_idx1, "Cucina_Versione")
         if( wk_stesi_idx1_versione < Cucina_Versione) { DEL_ME_IDX = $stesi_idx1 DEL_ME = FMT( "$stesi_idx1: [{}] - {}: versione non permessa ({})", STR($stesi_idx1), wk_stesi_idx1_nome, STR(wk_stesi_idx1_versione)) }

         wk_stesi_idx2_versione = VAR_VAL( $stesi_idx2, "Cucina_Versione")
         if( wk_stesi_idx2_versione < Cucina_Versione) { DEL_ME_IDX = $stesi_idx2 DEL_ME = FMT( "$stesi_idx2: [{}] - {}: versione non permessa ({})", STR($stesi_idx2), wk_stesi_idx2_nome, STR(wk_stesi_idx2_versione)) }
         if( DEL_ME != "") { EXITSUB() }

         // 4 - Tipo
         wk_stesi_idx1_tipo = VAR_VAL_STR( $stesi_idx1, "Var_Scocca_Tipo_Dsc")
         if( wk_stesi_idx1_tipo != ""
           & Is_In_StrArray( wk_stesi_idx1_tipo, Stendibile_Tipo, ";") != 1) { DEL_ME_IDX = $stesi_idx1 DEL_ME = FMT( "$stesi_idx1: [{}] - {}: tipo non permesso ({})", STR($stesi_idx1), wk_stesi_idx1_tipo, Stendibile_Tipo) }

         wk_stesi_idx2_tipo = VAR_VAL_STR( $stesi_idx2, "Var_Scocca_Tipo_Dsc")
         if( wk_stesi_idx2_tipo != ""
           & Is_In_StrArray( wk_stesi_idx2_tipo, Stendibile_Tipo, ";") != 1) { DEL_ME_IDX = $stesi_idx2 DEL_ME = FMT( "$stesi_idx2: [{}] - {}: tipo non permesso ({})", STR($stesi_idx2), wk_stesi_idx2_tipo, Stendibile_Tipo) }
         if( DEL_ME != "") { EXITSUB() }

         // 5 - Sequenza
         CTLR_SEQUENZA_SXDX( $stesi_idx1, $stesi_idx2)

         SET_#($stesi_idx1)
         $stesi_pt_sx = #base_0

         SET_#($stesi_idx2)
         $stesi_pt_dx = #base_3
      }

      idx_ref = $stesi_idx1

      X = MRound( DISTANZA( $stesi_pt_sx, $stesi_pt_dx), 0.5)

      ang_y = ANG_2_PUNTI( $stesi_pt_sx, $stesi_pt_dx)

      base_0 = $stesi_pt_sx
      base_0.y = base_0.y - Y
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Y = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_n)))
      Z = $profondita

      base_0 = $vano_0
   }

   Procedura Notifica
   {
      if( DEL_ME != "")   { EXITSUB() }
      if( ACTION() != 12) { EXITSUB() }

      VAR_SET_MODIFICATA( idx_att, "X", "")

      ang_y = VAR_VAL( idx_att, "ang_y")
      VAR_SET_MODIFICATA( idx_att, "ang_y", "")

      if( IS_IDX(idx_ref))
      {
         SET_#(idx_ref)

         wk_cnt_offx = DistanzaFraPunti( #base_0, base0_abs, ang_y)
         wk_cnt_offz = $Cucina_2_5_Pensile_Illuminazione_Fondo_STESO_Off.z
         COMANDO( FMT( "CNT S + 0, B - 0, R + 0, {} 0 {} 0", wk_cnt_offx, wk_cnt_offz))
         COMANDO( FMT( "POS2LINK {} {} //Notifica {}", STR(idx_att), STR(idx_ref), nome_att))
      }

      COMANDO( FMT( "VAR_CHANGE 1 {} INSERITO = 1 //Notifica {}", STR(idx_att), nome_att))
      COMANDO( FMT( "RICALCOLA {} //Notifica {}", STR(idx_att), nome_att))
   }

   Controlli
   {
      // Cancello
      if( isSpeciale(idx_att)) { DEL_ME = "" }
      if( DEL_ME != "")
      {
        #ifdef TEC;AZI
         HI( idx_att, 1)
         if( IsIdx( idx_att, "DEL_ME_IDX")) { HI( DEL_ME_IDX, 1) }

         DISPLAY2( FMT("[{}] - {}: ELIMINO\n\n{}", STR(idx_att), nome_att, DEL_ME))

         if( IsIdx( idx_att, "DEL_ME_IDX")) { HI( DEL_ME_IDX, 0) }
         HI( idx_att, 0)
        #endif

        wk_cmd = SE_STR( idx_att == idx_pdr, "DELETE", "CANCELLA")
        COMANDO( FMT( "{} {} //Controlli {}, DEL_ME: {}", wk_cmd, STR(idx_att), nome_att, DEL_ME))

        EXITSUB()
      }

      // Controlli
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      if( DEL_ME != "")                         { EXITSUB() }
      if( ACTION() == 2
        & Var_Tipo_Dsc != "STESO") { INSERITO = 1 EXITSUB() }
      if( INSERITO <= 0)                        { EXITSUB() }
      if( $OnLoadOrder != 0)                    { EXITSUB() }

      if( IS_IDX(idx_led))
      {
         // 1 - Dati moduli di riferimento
         idx_ref_array = 0
         idx_ref_strarray_new = ""
         dim_ref_strarray_new = ""

         if( idx_att == idx_pdr
           & Var_Tipo_Dsc == "STESO")
         {
            BOX_MODE(0)
            NEAR_GLOBALE( "wk_fondi", idx_led, 2, 0, "Cucina_2_5_Pensile_Fusto_Fondo")
            if( wk_fondi <= 0)
            {
               NEAR_GLOBALE( "wk_fondi", idx_led, 2, 0, "Fondo_368")
            }
            //COMANDO2( FMT( "LOGMSG Cucina_2_5_Pensile_Illuminazione_Fondo: ACTION: {}, wk_fondi: {}, X: {}, base_0: {}, ang_y: {}", STR(ACTION()), STR(wk_fondi), STR(X), Point2String(base_0), STR(VAR_VAL( idx_att, "ang_y"))))

            if( wk_fondi > 0)
            {
               SORT_POINT( base_0, "wk_fondi", "base_3")

               wk_fondo_num = 0
               while( inc(wk_fondo_num) <= wk_fondi)
               {
                  wk_fondo_idx = wk_fondi[wk_fondo_num]

                  VAR_VALUE_SET( idx_att, GetArrayVar( "idx_ref_array", inc(idx_ref_array)), wk_fondo_idx)
                  AddVal_CAT_VM_sel( idx_ref_strarray_new, STR(wk_fondo_idx))
                  AddVal_CAT_VM_sel( dim_ref_strarray_new, STR(VAR_VAL( wk_fondo_idx, "X")))
               }
            }

            if( wk_fondi <= 0
              | ( idx_ref_strarray != "" & idx_ref_strarray != idx_ref_strarray_new)
              | ( dim_ref_strarray != "" & dim_ref_strarray != dim_ref_strarray_new))
            {
               DEL_ME = "Strutture sovrastanti modificate."
               if( $modalita_reale == "TE")
               {
                  DEL_ME = FMT( "{}\n(Inserito: {} - Action: {} - Componendo: {})\n(idx_ref_strarray: {} - idx_ref_strarray_new: {} - dim_ref_strarray: {} - dim_ref_strarray_new: {})", DEL_ME, STR(INSERITO), STR(ACTION()), STR(COMPONENDO()), idx_ref_strarray, idx_ref_strarray_new, dim_ref_strarray, dim_ref_strarray_new)
               }
            }

            idx_ref_strarray = idx_ref_strarray_new
            dim_ref_strarray = dim_ref_strarray_new
         }

         // 2 - Moduli non compatibili
         if( DEL_ME == "")
         {
            wk_idx_ref_num = 0
            while( inc(wk_idx_ref_num) <= idx_ref_array)
            {
               wk_ref_idx = idx_ref_array[wk_idx_ref_num]

               wk_ref_tipo = VAR_VAL_STR( wk_ref_idx, "Var_Scocca_Tipo_Dsc")
               if( Var_Scocca_Tipo_Dsc == "")                               { continue }
               if( Is_In_StrArray( wk_ref_tipo, Stendibile_Tipo, ";") == 1) { continue }

               wk_ref_escluso = VAR_VAL( wk_ref_idx, "escluso")
               if( wk_ref_escluso == 0)                                     { continue }

               DEL_ME_IDX = GetTopLevel(wk_ref_idx)
               DEL_ME = "Strutture sovrastanti non compatibili."
               if( $modalita_reale == "TE")
               {
                  DEL_ME = FMT( "{}\n(wk_ref_idx: {} - wk_ref_tipo: {} - wk_ref_escluso: {})", DEL_ME, STR(wk_ref_idx), wk_ref_tipo, STR(wk_ref_escluso))
               }
            }
         }

         // 3 - Led già presente
         if( DEL_ME == "")
         {
            wk_led = 0

            // 3.1 - Attrezzato
            if( idx_pdr != idx_att)
            {
               COMPONENTI2( "wk_led", idx_pdr, nome_att)
            }

            // 3.2 - Steso
            if( wk_led <= 0)
            {
               BOX_MODE(0)
               NEAR_GLOBALE2( "wk_led_near", idx_led, 2, nome_att)
               MergeArray2Array( idx_att, "wk_led_near", "wk_led")
            }

            // 3.3 - Controllo
            wk_led_num = 0
            while( inc(wk_led_num) <= wk_led)
            {
               wk_led_att = wk_led[wk_led_num]

               if( wk_led_att != idx_att
                 & VAR_VAL_STR( wk_led_att, "DEL_ME") == "") { DEL_ME_IDX = wk_led_att  DEL_ME = FMT("Collisione con [{}] - {}.", STR(wk_led_att), NOME(wk_led_att))  break }
            }
         }

         // 4 - Dimensioni limite
         if( DEL_ME == "")
         {
            ORD_XMIN = VAR_VAL( idx_att, "ORD_XMIN")
            ORD_XMAX = VAR_VAL( idx_att, "ORD_XMAX")

            if( X < ORD_XMIN
              | ( X > ORD_XMAX
                & ORD_XMAX > ORD_XMIN))
            {
               DEL_ME = FMT( "La lunghezza deve essere compresa tra {}mm e {}mm, attualmente {}mm.", STR(ORD_XMIN), STR(ORD_XMAX), STR(X))
            }
         }
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
      }
   }

   Gestionale
   {
      GOSUB GestComune

      // Dimensioni
      GEST_X = Xr
      GEST_Y = Yr

      //COMANDO2(FMT( "LOGMSG 1): {} - IDX:{} - X:{} - Xr:{} - Y:{} - Z:{} - Var_Tipo: {} - Var_Tipo_Dsc:{} - RADICE:{} - perRADICE:{}", "GESTIONALE LED", STR(ATTUALE()), STR(X), STR(Xr), STR(Y), STR(Z), STR(Var_Tipo), Var_Tipo_Dsc, RADICE, perRADICE))

      // Radice e codice
      perRADICE = ""
      if( Var_Tipo_Dsc == "INCASSO")     { perRADICE = SE_STR( Cucina_ModelloDsc == "36e8", "LEDP60C368", "LEDP60C") }
      if( Var_Tipo_Dsc == "SCOLAPIATTI") { perRADICE = "LEDP60CS" }

      if( RADICE != perRADICE)
      {
         RADICE = perRADICE

         flag_CAMBIA_VAR = 1
      }

      if( RADICE != "") { GEST_CODICE = "" }

      // Padre gestionale e riga collegata
      /// Scolapiatti: figlio del telaio
      if( CheckSel_ORD_SOST(idx_pdr)
        & Var_Tipo_Dsc == "SCOLAPIATTI")
      {
         GEST_IDXPADRE = idx_pdr
      }

      /// Incasso: riga collegata
      if( Var_Tipo_Dsc == "INCASSO")
      {
         GEST_IDXPADRE = GetTopLevelSost(idx_att)
         M2G_FGRIGAINESPLOSO = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura Vault
   {
      vaultFile = "Cucina 3%0_illuminazione%"
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Blocco led
   {
      idx_led = ATTUALE()

      GOSUB posa_blocco

      @X = Xr
      @base_0.x = base_0.x + (X - @X)/2

      @c_rivestimento = $c_giallo
   }

   // WIP: simile ai pensili cut/now, al momento non ho una procedura per il calcolo dei trasformatori, ne metto uno per led.
   Posiziona RigaOrdine_NonGraficato alim
   {
      @escluso = SE_NUM( Cucina_ModelloDsc == "36e8", 0, 1)

      @base_0 = base_0

      @GEST_CODICE = "CU1719"
      @DIM_GEST = 1

      @FLAG_RADICE = $FLAG_STANDARD + SE_NUM( Var_Anta_Opzione_Dsc != "VETRINETTA", $MAKE_ROW, 0)
   }
}

Elemento Cucina_2_5_Pensile_Illuminazione_Coperchio
{
   Descrizione = "Modulo Pensile - Illuminazione Coperchio"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Alias        Cucina_2_5_Pensile_Illuminazione_Coperchio;CamIncidente
   Attrezzabile Cucina_2_5_Pensile_Fusto_Coperchio

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                     "Larghezza"              180
      Y                     "Profondita"             16
      Yr                    ""                       15
      Z                     "Spessore"               9

      Var_Scocca_Tipo_Dsc   ""                       ""        Implicit
      Var_Anta_Opzione_Dsc  ""                       ""        Implicit
      Var_Anta_Apertura_Dsc ""                       ""        Implicit

      Watt                  ""                       0
      Watt_Metro            ""                       8

      FLAG_Debug            "Debug"                  0         Boolean   Implicit

      COD_EREDITA           ""                       "PRE"

      VT_VES_STRINGA        "Var_Anta_Opzione_Dsc"   ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      // Dimensioni
      Yr = Y + $Cucina_2_5_Pensile_Illuminazione_Coperchio_Off.y

      // Assorbimento
      Watt = Watt_Metro * (X/1000)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         $QueryResult__ = 0

         COMPONENTI2( "wk_led", $query_p1, nome_att)
         if( wk_led > 0)                                                      { EXITSUB() }

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") != 1)           { EXITSUB() }

         if( VAR_VAL( $query_p1, "Y") != $Cucina_2_5_Pensile_Coperchio_Dim.y) { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Y = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_n)))
      Z = $profondita

      base_0 = $vano_0
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         VT_VES_STRINGA = Var_Anta_Opzione_Dsc
      }
   }

   Gestionale
   {
      GOSUB GestComune

      // Dimensioni
      GEST_Y = Yr

      // Radice e codice
      GEST_CODICE = ""
      RADICE = "LEDINDOP66"

      // Padre gestionale e riga collegata
      GEST_IDXPADRE = GetTopLevelSost(idx_att)
      M2G_FGRIGAINESPLOSO = 1

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura Vault
   {
      vaultFile = "Cucina 3%0_illuminazione%"
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Blocco led
   {
      idx_led = ATTUALE()

      GOSUB posa_blocco

      @c_rivestimento = $c_giallo
   }
}

Elemento Cucina_2_5_Pensile_Illuminazione_Sensore
{
   Descrizione    = "Sensore"
   Code           = PEN
   Gruppo         = "PEN"
   Tipo           = Contenitore
   Forma          = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X            "Larghezza"    12
      Y            "Altezza"      12
      Z            "Profondità"   90

      GEST_CODICE  ""             ""
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "ADJ002"
      if( Sens_Pos == 0) { GEST_CODICE = "ADJ003" }

      GOSUB GestComune_Post
   }

   Posiziona CilindroZ sens
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Sens_OffX_sx
   }

   Posiziona CilindroZ sens2
   {
      @escluso = SE_NUM( Sens_Pos == 0, 0, 1)

      GOSUB posa_blocco
      @base_0.x = base_0.x + Sens_OffX_dx
   }
}

Elemento Cucina_2_5_Pensile_FiancoFinitura
{
   Descrizione = "Modulo Pensile - Fianco Finitura"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Alias         FiancoFin
   Attrezzabile  Cucina_2_5_Pensile_Fusto_Fianco

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                   "Larghezza"    4
      Y                   "Altezza"      368
      Z                   "Profondita"   349

      Verso               ""             0    Implicit
      Fasce_Num           ""             1    SaveAlways

      Cucina_ModelloDsc   ""             ""   Implicit

      COD_EREDITA         ""             "PRE;POST"

      FLAG_Debug          "Debug"        1    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      idx_topl = GetTopLevel(idx_att)

      // Numero fasce: da GEST_C049 - Tipo fianco
      gest_C049 = VAR_VAL_STR( idx_att, "GEST_C049")
      if( gest_C049 != ""
        & gest_C049 != "__") { Fasce_Num = ATOI(RIGHT( gest_C049, 1)) }
      if( Fasce_Num <= 0) { Fasce_Num = 1 }

      HIDE = SE_NUM( Fasce_Num > 1, 0, 2)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Y = VAR_VAL( idx_ref, STRCAT( "vano_h_", STR(vano_n)))
      Z = $profondita

      base_0 = $vano_0

      Verso = @Verso
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      RADICE = "FIFIPC"
      GEST_CODICE = ""
      GEST_IDXPADRE = GetTopLevelSost(idx_att)
      M2G_FGRIGAINESPLOSO = 1

      GOSUB GestComune_Post
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      $QueryResult__ = 0

      if( $query_type == 8)
      {
         COMPONENTI2( "wk_ff", $query_p1, nome_att)
         if( wk_ff > 0)                                             { EXITSUB() }

         wk_vano_elementi = VAR_VAL_STR( $query_p1, STRCAT( "vano_elementi_", STR($query_p2)))
         if( Is_In_StrArray( nome_att, wk_vano_elementi, ";") != 1) { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         // Finitura
         VarAdd = "C018"
         if( IS_VarsUser__( idx_att, GetVarGest(VarAdd)) != 1)
         {
            gest_C042 = VAR_VAL_STR( idx_topl, "GEST_C042")

            wk_gest_C042_C018_test = "0"
            if( ACTION() != 28
              & gest_C042 != VAR_VAL_STR( idx_att, "gest_C042_prec"))
            {
               wk_gest_C042_C018_test = STRDADB( idx_att, "CATVAL_INCONF", STRCAT( VarAdd, ";", gest_C042))
            }

            if( wk_gest_C042_C018_test == "0")
            {
               VAR_VALUESTR_SET( idx_att, VarAdd, gest_C042)
               GOSUB Add_TABER_VARSETTATE
            }

            gest_C042_prec = gest_C042
         }

         // Numero fasce
         VarAdd = "C049"
         if( IS_VarsUser__( idx_att, GetVarGest(VarAdd)) != 1)
         {
            VAR_VALUESTR_SET( idx_att, VarAdd, SE_STR( Cucina_ModelloDsc == "Now", "TF002", "TF001"))
            GOSUB Add_TABER_VARSETTATE
         }
      }
   }

   Procedura PostGestDllValida
   {
      if( $OnRigenera | $OnLoadOrder | ACTION() <= 0) { EXITSUB() }
      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //PostGestDllValida {}", STR(idx_att), nome_att))
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

      @c_rivestimento = [ 250, 100, 250]
      @f_rivestimento = "0.9"
   }

   Posiziona Cucina_2_5_Pensile_FiancoFinitura_Fascia fin1
   {
      GOSUB posa_blocco

      if( Fasce_Num > 1) { @Z = 147 }
   }

   Posiziona Cucina_2_5_Pensile_FiancoFinitura_Fascia fin2
   {
      @escluso = SE_NUM( Fasce_Num >= 2, 0, 1)

      GOSUB posa_blocco

      @Z = Z - (147 + 3)
      @base_0.z = base_1.z - @Z
   }
}

Elemento Cucina_2_5_Pensile_FiancoFinitura_Fascia
{
   Descrizione = "Modulo Pensile - Fianco Finitura - Fascia"
   Code        = PEN
   Gruppo      = "PEN"
   Tipo        = Contenitore
   Forma       = ""
   Alias         FiancoFin

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                     "Larghezza"            4   ShowAlways
      Y                     "Altezza"              644 ShowAlways
      Z                     "Spessore"             147 ShowAlways

      FillerM2G             " "                    ""  ShowAlways

      Verso                 ""                     0   Implicit
      Fasce_Num             ""                     0   Implicit

      FIN_var               ""                     "C018"

      XGLASS                "Num. XGLASS"          ""  Utente   ( )

      M4_MIS                ""                     "X;Y;Z;Filler*"
   }

   Assegnazioni
   {
      GOSUB AssComune
      STP_Bollina = 1
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "F09166"

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend bl
   {
      GOSUB Posa_Elemento

      @BLEND__ = min3([X, Y, Z])/4

      GOSUB rivestimento
   }
}

Elemento _grafica_pan_angolo
{
   Descrizione = "Pannello a L"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X         "" 2
      Y         "" 1
      Z         "" 2

      Z_Fia_Sx  "" 1
      Z_Fia_Dx  "" 1

      HIDE      "" 1
   }

   PuntiNotevoli
   {
      base_0 = [ 0, 0,  0]
      base_1 = [ 0, 0,  Z_Fia_Sx]
      base_2 = [X-Z_Fia_Dx, 0 , Z_Fia_Sx]
      base_3 = [X-Z_Fia_Dx, 0 , Z]
      base_4 = [X, 0, Z]
      base_5 = [X, 0, 0]

      alto_0 = base_0    alto_0.y = Y
   }
}
