Globali
{
   SVN_Cucina_Rev          "SVN revision"  "$Revision: 2685 $"     NoSave

//dimensione standard catene
   Cuc_Larg_Cat            "Larghezza catene orizz/vert"                            30 NoSave
   Cuc_Spe_Cat             "Spessore catene orizz/vert"                             20 NoSave

   Cuc_Larg_Cat_1          "Larghezza catene orizz/vert - rev 1"                    40 NoSave
   Cuc_Spe_Cat_1           "Spessore catene orizz/vert - rev 1"                     20 NoSave

   Cuc_Bl1Cat_X            "Larghezza blocco 1 grad catene orizz/vert"              15 NoSave
   Cuc_Bl1Cat_Y            "Spessore blocco 1 grad catene orizz/vert"               34.5 NoSave
   Cuc_Bl1Cat_Z            "Profondità blocco 1 grad catene orizz/vert"             15 NoSave
   Cuc_Bl2Cat_X            "Larghezza blocco 2 grad catene orizz/vert"              15 NoSave
   Cuc_Bl2Cat_Y            "Spessore blocco 2 grad catene orizz/vert"               40 NoSave
   Cuc_Bl2Cat_Z            "Profondità blocco 2 grad catene orizz/vert"             20 NoSave

   Cuc_Larg_CatVertAL      "Larghezza catene vert angolo L"                         30 NoSave
   Cuc_Spe_CatVertAL       "Spessore catene vert angolo L"                          20 NoSave

   //dimensione standard strette/alluminio
   Cuc_Larg_CatAll         "Larghezza catene orizz/vert Alluminio"                  86.5 NoSave
   Cuc_Spe_CatAll          "Larghezza catene orizz/vert Alluminio"                  78 NoSave

   Cuc_RidY_Sco            "Riduzione Y della scocca rispetto alla base"            19 NoSave

   Cuc_Rie_Std             "Rientro Standard"                                       0.5 NoSave
   Cuc_Spe_Fia             "Spessore fianco"                                        19 NoSave
   Cuc_Spe_Sch             "Spessore schiene"                                       16 NoSave
   Cuc_Spe_Cop             "Spessore coperchio"                                     19 NoSave
   Cuc_Spe_Fnd             "Spessore fondo"                                         19 NoSave
   Cuc_Spe_Fnd_Fri         "Spessore fondo frigo"                                   48 NoSave
   Cuc_Spe_Fnd_Lvst        "Spessore fondo colonna lavastoviglie"                   25 NoSave
   //LZ 03/03/2021: revisione tecnica colonna lvst/forno
   Cuc_Spe_Fnd_Lvst_r1     "Spessore fondo colonna lavastoviglie - rev.1"           19 NoSave

   Cuc_Spe_Pan             "Spessore pannello"                                      18 NoSave
   Cuc_Spe_Div             "Spessore divisorio interno"                             19 NoSave
   Cuc_Spe_Ant             "Spessore Anta"                                          21 NoSave
   Cuc_Spe_Cas             "Spessore Cassetto"                                      21 NoSave
   Cuc_Spe_Fro             "Spessore Frontale"                                      21 NoSave
   Cuc_Spe_Bif             "Spessore Bifacciale"                                    24 NoSave
   Cuc_Spe_Ant_Col         "Spessore Anta Colonna"                                  23 NoSave
   Cuc_Spe_Cas_Col         "Spessore Cassetto Colonna"                              23 NoSave
   Cuc_Spe_Ant_Mel         "Spessore Anta Melaminica"                               19 NoSave

   Cuc_Rie_Div_Z           "Rientro in Z del divisorio vert. fronte e retro"        0.5 NoSave

   //variabili per la base giorno
   Cuc_Spe_Fia_Giorno      "Spessore fianco per la base giorno"                     25 NoSave
   Cuc_Spe_Cop_Giorno      "Spessore coperchio per la base giorno"                  25 NoSave
   Cuc_Spe_Fnd_Giorno      "Spessore fondo per la base giorno"                      25 NoSave
   Cuc_Spe_Vaschetta       "Spessore vaschetta piano cottura"                        8 NoSave

   //variabili basi angolo
   Cuc_DistMuro            "Distanza dal muro"                                    163 NoSave
   Cuc_XMontante           "Dimensione X montante L"                               50 NoSave
   Cuc_ZMontante           "Dimensione Z montante L"                               32 NoSave
   Cuc_X_Antamin           "Dimensione minima anta"                               250 NoSave
   Cuc_X_AntaMax           "Dimensione Massima anta"                              650 NoSave

   Cuc_Alt_Gola            "Rialzo top/basi per inserimento gola"                   40 NoSave
   Cuc_Spe_Gola            "Spessore gola"                                          30 NoSave
   Cuc_Col_Gola            "Vuoto fra colonne per inserimento gola"                 30 NoSave //40 NoSave

   //variabili per colonne soffietto
   Cuc_Alt_MasSoff         "Altezza massello barre inferiori col soffietto"         70 NoSave
   Cuc_Spe_MasSoff         "Altezza massello barre inferiori col soffietto"         19 NoSave

   //***** Gestione finitura interna scocca
   Cuc_Escludi_FinInt      "Flag di esclusione colorazione interna scocca"           1 NoSave
   Cuc_Sp_FinInt           "Spessore colore interno scocca"                        0.1 NoSave
   //Simone 11/11/2022
   Cuc_Escludi_FinEst      "Flag di esclusione colorazione esterna scocca"           0 NoSave

   // Rientri
   Cuc_Rie_Top_Basi        "Rientro del fianco delle basi rispetto al fronte top"   50 NoSave
   Cuc_Rie_Fro_PC          "Rientro scasso piano cottura rispetto al fronte top"    63 NoSave
   Cuc_Rie_Fro_LV          "Rientro scasso lavello rispetto al fronte top"          73 NoSave
   Cuc_Rie_Fro_PanVtr      "Rientro pannello rispetto vetro frontale"               3  NoSave

   // Arie
   Cuc_Aria_Fnd_Fia_X      "Aria tra il fondo e il fianco"                          0 NoSave
   Cuc_Aria_Fnd_Fia_Y      "Aria tra fianco e fondo in Y"                           0 NoSave
   Cuc_Aria_Cop_Fia_Y      "Aria tra fianco e coperchio in Y"                       0 NoSave
   Cuc_Aria_Cop_Fia_X      "Aria tra il cielo e il fianco in X"                     0 NoSave
   Cuc_Aria_Sch_Z          "Aria della schiena in Z"                                0 NoSave
   Cuc_Aria_Ant_X          "Aria fra il frontale e la scocca in X"                  1.5 NoSave
   Cuc_Aria_Ant_Y          "Aria fra il frontale e la scocca in Y"                  1.5 NoSave
   Cuc_Aria_Ant_Z          "Aria fra il frontale e la scocca in Z"                  3 NoSave
   Cuc_Aria_Ant_Ant_X      "Aria tra coppia frontali in X"                          3 NoSave
   Cuc_Aria_Ant_Ant_Y      "Aria tra coppia frontali in Y"                          3 NoSave
   Cuc_Aria_Cas_Y          "Aria fra il frontale e la scocca in Y"                  1.5 NoSave
   Cuc_Aria_Ces_Y          "Aria fra il frontale e la scocca in Y"                  1.5 NoSave

   Cuc_Alt_SchRid          "Altezza schiena ridotta"                                200 NoSave

   Cuc_MagSch_X            "Maggiorazione in larghezza schiene per fresata"          0 NoSave
   Cuc_MagSch_Y            "Maggiorazione in altezza schiene per fresata"            0 NoSave

   //****** - Ripiani - ***************************
   Cuc_Spe_Rip             "Spessore Ripiano"                                       38 NoSave
   Cuc_Spe_RipV            "Spessore Ripiano Vetro"                                  8 NoSave
   Cuc_Spe_RipF            "Spessore Ripiano Fisso"                                 18 NoSave
   Cuc_Spe_RipFe           "Spessore Ripiano Ferro"                                 10 NoSave
   Cuc_Aria_Rip_Fia_X      "Aria tra ripiano e fianco in X"                          0 NoSave
   //Cuc_Aria_RipF_Fia_X     "Aria tra ripiano fisso e fianco in X"                   1.0 NoSave
   Cuc_Aria_RipV_Fia_X     "Aria tra ripiano vetro e fianco in X"                  3.5 NoSave
   Cuc_Aria_RipV_FiaAng_X  "Aria tra ripiano vetro e fianco in X per angoli"         1 NoSave

   //Cuc_Rie_Rip_ZF          "Rientro ripiano in Z dal filo fianco"                   89 NoSave
   //Cuc_Rie_Rip_ZR          "Rientro del ripiano in Z dalla schiena"                  1 NoSave
   Cuc_Rie_Rip_ZF          "Rientro ripiano in Z dal filo fianco"                   90 NoSave
   Cuc_Rie_Rip_ZR          "Rientro del ripiano in Z dalla schiena"                  0 NoSave

   //Pannello dissipazione pc induzione
   Cuc_Rie_PanDiss_Y       "Rientro pannello dissipazione in Y"                     48 NoSave
   Cuc_Rie_PanDiss_ZF      "Rientro pannello dissipazione in Z dal filo fianco"     80 NoSave
   Cuc_Rie_PanDiss_ZR      "Rientro pannello dissipazione in Z dalla schiena"       96 NoSave

   //rob_pec 10/10/2019: mail di raffaele
   //Cuc_Dia_Pie             "Diametro piedini"                                         30 NoSave
   Cuc_Dia_Pie             "Diametro piedini"                                         50 NoSave

   //Rientri componenti
   Cuc_Rie_Fnd_ZR_Lav      "Rientro fondo dal retro fianco lavello"                   29.5 NoSave
   Cuc_Rie_Fnd_ZR          "Rientro fondo dal retro fianco"                            7   NoSave
   Cuc_Rie_FndF_ZR         "Rientro fondo Frigo dal retro fianco"                     29.5 NoSave
   Cuc_Rie_FndP_ZR         "Rientro fondo pensile dal retro fianco"                   19.5 NoSave
   Cuc_Rie_Fnd_ZF          "Rientro fondo dal fronte fianco"                           0   NoSave
   Cuc_Rie_Fnd_Fr_ZF       "Rientro fondo Frigo dal fronte fianco"                    22   NoSave
   Cuc_Rie_Fnd_Fri         "Rientro del fondo frigo in Y rispetto al fianco"         -38.5 NoSave
   Cuc_Rie_Cop_ZR          "Rientro cielo dal retro fianco"                           29.5 NoSave
   Cuc_Rie_CopP_ZR         "Rientro cielo pensile dal retro fianco"                   19.5 NoSave
   Cuc_Rie_Cop_ZF          "Rientro cielo dal fronte fianco"                           0.5 NoSave
   Cuc_Rie_Sch_ZR          "Rientro schienale dal retro"                              60   NoSave
   Cuc_Rie_Sch_YA          "Rientro schienale da  sopra"                              130  NoSave
   Cuc_Rie_SchP_ZR         "Rientro schienale pensili dal retro"                      20   NoSave
   Cuc_Rie_Cat_Sup         "Rientro catena verticale dall'alto"                        0   NoSave
   Cuc_Rie_Cat_Inf         "Rientro catena verticale dal basso"                      125   NoSave
   Cuc_Rie_Cat_ZF          "Rientro catena dal frontale fianco"                        0   NoSave
   Cuc_Rie_Cat_ZR          "Rientro catena dal retro fianco"                           0   NoSave

   Cuc_Rie_Pie_Fia_Lato    "Rientro piedini dal lato del fianco base"                 69    NoSave
   Cuc_Rie_Pie_Fia_Fro     "Rientro piedini dal fronte del fianco base"               63    NoSave
   //rob_pec 10/10/2019: vedi mail di Zorzo e di Raffaele per posizione piedino
   //Cuc_Rie_Pie_Fia_Rtr     "Rientro piedini dal retro del fianco base"                81    NoSave
   Cuc_Rie_Pie_Fia_Rtr     "Rientro piedini dal retro del fianco base"                87    NoSave
   Cuc_Rie_Pie_Fia_Rtr_PC  "Rientro piedini dal retro del fianco base PC"             38.25 NoSave
   Cuc_Rie_Pie_Fia_Fro_PC  "Rientro piedini dal retro del fianco base PC"             85.25 NoSave

   //ZOCCOLO
   Cuc_Alt_Zoc             "Altezza Zoccolo"                                           17 NoSave
   Cuc_Rie_Zoc_F           "Rientro Zoccolo dal frontale della base"                   21 NoSave
   Cuc_Rie_Zoc_L           "Rientro Zoccolo laterale dal fianco"                       18 NoSave
   Cuc_Rie_Zoc_R           "Rientro Zoccolo dal retro del fianco"                       0 NoSave
   Cuc_def_Zoc_sx          "Default per la posa dello Zoccolo lat.sx"                   1 NoSave
   Cuc_def_Zoc_fr          "Default per la posa dello Zoccolo frontale"                 1 NoSave
   Cuc_def_Zoc_dx          "Default per la posa dello Zoccolo lat.dx"                   1 NoSave
   Cuc_Spe_Zoc             "Spessore Zoccolo"                                          12 NoSave
   Cuc_RidZoc90            "Rientro su giunzione 90°"                                   9 NoSave
   Cuc_RidZoc180           "Rientro su giunzione dritta"                                0 NoSave
   Cuc_RidZocAng           "Allungo su angolo"                                        100 NoSave
   Cuc_X_Max_Zoc           "Lunghezza max zoccolo"                                   3700 NoSave

   Cuc_FuoriSquadraBAP     "Tipo fuorisquadra ANTE-SCHIENE "                       "ANTE" NoSave
   Cuc_TipoPannBAP         "Tipo pannello a filo MURO-SCOCCA"                          "" NoSave
   Cuc_BAPAngMax           "Angolo Fuori squadro Massimo"                             100 NoSave
   Cuc_BAPAngMin           "Angolo Fuori squadro minimo"                               80 NoSave
   //questa variabile permette di definire qual'è l'angolo massimo entro il quale
   //l'automatismo di unione dei top esegue sempre Maschio+Femmina
   //oltre questo valore chiesto quale tipo di unione M+F o 45°
   Cuc_AngMaxTMF           "Angolo Massimo per unione TOP"        100 NoSave
   Cuc_BAPMontM_x          "Dimensioni Montante Massimo in X"     200 NoSave
   Cuc_BAPMontm_x          "Dimensioni Montante minimo in X"       50 NoSave
   Cuc_BAPMontM_z          "Dimensioni Montante Massimo in Z"     200 NoSave
   Cuc_BAPMontm_z          "Dimensioni Montante minimo in Z"       50 NoSave
   //Dimensioni di riferimento rispetto cui calcolato FS-ANTE come pensile angolo
   Cuc_BAPRef_X            "Larghezza di riferimento"             610 NoSave
   Cuc_BAPRef_Z            "Profondità di riferimento"            610 NoSave

   Cuc_Spe_BarraIso        "Spessore Barra Isola"                  40 NoSave

   //Luca 08/05/2019 rientro carter
   Cuc_CarterColSosp_Off   "Offset carter colonne sospese" [1,6.5,-1] NoSave

   //Luca 16/12/2019
   Cuc_Rie_Eld_ColSoff     "Rientro eldom colonne soffietto"       88 NoSave
   Cuc_Rie_Rip_ColSoff     "Rientro eldom colonne soffietto"       88 NoSave

   //{ *** Settaggio Default misure Standard per singole strutture ****
   //
   //FINIRE
   Cuc_Def_BaStd_X         "Default X per Base standard"          600 NoSave
   Cuc_Def_BaStd_Y         "Default Y per Base standard"          533 NoSave
   Cuc_Def_BaStd_Z         "Default Z per Base standard"          606 NoSave
   Cuc_Def_PeStd_X         "Default X pensile standard"           600 NoSave
   Cuc_Def_PeStd_Y         "Default Y pensile standard"           720 NoSave
   Cuc_Def_PeStd_Z         "Default Z pensile standard"           330 NoSave
   Cuc_Def_CoStd_Y         "Default Y Colonna standard"           840 NoSave

   //-**** Default Posizione maniglia se non viene trattato da gestionale do delle direttive globali:
   //- X decido una posizione standard per le ante con Cuc_POSM_X_STD = L-laterale C-centrale
   Cuc_POSM_X_STD          "posizione maniglia standardizzata in X"           "L" NoSave
   Cuc_POSM_X_CMP          "posizione maniglia in X per i composti"           "C" NoSave

   //FINITURE STANDARD
   Cuc_FinPie              "Colore piedini di default"       [0,0,0] NoSave
   //} ****************************************************************

   //Luca 23/03/2020 non ci sino le ringhierine
   //Cuc_Alt_ring_Cest       "Altezza inserimento ringhierina cestone" 200 NoSave
   Cuc_Alt_ring_Cest      "Altezza inserimento ringhierina cestone" 99999 NoSave

   // FT 30/01/20 - misure massime barra isola
   Cuc_X_Max_BarIso       "Larghezza massima della barra isola"  2700 NoSave
   Cuc_Y_Max_BarIso       "Altezza massima della barra isola"     917 NoSave

   // FT 10/02/20 - flag visualizzazione giunzioni
   Cuc_GiunzioniShow      "Visualizza Giunzioni"                0  NoSave

   // FT 06/03/2020 - visualizzazione trafile e lavorazioni per fianco di finitura
   Cuc_FFLavorazioniDebug "Debug Lavorazioni Fianco di finitura"        0  NoSave
   Cuc_FFLavorazioniShow  "Visualizza Lavorazioni Fianco di finitura"   0  NoSave

   // FT 02/03/20 - Spessore fianco finitura
   Cuc_X_FiaFin_Lam       "Spessore fianco di finitura Laminato"  4 NoSave
   Cuc_X_FiaFin_Vet       "Spessore fianco di finitura vetro"     4 NoSave
   Cuc_X_FiaFin_WW        "Spessore fianco di finitura wildwood"  5 NoSave
   //LZ 02/08/2021
   Cuc_X_FiaFin_HPL       "Spessore fianco di fin. hpl laccato"   4 NoSave

   //LZ 04/05/2022: Air kitchen
   Cuc_Y_AirK_Scatolato   "Air Kitchen - Altezza scatolato"     115 NoSave

   ChiediLivInsCS         "Livello inserimento centro stanza"  0 Menu ( LivInsCS ) NoSave

   //Alberto B. 07/08/20 valori per pensile cucina angolare
   Cuc_Rie_SchPA_ZR       "Rientro schienale pensili angolari dal retro"               16 NoSave
   Cuc_Spe_SchPA          "Spessore schiene pensile angolare"                          19 NoSave
   Cuc_Spe_AntPA          "Spessore Anta pensile angolare"                             20 NoSave

   toll_filoA_VICINE "" 0 NoSave
   toll_filoB_VICINE "" 0 NoSave

   ChiediAddBifacciali    "" 1 NoSave

   //Luca 15/11/2021
   ELD_MnFORNO        "" 0 NoSave
   ELD_MnMICRO        "" 0 NoSave
   ELD_MnFRIGO        "" 0 NoSave
   ELD_MnPIANOCOTTURA "" 0 NoSave
   ELD_MnLAVELLO      "" 0 NoSave
   ELD_MnMISCELATORE  "" 0 NoSave

   GetPesoAntaLvstFromDB_TollMax "" 0 NoSave

   //{ CUCINA - MODULI GLASS
   //Dimensioni
   Cuc_ModuloGlass_Struttura_Sp   "Cucina - Modulo Glass - Struttura in vetro, spessore"         8       NoSave
   Cuc_ModuloGlass_Coperchio_Sp   "Cucina - Modulo Glass - Coperchio in vetro, spessore"         10      NoSave
   Cuc_ModuloGlass_Pellicola_Sp   "Cucina - Modulo Glass - Pellicola, spessore"                  0.1     NoSave

   Cuc_ModuloGlass_Ripiano_Sp     "Cucina - Modulo Glass - Ripiano in vetro, spessore"           8       NoSave

   Cuc_ModuloGlass_Piedini_Sp     "Cucina - Modulo Glass - Piedini, spessore"                    17      NoSave

   //Limiti dimensionali
   Cuc_ModuloGlass_X_Min          "Cucina - Modulo Glass - Larghezza minima"                     368     NoSave
   Cuc_ModuloGlass_X_Max          "Cucina - Modulo Glass - Larghezza massima"                    736     NoSave

   Cuc_ModuloGlass_Y_Min          "Cucina - Modulo Glass - Altezza minima"                       194     NoSave
   Cuc_ModuloGlass_Y_Max          "Cucina - Modulo Glass - Altezza massima"                      930     NoSave

   Cuc_ModuloGlass_Z_Min          "Cucina - Modulo Glass - Profondità minima"                    655     NoSave
   Cuc_ModuloGlass_Z_Max          "Cucina - Modulo Glass - Profondità massima"                   926     NoSave

   //Rientri
   Cuc_ModuloGlass_Struttura_Rie  "Cucina - Modulo Glass - Struttura in vetro, rientro"          2.5     NoSave

   //Snap
   Cuc_ModuloGlass_Pos_Fro_OffZ   "Cucina - Modulo Glass - Posizione, offset z frontale"         1       NoSave
   Cuc_ModuloGlass_Pos_Rt_OffZ    "Cucina - Modulo Glass - Posizione, offset z retro"            25      NoSave

   //Giunzioni, nella procedura "G368_AddValoriGiunzione" viene rimpiazzata la lettera Y con la X
   Cuc_ModuloGlass_Giu_Fro_OffX   "Cucina - Modulo Glass - Giunzione, offset x frontale"         89.5    NoSave
   Cuc_ModuloGlass_Giu_Fro_OffY   "Cucina - Modulo Glass - Giunzione, offset y frontale"         92      NoSave
   Cuc_ModuloGlass_Giu_Fro_OffZ   "Cucina - Modulo Glass - Giunzione, offset z frontale"         184     NoSave

   Cuc_ModuloGlass_Giu_Rt_OffX    "Cucina - Modulo Glass - Giunzione, offset x retro"            89.5    NoSave
   Cuc_ModuloGlass_Giu_Rt_OffY    "Cucina - Modulo Glass - Giunzione, offset y retro"            92      NoSave
   Cuc_ModuloGlass_Giu_Rt_OffZ    "Cucina - Modulo Glass - Giunzione, offset z retro"            184     NoSave

   //Finitura
   Cuc_ModuloGlass_Struttura_FRiv "Cucina - Modulo Glass - Struttura in vetro, f rivestimento"   "0.8"   NoSave
   //} CUCINA - MODULI GLASS

   //{ CUCINA - ANTE STRIPES
   Cuc_Stripes_Aria_Y             "Cucine - Anta stripes - Aria in altezza per ogni fascia"       1.5    NoSave
   //} CUCINA - ANTE STRIPES

   //Revisione nastro now: passo da nastro Alluminio a nastro Pomice tutti gli elementi now (ante, bifacciali, fianchi, fondi armadio)
   ///         ATTENZIONE: la revisione utilizza la data qui specificata, se esiste la variabile globale "$BDM_REV_Now_Nastro",
   ///                     viene utilizzato questa come valore revisione
   BDM_REV_Now_Nastro_1                    "Revisione Nastro Now"                                 221204                                                                    NoSave

   Set_Rev_NowNastro_Gest_C179             "Revisione Nastro Now - Archetipi da testare"          "Anta*;Cuc_Anta*;Cuc_Fro*;Cuc_Zoc*;Cuc_Cestone;Fianco*"                   NoSave
   Set_Rev_NowNastro_Gest_C179_Fix         "Revisione Nastro Now - Archetipi sempre revisionati"  "PannelloBifaccialeMadiaNow"                                              NoSave
   Set_Rev_NowNastro_Gest_C179_Pan_Test    "Revisione Nastro Now - Nomi pannelli per test"        "Pannello*"                                                               NoSave
   Set_Rev_NowNastro_Gest_C179_Fin_Test    "Revisione Nastro Now - Nomi finiture per test"        "Vetro*;Fascia_Frontale_Stripes;FondoAngSagWTL_Arm20;HLP*;!VetroVetrina*" NoSave

   //{ VARIABILI -- REVISIONI -- CUCINA
   //variabili revisioni
   BDM_REV_Cuc_ColLvstForno_1     "Revisione colonna lavastoviglie/forno"           210413 NoSave

   //LZ 03/03/2021: revisione tecnica ColLvst2Forno
   BDM_REV_Cuc_ColLvst2Forno_1    "Revisione colonna lavastoviglie 60/forno"        210302 NoSave

   BDM_REV_Cuc_GestFusti_1        "Revisione fusti configurati"                     200101 NoSave
   BDM_REV_Cuc_GestFusti          "Attiva gestioni fusti cucina"                         1 NoSave

   //LZ 01/06/2021: revisione base frigo, gestisco la staffa sul top
   BDM_REV_Cuc_BaseFrigo_1        "Revisione base frigo"                            210608 NoSave

   //LZ 26/03/2021
   //Integro gestione rev1 maniglia, permetto di avere singoli ordini con nuovo allineamento
   //Luca 25/05/2020 rif. mail Luca Zorzo del 20/05/2020
   //'Gestione revisione ante con maniglia Flapp'
   //BDM_REV_Cuc_ManFLAPP       "Allineamento man FLAPP"                     0 NoSave
   BDM_REV_Cuc_ManFLAPP           "Allineamento man FLAPP"                               0

   //Luca 25/09/2020 verifico la data di inserimento del padre.
   //Attivo la variabile locale e la relativa categoria Gemo
   BDM_REV_Cuc_ManFLAPP_1         "Revisione maniglia FLAPP"                        210326 NoSave

   BDM_REV_Cuc_EldomTop_1         "Revisione per eldom saldati"                     200610 NoSave

   //Luca 26/06/2020 revisione foratura coperchi/fondi/fianchi
   BDM_REV_Cuc_LavColonne_1       "Revisione lav.colonne"                           290625 NoSave

   //Luca 17/07/2020
   BDM_REV_Cuc_LavelloST_1        "Revisione lavello sottotop"                      200716 NoSave

   //LZ 20/04/2022: cucine, revisione ferramenta brunita e PK2 per elementi orizzontali interni a colonne
   //Gestione per data, disponibile revisione per ordine se settata $BDM_REV_Cuc_PK2_FBru
   BDM_REV_Cuc_PK2_FBru_1         "Rev PK2 e ferramenta brunita, data"              220612 NoSave

   //Luca 08/09/2020 deve rimanere salvata sul rit
   //impostarla ad 1 per tutti gli ordini il cui fine ordine viene eseguito dopo il 27 luglio 2020.
   BDM_REV_Cuc_FrontBasi_1        "Revisione pannello frontale basi cucina"              0

   //Luca 04/11/2020
   //nuove regole per piano cottura (relativi scassi su fianchi, pannelli di dissipazione)
   BDM_REV_Cuc_PCottura_1         "Revisione piani cottura"                         201111 NoSave

   //LZ 23/04/2021
   //Supporti vetro cucina (compresa penisola), distinta grafica
   BDM_REV_Cuc_SuppVtr_1          "Revisione supporti vetro cucina"                 210429 NoSave

   //Luca 05/11/2020 gli ordini passati a Gemo dopo la data indicata avranno le trafile configurata 201108
   BDM_REV_Cuc_TrafileFF          "Attivazione configurazione trafile"              201108 NoSave

   //Luca 11/11/2020 mantis 23744: basi lavello: modifica default sponda per cestone H552
   //Attualmente, se il frontale del cestone ha H > 400 prende la sponda HSponde = 241;
   //gli elementi inseriti dopo la data della revisione dovranno anche tenere conto se
   // il cestone è parte di una base lavello o nella base è presente un lavello,
   //  in tal caso sarà necessario passare a HSponde = 177.
   BDM_REV_Cuc_SpondeCestLav      ""                                                201111 NoSave

   //LZ 25/08/2021: codice per i fusti dei pensili
   BDM_REV_Cuc_Pen_GestFusti      "Revisione fusti configurati pensili"                  1 NoSave

   //LZ 14/09/2021: gestione frontali melaminico.
   //Permetto sia gestione puntuale che per data (è sufficiente una delle due condizioni per attivare la rev)
   BDM_REV_Cuc_Fro_Mel            "Frontali melaminici cucina - 0/1"                     0
   BDM_REV_Cuc_Fro_Mel_1          "Frontali melaminici cucina - data"               290914 NoSave

   //LZ 23/11/2021: revisione pensile scolapiatti:
   //             - filo inferiore fianco passa da 45° a dritto (interessa fianchi e lamiere di copertura)
   //             - aggiunto telaietto inferiore
   //             - nuove altezze e divisorio intermedio
   //  ATTENZIONE: la revisione si abilita per data (qui specificata)
   //    OPPURE SE revisione melaminiche attiva e frontali in laccato/nobilitato
   BDM_REV_Cuc_Pen_Scp_1          "Revisione pensile scolapiatti"                   220914 NoSave
   //Riservata, vedi dove viene utilizzata
   //BDM_REV_Cuc_Pen_Scp_2          "Revisione pensile scolapiatti"                   220914 NoSave

   //LZ 23/11/2021: revisione pensili cappa:
   //             - boh
   //  ATTENZIONE: la revisione si abilita per data (qui specificata)
   //    OPPURE SE revisione melaminiche attiva e frontali in laccato/nobilitato
   //Simone 12/07/2023 - Abilitiamo tanto non fa nulla
   BDM_REV_Cuc_Pen_Cpp_1          "Revisione pensili cappa"                         290712 NoSave

   //LZ 29/10/2021: passaggio led da 12 a 24V
   BDM_REV_Cuc_Led_1              "Led cucina, passaggio a 24V"                     211028 NoSave

   //LZ 18/11/2021: revisione strutturale base lavatrice
   BDM_REV_Cuc_BLavatrice_1       "Revisione base lavatrice"                        211128 NoSave

   //LZ 14/12/2021: revisione posizione pannello di dissipazione PC induzione
   BDM_REV_Cuc_PanDiss_1          "Revisione pannello di dissipazione"              211216 NoSave

   BDM_REV_Cuc_BarraInfLvtrSoff_1 "Revisione barra inferiore lavatrice/soffietto"   221030 NoSave

   BDM_REV_Cuc_AntaBifacciale_1   "Revisione anta bifacciale cucina"                240327 NoSave
   //} VARIABILI -- REVISIONI -- CUCINA
}

Altimetri
{
   //Cuc_Altim_Fro "Altimetro per frontali" rel
   //{
   //   Livello    0    186    368    554    740    926
   //   Scritta    0    186    368    554    740    926
   //}
}

Misure
{
   LivInsCS "Livello inserimento centro stanza"
   {
      Nominali 0  184  368  552  736  920
      //Luca 31/08/2020 riporto modifiche di LAGO
      //Reali    0  201  385  569  753  937
      //Reali    17 201  385  569  753  937
      Reali    0 201  385  569  753  937
   }

//Basi
   LargBBSS "Larghezza Basi"
   {
      Nominali 184  368  552  600  640  736  900  920  1104
      Reali    184  368  552  600  640  736  900  920  1104
   }

   AltBBSS "Altezza Basi"
   {
      Nominali 184   368   552  736  873  920
      Reali    184   368   552  736  873  920
   }

   ProfBBSS "Profondita' Basi"
   {
      Nominali 382   496   606   676   776   876
      Reali    382   496   606   676   776   876
   }

   ProfBBSSC "Profondita' Basi Cantinetta"
   {
      Nominali 606   676   776
      Reali    606   676   776
   }

   AltBFSS "Altezza Basi Forno"
   {
      Nominali 552   736
      Reali    552   736
   }

   ProfBFSS "Profondita' Basi Forno"
   {
      Nominali 606   676   776   876
      Reali    606   676   776   876
   }

   LargBASS "Larghezza Basi Angolo"
   {
      Nominali 920 1104
      Reali    920 1104
   }

   LargBASM "Larghezza complessiva Basi Angolo"
   {
      Nominali 1128 1198 1238 1306 1308 1376
      Reali    1128 1198 1238 1306 1308 1376
   }

   Cuc_AperAnt "Apertura Ante"  < OnlyDesc;NoDiz >
   {
      Nominali "Battente"  "Ribalta"  "Vasistas"
      Reali        0           1          2
   }

   //{ Basi lavastoviglie
   LargBLVS "Larghezza Basi Lavastoviglie"
   {
      Nominali 490  640
      Reali    490  640
   }

   AltBLVS "Altezza Basi Lavastoviglie"
   {
      Nominali 873 920
      Reali    873 920
   }

   PosBLVS "Apertura Ante"  < OnlyDesc;NoDiz >
   {
      Nominali "Terra"  "Sospesa"
      Reali        0        2
   }

   ApeBLVS "Apertura Ante"  < OnlyDesc;NoDiz >
   {
      Nominali "Maniglia"  "ServoDrive"
      Reali        0            1
   }
   //} Basi lavastoviglie

   //Colonne
   LargCCSS "Larghezza Colonne" < OnlyDesc;NoDiz >
   {
      Nominali 300 450 500 600 710 723 900 1000 1200
      Reali    300 450 500 600 710 723 900 1000 1200
   }

   LargCLVS "Larghezza Colonne" < OnlyDesc;NoDiz >
   {
      Nominali 600 640 723
      Reali    600 640 723
   }

   AltCCSS "Altezza Colonne Standard" < showvalue=1 >
   {
      //Nominali 1942  2126  2270  2470  2650
      //Reali    1942  2126  2270  2470  2650
      //
      //2413  2633
      Nominali 1942  2126  2253  2413  2633
      Reali    1942  2126  2253  2413  2633
   }

   ProfCCSS "Profondita' Fianchi Colonne" < OnlyDesc >
   {
      Nominali 380  496  604  674
      Reali    380  496  604  674
   }

   ProfCFal  "Profondita' Colonne" < OnlyDesc >
   {
      Nominali 406  520  630  700
      Reali    406  520  630  700
   }

   LargCFSS "Larghezza Colonne Frigo" < OnlyDesc >
   {
      Nominali 600 750
      Reali    600 750
   }

   TpColFr  "Tipologia Colonna Frigo"   < OnlyDesc;NoDiz >
   {
      Nominali "1 anta"  "2 ante"  "3 ante"  "compatto"
      Reali       1         2         3          4
   }

   TpColFn  "Tipologia vano Eldom"   < OnlyDesc;NoDiz >
   {
      Nominali "Standard (h.60)"  "Compatto (h.46)"   "Micro (h.39)"
      Reali          0                  1                    2
   }

   LargCFRN "Larghezza Colonne Forno"
   {
      Nominali 600 723 900
      Reali    600 723 900
   }

   PosCol "Posizione Colonne"  < OnlyDesc;NoDiz >
   {
      Nominali "Terra"  "Sospesa"
      Reali        0        2
   }

   LarSUPP "Larghezza supporti vetro"  < OnlyDesc;NoDiz >
   {
      Nominali  290  385  400  450  460  500  540  570  600  620  640  700  736  800  900  920  1104
      Reali     290  385  400  450  460  500  540  570  600  620  640  700  736  800  900  920  1104
   }

   AltSUPP "Altezza supporti vetro"  < OnlyDesc;NoDiz >
   {
      Nominali  92  184  368  552  736  900  920  957
      Reali     92  184  368  552  736  900  920  957
   }

   TpFrCl "Tipologia Frontale"  < OnlyDesc;NoDiz >
   {
      Nominali "368" "NOW INTERA" "NOW ASIMMETRICA" "NOW VARIA"   "NOW VETRINETTA"
      Reali      1        2             3               4             6
   }

   TpEsCl "Tipologia Estraibile"  < OnlyDesc;NoDiz >
   {
      Nominali "NESSUNO" "KESSEBOHMER DISPENSA" "KESSEBOHMER SOLO" "KESSEBOHMER SIDE" "KESSEBOHMER TANDEM" "KESSEBOHMER JUNIOR III"
      Reali      -1                1                   2                   3                   4                       5
   }

   AltAC "Altezza Angolo cieco"
   {
      Nominali 165 349 533 717 854 901
      Reali    165 349 533 717 854 901
   }

   LargAC "Dimensione angolo cieco"
   {
      //Nominali 412 526 636 706
      //Reali    412 526 636 706
      Nominali 414 528 638 708
      Reali    414 528 638 708
   }

   AltBRIS "Altezza Barra Isola" < OnlyDesc >
   {
      Nominali 165 349 533 717 901
      Reali    165 349 533 717 901
   }

   //Luca 11/02/2019 angolo isola
   LargAI "Dimensione angolo cieco" < OnlyDesc >
   {
      //Nominali 409   523   633   703
      //Reali    409   523   633   703
      Nominali 414 434 528 548 638 658 708 728
      Reali    414 434 528 548 638 658 708 728
   }

   //Luca 12/02/2019 eldom
   MnInsEld "Inserisci Eldom" < OnlyDesc >
   {
      Nominali  "Eldom ESCLUSO/DEL CLIENTE"  "Eldom LAGO"
      Reali               0                       1
   }

   TpEldom "Tipologia Eldom"  < OnlyDesc >
   {
      Nominali "Forno"  "Microonde"
      //"Scaldavivande"   "Cantinetta"
      Reali       0          1
      //2                 3
   }

   //LZ 03/03/2021: revisione tecnica colonna lvst/forno
   AllLvstFrn "Allineamento colonna Lvst 60+Forno" < OnlyDesc >
   {
      Nominali      "Base H920"   "Base H873"
      Reali              0             1
   }

   //Luca 14/02/2019
   TpBifacc "Tipologia Bifacciale"  < OnlyDesc;NoDiz >
   {
      Nominali "368 BASE" "368 COLONNA" "NOW INTERA" "NOW ASIMMETRICA" "NOW VARIA"
      Reali       0             1        2             3               4
   }

   ZnCesCas "Profondità nominale cassetti cestone" < OnlyDesc >
   {
      Nominali 406 520 630 700
      Reali    406 520 630 700
   }

   ZCesInt "Profondità cestone interno colonne" < OnlyDesc >
   {
      Nominali 400 500
      Reali    400 500
   }

   XnPPos "Larghezza nominale portaposate" < OnlyDesc >
   {
      Nominali 368  552  736  920  1104
      Reali    368  552  736  920  1104
   }

   PosLavB "Posizione Lavorazione su Base"  <OnlyDesc>
   {
      Nominali  "Filo SX Base"  "Centrale"  "Filo DX Base"
      Reali          -1             0          1
   }

   PosLavT "Posizione Lavorazione su Top"   <OnlyDesc>
   {
      Nominali  "Filo SX Top"  "Centrale"  "Filo DX Top"
      Reali          -1               0          1
   }

   XLedPe0 "Larghezza LED pensili" < OnlyDesc >
   {
      Nominali  372
      Reali     372
   }

   XLedPe1 "Larghezza LED pensili" < OnlyDesc >
   {
      Nominali  372  500
      Reali     372  500
   }

   XLedPe2 "Larghezza LED pensili" < OnlyDesc >
   {
      Nominali  372  500  760
      Reali     372  500  760
   }

   XLedPe3 "Larghezza LED pensili" < OnlyDesc >
   {
      Nominali  372  500  760  1000
      Reali     372  500  760  1000
   }

   //Alberto B. 10/08/20
   XPenAng "(Larghezza X) Larghezza DX pensile angolare" < OnlyDesc >
   {
      Nominali  638  708
      Reali     638  708
   }

   ZPenAng "(Profondità Z) Larghezza SX pensile angolare" < OnlyDesc >
   {
      Nominali  638  708
      Reali     638  708
   }

   YPenAng "Altezza pensile angolare" < OnlyDesc >
   {
      Nominali  368  552
      Reali     368  552
   }

   TpEdlFM "Tipologia Forno/Micro" < OnlyDesc >
   {
      Nominali "FORNO 1"  "FORNO 2" "FORNO 3"   "FORNO 4"  "MICRO 1"   "MICRO 2"   "CANTINETTA 1"   "CANTINETTA 2"
      Reali       1          2          3           4         51           52           61                62
      Image     %path_bdm%\Bmp\Menu\Eldom\FORNO001.png   %path_bdm%\Bmp\Menu\Eldom\FORNO002.png %path_bdm%\Bmp\Menu\Eldom\FORNO003.png  %path_bdm%\Bmp\Menu\Eldom\FORNO004.png  %path_bdm%\Bmp\Menu\Eldom\FORMICRO001.png %path_bdm%\Bmp\Menu\Eldom\FORMICRO002.png %path_bdm%\Bmp\Menu\Eldom\CANTINA001.png %path_bdm%\Bmp\Menu\Eldom\CANTINA002.png
   }

   //{ MENU gestiti dinamicamente al primo utilizzo
   ELD_MnFORNO ""
   {
      Nominali "1"
      Reali       1
   }

   ELD_MnMICRO ""
   {
      Nominali "1"
      Reali       1
   }

   ELD_MnFRIGO ""
   {
      Nominali "1"
      Reali       1
   }

   ELD_MnPIANOCOTTURA ""
   {
      Nominali "1"
      Reali       1
   }

   ELD_MnLAVELLO ""
   {
      Nominali "1"
      Reali       1
   }

   ELD_MnMISCELATORE ""
   {
      Nominali "1"
      Reali       1
   }
   //} MENU gestiti dinamicamente al primo utilizzo

   //{ CUCINA - MODULI GLASS
   Cuc_ModuloGlass_X "Cucina - Modulo Glass - Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 368  450  552  600  736
      Reali    368  450  552  600  736
   }

   Cuc_ModuloGlass_Y "Cucina - Modulo Glass - Altezza" < OnlyDesc;NoDiz >
   {
      Nominali 194  378  562  746  883  930
      Reali    194  378  562  746  883  930
   }

   Cuc_ModuloGlass_Z "Cucina - Modulo Glass - Profondità" < OnlyDesc;NoDiz >
   {
      Nominali 656  659  726  729  826  829  926
      Reali    656  659  726  729  826  829  926
   }
   //} CUCINA - MODULI GLASS
}

//{ ELEMENTI SPECIALI
Elemento Cuc_GruppoGiunzioni
{
   Descrizione = "Basi cucina - Gruppo lavorazione giunzioni"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      FLAG_FianchiAlti  ""                0 Implicit

      HIDE              ""                3
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Debug giunzioni
      //G368_VediDebug = 3
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

  #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368SX
   {
      GOSUB G368_PosaGrLavorazione

      @X = $Cuc_Spe_Fia
      @Y = Y + $Cuc_RidY_Sco*FLAG_FianchiAlti

      @Lato = "SX"
   }

   Posiziona G368_GruppoLavorazione G368DX
   {
      GOSUB G368_PosaGrLavorazione

      @X = $Cuc_Spe_Fia
      @Y = Y + $Cuc_RidY_Sco*FLAG_FianchiAlti

      @base_0.x = base_3.x - @X

      @Lato = "DX"
   }

   Posiziona G368_GruppoLavorazione G368UP
   {
      GOSUB G368_PosaGrLavorazione

      @Y = $Cuc_RidY_Sco
      @base_0.y = alto_0.y

      @Lato = "UP"
   }
  #endif
}

//} ELEMENTI SPECIALI

//{ SCOCCHE BASI
Elemento ScoccaT_BaseStandard
{
   Descrizione = "Base standard"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo;OnChangedVar

   Variabili
   {
      VAR_Revisione_PanDiss    ""                                            0     SaveAlways

      VAR_Aggancio             "--> CAMBIA CONNESSIONE <--"                  0     Boolean      ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"    1

      X                        "Larghezza base"                              600   Menu         (   LargBBSS   )   Utente   (   )
      Xt                       ""                                            600

      Y                        "Altezza"                                     736   Menu         (   AltBBSS    )   Utente   (   )
      Yt                       "(Altezza con Piedini)"                       840   ShowAlways

      Z                        "Profondita' fianco"                          606   Menu         (   ProfBBSS   )   Utente   (   )
      Zt                       "(Profondita')"                               606   ShowAlways

      //----------------------------------------------
      //variabili per gestione fusion
      //Fusion SX/DX
      //- 1 attiva HPL sulla base --> ingombro X + 4
      //- 2 riduzione per fusion --> ingombro = X
      //- 3 attiva HPL + riduzione per fusion --> ingombro == X + 4
      //- 4 solo fascia finitura sul retro (caso disallieneamento retro)--> ingombro = X
      FSN_flag_SX              "Fusion SX"                                   0     SaveAlways   //Utente ( )
      FSN_prof_SX              ""                                            0
      FSN_pHPL_SX              ""                                            0
      FSN_ridx_SX              ""                                            4

      FSN_alte_SX              ""                                            0
      FSN_offy_SX              ""                                            0

      FSN_flag_DX              "Fusion DX"                                   0     SaveAlways   // Utente ( )
      FSN_prof_DX              ""                                            0
      FSN_pHPL_DX              ""                                            0
      FSN_ridx_DX              ""                                            4

      FSN_alte_DX              ""                                            0
      FSN_offy_DX              ""                                            0
      //----------------------------------------------

      Cuc_Alt_Zoc              ""                                            17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca               "ininfluente altezza posizione"               2

      TipoRipiano              "Tipo ripiano"                                1

      Verso                    "Verso della scocca"                          -1    Menu         (   DXSX       )
      No_Pie                   ""                                            0

      VAR_Vuoto                "Solo Ingombro?"                              0
      //Menu ( bool )

      VAR_Lavello              "Base Lavello"                                0     Menu         (   SiNo       )
      ConLavello               ""                                            0

      //TODO: sviluppare base dedicata
      VAR_CappaIntegrata       ""                                            0

      ConCielo                 "Con Cielo/Coperchio?"                        0     Menu         (   bool       )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale        "Materiale Frontale"                          ""
      VAR_Melaminico           ""                                            0     SaveAlways

      VAR_CatR_OV              "catena retro: 0=orizzontale 1= verticale"    0     Boolean
      VAR_CatF_OV              "catena fronte: 0=orizzontale 1= verticale"   0     Boolean

      //prevedo inserimento di barra per elementi a sbalzo
      VAR_BarraSost1           "Barra Sostegno elemento sbalzo"              0
      VAR_BarraSost2           "Barra Sostegno elemento sbalzo"              0

      VAR_LavPC_FiaSx          "Lavorazione PianoCottura Fianco SX"          0     Boolean
      VAR_LavPC_FiaDx          "Lavorazione PianoCottura Fianco DX"          0     Boolean

      VAR_PassaC_FiaSx         "Lavorazione Passacavo Fianco SX"             0     SaveAlways
      VAR_PassaC_FiaDx         "Lavorazione Passacavo Fianco DX"             0     SaveAlways
      VAR_PassaC_OffY          "Altezza passacavi"                           0     Utente       (   )          SaveAlways
      VAR_PassaC_OffZ          ""                                            0     SaveAlways

      VAR_PanDivInd            "Presenza ripiano di dissipazione"            0     Menu         (   SiNo       )

      // FT 29/01/2020 - per debug
      VAR_vedi_ingombro        ""                                            0

      PortaBombola             "predispongo per bombola del gas?"            0
      //Menu ( bool )
      StrPerGola               "predisposizione per gola"                    ""
      //TabBmp ( "cuc\tab\Cuc_StrGola.TXT" ) Implicit

      idx_fusto                ""                                            -1

      idx_cnear_sx             ""                                            -1
      idx_cnear_dx             ""                                            -1
      idx_cnear_up             ""                                            -1
      idx_cnear_dw             ""                                            -1

      idx_near_ang_rsx         ""                                            -1
      idx_near_ang_rdx         ""                                            -1

      idx_near_snack           ""                                            -1

      COD_EREDITA              ""                                            "PRE;POST;C011_PRE"
      CMP2_AZIONI              ""                                            "S"

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

      M4_VAR                   ""                                            "VAR_Aggancio;X;Y;Yt;Z;Zr"

      FillerM2G                " "                                           ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_PanDiss","VAR_Revisione_PanDiss")

      if( ACTION() == 0)
      {
         HIDE_ON_EDIT(ATTUALE(),"Verso;ConCielo;VAR_Cat*;VAR_Lavello",$ATTIVA_DLL)
      }

      if( ACTION() == 0 & COMPONENDO() == 0)
      {
         if( VAR_Lavello<=0 ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_Lavello",0) }
      }

      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni

      Fusto_Standard_Archetipo = "FustoBaseStandard"
      Fusto_Lavello_Archetipo  = "FustoBaseLavello"
      if( $PLIKO_DisabilitaGrafica > 0)
      {
         Fusto_Standard_Archetipo = "FustoFittizio"
         Fusto_Lavello_Archetipo  = "FustoFittizio"
      }
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB FSN_Def_X_Xt

      GOSUB punti_completi
      GOSUB DefVanoBasi

      if( FSN_flag_SX==1 | FSN_flag_SX==3 )
      {
         vano_0_0.x = vano_0_0.x + FSN_ridx_SX
      }

      GOSUB DefPuntiTop

      //per FUSION
      punto_dx_top.x = Xt
      punto_dx_top_fro.x = Xt

      // FT 29/01/2020
      // dichiaro il punto centrale che poi utilizzerò
      // per il controllo della barra isola
      pnt_base_cx = [Xt / 2, 0, 0]

      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 15/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      GOSUB OnQueryBdmLocal_Basi_Cuc

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB CambiaPuntoConnessione

      GOSUB CtrlBasiFusion

      GOSUB CtrlPosizioneRipiani

      GOSUB CtrlPianoCottura
      //GOSUB CtrlPannelloDivisorioInduzione

      GOSUB CtrlPianoCottura_Basi240

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

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

      //if( $ChangedVar=="FSN_flag_SX" )
      //{
      //   if( FSN_flag_SX==1 ) { X = X - FSN_ridx_SX }
      //   if( FSN_flag_SX==0 ) { X = X + FSN_ridx_SX }
      //
      //   COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(X)))
      //}
      //if( $ChangedVar=="FSN_flag_DX" )
      //{
      //   if( FSN_flag_DX==1 ) { X = X - FSN_ridx_SX }
      //   if( FSN_flag_DX==0 ) { X = X + FSN_ridx_SX }
      //
      //   COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(X)))
      //}

      if( $ChangedVar=="X" )
      {
         ricalcola_x_fusion_utente = 1
         GOSUB Cuc_Ctrl_PresenzaPortaRifiuti
      }
   }

   Gestionale
   {
      GOSUB GestComune
      //GOSUB CucP_SetVarGest
      //GOSUB Gest_idx_GFin

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      //Simone 15/11/2022
      GOSUB Set_Gest_C008

      //Luca 06/04/2022
      if( UN_PADRE("ScoccaT_Base_AirKitchen") )
      {
         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7
         HIDE = 3

         FLAG_RADICE = $NO_RAD
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura Offset
   {
      GOSUB Cuc_Offset_ScoccaT
   }

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault

      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
      //GOSUB CucP_Cancella
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini

      if( FSN_flag_SX==1
        | FSN_flag_SX==3 ) { @base_0.x = @base_0.x + FSN_ridx_SX }
   }

   Posiziona %Fusto_Standard_Archetipo% fbs
   {
      @escluso = SE_NUM( VAR_Lavello <= 0, 0, 1)
      if( @escluso == 0) { idx_fusto = ATTUALE() }

      GOSUB Cuc_PosaFustoStd

      if( FSN_flag_SX==1
        | FSN_flag_SX==3 ) { @base_0.x = @base_0.x + FSN_ridx_SX }
   }

   Posiziona %Fusto_Lavello_Archetipo% fbsl
   {
      @escluso = SE_NUM( VAR_Lavello > 0, 0, 1)
      if( @escluso == 0) { idx_fusto = ATTUALE() }

      GOSUB Cuc_PosaFustoStd

      if( FSN_flag_SX==1
        | FSN_flag_SX==3 ) { @base_0.x = @base_0.x + FSN_ridx_SX }
   }

   Posiziona ElementoFusion hlpsx
   {
      @escluso = 1
      if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { @escluso = 0 }
      if( FSN_flag_SX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco

      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_SX
      @Z = FSN_pHPL_SX

      @X  = FSN_ridx_SX
      @Y  = FSN_alte_SX
      @Zt = FSN_prof_SX

      @FSN_SoloFascia = SE_NUM(FSN_flag_SX==4,1,0)

      // FT 09/03/20 - lavorazioni fianchi di finitura
      // Sono il fianchetto DX della base a SX
      @FF_PosizioneSD_Ref = "DX"
      if( VAR_EXIST(idx_att, "wk_ff_sx_##1") == 1 )   { @FF_idx_base_ref = wk_ff_sx_##1 }
      else                                            { @FF_idx_base_ref = -1 }
   }

   Posiziona ElementoFusion hlpdx
   {
      @escluso = 1
      if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { @escluso = 0 }
      if( FSN_flag_DX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt - FSN_ridx_DX
      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_DX
      @X  = FSN_ridx_DX
      @Y  = FSN_alte_DX
      @Zt = FSN_prof_DX
      @Z = FSN_pHPL_DX


      @FSN_SoloFascia = SE_NUM(FSN_flag_DX==4,1,0)

      // FT 09/03/20 - lavorazioni fianchi di finitura
      // Sono il fianchetto SX della base a DX
      @FF_PosizioneSD_Ref = "SX"
      if( VAR_EXIST(idx_att, "wk_ff_dx_##1") == 1 )   { @FF_idx_base_ref = wk_ff_dx_##1 }
      else                                            { @FF_idx_base_ref = -1 }
   }

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   Posiziona Cuc_GruppoGiunzioni giu
   {
      GOSUB Cuc_PosaFustoStd

      if( FSN_flag_SX==1
        | FSN_flag_SX==3 ) { @base_0.x = @base_0.x + FSN_ridx_SX }

      //Per utilizzare lo stesso offset sia per le giunzioni superiori che per le inferiori
      @FLAG_FianchiAlti = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10  +100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      //@Y = Y - 40
      @Y = 60
      @Z = Z - 200
   }

   //Luca 07/06/2019
   //aggiunto per cercare il bifacciale
   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }

   //angolo retro sx
   Posiziona _cont_per_near narsx
   {
      idx_near_ang_rsx = ATTUALE()
      @base_0.x = base_0.x - 25
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 25
      @X = 50
      @Y = Y - 100
      @Z = 50
   }

   //angolo retro dx
   Posiziona _cont_per_near nardx
   {
      idx_near_ang_rdx = ATTUALE()
      @base_0.x = base_0.x + X - 25
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 25
      @X = 50
      @Y = Y - 100
      @Z = 50
   }

   // FT 29/01/2020 - elemento per controllo del centro-base
   // (per facilitare la quotatura e debug nel caso di gestione
   // del gruppo di isole)
   Posiziona _IngombroDirezionale IngDir
   {
      @escluso = 1 - VAR_vedi_ingombro
      GOSUB posa_blocco
   }
}

Elemento ScoccaT_BaseAngPan
{
   Descrizione = "Base angolo pannello"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias Base;a_terra;PerZoccolo;PerGola;AngPannello;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_PanDiss    ""                                            0      SaveAlways

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"    1

      X                        "Larghezza Fusto"                             1104   Menu      (   LargBASS   )   Utente   (   )
      Xt                       "Larghezza complessiva"                       1128   Menu      (   LargBASM   )   Utente   (   )

      Y                        "Altezza fianco"                              736    Menu      (   AltBBSS    )   Utente   (   )
      Yt                       "(Altezza con Piedini)"                       840    ShowAlways

      Z                        "Profondità fianco"                           496    Menu      (   ProfBBSS   )   Utente   (   )
      Zt                       "(Profondita') "                              606
      //sola lettura profondità fianchi + ante
      Zr                       "(Profondita') "                              606    ShowAlways

      //definizione variabili reali elemento
      X_Ingombro               "Larghezza complessiva"                       1020
      Z_Fianco                 "Profondità fianchi"                          496
      //Menu ( ProfBBSS ) Utente ( )
      Z_Pannello               "Profondità Fianco accosto"                   496
      //Menu ( ProfBBSS ) Utente ( )

      //Luca 10/10/2019 21070: Base angolo accessibile: dimensione anta errata
      //X_Anta "Dimensione Vano anta" 602
      X_Anta                   "Dimensione Vano anta"                        600    Utente    (   368-600    )

      X_Pannello               "Dimensione pannello fisso"                   300

      //Menu ( Cuc_VAnta ) Utente ( )
      DistMuro                 "Distanza dal muro laterale"                  100
      //Utente ( ) SaveAlways
      X_Mont                   "Lunghezza montante (sola visualizz.)"        32
      Z_Mont                   "Profondità montante (sola visualizz.)"       32
      NoMont                   "Escludo Montante"                            0
      //Menu ( SiNo )
      PannelloComeAnta         "Pannello di chiusura spessore anta?"         0
      //Menu ( SiNo )
      SpePannAcc               "Spessore pannello accosto"                   0

      X_Mass                   "Larg. Massello basette"                      19
      Z_Mass                   "Prof. Massello basette"                      75

      X_MassEst                "Larg. Massello basette"                      67
      Z_MassEst                "Prof. Massello basette"                      32

      //X_DistAng "Larg. distanziale angolo" 67
      X_DistAng                "Larg. distanziale angolo"                    75
      //Y_DistAng "Alt. distanziale angolo" 67
      Z_DistAng                "Prof. distanziale angolo"                    32
      //Luca 02/12/2019
      Con_DistAng              "Distanzione angolo"                          1      Menu      (   SiNo       )
      Y_DistAng                "Distanziale angolo altezza"                  67
      PosY_DistAng             "Distanziale angolo posizione"                0

      //Luca 26/03/2020
      //'nei casi in cui sono presenti elementi con maniglie (forni, cantinette, ecc) prevedere il tamponamento distanzione'
      //'l'ingombro aumenta di 6,5cm rispetto alla base standard
      Con_DistMan              "Distanziale per elementi con maniglia"       0      Menu      (   SiNo       )   SaveAlways
      X_DistMan                ""                                            65
      Z_DistMan                ""                                            24

      //Luca 21/07/2020
      Con_MeccLeMans           ""                                            0

      Cuc_Alt_Zoc              ""                                            17
      No_Pie                   ""                                            0

      //Luca 24/06/2020
      VAR_Lavello              "Base Lavello"                                0      Menu      (   SiNo       )

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca               "ininfluente altezza posizione"               2

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale        "Materiale Frontale"                          ""
      VAR_Melaminico           ""                                            0      SaveAlways

      ang                      "Angolo"                                      90
      //Utente ( 80-110 )
      ang_prec                 "Angolo pecedente"                            90
      //impostati a zero per forzare 1 rigenera in +
      Verso                    "Verso della scocca"                          -1
      //Menu ( DXSX ) SaveAlways
      Verso_prec               "verso della scocca"                          -1     SaveAlways

      Modifica_Dimensioni      "Modifica Dimensioni"                         0
      //Boolean
      VAR_Vuoto                "Solo Ingombro?"                              0
      //Menu ( bool )
      FuoriSquadraBA           "Tipo di Fuorisquadro"                        "SCHIENE"

      VAR_CatR_OV              "catena retro: 0=orizzontale 1= verticale"    0
      //Boolean
      VAR_CatF_OV              "catena fronte: 0=orizzontale 1= verticale"   0
      //Boolean

      //LZ 14/11 aggiunto scasso anche su base angolo
      VAR_LavPC_FiaSx          "Lavorazione PianoCottura Fianco SX"          0      Boolean
      VAR_LavPC_FiaDx          "Lavorazione PianoCottura Fianco DX"          0      Boolean

      //Luca 04/11/2020
      VAR_PanDivInd            "Presenza ripiano di dissipazione"            0      Menu      (   SiNo       )

      StrPerGola               "predisposizione per gola"                    ""
      //TabBmp ( "cuc\tab\Cuc_StrGola2.TXT" ) Implicit

      idx_sx                   ""                                            -1
      idx_dx                   ""                                            -1

      idx_cnear_sx             ""                                            -1
      idx_cnear_dx             ""                                            -1
      idx_cnear_up             ""                                            -1
      idx_cnear_dw             ""                                            -1

      idx_near_snack           ""                                            -1

      COD_EREDITA              ""                                            "PRE;C011_PRE;C025_PRE;POST"
      CMP2_AZIONI              ""                                            "S"

      //gestione angolo FS
      tipo_ang_muro            ""                                            "S"
      offset_muro              ""                                            0

      TIPO__                   "per M4 definisce il tipo di elemento"        1
      STENDI_AUTO_ANGOLO       ""                                            2

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

      //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt"
      FillerM2G                " "                                           ""     ShowAlways

      FLAG_Debug               ""                                            0      Boolean   NoSave
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
      GOSUB AssegAngoloPannello
      GOSUB salva_orig_ang_pan
      M4_MIS = "Filler*;X;Xt;Y*;Z*;Con_DistMan"

      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_PanDiss","VAR_Revisione_PanDiss")

      M4_GRUPPO__  = MSG(1000)

      if( ACTION() > 0 & ACTION() != 2)
      {
         Con_MeccLeMans = 0
         COMPONENTI2("wk_lemans",ATTUALE(),"Cuc_MeccanismoLeMans")
         if( wk_lemans>0 ) { Con_MeccLeMans = 1 }

         //Luca 21/07/2020 riduzioni in presenza di meccanismo
         if( Con_MeccLeMans == 1)
         {
            if( VAR_EXIST(ATTUALE(),"CR_Y_min")==1
              & VAR_VAL(ATTUALE(),"CR_Y_min")<638 )
            {
               VAR_SET_MENU(ATTUALE(),"Y",STRCAT("(",STR(638),"-",STR(CR_Y_max),")"))
            }

            VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
         }
      }

      if( X != VAR_VAL( idx_att, "X_prec"))
      {
         X_prec = X
         Cucina_Versione_prec = Cucina_Versione

         wk_Xt_min  = X + 24
         wk_Xt_menu = SE_STR( Cucina_Versione > 2, "LargBASM_25", "LargBASM")

         VAR_SET_MENU( ATTUALE(), "Xt", FMT( "{}( {} - {} )", wk_Xt_menu, STR(wk_Xt_min), ""))
      }
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      Cuc_Alt_Zoc = SE_NUM(TipoScocca<2,$Cuc_Alt_Zoc,0)

      GOSUB PosaSuAngolo
      GOSUB punti_completi_ang_pan

      GOSUB DefVanoBaseAng
      GOSUB Off_Muro_Ang

      GOSUB DefPuntiTopAngPan
      GOSUB DefPuntiZoccAngPan
      GOSUB DefPuntiGolaAngPan
      GOSUB DefPuntiStampaAngPan

      //Luca 28/07/2020
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiFFinitura

      GOSUB DefPuntiStendiBifacciale
      GOSUB CucP_PuntiNotevoli
   }

   Orientamenti
   {
      Sinistra base_o0, base_o1, alto_o0, alto_o1
      Destra   base_o3, base_o2, alto_o3, alto_o2
      Alto     alto_o0, alto_o1, alto_o3, alto_o2
      Basso    base_o0, base_o1, base_o2, base_o2
      Fronte   base_o1, base_o2, alto_o1, alto_o2
      Retro    base_o0, alto_o3, alto_o0, base_o3
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall

      //mi serve per sapere se sono passato o meno per questa sezione
      //il primo oggetto in assoluto inserito con 2°click non ci passa
      //COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," ScoccaRiposizionata=",STR(1)))

      if( $query_type==2 )
      {
         $QueryResult__ = 1
         //vano 0 per i frontali
         if( IS_MATCH(NOME($query_p1),"Cuc_Anta*")==1 )
         {
            if( $query_p2!=0 ) {  $QueryResult__ = 0 }
         }
         else
         {
            if( $query_p2==0 ) {  $QueryResult__ = 0 }
         }

         if( NOME($query_p1)=="Cuc_FroFixBasAngolo" )
         {
            $QueryResult__ = 0
            if( $query_p2==2 )  { $QueryResult__ = 1 }
         }
      }
      //GOSUB CucP_OnQueryBdmLocal
   }

   //Procedura PostAction2
   //{
   //   GOSUB PosizioneBasiAngPan
   //}

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB Ctrl_Cuc_DistAngolo

      GOSUB Ctrl_Cuc_DistManiglia

      GOSUB ImpostaVersoPrec
      //GOSUB CtrlAngCassa
      //GOSUB ChiediMultiAngPan

      GOSUB CtrlPosizioneRipiani

      GOSUB CtrlPianoCottura

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli

      GOSUB Set_Xt_AngPan
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post

      GOSUB Set_Gest_C003
      GOSUB Set_Gest_C008
   }

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

      if( $ChangedVar=="Con_DistMan" )
      {
         wk_xt = Xt
         if( Con_DistMan==1 ) { wk_xt  = wk_xt + X_DistMan + 3 }
         else                 { wk_xt  = wk_xt - X_DistMan - 3 }

         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Xt=",STR(wk_xt) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
         COMANDO(STRCAT("RICALCOLA ",STR(idx_att) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
      }
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Procedura Notifica
   {
      if( ACTION()==12 )
      {
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," ang=",STR(ang), " offset_muro=",STR(offset_muro)))
      }
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
      @base_0.z = base_0.z + Z_Fianco -Z

      @Verso = Verso
   }

   Posiziona FustoBaseStandard fbs
   {
      GOSUB Cuc_PosaFustoStd
      @base_0.z = base_0.z + Z_Fianco -Z
      @VAR_CatR_OV = VAR_CatR_OV
      @VAR_CatF_OV = VAR_CatF_OV

      @FLAG_BaseAngolo = 1
      @Verso_BA = Verso

      //aliasposiz = "fbs"
      //GOSUB CucP_Posiziona
   }

   //Luca 20/04/2020
   //{ gestione fusti configurati
   //tutti questi elementi sono stati portati dentro al fusto
   Posiziona Dummy pan
   {
      @escluso = 1
   }
   Posiziona Dummy cator_f
   {
      @escluso = 1
   }
   Posiziona Dummy masbat
   {
      @escluso = 1
   }
   Posiziona Dummy mont
   {
      @escluso = 1
   }
   //Posiziona Cuc_PannelloAngolo pan
   //{
   //   @escluso = VAR_Vuoto
   //   @X = X - X_Anta - X_Mass
   //   @Z = $Cuc_Spe_Fia
   //   @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cat - $Cuc_RidY_Sco
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia
   //   if( Verso==1 )
   //   {
   //      //@base_0 = base_4
   //      //@base_0.x = base_4.x - @X + $Cuc_Spe_Fia
   //      @base_0.x = base_6.x - $Cuc_Spe_Fia - @X
   //   }
   //   //@base_0.y = base_0.y +Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Spe_Fnd
   //   @base_0.z = base_0.z + Z - $Cuc_Spe_Fia
   //
   //   @ang = ang
   //
   //   //aliasposiz = "pannang"
   //   //GOSUB CucP_Posiziona
   //
   //   @Y = 100
   //}
   //
   //Posiziona Cuc_CatOriz cator_f
   //{
   //   @escluso = VAR_Vuoto
   //   @X = X - X_Anta
   //   @Z = 45
   //   @Y = 19
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia
   //   if( Verso==1 )
   //   {
   //      @base_0.x = base_6.x - $Cuc_Spe_Fia - @X
   //   }
   //   //@base_0.y = base_0.y +Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + Y - $Cuc_RidY_Sco - @Y - 1
   //   @base_0.z = base_0.z + Z - Z_Mass
   //
   //   @ang = ang
   //   @CatSupAng = 1
   //
   //   @Y = 100
   //}
   //
   //Posiziona Cuc_MasselloAngolo masbat
   //{
   //   @escluso = VAR_Vuoto
   //   @X = X_Mass
   //   @Z = Z_Mass
   //   @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cat - $Cuc_RidY_Sco
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass)
   //   if( Verso==1 )
   //   {
   //      @base_0.x = base_6.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X
   //   }
   //   //@base_0.y = base_0.y +Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Spe_Fnd
   //   @base_0.z = base_0.z + Z - Z_Mass
   //
   //   @ang = ang
   //   //aliasposiz = "pannang"
   //   //GOSUB CucP_Posiziona
   //
   //   @Y = 100
   //}
   //
   //
   //Posiziona Cuc_MontanteAng mont
   //{
   //   //@escluso = VAR_Vuoto
   //   @escluso = 1 - Con_DistAng
   //
   //   @X = X_DistAng
   //   @Y = Y_DistAng
   //   @Z = Z_DistAng
   //
   //   @Verso = Verso
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) - (X_DistAng-3)
   //   if( Verso==1 )
   //   {
   //      @base_0.x = base_6.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - 3
   //   }
   //
   //   if( Con_DistMan==1 )
   //   {
   //
   //      if( Verso==1 ) { @base_0.x = @base_0.x + X_DistMan + 2*$Cuc_Aria_Ant_X }
   //      else           { @base_0.x = @base_0.x - X_DistMan - 2*$Cuc_Aria_Ant_X }
   //   }
   //
   //   //@base_0.y = base_0.y + Y - $Cuc_RidY_Sco - Y_DistAng
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + PosY_DistAng
   //   @base_0.z = base_0.z + Z
   //
   //   @Y = 100
   //}
   //} gestione fusti configurati

   Posiziona Cuc_DistanzialeBaseAng dist
   {
      @escluso = 1 - Con_DistMan

      @X = X_DistMan
      //@Y = Y - 2*$Cuc_Aria_Ant_Y
      @Y = Y_DistAng - 2*$Cuc_Aria_Ant_Y

      //LZ 11/02/2022: spessori gestiti nel distanziale
      //@Z = Z_DistMan

      @Verso = Verso

      @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) - X_DistMan - $Cuc_Aria_Ant_X

      if( Verso==1 )
      {
         @base_0.x = base_6.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) + $Cuc_Aria_Ant_X
      }

      @base_0.y = base_0.y + Cuc_Alt_Zoc + PosY_DistAng + $Cuc_Aria_Ant_Y

      //@base_0.y = base_0.y + Y - $Cuc_RidY_Sco - Y_DistAng
      //@base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z
   }

   Posiziona _cont_per_near_2 nsx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 5
      @base_0.z = base_0.z + 10
      @X = 1
      @Y = Y - 10
      @Z = Z - 20
      @ang_y = 0
      if( Verso<0 )
      {
         @base_0.x = base_2.x + 10
         @base_0.z = base_2.z
         @ang_y = 90
         @Z = Z_Pannello - 20
      }

      idx_cnear_sx = ATTUALE()

      @DEBUG = FLAG_Debug
   }

   Posiziona _cont_per_near_2 ndx
   {
      @base_0.x = base_6.x - 1
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 5
      @base_0.z = base_0.z + 10
      @X = 1
      @Y = Y - 10
      @Z = Z - 20
      @ang_y = 0
      if( Verso>0 )
      {
         @base_0.x = base_4.x - 10
         @base_0.z = base_4.z
         @ang_y = -90
         @Z = Z_Pannello - 20
      }

      idx_cnear_dx = ATTUALE()

      @DEBUG = FLAG_Debug
   }


   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   //Luca 23/10/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco

      @X = Xt
      @Y = Yt
      @Z = Zt
   }
}

Elemento ScoccaT_AngoloCieco
{
   Descrizione = "Base standard"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"   1

      X                        "Profondità DX"                              528   Menu   (   LargAC   )   Utente   (   )
      Y                        "Altezza"                                    717   Menu   (   AltAC    )   Utente   (   )
      Yt                       "(Altezza con Piedini)"                      840
      Z                        "Profondità SX"                              528   Menu   (   LargAC   )   Utente   (   )

      Cuc_Alt_Zoc              ""                                           17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca               "ininfluente altezza posizione"              2

      TipoRipiano              "Tipo ripiano"                               1

      Verso                    "Verso della scocca"                         -1
      No_Pie                   ""                                           0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale        "Materiale Frontale"                         ""
      VAR_Melaminico           ""                                           0     SaveAlways

      VAR_Vuoto                "Solo Ingombro?"                             0

      COD_EREDITA              ""                                           "PRE;POST"
      CMP2_AZIONI              ""                                           "S"

      //gestione angolo FS
      tipo_ang_muro            ""                                           "S"
      offset_muro              ""                                           0

      TIPO__                   "per M4 definisce il tipo di elemento"       1
      STENDI_AUTO_ANGOLO       ""                                           2

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

      M4_VAR                   ""                                           "VAR_Aggancio;X;Y;Z;Zt;FillerM2G"

      FillerM2G                " "                                          ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Ass_Comune_Cuc
      //HIDE_ON_EDIT(idx_att,"ConCielo;VAR_CatR_OV;VAR_CatF_OV;PortaBombola",$ATTIVA_DLL)
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      Cuc_Alt_Zoc = SE_NUM(TipoScocca<2,$Cuc_Alt_Zoc,0)
      M4_GRUPPO__  = MSG(1000)
      Yt = Y + Cuc_Alt_Zoc + $Cuc_RidY_Sco
      Zt = Z

      GOSUB punti_Yt
      offset_muro = -X
      //GOSUB punti_completi

      base_o0 = base_0
      base_o1 = base_1
      base_o2 = base_1
      base_o3 = base_2

      alto_o0 = base_o0       alto_o0.y = base_o0.y + Yt
      alto_o1 = base_o1       alto_o1.y = base_o1.y + Yt
      alto_o2 = base_o2       alto_o2.y = base_o2.y + Yt
      alto_o3 = base_o3       alto_o3.y = base_o3.y + Yt

      pnt_sx_0 = base_o0
      pnt_sx_1 = alto_o1
      pnt_dx_0 = base_o3
      pnt_dx_1 = alto_o2

      base_so = base_0
      alto_ne = base_2

      GOSUB DefVanoBasi
      GOSUB DefPuntiTop
      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }

   Orientamenti
   {
      Sinistra base_o0, base_o1, alto_o0, alto_o1
      Destra   base_o3, base_o2, alto_o3, alto_o2
      Alto     alto_o0, alto_o1, alto_o3, alto_o2
      Basso    base_o0, base_o1, base_o2, base_o2
      Fronte   base_o1, base_o2, alto_o1, alto_o2
      Retro    base_o0, alto_o3, alto_o0, base_o3
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      //GOSUB Cuc_OnQueryBdmLocal

      //Luca 18/05/2020
      //Mantis 22436: Basi anngolo cieco: profondità di accosto errate
      if( $query_type==1 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            if( IS_MATCH(NOME($M4_DragInfo_Ref),"ScoccaT_Base*")  )
            {
               wk_prf_base = VAR_VAL($M4_DragInfo_Ref,"Z") + 32
               if( $M4_DragInfo_SxDx==1 )
               {
                  Z =  wk_prf_base
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Z=",STR(Z) , " //Cuc_OnQueryBdmLocal ",NOME(ATTUALE())))
               }
               if( $M4_DragInfo_SxDx==-1 )
               {
                  X =  wk_prf_base
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," X=",STR(X) , " //Cuc_OnQueryBdmLocal ",NOME(ATTUALE())))
               }
            }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi
      //GOSUB CambiaPuntoConnessione

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

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

      COMANDO(STRCAT("RICALCOLA ", STR(ATTUALE()), " no_agganciati //PostGestDllValida"))
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
      //GOSUB CucP_Cancella
   }

   Posiziona Blocco Ing
   {
      @escluso = 1
      if( $ATTIVA_DLL==0 ) { @escluso = 0  }
      GOSUB posa_blocco
      @c_rivestimento = [120,120,255]
      @f_rivestimento = "0.9"
   }

   Posiziona BloccoInvisibile bl
   {
      GOSUB posa_blocco
   }

   Posiziona ProfiloAngoloCielo psx
   {
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Cuc_Alt_Zoc + Y - @Y
      @base_0.z = base_0.z
   }

   Posiziona ProfiloAngoloCielo pdx
   {
      @base_0.x = base_0.x + X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + Y - @Y
      @base_0.z = base_0.z + (Z -@X)/2
      @ang_y = -90
   }

   Posiziona MasselloAngoloCieco ma
   {
      @base_0.x = base_0.x + @X
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z + Z - @Z
      @Y = Y
      @ang_y = -90
   }

   //Luca 04/03/2020
   //riporto elemento aggiunto da LAGO
   Posiziona Cuc_LamieraLAngIso LamL
   {
      @base_0.x = base_0.x + @X - 3
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z + Z - @Z + 3
      @Y = Y + 19
      @ang_y = -90
   }
}

//Luca 10/01/2019
Elemento ScoccaT_BaseAngoloIsola
{
   Descrizione = "Base standard"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo

   Variabili
   {
      //VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 Boolean  ShowAlways
      VAR_RUOTA      "--> RUOTA <-- " 0 Boolean  ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      //il cassetto è inserito in Z
      //cambio le descrizioni per aver 'larghezza' nel lato del cassetto

      Z       "Larghezza"              528 Menu ( LargAI ) Utente ( )

      //X       "Larghezza"              528 Menu ( LargAI ) Utente ( )
      //Menu ( LargBAI ) Utente ( )
      Y       "Altezza"                736 Menu ( AltBBSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  840
      //Z       "Profondita'"            528 Menu ( LargAI ) Utente ( )

      X       "Profondità"              528 Menu ( LargAI ) Utente ( )

      //Menu ( ProfBBSS ) Utente ( )
      Zt      "(Profondita')"          528

      Cuc_Alt_Zoc    ""                 17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca  "ininfluente altezza posizione"   2

      TipoRipiano "Tipo ripiano"  1

      Verso       ""   -1 SaveAlways
      Verso_prec  ""   -1

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      idx_near_snack "" -1

      // Menu ( DXSX )
      No_Pie      "" 0

      VAR_Vuoto   "Solo Ingombro?" 0

      COD_EREDITA      ""      "PRE;POST;C011_PRE"
      CMP2_AZIONI      ""      "S"

      TIPO__      "per M4 definisce il tipo di elemento" 1

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

      M4_VAR "" "VAR_RUOTA;VAR_Aggancio;X;Y;Yt;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Ass_Comune_Cuc
      //HIDE_ON_EDIT(idx_att,"ConCielo;VAR_CatR_OV;VAR_CatF_OV;PortaBombola",$ATTIVA_DLL)
      GOSUB CucP_Assegnazioni
      if( Cucina_Versione > 2 ) { GOSUB CucP_AssRangeRid }
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      Xt = X + $Cuc_Spe_Ant + $Cuc_Aria_Ant_Z
      Zt = Z

      Yt = Y + Cuc_Alt_Zoc
      Y_Scocca = Y - $Cuc_RidY_Sco

      GOSUB punti_Yt
      //GOSUB punti_completi

      base_o0   = base_1
      base_o1   = base_2
      base_o2   = base_2
      base_o3   = base_3
      base_o3.z = base_3.z + 20

      if( Verso>0 )
      {
         base_o0 = base_0
         base_o0.z = base_0.z + 20
         base_o1 = base_1
         base_o2 = base_1
         base_o3 = base_2
      }

      alto_o0 = base_o0       alto_o0.y = base_o0.y + Yt
      alto_o1 = base_o1       alto_o1.y = base_o1.y + Yt
      alto_o2 = base_o2       alto_o2.y = base_o2.y + Yt
      alto_o3 = base_o3       alto_o3.y = base_o3.y + Yt

      pnt_sx_0 = base_o0
      pnt_sx_1 = alto_o1
      pnt_dx_0 = base_o3
      pnt_dx_1 = alto_o2

      base_so = base_0
      alto_ne = alto_2

      //GOSUB DefVanoBasi
      GOSUB DefPuntiTop
      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      //Luca 15/02/2019
      GOSUB DefPuntiStendiFFinitura

      vano_l_0 = Z - 2*$Cuc_Spe_Fia
      vano_p_0 = X - $Cuc_Spe_Fia
      vano_0_0 = [X - $Cuc_Spe_Fia , Cuc_Alt_Zoc, $Cuc_Spe_Fia]

      vano_ang_0 = -90

      if( Verso>0 )
      {
         vano_0_0 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Z - $Cuc_Spe_Fia]
         vano_ang_0 = 90
      }

      GOSUB CucP_PuntiNotevoli

      AngoloDx = ANG_TOT2(ATTUALE())
      AngoloSx = ANG_TOT2(ATTUALE()) + 90

      if( Verso>0 )
      {
         AngoloSx = ANG_TOT2(ATTUALE())
         AngoloDx = ANG_TOT2(ATTUALE()) - 90
      }

      if( AngoloSx<0 )    { AngoloSx = AngoloSx + 360 }
      if( AngoloDx<0 )    { AngoloDx = AngoloDx + 360 }
      if( AngoloSx>=360 ) { AngoloSx = AngoloSx - 360 }
      if( AngoloDx>=360 ) { AngoloDx = AngoloDx - 360 }
   }

   Orientamenti
   {
      Sinistra base_o0, base_o1, alto_o0, alto_o1
      Destra   base_o3, base_o2, alto_o3, alto_o2
      Alto     alto_o0, alto_o1, alto_o3, alto_o2
      Basso    base_o0, base_o1, base_o2, base_o2
      Fronte   base_o1, base_o2, alto_o1, alto_o2
      Retro    base_o0, alto_o3, alto_o0, base_o3
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi
      //GOSUB CambiaPuntoConnessione

      //Luca 04/09/2020 controllo eventuale presenza del piano SNACK
      GOSUB CtrlPresenzaSNACK

      GOSUB ImpostaVersoPrec

      GOSUB RuotaAngoloIsola

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      //Simone 15/11/2022
      GOSUB Set_Gest_C008

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
      //GOSUB CucP_Cancella
   }

   //Simone 22/03/2023 - Sposto nel fusto
   //Posiziona Cuc_GruppoPiedini gp
   //{
   //   GOSUB Cuc_PosaPiedini
   //}

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}
   //
   //Posiziona Blocco b1
   //{
   //   @base_0 = base_o0
   //   @base_0 = base_0
   //
   //   @X = 100
   //   @Y = Y + 100
   //   @Z = 100
   //   @c_rivestimento = [255,120,255]
   //   //@f_rivestimento = "0.9"
   //}

   //Posiziona Blocco b13
   //{
   //   @base_0 = base_0
   //   @X = alto_2.x
   //   @Y = alto_2.y
   //   @Z = alto_2.z
   //   @c_rivestimento = [255,120,255]
   //   //@f_rivestimento = "0.9"
   //}

   //Posiziona Blocco b2
   //{
   //   @base_0 = base_o3
   //   @base_0 = base_3
   //   @X = 100
   //   @Y = Y + 100
   //   @Z = 100
   //   @c_rivestimento = [255,120,120]
   //   //@f_rivestimento = "0.9"
   //}

   Posiziona FustoBaseAngoloIsola fbs
   {
      GOSUB Cuc_PosaFustoStd

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

      @base_0 = base_1
      @ang_y = 90

      if( Verso < 0)
      {
         @base_0 = base_3
         @ang_y = -90
      }

      if( VAR_EXIST( idx_att, "Cuc_Alt_Zoc")
        & IS_MATCH( nome_att, "ScoccaS_*") != 1)
      {
         @base_0.y = base_0.y + Cuc_Alt_Zoc
      }

      @ZFiaDx = @Z - 32
      @ZFiaSx = @Z - 32

      @Verso = Verso
   }

   // Posiziona _cont_per_near_2 nsx
   // {
   //    idx_cnear_sx = ATTUALE()
   //    @base_0.x = base_0.x - 1
   //    @base_0.y = base_0.y + 5
   //    @base_0.z = base_0.z + 20
   //    @X = 2
   //    @Y = Y - 10 + 100
   //    @Z = Z - 40
   //    @ang_y = 0
   //    if( Verso<0 )
   //    {
   //       @base_0.z = base_1.z + 1
   //       @ang_y = 90
   //       @Z = X - 40
   //    }
   // }

   // Posiziona _cont_per_near_2 ndx
   // {
   //    idx_cnear_dx = ATTUALE()
   //    @base_0.x = base_3.x - 1
   //    @base_0.y = base_0.y + 5
   //    @base_0.z = base_0.z + 20
   //    @X = 2
   //    @Y = Y - 10  +100
   //    @Z = Z - 40
   //    @ang_y = 0
   //    if( Verso>0 )
   //    {
   //       @base_0.x = base_3.x
   //       @base_0.z = base_2.z - 1
   //       @ang_y = -90
   //       @Z = X - 40
   //    }
   // }

   Posiziona _cont_per_near_2 nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = X - 40
      @Y = Y - 10 + 100
      @Z = 2

      @base_0.x = base_0.x + 40
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + Z - @Z/2
      if( Verso < 0 )
      {
         @base_0.x = base_0.x
         @base_0.z = @base_0.z - Z
      }
   }

   Posiziona _cont_per_near_2 ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = X - 40
      @Y = Y - 10 + 100
      @Z = 2

      @base_0.x = base_0.x
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + Z - @Z/2
      if( Verso>0 )
      {
         @base_0.x = base_0.x + 40
         @base_0.z = base_0.z - @Z/2
      }
   }

   //Luca 04/09/2020
   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = 60
      @Z = Z - 200
   }

   Posiziona _cont_per_near csnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_1.x - 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_1.z - 50
      @X = Z   - 100
      @Y = 100
      @Z = 80
      @ang_y = 90

      if( Verso > 0 )
      {
         @base_0.x = base_3.x + 50
         @base_0.z = base_3.z + 50
         @ang_y = -90

      }
   }
}

Elemento ScoccaT_BaseLvstOriz
{
   Descrizione = "Base Lavastoviglie orizzontale"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo

   Variabili
   {
      VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza base"         736 Menu ( LargBBSS ) Utente ( )
      Y       "Altezza"                736 Menu ( AltBBSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  840 ShowAlways
      Z       "Profondita' fianco"     606 Menu ( ProfBBSS ) Utente ( )
      Zt      "(Profondita')"          606 ShowAlways

      Cuc_Alt_Zoc    ""                               17

      VAR_Vuoto   "Solo Ingombro?" 0

      Verso "" 0

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca  "ininfluente altezza posizione"   2

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      VAR_CatR_OV  "catena retro: 0=orizzontale 1= verticale"  0
      //Boolean
      VAR_CatF_OV  "catena fronte: 0=orizzontale 1= verticale" 0
      //Boolean

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_cnear_up "" -1
      idx_cnear_dw "" -1
      idx_near_snack "" -1

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 SaveAlways
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 SaveAlways
      VAR_PassaC_OffY  "Altezza passacavi" 0 Utente ( ) SaveAlways
      VAR_PassaC_OffZ  "" 0 SaveAlways

      ////prevedo inserimento di barra per elementi a sbalzo
      //VAR_BarraSost1  "Barra Sostegno elemento sbalzo" 0
      //VAR_BarraSost2  "Barra Sostegno elemento sbalzo" 0

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt"
      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( ACTION()==0 ) { HIDE_ON_EDIT2(ATTUALE(),"TipoScocca",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB punti_completi
      GOSUB DefVanoBasi
      GOSUB DefPuntiTop

      GOSUB DefPuntiZocc
      //GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      GOSUB OnQueryBdmLocal_Basi_Cuc

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB CambiaPuntoConnessione

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      //GOSUB CucP_SetVarGest
      //GOSUB Gest_idx_GFin

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   //Procedura PostControl
   //{
   //   GOSUB CucP_PostControl
   //}

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoBaseStdLvstOriz fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }
}

Elemento ScoccaT_BaseLvst
{
   Descrizione = "Base Lavastoviglie"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo

   Variabili
   {
      VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza base"         640 Menu ( LargBLVS ) Utente ( )
      Y       "Altezza"                920 Menu ( AltBLVS ) Utente ( )
      Yt      "(Altezza con Piedini)"  920 ShowAlways
      Z       "Profondita' fianco"     606 Menu ( ProfBBSS ) Utente ( )
      Zt      "(Profondita')"          606 ShowAlways

      Cuc_Alt_Zoc    ""                               17

      TipoScocca  "Posizione Base"   0 Menu ( PosBLVS )

      //----------------------------------------------
      //variabili per gestione fusion
      //Fusion SX/DX
      //- 1 attiva HPL sulla base --> ingombro X + 4
      //- 2 riduzione per fusion  --> ingombro = X
      //- 3 attiva HPL + riduzione per fusion  --> ingombro == X + 4
      //- 4 solo fascia finitura sul retro (caso disallieneamento retro)--> ingombro = X
      FSN_flag_SX "Fusion SX" 0 SaveAlways //Utente ( )
      FSN_prof_SX ""          0
      FSN_pHPL_SX ""          0
      FSN_ridx_SX ""          4

      FSN_alte_SX ""          0
      FSN_offy_SX ""          0

      FSN_flag_DX "Fusion DX" 0 SaveAlways  //Utente ( )
      FSN_prof_DX ""          0
      FSN_pHPL_DX ""          0
      FSN_ridx_DX ""          4

      FSN_alte_DX ""          0
      FSN_offy_DX ""          0

      //non dovrebbero più servire, l'hpl ha sempre la stessa profondità del fianco
      //FSN_pHPL_SX ""          0
      //FSN_pHPL_DX ""          0
      //----------------------------------------------

      //0 Normale
      //1 XXL
      //2 XL
      TipoLvst "Tipologia LVST"      0

      //0 maniglia
      //1 servo drive
      TipoApertura "Apertura"   0 Menu ( ApeBLVS )

      VAR_Vuoto   "Solo Ingombro?" 0

      Verso "" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 SaveAlways
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 SaveAlways
      VAR_PassaC_OffY  "Altezza passacavi" 0 Utente ( ) SaveAlways
      VAR_PassaC_OffZ  "" 0 SaveAlways

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_cnear_up "" -1
      idx_cnear_dw "" -1
      idx_near_snack "" -1

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt;TipoScocca;TipoApertura"
      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoApertura",$ATTIVA_DLL) }

      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB FSN_Def_X_Xt

      GOSUB punti_completi
      GOSUB DefVanoBasi
      GOSUB DefPuntiTop
      GOSUB DefPuntiZocc

      if( FSN_flag_SX==1 | FSN_flag_SX==3 )
      {
         vano_0_0.x = vano_0_0.x +FSN_ridx_SX
      }
      //per FUSION
      punto_dx_top.x = Xt
      punto_dx_top_fro.x = Xt

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      //GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      //GOSUB Cuc_BaseSuAng135
      GOSUB OnQueryBdmLocal_Basi_Cuc

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi
      GOSUB CambiaPuntoConnessione

      GOSUB CtrlBasiFusion

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      //GOSUB CucP_SetVarGest
      //GOSUB Gest_idx_GFin

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita

      if( TABER_REGOLA=="POST" )
      {
         //lavastoviglie standard
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS01" ) { TipoLvst = 0 }
         //lavastoviglie XXL
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS02" ) { TipoLvst = 1 }
         //lavastoviglie XL
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS03" ) { TipoLvst = 2 }
      }
   }

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault

      GOSUB PGDV_RicalcolaAngolo
   }

   //Procedura PostControl
   //{
   //   GOSUB CucP_PostControl
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      @escluso = 0
      if( TipoScocca == 0 ) { @escluso = 1 }

      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoBaseStdLvst fbs
   {
      GOSUB Cuc_PosaFustoStd

      if( FSN_flag_SX==1
        | FSN_flag_SX==3 ) { @base_0.x = @base_0.x + FSN_ridx_SX }
   }

   Posiziona ElementoFusion hlpsx
   {
      @escluso = 1
      if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { @escluso = 0 }
      if( FSN_flag_SX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco

      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_SX
      @Z = FSN_pHPL_SX

      @X  = FSN_ridx_SX
      @Y  = FSN_alte_SX
      @Zt = FSN_prof_SX

      @FSN_SoloFascia = SE_NUM(FSN_flag_SX==4,1,0)
   }

   Posiziona ElementoFusion hlpdx
   {
      @escluso = 1
      if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { @escluso = 0 }
      if( FSN_flag_DX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt - FSN_ridx_DX
      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_DX
      @X  = FSN_ridx_DX
      @Y  = FSN_alte_DX
      @Zt = FSN_prof_DX
      @Z  = FSN_pHPL_DX


      @FSN_SoloFascia = SE_NUM(FSN_flag_DX==4,1,0)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   //Luca 07/06/2019
   //aggiunto per cercare il bifacciale
   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }

   //Luca 14/11/2019
   //"Nell'archetipo delle lavastoviglie verticali sospese manca il
   //codice di primo livello B07001 con radice KTAT. Sono la coppia di attaccaglie scarpi."
   Posiziona RigaOrdine_NonGraficato Sf1
   {
      @escluso = 1
      if( TipoScocca==2 ) { @escluso = 0 }
      @base_0 = base_0
      @GEST_CODICE = "B07001"
      @X = 6
      @Y = 41
      @Z = 65
   }
}

Elemento ScoccaT_BaseForno
{
   Descrizione = "Base Forno"
   Code        = BBSS
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias Base;a_terra;PerZoccolo;Eldom_Check;BaseForno

   Variabili
   {
       VAR_Aggancio             "--> CAMBIA CONNESSIONE <--"                  0     Boolean      ShowAlways

       #include %path_bdm%\var_db.inc
       #include %path_bdm%\var_eldom.inc

       ELD_TIPO_ELDOM           ""                                            "FORNO"

       genera_disegno_collo__   "Variabile per la gestione delle bindelle"    1

       //Filler2 " " "" ShowAlways

       X                        "Larghezza base"                              600   Menu         (   LargBBSS   )
       Y                        "Altezza "                                    736   Menu         (   AltBFSS    )   Utente   (   )
       Yt                       "(Altezza con Piedini)"                       840   ShowAlways
       Z                        "Profondita' fianco"                          606   Menu         (   ProfBFSS   )   Utente   (   )
       Zt                       "(Profondita')"                               606   ShowAlways

       Cuc_Alt_Zoc              ""                                            17

       //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
       TipoScocca               "ininfluente altezza posizione"               2

       ConCassetto              "Con Cassetto"                                0     Menu         (   SiNo       )

       Alt_Forno                "Posizione del Forno"                         120   Utente       (   )
       Y_Forno                  "Dimensione Y dell'elettrodomestico"          578
       //Utente ( )
       PosYFondo2               "Posizione del 2 Fondo (se con cassetto)"     0

       Verso                    "Verso della scocca"                          -1    Menu         (   DXSX       )
       No_Pie                   ""                                            0
       VAR_Vuoto                "Solo Ingombro?"                              0     //Menu ( bool )

       //LZ 02/08/2021: cucine laccate
       MaterialeFrontale        "Materiale Frontale"                          ""
       VAR_Melaminico           ""                                            0     SaveAlways

       VAR_FroFixSup            "Frontale fisso superiore"                    1
       VAR_FroFixInf            "Frontale fisso inferiore"                    1

       VAR_CatR_OV              "catena retro: 0=orizzontale 1= verticale"    0
       VAR_CatF_OV              "catena fronte: 0=orizzontale 1= verticale"   1

       StrPerGola               "predisposizione per gola"                    ""
       //TabBmp ( "cuc\tab\Cuc_StrGola2.TXT" ) Implicit

       VAR_LavPC_FiaSx          "Lavorazione PianoCottura Fianco SX"          0     Boolean
       VAR_LavPC_FiaDx          "Lavorazione PianoCottura Fianco DX"          0     Boolean

       VAR_PassaC_FiaSx         "Lavorazione Passacavo Fianco SX"             0     SaveAlways
       VAR_PassaC_FiaDx         "Lavorazione Passacavo Fianco DX"             0     SaveAlways
       VAR_PassaC_OffY          "Altezza passacavi"                           0     Utente       (   )          SaveAlways
       VAR_PassaC_OffZ          ""                                            0     SaveAlways

       VAR_FornoCompatto        ""                                            0
       YVanoEld                 ""                                            0
       VAR_YVanoMinEld          "Altezza minima vano Forno"                   0     SaveAlways
       VAR_YVanoMaxEld          "Altezza massimo vano Forno"                  0     SaveAlways
       VAR_YFroEld              "Altezza frontale forno"                      0     SaveAlways
       VAR_DeltaBasso           "Delta basso"                                 0     SaveAlways
       VAR_RotFroEld            "Rotazione anta eldom"                        0     SaveAlways
       VAR_PosYEld              "Posizione in altezza eldom"                  0     SaveAlways

       //----------------------------------------------
       //variabili per gestione fusion
       //Fusion SX/DX
       //- 1 attiva HPL sulla base --> ingombro X + 4
       //- 2 riduzione per fusion --> ingombro = X
       //- 3 attiva HPL + riduzione per fusion --> ingombro == X + 4
       //- 4 solo fascia finitura sul retro (caso disallieneamento retro)--> ingombro = X
       FSN_flag_SX              "Fusion SX"                                   0     SaveAlways   //Utente ( )
       FSN_prof_SX              ""                                            0
       FSN_pHPL_SX              ""                                            0
       FSN_ridx_SX              ""                                            4

       FSN_alte_SX              ""                                            0
       FSN_offy_SX              ""                                            0

       FSN_flag_DX              "Fusion DX"                                   0     SaveAlways   //Utente ( )
       FSN_prof_DX              ""                                            0
       FSN_pHPL_DX              ""                                            0
       FSN_ridx_DX              ""                                            4

       FSN_alte_DX              ""                                            0
       FSN_offy_DX              ""                                            0

       //non dovrebbero più servire, l'hpl ha sempre la stessa profondità del fianco
       //FSN_pHPL_SX "" 0
       //FSN_pHPL_DX "" 0
       //----------------------------------------------

       idx_cnear_sx             ""                                            -1
       idx_cnear_dx             ""                                            -1
       idx_cnear_up             ""                                            -1
       idx_cnear_dw             ""                                            -1
       idx_cnear_rt             ""                                            -1

       idx_near_snack           ""                                            -1

       CMP2_AZIONI              ""                                            "S"

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

       //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt"
       FillerM2G                " "                                           ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      ELD_CODICE = "FRN"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;VAR_Aggancio"

      GOSUB ScoccaT_BaseForno_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB FSN_Def_X_Xt

      GOSUB punti_completi
      GOSUB DefVanoBasi
      GOSUB DefPuntiTop
      GOSUB DefPuntiZocc

      if( FSN_flag_SX==1 | FSN_flag_SX==3 )
      {
         vano_0_0.x = vano_0_0.x +FSN_ridx_SX
      }
      //per FUSION
      punto_dx_top.x = Xt
      punto_dx_top_fro.x = Xt

      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      GOSUB OnQueryBdmLocal_Basi_Cuc

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB SetVarBaseForno

      GOSUB CambiaPuntoConnessione

      GOSUB CtrlBasiFusion

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      //Simone 15/11/2022
      GOSUB Set_Gest_C008

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault

      //GOSUB Cuc_AttivaDistanzialeSuBaseAngolo

      GOSUB PGDV_RicalcolaAngolo
   }

   //Procedura PostControl
   //{
   //   GOSUB CucP_PostControl
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2

      if( $StartingDel__!=ATTUALE() ) { EXITSUB() }

      OnCancellaBase = 1
      GOSUB Cuc_AttivaDistanzialeSuBaseAngolo
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoBaseForno fbs
   {
      GOSUB Cuc_PosaFustoStd
      @Alt_Forno = Alt_Forno
      @PosYFondo2 = PosYFondo2
   }

   Posiziona FornoGenerico for
   {
      @escluso = 1-InsEldom

      @base_0.x = base_0.x  +$Cuc_Aria_Ant_X
      //@base_0.y = base_0.y +Cuc_Alt_Zoc + Alt_Forno
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld
      @base_0.z = base_1.z - @Z

      //@X_FRO = Xt -2*$Aria_Ant_X
      @X_FRO = X - 2*$Cuc_Aria_Ant_X

      if( @X_FRO==X ) { @base_0.x = base_0.x }

      //@Y_FRO = VAR_YFroEld
      @Y_FRO = VAR_YFroEld - SE_NUM(VAR_DeltaBasso>0,VAR_DeltaBasso,0)


      @VAR_RotFroEld =  VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld

      if( VAR_YFroEld==0 ) { @Y_FRO = YVanoEld }

      if( VAR_EXIST(idx_att,"DescForno") ) { @DescEdit__ = DescForno  }

      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE    = ELD_CODICE
      @InsEldom      = InsEldom
      idx_eldom      = ATTUALE()

      @SoloGrafica = InsEldom
      @IndiceForno = ""
   }

   Posiziona Cuc_FrontaleFisso ffin
   //Posiziona Blocco ffin
   {
      @escluso = 1 - VAR_FroFixInf

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + PosY_FroFixInf + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z

      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y_FroFixInf - 2*$Cuc_Aria_Ant_Y

      @Z = 24
      //LZ 02/08/2021: cucine laccate e 3.0
      if( VAR_Melaminico
        | Cucina_Versione > 2 )  { @Z = 22 }

      @TipoFroFix = 0
      if( VAR_FornoCompatto==2 ) { @TipoFroFix = 1 }
   }

   Posiziona Cuc_FrontaleFisso ffsup
   //Posiziona Blocco ffsup
   {
      @escluso = 1 - VAR_FroFixSup

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + PosY_FroFixSup + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z

      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y_FroFixSup - 2*$Cuc_Aria_Ant_Y

      @Z = 24
      //LZ 02/08/2021: cucine laccate e 3.0
      if( VAR_Melaminico
        | Cucina_Versione > 2 ) { @Z = 22 }

      @FroFixSupForno = 1

      @TipoFroFix = 0
      if( VAR_FornoCompatto==2 ) { @TipoFroFix = 1 }
   }

   Posiziona Cuc_Cassetto cinf
   {
      @escluso = SE_NUM( ConCassetto > 0, 0, 1)
      @escluso = SE_NUM( Cucina_Versione > 2, @escluso, 1)

      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y_CassInf - 2*$Cuc_Aria_Cas_Y
      @Zn = Zt

      @base_0.x = base_1.x + (X - @X)/2
      @base_0.y = base_1.y + Cuc_Alt_Zoc + (Y_CassInf - @Y)/2
      @base_0.z = base_1.z - @Z

      HSponde = 90.5
      if( IS_VAR_FIXED(ATTUALE(), "GEST_C039") == 1)
      {
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB001") { HSponde = 90.5 }
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB002") { HSponde = 177  }
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB003") { HSponde = 241  }
      }
      @MY = HSponde

      if( Zt <= 406) { @MZ = 300 }
      if( Zt == 520) { @MZ = 400 }
      if( Zt == 630) { @MZ = 500 }
      if( Zt >= 700) { @MZ = 550 }

      @Py = 46.6
      @Pz = 0
   }

   Posiziona Cuc_Cassetto csup
   {
      @escluso = SE_NUM( ConCassetto > 1, 0, 1)
      @escluso = SE_NUM( Cucina_Versione > 2, @escluso, 1)

      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y_CassSup - 2*$Cuc_Aria_Cas_Y
      @Zn = Zt

      @base_0.x = alto_1.x + (X - @X)/2
      @base_0.y = alto_1.y - @Y + (Y_CassInf - @Y)/2 - 2*$Cuc_Aria_Ant_Y
      @base_0.z = alto_1.z - @Z

      HSponde = 90.5
      if( IS_VAR_FIXED(ATTUALE(), "GEST_C039") == 1)
      {
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB001") { HSponde = 90.5 }
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB002") { HSponde = 177  }
         if( VAR_VAL_STR(ATTUALE(), "GEST_C039") == "LB003") { HSponde = 241  }
      }
      @MY = HSponde

      if( Zt <= 406) { @MZ = 300 }
      if( Zt == 520) { @MZ = 400 }
      if( Zt == 630) { @MZ = 500 }
      if( Zt >= 700) { @MZ = 550 }

      @Py = 46.6
      @Pz = 0
   }

   Posiziona ElementoFusion hlpsx
   {
      @escluso = 1
      if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { @escluso = 0 }
      if( FSN_flag_SX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco

      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_SX
      @Z = FSN_pHPL_SX

      @X  = FSN_ridx_SX
      @Y  = FSN_alte_SX
      @Zt = FSN_prof_SX

      @FSN_SoloFascia = SE_NUM(FSN_flag_SX==4,1,0)
   }

   Posiziona ElementoFusion hlpdx
   {
      @escluso = 1
      if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { @escluso = 0 }
      if( FSN_flag_DX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt - FSN_ridx_DX
      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_DX
      @X  = FSN_ridx_DX
      @Y  = FSN_alte_DX
      @Zt = FSN_prof_DX
      @Z  = FSN_pHPL_DX


      @FSN_SoloFascia = SE_NUM(FSN_flag_DX==4,1,0)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      //LZ 19/11/21: esagerato, a momenti il near prende anche i pensili
      //@Y = Y - 40
      @Y = 60
      @Z = Z - 200
   }

   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y + 100
      @base_0.z = base_0.z - 20
      @X = X - 200
      @Y = Y - 200
      @Z = 60
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }
}

Elemento ScoccaT_BaseCantinetta
{
   Descrizione = "Base Cantinetta"
   Code        = BBSS
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo;BaseCantinetta;CamIncidente;Eldom_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      VAR_Aggancio       "--> CAMBIA CONNESSIONE <--" 0 Boolean ShowAlways
      Filler1            " "                          "" ShowAlways
      SchedaTecnica      ">> SCHEDA TECNICA"          0 Boolean ShowAlways
      Filler2            " "                          "" ShowAlways

      X                  "Larghezza base"         600 ShowAlways
      Y                  "Altezza "               920 ShowAlways
      Yt                 "(Altezza con Piedini)"  937 ShowAlways
      Z                  "Profondita' fianco"     606 Menu ( ProfBBSSC ) Utente ( 606- )
      Zt                 "(Profondita')"          630 ShowAlways

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca         "Posizione scocca"       0

      Verso              "Verso della scocca"     0

      MaterialeFrontale  "Materiale Frontale"     ""
      VAR_Melaminico     ""                       0 SaveAlways

      InsEldom           ""                       0

      Fondo_Y            ""                       22
      MasSup_Y           ""                       50
      MasSup_Yr          ""                       32.5
      MasInf_Y           ""                       127
      MasInf_Y_min       ""                       127
      MasInf_Y_max       ""                       157

      Vano_Ymax          ""                       846.5
      Vano_Yoff          ""                       5

      VAR_Eld_Vano_Ymin  ""                       0 SaveAlways
      VAR_Eld_Vano_Ymax  ""                       0 SaveAlways
      VAR_Eld_Anta_Y     ""                       0 SaveAlways
      VAR_Eld_Anta_Yoff  ""                       0 SaveAlways
      VAR_Eld_Anta_Yr    ""                       0 SaveAlways

      FiancoFinLvstSx    ""                       0 SaveAlways
      FiancoFinLvstSx_Y  ""                       0 SaveAlways
      FiancoFinLvstDx    ""                       0 SaveAlways
      FiancoFinLvstDx_Y  ""                       0 SaveAlways

      idx_sx             ""                       -1
      idx_dx             ""                       -1
      idx_cnear_sx       ""                       -1
      idx_cnear_dx       ""                       -1
      idx_cnear_up       ""                       -1
      idx_cnear_dw       ""                       -1

      idx_near_snack     ""                       -1

      CMP2_AZIONI        ""                       "S"

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

      FillerM2G          " "                      "" ShowAlways

      //M4_MIS             ""                       "SchedaTecnica;X*;Y*;Z*;Filler*"

      FIN_var            ""                       "C001"
      FIN_orie           ""                       "V"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      M4_MIS = "SchedaTecnica;X*;Y*;Z*;Filler*"
      if( ACTION() == 0 ) { HIDE_ON_EDIT2( ATTUALE(), "SchedaTecnica", 0) }
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa
      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Basi_Cuc
      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlBasi
      GOSUB SetVarBaseCantinetta
      GOSUB CambiaPuntoConnessione
      GOSUB Set_MaterialeFrontale_Ante

      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         FiancoFinLvstSx   = 0
         FiancoFinLvstSx_Y = 0
         FiancoFinLvstDx   = 0
         FiancoFinLvstDx_Y = 0

         if( IS_IDX(idx_sx) )
         {
            if( IS_MATCH(NOME(idx_sx),"ScoccaT_Bas*")==1 )
            {
               SET_#(idx_sx)
               wk_offy = (#base_0.y + #Cuc_Alt_Zoc)  - (base_0.y + Cuc_Alt_Zoc)
               if( wk_offy>0 )
               {
                  FiancoFinLvstSx   = 1
                  FiancoFinLvstSx_Y = wk_offy
               }
            }
         }
         if( IS_IDX(idx_dx) )
         {
            if( IS_MATCH(NOME(idx_dx),"ScoccaT_Bas*")==1 )
            {
               SET_#(idx_dx)
               wk_offy = (#base_0.y + #Cuc_Alt_Zoc)  - (base_0.y + Cuc_Alt_Zoc)
               if( wk_offy>0 )
               {
                  FiancoFinLvstDx   = 1
                  FiancoFinLvstDx_Y = wk_offy
               }
            }
         }
      }

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      //GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault
      GOSUB PGDV_RicalcolaAngolo
   }

   Posiziona Blocco dbg
   {
      @escluso = 1
      GOSUB posa_blocco

      @Z = Zt

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

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoBaseCantinetta fbc
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona Cuc_FrontaleFisso ffsup
   {
      @X = X
      @Y = MasSup_Y

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + Yt - @Y - $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Zt - @Z

      @TipoFroFix = 1
      @FroFixSupCantinetta = 1
   }

   Posiziona Cuc_ZoccoloInfCantinetta ffinf
   {
      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = MasInf_Y

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      if( TipoScocca < 2 ) { @base_0.y = @base_0.y + $Cuc_Alt_Zoc }
      @base_0.z = base_0.z + Zt - @Z
   }

   Posiziona Cuc_FiancoFinLvst fiafsx
   {
      @escluso = 1 - FiancoFinLvstSx

      @Y = FiancoFinLvstSx_Y - 3

      @Z = Zt
      if( VAR_Melaminico > 0 ) { @Z = Z + $Cuc_Aria_Ant_Z + $Cuc_Spe_Ant_Mel }

      @base_0 = base_0
      @base_0.x = base_0.x - @X - 0.5
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      if( TipoScocca < 2 ) { @base_0.y = @base_0.y + $Cuc_Alt_Zoc }

      @Verso = -1
   }

   Posiziona Cuc_FiancoFinLvst fiafdx
   {
      @escluso = 1 - FiancoFinLvstDx

      @Y = FiancoFinLvstDx_Y - 3

      @Z = Zt
      if( VAR_Melaminico > 0 ) { @Z = Z + $Cuc_Aria_Ant_Z + $Cuc_Spe_Ant_Mel }

      @base_0 = base_0
      @base_0.x = base_0.x + X + 0.5
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      if( TipoScocca < 2 ) { @base_0.y = @base_0.y + $Cuc_Alt_Zoc }

      @Verso = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = 60
      @Z = Z - 200
   }

   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }
}

Elemento ScoccaT_BaseCantinetta_Tamponamento
{
   Descrizione = "Cucine - Tamponamento per base cantinetta"
   Code        = COD
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                    "Larghezza base"           50 Utente ( )
      Xt                   ""                         50

      Y                    "Altezza"                  920 Menu ( AltBBSS )  Utente ( )
      Yt                   "(Altezza con Piedini)"    937 ShowAlways

      Z                    "Profondita'"              630 Menu ( ProfCFal ) Utente ( )
      Zt                   ""                         630

      Cuc_Alt_Zoc          ""                         17

      TipoScocca           "Posizione scocca"         0

      CMP2_AZIONI          ""                         "S"

      M4_A_MURO            ""                         0
      M4_CNT_LINK_MODE__   ""                         2
      M4_CNT_MODE__        ""                         1
      M4_CNT_MODE2__       ""                         1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Xt = X
      Zt = Z

      spPanF = 4
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB DefPuntiTop
      GOSUB DefPuntiStendiFFinitura
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona Blocco pan
   {
      @X = X
      @Y = Y - $Cuc_RidY_Sco
      @Z = Z - spPanF

      @base_0 = base_0
      @base_0.y = base_0.y + Yt - Y

      FIN_var = "C118"
      GOSUB rivestimento
   }

   Posiziona Blocco fro
   {
      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y - 2*$Cuc_Aria_Ant_Y
      @Z = spPanF

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

      FIN_var = "C042"
      GOSUB rivestimento
   }
}

Elemento ScoccaT_BaseLavatrice
{
   Descrizione = "Base lavatrice"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo

   Variabili
   {
      //LZ 18/11/2021
      VAR_Revisione "Revisione"                  0 SaveAlways

      VAR_Aggancio  "--> CAMBIA CONNESSIONE <--" 0 Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza base"         736 ShowAlways
      Y       "Altezza"                920 ShowAlways
      Yt      "(Altezza con Piedini)"  920 ShowAlways
      Z       "Profondita' fianco"     606 Menu ( ProfBBSS ) Utente ( )
      Zt      "(Profondita')"          606 ShowAlways

      Cuc_Alt_Zoc    ""                17

      TipoScocca  "Posizione Base"   0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      //----------------------------------------------
      //variabili per gestione fusion
      //Fusion SX/DX
      //- 1 attiva HPL sulla base --> ingombro X + 4
      //- 2 riduzione per fusion  --> ingombro = X
      //- 3 attiva HPL + riduzione per fusion  --> ingombro == X + 4
      //- 4 solo fascia finitura sul retro (caso disallieneamento retro)--> ingombro = X
      FSN_flag_SX "Fusion SX" 0 SaveAlways //Utente ( )
      FSN_prof_SX ""          0
      FSN_pHPL_SX ""          0
      FSN_ridx_SX ""          4

      FSN_alte_SX ""          0
      FSN_offy_SX ""          0

      FSN_flag_DX "Fusion DX" 0 SaveAlways  //Utente ( )
      FSN_prof_DX ""          0
      FSN_pHPL_DX ""          0
      FSN_ridx_DX ""          4

      FSN_alte_DX ""          0
      FSN_offy_DX ""          0
      //----------------------------------------------

      VAR_Vuoto   "Solo Ingombro?" 0

      Verso "" 0

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 SaveAlways
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 SaveAlways
      VAR_PassaC_OffY  "Altezza passacavi"               0 Utente ( ) SaveAlways
      VAR_PassaC_OffZ  "" 0 SaveAlways

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_cnear_up "" -1
      idx_cnear_dw "" -1
      idx_near_snack "" -1

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt;TipoScocca;TipoApertura"
      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 18/11/2021: revisione 1
      VAR_Revisione = 0
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_BLavatrice", "")
      if( VAR_Melaminico > 0
        & VAR_Revisione == 0 ) { VAR_Revisione = 1 }

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      //if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoApertura",$ATTIVA_DLL) }

      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB FSN_Def_X_Xt

      GOSUB punti_completi
      GOSUB DefVanoBasi
      GOSUB DefPuntiTop
      GOSUB DefPuntiZocc

      if( FSN_flag_SX==1 | FSN_flag_SX==3 )
      {
         vano_0_0.x = vano_0_0.x +FSN_ridx_SX
      }
      //per FUSION
      punto_dx_top.x = Xt
      punto_dx_top_fro.x = Xt


      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      //GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Basi_Cuc

      //if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }
      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi
      GOSUB CambiaPuntoConnessione

      GOSUB CtrlBasiFusion

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      //Simone 15/11/2022
      GOSUB Set_Gest_C008

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostGestDllValida
   {
      GOSUB AddBifaccialiDefault

      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoBaseStdLvtr fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   //LZ 18/11/2021: revisione 1
   Posiziona Cuc_GruppoPiedini gp
   {
      @PiediniSuFianco = 1
      GOSUB Cuc_PosaPiedini

      @escluso = 1
      if( VAR_Revisione > 0 ) { @escluso = 0 }

   }

   Posiziona ElementoFusion hlpsx
   {
      @escluso = 1
      if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { @escluso = 0 }
      if( FSN_flag_SX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco

      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_SX
      @Z = FSN_pHPL_SX

      @X  = FSN_ridx_SX
      @Y  = FSN_alte_SX
      @Zt = FSN_prof_SX

      @FSN_SoloFascia = SE_NUM(FSN_flag_SX==4,1,0)
   }

   Posiziona ElementoFusion hlpdx
   {
      @escluso = 1
      if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { @escluso = 0 }
      if( FSN_flag_DX==4 )                  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt - FSN_ridx_DX
      //@base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.y = base_0.y + Cuc_Alt_Zoc + FSN_offy_DX
      @X  = FSN_ridx_DX
      @Y  = FSN_alte_DX
      @Zt = FSN_prof_DX
      @Z  = FSN_pHPL_DX

      @FSN_SoloFascia = SE_NUM(FSN_flag_DX==4,1,0)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   //Luca 07/06/2019
   //aggiunto per cercare il bifacciale
   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }
}

Elemento ScoccaT_BaseTamponamento
{
   Descrizione = "Base tamponamento"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo;OnChangedVar

   Variabili
   {
      VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"              600 Utente ( )
      Xt      ""                       600
      Y       "Altezza"                736 Menu ( AltBBSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  840 ShowAlways
      Z       "Profondita'"            200 Utente ( )

      Cuc_Alt_Zoc    ""                 17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca  "ininfluente altezza posizione"   2

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      Verso         "verso della scocca"    -1 Menu ( DXSX )
      No_Pie      "" 0

      VAR_Vuoto   "Solo Ingombro?" 0 //Menu ( bool )

      spPanR "Spessore pannello retro"  38
      spPanF "Spessore pannello fronte" 18
      Aria "" 1.5
      offsetZ "" 24

      FIN_var_fro  "" "C001"
      FIN_var_rt   "" "C002"

      idx_sx       "" -1
      idx_dx       "" -1

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1
      idx_cnear_up "" -1
      idx_cnear_dw "" -1

      idx_near_ang_rsx "" -1
      idx_near_ang_rdx "" -1

      COD_EREDITA      ""      "PRE;POST;C011_PRE"
      CMP2_AZIONI      ""      "S"

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

      M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zr"

      XGLASS "Num. XGLASS" "" Utente ( )

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      Cucina_Versione_Idx = SE_NUM( IS_IDX(idx_sx), idx_sx, idx_dx)
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB punti_completi
      GOSUB DefVanoBasi

      GOSUB DefPuntiTop

      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB CambiaPuntoConnessione

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli

      spPanF = 4
      if( MaterialeFrontale == "WILDWOOD" )     { spPanF = 18                          }
      if( VAR_Melaminico == 1)                  { spPanF = $Cuc_Spe_Ant_Mel            }
      if( Cucina_Versione > 2 )
      {
         offsetZ = 25
         if( MaterialeFrontale == "MELAMINICO") { spPanF = $Cucina_2_5_Anta_36e8_Dim.z }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      if( VAR_VAL(ATTUALE(),"ORD_Z") > 0 )
      {
         Z = VAR_VAL(ATTUALE(),"ORD_Z")
         Zt = Z
         GEST_Z = Z
      }

      if( Cucina_Versione > 2)
      {
         Z = 2*spPanR + spPanF
         Zt = Z
         GEST_Z = Z
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura Offset
   {
      GOSUB Cuc_Offset_ScoccaT
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Riposizionamento tamponamento"))
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Blocco bl1
   {
      @base_0 = base_0
      @base_0.z = base_0.z + offsetZ
      @base_0.y = base_0.y + Cuc_Alt_Zoc

      @X = X
      @Y = Y - 17.5 - Aria
      @Z = spPanR
      FIN_var = FIN_var_rt
      GOSUB rivestimento
   }

   Posiziona Blocco bl2
   {
      @base_0 = base_0
      @base_0.z = base_0.z + spPanR + offsetZ
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @X = X
      @Y = Y - 17.5 - Aria
      @Z = spPanR
      FIN_var = FIN_var_rt
      GOSUB rivestimento
   }

   Posiziona Blocco fronte
   {
      @base_0.x = base_0.x + Aria
      @base_0.y = base_0.y + Cuc_Alt_Zoc +Aria
      @base_0.z = base_0.z + 2*spPanR + offsetZ
      @X = X - 2*Aria
      @Y = Y - 2*Aria
      @Z = spPanF
      FIN_var = FIN_var_fro
      FIN_orie = "O"
      GOSUB rivestimento

      //Luca - per export XGLASS - provvisioria
      //Luca 07/02/2020
      @AttivaVetroExportDWG_XG = 0
      wk_XGLASS = VAR_VAL_STR(idx_att,"XGLASS")
      if( wk_XGLASS!="" ) { @AttivaVetroExportDWG_XG = 1 }
   }

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10  +100
      @Z = Z - 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 10
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 10
      @X = X - 20
      @Y = Y - 40
      @Z = Z - 20
   }
}

//Alberto B. 12/01/21
Elemento ScoccaT_BaseFrigo
{
   Descrizione = "Base Frigo"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo;OnChangedVar

   Variabili
   {
      VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 //Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      //LZ 01/06/2021: REV 1 - Gestione staffa sottotop
      VAR_Revisione   ""               0

      X       "Larghezza base"         600 Menu ( LargBBSS ) Utente ( )

      Y       "Altezza"                920 ShowAlways
      Yt      "(Altezza con Piedini)"  920 ShowAlways

      Z       "Profondita' fianco"     606 Menu ( ProfBBSS ) Utente ( )
      Zt      "(Profondita')"          606 ShowAlways

      Cuc_Alt_Zoc    ""                               17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca  "ininfluente altezza posizione"   2

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      TipoRipiano "Tipo ripiano"  1

      Verso         "Verso della scocca"    -1 Menu ( DXSX )
      No_Pie      "" 0

      VAR_Vuoto   "Solo Ingombro?" 0
      //Menu ( bool )

      VAR_Lavello   "Base Lavello"  0
      //Luca 10/06/2020 verifico se c'è un lavello attrezzato
      ConLavello     "" 0

      ConCielo    "Con Cielo/Coperchio?"   0 Menu ( bool )

      VAR_CatR_OV  "catena retro: 0=orizzontale 1= verticale"  0 Boolean
      VAR_CatF_OV  "catena fronte: 0=orizzontale 1= verticale" 0 Boolean

      //prevedo inserimento di barra per elementi a sbalzo
      VAR_BarraSost1  "Barra Sostegno elemento sbalzo" 0
      VAR_BarraSost2  "Barra Sostegno elemento sbalzo" 0

      VAR_LavPC_FiaSx "Lavorazione PianoCottura Fianco SX" 0
      VAR_LavPC_FiaDx "Lavorazione PianoCottura Fianco DX" 0

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 SaveAlways
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 SaveAlways
      VAR_PassaC_OffY  "Altezza passacavi" 0 Utente ( ) SaveAlways
      VAR_PassaC_OffZ  "" 0  SaveAlways

      VAR_PanDivInd    "Presenza ripiano di dissipazione" 0

      // FT 29/01/2020 - per debug
      VAR_vedi_ingombro "" 0

      PortaBombola "predispongo per bombola del gas?"          0
      //Menu ( bool )
      StrPerGola   "predisposizione per gola"   ""
      //TabBmp ( "cuc\tab\Cuc_StrGola.TXT" ) Implicit

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1
      idx_cnear_up "" -1
      idx_cnear_dw "" -1

      idx_near_ang_rsx "" -1
      idx_near_ang_rdx "" -1

      idx_near_snack "" -1

      COD_EREDITA      ""      "PRE;POST;C011_PRE"
      CMP2_AZIONI      ""      "S"

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

      M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zr"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni

      if( ACTION() == 0) { HIDE_ON_EDIT(ATTUALE(),"Verso;ConCielo;VAR_Cat*",$ATTIVA_DLL) }
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_BaseFrigo","")
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne

      GOSUB punti_YtZt

      GOSUB DefVanoBasi

      GOSUB DefPuntiTop

      // FT 29/01/2020
      // dichiaro il punto centrale che poi utilizzerò
      // per il controllo della barra isola
      pnt_base_cx = [Xt / 2, 0, 0]

      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBarra
      GOSUB DefPuntiStendiBifacciale
      //Luca 15/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      //GOSUB GestioneLivelliOnWall
      //GOSUB Cuc_BaseSuAng135

      GOSUB OnQueryBdmLocal_Basi_Cuc

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli

      COMPONENTI2("comp_frigo",ATTUALE(),"FroFrigo")
      i = 1
      while ( i<=comp_frigo )
      {
         SET_#(comp_frigo[i])

         i = i + 1
      }
   }

   Gestionale
   {

      GOSUB GestComune
      //GOSUB CucP_SetVarGest
      //GOSUB Gest_idx_GFin

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      //Simone 15/11/2022
      GOSUB Set_Gest_C008

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura Offset
   {
      GOSUB Cuc_Offset_ScoccaT
   }

   //Procedura PostGestDllValida
   //{
   //   GOSUB AddBifaccialiDefault
   //
   //   GOSUB PGDV_RicalcolaAngolo
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
      //GOSUB CucP_Cancella
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoBaseFrigo fbs
   {
      //@Verso_pdr = Verso
      @escluso = VAR_Lavello
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10  +100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      //@Y = Y - 40
      @Y = 60
      @Z = Z - 200
   }

   //Luca 07/06/2019
   //aggiunto per cercare il bifacciale
   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   //Luca 19/07/2019 per piano SNACK
   Posiziona _cont_per_near nsnk
   {
      idx_near_snack = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z - 40
      @X = X - 100
      @Y = 100
      @Z = 80
   }

   //angolo retro sx
   Posiziona _cont_per_near narsx
   {
      idx_near_ang_rsx = ATTUALE()
      @base_0.x = base_0.x - 25
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 25
      @X = 50
      @Y = Y - 100
      @Z = 50
   }

   //angolo retro dx
   Posiziona _cont_per_near nardx
   {
      idx_near_ang_rdx = ATTUALE()
      @base_0.x = base_0.x + X - 25
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 25
      @X = 50
      @Y = Y - 100
      @Z = 50
   }

   // FT 29/01/2020 - elemento per controllo del centro-base
   // (per facilitare la quotatura e debug nel caso di gestione
   // del gruppo di isole)
   Posiziona _IngombroDirezionale IngDir
   {
      @escluso = 1 - VAR_vedi_ingombro
      GOSUB posa_blocco
   }
}

Elemento ScoccaT_Base_AirKitchen
{
   Descrizione = "Base standard"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Base;a_terra;PerZoccolo;OnChangedVar

   Variabili
   {
      VAR_Revisione_PanDiss "" 0 SaveAlways

      VAR_Aggancio "--> CAMBIA CONNESSIONE <--" 0 //Boolean ShowAlways

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"              560 ShowAlways

      Y       "Altezza"                845 Menu ( AltBBSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  840 ShowAlways

      Z       "Profondita'"            544
      Zt      "(Profondita')"          544 ShowAlways

      //----------------------------------------------

      Cuc_Alt_Zoc    ""                               17

      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca  "ininfluente altezza posizione"   2

      TipoRipiano "Tipo ripiano"  1

      Verso         "Verso della scocca"    -1// Menu ( DXSX )
      No_Pie      "" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      // FT 29/01/2020 - per debug
      VAR_vedi_ingombro "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1
      idx_cnear_up "" -1
      idx_cnear_dw "" -1

      idx_near_ang_rsx "" -1
      idx_near_ang_rdx "" -1

      idx_near_snack "" -1

      COD_EREDITA      ""      "PRE;POST;C011_PRE"
      CMP2_AZIONI      ""      "S"

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

      M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zr"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      X_FiaVetro = 4

      X_Base = X - 2*X_FiaVetro
      Y_Base = 736
      Z_Base = Z - $Cuc_Spe_Bif - $Cuc_Aria_Ant_Z - $Cuc_Spe_Fro

      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      Zt = Z

      GOSUB punti_completi
      GOSUB DefVanoBasi
      GOSUB DefPuntiTop

      // FT 29/01/2020
      // dichiaro il punto centrale che poi utilizzerò
      // per il controllo della barra isola
      pnt_base_cx = [Xt / 2, 0, 0]

      GOSUB DefPuntiZocc
      GOSUB DefPuntiGola
      GOSUB DefPuntiStampa

      if( $ATTIVA_DLL == 0 )
      {
         GOSUB DefPuntiStendiBarra
         GOSUB DefPuntiStendiBifacciale
         GOSUB DefPuntiStendiFFinitura
      }

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Basi_Cuc
      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBasi

      GOSUB CtrlPosizioneRipiani

      //GOSUB CtrlPianoCottura
      //GOSUB CtrlPianoCottura_Basi240

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      GEST_X = X_Base
      GEST_Y = Y_Base + $Cuc_Y_AirK_Scatolato
      GEST_Z = Z - $Cuc_Spe_Bif

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostGestDllValida
   {
      RicalcolaOnInsert(ATTUALE())
   }

   //Procedura Offset
   //{
   //   GOSUB Cuc_Offset_ScoccaT
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona ScoccaT_BaseStandard base
   {
      @base_0.x = base_0.x + X_FiaVetro
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Cuc_Spe_Bif

      @X = X_Base
      @Y = Y_Base
      @Z = Z_Base

      idx_base = ATTUALE()
      @FLAG_AirKitchen = 1
   }

   Posiziona Cuc_PannelloSottotop_AirKitchen pst
   {
      @X = X_Base - 2
      @Z = Z_Base

      //@base_0.x = base_0.x + X_FiaVetro
      @base_0.x = base_0.x + ( X - @X )/2
      @base_0.y = base_0.y + Y_Base - 2
      @base_0.z = base_0.z + $Cuc_Spe_Bif
   }

   Posiziona Cuc_Supporto_AirKitchen sak
   {
      @base_0.x = base_0.x + X_FiaVetro
      @base_0.y = base_0.y + Y_Base - 2 + 19
      @base_0.z = base_0.z + $Cuc_Spe_Bif

      @Z = Z_Base
      @Y = $Cuc_Y_AirK_Scatolato
   }

   Posiziona FiancoFinitura FiaSx
   {
      @base_0.x = base_0.x - @X + X_FiaVetro
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z

      @X = X_FiaVetro
      @Y = Y - 2*$Cuc_Aria_Ant_Y
      @Z = Z

      @FiancoAirKitchen_Lato = -1
   }

   Posiziona FiancoFinitura Fiadx
   {
      @base_0.x = base_0.x + X - X_FiaVetro
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z

      @X = X_FiaVetro
      @Y = Y - 2*$Cuc_Aria_Ant_Y
      @Z = Z

      @FiancoAirKitchen_Lato = 1
   }

   Posiziona Cuc_AntaBifacciale bif
   {
      @base_0.x = base_0.x + X_FiaVetro + @X
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z + @Z + $Cuc_Aria_Ant_Z

      @X = X_Base - 2*$Cuc_Aria_Ant_X
      @Y = Y - 2*$Cuc_Aria_Ant_Y

      @ang_y = 180
   }

   Posiziona Cuc_FrontaleFisso ffix
   {
      @escluso = 1
      @base_0.x = base_0.x + X_FiaVetro + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Y_Base - $Cuc_Aria_Ant_Y - @Y
      @base_0.z = base_0.z + $Cuc_Spe_Bif + Z_Base - @Z

      @X = X_Base - 2*$Cuc_Aria_Ant_X
      @Y = 103
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10  +100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      @Y = Y - 40
      @Z = Z - 200
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 100
      @base_0.y = alto_0.y - 20
      @base_0.z = base_0.z + 100
      @X = X - 200
      //@Y = Y - 40
      @Y = 60
      @Z = Z - 200
   }

   //Luca 07/06/2019
   //aggiunto per cercare il bifacciale
   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

}
//} SCOCCHE BASI

//{ SCOCCHE COLONNE
Elemento ScoccaT_ColStandard
{
   Descrizione = "Colonna standard"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      FILLER " " ""

      X       "Larghezza colonna"      600   Menu ( LargCCSS ) Utente ( )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    ""                               17

      //0 Terra - 2 Sospesa
      TipoScocca  "Posizione Colonna"   0 Menu ( PosBLVS )
      //TipoScocca  "Posizione Colonna"   0 Menu ( PosCol )

      TipoFrontale "Tipo frontali colonna"   1 Menu ( TpFrCl )
      Verso         "Verso della scocca"    -1
      // Menu ( DXSX )
      No_Pie      "" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      VAR_Vuoto   "Solo Ingombro?" 0
      //Menu ( bool )

      FLAG_soffietto "Colonna Soffietto" 0 Menu ( SiNo )

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

      M4_CNT_LINK_MODE__ ""   2
      M4_CNT_MODE__      ""   1

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;FLAG_soffietto;TipoFrontale;Verso;VAR_Vuoto",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //GOSUB CtrlRipianiStdColonna

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostControl
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoColStandard fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona KitLed_Arm20 led
   {
      @escluso = 1
      if( TipoFrontale == 6
        & Cucina_Versione <= 2) { @escluso = 0 }

      GOSUB Cuc_PosaFustoStd

      @X = X - 2*$Cuc_Spe_Fia
      @Y = @Y - $Cuc_Spe_Cop - $Cuc_Spe_Fnd

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = @base_0.y + $Cuc_Spe_Fnd

      @Sens_Escluso = 1
   }

   //Luca 17/12/2019
   Posiziona Dummy mcsf
   {
      @escluso = 1
   }
   //Posiziona RigaOrdine_NonGraficato mcsf
   //{
   //   @escluso = 1
   //   if( FLAG_soffietto==1 ) { @escluso = 0 }
   //   @base_0 = base_0
   //   @GEST_CODICE = "D06007"
   //   @X = 50
   //   @Y = 500
   //   @Z = 50
   //}

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }
}

Elemento ScoccaT_ColAngPan
{
   Descrizione = "Colonna angolo pannello"
   Code        = CUC
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias Base;a_terra;PerZoccolo;PerGola;AngPannello

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"    1

      X                        "Larghezza Fusto"                             1104   Menu      (   LargBASS   )   Utente   (   )
      Xt                       "Larghezza complessiva"                       1128   Menu      (   LargBASM   )   Utente   (   )

      Y                        "Altezza"                                     2126   Menu      (   AltCCSS    )   Utente   (   )
      Yt                       "(Altezza con Piedini)"                       2143   ShowAlways

      Z                        "Profondità fianco"                           604    Menu      (   ProfCCSS   )   Utente   (   )
      Zt                       "(Profondità)"                                604

      //sola lettura profondità fianchi + ante
      Zr                       "(Profondità) "                               606    ShowAlways

      //definizione variabili reali elemento
      X_Ingombro               "Larghezza complessiva"                       1020
      Z_Fianco                 "Profondità fianchi"                          496
      Z_Pannello               "Profondità Fianco accosto"                   496
      X_Anta                   "Dimensione Vano anta"                        602 // Errata, vedi Assegnazioni
      DistMuro                 "Distanza dal muro laterale"                  100
      X_Mont                   "Lunghezza montante (sola visualizz.)"        115
      Z_Mont                   "Profondità montante (sola visualizz.)"       30
      NoMont                   "Escludo Montante"                            0

      //Menu ( SiNo )
      PannelloComeAnta         "Pannello di chiusura spessore anta?"         0
      //Menu ( SiNo )
      SpePannAcc               "Spessore pannello accosto"                   0

      X_Mass                   "Larg. Massello basette"                      50
      Z_Mass                   "Prof. Massello basette"                      75

      OffsetZ_PanFix           ""                                            3

      X_DistAng                "Larg. distanziale angolo"                    115
      Z_DistAng                "Prof. distanziale angolo"                    31

      Con_DistAng              "Distanzione angolo"                          1      Menu      (   SiNo       )
      Y_DistAng                "Distanziale angolo altezza"                  67
      PosY_DistAng             "Distanziale angolo posizione"                0

      //dichiaro per compatibilità
      Con_DistMan              "Distanziale per elementi con maniglia"       0
      X_DistMan                ""                                            65

      Cuc_Alt_Zoc              ""                                            17
      No_Pie                   ""                                            0

      //0 Terra - 2 Sospesa
      TipoScocca               "Posizione Colonna"                           0      Menu      (   PosBLVS    )
      //TipoScocca "Posizione Colonna" 0 Menu ( PosCol )
      TipoFrontale             "Tipo frontali colonna"                       1      Menu      (   TpFrCl     )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale        "Materiale Frontale"                          ""
      VAR_Melaminico           ""                                            0      SaveAlways

      ang                      "Angolo"                                      90
      //Utente ( 80-110 )
      ang_prec                 "Angolo pecedente"                            90
      //impostati a zero per forzare 1 rigenera in +
      Verso                    "Verso della scocca"                          -1
      //Menu ( DXSX ) SaveAlways
      Verso_prec               ""                                            -1     SaveAlways

      Modifica_Dimensioni      "Modifica Dimensioni"                         0
      //Boolean
      VAR_Vuoto                "Solo Ingombro?"                              0
      //Menu ( bool )
      FuoriSquadraBA           "Tipo di Fuorisquadro"                        "SCHIENE"

      VAR_CatR_OV              "catena retro: 0=orizzontale 1= verticale"    0
      //Boolean
      VAR_CatF_OV              "catena fronte: 0=orizzontale 1= verticale"   0
      //Boolean

      StrPerGola               "predisposizione per gola"                    ""
      //TabBmp ( "cuc\tab\Cuc_StrGola2.TXT" ) Implicit

      COD_EREDITA              ""                                            "PRE;POST"
      CMP2_AZIONI              ""                                            "S"

      //gestione angolo FS
      tipo_ang_muro            ""                                            "S"
      offset_muro              ""                                            0

      TIPO__                   "per M4 definisce il tipo di elemento"        1
      STENDI_AUTO_ANGOLO       ""                                            2

      M4_CNT_LINK_MODE__       ""                                            2
      M4_CNT_MODE__            ""                                            1

      //M4_VAR "" "VAR_Aggancio;X;Y;Yt;Z;Zt"

      FillerM2G                " "                                           ""     ShowAlways

      FLAG_Debug               ""                                            0      Boolean   NoSave
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
      GOSUB AssegAngoloPannello
      GOSUB salva_orig_ang_pan

      M4_GRUPPO__  = MSG(1001)

      M4_A_MURO = SE_NUM( TipoScocca == 0, 0, 1)

      if( ACTION() == 0) { HIDE_ON_EDIT( ATTUALE(), "TipoScocca;TipoFrontale",$ATTIVA_DLL) }

      if( X != VAR_VAL( idx_att, "X_prec")
        | Cucina_Versione != VAR_VAL( idx_att, "Cucina_Versione_prec"))
      {
         X_prec = X
         Cucina_Versione_prec = Cucina_Versione

         wk_Xt_min  = X + 24
         wk_Xt_menu = SE_STR( Cucina_Versione > 2, "LargBASM_25", "LargBASM")

         VAR_SET_MENU( ATTUALE(), "Xt", FMT( "{}( {} - {} )", wk_Xt_menu, STR(wk_Xt_min), ""))
      }
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      Cuc_Alt_Zoc = SE_NUM(TipoScocca<2,$Cuc_Alt_Zoc,0)

      GOSUB PosaSuAngolo
      GOSUB punti_completi_ang_pan

      GOSUB DefVanoBaseAng
      GOSUB Off_Muro_Ang

      GOSUB DefPuntiTopAngPan
      GOSUB DefPuntiZoccAngPan
      GOSUB DefPuntiGolaAngPan
      GOSUB DefPuntiStampaAngPan

      GOSUB DefPuntiStendiFFinitura
      GOSUB DefPuntiStendiBifacciale
      GOSUB CucP_PuntiNotevoli
   }

   Orientamenti
   {
      Sinistra base_o0, base_o1, alto_o0, alto_o1
      Destra   base_o3, base_o2, alto_o3, alto_o2
      Alto     alto_o0, alto_o1, alto_o3, alto_o2
      Basso    base_o0, base_o1, base_o2, base_o2
      Fronte   base_o1, base_o2, alto_o1, alto_o2
      Retro    base_o0, alto_o3, alto_o0, base_o3
   }

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 )
      {
         GOSUB GestioneLivelliOnWall
      }

      GOSUB Cuc_OnQueryBdmLocal

      //mi serve per sapere se sono passato o meno per questa sezione
      //il primo oggetto in assoluto inserito con 2°click non ci passa
      //COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," ScoccaRiposizionata=",STR(1)))

      if( $query_type==2 )
      {
         $QueryResult__ = 1
         //vano 0 per i frontali
         if( IS_MATCH(NOME($query_p1),"Cuc_Anta*")==1 )
         {
            if( $query_p2!=0 ) {  $QueryResult__ = 0 }
         }
         else
         {
            if( $query_p2==0 ) {  $QueryResult__ = 0 }
         }

         //Luca 02/12/2019
         //solo per Cuc_FroFixColAngolo
         if( NOME($query_p1)=="Cuc_FroFixColAngolo" )
         {
            $QueryResult__ = 0
            if( $query_p2==2 )  { $QueryResult__ = 1 }
         }
      }
      //GOSUB CucP_OnQueryBdmLocal
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Procedura Notifica
   {
      if( ACTION()==12 )
      {
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," ang=",STR(ang),
                        " offset_muro=",STR(offset_muro)))
      }
   }

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

      ricalcolaUna( ATTUALE(), 1, 1, "PostGestDllValida", ATTUALE())
   }

   Controlli
   {
      GOSUB CtrlComune

      //GOSUB CtrlBasi
      GOSUB CtrlColonne

      //Luca 02/12/2019
      GOSUB Ctrl_Cuc_DistAngolo

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      GOSUB ImpostaVersoPrec
      //GOSUB CtrlAngCassa
      //GOSUB ChiediMultiAngPan

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli

      GOSUB Set_Xt_AngPan
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
      @base_0.z = base_0.z +Z_Fianco -Z
   }

   Posiziona FustoColStandard fbs
   {
      GOSUB Cuc_PosaFustoStd
      @base_0.z = base_0.z +Z_Fianco -Z

      @FLAG_BaseAngolo = 1
      @Verso_BA = Verso
   }

   //Luca 21/04/2020
   //{ gestione fusti configurati
   //tutti questi elementi sono stati portati dentro al fusto
   Posiziona Dummy pan
   {
      @escluso = 1
   }
   Posiziona Dummy masint
   {
      @escluso = 1
   }
   Posiziona Dummy mont
   {
      @escluso = 1
   }
   //Posiziona Cuc_PannelloAngolo pan
   //{
   //   @escluso = VAR_Vuoto
   //   @X = X - X_Anta - X_Mass
   //   @Z = $Cuc_Spe_Fia
   //   //Luca 04/03/2020
   //   //riporto modifiche dimensionali fatte da LAGO
   //   //@Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop
   //   //@base_0.x = base_0.x + $Cuc_Spe_Fia
   //   @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - 1
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + 1
   //
   //   if( Verso==1 )
   //   {
   //      //@base_0 = base_4
   //      //@base_0.x = base_4.x - @X + $Cuc_Spe_Fia
   //      //Luca 04/03/2020
   //      //riporto modifiche dimensionali fatte da LAGO
   //      //@base_0.x = base_6.x - $Cuc_Spe_Fia - @X
   //      @base_0.x = base_6.x - $Cuc_Spe_Fia - @X - 1
   //   }
   //   //@base_0.y = base_0.y +Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
   //
   //   //Luca 04/03/2020
   //   //riporto modifiche dimensionali fatte da LAGO
   //   //@base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Spe_Fnd
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Spe_Fnd + 0.5
   //   @base_0.z = base_0.z + Z - $Cuc_Spe_Fia + OffsetZ_PanFix
   //
   //   @ang = ang
   //   //GOSUB CucP_Posiziona
   //}
   //
   //Posiziona Cuc_MasselloAngolo masint
   //{
   //   @escluso = VAR_Vuoto
   //   @X = X_Mass
   //   @Z = Z_Mass
   //   @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop
   //
   //   //Luca 20/11/2019 rev
   //   //@base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) + 1
   //   //if( Verso==1 ) {  @base_0.x = base_6.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X - 1 }
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) + 2
   //   if( Verso==1 ) {  @base_0.x = base_6.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X - 2 }
   //
   //   //@base_0.y = base_0.y +Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Spe_Fnd
   //   @base_0.z = base_0.z + Z - Z_Mass
   //
   //   @ang = ang
   //   //aliasposiz = "pannang"
   //   //GOSUB CucP_Posiziona
   //}
   //
   //Posiziona Cuc_MontanteAng mont
   //{
   //   //@escluso = VAR_Vuoto
   //   @escluso = 1 - Con_DistAng
   //
   //   @X = X_DistAng
   //   @Z = Z_DistAng
   //   //@Y = Y
   //   @Y = Y_DistAng
   //
   //   @Verso = Verso
   //
   //   //@base_0.x = base_0.x + 370
   //   //Luca 04/03/2020
   //   //riporto modifiche dimensionali fatte da LAGO
   //   //@base_0.x = base_0.x + 395
   //   @base_0.x = base_0.x + 392
   //
   //   if( Verso>0 )
   //   {
   //      //@base_0.x = base_0.x + X - 370 - @X
   //      //Luca 04/03/2020
   //      //riporto modifiche dimensionali fatte da LAGO
   //      //@base_0.x = base_0.x + X - 395 - @X
   //      @base_0.x = base_0.x + X - 392 - @X
   //   }
   //   @base_0.y = base_0.y + Cuc_Alt_Zoc + PosY_DistAng
   //   @base_0.z = base_0.z + Z
   //}
   //} gestione fusti configurati

   Posiziona _cont_per_near_2 nsx
   {
      @X = 1
      @Y = Y - 10
      @Z = Z - 20

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 5
      @base_0.z = base_0.z + 10

      @ang_y = 0

      if( Verso < 0)
      {
         @Z = X_Pannello + DistMuro - 20

         @base_0.x = base_2.x + 10
         @base_0.z = base_2.z

         @ang_y = 90
      }

      idx_cnear_sx = ATTUALE()
   }

   Posiziona _cont_per_near_2 ndx
   {
      @X = 1
      @Y = Y - 10
      @Z = Z - 20

      @base_0.x = base_6.x - @X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 5
      @base_0.z = base_0.z + 10

      @ang_y = 0

      if( Verso > 0)
      {
         @Z = X_Pannello + DistMuro - 20

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

         @ang_y = -90
      }

      idx_cnear_dx = ATTUALE()
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco

      @X = Xt
      @Y = Yt
      @Z = Zt

      if( Verso < 0)
      {
         @base_0.x = base_0.x + (X - Xt)
      }
   }
}

Elemento Cuc_FroFixBasAngolo
{
   Descrizione = "Frontale fisso bas angolo"
   Code        = CUB
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Vestibile    ScoccaT_BaseAngPan
   Altimetro    Auto
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //dimensioni reali
      Xr                  "Larghezza"            368   ShowAlways
      Yr                  "Altezza"              368   ShowAlways

      X                   "Larghezza"            563
      Y                   "Altezza"              18
      Z                   "Profondità"           24    ShowAlways

      MaterialeFrontale   "Materiale Frontale"   ""
      VAR_Melaminico      ""                     0     SaveAlways

      TipoFrontale        "Tipo frontali"        1     Menu      (   TpFrCl   )

      Verso               ""                     0
      AntaInCoppia        ""                     0

      ConTopAccosto       ""                     0
      Spe_PanFin          ""                     4
      Spe_PanInt          ""                     19

      Rie_PanInt          ""                     3

      AriaX_VV            ""                     3

      FIN_PanFin          ""                     "C001"
      FIN_PanInt          ""                     "C002"

      idx_cnear           ""                     -1

      GEST_CODICE         ""                     ""
      RADICE              ""                     ""
      perRADICE           ""                     ""

      CMP2_AZIONI         ""                     "V"

      COD_EREDITA         ""                     "PRE;POST;C011_PRE"

      FillerM2G           " "                    ""    ShowAlways

      FLAG_Debug          ""                     0     Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
      GOSUB Cucina_Modello

      M4_MIS = "Filler*;Xr;Yr;Z*"

      Z = 24
      if( VAR_Melaminico)      { Z = 22 }
      if( Cucina_Versione > 2) { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }
   }

   PuntiNotevoli
   {
      Yr = Y - SE_NUM( Cucina_Versione > 2, 0, 2*$Cuc_Aria_Ant_Y)
      Xr = X

      GOSUB punti

      vano_0_0  = base_0
      vano_l_0  = X
      vano_p_0  = Z
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      wk_pos_dist = VAR_VAL(idx_ref,"PosY_DistAng")
      wk_dim_dist = VAR_VAL(idx_ref,"Y_DistAng")

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

      liv_max = VAR_VAL(idx_ref,"Y")

      liv2add[1] = 0
      liv2add[2] = liv_max
      liv2add[3] = wk_pos_dist
      liv2add[4] = wk_pos_dist + wk_dim_dist

      step = 92
      liv_att = step

      while ( liv_att<(liv_max-10) )
      {
         liv_ok = 1
         if( liv_att>wk_pos_dist & liv_att<(wk_pos_dist+wk_dim_dist) ) { liv_ok = 0 }
         if( ABS(liv_att-wk_pos_dist)<=10 )             { liv_ok = 0 }
         if( ABS(liv_att-wk_pos_dist-wk_dim_dist)<=10 ) { liv_ok = 0 }

         if( liv_ok==1 )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2add[ne]    = liv_att
         }
         liv_att = liv_att + step
      }

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

   Vesti
   {
      base_0.x = $vano_0.x + $Cuc_Aria_Ant_X
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z

      X = $larghezza - 2*$Cuc_Aria_Ant_X
      Y = $altezza

      if( Cucina_Versione > 2)
      {
         Y = Y - 2*$Cuc_Aria_Ant_Y
         base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Set_MaterialeFrontale_Ante

      if( Cucina_Versione > 2) { GOSUB AttrezzaGraficaFrontale }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }

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

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      perRADICE = "PAFIBAAN"
      if( Cucina_Versione > 2) { perRADICE = "PAFIBAAN3" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," //Cuc_FroFixBasAngolo"))
   }

   Procedura cancella
   {
      if( $StartingDel__!=ATTUALE() ) { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //Cancella ",NOME(ATTUALE())))
   }

   Posiziona FroStandard fr
   {
      @escluso = VAR_Melaminico
      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z - $Cuc_Spe_Ant
      @Y = Yr
      @Z = $Cuc_Spe_Ant
   }

   Posiziona FroStandardMel frmel
   {
      @escluso = 1 - VAR_Melaminico
      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z - $Cuc_Spe_Ant_Mel
      @Y = Yr
      @Z = $Cuc_Spe_Ant_Mel
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento Cuc_FroFixColAngolo
{
   Descrizione = "Frontale fisso col angolo"
   Code        = CUB
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Vestibile    ScoccaT_ColAngPan
   Altimetro    Auto
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //dimensioni reali
      Xr                  "Larghezza"               368   ShowAlways
      Yr                  "Altezza"                 368   ShowAlways

      X                   "Larghezza"               563
      Y                   "Altezza"                 18
      Z                   "Profondità"              23    ShowAlways

      MaterialeFrontale   "Materiale Frontale"      ""
      VAR_Melaminico      ""                        0     SaveAlways

      ConTopAccosto       ""                        0
      SpeTopAccosto       ""                        0

      XVetro1             ""                        100

      TipoFrontale        "Tipo frontali colonna"   1     Menu   (   TpFrCl   )

      Verso               ""                        0
      AntaInCoppia        ""                        0

      Spe_PanFin          ""                        4
      Spe_PanInt          ""                        19

      Rie_PanInt          ""                        3

      AriaX_VV            ""                        3

      FIN_PanFin          ""                        "C001"
      FIN_PanInt          ""                        "C002"

      idx_cnear           ""                        -1

      perRADICE           ""                        ""
      RADICE              ""                        ""

      GEST_CODICE         ""                        ""

      CMP2_AZIONI         ""                        "V"

      COD_EREDITA         ""                        "PRE;POST;C011_PRE"

      FillerM2G           " "                       ""    ShowAlways

      FLAG_Debug          ""                        0     Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
      GOSUB Cucina_Modello

      if( ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"TipoFrontale",$ATTIVA_DLL)
      }

      Z = $Cuc_Spe_Ant_Col
      if( VAR_Melaminico )     { Z = $Cuc_Spe_Ant_Mel }
      if( Cucina_Versione > 2) { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }

      GOSUB Set_Rev_NowNastro_Gest_C179
   }

   PuntiNotevoli
   {
      Yr = Y - SE_NUM( Cucina_Versione > 2, 0, 2*$Cuc_Aria_Ant_Y)
      Xr = X

      GOSUB punti

      vano_0_0  = base_0
      vano_l_0  = X
      vano_p_0  = Z
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      wk_pos_dist = VAR_VAL(idx_ref,"PosY_DistAng")
      wk_dim_dist = VAR_VAL(idx_ref,"Y_DistAng")

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

      liv_max = VAR_VAL(idx_ref,"Y")

      liv2add[1] = 0
      liv2add[2] = liv_max
      liv2add[3] = wk_pos_dist
      liv2add[4] = wk_pos_dist + wk_dim_dist

      step = 92
      liv_att = step

      while ( liv_att<(liv_max-10) )
      {
         liv_ok = 1
         if( liv_att>wk_pos_dist & liv_att<(wk_pos_dist+wk_dim_dist) ) { liv_ok = 0 }
         if( ABS(liv_att-wk_pos_dist)<=10 )             { liv_ok = 0 }
         if( ABS(liv_att-wk_pos_dist-wk_dim_dist)<=10 ) { liv_ok = 0 }

         if( liv_ok==1 )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2add[ne]    = liv_att
         }
         liv_att = liv_att + step
      }

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

   Vesti
   {
      X = $larghezza - 2*$Cuc_Aria_Ant_X
      Y = $altezza - SpeTopAccosto*ConTopAccosto

      base_0.x = $vano_0.x + $Cuc_Aria_Ant_X
      base_0.y = $vano_0.y + $livello + SpeTopAccosto*ConTopAccosto
      base_0.z = $vano_0.z + @OffsetZ_PanFix

      if( Cucina_Versione > 2)
      {
         Y = Y - 2*$Cuc_Aria_Ant_Y
         base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Set_MaterialeFrontale_Ante

      if( Cucina_Versione > 2) { GOSUB AttrezzaGraficaFrontale }

      XVetro1 = X
      if( TipoFrontale > 1)
      {
         XVetro1 = 207
         if( X>=635 ) { XVetro1 = 247 }
         if( X>=705 ) { XVetro1 = 267 }
      }

      GOSUB Ctrl_FroFixAppoggioSuTop
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "C011_PRE") { GOSUB Set_Gest_C011 }
      if( TABER_REGOLA == "POST")     { GOSUB Set_MaterialeFrontale_Ante }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr
      perRADICE = "FRFICOCU"
      if( TipoFrontale > 1)    { perRADICE = "FRFICOCUN" }
      if( Cucina_Versione > 2) { perRADICE = STRCAT( perRADICE, "3") } //FRFICOCU3, FRFICOCUN3

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," //Cuc_FroFixColAngolo"))
   }

   Procedura cancella
   {
      if( $StartingDel__!=ATTUALE() ) { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //Cancella ",NOME(ATTUALE())))
   }

   Posiziona Blocco panfin
   {
      @escluso = 0
      if( TipoFrontale > 1
        | VAR_Melaminico == 1) { @escluso = 1 }
      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco

      @X = XVetro1
      @Y = Yr
      @Z = Spe_PanFin

      @base_0.z = base_0.z + Z - Spe_PanFin
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

   Posiziona Blocco panInt
   {
      @escluso = 0
      if( TipoFrontale > 1
        | VAR_Melaminico == 1) { @escluso = 1 }
      if( Cucina_Versione > 2) { @escluso = 1 }

      @X = X - 2*Rie_PanInt
      @Y = Yr
      @Z = Spe_PanInt

      @base_0.x = base_0.x + Rie_PanInt
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z

      FIN_var = FIN_PanInt
      GOSUB rivestimento
   }

   Posiziona Blocco panmel
   {
      @escluso = 1 - VAR_Melaminico

      GOSUB posa_blocco

      @Y = Yr
      @X = XVetro1

      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

   Posiziona Pannello_AntaNOW panN
   {
      @escluso = 1
      if( TipoFrontale > 1
        & VAR_Melaminico == 0
        & Cucina_Versione <= 2) { @escluso = 0 }

      @X = X - 2*Rie_PanInt
      @Y = Yr
      @Z = Spe_PanInt

      @base_0.x = base_0.x + Rie_PanInt
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z

      FIN_var = FIN_PanInt
      GOSUB rivestimento
   }

   Posiziona Vetro_AntaNOW vetnow1
   {
      @escluso = 1
      if( TipoFrontale > 1
        & VAR_Melaminico == 0
        & Cucina_Versione <= 2) { @escluso = 0 }

      GOSUB posa_blocco

      @X = XVetro1
      @Y = Yr
      @Z = Spe_PanFin

      @base_0.z = base_0.z + Z - Spe_PanFin
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

   Posiziona Vetro_AntaNOW vetnow2
   {
      @escluso = 1
      if( TipoFrontale > 1
        & VAR_Melaminico == 0
        & Cucina_Versione <= 2) { @escluso = 0 }

      @Z = Spe_PanFin
      @Y = Yr
      @X = X - XVetro1 - AriaX_VV

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z - Spe_PanFin

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

   Posiziona _cont_per_near cnear
   {
      idx_cnear = ATTUALE()

      @X = X - 20
      @Y = 80
      @Z = Z - 10

      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y - 80
      @base_0.z = base_0.z + 5
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento ScoccaT_ColLvst
{
   Descrizione = "Colonna lavastoviglie"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      VAR_RevBarraInfLvtrSoff   "" 0  SaveAlways

      FILLER " " ""

      X       "Larghezza colonna"      640   Menu ( LargCLVS )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    ""                               17

      //0 Terra - 2 Sospesa
      TipoScocca  "Posizione Colonna"   0 Menu ( PosCol )

      TipoFrontale "Tipo frontali colonna"   1 Menu ( TpFrCl )

      //0 maniglia
      //1 servo drive
      TipoApertura "Apertura Lvst"   0 Menu ( ApeBLVS )

      Verso         "Verso della scocca"    -1
      //Menu ( DXSX )
      No_Pie      "" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      VAR_Vuoto   "Solo Ingombro?" 0
      // Menu ( bool )

      FLAG_soffietto "Colonna Soffietto" 0 Menu ( SiNo )

      AliasScocca    "variabile alias per CAM" "COSTD"

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_BarraInfLvtrSoff", "VAR_RevBarraInfLvtrSoff")

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      YVanoLvst = 822
      //Simone 17/05/2022
      if( FLAG_soffietto == 1 ) { YVanoLvst = 822 - 13 }

      YVanoApertura = 70
      YVanoSuperiore = Y - YVanoLvst - $Cuc_Spe_Div  - YVanoApertura - $Cuc_Spe_Div - $Cuc_Spe_Cop

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;FLAG_soffietto;TipoApertura;TipoFrontale",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne

      vano_0_0.y = Cuc_Alt_Zoc + YVanoLvst +  YVanoApertura + $Cuc_Spe_Fnd + $Cuc_Spe_Div
      vano_h_0   = YVanoSuperiore

      //Luca 25/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 )
      {
         GOSUB GestioneLivelliOnWall
      }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //GOSUB CtrlRipianiStdColonna

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }
   //Procedura PostGestDllValida
   //{
   //   GOSUB CucP_PostGestDllValida
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini

      @PiediniSuFianco = 0
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @PiediniSuFianco = 1 }
   }

   Posiziona FustoColonnaLvst fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona Cuc_ZoccoloLvst zoc
   {
      //Luca 16/12/2019
      @escluso = 0
      if( FLAG_soffietto==1 ) { @escluso = 1 }
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z
      @X = X - 2*$Cuc_Aria_Ant_X
   }

   //Luca 20/04/2020
   Posiziona Dummy mcsf
   {
      @escluso = 1
   }
   ////Luca 17/12/2019
   //Posiziona RigaOrdine_NonGraficato mcsf
   //{
   //   @escluso = 1
   //   if( FLAG_soffietto==1 ) { @escluso = 0 }
   //   @base_0 = base_0
   //   @GEST_CODICE = "D06007"
   //   @X = 50
   //   @Y = 500
   //   @Z = 50
   //}

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   //per dbg
   //Posiziona Blocco lvst
   //{
   //   @base_0 = base_0
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia
   //   @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   //   @Y = YVanoLvst
   //   @Z = Z
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}
}

Elemento ScoccaT_ColFrigo
{
   Descrizione = "Colonna Frigo"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias Colonna;a_terra;PerZoccolo;PerCornice;PerFrigo;Eldom_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      ELD_TIPO_ELDOM "" "FRIGO"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      Filler2            " " "" ShowAlways

      X       "Larghezza colonna"      600   Menu ( LargCFSS ) Utente ( )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    ""                               17
      No_Pie      "" 0

      //0 Terra - 2 Sospesa
      TipoScocca           "Posizione Colonna"           0 Menu ( PosCol )
      TipoColFrigo         "Tipologia colonna Frigo"     1 Menu ( TpColFr )

      TipoFrontale "Tipo frontali colonna"   1 Menu ( TpFrCl )

      Verso         "verso della scocca"    -1

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      VAR_Vuoto   "Solo Ingombro?" 0

      VAR_XFrigo         "Larghezza Frigo"               0 SaveAlways
      VAR_ZFrigo         "Profondità Frigo"              0 SaveAlways
      VAR_YZoccFr        "Altezza zoccolo Frigo"         0 SaveAlways
      VAR_YSopraFr       "Altezza sopra Frigo"           0 SaveAlways
      VAR_YVanoMinFr     "Altezza minima vano Frigo"     0 SaveAlways
      VAR_YVanoMaxFr     "Altezza massimo vano Frigo"    0 SaveAlways
      VAR_DeltaAnFr      "Delta ante Frigo"              0 SaveAlways
      VAR_YAntaInFr      "Altezza anta inferiore Frigo"  0 SaveAlways
      VAR_YAntaSuFr      "Altezza anta superiore Frigo"  0 SaveAlways

      VAR_RidXVtrAnta    "Rid. vetro anta lato cerniere" 0 SaveAlways

      VAR_PosFondoFr     "Posizione fondo Frigo"         0
      //Utente ( )
      YVanoRip           "Altezza vano ripiani"          0
      YVanoFrigo         "Altezza vano frigo"            0

      YAntaInf           "Altezza anta inferiore"        0
      YAntaSup           "Altezza anta superiore"        0
      YAntaVas           "Altezza anta vasistas"         0

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      //M4_VAR "" "FILLER*;SchedaTecnica;VAR*"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoColFrigo;Verso;VAR_Vuoto;TipoFrontale",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni

      //Luca 21/02/2019 queste variabili devo calcolare sempre
      Cuc_Spe_FndFr = 21
      //GOSUB AssVarDefaultColonnaFrigo
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne

      vano_0_0.y = base_0.y + Cuc_Alt_Zoc + Y - $Cuc_Spe_Cop - YVanoRip
      vano_h_0   = YVanoRip

      //Luca 28/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiTop
      GOSUB DefPuntiCornice
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      GOSUB SetVarColonnaFrigo

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoColFrigo fcf
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona FrigoGenerico fri
   {
      @escluso = 1 - InsEldom

      @base_0.x = base_0.x + $Cuc_Spe_Fia + 2
      //@base_0.y = base_0.y + $Cuc_Alt_Zoc + VAR_PosFondoFr + $Cuc_Spe_Fnd
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosFondoFr + Cuc_Spe_FndFr
      @base_0.z = base_0.z + $Cuc_Rie_Fnd_ZR + 50
      @X = VAR_XFrigo
      @Y = YVanoFrigo
      @Z = VAR_ZFrigo

      if( VAR_XFrigo==0 ) { @X = X - 2*$Cuc_Spe_Fia - 4 }
      if( VAR_ZFrigo==0 ) { @Z = Z - 100 }

      @c_rivestimento = [0, 255, 0]
      if( VAR_EXIST(idx_att,"DescFrigo") ) { @DescEdit__ = DescFrigo }

      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom

      idx_eldom = ATTUALE()

      //aliasposiz = "fri"
      //GOSUB CucP_Posiziona
   }

#ifdef TE
   Posiziona FrigoDbg dbg
   {
      //@escluso = InsEldom
      @escluso = 1

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosFondoFr + Cuc_Spe_FndFr
      @base_0.z = base_0.z + Z - 20 - VAR_ZFrigo
      @X = VAR_XFrigo
      @Y = YVanoFrigo
      @Z = VAR_ZFrigo
   }
#endif

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }
}

Elemento ScoccaT_ColForno
{
   Descrizione = "Colonna Forno"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias Colonna;a_terra;PerZoccolo;PerCornice;PerFrigo;Eldom_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      ELD_TIPO_ELDOM "" "FORNO"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      Filler2            " " "" ShowAlways

      X       "Larghezza colonna"      600   Menu ( LargCFRN ) Utente ( )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    ""                               17
      No_Pie      "" 0

      //0 Terra - 2 Sospesa
      TipoScocca           "Posizione Colonna"           0 Menu ( PosCol )

      TipoColForno       "Tipologia vano eldom"          0 Menu ( TpColFn )
      TipoFrontale       "Tipo frontali colonna"         1 Menu ( TpFrCl )

      Verso         "verso della scocca"    -1

      VAR_Vuoto   "Solo Ingombro?" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      FLAG_soffietto "Colonna Soffietto" 0 Menu ( SiNo )

      VAR_XEld           "Larghezza Forno"               0
      VAR_ZEld           "Profondità Forno"              0

      VAR_YVanoMinEld    "Altezza minima vano Forno"     0 SaveAlways
      VAR_YVanoMaxEld    "Altezza massimo vano Forno"    0 SaveAlways
      VAR_YFroEld        "Altezza frontale forno"        0 SaveAlways
      VAR_DeltaBasso     "Delta basso"                   0 SaveAlways
      VAR_RotFroEld      "Rotazione anta eldom"          0 SaveAlways

      //#ifdef TEC
      VAR_PosYEld        "Posizione in altezza eldom"    0 Utente ( ) SaveAlways
      //#endif
      //
      //#ifndef TEC
      //VAR_PosYEld        "Posizione in altezza eldom"    0 SaveAlways
      //#endif

      YVanoRip           "Altezza vano ripiani"          0
      YVanoEld           "Altezza vano forno"            0
      YAntaInf           "Altezza anta inferiore"        0
      YAntaSup           "Altezza anta superiore"        0
      //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
      //YPieReg            "Altezza piedino regolatore"    2
      YPieReg            "Altezza piedino regolatore"    0

      //Luca 18/12/2019
      YSpesHPL           "Spessore HPL per colonna soff" 8

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      YFndFrn            "Spessore fondo forno"          19

      PosYRip1        "" 0
      PosYRip2        "" 0

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      //M4_VAR "" "FILLER*;SchedaTecnica;VAR*"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoColForno;FLAG_soffietto;Verso;VAR_Vuoto;TipoFrontale",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne
      //vano_0_0.y = Cuc_Alt_Zoc + Y - $Cuc_Spe_Cop - YVanoRip
      //vano_h_0   = YVanoRip

      //Luca 28/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiTop
      GOSUB DefPuntiCornice
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*")
              | IS_MATCH(NOME($query_p1),"*Cestone")  ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*")
              | IS_MATCH(NOME($query_p1),"*Cestone")  ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      GOSUB SetVarColonnaForno

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoColForno fcf
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona FornoGenerico for
   {
      @escluso = 1-InsEldom

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @base_0.z = base_1.z - @Z
      //@Z = Z

      @X_FRO = VAR_XEld
      if( VAR_XEld==0 ) { @X_FRO = X }

      //@Y_FRO = VAR_YFroEld
      @Y_FRO = VAR_YFroEld - VAR_DeltaBasso

      @VAR_RotFroEld =  VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld

      if( VAR_YFroEld==0 ) { @Y_FRO = YVanoEld }

      if( VAR_EXIST(idx_att,"DescForno") ) { @DescEdit__ = DescForno }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         //@X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff + 20

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }

      idx_eldom = ATTUALE()
   }

   Posiziona FornoDbg fdf
   {
      //@escluso = 1
      @escluso = 0
      if( InsEldom==1 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @X = X
      @Z = Z
      @Y = YVanoEld

      @VAR_YFroEld = VAR_YFroEld
      @VAR_RotFroEld = VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         @X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }
   }

   Posiziona Dummy mcsf
   {
      @escluso = 1
   }

   ////Luca 17/12/2019
   //Posiziona RigaOrdine_NonGraficato mcsf
   //{
   //   @escluso = 1
   //   if( FLAG_soffietto==1 ) { @escluso = 0 }
   //   @base_0 = base_0
   //   @GEST_CODICE = "D06007"
   //   @X = 50
   //   @Y = 500
   //   @Z = 50
   //}

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }
}

Elemento ScoccaT_ColLvstForno
{
   Descrizione = "Colonna lavastoviglie"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice;Eldom_Check;ColLvstForno

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      VAR_Revisione             "" 0  SaveAlways
      VAR_RevBarraInfLvtrSoff   "" 0  SaveAlways

      ELD_TIPO_ELDOM "" "FORNO"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      VAR_YAll       "Allineamento in altezza"  0  Menu ( AllLvstFrn )

      Filler2            " " "" ShowAlways

      X       "Larghezza colonna"      600   Menu ( LargCLVS )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    "" 17
      No_Pie         "" 0

      //0 Terra - 2 Sospesa
      TipoScocca     "Posizione Colonna"         0 Menu ( PosCol )
      TipoColForno   "Tipologia vano eldom"      0 Menu ( TpColFn )
      TipoFrontale   "Tipo frontali colonna"     1 Menu ( TpFrCl )

      //0 maniglia
      //1 servo drive
      TipoApertura "Apertura Lvst"   0 Menu ( ApeBLVS )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      FLAG_soffietto "Colonna Soffietto" 0 Menu ( SiNo )

      VAR_XEld           "Larghezza Forno"               0
      VAR_ZEld           "Profondità Forno"              0

      VAR_YVanoMinEld    "Altezza minima vano Forno"     0 SaveAlways
      VAR_YVanoMaxEld    "Altezza massimo vano Forno"    0 SaveAlways
      VAR_YFroEld        "Altezza frontale forno"        0 SaveAlways
      VAR_DeltaBasso     "Delta basso"                   0 SaveAlways
      VAR_RotFroEld      "Rotazione anta eldom"          0 SaveAlways

      VAR_PosYEld        "Posizione in altezza eldom"    0 SaveAlways
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      wk_DiffYFroEld    "Differenza H frontale/scocca"   0

      YVanoRip           "Altezza vano ripiani"          0
      YVanoEld           "Altezza vano forno"            0
      YAntaInf           "Altezza anta inferiore"        0
      YAntaSup           "Altezza anta superiore"        0
      //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
      //YPieReg            "Altezza piedino regolatore"    2
      YPieReg            "Altezza piedino regolatore"    0

      //Luca 18/12/2019
      YSpesHPL           "Spessore HPL per colonna soff" 8

      PosYRip1        "" 0
      PosYRip2        "" 0

      //YVanoLvst          "" 762.5
      //YPosFndLvst        "" 113.5
      //YZoccLvst          "" 171
      //Luca 24/07/2019 TODO 20540
      //YPosFndLvst        ""  69

      //LZ 11/11/2019 - Ulteriore revisione della colonna, sposto fondo a +7.5mm
      YVanoLvst          "" 760

      //LZ 12/12/2019 - Gestione temporanea per smaltire ante prodotte errate
      //YPosFndLvst        "" 71.5
      YPosFndLvst        "" 66.0
      YZoccLvst          "" 126.5

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      YFndFrn            "Spessore fondo forno"          19

      Verso         "verso della scocca"    -1
      //Menu ( DXSX )

      VAR_Vuoto   "Solo Ingombro?" 0
      // Menu ( bool )

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      //Luca 20/03/2020
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_ColLvstForno","")
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_BarraInfLvtrSoff", "VAR_RevBarraInfLvtrSoff")

      //if( TipoScocca==0 ) { M4_A_MURO = 0 }
      //else                { M4_A_MURO = 1 }

      //LZ 11/11/2019 - Ulteriore revisione della colonna, sposto fondo a +7.5mm
      if( TipoScocca==0 )
      {
         M4_A_MURO = 0
         YZoccLvst = 171

         //LZ 12/12/2019 - Gestione temporanea per smaltire ante prodotte errate
         //YPosFndLvst = 108.5 + 7.5
         YPosFndLvst = 108.5 + 7.5 - 5.5

         if( VAR_Revisione==1 )
         {
            //LZ 03/03/2021: revisione tecnica colonna lvst/forno
            //YZoccLvst   = 176.5
            YZoccLvst   = 183
            YPosFndLvst = 122

            YVanoLvst = 762
            //LZ 03/03/2021: revisione tecnica colonna lvst/forno
            if( VAR_YAll == 1 )
            {
               YZoccLvst   = 136
               YPosFndLvst = 75
            }
         }
      }
      else
      {
         M4_A_MURO = 1
         YZoccLvst = 126.5

         //LZ 12/12/2019 - Gestione temporanea per smaltire ante prodotte errate
         //YPosFndLvst = 64 + 7.5
         YPosFndLvst = 64 + 7.5 - 5.5

         //Luca 20/03/2020
         if( VAR_Revisione==1 )
         {
            //LZ 03/03/2021: revisione tecnica colonna lvst/forno
            //YZoccLvst   = 132
            YZoccLvst   = 138.5
            YPosFndLvst = 77.5

            YVanoLvst = 762
         }
      }

      //M4_VAR "" "FILLER*;SchedaTecnica;VAR*"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;VAR_YAll"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;FLAG_soffietto;TipoColForno;TipoApertura;TipoFrontale",$ATTIVA_DLL) }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      HIDE_ON_EDIT2(ATTUALE(),"VAR_YAll",1)
      if( VAR_Revisione == 1 & TipoScocca == 0  ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_YAll",0) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne
      vano_0_0.y = base_0.y + Yt - YVanoRip - $Cuc_Spe_Cop
      vano_h_0   = YVanoRip

      //Luca 25/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //GOSUB SetVarColonnaLvstForno
      GOSUB SetVarColonnaForno

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini

      @PiediniSuFianco = 0
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @PiediniSuFianco = 1 }
   }

   Posiziona FustoColLvstForno fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona Cuc_ZoccoloLvst zoc
   {
      @escluso = FLAG_soffietto

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z
      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = YZoccLvst
   }

   Posiziona FornoGenerico for
   {
      @escluso = 1-InsEldom

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @base_0.z = base_1.z + $Cuc_Aria_Ant_Z - @Z

      //@X_FRO = Xt -2*$Aria_Ant_X
      @X_FRO = X - 2*$Cuc_Aria_Ant_X

      //@Y_FRO = VAR_YFroEld
      @Y_FRO = VAR_YFroEld - VAR_DeltaBasso

      @VAR_RotFroEld =  VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld


      if( VAR_EXIST(idx_att,"DescForno") ) {  @DescEdit__ = DescForno    }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         @X = VAR_XEld
         @X_FRO = VAR_XEld
         if( VAR_XEld==0 )
         {
            @X_FRO = 600
            @X = 600
         }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff + 20

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }

      idx_eldom = ATTUALE()
   }

   Posiziona FornoDbg fdf
   {
      @escluso = 0
      if( InsEldom==1 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @X = X
      @Z = Z
      @Y = YVanoEld

      @VAR_YFroEld = VAR_YFroEld
      @VAR_RotFroEld = VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld = YVanoEld

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         @X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }
   }

   Posiziona Dummy mcsf
   {
      @escluso = 1
   }

   ////Luca 17/12/2019
   //Posiziona RigaOrdine_NonGraficato mcsf
   //{
   //   @escluso = 1
   //   if( FLAG_soffietto==1 ) { @escluso = 0 }
   //   @base_0 = base_0
   //   @GEST_CODICE = "D06007"
   //   @X = 50
   //   @Y = 500
   //   @Z = 50
   //}

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }
}

//Luca 12/12/2019 colonna lvst + forno con lavastoviglie da 600
Elemento ScoccaT_ColLvst2Forno
{
   Descrizione = "Colonna lavastoviglie"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice;Eldom_Check;ColLvst2Forno

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      VAR_Revisione             "" 0  SaveAlways
      VAR_RevBarraInfLvtrSoff   "" 0  SaveAlways

      ELD_TIPO_ELDOM "" "FORNO"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      VAR_YAll       "Allineamento in altezza"  0  Menu ( AllLvstFrn )

      Filler2            " " "" ShowAlways

      X       "Larghezza colonna"      600   ShowAlways
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    "" 17
      No_Pie         "" 0

      //0 Terra - 2 Sospesa
      TipoScocca     "Posizione Colonna"         0 Menu ( PosCol )
      TipoColForno   "Tipologia vano eldom"      0 Menu ( TpColFn )
      TipoFrontale   "Tipo frontali colonna"     1 Menu ( TpFrCl )

      //Luca 12/12/2019 per ora previsto solo maniglia
      //0 maniglia
      //1 servo drive
      TipoApertura "Apertura Lvst"   0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      //Luca 04/03/2020
      //riporto modifiche LAGO
      FLAG_soffietto "Colonna Soffietto" 0 Menu ( SiNo )

      //0 Normale
      //1 XXL
      //2 XL
      TipoLvst "Tipologia LVST"      0

      VAR_XEld           "Larghezza Forno"               0
      VAR_ZEld           "Profondità Forno"              0

      VAR_YVanoMinEld    "Altezza minima vano Forno"     0 SaveAlways
      VAR_YVanoMaxEld    "Altezza massimo vano Forno"    0 SaveAlways
      VAR_YFroEld        "Altezza frontale forno"        0 SaveAlways
      VAR_DeltaBasso     "Delta basso"                   0 SaveAlways
      VAR_RotFroEld      "Rotazione anta eldom"          0 SaveAlways

      VAR_PosYEld        "Posizione in altezza eldom"    0 SaveAlways
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      wk_DiffYFroEld     "Differenza H frontale/scocca"  0

      YVanoRip           "Altezza vano ripiani"          0
      YVanoEld           "Altezza vano forno"            0
      YAntaInf           "Altezza anta inferiore"        0
      YAntaSup           "Altezza anta superiore"        0
      YPieReg            "Altezza piedino regolatore"    0

      PosYRip1        "" 0
      PosYRip2        "" 0

      FiancoFinLvstSx   "" 0 SaveAlways
      FiancoFinLvstSx_Y "" 0 SaveAlways
      FiancoFinLvstDx   "" 0 SaveAlways
      FiancoFinLvstDx_Y "" 0 SaveAlways

      //YVanoLvst          "" 762.5
      //YPosFndLvst        "" 113.5
      //YZoccLvst          "" 171
      //Luca 24/07/2019 TODO 20540
      //YPosFndLvst        ""  69
      //LZ 11/11/2019 - Ulteriore revisione della colonna, sposto fondo a +7.5mm
      YVanoLvst          "" 760
      YPosFndLvst        "" 71.5
      YZoccLvst          "" 97

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      YFndFrn            "Spessore fondo forno"          19

      idx_sx "" -1
      idx_dx "" -1

      Verso         "verso della scocca"    -1
      //Menu ( DXSX )

      VAR_Vuoto   "Solo Ingombro?" 0
      // Menu ( bool )

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_ColLvst2Forno", "")
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_BarraInfLvtrSoff", "VAR_RevBarraInfLvtrSoff")

      if( TipoScocca==0 )
      {
         M4_A_MURO   = 0
         YVanoLvst   = 760
         YPosFndLvst = 71.5
         YZoccLvst   = 97

         //LZ 03/03/2021: revisione tecnica colonna lvst/forno
         if( VAR_Revisione == 1 )
         {
            YZoccLvst   = 136
         }
      }
      else
      {
         M4_A_MURO   = 1
         YVanoLvst   = 903
         YPosFndLvst = 71.5
         YZoccLvst   = 97

         //LZ 03/03/2021: revisione tecnica colonna lvst/forno
         if( VAR_Revisione == 1 )
         {
            YZoccLvst   = 136
         }
      }

      //M4_VAR "" "FILLER*;SchedaTecnica;VAR*"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;VAR_YAll"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoColForno;TipoApertura;TipoFrontale",$ATTIVA_DLL) }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      HIDE_ON_EDIT2(ATTUALE(),"VAR_YAll",1)
      if( VAR_Revisione == 1 & TipoScocca == 0 ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_YAll",0) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne
      vano_0_0.y = base_0.y + Yt - YVanoRip - $Cuc_Spe_Cop
      vano_h_0   = YVanoRip

      //Luca 25/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*") ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //GOSUB SetVarColonnaLvstForno
      GOSUB SetVarColonnaForno

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      GOSUB CucP_Controlli

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, colonna allineata a H873 non può avere lvst xl o xxl
      if( VAR_Revisione == 1 & VAR_YAll == 1 & VAR_VAL_STR(idx_att,"GEST_C027") != "LVS01"  )
      {
         if( IS_VAR_FIXED(idx_att,"GEST_C027") ) { DEL_VAR_MODIFICATE(idx_att,"GEST_C027") }
      }

      //Luca 12/12/2019
      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         FiancoFinLvstSx   = 0
         FiancoFinLvstSx_Y = 0
         FiancoFinLvstDx   = 0
         FiancoFinLvstDx_Y = 0

         if( IS_IDX(idx_sx) )
         {
            if( IS_MATCH(NOME(idx_sx),"ScoccaT_Bas*")==1 )
            {
               SET_#(idx_sx)
               wk_offy = (#base_0.y + #Cuc_Alt_Zoc)  - (base_0.y + Cuc_Alt_Zoc)
               if( wk_offy>0 )
               {
                  FiancoFinLvstSx   = 1
                  FiancoFinLvstSx_Y = wk_offy
               }
            }
         }
         if( IS_IDX(idx_dx) )
         {
            if( IS_MATCH(NOME(idx_dx),"ScoccaT_Bas*")==1 )
            {
               SET_#(idx_dx)
               wk_offy = (#base_0.y + #Cuc_Alt_Zoc)  - (base_0.y + Cuc_Alt_Zoc)
               if( wk_offy>0 )
               {
                  FiancoFinLvstDx   = 1
                  FiancoFinLvstDx_Y = wk_offy
               }
            }
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( TABER_REGOLA=="PRE" & VAR_Revisione == 1 )
      {
         GEST_C027="LVS01"
      }

      if( TABER_REGOLA=="POST" )
      {
         //lavastoviglie standard
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS01" ) { TipoLvst = 0 }
         //lavastoviglie XXL
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS02" ) { TipoLvst = 1 }
         //lavastoviglie XL
         if( VAR_VAL_STR(ATTUALE(),"GEST_C027")=="LVS03" ) { TipoLvst = 2 }
      }
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini

      @PiediniSuFianco = 1
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @PiediniSuFianco = 1 }
   }

   Posiziona FustoColLvstForno fbs
   {
      GOSUB Cuc_PosaFustoStd
      @TipoColonnaLvst = 2
      @TipoLvst = TipoLvst
   }

   Posiziona Cuc_ZoccoloLvst zoc
   {
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z
      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = YZoccLvst
   }

   Posiziona Cuc_FiancoFinLvst fiafsx
   {
      @escluso = 1 - FiancoFinLvstSx

      @Y = FiancoFinLvstSx_Y - 3

      @Z = Zt
      if( VAR_Melaminico > 0 ) { @Z = Z + $Cuc_Aria_Ant_Z + $Cuc_Spe_Ant_Mel }

      @base_0.x = base_0.x - 1.5 - @X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 1.5
      @base_0.z = base_0.z

      @Verso = -1
   }

   Posiziona Cuc_FiancoFinLvst fiafdx
   {
      @escluso = 1 - FiancoFinLvstDx

      @Y = FiancoFinLvstDx_Y - 3

      @Z = Zt
      if( VAR_Melaminico > 0 ) { @Z = Z + $Cuc_Aria_Ant_Z + $Cuc_Spe_Ant_Mel }

      @base_0.x = base_0.x + X + 1.5
      @base_0.y = base_0.y + Cuc_Alt_Zoc + 1.5
      @base_0.z = base_0.z

      @Verso = 1
   }

   Posiziona FornoGenerico for
   {
      @escluso = 1-InsEldom

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @base_0.z = base_1.z + $Cuc_Aria_Ant_Z - @Z

      //@X_FRO = Xt -2*$Aria_Ant_X
      @X_FRO = X - 2*$Cuc_Aria_Ant_X

      //@Y_FRO = VAR_YFroEld
      @Y_FRO = VAR_YFroEld - VAR_DeltaBasso

      @VAR_RotFroEld =  VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld


      if( VAR_EXIST(idx_att,"DescForno") ) {  @DescEdit__ = DescForno  }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom

      idx_eldom = ATTUALE()
   }

   Posiziona FornoDbg fdf
   {
      @escluso = 0
      if( InsEldom==1 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @X = X
      @Z = Z
      @Y = YVanoEld

      @VAR_YFroEld = VAR_YFroEld
      @VAR_RotFroEld = VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld = YVanoEld
   }

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }
}

Elemento ScoccaT_Col2Forno
{
   Descrizione = "Colonna Forno"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias Colonna;a_terra;PerZoccolo;PerCornice;PerFrigo;Eldom_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      ELD_TIPO_ELDOM  "" "FORNO"
      ELD_TIPO_ELDOM2 "" "MICRO"

      //TipoEldom         "Tipologia 2° Eldom"        0  Menu ( TpEldom )
      SchedaTecnica      ">> SCHEDA TECNICA"        0 Boolean ShowAlways

      TipoEldom2         "Tipologia 2° Eldom"             0 Menu ( TpEldom )
      InsEldom2          "Inserire 2° Elettrodomestico?" -1 Menu ( MnInsEld )
      InsEldom2_prec     "Inserire 2° Elettrodomestico?" -1
      SchedaTecnica2     ">> SCHEDA TECNICA 2°ELDOM"      0 Boolean ShowAlways

      Filler2            " " "" ShowAlways

      X       "Larghezza colonna"      600   Menu ( LargCFRN ) Utente ( )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita' fianco"     604   Menu ( ProfCCSS ) Utente ( )
      Zt      "(Profondita')"          604   ShowAlways

      Cuc_Alt_Zoc    ""                               17
      No_Pie      "" 0

      //0 Terra - 2 Sospesa
      TipoScocca           "Posizione Colonna"           0 Menu ( PosCol )

      TipoColForno       "Tipologia vano Eldom 2"        1 Menu ( TpColFn )
      TipoFrontale       "Tipo frontali colonna"         1 Menu ( TpFrCl )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      FLAG_soffietto     "Colonna Soffietto"       0 Menu ( SiNo )

      Verso         "verso della scocca"    -1

      VAR_Vuoto   "Solo Ingombro?" 0

      VAR_XEld           "Larghezza Forno"               0
      VAR_ZEld           "Profondità Forno"              0

      VAR_YVanoMinEld    "Altezza minima vano Forno"     0 SaveAlways
      VAR_YVanoMaxEld    "Altezza massimo vano Forno"    0 SaveAlways
      VAR_YFroEld        "Altezza frontale forno"        0 SaveAlways
      VAR_DeltaBasso     "Delta basso"                   0 SaveAlways
      VAR_RotFroEld      "Rotazione anta eldom"          0 SaveAlways

      VAR_PosYEld        "Posizione in altezza eldom"    0 Utente ( ) SaveAlways

      VAR_XEld2          "Larghezza Eldom 2"             0
      VAR_ZEld2          "Profondità Eldom 2"            0

      VAR_YVanoMinEld2   "Altezza minima vano Eldom 2"   0 SaveAlways
      VAR_YVanoMaxEld2   "Altezza massimo vano Eldom 2"  0 SaveAlways
      VAR_YFroEld2       "Altezza frontale Eldom 2"      0 SaveAlways
      VAR_DeltaBasso2    "Delta basso Eldom 2"           0 SaveAlways
      VAR_RotFroEld2     "Rotazione anta Eldom 2"        0 SaveAlways

      VAR_PosYEld2       "Posizione in altezza Eldom 2"  0 SaveAlways

      YVanoRip           "Altezza vano ripiani"          0
      YVanoEld           "Altezza vano forno"            0
      YVanoEld2          "Altezza vano eldom 2"          0
      YAntaInf           "Altezza anta inferiore"        0
      YAntaSup           "Altezza anta superiore"        0
      //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
      //YPieReg            "Altezza piedino regolatore"    2
      YPieReg            "Altezza piedino regolatore"    0

      //Luca 18/12/2019
      YSpesHPL           "Spessore HPL per colonna soff" 8

      PosYRip1        "" 0
      PosYRip2        "" 0

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      //M4_VAR "" "FILLER*;SchedaTecnica;VAR*"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom*;TipoEldom2;SchedaTecnica*;"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)
      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica2",InsEldom2)

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoColForno;FLAG_soffietto;Verso;VAR_Vuoto;TipoFrontale",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne
      //vano_0_0.y = Cuc_Alt_Zoc + Y - $Cuc_Spe_Cop - YVanoRip
      //vano_h_0   = YVanoRip

      //Luca 28/01/2019 per frontali
      vano_0_1 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_1 = X - 2*$Cuc_Spe_Fia
      vano_p_1 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      GOSUB DefPuntiZocc
      GOSUB DefPuntiTop
      GOSUB DefPuntiCornice
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            if( IS_MATCH(NOME($query_p1),"*Anta*")
              | IS_MATCH(NOME($query_p1),"*Cestone")  ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( IS_MATCH(NOME($query_p1),"*Anta*")
              | IS_MATCH(NOME($query_p1),"*Cestone")  ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //GOSUB SetVarColonnaForno
      GOSUB SetVarColonna2Forno

      //Luca 13/05/2019
      GOSUB CtrlPosizioneRipiani

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoColForno fcf
   {
      GOSUB Cuc_PosaFustoStd
      @Colonna2Eldom = 1
   }

   Posiziona FornoGenerico for
   {
      @escluso = 1-InsEldom

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @base_0.z = base_1.z - @Z
      //@Z = Z

      @X_FRO = VAR_XEld
      if( VAR_XEld==0 ) { @X_FRO = X }
      //@Y_FRO = VAR_YFroEld - VAR_DeltaBasso
      @Y_FRO = VAR_YFroEld - SE_NUM(VAR_DeltaBasso>0,VAR_DeltaBasso,0)
      //@Y_FRO = VAR_YFroEld

      @VAR_RotFroEld =  VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld

      if( VAR_YFroEld==0 ) { @Y_FRO = YVanoEld }

      if( VAR_EXIST(idx_att,"DescForno") ) {  @DescEdit__ = DescForno    }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         //@X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff + 20

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }

      idx_eldom = ATTUALE()
   }

   Posiziona FornoDbg fdf
   {
      @escluso = 0
      if( InsEldom==1 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg
      @X = X
      @Z = Z
      @Y = YVanoEld

      @VAR_YFroEld = VAR_YFroEld
      @VAR_RotFroEld = VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         @X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff

         //Luca 08/01/2020
         @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld + YPieReg + YSpesHPL
         @YVanoEld = YVanoEld - YSpesHPL
      }
   }

   Posiziona FornoGenerico for2
   {
      @escluso = 1
      if( InsEldom2==1 & TipoEldom2==0 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld2
      @base_0.z = base_1.z - @Z
      //@Z = Z

      @X_FRO = VAR_XEld2
      if( VAR_XEld==0 ) { @X_FRO = X }

      @Y_FRO = VAR_YFroEld2 - SE_NUM(VAR_DeltaBasso2>0,VAR_DeltaBasso2,0)

      if( VAR_EXIST(idx_att,"DescForno") ) {  @DescEdit__ = DescForno  }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom2

      @VAR_RotFroEld =  VAR_RotFroEld2
      @VAR_DeltaBasso = VAR_DeltaBasso2
      @YVanoEld       = YVanoEld2

      if( VAR_YFroEld2==0 ) { @Y_FRO = YVanoEld2 }

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         //@X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff + 20
      }

      idx_eldom2 = ATTUALE()

      @TipoEldom = TipoEldom2
      @IndiceEldom = "2"
   }

   Posiziona EldomGenerico eld2
   {
      @escluso = 1
      if( InsEldom2==1 & TipoEldom2!=0 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld2
      @base_0.z = base_1.z - @Z
      //@Z = Z

      @X_FRO = VAR_XEld2
      if( VAR_XEld==0 ) { @X_FRO = X }
      //@Y_FRO = VAR_YFroEld2
      @Y_FRO = VAR_YFroEld2 - SE_NUM(VAR_DeltaBasso2>0,VAR_DeltaBasso2,0)


      if( VAR_EXIST(idx_att,"DescForno") ) {  @DescEdit__ = DescForno  }
      @ORDN_IDX_VANO = idx_att
      @ELD_CODICE = ELD_CODICE
      @InsEldom = InsEldom2

      @VAR_RotFroEld =  VAR_RotFroEld2
      @VAR_DeltaBasso = VAR_DeltaBasso2
      @YVanoEld       = YVanoEld2

      idx_eldom2 = ATTUALE()

      @TipoEldom = TipoEldom2
      @IndiceEldom = "2"

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         //@X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff + 20
      }
   }

   Posiziona FornoDbg fdf2
   {
      @escluso = 0
      if( InsEldom2==1 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc + VAR_PosYEld2
      @X = X
      @Z = Z
      @Y = YVanoEld2
      @VAR_YFroEld = VAR_YFroEld2
      @VAR_RotFroEld = VAR_RotFroEld2
      @VAR_DeltaBasso = VAR_DeltaBasso2
      @YVanoEld       = YVanoEld2

      //Luca 18/12/2019
      if( FLAG_soffietto==1 )
      {
         @X = 600
         if( VAR_XEld==0 ) { @X_FRO = 600 }
         @base_0.x = base_0.x + $Cuc_Aria_Ant_X + $Cuc_Spe_Fia
         if( Verso<0 ) { @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - $Cuc_Spe_Fia - @X_FRO }
         @base_0.z = base_0.z + Z - @Z - $Cuc_Rie_Eld_ColSoff
      }
   }

   //Luca 20/04/2020
   Posiziona Dummy mcsf
   {
      @escluso = 1
   }
   ////Luca 17/12/2019
   //Posiziona RigaOrdine_NonGraficato mcsf
   //{
   //   @escluso = 1
   //   if( FLAG_soffietto==1 ) { @escluso = 0 }
   //   @base_0 = base_0
   //   @GEST_CODICE = "D06007"
   //   @X = 50
   //   @Y = 500
   //   @Z = 50
   //}

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }
}

Elemento ScoccaT_ColTamponamento
{
   Descrizione = "Colonna Tamponamento"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      FILLER             " "                        ""

      X                  "Larghezza colonna"        600   Menu ( LargCCSS ) Utente ( )
      Y                  "Altezza"                  2126  Menu ( AltCCSS  ) Utente ( )
      Yt                 "(Altezza con Piedini)"    2143  ShowAlways
      Z                  "Profondita' fianco"       61    Menu ( ProfCCSS ) Utente ( )

      Cuc_Alt_Zoc        ""                         17

      //0 Terra - 2 Sospesa
      TipoScocca         "Posizione Colonna"        2     Menu ( PosBLVS )

      TipoFrontale       "Tipo frontali colonna"    1     Menu ( TpFrCl )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale  "Materiale Frontale"       ""
      VAR_Melaminico     ""                         0     SaveAlways

      Verso              "verso della scocca"       -1
      // Menu ( DXSX )
      No_Pie             ""                         0

      ////LZ 02/08/2021: cucine laccate
      //MaterialeFrontale "Materiale Frontale"      ""
      //VAR_Melaminico    ""                        0 SaveAlways

      VAR_Vuoto          "Solo Ingombro?"           0 //Menu ( bool  )

      spPanR             "Spessore pannello retro"  38
      spPanF             "Spessore pannello fronte" 19
      Aria               ""                         1.5
      offsetZ            ""                         26

      idx_sx             ""                         -1
      idx_dx             ""                         -1

      idx_cnear_sx       ""                         -1
      idx_cnear_dx       ""                         -1

      COD_EREDITA        ""                         "PRE;POST"
      CMP2_AZIONI        ""                         "S"

      M4_CNT_LINK_MODE__ ""                         2
      M4_CNT_MODE__      ""                         1

      XGLASS             "Num. XGLASS"              ""    Utente ( )

      FillerM2G          " "                        ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoFrontale;Verso;VAR_Vuoto",$ATTIVA_DLL) }

      Cucina_Versione_Idx = SE_NUM( IS_IDX(idx_sx), idx_sx, idx_dx)
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( TipoScocca==2 ) { GOSUB GestioneLivelliOnWall }

      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //Luca 13/11/2019 anche per tamponamento
      GOSUB SettaPosizioneBase

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli

      spPanF  = 19
      if( Cucina_Versione > 2 )
      {
         spPanF = 18
         if( MaterialeFrontale == "MELAMINICO" ) { spPanF = $Cucina_2_5_Anta_36e8_Dim.z }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      Z = VAR_VAL(ATTUALE(),"ORD_Z")
      Zt = Z
      GEST_Z = Z

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   //Procedura PostControl
   //{
   //   GOSUB PostAction2_Colonne
   //}

   //Procedura PostGestDllValida
   //{
   //   GOSUB CucP_PostGestDllValida
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Blocco bl1
   {
      @base_0 = base_0
      if(Verso==-1) { @base_0.x = base_2.x - spPanR }
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z + offsetZ

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

      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco bl2
   {
      @escluso = 0
      if( VAR_Melaminico > 0
        | Cucina_Versione > 2 & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      @X = X - 5*Aria
      @Y = Y - 2*Aria
      @Z = spPanF

      @base_0.x = base_0.x + 2*Aria
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X - 2*Aria }
      @base_0.y = base_0.y + Cuc_Alt_Zoc + Aria
      @base_0.z = base_0.z + spPanR + offsetZ

      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco fronte
   {
      @escluso = 0
      if( VAR_Melaminico > 0
        | Cucina_Versione > 2 & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND )                       { @escluso = 1 }

      @X = X - Aria
      @Y = Y - 2*Aria
      @Z = 4

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y + Cuc_Alt_Zoc + Aria
      @base_0.z = base_0.z + spPanR + spPanF + offsetZ

      FIN_var = "C001"
      FIN_orie = "O"
      GOSUB rivestimento
   }

   Posiziona Blocco blmel
   {
      @escluso = 1
      if( VAR_Melaminico > 0
        | Cucina_Versione > 2 & MaterialeFrontale == "MELAMINICO" ) { @escluso = 0 }

      GOSUB posa_blocco

      @Y = Y - 2*Aria
      @Z = spPanF

      @base_0.y = base_0.y + Cuc_Alt_Zoc +Aria
      @base_0.z = base_0.z + spPanR + offsetZ

      FIN_var = "C001"
      FIN_orie = "O"
      GOSUB rivestimento
   }

   Posiziona VR_Vetro bpanfVV
   {
      @escluso = 1

      if( VAR_Melaminico == 0 )
      {
         if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 0 }
      }

      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc +Aria
      @base_0.z = base_0.z + spPanR + spPanF + offsetZ
      @X = X
      @Y = Y - 2*Aria
      @Z = 4
      FIN_var = "C001"
      FIN_orie = "O"
      GOSUB rivestimento
      @FIN_var = FIN_var
   }

   Posiziona Blocco vuoto
   {
      GOSUB Cuc_PosaFustoStd
      @escluso = ABS(1-VAR_Vuoto)
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }
}

Elemento ScoccaT_ColTamponamentoApribile
{
   Descrizione = "Colonna Tamponamento"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      FILLER " " ""

      X       "Larghezza colonna"      299   Utente ( )
      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( )
      Yt      "(Altezza con Piedini)"  2143  ShowAlways
      Z       "Profondita'"            145   ShowAlways

      Cuc_Alt_Zoc    ""                17

      //0 Terra - 2 Sospesa
      TipoScocca  "Posizione Colonna"        2
      TipoFrontale "Tipo frontali colonna"   2

      Verso         "verso della scocca"    -1
      No_Pie      "" 0

      idx_sx "" -1
      idx_dx "" -1

      VAR_Vuoto   "Solo Ingombro?" 0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

      M4_CNT_LINK_MODE__ ""   2
      M4_CNT_MODE__      ""   1

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_AssRangeRid

      Z_Fia     = 120
      AriaZ_Ant = 2
      AriaX_Ant = 1.5

      if( TipoScocca==0 ) { M4_A_MURO = 0 }
      else                { M4_A_MURO = 1 }

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;TipoFrontale;Verso;VAR_Vuoto",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      Zt = Z
      GOSUB punti_completi
      //GOSUB DefVanoColonne
      //GOSUB DefPuntiZocc
      //GOSUB DefPuntiCornice
      //GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //Luca 13/11/2019 anche per tamponamento
      GOSUB SettaPosizioneBase

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   //Procedura PostControl
   //{
   //   GOSUB PostAction2_Colonne
   //}

   //Procedura PostGestDllValida
   //{
   //   GOSUB CucP_PostGestDllValida
   //}

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   //Posiziona Blocco fiasx
   Posiziona Cuc_FiancoTampSx fiasx
   {
      @base_0 = base_0
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z

      @X = $Cuc_Spe_Fia
      @Y = Y
      @Z = Z_Fia
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Cuc_FiancoTampDx fiadx
   {
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia
      @base_0.y = base_0.y + Cuc_Alt_Zoc
      @base_0.z = base_0.z
      @X = $Cuc_Spe_Fia
      @Y = Y
      @Z = Z_Fia
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona GraficaAntaApribile anta
   {
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Cuc_Alt_Zoc + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z_Fia + AriaZ_Ant
      @X = X - 2*$Cuc_Aria_Ant_X
      @Y = Y - 2*$Cuc_Aria_Ant_Y
      //LZ 24/08/2021: cucine laccate
      //@Z = 23
      @Verso = Verso
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }
}

Elemento Cuc_FiancoTampSx
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias      CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 18
      Y "" 1
      Z "" 1

      Verso "" -1

      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      //0 Muro
      //1 fianco
      PosFianco   "" 0

      //perRADICE   ""  ""
      //RADICE      ""  "FNCO"
      GEST_CODICE "" "L05016"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8
      GOSUB CucP_Assegnazioni

      //Luca 31/08/2020
      if( UN_PADRE("ScoccaS_PensileAngolo") ) { FIN_var = "C032" }
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 23.10.2020 per MdF_Sat. In pratica su tutti gli archetipi se *Fia* e CamInciso
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_FiancoTampDx
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias      CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 18
      Y "" 1
      Z "" 1

      Verso ""  1

      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      //perRADICE   ""  ""
      //RADICE      ""  "FNCO"
      GEST_CODICE "" "L05016"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 23.10.2020 per MdF_Sat. In pratica su tutti gli archetipi se *Fia* e CamInciso
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento GraficaAntaApribile
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias  Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 18
      Y "" 1
      //LZ 24/08/2021: cucine laccate
      //Z "" 1
      Z "" 23

      Verso "" -1

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale" ""
      VAR_Melaminico    ""                    0 SaveAlways

      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      //perRADICE   ""  ""
      //RADICE      ""  "ANCO3"
      GEST_CODICE   "" "F10274"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 24/08/2021: cucine laccate
      Z = $Cuc_Spe_Ant_Col
      if( VAR_Melaminico == 1 ) { Z = $Cuc_Spe_Ant_Mel }

      GOSUB Stato_8
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

     // Raffaele 20.10.2020
      antaSciolta = 0
      if (IS_MATCH(NOME(PADRE(idx_att, -1)), "Anta*") == 1  &  PADRE(idx_att, 1) == PADRE(idx_att, -1))  { antaSciolta = 1 }

      if ( antaSciolta == 0
         & IS_MATCH(VAR_VAL_STR(idx_att, "MDFSys_Load_ini"), "OnMacro*") != 1
         )
         { MdF_Visualize_sat = "OnInterat" }

      // Per visualizzare solo il cilindro
      if (antaSciolta == 1)  { MCB_Vis_CerBat = 1 }
      GOSUB MdF_sat_CerBat

     // Raffaele 20.10.2020
      MdF_Load_COMANDO2 = 1
      // 28.11.2019
      MdF_Load_Interat = "CerBat"
      GOSUB MdF_ADD_Reg_Interat
   }

   //LZ 24/08/2021: cucine laccate
   Procedura OnTabEredita
   {
      //LZ 02/08/2021
      if( TABER_REGOLA=="POST" ) { GOSUB Set_MaterialeFrontale_Ante }
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,1)
      if( Verso==-1 )   { azione_verso = "SX"   }
      else              { azione_verso = "DX"   }
      AntaInCoppia = 0
      GOSUB azione_apertura_battente
   }

   Posiziona Blocco bl
   {
      //LZ 24/08/2021: cucine laccate
      @escluso = VAR_Melaminico

      @base_0.x = base_0.x + 3
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 6
      @Y = Y
      @Z = Z - 4
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco vt
   {
      //LZ 24/08/2021: cucine laccate
      @escluso = VAR_Melaminico

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - 4
      @X = X
      @Y = Y
      @Z = 4
      FIN_var = "C001"
      GOSUB rivestimento
   }

   //LZ 24/08/2021: cucine laccate
   Posiziona Blocco blmel
   {
      @escluso = 1 - VAR_Melaminico

      GOSUB posa_blocco

      FIN_var = "C001"
      GOSUB rivestimento
   }
}
//} SCOCCHE COLONNE

//{ SCOCCHE PENSILE
Elemento ScoccaS_PensileCopriCaldaia
{
   Descrizione = "Base standard"
   Code        = CUC
   Gruppo      = "Basi"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      VAR_Vuoto      "" 0

      X       "Larghezza"           600 Utente ( )
      Y       "Altezza"             736 Menu ( AltBBSS ) Utente ( )
      Z       "Profondita' fianco"  678 Utente ( )
      Zt      "(Profondita')"       700 ShowAlways

      Verso         "Verso della scocca"    -1 Menu ( DXSX )

      VAR_Speciale   "" 0
      FAttSdoppia  "Flag ante doppie" 1 Menu ( bool )

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      VAR_Des  " " ""  ShowAlways
      VAR_Des1 "DIMENSIONE UTILE VANO"      "" ShowAlways
      VAR_Des2 "- INSTALLAZIONE FILO SOPRA" "" ShowAlways
      VAR_Des3 "- INSTALLAZIONE AL CENTRO"  "" ShowAlways


      COD_EREDITA      ""      "PRE;POST;C011_PRE"
      CMP2_AZIONI      ""      "S"

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

      M4_MIS "" "FillerM2G;X;Y;Z;Zt;FAttSdoppia;VAR_Des*"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      M4_MIS = "FillerM2G;X;Y;Z;Zt;FAttSdoppia;VAR_Des*"

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"Verso;ConCielo;VAR_Cat*;VAR_Lavello",$ATTIVA_DLL) }

      Cuc_Spe_Ant = 20
      Cuc_Aria_Ant_Z = 2

      HIDE_ON_EDIT2(ATTUALE(),"FAttSdoppia",1 - VAR_Speciale)

      Lar_Att = 120

      VAR_Des2 = STRCAT(STR(X - 2*Lar_Att - 2*$Cuc_Spe_Fia)," x ",STR(Y-30)," x ",STR(Zt-75))
      VAR_Des3 = STRCAT(STR(X - 2*50 - 2*$Cuc_Spe_Fia)," x ",STR(Y-100)," x ",STR(Zt-75))

      if( VAR_Speciale==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"FAttSdoppia")==0 )
         {
            Sdoppia = 750
            if( Y>750 )  { Sdoppia = 600 }
            FAttSdoppila = 0
            if( X>Sdoppia )  { FAttSdoppia = 1 }
         }

      }

      GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      M4_GRUPPO__  = MSG(1002)

      if(ACTION()==0 & VAR_EXIST(idx_att,"copied__")!=1) { X_ori=X Y_ori=Y Z_ori=Z }

      Zt = Z + Cuc_Spe_Ant + Cuc_Aria_Ant_Z

      GOSUB punti_Zt

      vano_0_0 = [$Cuc_Spe_Fia, 0, Cuc_Rie_Sch_ZR +$Cuc_Aria_Sch_Z +$Cuc_Spe_Sch ]
      vano_l_0 = X - 2*$Cuc_Spe_Fia
      vano_p_0 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      //vano_0_1 = [0,Cuc_Alt_Zoc,0]
      //vano_l_1 = X
      //vano_p_1 = Z

      GOSUB DefPuntiStampa
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368

      //GOSUB OnQueryBdmLocal_Basi_Cuc
      //GOSUB Cuc_OnQueryBdmLocal
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPensili

      //GOSUB CtrlBasi

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

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

      if( $ChangedVar=="FAttSdoppia" )
      {
         idx_anta_sx = -1
         idx_anta_dx = -1

         COMPONENTI2("wk_ant",ATTUALE(),"Cuc_Anta")
         if( wk_ant>0 )
         {
            SET_#(wk_ant[1])
            idx_anta_sx = #idx_anta_sx
            idx_anta_dx = #idx_anta_dx

            VAR_VALUE_SET(idx_anta_sx,"flag_CAMBIA_VAR",1)
            VAR_VALUE_SET(idx_anta_dx,"flag_CAMBIA_VAR",1)

            VAR_VALUE_SET(idx_anta_dx,"inserito",1)
            COMANDO(STRCAT("RICALCOLA_UNA ",STR(wk_ant[1]) , " // OnChangedVar da ",NOME(ATTUALE()) ))
         }
      }
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoPensileCopriCaldaia fbs
   {
      GOSUB Cuc_PosaFustoStd
      @Y = Y
   }

   Posiziona Blocco attsx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + Y - Lar_Att - 20
      @X=Lar_Att
      @Y=Lar_Att
      @Z=80
      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco attdx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia - Lar_Att
      @base_0.y = base_0.y + Y - Lar_Att - 20
      @X=Lar_Att
      @Y=Lar_Att
      @Z=80
      @c_rivestimento = $c_alluminio
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10 + 100
      @Z = Z - 10
   }
}

//Alberto B. 05/08/20
Elemento ScoccaS_PensileAngolo
{
   Descrizione = "Pensile ad angolo"
   Code        = CUC
   Gruppo      = "Pensili"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;PensileAngoloL

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                     "(Larghezza)"                            638   ShowAlways
      Xt                    "Larghezza SX"                           638   Menu   (   XPenAng   )

      Y                     "(Altezza)"                              368   ShowAlways
      Yt                    "Altezza"                                368   Menu   (   YPenAng   )

      Z                     "(Profondita')"                          638   ShowAlways
      Zt                    "Profondita' DX"                         638   Menu   (   ZPenAng   )

      ZFiaSx                "Profondità fianco SX"                   384   //Utente ( )
      ZFiaDx                "Profondità fianco DX"                   384   //Utente ( )
      LatoAntaSx            "Lato frontale Anta SX"                  320   //Utente ( )
      LatoAntaDx            "Lato frontale Anta DX"                  320   //Utente ( )
      AntaSx                "Larghezza Anta SX"                      320   //Utente ( )
      AntaDx                "Larghezza Anta DX"                      320   //Utente ( )

      Var_Scocca_Tipo       ""                                       3
      Var_Scocca_Tipo_Dsc   ""                                       "ANGOLO"

      // X_Mont "Larghezza Montante" 88.5
      // Z_Mont "Profondita Montante" 88.5
      // NoMont "Escludo gestione Montante frontale sull'angolo" 0 Menu ( SiNo )
      ang                   "Angolo"                                 90
      // Utente ( )
      Verso                 "verso della scocca"                     -1    //Menu ( DXSX )
      FuoriSquadraBA        "Tipo di Fuorisquadro"                   "SCHIENE"

      idx_cnear_sx          ""                                       -1
      idx_cnear_dx          ""                                       -1

      LED_SX                ""                                       0
      LED_DX                ""                                       0

      perCODICE             ""                                       ""

      COD_EREDITA           ""                                       "PRE;POST;C011_PRE"
      CMP2_AZIONI           ""                                       "S"
      tipo_ang_muro         ""                                       "S"
      offset_muro           ""                                       0

      TIPO__                "per M4 definisce il tipo di elemento"   1
      STENDI_AUTO_ANGOLO    ""                                       2

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

      FillerM2G             " "                                      ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      if( ACTION()==0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT(ATTUALE(),"Xt;Yt;Zt",1)
      }

      Y = Yt

      AntaSx = 299
      AntaDx = 320

      if( Xt == 638 ) { AntaSx = 229 }
      if( Zt == 638 ) { AntaDx = 250 }

      if( Cucina_Versione > 2)
      {
         AntaSx = LatoAntaSx - 25
         AntaDx = LatoAntaDx - 4
      }
   }

   PuntiNotevoli
   {
      X = Xt
      Z = Zt

      GOSUB punti_completi_angoloL
      GOSUB DefVanoPensAngolo

      //Luca 19/10/2020
      Cuc_Alt_Zoc  = 0
      GOSUB DefPuntiStendiFFinitura

      tipo_ang_muro = "S"
      offset_muro = -1*Xt
   }

   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_368
      //GOSUB GestioneLivelliOnWall

      if( $query_type==2 )
      {
         $QueryResult__ = 1
         if( NOME($query_p1) == "Cuc_RipianoL" & $query_p2!=2 )
         {  $QueryResult__ = 0   }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlPensili

      if( ACTION() > 0 & ACTION() !=2 )
      {
         LED_SX = 0
         LED_DX = 0
         COMPONENTI2("wk_led",ATTUALE(),"Cuc_Led")

         i = 1
         while ( i<=wk_led )
         {
            if( VAR_VAL(wk_led[i],"vano_n") == 0 ) { LED_SX = 1 }
            if( VAR_VAL(wk_led[i],"vano_n") == 1 ) { LED_DX = 1 }

            i = i + 1
         }
      }

      // Ripiani
      if( Cucina_Versione <= 2) { EXITSUB() }

      Var_Scocca_Tipo_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Scocca_Tipo", Var_Scocca_Tipo)

      while( IS_VAR_FIXED( idx_att, "Ripiani") == 0)
      {
         Ripiani = 0
         if( Cucina_ModelloDsc == "36e8") { break }

         Ripiani = FLOOR(vano_h_2 / 368)
         break
      }

      GOSUB Cucina_2_5_Pensile_Ripiani_Attrezza
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      if( Cucina_Versione > 2
        & idx_att != idx_pdr_gest)
      {
         perCODICE = VAR_VAL( idx_att, "GEST_CODICE")

         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

      GOSUB Set_Gest_C003
      GOSUB Set_Gest_C008_C009_PensAngL
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoPensileAngoloL fpa
   {
      GOSUB Cuc_PosaAngL
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = ZFiaSx - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_4.x - 5
      @base_0.y = base_0.y + 5
      @base_0.z = base_4.z - 1
      @X = 2
      @Y = Y - 10
      @Z = ZFiaDx - 10
      @ang_y = -90
   }
}
//} SCOCCHE PENSILE

//{ FUSTI
Elemento FustoFittizio
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                ""          500
      Y                ""          720
      Z                ""          560

      NO_GEST          ""          0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_GestionaleFusto

      FLAG_RADICE = $FLAG_STANDARD + $NORID_X + $NORID_Y + $NORID_Z
   }

   Posiziona Blocco fst
   {
      GOSUB posa_blocco
   }
}

Elemento FustoBaseStandard
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
       #include %path_bdm%\var_db.inc

       //revisione 1 attivo la parte gestionale
       VAR_RevFusto            ""                                             0    SaveAlways
       VAR_Revisione_PanDiss   ""                                             0    Implicit

       NO_GEST                 ""                                             1

       X                       "Larghezza luce"                               500
       Y                       "Altezza esc. zoccolo"                         720
       Z                       "Profondita' fianco"                           560

       ZFiaSx                  "Profondita' fianco sx"                        560
       ZFiaDx                  "Profondita' fianco dx"                        560

       PC                      ""                                             0
       ConSchiena              "Presenza Schiena"                             1

       ConPanDivInd            "Con Divisorio per induzione"                  0    Implicit
       PanDivInd_RieY          ""                                             48   Implicit

       ConCielo                "Presenza Cielo"                               0    Implicit
       ConPianoSNACK           "Presenza SNACK"                               0    Implicit

       VAR_CatR_OV             "catena retro: 0= orizzontale 1= verticale"    1    Implicit
       VAR_CatF_OV             "catena fronte: 0= orizzontale 1= verticale"   0    Implicit

       VAR_BarraSost1          "Barra Sostegno elemento sbalzo"               0    Implicit
       VAR_BarraSost2          "Barra Sostegno elemento sbalzo"               0    Implicit

       VAR_LavPC_FiaSx         "Lavorazione PianoCottura Fianco SX"           0    Implicit
       VAR_LavPC_FiaDx         "Lavorazione PianoCottura Fianco SX"           0    Implicit

       VAR_PassaC_FiaSx        "Lavorazione Passacavo Fianco SX"              0    Implicit
       VAR_PassaC_FiaDx        "Lavorazione Passacavo Fianco DX"              0    Implicit

       StrPerGola              ""                                             ""   Implicit

       ConBifacciale           ""                                             0    Implicit

       ConLavello              ""                                             0    Implicit

       //Luca 20/04/2020
       //variabili necessarie per elementi base angolo
       FLAG_BaseAngolo         ""                                             0
       Verso_BA                ""                                             -1
       X_Anta                  ""                                             0    Implicit
       X_Mass                  ""                                             0    Implicit
       Z_Mass                  ""                                             0    Implicit
       Con_DistMan             ""                                             0    Implicit
       X_DistMan               ""                                             0    Implicit
       Con_DistAng             ""                                             0    Implicit
       X_DistAng               ""                                             0    Implicit
       Y_DistAng               ""                                             0    Implicit
       Z_DistAng               ""                                             0    Implicit

       PosY_DistAng            ""                                             0    Implicit
       COD_EREDITA             ""                                             "PRE;POST;C011_PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB CtrlRidFustoBase
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="C011_PRE" )
      {
         C011_pdr = VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_C011")
         GEST_C011 = C011_pdr
         VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
      GOSUB CtrlRidFustoBase
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_GestionaleFusto
      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx

      @VAR_LavPC = VAR_LavPC_FiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_LavPC = VAR_LavPC_FiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
   }

   Posiziona Cuc_PannelloDivisorio cpdi
   {
      @escluso = 1 - ConPanDivInd
      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y + Y - @Y - PanDivInd_RieY

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia

      @Z = 500
      if( Z <= 700 ) { @Z = Z - 65 - 111 }
      @base_0.z = base_0.z + Z - 65 - @Z

      if( VAR_Revisione_PanDiss > 0 )
      {
         @Z = Z - $Cuc_Rie_PanDiss_ZF - $Cuc_Rie_PanDiss_ZR
         @base_0.z = base_0.z + Z - $Cuc_Rie_PanDiss_ZF - @Z
      }

      if( UN_PADRE("ScoccaT_BaseAngPan") ) { @Z = @Z - 10 }

      // TODO: da verificare
      if( Cucina_Versione > 2) { @Z = @Z + 1 }
   }

   Posiziona Cuc_Sch sch1r
   {
      @escluso = SE_NUM( ConSchiena == 0, 1, 0)
      GOSUB Cuc_PosaSch
   }

   //catena orizzontale frontale
   Posiziona Cuc_CatOriz cator_f
   {
      @escluso = VAR_CatF_OV
      if( ConCielo )   {  @escluso = 1   }

      GOSUB Cuc_PosaCatFroAlta
   }

   Posiziona Cuc_CatOriz cor_f2a
   {
      @escluso = 1

      GOSUB Cuc_PosaCatFroAlta

      COMPONENTI2( "ante", idx_pdr, "Cuc_Anta")
      if( ante <= 0) { EXITSUB() }

      antaNum = 0
      while( @escluso == 1
           & inc(antaNum) <= ante)
      {
         antaIdx = ante[antaNum]
         if( VAR_VAL( antaIdx, "wk_sdoppia_ante") <= 0) { continue }

         SET_#(antaIdx)
         @base_0.y = #alto_0.y - base0y_abs - @Y - $Cuc_RidY_Sco + $Cuc_Aria_Ant_Y
         if( @base_0.y > Y - 2*@Y)                      { continue }

         @escluso = 0
      }
   }

   //catena verticale frontale
   Posiziona Cuc_CatVert catve_f
   {
      @escluso = 1- VAR_CatF_OV
      if(ConCielo)   {  @escluso = 1   }

      GOSUB Cuc_PosaCatFroAlta
   }

   //catena orizzontale retro alta
   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = VAR_CatR_OV
      if(ConCielo)   {  @escluso = 1   }

      @CatAlluminio = 1
      @CatSchLav    = 0

      //Luca 10/06/2020
      if( ConLavello==1 )
      {
         @CatAlluminio = 0
         @CatSchLav    = 1

         //Luca 14/07/2020 mantis 022990: Barra retro base lavello: larghezza minima
         if( X < 500)
         {
            @CatSchLav = 0
            @CatAlluminio = 1
         }
      }

      //if( ConBifacciale ) { @CatAlluminio = 0 }
      if( ConBifacciale ) { @CatAlluminio = 0  @CatSchLav = 0 }

      @ConBifacciale = ConBifacciale

      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      //Luca 12/10/2020
      if( @RuotaCatena == 1 )
      {
         @Z = $Cuc_Spe_Cat
         @Y = $Cuc_Larg_Cat
      }

      if( @CatAlluminio==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }

      if( @CatSchLav==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }

      GOSUB Cuc_PosaCatRtrAlta

      //GOSUB CucP_PosaCatRtrAltaBR
      //aliasposiz = "cator_r"
      //GOSUB CucP_Posiziona
   }

   //Luca 20/11/2019 catena aggiuntiva in presenza
   //di lavorazione piano cottura su fianco
   Posiziona Cuc_CatOriz cator_2
   {
      @escluso = 1
      if( VAR_VAL(idx_att,"VAR_LavPC_FiaSx")==1
        | VAR_VAL(idx_att,"VAR_LavPC_FiaDx")==1  ) { @escluso = 0 }

      //Se bifacciale sarebbe un doppione
      if( ConBifacciale ) { @escluso  = 1 }

      //avrà lo stesso codice della catena frontale
      @FronteRetro = "F"

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = alto_2.y - $Cuc_Aria_Cop_Fia_Y - @Y
      @base_0.z = base_0.z + $Cuc_Rie_Cat_ZR
   }

   //catena verticale retro alta
   Posiziona Cuc_CatVert catve_r
   {
      @escluso = 1- VAR_CatR_OV
      if( ConCielo ) {  @escluso = 1   }

      GOSUB Cuc_PosaCatRtrAlta

      //aliasposiz = "catve_r"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Cop cop
   {
      @escluso = 1
      if(ConCielo)   {  @escluso = 0   }

      GOSUB Cuc_PosaCop
      //GOSUB CucP_PosaCopBR
   }

   //Luca 20/04/2020
   //{ gestione fusti configurati
   //tutti questi elementi sono stati portati dentro al fusto
   Posiziona Cuc_PannelloAngolo pan
   {
      @escluso = 1
      if( FLAG_BaseAngolo==1 )  { @escluso = 0 }

      @X = X - X_Anta - X_Mass
      @Z = $Cuc_Spe_Fia
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cat

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      if( Verso_BA==1 ) { @base_0.x = base_2.x - $Cuc_Spe_Fia - @X }

      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z + Z - $Cuc_Spe_Fia

      //@Y = 100
      //@base_0.y = base_0.y + 200
   }

   Posiziona Cuc_CatOriz cor_fa
   {
      @escluso = 1
      if( FLAG_BaseAngolo==1 )  { @escluso = 0 }

      @X = X - X_Anta
      @Z = 45
      @Y = 19

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      if( Verso_BA==1 ) { @base_0.x = base_2.x - $Cuc_Spe_Fia - @X }

      @base_0.y = base_0.y + Y - @Y - 1
      @base_0.z = base_0.z + Z - Z_Mass

      @CatSupAng = 1
   }

   Posiziona Cuc_MasselloAngolo masbat
   {
      @escluso = 1
      if( FLAG_BaseAngolo==1 )  { @escluso = 0 }

      @X = X_Mass
      @Z = Z_Mass
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cat

      @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass)
      if( Verso_BA==1 )
      {
         @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X
      }
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z + Z - Z_Mass
      //@Y = 100
   }

   Posiziona Cuc_MontanteAng mont
   {
      @escluso = 1
      if( FLAG_BaseAngolo==1 & Con_DistAng==1 )  { @escluso = 0 }

      @X = X_DistAng
      @Y = Y_DistAng
      @Z = Z_DistAng

      @Verso = Verso_BA

      @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) - (X_DistAng-3)
      if( Verso_BA==1 ) { @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - 3 }

      if( Con_DistMan==1 )
      {
         if( Verso_BA==1 ) { @base_0.x = @base_0.x + X_DistMan + 2*$Cuc_Aria_Ant_X }
         else              { @base_0.x = @base_0.x - X_DistMan - 2*$Cuc_Aria_Ant_X }
      }

      @base_0.y = base_0.y + PosY_DistAng
      @base_0.z = base_0.z + Z

      //@Y = 100
   }

   //} gestione fusti configurati
}

Elemento FustoBaseLavello
{
   Descrizione = "Fusto per base lavello"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      //#include %path_bdm%\var_dbfusto.inc
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      X  "Larghezza luce"        568
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fianco"    560

      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      VAR_CatR_OV "catena retro:   0= orizzontale 1= verticale"  1  Implicit
      VAR_CatF_OV "catena fronte:  0= orizzontale 1= verticale"  0  Implicit

      VAR_BarraSost1  "Barra Sostegno elemento sbalzo" 0 Implicit
      VAR_BarraSost2  "Barra Sostegno elemento sbalzo" 0 Implicit

      VAR_LavPC_FiaSx "Lavorazione PianoCottura Fianco SX" 0 Implicit
      VAR_LavPC_FiaDx "Lavorazione PianoCottura Fianco SX" 0 Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      StrPerGola     "" "" Implicit

      ConSchiena  "Presenza Schiena"  1
      YSchiena    "" 200

      ConPianoSNACK  "Presenza SNACK"    0 Implicit

      ConBifacciale  "" 0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB CtrlRidFustoBase
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli

      //LZ 19/04/2021 - Gestione riduzioni
      GOSUB CtrlRidFustoBase
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
      @VAR_LavPC = VAR_LavPC_FiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx

      //aliasposiz = "sp1r"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_LavPC = VAR_LavPC_FiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx

      //aliasposiz = "sp2r"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
      @VAR_Lavello = 1

      //GOSUB CucP_PosaFndLav
      //aliasposiz = "fd1r"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_FondoAlluminio fdall
   {
      @escluso = 0

      GOSUB Cuc_PosaFnd

      @Z = Z - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z - $Cuc_Spe_Sch
      if( @Z > @Z_max) { @Z = @Z_max }

      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z + Z - @Z
   }

   Posiziona Cuc_Sch sch1r
   {
      //LZ 25/03/2022
      //@escluso = 1-ConSchiena
      @escluso = SE_NUM( ConSchiena == 0, 1, 0)

      GOSUB Cuc_PosaSch

      if( ConSchiena > 0 ) { @Y = YSchiena }
   }

   //frontale verticale
   Posiziona Cuc_CatVert catve_f
   {
      @escluso = 1-VAR_CatF_OV
      GOSUB Cuc_PosaCatFroAlta
      @FronteRetro = "F"
   }

   //frontale orizzontale
   Posiziona Cuc_CatOriz catos_f
   {
      @escluso = VAR_CatF_OV

      GOSUB Cuc_PosaCatFroAlta
      @FronteRetro = "F"
      //@CatAlluminio = 1
   }

   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = VAR_CatR_OV

      //GOSUB Cuc_PosaCatRtrAlta

      //Luca 10/06/2020
      //@CatAlluminio = 1
      //if( ConBifacciale ) { @CatAlluminio = 0 }

      @CatSchLav    = 1
      if( ConBifacciale ) { @CatSchLav = 0 }

      //Luca 14/07/2020 mantis 022990: Barra retro base lavello: larghezza minima
      if( X < 500  )      { @CatSchLav = 0  @CatAlluminio = 1 }

      @ConBifacciale = ConBifacciale

      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      if( @CatAlluminio==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }
      if( @CatSchLav==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }

      GOSUB Cuc_PosaCatRtrAlta

      @FronteRetro = "R"
   }

   Posiziona Cuc_CatOriz cor_f2a
   {
      @escluso = 1

      GOSUB Cuc_PosaCatFroAlta

      COMPONENTI2( "ante", idx_pdr, "Cuc_Anta")
      if( ante <= 0) { EXITSUB() }

      antaNum = 0
      while( @escluso == 1
           & inc(antaNum) <= ante)
      {
         antaIdx = ante[antaNum]
         if( VAR_VAL( antaIdx, "wk_sdoppia_ante") <= 0) { continue }

         SET_#(antaIdx)
         @base_0.y = #alto_0.y - base0y_abs - @Y - $Cuc_RidY_Sco + $Cuc_Aria_Ant_Y
         if( @base_0.y > Y - 2*@Y)                      { continue }

         @escluso = 0
      }
   }

   //Luca 04/03/2020
   //riporto elemento aggiunto da LAGO
   Posiziona Cuc_CatOriz cator_2
   {
      @escluso = 1
      if( VAR_VAL(idx_att,"VAR_LavPC_FiaSx")==1
        | VAR_VAL(idx_att,"VAR_LavPC_FiaDx")==1  ) { @escluso = 0 }

      //Se bifacciale sarebbe un doppione
      if( ConBifacciale ) { @escluso  = 1 }

      //avrà lo stesso codice della catena frontale
      @FronteRetro = "F"

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = alto_2.y - $Cuc_Aria_Cop_Fia_Y - @Y
      @base_0.z = base_0.z + $Cuc_Rie_Cat_ZR
   }

   //retro alta
   Posiziona Cuc_CatVert catve_r
   {
      @escluso = 1- VAR_CatR_OV

      GOSUB Cuc_PosaCatRtrAlta
      @FronteRetro = "R"
   }

   ////retro bassa
   //Posiziona Cuc_CatVert caveb_r
   //{
   //
   //   GOSUB Cuc_PosaCatRtrBassa
   //   GOSUB CucP_PosaCatRtrBassaBL
   //
   //   aliasposiz = "caveb_r"
   //   GOSUB CucP_Posiziona
   //}
}

Elemento FustoBaseForno
{
   Descrizione = "Fusto per base forno"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      X   "Larghezza luce"                568
      Y   "Altezza esc. zoccolo"          720
      Z   "Profondita' fianco"            560

      Alt_Forno  "" 0
      PosYFondo2 "" 0

      ProfFondoInterno "" 489

      VAR_FornoCompatto "" 0 Implicit

      ZFiaSx  "Profondita' fianco sx"     560
      ZFiaDx  "Profondita' fianco dx"     560

      VAR_CatR_OV "catena retro:   0= orizzontale 1= verticale"  1  Implicit
      VAR_CatF_OV "catena fronte:  0= orizzontale 1= verticale"  0  Implicit
      //VAR_CatR_OV "Catena retro verticale"    0
      //ConCatBassa  "Presenza catena retro bassa"    0
      //CatAltaFronte  "escludo catena fronte alta"   1

      StrPerGola     "" "" Implicit

      VAR_LavPC_FiaSx "Lavorazione PianoCottura Fianco SX" 0 Implicit
      VAR_LavPC_FiaDx "Lavorazione PianoCottura Fianco SX" 0 Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      ConBifacciale  "" 0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      //DescEdit__ = MSG(1003)
      //GOSUB Stato_7

      GOSUB CucP_Assegnazioni

      ProfFondoInterno = 489
      if( Z>606 ) { ProfFondoInterno = 599 }
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
      @VAR_LavPC = VAR_LavPC_FiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_LavPC = VAR_LavPC_FiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
   }

   Posiziona Cuc_Fondo fd1r2
   {
      @escluso = SE_NUM(PosYFondo2<20,1,0)
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + PosYFondo2
      @base_0.z = base_0.z + Z - ProfFondoInterno
      @InternoForno = 2
      @Z = ProfFondoInterno
   }

   Posiziona Cuc_Fondo fd1rIn
   {
      @escluso = 1
      //if( Alt_Forno>20 & VAR_FornoCompatto!=2 ) { @escluso = 0 }
      if( VAR_FornoCompatto==1 ) { @escluso = 0 }

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + Alt_Forno
      //@InternoForno = 1
      @base_0.z = base_0.z + Z - ProfFondoInterno
      @Z = ProfFondoInterno
   }

   Posiziona Cuc_FondoMobileForno fndmbfr
   {
      @escluso = 1
      if( VAR_FornoCompatto==2 & X<=600 )       { @escluso = 0 }

      if( VAR_FornoCompatto==0 & Alt_Forno>20 ) { @escluso = 0 }

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + Alt_Forno
      @base_0.z = base_0.z + Z - ProfFondoInterno

      if( VAR_FornoCompatto==2 )
      {
         @base_0.y = base_0.y + $Cuc_Spe_Fnd + 8.5
         @base_0.z = base_0.z + Z - ProfFondoInterno - 37
      }
      @Z = ProfFondoInterno
   }

   //la catena stretta/alluminio è stata convertita nella catena standard, e identificata
   //tramite la variabile CatAlluminio = 1. Questo per non avere troppi componenti nei fusti
   //catena frontale
   Posiziona Cuc_CatOriz catos_f
   {
      @escluso = VAR_CatF_OV
      //@CatAlluminio = 1

      GOSUB Cuc_PosaCatFroAlta
   }

   //inferiore frontale
   Posiziona Cuc_CatVert cator_f
   {
      GOSUB Cuc_PosaCatFroAlta
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @CatMasselloForno = 2

      @escluso = 0
      if( VAR_FornoCompatto==2 & X>600 ) { @escluso = 1 }
      if( VAR_FornoCompatto==1 )         { @escluso = 1 }
   }

   //superiore frontale
   Posiziona Cuc_CatVert catve_f
   {
      @escluso = 1- VAR_CatF_OV
      GOSUB Cuc_PosaCatFroAlta
      @CatMasselloForno = 1
      if( VAR_FornoCompatto==2 ) { @CatMasselloForno = 3 }
      if( VAR_FornoCompatto==1 )
      {
         @CatMasselloForno = 4
         if( X>600 ) { @CatMasselloForno = 3 }
      }
   }

   //retro alta
   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = VAR_CatR_OV
      @CatAlluminio = 1
      //Luca 04/03/2020
      //riporto modifiche di LAGO
      if( ConBifacciale ) { @CatAlluminio = 0 }
      @ConBifacciale = ConBifacciale

      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      if( @CatAlluminio==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }

      GOSUB Cuc_PosaCatRtrAlta
   }

   //Luca 20/11/2019 catena aggiuntiva in presenza
   //di lavorazione piano cottura su fianco
   Posiziona Cuc_CatOriz cator_2
   {
      @escluso = 1
      if( VAR_VAL(idx_att,"VAR_LavPC_FiaSx")==1
        | VAR_VAL(idx_att,"VAR_LavPC_FiaDx")==1  ) { @escluso = 0 }

      //Se bifacciale sarebbe un doppione
      if( ConBifacciale ) { @escluso  = 1 }

      //avrà lo stesso codice della catena frontale
      @FronteRetro = "F"

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = alto_2.y - $Cuc_Aria_Cop_Fia_Y - @Y
      @base_0.z = base_0.z + $Cuc_Rie_Cat_ZR
   }

   Posiziona Cuc_CatVert catve_r
   {
      @escluso = 1-VAR_CatR_OV
      GOSUB Cuc_PosaCatRtrAlta
   }

   ////catena verticale inferiore retro
   //Posiziona Cuc_CatVert catve_b
   //{
   //   @escluso = 1-ConCatBassa
   //   GOSUB Cuc_PosaCatRtrBassa
   //}
}


Elemento FustoBaseCantinetta
{
   Descrizione = "Fusto per base cantinetta"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X        "Larghezza luce"           568
      Y        "Altezza esc. zoccolo"     904
      Z        "Profondita' fianco"       560

      Fnd_OffZ "Fondo metallo - offset Z" 10
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1

      GOSUB posa_blocco

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

   Posiziona Cuc_FondoMetalloCantinetta fndm
   {
      @base_0 = base_0
      @base_0.z = base_0.z + Z - @Z - Fnd_OffZ
   }

   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = 1

      @CatAlluminio  = 0
      @CatSchLav     = 0
      @ConBifacciale = 1

      GOSUB Cuc_PosaCatRtrAlta

      @X = X
      @base_0.x = base_0.x
      @FronteRetro = "R"
   }
}

Elemento Cuc_FondoMetalloCantinetta
{
   Descrizione = "Ripiano in ferro per base cantinetta"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"   600
      Y "Spessore"    128
      Z "Profondità"  590

      FIN_var     ""  "C029"
      FIN_orie    ""  "O"

      GEST_CODICE ""  "B07007"
   }

   Assegnazioni
   {
      GOSUB AssComune

      sat_path = STRCAT( $path_sat, "Cucina\")
      sat_file = STRCAT( sat_path, "FondoFerroColLvstTerra_rev1.sat")

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CAMBIA_VAR
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1

      GOSUB posa_blocco

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

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento

      @base_0.y = base_0.y + 20

      @import = sat_file

      GOSUB rivestimento
   }
}

Elemento FustoBaseStdLvstOriz
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      X  "Larghezza luce"        500
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fianco"    560

      PosYFondo2       "" 118
      ProfFondoInterno "" 489
      //rob_pec 10/10/2019 Mantis 21052
      LarghMasselloLvst  "" 69


      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      VAR_CatR_OV "catena retro:   0= orizzontale 1= verticale"  1  Implicit
      VAR_CatF_OV "catena fronte:  0= orizzontale 1= verticale"  0  Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      VAR_LavPC_FiaSx "Lavorazione PianoCottura Fianco SX" 0 Implicit
      VAR_LavPC_FiaDx "Lavorazione PianoCottura Fianco SX" 0 Implicit


      StrPerGola     "" "" Implicit

      ConBifacciale  "" 0  Implicit

      ConPianoSNACK  "Presenza SNACK"    0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      //DescEdit__ = MSG(1003)
      //GOSUB Stato_7

      //LZ 19/04/2021 - Non necessaria
      ////Luca 06/11/2018
      //ConSchiena = SE_NUM(Y>184,1,0)

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli

      //rob_pec. Mantis 21052
      if(X>736) { LarghMasselloLvst = 9 }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
   }

   Posiziona Cuc_Fondo fd1r2
   {
      @escluso = SE_NUM(PosYFondo2<20,1,0)
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + PosYFondo2
      @base_0.z = base_0.z + Z - ProfFondoInterno
      @Z = ProfFondoInterno
      @InternoLvst = 1
   }

   Posiziona Cuc_CatOriz cator_f
   {
      @escluso = VAR_CatF_OV
      GOSUB Cuc_PosaCatFroAlta
      @CatLvstOri = 1
      @CatAlluminio = 1
      @base_0.z = base_1.z - 150
   }

   Posiziona Cuc_CatVert catve_f
   {
      @escluso = 1- VAR_CatF_OV
      GOSUB Cuc_PosaCatFroAlta
   }

   //catena orizzontale retro alta
   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = VAR_CatR_OV
      GOSUB Cuc_PosaCatRtrAlta

      @CatAlluminio = 1
      if( ConBifacciale ) { @CatAlluminio = 0 }

      @ConBifacciale = ConBifacciale

      @Y = $Cuc_Spe_Cat
      @Z = $Cuc_Larg_Cat

      if( @CatAlluminio==1 )
      {
         @Y = $Cuc_Spe_CatAll
         @Z = $Cuc_Larg_CatAll
      }
   }

   //catena verticale retro alta
   Posiziona Cuc_CatVert catve_r
   {
      @escluso = 1- VAR_CatR_OV
      GOSUB Cuc_PosaCatRtrAlta
   }

   Posiziona Cuc_MasselloLvst MasSx
   {
      //rob_pec. Mantis 21052
      @X = LarghMasselloLvst
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + PosYFondo2 + $Cuc_Spe_Fnd
      @base_0.z = base_1.z - @Z
      @Y = Y - PosYFondo2 - $Cuc_Spe_Fnd
      @Verso = -1
   }

   Posiziona Cuc_MasselloLvst MasDx
   {
      //rob_pec. Mantis 21052
      @X = LarghMasselloLvst
      @base_0.x = base_3.x - $Cuc_Spe_Fia - @X
      @base_0.y = base_0.y + PosYFondo2 + $Cuc_Spe_Fnd
      @base_0.z = base_1.z - @Z
      @Y = Y - PosYFondo2 - $Cuc_Spe_Fnd
      @Verso = 1
   }
}

Elemento FustoBaseStdLvst
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      X  "Larghezza luce"        500
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fianco"    560

      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      TipoScocca  "Posizione Base"   2 Implicit
      TipoLvst    "Tipologia LVST"   0 Implicit
      TipoApertura "Apertura Base"   0 Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      VAR_PassaC_OffY   "" 0 Implicit

      PosY_Sch  "" 378.5
      PosZ_Sch  "" 1
      Y_Sch     "" 200

      DimY_TampSup "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      StrPerGola     "" "" Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      //DescEdit__ = MSG(1003)
      //GOSUB Stato_7

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli

      DimY_TampSup = 0
      if( Y>870 )
      {
         DimY_TampSup = 60
         //XXL
         if( TipoLvst==1 ) { DimY_TampSup = 34 }
         //XL
         if( TipoLvst==2 ) { DimY_TampSup = 54 }

         //SOSPESA
         if( TipoScocca==2 )
         {
            DimY_TampSup = 60
            //XXL
            if( TipoLvst==1 ) { DimY_TampSup = 21 }
            //XL
            if( TipoLvst==2 ) { DimY_TampSup = 41 }
         }
      }

      //Luca 07/10/2019 -- controllo posizione schiena
      if( ACTION()>0 & ACTION()!=2 )
      {
         PosY_Sch = 378.5
         //if( TipoScocca==2 ) { PosY_Sch = 517.5 }
         //LZ 14/11 cambiate regole tecniche
         if( TipoScocca==2 ) { PosY_Sch = 571 }

         Y_Sch = 200

         PosZ_Sch = 1

         BOX_MODE(0)
         NEAR_GLOBALE("wk_keku",idx_cnear_sx,2,1,"Keku")
         SORT_POINT(base_0,"wk_keku","base_0")

         wk_sch_new = PosY_Sch

         i = 1
         while ( i<=wk_keku )
         {
            SET_#(wk_keku[i])
            wk_alt_keku = #base_0.y + #Y/2 - base_0.y
            if( PosY_Sch<wk_alt_keku & PosY_Sch+Y_Sch>wk_alt_keku )
            {
               wk_sch_new = PosY_Sch + 125

               if( wk_sch_new<VAR_PassaC_OffY-58 & wk_sch_new+Y_Sch>VAR_PassaC_OffY+58 )
               {
                  wk_sch_new = PosY_Sch - 125
               }
            }

            i = i + 1
         }

         //se collide ancora, sposto in avanti la schiena
         wk_col = 0
         i = 1
         while ( i<=wk_keku )
         {
            SET_#(wk_keku[i])
            wk_alt_keku = #base_0.y + #Y/2 - base_0.y
            if( wk_sch_new<wk_alt_keku & wk_sch_new+Y_Sch>wk_alt_keku ) { wk_col = 1 }

            i = i + 1
         }
         if( wk_col==1 )
         {
            wk_sch_new = PosY_Sch
            PosZ_Sch   = PosZ_Sch + 62
         }

         PosY_Sch = wk_sch_new
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_BarraInfLvst bfr
   {
      @escluso = 0
      if( TipoScocca!=0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_BarraInfLvst bff
   {
      @escluso = 0
      if( TipoScocca!=0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_FiancoLvst sp1r
   {
      GOSUB Cuc_PosaFiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
   }

   Posiziona Cuc_FiancoLvst sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch

     // Raffaele 18.06.2019
      // 1mm perche' con il flipper non ci sta
      //@base_0.z = base_0.z
      @base_0.z = base_0.z+1
      //a terra
      //@base_0.y = base_0.y + 378.5
      //sospesa
      //Luca 31/07/2019 mantis 0020595
      //if( TipoScocca==2 ) { @base_0.y = base_0.y + 517.5 }
      //@Y = 200

      //Luca 07/10/2019
      @base_0.y = base_0.y + PosY_Sch
      @base_0.z = base_0.z + PosZ_Sch
      @Y = Y_Sch
   }

   //Posiziona Cuc_RipLvst rip
   //{
   //   @escluso = 0
   //   if( Y<=871 )
   //   {
   //      if( TipoLvst==0 ) { @escluso = 1 }
   //   }
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
   //   @base_0.y = alto_2.y - 60 - @Y
   //   @Y = 19
   //
   //   //alzo se Lvst XXL
   //   if( TipoLvst==1 ) { @base_0.y = alto_2.y - 17 - @Y }
   //
   //   if( Y<=871 )
   //   {
   //      @base_0.y = alto_2.y - @Y
   //      if( TipoLvst==0 ) { @base_0.y = alto_2.y - @Y - 1 }
   //      //Luca 10/12/2019
   //      if( TipoLvst==1 )
   //      {
   //         @escluso = 1
   //
   //      }
   //   }
   //
   //   //Luca 20/11/2019 modifiche posizione e dimensione frontalino
   //   if( Y>871 ) { @base_0.y = alto_2.y - DimY_TampSup - @Y }
   //
   //   ////LZ 14/11 cambiate regole tecniche
   //   ////@base_0.z = base_1.z - @Z - 1.5
   //   //@base_0.z = base_1.z - @Z - 5.5
   //
   //   @base_0.z = base_1.z - @Z - 6
   //   if( Y<=871 )
   //   {
   //      @base_0.z = base_1.z - @Z - 4.5
   //   }
   //
   //   if( TipoApertura==1 )
   //   {
   //      //@base_0.z = base_1.z - @Z - 1.5
   //      @base_0.z = base_1.z - @Z - 2
   //
   //   }
   //
   //   @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   //}
   //
   //Posiziona Cuc_RipLvst rip30
   //{
   //   @escluso = 1
   //   if( Y<=871 & TipoLvst==0 ) { @escluso = 0 }
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
   //   @Y = 30
   //   @base_0.y = alto_2.y - @Y
   //   if( TipoLvst==0 ) { @base_0.y = alto_2.y - @Y - 1 }
   //
   //   //Luca 03/12/2019
   //   //@base_0.z = base_1.z - @Z - 1.5
   //   @base_0.z = base_1.z - @Z - 4.5
   //
   //   @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   //}
   //
   //
   //Posiziona Cuc_TamponamentoLvst tam
   //{
   //   @escluso = 0
   //   if( Y<=871 ) { @escluso = 1 }
   //
   //   @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
   //   @base_0.y = alto_2.y - @Y
   //
   //   //Luca 03/12/2019 revision
   //   ////LZ 14/11 cambiate regole tecniche
   //   ////@base_0.z = base_1.z - @Z
   //   //@base_0.z = base_1.z - @Z - 4
   //   //@base_0.z = base_1.z - @Z - 3
   //
   //   @base_0.z = base_1.z - @Z - 4.5
   //
   //   if( TipoApertura==1 ) { @base_0.z = base_1.z - @Z - 0.5 }
   //
   //   @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   //
   //   //Luca 20/11/2019 modifiche posizione e dimensione frontalino
   //   @Mas_Y = DimY_TampSup
   //
   //   @TipoLvst = TipoLvst
   //   @TipoApertura = TipoApertura
   //}

   Posiziona Cuc_RipLvst rip
   {
      @escluso = 0
      if( Y<=871 )
      {
         //lvst std si utilizza il ripiano da 30
         if( TipoLvst==0 ) { @escluso = 1 }
         //Luca 10/12/2019
         if( TipoLvst==1 ) { @escluso = 1 }
      }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.z = base_1.z - @Z - 6

      @Y = 19
      //Luca 20/11/2019 modifiche posizione e dimensione frontalino
      @base_0.y = alto_2.y - DimY_TampSup - @Y
      if( Y<=871 )
      {
         @base_0.y = alto_2.y - @Y
         if( TipoLvst==0 ) { @base_0.y = alto_2.y - @Y - 1 }

         @base_0.z = base_1.z - @Z - 4.5
      }
      //XL
      if( TipoApertura==1 ) { @base_0.z = base_1.z - @Z - 2 }

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_RipLvst rip30
   {
      @escluso = 1
      if( Y<=871 & TipoLvst==0 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      @Y = 30
      @base_0.y = alto_2.y - @Y
      if( TipoLvst==0 ) { @base_0.y = alto_2.y - @Y - 1 }

      @base_0.z = base_1.z - @Z - 4.5
   }

   Posiziona Cuc_TamponamentoLvst tam
   {
      @escluso = 0
      if( Y<=871 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = alto_2.y - @Y
      @base_0.z = base_1.z - @Z - 4.5

      if( TipoApertura==1 ) { @base_0.z = base_1.z - @Z - 0.5 }

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      //Luca 20/11/2019 modifiche posizione e dimensione frontalino
      @Mas_Y = DimY_TampSup

      @TipoLvst = TipoLvst
      @TipoApertura = TipoApertura
   }

   //solo se sospesa
   Posiziona Cuc_SupportoLvst supp
   {
      @escluso = 1
      if( TipoScocca==2 ) { @escluso = 0 }
      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_ZoccoloLvst zoc
   {
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $Cuc_Aria_Ant_Z
      @X = X - 2*$Cuc_Aria_Ant_X
   }

   Posiziona Cuc_MasselloXServoDrive msd
   {
      @escluso = 1 - TipoApertura
      @base_0.x = base_0.x + X/2
      @base_0.y = alto_2.y - @Y

      //Luca 10/12/2019 regole riviste
      ////LZ 14/11 cambiate regole tecniche
      ////@base_0.z = base_1.z - @Z - 21
      //@base_0.z = base_1.z - @Z - 21 - 4
      @base_0.z = base_1.z - @Z - 21
   }

   Posiziona Cuc_ServoDrive sd
   {
      @escluso = 1 - TipoApertura
      @base_0.x = base_0.x + X/2 - @X
      @base_0.y = alto_2.y - @Y

      //Luca 10/12/2019 regole riviste
      ////LZ 14/11 cambiate regole tecniche
      ////@base_0.z = base_1.z - @Z - 21
      ////@base_0.z = base_1.z - @Z - 21 - 4
      @base_0.z = base_1.z - @Z - 21
   }

   Posiziona _cont_per_near nfsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + $Cuc_Spe_Fia - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 50
   }

   Posiziona _cont_per_near nfdx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia -1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 50
   }
}

Elemento FustoBaseStdLvtr
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto              "" 0  SaveAlways

      //LZ 18/11/2021
      VAR_Revisione             "" 0  Implicit

      VAR_RevBarraInfLvtrSoff   "" 0  SaveAlways

      NO_GEST        "" 1

      X  "Larghezza luce"        500
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fianco"    560

      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      TipoScocca  "Posizione Base"   2 Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      VAR_PassaC_OffY  "" 0 Implicit

      PosY_Sch         "" 162.75
      PosY_Sch2        "" 113.75
      PosZ_Sch         "" 2

      Y_Sch            "" 200

      idx_cnear_sx     "" -1
      idx_cnear_dx     "" -1

      StrPerGola       "" "" Implicit

      ConBifacciale    "" 0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_BarraInfLvtrSoff", "VAR_RevBarraInfLvtrSoff")

      //DescEdit__ = MSG(1003)
      //GOSUB Stato_7

      PosZ_Sch = 2
      if( ConBifacciale==1 ) { PosZ_Sch = 80 }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_BarraInfLvst bfr
   {
      @escluso = 0
      if( VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      if( VAR_Revisione > 0 ) { @RuotaCatena = 1 }
      else                    { @RuotaCatena = 0 }
   }

   Posiziona Cuc_BarraInfLvst bff
   {
      @escluso = 0
      if( VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      if( VAR_Revisione > 0 ) { @RuotaCatena = 1 }
      else                    { @RuotaCatena = 0 }
   }

   Posiziona Cuc_BarraInfLvtr bfr2
   {
      @escluso = 1
      if( VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_BarraInfLvtr bff2
   {
      @escluso = 1
      if( VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch
      @base_0.y = base_0.y + PosY_Sch
      @base_0.z = base_0.z + PosZ_Sch
      @Y = Y_Sch
   }

   Posiziona Cuc_Sch sch2r
   {
      GOSUB Cuc_PosaSch

      @Y = Y_Sch

      @base_0.y = base_0.y + Y - @Y - PosY_Sch2
      @base_0.z = base_0.z + PosZ_Sch
   }

   Posiziona Cuc_CatOriz cator_f
   {
      GOSUB Cuc_PosaCatFroAlta
   }

   Posiziona _cont_per_near nfsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + $Cuc_Spe_Fia - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 50
   }

   Posiziona _cont_per_near nfdx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia -1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 50
   }
}

Elemento FustoBaseAngoloIsola
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      X  "Larghezza luce"        500
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fianco"    560

      Cuc_Alt_Zoc "" 0 Implicit

      ZFiaSx      "Profondita' fianco sx"  560
      ZFiaDx      "Profondita' fianco dx"  560
      ConSchiena  "Presenza Schiena"         1
      Verso       ""                        -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //DescEdit__ = MSG(1003)
      //GOSUB Stato_7

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli

      vano_0_0 = base_0
      vano_l_0 = X
      vano_h_0 = Y
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Simone 22/03/2023 - Sposto qui perchè è più semplice gestire la posizione
   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
      @base_0.y = base_0.y - @Y
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
      @base_0.z = base_0.z + $Cuc_Spe_Fnd
      @Z = Z - $Cuc_Spe_Fnd - $Cuc_Rie_Fnd_ZF

      @InternoAngIso = 1
   }

   Posiziona Cuc_Sch sch1r
   {
      //LZ 25/03/2022
      //@escluso = 1-ConSchiena
      @escluso = SE_NUM( ConSchiena == 0, 1, 0)

      @X = X - 2*$Cuc_Spe_Fia - 2*13
      @Y = Y
      @Z = $Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia + 13
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      if( ConSchiena < 0 )
      {
         @Y = $Cuc_Alt_SchRid
         @base_0.y = base_0.y + (Y - @Y)/2
      }
   }

   //catena orizzontale frontale
   Posiziona Cuc_CatOriz cator_f
   {
      //@escluso = VAR_CatF_OV
      //if(ConCielo)   {  @escluso = 1   }

      GOSUB Cuc_PosaCatFroAlta
   }

   Posiziona Cuc_MasselloAngIso ma1
   {
      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.z = base_0.z + $Cuc_Spe_Fia + @Z
      @Y = Y
      @ang_y = 90
      //@ConLamieraL = SE_NUM(Verso<0,0,1)
   }

   Posiziona Cuc_MasselloAngIso ma2
   {
      @base_0 = base_3
      @base_0.z = base_0.z + $Cuc_Spe_Fia
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia - @X
      @Y = Y
      //@ConLamieraL = SE_NUM(Verso<0,1,0)
   }

   Posiziona Cuc_LamieraLAngIso LamL
   {
      @base_0 = base_0
      //LZ 14/11 cambiate regole tecniche
      //@Y = Y + 17
      @Y = Y + 19
      @ang_y = 180
      @base_0.x = base_0.x + 32
      @base_0.z = base_0.z + 32
      //@ConLamieraL = SE_NUM(Verso<0,1,0)
      if( Verso<0 )
      {
         @ang_y = 90
         @base_0.x = base_3.x - 32
         @base_0.z = base_3.z + 32
      }
   }
}

Elemento FustoColStandard
{
   Descrizione = "Fusto per colonna standard"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto       ""                        0    SaveAlways

      NO_GEST            ""                        1

      X                  "Larghezza luce"          568
      Y                  "Altezza esc. zoccolo"    720
      Z                  "Profondita' fianco"      560

      ZFiaSx             "Profondita' fianco sx"   560
      ZFiaDx             "Profondita' fianco dx"   560

      TipoScocca         "Posizione Base"          0    Implicit
      TipoFrontale       "Tipo frontale "          -1   Implicit

      posRipianoStr      ""                        -1

      FLAG_soffietto     ""                        0    Implicit
      VanoInf_Soff       ""                        879

      //Luca 21/04/2020
      //variabili necessarie per elementi base angolo
      FLAG_BaseAngolo    ""                        0
      Verso_BA           ""                        -1
      OffsetZ_PanFix     ""                        0    Implicit
      X_Anta             ""                        0    Implicit
      X_Mass             ""                        0    Implicit
      Z_Mass             ""                        0    Implicit
      Con_DistMan        ""                        0    Implicit
      X_DistMan          ""                        0    Implicit
      Con_DistAng        ""                        0    Implicit
      X_DistAng          ""                        0    Implicit
      Y_DistAng          ""                        0    Implicit
      Z_DistAng          ""                        0    Implicit
      PosY_DistAng       ""                        0    Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }


   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd

      //GOSUB CucP_PosaFndBR
      //aliasposiz = "foncol"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Cop Cl1r
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      //GOSUB CucP_PosaCopBR
      //aliasposiz = "copcol"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + Cuc_Aria_Fnd_Sch_Y
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y

      if( FLAG_soffietto == 1)
      {
         @Y = VanoInf_Soff - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y
      }

      if( posRipianoStr >= 0
        & FLAG_BaseAngolo == 1)
      {
         @Y = posRipianoStr - $Cuc_Spe_Fnd - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y
      }
   }

   Posiziona Cuc_RipSoff ripsof
   {
      @escluso = 1 - FLAG_soffietto
      GOSUB Cuc_PosaFnd
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.y = base_0.y + $Cuc_Spe_Fnd + VanoInf_Soff
   }

   Posiziona Cucina_2_5_Fusto_Divisorio_Strutturale ripstr1
   {
      div_num = 1
      GOSUB Cucina_2_5_Fusto_Divisorio_Strutturale_Posiziona

      posRipianoStr = SE_NUM( @escluso == 0, @base_0.y, -1)
   }

   //Luca 16/12/2019 interna per soffietto
   Posiziona Cuc_Sch sch2r
   {
      @escluso = 1 - FLAG_soffietto

      GOSUB Cuc_PosaSch
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + VanoInf_Soff + Cuc_Aria_Fnd_Sch_Y + $Cuc_Spe_Div
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y -  VanoInf_Soff -  $Cuc_Spe_Div

      if( posRipianoStr >= 0
        & FLAG_BaseAngolo == 1)
      {
         @escluso = 0

         @base_0.y = base_0.y + posRipianoStr + 38 + Cuc_Aria_Fnd_Sch_Y
         @Y = Y - $Cuc_Spe_Cop - Cuc_Aria_Fnd_Sch_Y - posRipianoStr - 38 - Cuc_Aria_Cop_Sch_Y
      }
   }

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }

   Posiziona RigaOrdine_NonGraficato mcsf
   {
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }
      @base_0 = base_0
      @GEST_CODICE = "D06007"
      @X = 50
      @Y = 500
      @Z = 50
   }

   //Simone 26/10/2022
   Posiziona LamierinoVetrinettaNow lamcop
   {
      @escluso = 1
      if( TipoFrontale == 6 ) { @escluso = 0 }

      @base_0.x = base_0.x
      @base_0.y = alto_0.y
      @base_0.z = base_0.z + Z - @Z + @Off_Z
   }

   //Simone 24/11/2022 - introdotto lamierino anche sul fondo
   Posiziona LamierinoVetrinettaNow lamfnd
   {
      @escluso = 1
      if( TipoFrontale == 6 ) { @escluso = 0 }

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

   //Luca 21/04/2020
   //{ gestione fusti configurati
   //tutti questi elementi sono stati portati dentro al fusto
   Posiziona Cuc_PannelloAngolo pan
   {
      @escluso = 1
      if( FLAG_BaseAngolo == 1) { @escluso = 0 }

      @X = X - X_Anta - X_Mass - SE_NUM( Cucina_Versione > 2, 2, 0)
      @Z = $Cuc_Spe_Fia
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - 1
      if( posRipianoStr >= 0) { @Y = posRipianoStr - base_0.y - $Cuc_Spe_Fnd - 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + 1
      if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - @X - 1 }
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + 0.5
      @base_0.z = base_0.z + Z - $Cuc_Spe_Fia + OffsetZ_PanFix
   }

   Posiziona Cuc_MasselloAngolo masint
   {
      @escluso = 1
      if( FLAG_BaseAngolo == 1) { @escluso = 0 }

      @X = X_Mass
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop
      if( posRipianoStr >= 0) { @Y = posRipianoStr - base_0.y - $Cuc_Spe_Fnd }
      @Z = Z_Mass

      @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) + 2
      if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X - 2 }
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z + Z - Z_Mass

      if( Cucina_Versione > 2)
      {
         @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass)
         if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X }
      }
   }

   Posiziona Cuc_PannelloAngolo pan2
   {
      @escluso = 1
      if( posRipianoStr >=0
        & FLAG_BaseAngolo == 1) { @escluso = 0 }

      @X = X - X_Anta - X_Mass - SE_NUM( Cucina_Versione > 2, 2, 0)
      @Y = Y - posRipianoStr - 38 - $Cuc_Spe_Fnd - 1
      @Z = $Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia + 1
      if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - @X - 1 }
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - 0.5 - @Y
      @base_0.z = base_0.z + Z - $Cuc_Spe_Fia + OffsetZ_PanFix
   }

   Posiziona Cuc_MasselloAngolo masint2
   {
      @escluso = 1
      if( posRipianoStr >=0
        & FLAG_BaseAngolo == 1) { @escluso = 0 }

      @X = X_Mass
      @Y = Y - posRipianoStr - 38 - $Cuc_Spe_Fnd
      @Z = Z_Mass

      @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass) + 2
      if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X - 2 }
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - @Y
      @base_0.z = base_0.z + Z - Z_Mass

      if( Cucina_Versione > 2)
      {
         @base_0.x = base_0.x + $Cuc_Spe_Fia + (X - X_Anta - X_Mass)
         if( Verso_BA == 1) { @base_0.x = base_2.x - $Cuc_Spe_Fia - (X - X_Anta - X_Mass) - @X }
      }
   }

   Posiziona Cuc_MontanteAng mont
   {
      @escluso = 1
      if( FLAG_BaseAngolo==1 & Con_DistAng==1 )  { @escluso = 0 }

      @X = X_DistAng
      @Y = Y_DistAng
      @Z = Z_DistAng

      @Verso = Verso_BA

      wk_offx = X - X_Anta + 2*$Cuc_Aria_Ant_X - @X + SE_NUM( Cucina_Versione > 2, 0, 2)

      @base_0.x = base_0.x + wk_offx
      if( Verso_BA > 0)
      {
         @base_0.x = base_0.x + X - wk_offx - @X
      }
      @base_0.y = base_0.y + PosY_DistAng
      @base_0.z = base_0.z + Z
   }
   //} gestione fusti configurati
}

Elemento FustoColonnaLvst
{
   Descrizione = "Fusto per colonna standard"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto              "" 0  SaveAlways

      VAR_RevBarraInfLvtrSoff   "" 0  Implicit

      NO_GEST        "" 1

      X       "Larghezza luce"          568
      Y       "Altezza esc. zoccolo"    720
      Z       "Profondita' fianco"      560

      ZFiaSx  "Profondita' fianco sx"   560
      ZFiaDx  "Profondita' fianco dx"   560

      Verso   ""                     0 Implicit

      TipoScocca  "Posizione Base"   0 Implicit

      YVanoLvst      "" 0 Implicit
      YVanoApertura  "" 0 Implicit
      YVanoSuperiore "" 0 Implicit

      TipoApertura "Apertura Lvst"   0 Implicit

      //Luca 16/12/2019
      FLAG_soffietto  ""  0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_BarraInfLvst bfr
   {
      @escluso = 0
      if( TipoScocca!=0 )               { @escluso = 1 }
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_BarraInfLvst bff
   {
      @escluso = 0
      if( TipoScocca!=0 )               { @escluso = 1 }
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_MassInfSoff bbs2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      if( Verso > 0 ) { @base_0.x = base_0.x + X - $Cuc_Spe_Fia - @X }
   }

   Posiziona Cuc_BarraInfLvtr bfr2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      if( Verso < 0 ) { @base_0.x = @base_0.x + $Cuc_Spe_MasSoff }
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia - $Cuc_Spe_MasSoff
   }

   Posiziona Cuc_BarraInfLvtr bff2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      if( Verso < 0 ) { @base_0.x = @base_0.x + $Cuc_Spe_MasSoff }
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia - $Cuc_Spe_MasSoff
   }

   Posiziona Cuc_FondoFerroLvst ffe
   {
      @escluso = 1
      if( TipoScocca == 2) { @escluso = 0 }

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Z - SE_NUM( Cucina_Versione > 2, 73, 72)

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z
   }

   Posiziona Cuc_FiancoLvst sp1r
   {
      //Luca 08/01/2020 mantis 21749
      @escluso = 0
      if( FLAG_soffietto==1 ) { @escluso = 1 }

      GOSUB Cuc_PosaFiaSx
      @perColonna = 1
   }

   Posiziona Cuc_FiancoLvst sp2r
   {
      //Luca 08/01/2020 mantis 21749
      @escluso = 0
      if( FLAG_soffietto==1 ) { @escluso = 1 }

      GOSUB Cuc_PosaFiaDx
      @perColonna = 1
   }

   Posiziona Cuc_Fianco sp1rstd
   {
      //Luca 08/01/2020 mantis 21749
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }

      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2rstd
   {
      //Luca 08/01/2020 mantis 21749
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }

      GOSUB Cuc_PosaFiaDx
   }

   Posiziona Cuc_Fondo flvs
   {
      @escluso = FLAG_soffietto

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + YVanoLvst + YVanoApertura + $Cuc_Spe_Div

      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @InternoCol = 1
   }

   //Luca 16/12/2019 cambio elemento se colonna soffietto
   Posiziona Cuc_RipSoff ripsof
   {
      @escluso = 1 - FLAG_soffietto
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + YVanoLvst + YVanoApertura + $Cuc_Spe_Div

      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Fondo fd1r
   {
      //Luca 06/04/2019
      //non serve --  per evitare errori in caricamento escludo e non elimino
      @escluso = 1

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + YVanoLvst + YVanoApertura + $Cuc_Spe_Div
      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
      @InternoCol = 1
   }

   Posiziona Cuc_Cop Cl1r
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch
      @Y = YVanoSuperiore - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - @Y - Cuc_Aria_Cop_Sch_Y
   }

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }

   Posiziona Cuc_RipLvst rip
   {
      //Luca 16/12/2019
      @escluso = 0
      if( FLAG_soffietto==1 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y + YVanoLvst
      //Luca 30/04/2019
      //@base_0.z = base_1.z - @Z - 1.5
      @base_0.z = base_1.z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
   }

   Posiziona Cuc_MasselloXServoDrive msd
   {
      @escluso = 1 - TipoApertura
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + YVanoLvst + $Cuc_Spe_Div
      @base_0.z = base_1.z - @Z - 21
   }

   Posiziona Cuc_ServoDrive sd
   {
      @escluso = 1 - TipoApertura
      @base_0.x = base_0.x + X/2 - @X
      @base_0.y = base_0.y + YVanoLvst + $Cuc_Spe_Div
      @base_0.z = base_1.z - @Z - 21
   }

   Posiziona Cuc_TamponamentoLvst tam
   {
      //Luca 16/12/2019
      @escluso = 0
      if( FLAG_soffietto==1 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      //Luca 30/04/2019
      //@base_0.y = base_0.y + YVanoLvst + $Cuc_Spe_Div + YVanoApertura - @Y
      //@base_0.z = base_1.z - @Z
      @base_0.y = base_0.y + YVanoLvst + $Cuc_Spe_Div + YVanoApertura - @Y + $Cuc_Spe_Div
      @base_0.z = base_1.z - @Z + 1.5
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      @TipoApertura = TipoApertura
   }

   //Luca 20/04/2020
   Posiziona RigaOrdine_NonGraficato mcsf
   {
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }
      @base_0 = base_0
      @GEST_CODICE = "D06007"
      @X = 50
      @Y = 500
      @Z = 50
   }
}

Elemento FustoColLvstForno
{
   Descrizione = "Fusto per colonna standard"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      ////revisione 1 attivo la parte gestionale
      VAR_RevFusto              "" 0  SaveAlways
      NO_GEST                   "" 1

      VAR_Revisione             "" 0  Implicit
      VAR_RevBarraInfLvtrSoff   "" 0  Implicit

      X       "Larghezza luce"          568
      Y       "Altezza esc. zoccolo"    720
      Z       "Profondita' fianco"      560

      ZFiaSx  "Profondita' fianco sx"   560
      ZFiaDx  "Profondita' fianco dx"   560

      TipoScocca  "Posizione Base"   0 Implicit

      YVanoRip    "Altezza vano ripiani"          0 Implicit
      YVanoEld    "Altezza vano forno"            0 Implicit
      YAntaInf    "Altezza anta inferiore"        0 Implicit
      YAntaSup    "Altezza anta superiore"        0 Implicit
      YPieReg     "Altezza piedino regolatore"    0 Implicit

      VAR_PosYEld        "Posizione in altezza eldom"    0 Implicit
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      wk_DiffYFroEld     "Differenza H frontale/scocca"  0 Implicit
      VAR_YAll           "Allineamento in altezza"       0 Implicit

      YVanoLvst   "" 762.5 Implicit
      YPosFndLvst "" 113.5 Implicit

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      YFndFrn            "Spessore fondo forno"         19 Implicit

      TipoApertura "Apertura Lvst"   0 Implicit

      Verso       "" -1 Implicit

      //Luca 16/12/2019
      FLAG_soffietto  ""  0 Implicit

      //1 con vano lavastoviglie da 560
      //2 con vano lavastoviglie da 600
      TipoColonnaLvst "" 1

      TipoLvst "" 0

      VAR_TampY_Lvst "" 66
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 12/12/2019
      if( TipoColonnaLvst==2 )
      {
         VAR_TampY_Lvst = 66
         if( TipoLvst==2 ) { VAR_TampY_Lvst = 38 }
         if( TipoLvst==1 ) { VAR_TampY_Lvst = 19 }

         //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizza gli stessi elementi della colonna sospesa
         //if( TipoScocca==2 )
         if( TipoScocca==2 | VAR_Revisione == 1 )
         {
            VAR_TampY_Lvst = 52
            if( TipoLvst==2 ) { VAR_TampY_Lvst = 25 }

            //LZ 03/03/2021: revisione tecnica colonna lvst/forno, colonna allineata a 873 non ha tamponamento
            //if( TipoLvst==1 ) { VAR_TampY_Lvst = 0 }
            if( TipoLvst==1 | VAR_YAll==1 ) { VAR_TampY_Lvst = 0 }
         }
      }

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_BarraInfLvst bfr
   {
      @escluso = 0
      if( TipoScocca!=0 )               { @escluso = 1 }
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( VAR_Revisione == 1 ) { @base_0.z = base_0.z + 17 }

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      //Luca 17/12/2019
      if( TipoColonnaLvst==2 )
      {
         @escluso = 1
         //Luca 08/01/2020 21744: Colonna sospesa lavastoviglie standard: revisione barre su fondo
         //if( TipoScocca==2 ) { @escluso = 0 }
         //@base_0.z = base_0.z + 8.5
      }

   }

   Posiziona Cuc_BarraInfLvst bff
   {
      @escluso = 0
      if( TipoScocca!=0 )               { @escluso = 1 }
      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( VAR_Revisione == 1 ) { @base_0.z = base_0.z + Z - @Z - 49 }

      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia

      if( TipoColonnaLvst==2 )
      {
         @escluso = 1
         if( TipoScocca==2 ) { @escluso = 0 }
         @base_0.x = base_0.x
         //Luca 04/03/2020
         //riporto modifiche fatte da LAGO
         //LZ 23/12/2019 - Specifica errata, a 181 dal fronte del frontale
         //@base_0.z = base_0.z + Z - @Z - 157
         @base_0.z = base_0.z + Z - @Z - 155
         //LZ 03/03/2021: revisione tecnica colonna lvst/forno
         if( VAR_Revisione == 1 ) { @base_0.z = base_0.z + Z - @Z - 154 }

         @X = X
      }
   }

   Posiziona Cuc_MassInfSoff bbs2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      if( Verso > 0 ) { @base_0.x = base_0.x + X - $Cuc_Spe_Fia - @X }
   }

   Posiziona Cuc_BarraInfLvtr bfr2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      if( Verso < 0 ) { @base_0.x = @base_0.x + $Cuc_Spe_MasSoff }
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia - $Cuc_Spe_MasSoff
   }

   Posiziona Cuc_BarraInfLvtr bff2
   {
      @escluso = 0
      if( TipoScocca!=0 )                { @escluso = 1 }
      if( FLAG_soffietto <= 0
        | VAR_RevBarraInfLvtrSoff <= 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      if( Verso < 0 ) { @base_0.x = @base_0.x + $Cuc_Spe_MasSoff }
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia - $Cuc_Spe_MasSoff
   }

//LZ 03/09/2019 - la colonna mista ha un'apertura differente rispetto a quella standard,
//no scassi sui fianchi e fondo a -5mm
//   Posiziona Cuc_FiancoLvst sp1r
//   {
//      GOSUB Cuc_PosaFiaSx
//      @perColonna = 2
//   }
//
//   Posiziona Cuc_FiancoLvst sp2r
//   {
//      GOSUB Cuc_PosaFiaDx
//      @perColonna = 2
//   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx

      //Luca 12/12/2019
      if( TipoColonnaLvst==2 )
      {
         //LZ 03/03/2021: revisione tecnica colonna lvst/forn, utilizzo fondo forno variabile 19/25
         //@base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd - VAR_TampY_Lvst
         //@Y = Y - VAR_PosYEld + $Cuc_Spe_Fnd + VAR_TampY_Lvst
         @base_0.y = base_0.y + VAR_PosYEld - YFndFrn - VAR_TampY_Lvst
         @Y = Y - VAR_PosYEld + YFndFrn + VAR_TampY_Lvst
      }
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      //Luca 12/12/2019
      if( TipoColonnaLvst==2 )
      {
         //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizzo fondo forno variabile 19/25
         //@base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd - VAR_TampY_Lvst
         //@Y = Y - VAR_PosYEld + $Cuc_Spe_Fnd + VAR_TampY_Lvst
         @base_0.y = base_0.y + VAR_PosYEld - YFndFrn - VAR_TampY_Lvst
         @Y = Y - VAR_PosYEld + YFndFrn + VAR_TampY_Lvst
      }
   }

   //Luca 12/12/2019
   Posiziona Cuc_FondoMetalloLvstCol flm
   {
      @escluso = 1
      if( TipoColonnaLvst == 2 ) { @escluso = 0 }
      if( FLAG_soffietto  == 1 ) { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z - 12

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( VAR_Revisione == 1 ) { @base_0.z = base_0.z + Z - @Z - 14 }
   }

   //Luca 12/12/2019
   Posiziona Cuc_TamponamentoColLvst tamp
   {
      @escluso = 1
      if( TipoColonnaLvst==2 ) { @escluso = 0 }

      //Luca 16/12/2019
      if( FLAG_soffietto==1 )  { @escluso = 1 }

      if( VAR_TampY_Lvst==0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizzo fondo forno variabile 19/25
      //@base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd - VAR_TampY_Lvst
      @base_0.y = base_0.y + VAR_PosYEld - YFndFrn - VAR_TampY_Lvst
      @base_0.z = base_0.z + Z - @Z
      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia
      @Y = VAR_TampY_Lvst
      @Z = 39.5
      if( VAR_TampY_Lvst<60 ) { @Z = 80 }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizza gli stessi elementi di quella sospesa
      if( TipoScocca==2 | VAR_Revisione==1 )
      {
         @Z = 80
         if( VAR_TampY_Lvst==52 )  { @Z = 39.5 }
      }
   }

   Posiziona Cuc_Fondo fd
   {
      @escluso = 1
      if( TipoScocca==2 ) { @escluso = 0 }

      if( TipoColonnaLvst==2 ) { @escluso = 1 }


      GOSUB Cuc_PosaFnd
   }

   Posiziona Cuc_Fondo fndlvst
   {
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + YPosFndLvst

      //in profondità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @InternoColLvst = 1
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, ora il fondo lvst è da 19, riutilizzo quello generico
      if( VAR_Revisione == 1 )
      {
         @InternoColLvst = 0
         @InternoCol = 1
      }

      //Luca 12/12/2019
      if( TipoColonnaLvst==2 ) { @escluso = 1 }

      //Luca 16/12/2019
      if( FLAG_soffietto==1 ) { @escluso = 1 }
   }

   //Luca 20/03/2020
   Posiziona Cuc_Sch schrtr
   {
      @escluso = 1
      if( UN_PADRE("ScoccaT_ColLvstForno") & VAR_Revisione==1 ) { @escluso = 0 }

      GOSUB Cuc_PosaSch
      @Y = 250
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, corretto posizionamento
      //@base_0.y = base_0.y + YPosFndLvst + $Cuc_Spe_Fnd_Lvst + 250
      @base_0.y = base_0.y + YPosFndLvst + $Cuc_Spe_Fnd_Lvst_r1 + 256
      @base_0.z = base_0.z + 2
   }


   //Posiziona Cuc_Fondo fndint
   Posiziona Cuc_Cop fndint
   {
      @escluso = FLAG_soffietto

      //Luca 21/02/2020 mantis
      if( UN_PADRE("ScoccaT_ColLvst2Forno") ) { @escluso = 1 }

      GOSUB Cuc_PosaFnd
      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizzo fondo forno variabile 19/25
      //@base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd
      @Y = YFndFrn
      @base_0.y = base_0.y + VAR_PosYEld - @Y

      //in profondità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      //Luca 06/04/2019
      @InternoCol = 1
   }

   //Luca 21/02/2020
   Posiziona Cuc_Fondo fd1r
   {
      @escluso = 1
      if( UN_PADRE("ScoccaT_ColLvst2Forno") ) { @escluso = 0 }

      GOSUB Cuc_PosaFnd

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, utilizzo fondo forno variabile 19/25
      //@base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd
      @Y = YFndFrn
      @base_0.y = base_0.y + VAR_PosYEld - @Y

      ////in profodnità come il ripiano
      //@base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      //@Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   //Luca 16/12/2019
   Posiziona Cuc_RipSoff ripsof
   {
      @escluso = 1 - FLAG_soffietto

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Fnd
      //in profondità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   //Luca 16/12/2019
   Posiziona Cuc_MasselloColSoff massfs
   {
      @escluso = 1 - FLAG_soffietto
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z

      @X = Cuc_MasSof_Min
      @Y = YVanoEld + YPieReg
      if( Verso<0 ) { @X = Cuc_MasSof_Mag }
   }

   Posiziona Cuc_MasselloColSoff massfd
   {
      @escluso = 1 - FLAG_soffietto

      @X = Cuc_MasSof_Mag
      @Y = YVanoEld + YPieReg
      if( Verso<0 ) { @X = Cuc_MasSof_Min }

      @base_0.x = base_0.x + X - @X - $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z
   }

   //Luca 16/12/2019
   Posiziona Cuc_HPLColSoff hpls
   {
      @escluso = 1 - FLAG_soffietto

      @base_0.x = base_0.x + $Cuc_Spe_Fia

      //Luca 04/03/2020
      //riporto modifiche di LAGO
      if( Verso<0 ) { @base_0.x = @base_0.x + Cuc_MasSof_Mag }
      else { @base_0.x = @base_0.x + Cuc_MasSof_Min }

      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_HPLColSoff hpld
   {
      @escluso = 1 - FLAG_soffietto

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

      //Luca 04/03/2020
      //riporto modifiche di LAGO
      if( Verso<0 ) { @base_0.x = @base_0.x - Cuc_MasSof_Min }
      else { @base_0.x = @base_0.x - Cuc_MasSof_Mag }

      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Fondo fndint2
   {
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld + YVanoEld + YPieReg

      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      //Luca 06/04/2019
      @InternoCol = 1

      //Luca 16/12/2019
      if( FLAG_soffietto==1 )
      {
         @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR - $Cuc_Rie_Rip_ColSoff
      }
   }

   Posiziona Cuc_Cop Cl1r
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch

      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip + Cuc_Aria_Fnd_Sch_Y
      @Y = YVanoRip - Cuc_Aria_Cop_Sch_Y - Cuc_Aria_Fnd_Sch_Y
   }

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2
        | TipoColonnaLvst == 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2 | TipoColonnaLvst == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }

   //Luca 20/04/2020
   Posiziona RigaOrdine_NonGraficato mcsf
   {
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }
      @base_0 = base_0
      @GEST_CODICE = "D06007"
      @X = 50
      @Y = 500
      @Z = 50
   }
}

Elemento FustoColFrigo
{
   Descrizione = "Fusto per colonna Frigo"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto "" 0  SaveAlways

      NO_GEST        "" 1

      //#include %path_bdm%\var_dbfusto.inc
      X       "Larghezza luce"          568
      Y       "Altezza esc. zoccolo"    720
      Z       "Profondita' fianco"      560

      //Y_2Fondo "Posizione secondo fondo"       0
      //Y_3Fondo "Posizione 3 fondo/cielo aggiuntivo"  500

      ZFiaSx  "Profondita' fianco sx"   560
      ZFiaDx  "Profondita' fianco dx"   560

      TipoScocca  "Posizione Base"   0 Implicit

      VAR_PosFondoFr     "Posizione fondo Frigo"         0 Implicit
      YVanoRip           "Altezza vano ripiani"          0 Implicit
      YVanoFrigo         "Altezza vano frigo"            0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol

      ZFondoFrigo = 674
      if( Z < ZFondoFrigo) { ZFondoFrigo = 604 }
      if( Z < ZFondoFrigo) { ZFondoFrigo = Z   }
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
   }

   Posiziona Cuc_PanFondoFrigo pafndrt
   {
      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Cuc_Z_PanFnd

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

      @Posizione = -1
   }

   Posiziona Cuc_PanFondoFrigo pafndfr
   {
      @escluso = 1
      if( TipoScocca == 0
        | Cucina_Versione > 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Cuc_Z_PanFnd

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

      @Posizione = 1
   }

   Posiziona Cuc_FondoFrigo fndfr
   {
      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Z

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

      if( Cucina_Versione > 2)
      {
         @Z = ZFondoFrigo
         @base_0.z = base_0.z + Z - @Z
      }
   }

   //Luca 14/02/2019
   Posiziona Cuc_Sch schinf
   {
      @escluso = 1
      if( VAR_PosFondoFr>50 ) { @escluso = 0 }

      GOSUB Cuc_PosaSch
      @base_0.y = base_0.y + 19
      @Y = VAR_PosFondoFr - 1
      @base_0.z = base_0.z + Z - Cuc_Z_PanFnd - @Z/2 - Cuc_RieF_PanFndFr
   }

   Posiziona Cuc_Fondo fndint
   {
      @escluso = 0
      if( TipoScocca==0 )
      {
         if( YVanoRip<138 ) { @escluso = 1 }
      }
      if( TipoScocca==2 )
      {
         if( YVanoRip<250 ) { @escluso = 1 }
      }

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip - $Cuc_Spe_Fnd

      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      //Luca 06/04/2019
      @InternoCol = 1
   }

   Posiziona Cuc_Cop cop
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Sch schfr
   {
      GOSUB Cuc_PosaSch
      @Y = Cuc_Y_SchFr
      @base_0.y = base_0.y + Cuc_Spe_FndFr + VAR_PosFondoFr + YVanoFrigo/2 - Cuc_Y_SchFr/2
      @base_0.z = base_0.z + Cuc_RieR_SchFr
   }

   Posiziona Cuc_Sch sch1r
   {
      @escluso = 0
      if( TipoScocca==0 )
      {
         if( YVanoRip<138 ) { @escluso = 1 }
      }
      if( TipoScocca==2 )
      {
         if( YVanoRip<250 ) { @escluso = 1 }
      }

      GOSUB Cuc_PosaSch
      //Luca 20/05/2019
      //@base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip + Cuc_Aria_Fnd_Sch_Y
      @Y = YVanoRip - Cuc_Aria_Cop_Sch_Y -Cuc_Aria_Fnd_Sch_Y
   }

   Posiziona Cuc_TamponamentoFrigo tamp
   {
      @escluso = 1
      if( TipoScocca==0 )
      {
         if( YVanoRip<138 ) { @escluso = 0 }
      }
      if( TipoScocca==2 )
      {
         if( YVanoRip<250 ) { @escluso = 0 }
      }

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      //@base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip - $Cuc_Spe_Fnd + 2
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - @Y
      @base_0.z = base_0.z + Z - @Z
      @X = X -2*$Cuc_Spe_Fia
      @Y = YVanoRip + $Cuc_Spe_Fnd - 2

      //Luca 04/03/2020
      //riporto modifiche dimensionali fatte da LAGO
      //if( @Y<90 ) { @escluso = 1 }
      if( @Y<=24 ) { @escluso = 1 }
   }

   //frontale fisso

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2
        & YVanoRip >= 250) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }
}

Elemento FustoColForno
{
   Descrizione = "Fusto per colonna Forno"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto     ""                              0    SaveAlways

      NO_GEST          ""                              1

      X                "Larghezza luce"                568
      Y                "Altezza esc. zoccolo"          720
      Z                "Profondita' fianco"            560

      ZFiaSx           "Profondita' fianco sx"         560
      ZFiaDx           "Profondita' fianco dx"         560

      TipoScocca       "Posizione Base"                0    Implicit

      Verso            ""                              -1   Implicit

      //Luca 16/12/2019
      FLAG_soffietto   ""                              0    Implicit

      YVanoRip         "Altezza vano ripiani"          0    Implicit
      YVanoEld         "Altezza vano forno"            0    Implicit
      YAntaInf         "Altezza anta inferiore"        0    Implicit
      YAntaSup         "Altezza anta superiore"        0    Implicit
      YPieReg          "Altezza piedino regolatore"    0    Implicit

      YFndFrn          "Altezza ripiani interni"       19   Implicit
      YCopFrn          "Altezza ripiani interni"       19   Implicit

      PosYRip1         "Posizione Ripiani interni"     0    Implicit
      PosYRipF         "Posizione Ripiani interni"     0    Implicit
      PosYRip2         "Posizione Ripiani interni"     0    Implicit

      VAR_PosYEld      "Posizione in altezza eldom"    0    Implicit

      VAR_PosYEld2     "Posizione in altezza eldom2"   0    Implicit

      YVanoEld2        "Altezza vano eldom 2"          0    Implicit

      Colonna2Eldom    ""                              0

      VarPos           ""                              2
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli

      vano_0_0 = [$Cuc_Spe_Fia, $Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z + $Cuc_Spe_Sch ]
      vano_l_0 = X - 2*$Cuc_Spe_Fia
      vano_p_0 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z
   }

   Controlli
   {
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
   }

   // Fondo vano forno - utilizzo Cuc_Cop per cam
   Posiziona Cuc_Cop fndint
   {
      @escluso = FLAG_soffietto

      GOSUB Cuc_PosaFnd

      @Y = YFndFrn
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.y = base_0.y + VAR_PosYEld - @Y
      if( VarPos == 2) { @base_0.y = base_0.y + PosYRip1 }
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = 1
   }

   //Luca 16/12/2019
   Posiziona Cuc_RipSoff ripsof
   {
      @escluso = 1 - FLAG_soffietto

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Cop
      if( VarPos==2 ) { @base_0.y = base_0.y + PosYRip1 }
      //in profondità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_RipianoFerro ripfe
   {
      //per colonna 2 eldom
      @escluso = 1
      if( Colonna2Eldom )  { @escluso = 0 }
      if( FLAG_soffietto ) { @escluso = 1 }

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld + YVanoEld + YPieReg

      if( VarPos==2 ) { @base_0.y = base_0.y + PosYRipF }

      //in profodnità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      //Luca 31/07/2019 mantis 20595
      //@Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
      @Z = 544

      //Luca 09/10/20 riporto modifiche inviate da LAGO
      @base_0.z = base_0.z + Z - @Z
   }

   //Luca 16/12/2019
   //al posto del fondo in ferro in caso di colonna soffietto
   Posiziona Cuc_Fondo fndints
   {
      @escluso = 1
      if( FLAG_soffietto==1 & Colonna2Eldom==1 ) { @escluso = 0 }

      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld + YVanoEld + YPieReg
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR - $Cuc_Rie_Rip_ColSoff

      @InternoCol = 1
   }

   Posiziona Cuc_Fondo fndint2
   {
      GOSUB Cuc_PosaFnd
      @base_0.y = base_0.y + VAR_PosYEld + YVanoEld + YPieReg

      if( Colonna2Eldom )
      {
         @base_0.y = base_0.y + VAR_PosYEld + YVanoEld + YPieReg +  YVanoEld2 + $Cuc_Spe_RipFe
      }

      if( VarPos==2 ) { @base_0.y = base_0.y + PosYRip2 }

      //in profondità come il ripiano
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      //Luca 16/12/2019
      if( FLAG_soffietto==1 )
      {
         @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR - $Cuc_Rie_Rip_ColSoff
      }

      @InternoCol = 1
   }

   //Luca 16/12/2019
   Posiziona Cuc_MasselloColSoff massfs
   {
      @escluso = 1 - FLAG_soffietto
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z

      @X = Cuc_MasSof_Min
      @Y = YVanoEld + YPieReg
      if( Verso<0 ) { @X = Cuc_MasSof_Mag }
   }

   Posiziona Cuc_MasselloColSoff massfd
   {
      @escluso = 1 - FLAG_soffietto

      @X = Cuc_MasSof_Mag
      @Y = YVanoEld + YPieReg
      if( Verso<0 ) { @X = Cuc_MasSof_Min }

      @base_0.x = base_0.x + X - @X - $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z
   }

   //Luca 16/12/2019
   Posiziona Cuc_HPLColSoff hpls
   {
      @escluso = 1 - FLAG_soffietto

      @base_0.x = base_0.x + $Cuc_Spe_Fia

      //Luca 04/03/2020
      //riporto modifiche di LAGO
      if( Verso<0 ) { @base_0.x = @base_0.x + Cuc_MasSof_Min }
      else { @base_0.x = @base_0.x + Cuc_MasSof_Mag }

      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_HPLColSoff hpld
   {
      @escluso = 1 - FLAG_soffietto

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

      //Luca 04/03/2020
      //riporto modifiche di LAGO
      if( Verso<0 ) { @base_0.x = @base_0.x - Cuc_MasSof_Min }
      else { @base_0.x = @base_0.x - Cuc_MasSof_Mag }

      @base_0.y = base_0.y + VAR_PosYEld
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
   }

   //Luca 16/12/2019
   Posiziona Cuc_MasselloColSoff massfs2
   {
      @escluso = 1
      if( FLAG_soffietto==1 & Colonna2Eldom==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld2
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z

      @X = Cuc_MasSof_Min
      @Y = YVanoEld2
      if( Verso<0 ) { @X = Cuc_MasSof_Mag }
   }


   Posiziona Cuc_MasselloColSoff massfd2
   {
      @escluso = 1

      if( FLAG_soffietto==1 & Colonna2Eldom==1 ) { @escluso = 0 }

      @X = Cuc_MasSof_Mag
      @Y = YVanoEld2
      if( Verso<0 ) { @X = Cuc_MasSof_Min }

      @base_0.x = base_0.x + X - @X - $Cuc_Spe_Fia
      @base_0.y = base_0.y + VAR_PosYEld2
      @base_0.z = base_0.z + Z - $Cuc_Rie_Rip_ColSoff - @Z
   }


   Posiziona Cuc_Cop cop
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   Posiziona Cuc_Sch schfr
   {
      GOSUB Cuc_PosaSch
      //Luca 20/05/2019
      //@base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.y = base_0.y + $Cuc_Spe_Fnd  + Cuc_Aria_Fnd_Sch_Y

      @Y = VAR_PosYEld - $Cuc_Spe_Fnd - $Cuc_Spe_Cop  - 2*Cuc_Aria_Fnd_Sch_Y

      if( VarPos==2 ) { @Y = PosYRip1 - $Cuc_Spe_Fnd - 2*Cuc_Aria_Fnd_Sch_Y }
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch

      //Luca 20/05/2019
      //@base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - YVanoRip + Cuc_Aria_Fnd_Sch_Y


      @Y = YVanoRip - Cuc_Aria_Cop_Sch_Y - Cuc_Aria_Fnd_Sch_Y
   }

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }

   //Luca 20/04/2020
   Posiziona RigaOrdine_NonGraficato mcsf
   {
      @escluso = 1
      if( FLAG_soffietto==1 ) { @escluso = 0 }
      @base_0 = base_0
      @GEST_CODICE = "D06007"
      @X = 50
      @Y = 500
      @Z = 50
   }

   //Luca 03/09/2020
   Posiziona Cuc_CatOriz catos_f
   {
      @escluso = 1
      if( X > 850 ) { @escluso = 0 }

      @FronteRetro = "F"
      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Fnd_Fia_X

      @base_0.y = base_0.y + VAR_PosYEld - $Cuc_Spe_Cop -@Y
      if( VarPos==2 ) { @base_0.y = base_0.y + PosYRip1 - @Y }

      @base_0.z = base_0.z + Z - @Z - 84.5
      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
   }
}

Elemento FustoPensileCopriCaldaia
{
   Descrizione = "Fusto per pensile"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      VAR_RevFusto   "" 0
      NO_GEST        "" 1

      X  "Larghezza "         500
      Y  "Altezza"            720
      Z  "Profondita' fianco" 560

      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      COD_EREDITA      ""      "PRE;POST;C011_PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Stato_7
      //DescEdit__  = MSG(1003)

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   //Procedura OnTabEredita
   //{
   //   if( TABER_REGOLA=="C011_PRE" )
   //   {
   //      C011_pdr = VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_C011")
   //      GEST_C011 = C011_pdr
   //      VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
   //   }
   //}

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx

      //LZ 31/05/2021: fianchi laccati
      @FIN_var = "C032"
      GOSUB rivestimento
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx

      //LZ 31/05/2021: fianchi laccati
      @FIN_var = "C032"
      GOSUB rivestimento
   }

   Posiziona Cuc_Sch sch1r
   {
      GOSUB Cuc_PosaSch

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + Y/2 - 100
      @base_0.z = base_0.z

      @X = X -2*$Cuc_Spe_Fia
      @Y = 200
   }

   Posiziona Cuc_BarraPenCaldaia bart
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X -2*$Cuc_Spe_Fia
      @VAR_posizione = "BR"
   }

   Posiziona Cuc_BarraPenCaldaia bafr
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X -2*$Cuc_Spe_Fia
      @VAR_posizione = "BF"
   }

   Posiziona Cuc_BarraPenCaldaia altfr
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + Z - @Z
      @X = X -2*$Cuc_Spe_Fia
      @VAR_posizione = "AF"
   }
}

//Alberto B. 05/08/20
Elemento FustoPensileAngoloL
{
   Descrizione = "Fusto angolare"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_RevFusto    "" 0
      NO_GEST         "" 1

      Xt              "" 2
      X               "" 2
      Y               "" 1
      Z               "" 2
      Zt              "" 2

      ZFiaSx          "" 1
      ZFiaDx          "" 1

      AntaSx          "" 0
      AntaDx          "" 0

      ang             "" 90

      X_Mont          "" 81
      Z_Mont          "" 81

      Zpadre          "" 0
      Xpadre          "" 0
      Xfiasx          "" 0
      Xfiadx          "" 0

      vanosx          "" 0
      vanodx          "" 0
      vanosx_prec     "" 0
      vanodx_prec     "" 0

      FuoriSquadraBA  "" ""
      COD_EREDITA     "" "PRE;POST;C011_PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      Yt = Y
      GOSUB punti_completi_angoloL
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco pfsx
   {
      //GOSUB Cuc_PosaFiaSx
      @base_0.x = base_0.x
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z
      @X = $Cuc_Spe_Fnd
      @Y = Y - 2*$Cuc_Spe_Fnd
      @Z = ZFiaSx
      @Verso = -1
   }

   Posiziona Cuc_Fianco pfdx
   {
      @base_0 = base_4
      @base_0.x = base_4.x - $Cuc_Spe_Fia*SENO(ang-90)
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_4.z - $Cuc_Spe_Fia*COSENO(ang-90)
      @Y = Yt - 2*$Cuc_Spe_Fnd
      @Z = ZFiaDx
      @X = $Cuc_Spe_Fia
      @ang_y = -90 +(ang-90)

      @Verso = 1
   }

   Posiziona Cuc_Sch scsx
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + $Cuc_Spe_Fnd
      @base_0.z = base_0.z + $Cuc_Rie_SchPA_ZR
      @X = Xt - 2*$Cuc_Spe_Fia - $Cuc_Rie_SchPA_ZR
      @Y = Yt - 2*$Cuc_Spe_Fnd
      @Z = $Cuc_Spe_Fia
      @Verso = -1
   }

   Posiziona Cuc_Sch scdx
   {
      deoff_x = $Cuc_Rie_SchPA_ZR +$Cuc_Aria_Sch_Z
      deoff_z = $Cuc_Rie_FndP_ZR +$Cuc_Rie_Cat_ZF +$Cuc_Larg_Cat

      @base_0.x = base_5.x - deoff_x*COSENO(ang-90)
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + $Cuc_Aria_Fnd_Fia_Y
      @base_0.z = base_0.z
      @X = Zt - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia
      @X = Zt  - $Cuc_Spe_Fia
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - $Cuc_Aria_Fnd_Fia_Y - $Cuc_Aria_Cop_Fia_Y
      @Z = $Cuc_Spe_Fia
      @ang_y = ang -180
      @Verso = 1
   }

   Posiziona Cuc_FondoAngL fd1r
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @Xt = Xt
      @Zt = Zt
      @Y  = $Cuc_Spe_Fnd
      @ZFiaSx = ZFiaSx
      @ZFiaDx = ZFiaDx

      @ang = ang
      @FuoriSquadraBA = FuoriSquadraBA
   }

   Posiziona Cuc_CopAngL cp1r
   {
      @base_0.x = base_0.x
      @base_0.y = alto_2.y -$Cuc_Spe_Cop -$Cuc_Aria_Cop_Fia_Y
      @base_0.z = base_0.z
      @Xt = Xt
      @Zt = Zt
      @Y  = $Cuc_Spe_Fnd
      @ZFiaSx = ZFiaSx
      @ZFiaDx = ZFiaDx
      @ang = ang
      @FuoriSquadraBA = FuoriSquadraBA
   }
}

//Alberto B. 12/01/21
Elemento FustoBaseFrigo
{
   Descrizione = "Fusto per base frigo"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      //#include %path_bdm%\var_dbfusto.inc

      //revisione 1 attivo la parte gestionale
      VAR_RevFusto  "" 0  SaveAlways

      NO_GEST        "" 1

      //LZ 01/06/2021: REV 1 - Gestione staffa sottotop
      VAR_Revisione  "" 0 Implicit

      X  "Larghezza luce"        500
      Y  "Altezza esc. zoccolo"  720
      Z  "Profondita' fiokanco"    560

      //LZ 05/05/2021: Eredito tipo scocca
      //0 Terra - 1 Terra Centro Stanza - 2 Sospesa - 3 Sospesa Centro Stanza
      TipoScocca "Tipo scocca"      0 Implicit

      ZFiaSx  "Profondita' fianco sx"    560
      ZFiaDx  "Profondita' fianco dx"    560

      PC   "" 0
      ConSchiena  "Presenza Schiena"  1

      ConPanDivInd   "Con Divisorio per induzione" 0 Implicit
      PanDivInd_RieY "" 48                           Implicit

      ConCielo       "Presenza Cielo"    0 Implicit
      ConPianoSNACK  "Presenza SNACK"    0 Implicit

      VAR_CatR_OV "catena retro:   0= orizzontale 1= verticale"  1  Implicit
      VAR_CatF_OV "catena fronte:  0= orizzontale 1= verticale"  0  Implicit

      VAR_BarraSost1  "Barra Sostegno elemento sbalzo" 0 Implicit
      VAR_BarraSost2  "Barra Sostegno elemento sbalzo" 0 Implicit

      VAR_LavPC_FiaSx "Lavorazione PianoCottura Fianco SX" 0 Implicit
      VAR_LavPC_FiaDx "Lavorazione PianoCottura Fianco SX" 0 Implicit

      VAR_PassaC_FiaSx "Lavorazione Passacavo Fianco SX" 0 Implicit
      VAR_PassaC_FiaDx "Lavorazione Passacavo Fianco DX" 0 Implicit

      StrPerGola     "" "" Implicit

      ConBifacciale  "" 0  Implicit
      ConBarraIsola  "" 0  Implicit

      ConLavello     "" 0 Implicit

      //LZ 05/05/2021: Grafica staffe
      ConStaffe      "" 0

      Rid_Fia_Sx    "" 0
      Rid_Fia_Dx    "" 0

      Z_Base_Fnd        "" 574

      Y_Schiena         "" 200
      Off_Y_Sch         "" 350.5

      //LZ 05/05/2021
      Off_Z_Sch         "" 2

      Z_Pann_Sup        "" 120
      Bifacciale_SiNo   "" 0 Boolean ( )

      ////Luca 20/04/2020
      ////variabili necessarie per elementi base angolo
      //FLAG_BaseAngolo "" 0
      //Verso_BA        "" -1
      //X_Anta          "" 0 Implicit
      //X_Mass          "" 0 Implicit
      //Z_Mass          "" 0 Implicit
      //Con_DistMan     "" 0 Implicit
      //X_DistMan       "" 0 Implicit
      //Con_DistAng     "" 0 Implicit
      //X_DistAng       "" 0 Implicit
      //Y_DistAng       "" 0 Implicit
      //Z_DistAng       "" 0 Implicit

      //LZ 03/06/2021 - staffa sottotop
      //Tipo: 0 - Staffa U, 1 - Staffa L
      Staffa_Idx        "Staffa sottotop - idx"       -1
      Staffa_Stop_Idx   "Staffa sottotop - sottotop"  -1

      Staffa_Tipo       "Staffa sottotop - tipo"      0
      Staffa_X          "Staffa sottotop - X"         54
      Staffa_Y          "Staffa sottotop - Y"         19
      Staffa_Z          "Staffa sottotop - Z"         27
      Staffa_R          "Staffa sottotop - raggio"    14
      Staffa_Spe        "Staffa sottotop - spessore"  2
      Staffa_OX         "Staffa sottotop - offset X"  2
      Staffa_OX_max     "Staffa sottotop - off X max" 2

      //Verso: -1 - Sinistra, 1 - Destra
      Staffa_Verso      "Staffa sottotop - verso"     0

      Staffa_ScX        "Scasso staffa - X"           54
      //Vedi specifiche, raggio volutamente differente
      Staffa_ScR        "Scasso staffa - raggio"      12

      PosY_DistAng     "" 0 Implicit
      COD_EREDITA      ""      "PRE;POST;C011_PRE"

      Verso_pdr         "Verso della scocca"    -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB CtrlRidFustoBase
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="C011_PRE" )
      {
         C011_pdr = VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_C011")
         GEST_C011 = C011_pdr
         VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli

      //LZ 19/04/2021 - Gestione riduzioni
      GOSUB CtrlRidFustoBase

      Verso_pdr = VAR_VAL(PADRE(ATTUALE(),1),"Verso")
      Staffa_Verso = Verso_pdr

      if( Verso_pdr == -1 )
      {
         //verso SX
         Rid_Fia_Sx = 25
         Rid_Fia_Dx = 0
         ZFiaSx = Z - Rid_Fia_Sx
         ZFiaDx = Z
      }

      if( Verso_pdr == 1 )
      {
         //verso DX
         Rid_Fia_Dx = 25
         Rid_Fia_Sx = 0
         ZFiaDx = Z - Rid_Fia_Dx
         ZFiaSx = Z
      }

      //LZ 05/05/2021
      Off_Z_Sch=2+62*ConBifacciale

      ConStaffe = 0
      if( ConBifacciale == 1
        | ( TipoScocca != 0
          & TipoScocca != 2
          & ConBarraIsola == 0 ) ) { ConStaffe = 1 }

      //LZ 03/06/2021 - staffa sottotop
      GOSUB Ctrl_Cuc_StaffaFrigo

      Staffa_X = 54
      Staffa_ScX = Staffa_X
      if( Staffa_Tipo == 1 )
      {
         Staffa_X = 52
         Staffa_ScX = Staffa_X + Staffa_OX
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_GestionaleFusto

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx

      @VAR_LavPC = VAR_LavPC_FiaSx
      @VAR_PassaC = VAR_PassaC_FiaSx
      @base_0.z = base_0.z //- Rid_Fia_Dx

      //@Z = ZFiaSx + Rid_Fia_Sx
      //aliasposiz = "fiafusx"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
      @VAR_LavPC = VAR_LavPC_FiaDx
      @VAR_PassaC = VAR_PassaC_FiaDx
      @base_0.z = base_0.z //- Rid_Fia_Sx

      //@Z = ZFiaDx + Rid_Fia_Dx
      //aliasposiz = "fiafudx"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_Fondo fd1r
   {
      GOSUB Cuc_PosaFnd
      @base_0.z = base_0.z + 7
      @Z = Z - 32
   }

   Posiziona Cuc_FondoBase_Frigo fd1ba
   {
      GOSUB Cuc_PosaFnd
      @base_0.y = @base_0.y - 0.5
      //LZ 05/05/2021
      //@base_0.z = base_0.z + 7
      @base_0.z = base_0.z + 7.2
      //@Z = Z - 31.5
      @Z = Z - 32
   }

   Posiziona Cuc_Sch sch1r
   {
      //LZ 25/03/2022
      //@escluso = 1-ConSchiena
      @escluso = SE_NUM( ConSchiena == 0, 1, 0)

      GOSUB Cuc_PosaSch

      //GOSUB CucP_PosaSchBR

      //aliasposiz = "sch1r"
      //GOSUB CucP_Posiziona

      //LZ 05/05/2021
      //@base_0.y = @base_0.y + Off_Y_Sch
      //@base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z + 4
      if( ConSchiena > 0 )
      {
         @base_0.y = @base_0.y + Off_Y_Sch - $Cuc_Spe_Fnd
         @base_0.z = base_0.z + Off_Z_Sch
         @Y = Y_Schiena
      }
   }

   //LZ 05/05/2021: Grafica staffe
   //Posiziona __import__ stf_sx
   Posiziona Cuc_StaffaBaseFrigo stf_sx
   {
      @escluso = ConStaffe

      //GOSUB posa_blocco

      //@ang_z = 180
      @base_0.z = base_0.z
      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + Y - 52 - 20
      @import = STRCAT($path_sat,"Dettagli\Staffa_Frigo.sat")

      @HIDE = 1

      @pos = -1
   }

   //Posiziona __import__ stf_dx
   Posiziona Cuc_StaffaBaseFrigo stf_dx
   {
      @escluso = ConStaffe

      //GOSUB posa_blocco

      @base_0.z = base_0.z
      @base_0.x = base_0.x + X - $Cuc_Spe_Fia - @X
      @base_0.y = base_0.y + Y - 52 - 20
      @import = STRCAT($path_sat,"Dettagli\Staffa_Frigo.sat")

      @HIDE = 1
   }

   Posiziona Cuc_CatOriz cator_r
   {
      @escluso = VAR_CatF_OV
      if( ConCielo )   {  @escluso = 1   }

      GOSUB Cuc_PosaCatRtrAlta

      //LZ 05/05/2021
      @FronteRetro = "F"
   }

   Posiziona Cuc_PannSup psup1
   {
      GOSUB Cuc_PosaCop

      //LZ 05/05/2021
      @Z = Z_Pann_Sup

      @base_0.y = alto_2.y - @Y
      @base_0.z = base_0.z + Z - @Z - SE_NUM(Rid_Fia_Sx - Rid_Fia_Dx > 0, Rid_Fia_Sx, Rid_Fia_Dx)
   }

   Posiziona Cuc_PannSup psup2
   {
      GOSUB Cuc_PosaCop

      //LZ 05/05/2021
      @Z = Z_Pann_Sup

      @base_0.y = alto_2.y - @Y
      //Luca 24/05/2021 indicazione del cam
      //@base_0.z = base_0.z + Z - 2*@Z - 180
      @base_0.z = base_0.z + Z - 2*@Z - 205
   }

   Posiziona Cuc_Cop cop
   {
      @escluso = 1
      if(ConCielo)   {  @escluso = 0   }

      GOSUB Cuc_PosaCop
      //GOSUB CucP_PosaCopBR
   }

   Posiziona RigaOrdine_NonGraficato Sf1
   {
      @base_0 = base_0
      @GEST_CODICE = "B07004"
      @X = 0
      @Y = 0
      @Z = 0
   }

   //LZ 03/06/2021 - staffa sottotop
   Posiziona Cuc_StaffaFrigo stf
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 0, 1)
      Staffa_Idx = ATTUALE()

      @X = Staffa_X

      @base_0   = alto_1
      @base_0.x = @base_0.x - Staffa_OX
      @base_0.z = @base_0.z - @Z

      if( Staffa_Verso > 0 ) { @base_0.x = alto_2.x - @X + Staffa_OX }
   }
}
//} FUSTI

//{ COMPONENTI
Elemento Cuc_GruppoPiedini
{
   Descrizione = "Piedini per Terminale"
   Code        = ZOC0
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              ""  600
      Y              ""  100
      Z              ""  300

      Rie_Sx         "rientro dal filo sx"      0 Utente ( )
      Rie_Dx         "rientro dal filo dx"      0 Utente ( )
      Rie_Fr         "rientro dal filo fronte"  0 Utente ( )
      Rie_Rt         "rientro dal filo retro"   0 Utente ( )
      Cuc_Dia_Pie    ""                         0

      //per caricare i piedini centrali aggiuntivi per basi che,
      //oltre a una certa larghezza, montano 6 piedini, mettere escl_pie_cx=0 da cuc_pers...
      escl_pie_cx    "escludi piedini cx"       1
      escl_pie_rt    "escludi piedini rt"       0

      FLAG_soffietto ""                         0 Implicit
      wk_mec_estr    ""                         0 Implicit

      Verso          ""                         0

      FIN_var        ""  "C001"
      FIN_orie       ""  "V"

      perRADICE      ""  ""
      RADICE         ""  ""

      HIDE           ""  1

      M4_MIS         ""  "Rie*"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

     #ifndef TEC
      HIDE_ON_EDIT( ATTUALE(), "Rie*", 1)
     #endif

      Cuc_Dia_Pie  = $Cuc_Dia_Pie
      Rie_Sx       = $Cuc_Rie_Pie_Fia_Lato
      Rie_Dx       = $Cuc_Rie_Pie_Fia_Lato
      Rie_Fr       = $Cuc_Rie_Pie_Fia_Fro
      Rie_Rt       = $Cuc_Rie_Pie_Fia_Rtr

      OffX_PieCx   = 0

      escl_pie_rt  = 0

      if( UN_PADRE("ScoccaT_Col*") )
      {
         Rie_Sx       = 21.5 + $Cuc_Spe_Fia
         Rie_Dx       = 21.5 + $Cuc_Spe_Fia
         Rie_Fr       = 64
         Rie_Rt       = 117 + $Cuc_Rie_Fnd_ZR
         if( X > 640 ) { escl_pie_cx = 0 }
      }

      if( UN_PADRE("ScoccaT_ColLvst") )
      {
         Rie_Fr = 0
         Rie_Rt = 0
      }

      //LZ 03/03/2021
      if( UN_PADRE("ScoccaT_ColLvst2Forno") )
      {
         Rie_Sx = 52
         Rie_Dx = 52
         Rie_Fr = 109
         Rie_Rt = 107
      }

      if( UN_PADRE("ScoccaT_ColLvstForno") )
      {
         Rie_Rt = 32
      }

      if( UN_PADRE("ModuloMateria_Mat") )
      {
         Rie_Sx = 39 + 19
         Rie_Dx = 39 + 19
         Rie_Fr = 26 + 22
         Rie_Rt = 48

         if( X>1200 ) { escl_pie_cx = 0 }

         OffX_PieCx = 32
      }

      //LZ 05/05/2021
      if( UN_PADRE("ScoccaT_BaseFrigo") )
      {
         escl_pie_cx = 0
      }

      //LZ 22/07/2021
      if( UN_PADRE("ScoccaT_BaseLvst") )
      {
         Cuc_Dia_Pie  = 30
         Rie_Fr       = 15
         Rie_Rt       = 15
      }

      //LZ 07/09/2021
      if( UN_PADRE("ScoccaT_BaseForno") )
      {
         Rie_Sx = 41 + 19
         Rie_Dx = 41 + 19
         Rie_Fr = 69
         Rie_Rt = Z - 69 - 380

         if( VAR_VAL( PADRE( ATTUALE(), 1), "ConCassetto") > 0)
         {
            Rie_Sx = Rie_Sx + 33
            Rie_Dx = Rie_Dx + 33
         }
      }

      if( UN_PADRE("ScoccaT_BaseCantinetta") )
      {
         Rie_Sx = 52
         Rie_Dx = 52
         Rie_Fr = 105
         Rie_Rt = Z - 493
      }

      if( UN_PADRE("ScoccaT_Base_AirKitchen") )
      {
         Rie_Sx = 47 + 19
         Rie_Dx = 47 + 19
      }

      //Simone 22/03/2023
      if( UN_PADRE("ScoccaT_BaseAngoloIsola") )
      {
         Rie_Sx = 47 + 19
         Rie_Dx = 47 + 19
         Rie_Fr = 63
         Rie_Rt = 80 + 19
      }

      //LZ 19/11/2021
      //Luca 21/04/2021
      //if( UN_PADRE("ScoccaT_ColFalegnameria") )
      //{
      //   if( VAR_VAL(GetTopLevel(ATTUALE()),"PiediniSuFianco")==1 )
      //   {
      //      Cuc_Dia_Pie  = $Cuc_Spe_Fia
      //      Rie_Sx = Cuc_Dia_Pie/2
      //      Rie_Dx = Cuc_Dia_Pie/2
      //   }
      //}
      if( UN_PADRE("ScoccaT_BaseLavatrice") )
      {
         Rie_Fr       = 64
         Rie_Rt       = 64
      }

      //Simone 23/06/2022
      if( UN_PADRE("ScoccaT_ColStandard")
        & VAR_VAL(PADRE(ATTUALE(),1),"Col_Estraibile") == 1 )
      {
         if( X == 450 )
         {
            escl_pie_cx = 0
         }
      }

      if( UN_PADRE("ScoccaT_ColAngPan") )
      {
         OffX_PieCx   = 54
         if( VAR_VAL(PADRE(ATTUALE(),1),"Verso") == -1 ) { OffX_PieCx = -54 }
      }

      if( VAR_VAL( GetTopLevel(ATTUALE()), "PiediniSuFianco") == 1
        | VAR_VAL( PADRE(ATTUALE(), 1), "PiediniSuFianco") == 1
        | VAR_VAL( ATTUALE(), "PiediniSuFianco") == 1 )
      {
         Cuc_Dia_Pie  = $Cuc_Spe_Fia
         Rie_Sx = Cuc_Dia_Pie/2
         Rie_Dx = Cuc_Dia_Pie/2

         if( FLAG_soffietto > 0 )
         {
            Rie_Fr      = 46
            escl_pie_rt = 1
            escl_pie_cx = 1
         }
      }

      if( Cucina_Versione > 2 )
      {
         if( UN_PADRE("ScoccaT_BaseStandard") )
         {
            escl_pie_cx = 1

            Rie_Sx = 21.5 + $Cuc_Spe_Fia
            Rie_Dx = 21.5 + $Cuc_Spe_Fia
            Rie_Fr = 64
            Rie_Rt = 85 + $Cuc_Rie_Fnd_ZR

            if( X > 162)         { Rie_Sx = 50 + $Cuc_Spe_Fia  Rie_Dx = 50 + $Cuc_Spe_Fia }
            if( Z > 318)         { Rie_Rt = 117 + $Cuc_Rie_Fnd_ZR                         }

            if( X > 602)         { escl_pie_cx = 0 }
            if( X >= 450
              & wk_mec_estr > 0) { escl_pie_cx = 0 }

            if( Z <= 234)        { escl_pie_rt = 1 }
         }

         if( UN_PADRE("ScoccaT_BaseAngPan") )
         {
            escl_pie_cx = 1

            Rie_Sx = 21.5 + $Cuc_Spe_Fia
            Rie_Dx = 21.5 + $Cuc_Spe_Fia
            Rie_Fr = 64
            Rie_Rt = 85 + $Cuc_Rie_Fnd_ZR
            if( X > 162 ) { Rie_Sx = 50 + $Cuc_Spe_Fia  Rie_Dx = 50 + $Cuc_Spe_Fia }
            if( Z > 318 ) { Rie_Rt = 117 + $Cuc_Rie_Fnd_ZR                         }

            if( X >  602 ) { escl_pie_cx = 0 }
            if( Z <= 234 ) { escl_pie_rt = 1 }

            OffX_PieCx = X - VAR_VAL(PADRE(ATTUALE(),1),"X_Anta")
         }
      }

      //gruppo dedicato
      //if( UN_PADRE("Modul*368") )
      //{
      //   Rie_Sx  = 33
      //   Rie_Dx  = 33
      //
      //   Rie_Fr  = 26
      //   Rie_Rt  = 48
      //
      //   OffX_PieCx = 14
      //
      //   if( VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-CAS"
      //     | VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-CES"  )
      //   {
      //      Rie_Sx  = 58
      //      Rie_Dx  = 58
      //
      //      OffX_PieCx = 39
      //   }
      //
      //   wk_div    = VAR_VAL(PADRE(ATTUALE(),1),"VAR_DivVerticale")
      //   wk_div_px = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert_X")
      //
      //   //vetro
      //   if( wk_div==1 ) { OffX_PieCx = 14 + $M368_Spe_Div/2 }
      //   //sp.19
      //   if( wk_div==2 ) { OffX_PieCx = 14 + $M368_Spe_DivLeg19/2 }
      //   //sp.38
      //   if( wk_div==3 )
      //   {
      //      OffX_PieCx = 39 + $M368_Spe_DivLeg38/2
      //
      //      wk_div_px = wk_div_px + $M368_Spe_DivLeg38/2
      //      wk_centro = X/2
      //
      //      OffX_PieCx = OffX_PieCx + (wk_div_px - wk_centro)
      //   }
      //
      //   if( X>1104 ) { escl_pie_cx = 0 }
      //}

      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlEscluso

      //if( VAR_EXIST(idx_topl,"No_Pie") )
      //{  SET_#(idx_topl)   if(#No_Pie==1)    {  escluso=1   }  }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   //Procedura OnTabEredita
   //{
   //   GOSUB CucP_OnTabEredita
   //}

   Posiziona Cuc_piedino p1
   {
      @escluso = 0
      if( escl_pie_rt > 0 ) { @escluso = 1 }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      if( X<150 ) {  @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 }

      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p1"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_piedino p2
   {
      GOSUB PosaPiedino
      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      if( X<150 ) {  @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 }
      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p2"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_piedino p3
   {
      @escluso = 1
      if( X >= 150 )        { @escluso = 0 }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + X - Rie_Dx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p3"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_piedino p4
   {
      @escluso = 1
      if( X >= 150 )        { @escluso = 0 }
      if( escl_pie_rt > 0 ) { @escluso = 1 }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + X - Rie_Dx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p4"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_piedino p5
   {
      @escluso = 1
      if( escl_pie_cx==0 ) {  @escluso=0  }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + OffX_PieCx
      //Simone 23/06/2022
      if( UN_PADRE("ScoccaT_ColAngPan") )  { @base_0.x = @base_0.x - OffX_PieCx }

      if( Cucina_Versione > 2
         & UN_PADRE("ScoccaT_BaseAngPan")) { @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 }

      //Luca 12/12/2019
      //if( UN_PADRE("ModuloMateria_Mat")  ) { @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + 32 }

      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p5"
      //GOSUB CucP_Posiziona
   }

   Posiziona Cuc_piedino p6
   {
      @escluso = 1
      if( escl_pie_cx==0 ) {  @escluso=0  }
      GOSUB PosaPiedino
      @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + OffX_PieCx
      ////Luca 12/12/2019
      //if( UN_PADRE("ModuloMateria_Mat") ) { @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + 32 }

      if( Cucina_Versione > 2
         & UN_PADRE("ScoccaT_BaseAngPan") )
       {
          Rie_Fr = 93
          @base_0.x = base_0.x - Cuc_Dia_Pie/2 + X - OffX_PieCx
          if( Verso < 0 ) { @base_0.x = base_0.x - Cuc_Dia_Pie/2  - VAR_VAL(PADRE(ATTUALE(),1),"X_Anta") + OffX_PieCx }
       }

      //Simone 23/06/2022
      if( UN_PADRE("ScoccaT_ColAngPan") ) { Rie_Fr = 96.5 }

      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie

      //aliasposiz = "p6"
      //GOSUB CucP_Posiziona
   }
}

Elemento Cuc_piedino
{
   Descrizione = "Piedino Gestionale"
   Code        = PIE0
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc


      X  ""   30
      Y  ""   100
      Z  ""   30

      alt1  "" 14
      rag1  "" 30
      rag2  "" 10

      FIN_var  "" ""

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      //non fare i controlli gestionali nei figli
      GOSUB Stato_8

      //Luca 17/09/2020
      if( UN_PADRE("Modul*368") )
      {
         Y = $M368_Alt_Pie
         alt1 = Y
      }

      if( UN_PADRE("*30MM") )
      {
         Y = $L30_Alt_Pie
         alt1 = Y
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
      //GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   //Procedura OnTabEredita
   //{
   //   GOSUB CucP_OnTabEredita
   //}

   //Posiziona CilindroG fnd
   //{
   //   GOSUB Posa_Elemento
   //   @Radius_0 = X
   //   @Radius_1 = X
   //   @Height = 20
   //   @Hx = 0
   //   @Hy = 20
   //   @Hz = 0
   //   GOSUB rivestimento
   //}
   //
   //Posiziona CilindroG pie
   //{
   //   GOSUB Posa_Elemento
   //   @base_0.y = base_0.y +20
   //   @Radius_0 = 15
   //   @Radius_1 = 15
   //   @Height = Y-20
   //   @Hx = 0
   //   @Hy = Y-20
   //   @Hz = 0
   //}

   Posiziona CilindroY fnd
   {
      //@base_0.x = base_0.x - rag1/2
      //@base_0.z = base_0.z - rag1/2
      @base_0.x = base_0.x
      @base_0.z = base_0.z
      @base_0.y = base_0.y
      @Y = alt1
      @X = rag1
      GOSUB rivestimento
      if( FIN_var=="" )  { @c_rivestimento = $c_nero }
   }

   Posiziona CilindroY pie
   {
      @escluso = 0
      if( Y - alt1 <= 0 )  { @escluso = 1 }

      //@base_0.x = base_0.x - rag2/2
      //@base_0.z = base_0.z - rag2/2
      @base_0.x = base_0.x + rag1/2 - rag2/2
      @base_0.z = base_0.z + rag1/2 - rag2/2

      @base_0.y = base_0.y + alt1
      @Y = Y - alt1
      @X = rag2
      GOSUB rivestimento
      if( FIN_var=="" )  { @c_rivestimento = $c_alluminio }
   }
}

Elemento Cuc_Fianco
{
   Descrizione = "Fianco dx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                                         ""                                         18
      Y                                         ""                                         1
      Z                                         ""                                         1

      Verso                                     ""                                         -1
      TipoScocca                                ""                                         -1   Implicit
      TipoFrontale                              ""                                         -1   Implicit

      VAR_Giorno                                ""                                         0
      YSmuZocc                                  ""                                         0
      ZSmuZocc                                  ""                                         0

      //lavorazione per piano cottura
      VAR_LavPC                                 "Lavorazione per Piano Cottura"            0
      LavPC_DimY                                "Altezza lavorazione per piano cottura"    50   Utente    (   50-200   )

      FLAG_soffietto                            ""                                         0    Implicit
      VAR_RevBarraInfLvtrSoff                   ""                                         0    Implicit

      //lavorazione passacavi
      // 0 -- no
      // 1 -- passacavi tondo
      // 2 -- passacavi ovale
      VAR_PassaC                                ""                                         0
      VAR_PassaC_OffZ                           ""                                         0    Implicit
      VAR_PassaC_OffY                           ""                                         0    Implicit

      StaffaSNACK                               ""                                         0    SaveAlways
      StaffaSNACK_FiaAdiacente                  ""                                         0    SaveAlways
      idx_cnear_staffa                          ""                                         -1

      Con_Led                                   "Led vetrinetta"                           0
      ConFiancoFinSx                            ""                                         0    Implicit
      ConFiancoFinDx                            ""                                         0    Implicit

      FLAG_nascosto                             "Nascondi"                                 0    Boolean   NoSave

      idx_near                                  ""                                         -1
      idx_cnear_up                              ""                                         -1
      idx_cnear_f                               ""                                         -1

      perCODICE                                 ""                                         ""
      GEST_CODICE                               ""                                         ""

      perRADICE                                 ""                                         ""
      RADICE                                    ""                                         ""

      COD_EREDITA                               ""                                         "PRE;POST"

      AssTipoCollo_Fianchi                      ""                                         1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      GOSUB Stato_8

      // Revisioni
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_LavColonne","VAR_Revisione_LavCol")

      wk_datains = ATOI( LEFT( VAR_VAL_STR(GetTopLevel(ATTUALE()),"z_ins"), 6))
      if( wk_datains >= $BDM_REV_Cuc_PCottura_1)
      {
         LavPC_DimY = 48
         #ifndef TEC
            VAR_SET_MODE(ATTUALE(),"LavPC_DimY",$MODE_SHOWALWAYS)
         #endif
         #ifdef TEC
            VAR_SET_MENU(ATTUALE(),"LavPC_DimY","( 48-200 )")
         #endif
      }

      // Dimensioni
      X = $Cuc_Spe_Fia
      if(VAR_Giorno) { X = $Cuc_Spe_Fia_Giorno }

      // Finitura
      FIN_orie     = "V"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)

      // C002 - Materiale struttura
      // CO32 - Finitura struttura
      // C067 - Bordo
      FIN_var_materiale = GetFirstValidVarGest( FIN_idx_gest, "C002;C032")
      FIN_var_finitura  = GetFirstValidVarGest( FIN_idx_gest, "C032;C002")
      FIN_var_bordo     = GetFirstValidVarGest( FIN_idx_gest, "C067")

      // Grafica
      Finitura_Esterna = 1 - $Cuc_Escludi_FinEst
      Finitura_Interna = 1 - $Cuc_Escludi_FinInt
      if( FIN_var_bordo != ""
        & FIN_var_bordo != FIN_var_materiale)
      {
         Finitura_Interna = 1
      }

      // Nascondi fianco
      if( FLAG_nascosto != VAR_VAL( ATTUALE(), "FLAG_nascosto_prec"))
      {
         SHOW_MODE(idx_att, 1 - FLAG_nascosto)
         COMANDO( STRCAT( "RICALCOLA_UNA ", STR(PADRE(idx_att, -1)), " no_agganciati // Da assegnazioni ", NOME(ATTUALE())))

         FLAG_nascosto_prec = FLAG_nascosto
      }

      HIDE_ON_EDIT2( idx_att, "LavPC_DimY", 1 - VAR_LavPC)
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli

      // Vani
      // Raffaele 20.10.2020 per MdF_Sat. In pratica su tutti gli archetipi se *Fia* e CamInciso
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1

      /// Vano illuminazione fianco
      vano_l_1        = $Cucina_2_5_Illuminazione_Fianco_Dim.x
      vano_h_1        = Y - $Cuc_Spe_Cop - $Cuc_Spe_Fnd - $Cucina_2_5_Illuminazione_Fianco_Rid.y
      vano_p_1        = $Cucina_2_5_Illuminazione_Fianco_Dim.z
      vano_0_1.x      = base_0.x + (X - vano_l_1)/2
      vano_0_1.x      = vano_0_1.x - Verso*$Cucina_2_5_Illuminazione_Fianco_Off.x
      vano_0_1.y      = base_0.y + $Cuc_Spe_Cop + $Cucina_2_5_Illuminazione_Fianco_Off.y
      vano_0_1.z      = base_0.z + Z - $Cucina_2_5_Illuminazione_Fianco_Off.z - $Cucina_2_5_Illuminazione_Fianco_Dim.z/2
      vano_hide_1     = 0
      vano_nome_1     = "Illuminazione_Fianco"
      vano_elementi_1 = "Cucina_2_5_Illuminazione_Fianco"
   }

   Controlli
   {
      GOSUB CtrlComune

      //GOSUB CucP_LoadSetCompo
      //GOSUB CucP_ContrFiancoDx
      //GOSUB CucP_Cnt_CamInciso

      //Luca 22/10/2019
      //verifico se devo attivare o meno la lavorazione per piano cottura
      //se forzata la variabile sul padre, uso quella
      if( ACTION() > 0)
      {
         wk_vrs = "Sx"
         if( Verso>0 ) { wk_vrs = "Dx" }

         wk_idx_topl  =  PADRE(ATTUALE(),2)

         wk_nome_var  = STRCAT("VAR_LavPC_Fia",wk_vrs)
         wk_lavpc_pdr = VAR_VAL(wk_idx_topl,wk_nome_var)

         VAR_LavPC = 0

         if( IS_VAR_FIXED(wk_idx_topl,wk_nome_var)==1 )
         {
            VAR_LavPC = wk_lavpc_pdr
         }
         else
         {
            wk_pc  = 0
            if( IS_IDX(idx_cnear_up) )
            {
               BOX_MODE(0)
               NEAR_GLOBALE("wk_pc",idx_cnear_up,1,5,"PianoCotturaGenerico")
            }

            if( wk_pc > 0 )
            {
               VAR_LavPC = 1
               wk_nome_var = "VAR_LavPC_FiaSx"
               if( Verso>0 ) { wk_nome_var = "VAR_LavPC_FiaDx" }

               VAR_VALUE_SET(wk_idx_topl,wk_nome_var,1)
            }
         }
      }

      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder==0 & $OnLoadOrder2==0 )
      {
         StaffaSNACK = 0
         BOX_MODE(0)
         NEAR_GLOBALE("wk_staffa",idx_cnear_staffa,1,1,"Staffa_PianoSNACK")
         if( wk_staffa > 0 ) { StaffaSNACK = 1 }

         idx_base_vicina = VAR_VAL(GetTopLevel(ATTUALE()),"idx_sx")
         if( Verso > 0 )  { idx_base_vicina = VAR_VAL(GetTopLevel(ATTUALE()),"idx_dx") }

         idx_fianco_vicino = -1
         if( IS_IDX(idx_base_vicina) )
         {
            idx_fianco_vicino = VAR_VAL(idx_base_vicina,"idx_fia_cmp_dx")
            if( Verso > 0 )  { idx_fianco_vicino = VAR_VAL(idx_base_vicina,"idx_fia_cmp_sx") }
         }

         StaffaSNACK_FiaAdiacente = 0
         if( IS_IDX(idx_fianco_vicino) )
         {
            if( IS_MATCH(NOME(idx_fianco_vicino),"Cuc_Fianc*") ==1 )
            {
               StaffaSNACK_FiaAdiacente = VAR_VAL(idx_fianco_vicino,"StaffaSNACK")
            }
         }
      }

      if( VAR_PassaC > 0 )
      {
         if( StaffaSNACK==1 | StaffaSNACK_FiaAdiacente ==1 )
         {
            if( VAR_PassaC_OffZ < 72 ) { VAR_PassaC_OffZ = 72 }
         }
      }

      //LED INCASSATO
      Con_Led = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_led_now", ATTUALE(), 1, "BarraLed_Arm20")
      COMPONENTI2("wk_led", ATTUALE(), "Cucina_2_5_Illuminazione_Fianco")

      if( wk_led_now + wk_led > 0 ) { Con_Led = 1 }

      GOSUB CucP_Controlli
      GOSUB Set_Gest_C002_Cuc_Fia
   }

   Gestionale
   {
      GOSUB GestComune

      // RADICE
      /// Basi
      perCODICE = ""  perRADICE = "FNBA"
      if( UN_PADRE("ScoccaT_BaseAngoloIsola"))                      { perCODICE = ""          perRADICE = "FNBAANGPE" }

      if( VAR_VAL( idx_att, "Cucina_Versione") > 2)                 { perCODICE = "L01035"    perRADICE = ""          }

      /// Colonne
      if( UN_PADRE("ScoccaT_Col*"))                                 { perCODICE = ""          perRADICE = "FNCO"

         if( VAR_VAL( idx_att, "Cucina_Versione") > 2)              { perCODICE = ""          perRADICE = "FNCO3"     }
         if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1) { perCODICE = "L05006"    perRADICE = ""          }
      }

      /// Pensili
      if( UN_PADRE("ScoccaS_PensileAngolo"))                        { perCODICE = ""          perRADICE = "FIPA"      }
      if( UN_PADRE("ScoccaS_PensileCopriCaldaia"))                  { perCODICE = "L02001"    perRADICE = ""          }

      if( perCODICE != "") { perRADICE = "" }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB CucP_Gestionale
      GOSUB Set_Gest_C008_CucFianco
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE")
      {
         //GOSUB Set_Gest_C003_Fianco
         GOSUB Set_Gest_C003_CmpColonna
      }

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

   Posiziona _grafica_fianco bl
   {
      @escluso = 0
      GOSUB posa_blocco

      @X = X - Finitura_Interna*$Cuc_Sp_FinInt - Finitura_Esterna*$Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, Finitura_Esterna*$Cuc_Sp_FinInt, Finitura_Interna*$Cuc_Sp_FinInt)

      @LavPC_RieA = LavPC_DimY

      FIN_var = SE_STR( FIN_var_bordo != "", FIN_var_bordo, FIN_var_materiale)
      GOSUB rivestimento

      idx_grafica1 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona _grafica_fianco blIn
   {
      @escluso = 1 - Finitura_Interna

      GOSUB posa_blocco

      @X = $Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, X - @X, 0)

      @LavPC_RieA = LavPC_DimY

      FIN_var = FIN_var_materiale
      GOSUB rivestimento

      idx_grafica2 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona _grafica_fianco blEst
   {
      @escluso = 1 - Finitura_Esterna

      GOSUB posa_blocco

      @X = $Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, 0, X - @X)

      @LavPC_RieA = LavPC_DimY

      if( FIN_var_materiale == FIN_var_finitura)
      {
         @m_rivestimento = ""
         SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)

         EXITSUB()
      }

      FIN_var = FIN_var_finitura
      GOSUB rivestimento

      idx_grafica3 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   //per gestire automaticamente predisposizione gola verticale sul lato corretto della scocca
   Posiziona _cont_per_near ingg
   {
      @base_0.x = base_0.x +X/2
      @base_0.y = base_0.y +Y/4
      @base_0.z = base_1.z -X
      @X = X
      @Y = Y/2
      @Z = X
      idx_neargolafiadx = ATTUALE()
   }

   Posiziona Passacavi_Cuc psc
   {
      @escluso = 1
      if( VAR_PassaC>0 ) { @escluso = 0 }

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

      @TipoPC = VAR_PassaC
   }

   Posiziona _cont_per_near insup
   {
      @base_0.x = base_0.x + 4.5
      @base_0.y = base_0.y + Y -10
      @base_0.z = base_0.z + 50
      @X = 10
      @Y = 60
      @Z = Z - 100
      idx_cnear_up = ATTUALE()
   }

   Posiziona _cont_per_near cnst
   {
      @base_0.x = base_0.x - 8
      if( Verso < 0 )
      {
         @base_0.x = base_0.x + X - 2
      }
      @base_0.y = base_0.y + Y - 100
      @base_0.z = base_0.z
      @X = 10
      @Y = 100
      @Z = 60
      idx_cnear_staffa = ATTUALE()
   }

   Posiziona _cont_per_near cnfia
   {
      GOSUB posa_blocco

      @base_0.y = base_0.y + 10
      @Y = Y - 20

      idx_cnear_f = ATTUALE()
   }

   Posiziona Cucina_2_5_Illuminazione_Fianco ill
   {
      @escluso = 1
      if( Verso < 0
        & TipoFrontale == 6
        & Cucina_Versione > 2
        & UN_PADRE("ScoccaT_ColStandard")) { @escluso = 0 }

      @X = vano_l_1
      @Y = vano_h_1
      @Z = vano_p_1

      @base_0 = vano_0_1
   }
}

Elemento _grafica_fianco
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X                ""                     1
      Y                ""                     1
      Z                ""                     1
      acis             ""                     0.01

      StrPerGola       ""                     ""   Implicit
      YSmuZocc         "Smusso per zoccolo"   0    Implicit
      ZSmuZocc         "Smusso per zoccolo"   0    Implicit

      //var lavorazione piano cottura
      VAR_LavPC        ""                     0    Implicit

      LavPC_RieR       ""                     45
      LavPC_RieF       ""                     45

      LavPC_RieA       ""                     50
      LavPC_Rag        ""                     10

      c_rivestimento   ""                     [255,255,255]
      HIDE             ""                     1
   }

   Assegnazioni
   {
      idx_att = ATTUALE()
      idx_scocca = PADRE(idx_att,3)

      if( VAR_EXIST(PADRE(idx_att,-1),"pcfto")!=1 )
      {  VAR_IMPLICITLY_INHERITS(idx_att,0)  }
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")
      DEL_VAR(ATTUALE(),"arc_*")

      base_0 = [0,0,0]   alto_0 = [X, 0, 0]
      base_1 = [0,0,Z]
      base_2 = [0,Y,Z]
      base_3 = [0,Y,0]

      if( VAR_LavPC==1 )
      {
         k1  = LavPC_Rag*SENO(45)

         base_3 = [0,Y,Z-LavPC_RieF]
         base_4 = [0,Y-LavPC_RieA+LavPC_Rag,Z-LavPC_RieF]
         arc_4  = [0,Y-LavPC_RieA+LavPC_Rag-k1,Z-LavPC_RieF-LavPC_Rag+k1]
         base_5 = [0,Y-LavPC_RieA,Z-LavPC_RieF-LavPC_Rag]
         base_6 = [0,Y-LavPC_RieA,LavPC_RieR+LavPC_Rag]
         arc_6  = [0,Y-LavPC_RieA+LavPC_Rag-k1,LavPC_RieR+LavPC_Rag-k1]
         base_7 = [0,Y-LavPC_RieA+LavPC_Rag,LavPC_RieR]
         base_8 = [0,Y,LavPC_RieR]
         base_9 = [0,Y,0]
      }

      // *** PER GESTIRE GRAFICHE GOLA
      //base_0 = [0, 0, 0]            alto_0 = [X, 0, 0]
      //base_1 = [0, 0, Z -ZSmuZocc]
      //b=1
      //if(ZSmuZocc>0 & YSmuZocc>0 )
      //{
      //   base_2 = [0, YSmuZocc, Z -ZSmuZocc]
      //   base_3 = [0, YSmuZocc, Z]
      //   b=3
      //}
      //
      ////se con gola smussa fianco centrale
      //if( IS_MATCH(StrPerGola,"*C") )
      //{
      //   i=1
      //   while( VAR_EXIST(idx_scocca,STRCAT("YGolaCnt",STR(i))) )
      //   {
      //      YgolaC = VAR_VAL(idx_scocca,STRCAT("YGolaCnt",STR(i)))
      //
      //      b=b+1
      //      b1 = [0, YgolaC-$Cuc_Alt_GolaCntSF, Z]
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".x"),b1.x)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".y"),b1.y)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".z"),b1.z)
      //      b=b+1
      //      b1 = [0, YgolaC -$Cuc_Alt_GolaCntSF, Z-$Cuc_Spe_GolaSF]
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".x"),b1.x)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".y"),b1.y)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".z"),b1.z)
      //
      //      b=b+1
      //      b1 = [0, YgolaC, Z-$Cuc_Spe_GolaSF]
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".x"),b1.x)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".y"),b1.y)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".z"),b1.z)
      //
      //      b=b+1
      //      b1 = [0, YgolaC, Z]
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".x"),b1.x)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".y"),b1.y)
      //      VAR_VALUE_SET(idx_att,STRCAT("base_",STR(b),".z"),b1.z)
      //
      //      i=i+1
      //   }
      //}
      //
      //if( IS_MATCH(StrPerGola,"*A*") )
      //{
      //   b=b+1
      //   b1 = [0, Y-$Cuc_Alt_GolaSF, Z]
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".x"),b1.x)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".y"),b1.y)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".z"),b1.z)
      //   b=b+1
      //   b1 = [0, Y-$Cuc_Alt_GolaSF, Z-$Cuc_Spe_GolaSF]
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".x"),b1.x)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".y"),b1.y)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".z"),b1.z)
      //
      //   b=b+1
      //   b1 = [0, Y, Z-$Cuc_Spe_GolaSF]
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".x"),b1.x)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".y"),b1.y)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".z"),b1.z)
      //}
      //else
      //{
      //   b=b+1
      //   b1 = [0, Y, Z]
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".x"),b1.x)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".y"),b1.y)
      //   VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".z"),b1.z)
      //}
      //
      //b=b+1
      //b1 = [0, Y, 0]
      //VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".x"),b1.x)
      //VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".y"),b1.y)
      //VAR_VALUE_SET(ATTUALE(),STRCAT("base_",STR(b),".z"),b1.z)

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_FiancoLvst
{
   Descrizione = "Fianco dx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente;FiancoLvst

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      ""           18
      Y                      ""           1
      Z                      ""           1

      perColonna             ""           0

      Verso                  ""           -1

      //lavorazione passacavi
      // 0 -- no
      // 1 -- passacavi tondo
      // 2 -- passacavi ovale
      VAR_PassaC             ""           0
      VAR_PassaC_OffZ        ""           0   Implicit
      VAR_PassaC_OffY        ""           0   Implicit

      FLAG_nascosto          "Nascondi"   0   Boolean   NoSave

      idx_near               ""           -1
      idx_cnear_fia          ""           -1

      perRADICE              ""           ""
      RADICE                 ""           ""
      perCODICE              ""           ""
      GEST_CODICE            ""           ""

      COD_EREDITA            ""           "PRE;POST"

      AssTipoCollo_Fianchi   ""           1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      X = $Cuc_Spe_Fia

      GOSUB Stato_8

      // Finitura
      FIN_orie     = "V"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)

      // C002 - Materiale struttura
      // CO32 - Finitura struttura
      // C067 - Bordo
      FIN_var_materiale = GetFirstValidVarGest( FIN_idx_gest, "C002;C032")
      FIN_var_finitura  = GetFirstValidVarGest( FIN_idx_gest, "C032;C002")
      FIN_var_bordo     = GetFirstValidVarGest( FIN_idx_gest, "C067")

      // Grafica
      Finitura_Esterna = 1 - $Cuc_Escludi_FinEst
      Finitura_Interna = 1 - $Cuc_Escludi_FinInt
      if( FIN_var_bordo != ""
        & FIN_var_bordo != FIN_var_materiale)
      {
         Finitura_Interna = 1
      }

      // Nascondi fianco
      if( FLAG_nascosto != VAR_VAL( ATTUALE(), "FLAG_nascosto_prec"))
      {
         SHOW_MODE(idx_att, 1 - FLAG_nascosto)
         COMANDO( STRCAT( "RICALCOLA_UNA ", STR(idx_topl), " no_agganciati // Da assegnazioni ", NOME(ATTUALE())))

         FLAG_nascosto_prec = FLAG_nascosto
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
     // Raffaele 20.10.2020 per MdF_Sat
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      perCODICE = ""
      perRADICE = "FNBALV"
      if( perColonna > 0) { perRADICE = "FNCOLV" }
      if( Cucina_Versione > 2)
      {
         perCODICE = "L04006"
         if( perColonna > 0) { perCODICE = "L06011" }
      }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

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

   Posiziona _grafica_fianco_lvst bl
   {
      @escluso = 0

      GOSUB posa_blocco
      @perColonna = perColonna

      @X = X - Finitura_Interna*$Cuc_Sp_FinInt - Finitura_Esterna*$Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, Finitura_Esterna*$Cuc_Sp_FinInt, Finitura_Interna*$Cuc_Sp_FinInt)

      FIN_var = SE_STR( FIN_var_bordo != "", FIN_var_bordo, FIN_var_materiale)
      GOSUB rivestimento

      idx_grafica1 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona _grafica_fianco_lvst blIn
   {
      @escluso = 1 - Finitura_Interna

      GOSUB posa_blocco

      @X = $Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, X - @X, 0)

      FIN_var = FIN_var_materiale
      GOSUB rivestimento

      idx_grafica2 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona _grafica_fianco_lvst blEst
   {
      @escluso = 1 - Finitura_Esterna

      GOSUB posa_blocco

      @X = $Cuc_Sp_FinInt
      @base_0.x = @base_0.x + SE_NUM( Verso < 0, 0, X - @X)

      FIN_var = FIN_var_finitura
      if( FIN_var_materiale == FIN_var_finitura)
      {
         @m_rivestimento = ""
         SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)

         EXITSUB()
      }

      FIN_var = FIN_var_finitura
      GOSUB rivestimento

      idx_grafica3 = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona Passacavi_Cuc psc
   {
      @escluso = 1
      if( VAR_PassaC>0 ) { @escluso = 0 }

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

      @TipoPC = VAR_PassaC
   }

   //Simone 17/01/2023
   Posiziona _cont_per_near cn_fia
   {
      GOSUB posa_blocco

      @X = 10
      @Y = 250

      @base_0.x = base_0.x - @X/2
      if( Verso == 1 ) { @base_0.x = base_0.x + X - @X/2 }

      idx_cnear_fia = ATTUALE()
   }
}

Elemento _grafica_fianco_lvst
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X "" 1
      Y "" 1
      Z "" 1
      acis "" 0.01

      FLAG_Blocco "" 0 Implicit Boolean

      //StrPerGola "" "" Implicit
      //YSmuZocc   "smusso per zoccolo"  0
      //ZSmuZocc   "smusso per zoccolo"  0
      c_rivestimento "" [255,255,255]
      HIDE "" 1

      //var lavorazione piano cottura
      VAR_LavPC   "" 0 Implicit

      perColonna  "" 0 Implicit
   }

   Assegnazioni
   {
      idx_att = ATTUALE()
      idx_scocca = PADRE(idx_att,3)

      if( VAR_EXIST(PADRE(idx_att,-1),"pcfto")!=1 )
      {  VAR_IMPLICITLY_INHERITS(idx_att,0)  }
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")
      DEL_VAR(ATTUALE(),"arc_*")

      if( FLAG_Blocco > 0 )
      {
         base_0 = [0,0,0]   alto_0 = [X, 0, 0]
         base_1 = [0,0,Z]
         base_2 = [0,Y,Z]
         base_3 = [0,Y,0]

         base_so = base_0
         alto_ne = [X,Y,Z]

         EXITSUB()
      }

      yscs = 77
      hscs = 133
      //if( perColonna==2 ) { yscs = 113.5 + $Cuc_Spe_Fnd_Lvst }
      //Luca 24/07/2019 TODO 20540
      if( perColonna==2 ) { yscs = 113.5 + $Cuc_Spe_Fnd_Lvst - 44.5 }

      base_0 = [0,0,0]   alto_0 = [X, 0, 0]
      base_1 = [0,0,Z]
      base_2 = [0,yscs,Z]

      //if( perColonna>0 )
      //{
         base_3 = [0,yscs,Z-115]
         arc_3  = [0,yscs+13 ,Z-146.76]
         base_4 = [0,yscs+45 ,Z-160]
         base_5 = [0,yscs+hscs-45,Z-160]
         arc_5  = [0,yscs+hscs-13,Z-146.76]
         base_6 = [0,yscs+hscs,Z-115]
         base_7 = [0,yscs+hscs, Z]
         base_8 = [0,Y,Z]
         base_9 = [0,Y,0]
      //}
      //else
      //{
      //   base_3  = [0,77,Z-59.8]
      //   arc_3   = [0,77+3.05,Z-70.42]
      //   base_4  = [0,77+11,Z-77.8]
      //   arc_4   = [0,77+35.14,Z-99.2]
      //   base_5  = [0,77+44,Z-130.6]
      //   arc_5   = [0,77+52.79,Z-151.21]
      //   base_6  = [0,77+74,Z-160]
      //   base_7  = [0,77+74+13.18,Z-160]
      //   arc_7   = [0,77+119.76,Z-146.76]
      //   base_8  = [0,77+133, Z-114.8]
      //   base_9  = [0,210, Z]
      //   base_10 = [0,Y,Z]
      //   base_11 = [0,Y,0]
      //}

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_RipLvst
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 19
      Z "" 497

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   "" ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      perRADICE = "RPINBALV"
      if( UN_PADRE("ScoccaT_Col*") ) { perRADICE = "RPINCOLV" }

      RADICE = perRADICE
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   //Posiziona _grafica_ripiano_lvst bl
   //{
   //   @escluso = 0
   //   if( UN_PADRE("ScoccaT_Col*") ) { @escluso = 1 }
   //   GOSUB Posa_Elemento
   //}

   Posiziona Blocco bl2
   {
      //@escluso = 1
      //if( UN_PADRE("ScoccaT_Col*") ) { @escluso = 0 }
      GOSUB Posa_Elemento

      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
      }
   }

   //Simone 14/11/2022
   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt
      @base_0.y = base_0.y + Y - $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }
}

Elemento _grafica_ripiano_lvst
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

      //StrPerGola "" "" Implicit
      //YSmuZocc   "smusso per zoccolo"  0
      //ZSmuZocc   "smusso per zoccolo"  0
      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0  = [50,0,0]   alto_0 = [50, Y, 0]
      base_1  = [50,0,60]
      base_2  = [0,0,60]
      base_3  = [0,0 ,Z-82-53]
      base_4  = [50,0,Z-82-53]
      base_5  = [50,0,Z-82]
      base_6  = [0,0,Z-82]
      base_7  = [0,0,Z]
      base_8  = [X,0,Z]
      base_9  = [X,0,Z-82]
      base_10 = [X-50,0,Z-82]
      base_11 = [X-50,0,Z-82-53]
      base_12 = [X   ,0,Z-82-53]
      base_13 = [X   ,0,60]
      base_14 = [X-50,0,60]
      base_15 = [X-50,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Passacavi_Cuc
{
   Descrizione = "Passacavi cucina"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

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

      TipoPC "" 1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y = 60
      Z = 60
      if( TipoPC==2 )
      {
         Y = 116
         Z = 50
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Passacavi_scassa ps
   {
      GOSUB posa_blocco
      @TipoPC = TipoPC
   }
}


Elemento Passacavi_scassa
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      TipoPC   ""   1

      HIDE     ""   1
   }

   Assegnazioni
   {
      if( ACTION() == 1) { SHOW_MODE( ATTUALE(), 0) }
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")
      DEL_VAR(ATTUALE(),"arc_*")

      base_0 = [0,Y/2,0]
      arc_0  = [0,0,Z/2]
      base_1 = [0,Y/2,Z]
      arc_1  = [0,Y,Z/2]

      if( TipoPC == 2 )
      {
         DEL_VAR(ATTUALE(),"arc_*")

         base_0 = [0,Z/2,0]
         arc_0  = [0,0,Z/2]
         base_1 = [0,  Z/2,Z]
         base_2 = [0,Y-Z/2,Z]

         arc_2  = [0,Y,Z/2]
         base_3 = [0,Y-Z/2,0]
      }

      alto_0 = base_0  alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_Fondo
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_B* ScoccaT_C* *
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VT_REV_PK2        "Revisione ferramenta PK2"   "0"   ShowAlways

      X                 ""                           1
      Y                 ""                           1
      Z                 ""                           1     Utente   (   )

      VAR_Giorno        ""                           0
      PortaBombola      ""                           0

      //fondo interno colonna
      InternoCol        ""                           0

      //fondo interno Forno
      InternoForno      ""                           0

      //fondo interno lavastoviglie
      InternoLvst       ""                           0
      //fondo col interno lavastoviglie
      InternoColLvst    ""                           0

      //fondo angolo isola
      InternoAngIso     ""                           0

      //gestione sagomatura per fondo lavello
      VAR_Lavello       ""                           0
      VAR_FresataLav    ""                           0

      VAR_FresataX      "Larghezza Fresata"          375   ShowAlways
      //Utente ( )
      VAR_FresataZ      "Profondità Fresata"         250   ShowAlways

      VAR_OffsetX       "Offset X Centro Fresata"    0     Utente   (   )

      FLAG_Speciale     "Gestione speciale"          0

      FLAG_soffietto    ""                           0     Implicit
      wk_mec_estr       ""                           0     Implicit

      idx_cnear_dw      ""                           -1

      idx_bl1           ""                           -1
      idx_bl2           ""                           -1

      Scassa_Chi_Plus   ""                           ""

      FIN_var           ""                           "C002"
      FIN_orie          ""                           "O"

      COD_EREDITA       ""                           "PRE;C011_PRE"

      perRADICE         ""                           ""
      RADICE            ""                           ""

      perCODICE         ""                           ""
      GEST_CODICE       ""                           ""

     #ifdef TEC;AZI
      M4_VAR            ""                           "Z"
     #endif
   }

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_LavColonne","VAR_Revisione_LavCol")

      Y = $Cuc_Spe_Fnd
      if( VAR_Giorno ) { Y = $Cuc_Spe_Fnd_Giorno  }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, il fondo lvst passa da 25 a 19 mm
      //if( InternoColLvst ) { Y = $Cuc_Spe_Fnd_Lvst  }
      if( InternoColLvst )
      {
         Y = $Cuc_Spe_Fnd_Lvst
         if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_Revisione") == 1 ) { Y = $Cuc_Spe_Fnd_Lvst_r1 }
      }

      //Luca 04/02/2020
      if( VAR_FresataLav==1 )
      {
         //cambio default fresata
         wk_xbase = X+2*$Cuc_Spe_Fia

         VAR_FresataX = 366
         //Luca 04/03/2020
         //riporto modifiche dimensionali fatte da LAGO
         //if( wk_xbase<=522 ) { VAR_FresataX = 266 }
         if( X<600 ) { VAR_FresataX = 266 }

         //definisco offset max
         wk_offsetmax = (X/2 - VAR_FresataX/2) - 117
         if( wk_offsetmax>1 )
         {
            VAR_SET_MODE(ATTUALE(),"VAR_OffsetX",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"VAR_OffsetX",STRCAT(" ( -",STR(wk_offsetmax)," )"))
         }
         if( wk_offsetmax==0 ) { VAR_SET_MODE(ATTUALE(),"VAR_OffsetX",$MODE_SHOWALWAYS) }

         wk_offsetmin = -1*wk_offsetmax

         //non posso fare il menu ( -150 - 150 )
         //quindi devo controllare il fatto che non sia stato impostato un valore < 150
         if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 )
         {
            //LZ 11/05/2021 - Gestione speciale
            //if( VAR_OffsetX<wk_offsetmin & wk_offsetmax>1 )
            if( VAR_VAL(ATTUALE(), "FLAG_Speciale") == 0
              & ( VAR_OffsetX<wk_offsetmin
                | VAR_OffsetX>wk_offsetmax ) )
            {
               wk_msg = STRCAT(MSG(1090),"\n",MSG(1102))
               DISPLAY2(wk_msg)
               CHIEDI(ATTUALE(),"VAR_OffsetX")
            }
         }
      }

      HIDE_ON_EDIT(ATTUALE(),"VAR_FresataX;VAR_FresataZ;VAR_OffsetX",1-VAR_FresataLav)


      GOSUB Stato_8

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Attrezza
   {
      idx_ref = @idx_att

      X = @X - 2*$Cuc_Spe_Fia
      Z = @Z - $Cuc_Rie_Fnd_ZF - $Cuc_Rie_Fnd_ZR

      base_0 = @base_0
      base_0.x = @base_0.x + $Cuc_Spe_Fia
      base_0.z = @base_0.z + $Cuc_Rie_Fnd_ZR
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 20/03/2019
      //gestisco fresata su fondo
      if( VAR_Lavello > 0)
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C008")==0 )
         {
            VAR_FresataLav = 0
            if( VAR_VAL(PADRE(ATTUALE(),2),"Y")<=368 ) { VAR_FresataLav= 1 }

            //Simone 02/11/2022
            GOSUB Set_Gest_C008_Fnd_Cuc
         }
         else
         {
            if( IS_MATCH(GEST_C008,"*FC001*") ) { VAR_FresataLav = 1 }
            else                                { VAR_FresataLav = 0 }
         }

         //Luca 04/02/2020 controllo dimensione
         if( 266+117+117 > X ) { VAR_FresataLav = 0 }
      }

      //Luca 09/03/2020
      //se operatore ha selezionato lo scasso sul fondo in una base non lavello
      if( VAR_Lavello <= 0)
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C008")==1 )
         {
            if( IS_MATCH(GEST_C008,"*FC001*") ) { VAR_FresataLav = 1 }
            else                                { VAR_FresataLav = 0 }
         }

         //Simone 02/11/2022
         GOSUB Set_Gest_C008_Fnd_Cuc
      }
      ////Luca 11/04/2019 scasso
      //if( ACTION()>0 & COMPONENDO()==0 )
      //{
      //   if( UN_PADRE("ScoccaT_BaseStandard")
      //     & VAR_Lavello >= 1)
      //   {
      //      Scassa_Chi_Plus = ""
      //      BOX_MODE(0)
      //      NEAR_GLOBALE("wk_st",ATTUALE(),10,1,"SottopTop")
      //      if( wk_st>0 )
      //      {
      //         COMPONENTI2("wk_bl",wk_st[1],"*")
      //         while( wk_bl>0 )
      //         {
      //            if( FORMA(wk_bl[wk_bl])!=$FORMA_CONTENITORE )
      //            {
      //               Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[wk_bl]),";")
      //            }
      //            wk_bl = wk_bl - 1
      //         }
      //      }
      //   }
      //}

      //GOSUB CucP_LoadSetCompo
      //GOSUB CucP_Controlli
      //GOSUB CucP_Cnt_CamIncidente
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )      { GOSUB Set_Gest_C003_CmpColonna }
      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      // Base
      perRADICE = "FOBA"
      perCODICE = ""
      if( InternoForno == 1)      { perRADICE = "FOINCOFR"  }
      if( InternoForno == 2)      { perRADICE = "DVCOFR"    }
      if( InternoLvst == 1)       { perRADICE = "FOINCOLV"  }
      if( InternoAngIso == 1)     { perRADICE = "FOBAANGPE" }

      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "P01048"
         if( InternoForno == 1)   { perCODICE = "BASE_FONDO_INTERNO_FORNO"   }
         if( InternoForno == 2)   { perCODICE = "BASE_FONDO_INTERNO_FORNO"   }
         if( InternoLvst == 1)    { perCODICE = "BASE_FONDO_INTERNO_LVST"    }
         if( InternoAngIso == 1)  { perCODICE = "P10034" }
      }

      // Colonna
      if( UN_PADRE("ScoccaT_Col*") )
      {
         perRADICE = "FOCO"
         perCODICE = ""
         if( InternoCol == 1)                                       { perRADICE = "FOINCO"  }
         if( InternoColLvst == 1)                                   { perRADICE = "FOCOLV"  }

         if( Cucina_Versione > 2)
         {
            perRADICE = ""
            perCODICE = "P01054"
            if( wk_mec_estr > 0)                                    { perCODICE = "P01059"  }
            if( InternoCol == 1)                    { perCODICE = ""  perRADICE = "FOINCO3" }
            if( InternoColLvst == 1)                                { perCODICE = "P07028"  }
         }

         if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)
         {
            perRADICE = ""
            perCODICE = "P11023"
         }
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      @escluso = 0
      if( InternoAngIso==1 | VAR_FresataLav==1 ) { @escluso = 1 }

      GOSUB Posa_Elemento

      //Simone 11/11/2022
      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
         @base_0.y = base_0.y + $Cuc_Sp_FinInt
      }

      idx_bl1 = ATTUALE()
   }

   //Simone 11/11/2022
   Posiziona Blocco blEst
   {
      @escluso = 0
      if( InternoAngIso==1 | VAR_FresataLav==1 | $Cuc_Escludi_FinEst==1) { @escluso = 1 }
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

   Posiziona _grafica_fondo_lavello gflav
   {
      @escluso = 1 - VAR_FresataLav
      GOSUB Posa_Elemento
   }

   Posiziona _grafica_fondo_lavello gflave
   {
      @escluso = 1
      if( VAR_FresataLav==1 & $Cuc_Escludi_FinEst==0) { @escluso = 0 }
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

   //TODO --- GESTIRE SCASSO
   //Luca 16/10/2019 aumento lo scasso
   //mantis 21130: Sottotop tra basi: maggiorazione scasso per sifone
   Posiziona Blocco_Scassa bl_scs
   {
      @escluso = 1 - VAR_FresataLav
      @X = VAR_FresataX + 50
      @Y = 40
      @Z = VAR_FresataZ + 20 + 25

      //@base_0.x = base_0.x + X/2 - @X/2 - VAR_OffsetX
      @base_0.x = base_0.x + X/2 - @X/2 + VAR_OffsetX
      @base_0.y = base_0.y - 30
      @base_0.z = base_0.z - 20
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @QuotaScassoFondoLavello = 1

      ////Luca 21/01/2020 quota in stampa
      //@pnt_scs_top_0 = [base_0.x    ,base_0.y,base_0.z+13]
      //@pnt_scs_top_1 = [base_0.x    ,base_0.y,base_0.z+@Z]
      //@pnt_scs_top_2 = [base_0.x+@X ,base_0.y,base_0.z+@Z]
      //@pnt_scs_top_3 = [base_0.x+@X ,base_0.y,base_0.z+13]
   }

   Posiziona _grafica_fondo_angiso gaiso
   {
      @escluso = 1-InternoAngIso
      GOSUB Posa_Elemento
      //aliasposiz = "bl"
      //GOSUB CucP_Posiziona
   }

   Posiziona _grafica_fondo_angiso gaisoe
   {
      @escluso = 1-InternoAngIso
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = X - 20
      @Y = 3
      @Z = Z - 20

      @base_0.x = base_0.x + 10
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + 10
   }

   //Posiziona CilindroYScassa pb
   //{
   //   @escluso = 1-PortaBombola
   //   GOSUB Posa_Elemento
   //   @X = 400
   //   @Y = Y +2
   //   @base_0.x = base_0.x +X/2 -@X/2
   //   @base_0.y = base_0.y -1
   //   @base_0.z = base_0.z +Z/2 -@X/2
   //   @Scassa_Chi_Plus = STRCAT( STR(idx_bl1),";",STR(idx_bl2) )
   //   GOSUB CucP_Posiziona
   //}
}

Elemento Cuc_FondoMobileForno
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 1
      Z "" 1

      idx_bl2  "" - 1

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      COD_EREDITA ""  "PRE;C011_PRE"

      perRADICE   ""  ""
      RADICE      ""  "FOBA"
      //RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y = $Cuc_Spe_Fnd

      GOSUB Stato_8

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      perRADICE = "FOINCOFR"
      RADICE    = perRADICE
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )      { GOSUB Set_Gest_C003_CmpColonna }
      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      idx_bl1 = ATTUALE()
   }
}

Elemento _grafica_fondo_angiso
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      riex = 40.5
      riez = 40.5

      base_0  = [0,0,riez]   alto_0 = [0, Y, riez]
      base_1  = [0,0,Z]
      base_2  = [X,0,Z]
      base_3  = [X,0 ,riez]
      base_4  = [X-riex,0,riex]
      base_5  = [X-riex,0,0]
      base_6  = [riex,0,0]
      base_7  = [riex,0,riez]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _grafica_fondo_collvst
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      spe = 2
      alt = 47

      base_0  = [0,0,0]   alto_0 = [0, 0, Z]
      base_1  = [X,0,0]
      base_2  = [X,alt,0]
      base_3  = [X-spe,alt ,0]
      base_4  = [X-spe,spe,0]
      base_5  = [spe,spe,0]
      base_6  = [spe,Y,0]
      base_7  = [0,Y,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}


Elemento _grafica_fondo_lavello
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

      VAR_FresataX "" 375 Implicit
      VAR_FresataZ "" 250 Implicit
      VAR_OffsetX  ""   0 Implicit

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      VAR_IMPLICITLY_INHERITS(ATTUALE(), 0)

      riex = 40.5
      riez = 40.5

      base_0  = [0,0,0]   alto_0 = [0, Y, 0]
      base_1  = [0,0,Z]
      base_2  = [X,0,Z]
      base_3  = [X,0 ,0]

      base_4  = [X/2+VAR_OffsetX+VAR_FresataX/2,0,0]
      base_5  = [X/2+VAR_OffsetX+VAR_FresataX/2,0,VAR_FresataZ]
      base_6  = [X/2+VAR_OffsetX-VAR_FresataX/2,0,VAR_FresataZ]
      base_7  = [X/2+VAR_OffsetX-VAR_FresataX/2,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _vedi_schiena
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias NoPrint

   Variabili
   {
      X "" 1
      Y "" 1
      Z "" 1
   }

   Assegnazioni
   {
      S = 0.5
      Z = 0.1

      SimmetriaX = 0
      c_rivestimento = [10, 10, 10]

      TPRN_IMPORT = "NO"
      HIDE = 1
   }

   PuntiNotevoli
   {
      base_0 = [0, 0, 0]
      base_1 = [S, 0, 0]
      base_2 = [X, Y, 0]
      base_3 = [X - S, Y, 0]

      if( SimmetriaX == 1 )
      {
         base_0.x = -1 * base_0.x + X
         base_1.x = -1 * base_1.x + X
         base_2.x = -1 * base_2.x + X
         base_3.x = -1 * base_3.x + X
      }

      alto_0 = base_0  alto_0.z = Z

      base_so = base_0
      alto_ne = [X, Y, Z]
   }
}

Elemento Cuc_PannelloDivisorio
{
   Descrizione = "Pannello divisorio induzione"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente
   Attrezzabile ScoccaT_B*

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              ""   1
      Xr             ""   1

      Y              ""   16
      Z              ""   1

      RidX           ""   3
      RidX_SX        ""   0
      RidX_DX        ""   0

      idx_cnear_sx   ""   -1
      idx_cnear_dx   ""   -1

      FIN_var        ""   "C002"
      FIN_orie       ""   "O"

      COD_EREDITA    ""   "PRE;C011_PRE"

      perRADICE      ""   ""
      RADICE         ""   ""
      perCODICE      ""   ""
      GEST_CODICE    ""   ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      Xr = X - RidX*RidX_SX - RidX*RidX_DX

      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      base_0  = $vano_0
      base_0.z = $vano_0.z - 1
      base_0.y = $vano_0.y - 1

      X = $larghezza
      Z = $profondita
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      GOSUB CtrlCollisioni_Pannello_Trafile
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xr

      perRADICE = "PAIND"
      perCODICE = ""
      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "P02019"
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      @X = Xr
      @base_0.x = base_0.x + RidX_SX*RidX
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 20
      @Y = Y
      @Z = Z - 10

      @base_0.x = base_0.x - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 20
      @Y = Y
      @Z = Z - 10

      @base_0.x = base_3.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 5
   }
}

Elemento Cuc_PanFondoFrigo
{
   Descrizione = "pannelli supportoFondo frigo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             ""                  1
      Y             ""                  19
      Z             ""                  140

      Posizione     "-1: ret, 1: fro"   0

      COD_EREDITA   ""                  "PRE"

      FIN_var       ""                  "C002"
      FIN_orie      ""                  "O"

      perRADICE     ""                  ""
      RADICE        ""                  ""

      perCODICE     ""                  ""
      GEST_CODICE   ""                  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

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

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "FOPACOFR"
      perCODICE = ""
      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "P11051"
         if( Posizione > 0) { perCODICE = "P11050" }
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
         @base_0.y = base_0.y + $Cuc_Sp_FinInt
      }
   }

   //Simone 14/11/2022
   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }
}

Elemento Cuc_FondoFrigo
{
   Descrizione = "Fondo frigo"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso
   Attrezzabile ScoccaT* FustoColForno

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             ""   1
      Y             ""   48.5
      Yr            ""   21
      Z             ""   140

      TipoScocca    ""   -1  Implicit
      YVanoFrigo    ""   0   Implicit

      FIN_var       ""   "C029"
      FIN_orie      ""   "O"

      perCODICE     ""   ""
      GEST_CODICE   ""   ""

      perRADICE     ""   ""
      RADICE        ""   ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      GOSUB Stato_8

      // Sat
      sat_import = STRCAT( $path_sat, "Cucina\FondoFrigo",STR(X),"x",STR(Z),".sat")
      if( VAR_VAL_STR( idx_att, "sat_import_prec") != sat_import) { sat_exist = FILE_EXIST(sat_import) }
      sat_import_prec = VAR_VAL_STR( ATTUALE(), "sat_import")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att

      X = @X - 2*$Cuc_Spe_Fia
      Z = SE_NUM( Cucina_Versione <= 2, @Z, @Z - 1)

      base_0 = @base_0
      base_0.x = @base_0.x + $Cuc_Spe_Fia
      base_0.z = @base_0.z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = ""
      perRADICE = "FOFECO"
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)
      {
         perCODICE = "B14004"
         perRADICE = ""
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura Vault
   {
      vaultFile = ""
      if( TipoScocca == 1)     { AddVal_CAT_VM_sel( vaultFile, "%FONDO IN FERRO COL FRIGO CUC%") }
      if( TipoScocca == 2
        & Cucina_Versione > 2) { AddVal_CAT_VM_sel( vaultFile, "PRT_000688") }
   }

   Posiziona Blocco b
   {
      @escluso = sat_exist
      GOSUB Posa_Elemento
      @Y = Yr
   }

   Posiziona __import__ bl
   {
      @escluso = 1 - sat_exist

      GOSUB Posa_Elemento
      @base_0.y = base_0.y + 19

      @import = sat_import
   }

   Posiziona _cont_per_near_2 frg
   {
      @X = 0.8 * X
      @Y = SE_NUM( YVanoFrigo > Y, 0.8 * YVanoFrigo, Y)
      @Z = 50

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

      @FLAG_Frigo = 1

      //@DEBUG = 1
      //@c_rivestimento = $c_rosso
   }
}

Elemento Cuc_RipianoFerro
{
   Descrizione = "Ripiano in ferro per colonna"
   Code        = CUB
   Gruppo      = "RIPF"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Vano*_ColFalegnameria ScoccaT_Col*
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  562
      Y "Spessore"   10
      Z "Profondità" 544

      FIN_var     ""  "C029"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "RIFECO"
      //RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Stato_8

      Y = $Cuc_Spe_RipFe
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      base_0 = $vano_0
      base_0.z = base_0.z + $profondita - Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_FondoFerroLvst
{
   Descrizione = "Ripiano in ferro per colonna"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"   1
      Y "Spessore"   10
      Z "Profondità"  1

      FIN_var     ""  "C029"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "FOFECOLV"
      //RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      //Y = $Cuc_Spe_RipFe
      Y = 47
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_Y = 47

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_fondo_collvst gf
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_FondoMetalloLvstCol
{
   Descrizione = "Ripiano in ferro per colonna"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      VAR_Revisione   ""    0 Implicit

      X "Larghezza"   600
      Y "Spessore"     69
      Z "Profondità"  590

      TipoScocca  "Posizione Base"   0 Implicit

      FIN_var     ""  "C029"
      FIN_orie    ""  "O"

      perCODICE   "" ""
      GEST_CODICE "" ""
      RADICE      "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      if( VAR_Revisione == 1 ) { Y = 80 }

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      perCODICE = "B07002"
      if( TipoScocca==2 ) {  perCODICE = "B07003" }

      if( VAR_Revisione == 1 )
      {
         perCODICE = "B07005"
         if( TipoScocca==2 ) {  perCODICE = "B07006" }
      }

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

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento
      @base_0.y = base_0.y + 9
      @import = STRCAT($path_sat,"Cucina\FondoFerroColLvstTerra.sat")

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( VAR_Revisione == 1 )
      {
         @base_0.y = base_0.y + 17
         @import = STRCAT($path_sat,"Cucina\FondoFerroColLvstTerra_rev",STR(VAR_Revisione),".sat")
      }

      if( TipoScocca==2 )
      {
         @base_0.y = base_0.y + 20
         @import = STRCAT($path_sat,"Cucina\FondoFerroColLvstSosp.sat")

         //LZ 03/03/2021: revisione tecnica colonna lvst/forno
         if( VAR_Revisione == 1 )
         {
            @import = STRCAT($path_sat,"Cucina\FondoFerroColLvstSosp_rev",STR(VAR_Revisione),".sat")
         }
      }
   }

   //Posiziona Blocco ing
   //{
   //   GOSUB posa_blocco
   //   GOSUB rivestimento
   //}
}

Elemento Cuc_FondoAlluminio
{
   Descrizione = "Rivestimento alluminio x fondo lavello"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Cuc_Fondo

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              ""   1
      Y              ""   1
      Z              ""   1
      Z_max          ""   700

      VAR_RevFusto   ""   0         Implicit
      idx_fusto      ""   -1        Implicit
      idx_base       ""   -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      idx_base = GetTopLevel(ATTUALE())
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

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

         COMPONENTI2( "wk_fndall", $query_p1, NOME(ATTUALE()))
         if( wk_fndall <= 0
           & UN_PADRE2( $query_p1, "FustoBaseStandard")) { $QueryResult__ = 1 }
      }
   }

   Attrezza
   {
      X = @X
      Z = @Z + $Cuc_Rie_Fnd_ZR - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z - $Cuc_Spe_Sch

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Z = Z
      GEST_Y = 19
      RADICE = "FOBALL"
      if( Cucina_Versione > 2)
      {
         GEST_Z = Z + 1
         RADICE = ""
         GEST_CODICE = "B24031"
      }

      FLAG_RADICE = $FLAG_STANDARD
      if( VAR_RevFusto > 0
        & IS_VAR_FIXED( idx_base, "VAR_Lavello") == 1)
      {
         FLAG_RADICE = FLAG_RADICE + $MAKE_ROW
      }

      if( IS_IDX(idx_fusto)
        & UN_PADRE("Cuc_Fondo")) { GEST_IDXPADRE = idx_fusto                   }
      else                       { GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1) }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_fondo_alluminio bl
   {
      GOSUB Posa_Elemento
      @Y = 0.5

      @c_rivestimento = $c_alluminio
   }
}

Elemento _graf_fondo_alluminio
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [0,0,Z]
      base_2 = [0,-19,Z]

      base_3 = [0,-19,Z+0.1]
      base_4 = [0,0.1,Z+0.1]
      base_5 = [0,0.1,0]

      alto_0 = [X,0,0]


      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_Sch
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_B* ScoccaT_C* *
   Alias        Schiena;CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             ""                                           1
      Y             "Altezza"                                    1     Utente   (   )
      Z             ""                                           16

      Filler1       " "                                          " "   ShowAlways

      Verso         ""                                           0

      VAR_Giorno    ""                                           0
      Posizione     "Per identificarla nelle strutture angolo"   ""

      idx_cnear_f   ""                                           -1

      COD_EREDITA   ""                                           "C011_PRE"

      perCODICE     ""                                           ""
      GEST_CODICE   ""                                           ""

      perRADICE     ""                                           ""
      RADICE        ""                                           ""

     #ifdef TEC;AZI
      M4_VAR        ""                                           "Y"
     #endif
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Stato_8

      if( ACTION() == 0) { Z = $Cuc_Spe_Sch }

      // Finitura
      FIN_orie = "V"
      FIN_idx_gest = idx_att
      FIN_var = GetFirstValidVarGest( FIN_idx_gest, "C002;C032")
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Attrezza
   {
      idx_ref = @idx_att

      X = @X - 2*$Cuc_Spe_Fia
      Y = 200

      base_0.x = @base_0.x + $Cuc_Spe_Fia
      base_0.y = @base_0.y + ( @Y - Y )/2
      base_0.z = @base_0.z + Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z
   }

   Controlli
   {
      GOSUB CtrlComune

      if( UN_PADRE("ScoccaT_BaseAngoloIsola") ) { GOSUB Set_Gest_C002_Cuc_Fia }
   }

   Procedura OnTabEredita
   {
      GOSUB Set_Gest_C011
   }

   Gestionale
   {
      GOSUB CtrlComune
      GOSUB CucP_Gestionale

      // RADICE
      // Basi
      perCODICE = ""   perRADICE = "SCBA"
      if( Cucina_Versione > 2)                  { perCODICE = "S01040"  perRADICE = ""        }
      if( UN_PADRE("ScoccaT_BaseAngoloIsola"))  { perCODICE = ""        perRADICE = "SCBAANG" }

      // Colonne
      if( UN_PADRE("ScoccaT_Col*"))             { perCODICE = ""        perRADICE = "SCCO"
         if( Cucina_Versione > 2)               { perCODICE = "S04164"  perRADICE = ""        }
      }

      // Pensili
      if( UN_PADRE("ScoccaS_PensileAngolo"))    { perCODICE = ""        perRADICE = "SCPA"    }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { GEST_IDXPADRE = GetTopLevel(ATTUALE()) }

      if( UN_PADRE("ScoccaS_PensileAngolo") &
          VAR_EXIST(ATTUALE(),"GEST_C008") )
      {
         CAT_VM_var = "C008"
         CAT_VM_opz = "SM032"
         CAT_VM_sel = ""

         if( VAR_VAL(PADRE(ATTUALE(),2),"wk_led") > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM032" ) }
         GOSUB Gest_CAT_VM
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      //Simone 11/11/2022
      if($Cuc_Escludi_FinEst==0)
      {
         @Z = Z-$Cuc_Sp_FinInt
         @base_0.z = base_0.z + $Cuc_Sp_FinInt
      }

      //aliasposiz = "bl"
      //GOSUB CucP_Posiziona
   }

   Posiziona Blocco blfin
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Z = $Cuc_Sp_FinInt
      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

   Posiziona _cont_per_near cnfia
   {
      GOSUB posa_blocco

      @base_0.y = base_0.y + 10
      @Y = Y - 20

      idx_cnear_f = ATTUALE()
   }
}

Elemento Cuc_Cop
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VT_REV_PK2       "Revisione ferramenta PK2"   "0"   ShowAlways

      X                ""                           1
      Y                ""                           1
      Z                ""                           1

      InternoCol       ""                           0

      FLAG_soffietto   ""                           0     Implicit

      VAR_Giorno       ""                           0
      VAR_Colonna      ""                           0
      VAR_Aerazione    ""                           0

      idx_cnear_up     ""                           -1

      FIN_var          ""                           "C002"
      FIN_orie         ""                           "O"

      COD_EREDITA      ""                           "PRE;C011_PRE"

      perCODICE        ""                           ""
      GEST_CODICE      ""                           ""
      perRADICE        ""                           ""
      RADICE           ""                           ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_LavColonne","VAR_Revisione_LavCol")

      Y = $Cuc_Spe_Cop
      if( VAR_Giorno ) { Y = $Cuc_Spe_Cop_Giorno }

      HIDE_ON_EDIT(ATTUALE(),"VAR_Giorno",$ATTIVA_DLL)

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Luca 20/12/2019 dichiaro vano per attrezzaggio led
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder!=1 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE2("wk_lam", idx_cnear_up, 1, "LamierinoVetrinettaNow")

         CAT_VM_var = "C008"
         CAT_VM_opz = "SM144"
         CAT_VM_sel = ""

         if( wk_lam > 0 )  { CAT_VM_sel = CAT_VM_opz }
         GOSUB Gest_CAT_VM
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )  { GOSUB Set_Gest_C003_CmpColonna }
      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      perCODICE = ""
      perRADICE = "COCO"
      if( InternoCol == 1)      { perRADICE = "COINCO" }

      if( Cucina_Versione > 2)
      {
         perCODICE = "P01055"
         if( InternoCol == 1)   { perCODICE = "P08027" }
      }

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

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

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Procedura OnTabEredita
   //{
   //   GOSUB CucP_OnTabEredita
   //}

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      if($Cuc_Escludi_FinInt==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
         @base_0.y = base_0.y + $Cuc_Sp_FinInt
      }

      //Simone 11/11/2022
      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
      }
      idx_bloc = ATTUALE()

      //aliasposiz = "bl"
      //GOSUB CucP_Posiziona
   }

   Posiziona Blocco blIn
   {
      @escluso = $Cuc_Escludi_FinInt
      GOSUB Posa_Elemento
      idx_bloc2 = ATTUALE()
      @Y = $Cuc_Sp_FinInt

      //aliasposiz = "blIn"
      //GOSUB CucP_Posiziona
   }

   //Simone 11/11/2022
   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt
      @base_0.y = base_0.y + Y - $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @X = X - 20
      @Y = 3
      @Z = Z - 20

      @base_0.x = base_0.x + 10
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + 10
   }

   //Posiziona Cuc_ScassaBlocco for
   //{
   //   @escluso = ABS(VAR_Aerazione-1)
   //   @X = 475
   //   @Y = Y +2
   //   @Z = 59
   //   @base_0.x = base_0.x + X/2 - @X/2
   //   @base_0.y = base_0.y -1
   //   @base_0.z = base_0.z +11
   //   @Scassa_Chi = idx_bloc
   //
   //   aliasposiz = "for"
   //   GOSUB CucP_Posiziona
   //}
   //
   //Posiziona Cuc_ScassaBlocco for2
   //{
   //   @escluso = ABS(VAR_Aerazione-1)
   //   @X = 475
   //   @Y = Y +2
   //   @Z = 59
   //   @base_0.x = base_0.x + X/2 - @X/2
   //   @base_0.y = base_0.y -1
   //   @base_0.z = base_0.z +11
   //   @Scassa_Chi = idx_bloc2
   //
   //   aliasposiz = "for2"
   //   GOSUB CucP_Posiziona
   //}
}

Elemento Cuc_CatOriz
{
   Descrizione = "Catena orizzontale"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Catena;CamIncidente;CamInciso
 #ifdef TEC
   Attrezzabile *
 #endif
 #ifndef TEC
   Attrezzabile ScoccaT_B* ScoccaT_C*
 #endif

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               ""                            1
      Y               ""                            1
      Z               ""                            1

      CatAlluminio    "tipo alluminio/stretta"      0

      CatLvstOri      "barra lavastoviglie oriz"    0
      CatSupAng       "massello superiore angolo"   0

      CatSchLav       "catena retro lavello"        0

      ConBifacciale   "base con bifacciale"         0

      RuotaCatena     "Ruota catena"                0   Boolean

      FronteRetro     ""                            ""
      ConFresata      "Con fresata 0=No, 1=Si"      0

      FIN_var         ""                            "C021"
      FIN_orie        ""                            "O"

      COD_EREDITA     ""                            "PRE;C011_PRE"

      perRADICE       ""                            ""
      RADICE          ""                            ""

      perCODICE       ""                            ""
      GEST_CODICE     ""                            ""

      idx_cnear_fr    ""                            -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      //Simone 22/03/2022 - Verifico se la base ha due ante
      idx_base = PADRE(ATTUALE(),2)
      wk_anta_doppia = 0

      COMPONENTI2("wk_anta",idx_base,"Cuc_Anta")
      wk_i = 1
      while( wk_i <= wk_anta )
      {
         if( VAR_VAL(wk_anta[wk_i],"wk_sdoppia_ante") == 1 ) { wk_anta_doppia = 1 }
         wk_i = wk_i + 1
      }

      Y = $Cuc_Spe_Cat
      Z = $Cuc_Larg_Cat

      if( UN_PADRE("*Ang*")
        & IS_VAR_FIXED( ATTUALE(), "RuotaCatena")) { DEL_VAR_MODIFICATE( ATTUALE(), "RuotaCatena")  RuotaCatena = 0 }

      //Luca 12/10/2020
      if( RuotaCatena == 1)
      {
         Y = $Cuc_Larg_Cat
         Z = $Cuc_Spe_Cat
      }

      if( CatAlluminio == 1)
      {
         Y = $Cuc_Spe_CatAll
         Z = $Cuc_Larg_CatAll

         if( CatLvstOri == 1)
         {
            Y = 15.5
            Z = 15.5
         }
      }

      if( CatSchLav == 1)
      {
         Y = $Cuc_Spe_CatAll
         Z = $Cuc_Larg_CatAll
      }

      spelat = 5
      spebar = 28.5

      if( CatLvstOri==1 ) { spebar = Z - spelat }

      wk_RuotaCatena_hide = 1
      if( CatSchLav != 1
        & CatAlluminio == 0
        & wk_anta_doppia == 0) { wk_RuotaCatena_hide = 0 }

      HIDE_ON_EDIT2( ATTUALE(), "RuotaCatena", wk_RuotaCatena_hide)

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Attrezza
   {
      idx_ref = @idx_att

      X = @X - 2*$Cuc_Spe_Fia

      base_0 = @base_0
      base_0.x = @base_0.x + $Cuc_Spe_Fia
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      //GOSUB CucP_LoadSetCompo
      //GOSUB Gest_idx_GFin
      //if($Cuc_DefTipoCat==1)  {  c_rivestimento = $c_All   }
      //GOSUB CucP_Cnt_CamIncidente

      GOSUB CucP_Controlli
   }

   //Procedura OnTabEredita
   //{
   //
   //   GOSUB Set_Gest_C011
   //}


   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Y
      GEST_Z = Z

      FIN_var = "C021"

      perCODICE = ""
      perRADICE = ""
      // Frontale
      if( FronteRetro == "F")
      {
         perRADICE = SE_STR( RuotaCatena == 1, "BAFROR", "BAFR")
         if( Cucina_Versione > 2)         { perCODICE = SE_STR( RuotaCatena == 1, "B02028", "B02027") }
      }

      // Retro
      if( FronteRetro == "R")
      {
         perRADICE = "BASC"
         if( CatSchLav == 1)              { perRADICE = "BASCLV" }
         if( ConBifacciale == 1)          { perRADICE = SE_STR( RuotaCatena == 1, "BAFROR", "BAFR")   }

         if( Cucina_Versione > 2)
         {
            perCODICE = "B01017"
            if( CatSchLav == 1)           { perCODICE = "B01018" }
            if( UN_PADRE("ScoccaT_Col*")) { perCODICE = "B01019" }
            if( ConBifacciale == 1)       { perCODICE = SE_STR( RuotaCatena == 1, "B02028", "B02027") }
         }
      }

      if( CatLvstOri == 1)                { perRADICE = "BALVO"  }

      if( CatSupAng == 1)
      {
         FIN_var   = "C002"
         perCODICE = ""
         perRADICE = "MASUPANGAC"
      }

      if( perCODICE != "") { perRADICE = "" }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      if( UN_PADRE("ScoccaT_BaseStandard")
        | UN_PADRE("ScoccaT_BaseAngoloIsola") )
      {
         // 0 - Controlli preliminari
         if( ACTION() < 0 | ACTION() == 2 | $OnLoadOrder )  { EXITSUB() }

         //C008 - Lavorazioni
         CAT_VM_var     = "C008"
         CAT_VM_gestvar = GetVarGest(CAT_VM_var)

         if( VAR_EXIST( ATTUALE(), CAT_VM_gestvar) == 0 )   { EXITSUB() }

         // 1 - Ante
         wk_att_topl = GetTopLevel(ATTUALE())

         wk_ante       = 0
         wk_ante_x     = 0
         wk_ante_push  = 0
         wk_ante_asimm = 0

         if( FronteRetro == "F"
           & CatAlluminio == 0 )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2( "wk_ante", idx_cnear_fr, 1, "Cuc_AntaSingola")

            wk_anta_num = 1
            while( wk_anta_num <= wk_ante )
            {
               wk_anta_att      = wk_ante[wk_anta_num]
               wk_anta_att_topl = GetTopLevel(wk_anta_att)

               wk_anta_prev = wk_anta_att
               if( wk_anta_num > 1 ) { wk_anta_prev = wk_ante[wk_anta_num-1] }
               wk_anta_prev_topl    = GetTopLevel(wk_anta_prev)

               wk_anta_att_x        = VAR_VAL( wk_anta_att, "X")
               wk_anta_prev_x       = VAR_VAL( wk_anta_prev, "X")

               wk_anta_att_c004     = VAR_VAL_STR( wk_anta_att, "GEST_C004")
               wk_anta_att_apertura = VAR_VAL_STR( wk_anta_att, "Apertura")

               if( wk_anta_att_topl == wk_att_topl)
               {
                  wk_ante_x = wk_ante_x + wk_anta_att_x

                  if( wk_anta_att_c004 == "PU001")
                  {
                     //Battenti scaricano push solo se l'apertura cade a metà barra
                     if( wk_anta_att_x <= X
                       & wk_anta_att_apertura == "BA")     { wk_ante_push = wk_ante_push + 1   }

                     if( wk_anta_att_apertura == "RB")     { wk_ante_push = wk_ante_push + 1   }
                  }
               }

               if( wk_anta_att_x != wk_anta_prev_x
                 & wk_anta_att_topl == wk_anta_prev_topl ) { wk_ante_asimm = wk_ante_asimm + 1 }

               wk_anta_num = wk_anta_num + 1
            }
         }

         // 1.1 - Gestione speciale:
         //       Se per qualche motivo non rientro nei casi standard, mi faccio carico della gestione del valore SPEC1
         //       Se la situazione speciale viene meno, mantengo la gestione ancora per un ciclo con wk_ante_spec = -1, in modo da resettare la SPEC1; poi la lascio modificabile dall'utente
         if( VAR_EXIST( ATTUALE(), "wk_ante_spec") == 0) { wk_ante_spec = 0 }

         if( wk_ante_spec > 0 )                          { wk_ante_spec = -1 }
         else                                            { wk_ante_spec = 0  }

         if( wk_ante > 2
           | wk_ante_push > 2
           | wk_ante_asimm > 0 )                         { wk_ante_spec = 1 }

         if( wk_ante > 0
           & wk_ante_push > 0
           & wk_ante_push != wk_ante )                   { wk_ante_spec = 2 }

         if( wk_ante > 0
           & wk_ante_x <= X )                            { wk_ante_spec = 3 }

         // 2 - Valori
         //SM036 - Un foro push
         //SM007 - Due fori push
         //SPEC1 - Push su disegno
         CAT_VM_opz = "SM007;SM036"
         if( wk_ante_spec != 0 )  { CAT_VM_opz = STRCAT( CAT_VM_opz, ";SPEC1") }

         CAT_VM_sel = ""

         if( wk_ante_push == 1 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM036" ) }
         if( wk_ante_push == 2 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM007" ) }

         if( wk_ante_spec > 0 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SPEC1" ) }

         GOSUB Gest_CAT_VM
      }

      GOSUB CucP_Gestionale
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco blsx
   {
      GOSUB Posa_Elemento
      @X = spelat
      //@escluso = 1- CatAlluminio

      @escluso = 1
      if( CatAlluminio==1 | CatSchLav==1 ) { @escluso = 0 }


      //aliasposiz = "blsx"
      //GOSUB CucP_Posiziona
   }

   Posiziona Blocco cnt
   {
      GOSUB Posa_Elemento
      if( CatAlluminio )
      {
         @X = X -2*spelat
         @Z = spebar

         @base_0.x = base_0.x +spelat
         if( FronteRetro=="F" ) { @base_0.z = base_0.z + Z - @Z }

         if( CatLvstOri==1 ) { @base_0.z = base_0.z }
      }

      //Luca 10/06/2020
      @escluso = 0
      if( CatSchLav ) { @escluso = 1 }

      //aliasposiz = "cnt"
      //GOSUB CucP_Posiziona
   }

   Posiziona Blocco bldx
   {
      GOSUB Posa_Elemento
      @X = spelat
      @base_0.x = base_0.x + X-@X

      //@escluso = 1-CatAlluminio
      @escluso = 1
      if( CatAlluminio==1 | CatSchLav==1 ) { @escluso = 0 }

      //aliasposiz = "bldx"
      //GOSUB CucP_Posiziona
   }

   Posiziona _grafica_catena_sch_lavello ca_lav
   {
      @escluso = 1
      if( CatSchLav ) { @escluso = 0 }

      @base_0 = base_0
      @X = X -2*spelat
      @base_0.x = base_0.x +spelat

      @Y = Y
      GOSUB rivestimento
   }

   Posiziona _cont_per_near_2 near_fr
   {
      idx_cnear_fr = ATTUALE()

      @X = X * 0.9
      @Y = Y/2
      @Z = Z/2

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

      @DEBUG = 0
      @c_rivestimento = [255, 0, 0]
   }
}

Elemento _grafica_catena_sch_lavello
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

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

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      Z = 11 + 17.5

      base_0 = [0,0,0]   alto_0 = [0, Y, 0]
      base_1 = [0,0,Z]
      base_2 = [200,0,Z]
      base_3 = [200,0,11]
      base_4 = [X-200,0,11]
      base_5 = [X-200,0,Z]
      base_6 = [X,0,Z]
      base_7 = [X,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_CatVert
{
   Descrizione = "Catena verticale"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 1
      Z "" 1

      no_cod "0=fa codice 1=non fa codice" 0
      ConFresata "Con fresata 0=No, 1=Si"  0
      CatMasselloForno "" 0

      FIN_var  "" ""
      FIN_orie "" "O"

      perRADICE "" ""
      RADICE    "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      Y = $Cuc_Larg_Cat
      Z = $Cuc_Spe_Cat

      //usato sul forno
      if( CatMasselloForno==1 )
      {
         Y = 58
         Z = 35
      }
      //forno inferiore
      if( CatMasselloForno==2 )
      {
         Y = 25
         Z = 35
      }

      //forno compatto superiore
      if( CatMasselloForno==3 )
      {
         Y = 35
         Z = 35
      }

      if( CatMasselloForno==4 )
      {
         Y = 80
         Z = 35
      }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      perRADICE = ""

      if( CatMasselloForno>0 )
      {
         FIN_var = "C019"
         perRADICE = "MABAFR"
      }

      RADICE = perRADICE

      //GOSUB CucP_LoadSetCompo
      //if($Cuc_DefTipoCat==1)  {  c_rivestimento = $c_All   }
      //GOSUB CucP_Cnt_CamIncidente

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      //GOSUB CucP_SetVarGest
      //FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreCat")
      //FIN_Else = VAR_VAL_STR(-1,"Cuc_GColoreScocca")
      //GOSUB Gest_idx_GFin
      //GOSUB Gest_ColoraCompo

      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      //aliasposiz = "bl"
      //GOSUB CucP_Posiziona
   }
}

Elemento Cuc_BarraPenCaldaia
{
   Descrizione = "Barra Pensile caldaia"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 1
      Z "" 1

      VAR_posizione "" ""
      GEST_CODICE   "" "B02014"

      FIN_var  "" "C021"
      FIN_orie "" "O"

      COD_EREDITA "" "C011_PRE"

      perRADICE "" ""
      RADICE    "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      Y = 20
      Z = 30
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      GOSUB Set_Gest_C011
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C008_BarraPenCaldaia

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco blsx
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_Ripiano
{
   Descrizione = "Ripiano generico CUCINA"
   Code        = CUB
   Gruppo      = "Ripiano CUCINA"
   Tipo        = Contenitore
   Forma       = ""
#ifdef TEC
   Attrezzabile *
 #endif
 #ifndef TEC
   Attrezzabile ScoccaT* VanoRipiani_ColFalegnameria
 #endif
   Altimetro   Auto Cuc_Altim_Rip
   Alias       CamIncidente;CamInciso;AGGIUNTO

   Variabili
   {
      #include        %path_bdm%\var_db.inc

      VT_REV_FBRU     "Revisione ferramenta brunita" "0" ShowAlways

      X               "Larghezza"                    563 Utente ( )
      Y               "Spessore Ripiano"             18  ShowAlways
      Z               "Profondità"                   318 Utente ( )

      //Usata da chi non usa Elementi dedicati: Cuc_Ripiano_Vetro ... taglio schiena...
      // ect... In caso di utilizzo crearsi il menù con var create... ed inserirlo su cuc_Pers
      TipoRipiano     "Tipologia Ripiano"            1

      CMP_RIPIANI     ""                             0   Implicit
      STR_RIPIANI     ""                             0   implicit

      RipianoNum      ""                             0
      RipianoGenerico ""                             0
      RipianoFisso    ""                             0
      idx_contxnear   ""                             -1

      vano_n          ""                             -1

      COD_EREDITA     ""                             "PRE;C011_PRE"

      perRADICE       ""                             ""
      RADICE          ""                             ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      if( ACTION() > 0)
      {
         RipianoGenerico = 0
         while( ins2_att == $ins2_attrezzato)
         {
            RipianoGenerico = 1

            if( Cucina_Versione <= 2)     { break }

            if( RipianoNum <= 0)          { break }
            if( RipianoNum > CMP_RIPIANI) { break }

            RipianoGenerico = 0

            break
         }

         if( $ATTIVA_DLL == 1)
         {
            VAR_SET_MODE( ATTUALE(), "X", $MODE_SHOWALWAYS)
            VAR_SET_MODE( ATTUALE(), "Z", $MODE_SHOWALWAYS)
         }
      }

      Y = $Cuc_Spe_Rip
      if( TipoRipiano == 1) { Y = $Cuc_Spe_RipV }

      GOSUB CucP_Assegnazioni

      // Archetipo
      grafica_archetipo = SE_STR( TipoRipiano == 0, "Pannello", "Blocco")

      // Finitura
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C006;C036")
      FIN_bordo    = GetFirstValidVarGest( FIN_idx_gest, "C067;C006;C036")
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Vano led
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani
   }

   Procedura OnQueryBdmLocal
   {
   }

   Attrezza
   {
      GOSUB Attrezza_Ripiani
   }

   Controlli
   {
      GOSUB CANCELLA_AGGIUNTI

      GOSUB Set_EsclusoRipiano
      GOSUB CtrlComune

      GOSUB COLLIDE_AGGIUNTI
   }

   Procedura cancella
   {
      if( RipianoNum <= 0)              { EXITSUB() }
      if( Cucina_Versione <= 2)         { EXITSUB() }
      if( $StartingDel__ != ATTUALE() ) { EXITSUB() }

      RipianoNum = -1
      VAR_VALUE_SET( idx_ref, "STR_RIPIANI", dec(STR_RIPIANI))
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      perRADICE = ""
      GEST_CODICE = ""

      /// Legno
      if( TipoRipiano == 0)
      {
         perRADICE = "RPLECUC"
         if( UN_PADRE("ScoccaT_BaseAngoloIsola"))     { perRADICE = "RPLECUCAP" }
         if( UN_PADRE("Mod*368")
           & RipianoGenerico == 1)                    { perRADICE = "RPLG36"    }
      }

      /// Vetro
      if( TipoRipiano == 1)
      {
         perRADICE = "RPVTCUC"
         if( UN_PADRE("ScoccaT_BaseAngoloIsola"))     { perRADICE = "RPVTCUCAP" }
         if( UN_PADRE("ScoccaT_ColAngPan")
           | UN_PADRE("ScoccaT_BaseAngPan"))          { perRADICE = "RPVTCUCAC" }
         if( UN_PADRE("Mod*368")
           & RipianoGenerico == 1)                    { perRADICE = "RPVTAP36"  }
      }

      if( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2)
      {
         perRADICE_suff = "3"                                  // RPLECUC3, RPVTCUC3, ...
         if( RipianoGenerico == 0
           & perRADICE == "RPVTCUC"
           & UN_PADRE("ScoccaT_C*")) { perRADICE_suff = "O3" } // RPVTCUCO3, necessario per compensare errore calcolo prezzi colonne cuc 2.5/3.0

         perRADICE = STRCAT( perRADICE, perRADICE_suff)
      }

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

      // Padre gestionale
      if( UN_PADRE("ScoccaT_B*")
        & ins2_att == $ins2_attrezzato)
      {
         GEST_IDXPADRE = GetTopLevel(ATTUALE())
      }
      //Da sostituire al blocco predente una volta corretto Fw
      //TIPO_COLLO = ""
      //M2G_FGRIGAINESPLOSO = 0
      //DEL_VAR( ATTUALE(), "GEST_IDXPADRE")

      //if( UN_PADRE("ScoccaT_B*")
      //  & ins2_att == $ins2_attrezzato)
      //{
      //   GEST_IDXPADRE = GetTopLevel(ATTUALE())

      //   if( GEST_IDXPADRE != ATTUALE())
      //   {
      //      TIPO_COLLO = VAR_VAL_STR( GEST_IDXPADRE, "TIPO_COLLO")
      //      if( TIPO_COLLO == "")
      //      {
      //         TIPO_COLLO = "180"
      //         VAR_VALUESTR_SET( GEST_IDXPADRE, "TIPO_COLLO", TIPO_COLLO)
      //      }

      //      M2G_FGRIGAINESPLOSO = 1
      //   }
      //}

      if( UN_PADRE("ScoccaT_ColFalegnameria"))
      {
         GEST_IDXPADRE = GetTopLevel(ATTUALE())
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      GOSUB Set_Gest_C011

      // Piloto il bordo di default nei ripiani legno filo fronte
      while( TABER_REGOLA == "PRE")
      {
         VT_VES_STRINGA = ""

         if( vano_n < 0)                                                   { break }
         if( TipoRipiano != 0)                                             { break }
         if( Cucina_Versione <= 2)                                         { break }

         wk_vano_idx = PADRE( idx_att, 1)
         if( wk_vano_idx == idx_att)                                       { break }
         SET_#(wk_vano_idx)

         wk_vanol_var = FMT( "vano_l_{}", STR(vano_n))
         if( VAR_EXIST( wk_vano_idx, wk_vanol_var) != 1)                   { break }
         wk_vanol = VAR_VAL( wk_vano_idx, wk_vanol_var)

         wk_vanop_var = FMT( "vano_p_{}", STR(vano_n))
         if( VAR_EXIST( wk_vano_idx, wk_vanop_var) != 1)                   { break }
         wk_vanop = VAR_VAL( wk_vano_idx, wk_vanop_var)

         wk_vanob0_var = FMT( "vano_0_{}", STR(vano_n))
         if( VAR_EXIST( wk_vano_idx, wk_vanob0_var) != 1)                  { break }
         if( VAR_EXIST( idx_att, "wk_vanob0") != 1) { VAR_CREATE_XYZ( idx_att, "wk_vanob0", 0, 0, 0, $MODE_XYZ_ABSOLUTE, "") }
         VAR_INDIRECT_ASSIGN( idx_att, "wk_vanob0", wk_vano_idx, wk_vanob0_var)

         wk_vano_ang = ANG_TOT_NOR(wk_vano_idx)
         VAR_CREATE_XYZ( idx_att, "wk_vanob1", wk_vanob0.x + wk_vanop * SENO(wk_vano_ang),
                                               wk_vanob0.y,
                                               wk_vanob0.z + wk_vanop * COSENO(wk_vano_ang),
                                               $MODE_XYZ_ABSOLUTE, "")

         wk_vanob1_dist = DistanzaFraPunti( base_1, wk_vanob1, wk_vano_ang - 90)
         if( wk_vanob1_dist > 0.2)                                         { break }

         VT_VES_STRINGA = "FILO_FRONTE"
         break
      }
   }

   Posiziona %grafica_archetipo% bl
   {
      if( grafica_archetipo == "Pannello")
      {
         @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    = FIN_bordo

         EXITSUB()
      }

      GOSUB posa_blocco

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento Cuc_MontanteAng
{
   Descrizione = "Montante Angolo Fuori Squadra"
   Code        = MONANG
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             "X Spessore"   32
      Y             "Altezza"      760
      Z             "Z Spessore"   32

      Verso         "Verso"        -1

      XLam          ""             35
      YLam          ""             10
      ZLam          ""             35

      FIN_var       ""             "C002"
      FIN_orie      ""             "O"

      COD_EREDITA   ""             "PRE"

      perRADICE     ""             ""
      RADICE        ""             ""

      perCODICE     ""             ""
      GEST_CODICE   ""             ""

      idx_dx        ""             -1   Implicit
      idx_sx        ""             -1   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
      GOSUB Stato_8

      wk_idx_near = SE_NUM( Verso > 0, idx_dx, idx_sx)
      if( VAR_EXIST( idx_att, "wk_idx_near_prec") == 0
        | VAR_VAL( idx_att, "wk_idx_near_prec") != wk_idx_near)
      {
         ZLam = 35
         if( IS_MATCH( UPPER(NOME(wk_idx_near)), "*LVST*")) { ZLam = 32 }

         wk_idx_near_prec = wk_idx_near
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
      YLam = Y
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      fin_var=STRCAT( "GEST_", FIN_var)
      if( VAR_EXIST( PADRE( ATTUALE(), 1), fin_var)
        & IS_VAR_FIXED( ATTUALE(), fin_var) ) { DEL_VAR_MODIFICATE( ATTUALE(), fin_var) }

      GEST_Y = YLam
      GEST_Z = ZLam

      perCODICE = ""
      perRADICE = "DIBAANG"
      if( UN_PADRE("ScoccaT_Col*"))
      {
         perRADICE = "DICOANG"
         if( Cucina_Versione > 2)
         {
            perRADICE = ""
            perCODICE = "S07012"
         }
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco  mont
   {
      GOSUB posa_blocco
      if( Verso > 0)                { @base_0.x = base_0.x + XLam }
      if( UN_PADRE("ScoccaT_Col*")) { @base_0.z = base_0.z + 3    }

      @X = X - XLam
      @Y = Y - $Cuc_RidY_Sco
      @Z = Z

      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona _graf_lamL  ml
   {
      GOSUB posa_blocco
      if( Verso<0 ) { @base_0.x = base_0.x + X - XLam }

      @X = XLam
      @Y = YLam
      @Z = ZLam

      @Verso = Verso

      FIN_var = "C025"
      GOSUB rivestimento
   }
}

Elemento _graf_lamL
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X       ""   10
      Y       ""   491.2
      Z       ""   583.5

      Verso   ""   -1

      HIDE    ""   1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]   alto_0 = [0, Y, 0]
      base_1 = [0,0,1]
      base_2 = [X-1,0,1]
      base_3 = [X-1,0,Z]
      base_4 = [X,0,Z]
      base_5 = [X,0,0]

      if( Verso<0 )
      {
         base_1 = [0,0,Z]
         base_2 = [1,0,Z]
         base_3 = [1,0,1]
         base_4 = [X,0,1]
         base_5 = [X,0,0]
      }

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_DistanzialeBaseAng
{
   Descrizione = "Montante Angolo Fuori Squadra"
   Code        = MONANG
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X     "Larghezza"    32
      Y     "Altezza"     760
      Z     "Profondità"   32

      TipoVetro "" 0

      Verso  "Verso"  -1

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale" ""
      VAR_Melaminico    ""                   0 SaveAlways

      Spe_hpl        ""  4
      Spe_vtr        ""  4

      FIN_Fro_var    ""  "C028"
      FIN_var        ""  "C002"
      FIN_orie       ""  "O"

      COD_EREDITA    "" "PRE;POST"

      perRADICE      ""  ""
      RADICE         ""  ""

      XGLASS         "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_hpl = 6
      if( TipoVetro == 1
        & VAR_Melaminico == 0 ) { Spe_hpl = 4 }

      //LZ 24/08/2021: cucine laccate
      Z = 24
      if( VAR_Melaminico ) { Z = 22 }

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C028")==0 )
         {
            C001_pdr = VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_C001")
            if( C001_pdr != "" & C001_pdr != "__" )
            {
               GEST_C028 = C001_pdr
               VarAdd = "GEST_C028"   GOSUB Add_TABER_VARSETTATE
            }
         }
      }

      if( TABER_REGOLA == "POST" )
      {
         TipoVetro = 1

         C028 = VAR_VAL_STR(ATTUALE(), "GEST_C028")
         if( C028 != "" & C028 != "__" )
         {
            wk_no_sig = STRDADB(ATTUALE(), "DAMMI_NONSIGNIF", STRCAT("GEST_C028;", GEST_C028))

            if( wk_no_sig == "WW000"  )  { TipoVetro = 0 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      //LZ 24/08/2021: cucine laccate
      FIN_var = FIN_Fro_var
      GOSUB Set_MaterialeFrontale_Ante
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW + $NORID_X + $NORID_Z

      perRADICE = "TADIBA"
      RADICE = perRADICE
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //Posiziona Blocco bl
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Blocco hpl
   {
      GOSUB posa_blocco

      @X = X - 10
      @Z = Spe_hpl
      @base_0.x = base_0.x + 5
   }

   Posiziona Blocco pan
   {
      GOSUB posa_blocco

      @Z = Z - Spe_hpl
      FIN_var = FIN_Fro_var

      if( TipoVetro==1
        & VAR_Melaminico == 0 )
      {
         @Z = Z - Spe_hpl - Spe_vtr
         FIN_var = "C002"
      }

      @base_0.z = base_0.z + Spe_hpl

      GOSUB rivestimento
   }

   Posiziona Blocco vet
   {
      @escluso = 1
      if( TipoVetro == 1
        & VAR_Melaminico == 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @Z = Spe_vtr
      @base_0.z = base_0.z + Z - @Z

      FIN_var = FIN_Fro_var
      GOSUB rivestimento

      //Luca - per export XGLASS - provvisioria
      @AttivaVetroExportDWG_XG = 0
      wk_XGLASS = VAR_VAL_STR(idx_att,"XGLASS")
      if( wk_XGLASS!="" ) { @AttivaVetroExportDWG_XG = 1 }
   }
}

Elemento Cuc_PannelloAngolo
{
   Descrizione = "Pannello x base angolo Pannello"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             "Larghezza"    563
      Y             "Spessore"     18
      Z             "Profondità"   318

      FIN_var       ""             "C002"
      FIN_orie      ""             "O"

      perRADICE     ""             ""
      RADICE        ""             ""

      perCODICE     ""             ""
      GEST_CODICE   ""             ""

      COD_EREDITA   ""             "C011_PRE"

      VT_DIB_NUMERO "Numero keku"  0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB Cucina_Versione
      GOSUB CtrlPosizioneKEKU_FroFixAng
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "C011_PRE") { GOSUB Set_Gest_C011 }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = ""
      perRADICE = "PAFISBAANG"
      if( UN_PADRE("ScoccaT_Col*")) { perRADICE = "PAFISCOANG" }

      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "S02015"
         if( UN_PADRE("ScoccaT_Col*")) { perCODICE = "S02014" }
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      if($Cuc_Escludi_FinEst == 0)
      {
         @Z = Z-$Cuc_Sp_FinInt
      }
   }

   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Z = $Cuc_Sp_FinInt
      @base_0.z = base_0.z + Z - $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }

// { Keku
  #ifdef TEC;AZI
   Posiziona Keku kk_sup1
   {
      @escluso = 1 - KekuSU1

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

      @Verso = 0
   }

   Posiziona Keku kk_sup2
   {
      @escluso = 1 - KekuSU2

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

      @Verso = 0
   }

   Posiziona Keku kk_inf1
   {
      @escluso = 1 - KekuIN1

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

      @Verso = 2
   }

   Posiziona Keku kk_inf2
   {
      @escluso = 1 - KekuIN2

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

      @Verso = 2
   }

   Posiziona Keku kk_sx1
   {
      @escluso = 1 - KekuSX1

      @base_0.x = base_0.x + KekuSX1_OX
      @base_0.y = base_0.y + KekuSX1_Y - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kk_sx2
   {
      @escluso = 1 - KekuSX2

      @base_0.x = base_0.x + KekuSX2_OX
      @base_0.y = base_0.y + KekuSX2_Y - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kk_sx3
   {
      @escluso = 1 - KekuSX3

      @base_0.x = base_0.x + KekuSX3_OX
      @base_0.y = base_0.y + KekuSX3_Y - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kk_sx4
   {
      @escluso = 1 - KekuSX4

      @base_0.x = base_0.x + KekuSX4_OX
      @base_0.y = base_0.y + KekuSX4_Y - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kk_sx5
   {
      @escluso = 1 - KekuSX5

      @base_0.x = base_0.x + KekuSX5_OX
      @base_0.y = base_0.y + KekuSX5_Y - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kk_dx1
   {
      @escluso = 1 - KekuDX1

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

      @Verso = 1
   }

   Posiziona Keku kk_dx2
   {
      @escluso = 1 - KekuDX2

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

      @Verso = 1
   }

   Posiziona Keku kk_dx3
   {
      @escluso = 1 - KekuDX3

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

      @Verso = 1
   }

   Posiziona Keku kk_dx4
   {
      @escluso = 1 - KekuDX4

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

      @Verso = 1
   }

   Posiziona Keku kk_dx5
   {
      @escluso = 1 - KekuDX5

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

      @Verso = 1
   }
  #endif
// } Keku
}

Elemento Cuc_MasselloAngolo
{
   Descrizione = "massello basette per base angolo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563
      Y "Spessore"             18
      Z "Profondità"          318

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "MABABAANG"
      if( UN_PADRE("ScoccaT_Co*") )  { perRADICE = "MABACOANG" }

      RADICE = perRADICE

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 23.10.2020 per MdF_Sat. In pratica su tutti gli archetipi se *Fia* e CamInciso
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_MasselloLvst
{
   Descrizione = "massello laterale lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     69
      Y "Altezza"       18
      Z "Profondità"    61

      Verso       ""  -1

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "MABALV"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @X = X - 1
      @Z = Z - 1
      if( Verso>0 ) { @base_0.x = base_0.x + 1 }
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco bl1
   {
      @base_0 = base_0
      @base_0.x = base_3.x - 1
      @X = 1
      @Y = Y
      @Z = Z - 1
      if( Verso>0 ) { @base_0.x = base_0.x }
      FIN_var = "C001"
      GOSUB rivestimento
   }

   Posiziona Blocco bl2
   {
      @base_0 = base_0
      @base_0.z = base_1.z - 1
      @X = X
      @Y = Y
      @Z = 1
      GOSUB rivestimento
   }
}

Elemento Cuc_TamponamentoLvst
{
   Descrizione = "massello laterale lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     69
      Y "Altezza"       18
      Z "Profondità"    20.5

      Verso       ""  -1

      TipoLvst     "Tipologia LVST"  0 //Implicit
      TipoApertura "Apertura Base"   0 //Implicit

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      Mas_Y       "" 10
      Lam_Y       "" 68
      Mas_OffY    "" 18

      perRADICE   ""  ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

//    Mas_OffY = 18
//    Lam_Y = Mas_Y + Mas_OffY
//    Y = Lam_Y
//    Z = 20.5
//
//    //Y = 78
//    //Z = 20.5
//    //rid_y = 18
//    //if( TipoLvst==1 )
//    //{
//    //   Y = 36
//    //   Z = 31.5
//    //   rid_y = 19
//    //}
//    //off_y = rid_y
//
//    //Luca 30/04/2019
//    if( UN_PADRE("ScoccaT_Col*") )
//    {
//       //Y = 107
//       //rid_y = 37
//       //off_y = 18
//
//       Mas_OffY = 18
//       Lam_Y = 107
//       Mas_Y = 107 - 37
//       Y = Lam_Y
//    }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 20/11/2019
      Mas_OffY = 18
      Lam_Y = Mas_Y + Mas_OffY
      Y = Lam_Y
      Z = 20.5

      //Luca 30/04/2019
      if( UN_PADRE("ScoccaT_Col*") )
      {
         Mas_OffY = 18
         Lam_Y = 107
         Mas_Y = 107 - 37
         Y = Lam_Y
      }
   }

   Gestionale
   {
      GOSUB GestComune

      if( VAR_EXIST(ATTUALE(),"perRADICE_prec")==0 ) { perRADICE_prec = perRADICE }

      par1 = "TALV"

      par2 = "MA"
      if( TipoApertura==1 ) { par2 = "SD" }

      if( TipoLvst==1
        | TipoLvst==2 )     { par2 = "XXL" }

      perRADICE = STRCAT(par1,par2)

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

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      @base_0 = base_0
      //@base_0.y = base_0.y + off_y
      //@base_0.y = base_0.y + rid_y
      @X = X
      //@Y = Y - rid_y

      //Luca 20/11/2019
      @base_0.y = base_0.y + Mas_OffY
      @Y = Mas_Y

      @Z = Z - 1.5
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco lam
   {
      @base_0 = base_0
      @base_0.z = base_1.z - 1.5
      @X = X
      @Y = Y
      @Z = 1.5
      FIN_var = "C001"
      GOSUB rivestimento
   }
}

Elemento Cuc_BarraInfLvst
{
   Descrizione = "Barra inferiore lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"       69
      Y  "Altezza"         20
      Z  "Profondità"      30

      Raggio      ""        2.5

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  ""

      COD_EREDITA "" "PRE"

      RuotaCatena "" 0
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y = $Cuc_Spe_Cat
      Z = $Cuc_Larg_Cat
      if( RuotaCatena == 1 )
      {
         Y = $Cuc_Larg_Cat
         Z = $Cuc_Spe_Cat
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

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

   Gestionale
   {
      GOSUB GestComune

      //LZ 18/11/2021
      //Luca 19/07/2019 mantis 0020495
      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perRADICE_prec = VAR_VAL_STR( ATTUALE(), "perRADICE")
         GEST_CODICE = ""

         perRADICE = "BAIN"
         if( RuotaCatena == 1 )         { perRADICE = "BAINR" }
         if( UN_PADRE("ScoccaT_Col*") ) { perRADICE = "BAINCO" }

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

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoSmussatoX bl
   {
      GOSUB posa_blocco

      @R0 = Raggio
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      //@c_rivestimento = $c_nero
      if( VAR_EXIST( ATTUALE(), STRCAT( "GEST_", FIN_var)) ) { GOSUB rivestimento }
   }
}

Elemento Cuc_MassInfSoff
{
   Descrizione = "Massello inferiore colonne soffietto"
   Code        = MAS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "Larghezza"       19
      Y           "Altezza"         70
      Z           "Profondità"      674

      GEST_CODICE ""                "S07011"
      FIN_var     ""                "C002"
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $Cuc_Spe_MasSoff
      Y = $Cuc_Alt_MasSoff
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_BarraInfLvtr
{
   Descrizione = "Barra inferiore lavatrice"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente
   Attrezzabile ScoccaT_B* ScoccaT_C* *

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"       69
      Xr "Larghezza barra" 69
      Y  "Altezza"         20
      Z  "Profondità"      30

      Verso       ""        0

      Raggio      ""        2.5
      Cuc_Dia_Pie ""       10

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

      perCODICE   ""  ""
      GEST_CODICE ""  ""

      COD_EREDITA "" "PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( IS_VAR_FIXED( ATTUALE(), "Verso") == 0 )
      {
         Verso = 0
         Verso_pdr = VAR_VAL( PADRE( ATTUALE(), -1), "Verso")
         if( VAR_EXIST( PADRE( ATTUALE(), -1), "Verso") )
         {
            Verso = Verso_pdr
            if( Verso_pdr == 0 ) { Verso = 2 }
         }
      }

      // -1 o 1: un solo blocco con 2 gradini
      // 0     : nessun blocco con 2 gradini
      // 2     : due blocchi con 2 gradini
      Xr = X - ABS(Verso)*$Cuc_Bl2Cat_X

      Y = $Cuc_Larg_Cat_1
      Z = $Cuc_Spe_Cat_1
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att

      X = @X - 2*$Cuc_Spe_Fia

      base_0 = @base_0
      base_0.x = @base_0.x + $Cuc_Spe_Fia
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

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

   Gestionale
   {
      GOSUB GestComune

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perCODICE = "B08011"
         if( Verso == 2) { perCODICE = "B08012" }
         if( Verso == 0) { perCODICE = "Y00141" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoSmussatoX bl
   {
      GOSUB posa_blocco

      @X = Xr

      if( Verso < 0  ) { @base_0.x = base_0.x + X - @X     }
      if( Verso == 2 ) { @base_0.x = base_0.x + (X - @X)/2 }

      @R0 = Raggio
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      //@c_rivestimento = $c_nero
      if( VAR_EXIST( ATTUALE(), STRCAT( "GEST_", FIN_var)) ) { GOSUB rivestimento }
   }

   Posiziona Cuc_BarraInfLvtr_Blc2 blsx
   {
      @escluso = 1
      if( Verso < 0
        | Verso == 2 ) { @escluso = 0 }

      @base_0 = base_0

      @Verso = -1
   }

   Posiziona Cuc_BarraInfLvtr_Blc2 bldx
   {
      @escluso = 1
      if( Verso > 0 ) { @escluso = 0 }

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

      @Verso = 1
   }

   Posiziona Cuc_piedino p1
   {
      GOSUB PosaPiedino
      @Y = $Cuc_Alt_Zoc

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

      @rag1 = Cuc_Dia_Pie
      @rag2 = Cuc_Dia_Pie/2
      @alt1 = 2
   }

   Posiziona Cuc_piedino p2
   {
      GOSUB PosaPiedino
      @Y = $Cuc_Alt_Zoc

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

      @rag1 = Cuc_Dia_Pie
      @rag2 = Cuc_Dia_Pie/2
      @alt1 = 2
   }
}

Elemento Cuc_BarraInfLvtr_Blc2
{
   Descrizione = "Blocco due gradini per barra lvtr"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "Larghezza"       30
      Y           "Altezza"         40
      Z           "Profondità"      20

      Verso       ""               -1

      Raggio      ""                2.5 Implicit

      HIDE        ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $Cuc_Bl1Cat_X + $Cuc_Bl2Cat_X
      Y = $Cuc_Bl2Cat_Y
      Z = $Cuc_Bl2Cat_Z
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona BloccoSmussatoX bl2asx
   {
      GOSUB posa_blocco

      @X = $Cuc_Bl2Cat_X

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @R0 = Raggio
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco bl2bsx
   {
      @X = $Cuc_Bl1Cat_X
      @Y = $Cuc_Bl1Cat_Y
      @Z = $Cuc_Bl1Cat_Z

      @base_0.x = base_0.x + X - @X
      if( Verso > 0 ) { @base_0.x = base_0.x }
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z + (Z - @Z)/2

      @c_rivestimento = $c_alluminio
   }
}

Elemento Cuc_ServoDrive
{
   Descrizione = "Meccanismo servo drive"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     130
      Y "Altezza"       60
      Z "Profondità"    276

      FIN_var     ""  ""
      FIN_orie    ""  ""

      perRADICE   ""  ""
      RADICE      ""  "KTSD"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_MasselloXServoDrive
{
   Descrizione = "masselo per servo drive"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     19
      Y "Altezza"       60
      Z "Profondità"    400

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "MASD"
   }

   Assegnazioni
   {
      GOSUB AssComune

      TIPO_COLLO = ""
      if( UN_PADRE("ScoccaT_C*")) { TIPO_COLLO = "155" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_TamponamentoColLvst
{
   Descrizione = "massello laterale lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     69
      Y "Altezza"       18
      Z "Profondità"    20.5

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "TACOLVFO"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Z = Z - 1.5
      FIN_var = "C002"
      GOSUB rivestimento
   }

   Posiziona Blocco lam
   {
      @base_0 = base_0
      @base_0.z = base_1.z - 1.5
      @X = X
      @Y = Y
      @Z = 1.5
      FIN_var = "C001"
      GOSUB rivestimento
   }
}

Elemento Cuc_ZoccoloLvst
{
   Descrizione = "Zoccolo lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
        #include %path_bdm%\var_db.inc

        X                   "Larghezza"            69
        Y                   "Altezza"              97
        Z                   "Profondità"           23

        //LZ 02/08/2021: cucine laccate
        MaterialeFrontale   "Materiale Frontale"   ""
        VAR_Melaminico      ""                     0               SaveAlways

        Spe_PanFin          ""                     4
        Spe_PanInt          ""                     19

        ConTrafila          ""                     0
        Spe_Cor             ""                     17
        Lar_Cor             ""                     14

        Rie_PanInt          ""                     3

        FIN_PanFin          ""                     "C001"
        FIN_PanInt          ""                     "C002"
        FIN_Cor             ""                     ""

        perRADICE           ""                     ""
        RADICE              ""                     ""

        perCODICE           ""                     ""
        GEST_CODICE         ""                     ""

        XGLASS              "Num. XGLASS"          ""              Utente   (   )

        c_trafila           ""                     [192,192,192]   XyzAbsolute
   }

   Assegnazioni
   {
      GOSUB AssComune
      idx_topl = GetTopLevel(idx_att)
      GOSUB CucP_Assegnazioni

      TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")

      ZoccNow     = 0
      RieXsx_pan  = 3
      RieXdx_pan  = 3
      if( TipoFrontale >= 2) { ZoccNow = 1 }

      AntaInCoppia = 0
      Verso        = 0
      AriaX_VV     = 3
      RieY_pan     = 0

      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*") )              { Z = $Cuc_Spe_Ant_Col }
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico") ) { Z = $Cuc_Spe_Ant_Mel }
      if( Cucina_Versione > 2 )
      {
         Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z"))
         Spe_Cor    = 20
         Spe_PanInt = 18
         if( ZoccNow == 0 ) { RieY_pan = 15 }
      }

      CFM_Calcolo_FM = 0
      GOSUB DefAnteNow

      if( UN_PADRE("ScoccaT_ColLvstForno")
        & VAR_VAL( PADRE( ATTUALE(), 1), "VAR_Revisione") == 1) { Y_pan1 = Y - 22.5 }

      if( UN_PADRE("ScoccaT_ColLvst")
        | UN_PADRE("ScoccaT_ColLvst2Forno"))                    { Y_pan1 = Y - 22.5 }

      GOSUB Set_Rev_NowNastro_Gest_C179

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_PanInt   = GetFirstValidVarGest( FIN_idx_gest, "C002;C055")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Set_MaterialeFrontale_Ante

      ConTrafila = 0
      if( UN_PADRE("ScoccaT_Base*"))
      {
         if( Cucina_Versione <= 2
           & VAR_Melaminico == 0  )            { ConTrafila = 1 }
         if( Cucina_Versione > 2
           & MaterialeFrontale == "WILDWOOD" ) { ConTrafila = 1 }
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="POST" ) { GOSUB Set_MaterialeFrontale_Ante }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_IDXPADRE = idx_pdr

      perCODICE = ""
      perRADICE = "ZCBALV"

      if( UN_PADRE("ScoccaT_Col*"))
      {
         perRADICE = "ZCCOLV"
         if( VAR_VAL( idx_pdr, "TipoFrontale") >= 2) { perRADICE = "ZCCOLVN"   }
      }

      if( Cucina_Versione > 2)
      {
         GEST_IDXPADRE = idx_topl

         perRADICE = "ZCALVS"
         if( Cucina_ModelloDsc == "Cut")             { perRADICE = "ZCALVSC"   }

         if( UN_PADRE( "ScoccaT_C*"))
         {
            perRADICE = "ZCALVSCO"
            if( Cucina_ModelloDsc == "Cut")          { perRADICE = "ZCALCSCCO" }
            if( Cucina_ModelloDsc == "Now")          { perRADICE = "ZCALCSNCO" }
         }
      }

      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)
      {
         perCODICE = "Y00646"
         if( UN_PADRE("ScoccaT_Col*"))               { perCODICE = "Y00XXX"    }
      }

      if( perCODICE != "") { perRADICE = "" }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //{ basi
   Posiziona Blocco bpanfin
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Base*") & VAR_Melaminico == 0 )
      {
         @escluso = 0
         //Luca 04/02/2022
         if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 1 }
      }

      if( Cucina_Versione > 2
        & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin
      FIN_var = FIN_PanFin
      FIN_orie = "O"
      GOSUB rivestimento

      //Luca - per export XGLASS - provvisioria
      //Luca 07/02/2020
      @AttivaVetroExportDWG_XG = 0
      wk_XGLASS = VAR_VAL_STR(idx_att,"XGLASS")
      if( wk_XGLASS!="" ) { @AttivaVetroExportDWG_XG = 1 }
   }

   Posiziona Blocco bpanInt
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Base*")
        & VAR_Melaminico == 0 ) { @escluso = 0 }

      if( Cucina_Versione > 2
        & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      @base_0.x = base_0.x + Lar_Cor*ConTrafila
      @base_0.z = base_0.z + 1

      @X = X - 2*Lar_Cor*ConTrafila
      @Y = Y - 2*Lar_Cor*ConTrafila
      @Z = 16

      if( Cucina_Versione > 2 )
      {
         @base_0.z = base_0.z
         @Y = Y - SE_NUM(ConTrafila,2*Lar_Cor,RieY_pan)
         @Z = Spe_PanInt
      }

      @base_0.y = base_0.y + Lar_Cor*ConTrafila

      FIN_var = FIN_PanInt
      GOSUB rivestimento
   }

   Posiziona VR_Vetro bpanfVV
   {
      @escluso = 1

      if( UN_PADRE("ScoccaT_Base*") & VAR_Melaminico == 0 )
      {
         if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 0 }
      }

      if( Cucina_Versione > 2
         & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin
      FIN_var = FIN_PanFin
      FIN_orie = "O"
      GOSUB rivestimento
      @FIN_var = FIN_var
   }

   Posiziona _graf_cornice_fro corfro
   {
      @escluso = SE_NUM(ConTrafila,0,1)

      GOSUB posa_blocco
      @X = X
      @Y = Y
      @Z = Spe_Cor
      @base_0.z = base_0.z + Z - Spe_PanFin - @Z

      @Lar_Cor = Lar_Cor
      @c_rivestimento = c_trafila
   }
   //} basi

   //{ colonna 368
   Posiziona Blocco panfin
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Col*") & VAR_Melaminico == 0 )
      {
         @escluso = 1
         if( ZoccNow != 1 )
         {
            @escluso = 0
            if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 1 }
         }
      }

      if( Cucina_Versione > 2
         & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin
      FIN_var = FIN_PanFin
      FIN_orie = "O"
      GOSUB rivestimento
   }

   Posiziona VR_Vetro panfVV
   {
      @escluso = 1
      if( UN_PADRE("ScoccaT_Col*") & VAR_Melaminico == 0 )
      {
         @escluso = 1
         if( ZoccNow != 1 )
         {
            if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 0 }
         }
      }

      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin
      FIN_var = FIN_PanFin
      FIN_orie = "O"
      GOSUB rivestimento
      @FIN_var = FIN_var

      @FIN_orie = FIN_orie
      @OrieVetro = "FRO"
   }

   Posiziona Blocco panInt
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Col*")
        & VAR_Melaminico == 0 )    { @escluso = ZoccNow }

      if( Cucina_Versione > 2
        & MaterialeFrontale == "MELAMINICO" ) { @escluso = 1 }

      @base_0.x = base_0.x + Rie_PanInt
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @X = X - 2*Rie_PanInt
      //Luca 03/12/2020 riporto modifiche fatte da LAGO
      //@Y = Y
      @Y = Y_pan1
      @Z = Spe_PanInt
      FIN_var = FIN_PanInt
      GOSUB rivestimento
   }
   //} colonna 368

   //{ colonna NOW
   Posiziona Pannello_AntaNOW pan1
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Col*")
        & VAR_Melaminico == 0 ) { @escluso = 1 - ZoccNow }

      @base_0.x = base_0.x + RieXsx_pan
      @base_0.y = base_0.y + RieY_pan
      @base_0.z = base_0.z
      @X = X_pan1
      @Y = Y_pan1
   }

   Posiziona Vetro_AntaNOW vet1
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Col*")
        & VAR_Melaminico == 0 ) { @escluso = 1 - ZoccNow }

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z
      @X = X_vetro1
      @Y = Y_vetro1
      @SeqVetro = 1
   }

   Posiziona Vetro_AntaNOW vet2
   {
      @escluso = 1
      //LZ 24/08/2021: cucine laccate
      if( UN_PADRE("ScoccaT_Col*")
        & VAR_Melaminico == 0 )
      {
         if( ZoccNow & esc_vtr2==0 ) { @escluso = 0 }
      }
      //@escluso = 1
      //if( ZoccNow & esc_vtr2==0 ) { @escluso = 0 }

      @base_0.x = base_0.x + X_vetro1 + AriaX_VV
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - @Z

      @X = X_vetro2
      @Y = Y_vetro2
      @SeqVetro = 2
   }
   //} colonna NOW

   //LZ 24/08/2021: cucine laccate
   Posiziona _xsweep_graf_zoccolo_lvst bpanMel
   {
      @escluso = 1
      if( VAR_Melaminico == 1 )               { @escluso = 0 }
      if( Cucina_Versione > 2
        & MaterialeFrontale == "MELAMINICO" ) { @escluso = 0 }

      GOSUB posa_blocco

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

#ifdef TEC;AZI
   //Luca 02/10/2019
   Posiziona Keku kksx1
   {
      @escluso = 0
      if( UN_PADRE("ScoccaT_ColLvst2Forno") ) { @escluso = 1 }

      @base_0.x = base_0.x + $Cuc_Spe_Fia - $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = -1
   }

   Posiziona Keku kkdx1
   {
      @escluso = 0
      if( UN_PADRE("ScoccaT_ColLvst2Forno") ) { @escluso = 1 }

      @base_0.x = base_0.x + X - $Cuc_Spe_Fia - @X + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z - @Z

      @Verso = 1
   }
#endif
}

//LZ 24/08/2021: cucine laccate
Elemento _xsweep_graf_zoccolo_lvst
{
   Descrizione = "Zoccolo Lvst"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 637
      Y "" 97
      Z "" 19

      Y_Sms "" 15
      Z_Sms "" 15

      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0, 0, 0]
      base_1 = [0, 0, Z]
      base_2 = [0, Y, Z]
      base_3 = [0, Y, Z_Sms]
      base_4 = [0, Y-Y_Sms, 0]

      alto_0 = base_0
      alto_0.x = X
   }
}

Elemento Cuc_FiancoFinLvst
{
   Descrizione = "Fianco Finitura lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                  "Larghezza"           4
      Y                  "Altezza"             97
      Z                  "Profondità"          23

      Verso              ""                    0

      FIN_var            ""                    "C018"

      perRADICE          ""                    ""
      RADICE             ""                    ""

      perCODICE          ""                    ""
      GEST_CODICE        ""                    ""

      XGLASS             "Num. XGLASS"         ""   Utente   (   )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD
      perRADICE = "FFVCLVFO"
      perCODICE = ""

      if( UN_PADRE("ScoccaT_BaseCantinetta"))
      {
         FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

         perRADICE = "FIFINBACA"
         perCODICE = ""
      }

      if( Cucina_Versione > 2)
      {
         FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

         perRADICE = ""
         perCODICE = "F06094"
      }

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C003_FiancoFinitura
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco Ing
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_SupportoLvst
{
   Descrizione = "supporto lavastoviglie"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     452
      //LZ 14/11 cambiate dimensioni
      //Y "Altezza"       522
      //Z "Profondità"    554
      Y "Altezza"       531
      Z "Profondità"    599

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

      RADICE      ""  "SULV"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @Y = 15
      @X = X - 2*10
      @base_0.x = base_0.x + 10
      GOSUB rivestimento
   }

   Posiziona _grafica_supp_lvst_lat sx
   {
      @base_0 = base_0
      @Z = Z
      GOSUB rivestimento
   }

   Posiziona _grafica_supp_lvst_lat dx
   {
      @base_0 = base_0
      @base_0.x = base_3.x - @X
      @Z = Z
      GOSUB rivestimento
   }

   Posiziona _grafica_supp_lvst_sch sch
   {
      @base_0 = base_0
      @base_0.x = base_0.x + 10
      @X = X - 2*10
      GOSUB rivestimento
   }
}

Elemento _grafica_supp_lvst_lat
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X "" 10
      //LZ 14/11 cambiate dimensioni
      //Y "" 491.2
      //Z "" 583.5
      Y "" 521.2
      Z "" 591.21

      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]   alto_0 = [X, 0, 0]
      base_1 = [0,0,Z]
      base_2 = [0,Y,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _grafica_supp_lvst_sch
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X "" 10
      //LZ 14/11 cambiate dimensioni
      //Y "" 501.2
      Y "" 531.2
      Z "" 15

      spe "" 1.2
      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]   alto_0 = [X, 0, 0]
      base_1 = [0,0,spe]
      base_2 = [0,Y-spe,spe]
      base_3 = [0,Y-spe,Z-spe]
      base_4 = [0,Y-15,Z-spe]
      base_5 = [0,Y-15,Z]
      base_6 = [0,Y,Z]
      base_7 = [0,Y,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_CarterColSosp
{
   Descrizione = "Barra per colonne sospese"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"          562
      Y               "Altezza"            189.5
      Z               "Profondità"         39

      FIN_var         ""                   "C030"
      FIN_orie        ""                   "O"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      Y = 189.5
      Z = 39
      if( Cucina_Versione > 2)
      {
         Y = 134
         Z = 29
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      RADICE = "CRBACO"
      GEST_CODICE = ""
      if( Cucina_Versione > 2)
      {
         RADICE = ""
         GEST_CODICE = "B16013"
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_carter_col_sosp ft
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      @Smusso = [ 0, 19, 9.5]
      if( Cucina_Versione > 2) { @Smusso = [ 0, 9.8, 9.8] }
   }
}

Elemento _grafica_carter_col_sosp
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X      ""   10
      Y      ""   189.50
      Z      ""   39

      Smusso ""   [ 0, 19, 9.5] XyzAbsolute

      HIDE   ""   1
   }

   PuntiNotevoli
   {
      spe = 1

      base_0  = [ 0,                   0,                  0]
      alto_0  = [ X,                   0,                  0]

      base_1  = [ 0,                   0,                spe]
      base_2  = [ 0,                   7,                spe]
      base_3  = [ 0,                   7, Z - Smusso.z - spe]
      base_4  = [ 0, base_3.y + Smusso.y,                  Z]
      base_5  = [ 0,                 Y-7,                  Z]
      base_6  = [ 0,                 Y-7,                spe]
      base_7  = [ 0,                   Y,                spe]
      base_8  = [ 0,                   Y,                  0]
      base_9  = [ 0,                 Y-8,                  0]
      base_10 = [ 0,                 Y-8,              Z-spe]
      base_11 = [ 0,    base_4.y + spe/2,              Z-spe]
      base_12 = [ 0,                   8,   base_3.z - spe/2]
      base_13 = [ 0,                   8,                  0]

      base_so = base_0
      alto_ne = [ X,                   Y,                  Z]
   }
}

Elemento Cuc_BarraColSosp
{
   Descrizione = "Barra per colonne sospese"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"     562
      //Y "Altezza"       78
      //Z "Profondità"    86.5
      Y "Altezza"       140
      Z "Profondità"     96

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

      COD_EREDITA      ""      "PRE"

      RADICE      ""  "BASCCO"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco ft
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cuc_TamponamentoFrigo
{
   Descrizione = "Tamponamento colonna frigo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"    69
      Y                 "Altezza"      18   Utente   (   )
      Z                 "Profondità"   19

      Cucina_Versione   ""             2    Implicit

      FIN_var           ""             "C002"
      FIN_orie          ""             "O"

      perCODICE         ""             ""
      GEST_CODICE       ""             ""

      RADICE            ""             ""
      perRADICE         ""             ""
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "TASUCOFRI"
      perCODICE = ""
      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "S06005"
      }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento ProfiloAngoloCielo
{
   Descrizione = "Profilo angolo cieco"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 300
      Y "" 30
      Z "" 30

      FIN_var     ""  "C026"
      FIN_orie    ""  "O"

      RADICE      ""  "PFTOPANG"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona _graf_profilo_angolo_cieco gf
   {
      GOSUB Posa_Elemento
   }
}

Elemento _graf_profilo_angolo_cieco
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      HIDE "" 1
   }

   PuntiNotevoli
   {
      Y = 30
      Z = 30
      spe = 4

      base_0 = [0,0,0]     alto_0 = base_0  alto_0.x = X
      base_1 = [0,0,spe]
      base_2 = [0,Y-spe,spe]
      base_3 = [0,Y-spe,Z]
      base_4 = [0,Y,Z]
      base_5 = [0,Y,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento MasselloAngoloCieco
{
   Descrizione = "massello angolo cieco"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 60
      Y "" 60
      Z "" 60

      //FIN_var     ""  "C025"
      FIN_var     ""  "C019"
      FIN_orie    ""  "O"

      RADICE      ""  "MAANGCIE"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona _graf_massello_angolo_cieco gf
   {
      GOSUB Posa_Elemento
   }
}

Elemento _graf_massello_angolo_cieco
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

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

      HIDE "" 1
   }

   PuntiNotevoli
   {
      X = 60
      Z = 60
      //LZ 14/11 cambiate dimensioni
      //spe = 30
      spe = 28

      base_0 = [0,0,0]     alto_0 = base_0  alto_0.y = Y
      base_1 = [0,0,Z]
      base_2 = [spe,0,Z]
      base_3 = [spe,0,spe]
      base_4 = [X,0,spe]
      base_5 = [X,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_MasselloAngIso
{
   Descrizione = "massello L angolo isola"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"   40
      Y "Altezza"     18
      Z "Profondità"  40

      ConLamieraL "" 0

      FIN_var     ""  "C025"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "MABAANG"
   }

   Assegnazioni
   {
      GOSUB AssComune

      XLam = 35
      YLam = Y
      ZLam = 35

      GOSUB Stato_8

      c_rivestimento = $c_pomice
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_massello_angolo_isola bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      @c_rivestimento = c_rivestimento
   }

   //Posiziona _graf_lamL  ml
   //{
   //   @escluso = 1 - ConLamieraL
   //   GOSUB posa_blocco
   //   @base_0.x = base_0.x + 27
   //   @base_0.z = base_0.z + 13
   //   @X = XLam
   //   @Y = YLam
   //   @Z = ZLam
   //   @ang_y = 90
   //   FIN_var = "C025"
   //   GOSUB rivestimento
   //}
}

Elemento _graf_massello_angolo_isola
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

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

      HIDE "" 1
   }

   PuntiNotevoli
   {
      riex = 13
      riez = 13

      base_0 = [0,0,0]     alto_0 = base_0  alto_0.y = Y
      base_1 = [0,0,Z]
      base_2 = [X,0,Z]
      base_3 = [X,0,riez]
      base_4 = [X-riex,0,riez]
      base_5 = [X-riex,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_LamieraLAngIso
{
   Descrizione = "massello L angolo isola"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile FustoBaseAngoloIsola
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"    35
      Y               "Altezza"      18
      Z               "Profondità"   35

      FIN_var         ""             "C025"
      FIN_orie        ""             "O"

      idx_dx          ""             -1   Implicit
      idx_sx          ""             -1   Implicit

      ORD_RID_CHECK   ""             5
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      XLam = SE_NUM( IS_MATCH( UPPER(NOME(idx_dx)), "*LVST*") == 1, 32, 35)
      YLam = Y
      ZLam = SE_NUM( IS_MATCH( UPPER(NOME(idx_sx)), "*LVST*") == 1, 32, 35)

   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = @X - 2*$Cuc_Spe_Fia
      Y = @Y + $Cuc_RidY_Sco

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = SE_NUM( ZLam > XLam, ZLam, XLam)
      GEST_Z = XLam + ZLam - GEST_X
      GEST_CODICE = "S07010"

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_lamL  ml
   {
      GOSUB posa_blocco
      @X = XLam
      @Y = YLam
      @Z = ZLam
      GOSUB rivestimento
   }
}

Elemento Cuc_MasselloColSoff
{
   Descrizione = "massello Colonna soffietto"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563
      Y "Spessore"             18
      Z "Profondità"           38

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "MACOFR"
      RADICE = perRADICE

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_HPLColSoff
{
   Descrizione = "Spessore HPL colonna soffietto"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"         50
      Y "Spessore"           8
      Z "Profondità"       488

      GEST_CODICE  "" "F06079"

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento Cuc_RipSoff
{
   Descrizione = "Ripiano cricchetto soffietto"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 20/04/2022
      VT_REV_PK2  "Revisione ferramenta PK2"     "0" ShowAlways

      X "" 1
      Y "" 1
      Z "" 1

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      COD_EREDITA ""  "PRE;C011_PRE"

      //perRADICE   ""  "RPINCOLV"
      RADICE      ""  "RPINCOLV"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      Y = $Cuc_Spe_Cop

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )  { GOSUB Set_Gest_C003_CmpColonna }
      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
         @base_0.y = base_0.y + $Cuc_Sp_FinInt
      }
   }

   //Simone 14/11/2022
   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }
}

//Alberto B. 05/08/20
//{
Elemento Cuc_FondoAngL
{
   Descrizione = "Fondo ad angolo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X  ""  563
      Xt       "" 2

      Y        "" 1

      Z  ""  563
      Zt       "" 2

      ZFiaSx   "" 1
      ZFiaDx   "" 1

      AntaSx   "" 1
      AntaDx   "" 1

      LED_SX "" 0 Implicit
      LED_DX "" 0 Implicit

      ang      "" 90
      FuoriSquadraBA "" ""

      FIN_var  "" "C032"
   }

   Assegnazioni
   {
      //ad uso esclusivo del cam inserire prima di ass_comune
      X  = Xt
      Z  = Zt

      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti_completi_angoloL
   }

   Controlli
   {
      GOSUB CtrlComune

      perRADICE = "FOPA"
      RADICE    = perRADICE
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C008_C009_PensAngL

      GOSUB GestComune_Post
   }

   Posiziona BloccoL bl
   {
      GOSUB Cuc_PosaAngL
      GOSUB rivestimento

      @ZFiaSx = ZFiaSx
      @ZFiaDx = ZFiaDx
   }
}

Elemento Cuc_CopAngL
{
   Descrizione = "Cielo/Coperchio ad angolo L"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      Xt       "" 2
      Y  "" 1
      Zt       "" 2

      ZFiaSx   "" 1
      ZFiaDx   "" 1

      AntaSx   "" 1
      AntaDx   "" 1


      ang      "" 90
      FuoriSquadraBA "" ""

      FIN_var  "" "C032"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //ad uso esclusivo del cam
      X  = Xt
      Z  = Zt

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti_completi_angoloL
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Stato_8
      GOSUB CucP_Controlli

      perRADICE = "COPA"
      RADICE    = perRADICE

   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona BloccoL bl
   {
      GOSUB Cuc_PosaAngL
      GOSUB rivestimento
   }
}

Elemento Cuc_RipianoL
{
   Descrizione = "Ripiano generico a L"
   Code        = CUB
   Gruppo      = "Ripiano CUCINA"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Alias       CamIncidente;CamInciso

   Attrezzabile ScoccaS_PensileAngolo

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 20/04/2022
      VT_REV_FBRU "Revisione ferramenta brunita" "0" ShowAlways

      X  "Larghezza complessiva"  582
      Xt "Larghezza complessiva"  582

      Y  "spessore ripiano"         8

      Z  "Profondità complessiva" 582
      Zt "Profondità complessiva" 582

      ZFiaSx   "Profondità minore SX"  340 //Utente ( )
      ZFiaDx   "Profondità minore DX"  340 //Utente ( )
      AntaSx   "lato frontale SX"      450 //Utente ( )
      AntaDx   "lato frontale DX"      450 //Utente ( )

      X_Mont   "Larghezza Montante"     88.5
      Z_Mont   "Profondita Montante"    88.5

      ang      "Angolo" 90 Utente ( )
      FuoriSquadraBA "" "SCHIENE"

      TipoRipiano  "Tipologia Ripiano"    1
      RipianoFisso "" 0

      perRADICE   ""  ""
      RADICE      ""  ""

      FIN_var     ""  "C014"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti_completi_angoloL
      X = Xt
      Z = Zt
   }

   //Procedura OnQueryBdmLocal
   //{
   //   if( $query_type==8 )
   //   {
   //      $QueryResult__ = 0
   //      if(IS_MATCH(NOME($query_p1),"Scocca*Angolo")) { $QueryResult__ = 1 }
   //   }
   //}

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani
   }

   Attrezza
   {
      idx_pdr = PADRE( idx_att, 1)
      vano_n = $vano_n

      //wk_rie_x = 7
      //wk_rie_z = 7
      //wk_off_x = 2
      //wk_off_z = 3

      wk_rie_x = 2
      wk_rie_z = 2

      wk_off_x = 0
      wk_off_z = 0

      base_0.x = $vano_0.x + wk_off_x
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + wk_off_z

      Xt = $larghezza  - wk_rie_x
      Zt = $profondita - wk_rie_z

      ZFiaSx = 340
      ZFiaDx = 340
      //if( VAR_EXIST(idx_pdr,"AntaSx") )
      //{  AntaSx = @AntaSx -$Cuc_Aria_Rip_Fia_X -$Cuc_Spe_Fia   }
      //if( VAR_EXIST(idx_pdr,"AntaDx") )
      //{  AntaDx = @AntaDx -$Cuc_Aria_Rip_Fia_X -$Cuc_Spe_Fia   }

      ang = @ang
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      //perRADICE = "RIPPA"
      perRADICE = "RIPPAV2"

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona BloccoL bl
   {
      GOSUB Cuc_PosaAngL

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento BloccoL
{
   Descrizione = "Blocco a L per angolari"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      Xt       "" 2
      Zt       "" 2
      Y        "" 1
      ZFiaSx   "" 1
      ZFiaDx   "" 1
      AntaSx   "" 1
      AntaDx   "" 1
      HIDE    "" 1
      ang     "" 90
      FuoriSquadraBA "" ""
   }

   Assegnazioni
   {
      // chiedere
      SET_GEST_STATO(ATTUALE(),7,1)
   }

   PuntiNotevoli
   {
      base_0 = [ 0, 0,  0]
      base_1 = [ 0, 0,  ZFiaSx]
      base_2 = [Xt-ZFiaDx, 0 , ZFiaSx]
      base_3 = [Xt-ZFiaDx, 0 , Zt]
      base_4 = [Xt, 0, Zt]
      base_5 = [Xt, 0,  0]

      if( ang!=90 )
      {
         if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
         {
            base_0 = [     0, 0,  0]
            base_1 = [     0, 0, ZFiaSx]
            base_2 = [AntaSx, 0, ZFiaSx]
            base_3 = [AntaSx+AntaDx*SENO(ang-90), 0, ZFiaSx+AntaDx*COSENO(ang-90)]
            base_4 = [base_3.x+ZFiaDx*COSENO(ang-90), 0, (base_3.z-ZFiaDx*SENO(ang-90)) ]
            if ( ang!=90 ) {  tang = SENO(ang-90)/COSENO(ang-90)    }
            else           {  tang = 0   }
            base_5 = [base_4.x-(base_4.z*tang), 0,  0]
         }

         if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
         {
            base_0 = [ 0, 0,  0]
            base_1 = [ 0, 0,  ZFiaSx]
            base_5 = [Xt, 0,  0]
            base_4 = [Xt+Zt*SENO(ang-90), 0, Zt*COSENO(ang-90) ]
            base_3 = [base_4.x -ZFiaDx*COSENO(ang-90), 0, base_4.z+ZFiaDx*SENO(ang-90)]
            base_2 = [base_3.x -(base_3.z-ZFiaSx)*(SENO(ang-90)/COSENO(ang-90)), 0, base_1.z]
         }
      }
      alto_0=base_0    alto_0.y=Y
   }
}
//Alberto B. 05/08/20 FINE
//}
//Alberto B. 12/01/21
Elemento Cuc_PannSup
{
   Descrizione = "Pannello Superiore Frontale"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 1
      Z "" 1

      perRADICE   ""  ""
      RADICE      ""  "PASUFI"

      //LZ 05/05/2021
      FIN_var  "" "C002"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
      Y = 19
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Procedura OnTabEredita
   //{}

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      if($Cuc_Escludi_FinEst==0)
      {
         @Y = Y-$Cuc_Sp_FinInt
      }
   }

   //Simone 14/11/2022
   Posiziona Blocco blEst
   {
      @escluso = $Cuc_Escludi_FinEst
      GOSUB Posa_Elemento

      @Y = $Cuc_Sp_FinInt
      @base_0.y = base_0.y + Y - $Cuc_Sp_FinInt

      SetRgb_Var( @c_rivestimento, idx_att, FIN_var, 1)
   }
}

Elemento Cuc_StaffaBaseFrigo
{
   Descrizione = "Fondo frigo"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente
   Attrezzabile *

   Variabili
   {
      X "" 48
      Y "" 40
      Z "" 42

      HIDE "" 1

      pos "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      base_0 = $vano_0
      base_0.x = $vano_0.x + @X - $Cuc_Spe_Fia - X
      if( pos < 0 ) { base_0.x = $vano_0.x + $Cuc_Spe_Fia }
      base_0.y = base_0.y + @Y - 3*Y
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento
      @base_0.x = base_0.x + X
      if( pos < 0 )
      {
         @ang_z = 180
         @base_0.x = base_0.x
      }
      @base_0.y = base_0.y + 20
      @import = STRCAT($path_sat,"Dettagli\Staffa_Frigo.sat")
   }
}

Elemento Cuc_StaffaFrigo
{
   Descrizione = "Staffa per base frigo"
   Code        = STF
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                        "Larghezza"                   54
      Y                        "Altezza"                     19
      Z                        "Profondità"                  27

      Staffa_Stop_Idx          "Staffa sottotop - idx stop"  -1 Implicit

      Staffa_Tipo              "Staffa sottotop - tipo"      0  Implicit
      Staffa_R                 "Staffa sottotop - raggio"    14 Implicit
      Staffa_Spe               "Staffa sottotop - spessore"  2  Implicit

      //Verso: -1 - Sinistra, 1 - Destra
      Staffa_Verso             "Staffa sottotop - verso"     0  Implicit

      Staffa_ScX               "Scasso staffa - X"           54 Implicit
      Staffa_ScOX              "Scasso staffa - offset X"    0  Implicit
      Staffa_ScR               "Scasso staffa - raggio"      12 Implicit

      RigeneraScasso           "Rigenera Scasso"             0  Boolean
      Scassa_Chi_Plus          ""                            ""
      Scassa_Chi_Plus_SottoTop ""                            ""

      M4_MIS                   ""                            "RigeneraScasso"

      HIDE                     ""                            2
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_scs_centro = [X/2,Y,Z/2]

      //Per stampe
      pnt_cen_fro = alto_1
      pnt_cen_fro.x = alto_1.x + X/2

      VAR_ELD_Raggio = Staffa_ScR
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB TrovaIdxTopDaScassare
      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

         GOSUB EliminaScassi
         COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
      }
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "7FE434"
      if( Staffa_Tipo == 1 ) { perCODICE = "7FE435" }

      GEST_CODICE = perCODICE

      //Abbino la staffa al padre del top
      GOSUB Gest_Cuc_StaffaFrigo

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB Elimina_Scasso
   }

   //U
   Posiziona _graf_Cuc_StaffaFrigo_U stU
   {
      @escluso = Staffa_Tipo

      GOSUB posa_blocco
   }

   Posiziona _scasso_Cuc_StaffaFrigo_U scU
   {
      @escluso = Staffa_Tipo

      GOSUB posa_blocco
      @base_0.z = base_0.z + 0.1

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop
   }

   //L
   Posiziona _graf_Cuc_StaffaFrigo_L stL
   {
      @escluso = 1 - Staffa_Tipo

      GOSUB posa_blocco

      @Staffa_Verso = Staffa_Verso
   }

   Posiziona _scasso_Cuc_StaffaFrigo_L scL
   {
      @escluso = 1 - Staffa_Tipo

      GOSUB posa_blocco
      @base_0.z = base_0.z + 0.1

      @Staffa_Verso = Staffa_Verso

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop
   }
}

Elemento _graf_Cuc_StaffaFrigo_U
{
   Descrizione = "Staffa U per base frigo"
   Code        = STF
   Gruppo      = ""
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X              "Larghezza"       54
      Y              "Altezza"         19
      Z              "Profondità"      27

      Staffa_Spe     "Spessore"         2 Implicit
      Staffa_R       "Raggio"          14 Implicit
   }

   Assegnazioni
   {
      i = Staffa_R * SENO(45)

      c_rivestimento = $c_grafite
   }

   PuntiNotevoli
   {
      base_0  = [          0, 0, Z ]
      base_1  = [ Staffa_Spe, 0, Z ]
      base_2  = [ Staffa_Spe, Y, Z ]
      base_3  = [          0, Y, Z ]
      alto_ne = base_3

      base_path_0 = base_0
      base_path_1 = [            0, 0,   Staffa_R ]
      arc_path_1  = [   Staffa_R-i, 0, Staffa_R-i ]
      base_path_2 = [     Staffa_R, 0,          0 ]
      base_path_3 = [   X-Staffa_R, 0,          0 ]
      arc_path_3  = [ X-Staffa_R+i, 0, Staffa_R-i ]
      base_path_4 = [            X, 0,   Staffa_R ]
      base_path_5 = [            X, 0,          Z ]
   }
}

Elemento _scasso_Cuc_StaffaFrigo_U
{
   Descrizione = "Scasso staffa U per base frigo"
   Code        = STF
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X                "Larghezza"       54 Implicit
      Y                "Altezza"         19 Implicit
      Z                "Profondità"      27 Implicit

      Staffa_ScR       "Raggio"          12 Implicit

      Scassa_Chi_Plus  ""                ""
   }

   Assegnazioni
   {
      i = Staffa_ScR * SENO(45)

      SHOW_MODE(ATTUALE(),0)
   }

   PuntiNotevoli
   {
      base_0  = [              0, 0,            Z ]
      base_1  = [              0, 0,   Staffa_ScR ]
      arc_1   = [   Staffa_ScR-i, 0, Staffa_ScR-i ]
      base_2  = [     Staffa_ScR, 0,            0 ]
      base_3  = [   X-Staffa_ScR, 0,            0 ]
      arc_3   = [ X-Staffa_ScR+i, 0, Staffa_ScR-i ]
      base_4  = [              X, 0,   Staffa_ScR ]
      base_5  = [              X, 0,            Z ]

      alto_0   = base_0
      alto_0.y = base_0.y + Y
   }

   Procedura M4_Scassi
   {
      GOSUB ScassaChiPlus_M4
   }
}

Elemento _graf_Cuc_StaffaFrigo_L
{
   Descrizione = "Staffa L per base frigo"
   Code        = STF
   Gruppo      = ""
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X              "Larghezza"       52
      Y              "Altezza"         19
      Z              "Profondità"      27

      Staffa_Verso   "Verso"            0 Implicit

      Staffa_Spe     "Spessore"         2 Implicit
      Staffa_R       "Raggio"          14 Implicit
   }

   Assegnazioni
   {
      i = Staffa_R * SENO(45)

      c_rivestimento = $c_grafite
   }

   PuntiNotevoli
   {
      base_0  = [          0, 0, Z ]
      base_1  = [ Staffa_Spe, 0, Z ]
      base_2  = [ Staffa_Spe, Y, Z ]
      base_3  = [          0, Y, Z ]
      alto_ne = base_3

      base_path_0 = base_0
      base_path_1 = [          0, 0,   Staffa_R ]
      arc_path_1  = [ Staffa_R-i, 0, Staffa_R-i ]
      base_path_2 = [   Staffa_R, 0,          0 ]
      base_path_3 = [          X, 0,          0 ]

      if( Staffa_Verso < 0 )
      {
         base_0  = [ 0, 0,          0 ]
         base_1  = [ 0, 0, Staffa_Spe ]
         base_2  = [ 0, Y, Staffa_Spe ]
         base_3  = [ 0, Y,          0 ]
         alto_ne = base_3

         base_path_0 = base_0
         base_path_1 = [   X-Staffa_R, 0,          0 ]
         arc_path_1  = [ X-Staffa_R+i, 0, Staffa_R-i ]
         base_path_2 = [            X, 0,   Staffa_R ]
         base_path_3 = [            X, 0,          Z ]
      }
   }
}

Elemento _scasso_Cuc_StaffaFrigo_L
{
   Descrizione = "Scasso staffa L per base frigo"
   Code        = STF
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X              "Larghezza"     52 Implicit
      Y              "Altezza"       19 Implicit
      Z              "Profondità"    27 Implicit

      Staffa_Verso   "Verso"         0 Implicit

      Staffa_ScR     "Raggio"        12 Implicit

      Scassa_Chi_Plus ""        ""
   }

   Assegnazioni
   {
      i = Staffa_ScR * SENO(45)

      SHOW_MODE(ATTUALE(),0)
   }

   PuntiNotevoli
   {
      DEL_VAR( ATTUALE(), "arc*")
      base_0 = [            0, 0,            Z ]
      base_1 = [            0, 0,   Staffa_ScR ]
      arc_1  = [ Staffa_ScR-i, 0, Staffa_ScR-i ]
      base_2 = [   Staffa_ScR, 0,            0 ]
      base_3 = [            X, 0,            0 ]
      base_4 = [            X, 0,            Z ]

      if( Staffa_Verso < 0 )
      {
         DEL_VAR( ATTUALE(), "arc*")
         base_0 = [              0, 0,            Z ]
         base_1 = [              0, 0,            0 ]
         base_2 = [   X-Staffa_ScR, 0,            0 ]
         arc_2  = [ X-Staffa_ScR+i, 0, Staffa_ScR-i ]
         base_3 = [              X, 0,   Staffa_ScR ]
         base_4 = [              X, 0,            Z ]
      }

      alto_0   = base_0
      alto_0.y = base_0.y + Y
   }

   Procedura M4_Scassi
   {
      GOSUB ScassaChiPlus_M4
   }
}
//} COMPONENTI

//{ FRONTALI
Elemento Cuc_Anta
{
   Descrizione = "Anta Generica battente o complanare singola/doppia"
   Code        = ANTBAT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro   Auto
   Vestibile   Scocca* Vano*Falegnameria
   Alias       Frontale

   Variabili
   {
      ForzaMisX              "Abilita modifiche in larghezza"        0       //Menu ( bool )
      ForzaMisY              "Abilita modifiche in Altezza"          0       //Menu ( bool )

      X                      "Larghezza"                             600     Menu     (   Cuc_XAnta     )   Utente   (   )
      Y                      "Altezza"                               600     Menu     (   Cuc_YAnta     )   Utente   (   )
      Z                      "Spessore"                              21

      TipoFrontale           "Tipologia Frontale"                    0
      Var_Anta_Opzione_Dsc   ""                                      ""      Implicit

      Pos_Fro                "Progressivo anta"                      1       Utente   (   )
      Verso                  "Verso apertura ante"                   -1      Menu     (   DXSX          )

      //l'Apertura può assumere i valori: ES-Estraibile VS-Vasistas RB-Ribalta LB-Libro SF-soffietto
      L_Anta_SX              "Dimensione esatta frontale sinistro"   0       Utente   (   )
      AperturaMn             "Apertura Ante"                         0       Menu     (   Cuc_AperAnt   )
      Apertura               "Tipologia"                             "BA"
      //TabStringa ( "cuc\tab\mnu\Aperture.mnu" )
      Sdoppia                "Sdoppio del frontale oltre:"           733.5   Utente   (   )
      FAttSdoppia            "Flag di attivazione sdoppio "          1       Menu     (   bool          )
      ConGola                "Presenza gola 0=no 1=sopra 2=sotto"    0

      idx_anta_sx            ""                                      -1
      idx_anta_dx            ""                                      -1

      //M4
      CMP2_AZIONI            ""                                      "V+"
      c_rivestimento         ""                                      [0,0,0]
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_VAR_NoGest = "X*;Y*;Z*;TipoFrontale;Sdoppia;FAttSdoppia;L_Anta_SX;Verso;Pos_Fro;AperturaMn"
      PosizManX = $Cuc_POSM_X_STD

      HIDE_ON_EDIT(idx_att,"X;Y;L_Anta_SX;Pos_Fro;TipoFrontale;Sdoppia;FAttSdoppia", $ATTIVA_DLL)

      HIDE = 3
      if( $ATTIVA_DLL == 0
        | $modalita == "TEC") { HIDE = 0 }

      GOSUB CucP_Assegnazioni

      // Sdoppio
      Sdoppia = 733.5
      if( UN_PADRE("ScoccaT_Col*"))     { Sdoppia = 650 }
      if( UN_PADRE("ScoccaT_ColFrigo")) { Sdoppia = 750 }

      if( UN_PADRE("ScoccaS_PensileCopriCaldaia"))
      {
         Sdoppia = 750
         if( VAR_VAL( PADRE( ATTUALE(), 1), "Y") > 750) { Sdoppia = 600 }

         if( VAR_VAL( PADRE( ATTUALE(), 1), "VAR_Speciale") == 1)
         {
            FAttSdoppia = VAR_VAL( PADRE( ATTUALE(), 1), "FAttSdoppia")
         }
      }

      if( VAR_VAL( idx_att, "Cucina_Versione") > 2)
      {
         wk_rie_x = VAR_VAL( -1, FMT( "Cucina_{}_Anta_{}_Rid.x", Cucina_VersioneDsc, Cucina_ModelloDsc))
         wk_rie_x = SE_NUM( wk_rie_x <= 0, 2*$Cuc_Aria_Ant_X, wk_rie_x)

         Sdoppia = 750
         if( UN_PADRE("ScoccaT_C*") == 1
           & UN_PADRE("ScoccaT_C*Forn*") == 0) { Sdoppia = 750.1 }

         Sdoppia = Sdoppia - wk_rie_x
      }

      Apertura = "BA"
      if( AperturaMn == 1) { Apertura = "RB" }
      if( AperturaMn == 2) { Apertura = "VS" }

      if( Apertura == "RB"
        | Apertura == "VS")
      {
         if( IS_VAR_FIXED(ATTUALE(),"FAttSdoppia") == 1) { DEL_VAR_MODIFICATE(ATTUALE(),"FAttSdoppia") }
         FAttSdoppia = 0
      }

      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*") )
      {
         Z = $Cuc_Spe_Ant_Col
         if( UN_PADRE("ScoccaT_ColFalegnameria") == 1 )
         {
            if( ACTION() == 2 )  { VAR_SET_MODIFICATA(ATTUALE(),"TipoFrontale","") }
         }
         else
         {
            TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")
         }
      }

      if( Cucina_Versione > 2)                                   { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1) { Z = 22 }
      if( Z <= 0) { Z = $Cuc_Spe_Ant }

      if( Var_Anta_Opzione_Dsc == "VETRINA")                     { Z = SE_NUM( Cucina_ModelloDsc == "36e8", 17+4, 17+6) }

      //Luca 27/04/2021
      if( VAR_EXIST(ATTUALE(),"cmp_name") ) { GEST_CODICE = "" }

      //Luca 04/05/2020
      if( ACTION()==0 ) { X_cmp=X Y_cmp=Y Z_cmp=Z }
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      //GOSUB CucP_OnSetupLivelli
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
      //GOSUB CucP_Vesti
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
      GOSUB Cuc_Anta_Dim
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Cuc_Anta"))
   }

   //Procedura cancella
   //{
   //   GOSUB CucP_Cancella
   //}

   Procedura Vault
   {
      if( TipoFrontale == 6
        & Cucina_Versione > 2)
      {
         vaultFile = "ASM_012696"
      }
   }

   Posiziona Cuc_AntaSingola an0
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Pos          = Pos_Fro
      @Apertura     = Apertura
      @TipoFrontale = TipoFrontale


      wk_sdoppia_ante = 0
      if( X>=Sdoppia & FAttSdoppia==1  ) { wk_sdoppia_ante = 1 }

      //Luca 23/04/2020
      if( UN_PADRE("ScoccaS_PensileCopriCaldaia") )
      {
         //if( IS_VAR_FIXED(PADRE(idx_att,1),"FAttSdoppia")==1 )
         //{
         //   wk_sdoppia_ante = VAR_VAL(PADRE(idx_att,1),"FAttSdoppia")
         //}
         if( VAR_VAL(PADRE(idx_att,1),"VAR_Speciale")==1 ) { wk_sdoppia_ante = FAttSdoppia }
      }

      if( wk_sdoppia_ante )
      {
         @X = ( X -$Cuc_Aria_Ant_Ant_X )/2
         if(L_Anta_SX>0)  { @X = L_Anta_SX }

         ////Passo il verso poichè default è SX
         //$jbValG = VAR_VAL_STR(-1,"Cuc_VAL_VERSO_SX")
         //VAR_VALUESTR_SET(ATTUALE(),STRCAT($SufGest,$Cuc_GVersoApertura),$jbValG)

         @Verso = -1
         @AntaInCoppia  = 1
      }
      else
      {
         @Verso = Verso
         @AntaInCoppia  = 0
      }


      @M4_NO_OFFS = 1

      //aliasposiz = "an0"
      //GOSUB CucP_Posiziona

      idx_anta_sx = ATTUALE()
   }

   Posiziona Cuc_AntaSingola an1
   {
      @base_0 = base_0

      //if ( X>=Sdoppia & FAttSdoppia==1 )
      if( wk_sdoppia_ante )
      {
         if(L_Anta_SX>0)
         {
            @X = X -L_Anta_SX -$Cuc_Aria_Ant_Ant_X
            @base_0.x = base_3.x - @X
         }
         else
         {
            @base_0.x = base_0.x + (X - $Cuc_Aria_Ant_Ant_X)/2 +$Cuc_Aria_Ant_Ant_X
            @X = (X - $Cuc_Aria_Ant_Ant_X)/2
         }

         @escluso=0
      }
      else
      {
         @escluso=1
      }
      @Y = Y

      //Passo il verso poichè default è DX
      //$jbValG = VAR_VAL_STR(-1,"Cuc_VAL_VERSO_DX")
      //VAR_VALUESTR_SET(ATTUALE(),STRCAT($SufGest,$Cuc_GVersoApertura),$jbValG)

      @Verso         = 1
      @Pos           = Pos_Fro
      @Apertura      = Apertura
      @TipoFrontale  = TipoFrontale
      @AntaInCoppia  = 1

      @M4_NO_OFFS = 1

      //aliasposiz     = "an1"
      //GOSUB CucP_Posiziona

      idx_anta_dx = ATTUALE()
   }
}

Elemento Cuc_AntaSingola
{
   Descrizione = "Anta Singola"
   Code        = ATS
   Gruppo      = "Frontali"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Cuc_Altim_Fro Auto
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_FLAPP     ""                                                      0

      VT_REV_FBRU             "Revisione ferramenta brunita"                          "0"   ShowAlways

      X                       "Larghezza"                                             568
      Y                       "Altezza"                                               686
      Yprec                   "Altezza"                                               686
      Z                       "profondita' anta"                                      18

      TipoFrontale            "Tipologia Frontale"                                    0
      Var_Anta_Opzione_Dsc    ""                                                      ""    Implicit

      FIN_var                 ""                                                      "C001"
      FIN_val                 ""                                                      ""
      FIN_ns                  ""                                                      ""

      MaterialeFrontale       "Materiale Frontale"                                    ""
      VAR_Melaminico          ""                                                      0     SaveAlways

      AntaSuperiore           ""                                                      0     Implicit
      AntaSuperiore_Forno     ""                                                      0     Implicit
      VT_VES_STRINGA          ""

      FroGrafica              "Grafica friontale"                                     ""
      Pos                     ""                                                      1
      PosHFro                 "Altezza posiz. Frontale per posizionamento maniglia"   0
      escludi_man             "esclusione posizionamento maniglia"                    0
      sdoppia_man             "doppia maniglia"                                       0
      modello                 ""                                                      ""
      modello_prec            ""                                                      "NN"
      Posizione               ""                                                      0
      RetroBase               ""                                                      0
      Verso                   "Verso apertura ante"                                   -1    Utente   (   )
      Apertura                "tipo Anta"                                             "BA"
      Var_Scocca_Tipo_Dsc     ""                                                      ""    Implicit
      Var_Anta_Apertura_Dsc   ""                                                      ""    Implicit
      AntaInCoppia            ""                                                      0
      Hide_Vano               ""                                                      1
      ConGola                 "Presenza gola 0=no 1=sopra 2=sotto"                    0

      Alleggerita             "Anta alleggerita"                                      0     Boolean
      Var_Alleggerita         ""                                                      0     Implicit
      FLAG_AntaFrigo          "Anta frigorifero"                                      0     Boolean

      VAR_RidXVtrAnta         "Vetro ridotto lato cerniere"                           0     Implicit

      ////dedicate al tab eredita se necessario
      //PosManOpzY "Posizione manOpzionale in Y" ""
      //OrieMan "" ""
      //
      ////solo per creazione composti
      //XPosMan "XPos" "C"
      //YPosMan "YPos" "A"
      //DX_Man "DX_pos" 30
      //DY_Man "DY_pos" 30
      //
      ////i valori ci sono solo per action>0
      //Passo_Man "" 30
      //X_Man "" 0
      //X_ManMN "" 0
      //Y_Man "" 0
      //Y_ManMN "" 0
      //Z_Man "" 0

      //GT_RICALCOLO_PA2 "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave
      //GT_RICALCOLO_CHVARS "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave

      TestoScritta            "testo riportato nella scritta"                         ""

      //maniglia FLAPP
      ConManigliaFLAPP        ""                                                      0

      Man_Orie                "Maniglia - Orientamento"                               "O"   Utente   (   )
      Man_PosX                "Maniglia - PosX"                                       "L"   Utente   (   )
      Man_OffX                "Maniglia - OffX"                                       0     Utente   (   )
      Man_PosY                "Maniglia - PosY"                                       "C"   Utente   (   )
      Man_OffY                "Maniglia - OffY"                                       0     Utente   (   )

      perCODICE               ""                                                      ""
      GEST_CODICE             ""                                                      ""

      perRADICE               ""                                                      ""
      RADICE                  ""                                                      ""

      COD_EREDITA             ""                                                      "PRE;POST;C011_PRE"

      XGLASS                  "Num. XGLASS"                                           ""    Utente   (   )

      idx_near_centro         ""                                                      -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*") )                              { Z = $Cuc_Spe_Ant_Col }
      if( UN_PADRE("ScoccaS_PensileCopriCaldaia") )               { Z = 20 }
      if( UN_PADRE("ScoccaS_PensileAngolo") )                     { Z = $Cuc_Spe_AntPA }
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico") )                 { Z = $Cuc_Spe_Ant_Mel }

      if( Cucina_Versione > 2)                                    { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }
      if( Var_Anta_Opzione_Dsc == "VETRINA")                      { Z = SE_NUM( Cucina_ModelloDsc == "36e8", 17+4, 17+6) }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)  { Z = 22 }

      if( Z <= 0) { Z = $Cuc_Spe_Ant }

     #ifndef TEC
      if( ACTION() == 0 ) { HIDE_ON_EDIT( ATTUALE(), "Man_*", 1) }
     #endif

      if( ACTION()==0 ) { X_cmp=X Y_cmp=Y Z_cmp=Z }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Vano frontali
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z
      vano_hide_0    = Hide_Vano

      //Vano accessori
      vano_0_1       = base_0
      vano_l_1       = X
      vano_p_1       = Z

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

   //Procedura OnSetupLivelli
   //{
   //   GOSUB CucP_OnSetupLivelli
   //}

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      ////mantenere Ctrl_var_gest come prima riga di Controlli.
      //GOSUB Ctrl_var_gest
      //GOSUB Ctrl_Generici
      //GOSUB LoadSetFro
      GOSUB AttrezzaGraficaFrontale
      //GOSUB DecodificaParametriManiglie
      //GOSUB CucP_Cnt_CamInciso
      //GOSUB CucP_Cnt_MdF

      //LZ 11/02/2022
      if( Apertura=="RB"
        | Apertura=="VS" ) { Verso = 0 }

      GOSUB Cuc_AntaSingola_Alleggerita

      GOSUB CucP_Controlli
      VT_VES_STRINGA = ""
      if( AntaSuperiore > 0)       { VT_VES_STRINGA = "SUPERIORE"       }
      if( AntaSuperiore_Forno > 0) { VT_VES_STRINGA = "FORNO_SUPERIORE" }

     // Raffaele 20.10.2020
      antaSciolta = 0
      if (IS_MATCH(NOME(PADRE(idx_att, -1)), "Anta*") == 1  &  PADRE(idx_att, 1) == PADRE(idx_att, -1))  { antaSciolta = 1 }

      if( antaSciolta == 0
        & IS_MATCH(VAR_VAL_STR(idx_att, "MDFSys_Load_ini"), "OnMacro*") != 1 )
      { MdF_Visualize_sat = "OnInterat" }

      // Per visualizzare solo il cilindro
      if (antaSciolta == 1)  { MCB_Vis_CerBat = 1 }
      GOSUB MdF_sat_CerBat
     // Raffaele 09.02.2021
      GOSUB MdF_sat_PisBrac

     // Raffaele 20.10.2020
      MdF_Load_COMANDO2 = 1
     // 01.06.2022
      if (ACTION() == 2  &  CMD() == 0)  { MdFBdm_Esegui_Show_Abilita = -0.1 }
     // 11.09.2024
      if ( IS_MATCH(VAR_VAL_STR(idx_att, "Cucina_VersioneDsc"), "2_5") != 1
         // 05.05.2025
         | VAR_VAL_STR(PADRE(idx_att, -1), "Var_Anta_Opzione_Dsc") == "VETRINA"
         )
         {
          // 10.04.2019
          MdF_Load_Interat = "CerBat;CerRib"
          GOSUB MdF_ADD_Reg_Interat
         }
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 27/04/2021 figlio della colonna falegnameria
      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { GEST_IDXPADRE = GetTopLevel(ATTUALE()) }

      //if( $ATTIVA_DLL==1 )
      //{
      //   //già sopra !! GOSUB Ctrl_var_gest
      //   GOSUB CucP_SetVarGest
      //   if( RetroBase>0 ) { RADICE = STRCAT("RET",RADICE }
      //
      //   //controllo la disponibilità della fin telaio per l'anta vetro se non trovo riscontro
      //   // passo il default fin frontale
      //   // uso IS_MATCH per gestire frontali speciali ( terminali, curvi....)
      //   //e allineo controllo a quello negli altri frontali
      //   //if(STRCMP(TipoFrontale,"V")==0)
      //   //{  FIN_var = VAR_VAL_STR(-1,"Cuc_GFinTelFro")  }
      //   if( IS_MATCH(TipoFrontale,"V*") )
      //   {
      //      FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreTelFro")
      //      if( STRLEN(FIN_var)<=0 )
      //   {  FIN_var = VAR_VAL_STR(-1,"Cuc_GFinTelFro")  }
      //   }
      //   else
      //   {  FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreFro")  }
      //
      //   //Aggiungo variante fissa solo su frontali che viene utilizzata
      //   // in caso di frontali con vetro per gestirne il colore
      //   FIN_varVetro = VAR_VAL_STR(-1,"Cuc_GFinFroVet")
      //
      //   GOSUB Gest_idx_GFin
      //   GOSUB CucP_Gestionale
      //}

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perCODICE = ""
         perRADICE = "ANBA"

         if( UN_PADRE("ScoccaT_Col*") )
         {
            //36e8
            perRADICE = "ANCO3"

            if( Apertura=="RB"
              | Apertura=="VS" )                                          { perRADICE = "ANCOO3" }

            //Now
            if( TipoFrontale==2
              | TipoFrontale==3
              | TipoFrontale==4)
            {
               perRADICE = "ANCON"

               if( Apertura=="RB"
                 | Apertura=="VS" )                                       { perRADICE = "ANCOON" }
            }

            //Now vetrinetta
            if( TipoFrontale == 6 )
            {
               perRADICE = "ANCONV"
               if( AntaInCoppia==1 & Verso < 0 )                          { perRADICE = "ANTTC" }
            }

            if( Alleggerita == 1 )                                        { perRADICE = STRCAT( perRADICE, "AL") }
         }

         //Luca 23/04/2020
         if( UN_PADRE("ScoccaS_PensileCopriCaldaia") )                    { perRADICE = "ANCC" }

         //Luca 27/04/2020
         if( UN_PADRE("ScoccaT_BaseAngoloIsola") )                        { perRADICE = "ANBAAP" }

         if( UN_PADRE("ScoccaT_BaseFrigo"))                               { perCODICE = "F14014" }

         GOSUB SetCODICE_AnteForno_Cuc

         // Cucine 2.5/3.0
         if( VAR_VAL( idx_att, "Cucina_Versione") > 2)
         {
            //AANBA, CANBA
            perCODICE = ""
            perRADICE = "ANBA"

            if( UN_PADRE("ScoccaT_BaseFrigo"))                            { perRADICE = "ANTFRIG" }

            // Colonne
            if( UN_PADRE("ScoccaT_C*"))
            {
               // Standard
               perRADICE = "ANCOC3"

               // Vetrinetta
               if( TipoFrontale == 6 & AntaInCoppia == 1 & Verso < 0)     { perRADICE = STRCAT( perRADICE, "VE") }

               // Alleggerita
               if( VAR_VAL( idx_att, "Alleggerita") == 1)                 { perRADICE = STRCAT( perRADICE, "AL") }

               if( idx_pdr_gest != idx_att
                 & UN_PADRE("ScoccaT_ColFalegnameria") != 1
                 & VAR_VAL_STR( idx_pdr_gest, GetVarGest(FIN_var)) == "") { perRADICE = "" }
            }

            perRADICE = SE_STR( perRADICE == "", "", STRCAT( Cucina_ModelloPre, perRADICE))

            GOSUB Cucina_2_5_Colonna_Ante_SetCodice
         }

         if( UN_PADRE("Cucina_2_5_Pensile*"))
         {
            perCODICE = ""
            perRADICE = ""

            if( Cucina_ModelloDsc == "Cut")
            {
               perRADICE = SE_STR( Var_Anta_Opzione_Dsc == "VETRINA", "ACVB", "ANPCCB")
               if( Var_Anta_Apertura_Dsc == "RIBALTA")                    { perRADICE = SE_STR( Var_Anta_Opzione_Dsc == "VETRINA", "ACVR", "ERRORE")    }
               if( Var_Anta_Apertura_Dsc == "VASISTAS")                   { perRADICE = SE_STR( Var_Anta_Opzione_Dsc == "VETRINA", "ACVV", "ANPCCVA")   }
               if( Var_Anta_Apertura_Dsc == "BASCULANTE")                 { perRADICE = SE_STR( Var_Anta_Opzione_Dsc == "VETRINA", "ERRORE", "ANPCCBA") }

               if( Var_Scocca_Tipo_Dsc == "ANGOLO")                       { perRADICE = "ANPCCAG" }
            }
         }

         if( UN_PADRE("ScoccaS_PensileAngolo"))
         {
            perRADICE = "ANPA"
            if( VAR_Melaminico == 1 )                                     { perRADICE = "ANPAMA"  }
         }

         // Modelli speciali
         if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_FLAPP")
         {
            if( perRADICE == "ANCO3")                                     { perCODICE = "Y00648"  }
         }

         if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_CUT")                  { perCODICE = "" perRADICE = "" }

         if( perCODICE != "") { perRADICE = "" }

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

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

      GOSUB Set_Gest_C090_AntaSing
      GOSUB Set_Gest_C008_AntaSing
      GOSUB Set_Gest_C004_AntaSing368
      GOSUB Set_Gest_C115_AntaSing

      //LZ 11/02/2022: blocco scelta del vasistas su ante battenti, sono stati creati codici dedicati
      if( Apertura == "BA"
        & VAR_EXIST( ATTUALE(), "GEST_C007")
        & VAR_VAL_STR( ATTUALE(), "GEST_C007") != "VA001" ) { ORD_FILTRO_C007 = "!VA001" }
      else
      {
         if( VAR_EXIST( ATTUALE(), "ORD_FILTRO_C007") )     { DEL_VAR( ATTUALE(), "ORD_FILTRO_C007") }
      }

      GOSUB Set_Finitura_Frontale_Stripes

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         GOSUB Set_Gest_C017
         GOSUB Set_Gest_C007_AntaSing
         GOSUB Set_Gest_C008_AntaSing
         GOSUB Set_Gest_C004_AntaSing368
         GOSUB Set_Gest_C004_AntaSingNow
         GOSUB Set_Gest_C090_AntaSing
         GOSUB Set_Gest_C031_AntaSing
         GOSUB Set_Gest_C115_AntaSing
      }

      GOSUB Set_Gest_C011

      if( TABER_REGOLA == "POST")
      {
         GOSUB Set_MaterialeFrontale_Ante
         GOSUB Set_Gest_C007_Ante
         GOSUB Set_Finitura_Frontale_Stripes
      }
   }

   //Procedura PostControl
   //{
   //   GOSUB CucP_PostControl
   //}

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,2)
      //aperture disponibili
      //azione_verso = Verso
      if( Verso==-1 )        { azione_verso = "SX"            }
      else                   { azione_verso = "DX"            }
      //Battente           BA
      if( Apertura=="BA" )   { GOSUB azione_apertura_battente }
      //"Pacchetto"       "LB" -Libro verticale
      //anta inferiore -> azione_posizione!=1
      if( Apertura=="LB" )   { GOSUB azione_apertura_libro    }

      if( Apertura=="RB" )   { GOSUB azione_apertura_ribalta  }

      if( Apertura=="VS" )
      {
         GOSUB azione_apertura_vasistas
         if( Var_Anta_Apertura_Dsc == "BASCULANTE" ) { GOSUB azione_apertura_verticale }
      }

      ////Soffietto aperture soffietto
      ////anta DX -> Pos_Fro = 1, SX -->Pos_Fro =2
      //if( STRCMP(Apertura,"SO")==0 )   {  GOSUB azione_AngoloLibro         }
      ////Soffietto aperture battenti
      //if( STRCMP(Apertura,"SB")==0 )   {  GOSUB azione_angoloL             }
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if( $StartingDel__==ATTUALE() )
         {
            $no_cancel=1
            //Luca 09/01/2019 per ora cancello il padre
            COMANDO(STRCAT("CANCELLA ",STR(PADRE($StartingDel__,1)), " //cancello anta"))
         }
         else { $no_cancel=0 }
      }
      //GOSUB CucP_Cancella
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }

   Posiziona _cont_per_near_2 near_cx
   {
      idx_near_centro = ATTUALE()

      @X = 0.75 * X
      @Y = 0.75 * Y
      @Z = 2 * Z

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

   //Posiziona Cuc_Maniglia ma1
   //{
   //   GOSUB posa_maniglia
   //   GOSUB CucP_PassaColMan
   //   aliasposiz = "ma1"
   //   GOSUB CucP_Posiziona
   //}
   //
   //Posiziona Cuc_Maniglia ma2
   //{
   //   @escluso = 1
   //   if( sdoppia_man )
   //   {
   //      @escluso = 0
   //      GOSUB posa_maniglia
   //      GOSUB CucP_PassaColMan
   //      aliasposiz = "ma2"
   //      GOSUB CucP_Posiziona
   //   }
   //}

   //Posiziona SCRITTA_CAD scr
   //{
   //   GOSUB PosaScrittaCAD_Fro
   //}

   //debug
   //debug Posiziona Blocco fro
   //debug {
   //debug    GOSUB Posa_Elemento
   //debug }
}

Elemento Cuc_AntaEstraibile
{
   Descrizione = "Anta estrabile"
   Code        = ANTBAT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Vestibile   Scocca*
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
       #include %path_bdm%\var_db.inc

       ForzaMisX           "Abilita modifiche in larghezza"                        0
       ForzaMisY           "Abilita modifiche in Altezza"                          0

       X                   "Larghezza"                                             600
       Y                   "Altezza"                                               600
       Z                   "Spessore"                                              21

       //Luca 01/02/2019 tipofrontele numerico
       //TipoFrontale "Tipologia Frontale" "A"
       TipoFrontale        "Tipologia Frontale"                                    0    Implicit

       //LZ 02/08/2021: cucine laccate
       MaterialeFrontale   "Materiale Frontale"                                    ""
       VAR_Melaminico      ""                                                      0    SaveAlways

       FroGrafica          "Grafica friontale"                                     ""
       Pos                 ""                                                      1
       PosHFro             "Altezza posiz. Frontale per posizionamento maniglia"   0
       escludi_man         "esclusione posizionamento maniglia"                    0
       sdoppia_man         "doppia maniglia"                                       0
       modello             ""                                                      ""
       modello_prec        ""                                                      "NN"
       Posizione           ""                                                      0
       RetroBase           ""                                                      0
       Verso               "Verso apertura ante"                                   -1
       Apertura            "tipo Anta"                                             "ES"
       AntaInCoppia        ""                                                      0
       Hide_Vano           ""                                                      1
       ConGola             "Presenza gola 0=no 1=sopra 2=sotto"                    0

       Pos_Fro             "Progressivo anta"                                      1

       AperturaMn          "Apertura Ante"                                         0
       //Menu ( Cuc_AperAnt )

       //maniglia FLAPP
       ConManigliaFLAPP    ""                                                      0
       Man_Orie            ""                                                      "O"
       Man_PosX            ""                                                      "L"
       Man_PosY            ""                                                      "C"
       Man_OffX            ""                                                      0
       Man_OffY            ""                                                      0

       perRADICE           ""                                                      ""
       RADICE              ""                                                      ""

       perCODICE           ""                                                      ""
       GEST_CODICE         ""                                                      ""

       COD_EREDITA         ""                                                      "PRE;POST;C011_PRE"

       XGLASS              "Num. XGLASS"                                           ""   Utente   (   )

       //M4
       CMP2_AZIONI         ""                                                      "V+"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      Z = 0
      if( Cucina_Versione > 2)                   { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico")) { Z = 19 }
      if( Z <= 0)                                { Z = SE_NUM( UN_PADRE("ScoccaT_Col*"), $Cuc_Spe_Ant_Col, $Cuc_Spe_Ant) }
   }

   PuntiNotevoli
   {
      GOSUB punti
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z
      vano_hide_0    = Hide_Vano

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB AttrezzaGraficaFrontale

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "ANCOE"
      perCODICE = ""

      if( Cucina_Versione > 2)
      {
         // AANES, CANES
         perRADICE = STRCAT( Cucina_ModelloPre, "ANES")
         // AANCOE, CANCOE
         if( UN_PADRE("ScoccaT_C*")) { perRADICE = STRCAT( Cucina_ModelloPre, "ANCOE") }
      }

      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_FLAPP") { perCODICE = "Y00651" }

      if( perCODICE != "") { perRADICE = "" }

      if( perRADICE != RADICE
        | perCODICE != GEST_CODICE )
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C017
         GOSUB Set_Gest_C007_AntaSing
         GOSUB Set_Gest_C004_AntaSingNow
         GOSUB Set_Gest_C031_AntaSing
      }

      GOSUB Set_Gest_C011

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

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,1)
      col_prof = VAR_VAL(azione_idx_pdr,"Z")
      azione_val_max = (3*col_prof)/4

      GOSUB azione_apertura_cassetto
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }
}

Elemento Cuc_AntaSoffietto
{
   Descrizione = "Anta estrabile"
   Code        = ANTBAT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Vestibile   Scocca*
   Alias       Frontale

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 20/04/2022
      VT_REV_FBRU "Revisione ferramenta brunita"   "0" ShowAlways

      ForzaMisX   "Abilita modifiche in larghezza"  0
      ForzaMisY   "Abilita modifiche in Altezza"    0

      X            "Larghezza"                     600
      Y            "Altezza"                       600
      Z            "Spessore"                       21

      //Luca 01/02/2019 tipofrontele numerico
      //TipoFrontale "Tipologia Frontale"            "A"
      TipoFrontale "Tipologia Frontale"              0

      FroGrafica     "Grafica friontale"                 ""
      Pos            ""                                    1
      PosHFro        "Altezza posiz. Frontale per posizionamento maniglia"  0
      escludi_man    "esclusione posizionamento maniglia"  0
      sdoppia_man    "doppia maniglia"                     0
      modello        ""                                  ""
      modello_prec   ""                                  "NN"
      Posizione      ""                                    0
      RetroBase      ""                                    0
      Verso          "Verso apertura ante"                -1
      Apertura       "tipo Anta"                         "ES"
      AntaInCoppia   ""                                    0
      Hide_Vano      ""                                    1
      ConGola        "Presenza gola 0=no 1=sopra 2=sotto"  0

      Pos_Fro      "Progressivo anta"                1

      AperturaMn   "Apertura Ante"                         0
      //Menu ( Cuc_AperAnt )

      ////maniglia FLAPP
      //ConManigliaFLAPP ""  0
      //Man_Orie         "" "O"
      //Man_PosX         "" "L"
      //Man_PosY         "" "C"
      //Man_OffX         ""  0
      //Man_OffY         ""  0

      perRADICE "" ""
      RADICE "" ""

      COD_EREDITA      ""      "PRE;POST;C011_PRE"

      //M4
      CMP2_AZIONI  ""    "V+"
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z = $Cuc_Spe_Ant_Col
      TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z
      vano_hide_0    = Hide_Vano

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
   }

   Controlli
   {
      GOSUB CtrlComune

      //GOSUB Ctrl_PosaManigliaFLAPP

      GOSUB AttrezzaGraficaFrontale

      perRADICE = "ANSO3"

      if( TipoFrontale==3 ) { perRADICE = "ANSON" }

      RADICE = perRADICE

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //GOSUB Set_Gest_C017
         GOSUB Set_Gest_C007_AntaSing

         GOSUB Set_Gest_C004_AntaSingNow
      }

      GOSUB Set_Gest_C011

      if( TABER_REGOLA=="POST" )
      {
         //Luca 23/07/2019  mantis 20074
         //'bloccare solo l'apertura dell'anta lavastoviglie, non delle alte,'
         //GOSUB Set_Gest_C004_AnteColLvst

         GOSUB Set_Gest_C007_Ante
      }
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,2)
      //aperture disponibili
      //azione_verso = Verso
      if( Verso==-1 )   { azione_verso = "SX"   }
      else              { azione_verso = "DX"   }
      GOSUB azione_apertura_battente
   }

   //Posiziona ManigliaFLAPP ma1
   //{
   //   GOSUB posa_ManigliaFLAPP
   //}
}

Elemento Cuc_Cassetto
{
   Descrizione = "Cassetto Std"
   Code        = CAS
   Gruppo      = "Cassetti"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro   Auto Cuc_Altim_Fro
  // CamMdFrontali serve per gli offset VariabiliDaTipoPadri e TST_MdF_Apertura CC
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Sost             "--> Frontale Fisso <-- "              0     Boolean

      ForzaMisX            "Abilita modifiche in larghezza"       0
      ForzaMisY            "Abilita modifiche in Altezza"         0

      X                    "Larghezza"                            600   Menu     (   Cuc_XAnta   )   Utente   (   )
      Y                    "Altezza"                              177   Menu     (   Cuc_YAnta   )   Utente   (   )
      Z                    "Spessore Frontale"                    21
      Zn                   "Profondità nominale"                  520   Menu     (   ZnCesCas    )
      Zt                   "(Profondità complessiva)"             520

      num_liv_cace         "variabile per CAM"                    0
      tot_liv_cace         "variabile per CAM"                    0

      TipoFrontale         "Tipologia Frontale"                   0     Implicit
      Pos_Fro              "Progressivo frontale"                 1
      Apertura             "Verso apertura Anta"                  "ES"

      VAR_Lavello          ""                                     0     Implicit
      UsoLavello           "Sagomato per lavello"                 0     Menu     (   SiNo        )

      VAR_CappaIntegrata   ""                                     0     Implicit

      Anta_Spe             ""                                     22    Implicit
      Anta_Aria_Z          ""                                     3     Implicit

      //*variabili di gestione struttura interna cassetto
      NoStrInt             "senza struttura interna"              0
      TipoStrutturaCC      "Tipolo struttura interna"             "A"

      //* Delta posizione struttura rispetto al frontale vengono settati dalla tabella
      Px                   "delta posizione in x struttura"       25
      Py                   "delta posizione in y struttura"       25
      Pz                   "delta posizione in z struttura"       10
      MY                   "Delta misura in Y sopra"              10
      MZ                   "Delta misura in Z"                    10
      HSponde              "altezza spondine struttura"           90.5
      //*

      FroGrafica           "Grafica friontale"                    ""
      PosHFro              "Altezza posizionamento Frontale"      0
      escludi_man          "esclusione posizionamento maniglia"   0
      sdoppia_man          "doppia maniglia"                      0
      modello              ""                                     ""
      modello_prec         ""                                     "NN"
      Verso                "Verso apertura ante"                  0

      //maniglia FLAPP
      ConManigliaFLAPP     ""                                     0
      Man_Orie             ""                                     "O"
      Man_PosX             ""                                     "L"
      Man_PosY             ""                                     "C"
      Man_OffX             ""                                     0
      Man_OffY             ""                                     0

      Hide_Vano            ""                                     1
      //dedicate al tab eredita se necessario
      PosManOpzY           "Posizione manOpzionale in Y"          ""
      OrieMan              ""                                     ""

      FLAG_Speciale        "Flag Speciale"                        0     Boolean

      RADICE               ""                                     ""
      perRADICE            ""                                     ""

      COD_EREDITA          ""                                     "PRE;POST;C011_PRE"

      XGLASS               "Num. XGLASS"                          ""    Utente   (   )

      FillerM2G            " "                                    ""    ShowAlways

      idx_cnear            ""                                     -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB CucP_Assegnazioni

      // Variabili
      M4_VAR_NoGest = "X*;Y*;Z*;TipoFrontale"
      HIDE_ON_EDIT2(ATTUALE(),"UsoLavello",0)
      if( X < 549)
      {
         HIDE_ON_EDIT2(ATTUALE(),"UsoLavello",1)
         if( IS_VAR_FIXED(ATTUALE(),"UsoLavello") == 1) { DEL_VAR_MODIFICATE(ATTUALE(),"UsoLavello") }
      }

      HIDE_ON_EDIT2( ATTUALE(), "FLAG_Speciale", 1)

      // Profondità
      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*"))                               { Z = $Cuc_Spe_Ant_Col }
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico"))                  { Z = $Cuc_Spe_Ant_Mel }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)  { Z = 22 }
      if( Cucina_Versione > 2)                                    { Z = Anta_Spe         VAR_SET_MENU( ATTUALE(), "Zn", STRCAT( "ZnCesCas_", Cucina_VersioneDsc)) }
      SpessoreFrontale = Z

      /// Massima
      z_max = VAR_VAL( idx_pdr, "Zt")
      if( VAR_CappaIntegrata > 0) { z_max = 520 }

      if( Zn > z_max
        & FLAG_Speciale == 0)
      {
         DEL_VAR_MODIFICATE( ATTUALE(), "Zn")
         Zn = z_max
      }

      Struttura_Archetipo = "Cuc_StrIntCassCest"
      if( $PLIKO_DisabilitaGrafica > 0) { Struttura_Archetipo = "Blocco" }
   }

   PuntiNotevoli
   {
      Zt = Z + MZ
      GOSUB punti_Zt

      //vano per frontali
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Zt
      vano_hide_0    = Hide_Vano

      //vano per accessori
      vano_0_1       = base_0
      vano_0_1.z     = base_0.z - MZ
      vano_l_1       = X
      vano_p_1       = Zt

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli

      STP_Bollina_Pnt = [X - 100 , 30 , Z + 10 ]
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Livelli_Ord_CassCest
      GOSUB Cuc_VestiFrontale
      GOSUB SetStrIntCC
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP
      GOSUB AttrezzaGraficaFrontale

      //Luca 27/03/2020 mantis 0022332
      if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE("wk_panind",idx_cnear,1,1,"Cuc_PannelloDivisorio")
         if( wk_panind>0 )
         {
            HI(ATTUALE(),1)
            wk_msg = STRCAT(MSG(1090),"\n",MSG(1107))
            DISPLAY2(wk_msg)
            HI(ATTUALE(),0)
            VAR_Sost = 1
            VAR_Sost_no_confirm = 1
         }
      }

      GOSUB SostituisciCassettoCestone

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Z = Zt

      GEST_CODICE = ""
      perRADICE = "CABA"
      if( UsoLavello==1 )                             { perRADICE = "CABALAV" }

      //LZ 14/12/2021: non esistono cassetti con frontale per colonne, utilizzo codice del cestone
      if( UN_PADRE("ScoccaT_Col*") )
      {
         perRADICE = "CECO"
         if( VAR_VAL(ATTUALE(),"TipoFrontale") > 1)   { perRADICE = "CECON"   }
      }

      if( UN_PADRE("ScoccaT_BaseAngoloIsola") )       { perRADICE = "CABAAP"  }

      if( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2)
      {
         //ACABA, CCABA, ACEBALAV, CCEBALAV
         perRADICE = "CABA"
         if( Y >= 365 )                               { perRADICE = "CEBA"    }
         if( UsoLavello == 1)                         { perRADICE = "CEBALAV" }

         perRADICE = STRCAT( Cucina_ModelloPre, perRADICE)
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura azione
   {
      azione_val_max = 3*(Zt - Z)/4
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Posiziona %Struttura_Archetipo% cec
   {
      @escluso = NoStrInt

      @X = X - 2*Px
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz

      @HSponde = HSponde
      @Lavello = SE_NUM( UsoLavello == 1, 1, 0)
      @TipoStrutturaCC = TipoStrutturaCC
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }

   Posiziona _cont_per_near cnr
   {
      idx_cnear = ATTUALE()

      @X = X - 40
      @Y = Y - 40
      @Z = Zt

      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - MZ
   }
}

Elemento Cuc_Cestone
{
   Descrizione = "Cestone Std"
   Code        = CES
   Gruppo      = "Cestoni"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro   Auto
  // CamMdFrontali serve per gli offset VariabiliDaTipoPadri e TST_MdF_Apertura CC
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Sost                "--> Frontale Fisso <-- "                 0     Boolean

      ForzaMisX               "Abilita modifiche in larghezza"          0
      //Menu ( bool )
      ForzaMisY               "Abilita modifiche in Altezza"            0
      // Menu ( bool )

      X                       "Larghezza"                               600   Menu     (   Cuc_XAnta   )   Utente   (   )
      Xn                      "larghezza nominale"                      600

      Y                       "Altezza"                                 360   Menu     (   Cuc_YAnta   )   Utente   (   )
      Yn                      "Altezza nominale"                        360

      Z                       "Spessore"                                21
      Zn                      "Profondità nominale"                     518   Menu     (   ZnCesCas    )
      Zt                      "(Profondità complessiva)"                518

      num_liv_cace            "variabile per CAM"                       0
      tot_liv_cace            "variabile per CAM"                       0

      //TipoFrontale "Tipologia Frontale" "A"
      TipoFrontale            "Tipologia Frontale"                      0     Implicit

      //TabStringa ( "cuc\tab\mnu\TipoFrontale.mnu" )
      Pos_Fro                 "Progressivo frontale"                    1
      Apertura                "Verso apertura Anta"                     "ES"

      VAR_Lavello             ""                                        0     Implicit
      UsoLavello              "Sagomato per lavello"                    0     Menu     (   SiNo        )

      VAR_CappaIntegrata      ""                                        0     Implicit

      Anta_Spe                ""                                        22    Implicit
      Anta_Aria_Z             ""                                        3     Implicit

      //*variabili di gestione struttura interna cassetto
      NoStrInt                "senza struttura interna"                 0
      TipoStrutturaCC         "Tipolo struttura interna"                "A"

      //TipoStrutturaCC - attivare da CucPers solamente in presenza di + tipologie di strutture interne
      // TipoStrutturaCC "Tipolo struttura interna" "A" TabStringa ( "cuc\tab\mnu\TipoStrCC.mnu" )

      //* Delta posizione struttura rispetto al frontale vengono settati dalla tabella
      Px                      "delta posizione in x struttura"          25
      Py                      "delta posizione in y struttura"          10
      Pz                      "delta posizione in z struttura"          10
      MY                      "Delta misura in Y sopra"                 10
      MZ                      "Delta misura in Z"                       10
      HSponde                 "Altezza spondine struttura"              177
      //*

      FroGrafica              "Grafica frontale"                        ""
      PosHFro                 "Altezza posizionamento Frontale x Man"   0
      escludi_man             "esclusione posizionamento maniglia"      0
      sdoppia_man             "doppia maniglia"                         0
      modello                 ""                                        ""
      modello_prec            ""                                        "NN"
      Verso                   "Verso apertura ante"                     0

      //Maniglia FLAPP
      ConManigliaFLAPP        ""                                        0
      Man_Orie                ""                                        "O"
      Man_PosX                ""                                        "L"
      Man_PosY                ""                                        "C"
      Man_OffX                ""                                        0
      Man_OffY                ""                                        0

      Hide_Vano               ""                                        1
      PosManOpzY              "Posizione manOpzionale in Y"             ""
      OrieMan                 ""                                        ""

      //GT_RICALCOLO_PA2 "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave
      //GT_RICALCOLO_CHVARS "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave

      ConCassettoInterno      ""                                        0

      FIN_var                 ""                                        "C001"
      FIN_orie                ""                                        "O"

      FIN_val                 ""                                        ""
      FIN_ns                  ""                                        ""

      idx_struttura_interna   ""                                        -1

      idx_cnear_str           ""                                        -1

      XGLASS                  "Num. XGLASS"                             ""    Utente   (   )

      RADICE                  ""                                        ""
      perRADICE               ""                                        ""
      GEST_CODICE             ""                                        ""
      perCODICE               ""                                        ""

      COD_EREDITA             ""                                        "PRE;POST;C011_PRE"

      FillerM2G               " "                                       ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      if ( Px < $Cuc_Spe_Fia ) { Px = $Cuc_Spe_Fia }
      GOSUB CucP_Assegnazioni

      // Variabili
      M4_VAR_NoGest  = "X*;Y*;Z*;TipoFrontale"
      HIDE_ON_EDIT2(ATTUALE(),"UsoLavello",0)
      if( X < 549)
      {
         HIDE_ON_EDIT2(ATTUALE(),"UsoLavello",1)
         if( IS_VAR_FIXED(ATTUALE(),"UsoLavello") == 1) { DEL_VAR_MODIFICATE(ATTUALE(),"UsoLavello") }
      }

      HIDE_ON_EDIT2( ATTUALE(), "FLAG_Speciale", 1)

      // Profondità
      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*"))                               { Z = $Cuc_Spe_Ant_Col }
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico"))                  { Z = $Cuc_Spe_Ant_Mel }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)  { Z = 22 }
      if( Cucina_Versione > 2)                                    { Z = Anta_Spe         VAR_SET_MENU( ATTUALE(), "Zn", STRCAT( "ZnCesCas_", Cucina_VersioneDsc)) }
      SpessoreFrontale = Z

      /// Massima
      z_max = VAR_VAL( idx_pdr, "Zt")

      if( Zn > z_max
        & VAR_VAL( ATTUALE(), "FLAG_Speciale") == 0)
      {
         DEL_VAR_MODIFICATE( ATTUALE(), "Zn")
         Zn = z_max
      }

      Struttura_Archetipo = "Cuc_StrIntCassCest"
      if( $PLIKO_DisabilitaGrafica > 0) { Struttura_Archetipo = "Blocco" }
   }

   PuntiNotevoli
   {
      Xn = X + 2*$Cuc_Aria_Ant_X
      Yn = Y + 2*$Cuc_Aria_Ant_Y

      Zt = Z + MZ
      GOSUB punti_Zt

      //vano per frontali
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Zt
      vano_hide_0    = Hide_Vano

      //vano per accessori
      vano_0_1       = base_0
      vano_0_1.z     = base_0.z - MZ
      vano_l_1       = X
      vano_p_1       = Zt

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli

      STP_Bollina_Pnt = [X - 100 , 30 , Z + 10 ]
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
     // Raffaele 23.05.2019 riabilitata
      GOSUB Livelli_Ord_CassCest
      GOSUB Cuc_VestiFrontale
      GOSUB Ctrl_CheckCassettoInterno
      GOSUB SetStrIntCC
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP
      GOSUB AttrezzaGraficaFrontale

      GOSUB SostituisciCassettoCestone

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      // Dimensioni
      GEST_Z = Zt
      if( STR_INDEX_OF( VAR_VAL_STR( ATTUALE(), "GEST_C008"), 0, "PF006") >= 0) { GEST_Z = Z       } //Sostituzione del solo frontale

      // Codice
      perCODICE = ""
      perRADICE = "CEBA"
      if( UsoLavello == 1)                            { perRADICE = "CEBALAV" }

      if( UN_PADRE("ScoccaT_Col*"))
      {
        perRADICE = "CECO"
        if( VAR_VAL(ATTUALE(),"TipoFrontale") > 1)    { perRADICE = "CECON"   }
      }

      if( UN_PADRE("ScoccaT_BaseAngoloIsola"))        { perRADICE = "CEBAAP"  }

      if( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2)
      {
         //ACEBA, CCEBA, ACEBALAV, CCEBALAV
         perRADICE = "CEBA"
         if( UsoLavello==1 ) { perRADICE = "CEBALAV" }

         perRADICE = STRCAT( Cucina_ModelloPre, perRADICE)
      }

      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_CUT")
      {
         perCODICE = "Y00638"
         if( UsoLavello == 1)                         { perCODICE = "Y00647"  }
      }

      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_FLAPP")
      {
         perCODICE = "Y00643"
         if( UsoLavello == 1)                         { perCODICE = "Y00644"  }
         if( UN_PADRE("ScoccaT_Col*"))                { perCODICE = "Y00653"  }
      }

      if( perCODICE != "") { perRADICE = "" }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C039
      GOSUB Set_Finitura_Frontale_Stripes
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita

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

   Procedura azione
   {
      azione_val_max = Zt - Z
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Posiziona %Struttura_Archetipo% cec
   {
      @escluso = NoStrInt

      @X = X - 2*Px
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz

      @HSponde = HSponde
      @Lavello = SE_NUM( UsoLavello == 1, 1, 0)
      @TipoStrutturaCC = TipoStrutturaCC

      idx_struttura_interna = ATTUALE()
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }

   Posiziona _cont_per_near nstr
   {
      idx_cnear_str = ATTUALE()

      @X = X - 20
      @Y = Y - 20
      @Z = Zt

      @base_0.x = base_0.x + 10
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z + Z - Zt
   }

   Posiziona _cont_per_near ing
   {
      idx_ingombro = ATTUALE()

      GOSUB posa_blocco

      @Y = Yn
      @Z = Zt

      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z + Z - @Z
   }
}

Elemento Cuc_StrIntCassCest
{
   Descrizione = "Struttura Interna Cassetto Cestone"
   Code        = FCC
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Alias  CamIncidente;StrIntCassCest

   Variabili
   {
      #include            %path_bdm%\var_db.inc

      X                   "Larghezza"                                                   600 ShowAlways
      Y                   "Altezza"                                                     85  ShowAlways
      Z                   "Profondita'"                                                 450 ShowAlways

      TipoStrutturaCC     "Tipo Struttura interna"                                      "A"
      Lavello             "Gestione grafica ad uso lavello"                             0
      SpSponda            "Spessore sponde"                                             10
      MRinghierina        "misura ringhierine"                                          8
      HSponde             "delta altezza sponde su totale"                              30
      dHSchiena           "delta altezza schiena su totale"                             0

      Tipo_Cas            ""                                                            ""

      perRADICE           ""                                                            ""
      RADICE              ""                                                            ""

      HIDE                ""                                                            1

      //VIRTUO
      VR_ANIM_POS         ""                                                            1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      if( Cucina_Versione > 2)
      {
         perRADICE = "GIRCUC"
         if( Lavello)                { perRADICE = "GIRCUCLAV"  }
         if( UN_PADRE("ScoccaT_C*")) { perRADICE = "GIROCUCCOL" }
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Cuc_StrIntCC cec
   {
      @escluso = Lavello
      GOSUB Posa_Elemento
      @EscFrl = 1
   }

   Posiziona Cuc_StrIntCCLav ceclav
   {
      @escluso = 1-Lavello
      GOSUB Posa_Elemento
      @EscFrl = 1
   }
}

Elemento Cuc_StrIntCC
{
   Descrizione = "Struttura interna Cassetto/Cestello"
   Code        = CCIN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X                 "Larghezza"                600 Utente ( )
      Y                 "Altezza"                  100 Utente ( )
      Z                 "Profondita'"              490 Utente ( )

      DYFronte          "Altezza Schienale"          0
      DYSchiena         "Altezza Schienale"         10
      SpSponda          "Spessore sponde"           16
      DYSponda          "Altezza Schienale"         10
      MRinghierina      "misura ringhierina"         8
      EscFrl            "escludi frontalino"         0

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      DYSponda = 10
      if ( Y >=$Cuc_Alt_ring_Cest )    { DYSponda = 80 }
      if( UN_PADRE("*Mat")
        | UN_PADRE("*Class") )         { DYSponda = 0  DYSchiena = 0 }

      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C002;C034")

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      //GOSUB Ctrl_Generici
      ////  non fare i controlli gestionali su attuale e nei figli
      //GOSUB Stato_78

      GOSUB CucP_Controlli
   }

   //Gestionale
   //{
   //   GOSUB CucP_SetVarGest
   //   FLAG_RADICE = $MAKE_ROW + $NORID_X + $NORID_Y + $NORID_Z
   //   FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreScoCC")
   //   FIN_Else = VAR_VAL_STR(-1,"")
   //   GOSUB Gest_idx_GFin
   //   GOSUB Gest_ColoraCompo
   //   GOSUB CucP_Gestionale
   //   GOSUB GestComune_Post
   //}

   Posiziona Blocco fnd
   {
      @base_0.x = base_0.x + SpSponda
      @base_0.y = base_0.y
      @base_0.z = base_0.z + SpSponda
      @X = X - 2*SpSponda
      @Y = SpSponda
      @Z = Z - SpSponda
      if( EscFrl == 0 ) { @Z = @Z - SpSponda }

      GOSUB rivestimento

      //aliasposiz = "fnScC"
      //@c_rivestimento = $c_All
      //GOSUB PassaFinitura
      //GOSUB CucP_Posiziona
   }

   Posiziona Blocco spsx
   {
      @base_0 = base_0
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z

      GOSUB rivestimento
   }

   Posiziona Blocco spdx
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X -SpSponda
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z

      GOSUB rivestimento
   }

   Posiziona Blocco sch
   {
      @base_0 = base_0
      @base_0.x = base_0.x + SpSponda
      @X = X - 2*SpSponda
      @Y = Y - DYSchiena
      @Z = SpSponda

      GOSUB rivestimento
   }

   Posiziona Blocco fro
   {
      @escluso = EscFrl
      @base_0.x = base_0.x + SpSponda
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - SpSponda
      @X = X - 2*SpSponda
      @Y = Y - DYFronte
      @Z = SpSponda

      GOSUB rivestimento
   }

   //Ringhierina sx per cestello
   Posiziona Blocco risx
   {
      @escluso = 1 if ( Y >=$Cuc_Alt_ring_Cest ) { @escluso = 0 }
      @base_0.x = base_0.x + SpSponda
      @base_0.y = base_0.y + Y - DYSchiena - MRinghierina
      @base_0.z = base_0.z + SpSponda
      @X = MRinghierina
      @Y = MRinghierina
      @Z = Z-SpSponda

      GOSUB rivestimento
   }

   //Ringhierina dx per cestello
   Posiziona Blocco ridx
   {
      @escluso = 1 if ( Y >=$Cuc_Alt_ring_Cest ) { @escluso = 0 }
      @base_0.x = base_0.x + X - SpSponda - MRinghierina
      @base_0.y = base_0.y + Y - DYSchiena - MRinghierina
      @base_0.z = base_0.z + SpSponda
      @X = MRinghierina
      @Y = MRinghierina
      @Z = Z-SpSponda

      GOSUB rivestimento
   }
}

Elemento Cuc_StrIntCCLav
{
   Descrizione = "Struttura interna Cestello Lavello"
   Code        = CCIN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X                 "Larghezza"                600 Utente ( )
      Y                 "Altezza"                  100 Utente ( )
      Z                 "Profondita'"              490 Utente ( )

      DYFronte          "Altezza Schienale"          0
      DYSchiena         "Altezza Schienale"         10
      SpSponda          "Spessore sponde"           10
      SpSch             "Spessore schiena"          16

      DYSponda          "Altezza Schienale"          0
      DYSpondaInt       "Altezza Sponde int"         0
      MRinghierina      "misura ringhierina"         8
      EscFrl            "escludi frontalino"         0

      RieXSca           "rientro scasso in X"      144
      XSca              "larg scasso"              660
      ZSca              "prof scasso"              265
   }

   Assegnazioni
   {
      GOSUB AssComune

      DYSpondaInt = 0
      DYSchiena   = 0
      DYSponda    = 10
      if ( Y >= $Cuc_Alt_ring_Cest) { DYSponda = 80 }

      if( Y == 177)
      {
         DYSpondaInt = 87
         DYSchiena   = 87
      }

      //SPONDE M 90.5
      if( Y < 91)
      {
         DYSpondaInt = DYSponda
         DYSchiena   = DYSponda
      }

      X_Sca = X -2*SpSponda -2*RieXSca
      ZSca  = Z - 149
      if( Z == 400 ) { ZSca  = Z - 116 }
      if( Z <= 300 ) { RieXSca = 145   }

      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C002;C034")

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //   //GOSUB CucP_SetVarGest
   //   //FLAG_RADICE = $MAKE_ROW + $NORID_X + $NORID_Y + $NORID_Z
   //   //FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreScoCC")
   //   //FIN_Else = VAR_VAL_STR(-1,"")
   //   //GOSUB Gest_idx_GFin
   //   //GOSUB Gest_ColoraCompo
   //   //GOSUB CucP_Gestionale
   //   GOSUB GestComune_Post
   //}

   Posiziona Blocco spsx
   {
      @base_0 = base_0
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z
      GOSUB rivestimento
   }

   Posiziona _grafica_fnd_sag_str_lav fnd
   {
      @escluso = 0
      if( Z<=300 ) { @escluso = 1 }

      @X = X - 2*SpSponda
      @Y = SpSponda
      @Z = Z - SpSch

      @base_0.x = base_0.x + SpSponda
      @base_0.y = base_0.y
      @base_0.z = base_0.z + SpSch

      @RieX = RieXSca-2*SpSponda
      @RieZ = ZSca

      GOSUB rivestimento
   }

   Posiziona Blocco schfr
   {
      @escluso = 0
      if( Z<=300 ) { @escluso = 1 }

      @X = X - 2*RieXSca + 2*SpSponda
      @Y = Y - DYSpondaInt
      @Z = SpSch

      @base_0 = base_0
      @base_0.x = base_0.x + RieXSca - SpSponda
      @base_0.z = base_0.z + ZSca

      GOSUB rivestimento
   }

   Posiziona Blocco spdx
   {
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z

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

      GOSUB rivestimento
   }

   Posiziona Blocco schrsx
   {
      @escluso = 0
      if( Y == 177 ) { @escluso = 1 }

      @X = RieXSca - 2*SpSponda
      @Y = Y - DYSchiena
      @Z = SpSch

      @base_0 = base_0
      @base_0.x = base_0.x + SpSponda

      GOSUB rivestimento
   }

   Posiziona _grafica_sch_sag_str_lav schrlsx
   {
      @escluso = 1
      if( Y == 177 ) { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + SpSponda

      @X = RieXSca - 2*SpSponda
      @Y = Y - DYSponda
      @Z = SpSch

      @Verso = -1

      GOSUB rivestimento
   }

   Posiziona Blocco fndsx
   {
      @escluso = 1
      if( Z<=300 ) { @escluso = 0 }

      @X = RieXSca - 2*SpSponda
      @Y = SpSponda
      @Z = Z - SpSch

      @base_0.x = base_0.x + SpSponda
      @base_0.y = base_0.y
      @base_0.z = base_0.z + SpSch

      GOSUB rivestimento
   }

   Posiziona Blocco spcsx
   {
      @X = SpSponda
      @Y = Y - DYSpondaInt
      @Z = ZSca
      if( Z<=300 ) { @Z = Z }

      @base_0 = base_0
      @base_0.x = base_0.x + RieXSca - SpSponda

      GOSUB rivestimento
   }

   Posiziona Blocco schrdx
   {
      @escluso = 0
      if( Y == 177 ) { @escluso = 1 }

      @X = RieXSca - 2*SpSponda
      @Y = Y - DYSchiena
      @Z = SpSch

      @base_0 = base_0
      @base_0.x = base_0.x + X - RieXSca + SpSponda
      GOSUB rivestimento
   }

   Posiziona _grafica_sch_sag_str_lav schrldx
   {
      @escluso = 1
      if( Y == 177 ) { @escluso = 0 }

      @X = RieXSca - 2*SpSponda
      @Y = Y - DYSponda
      @Z = SpSch

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

      @Verso = 1

      GOSUB rivestimento
   }

   Posiziona Blocco fnddx
   {
      @escluso = 1
      if( Z<=300 ) { @escluso = 0 }

      @X = RieXSca - 2*SpSponda
      @Y = SpSponda
      @Z = Z - SpSch

      @base_0.x = base_0.x + X - RieXSca + SpSponda
      @base_0.y = base_0.y
      @base_0.z = base_0.z + SpSch

      GOSUB rivestimento
   }

   Posiziona Blocco spcdx
   {
      @X = SpSponda
      @Y = Y - DYSpondaInt
      @Z = ZSca
      if( Z<=300 ) { @Z = Z }

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

      GOSUB rivestimento
   }
}

Elemento _grafica_sch_sag_str_lav
{
   Descrizione = "Schiena sag cest lav"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X "" 146
      Y "" 177
      Z "" 16

      RieX      ""  98.5
      RieY      ""  77

      DYSponda  ""  10 Implicit
      DYSchiena ""  87 Implicit

      Verso     ""  -1

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      RieY = DYSchiena - DYSponda

      base_0 = [0,0,0]
      base_1 = [X,0,0]
      base_2 = [X,Y-RieY,0]
      base_3 = [X-RieX,Y-RieY,0]
      base_4 = [X-RieX,Y,0]
      base_5 = [0,Y,0]

      if( Verso > 0 )
      {
         DEL_VAR( ATTUALE(), "base_*")

         base_0 = [0,0,0]
         base_1 = [X,0,0]
         base_2 = [X,Y,0]
         base_3 = [RieX,Y,0]
         base_4 = [RieX,Y-RieY,0]
         base_5 = [0,Y-RieY,0]
      }

      alto_0  = [0, 0, Z]
      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _grafica_fnd_sag_str_lav
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

      RieX "" 10
      RieZ "" 10

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0  = [0,0,0]   alto_0 = [0, Y, 0]
      base_1  = [0,0,Z]
      base_2  = [X,0,Z]
      base_3  = [X,0,0]
      base_4  = [X-RieX,0,0]
      base_5  = [X-RieX,0,RieZ]
      base_6  = [RieX,0,RieZ]
      base_7  = [RieX,0,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_FrontaleFisso
{
   Descrizione = "Frontale per basi"
   Code        = ANT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto Cuc_Altim_Fro
   Vestibile   ScoccaT_BaseForno* ScoccaT_BaseStandard ScoccaT_BaseAngoloIsola ScoccaT_Col* Vano*Falegnameria
   //ScoccaT_AngoloPaletti ScoccaS_PensileCa* Scocca*Riempitivo* Scocca*TermCur* ScoccaT_Col* ScoccaT_BaseLavello*
   Alias       Frontale;CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      ForzaMisX   "Abilita modifiche in larghezza"  0
      //Menu ( bool )
      ForzaMisY   "Abilita modifiche in Altezza"    0
      //Menu ( bool )

      X  "Larghezza"  600
      //Menu ( Cuc_XAnta ) Utente ( )
      Y  "Altezza"    180
      //Utente ( )
      Z  "Spessore"    21

      //frontale standard con trafila
      //frontale fisso con massellino
      //frontale fisso colonna
      TipoFroFix  ""  0

      FroFixSupForno      "" 0
      FroFixSupCantinetta "" 0

      Apertura     "Verso apertura Anta"  "NN"
      //TipoFrontale "Tipologia Frontale"    "A"
      TipoFrontale "Tipologia Frontale"    0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      //TabStringa ( "cuc\tab\mnu\TipoFrontale.mnu" )
      Pos_Fro      "Progressivo frontale"   1
      //Utente ( )

      Verso "" 0

      //maniglia FLAPP
      ConManigliaFLAPP ""  0
      Man_Orie         "" "O"
      Man_PosX         "" "L"
      Man_PosY         "" "C"
      Man_OffX         ""  0
      Man_OffY         ""  0

      Spe_Vet     ""  4

      //KEKU
      KekuSX1 "" 0
      KekuSX2 "" 0
      KekuSX3 "" 0

      KekuSX1_Y "" 0
      KekuSX2_Y "" 0
      KekuSX3_Y "" 0

      KekuDX1 "" 0
      KekuDX2 "" 0
      KekuDX3 "" 0

      KekuDX1_Y "" 0
      KekuDX2_Y "" 0
      KekuDX3_Y "" 0

      KekuRieSx "" 19
      KekuRieDx "" 19

      FIN_var     ""  "C001"
      FIN_orie    ""  "V"

      COD_EREDITA "" "C011_PRE"

      perRADICE   ""  ""
      RADICE      ""  ""

      perCODICE   ""  ""
      GEST_CODICE ""  ""

      XGLASS      "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      GOSUB Stato_8

      GOSUB NO_AUTO

      if( UN_PADRE("ScoccaT_Col*") ) { TipoFroFix = 2 }

      Z = $Cuc_Spe_Ant
      if( VAR_VAL( ATTUALE(), "VAR_Melaminico"))                 { Z = $Cuc_Spe_Ant_Mel }
      if( TipoFroFix == 2 )                                      { Z = $Cuc_Spe_Ant_Col }
      if( Cucina_Versione > 2)                                   { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1) { Z = 22 }

      if( FroFixSupCantinetta > 0)
      {
         Z = 54
         Spe_Vet = 4

         if( MaterialeFrontale == "WILDWOOD" )
         {
            Z = 68
            Spe_Vet = 18
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "C011_PRE" ) { GOSUB Set_Gest_C011 }
      if( TABER_REGOLA == "POST" )     { GOSUB Set_MaterialeFrontale_Ante }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP
      GOSUB Set_MaterialeFrontale_Ante

      if( Cucina_Versione > 2)    { GOSUB AttrezzaGraficaFrontale }

      if( TipoFroFix == 2
        | ( TipoFroFix == 0 & Cucina_Versione > 2) ) { GOSUB CtrlPosizioneKEKU_FrontaleFisso }
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perRADICE = "FRFICU"
         perCODICE = ""
         if( UN_PADRE("ScoccaT_BaseForno") )
         {
            perRADICE = "FRFI"
            if( TipoFroFix==1 ) { perRADICE = "FRFINT" }
         }

         if( UN_PADRE("ScoccaT_Base_AirKitchen"))
         {
            perRADICE = "FFBAK"
         }

         if( FroFixSupCantinetta == 1 )
         {
            perRADICE = ""
            perCODICE = "F05031"
         }

         if( TipoFroFix == 2)
         {
            perRADICE = ""
            perCODICE = "F05032"

            if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_FLAPP") { perCODICE = "Y00663" }
         }

         if( Cucina_Versione > 2)
         {
            perCODICE = ""

            // AFROFIS, CFROFIS
            perRADICE = STRCAT( Cucina_ModelloPre, "FROFIS")

            if( UN_PADRE("ScoccaT_BaseForno")) { perRADICE = "FRFI3"  }
            if( FroFixSupCantinetta == 1)
            {
               perCODICE = "F05056"
               if( Cucina_Modello == "Cut")    { perCODICE = "F05057" }
            }
            if( TipoFroFix == 2 )              { perCODICE = "F05058" }
         }

         if( perCODICE != "") { perRADICE = "" }

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

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

      if( ins2_att == $ins2_vestito)
      {
         GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1)
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }

   Posiziona FroStandard fs
   {
      @escluso = 0
      if( TipoFroFix != 0
        | VAR_Melaminico == 1) { @escluso = 1 }

      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco
   }

   Posiziona FroStandardMel fsm
   {
      @escluso = 1
      if( TipoFroFix == 0
        & VAR_Melaminico == 1) { @escluso = 0 }

      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco
      @Z = $Cuc_Spe_Ant_Mel
   }

   Posiziona FroStandardCol fsc
   {
      @escluso = 1
      if( TipoFroFix == 2)     { @escluso = 0 }

      if( Cucina_Versione > 2) { @escluso = 1 }

      GOSUB posa_blocco
   }

   Posiziona Blocco mas
   {
      @escluso = 1
      if( TipoFroFix == 1) { @escluso = 0 }

      GOSUB posa_blocco
      @Z = Z - Spe_Vet

      if( FroFixSupCantinetta == 1)
      {
         @Y = Y - $Cuc_RidY_Sco + $Cuc_Aria_Ant_Y
      }

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

      @m_rivestimento = ""
      @c_rivestimento = $c_pomice

      FIN_var = "C002"
      if( VAR_EXIST( idx_att, GetVarGest(FIN_var))) { GOSUB rivestimento }
   }

   Posiziona Blocco vet
   {
      @escluso = 1
      if( TipoFroFix==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Z = Spe_Vet

      if( FroFixSupCantinetta == 1)
      {
         @X = X - 2*$Cuc_Aria_Ant_X
      }

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

      FIN_var = "C001"
      GOSUB rivestimento
   }

#ifdef TEC;AZI
   //***** GESTIONE KEKU - SOLO COLONNE******
   Posiziona Keku kksx1
   {
      @escluso = 1 - KekuSX1

      @base_0.x = base_0.x + KekuRieSx - $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuSX1_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = -1
   }
   Posiziona Keku kksx2
   {
      @escluso = 1 - KekuSX2

      @base_0.x = base_0.x + KekuRieSx - $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuSX2_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = -1
   }
   Posiziona Keku kksx3
   {
      @escluso = 1 - KekuSX3

      @base_0.x = base_0.x + KekuRieSx - $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuSX3_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = -1
   }

   Posiziona Keku kkdx1
   {
      @escluso = 1 - KekuDX1

      @base_0.x = base_0.x + X - KekuRieDx - @X + $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuDX1_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = 1
   }
   Posiziona Keku kkdx2
   {
      @escluso = 1 - KekuDX2

      @base_0.x = base_0.x + X - KekuRieDx - @X + $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuDX2_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = 1
   }

   Posiziona Keku kkdx3
   {
      @escluso = 1 - KekuDX3

      @base_0.x = base_0.x + X - KekuRieDx - @X + $Cuc_Rie_Fro_PanVtr
      @base_0.y = base_0.y + KekuDX3_Y - @Y/2
      @base_0.z = base_0.z - @Z + 3

      @Verso = 1
   }
#endif
}

Elemento Cuc_ZoccoloInfCantinetta
{
   Descrizione = "Zoccolo inferiore base cantinetta"
   Code        = ANT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Vestibile   Scocca*

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                   "Larghezza"            600
      Y                   "Altezza"              180
      Z                   "Spessore"             23

      Vtr_Z               ""                     4

      MaterialeFrontale   "Materiale Frontale"   ""
      VAR_Melaminico      ""                     0    SaveAlways

      perCODICE           ""                     ""
      GEST_CODICE         ""                     ""

      FIN_var             ""                     "C001"
      FIN_orie            ""                     "V"

      XGLASS              "Num. XGLASS"          ""   Utente   (   )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
   }

   Procedura OnTabEredita
   {
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB Set_MaterialeFrontale_Ante
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "F08022"
      if( Cucina_Versione > 2)
      {
         perCODICE = "F08037"
         if( Cucina_Modello == "Cut") { perCODICE = "F08038" }
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona _graf_Cuc_ElmZoccoloInfCantinetta vtr
   {
      GOSUB posa_blocco

      @Z = Vtr_Z

      @base_0.z = base_0.z + Z - @Z

      GOSUB rivestimento
   }

   Posiziona _graf_Cuc_ElmZoccoloInfCantinetta pan
   {
      GOSUB posa_blocco

      @X = X - 2*$Cuc_Rie_Fro_PanVtr
      @Z = Z - Vtr_Z

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

      @c_rivestimento = $c_pomice
   }

   Posiziona Griglia_Areazione grar
   {
      @base_0 = base_0
      @base_0.x = base_0.x + (X - @X)/2
      @base_0.z = base_0.z + Z

      @NO_GEST = 0
   }
}

Elemento _graf_Cuc_ElmZoccoloInfCantinetta
{
   Descrizione = "Grafica Elemento Zoccolo Inf Cantinetta"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X        "" 591
      Y        "" 127
      Z        "" 19

      Scasso_X "" 488
      Scasso_Y "" 78
      Scasso_R "" 10

      acis     "" 0.01

      HIDE     "" 1
   }

   Assegnazioni
   {
      idx_att = ATTUALE()
      Scasso_OffX = (X - Scasso_X)/2
   }

   PuntiNotevoli
   {
      k = SENO(45)
      base_0 = [0, 0, 0]
      base_1 = [Scasso_OffX, 0, 0]
      base_2 = [Scasso_OffX, Scasso_Y-Scasso_R, 0]
      arc_2  = [ base_2.x + (1-k)*Scasso_R, Scasso_Y - (1-k)*Scasso_R, 0]
      base_3 = [Scasso_OffX+Scasso_R, Scasso_Y, 0]
      base_4 = [X-Scasso_OffX-Scasso_R, Scasso_Y, 0]
      arc_4  = [ base_4.x + k*Scasso_R, Scasso_Y - (1-k)*Scasso_R, 0]
      base_5 = [X-Scasso_OffX, Scasso_Y-Scasso_R, 0]
      base_6 = [X-Scasso_OffX, 0, 0]
      base_7 = [X, 0, 0]
      base_8 = [X, Y, 0]
      base_9 = [0, Y, 0]

      base_so = base_0

      alto_0 = [0, 0, Z]
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_AntaLvst
{
   Descrizione = "Anta Lavastoviglie"
   Code        = ANT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto Cuc_Altim_Fro
   Vestibile   ScoccaT_BaseLvstOriz ScoccaT_BaseLvst ScoccaT_ColLvst ScoccaT_ColLvstForno ScoccaT_ColLvst2Forno
   Alias       Frontale;CamInciso;CamIncidente;Cuc_AntaLvst

   Variabili
   {
      #include          %path_bdm%\var_db.inc

      ForzaMisX         "Abilita modifiche in larghezza"      0
      ForzaMisY         "Abilita modifiche in Altezza"        0

      X                 "Larghezza"                           600
      Y                 "Altezza"                             180
      Z                 "Spessore"                            21
      Anta_Spe          ""                                    22 Implicit

      Apertura          "Verso apertura Anta"                 "RB"

      //TipoFrontale "Tipologia Frontale" "A"
      TipoFrontale      "Tipologia Frontale"                  0

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"                  ""
      VAR_Melaminico    ""                                    0  SaveAlways

      //LZ 03/05/2022: gestione peso ante
      VAR_Peso_Rev      "Peso anta lvst - revisione"          0  SaveAlways
      VAR_Peso_Max      "Peso anta lvst - massimo supportato" 0  Utente  ( ) ShowAlways
      VAR_Peso          "Peso anta lvst"                      -1 ShowAlways
      FLAG_Peso_Calc    "Peso anta lvst - calcola"            0  Boolean ShowAlways

      FillerM2G         " "                                   "" ShowAlways


      Pos_Fro           "Progressivo frontale"                1

      InfLvsOri         "Frontale Lvst inferiore"             0

      Verso             ""                                    0
      AntaInCoppia      ""                                    0

      //maniglia FLAPP
      ConManigliaFLAPP  ""                                    0
      Man_Orie          ""                                    "O"
      Man_PosX          ""                                    "L"
      Man_PosY          ""                                    "C"
      Man_OffX          ""                                    0
      Man_OffY          ""                                    0

      FIN_var           ""                                    "C001"
      FIN_orie          ""                                    "V"

      FIN_val           ""                                    ""
      FIN_ns            ""                                    ""

      COD_EREDITA       ""                                    "PRE;POST"

      perRADICE         ""                                    ""
      RADICE            ""                                    ""

      XGLASS            "Num. XGLASS"                         "" Utente  ( )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*") )
      {
         Z = $Cuc_Spe_Ant_Col
         TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")
      }

      if( VAR_VAL( ATTUALE(), "VAR_Melaminico") ) { Z = $Cuc_Spe_Ant_Mel }
      if( Cucina_Versione > 2)                    { Z = Anta_Spe         }

    #ifdef TEC;AZI
      M4_MIS = "X;Y;VAR_Peso;VAR_Peso_Max;FLAG_Peso_Calc;Filler*"
    #endif

      if( FLAG_Peso_Calc == 1 ) { COMANDO( STRCAT( "PROCEDURA VerificaPeso ", STR(ATTUALE()), " //Manuale da Assegnazioni ", NOME(ATTUALE()))) }
   }

   PuntiNotevoli
   {
      GOSUB punti
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,1)

      if( InfLvsOri==1 ) { GOSUB azione_apertura_vasistas }
      else               { GOSUB azione_apertura_ribalta }
   }

   Procedura PostGestDllValida
   {
      if( $CNP == 1 | $CNP__ == 1 | $PLIKO == 1 )       { EXITSUB() }

      if( $modalita != "TEC" & $modalita != "AZI" )     { EXITSUB() }

      if( $OnLoadOrder == 1 | $OnRigenera == 1 )        { EXITSUB() }

      if( ACTION() <= 0 | ACTION() == 2 )               { EXITSUB() }

      if( VAR_VAL_STR( ATTUALE(), "ORD_SOST") == "0" )  { EXITSUB() }

      COMANDO( STRCAT( "PROCEDURA VerificaPeso ", STR(ATTUALE()), " //PostGestDllValida ", NOME(ATTUALE())))
   }

   Procedura VerificaPeso
   {
      if( $CNP == 1 | $CNP__ == 1 | $PLIKO == 1 )       { EXITSUB() }

      if( $modalita != "TEC" & $modalita != "AZI" )     { EXITSUB() }

      if( VAR_VAL_STR( ATTUALE(), "ORD_SOST") == "0" )  { EXITSUB() }

      log = 0
      ScriviSuLog( log, "VerificaPeso" , "START" )

      ScriviSuLog( log, "VerificaPeso" , STRCAT("  - Idx: ", STR(ATTUALE())))

      if( VAR_Peso_Max <= 0 )
      {
         HI( ATTUALE(), 1)
         CHIEDI( ATTUALE(), "VAR_Peso_Max")
         HI( ATTUALE(), 0)
      }

      //Calcolo peso anta
      if( $OnTerminate == 1
        | FLAG_Peso_Calc == 1
        | VAR_VAL( -1, "wk_OnControlli_Globali") == 1 )
      {
         FLAG_Peso_Calc = 0
         DEL_VAR_MODIFICATE( ATTUALE(), "FLAG_Peso_Calc")

         VAR_Peso = GetPesoAntaLvstFromDB(ATTUALE())
      }

      ScriviSuLog( log, "VerificaPeso", STRCAT("  - VAR_Peso_Max: ", STR(VAR_Peso_Max)))
      ScriviSuLog( log, "VerificaPeso", STRCAT("  - VAR_Peso:     ", STR(VAR_Peso)))
      ScriviSuLog( log, "VerificaPeso" , "END" )
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale

      //Luca 20/03/2020
      if( NOME(idx_pdr)=="ScoccaT_ColLvstForno" )
      {
         if( VAR_VAL(idx_pdr,"VAR_Revisione")==1 )
         {
            base_0.y = $vano_0.y + $Cuc_Aria_Ant_Y + @YZoccLvst + 5

            //LZ 03/03/2021: revisione tecnica colonna lvst/forno
            //Y = 735.5
            Y = 729
         }
      }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( NOME(idx_pdr)=="ScoccaT_ColLvst2Forno" )
      {
         if( VAR_VAL(idx_pdr,"VAR_Revisione")==1 )
         {
            base_0.y = $vano_0.y + $Cuc_Aria_Ant_Y + @YZoccLvst + 5
            Y = 776
            if( VAR_VAL(idx_pdr,"VAR_YAll") == 1 ) { Y = 729 }
         }
      }

      //identifico anta inferiore lavastoviglie orizzontale
      if( NOME(idx_pdr)=="ScoccaT_BaseLvstOriz" )
      {
         InfLvsOri = 0
         if( $livello<100 ) { InfLvsOri = 1 }
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //Luca 24/07/2019 19924: Basi lavastoviglie orizzontale - cucine 2.0: inserimento maniglia solo su anta superiore
         if( InfLvsOri==1 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"GEST_C004")==0 )
            {
               GEST_C004 = "PU001"
               VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE
            }
         }
      }

      //Luca 04/03/2020 riporto modifica LAGO
      //if( TABER_REGOLA=="POST" )
      //{
      //   GOSUB Set_Gest_C004_AnteColLvst
      //}

      //LZ 02/08/2021: cucine laccate
      if( TABER_REGOLA == "POST")
      {
         GOSUB Set_MaterialeFrontale_Ante
         GOSUB Set_Finitura_Frontale_Stripes
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_PosaManigliaFLAPP

      //LZ 02/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      GOSUB AttrezzaGraficaFrontale

      idx_topl = GetTopLevel(ATTUALE())

      perRADICE = "ANBALVV"
      if( UN_PADRE("ScoccaT_BaseLvstOriz") )
      {
         //rob_pec 10/10/2019: cambio radice. vedi MANTIS 21048
         //perRADICE = "ANBALVO"
         //anta superiore
         perRADICE = "ANLOSUP"
         //anta inferiore
         if(InfLvsOri) { perRADICE = "ANLOINF" }
      }
      if( UN_PADRE("ScoccaT_Col*") )
      {
         perRADICE = "ANCOLLVST"
         if( TipoFrontale>=2 ) { perRADICE = "ANCOLLVSTN" }

         //LZ 02/02/2022: descrizione dedicata per anta AEG
         if( IS_MATCH( NOME(idx_topl), "ScoccaT_Bas*")
           & VAR_VAL(idx_topl, "VAR_Revisione") > 0 ) { perRADICE = STRCAT( perRADICE, "AEG") }
      }

      if( Cucina_Versione > 2)
      {
         // CBALVS, ABALVS, AALVS, CALVS
         perRADICE = SE_STR( UN_PADRE("ScoccaT_B*") == 1, "BALVS", "ALVS")
         perRADICE = STRCAT( Cucina_ModelloPre, perRADICE)
      }

      RADICE = perRADICE

      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_FLAPP") { RADICE = "" GEST_CODICE = "Y00650" }
      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_CUT")   { RADICE = "" GEST_CODICE = "" FLAG_RADICE = $NO_RAD }
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 24/07/2019
      //Mantis 20542: Basi lavastoviglie cucina 2.0: riga a se stante per le ante
      //if( UN_PADRE("ScoccaT_Bas*") ) { FLAG_RADICE = $MAKE_ROW }
      if( UN_PADRE("ScoccaT_Bas*") ) { TIPO_COLLO = "G09" }

      GOSUB Set_Finitura_Frontale_Stripes

      GOSUB GestComune_Post
   }

   Posiziona ManigliaFLAPP ma1
   {
      GOSUB posa_ManigliaFLAPP
   }
}

Elemento Cuc_AntaBifacciale
{
   Descrizione = "Frontale Bifacciale"
   Code        = INT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Alias         Base;CamInciso;CamMdFrontali;Bifacciale;CheckBifaccialePassacavi

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione              ""                         0       SaveAlways

      X                          "Larghezza"                368
      Y                          "Altezza"                  368
      Z                          "Profondità"               40

      //dimensioni reali
      Xr                         "Larghezza"                368     ShowAlways
      Yr                         "Altezza"                  368     ShowAlways

      FSN_MagSx                  ""                         0       SaveAlways
      FSN_MagDx                  ""                         0       SaveAlways
      FSN_RidSx                  ""                         0       SaveAlways
      FSN_RidDx                  ""                         0       SaveAlways

      //Luca 19/07/2019 utilizzate nel caso di isola
      //se devo ridurre per far spazio al fianco finitura
      FSN_RRid_DX                ""                         0       SaveAlways
      FSN_RRid_SX                ""                         0       SaveAlways

      FSN_ParX                   ""                         4

      TipoFrontale               "Tipo frontali"            0
      //SaveAlways
      //Menu ( TpBifacc )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale          "Materiale Frontale"       ""
      VAR_Melaminico             ""                         0       SaveAlways

      Verso                      ""                         -1
      AntaInCoppia               ""                         0

      Apertura                   "Tipologia"                "BA"

      //Luca 12/07/2019 -- SNACK
      SNACK_RidY                 ""                         70
      ConPianoSNACK              ""                         0       SaveAlways

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio  non graficato
      //16 : schienali
      //32 : punti
      M4_MIS                     ""                         "X;Y;Z"
//    #ifdef TEC
//       M4_DIALOG "" 34
//    #endif
//    #ifndef TEC
//       M4_DIALOG "" 32
//    #endif
      M4_DIALOG                  ""                         34

      //M4_A_MURO "" 0
      M4_LINK2WALL_MODE__        ""                         3

      //M4_STENDI_RIPETIZIONI "" 1

      M4_DLINK_MODE__            "rimane steso"             0

      //FIN_var  "" "C002"
      FIN_var                    ""                         "C001"
      FIN_orie                   ""                         "O"

      FIN_val                    ""                         ""
      FIN_ns                     ""                         ""

      NO_GEST                    ""                         0

      idx_ref                    ""                         -1

      //idx_struttura a cui sono agganciata
      idx_struttura              ""                         -1

      FLAG_perColonna            ""                         0
      FLAG_perColSof             ""                         0
      FLAG_perColAng             ""                         0       SaveAlways

      idx_near_sup               ""                         -1

      XGLASS                     "Num. XGLASS"              ""      Utente ( )
      // Utente ( )

      //KEKU
      Y_Base                     ""                         0       Implicit

      KekuSX1                    ""                         0
      KekuSX2                    ""                         0
      KekuSX3                    ""                         0
      KekuSX4                    ""                         0

      KekuSX1_Y                  ""                         0
      KekuSX2_Y                  ""                         0
      KekuSX3_Y                  ""                         0
      KekuSX4_Y                  ""                         0

      KekuDX1                    ""                         0
      KekuDX2                    ""                         0
      KekuDX3                    ""                         0
      KekuDX4                    ""                         0

      KekuDX1_Y                  ""                         0
      KekuDX2_Y                  ""                         0
      KekuDX3_Y                  ""                         0
      KekuDX4_Y                  ""                         0

      KekuRieSx                  ""                         19
      KekuRieDx                  ""                         19

      CMP2_AZIONI                ""                         "M"

      perRADICE                  ""                         ""
      RADICE                     ""                         ""
      perCODICE                  ""                         ""
      GEST_CODICE                ""                         ""

      COD_EREDITA                ""                         "PRE;POST;C011_PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune
      Cucina_Versione_Idx = idx_struttura
      GOSUB CucP_Assegnazioni
      M4_GRUPPO__  = "BIFACCIALE"

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_AntaBifacciale", "VAR_Revisione")

      Z = $Cuc_Spe_Ant

      if( TipoFrontale > 0)
      {
         Z = $Cuc_Spe_Ant_Col
         FLAG_perColonna = 1
         M4_DIALOG = 2
      }

      if( VAR_VAL( ATTUALE(), "VAR_Melaminico"))                  { Z = $Cuc_Spe_Ant_Mel }
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)  { Z = 22 }
      if( Cucina_Versione > 2)                                    { Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z")) }

      Spe_Ant = Z

      //Luca 27/04/2020
      //varabili per bifacciale angolo colonna
      //calcol poi in CtrlPannello_BifAngolo
      X_PanAng_Sx = 100
      X_PanAng_Dx = 100
      RieX_Pan    = 3
      Verso_Col   = -1

      GOSUB NO_AUTO

      STP_Bollina = 1
      if( TipoFrontale > 1 ) { STP_Bollina = 0 }

      GOSUB Set_Rev_NowNastro_Gest_C179
   }

   PuntiNotevoli
   {
      Yr = Y - 2*$Cuc_Aria_Ant_Y - ConPianoSNACK*SNACK_RidY

      Xr = X - 2*$Cuc_Aria_Ant_X
      Xr = Xr + FSN_MagSx*FSN_ParX + FSN_MagDx*FSN_ParX - FSN_RidSx*FSN_ParX - FSN_RidDx*FSN_ParX

      Zt = Z + $Cuc_Aria_Ant_Z

      //GOSUB punti
      GOSUB punti_Zt

      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXIT() }

      if( ACTION()==$stesi_Action )
      {
         SHOW_POINT($idx_show_point, "punto_bifacc_*")
         EXIT()
      }

      GOSUB Stendi_Barra_Bifacciale
   }

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

      GOSUB Notifica_Barra_Bifacciale
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Set_MaterialeFrontale_Ante

      if( FLAG_perColAng==0 )  { GOSUB AttrezzaGraficaFrontale }

      KekuRieDx = $Cuc_Spe_Fia
      KekuRieSx = $Cuc_Spe_Fia

      //definisco idx struttura a cui sono agganciato
      if( IS_IDX(idx_ref)==1 ) { idx_struttura = idx_ref }

      if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 )
      {
         idx_struttura = AGGANCIATA(ATTUALE(),"*")
      }

      //Luca 20/03/2019 definisco tipo bifacciale
      if( IS_IDX(idx_struttura)==1 )
      {
         //Luca 09/04/2020 TipoFrontale da composto
         //TipoFrontale = 0
         //if( IS_MATCH(NOME(idx_struttura),"ScoccaT_Col*") )
         //{
         //   TipoFrontale = VAR_VAL(idx_struttura,"TipoFrontale")
         //   //non esiste bifacciale now vario
         //   if( TipoFrontale==4 ) { TipoFrontale = 3 }
         //
         //}

         //Luca 10/10/2019
         if( NOME(idx_struttura)=="ScoccaT_BaseAngPan"
           | NOME(idx_struttura)=="ScoccaT_ColAngPan"  )
         {
            if( VAR_VAL(idx_struttura,"Verso")<0 )
            {
               KekuRieDx = KekuRieDx + VAR_VAL(idx_struttura,"DistMuro")
            }
            if( VAR_VAL(idx_struttura,"Verso")>0 )
            {
               KekuRieSx = KekuRieSx + VAR_VAL(idx_struttura,"DistMuro")
            }
         }

         //Luca 15/09/2022
         if( VAR_VAL(idx_struttura,"FSN_flag_SX") == 3 )  { KekuRieDx = 19 + 4 }
         if( VAR_VAL(idx_struttura,"FSN_flag_DX") == 3 )  { KekuRieSx = 19 + 4 }

         //Luca 10/04/2020
         FLAG_perColSof = 0
         if( VAR_VAL(idx_struttura,"FLAG_soffietto")==1 ) { FLAG_perColSof = 1 }
      }

      //Luca 03/07/2019
      //controllo i rientri in caso di basi fusion
      GOSUB CtrlBifaccialiFusion

      //Luca 12/07/2019 controllo eventuale presenza del piano SNACK
      GOSUB CtrlPresenzaSNACK

      //Luca 02/10/2019
      GOSUB CtrlPosizioneKEKU

      //Luca 27/04/2020
      GOSUB CtrlPannello_BifAngolo

      GOSUB Set_Finitura_Frontale_Stripes

     // 11.09.2024
      if (IS_MATCH(VAR_VAL_STR(idx_att, "Cucina_VersioneDsc"), "2_5") != 1)
         {
          // 10.04.2019
          MdF_Load_Interat = "CerBat;CerRib"
          GOSUB MdF_ADD_Reg_Interat
         }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         // Eredito dalla base
         if( IS_IDX(idx_struttura))
         {
            // C113 - Modello dalla base
            VarAdd = "GEST_C113"
            if( IS_VAR_FIXED( idx_att, VarAdd) == 0)
            {
               wk_varadd_idx_struttura = VAR_VAL_STR( idx_struttura, VarAdd)
               if( REPLACE( wk_varadd_idx_struttura, "_", "") != ""
                 & REPLACE( VAR_VAL_STR( -1, VarAdd), "_", "") == "")
               {
                  VAR_VALUESTR_SET( idx_att, VarAdd, wk_varadd_idx_struttura)
                  GOSUB Add_TABER_VARSETTATE
                  VAR_SET_MODIFICATA( idx_att, VarAdd, "")
               }
            }

            // C001 - Finitura dalla base
            VarAdd = "GEST_C001"
            if( IS_VAR_FIXED( idx_att, VarAdd) == 0)
            {
               wk_varadd_idx_struttura = VAR_VAL_STR( idx_struttura, VarAdd)
               if( REPLACE( wk_varadd_idx_struttura, "_", "") != ""
                 & REPLACE( VAR_VAL_STR( -1, VarAdd), "_", "") == "")
               {
                  VAR_VALUESTR_SET( idx_att, VarAdd, wk_varadd_idx_struttura)
                  GOSUB Add_TABER_VARSETTATE
                  VAR_SET_MODIFICATA( idx_att, VarAdd, "")
               }
            }
         }
      }

      if( TABER_REGOLA == "C011_PRE") { GOSUB Set_Gest_C011 }

      if( TABER_REGOLA == "POST")
      {
         GOSUB Set_MaterialeFrontale_Ante
         GOSUB Set_Finitura_Frontale_Stripes
      }
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST == 1)
      {
         FLAG_RADICE = $NO_RAD
         EXITSUB()
      }

      GEST_X = Xr
      GEST_Y = Yr

      perRADICE = "BIF"
      if( TipoFrontale == 1)                                     { perRADICE = "BICO3"                  }
      if( TipoFrontale == 2)                                     { perRADICE = "BICON1"                 }
      if( TipoFrontale == 3)                                     { perRADICE = "BICON2"                 }
      if( TipoFrontale == 4)                                     { perRADICE = "BICON3"                 }
      if( UN_PADRE("ScoccaT_Base_AirKitchen"))                   { perRADICE = "BBAKI"                  }

      if( Cucina_Versione > 2)
      {
         perRADICE = "BIF_3"
         // BBICO, CBICO
         if( TipoFrontale == 2) { perRADICE = "CBICO" }
         if( TipoFrontale == 3) { perRADICE = "BBICO" }
      }

      if( perRADICE == "BIF"
        & IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1) { perCODICE = "Y00645"                 }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Finitura_Frontale_Stripes
   }

   Procedura cancella
   {
      if( $StartingDel__!=ATTUALE() ) { EXITSUB() }

      idx_agg = AGGANCIATA(idx_att,"*")
      if( IS_IDX(idx_agg) ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," no_agganciati //Cancella Bifacciale")) }
   }

   Posiziona _cont_per_near cn_sup
   {
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z
      @X = X - 100
      @Y = 100
      @Z = 50
      idx_near_sup = ATTUALE()
   }

   //Posiziona Blocco cn_sx
   Posiziona _cont_per_near cn_sx
   {
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z + 1
      @X = 1
      @Y = Y - 100
      @Z = Z - 2
      idx_cnear_sx = ATTUALE()
   }

   //Posiziona Blocco cn_dx
   Posiziona _cont_per_near cn_dx
   {
      @base_0.x = base_0.x + X - 1 - $Cuc_Aria_Ant_X
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z + 1
      @X = 1
      @Y = Y - 100
      @Z = Z - 2
      idx_cnear_dx = ATTUALE()
   }

   //Posiziona Blocco aa
   //{
   //   @escluso = 1
   //   if( FLAG_perColAng==1 ) { @escluso = 0 }
   //
   //   @base_0 = vano_0_0
   //   @X=vano_l_0
   //   @Y=Y
   //   @Z=vano_p_0
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Cuc_PannelloBifAngolo pa_sx
   {
      @escluso = 1
      if( FLAG_perColAng==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + $Cuc_Aria_Ant_X
      @X = X_PanAng_Sx

      @TipoPannello = 1
      if( Verso_Col>0 ) { @TipoPannello = 0 }

      @Posizione = -1
      @Verso     = Verso_Col
   }

   Posiziona Cuc_PannelloBifAngolo pa_dx
   {
      @escluso = 1
      if( FLAG_perColAng==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + X - $Cuc_Aria_Ant_X - X_PanAng_Dx
      @X = X_PanAng_Dx

      @TipoPannello = 0
      if( Verso_Col>0 ) { @TipoPannello = 1 }

      @Posizione = 1
      @Verso     = Verso_Col
   }

#ifdef TEC;AZI
   //***** GESTIONE KEKU ******
   Posiziona Keku kksx1
   {
      @Numero = 1
      @Verso = -1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }
   Posiziona Keku kksx2
   {
      @Numero = 2
      @Verso = -1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }
   Posiziona Keku kksx3
   {
      @Numero = 3
      @Verso = -1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }
   Posiziona Keku kksx4
   {
      @Numero = 4
      @Verso = -1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }

   Posiziona Keku kkdx1
   {
      @Numero = 1
      @Verso = 1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }
   Posiziona Keku kkdx2
   {
      @Numero = 2
      @Verso = 1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }

   Posiziona Keku kkdx3
   {
      @Numero = 3
      @Verso = 1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }

   Posiziona Keku kkdx4
   {
      @Numero = 4
      @Verso = 1

      GOSUB Cuc_AntaBif_Posiziona_Keku
   }

   Posiziona PannRinforzo_BifAngolo pan1
   {
      @escluso = 1
      if( FLAG_perColAng==1 ) { @escluso = 0 }

      wk_x_fro = (X - 2*$Cuc_Aria_Ant_X)
      wk_x_pan = (wk_x_fro - 2*RieX_Pan)
      wk_rinf_offx = $Cuc_Aria_Ant_X + RieX_Pan + 39.5
      wk_rinf_x    = (wk_x_pan - 39.5 - 39.5)

      if( IS_IDX(idx_struttura)==1 )
      {
         if( VAR_VAL(idx_struttura,"Verso")<0 )
         {
            wk_rinf_x = wk_rinf_x - VAR_VAL(idx_struttura,"DistMuro")
         }
         if( VAR_VAL(idx_struttura,"Verso")>0 )
         {
            wk_rinf_x = wk_rinf_x - VAR_VAL(idx_struttura,"DistMuro")
            wk_rinf_offx = $Cuc_Aria_Ant_X + RieX_Pan + 39.5 + VAR_VAL(idx_struttura,"DistMuro")
         }
      }

      @base_0.x = base_0.x + wk_rinf_offx
      @base_0.y = base_0.y + 100
      @base_0.z = base_0.z - @Z
      @X = wk_rinf_x
   }
   Posiziona PannRinforzo_BifAngolo pan2
   {
      @escluso = 1
      if( FLAG_perColAng==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + wk_rinf_offx
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z - @Z
      @X = wk_rinf_x
   }
   Posiziona PannRinforzo_BifAngolo pan3
   {
      @escluso = 1
      if( FLAG_perColAng==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + wk_rinf_offx
      @base_0.y = base_0.y + Y - 100 - @Y
      @base_0.z = base_0.z - @Z
      @X = wk_rinf_x
   }

   //***** GESTIONE KEKU ******
#endif

   //Posiziona Blocco pnc
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   //Posiziona Blocco pnc2
   //{
   //   @X = X - 50
   //   @Y = Y - 50
   //   @Z = 4
   //   @base_0.x = base_0.x + 25
   //   @base_0.y = base_0.y + 25
   //   @base_0.z = base_0.z + Z - 3
   //   @c_rivestimento = $c_alluminio
   //}
}

//Luca 27/04/2020
Elemento Cuc_PannelloBifAngolo
{
   Descrizione = "Pannello x bifacciale angolo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563
      Y "Spessore"             18
      Z "Profondità"          318

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      TipoFrontale "Tipo frontali" 0 Implicit

      PerAccosto  "" 0 Implicit

      //0 pannello fix
      //1 pannello anta
      TipoPannello "" 0

      X_Vetro1     ""  100
      X_Vetro2     ""  200

      Posizione    "" -1
      Verso        "" -1

      perCODICE    ""  ""
      GEST_CODICE  ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Rie_PanInt  =  3
      Spe_PanFin  =  4
      Spe_PanInt  = 19

      AriaX_VV    = 3

      FIN_PanFin  = "C001"
      FIN_PanInt  = "C002"

      //GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      if( ACTION()<=0 | TipoFrontale==0 )  { EXITSUB() }

      wk_x_vtr = X
      if( TipoPannello == 1 ) { wk_x_vtr = X - 28 }

      X_Vetro1 = 100
      X_Vetro2 = 100

      //NOW VARIA
      if( TipoFrontale==4 )
      {
         X_Vetro1 = wk_x_vtr
         X_Vetro2 = 0

         if( TipoPannello==1 )
         {
            X_Vetro1 = 207
            if( PerAccosto==630 ) { X_Vetro1 = 247 }
            if( PerAccosto==700 ) { X_Vetro1 = 267 }

            X_Vetro2 = wk_x_vtr - X_Vetro1 - AriaX_VV
         }
      }

      //NOW ASIMMETRICA
      if( TipoFrontale==3 )
      {
         X_Vetro1 = 207
         X_Vetro2 = wk_x_vtr - X_Vetro1 - AriaX_VV

         if( TipoPannello==1 )
         {
            X_Vetro1 = 207
            if( PerAccosto==630 ) { X_Vetro1 = 247 }
            if( PerAccosto==700 ) { X_Vetro1 = 267 }

            X_Vetro2 = wk_x_vtr - X_Vetro1 - AriaX_VV
         }
      }

      //NOW INTERA
      if( TipoFrontale==2 )
      {
         X_Vetro1 = wk_x_vtr
         X_Vetro2 = 0
      }

   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "F20901"
      if( TipoPannello == 1 ) { perCODICE = "F20902" }

      if( TipoFrontale > 1 )
      {
         perCODICE = "F20903"
         if( TipoPannello == 1 ) { perCODICE = "F20904" }
      }

      if( ACTION()>0 )
      {
         GEST_C003 = "SX001"
         if( Posizione > 0 ) { GEST_C003 = "DX001" }
         VarAdd = "GEST_C003"   GOSUB Add_TABER_VARSETTATE
      }

      GEST_CODICE = perCODICE
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //{ COMPONENTI 368
   //vetro
   Posiziona Blocco panfin
   {
      @escluso = 0
      if( TipoFrontale > 1 )  { @escluso = 1 }

      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin

      wk_x_vtr = X
      if( TipoPannello == 1 ) { wk_x_vtr = X - 28 }

      @X = wk_x_vtr
      @base_0.x = base_0.x

      if( TipoPannello == 1 & Posizione > 0 ) { @base_0.x = base_0.x + 28 }

      FIN_var = FIN_PanFin
      GOSUB rivestimento
   }

   //pannello
   Posiziona Blocco panInt
   {
      @escluso = 0
      if( TipoFrontale > 1 )  { @escluso = 1 }

      GOSUB posa_blocco
      wk_x_pan = X - Rie_PanInt - 25
      if( TipoPannello == 1 ) { wk_x_pan = X - Rie_PanInt }

      @X = wk_x_pan
      @base_0.x = base_0.x + Rie_PanInt
      if( Posizione>0 )  { @base_0.x = base_0.x + 25 }

      if( TipoPannello == 1 )
      {
         @base_0.x = base_0.x + Rie_PanInt
         if( Posizione>0 )  { @base_0.x = base_0.x }
      }

      @Z = Spe_PanInt
      FIN_var = FIN_PanInt
      GOSUB rivestimento
   }
   //} COMPONENTI 368

   //{ COMPONENTI NOW
   Posiziona Vetro_AntaNOW vet1
   {
      @escluso = 1
      if( TipoFrontale > 1 )  { @escluso = 0 }
      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin

      if( TipoPannello == 1 & Posizione > 0 ) { @base_0.x = base_0.x + 28 }

      @X = X_Vetro1

      if( Verso>0 )
      {
         @base_0.x = base_0.x + X_Vetro2 + AriaX_VV
         if( TipoPannello == 1 & Posizione > 0 ) { @base_0.x = base_0.x + 28 + X_Vetro2 + AriaX_VV }
      }
   }

   Posiziona Vetro_AntaNOW vet2
   {
      @escluso = 1
      if( TipoFrontale > 1 & X_Vetro2 )  { @escluso = 0 }
      GOSUB posa_blocco
      @Z = Spe_PanFin
      @base_0.z = base_0.z + Z - Spe_PanFin

      @X = X_Vetro2
      @base_0.x = base_0.x + X_Vetro1 + AriaX_VV
      if( TipoPannello == 1 & Posizione > 0 ) { @base_0.x = base_0.x + 28 + X_Vetro1 + AriaX_VV }

      if( Verso>0 )
      {
         @base_0.x = base_0.x
         if( TipoPannello == 1 & Posizione > 0 ) { @base_0.x = base_0.x + 28 }
      }
   }

   Posiziona Pannello_AntaNOW pan1
   {
      @escluso = 1
      if( TipoFrontale > 1 )  { @escluso = 0 }

      GOSUB posa_blocco
      wk_x_pan = X - Rie_PanInt - 25
      if( TipoPannello == 1 ) { wk_x_pan = X - Rie_PanInt }

      @X = wk_x_pan
      @base_0.x = base_0.x + Rie_PanInt
      if( Posizione>0 )  { @base_0.x = base_0.x + 25 }

      if( TipoPannello == 1 )
      {
         @base_0.x = base_0.x + Rie_PanInt
         if( Posizione>0 )  { @base_0.x = base_0.x }
      }

      @Z = Spe_PanInt
   }

   //} COMPONENTI NOW

}

Elemento PannRinforzo_BifAngolo
{
   Descrizione = "Keku"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X "" 100
      Y "" 80
      Z "" 10

      KekuCol "" 0
   }

   Assegnazioni
   {
      GOSUB AssComune
      //  non fare i controlli gestionali nei figli
      GOSUB Stato_78

      DescEdit__ = "PANN.RINFORZO"

      HIDE = 1
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @c_rivestimento = $c_alluminio
   }
}

//Alberto B. 11/08/20
Elemento Cuc_AntaAng
{
   Descrizione = "Anta generica battente doppia per pensile ad angolo"
   Code        = ANTBAT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Vestibile   ScoccaS*
   Alias       Frontale

   Variabili
   {
      ForzaMisX   "Abilita modifiche in larghezza"  0 //Menu ( bool )
      ForzaMisY   "Abilita modifiche in Altezza"    0 //Menu ( bool )

      X            "Larghezza"                     600
      Y            "Altezza"                       600
      Z            "Spessore"                       20

      TipoFrontale "Tipologia Frontale"              0

      //TabStringa ( "cuc\tab\mnu\TipoFrontale.mnu" )
      Pos_Fro      "Progressivo anta"                1 Utente ( )
      Verso        "Verso apertura ante"            -1 //Menu ( DXSX )

      //l'Apertura può assumere i valori: ES-Estraibile  VS-Vasistas  RB-Ribalta  LB-Libro  SF-soffietto
      L_Anta_SX    "Dimensione esatta frontale sinistro"   0
      AperturaMn   "Apertura Ante"                         0 //Menu ( Cuc_AperAnt )
      Apertura     "Tipologia"                           "BA"
      //TabStringa ( "cuc\tab\mnu\Aperture.mnu" )
      Sdoppia      "Sdoppio del frontale oltre:"         733.5
      FAttSdoppia  "Flag di attivazione sdoppio "          1 Menu ( bool )
      ConGola      "Presenza gola 0=no 1=sopra 2=sotto"    0

      AntaSx       "Lato frontale Anta SX"               320
      AntaDx       "Lato frontale Anta DX"               320

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

      idx_anta_sx  "" -1
      idx_anta_dx  "" -1

      //M4
      CMP2_AZIONI  ""    "V+"
      c_rivestimento "" [0,0,0]
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      HIDE = 3
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
      //ang = @ang
      //X = @LatoAntaSx -$Cuc_Aria_Ant_Z -$Cuc_Aria_Ant_X
      //Z = @LatoAntaDx -$Cuc_Aria_Ant_Z -$Cuc_Aria_Ant_X
      //GOSUB CucP_Vesti
      AntaSx = @AntaSx
      AntaDx = @AntaDx
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   Posiziona Cuc_AntaSingola antsx
   {
      @base_0 = base_0
      @base_0.z = base_0.z
      @X = AntaSx
      @Y = Y
      @Verso = -1
      @TipoFrontale = TipoFrontale
   }

   Posiziona Cuc_AntaSingola antdx
   {
      @ang_y = -90
      @base_0.x = base_3.x - $Cuc_Spe_AntPA - 0.5
      @base_0.y = base_3.y
      @base_0.z = base_3.z - 0.5
      if( UN_PADRE("Cucina_2_5_Pensile_Angolo"))
      {
         @base_0.x = base_3.x - Z_Fia_Sx
         @base_0.z = base_3.z
      }

      @X = AntaDx
      @Y = Y
      @Verso = 1
      @TipoFrontale = TipoFrontale
   }
}

Elemento Cuc_AntaFrigo
{
   Descrizione = "Anta battente per base frigo"
   Code        = ANTBAT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro   Auto
   Vestibile   Scocca* VanoFrigo_ColFalegnameria

   Variabili
   {
      ForzaMisX   "Abilita modifiche in larghezza"  0 //Menu ( bool )
      ForzaMisY   "Abilita modifiche in Altezza"    0 //Menu ( bool )

      X            "Larghezza"                     600
      //Menu ( Cuc_XAnta ) Utente ( )
      Y            "Altezza"                       600
      //Menu ( Cuc_YAnta ) Utente ( )
      Z            "Spessore"                       21

      //Luca 01/02/2019 tipofrontele numerico
      //TipoFrontale "Tipologia Frontale"            "A"
      TipoFrontale "Tipologia Frontale"              0

      //TabStringa ( "cuc\tab\mnu\TipoFrontale.mnu" )
      Pos_Fro      "Progressivo anta"                1 Utente ( )
      Verso        "Verso apertura ante"            -1 //Menu ( DXSX )

      //l'Apertura può assumere i valori: ES-Estraibile  VS-Vasistas  RB-Ribalta  LB-Libro  SF-soffietto
      L_Anta_SX    "Dimensione esatta frontale sinistro"   0
      AperturaMn   "Apertura Ante"                         0 Menu ( Cuc_AperAnt )
      Apertura     "Tipologia"                           "BA"
      //TabStringa ( "cuc\tab\mnu\Aperture.mnu" )
      Sdoppia      "Sdoppio del frontale oltre:"         733.5
      FAttSdoppia  "Flag di attivazione sdoppio "          1 Menu ( bool )
      ConGola      "Presenza gola 0=no 1=sopra 2=sotto"    0
      idx_anta_sx  "" -1
      idx_anta_dx  "" -1

      //M4
      CMP2_AZIONI  ""    "V+"
      c_rivestimento "" [0,0,0]
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Ass_Comune_Cuc
      M4_VAR_NoGest = "X*;Y*;Z*;TipoFrontale;Sdoppia;FAttSdoppia;L_Anta_SX;Verso;Pos_Fro;AperturaMn"
      PosizManX = $Cuc_POSM_X_STD

      HIDE_ON_EDIT(idx_att,"L_Anta_SX;Pos_Fro;TipoFrontale;Sdoppia;FAttSdoppia",$ATTIVA_DLL)

      if($ATTIVA_DLL==0)  { HIDE = 0 }
      else                { HIDE = 3 }

      //Luca 01/02/2019
      //Sdoppia = 750
      Sdoppia = 733.5
      if( UN_PADRE("ScoccaT_Col*") )     { Sdoppia = 650 }
      if( UN_PADRE("ScoccaT_ColFrigo") ) { Sdoppia = 750 }

      if( UN_PADRE("ScoccaS_PensileCopriCaldaia") )
      {
         Sdoppia = 750
         if( VAR_VAL(PADRE(ATTUALE(),1),"Y")>750 )  { Sdoppia = 600 }

         //Luca 23/04/2020
         if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_Speciale")==1 )
         {
            FAttSdoppia = VAR_VAL(PADRE(ATTUALE(),1),"FAttSdoppia")
            //if( IS_VAR_FIXED(PADRE(ATTUALE(),1),"FAttSdoppia")==0 )
            //{
            //   FAttSdoppila = 0
            //   if( X>Sdoppia )  { FAttSdoppia = 1 }
            //}
         }
      }

      //if ( X>=Sdoppia & FAttSdoppia==1 )
      //{  HIDE_ON_EDIT(idx_att,"L_Anta_SX",0)  }

      GOSUB CucP_Assegnazioni

      Apertura = "BA"
      if( AperturaMn==1 ) { Apertura = "RB" }

      //Luca 05/12/2018 con apertura ribalta non si duplica mai
      if( Apertura=="RB" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"FAttSdoppia")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"FAttSdoppia") }
         FAttSdoppia = 0
      }

      Z = $Cuc_Spe_Ant
      if( UN_PADRE("ScoccaT_Col*") )
      {
         Z = $Cuc_Spe_Ant_Col
         //TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")
         if( UN_PADRE("ScoccaT_ColFalegnameria") == 1 )
         {
            if( ACTION() == 2 )  { VAR_SET_MODIFICATA(ATTUALE(),"TipoFrontale","") }
         }
         else
         {
            TipoFrontale = VAR_VAL(PADRE(ATTUALE(),1),"TipoFrontale")
         }
      }

      //Luca 27/04/2021
      if( VAR_EXIST(ATTUALE(),"cmp_name") ) { GEST_CODICE = "" }

      //Luca 04/05/2020
      if( ACTION()==0 ) { X_cmp=X Y_cmp=Y Z_cmp=Z }
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      //GOSUB CucP_OnSetupLivelli
      GOSUB OnSetupLivelli_Frontali
   }

   Vesti
   {
      GOSUB Cuc_VestiFrontale
      //GOSUB CucP_Vesti
      Verso = @Verso
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

   //Procedura cancella
   //{
   //   GOSUB CucP_Cancella
   //}

   Posiziona Cuc_AntaSingola an0
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Pos          = Pos_Fro
      @Apertura     = Apertura
      @TipoFrontale = TipoFrontale


      wk_sdoppia_ante = 0
      if( X>=Sdoppia & FAttSdoppia==1  ) { wk_sdoppia_ante = 1 }


      if( wk_sdoppia_ante )
      {
         @X = ( X -$Cuc_Aria_Ant_Ant_X )/2
         if(L_Anta_SX>0)  { @X = L_Anta_SX }

         ////Passo il verso poichè default è SX
         //$jbValG = VAR_VAL_STR(-1,"Cuc_VAL_VERSO_SX")
         //VAR_VALUESTR_SET(ATTUALE(),STRCAT($SufGest,$Cuc_GVersoApertura),$jbValG)

         @Verso = -1
         @AntaInCoppia  = 1
      }
      else
      {
         @Verso = Verso
         @AntaInCoppia  = 0
      }


      @M4_NO_OFFS = 1

      //aliasposiz = "an0"
      //GOSUB CucP_Posiziona

      idx_anta_sx = ATTUALE()
   }

   Posiziona Cuc_AntaSingola an1
   {
      @base_0 = base_0

      //if ( X>=Sdoppia & FAttSdoppia==1 )
      if( wk_sdoppia_ante )
      {
         if(L_Anta_SX>0)
         {
            @X = X -L_Anta_SX -$Cuc_Aria_Ant_Ant_X
            @base_0.x = base_3.x - @X
         }
         else
         {
            @base_0.x = base_0.x + (X - $Cuc_Aria_Ant_Ant_X)/2 +$Cuc_Aria_Ant_Ant_X
            @X = (X - $Cuc_Aria_Ant_Ant_X)/2
         }

         @escluso=0
      }
      else
      {
         @escluso=1
      }
      @Y = Y

      //Passo il verso poichè default è DX
      //$jbValG = VAR_VAL_STR(-1,"Cuc_VAL_VERSO_DX")
      //VAR_VALUESTR_SET(ATTUALE(),STRCAT($SufGest,$Cuc_GVersoApertura),$jbValG)

      @Verso         = 1
      @Pos           = Pos_Fro
      @Apertura      = Apertura
      @TipoFrontale  = TipoFrontale
      @AntaInCoppia  = 1

      @M4_NO_OFFS = 1

      //aliasposiz     = "an1"
      //GOSUB CucP_Posiziona

      idx_anta_dx = ATTUALE()
   }
}

//Elemento Cuc_AntaSingolaFrigo
//{
//   Descrizione = "Anta Singola"
//   Code        = ATS
//   Gruppo      = "Frontali"
//   Tipo        = Contenitore
//   Forma       = ""
//   Altimetro   Cuc_Altim_Fro Auto
//   Alias       Frontale;CamInciso;CamMdFrontali
//
//   Variabili
//   {
//      #include %path_bdm%\var_db.inc
//
//      VAR_Revisione_FLAPP  "" 0
//
//      X              "Larghezza"                         568
//      //ShowAlways
//      Y              "Altezza"                           686
//      //ShowAlways
//      Yprec          "Altezza"                           686
//      Z              "profondita' anta"                   18
//
//      //TipoFrontale      "Tipologia Frontale"             "A"
//      TipoFrontale      "Tipologia Frontale"              0
//
//      AntaSuperiore_Forno "" 0
//
//      FroGrafica     "Grafica friontale"                 ""
//      Pos            ""                                    1
//      PosHFro        "Altezza posiz. Frontale per posizionamento maniglia"  0
//      escludi_man    "esclusione posizionamento maniglia"  0
//      sdoppia_man    "doppia maniglia"                     0
//      modello        ""                                  ""
//      modello_prec   ""                                  "NN"
//      Posizione      ""                                    0
//      RetroBase      ""                                    0
//      Verso          "Verso apertura ante"                -1
//      Apertura       "tipo Anta"                         "BA"
//      AntaInCoppia   ""                                    0
//      Hide_Vano      ""                                    1
//      ConGola        "Presenza gola 0=no 1=sopra 2=sotto"  0
//      //LZ 29/03/2021 - Separo gestione alleggerito
//      Alleggerita    "Anta alleggerita"                    0
//
//      ////dedicate al tab eredita se necessario
//      //PosManOpzY     "Posizione manOpzionale in Y"       ""
//      //OrieMan        "" ""
//      //
//      ////solo per creazione composti
//      //XPosMan        "XPos" "C"
//      //YPosMan        "YPos" "A"
//      //DX_Man         "DX_pos" 30
//      //DY_Man         "DY_pos" 30
//      //
//      ////i valori ci sono solo per action>0
//      //Passo_Man "" 30
//      //X_Man    "" 0
//      //X_ManMN  "" 0
//      //Y_Man    "" 0
//      //Y_ManMN  "" 0
//      //Z_Man    "" 0
//
//      //GT_RICALCOLO_PA2        "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave
//      //GT_RICALCOLO_CHVARS     "disabilita il ricalcolo gestionale dopo forzatura variabili" 1 NoSave
//
//      TestoScritta  "testo riportato nella scritta"  ""
//
//      //maniglia FLAPP
//      ConManigliaFLAPP ""  0
//      Man_Orie         "" "O"
//      Man_PosY         "" "C"
//      Man_PosX         "" "L"
//      Man_OffX         ""  0
//      Man_OffY         ""  0
//
//      perRADICE "" ""
//      RADICE "" ""
//
//      COD_EREDITA      ""      "PRE;POST;C011_PRE"
//
//      XGLASS      "Num. XGLASS" ""
//   }
//
//   Assegnazioni
//   {
//      GOSUB AssComune
//
//      Z = $Cuc_Spe_Ant
//      if( UN_PADRE("ScoccaT_Col*") )                { Z = $Cuc_Spe_Ant_Col }
//      //Luca 23/04/2020
//      if( UN_PADRE("ScoccaS_PensileCopriCaldaia") ) { Z = 20 }
//
//      //GOSUB Stato_8
//
//      //if(RetroBase)  {  idx_topl = ATTUALE()  }
//      //// visibilità di default solo in action=0
//      //if( ACTION()==0 )    {  HIDE = 1-$ATTIVA_DLL }
//
//      GOSUB CucP_Assegnazioni
//
//      //Luca 04/05/2020
//      if( ACTION()==0 ) { X_cmp=X Y_cmp=Y Z_cmp=Z }
//   }
//
//   PuntiNotevoli
//   {
//      GOSUB punti
//
//      vano_0_0       = base_0
//      vano_l_0       = X
//      vano_p_0       = Z
//      vano_hide_0    = Hide_Vano
//
//      pnt_fro_i      = base_1
//      pnt_fro_s      = alto_1
//      pnt_fro_sx     = base_1
//      pnt_fro_dx     = base_2
//      pnt_fro_scr    = base_1
//      pnt_fro_scr.x  = base_1.x + X/2
//
//      GOSUB CucP_PuntiNotevoli
//   }
//
//   //Procedura OnQueryBdmLocal
//   //{
//   //   GOSUB CucP_OnQueryBdmLocal
//   //}
//
//   //Procedura OnSetupLivelli
//   //{
//   //   GOSUB CucP_OnSetupLivelli
//   //}
//
//   Controlli
//   {
//      GOSUB CtrlComune
//
//      GOSUB Ctrl_PosaManigliaFLAPP
//
//      ////mantenere Ctrl_var_gest come prima riga di Controlli.
//      //GOSUB Ctrl_var_gest
//      //GOSUB Ctrl_Generici
//      //GOSUB LoadSetFro
//      GOSUB AttrezzaGraficaFrontale
//      //GOSUB DecodificaParametriManiglie
//      //GOSUB CucP_Cnt_CamInciso
//      //GOSUB CucP_Cnt_MdF
//
//
//      //LZ 29/03/2021 - Separo gestione alleggerito
//      //Luca 10/10/2019 21037: Colonne cucina 2.0: anta autoportante alleggerita
//      Alleggerita=0
//      if( UN_PADRE("ScoccaT_ColFrigo")
//        | UN_PADRE("VanoFrigo_ColFalegnameria") )
//      {
//         wk_tipoanta = VAR_VAL_STR(PADRE(ATTUALE(),2),"GEST_C031")
//         if(wk_tipoanta=="FR001")
//         {
//           if( Y>=1939 | X >700 ) { Alleggerita=1 }
//         }
//         else
//         {
//            if( X>700 ) { Alleggerita=1 }
//         }
//      }
//
//      perRADICE = "ANBA"
//
//      //Luca 23/04/2020
//      if( UN_PADRE("ScoccaS_PensileCopriCaldaia") ) { perRADICE = "ANCC" }
//
//      //Luca 27/04/2020
//      if( UN_PADRE("ScoccaT_BaseAngoloIsola") )     { perRADICE = "ANBAAP" }
//
//      if( UN_PADRE("ScoccaT_Col*") )
//      {
//         perRADICE = "ANCO3"
//         //if( TipoFrontale==2 ) { perRADICE = "ANCON1" }
//         //if( TipoFrontale==3 ) { perRADICE = "ANCON2" }
//         //if( TipoFrontale==4 )
//         //{
//         //   if( Verso<0 )  { perRADICE = "ANCON1" }
//         //   else           { perRADICE = "ANCON2" }
////}
//         //LZ 14/11 modificate radici ante colonne
//         if( TipoFrontale==2
//           | TipoFrontale==3
//           | TipoFrontale==4 ) { perRADICE = "ANCON" }
//
//         //LZ 29/03/2021 - Separo gestione alleggerito
//         ////Luca 10/10/2019 21037: Colonne cucina 2.0: anta autoportante alleggerita
//         //if( UN_PADRE("ScoccaT_ColFrigo") )
//         //{
//         //   wk_tipoanta = VAR_VAL_STR(PADRE(ATTUALE(),2),"GEST_C031")
//         //   //Luca 03/12/2020 riporto modifiche fatte da LAGO
//         //   // Gestione L750
//         //   //LZ 14/11 cambiate regole tecniche
//         //   //if( X>=597 & Y>=1332 & wk_tipoanta=="FR001" ) { perRADICE = STRCAT(perRADICE,"AL") }
//         //   //if( Y>=1939 & wk_tipoanta=="FR001" ) { perRADICE = STRCAT(perRADICE,"AL") }
//         //   if(wk_tipoanta=="FR001")
//         //   {
//         //     if( Y>=1939 | X >700 ) { perRADICE = STRCAT(perRADICE,"AL") }
//         //   }
//         //   else
//         //   {
//         //      if( X>700 ) { perRADICE = STRCAT(perRADICE,"AL") }
//         //   }
//         //}
//         if( Alleggerita == 1 ) { perRADICE = STRCAT(perRADICE,"AL") }
//      }
//
//      //Alberto B. 14/08/20
//      if( UN_PADRE("ScoccaS_PensileAngolo") ) { perRADICE = "ANPA" }
//
//      RADICE = perRADICE
//
//      GOSUB SetCODICE_AnteForno_Cuc
//
//      GOSUB CucP_Controlli
//
//     // Raffaele 20.10.2020
//      antaSciolta = 0
//      if (IS_MATCH(NOME(PADRE(idx_att, -1)), "Anta*") == 1  &  PADRE(idx_att, 1) == PADRE(idx_att, -1))  { antaSciolta = 1 }
//
//      if ( antaSciolta == 0
//         & IS_MATCH(VAR_VAL_STR(idx_att, "MDFSys_Load_ini"), "OnMacro*") != 1
//         )
//         { MdF_Visualize_sat = "OnInterat" }
//
//      // Per visualizzare solo il cilindro
//      if (antaSciolta == 1)  { MCB_Vis_CerBat = 1 }
//      GOSUB MdF_sat_CerBat
//
//     // Raffaele 20.10.2020
//      MdF_Load_COMANDO2 = 1
//      // 10.04.2019
//      MdF_Load_Interat = "CerBat;CerRib"
//      GOSUB MdF_ADD_Reg_Interat
//   }
//
//   Gestionale
//   {
//      GOSUB GestComune
//
//      //if( $ATTIVA_DLL==1 )
//      //{
//      //   //già sopra !! GOSUB Ctrl_var_gest
//      //   GOSUB CucP_SetVarGest
//      //   if( RetroBase>0 ) { RADICE = STRCAT("RET",RADICE }
//      //
//      //   //controllo la disponibilità della fin telaio per l'anta vetro se non trovo riscontro
//      //   // passo il default fin frontale
//      //   // uso IS_MATCH per gestire frontali speciali ( terminali, curvi....)
//      //   //e allineo controllo a quello negli altri frontali
//      //   //if(STRCMP(TipoFrontale,"V")==0)
//      //   //{  FIN_var = VAR_VAL_STR(-1,"Cuc_GFinTelFro")  }
//      //   if( IS_MATCH(TipoFrontale,"V*") )
//      //   {
//      //      FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreTelFro")
//      //      if( STRLEN(FIN_var)<=0 )
//      //   {  FIN_var = VAR_VAL_STR(-1,"Cuc_GFinTelFro")  }
//      //   }
//      //   else
//      //   {  FIN_var = VAR_VAL_STR(-1,"Cuc_GColoreFro")  }
//      //
//      //   //Aggiungo variante fissa solo su frontali che viene utilizzata
//      //   // in caso di frontali con vetro per gestirne il colore
//      //   FIN_varVetro = VAR_VAL_STR(-1,"Cuc_GFinFroVet")
//      //
//      //   GOSUB Gest_idx_GFin
//      //   GOSUB CucP_Gestionale
//      //}
//
//      GOSUB Set_Gest_C090_AntaSing
//
//      GOSUB CAMBIA_VAR
//
//      GOSUB GestComune_Post
//   }
//
//   Procedura OnTabEredita
//   {
//      if( TABER_REGOLA=="PRE" )
//      {
//         GOSUB Set_Gest_C017
//         GOSUB Set_Gest_C007_AntaSing
//
//         GOSUB Set_Gest_C004_AntaSingNow
//
//         //Luca 25/09/2020
//         GOSUB Set_Gest_C090_AntaSing
//      }
//
//      GOSUB Set_Gest_C011
//
//      if( TABER_REGOLA=="POST" )
//      {
//         //Luca 23/07/2019  mantis 20074
//         //'bloccare solo l'apertura dell'anta lavastoviglie, non delle alte,'
//         //GOSUB Set_Gest_C004_AnteColLvst
//
//         GOSUB Set_Gest_C007_Ante
//      }
//   }
//
//   //Procedura PostControl
//   //{
//   //   GOSUB CucP_PostControl
//   //}
//
//   Procedura azione
//   {
//      azione_idx_pdr = PADRE(idx_att,2)
//      //aperture disponibili
//      //azione_verso = Verso
//      if( Verso==-1 )   { azione_verso = "SX"   }
//      else              { azione_verso = "DX"   }
//      //Battente           BA
//      if( Apertura=="BA" )     {  GOSUB azione_apertura_battente   }
//      //"Pacchetto"       "LB" -Libro verticale
//      //anta inferiore -> azione_posizione!=1
//      if( Apertura=="LB" )   {  GOSUB azione_apertura_libro      }
//
//      if( Apertura=="RB" )     { GOSUB azione_apertura_ribalta  }
//
//      ////Soffietto aperture soffietto
//      ////anta DX -> Pos_Fro = 1, SX -->Pos_Fro =2
//      //if( STRCMP(Apertura,"SO")==0 )   {  GOSUB azione_AngoloLibro         }
//      ////Soffietto aperture battenti
//      //if( STRCMP(Apertura,"SB")==0 )   {  GOSUB azione_angoloL             }
//   }
//
//   Procedura cancella
//   {
//      if( VAR_EXIST(-1,"StartingDel__")
//        & INSERIMENTO2(ATTUALE())==$ins2_componente )
//      {
//         if( $StartingDel__==ATTUALE() )
//         {
//            $no_cancel=1
//            //Luca 09/01/2019 per ora cancello il padre
//            COMANDO(STRCAT("CANCELLA ",STR(PADRE($StartingDel__,1)), " //cancello anta"))
//         }
//         else                             {  $no_cancel=0   }
//      }
//      //GOSUB CucP_Cancella
//   }
//
//   Posiziona ManigliaFLAPP ma1
//   {
//      GOSUB posa_ManigliaFLAPP
//   }
//
//   //Posiziona Cuc_Maniglia ma1
//   //{
//   //   GOSUB posa_maniglia
//   //   GOSUB CucP_PassaColMan
//   //   aliasposiz = "ma1"
//   //   GOSUB CucP_Posiziona
//   //}
//   //
//   //Posiziona Cuc_Maniglia ma2
//   //{
//   //   @escluso = 1
//   //   if( sdoppia_man )
//   //   {
//   //      @escluso = 0
//   //      GOSUB posa_maniglia
//   //      GOSUB CucP_PassaColMan
//   //      aliasposiz = "ma2"
//   //      GOSUB CucP_Posiziona
//   //   }
//   //}
//
//   //Posiziona SCRITTA_CAD scr
//   //{
//   //   GOSUB PosaScrittaCAD_Fro
//   //}
//
//   //debug
//   //debug Posiziona Blocco fro
//   //debug {
//   //debug    GOSUB Posa_Elemento
//   //debug }
//}

//} FRONTALI

//{ GENERICI
Elemento FornoGenerico
{
   Descrizione = "Forno Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   //Attrezzabile ScoccaT_BaseForno
   //ScoccaT_ColForno ScoccaT_ColElettr ScoccaT_ColAnteRientranti
   //Altimetro Auto
   Alias DaComStd;Eldom;Forno

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      ELD_TIPO_ELDOM "" "FORNO"
      SoloGrafica "" 0

      X    ""  500
      Xpdr ""    0
      Y    ""  500
      Z    ""  560

      X_FRO "Larghezza Frontale" 600
      Y_FRO "Altezza Frontale"   594
      Z_FRO ""                    23
      TipoEldom ""                ""
                       "" 0
      VAR_FN_h_min     "" 0
      VAR_FN_h_max     "" 0
      VAR_FN_h_fro     "" 0
      VAR_FN_delta_b   "" 0
      VAR_FN_rot_fro   "" 0

      HIDE "" 0
      forno_prec  "" ""
      forno_att   "" ""
      nome_att    "" "FORNO"

      GraficaBN   "Grafica forno BDM" 1
      NomeFileImmagine "per grafica con texture" ""
      //cod_gest   "Codice per il ricalcolo gestionale"   "__"
      //ELD_CODICE "Codice elettrodomestico"   "__"

#ifdef TEC
      DU_DIRETTI_E002 "" 1 NoSave
#endif

      X_LAV "Larghezza Lavorazione"  600
      Y_LAV "Altezza Lavorazione"    594
      Z_LAV "Profondita Lavorazione"  18

      X_VANO_INC "Larghezza vano incasso"    500
      Y_VANO_INC "Altezza vano incasso"      500
      Z_VANO_INC "Profondita vano incasso"   500

      //x visualizzazione grafica
      YVanoEld       "Altezza Vano Eldom"     0
      VAR_YFroEld    "Altezza Frontale Eldom" 0
      VAR_RotFroEld  "Rotazione Negativa"     0
      VAR_DeltaBasso "Delta Basso"            0

      GEST_CODICE "" "FRN"

      IndiceEldom "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Luca 14/10/2019
      //GOSUB LeggiDatiForno
      GEST_CODICE = "FRN"
      var_gest_eldom = "GEST_E002"

      GOSUB LeggiDatiEldomGen

      X_FRO = X
      Y_FRO = Y
   }

   PuntiNotevoli
   {
      //X = X_FRO
      //Y = Y_FRO
      //Z = Z_FRO

      GOSUB punti
   }
   #include %path_bdm%\TLib\Orie.inc

   //Attrezza
   //{
   //   idx_att = ATTUALE()
   //   idx_pdr = PADRE(idx_att,1)
   //   ORDN_IDX_VANO = idx_pdr
   //   base_0  = @base_1
   //   if( STRCMP(NOME(idx_pdr),"ScoccaT_BaseForno")!=0
   //     & STRCMP(NOME(idx_pdr),"ScoccaT_ColForno")!=0
   //     & STRCMP(NOME(idx_pdr),"ScoccaT_ColAnteRientranti")!=0
   //     & STRCMP(NOME(idx_pdr),"ScoccaT_ColFornoMicro")!=0 )
   //   {
   //      if(escluso==0 & CMD()==$CMD_INTERATTIVO & $CNP==0)
   //      {
   //         escluso=1
   //         DISPLAY2( MSG(41) )
   //         COMANDO(STRCAT("CANCELLA ", STR(ATTUALE())))
   //         EXIT()
   //      }
   //   }
   //   else
   //   {
   //      if( NOME(idx_pdr)=="ScoccaT_BaseForno" ) { base_0.y = @Alt_Forno + @VAR_Alt_Zoc }
   //      else                                     { base_0.y = $livello  }
   //
   //      if( VAR_EXIST(idx_pdr,"Y_Forno") ) { Y_FRO = @Y_Forno }
   //   }
   //}

   //Procedura OnTabEredita
   //{
   //   GOSUB CucP_OnTabEredita
   //}

   Controlli
   {
      GOSUB CtrlComune
      //GOSUB StdP_ScegliEldom
      //GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $NORID_X + $NORID_Y + $NORID_Z + $MAKE_ROW
      GEST_X = 0 GEST_Y = 0 GEST_Z = 0

      //if( SoloGrafica!=0 )
      //{
      //   FLAG_RADICE = $NO_RAD
      //   if( SoloGrafica==2 ) { GEST_CODICE="" }
      //}

      //GOSUB Ctrl_RigaEldomInEsploso

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if($StartingDel__==ATTUALE()) { $no_cancel=1 }
         else                          { $no_cancel=0 }
      }
   }

   Posiziona Blocco Fro
   {
      @escluso = 0
      if( InsEldom!=1 )   { @escluso = 1 }

      @base_0   = base_1
      @base_0.z = base_1.z - Z_FRO
      @base_0.y = base_0.y + VAR_DeltaBasso

      @X = X_FRO
      @Y = Y_FRO
      @Z = Z_FRO

      //@m_rivestimento = STRCAT($path_bmp,"FornoGenerico.png")
      @m_rivestimento = STRCAT($path_bdm,"bmp\FornoGenerico.png")


      //if( GraficaBN )
      //{
      //   @c_rivestimento = c_rivestimento_ELDOM
      //   @m_rivestimento = ""
      //}
      //else { @m_rivestimento = NomeFileImmagine }
   }

   Posiziona Blocco f1
   {
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y
      //@base_0.z = base_0.z + 80
      @base_0.z = base_0.z
      @X = X - 40
      @Y = YVanoEld - 60
      //@Z = Z - 80 - Z_FRO
      @Z = Z - Z_FRO
      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco f12
   {
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y + YVanoEld - 60
      //@base_0.z = base_0.z + 120
      @base_0.z = base_0.z + 40
      @X = X - 40
      @Y = 60
      //@Z = Z - 120 - Z_FRO
      @Z = Z - 40 - Z_FRO
      @c_rivestimento = $c_alluminio
   }

   //Posiziona Blocco IngFor
   //{
   //   @base_0 = base_0
   //
   //   @X = X
   //   @Y = Y
   //   @Z = Z
   //
   //   @c_rivestimento = [120,255,120]
   //   @f_rivestimento = "0.9"
   //}
}

Elemento FornoDbg
{
   Descrizione = "Forno debug"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X    ""  500
      Y    ""  500
      Z    ""  560

      VAR_YFroEld    "" 0
      VAR_RotFroEld  "" 0
      VAR_DeltaBasso "" 0
      YVanoEld       "" 0

      c_frontale    "" [100,100,100]  XyzAbsolute
      c_scocca      "" [80,80,80]  XyzAbsolute

      GraficaEldom   "Tipologia FORNO/MICRO"  1    Menu ( TpEdlFM )
   }

   Assegnazioni
   {
      GOSUB AssComune

      //DescEdit__ = "FORNO x DEBUG"

      DescEdit__ = "FORNO"
      M4_MIS     = "GraficaEldom"
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano_0_0 = base_0
      //vano_l_0 = X
      //vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Procedura VR_M2VIRTUO_ELDOM
   //{
   //   GOSUB VR_M2VIRTUO_ELDOM
   //}

   Posiziona Blocco f1
   {
      @escluso = SE_NUM(YVanoEld>0,0,1)
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 80
      @X = X - 40
      @Y = YVanoEld
      // - 60
      @Z = Z - 80
      @c_rivestimento = c_scocca
   }

   //Posiziona Blocco f12
   //{
   //   @base_0.x = base_0.x + 20
   //   @base_0.y = base_0.y + YVanoEld - 60
   //   @base_0.z = base_0.z + 120
   //   @X = X - 40
   //   @Y = 60
   //   @Z = Z - 120
   //   @c_rivestimento = c_scocca
   //}

   Posiziona Blocco fro
   {
      @escluso = SE_NUM(VAR_YFroEld>0,0,1)

      @base_0.x = base_0.x + 2
      @base_0.y = base_0.y + VAR_DeltaBasso
      @base_0.z = base_0.z + Z
      @X = X - 4
      //@Y = VAR_YFroEld
      @Y = VAR_YFroEld - SE_NUM(VAR_DeltaBasso>0,VAR_DeltaBasso,0)
      @Z = 25
      @c_rivestimento  = c_frontale
      //@m_rivestimento = STRCAT($path_bdmp,"bmp\FornoGenerico.png")


      wk_image = STRCAT($path_bdm,"bmp\Eldom\FORNO00",STR(GraficaEldom),".png")
      if( GraficaEldom > 50 )
      {
         wk_image = STRCAT($path_bdm,"bmp\Eldom\FORMICRO00",STR(GraficaEldom-50),".png")
      }
      if( GraficaEldom > 60 )
      {
         wk_image = STRCAT($path_bdm,"bmp\Eldom\CANTINA00",STR(GraficaEldom-60),".png")
      }
      @m_rivestimento = wk_image
   }

   //Posiziona Blocco fro2
   //{
   //   @base_0.x = base_0.x + 2
   //   @base_0.y = base_0.y + VAR_DeltaBasso
   //   @base_0.z = base_0.z + Z + 20
   //   @X = X - 4
   //   @Y = VAR_YFroEld
   //   @Z = 1
   //   @M4_P1 = [@base_0.x      , @base_0.y, @base_0.z]
   //   @M4_P2 = [@base_0.x + @X , @base_0.y, @base_0.z]
   //   @M4_P3 = [@base_0.x + @X , @base_0.y + @Y, @base_0.z]
   //   @M4_P4 = [@base_0.x      , @base_0.y + @Y, @base_0.z]
   //   @M4_TEXTURE = STRCAT($path_bdm,"bmp\FornoGenerico.png")
   //}

   Posiziona Blocco rotn
   {
      @escluso = 1
      #ifdef TE
         @escluso = 0
      #endif

      @X = X - 4
      @Y = VAR_RotFroEld
      @Z = 20

      @base_0.x = base_0.x + 2
      @base_0.y = base_0.y + SE_NUM( VAR_DeltaBasso < 0, VAR_DeltaBasso, 0) - VAR_RotFroEld
      @base_0.z = base_0.z + Z

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

Elemento FrigoGenerico
{
   Descrizione = "Frigo Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   //Attrezzabile ScoccaT_BaseFrigo ScoccaT_ColFrigo
   Alias DaComStd;Eldom;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      ELD_TIPO_ELDOM "" "FRIGO"
      SoloGrafica "" 0

      X  ""   500
      Y  ""   500
      Z  ""   500

      VAR_FR_h_anta_inf "" 0
      VAR_FR_h_anta_sup "" 0
      VAR_FR_delta_fro  "" 0
      VAR_FR_aria_sup   "" 0
      VAR_FR_h_zocc     "" 0
      VAR_FR_h_max      "" 0
      VAR_FR_h_min      "" 0

      X_FRO "" 1
      Y_FRO "" 1
      Z_FRO "" 1

      TipoEldom    "" ""

      HIDE "" 0

      //DU_DIRETTI_FRI "" 1 NoSave
      //DU_DIRETTI_FRP "" 1 NoSave

      GEST_CODICE "" "FRG"

#ifdef TEC
      DU_DIRETTI_E006 "" 1 NoSave
#endif
   }

   Assegnazioni
   {
      DescEdit__ = "FRIGO"
      GOSUB AssComune

      //GOSUB LeggiDatiFrigo
      GEST_CODICE = "FRG"
      var_gest_eldom = "GEST_E006"
      GOSUB LeggiDatiEldomGen

      X_FRO = X
      Y_FRO = Y
      Z_FRO = Z
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\TLib\Orie.inc

   //Attrezza
   //{
   //   base_0   = $vano_0
   //   base_0.y = 0
   //   X = $larghezza
   //   Y = @Yt - $Cuc_Spe_Cop
   //   Z = $profondita
   //}

   Controlli
   {
      GOSUB CtrlComune
      //ORDN_IDX_VANO = PADRE(ATTUALE(),1)
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $NORID_X + $NORID_Y + $NORID_Z + $MAKE_ROW
      GEST_X = 0 GEST_Y = 0 GEST_Z = 0

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if($StartingDel__==ATTUALE()) { $no_cancel=1 }
         else                          { $no_cancel=0 }
      }
   }

   Posiziona Blocco fri
   {
      @escluso = 0

      if( InsEldom==0 & SoloGrafica==0 ) { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.z = base_0.z
      @base_0.y = base_0.y

      @X = X
      @Y = Y
      @Z = Z - 20

      @c_rivestimento = [240,240,240]
      //@c_rivestimento = [255,120,120]
      //@f_rivestimento = "0.5"
   }

   Posiziona Blocco AntInf
   {
      @escluso = 0

      if( InsEldom==0 & SoloGrafica==0 ) { @escluso = 1 }
      //if( InsEldom==0 & SoloGrafica==0 ) { @escluso = 1 }

      @base_0.x = base_0.x + 5
      @base_0.y = base_0.y + VAR_FR_h_zocc
      @base_0.z = base_0.z + Z - 20

      @X = X - 10
      @Y = VAR_FR_h_anta_inf
      @Z = 20

      //@c_rivestimento = [255,120,120]
      @c_rivestimento = [240,240,240]
      //@f_rivestimento = "0.5"
   }

   // Frigo doppia anta blocco x anta inferiore
   Posiziona Blocco AntSup
   {
      @escluso = 1
      if( VAR_FR_h_anta_sup>0 ) { @escluso = 0 }

      @base_0.x = base_0.x + 5
      @base_0.y = base_0.y + VAR_FR_h_anta_inf + VAR_FR_h_zocc + VAR_FR_delta_fro
      @base_0.z = base_0.z + Z - 20

      @X = X - 10
      @Y = VAR_FR_h_anta_sup
      @Z = 20

      @c_rivestimento = [240,240,240]
      //@f_rivestimento = "0.5"
   }
}

Elemento FrigoDbg
{
   Descrizione = "Frigo Generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X  ""   500
      Y  ""   500
      Z  ""   500

      VAR_YZoccFr   "" 0 Implicit
      VAR_DeltaAnFr "" 0 Implicit
      VAR_YAntaInFr "" 0 Implicit
      VAR_YAntaSuFr "" 0 Implicit


      c_frontale    "" [100,100,100]  XyzAbsolute
      c_scocca      "" [80,80,80]  XyzAbsolute
   }

   Assegnazioni
   {
      GOSUB AssComune
      //DescEdit__ = "FRIGO x DEBUG"
      DescEdit__ = MSG(1278)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco fri
   {
      @base_0.x = base_0.x
      @base_0.z = base_0.z
      @base_0.y = base_0.y

      @X = X
      @Y = Y
      @Z = Z - 20
      @c_rivestimento = [240,240,240]
   }

   Posiziona Blocco meta
   {
      @escluso = SE_NUM(VAR_YAntaSuFr>0,0,1)
      @base_0.x = base_0.x
      @base_0.z = base_0.z + Z
      @base_0.y = base_0.y + VAR_YZoccFr + VAR_YAntaInFr + VAR_DeltaAnFr/2

      @X = X
      @Y = 1
      @Z = 20
      @c_rivestimento = [240,240,240]
   }

   Posiziona Blocco AntInf
   {
      @escluso = SE_NUM(VAR_YAntaInFr>0,0,1)
      @base_0.x = base_0.x + 2
      @base_0.y = base_0.y + VAR_YZoccFr
      @base_0.z = base_0.z + Z

      @X = X - 10
      @Y = VAR_YAntaInFr
      @Z = 20

      @c_rivestimento = c_frontale
   }

   Posiziona Blocco AntSup
   {
      @escluso = SE_NUM(VAR_YAntaSuFr>0,0,1)
      @base_0.x = base_0.x + 2
      @base_0.y = base_0.y + VAR_YZoccFr + VAR_YAntaInFr + VAR_DeltaAnFr
      @base_0.z = base_0.z + Z

      @X = X - 10
      @Y = VAR_YAntaSuFr
      @Z = 20

      @c_rivestimento = c_frontale
   }
}

//microonde
//cantinetta
//scaldavivande
Elemento EldomGenerico
{
   Descrizione = "Forno Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   //Attrezzabile ScoccaT_BaseForno
   //ScoccaT_ColForno ScoccaT_ColElettr ScoccaT_ColAnteRientranti
   //Altimetro Auto
   Alias DaComStd;Eldom;Forno

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      ELD_TIPO_ELDOM "" "FORNO"
      SoloGrafica "" 0

      X    ""  500
      Xpdr ""    0
      Y    ""  500
      Z    ""  560

      X_FRO "Larghezza Frontale" 600 ShowAlways
      Y_FRO "Altezza Frontale"   594 ShowAlways
      Z_FRO ""                    18

      TipoEldom       ""  1
      var_gest_eldom  "" ""

      VAR_FN_h_min     "" 0
      VAR_FN_h_max     "" 0
      VAR_FN_h_fro     "" 0
      VAR_FN_delta_b   "" 0
      VAR_FN_rot_fro   "" 0

      HIDE "" 0
      forno_prec  "" ""
      forno_att   "" ""
      nome_att    "" "FORNO"

      GraficaBN   "Grafica forno BDM" 1
      NomeFileImmagine "per grafica con texture" ""
      //cod_gest   "Codice per il ricalcolo gestionale"   "__"
      //ELD_CODICE "Codice elettrodomestico"   "__"

#ifdef TEC
      DU_DIRETTI_E003 "" 1 NoSave
      DU_DIRETTI_E005 "" 1 NoSave
      DU_DIRETTI_E009 "" 1 NoSave
#endif

      X_LAV "Larghezza Lavorazione"  600
      Y_LAV "Altezza Lavorazione"    594
      Z_LAV "Profondita Lavorazione"  18

      X_VANO_INC "Larghezza vano incasso"    500
      Y_VANO_INC "Altezza vano incasso"      500
      Z_VANO_INC "Profondita vano incasso"   500

      //x visualizzazione grafica
      YVanoEld       "Altezza Vano Eldom"     0
      VAR_YFroEld    "Altezza Frontale Eldom" 0
      VAR_RotFroEld  "Rotazione Negativa"     0
      VAR_DeltaBasso "Delta Basso"            0

      GEST_CODICE  "" ""

      IndiceEldom "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( VAR_EXIST(ATTUALE(),"codice_PREC")==0 ) { codice_prec = GEST_CODICE }

      //DescEdit__  = "FORNO"
      GEST_CODICE = "MCR"
      var_gest_eldom = "GEST_E005"

      if( TipoEldom==2 ) { GEST_CODICE = "SCV" var_gest_eldom = "GEST_E003" }
      //cantinetta
      if( TipoEldom==3 ) { GEST_CODICE = "CNT" var_gest_eldom = "GEST_E009" }

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

      //GOSUB LeggiDatiEldom
      GOSUB LeggiDatiEldomGen
   }

   PuntiNotevoli
   {
      X = X_FRO
      Y = Y_FRO
      //Z = Z_FRO

      GOSUB punti
   }
   #include %path_bdm%\TLib\Orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $NORID_X + $NORID_Y + $NORID_Z + $MAKE_ROW
      GEST_X = 0 GEST_Y = 0 GEST_Z = 0

      //if( SoloGrafica!=0 )
      //{
      //   FLAG_RADICE = $NO_RAD
      //   if( SoloGrafica==2 ) { GEST_CODICE="" }
      //}

      //GOSUB Ctrl_RigaEldomInEsploso

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if($StartingDel__==ATTUALE()) { $no_cancel=1 }
         else                          { $no_cancel=0 }
      }
   }

   Posiziona Blocco Fro
   {
      @escluso = 0

      if( InsEldom!=1 )   { @escluso = 1 }

      @base_0   = base_1
      @base_0.z = base_1.z - Z_FRO
      @base_0.y = base_0.y + VAR_DeltaBasso

      @X = X_FRO
      @Y = Y_FRO
      @Z = Z_FRO
      if( Y_FRO==0 ) { @Y = Y }

      //@m_rivestimento = STRCAT($path_bmp,"MicroGenerico.png")
      //if( TipoEldom == 2 ) { @m_rivestimento = STRCAT($path_bmp,"ScaldaVivandeenerico.png") }
      //if( TipoEldom == 3 ) { @m_rivestimento = STRCAT($path_bmp,"CantinettaGenerico.png") }

      @m_rivestimento = STRCAT($path_bdm,"bmp\MicroGenerico.png")
      if( TipoEldom == 2 ) { @m_rivestimento = STRCAT($path_bdm,"bmp\ScaldaVivandeenerico.png") }
      if( TipoEldom == 3 ) { @m_rivestimento = STRCAT($path_bdm,"bmp\CantinettaGenerico.png") }
   }

   Posiziona Blocco f1
   {
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y
      //@base_0.z = base_0.z + 80
      @base_0.z = base_0.z
      @X = X - 40
      @Y = YVanoEld
      //@Z = Z - 80 - Z_FRO
      @Z = Z - Z_FRO
      @c_rivestimento = $c_alluminio
   }
}

Elemento ScassoTopGenerico
{
   Descrizione = "Piano Cottura Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_* ScrivaniaMuro_AIR
   Alias CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione  "" 0  SaveAlways

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways
      Filler2            " " "" ShowAlways

      X    "Larghezza"   500
      Y    "Altezza"     100
      Z    "Profondità"  560

      VAR_ELD_EldomX         "" 0 SaveAlways
      VAR_ELD_EldomZ         "" 0 SaveAlways

      //può essere solo in appoggio o filotop
      VAR_ELD_TipoIncasso    "" 0 SaveAlways
      VAR_ELD_TipoPC         "" 0


      VAR_ELD_ScassoX        "" 0 SaveAlways
      VAR_ELD_ScassoZ        "" 0 SaveAlways

      VAR_ELD_ScassoDelta    "" 0 SaveAlways
      VAR_ELD_ScassoMaxX     "" 0 SaveAlways
      VAR_ELD_ScassoMaxZ     "" 0 SaveAlways

      VAR_ELD_Raggio         "" 0 SaveAlways
      VAR_ELD_RaggioInt      "" 0 SaveAlways

      VAR_ELD_YSopra         "" 0 SaveAlways
      VAR_ELD_YRientr        "" 0 SaveAlways

      //per filo top e sottotop
      VAR_ELD_FT_RieX        "" 0 SaveAlways
      VAR_ELD_FT_RieY        "" 0 SaveAlways
      VAR_ELD_FT_RieZ        "" 0 SaveAlways

      //riporto per compatibilità procedure
      VAR_ELD_ST_RieScS     ""  0

      //mi salvo i valori inseriti nella dialog dall'utente
      VAR_FirmaEldom       "" ""

   #ifdef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0 Boolean
   #endif

   #ifndef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0
   #endif

      idx_top "" -1
      Spe_Top "" -1
      idx_bas "" -1

      idx_cnear "" -1

      OffsetX       "Offset X (sx base-sx foro)"          0 Utente ( )
      OffsetZ       "Offset Z (fronte base-fronte foro)"  0 Utente ( )

      RigeneraScasso "Rigenera Scasso"      0 Boolean

      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""

      VediIngombro   "" 1 Boolean
      VediIngScassi  "" 0

      //Luca 15/10/2019 varibiale utilizzata dalle stampe per individuare gli elementi da quotare
      StpQuotaScasso "" 1

      HIDE "" 0

      CMP2_AZIONI      ""      "A"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_MIS = "Filler*;SchedaTecnica;OffsetX;OffsetZ"
   }

   PuntiNotevoli
   {
      X = VAR_ELD_ScassoX
      Z = VAR_ELD_ScassoZ

      GOSUB punti

      GOSUB DefPuntiScasso
   }
   #include %path_bdm%\TLib\Orie.inc

   Attrezza
   {
      GOSUB AttrezzaEldomSuTop
   }

   Controlli
   {
      GOSUB CtrlComune

      idx_bas = PADRE(ATTUALE(),1)

      GOSUB TrovaIdxTopDaScassare
      if( IS_IDX(idx_top) ) { Spe_Top = VAR_VAL(idx_top,"Y") }

      GOSUB SetVar_ScassoTopGenerico

      if( ACTION()!=2 )
      {
         GOSUB CtrlScasso_PCotturaLavello
      }

      //rigenera scasso manuale
      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

         GOSUB EliminaScassi
         //COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
         COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
      }

      GOSUB CtrlLimitiScassi_PCotturaLavello
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = ""
      RADICE = ""
      GOSUB Stato_7
      DescEdit__  = MSG(1018)

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB Elimina_Scasso
   }

   //grafica piano cottura -- superiore
   Posiziona Blocco ing_pc
   {
      @X = VAR_ELD_EldomX
      @Y = VAR_ELD_YSopra
      @Z = VAR_ELD_EldomZ
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
      @base_0.y = base_0.y + VAR_ELD_YRientr
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2

      @escluso = 1 - VediIngombro
      @f_rivestimento = "0.9"
      @c_rivestimento = [255,255,255]
      @m_rivestimento = ""
   }


   ////{ Blocchi ingombro scassi per debug
   //Posiziona Blocco scs_top
   //{
   //   @escluso = 1 - VediIngScassi
   //   @base_0.x = base_0.x
   //   @base_0.y = base_0.y - 10
   //   @base_0.z = base_0.z
   //
   //   @X = VAR_ELD_ScassoX
   //   @Y = Y + 20
   //   @Z = VAR_ELD_ScassoZ
   //
   //   @c_rivestimento = [255,120,255]
   //   @f_rivestimento = "0.9"
   //}
   //
   //Posiziona Blocco scs_stp
   //{
   //   @escluso = 1 - VediIngScassi
   //   @base_0.x = base_0.x + VAR_ELD_ST_RieScS
   //   @base_0.y = base_0.y
   //   @base_0.z = base_0.z + VAR_ELD_ST_RieScS
   //
   //   @X = VAR_ELD_ScassoX - 2*VAR_ELD_ST_RieScS
   //   @Z = VAR_ELD_ScassoZ - 2*VAR_ELD_ST_RieScS
   //
   //   @c_rivestimento = [255,120,255]
   //   @f_rivestimento = "0.9"
   //}
   ////} Blocchi ingombro scassi per debug

   //{ Scassi
   Posiziona BloccoSmussato_Scassa scs2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z

      @X = VAR_ELD_ScassoX
      @Y = Y + 30
      @Z = VAR_ELD_ScassoZ

      //Luca 27/03/2020
      if( Y < Spe_Top )
      {
         @Y = Spe_Top + 20
         @base_0.y = base_0.y + Y + 2 - @Y
      }

      @Raggio = VAR_ELD_Raggio
      //Luca 10/06/2020
      //if( VAR_ELD_TipoIncasso==1 ) { @Raggio = VAR_ELD_RaggioInt }
      if( VAR_ELD_TipoIncasso==1
        | VAR_ELD_TipoIncasso==3  ) { @Raggio = VAR_ELD_RaggioInt }

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //per top filo
   Posiziona BloccoSmussato_Scassa scs3
   {
      @base_0.x = base_0.x - VAR_ELD_FT_RieX
      @base_0.y = base_0.y + Y - VAR_ELD_YSopra
      //@base_0.z = base_0.z - VAR_ELD_FT_RieX
      @base_0.z = base_0.z - VAR_ELD_FT_RieZ

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_FT_RieX
      @Y = VAR_ELD_YSopra + 3
      //@Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieX
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieZ

      @Raggio = VAR_ELD_Raggio

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   Posiziona BloccoSmussato_Scassa scs_st2
   {
      @base_0.x = base_0.x - VAR_ELD_ST_RieScS
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z - VAR_ELD_ST_RieScS

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_ST_RieScS
      @Y = Y + 30
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_ST_RieScS

      //Luca 27/03/2020
      if( Y < Spe_Top )
      {
         @Y = Spe_Top + 40
         @base_0.y = base_0.y + Y - @Y
      }

      @Raggio = VAR_ELD_Raggio + VAR_ELD_ST_RieScS

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop
   }
   //} Scassi

   Posiziona _cont_per_near idx_cn
   {
      idx_cnear = ATTUALE()

      @X = X*0.75
      @Z = Z*0.75

      @Y = 300

      @base_0.x = base_0.x + X/2 - @X/2
      //@base_0.y = base_0.y - 150
      @base_0.y = base_0.y - 50
      @base_0.z = base_0.z + Z/2 - @Z/2
   }
}

Elemento PianoCotturaGenerico
{
   Descrizione = "Piano Cottura Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""

   // LZ 05/05/2021
   //Attrezzabile ScoccaT_* !ScoccaT_BaseAngPan
   Attrezzabile ScoccaT_* !ScoccaT_BaseAngPan !ScoccaT_BaseFrigo
   Alias DaComStd;Eldom;CamIncidente;Eldom_Check;Eldom_Collision_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      VAR_Revisione  "" 0  SaveAlways

      ELD_TIPO_ELDOM "" "PIANOCOTTURA"
      SoloGrafica "" 0

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      Filler2            " " "" ShowAlways

      X    "Larghezza"   500
      Y    "Altezza"     500
      Z    "Profondità"  560

      VAR_ELD_EldomX         "" 0 SaveAlways
      VAR_ELD_EldomZ         "" 0 SaveAlways

      //Luca 10/06/2020
      //aggiunto tipo Incasso 'Saldato/integrato'
      //non è possibile configurarlo da DLG ma sono per eldom di vendita LAGO

      //Tipologia Incasso
      //    0 Appoggio
      //    1 FiloTop
      //    2 SottoTop
      //    3 Integrato (come filotop per piani cottura / come sottotop per lavelli)
      VAR_ELD_TipoIncasso    "" 0 SaveAlways
      VAR_ELD_TipoIncassoStr "" ""

      //Tipo Piano Cottura
      //    0 GAS
      //    1 Induzione
      VAR_ELD_TipoPC         "" 0 SaveAlways

      VAR_ELD_ScassoX        "" 0 SaveAlways
      VAR_ELD_ScassoZ        "" 0 SaveAlways

      VAR_ELD_ScassoDelta    "" 0 SaveAlways
      VAR_ELD_ScassoMaxX     "" 0 SaveAlways
      VAR_ELD_ScassoMaxZ     "" 0 SaveAlways

      VAR_ELD_Raggio         "" 0 SaveAlways
      VAR_ELD_RaggioInt      "" 0 SaveAlways

      VAR_ELD_YSopra         "" 0 SaveAlways
      VAR_ELD_YRientr        "" 0 SaveAlways

      //per filo top e sottotop
      VAR_ELD_FT_RieX        "" 0 SaveAlways
      VAR_ELD_FT_RieY        "" 0 SaveAlways
      //Luca 12/02/2020
      VAR_ELD_FT_RieZ        "" 0 SaveAlways

      //maggiorazione scasso sottotop
      // 1 di default ma può variare in caso di sottotop
      VAR_ELD_ST_RieScS     ""  1
      // SaveAlways

      //mi salvo i valori inseriti nella dialog dall'utente
      VAR_FirmaEldom       "" ""

      //Luca 16/05/2022
      //leggo tipologia Top
      VAR_TipoTopStr       "" ""

      //gestisco ulteriore scasso per permettere aggancio eldom
      AppoggioWW80          "" 0


   #ifdef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0 Boolean
   #endif

   #ifndef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0
   #endif

   Spe_Top          ""   -1

   idx_top          ""   -1
   idx_bas          ""   -1
   idx_cnear        ""   -1
   coll_idx_cnear   ""   -1

   //#ifdef AGE;RIV
   //   Vedi_Grafica3D       "Attiva Grafica"    1 Menu ( SiNo )
   //#endif
   //
   //#ifndef AGE;RIV
   //   Vedi_Grafica3D       "Attiva Grafica"    0 Menu ( SiNo )
   //#endif

      //Simone 15/12/2021
      Vedi_Grafica3D       "Attiva Grafica"    0

      VediIngombro         "Vedi Ingombro"     1 Menu ( SiNo )

      OffsetX       "Offset X (sx base-sx foro)"          0 Utente ( )
      OffsetZ       "Offset Z (fronte base-fronte foro)"  0 Utente ( )

      Filler3            " " "" ShowAlways

      //Luca 15/11/2021 nuova gestione grafica
      //ELD_GraficaGen "Grafica Eldom"  0
   #ifdef TEC;AZI
      ELD_GraficaGen "Grafica Eldom"  0 Boolean
   #endif

   #ifndef TEC;AZI
      ELD_GraficaGen "Grafica Eldom"  1
   #endif
      //Luca 22/11/2021
      M4S_X "" 0
      M4S_Y "" 0
      M4S_Z "" 0

      // default per scalatura m4s
      M4S_Scala "" [1, 1, 1]  XyzAbsolute

      RigeneraScasso "Rigenera Scasso"      0 Boolean

      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""

      VediIngScassi  "" 0

      //Luca 15/10/2019 varibiale utilizzata dalle stampe per individuare gli elementi da quotare
      StpQuotaScasso "" 1

      HIDE "" 0

      CMP2_AZIONI      ""      "A"

      VARGEST_AGGIUNTIVE "" "InsEldom"

//#ifdef TEC
      DU_DIRETTI_E004 "" 1 NoSave
//#endif

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      //Luca 10/06/2020
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_EldomTop","")

      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;OffsetX;OffsetZ;ELD_GraficaGen"

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( InsEldom==1 )
      {
         //GOSUB LeggiDatiPianoCottura
         GEST_CODICE = "PNC"
         var_gest_eldom = "GEST_E004"
         GOSUB LeggiDatiEldomGen
      }

      //Luca 14/07/2020 decodifico tipo incasso
      VAR_ELD_TipoIncassoStr = "APPOGGIO"
      if( VAR_ELD_TipoIncasso==1 ) { VAR_ELD_TipoIncassoStr = "FILOTOP" }
      if( VAR_ELD_TipoIncasso==2 ) { VAR_ELD_TipoIncassoStr = "SOTTOTOP" }
      if( VAR_ELD_TipoIncasso==3 ) { VAR_ELD_TipoIncassoStr = "INTEGRATO" }

       //Luca 16/05/2022
       AppoggioWW80 = 0
       if( VAR_ELD_TipoIncassoStr == "APPOGGIO"
         & VAR_TipoTopStr == "WILDWOOD_80"   )  { AppoggioWW80 = 1 }
   }

   PuntiNotevoli
   {
      X = VAR_ELD_ScassoX
      Z = VAR_ELD_ScassoZ

      GOSUB punti

      GOSUB DefPuntiScasso
      //Luca 18/01/2021
      //nel caso in cui il pc è minore del top, aumento l'ingombro così da trovare anche la collisione con il sottotop
      if( Y < Spe_Top )  { base_so.y = -50 }

      //Luca 14/10/2020
      if( ELD_GraficaGen == 0 )
      {
         M4S_X = 462.5
         M4S_Y =  30
         M4S_Z =  430

         if( VAR_ELD_TipoPC==1 )
         {
            M4S_X = 450
            M4S_Y =  1
            M4S_Z = 429.38
         }
         wk_x = X * 0.8
         wk_z = Z * 0.9

         M4S_Scala = [ wk_x / M4S_X, 1 , wk_z / M4S_Z]
      }
   }
   #include %path_bdm%\TLib\Orie.inc

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

         if( IS_MATCH( NOME($query_p1), "ScoccaT_B*") != 1) { EXITSUB() }

         if( $modalita_reale != "TE"
           & VAR_VAL( $query_p1, "VAR_Lavello") > 0
           & VAR_VAL( $query_p1, "Cucina_Versione") > 2)    { EXITSUB() }

         if( $modalita_reale != "TE"
           & NOME($query_p1) == "ScoccaT_BaseAngPan")       { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Attrezza
   {
      GOSUB AttrezzaEldomSuTop
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ELD_GestisciGrafica

      idx_bas = PADRE(ATTUALE(),1)

      GOSUB TrovaIdxTopDaScassare

      GOSUB SetVar_PCotturaLavello

      GOSUB CtrlScasso_PCotturaLavello

      //rigenera scasso manuale
      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

         GOSUB EliminaScassi
         //COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
         COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
      }

      GOSUB CtrlLimitiScassi_PCotturaLavello
   }

   Gestionale
   {
      GOSUB GestComune

      NO_GEST = 1
      //eldom LAGO
      if( InsEldom==1 ) { NO_GEST = 0 }

      if( NO_GEST==0 )
      {
         SET_GEST_STATO(ATTUALE(),7,0)
         HIDE = 0
         FLAG_RADICE = $FLAG_STANDARD + $NORID_X + $MAKE_ROW
         GEST_X = 0 GEST_Y = 0 GEST_Z = 0

         GEST_CODICE = "PNC"

         GOSUB CAMBIA_VAR

         HIDE_ON_EDIT2(ATTUALE(),"GEST_E004",0)
      }
      else
      {
         HIDE_ON_EDIT2(ATTUALE(),"GEST_E004",1)

         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7

         DescEdit__  = MSG(1010)
      }

      GOSUB GestComune_Post
   }

   //Luca 04/11/2020 ricalcolo la base
   Procedura PostGestDllValida
   {
      if( $OnRigenera | $OnLoadOrder | ACTION()<=0) { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," //PostGestDllValida PianoCottura"))
   }

   Procedura cancella
   {
      GOSUB Elimina_Scasso
   }

   Procedura VR_AggiornaScassi
   {
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_agganciati // VR_AggiornaScassi ",NOME(ATTUALE())))
      COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // VR_AggiornaScassi ",NOME(ATTUALE())))
   }

//   //ingombro totale eldom
//   Posiziona Blocco ing_t
//   {
//      @escluso = 1
//      @X = VAR_ELD_EldomX
//      @Y = Y
//      @Z = VAR_ELD_EldomZ
//      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
//      @base_0.y = base_0.y
//      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2
//      @c_rivestimento = [60,60,60]
//   }

   //grafica piano cottura -- superiore
   Posiziona Blocco ing_pc
   {
      @X = VAR_ELD_EldomX
      @Y = VAR_ELD_YSopra
      @Z = VAR_ELD_EldomZ
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
      @base_0.y = base_0.y + VAR_ELD_YRientr
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2

      if( InsEldom==0 )
      {
         @escluso = 1 - VediIngombro
         @f_rivestimento = "0.9"
         @c_rivestimento = [255,255,255]
         @m_rivestimento = ""
      }
      else
      {
         @escluso = 0
         @f_rivestimento = "0.0"
         //@c_rivestimento = [90,90,90]
         //@m_rivestimento = STRCAT($path_bmp,"PCotturaGenericoGAS.jpg")
         //if( VAR_ELD_TipoPC==1 ) { @m_rivestimento = STRCAT($path_bmp,"PCotturaGenericoInd.jpg") }
         @m_rivestimento = STRCAT($path_bdm,"Bmp\PCotturaGenericoGAS.jpg")
         if( VAR_ELD_TipoPC==1 ) { @m_rivestimento = STRCAT($path_bdm,"Bmp\PCotturaGenericoInd.jpg") }
      }

//Luca 13/11/2020
//#ifndef AGE;RIV
//      @escluso = 1
//#endif
      if( Vedi_Grafica3D == 1 | ELD_GraficaGen != 0 ) { @escluso = 1 }
      else                       { @escluso = 1 - VediIngombro }
   }

   //grafica piano cottura -- inferiore
   Posiziona Blocco ing_pcs
   {
      @escluso = 1 - VediIngombro

      @X = VAR_ELD_ScassoX
      @Y = VAR_ELD_YRientr
      @Z = VAR_ELD_ScassoZ

      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - @Z/2

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

   //{ Blocchi ingombro scassi per debug
   Posiziona Blocco scs_top
   {
      @escluso = 1 - VediIngScassi
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z

      @X = VAR_ELD_ScassoX
      @Y = Y + 20
      @Z = VAR_ELD_ScassoZ

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

   Posiziona Blocco scs_stp
   {
      @escluso = 1 - VediIngScassi
      @base_0.x = base_0.x + VAR_ELD_ST_RieScS
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ST_RieScS

      @X = VAR_ELD_ScassoX - 2*VAR_ELD_ST_RieScS
      @Z = VAR_ELD_ScassoZ - 2*VAR_ELD_ST_RieScS

      @c_rivestimento = [255,120,255]
      @f_rivestimento = "0.9"
   }
   //} Blocchi ingombro scassi per debug

//#ifndef AGE;RIV

   //{ GRAFICA PianoCottura
   Posiziona BloccoSmussatoY graf1
   {
      @escluso = 1 - Vedi_Grafica3D

      @X = VAR_ELD_EldomX
      @Y = VAR_ELD_YSopra
      @Z = VAR_ELD_EldomZ
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
      @base_0.y = base_0.y + VAR_ELD_YRientr
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2

      raggio = 0
      if( VAR_ELD_TipoIncasso == 1 ) { raggio = VAR_ELD_Raggio }

      @R0 = raggio      @R1 = raggio
      @R2 = raggio      @R3 = raggio

      idx_grafica_1 = ATTUALE()

      @c_rivestimento = $c_alluminio
      if( VAR_ELD_TipoPC == 1 ) { @c_rivestimento = [20,20,20] }
      @TrLadsMaterial = "TesyMetalLowReflection_Steel"
   }

   Posiziona M4S p1
   {
      @escluso = 1 - Vedi_Grafica3D

      @X = M4S_X
      @Y = M4S_Y
      @Z = M4S_Z
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + VAR_ELD_YRientr + VAR_ELD_YSopra
      @base_0.z = base_0.z + Z/2 - @Z/2
      @scale__ = M4S_Scala

      @import = STRCAT($path_sat,"Cucina\PCGAS#U.M4S|model|model.hsf")
      if( VAR_ELD_TipoPC == 1 )
      {
         @import = STRCAT($path_sat,"Cucina\PCINDUZIONE#U.M4S|model|model.hsf")
      }

      @c_rivestimento = $c_nero
      if( VAR_ELD_TipoPC == 0 ) { @c_rivestimento = [30,30,30] }

      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      @HIDE = 1
   }

   Posiziona M4S eldg_1
   //Posiziona Blocco eldg_1
   {
      @escluso = 1
      if( ELD_GraficaGen != 0
        & VAR_VAL_STR(idx_att,"ELD_GraficaGen_M4S1") != "" )
      {
         @escluso = 0
      }

      @X = M4S_X
      @Y = M4S_Y
      @Z = M4S_Z
      @base_0 = base_0
      //posizione filo alto top
      @base_0.y = base_0.y + VAR_ELD_YRientr

      @scale__ = M4S_Scala

      if( VAR_VAL_STR(idx_att,"ELD_GraficaGen_M4S1") != "" )
      {
         @import = STRCAT(ELD_GraficaGen_M4S1,"|model|model.hsf")
      }

      @HIDE = 1
      @ApplicaOffs__=1

      //texture e materiali su m4s
   }
   //}
//#endif

   //{ Scassi
   Posiziona BloccoSmussato_Scassa scs2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z

      @X = VAR_ELD_ScassoX
      @Y = Y + 30
      @Z = VAR_ELD_ScassoZ

      //Luca 27/03/2020
      if( Y < Spe_Top )
      {
         @Y = Spe_Top + 20
         @base_0.y = base_0.y + Y + 2 - @Y
      }

      //Luca 16/05/2022
      if( AppoggioWW80 == 1 ) { @base_0.y = base_0.y + Spe_Top/2 }

      @Raggio = VAR_ELD_Raggio
      //Luca 10/06/2020
      //if( VAR_ELD_TipoIncasso==1 ) { @Raggio = VAR_ELD_RaggioInt }
      if( VAR_ELD_TipoIncasso==1
        | VAR_ELD_TipoIncasso==3  ) { @Raggio = VAR_ELD_RaggioInt }

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //per top filo
   Posiziona BloccoSmussato_Scassa scs3
   {
      @base_0.x = base_0.x - VAR_ELD_FT_RieX
      @base_0.y = base_0.y + Y - VAR_ELD_YSopra
      //@base_0.z = base_0.z - VAR_ELD_FT_RieX
      @base_0.z = base_0.z - VAR_ELD_FT_RieZ

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_FT_RieX
      @Y = VAR_ELD_YSopra + 3
      //@Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieX
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieZ

      @Raggio = VAR_ELD_Raggio

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   Posiziona BloccoSmussato_Scassa scs_st2
   {
      @base_0.x = base_0.x - VAR_ELD_ST_RieScS
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z - VAR_ELD_ST_RieScS

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_ST_RieScS
      @Y = Y + 30
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_ST_RieScS

      //Luca 27/03/2020
      if( Y < Spe_Top )
      {
         @Y = Spe_Top + 40
         @base_0.y = base_0.y + Y - @Y
      }

      @Raggio = VAR_ELD_Raggio + VAR_ELD_ST_RieScS

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop

      //Luca 16/05/2022
      if( AppoggioWW80 == 1 )
      {
         @Y = 20 + Spe_Top/2
         @Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus_SottoTop,Scassa_Chi_Plus)
      }
   }
   //} Scassi

   Posiziona _cont_per_near idx_cn
   //Posiziona Blocco idx_cn
   {
      idx_cnear = ATTUALE()

      @X = X*0.75
      @Z = Z*0.75

      @Y = 300

      @base_0.x = base_0.x + X/2 - @X/2
      //@base_0.y = base_0.y - 150
      @base_0.y = base_0.y - 50
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   Posiziona _cont_per_near idx_cn2
   {
      idx_cnear2 = ATTUALE()

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

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

   Posiziona _cont_per_coll idx_col
   {
      coll_idx_cnear = VAR_VAL( ATTUALE(), "idx_grafica")

      @X = VAR_ELD_ScassoX
      @Y = VAR_ELD_YRientr
      @Z = VAR_ELD_ScassoZ

      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - @Z/2
   }
}

Elemento LavelloGenerico
{
   Descrizione = "Lavello"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""

   //LZ 05/05/2021
   Attrezzabile ScoccaT_* !ScoccaT_BaseFrigo
   Alias DaComStd;Eldom;Lavello;Eldom_Check;Eldom_Collision_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc
      #include %path_bdm%\var_eldom.inc

      VAR_Revisione  "" 0  SaveAlways

      ELD_TIPO_ELDOM "" "LAVELLO"
      SoloGrafica "" 0

      SchedaTecnica      ">> SCHEDA TECNICA"  0 Boolean ShowAlways

      Filler2            " " "" ShowAlways

      X    "Larghezza"   500
      Y    "Altezza"     500
      Z    "Profondità"  560

      VAR_ELD_EldomX         "" 0 SaveAlways
      VAR_ELD_EldomZ         "" 0 SaveAlways

      //Luca 10/06/2020
      //aggiunto tipo Incasso 'Saldato/integrato'
      //non è possibile configurarlo da DLG ma sono per eldom di vendita LAGO

      //Tipologia Incasso
      //    0 Appoggio
      //    1 FiloTop
      //    2 SottoTop
      //    3 Integrato (come filotop per piani cottura / come sottotop per lavelli)
      VAR_ELD_TipoIncasso     "" 0 SaveAlways
      VAR_ELD_TipoIncassoStr  "" ""

      //solo piano cottura -- dichiaro per compatibilità
      VAR_ELD_TipoPC  "" 0

      VAR_ELD_ScassoX        "" 0 SaveAlways
      VAR_ELD_ScassoZ        "" 0 SaveAlways

      VAR_ELD_ScassoDelta    "" 0 SaveAlways
      VAR_ELD_ScassoMaxX     "" 0 SaveAlways
      VAR_ELD_ScassoMaxZ     "" 0 SaveAlways

      VAR_ELD_Raggio         "" 0 SaveAlways

      VAR_ELD_YSopra         "" 0 SaveAlways
      VAR_ELD_YRientr        "" 0 SaveAlways

      //solo per filo top
      VAR_ELD_FT_RieX        "" 0 SaveAlways
      VAR_ELD_FT_RieY        "" 0 SaveAlways
      //Luca 12/02/2020
      VAR_ELD_FT_RieZ        "" 0 SaveAlways

      //maggiorazione scasso sottotop
      // 1 di default ma può variare in caso di sottotop
      VAR_ELD_ST_RieScS     ""  1
      // SaveAlways
      VAR_ELD_ST_RieScS_Z   ""  0

      //mi salvo i valori inseriti nella dialog dall'utente
      VAR_FirmaEldom       "" ""

      //leggo tipologia Top
      VAR_TipoTopStr       "" ""

      //Luca 16/05/2022
      IntegratoQuarzo       "" 0
      //gestisco ulteriore scasso per permettere aggancio eldom
      AppoggioWW80          "" 0

   //#ifdef AGE;RIV
   //   Vedi_Grafica3D       "Attiva Grafica"    1 Menu ( SiNo )
   //#endif
   //
   //#ifndef AGE;RIV
   //   Vedi_Grafica3D       "Attiva Grafica"    0 Menu ( SiNo )
   //#endif

      //Simone 15/12/2021
      Vedi_Grafica3D       "Attiva Grafica"       0 Menu ( SiNo )
      VediIngombro         "Vedi Ingombro"        1 Menu ( SiNo )
      VediIngScassi        "Vedi Ingombro Scassi" 0 Menu ( SiNo )

      VAR_Graf_Miscelatore "Vedi Miscelatore"  0 Menu ( SiNo )

      idx_top        "" -1
      idx_bas        "" -1
      idx_cnear      "" -1
      coll_idx_cnear "" -1

      OffsetX       "Offset X (sx base-sx foro)"          0 Utente ( )
      OffsetZ       "Offset Z (fronte base-fronte foro)"  0 Utente ( )

      Filler3            " " "" ShowAlways

      //Luca 15/11/2021 nuova gestione grafica
      //ELD_GraficaGen "Grafica Eldom"  0
   #ifdef TEC;AZI
      ELD_GraficaGen "Grafica Eldom"  0 Boolean
   #endif

   #ifndef TEC;AZI
      ELD_GraficaGen "Grafica Eldom"  1
   #endif
      //Luca 22/11/2021
      M4S_X "" 0
      M4S_Y "" 0
      M4S_Z "" 0

      // default per scalatura m4s
      M4S_Scala "" [1, 1, 1]  XyzAbsolute

      RigeneraScasso "Rigenera Scasso"      0 Boolean

   #ifdef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0 Boolean
   #endif

   #ifndef TEC;AZI
      BloccaControlloLimiti "Blocca controlli limiti" 0
   #endif

      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""

      //Luca 15/10/2019 varibiale utilizzata dalle stampe per individuare gli elementi da quotare
      StpQuotaScasso "" 1

      HIDE "" 0

      VARGEST_AGGIUNTIVE "" "InsEldom"

//#ifdef TEC
      DU_DIRETTI_E008 "" 1 NoSave
//#endif

      COD_EREDITA      ""   "PRE"

      CMP2_AZIONI      ""      "A"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      //Luca 10/06/2020
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_EldomTop","")

      //Luca 17/07/2020
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_EldomTop","VAR_Rev_LavelloST")

      //M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;OffsetX;OffsetZ;VAR_Graf_Miscelatore;Vedi_Grafica3D"
      M4_MIS = "Filler*;X*;Y*;Z*;InsEldom;SchedaTecnica;OffsetX;OffsetZ;ELD_GraficaGen"

      #ifdef AGE;RIV
         M4_MIS = STRCAT( M4_MIS, ";Vedi*")
      #endif

      HIDE_ON_EDIT2(ATTUALE(),"SchedaTecnica",InsEldom)

      if( InsEldom==1 )
      {
         GEST_CODICE = "LVL"
         if( Cucina_Versione > 2 ) { GEST_CODICE = "LVL3" }
         var_gest_eldom = "GEST_E008"
         GOSUB LeggiDatiEldomGen
      }

      //Luca 14/07/2020 decodifico tipo incasso
      VAR_ELD_TipoIncassoStr = "APPOGGIO"
      if( VAR_ELD_TipoIncasso==1 ) { VAR_ELD_TipoIncassoStr = "FILOTOP" }
      if( VAR_ELD_TipoIncasso==2 ) { VAR_ELD_TipoIncassoStr = "SOTTOTOP" }
      if( VAR_ELD_TipoIncasso==3 ) { VAR_ELD_TipoIncassoStr = "INTEGRATO" }

      //Luca 17/07/2020
      //mantis 22850: Lavello sottotop: semplificazioni inserimento
      VAR_ELD_ST_MaggDim = 0

      if( VAR_VAL(ATTUALE(),"VAR_Rev_LavelloST")>0 ) { VAR_ELD_ST_MaggDim =  5 }

      //Luca 16/05/2022
      //Mantis 029540: Top cucina: quota aggiuntiva scassi per lavello integrato quarzo
      IntegratoQuarzo = 0
      if( VAR_ELD_TipoIncassoStr == "INTEGRATO"
        & IS_MATCH( VAR_VAL_STR(ATTUALE(),"GEST_E008"), "LQ*") == 1 )  { IntegratoQuarzo = 1 }

       //Luca 16/05/2022
       AppoggioWW80 = 0
       if( VAR_ELD_TipoIncassoStr == "APPOGGIO"
         & VAR_TipoTopStr == "WILDWOOD_80"   )  { AppoggioWW80 = 1 }
   }

   PuntiNotevoli
   {
      X = VAR_ELD_ScassoX
      Z = VAR_ELD_ScassoZ

      GOSUB punti

      GOSUB DefPuntiScasso
   }
   #include %path_bdm%\TLib\Orie.inc

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

         if( IS_MATCH( NOME($query_p1), "ScoccaT_B*") != 1) { EXITSUB() }

         if( $modalita_reale != "TE"
           & VAR_VAL( $query_p1, "VAR_Lavello") <= 0
           & VAR_VAL( $query_p1, "Cucina_Versione") > 2)    { EXITSUB() }

         if( $modalita_reale != "TE"
           & NOME($query_p1) == "ScoccaT_BaseAngPan")       { EXITSUB() }

         $QueryResult__ = 1
      }
   }

   Attrezza
   {
      GOSUB AttrezzaEldomSuTop
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ELD_GestisciGrafica

      GOSUB SetVar_PCotturaLavello

      idx_bas = PADRE(ATTUALE(),1)

      GOSUB TrovaIdxTopDaScassare

      GOSUB CtrlScasso_PCotturaLavello

      //rigenera scasso manuale
      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

         GOSUB EliminaScassi
         //COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
         COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
      }

      GOSUB CtrlLimitiScassi_PCotturaLavello
   }

   Procedura VR_AggiornaScassi
   {
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_agganciati // VR_AggiornaScassi ",NOME(ATTUALE())))
      COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // VR_AggiornaScassi ",NOME(ATTUALE())))
   }

   Gestionale
   {
      GOSUB GestComune

      NO_GEST = 1
      //eldom LAGO
      if( InsEldom==1 ) { NO_GEST = 0 }

      if( NO_GEST==0 )
      {
         SET_GEST_STATO(ATTUALE(),7,0)
         HIDE = 0
         FLAG_RADICE = $FLAG_STANDARD + $NORID_X + $MAKE_ROW
         GEST_X = 0 GEST_Y = 0 GEST_Z = 0

         GEST_CODICE = "LVL"
         if( Cucina_Versione > 2 ) { GEST_CODICE = "LVL3" }

         GOSUB CAMBIA_VAR

         HIDE_ON_EDIT2(ATTUALE(),"GEST_E008",0)

         M2G_CONTENITORI = STR(idx_top)
      }
      else
      {
         HIDE_ON_EDIT2(ATTUALE(),"GEST_E008",1)

         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7

         DescEdit__  = MSG(1011)
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         M2G_CONTENITORI = STR(idx_top)
      }
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati  //aggiorna base da ",NOME(ATTUALE())))
   }

   Procedura cancella
   {
      GOSUB Elimina_Scasso

      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }
      if( $StartingDel__!=ATTUALE() )        { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //aggiorna base da ",NOME(ATTUALE())))
   }

//   //ingombro totale eldom
//   Posiziona Blocco ing_t
//   {
//      @escluso = 1
//      @X = VAR_ELD_EldomX
//      @Y = Y
//      @Z = VAR_ELD_EldomZ
//      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
//      @base_0.y = base_0.y
//      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2
//      @c_rivestimento = [60,60,60]
//   }

//DBG Posiziona Blocco Ing
//DBG {
//DBG    GOSUB posa_blocco
//DBG    @c_rivestimento = [120,255,255]
//DBG    @f_rivestimento = "0.9"
//DBG }

   //grafica piano cottura -- superiore
   Posiziona Blocco ing_pc
   {
      @X = VAR_ELD_EldomX
      @Y = VAR_ELD_YSopra
      @Z = VAR_ELD_EldomZ
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
      @base_0.y = base_0.y + VAR_ELD_YRientr
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2

      if( InsEldom==0 )
      {
         @escluso = 1 - VediIngombro
         @f_rivestimento = "0.9"
         @c_rivestimento = [255,255,255]
         @m_rivestimento = ""
      }
      else
      {
         @escluso = 0
         @f_rivestimento = "0.0"
         //@c_rivestimento = [90,90,90]
         //@m_rivestimento = STRCAT($path_bmp,"\LavelloGenerico.jpg")
         @m_rivestimento = STRCAT($path_bdm,"bmp\LavelloGenerico.jpg")
      }

      if( Vedi_Grafica3D == 1  ) { @escluso = 1 }
      else                       { @escluso = 1 - VediIngombro }


      if( ELD_GraficaGen != 0 ) { @escluso = 1 }
//Luca 13/11/2020
//#ifndef AGE;RIV
//      @escluso = 1
//#endif
   }

   //grafica piano cottura -- inferiore
   Posiziona Blocco ing_pcs
   {
      @escluso = 1 - VediIngombro

      @X = VAR_ELD_ScassoX
      @Y = VAR_ELD_YRientr
      @Z = VAR_ELD_ScassoZ

      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - @Z/2

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

   //{ Blocchi ingombro scassi per debug
   Posiziona Blocco scs_top
   {
      @escluso = 1 - VediIngScassi

      @X = VAR_ELD_ScassoX
      @Y = Y + 20
      @Z = VAR_ELD_ScassoZ

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z

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

   Posiziona Blocco scs_stp
   {
      @escluso = 1 - VediIngScassi

      @X = VAR_ELD_ScassoX - 2*VAR_ELD_ST_RieScS
      @Z = VAR_ELD_ScassoZ - 2*VAR_ELD_ST_RieScS

      @base_0.x = base_0.x + VAR_ELD_ST_RieScS
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ST_RieScS

      @c_rivestimento = [255,120,255]
      @f_rivestimento = "0.9"
   }
   //} Blocchi ingombro scassi per debug

   //{ GRAFICA LAVELLO
   Posiziona BloccoSmussatoY graf1
   {
      @escluso = 0
      if( VAR_ELD_TipoIncasso == 3 ) { @escluso = 1 }

      @X = VAR_ELD_EldomX
      @Y = VAR_ELD_YSopra
      @Z = VAR_ELD_EldomZ
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2
      @base_0.y = base_0.y + VAR_ELD_YRientr
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2

      raggio = 0
      if( VAR_ELD_TipoIncasso == 1 ) { raggio = VAR_ELD_Raggio }

      @R0 = raggio      @R1 = raggio
      @R2 = raggio      @R3 = raggio

      idx_grafica_1 = ATTUALE()

      @c_rivestimento = $c_alluminio
      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      //se integrato finitura top
      if( VAR_ELD_TipoIncasso == 3 )
      {
         FIN_var = "C028"
         FIN_orie = "O"
         FIN_idx_gest = idx_top
         GOSUB rivestimento
      }

      if( Vedi_Grafica3D != 1  ) { @escluso = 1 }

      if( ELD_GraficaGen != 0 )  { @escluso = 1 }
   }

   Posiziona Blocco graf2
   {
      @escluso = 1 - Vedi_Grafica3D

      rie_graf_lat = 20
      rie_graf_ret = 20
      if( VAR_Graf_Miscelatore == 1 & VAR_ELD_TipoIncasso==0 ) { rie_graf_ret = 60 }

      rie_graf_fro = rie_graf_lat
      if( VAR_ELD_TipoIncasso == 2 )
      {
         rie_graf_lat = 0
         rie_graf_ret = 0
         rie_graf_fro = 0
      }
      if( VAR_ELD_TipoIncasso == 3 )
      {
         rie_graf_lat = -10
         rie_graf_ret = -10
         rie_graf_fro = -10
      }

      @X = VAR_ELD_EldomX - 2*rie_graf_lat
      @Y = VAR_ELD_YRientr
      @Z = VAR_ELD_EldomZ - rie_graf_ret - rie_graf_fro

      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2 + rie_graf_lat
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2 + rie_graf_ret

      idx_grafica_2 = ATTUALE()

      @c_rivestimento = $c_alluminio
      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      //se integrato finitura top
      if( VAR_ELD_TipoIncasso == 3 )
      {
         FIN_var = "C028"
         FIN_orie = "O"
         FIN_idx_gest = idx_top
         GOSUB rivestimento
      }

      if( ELD_GraficaGen != 0 ) { @escluso = 1 }
   }

   Posiziona Blocco_Scassa grafsc
   {
      @escluso = 1 - Vedi_Grafica3D

      rie_scs_lat = rie_graf_lat + 10
      rie_scs_ret = rie_graf_ret + 10
      rie_scs_fro = rie_graf_fro + 10

      @X = VAR_ELD_EldomX  - 2*rie_scs_lat
      @Y = VAR_ELD_YRientr + VAR_ELD_YRientr + 20
      @Z = VAR_ELD_EldomZ  - rie_scs_ret - rie_scs_fro
      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - VAR_ELD_EldomX/2 + rie_scs_lat
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - VAR_ELD_EldomZ/2 + rie_scs_ret

      if( VAR_ELD_TipoIncasso == 3 )
      {
         @base_0.x = base_0.x
         @base_0.z = base_0.z

         @X = VAR_ELD_ScassoX
         @Z = VAR_ELD_ScassoZ
      }

      @Scassa_Chi_Plus = STRCAT(STR(idx_grafica_1),";",STR(idx_grafica_2))

      if( ELD_GraficaGen != 0 ) { @escluso = 1 }
   }

   Posiziona __import__ bl
   {
      @escluso = 1 - Vedi_Grafica3D

      @X = 50
      @Z = 50

      @escluso = 1 - VAR_Graf_Miscelatore
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z - 40
      if( VAR_ELD_TipoIncasso == 0 ) { @base_0.z = base_0.z + 25 }
      if( VAR_ELD_TipoIncasso == 2
        | VAR_ELD_TipoIncasso == 3 ) { @base_0.y = base_0.y + Y + VAR_VAL(idx_top,"Y") }

      @import = STRCAT($path_sat,"Cucina\MiscelatoreGen.sat")

      @c_rivestimento = $c_alluminio
      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      if( ELD_GraficaGen != 0 ) { @escluso = 1 }
   }
   //} GRAFICA LAVELLO

   Posiziona M4S eldg_1
   //Posiziona Blocco eldg_1
   {
      @escluso = 1
      if( ELD_GraficaGen != 0
        & VAR_VAL_STR(idx_att,"ELD_GraficaGen_M4S1") != "" ) { @escluso = 0 }

      @X = M4S_X
      @Y = M4S_Y
      @Z = M4S_Z
      @base_0 = base_0
      @base_0.y = base_0.y + VAR_ELD_YRientr

      @scale__ = M4S_Scala

      if( VAR_VAL_STR(idx_att,"ELD_GraficaGen_M4S1") != "" )
      {
         @import = STRCAT(ELD_GraficaGen_M4S1,"|model|model.hsf")
      }

      @HIDE = 1
      @ApplicaOffs__=1
      //texture e materiali su m4s
   }

   //{ Scassi
   Posiziona BloccoSmussato_Scassa scs2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z

      @X = VAR_ELD_ScassoX

      //LZ 29/06/2021: lavabo lago su top da 80, il blocco non è alto abbastanza
      //@Y = Y + 30
      @Y = Y + 110
      @Z = VAR_ELD_ScassoZ

      //Luca 16/05/2022
      if( AppoggioWW80 == 1 ) { @base_0.y = alto_0.y - VAR_ELD_YSopra - Spe_Top/2 }

      @Raggio = VAR_ELD_Raggio

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //per top filo
   Posiziona BloccoSmussato_Scassa scs3
   {
      @escluso = 1
      if( VAR_ELD_TipoIncasso==1 )  { @escluso = 0 }

      @base_0.x = base_0.x - VAR_ELD_FT_RieX
      @base_0.y = base_0.y + Y - VAR_ELD_YSopra
      //@base_0.z = base_0.z - VAR_ELD_FT_RieX
      @base_0.z = base_0.z - VAR_ELD_FT_RieZ

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_FT_RieX
      @Y = VAR_ELD_YSopra + 3
      //@Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieX
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieZ

      @Raggio = VAR_ELD_Raggio

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   Posiziona BloccoSmussato_Scassa scs_st2
   {
      @escluso = 0
      //Luca 10/06/2020
      //if( VAR_ELD_TipoIncasso==2 )  { @escluso = 1 }
      if( VAR_ELD_TipoIncasso==2
        | VAR_ELD_TipoIncasso==3 )  { @escluso = 1 }

      @base_0.x = base_0.x - VAR_ELD_ST_RieScS
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z - VAR_ELD_ST_RieScS

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_ST_RieScS
      @Y = Y + 30
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_ST_RieScS

      @Raggio = VAR_ELD_Raggio + VAR_ELD_ST_RieScS

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop


      //Luca 16/05/2022
      //Mantis 029540: Top cucina: quota aggiuntiva scassi per lavello integrato quarzo
      if( IntegratoQuarzo )
      {
         @escluso = 0
         @base_0.y = alto_0.y - 10
         @Raggio = 0
      }

      //Luca 16/05/2022
      if( AppoggioWW80 == 1 )
      {
         @Raggio = VAR_ELD_Raggio

         @Y = 20 + Spe_Top/2
         @base_0.y = alto_0.y - VAR_ELD_YSopra - Spe_Top/2 - @Y

         @Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus_SottoTop,Scassa_Chi_Plus)
      }
   }

   //per sottotop
   Posiziona BloccoSmussato_Scassa scs4
   {
      @escluso = 1
      //Luca 10/06/2020
      //if( VAR_ELD_TipoIncasso==2 )  { @escluso = 0 }
      if( VAR_ELD_TipoIncasso==2
        | VAR_ELD_TipoIncasso==3 )  { @escluso = 0 }

      @base_0.x = base_0.x - VAR_ELD_FT_RieX
      //@base_0.y = base_0.y - 10
      @base_0.y = base_0.y - 15
      //@base_0.z = base_0.z - VAR_ELD_FT_RieX
      @base_0.z = base_0.z - VAR_ELD_FT_RieZ

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_FT_RieX
      //@Y = 100
      @Y = Y + 30
      //@Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieX
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_FT_RieZ

      //Luca 21/01/2020
      //su indicazione di Luca Z.
      //il raggio del sottotop in caso di lavello di tipo sottotop è sempre 0
      @Raggio = 0

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop

      @StpQuotaScasso = 0
      if( IntegratoQuarzo ) { @StpQuotaScasso = 2 }
   }
   //} Scassi

   Posiziona _cont_per_near_2 idx_cn
   {
      idx_cnear = ATTUALE()

      @X = X*0.75
      @Z = Z*0.75

      @Y = 300

      //Luca 31/08/2020
      if( Y > 200 )  { @Y = Y + 100 }

      @base_0.x = base_0.x + X/2 - @X/2
      //@base_0.y = base_0.y - 150
      @base_0.y = base_0.y - 50
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   Posiziona _cont_per_near_2 idx_cn2
   {
      idx_cnear_st = ATTUALE()

      @base_0.x = base_0.x - VAR_ELD_ST_RieScS
      @base_0.z = base_0.z - VAR_ELD_ST_RieScS

      @X = VAR_ELD_ScassoX + 2*VAR_ELD_ST_RieScS
      @Z = VAR_ELD_ScassoZ + 2*VAR_ELD_ST_RieScS
      @Y = 300
      @base_0.y = base_0.y - 50
   }

   Posiziona _cont_per_coll idx_col
   {
      coll_idx_cnear = VAR_VAL( ATTUALE(), "idx_grafica")

      @X = VAR_ELD_ScassoX
      @Y = VAR_ELD_YRientr
      @Z = VAR_ELD_ScassoZ

      @base_0.x = base_0.x + VAR_ELD_ScassoX/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_ELD_ScassoZ/2 - @Z/2
   }
}

Elemento _grafica_base_Frigo
{
   Descrizione = "Fondo frigo alluminio"
   Code        = AAA
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 500
      Y "" 1
      Z "" 600

      c_rivestimento "" [255,255,255]
      HIDE "" 1

      //var lavorazione piano cottura
      VAR_LavPC   "" 0 Implicit

      perColonna  "" 0 Implicit
   }

   Assegnazioni
   {
      idx_att = ATTUALE()
      idx_scocca = PADRE(idx_att,3)

      if( VAR_EXIST(PADRE(idx_att,-1),"pcfto")!=1 )
      {  VAR_IMPLICITLY_INHERITS(idx_att,0)  }
   }

   PuntiNotevoli
   {
      base_0 = [0,19.5,0]
      base_1 = [0,28.5,0]
      base_2 = [0,28.5,0.5]
      base_3 = [0,20,0.5]
      base_4 = [0,20,Z]
      base_5 = [0,0,Z]
      base_6 = [0,0,Z-8]
      base_7 = [0,0.5,Z-8]
      base_8 = [0,0.5,Z-0.5]
      base_9 = [0,19.5,Z-0.5]

      alto_0 = [X,19.5,0]
   }
}

Elemento Cuc_FondoBase_Frigo
{
   Descrizione = "FONDO ALLUMINIO BASE FRIGO"
   Code        = AAA
   Gruppo      = "aaa"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 18
      Y "" 19
      Z "" 1

      perRADICE   ""  ""
      RADICE      ""  "FOBALL"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB CucP_Gestionale

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_base_Frigo gbsf
   {
      GOSUB Posa_Elemento
     // LZ 05/05/2021
      @c_rivestimento = $c_alluminio
   }
}

//} GENERICI

//{ SCASSI
Elemento ScassaBloccoQuoto
{
   Descrizione = "cubo x visualizzazione di elementi"
   Code        = CUB
   Gruppo = ""
   Tipo        = ""
   Forma       = Blocco
   Alias Scassi;ScassiSuTop;TT_LAVORAZIONE;Freeze;CAM_INCIDENTE;CamIncidente

   Variabili
   {
      X   ""    1
      Y   ""    1
      Z   ""    1
      escluso "" 0
      c_rivestimento ""  [250,250,250]
      Rie "" 0
      Rie_Rtr "" 0
      Rie_Lat "" 0
      Z_Top   "" 0
      X_Top   "" 0

      R "" 90

      HIDE "" 1

      // Variabili prese dalla quotatura dei top
      pnt_sx    "" [0,0,0]
      pnt_cnt   "" [0,0,0]
      pnt_dx    "" [0,0,0]
      pnt_scr_A "" [0,0,0]
      pnt_scr_B "" [0,0,0]

      CodiceLav "Codice lavorazione da stampare" ""
      Xscs    "" 0
      Zscs    "" 0
      Quoto "Punto da quotare????" 0
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" -1
      TT_LAV_OFFS "" [0,0,0]
      ang_FS "Angolo FS per lavorazioni 663 e 664" 0
      idx_top     "Idx del top che scassa"   -1
      idx_top_vic "Idx del top che scassa"   -1
      StratoPerPianoCottura "" 0


      alto0_top   "" [0,0,0]
      alto1_top   "" [0,0,0]
      ang_top  "" 0

      FlgVediIngombro "" 0

      Situazione "" "" Implicit
      TipoScasso "" "" Implicit
   }

   PuntiNotevoli
   {
      if( FlgVediIngombro==0 )
      {
         c_rivestimento=$c_nero
         if(ACTION()>=0) { SHOW_MODE(ATTUALE(),0) }
      }
      else
      {
         if(ACTION()>=0)
         {
            SHOW_MODE(ATTUALE(),1)
            c_rivestimento = [255,255,0]
            f_rivestimento = "0.7"
         }
      }

      idx_att = ATTUALE()
      if(X==0) { X=1 } if(Y==0) { Y=1 } if(Z==0) { Z=1 }

      GOSUB punti

      base_so = base_0
      alto_ne = alto_2

      angTot = ANG_TOT(idx_att)

      pnt_sx      = [base_0.x ,alto_0.y,base_0.z-Rie]
      pnt_dx      = [base_3.x ,alto_0.y,base_0.z-Rie]

      // centrale filo top
      pnt_cnt     = [base_0.x+X/2,alto_0.y,base_0.z-Rie]

      // centrale esterno al top
      pnt_cnt2    = [base_0.x+X/2,alto_0.y,base_0.z-Rie-$dist_pnt_quo]
      pnt_cntdist = [base_0.x+X/2,alto_0.y,base_0.z-Rie-$dist_pnt_quo]

      // centrale filo scasso
      pnt_cnt3    = [base_0.x+X/2,alto_0.y,base_0.z]
      pnt_cnt3bis = [base_0.x+X/2,alto_0.y,base_1.z]

      // scritte interne allo scasso (codice e misure)
      pnt_scr_A   = [base_0.x+X/2,alto_0.y,base_0.z+Z/2]
      pnt_scr_B   = [base_0.x+X/2,alto_0.y,base_0.z+3*Z/4]

      pnt_cen_fro = [base_1.x+(base_2.x-base_1.x)/2, base_0.y, base_1.z+(base_2.z-base_1.z)/2]

      // inserita gestione per quot piano fisso 028 18/03/2009 ******
      pnt_sx_fro = [base_0.x ,alto_0.y, base_1.z+(base_2.z-base_1.z)/2]

      stp_X = X
      stp_Z = Z

      Xscs = X
      Zscs = Z
   }

   Procedura CtrlStatici
   {
      idx_att = ATTUALE()
      idx_near_rif = idx_att
      //GOSUB nearTop_Scassi
   }

   Procedura M4_Scassi
   {
      //Claudio 20/11/2018 arriva già la lista idx da scassare
      if ( UN_PADRE("LavorazioneGenerica")
         | UN_PADRE("LavorazioneTopGenerica")
         | UN_PADRE("PianoCotturaGenerico")
         | UN_PADRE("LavelloGenerico")
         | UN_PADRE("RubinettoGenerico")
         | HAS_ALIAS(PADRE(ATTUALE(),-1),"ConScassoAntaxEldom")
         )
      {
         GOSUB ScassaChiPlus_M4
         EXITSUB()
      }

      GOSUB ScassaTop_M4
   }
}

Elemento ScassaBloccoQuotoSmuss
{
   Descrizione = ""
   Code        = SCS
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias       Scassi;ScassiSuTop;TT_LAVORAZIONE;Freeze;CAM_INCIDENTE

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

      escluso "" 0
      c_rivestimento ""  [250,250,250]
      Rie "offset posizione scritte per eldom spostati dall'utente" 0
      Rie_Rtr "" 0
      Rie_Lat "" 0
      Z_Top   "" 0
      X_Top   "" 0

      HIDE "" 1

      R "" 20
      Rg "" 20

      // Variabili prese dalla quotatura dei top
      pnt_sx    "" [0,0,0]
      pnt_cnt   "" [0,0,0]
      pnt_dx    "" [0,0,0]
      pnt_scr_A "" [0,0,0]
      pnt_scr_B "" [0,0,0]

      CodiceLav "Codice lavorazione da stampare" ""
      Quoto "Punto da quotare????" 0
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" -1

      alto0_top   "" [0,0,0]
      alto1_top   "" [0,0,0]
      ang_top  "" 0
      ang_att  "" 0

      FlgVediIngombro "" 0

      Situazione "" "" Implicit
      TipoScasso "" "" Implicit
   }

   PuntiNotevoli
   {
      if( FlgVediIngombro==0 )
      {
         c_rivestimento=$c_nero
         if(ACTION()>=0) { SHOW_MODE(ATTUALE(),0) }
      }
      else
      {
         if(ACTION()>=0)
         {
            SHOW_MODE(ATTUALE(),1)
            c_rivestimento = [255,255,0]
            f_rivestimento = "0.7"
         }
      }

      idx_att = ATTUALE()
      ang_att = ANG_TOT2(ATTUALE())

      Rg=R
      if( R==0 ) { Rg=0.075 }

      R2 = Rg*SENO(45)

      base_0 = [  Rg, 0,   0]     alto_0 = base_0    alto_0.y = Y
      arc_0 =  [Rg-R2,0, Rg-R2]
      base_1 = [  0, 0,   Rg]     alto_1 = base_1    alto_1.y = Y
      base_2 = [  0, 0, Z-Rg]     alto_2 = base_2    alto_2.y = Y
      arc_2 =  [Rg-R2,0,Z-Rg+R2]
      base_3 = [  Rg, 0,   Z]     alto_3 = base_3    alto_3.y = Y
      base_4 = [X-Rg, 0,   Z]     alto_4 = base_4    alto_4.y = Y
      arc_4 =  [X-Rg+R2,0,Z-Rg+R2]
      base_5 = [  X, 0, Z-Rg]     alto_5 = base_5    alto_5.y = Y
      base_6 = [  X, 0,   Rg]     alto_6 = base_6    alto_6.y = Y
      arc_6 =  [X-Rg+R2,0,Rg-R2]
      base_7 = [X-Rg, 0,   0]     alto_7 = base_7    alto_7.y = Y

      base_so = base_0
      alto_ne = base_4     alto_ne.y = base_4.y + Y

      pnt_scr_R = arc_0
      pnt_scr_R.x = arc_0.x + 15
      pnt_scr_R.z = arc_0.z + 15

      pnt_sx      = [base_1.x,     alto_0.y, base_0.z-Rie]
      pnt_dx      = [base_6.x,     alto_0.y, base_0.z-Rie]

      // centrale filo top
      pnt_cnt     = [base_1.x+X/2, alto_0.y, base_0.z-Rie]

      // centrale esterno al top
      pnt_cnt2    = [base_1.x+X/2, alto_0.y, base_0.z-Rie-$dist_pnt_quo]
      pnt_cntdist = [base_1.x+X/2, alto_0.y, base_0.z-Rie-$dist_pnt_quo]

      // centrale filo scasso
      pnt_cnt3    = [base_1.x+X/2, alto_0.y, base_0.z]
      pnt_cnt3bis = [base_1.x+X/2, alto_0.y, base_3.z]

      // scritte interne allo scasso (codice e misure)
      pnt_scr_A   = [base_1.x+X/2, alto_0.y, base_0.z+Z/2]
      pnt_scr_B   = [base_1.x+X/2, alto_0.y, base_0.z+3*Z/4]

      pnt_cen_fro = [base_3.x+(base_4.x-base_3.x)/2, base_2.y, base_3.z+(base_4.z-base_3.z)/2]
      pnt_sx_fro = [base_0.x ,alto_0.y, base_1.z+(base_2.z-base_1.z)/2]

      stp_X = X
      stp_Z = Z
   }

   Procedura CtrlStatici
   {
      idx_att      = ATTUALE()
      idx_near_rif = idx_att

      //GOSUB nearTop_Scassi
   }

   Procedura M4_Scassi
   {
      //Claudio 20/11/2018 arriva già la lista idx da scassare
      if ( UN_PADRE("LavorazioneGenerica")
         | UN_PADRE("LavorazioneTopGenerica")
         | UN_PADRE("PianoCotturaGenerico")
         | UN_PADRE("LavelloGenerico")
         | UN_PADRE("RubinettoGenerico")
         )
      {
         GOSUB ScassaChiPlus_M4
         EXITSUB()
      }

      GOSUB ScassaTop_M4
   }
}

Elemento ScassaCilindroYQuoto
{
   Descrizione = "Cilindro"
   Code = SCH1
   Gruppo = ""
   Tipo = xxx
   Forma = YCilindro
   Alias Scassi;TT_Lavorazione;ScassiSuTop;Freeze;CAM_INCIDENTE

   Variabili
   {
      X  ""  25
      Y  ""  150
      Z  ""  25

      c_rivestimento ""  [255, 255, 255]

      Rie       ""                                0
      CodiceLav "Codice lavorazione da stampare" ""
      Quoto     "Punto da quotare????"            1

      Rie_Rtr "" 0
      Rie_Lat "" 0

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" -1

      da_rubinetto  "scasso provocato da rubinetto"             0
      da_schermo    "scasso provocato da schermo retro lavello" 0
      da_portabicch "scasso provocato da portabicchieri"        0

      idx_near_sx "" -1
      idx_near_dx "" -1
      idx_near_fro "" -1
      idx_near_ret "" -1

      acis_da_padre "" 0

      HIDE     "" 1
      ang_top  "" 0
      ang_att  "" 0

      FlgVediIngombro "" 0

      Situazione "" "" Implicit
      TipoScasso "" "" Implicit
   }

   PuntiNotevoli
   {
      if( FlgVediIngombro==0 )
      {
         c_rivestimento=$c_nero
         if(ACTION()>=0) { SHOW_MODE(ATTUALE(),0) }
      }
      else
      {
         if(ACTION()>=0)
         {
            SHOW_MODE(ATTUALE(),1)
            c_rivestimento = [255,255,0]
            f_rivestimento = "0.7"
         }
      }

      idx_att = ATTUALE()
      k = SENO(45)

      ang_att = ANG_TOT2(ATTUALE())

      if(X==0) { X=1 }
      if(Z==0) { Z=1 }

      GOSUB punti

      base_so = base_0
      base_so.x = base_0.x + X/2 - 0.1
      base_so.z = base_0.z + Z/2 - 0.1

      alto_ne = alto_2
      alto_ne.x = alto_2.x - X/2 + 0.1
      alto_ne.z = alto_2.z - Z/2 + 0.1

      pnt_sx  = [base_0.x ,alto_0.y,base_0.z-Rie]

      pnt_cnt = [base_0.x+X/2,alto_0.y,base_0.z-Rie]

      pnt_dx  = [base_3.x ,alto_0.y,base_0.z-Rie]

      pnt_sx_rtr = [base_0.x,base_0.y,base_0.z-Rie_Rtr]
      pnt_dx_rtr = [base_0.x + X,alto_0.y,base_0.z-Rie_Rtr]
      pnt_cx_rtr = [base_0.x + X/2,base_0.y,base_0.z-Rie_Rtr]

      pnt_dx_rs = [base_0.x + X,alto_0.y,base_0.z]
      pnt_dx_fs = [base_0.x + X,alto_0.y,base_1.z]

      pnt_sx_lat  = [base_0.x-Rie_Lat,alto_0.y,base_1.z]
      pnt_sx_lat2 = [base_0.x-Rie_Lat,alto_0.y,base_0.z]
      pnt_sx_latc = [base_0.x-Rie_Lat,alto_0.y,base_0.z + Z/2]

      // centrale esterno al top
      pnt_cnt2    = [base_0.x+X/2,alto_0.y,base_0.z-Rie-$dist_pnt_quo]

      // centrale filo scasso
      pnt_cnt3    = [base_0.x+X/2,alto_0.y,base_0.z+Z/2]
      pnt_cnt3bis = pnt_cnt3

      // inserita gestione per piano fisso 028 18/03/2009 ******
      pnt_quo_sx    = [base_0.x,alto_0.y,base_0.z+Z/2]
      pnt_quo_dx    = [base_3.x,alto_3.y,base_3.z+Z/2]

      // scritte interne allo scasso (codice e misure)
      pnt_scr_A   = [base_0.x + X/2,alto_0.y,base_0.z + Z/2]
      pnt_scr_B   = [base_0.x + X/2,alto_0.y,base_0.z + 3*Z/4]

      stp_X = X + acis_da_padre
      stp_Z = Z + acis_da_padre

      Xscs = X
      Zscs = Z

      TT_LAV_OFFS = [base_0.x+X/2,base_0.y,base_0.z+Z/2]
      TT_LAV_CODE = CodiceLav
      if ( Quoto==0 )   { TT_LAV_CODE = "" }
      //c_rivestimento = $c_rivestimento_sfondo

      // linee tratteggiate su scasso
      pnt_lin_tra_v1 = [base_0.x + X/2   , alto_0.y, base_0.z - 40]
      pnt_lin_tra_v2 = [base_0.x + X/2   , alto_0.y, base_0.z + Z + 40]
      pnt_lin_tra_o1 = [base_0.x - 80    , alto_0.y, base_0.z + Z/2]
      pnt_lin_tra_o2 = [base_0.x + X + 80, alto_0.y, base_0.z + Z/2]

   }

   //Controlli
   //{
   //   idx_att = ATTUALE()
   //   idx_near_rif = idx_att
   //   BOX_MODE(0)
   //   //GOSUB nearTop_Scassi
   //}

   //Procedura CtrlStatici
   //{
   //   idx_att = ATTUALE()
   //   idx_near_rif = idx_att
   //   //GOSUB nearTop_Scassi
   //
   //   idx_base = PADRE(ATTUALE(), -1)
   //
   //   //sposto in proc
   //   GOSUB calcola_Rientri_scassaBlocco
   //}

   //Posiziona _cont_per_near_sx ccsx
   //{
   //   idx_near_sx = ATTUALE()
   //   @base_0 = base_0
   //   @base_0.x = base_0.x - 0.5
   //   @base_0.y = base_0.y + 0.1
   //   @base_0.z = base_0.z + Z/2 - 0.5
   //   @X = 1
   //   @Y = Y - 0.2
   //   @Z = 1
   //}
   //
   //Posiziona _cont_per_near_dx ccdx
   //{
   //   idx_near_dx = ATTUALE()
   //   @base_0 = base_3
   //   @base_0.x = base_3.x - 0.5
   //   @base_0.y = base_3.y + 0.1
   //   @base_0.z = base_3.z + Z/2 - 0.5
   //   @X = 1
   //   @Y = Y - 0.2
   //   @Z = 1
   //}
   //
   //Posiziona _cont_per_near_fro ccfro
   //{
   //   idx_near_fro = ATTUALE()
   //   @base_0 = base_1
   //   @base_0.x = base_1.x + X/2 - 0.5
   //   @base_0.y = base_1.y + 0.1
   //   @base_0.z = base_1.z - 0.5
   //   @X = 1
   //   @Y = Y - 0.2
   //   @Z = 1
   //}
   //
   //Posiziona _cont_per_near_retro ccret
   //{
   //   idx_near_ret = ATTUALE()
   //   @base_0 = base_0
   //   @base_0.x = base_0.x + X/2 - 0.5
   //   @base_0.y = base_0.y + 0.1
   //   @base_0.z = base_0.z - 0.5
   //   @X = 1
   //   @Y = Y - 0.2
   //   @Z = 1
   //}

   Procedura M4_Scassi
   {
      //arriva già la lista idx da scassare
      if ( UN_PADRE("LavorazioneGenerica")
         | UN_PADRE("LavorazioneTopGenerica")
         | UN_PADRE("PianoCotturaGenerico")
         | UN_PADRE("LavelloGenerico")
         | UN_PADRE("RubinettoGenerico")
         )
      {
         GOSUB ScassaChiPlus_M4
         EXITSUB()
      }

      GOSUB ScassaTop_M4
   }
}
//} SCASSI

Elemento ManigliaFLAPP
{
   Descrizione = "Maniglia FLAPP"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;ManigliaFLAPP

   Variabili
   {
      X "" 201
      Y ""  51
      Z ""   3

      Orie "" "O"

      FIN_var     ""  "C001"
      FIN_orie    ""  "O"

      VAR_Melaminico "" 0 Implicit

      //gestisco una maniglia grafica più con bordo più spesso, altrimenti in Trend non vedo nulla
      VAR_TREND "" 0

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = PADRE(ATTUALE(),1)

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Luca 19/04/2021
      STP_XG_STAMPA = 1
      STP_XG_QUOTA = 1
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Posiziona __import__ aa
   {
      @escluso = 0
      if( VAR_TREND==1 ) { @escluso = 1 }

      GOSUB posa_blocco
      GOSUB rivestimento
      @import = STRCAT($path_sat,"ManigliaFLAPP.sat")

      @ang_z = 0
      if( Orie=="V" )
      {
         @ang_z = -90
         @base_0.y = base_0.y + Y
      }
   }

   //{ gestisco scasso maniglia FLAPP in preTrend
   Posiziona __import__ trend
   {
      @escluso = 1
      if( VAR_TREND==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @import = STRCAT($path_sat,"ManigliaFLAPP_2.sat")
      @base_0.z = base_0.z + 1

      @ang_z = 0
      if( Orie=="V" )
      {
         @ang_z = -90
         @base_0.y = base_0.y + Y
      }
      @c_rivestimento = $c_nero
   }
   //} gestisco scasso maniglia FLAPP in preTrend

   //Posiziona Blocco aa
   //{
   //   GOSUB Posa_Elemento
   //   @import = STRCAT($path_sat,"ManigliaFLAPP.sat")
   //}

   Posiziona __import__ corn
   {
      @escluso = 1 - VAR_Melaminico

      GOSUB posa_blocco
      @import = STRCAT($path_sat,"Cucina\Melaminiche\Maniglia Flapp - Cornice.sat")

      @ang_z = 0
      if( Orie=="V" ) { @ang_z = -90 }

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

      @c_rivestimento = $c_champagne
   }
}

Elemento ManigliaPAMAR
{
   Descrizione = "Maniglia PAMAR"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       ManigliaPAMAR;CamIncidente

   Variabili
   {
      X               "" 172
      Y               "" 15.5
      Z               "" 15.5

      Rie             "" 1

      VAR_Melaminico  "" 0 Implicit
      Scassa_Chi_Plus "" ""

      HIDE            "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB TrovaIdx_DaScassare_Anta
   }

   Posiziona __import__ aa
   {
      @import = STRCAT($path_sat,"Cucina\Melaminiche\Maniglia Pamar.sat")
      @c_rivestimento = $c_champagne

      GOSUB posa_blocco
      @base_0.x = @base_0.x + X/2
   }

   Posiziona Blocco_Scassa sc1
   {
      @X = X - Rie*2
      @Y = Y - Rie*2
      @Z = Z - Rie*2

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

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }
}

Elemento SupportoVetro
{
   Descrizione = "Supporto vetro"
   Code        = CCSS
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       TSTP_BloccaVistaCentroStanza;TSTP_NoQuota_PROSPETTI
   Attrezzabile PianoSNACK

   Variabili
   {
      #include %path_bdm%\var_db.inc

      FILLER          " "                  ""

      VAR_Revisione   "Revisione"          0     SaveAlways

      X               "Larghezza"          400   Menu   (   LarSUPP   )
      Y               "Altezza"            184   Menu   (   AltSUPP   )   Utente   (   0-1000   )
      Yt              "(Altezza totale)"   184   ShowAlways
      Z               "Spessore"           12

      GEST_CODICE     ""                   ""
      RADICE          ""                   ""

      NO_GEST         ""                   0

      COD_EREDITA     ""                   "PRE;POST"
      CMP2_AZIONI     ""                   "S"

      M4_A_MURO       ""                   0

      M4_MIS          ""                   "FillerM2G;X;Y;Yt"

      FillerM2G       " "                  ""    ShowAlways

      idx_cnear_up    ""                  -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      SetRevisioneElemento(ATTUALE(),"BDM_REV_Cuc_SuppVtr","")

      // Versione
      wk_elm_near = 0
      if( ACTION() == -4
        | ( ACTION() > 0 & ACTION() != 2))
      {
         BOX_MODE(0)
         NEAR( "wk_elm_near", idx_cnear_up, 1, 1, "ScoccaT_*")
      }
      Cucina_Versione_Idx = SE_NUM( wk_elm_near > 0, VAR_VAL( idx_att, "wk_elm_near_##1"), -1)
      GOSUB Cucina_Versione

      M4_GRUPPO__ = MSG(1006)

      Spe_Vtr = 12
      RieY_Vtr = 6

      Spe_Pie = 3
      Lar_Pie = 20
      Prf_Pie = 12

      X_Staffa = X - 100
      Y_Staffa = 30
      Z_Staffa = 70

      if( VAR_Revisione > 0 )
      {
         RieY_Vtr = 7

         Lar_Pie = 40
         Prf_Pie = 15
         Spe_Pie = 3

         X_Staffa = 150
         GOSUB SetSuppVtrDimStaffa
      }

      wk_X_min = VAR_VAL(ATTUALE(),"ORD_XMIN")
      wk_X_max = VAR_VAL(ATTUALE(),"ORD_XMAX")

      wk_Y_min = VAR_VAL(ATTUALE(),"ORD_YMIN") - $Cuc_Alt_Zoc
      wk_Y_max = VAR_VAL(ATTUALE(),"ORD_YMAX") - $Cuc_Alt_Zoc

      if( ACTION() >= 0)
      {
         ORD_RID_CHECK = 7

         if( IS_MATCH( VAR_VAL_STR( idx_att, "cmp_name"), "SVETRO*") != 1)
         {
            ORD_RID_CHECK = 4

            VAR_SET_MODE(ATTUALE(),"X",$MODE_NONE)
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_NONE)
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_NONE)

            if( wk_X_min >= 0
              & wk_X_max > wk_X_min)
            {
               VAR_SET_MODE(ATTUALE(),"X",$MODE_USER)
               VAR_SET_MENU(ATTUALE(),"X",STRCAT("( ",STR(wk_X_min),"-",STR(wk_X_max)," )"))
            }

            if( wk_Y_min >= 0
              & wk_Y_max > wk_Y_min)
            {
               VAR_SET_MODE(ATTUALE(),"Y",$MODE_USER)
               VAR_SET_MENU(ATTUALE(),"Y",STRCAT("( ",STR(wk_Y_min),"-",STR(wk_Y_max)," )"))
            }
         }

         if( UN_PADRE("Penisola"))
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_NONE)
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_NONE)
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_NONE)
         }
      }
   }

   PuntiNotevoli
   {
      Yt = Y + $Cuc_Alt_Zoc

      GOSUB punti_Yt
   }

   #include %path_bdm%\Tlib\orie.inc

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      base_0.x = $vano_0.x
      base_0.y = $vano_0.y - Yt + Y_Staffa
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST == 1)
      {
         FLAG_RADICE = $NO_RAD

         GEST_CODICE = ""
         RADICE = ""

         GOSUB Stato_7

         DescEdit__ = MSG(1006)

         GOSUB GestComune_Post
         EXIT()
      }

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

      GEST_Y = Yt
      RADICE = SE_STR( Cucina_Versione > 2, "SOSVTRSR", "SOSVTRCUC1")

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco piesx
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 1, 0)

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

      @base_0 = base_0
      @base_0.z = base_0.z + (Z - @Z)/2

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco piedx
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 1, 0)

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

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

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco vt
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 1, 0)

      GOSUB posa_blocco

      @Y = Yt - RieY_Vtr - Spe_Pie

      @base_0.y = base_0.y + Spe_Pie

      @c_rivestimento = $c_vetro
      @f_rivestimento = "0.9"
   }

   Posiziona _grafica_staffa st
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 1, 0)

      @X = X_Staffa
      @Y = Y_Staffa
      @Z = Z_Staffa

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

      @c_rivestimento = $c_alluminio
   }

   Posiziona SupportoVetro_Staffa staff
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 0, 1)

      @X = X_Staffa
      @Y = Y_Staffa
      @Z = Z_Staffa

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

      idx_staffa = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona SupportoVetro_Sost sost
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 0, 1)

      GOSUB posa_blocco

      @Y = Yt - RieY_Vtr

      idx_vetro = SE_NUM( @escluso == 0, ATTUALE(), -1)
   }

   Posiziona _cont_per_near_2 nup
   {
      idx_cnear_up = ATTUALE()

      @X = X_Staffa
      @Y = 10
      @Z = Z

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

Elemento SupportoVetro_Staffa
{
   Descrizione = "Staffa supporto vetro"
   Code        = SSTAF
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"          300
      Y                 "Altezza"             30
      Z                 "Profondità"          70

      RieY_Vtr          "Altezza interna"      7 Implicit

      //Luca 22/09/2021
      StaffaSNACK      "" 0
      PosStaffa        "" "" Implicit

      RADICE            ""                   ""
      TIPO_COLLO        ""                   ""

      NO_GEST           "" 0

      OrieSupporto      "" ""
      Verso             "" ""

      M4_NO_OFFS        "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      idx_topl = GetTopLevel(ATTUALE())

      sat_path = STRCAT($path_sat,"Cucina\SupportiVetro\")
      sat_ext  = ".sat"
      sat_file = ""
      sat_usa = 0

      sat_staffa_pre = "Staffa_L."

      //Luca 06/09/2021
      if( StaffaSNACK == 1 )
      {
         RADICE = ""
         GEST_CODICE = "B20041"

         //Luca 06/09/2021
         sat_path = STRCAT($path_sat,"Tavoli\")
         sat_staffa_pre = "StaffaAirSnack_"
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Luca 07/09/2021
      //punti utilizzati per le quote in stampa
      stp_p0 = base_0    stp_p1 = base_1
      stp_p2 = base_2    stp_p3 = base_3


      if( OrieSupporto == "V" )
      {
         stp_p0 = base_1    stp_p1 = base_2
         stp_p2 = base_3    stp_p3 = base_0

         if( Verso == "SX" )
         {
            stp_p0 = base_3    stp_p1 = base_0
            stp_p2 = base_1    stp_p3 = base_2
         }
      }

      //Luca 22/09/2021
      if( StaffaSNACK == 1 )
      {
         stp_p0 = base_0     stp_p3 = base_3
         stp_p1 = base_1     stp_p2 = base_2

         if( PosStaffa == "RS" )
         {
            stp_p0 = base_3     stp_p3 = base_2
            stp_p1 = base_0     stp_p2 = base_1
         }

         if( PosStaffa == "FD" )
         {
            stp_p0 = base_1     stp_p3 = base_0
            stp_p1 = base_2     stp_p2 = base_3
         }

         if( PosStaffa == "FS" )
         {
            stp_p0 = base_2     stp_p3 = base_1
            stp_p1 = base_3     stp_p2 = base_0
         }
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      sat_staffa_name = STRCAT(sat_staffa_pre,STR(X),sat_ext)
      sat_staffa_file = STRCAT(sat_path,sat_staffa_name)

      if( sat_file != sat_staffa_file )
      {
         if( FILE_EXIST(sat_staffa_file) )
         {
            sat_usa = 1
            sat_file = sat_staffa_file
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 06/09/2021
      //'riviste le distinte dei tavoli allungabili (TAV172, TAV173, TAV176, TAV177), ti chiedo cortesemente di gestire la staffa regolabile al primo e non al secondo livello grafico per questi articoli.'
      if( UN_PADRE("SupportoVetro_Tavoli_AIR") )
      {
         if( VAR_VAL_STR(PADRE(ATTUALE(),2),"VAR_tipo_tav" ) == "EXTENDABLE" ) { GEST_IDXPADRE = idx_topl }
      }

      //Simone 13/10/2022 - prendo codice solo se di sostituzione
      if( UN_PADRE("DivanoAir_Soft_Free") )
      {
         HIDE = 1
         NO_GEST = 1
         if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") == "1" )
         {
            HIDE = 0
            NO_GEST = 0
         }

         if( IsIdx(idx_topl,"idx_seduta") ) { GEST_IDXPADRE = VAR_VAL(idx_topl,"idx_seduta") }
      }

      if( NO_GEST == 1 )
      {
         FLAG_RADICE = $NO_RAD

         RADICE = ""
         GEST_CODICE = ""

         GOSUB GestComune_Post
         EXITSUB()
      }

      RADICE = "STRG"
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_staffa st
   {
      @escluso = sat_usa

      GOSUB posa_blocco

      @RieY_Vtr = RieY_Vtr

      GOSUB rivestimento
      @c_rivestimento = $c_alluminio
   }

   Posiziona __import__ sta
   {
      @escluso = 1 - sat_usa

      GOSUB posa_blocco

      @ang_y = 270
      @base_0.x = base_0.x + @X/2
      @base_0.y = base_0.y + @Y/2
      @base_0.z = base_0.z + @Z/2

      @import = sat_file

      GOSUB rivestimento
      @c_rivestimento = $c_alluminio
   }

   //Luca 06/09/2021
   Posiziona LavorazioneStaffa_Tav_AIR lav
   {
      @escluso = 1
      if( UN_PADRE("Tavolo_AIR") )  { @escluso = 0 }

      GOSUB posa_blocco
   }
}

Elemento SupportoVetro_Sost
{
   Descrizione = "Sostegno supporto vetro"
   Code        = SVTR
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "Larghezza"                385
      Y                "Altezza"                  195
      Z                "Profondità"               12

      OrieSupporto     ""                         ""

      Yr               "Altezza reale vetro"      192

      Lar_Pie          "Piedino - Larghezza"      40   Implicit
      Spe_Pie          "Piedino - Altezza"        3    Implicit
      Prf_Pie          "Piedino - Profondità"     15   Implicit

      RieX_Pie         "Piedino - Rientro Larg"   10   Implicit

      sat_file         "File 3d"                  ""   NoSave

      VAR_mat_tav      ""                         ""   Implicit
      VAR_tipo_tav     ""                         ""   Implicit
      VAR_tipo_gambe   ""                         ""   Implicit

      VAR_Raggio       ""                         -1   Implicit

      //Luca 22/09/2021
      StaffaSNACK      ""                         0    Implicit
      PosStaffa        ""                         ""   Implicit

      RADICE           "Radice"                   "SUVTCUC"

      COD_EREDITA      ""                         "PRE"

      FIN_var          ""                         "C014"
      XGLASS           "Num. XGLASS"              ""   Utente   (   )

      M4_NO_OFFS       ""                         1
   }

   Assegnazioni
   {
      GOSUB AssComune

      sat_usa = 0
      sat_path = STRCAT($path_sat,"Cucina\SupportiVetro\")
      sat_ext  = ".sat"

      sat_piedino_file = STRCAT(sat_path,"Piedino",sat_ext)

      if( FILE_EXIST(sat_piedino_file) ) { sat_usa = 1 }

      //Luca 03/09/2021
      if( UN_PADRE("SupportoVetro_Tavoli_AIR") )
      {
         RADICE = "36SUPVT"

         if( VAR_mat_tav == "STRATUM" )
         {
            RADICE = "SXGSTR"
            FIN_var = "C023"
            if( IS_VAR_FIXED(ATTUALE(),"GEST_C023") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C023") }
         }

         //Simone 27/06/2023
         if( VAR_tipo_gambe == "SOFT" )
         {
            RADICE = "GVSAS"
         }
      }

      if( UN_PADRE("Penisola_AirKitchen") ) { RADICE = "SVAKI" }
   }

   PuntiNotevoli
   {
      Yr = Y - Spe_Pie

      GOSUB punti

      //Luca 07/09/2021
      //punti utilizzati per le quote in stampa
      stp_p0 = base_0    stp_p1 = base_1
      stp_p2 = base_2    stp_p3 = base_3

      stp_pc = [X/2,0,0]

      if( OrieSupporto == "V"  )
      {
         stp_pc = [0,0,Z/2]

         stp_p0 = base_1    stp_p1 = base_2
         stp_p2 = base_3    stp_p3 = base_0
      }

      //Luca 22/09/2021
      if( StaffaSNACK == 1 )
      {
         stp_p0 = base_0     stp_p3 = base_3
         stp_p1 = base_1     stp_p2 = base_2

         if( PosStaffa == "RS" )
         {
            stp_p0 = base_3     stp_p3 = base_2
            stp_p1 = base_0     stp_p2 = base_1

            stp_pc = [0,0,Z/2]
         }

         if( PosStaffa == "FD" )
         {
            stp_p0 = base_1     stp_p3 = base_0
            stp_p1 = base_2     stp_p2 = base_3
         }

         if( PosStaffa == "FS" )
         {
            stp_p0 = base_2     stp_p3 = base_1
            stp_p1 = base_3     stp_p2 = base_0

            stp_pc = [0,0,Z/2]

         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( UN_PADRE("SupportoVetro_Tavoli_AIR") )
      {
         GEST_IDXPADRE = GetTopLevel(ATTUALE())
      }

      GEST_Y = Yr

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         if( UN_PADRE("Tavolo_AIR")
           & VAR_VAL( ATTUALE(), "FLAG_Speciale") == 0 )
         {
            BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
         }
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoSmussatoZ vtr
   {
      GOSUB posa_blocco

      @Y = Y - Spe_Pie
      if( VAR_mat_tav == "STRATUM" )
      {
         @Z = Z/2
      }

      @base_0.y = base_0.y + Spe_Pie

      @R0 = VAR_Raggio
      @R1 = VAR_Raggio
      @R2 = VAR_Raggio
      @R3 = VAR_Raggio

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_vetro }
      @f_rivestimento = "0.9"
   }

   Posiziona BloccoSmussatoZ vtr2
   {
      @escluso = 1
      if( VAR_mat_tav == "STRATUM" ) { @escluso = 0 }

      GOSUB posa_blocco

      @Y = Y - Spe_Pie
      @Z = Z/2

      @base_0.y = base_0.y + Spe_Pie
      @base_0.z = base_0.z + @Z

      @R0 = VAR_Raggio
      @R1 = VAR_Raggio
      @R2 = VAR_Raggio
      @R3 = VAR_Raggio

      GOSUB rivestimento
      @c_rivestimento = $c_vetro
      @f_rivestimento = "0.9"
   }

   //Simone 24/09/2021
   Posiziona BloccoSmussatoZ vtr3
   {
      @escluso = 1
      if( VAR_mat_tav == "STRATUM" ) { @escluso = 0 }

      GOSUB posa_blocco

      @Y = Y - Spe_Pie
      @Z = 0.1

      @base_0.y = base_0.y + Spe_Pie
      @base_0.z = base_0.z + Z/2 - @Z

      @R0 = VAR_Raggio
      @R1 = VAR_Raggio
      @R2 = VAR_Raggio
      @R3 = VAR_Raggio

      GOSUB rivestimento
   }

   Posiziona Blocco piesx
   {
      @escluso = sat_usa

      GOSUB posa_blocco

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

      @base_0.x = base_0.x + RieX_Pie + SE_NUM( VAR_Raggio > 0, VAR_Raggio, 0)
      @base_0.z = base_0.z + Z/2 - Prf_Pie/2

      GOSUB rivestimento
      @c_rivestimento = $c_nero
   }

   Posiziona Blocco piedx
   {
      @escluso = sat_usa

      GOSUB posa_blocco

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

      @base_0.x = base_0.x + X - Lar_Pie - RieX_Pie - SE_NUM( VAR_Raggio > 0, VAR_Raggio, 0)
      @base_0.z = base_0.z + Z/2 - Prf_Pie/2

      GOSUB rivestimento
      @c_rivestimento = $c_nero
   }

   Posiziona __import__ piedsx
   {
      @escluso = 1 - sat_usa

      GOSUB posa_blocco

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

      @base_0.x = base_0.x + RieX_Pie + SE_NUM( VAR_Raggio > 0, VAR_Raggio, 0)
      @base_0.z = base_0.z + (Z - @Z)/2

      @import = sat_piedino_file

      //GOSUB rivestimento
      @c_rivestimento = $c_bianco
      @f_rivestimento = "0.9"
   }

   Posiziona __import__ pieddx
   {
      @escluso = 1 - sat_usa

      GOSUB posa_blocco

      @X = Lar_Pie
      @Y = Spe_Pie
      @Z = Prf_Pie

      @base_0.x = base_0.x + X - @X - RieX_Pie - SE_NUM( VAR_Raggio > 0, VAR_Raggio, 0)
      @base_0.z = base_0.z + (Z - @Z)/2

      @import = sat_piedino_file

      //GOSUB rivestimento
      @c_rivestimento = $c_bianco
      @f_rivestimento = "0.9"
   }
}

Elemento _grafica_staffa
{
   Descrizione = "Staffa"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      RieY_Vtr  "Altezza interna" 6  Implicit

      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]   alto_0 = [X, 0, 0]
      base_1 = [0,0,26]
      //LZ 26/04/2021 -  Rendo parametrico
      //base_2 = [0,Y-6,26]
      //base_3 = [0,Y-6,26+18]
      base_2 = [0,Y-RieY_Vtr,26]
      base_3 = [0,Y-RieY_Vtr,26+18]
      base_4 = [0,0,26+18]
      base_5 = [0,0,Z]
      base_6 = [0,Y,Z]
      base_7 = [0,Y,0]

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento BarraIsola
{
   Descrizione = "Barra isola"
   Code        = INT
   Gruppo      = "Cuc"
   Tipo        = Contenitore
   Forma       = ""
   Alias       BarraIsola;Base;CamInciso;CamIncidente;TSTP_NoQuota

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368   Utente ( 184-2220 )
      Y       "Altezza"         365   Menu ( AltBRIS )  Utente ( 165-901 )
      Z       "Profondità"       40   ShowAlways

      ConPiedini "" 0

      X_Max   ""   3025

      //Luca 19/07/2019 utilizzate nel caso di isola
      //se devo ridurre per far spazio al fianco finitura
      FSN_RRid_DX "" 0 SaveAlways
      FSN_RRid_SX "" 0 SaveAlways

      RADICE      "" "BASUISDP"
      GEST_CODICE "" ""

      COD_EREDITA "" "PRE;POST"

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio  non graficato
      //16 : schienali
      //32 : punti
      M4_DIALOG "" 32
      M4_MIS    "" "X;Y;Z"

      BasiLatoA   "" 0
      BasiLatoB   "" 0

      idx_cnear_a "" -1
      idx_cnear_b "" -1

      // FT 10/02/2020 - Aggiungo  un sensore
      // per verificare le barre sotto.
      // di default comanda sempre la barra superiore
      BarreSinistra "" 0
      BarreAlto     "" 0
      BarreBasso    "" 0
      idx_cnear_barre_A  "" - 1
      idx_cnear_barre_S  "" - 1
      idx_cnear_barre_B  "" - 1

      //M4_A_MURO "" 0
      M4_LINK2WALL_MODE__   ""  3

      M4_DLINK_MODE__ "rimane steso"  0

      FIN_var  "" "C002"
      FIN_orie   ""  "O"

      CMP2_AZIONI      ""      "M"

#ifndef AGE;RIV
      //Luca 04/02/2020
      VT_KITBARRA      "Num. KIT Ferramenta" "0"
      VT_NRSPINE       "Num. Spine"          "0"
#endif

   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostrBarIso
      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      //Stesura con due pick
      if($query_type==3)
      {
         $QueryResult__ = 2
         EXITSUB()
      }

      //per selezione
      //if($query_type==4)
      //{
      //   if( IS_MATCH(NOME($query_p1[1]),"ScoccaT*")==0
      //     | IS_MATCH(NOME($query_p1[2]),"ScoccaT*")==0 )
      //   {
      //      $QueryResult__ = 0
      //      DISPLAY3(MSG(1050),$MB_ICONERROR)
      //      EXITSUB()
      //   }
      //
      //   $CMP_CODICEATTUALE = NOME(ATTUALE())
      //   $wk_id_sx = $query_p1[1]
      //   $wk_id_dx = $query_p1[2]
      //
      //   $wk_cmd_elemento = STRCAT("ELEMENTO_S ",APICI(),$CMP_CODICEATTUALE,APICI())
      //   $wk_cmd_struttura = "STRUTTURA_S"
      //   $wk_cmd_var_set = "VAR_SET NO_AUTO=1"
      //   $wk_cmd_var_fix = ""
      //
      //   //Inverto sx con dx se il pick è stato fatto al contrario
      //   CTLR_SEQUENZA_SXDX( $wk_id_sx, $wk_id_dx )
      //
      //   SET_#($wk_id_sx)  P1 = #alto_0
      //   SET_#($wk_id_dx)  P2 = #alto_3
      //   ang_sx = ANG_TOT2($wk_id_sx)
      //   ang_dx = ANG_TOT2($wk_id_dx)
      //   if( ABS(ang_sx-ang_dx)>1  )
      //   //|c ABS(P1.y-P2.y)>1 )
      //   {
      //      //Strutture con angolo diverso
      //      //"Per la barra le basi selezionate devono essere allineate"
      //      DISPLAY3(MSG(1051),$MB_ICONERROR)
      //      EXITSUB()
      //   }
      //
      //   //Verifico la congiungente i punti estremi di stesura: deve avere lo stesso angolo
      //   //della prima struttura
      //   ang_top = ANG_2_PUNTI(P1,P2)
      //   if( ABS(ang_sx-ang_top)>1 )
      //   {
      //      DISPLAY3(MSG(1051),$MB_ICONERROR)
      //      EXITSUB()
      //   }
      //
      //   id_sx = $wk_id_sx
      //   id_dx = $wk_id_dx
      //
      //   //trovo l'array di tutti gli idx
      //   match="ScoccaT_*"
      //   dove="FA"
      //   GOSUB trova_tutti_idx_M4
      //
      //   //$wk_ele_sx = id_sx
      //   //$wk_k = 1
      //   //$wk_ele_int = $wk_ele_id[$wk_ele_id]
      //
      //   $ele = 1
      //   $id_ele = $wk_ele_id[$ele]
      //
      //   $wk_id_punto_sx = $id_ele            $wk_punto_sx = "base_0"
      //   $wk_id_punto_dx = $id_ele            $wk_punto_dx = "base_3"
      //
      //   //COMANDO2(STRCAT("LOGMSG ",STR($wk_id_punto_sx)," ",$wk_punto_sx," ",STR($wk_id_punto_dx)," ",$wk_punto_dx," \\Sub_StendiBarra"))
      //
      //   while($ele <= $wk_ele_id )
      //   {
      //      $id_ele = $wk_ele_id[$ele]
      //      $nome_ele = NOME($id_ele)
      //
      //      COMANDO2(STRCAT("LOGMSG $wk_id_punto_sx:",STR($wk_id_punto_sx)," Y=",STR(VAR_VAL($wk_id_punto_sx,"Y"))," $id_ele:",STR($id_ele)," Y=",STR(VAR_VAL($id_ele,"Y"))," \\Sub_StendiBarra"))
      //
      //      //stendo solo a paritaà di altezza
      //      if( VAR_VAL($id_ele,"Y")==VAR_VAL($wk_id_punto_sx,"Y")  ) { $wk_id_punto_dx =  $id_ele }
      //      else                                                      { $ele =  $wk_ele_id }
      //
      //      $ele = $ele + 1
      //   }
      //
      //   //COMANDO2($wk_cmd_elemento)
      //   //COMANDO2($wk_cmd_struttura)
      //   COMANDO2($wk_cmd_var_set)
      //   COMANDO2($wk_cmd_var_fix)
      //   COMANDO2(STRCAT("STENDI2 2 ",STR($wk_id_punto_sx)," ",$wk_punto_sx," 2 ",STR($wk_id_punto_dx)," ",$wk_punto_dx," \\Sub_StendiBarra"))
      //}
   }

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXIT() }

      if( ACTION()==$stesi_Action )
      {
         SHOW_POINT($idx_show_point, "punto_barra_*")
         EXIT()
      }

      GOSUB Stendi_Barra_Bifacciale
   }

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

      GOSUB Notifica_Barra_Bifacciale
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlBarraFusion
      GOSUB CtrlBasiBarra

      // FT 10/02/20
      if( UN_PADRE("GruppoBarraIsola") == 1 )
      {
         // FT 29/01/20 - per attivare la configurazione gestionale
         // in caso di attivazione da figlio di gruppo barra
         GOSUB CtrlEscluso
         GOSUB CAMBIA_VAR
      }

      //Luca 04/02/2020
      ConPiedini = SE_NUM(base_0.y>20,0,1)
   }

   Procedura PostControl
   {
      GOSUB CtrlBarraSotto
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_X


      // FT 31/01/2020 - notifico "visivamente" eventuali
      // errori di misura (caso in cui supera i 2700 mm).
      // Evidenzio con bordi rossi il pezzo
      if( X > $Cuc_X_Max_BarIso )  { M4_DRAW_MODE__ = 4 }
      else                         { M4_DRAW_MODE__ = 0 }

      //Luca 04/02/2020
      C003 = "__"
      if( ConPiedini==1 ) { C003 = "TE001" }
      VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

      GOSUB GestComune_Post
   }

   // FT 30/01/20
   // per impedire la cancellazione nel caso di figlio del
   // Gruppo barra isola, in quanto elemento automatico
   Procedura cancella
   {
      if( VAR_VAL(-1 , "StartingDel__") != ATTUALE() )   { EXIT() }

      //Luca 04/02/2020 se top level, prima di cancellare mi sgancio
      if( INSERIMENTO(ATTUALE()) == $ins_top_level )
      {
         AGGANCIATI("agg","*",ATTUALE())
         na = 1
         while(na<=agg)
         {
            idx_agg = agg[na]
            COMANDO2(STRCAT("LINK2POS ",STR(idx_agg) , " //cancella barra"))
            na = na + 1
         }

         EXIT()
      }

      //Luca 04/02/2020 nel caso sia figlio della barra non permetto la cancellazione
      if( INSERIMENTO2(ATTUALE()) != $ins2_componente )  { EXIT() }
      if( UN_PADRE("GruppoBarraIsola") != 1 )            { EXIT() }

      $no_cancel = 1
      COMANDO("VAR_SET$ $no_cancel=0")
   }

   Posiziona Blocco pnc
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   // FT 10/02/2020 - gestione delle giunzioni
   // per collegamento ORIZZONTALE
   // (giunzioni in senso verticale)
   Posiziona GruppoGiunzioniBarraIsola GB
   {
      @escluso = 1
      if( BarreBasso > 0 )  { @escluso = 0 }
      @base_0 = base_0
      @base_0.y = base_0.y - @Y / 2
      @X = X
      @VAR_tipo_giunzione = "ORIZZONTALE"
   }

   // FT 10/02/2020 - gestione delle giunzioni
   // per collegamento ORIZZONTALE
   // (giunzioni in senso verticale)
   Posiziona GruppoGiunzioniBarraIsola GA
   {
      @escluso = 1
      if( BarreAlto > 0 )  { @escluso = 0 }
      @base_0 = base_0
      @base_0.y = alto_0.y - @Y / 2
      @X = X
      @VAR_tipo_giunzione = "ORIZZONTALE"
   }

   // FT 10/02/2020 - gestione delle giunzioni
   // per collegamento VERTICALE
   // (giunzioni in senso orizzontale)
   Posiziona GruppoGiunzioniBarraIsola GS
   {
      @escluso = 1
      if( BarreSinistra > 0 )  { @escluso = 0 }
      @base_0 = base_0
      @base_0.x = base_0.x - @X / 2
      @Y = Y
      @VAR_tipo_giunzione = "VERTICALE"
   }

   Posiziona _cont_per_near na
   {
      idx_cnear_a = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z + Z + 10
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   Posiziona _cont_per_near nb
   {
      idx_cnear_b = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 10
      @X = X - 100
      @Y = Y - 100
      @Z = 10
   }

   // FT 10/02/2020 - Aggiungo  un sensore per verificare le barre a sinistra.
//   Posiziona Blocco nbsx
   Posiziona _cont_per_near nbsx
   {
      idx_cnear_barre_S = ATTUALE()
      @base_0.x = base_0.x - 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z + Z / 2 - 5
      @X = 10
      @Y = Y - 100
      @Z = 10
   }

   // FT 10/02/2020 - Aggiungo  un sensore per verificare le barre in alto.
//   Posiziona Blocco nbal
   Posiziona _cont_per_near nbal
   {
      idx_cnear_barre_A = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y + 50 - 10
      @base_0.z = base_0.z + Z / 2 - 5
      @X = X - 100
      @Y = 10
      @Z = 10
   }

   // FT 10/02/2020 - Aggiungo  un sensore per verificare le barre sotto.
//   Posiziona Blocco nbba
   Posiziona _cont_per_near nbba
   {
      idx_cnear_barre_B = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 50
      @base_0.z = base_0.z + Z / 2 - 5
      @X = X - 100
      @Y = 10
      @Z = 10
   }
}

Elemento GruppoBarraIsola
{
   Descrizione = "Gruppo Barre Isola"
   Code        = INT
   Gruppo      = "Cuc"
   Tipo        = Contenitore
   Forma       = ""
   Alias       BarraIsola;Base;CamInciso;CamIncidente;TSTP_NoQuota

   Variabili
   {
      // #include %path_bdm%\var_db.inc

      X       "Larghezza"       368   Utente ( 184-8100 )
      Y       "Altezza"         349   Menu ( AltBRIS )  Utente ( 165-901 )
      Z       "Profondità"       40   ShowAlways

      // larghezza massima della barra isola
      X_BarMax   "Larghezza massima della barra isola"   2700

      // numero barre (al massimo ne gestisco 3 al momento)
      N_Bar      "Numero di barre da gestire"   1   SaveAlways

      X_Bar1     "Larghezza Barra 1"   368   SaveAlways
      X_Bar2     "Larghezza Barra 2"     0   SaveAlways
      X_Bar3     "Larghezza Barra 3"     0   SaveAlways
      X_Bar4     "Larghezza Barra 4"     0   SaveAlways

      //Luca 19/07/2019 utilizzate nel caso di isola
      //se devo ridurre per far spazio al fianco finitura
      FSN_RRid_DX "" 0 SaveAlways
      FSN_RRid_SX "" 0 SaveAlways

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio  non graficato
      //16 : schienali
      //32 : punti
      M4_DIALOG "" 32
      M4_MIS    "" "X;Y;Z"

      BasiLatoA   "" 0
      BasiLatoB   "" 0

      idx_cnear_a "" -1
      idx_cnear_b "" -1

      idx_barra_2 "" -1
      idx_barra_3 "" -1
      idx_barra_4 "" -1

      DEBUG "Attiva/Disattiva debug" 0

      //M4_A_MURO "" 0
      M4_LINK2WALL_MODE__   ""  3

      M4_DLINK_MODE__ "rimane steso"  0

      CMP2_AZIONI      ""      "M|S"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB NO_AUTO
      GOSUB Stato_7


      // "GRUPPO BARRE ISOLA"
      M4_GRUPPO__  = MSG(1014)
      DescEdit__ = M4_GRUPPO__

      HiEdit__ = $HE_Italico

      Z = $Cuc_Spe_BarraIso
      X_BarMax = $Cuc_X_Max_BarIso

      // misure per sensori di vicinanza
      OffX_CNear =  50
      OffY_CNear =  50
      OffZ_CNear =  10
      X_CNear = X - 2 * OffX_CNear
      Y_CNear = Y - 2 * OffY_CNear
      Z_CNear = 10

      // settings
      if( N_Bar == 1 )   { X_Bar1 = X    X_Bar2 = 0   X_Bar3 = 0  X_Bar4 = 0 }
      if( N_Bar == 2 )   { X_Bar3 = 0    X_Bar4 = 0 }
      if( N_Bar == 3 )   { X_Bar4 = 0 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      // FT 29/01/2020 - punti a inizio fine per il segmento dell'interferisci
      pnt_barra_sx = [0, 0, Z / 2]
      pnt_barra_dx = [X, 0, Z / 2]

      // FT 29/01/2020 - punto a metà barra per check basi
      pnt_barra_2 = [X / 2, 0, Z / 2]

      // FT 29/01/2020 - punti a 1/3 e 2/3 della metà barra per check basi
      pnt_barra_1_3 = [X / 3, 0, Z / 2]
      pnt_barra_2_3 = [2 * X / 3, 0, Z / 2]
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      //Stesura con due pick
      if( $query_type == 3 )
      {
         $QueryResult__ = 2
         EXITSUB()
      }
   }

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(), "delme") == 1 )   { EXIT() }

      if( ACTION() == $stesi_Action )
      {
         SHOW_POINT($idx_show_point, "punto_barra_*")
         EXIT()
      }

      GOSUB Stendi_Barra_Bifacciale

      // non supero mai la misura massima
      if( Y > $Cuc_Y_Max_BarIso )   { Y = $Cuc_Y_Max_BarIso }
   }

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

      GOSUB Notifica_Barra_Bifacciale

      // FT 30/01/2020 - attivo il controllo locale per il calcolo della barra isola
      // una volta completata la notifica dell'elemento al primo inserimento
      COMANDO(STRCAT("Procedura CtrlBarraIsola ", STR(idx_att)))
   }

   // FT 31/01/2020
   Procedura OnSostituisci
   {
      // se sostituisco mi prendo le misure (o altre variabili numeriche)
      // dell'elemento che vado a sostituire
      wk_var_sost = "X"   GOSUB SettaValVarSost
      wk_var_sost = "Y"   GOSUB SettaValVarSost


      // per far attivare il post-action2 solo in questo caso.
      // negli altri casi la procedura di controllo viene chiamata
      // a valle degli stessi controlli (notifica, ecc).
      // La variabilie non deve essere salvata
      OnSostituisci = 1
   }

   // FT 31/01/2020
   Procedura PostAction2
   {
      // non serve in fase di caricamento ordine... solo interattivo
      if( VAR_VAL(-1, "__loading__") != 0 )   { EXIT() }

      // solo nel caso sia posizionato in "sostituzione"
      if( VAR_VAL(idx_att, "OnSostituisci") != 1 )  { EXIT() }

      // FT 30/01/2020 - attivo il controllo locale per il calcolo della barra isola
      // una volta completata la notifica dell'elemento al primo inserimento
      COMANDO(STRCAT("Procedura CtrlBarraIsola ", STR(idx_att)))
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlBarraFusion

      GOSUB CtrlBasiBarra
   }

   // FT Chiamata solo quando serve
   Procedura CtrlBarraIsola
   {
      GOSUB CtrlBarraIsola
   }

   // Chiamata per Debug
   Procedura CtrlBarraIsolaDebug
   {
      DEBUG = 1
      GOSUB CtrlBarraIsola
      DEBUG = 0
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_CODICE = ""
      //FLAG_RADICE = $NO_RAD

      GOSUB GestComune_Post
   }

   Posiziona BarraIsola BI1
   {
      @base_0 = base_0
      @X = X_Bar1
      @Y = Y
      @Z = Z
   }

   Posiziona BarraIsola BI2
   {
      idx_barra_2 = ATTUALE()

      @escluso = 1
      if( N_Bar >= 2 )   { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X_Bar1
      @X = X_Bar2
      @Y = Y
      @Z = Z
   }

   Posiziona BarraIsola BI3
   {
      idx_barra_3 = ATTUALE()

      @escluso = 1
      if( N_Bar >= 3 )   { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X_Bar1 + X_Bar2
      @X = X_Bar3
      @Y = Y
      @Z = Z
   }

   Posiziona BarraIsola BI4
   {
      idx_barra_4 = ATTUALE()

      @escluso = 1
      if( N_Bar >= 4 )   { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X_Bar1 + X_Bar2 + X_Bar3
      @X = X_Bar4
      @Y = Y
      @Z = Z
   }

   // LATO A
   Posiziona _cont_per_near_2 LatoA
   {
      idx_cnear_a = ATTUALE()
      @base_0.x = base_0.x + OffX_CNear
      @base_0.y = base_0.y + OffY_CNear
      @base_0.z = base_1.z
      @X = X_CNear
      @Y = Y_CNear
      @Z = Z_CNear

      @DEBUG = DEBUG
      @c_rivestimento = [255, 0, 0]
   }

   // Lato B
   Posiziona _cont_per_near_2 LatoB
   {
      idx_cnear_b = ATTUALE()
      @base_0.x = base_0.x + OffX_CNear
      @base_0.y = base_0.y + OffY_CNear
      @base_0.z = base_0.z - OffZ_CNear
      @X = X_CNear
      @Y = Y_CNear
      @Z = Z_CNear

      @DEBUG = DEBUG
      @c_rivestimento = [0, 255, 0]
   }
}

// FT 10/02/2020
Elemento GruppoGiunzioniBarraIsola
{
   Descrizione = "Gruppo giunzioni per barra isola"
   Code        = INT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias GruppoGiunzioniBI

   Variabili
   {
      X   "Larghezza"   1000
      Y   "Altezza"      103
      Z   "Profondità"    40

      // Variabili di configurazione passate dal padre

      // La giunzione ORIZZONTALE si sviluppa in verticale
      // e serve per tenere uniti 2 pannelli in senso verticale.
      VAR_tipo_giunzione "Tipo Giunzione" "ORIZZONTALE"
      VAR_n_giunzioni    "Numero giunzioni" 2
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostrBarIso

      GOSUB NO_AUTO
      GOSUB Stato_78

      HIDE = 1

      // Offset tra giunzioni
      OffX_GiuGiu = 0
      if( VAR_tipo_giunzione == "ORIZZONTALE" )
      {
         VAR_n_giunzioni = 2

         Y = Y_Giu

         if( X > 920 )    { VAR_n_giunzioni = 3 }
         if( X > 1656 )   { VAR_n_giunzioni = 4 }

         if( VAR_n_giunzioni > 2 )   { OffX_GiuGiu = (X - 2 * OffX_GiuLat) / (VAR_n_giunzioni - 1) }
      }


      OffY_GiuGiu = 0
      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         VAR_n_giunzioni = 1

         X = X_Giu

         if( Y > 256 )    { VAR_n_giunzioni = 2 }
         if( Y > 717 )    { VAR_n_giunzioni = 3 }

         if( VAR_n_giunzioni > 2 )   { OffY_GiuGiu = (Y - OffY_GiuA - OffY_GiuB) / (VAR_n_giunzioni - 1) }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

// DEBUG   Posiziona Blocco Vedi
// DEBUG   {
// DEBUG      @base_0 = base_0
// DEBUG      @base_0.z = base_0.z - 10
// DEBUG      @X = X
// DEBUG      @Y = Y
// DEBUG      @Z = Z + 20
// DEBUG      @f_rivestimento = "1"
// DEBUG      @m_rivestimento = ""
// DEBUG      @c_rivestimento = [255, 0, 255]
// DEBUG   }

   // prima giunzione a sx o prima dal basso
   Posiziona GiunzioneBarraIsola G1
   {
      @base_0 = base_0
      @base_0.x = base_0.x + OffX_GiuLat - D_Ecc / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_0.x
         @base_0.y = base_0.y + OffY_GiuB - D_Ecc / 2
      }
   }

   // ultima giunzione a dx o ultima in alto
   Posiziona GiunzioneBarraIsola G2
   {
      @escluso = 1
      if( VAR_n_giunzioni > 1 )  { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_3.x - OffX_GiuLat - D_Ecc / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_0.x
         @base_0.y = alto_0.y - OffY_GiuA - D_Ecc / 2
      }
   }

   // giunzione centrale sx
   Posiziona GiunzioneBarraIsola G3
   {
      @escluso = 1
      if( VAR_n_giunzioni > 2 )  { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + OffX_GiuLat + OffX_GiuGiu - D_Ecc / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_0.x
         @base_0.y = base_0.y + OffY_GiuB + OffY_GiuGiu - D_Ecc / 2
      }
   }

   // giunzione centrale dx
   // (mai verticale in quanto al massimo sono 3)
   Posiziona GiunzioneBarraIsola G4
   {
      @escluso = 1
      if( VAR_n_giunzioni > 3 )  { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + OffX_GiuLat + 2 * OffX_GiuGiu - D_Ecc / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione
   }

   // Spina sx
   Posiziona SpinaBarraIsola S1
   {
      @base_0 = base_0
      @base_0.x = base_0.x + Off_SpiGiu - @X / 2
      @base_0.y = base_0.y + Y / 2 - @Y / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_0.x + X / 2 - @X / 2
         @base_0.y = base_0.y + OffY_GiuB - Off_SpiGiu - @Y / 2
      }
   }

   // Spina dx
   Posiziona SpinaBarraIsola S2
   {
      @base_0 = base_0
      @base_0.x = base_3.x - Off_SpiGiu - @X / 2
      @base_0.y = base_0.y + Y / 2 - @Y / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_0.x + X / 2 - @X / 2
         @base_0.y = alto_0.y - OffY_GiuA + Off_SpiGiu - @Y / 2
      }
   }

   // Spina cx
   // Solo orizzontale in quanto in verticale ce
   // ne sono al massimo 2
   Posiziona SpinaBarraIsola S3
   {
      @escluso = 1
      if( VAR_n_giunzioni > 3 )  { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X / 2 - @X / 2
      @base_0.y = base_0.y + Y / 2 - @Y / 2
      @VAR_tipo_giunzione = VAR_tipo_giunzione
   }

}

// FT 10/02/2020
Elemento GiunzioneBarraIsola
{
   Descrizione = "Giunzione per barra isola"
   Code        = INT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias GiunzioneBI

   Variabili
   {
      X   "Larghezza"    35
      Y   "Altezza"     103
      Z   "Profondità"   40

      // La giunzione ORIZZONTALE si sviluppa in verticale
      // e serve per tenere uniti 2 pannelli in senso verticale.
      VAR_tipo_giunzione "Tipo Giunzione" "ORIZZONTALE"  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostrBarIso

      GOSUB NO_AUTO
      GOSUB Stato_78

      HIDE = 1

      X = X_Giu
      Y = Y_Giu

//TEST X ALIAS      alias_add = VAR_tipo_giunzione
//TEST X ALIAS      GOSUB SetAliasPlus
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() == 1 )
      {
         SHOW_MODE(idx_att, $Cuc_GiunzioniShow)
      }
   }

//   Posiziona Blocco Vedi
//   {
//      GOSUB posa_blocco
//      @f_rivestimento = "1"
//      @m_rivestimento = ""
//      @c_rivestimento = [255, 255, 255]
//   }

   Posiziona CilindroZ  Ecc1
   {
      @base_0 = base_0
      @base_0.z = base_0.z - kv
      @X = D_Ecc
      @Y = D_Ecc
      @Z = Z + 2 * kv
      GOSUB RIV_Eredita
   }

   Posiziona CilindroZ  Ecc2
   {
      @base_0 = alto_0
      @base_0.y = alto_0.y - D_Ecc
      @base_0.z = base_0.z - kv
      @X = D_Ecc
      @Y = D_Ecc
      @Z = Z + 2 * kv

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @base_0.x = base_3.x - D_Ecc
         @base_0.y = base_3.y
      }

      GOSUB RIV_Eredita
   }

   // spiena cilindrica (come da doc)
   //Posiziona CilindroY  SpiVer
   //{
   //   @ang_z = 0
   //   @base_0.x = base_0.x + X / 2 - D_Spi / 2
   //   @base_0.y = base_0.y + Y / 2 - L_Spi / 2
   //   @base_0.z = base_0.z + Z / 2 - D_Spi / 2
   //   @X = D_Spi
   //   @Y = L_Spi
   //   @Z = D_Spi
   //
   //   if( VAR_tipo_giunzione == "VERTICALE" )
   //   {
   //      @ang_z = 90
   //      @base_0.x = base_0.x + X - D_Ecc / 2
   //      @base_0.y = base_0.y + Y / 2 - D_Spi / 2
   //   }
   //
   //   GOSUB RIV_Eredita
   //}

   // Per vedere meglio la spina in grafica
   // faccio un blocco più profondo
   Posiziona Blocco SpiVer
   {
      @base_0.x = base_0.x + X / 2 - D_Spi / 2
      @base_0.y = base_0.y + Y / 2 - L_Spi / 2
      @base_0.z = base_0.z - kv
      @X = D_Spi
      @Y = L_Spi
      @Z = Z + 2 * kv

      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         @X = L_Spi
         @Y = D_Spi

         @base_0.x = base_0.x + X / 2 - L_Spi / 2
         @base_0.y = base_0.y + Y / 2 - D_Spi / 2
      }

      GOSUB RIV_Eredita
   }
}

// FT 10/02/2020
Elemento SpinaBarraIsola
{
   Descrizione = "Giunzione per barra isola"
   Code        = INT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias SpinaBI

   Variabili
   {
      X   "Larghezza"    12
      Y   "Altezza"      65
      Z   "Profondità"   12

      // La giunzione ORIZZONTALE si sviluppa in verticale
      // e serve per tenere uniti 2 pannelli in senso verticale.
      VAR_tipo_giunzione "Tipo Giunzione" "ORIZZONTALE"  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostrBarIso

      GOSUB NO_AUTO
      GOSUB Stato_78

      HIDE = 1

      Z = D_Spi

      // Se la giunzione è orizzontale la spina è verticale
      // dal punto di vista grafico
      if( VAR_tipo_giunzione == "ORIZZONTALE" )
      {
         X = D_Spi
         Y = L_Spi
      }

      // Se la giunzione è verticale la spina è orizzontale
      // dal punto di vista grafico
      if( VAR_tipo_giunzione == "VERTICALE" )
      {
         X = L_Spi
         Y = D_Spi
      }

      c_rivestimento = [0, 0, 255]
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() == 1 )
      {
         SHOW_MODE(idx_att, $Cuc_GiunzioniShow)
      }
   }

   // Per vedere meglio la spina in grafica
   // faccio un blocco più profondo
   Posiziona Blocco Spina
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z - kv
      @Z = Z + 2 * kv
      GOSUB RIV_Eredita
   }
}

Elemento FiancoFinitura
{
   Descrizione = "Fianco Finitura"
   Code        = INT
   Gruppo      = "Cuc"
   Tipo        = Contenitore
   Forma       = ""
   Alias         Base;CamIncidente;FiancoFin;StpTrafileFiancoFin
   //;TSTP_NoQuota_PROSPETTI
   //Alias         CamIncidente;FiancoFin

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Y                     "Altezza nominale"                                           366   Utente   (   )
      //ShowAlways
      Z                     "Profondità"                                                 368   Utente   (   )
      //ShowAlways
      X                     "Spessore"                                                   4

      //dimensioni reali
      Xr                    "Larghezza"                                                  368
      Yr                    "Altezza"                                                    368

      Verso                 ""                                                           -1

      //0 BASE A PARETE
      //1 BASE BIFACCIALE
      //2 BASE DOPPIA
      //3 COLONNA
      //4 BASE ANGOLO ISOLA
      //5 BASE AIR KITCHEN
      TipoFFinitura         "Tipo Fianco"                                                0     SaveAlways
      TipoFFLvst            "Fianco lvst"                                                0

      // [ FT 02/03/20 - decodifico il tipo di finitura/struttura ----------------
      // e la salvo come SaveAlways perchè identifica anche
      // lo spessore del fianco (VETRO/WILDWOOD)
      // Vedi controllo in TabEredita (POST)
      FF_Materiale          "Struttura/Materiale"                                        ""    SaveAlways
      FF_Tipologia          "Tipologia Base Riferimento"                                 ""    SaveAlways

      FF_PosizioneSD_Ref    "Posizione Sx/Dx Riferimento"                                ""    SaveAlways
      FF_ProfBase_Ref       "Profondità base di riferimento"                             368   SaveAlways

      FF_PosizioneSD_Bif    "Posizione Sx/Dx Bifacciale"                                 ""    SaveAlways
      FF_ProfBase_Bif       "Profondità base Bifacciale"                                 368   SaveAlways

      FF_PosizioneABCI      "Posizione Alto/Basso/Centro"                                ""    SaveAlways
      FF_DistanzaFB         "Distanza da filo Basso"                                     0     SaveAlways
      FF_DistanzaFA         "Distanza da filo Alto"                                      0     SaveAlways

      // FT 04/06/2020
      FF_PosizioneH_Ref     "Posizione H Riferimento"                                    ""    SaveAlways
      FF_PosizioneH_Bif     "Posizione H Bifacciale"                                     ""    SaveAlways

      FF_idx_base_ref       ""                                                           -1
      FF_idx_base_bif       ""                                                           -1

      FF_idx_grp1           ""                                                           -1
      FF_idx_grp2           ""                                                           -1

      //Luca 07/09/2020
      //mantis 23279: Fianchi di finitura: possibilità di disattivare trafile
      FF_Disattiva          "Disattiva trafile"                                          0     Menu     (   SiNo      )
      // ] FT 02/03/20 - decodifico il tipo di finitura/struttura ----------------

      // LP 22/03/2021
      FF_ScoccheYSX         "Scocche a sx in Y per gruppi attrezzati"                    0
      FF_ScoccheYDX         "Scocche a dx in Y per gruppi attrezzati"                    0
      FF_ScoccheZSX         "Scocche a sx in Z per gruppi attrezzati"                    0
      FF_ScoccheZDX         "Scocche a dx in Z per gruppi attrezzati"                    0
      FF_DisattivaSoloLav   "Disattiva solo le trafile ma mantieni il resto"             0

      //fianco finitura in appoggio top
      FiancoColAppTop       ""                                                           0     SaveAlways

      VetroDoppio           "Vetro Doppio"                                               0     Menu     (   SiNo      )
      ZFascia1              "Profondità fascia retro"                                    250   Utente   (   160-300   )

      //Luca 12/07/2019 -- SNACK
      SNACK_RidY            ""                                                           70
      ConPianoSNACK         ""                                                           0     SaveAlways

      idx_near_sup          ""                                                           -1

      NO_GEST               ""                                                           0
      RADICE                ""                                                           ""
      GEST_CODICE           ""                                                           ""

      COD_EREDITA           ""                                                           "PRE;POST"

      idx_ref               ""                                                           -1

      idx_struttura         ""                                                           -1

      idx_vetro1            ""                                                           -1
      idx_vetro2            ""                                                           -1

      XGLASS                "Num. XGLASS"                                                ""    Utente   (   )

      Y_Min                 "Altezza minima"                                             73
      Z_Min                 "Profondità minima"                                          70

      // LP 23/03/2021 al momento utilizzo una revisione incrementale.
      // legata ai rilasci a bdm e non a date di attivazione
      // Sarà da capire come gestire al meglio il sistema revisioni
      // REVISIONE=1 : LP 24/03/2021
      // REVISIONE=2 : gestione dei fianchi unici su basi sovrapposte
      // REVISIONE=3 : gestione delle nuove stampe per i fianchi di revisione 2
      // REVISIONE=4 : gestione prigionieri per fianchi in ww
      // REVISIONE=5 : gestione basi H873/890
      // REVISIONE=7 : corretta posizione in Z perni fianchi in ww
      REVISIONE             "Revisione Incrementale (salvata al primo inserimento)"      7
      REV                   "Revisione Corrente (quella con cui stà lavorando il bdm)"   0     // da passare ai figli o implicit
      VT_VES_STRINGA        "Passo revisione a gestionale"                               ""

      DEBUG                 ""                                                           0
      DEBUG2                ""                                                           0

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio non graficato
      //16 : schienali
      //32 : punti
      //#ifdef TEC
      // M4_DIALOG "" 34
      //#endif
      //#ifndef TEC
      // M4_DIALOG "" 32
      //#endif
      M4_DIALOG             ""                                                           34

      M4_MIS                ""                                                           "X;Y;Z"

      //M4_A_MURO "" 0
      M4_LINK2WALL_MODE__   ""                                                           3

      M4_DLINK_MODE__       "rimane steso"                                               0

      FIN_var               ""                                                           "C018"
      FIN_orie              ""                                                           "O"

      CMP2_AZIONI           ""                                                           "M"

      FillerM2G             " "                                                          ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      Cucina_Versione_Idx = idx_struttura
      GOSUB CucP_Assegnazioni

      M4_GRUPPO__  = "FIANCO FINITURA"
      M4_MIS = "Filler*;X;Y*;Z*;VetroDoppio;ZFascia1;FF_Disattiva"

      Revisione_Incrementale_Inserimento( idx_att, "REV", REVISIONE)

      HIDE_ON_EDIT2( ATTUALE(), "ZFascia1", 1-VetroDoppio)
      HIDE_ON_EDIT2( ATTUALE(), "VetroDoppio", SE_NUM(TipoFFinitura==3 & FF_Materiale=="VETRO", 0, 1))

     #ifdef AGE;RIV
      if( ACTION() == 0)
      {
         HIDE_ON_EDIT2( ATTUALE(), "FF_Disattiva", 1)
      }
     #endif

      GOSUB NO_AUTO

      // Passo REV a gestionale per facilitare ricerca ordini errati
      VT_VES_STRINGA = FMT( "REV={}", STR(REV))
   }

   PuntiNotevoli
   {
      // X
      if( FF_Materiale == "LAMINATO" )  { X = $Cuc_X_FiaFin_Lam }
      if( FF_Materiale == "VETRO" )     { X = $Cuc_X_FiaFin_Vet }
      if( FF_Materiale == "WILDWOOD" )  { X = SE_NUM( Cucina_Versione > 2, $Cuc_X_FiaFin_Vet, $Cuc_X_FiaFin_WW) }
      if( FF_Materiale == "HPL" )       { X = $Cuc_X_FiaFin_HPL }

      // Y
      Yr = Y - 2*$Cuc_Aria_Ant_Y
      if( TipoFFinitura==3 )
      {
         Yr = Y
         if( FiancoColAppTop==1 ) { Yr = Y - $Cuc_Aria_Ant_Y }
      }

      // Punti
      GOSUB punti

      pnt_cnr = base_0     pnt_cnr.x = pnt_cnr.x + (base_3.x - base_0.x)/2

      stp_base_0 = base_0  stp_base_0.y = $Cuc_Aria_Ant_Y
      stp_base_1 = base_1  stp_base_1.y = $Cuc_Aria_Ant_Y
      stp_base_2 = base_2  stp_base_2.y = $Cuc_Aria_Ant_Y
      stp_base_3 = base_3  stp_base_3.y = $Cuc_Aria_Ant_Y

      stp_alto_0 = alto_0  stp_alto_0.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_1 = alto_1  stp_alto_1.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_2 = alto_2  stp_alto_2.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_3 = alto_3  stp_alto_3.y = $Cuc_Aria_Ant_Y + Yr

      // Da revisione 2, vano nascosto per attrezzaggio automatico FFGruppoLavorazioni
      if( REV >= 2)
      {
         vano_0_0 = [0, 0, 0]

         vano_l_0 = X
         vano_h_0 = Y
         vano_p_0 = Z

         vano_hide_0 = 1
      }
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXIT() }

      if( ACTION()==$stesi_Action )
      {
         vedi_pnt_dx = 1
         vedi_pnt_sx = 1

         if( VAR_EXIST($idx_show_point,"idx_sx") )
         {
            wk_idx_sx = VAR_VAL($idx_show_point,"idx_sx")
            if( IS_IDX(wk_idx_sx) )
            {
               if( VAR_VAL($idx_show_point,"Y") <= VAR_VAL(wk_idx_sx,"Y")
                 & VAR_VAL($idx_show_point,"Zt") <= VAR_VAL(wk_idx_sx,"Zt")
                 //Luca 08/01/2020 aggiungo controllo stesso angolo
                 & ABS(ANG_TOT2($idx_show_point)-ANG_TOT2(wk_idx_sx))<0.1 )
               {
                  vedi_pnt_sx = 0
                  if( ABS(VAR_VAL($idx_show_point,"base_0.y")-VAR_VAL(wk_idx_sx,"base_0.y"))>5 )    { vedi_pnt_sx = 1 }
               }
            }
         }
         if( VAR_EXIST($idx_show_point,"idx_dx") )
         {
            wk_idx_dx = VAR_VAL($idx_show_point,"idx_dx")
            if( IS_IDX(wk_idx_dx) )
            {
               if( VAR_VAL($idx_show_point,"Y") <= VAR_VAL(wk_idx_dx,"Y")
                 & VAR_VAL($idx_show_point,"Zt") <= VAR_VAL(wk_idx_dx,"Zt")
                 //Luca 08/01/2020 aggiungo controllo stesso angolo
                 & ABS(ANG_TOT2($idx_show_point)-ANG_TOT2(wk_idx_dx)) < 0.1 )
               {
                  vedi_pnt_dx = 0
                  if( ABS(VAR_VAL($idx_show_point,"base_0.y")-VAR_VAL(wk_idx_dx,"base_0.y"))>5 )    { vedi_pnt_dx = 1 }
               }
            }
         }

         if( vedi_pnt_sx==1 & vedi_pnt_dx==0 )
         {
            SHOW_POINT($idx_show_point, "punto_ff_sx*")
         }
         if( vedi_pnt_sx==0 & vedi_pnt_dx==1 )
         {
            SHOW_POINT($idx_show_point, "punto_ff_dx*")
         }
         if( vedi_pnt_sx==1 & vedi_pnt_dx==1 )
         {
            SHOW_POINT($idx_show_point, "punto_ff_*")
         }

         EXIT()
      }

      GOSUB Stendi_FiancoFinitura
   }

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

      GOSUB Notifica_FiancoFinitura
   }

   Procedura OnTabEredita
   {
      //eredito il valore da GEST_C001 della base
      if( TABER_REGOLA == "PRE")
      {
         if( VAR_VAL_STR(-1,"GEST_C018")==""
           | VAR_VAL_STR(-1,"GEST_C018")=="__"  )
         {
            if( IS_IDX(idx_ref) )
            {
               C018 = VAR_VAL_STR(idx_ref,"GEST_C001")
               VarAdd = "C018"   GOSUB Add_TABER_VARSETTATE
            }
         }
      }

      // FT 02/03/20 - decodifico il tipo di finitura/struttura
      GOSUB OTE_SetFFMateriale
   }

   Controlli
   {
      GOSUB CtrlComune

      // da revisione 1
      if( REV >= 1 )
      {
         //Limiti minimi
         Y_Min = 73
         Z_Min = 70

         if( FF_Materiale == "WILDWOOD" )
         {
            Y_Min = 92
            Z_Min = 93
         }

         if( ACTION() == 2 )
         {
            VAR_SET_MENU( idx_att, "Y", STRCAT( "(", STR(Y_Min), "-)"))
            VAR_SET_MENU( idx_att, "Z", STRCAT( "(", STR(Z_Min), "-)"))
         }

         // Manualmente è limitato da menù, se però per alcuni motivi la misura
         // viene modificata manualmente (VAR_CHANGE/VAR_FIX/RVAR) o da controlli
         // semi-automatici, allora evidenzio graficamente il problema
         if( Y < Y_Min
           | Z < Z_Min ) { M4_DRAW_MODE__ = 4 }
      }

      // per test attivo il debug fintanto che non diventa operativo con le stampe
      //if( REV >= 4 )   { DEBUG2 = 1 }

      //definisco idx struttura a cui sono agganciato
      if( IS_IDX(idx_ref) == 1 ) { idx_struttura = idx_ref }

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder == 0 )
      {
         idx_struttura = AGGANCIATA( ATTUALE(), "*")

         //Se cambia l'altezza dello zoccolo, ripoziono (per esempio se la base/colonna passa da terra a sospesa o viceversa)
         if( $OnLoadOrder2 == 0 ) { CheckStrCnt_Var( ATTUALE(), idx_struttura, "Cuc_Alt_Zoc", "Y", 1) }

         //Luca 24/07/2020 aggiungo controllo nel caso in cui non sia agganciato
         if( IS_IDX(idx_struttura) == 0 )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2("wk_ScoccaSx", idx_cnear_sx, 1, "ScoccaT_*")
            NEAR_GLOBALE2("wk_ScoccaDx", idx_cnear_dx, 1, "ScoccaT_*")

            if( wk_ScoccaSx>0 ) { idx_struttura = wk_ScoccaSx[1] }
            if( wk_ScoccaDx>0 ) { idx_struttura = wk_ScoccaDx[1] }
         }
      }

      // FT 02/03/2020 - Aggiunta anche la decodifica letterale in FF_Tipologia
      // FT //Luca 20/03/2019 definisco tipo bifacciale
      if( IS_IDX(idx_struttura) == 1 )
      {
         TipoFFinitura = 0
         TipoFFLvst    = 0

         if( VAR_VAL(idx_struttura, "ConBifacciale") == 1 )       { TipoFFinitura = 1 }
         if( VAR_VAL(idx_struttura, "ConBarraIsola") == 1 )       { TipoFFinitura = 2 }

         if( IS_MATCH(NOME(idx_struttura),"ScoccaT_C*") == 1 )    { TipoFFinitura = 3 }

         //Luca 02/08/2019
         if( NOME(idx_struttura) == "ScoccaT_BaseAngoloIsola" )   { TipoFFinitura = 4 }

         if( UN_PADRE("ScoccaT_Base_AirKitchen") )                { TipoFFinitura = 5 }

         if( NOME(idx_struttura) == "ScoccaT_BaseLvst" & Z<=724 ) { TipoFFLvst = 1 }

         //Luca 19/06/2019 aggiungo alias per stampa
         //quoto fianco in stampa solo se di altezza e profondità uguale al fianco a cui sono agganciat
         wk_alias  = "TSTP_NoQuota_PROSPETTI"
         alias_plus = ""
         ALIAS_PLUS(ATTUALE(),0)

         if( VAR_VAL(idx_struttura,"Y")>Y
           | VAR_VAL(idx_struttura,"Z")>Z  )
         {
             alias_plus = wk_alias
             ALIAS_PLUS(ATTUALE(),1)
         }

         // [ FT 02/03/2020 - identifico le caratteristiche del fianco di finitura
         GOSUB FFAnalizza

         FF_idx_ref = idx_struttura
         GOSUB FFTipologia
         // ] FT 02/03/2020 - identifico le caratteristiche del fianco di finitura

         //COMANDO2(STRCAT("LOGMSG FFSetLavorazioni  [",STR(ATTUALE()), "] | ACTION(",STR(ACTION()),")  | $OnLoadOrder[",STR($OnLoadOrder),"-",STR($OnLoadOrder2),"]  | idx_ref=",STR(idx_ref) , " | idx_struttura=",STR(idx_struttura), " | FF_idx_ref=",STR(VAR_VAL(ATTUALE(),"FF_idx_ref")) ))
      }

      //Luca 12/07/2019 controllo eventuale presenza del piano SNACK
      GOSUB CtrlPresenzaSNACK

      // LP 19/04/2021
      GOSUB CtrlPresenzaTopSteelPen

      //Luca 25/03/2019
      GOSUB Ctrl_FiancoAppoggioSuTop
   }

   Gestionale
   {
      if( NO_GEST == 1)
      {
         FLAG_RADICE = $NO_RAD
         RADICE = ""
         GEST_CODICE = ""

         GOSUB GestComune_Post
         EXIT()
      }

      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_X

      GEST_Y = Yr

      perRADICE = "FIFINBA"
      if( TipoFFinitura == 1 )  { perRADICE = "FIFINBABI"  }
      if( TipoFFinitura == 2 )  { perRADICE = "FIFINBADOP" }
      if( TipoFFinitura == 3 )  { perRADICE = "FIFINCO"    }
      if( TipoFFinitura == 4 )  { perRADICE = "FIFIBAANG"  }
      if( TipoFFinitura == 5 )  { perRADICE = "FFAKI"      }

      if( TipoFFLvst > 0
        & Cucina_Versione <= 2
        & IS_IDX(idx_struttura) == 1)
      {
         perRADICE = "FIFINBALVST"

         if( TipoFFinitura==1
           | TipoFFinitura==2 ) { perRADICE = "FIFINBABILVST" }
      }

      if( Cucina_Versione > 2)
      {
         if( TipoFFinitura == 3
           & VAR_VAL( idx_struttura, "ConBifacciale") > 0) { perRADICE = "FIFINCOBI" }

         if( VAR_VAL( ATTUALE(), "VetroDoppio") > 0) { perRADICE = STRCAT( perRADICE, "N") }
         perRADICE = STRCAT( perRADICE, "3")
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C003_FiancoFinitura
      GOSUB Set_Rev_NowNastro_Gest_C179
   }

   //Luca 22/09/2020 lancio ricalcolo trafile alla fine del caricamento ordine, devo avere i valori corretti per il CAM
   Procedura FFRicalcolaTrafile
   {
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()), " no_agganciati no_ridisegna //FFRicalcolaTrafile"))
   }

   // LP 13/04/2021
   Procedura FFAttrezzaGrpLavSx
   {
      NEAR_GLOBALE2("FF_ScoccaSx", idx_cnear_sx, 1, "ScoccaT_*")
      GOSUB FFAttrezzaGrpLavSx

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()), " no_agganciati  //FFAttrezzaGrpLavSx"))
   }

   // LP 13/04/2021
   Procedura FFAttrezzaGrpLavDx
   {
      NEAR_GLOBALE2("FF_ScoccaDx", idx_cnear_dx, 1, "ScoccaT_*")
      GOSUB FFAttrezzaGrpLavDx

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()), " no_agganciati  //FFAttrezzaGrpLavDx"))
   }

   Posiziona Blocco pnc
   {
      @escluso = 0
      if( TipoFFinitura==3 )  { @escluso = 1 }

      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  )
      {
         if( FF_Materiale == "VETRO"  ) { @escluso = 1 }
      }

      GOSUB posa_blocco
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      //@Y = Y - 2*$Cuc_Aria_Ant_Y
      @Y = Yr
      GOSUB rivestimento

      //Luca - per export XGLASS - provvisioria
      //Luca 07/02/2020
      @AttivaVetroExportDWG_XG = 0
      wk_XGLASS = VAR_VAL_STR(idx_att,"XGLASS")
      if( wk_XGLASS!="" ) { @AttivaVetroExportDWG_XG = 1 }
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  )
      {
         if ( TipoFFinitura != 3 & FF_Materiale == "VETRO"  ) { @escluso = 0 }
      }

      GOSUB posa_blocco

      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @Y = Yr

      @OrieVetro = "FIA"

      @Verso = -1
      if( FF_PosizioneSD_Ref == "DX" ) { @Verso = 1 }

      @FIN_var = FIN_var

      GOSUB rivestimento
   }

   Posiziona Vetro_FiancoFin vt1
   {
      @escluso = 1
      if( TipoFFinitura==3 ) { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      //@Y = Y - 2*$Cuc_Aria_Ant_Y
      @Y = Yr

      if( TipoFFinitura==3 )
      {
         @base_0.y = base_0.y
         //@Y = Y

         if( FiancoColAppTop==1 )
         {
            @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
            //@Y = Y - $Cuc_Aria_Ant_Y
         }
      }

      if( VetroDoppio==1 ) { @Z = ZFascia1 }

      @POSFRO = "1"

      @Verso = -1
      if( FF_PosizioneSD_Ref == "DX" ) { @Verso = 1 }

      GOSUB rivestimento

      idx_vetro1 = ATTUALE()

      @HIDE = SE_NUM( VetroDoppio <= 0, 1, 0)
   }

   Posiziona Vetro_FiancoFin vt2
   {
      @escluso = 1
      if( TipoFFinitura==3 )
      {
         if( VetroDoppio==1 )  { @escluso = 0 }
      }

      GOSUB posa_blocco

      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      //@Y = Y - 2*$Cuc_Aria_Ant_Y
      @Y = Yr

      @base_0.z = base_0.z + ZFascia1 + $Cuc_Aria_Ant_Ant_X

      if( TipoFFinitura==3 )
      {
         @base_0.y = base_0.y
         //@Y = Y

         if( FiancoColAppTop==1 )
         {
            @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
            //@Y = Y - $Cuc_Aria_Ant_Y
         }
      }

      @Verso = -1
      if( FF_PosizioneSD_Ref == "DX" ) { @Verso = 1 }

      @POSFRO = "2"

      @Z = Z - ZFascia1 - $Cuc_Aria_Ant_Ant_X
      GOSUB rivestimento
      idx_vetro2 = ATTUALE()
   }

   Posiziona FFGruppoLavorazioni FFLv
   {
      FF_idx_grp1 = ATTUALE()

      @base_0.x = base_0.x
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_1.z - FF_ProfBase_Ref
      @X = X
      @Y = Yr
      @Z = FF_ProfBase_Ref

      @FF_PosizioneSD = FF_PosizioneSD_Ref
      // FT 04/06/2020
      @FF_PosizioneH  = FF_PosizioneH_Ref
      @FF_idx_ref = FF_idx_base_ref

      //Luca 06/04/2022
      if( IS_IDX(FF_idx_base_ref) )
      {
         if( VAR_VAL(FF_idx_base_ref,"FLAG_AirKitchen") )
         {
            @Y = VAR_VAL(FF_idx_base_ref,"Y")
         }
      }

      // da revisione 1
      if( REV >= 1 )
      {
         // LP 22/03/2021 - mail di Zorzo 23/02/21
         // caso del fianco su base doppia (isola), tengo una sola lamiera
         @FF_TipoGruppoLav = "STANDARD"
      }

      // da revisione 2
      if( REV >= 2 )
      {
         // LP 23/03/2021 - mail di Zorzo 23/02/21 disattivo le trafile se sono attrezzate
         @FF_DisattivaSoloLav = FF_DisattivaSoloLav

//         // se c'è anche la base doppia devo coprire entrambe le basi con il lamierino
//         if( FF_ProfBase_Bif > 0 )
//         {
//            @base_0.z = base_0.z
//            @Z = FF_ProfBase_Ref + FF_ProfBase_Bif
//            @FF_TipoGruppoLav = "BASE DOPPIA"
//         }
      }
   }

   Posiziona FFGruppoLavorazioni FFLvBif
   {
      @escluso = 1
      if( FF_ProfBase_Bif > 0
        & IS_IDX(FF_idx_base_bif)) { @escluso = 0 }

      @ang_y = 180
      @base_0.x = base_3.x
      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + FF_ProfBase_Bif

      @X = X
      @Y = Yr
      @Z = FF_ProfBase_Bif
      @FF_PosizioneSD = FF_PosizioneSD_Bif

      // FT 04/06/2020
      @FF_PosizioneH  = FF_PosizioneH_Bif
      @FF_idx_ref = FF_idx_base_bif

      // da revisione 1
      if( REV >= 1 )
      {
         // LP 22/03/2021 - mail di Zorzo 23/02/21
         // caso del fianco su base doppia (isola), tengo una sola lamiera,
         @FF_TipoGruppoLav = "BASE DOPPIA"
      }

      // da revisione 2
      if( REV >= 2 )
      {
         if( FF_Materiale == "WILDWOOD" )
         {
            // LP 23/03/2021 - mail di Zorzo 23/02/21 disattivo le trafile se sono attrezzate
            @FF_DisattivaSoloLav = FF_DisattivaSoloLav
            @escluso = 1
         }
      }

      //LZ 02/08/2021: cucine laccate
      if( FF_Materiale == "HPL"
        & MODELLO_SPECIALE == "")
      {
         @FF_DisattivaSoloLav = FF_DisattivaSoloLav
         @escluso = 1
      }

      FF_idx_grp2 = -1
      if( @escluso == 0) { FF_idx_grp2 = ATTUALE() }
   }

   Posiziona _cont_per_near cn_sup
   {
      idx_near_sup = ATTUALE()
      @base_0.x = base_0.x - 25
      @base_0.y = base_0.y + Y - 50
      @base_0.z = base_0.z + 50
      @X = 50
      @Y = 100
      @Z = Z - 100
   }

   Posiziona _cont_per_near cn_sx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 1
      @Y = Y - 10
      @Z = Z - 10
      @c_rivestimento = [255, 0, 0]
   }

   Posiziona _cont_per_near cn_dx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 1
      @Y = Y - 10
      @Z = Z - 10
      @c_rivestimento = [0, 255, 0]
   }
}

Elemento Vetro_FiancoFin
{
   Descrizione = "Vetro anta now"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Y           "Altezza"              366
      Z           "Profondità"           368 ShowAlways
      X           "Spessore"             4

      Verso       ""                     0
      VetroDoppio "Vetro Doppio"         0   Implicit

      FF_Materiale "Struttura/Materiale" ""  Implicit

      FIN_var      ""                    "C018"
      FIN_orie     ""                    "O"

      perCODICE    ""                    ""
      GEST_CODICE  ""                    ""

      FillerM2G    " "                   "" ShowAlways

      POSFRO       "Posizione Frontale"  ""

      XGLASS       "Num. XGLASS"         "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "F09006"
      if( FF_Materiale == "HPL") { perCODICE = "F09084" }

      if( VetroDoppio > 1
        & Cucina_Versione > 2)   { perCODICE = "F09194" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend bl
   {
      @escluso = 0
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  ) { @escluso = 1 }

      GOSUB Posa_Elemento
      @BLEND__ = 0.5
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  ) { @escluso = 0 }

      GOSUB posa_blocco

      @OrieVetro = "FIA"
      @Verso = Verso

      GOSUB rivestimento
   }
}

Elemento FFGruppoLavorazioni
{
   Descrizione = "Gruppo Lavorazioni fianco di finitura"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   // LP 22/03/2021 - attrezza automatico su fianco di finitura (REVISIONE 2)
   Attrezzabile FiancoFinitura

   Variabili
   {
      X       "Spessore"          4
      Y       "Altezza"         100
      Z       "Profondità"      368

      // ereditate dal fianco di finitura (tali e quali)
      Yr               "Altezza reale"                 100  Implicit
      FF_Materiale     "Struttura/Materiale"            ""  Implicit
      FF_DistanzaFB    "Distanza da filo Basso"          0  Implicit
      FF_DistanzaFA    "Distanza da filo Alto"           0  Implicit

// LP da REV=2 non è più Implicit, il valore di default va a leggerlo dal padre,
// solo se serve, in quanto in casi di basi sovrapposte viene calcolato
// internamente nell'attrezza e non viene ereditato
//      FF_PosizioneABCI "Posizione Alto/Basso/Centro"    ""  Implicit
      FF_PosizioneABCI "Posizione Alto/Basso/Centro"    ""

      FF_Disattiva     "Disattiva Trafile"   0  Implicit

      FF_ScoccaSx      ""                    0  Implicit
      FF_ScoccaDx      ""                    0  Implicit

      // LP 22/03/2021 - mail di Zorzo 23/02/21 (REVISIONE 2)
      FF_Lamiera       "Flag attivazione lamiera"          0
      FF_TipoGruppoLav "Tipologia gruppo lavorazioni"     "STANDARD"
      FF_ProfBase_Ref  "Eredito le misure di profondita"   368 Implicit
      FF_ProfBase_Bif  "Eredito le misure di profondita"   368 Implicit
      FF_DisattivaSoloLav  "Disattiva solo lavorazioni"      0

      // Passate direttamente dal padre ......
      // perchè dipendono se sono bifacciale o no
      FF_idx_ref       "idx base"          -1
      FF_PosizioneSD   "Posizione Sx/Dx"   ""
      // FT 04/06/2020
      FF_PosizioneH    "Posizione Altezza" ""

      // Calcolate da FFSetLavorazioni
      FF_Tipologia     "Tipologia"         ""
      FF_NumeroTrafile "Numero Trafile"     0
      FF_Caso          "Caso gestito"      ""

      RieZ_TraF "" 41   Utente ( )
      RieZ_TraR "" 41   Utente ( )

      OffY_TraA "" 90.5 Utente ( )
      OffY_TraB "" 90.5 Utente ( )
      OffY_TraC "" 90.5 Utente ( )

      RieZ_TraLvst "" 201

      X_Tra "" 5
      Y_Tra "" 23

      Z_TraInf "" 368  Utente ( )
      Z_TraSup "" 368  Utente ( )
      Z_TraCen "" 368  Utente ( )

      RieY_LamWW "" 20
      RieZ_LamWW "" 20
      X_LamWW "" 0.8
      Y_LamWW "" 100
      Z_LamWW "" 100
      // LP 22/03/2021 - mail di Zorzo 23/02/21 (REVISIONE 1)
      Z_LamWW_Dop "" 0

      Z_ForoWW    "" 40

      //Luca 10/01/2022 gestione perni/prigionieri
      RieY_Perno1 "" 0 Utente ( )
      RieZ_Perno1 "" 0 Utente ( )

      RieY_Perno2 "" 0 Utente ( )
      RieZ_Perno2 "" 0 Utente ( )


      // LP 22/03/2021 - mail di Zorzo 23/02/21
      // Flag che identifica le lavorazioni
      // attrezzate (da valutare con WITH_VAR_LOCAL) (REVISIONE 2)
      FF_GruppoLavAttr      "Flag di attivazione" 0
      FF_GruppoLavAttrRefY  "Numero del gruppo lavorazioni su riferimento" 0
      FF_GruppoLavAttrRefZ  "Numero del gruppo lavorazioni su base doppia" 0

      FF_SonoSuBaseDoppia   "Su base doppia" 0

      NO_AUTO "" 0
      OffX "" 0
      OffY "" 0
      OffZ "" 0

      attrezzato "" 0

      DEBUG  "" 0   Implicit
      DEBUG2 "" 0   Implicit

      REV "Revisione Corrente (quella con cui stà lavorando il bdm)"   0   Implicit

      // FT 05/06/2020 - per scritte cad (DEBUG)
      X_Scr   ""  10
      Y_Scr   ""  15

      //HIDE "" 1
      HIDE    ""  3
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_78
      GOSUB Stato_7

      if( REV == 0 ) { VAR_SET_MODE(ATTUALE(),"FF_PosizioneABCI",$MODE_IMPLICIT) }

      if( ACTION() == 0 ) { HIDE_ON_EDIT( ATTUALE(), "*Tra*;*Perno*", 1) }

      if( ACTION() == 1 & IS_ESCLUSO(idx_att) == 0 )
      {
         DEBUG = $Cuc_FFLavorazioniDebug
         SHOW_MODE(idx_att, $Cuc_FFLavorazioniShow)
      }

      // altezza totale del fianco
      YFF = VAR_VAL(PADRE(idx_att, -1), "Y")
      ZFF = VAR_VAL(PADRE(idx_att, -1), "Z")

      //Luca 30/06/2022
      if( UN_PADRE("ElementoFusion")  )
      {
         YFF = VAR_VAL(PADRE(idx_att, 1), "Y")
         ZFF = VAR_VAL(PADRE(idx_att, 1), "Z")
      }

      // Verso numerico
      FF_Verso = 0
      if( FF_PosizioneSD == "SX" ) { FF_Verso = -1 }
      if( FF_PosizioneSD == "DX" ) { FF_Verso =  1 }

      if( REV >= 1 )
      {
         // caso del gruppo di lavorazioni strutturale
         if( FF_GruppoLavAttr == 0 )
         {
            // LP 22/03/2021 - mail di Zorzo 23/02/21
            // caso dell fianco su base doppia (isola), tengo una sola lamiera.
            // Potrebbe essere esclusa dal padre (FFGruppoLavorazioni) per cui deve
            // restare nelle assegnazioni
            FF_Lamiera = 0
            if( FF_Materiale == "WILDWOOD" & FF_TipoGruppoLav == "STANDARD" )   { FF_Lamiera = 1 }

            // DEBUG
            if( DEBUG2 == 1 )
            {
               HIDE = 0
               SHOW_MODE(idx_att, 1)
            }
         }
         else
         {
            // caso del gruppo di lavorazioni attrezzato
            FF_Lamiera = 0

            GOSUB NO_AUTO

            if( DEBUG2 == 1 )
            {
               HIDE = 0
               SHOW_MODE(idx_att, 1)
            }
         }
      }

      if( REV >= 2 )
      {
// LP da REV=2 non è più Implicit, il valore di default va a leggerlo dal padre,
// solo se serve, in quanto in casi di basi sovrapposte viene calcolato
// internamente nell'attrezza e non viene ereditato.
// Se NON sono attrezzato eredito da FiancoFinitura
         if( attrezzato == 0 )
         {
            // eredito l'ex variabile implicit mentre se attrezzato viene calcolato
            FF_PosizioneABCI = VAR_VAL_STR(PADRE(idx_att, 1), "FF_PosizioneABCI")

            DescEdit__ = STRCAT("GrpLav Strutturale - Pos: ", FF_PosizioneABCI, " - Fianco: ", FF_PosizioneSD, " (", FF_PosizioneH, ")")
         }
         else
         {
            DescEdit__ = STRCAT("GrpLav Attrezzato - Pos: ", FF_PosizioneABCI, " - RefY: ", STR(FF_GruppoLavAttrRefY), " - RefZ: ", STR(FF_GruppoLavAttrRefZ), " - Fianco: ", FF_PosizioneSD, " (", FF_PosizioneH, ")")
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      FF_Stp_B0 = base_0
      FF_Stp_B1 = base_1
      FF_Stp_B2 = base_2
      FF_Stp_B3 = base_3

      //Trafile
      FF_Stp_Tra1_B0 = [ 0 , OffY_TraB , RieZ_TraR ]
      FF_Stp_Tra1_B1 = [ 0 , OffY_TraB , RieZ_TraR + Z_TraInf]
      FF_Stp_Tra1_B2 = [ X , OffY_TraB , RieZ_TraR + Z_TraInf]
      FF_Stp_Tra1_B3 = [ X , OffY_TraB , RieZ_TraR ]

      FF_Stp_Tra2_B0 = [ 0 , Y - OffY_TraA - Y_Tra  , RieZ_TraR ]
      FF_Stp_Tra2_B1 = [ 0 , Y - OffY_TraA - Y_Tra  , RieZ_TraR + Z_TraSup ]
      FF_Stp_Tra2_B2 = [ X , Y - OffY_TraA - Y_Tra  , RieZ_TraR + Z_TraSup ]
      FF_Stp_Tra2_B3 = [ X , Y - OffY_TraA - Y_Tra  , RieZ_TraR ]

      FF_Stp_Tra3_B0 = [ 0 , OffY_TraC , RieZ_TraR ]
      FF_Stp_Tra3_B1 = [ 0 , OffY_TraC , RieZ_TraR + Z_TraCen]
      FF_Stp_Tra3_B2 = [ X , OffY_TraC , RieZ_TraR + Z_TraCen]
      FF_Stp_Tra3_B3 = [ X , OffY_TraC , RieZ_TraR ]
   }

   Controlli
   {
      GOSUB CtrlComune

      // FT 02/03/20 - per gestione delle lavorazioni
      GOSUB FFSetLavorazioni
   }

   // LP 22/03/2021 - attrezza automatico su fianco di finitura
   Attrezza
   {
      // setto i flag
      attrezzato = 1
      FF_GruppoLavAttr = 1

      ang_y = 0

      // inizializzo le variabili
      OffX = 0
      OffY = 0
      OffZ = 0

      // idx_del fianco padre
      idx_pad = PADRE(idx_att, 1)

      // Settato nell'attrezza automatico
      // setto le variabili con riferimento al fianco principale
      FF_PosizioneSD = VAR_VAL_STR(idx_pad, "FF_PosizioneSD_Ref")
      FF_PosizioneH  = VAR_VAL_STR(idx_pad, "FF_PosizioneH_Ref")

      // calcolo la mia posizione
      FF_ScoccheInY = VAR_VAL(idx_pad, "FF_ScoccheInY")
      FF_ScoccheInZ = VAR_VAL(idx_pad, "FF_ScoccheInZ")

      FF_PosizioneABCI = "I"
      if( FF_GruppoLavAttrRefY == 1 & FF_ScoccheInY > 1 )                     { FF_PosizioneABCI = "B" }
      if( FF_GruppoLavAttrRefY > 1 & FF_GruppoLavAttrRefY < FF_ScoccheInY )   { FF_PosizioneABCI = "C" }
      if( FF_GruppoLavAttrRefY == FF_ScoccheInY & FF_ScoccheInY > 1 )         { FF_PosizioneABCI = "A" }

      X_Pad = VAR_VAL(idx_pad, "X")
      Y_Pad = VAR_VAL(idx_pad, "Y")


      X = X_Pad
      Y = Y_Pad - 2 * $Cuc_Aria_Ant_Y

      // mi prendo l'idx del fianco di riferimento, come input per la proc. "FFSetLavorazioni"
      // FF_GruppoLavAttrRefY viene settato dai comandi automatici dell'attrezza
      // var_idx_ref = STRCAT("FIN_idx_ref_", STR(FF_GruppoLavAttrRefY))
      if( FF_GruppoLavAttrRefY > 0 )
      {
         FF_SonoSuBaseDoppia = 0
         var_idx_ref = STRCAT("FIN_idx_ref_Y_", STR(FF_GruppoLavAttrRefY))
      }
      else
      {
         FF_SonoSuBaseDoppia = 1
         var_idx_ref = STRCAT("FIN_idx_ref_Z_", STR(FF_GruppoLavAttrRefZ))
      }

      if( VAR_EXIST(idx_pad, var_idx_ref) == 1 )
      {
         FF_idx_ref = VAR_VAL(idx_pad, var_idx_ref)

         if( IS_IDX(FF_idx_ref) == 1 )
         {
            // posizione
            base0_abs_idx_ref = VAR_VAL(FF_idx_ref, "base0y_abs")
            base0_abs_idx_pad = VAR_VAL(idx_pad, "base0y_abs")

            // alto0_abs_idx_ref = VAR_VAL(FF_idx_ref, "alto_0.y")
            // alto0_abs_idx_pad = VAR_VAL(idx_pad, "alto_0.y")

            OffY = base0_abs_idx_ref - base0_abs_idx_pad + $Cuc_Aria_Ant_Y

            Y_Ref = VAR_VAL(FF_idx_ref, "Y")
            Z_Ref = VAR_VAL(FF_idx_ref, "Z")

            // misure
            Y = Y_Ref - 2 * $Cuc_Aria_Ant_Y
            Z = Z_Ref + 24

            // misure dell' ipotetico fianco  di finitura in riferimento alla base
            YFF = VAR_VAL(FF_idx_ref, "Y")
            ZFF = VAR_VAL(FF_idx_ref, "Z")

            // se la Y del fianco di finitura è inferiore della base, mi devo adattare al fianco di finitura
            // anche il posizionamento deve essere legato al padre
            if( Y_Ref > Y_Pad )
            {
               Y = Y_Pad - 2 * $Cuc_Aria_Ant_Y

               //OffY = $Cuc_Aria_Ant_Y - $Cuc_Alt_Zoc
               OffY = $Cuc_Aria_Ant_Y

               if( VAR_VAL(FF_idx_ref,"Cuc_Alt_Zoc") > 0 )
               {
                  OffY = $Cuc_Aria_Ant_Y - VAR_VAL(FF_idx_ref,"Cuc_Alt_Zoc")
               }
            }
         }
      }

      // Offset settati nell'attrezza automatico
      base_0.x = @base_0.x + OffX
      base_0.z = @base_1.z - Z

      if( FF_SonoSuBaseDoppia == 1 )
      {
         FF_PosizioneSD = VAR_VAL_STR(idx_pad, "FF_PosizioneSD_Bif")

         FF_PosizioneABCI = "I"
         if( FF_GruppoLavAttrRefZ == 1 & FF_ScoccheInZ > 1 )                     { FF_PosizioneABCI = "B" }
         if( FF_GruppoLavAttrRefZ > 1 & FF_GruppoLavAttrRefZ < FF_ScoccheInZ )   { FF_PosizioneABCI = "C" }
         if( FF_GruppoLavAttrRefZ == FF_ScoccheInZ & FF_ScoccheInZ > 1 )         { FF_PosizioneABCI = "A" }

         ang_y = 180
         base_0.x = @base_0.x + X
         base_0.z = @base_0.z + Z
      }

      // posizionamento in Y
      base_0.y = @base_0.y + OffY

      // se sono il primo in basso del fianco a terra, devo alzarmi dei piedini
      if( FF_PosizioneH == "TERRA" )
      {
         if( FF_PosizioneABCI == "B" | FF_PosizioneABCI == "I" )   { base_0.y = @base_0.y + OffY + $Cuc_Alt_Zoc }
      }


      Y_Attrezzata = Y

//DEBUG      // sposto la lavorazione per debug visualizzazione)
//DEBUG      base_0.x = @base_3.x + 15
   }

   Posiziona Blocco Ing
   {
      @escluso = 1 - DEBUG2
      GOSUB posa_blocco
      @c_rivestimento = [255, 255, 255]
      @f_rivestimento = "1"

      if( DEBUG2 == 1 )
      {
         @c_rivestimento = [0, 255, 0]
         if( FF_DisattivaSoloLav == 1 )   { @escluso = 1 }
      }
   }

   // trafila inferiore/superiore
   Posiziona FFTrafila  BTInf
   {
      @escluso = 1
      if( FF_NumeroTrafile > 0 )     { @escluso = 0 }

      if( FF_PosizioneSD == "SX" )   { @base_0.x = base_3.x }
      else                           { @base_0.x = base_0.x - X_Tra }

      // posizione calcolata su centro foro (OffY_TraB)
      @base_0.y = base_0.y + OffY_TraB - Y_Tra / 2
      @base_0.z = base_0.z + RieZ_TraR
      @X = X_Tra
      @Y = Y_Tra
      @Z = Z_TraInf

      @scritta = STRCAT(STR(OffY_TraB), " - B")
      @faccia = LEFT(FF_PosizioneSD, 1)

      // FT 04/06/2020 - 2019_OR015644 (mail del 04/06/2020, 18/05/2020)
      // se ho una trafila singola con riferimento dall'alto devo riposizionarmi
      // come se fossi superiore (rif. FF_Caso = " - 3")
      if( FF_NumeroTrafile == 1 & FF_PosizioneABCI == "A" )
      {
         @base_0.y = alto_0.y - OffY_TraA - Y_Tra / 2
         @scritta = STRCAT(STR(OffY_TraA), " - A")
      }

      // da revisione 2
      if( REV >= 2 )
      {
         if( FF_Disattiva == 1
           & FF_DisattivaSoloLav == 1 )   { @escluso = 1  }

         // disattivo permanentemente
         if( FF_Disattiva == 0
           & FF_DisattivaSoloLav == 1 )   { @escluso = 99 }
      }

      @HIDE = 1
   }

   // trafila superiore
   Posiziona FFTrafila  BTSup
   {
      @escluso = 1
      if( FF_NumeroTrafile > 1 )   { @escluso = 0 }

      if( FF_PosizioneSD == "SX" )   { @base_0.x = base_3.x }
      else                           { @base_0.x = base_0.x - X_Tra }

      // posizione calcolata su centro foro (OffY_TraA)
      @base_0.y = alto_0.y - OffY_TraA - Y_Tra / 2
      @base_0.z = base_0.z + RieZ_TraR
      @X = X_Tra
      @Y = Y_Tra
      @Z = Z_TraSup

      @scritta = STRCAT(STR(OffY_TraA), "- A")
      @faccia = LEFT(FF_PosizioneSD, 1)

      // da revisione 2
      if( REV >= 2 )
      {
         if( FF_Disattiva == 1
           & FF_DisattivaSoloLav == 1 )   { @escluso = 1  }

         // disattivo permanentemente
         if( FF_Disattiva == 0
           & FF_DisattivaSoloLav == 1 )   { @escluso = 99 }
      }

      @HIDE = 1
   }

   // trafila centrale
   Posiziona FFTrafila  BTCen
   {
      @escluso = 1
      if( FF_NumeroTrafile > 2 )   { @escluso = 0 }

      if( FF_PosizioneSD == "SX" )   { @base_0.x = base_3.x }
      else                           { @base_0.x = base_0.x - X_Tra }

      // posizione calcolata su centro foro (OffY_TraC)
      @base_0.y = base_0.y + OffY_TraC - Y_Tra / 2
      @base_0.z = base_0.z + RieZ_TraR
      @X = X_Tra
      @Y = Y_Tra
      @Z = Z_TraCen

      @scritta = STRCAT(STR(OffY_TraC), " - B")
      @faccia = LEFT(FF_PosizioneSD, 1)

      // da revisione 2
      if( REV >= 2 )
      {
         if( FF_Disattiva == 1
           & FF_DisattivaSoloLav == 1 )   { @escluso = 1  }

         // disattivo permanentemente
         if( FF_Disattiva == 0
           & FF_DisattivaSoloLav == 1 )   { @escluso = 99 }
      }

      @HIDE = 1
   }

   // Piastra Metallica WW
   Posiziona FFLamiera  PiaWW
   {
      FF_idx_lamiera = ATTUALE()

      @escluso = 1
      if( FF_Materiale == "WILDWOOD" )   { @escluso = 0 }

      if( FF_PosizioneSD == "SX" )   { @base_0.x = base_3.x - X_LamWW }
      else                           { @base_0.x = base_0.x }

      @base_0.y = base_0.y + RieY_LamWW
      @base_0.z = base_0.z + RieZ_LamWW
      @X = X_LamWW
      @Y = Y_LamWW
      @Z = Z_LamWW

      // da revisione 1
      if( REV >= 1 )
      {
         @escluso = 1 - FF_Lamiera

         // LP 22/03/2021 - mail di Zorzo 23/02/21
         // caso del fianco su base doppia (isola), tengo una sola lamiera
         // per cui la profondità è la somma del lamierino per base frontale
         // più la profondità della base retro
         if( FF_Tipologia == "BASE DOPPIA" & FF_TipoGruppoLav == "STANDARD" )
         {
            wk_test = 0
            if( FF_Verso > 0 & FF_ScoccaSx > 1 ) { wk_test = FF_Verso }
            if( FF_Verso < 0 & FF_ScoccaDx > 1 ) { wk_test = FF_Verso }

            if( wk_test != 0 )
            {
               @base_0.z = base_1.z - RieZ_LamWW - Z_LamWW_Dop
               @Z = Z_LamWW_Dop
            }
            else
            {
                  //Luca 28/04/2022 se non trovo basi ma è presente la barra isola, la lamiera deve coprire una parte di barra
                  //@Z = Z_LamWW + $Cuc_Spe_BarraIso
                  //@base_0.z = base_0.z - RieZ_LamWW
                  @Z = ZFF - 2 * RieZ_LamWW
                  @base_0.z = base_0.z + Z - RieZ_LamWW - @Z
            }
         }
      }

      @HIDE = 1
   }

   Posiziona FFPerno Per1
   {
      FF_idx_perno1 = ATTUALE()

      @escluso = 1

      if( REV >= 4 )
      {
         if( FF_Materiale == "WILDWOOD" )   { @escluso = 0 }

         //Luca 12/04/2022 92 (nominale) 89 (reale)
         //if( Y < 92  )                      { @escluso = 1 }
         if( Y < 89  )                      { @escluso = 1 }

         if( FF_DisattivaSoloLav == 1 )     { @escluso = 1 }
      }

      @base_0.x = base_0.x + 1
      if( FF_PosizioneSD == "DX" ) { @base_0.x = base_0.x - 4 }

      @base_0.y = base_0.y + RieY_Perno1 - @Y/2
      @base_0.z = base_0.z + RieZ_Perno1 - @Z/2
   }

   Posiziona FFPerno Per2
   {
      FF_idx_perno2 = ATTUALE()

      @escluso = 1

      if( REV >= 4 )
      {
         if( FF_Materiale == "WILDWOOD" )   { @escluso = 0 }

         //Luca 12/04/2022 92 (nominale) 89 (reale)
         //if( Y < 92  )                      { @escluso = 1 }
         if( Y < 89  )                      { @escluso = 1 }

         if( FF_DisattivaSoloLav == 1 )     { @escluso = 1 }
      }

      @base_0.x = base_0.x + 1
      if( FF_PosizioneSD == "DX" ) { @base_0.x = base_0.x - 4 }

      @base_0.y = base_0.y + RieY_Perno2 - @Y/2
      @base_0.z = base_0.z + RieZ_Perno2 - @Z/2
   }

   // Per debug
   Posiziona SCRITTA_CAD SCRY
   {
      @escluso = 1 - DEBUG
      @base_0 = base_3
      @base_0.z = base_3.z - 30
      @base_0.y = base_0.y + Y / 2
      @X = X_Scr
      @Y = Y_Scr
      @scritta = STRCAT("H. ", STR(Y), " (", STR(YFF) ,")  / ", FF_PosizioneABCI)
      @faccia = LEFT(FF_PosizioneSD, 1)
      @point = 5
      @senso = 1
   }

   Posiziona SCRITTA_CAD SCRZ
   {
      @escluso = 1 - DEBUG
      @base_0 = alto_0
      @base_0.z = base_0.z + Z / 2
      @base_0.y = alto_0.y + 20
      @X = X_Scr
      @Y = Y_Scr
      @scritta = STRCAT("P. ", STR(Z), " (", STR(ZFF) ,") / ", FF_PosizioneSD)
      @faccia = LEFT(FF_PosizioneSD, 1)
      @point = 3
      @senso = 0
   }
}

Elemento FFTrafila
{
   Descrizione = "Trafila"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias FFTrafila;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Spessore"          4
      Y       "Altezza"          25
      Z       "Profondità"      368

      X_Scr   ""  15
      Y_Scr   ""  20
      scritta ""  ""
      faccia  ""  "F"

      DEBUG   ""   0       Implicit
      DEBUG2  ""   0       Implicit

      FF_Elemento   "" ""  Implicit
      FF_Materiale  "" ""  Implicit
      Z_ForoWW      "" 40  Implicit

      RieZ_TraF   "solo per stampa DEBUG"  0  Implicit
      RieZ_TraR   "solo per stampa DEBUG"  0  Implicit

      REV "Revisione Corrente (quella con cui stà lavorando il bdm)"   0   Implicit

      // default non visibile
      HIDE "" 1

      NO_GEST "" 1

      M4_NO_OFFS "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Luca 05/11/2020
      NO_GEST = 1

      wk_today = ATOI(STRMID(0,6,DATA(0)))
      if( wk_today > $BDM_REV_Cuc_TrafileFF ) { NO_GEST = 0 }

      if( FF_Materiale == "WILDWOOD" ) { NO_GEST = 1 }

      //Luca 18/11/2020
      //se non erano configurate in fase di fine ordine, non possono essere configurate
      //quando l'ordine viene processato dal CNP (CAM). Errore matricole disallineate
      if( $CNP == 1 |  $CNP__ == 1 )
      {
         wk_RevSvn_save = GetRevisionSVN("Cucina",1)
         if( wk_RevSvn_save < 1174 ) { NO_GEST = 1 }
      }

      c_rivestimento = [255, 255, 255]
//      if( DEBUG2 == 1 )  { M4_DRAW_MODE__  = 4 }
      if( DEBUG2 == 1 )  { c_rivestimento = [255, 255, 0] }
   }

   PuntiNotevoli
   {
      GOSUB punti

      // LP per stampe tecniche WW
      stp_foro_ww_r = [base_0.x, base_0.y, Z_ForoWW]
      stp_foro_ww_f = [base_0.x, base_0.y, Z - Z_ForoWW]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      if( NO_GEST==1 )
      {
         HIDE = 1
         GOSUB Stato_78
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      GOSUB GestComune

      SET_GEST_STATO(ATTUALE(),7,0)

      HIDE = 0

      GEST_X = Z
      GEST_Y = 23
      GEST_Z = 4.4

      GEST_CODICE = "7PF012"

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   // blocco in caso di trafila (FF VETRO o  LAMINATO o WW)
   Posiziona MagneteFiaFinWW bl1
   {
      GOSUB Posa_Elemento

      if( FF_Materiale == "WILDWOOD" )   { @Z = Z_ForoWW }
      @c_rivestimento = c_rivestimento

      //Luca 25/01/2022
      @FFMagneteWW_Quota = 1
   }

   // blocco in caso di trafila (WW)
   Posiziona MagneteFiaFinWW bl2
   {
      @escluso = 1
      if( FF_Materiale == "WILDWOOD" )   { @escluso = 0 }

      // se non ci stò in profondità sono escluso
      // (caso dei fusion)
      if( Z <= 3 * Z_ForoWW )   { @escluso = 1 }

      @base_0 = base_1
      @base_0.z = base_1.z - Z_ForoWW
      @X = X
      @Y = Y
      @Z = Z_ForoWW
      @c_rivestimento = c_rivestimento

      //Luca 25/01/2022
      @FFMagneteWW_Quota = 1
   }

   // Per debug - centro trafila
   Posiziona Blocco bd1
   {
      @escluso = 1 - DEBUG
      GOSUB Posa_Elemento

      @Y = Y/2
      @base_0.y = base_0.y + Y/2

      if( FF_Materiale == "WILDWOOD" )   { @Z = Z_ForoWW }
      @c_rivestimento = c_rivestimento
   }

   // Per debug
   Posiziona SCRITTA_CAD SCR
   {
      @escluso = 1 - DEBUG
      @base_0.x = base_0.x + X / 2
      @base_0.y = base_0.y + Y / 2
      @base_0.z = base_0.z + Z / 2
      @X = X_Scr
      @Y = Y_Scr
      @scritta = scritta
      @faccia = faccia
      @point = 4
      @senso = 0
   }

   // Per debug
   Posiziona SCRITTA_CAD SCRZR
   {
      @escluso = 1 - DEBUG
      @base_0.x = base_0.x + X / 2
      @base_0.y = base_0.y + Y / 2
      @base_0.z = base_0.z - X_Scr - 10
      @X = X_Scr/2
      @Y = Y_Scr/2
      @scritta = STRCAT("R ", STR(RieZ_TraR))
      @faccia = faccia
      @point = 4
      @senso = 0
   }

   // Per debug
   Posiziona SCRITTA_CAD SCRZF
   {
      @escluso = 1 - DEBUG
      @base_0.x = base_0.x + X / 2
      @base_0.y = base_0.y + Y / 2
      @base_0.z = base_1.z + X_Scr + 10
      @X = X_Scr/2
      @Y = Y_Scr/2
      @scritta = STRCAT("F ", STR(RieZ_TraF))
      @faccia = faccia
      @point = 4
      @senso = 0
   }
}

Elemento MagneteFiaFinWW
{
   Descrizione = "Magnete"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       0.8
      Y       "Altezza"         40
      Z       "Profondità"      70

      HIDE  ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
   }
}

Elemento FFLamiera
{
   Descrizione = "PiastraMetallica"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias FFLamiera;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Spessore"          4
      Y       "Altezza"          25
      Z       "Profondità"      368

      TipoFFLvst ""               0 Implicit

      REV "Revisione Corrente (quella con cui stà lavorando il bdm)"   0   Implicit

      DEBUG  "" 0  Implicit
      DEBUG2 "" 0  Implicit

      // default non visibile
      HIDE "" 1

      NO_GEST "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_78

      //Luca 12/01/2022
      NO_GEST = 1
      if( REV > 2 )  { NO_GEST = 0 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST==1 )
      {
         HIDE = 1
         GOSUB Stato_78
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      //Luca 12/01/2022
      //25647: Fianchi di finitura ww: gestione codice per lamiera con REV 3
      gest_codice_prec = VAR_VAL_STR(ATTUALE(),"GEST_CODICE")

      SET_GEST_STATO(ATTUALE(),7,0)

      HIDE = 0

      GEST_X = Z
      GEST_Y = Y
      GEST_Z = 0.8

      perCODICE = "7AN005"
      if( TipoFFLvst > 0 ) { perCODICE = "7AN006" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB RIV_Alluminio


      if( DEBUG2 == 1 )   { @c_rivestimento = [255, 0, 255] }
   }
}

Elemento FFPerno
{
   Descrizione = "Perno"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       FFPerno;CamIncidente

   Variabili
   {
      X       "Spessore"          8
      Y       "Altezza"          10
      Z       "Profondità"       10

      REV "Revisione Corrente (quella con cui stà lavorando il bdm)"   0   Implicit

      DEBUG  "" 0  Implicit
      DEBUG2 "" 0  Implicit

      // default non visibile
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_centro = [0,Y/2,Z/2]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona CilindroX bl
   {
      GOSUB Posa_Elemento
      GOSUB RIV_Alluminio

      if( DEBUG2 == 1 )
      {
         @c_rivestimento = [255, 255, 0]

         //Luca 10/01/2022
         @X = X + 4
         @base_0.x = base_0.x - 2
      }
   }
}

//elemento per basi fusione
Elemento ElementoFusion
{
   Descrizione = "Vetro anta now"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Spessore"          4
      Y       "Altezza"         366
      Z       "Profondità"      368
      Zt      "Profondità"      368

      FSN_SoloFascia "" 0

      // FT 09/03/20
      // passate in posizionamento da padre
      // da fare ereditare per gruppo lavorazioni
      FF_PosizioneSD_Ref "" "DX"
      FF_idx_base_ref    "" -1

      REVISIONE  "Revisione Incrementale (salvata al primo inserimento)"      5
      REV        "Revisione Corrente (quella con cui stà lavorando il bdm)"   0    // da passare ai figli o implicit

      HIDE "" 3
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      Revisione_Incrementale_Inserimento( idx_att, "REV", REVISIONE)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona HPL_Fusion hpl
   {
      @escluso = FSN_SoloFascia

      GOSUB posa_blocco
      @Y = Y - $Cuc_RidY_Sco
   }

   Posiziona FasciaFinitura_Fusion fff
   {
      GOSUB posa_blocco

      @base_0.y = base_0.y + $Cuc_Aria_Ant_Y
      @base_0.z = base_0.z + Z + 1

      @Y = Y - 2*$Cuc_Aria_Ant_Y
      @Z = Zt - Z - 1

      @escluso = SE_NUM(@Z<=0,1,0)

      if( FSN_SoloFascia==1 ) { @base_0.z = base_0.z - @Z - 1 }
      @FF_PosizioneSD_Ref = FF_PosizioneSD_Ref
      @FF_idx_base_ref = FF_idx_base_ref
   }
}

Elemento HPL_Fusion
{
   Descrizione = "HPL_Fusion"
   Code        = INT
   Gruppo      = "Cuc"
   Tipo        = Contenitore
   Forma       = ""
   Alias         Base;CamIncidente;CamInciso;FiancoFin_FSN

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Y             "Altezza"      366
      Z             "Profondità"   368
      X             "Spessore"     4

      CMP2_AZIONI   ""             "M"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      FIN_var  = GetFirstValidVarGest( ATTUALE(), "C002;C028")
      FIN_orie = "V"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_X

      GEST_CODICE = "F06046"

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco pnc
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento FasciaFinitura_Fusion
{
   Descrizione = "Fianco Finitura"
   Code        = INT
   Gruppo      = "Cuc"
   Tipo        = Contenitore
   Forma       = ""
   Alias         Base;CamIncidente;FiancoFin;StpTrafileFiancoFin

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Y                    "Altezza"                          366
      Z                    "Profondità"                       368
      X                    "Spessore"                         4

      perRADICE            ""                                 ""
      RADICE               ""                                 ""

      COD_EREDITA          ""                                 "PRE;POST"

      FIN_var              ""                                 "C018"
      FIN_orie             ""                                 "O"

      CMP2_AZIONI          ""                                 "M"

      // [ FT 09/03/20 - decodifico il tipo di finitura/struttura ----------------
      // e la salvo come SaveAlways perchè identifica anche
      // lo spessore del fianco (VETRO/WILDWOOD)
      // In questo caso passati dal padre, a differenza del FiancoFinitura
      FF_Materiale         "Struttura/Materiale"              ""
      FF_Tipologia         "Tipologia Base Riferimento"       ""
      FF_PosizioneSD_Ref   "Posizione Sx/Dx Riferimento"      ""
      FF_ProfBase_Ref      "Profondità base di riferimento"   368

      // FT non sono mai bifacciale
      FF_PosizioneSD_Bif   "Posizione Sx/Dx Bifacciale"       ""
      FF_ProfBase_Bif      "Profondità base Bifacciale"       0

      // FT 04/06/2020
      FF_PosizioneH_Ref    "Posizione H Riferimento"          ""
      FF_PosizioneH_Bif    "Posizione H Bifacciale"           ""

      // FT sono sempre intero in altezza e rientri zero
      FF_PosizioneABCI     "Posizione Alto/Basso/Centro"      "I"
      FF_DistanzaFB        "Distanza da filo Basso"           0
      FF_DistanzaFA        "Distanza da filo Alto"            0

      FF_idx_base_ref      ""                                 -1
      FF_idx_base_bif      ""                                 -1
      // ] FT 09/03/20 - decodifico il tipo di finitura/struttura ----------------

      FF_idx_grp1          ""                                 -1
      FF_idx_grp2          ""                                 -1

      XGLASS               "Num. XGLASS"                      ""   Utente   (   )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
   }

   PuntiNotevoli
   {
      // FT 02/03/20 - controllo spessore fianco
      if( FF_Materiale == "LAMINATO" )  { X = $Cuc_X_FiaFin_Lam }
      if( FF_Materiale == "VETRO" )     { X = $Cuc_X_FiaFin_Vet }

      //Luca 31/08/2020 riporto modifiche di LAGO
      //LZ 03/08/2020
      //if( FF_Materiale == "WILDWOOD" )  { X = $Cuc_X_FiaFin_WW  }
      if( FF_Materiale == "WILDWOOD" )  { X = $Cuc_X_FiaFin_Vet }

      Yr = Y - 2*$Cuc_Aria_Ant_Y

      GOSUB punti

      stp_base_0 = base_0  stp_base_0.y = $Cuc_Aria_Ant_Y
      stp_base_1 = base_1  stp_base_1.y = $Cuc_Aria_Ant_Y
      stp_base_2 = base_2  stp_base_2.y = $Cuc_Aria_Ant_Y
      stp_base_3 = base_3  stp_base_3.y = $Cuc_Aria_Ant_Y

      stp_alto_0 = alto_0  stp_alto_0.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_1 = alto_1  stp_alto_1.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_2 = alto_2  stp_alto_2.y = $Cuc_Aria_Ant_Y + Yr
      stp_alto_3 = alto_3  stp_alto_3.y = $Cuc_Aria_Ant_Y + Yr
   }

   Procedura OnTabEredita
   {
      // FT 09/03/20 - decodifico il tipo di finitura/struttura
      GOSUB OTE_SetFFMateriale
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      //Luca 08/06/2020
      // Mi prendo i valori delle basi
      if( IS_IDX(FF_idx_base_ref) == 1 )
      {
         // FT 04/06/2020
         FF_PosizioneH_Ref = "TERRA"
         if( VAR_VAL(FF_idx_base_ref, "base0y_abs") > $Cuc_Alt_Zoc )   { FF_PosizioneH_Ref = "SOSPESA" }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_X + $MAKE_ROW

      GEST_CODICE = ""

      perRADICE = "FIFINBA"
      if( Cucina_Versione > 2) { perRADICE = "FIFINBA3" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco pnc
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona FFGruppoLavorazioni  FFLv
   {
      FF_idx_grp1 = ATTUALE()

      GOSUB posa_blocco

      // FT 09/03/20 - come la fascia di finitura ma passo anche le informazioni che mi servono
      @FF_PosizioneSD = FF_PosizioneSD_Ref
      // FT 04/06/2020
      @FF_PosizioneH  = FF_PosizioneH_Ref
      @FF_idx_ref = FF_idx_base_ref

      @FF_TipoGruppoLav = "STANDARD"
   }
}

//{ accessori
Elemento Cuc_MeccanismoEstraibile
{
   Descrizione = "Meccanismo estraibile"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_*Standard
   Altimetro   Auto Cuc_Altim_Rip

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "Larghezza"         100
      Y                "Altezza"           100
      Z                "Profondità"        528

      TipoEstraibile   "Tipo Estraibile"   1   Menu   (   TpEsCl   )
      Verso            ""                  0   Implicit

      COD_EREDITA      ""                  "PRE;C011_PRE"

      perCODICE        ""                  ""
      GEST_CODICE      ""                  ""
      perRADICE        ""                  ""
      RADICE           ""                  ""

      FIN_var          ""                  "C002"
      FIN_orie         ""                  "O"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")
      liv2add    = 1
      liv2add[1] = $Cuc_Spe_Fnd

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

   Attrezza
   {
      wk_RieX  = 0
      wk_RieY  = $Cuc_Spe_Fnd + $Cuc_Spe_Cop
      wk_RieZF = 0
      wk_RieZR = 0

      if( IS_VAR_FIXED(ATTUALE(),"X")==0 ) { X = $larghezza  - 2*wk_RieX }
      if( IS_VAR_FIXED(ATTUALE(),"Y")==0 ) { Y = @Y - wk_RieY }
      if( IS_VAR_FIXED(ATTUALE(),"Z")==0 )
      {
         Z = $profondita - wk_RieZR - wk_RieZF
         if( TipoEstraibile == 3 ) { Z = 175 }
         if( Z > 528 )             { Z = 528 }
      }

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z + $profondita - Z + $Cuc_Aria_Ant_Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "SECO"
      perCODICE = ""
      if( TipoEstraibile == 5 )
      {
         perRADICE = ""
         perCODICE = "7FK908"
         if( VAR_VAL(PADRE(ATTUALE(),1), "X") < 300 ) { perCODICE = "" }
      }

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
          RADICE = perRADICE
          GEST_CODICE = perCODICE

          flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Cuc_MeccanismoEstraibile_Assieme me0
   {
      GOSUB posa_blocco
      @TipoEstraibile = TipoEstraibile
   }

   Posiziona Cuc_MeccanismoEstraibile_Assieme me1
   {
      @escluso = SE_NUM(TipoEstraibile == 4, 0, 1 )
      @TipoEstraibile = 3
      GOSUB posa_blocco
   }

   Posiziona RigaOrdine_NonGraficato touch
   {
      @escluso = 1
      if( IS_MATCH( VAR_VAL_STR( idx_pdr, "GEST_C017"), "*ET001*")) { @escluso = 0 }

      @GEST_CODICE = "7FK031"

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

      @base_0 = base_0
   }
}

Elemento Cuc_MeccanismoEstraibile_Assieme
{
   Descrizione = "Meccanismo Estaibile"
   Code        = NUL
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Posizionabile *

   Variabili
   {
      X               "Larghezza"                             300     ShowAlways
      Y               "Altezza"                               2088    ShowAlways
      Z               "Profondità"                            598     ShowAlways

      TipoEstraibile  ""                                      1
      Verso           ""                                      0       Implicit

      // Definite
      Telaio_Spe      "Spessore telaio"                       25
      Telaio_Ydiff    "Differenza altezza meccanismo/telaio"  100
      Telaio_Zdiff    "Differenza prof meccanismo/telaio"     100
      Telaio_Ynatt    "Altezza non utilizzabile per vassoi"   100

      Vassoi_num      "Numero vassoi"                         6

      Vassoio_diff    "Differenza largh vassoio/telaio"       100

      // Calcolate
      Telaio_Y        "Altezza telaio"                        0
      Telaio_Z        "Altezza telaio"                        0
      Telaio_Yatt     "Altezza utilizzabile per vassoi"       0

      Vassoio_X       "Larghezza vassoio"                     0
      Vassoio_Z       "Profondità vassoio"                    0
      Vassoio_Side_Z  "Profondità vassoio mecc. Side"         150

      Vassoio_num     "Numero vassoio"                        0

      HIDE            ""                                      1
      FLAG_Debug      ""                                      0       Boolean Implicit
   }

   Assegnazioni
   {
      idx_att = ATTUALE()
      VAR_IMPLICITLY_INHERITS( ATTUALE(), 0)

      GOSUB Cucina_Versione

      if( TipoEstraibile > 1 ) { Telaio_Ynatt = 0 }

      Telaio_X = Telaio_Spe
      Telaio_Y = Y - Telaio_Ydiff
      Telaio_Z = Z - Telaio_Zdiff
      Telaio_Yatt = Telaio_Y - 2*Telaio_Spe - 2*Telaio_Ynatt

      Vassoio_X = X - Vassoio_diff
      Vassoio_Z = Telaio_Z - 2*Telaio_Spe

      if( TipoEstraibile > 1
        & TipoEstraibile != 5 )
      {
         Telaio_X = X - Telaio_Zdiff
         Telaio_Y = 1700
         Telaio_Z = Telaio_Spe
         Telaio_Yatt = Telaio_Y - 2*Telaio_Spe - Telaio_Ynatt

         Vassoio_Z = Z - Vassoio_diff

         if( TipoEstraibile == 3 ) { Vassoio_Z = Vassoio_Side_Z }
         if( TipoEstraibile == 4 ) { Vassoio_Z = Z - Vassoio_diff - Vassoio_Side_Z }
      }

      if( TipoEstraibile == 5 ) { Vassoi_num = 2 }

      FIN_var = "C030"
      FIN_idx_gest = PADRE(ATTUALE(),2)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE( idx_att, -1)

      while(1)
      {
         if( TipoEstraibile == 3)
         {
            SET_#(azione_idx_pdr)
            azione_verso = SE_STR( Verso > 0, "DX", "SX")

            GOSUB azione_apertura_battente

            azione_point = [ 0, 0, Z]
            azione_point.x = azione_point.x - (#X - X)/2
            if( Verso > 0) { azione_point.x = azione_point.x + #X }

            break
         }

         azione_val_max = (3/4) * VAR_VAL( azione_idx_pdr, "Z")
         if( TipoEstraibile == 4) { azione_val_max = azione_val_max - Vassoio_Z }

         GOSUB azione_apertura_cassetto

         break
      }
   }

   Posiziona RigaOrdine_Graficata tel0
   {
      @GRAFICA = "_graf_MeccEstr_Telaio"

      @X = Telaio_X
      @Y = Telaio_Y
      @Z = Telaio_Z

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z + Z - @Z
      if( TipoEstraibile > 1
        & TipoEstraibile != 5 )
      {
         @base_0.y = base_0.y + Telaio_Ydiff
         @base_0.z = base_0.z + 2*Telaio_Spe
         if( TipoEstraibile == 3 ) { @base_0.z = base_0.z + Z - Telaio_Spe }
      }

      GEST_CODICE = ""
      if( Cucina_Versione > 2)
      {
         @GEST_CODICE = "7FK021"
         if( TipoEstraibile == 3) { @GEST_CODICE = "7FK014" }
         if( TipoEstraibile == 5)
         {
            @GEST_CODICE = "7FK032"
            if( VAR_VAL(PADRE(ATTUALE(),1), "X") < 300 ) { @GEST_CODICE = "" }
         }
      }

      if( IS_IDX(@GRAFICA_IDX) != 1) { EXITSUB() }
      SET_#(@GRAFICA_IDX)

      #TipoEstraibile = TipoEstraibile
   }

   Posiziona Blocco palo
   {
      @escluso = 1
      if( TipoEstraibile > 1 ) { @escluso = 0 }

      @X = Telaio_X - 2*Telaio_Spe
      @Y = Telaio_Spe
      @Z = Telaio_Spe

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + Telaio_Ydiff + Telaio_Yatt
      @base_0.z = base_0.z + Z - @Z
      if( TipoEstraibile  > 1 ) { @base_0.z = base_0.z + 2*Telaio_Spe   }
      if( TipoEstraibile == 3 ) { @base_0.z = base_0.z + Z - Telaio_Spe }
      if( TipoEstraibile == 5 )
      {
         @X = X - 2*Telaio_Spe
         @base_0.x = base_0.x + (X - @X)/2
         @base_0.y = base_0.y + Telaio_Y + Telaio_Spe
         @base_0.z = base_0.z + Z - @Z
      }
   }

   Posiziona RigaOrdine_Graficata vss0
   {
      Vassoio_num = 1
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss1
   {
      Vassoio_num = 2
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss2
   {
      Vassoio_num = 3
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss3
   {
      Vassoio_num = 4
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss4
   {
      Vassoio_num = 5
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss5
   {
      Vassoio_num = 6
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss6
   {
      Vassoio_num = 7
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss7
   {
      Vassoio_num = 8
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss8
   {
      Vassoio_num = 9
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona RigaOrdine_Graficata vss9
   {
      Vassoio_num = 10
      GOSUB posa_vassoio_MeccEstraibile
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento _graf_MeccEstr_Telaio
{
   Descrizione = "Telaio Meccanismo Estraibile"
   Code        = NUL
   Gruppo      = "GRF"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X               "Larghezza"            25
      Y               "Altezza"              2088
      Z               "Profondità"           598

      Telaio_Y        "Spessore del telaio"  25
      TipoEstraibile  ""                     1

      HIDE            ""                     1
   }

   Assegnazioni
   {
      if( Z > X ) { X = Z }
   }

   PuntiNotevoli
   {
      base_0 = [0,        0,  0]
      base_1 = [X,        0,  0]
      base_2 = [X, Telaio_Y,  0]
      base_3 = [0, Telaio_Y,  0]

      base_path_0 = base_0
      base_path_1 = [0,0,Z]
      base_path_2 = [0,Y,Z]
      base_path_3 = [0,Y,0]
      base_path_4 = base_0

      if( TipoEstraibile > 1 )
      {
         DEL_VAR(ATTUALE(),"base*")

         base_0 = [0,        0,  0]
         base_1 = [Z,        0,  0]
         base_2 = [Z, 0,  Telaio_Y]
         base_3 = [0, 0,  Telaio_Y]

         base_path_0 = [0,Y,0]
         base_path_1 = [0,0,0]
         base_path_2 = [X,0,0]
         base_path_3 = [X,Y,0]
      }

      if( TipoEstraibile == 5 )
      {
         DEL_VAR(ATTUALE(),"base*")

         base_0 = [0,        0,  0]
         base_1 = [X,        0,  0]
         base_2 = [X, 0,  Telaio_Y]
         base_3 = [0, 0,  Telaio_Y]

         base_path_0 = [0,Y,0]
         base_path_1 = [0,0,0]
         base_path_2 = [0,0,Z]
         base_path_3 = [0,Y-Telaio_Y,Z]
      }
      alto_ne = [X,Y,Z]
   }
}

Elemento _graf_MeccEstr_Vassoio
{
   Descrizione = "Vassoio Meccanismo Estaibile"
   Code        = NUL
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X             "Larghezza"             250
      Y             "Altezza"               75
      Z             "Profondità"            450

      Fondo_Y       "Spessore Fondo"        8

      Alzata_X      "Larghezza Alzata"      2
      Alzata_Y      "Altezza Alzata"        35
      Alzata_Z      "Profondità Alzata"     8

      Sponda_X      "Spessore della sponda" 6
      SpondaI_Y     "Altezza sponda inf"    26
      SpondaS_Y     "Altezza sponda sup"    12

      HIDE "" 1
   }

   Assegnazioni
   {
      Alzata_Y = Y - SpondaI_Y - SpondaS_Y

      FIN_var = "C030"
      FIN_idx_gest = PADRE(ATTUALE(),3)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona Blocco fnd
   {
      @X = X - 2*Sponda_X
      @Y = Fondo_Y
      @Z = Z - 2*Sponda_X

      @base_0 = base_0
      @base_0.x = base_0.x + Sponda_X
      @base_0.z = base_0.z + Sponda_X
      GOSUB rivestimento
   }

   Posiziona _graf_MeccEstr_Sponda spnd0
   {
      @X = X
      @Y = SpondaI_Y
      @Z = Z

      @Sponda_X = Sponda_X
      @base_0 = base_0
      GOSUB rivestimento
   }

   Posiziona Blocco alz0
   {
      @X = Alzata_X
      @Y = Alzata_Y
      @Z = Alzata_Z

      @base_0 = base_0
      @base_0.y = base_0.y + SpondaI_Y
      GOSUB rivestimento
   }

   Posiziona Blocco alz1
   {
      @X = Alzata_X
      @Y = Alzata_Y
      @Z = Alzata_Z

      @base_0 = base_1
      @base_0.y = base_1.y + SpondaI_Y
      @base_0.z = base_1.z - @Z
      GOSUB rivestimento
   }

   Posiziona Blocco alz2
   {
      @X = Alzata_X
      @Y = Alzata_Y
      @Z = Alzata_Z

      @base_0.x = base_2.x - @X
      @base_0.y = base_2.y + SpondaI_Y
      @base_0.z = base_2.z - @Z
      GOSUB rivestimento
   }

   Posiziona Blocco alz3
   {
      @X = Alzata_X
      @Y = Alzata_Y
      @Z = Alzata_Z

      @base_0 = base_3
      @base_0.x = base_3.x - @X
      @base_0.y = base_3.y + SpondaI_Y
      GOSUB rivestimento
   }

   Posiziona _graf_MeccEstr_Sponda spnd1
   {
      @X = X
      @Y = SpondaS_Y
      @Z = Z

      @Sponda_X = Sponda_X

      @base_0 = base_0
      @base_0.y = base_0.y + Y - @Y
      GOSUB rivestimento
   }
}

Elemento _graf_MeccEstr_Sponda
{
   Descrizione = "Sponda Vassoio Meccanismo Estaibile"
   Code        = NUL
   Gruppo      = ""
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X  ""    250
      Y  ""     26
      Z  ""    450

      //Spessore della sponda
      Sponda_X      ""   6

      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,        0,  0]
      base_1 = [Sponda_X, 0,  0]
      base_2 = [Sponda_X, Y,  0]
      base_3 = [0,        Y,  0]

      base_path_0 = base_0
      base_path_1 = [0,0,Z]
      base_path_2 = [X,0,Z]
      base_path_3 = [X,0,0]
      base_path_4 = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_MeccanismoLeMans
{
   Descrizione = "Meccanismo estraibile Le Mans"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_BaseAngPan
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      "Larghezza"    700
      Y                      "Altezza"      700
      Z                      "Profondità"   514

      Verso                  ""             0

      X_VanoAnta             ""             500

      FIN_var                ""             "C002"
      FIN_orie               ""             "O"

      perCODICE              ""             ""
      GEST_CODICE            ""             ""
      perRADICE              ""             ""
      RADICE                 ""             ""

      COD_EREDITA            ""             "PRE;POST"

      FLAG_Debug             ""             0 Boolean Implicit

      HIDE                   ""             2

      //per gestione TIPO_COLLO
      Cuc_MeccanismoLeMans   ""             1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      $QueryResult__ = 0
      idx_ref  = $query_p1

      while( $query_type == 8)
      {
         // Vano
         vano_ref = $query_p2
         if( vano_ref != 1)                                                     { break }

         // Versione
         if( VAR_VAL( idx_ref, "Cucina_Versione") != Cucina_Versione)           { break }

         // Meccanismo già presente
         if( VAR_VAL( idx_ref, "Con_MeccLeMans") > 0)                           { break }

         // Dimensioni
         if( VAR_VAL( idx_ref, "X") < SE_NUM( Cucina_Versione > 2, 1050, 1104)) { break }
         if( VAR_VAL( idx_ref, "Y") < 638)                                      { break }
         if( VAR_VAL( idx_ref, "Zr") < 629)                                     { break }
         if( VAR_VAL( idx_ref, "X_Pannello") < 485 + $Cuc_Spe_Fia)              { break }
         if( VAR_VAL( idx_ref, "X_Anta") + 2*$Cuc_Spe_Fia < 561)                { break }

         $QueryResult__ = 1
         break
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")
      liv2add    = 1
      liv2add[1] = $Cuc_Spe_Fnd

      COMPONENTI2( "wk_lemans", idx_ref, "Cuc_MeccanismoLeMans")
      annulla_ins = SE_NUM( wk_lemans > 0, 1, 0)

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

   Attrezza
   {
      wk_RieX  = 0
      wk_RieY  = $Cuc_Spe_Fnd + $Cuc_Spe_Cop
      wk_RieZF = 0
      wk_RieZR = 0

      X  = $larghezza - 2*wk_RieX
      Y  = @Y - wk_RieY
      Yt = @Y

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z + $profondita - Z

      Verso = @Verso

      X_VanoAnta = @X_Anta - $Cuc_Spe_Fia
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_IDXPADRE = idx_pdr_gest
      M2G_FGRIGAINESPLOSO = 0
      if( GEST_IDXPADRE == ATTUALE()
        & ins2_att == $ins2_attrezzato) { M2G_FGRIGAINESPLOSO = 1 }

      GEST_X = 0
      GEST_Y = 0
      GEST_Z = 0

      perRADICE = "CESTESTBA"
      if( Cucina_Versione > 2) { perRADICE = "CESTESTBA3" }

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

         flag_CAMBIA_VAR = 1
      }

      GOSUB CucP_Gestionale
      GOSUB GestComune_Post
   }

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

      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //PostGestDllValida {}", STR(idx_pdr_gest), NOME(ATTUALE())))
   }

   Procedura cancella
   {
      if( $StartingDel__ != ATTUALE())            { EXITSUB() }
      if( $OnLoadOrder == 1 | $OnLoadOrder2 == 1) { EXITSUB() }

      COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //Cancella {}", STR(idx_pdr_gest), NOME(ATTUALE())))
   }


   Posiziona Cuc_SetCestiMeccanismoLeMans set
   {
      GOSUB posa_blocco
   }

   Posiziona Cuc_PaloMeccanismoLeMans palo
   {
      @Y = Y

      @base_0 = base_0
      @base_0.x = base_0.x + Verso*496.5 + SE_NUM( Verso < 0, X - @X, 0)
      @base_0.z = base_0.z + 404.5
   }

   Posiziona RigaOrdine_NonGraficato amm
   {
      @escluso = SE_NUM( Cucina_Versione > 2, 0, 1)

      @DIM_GEST = 1
      @GEST_CODICE = "7FK030"
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento Cuc_SetCestiMeccanismoLeMans
{
   Descrizione = "Set cesti meccanismo estraibile Le Mans"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                 "Larghezza"    903
      Y                 "Altezza"      105
      Z                 "Profondità"   457

      Verso             ""             0   Implicit
      Cucina_Versione   ""             2   Implicit

      FLAG_Debug        ""             0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = 0
      GEST_Y = 0
      GEST_Z = 0

      RADICE = ""
      GEST_CODICE = SE_STR( Cucina_Versione > 2, "7FK027", "")

      GOSUB GestComune_Post
   }

   Posiziona Cuc_CestoMeccanismoLeMans c1
   {
      @PosCesto = 1

      @base_0.x = base_0.x + SE_NUM( Verso < 0, X - @X, 0)
      @base_0.y = base_0.y + @Y
      @base_0.z = base_0.z

      @Verso = Verso
   }

   Posiziona Cuc_CestoMeccanismoLeMans c2
   {
      @PosCesto = 2

      @base_0.x = base_0.x + SE_NUM( Verso < 0, X - @X, 0)
      @base_0.y = base_0.y + @Y + (Y - @Y)/2
      @base_0.z = base_0.z

      @Verso = Verso
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento Cuc_CestoMeccanismoLeMans
{
   Descrizione = "Cesto Meccanismo estraibile Le Mans"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X                 "Larghezza"    903
      Y                 "Altezza"      105
      Z                 "Profondità"   457

      PosCesto          ""             1

      Verso             ""             0   Implicit
      Cucina_Versione   ""             2   Implicit

      FIN_var           ""             "C002"
      FIN_orie          ""             "O"

      FLAG_Debug        ""             0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      import_file = FMT( "{}\Cucina\LEMANS_C{}#U.M4S", $path_sat, SE_STR( Verso > 0, "DX", "SX"))
      import_3d   = FMT( "{}|model|model.hsf", import_file)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona M4S p1
   {
      @escluso = 1
      if( $OnLoadOrder2 != 0) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "Posiziona") == 0) { @Posiziona = 1  EXITSUB() }
      @escluso = 0

      GOSUB posa_blocco

      @import = import_3d

      if( Cucina_Versione > 2)
      {
         @c_rivestimento = $c_grafite
         SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")
      }
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento Cuc_PaloMeccanismoLeMans
{
   Descrizione = "Palo Meccanismo estraibile Le Mans"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                 "Larghezza"    76.2
      Y                 "Altezza"      500
      Z                 "Profondità"   47.7

      Verso             ""             0   Implicit
      Cucina_Versione   ""             2   Implicit

      FLAG_Debug        ""             0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = 0
      GEST_Y = Y
      GEST_Z = 0

      GEST_CODICE = ""
      RADICE = SE_STR( Cucina_Versione > 2, "CESTESTBAPL", "")

      GOSUB GestComune_Post
   }

   Posiziona M4S p1
   {
      @X = 59.4
      @Y = 465
      @Z = Z

      @base_0 = base_0
      if( Verso < 0)
      {
         @base_0.x = base_0.x + X - @X
      }

      @import = STRCAT($path_sat,"Cucina\LEMANS_P1#U.M4S|model|model.hsf")

      if( Cucina_Versione > 2)
      {
         @c_rivestimento = $c_grafite
         SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")
      }
   }

   Posiziona M4S p2
   {
      @X = 72.1
      @Y = 500
      @Z = 27.3

      @base_0 = base_0
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + 4.4

      @ang_y = 0
      if( Verso > 0)
      {
         @ang_y = 180
         @base_0.x = @base_0.x + X
         @base_0.z = @base_0.z + @Z
      }

      @import = STRCAT($path_sat,"Cucina\LEMANS_P2#U.M4S|model|model.hsf")

      if( Cucina_Versione > 2)
      {
         @c_rivestimento = $c_grafite
         SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")
      }
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento Cuc_CassettoInterno
{
   Descrizione = "Cassetto Std"
   Code        = CAS
   Gruppo      = "Cassetti"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Attrezzabile ScoccaT_* VanoRipiani_ColFalegnameria
   Alias       CamIncidente;Eldom_Collision_Check

   Variabili
   {
      #include        %path_bdm%\var_db.inc

      X               "Larghezza"                       600
      Y               "Altezza"                         177
      Yt              "Altezza"                         100

      Z               "Spessore Frontale"               518
      Zn              "Profondità nominale"             518 Menu ( ZnCesCas )
      //Zt "(Profondità complessiva)" 518

      //* Delta posizione struttura rispetto al frontale vengono settati dalla tabella
      Px              "delta posizione in x struttura"  25
      Py              "delta posizione in y struttura"  25
      Pz              "delta posizione in z struttura"  10
      MY              "Delta misura in Y sopra"         10
      MZ              "Delta misura in Z"               10
      HSponde         "altezza spondine struttura"      90.5

      SpSponda        "Spessore sponde"                 10
      dHSchiena       "Delta altezza schiena su totale" 0
      DYSchiena       "Altezza Schienale"               0
      DYSponda        "Altezza Schienale"               0
      SpFrontale      "Spessore Frontale"               4

      UsoLavello      ""                                0
      TipoStrutturaCC ""                                "A"

      num_liv_cace    "variabile per CAM"               0
      tot_liv_cace    "variabile per CAM"               0

      coll_toll       ""                                0.5
      coll_elementi   ""                                "Cuc_StrIntCassCest;Cuc_PortaRifiuti_Generico;Cuc_PannelloDivisorio;Cuc_Sch;Cuc_Fianco;Cuc_Cat*;!_cont_per_near*"

      perRADICE       ""                                ""
      RADICE          ""                                ""

      FIN_var         ""                                "C002"

      COD_EREDITA     ""                                "PRE;POST;C011_PRE"

      FillerM2G       " "                               ""  ShowAlways

      //VIRTUO
      VR_ANIM_POS     ""                                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_VAR_NoGest = "X*;Y*;Z*;TipoFrontale"

      //valore di offeset del livello di inserimento dal filo alto del frontale
      offset_y_livello = 100

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      Z = MZ
      GOSUB punti_Yt

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      GOSUB CucP_PuntiNotevoli
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type==8 )
      {
         COMPONENTI2("wk_cint",$query_p1,"Cuc_CassettoInterno")
         COMPONENTI2("wk_cest",$query_p1,"Cuc_Cestone")

         $QueryResult__ = 1
         if( wk_cest == 0)                   { $QueryResult__ = 0 }
         if( wk_cest == wk_cint)             { $QueryResult__ = 0 }
         if( VAR_VAL( $query_p1, "Y") < 368) { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      COMPONENTI2("wk_cest",idx_ref,"Cuc_Cestone")
      COMPONENTI2("wk_ant",idx_ref,"Cuc_Anta")
      fro = 0
      i = 1
      while ( i<=wk_cest )
      {
         if( VAR_VAL(wk_cest[i],"ConCassettoInterno") == 0 )
         {
            ne = fro + 1   fro = ne  fro[ne] = wk_cest[i]
         }
         i = i + 1
      }
      i = 1
      while ( i<=wk_ant )
      {
         ne = fro + 1   fro = ne  fro[ne] = wk_ant[i]
         i = i + 1
      }

      i = 1
      while ( i<=fro )
      {
         liv_att = VAR_VAL(fro[i],"alto_0.y") + VAR_VAL(fro[i],"Cuc_Aria_Ant_Y") - VAR_VAL(idx_ref,"base_0.y") - VAR_VAL(idx_ref,"Cuc_Alt_Zoc") - offset_y_livello

         ne = liv2add + 1   liv2add = ne  liv2addscr = ne
         liv2add[ne]    = liv_att
         liv2addscr[ne] = liv_att

         i = i + 1
      }

      if( fro == 0 ) { annulla_ins = 1 }

      GOSUB livelli_add2
   }

   Attrezza
   {
      idx_ref = @idx_att

      attrezza = 1
      GOSUB Livelli_Ord_CassCest

      GOSUB SetStrIntCC
      Y = HSponde

      offx = 15/2

      //dinamico se presente un piano cottura
      //17 sporgenza anta fa filo fianco
      //20 spessore barra frontale
      //17.5 distanza sponda da barra frontale
      offy = 17 + 20 + 17.5
      //rientro per evitare collisione con maniglia flapp
      offz = 4
      vano_n = $vano_n
      idx_pdr = PADRE(ATTUALE(),1)

      base_0.x = $vano_0.x + offx
      base_0.y = $vano_0.y + $livello + offset_y_livello - Yt - offy
      base_0.z = $vano_0.z + $profondita - MZ - offz

      //Luca 23/10/2019
      //verifico se sono in collisione con il piano cottura
      if( VAR_VAL(idx_ref,"ConPianoCottura")==1 )
      {
         wk_offy = 0

         idx_pianoct = VAR_VAL(idx_ref,"idx_pianoct")
         idx_top     = VAR_VAL(idx_ref,"idx_top")

         wk_posy_cas = $livello + offset_y_livello - Yt - offy
         wk_filo_alto_cas = wk_posy_cas + Y

         wk_filo_bass_pct = @Y + VAR_VAL(idx_top,"SpessorePiano") - VAR_VAL(idx_pianoct,"VAR_ELD_YRientr")
         if( VAR_VAL(idx_pianoct,"VAR_ELD_TipoIncasso")==1 )
         {
            wk_filo_bass_pct = @Y + VAR_VAL(idx_top,"SpessorePiano") - VAR_VAL(idx_pianoct,"Y")
         }

         wk_dist_min = 20
         //Luca 29/06/2020
         //if( VAR_VAL(idx_ref,"ConPanDivInd")==1 ) { wk_dist_min = 20 + 16 + 20 }
         if( VAR_VAL(idx_ref,"ConPanDivInd")==1 )
         {
            wk_dist_min = 20 + 16 + 20 + 19

            //Luca 04/11/2020 passa a 30
            wk_datains = ATOI (LEFT( VAR_VAL_STR(GetTopLevel(ATTUALE()),"z_ins") ,6) )
            if( wk_datains >= $BDM_REV_Cuc_PCottura_1 )
            {
               wk_dist_min = 20 + 16 + 30 + 19
            }
         }

         if( wk_filo_alto_cas + wk_dist_min > wk_filo_bass_pct )
         {
            //calcolo la differenza
            if( wk_filo_alto_cas>wk_filo_bass_pct )
            {
               wk_offy = wk_dist_min + (wk_filo_alto_cas - wk_filo_bass_pct)
            }
            else
            {
               wk_offy = wk_dist_min - (wk_filo_bass_pct - wk_filo_alto_cas)
               if( wk_offy>wk_dist_min ) { wk_offy = wk_dist_min }
            }
         }

         base_0.y = base_0.y - wk_offy
      }


      if( IS_VAR_FIXED(idx_att,"X")==0 ) { X = $larghezza - offx*2 }

      if( ACTION()==2 & $OnLoadOrder==0 )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //cassettointerno"))
         PGDL_Ricalcola = 1
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      M2G_FGRIGAINESPLOSO = 1
      GEST_IDXPADRE = GetTopLevelSost(idx_att)

      if( IS_IDX(GEST_IDXPADRE)
        & GEST_IDXPADRE != idx_att)
      {
         TIPO_COLLO = VAR_VAL_STR( GEST_IDXPADRE, "TIPO_COLLO")
         if( TIPO_COLLO == "")
         {
            TIPO_COLLO = "180"
            VAR_VALUESTR_SET( GEST_IDXPADRE, "TIPO_COLLO", TIPO_COLLO)
         }
      }

      GEST_CODICE = ""
      perRADICE = "CAIN"
      if( Cucina_Versione > 2) { perRADICE = "CAINCU" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura PostGestDllValida
   {
      if( VAR_VAL(ATTUALE(),"PGDL_Ricalcola") == 1)
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Cassetto Interno"))
         PGDL_Ricalcola = 0
      }
   }

   Procedura cancella
   {
      if( $StartingDel__ != ATTUALE())        { EXITSUB() }
      if( $OnLoadOrder==1 | $OnLoadOrder2==1) { EXITSUB() }

      idx_bas = PADRE(ATTUALE(),1)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_bas)," no_agganciati //Cancella Cassetto Interno"))
   }

   Procedura azione
   {
      azione_val_max = 3*(Z)/4
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Posiziona Blocco fro
   {
      @X = X
      @Y = 100
      @Z = SpFrontale

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_1.z - @Z

      GOSUB rivestimento
   }

   Posiziona Blocco fnd
   {
      @X = X - 2*SpSponda
      @Y = SpSponda
      @Z = Z - SpSponda - SpFrontale

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

      GOSUB rivestimento
   }

   Posiziona Blocco spsx
   {
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z - SpFrontale

      @base_0 = base_0

      GOSUB rivestimento
   }

   Posiziona Blocco spdx
   {
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z - SpFrontale

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

      GOSUB rivestimento
   }

   Posiziona Blocco sch
   {
      @X = X - 2*SpSponda
      @Y = Y - DYSchiena
      @Z = SpSponda

      @base_0 = base_0
      @base_0.x = base_0.x + SpSponda

      GOSUB rivestimento
   }
}

Elemento Cuc_CestoneInterno
{
   Descrizione = "Cestone Std"
   Code        = CAS
   Gruppo      = "Cassetti"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Attrezzabile ScoccaT_Col*
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                  "Larghezza"                         600
      Y                  "Altezza"                           177
      Z                  "Profondita"                        400
      Z_Array            "Prof fattibili"                    "400;500"

      VZ_Z_Min           "Delta min prof vano"               98

      Px                 "Delta posizione in x struttura"    4
      Py                 "Delta posizione in y struttura"    25
      Pz                 "Delta posizione in z struttura"    10
      HSponde            "Altezza spondine struttura"        177

      FroLat             ""                                  58.5
      FroInf             ""                                  98
      FroSup             ""                                  17

      SpSponda           "Spessore sponde"                   10
      dHSchiena          "Delta altezza schiena su totale"   0
      DYSchiena          "Altezza Schienale"                 0
      DYSponda           "Altezza Schienale"                 0
      SpFrontale         "Spessore Frontale"                 4

      SpessoreMassello   ""                                  38

      UsoLavello         ""                                  0
      TipoStrutturaCC    ""                                  "A"

      num_liv_cace       "Variabile per CAM"                 0
      tot_liv_cace       "Variabile per CAM"                 0

      RADICE             ""                                  "CEINCO"
      GEST_CODICE        ""                                  ""

      FIN_var            ""                                  "C002"

      CMP2_AZIONI        ""                                  "A"
      ORD_RID_CHECK      ""                                  4

      DELETE_ME          ""                                  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      Y = HSponde

      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         if( $query_p2 != 0)                 { $QueryResult__ = 0 }
         if( VAR_VAL( $query_p1, "Z") < 574) { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      COMPONENTI2( "wk_fnd", idx_ref, "Cuc_Fondo")
      COMPONENTI2( "wk_cop", idx_ref, "Cuc_Cop")

      offy_vano = VAR_VAL( idx_ref, STRCAT( "vano_0_", STR(vano_ref), ".y"))

      offy = 25 + 1.5
      step = 214

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

      //per ogni fondo deve esserci un coperchio
      i = 1
      if( NOME(idx_ref) == "ScoccaT_ColLvstForno") { i = 2 }

      while ( i <= wk_fnd)
      {
         SET_#(wk_fnd[i])
         //wk_liv = offy + (#base_0.y - offy_vano)
         wk_liv = #alto_0.y + offy - offy_vano

         wk_max = VAR_VAL(idx_ref,"Y")

         if( wk_cop >= i)
         {
            wk_idx_cop = wk_cop[i]
            wk_max = VAR_VAL(wk_idx_cop,"base_0.y") - 188
         }

         ne = liv2add + 1
         liv2add = ne
         liv2add[ne] = wk_liv

         wk_liv = wk_liv + step

         while( wk_liv<wk_max )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2add[ne] = wk_liv

            wk_liv = wk_liv + step
         }

         i = i + 1
      }

      liv2addscr = liv2add
      i = 1
      while ( i<= liv2add  )
      {
         liv2addscr[i] = liv2add[i]
         i = i + 1
      }

      GOSUB livelli_add2
   }

   Attrezza
   {
      if( DELETE_ME != 0) { EXITSUB() }

      attrezza = 1

      vano_n = $vano_n
      idx_pdr = PADRE(ATTUALE(),1)

      //Dimensioni
      if( IS_VAR_FIXED( ATTUALE(), "X") == 0)
      {
         X = $larghezza
      }

      if( IS_VAR_FIXED( ATTUALE(), "Z") == 0)
      {
         Z = ARound( $profondita - VZ_Z_Min, Z_Array, -1, 1)
      }

      offx = 0
      offz_fronte = 88
      base_0.x = $vano_0.x + offx
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z + $profondita - Z - offz_fronte

      if( ACTION() == 2 & $OnLoadOrder == 0)
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //cassettointerno"))
         PGDL_Ricalcola = 1
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli

      // Delete
      if( DELETE_ME != 0)
      {
         HI( ATTUALE(), 1)
         DISPLAY2( STRCAT( MSG(1090), "\n", MSG(1105)))
         HI( ATTUALE(), 0)

         GEST_CODICE = ""
         RADICE = ""
         FLAG_RADICE = $NO_RAD

         COMANDO2( STRCAT( "CANCELLA ", STR(ATTUALE()) , " //Controlli ", NOME(ATTUALE())))

         EXITSUB()
      }

      //Controllo profondità
      if( DELETE_ME != 0)                          { EXITSUB() }
      if( IS_IDX(idx_pdr) != 1
        | idx_pdr == ATTUALE())                    { EXITSUB() }

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

      wk_vano_p_var = STRCAT( "vano_p_", STR(vano_n))
      if( VAR_EXIST( idx_pdr, wk_vano_p_var) != 1) { EXITSUB() }

      wk_vano_p = VAR_VAL( idx_pdr, wk_vano_p_var)
      if( wk_vano_p <= 0)                          { EXITSUB() }

      wk_Z_min = 400
      wk_Z_max = ARound( wk_vano_p - VZ_Z_Min, Z_Array, -1, 1)

      if( wk_Z_max < wk_Z_min)                     { DELETE_ME = 1 EXITSUB() }

      wk_z_mode = $MODE_NONE
      wk_z_mis  = ""

      if( wk_Z_max > wk_Z_min)
      {
         wk_z_mode = $MODE_MISURE
         wk_z_mis  = "ZCesInt"
      }

      VAR_SET_MODE( ATTUALE(), "Z", wk_z_mode)
      VAR_SET_MENU( ATTUALE(), "Z", wk_z_mis)

      if( Z < wk_Z_min
        | Z > wk_Z_max) { DEL_VAR_MODIFICATE( ATTUALE(),  "Z") }

      if( IS_VAR_FIXED( ATTUALE(), "Z") == 0)
      {
         Z = wk_Z_max
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Procedura PostGestDllValida
   {
      if( VAR_VAL(ATTUALE(),"PGDL_Ricalcola")==1 )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Cassetto Interno"))
         PGDL_Ricalcola = 0
      }
   }

   //Procedura azione
   //{
   //   azione_val_max = 3*(Z)/4
   //   azione_idx_pdr = PADRE(idx_att,2)
   //   GOSUB azione_apertura_cassetto
   //}

   Procedura cancella
   {
      if( $StartingDel__ != ATTUALE()) { EXITSUB() }

      idx_bas = PADRE(ATTUALE(),1)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_bas)," no_agganciati //Cancella Cassetto Interno"))
   }

   Posiziona Blocco masx
   {
      @X = SpessoreMassello
      @Y = 188
      @Z = Z - 8

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 1.5
      @base_0.z = base_0.z + Z - @Z

      GOSUB rivestimento
   }

   Posiziona Blocco madx
   {
      @X = SpessoreMassello
      @Y = 188
      @Z = Z - 8

      @base_0.x = base_0.x + X - SpessoreMassello
      @base_0.y = base_0.y - 1.5
      @base_0.z = base_0.z + Z - @Z

      GOSUB rivestimento
   }

   Posiziona Blocco fro_sx
   {
      @X = FroLat
      @Y = Y
      @Z = SpFrontale

      @base_0.x = base_0.x + SpessoreMassello + Px
      @base_0.y = base_0.y
      @base_0.z = base_1.z - SpFrontale

      GOSUB rivestimento
   }

   Posiziona Blocco fro_dx
   {
      @X = FroLat
      @Y = Y
      @Z = SpFrontale

      @base_0.x = base_0.x + X - Px - @X - SpessoreMassello
      @base_0.y = base_0.y
      @base_0.z = base_1.z - @Z

      GOSUB rivestimento
   }

   Posiziona Blocco fro_inf
   {
      @X = X - 2*Px - 2*FroLat - 2*SpessoreMassello
      @Y = FroInf
      @Z = SpFrontale

      @base_0.x = base_0.x + Px + FroLat + SpessoreMassello
      @base_0.y = base_0.y
      @base_0.z = base_1.z - @Z

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco fro_sup
   {
      @X = X - 2*Px - 2*FroLat -2*SpessoreMassello
      @Y = FroSup
      @Z = SpFrontale

      @base_0.x = base_0.x + Px + FroLat + SpessoreMassello
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_1.z - @Z

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco fnd
   {
      @X = X - 2*SpSponda - 2*Px - 2*SpessoreMassello
      @Y = SpSponda
      @Z = Z - SpSponda - SpFrontale

      @base_0.x = base_0.x + SpSponda + Px + SpessoreMassello
      @base_0.y = base_0.y
      @base_0.z = base_0.z + SpSponda

      GOSUB rivestimento
   }

   Posiziona Blocco spsx
   {
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z- SpFrontale

      @base_0 = base_0
      @base_0.x = base_0.x + Px + SpessoreMassello

      GOSUB rivestimento
   }

   Posiziona Blocco spdx
   {
      @X = SpSponda
      @Y = Y - DYSponda
      @Z = Z - SpFrontale

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

      GOSUB rivestimento
   }

   Posiziona Blocco sch
   {
      @X = X - 2*SpSponda - 2*Px - 2*SpessoreMassello
      @Y = Y - DYSchiena
      @Z = SpSponda

      @base_0 = base_0
      @base_0.x = base_0.x + SpSponda + Px + SpessoreMassello

      GOSUB rivestimento
   }
}

Elemento Cuc_PortaRifiuti_Cestone
{
   Descrizione = "Cestone"
   Code        = CAS
   Gruppo      = "Cassetti"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Cuc_Cestone
   Alias Eldom_Collision_Check

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //Dimensioni nominali (base)
      X                   "Larghezza"                             736                     ShowAlways
      Y                   "Altezza"                               368
      Z                   "Profondita"                            500                     ShowAlways

      X_Consentite        "Larghezze consenstite"                 "600;736;900;920;1104"
      X_Rid_Min           "Larghezza - Riduzione min consentita"  0
      X_Rid_Max           "Larghezza - Riduzione max consentita"  4

      FillerDim_1         " "                                     ""

      //Dimensioni interne (cassetto)
      Xi                  "Larghezza interna"                     656
      Yi                  "Altezza interna"                       266
      Zi                  "Profondita interna"                    484

      X_Xi_Delta          "Larghezza - delta nominale/interna"    80
      Y_Yi_Delta          "Altezza - delta nominale/interna"      66
      Z_Zi_Delta          "Profondita - delta nominale/interna"   16

      FillerDim_2         " "                                     ""

      //Dimensioni reali
      Xr                  "Larghezza reale"                       653
      Yr                  "Altezza reale"                         266                     ShowAlways
      Zr                  "Profondita reale"                      472

      Xi_Xr_Delta         "Larghezza - delta nominale/reale"      3

      //Compensatore
      FLAG_Compensatore   "Compensatore"                          0
      Z_Compensatore      "Compensatore - Profondita"             50

      FillerDim_3         " "                                     ""

      FLAG_HRidotta       "Altezza ridotta"                       0

      FillerM2G           " "                                     ""                      ShowAlways

      COD_EREDITA         ""                                      "PRE;POST;C011_PRE"

      perCODICE           ""                                      ""
      GEST_CODICE         ""                                      ""
      perRADICE           ""                                      ""
      RADICE              ""                                      ""

      CMP2_AZIONI         ""                                      "A"
      ORD_RID_CHECK       ""                                      7

      import              ""                                      ""
      import_exist        ""                                      1

      //VIRTUO
      VR_ANIM_POS         ""                                      1

      DELETE_ME           ""                                      0

      coll_idx_cnear      ""                                      -1
      coll_toll           ""                                      0.5
      coll_elementi       ""                                      "Cuc_CassettoInterno;Cuc_PortaRifiuti_Generico;Cuc_PannelloDivisorio;Cuc_Sch;Cuc_Fianco;Cuc_Cat*;!_cont_per_near*"

      FLAG_Debug          ""                                      0                       Boolean
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      M4_MIS = "X;Yr;Z;FillerM2G"

      GOSUB Cuc_PortaRifiuti_Cestone_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB Cuc_PortaRifiuti_Cestone_OnQueryBdmLocal
   }

   Attrezza
   {
      idx_pdr = @idx_att
      idx_ref = @idx_att

      GOSUB Cuc_PortaRifiuti_Cestone_Assegnazioni

      base_0.x = $vano_0.x + ($larghezza - X)/2
      base_0.y = $vano_0.y + $livello + VAR_VAL( idx_ref, "Py") + 16
      base_0.z = $vano_0.z + $profondita - @Z - Z
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         gest_C011_pdr = VAR_VAL_STR( idx_pdr, "GEST_C011")
         if( gest_C011_pdr != ""
           & gest_C011_pdr != "__")
         {
            GEST_C011 = gest_C011_pdr
            VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Cuc_PortaRifiuti_Cestone_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Cuc_PortaRifiuti_Cestone_Gestionale

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona M4S prtrft
   {
      @X = Xr
      @Y = Yr
      @Z = Zr

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

      @import = import

      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      @HIDE = 1
   }

   Posiziona M4S cmp
   {
      @escluso = 1 - FLAG_Compensatore

      @X = Xr
      @Y = Yr
      @Z = Z_Compensatore

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

      @import = STRCAT( $path_sat,
                        "Cucina\PortaRifiuti\PRTRFT_CMP_",
                        STR(X),
                        "#I.m4s|model|model.hsf")

      @TrLadsMaterial = "TesyMetalLowReflection_Steel"

      @HIDE = 1
   }

   Posiziona _cont_per_coll idx_col
   {
      coll_idx_cnear = VAR_VAL( ATTUALE(), "idx_grafica")

      @X = Xr
      @Y = Yr
      @Z = Zr

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

      @VediCollisioni = FLAG_Debug
   }

   Posiziona Blocco dbg_d
   {
      @escluso = 1 - FLAG_Debug

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

      @base_0 = base_0

      @c_rivestimento = [ 255, 255, 255]
      @f_rivestimento = "0.7"
   }

   Posiziona Blocco dbg_di
   {
      @escluso = 1 - FLAG_Debug

      @X = Xi
      @Y = Yi
      @Z = Zi

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

      @c_rivestimento = [ 255, 120, 120]
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco dbg_dr
   {
      @escluso = 1
      if( FLAG_Debug > 0
        | import_exist == 0) { @escluso = 0 }

      @X = Xr
      @Y = Yr
      @Z = Zr

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

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

Elemento Cuc_PortaRifiuti_Generico
{
   Descrizione = "Cestone"
   Code        = CAS
   Gruppo      = "Cassetti"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile    ScoccaT_BaseStandard

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"    736 Utente ( )
      Y   "Altezza"      220 Utente ( )
      Z   "Profondità"   550 Utente ( )

      file_sat_nome  ""  "" Utente ( )
      file_sat       ""  ""

      FIN_var        ""  "C028"

      CMP2_AZIONI    ""  "AS"

      COD_EREDITA    ""  "PRE;POST;C011_PRE"

      FillerM2G      " " "" ShowAlways

      M4_VAR         ""  "X;Y;Z"

      //VIRTUO
      VR_ANIM_POS    ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune
      file_sat = STRCAT($path_sat,"Cucina\PortaRifiuti\",file_sat_nome,".sat")

      if( ACTION()==0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT(ATTUALE(),"X;Y;Z;file_sat_nome",1)
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type==8 )
      {
         $QueryResult__ = 1
         idx_ref  = $query_p1

         if( VAR_VAL(idx_ref,"X") < 368 )         { $QueryResult__ = 0 }

         if( VAR_VAL(idx_ref,"Y") < 552 )         { $QueryResult__ = 0 }

         if( VAR_VAL(idx_ref,"VAR_Lavello") > 0)
         {
            if( VAR_VAL(idx_ref,"Y") < 736 )      { $QueryResult__ = 0 }
         }

         COMPONENTI2("wk_comp",idx_ref,"Cuc_Anta")
         if( wk_comp==0 )                         { $QueryResult__ = 0 }

         //solo 1 per tipologia
         COMPONENTI2("wk_port",idx_ref,"Cuc_PortaRifiuti_Generico")
         i = 1
         while ( i<=wk_port )
         {
            if( VAR_VAL_STR(wk_port[i],"cmp_name")==cmp_name ) {  $QueryResult__ = 0 }

            i = i + 1
         }
      }
   }

   Attrezza
   {
      idx_pdr = @idx_att

      offx = 50
      COMPONENTI2("wk_port",idx_pdr,"Cuc_PortaRifiuti_Generico")
      if( wk_port>0 )
      {
         if( ATTUALE()!=wk_port[1] ) { offx = 400 }
      }

      base_0.x = $vano_0.x + offx
      base_0.y = $vano_0.y + $livello + 20
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento
      @import = file_sat
   }
}

Elemento Cuc_Portaposate
{
   Descrizione = "Portaposate"
   Code        = PPS
   Gruppo      = "Accessori"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Cuc_Cestone Cuc_Cassetto Cuc_CassettoInterno

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"                   288
      Xn                "Larghezza nominale"          368  Menu ( XnPPos )   ShowAlways
      Y                 "Altezza"                     50                     ShowAlways
      Z                 "Profondità"                  473
      Zn                "Profondità nominale"         520  Menu ( ZnCesCas ) ShowAlways

      X_rid_max         "Riduzione massima ammessa"   4
      Z_rid_max         "Riduzione massima ammessa"   0

      X_vano_diff       ""                            77
      Z_vano_diff       ""                            48

      X_Divisorio       ""                            5
      Y_Fondo           ""                            2
      Y_Tapetino        "Spessore tapetino"           1

      FLAG_CompostoGEN  "Modalità composto generico"  1 Boolean

      GEST_CODICE       ""                            ""
      perRADICE         ""                            ""
      RADICE            ""                            ""

      FIN_var           ""                            "C028"

      COD_EREDITA       ""                            "PRE;POST;C011_PRE"

      FillerM2G         " "                           "" ShowAlways

      inserito          ""                            0

      CMP2_AZIONI       ""                            "A"

      //VIRTUO
      VR_ANIM_POS       ""                            1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      idx_topl = GetTopLevel(ATTUALE())

      if( ACTION() == 2) { inserito = 1 }

      GOSUB SistCostr_Portaposate
      GOSUB Decodifica_Portaposate

      if( $ATTIVA_DLL )
      {
         M4_MIS = "Xn;Y;Zn"
         VAR_SET_MODE( ATTUALE(), "Xn", $MODE_SHOWALWAYS)
         VAR_SET_MODE( ATTUALE(), "Zn", $MODE_SHOWALWAYS)
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      wk_proc = "OnQueryBdmLocal"

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

         //Check dimensioni
         idx_ref = $query_p1

         GOSUB Set_Dim_Portaposate
         GOSUB Ctrl_Dim_Portaposate
         if( wk_X_ok > 0
           & wk_Z_ok > 0 ) { $QueryResult__ = 1 }

         //Tipo cassetto/cestone
         if( VAR_VAL( idx_ref, "UsoLavello") == 1) { $QueryResult__ = 0 }

         //Altri accessori
         COMPONENTI2( "wk_acc_pf", idx_ref, "Cuc_PortaRifiuti_Cestone")
         COMPONENTI2( "wk_acc_pp", idx_ref, "Cuc_Portaposate")
         if( wk_acc_pf + wk_acc_pp > 0 )          { $QueryResult__ = 0 }
      }

      wk_proc = ""
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      GOSUB Set_Dim_Portaposate

      base_0.x = $vano_0.x + ($larghezza - X)/2
      base_0.y = $vano_0.y + $livello + @Py + 16
      base_0.z = $vano_0.z + 16 + 6

      if( NOME(idx_ref) == "Cuc_CassettoInterno" )
      {
         base_0.y = $vano_0.y + $livello + @SpSponda
         base_0.z = $vano_0.z + ($profondita - Z)/2
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         gest_C011_pdr = VAR_VAL_STR(PADRE(idx_att,1),"GEST_C011")
         if( gest_C011_pdr!="__" & gest_C011_pdr!="" )
         {
            GEST_C011 = gest_C011_pdr
            VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
         }

         GOSUB Set_Gest_C008_Portaposate
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      if( $CNP == 1
        | inserito == 0 ) { EXITSUB() }

      //Check dimensioni
      GOSUB Ctrl_Dim_Portaposate

      if( wk_X_ok < 1
        | wk_Z_ok < 1 )
      {
         wk_msg = STRCAT(MSG(1090),"\n",MSG(1105))

         HI( idx_pdr, 1)
         DISPLAY2(wk_msg)
         HI( idx_pdr, 0)

         COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()), "  // PostGestDllValida Cuc_Portaposate"))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = X
      GEST_Z = Z

      perRADICE = "PPOS"
      if( Cucina_Versione > 2) { perRADICE = "PPOS3" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C008_Portaposate
   }

   Procedura PostGestDllValida
   {
      if( $OnLoadOrder2==1 | $OnRigenera==1 )     { EXITSUB() }
      if( ACTION()<=0 | ACTION()==2 )             { EXITSUB() }
      if( $CNP==1 )                               { EXITSUB() }

      COMANDO( STRCAT( "RICALCOLA_UNA ", STR(ATTUALE()), "  //PostGestDllValida Cuc_Portaposate"))
   }

   Posiziona _graf_cuc_portaposate pps1
   {
      GOSUB Posa_Elemento
   }
}

Elemento _graf_cuc_portaposate
{
   Descrizione = "Grafica portaposate"
   Code        = PPS
   Gruppo      = "PPS"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                 "Spessore"               291    Implicit
      Y                 "Altezza"                50     Implicit
      Z                 "Profondità"             373    Implicit

      Vani_N            ""                       3      Implicit
      Vani_X_array_str  ""                       ""     Implicit

      X_Divisorio       "Larghezza divisorio"    5      Implicit
      Y_Fondo           "Spessore dondo"         2      Implicit
      Y_Tapetino        "Spessore tapetino"      1      Implicit

      FIN_var           ""                       "C028"
      HIDE              ""                       1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y_Divisorio = Y - Y_Fondo

      GOSUB Decodifica_Portaposate
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   //Fondo
   Posiziona Blocco fnd
   {
      GOSUB Posa_Elemento

      @Y = Y_Fondo
   }

   //{ Divisori
   Posiziona Blocco div1
   {
      wk_div_num = 1
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div2
   {
      wk_div_num = 2
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div3
   {
      wk_div_num = 3
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div4
   {
      wk_div_num = 4
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div5
   {
      wk_div_num = 5
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div6
   {
      wk_div_num = 6
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div7
   {
      wk_div_num = 7
      GOSUB Posiziona_PortaPosate_Divisorio
   }

   Posiziona Blocco div8
   {
      wk_div_num = 8
      GOSUB Posiziona_PortaPosate_Divisorio
   }
   //} Divisori

   //{ Tappetini
   Posiziona Blocco tap1
   {
      wk_tpt_num = 1
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap2
   {
      wk_tpt_num = 2
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap3
   {
      wk_tpt_num = 3
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap4
   {
      wk_tpt_num = 4
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap5
   {
      wk_tpt_num = 5
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap6
   {
      wk_tpt_num = 6
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap7
   {
      wk_tpt_num = 7
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap8
   {
      wk_tpt_num = 8
      GOSUB Posiziona_PortaPosate_Tappetino
   }

   Posiziona Blocco tap9
   {
      wk_tpt_num = 9
      GOSUB Posiziona_PortaPosate_Tappetino
   }
   //} Tappetini
}

Elemento Cuc_Portaposate_Acc_U
{
   Descrizione = "Accessorio U per portaposate"
   Code        = COD
   Gruppo      = "ACC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile  Cuc_Portaposate Cuc_Cestone
   Altimetro     Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"             90
      Y                 "Altezza"               47
      Z                 "Profondità"            95

      VAR_Spe           "Spessore"               2
      Y_Tapetino        "Spessore tapetino"      1 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Ass_Acc_Portaposate
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Acc_Portaposate
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Acc_Portaposate
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGestDllValida_Acc_Portaposate
   }

   Attrezza
   {
      GOSUB Attrezza_Acc_Portaposate
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Gest_Acc_Portaposate
   }

   Posiziona _graf_cuc_portaposate_acc_u acc1
   {
      GOSUB posa_blocco
   }

   Posiziona Blocco tap1
   {
      GOSUB posa_blocco

      @Y = Y_Tapetino
      @Z = Z - VAR_Spe*2

      @base_0.y = base_0.y + VAR_Spe
      @base_0.z = base_0.z + VAR_Spe

      @c_rivestimento = $c_grafite
   }
}

Elemento _graf_cuc_portaposate_acc_u
{
   Descrizione = "Grafica accessorio U per portaposate"
   Code        = ACC
   Gruppo      = "ACC"
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X       "Larghezza"       90 Implicit
      Y       "Altezza"         47 Implicit
      Z       "Profondità"      95 Implicit

      VAR_Spe "Spessore"         2 Implicit

      HIDE    ""                  1
   }

   Assegnazioni
   {
      c_rivestimento = $c_nero
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [0,Y,0]
      base_2 = [0,Y,VAR_Spe]
      base_3 = [0,VAR_Spe,VAR_Spe]
      base_4 = [0,VAR_Spe,Z-VAR_Spe]
      base_5 = [0,Y,Z-VAR_Spe]
      base_6 = [0,Y,Z]
      base_7 = [0,0,Z]

      alto_0 = base_0
      alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_Portaposate_Acc_PC
{
   Descrizione = "Accessorio portacoltelli per portaposate"
   Code        = COD
   Gruppo      = "ACC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile  Cuc_Portaposate Cuc_Cestone
   Altimetro     Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X        "Larghezza"       139
      Y        "Altezza"          26
      Z        "Profondità"      267

      FIN_var  ""                "C028"
      FIN_orie ""                "V"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Ass_Acc_Portaposate

      Elm_N = 6
      if( X > 160 ) { Elm_N = 8 }

      Elm_X = 22
      Elm_OffX = (X - (Elm_X*Elm_N)) / (Elm_N-1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Acc_Portaposate
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Acc_Portaposate
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGestDllValida_Acc_Portaposate
   }

   Attrezza
   {
      GOSUB Attrezza_Acc_Portaposate
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Gest_Acc_Portaposate
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm1
   {
      wk_elm_num = 1
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm2
   {
      wk_elm_num = 2
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm3
   {
      wk_elm_num = 3
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm4
   {
      wk_elm_num = 4
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm5
   {
      wk_elm_num = 5
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm6
   {
      wk_elm_num = 6
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm7
   {
      wk_elm_num = 7
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }

   Posiziona _graf_cuc_portaposate_acc_portac elm8
   {
      wk_elm_num = 8
      GOSUB Posiziona_PortaPosate_PortaColtelli
   }
}

Elemento _graf_cuc_portaposate_acc_portac
{
   Descrizione = "Grafica accessorio portacoltelli per portaposate"
   Code        = ACC
   Gruppo      = "ACC"
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X       "Larghezza"        22
      Y       "Altezza"          26
      Z       "Profondità"      267

      HIDE    ""                  1
   }


   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [0,Y,70]
      base_2 = [0,Y,Z-70]
      base_3 = [0,0,Z]

      alto_0 = base_0
      alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Cuc_Portaposate_Acc_PS
{
   Descrizione = "Accessorio portaspezie per portaposate"
   Code        = COD
   Gruppo      = "ACC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile  Cuc_Portaposate Cuc_Cestone
   Altimetro     Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       139
      Y       "Altezza"          26
      Z       "Profondità"      473

      Cil_X   ""                 50
      Cil_Y   ""                 98
      Cil_A   ""                279

      FIN_var ""             "C028"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Ass_Acc_Portaposate

      Cil_Rig = 3
      Cil_Col = 2
      if( X > 160 ) { Cil_Col  = 3 }

      Cil_OffX = (X - (Cil_X*Cil_Col)) / (Cil_Col + 1)

      Cil_Tot = Cil_Rig*Cil_Col
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Acc_Portaposate
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Acc_Portaposate
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGestDllValida_Acc_Portaposate
   }

   Attrezza
   {
      GOSUB Attrezza_Acc_Portaposate
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Gest_Acc_Portaposate
   }

   Posiziona _graf_cuc_portaposate_acc_portasp gra
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona CilindroY ps1
   {
      wk_cil_num = 1
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps2
   {
      wk_cil_num = 2
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps3
   {
      wk_cil_num = 3
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps4
   {
      wk_cil_num = 4
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps5
   {
      wk_cil_num = 5
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps6
   {
      wk_cil_num = 6
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps7
   {
      wk_cil_num = 7
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps8
   {
      wk_cil_num = 8
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }

   Posiziona CilindroY ps9
   {
      wk_cil_num = 9
      GOSUB Posiziona_PortaPosate_PortaSpezie
   }
}

Elemento _graf_cuc_portaposate_acc_portasp
{
   Descrizione = "Grafica accessorio portaspezie per portaposate"
   Code        = ACC
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X       "Larghezza"       140 Implicit
      Y       "Altezza"          26 Implicit
      Z       "Profondità"      473 Implicit

      VAR_Spe "Spessore"          2

      HIDE    ""                  1
   }

   Assegnazioni
   {
      Z1 = Z/3
   }

   PuntiNotevoli
   {
      base_0 =  [0,0,0]
      base_1 =  [0,Y,0]
      base_2 =  [0,VAR_Spe,Z1]
      base_3 =  [0,Y,Z1]
      base_4 =  [0,VAR_Spe,Z1*2]
      base_5 =  [0,Y,Z1*2]
      base_6 =  [0,VAR_Spe,Z]
      base_7 =  [0,0,Z]
      base_8 =  [0,Y-VAR_Spe,Z1*2+VAR_Spe]
      base_9 =  [0,0,Z1*2+VAR_Spe]
      base_10 = [0,Y-VAR_Spe,Z1+VAR_Spe]
      base_11 = [0,0,Z1+VAR_Spe]
      base_12 = [0,Y-VAR_Spe,VAR_Spe]
      base_13 = [0,0,VAR_Spe]

      alto_0 = base_0
      alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

//Luca 20/12/2019
//led per colonne cucina
//può essere attrezzato su coperchi e ripiani
Elemento Cuc_Led
{
   Descrizione = "Led cucina"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   //Mancano specifiche per il ripiano
   //Attrezzabile Cuc_Cop Cuc_Ripiano ScoccaT_Base* ModuloPensile_368 ModuloPensileScPiatti_368 ScoccaS_PensileAngolo Mensola_Air MensolaDepth_Air  LavaboGenerico
   Attrezzabile Cuc_Cop ScoccaT_Base* ModuloPensile_368 ModuloPensileScPiatti_368 ScoccaS_PensileAngolo Mensola_Air MensolaDepth_Air  LavaboGenerico
   Altimetro   Auto
   Alias       Cuc_Led;OnChangedVar;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 29/10/2021: passaggio a 24v
      VAR_Revisione     "Revisione led"      0     SaveAlways

      X                 "Larghezza"          100   ShowAlways
      Y                 "Altezza"            10
      Z                 "Profondità"         11

      //0 LED per colonna cucina - SOLO COPERCHIO / RIPIANO
      //1 LED per pensile
      //2 LED per pensile scolapiatti
      //3 LED sottobasi
      //4 LED per bagno
      TipoLED           ""                   0

      // -1 SX | 0 CX | 1 DX
      PosLED            ""                   0     SaveAlways
      OffX              "Offset Posizione X" 0

      Led_WATT          "WATT LED"           0     ShowAlways

      VediIlluminazione ""                   1

      perRADICE         ""                   ""
      RADICE            ""                   ""

      M4_MIS            ""                   "X;OffX"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_Led", "VAR_Revisione")

      GOSUB Config_Led_Cuc

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

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

         if( TipoLED < 4
           & VAR_VAL( $query_p1, "Cucina_Versione") > 2) { EXITSUB() }

         COMPONENTI2("led",$query_p1,"Cuc_Led")

         if( TipoLED==0 )
         {
            if( UN_PADRE2($query_p1,"ScoccaT_Co*") )
            {
               //solo ripiano legno
               if( VAR_VAL($query_p1,"TipoRipiano")==0 )       { $QueryResult__ = 1 }
            }
            if( led>0 ) { $QueryResult__ = 0 }
         }

         if( TipoLED==1 )
         {
            if( NOME($query_p1)=="ModuloPensile_368" )
            {
               $QueryResult__ = 1

               idx_test = $query_p1
               GOSUB Calcola_Spazio_Disponibile_Led_Cuc

               wk_free_lim = 500
              #ifdef TEC;AZI
               wk_free_lim = 372
              #endif

               if( wk_free <= wk_free_lim ) { $QueryResult__ = 0 }

               if( led>2 ) { $QueryResult__ = 0 }
            }

            //Luca 19/10/2020 1 per vano
            if( NOME($query_p1)=="ScoccaS_PensileAngolo" )
            {
               $QueryResult__ = 1
               if( $query_p2 == 2 )  { $QueryResult__ = 0 }

               i = 1
               while ( i<=led )
               {
                  if( VAR_VAL(led[i],"vano_n") == $query_p2 ) { $QueryResult__ = 0 }
                  i = i + 1
               }
            }
         }

         if( TipoLED==2 )
         {
            if( NOME($query_p1)=="ModuloPensileScPiatti_368" ) { $QueryResult__ = 1 }
            if( led>0 ) { $QueryResult__ = 0 }
         }

         if( TipoLED==3 )
         {
            if( IS_MATCH(NOME($query_p1),"ScoccaT_Base*")==1)  { $QueryResult__ = 1 }
            //& VAR_VAL($query_p1,"X")>=600 )                  { $QueryResult__ = 1 }
            if( led>0 ) { $QueryResult__ = 0 }
         }

         //Luca 04/05/2021
         if( TipoLED == 4 )
         {
            if( NOME($query_p1) == "Mensola_Air"
              | NOME($query_p1) == "MensolaDepth_Air" )  { $QueryResult__ = 1 }

            if( NOME($query_p1) == "LavaboGenerico" )
            {
               if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "SKIN" ) { $QueryResult__ = 1 }
            }

            if( NOME($query_p1) == "MensolaDepth_Air" )
            {
               if( VAR_VAL($query_p1,"VAR_DepthDoppio")==1 )
               {
                  if( led>1 ) { $QueryResult__ = 0 }
               }
            }
            else
            {
               if( led>0 ) { $QueryResult__ = 0 }
            }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")

      liv2add = 1
      liv2add[1] = 0

      COMPONENTI2("led",idx_ref,"Cuc_Led")
      if( TipoLED !=1 & TipoLED !=4 )
      {
         if( led > 0 ) { liv2add = 0 }
      }

      if( TipoLED==1 )
      {
         // 1 per vano
         if( NOME(idx_ref) == "ScoccaS_PensileAngolo" )
         {
            i = 1
            while ( i<=led )
            {
               if( VAR_VAL(led[i],"vano_n") == vano_ref ) { liv2add = 0 }
               i = i + 1
            }
         }
         else
         {
            idx_test = idx_ref

            GOSUB Calcola_Spazio_Disponibile_Led_Cuc
            wk_free_lim = 500
            if( $modalita == "TEC" )    { wk_free_lim = 372 }
            if( wk_free < wk_free_lim ) { liv2add = 0 }

            if( led>2 ) { liv2add = 0 }
         }
      }

      //depth
      if( TipoLED==4 )
      {
         if( NOME(idx_ref) == "MensolaDepth_Air" )
         {
            i = 1
            while ( i<=led )
            {
               if( VAR_VAL(led[i],"vano_n") == vano_ref ) { liv2add = 0 }
               i = i + 1
            }
         }
      }

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

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      wk_RieX  = RieX
      wk_RieY  = RieY
      wk_RieZR = RieZR
      wk_RieZF = RieZF

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + $livello + wk_RieY
      base_0.z = $vano_0.z + $profondita - Z - wk_RieZF

      if( TipoLED==0 )
      {
         base_0.z = $vano_0.z + $profondita - Z - wk_RieZF
         if( IS_VAR_FIXED(ATTUALE(),"X")==0 )
         {
            X = $larghezza  - 2*wk_RieX
            if( X>X_Max ) { X = X_Max }
         }
      }

      if( TipoLED==1 )
      {
         if( NOME(idx_ref) == "ScoccaS_PensileAngolo"  )
         {
            wk_RieXC = 276
            wk_RieZR = 36

            X = 372
            if( @X > 700 )
            {
               X = 500
               wk_RieXC = 318
            }

            wk_RieXC = wk_RieXC - $Cuc_Spe_Fia
            base_0.x = $vano_0.x + wk_RieXC - X/2

            base_0.z = $vano_0.z + wk_RieZR

            if( vano_n == 1 )
            {
               wk_RieXC = 276

               X = 372
               if( @Z > 700 )
               {
                  X = 500
                  wk_RieXC = 318
               }

               wk_RieXC = wk_RieXC - $Cuc_Spe_Fia
               base_0.x = $vano_0.x + $larghezza - wk_RieXC - X/2
            }

            EXITSUB()
         }

         base_0.x = $vano_0.x + $larghezza/2 - X/2
         base_0.z = $vano_0.z + wk_RieZR

         X_Max = $larghezza-2*RieX
         idx_test = idx_ref
         COMPONENTI2("led",idx_ref,"Cuc_Led")
         wk_sezione = "ATTREZZA"
         GOSUB Calcola_Spazio_Disponibile_Led_Cuc
         X_Max = wk_free

         wk_offx = 0

         if( IS_VAR_FIXED(ATTUALE(),"X")==0 )
         {
            X = 1000
            if( X>X_Max ) { X = 760 }
            if( X>X_Max ) { X = 500 }
            if( X>X_Max ) { X = 372 }
         }

         if( IS_VAR_FIXED(ATTUALE(),"OffX")==0 ) { OffX = $larghezza/2 - X/2 }

         if( led==2 )
         {
            idx_led1 = led[1]
            idx_led2 = led[2]

            if( ATTUALE()==idx_led1 )  { PosLED = -1 }
            if( ATTUALE()==idx_led2 )  { PosLED =  1 }

            if( IS_VAR_FIXED(ATTUALE(),"OffX")==0 )
            {
               OffX = ($larghezza - VAR_VAL(idx_led1,"X") - VAR_VAL(idx_led2,"X") - 2*wk_RieX - Xmin_LED_LED)/3
               OffX = ROUNDDOWN(OffX,0)
               if( PosLED<=0 ) { OffX = wk_RieX + OffX }
               if( PosLED>0  ) { OffX = wk_RieX + OffX*2 + VAR_VAL(idx_led1,"X") }
            }

         }
         //if( led==3 )
         //{
         //   idx_led1 = led[1]
         //   idx_led2 = led[2]
         //   idx_led3 = led[3]
         //
         //   if( ATTUALE()==idx_led1 )  { PosLED = -1 }
         //   if( ATTUALE()==idx_led2 )  { PosLED =  1 }
         //   if( ATTUALE()==idx_led3 )  { PosLED =  0 }
         //}

         base_0.x = $vano_0.x + OffX
      }

      if( TipoLED==2 )
      {
         base_0.z = $vano_0.z + wk_RieZR
         X = $larghezza  - 2*wk_RieX
      }

      if( TipoLED==3 )
      {
         base_0.z = $vano_0.z + wk_RieZR
         base_0.x = $vano_0.x + $larghezza/2 - X/2
         if( PosLED == -1 ) { base_0.x = $vano_0.x + wk_RieX }
         if( PosLED ==  1 ) { base_0.x = $vano_0.x + $larghezza - wk_RieX - X }
      }

      //Luca 04/05/2021
      if( TipoLED== 4 )
      {
         X = 480
         base_0.x = $vano_0.x + $larghezza/2 - X/2
         base_0.y = $vano_0.y + $livello - Y
         base_0.z = $vano_0.z + wk_RieZR


         if( NOME(idx_ref) == "LavaboGenerico" )
         {
            if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "SKIN" ) { base_0.y = $vano_0.y + $livello - 44 - Y  }
         }

      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      GOSUB Set_WATT_Led_Cuc

      //Luca 20/12/2019 aggiorno valori padre
      if( ACTION()==2 & $OnLoadOrder==0 )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //Led Cucina"))
      }

      if( ACTION()>0 | ACTION()!=2 & $OnLoadOrder==0 )
      {
         wk_idx_sx = -1
         wk_idx_dx = -1

         idx_pdr = PADRE(ATTUALE(),1)

         if( VAR_EXIST(idx_pdr,"idx_sx") ) { wk_idx_sx = VAR_VAL(idx_pdr,"idx_sx") }
         if( VAR_EXIST(idx_pdr,"idx_dx") ) { wk_idx_dx = VAR_VAL(idx_pdr,"idx_dx") }

         if( TipoLED==3 )
         {
            PosLED = 0
            if( IS_IDX(wk_idx_sx)==0 & IS_IDX(wk_idx_dx)==1 ) { PosLED = -1 }
            if( IS_IDX(wk_idx_sx)==1 & IS_IDX(wk_idx_dx)==0 ) { PosLED =  1 }
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_Y + $NORID_Z

      if( TipoLED==0 | TipoLED==1 | TipoLED==2 ) { GEST_CODICE = "" }
      if( perRADICE!="" )                        { RADICE = perRADICE }

      GEST_Y = gest_y
      GEST_Z = gest_z

      GOSUB CAMBIA_VAR
   }

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

      if( $ChangedVar=="OffX" | $ChangedVar=="X" )
      {
         idx_test = PADRE(ATTUALE(),1)
         COMPONENTI2("led",idx_test,"Cuc_Led")
         if( led==2 )
         {
            idx_ric = led[1]
            if( idx_ric==ATTUALE() ) { idx_ric = led[2] }
            COMANDO(STRCAT("RICALCOLA ",STR(idx_ric) , " // OnChangedVar di ",NOME(ATTUALE()) ))
         }
      }
   }

   Procedura cancella
   {
      if( $StartingDel__!=ATTUALE() ) { EXITSUB() }

      idx_pdr = PADRE(ATTUALE(),1)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_pdr)," no_agganciati //Led Cucina"))
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      if( TipoLED==2 )
      {
         @base_0.x = base_0.x + 19.5
         @X = X - 39
      }
      @c_rivestimento = [255,242,0]
   }

   Posiziona VediLuce vd
   {
      @escluso = 1 - VediIlluminazione
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @Y - 2
      @base_0.z = base_0.z
   }
}

Elemento VediLuce
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "Larghezza"  50
      Y "Altezza"    50
      Z "Profondità" 10

      spe "" 2

      TPRN_IMPORT "" "NO"

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   //Luca 20/12/2019 per selezione
   Posiziona ContenitoreInvisibile sel
   {
      GOSUB posa_blocco
   }

   Posiziona Blocco blc
   {
      @X = spe
      @Y = Y
      @Z = spe
      @base_0.x = base_0.x + X/2 - spe/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @c_rivestimento = $c_nero
   }

   Posiziona Blocco blsx
   {
      @X = spe
      @Y = Y
      @Z = spe
      @base_0.x = base_0.x + X/2 - spe/2
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z
      @ang_z = 150

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco bldx
   {
      @X = spe
      @Y = Y
      @Z = spe
      @base_0.x = base_0.x + X/2 + spe + 0.73
      @base_0.y = base_0.y + Y + 1
      @base_0.z = base_0.z
      @ang_z = -150

      @c_rivestimento = $c_nero
   }
}

Elemento Griglia_Areazione
{
   Descrizione = "Griglia di Areazione"
   Code        = CUC
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Cuc_AntaSingola Cuc_Cestone Cuc_Cassetto Cuc_FrontaleFisso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "" 500
      Y           "" 85
      Z           "" 1.5
      Zr          "" 20

      NO_GEST     "" 1

      GEST_CODICE "" ""
      perCODICE   "" "FE0003"

      RADICE      "" ""
      perRADICE   "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var = GetFirstValidVarGest( FIN_idx_gest, "C188")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Attrezza
   {
      idx_ref = @idx_att

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE_prec = VAR_VAL_STR( ATTUALE(), "RADICE")
      perCODICE_prec = VAR_VAL_STR( ATTUALE(), "GEST_CODICE")

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perCODICE = "FE0003"
         perRADICE = ""

         if( NO_GEST == 1 & $ATTIVA_DLL == 1 )
         {
            perCODICE = ""
            perRADICE = ""
         }

         GEST_CODICE = perCODICE
         RADICE = perRADICE
      }

      if( perRADICE_prec != RADICE
        | perCODICE_prec != GEST_CODICE )
      {
         flag_CAMBIA_VAR = 1
         SET_GEST_STATO( ATTUALE(), 7, NO_GEST)
      }

      GEST_Z = Zr

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona __import__ SF1
   {
      GOSUB posa_blocco
      @import = STRCAT($path_sat,"Dettagli\Griglia_areazione.sat")

      GOSUB rivestimento
      @c_rivestimento = $c_alluminio
      @TrLadsMaterial = "TesyBrushedMetal_Alluminium"
   }
}
//} accessori

//{ COLONNA FALEGNAMERIA
Elemento ScoccaT_ColFalegnameria
{
   Descrizione = "Colonna standard"
   Code        = CCSS
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Colonna;a_terra;PerZoccolo;PerCornice

   Variabili
   {
      #include %path_bdm%\var_db.inc
      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      FILLER " " ""

      X       "Larghezza"               600  Menu ( LargCCSS ) Utente ( 300-1200 )

      Y       "Altezza"                2126  Menu ( AltCCSS ) Utente ( 800-2700 )
      Yt      "(Altezza totale)"       2143  ShowAlways

      Zt      "Profondita' totale"       630 Menu ( ProfCFal ) Utente ( 310-900 )
      Z       "(Profondita' fianco)"     604 ShowAlways

      Vani_CF "" 0

      Cuc_Alt_Zoc    ""                               17

      TipoScocca  "Posizione Colonna"   0 //Menu ( PosBLVS )

      TipoFrontale "Tipo frontali colonna"   1 //Menu ( TpFrCl )
      Verso         "Verso della scocca"    -1 Menu ( DXSX )

      //LZ 02/08/2021: cucine laccate
      MaterialeFrontale "Materiale Frontale"               ""
      VAR_Melaminico    ""                                  0 SaveAlways

      // Menu ( DXSX )
      No_Pie      "" 0
      PiediniSuFianco "" 1

      VAR_Vuoto   "Solo Ingombro?" 0
      //Menu ( bool )

      FLAG_ColFalegnameria "" 1

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "S"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB CucP_AssRangeRid

      //if( TipoScocca==0 ) { M4_A_MURO = 0 }
      //else                { M4_A_MURO = 1 }

      if( ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"TipoScocca;Verso;VAR_Vuoto",$ATTIVA_DLL) }

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB DimBasiColonne
      GOSUB punti_completi
      GOSUB DefVanoColonne

      GOSUB DefPuntiZocc
      GOSUB DefPuntiCornice
      GOSUB DefPuntiTop
      GOSUB DefPuntiStampa

      //Luca 14/02/2019
      GOSUB DefPuntiStendiBifacciale
      //Luca 22/02/2019
      GOSUB DefPuntiStendiFFinitura

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall

      GOSUB SettaPosizioneColFalegnameria

      //Luca 21/04/2021
      if( $query_type == 2 )
      {
         $QueryResult__ = 0

         if( IS_MATCH(NOME($query_p1),"Vano*ColFalegnameria") )
         {
            if( $query_p2 == 1 ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlColonne

      //LZ 24/08/2021: cucine laccate
      GOSUB Set_MaterialeFrontale_Ante

      COMPONENTI2("Vani_CF",ATTUALE(),"Vano*")
      SORT_POINT(base_0,"Vani_CF","base_0")

      PiediniSuFianco = 1
      if( Vani_CF > 0 )
      {
         if( VAR_VAL(Vani_CF[1],"base_0.y") - base_0.y < 20 )  { PiediniSuFianco = 0 }
      }

      ////Luca 13/05/2019
      //GOSUB CtrlPosizioneRipiani
      //
      ////GOSUB CtrlRipianiStdColonna
      //
      //GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB CucP_Gestionale
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura PostControl
   {
      GOSUB PostAction2_Colonne
   }

   Procedura PostGestDllValida
   {
      GOSUB PGDV_RicalcolaAngolo
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona Cuc_GruppoPiedini gp
   {
      GOSUB Cuc_PosaPiedini
   }

   Posiziona FustoColFalegnameria fbs
   {
      GOSUB Cuc_PosaFustoStd
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }
}

Elemento FustoColFalegnameria
{
   Descrizione = "Fusto per colonna falegnameria"
   Code        = CCSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      //revisione 1 attivo la parte gestionale
      //VAR_RevFusto   "" 0

      //NO_GEST        "" 1

      X       "Larghezza luce"          568
      Y       "Altezza esc. zoccolo"    720
      Z       "Profondita' fianco"      560

      ZFiaSx  "Profondita' fianco sx"   560
      ZFiaDx  "Profondita' fianco dx"   560

      TipoScocca  "Posizione Base"   0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol

      DescEdit__ = MSG(1030)
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }


   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB CucP_GestionaleFusto
   //}

   Posiziona Cuc_Fianco sp1r
   {
      GOSUB Cuc_PosaFiaSx
   }

   Posiziona Cuc_Fianco sp2r
   {
      GOSUB Cuc_PosaFiaDx
   }

   //Posiziona Cuc_Fondo fd1r
   //{
   //   GOSUB Cuc_PosaFnd
   //}

   Posiziona Cuc_Cop Cl1r
   {
      GOSUB Cuc_PosaCop

      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR
   }

   //Posiziona Cuc_Sch sch1r
   //{
   //   GOSUB Cuc_PosaSch
   //   @base_0.y = base_0.y + $Cuc_Spe_Fnd + Cuc_Aria_Fnd_Sch_Y
   //   @Y = Y -$Cuc_Spe_Fnd -$Cuc_Spe_Cop - Cuc_Aria_Fnd_Sch_Y - Cuc_Aria_Cop_Sch_Y
   //}

   Posiziona Cuc_CarterColSosp car
   {
      @escluso = 1
      if( TipoScocca == 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_CarterColSosp_Off.x

      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_CarterColSosp_Off.x
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - @Y + $Cuc_CarterColSosp_Off.y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_CarterColSosp_Off.z
   }

   Posiziona %Barra_Colonna_Sospesa_Archetipo% bar
   {
      @escluso = SE_NUM( TipoScocca == 2, 0, 1)

      @X = X - 2*$Cuc_Spe_Fia

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = alto_2.y - Cuc_RieY_Bar_Sosp - @Y
      @base_0.z = base_0.z

      @FronteRetro = "R"
      @CatAlluminio = 1
   }
}

Elemento VanoFrigo_ColFalegnameria
{
   Descrizione = "Vano Frigo Col.Falegnameria"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_ColFalegnameria
   Altimetro   Auto
   Alias       OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"     563
      Y   "Altezza"       400
      Z   "Profondità"    318

      TipoVano "" "FRIGO"
      NrVano_CF       ""                0

      Verso ""  -1 Implicit

      TipoScocca           "" 0 Implicit

      TipoColFrigo         "Tipologia Frigo"     1 //Menu ( TpColFr )

      SchedaTecnica        ">> SCHEDA TECNICA"   0 Boolean ShowAlways

      VAR_XFrigo           "Larghezza Frigo"               0 SaveAlways
      VAR_ZFrigo           "Profondità Frigo"              0 SaveAlways
      VAR_YZoccFr          "Altezza zoccolo Frigo"         0 SaveAlways
      VAR_YSopraFr         "Altezza sopra Frigo"           0 SaveAlways
      VAR_YVanoMinFr       "Altezza minima vano Frigo"     0 SaveAlways
      VAR_YVanoMaxFr       "Altezza massimo vano Frigo"    0 SaveAlways
      VAR_DeltaAnFr        "Delta ante Frigo"              0 SaveAlways
      VAR_YAntaInFr        "Altezza anta inferiore Frigo"  0 SaveAlways
      VAR_YAntaSuFr        "Altezza anta superiore Frigo"  0 SaveAlways

      VAR_RidXVtrAnta      "Rid. vetro anta lato cerniere" 0 SaveAlways

      VAR_ConTamponamento  "Con tamponamento frontale"     0 Boolean

      VAR_PosFondoFr       "Posizione fondo Frigo"         0
      PosFondoFr           "Posizione fondo Frigo"         0 Utente ( 0-213 )

      YVanoFrigo           "Altezza vano frigo"            0 ShowAlways

      AllineaFrontaleSX    "Allinea frontale (SX)" 0 //Boolean
      AllineaFrontaleDX    "Allinea frontale (DX)" 0 //Boolean

      YVanoRip             "" 0
      ZFondoFrigo          "" 0

      YAntaInf             "Altezza anta inferiore"        0
      YAntaSup             "Altezza anta superiore"        0

      ConVanoSopra ""  0   SaveAlways
      ConVanoSotto ""  0   SaveAlways

      idx_vano_inf "" -1
      idx_vano_sup "" -1

      ListVar_RicTopL ""  "PosFondoFr"

      FillerM2G              " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      //LZ 27/05/2021
      GOSUB Stato_7
      FLAG_RADICE = $NO_RAD

      M4_MIS = "FillerM2G;TipoColFrigo;SchedaTecnica;PosFondoFr"

      DescEdit__ = "VANO FRIGO"

      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_VaniColFalegnameria
   }

   Attrezza
   {
      GOSUB Attrezza_Vano_ColFalegnameria
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB SetVarColonnaFrigo

      if( IS_VAR_FIXED(ATTUALE(),"PosFondoFr") == 0 )  { PosFondoFr = VAR_PosFondoFr }

      idx_pdr = PADRE(ATTUALE(),1)
      //21 fondo in ferro
      Y = YVanoFrigo + PosFondoFr + $Cuc_Spe_Div/2 + 21

      off_b0   = base_0.y - VAR_VAL(idx_pdr,"base_0.y") + VAR_VAL(idx_pdr,"Cuc_Alt_Zoc")
      YVanoRip = VAR_VAL(idx_pdr,"Y") - Y -off_b0

      ZFondoFrigo = 674
      if( Z < 700 ) { ZFondoFrigo = 604 }

      GOSUB Ctrl_Vani_ColFalegnameria

      GOSUB Ctrl_Frontali_ColFalegnameria

      GOSUB Ctrl_VanoFrigo_Allinea_ColFalegnameria

      //GOSUB CucP_LoadSetCompo
      //GOSUB CucP_Controlli
      //GOSUB CucP_Cnt_CamIncidente

      //Luca 27/04/2021 figlio della colonna falegnameria
      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { GEST_IDXPADRE = GetTopLevel(ATTUALE()) }
   }

   Procedura OnChangedVar
   {
      GOSUB OnChangedVar_VaniColFalegnameria
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Riposizionamento tamponamento"))
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Cuc_PanFondoFrigo pafndrt
   {
      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Cuc_Z_PanFnd

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

      @Posizione = -1
   }

   Posiziona Cuc_PanFondoFrigo pafndfr
   {
      @escluso = 1
      if( TipoScocca == 0
        | Cucina_Versione > 2) { @escluso = 0 }

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Cuc_Z_PanFnd

      wk_off_z = 20
      if( PosFondoFr > 22
        & Cucina_Versione > 2) { wk_off_z = 0 }

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

      @Posizione = 1
   }

   Posiziona Cuc_FondoFrigo fndfr
   {
      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = ZFondoFrigo

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

   Posiziona Cuc_Fondo fndint
   {
      @escluso = 0
      if( YVanoRip < 138
        & TipoScocca == 0) { @escluso = 1 }
      if( YVanoRip < 250
        & TipoScocca == 2) { @escluso = 1 }

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.x = base_0.x + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop/2
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = 1
   }

   Posiziona Cuc_Sch schfr
   {
      @X = X
      @Y = Cuc_Y_SchFr
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Cuc_Spe_FndFr + PosFondoFr + YVanoFrigo/2 - Cuc_Y_SchFr/2
      @base_0.z = base_0.z + Cuc_RieR_SchFr
   }

   Posiziona Cuc_Sch sch1r
   {
      @escluso = 1
      if( PosFondoFr >= 87 ) { @escluso = 0 }

      @X = X
      @Y = PosFondoFr - 1
      @base_0.x = base_0.x
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + 0.5
      @base_0.z = base_0.z + Z - Cuc_Z_PanFnd - 9
   }

   Posiziona Cuc_TamponamentoFrigo tamp
   {
      @escluso = 1 - VAR_ConTamponamento

      GOSUB posa_blocco
      @Y = YVanoRip + $Cuc_Spe_Fnd - 2

      @base_0.y = base_0.y + Y - $Cuc_Spe_Cop - @Y
      @base_0.z = base_0.z + Z - @Z

      if( @Y<=24 ) { @escluso = 1 }
   }
}

Elemento VanoForno_ColFalegnameria
{
   Descrizione = "Vano Forno Col.Falegnameria"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_ColFalegnameria
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //per compatibilità procedure
      InsEldom           ""                              0
      InsEldom_prec      ""                              0
      FLAG_soffietto     ""                              0

      X                  "Larghezza"                     563
      Y                  "Altezza"                       400
      Z                  "Profondità"                    318

      TipoVano           ""                              "FORNO"
      NrVano_CF          ""                              0

      Verso              ""                              -1 Implicit

      TipoScocca         ""                              0 Implicit

      //SERVE?
      TipoColForno       "Tipologia forno"               0 //Menu ( TpColFn )

      SchedaTecnica      ">> SCHEDA TECNICA"             0 Boolean

      VAR_XEld           "Larghezza Forno"               0
      VAR_ZEld           "Profondità Forno"              0

      VAR_YVanoMinEld    "Altezza minima vano Forno"     0 SaveAlways
      VAR_YVanoMaxEld    "Altezza massimo vano Forno"    0 SaveAlways
      VAR_YFroEld        "Altezza frontale forno"        0 SaveAlways
      VAR_DeltaBasso     "Delta basso"                   0 SaveAlways
      VAR_RotFroEld      "Rotazione anta eldom"          0 SaveAlways
      YPieReg            "Altezza piedino regolatore"    0

      YVanoEld           "Altezza vano forno"            0

      ConVanoSopra       ""                              0 SaveAlways
      ConVanoSotto       ""                              0 SaveAlways

      ConCoperchio       ""                              1 SaveAlways
      ConFondo           ""                              1 SaveAlways

      idx_vano_inf       ""                              -1
      idx_vano_sup       ""                              -1

      FillerM2G          " "                             "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      //LZ 27/05/2021
      GOSUB Stato_7
      FLAG_RADICE = $NO_RAD

      M4_MIS = "FillerM2G;TipoColForno;SchedaTecnica"

      DescEdit__ = "VANO FORNO"

      GOSUB CucP_Assegnazioni
      GOSUB Cuc_SistCostrCol

      Vano_OffY = $Cuc_Spe_Fnd/2
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_VaniColFalegnameria
   }

   Attrezza
   {
      GOSUB Attrezza_Vano_ColFalegnameria
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB SetVarColonnaForno

      Y = YVanoEld + $Cuc_Spe_Div

      GOSUB Ctrl_Vani_ColFalegnameria

      //GOSUB Ctrl_Frontali_ColFalegnameria

      //Luca 27/04/2021 figlio della colonna falegnameria
      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { GEST_IDXPADRE = GetTopLevel(ATTUALE()) }
   }

   //LZ 27/05/2021
   //Gestionale
   //{
   // GOSUB GestComune
   //
   //   //Luca 27/04/2021 figlio della colonna falegnameria
   //   GEST_IDXPADRE = PADRE(ATTUALE(),1)
   //
   //   GOSUB CAMBIA_VAR
   //}

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Riposizionamento tamponamento"))
   }

   Posiziona FornoDbg fdf
   {
      @base_0 = base_0
      @base_0.x = base_0.x - $Cuc_Spe_Fia
      @base_0.y = base_0.y + YPieReg + Vano_OffY
      @X = X + 2*$Cuc_Spe_Fia
      @Z = Z
      @Y = YVanoEld

      @VAR_YFroEld = VAR_YFroEld
      @VAR_RotFroEld = VAR_RotFroEld
      @VAR_DeltaBasso = VAR_DeltaBasso
      @YVanoEld       = YVanoEld
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Cuc_Cop fndint
   {
      @escluso = 1 - ConFondo

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.x = base_0.x + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = SE_NUM( NrVano_CF <= 1, 0, 1)
      if( @InternoCol == 0)
      {
         @Z = Z - $Cuc_Rie_Fnd_ZR - $Cuc_Rie_Fnd_ZF
         @base_0.z = base_0.z + $Cuc_Rie_Fnd_ZR
      }
   }

   Posiziona Cuc_Fondo fndint2
   {
      @escluso = 1 - ConCoperchio

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.x = base_0.x + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y + Y - @Y/2
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = 1
   }
}

Elemento VanoRipiani_ColFalegnameria
{
   Descrizione = "Vano Forno Col.Falegnameria"
   Code        = CUB
   Gruppo      = "CUC"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ScoccaT_ColFalegnameria
   Altimetro   Auto

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X               "Larghezza"       563
      Y               "Altezza"         400 Utente ( )
      Z               "Profondita"      318

      TipoVano        ""                "RIPIANI"
      NrVano_CF       ""                0

      Verso           ""                -1 Implicit

      TipoScocca      ""                0 Implicit

      ConVanoSopra    ""                0 SaveAlways
      ConVanoSotto    ""                0 SaveAlways

      ConCoperchio    ""                1 SaveAlways
      ConFondo        ""                1 SaveAlways

      Vano_OffY_Sup   ""                0
      Vano_OffY_Inf   ""                0

      idx_vano_inf    ""                -1
      idx_vano_sup    ""                -1

      FillerM2G       " "               "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7
      FLAG_RADICE = $NO_RAD

      M4_MIS = "FillerM2G;Y"

      DescEdit__ = "VANO RIPIANI"

      GOSUB CucP_Assegnazioni

      GOSUB Cuc_SistCostrCol

      Vano_OffY_Sup = $Cuc_Spe_Fnd/2
      Vano_OffY_Inf = $Cuc_Spe_Fnd/2
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_0_0.y = Vano_OffY_Inf
      vano_l_0 = X
      vano_p_0 = Z
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_VaniColFalegnameria
   }

   Attrezza
   {
      GOSUB Attrezza_Vano_ColFalegnameria
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_Vani_ColFalegnameria

      GOSUB Ctrl_Frontali_ColFalegnameria

      //Luca 27/04/2021 figlio della colonna falegnameria
      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { GEST_IDXPADRE = GetTopLevel(ATTUALE()) }
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB CAMBIA_VAR
   //}

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," //pgdl ",NOME(ATTUALE())))
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [255,120,255]
   //   @f_rivestimento = "0.9"
   //}


   Posiziona Cuc_Fondo fndint
   {
      @escluso = 1 - ConFondo

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.x = base_0.x + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = SE_NUM( NrVano_CF <= 1, 0, 1)
   }

   Posiziona Cuc_Cop fndint2
   {
      @escluso = 1 - ConCoperchio

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X
      @Z = Z - Cuc_Rie_Cop_ZF - Cuc_Rie_Cop_ZR

      @base_0.x = base_0.x + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y + Y - @Y/2
      @base_0.z = base_0.z + Cuc_Rie_Cop_ZR

      @InternoCol = 1
   }

   Posiziona Cuc_Sch sch1r
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Vano_OffY_Inf
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z

      @X = X
      @Y = Y - Vano_OffY_Inf - Vano_OffY_Sup
   }
}
//} COLONNA FALEGNAMERIA

Elemento AppendinoBagno
{
   Descrizione = "Appendino3x3"
   Code        = COD
   Gruppo      = "GRP"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      CMP2_AZIONI         ""        "S"
      M4_A_MURO           ""        1
      FIN_var             ""        "C028"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Posiziona _graf_bagno_appendino APP
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento _graf_bagno_appendino
{
   Descrizione = "Appendino3x3"
   Code        = COD
   Gruppo      = "GRP"
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X         "Larghezza"       30
      Y         "Altezza"         30
      Z         "Profondità"      30

      offy          ""            8
      M4_VAR        ""            "X;Y;Z"
      M4_A_MURO     ""            1
      HIDE          ""            1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [0,0,Z]
      base_2 = [0,Y,Z]
      base_3 = [0,Y-offy,0]

      base_so = base_0
      alto_0 = base_0
      alto_0.x = X
      alto_ne = [X,Y,Z]
   }
}

Elemento LampadaAParete
{
   Descrizione = "Lampada a parete"
   Code        = COD
   Gruppo      = "Luci"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X         "Larghezza"        368        ShowAlways
      Y         "Altezza"          368        ShowAlways
      Z         "Profondità"       60         ShowAlways

      CMP2_AZIONI       ""        "S"
      M4_A_MURO         ""        1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Posiziona Blocco lamp
   {
      GOSUB posa_blocco
      @f_rivestimento = "0.2"
   }
}

//Luca 06/04/2022
Elemento Cuc_PannelloSottotop_AirKitchen
{
   Descrizione = "Pannello divisorio induzione"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 19
      Z "" 1

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      COD_EREDITA ""  "PRE;"

      RADICE      ""  "PSAK"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8
      GOSUB CucP_Assegnazioni

      c_rivestimento = $c_pomice
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      @c_rivestimento = c_rivestimento
   }
}

//Luca 06/04/2022
Elemento Cuc_Supporto_AirKitchen
{
   Descrizione = "Pannello divisorio induzione"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 552
      Y "" 115
      Z "" 496

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      COD_EREDITA ""  "PRE;"

      RADICE      ""  "SMAKI"
   }

   Assegnazioni
   {
      GOSUB AssComune

      file_sat = STRCAT($path_sat, "Cucina\AirKitchen\Supporto_", STR(X),"x", STR(Z), ".SAT")
      file_sat_exist = FILE_EXIST(file_sat)

      GOSUB Stato_8
      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      @escluso = file_sat_exist

      GOSUB Posa_Elemento
      @c_rivestimento = $c_nero
   }

   Posiziona __import__ sat
   {
      @escluso = 1 - file_sat_exist

      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      @import = file_sat

      @c_rivestimento = $c_nero
   }
}


//{ CUCINA - MODULI GLASS
Elemento Cuc_ModuloGlass
{
   Descrizione = "Cucina - Modulo Glass"
   Code        = CUC
   Gruppo      = "MCUC"
   Tipo        = Contenitore
   Forma       = ""
   Alias Cuc_ModuloGlass;Stp_ModuloGlass

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X                  "Larghezza"                                           368 Menu ( Cuc_ModuloGlass_X )
      Y                  "Altezza"                                             194 Menu ( Cuc_ModuloGlass_Y )
      Yt                 "Altezza con piedini"                                 194
      Z                  "Profondità"                                          656 Menu ( Cuc_ModuloGlass_Z )

      VAR_Posizione      "Posizione - 0: piedini, 1: sostegno, 2: base"        -1  SaveAlways
      VAR_Posizione_Str  "Posizione"                                           "NON VALIDA"

      VAR_Ripiani        "Numero ripiani"                                      0

      VAR_Pellicola      "Lati pellicola: -1:sx, 1:dx, 2:entrambi, 0:nessuno"  0   SaveAlways

      FIN_var            ""                                                    "C014"

      //Per compatibilità piedini
      Tipo368            ""                                                    "368-GLS"

      VT_NRVITI          "Numero giunzioni glass/368"                          0

      COD_EREDITA        ""                                                    "PRE;POST"

      CMP2_AZIONI        ""                                                    "S"
      M4_CNT_LINK_MODE__ "Agganciata"                                          2
      M4_CNT_MODE__      "Connessione superiore limitata alle basi"            2

      FLAG_Debug         ""                                                    0 Boolean

      //Idx elementi legittimi
      ///Basi
      idx_sotto        "" -1
      idx_destra       "" -1
      idx_sinistra     "" -1

      ///Top
      idx_top_destra   "" -1
      idx_top_sinistra "" -1

      ///Supporto
      idx_sost_sotto   "" -1

      //Idx elementi bloccanti
      idx_blc_sopra    "" -1
      idx_blc_destra   "" -1
      idx_blc_sinistra "" -1

      //Idx near
      idx_cnear_up     "" -1
      idx_cnear_dw     "" -1
      idx_cnear_dx     "" -1
      idx_cnear_sx     "" -1

      idx_cnear_top_dx "" -1
      idx_cnear_top_sx "" -1
   }

   Assegnazioni
   {
      GOSUB Cuc_ModuloGlass_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB Cuc_ModuloGlass_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB Cuc_ModuloGlass_Controlli
   }

   Gestionale
   {
      GOSUB Cuc_ModuloGlass_Gestionale
   }

   Procedura OnQueryBdmLocal
   {
      GOSUB Cuc_ModuloGlass_OnQueryBdmLocal
   }

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

   Procedura Offset
   {
      GOSUB Cuc_ModuloGlass_Offset
   }

   Posiziona GruppoPiedini_368 gp
   {
      @escluso = 1
      if( VAR_Posizione == 0 ) { @escluso = 0 }

      GOSUB Posa_Elemento

      @Y = $Cuc_ModuloGlass_Piedini_Sp
   }

   Posiziona Cuc_ModuloGlass_Fusto fst
   {
      GOSUB posa_blocco

      if( VAR_Posizione == 0 ) { @base_0.y = @base_0.y + $Cuc_ModuloGlass_Piedini_Sp }
   }

   Posiziona SCRITTA_CAD dbg_s1
   {
      @escluso = 1
      if( FLAG_Debug == 1
        & ACTION() > 0
        & ACTION() != 2
        & $OnLoadOrder == 0 ) { @escluso = 0 }

      @HIDE = 1
      @base_0.x = base_0.x + X/2
      @base_0.y = alto_0.y + 10
      @base_0.z = base_1.z + 30

      @X = 40
      @Y = 50
      @senso=0
      @point=5
      @faccia="A"
      @scritta = "FRONTE"
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 2
      @Y = Y - $Cuc_ModuloGlass_Coperchio_Sp - $Cuc_ModuloGlass_Struttura_Rie
      @Z = Z

      @base_0.x = base_0.x - @X/2
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie
      if( VAR_Posizione == 0 ) { @base_0.y = @base_0.y + $Cuc_ModuloGlass_Piedini_Sp }
      @base_0.z = base_0.z
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 2
      @Y = Y - $Cuc_ModuloGlass_Coperchio_Sp - $Cuc_ModuloGlass_Struttura_Rie
      @Z = Z

      @base_0.x = base_0.x + X - @X/2
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie
      if( VAR_Posizione == 0 ) { @base_0.y = @base_0.y + $Cuc_ModuloGlass_Piedini_Sp }
      @base_0.z = base_0.z
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @X = X - 20
      @Y = 2
      @Z = Z - 20

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + Y - @Y/2
      if( VAR_Posizione == 0 ) { @base_0.y = @base_0.y + $Cuc_ModuloGlass_Piedini_Sp }
      @base_0.z = base_0.z + (Z - @Z)/2
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = X - 2 * $Cuc_ModuloGlass_Struttura_Rie
      @Y = 2
      if( VAR_Posizione == 0 ) { @Y = $Cuc_ModuloGlass_Piedini_Sp + 2 }
      @Z = Z - 2

      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Rie
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + (Z - @Z)/2
   }

   Posiziona _cont_per_near ntsx
   {
      idx_cnear_top_sx = ATTUALE()

      @X = 2
      @Y = $Cuc_ModuloGlass_Coperchio_Sp - 2
      @Z = Z - 2

      @base_0.x = base_0.x - @X/2
      @base_0.y = alto_0.y - $Cuc_ModuloGlass_Coperchio_Sp + ($Cuc_ModuloGlass_Coperchio_Sp - @Y)/2
      @base_0.z = base_0.z + (Z - @Z)/2
   }

   Posiziona _cont_per_near ntdx
   {
      idx_cnear_top_dx = ATTUALE()

      @X = 2
      @Y = $Cuc_ModuloGlass_Coperchio_Sp - 2
      @Z = Z - 2

      @base_0.x = base_0.x + X - @X/2
      @base_0.y = alto_0.y - $Cuc_ModuloGlass_Coperchio_Sp + ($Cuc_ModuloGlass_Coperchio_Sp - @Y)/2
      @base_0.z = base_0.z + (Z - @Z)/2
   }

  #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368SX
   {
      GOSUB G368_PosaGrLavorazione

      @X = $Cuc_ModuloGlass_Struttura_Sp
      //Le giunzioni superiori fanno riferimento al singolo fianco, quelle inferiori a tutto il fusto
      //@Y = Y - $Cuc_ModuloGlass_Coperchio_Sp - $Cuc_ModuloGlass_Struttura_Rie
      @Y = Y - $Cuc_ModuloGlass_Coperchio_Sp

      @base_0.y = base_3.y + Yt - @Y - $Cuc_ModuloGlass_Coperchio_Sp

      @Lato = "SX"
   }

   Posiziona G368_GruppoLavorazione G368DX
   {
      GOSUB G368_PosaGrLavorazione

      @X = $Cuc_ModuloGlass_Struttura_Sp
      //Le giunzioni superiori fanno riferimento al singolo fianco, quelle inferiori a tutto il fusto
      //@Y = Y - $Cuc_ModuloGlass_Coperchio_Sp - $Cuc_ModuloGlass_Struttura_Rie
      @Y = Y - $Cuc_ModuloGlass_Coperchio_Sp

      @base_0.x = base_3.x - @X
      @base_0.y = base_3.y + Yt - @Y - $Cuc_ModuloGlass_Coperchio_Sp

      @Lato = "DX"
   }

   Posiziona G368_GruppoLavorazione G368DW
   {
      GOSUB G368_PosaGrLavorazione

      @X = X - 2 * $Cuc_ModuloGlass_Struttura_Rie
      @Y = $Cuc_ModuloGlass_Struttura_Sp

      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Rie
      if( VAR_Posizione == 0 ) { @base_0.y = @base_0.y + $Cuc_ModuloGlass_Piedini_Sp }

      @Lato = "DW"
   }
  #endif
}

Elemento Cuc_ModuloGlass_Fusto
{
   Descrizione = "Cucina - Modulo Glass - Fusto"
   Code        = CUC
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   //Alias FustoModuloGlass_368

   Variabili
   {
      X             "Larghezza "                                         368
      Y             "Altezza "                                           194
      Yv            "Altezza vano interno"                               176
      Yvs           "Altezza singolo vano"                               0
      Z             "Profondita'"                                        656

      VAR_Ripiani   "Numero ripiani"                                     0      Implicit
      VAR_Pellicola "Lati pellicola: -1:sx, 1:dx, 2:entrambi, 0:nessuno" 0      Implicit

      FIN_var       ""                                                   "C014" Implicit

      HIDE          ""                                                   3
      M4_NO_OFFS    ""                                                   1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Yv  = Y - $Cuc_ModuloGlass_Coperchio_Sp - $Cuc_ModuloGlass_Struttura_Sp
      Yvs = ( Yv - VAR_Ripiani * $Cuc_ModuloGlass_Ripiano_Sp ) / ( VAR_Ripiani + 1 )

      FIN_idx_gest = idx_pdr
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_comp_glass fiasx
   {
      @TipoPan = "FIASX-GL-BA"

      @X = $Cuc_ModuloGlass_Struttura_Sp
      @Y = Y - $Cuc_ModuloGlass_Struttura_Rie - $Cuc_ModuloGlass_Coperchio_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @STP_STAMPA = 1
      @STP_VERSO = "SX"

      @M4_NO_OFFS = 1
   }

   Posiziona _graf_comp_glass fiadx
   {
      @TipoPan= "FIADX-GL-BA"

      @X = $Cuc_ModuloGlass_Struttura_Sp
      @Y = Y - $Cuc_ModuloGlass_Struttura_Rie - $Cuc_ModuloGlass_Coperchio_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @STP_STAMPA = 1
      @STP_VERSO = "DX"

      @M4_NO_OFFS = 1
   }

   Posiziona _graf_comp_glass fnd
   {
      @TipoPan = "FON"

      @X = X - 2*$Cuc_ModuloGlass_Struttura_Rie
      @Y = $Cuc_ModuloGlass_Struttura_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Rie

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @STP_STAMPA = 1
      @STP_VERSO = "DW"

      @M4_NO_OFFS = 1
   }

   Posiziona BloccoBlend cop
   {
      @X = X
      @Y = $Cuc_ModuloGlass_Coperchio_Sp
      @Z = Z

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

      @BLEND__ = $Cuc_ModuloGlass_Coperchio_Sp/10

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @STP_STAMPA = 1
      @STP_VERSO = "UP"

      @M4_NO_OFFS = 1
   }

   //RIPIANI
   Posiziona Blocco rip1
   {
      @escluso = 1
      if( VAR_Ripiani > 0 ) { @escluso = 0 }

      @X = X - 2*$Cuc_ModuloGlass_Struttura_Sp
      @Y = $Cuc_ModuloGlass_Ripiano_Sp
      @Z = Z

      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Sp
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Sp + Yvs
      @base_0.z = base_0.z

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @M4_NO_OFFS = 1
   }

   Posiziona Blocco rip2
   {
      @escluso = 1
      if( VAR_Ripiani > 1 ) { @escluso = 0 }

      @X = X - 2*$Cuc_ModuloGlass_Struttura_Sp
      @Y = $Cuc_ModuloGlass_Ripiano_Sp
      @Z = Z

      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Sp
      @base_0.y = base_0.y + Y - $Cuc_ModuloGlass_Coperchio_Sp - Yvs - @Y
      @base_0.z = base_0.z

      GOSUB rivestimento
      @f_rivestimento = $Cuc_ModuloGlass_Struttura_FRiv

      @M4_NO_OFFS = 1
   }

   //PELLICOLE
   ///Fondo sempre presente
   Posiziona Blocco p_fnd
   {
      @X = X - 2*$Cuc_ModuloGlass_Struttura_Rie
      @Y = $Cuc_ModuloGlass_Pellicola_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_ModuloGlass_Struttura_Rie

      @c_rivestimento = $c_grafite

      @M4_NO_OFFS = 1
   }

   ///Fianco sx
   Posiziona Blocco p_fsx
   {
      @escluso = 1
      if( VAR_Pellicola < 0
        | VAR_Pellicola == 2 ) { @escluso = 0 }

      @X = $Cuc_ModuloGlass_Pellicola_Sp
      @Y = Y - $Cuc_ModuloGlass_Struttura_Rie - $Cuc_ModuloGlass_Coperchio_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie

      @c_rivestimento = $c_grafite

      @M4_NO_OFFS = 1
   }

   ///Fianco dx
   Posiziona Blocco p_fdx
   {
      @escluso = 1
      if( VAR_Pellicola > 0 ) { @escluso = 0 }

      @X = $Cuc_ModuloGlass_Pellicola_Sp
      @Y = Y - $Cuc_ModuloGlass_Struttura_Rie - $Cuc_ModuloGlass_Coperchio_Sp
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + $Cuc_ModuloGlass_Struttura_Rie

      @c_rivestimento = $c_grafite

      @M4_NO_OFFS = 1
   }
}
//} CUCINA - MODULI GLASS


//{ CUCINA - ANTE STRIPES
Elemento Frontale_Stripes
{
   Descrizione = "Frontale stripes"
   Code        = ANT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       AntaGrafica;StpFrontaleStripes

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Y "(Altezza)"  2580  ShowAlways
      X "(Larghezza)" 500  ShowAlways
      Z "(Spessore)"   25  ShowAlways

      Apertura       ""  "" Implicit

      FrontaleVetro  ""  0

      Spe_PanFin     ""  4
      Spe_PanInt     "" 16
      Spe_Cor        "" 17
      Lar_Cor        "" 14.5

      HIDE           "" 3

      M4_MIS         "" "X;Y;Z"

      perCODICE      "" ""
      GEST_CODICE    "" ""
      perRADICE      "" ""
      RADICE         "" ""

      NO_AUTO        "" 1 SaveAlways

      wk_stripes     "" 0
      wk_stripes_usr "" 0

      c_trafila      "" [192,192,192] XyzAbsolute
   }

   Assegnazioni
   {
      GOSUB AssComune
      FIN_idx_gest = idx_pdr
   }

   PuntiNotevoli
   {
      GOSUB punti
      Z = Spe_Cor + Spe_PanFin
   }

   Attrezza
   {
      idx_ref = @idx_att

      GOSUB att_ante
   }

   Controlli
   {
      GOSUB CtrlComune

      //No auto
      if( ACTION() == 2 & NO_AUTO == 1 & $ATTIVA_DLL == 1 )
      {
         COMANDO( STRCAT( "NO_AUTO ", STR(ATTUALE()), " //NO_AUTO ", NOME(ATTUALE())))
         NO_AUTO = 0
      }

      GOSUB Calcola_Fascia_Frontale_Stripes
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_Frontale_Stripes
   }

   Posiziona Pannello_Frontale_Stripes pan
   {
      @X = X - 2*Lar_Cor
      @Y = Y - 2*Lar_Cor
      @Z = Spe_PanInt

      @base_0.x = base_0.x + Lar_Cor
      @base_0.y = base_0.y + Lar_Cor
      @base_0.z = base_0.z + 1
   }

   Posiziona Blocco nas
   {
      GOSUB posa_blocco

      @X = X - 1
      @Z = 0.1
      @Y = Y - 1

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

      FIN_var = "C179"
      GOSUB rivestimento

      if( VAR_EXIST( ATTUALE(), GetVarGest(FIN_var)) == 0 )
      {
         @c_rivestimento = $c_pomice
      }
   }

   Posiziona Fascia_Frontale_Stripes fin_1
   {
      @Nr_Fin = 1
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona Fascia_Frontale_Stripes fin_2
   {
      @Nr_Fin = 2
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona Fascia_Frontale_Stripes fin_3
   {
      @Nr_Fin = 3
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona Fascia_Frontale_Stripes fin_4
   {
      @Nr_Fin = 4
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona Fascia_Frontale_Stripes fin_5
   {
      @Nr_Fin = 5
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona Fascia_Frontale_Stripes fin_6
   {
      @Nr_Fin = 6
      GOSUB Posa_Fascia_Frontale_Stripes
   }

   Posiziona _graf_cornice_fro corfro
   {
      GOSUB posa_blocco

      @Z = Spe_Cor
      @Lar_Cor = Lar_Cor

      @c_rivestimento = c_trafila
      @TrLadsMaterial = "TesyBrushedMetal_Alluminium"
   }
}

Elemento Pannello_Frontale_Stripes
{
   Descrizione = "Pannello anta stripes"
   Code        = CUC
   Gruppo      = "FRO"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "Larghezza"     100 ShowAlways
      Y           "Altezza"       100 ShowAlways
      Z           "Spessore"      16  ShowAlways

      FIN_var     ""              "C002"
      FIN_orie    ""              "O"

      COD_EREDITA ""              "PRE"

      FillerM2G   " "             "" ShowAlways

      HIDE        ""              1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento Fascia_Frontale_Stripes
{
   Descrizione = "Vetro anta stripes"
   Code        = CUC
   Gruppo      = "FRO"
   Tipo        = Contenitore
   Forma       = ""
   Vestibile    Cuc_AntaSingola Cuc_AntaLvst Cuc_Cestone Cuc_AntaBifacciale //Ricordati di aggiungere "GOSUB Set_Finitura_Frontale_Stripes" su tutti
   Altimetro    Auto
   Alias OnChangedVar;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              "Larghezza"        100 ShowAlways
      Y              "Altezza"          100
      Yr             "Altezza"          97  ShowAlways
      Z              "Spessore"         4

      VAR_Smusso     "Smusso fascia"    0.5

      //POSIZIONATO, VESTITO
      VAR_Tipo_Ins   "Tipo Inserimento" "VESTITO"
      //INFERIORE, SUPERIORE, INTERMEDIO, INTERO
      VAR_Posizione  "Posizionamento"   ""

      M4_MIS         ""                 "X;Yr"

      GEST_CODICE    ""                 "2CB098"

      FIN_var        ""                 "C001"
      FIN_orie       ""                 "O"

      FIN_val        ""                 ""
      FIN_ns         ""                 ""

      FillerM2G      " "                "" ShowAlways

      COD_EREDITA    ""                 "PRE;POST"

      HIDE           ""                 0 //Mostro sempre per permettere cambio finiture

      XGLASS         "Num. XGLASS"      "" Utente ( )

      idx_vetro      ""                 -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB Posizione_Fascia_Frontale_Stripes
      GOSUB Dimensiona_Fascia_Frontale_Stripes

      //Luca 17/05/2020
      STP_Bollina = 1
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

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

         // Cucina versione 2.0
         if( VAR_VAL( PADRE( $query_p1, -1), "Cucina_Versione") > 2)     { EXITSUB() }

         //Solo su basi o bifacciali
         if( UN_PADRE2( $query_p1, "ScoccaT_B*") != 1
           & NOME($query_p1) != "Cuc_AntaBifacciale")                    { EXITSUB() }

         //No su basi frigo
         if( UN_PADRE2( $query_p1, "Cuc_AntaFrigo"))                     { EXITSUB() }

         //Solo su bifacciali per basi
         if( VAR_VAL( $query_p1, "FLAG_perColonna") > 0)                 { EXITSUB() }

         //Solo su frontali 368
         if( VAR_VAL( $query_p1, "TipoFrontale") != 0)                   { EXITSUB() }

         //Solo su vetro, ww o laminato
         if( VAR_VAL_STR( $query_p1, "MaterialeFrontale") != "VETRO"
           & VAR_VAL_STR( $query_p1, "MaterialeFrontale") != "WILDWOOD"
           & VAR_VAL_STR( $query_p1, "MaterialeFrontale") != "LAMINATO") { EXITSUB() }

        #ifndef TEC
         COMPONENTI2( "wk_stripes_p1", $query_p1, "Fascia_Frontale_Stripes")
         if( wk_stripes_p1 > 2 )                                         { EXITSUB() }
        #endif

         $QueryResult__ = 1
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__
      nome_ref = NOME(idx_ref)

      wk_ref_y = VAR_VAL( idx_ref, "Y")
      if( nome_ref == "Cuc_AntaBifacciale" ) { wk_ref_y = wk_ref_y - $Cuc_Aria_Ant_Y } //Devo compensare la partenza, solo per il bifacciale

      wk_liv_passo = 184
      wk_liv_max   = 3
      if( $modalita == "TEC" )
      {
         // TODO: Sbloccare
         //wk_liv_passo = 92
         //wk_liv_max   = 11
      }

      DEL_VAR(idx_att,"liv2add*")

      //Da sopra a sotto, come a listino
      liv2add = 1
      liv2add[1] = wk_ref_y

      wk_liv_y = liv2add[1]
      while( wk_liv_y >= wk_liv_passo  //Il livello in basso non può essere minore del passo
           & liv2add <= wk_liv_max )   //Numero massimo di livelli
      {
         liv2add = liv2add + 1

         wk_liv_y = wk_liv_y - wk_liv_passo
         if( liv2add == 2 ) { wk_liv_y = wk_liv_y + $Cuc_Aria_Ant_Y }

         if( wk_liv_y < 0 ) { wk_liv_y = 0 }
         VAR_VALUE_SET( ATTUALE(), GetArrayVar( "liv2add", liv2add), wk_liv_y)
      }

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

   Vesti
   {
      ref_idx  = @idx_att
      vano_n   = $vano_n

      X = $larghezza
      Y = $altezza

      base_0.x = $vano_0.x
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z + @Z + VAR_VAL( ref_idx, "MZ") - Z

      if( UN_PADRE("Cuc_AntaBifacciale") )
      {
         X = @Xr

         base_0.x = $vano_0.x + $Cuc_Aria_Ant_X
         if( @FSN_MagSx > 0 ) { base_0.x = base_0.x - @FSN_MagSx * @FSN_ParX }
         if( @FSN_RidSx > 0 ) { base_0.x = base_0.x + @FSN_RidSx * @FSN_ParX }

         base_0.z = base_0.z + $Cuc_Aria_Ant_Z
      }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST" )
      {
         GOSUB Set_NonSig_Frontale_Stripes
      }
   }

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

      if( $ChangedVar == GetVarGest(FIN_var) )
      {
         //COMANDO( STRCAT( "RICALCOLA_UNA ", STR( PADRE( ATTUALE(), 2)), " no_agganciati //OnChangedVar da ", NOME(ATTUALE())))
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      GOSUB Set_NonSig_Frontale_Stripes
      GOSUB Set_Padre_Gest_Fascia_Frontale_Stripes
      GOSUB Set_Gest_C008_Frontale_Stripes

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura PostGestDllValida
   {
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder == 0 & $OnRigenera == 0 )
      {
         if( VAR_Tipo_Ins == "VESTITO" )
         {
            COMANDO( STRCAT( "RICALCOLA_UNA ", STR( GetPrimoGest( ATTUALE(), 2)), " no_agganciati //PostGestDllValida da ", NOME(ATTUALE())))
         }
      }
   }

   Procedura cancella
   {
      if( VAR_Tipo_Ins == "POSIZIONATO" )
      {
         GOSUB BloccaCancellaComponente
         EXITSUB()
      }

      COMANDO( STRCAT( "RICALCOLA_UNA ", STR( GetPrimoGest( ATTUALE(), 2)), " no_agganciati //Cancella da ", NOME(ATTUALE())))
   }

   Posiziona BloccoBlend bl
   {
      @escluso = 0
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 1 }

      if( @escluso == 0 ) { idx_vetro = ATTUALE() }

      GOSUB Posa_Elemento

      @Y = Yr

      @base_0.y = base_0.y + (Y - @Y)/2
      if( VAR_Posizione == "INTERO"
        | VAR_Posizione == "INFERIORE" ) { @base_0.y = base_0.y }
      if( VAR_Posizione == "SUPERIORE" ) { @base_0.y = base_0.y + Y - @Y }

      @BLEND__ = VAR_Smusso
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND ) { @escluso = 0 }

      if( @escluso == 0 ) { idx_vetro = ATTUALE() }

      GOSUB posa_blocco

      @Y = Yr

      @base_0.y = base_0.y + (Y - @Y)/2
      if( VAR_Posizione == "INTERO"
        | VAR_Posizione == "INFERIORE" ) { @base_0.y = base_0.y }
      if( VAR_Posizione == "SUPERIORE" ) { @base_0.y = base_0.y + Y - @Y }

      @OrieVetro = "FRO"

      GOSUB rivestimento
   }
}
//} CUCINA - ANTE STRIPES

Subroutine
{
//{ Inizio Procedure Dimensioni

   // OnTabEredita per materiale
   PROCEDURA OTE_SetFFMateriale
   {
      // FT 02/03/20 - decodifico il tipo di finitura/struttura
      if( TABER_REGOLA == "POST" )
      {
         FF_Materiale = "VETRO"

         C018 = VAR_VAL_STR(ATTUALE(), "GEST_C018")
         if( C018 != "" & C018 != "__" )
         {
            wk_no_sig = STRDADB(ATTUALE(), "DAMMI_NONSIGNIF", STRCAT("GEST_C018;", GEST_C018))

            if( wk_no_sig == "FENIX"  )  { FF_Materiale = "LAMINATO" }
            if( wk_no_sig == "WW000"  )  { FF_Materiale = "WILDWOOD" }
            //LZ 02/08/2021: cucine laccate
            if( wk_no_sig == "LC000"  )  { FF_Materiale = "HPL" }
         }
      }
   }

   // FT 06/03/2020 - identifico la tipologia di base
   PROCEDURA FFTipologia
   {
      // in input:
      // FF_idx_ref: idx della struttura da valutare
      //
      // in output:
      // FF_Tipologia
      FF_Tipologia = "BASE A PARETE"

      // Per fianchi di finitura fusion
      FF_Elemento = "FIANCO FINITURA"
      if( UN_PADRE("ElementoFusion") == 1 )   { FF_Elemento = "FASCIA FUSION" }

      // ------------------------------------------
      if( IS_IDX(FF_idx_ref) != 1 )   { EXITSUB() }

      wk_FF_idx_ref_nome = NOME(FF_idx_ref)
      if( IS_MATCH( wk_FF_idx_ref_nome, "ScoccaT_B*") )
      {
         //ConBifacciale_1  alemeno 1 bifacciale
         if( VAR_VAL( FF_idx_ref, "ConBifacciale_1") == 1)     { FF_Tipologia = "BASE BIFACCIALE"    }

         if( wk_FF_idx_ref_nome == "ScoccaT_BaseAngoloIsola")  { FF_Tipologia = "BASE ANGOLO ISOLA"  }

         if( VAR_VAL( FF_idx_ref, "ConBarraIsola") == 1)       { FF_Tipologia = "BASE DOPPIA"        }

         if( REV >= 5
           & VAR_VAL( FF_idx_ref, "Y_Cmp") == 873)             { FF_Tipologia = "BASE H873"          }

         if( wk_FF_idx_ref_nome == "ScoccaT_BaseLvst")         { FF_Tipologia = "BASE LAVASTOVIGLIE" }

         if( wk_FF_idx_ref_nome == "ScoccaT_BaseFrigo")        { FF_Tipologia = "BASE FRIGO"         }

         if( UN_PADRE("ScoccaT_Base_AirKitchen"))              { FF_Tipologia = "BASE AIR KITCHEN"   }
      }

      if( IS_MATCH( wk_FF_idx_ref_nome, "ScoccaT_C*") == 1)    { FF_Tipologia = "COLONNA"            }
   }

   // FT 06/03/2020 - identifico le caratteristiche del fianco difinitura
   PROCEDURA FFAnalizza
   {
      exit_FFAnalizza = 0

      if( VAR_VAL(idx_att, "ACTION2") != 1 )   { exit_FFAnalizza = 1   EXITSUB() }
      if( ACTION() <= 0 )                      { exit_FFAnalizza = 1.1 EXITSUB() }

      if( ACTION() == 2 )                      { exit_FFAnalizza = 1.2 EXITSUB() }

      if( ACTION() == 3 )                      { exit_FFAnalizza = 1.3 EXITSUB() }
      if( ACTION() == 1064 )                   { exit_FFAnalizza = 1.4 EXITSUB() }

      //if( CMD() != 0 )                         { exit_FFAnalizza = 2   EXITSUB() }
      //if( VAR_VAL(-1, "__loading__") > 0 )     { exit_FFAnalizza = 3   EXITSUB() }
      if( $OnLoadOrder == 1  )                 { exit_FFAnalizza = 3.1 EXITSUB() }

      if( COMPONENDO() == 1 )                  { exit_FFAnalizza = 4   EXITSUB() }
      if( $M4RicalcoloOffset__ == 1 )          { exit_FFAnalizza = 5   EXITSUB() }

      if( IS_IDX(idx_cnear_sx) != 1 )          { exit_FFAnalizza = 6   EXITSUB() }
      if( IS_IDX(idx_cnear_dx) != 1 )          { exit_FFAnalizza = 7   EXITSUB() }

      //Luca 29/06/2021
      //if( VAR_VAL(idx_att, "FF_ACTION2") != 1 )
      //{
      //   if( ACTION() == 2 )   { FF_ACTION2 = 1 }
      //   exit_FFAnalizza = 8  EXITSUB()
      //}

      //if( VAR_VAL(idx_att, "FF_ACTION2") != 1 ) { exit_FFAnalizza = 8  EXITSUB() }
      //if( ACTION() == 2 )                       { FF_ACTION2 = 1       EXITSUB() }

      ScriviSuLog( 0 , "FFAnalizza" , "START" )
      ScriviSuLog( 0 , "FFAnalizza" , STRCAT("ATTUALE = ",STR(ATTUALE())) )
      ScriviSuLog( 0 , "FFAnalizza" , STRCAT("ACTION = ",STR(ACTION())) )

//LP Trascurabile l'uscita per questi casi
//LP      // LP 13/04/2021 - non serve se automatico
//LP      if( CMD() == 1 & REV >= 2 )              { exit_FFAnalizza = 7   EXITSUB() }

      FF_PosizioneABCI = ""
      FF_DistanzaFB = 0
      FF_DistanzaFA = 0

      FF_PosizioneSD_Ref = ""
      FF_PosizioneSD_Bif = ""
      FF_ProfBase_Ref = Z
      FF_ProfBase_Bif = 0

      FF_ConBifacciale = 0

      // LP 13/04/2021 -  siccome il controllo lo faccio solo al primo inserimento,
      // devo garantirne l'esistenza per gli altri controlli
      if( VAR_EXIST(idx_att, "FF_ScoccaSx") != 1 )   { FF_ScoccaSx = 0 }
      if( VAR_EXIST(idx_att, "FF_ScoccaDx") != 1 )   { FF_ScoccaDx = 0 }

      // FT 04/06/2020 - mi prendo anche la posizione
      // della base (se a terra o sospesa)
      FF_PosizioneH_Ref = ""
      FF_PosizioneH_Bif = ""

      // LP 29/03/2021 - per REVISIONE 2
      // mi setto 2 variabili "flag" per capire se il fianco si sviluppa
      // in Z (basi doppie) in Y (basi sovrapposte) o entrambe.
      // In maniera tale da gestire correttamente il lamierino
      // e attrezzare le corrette lavorazioni
      FF_ScoccheInY = 0
      FF_ScoccheInZ = 0
      // cancello le eventuali variabili precedenti degli array
      DEL_VAR(idx_att, "FF_ScoccheInY_##*")
      DEL_VAR(idx_att, "FF_ScoccheInZ_##*")

      FF_idx_base_ref = -1
      FF_idx_base_bif = -1

      FF_idx_ref_sx = -1
      FF_idx_ref_dx = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("FF_ScoccaSx", idx_cnear_sx, 1, "ScoccaT_*")
      NEAR_GLOBALE2("FF_ScoccaDx", idx_cnear_dx, 1, "ScoccaT_*")

      ScriviSuLog( 0 , "FFAnalizza" , STRCAT("NEAR -->  FF_ScoccaSx=",STR(FF_ScoccaSx) ,  " FF_ScoccaDx=",STR(FF_ScoccaDx)) )

      //Luca 10/02/2022

      if( REV >=3 )
      {
         //analizzo gli array e cancello le basi non possibili
         //solo se ho trovato elementi a sx+dx
         if( FF_ScoccaSx > 0 & FF_ScoccaDx > 0 )
         {
            i = 1
            while ( i <= FF_ScoccaSx )
            {
               if( VAR_VAL(FF_ScoccaSx[i],"Z") < Z - 55
                 | VAR_VAL(FF_ScoccaSx[i],"Y") < Y - 55 )
               {
                  DEL_ARRAY_ITEM(ATTUALE(),"FF_ScoccaSx",i)
                  i = i - 1
               }

               i = i + 1
            }

            //analizzo gli array e cancello le basi non possibili
            i = 1
            while ( i <= FF_ScoccaDx )
            {
               if( VAR_VAL(FF_ScoccaDx[i],"Z") < Z - 55
                 | VAR_VAL(FF_ScoccaDx[i],"Y") < Y - 55  )
               {
                  DEL_ARRAY_ITEM(ATTUALE(),"FF_ScoccaDx",i)
                  i = i - 1
               }

               i = i + 1
            }
         }
      }

      //Luca 06/04/2022
      if( UN_PADRE("ScoccaT_Base_AirKitchen") )
      {
         FF_AirKitchen = 1

         FF_idx_base_ref = VAR_VAL(GetTopLevel(ATTUALE()),"idx_base")

         FF_ScoccaSx = 0
         FF_ScoccaDx = 0

         DEL_VAR(ATTUALE(),"FF_ScoccaSx_*")
         DEL_VAR(ATTUALE(),"FF_ScoccaDx_*")

         if( VAR_VAL(ATTUALE(),"FiancoAirKitchen_Lato") < 0 )
         {
            FF_ScoccaDx = 1
            FF_ScoccaDx[1] = FF_idx_base_ref
         }
         if( VAR_VAL(ATTUALE(),"FiancoAirKitchen_Lato") > 0 )
         {
            FF_ScoccaSx = 1
            FF_ScoccaSx[1] = FF_idx_base_ref
         }
      }

      ScriviSuLog( 0 , "FFAnalizza" , STRCAT("NEAR -->  FF_ScoccaSx=",STR(FF_ScoccaSx) ,  " FF_ScoccaDx=",STR(FF_ScoccaDx)) )

      // Strutture sia a destra che a sinistra
      /// Sbianco array del lato costituito interamente da colonne se l'altro non ha solo colonne
      if( FF_ScoccaSx > 0 & FF_ScoccaDx > 0)
      {
         // Sx
         FF_ColonnaSx = 0
         scoccaN = 0
         while( inc(scoccaN) <= FF_ScoccaSx)
         {
            if( IS_MATCH( NOME(FF_ScoccaSx[scoccaN]), "ScoccaT_Col*") == 1) { inc(FF_ColonnaSx) }
         }

         // Dx
         FF_ColonnaDx = 0
         scoccaN = 0
         while( inc(scoccaN) <= FF_ScoccaDx)
         {
            if( IS_MATCH( NOME(FF_ScoccaDx[scoccaN]), "ScoccaT_Col*") == 1) { inc(FF_ColonnaDx) }
         }

         if( FF_ColonnaDx == 0
           & FF_ColonnaSx == FF_ScoccaSx) { FF_ScoccaSx = 0 }

         if( FF_ColonnaSx == 0
           & FF_ColonnaDx == FF_ScoccaDx) { FF_ScoccaDx = 0 }
      }

      /// Se trovo ancora strutture sia a dx che a sx c'è qualcosa che non va
      if( FF_ScoccaSx > 0 & FF_ScoccaDx > 0) { EXITSUB() }

      if( FF_ScoccaSx > 0 )
      {
         FF_PosizioneSD_Ref = "DX"

         // fianco su base singola
         if( FF_ScoccaSx == 1 )   { FF_idx_base_ref = FF_ScoccaSx_##1 }

         // fianco su base doppia (isola/bifacciale)
         if( FF_ScoccaSx == 2 )
         {
            if( ANG_TOT2(FF_ScoccaSx_##1) == ANG_TOT2(idx_att) )
            {
               FF_idx_base_ref = FF_ScoccaSx_##1
               FF_idx_base_bif = FF_ScoccaSx_##2
            }
            else
            {
               FF_idx_base_bif = FF_ScoccaSx_##1
               FF_idx_base_ref = FF_ScoccaSx_##2
            }

            FF_PosizioneSD_Bif = "SX"

            //Luca 28/07/2020
            //aggiungo controllo base bifacciale, blocco caso in cui il fianco copre la barra retro di < 200 mm
            SET_#(FF_idx_base_bif)
            FF_DistanzaDaBaseBifacciale = DistanzaFraPunti(#base_0,base_0,ANG_TOT2(ATTUALE())+90)

            if( FF_DistanzaDaBaseBifacciale < 200 )
            {
               FF_idx_base_bif = -1
               FF_PosizioneSD_Bif = ""
            }
         }

         FF_idx_ref_sx = FF_idx_base_ref

         // DA REVISIONE 2
         // [ LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza o profondita
         // (il fianco deve coprire almeno 2 basi
         // in altezza o in profondita
         GOSUB FFAttrezzaGrpLavSx
         // ] LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza
      }

      if( FF_ScoccaDx > 0 )
      {
         FF_PosizioneSD_Ref = "SX"

         if( FF_ScoccaSx > 0 & IS_IDX(FF_idx_base_ref) )
         {
            wk_idx_dx = FF_ScoccaDx[1]

            if( VAR_VAL(wk_idx_dx,"Y") < VAR_VAL(FF_idx_base_ref,"Y")
              | VAR_VAL(wk_idx_dx,"Z") < VAR_VAL(FF_idx_base_ref,"Z"))
            {
               FF_ScoccaDx = 0
               FF_PosizioneSD_Ref = "DX"
            }
         }

         // fianco su base singola
         if( FF_ScoccaDx == 1 )  { FF_idx_base_ref = FF_ScoccaDx_##1 }

         // fianco su base doppia (isola/bifacciale)
         if( FF_ScoccaDx == 2 )
         {
            if( ANG_TOT2(FF_ScoccaDx_##1) == ANG_TOT2(idx_att) )
            {
               FF_idx_base_ref = FF_ScoccaDx_##1
               FF_idx_base_bif = FF_ScoccaDx_##2
            }
            else
            {
               FF_idx_base_bif = FF_ScoccaDx_##1
               FF_idx_base_ref = FF_ScoccaDx_##2
            }

            FF_PosizioneSD_Bif = "DX"

            //Luca 28/07/2020
            //aggiungo controllo base bifacciale, blocco caso in cui il fianco copre la barra retro di < 200 mm
            SET_#(FF_idx_base_bif)
            FF_DistanzaDaBaseBifacciale = DistanzaFraPunti(#base_0,base_0,ANG_TOT2(ATTUALE())+90)

            if( FF_DistanzaDaBaseBifacciale < 200 )
            {
               FF_idx_base_bif = -1
               FF_PosizioneSD_Bif = ""
            }
         }

         FF_idx_ref_dx = FF_idx_base_ref

         // DA REVISIONE 2
         // [ LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza o profondita
         // (il fianco deve coprire almeno 2 basi
         // in altezza o in profondita
         GOSUB FFAttrezzaGrpLavDx
         // ] LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza
      }

      // Mi prendo i valori delle basi
      if( IS_IDX(FF_idx_base_ref) == 1)
      {
         // Se sono su base con piedini/zoccolo non essendo allineato filo sotto non
         // intercetta mai il filo basso per cui verifico la distanza
         // wk_pnt_base_str = [0, VAR_VAL(FF_ProfBase_Ref, "base_0.y"), 0]
         // wk_pnt_alto_str = [0, VAR_VAL(FF_ProfBase_Ref, "alto_0.y"), 0]
         wk_pnt_base_str = [0, VAR_VAL(FF_idx_base_ref, "base0y_abs"), 0]
         wk_pnt_alto_str = [0, VAR_VAL(FF_idx_base_ref, "alto0y_abs"), 0]

         wk_pnt_base_att = [0, base0y_abs, 0]
         wk_pnt_alto_att = [0, alto0y_abs, 0]

         FF_DistanzaFB = DISTANZA(wk_pnt_base_att, wk_pnt_base_str)
         FF_DistanzaFA = DISTANZA(wk_pnt_alto_att, wk_pnt_alto_str)

         FF_ProfBase_Ref = VAR_VAL(FF_idx_base_ref, "Zt")

         //Luca 31/08/2020 riporto modifiche di LAGO
         ////Luca 30/07/2020
         //if( NOME(FF_idx_base_ref) == "ScoccaT_BaseAngoloIsola"  ) { FF_ProfBase_Ref = FF_ProfBase_Ref + 22.5 }
         if( NOME(FF_idx_base_ref) == "ScoccaT_BaseAngoloIsola"  )
         {
            //FF_ProfBase_Ref = FF_ProfBase_Ref + 78
            FF_ProfBase_Ref = VAR_VAL(FF_idx_base_ref, "Xt") + 24
         }

         // FT 24/03/20 - se c'è il pannello bifacciale la misura di riferimento comprende
         // anche lo spessore del bifacciale. https://mantis.tesysoftware.com/view.php?id=22356
         // Se sono con pannello bifacciale NON può esserci la base bifacciale

         //Luca 22/09/2020
         //se il fianco è superiore     --> verifico ConBifacciale
         //se il fianco non è superiore --> verifico ConBifacciale_1
         //Luca 28/07/2020
         //FF_ConBifacciale = VAR_VAL(FF_idx_base_ref, "ConBifacciale")
         FF_ConBifacciale = VAR_VAL(FF_idx_base_ref, "ConBifacciale_1")

         if( FF_DistanzaFA < 5 ) { FF_ConBifacciale = VAR_VAL(FF_idx_base_ref, "ConBifacciale") }

         if( FF_ConBifacciale == 1 )  { FF_ProfBase_Ref = Z }

         //Luca 24/07/2020 - se il fianco di finitura è ridotto rispetto alla profondità della base
         if( FF_ProfBase_Ref > Z ) { FF_ProfBase_Ref = Z }

         // LP 29/03/2021
         if( REV >= 2 & FF_ScoccheInZ > 0 )
         {
            FF_ConBifacciale = 1
            //FF_ProfBase_Bif = VAR_VAL(FF_ScoccheInZ_##1, "Z")
            FF_ProfBase_Bif = VAR_VAL(FF_ScoccheInZ_##1, "Zt")
         }


         // FT 04/06/2020
         FF_PosizioneH_Ref = "TERRA"
         if( VAR_VAL(FF_idx_base_ref, "base0y_abs") > $Cuc_Alt_Zoc )   { FF_PosizioneH_Ref = "SOSPESA" }
      }

      if( IS_IDX(FF_idx_base_bif) == 1 )
      {
         FF_ProfBase_Bif = VAR_VAL(FF_idx_base_bif, "Zt")

         // FT 04/06/2020
         FF_PosizioneH_Bif = "TERRA"
         if( VAR_VAL(FF_idx_base_bif, "base0y_abs") > $Cuc_Alt_Zoc )   { FF_PosizioneH_Bif = "SOSPESA" }
      }

      wk_FiloAlto = 0
      wk_FiloBasso = 0
      if( FF_DistanzaFB <= $Cuc_Alt_Zoc )   { wk_FiloBasso = 1 }
      if( FF_DistanzaFA <= $Cuc_Alt_Zoc )   { wk_FiloAlto = 1 }

      // se non sono nè filo alto nè filo basso allora sono centrale
      if( wk_FiloAlto == 0 & wk_FiloBasso == 0 )   { FF_PosizioneABCI = "C" }
      // se sono filo alto
      if( wk_FiloAlto == 1 & wk_FiloBasso == 0 )   { FF_PosizioneABCI = "A" }
      // se sono filo basso
      if( wk_FiloAlto == 0 & wk_FiloBasso == 1 )   { FF_PosizioneABCI = "B" }
      // se sono filo alto e filo basso allora sono intero
      if( wk_FiloAlto == 1 & wk_FiloBasso == 1 )   { FF_PosizioneABCI = "I" }


      // DEBUG HI(idx_att, 1)
      // DEBUG DISPLAY2(STRCAT("FFAnalizza idx ", STR(idx_att)
      // DEBUG                                  , "\nACTION=", STR(ACTION())
      // DEBUG                                  , "\nCMD=", STR(CMD())
      // DEBUG                                  , "\nFF_ScoccaSx=", STR(FF_ScoccaSx)
      // DEBUG                                  , "\nFF_ScoccaDx=", STR(FF_ScoccaDx)
      // DEBUG                                  ))
      // DEBUG HI(PADRE(idx_att, -1), 0)

      ScriviSuLog( 0 , "FFAnalizza" , "END" )
   }

   // FT 02/03/2020
   PROCEDURA FFSetLavorazioni
   {
      FF_Exit = ""

      if( ACTION() <= 0 | ACTION() == 2 )   { FF_Exit = "ACTION"              EXITSUB() }

      if( $OnLoadOrder == 1  )              { FF_Exit = "ONLOADORDER"         EXITSUB() }
      if( $M4RicalcoloOffset__ == 1 )       { FF_Exit = "M4RICALCOLOOFFSET"   EXITSUB() }

      // decodifica stringa dei fianchi di finitura
      // per condizionare opportunamente i valori
      // in base ai casi documentati
      // TipoFFinitura = 0 -->  FF_Tipologia = "BASE A PARETE"
      // TipoFFinitura = 1 -->  FF_Tipologia = "BASE BIFACCIALE"
      // TipoFFinitura = 2 -->  FF_Tipologia = "BASE DOPPIA"
      // TipoFFinitura = 3 -->  FF_Tipologia = "COLONNA"
      // TipoFFinitura = 4 -->  FF_Tipologia = "BASE ANGOLO ISOLA"
      //                   -->  FF_Tipologia = "BASE LAVASTOVIGLIE"
      // TipoFFinitura = 5 -->  FF_Tipologia = "BASE ANGOLO ISOLA"

      // in input FF_idx_ref
      GOSUB FFTipologia

      //COMANDO2(STRCAT("LOGMSG FFSetLavorazioni [",STR(ATTUALE()), "-",STR(PADRE(ATTUALE(),1)),"] | ACTION(",STR(ACTION()),")  | $OnLoadOrder[",STR($OnLoadOrder),"-",STR($OnLoadOrder2),"]  | FF_idx_ref=",STR(FF_idx_ref) , " | FF_Tipologia=",FF_Tipologia))

      // Rientri fa filo fianco (da fronte/retro)
      // da valorizzare in base ai casi
      RieZ_TraF = 41
      RieZ_TraR = 41

      //Luca 31/08/2020 riporto modifiche di LAGO
      if( FF_Tipologia == "BASE ANGOLO ISOLA"  )
      {
         RieZ_TraF = 48
         RieZ_TraR = 48
      }

      //LZ 20/05/2021: gestione trafile su base frigo
      OffZ_TraF = 0
      if( FF_Tipologia == "BASE FRIGO"
        & VAR_VAL(FF_idx_ref, "Verso") == FF_Verso
        & FF_Verso != 0 )
      {
         RieZ_TraF = 65

         //Luca 12/01/2022
         if( VAR_VAL(FF_idx_ref, "ConBifacciale_1") == 1 ) { RieZ_TraR = 65 }

         OffZ_TraF = 25
      }

      // Offset da basso/alto delle trafile
      // con riferimento al centroforo,
      // da valorizzare in base ai casi
      OffY_TraA = 90.5
      OffY_TraB = 90.5
      OffY_TraC = Y / 2

      RieZ_TraLvst = 201

      // Misure trafile
      X_Tra = 5
      Y_Tra = 23

      // Profondità trafile da valorizzare in base ai casi
      Z_TraInf = Z - RieZ_TraR - RieZ_TraF
      Z_TraSup = Z - RieZ_TraR - RieZ_TraF
      Z_TraCen = Z - RieZ_TraR - RieZ_TraF

      // piastra metallica wildwood
      X_LamWW    = 0.8
      RieY_LamWW = 20
      RieZ_LamWW = 20
      Y_ForoWW   = 40
      Z_ForoWW   = 70

      RieY_TraLam = 5
      RieZ_TraLam = 10

      if( FF_Elemento == "FASCIA FUSION" )     { Z_ForoWW = 40 }

      //Simone 12/05/2022
      //Luca 12/01/2022
      if( FF_Tipologia == "BASE FRIGO"
        | FF_Tipologia == "BASE AIR KITCHEN" ) { Z_ForoWW = 40 }

      // [ -----------------------------------------------------
      // numero delle trafile

      FF_NumeroTrafile = 0
      FF_Caso = "0"

      // uscite per revisione standard
      if( REV == 0 )
      {
         //Luca 24/07/2020 mantis 23094: Trafile fianchi di finitura, migliorie varie
         //'NOVITA: TUTTI I FF CON H < 134 NON HANNO TRAFILA'
         //if( Y < 134 )  { EXITSUB() }
         //if( Y < 131 )  { EXITSUB() }
         if( YFF < 131 )  { EXITSUB() }

         //Luca 30/07/2020 023158: Fianchi di finitura: no trafile per fianchi in vetro < 134
         //if( VAR_VAL(GetTopLevel(ATTUALE()),"Z") < 134 ) { EXITSUB() }
         if( ZFF < 134 ) { EXITSUB() }
      }

      if( FF_Disattiva == 1
        & FF_Materiale != "WILDWOOD") { FF_Exit = "DISATTIVATO"   EXITSUB() }

      FF_DisattivaSoloLav = FF_Disattiva

      //Luca 04/09/2020 Mantis 23267: Trafile fianchi vetro: no su colonne
      if( FF_Tipologia == "COLONNA" )   { FF_Exit = "TIPOLOGIA COLONNA"   EXITSUB() }

      // da revisione 1
      if( REV >= 1 )
      {
         // LP [ 19/03/2021 - gestisco diversamente i limiti dimensionali per l'exit per poter essere più dinamico
         // LP  //Luca 24/07/2020 mantis 23094: Trafile fianchi di finitura, migliorie varie
         // LP  //'NOVITA: TUTTI I FF CON H < 134 NON HANNO TRAFILA'
         // LP  //if( Y < 134 )  { EXITSUB() }
         // LP  //if( Y < 131 )  { EXITSUB() }
         // LP  if( YFF < 131 )  { EXITSUB() }
         // LP
         // LP  //Luca 30/07/2020 023158: Fianchi di finitura: no trafile per fianchi in vetro < 134
         // LP  //if( VAR_VAL(GetTopLevel(ATTUALE()),"Z") < 134 ) { EXITSUB() }
         // LP  if( ZFF < 134 ) { EXITSUB() }

         Y_Min = 131
         Z_Min = 331

         if( FF_Materiale == "WILDWOOD" )     { Y_Min = 92 Z_Min = 134 }

         //Luca 30/06/2022
         if( FF_Materiale == "WILDWOOD"
           & FF_Elemento == "FASCIA FUSION" ) { Z_Min = 92 }

         if( YFF < Y_Min | ZFF < Z_Min )  { FF_Exit = "INFERIORE A MISURE MINIME"   EXITSUB() }
         // LP ] 19/03/2021 - gestisco diversamente i limiti dimensionali per l'exit per poter essere più dinamico
      }

      if( FF_Materiale == "VETRO" | FF_Materiale == "LAMINATO" )
      {
         FF_NumeroTrafile = 1   FF_Caso = STRCAT(FF_Caso, " - 1")

         if( Y > 181 )   { FF_NumeroTrafile = 2   FF_Caso = STRCAT(FF_Caso, " - 1.1") }
         if( Y > 733 )   { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, " - 1.2") }

         //LZ 20/05/2021: revisione dedicata per limiti trafile
         if( REV >= 3 )
         {
            FF_NumeroTrafile = 1   FF_Caso = STRCAT(FF_Caso, " - 1a")

            if( Y >= 250 )   { FF_NumeroTrafile = 2   FF_Caso = STRCAT(FF_Caso, " - 1a.1") }
            if( Y >= 826 )   { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, " - 1a.2") }
         }

         // se ne ho uno sono sempre centrale
         if( FF_NumeroTrafile == 1 )
         {
            if( REV < 6
              | FF_PosizioneABCI != "B") { OffY_TraB = Y / 2   FF_Caso = STRCAT(FF_Caso, " - 1.3") }

            //Luca 24/07/2020 nel caso di fianco 'intero' ridotto nella parte inferiore da accosto top -- Tengo fisso 90.5 da sopra
            if( FF_PosizioneABCI == "I" & FF_DistanzaFB > 0 & FF_DistanzaFB < 20 )
            {
               OffY_TraB = Y - 90.5   FF_Caso = STRCAT(FF_Caso, " - 1.3")
            }
         }

         // Eccezioni per LVST
         //LZ 07/10/2021
         ConPianoSNACK = VAR_VAL(PADRE(idx_att, 1), "ConPianoSNACK")
         SNACK_RidY = VAR_VAL(PADRE(idx_att, 1), "SNACK_RidY")

         if( FF_Tipologia == "BASE LAVASTOVIGLIE" )
         {
             OffY_TraB = 44.5   FF_Caso = STRCAT(FF_Caso, "- 2")

            // caso del fianco basso o intero
            if( FF_PosizioneABCI == "B" | FF_PosizioneABCI == "I" )
            {
               // Per fianchi con 2 o più trafile
               if( Y > 89 )
               {
                  FF_NumeroTrafile = 2    FF_Caso = STRCAT(FF_Caso, " - 2.1")
                  if( Y > 733 )   { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, " - 2.2.1") }
               }

               // Per fianchi inferiori ad h. 181 (1 o 2 trafile)
               if( Y <= 181 )   { OffY_TraA = 44.5   FF_Caso = STRCAT(FF_Caso, " - 2.2") }


               // se sono fianco intero devo contare anche l'offset ripiano in alto
               if( FF_PosizioneABCI == "I" )
               {
                  // per evitare ripiano in alto
                  if( Y > 181 )   { OffY_TraA = 115.5  FF_Caso = STRCAT(FF_Caso, " - 2.3") }
               }

               // se sono per lavastoviglie e sono il pannello in basso allora devo avere lo scanso maggiore
               if( FF_PosizioneABCI == "B" & FF_NumeroTrafile == 2 & Y <= 273 )   { Z_TraSup = Z - RieZ_TraR - RieZ_TraLvst   FF_Caso = STRCAT(FF_Caso, "- 2.4") }

               //LZ 20/05/2021: correggo limite altezza
               if( REV >= 3
                 & FF_PosizioneABCI == "B"
                 & FF_NumeroTrafile == 2
                 & Y < 284 )                                                      { Z_TraSup = Z - RieZ_TraR - RieZ_TraLvst   FF_Caso = STRCAT(FF_Caso, "- 2.4") }

               // FT 24/03/2020 - mantis https://mantis.tesysoftware.com/view.php?id=22353
               if( Y <= 134 & FF_PosizioneABCI == "B" )
               {
                  FF_NumeroTrafile = 1
                  FF_Caso = STRCAT(FF_Caso, "- 2.5")
               }

               //Luca 28/07/2020
               if(  FF_PosizioneABCI == "I"  & FF_NumeroTrafile == 3 )
               {
                  if( VAR_VAL(FF_idx_ref,"Y") == 873 )
                  {
                     OffY_TraC = Y - 395
                     FF_Caso = STRCAT(FF_Caso, "- 2.6")
                  }
                  if( VAR_VAL(FF_idx_ref,"Y") == 920 )
                  {
                     OffY_TraC = Y - 458.5
                     FF_Caso = STRCAT(FF_Caso, "- 2.7")
                  }
               }

               //Luca 13/10/2020 23530: Fianchi finitura lavastoviglie: trafila in posizione errata
               if(  FF_PosizioneABCI == "B" )
               {
                  if( Y >= 284 & Y <= 330 )
                  {
                     OffY_TraA = Y - 194 - 44.5
                     FF_Caso = STRCAT(FF_Caso, " - 2.8")
                  }
               }
            }

            //LZ 07/10/2021: lavastoviglie con snack, falso filo basso
            // se sono un pannello filo alto NON intero
            //if( FF_PosizioneABCI == "A")
            if( FF_PosizioneABCI == "A"
              | ( FF_DistanzaFA == SNACK_RidY & ConPianoSNACK > 0 ))
            {
               OffY_TraA = 115.5   FF_Caso = STRCAT(FF_Caso, " - 3")

               // se sono sotto una certa misura vengo incollato
               if( Y < 159 )     { FF_NumeroTrafile = 0    FF_Caso = STRCAT(FF_Caso, " - 3.1") }
               //Luca 24/07/2020 - aggiorno OffY_TraB per corretta gestione stampe
               // FT 04/06/2020 - 2019_OR015644 (mail del 04/06/2020, 18/05/2020)
               // if( Y > 181 )     { FF_NumeroTrafile = 1    FF_Caso = STRCAT(FF_Caso, " - 3.2") }
               if( Y >= 159 )    { FF_NumeroTrafile = 1    FF_Caso = STRCAT(FF_Caso, " - 3.2") OffY_TraB = Y - OffY_TraA }
               if( Y > 206 )     { FF_NumeroTrafile = 2    FF_Caso = STRCAT(FF_Caso, " - 3.3") OffY_TraB = 44.5 }


               //Luca 24/07/2020 mantis 23094: Trafile fianchi di finitura, migliorie varie
               //'ERRATA: SU BASE LVST DA 873_ TRAFILA IN ALTO SEMPRE A 69.5'
               if( VAR_VAL(FF_idx_ref,"Y") == 873 )
               {
                  if( IS_IDX( FF_idx_ref ) == 1 )
                  {
                     OffY_TraA = 69.5
                     FF_Caso = STRCAT(FF_Caso, " - 3.4")
                  }

                  if( Y > 825 )
                  {
                     FF_NumeroTrafile = 3
                     FF_Caso = STRCAT(FF_Caso, " - 3.5")

                     OffY_TraC = Y - 412.5

                     if( Y > 826 )  { OffY_TraB = 32 }
                     if( Y > 857 )  { OffY_TraB = 32.5 }
                  }

               }

               if( VAR_VAL(FF_idx_ref,"Y") == 920 )
               {
                  if( Y > 825 )
                  {
                     FF_NumeroTrafile = 3
                     FF_Caso = STRCAT(FF_Caso, " - 3.6")

                     OffY_TraC = Y - 458.5

                     if( Y > 826 )  { OffY_TraB = 32 }
                     if( Y > 904 )  { OffY_TraB = 32.5 }
                  }

               }

            }

            // caso del fianco centrale
            if( FF_PosizioneABCI == "C" )
            {
               FF_Caso = STRCAT(FF_Caso, "-4")

               // Per fianchi con 2 o più trafile
               if( Y > 89 )     { FF_NumeroTrafile = 2    FF_Caso = STRCAT(FF_Caso, " - 4.1") }

               // Per fianchi inferiori ad h. 181 (1 o 2 trafile)
               if( Y <= 181 )   { OffY_TraA = 44.5   FF_Caso = STRCAT(FF_Caso, " - 4.2") }

               // se sono sullo scanso devo spostare o accorciare la trafila
               if( FF_DistanzaFB <= 196 )  { Z_TraInf = Z - RieZ_TraR - RieZ_TraLvst   FF_Caso = STRCAT(FF_Caso, " - 4.3") }
            }

            // Casi specifici da segnalazioni mantis -----------------------------------
            // FT 04/06/2020 - aggiungo la condizione che sia a terra e Y < 917
            // FT // FT 24/03/2020 - mantis https://mantis.tesysoftware.com/view.php?id=22353
            // FT if( Y >= 870 & FF_PosizioneABCI == "I" )
            if( Y >= 870 & Y < 917 & FF_PosizioneABCI == "I" & FF_PosizioneH == "TERRA" )
            {
               FF_NumeroTrafile = 3
               OffY_TraA = 69.5
               OffY_TraB = 44.5
               OffY_TraC = OffY_TraB + 413
               FF_Caso = "OR20008113-2"
            }
         }

         // FT 0/06/2020 - gestione per eccezione su ordine 2019_OR018701
         // Se c'è una riduzione probabilmente non viene spostata la trafila
         // ma viene soltanto ridotto il fianco a partire dall'alto.
         // Pertanto si riduce anche la distanza da filo sopra.
         //LZ 07/10/2021: sposto più in alto
         //ConPianoSNACK = VAR_VAL(PADRE(idx_att, 1), "ConPianoSNACK")
         //SNACK_RidY = VAR_VAL(PADRE(idx_att, 1), "SNACK_RidY")
         if( FF_NumeroTrafile >= 2 & ConPianoSNACK > 0 & SNACK_RidY > 0 )
         {
            if( OffY_TraA > (SNACK_RidY + Y_Tra / 2 ))
            {
               OffY_TraA = OffY_TraA - SNACK_RidY
               FF_Caso = "2019_OR018701"
            }
         }

         //Simone 12/05/2022
         if( FF_Tipologia == "BASE AIR KITCHEN" ) { OffY_TraA = 93.5 }
      }

      if( FF_Materiale == "WILDWOOD" )
      {
         FF_Caso = "10"

         Y_LamWW = Y - 2 * RieY_LamWW
         Z_LamWW = Z - 2 * RieZ_LamWW

         // da revisione 1
         if( REV >= 1 )
         {
            // LP 22/03/2021 - mail di Zorzo 23/02/21
            // caso del fianco su base doppia (isola), tengo una sola lamiera
            // per cui la profondità è la somma del lamierino per base frontale
            // più la profondità della base retro
            Z_LamWW_Dop = 0
            if( FF_Tipologia == "BASE DOPPIA" & FF_TipoGruppoLav == "STANDARD" )
            {
               FF_Caso = "11"

               if( FF_ScoccaSx > 1
                 | FF_ScoccaDx > 1 )
               {
                  FF_Caso = "12"

                  // sommo la misura delle basi + la barra isola
                  Z_LamWW_Dop = FF_ProfBase_Ref + FF_ProfBase_Bif + $Cuc_Spe_BarraIso - 2 * RieZ_LamWW
               }
            }
         }

         // imposto le trafile con le misure delle lavorazioni (fori)
         RieZ_TraF = RieZ_LamWW + RieZ_TraLam
         RieZ_TraR = RieZ_LamWW + RieZ_TraLam

         //Nel caso di piastra singola centrata in profondità, solitamente associata a fianchi finitura fusion
         //if( FF_Elemento == "FASCIA FUSION" )
         if( RieZ_TraF + RieZ_TraR + 3*Z_ForoWW >= Z )
         {
            RieZ_TraR = RieZ_LamWW + (Z_LamWW - Z_ForoWW)/2
         }

         // Offset da basso/alto delle trafile
         // con riferimento al centroforo,
         // da valorizzare in base ai casi
         OffY_TraA = RieY_LamWW + Y_ForoWW / 2 + RieY_TraLam
         OffY_TraB = RieY_LamWW + Y_ForoWW / 2 + RieY_TraLam
         OffY_TraC = Y / 2

         // Misure trafile
         X_Tra = X_LamWW
         Y_Tra = Y_ForoWW

         RieZ_TraLvst = 189 + RieZ_TraF

         // da revisione 1
         if( REV >= 1 )
         {
            // LP 19/03/21 - mail di Zorzo 23/02/21 - riduco la quota di rientro in Z per la piastrina sulla scanso per LVST (da 179 a 169)
            RieZ_TraLvst = 179 + RieZ_TraF
         }

         //LZ 20/05/2021: considero offset necessario a base frigo
         //Z_TraInf = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF
         //Z_TraSup = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF
         //Z_TraCen = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF
         Z_TraInf = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF
         Z_TraSup = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF
         Z_TraCen = Z_LamWW - 2 * RieZ_TraLam - OffZ_TraF


         // NUMERO TRAFILE --------------------------------------------
         FF_NumeroTrafile = 1   FF_Caso = STRCAT(FF_Caso, " - 11")

         // FT // Faccio riferimento all'altezza della lamiera per gestire i casi
         // FT if( Y_LamWW >= 129 )   { FF_NumeroTrafile = 2   FF_Caso = STRCAT(FF_Caso, "-11.1") }
         // FT if( Y_LamWW > 349 )    { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, "-11.2") }

         // Faccio riferimento all'altezza reale
         if( Y >= 169 )   { FF_NumeroTrafile = 2   FF_Caso = STRCAT(FF_Caso, " - 11.1") }
         if( Y > 365 )    { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, " - 11.2") }

         // da revisione 1
         if( REV >= 1 )
         {
            // LP 19/03/21 - mail di Zorzo 23/02/21 - cambio numero di piastre
            if( Y >= 138 & Y <= 732 )   { FF_NumeroTrafile = 2   FF_Caso = STRCAT(FF_Caso, " - 11.1 REV1") }
            if( Y >= 733 & Y <= 917 )   { FF_NumeroTrafile = 3   FF_Caso = STRCAT(FF_Caso, " - 11.2 REV1") }

            if( FF_NumeroTrafile > 2
              & FF_Elemento == "FASCIA FUSION" )
            {
               FF_NumeroTrafile = 2
               FF_Caso = STRCAT(FF_Caso, " - FUSION")
            }
         }

         // ECCEZIONI OFFSET ------------------------------------------
         // se ne ho uno sono sempre centrale
         if( FF_NumeroTrafile == 1 )   { OffY_TraB = Y / 2   FF_Caso = STRCAT(FF_Caso, " - 11.3") }

         // da revisione 1
         if( REV >= 1 )
         {
            // LP 19/03/21 - mail di Zorzo 23/02/21 - cambio la posizione dei magneti per fianco < 184
            if( YFF < 184 )
            {
               // se sul fondo in basso i magneti si posizionano a 4 mm dal filo sotto del lamierino
               if( FF_PosizioneABCI == "B" | FF_PosizioneABCI == "I" )   { OffY_TraB = RieY_LamWW + Y_ForoWW / 2 + 4   FF_Caso = STRCAT(FF_Caso, " - 11.4 REV1") }

               // se sulla parte superiore del fianco i magneti si posizionano a 5 mm dal filo sopra del lamierino
               if( FF_PosizioneABCI == "A" )   { OffY_TraA = RieY_LamWW + Y_ForoWW / 2 + 5   FF_Caso = STRCAT(FF_Caso, " - 11.5 REV1") }
            }
         }


         // Eccezioni per LVST
         if( FF_Tipologia == "BASE LAVASTOVIGLIE" )
         {
            FF_Caso = STRCAT(FF_Caso, " - 20")

            // caso del fianco basso o intero
            if( FF_PosizioneABCI == "B" | FF_PosizioneABCI == "I" )
            {
                FF_Caso = STRCAT(FF_Caso, " - 20.1")

                if( FF_NumeroTrafile == 2 & Y <= 273 )   { Z_TraSup = Z - RieZ_TraLam - RieZ_TraLvst   FF_Caso = STRCAT(FF_Caso, " - 20.1.1") }
            }

            // LP controllo per REV.2: il caso 40/40.1 era "fuori" dalla tipologia "BASE LAVASTOVIGLIE",
            // ma non ha senso in quanto il rientro è proprio calcolato per la lavastoviglie.
            // Strano che nessuno se ne sia mai accorto, cmq provo a spostarlo all'interno della condizio
            // per "BASE LAVASTOVIGLIE". Il caso dovrebbe essere quello del fianco che "cade" per metà (in basso)
            // sullo scanso per lavastoviglie
            // caso del fianco centrale
            if( FF_PosizioneABCI == "C" )
            {
               FF_Caso = STRCAT(FF_Caso, " - 40")

               // se sono sullo scanso devo spostare o accorciare la trafila
               if( FF_DistanzaFB <= 201 )  { Z_TraInf = Z - RieZ_TraLam - RieZ_TraLvst    FF_Caso = STRCAT(FF_Caso, " - 40.1") }
            }
         }

         //Simone 12/05/2022
         if( FF_Tipologia == "BASE AIR KITCHEN" )
         {
            Y_LamWW = Yr  - 2 * RieY_LamWW
            Z_LamWW = ZFF - 2 * RieZ_LamWW
            OffY_TraA   = 48
            OffY_TraC   = 366.5
         }

         // LP // LP controllo per REV.2: il caso 40/40.1 era "fuori" dalla tipologia "BASE LAVASTOVIGLIE",
         // LP // ma non ha senso in quanto il rientro è proprio calcolato per la lavastoviglie.
         // LP // Strano che nessuno se ne sia mai accorto, cmq provo a spostarlo all'interno della condizio
         // LP // per "BASE LAVASTOVIGLIE"
         // LP // caso del fianco centrale
         // LP if( FF_PosizioneABCI == "C" )
         // LP {
         // LP    FF_Caso = STRCAT(FF_Caso, " - 40")
         // LP
         // LP    // se sono sullo scanso devo spostare o accorciare la trafila
         // LP    if( FF_DistanzaFB <= 201 )  { Z_TraInf = Z - RieZ_TraLam - RieZ_TraLvst    FF_Caso = STRCAT(FF_Caso, " - 40.1") }
         // LP }
      }
      // ] -----------------------------------------------------

      // Luca 10/01/2022 posizione prigionieri
      // [ -----------------------------------------------------
      FF_PosPerni = "ORIZ"

      //1 BASI STANDARD
      // 1.1 fino a 324 in orizzontale
      // 1.2 da 324 in verticale
      prf_fia = VAR_VAL(FF_idx_ref,"Z")

      RieY_Perno1 = Y/2          RieZ_Perno1 = 130
      RieY_Perno2 = Y/2          RieZ_Perno2 = prf_fia - 118

      //4 BASE FRIGO
      if( FF_Tipologia == "BASE FRIGO")
      {
         RieZ_Perno1 = 110
         RieZ_Perno2 = prf_fia - 122

         if( VAR_VAL(FF_idx_ref, "ConBifacciale_1") == 1 )
         {
            RieZ_Perno1 = RieZ_Perno1 + 24
            RieZ_Perno2 = RieZ_Perno2 + 24
         }
      }

      if( FF_Tipologia == "BASE BIFACCIALE" )
      {
         RieZ_Perno1 = RieZ_Perno1 + 24
         RieZ_Perno2 = RieZ_Perno2 + 24
      }

      if( FF_Tipologia == "BASE H873" )
      {
         OffZ_Perno12 = 184
         RieZ_Perno1  = (prf_fia - OffZ_Perno12)/2
         RieZ_Perno2  = RieZ_Perno1 + OffZ_Perno12
      }

      if( Y > 324 )
      {
         FF_PosPerni = "VERT"

         RieZ_Perno1 = prf_fia/2
         RieZ_Perno2 = prf_fia/2

         if( FF_Elemento == "FASCIA FUSION"
           | FF_Tipologia == "BASE BIFACCIALE"
           | ( REV >= 7 & VAR_VAL( FF_idx_ref, "ConBifacciale_1") > 0))
         {
            RieZ_Perno1 = Z/2
            RieZ_Perno2 = Z/2
         }

         if( FF_Tipologia == "BASE FRIGO" )
         {
            prf_fia_lc = prf_fia - 25

            //se fianco lato cerniere
            if( VAR_VAL(FF_idx_ref, "Verso") == FF_Verso
              & FF_Verso != 0 )
            {
               RieZ_Perno1 = prf_fia_lc / 2
               RieZ_Perno2 = prf_fia_lc / 2
            }
            else
            {
               RieZ_Perno1 = prf_fia_lc/2 - 20
               RieZ_Perno2 = prf_fia_lc/2 - 20

               if( VAR_VAL(FF_idx_ref, "ConBifacciale_1") == 1 )
               {
                  RieZ_Perno1 = prf_fia_lc/2 + 4
                  RieZ_Perno2 = prf_fia_lc/2 + 4
               }
            }
         }

         RieY_Perno1 = Y/2 - 184/2
         RieY_Perno2 = Y/2 + 184/2

         //Simone 12/05/2022
         if( FF_Tipologia == "BASE AIR KITCHEN" )
         {
            RieY_Perno1 = 274.5
            RieY_Perno2 = 458.5
            RieZ_Perno1 = Z/2
            RieZ_Perno2 = Z/2
         }
      }

      //DA CONTROLLARE -- VEDI DWG
      //2 BASI STANDARD H.870
      // 2.1 fino a 134 in orizzontale
      // 2.2 da 134 in poi in verticale
      //if( VAR_VAL(FF_idx_ref,"Y") == 873 )
      //{
      //   RieZ_Perno1 = prf_fia/2 - 92
      //   RieZ_Perno2 = prf_fia/2 + 92
      //
      //   if( FF_Tipologia == "BASE BIFACCIALE" )
      //   {
      //      RieZ_Perno1 = RieZ_Perno1 + 24
      //      RieZ_Perno2 = RieZ_Perno2 + 24
      //   }
      //
      //   if( Y > 134 )
      //   {
      //      RieZ_Perno1 = prf_fia/2
      //      RieZ_Perno2 = prf_fia/2
      //
      //      if( FF_Tipologia == "BASE BIFACCIALE" )
      //      {
      //         RieZ_Perno1 = Z/2
      //         RieZ_Perno2 = Z/2
      //      }
      //
      //      RieY_Perno1 = Y/2 - 184/2
      //      RieY_Perno2 = Y/2 + 184/2
      //   }
      //}

      //3. BASI LAVASTOVIGLIE
      // 3.1 fasce > 184 o non filo basso --> come standard
      if( FF_Tipologia == "BASE LAVASTOVIGLIE")
      {
         //Simone 27/06/2022 - Sposto sotto
         ////Luca 17/02/2022
         //if( VAR_VAL(FF_idx_ref, "ConBifacciale_1") == 1 )
         //{
         //   RieZ_Perno1 = Z/2
         //   RieZ_Perno2 = Z/2
         //}

         if( FF_PosizioneABCI == "B"
           | FF_PosizioneABCI == "A" )
         {
            if( Y <= 184 & Y >= 138 )
            {
               passo = 92
               if( Y < 180 )  { passo = 49 }

               RieY_Perno1 = Y/2 - passo/2
               RieY_Perno2 = Y/2 + passo/2

               RieZ_Perno1 = prf_fia/2
               RieZ_Perno2 = prf_fia/2

               FF_PosPerni = "ORIZ"
            }
         }

         //Luca 17/02/2022
         if( VAR_VAL(FF_idx_ref, "ConBifacciale_1") == 1 )
         {
            RieZ_Perno1 = Z/2
            RieZ_Perno2 = Z/2
         }
      }

      // ] -----------------------------------------------------
   }

   PROCEDURA DimBasiColonne
   {
      Cuc_Alt_Zoc = SE_NUM(TipoScocca<2,$Cuc_Alt_Zoc,0)

      M4_GRUPPO__  = MSG(1000)
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*") ) { M4_GRUPPO__  = MSG(1001) }

      Spe_Fia_Sx = 0
      Spe_Fia_Dx = 0

      //if( ACTION()==0 & COMPONENDO()==1 )
      //{
      //   if( IS_VAR_FIXED(idx_att,"X")==0 & VAR_EXIST(-1,"Cuc_Def_BaStd_X")
      //     & VAR_EXIST(idx_att,"NoSettaDefX")==0 )
      //   {  X = $Cuc_Def_BaStd_X    }
      //   if( IS_VAR_FIXED(idx_att,"Y")==0 & VAR_EXIST(-1,"Cuc_Def_BaStd_Y")
      //     & VAR_EXIST(idx_att,"NoSettaDefY")==0 )
      //   {  Y = $Cuc_Def_BaStd_Y    }
      //
      //   if( IS_VAR_FIXED(idx_att,"Z")==0 & VAR_EXIST(-1,"Cuc_Def_BaStd_Z")
      //     & VAR_EXIST(idx_att,"NoSettaDefZ")==0
      //     & IS_MATCH(NOME(idx_att),"ScoccaT_BaseAng*")!=1 )
      //   {  Z = $Cuc_Def_BaStd_Z    }
      //}

      //devo salvarle comunque
      if(ACTION()==0 & VAR_EXIST(idx_att,"copied__")!=1)  { X_ori=X Y_ori=Y Z_ori=Z }

      if( IS_MATCH( NOME(ATTUALE()), "Scocca*Ang*") == 0) { Xt = X }
      if( ACTION() > 0)
      {
         if( VAR_VAL(idx_att,"VAR_Giorno")==0 )
         {
            COMPONENTI2("comp",idx_att,"Cuc_FiaSx")
            if ( comp>0 )   { Spe_Fia_Sx = VAR_VAL(comp[1],"X") - $Cuc_Spe_Fia }
            COMPONENTI2("comp",idx_att,"Cuc_FiaDx")
            if ( comp>0 )   { Spe_Fia_Dx = VAR_VAL(comp[1],"X") - $Cuc_Spe_Fia }
         }

         GOSUB Calc_Y_con_Cuc_Alt_Gola
      }

      Yt = Y + Cuc_Alt_Zoc
      Y_Scocca = Y - $Cuc_RidY_Sco
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")) { Y_Scocca = Y }

      Anta_Spe    = $Cuc_Spe_Ant
      Anta_Aria_Z = $Cuc_Aria_Ant_Z
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")) { Anta_Spe = $Cuc_Spe_Ant_Col }

      Bifa_Spe    = $Cuc_Spe_Bif

      if( Cucina_Versione > 2)
      {
         Anta_Spe = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc,"_Dim.z"))
         Anta_Aria_Z = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc,"_Anta_", Cucina_ModelloDsc, "_Off.z"))
         Bifa_Spe    = Anta_Spe + Anta_Aria_Z
      }

      if( NOME(ATTUALE()) == "ScoccaT_ColFalegnameria")   { Z = Zt - Anta_Spe - Anta_Aria_Z EXITSUB() }
      if( IS_MATCH( NOME(ATTUALE()), "Scocca*Ang*") == 0) { Zt = Z + Anta_Aria_Z + Anta_Spe           }
   }

   PROCEDURA Calc_Y_con_Cuc_Alt_Gola
   {
      if( IS_VAR_FIXED(idx_att,"Y")==1 | ACTION()<=0) { EXITSUB() }

      Y = Y_ori
      if( IS_MATCH(VAR_VAL_STR(idx_att,"StrPerGola"),"INA*") )  { Y = Y_ori +$Cuc_Alt_Gola }
   }

   //Luca 11/01/2019
   PROCEDURA Cuc_SistCostrCol
   {
      Cuc_Rie_Cop_ZR = 60
      Cuc_Rie_Cop_ZF = 0
      if( Cucina_Versione > 2 ) { Cuc_Rie_Cop_ZR = SE_NUM( Z < 381, 5, 60 ) }

      Cuc_Aria_Cop_Sch_Y = 0.5
      Cuc_Aria_Fnd_Sch_Y = 0.5

      Cuc_RieY_Bar_Sosp  = SE_NUM( Cucina_Versione > 2, 47, 30)

      // Se sospesa la schiena viene ridotta per inserire la barra schienale
      if( TipoScocca == 2
        | UN_PADRE("ScoccaT_ColLvst2Forno")) { Cuc_Aria_Cop_Sch_Y = SE_NUM( Cucina_Versione > 2, 121.5, 176.5) }

      //VARIABILI PER FRIGO
      Cuc_RieR_SchFr    = 9

      //indica il filo alto del fondo in ferro, in realtà il fondo è 47
      Cuc_Spe_FndFr     = 21

      Cuc_Z_PanFnd      = 140
      Cuc_Y_SchFr       = 250
      Cuc_RieR_PanFndFr = 7
      Cuc_RieF_PanFndFr = 20
      if( Cucina_Versione > 2
        & VAR_VAL( ATTUALE(), "VAR_PosFondoFr") > Cuc_Spe_FndFr + 1) { Cuc_RieF_PanFndFr = 0 }

      //lvst+forno
      Cuc_Spe_Fnd_Lvst  = 25

      //soffietto
      Cuc_MasSof_Mag    = 90
      Cuc_MasSof_Min    = 35

      // Sospese
      Barra_Colonna_Sospesa_Archetipo = SE_STR( VAR_VAL( idx_att, "Cucina_Versione") > 2, "Cuc_CatOriz", "Cuc_BarraColSosp")
   }
//}Inizio Procedure Dimensioni

//{ Inizio definizione vani Standard
   PROCEDURA DefVanoBasi
   {
      vano_0_0 = [$Cuc_Spe_Fia, Cuc_Alt_Zoc, Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z + $Cuc_Spe_Sch ]
      vano_l_0 = X - 2*$Cuc_Spe_Fia
      vano_p_0 = Z - $Cuc_Spe_Sch - Cuc_Rie_Sch_ZR - $Cuc_Aria_Sch_Z

      if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )
      {
         vano_0_0.x = $Cuc_Spe_Fia_Giorno
         vano_l_0 = X - 2*$Cuc_Spe_Fia_Giorno
      }

      if( VAR_VAL(idx_att,"Spe_Fia_Sx")>0 )  { vano_0_0.x = vano_0_0.x + Spe_Fia_Sx }
      //GOSUB CucP_DefVanoBasi

      vano_0_1 = [0,Cuc_Alt_Zoc,0]
      vano_l_1 = X
      vano_p_1 = Z
   }

   PROCEDURA DefVanoColonne
   {
      GOSUB DefVanoBasi
      if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1) { vano_p_0 = vano_p_0 + 2 }
   }
//} Fine definizione vani Standard

//{ Inizio definizione punti per stesure
//{ GOLA
//{ CORNICI
//{ ZOCCOLI
//{ TOP/MENSOLE
   PROCEDURA DefPuntiTop
   {
// definisce i punti per la stesura del top e della schiena
      punto_sx_top = [base_0.x,   alto_2.y, base_0.z]
      punto_dx_top = [base_0.x+X, alto_2.y, base_0.z]

      //dato che lo sbordo del top è dinamico in base ai frontali
      //qui uso l'effettiva profondità dei fianchi
      Z_sx_top = Z
      Z_dx_top = Z
      //+ $Cuc_Rie_Top_Basi

      punto_sx_top_fro = [base_0.x,   alto_2.y, base_0.z+Z_sx_top]
      punto_dx_top_fro = [base_0.x+X, alto_2.y, base_0.z+Z_dx_top]

      if( IS_MATCH(NOME(idx_att),"Scocca*Term*") )
      {
         if(Verso==-1)
         {
            punto_sx_top.x     = punto_sx_top.x     -($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
            punto_sx_top_fro.x = punto_sx_top_fro.x -($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
         }
         else
         {
            punto_dx_top.x     = punto_dx_top.x     +($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
            punto_dx_top_fro.x = punto_dx_top_fro.x +($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
         }
      }

      if( NOME(idx_att)=="ScoccaT_BaseAngoloIsola" )
      {
         Z_sx_top = Z
         Z_dx_top = Z

         punto_sx_top.z = punto_sx_top.z
         // + 20
         punto_dx_top.z = punto_dx_top.z
         // + 20

         if(Verso==-1)
         {
            Z_sx_top = X - 32
            Z_dx_top = Z - 52

            punto_sx_top.x     = punto_sx_top.x     //-($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
            punto_sx_top_fro.x = punto_sx_top_fro.x //-($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
         }
         else
         {
            Z_sx_top = Z - 52
            Z_dx_top = X - 32

            punto_dx_top.x     = punto_dx_top.x     //+($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
            punto_dx_top_fro.x = punto_dx_top_fro.x //+($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)
         }
      }

      //Luca 22/05/2020
      if( NOME(idx_att)=="ScoccaT_AngoloCieco" )
      {
         Z_sx_top = Z - 32
         Z_dx_top = X - 32

         punto_sx_top_fro.x = punto_sx_top_fro.x //-($Cuc_Spe_Ant +$Cuc_Aria_Ant_Z)

         punto_dx_top       = base_2
         punto_dx_top_fro.x = punto_dx_top_fro.x - Z_dx_top

         AngoloSx = ANG_TOT2(ATTUALE())
         AngoloDx = ANG_TOT2(ATTUALE()) - 90
      }

      //Luca 05/12/2019
      if( NOME(idx_att)=="ScoccaT_BaseTamponamento" )
      {
         Z_sx_top = Z
         Z_dx_top = Z

         if( IS_IDX(idx_sx) )
         {
            Z_sx_top = VAR_VAL(idx_sx,"Z")

            //Luca 28/07/2020
            if( NOME(idx_sx) == "ScoccaT_BaseAngPan" )
            {
               if( ABS( ANG_TOT(idx_sx) - ANG_TOT2(ATTUALE())) > 0.1 )
               {
                  Z_sx_top = VAR_VAL(idx_sx,"Z_Pannello") + VAR_VAL(idx_sx,"DistMuro") - 22
               }
            }
         }
         if( IS_IDX(idx_dx) )
         {
            Z_dx_top = VAR_VAL(idx_dx,"Z")

            //Luca 28/07/2020
            if( NOME(idx_dx) == "ScoccaT_BaseAngPan" )
            {
               if( ABS(ANG_TOT(idx_dx) - ANG_TOT2(ATTUALE())) > 0.1 )
               {
                  Z_dx_top = VAR_VAL(idx_dx,"Z_Pannello") + VAR_VAL(idx_dx,"DistMuro") - 22

               }
            }
         }

         if( Z_dx_top>Z_sx_top ) { Z_sx_top = Z_dx_top }
         if( Z_sx_top>Z_dx_top ) { Z_dx_top = Z_sx_top }

         punto_sx_top.z = base_1.z - Z_sx_top - 24
         punto_dx_top.z = base_1.z - Z_dx_top - 24

         punto_sx_top_fro = [base_0.x,   alto_2.y, punto_sx_top.z + Z_sx_top]
         punto_dx_top_fro = [base_0.x+X, alto_2.y, punto_dx_top.z + Z_dx_top]
      }

      ang_sx_top = ANG_TOT2(ATTUALE())
   }

   PROCEDURA DefPuntiTopAngPan_old
   {
// definisce i punti per la stesura del top e della schiena
      if( Verso==1 )
      {
         punto_sx_top = base_0
         punto_cnt_top= base_5
         punto_dx_top = base_4

         punto_sx_top_fro = base_1
         punto_dx_top_fro = base_3

         Z_sx_top = Z +$Cuc_Rie_Top_Basi
         Z_dx_top = Z_Pannello +$Cuc_Rie_Top_Basi

         ang_sx_top = ANG_TOT2(ATTUALE())
      }
      else
      {
         punto_sx_top = base_2
         punto_cnt_top= base_1
         punto_dx_top = base_6

         punto_sx_top_fro = base_3
         punto_dx_top_fro = base_5

         Z_sx_top = Z_Pannello +$Cuc_Rie_Top_Basi
         Z_dx_top = Z +$Cuc_Rie_Top_Basi

         ang_sx_top = ANG_TOT2(ATTUALE())
      }

      punto_sx_top.y  = alto_2.y
      punto_cnt_top.y = alto_2.y
      punto_dx_top.y  = alto_2.y

      punto_sx_top_fro.y = alto_2.y
      punto_dx_top_fro.y = alto_2.y
   }

   PROCEDURA DefPuntiTopAngPan
   {
      if( Verso==1 )
      {
         punto_sx_top = alto_0
         //punto_sx_top = alto_1
         punto_dx_top = alto_5

         punto_dx_top_fro.x = alto_5.x
         punto_dx_top_fro.y = alto_5.y
         punto_dx_top_fro.z = alto_5.z + Z

         punto_dx_top_fro.x = alto_5.x - Z_Pannello
         punto_dx_top_fro.y = alto_5.y
         punto_dx_top_fro.z = alto_5.z + Z

         punto_sx_top_fro   = alto_5
         punto_sx_top_fro.x = alto_5.x - Z_Pannello

         punto_sx_top_fro_sing.x =  alto_0.x
         punto_sx_top_fro_sing.y =  alto_0.y
         punto_sx_top_fro_sing.z =  alto_0.z + Z

         Z_sx_top = Z
         Z_dx_top = Z
      }
      else
      {
         //punto_sx_top = alto_1
         punto_sx_top = alto_1
         punto_dx_top = alto_6

         punto_sx_top_fro   = alto_1
         punto_sx_top_fro.z = alto_1.z + Z

         punto_sx_top_fro_sing.x =  alto_1.x + Z_Pannello
         punto_sx_top_fro_sing.y =  alto_1.y
         punto_sx_top_fro_sing.z =  alto_1.z + Z

         punto_dx_top_fro.x = alto_1.x + Z_Pannello
         punto_dx_top_fro.y = alto_1.y
         punto_dx_top_fro.z = alto_1.z

         punto_dx_top_fro_sing.x = alto_6.x
         punto_dx_top_fro_sing.y = alto_6.y
         punto_dx_top_fro_sing.z = alto_6.z + Z

         Z_sx_top = Z
         Z_dx_top = Z

         ang_sx_top = ANG_TOT2(ATTUALE())
      }
   }

   PROCEDURA DefPuntiTopAngL
   {
// definisce i punti per la stesura del top e della schiena
      punto_sx_top = base_0
      punto_cnt_top= base_5
      punto_dx_top = base_4

      punto_sx_top_fro = base_1
      punto_dx_top_fro = base_3

      Z_sx_top = ZFiaSx + $Cuc_Rie_Top_Basi
      Z_dx_top = ZFiaDx + $Cuc_Rie_Top_Basi

      punto_sx_top.y  = alto_2.y
      punto_cnt_top.y = alto_2.y
      punto_dx_top.y  = alto_2.y

      punto_sx_top_fro.y = alto_2.y
      punto_dx_top_fro.y = alto_2.y
   }

   PROCEDURA DefPuntiTopAngD
   {
// definisce i punti per la stesura del top e della schiena
      punto_sx_top = base_0
      punto_cnt_top= base_4
      punto_dx_top = base_3

      punto_sx_top_fro = base_1
      punto_dx_top_fro = base_2

      Z_sx_top = ZFiaSx +$Cuc_Rie_Top_Basi
      Z_dx_top = ZFiaDx +$Cuc_Rie_Top_Basi

      punto_sx_top.y  = alto_2.y
      punto_cnt_top.y = alto_2.y
      punto_dx_top.y  = alto_2.y

      punto_sx_top_fro.y = alto_2.y
      punto_dx_top_fro.y = alto_2.y
   }

   PROCEDURA DefPuntiTopAngCurv
   {
// definisce i punti per la stesura del top e della schiena
      punto_sx_top = base_0
      punto_cnt_top = base_4
      punto_dx_top = base_3

      punto_sx_top_fro = base_1
      punto_dx_top_fro = base_2

      Z_sx_top = ZFiaSx +$Cuc_Rie_Top_Basi
      Z_dx_top = ZFiaDx +$Cuc_Rie_Top_Basi

      punto_sx_top.y  = alto_2.y
      punto_cnt_top.y = alto_2.y
      punto_dx_top.y  = alto_2.y

      punto_sx_top_fro.y = alto_2.y
      punto_dx_top_fro.y = alto_2.y
   }
//} TOP/MENSOLE

//} ZOCCOLI
   PROCEDURA DefPuntiZocc
   {
      punto_zoc_sx_rtr = base_0
      punto_zoc_sx     = [base_1.x, base_1.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx     = [base_2.x, base_2.y, base_2.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx_rtr = base_3
   }

   PROCEDURA DefPuntiZoccAngPan
   {
      if ( Verso==-1 )
      {
         punto_zoc_sx_rtr = base_2
         punto_zoc_sx     = [base_3.x-$Cuc_Rie_Zoc_F,base_0.y,base_3.z]
         punto_zoc_cnt    = [base_4.x-$Cuc_Rie_Zoc_F,base_0.y,base_4.z-$Cuc_Rie_Zoc_F]
         punto_zoc_cnt_rtr= base_1
         punto_zoc_dx     = [base_5.x,base_0.y,base_5.z-$Cuc_Rie_Zoc_F]
         punto_zoc_dx_rtr = base_6
      }
      else
      {
         punto_zoc_sx_rtr = base_0
         punto_zoc_sx     = [base_1.x,base_0.y,base_1.z-$Cuc_Rie_Zoc_F]
         punto_zoc_cnt    = [base_2.x+$Cuc_Rie_Zoc_F,base_0.y,base_2.z-$Cuc_Rie_Zoc_F]
         punto_zoc_cnt_rtr= base_5
         punto_zoc_dx     = [base_3.x+$Cuc_Rie_Zoc_F,base_3.y,base_3.z]
         punto_zoc_dx_rtr = base_4
      }
   }

   PROCEDURA DefPuntiZoccAngL
   {
      punto_zoc_sx_rtr = base_0
      punto_zoc_sx     = [base_1.x, base_1.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_cnt    = [base_2.x+$Cuc_Rie_Zoc_F, base_2.y, base_2.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx     = [base_3.x+$Cuc_Rie_Zoc_F, base_3.y, base_3.z]
      punto_zoc_dx_rtr = base_4
   }

   PROCEDURA DefPuntiZoccAngD
   {
      punto_zoc_sx_rtr = base_0
      punto_zoc_sx     = [base_1.x, base_1.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_cnt    = [base_2.x+$Cuc_Rie_Zoc_F, base_2.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx     = [base_2.x+$Cuc_Rie_Zoc_F, base_2.y, base_2.z]
      punto_zoc_dx_rtr = base_3
   }
   PROCEDURA DefPuntiZoccAngCurv
   {
      punto_zoc_sx_rtr = base_0
      punto_zoc_sx     = [base_1.x, base_1.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx     = [base_2.x+$Cuc_Rie_Zoc_F, base_2.y, base_2.z]
      punto_zoc_dx_rtr = base_3
      punto_zoc_cnt_rtr= base_4
   }

   PROCEDURA DefPuntiZoccTerm
   {
      punto_zoc_sx_rtr = base_0
      punto_zoc_sx     = [base_1.x, base_1.y, base_1.z-$Cuc_Rie_Zoc_F]
      punto_zoc_sx2    = [base_0.x +$Cuc_Rie_Zoc_L, base_1.y, base_0.z+Zminima-$Cuc_Rie_Zoc_F]
      punto_zoc_dx     = [base_2.x, base_2.y, base_2.z-$Cuc_Rie_Zoc_F]
      punto_zoc_dx2    = [base_3.x -$Cuc_Rie_Zoc_L, base_1.y, base_0.z+Zminima-$Cuc_Rie_Zoc_F]
      punto_zoc_dx_rtr = base_3
      if( Verso==-1 )
      {
         punto_zoc_sx_rtr.x= base_0.x +$Cuc_Rie_Zoc_L
         punto_zoc_sx.x    = base_2.x -Xminima
      }
      if( Verso==1 )
      {
         punto_zoc_dx_rtr.x= base_3.x -$Cuc_Rie_Zoc_L
         punto_zoc_dx.x    = base_1.x +Xminima
      }
   }
//} CORNICI
   PROCEDURA DefPuntiCornice
   {
      punto_cor_sx     = alto_1
      punto_cor_dx     = alto_2
      punto_cor_sx_rtr = alto_0
      punto_cor_dx_rtr = alto_3

      punto_basso_cor_sx     = base_1
      punto_basso_cor_dx     = base_2
      punto_basso_cor_sx_rtr = base_0
      punto_basso_cor_dx_rtr = base_3
      if( VAR_EXIST(idx_att,"NoCorniceSotto") )
         { DEL_VAR(idx_att,"punto_basso_cor*") }
   }

   PROCEDURA DefPuntiCorAngPan
   {
      if ( Verso==-1 )
      {
         punto_cor_sx_rtr = alto_2
         punto_cor_sx     = alto_3
         punto_cor_cnt    = alto_4
         punto_cor_cnt_rtr= alto_1
         punto_cor_dx     = alto_5
         punto_cor_dx_rtr = alto_6

         punto_basso_cor_sx_rtr = base_2
         punto_basso_cor_sx     = base_3
         punto_basso_cor_cnt    = base_4
         punto_basso_cor_cnt_rtr= base_1
         punto_basso_cor_dx     = base_5
         punto_basso_cor_dx_rtr = base_6
      }
      else
      {
         punto_cor_sx_rtr = alto_0
         punto_cor_sx     = alto_1
         punto_cor_cnt    = alto_2
         punto_cor_cnt_rtr= alto_5
         punto_cor_dx     = alto_3
         punto_cor_dx_rtr = alto_4

         punto_basso_cor_sx_rtr = base_0
         punto_basso_cor_sx     = base_1
         punto_basso_cor_cnt    = base_2
         punto_basso_cor_cnt_rtr= base_5
         punto_basso_cor_dx     = base_3
         punto_basso_cor_dx_rtr = base_4
      }

      if( VAR_EXIST(idx_att,"NoCorniceSotto") )
         { DEL_VAR(idx_att,"punto_basso_cor*") }
   }

   PROCEDURA DefPuntiCorAngL
   {
      punto_cor_sx_rtr = alto_0
      punto_cor_sx     = alto_1
      punto_cor_cnt    = alto_2
      punto_cor_dx     = alto_3
      punto_cor_dx_rtr = alto_4

      punto_basso_cor_sx_rtr = base_0
      punto_basso_cor_sx     = base_1
      punto_basso_cor_cnt    = base_2
      punto_basso_cor_dx     = base_3
      punto_basso_cor_dx_rtr = base_4

      if( VAR_EXIST(idx_att,"NoCorniceSotto") )
         { DEL_VAR(idx_att,"punto_basso_cor*") }
   }

   PROCEDURA DefPuntiCorAngD
   {
      punto_cor_sx_rtr = alto_0
      punto_cor_sx     = alto_1
      punto_cor_dx     = alto_2
      punto_cor_dx_rtr = alto_3
      punto_cor_cnt_rtr= alto_4

      punto_basso_cor_sx_rtr = base_0
      punto_basso_cor_sx     = base_1
      punto_basso_cor_dx     = base_2
      punto_basso_cor_dx_rtr = base_3
      punto_basso_cor_cnt_rtr= base_4

      if( VAR_EXIST(idx_att,"NoCorniceSotto") )
         { DEL_VAR(idx_att,"punto_basso_cor*") }
   }

   PROCEDURA DefPuntiCorniceTerm
   {
      punto_cor_sx_rtr = alto_0
      punto_cor_sx     = alto_1
      punto_cor_sx2    = [alto_0.x, alto_0.y, alto_0.z+Zminima]
      punto_cor_dx     = alto_2
      punto_cor_dx2    = [alto_3.x, alto_0.y, alto_0.z+Zminima]
      punto_cor_dx_rtr = alto_3

      punto_basso_cor_sx     = base_1
      punto_basso_cor_sx2    = [base_0.x, base_0.y, base_0.z+Zminima]
      punto_basso_cor_dx     = base_2
      punto_basso_cor_dx2    = [base_3.x, base_0.y, base_0.z+Zminima]
      punto_basso_cor_sx_rtr = base_0
      punto_basso_cor_dx_rtr = base_3

      if( VAR_EXIST(idx_att,"NoCorniceSotto") )
         { DEL_VAR(idx_att,"punto_basso_cor*") }
   }

//} GOLA
   PROCEDURA DefPuntiGola
   {
      punto_gola_sx = alto_1
      punto_gola_dx = alto_2

      punto_gola_sx_rtr = alto_0
      punto_gola_dx_rtr = alto_3

      //i punti devono essere presenti al caricamento dell'ordine x le strutture che rimangono stese
      if( VAR_EXIST(idx_att,"StrPerGola") )
      {
         //cerco tutti i frontali della struttura battezzati e non con ConGolaSopra
         //WITH_VAR_LOCAL(idx_att,"Fro","TipoFrontale",3,0,"")
         WITH_VAR_LOCAL(idx_att,"Fro","TipoFrontale",$alfa_con_figli,0,"")
         if( Fro>0 & ACTION()>0 )
         {
            SORT_POINT(base_1,"Fro","base_0")
            i=1      num_liv = 1
            while( i<=Fro )
            {
               SET_#(Fro[i])
               defpuntigola = 0
               //se presente "ConGolaSopra"
               if( VAR_VAL(Fro[i],"ConGolaSopra")==1 )   { defpuntigola = 1  i = i + 1 }
               else
               {
                  //se nn presente "ConGolaSopra": gola dopo il primo cestone o
                  //la prima coppia di cassetti
                  if( i==1
                    & IS_MATCH(StrPerGola,"*C")
                    & STRCMP(NOME(Fro[i]),"Cuc_Cestone")==0 )   { defpuntigola = 1  i = i + 1 }

                  if ( i==2
                     & IS_MATCH(StrPerGola,"*C")
                     & STRCMP(NOME(Fro[i]),"Cuc_Cassetto")==0 ) { defpuntigola = 1  }
               }
               if( defpuntigola==1 & i<=Fro )
               {
                  YGolaCnt = #alto_0.y+2*$Cuc_Aria_Ant_Y +$Cuc_Sb_GolaCntSF -VAR_VAL(idx_att,"Cuc_Alt_Zoc")
                  VAR_CREATE_NUM(ATTUALE(),STRCAT("YGolaCnt",STR(num_liv)),YGolaCnt,0,"")
                  //fc 140402 punto gole centrali in corrispondenza a posizione della stessa come graficata sui fianchi
                  VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_gola_sx_",STR(num_liv)),alto_1.x,#base_0.y-$Cuc_Aria_Ant_Y+YGolaCnt,alto_1.z,0,"" )
                  VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_gola_dx_",STR(num_liv)),alto_2.x,#base_0.y-$Cuc_Aria_Ant_Y+YGolaCnt,alto_2.z,0,"" )

                  num_liv = num_liv + 1
               }
               i = i+1
            }
         }
         else
         {
            YGolaCnt = base_0.y + Y/2
            punto_gola_sx_1= [alto_1.x,base_0.y+YGolaCnt+VAR_VAL(idx_att,"Cuc_Alt_Zoc"),alto_1.z]
            punto_gola_dx_1= [alto_2.x,base_0.y+YGolaCnt+VAR_VAL(idx_att,"Cuc_Alt_Zoc"),alto_2.z]
         }
      }
   }

   PROCEDURA DefPuntiGolaAngPan
   {
      punto_gola_sx  = alto_3
      punto_gola_cnt = alto_4
      punto_gola_dx  = alto_5
      punto_gola_sx_rtr = alto_2
      punto_gola_dx_rtr = alto_6

      if(Verso==1)
      {
         punto_gola_sx  = alto_1
         punto_gola_cnt = alto_2
         punto_gola_dx  = alto_3

         punto_gola_sx_rtr = alto_0
         punto_gola_dx_rtr = alto_4
      }
   }

   PROCEDURA DefPuntiGolaAngL
   {
      punto_gola_sx  = alto_1
      punto_gola_cnt = alto_2
      punto_gola_dx  = alto_3

      punto_gola_sx_rtr = alto_0
      punto_gola_dx_rtr = alto_4
   }

   PROCEDURA DefPuntiGolaAngD
   {
      punto_gola_sx  = alto_1
      punto_gola_cnt = alto_2
      punto_gola_dx  = alto_3

      punto_gola_sx_rtr = alto_0
      punto_gola_dx_rtr = alto_4
   }

   PROCEDURA DefPuntiGolaAngCurv
   {
      punto_gola_sx  = alto_1
      punto_gola_dx  = alto_2
   }

   PROCEDURA DefPuntiStendiBarra
   {
      DEL_VAR(ATTUALE(),"punto_barra*")
      wk_alt = Cuc_Alt_Zoc

      //Punto inferiore
      punto_barra_sx_1 = base_0      punto_barra_sx_1.y = wk_alt
      punto_barra_dx_1 = base_3      punto_barra_dx_1.y = wk_alt

      if( NOME(ATTUALE())=="ScoccaT_BaseAngPan" )
      {
         punto_barra_sx_1 = base_0      punto_barra_sx_1.y = wk_alt
         punto_barra_dx_1 = base_6      punto_barra_dx_1.y = wk_alt

         //if( Verso > 0  )
         //{
         //   punto_barra_sx_1 = = base_0      punto_barra_sx_1.y = wk_alt
         //   punto_barra_dx_1 = = base_6      punto_barra_dx_1.y = wk_alt
         //}
      }

      //Punti intermedi
      wk_alt = wk_alt + 184
      ind = 2
      while( wk_alt < Yt )
      {
         VAR_CREATE_XYZ( ATTUALE(), STRCAT( "punto_barra_sx_",STR(ind)), punto_barra_sx_1.x, wk_alt, punto_barra_sx_1.z, 0, "")
         VAR_CREATE_XYZ( ATTUALE(), STRCAT( "punto_barra_dx_",STR(ind)), punto_barra_dx_1.x, wk_alt, punto_barra_dx_1.z, 0, "")

         wk_alt = wk_alt + 184
         ind = ind + 1
      }

      //Punto superiore
      VAR_CREATE_XYZ( ATTUALE(), STRCAT( "punto_barra_sx_", STR(ind)), punto_barra_sx_1.x, Yt - $Cuc_RidY_Sco, punto_barra_sx_1.z, 0, "")
      VAR_CREATE_XYZ( ATTUALE(), STRCAT( "punto_barra_dx_", STR(ind)), punto_barra_dx_1.x, Yt - $Cuc_RidY_Sco, punto_barra_dx_1.z, 0, "")
   }

   PROCEDURA DefPuntiStendiBifacciale
   {
      DEL_VAR( ATTUALE(), "punto_bifacc*")
      wk_alt = Cuc_Alt_Zoc

      punto_bifacc_sx_1 = base_0        punto_bifacc_sx_1.y = wk_alt
      punto_bifacc_dx_1 = base_3        punto_bifacc_dx_1.y = wk_alt

      if( NOME(ATTUALE())=="ScoccaT_ColAngPan"
        | NOME(ATTUALE())=="ScoccaT_BaseAngPan")
      {
         punto_bifacc_sx_1 = base_1     punto_bifacc_sx_1.y = wk_alt
         punto_bifacc_dx_1 = base_6     punto_bifacc_dx_1.y = wk_alt
         if( Verso > 0)
         {
            punto_bifacc_sx_1 = base_0     punto_bifacc_sx_1.y = wk_alt
            punto_bifacc_dx_1 = base_5     punto_bifacc_dx_1.y = wk_alt
         }
      }

      if( NOME(ATTUALE()) == "ScoccaT_Base_AirKitchen")
      {
         punto_bifacc_sx_1.x = punto_bifacc_sx_1.x + $Cuc_X_FiaFin_Vet
         punto_bifacc_dx_1.x = punto_bifacc_dx_1.x - $Cuc_X_FiaFin_Vet
         punto_bifacc_sx_1.z = punto_bifacc_sx_1.z + $Cuc_Spe_Bif
         punto_bifacc_dx_1.z = punto_bifacc_dx_1.z + $Cuc_Spe_Bif
      }

      wk_alt = wk_alt + 184
      ind = 2
      while( wk_alt < Yt - 10)
      {
         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_bifacc_sx_",STR(ind)), punto_bifacc_sx_1.x, wk_alt , punto_bifacc_sx_1.z,0,"" )
         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_bifacc_dx_",STR(ind)), punto_bifacc_dx_1.x, wk_alt , punto_bifacc_dx_1.z,0,"" )

         wk_alt = wk_alt + 184
         ind = ind + 1
      }

      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_bifacc_sx_",STR(ind)), punto_bifacc_sx_1.x, Yt , punto_bifacc_sx_1.z,0,"" )
      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_bifacc_dx_",STR(ind)), punto_bifacc_dx_1.x, Yt , punto_bifacc_dx_1.z,0,"" )
   }

   PROCEDURA DefPuntiStendiFFinitura
   {
      DEL_VAR(ATTUALE(),"punto_ff*")
      wk_alt = Cuc_Alt_Zoc

      punto_ff_sxr_1 = base_0      punto_ff_sxr_1.y = wk_alt
      punto_ff_sxf_1 = base_1      punto_ff_sxf_1.y = wk_alt

      punto_ff_dxr_1 = base_3      punto_ff_dxr_1.y = wk_alt
      punto_ff_dxf_1 = base_2      punto_ff_dxf_1.y = wk_alt

      //Luca 29/11/2019
      if( NOME(ATTUALE())=="ScoccaT_BaseAngPan"
        | NOME(ATTUALE())=="ScoccaT_ColAngPan"  )
      {
         punto_ff_dxr_1 = base_6      punto_ff_dxr_1.y = wk_alt
         punto_ff_dxf_1 = base_5      punto_ff_dxf_1.y = wk_alt

         punto_ff_dxf_1.z = base_5.z
         punto_ff_sxf_1.z = base_5.z
         if( Verso>0 )
         {
            punto_ff_dxf_1.z = base_1.z
            punto_ff_sxf_1.z = base_1.z
         }

         if( NOME(ATTUALE())=="ScoccaT_BaseAngPan" )
         {
            punto_ff_dxf_1.z = punto_ff_dxf_1.z - 2
            punto_ff_sxf_1.z = punto_ff_sxf_1.z - 2
         }
      }

      //if( VAR_VAL(ATTUALE(),"ConBifacciale")==1 )
      if( VAR_VAL(ATTUALE(),"ConBifacciale_1") == 1 )
      {
         punto_ff_sxr_1.z = -1 * VAR_VAL( idx_att, "Bifa_Spe")
         punto_ff_dxr_1.z = -1 * VAR_VAL( idx_att, "Bifa_Spe")

         //Luca 07/09/2020 mantis 23282: Colonne cucina: dimensione ff con bifacciale
         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*") )
         {
            punto_ff_sxr_1.z = punto_ff_sxr_1.z - 2
            punto_ff_dxr_1.z = punto_ff_dxr_1.z - 2
         }
      }

      if( NOME(ATTUALE())=="ScoccaT_BaseAngoloIsola" )
      {
         punto_ff_sxr_1 = base_0
         punto_ff_sxf_1 = base_3
         punto_ff_sxr_1.x = -1 * $Cuc_Spe_Bif

         punto_ff_sxr_1.y = wk_alt
         punto_ff_sxf_1.y = wk_alt

         if( Verso>0 )
         {
            punto_ff_dxr_1 = base_0
            punto_ff_dxf_1 = base_3

            punto_ff_dxf_1.x = base_3.x + $Cuc_Spe_Bif

            punto_ff_dxr_1.y = wk_alt
            punto_ff_dxf_1.y = wk_alt
         }
      }

      //Luca 19/10/2020
      if( NOME(ATTUALE()) == "ScoccaS_PensileAngolo" )
      {
         punto_ff_sxr_1 = base_0      punto_ff_sxr_1.y = wk_alt
         punto_ff_sxf_1 = base_1      punto_ff_sxf_1.y = wk_alt

         punto_ff_dxr_1 = base_4      punto_ff_dxr_1.y = wk_alt
         punto_ff_dxf_1 = base_3      punto_ff_dxf_1.y = wk_alt
      }

      if( NOME(ATTUALE()) == "ScoccaT_Base_AirKitchen" )
      {
         punto_ff_sxr_1 = base_0      punto_ff_sxr_1.x = punto_ff_sxr_1.x + $Cuc_X_FiaFin_Vet      punto_ff_sxr_1.y = wk_alt
         punto_ff_sxf_1 = base_1      punto_ff_sxf_1.x = punto_ff_sxf_1.x + $Cuc_X_FiaFin_Vet      punto_ff_sxf_1.y = wk_alt

         punto_ff_dxr_1 = base_3      punto_ff_dxr_1.x = punto_ff_dxr_1.x - $Cuc_X_FiaFin_Vet      punto_ff_dxr_1.y = wk_alt
         punto_ff_dxf_1 = base_2      punto_ff_dxf_1.x = punto_ff_dxf_1.x - $Cuc_X_FiaFin_Vet      punto_ff_dxf_1.y = wk_alt

         if( VAR_VAL(ATTUALE(),"ConBifacciale_1") == 0 )
         {
            punto_ff_sxr_1.z = punto_ff_sxr_1.z + $Cuc_Spe_Bif
            punto_ff_dxr_1.z = punto_ff_dxr_1.z + $Cuc_Spe_Bif
         }
      }

      //step = 184
      step = 92

      //Luca 03/04/2019
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*") )  { step = 184 }

      wk_alt = wk_alt + step
      ind = 2
      //while( wk_alt<= Yt
      while( wk_alt< Yt - 10 )
      {
         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_sxr_",STR(ind)), punto_ff_sxr_1.x, wk_alt , punto_ff_sxr_1.z,0,"" )
         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_sxf_",STR(ind)), punto_ff_sxf_1.x, wk_alt , punto_ff_sxf_1.z,0,"" )

         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_dxr_",STR(ind)), punto_ff_dxr_1.x, wk_alt , punto_ff_dxr_1.z,0,"" )
         VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_dxf_",STR(ind)), punto_ff_dxf_1.x, wk_alt , punto_ff_dxf_1.z,0,"" )

         wk_alt = wk_alt + step
         ind = ind + 1
      }

      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_sxr_",STR(ind)), punto_ff_sxr_1.x, Yt , punto_ff_sxr_1.z,0,"" )
      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_sxf_",STR(ind)), punto_ff_sxf_1.x, Yt , punto_ff_sxf_1.z,0,"" )

      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_dxr_",STR(ind)), punto_ff_dxr_1.x, Yt , punto_ff_dxr_1.z,0,"" )
      VAR_CREATE_XYZ(ATTUALE(),STRCAT("punto_ff_dxf_",STR(ind)), punto_ff_dxf_1.x, Yt , punto_ff_dxf_1.z,0,"" )

      if( NOME(ATTUALE())=="ScoccaT_BaseAngoloIsola" )
      {
         if( Verso<0 ) { DEL_VAR(ATTUALE(),"punto_ff_dx*") }
         else          { DEL_VAR(ATTUALE(),"punto_ff_sx*") }
      }

      //Luca 29/11/2019
      if( NOME(ATTUALE())=="ScoccaT_BaseAngPan"
        | NOME(ATTUALE())=="ScoccaT_ColAngPan"  )
      {
         if( Verso<0 ) { DEL_VAR(ATTUALE(),"punto_ff_sx*") }
         else          { DEL_VAR(ATTUALE(),"punto_ff_dx*") }
      }
   }
//} Fine definizione punti per stesure

//{ definizione per base angolo
   PROCEDURA AssegAngoloPannello
   {
      Spe_Fia_Sx = 0
      Spe_Fia_Dx = 0

      GOSUB DimAngPan
      if( NOME(ATTUALE()) == "ScoccaT_ColAngPan")
      {
         // Qui sono riportate le dimensioni ideali, gestionalmente viene sempre scaricato un massello da 30mm;
         // gli altri spessori arrivavano sempre in ritardo, il 30mm viene prodotto in casa
         Z_DistAng = SE_NUM( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2, 29, 31)
         Z_Mont = Z_DistAng
      }

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

      //rendo modificabile il tipo di fuori squadra nella personalizzazione
      if( ACTION()==0 & IS_VAR_FIXED(ATTUALE(),"FuoriSquadraBA")==0 )   {  FuoriSquadraBA = $Cuc_FuoriSquadraBAP  }

      //M4_MIS = "Filler;X*;Y*;Zt;Z_Fianco;Z_Pannello;Modifica_Dimensioni;FuoriSquadraBA"
      ////valori di default
      //HIDE_ON_EDIT(idx_att,"VAR_CatR_OV;VAR_CatF_OV;VAR_Proiezione;*_Mont",$ATTIVA_DLL)
      //HIDE_ON_EDIT(idx_att,"X*;Z*;DistMuro;Verso;ang*",$ATTIVA_DLL)
      //HIDE_ON_EDIT(idx_att,"Modifica_Dimensioni;NoVediImpronta",1-$ATTIVA_DLL)

      //gestione esclusione montante
      if( VAR_VAL(idx_att,"NoMont")==1 )
      {
         //non devo resettare misure montante altrimenti non ho + ingombro anta corretto
         Z_Mont = $Cuc_Spe_Fia
         if( VAR_VAL(idx_att,"PannelloComeAnta")!=0
           & VAR_VAL(idx_att,"SpePannAcc")>0 )  { Z_Mont = SpePannAcc }

         DEL_VAR_MODIFICATE(ATTUALE(),"Zt")
         Zt = Z_Fianco + Z_Mont
      }

      if( DistMuro==0 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"DistMuro")
         DistMuro = 0.01
         //altrimenti non viene salvata nel composto e sovrscritta poi con le regole in PROCEDURA DimAngPan
         //if( $ATTIVA_DLL==0 ) {  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," DistMuro=0.01"))    }
      }

      if ( ACTION() > 0)
      {
         if(Verso==1)
         {
            COMPONENTI2("comp",idx_att,"Cuc_Fianco")
            if ( comp>0 )   { Spe_Fia_Sx = VAR_VAL(comp[1],"X") - $Cuc_Spe_Fia }
         }
         if(Verso==-1)
         {
            COMPONENTI2("comp",idx_att,"Cuc_Fianco")
            if ( comp>0 )   { Spe_Fia_Dx = VAR_VAL(comp[1],"X") - $Cuc_Spe_Fia }
         }

         //gestione gola che aumenta la cassa
         GOSUB Calc_Y_con_Cuc_Alt_Gola
      }

      if( IS_VAR_FIXED(ATTUALE(),"DistMuro")==0 ) { DistMuro = Xt - X }

      if( IS_VAR_FIXED(ATTUALE(),"X") == 1)
      {
         //Dimensione totale dal muro
         Xt = X + DistMuro + Con_DistMan*(X_DistMan+3)
         if( IS_VAR_FIXED(ATTUALE(),"Xt")==1 )
         {
            //DEL_VAR_MODIFICATE(ATTUALE(),"Xt")
            DistMuro = Xt - X + Con_DistMan*(X_DistMan+3)
         }

         //Dimensione anta
         X_Anta = X - X_Pannello

         wk_xanta_min_prec = VAR_VAL( ATTUALE(), "wk_xanta_min")
         wk_xanta_max_prec = VAR_VAL( ATTUALE(), "wk_xanta_max")

         wk_xanta_min = X - 736
         wk_xanta_max = X - 352

         wk_xanta_min_lim = 368
        #ifdef TEC;AZI
         wk_xanta_min_lim = 300
        #endif
         wk_xanta_max_lim = 600

         if( wk_xanta_min < wk_xanta_min_lim ) { wk_xanta_min = wk_xanta_min_lim }
         if( wk_xanta_max > wk_xanta_max_lim ) { wk_xanta_max = wk_xanta_max_lim }
         if( wk_xanta_max < wk_xanta_min )     { wk_xanta_max = wk_xanta_min }
         if( wk_xanta_min > wk_xanta_max )     { wk_xanta_min = wk_xanta_max }

         wk_check = 0
         if( X_Anta < wk_xanta_min ) { X_Anta = wk_xanta_min }
         if( X_Anta > wk_xanta_max ) { X_Anta = wk_xanta_max }

         if( wk_check > 0 )
         {
            X_Pannello = X - X_Anta
            if( IS_VAR_FIXED( ATTUALE(), "X_Anta")) {  DEL_VAR_MODIFICATE( ATTUALE(), "X_Anta") }
         }

         if( wk_xanta_min_prec != wk_xanta_min
           | wk_xanta_max_prec != wk_xanta_max )
         {
            VAR_SET_MENU( ATTUALE(), "X_Anta", STRCAT("( ",STR(wk_xanta_min) ,"-", STR(wk_xanta_max)," )"))
         }
      }

      //if( IS_VAR_FIXED(ATTUALE(),"DistMuro")==1 )
      //{
      //   if( IS_VAR_FIXED(ATTUALE(),"Xt")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"Xt") }
      //   Xt = X + DistMuro
      //}
      X_Ingombro = Xt
      Zr = Z + $Cuc_Spe_Ant + $Cuc_Aria_Ant_Z

      if( NOME(ATTUALE())=="ScoccaT_ColAngPan" )
      {
         Zr = Z + $Cuc_Spe_Ant_Col + $Cuc_Aria_Ant_Z
      }

      //Xt = X_Ingombro
      //if( IS_VAR_FIXED(idx_att,"Xt")==0 )          { Xt = X_Ingombro   }


      //if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
      //{
      //   DistMuro = Xt - X
      //   //if( IS_VAR_FIXED(idx_att,"DistMuro")==0 ) {  DistMuro = Xt - X  }
      //   //else                                      {  Xt = X + Spe_Fia_Sx + Spe_Fia_Dx + DistMuro   }
      //}

      //if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
      //{
      //   if( IS_VAR_FIXED(idx_att,"DistMuro")==0 ) {  DistMuro = Xt -X  }
      //   else
      //   {
      //      //DEL_VAR_MODIFICATE(ATTUALE(),"X")
      //      //X = Xt - Spe_Fia_Sx - Spe_Fia_Dx - DistMuro
      //      Xt = X + DistMuro
      //   }
      //}

      //Z  = Z_Fianco
      Z_Fianco = Z
      Zt = Z + Z_Mont

      //Luca 03/12/2019
      if( NOME(ATTUALE())=="ScoccaT_ColAngPan" )
      {
         Zt = Z_Fianco + Z_Mont + OffsetZ_PanFix
      }

      Yt = Y

      //Y_Scocca = Y
      Yt = Y + Cuc_Alt_Zoc
      Y_Scocca = Y - $Cuc_RidY_Sco

      //a seconda delle variabili forzate, calcolo le altre...
      if ( ACTION()>0 & $ATTIVA_DLL )
      {
         //if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
         //{
         //   if( IS_VAR_FIXED(idx_att,"Z_Mont")==0 )      { Z_Mont = Zt - Z_Fianco  }
         //   else
         //   {
         //      if( IS_VAR_FIXED(idx_att,"Z_Fianco")==0 ) { Z_Fianco = Zt - Z_Mont  }
         //      else
         //      {  DEL_VAR_MODIFICATE(idx_att,"Zt" )        Zt = Z_Fianco + Z_Mont  }
         //   }
         //
         //   if( IS_VAR_FIXED(idx_att,"X_Mont")==0 )
         //   {
         //      X_Mont = DISTANZA(base_4,base_5)-X_Anta
         //      if(Verso==1)
         //      {  X_Mont = DISTANZA(base_1,base_2)-X_Anta      }
         //   }
         //   else
         //   {
         //      DEL_VAR_MODIFICATE(idx_att,"X_Anta")
         //      X_Anta = DISTANZA(base_4,base_5)-X_Mont
         //      if(Verso==1)
         //      {  X_Anta = DISTANZA(base_1,base_2)-X_Mont   }
         //   }
         //}

         //fuori squadro che conserva le schiene
         if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"X_Mont")
            DEL_VAR_MODIFICATE(ATTUALE(),"Z_Mont" )

            //Z_Mont = Zt - Z_Fianco
            X_Mont = DISTANZA(base_4,base_5)-X_Anta
            if(Verso==1)  {  X_Mont = DISTANZA(base_1,base_2)-X_Anta      }

            ////a seconda delle variabili forzate, calcolo le altre...
            //if( IS_VAR_FIXED(idx_att,"Xt")==0 )      { Xt = X +Spe_Fia_Sx + Spe_Fia_Dx +DistMuro  }
            //else
            //{
            //   if( IS_VAR_FIXED(idx_att,"DistMuro")==0 ) { DistMuro = Xt -(X +Spe_Fia_Sx + Spe_Fia_Dx)  }
            //   else
            //   {
            //      DEL_VAR_MODIFICATE(idx_att,"X")
            //      X = Xt -(DistMuro + Spe_Fia_Sx + Spe_Fia_Dx)
            //   }
            //}
         }
      }

      if( VAR_EXIST(idx_att,"Cuc_Alt_Zoc") ) {  Yt = Y + Cuc_Alt_Zoc  }

      if ( Verso==1  )   { tipo_ang_muro = "S" }
      if ( Verso==-1 )   { tipo_ang_muro = "D" }
   }

   PROCEDURA DimAngPan
   {
      if( ACTION() != 0) { EXITSUB() }

      // X_Anta
      // Approfitto delle cucine 2.5/3.0 per correggere un errore storico:
      // da 602 passo a 600 come per le basi per evitare errori di dimensione alla riduzione della X
      if( Cucina_Versione > 2) { X_Anta = 600 }
      X_Pannello = X - X_Anta

      if( IS_VAR_FIXED(idx_att,"DistMuro") == 0)       { DistMuro = $Cuc_DistMuro  }
      if( IS_VAR_FIXED(idx_att,"X_Mont") == 0)         { X_Mont   = $Cuc_XMontante }
      if( IS_VAR_FIXED(idx_att,"Z_Mont") == 0)
      {
         Z_Mont = $Cuc_ZMontante

         if( VAR_VAL(idx_att,"SpePannAcc") > 0
           & VAR_VAL(idx_att,"PannelloComeAnta") != 0) { Z_Mont   = SpePannAcc     }
      }

      if(VAR_EXIST(idx_att,"copied__") != 1)           { X_ori=X  Y_ori=Y  Z_ori=Z }
   }

   PROCEDURA Set_Xt_AngPan
   {
      if( $OnLoadOrder > 0)                          { EXITSUB() }

      if( VAR_TYPE( idx_att, "OnRicalcola") > 0)     { EXITSUB() }
      if( VAR_VAL( idx_att, "Cucina_Versione") <= 2) { EXITSUB() }

      if( VAR_EXIST( idx_att, "Xt") != 1)            { EXITSUB() }
      if( IS_VAR_FIXED( idx_att, "Xt") == 1)         { EXITSUB() }

      if( VAR_VAL( idx_att, "Verso") == 0)           { EXITSUB() }
      if( VAR_EXIST( idx_att, "idx_sx") != 1
        | VAR_EXIST( idx_att, "idx_dx") != 1)        { EXITSUB() }

      wk_idx_test = SE_NUM( Verso > 0, idx_dx, idx_sx)
      if( IS_IDX( wk_idx_test) != 1)                 { EXITSUB() }

      wk_z_test = VAR_VAL( wk_idx_test, "Z")
      if( wk_z_test <= 0)                            { EXITSUB() }

      if( VAR_EXIST( idx_att, "lamiera") != 1) { COMPONENTI2( "lamiera", idx_att, "_graf_lamL") }
      if( lamiera <= 0)                              { EXITSUB() }

      VAR_INDIRECT_ASSIGN( idx_att, "wk_punto_test_1", idx_att, SE_STR( Verso > 0, "base_0", "base_5"))

      wk_punto_test_2 = wk_punto_test_1
      VAR_INDIRECT_ASSIGN( idx_att, "wk_punto_test_2", lamiera[1], SE_STR( Verso > 0, "base_5", "base_0"))

      wk_dist_test = DistanzaFraPunti( wk_punto_test_1, wk_punto_test_2, ANG_TOT_NOR(idx_att))
      if( wk_dist_test <= 0.2)                       { EXITSUB() }

      Xt_prec = Xt
      Xt = wk_dist_test + wk_z_test
      if( Xt != Xt_prec) { ricalcolaUna ( idx_att, 0, 1, "Set_Xt_AngPan", idx_att) }

      //DISPLAY2( FMT( "Act: {} - Att: {} - Verso: {} - wk_idx_test: {} - wk_dist_test: {} - wk_z_test: {} - Xt: {}", STR(ACTION()), STR(ATTUALE()), STR(Verso), STR(wk_idx_test), STR(wk_dist_test), STR(wk_z_test), STR(Xt)))
   }

   PROCEDURA salva_orig_ang_pan
   {
      if(ACTION()<0 | COMPONENDO() )   {  EXITSUB()   }

      if( ACTION()==0 & VAR_EXIST(idx_att,"cmp_name") )
      {
         if(VAR_EXIST(idx_att,"orig_X_Anta")==0)      { orig_X_Anta  = X_Anta       }
         if(VAR_EXIST(idx_att,"orig_X")==0)           { orig_X       = X            }
         if(VAR_EXIST(idx_att,"orig_Z_Fianco")==0)    { orig_Z_Fianco= Z_Fianco     }
         if(VAR_EXIST(idx_att,"orig_Xt")==0)          { orig_Xt      = Xt           }
         if(VAR_EXIST(idx_att,"orig_Zt")==0)          { orig_Zt      = Zt           }
         if(VAR_EXIST(idx_att,"orig_DistMuro")==0)    { orig_DistMuro= DistMuro     }
         if(VAR_EXIST(idx_att,"orig_Z_Pannello")==0)  { orig_Z_Pannello= Z_Pannello }
      }
   }

   PROCEDURA PosaSuAngolo
   {
      if(ACTION()<0 | COMPONENDO() )   {  EXITSUB()   }

      n = TIPO_POS(ATTUALE())

      // 0 posiziona normale
      // 1 posizionato su muro
      // 2 ""          su angolo
      if(n==2 & ACTION()!=-1 & IS_VAR_FIXED(ATTUALE(),"ang")==0 )
      {
         ang_a_muro_prec = ang

         if ( $ang_muro<0 )         { wk_am = -1*FLOOR(ABS($ang_muro-0.005)*100)/100 }
         else                       { wk_am = FLOOR(($ang_muro+0.005)*100)/100 }

         if ( $ang_opposto_muro<0 ) { wk_aom = -1*FLOOR(ABS($ang_opposto_muro-0.005)*100)/100 }
         else                       { wk_aom = FLOOR(($ang_opposto_muro+0.005)*100)/100 }

         ang_muro = $ang_muro
         ang_opposto_muro = $ang_opposto_muro

         if(STRCMP(tipo_ang_muro,"S")==0) {  ang = 180 - wk_am + wk_aom }
         else                             {  ang = 180 - wk_aom + wk_am }

         if(ang < 0)       { ang = ang * -1 }
         while(ang > 360)  { ang = ang - 360 }
         if(ang >= 180)    { ang = 90 }

         //arrotondamento
         ang = FLOOR((ang+0.005)*100)/100
      }
      if(ang!=90)
      {
         //controllo che possa essere usato in FS
         if( VAR_MODE(ATTUALE(),"ang")==$MODE_NONE )
         {
            if( VAR_EXIST(idx_att,"MsgNoFS")==0 & $CNP==0 )
            {
               MsgNoFS = 1
               //DISPLAY2( MSG(1022) )
            }
            ang = 90
            EXITSUB( )
         }
         //ripristino ricalcola invece di ricalcola_una perchè _una non aggiorna box
         if( ACTION()==2 & $OnLoadOrder==0 ) { COMANDO(STRCAT("RICALCOLA ",STR(ATTUALE())," //ang_da_muro")) }
      }
   }

   PROCEDURA punti_completi_ang_pan
   {
      //Base angolo SX
      base_0   = [0, 0, 0]
      base_6   = [X +Spe_Fia_Dx, 0, 0]

      base_5   = base_6
      base_5.z = Z + Anta_Spe + Anta_Aria_Z

      base_1   = base_0
      base_1.x = base_6.x-Xt

      base_2   = base_1
      base_2.z = Zt

      base_3   = base_2
      base_3.x = base_1.x + Xt - X_Anta - 32

      base_4   = base_3
      base_4.z = Z + Anta_Spe + Anta_Aria_Z

      Y_Scocca = Y - $Cuc_RidY_Sco

      if( ang == 180) { ang = 90 }

      if( ang == 90)
      {
         if( IS_VAR_FIXED(idx_att,"X_Mont") == 0) { X_Mont = Xt - X_Anta - Z_Pannello - Spe_Fia_Dx }
      }

      delta_x = 0
      PERNO   = Z_Pannello

      SINA = SENO(ang-90)
      COSA = COSENO(ang-90)
      TGA  = SINA/COSA

      if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
      {
         //uso dimensione Zt iniziale per calcolare FS
         //queste regole valogono solo se non modifico l'ingombro in Z dell'oggetto angolo
         //perchè altrimenti perdo ogni riferimento all'ingombro del corrispettivo pensile
         //AntaP <-- Anta pensile
         AntaP = (Zt -$Cuc_Def_PeStd_Z)/COSENO(45)
         tang = SENO(ang-90)/COSENO(ang-90)
         //calcolo le ipotetiche basi di un pensile in FS
         ba0 = [0, 0, 0]
         ba1 = [0, 0, $Cuc_Def_PeStd_Z]
         ba2 = [AntaP*COSENO(90-ang/2), 0, $Cuc_Def_PeStd_Z+AntaP*SENO(90-ang/2)]
         ba3 = [ba2.x+$Cuc_Def_PeStd_Z*COSENO(ang-90), 0, (ba2.z-$Cuc_Def_PeStd_Z*SENO(ang-90)) ]
         ba4 = [ba3.x-(ba3.z*tang), 0,  0]

         c_rivestimento_ba0 = ba0
         c_rivestimento_ba1 = ba1
         c_rivestimento_ba2 = ba2
         c_rivestimento_ba3 = ba3
         c_rivestimento_ba4 = ba4

         //trovo quindi la dimensione dell'ingombro a muro dell'ipotetico pensile FS
         IngMuro = DISTANZA(ba0,ba4)
         //calcolo la riduzione/maggiorazione rispetto misure iniziali
         deltaIngMuro = $Cuc_BAPRef_X -IngMuro
      }
      if( ang!=90 )
      {
         //conservo le schiene, cambio dimensione ante/montantino frontale, ruoto su base1
         if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
         {
            s = Xt -X
            base_2 = [ -s-Zt*SENO(ang-90), 0, Zt*COSENO(ang-90) ]
            base_3 = [ base_2.x + Z_Pannello*COSENO(ang-90), 0, base_2.z+Z_Pannello*SENO(ang-90) ]
            t = base_3.z -Z_Fianco
            base_4 = [ base_3.x + t*(SENO(ang-90)/COSENO(ang-90)), 0, Z_Fianco ]

            if( VAR_VAL(idx_att,"NoMont")==0 )
            {
               DEL_VAR_MODIFICATE(idx_att,"X_Mont")
               DEL_VAR_MODIFICATE(idx_att,"Z_Mont")

               X_Mont = DISTANZA(base_4,base_5) -X_Anta
               Z_Mont = DISTANZA(base_3,base_4)
            }
         }
         //conservo le ante
         //il dimensionamento viene fatto rispetto al pensile anta diagonale
         //in fuori-squadra per non perdere allineamento base-pensile
         //conservo le ante, : il FS diventa quasi conserva schiene
         if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
         {
            base_0 = [0, 0, 0]
            base_6 = [X +Spe_Fia_Dx, 0, 0]

            base_5  = base_6
            base_5.z= Z_Fianco

            base_1  = base_0
            base_1.x= base_6.x-Xt + deltaIngMuro

            base_2 = base_1
            base_2.x = base_1.x -(Zt-deltaIngMuro)*SINA
            base_2.z = base_1.z +(Zt-deltaIngMuro)*COSA

            base_3 = base_2
            base_3.x = base_2.x +Z_Pannello*COSA
            base_3.z = base_2.z +Z_Pannello*SINA

            base_4 = base_3
            base_4.z = base_5.z

            if( IS_VAR_FIXED(idx_att,"Z_Mont")==0 ) {  Z_Mont = DISTANZA(base_3,base_4) }
         }
         //se necessario gestiremo il FS eslcusivo della scocca base senza riferimenti
         //al pensile, secondo le formule:
         //conservo le ante, cambio dimensione schiene, ruoto su PERNO
         if( STRCMP(FuoriSquadraBA,"ANTENOPENSILE")==0 )
         {
            base_2.x = base_4.x +delta_x -PERNO*COSA -Z_Mont*SINA
            base_2.z = base_4.z -PERNO*SINA + Z_Mont*COSA

            base_1.x = base_2.x +base_2.z*TGA

            base_3.x = base_2.x +Z_Pannello*COSA
            base_3.z = base_2.z +Z_Pannello*SINA

            base_4   = base_5
            base_4.x = base_3.x + (base_3.z-Z_Pannello)*TGA
         }
      }

      base_o0 = base_2
      base_o1 = base_3
      base_o2 = base_5
      base_o3 = base_6

      pnt_sx_0 = base_2
      pnt_sx_1 = base_3
      pnt_dx_0 = base_6
      pnt_dx_1 = base_5

      base_so = base_2
      alto_ne = base_6
      alto_ne.y = base_6.y+Yt

      //Base angolo DX
      if( Verso==1 )
      {
         base_0   = [ 0, 0, 0]
         base_6   = [ X, 0, 0]
         base_5   = [Xt, 0, 0]

         base_4   = base_5
         base_4.z = Zt

         base_3   = base_4
         base_3.x = X_Anta + 32

         base_1   = base_0
         base_1.z = Z + Anta_Spe + Anta_Aria_Z

         base_2   = base_3
         base_2.z = base_1.z

         if( ang==90 )
         {
            if( IS_VAR_FIXED(idx_att,"X_Mont")==0 )   { X_Mont = Xt - X_Anta - Z_Pannello - Spe_Fia_Sx }
         }

         if( ang!=90 )
         {
            //conservo le schiene, cambio dimensione ante/montantino frontale, ruoto su base1
            if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
            {
               base_4 = [Xt+Zt*SENO(ang-90), 0, Zt*COSENO(ang-90)]
               base_3 = [base_4.x - Z_Pannello*COSENO(ang-90), 0, base_4.z+Z_Pannello*SENO(ang-90)]
               t = base_3.z -Z_Fianco
               base_2 = [base_3.x - t*(SENO(ang-90)/COSENO(ang-90)), 0, Z_Fianco]

               if( VAR_VAL(idx_att,"NoMont")==0 )
               {
                  DEL_VAR_MODIFICATE(idx_att,"X_Mont")
                  DEL_VAR_MODIFICATE(idx_att,"Z_Mont")

                  X_Mont = DISTANZA(base_1,base_2) -X_Anta
                  Z_Mont = DISTANZA(base_2,base_3)
               }
            }
            //conservo le ante, secondo la logica su esposta: il FS diventa quasi conserva schiene
            if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
            {
               base_5 = base_0
               base_5.x = base_0.x +Xt -deltaIngMuro

               base_4 = base_5
               base_4.x = base_5.x +(Zt-deltaIngMuro)*SINA
               base_4.z = base_5.z +(Zt-deltaIngMuro)*COSA

               base_3 = base_4
               base_3.x = base_4.x -Z_Pannello*COSA
               base_3.z = base_4.z +Z_Pannello*SINA

               base_2 = base_3
               base_2.z = base_1.z
               if( IS_VAR_FIXED(idx_att,"Z_Mont")==0 )
               {  Z_Mont = DISTANZA(base_2,base_3)       }
            }
            //se necessario gestiremo il FS eslcusivo della scocca base senza riferimenti
            //al pensile, secondo le formule:
            //conservo le ante, cambio dimensione schiene, ruoto su PERNO
            if( STRCMP(FuoriSquadraBA,"ANTENOPENSILE")==0 )
            {
               base_4.x = base_2.x -delta_x +PERNO*COSA + Z_Mont*SINA
               base_4.z = base_2.z -PERNO*SINA + Z_Mont*COSA

               base_5.x = base_4.x-base_4.z*TGA

               base_3.x = base_4.x-Z_Pannello*COSA
               base_3.z = base_4.z+Z_Pannello*SINA

               base_2   = base_1
               base_2.x = base_3.x - (base_3.z-Z_Pannello)*TGA
            }
         }
         base_o0   = base_0
         base_o1   = base_1
         base_o2   = base_3
         base_o3   = base_4

         pnt_sx_0  = base_0
         pnt_sx_1  = base_1
         pnt_dx_0  = base_4
         pnt_dx_1  = base_3

         base_so   = base_0
         alto_ne   = base_4
         alto_ne.y = base_4.y+Yt
      }

      alto_0 = base_0         alto_0.y = Yt
      alto_1 = base_1         alto_1.y = Yt
      alto_2 = base_2         alto_2.y = Yt
      alto_3 = base_3         alto_3.y = Yt
      alto_4 = base_4         alto_4.y = Yt
      alto_5 = base_5         alto_5.y = Yt
      alto_6 = base_6         alto_6.y = Yt

      alto_o0 = base_o0       alto_o0.y = base_o0.y + Yt
      alto_o1 = base_o1       alto_o1.y = base_o1.y + Yt
      alto_o2 = base_o2       alto_o2.y = base_o2.y + Yt
      alto_o3 = base_o3       alto_o3.y = base_o3.y + Yt
      //rimosso calcolo punto riduzione scocca, portato nella sezione controlli
      //creo comunque punto di appoggio per controllo misura fusto
      if( Verso==1 )
      {
         pnt_ing_fuscanta = [base_6.x,base_1.y,base_2.z+Anta_Spe+Anta_Aria_Z]
         distb05 = DISTANZA(base_0,base_5)
         distb06 = DISTANZA(base_0,base_6)
         if(distb05<distb06)
         {  pnt_ing_fuscanta = [base_5.x,base_1.y,base_2.z+Anta_Spe+Anta_Aria_Z]  }
      }
      else
      {
         pnt_ing_fuscanta = [base_0.x,base_5.y,base_5.z+Anta_Spe+Anta_Aria_Z]
      }
   }

   PROCEDURA DefVanoBaseAng
   {
      //0= vano anta
      //1= vano fusto
      vano_0_0 = [base_0.x+X -X_Anta+$Cuc_Spe_Fia, base_0.y+Cuc_Alt_Zoc, base_0.z +Cuc_Rie_Sch_ZR +$Cuc_Spe_Sch +$Cuc_Aria_Sch_Z]
      vano_0_1 = [base_0.x+$Cuc_Spe_Fia, base_0.y+Cuc_Alt_Zoc, base_0.z +Cuc_Rie_Sch_ZR +$Cuc_Spe_Sch +$Cuc_Aria_Sch_Z]

      if ( Verso==1 )
      {  vano_0_0 = [base_0.x+$Cuc_Spe_Fia, base_0.y+Cuc_Alt_Zoc, base_0.z +Cuc_Rie_Sch_ZR +$Cuc_Spe_Sch +$Cuc_Aria_Sch_Z] }

      if( Z<Z_Fianco )
      {
         vano_0_0.z = base_0.z +Cuc_Rie_Sch_ZR +$Cuc_Spe_Sch +$Cuc_Aria_Sch_Z + Z_Fianco -Z
         vano_0_1.z = base_0.z +Cuc_Rie_Sch_ZR +$Cuc_Spe_Sch +$Cuc_Aria_Sch_Z + Z_Fianco -Z
      }

      vano_l_0 = X_Anta  -2*$Cuc_Spe_Fia
      vano_p_0 = Z -(Cuc_Rie_Sch_ZR + $Cuc_Spe_Sch + $Cuc_Aria_Sch_Z)

      vano_l_1 = X -2*$Cuc_Spe_Fia
      vano_p_1 = Z -(Cuc_Rie_Sch_ZR + $Cuc_Spe_Sch + $Cuc_Aria_Sch_Z)

      if( VAR_VAL(idx_att,"Spe_Fia_Sx") > 0)
      {
         vano_0_0.x = vano_0_0.x +Spe_Fia_Sx
         vano_0_1.x = vano_0_1.x +Spe_Fia_Sx
      }

      // Vano 2 per l'attrezzaggio del frontale fisso
      vano_0_2 = [ base_1.x , base_0.y+Cuc_Alt_Zoc , base_0.z+Z ]

      vano_l_2 = Xt - X_Anta + 2
      if( Cucina_Versione > 2
        | NOME(ATTUALE())=="ScoccaT_BaseAngPan") { vano_l_2 = Xt - X_Anta }

      vano_p_2 = 1
      if( Verso > 0) { vano_0_2.x = Xt - vano_l_2 }
   }

   PROCEDURA Off_Muro_Ang
   {
      //calcolo offset_muro = distanza di base_0 dal muro
      if(Verso==1)
      {  offset_muro = -DISTANZA(base_0,base_5)    }
      else
      {
         //base_0 è fissa, mentre base_1 si muove:
         //per gestire il casso in cui base_1 supera(verso base_6) la base_0
         //calcolo diversamnete la distanza fra base_0 e l'angolo
         //std: base_1-base_0-base_6
         //per DistMuro piccolo o ang>>90: base_0-base_1-base_6
         d1 = DISTANZA(base_6,base_1)
         d6 = DISTANZA(base_6,base_0)
         offset_muro = 0
         if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
         {
            if ( d1>d6 )   {  offset_muro = DistMuro   }
            else           {  offset_muro = -DISTANZA(base_0,base_1) - DistMuro  }
         }
         else
         {  offset_muro = DISTANZA(base_0,base_1)        }
      }
   }

   PROCEDURA PosizioneBasiAngPan
   {
      //fc 140919 se inserito con doppio click, in una composizione vuota,
      //va a finire nell'angolo senza considerare il vuoto dal muoro.
      if( ACTION()<0 | COMPONENDO() | $ATTIVA_DLL==0 )   { EXITSUB() }
      if( INSERIMENTO2(idx_att)==$ins2_accessorio )      { EXITSUB() }
      if( IS_MATCH(nome_att,"ScoccaT_*AngPan*")!=1 )     { EXITSUB() }
      //fc 140924 per non inficiare gli ordini vecchi
      if( $OnLoadOrder==1 & VAR_EXIST(idx_att,"ScoccaRiposizionata")==0 )
      {  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," ScoccaRiposizionata=",STR(1)))  }
      if( $OnLoadOrder2!=0 )                             { EXITSUB() }
      if( DistMuro<1 )                                   { EXITSUB() }
      if( VAR_EXIST(idx_att,"ScoccaRiposizionata")==1 )  { EXITSUB() }
      if( VAR_EXIST(ATTUALE(),"OnSostituisci")==1 )      { EXITSUB() }

      //esise almeno 1 muro?
      if ( GET_INF_MURO(3,0)!=0 )
      {
         wk_scorri_muri_fine=0  wk_MP_quanti_muri=0      distref = 9999
         wk_punto_save = [9999, 9999 , 9999]
         while(wk_scorri_muri_fine==0)
         {
            if( GET_INF_MURO(3,wk_MP_quanti_muri)!=0 )
            {
               //incremento contatore muri
               wk_MP_quanti_muri=wk_MP_quanti_muri+1
               //cerco vertice + vicino a [0,0,0]
               wk_punto0 = [0,0,0]
               dist = DISTANZA($muro_pt1,wk_punto0)
               if( dist<distref )
               {
                  distref = dist
                  wk_punto_save = $muro_pt1
               }
            }
            else
            {  wk_scorri_muri_fine=1  }
         }

         DEL_VAR(idx_att,"wk_scorri_muri_fine*")
         DEL_VAR(idx_att,"wk_MP_quanti_muri*")

         if( wk_punto_save.x!=9999 )
         {
            COMANDO(STRCAT("EDITPOS ",STR(idx_att)," ",STR(wk_punto_save.x)," 0 ",STR(wk_punto_save.z)," 0"))
            COMANDO(STRCAT("INTERIORS link corner ",STR(idx_att)," try"))
         }
      }
   }
//} definizione per base angolo

//{ Inizio definizione punti per stampe
   PROCEDURA DefPuntiStampa
   {
      // per stampa in Muri-Pianta
      pnt_1_p    = base_0
      pnt_1_a    = base_3
      pnt_1_ang  = 0
      pnt_1_dist = $dist_pnt_quo

      //punti per stampa in pianta complessiva
      pnt_sx_rtr  = base_0
      pnt_dx_rtr  = base_3

      pnt_sx_fro  = base_1
      pnt_dx_fro  = base_2

      //punti per stampa in pianta se FM
      pnt_sx_sr   = alto_0
      pnt_dx_sr   = alto_3
      pnt_sx_s    = alto_1
      pnt_salt    = base_3
      pnt_salt1   = base_3
      if( VAR_EXIST(ATTUALE(),"Cuc_Alt_Zoc") )
      {  pnt_salt1.y = base_0.y + Cuc_Alt_Zoc  }
      pnt_salt2   = alto_3
   }

   PROCEDURA DefPuntiStampaAngPan
   {
      //punti per stampa in muri-pianta
      pnt_1_p    = base_2
      pnt_1_a    = base_1
      pnt_1_ang  = 0
      pnt_1_dist = $dist_pnt_quo

      pnt_2_p    = base_1
      pnt_2_a    = base_6
      pnt_2_ang  = 0
      pnt_2_dist = $dist_pnt_quo

      //punti per stampa in pianta se FM
      pnt_sx_sr  = alto_1
      pnt_cnt_sr = alto_0
      pnt_dx_sr  = alto_6
      pnt_sx_s   = alto_2
      pnt_dx_s   = alto_5
      pnt_salt    = base_6
      pnt_salt1   = base_6
      if( VAR_EXIST(idx_att,"Cuc_Alt_Zoc") )
         {  pnt_salt1.y = base_0.y + Cuc_Alt_Zoc }
      pnt_salt2   = alto_6
      pnt_scr_ang = base_0

      //punti montante
      pnt_fro_s1 = base_2
      pnt_fro_s2 = base_3
      pnt_fro_s3 = base_4
      pnt_fro_s4 = base_4
      pnt_fro_s4.x = base_5.x -X_Anta

      if ( Verso==1 )
      {
         pnt_1_p    = base_5
         pnt_1_a    = base_4
         pnt_1_ang  = 0
         pnt_1_dist = $dist_pnt_quo

         pnt_2_p    = base_0
         pnt_2_a    = base_5
         pnt_2_ang  = 0
         pnt_2_dist = $dist_pnt_quo

         //punti per stampa in pianta se FM
         pnt_sx_sr  = alto_0
         pnt_cnt_sr = alto_6
         pnt_dx_sr  = alto_5
         pnt_sx_s   = alto_1
         pnt_dx_s   = alto_4
         pnt_salt    = base_6
         pnt_salt1   = base_6
         if( VAR_EXIST(idx_att,"Cuc_Alt_Zoc") )
            {  pnt_salt1.y = base_0.y + Cuc_Alt_Zoc    }
         pnt_salt2   = alto_6

         pnt_scr_ang = base_5

         //punti montante
         pnt_fro_s2 = base_2
         pnt_fro_s2.x = base_1.x +X_Anta
         pnt_fro_s3 = base_2
         pnt_fro_s4 = base_3
         pnt_fro_s5 = base_4
      }
   }

   PROCEDURA DefPuntiStampaAngL
   {
      //punti per stampa in muri-pianta

      //punti per stampa in pianta se FM
      pnt_sx_sr  = alto_0
      pnt_cnt_sr = alto_5
      pnt_dx_sr  = alto_4
      pnt_sx_s   = alto_1
      pnt_dx_s   = alto_3
      DEL_VAR(idx_att,"pnt_fro_s*")
      COMPONENTI2("mont",idx_att,"Cuc_MontanteAngFS")
      if(mont>0)
      {
         pnt_fro_s2 = base_2
         pnt_fro_s2.x = base_2.x -X_Mont

         pnt_fro_s4 = base_2
         pnt_fro_s4.x = base_2.x +X_Mont*SENO(ang-90)
         pnt_fro_s4.z = base_2.z +X_Mont*COSENO(ang-90)
      }
      pnt_fro_s3 = base_2
      pnt_scr_ang = [base_5.x+50, base_0.y, base_5.z-50]

      pnt_salt    = base_4
      pnt_salt1   = base_4
      if( VAR_EXIST(idx_att,"Cuc_Alt_Zoc") )
      {  pnt_salt1.y = base_0.y + Cuc_Alt_Zoc    }
      pnt_salt2   = alto_4
   }

   PROCEDURA punti_montante_FS
   {
      csa = COSENO(ang)
      sna = SENO(ang)

      base_0 = [  0,  0, 0]         alto_0 = [0,Y,0]
      base_1 = [ -X,  0, 0]
      base_2 = [ -X,  0, spess]

      base_3 = [-spess -spess*csa, 0, spess]
      base_5 = [-Z*csa, 0, Z*sna]

      base_4 = base_5
      base_4.x = base_5.x-spess*sna
      base_4.z = base_5.z-spess*csa

      if( Verso==-1 )
      {
       //e adesso faccio il simmetrico in X
        base_1.x = -1*base_1.x
        base_2.x = -1*base_2.x
        base_3.x = -1*base_3.x
        base_4.x = -1*base_4.x
        base_5.x = -1*base_5.x
      }
   }
//} Fine definizione punti per stampe

   PROCEDURA CucP_Assegnazioni
   {
      GOSUB Cucina_Versione
      GOSUB Cucina_Modello

      Cuc_Rie_Sch_ZR = $Cuc_Rie_Sch_ZR
      if( Cucina_Versione > 2 ) { Cuc_Rie_Sch_ZR = SE_NUM(Z < 381, 5, $Cuc_Rie_Sch_ZR ) }

      if( Cucina_Versione > 2)
      {
         if( VAR_EXIST( idx_att, "VAR_Allineamento")) { VAR_SET_MODE( idx_att, "VAR_Allineamento", $MODE_USER) }
      }

      if( IS_MATCH(nome_att,"ScoccaT_*") )
      {
         //se sospesa/sospesa c/stanza nascondo Yt
         HIDE_ON_EDIT2(ATTUALE(),"Yt",0)
         if( TipoScocca>=2 ) { HIDE_ON_EDIT2(ATTUALE(),"Yt",1) }

         //LZ 02/08/2021: cucine laccate
         VAR_Melaminico = 0
      }

      if( nome_att=="Cuc_RipianoVetro" )           { Y = $Cuc_Spe_Rip_V }
      if( IS_MATCH(nome_att,"ScoccaT_BaseS*") )    { VAR_CatR_OV = 0   }

      if( IS_MATCH(nome_att,"Cuc_Fia*") )
      {
         X = $Cuc_Spe_Fia
         if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )  { X = $Cuc_Spe_Fia_Giorno  }
      }

      //Luca 14/04/2020
      if( IS_MATCH(nome_att,"Fusto*") )
      {
         NO_GEST = 1
         if( $BDM_REV_Cuc_GestFusti )                 { NO_GEST = 0 }
         if( NOME(ATTUALE())=="FustoPensileAngoloL" ) { NO_GEST = 1 }
      }

      if( nome_att == "Cuc_Cop"
        | nome_att == "Cuc_Sch"
        | nome_att == "Cuc_Fondo"
        | nome_att == "Cuc_Fianco" )
      {
         FIN_var = "C002"
         if( REPLACE( VAR_VAL_STR( ATTUALE(), "GEST_C032"), "__", "") != "" ) { FIN_var = "C032" }
      }

      // Bollinatura
      if( HAS_ALIAS(ATTUALE(),"Frontale") )
      {
         STP_Bollina = 1

         if( NOME(ATTUALE())=="Cuc_Anta"
           | NOME(ATTUALE())=="Cuc_AntaSingola" )
         {
            if( TipoFrontale > 1 ) { STP_Bollina = 0 }
         }
      }

      if( HAS_ALIAS(ATTUALE(),"Bifacciale") )
      {
         STP_Bollina = 1
         if( TipoFrontale > 1 ) { STP_Bollina = 0 }
      }

      /// Cucine 2.5, bollinatura su Cucina_2_5_Anta_Finitura
      if( VAR_VAL( ATTUALE(), "STP_Bollina") > 0
        & VAR_VAL( ATTUALE(), "Cucina_Versione") > 2) { STP_Bollina = 0 }

      // Revisione Ferramenta Brunita
      if( Cucina_Versione <= 2
        & VAR_EXIST( ATTUALE(), "VT_REV_FBRU"))
      {
         if( VAR_EXIST( ATTUALE(), "VAR_Revisione_FerBrunita") == 0 )
         {
            VAR_CREATE_NUM( ATTUALE(), "VAR_Revisione_FerBrunita", 0, $MODE_NONE, "")
         }

         SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_PK2_FBru", "VAR_Revisione_FerBrunita")

         VT_REV_FBRU = STR(VAR_VAL( ATTUALE(), "VAR_Revisione_FerBrunita"))
      }

      // Revisione Pk2
      if( Cucina_Versione <= 2
        & VAR_EXIST( ATTUALE(), "VT_REV_PK2"))
      {
         //Condizioni
         wk_entra = 0
         /// 1 - Se fondo o coperchio deve essere interno colonna
         if( VAR_VAL( ATTUALE(), "InternoCol") == 1 )     { wk_entra = wk_entra + 1 }
         /// 2 - Se fondo o coperchio deve essere interno colonna lavastoviglie
         if( VAR_VAL( ATTUALE(), "InternoColLvst") == 1 ) { wk_entra = wk_entra + 1 }
         /// 3 - Ripiano soffietto
         if( NOME(ATTUALE()) == "Cuc_RipSoff" )           { wk_entra = wk_entra + 1 }

         if( wk_entra > 0 )
         {
            if( VAR_EXIST( ATTUALE(), "VAR_Revisione_PK2") == 0 )
            {
               VAR_CREATE_NUM( ATTUALE(), "VAR_Revisione_PK2", 0, $MODE_NONE, "")
            }

            SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_PK2_FBru", "VAR_Revisione_PK2")

            if( ACTION() > 0 )
            {
               //Casi dedicati, colonne nate con il PK2,
               //il CAM giura di averle sempre forate per PK2, ho qualche dubbio
               //Abilito la rev per corenza, così da avere VAR_Revisione_PK2 come unica spia della presenza o meno del PK2
               wk_rev_pers = 0
               /// 1 - Ripiano cricchetto o fondo/coperchio interno colonna soffietto
               if( NOME(ATTUALE()) == "Cuc_RipSoff"
                 | VAR_VAL( ATTUALE(), "FLAG_soffietto") > 0 )   { wk_rev_pers = 1 }

               /// 2 - Fondo/coperchio interno colonna lvst aeg + forno (ScoccaT_ColLvstForno)
               if( UN_PADRE("ScoccaT_ColLvstForno") )            { wk_rev_pers = 1 }

               /// 3 - Fondo/coperchio interno colonna lvst 60 + forno (ScoccaT_ColLvst2Forno), fondo sopra al forno
               if( UN_PADRE("ScoccaT_ColLvst2Forno") )           { wk_rev_pers = 1 }

               /// 4 - Fondo/coperchio interno colonna forno (ScoccaT_ColForno) L900
               if( UN_PADRE("ScoccaT_ColForno")
                 & X > 850 - 2*$Cuc_Spe_Fia )                    { wk_rev_pers = 1 }

               if( wk_rev_pers > VAR_Revisione_PK2 )
               {
                  VAR_Revisione_PK2 = wk_rev_pers
                  if( IS_VAR_FIXED( ATTUALE(), "VAR_Revisione_PK2") ) { COMANDO(STRCAT( "VAR_CHANGE 1 ", STR(ATTUALE()), " VAR_Revisione_PK2 = ", STR(wk_rev_pers), " // Casi dedicati VAR_Revisione_PK2")) }
               }
            }
         }

         VT_REV_PK2 = STR(VAR_VAL( ATTUALE(), "VAR_Revisione_PK2"))
      }

      GOSUB Set_Rev_NowNastro_Gest_C179
      GOSUB Cucina_2_5_Fianco_Alto
   }

   //Luca 15/01/2019
   //assegno ai top level il limite minimo e massimo definiti in gemo
   PROCEDURA CucP_AssRangeRid
   {
      if( $ATTIVA_DLL == 0)                           { EXITSUB() }
      if( ACTION() <= 0 | $OnLoadOrder == 1)          { EXITSUB() }
      if( IS_MATCH( NOME(ATTUALE()), "Scocca*") == 0) { EXITSUB() }

      VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
      VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
      VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

      //In gemo è indicato il valore compreso di frontale
      ValDeltaZ = -1*($Cuc_Spe_Ant + $Cuc_Aria_Ant_Z)
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")) { ValDeltaZ = -1*($Cuc_Spe_Ant_Col + $Cuc_Aria_Ant_Z) }
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaS*"))     { ValDeltaZ = -1*(Cuc_Spe_Ant + Cuc_Aria_Ant_Z) }

      if( VAR_VAL( idx_att, "Anta_Spe") > 0
        & VAR_VAL( idx_att, "Anta_Aria_Z") > 0)     { ValDeltaZ = -1*(Anta_Spe + Anta_Aria_Z) }

      CtrlRangeRidM2G(ATTUALE(),"X")
      CtrlRangeRidM2G(ATTUALE(),"Y")
      CtrlRangeRidM2G(ATTUALE(),"Z")
   }

   PROCEDURA CucP_PuntiNotevoli
   {
      if( VAR_VAL( idx_att, "Cucina_Versione") <= 2) { EXITSUB() }

      // Led sottobase
      if( idx_att == idx_pdr)
      {
         punto_led_sottobase_retro_1  = [ base_0.x, base_0.y, base_0.z + $Cucina_2_5_Base_Illuminazione_Fondo_Off.z]
         punto_led_sottobase_retro_2  = [ base_3.x, base_3.y, base_3.z + $Cucina_2_5_Base_Illuminazione_Fondo_Off.z]
         punto_led_sottobase_fronte_1 = [ base_0.x, base_0.y, base_0.z + Z - $Cucina_2_5_Base_Illuminazione_Fondo_Off.z]
         punto_led_sottobase_fronte_2 = [ base_3.x, base_3.y, base_3.z + Z - $Cucina_2_5_Base_Illuminazione_Fondo_Off.z]
      }
   }

   PROCEDURA CucP_Controlli
   {
      modello = VAR_VAL_STR(-1,"GEST_MOD")
      //if( STRCMP(nome_att,"Cuc_AntaSingola")==0
      //  | STRCMP(nome_att,"Cuc_CestSingolo")==0
      //  | STRCMP(nome_att,"Cuc_CassSingolo")==0 )        { Z = $Cuc_Spe_Ant }
      //
      //if(STRCMP(nome_att,"Cuc_FrontaleFisso")==0)        { escludi_man=1 }
      //if(STRCMP(nome_att,"LavelloGenerico")==0)          { GOSUB ord_vano_eldom }
      //if(STRCMP(nome_att,"FornoGenerico")==0)            { GOSUB ord_vano_eldom }
      //if(STRCMP(nome_att,"FornoMicroondeGenerico")==0)   { GOSUB ord_vano_eldom }
      //if(STRCMP(nome_att,"FrigoGenerico")==0)            { GOSUB ord_vano_eldom }

      if( VAR_EXIST(idx_att,"cmp_name")==1 )
      {
         if( IS_MATCH(cmp_name,"_*")==1 ) { GEST_CODICE = ""  }
      }

      //if(VAR_EXIST(idx_att,"RADICE")==1 & VAR_EXIST(idx_att,"RAD")==1) {  GOSUB FreshRadiceGen  }

      //Aggiorno connessioni
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder == 0 )
      {
         if( IS_MATCH( NOME(ATTUALE()), "ScoccaT_B*") == 1 )
         {
            idx_agg = AGGANCIATA(ATTUALE(),"*")
            if( IS_IDX(idx_agg))
            {
               //Per non avere problemi tratto casi specifici
               //if( IS_MATCH( NOME(idx_agg), "ScoccaT_B*") != 1 )

               //Se sono agganciato ad una barra isola e cambio altezza, devo cambiare anche connessione
               if( $OnLoadOrder2 == 0
                 & NOME(idx_agg) == "GruppoBarraIsola" )
               {
                  CheckStrCnt_Var( ATTUALE(), ATTUALE(), "Cuc_Alt_Zoc", "Y", -1)
               }
            }
         }
      }
   }

   PROCEDURA CucP_Gestionale
   {
      if(COMPONENDO() | ACTION()<0 | $M4RicalcoloOffset__) { EXIT() }

      if( NOME(ATTUALE()) == "ScoccaS_PensileAngolo")  { GEST_X = Xt }

      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT*")
        | IS_MATCH(NOME(ATTUALE()),"ScoccaS*"))        { GEST_Z = Zt }

      if( NOME(ATTUALE())=="ScoccaT_BaseAngPan"
        | NOME(ATTUALE())=="ScoccaT_ColAngPan")        { GEST_Z = Zr }

      if( NOME(ATTUALE())=="ScoccaT_AngoloCieco")      { GEST_X = 300  GEST_Z = 300 }

      GOSUB Set_Gest_C008_CopRip
      GOSUB Set_Gest_C181_Frontale_Stripes
      GOSUB Cucina_2_5_Set_Gest_C165_Optional

      // Cucine 2.5
      if( VAR_VAL( idx_att, "Cucina_Versione") > 2
        & VAR_VAL_STR( ATTUALE(), "Cucina_VersioneDsc") != "")
      {
         if( IS_MATCH( nome_att, "ScoccaT_B*")) { EVAL( STRCAT( "GOSUB Cucina_", Cucina_VersioneDsc, "_Base_Gestionale"))    }
         if( IS_MATCH( nome_att, "ScoccaT_C*")) { EVAL( STRCAT( "GOSUB Cucina_", Cucina_VersioneDsc, "_Colonna_Gestionale")) }
      }

      // Modelli speciali
      if( VAR_EXIST( ATTUALE(), "GEST_C160")
        & VAR_EXIST( ATTUALE(), "GEST_C002")
        & IS_MATCH( MODELLO_SPECIALE, "CUCINE_3*") == 1)
      {
         if( Is_In_StrArray( NOME(ATTUALE()), "Cuc_Fianco;Cuc_Fondo;Cuc_Cop;Cuc_Sch", ";") == 1)
         {
            if( GEST_C002 != "ME006")
            {
               if( GEST_C160 != "S0000")
               {
                  if( IS_VAR_FIXED( ATTUALE(), "GEST_C160")) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C160") }
                  GEST_C160 = "S0000"
                  VAR_SET_MODIFICATA( ATTUALE(), "GEST_C160", "")
               }

               if( IS_VAR_FIXED( ATTUALE(), "GEST_C002")) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C002") }
               GEST_C002 = "ME006"
               VAR_SET_MODIFICATA( ATTUALE(), "GEST_C002", "")
            }
         }
      }
   }

   PROCEDURA CucP_GestionaleFusto
   {
      if( NO_GEST == 1)
      {
         DescEdit__  = MSG(1003)

         SET_GEST_STATO( ATTUALE(), 7, 1)

         FLAG_RADICE = $NO_RAD
         GEST_CODICE = ""
         RADICE = ""

         EXIT()
      }

      GEST_Y = SE_NUM( VAR_VAL( idx_att, "VAR_Fianco_Alto") == 0, Y, Y + $Cuc_RidY_Sco)

      SET_GEST_STATO( ATTUALE(), 7, 0)

      FLAG_RADICE = $FLAG_STANDARD

      if( IS_VAR_FIXED( ATTUALE(), "RADICE")
        | IS_VAR_FIXED( ATTUALE(), "GEST_CODICE")) { EXITSUB() }

      idx_pdr_gest = GetPrimoGest( ATTUALE(), 1)

      cod_pdr_gest = VAR_VAL_STR( idx_pdr_gest, "ORD_COD")
      if( cod_pdr_gest == "") { cod_pdr_gest = VAR_VAL_STR( idx_pdr_gest, "cmp_name") }
      if( Cucina_Versione > 2)
      {
         if( UN_PADRE( "ScoccaT_B*")) { cod_pdr_gest = STRMID( 1, STRLEN(cod_pdr_gest), cod_pdr_gest) }
      }

      perRADICE = ""
      perCODICE = STRCAT( "F", cod_pdr_gest)

      if( perRADICE != VAR_VAL_STR( ATTUALE(), "RADICE")
        | perCODICE != VAR_VAL_STR( ATTUALE(), "GEST_CODICE"))
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB CAMBIA_VAR
   }

   PROCEDURA GestioneLivelliOnWall
   {
      if($query_type==5)
      {
         COMANDO2("LIVELLI CLEAR OnWall")

         liv_wall =  6
         liv_wall[1] = 0
         liv_wall[2] = 201
         liv_wall[3] = 385
         liv_wall[4] = 569
         liv_wall[5] = 753
         liv_wall[6] = 937

         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*") )
         {
            //Luca 25/05/2020
            //inoltre l'unico livello a muro dovrà essere quello a 201mm, gli altri non sono ufficialmente supportati.
            //rif. mail 20/05/20 Luca Zorzo
            liv_wall =  1
            liv_wall[1] = 201
            //liv_wall[2] = 385
            //liv_wall[3] = 569
            //liv_wall[4] = 753
            //liv_wall[5] = 937
         }

         //Luca 25/11/2019
         if( NOME(ATTUALE())=="ArmadioBattenteWTL_Arm20"
           | NOME(ATTUALE())=="ArmadioAngoloWTL_Arm20"
           | NOME(ATTUALE())=="ArmadioBattente_Arm20"
           | NOME(ATTUALE())=="Armadio_EtVoila" )
         {
            liv_wall =  4
            liv_wall[1] = 2270
            liv_wall[2] = 2430
            liv_wall[3] = 2650
            liv_wall[4] = 2900
         }

         if( NOME(ATTUALE()) == "ScoccaT_ColFalegnameria" )
         {
            liv_wall =  2
            liv_wall[1] = 0
            liv_wall[2] = 201
         }

         //Luca 02/08/2021
         if( NOME(ATTUALE()) == "MadiaSideboardNow" )
         {
            liv_wall =  1
            liv_wall[1] = 0
            if( VAR_tipo_madia == "SOSPESA" )
            {
               liv_wall[1] = 201
            }
         }

         i = 1
         while ( i<=liv_wall )
         {
            COMANDO2( STRCAT("LIVELLI ADD OnWall ", STR(liv_wall[i]), " ", STR(liv_wall[i])) )
            i = i + 1
         }

         $QueryResult__ = 1
      }
   }

   PROCEDURA Cuc_OnQueryBdmLocal
   {
      if( $query_type==1 )
      {
         //se agganciato a barra isola
         wk_agg_barra = 0

         if( $M4_DragInfo_Mode==0 )
         {
            //allineamento filo alto
            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Base*")
              & IS_MATCH(NOME($M4_DragInfo_Ref),"ScoccaT_Base*") )
            {
               if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
               {
                  wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
                  cnt_new = CostruisciStrCnt(wk_sd,"A","R",0,0,0,0)

                  //liv0y = $M4_DragInfo_Snap.y + VAR_VAL($M4_DragInfo_Ref,"Yt") - VAR_VAL(ATTUALE(),"Y")
                  //if( liv0y<17 ) { cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,0,0,0) }

                  filo_b = 0

                  SET_#($M4_DragInfo_Ref)
                  wk_alto_M4_ref = #alto_0.y
                  wk_base_M4_ref = #base_0.y

                  wk_diff = wk_alto_M4_ref - Y

                  if( wk_diff < 17 )       { filo_b = 1 }

                  if( wk_diff == 17
                    & wk_base_M4_ref<0.1 ) { filo_b = 1 }

                  if( filo_b==1  ) { cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,0,0,0) }

                  //liv0y = $M4_DragInfo_Snap.y + VAR_VAL($M4_DragInfo_Ref,"Yt") - VAR_VAL(ATTUALE(),"Y")
                  ////if( liv0y<17 ) { cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,0,0,0) }
                  //if( liv0y<=17 )
                  //{
                  //   if( $M4_DragInfo_Snap.y==0 ) { cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,0,0,0) }
                  //}

                  $M4_DragInfo_Cnt = cnt_new
                  $QueryResult__ = 3
               }
            }

            //Luca 08/02/2019
            //se aggancio base a barra isola aggiungo l'angolo
            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Base*")
              // FT 29/01/20 - cerco per alias, per non legarmi al nome
              // FT & IS_MATCH(NOME($M4_DragInfo_Ref),"BarraIsola")
              & HAS_ALIAS($M4_DragInfo_Ref, "BarraIsola") == 1
              )
            {
               if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
               {
                  wk_ang = 180
                  wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
                  cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,0,0,wk_ang)

                  liv0y = $M4_DragInfo_Snap.y + VAR_VAL($M4_DragInfo_Ref,"Y") - VAR_VAL(ATTUALE(),"Yt")
                  if( liv0y<=17 ) { cnt_new = CostruisciStrCnt(wk_sd,"B","R",0,-$Cuc_Alt_Zoc,0,wk_ang) }
                  else            { cnt_new = CostruisciStrCnt(wk_sd,"A","R",0,$Cuc_RidY_Sco,0,wk_ang) }

                  $M4_DragInfo_Cnt = cnt_new
                  $QueryResult__ = 3
               }
            }

            //rob_pec 07/11/2019
            //se aggancio base/colonna tamponamento a base/colonna
            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_*Tamponamento*")
              & IS_MATCH(NOME($M4_DragInfo_Ref),"ScoccaT_*") )
            {
               if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
               {
                  wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
                  cnt_new = CostruisciStrCnt(wk_sd,"B","F",0,0,0,0)

                  Y =  VAR_VAL($M4_DragInfo_Ref,"Y")
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Y=",STR(Y) , " //Cuc_OnQueryBdmLocal ScoccaT_*Tamponamento"))

                  if( NOME(ATTUALE())!="ScoccaT_ColTamponamentoApribile" )
                  {
                     Verso = $M4_DragInfo_SxDx
                     COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Verso=",STR(Verso) , " //Cuc_OnQueryBdmLocal ScoccaT_*Tamponamento"))
                  }

                  $M4_DragInfo_Cnt = cnt_new
                  $QueryResult__ = 3
               }
            }

            //Luca 03/12/2019
            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")
              & NOME($M4_DragInfo_Ref)=="ScoccaT_ColTamponamentoApribile" )
            {
               if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
               {
                  wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
                  cnt_new = CostruisciStrCnt(wk_sd,"B","F",0,0,0,0)

                  $M4_DragInfo_Cnt = cnt_new
                  $QueryResult__ = 3
               }
            }

            //Luca 11/02/2019 gestisco il verso
            if( NOME(ATTUALE())=="ScoccaT_BaseAngoloIsola" )
            {
               Verso = $M4_DragInfo_SxDx
               Z =  VAR_VAL($M4_DragInfo_Ref,"Z") + 52
               if( Verso>0 ) { no_collisione = 1 }
               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Z=",STR(Z) , " //Cuc_OnQueryBdmLocal ScoccaT_BaseAngoloIsola"))
            }

            //Luca 18/05/2020
            //Mantis 22436: Basi anngolo cieco: profondità di accosto errate
            if( NOME($M4_DragInfo_Ref)=="ScoccaT_AngoloCieco"
              //Luca 23/06/2020
              & NOME(ATTUALE()) != "ScoccaT_BaseTamponamento"  )
            {
               wk_prf_base = Z + 32
               if( $M4_DragInfo_SxDx==-1 )
               {
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR($M4_DragInfo_Ref)," Z=",STR(wk_prf_base) , " //Cuc_OnQueryBdmLocal ",NOME(ATTUALE())))
               }
               if( $M4_DragInfo_SxDx==1 )
               {
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR($M4_DragInfo_Ref)," X=",STR(wk_prf_base) , " //Cuc_OnQueryBdmLocal ",NOME(ATTUALE())))
               }
               COMANDO(STRCAT("RICALCOLA ",STR($M4_DragInfo_Ref)," //Cuc_OnQueryBdmLocal ",NOME(ATTUALE())))
            }

            // FT 29/01/20 - cerco per alias, per non legarmi al nome
            // FT //Luca 18/07/2019
            // FT if( NOME($M4_DragInfo_Ref)=="BarraIsola" ) { wk_agg_barra = 1 }
            if( HAS_ALIAS($M4_DragInfo_Ref, "BarraIsola") == 1 ) { wk_agg_barra = 1 }
         }

         //Luca 23/05/2019
         //se a muro non chiedere il bifacciale
         wk_a_muro = 0
         GOSUB SettaPosizioneBase

         //Luca 12/06/2019
         //le basi lavatoviglie non passano per SettaPosizioneBase
         //if( NOME(ATTUALE())=="ScoccaT_BaseLvst" )
         //{
         //   wk_dist = QUERY_WALL(ATTUALE(),"distance from face R")
         //   ChiediAddBifaccialiDefault = 0
         //   if( wk_dist==0 ) { ChiediAddBifaccialiDefault = 1 }
         //}

         //Luca 20/03/2019
         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_B*") )
         {
            ChiediAddBifaccialiDefault = 0
            if( wk_a_muro==0 & wk_agg_barra==0 ) { ChiediAddBifaccialiDefault = 1 }
         }
      }
   }

   PROCEDURA OnQueryBdmLocal_Basi_Cuc
   {
      if ( $query_type == 1 )
      {
         if ( $M4_DragInfo_Mode == 0 )
         {
            wk_idx_ref  = $M4_DragInfo_Ref
            SET_#(wk_idx_ref)
            wk_nome_ref = NOME(wk_idx_ref)
            wk_ang_ref  = ANG_TOT2(wk_idx_ref)

            if( wk_nome_ref == "Cuc_ModuloGlass" )
            {
               //Sopra
               wk_sd = "S+"
               wk_ab = "A+"
               wk_offx = 0
               wk_offy = Y
               wk_offz = #Cuc_ModuloGlass_Pos_Rt_OffZ

               //Sotto
               if( $M4_DragInfo_SxDx == 2 )
               {
                  wk_ab = "B+"
                  wk_offx = 0
                  wk_offy = -Y
               }

               //Destra
               if( $M4_DragInfo_SxDx == 1 )
               {
                  wk_sd = "D+"
                  wk_offx = X
                  wk_offy = -1 * $Cuc_ModuloGlass_Coperchio_Sp
               }

               //Sinistra
               if( $M4_DragInfo_SxDx == -1 )
               {
                  wk_offx = -X
                  wk_offy = -1 * $Cuc_ModuloGlass_Coperchio_Sp
               }

               $M4_DragInfo_Cnt = CostruisciStrCnt2( wk_sd, wk_ab, "R+", STRCAT( STR(wk_offx), " ", STR(wk_offy), " ", STR(wk_offz), " 0"))
               $QueryResult__ = 3
            }
         }
      }

      if( $query_type==2 )
      {
         if( $query_p2==0 )
         {
            $QueryResult__ = 1
            if( NOME($query_p1)=="Cuc_Led" ) { $QueryResult__ = 0 }
         }

         //vano 1 solo per i led per ora
         if( $query_p2==1 )
         {
            $QueryResult__ = 0

            if( NOME($query_p1)=="Cuc_Led" )         { $QueryResult__ = 1 }
            //Luca 04/05/2021
            if( NOME($query_p1)=="AccessorioBagno" ) { $QueryResult__ = 1 }
         }
      }
   }

   PROCEDURA CucP_OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C003

         GOSUB Set_Gest_C007

         GOSUB Set_Gest_C039

         //riduzione
         //GOSUB Set_Gest_C011
      }

      if( TABER_REGOLA=="C011_PRE" ) { GOSUB Set_Gest_C011 }

      if( TABER_REGOLA=="C025_PRE" ) { GOSUB Set_Gest_C025 }

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

         GOSUB Set_TipoRipiano

         GOSUB Set_MaterialeFrontale_Ante
      }
   }

   PROCEDURA CtrlQuantita
   {
      if ( ACTION()>0 & $OnLoadOrder==0
         & VAR_EXIST(ATTUALE(),"QUANTITA")
         & INSERIMENTO2(ATTUALE())==$ins2_accessorio )
      {
         if( IS_VAR_FIXED(ATTUALE(),"QUANTITA")==0 )
         {  while ( QUANTITA<0 ) { CHIEDI(ATTUALE(),"QUANTITA") } }
      }
   }

   PROCEDURA CtrlBasi
   {
      if( ACTION()<0 | COMPONENDO() )  { EXITSUB() }

      //GOSUB CtrlQuantita

      GOSUB SettaPosizioneBase

      //if( $OnLoadOrder )               { EXITSUB() }

      idx_test = ATTUALE()
      match  = "ScoccaT_*"
      match2 = "Cuc_ModuloGlass"
      dove  = "*"
      GOSUB VICINESXDX_cuc
      GOSUB Cucina_2_5_Fianco_Alto

      //Luca 14/04/2021 fianchi figli
      //altezza scasso pc
      COMPONENTI2("wk_fia",ATTUALE(),"Cuc_Fianco")
      idx_fia_cmp_sx = -1
      idx_fia_cmp_dx = -1

      //Luca 14/04/2021
      CasCes = 0
      idx_cescas_sup = -1
      COMPONENTI2("CasCes",ATTUALE(),"Cuc_Cestone")
      COMPONENTI2("wk_cas",ATTUALE(),"Cuc_Cassetto")
      while( wk_cas > 0 )
      {
         AddItem2Array(-1,"CasCes",wk_cas[wk_cas],"")
         wk_cas = wk_cas - 1
      }
      if( CasCes > 0 )
      {
         SORT_POINT(base_1,"CasCes","base_1")
         idx_cescas_sup = CasCes[CasCes]
      }


      i = 1
      while ( i<=wk_fia )
      {
         if( VAR_VAL(wk_fia[i],"Verso")<0 ) { idx_fia_cmp_sx = wk_fia[i] }
         if( VAR_VAL(wk_fia[i],"Verso")>0 ) { idx_fia_cmp_dx = wk_fia[i] }
         i = i + 1
      }

      //trovo basi sotto
      if( VAR_EXIST(ATTUALE(),"idx_cnear_dw") )
      {
         idx_sotto = -1
         if( IS_IDX(idx_cnear_dw) )
         {
            BOX_MODE(0)
            NEAR_GLOBALE("basi_sotto",idx_cnear_dw,5,1,"ScoccaT_Ba*")
            idx_test = ATTUALE()

            i=1
            while( i<=basi_sotto )
            {
               ang_test = ANG_TOT2(idx_test)
               temp_idx=basi_sotto[i]

               if( temp_idx!=idx_test ) { idx_sotto = temp_idx }
               i=i+1
            }
         }
      }

      //Luca 04/02/2020
      //trovo basi sopra
      if( VAR_EXIST(ATTUALE(),"idx_cnear_up") )
      {
         idx_sopra = -1
         if( IS_IDX(idx_cnear_up) )
         {
            BOX_MODE(0)
            NEAR_GLOBALE("basi_sopra",idx_cnear_up,5,1,"ScoccaT_Ba*")
            idx_test = ATTUALE()

            i=1
            while( i<=basi_sopra )
            {
               ang_test = ANG_TOT2(idx_test)
               temp_idx=basi_sopra[i]

               if( temp_idx!=idx_test ) { idx_sopra = temp_idx }
               i=i+1
            }
         }
      }

      if( VAR_VAL(idx_att,"VAR_Vuoto")==1 & $ATTIVA_DLL==1 )
       {  HIDE_ON_EDIT(idx_att,"GEST_*",VAR_Vuoto)  }

      //GOSUB AggFiloFronte
      //GOSUB CtrlInRiposBasi

      ////connessione in caso di elementi agganciati all'interno della base ang135
      //if(ACTION()==2 & $ATTIVA_AGGANCIA!=0)
      //{
      //   if( VAR_VAL(idx_att,"dentro_ang135")==1)
      //   {
      //      if(VAR_EXIST(idx_att,"dx_ang135")!=1) { dx_ang135 = 442.49 }
      //      if(VAR_EXIST(idx_att,"dz_ang135")!=1) { dz_ang135 = 183.25 }
      //
      //      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
      //      COMANDO(STRCAT("CONNESSIONE_EDIT S + 0, B + 0,R + 0, ",STR(dx_ang135)," 0.0 ",STR(dz_ang135)," -45.0"))
      //   }
      //}

      //Luca 26/02/2019
      GOSUB CtrlPresenzaBifacciale

      //Luca 26/02/2019
      GOSUB CtrlPresenzaFiancoFinitura

      //Luca 20/03/2019
      GOSUB CtrlPresenzaBarraIsola

      GOSUB CtrlPresenzaSNACK

      //Luca 20/11/2019
      GOSUB CtrlPresenzaPianoCottura

      //Luca 09/10/2019
      GOSUB TrovaTopSopra

      //Luca 10/06/2020
      if( NOME(ATTUALE())=="ScoccaT_BaseStandard" )
      {
         ConLavello = 0
         COMPONENTI2("wk_lav",ATTUALE(),"LavelloGenerico")
         if( wk_lav>0 ) { ConLavello = 1 }
      }

      //Luca 24/06/2020
      if( NOME(ATTUALE())=="ScoccaT_BaseAngPan" ) { ConLavello = SE_NUM( VAR_Lavello > 0, 1, 0) }

      //Simone 29/04/2022 - Cerco anta ribalta
      wk_tipo_anta = ""
      COMPONENTI2("wk_anta",ATTUALE(),"Cuc_Anta")
      i = 1
      while( i <= wk_anta )
      {
         if( VAR_VAL_STR(wk_anta[i],"Apertura") == "RB" ) { wk_tipo_anta = "RB" }
         i = i + 1
      }
   }

   //LZ 19/04/2021 - Gestione riduzioni fusto
   PROCEDURA CtrlRidFustoBase
   {
      // Con Schiena
      /// Altezza
      ConSchiena = SE_NUM( Y > 184, 1, 0)
      if( NOME(ATTUALE()) == "FustoBaseLavello" ) { ConSchiena = SE_NUM( Y >= 533, 1, 0) }

      if( ConSchiena == 0)     { EXITSUB() }
      if( Cucina_Versione > 2) { EXITSUB() }

      /// Profondità
      COMPONENTI2( "wk_ces", PADRE( ATTUALE(), -1), "Cuc_Cestone")
      COMPONENTI2( "wk_cas", PADRE( ATTUALE(), -1), "Cuc_Cassetto")

      if( Z < 382
        & wk_cas + wk_ces > 0 ) { ConSchiena = -1 }
   }

   //Luca 25/03/2019
   //ConBifacciale   --> indica la presenza di un bifacciale superiore
   //ConBifacciale_1 --> indica se c'è almeno un bifacciale
   //mi serve sapere se il bifacciale è superiore per gestire la barra alluminio,
   //nel caso di bifacciale diventa come la barra frontale
   PROCEDURA CtrlPresenzaBifacciale
   {
      if( VAR_EXIST(ATTUALE(),"ConBifacciale")==0 ) { VAR_CREATE_NUM(ATTUALE(),"ConBifacciale",0,$MODE_SAVEALWAYS,"") }
      if( VAR_EXIST(ATTUALE(),"ConBifacciale")==0 ) { VAR_CREATE_NUM(ATTUALE(),"ConBifacciale_1",0,$MODE_SAVEALWAYS,"") }

      ConBifacciale   = 0
      ConBifacciale_1 = 0
      //Simone 19/01/2023
      Rid_Bif_Sx = 0
      Rid_Bif_Dx = 0

      AGGANCIATI("wk_bif","*",ATTUALE())

      wk_a0y = alto_0.y
      i = 1
      while ( i<=wk_bif  )
      {
         //Luca 15/02/2019
         if( NOME(wk_bif[i])=="Cuc_AntaBifacciale" )
         {
            ConBifacciale_1 = 1

            wk_a0yb = VAR_VAL(wk_bif[i],"alto_0.y")
            //LZ 08/10/2021: se il bifacciale è più alto devo abilitare ugualmente
            //if( ABS(wk_a0yb - wk_a0y) < 50 ) { ConBifacciale = 1 }
            if( wk_a0yb >= wk_a0y - 50 ) { ConBifacciale = 1 }

            //Luca 20/03/2019
            //nel caso di bifacciali aggiunti in automatico,
            //if( VAR_VAL(wk_bif[i],"BIF__ADDAUTO")>=0 )
            if( VAR_VAL(wk_bif[i],"BIF__ADDAUTO")>=0 )
            {
               COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(wk_bif[i])))
               //COMANDO(STRCAT("RICALCOLA_UNA ", STR(wk_bif[i]), " no_agganciati //CtrlPresenza_Bifacciale"))
               VAR_VALUE_SET(wk_bif[i],"BIF__ADDAUTO",-1)
            }

            //Simone 19/01/2023 - Verifico se il bifacciale è ridotto a causa del fianco di finitura
            if( VAR_VAL(wk_bif[i], "FSN_RidDx") > 0 ) { Rid_Bif_Sx = 1 }
            if( VAR_VAL(wk_bif[i], "FSN_RidSx") > 0 ) { Rid_Bif_Dx = 1 }
         }
         i = i + 1
      }

      //Luca 07/06/2019
      //verifico con near_GLOBALE
      if( ConBifacciale_1==0 & VAR_EXIST(ATTUALE(),"idx_cnear_rt") )
      {
         if( IS_IDX(idx_cnear_rt) )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2("wk_bif",idx_cnear_rt,5,"Cuc_AntaBifacciale")

            i = 1
            while ( i<=wk_bif  )
            {
               ConBifacciale_1 = 1

               wk_a0yb = VAR_VAL(wk_bif[i],"alto_0.y")
               //LZ 08/10/2021: se il bifacciale è più alto devo abilitare ugualmente
               //if( ABS(wk_a0yb - wk_a0y) < 50 ) { ConBifacciale = 1 }
               if( wk_a0yb >= wk_a0y - 50 ) { ConBifacciale = 1 }

               i = i + 1
            }
         }
      }
   }

   PROCEDURA CtrlPresenzaBarraIsola
   {
      if( VAR_EXIST( ATTUALE(), "ConBarraIsola") == 0 ) { VAR_CREATE_NUM( ATTUALE(), "ConBarraIsola", 0, $MODE_SAVEALWAYS, "") }

      ConBarraIsola = 0
      IdxBarraIsola = -1

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_barr", ATTUALE(), 1, "BarraIsola")

      B0 = base_0
      B3 = base_3

      ang_bas = ANG_TOT2(ATTUALE())

      B0.x = base_0.x + COSENO(ang_bas)*10
      B0.y = 0
      B0.z = base_0.z - SENO(ang_bas)*10

      B3 = base_3

      B3.x = base_3.x - COSENO(ang_bas)*10
      B3.y = 0
      B3.z = base_3.z + SENO(ang_bas)*10

      i = 1
      while ( i <= wk_barr )
      {
         SET_#(wk_barr[i])
         P1 = #base_0
         P3 = #base_3
         P1.y = 0
         P3.y = 0

         //Luca 14/07/2022
         //verifico che la barra non sia 'in appoggio' alla base
         wk_dist_y = alto_0.y - #base_0.y

         if( wk_dist_y > 0 )
         {
            PX = INTERFERISCI(B0,ang_bas+90,P1,P3)
            if(PX.x!=$ERR_INTER & PX.y!=$ERR_INTER & PX.z!=$ERR_INTER)    { ConBarraIsola = 1 }
            else
            {
               PX = INTERFERISCI(B3,ang_bas+90,P1,P3)
               if(PX.x!=$ERR_INTER & PX.y!=$ERR_INTER & PX.z!=$ERR_INTER) { ConBarraIsola = 1 }
            }

            if( ConBarraIsola==1 )
            {
               IdxBarraIsola = wk_barr[i]
               i = wk_barr
            }
         }

         i = i + 1
      }
   }

   PROCEDURA CtrlPresenzaFiancoFinitura
   {
      if( VAR_EXIST(ATTUALE(),"ConFiancoFinSx")==0 ) { VAR_CREATE_NUM(ATTUALE(),"ConFiancoFinSx",0,$MODE_SAVEALWAYS,"") }
      if( VAR_EXIST(ATTUALE(),"ConFiancoFinDx")==0 ) { VAR_CREATE_NUM(ATTUALE(),"ConFiancoFinDx",0,$MODE_SAVEALWAYS,"") }

      ConFiancoFinSx = 0
      ConFiancoFinDx = 0

      idx_fiaf_sx = -1
      idx_fiaf_dx = -1

      //ANALISI_SXDX(ATTUALE(),"FiancoFinitura",1)
      //if( SX__>0 ) { ConFiancoFinSx = 1 }
      //if( DX__>0 ) { ConFiancoFinDx = 1 }

      ConFiancoFinSx = 0
      AGGANCIATI("wk_ff_sx","S * 0, * * 0, * * 0, * * * *",ATTUALE())
      SORT_POINT(base_0,"wk_ff_sx","base_3")
      while( wk_ff_sx>0 & ConFiancoFinSx==0 )
      {
         if( NOME(wk_ff_sx[wk_ff_sx])=="FiancoFinitura" ) { ConFiancoFinSx = 1  idx_fiaf_sx =wk_ff_sx[wk_ff_sx] }
         wk_ff_sx = wk_ff_sx - 1
      }
      ConFiancoFinDx = 0
      AGGANCIATI("wk_ff_dx","D * 0, * * 0, * * 0, * * * *",ATTUALE())
      SORT_POINT(base_3,"wk_ff_dx","base_0")
      while( wk_ff_dx>0 & ConFiancoFinDx==0 )
      {
         if( NOME(wk_ff_dx[wk_ff_dx])=="FiancoFinitura" ) { ConFiancoFinDx = 1  idx_fiaf_dx = wk_ff_dx[wk_ff_dx] }
         wk_ff_dx = wk_ff_dx - 1
      }

      if( ConFiancoFinSx==0 & VAR_EXIST(ATTUALE(),"idx_cnear_sx") )
      {
         if( IS_IDX(idx_cnear_sx) )
         {
            NEAR_GLOBALE2("wk_ff_sx",idx_cnear_sx,1,"FiancoFinitura")
            if( wk_ff_sx>0 )
            {
               //aggiungo controllo del fianco che ho trovoto
               //se è agganciato ad un'altra colonna, non lo considero
               wk_idx_agg = AGGANCIATA(wk_ff_sx[1],"*")
               //verifico se agganciato a base opposta
               wk_idx_agg2 = -1
               if( VAR_EXIST(wk_ff_sx[1], "FF_idx_base_bif") )
               {
                  wk_idx_agg2 = VAR_VAL(wk_ff_sx[1], "FF_idx_base_bif")
               }

               if( IS_IDX(wk_idx_agg) == 0 )
               {
                  ConFiancoFinSx = 1
                  idx_fiaf_sx = wk_ff_sx[1]
               }

               if( wk_idx_agg2 == ATTUALE() )
               {
                  ConFiancoFinSx = 1
                  idx_fiaf_sx = wk_ff_sx[1]
               }
            }
         }
      }

      if( ConFiancoFinDx==0 & VAR_EXIST(ATTUALE(),"idx_cnear_dx") )
      {
         if( IS_IDX(idx_cnear_dx) )
         {
            NEAR_GLOBALE2("wk_ff_dx",idx_cnear_dx,1,"FiancoFinitura")
            if( wk_ff_dx>0 )
            {
               //ConFiancoFinDx = 1
               //idx_fiaf_dx = wk_ff_dx[1]

               //aggiungo controllo del fianco che ho trovoto
               //se è agganciato ad un'altra colonna, non lo considero
               wk_idx_agg = AGGANCIATA(wk_ff_dx[1],"*")
               //verifico se agganciato a base opposta
               wk_idx_agg2 = -1
               if( VAR_EXIST(wk_ff_dx[1], "FF_idx_base_bif") )
               {
                  wk_idx_agg2 = VAR_VAL(wk_ff_dx[1], "FF_idx_base_bif")
               }

               if( IS_IDX(wk_idx_agg) == 0 )
               {
                  ConFiancoFinDx = 1
                  idx_fiaf_dx = wk_ff_dx[1]
               }

               if( wk_idx_agg2 == ATTUALE() )
               {
                  ConFiancoFinDx = 1
                  idx_fiaf_dx = wk_ff_dx[1]
               }
            }
         }
      }
   }

   PROCEDURA Cuc_Offset_ScoccaT
   {
      TipoScocca_prec = TipoScocca

      GOSUB SettaPosizioneBase
      if( TipoScocca != TipoScocca_prec)
      {
         COMANDO(STRCAT("RICALCOLA_UNA ", STR(ATTUALE()) , " no_agganciati //Offset ",NOME(ATTUALE())))
         COMANDO(STRCAT("M4_UPDATEREF ", STR(ATTUALE()) , " no_agganciati //Offset ",NOME(ATTUALE())))
      }
   }

   PROCEDURA SettaPosizioneBase
   {
      if( NOME(ATTUALE())=="ScoccaT_BaseLvst" ) { EXITSUB() }

      //Colonne posizione definita a composto
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")
        & NOME(ATTUALE())!="ScoccaT_ColTamponamento"
        & NOME(ATTUALE())!="ScoccaT_ColTamponamentoApribile"
        ) { EXITSUB() }

      //OnQueryBdmLocal
      if( ACTION()==-12 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            liv0y = $M4_DragInfo_Snap.y
            if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
            {
               SET_#($M4_DragInfo_Ref)
               wk_alto_M4_ref = #alto_0.y
               wk_base_M4_ref = #base_0.y

               wk_diff = wk_alto_M4_ref - Y

               if( wk_diff <= 17 )      { liv0y = 0 ric = 1 }

               if( wk_diff == 17
                 & wk_base_M4_ref<0.1 ) { liv0y = 0 }

               //liv0y = $M4_DragInfo_Snap.y + VAR_VAL($M4_DragInfo_Ref,"Yt") - VAR_VAL($M4_DragInfo_Ref,"Y")
               //DISPLAY2(STRCAT("BP ---> $M4_DragInfo_Snap.y=" , STR($M4_DragInfo_Snap.y), " - " ))
               //DISPLAY2(STRCAT("BP ---> VAR_VAL($M4_DragInfo_Ref,Yt)=" , STR(VAR_VAL($M4_DragInfo_Ref,"Yt")), " - " ))
               //DISPLAY2(STRCAT("BP ---> VAR_VAL(ATTUALE(),Y) =" , STR(VAR_VAL(ATTUALE(),"Y") ), " - " ))
            }

            //Luca 14/02/2019
            if( NOME($M4_DragInfo_Ref)=="BarraIsola" )
            {
               if( $M4_DragInfo_Snap.y<=17 )  { liv0y = 0 }
            }

            //se filo basso di base a terra
         }
         else
         {
            liv0y = $M4_DragInfo_Snap.y

            //se sono a pavimento, chiedo livello di inserimento
            id_wall = $M4_DragInfo_WallIdx
            ChiediY = 0

            r = QUERY_WALL(0,"listfloor")
            i = 1
            while ( i<=$Query_Wall & ChiediY==0 )
            {
               if( $Query_Wall[i]==id_wall ) { ChiediY = 1 }
               i = i + 1
            }

            //Luca 15/02/2021
            if( NOME(ATTUALE()) == "ScoccaT_BaseFrigo" ) { ChiediY = 0 }

            //Luca 06/04/2022
            if( NOME(ATTUALE()) == "ScoccaT_Base_AirKitchen" ) { ChiediY = 0 }

            if( ChiediY )
            {
               r = CHIEDI(-1,"ChiediLivInsCS")
               $query_p1 = $M4_DragInfo_Snap
               $query_p1.y = $ChiediLivInsCS
               $query_p2 = 0

               $QueryResult__ = 1
            }
            else
            {
               wk_a_muro = 1
            }

            //Luca 23/05/2019
            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_B*") )
            {
               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " M4_FIX_Y=0"))
            }
         }
      }
      else
      {
         liv0y = base_0.y

         if( liv0y==17 )
         {
            liv0y = 0
            ric = 1
            if( ACTION()==2 & $OnLoadOrder==0 & ric==1) { COMANDO(STRCAT("RICALCOLA ",STR(ATTUALE())," //SettaPosizioneBase")) }
         }
      }

      TipoScocca = 0
      if( liv0y>0.1 ) { TipoScocca = 2 }

      wk_dist = QUERY_WALL(ATTUALE(),"distance from face R")

      //Luca 26/06/2020
      //aggiungo controllo per base posizionata ad angolo
      wk_pos = TIPO_POS(ATTUALE())
      //se agganciata ad angolo, sempre a parete
      if( wk_pos==2 )  { wk_dist = 0 }

      if( wk_dist>0 )
      {
         if( TipoScocca==0 ) { TipoScocca = 1 }
         else                { TipoScocca = 3 }
      }

      //altezza zoccoli
      //Cuc_Alt_Zoc = SE_NUM(TipoScocca==0,$Cuc_Alt_Zoc,0)
   }

   PROCEDURA VICINESXDX_cuc
   {
      if( ACTION()<=0 | ACTION()==2 ) { EXITSUB() }

      // In input  idx_test,match,dove
      // In output idx_sx, idx_dx

      idx_dx = -1
      idx_sx = -1

      //nel caso di più basi a sx/dx
      //mi salvo in questa variabile sempre la più alta
      idx_alto_dx = -1
      idx_alto_sx = -1

      //possibilità di gestire una tolleranza, in mm, sull'identificativo filo-alto, filo-basso
      if( VAR_EXIST(-1,"toll_filoA_VICINE")==0 ) { $toll_filoA_VICINE = 0   }
      if( VAR_EXIST(-1,"toll_filoB_VICINE")==0 ) { $toll_filoB_VICINE = 0   }

      //if( VAR_EXIST(-1,"CtrlContro")==0 )        { $CtrlContro = 0 }

      if( IS_IDX(idx_test)==0 ) { EXITSUB() }

      if( VAR_EXIST(idx_test,"base_0")==0 ) { EXITSUB() }
      if( VAR_EXIST(idx_test,"alto_2")==0 ) { EXITSUB() }

      SET_#(idx_test)
      if( VAR_EXIST(idx_test,"base_so")
        & VAR_EXIST(idx_test,"alto_ne") ) { bas0 = #base_so alt0 = #alto_ne }
      else                                { bas0 = #base_0  alt0 = #alto_2  }

      usa_nearg = 0
      if( VAR_EXIST(idx_test,"idx_cnear_sx") & VAR_EXIST(idx_test,"idx_cnear_dx") )
      {
         SET_#(idx_test)
         if( IS_IDX(#idx_cnear_sx) & IS_IDX(#idx_cnear_dx) )  { usa_nearg = 1 }
      }

      if( usa_nearg==1 )
      {
         SET_#(idx_test)
         BOX_MODE(0)
         NEAR_GLOBALE("SX__",#idx_cnear_sx,6,1,match)
         NEAR_GLOBALE("DX__",#idx_cnear_dx,6,1,match)

         //Luca 19/10/2020
         if( VAR_VAL_STR(ATTUALE(),"match2") != ""  )
         {
            NEAR_GLOBALE("SX__2",#idx_cnear_sx,6,1,match2)
            NEAR_GLOBALE("DX__2",#idx_cnear_dx,6,1,match2)

            while( SX__2 > 0)
            {
               ne = SX__ + 1     SX__ = ne      SX__[ne] = SX__2[SX__2]
               SX__2 = SX__2 - 1
            }

            while( DX__2 > 0)
            {
               ne = DX__ + 1     DX__ = ne      DX__[ne] = DX__2[DX__2]
               DX__2 = DX__2 - 1
            }
         }
      }
      else
      {
         //Luca 25/02/2019 per trovare anche gli elementi con fianchi di finitura
         SET_TOLLERANZA_ANALISISXDX(4)
         $wk_ret = ANALISI_SXDX(idx_test,match,1)
      }

      //ordino gli array generati
      //cosi da averli in ordine di altazza
      SORT_POINT(base_0,"SX__","base_3")
      SORT_POINT(base_3,"DX__","base_0")

      SET_#(idx_test)

      //cancello me stesso dagli array
      DelFromArray(idx_test,"DX__",0,idx_test,"")
      DelFromArray(idx_test,"SX__",0,idx_test,"")

      vic_dx = #DX__
      vic_sx = #SX__

      if ( vic_dx>0 )
      {
         i=1
         //while( i<=vic_dx & idx_dx==-1)
         while( i<=vic_dx )
         {
            ang_test = ANG_TOT2(idx_test)
            SET_#(idx_test)
            temp_idx=#DX__[i]

            if( temp_idx!=idx_test )
            {
               SET_#(temp_idx)

               idx_vic = -1

               if ( STRCMP(dove,"FB")==0 )
               {
                  deltafb = ABS(#base_0.y -bas0.y)
                  if( deltafb<=$toll_filoB_VICINE )     { idx_vic=temp_idx   }
               }
               if ( STRCMP(dove,"FA")==0 )
               {
                  deltafa = ABS(#alto_2.y-alt0.y)
                  if( deltafa<=$toll_filoA_VICINE )     { idx_vic=temp_idx   }
               }

               if ( STRCMP(dove,"*")==0 )               { idx_vic=temp_idx   }

               if ( ABS(bas0.y-#alto_2.y)<1 )           { idx_vic=-1 }
               if ( ABS(alt0.y-#base_0.y)<1 )           { idx_vic=-1 }

               if( IS_IDX(idx_dx)==0 ) { idx_dx     = idx_vic }
               else                    { idx_alto_dx = idx_vic }

               //if ( STRCMP($CtrlAlias,"")!=0 & IS_IDX(idx_dx))
               //{  if ( HAS_ALIAS(idx_dx,$CtrlAlias)==0 )       { idx_dx=-1 }   }

//             //fc 150219 verifico che l'angolo della struttura vicina non sia opposto a quella di test
//             if( $CtrlContro==1 & temp_idx!=-1 )
//             {
//                ang_dx = ANG_TOT2(temp_idx)
//                ang_dif = ABS(ang_test-ang_dx) -180
//                //scocca contrapposta
//                if( ang_dif>=-2 & ang_dif<=2 ) { idx_dx = -1 }
//             }
            }
            i=i+1
         }

         if( IS_IDX(idx_dx)==1 & IS_IDX(idx_alto_dx)==0 ) { idx_alto_dx = idx_dx }
      }

      SET_#(idx_test)
      if ( vic_sx>0 )
      {
         i=1
         //while( i<=vic_sx & idx_sx==-1)
         while( i<=vic_sx )
         {
            ang_test = ANG_TOT2(idx_test)
            SET_#(idx_test)
            temp_idx=#SX__[i]

            if( temp_idx!=idx_test )
            {
               SET_#(temp_idx)

               idx_vic = -1

               if ( STRCMP(dove,"FB")==0 )
               {
                  deltafb = ABS(#base_0.y -bas0.y)
                  if( deltafb<=$toll_filoB_VICINE )     { idx_vic=temp_idx   }
               }
               if ( STRCMP(dove,"FA")==0 )
               {
                  deltafa = ABS(#alto_2.y-alt0.y)
                  if( deltafa<=$toll_filoA_VICINE )     { idx_vic=temp_idx   }
               }

               if ( STRCMP(dove,"*")==0 )               { idx_vic=temp_idx   }

               if ( ABS(bas0.y-#alto_2.y)<1 )           { idx_vic=-1 }
               if ( ABS(alt0.y-#base_0.y)<1 )           { idx_vic=-1 }

               if( IS_IDX(idx_sx)==0 ) { idx_sx = idx_vic }
               else                    { idx_alto_sx = idx_vic }

               //if ( STRCMP($CtrlAlias,"")!=0 & IS_IDX(idx_sx) )
               //{  if ( HAS_ALIAS(idx_sx,$CtrlAlias)==0 )        { idx_sx=-1 }   }

//             //fc 150219 verifico che l'angolo della struttura vicina non sia opposto a quella di test
//             if( $CtrlContro==1 & temp_idx!=-1 )
//             {
//                ang_sx = ANG_TOT2(temp_idx)
//                ang_dif = ABS(ang_test-ang_sx) -180
//                //scocca contrapposta
//                if( ang_dif>=-2 & ang_dif<=2 ) { idx_sx = -1 }
//             }
            }
            i=i+1
         }

         if( IS_IDX(idx_sx)==1 & IS_IDX(idx_alto_sx)==0 ) { idx_alto_sx = idx_sx }
      }

      //azzero controllo dell'alias
      //$CtrlAlias = ""
      //$CtrlContro = 0

      $toll_filoA_VICINE = 0
      $toll_filoB_VICINE = 0
   }

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

      if( Verso==Verso_prec )  { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA ",STR(ATTUALE()), " // ",NOME(idx_att) , " ImpostaVersoPrec"))

      Verso_prec = Verso

//    COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Verso_prec=",STR(Verso)))
//      //fc 140922 lancio RICALCOLA invece che RICALCOLA_UNA perchè voglio
//      //effettivamente sia ricalcolato il top level ed i figli e
//      //le strutture eventalmente agganciate!!
//      COMANDO(STRCAT("RICALCOLA ",STR(idx_att)))
//      if( IS_VAR_FIXED(idx_att,"Verso_prec") )
//      {  COMANDO(STRCAT("RIGENERA     // ivp ",NOME(idx_att)))  }
//
//// Serve per il posizionamento ad angolo
//      if( IS_VAR_FIXED(idx_att,"Verso_prec")
//        & ang!=90 & ang_prec!=ang & $OnLoadOrder==0 )
//      {
//         ang_prec=ang
//         COMANDO(STRCAT("RICALCOLA ",STR(idx_att)))
//      }

//      FuoriMisura = ""
//      if(ang!=90)   {   FuoriMisura = "FM"      }
   }

   PROCEDURA CtrlColonne
   {
      if(ACTION()<0 | COMPONENDO() )   {  EXITSUB()   }

      //Luca 21/04/2021
      //if( NOME(ATTUALE()) == "ScoccaT_ColFalegnameria" ) { GOSUB SettaPosizioneBase }

      if( $OnLoadOrder )               { EXITSUB() }

      //GOSUB CtrlQuantita

      idx_test = ATTUALE()
      match = "ScoccaT_*"
      dove  = "*"
      GOSUB VICINESXDX_cuc

      if( VAR_VAL(idx_att,"VAR_Vuoto")==1 & $ATTIVA_DLL==1 )
      {  HIDE_ON_EDIT(idx_att,"GEST_*",VAR_Vuoto)  }

      //GOSUB AggFiloFronte
      //GOSUB CtrlInRiposBasi

      //Luca 26/02/2019
      GOSUB CtrlPresenzaBifacciale

      //Luca 26/02/2019
      GOSUB CtrlPresenzaFiancoFinitura

      //Simone 23/06/2022
      COMPONENTI2("wk_anta_estr",ATTUALE(),"Cuc_AntaEstraibile")
      Col_Estraibile = 0
      if( wk_anta_estr > 0 ) { Col_Estraibile = 1 }

      COMPONENTI2("wk_mec_estr",ATTUALE(),"Cuc_MeccanismoEstraibile")
      wk_mec_side     = 0
      wk_mec_estr_num = 0
      while(inc(wk_mec_estr_num) <= wk_mec_estr )
      {
         wk_mec_estr_idx = wk_mec_estr[wk_mec_estr_num]
         if( VAR_VAL(wk_mec_estr_idx, "TipoEstraibile") == 3 ) { wk_mec_side = 1 }
      }
   }

   PROCEDURA AggFiloFronte
   {
      if(ACTION()<0 | COMPONENDO() )   { EXITSUB()   }

      if( ACTION()==0 | $ATTIVA_DLL==0
        | INSERIMENTO2(ATTUALE())==$ins2_accessorio
        //| idx_att!=idx_topl
        | $ATTIVA_AGGANCIA==0 )        { EXITSUB()   }

      HIDE_ON_EDIT(idx_att,"AgganciaFiloFronte",0)

      if( VAR_VAL(idx_att,"AgganciaFiloFronte")==1 )
      {
         //verifico se sono agganciato retro
         agg = AGGANCIATA(ATTUALE(),"d - 0, b + 0, r + 0, 0 0 0 0")
         if( agg!=-1 )
         {
            COMANDO(STRCAT("SETTA ", STR(ATTUALE())))
            COMANDO("CONNESSIONE_EDIT DFB")
         }
         else
         {
            agg = AGGANCIATA(ATTUALE(),"s - 0, b + 0, r + 0, 0 0 0 0")
            if( agg!=-1 )
            {
               COMANDO(STRCAT("SETTA ", STR(ATTUALE())))
               COMANDO("CONNESSIONE_EDIT SFB")
            }
         }
      }
      else
      {
         //verifico se sono agganciato fronte
         agg = AGGANCIATA(ATTUALE(),"d - 0, b + 0, f + 0, 0 0 0 0")
         if( agg!=-1 )
         {
            COMANDO(STRCAT("SETTA ", STR(ATTUALE())))
            COMANDO("CONNESSIONE_EDIT DRB")
         }
         else
         {
            agg = AGGANCIATA(ATTUALE(),"s - 0, b + 0, f + 0, 0 0 0 0")
            if( agg!=-1 )
            {
               COMANDO(STRCAT("SETTA ", STR(ATTUALE())))
               COMANDO("CONNESSIONE_EDIT SRB")
            }
         }
      }
   }

   //procedura per basi/colonne
   PROCEDURA Cuc_cancella_std2
   {
      //Luca 20/03/2019
      //cancello tutti i bifacciali e fianchi di finitura agganciati
      //AGGANCIATI("wk_agg","*",ATTUALE())
      AGGANCIATI("wk_bif","*",ATTUALE())

      i = 1
      while ( i<=wk_bif  )
      {
         if( NOME(wk_bif[i])=="Cuc_AntaBifacciale"
           | NOME(wk_bif[i])=="FiancoFinitura"  )
         {
            COMANDO(STRCAT("DELETE ",STR(wk_bif[i])," //cancella ",NOME(ATTUALE())))
         }
         i = i + 1
      }

      //Luca 30/03/2020 ricalcolo eventuale base angolo
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Bas*") )
      {
         if( VAR_EXIST(ATTUALE(),"idx_sx") )
         {
            if( IS_IDX(idx_sx)==1 )
            {
               if( NOME(idx_sx)=="ScoccaT_BaseAngPan"
                 | NOME(idx_sx)=="ScoccaT_ColAngPan"  )
               {
                  COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_sx) , " no_agganciati //cancella di ",NOME(ATTUALE()) ))
               }
            }

            if( IS_IDX(idx_dx)==1 )
            {
               if( NOME(idx_dx)=="ScoccaT_BaseAngPan"
                 | NOME(idx_dx)=="ScoccaT_ColAngPan"  )
               {
                  COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_dx) , " no_agganciati //cancella di ",NOME(ATTUALE()) ))
               }
            }
         }
      }

      if( $ATTIVA_AGGANCIA!=0 )
      {
         //rendo posizionate le strutture agganciate a me
         AGGANCIATI("strutt",$cnt_all,ATTUALE())
         while (strutt>0)
         {
            idx_str=strutt[strutt]
            COMANDO2(STRCAT("LINK2POS ",STR(idx_str)))
            strutt=strutt-1
         }
      }

      //cancellando la struttura devo portare a 0 la variabile nella base angolo 135
      if( VAR_VAL(idx_att,"dentro_ang135")==1 )
      {
         NEAR_GLOBALE("Ang135",ATTUALE(),10,$ignora_esclusi,"ScoccaT_BaseAng135*")
         if(Ang135>0)
         {
            if( VAR_VAL(Ang135[Ang135],"piena")==1 )
            {
               DEL_VAR_MODIFICATE(Ang135[Ang135],"piena")
               SET_#(Ang135[Ang135])
               #piena = 0
            }
         }
      }
   }

//{ procedure posiziona
   PROCEDURA Cuc_PosaFustoStd
   {
      if( VAR_VAL( ATTUALE(), "VAR_Vuoto") == 1 ) { @escluso = 1 }

      GOSUB posa_blocco

      if( VAR_EXIST(idx_att,"Y_Scocca") ) { @Y = Y_Scocca }
      else                                { @Y = Y - $Cuc_RidY_Sco }

      if( VAR_VAL(idx_att,"Spe_Fia_Sx") > 0)     { @base_0.x = base_0.x +Spe_Fia_Sx   }

      if( VAR_EXIST( idx_att,"Cuc_Alt_Zoc")
        & IS_MATCH( nome_att, "ScoccaS_*") != 1) { @base_0.y = base_0.y + Cuc_Alt_Zoc }

      if( IS_MATCH( nome_att, "ScoccaT_Col*") == 1)
      {
         @Y = Y

         if( IS_MATCH( MODELLO_SPECIALE, "CUCINE_3.0_BETA1*") == 1)
         {
            @Z = Z + $Cuc_Spe_Ant_Col - $Cuc_Spe_Ant
         }
      }

      @ZFiaSx = @Z
      @ZFiaDx = @Z

      if( VAR_VAL( ATTUALE(), "escluso") == 0
        & IS_MATCH( NOME(ATTUALE()), "*Fusto*") == 1) { idx_fusto = ATTUALE() }
   }

   PROCEDURA PosaPiedino
   {
      @base_0 = base_0
      @X = Cuc_Dia_Pie
      @Y = Y
      @Z = Cuc_Dia_Pie
   }

   PROCEDURA Cuc_PosaPiedini
   {
      @escluso = 0
      if( Cuc_Alt_Zoc == 0 )            { @escluso = 1 }
      if( $PLIKO_DisabilitaGrafica > 0) { @escluso = 1 }

      GOSUB Posa_Elemento

      @Y = Cuc_Alt_Zoc
   }

   PROCEDURA Cuc_PosaFiaSx
   {
      @Y = Y
      if( VAR_VAL( idx_att, "VAR_Fianco_Alto") < 0
        | VAR_VAL( idx_att, "VAR_Fianco_Alto") == 2) { @Y = Y + $Cuc_RidY_Sco }
      @Z = ZFiaSx

      @base_0 = base_0
      @base_0.x = base_0.x + $Cuc_Spe_Fia -@X
      if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )
      {  @base_0.x = base_0.x +$Cuc_Spe_Fia_Giorno -@X     }

      @base_0.z = base_0.z + Z - ZFiaSx
      //gestione gole riduci fianco
      if( VAR_VAL(PADRE(ATTUALE(),2),"PosizGolaVSx") )  {  @base_0.z = base_0.z    }

      //sbordo verso retro
      if( @Z>ZFiaSx & VAR_EXIST(ATTUALE(),"base_0_offset")==0 )
      {  @base_0.z = base_0.z -(@Z -ZFiaSx)   }

      @Verso = -1
   }

   PROCEDURA Cuc_PosaFiaDx
   {
      @Y = Y
      if( VAR_VAL( idx_att, "VAR_Fianco_Alto") > 0) { @Y = Y + $Cuc_RidY_Sco }
      @Z = ZFiaDx

      @base_0.x = base_0.x +X -$Cuc_Spe_Fia
      if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )
      {  @base_0.x = base_0.x +X -$Cuc_Spe_Fia_Giorno  }

      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z -ZFiaDx

      if( VAR_VAL(PADRE(ATTUALE(),2),"PosizGolaVDx") )  {  @base_0.z = base_0.z    }

      if( @Z>ZFiaDx & VAR_EXIST(ATTUALE(),"base_0_offset")==0 )
      {  @base_0.z = base_0.z -(@Z -ZFiaDx)   }

      @Verso = 1
   }

   PROCEDURA Cuc_PosaFnd
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y + $Cuc_Aria_Fnd_Fia_Y
      @base_0.z = base_0.z + $Cuc_Rie_Fnd_ZR

      @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Z - $Cuc_Rie_Fnd_ZR - $Cuc_Rie_Fnd_ZF

      if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )
      {
         @base_0.x = base_0.x +$Cuc_Spe_Fia_Giorno + $Cuc_Aria_Fnd_Fia_X
         @X = X - 2*$Cuc_Aria_Fnd_Fia_X - 2*$Cuc_Spe_Fia_Giorno
      }
   }

   PROCEDURA Cuc_PosaSch
   {
      @X = X - 2*$Cuc_Spe_Fia
      @Y = Y - $Cuc_Spe_Fnd - $Cuc_Rie_Sch_YA

      @base_0.x = base_0.x + $Cuc_Spe_Fia
      @base_0.y = base_0.y + $Cuc_Spe_Fnd + $Cuc_Aria_Fnd_Fia_Y
      @base_0.z = base_0.z + Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z

      //se catena retro è verticale( presuppongo sia catena verticale di serie )
      if( VAR_VAL( idx_att, "VAR_CatR_OV") == 1)
      {
         @Y = Y - $Cuc_Spe_Fnd - $Cuc_Larg_Cat - $Cuc_Aria_Fnd_Fia_Y - $Cuc_Aria_Cop_Fia_Y
      }

      if( VAR_VAL( ATTUALE(), "VAR_Giorno") == 1)
      {
         @base_0.x = base_0.x + $Cuc_Spe_Fia_Giorno
         @base_0.y = base_0.y + $Cuc_Spe_Fnd_Giorno + $Cuc_Aria_Fnd_Fia_Y

         @X = X - 2*$Cuc_Spe_Fia_Giorno
         @Y = Y - $Cuc_Spe_Fnd_Giorno - $Cuc_Spe_Cop_Giorno - $Cuc_Aria_Fnd_Fia_Y - $Cuc_Aria_Cop_Fia_Y
         if( VAR_VAL( idx_att, "VAR_CatR_OV") == 1)
         {
            @Y = Y - $Cuc_Spe_Fnd_Giorno - $Cuc_Larg_Cat - $Cuc_Aria_Fnd_Fia_Y - $Cuc_Aria_Cop_Fia_Y
         }
      }

      //LZ 25/03/2022: nuovo caso, la schiena non deve essere tolta.
      //               Inserisco una schiena centrale, H200, filo retro, per il trasporto.
      //               Vedi PROCEDURA CtrlRidFustoBase
      if( VAR_VAL( idx_att, "ConSchiena") < 0)
      {
         if( @Y > $Cuc_Alt_SchRid )
         {
            @base_0.y = @base_0.y + (@Y - $Cuc_Alt_SchRid)/2
            @Y = $Cuc_Alt_SchRid
         }

         @base_0.z = base_0.z + 2
      }

      if( Cucina_Versione > 2)
      {
         if( VAR_VAL( ATTUALE(), "VAR_Giorno") == 1) { @Y = Y - 1 }

         @base_0.y = @base_0.y + 0.5
         //if( Z < 382) { @base_0.z = base_0.z + 5 }
      }
   }

   PROCEDURA Cuc_PosaCop
   {
      @base_0.x = base_0.x + $Cuc_Spe_Fia + $Cuc_Aria_Cop_Fia_X
      @base_0.y = alto_2.y - $Cuc_Spe_Cop - $Cuc_Aria_Cop_Fia_Y
      @base_0.z = base_0.z + $Cuc_Rie_Cop_ZR
      @X = X - 2 * $Cuc_Aria_Cop_Fia_X - 2*$Cuc_Spe_Fia
      @Z = Z - $Cuc_Rie_Cop_ZR - $Cuc_Rie_Cop_ZF

      if( IS_MATCH(VAR_VAL_STR(PADRE(ATTUALE(),2),"StrPerGola"),"A*") )
      {  @Z = Z - $Cuc_Rie_Cop_ZR - $Cuc_Rie_Cop_ZF -$Cuc_Spe_GolaSF  }

      if( VAR_VAL(ATTUALE(),"VAR_Giorno")==1 )
      {
         @base_0.x = base_0.x + $Cuc_Spe_Fia_Giorno
         @base_0.y = alto_2.y - $Cuc_Spe_Cop_Giorno - $Cuc_Aria_Cop_Fia_Y
         @X = X -2*$Cuc_Spe_Fia_Giorno
      }
   }

   PROCEDURA Cuc_PosaCatFroAlta
   {
      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = alto_2.y -$Cuc_Aria_Cop_Fia_Y -@Y
      @base_0.z = base_0.z +Z -@Z -$Cuc_Rie_Cat_ZF
      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X

      if( IS_MATCH(VAR_VAL_STR(idx_att,"StrPerGola"),"*A*") )
      {  @base_0.y = alto_2.y -$Cuc_Aria_Cop_Fia_Y -@Y -$Cuc_Alt_GolaSF }
      @FronteRetro = "F"

      //Luca 14/04/2021
      //mantis 24084: Basi cucina: spostamento barra frontale se ruotata
      if( VAR_VAL(@idx_att,"RuotaCatena") == 1 )
      {
         if( VAR_EXIST(GetTopLevel(idx_att),"idx_cescas_sup") == 1 )
         {
            SET_#(GetTopLevel(idx_att))
            if( IS_IDX(#idx_cescas_sup) )
            {
               if( VAR_VAL(#idx_cescas_sup,"ConManigliaFLAPP")==1 ) { @base_0.z = @base_0.z - 4 }
            }
         }
      }

      //Luca 06/10/2020 mantis 023477: Barra frontale basi cucina: possibilità di ruotarla
      //@ang_x = 0
      //if( VAR_VAL(ATTUALE(),"RuotaCatena") == 1 )
      //{
      //   @ang_x = 90
      //   @base_0.y = @base_0.y + @Y
      //   @base_0.z = @base_0.z + 10
      //}
   }

   //catena alta retro filo del fianco
   PROCEDURA Cuc_PosaCatRtrAlta
   {
      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = alto_2.y - $Cuc_Aria_Cop_Fia_Y - @Y
      @base_0.z = base_0.z + $Cuc_Rie_Cat_ZR
      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @FronteRetro = "R"

      //Luca 12/07/2019
      if( VAR_VAL(idx_att,"ConPianoSNACK")==1 )
      {
         @base_0.z = base_0.z + 49

         //Luca 09/01/2020 VAR_REVISIONE
         if( VAR_VAL(PADRE(idx_att,1),"ConPianoSNACK_Rev01")==1 ) { @base_0.z = base_0.z + 5 }
      }

      //Luca 06/10/2020 mantis 023477: Barra frontale basi cucina: possibilità di ruotarla
      //@ang_x = 0
      //if( VAR_VAL(ATTUALE(),"RuotaCatena") == 1 )
      //{
      //   @ang_x = 90
      //   @base_0.y = @base_0.y + @Y
      //}

      //Luca 21/11/2019
      //non sposto mai con il bifacciale
      if( VAR_VAL( ATTUALE(), "ConBifacciale") == 1 ) { EXITSUB() }

      //Luca 03/12/2020 riporto modifiche fatte da LAGO
      //Modifica fresata
      //Luca 21/11/2019
      //if( VAR_VAL(idx_att,"VAR_LavPC_FiaSx")==1
      //  | VAR_VAL(idx_att,"VAR_LavPC_FiaDx")==1  )  { @base_0.y = alto_2.y - 50 - @Y }
      if( VAR_VAL(idx_att,"VAR_LavPC_FiaSx")==1
        | VAR_VAL(idx_att,"VAR_LavPC_FiaDx")==1  )  { @base_0.y = alto_2.y - 48 - @Y }
   }
   //catena bassa fronte filo del fianco
   PROCEDURA Cuc_PosaCatFroBassa
   {
      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y +$Cuc_Aria_Fnd_Fia_Y
      @base_0.z = base_0.z +Z -@Z -$Cuc_Rie_Cat_ZF
      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @FronteRetro = "F"
   }
   //catena Bassa retro filo del fianco
   PROCEDURA Cuc_PosaCatRtrBassa
   {
      @base_0.x = base_0.x +$Cuc_Spe_Fia +$Cuc_Aria_Fnd_Fia_X
      @base_0.y = base_0.y +$Cuc_Aria_Fnd_Fia_Y
      @base_0.z = base_0.z +$Cuc_Aria_Fnd_Fia_X
      @X = X - 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Fnd_Fia_X
      @FronteRetro = "R"
   }
//} procedure posiziona

//{ procedure assegnazioni gestionali

   PROCEDURA Set_Verso
   {
      set_verso = 1
      if( IS_VAR_FIXED( ATTUALE(), "Verso") == 1 ) { EXITSUB()  }

      wk_verso_gest = VAR_VAL_STR( ATTUALE(), "GEST_C007")
      if( wk_verso_gest == "DX001" )               { Verso = 1  }
      if( wk_verso_gest == "SX001" )               { Verso = -1 }
   }

   //Luca 09/01/2019
   //definisco in automatico il verso in caso di anta in coppia, se singola eredita dal padre
   PROCEDURA Set_Gest_C007_AntaSing
   {
      if( VAR_EXIST(ATTUALE(),"AntaInCoppia")==0 ) { EXITSUB() }

      if( AntaInCoppia==0 )
      {
         //Luca 02/04/2020
         if( UN_PADRE("ArmadioAngoloWTL_Arm20") )
         {
            if( Verso<0 ) { GEST_C007 = "SX001" }
            if( Verso>0 ) { GEST_C007 = "DX001" }

            VarAdd = "GEST_C007"   GOSUB Add_TABER_VARSETTATE
         }

         EXITSUB()
      }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C007") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C007") }

      if( Verso<0 ) { GEST_C007 = "SX001" }
      if( Verso>0 ) { GEST_C007 = "DX001" }

      VarAdd = "GEST_C007"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C008_AntaSing
   {
      if( ACTION() <= 0 | ACTION() == 2  )          { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C008") == 0 ) { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C031") == 0 ) { EXITSUB() }

      CAT_VM_var = "C008"
      CAT_VM_opz = "PF018"
      CAT_VM_sel = ""

      if( Alleggerita == 1
        & Is_In_StrArray( GEST_C031, "FR002;FR031", ";") == 1) { AddVal_CAT_VM_sel( CAT_VM_sel , "PF018") }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C031_AntaSing
   {
      if( Cucina_Versione <= 2)             { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2)    { EXITSUB() }

      VarAdd = "GEST_C031"
      if( IS_VAR_FIXED( ATTUALE(), VarAdd)) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }
      if( VAR_EXIST( idx_pdr_gest, VarAdd)) { EXITSUB() }

      // AP001: Estraibile
      // FR001: Frigo autoportante
      // FR002: Frigo traino
      // FR031: Dispensa a traino
      GEST_C031 = SE_STR( nome_att == "Cuc_AntaEstraibile", "AP001", "FR031")
      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Ctrl_AntaSing_Frigo
   {
      if( $OnLoadOrder == 1)                               { EXITSUB() }
      if( IsIdx( ATTUALE(), "idx_near_centro") != 1)       { EXITSUB() }
      if( IS_VAR_FIXED( ATTUALE(), "FLAG_AntaFrigo") == 1) { EXITSUB() }

      FLAG_AntaFrigo = 0

      BOX_MODE(0)
      NEAR_GLOBALE( "wk_frigo", idx_near_centro, 5, 1, "_cont_per_near_2")

      wk_frigo_num = 1
      while( FLAG_AntaFrigo == 0
           & wk_frigo_num <= wk_frigo)
      {
         wk_frigo_att = wk_frigo[wk_frigo_num]

         if( VAR_VAL( wk_frigo_att, "FLAG_Frigo") > 0
           & PADRE( ATTUALE(), -1) == PADRE( wk_frigo_att, -1)) { FLAG_AntaFrigo = 1 }

         wk_frigo_num = wk_frigo_num + 1
      }
   }

   PROCEDURA Set_Gest_C008_BarraPenCaldaia
   {
      if( ACTION() <= 0 | ACTION() == 2  )          { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C008") == 0 ) { EXITSUB() }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM007"
      CAT_VM_sel = ""

      if( VAR_VAL_STR( ATTUALE(), "VAR_posizione") == "BF" )
      {
         COMPONENTI2( "wk_ant", PADRE(ATTUALE(),2), "Cuc_AntaSingola")
         if( wk_ant > 0 )
         {
            if( VAR_VAL( wk_ant[1], "AntaInCoppia") == 1 )  { CAT_VM_sel = CAT_VM_opz }
         }
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C008_CucFianco
   {
      if( ACTION() <= 0 | ACTION() == 2)           { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C008") == 0) { EXITSUB() }

      CAT_VM_var = "C008"
      CAT_VM_opz = "PC001;PF030;SM074;SM028"
      CAT_VM_sel = ""

      if( VAR_VAL( ATTUALE(), "VAR_LavPC") > 0)    { AddVal_CAT_VM_sel( CAT_VM_sel, "PC001") }

      if( FLAG_soffietto > 0
        & VAR_RevBarraInfLvtrSoff > 0
        & VAR_VAL( ATTUALE(), "TipoScocca") == 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel, "PF030") }

      if( Con_Led > 0) { AddVal_CAT_VM_sel( CAT_VM_sel, SE_STR( Cucina_Versione > 2, "SM074", "SM028")) }

      GOSUB Gest_CAT_VM
   }

   //Simone 14/11/2022
   PROCEDURA Set_Gest_C002_Cuc_Fia
   {
      if( $CNP == 1 )                                          { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 )  { EXITSUB() }
      if( Cucina_Versione > 2)                                 { EXITSUB() }

      idx_topl = GetTopLevel(ATTUALE())

      // Esco se categoria non esiste
      if( VAR_EXIST(ATTUALE(),"GEST_C002") == 0 )              { EXITSUB() }

      // Esco se elemento speciale e fixato dall'utente
      if( IS_VarsUser__(ATTUALE(),"GEST_C002") == 1 )
      {
        if( VAR_VAL(idx_topl,"FLAG_Speciale") == 0
          & VAR_VAL_STR(ATTUALE(),"GEST_C160") != "S0000" )
        {
           DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C002")
           DEL_VARS_USER(ATTUALE(),"GEST_C002")
        }
        else                                                   { EXITSUB() }
      }

      // Reset valore
      wk_gest_C002 = "ME004"

      // Casi in cui deve rimanere bianco
      wk_check = 0
      if( VAR_VAL(ATTUALE(),"Verso") > 0
        & VAR_VAL(idx_topl,"ConFiancoFinDx") > 0 )                      { wk_check = 1 }

      if( VAR_VAL(ATTUALE(),"Verso") < 0
        & VAR_VAL(idx_topl,"ConFiancoFinSx") > 0 )                      { wk_check = 2 }

      if( UN_PADRE("ScoccaT_BaseLvst") )                                { wk_check = 3 }

      //Fianchi fusion
      NEAR_GLOBALE2( "wk_fia_ffus", ATTUALE(), 0.5, "FasciaFinitura_Fusion")
      if( wk_fia_ffus > 0 )                                             { wk_check = 4 }

      //In base a elementi vicini, eseguo solo se non sono nelle eccezioni
      wk_dis_y = 0
      wk_dis_z = 0
      if( wk_check == 0 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE2( "wk_fia_lvst", ATTUALE(), 5, "Cuc_FiancoLvst")
         NEAR_GLOBALE2( "wk_fia_cant", ATTUALE(), 5, "ScoccaT_BaseCantinetta")
         NEAR_GLOBALE2( "wk_fia_frig", ATTUALE(), 5, "ScoccaT_BaseFrigo")

         if( IS_IDX(idx_cnear_f) )
         {
            NEAR_GLOBALE2( "wk_fia", idx_cnear_f, 5, "Cuc_Fianco")
            NEAR_GLOBALE2( "wk_stop", idx_cnear_f, 5, "SottoTop_generico")
            MergeArray2Array( ATTUALE(), "wk_stop", "wk_fia")

            DelFromArray( ATTUALE(), "wk_fia", 0, ATTUALE(), "" )
            ArraySortVarNum( ATTUALE(), "wk_fia", "base0y_abs")

            wk_area_scoperta = Y

            wk_i = 1
            while( wk_i <= wk_fia )
            {
               wk_fia_att      = wk_fia[wk_i]
               wk_fia_att_b0y  = VAR_VAL( wk_fia_att, "base_0.y")
               if( wk_fia_att_b0y < base_0.y ) { wk_fia_att_b0y = base_0.y }

               wk_fia_att_a0y  = VAR_VAL( wk_fia_att, "alto_0.y")
               if( wk_fia_att_a0y > alto_0.y ) { wk_fia_att_a0y = alto_0.y }

               wk_fia_prev     = wk_fia_att
               wk_fia_prev_a0y = wk_fia_att_b0y
               if( wk_i > 1 )
               {
                  wk_fia_prev     = wk_fia[wk_i-1]
                  wk_fia_prev_a0y = VAR_VAL( wk_fia_prev, "alto_0.y")
               }

               if( wk_fia_att_b0y < wk_fia_prev_a0y ) { wk_fia_att_b0y = wk_fia_prev_a0y }

               wk_area_scoperta = wk_area_scoperta - ( wk_fia_att_a0y - wk_fia_att_b0y)

               //Considero che le colonne sono meno profonde delle basi, brutto
               if( UN_PADRE2( ATTUALE(), "ScoccaT_B*")
                    & UN_PADRE2( wk_fia_att, "ScoccaT_C*")
                    & VAR_VAL( ATTUALE(), "Z") != VAR_VAL( wk_fia_att, "Z")) { wk_dis_z = 1 }

               wk_i = wk_i + 1
            }

            if( FLOOR2(wk_area_scoperta, 1) > 0 ) { wk_dis_y = 1 }
         }

         wk_fia_rid = 0
         DelItem2Array( ATTUALE(), "wk_fia_frig", PADRE( ATTUALE(), 2), "")
         if( wk_fia_frig > 0 )
         {
            wk_idx_frigo = wk_fia_frig[1]
            wk_Verso = VAR_VAL(wk_idx_frigo,"Verso")
            wk_y     = VAR_VAL(wk_idx_frigo,"Y")
            wk_y_att = VAR_VAL(idx_topl,"Y")

            if( wk_y == wk_y_att
              & Verso == -wk_Verso ) { wk_fia_rid = 1 }
         }

         if( wk_fia_lvst +
             wk_fia_cant +
             wk_fia_rid  +
             wk_dis_y    +
             wk_dis_z    > 0 ) { wk_gest_C002 = "ME006" }
      }

      if( wk_gest_C002 != GEST_C002 )
      {
         GEST_C002 = wk_gest_C002
         VAR_SET_MODIFICATA(ATTUALE(),"GEST_C002","")
         VarAdd = "GEST_C002"  GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_Gest_C003_FiancoFinitura
   {
      VarAdd = "GEST_C003"

      if( VAR_EXIST( ATTUALE(), VarAdd) == 0) { EXITSUB() }
      if( IS_VAR_FIXED( ATTUALE(), VarAdd))   { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      //DX001 - Destra
      //SX001 - Sinistra
      //DX006 - Destro Col Lvst + Profilo L
      //sX006 - Sinistro Col Lvst + Profilo L
      gest_C003 = ""
      if( VAR_EXIST( ATTUALE(), "FF_PosizioneSD_Ref"))
      {
         if( FF_PosizioneSD_Ref == "DX") { gest_C003 = "DX001" }
         if( FF_PosizioneSD_Ref == "SX") { gest_C003 = "SX001" }
      }

      if( NOME(ATTUALE()) == "Cuc_FiancoFinLvst")
      {
         if( Verso > 0)                  { gest_C003 = "DX006" }
         if( Verso < 0)                  { gest_C003 = "SX006" }
      }

      GEST_C003 = gest_C003
      GOSUB Add_TABER_VARSETTATE
   }

   //Luca 01/03/2021
   //mantis 24371: Colonna cucina 368 con anta doppia: obbligo maniglia flapp
   PROCEDURA Set_Gest_C004_AntaSing368
   {
      //TODO: cucine 2.5/3.0, limitare per modello specifico, per il momento blocco tutto
      //if( Cucina_ModelloDsc != "36e8")             { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "AntaInCoppia") == 0)   { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "escludi_man") != 0)    { EXITSUB() }
      if( UN_PADRE("ScoccaT_Col*") != 1)              { EXITSUB() }
      if( TipoFrontale != 1)                          { EXITSUB() }

      gest_C004 = ""

      wk_idx_anta = VAR_VAL(PADRE(ATTUALE(),1),"idx_anta_dx")
      if( Verso > 0 )  { wk_idx_anta = VAR_VAL(PADRE(ATTUALE(),1),"idx_anta_sx") }

      if( IS_IDX(wk_idx_anta) == 0 )              { EXITSUB() }

      wk_gest_c004_att =  VAR_VAL_STR(ATTUALE(),"GEST_C004")
      if( wk_gest_c004_att == "" )  { wk_gest_c004_att =  VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C004") }

      wk_gest_c004_alt =  VAR_VAL_STR(wk_idx_anta,"GEST_C004")
      if( wk_gest_c004_alt == "" )  { wk_gest_c004_alt =  VAR_VAL_STR(GetTopLevel(wk_idx_anta),"GEST_C004") }

      gest_C004 = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C004")
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004")  ) { gest_C004 = VAR_VAL_STR(ATTUALE(),"GEST_C004") }

      CASO = "0"

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") == 0
        & IS_VAR_FIXED(wk_idx_anta,"GEST_C004") == 0  )
      {
         CASO = "A"
         if( Verso > 0 )  { gest_C004 = "MA001" }
      }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") == 0
        & IS_VAR_FIXED(wk_idx_anta,"GEST_C004") == 1  )
      {
         if( wk_gest_c004_alt == "PU001" ) { gest_C004 = "MA001" }
      }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") == 1
        & IS_VAR_FIXED(wk_idx_anta,"GEST_C004") == 1  )
      {
         if( Verso > 0 )
         {
            gest_C004 = "MA001"
         }
      }

      GEST_C004 = gest_C004
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") == 1 )
      {
         if( wk_gest_c004_att != gest_C004 ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C004") }
      }

      VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE

      ConManigliaFLAPP = 0
      if( VAR_VAL_STR(ATTUALE(),"GEST_C004")=="MA001"
        | VAR_VAL_STR(ATTUALE(),"gest_C004")=="MA001"  ) { ConManigliaFLAPP = 1 }
   }

   //Luca 14/11/2019
   PROCEDURA Set_Gest_C004_AntaSingNow
   {
      if( VAR_VAL( ATTUALE(), "AntaInCoppia") == 0)  { EXITSUB() }

      if( UN_PADRE( "ScoccaT_Col*") != 1)            { EXITSUB() }

      if( TipoFrontale != 2
        & TipoFrontale != 3
        & TipoFrontale != 4
        & TipoFrontale != 6)                         { EXITSUB() }

      VarAdd = "GEST_C004"

      if( Verso < 0)                                 { GEST_C004 = "AB002" }
      if( Verso > 0)                                 { GEST_C004 = "MA002" }

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) == 1)
      {
        if( VAR_VAL( ATTUALE(), "escludi_man") == 1) { EXITSUB() }

        DEL_VAR_MODIFICATE( ATTUALE(), VarAdd)
      }

      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C090_AntaSing
   {
      //Luca 25/09/2020
      //if( VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1 )
      //{
      //   GEST_C090 = "REV1"
      //   VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      //}

      //LZ 06/05/2021: le due ante non sono necessariamente dello stesso tipo
      //mi slego dal numero di ante e utilizzo invece l'effettivo posizionamento della maniglia
      //023945: Ante colonna: condizioni rev1
      //gentilmente ti chiedo di limitare i casi di attivazione della REV1 per la categoria C090.
      //Sarà infatti da attivare solo se:
      //- data inserimento >= data rev
      //- colonna a due ante
      //- maniglia flapp
      //
      //COMPONENTI2("wk_nrante",GetTopLevel(ATTUALE()) , "Cuc_AntaSingola")
      //
      //if( VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1
      //  & VAR_VAL(ATTUALE(),"ConManigliaFLAPP") == 1
      //  & wk_nrante == 2 )
      //{
      //   GEST_C090 = "REV1"
      //   VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      //}

      if( VAR_EXIST(ATTUALE(),"GEST_C090")
        & VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1 )
      {
        if( IS_VAR_FIXED(ATTUALE(),"GEST_C090")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C090") }

        GEST_C090 = "__"

        if( VAR_VAL_STR(ATTUALE(),"GEST_C004") == "MA001"
          & VAR_VAL_STR(ATTUALE(),"Man_Orie") == "V" )
        {
          if( VAR_VAL_STR(ATTUALE(),"Man_PosY") == "A"
            | VAR_VAL_STR(ATTUALE(),"Man_PosY") == "B" )
          {
            GEST_C090 = "REV1"
          }
        }

        VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_Gest_C115_AntaSing
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C115")==0 ) { EXITSUB() }

      gest_C115 = "__"

      if( VAR_VAL( ATTUALE(), "VAR_RidXVtrAnta") == 1 ) { gest_C115 = "SPE001" }

      if( GEST_C115 != gest_C115 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C115")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C115") }
         GEST_C115 = gest_C115
      }
      VarAdd = "GEST_C115"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C090_VetroAntaNow
   {
      //LZ 06/05/2021
      //Luca 04/05/2021 vedi modifiche sopra
      //Luca 25/09/2020
      //if( VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1 )
      //{
      //   if( GEST_C004 == "MA001" ) { GEST_C090 = "REV1" }
      //   else                       { GEST_C090 = "__" }
      //   VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      //}
      //
      //COMPONENTI2("wk_nrante",GetTopLevel(ATTUALE()) , "Cuc_AntaSingola")
      //
      //if( VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1
      //  & wk_nrante == 2 )
      //{
      //   if( GEST_C004 == "MA001" ) { GEST_C090 = "REV1" }
      //   else                       { GEST_C090 = "__" }
      //   VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      //}

      if( VAR_EXIST(ATTUALE(),"GEST_C090")
        & VAR_VAL(ATTUALE(),"VAR_Revisione_FLAPP") == 1 )
      {
        if( IS_VAR_FIXED(ATTUALE(),"GEST_C090")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C090") }

        GEST_C090 = "__"

        if( VAR_VAL_STR(ATTUALE(),"GEST_C004") == "MA001"
          & VAR_VAL_STR(idx_ant,"Man_Orie") == "V" )
        {
          if( VAR_VAL_STR(idx_ant,"Man_PosY") == "A"
            | VAR_VAL_STR(idx_ant,"Man_PosY") == "B" )
          {
            GEST_C090 = "REV1"
          }
        }

        VarAdd = "GEST_C090"   GOSUB Add_TABER_VARSETTATE
      }
   }

   //Luca 14/11/2019 per pannello e vetro
   PROCEDURA Set_Gest_C008_PannelloAntaNow
   {
      idx_ant = PADRE(ATTUALE(),2)
      wk_antaincoppia = VAR_VAL(idx_ant,"AntaInCoppia")
      wk_verso        = VAR_VAL(idx_ant,"Verso")

      //Luca 04/03/2020 riporto modifiche LAGO
      //Luca 19/11/2019 Mantis 21428
      //if( UN_PADRE("Cuc_ZoccoloLvst") ) { EXITSUB() }
      if( UN_PADRE("Cuc_ZoccoloLvst") | UN_PADRE("Cuc_FroFixColAngolo") ) { EXITSUB() }

      CAT_VM_var = "C008"
      //CAT_VM_opz = "PF003;PF004"
      //Luca 04/03/2020
      //CAT_VM_opz = "PF002;PF003;PF004"
      CAT_VM_opz = "PF002;PF003;PF004;PF009;PF010"
      CAT_VM_sel = ""

      if( wk_antaincoppia==0 )
      {
         //flapp
         if( VAR_VAL_STR(idx_ant,"GEST_C004")=="MA001" ) { CAT_VM_sel = "PF004" }
      }
      else
      {
         //LZ 16/12/19
         //if( wk_verso>0 & PanRientrante==1 )  { CAT_VM_sel = "PF003" }
         if( wk_verso>0 )  { CAT_VM_sel = "PF003" }
      }

      //Luca 04/02/2020 mantis 0021988
      if( UN_PADRE("Cuc_FroFixColAngolo") ) { CAT_VM_sel = "" }

      //Luca 21/02/2020
      if( UN_PADRE("FrontaleColSoff") )
      {
         //Luca 04/03/2020 riporto modifiche LAGO
         //if( wk_verso==-1 & PosPannello==1  ) { CAT_VM_sel = "PF002" }
         //if( wk_verso==1  & PosPannello==2  ) { CAT_VM_sel = "PF002" }
         if( wk_verso==-1 & PosPannello==1  ) { CAT_VM_sel = "PF002;PF010" }
         if( wk_verso==1  & PosPannello==2  ) { CAT_VM_sel = "PF002;PF009" }
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C004_VetroAntaNow
   {
      if( VAR_VAL( ATTUALE(), "escludi_man") > 0 ) { EXITSUB() }

      idx_ant = PADRE(ATTUALE(),2)
      wk_antaincoppia = VAR_VAL(idx_ant,"AntaInCoppia")
      wk_verso        = VAR_VAL(idx_ant,"Verso")

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") )    { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C004") }

      //Luca 19/11/2019 Mantis 21428
      if( UN_PADRE("Cuc_ZoccoloLvst") | UN_PADRE("Cuc_FroFixColAngolo") )
      {
         GEST_C004 = "__"
         VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE
         EXITSUB()
      }

      //Luca 09/10/20 riporto modifiche inviate da LAGO
      // LZ - Controllo duplicato
      //if( NtotVetri<=1 ) { EXITSUB() }
      //if( NtotVetri<=1 & wk_antaincoppia==0 )
      //{
      //   ////Luca 31/08/2020 23251: Frontale vetro Colonna NOW prodotto erratamente
      //   //GEST_C004 = "__"
      //   //VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE

      //   GEST_C004 = "__"
      //   if( VAR_VAL_STR(idx_ant,"GEST_C004")=="MA001" ) { GEST_C004 = "MA001" }
      //   VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE

      //   EXITSUB()
      //}

      GEST_C004 = "__"
      if( VAR_VAL_STR(idx_ant,"GEST_C004")=="MA001" )
      {
         //GEST_C004 = "__"
         if( wk_verso>0 )
         {
            if( SeqVetro==1 ) { GEST_C004 = "MA001" }
         }
         else
         {
            if( SeqVetro==NtotVetri ) { GEST_C004 = "MA001" }
         }

         //anta lavastoviglie maniglia flapp orizzontale, sempre sul secondo vetro
         if( UN_PADRE("Cuc_AntaLvst") )
         {
            if( SeqVetro==1 )         { GEST_C004 = "__" }
            if( SeqVetro==NtotVetri ) { GEST_C004 = "MA001" }
         }
      }

      VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE

   }

   //Luca 09/07/2019
   //20074: Colonne cucina 2.0: blocco tipo apertura per colonne man e pwt
   //deve essere uguale a quello del padre, comandato da gemo
   PROCEDURA Set_Gest_C004_AnteColLvst
   {
      if( UN_PADRE("ScoccaT_ColLvst")==0 ) { EXITSUB() }

      gest_c004_pdr = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C004")

      if( gest_c004_pdr=="" | gest_c004_pdr=="__" ) { EXITSUB() }

      if( GEST_C004!=gest_c004_pdr )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C004") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C004") }

         GEST_C004 = gest_c004_pdr
         VarAdd = "GEST_C004"   GOSUB Add_TABER_VARSETTATE
      }
   }

   //Luca 18/07/2019
   //se è presente la categoria verso del top level, comanda sempre quella
   PROCEDURA Set_Gest_C007_Ante
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C007")==0 )        { EXITSUB() }

      //LZ 24/02/2022: TODO
      //Per il momento limito alle colonne, l'anta dedicata attualmente ha solo apertura Vasistas
      //quindi non gestisco alcun verso di apertura
      if( UN_PADRE("ScoccaT_Col*")
        & VAR_VAL_STR( ATTUALE(), "Apertura") == "VS") { EXITSUB() }

      gest_c007_pdr = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C007")

      if( gest_c007_pdr=="" | gest_c007_pdr=="__" ) { EXITSUB() }

      if( GEST_C007 != gest_c007_pdr
        & VAR_VAL( ATTUALE(), "AntaInCoppia") <= 0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C007") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C007") }

         GEST_C007 = gest_c007_pdr
         VarAdd = "GEST_C007"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_TipoRipiano
   {
      if( VAR_VAL_STR( ATTUALE(), "GEST_C005") == "LE001") { TipoRipiano = 0 }
      if( VAR_VAL_STR( ATTUALE(), "GEST_C005") == "VT001") { TipoRipiano = 1 }
   }

   PROCEDURA Set_EsclusoRipiano
   {
      if( ACTION() < 0 | ACTION() == 2 | $OnLoadOrder == 1) { EXITSUB() }
      if( ins2_att != $ins2_attrezzato2)                    { EXITSUB() }

      wk_escludi = 0

      if( UN_PADRE("ScoccaT_BaseAngPan"))
      {
         COMPONENTI2( "wk_lemans", idx_pdr, "Cuc_MeccanismoLeMans")
         if( wk_lemans > 0)                                      { wk_escludi = 1 }
      }

      if( wk_escludi == 0
        & Cucina_Versione > 2)
      {
         if( VAR_VAL_STR( idx_pdr_gest, "GEST_C005") == "ES001") { wk_escludi = 2 }
      }

      VAR_CREATE_NUM( idx_att, "escluso", SE_NUM( wk_escludi <= 0, 0, 1), $MODE_SAVEALWAYS, "")
   }

   //Luca 20/12/2019 attivo fresata per led MICROSKY
   PROCEDURA Set_Gest_C008_CopRip
   {
      if( NOME(ATTUALE())!="Cuc_Cop"
        & NOME(ATTUALE())!="Cuc_Ripiano" )                    { EXITSUB() }

      CAT_VM_var = "C008"
      if( VAR_EXIST( ATTUALE(), GetVarGest(CAT_VM_var)) == 0) { EXITSUB() }

      CAT_VM_opz = "SM008"
      CAT_VM_sel = ""

      COMPONENTI2( "wk_led", ATTUALE(), "Cuc_Led")
      if( wk_led > 0 ) { CAT_VM_sel = "SM008" }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C003
   {
      //Luca 03/09/2020
      if( NOME(ATTUALE())=="Cuc_CatOriz" & UN_PADRE("ScoccaT_Col*")  )
      {
         C003 = "TE001"
         VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

         CAT_VM_var = "C003"
         CAT_VM_opz = "TE001;CS001;SO001"

         CAT_VM_sel = "TE001"
         if( VAR_VAL(PADRE(ATTUALE(),2),"TipoScocca")==2 ) { CAT_VM_sel = "SO001" }

         GOSUB Gest_CAT_VM
         EXITSUB()
      }

      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_*")==0 )            { EXITSUB() }

      //Luca 03/12/2019
      if( NOME(ATTUALE())=="ScoccaT_ColTamponamentoApribile" )
      {
         C003 = "SP002"
         VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

         CAT_VM_var = "C003"
         CAT_VM_opz = "SP001;SP002"
         CAT_VM_sel = "SP002"
         if( IS_IDX(idx_sx) & IS_IDX(idx_dx) ) { CAT_VM_sel = "SP001" }
         GOSUB Gest_CAT_VM
         EXITSUB()
      }

      //LZ 09/09/2021
      if( NOME(ATTUALE())=="ScoccaT_BaseFrigo" )
      {
         C003 = "TE001"
         VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

         CAT_VM_var = "C003"
         CAT_VM_opz = "TE001;CS001"
         CAT_VM_sel = "TE001"

         if( VAR_VAL(ATTUALE(),"TipoScocca")==1 ) { CAT_VM_sel = "TE001;CS001" }
         GOSUB Gest_CAT_VM

         EXITSUB()
      }

      C003 = "TE001"
      VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

      CAT_VM_var = "C003"
      CAT_VM_opz = "TE001;CS001;SO001"
      CAT_VM_sel = ""

      CAT_VM_sel = "TE001"
      if( VAR_VAL(ATTUALE(),"TipoScocca")==1 ) { CAT_VM_sel = "TE001;CS001" }
      if( VAR_VAL(ATTUALE(),"TipoScocca")==2 ) { CAT_VM_sel = "SO001" }
      if( VAR_VAL(ATTUALE(),"TipoScocca")==3 ) { CAT_VM_sel = "SO001;CS001" }

      GOSUB Gest_CAT_VM

      //C003 = "TE001"
      //if( VAR_VAL(ATTUALE(),"TipoScocca")==1 ) { C003 = "CS001" }
      //if( VAR_VAL(ATTUALE(),"TipoScocca")==2 ) { C003 = "SO001" }
      //if( VAR_VAL(ATTUALE(),"TipoScocca")==3 ) { C003 = "SO001" }
      //
      //VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE
   }

   //PROCEDURA Set_Gest_C003_Fianco
   PROCEDURA Set_Gest_C003_CmpColonna
   {
      if( UN_PADRE("ScoccaT_Col*") )
      {
         TipoScocca = VAR_VAL(PADRE(ATTUALE(),2),"TipoScocca")

         C003 = "TE001"
         //if( TipoScocca==2 ) { C003 = "SO001" }
         VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

         CAT_VM_var = "C003"
         CAT_VM_opz = "TE001;CS001;SO001"
         CAT_VM_sel = ""

         CAT_VM_sel = "TE001"
         if( VAR_VAL(ATTUALE(),"TipoScocca")==1 ) { CAT_VM_sel = "TE001;CS001" }
         if( VAR_VAL(ATTUALE(),"TipoScocca")==2 ) { CAT_VM_sel = "SO001" }
         if( VAR_VAL(ATTUALE(),"TipoScocca")==3 ) { CAT_VM_sel = "SO001;CS001" }

         //Luca 21/02/2020 mantis 022057: Colonne forno L60: revisione coperchio interno
         if( NOME(ATTUALE())=="Cuc_Fondo"
           & UN_PADRE("ScoccaT_ColLvst2Forno") ) { CAT_VM_sel = "SO001" }

         GOSUB Gest_CAT_VM
      }

      if( UN_PADRE("ScoccaS_PensileAngolo") )
      {
         if( NOME(ATTUALE()) == "Cuc_Sch"
           | NOME(ATTUALE()) == "Cuc_Fianco" )
         {
            C003 = "SX001"
            if( Verso > 0 ) { C003 = "DX001" }
            VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

            CAT_VM_var = "C003"
            CAT_VM_opz = "SX001;DX001"
            CAT_VM_sel = "SX001"

            if( Verso > 0 ) { CAT_VM_sel = "DX001" }

            GOSUB Gest_CAT_VM

            ORD_FILTRO_C003 = CAT_VM_sel
         }
      }
   }

   PROCEDURA Set_Gest_C017
   {
      GEST_C017 = "AB001"
      if( VAR_VAL_STR(ATTUALE(),"Apertura")=="RB" ) { GEST_C017 = "AR001" }

      //Luca 01/04/2019
      if( IS_MATCH(NOME(ATTUALE()),"Modulo*368") )
      {
         GEST_C017 = "AB002"

         //Luca 03/11/2020
         //- Un pensile sovrapposto di H368 può avere apertura solo push
         if( VAR_VAL(ATTUALE(),"FLAG_Sovrapposto") == 1  & Y == 368 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"GEST_C017")==1 )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C017") }
            GEST_C017 = "PU001"
         }
      }

      VarAdd = "GEST_C017"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C007
   {
      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_BaseAngoloIsola")==0 ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C007")==1 ) { EXITSUB() }

      C007 = "SX001"
      if( Verso>0 ) { C007 = "DX001" }

      VarAdd = "C007"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C008
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C008") == 0 )  { EXITSUB() }
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C008")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C008") }

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

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM146;SM147;PF032;PF033"
      CAT_VM_sel = ""

      wk_fia_pom_dx = 0
      wk_fia_pom_sx = 0

      COMPONENTI2("wk_fia",ATTUALE(),"Cuc_Fianco")
      $wk_i = 1
      while( $wk_i <= wk_fia )
      {
         wk_idx = wk_fia[$wk_i]
         if( VAR_VAL_STR(wk_idx,"GEST_C002") == "ME006" )
         {
            if( VAR_VAL(wk_idx,"Verso") > 0 ) { wk_fia_pom_dx = 1 }
            if( VAR_VAL(wk_idx,"Verso") < 0 ) { wk_fia_pom_sx = 1 }
         }

         $wk_i = $wk_i + 1
      }

      if( wk_fia_pom_sx == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM146") }
      if( wk_fia_pom_dx == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM147") }

      //Simone 19/01/2023
      //PF032 - KEKU SPESSORATO A DX
      //PF033 - KEKU SPESSORATO A SX
      if( VAR_VAL(ATTUALE(), "Rid_Bif_Dx" ) == 1 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "PF032") }
      if( VAR_VAL(ATTUALE(), "Rid_Bif_Sx" ) == 1 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "PF033") }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C039
   {
      if( NOME(ATTUALE()) != "Cuc_Cestone"
        & NOME(ATTUALE()) != "Cuc_Cassetto")          { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C039") == 1) { EXITSUB() }

      if( HSponde < 100 )  { C039 = "LB001" }
      if( HSponde == 177)  { C039 = "LB002" }
      if( HSponde == 241)  { C039 = "LB003" }

      VarAdd = "C039"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C025
   {
      if( NOME(ATTUALE())!="ScoccaT_BaseAngPan" ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C025")==1 ) { EXITSUB() }

      C001 = VAR_VAL_STR(ATTUALE(),"GEST_C001")
      if( C001 != "" & C001 != "__" )
      {
         GEST_C025 = GetLaccatoCorrispondente(C001)
         VarAdd = "GEST_C025"   GOSUB Add_TABER_VARSETTATE
      }
   }

   //PROCEDURA Set_Gest_C011
   //{
   //   if( VAR_EXIST(ATTUALE(),"FSN_flag_SX")==0 ) { EXITSUB() }
   //
   //   if( FSN_flag_SX==0 & FSN_flag_DX==0 ) { EXITSUB() }
   //
   //   wk_max_rid = FSN_flag_SX*FSN_ridx_SX + FSN_flag_DX*FSN_ridx_DX
   //
   //   if( X_Cmp - X <= wk_max_rid )
   //   {
   //      GEST_C011 = "RID02"
   //      VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
   //   }
   //}

   PROCEDURA Set_Gest_C011
   {
      if( TABER_REGOLA!="C011_PRE" )  { EXITSUB() }

      ORD_RID = VAR_VAL(ATTUALE(),"ORD_RID")

      if( ORD_RID==1 | ORD_RID==3 | ORD_RID==5 | ORD_RID==7 )
      {
         GEST_C011 = "RID01"

         idx_topl = GetTopLevel(ATTUALE())

         if( VAR_VAL(idx_topl,"FSN_flag_SX")>0
           | VAR_VAL(idx_topl,"FSN_flag_DX")>0 )
         {
            //GEST_C011 = "RID02"

            SET_#(idx_topl)

            //wk_max_rid = #FSN_flag_SX*#FSN_ridx_SX + #FSN_flag_DX*#FSN_ridx_DX
            wk_max_rid = 0
            if( #FSN_flag_SX==2 ) { wk_max_rid = wk_max_rid + #FSN_ridx_SX }
            if( #FSN_flag_SX==3 ) { wk_max_rid = wk_max_rid + #FSN_ridx_SX }
            if( #FSN_flag_DX==2 ) { wk_max_rid = wk_max_rid + #FSN_ridx_DX }
            if( #FSN_flag_DX==3 ) { wk_max_rid = wk_max_rid + #FSN_ridx_DX }


            wk_xcmp    = VAR_VAL(idx_topl,"X_Cmp")
            wk_x       = VAR_VAL(idx_topl,"X")

            if( wk_xcmp - wk_x <= wk_max_rid ) { GEST_C011 = "RID02" }
         }
      }
      else
      {
         GEST_C011 = "__"
      }

      VarAdd = "GEST_C011"   GOSUB Add_TABER_VARSETTATE
   }

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

      CAT_VM_var = "C009"

      if( NOME(ATTUALE()) == "Cuc_FondoAngL" )  { CAT_VM_var = "C008" }

      CAT_VM_opz = "SM051;SM052;SM053"
      CAT_VM_sel = ""

      if( LED_SX == 1 & LED_DX == 0 )  { CAT_VM_sel = "SM051" }
      if( LED_SX == 0 & LED_DX == 1 )  { CAT_VM_sel = "SM052" }
      if( LED_SX == 1 & LED_DX == 1 )  { CAT_VM_sel = "SM053" }

      GOSUB Gest_CAT_VM
   }

   //Simone 02/11/2022
   PROCEDURA Set_Gest_C008_Fnd_Cuc
   {
      if( ACTION()<0 & ACTION()==2 & $OnLoadOrder==1 ) { EXITSUB() }
      //if( IsIdx(ATTUALE(),"idx_cnear_dw") == 0 )       { EXITSUB() }

      CAT_VM_var = "C008"
      CAT_VM_opz = "FC001;SM144"
      CAT_VM_sel = ""

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_lam", idx_cnear_dw, 1, "LamierinoVetrinettaNow")

      if( wk_lam > 0 )        { AddVal_CAT_VM_sel( CAT_VM_sel , "SM144" ) }
      if( VAR_FresataLav==1 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "FC001" ) }

      GOSUB Gest_CAT_VM
   }

//} procedure assengnazioni gestionali

//{ procedure frontali
   PROCEDURA Cuc_VestiFrontale
   {
      vano_n = $vano_n
      idx_pdr = PADRE(ATTUALE(),1)

      base_0.x = $vano_0.x - $Cuc_Spe_Fia + $Cuc_Aria_Ant_X
      base_0.y = $vano_0.y + $livello + $Cuc_Aria_Ant_Y
      base_0.z = $vano_0.z + $profondita + $Cuc_Aria_Ant_Z

      //Luca 23/04/2020
      if( NOME(idx_pdr)=="ScoccaS_PensileCopriCaldaia" )
      {
         base_0.z = $vano_0.z + $profondita + @Cuc_Aria_Ant_Z
      }

      if( IS_VAR_FIXED(idx_att,"X")==0 & VAR_VAL(idx_att,"ForzaMisX")==0 )
      {  X = $larghezza + 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Ant_X  }

      if( IS_VAR_FIXED(idx_att,"Y")==0 & VAR_VAL(idx_att, "ForzaMisY")==0 & VAR_EXIST(idx_att,"attrezza")==0 )
      {
         Y = $altezza - 2*$Cuc_Aria_Ant_Y
      }

      if( NOME(idx_pdr)=="ScoccaT_BaseAngoloIsola"
        & NOME(ATTUALE())=="Cuc_Anta"
        & IS_VAR_FIXED(idx_att,"Y")==0
        & VAR_VAL(idx_pdr,"ConPianoSNACK")==1
        )
      {
         SNACK_RidY = 70
         Y = $altezza - 2*$Cuc_Aria_Ant_Y - SNACK_RidY
      }

      //gestione strutture a giorno
      if( VAR_VAL(idx_pdr,"VAR_Giorno") )
      {
         base_0.x = $vano_0.x - $Cuc_Spe_Fia_Giorno + $Cuc_Aria_Ant_X
         if( IS_VAR_FIXED(idx_att,"X")==0 & ForzaMisX==0 )
         {  X = $larghezza + 2*$Cuc_Spe_Fia_Giorno - 2*$Cuc_Aria_Ant_X  }
      }

      Verso = VAR_VAL( @idx_att, "Verso")
      if( Cucina_Versione > 2)
      {
         if(nome_att == "Cuc_AntaLvst") { Verso = 0 }
      }

      if( NOME(idx_pdr) == "ScoccaT_ColAngPan")
      {
         if( ForzaMisX == 0
           & IS_VAR_FIXED( idx_att, "X") == 0)
         {
            X = $larghezza + 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Ant_X
         }

         // X_Anta
         // Approfitto delle cucine 2.5/3.0 per correggere un errore storico:
         // da 602 passo a 600 come per le basi per evitare errori di dimensione alla riduzione della X
         if( Cucina_Versione <= 2)
         {
            X = X - 2
            if( VAR_VAL( idx_pdr, "Verso") < 0) { base_0.x = base_0.x + 2 }
         }
      }

      //Luca 21/02/2020
      //l'anta soffietto è 2mm più piccola dello standard
      //ha sormoto 17.5 nel lato incernierato e 15.5 dalla parte opposta
      if( NOME(ATTUALE())=="Cuc_AntaSoffietto" )
      {
         X = $larghezza + 2*$Cuc_Spe_Fia - 2*$Cuc_Aria_Ant_X - 2
         if( Verso>0 ) { base_0.x = $vano_0.x - $Cuc_Spe_Fia + $Cuc_Aria_Ant_X + 2 }
      }

      //forzo apertura ribalta in caso di anta lavastoviglie
      if( NOME(idx_pdr)=="ScoccaT_BaseLvstOriz")
      {
         AperturaMn = 1
         Apertura   ="RB"
      }

      if( nome_att == "Cuc_Cestone"
        | nome_att == "Cuc_Cassetto")
      {
         if( NOME(idx_pdr) == "ScoccaT_BaseStandard")
         {
            if( VAR_Lavello > 0
              & IS_VAR_FIXED( idx_att, "UsoLavello") == 0)
            {
               UsoLavello = 0

               if( Cucina_Versione <= 2)
               {
                  if( Y <= 368 & base_0.y + Y + 50 > @Y) { UsoLavello = 1 }
               }

               if( Cucina_Versione > 2)
               {
                  if( Y <= 368
                    & @alto0y_abs - base0y_abs <= 368)   { UsoLavello = VAR_Lavello }
               }
            }
         }
      }

      if( NOME(ATTUALE()) != "Cuc_Anta")
      {
         //Luca 27/04/2021
         GOSUB Cuc_VestiFrontali_Falegnameria
         EXITSUB()
      }

      AntaSuperiore = 0
      if( IS_MATCH( NOME(idx_pdr), "ScoccaT_C*"))
      {
         if( $livello >= 10) { AntaSuperiore = 1 }
      }

      //Luca 28/01/2019
      if( NOME(idx_pdr)=="ScoccaT_ColFrigo"
        | NOME(idx_pdr)=="VanoFrigo_ColFalegnameria" )
      {
         if( VAR_VAL(idx_pdr,"VAR_RidXVtrAnta") > 0 )
         {
            Rie_AntRidFrigo_X = $Cuc_Rie_Fro_PanVtr * VAR_VAL(idx_pdr,"VAR_RidXVtrAnta")

            X = X - Rie_AntRidFrigo_X
            if( VAR_VAL(idx_pdr,"Verso") < 0 ) { base_0.x = base_0.x + Rie_AntRidFrigo_X }
         }

         //Doppia anta
         if( VAR_VAL(idx_pdr,"TipoColFrigo") == 2 )
         {
            if( $livello<10 )
            {
               Y = @YAntaInf - 2*$Cuc_Aria_Ant_Y
            }
            else
            {
               Y = @YAntaSup - 2*$Cuc_Aria_Ant_Y
               base_0.y = @base_0.y + @Y + @Cuc_Alt_Zoc - $Cuc_Aria_Ant_Y - Y
            }
         }

         //Tripla anta con vasistas superiore
         if( VAR_VAL(idx_pdr,"TipoColFrigo") == 3 )
         {
            if( $livello < 10 )
            {
               Y = @YAntaInf - 2*$Cuc_Aria_Ant_Y
            }
            else
            {
               if( $livello < ( @Y - @YAntaVas - 10) )
               {
                  Y = @YAntaSup - 2*$Cuc_Aria_Ant_Y
                  base_0.y = @base_0.y + @Cuc_Alt_Zoc + @YAntaInf + $Cuc_Aria_Ant_Y
               }
               else
               {
                  Y = @YAntaVas - 2*$Cuc_Aria_Ant_Y
                  base_0.y = @base_0.y + @Y + @Cuc_Alt_Zoc - $Cuc_Aria_Ant_Y - Y
               }
            }
         }
      }

      AntaSuperiore_Forno = 0
      if( NOME(idx_pdr)=="ScoccaT_ColForno"
        | NOME(idx_pdr)=="ScoccaT_Col2Forno"
        | NOME(idx_pdr)=="ScoccaT_ColLvstForno"
        | NOME(idx_pdr)=="ScoccaT_ColLvst2Forno"  )
      {
         if( $livello<10 )
         {
            Y = @YAntaInf
         }
         else
         {
            AntaSuperiore_Forno = 1
            Y = @YAntaSup
            base_0.y = @base_0.y + @Y + @Cuc_Alt_Zoc - $Cuc_Aria_Ant_Y - Y
         }
      }

      //Alberto B. 11/08/20
      if( NOME(idx_pdr)=="ScoccaS_PensileAngolo" )
      {
         if( IS_VAR_FIXED(idx_att,"X")==0 & ForzaMisX==0 )
         {
            AntaSx = @AntaSx
            AntaDx = @AntaDx
            X = @AntaSx
            Z = @AntaDx
            base_0.z = $vano_0.z + $profondita - $Cuc_Spe_SchPA + $Cuc_Rie_SchPA_ZR
         }
      }

      GOSUB Cuc_VestiFrontali_Falegnameria

      GOSUB Cuc_TaglioAutomatico
   }

   PROCEDURA Cuc_TaglioAutomatico
   {
      if(ACTION()==0) { Yori = Y }

      //esco nel caso delle colonne forno (mantis 9393) mentre
      //eseguo il codice negli altri casi, per gestire correttamente le riduzioni
      //dei frontali (mantis 9519)
      if( UN_PADRE("ScoccaT_*Forno")
        | UN_PADRE("ScoccaT_ColFornoMicro")) { EXITSUB() }

      //Luca 28/01/2019
      if( UN_PADRE("ScoccaT_ColFrigo")
        & ( VAR_VAL(idx_pdr,"TipoColFrigo")==2
          | VAR_VAL(idx_pdr,"TipoColFrigo")==3 ) ) { EXITSUB() }

      //Luca 27/04/2021
      if( UN_PADRE("ScoccaT_ColFalegnameria") )  { EXITSUB() }


      // Taglia l'anta se è stata tagliata la base/colonna
      filo_alto=0
      idx_topl = GetTopLevel(ATTUALE())

      if ( VAR_EXIST(idx_topl,"cmp_name") )
      {
         if ( VAR_EXIST(ATTUALE(),"Yori")==0 )  { Yori = -1 }
         if ( Yori == -1 )   { Yori = Y }

         //altezza frontale
         if( VAR_EXIST(idx_att,"attrezza")==0 )

         // Riduzione di 1mm per verifiche limiti gestioni CAM
         // Deve tener conto dell'Aria sopra
         // se base_0.y è già con l'aria sotto, va aggiunta/tolta solo una volta $Cuc_Aria_Ant_Y
         {  alto0_a = base_0.y + $altezza -$Cuc_Aria_Ant_Y }
         else
         {  alto0_a = base_0.y + Yori  }
         //altezza cassa

         alto0_c = @alto_0.y
         if ( alto0_a>alto0_c )
         {
            Y_pad = @Y
            Ydiff = alto0_a-alto0_c
            if( VAR_EXIST(idx_att,"attrezza")==0 ) {  Y = $altezza -2*$Cuc_Aria_Ant_Y -Ydiff  }
            else                                   {  Y = Yori -Ydiff   }
         }
         if ( (alto0_c-(base_0.y+Y))<10 )   { filo_alto=1 }
      }
   }

   PROCEDURA OnSetupLivelli_Frontali
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      if( IS_MATCH(NOME(idx_ref),"ScoccaT_Col*") )
      {
         if( IS_MATCH(NOME(ATTUALE()),"*Anta*") | NOME(ATTUALE())=="Cuc_FrontaleFisso" )
         {
            GOSUB OnSetupLivelli_Frontali_Colonne
            EXITSUB()
         }
      }

      //Luca 27/04/2021
      if( IS_MATCH(NOME(idx_ref),"Vano*Falegnameria")
        & IS_MATCH(NOME(ATTUALE()),"*Anta*") )
      {
         liv2add       = 2
         liv2addscr    = 2
         liv2add[1]    = 0
         liv2addscr[1] = 0
         liv2add[2]    = VAR_VAL(idx_ref,"Y")
         liv2addscr[2] = VAR_VAL(idx_ref,"Y")

         GOSUB livelli_add2
         EXITSUB()
      }

      if( NOME(idx_ref)=="ScoccaT_BaseLvst" )
      {
         liv2add       = 2
         liv2addscr    = 2
         liv2add[1]    = 102
         liv2addscr[1] = 102
         //aggiunto livello 873 in lago
         liv2add[2]    = 873
         liv2addscr[2] = 873
      }

      if( NOME(idx_ref)=="ScoccaT_BaseStandard" )
      {
         liv2add       = 1
         liv2addscr    = 1
         liv2add[1]    = 873
         liv2addscr[1] = 873

         //Luca 12/02/2019 per basi h873 con cestone  505+368
         if( NOME(ATTUALE())=="Cuc_Cestone" )
         {
            liv2add       = 2
            liv2addscr    = 2
            liv2add[2]    = 505
            liv2addscr[2] = 505
         }

         if( UN_PADRE2(idx_ref,"ScoccaT_Base_AirKitchen") )
         {
            liv2add       = 2
            liv2addscr    = 2
            liv2add[2]    = 842
            liv2addscr[2] = 842
         }
      }

      //+100 provvisorio
      liv_max = VAR_VAL(idx_ref,"Y") + 100
      liv_att = 0
      //step = 184
      step = 92

      while ( liv_att<=liv_max )
      {
         ne = liv2add + 1
         liv2add = ne
         liv2addscr = ne
         liv2add[ne]    = liv_att
         liv2addscr[ne] = liv_att

         liv_att = liv_att + step
      }

      GOSUB livelli_add2
   }

   PROCEDURA OnSetupLivelli_Frontali_Colonne
   {
      grp_liv = 1
      //if( NOME(idx_ref)=="ScoccaT_ColStandard"
      //  | NOME(idx_ref)=="ScoccaT_ColAngPan"
      //  | NOME(idx_ref)=="ScoccaT_ColFrigo"
      //  | NOME(idx_ref)=="ScoccaT_ColForno"
      //  | NOME(idx_ref)=="ScoccaT_Col2Forno"  )  { grp_liv = 1 }

      if( NOME(idx_ref)=="ScoccaT_ColLvst" )
      {
         if( NOME(ATTUALE())=="Cuc_Anta" )     { grp_liv = 1 }
         if( NOME(ATTUALE())=="Cuc_AntaLvst" ) { grp_liv = 2 }
      }

      if( NOME(idx_ref)=="ScoccaT_ColLvstForno"
        | NOME(idx_ref)=="ScoccaT_ColLvst2Forno"  )
      {
         if( NOME(ATTUALE())=="Cuc_Anta" )     { grp_liv = 1 }
         if( NOME(ATTUALE())=="Cuc_AntaLvst" ) { grp_liv = 3 }
      }

      //Simone 14/07/2023
      if( NOME(ATTUALE())=="Cuc_FrontaleFisso" ) { grp_liv = 4 }

      if( grp_liv==1 )
      {
         liv2add       = 8    liv2addscr    = liv2add

         liv2add[1] = 0       liv2addscr[1] = 0
         liv2add[2] = 736     liv2addscr[2] = 736
         liv2add[3] = 920     liv2addscr[3] = 920
         liv2add[4] = 1942    liv2addscr[4] = 1942
         liv2add[5] = 2126    liv2addscr[5] = 2126
         //liv2add[6] = 2270    liv2addscr[6] = 2270
         //liv2add[7] = 2470    liv2addscr[7] = 2470
         //liv2add[8] = 2650    liv2addscr[8] = 2650
         liv2add[6] = 2253    liv2addscr[6] = 2253
         liv2add[7] = 2413    liv2addscr[7] = 2413
         liv2add[8] = 2633    liv2addscr[8] = 2633

         if( NOME(idx_ref)=="ScoccaT_ColForno"
           | NOME(idx_ref)=="ScoccaT_ColLvstForno"
           | NOME(idx_ref)=="ScoccaT_ColLvst2Forno"  )
         {
            liv2add       = 9
            liv2addscr    = 9
            liv2add[9]    = VAR_VAL(idx_ref,"VAR_PosYEld") + VAR_VAL(idx_ref,"VAR_YFroEld")
            liv2addscr[9] = liv2add[9]
         }

         if( NOME(idx_ref)=="ScoccaT_Col2Forno" )
         {
            liv2add       = 10    liv2addscr    = 10

            liv2add[9]    = VAR_VAL(idx_ref,"VAR_PosYEld") + VAR_VAL(idx_ref,"VAR_YFroEld") + VAR_VAL(idx_ref,"VAR_YFroEld2") + $Cuc_Spe_RipFe
            liv2addscr[9] = liv2add[9]

            liv2add[10]    = VAR_VAL(idx_ref,"VAR_PosYEld")
            liv2addscr[10] = liv2add[10]
         }
      }

      if( grp_liv==2 )
      {
         liv2add       = 2    liv2addscr    = 2
         liv2add[1]    = 102  liv2addscr[1] = 102
         liv2add[2]    = 920  liv2addscr[2] = 920
      }

      if( grp_liv==3 )
      {
         liv2add       = 2    liv2addscr    = 2
         liv2add[1]    = 176  liv2addscr[1] = 176
         if( NOME(idx_ref)=="ScoccaT_ColLvst2Forno"  )
         {
            liv2add[1]    = 102  liv2addscr[1] = 102
         }
         liv2add[2]    = 920  liv2addscr[2] = 920
      }

      if( grp_liv==4 )
      {
         liv_max = VAR_VAL(idx_ref,"Y")
         liv_att = 0
         step = 92

         while ( liv_att<=liv_max )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2addscr = ne
            liv2add[ne]    = liv_att
            liv2addscr[ne] = liv_att

            liv_att = liv_att + step
         }
      }

      GOSUB livelli_add2
   }

   PROCEDURA OnSetupLivelli_Ripiani
   {
      if( VAR_EXIST( idx_att, "__change_lev_auto") == 1) { __change_lev_auto = -1 } // Vedi Cucina_2_5_Ripiani_Ctrl

      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      //Luca 01/07/2019
      //in fase di caricamento ordini, anche per le colonne uso livelli liberi passo 92
      //if( IS_MATCH(NOME(idx_ref),"ScoccaT_Col*") )
      if( IS_MATCH(NOME(idx_ref),"ScoccaT_Col*") & $ATTIVA_DLL==0 )
      {
         GOSUB OnSetupLivelli_Ripiani_Colonne
         EXITSUB()
      }

      liv_max = VAR_VAL(idx_ref,"Y")

      liv_att = 0
      step = 92

      while ( liv_att<=liv_max )
      {
         ne = liv2add + 1
         liv2add = ne
         liv2addscr = ne
         liv2add[ne]    = liv_att
         liv2addscr[ne] = liv_att

         liv_att = liv_att + step
      }

      GOSUB livelli_add2
   }

   PROCEDURA OnSetupLivelli_Ripiani_Colonne
   {
      wk_y_vano = VAR_VAL(idx_ref,"Y") - $Cuc_Spe_Cop - $Cuc_Spe_Fnd

      if( VAR_EXIST(idx_ref,STRCAT("vano_h_",STR(vano_ref)))==1 )
      {
         wk_y_vano = VAR_VAL(idx_ref,STRCAT("vano_h_",STR(vano_ref)))
      }

      wk_offy = $Cuc_Spe_Fnd

      wk_nrip = 4
      if( VAR_VAL(idx_ref,"Y")>=2270 ) { wk_nrip = 5 }

      if( NOME(idx_ref)=="ScoccaT_ColLvst" )
      {
         wk_nrip = 2
         if( VAR_VAL(idx_ref,"Y")>=2270 ) { wk_nrip = 3 }
      }

      if( NOME(idx_ref)=="ScoccaT_ColFrigo" )
      {
         wk_offy = 0

         wk_nrip = 1
         if( VAR_VAL(idx_ref,"TipoColFrigo")==4 ) { wk_nrip = 2 }

         wk_y_vano = VAR_VAL(idx_ref,"YVanoRip")
      }

      if( NOME(idx_ref)=="ScoccaT_ColLvstForno"
        | NOME(idx_ref)=="ScoccaT_ColLvst2Forno"  )
      {
         wk_offy = 0

         wk_nrip = 1
         if( VAR_VAL(idx_ref,"Y")>2270 ) { wk_nrip = 2 }

         wk_y_vano = VAR_VAL(idx_ref,"YVanoRip")
      }

      //creo i livelli per il vano superiore
      if( NOME(idx_ref)=="ScoccaT_ColForno"
        | NOME(idx_ref)=="ScoccaT_Col2Forno"  )
      {
         wk_y_vano = VAR_VAL(idx_ref,"YVanoRip")
         wk_offy = VAR_VAL(idx_ref,"Y") - $Cuc_Spe_Fnd - wk_y_vano

         wk_nrip = 1
         if( VAR_VAL(idx_ref,"Y")>2270 ) { wk_nrip = 2 }

         //Luca 21/02/2019
         if( NOME(idx_ref)=="ScoccaT_ColForno"
           & VAR_VAL(idx_ref,"Y")>2600
           & VAR_VAL(idx_ref,"TipoColForno")==1 ) { wk_nrip = 3 }
      }

      wk_y_vano = wk_y_vano - wk_nrip*Y
      wk_y_parz = wk_y_vano/(wk_nrip+1)

      wk_y_parz = FLOOR(wk_y_parz)

      liv2add    = wk_nrip

      liv2add[1] = wk_offy + wk_y_parz + Y/2
      liv2add[2] = wk_offy + wk_y_parz*2 + Y + Y/2
      liv2add[3] = wk_offy + wk_y_parz*3 + 2*Y + Y/2
      liv2add[4] = wk_offy + wk_y_parz*4 + 3*Y + Y/2
      if( wk_nrip==5 ) { liv2add[5] = wk_offy + wk_y_parz*5 + 4*Y + Y/2 }

      //Luca 04/02/2019
      //aggiungo livello vano inferiore
      if( NOME(idx_ref)=="ScoccaT_ColForno"
        | NOME(idx_ref)=="ScoccaT_Col2Forno"   )
      {
         ne = liv2add + 1
         liv2add = ne

         wk_y_vano = VAR_VAL(idx_ref,"VAR_PosYEld") - 2*$Cuc_Spe_Fnd
         wk_y_parz = wk_y_vano/2

         liv2add[ne] = $Cuc_Spe_Fnd + wk_y_parz
      }

      liv2addscr = liv2add
      i = 1
      while ( i<=liv2addscr )
      {
         liv2addscr[i] = liv2add[i]
         i = i + 1
      }

      GOSUB livelli_add2
   }

   //definisco misura default profondità str interna cassetto/cestone
   PROCEDURA SetStrIntCC
   {
      HSponde = 90.5
      if( NOME(ATTUALE()) == "Cuc_Cestone" )
      {
         HSponde = 177
         if( ConCassettoInterno) { HSponde = 90.5 }
         if( Y > 400 )           { HSponde = 241  }

         idx_topl = GetTopLevel(idx_att)
         wk_datains = ATOI( LEFT( VAR_VAL_STR( idx_topl, "z_ins"), 6))
         if( wk_datains >= $BDM_REV_Cuc_SpondeCestLav)
         {
            if( VAR_VAL( idx_topl, "ConLavello") > 0
              | VAR_VAL( idx_topl, "VAR_Lavello") > 0)
            {
               if( Y > 400)      { HSponde = 177  }
            }
         }

         //TODO: valutare se bloccare scelta utente
         if( UsoLavello == 2)    { HSponde = 90.5 }
      }

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C039") == 1)
      {
         if( GEST_C039 == "LB001") { HSponde = 90.5 }
         if( GEST_C039 == "LB002") { HSponde = 177  }
         if( GEST_C039 == "LB003") { HSponde = 241  }

         // Gestione speciale cucine 1.0
         if( GEST_C039 == "LB004") { HSponde = 26   }
      }

      MY = HSponde

      if( IS_VAR_FIXED( ATTUALE(), "Zt") == 1) { EXITSUB() }

      GOSUB SetStrIntCC_Z

      Px = 25
      Py = 46.6
      Pz = 0
   }

   PROCEDURA SetStrIntCC_Z
   {
      z_ref = @Z
      if( NOME(idx_pdr) == "ScoccaT_BaseAngoloIsola") { z_ref = @X }

      if( IS_VAR_FIXED(ATTUALE(),"Zn") == 1)
      {
         if( Zn <= 406) { MZ = 300 }
         if( Zn == 520) { MZ = 400 }
         if( Zn == 630) { MZ = 500 }
         if( Zn >= 700) { MZ = 550 }

         EXITSUB()
      }

      MZ = 300 Zn = 406
      if( z_ref >= 496) { MZ = 400 Zn = 520 }
      if( z_ref >= 606) { MZ = 500 Zn = 630 }
      if( z_ref >= 676) { MZ = 550 Zn = 700 }

      if( UN_PADRE("ScoccaT_Col*"))
      {
         if( z_ref >= 604 ) { MZ = 500 Zn = 630 }
         if( z_ref >= 674 ) { MZ = 550 Zn = 700 }
      }

      if( Cucina_Versione > 2)
      {
         MZ = 300 Zn = 350
         if( z_ref >= 495) { MZ = 400 Zn = 520 }
         if( z_ref >= 605) { MZ = 500 Zn = 630 }
         if( z_ref >= 675) { MZ = 550 Zn = 700 }

         EXITSUB()
      }
   }

   //PROCEDURA Ctrl_CollisioneLavello
   //{
   //   if( ACTION()<= 0 | ACTION()==2 | $OnLoadOrder==1 | $OnLoadOrder2==1 ) { EXITSUB() }
   //
   //   if( IS_VAR_FIXED(ATTUALE(),"GEST_C039")==1 ) { EXITSUB() }
   //
   //   NEAR_GLOBALE("wk_lav",idx_struttura_interna,1,0,"LavelloGenerico")
   //
   //   if( wk_lav == 0 ) { EXITSUB() }
   //
   //   HSponde_prec = HSponde
   //   HSponde_new  = HSponde
   //
   //   if( HSponde == 241 ) { HSponde_new = 177 }
   //   if( HSponde == 177 ) { HSponde_new = 90.5 }
   //
   //   if( HSponde_new != HSponde ) { HSponde = HSponde_new }
   //}

   //Luca 30/01/2019
   PROCEDURA Ctrl_PosaManigliaFLAPP
   {
      if( $ATTIVA_DLL == 0 | $OnLoadOrder == 1)                 { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 1064 | COMPONENDO() == 1) { EXITSUB() }

      ConManigliaFLAPP = 0
      if( VAR_VAL_STR( ATTUALE(), "GEST_C004") == "MA001") { ConManigliaFLAPP = 1 }

      //Luca 04/04/2019 per evitare maniglie su frontali forno
      if( NOME(ATTUALE()) == "Cuc_FrontaleFisso" )
      {
         if( Y < 180)
         {
            ConManigliaFLAPP = 0
            EXITSUB()
         }
      }

      Man_Orie = "O"
      Man_OffY = 65
      if( VAR_VAL( idx_att, "Cucina_Versione") > 2) { Man_OffY = 64 }

      //Luca 25/03/2019
      if( NOME(idx_att)=="Cuc_AntaLvst"
        | NOME(idx_att)=="Cuc_Cassetto"
        | NOME(idx_att)=="Cuc_Cestone"  )  { EXITSUB() }

      if( UN_PADRE("ScoccaT_Co*") )
      {
         idx_topl = GetTopLevel(ATTUALE())

         Man_Orie = "V"
         Man_OffX = 65

         Man_OffY = 1061.5
         if( VAR_VAL( idx_topl, "TipoScocca") == 2) { Man_OffY = 877.5 }

         //Revisione posizione maniglia flapp colonne in base alla data, permetto anche singoli rit con BDM_REV_Cuc_ManFLAPP==1
         VAR_Revisione_FLAPP = 0
         if( $BDM_REV_Cuc_ManFLAPP == 1
           | VT_DATAINS >= $BDM_REV_Cuc_ManFLAPP_1)  { VAR_Revisione_FLAPP = 1 }

         //Alleggerite, sempre rev 1
         if( VAR_VAL( ATTUALE(), "Alleggerita") > 0) { VAR_Revisione_FLAPP = 1 }

         COMPONENTI2( "wk_ant", idx_topl, "Cuc_Anta")
         r = ArraySortVarNum( idx_topl, "wk_ant", "base0y_abs")
         COMPONENTI2( "wk_ant2",idx_topl, "Cuc_AntaLvst")
         COMPONENTI2( "wk_ant3",idx_topl, "Cuc_Cestone")

         if( wk_ant + wk_ant2 + wk_ant3 > 1
           | UN_PADRE("ScoccaT_ColFalegnameria"))
         {
            SET_#(idx_topl)

            Man_PosY = "A"
            if( ABS(alto_0.y - #alto_0.y) < 50 )                                    { Man_PosY = "B" }

            if( wk_ant > 2
              & UN_PADRE("ScoccaT_ColFrigo"))
            {
               if( ABS( #alto_0.y - VAR_VAL( wk_ant[wk_ant], "Y") - alto_0.y) < 50) { Man_PosY = "B" }
            }

            Man_OffY = 58
            if( VAR_Revisione_FLAPP > 0)                                            { Man_OffY = 58 - 17 }
         }

         if( NOME(ATTUALE()) == "Cuc_AntaEstraibile")                               { Man_PosX = "C" }
      }
   }

   PROCEDURA posa_ManigliaFLAPP
   {
      @escluso = 1 - ConManigliaFLAPP
      if( $PLIKO_DisabilitaGrafica > 0)               { @escluso = 1 }
      if( MODELLO_SPECIALE == "CUCINE_3.0_BETA1_CUT") { @escluso = 1 }

      @base_0 = base_0
      @base_0.z = base_0.z + Z - @Z

      //@base_0.z = base_0.z + Z - @Z + 20

      @ang_z = 0
      ManX  = 201
      ManY  =  51

      //se orizzontale sempre centrale
      if( Man_Orie=="O" )
      {
         @X = ManX
         @Y = ManY

         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.y = base_0.y + Y - Man_OffY - @Y

         @Orie = "O"
      }

      if( Man_Orie=="V" )
      {
         @Y = ManX
         @X = ManY
         //@ang_z = -90

         @base_0.x = base_0.x + Man_OffX
         if( Verso<0 ) { @base_0.x = base_0.x + X - Man_OffX - @X }

         //if( Man_PosX=="C" ) { @base_0.x = base_0.x + X/2 - Man_OffX/2 }
         if( Man_PosX=="C" ) { @base_0.x = base_0.x + X/2 - ManY/2 }

         if( Man_PosY=="C" )
         {
            @base_0.y = base_0.y + Man_OffY - @Y/2
         }

         if( Man_PosY=="B" )
         {
            @base_0.y = base_0.y + Man_OffY
            //+ Man_OffY + @Y + @Y/2
         }
         if( Man_PosY=="A" )
         {
            @base_0.y = base_0.y + Y - Man_OffY - @Y
         }

         @Orie = "V"
      }
   }

   //PROCEDURA posa_ManigliaFLAPP_old
   //{
   //   @escluso = 1 - ConManigliaFLAPP
   //   @base_0 = base_0
   //   @base_0.z = base_0.z + Z - @Z
   //   @ang_z = 0
   //
   //   //se orizzontale sempre centrale
   //   if( Man_Orie=="O" )
   //   {
   //      @base_0.x = base_0.x + X/2 - @X/2
   //      @base_0.y = base_0.y + Y - Man_OffY - @Y
   //   }
   //
   //   if( Man_Orie=="V" )
   //   {
   //      @ang_z = -90
   //
   //      @base_0.x = base_0.x + Man_OffX
   //      if( Verso<0 ) { @base_0.x = base_0.x + X - Man_OffX - @Y }
   //
   //      if( Man_PosY=="C" )
   //      {
   //         @base_0.y = base_0.y + Man_OffY + @X - @X/2
   //      }
   //
   //      if( Man_PosY=="B" )
   //      {
   //         @base_0.y = base_0.y + Man_OffY + @X
   //         //+ Man_OffY + @Y + @Y/2
   //      }
   //      if( Man_PosY=="A" )
   //      {
   //         @base_0.y = base_0.y + Y -  Man_OffY
   //      }
   //   }
   //}
//} procedure frontali

   //Luca 11/02/2019
   PROCEDURA PostAction2_Colonne
   {
      if( $OnLoadOrder2 == 1 ) { EXITSUB() }

      if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*")==0 ) { EXITSUB() }

      if( TipoScocca==2 ) { EXITSUB() }

      idx_agg = AGGANCIATA(ATTUALE(),"*")

      if( IS_IDX(idx_agg)==0 ) { EXITSUB() }

      if( IS_MATCH(NOME(idx_agg),"ScoccaT*")
        & VAR_VAL(idx_agg,"base_0.y")>5  )
      {
         COMANDO(STRCAT("LINK2POS ",STR(ATTUALE()), " //PostAction2_Colonne"))
         COMANDO(STRCAT("EDITPOS_REL ",STR(ATTUALE())," 0 -",STR(base_0.y)," 0 0 //PostAction2_Colonne"))
      }
   }

   PROCEDURA Attrezza_Ripiani
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      //Default ripiano standard movibile legno
      wk_RieX  = $Cuc_Aria_Rip_Fia_X
      wk_RieZR = $Cuc_Rie_Rip_ZR
      wk_RieZF = $Cuc_Rie_Rip_ZF

      //differenza di 2mm tra fianchi base e fianchi colonna
      if( UN_PADRE("ScoccaT_Col*")) { wk_RieZF = wk_RieZF - 2 }

      if( Cucina_Versione > 2)
      {
         wk_RieZF_var = "_Ripiano_Rientro_ZF"
         if( @Z < 325) { wk_RieZF_var = "_Ripiano_325_Rientro_ZF" }

         wk_RieZF = VAR_VAL( -1, STRCAT( "Cucina_", Cucina_VersioneDsc, wk_RieZF_var))
      }

      //Avanzo di 3 mm
      if( UN_PADRE("ScoccaT_ColAngPan") )
      {
         wk_RieZR = wk_RieZR + 3
         wk_RieZF = wk_RieZF - 3
      }

      //Luca 17/09/2019 mantis 0020875
      if( UN_PADRE("ScoccaT_BaseAngoloIsola") )
      {
         wk_RieZF = 88
         wk_RieZR = 148 - $Cuc_Spe_Fia - wk_RieZF
      }

      //Luca 26/04/2021 col.falegnamenria
      if( UN_PADRE("VanoRipiani_ColFalegnameria") )
      {
         wk_RieZR = Cuc_Rie_Sch_ZR + $Cuc_Aria_Sch_Z + $Cuc_Spe_Sch
      }

      if( UN_PADRE("ScoccaT_Col*")
        & VAR_VAL( idx_pdr, "wk_mec_side") == 1 ) { wk_RieZF = 200 }

      if( TipoRipiano==1 )
      {
         wk_RieX  = $Cuc_Aria_RipV_Fia_X

         //LZ 04/12/2020 - mail di Enrico "ripiano basi e colonne", riduco l'aria per la base e colonna angolo
         if( UN_PADRE("ScoccaT_BaseAngPan") | UN_PADRE("ScoccaT_ColAngPan") )
         {
           wk_RieX  = $Cuc_Aria_RipV_FiaAng_X
         }
      }

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + wk_RieZR

      X = $larghezza  - 2*wk_RieX
      Z = $profondita - wk_RieZR - wk_RieZF

      if( ins_att!=$ins_attrezzato )
      {
         if( VAR_EXIST(idx_ref,"TipoRipiano") == 1
           & IS_VAR_FIXED(ATTUALE(),"TipoRipiano") == 0) { TipoRipiano =  @TipoRipiano }
      }

      if( ACTION() == 2
        & $OnLoadOrder == 0)
      {
         flag_CAMBIA_VAR = 1
         ricalcolaUna( idx_ref, 0, 0, "Attrezza_Ripiani", ATTUALE())
      }

      if( RipianoNum <= 0
        & Cucina_Versione > 2)
      {
         STR_RIPIANI = VAR_VAL( idx_ref, "STR_RIPIANI")
         CMP_RIPIANI = VAR_VAL( idx_ref, "CMP_RIPIANI")

         inc(STR_RIPIANI)
         if( ins2_att == $ins2_attrezzato2) { inc(CMP_RIPIANI) }

         VAR_VALUE_SET( idx_ref, "CMP_RIPIANI", CMP_RIPIANI)
         VAR_VALUE_SET( idx_ref, "STR_RIPIANI", STR_RIPIANI)

         RipianoNum = STR_RIPIANI
      }
   }

   PROCEDURA Cuc_GestionaleEldom
   {
      if(ACTION()<0 | COMPONENDO() )   {  EXITSUB()   }

      if( VAR_VAL(idx_att,"SoloForo")==1 )
      {
         FLAG_RADICE = $NO_RAD
         EXITSUB()
      }

      if( VAR_VAL(idx_att,"InsEldom")==1 & STRCMP(ELD_CODICE,"__") & STRLEN(ELD_CODICE)>0 )
      {
         GEST_CODICE = ELD_CODICE
         if ( STRCMP(cod_gest,ELD_CODICE)!=0 & $OnLoadOrder==0 & $OnRigenera==0 )
         {
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," cod_gest=",APICI(),ELD_CODICE,APICI()))
         }
         FLAG_RADICE = $FLAG_STANDARD+ $MAKE_ROW + $NORID_X + $NORID_Y + $NORID_Z
      }
      else
      {
         FLAG_RADICE = $NO_RAD
      }
   }

   //Luca 16/01/2019 da completare gestione ripiani
   //PROCEDURA CtrlRipianiStdColonna
   //{
   //   if( ACTION()<=0 | $OnLoadOrder==1 ) { EXITSUB() }
   //
   //   if( VAR_EXIST(ATTUALE(),"GEST_C005")==0
   //     | VAR_VAL_STR(ATTUALE(),"GEST_C005")==""
   //     | VAR_VAL_STR(ATTUALE(),"GEST_C005")=="__" ) { EXITSUB() }
   //
   //   COMPONENTI2("wk_rip_tmp",ATTUALE(),"Cuc_Ripiano")
   //   if( wk_rip_tmp==0 ) { EXITSUB() }
   //
   //   wk_rip = 0
   //   i = 1
   //   while ( i<=wk_rip_tmp )
   //   {
   //      wk_id = wk_rip_tmp[i]
   //      if( VAR_VAL(wk_id,"ins2_att")==$ins_attrezzato2 )
   //      {
   //         ne = wk_rip + 1
   //         wk_rip = ne
   //         wk_rip[ne] = wk_id
   //      }
   //
   //      i = i + 1
   //   }
   //
   //   //la presenza o meno dei ripiani inseriti a composto è pilotata alla categoria TipoRipiano
   //   if( VAR_VAL_STR(ATTUALE(),"GEST_C005")==""  ) {  }
   //}

   PROCEDURA AssVarDefaultColonnaFrigo
   {
      Cuc_Spe_FndFr = 21

      // Vano frigo
      if( IS_VAR_FIXED( idx_att, "YVanoFrigo") != 1)
      {
         YVanoFrigo = 1776

         if( TipoColFrigo == 3) { YVanoFrigo = 1776 + 0.5 }
         if( TipoColFrigo == 4) { YVanoFrigo = 889        }
      }

      // Anta inferiore
      if( IS_VAR_FIXED( idx_att, "YAntaInf") != 1)
      {
         YAntaInf = Y - 2*$Cuc_Aria_Ant_Y

         if( TipoColFrigo == 2
           | TipoColFrigo == 3)
         {
            YAntaInf = SE_NUM( Cucina_Versione > 2, VAR_VAL( idx_att, "VAR_Allineamento"), 0)
            YAntaInf = SE_NUM( YAntaInf > 0, YAntaInf, 920)
            YAntaInf = SE_NUM( TipoScocca == 2, YAntaInf - 184, YAntaInf)
         }
      }

      // Anta vasistas
      if( IS_VAR_FIXED( idx_att, "YAntaVas") != 1)
      {
         YAntaVas = 0

         if( TipoColFrigo == 3) { YAntaVas = YVanoRip + $Cuc_Spe_Cop + $Cuc_Spe_Fnd/2 }
      }

      // Anta superiore
      if( IS_VAR_FIXED( idx_att, "YAntaSup") != 1)
      {
         YAntaSup = 0

         if( TipoColFrigo == 2
           | TipoColFrigo == 3) { YAntaSup = Y - YAntaInf - YAntaVas }
      }

      // Posizione fondo
      // NOTA: 232 filo sopra fondo standard
      if( IS_VAR_FIXED( idx_att, "VAR_PosFondoFr") != 1)
      {
         VAR_PosFondoFr = 0

         if( TipoScocca != 2
           & ( TipoColFrigo == 2
             | TipoColFrigo == 3)) { VAR_PosFondoFr = 232 - 21 + 2 }
      }

      YVanoRip = Y - YVanoFrigo - $Cuc_Spe_Cop - $Cuc_Spe_Fnd - VAR_PosFondoFr - Cuc_Spe_FndFr
   }

   PROCEDURA SetVarColonnaFrigo
   {
      if( ACTION() < 0  ) { EXITSUB() }

      if( $ATTIVA_DLL )
      {
         GOSUB Set_GEST_C016_Eldom

         GOSUB Ctrl_InsEldom
      }

      GOSUB DefParSchedaTecnicaFrigo

      GOSUB AssVarDefaultColonnaFrigo

      //se sono compilate le variabili della scheda tecnica, calcolo in base a quei valori
      if ( VAR_YZoccFr + VAR_YAntaInFr + VAR_YAntaSuFr + VAR_DeltaAnFr + VAR_YVanoMinFr + VAR_YVanoMaxFr == 0 ) { EXITSUB() }

      YVanoFrigo = VAR_YVanoMinFr + (VAR_YVanoMaxFr-VAR_YVanoMinFr)/2

      //Luca 07/10/2019 non è più l'anta inferiore dinamica ma è il fondo inferiore che si sposta
      //YAntaInf = VAR_YZoccFr + VAR_YAntaInFr + VAR_DeltaAnFr/2 - 0.5 - $Cuc_Spe_Fnd + VAR_PosFondoFr
      //tmpA = VAR_YZoccFr + VAR_YAntaInFr
      //tmpB = tmpA + VAR_DeltaAnFr
      //if( tmpA<=684.5 & tmpB>=686.5 )  { YAntaInf = 920 }
      //if( tmpA<=684.5 & tmpB>=686.5 & VAR_PosFondoFr==0 ) { YAntaInf = 920 - 212 }
      //YAntaSup = Y - YAntaInf

      if( TipoColFrigo==2 )
      {
         wk_YAntaInf_nom = YAntaInf
         wk_metaFrigo    = VAR_YZoccFr + VAR_YAntaInFr + VAR_DeltaAnFr/2
         VAR_PosFondoFr  = wk_YAntaInf_nom - wk_metaFrigo - Cuc_Spe_FndFr

         //Luca 07/07/2020 mantis 022276: Colonne frigo: allineamento ante frigo con ante colonna
         //controllo che la posizione del fondo non sia < 0
         if( VAR_PosFondoFr < 0  )
         {
            VAR_PosFondoFr    = 0
            wk_meta_frigo_new = Cuc_Spe_FndFr + wk_metaFrigo
            wk_filo_alto_anta_inf = Cuc_Spe_FndFr + VAR_YZoccFr + VAR_YAntaInFr

            wk_diff_centro_basso = wk_filo_alto_anta_inf - wk_meta_frigo_new - 1.5
            wk_diff_centro_sopra = wk_filo_alto_anta_inf + 1.5 - wk_meta_frigo_new

            wk_diff = wk_meta_frigo_new -  wk_YAntaInf_nom

            //disallineamento eccessivo
            if( wk_diff > VAR_DeltaAnFr/2  )
            {
               YAntaInf = wk_meta_frigo_new
               YAntaSup = Y - YAntaInf
            }
         }
      }

      //aggiorno vano ripiani
      YVanoRip = Y - YVanoFrigo - $Cuc_Spe_Cop - $Cuc_Spe_Fnd - VAR_PosFondoFr - Cuc_Spe_FndFr

      // Colonna 2.5/3.0 anta singola a traino (FR001),
      // alzo vano frigorigero in modo da avere sbalzo massimo anta <= 210mm
      if( YVanoRip > 210
        & TipoColFrigo == 1
        & Cucina_Versione > 2
        & VAR_VAL_STR( idx_att, "GEST_C031") == "FR001"
        & IS_VAR_FIXED( idx_att, "VAR_PosFondoFr") != 1)
      {
         YVanoRip_prec = YVanoRip

         YVanoRip = 210
         VAR_PosFondoFr = VAR_PosFondoFr + YVanoRip_prec - YVanoRip
      }
   }

   PROCEDURA DefParSchedaTecnicaFrigo
   {
      if( SchedaTecnica==0 )  { EXITSUB() }

      DEL_VAR_MODIFICATE(ATTUALE(),"SchedaTecnica")
      SchedaTecnica = 0

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      $wk_title = MSG(1178) //"Scheda tecnica Frigo"

      //$wk_image = STRCAT($path_bmp,"Dialog\Frigo2Ante.png")
      $wk_image   = STRCAT($path_bdm,"bmp\Dialog\Frigo2Ante.png")

      $wk_xfr     = STR(VAR_XFrigo)
      $wk_zfr     = STR(VAR_ZFrigo)
      $wk_yminfr  = STR(VAR_YVanoMinFr)
      $wk_ymaxfr  = STR(VAR_YVanoMaxFr)
      $wk_yantinf = STR(VAR_YAntaInFr)
      $wk_yantsup = STR(VAR_YAntaSuFr)
      $wk_deltafr = STR(VAR_DeltaAnFr)
      $wk_yzocc   = STR(VAR_YZoccFr)
      $wk_ysup    = STR(VAR_YSopraFr)

      $wk_leg_xfr     = "[ X ]  "
      $wk_leg_zfr     = "[ Z ]  "
      $wk_leg_yminfr  = "[ YMin ] "
      $wk_leg_ymaxfr  = "[ YMax ] "
      $wk_leg_yzocc   = "[ HZ ] "
      $wk_leg_ysup    = "[ HS ] "
      $wk_leg_yantinf = "[ HF1 ] "
      $wk_leg_deltafr = "[ DF ] "
      $wk_leg_yantsup = "[ HF2 ] "

      $wk_dsc_xfr     = MSG(1179) //"Larghezza:"
      $wk_dsc_zfr     = MSG(1180) //"Profondità:"
      $wk_dsc_yminfr  = MSG(1171) //"Altezza minima:"
      $wk_dsc_ymaxfr  = MSG(1172) //"Altezza massima:"
      $wk_dsc_yzocc   = MSG(1181) //"Altezza zoccolo:"
      $wk_dsc_ysup    = MSG(1182) //"Aria sopra anta:"
      $wk_dsc_yantinf = MSG(1183) //"Altezza anta inferiore:"
      $wk_dsc_deltafr = MSG(1184) //"Delta Frontali:"
      $wk_dsc_yantsup = MSG(1185) //"Altezza anta superiore:"

      $wk_enable2f    = 1
      if( TipoColFrigo==1 )
      {
         $wk_enable2f    = 0
         $wk_dsc_yantinf = MSG(1185) //"Altezza anta:"
         //$wk_image = STRCAT($path_bmp,"Dialog\Frigo1Anta.png")
         $wk_image = STRCAT($path_bdm,"bmp\Dialog\Frigo1Anta.png")
      }

      $wk_posx_leg = 30
      $wk_posx_lab = 80
      $wk_posx_edt = 200

      $wk_dimx_leg = 40
      $wk_dimx_lab = 120
      $wk_dimx_edt = 50

      //LZ 26/05/2021: gestione anta ridotta
      $wk_xantrid_enable  = 0
#ifdef TEC;AZI
      $wk_xantrid_enable  = 1
#endif

      $wk_xantrid         = VAR_RidXVtrAnta
      $wk_xantarid_lab    = " Vetro anta ridotto di 3mm lato cerniere"
      $wk_xantrid_image   = STRCAT($path_bdm,"bmp\Dialog\Frigo_AntaRid.png")

      COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SchedaTecnicaFrigo",APICI()))
      if($DlgResult__==0 ) { EXITSUB() }

      VAR_XFrigo      = ATOI($wk_xfr)
      VAR_ZFrigo      = ATOI($wk_zfr)
      VAR_YVanoMinFr  = ATOI($wk_yminfr)
      VAR_YVanoMaxFr  = ATOI($wk_ymaxfr)
      VAR_YAntaInFr   = ATOI($wk_yantinf)
      VAR_YAntaSuFr   = ATOI($wk_yantsup)
      VAR_DeltaAnFr   = ATOI($wk_deltafr)
      VAR_YZoccFr     = ATOI($wk_yzocc)
      VAR_YSopraFr    = ATOI($wk_ysup)
      VAR_RidXVtrAnta = $wk_xantrid

      //Luca 27/04/2021
      if( UN_PADRE("ScoccaT_ColFalegnameria") )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())), " no_agganciati //OnChangedVar_VaniColFalegnameria"))
      }
   }

   PROCEDURA ScoccaT_BaseForno_Assegnazioni
   {
      // Cucine 2.5
      // Base
      /// Vano eldom
      YVanoEld = SE_NUM( VAR_FornoCompatto > 0, 460, 600)

      /// Frontali
      VAR_FroFixSup = SE_NUM( ConCassetto > 1, 0, 1)
      VAR_FroFixInf = SE_NUM( ConCassetto > 0, 0, 1)
      VAR_FroFix    = VAR_FroFixSup + VAR_FroFixInf

      // Derivate
      /// Cassetti
      Cass_Array_Y = "184;223;230;270;321;368"
      Y_CassInf = Y - YVanoEld - 46*SE_NUM( ConCassetto > 1, VAR_FroFix, VAR_FroFix + VAR_FornoCompatto) // 46 minimo di FroFix_Array_Y
      if( ConCassetto > 0) { Y_CassInf = Y_CassInf/ConCassetto }
      Y_CassInf = ARound( Y_CassInf, Cass_Array_Y, -1, 2)
      Y_CassInf = SE_NUM( ConCassetto > 0, Y_CassInf, 0)
      Y_CassSup = SE_NUM( ConCassetto > 1, Y_CassInf, 0)
      Alt_Forno = 71 - $Cuc_Spe_Fnd/2
      if( ConCassetto > 0 )
      {
         Alt_Forno  = Y_CassInf - $Cuc_Spe_Fnd + 2
         if( Y <= 736 ) { Alt_Forno = 167 }
      }

      /// Frontali
      FroFix_Array_Y = "46;52;69;91"
      Y_FroFix_Sup    = Y - YVanoEld - Y_CassSup - Y_CassSup
      if( VAR_FroFix > 0) { Y_FroFix_Sup = Y_FroFix_Sup/VAR_FroFix }
      Y_FroFixSup = ARound( Y_FroFix_Sup, FroFix_Array_Y, 0, 2)
      Y_FroFixSup = SE_NUM( VAR_FroFix > 0, Y_FroFixSup, 0)
      Y_FroFixInf = SE_NUM( VAR_FroFix > 1, Y_FroFixSup, 0)

      PosY_FroFixInf = Cuc_Alt_Zoc
      PosY_FroFixSup = Cuc_Alt_Zoc + Y - Y_FroFixSup

      // Cucine 2.0
      if( Cucina_Versione > 2) { EXITSUB() }

      VAR_FroFixSup = 1
      VAR_FroFixInf = 1

      PosYFondo2 = 0
      Alt_Forno  = 71 - $Cuc_Spe_Fnd/2

      if( ConCassetto > 0)
      {
         PosYFondo2 = 184*ConCassetto - $Cuc_Spe_Fnd/2
         Alt_Forno  = 184*ConCassetto + Alt_Forno

         if( Y<=736 )
         {
            VAR_FroFixInf = 0
            Alt_Forno  = 167
            PosYFondo2 = 0
         }
      }

      VAR_FornoCompatto = 0
      if( ConCassetto > 0) { VAR_FornoCompatto = 1 }
      if( Y<700 )          { VAR_FornoCompatto = 2 }

      Y_FroFixInf = 69
      Y_FroFixSup = 69

      if( ConCassetto > 0)
      {
         Y_FroFixSup = 91
         if( X>600 )  { Y_FroFixSup = 69 }
      }

      if( VAR_FornoCompatto == 2)
      {
         Y_FroFixInf = 46
         Y_FroFixSup = 46

         if( X > 600)
         {
            VAR_FroFixInf = 0
            Y_FroFixSup   = 52
         }
      }

      PosY_FroFixInf = Cuc_Alt_Zoc + SE_NUM( PosYFondo2 > 0, 184, 0)
      PosY_FroFixSup = Cuc_Alt_Zoc + Y - Y_FroFixSup
   }

   PROCEDURA SetVarBaseForno
   {
      if( ACTION()<0  ) { EXITSUB() }

      if( $ATTIVA_DLL )
      {
         GOSUB Set_GEST_C016_Eldom

         GOSUB Ctrl_InsEldom
      }

      if( ACTION()==0 )
      {
         //imposto i default in caso di eldom LAGO
         if( InsEldom==1 | InsEldom==-1 )
         {
            YVanoEld = 585
            VAR_YFroEld = YVanoEld + 7

            if( VAR_FornoCompatto==1 )
            {
               YVanoEld = 450
               VAR_YFroEld = YVanoEld + 7
            }

            if( VAR_FornoCompatto==2 )
            {
               YVanoEld = 395
               VAR_YFroEld = YVanoEld + 7
            }
         }
      }

      VAR_PosYEld = Alt_Forno + $Cuc_Spe_Fnd

      EXITSUB()

      //GOSUB DefParSchedaTecnicaForno

      //imposto i default
      YVanoEld = 585

      if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 }
      VAR_YFroEld = YVanoEld + 13.5

      //posizione di default
      VAR_PosYEld = 920
      if( TipoScocca==2 ) { VAR_PosYEld = 736 }

      YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y
      YAntaSup = Y - YAntaInf - 2*$Cuc_Aria_Ant_Y - VAR_YFroEld - 2*$Cuc_Aria_Ant_Y - $Cuc_Aria_Ant_Y

      YVanoRip = Y - VAR_PosYEld - YVanoEld - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - YPieReg

      //PosYRip1 = VAR_PosYEld - $Cuc_Spe_Rip
      //PosYRip2 = VAR_PosYEld + YVanoEld + YPieReg
   }

   PROCEDURA SetVarBaseCantinetta
   {
      if( ACTION() < 0  ) { EXITSUB() }

      Vano_Ymax = Y_Scocca - Fondo_Y - MasSup_Yr

      GOSUB DefParSchedaTecnicaCantinetta
      VAR_Eld_Anta_Yr = VAR_Eld_Anta_Y - VAR_Eld_Anta_Yoff

      MasInf_Y = MasInf_Y_min
      if( VAR_VAL(ATTUALE(),"VAR_Eld_Vano_Ymin") != 0
        | VAR_VAL(ATTUALE(),"VAR_Eld_Vano_Ymax") != 0
        | VAR_VAL(ATTUALE(),"VAR_Eld_Anta_Y")    != 0 )
      {
         MasInf_Y = Y_Scocca - $Cuc_Aria_Ant_Y - 2*Vano_Yoff - VAR_Eld_Anta_Yr - MasSup_Yr
      }
   }

   PROCEDURA DefParSchedaTecnicaCantinetta
   {
      if( SchedaTecnica==0 )  { EXITSUB() }

      DEL_VAR_MODIFICATE(ATTUALE(),"SchedaTecnica")
      SchedaTecnica = 0

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      $wk_title = MSG(1071)

      $wk_image = STRCAT($path_bdm,"bmp\Dialog\Cantinetta.png")

      $wk_yminfr  = STR(VAR_Eld_Vano_Ymin)
      $wk_ymaxfr  = STR(VAR_Eld_Vano_Ymax)
      $wk_yfrofr  = STR(VAR_Eld_Anta_Y)
      //delta basso negativo --> frontale sporge da macchina
      //delta basso positivo --> frontale rialzato da macchina
      $wk_deltabs = STR(VAR_Eld_Anta_Yoff)
      $wk_roteld  = 0
      $wk_roteld_enable = 0

      $wk_leg_yminfr  = "[ YMin ] "
      $wk_leg_ymaxfr  = "[ YMax ] "
      $wk_leg_yfrofr  = "[ YFro ] "
      $wk_leg_deltabs = "[ DB ] "
      $wk_leg_roteld  = "[ RTN ] "

      //$wk_dsc_xfr     = "Larghezza:"
      $wk_dsc_yminfr  = MSG(1171)  //"Altezza minima:"
      $wk_dsc_ymaxfr  = MSG(1172)  //"Altezza massima:"
      $wk_dsc_yfrofr  = MSG(1173)  //"Altezza frontale:"
      $wk_dsc_deltabs = MSG(1174)  //"Delta basso:"
      $wk_dsc_roteld  = MSG(1175)  //"Rotazione anta:"

      $wk_posx_leg = 20
      $wk_posx_lab = 80
      $wk_posx_ran = 260
      $wk_posx_edt = 200

      $wk_dimx_leg = 40
      $wk_dimx_lab = 110
      $wk_dimx_ran = 80
      $wk_dimx_edt = 50

      $wk_min_deltabs =  0   $wk_max_deltabs = 200
      $wk_min_roteld  =  0   $wk_max_roteld  =  20

      $wk_min_yfrofr  =  Y_Scocca - MasSup_Yr - 2*Vano_Yoff - $Cuc_Aria_Ant_Y - MasInf_Y_max
      //$wk_max_yfrofr  =  Y_Scocca - MasSup_Yr - 2*Vano_Yoff - $Cuc_Aria_Ant_Y - MasInf_Y_min + $wk_max_deltabs
      $wk_max_yfrofr  = 850

      $wk_min_yminfr  =  $wk_min_yfrofr  $wk_max_yminfr  = Vano_Ymax
      $wk_min_ymaxfr  =  $wk_min_yfrofr  $wk_max_ymaxfr  = Vano_Ymax

      $wk_range_yminfr  = STRCAT("( ",STR($wk_min_yminfr )," - ",STR($wk_max_yminfr )," )")
      $wk_range_ymaxfr  = STRCAT("( ",STR($wk_min_ymaxfr )," - ",STR($wk_max_ymaxfr )," )")
      $wk_range_yfrofr  = STRCAT("( ",STR($wk_min_yfrofr )," - ",STR($wk_max_yfrofr )," )")
      $wk_range_deltabs = STRCAT("( ",STR($wk_min_deltabs)," - ",STR($wk_max_deltabs)," )")
      $wk_range_roteld  = STRCAT("( ",STR($wk_min_roteld )," - ",STR($wk_max_roteld )," )")

      $wk_ok = 0
      while( $wk_ok==0 )
      {
         COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SchedaTecnicaForno",APICI()))
         if($DlgResult__==0 ) { $wk_ok = -1 }
         else
         {
            //verifico i valori inseriti
            wk_msg = ""
            // 1.1
            if( ATOI($wk_yminfr)<$wk_min_yminfr | ATOI($wk_yminfr)>$wk_max_yminfr )
            {
               COMANDO2( STRCAT( "LOGMSG DefParSchedaTecnicaCantinetta [1.1] - $wk_yminfr: ", $wk_yminfr,
                                                                           " - $wk_min_yminfr: ", STR($wk_min_yminfr),
                                                                           " - $wk_max_yminfr: ", STR($wk_max_yminfr)))
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1187))
            }
            // 1.2
            if( ATOI($wk_ymaxfr)<$wk_min_ymaxfr | ATOI($wk_ymaxfr)>$wk_max_ymaxfr )
            {
               COMANDO2( STRCAT( "LOGMSG DefParSchedaTecnicaCantinetta [1.2] - $wk_ymaxfr: ", $wk_ymaxfr,
                                                                           " - $wk_min_ymaxfr: ", STR($wk_min_ymaxfr),
                                                                           " - $wk_max_ymaxfr: ", STR($wk_max_ymaxfr)))
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1188))
            }
            // 1.3
            if( ATOI($wk_yfrofr)<$wk_min_yfrofr | ATOI($wk_yfrofr)>$wk_max_yfrofr )
            {
               COMANDO2( STRCAT( "LOGMSG DefParSchedaTecnicaCantinetta [1.3] - $wk_yfrofr: ", $wk_yfrofr,
                                                                           " - $wk_min_yfrofr: ", STR($wk_min_yminfr),
                                                                           " - $wk_max_yfrofr: ", STR($wk_max_yfrofr)))
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1189))
            }
            // 1.4
            if( ATOI($wk_deltabs)<$wk_min_deltabs | ATOI($wk_deltabs)>$wk_max_deltabs )
            {
               COMANDO2( STRCAT( "LOGMSG DefParSchedaTecnicaCantinetta [1.4] - $wk_deltabs: ", $wk_deltabs,
                                                                           " - $wk_min_deltabs: ", STR($wk_min_deltabs),
                                                                           " - $wk_max_deltabs: ", STR($wk_max_deltabs)))
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1190))
            }
            // 1.5
            if( ATOI($wk_roteld)<$wk_min_roteld | ATOI($wk_roteld)>$wk_max_roteld )
            {
               COMANDO2( STRCAT( "LOGMSG DefParSchedaTecnicaCantinetta [1.5] - $wk_roteld: ", $wk_roteld,
                                                                           " - $wk_min_roteld: ", STR($wk_min_roteld),
                                                                           " - $wk_max_roteld: ", STR($wk_max_roteld)))
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1191))
            }

            wk_VAR_Eld_Anta_Yr = ATOI($wk_yfrofr) - ATOI($wk_deltabs)
            wk_MasInf_Y = Y_Scocca - $Cuc_Aria_Ant_Y - 2*Vano_Yoff - wk_VAR_Eld_Anta_Yr - MasSup_Yr
            if( wk_MasInf_Y > MasInf_Y_max
              | wk_MasInf_Y < MasInf_Y_min )
            {
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1181), " ", STR(wk_MasInf_Y), "mm. ", MSG(1102))
            }

            if( wk_msg!="" )
            {
               wk_msg = STRCAT(MSG(1090),wk_msg)
               DISPLAY2(wk_msg)

               if( VAR_VAL( ATTUALE(), "FLAG_Speciale") == 1 ) { $wk_ok = 1 }
            }
            else
            {
               $wk_ok = 1
            }
         }
      }
      if( $wk_ok < 0 ) { EXITSUB() }

      VAR_Eld_Vano_Ymin  = ATOI($wk_yminfr)
      VAR_Eld_Vano_Ymax  = ATOI($wk_ymaxfr)
      VAR_Eld_Anta_Y     = ATOI($wk_yfrofr)
      VAR_Eld_Anta_Yoff  = ATOI($wk_deltabs)
      MasInf_Y           = Y_Scocca - $Cuc_Aria_Ant_Y - 2*Vano_Yoff - VAR_Eld_Anta_Yr - MasSup_Yr
   }

   //Luca 14/04/2021 24124: Cucina: miglioria preventivo
   PROCEDURA Set_GEST_C016_Eldom
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder==1 )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"GEST_C016")  )
      {
         if( IS_VarsUser__(ATTUALE(),"GEST_C016") == 0 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"GEST_C016") == 1 )
            {
               DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C016")
            }
            GEST_C016 = MSG(1277)
            VarAdd = "GEST_C016"   GOSUB Add_TABER_VARSETTATE
            VAR_SET_MODIFICATA(ATTUALE(),"GEST_C016","")
         }
      }
   }

   PROCEDURA SetVarColonnaForno
   {
      if( ACTION() < 0) { EXITSUB() }
      if( Cucina_Versione > 2) { GOSUB Cucina_2_5_Colonna_Forno_SetVar  EXITSUB() }

      if( $ATTIVA_DLL )
      {
         GOSUB Set_GEST_C016_Eldom

         GOSUB Ctrl_InsEldom
      }

      //se da eldom LAGO passo a Eldom cliente, faccio reset variabili
      if( InsEldom==0 & VAR_VAL(ATTUALE(),"InsEldom_prec")==1 )
      {
         VAR_YVanoMinEld = 0
         VAR_YVanoMaxEld = 0
         VAR_YFroEld     = 0
         VAR_DeltaBasso  = 0
         VAR_RotFroEld   = 0

         InsEldom_prec  = InsEldom
      }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno, pessore fondo forno 19 o 25
      YFndFrn=$Cuc_Spe_Fnd

      // Ricavo la differenza tra frontale e scocca
      wk_DiffYFroEld = VAR_DeltaBasso - VAR_RotFroEld


      //dialog per eldom
      GOSUB DefParSchedaTecnicaForno

      wk_usa_default = 0

      if( ACTION()==0 ) { wk_usa_default = 1 }

      //se eldom cliente ma scheda tecnica non presente
      if( InsEldom==0 & VAR_YVanoMinEld+VAR_YVanoMaxEld==0 ) { wk_usa_default = 1 }

      if( wk_usa_default==1 )
      {
         //imposto i default in caso di eldom LAGO
         if( InsEldom==1 | InsEldom==-1 )
         {
            YVanoEld = 585
            if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 }

            //Luca 18/12/2019
            if( VAR_VAL(ATTUALE(),"FLAG_soffietto")==1 )
            {
               YVanoEld = 585 + YSpesHPL
               if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 + YSpesHPL }
            }

            //VAR_YFroEld = YVanoEld + 13.5
            VAR_YFroEld = YVanoEld + 7
         }

         //se eldom cliente ma scheda tecnica non inserita --> assegno dei default per evitare problemi di posizionamento
         if( InsEldom==0 & YVanoEld==0 )
         {
            YVanoEld = 585

            //LZ 02/09/2021
            //Ripristino precedente per non dover creare codici nuovi di ante
            //LZ 12/03/2021
            //Il forno compatto prevederebbe SEMPRE un vano che di default fa 450mm
            //Non posso modificarli massivamente, pena una variazione del prezzo delle colonne
            //Approfitto della revisione per modificare almeno questo caso
            //if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 }
            //if( VAR_VAL(ATTUALE(),"TipoColForno")==1 )
            //{
            //   YVanoEld = 448
            //   if( VAR_VAL(ATTUALE(),"VAR_Revisione") == 1  ) { YVanoEld = 450 }
            //}
            if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 }

            //Luca 18/12/2019
            if( FLAG_soffietto==1 )
            {
               YVanoEld = 585 + YSpesHPL
               if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 + YSpesHPL }
            }

            //VAR_YFroEld = YVanoEld + 13.5
            VAR_YFroEld = YVanoEld + 7
         }

         ////posizione di default
         //VAR_PosYEld = 920
         //if( TipoScocca==2 ) { VAR_PosYEld = 736 }
         //if( NOME(ATTUALE())=="ScoccaT_ColLvstForno" ) { VAR_PosYEld = 920 }
      }

      //posizione di default
      if( IS_VAR_FIXED(ATTUALE(),"VAR_PosYEld")==0 )
      {
         //VAR_PosYEld = 920
         //if( TipoScocca==2 ) { VAR_PosYEld = 736 }

         //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
         VAR_PosYEld = 922
         if( Cucina_Versione > 2) { VAR_PosYEld = VAR_PosYEld - 920 + VAR_VAL( idx_att, "VAR_Allineamento") }

         //Luca 03/03/2020
         if( FLAG_soffietto==1 ) { VAR_PosYEld = 917 }

         if( TipoScocca==2 ) { VAR_PosYEld = 738 }

         // LZ 03/03/21 - Gestione dedicata più in basso
         //if( NOME(ATTUALE())=="ScoccaT_ColLvst2Forno" )
         //{
         //   if( TipoScocca==2 ) { VAR_PosYEld = 903 + $Cuc_Spe_Cop }
         //}
      }

      if( NOME(ATTUALE())=="ScoccaT_ColLvstForno" )
      {
         //VAR_PosYEld = 920

         //Luca 24/07/2019 TODO 20540
         //VAR_PosYEld = 920 - 44.5

         //LZ 14/11 modificate dimensione
         //VAR_PosYEld = 920
         //if( VAR_EXIST(ATTUALE(),"TipoScocca") )
         //{
         //   if( VAR_VAL(ATTUALE(),"TipoScocca")>=1 ) { VAR_PosYEld = 920 - 44.5 }
         //}

         //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
         VAR_PosYEld = 922

         if( TipoScocca>=1 ) { VAR_PosYEld = 920 - 44.5 + 2 }

         //Luca 20/03/2020
         if( VAR_Revisione==1 )
         {
            //LZ 03/03/2021: revisione tecnica colonna lvst/forno, gestisco nuovo fondo da 25
            if( wk_DiffYFroEld < -2 ) { YFndFrn = 25 }
            VAR_PosYEld = YPosFndLvst + $Cuc_Spe_Fnd_Lvst_r1 + YVanoLvst + YFndFrn
         }

         //Luca 03/03/2020
         if( FLAG_soffietto==1 ) { VAR_PosYEld = 917 }
      }

      //LZ 03/03/2021: revisione tecnica colonna lvst/forno
      if( NOME(ATTUALE())=="ScoccaT_ColLvst2Forno" )
      {
         VAR_PosYEld = 922
         if( TipoScocca==2 ) { VAR_PosYEld = 903 + $Cuc_Spe_Cop }

         // Alineamento con H873
         if( VAR_VAL(ATTUALE(),"VAR_YAll")==1 ) { VAR_PosYEld = VAR_PosYEld - 46 }

         if( VAR_Revisione==1 )
         {
            if( wk_DiffYFroEld < -2 ) { YFndFrn = 25 }
            VAR_PosYEld = VAR_PosYEld - $Cuc_Spe_Cop + YFndFrn
         }
      }

      PosYRip1 = VAR_PosYEld - $Cuc_Spe_Cop
      PosYRip2 = VAR_PosYEld + YVanoEld + YPieReg

      YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop

      //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
      //YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y
      YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y - 2

      YAntaSup = YVanoRip + $Cuc_Spe_Cop + 6 - 2*$Cuc_Aria_Ant_Y

      if( ACTION()==0 )
      {
         YAntaInf_cmp = YAntaInf
         YAntaSup_cmp = YAntaSup
         //VAR_SET_MODE(ATTUALE(),"YAntaInf_cmp",$MODE_SAVEALWAYS)
         //VAR_SET_MODE(ATTUALE(),"YAntaSup_cmp",$MODE_SAVEALWAYS)
      }

      wk_YAntaSup = YAntaSup

      wk_ante_std = 15
      wk_ante_std[1]  = 419
      wk_ante_std[2]  = 513
      wk_ante_std[3]  = 549
      wk_ante_std[4]  = 559
      wk_ante_std[5]  = 578
      wk_ante_std[6]  = 603
      wk_ante_std[7]  = 657
      wk_ante_std[8]  = 722
      wk_ante_std[9]  = 733
      wk_ante_std[10] = 741
      wk_ante_std[11] = 743
      wk_ante_std[12] = 747
      wk_ante_std[13] = 815
      wk_ante_std[14] = 857
      wk_ante_std[15] = 891

      // *********************************************************************************************
      // PERSONALIZZO x ELDOM 1
      // - sono stati inseriti i dati tecnici su dialog
      // - l'eldom LAGO inserito ha i valori dati ulteriori compilati correttamente
      // *********************************************************************************************
      if( VAR_YVanoMinEld + VAR_YVanoMaxEld > 0 )
      {
         //partendo dal default dell'anta inferiore, calcolo la posizione dei fondi/coperchi interni e dell'anta superiore
         wk_filo_alto_rip1 = YAntaInf + 2*$Cuc_Aria_Ant_Y

         //Luca 16/01/2020 non ci sono più i 2mm del piedino regolatore, di conseguneza alzo di 2mm il ripiano dove appoggia l'eldom
         wk_filo_alto_rip1 = YAntaInf + 2*$Cuc_Aria_Ant_Y + 2

         //Calcolo il vano Eldom
         //se la differenza è <=2 mm prendo il vano maggiore, altrimenti faccio una media
         YVanoEld = VAR_YVanoMinEld + (VAR_YVanoMaxEld-VAR_YVanoMinEld)/2
         if( VAR_YVanoMaxEld-VAR_YVanoMinEld<=2 ) { YVanoEld = VAR_YVanoMaxEld }
         //Luca 18/12/2019
         if( VAR_VAL(ATTUALE(),"FLAG_soffietto")==1 ) { YVanoEld = YVanoEld + YSpesHPL }

         //calcolo lo sbordo superiore e inferiore del frontale eldom rispetto alla dimensione della macchiana (YVanoEld)
         wk_sb_sup_froeld = VAR_YFroEld - YVanoEld + VAR_DeltaBasso
         //wk_sb_sup_froeld = VAR_YFroEld - VAR_YVanoMinEld + VAR_DeltaBasso
         wk_sb_inf_froeld = 0

         if( VAR_DeltaBasso<0 )
         {
            wk_sb_sup_froeld = VAR_YFroEld - YVanoEld - ABS(VAR_DeltaBasso)
            wk_sb_inf_froeld = ABS(VAR_DeltaBasso)
         }

         //calcolo di quanto effettivamente va a sporgere sotto il frontale dell'eldom una volta aperto
         wk_sbr_inf_froeld_crot = wk_sb_inf_froeld + VAR_RotFroEld - SE_NUM(VAR_DeltaBasso>0,VAR_DeltaBasso,0)

         //verifico la posizione corretta del primo ripiano, tenendo in considerazione la rotazione negativa e delta basso
         //devono restare almeno 3mm dall'anta
         if( wk_sbr_inf_froeld_crot > YPieReg + $Cuc_Aria_Ant_Y )
         {
            //LZ 03/03/2021: revisione tecnica colonna lvst/forno
            //TODO - DA COMPLETARE: Per colonne lvst+forno di rev1, viene utilizzato un fondo forno da 25mm nel caso (delta basso - rotazione negativa) < -2mm
            //Se questi sono < -8mm, il fondo sp25mm non è più sufficiente, ripiego nella vecchia gestione

            //devo alzare il ripiano di..
            //wk_filo_alto_rip1 = wk_filo_alto_rip1 + (wk_sbr_inf_froeld_crot + $Cuc_Aria_Ant_Ant_Y - YPieReg - $Cuc_Aria_Ant_Y)

            if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_ColLvst*Forno")
              & VAR_VAL(ATTUALE(),"VAR_Revisione")==1
              & wk_DiffYFroEld >= -8 ) {}
            else
            {
              wk_filo_alto_rip1 = wk_filo_alto_rip1 + (wk_sbr_inf_froeld_crot + $Cuc_Aria_Ant_Ant_Y - YPieReg - $Cuc_Aria_Ant_Y)
            }
         }

         //calcolo la posizione (ancora ipotetica) del fondo interno superiore
         PosYRip2 = wk_filo_alto_rip1 + YPieReg + YVanoEld

         //Verifico quanta battuta resta tra il filo superiore del frontale eldom e il filo inferiore del ripiano2
         //se <2 devo abbassare il ripiano2
         //come minimo devo avere ?? (2) mm
         wk_filo_sopra_fro_eld  = wk_filo_alto_rip1 + YPieReg + VAR_YFroEld
         //mantis 19893 + VAR_DeltaBasso

         wk_battuta = wk_filo_sopra_fro_eld - PosYRip2
         if( wk_battuta<2 )
         {
            //se ho spazio (wk_sb_sup_froeld) abbasso il ripiano
            wk_offy = 2 - wk_battuta
            if( wk_sb_sup_froeld>wk_offy ) { PosYRip2 = PosYRip2 - wk_offy }
         }

         //AGGIORNO variabile posizione eldom
         PosYRip1 = wk_filo_alto_rip1 - $Cuc_Spe_Fnd

         VAR_PosYEld =  PosYRip1 + $Cuc_Spe_Fnd
         PosYRip2 = VAR_PosYEld + YPieReg + YVanoEld
         YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop
         YAntaSup = YVanoRip + $Cuc_Spe_Cop + 6 - 2*$Cuc_Aria_Ant_Y

         //l'aria tra frontale elettrodomestico e frontale superiore deve essere minimo 3mm e massimo 5mm
         //se c'è un'anta standard in questo range, utilizzo quella
         //se non c'è un'anta stardard in questo range, la calcolo mantendendo 3mm di aria

         //calcolo anta superiore ottimale (3mm aria da frontale forno)
         wk_AntaSup = Y - wk_filo_sopra_fro_eld - 3 - $Cuc_Aria_Ant_Y

         //verifico se c'è un'anta standard >= wk_AntaSup e <= wk_AntaSup+2
         wk_anta_std_trovata = 0
         i = 1
         while ( i<= wk_ante_std )
         {
            if( wk_ante_std[i]<=wk_AntaSup & wk_ante_std[i]+2>=wk_AntaSup ) { wk_anta_std_trovata = wk_ante_std[i] }
            i = i + 1
         }

         //se ho trovato un'alta standard, uso quella
         if( wk_anta_std_trovata>0 ) { YAntaSup = wk_anta_std_trovata }
         else                        { YAntaSup = wk_AntaSup }

         //LP //verifico aria tra filo sotto anta superiore e filo sopra frontale eldom
         //LP wk_filo_sotto_anta_sup = Y - YAntaSup - $Cuc_Aria_Ant_Y
         //LP wk_filo_sopra_fro_eld  = wk_filo_alto_rip1 + YPieReg + VAR_YFroEld + VAR_DeltaBasso
         //LP wk_aria = wk_filo_sotto_anta_sup-wk_filo_sopra_fro_eld
         //LP //se aria < 3mm riduco aria superiore
         //LP if( wk_aria>0  & wk_aria < $Cuc_Aria_Ant_Ant_Y  )  { YAntaSup = YAntaSup - ($Cuc_Aria_Ant_Ant_Y - wk_aria) }
         //LP
         //LP //dopo aver ricalcolato l'anta superiore, devo verificare di aver almeno ?? (2)mm di battuta sul ripiano2,
         //LP //altrimenti devo alzarlo
         //LP wk_filo_sotto_anta_sup = Y - YAntaSup - $Cuc_Aria_Ant_Y
         //LP wk_filo_sopra_rip2 = PosYRip2 + $Cuc_Spe_Fnd
         //LP wk_battuta = wk_filo_sopra_rip2 - wk_filo_sotto_anta_sup
         //LP if( wk_battuta<2 )
         //LP {
         //LP    wk_offy = 2 - wk_battuta
         //LP    PosYRip2 = PosYRip2 + wk_offy
         //LP }

         //AGGIORNO VARIABILI
         PosYRip1 = wk_filo_alto_rip1 - $Cuc_Spe_Fnd
         YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop

         //Luca 27/04/2021 variabili che indicano filo basso e filo sopra eldom (da terra)
         if( NOME(ATTUALE()) == "VanoForno_ColFalegnameria" )
         {
            FroForno_A0 = alto_0.y - Vano_OffY + wk_sb_sup_froeld
            FroForno_B0 = base_0.y + Vano_OffY - wk_sb_inf_froeld
         }
      }

      if( InsEldom != InsEldom_prec ) { InsEldom_prec = InsEldom }

      //NO-OLDYVanoEld = VAR_YVanoMaxEld + YPieReg
      //NO-OLD
      //NO-OLDwk_FA = $Cuc_Aria_Ant_Y
      //NO-OLDwk_F1 = 2
      //NO-OLDwk_F2 = 2*wk_FA
      //NO-OLDwk_F3 = 2*wk_FA
      //NO-OLD
      //NO-OLDYAntaInf = 917
      //NO-OLDif( TipoScocca==2 ) { VAR_PosYEld = 733 }
      //NO-OLD
      //NO-OLDif( VAR_DeltaBasso==0 )
      //NO-OLD{
      //NO-OLD   VAR_PosYEld = YAntaInf + 2*wk_FA
      //NO-OLD   YAntaSup = Y - YAntaInf - 2*wk_FA - VAR_YFroEld - wk_F2 - wk_F1
      //NO-OLD   wk_F1 = YPieReg + wk_FA
      //NO-OLD}
      //NO-OLD
      //NO-OLDif( VAR_RotFroEld> YPieReg+wk_FA )
      //NO-OLD{
      //NO-OLD   VAR_PosYEld = YAntaInf + wk_FA + VAR_RotFroEld - YPieReg
      //NO-OLD   YAntaSup = Y - YAntaInf - 2*wk_FA - VAR_YFroEld - wk_F2 - VAR_RotFroEld
      //NO-OLD   //??
      //NO-OLD   wk_F1 = VAR_RotFroEld
      //NO-OLD}
      //NO-OLD
      //NO-OLDif( VAR_DeltaBasso>0 & VAR_RotFroEld==0 )
      //NO-OLD{
      //NO-OLD   wk_F1 = 3
      //NO-OLD   VAR_PosYEld = YAntaInf + wk_FA + wk_F1 + VAR_DeltaBasso - YPieReg
      //NO-OLD}
      //NO-OLD
      //NO-OLDif( VAR_DeltaBasso>0
      //NO-OLD  & VAR_RotFroEld>0
      //NO-OLD  & VAR_DeltaBasso + VAR_RotFroEld > YPieReg + wk_FA )
      //NO-OLD{
      //NO-OLD   VAR_PosYEld = YAntaInf + wk_FA + VAR_RotFroEld + VAR_DeltaBasso - YPieReg
      //NO-OLD   YAntaSup = Y - YAntaInf - 2*wk_FA - VAR_YFroEld - wk_F2 - VAR_RotFroEld - VAR_DeltaBasso
      //NO-OLD   wk_F1 = VAR_RotFroEld
      //NO-OLD   if( VAR_RotFroEld<3 ) { wk_F1 = 3 }
      //NO-OLD}

      //Luca 09/06/2020
      //Luca 09/06/2020
      COMPONENTI2("wk_ces",ATTUALE(),"Cuc_Cestone")
      COMPONENTI2("wk_cas",ATTUALE(),"Cuc_Cassetto")
      if( wk_ces>0 | wk_cas>0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_PosYEld",1)
         EXITSUB()
      }

      //Luca 29/10/2020 riporto modifiche di LAGO
      if( $OnLoadOrder == 1 | $CNP__ == 1 ) { EXITSUB() }

      wk_min_VAR_PosYEld = VAR_PosYEld - (YAntaInf - 423)
      wk_max_VAR_PosYEld = VAR_PosYEld + (YAntaSup - 423)

      VAR_SET_MENU(ATTUALE(),"VAR_PosYEld",STRCAT("( ",STR(wk_min_VAR_PosYEld),"-",STR(wk_max_VAR_PosYEld)," )"))

      //LZ 08/06/2021: permetto speciali
      if( VAR_VAL(ATTUALE(), "FLAG_Speciale") == 1 ) { EXITSUB() }

      if( VAR_PosYEld < wk_min_VAR_PosYEld | VAR_PosYEld > wk_max_VAR_PosYEld ) { CHIEDI(ATTUALE(),"VAR_PosYEld") }
   }

   PROCEDURA DefParSchedaTecnicaForno
   {
      if( SchedaTecnica == 0)  { EXITSUB() }

      DEL_VAR_MODIFICATE( ATTUALE(), "SchedaTecnica")
      SchedaTecnica = 0

      if( $ATTIVA_DLL == 0)    { EXITSUB() }

      $wk_title = MSG(1170) //"Scheda tecnica Forno"

      //$wk_image = STRCAT($path_bmp,"Dialog\Forno.png")
      $wk_image = STRCAT($path_bdm,"bmp\Dialog\Forno.png")

      //$wk_xfr     = STR(VAR_XEld)
      $wk_yminfr  = STR(VAR_YVanoMinEld)
      $wk_ymaxfr  = STR(VAR_YVanoMaxEld)
      $wk_yfrofr  = STR(VAR_YFroEld)
      //delta basso negativo --> frontale sporge da macchina
      //delta basso positivo --> frontale rialzato da macchina
      $wk_deltabs = STR(VAR_DeltaBasso)
      $wk_roteld  = STR(VAR_RotFroEld)
      $wk_roteld_enable = 1

      $wk_leg_xfr     = "[ X ]  "
      $wk_leg_yminfr  = "[ YMin ] "
      $wk_leg_ymaxfr  = "[ YMax ] "
      $wk_leg_yfrofr  = "[ YFro ] "
      $wk_leg_deltabs = "[ DB ] "
      $wk_leg_roteld  = "[ RTN ] "

      //$wk_dsc_xfr     = "Larghezza:"
      $wk_dsc_yminfr  = MSG(1171)  //"Altezza minima:"
      $wk_dsc_ymaxfr  = MSG(1172)  //"Altezza massima:"
      $wk_dsc_yfrofr  = MSG(1173)  //"Altezza frontale:"
      $wk_dsc_deltabs = MSG(1174)  //"Delta basso:"
      $wk_dsc_roteld  = MSG(1175)  //"Rotazione anta:"

      $wk_posx_leg = 30
      $wk_posx_lab = 80
      $wk_posx_ran = 260
      $wk_posx_edt = 200

      $wk_dimx_leg = 30
      $wk_dimx_lab = 110
      $wk_dimx_ran = 80
      $wk_dimx_edt = 50

      $wk_min_yminfr  =  50   $wk_max_yminfr  = 900
      $wk_min_ymaxfr  =  50   $wk_max_ymaxfr  = 900
      $wk_min_yfrofr  =  50   $wk_max_yfrofr  = 900

      //Incremento limiti se pk2
      wk_cop_pk2 = 0
      COMPONENTI2( "wk_cop_int", ATTUALE(), "Cuc_Cop")

      wk_cop_num = 1
      while( wk_cop_pk2 == 0
           & wk_cop_num <= wk_cop_int )
      {
         wk_cop_att = wk_cop_int[wk_cop_num]

         if( VAR_VAL( wk_cop_att, "InternoCol") > 0
           & VAR_VAL( wk_cop_att, "VAR_Revisione_PK2") > 0 ) { wk_cop_pk2 = 1 }

         wk_cop_num = wk_cop_num + 1
      }

      if( wk_cop_pk2 > 0 )
      {
         $wk_min_yminfr  =  50   $wk_max_yminfr  = 1500
         $wk_min_ymaxfr  =  50   $wk_max_ymaxfr  = 1500
         $wk_min_yfrofr  =  50   $wk_max_yfrofr  = 1500
      }

      $wk_min_deltabs = -15   $wk_max_deltabs =   15
      $wk_min_roteld  =   0   $wk_max_roteld  =   15

      $wk_range_yminfr = STRCAT("( ",STR($wk_min_yminfr )," - ",STR($wk_max_yminfr )," )")
      $wk_range_ymaxfr = STRCAT("( ",STR($wk_min_ymaxfr )," - ",STR($wk_max_ymaxfr )," )")
      $wk_range_yfrofr = STRCAT("( ",STR($wk_min_yfrofr )," - ",STR($wk_max_yfrofr )," )")
      $wk_range_deltabs= STRCAT("( ",STR($wk_min_deltabs)," - ",STR($wk_max_deltabs)," )")
      $wk_range_roteld = STRCAT("( ",STR($wk_min_roteld )," - ",STR($wk_max_roteld )," )")

      //COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SchedaTecnicaForno",APICI()))
      //if($DlgResult__==0 ) { EXITSUB() }

      $wk_ok = 0
      while( $wk_ok==0 )
      {
         COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SchedaTecnicaForno",APICI()))
         if($DlgResult__==0 ) { $wk_ok = -1 }
         else
         {
            //verifico i valori inseriti
            wk_msg = ""
            if( ATOI($wk_yminfr) > ATOI($wk_ymaxfr)
              | ATOI($wk_yminfr) < $wk_min_yminfr | ATOI($wk_yminfr) > $wk_max_yminfr)
            {
               //wk_msg = STRCAT(wk_msg,"\n- Inserire un valore valido di 'Altezza minima'.")
               //traduzioni
               //wk_msg = STRCAT(wk_msg,"\n- Valore 'Altezza minima' non valido.")
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1187))
            }
            if( ATOI($wk_ymaxfr) < ATOI($wk_yminfr)
              | ATOI($wk_ymaxfr) < $wk_min_ymaxfr | ATOI($wk_ymaxfr) > $wk_max_ymaxfr)
            {
               //wk_msg = STRCAT(wk_msg,"\n- Inserire un valore valido di 'Altezza massima'.")

               //wk_msg = STRCAT(wk_msg,"\n- Valore 'Altezza massima' non valido.")
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1188))

            }

            if( ATOI($wk_yfrofr)<$wk_min_yfrofr | ATOI($wk_yfrofr)>$wk_max_yfrofr )
            {
               //wk_msg = STRCAT(wk_msg,"\n- Inserire un valore valido di 'Altezza Frontale'.")

               //wk_msg = STRCAT(wk_msg,"\n- Valore 'Altezza Frontale' non valido.")
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1189))
            }

            if( ATOI($wk_deltabs)<$wk_min_deltabs | ATOI($wk_deltabs)>$wk_max_deltabs )
            {
               //wk_msg = STRCAT(wk_msg,"\n- Inserire un valore valido di 'Delta basso'.")

               //wk_msg = STRCAT(wk_msg,"\n- Valore 'Delta Basso' non valido.")
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1190))
            }

            if( ATOI($wk_roteld)<$wk_min_roteld | ATOI($wk_roteld)>$wk_max_roteld )
            {
               //wk_msg = STRCAT(wk_msg,"\n- Inserire un valore valido di 'Rotazione Negativa'.")

               //wk_msg = STRCAT(wk_msg,"\n- Valore 'Rotazione Negativa' non valido.")
               wk_msg = STRCAT(wk_msg,"\n- ",MSG(1191))
            }

            if( wk_msg!="" )
            {
               //wk_msg = STRCAT("ATTENZIONE!!",wk_msg)
               wk_msg = STRCAT(MSG(1090),wk_msg)
               DISPLAY2(wk_msg)

               //LZ 25/11/2021: gestione speciale
               if( VAR_VAL( ATTUALE(), "FLAG_Speciale") == 1 ) { $wk_ok = 1 }
            }
            else
            {
               $wk_ok = 1
            }
         }
      }
      if( $wk_ok<0 ) { EXITSUB() }

      VAR_YVanoMinEld = ATOI($wk_yminfr)
      VAR_YVanoMaxEld = ATOI($wk_ymaxfr)
      VAR_YFroEld     = ATOI($wk_yfrofr)
      VAR_DeltaBasso  = ATOI($wk_deltabs)
      VAR_RotFroEld   = ATOI($wk_roteld)
      VAR_RotFroEld   = ABS(ATOI($wk_roteld))

      //Luca 27/04/2021
      if( UN_PADRE("ScoccaT_ColFalegnameria") )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())), " no_agganciati //OnChangedVar_VaniColFalegnameria"))
      }
   }

   PROCEDURA DefParSchedaTecnicaForno_2
   {
      if( SchedaTecnica2==0 )  { EXITSUB() }

      DEL_VAR_MODIFICATE(ATTUALE(),"SchedaTecnica2")
      SchedaTecnica2 = 0

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      //$wk_title = "Scheda tecnica 2° Eldom"
      $wk_title = MSG(1176)

      $wk_image = ""

      //Luca 23/10/2019 microonde e forno uso stessa png
      if( VAR_EXIST(ATTUALE(),"TipoEldom2") )
      {
         if( VAR_VAL(ATTUALE(),"TipoEldom2")==0
           //| VAR_VAL(ATTUALE(),"TipoEldom2")==0 ) { $wk_image = STRCAT($path_bmp,"Dialog\Forno.png") }
           | VAR_VAL(ATTUALE(),"TipoEldom2")==1 ) { $wk_image = STRCAT($path_bdm,"bmp\Dialog\Forno.png") }
      }

      $wk_yminfr  = STR(VAR_YVanoMinEld2)
      $wk_ymaxfr  = STR(VAR_YVanoMaxEld2)
      $wk_yfrofr  = STR(VAR_YFroEld2)
      $wk_deltabs = STR(VAR_DeltaBasso2)
      $wk_roteld  = STR(VAR_RotFroEld2)
      $wk_roteld_enable = 1

      $wk_leg_xfr     = "[ X ]  "
      $wk_leg_yminfr  = "[ YMin ] "
      $wk_leg_ymaxfr  = "[ YMax ] "
      $wk_leg_yfrofr  = "[ YFro ] "
      $wk_leg_deltabs = "[ DB ] "
      $wk_leg_roteld  = "[ RTN ] "

      $wk_dsc_yminfr  = MSG(1171)  //"Altezza minima:"
      $wk_dsc_ymaxfr  = MSG(1172)  //"Altezza massima:"
      $wk_dsc_yfrofr  = MSG(1173)  //"Altezza frontale:"
      $wk_dsc_deltabs = MSG(1174)  //"Delta basso:"
      $wk_dsc_roteld  = MSG(1175)  //"Rotazione anta:"


      $wk_posx_leg = 30
      $wk_posx_lab = 80
      $wk_posx_edt = 200

      $wk_dimx_leg = 30
      $wk_dimx_lab = 110
      $wk_dimx_edt = 50

      COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SchedaTecnicaForno",APICI()))
      if($DlgResult__==0 ) { EXITSUB() }

      VAR_YVanoMinEld2 = ATOI($wk_yminfr)
      VAR_YVanoMaxEld2 = ATOI($wk_ymaxfr)
      VAR_YFroEld2     = ATOI($wk_yfrofr)
      VAR_DeltaBasso2  = ATOI($wk_deltabs)
      //VAR_RotFroEld2   = ATOI($wk_roteld)
      VAR_RotFroEld2   = ABS(ATOI($wk_roteld))
   }

   PROCEDURA SetVarColonna2Forno
   {
      if( $ATTIVA_DLL )
      {
         GOSUB Set_GEST_C016_Eldom

         GOSUB Ctrl_InsEldom
      }

      //se da eldom LAGO passo a Eldom cliente, faccio reset variabili
      if( InsEldom==0 & VAR_VAL(ATTUALE(),"InsEldom_prec")==1 )
      {
         VAR_YVanoMinEld = 0
         VAR_YVanoMaxEld = 0
         VAR_YFroEld     = 0
         VAR_DeltaBasso  = 0
         VAR_RotFroEld   = 0

         InsEldom_prec  = InsEldom
      }

      //se da eldom LAGO passo a Eldom cliente, faccio reset variabili
      if( InsEldom2==0 & VAR_VAL(ATTUALE(),"InsEldom2_prec")==1 )
      {
         VAR_YVanoMinEld2 = 0
         VAR_YVanoMaxEld2 = 0
         VAR_YFroEld2     = 0
         VAR_DeltaBasso2  = 0
         VAR_RotFroEld2   = 0

         InsEldom2_prec  = InsEldom2
      }

      //Luca 16/12/2019 in caso di soffietto non è più presente il ripiano in ferro ma uno da 19mm
      wk_sp_rip_intermedio = $Cuc_Spe_RipFe
      if( FLAG_soffietto==1 ) { wk_sp_rip_intermedio = $Cuc_Spe_Fnd }

      //dialog per eldom 1
      GOSUB DefParSchedaTecnicaForno

      //dialog per eldom 2
      GOSUB DefParSchedaTecnicaForno_2

      wk_usa_default1 = 0
      wk_usa_default2 = 0

      if( ACTION()==0 ) { wk_usa_default1 = 1  wk_usa_default2 = 1 }

      //se eldom cliente ma scheda tecnica non presente
      //if( InsEldom==0 & VAR_YVanoMinEld+VAR_YVanoMaxEld==0 )    { wk_usa_default = 2 }
      if( VAR_YVanoMinEld+VAR_YVanoMaxEld==0 )    { wk_usa_default1 = 1 }

      //se eldom2 cliente ma scheda tecnica non presente
      //if( InsEldom2==0 & VAR_YVanoMinEld2+VAR_YVanoMaxEld2==0 ) { wk_usa_default = 3 }
      if( VAR_YVanoMinEld2+VAR_YVanoMaxEld2==0 ) { wk_usa_default2 = 1 }

      //imposto i default per eldom 1
      if( wk_usa_default1==1 )
      {
         YVanoEld  = 588

         //Luca 18/12/2019
         if( VAR_VAL(ATTUALE(),"FLAG_soffietto")==1 ) { YVanoEld = 585 + YSpesHPL }

         VAR_YFroEld = YVanoEld + 7

         //VAR_PosYEld = 552
         //if( TipoScocca==2 ) { VAR_PosYEld = 368 }
      }

      //Luca 23/10/2019
      //posizione di default
      if( IS_VAR_FIXED(ATTUALE(),"VAR_PosYEld")==0 )
      {
         //VAR_PosYEld = 552
         //if( TipoScocca==2 ) { VAR_PosYEld = 368 }

         //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
         VAR_PosYEld = 554
         if( TipoScocca==2 ) { VAR_PosYEld = 370 }
      }


      //defualt per eldom 2
      if( wk_usa_default2==1 )
      {
         YVanoEld2 = 448
         if( VAR_VAL(ATTUALE(),"TipoColForno")==2 ) { YVanoEld2 = 378 }
         VAR_YFroEld2 =  YVanoEld2 + 12
      }

      //COMANDO2(STRCAT("LOGMSG SVC2F ATTUALE: ",STR(ATTUALE()), " PosYRip1=",STR(PosYRip1) , " PosYRip2=",STR(PosYRip2),  " VAR_PosYEld=",STR(VAR_PosYEld), " YAntaInf=",STR(YAntaInf),  " | DEBUG ---- 1"))

      PosYRip1 = VAR_PosYEld - $Cuc_Spe_Cop
      PosYRipF = VAR_PosYEld + YVanoEld + YPieReg
      //PosYRip2 = PosYRipF + $Cuc_Spe_RipFe + YVanoEld2
      PosYRip2 = PosYRipF + wk_sp_rip_intermedio + YVanoEld2

      //VAR_PosYEld2 =  VAR_PosYEld + YPieReg + YVanoEld + $Cuc_Spe_RipFe
      //VAR_PosYEld2 = PosYRipF + $Cuc_Spe_RipFe
      VAR_PosYEld2 = PosYRipF + wk_sp_rip_intermedio


      //YVanoRip = Y - VAR_PosYEld - YVanoEld - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - YPieReg - VAR_YFroEld2 - $Cuc_Spe_RipFe
      YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop

      //Luca 18/12/2019 20911: Colonne forno cucina 2.0: modifica posizionamento fondo vano forno
      //YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y
      YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y - 2

      //YAntaSup = Y - YAntaInf - 2*$Cuc_Aria_Ant_Y - VAR_YFroEld - VAR_YFroEld2 - 2*$Cuc_Aria_Ant_Y - $Cuc_Aria_Ant_Y - $Cuc_Spe_RipFe
      YAntaSup = YVanoRip + $Cuc_Spe_Cop + 4 - 2*$Cuc_Aria_Ant_Y

      if( ACTION()==0 )
      {
         YAntaInf_cmp = YAntaInf
         YAntaSup_cmp = YAntaSup
         //VAR_SET_MODE(ATTUALE(),"YAntaInf_cmp",$MODE_SAVEALWAYS)
         //VAR_SET_MODE(ATTUALE(),"YAntaSup_cmp",$MODE_SAVEALWAYS)
      }

      //Luca 07/05/2019
      wk_ante_std = 15
      wk_ante_std[1]  = 419
      wk_ante_std[2]  = 513
      wk_ante_std[3]  = 549
      wk_ante_std[4]  = 559
      wk_ante_std[5]  = 578
      wk_ante_std[6]  = 603
      wk_ante_std[7]  = 657
      wk_ante_std[8]  = 722
      wk_ante_std[9]  = 733
      wk_ante_std[10] = 741
      wk_ante_std[11] = 743
      wk_ante_std[12] = 747
      wk_ante_std[13] = 815
      wk_ante_std[14] = 857
      wk_ante_std[15] = 891

      // *********************************************************************************************
      // PERSONALIZZO x ELDOM 1
      // - sono stati inseriti i dati tecnici su dialog
      // - l'eldom LAGO inserito ha i valori dati ulteriori compilati correttamente
      // *********************************************************************************************
      if( VAR_YVanoMinEld + VAR_YVanoMaxEld > 0 )
      {
         //partendo dal default dell'anta inferiore, calcolo la posizione dei fondi/coperchi interni e dell'anta superiore
         wk_filo_alto_rip1 = YAntaInf + 2*$Cuc_Aria_Ant_Y

         //Luca 16/01/2020 non ci sono più i 2mm del piedino regolatore, di conseguneza alzo di 2mm il ripiano dove appoggia l'eldom
         wk_filo_alto_rip1 = YAntaInf + 2*$Cuc_Aria_Ant_Y + 2

         //Calcolo il vano Eldom
         //se la differenza è <=2 mm prendo il vano maggiore, altrimenti faccio una media
         YVanoEld = VAR_YVanoMinEld + (VAR_YVanoMaxEld-VAR_YVanoMinEld)/2
         if( VAR_YVanoMaxEld-VAR_YVanoMinEld<=2 ) { YVanoEld = VAR_YVanoMaxEld }
         //Luca 18/12/2019
         if( VAR_VAL(ATTUALE(),"FLAG_soffietto")==1 ) { YVanoEld = YVanoEld + YSpesHPL }

         //calcolo lo sbordo superiore e inferiore del frontale eldom rispetto alla dimensione della macchiana (YVanoEld)
         wk_sb_sup_froeld = VAR_YFroEld - YVanoEld + VAR_DeltaBasso
         wk_sb_inf_froeld = 0
         if( VAR_DeltaBasso<0 )
         {
            wk_sb_sup_froeld = VAR_YFroEld - YVanoEld - ABS(VAR_DeltaBasso)
            wk_sb_inf_froeld = ABS(VAR_DeltaBasso)
         }

         //calcolo di quanto effettivamente va a sporgere sotto il frontale dell'eldom una volta aperto
         wk_sbr_inf_froeld_crot = wk_sb_inf_froeld + VAR_RotFroEld - SE_NUM(VAR_DeltaBasso>0,VAR_DeltaBasso,0)

         //verifico la posizione corretta del primo ripiano, tenendo in considerazione la rotazione negativa e delta basso
         //devono restare almeno 3mm dall'anta
         if( wk_sbr_inf_froeld_crot > YPieReg + $Cuc_Aria_Ant_Y )
         {
            //devo alzare il ripiano di..
            wk_filo_alto_rip1 = wk_filo_alto_rip1 + (wk_sbr_inf_froeld_crot + $Cuc_Aria_Ant_Ant_Y - YPieReg - $Cuc_Aria_Ant_Y)
         }

         //aggiorno le posizioni
         VAR_PosYEld =  wk_filo_alto_rip1
         PosYRip1 = VAR_PosYEld - $Cuc_Spe_Cop
         PosYRipF = VAR_PosYEld + YVanoEld + YPieReg
         //PosYRip2 = PosYRipF + $Cuc_Spe_RipFe + YVanoEld2
         PosYRip2 = PosYRipF + wk_sp_rip_intermedio + YVanoEld2

         //Verifico quanta battuta resta tra il filo superiore del frontale eldom1 e il filo inferiore del ripiano in ferro
         //se <2 devo abbassare il ripiano in ferro
         wk_filo_sopra_fro_eld  = wk_filo_alto_rip1 + YPieReg + VAR_YFroEld
         //mantis 19893 + VAR_DeltaBasso

         wk_battuta = wk_filo_sopra_fro_eld - PosYRipF
         if( wk_battuta<2 )
         {
            //se ho spazio (wk_sb_sup_froeld) abbasso il ripiano
            wk_offy = 2 - wk_battuta
            if( wk_sb_sup_froeld>wk_offy ) { PosYRipF = PosYRipF - wk_offy }
         }
         //se caso in cui lo sbordo è maggiore dello spessore del ripiano --> alzo il ripiano in ferro
         if( wk_battuta>$Cuc_Spe_RipFe )
         {
            //wk_offy = wk_battuta-  $Cuc_Spe_RipFe + ($Cuc_Spe_RipFe/2)
            wk_offy = wk_battuta-  wk_sp_rip_intermedio + ($Cuc_Spe_RipFe/2)
            PosYRipF = PosYRipF + wk_offy
         }
         //se è uguale o minore di 2, alzo della possibile rotazione negativa di eldom2 (tenendo almeno 2 mm di aria)
         //if( wk_battuta==$Cuc_Spe_RipFe )
         //{
         //   PosYRipF = PosYRipF + VAR_RotFroEld2 + SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0) + 2
         //}

         if( wk_battuta-$Cuc_Spe_RipFe<=2
           & wk_battuta-$Cuc_Spe_RipFe>=00  )
         {
            //wk_offy = wk_battuta -  $Cuc_Spe_RipFe
            wk_offy = wk_battuta -  wk_sp_rip_intermedio
            PosYRipF = PosYRipF + VAR_RotFroEld2 + SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0) + ABS(wk_offy - 2)
            //if( wk_offy==2 )  { PosYRipF = PosYRipF + VAR_RotFroEld2 + SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0) }
            //if( wk_offy==1 )  { PosYRipF = PosYRipF + VAR_RotFroEld2 + SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0) + 1 }
            //if( wk_offy==0 )  { PosYRipF = PosYRipF + VAR_RotFroEld2 + SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0) + 2 }
         }

         //if( VAR_DeltaBasso2<0 )
         //{
         //   wk_battuta = wk_filo_sopra_fro_eld - PosYRipF
         //
         //   wk_DeltaBasso2 = ABS(VAR_DeltaBasso2)
         //   if( wk_DeltaBasso2 + wk_battuta > $Cuc_Spe_RipFe )
         //   {
         //      wk_offy = wk_battuta +  wk_DeltaBasso2 + 2
         //      wk_offy = $Cuc_Spe_RipFe - wk_offy
         //      PosYRipF = PosYRipF - wk_offy
         //   }
         //}

         //aggiorno variabili
         //VAR_PosYEld2 = PosYRipF + $Cuc_Spe_RipFe
         //PosYRip2 = PosYRipF + $Cuc_Spe_RipFe + YVanoEld2
         VAR_PosYEld2 = PosYRipF + wk_sp_rip_intermedio
         PosYRip2 = PosYRipF + wk_sp_rip_intermedio + YVanoEld2
         YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop

         YAntaSup = YVanoRip + $Cuc_Spe_Cop + 4 - 2*$Cuc_Aria_Ant_Y

         wk_filo_sopra_fro_eld2 = VAR_PosYEld2 + VAR_YFroEld2 - SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0)
         //mantis 19893 + VAR_DeltaBasso2

         //Luca 07/05/2019
         //l'aria tra frontale elettrodomestico e frontale superiore deve essere minimo 3mm e massimo 5mm
         //se c'è un'anta standard in questo range, utilizzo quella
         //se non c'è un'anta stardard in questo range, la calcolo mantendendo 3mm di aria
         //calcolo anta superiore ottimale (3mm aria da frontale forno)
         wk_AntaSup = Y - wk_filo_sopra_fro_eld2 - 3 - $Cuc_Aria_Ant_Y

         //verifico se c'è un'anta standard >= wk_AntaSup e <= wk_AntaSup+2
         wk_anta_std_trovata = 0
         i = 1
         while ( i<= wk_ante_std )
         {
            if( wk_ante_std[i]<=wk_AntaSup & wk_ante_std[i]+2>=wk_AntaSup ) { wk_anta_std_trovata = wk_ante_std[i] }
            i = i + 1
         }

         //se ho trovato un'alta standard, uso quella
         if( wk_anta_std_trovata>0 ) { YAntaSup = wk_anta_std_trovata }
         else                        { YAntaSup = wk_AntaSup }
      }


      // *********************************************************************************************
      // PERSONALIZZO x ELDOM 2
      // - sono stati inseriti i dati tecnici su dialog
      // - l'eldom LAGO inserito ha i valori dati ulteriori compilati correttamente
      // *********************************************************************************************
      if( VAR_YVanoMinEld2 + VAR_YVanoMaxEld2 > 0 )
      {
         //wk_filo_alto_rip2 = PosYRipF + $Cuc_Spe_RipFe
         wk_filo_alto_rip2 = PosYRipF + wk_sp_rip_intermedio

         //Calcolo il vano Eldom
         //se la differenza è <=2 mm prendo il vano maggiore, altrimenti faccio una media
         YVanoEld2 = VAR_YVanoMinEld2 + (VAR_YVanoMaxEld2-VAR_YVanoMinEld2)/2
         if( VAR_YVanoMaxEld2-VAR_YVanoMinEld2<=2 ) { YVanoEld2 = VAR_YVanoMaxEld2 }

         //calcolo lo sbordo superiore e inferiore del frontale eldom rispetto alla dimensione della macchiana (YVanoEld)
         wk_sb_sup_froeld2 = VAR_YFroEld2 - YVanoEld2
         //mantis 19893 + VAR_DeltaBasso2

         //wk_sb_sup_froeld = VAR_YFroEld - VAR_YVanoMinEld + VAR_DeltaBasso
         wk_sb_inf_froeld2 = 0
         if( VAR_DeltaBasso2<0 )
         {
            wk_sb_sup_froeld2 = VAR_YFroEld2 - YVanoEld2 - ABS(VAR_DeltaBasso2)
            wk_sb_inf_froeld2 = ABS(VAR_DeltaBasso2)
         }

         //calcolo di quanto effettivamente va a sporgere sotto il frontale dell'eldom una volta aperto
         wk_sbr_inf_froeld_crot2 = wk_sb_inf_froeld2 + VAR_RotFroEld2 - SE_NUM(VAR_DeltaBasso2>0,VAR_DeltaBasso2,0)

         //verifico la posizione corretta del ripiano in ferro, tenendo in considerazione la rotazione negativa e delta basso
         //devono restare almeno 3mm dall'anta
         //if( wk_sbr_inf_froeld_crot2 > $Cuc_Aria_Ant_Y )
         //{
         //   //devo alzare il ripiano di..
         //   wk_filo_alto_rip2 = wk_filo_alto_rip2 + (wk_sbr_inf_froeld_crot2 + $Cuc_Aria_Ant_Ant_Y )
         //}
         //wk_filo_sopra_fro_eld --

         if( VAR_EXIST(ATTUALE(),"wk_filo_sopra_fro_eld")==0  )
         {
            wk_filo_sopra_fro_eld = VAR_PosYEld + VAR_YFroEld - SE_NUM(VAR_DeltaBasso<0,-1*VAR_DeltaBasso,0)
         }

         //wk_filo_sotto_fro_eld2 = PosYRipF + $Cuc_Spe_RipFe - SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0)
         wk_filo_sotto_fro_eld2 = PosYRipF + wk_sp_rip_intermedio - SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0)

         if( wk_filo_sotto_fro_eld2 - wk_filo_sopra_fro_eld < 3 )
         {
            wk_off = wk_filo_sotto_fro_eld2 - wk_filo_sopra_fro_eld
            PosYRipF = PosYRipF + (3 - wk_off)

            //wk_filo_alto_rip2 = PosYRipF + $Cuc_Spe_RipFe
            wk_filo_alto_rip2 = PosYRipF + wk_sp_rip_intermedio
         }

         //VAR_PosYEld2 = PosYRipF + $Cuc_Spe_RipFe
         //PosYRip2 = PosYRipF + $Cuc_Spe_RipFe + YVanoEld2
         VAR_PosYEld2 = PosYRipF + wk_sp_rip_intermedio
         PosYRip2 = PosYRipF + wk_sp_rip_intermedio + YVanoEld2

         //Verifico quanta battuta resta tra il filo superiore del frontale eldom e il filo inferiore del ripiano
         //se <2 devo abbassare il ripiano2
         wk_filo_sopra_fro_eld2  = wk_filo_alto_rip2 + VAR_YFroEld2 - SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0)
         // - SE_NUM(VAR_DeltaBasso2<0,-1*VAR_DeltaBasso2,0)

         //mantis 19893 + VAR_DeltaBasso
         wk_battuta2 = wk_filo_sopra_fro_eld2 - PosYRip2
         if( wk_battuta2<2 )
         {
            //se ho spazio (wk_sb_sup_froeld) abbasso il ripiano
            wk_offy = 2 - wk_battuta2
            if( wk_sb_sup_froeld2>wk_offy ) { PosYRip2 = PosYRip2 - wk_offy }
         }

         //se la battuta è maggiore di metà ripiano, lo alzo
         if( wk_battuta2> ($Cuc_Spe_Fnd/2) )
         {
            wk_offy = wk_battuta2 -  $Cuc_Spe_Fnd + ($Cuc_Spe_Fnd/2)
            PosYRip2 = PosYRip2 + wk_offy
         }

         //aggiorno le variabili
         YVanoRip = Y - PosYRip2 - $Cuc_Spe_Fnd - $Cuc_Spe_Cop
         YAntaSup = YVanoRip + $Cuc_Spe_Cop + 4 - 2*$Cuc_Aria_Ant_Y

         //Luca 07/05/2019
         //l'aria tra frontale elettrodomestico e frontale superiore deve essere minimo 3mm e massimo 5mm
         //se c'è un'anta standard in questo range, utilizzo quella
         //se non c'è un'anta stardard in questo range, la calcolo mantendendo 3mm di aria
         //calcolo anta superiore ottimale (3mm aria da frontale forno)
         wk_AntaSup = Y - wk_filo_sopra_fro_eld2 - 3 - $Cuc_Aria_Ant_Y

         //verifico se c'è un'anta standard >= wk_AntaSup e <= wk_AntaSup+2
         wk_anta_std_trovata = 0
         i = 1
         while ( i<= wk_ante_std )
         {
            if( wk_ante_std[i]<=wk_AntaSup & wk_ante_std[i]+2>=wk_AntaSup ) { wk_anta_std_trovata = wk_ante_std[i] }
            i = i + 1
         }

         //se ho trovato un'alta standard, uso quella
         if( wk_anta_std_trovata>0 ) { YAntaSup = wk_anta_std_trovata }
         else                        { YAntaSup = wk_AntaSup }
      }

      if( InsEldom  != InsEldom_prec )  { InsEldom_prec  = InsEldom  }
      if( InsEldom2 != InsEldom2_prec ) { InsEldom2_prec = InsEldom2 }

      //Luca 09/06/2020
      COMPONENTI2("wk_ces",ATTUALE(),"Cuc_Cestone")
      //Luca 29/10/2020 riporto modifiche di LAGO
      COMPONENTI2("wk_cas",ATTUALE(),"Cuc_Cassetto")
      if( wk_ces>0 | wk_cas>0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_PosYEld",1)
         EXITSUB()
      }

      //Luca 03/12/2020 riporto modifiche di LAGO
      if( $OnLoadOrder == 1 | $CNP__ == 1 ) { EXITSUB() }

      wk_min_VAR_PosYEld = VAR_PosYEld - (YAntaInf - 423)
      wk_max_VAR_PosYEld = VAR_PosYEld + (YAntaSup - 423)

      VAR_SET_MENU(ATTUALE(),"VAR_PosYEld",STRCAT("( ",STR(wk_min_VAR_PosYEld),"-",STR(wk_max_VAR_PosYEld)," )"))

      //LZ 08/06/2021: permetto speciali
      if( VAR_VAL(ATTUALE(), "FLAG_Speciale") == 1 ) { EXITSUB() }

      if( VAR_PosYEld < wk_min_VAR_PosYEld | VAR_PosYEld > wk_max_VAR_PosYEld ) { CHIEDI(ATTUALE(),"VAR_PosYEld") }
   }


   //PROCEDURA SetVarColonnaLvstForno
   //{
   //   //imposto i default
   //   YVanoEld = 585
   //   if( VAR_VAL(ATTUALE(),"TipoColForno")==1 ) { YVanoEld = 448 }
   //
   //   VAR_YFroEld = YVanoEld + 13.5
   //
   //   VAR_PosYEld = YVanoLvst + $Cuc_Spe_Fnd_Lvst + YPosFndLvst + $Cuc_Spe_Fnd
   //   //if( TipoScocca==2 ) { VAR_PosYEld = 736 }
   //
   //   YAntaInf = VAR_PosYEld - 2*$Cuc_Aria_Ant_Y
   //   YAntaSup = Y - YAntaInf - 2*$Cuc_Aria_Ant_Y - VAR_YFroEld - 2*$Cuc_Aria_Ant_Y - $Cuc_Aria_Ant_Y
   //
   //   YVanoRip = Y - VAR_PosYEld - YVanoEld - $Cuc_Spe_Fnd - $Cuc_Spe_Cop - YPieReg
   //}

   PROCEDURA trova_tutti_idx_M4
   {
      DEL_VAR(-1,"wk_ele_id*")

      // determino tutti gli idx da coprire

      //flag che indica se il secondo elemento è "sganciato" dalla serie di elementi da coprire
      //il flag viene valorizzato in trova_tutti_idx_M4
      $wk_flag_id_dx_lontano = 0

      $wk_ele_id = 1
      VAR_VALUE_SET(-1,STRCAT("wk_ele_id_##",STR($wk_ele_id)),id_sx)

      if(id_sx==id_dx) { EXITSUB() }

      if ( VAR_EXIST(-1,"toll") )
         { SET_TOLLERANZA_ANALISISXDX($toll) }

      //Inserisco nell'array s_match l'elenco dei nomi di elemento
      //da considerare ai fini della ricerca, passato con la
      //variabile match
      s_cmd = ""
      s_inizio = 0
      s_num = 0
      while(s_inizio<STRLEN(match))
      {
         s_len = STR_INDEX_OF(match,s_inizio,";")
         if(s_len==-1) { s_len = 256 }
         else          { s_len = s_len - s_inizio }

         s_num = s_num + 1
         s_match = s_num
         s_match[s_num] = STRMID(s_inizio,s_len,match)
         s_inizio = s_inizio + s_len + 1
      }
      if(s_num==0)
      {
         s_match = 1
         s_match[1] = "*"
      }

      idx_test=id_sx
      idx_dx = -1
      analisi_dove = 0

      //Filo basso
      if(STRCMP(dove,"FB")==0) { analisi_dove = 2 }

      //Filo alto
      if(STRCMP(dove,"FA")==0) { analisi_dove = 3 }

      ANALISI_SXDX(idx_test,"*",analisi_dove)
      //Imposto idx_dx in modo di entrare nel ciclo al cui
      //interno avviene il controllo di validità degli idx trovati
      SET_#(idx_test)
      if(#DX__>0)    { idx_dx = #DX__[1] }
      //#DX__<=0 significa non ci sono elementi a destra di id_sx
      else           { $wk_flag_id_dx_lontano = 1 }

      //Protezione contro i loop
      anti_loop = 0

      while(idx_dx!=-1 & anti_loop<=150)
      {
         anti_loop = anti_loop + 1

         idx_dx = -1

         //{Istruzioni per il controllo degli idx trovati da ANALISI_SXDX
         //Ciclo dentro l'array DX__ in cerca di un idx che corrisponda
         //ai criteri di ricerca; con il primo che trovo esco dal ciclo
         SET_#(idx_test)
         s_dx = #DX__
         while(s_dx>0)
         {
            idx_chk = #DX__[s_dx]
            s_num = 1
            while(s_num<=s_match)
            {
               if(IS_MATCH(NOME(idx_chk),s_match[s_num]))
               {
                  idx_dx = idx_chk
                  s_num = s_match
                  s_dx = 0
               }
               s_num = s_num + 1
            }
            s_dx = s_dx - 1
         }
         //}Istruzioni per il controllo degli idx trovati da ANALISI_SXDX

         if(idx_dx!=-1)
         {
            //HI(idx_dx,1)
            $wk_ele_id = $wk_ele_id + 1
            VAR_VALUE_SET(-1,STRCAT("wk_ele_id_##",STR($wk_ele_id)),idx_dx)

            //Controllo se l'idx_dx è diverso dall'idx dell'elemento
            //selezionato con il secondo pick (id_dx)
            if(idx_dx!=id_dx)
            {
               idx_test=idx_dx
               idx_dx = -1
               ANALISI_SXDX(idx_test,"*",analisi_dove)

               //Imposto idx_dx in modo di ripetere il ciclo e quindi
               //controllare la validità degli idx trovati
               SET_#(idx_test)
               if(#DX__>0) { idx_dx = #DX__[1] }
               else        { $wk_flag_id_dx_lontano = 1 }
            }
            else
            {
               idx_dx = -1
            }
         }
      }
   }

   //{ procedure inserimento eldom
   PROCEDURA LeggiDatiEldomGen
   {
      if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 | escluso )   { EXITSUB() }

      if ( VAR_EXIST(ATTUALE(),var_gest_eldom)==0 )   { EXITSUB() }

      if( $OnLoadOrder )   {  EXITSUB()   }
      if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }

      val_gest_eldom = VAR_VAL_STR(ATTUALE(),var_gest_eldom)

      $wk_entra = 0
      if( STRCMP(VARIANTE_Prec,val_gest_eldom)!=0 &
          STRCMP(val_gest_eldom,"")!=0 )
      {
         Codice = GEST_CODICE

         $wk_id_var = STRMID(5,100,var_gest_eldom)
         $wk_val_var = val_gest_eldom
         GOSUB PrelevaDati_QueryElet

         VARIANTE_Prec = val_gest_eldom
         $wk_entra = 1
      }
      if ( $wk_entra==0 )   { EXITSUB }

      if( ELD_TIPO_ELDOM=="PIANOCOTTURA" )
      {
         GOSUB Ctrl_PianoCottura_DatiAggiuntivi
         if( VAR_ELD_EldomX!=0 ) { X = VAR_ELD_EldomX }
         if( VAR_ELD_EldomZ!=0 ) { Z = VAR_ELD_EldomZ }
         EXITSUB()
      }

      if( ELD_TIPO_ELDOM=="LAVELLO" )
      {
         GOSUB Ctrl_Lavello_DatiAggiuntivi
         if( VAR_ELD_EldomX!=0 ) { X = VAR_ELD_EldomX }
         if( VAR_ELD_EldomZ!=0 ) { Z = VAR_ELD_EldomZ }
         EXITSUB()
      }

      wk_x_reale = ATOI($wk_x_reale)
      wk_y_reale = ATOI($wk_y_reale)
      wk_z_reale = ATOI($wk_z_reale)

      if( wk_x_reale > 0) { X = wk_x_reale }
      if( wk_y_reale > 0) { Y = wk_y_reale }
      if( wk_z_reale > 0) { Z = wk_z_reale }

      COD_LAV = $wk_codice_lavorazione

      X_LAV = ATOI($wk_x_lavorazione)
      Y_LAV = ATOI($wk_y_lavorazione)
      Z_LAV = ATOI($wk_z_lavorazione)

      X_FRO = ATOI($wk_x_reale)
      Y_FRO = ATOI($wk_y_reale)
      Z_FRO = 18

      X_VANO_INC = ATOI($wk_x_nominale)
      Y_VANO_INC = ATOI($wk_y_nominale)
      Z_VANO_INC = ATOI($wk_z_nominale)

      if( ELD_TIPO_ELDOM=="FRIGO")
      {
         GOSUB Ctrl_Frigo_DatiAggiuntivi
         res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"Y_FRIGO",ATTUALE(),"Y")
         res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_XFrigo",ATTUALE(),"X")
         res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_ZFrigo",ATTUALE(),"Z")
      }

      if( ELD_TIPO_ELDOM=="FORNO" )
      {
         TipoForno = $wk_tipo
         NomeFileImmagine = STRCAT($path_bdm,"\Bmp\Forni\",$wk_file_disegno)
         MSG_NOTA = $wk_nota_eldom
         alt_forno = ATOI($wk_y_nominale)

         if( Y_FRO<=0 ) { Y_FRO=600 }

         if ( X==0 )   { X = 1 }
         if ( Y==0 )   { Y = 1 }
         if ( Z==0 )   { Z = 1 }

         GOSUB Ctrl_Forni_DatiAggiuntivi

         wk_var_x = "VAR_XEld"
         wk_var_z = "VAR_ZEld"
         if( VAR_VAL_STR(ATTUALE(),"IndiceEldom")=="2" )
         {
            wk_var_x = "VAR_XEld2"
            wk_var_z = "VAR_ZEld2"
         }
         res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),wk_var_x,ATTUALE(),"X")
         res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),wk_var_z,ATTUALE(),"Z")
      }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_ridisegna no_agganciati   //Ricalcolo mobile per cambio forno"))
   }

   //PROCEDURA LeggiDatiFrigo
   //{
   //   if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 )   { EXITSUB() }
   //
   //   if ( VAR_EXIST(ATTUALE(),"GEST_E006")==0 )   { EXITSUB() }
   //
   //   if( $OnLoadOrder )   {  EXITSUB()   }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   $wk_entra = 0
   //   if ( STRCMP(VARIANTE_Prec,GEST_E006)!=0
   //      & STRCMP(GEST_E006,"")!=0 )
   //   {
   //      Codice = "FRG"
   //
   //      $wk_id_var = "E006"
   //      $wk_val_var = GEST_E006
   //      GOSUB PrelevaDati_QueryElet
   //
   //      VARIANTE_Prec = GEST_E006
   //      $wk_entra = 1
   //   }
   //
   //   if ( $wk_entra==0 )   { EXITSUB }
   //
   //   X = ATOI($wk_x_reale)
   //   Y = ATOI($wk_y_reale)
   //   Z = ATOI($wk_z_reale)
   //
   //   COD_LAV = $wk_codice_lavorazione
   //
   //   X_LAV = ATOI($wk_x_lavorazione)
   //   Y_LAV = ATOI($wk_y_lavorazione)
   //   Z_LAV = ATOI($wk_z_lavorazione)
   //
   //   X_FRO = ATOI($wk_x_reale)
   //   Y_FRO = ATOI($wk_y_reale)
   //   Z_FRO = 18
   //
   //   X_VANO_INC = ATOI($wk_x_nominale)
   //   Y_VANO_INC = ATOI($wk_y_nominale)
   //   Z_VANO_INC = ATOI($wk_z_nominale)
   //
   //   //PipeFrigo = $wk_y_nominale
   //   //PipeFrigo_Z6 = $wk_z_nominale
   //
   //   GOSUB Ctrl_Frigo_DatiAggiuntivi
   //
   //   //GOSUB Ctrl_DatiAggFrigoValoriDatiUlteriori
   //
   //   res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"Y_FRIGO",ATTUALE(),"Y")
   //
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_agganciati   //Ricalcolo mobile per cambio frigo"))
   //}

   //PROCEDURA LeggiDatiForno
   //{
   //   if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 )   { EXITSUB() }
   //
   //   if ( VAR_EXIST(ATTUALE(),"GEST_E002")==0 )   { EXITSUB() }
   //
   //   if( $OnLoadOrder )   {  EXITSUB()   }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   if( ACTION()<=0
   //     | ACTION()==1064
   //     | $M4RicalcoloOffset__
   //     | VAR_VAL(-1,"PLIKO")==1
   //     | escluso )                 { EXITSUB }
   //
   //   if ( VAR_EXIST(idx_att,"GEST_E002")==0 ) { EXITSUB }
   //
   //   if( $OnLoadOrder ) { EXITSUB() }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   $wk_entra = 0
   //   if( STRCMP(VARIANTE_Prec,GEST_E002)!=0 &
   //       STRCMP(GEST_E002,"")!=0 )
   //   {
   //      Codice = "FRN"
   //
   //      $wk_id_var = "E002"
   //      $wk_val_var = GEST_E002
   //      GOSUB PrelevaDati_QueryElet
   //
   //      VARIANTE_Prec = GEST_E002
   //      $wk_entra = 1
   //   }
   //
   //   if ( $wk_entra==0 )   { EXITSUB }
   //
   //   X = ATOI($wk_x_reale)
   //   Y = ATOI($wk_y_reale)
   //   Z = ATOI($wk_z_reale)
   //
   //   COD_LAV = $wk_codice_lavorazione
   //
   //   X_LAV = ATOI($wk_x_lavorazione)
   //   Y_LAV = ATOI($wk_y_lavorazione)
   //   Z_LAV = ATOI($wk_z_lavorazione)
   //
   //   X_FRO = ATOI($wk_x_reale)
   //   Y_FRO = ATOI($wk_y_reale)
   //   Z_FRO = 23
   //
   //   X_VANO_INC = ATOI($wk_x_nominale)
   //   Y_VANO_INC = ATOI($wk_y_nominale)
   //   Z_VANO_INC = ATOI($wk_z_nominale)
   //
   //   TipoForno = $wk_tipo
   //   NomeFileImmagine = STRCAT($path_bdm,"\Bmp\Forni\",$wk_file_disegno)
   //   MSG_NOTA = $wk_nota_eldom
   //   alt_forno = ATOI($wk_y_nominale)
   //
   //   if( Y_FRO<=0 ) { Y_FRO=600 }
   //
   //   //res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("Y_FroForno",IndiceForno),ATTUALE(),"Y_FRO")
   //   //res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("YVanoEld",IndiceForno),ATTUALE(),"Y_VANO_INC")
   //
   //   if ( X==0 )   { X = 1 }
   //   if ( Y==0 )   { Y = 1 }
   //   if ( Z==0 )   { Z = 1 }
   //
   //   GOSUB Ctrl_Forni_DatiAggiuntivi
   //
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_ridisegna no_agganciati   //Ricalcolo mobile per cambio forno"))
   //}

   //PROCEDURA LeggiDatiEldom
   //{
   //   if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 | escluso )   { EXITSUB() }
   //
   //   if ( VAR_EXIST(ATTUALE(),var_gest_eldom)==0 )   { EXITSUB() }
   //
   //   if( $OnLoadOrder )   {  EXITSUB()   }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   val_gest_eldom = VAR_VAL_STR(ATTUALE(),var_gest_eldom)
   //
   //   $wk_entra = 0
   //   if( STRCMP(VARIANTE_Prec,val_gest_eldom)!=0 &
   //       STRCMP(val_gest_eldom,"")!=0 )
   //   {
   //      Codice = GEST_CODICE
   //
   //      $wk_id_var = STRMID(5,100,var_gest_eldom)
   //      $wk_val_var = val_gest_eldom
   //      GOSUB PrelevaDati_QueryElet
   //
   //      VARIANTE_Prec = val_gest_eldom
   //      $wk_entra = 1
   //   }
   //
   //   if ( $wk_entra==0 )   { EXITSUB }
   //
   //   X = ATOI($wk_x_reale)
   //   Y = ATOI($wk_y_reale)
   //   Z = ATOI($wk_z_reale)
   //
   //   COD_LAV = $wk_codice_lavorazione
   //
   //   X_LAV = ATOI($wk_x_lavorazione)
   //   Y_LAV = ATOI($wk_y_lavorazione)
   //   Z_LAV = ATOI($wk_z_lavorazione)
   //
   //   X_FRO = ATOI($wk_x_reale)
   //   Y_FRO = ATOI($wk_y_reale)
   //   Z_FRO = 18
   //
   //   X_VANO_INC = ATOI($wk_x_nominale)
   //   Y_VANO_INC = ATOI($wk_y_nominale)
   //   Z_VANO_INC = ATOI($wk_z_nominale)
   //
   //   TipoForno = $wk_tipo
   //   NomeFileImmagine = STRCAT($path_bdm,"\Bmp\Forni\",$wk_file_disegno)
   //   MSG_NOTA = $wk_nota_eldom
   //   alt_forno = ATOI($wk_y_nominale)
   //
   //   if( Y_FRO<=0 ) { Y_FRO=600 }
   //
   //   //res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("Y_FroForno",IndiceForno),ATTUALE(),"Y_FRO")
   //   //res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("YVanoEld",IndiceForno),ATTUALE(),"Y_VANO_INC")
   //
   //   if ( X==0 )   { X = 1 }
   //   if ( Y==0 )   { Y = 1 }
   //   if ( Z==0 )   { Z = 1 }
   //
   //   GOSUB Ctrl_Forni_DatiAggiuntivi
   //
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_ridisegna no_agganciati   //Ricalcolo mobile per cambio forno"))
   //}

   //PROCEDURA LeggiDatiCappa
   //{
   //   if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 )   { EXITSUB() }
   //
   //   if ( VAR_EXIST(ATTUALE(),"GEST_E009")==0 )   { EXITSUB() }
   //
   //   if( $OnLoadOrder )   {  EXITSUB()   }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   if( ACTION()<=0
   //     | ACTION()==1064
   //     | $M4RicalcoloOffset__
   //     | VAR_VAL(-1,"PLIKO")==1
   //     | escluso )                 { EXITSUB }
   //
   //   if ( VAR_EXIST(idx_att,"GEST_E009")==0 ) { EXITSUB }
   //
   //   if( $OnLoadOrder ) { EXITSUB() }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   $wk_entra = 0
   //   if( STRCMP(VARIANTE_Prec,GEST_E009)!=0 &
   //       STRCMP(GEST_E009,"")!=0 )
   //   {
   //      Codice = "CPP"
   //
   //      $wk_id_var = "E009"
   //      $wk_val_var = GEST_E009
   //      GOSUB PrelevaDati_QueryElet
   //
   //      VARIANTE_Prec = GEST_E009
   //      $wk_entra = 1
   //   }
   //
   //   if ( $wk_entra==0 )   { EXITSUB }
   //
   //   X = ATOI($wk_x_reale)
   //   Y = ATOI($wk_y_reale)
   //   Z = ATOI($wk_z_reale)
   //
   //   if ( X==0 )   { X = 1 }
   //   if ( Y==0 )   { Y = 1 }
   //   if ( Z==0 )   { Z = 1 }
   //
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_ridisegna no_agganciati   //Ricalcolo mobile per cambio forno"))
   //}

   //PROCEDURA LeggiDatiPianoCottura
   //{
   //   if ( ACTION()<=0 | ACTION()==1064 | $M4RicalcoloOffset__ | $PLIKO==1 )   { EXITSUB() }
   //
   //   if ( VAR_EXIST(ATTUALE(),"GEST_E004")==0 )   { EXITSUB() }
   //
   //   if( $OnLoadOrder )   {  EXITSUB()   }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   if( ACTION()<=0
   //     | ACTION()==1064
   //     | $M4RicalcoloOffset__
   //     | VAR_VAL(-1,"PLIKO")==1
   //     | escluso )                 { EXITSUB }
   //
   //   if ( VAR_EXIST(idx_att,"GEST_E004")==0 ) { EXITSUB }
   //
   //   if( $OnLoadOrder ) { EXITSUB() }
   //
   //   if ( VAR_EXIST(idx_att,"VARIANTE_Prec")==0 )   { VARIANTE_Prec = "" }
   //
   //   $wk_entra = 0
   //   if( STRCMP(VARIANTE_Prec,GEST_E004)!=0 &
   //       STRCMP(GEST_E004,"")!=0 )
   //   {
   //      Codice = "PCT"
   //
   //      $wk_id_var = "E004"
   //      $wk_val_var = GEST_E004
   //      //GOSUB PrelevaDati_QueryElet
   //
   //      VARIANTE_Prec = GEST_E004
   //      $wk_entra = 1
   //   }
   //
   //   if ( $wk_entra==0 )   { EXITSUB }
   //
   //   GOSUB Ctrl_PianoCottura_DatiAggiuntivi
   //
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_att,1))," no_ridisegna no_agganciati   //Ricalcolo mobile per cambio forno"))
   //}

   PROCEDURA Ctrl_Lavello_DatiAggiuntivi
   {
      if( ACTION()<=0 | ACTION()==1064 | $OnLoadOrder
        | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ ) { EXITSUB }

      // Creo le variabili temporanee se non esistono
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_TipoIncasso")==0 )
      {
         VAR_ELD_EldomX      = 0
         VAR_ELD_EldomZ      = 0
         VAR_ELD_TipoIncasso = 0
         VAR_ELD_TipoPC      = 0
         VAR_ELD_ScassoX     = 0
         VAR_ELD_ScassoZ     = 0
         VAR_ELD_ScassoDelta = 0
         VAR_ELD_ScassoMaxX  = 0
         VAR_ELD_ScassoMaxZ  = 0
         VAR_ELD_Raggio      = 0
         VAR_ELD_YSopra      = 0
         VAR_ELD_YRientr     = 0
      }

      // Accesso alla tabella solo se cambiano dati
      grp  = STRDADB(idx_att,"GRP_CAT","GEST_E008")
      val  = VAR_VAL_STR(idx_att,"GEST_E008")

      //esempio di key GC1=FORV1=001
      ckey = STRCAT("GC1=",grp,"V1=",val)

      if( VAR_EXIST(idx_att,"prec_ckey")==0 ) { prec_ckey = "" }

      if( prec_ckey!=ckey )
      {
         prec_ckey = ckey

         codtab = "MLAGOLav"
         COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))

         if ( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
         {
            GOSUB Dichiara_TabPers

            codtab = "MLAGOLav"
            COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))
            COMANDO2(STRCAT("LOGMSG SECONDO TENTATIVO Esito GoTabPers --> NREC=",STR(VAR_VAL(-1,"MTOG_TP_NREC"))," ; ESITO=",STR(VAR_VAL(-1,"MTOG_TPESITO"))," ; MSG=",VAR_VAL_STR(-1,"MTOG_TPMSG")))

            #ifdef AZI;TEC
               if( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
               {
                  DISPLAY2("ATTENZIONE: rilevato problema tecnico in lettura delle tabelle personalizzate. Contattare l'assistenza tecnica.")
               }
            #endif
         }

         MTOG_TPESITO = 0
         if( VAR_VAL(-1,"MTOG_TP_NREC")>0 )
         {
            MTOG_TPESITO = 1

            k = 1
            prefix = "MTOG_TP_"
            suffix = STRCAT("_##",STR(k))

            wk_fg_valido = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"fg_valido",suffix)))

            if( wk_fg_valido==1 )
            {
               VAR_ELD_EldomX      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_eldom",suffix)))
               VAR_ELD_EldomZ      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_eldom",suffix)))
               VAR_ELD_TipoIncasso = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"tipo_incasso",suffix)))
               VAR_ELD_TipoPC        = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"tipo_eldom",suffix)))

               VAR_ELD_ScassoX     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_min_scasso",suffix)))
               VAR_ELD_ScassoZ     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_min_scasso",suffix)))
               VAR_ELD_ScassoMaxX  = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_max_scasso",suffix)))
               VAR_ELD_ScassoMaxZ  = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_max_scasso",suffix)))

               VAR_ELD_Raggio      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"raggio_scasso",suffix)))
               VAR_ELD_YSopra      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_eldom_sup",suffix)))
               VAR_ELD_YRientr     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_eldom_rient",suffix)))
               VAR_ELD_FT_RieY     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_scasso_bd_top",suffix)))

               //Luca 10/06/2020
               //tutti i lavello saldati inseriti prima della revisione
               //venivano considerati come sottotop
               if( VAR_ELD_TipoIncasso==3 & VAR_Revisione==0 ) { VAR_ELD_TipoIncasso = 2 }
            }

            k = k + 1
         }
      }
   }

   PROCEDURA Ctrl_PianoCottura_DatiAggiuntivi
   {
      if( ACTION()<=0 | ACTION()==1064 | $OnLoadOrder
        | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ ) { EXITSUB }

      // Creo le variabili temporanee se non esistono
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_TipoIncasso")==0 )
      {
         VAR_ELD_EldomX      = 0
         VAR_ELD_EldomZ      = 0
         VAR_ELD_TipoIncasso = 0
         VAR_ELD_TipoPC        = 0
         VAR_ELD_ScassoX     = 0
         VAR_ELD_ScassoZ     = 0
         VAR_ELD_ScassoDelta = 0
         VAR_ELD_ScassoMaxX  = 0
         VAR_ELD_ScassoMaxZ  = 0
         VAR_ELD_Raggio      = 0
         VAR_ELD_YSopra      = 0
         VAR_ELD_YRientr     = 0
      }

      // Accesso alla tabella solo se cambiano dati
      grp  = STRDADB(idx_att,"GRP_CAT","GEST_E004")
      val  = VAR_VAL_STR(idx_att,"GEST_E004")

      //esempio di key GC1=FORV1=001
      ckey = STRCAT("GC1=",grp,"V1=",val)

      if( VAR_EXIST(idx_att,"prec_ckey")==0 ) { prec_ckey = "" }

      if( prec_ckey!=ckey )
      {
         prec_ckey = ckey

         codtab = "MLAGOPianoCot"
         COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))

         if ( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
         {
            GOSUB Dichiara_TabPers

            codtab = "MLAGOPianoCot"
            COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))
            COMANDO2(STRCAT("LOGMSG SECONDO TENTATIVO Esito GoTabPers --> NREC=",STR(VAR_VAL(-1,"MTOG_TP_NREC"))," ; ESITO=",STR(VAR_VAL(-1,"MTOG_TPESITO"))," ; MSG=",VAR_VAL_STR(-1,"MTOG_TPMSG")))

            #ifdef AZI;TEC
               if( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
               {
                  DISPLAY2("ATTENZIONE: rilevato problema tecnico in lettura delle tabelle personalizzate. Contattare l'assistenza tecnica.")
               }
            #endif
         }

         MTOG_TPESITO = 0
         if( VAR_VAL(-1,"MTOG_TP_NREC")>0 )
         {
            MTOG_TPESITO = 1

            k = 1
            prefix = "MTOG_TP_"
            suffix = STRCAT("_##",STR(k))

            wk_fg_valido = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"fg_valido",suffix)))
            if( wk_fg_valido==1 )
            {
               VAR_ELD_EldomX      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_eldom",suffix)))
               VAR_ELD_EldomZ      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_eldom",suffix)))
               VAR_ELD_TipoIncasso = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"tipo_incasso",suffix)))
               VAR_ELD_TipoPC      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"tipo_eldom",suffix)))

               VAR_ELD_ScassoX     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_min_scasso",suffix)))
               VAR_ELD_ScassoZ     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_min_scasso",suffix)))
               VAR_ELD_ScassoMaxX  = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"x_max_scasso",suffix)))
               VAR_ELD_ScassoMaxZ  = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"z_max_scasso",suffix)))

               VAR_ELD_Raggio      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"raggio_scasso",suffix)))
               VAR_ELD_YSopra      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_eldom_sup",suffix)))
               VAR_ELD_YRientr     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_eldom_rient",suffix)))
               VAR_ELD_FT_RieY     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"y_scasso_bd_top",suffix)))

               //Luca 10/06/2020
               //tutti i piani cottura saldati inseriti prima della revisione
               //venivano considerati con filotop
               if( VAR_ELD_TipoIncasso==3 & VAR_Revisione==0 ) { VAR_ELD_TipoIncasso = 1 }
            }

            k = k + 1
         }
      }
   }

   PROCEDURA PrelevaDati_QueryElet
   {
      //ATOI
      $wk_col_dato = "x_reale"   GOSUB QueryElet
      $wk_x_reale = $wk_dato

      //ATOI
      $wk_col_dato = "y_reale"   GOSUB QueryElet
      $wk_y_reale = $wk_dato

      //ATOI
      $wk_col_dato = "z_reale"   GOSUB QueryElet
      $wk_z_reale = $wk_dato

      //ATOI
      $wk_col_dato = "x_lavorazione"   GOSUB QueryElet
      $wk_x_lavorazione = $wk_dato

      //ATOI
      $wk_col_dato = "y_lavorazione"   GOSUB QueryElet
      $wk_y_lavorazione = $wk_dato

      //ATOI
      $wk_col_dato = "z_lavorazione"   GOSUB QueryElet
      $wk_z_lavorazione = $wk_dato

      $wk_col_dato = "file_disegno_sat"   GOSUB QueryElet
      $wk_file_disegno_sat = $wk_dato

      $wk_col_dato = "file_disegno"   GOSUB QueryElet
      $wk_file_disegno = $wk_dato

      $wk_col_dato = "codice_lavorazione"   GOSUB QueryElet
      $wk_codice_lavorazione = $wk_dato

      //ATOI
      $wk_col_dato = "x_nominale"   GOSUB QueryElet
      $wk_x_nominale = $wk_dato

      // SIC! Nome colonna errato a db
      //ATOI
      $wk_col_dato = "y_nomminale"   GOSUB QueryElet
      $wk_y_nominale = $wk_dato

      //ATOI
      $wk_col_dato = "z_nominale"   GOSUB QueryElet
      $wk_z_nominale = $wk_dato

      $wk_col_dato = "forma_elemento"   GOSUB QueryElet
      $wk_forma_elemento = $wk_dato

      $wk_col_dato = "elemento_bdm"   GOSUB QueryElet
      $wk_elemento_bdm = $wk_dato

      $wk_col_dato = "forma_scasso"   GOSUB QueryElet
      $wk_forma_scasso = $wk_dato

      $wk_col_dato = "nota"   GOSUB QueryElet
      $wk_nota_eldom = $wk_dato

      $wk_col_dato = "tipo"   GOSUB QueryElet
      $wk_tipo = $wk_dato

      $wk_col_dato = "c_valore_1"   GOSUB QueryElet
      $wk_valore_1 = $wk_dato

      $wk_col_dato = "c_valore_2"   GOSUB QueryElet
      $wk_valore_2 = $wk_dato

      $wk_col_dato = "c_valore_3"   GOSUB QueryElet
      $wk_valore_3 = $wk_dato

      $wk_col_dato = "c_valore_4"   GOSUB QueryElet
      $wk_valore_4 = $wk_dato

      $wk_col_dato = "c_valore_5"   GOSUB QueryElet
      $wk_valore_5 = $wk_dato

      $wk_col_dato = "c_valore_6"   GOSUB QueryElet
      $wk_valore_6 = $wk_dato

      $wk_col_dato = "c_valore_7"   GOSUB QueryElet
      $wk_valore_7 = $wk_dato

      $wk_col_dato = "descrizione_estesa"   GOSUB QueryElet
      $wk_descrizione_estesa = $wk_dato

      $wk_col_dato = "ds_articolo_produttore_1"   GOSUB QueryElet
      $wk_ds_articolo_produttore_1 = $wk_dato

      //ATOI
      $wk_col_dato = "n_scostamento"   GOSUB QueryElet
      $wk_scostamento = $wk_dato

      //PRELEVAMENTO GRUPPO CATEGORIA
      nome_var = STRCAT("GRP_CAT_",$wk_id_var)
      if ( VAR_EXIST(idx_att,nome_var)==0 )
      {
         val_var = STRDADB(idx_att,"GRP_CAT",STRCAT("GEST_",$wk_id_var))
         VAR_CREATE_STR(idx_att,nome_var,val_var,0,"")
      }
   }

   PROCEDURA QueryElet
   {
      $wk_dato = STRDADB(idx_att,"QUERY_ELET",STRCAT($wk_id_var,";",$wk_val_var,";",$wk_col_dato))
   }

   PROCEDURA Ctrl_Frigo_DatiAggiuntivi
   {
      if( ACTION()<=0 | ACTION()==1064 | $OnLoadOrder
        | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ ) { EXITSUB() }

      // Creo le variabili temporanee se non esistono
      if( VAR_EXIST(ATTUALE(),"VAR_FR_h_anta_inf")==0 )
      {
         VAR_FR_h_anta_inf = 0
         VAR_FR_h_anta_sup = 0
         VAR_FR_delta_fro  = 0
         VAR_FR_aria_sup   = 0
         VAR_FR_h_zocc     = 0
         VAR_FR_h_max      = 0
         VAR_FR_h_min      = 0
      }

      // Accesso alla tabella solo se cambiano dati
      grp  = STRDADB(idx_att,"GRP_CAT","GEST_E006")
      val  = VAR_VAL_STR(idx_att,"GEST_E006")

      //esempio di key GC1=E06V1=FG001
      ckey = STRCAT("GC1=",grp,"V1=",val)

      if( VAR_EXIST(idx_att,"prec_ckey")==0 ) { prec_ckey = "" }

      if( prec_ckey!=ckey )
      {
         prec_ckey = ckey

         codtab = "MLAGOFrigo"
         COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))

         if ( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
         {
            GOSUB Dichiara_TabPers

            codtab = "MLAGOFrigo"
            COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))
            COMANDO2(STRCAT("LOGMSG SECONDO TENTATIVO Esito GoTabPers --> NREC=",STR(VAR_VAL(-1,"MTOG_TP_NREC"))," ; ESITO=",STR(VAR_VAL(-1,"MTOG_TPESITO"))," ; MSG=",VAR_VAL_STR(-1,"MTOG_TPMSG")))

            #ifdef AZI;TEC
               if( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
               {
                  DISPLAY2("ATTENZIONE: rilevato problema tecnico in lettura delle tabelle personalizzate. Contattare l'assistenza tecnica.")
               }
            #endif
         }

         MTOG_TPESITO = 0
         if( VAR_VAL(-1,"MTOG_TP_NREC")>0 )
         {
            MTOG_TPESITO = 1

            k = 1
            prefix = "MTOG_TP_"
            suffix = STRCAT("_##",STR(k))

            wk_fg_valido = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"fg_valido",suffix)))
            if( wk_fg_valido==1 )
            {
               VAR_FR_h_anta_inf = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_anta_inf",suffix)))
               VAR_FR_h_anta_sup = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_anta_sup",suffix)))
               VAR_FR_delta_fro  = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"delta_frontali",suffix)))
               VAR_FR_aria_sup   = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"aria_sopra_anta",suffix)))
               VAR_FR_h_zocc     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_zoccolo",suffix)))
               VAR_FR_h_max      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_max",suffix)))
               VAR_FR_h_min      = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_min",suffix)))

               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YAntaInFr",ATTUALE(),"VAR_FR_h_anta_inf")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YAntaSuFr",ATTUALE(),"VAR_FR_h_anta_sup")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_DeltaAnFr",ATTUALE(),"VAR_FR_delta_fro")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YSopraFr",ATTUALE(),"VAR_FR_aria_sup")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YZoccFr",ATTUALE(),"VAR_FR_h_zocc")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YVanoMinFr",ATTUALE(),"VAR_FR_h_max")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),"VAR_YVanoMaxFr",ATTUALE(),"VAR_FR_h_min")
            }

            k = k + 1
         }
      }
   }

   PROCEDURA Ctrl_Forni_DatiAggiuntivi
   {
      if( ACTION()<=0 | ACTION()==1064 | $OnLoadOrder
        | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ ) { EXITSUB }

      // Creo le variabili temporanee se non esistono
      if( VAR_EXIST(ATTUALE(),"VAR_FN_h_min")==0 )
      {
         VAR_FN_h_min    = 0
         VAR_FN_h_max    = 0
         VAR_FN_h_fro    = 0
         VAR_FN_delta_b  = 0
         VAR_FN_rot_fro  = 0
      }

      // Accesso alla tabella solo se cambiano dati
      grp  = STRDADB(idx_att,"GRP_CAT","GEST_E002")
      val  = VAR_VAL_STR(idx_att,"GEST_E002")

      //Luca 12/04/2019
      if( NOME(ATTUALE())=="EldomGenerico" )
      {
         grp  = STRDADB(idx_att,"GRP_CAT",var_gest_eldom)
         val  = VAR_VAL_STR(idx_att,var_gest_eldom)
      }

      //esempio di key GC1=FORV1=001
      ckey = STRCAT("GC1=",grp,"V1=",val)

      if( VAR_EXIST(idx_att,"prec_ckey")==0 ) { prec_ckey = "" }

      if( prec_ckey!=ckey )
      {
         prec_ckey = ckey

         codtab = "MLAGOForno"
         COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))

         if ( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
         {
            GOSUB Dichiara_TabPers

            codtab = "MLAGOForno"
            COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," GoTabPers ",APICI(),codtab,";ckey=",ckey,APICI()))
            COMANDO2(STRCAT("LOGMSG SECONDO TENTATIVO Esito GoTabPers --> NREC=",STR(VAR_VAL(-1,"MTOG_TP_NREC"))," ; ESITO=",STR(VAR_VAL(-1,"MTOG_TPESITO"))," ; MSG=",VAR_VAL_STR(-1,"MTOG_TPMSG")))

            #ifdef AZI;TEC
               if( $MTOG_TPESITO==0 & STRCMP($MTOG_TPMSG,"Tabella non trovata")==0 )
               {
                  DISPLAY2("ATTENZIONE: rilevato problema tecnico in lettura delle tabelle personalizzate. Contattare l'assistenza tecnica.")
               }
            #endif
         }

         MTOG_TPESITO = 0
         if( VAR_VAL(-1,"MTOG_TP_NREC")>0 )
         {
            MTOG_TPESITO = 1

            k = 1
            prefix = "MTOG_TP_"
            suffix = STRCAT("_##",STR(k))

            wk_fg_valido = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"fg_valido",suffix)))

            if( wk_fg_valido==1 )
            {
               VAR_FN_h_min     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_vano_min",suffix)))
               VAR_FN_h_max     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_vano_max",suffix)))
               VAR_FN_h_fro     = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"h_frontale",suffix)))
               VAR_FN_delta_b   = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"delta_basso",suffix)))
               //VAR_FN_rot_fro   = ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"rot_anta_eldom",suffix)))
               VAR_FN_rot_fro   = ABS(ATOI(VAR_VAL_STR(-1,STRCAT(prefix,"rot_anta_eldom",suffix))))

               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("VAR_YVanoMinEld",IndiceEldom),ATTUALE(),"VAR_FN_h_min")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("VAR_YVanoMaxEld",IndiceEldom),ATTUALE(),"VAR_FN_h_max")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("VAR_YFroEld",IndiceEldom),ATTUALE(),"VAR_FN_h_fro")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("VAR_DeltaBasso",IndiceEldom),ATTUALE(),"VAR_FN_delta_b")
               res = VAR_INDIRECT_ASSIGN(PADRE(ATTUALE(),-1),STRCAT("VAR_RotFroEld",IndiceEldom),ATTUALE(),"VAR_FN_rot_fro")
            }

            k = k + 1
         }
      }
   }

   PROCEDURA Dichiara_TabPers
   {
      // Gestione tabelle personalizzate.
      //   Per utilizzarle utilizzare i due comandi:
      //   1. Definizione di una tabella
      //      run_dll_cmd Metron2Gemo AddTabPers "codtab;nometab;where;orderby;ntop"
      //      Parametri:
      //      codtab   : codice della tabella; posso creare  query diverse sulla stessa tabella dando codtab diverso
      //      nometab  : nome SQL della tabella
      //      where    : where del select
      //      orderby  : orderby del select
      //      ntob     : numero da mettere nella clausola TOP della select, 0 = tutti i record
      //      Ritorna:
      //      MTOG_TPESITO : 1 = OK, 0 = errore
      //
      //   2. Esecuzione query
      //      run_dll_cmd Metron2Gemo GoTabPers "codtab;par1=val1;par2=val2;..."
      //      Parametri :
      //      codtab    : codice della tabella
      //      parametro1: primo parametro. passare con nomepar=valore
      //      parametro2: secondo parametro. passare con nomepar=valore
      //      ...
      //      parametroN: ennesimo parametro. passare con nomepar=valore
      //      Ritorna:
      //      MTOG_TPESITO : 1 = OK, 0 = errore
      //      MTOG_TPMSG   : eventuale messaggio di errore
      //   3. Risultati
      //      a. In numero dei record trovati viene messo sulla variabile numerica (nosave) MTOG_TP_NREC
      //      b. viene creato un array per ogni campo restituito dalla query: MTOG_TP_FieldName

      // dichiarazione query per tab pers dati aggiuntivi per forni
      codtab = "MLAGOFrigo"
      nometab = "LAGfrigo"
      where = STRCAT("chiave=:ckey")
      orderby = ""
      ntop = "0"
      COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," AddTabPers ",APICI(),codtab,";",nometab,";",where,";",orderby,";",ntop,APICI()))
      COMANDO2(STRCAT("LOGMSG Esito AddTabPers --> ",STR(VAR_VAL(-1,"MTOG_TPESITO"))))

      codtab = "MLAGOForno"
      nometab = "LAGforno"
      where = STRCAT("chiave=:ckey")
      orderby = ""
      ntop = "0"
      COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," AddTabPers ",APICI(),codtab,";",nometab,";",where,";",orderby,";",ntop,APICI()))
      COMANDO2(STRCAT("LOGMSG Esito AddTabPers --> ",STR(VAR_VAL(-1,"MTOG_TPESITO"))))

      codtab = "MLAGOPianoCot"
      nometab = "LAGpiani_cottura"
      where = STRCAT("chiave=:ckey")
      orderby = ""
      ntop = "0"
      COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," AddTabPers ",APICI(),codtab,";",nometab,";",where,";",orderby,";",ntop,APICI()))
      COMANDO2(STRCAT("LOGMSG Esito AddTabPers --> ",STR(VAR_VAL(-1,"MTOG_TPESITO"))))

      codtab = "MLAGOLav"
      nometab = "LAGlavello"
      where = STRCAT("chiave=:ckey")
      orderby = ""
      ntop = "0"
      COMANDO2(STRCAT("run_dll_cmd ",$InOutDll," AddTabPers ",APICI(),codtab,";",nometab,";",where,";",orderby,";",ntop,APICI()))
      COMANDO2(STRCAT("LOGMSG Esito AddTabPers --> ",STR(VAR_VAL(-1,"MTOG_TPESITO"))))
   }

   PROCEDURA Ctrl_InsEldom
   {
      if( VAR_EXIST(ATTUALE(),"InsEldom") == 0)   { EXITSUB() }

      // Solo eldom cliente
      if( NOME(ATTUALE()) == "ScoccaT_ColFrigo")
      {
         HIDE_ON_EDIT2( ATTUALE(), "InsEldom", 1)
         InsEldom = 0

         EXITSUB()
      }

      if( IS_MATCH( NOME(ATTUALE()), "ScoccaT_*Forno*") == 1)
      {
         HIDE_ON_EDIT2( ATTUALE(), "InsEldom", 1)
         InsEldom = 0

         if( NOME(ATTUALE()) == "ScoccaT_Col2Forno")
         {
            InsEldom2 = 0
            HIDE_ON_EDIT2( ATTUALE(), "InsEldom2", 1)
         }

         EXITSUB()
      }

      if( NOME(ATTUALE())=="ModuloPensileCappa_368" )
      {
         InsEldom = 1
      }
      else
      {
         //per ora semplice chiedi
         if( ACTION()==2 & CMD()==$CMD_INTERATTIVO & $PLIKO==0 ) { CHIEDI(ATTUALE(),"InsEldom") }
      }

      //if( ACTION()==2 & CMD()==$CMD_INTERATTIVO & VAR_VAL(-1,"PLIKO")!=1 ) { GOSUB DlgInsEldom }


      if( $PLIKO == 1) { InsEldom = 0 }

      tipoeldom_mob = VAR_VAL_STR(ATTUALE(),"ELD_TIPO_ELDOM")

      cod_eldom = ""
      des_eldom = ""

      if ( InsEldom == 1)
      {
         if ( VAR_EXIST(idx_att,"idx_eldom") )
         {
            if ( IS_IDX(idx_eldom) )
            {
               if ( VAR_EXIST(idx_eldom,"GEST_E006") & STRCMP(tipoeldom_mob,"FRIGO")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E006")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E006")
               }

               if ( VAR_EXIST(idx_eldom,"GEST_E002") & STRCMP(tipoeldom_mob,"FORNO")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E002")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E002")
               }

               //Luca 30/09/2019
               if ( VAR_EXIST(idx_eldom,"GEST_E009") & STRCMP(tipoeldom_mob,"CAPPA")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E009")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E009")
               }

               //Luca 09/10/2019
               if ( VAR_EXIST(idx_eldom,"GEST_E004") & STRCMP(tipoeldom_mob,"PIANOCOTTURA")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E004")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E004")
               }
            }
         }
      }

      //Luca 12/04/2019
      if ( VAR_VAL(ATTUALE(),"InsEldom2")==1 )
      {
         if ( VAR_EXIST(idx_att,"idx_eldom2") )
         {
            if ( IS_IDX(idx_eldom2) )
            {
               if ( VAR_EXIST(idx_eldom,"GEST_E006") & STRCMP(tipoeldom_mob,"FRIGO")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E006")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E006")
               }

               if ( VAR_EXIST(idx_eldom,"GEST_E002") & STRCMP(tipoeldom_mob,"FORNO")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E002")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E002")
               }

               if ( VAR_EXIST(idx_eldom,"GEST_E005") & STRCMP(tipoeldom_mob,"MICRO")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E005")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E005")
               }
               if ( VAR_EXIST(idx_eldom,"GEST_E003") & STRCMP(tipoeldom_mob,"SCALDAVIVANDE")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E003")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E003")
               }
               if ( VAR_EXIST(idx_eldom,"GEST_E009") & STRCMP(tipoeldom_mob,"CANTINETTA")==0 )
               {
                  SET_#(idx_eldom)
                  cod_eldom = VAR_VAL_STR(idx_eldom,"GEST_E009")
                  des_eldom = DESCRIZIONE_VAL_TABDB(idx_eldom,"GEST_E009")
               }
            }
         }
      }

      //if( InsEldom==0 ) { des_eldom = "FRIGO CLIENTE" }
      if( InsEldom==0 ) { des_eldom = "*" }

      //nota_pred = UPPER(STRCAT(VAL_MENU("Cuc_InsEld",InsEldom)," ",cod_eldom," - ",des_eldom))
      nota_pred = UPPER(des_eldom)

      VAR_GEST_ELDOM  = ""

      if ( VAR_EXIST(idx_att,"idx_eldom") )
      {
         if ( IS_IDX(idx_eldom) )
         {
            tipoeldom_eld = VAR_VAL_STR(idx_eldom,"ELD_TIPO_ELDOM")
            if ( STRCMP(tipoeldom_mob,tipoeldom_eld)==0 )
            {
               VAR_GEST_ELDOM  = "GEST_C016"

               //if ( STRCMP(tipoeldom_eld,"FRIGO")==0 )
               //{
               //   if( VAR_VAL(ATTUALE(),"FrigoFreeStd")==1 )   { VAR_GEST_ELDOM = "GEST_PRFRF" }
               //}
               //if ( STRCMP(tipoeldom_eld,"FORNO")==0 )         { VAR_GEST_ELDOM = "GEST_PRFOR" }
               //if ( STRCMP(tipoeldom_eld,"MICRO")==0 )         { VAR_GEST_ELDOM = "GEST_PRMIC" }
               //if ( STRCMP(tipoeldom_eld,"LAVAS")==0 )         { VAR_GEST_ELDOM = "GEST_PRLST" }
               //if ( STRCMP(tipoeldom_eld,"LAVAT")==0 )         { VAR_GEST_ELDOM = "GEST_PRLVT" }
               //if ( STRCMP(tipoeldom_eld,"CAPPA")==0 )         { VAR_GEST_ELDOM = "GEST_PRCAI" }
               //if ( STRCMP(tipoeldom_eld,"SCALDAVIVANDE")==0 ) { VAR_GEST_ELDOM = "GEST_PRSCV" }
               //if ( STRCMP(tipoeldom_eld,"MACCHINACAFFE")==0 ) { VAR_GEST_ELDOM = "GEST_PRCAF" }
               //if ( STRCMP(tipoeldom_eld,"CANTINA")==0 )       { VAR_GEST_ELDOM = "GEST_PRCAN" }
               //if ( STRCMP(tipoeldom_eld,"LAVASTOVIGLIE")==0 ) { VAR_GEST_ELDOM = "GEST_PRLST" }
               //if ( STRCMP(tipoeldom_eld,"DISPENCER")==0 )     { VAR_GEST_ELDOM = "GEST_PRFRF" }
               //if ( STRCMP(tipoeldom_eld,"LAVATRICE")==0 )     { VAR_GEST_ELDOM = "GEST_PRLVT" }

               //if( IS_VAR_FIXED(ATTUALE(),VAR_GEST_ELDOM) ) { DEL_VAR_MODIFICATE(ATTUALE(),VAR_GEST_ELDOM) }
               //VAR_VALUESTR_SET(ATTUALE(),VAR_GEST_ELDOM,nota_pred)

               //WITH_VAR_LOCAL(ATTUALE(),"ArGestEldom",VAR_GEST_ELDOM,1,0,"")
               //if( ArGestEldom>0 ) { VAR_VALUESTR_SET(ArGestEldom[1],VAR_GEST_ELDOM,nota_pred) }
            }
         }
      }
   }

   PROCEDURA AttrezzaSuTop
   {
      GOSUB Trova_Rie_Fro

      //if ( IS_MATCH(COD_LAV,"023*") )   { GOSUB CtrlParLavAng }

      //topangolo = 0
      //if ( IS_MATCH(NOME(idx_pdr),"TopAngolo*") )   { topangolo = 1 }
      //if ( IS_MATCH(NOME(idx_pdr),"TopB*") )
      //{
      //   if ( @VAR_tipologia=="023" )   { topangolo = 1 }
      //}
      //if ( topangolo )
      //{
      //   // base_0 = [@base_0.x+406, @base_0.y, @base_0.z+228]
      //   // ang_y = -45
      //
      //   dist = DISTANZA(@base_1,@base_2)
      //   base_0.x = @base_0.x + dist/2 - X_LAV/2
      //   base_0.z = @base_1.z - Z_LAV - Rie_Fro
      //}
      //else
      //{
         if ( CMD()==$CMD_INTERATTIVO & ACTION()==2 & escluso==0
            & VAR_VAL(PADRE(ATTUALE(),1),"in_pcfto")==0  )
         {
            CHIEDI(ATTUALE(),"Filo")
            HIDE_ON_EDIT(ATTUALE(),"Filo",0)
            if( Filo==-1 )
            {
               CHIEDI(ATTUALE(),"DeltaSX")
               HIDE_ON_EDIT(ATTUALE(),"DeltaSX",0)
            }
            else
            {
               CHIEDI(ATTUALE(),"DeltaDX")
               HIDE_ON_EDIT(ATTUALE(),"DeltaDX",0)
            }
         }
         if( Filo==-1 )
         {
            base_0.x = $vano_0.x + DeltaSX + @Rid_sx_FS_retro

            no_Rid_sx_FS_retro = 0
            //COMPONENTI2("comp",idx_pdr,"LavorazioneAngoloFS*")
            //k = 1
            //while ( k<=comp )
            //{
            //   if ( STRCMP(VAR_VAL_STR(comp[k],"Posizione"),"SXRT")==0 )
            //      { no_Rid_sx_FS_retro = 1 }
            //   k = k + 1
            //}

            if ( no_Rid_sx_FS_retro ) { base_0.x = $vano_0.x + DeltaSX }
         }
         else    { base_0.x = $vano_0.x + $larghezza - DeltaDX - X_LAV   }

         Rie_RTR  = $profondita -Rie_Fro -Z_LAV
         base_0.z = $vano_0.z +Rie_RTR

         Xtop=$larghezza
         Ytop=@Y +VAR_VAL(PADRE(ATTUALE(),1),"Sposta_Altezza")
         Ztop=$profondita
      //}
      base_0.y = @alto_2.y
   }

   //PROCEDURA AttrezzaSuBase
   //{
   //   GOSUB Trova_Rie_Fro
   //
   //   base_0  = $vano_0
   //
   //   if( VAR_VAL_STR(ATTUALE(),"TipoScasso")=="PAR1"
   //     | VAR_VAL_STR(ATTUALE(),"TipoScasso")=="PAR2"
   //     | VAR_VAL_STR(ATTUALE(),"TipoScasso")=="" )    { Rie_RTR = @Zt - Rie_Fro - Z_LAV }
   //
   //
   //   if( VAR_VAL_STR(ATTUALE(),"TipoScasso")=="CIR1" ) { Rie_RTR = @Zt - Rie_Fro - VAR_VAL(ATTUALE(),"RaggioForoCIR1") }
   //
   //   base_0.z = @base_0.z + Rie_RTR + 1
   //
   //   if( $OnLoadOrder ) { ch_pos = 1 }
   //
   //   if( VAR_VAL_STR(ATTUALE(),"TipoScasso")=="PAR1"
   //     | VAR_VAL_STR(ATTUALE(),"TipoScasso")=="PAR2"
   //     | VAR_VAL_STR(ATTUALE(),"TipoScasso")=="" )
   //   {
   //      if( posizione== 0 ) { base_0.x = $vano_0.x + $larghezza/2 - X_LAV/2 }
   //      if( posizione== 1 ) { base_0.x = $vano_0.x + $larghezza + $Spe_fia - X_LAV - DeltaDX }
   //      if( posizione==-1 ) { base_0.x = $vano_0.x - $Spe_fia + DeltaSX }
   //   }
   //
   //   if( VAR_VAL_STR(ATTUALE(),"TipoScasso")=="CIR1" )
   //   {
   //      if( posizione== 0 ) { base_0.x = $vano_0.x + $larghezza/2 - VAR_VAL(ATTUALE(),"RaggioForoCIR1") }
   //      if( posizione== 1 ) { base_0.x = $vano_0.x + $larghezza + $Spe_fia - VAR_VAL(ATTUALE(),"RaggioForoCIR1") - DeltaDX - VAR_VAL(ATTUALE(),"RaggioForoCIR1")/2 }
   //      if( posizione==-1 ) { base_0.x = $vano_0.x - $Spe_fia + DeltaSX + VAR_VAL(ATTUALE(),"RaggioForoCIR1")/2 }
   //   }
   //
   //   chiedi = 0
   //   GOSUB AltezzaTop
   //
   //   base_0.y = @alto_2.y + Ytop
   //
   //   base_x = base_0.x - (X-X_LAV)/2
   //   base_y = base_0.y
   //   base_z = base_0.z
   //}

   PROCEDURA Trova_Rie_Fro
   {
      if( IS_VAR_FIXED(ATTUALE(),"Rie_Fro")==0 )
      {
         //Rie_Fro = $Rie_Scs_Fro
         Rie_Fro = 80

         if( VAR_EXIST(ATTUALE(),"ZMinFronteTop") )
         {
            if( ZMinFronteTop>0 ) { Rie_Fro = ZMinFronteTop }
         }
      }
   }

   PROCEDURA AltezzaTop
   {
      if( ACTION()<=0 | COMPONENDO() )  { EXITSUB()   }

      if( IS_ESCLUSO(idx_att)!=0
        | IS_ESCLUSO(idx_topl)!=0 )     { EXITSUB()   }

      if( IS_MATCH(NOME(PADRE(ATTUALE(),-1)),"Top*")!=1 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE("near",ATTUALE(),20,$ignora_esclusi,"Top*")

         if( near>0 )
         {
            SET_#(near[1])
            Ytop = #Y+VAR_VAL(near[1],"Sposta_Altezza")
         }
      }
   }

   PROCEDURA RiempiScassaChi
   {
      if ( ACTION()<=0
         | ACTION()==1064
         | COMPONENDO()
         | $OnLoadOrder )
      {  EXITSUB()   }

      BOX_MODE(0)
      Scassa_Chi_Plus = ""
      NEAR("wk_near",ATTUALE(),1,$ignora_esclusi,"Top*")

      NEAR("men",ATTUALE(),1,$ignora_esclusi,"Mensolone*")
      j = 1
      while ( j<=men )
      {
         idx_j = men[j]
         wk_near = wk_near + 1
         VAR_CREATE_NUM(idx_att,STRCAT("wk_near_##",STR(wk_near)),idx_j,0,"")
         j = j + 1
      }

      NEAR("pan",ATTUALE(),1,$ignora_esclusi,"PannelloMq*")
      j = 1
      while ( j<=pan )
      {
         idx_j = pan[j]
         if ( VAR_VAL(idx_j,"VAR_Posizione")==0 )
         {
            wk_near = wk_near + 1
            VAR_CREATE_NUM(idx_att,STRCAT("wk_near_##",STR(wk_near)),idx_j,0,"")
         }
         j = j + 1
      }

      NEAR("Blc",ATTUALE(),1,$ignora_esclusi,"Blocco")
      j = 1
      while ( j<=Blc )
      {
         idx_j = Blc[j]
         if ( VAR_VAL(idx_j,"VAR_Posizione")==0 )
         {
            wk_near = wk_near + 1
            VAR_CREATE_NUM(idx_att,STRCAT("wk_near_##",STR(wk_near)),idx_j,0,"")
         }
         j = j + 1
      }

      wk_i = 1
      while( wk_i<=wk_near )
      {
         if( VAR_EXIST(wk_near[wk_i],"idx_top_fig")
           & VAR_VAL(wk_near[wk_i],"idx_top_fig")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_top_fig")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_top_fig2")
           & VAR_VAL(wk_near[wk_i],"idx_top_fig2")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_top_fig2")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_bordovista_fro")
           & VAR_VAL(wk_near[wk_i],"idx_bordovista_fro")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_bordovista_fro")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_bordovista_sx")
           & VAR_VAL(wk_near[wk_i],"idx_bordovista_sx")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_bordovista_sx")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_bordovista_dx")
           & VAR_VAL(wk_near[wk_i],"idx_bordovista_dx")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_bordovista_dx")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_bordovista_ret")
           & VAR_VAL(wk_near[wk_i],"idx_bordovista_ret")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_bordovista_ret")),";",Scassa_Chi_Plus) }
         if( VAR_EXIST(wk_near[wk_i],"idx_top_generico")
           & VAR_VAL(wk_near[wk_i],"idx_top_generico")!=-1 )
           { Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(wk_near[wk_i],"idx_top_generico")),";",Scassa_Chi_Plus) }
         wk_i = wk_i +1
      }
   }

   PROCEDURA RifaiScassaTop
   {
      //aggiunto $OnLoadOrder2 per farlo solo in inserimento ordine
      if(ACTION()<0 | COMPONENDO() | $OnLoadOrder2==1 )  { EXITSUB()   }

      if( IS_ESCLUSO(idx_att)!=0
        | IS_ESCLUSO(idx_topl)!=0 )                      { EXITSUB()   }

      if( VAR_VAL_STR(idx_att,"ELD_CODICE")==""
        | VAR_VAL_STR(idx_att,"ELD_CODICE")=="__" )      { EXITSUB()   }

      //nn scassi se non voglio il foro
      if( VAR_VAL(idx_att,"NoForo")!=0 )                 { EXITSUB()   }
      if( VAR_VAL(ATTUALE(),"NonControlloVic")==1 )      { EXITSUB()   }

      if( xlav_prec!=X_LAV
        | zlav_prec!=Z_LAV
        | ragg_prec!=Raggio
        | STRCMP(tpscs_prec,TipoScasso)!=0 )
      {
         if( VAR_EXIST(idx_att,"idx_scasso")
           //altrimenti lo fa anche prima di avere le misure dall'anagrafica
           & X_LAV>0
           & Z_LAV>0
           & STRLEN(TipoScasso)>0 )
         {
            //deve essere fatto solo dopo il controllo gestionale
            if( IS_IDX(idx_scasso) & $OnLoadOrder==0 & $OnRigenera==0 )
            {
               xlav_prec = X_LAV
               zlav_prec = Z_LAV
               ragg_prec = Raggio
               tpscs_prec = TipoScasso
               //una stringa di comnadi unica!
               //salvo variabili per non rifare scassi inutili dopo il caricamento dell'ordine
               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," xlav_prec=",STR(X_LAV)," zlav_prec=",STR(Z_LAV)," ragg_prec=",STR(Raggio)," tpscs_prec=",APICI(),TipoScasso,APICI()))

               //effettuo gli scassi e successivi controlli
               COMANDO(STRCAT("Procedura M4_Scassi ", STR(idx_scasso)," //SettaScassaTop"))
               COMANDO(STRCAT("Procedura PostAction2 ", STR(idx_pdr)," //SettaScassaTop"))
            }
         }
      }
   }

   PROCEDURA Ctrl_TFiloTop_PC
   {
      if ( ACTION()<=0 | ACTION()==1064
         | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ )
         { EXITSUB }

      if ( FiloTop==1 )
      {
         HIDE_ON_EDIT2(idx_att,"Tipo_FiloTop",0)
         while ( Tipo_FiloTop==0 )   { CHIEDI(idx_att,"Tipo_FiloTop") }
      }
      else
      {
         if ( IS_VAR_FIXED(idx_att,"Tipo_FiloTop") )
            { DEL_VAR_MODIFICATE(idx_att,"Tipo_FiloTop") }
         Tipo_FiloTop = 0
         if ( VAR_EXIST(idx_att,"avviso_topinox_eldomfilotopT1")==1 )
            { DEL_VAR(idx_att,"avviso_topinox_eldomfilotopT1") }
      }
   }

   PROCEDURA CercaTopRif
   {
      if ( ACTION()<=0 | ACTION()==1064
         | COMPONENDO() | IS_ESCLUSO(ATTUALE()) | $M4RicalcoloOffset__ )
         { EXITSUB }

      idx_top_rif = -1
      NEAR_GLOBALE("top",idx_att,1,$ignora_esclusi,"Top*")
      NEAR_GLOBALE("men",idx_att,1,$ignora_esclusi,"Mensolone*")
      Ztop = 600
      j = 1
      while ( j<=men )
      {
         idx_j = men[j]
         top = top + 1
         VAR_CREATE_NUM(idx_att,STRCAT("top_##",STR(top)),idx_j,0,"")
         j = j + 1
      }
      ii = 1
      while ( ii<=top )
      {
         idx = top[ii]
         SET_#(idx)
         if ( ABS(ANG_TOT2(idx_att)-ANG_TOT2(idx))<1
            | IS_MATCH(NOME(idx),"TopAngolo*") )
         {
            Ztop = #Z
            AltTop = #Y
            idx_top_rif = idx
         }
         if ( IS_MATCH(TipoScasso,"ANG*") )
         {
            if ( ABS(ANG_TOT2(idx_att)-ANG_TOT2(idx))>1 )
            {
               Ztop1 = #Z
               AltTop = #Y
               idx_top_rif = idx
            }
         }
         ii = ii + 1
      }
   }

   PROCEDURA SettaAltTop
   {
      //fc 140226
      if(ACTION()<0 | COMPONENDO() )   {  EXITSUB()   }

      if( IS_MATCH(NOME(idx_pdr),"Top*")!=1 )
      {
         NEAR_GLOBALE("nnn",ATTUALE(),1,$ignora_esclusi,"Top*")
         Ztop=600
         ii=1
         while ( ii<=nnn )
         {
            SET_#(nnn[ii])
            if( ANG_TOT2(ATTUALE())==ANG_TOT2(nnn[ii]) )
            {
               Ytop = #Y
               Ztop = #Z
               idx_pdr = nnn[ii]
            }
            ii=ii+1
         }
      }
      else { Ytop = Y }
   }

   PROCEDURA AggiornaScassiM4Top
   {
      idx_att = ATTUALE()

      // Studio vicinanza di tutti gli schienali con l'elemento attuale
      NEAR_GLOBALE("top",idx_att,1,$ignora_esclusi,"Top*")

      //NEAR_GLOBALE("men",idx_att,1,$ignora_esclusi,"Mensolone*")
      //j = 1
      //while ( j<=men )
      //{
      //   idx_j = men[j]
      //   top = top + 1
      //   VAR_CREATE_NUM(idx_att,STRCAT("top_##",STR(top)),idx_j,0,"")
      //   j = j + 1
      //}
      //NEAR_GLOBALE("pan",idx_att,1,$ignora_esclusi,"PannelloMq*")
      //j = 1
      //while ( j<=pan )
      //{
      //   idx_j = pan[j]
      //   if ( VAR_VAL(idx_j,"VAR_Posizione")==0 )
      //   {
      //      top = top + 1
      //      VAR_CREATE_NUM(idx_att,STRCAT("top_##",STR(top)),idx_j,0,"")
      //   }
      //   j = j + 1
      //}

      i = 1
      while ( i<=top )
      {
         $wk_idx_top = top[i]
         $wk_idx_da_scassare = VAR_VAL($wk_idx_top,"idx_top_fig")
         GOSUB RieseguiScsiSuScsto

         //if ( VAR_EXIST($wk_idx_top,"idx_top_fig2") )
         //{
         //   $wk_idx_da_scassare = VAR_VAL($wk_idx_top,"idx_top_fig2")
         //   GOSUB RieseguiScsiSuScsto
         //}
         //if ( VAR_EXIST($wk_idx_top,"idx_top_fig2") )
         //{
         //   $wk_idx_da_scassare = VAR_VAL($wk_idx_top,"idx_top_fig2")
         //   GOSUB RieseguiScsiSuScsto
         //}
         if ( VAR_EXIST($wk_idx_top,"idx_top_generico") )
         {
            $wk_idx_da_scassare = VAR_VAL($wk_idx_top,"idx_top_generico")
            GOSUB RieseguiScsiSuScsto
         }
         i = i + 1
      }
   }

   PROCEDURA RieseguiScsiSuScsto
   {
      if ( IS_IDX($wk_idx_da_scassare)==0 )   { EXITSUB }

      //Elimina acis su elemento da scassare
      if ( HAS_ALIAS($wk_idx_da_scassare,"M4_SCASSA") )
      {
         COMANDO(STRCAT("M4_ELIMINAACIS ",STR($wk_idx_da_scassare)))
         COMANDO(STRCAT("Show Strutture idx Add ",STR($wk_idx_da_scassare)))
      }

      //Cerco tutti gli elementi che sono scassanti
      WITH_ALIAS("$wk_wa","M4_SCASSA")
      j = 1
      while ( j<=$wk_wa )
      {
         $wk_idx_scassi = $wk_wa[j]
         if ( VAR_VAL($wk_idx_scassi,"Ignora_Scasso")==0 )
         {
            //Per ogni elemento vedo se scassa il mio elemento
            $wk_elenco = VAR_VAL_STR($wk_idx_scassi,"Scassa_Chi_Plus")
            $wk_elenco = STRCAT($wk_elenco,";")
            $wk_start = STR_INDEX_OF($wk_elenco,0,STRCAT(STR($wk_idx_da_scassare),";"))
            if ( $wk_start>-1 )
            {
               //Aggiorno lo scasso
               $wk_scassabile = $wk_idx_da_scassare
               $wk_scasso = $wk_idx_scassi
               if ( $wk_scassabile!=$wk_idx_scassi )
               {
                  $wk_commento = STRCAT("   // Refresh scassi su idx=",STR($wk_idx_da_scassare))
                  GOSUB Scasso_M4
               }
            }
         }
         j = j + 1
      }
   }
   //} procedure inserimento eldom

   PROCEDURA Notifica_Barra_Bifacciale
   {
      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         COMANDO2("Show Abilita ON")
         EXIT()
      }

      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(X)," Y=",STR(Y) ," //Notifica ",NOME(ATTUALE())))

      //aggancio alla prima base che ho selezionato
      idx_ref = $stesi_idx_sx

      //aggancio alla prima base che ho selezionato
      SET_#(idx_ref)
      idx_ref = $stesi_idx_sx

      wk_punto_rif = #base_0

      if( NOME(idx_ref)=="ScoccaT_BaseAngPan"
        | NOME(idx_ref)=="ScoccaT_ColAngPan" )
      {
         if( VAR_VAL(idx_ref,"Verso") < 0 ) { wk_punto_rif = #base_1 }

         //Luca 28/07/2020
         if( NOME(ATTUALE()) == "GruppoBarraIsola" ) { wk_punto_rif = #base_0 }
      }

      wk_offx = 0
      wk_offy = DISTANZA(base_0,wk_punto_rif)
      wk_offz = 0

      if( NOME(ATTUALE())!="Cuc_AntaBifacciale" )
      {
         if( wk_punto_rif.y > base_0.y ) { wk_offy = -1*wk_offy }
      }

      wk_cnt = STRCAT("CNT S + 0,B + 0,R - 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0.0")

      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
        //| NOME(ATTUALE())=="GruppoBarraIsola"  )
      {
         wk_cnt = STRCAT("CNT D - 0,B + 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 180")

         if( NOME(idx_ref)=="ScoccaT_BaseAngPan"
           | NOME(idx_ref)=="ScoccaT_ColAngPan"   )
         {
            if( VAR_VAL(idx_ref,"Verso")>0 )
            {
               wk_cnt = STRCAT("CNT S - 0,B + 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 180")
            }
         }
      }

      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA ",STR(idx_att)," //NotificaBarraIsola"))

      if( NOME(ATTUALE()) == "Cuc_AntaBifacciale" )
      {
         //Luca 15/02/2019 ricalcola anche eventuale base a cui sono agganciato
         VAR_VALUE_SET( idx_ref, "ConBifacciale", 1)
         VAR_VALUE_SET( idx_ref, "ConBifacciale_1", 1)
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_ref)," no_agganciati //Notifica " , NOME(ATTUALE())))
      }

      COMANDO2("Show Abilita ON")
   }

   PROCEDURA Stendi_Barra_Bifacciale
   {
      nome_var_pnt_sx = "punto_barra_sx_"
      nome_var_pnt_dx = "punto_barra_dx_"

      wk_blocca_stesura = 0
      wk_blocca_stesura_msg = ""

      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
      {
         nome_var_pnt_sx = "punto_bifacc_sx_"
         nome_var_pnt_dx = "punto_bifacc_dx_"
      }

      if( $stesi_mode_sx==$stesi_XYZ
        & $stesi_mode_dx==$stesi_XYZ  )
      {
         P1 = $stesi_pt_sx
         P2 = $stesi_pt_dx

         //trovo l'angolo di direzione dei pick
         ang_dir = ANG_2_PUNTI(P1,P2)
         //DISPLAY2(STRCAT("BP ---> ang_dir:" , STR(ang_dir)))
         $stesi_idx_sx = GetIdxWithPoint( -1, nome_var_pnt_sx, nome_var_pnt_dx, P1)

         //DISPLAY2(STRCAT("$stesi_idx_sx = " , STR($stesi_idx_sx)))


         //angolo della base con uno dei due punti di pick
         ang_bas = ANG_TOT2($stesi_idx_sx)
         //DISPLAY2(STRCAT("BP ---> ang_bas:" , STR(ang_bas)))

         //se l'ang_dir == ang_bas
         //il punto 1 di stesura sarà il punto_barra_SX di una base
         //il punto 2 di stesura sarà il punto_barra_DX di una base
         var_p1 = nome_var_pnt_sx
         var_p2 = nome_var_pnt_dx

         //se l'ang_dir <> ang_bas
         //il punto 1 di stesura sarà il punto_barra_DX di una base
         //il punto 2 di stesura sarà il punto_barra_SX di una base
         if( ABS(ang_bas-ang_dir)>10 )
         {
            var_p1 = nome_var_pnt_dx
            var_p2 = nome_var_pnt_sx
         }

         $stesi_idx_sx = GetIdxWithPoint( -1, var_p1, "", P1)
         $stesi_idx_dx = GetIdxWithPoint( -1, var_p2, "", P2)

         //Luca 03/02/2020
         if( IS_IDX($stesi_idx_sx)==0 ) { $stesi_idx_sx = GetIdxWithPoint( -1, var_p2, "", P1) }
         if( IS_IDX($stesi_idx_dx)==0 ) { $stesi_idx_dx = GetIdxWithPoint( -1, var_p1, "", P2) }

         idx_ref = $stesi_idx_sx
      }

      //Luca 30/07/2019 steso selezione
      if( $stesi_mode_sx==$stesi_Elemento
        & $stesi_mode_dx==$stesi_Elemento  )
      {
         $stesi_idx_sx = $stesi_idx1
         $stesi_idx_dx = $stesi_idx2

         $stesi_pt_sx = [-9999,-9999,-9999]
         $stesi_pt_dx = [-9999,-9999,-9999]

         if( VAR_EXIST($stesi_idx_sx,"punto_bifacc_sx_1")==0
           | VAR_VAL($stesi_idx_sx,"ConBifacciale_1")==1 ) { wk_blocca_stesura = 1 }

         if( wk_blocca_stesura==0 )
         {
            SET_#($stesi_idx1)

            if( NOME($stesi_idx1)=="ScoccaT_ColAngPan" ) { FLAG_perColAng = 1 }

            $stesi_pt_sx = #punto_bifacc_dx_1

            vv = 100
            while( VAR_EXIST($stesi_idx1,STRCAT("punto_bifacc_sx_",STR(vv)))==0 ) { vv = vv - 1 }
            nome_var = STRCAT("punto_bifacc_sx_",STR(vv))
            EVAL( STRCAT(" pnt2 = #",nome_var))

            $stesi_pt_dx = pnt2

            wk_verso = -1
            idx_ref = $stesi_idx1

            if( $stesi_pt_sx.x<-1000 & $stesi_pt_sx.y<-1000 & $stesi_pt_sx.z<-1000 ) { wk_blocca_stesura = 1 }
         }
      }

      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
      {
         $stesi_idx_dx = $stesi_idx_sx

         if( FLAG_perColonna==1 )
         {
            if( IS_MATCH(NOME($stesi_idx_sx),"ScoccaT_Co*")!=1 ) { wk_blocca_stesura = 1 }

            //verifico dimensioni per ogni tipologia di NOW
            if( TipoFrontale==4  )
            {
               if( VAR_VAL($stesi_idx_sx,"X")<900 )
               {
                  wk_blocca_stesura = 1
                  wk_blocca_stesura_msg = STRCAT(MSG(1110),"\n",MSG(1111))
               }
            }
         }
         else
         {
            if( IS_MATCH(NOME($stesi_idx_sx),"ScoccaT_Bas*")!=1 ) { wk_blocca_stesura = 1 }
         }
      }

      if( IS_IDX(idx_ref)
        & VAR_EXIST( idx_att, "Cucina_Versione"))
      {
         idx_struttura = idx_ref
         if( Cucina_Versione != VAR_VAL( idx_struttura, "Cucina_Versione")) { wk_blocca_stesura = 2 }
      }

      if( wk_blocca_stesura>0 )
      {
         delme = 1
         if( wk_blocca_stesura_msg=="" )
         {
            DISPLAY3(MSG(1110),$MB_ICONERROR)
         }
         else
         {
            DISPLAY3(wk_blocca_stesura_msg,$MB_ICONERROR)
         }
         FLAG_RADICE = $NO_RAD
         //COMANDO2("Show Abilita ON")
         NO_GEST = 1
         EXIT()
      }

      COMANDO2("Show Abilita OFF")

      //se il pick è stato fatto da dx a sx inverto i punti
      P999 = $stesi_pt_sx
      wk_ang_test = ANG_2_PUNTI($stesi_pt_sx,$stesi_pt_dx)
      if( IS_IDX($stesi_idx_sx)==1 ) { wk_ang_test = ANG_TOT2($stesi_idx_sx) }

      P999.x = P999.x - COSENO(wk_ang_test)*99999
      P999.z = P999.z +   SENO(wk_ang_test)*99999
      //P999.x = P999.x - COSENO(ANG_TOT2($stesi_idx_sx))*99999
      //P999.z = P999.z +   SENO(ANG_TOT2($stesi_idx_sx))*99999


      if( DISTANZA(P999,$stesi_pt_sx)>DISTANZA(P999,$stesi_pt_dx) )
      {
         wk_stesi_pt_sx  = $stesi_pt_sx
         wk_stesi_idx_sx = $stesi_idx_sx

         $stesi_pt_sx  = $stesi_pt_dx
         $stesi_idx_sx = $stesi_idx_dx

         $stesi_pt_dx  = wk_stesi_pt_sx
         $stesi_idx_dx = wk_stesi_idx_sx
      }

      //se la basi non sono allineate, avviso e cancello
      //if( ABS(ANG_TOT2($stesi_idx_sx)-ANG_TOT2($stesi_idx_dx))>0.1
      if( ABS(ANG_TOT2($stesi_idx_sx)-ANG_TOT2($stesi_idx_dx))>0.1
        | ABS($stesi_pt_sx.y-$stesi_pt_dx.y)<0.1   )
      {
         delme = 1
         DISPLAY3(MSG(1051),$MB_ICONERROR)
         //COMANDO2("Show Abilita ON")
         FLAG_RADICE = $NO_RAD
         NO_GEST = 1
         EXIT()
      }

      //Luca 15/02/2019
      //per ora non prevedo la soluzione su più basi
      if( NOME(ATTUALE())=="Cuc_AntaBifacciale"
        & $stesi_idx_sx!=$stesi_idx_dx )
      {
         //$stesi_idx_sx -- $stesi_pt_sx
         //$stesi_idx_dx -- $stesi_pt_dx

         nome_var = "punto_bifacc_sx_1"
         while( VAR_EXIST($stesi_idx_sx,nome_var) )
         {
            SET_#($stesi_idx_sx)
            EVAL( STRCAT(" pnt_test = #",nome_var))
            if(DISTANZA($stesi_pt_dx,pnt_test)<0.1)
            {
               $stesi_idx_dx = $stesi_idx_sx
               nome_var = ""
            }

            ind = ATOI(RIGHT(nome_var,1))
            nome_var = LEFT(nome_var,STRLEN(nome_var)-1)
            nome_var = STRCAT(nome_var,STR(ind+1))
         }
         nome_var = "punto_bifacc_dx_1"
         while( VAR_EXIST($stesi_idx_sx,nome_var) )
         {
            SET_#($stesi_idx_sx)
            EVAL( STRCAT(" pnt_test = #",nome_var))
            if(DISTANZA($stesi_pt_dx,pnt_test)<0.1)
            {
               $stesi_idx_dx = $stesi_idx_sx
               nome_var = ""
            }

            ind = ATOI(RIGHT(nome_var,1))
            nome_var = LEFT(nome_var,STRLEN(nome_var)-1)
            nome_var = STRCAT(nome_var,STR(ind+1))
         }

         if( $stesi_idx_sx!=$stesi_idx_dx  )
         {
            nome_var = "punto_bifacc_sx_1"
            while( VAR_EXIST($stesi_idx_dx,nome_var) )
            {
               SET_#($stesi_idx_dx)
               EVAL( STRCAT(" pnt_test = #",nome_var))
               if(DISTANZA($stesi_pt_sx,pnt_test)<0.1)
               {
                  $stesi_idx_sx = $stesi_idx_dx
                  nome_var = ""
               }

               ind = ATOI(RIGHT(nome_var,1))
               nome_var = LEFT(nome_var,STRLEN(nome_var)-1)
               nome_var = STRCAT(nome_var,STR(ind+1))
            }
            nome_var = "punto_bifacc_dx_1"
            while( VAR_EXIST($stesi_idx_dx,nome_var) )
            {
               SET_#($stesi_idx_dx)
               EVAL( STRCAT(" pnt_test = #",nome_var))
               if(DISTANZA($stesi_pt_sx,pnt_test)<0.1)
               {
                  $stesi_idx_sx = $stesi_idx_dx
                  nome_var = ""
               }

               ind = ATOI(RIGHT(nome_var,1))
               nome_var = LEFT(nome_var,STRLEN(nome_var)-1)
               nome_var = STRCAT(nome_var,STR(ind+1))
            }
         }

         if( $stesi_idx_sx!=$stesi_idx_dx  )
         {
            delme = 1
            DISPLAY3(MSG(1052),$MB_ICONERROR)
            //COMANDO2("Show Abilita ON")
            NO_GEST = 1
            FLAG_RADICE = $NO_RAD
            EXIT()
         }
      }



      //ang_y = $stesi_ang_sx

      P1   = $stesi_pt_sx
      P2   = $stesi_pt_dx

      idx_ref = $stesi_idx_sx

      punto_ins = P1
      if( P1.y>P2.y  ) { punto_ins.y = P2.y }

      base_0 = punto_ins

      P1_0 = P1   P1_0.y = 0
      P2_0 = P2   P2_0.y = 0

      X = DISTANZA(P1_0,P2_0)*10
      X = FLOOR(X+0.5)/10

      SET_#(idx_ref)

      if( P1.y>P2.y )  { Y = P1.y - P2.y }
      else             { Y = P2.y - P1.y }
   }

   PROCEDURA Stendi_FiancoFinitura
   {
      if( VAR_VAL(ATTUALE(),"gia_steso")==1 ) { EXITSUB() }

      debug = 0
      #ifdef TE
         debug = 1
      #endif

      nome_var_pnt_sxr = "punto_ff_sxr_"
      nome_var_pnt_sxf = "punto_ff_sxf_"
      nome_var_pnt_dxr = "punto_ff_dxr_"
      nome_var_pnt_dxf = "punto_ff_dxf_"

      //se agganciato a dx o sx
      wk_verso = 0
      wk_copribarra = 0

      if( $stesi_mode_sx==$stesi_XYZ
        & $stesi_mode_dx==$stesi_XYZ  )
      {
         P1 = $stesi_pt_sx
         P2 = $stesi_pt_dx

         if( debug )
         {
            COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] $stesi_pt_sx --> P1=[",STR(P1.x),",",STR(P1.y),",",STR(P1.z),"]" ))
            COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] $stesi_pt_dx --> P2=[",STR(P2.x),",",STR(P2.y),",",STR(P2.z),"]" ))
         }

         if( P2.y < P1.y  )
         {
            wk_p_temp = P1
            P1 = P2
            P2 = wk_p_temp
         }

         //trovo l'angolo di direzione dei pick
         ang_dir = ANG_2_PUNTI(P1,P2)
         //DISPLAY2(STRCAT("BP ---> ang_dir:" , STR(ang_dir)))

         $stesi_idx_sx = GetIdxWithPoint( -1, nome_var_pnt_sxr, nome_var_pnt_sxf, P1)
         wk_verso = -1

         if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] $stesi_idx_sx --> ",STR($stesi_idx_sx) , " *1*" )) }

         //Luca 27/05/2020
         //{ aggiungo blocco stesura su basi sovrapposte
         wk_idx_1 = -1
         wk_idx_2 = -1

         wk_idx_1 = GetIdxWithPoint( -1,  nome_var_pnt_sxr, nome_var_pnt_sxf, P1)
         if( IS_IDX(wk_idx_1)==0 ) { wk_idx_1 = GetIdxWithPoint( -1, nome_var_pnt_dxr, nome_var_pnt_dxf, P1)    wk_verso = 1 }

         if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] wk_idx_1 --> ",STR(wk_idx_1) , " *2*" )) }

         if( IS_IDX(wk_idx_1)==1 )
         {
            LISTA_VARIABILI(wk_idx_1,0,"wk_lista_var","punto_ff_*")
            i = 1
            while ( i<=wk_lista_var  )
            {
               if( VAR_TYPE(wk_idx_1,wk_lista_var[i])==2 )
               {
                  if( VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".x"))==P2.x
                    & VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".y"))==P2.y
                    & VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".z"))==P2.z ) { wk_idx_2 = wk_idx_1 }
               }

               i = i + 1
            }
         }

         if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] wk_idx_2 --> ",STR(wk_idx_2) , " *3*" )) }

         if( IS_IDX(wk_idx_2)==0 )
         {
            wk_idx_2 = GetIdxWithPoint( -1, nome_var_pnt_sxr, nome_var_pnt_sxf, P2)
            if( IS_IDX(wk_idx_2)==0 ) { wk_idx_2 = GetIdxWithPoint( -1, nome_var_pnt_dxr, nome_var_pnt_dxf, P2)   wk_verso = 1 }
         }

         if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] wk_idx_2 --> ",STR(wk_idx_2) , " *4*" )) }

         if( IS_IDX(wk_idx_2)==1 )
         {
            LISTA_VARIABILI(wk_idx_2,0,"wk_lista_var","punto_ff_*")
            i = 1
            while ( i<=wk_lista_var  )
            {
               if( VAR_TYPE(wk_idx_2,wk_lista_var[i])==2 )
               {
                  if( VAR_VAL(wk_idx_2,STRCAT(wk_lista_var[i],".x"))==P1.x
                    & VAR_VAL(wk_idx_2,STRCAT(wk_lista_var[i],".y"))==P1.y
                    & VAR_VAL(wk_idx_2,STRCAT(wk_lista_var[i],".z"))==P1.z ) { wk_idx_1 = wk_idx_2 }
               }
               i = i + 1
            }
         }

         if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] wk_idx_2 --> ",STR(wk_idx_2) , " *5*" )) }

         if( IS_IDX(wk_idx_1) & IS_IDX(wk_idx_2) )
         {
            if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] wk_idx_1--> ",STR(wk_idx_1)," wk_idx_2 --> ",STR(wk_idx_2) )) }

            $stesi_idx_sx = wk_idx_1
            //Luca 08/06/2020
            //controllo il verso
            LISTA_VARIABILI(wk_idx_1,0,"wk_lista_var","punto_ff_dx*")
            wk_verso = -1
            i = 1
            while ( i<=wk_lista_var  )
            {
               if( VAR_TYPE(wk_idx_1,wk_lista_var[i])==2 )
               {
                  if( VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".x"))==P1.x
                    & VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".y"))==P1.y
                    & VAR_VAL(wk_idx_1,STRCAT(wk_lista_var[i],".z"))==P1.z ) { wk_verso = 1 }
               }

               i = i + 1
            }

            //HI(wk_idx_1,1)
            //DISPLAY2(STRCAT("wk_idx_1 = " , STR(wk_idx_1)))
            //HI(wk_idx_1,0)
            //HI(wk_idx_2,1)
            //DISPLAY2(STRCAT("wk_idx_2 = " , STR(wk_idx_2)))
            //HI(wk_idx_2,0)

            SET_#(wk_idx_1)
            wk_b0_1 = #base_0.y
            wk_a0_1 = #alto_0.y
            wk_al_1 = wk_a0_1 - wk_b0_1

            SET_#(wk_idx_2)
            wk_b0_2 = #base_0.y
            wk_a0_2 = #alto_0.y
            wk_al_2 = wk_a0_2 - wk_b0_2

            wk_diff_P1P2 = ABS(P1.y - P2.y)

            wk_allineamento = 1

            if( ABS(wk_b0_1-wk_b0_2)>1
              & ABS(wk_a0_1-wk_a0_2)>1 ) { wk_allineamento = 0 }

            //allineanti sopra
            wk_allineati_1 = 0
            if( ABS(wk_b0_1-wk_b0_2)>1
              & ABS(wk_a0_1-wk_a0_2)<1 ) { wk_allineamento = 2 }

            //allineati sotto
            if( ABS(wk_b0_1-wk_b0_2)<1
              & ABS(wk_a0_1-wk_a0_2)>1 ) { wk_allineamento = 2 }

            //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " P1.y=",STR(P1.y), " P2.y=",STR(P2.y), " | DEBUG ---- "))
            //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " wk_b0_1=",STR(wk_b0_1), " wk_a0_1=",STR(wk_a0_1), " | DEBUG ---- "))
            //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " wk_b0_2=",STR(wk_b0_2), " wk_a0_2=",STR(wk_a0_2), " | DEBUG ---- "))
            //DISPLAY2(STRCAT("BP ---> " , STR(0), " - " ))

            if( debug )
            {
               COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] --> wk_allineamento=",STR(wk_allineamento)))
               COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] --> wk_b0_1=",STR(wk_b0_1), " wk_a0_1=",STR(wk_a0_1)))
               COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] --> wk_b0_2=",STR(wk_b0_2), " wk_a0_2=",STR(wk_a0_2)))
               COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] --> wk_al_1=",STR(wk_al_1), " wk_al_2=",STR(wk_al_2) , " wk_diff_P1P2=",STR(wk_diff_P1P2)))
            }

            if( wk_allineamento == 2 )
            {
               //base 1 maggiore
               if( wk_al_2 < wk_al_1 )
               {
                  //if( wk_diff_P1P2 > wk_al_2 )                            { wk_allineamento = 0 }

                  if( ABS( P1.y - wk_b0_2 )>1 & ABS( P1.y - wk_a0_2 )>1
                    & ABS( P2.y - wk_b0_2 )>1 & ABS( P2.y - wk_a0_2 )>1 ) { wk_allineamento = 0 }
               }
               //base 2 maggiore
               else
               {
                  //if( wk_diff_P1P2 > wk_al_1 )                            { wk_allineamento = 0 }

                  if( ABS( P1.y - wk_b0_1 )>1 & ABS( P1.y - wk_b0_1 )>1
                    & ABS( P2.y - wk_a0_1 )>1 & ABS( P2.y - wk_a0_1 )>1 ) { wk_allineamento = 0 }
               }
            }

            //Luca 11/06/2020
            //se ho selezionati dei punti di basi e colonne non avrò ne alto ne base allineato
            if( IS_MATCH(NOME(wk_idx_1),"ScoccaT_Bas*")
              & IS_MATCH(NOME(wk_idx_2),"ScoccaT_Col*") )  { wk_allineamento = 1 }

            if( IS_MATCH(NOME(wk_idx_2),"ScoccaT_Bas*")
              & IS_MATCH(NOME(wk_idx_1),"ScoccaT_Col*") )  { wk_allineamento = 1 }

            if( debug ) { COMANDO2(STRCAT("LOGMSG Stendi_FiancoFinitura [",STR(ATTUALE()),"] --> wk_allineamento=",STR(wk_allineamento))) }

            // LP 22/03/2021 - Sblocco la possibilità di inserire basi sovrapposte da REV = 2
            // if( wk_allineamento == 0 )
            if( wk_allineamento == 0 & REV <= 1 )
            {
               //DISPLAY3("NON PUOI!",$MB_ICONERROR)
               wk_msg = STRCAT(MSG(1090),"\n",MSG(1110))
               DISPLAY3(wk_msg,$MB_ICONERROR)
               COMANDO2("Show Abilita ON")
               NO_GEST = 1
               EXIT()
            }
         }
         //} aggiungo blocco stesura su basi sovrapposte


         if( IS_IDX($stesi_idx_sx)==0 )
         {
            $stesi_idx_sx = GetIdxWithPoint( -1, nome_var_pnt_dxr, nome_var_pnt_dxf, P1)
            wk_verso = 1
         }

         $stesi_idx_dx = $stesi_idx_sx
//
         //HI($stesi_idx_sx,1)
         //DISPLAY2(STRCAT("$stesi_idx_sx = " , STR($stesi_idx_sx)))
         //HI($stesi_idx_sx,0)
         //HI($stesi_idx_dx,1)
         //DISPLAY2(STRCAT("$stesi_idx_dx = " , STR($stesi_idx_dx)))
         //HI($stesi_idx_dx,0)
      }

      //Luca 30/07/2019 steso selezione
      if( $stesi_mode_sx==$stesi_Elemento
        & $stesi_mode_dx==$stesi_Elemento  )
      {
         $stesi_idx_sx = $stesi_idx1
         $stesi_idx_dx = $stesi_idx2

         $stesi_pt_sx = [-9999,-9999,-9999]
         $stesi_pt_dx = [-9999,-9999,-9999]

         if( VAR_EXIST($stesi_idx_sx,"punto_ff_sxr_1")==0
           & VAR_EXIST($stesi_idx_sx,"punto_ff_dxr_1")==0 )
         {
            delme = 1
            DISPLAY3(MSG(1110),$MB_ICONERROR)
            COMANDO2("Show Abilita ON")
            NO_GEST = 1
            EXIT()
         }

         //se stendo per selezione stendo sempre su tutto il fianco
         //quindi se un lato della base selezionata è occupata stendo direttamente sul lato opposto
         //altrimenti chiedo
         wk_stendi_a_sx = 1
         wk_stendi_a_dx = 1

         //LZ 28/03/2022
         if( NOME($stesi_idx_sx) == "ScoccaT_ColAngPan"
           | NOME($stesi_idx_sx) == "ScoccaT_BaseAngPan" )
         {
            wk_verso_ref = VAR_VAL( $stesi_idx_sx, "Verso")
            wk_stendi_a_sx = SE_NUM( wk_verso_ref > 0, 1, 0)
            wk_stendi_a_dx = SE_NUM( wk_verso_ref < 0, 1, 0)
         }

         if( VAR_EXIST($stesi_idx_sx,"idx_sx") )
         {
            wk_idx_sx = VAR_VAL($stesi_idx_sx,"idx_sx")
            if( IS_IDX(wk_idx_sx) )
            {
               if( VAR_VAL($stesi_idx_sx,"Y")<=VAR_VAL(wk_idx_sx,"Y")
                 & VAR_VAL($stesi_idx_sx,"Zt")<=VAR_VAL(wk_idx_sx,"Zt")) { wk_stendi_a_sx = 0 }
            }

            if( VAR_VAL($stesi_idx_sx,"ConFiancoFinSx")==1 ) { wk_stendi_a_sx = 0 }
         }
         if( VAR_EXIST($stesi_idx_sx,"idx_dx") )
         {
            wk_idx_dx = VAR_VAL($stesi_idx_sx,"idx_dx")
            if( IS_IDX(wk_idx_dx) )
            {
               if( VAR_VAL($stesi_idx_sx,"Y")<=VAR_VAL(wk_idx_dx,"Y")
                 & VAR_VAL($stesi_idx_sx,"Zt")<=VAR_VAL(wk_idx_dx,"Zt") ) { wk_stendi_a_dx = 0 }
            }

            if( VAR_VAL($stesi_idx_sx,"ConFiancoFinDx")==1 ) { wk_stendi_a_dx = 0 }
         }

         //chiedo lato
         if( wk_stendi_a_sx==1 & wk_stendi_a_dx==1 )
         {
            $wk_caption = ""
            $wk_txt1 = ""
            $wk_txt2 = MSG(1070)
            $wk_txt3 = ""
            $wk_DLG_B1 = MSG(155)
            $wk_DLG_B2 = MSG(156)
            $wk_DLG_B3 = MSG(151)
            $wk_DLG_Result = 0
            $wk_image = ""
            if( $wk_image=="" )  { $wk_DLG_posx_lb = 30 }
            else                 { $wk_DLG_posx_lb = 90 }

            COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|Dlg3Bottoni",APICI()))

            if( $wk_DLG_Result==1 ) { wk_stendi_a_sx = 1 wk_stendi_a_dx = 0 }
            if( $wk_DLG_Result==2 ) { wk_stendi_a_sx = 0 wk_stendi_a_dx = 1 }
            if( $wk_DLG_Result==3 ) { wk_stendi_a_sx = 0 wk_stendi_a_dx = 0 }
         }

         //stendo a sx
         if( wk_stendi_a_sx==1 & wk_stendi_a_dx==0 )
         {
            SET_#($stesi_idx1)
            $stesi_pt_sx = #punto_ff_sxr_1

            vv = 100
            while( VAR_EXIST($stesi_idx1,STRCAT("punto_ff_sxr_",STR(vv)))==0 ) { vv = vv - 1 }
            nome_var = STRCAT("punto_ff_sxf_",STR(vv))
            EVAL( STRCAT(" pnt2 = #",nome_var))

            $stesi_pt_dx = pnt2

            wk_verso = -1
            idx_ref = $stesi_idx1
         }
         //stendo a dx
         if( wk_stendi_a_sx==0 & wk_stendi_a_dx==1 )
         {
            SET_#($stesi_idx1)
            $stesi_pt_sx = #punto_ff_dxr_1

            vv = 100
            while( VAR_EXIST($stesi_idx1,STRCAT("punto_ff_dxr_",STR(vv)))==0 ) { vv = vv - 1 }
            nome_var = STRCAT("punto_ff_dxf_",STR(vv))
            EVAL( STRCAT(" pnt2 = #",nome_var))

            $stesi_pt_dx = pnt2

            wk_verso = 1
            idx_ref = $stesi_idx1
         }

         if( wk_stendi_a_sx==0 & wk_stendi_a_dx==0 )
         {
            delme = 1
            DISPLAY3(MSG(1110),$MB_ICONERROR)
            COMANDO2("Show Abilita ON")
            NO_GEST = 1
            EXIT()
         }

         if( $stesi_pt_sx.x<-1000 & $stesi_pt_sx.y<-1000 & $stesi_pt_sx.z<-1000 )
         {
            delme = 1
            DISPLAY3(MSG(1110),$MB_ICONERROR)
            COMANDO2("Show Abilita ON")
            NO_GEST = 1
            EXIT()
         }
      }

      COMANDO2("Show Abilita OFF")

      ////se il pick è stato fatto da dx a sx inverto i punti
      //P999 = $stesi_pt_sx
      //P999.x = P999.x - COSENO(ANG_TOT2($stesi_idx_sx))*99999
      //P999.z = P999.z +   SENO(ANG_TOT2($stesi_idx_sx))*99999
      //
      //if( DISTANZA(P999,$stesi_pt_sx)>DISTANZA(P999,$stesi_pt_dx) )
      //{
      //   wk_stesi_pt_sx  = $stesi_pt_sx
      //   wk_stesi_idx_sx = $stesi_idx_sx
      //
      //   $stesi_pt_sx  = $stesi_pt_dx
      //   $stesi_idx_sx = $stesi_idx_dx
      //
      //   $stesi_pt_dx  = wk_stesi_pt_sx
      //   $stesi_idx_dx = wk_stesi_idx_sx
      //}

      //se la basi non sono allineate, avviso e cancello
      if( ABS(ANG_TOT2($stesi_idx_sx)-ANG_TOT2($stesi_idx_dx))>0.1
        | ABS($stesi_pt_sx.y-$stesi_pt_dx.y)<0.1
        | $stesi_idx_sx!=$stesi_idx_dx   )
      {
         delme = 1
         DISPLAY3(MSG(1051),$MB_ICONERROR)
         COMANDO2("Show Abilita ON")
         NO_GEST = 1
         EXIT()
      }

      P1   = $stesi_pt_sx
      P2   = $stesi_pt_dx

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE())," P1=[",STR(P1.x),",",STR(P1.y),",",STR(P1.z),"] | DEBUG ---- "))
      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE())," P2=[",STR(P2.x),",",STR(P2.y),",",STR(P2.z),"] | DEBUG ---- "))

      gia_steso = 1

      idx_ref = $stesi_idx_sx

      punto_ins = P1
      if( P1.y>P2.y  ) { punto_ins.y = P2.y }

      base_0 = punto_ins

      P1_0 = P1   P1_0.y = 0
      P2_0 = P2   P2_0.y = 0

      Z = DISTANZA(P1_0,P2_0)*10
      Z = FLOOR(Z+0.5)/10

      //Simone 10/12/21
      if( VAR_VAL(idx_ref,"VAR_Melaminico") == 1 )
      {
         if( VAR_VAL_STR(idx_ref,"MaterialeFrontale") == "MELAMINICO"
           | VAR_VAL_STR(idx_ref,"MaterialeFrontale") == "NOBILITATO" )
         {
            if( IS_MATCH( NOME(idx_ref), "ScoccaT_Col*") == 1 )
            {
               Z = Z - 4
            }
            else
            {
               Z = Z - 2
            }
         }
      }

      if( NOME(idx_ref)=="ScoccaT_BaseAngoloIsola" ) { Z = Z - 1.5 }

      //Luca 25/03/2019
      //verifico se devo allungare il fianco per coprire la barra isola
      if( ABS(Z-VAR_VAL(idx_ref,"Zt"))<10 )
      {
         if( VAR_VAL(idx_ref,"ConBarraIsola")==1 )
         {
            //Z = Z + 17.5
            //base_0.x = base_0.x -   SENO(ANG_TOT2(idx_ref))*17.5
            //base_0.z = base_0.z - COSENO(ANG_TOT2(idx_ref))*17.5

            //wk_magz = $Cuc_Spe_BarraIso - $Cuc_Spe_Ant - $Cuc_Aria_Ant_Z - $Cuc_Aria_Ant_X
            wk_magz = $Cuc_Spe_BarraIso

            Z = Z + wk_magz
            base_0.x = base_0.x -   SENO(ANG_TOT2(idx_ref))*wk_magz
            base_0.z = base_0.z - COSENO(ANG_TOT2(idx_ref))*wk_magz
         }
      }


      SET_#(idx_ref)
      if( P1.y>P2.y )  { Y = P1.y - P2.y }
      else             { Y = P2.y - P1.y }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " Y=",STR(Y), " | DEBUG ---- "))

      //per evitare casi tipo  368.005
      Y = Y*10
      Y = FLOOR(Y+0.5)/10


      // LP 13/04/2021: Mi devo salvare la posizione assoluta per poterla
      // verificare come offset rispetto le basi nel momento dell'aggancio
      // (procedura Notifica_FiancoFinitura)
      if( REV >= 2 )   { base0y_steso = punto_ins.y }

      //Luca 28/05/2020 aggiunto controllo per evitare casi di fianchi errati
      if( Z<1 | Y<1 )
      {
         delme = 1
         COMANDO2("Show Abilita ON")
         NO_GEST = 1
         EXIT()
      }
   }

   PROCEDURA Notifica_FiancoFinitura
   {
      idx_ref = $stesi_idx_sx

      if( IS_IDX(idx_ref) == 0) { EXITSUB() }
      SET_#(idx_ref)

      if( VAR_VAL( ATTUALE(), "delme") == 1)
      {
         COMANDO( STRCAT( "DELETE3 ", STR(idx_att), " //Notifica ", NOME(ATTUALE())))
         EXITSUB()
      }

      // Salvo dimensioni
      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Z=",STR(Z)," Y=",STR(Y) ," //Notifica ",NOME(ATTUALE())))

      // Versione dalla base se maggiore di quella del fianco
      wk_versione_ref = VAR_VAL( idx_ref, "Cucina_Versione")
      if( wk_versione_ref > Cucina_Versione)
      {
         Cucina_Versione = wk_versione_ref
         VAR_SET_MODIFICATA( idx_att, "Cucina_Versione", "")
      }

      // Aggancio alla prima base che ho selezionato
      wk_offx = 0
      wk_offy = DISTANZA(base_0,#base_0)
      //wk_offy = 0
      //DISPLAY2(STRCAT("BP ---> P1.y=" , STR(P1.y), " - " ))
      //DISPLAY2(STRCAT("BP ---> P2.y=" , STR(P2.y), " - " ))
      //DISPLAY2(STRCAT("BP ---> b0.y=" , STR(#base_0.y), " - " ))

      //Luca 25/01/2022
      if( wk_verso < 0 )
      {
         if( VAR_VAL(idx_ref,"FSN_flag_SX") == 1
           | VAR_VAL(idx_ref,"FSN_flag_SX") == 3 )
         {
            wk_offx = VAR_VAL(idx_ref,"FSN_ridx_SX")
         }
      }
      else
      {
         if( VAR_VAL(idx_ref,"FSN_flag_DX") == 1
           | VAR_VAL(idx_ref,"FSN_flag_DX") == 3 )
         {
            wk_offx = VAR_VAL(idx_ref,"FSN_ridx_DX")
         }
      }


      // 13/07/2021 - calcolo
      // wk_offy = ABS(base_0.y-#base_0.y)
      wk_offy_b0_att = base_0.y
      wk_offy_b0_ref = #base_0.y

      // LP 13/04/2021: verifico il reale offset per poter dare
      // il corretto wk_offy in fase di aggancio, e, di conseguenza
      // validare in modo corretto i NEAR_GLOBALE presenti nei controlli
      // per l'identificazioni delle basi
      if( REV >= 2 )
      {
         if( VAR_EXIST(idx_att, "FF_idx_base_ref") == 1
           & VAR_EXIST(idx_att, "base0y_steso") == 1
           )
         {
            if( IS_IDX(FF_idx_base_ref) == 1 )
            {
               wk_offy_b0_att = VAR_VAL(idx_att, "base0y_steso")
               wk_offy_b0_ref = VAR_VAL(FF_idx_base_ref, "base0y_abs")
            }
         }
      }

      wk_offy = ABS(wk_offy_b0_att - wk_offy_b0_ref)

      //if( P1.y>P2.y )  { wk_offy = ABS(P2.y-#base_0.y) }
      //else             { wk_offy = ABS(P1.y-#base_0.y) }

      wk_offz = 0
      wk_ang  = 0

      if( NOME(idx_ref)=="ScoccaT_BaseAngoloIsola" )
      {
         wk_offx = VAR_VAL(idx_ref,"Z") + X
         if( VAR_VAL(idx_ref,"Verso")>0 ) { wk_offx = -1*wk_offx }
         wk_offz = -1.5
      }

      //Luca 04/02/2020
      if( NOME(idx_ref)=="ScoccaT_BaseAngPan" )
      {
         wk_offz = -2
      }

      if( NOME(idx_ref)=="ScoccaT_BaseLvst" )
      {
         wk_offx = 0
         if( VAR_VAL(idx_ref,"FSN_flag_DX")==1 & wk_verso>0 ) { wk_offx = -4 }
         if( VAR_VAL(idx_ref,"FSN_flag_SX")==1 & wk_verso<0 ) { wk_offx = -4 }
      }

      //Simone 10/12/21
      if( VAR_VAL(idx_ref,"VAR_Melaminico") == 1 )
      {
         if( VAR_VAL_STR(idx_ref,"MaterialeFrontale") == "MELAMINICO"
           | VAR_VAL_STR(idx_ref,"MaterialeFrontale") == "NOBILITATO" )
         {
            wk_offz = - 2
            if( IS_MATCH( NOME(idx_ref), "ScoccaT_Col*") == 1 ) { wk_offz = -4 }
         }
      }

      if( wk_verso>0 )
      {
         //wk_ang = 90
         wk_ang = 0
         wk_cnt = STRCAT("CNT D - 0,B + 0,F + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," ",STR(wk_ang))
      }
      else
      {
         wk_ang = 0
         //wk_ang  = -90
         wk_cnt = STRCAT("CNT S - 0,B + 0,F + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," ",STR(wk_ang))
      }


      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_ref)," no_ridisegna no_agganciati //Notifica ",NOME(ATTUALE())))
      COMANDO2("Show Abilita ON")

      //if( VAR_EXIST(ATTUALE(),"FF_ScoccaDx") == 0 )  { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"FF_ScoccaDx") != 0
        | VAR_VAL(ATTUALE(),"FF_ScoccaSx") != 0 )  { EXITSUB() }

      FF_ScoccaDx = 0
      FF_ScoccaSx = 0

      // LP 13/04/2021 - se sono steso ma il near_globale non ha ancora trovato
      // qualcuno a sx/dx devo per forza rivalutare.
      if( FF_ScoccaSx == 0 & FF_ScoccaDx == 0 & REV >= 2 & gia_steso == 1 )
      {
         //DISPLAY2("Forzo il ricalcolo")

         // se sono fianco dx verifico il gruppo lavorazioni a sx
         if( wk_verso > 0 )   { COMANDO(STRCAT("Procedura FFAttrezzaGrpLavSx ", STR(idx_att))) }
         else                 { COMANDO(STRCAT("Procedura FFAttrezzaGrpLavDx ", STR(idx_att))) }
      }
   }

   // DA REVISIONE 2
   // [ LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza o profondita
   // (il fianco deve coprire almeno 2 basi
   // in altezza o in profondita
   // la faccia della base doppia (bifacciale) è sempre contraria
   PROCEDURA FFAttrezzaGrpLavSx
   {
      if( FF_ScoccaSx < 2 | REV < 2 ) { EXITSUB() }

      FF_PosizioneSD_Bif = "SX"

      // La scocca che "comanda" in termini di orientamento è la prima scocca selezionata "FF_ScoccaSx_##1"
      //FF_idx_base_ref = FF_ScoccaSx_##1

      SORT_POINT(base_2, "FF_ScoccaSx", "base_2")
      FF_idx_base_ref = FF_ScoccaSx_##1

      // da calcolare/dentificare in maniera apposita, per diversificare dal bifacciale/base doppia.
      FF_ScoccheInY = 0
      FF_ScoccheInZ = 0

      // ciclo le basi e costruisco gli array
      i = 1
      while( i <= FF_ScoccaSx )
      {
         idx_tmp = FF_ScoccaSx[i]

         // creo l'array degli elementi su base doppia
         // se l'angolo è opposto significa che sono sulla base doppia
         if( ANG_TOT2(FF_idx_base_ref) != ANG_TOT2(idx_tmp) )
         {
            FF_ScoccheInZ = FF_ScoccheInZ + 1
            VAR_CREATE_NUM(idx_att, STRCAT("FF_ScoccheInZ_##", STR(FF_ScoccheInZ)), idx_tmp, $MODE_NONE, "")
         }
         else
         {
            FF_ScoccheInY = FF_ScoccheInY + 1
            VAR_CREATE_NUM(idx_att, STRCAT("FF_ScoccheInY_##", STR(FF_ScoccheInY)), idx_tmp, $MODE_NONE, "")
         }

         i = i + 1
      }

      // dvo ordinare gli array PRIMA di chiamare le evntuali funzioni
      if( FF_ScoccheInY > 0 )
      {
         SORT_POINT(base_0, "FF_ScoccheInY", "base_0")
         AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInY", "Y", "SX")
      }

      if( FF_ScoccheInZ > 0 )
      {
         SORT_POINT(base_0, "FF_ScoccheInZ", "base_0")
         AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInZ", "Z", "SX")
      }
   }
   // ] LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza


   // DA REVISIONE 2
   // [ LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza o profondita
   // (il fianco deve coprire almeno 2 basi
   // in altezza o in profondita
   PROCEDURA FFAttrezzaGrpLavDx
   {
      if( FF_ScoccaDx < 2 | REV < 2 )   { EXITSUB() }

      // la faccia della base doppia (bifacciale) è sempre contraria
      FF_PosizioneSD_Bif = "DX"

      // La scocca che "comanda" in termini di orientamento è la prima scocca selezionata "FF_ScoccaSx_##1"
      SORT_POINT(base_1, "FF_ScoccaDx", "base_1")
      FF_idx_base_ref = FF_ScoccaDx_##1

      // da calcolare/dentificare in maniera apposita, per diversificare dal bifacciale/base doppia.
      FF_ScoccheInY = 0
      FF_ScoccheInZ = 0

      // ciclo le basi e costruisco gli array
      i = 1
      while( i <= FF_ScoccaDx )
      {
         idx_tmp = FF_ScoccaDx[i]

         // creo l'array degli elementi su base doppia
         // se l'angolo è opposto significa che sono sulla base doppia
         if( ANG_TOT2(FF_idx_base_ref) != ANG_TOT2(idx_tmp) )
         {
            FF_ScoccheInZ = FF_ScoccheInZ + 1
            VAR_CREATE_NUM(idx_att, STRCAT("FF_ScoccheInZ_##", STR(FF_ScoccheInZ)), idx_tmp, $MODE_NONE, "")
         }
         else
         {
            FF_ScoccheInY = FF_ScoccheInY + 1
            VAR_CREATE_NUM(idx_att, STRCAT("FF_ScoccheInY_##", STR(FF_ScoccheInY)), idx_tmp, $MODE_NONE, "")
         }

         i = i + 1
      }

      // devo ordinare gli array PRIMA di chiamare le eventuali funzioni
      if( FF_ScoccheInY > 0 )
      {
         SORT_POINT(base_0, "FF_ScoccheInY", "base_0")
         AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInY", "Y", "DX")
      }

      if( FF_ScoccheInZ > 0 )
      {
         SORT_POINT(base_0, "FF_ScoccheInZ", "base_0")
         AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInZ", "Z", "DX")
      }
   }
   // ] LP 29/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza


   //Luca 20/03/2019
   //GESTIONE BIFACCIALE DI DEFAULT SU ELEMENTI INSERITI CENTRO STANZA
   PROCEDURA AddBifaccialiDefault
   {
      //if( $OnLoadOrder==1 | $OnRigenera==1 ) { EXITSUB() }
      //if( ACTION()<=0 )  { EXITSUB() }
      //if( TipoScocca!=1 & TipoScocca!=3 ) { EXITSUB() }

      exit_addbif = 0
      if( $OnLoadOrder==1 | $OnRigenera==1 )          { exit_addbif = 1 }
      if( ACTION()<=0 )                               { exit_addbif = 2 }
      if( $CNP==1 )                                   { exit_addbif = 3 }
      //if( TipoScocca!=1 & TipoScocca!=3 )             { exit_addbif = 3 }
      if( VAR_VAL(ATTUALE(),"ConBifacciale") )        { exit_addbif = 4 }

      //Luca 25/03/2019
      if( NOME(ATTUALE())=="ScoccaT_BaseStandard"
        | NOME(ATTUALE())=="ScoccaT_BaseForno"  )
      {
         if( TipoScocca!=1 & TipoScocca!=3 )          { exit_addbif = 3 }
      }

      if( NOME(ATTUALE())=="ScoccaT_BaseLvst"
        | NOME(ATTUALE())=="ScoccaT_BaseLvstOriz" )
      {
         if( TipoScocca==2 )                          { exit_addbif = 3 }
      }

      if( NOME(ATTUALE())=="ScoccaT_BaseCantinetta" ) { exit_addbif = 3 }

      if( exit_addbif > 0 )        { EXITSUB() }

      //Luca 20/03/2019 in OnQueryBDMLocal viene settata questa variabile
      if( VAR_VAL(ATTUALE(),"ChiediAddBifaccialiDefault")==0 ) { EXITSUB() }

      ChiediAddBifaccialiDefault = 0

      if( $ChiediAddBifacciali==0 ) { EXITSUB() }

      r = DISPLAY3(MSG(1053),$MB_YESNO+$MB_ICONQUESTION)
      if( r==$MB_ID_NO ) { EXITSUB() }

      COMPONENTI2("wk_ant",ATTUALE(),"Cuc_Anta")
      COMPONENTI2("wk_ant2",ATTUALE(),"Cuc_AntaLvst")
      COMPONENTI2("wk_ces",ATTUALE(),"Cuc_Cestone")
      COMPONENTI2("wk_cas",ATTUALE(),"Cuc_Cassetto")

      wk_fro = 0
      while ( wk_ant>0 )
      {
         ne = wk_fro + 1   wk_fro = ne    wk_fro[ne] = wk_ant[wk_ant]
         wk_ant = wk_ant - 1
      }
      while ( wk_ant2>0 )
      {
         ne = wk_fro + 1   wk_fro = ne    wk_fro[ne] = wk_ant2[wk_ant2]
         wk_ant2 = wk_ant2 - 1
      }

      while ( wk_ces>0 )
      {
         ne = wk_fro + 1   wk_fro = ne    wk_fro[ne] = wk_ces[wk_ces]
         wk_ces = wk_ces - 1
      }

      while ( wk_cas>0 )
      {
         ne = wk_fro + 1   wk_fro = ne    wk_fro[ne] = wk_cas[wk_cas]
         wk_cas = wk_cas - 1
      }

      if( wk_fro==0 ) { EXITSUB() }

      SORT_POINT(base_1,"wk_fro","base_1")

      wk_offy = Cuc_Alt_Zoc

      idx_base = ATTUALE()

      //COMANDO("PUSH_SITUAZIONE")
      COMANDO("SHOW ABILITA OFF")

      i = 0
      nome_cmp = "Cuc_AntaBifacciale"
      while ( inc(i) <= wk_fro)
      {
         wk_x = VAR_VAL(wk_fro[i],"X") + 2*$Cuc_Aria_Ant_X
         wk_y = VAR_VAL(wk_fro[i],"Y") + 2*$Cuc_Aria_Ant_Y

         //Luca 25/03/2019 per anta lavastoviglie verifico presenza zoccolo
         if( NOME(idx_att) == "ScoccaT_BaseLvst" & wk_fro == 1)
         {
            COMPONENTI2( "wk_zoc", idx_att, "Cuc_ZoccoloLvst")
            if( wk_zoc > 0)
            {
               wk_y = VAR_VAL(wk_fro[i],"Y") + VAR_VAL(wk_zoc[i],"Y") + 2*$Cuc_Aria_Ant_Y + 5
            }
         }

         COMANDO( FMT( "SETTA {}", STR(idx_base)))
         COMANDO( FMT( "ELEMENTO {}", nome_cmp))
         COMANDO( "STRUTTURA")
         COMANDO( FMT( "VAR_FIX X={} Y={}", wk_x, wk_y))
         COMANDO( "VAR_SET NO_AUTO=1")
         COMANDO( FMT( "VAR_SET idx_ref={} BIF__ADDAUTO={}", STR(idx_att), STR(idx_att)))
         if( VAR_VAL( idx_att, "Cucina_Versione") > 2)
         {
            COMANDO( FMT( "VAR_FIX Cucina_Versione={}", STR(Cucina_Versione)))
            COMANDO( FMT( "VAR_SET Cucina_Modello={}", Cucina_Modello))
         }
         COMANDO( FMT( "Connessione D - 0,B + 0,R + 0, 0 {} 0 180", STR(wk_offy)))
         COMANDO("AGGANCIA")

         wk_offy = wk_offy + wk_y
      }

      COMANDO( "SHOW ABILITA ON")
      COMANDO( "SHOW ALL")

      COMANDO( FMT( "RICALCOLA_UNA {} no_ridisegna no_agganciati //AddBifaccialiDefault", STR(idx_att)))
   }

   PROCEDURA PGDV_RicalcolaAngolo
   {
      if( $OnLoadOrder==1 | $OnRigenera==1 )   { EXITSUB() }
      if( ACTION()<=0 )                        { EXITSUB() }
      if( $CNP==1 )                            { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_sx")==0 )   { EXITSUB() }

      if( IS_IDX(idx_sx) )
      {
         if( NOME(idx_sx)=="ScoccaT_BaseAngPan"
           | NOME(idx_sx)=="ScoccaT_ColAngPan"  ) { COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_sx), " no_agganciati //PGDV_RicalcolaAngolo")) }
      }

      if( IS_IDX(idx_dx) )
      {
         if( NOME(idx_dx)=="ScoccaT_BaseAngPan"
           | NOME(idx_dx)=="ScoccaT_ColAngPan"  ) { COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_dx), " no_agganciati //PGDV_RicalcolaAngolo")) }
      }
   }

   PROCEDURA RuotaAngoloIsola
   {
      //nascondere variabile se non elemento non agganciato
      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( IS_IDX(idx_agg) )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_RUOTA",0)
      }
      else
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_RUOTA",1)
         EXITSUB()
      }

      if( VAR_RUOTA==0 )  { EXITSUB() }

      DEL_VAR_MODIFICATE(ATTUALE(),"VAR_RUOTA")
      VAR_RUOTA = 0

      Verso_prec = Verso
      Verso =  -1*Verso_prec

      EXITSUB()
      if( IS_IDX(idx_agg)==0 ) { EXITSUB() }

      cnt_attuale = CNT_STR(ATTUALE())

      //sinistro - destro
      wk_sd = GetParamStrCnt(cnt_attuale,"SD")
      //alto-basso
      wk_ab = GetParamStrCnt(cnt_attuale,"AB")
      //fronte-retro
      wk_fr = GetParamStrCnt(cnt_attuale,"FR")

      wk_ox  = ATOI(GetParamStrCnt(cnt_attuale,"OX"))
      wk_oy  = ATOI(GetParamStrCnt(cnt_attuale,"OY"))
      wk_oz  = ATOI(GetParamStrCnt(cnt_attuale,"OZ"))
      wk_ang = ATOI(GetParamStrCnt(cnt_attuale,"ANG"))

      wk_str = CostruisciStrCnt(wk_sd,wk_ab,wk_fr,wk_ox,wk_oy,wk_oz,wk_ang)

      if( wk_sd=="S" )
      {
         wk_offx = 0
         wk_offz = 0
         wk_ang  = 0

         //se ha lo stesso angolo
         if( ABS(ANG_TOT2(ATTUALE())-ANG_TOT2(idx_agg))<0.1 )
         {
            wk_offx = -1*(Z)
            wk_offz = -32
            wk_ang  = 90
         }

         wk_str_new = CostruisciStrCnt(wk_sd,wk_ab,wk_fr,wk_offx,0,wk_offz,wk_ang)
      }

      if( wk_sd=="D" )
      {
         wk_offx = 0
         wk_offz = 0
         wk_ang  = 0

         //se ha lo stesso angolo
         if( ABS(ANG_TOT2(ATTUALE())-ANG_TOT2(idx_agg))<0.1 )
         {
            wk_offx = Z
            wk_offz = -32
            wk_ang  = -90
         }
         wk_str_new = CostruisciStrCnt(wk_sd,wk_ab,wk_fr,wk_offx,0,wk_offz,wk_ang)
      }

      if( wk_str_new==wk_str ) { EXITSUB() }

      COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_str_new))

      AGGANCIATI("wk_str_agg","*",ATTUALE())

      if( wk_str_agg==0 ) { EXITSUB() }

      idx_agg = wk_str_agg[1]

      //verifico se ho altri elementi agganciati
      //esco altrimenti dovrei ricalcolare tutta la catena
      AGGANCIATI("wk_agg_catena","*",idx_agg)
      if( wk_agg_catena>0 )  { EXITSUB() }

      cnt_attuale = CNT_STR(idx_agg)

      //sinistro - destro
      wk_sd = GetParamStrCnt(cnt_attuale,"SD")
      //alto-basso
      wk_ab = GetParamStrCnt(cnt_attuale,"AB")
      //fronte-retro
      wk_fr = GetParamStrCnt(cnt_attuale,"FR")

      wk_offset = GetParamStrCnt(cnt_attuale,"OFFSET")

      wk_str = CostruisciStrCnt2(wk_sd,wk_ab,wk_fr,wk_offset)

      wk_offx = 0
      wk_offz = 0
      wk_ang  = 0

      if( wk_sd=="S" )
      {
         wk_str_new = CostruisciStrCnt("D",wk_ab,wk_fr,wk_offx,0,wk_offz,wk_ang)
      }

      if( wk_sd=="D" )
      {
         wk_str_new = CostruisciStrCnt("S",wk_ab,wk_fr,wk_offx,0,wk_offz,wk_ang)
      }

      if( wk_str_new==wk_str ) { EXITSUB() }

      COMANDO(STRCAT("SETTA ",STR(idx_agg)))
      COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_str_new))
      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
   }

   //Luca 25/03/2019
   PROCEDURA Ctrl_FiancoAppoggioSuTop
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " Ctrl_FiancoAppoggioSuTop: | DEBUG ---- "))

      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( IS_IDX(idx_agg)==0 ) { EXITSUB() }

      wk_top_col = 0

      wk_top_col_a = 0
      wk_top_col_b = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_top_col_a",ATTUALE(),1,"Top")
      NEAR_GLOBALE2("wk_top_col_b",ATTUALE(),100,"SottopTop")

      if( wk_top_col_a==0 )
      {
         NEAR_GLOBALE2("wk_top_col_a",ATTUALE(),1,"Top_2P0")
         NEAR_GLOBALE2("wk_top_col_b",ATTUALE(),100,"SottoTop_2P0")
      }

      i = 1
      while ( i<=wk_top_col_a )
      {
         ne = wk_top_col + 1     wk_top_col = ne   wk_top_col[ne] = wk_top_col_a[i]
         i = i + 1
      }
      i = 1
      while ( i<=wk_top_col_b )
      {
         ne = wk_top_col + 1     wk_top_col = ne   wk_top_col[ne] = wk_top_col_b[i]
         i = i + 1
      }

      if( wk_top_col==0 ) {  EXITSUB() }

      //if( wk_top_col==0 )
      //{
      //   NEAR_GLOBALE2("wk_top_col",ATTUALE(),100,"SottopTop")
      //
      //   if( wk_top_col==0 ) {  EXITSUB() }
      //}

      wk_alza_fianco = 0
      wk_offy        = 0
      wk_trovato_top = -1

      //se ho trovato dei top, filtro con solo quelli che collidono nella parte inferiore
      //i = 1
      //while ( i<=wk_top_col )
      //{
      //   SET_#(wk_top_col[i])
      //   if( NOME(wk_top_col[i])=="Top" )
      //   {
      //      wk_offy = #alto_0.y - base_0.y
      //      if( wk_offy > 0 & wk_offy < 20 ) { wk_alza_fianco = 1 }
      //   }
      //   i = i + 1
      //}

      i = 1
      while ( i<=wk_top_col )
      {
         SET_#(wk_top_col[i])
         if( NOME(wk_top_col[i])=="Top"
           | NOME(wk_top_col[i])=="Top_2P0"  )
         {
            wk_offy = #alto_0.y - base_0.y
            //Luca 28/07/2020 023121: Fianchi di finitura: mancata riduzione con top cliente
            //if( wk_offy > 0 & wk_offy < 20 ) { wk_trovato_top = wk_top_col[i] }
            if( wk_offy > 0 & wk_offy <= 50 ) { wk_trovato_top = wk_top_col[i] }

            //Luca 03/04/2019 idenifico fianco in appoggio
            if( ABS(wk_offy)<0.1  ) { FiancoColAppTop = 1 }

         }

         if( NOME(wk_top_col[i])=="SottopTop"
           | NOME(wk_top_col[i])=="SottoTop_2P0"  )
         {
            if( VAR_VAL(wk_top_col[i],"SottoTopTraBasi")==0 )
            {
               wk_offy = #alto_0.y - base_0.y + VAR_VAL(wk_top_col[i],"SpessoreTopCliente")
               if( wk_offy > 0 & wk_offy < 101 ) { wk_trovato_top = wk_top_col[i] }
               //Luca 03/04/2019 idenifico fianco in appoggio
               if( ABS(wk_offy)<0.1  ) { FiancoColAppTop = 1 }
            }

         }
         i = i + 1
      }

      if( IS_IDX(wk_trovato_top)==1 )
      {
         SET_#(wk_trovato_top)
         wk_offy = #alto_0.y - base_0.y
         //Luca 28/07/2020 023121: Fianchi di finitura: mancata riduzione con top cliente
         //if( wk_offy > 0 & wk_offy < 20 ) { wk_alza_fianco = 1 }
         if( wk_offy > 0 & wk_offy <= 50 ) { wk_alza_fianco = 1 }


         if( NOME(wk_trovato_top)=="SottopTop"
           | NOME(wk_trovato_top)=="SottoTop_2P0"  )
         {
            wk_offy = wk_offy + VAR_VAL(wk_trovato_top,"SpessoreTopCliente")
            if( wk_offy > 0 & wk_offy < 101 ) { wk_alza_fianco = 1 }
         }

         //Luca 25/07/2019
         //blocco il ridimensionamento del fianco in caso sia più profondo del top
         wk_z_test_top = VAR_VAL(wk_trovato_top,"Zt")
         if( NOME(wk_trovato_top)=="SottopTop"
           | NOME(wk_trovato_top)=="SottoTop_2P0" )
         {
            wk_z_test_top = VAR_VAL(wk_trovato_top,"Z")
            //sottotop aumento di 25 perchè arriva filo fianco
            wk_z_test_top = wk_z_test_top + 25
         }
         //tengo un delta di 10mm
         wk_z_test_top = wk_z_test_top + 10

         if( Z>wk_z_test_top ) { wk_alza_fianco = 0 }
      }

      if( wk_alza_fianco==0 | wk_offy==0 ) { EXITSUB() }

      //se agganciato
      new_y = Y - wk_offy

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " Ctrl_FiancoAppoggioSuTop Y:",STR(Y), " wk_offy:",STR(wk_offy), " new_y=" , STR(new_y), " | DEBUG ---- "))

      wk_cnt = CNT_STR(ATTUALE())
      wk_SD  = GetParamStrCnt(wk_cnt,"SD")
      wk_AB  = GetParamStrCnt(wk_cnt,"AB")
      wk_FR  = GetParamStrCnt(wk_cnt,"FR")
      wk_OX  = ATOI(GetParamStrCnt(wk_cnt,"OX"))
      wk_OY  = ATOI(GetParamStrCnt(wk_cnt,"OY"))
      wk_OZ  = ATOI(GetParamStrCnt(wk_cnt,"OZ"))

      wk_cnt_new = CostruisciStrCnt(wk_SD,wk_AB,wk_FR,wk_OX, wk_offy + wk_OY ,wk_OZ,0)

      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(new_y), " //Ctrl_FiancoAppoggioSuTop" ))
      COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_cnt_new , " //Ctrl_FiancoAppoggioSuTop" ))
   }

   PROCEDURA Ctrl_FroFixAppoggioSuTop
   {
      if( ACTION()<=0 | ACTION()==2  ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear")==0 ) { EXITSUB() }
      if( IS_IDX(idx_cnear)==0 )                { EXITSUB() }

      ConTopAccosto = 0
      SpeTopAccosto = 0

      wk_top_col_a = 0
      wk_top_col_b = 0

      BOX_MODE(0)
      NEAR_GLOBALE("wk_top_col_a",idx_cnear,1,1,"Top")
      NEAR_GLOBALE("wk_top_col_b",idx_cnear,100,1,"SottopTop")

      if( wk_top_col_a==0 )
      {
         NEAR_GLOBALE("wk_top_col_a",idx_cnear,20,1,"Top_2P0")
         NEAR_GLOBALE("wk_top_col_b",idx_cnear,20,1,"SottoTop_2P0")
      }

      wk_top_col = 0

      i = 1
      while ( i<=wk_top_col_a )
      {
         ne = wk_top_col + 1     wk_top_col = ne   wk_top_col[ne] = wk_top_col_a[i]
         i = i + 1
      }
      i = 1
      while ( i<=wk_top_col_b )
      {
         ne = wk_top_col + 1     wk_top_col = ne   wk_top_col[ne] = wk_top_col_b[i]
         i = i + 1
      }

      if( wk_top_col==0 ) {  EXITSUB() }

      wk_alza_fianco = 0
      wk_offy        = 0
      wk_trovato_top = -1

      i = 1
      while ( i<=wk_top_col )
      {
         SET_#(wk_top_col[i])
         if( NOME(wk_top_col[i])=="Top_2P0" )
         {
            wk_offy = #alto_0.y - base_0.y
            //if( wk_offy > 0 & wk_offy < 20 ) { wk_trovato_top = wk_top_col[i] }
            if( wk_offy > -5 & wk_offy < 30 ) { wk_trovato_top = wk_top_col[i] }
            //if( ABS(wk_offy)<0.1  ) { ConTopAccosto = 1 }

         }

         if( NOME(wk_top_col[i])=="SottopTop" )
         {
            wk_offy = #alto_0.y - base_0.y + VAR_VAL(wk_top_col[i],"SpessoreTopCliente")
            if( wk_offy > 0 & wk_offy < 101 ) { wk_trovato_top = wk_top_col[i] }
            //if( ABS(wk_offy)<0.1  ) { ConTopAccosto = 1 }

         }
         i = i + 1
      }

      if( IS_IDX(wk_trovato_top)==1 )
      {
         ConTopAccosto = 1

         //Luca 29/10/2020 riporto modifiche di LAGO
         //LZ - Non devo considerare l'aria, verà gestita successivamente con Yr
         //SpeTopAccosto = VAR_VAL(wk_trovato_top,"SpessorePiano") + 1.5
         SpeTopAccosto = VAR_VAL(wk_trovato_top,"SpessorePiano")
      }
   }

   //Luca 25/07/2019
   //verifico la presenza del cassetto interno
   PROCEDURA Ctrl_CheckCassettoInterno
   {
      if( ACTION()<=0 & ACTION()==2 & $OnLoadOrder==1 ) { EXITSUB() }

      BOX_MODE(0)
      NEAR_GLOBALE("casint",idx_cnear_str,2,1,"Cuc_CassettoInterno")
      ConCassettoInterno = 0
      if( casint>0 ) { ConCassettoInterno = 1 }
   }

   //Luca 28/03/2019
   PROCEDURA SostituisciCassettoCestone
   {
      if( VAR_VAL(ATTUALE(),"escluso") == 10
        | VAR_VAL(ATTUALE(),"escluso") == 99 ) { EXITSUB() }

      if( ACTION()==0 )
      {
         if( UN_PADRE("ScoccaT_Col*")==1 ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_Sost",1) }
      }

      if( VAR_Sost==0 )  { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"VAR_Sost_no_confirm")==0 )
      {
         wk_msg = STRCAT(MSG(1090),"\n",MSG(1054),"\n",MSG(158))
         r = DISPLAY3(MSG(1054),$MB_YESNO+$MB_ICONQUESTION)
         if( r==$MB_ID_NO )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Sost")
            VAR_Sost = 0
            EXITSUB()
         }
      }

      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))

      idx_delme = ATTUALE()
      idx_bas   = PADRE(ATTUALE(),1)

      wk_liv2add = base_0.y - VAR_VAL(idx_bas,STRCAT("vano_",STR(vano_n),"_0.y")) - $Cuc_Aria_Ant_Y
      wk_alt2add = Y + 2*$Cuc_Aria_Ant_Y

      wk_nome_cmp = "Cuc_FrontaleFisso"

      COMANDO("PUSH_SITUAZIONE")
      COMANDO(STRCAT("SETTA ", STR(idx_bas)))
      COMANDO(STRCAT("ELEMENTO_V ", wk_nome_cmp))
      COMANDO("STRUTTURA_V")
      COMANDO(STRCAT("VAR_SET flag_CAMBIA_VAR=1"))
      COMANDO(STRCAT("VAR_SET NO_AUTO=1"))
      COMANDO(STRCAT("VESTI_Y ",STR(wk_liv2add) , " ", STR(wk_alt2add)))

      COMANDO(STRCAT("DELETE ", STR(idx_delme)))

      COMANDO("POP_SITUAZIONE")

      COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_bas) , " no_agganciati //SostituisciCassettoCestone" ))
      COMANDO(STRCAT("SETTA ", STR(idx_bas)))
      //Elemento_V Cuc_FrontaleFisso
      //Struttura_V

      //Luca 01/03/2021
      //mantis 24471: Base cucina con frontale fisso
      VAR_Sost = 0
   }

   //Luca 12/04/2019
   //assegno i passacavi sulle basi cucina
   PROCEDURA Ctrl_PassacaviBasiCucina
   {
      #ifdef AGE;RIV
         EXITSUB()
      #endif

      $wk_bas = 0

      STRUTTURE("$wk_bas_tmp")
      $wk_basN = 0
      while( inc($wk_basN) <= $wk_bas_tmp)
      {
         $wk_basI = $wk_bas_tmp[$wk_basN]

         if( IS_MATCH( NOME($wk_basI), "ScoccaT_Bas*")
           & VAR_EXIST( $wk_basI, "VAR_PassaC_FiaSx"))
         {
            AddItem2Array( -1, "wk_bas", $wk_basI, "")
         }
      }

      if( $wk_bas <= 0) { EXITSUB() }


      //reset variabili
      ////ricalcolo le basi per aggiornare idx_sx e idx_dx
      $wk_basN = 0
      while( inc($wk_basN) <= $wk_bas)
      {
         $wk_basI = $wk_bas[$wk_basN]

         if( IS_VAR_FIXED( $wk_basI, "VAR_PassaC_FiaSx") == 0) { VAR_VALUE_SET( $wk_basI, "VAR_PassaC_FiaSx", 0) }
         if( IS_VAR_FIXED( $wk_basI, "VAR_PassaC_FiaDx") == 0) { VAR_VALUE_SET( $wk_basI, "VAR_PassaC_FiaDx", 0) }
      }

      // [1] - CREAZIONE ARRAY COMPOSIZIONI
      //creo una serie di array con le varie composizioni di basi
      //gli array sarano $wk_comp_1
      $wk_compN = 0
      $wk_basN  = 0
      while( inc($wk_basN) <= $wk_bas)
      {
         $wk_basI = $wk_bas[$wk_basN]
         SET_#($wk_basI)

         $wk_basPrima = 0
         if( IS_IDX(#idx_sx) == 0)                             { $wk_basPrima = 1 }
         else
         {
            if( IS_MATCH( NOME(#idx_sx), "ScoccaT_Col*") == 1) { $wk_basPrima = 1 }
         }

         if( $wk_basPrima == 0)                                { continue }

         $wk_nome_array_comp = FMT( "wk_comp_{}", STR( inc($wk_compN)))
         VAR_CREATE_NUM( -1, $wk_nome_array_comp, 0, $MODE_NOSAVE, "")

         $wk_basAtt = $wk_basI
         while( IS_IDX($wk_basAtt))
         {
            AddItem2Array( -1, $wk_nome_array_comp, $wk_basAtt, "")

            if( IsIdx( $wk_basAtt, "idx_dx") != 1)                         { break }

            SET_#($wk_basAtt)
            $wk_basSucc = #idx_dx

            // Elemento successivo non valido
            if( IS_MATCH( NOME(#idx_dx), "ScoccaT_Col*"))                  { break }

            // Elemento successivo disallineato
            if( VAR_VAL( $wk_basSucc, "Z") < VAR_VAL( $wk_basAtt, "Z"))
            {
               if( BasiDisallineateRetro( $wk_basAtt, $wk_basSucc, 1) > 0) { break }
            }

            $wk_basAtt = $wk_basSucc

            // Elemento successivo già parte della composizione
            // NOTA: può accadere per esempio per basi contrapposte
            if( GetItemPos( -1, $wk_nome_array_comp, $wk_basSucc, "") > 0) { break }
         }
      }

      // [2] - Ciclo tutte le composizioni presenti
      // [2.1] - trovo la base che comanda (più piccola in altezza)
      $wk_i = 0
      while( inc($wk_i) <= $wk_compN)
      {
         $wk_nome_array_comp = FMT( "wk_comp_{}", STR($wk_i))
         ArrayCopy( -1, $wk_nome_array_comp, "wk_cmp_att")

         $wk_str_min = -1
         $wk_j = 1
         while ( $wk_j<=$wk_cmp_att )
         {
            if( IS_IDX($wk_str_min)==0 ) { $wk_str_min = $wk_cmp_att[$wk_j] }
            else
            {
               if( VAR_VAL($wk_cmp_att[$wk_j],"Y")<VAR_VAL($wk_str_min,"Y") ) { $wk_str_min = $wk_cmp_att[$wk_j] }
            }
            $wk_j = $wk_j + 1
         }

         $wk_pcv_fia_sx = 0
         $wk_pcv_fia_dx = 0

         //identifico tipologia di passacavi
         //se <=184 passacavi tondo
         $wk_pc_tipo = 2
         if( VAR_VAL($wk_str_min,"Y")<=184 ) { $wk_pc_tipo = 1 }

         //default posizione passacavi relativa alla base
         $wk_pc_offy = 130
         $wk_pc_offz = 35
         if( $wk_pc_tipo==1 )
         {
            $wk_pc_offy = 52
            $wk_pc_offz = 37
         }

         //base_0y base più bassa
         $wk_b0y = VAR_VAL($wk_str_min,"base_0.y")  + VAR_VAL($wk_str_min,"Cuc_Alt_Zoc")

         //Luca 02/10/2019 offset KEKU
         if( VAR_VAL($wk_str_min,"ConBifacciale_1")==1 )
         {
            if( $wk_pc_tipo==1 & VAR_VAL($wk_str_min,"ConBifacciale")==1 ) { $wk_pc_offz = 37 + 35 }
            if( $wk_pc_tipo==2 )  { $wk_pc_offy = $wk_pc_offy + 52 }
         }

         //ciclo le base, attivo il passacavi dove serve
         $wk_j = 1
         //while ( $wk_j<=$wk_cmp_att)
         while ( $wk_j<=$wk_cmp_att & $wk_cmp_att>1 )
         {
            $wk_idx_att = $wk_cmp_att[$wk_j]
            SET_#($wk_idx_att)

            $wk_pc_offz_calc = $wk_pc_offz

            //calcolo offy
            $wk_pc_offy_calc =  $wk_b0y - (#base_0.y + #Cuc_Alt_Zoc) + $wk_pc_offy

            $wk_attiva_pc = 0

            //se prima base non testo a sx
            if( IsIdx( $wk_idx_att, "idx_sx") & $wk_j!=1 )
            {
               if( IS_VAR_FIXED($wk_idx_att,"VAR_PassaC_FiaSx")==0 )
               {
                  //se già valorizzato, aggiorno solo se maggiora
                  if( VAR_VAL($wk_idx_att,"VAR_PassaC_FiaSx")>0 )
                  {
                     if( $wk_pc_offy_calc>VAR_VAL($wk_idx_att,"VAR_PassaC_OffY") )
                     {
                        $wk_attiva_pc = 1
                        VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_FiaSx",$wk_pc_tipo)
                        $wk_pcv_fia_sx = 1
                     }
                  }
                  else
                  {
                     $wk_attiva_pc = 1
                     VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_FiaSx",$wk_pc_tipo)
                     $wk_pcv_fia_sx = 1
                  }
               }
            }
            //se ultima base non testo a dx
            //if( IS_IDX(#idx_dx) )

            if( IsIdx( $wk_idx_att, "idx_dx") & $wk_j!=$wk_cmp_att )
            {
               if( IS_VAR_FIXED($wk_idx_att,"VAR_PassaC_FiaDx")==0 )
               {
                  //se già valorizzato, aggiorno solo se maggiora
                  if( VAR_VAL($wk_idx_att,"VAR_PassaC_Fiadx")>0 )
                  {
                     if( $wk_pc_offy_calc>VAR_VAL($wk_idx_att,"VAR_PassaC_OffY") )
                     {
                        $wk_attiva_pc = 1
                        VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_FiaDx",$wk_pc_tipo)
                        $wk_pcv_fia_dx = 1
                     }
                  }
                  else
                  {
                     $wk_attiva_pc = 1
                     VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_FiaDx",$wk_pc_tipo)
                     $wk_pcv_fia_dx = 1
                  }
               }
            }
            if( $wk_pc_offy_calc < 0  )
            {
               //$wk_attiva_pc = 0

               //Luca 28/04/2022 imposto al minimo
               $wk_pc_offy_calc = 130
               if( $wk_pc_tipo==1 ) { $wk_pc_offy_calc = 52 }
            }

            if( $wk_attiva_pc )
            {
               VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_OffY",$wk_pc_offy_calc)
               VAR_VALUE_SET($wk_idx_att,"VAR_PassaC_OffZ",$wk_pc_offz_calc)

               //RIGENERA_IDX($wk_idx_att)
               COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_att), " no_agganciati //Ctrl_PassacaviBasiCucina"))
            }
            $wk_j = $wk_j + 1
         }
         $wk_i = $wk_i + 1
      }
   }

   //Luca 13/05/2019
   //i ripiani devono dividere il vano in modo uguale
   PROCEDURA CtrlPosizioneRipiani
   {
      if( ACTION() <= 0 | ACTION() == 1064)                           { EXITSUB() }

      debug = 0
      if( debug==1 ) { COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " ACTION():",STR(ACTION()), " $OnLoadOrder:",STR($OnLoadOrder)," | DEBUG ---- CtrlPosizioneRipiani IN ")) }

      if( ACTION() == 2 & $OnLoadOrder == 1)                          { EXITSUB() }
      if( Cucina_Versione > 2) { GOSUB Cucina_2_5_Riposizionabili_Ctrl  EXITSUB() }

      //riposiziono i ripiani prensenti nelle seguenti situazioni:
      // - ACTION2 (inserimento)
      // - cambio tipologia di ripiano
      // - riduzione                 ( chiedo se vogliono riposizionare i ripiani )
      // - inserimento nuovo ripiano ( chiedo se vogliono riposizionare i ripiani )

      // non riposiziono mai quando:
      // - c'è almeno un ripiano spostato a mano ( base_0_offset.y > 0 )
      // - almeno un ripiano è stato eliminato

      if( VAR_VAL(ATTUALE(),"CRC_Blocco") == 1 ) { EXITSUB() }

      CRC_update = 0
      CRC_nrip   = 0

      //aggiorno subito il numero di ripiani
      if( $OnLoadOrder==1 )
      {
         GOSUB CRC_GetArrayRipiani
         CRC_nrip_prec  = CRC_nrip

         //per gestire gli ordini vecchi, lancio sempre un update se non trovo CRC_Blocco
         if( VAR_EXIST(ATTUALE(),"CRC_Blocco")==0  ) { CRC_update = 1 }

         if( CRC_update==0 ) { EXITSUB() }
      }

      CRC_Blocco = 0
      VAR_SET_MODE(ATTUALE(),"CRC_Blocco",$MODE_SAVEALWAYS)

      CRC_TipoRipiano = VAR_VAL(ATTUALE(),"TipoRipiano")
      if( VAR_EXIST(ATTUALE(),"TipoRipiano")==0 ) { CRC_TipoRipiano = 1 }

      CRC_AltezzaCol  = VAR_VAL(ATTUALE(),"Y")

      if( VAR_EXIST(ATTUALE(),"CRC_TipoRipiano_prec")==0 ) { CRC_TipoRipiano_prec = CRC_TipoRipiano }
      if( VAR_EXIST(ATTUALE(),"CRC_AltezzaCol_prec")==0 )  { CRC_AltezzaCol_prec  = CRC_AltezzaCol }
      if( VAR_EXIST(ATTUALE(),"CRC_nrip_prec")==0 )        { CRC_nrip_prec        = CRC_nrip }

      if( NOME(ATTUALE())=="ScoccaT_ColForno"
        | NOME(ATTUALE())=="ScoccaT_Col2Forno"
        | NOME(ATTUALE())=="ScoccaT_ColLvstForno"
        | NOME(ATTUALE())=="ScoccaT_ColLvst2Forno" )
      {
         CRC_YVanoRip = YVanoRip
         if( VAR_EXIST(ATTUALE(),"CRC_YVanoRip_prec")==0 ) { CRC_YVanoRip_prec = CRC_YVanoRip }
      }

      //in inserimento di colonna, aggiorno sempre la posizione dei ripiani
      if( ACTION()==2 )
      {
         GOSUB CRC_GetArrayRipiani
         if( CRC_nrip>0 ) { CRC_update = 1 }
      }

      if( ACTION()>0 & ACTION()!=2 )
      {
         GOSUB CRC_GetArrayRipiani
         if( CRC_nrip>0 )
         {
            //cambio tipologia di ripiano
            if( CRC_TipoRipiano != CRC_TipoRipiano_prec ) { CRC_update = 1 }

            //per le colonne eldom anche al cambio del vano ripiani
            if( VAR_EXIST(ATTUALE(),"CRC_YVanoRip_prec")==1 )
            {
               if( CRC_YVanoRip != CRC_YVanoRip_prec ) { CRC_update = 1 }

               //Luca 03/06/2019
               if( CRC_nrip_prec==0 & CRC_nrip>0 ) { CRC_nrip_prec = CRC_nrip }
            }

            //è cambiato il numero di ripiani
            if( CRC_nrip!=CRC_nrip_prec  )                { CRC_update = 2 }

            //è cambiata l'altezza della colonna
            if( CRC_AltezzaCol!=CRC_AltezzaCol_prec  )    { CRC_update = 2 }

            if( debug==1 )
            {
               COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " CRC_TipoRipiano:",STR(CRC_TipoRipiano),  " CRC_TipoRipiano_prec:",STR(CRC_TipoRipiano_prec), " | DEBUG ---- "))
               COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " CRC_nrip:",STR(CRC_nrip),  " CRC_nrip_prec:",STR(CRC_nrip_prec), " | DEBUG ---- "))
               COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " CRC_AltezzaCol:",STR(CRC_AltezzaCol),  " CRC_AltezzaCol_prec:",STR(CRC_AltezzaCol_prec), " | DEBUG ---- "))
               if( VAR_EXIST(ATTUALE(),"CRC_YVanoRip")==1 )
               {
                  COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " CRC_YVanoRip=",STR(CRC_YVanoRip), " CRC_YVanoRip_prec=",STR(CRC_YVanoRip_prec)," | DEBUG ---- "))
               }
               COMANDO2(STRCAT("LOGMSG CtrlPosizioneRipiani ATTUALE: ",STR(ATTUALE()), " CRC_update:",STR(CRC_update)," | DEBUG ---- "))
            }

            i = 1
            while ( i<=CRC_nrip )
            {
               if( VAR_VAL(CRC_nrip[i],"base_0_offset.y")>0 ) { CRC_Blocco = 1 }

               if( VAR_VAL(CRC_nrip[i],"escluso")==10 )       { CRC_Blocco = 2 }

               i = i + 1
            }

            if( CRC_Blocco==1 ) { CRC_update = 0 }
         }
      }

      if( CRC_update==2 )
      {
         if( $CNP==1 | $PLIKO==1 ) { CRC_update = 0 }
      }

      //cambio altezza colonna - aggiunto nuovo ripiano
      if( CRC_update==2 )
      {
         HI(ATTUALE(),1)
         r = DISPLAY3(MSG(1055),$MB_YESNO+$MB_ICONQUESTION)
         HI(ATTUALE(),0)

         if( r==$MB_ID_NO )
         {
            CRC_Blocco = 1
            CRC_update = 0
         }
         else
         {
            CRC_Blocco = 0
            CRC_update = 1
         }
      }

      if( CRC_update==1 )
      {
         //DISPLAY2("--> CRC_update <--")
         SORT_POINT(base_0,"CRC_nrip","base_0")

         //altezza totale vano ripiani
         wk_alt_vano_tot = Y_Scocca - $Cuc_Spe_Cop - $Cuc_Spe_Fnd

         if( NOME(ATTUALE())=="ScoccaT_ColLvst" )      { wk_alt_vano_tot = YVanoSuperiore }
         if( NOME(ATTUALE())=="ScoccaT_ColForno"
           | NOME(ATTUALE())=="ScoccaT_Col2Forno"
           | NOME(ATTUALE())=="ScoccaT_ColFrigo"
           | NOME(ATTUALE())=="ScoccaT_ColLvstForno"
           | NOME(ATTUALE())=="ScoccaT_ColLvst2Forno"  ) { wk_alt_vano_tot = YVanoRip }

         wk_base_mista = 0
         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Base*")==1 )
         {
            //wk_alt_vano_tot = Y - 2*$Cuc_Aria_Ant_Y
            wk_alt_vano_tot = Y_Scocca - $Cuc_Spe_Fnd

            COMPONENTI2("wk_ant",ATTUALE(),"Cuc_Anta")
            COMPONENTI2("wk_ces",ATTUALE(),"Cuc_Cestone")
            COMPONENTI2("wk_cas",ATTUALE(),"Cuc_Cassetto")

            if( wk_ant>0 & wk_ces>0 ) { wk_base_mista = 1 }
            if( wk_ant>0 & wk_cas>0 ) { wk_base_mista = 1 }

            if( wk_base_mista ) { wk_alt_vano_tot = VAR_VAL(wk_ant[1],"Y") }
         }

         wk_spe_rip      = SE_NUM(CRC_TipoRipiano==1,$Cuc_Spe_RipV,$Cuc_Spe_Rip)
         //calcolo altezza vano singolo
         wk_alt_vano_sin = (wk_alt_vano_tot - CRC_nrip*wk_spe_rip)/(CRC_nrip+1)

         //offy da aggiungere per calcolare il vano corretto
         wk_offy_vano0   = $Cuc_Spe_Fnd
         if( NOME(ATTUALE())=="ScoccaT_ColLvst"
           | NOME(ATTUALE())=="ScoccaT_ColFrigo"
           | NOME(ATTUALE())=="ScoccaT_ColLvstForno"
           | NOME(ATTUALE())=="ScoccaT_ColLvst2Forno"  ) { wk_offy_vano0 = 0 }

         if( NOME(ATTUALE())=="ScoccaT_Col2Forno"
           | NOME(ATTUALE())=="ScoccaT_ColForno")  { wk_offy_vano0 = PosYRip2 + $Cuc_Spe_Div  }

         //Luca 10/06/2019
         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Base*")==1 )
         {
            //wk_offy_vano0 = $Cuc_Aria_Ant_Y
            wk_offy_vano0 = $Cuc_Spe_Fnd

            if( wk_base_mista ) { wk_offy_vano0 = $Cuc_Aria_Ant_Y  }
         }

         i = 1
         while ( i<= CRC_nrip )
         {
            wk_idx_rip = CRC_nrip[i]
            wk_new_liv = wk_offy_vano0 + wk_alt_vano_sin*i + wk_spe_rip*(i-1) + wk_spe_rip/2

            COMANDO(STRCAT("CHANGE_LEV ",STR(wk_idx_rip), " ", STR(wk_new_liv) , " //CtrlPosizioneRipiani" ))

            i = i + 1
         }

         CRC_TipoRipiano_prec = CRC_TipoRipiano
         CRC_nrip_prec        = CRC_nrip
         CRC_AltezzaCol_prec  = CRC_AltezzaCol
         //Luca 21/05/2019
         if( VAR_EXIST(ATTUALE(),"CRC_YVanoRip_prec") ) { CRC_YVanoRip_prec = CRC_YVanoRip }
      }
   }

   PROCEDURA CRC_GetArrayRipiani
   {
      COMPONENTI2("CRC_nrip",ATTUALE(),"Cuc_Ripiano")

      //Luca 13/05/2019 non devo considerare il ripiano del vano inferiore
      if( NOME(ATTUALE())=="ScoccaT_Col2Forno" | NOME(ATTUALE())=="ScoccaT_ColForno")
      {
         COMPONENTI2("wk_nrip",ATTUALE(),"Cuc_Ripiano")

         CRC_nrip = 0
         i = 1
         while ( i<= wk_nrip )
         {
            if( VAR_VAL(wk_nrip[i],"base_0.y")>1000 )
            {
               ne = CRC_nrip + 1
               CRC_nrip     = ne
               CRC_nrip[ne] = wk_nrip[i]
            }

            i = i + 1
         }
      }
   }

 // Raffaele 23.05.2019 da Bdm-Std
   PROCEDURA Livelli_Ord_CassCest
   {
// Procedura che determina:
// - tot_liv_cace : totale livelli di cassetti e cestoni
// - num_liv_cace : posizione-livello del cassetto attuale
      liv = 0
      livello_CaCe = idx_att
      idx_pdr = PADRE(idx_att, 2)

      COMPONENTI2("comp",idx_pdr,"Cuc_Cassetto")
      GOSUB Add_Liv_Ord_CassCest

      COMPONENTI2("comp",idx_pdr,"Cuc_Cestone")
      GOSUB Add_Liv_Ord_CassCest

      COMPONENTI2("comp",idx_pdr,"Cuc_FrontaleFissoCass")
      GOSUB Add_Liv_Ord_CassCest

//BUBBLE-SORT
//inizializzo gli indici
      bubble_scambi = 1
      while ( bubble_scambi>0 )
      {
         bubble_scambi = 0
         k = 1
         while ( k<liv )
         {
            j = k + 1
            liv_k = liv[k]
            liv_j = liv[j]
            if ( liv_j<liv_k )
            {
               bubble_scambi = bubble_scambi + 1
               liv[k] = liv_j
               liv[j] = liv_k
            }
            k = k + 1
         }
      }

      k = 1
      num_liv_cace = 0
      while ( k<=liv & num_liv_cace==0 )
      {
         if (liv[k]==VAR_VAL(idx_att, "livello_CaCe") )
            { num_liv_cace = k }
         k = k + 1
      }

      tot_liv_cace = liv
   }

   PROCEDURA Add_Liv_Ord_CassCest
   {
      k = 1
      while ( k<=comp )
      {
         SET_#(comp[k])
         j = 1
         trovato = 0
         while ( j<=liv & trovato==0 )
         {
          // *** Raffaele 11.12.2012
            if ( VAR_VAL(comp[k], "livello_CaCe")==liv[j] )   { trovato = 1 }
            j = j + 1
         }

         if ( trovato==0 )
         {
            liv = liv + 1
          // *** Raffaele 11.12.2012
            //VAR_CREATE_NUM(idx_att,STRCAT("liv_##",STR(liv)),#livello,0,"")
            //VAR_CREATE_NUM(idx_att,STRCAT("liv_##",STR(liv)),#idx_att,0,"")
            VAR_CREATE_NUM(idx_att,STRCAT("liv_##",STR(liv)),#livello_CaCe,0,"")
         }
         k = k + 1
      }
   }

   //Luca 23/10/2019
   PROCEDURA CtrlPianoCottura
   //PROCEDURA CtrlPannelloDivisorioInduzione
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }

      ConPianoCottura = 0

      ConPanDivInd   = 0

      PanDivInd_RieY = 0
      //LZ 14/12/2021: la posizione in Y del divisorio diventa fissa
      if( VAR_Revisione_PanDiss > 0 ) { PanDivInd_RieY = $Cuc_Rie_PanDiss_Y }

      idx_pianoct    = -1

      //Luca 04/11/2020 attivazione manuale utente
      if( VAR_EXIST(ATTUALE(),"VAR_PanDivInd") == 1 )
      {
         ConPanDivInd   = VAR_PanDivInd
         GOSUB CtrlPianoCottura_SubFianchi
      }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_up")==0 ) { EXITSUB() }

      if( IS_IDX(idx_cnear_up)==0 ) { EXITSUB() }

      if( IS_IDX(idx_top)==0 ) { EXITSUB() }

      NEAR_GLOBALE("wk_pct",idx_cnear_up,10,1,"PianoCotturaGenerico")

      if( wk_pct==0 ) { EXITSUB() }

      ConPianoCottura = 1

      idx_pianoct = wk_pct[1]

      if( VAR_VAL(idx_pianoct,"VAR_ELD_TipoPC")!=1 ) { EXITSUB() }

      ConPanDivInd   = 1
      PanDivInd_RieY = 0

      wk_min_offset = 20

      //devo calcolare la posiziona in altezza
      wk_par1 = VAR_VAL(idx_pianoct,"VAR_ELD_YRientr")
      if( VAR_VAL(idx_pianoct,"VAR_ELD_TipoIncasso")==1 ) { wk_par1 = VAR_VAL(idx_pianoct,"Y") }

      wk_par2 = VAR_VAL(idx_top,"Y") - wk_par1

      if( wk_par2<0 ) { PanDivInd_RieY = ABS(wk_par2) +  wk_min_offset }
      else            { PanDivInd_RieY = wk_min_offset - wk_par2 }

      //LZ 14/12/2021: la posizione in Y del divisorio diventa fissa,
      //               maggioro comunqe in presenza di scasso PC su fianco
      if( VAR_Revisione_PanDiss > 0 ) { PanDivInd_RieY = $Cuc_Rie_PanDiss_Y }

      //Luca 28/11/2019
      if( VAR_VAL(ATTUALE(),"VAR_LavPC_FiaSx")==1
        | VAR_VAL(ATTUALE(),"VAR_LavPC_FiaDx")==1  )
      {
         GOSUB CtrlPianoCottura_SubFianchi
      }

      if( IS_VAR_FIXED(ATTUALE(),"VAR_PanDivInd") == 1 )
      {
         if( ConPanDivInd == 1 )
         {
            if( VAR_PanDivInd == 0 ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_PanDivInd") }
            VAR_PanDivInd = 1
         }
      }
      else
      {
         VAR_PanDivInd = ConPanDivInd
      }
   }

   PROCEDURA CtrlPianoCottura_SubFianchi
   {
      //altezza scasso pc
      COMPONENTI2("wk_fia",ATTUALE(),"Cuc_Fianco")
      wk_idx_fia_sx = -1
      wk_idx_fia_dx = -1

      i = 1
      while ( i<=wk_fia )
      {
         if( VAR_VAL(wk_fia[i],"Verso")<0 ) { wk_idx_fia_sx = wk_fia[i] }
         if( VAR_VAL(wk_fia[i],"Verso")>0 ) { wk_idx_fia_dx = wk_fia[i] }
         i = i + 1
      }

      wk_rie_scasso_sx_PC = -1
      wk_rie_scasso_dx_PC = -1
      if( IS_IDX(wk_idx_fia_sx) & VAR_VAL(ATTUALE(),"VAR_LavPC_FiaSx")==1 )
      {
         wk_rie_scasso_sx_PC = VAR_VAL(wk_idx_fia_sx,"LavPC_DimY")
      }
      if( IS_IDX(wk_idx_fia_dx) & VAR_VAL(ATTUALE(),"VAR_LavPC_FiaDx")==1 )
      {
         wk_rie_scasso_dx_PC = VAR_VAL(wk_idx_fia_dx,"LavPC_DimY")
      }

      //COMANDO2(STRCAT("LOGMSG PanDiv Dbg - Idx: ", STR(ATTUALE()), " - wk_idx_fia_sx: ", STR(wk_idx_fia_sx), " - wk_idx_fia_dx: ", STR(wk_idx_fia_dx), " - VAR_LavPC_FiaSx: ", STR(VAR_VAL(ATTUALE(),"VAR_LavPC_FiaSx")), " - VAR_LavPC_FiaDx: ", STR(VAR_VAL(ATTUALE(),"VAR_LavPC_FiaDx")), " - wk_rie_scasso_sx_PC: ", STR(wk_rie_scasso_sx_PC), " - wk_rie_scasso_dx_PC: ", STR(wk_rie_scasso_dx_PC)))

      if( wk_rie_scasso_sx_PC>0 )
      {
         if( PanDivInd_RieY<wk_rie_scasso_sx_PC ) { PanDivInd_RieY = wk_rie_scasso_sx_PC }
      }
      if( wk_rie_scasso_dx_PC>0 )
      {
         if( PanDivInd_RieY<wk_rie_scasso_dx_PC ) { PanDivInd_RieY = wk_rie_scasso_dx_PC }
      }
   }

   //Luca 04/11/2020
   //per basi di altezza <= 240mm con cassetto o cestone, va previsto un frontale fisso
   PROCEDURA CtrlPianoCottura_Basi240
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }

      if( $CNP__ == 1 )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_up")==0 ) { EXITSUB() }

      //LZ 12/07/2021: gestione speciale, tengo il cassetto
      if( VAR_VAL( ATTUALE(), "FLAG_Speciale") ) { EXITSUB() }

      if( IS_IDX(idx_cnear_up)==0 ) { EXITSUB() }

      NEAR_GLOBALE("wk_pct",idx_cnear_up,10,1,"PianoCotturaGenerico")

      if( wk_pct==0 ) { EXITSUB() }

      wk_datains = ATOI (LEFT( VAR_VAL_STR(ATTUALE(),"z_ins") ,6) )
      if( wk_datains <  $BDM_REV_Cuc_PCottura_1 ) { EXITSUB() }

      if( Y > 240 ) { EXITSUB() }

      COMPONENTI2("wk_cass",ATTUALE(),"Cuc_Cassetto")
      COMPONENTI2("wk_cest",ATTUALE(),"Cuc_Cestone")

      if( wk_cass == 0 & wk_cest == 0 ) { EXITSUB() }

      //unisco array e ordino per altezza
      i = 1
      while ( i <= wk_cass )
      {
         ne = wk_cest + 1
         wk_cest = ne
         wk_cest[ne] = wk_cass[i]

         i = i + 1
      }

      SORT_POINT(base_1,"wk_cest","base_0")
      idx_da_sost = wk_cest[wk_cest]

      //sostituisco il cassetto superiore
      HI(idx_da_sost,1)

         wk_msg = STRCAT(MSG(1090),"\n",MSG(1214))
         DISPLAY2(wk_msg)

      HI(idx_da_sost,0)

      VAR_VALUE_SET(idx_da_sost,"VAR_Sost", 1)
      VAR_VALUE_SET(idx_da_sost,"VAR_Sost_no_confirm", 1)

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_da_sost) , " // CtrlPianoCottura_Basi240" ))
   }

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

      //Simone 19/02/2024
      if( IS_VAR_FIXED(ATTUALE(),"ConPianoSNACK") == 1 )                          { EXITSUB() }

      //solo per bifacciali basi
      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
      {
         if( FLAG_perColonna==1 )  { EXITSUB() }
      }

      if( VAR_EXIST(ATTUALE(),"idx_near_sup")==0 & VAR_EXIST(ATTUALE(),"idx_near_snack")==0 ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"ConPianoSNACK")==0 ) { VAR_CREATE_NUM(ATTUALE(),"ConPianoSNACK",0,$MODE_SAVEALWAYS,"") }

      if( VAR_EXIST(ATTUALE(),"ConPianoSNACK_prec")==0 ) { ConPianoSNACK_prec = ConPianoSNACK }

      ConPianoSNACK = 0
      BOX_MODE(0)

      //if( NOME(ATTUALE())=="FiancoFinitura"
      //  | NOME(ATTUALE())=="Cuc_AntaBifacciale" ) { NEAR_GLOBALE("wk_snack",idx_near_sup,5,1,"PianoSNACK") }
      //else                                        { NEAR_GLOBALE("wk_snack",idx_near_snack,5,1,"PianoSNACK") }

      //LZ 19/07/2021:
      //_cont_per_near_SNACK è posizionato in corrispondenza delle basi di stesura
      //quindi non è ideoneo per la riduzione dei fianchi di finitura, che potrebbero essere interessati
      //dallo snack solo a seguito di una maggiorazione dx/sx
      //if( NOME(ATTUALE())=="FiancoFinitura"
      //  | NOME(ATTUALE())=="Cuc_AntaBifacciale" ) { NEAR_GLOBALE("wk_snack",idx_near_sup,5,1,"_cont_per_near_SNACK") }
      //else                                        { NEAR_GLOBALE("wk_snack",idx_near_snack,5,1,"_cont_per_near_SNACK") }

      wk_var_test_elm = "idx_near_snack"
      wk_var_test_snack = "_cont_per_near_SNACK"

      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
      {
         wk_var_test_elm = "idx_near_sup"
         wk_var_test_snack = "_cont_per_near_SNACK"
      }

      if( NOME(ATTUALE())=="FiancoFinitura" )
      {
         wk_var_test_elm = "idx_near_sup"
         wk_var_test_snack = "_cont_per_near_SNACK_FF"
      }

      NEAR_GLOBALE( "wk_snack", VAR_VAL( ATTUALE(), wk_var_test_elm), 5, 1, wk_var_test_snack)

      wk_snackNum = 0
      while( inc(wk_snackNum) <= wk_snack)
      {
         wk_idx_snack = wk_snack[wk_snackNum]

         if( VAR_VAL( wk_idx_snack, "VAR_PosizioneSnack") > 0)            { continue }

         if( IS_MATCH(NOME(ATTUALE()),"ScoccaT_Bas*") == 1
           & NOME(ATTUALE()) != "ScoccaT_BaseAngoloIsola" )
         {
            //devono avere lo stesso angolo
            if( ABS( ANG_TOT2(ATTUALE()) - ANG_TOT2(wk_idx_snack)) > 0.1) { continue }
         }

         ConPianoSNACK = 1
         if( VAR_VAL( PADRE( wk_idx_snack, 1), "VAR_Revisione") == 1) { ConPianoSNACK_Rev01 = 1 }

         break
      }

      if( NOME(ATTUALE()) == "FiancoFinitura")
      {
         if( ConPianoSNACK == 1 & ConPianoSNACK_prec == 0)
         {
            Y = Y - SNACK_RidY
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y) , " //CtrlPresenzaSNACK Riduco"))
            //COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y-SNACK_RidY) , " //CtrlPresenzaSNACK Riduco"))
            //COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //CtrlPresenzaSNACK Riduco"))
            ConPianoSNACK_prec = ConPianoSNACK
         }
         if( ConPianoSNACK==0 & ConPianoSNACK_prec==1 )
         {
            Y = Y + SNACK_RidY
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y) , " //CtrlPresenzaSNACK"))
            //COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y+SNACK_RidY) , " //CtrlPresenzaSNACK"))
            //COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //CtrlPresenzaSNACK Riduco"))
            ConPianoSNACK_prec = ConPianoSNACK
         }

            //aggiorno dimensione reale
            Yr = Y - 2*$Cuc_Aria_Ant_Y
            if( TipoFFinitura==3 )
            {
               Yr = Y
               if( FiancoColAppTop==1 ) { Yr = Y - $Cuc_Aria_Ant_Y }
            }
      }

      if( NOME(ATTUALE())=="Cuc_AntaBifacciale" )
      {
         Yr = Y - 2*$Cuc_Aria_Ant_Y - ConPianoSNACK*SNACK_RidY
      }
   }

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

      if( VAR_EXIST(ATTUALE(),"ConTopSteelPen_prec") != 1 )   { ConTopSteelPen_prec = VAR_VAL(ATTUALE(), "ConTopSteelPen") }

      ConTopSteelPen = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("ConTopSteelPen", idx_near_sup, 1, "_cont_per_near_SteelPen")

      if( ConTopSteelPen > 0 & ConTopSteelPen_prec == 0 )
      {
         Y = Y - 70
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y) , " //CtrlPresenzaTopSteelPen Riduco"))
         ConTopSteelPen_prec = ConTopSteelPen
      }

      if( ConTopSteelPen == 0 & ConTopSteelPen_prec > 0 )
      {
         Y = Y + 70
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " Y=",STR(Y) , " //CtrlPresenzaTopSteelPen Ripristino"))
         ConTopSteelPen_prec = ConTopSteelPen
      }

      //aggiorno dimensione reale
      Yr = Y - 2*$Cuc_Aria_Ant_Y

      if( TipoFFinitura == 3 )
      {
         Yr = Y
         if( FiancoColAppTop == 1 ) { Yr = Y - $Cuc_Aria_Ant_Y }
      }
   }

   PROCEDURA CtrlPresenzaPianoCottura
   {
      if( VAR_EXIST( ATTUALE(), "VAR_LavPC_FiaSx") == 0
        | VAR_EXIST( ATTUALE(), "VAR_LavPC_FiaDx") == 0)                          { EXITSUB() }

      if( VAR_EXIST( ATTUALE(), "idx_cnear_sx") == 0
        & VAR_EXIST( ATTUALE(), "idx_cnear_dx") == 0)                             { EXITSUB() }

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

      if( IS_VAR_FIXED( ATTUALE(), "VAR_LavPC_FiaSx") == 0)
      {
         VAR_LavPC_FiaSx = 0

         BOX_MODE(0)
         NEAR_GLOBALE( "wk_pc_sx", idx_cnear_sx, 10, 1, "PianoCotturaGenerico")
         if( wk_pc_sx > 0) { VAR_LavPC_FiaSx = 1 }
      }

      if( IS_VAR_FIXED( ATTUALE(), "VAR_LavPC_FiaDx") == 0)
      {
         VAR_LavPC_FiaDx = 0

         BOX_MODE(0)
         NEAR_GLOBALE( "wk_pc_dx", idx_cnear_dx, 10, 1, "PianoCotturaGenerico")
         if( wk_pc_dx > 0) { VAR_LavPC_FiaDx = 1 }
      }
   }

   //Luca 09/10/2019
   PROCEDURA TrovaTopSopra
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 | $M4RicalcoloOffset__==1 ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_up")==0 ) { EXITSUB() }

      BOX_MODE(0)
      NEAR_GLOBALE("wk_top",idx_cnear_up,5,1,"Top")
      if( wk_top==0 ) { NEAR_GLOBALE("wk_top",idx_cnear_up,5,1,"Top_2P0") }

      idx_top = -1
      if( wk_top>0 )  { idx_top = wk_top[1] }

      //aggiungo anche il sottotop
      idx_stop = -1
      NEAR_GLOBALE("wk_stop",idx_cnear_up,5,1,"SottoTop_2P0")
      if( wk_stop>0 )  { idx_stop = wk_stop[1] }
   }

   //{ PROCEDURE FUSION
   PROCEDURA CtrlBasiFusion
   {
      if( ACTION()<=0 | ACTION()==2 ) { EXITSUB() }

      if( $OnLoadOrder )              { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"FSN_flag_SX_prec")==0 ) { FSN_flag_SX_prec = FSN_flag_SX }
      if( VAR_EXIST(ATTUALE(),"FSN_flag_DX_prec")==0 ) { FSN_flag_DX_prec = FSN_flag_DX }

      ricalcola_x_fusion = 0

      if( FSN_flag_SX_prec != FSN_flag_SX )  { ricalcola_x_fusion = 1 }
      if( FSN_flag_DX_prec != FSN_flag_DX )  { ricalcola_x_fusion = 2 }

      //$ChangedVar=="X"
      //if( VAR_VAL(ATTUALE(),"ricalcola_x_fusion_utente")==1 ) { ricalcola_x_fusion = 3 }

      wk_x_ori = X
      wk_x_new = X

      //se base ridotta a sx e base a sx è maggiore in altezza
      //devo verificare il possibile spostamento/connessione edit
      wk_check_sposta = 0

      if( ricalcola_x_fusion==1 )
      {
         if( FSN_flag_SX_prec==0 )
         {
            if( FSN_flag_SX==2 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
            if( FSN_flag_SX==3 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
         }
         if( FSN_flag_SX_prec==1 )
         {
            if( FSN_flag_SX==2 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
            if( FSN_flag_SX==3 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
         }
         if( FSN_flag_SX_prec==2 )
         {
            if( FSN_flag_SX==0 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
            if( FSN_flag_SX==1 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
         }
         if( FSN_flag_SX_prec==3 )
         {
            if( FSN_flag_SX==0 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
            if( FSN_flag_SX==1 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
         }

         FSN_flag_SX_prec = FSN_flag_SX
      }
      if( ricalcola_x_fusion==2 )
      {
         if( FSN_flag_DX_prec==0 )
         {
            //if( FSN_flag_DX==1 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
            if( FSN_flag_DX==2 ) { wk_x_new = wk_x_new - FSN_ridx_DX }
            if( FSN_flag_DX==3 ) { wk_x_new = wk_x_new - FSN_ridx_DX }
         }
         if( FSN_flag_DX_prec==1 )
         {
            //if( FSN_flag_DX==0 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
            if( FSN_flag_DX==2 ) { wk_x_new = wk_x_new - FSN_ridx_DX }
            if( FSN_flag_DX==3 ) { wk_x_new = wk_x_new - FSN_ridx_DX }

            //if( FSN_flag_DX==3 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
         }
         if( FSN_flag_DX_prec==2 )
         {
            if( FSN_flag_DX==0 ) { wk_x_new = wk_x_new + FSN_ridx_DX }
            if( FSN_flag_DX==1 ) { wk_x_new = wk_x_new + FSN_ridx_DX }
            //if( FSN_flag_DX==3 ) { wk_x_new = wk_x_new + FSN_ridx_SX }
         }
         if( FSN_flag_SX_prec==3 )
         {
            if( FSN_flag_DX==0 ) { wk_x_new = wk_x_new + FSN_ridx_DX }
            if( FSN_flag_DX==1 ) { wk_x_new = wk_x_new + FSN_ridx_DX }
         }

         FSN_flag_DX_prec = FSN_flag_DX
      }

      //Luca 18/07/2019 non posso mai ridurre
      //if( NOME(ATTUALE())=="ScoccaT_BaseLvst") { wk_x_ori = wk_x_new }

      //$ChangedVar=="X"
      //if( ricalcola_x_fusion==3 )
      //{
      //   if( FSN_flag_SX==1 ) { wk_x_new = wk_x_new - FSN_ridx_SX }
      //   if( FSN_flag_DX==1 ) { wk_x_new = wk_x_new - FSN_ridx_DX }
      //   ricalcola_x_fusion_utente = 0
      //}

      wk_controlla_agganciati = 0
      if( wk_x_ori!=wk_x_new )
      {
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(wk_x_new) , " //CtrlBasiFusion ",NOME(idx_att)))

         //se 3 non devo spostare nulla, si adatta di conseguenza
         if( FSN_flag_SX!=3 & FSN_flag_SX_prec!=3 )  { wk_controlla_agganciati = 1 }
      }

      //Luca 03/07/2019 se c'è almeno un bifacciale
      //quando cambio la dimensione delle base a seguito di una modifica per FUSION devo gestire l'allineamento
      //corretto dei bifacciali
      //mantengo la X (nominale) del bifacciale come la Xt delle basi
      if( VAR_VAL(ATTUALE(),"ConBifacciale_1") )
      {
         wk_xt = wk_x_new
         if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { wk_xt = wk_xt + FSN_ridx_SX }
         if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { wk_xt = wk_xt + FSN_ridx_DX }

         if( IsIdx(ATTUALE(),"idx_cnear_rt") )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2("wk_bif",idx_cnear_rt,5,"Cuc_AntaBifacciale")
            i = 1
            while ( i<=wk_bif )
            {
               wk_idx_bif = wk_bif[i]
               //verifico la dimensione
               if( VAR_VAL(wk_idx_bif,"X")!=wk_xt )
               {
                  COMANDO(STRCAT("VAR_CHANGE 1 ",STR(wk_idx_bif)," X=",STR(wk_xt) , " // da CtrlBasiFusion ",NOME(wk_idx_bif)))
                  COMANDO(STRCAT("RICALCOLA_UNA ",STR(wk_idx_bif)," no_agganciati // da CtrlBasiFusion ",NOME(wk_idx_bif)))
               }

               i = i + 1
            }
         }
      }

      FSN_alte_SX = Y
      FSN_alte_DX = Y

      FSN_prof_SX = Z
      FSN_prof_DX = Z

      wk_idx_sx = idx_sx
      if( IS_IDX(wk_idx_sx) )
      {
         //se la z è uguale, verifico l'eventuale base a sx alta
         if( VAR_VAL(wk_idx_sx,"Z")==Z )
         {
            if( VAR_EXIST(ATTUALE(),"idx_alto_sx") ) { wk_idx_sx = idx_alto_sx }
         }
      }

      if( IS_IDX(wk_idx_sx) )
      {
         if( FSN_flag_SX==1 | FSN_flag_SX==3 | FSN_flag_SX==4 )
         {
            FSN_pHPL_SX = Z
            FSN_prof_SX = VAR_VAL(wk_idx_sx,"Zt")
            FSN_alte_SX = VAR_VAL(wk_idx_sx,"Y")

            if( Zt>VAR_VAL(wk_idx_sx,"Zt") )
            {
               FSN_pHPL_SX = VAR_VAL(wk_idx_sx,"Z")
               FSN_prof_SX = Zt
            }

            SET_#(wk_idx_sx)
            if( #base_0.y > base_0.y ) { FSN_offy_SX = #base_0.y - base_0.y - Cuc_Alt_Zoc }

            if( FSN_alte_SX>Y )
            {
               FSN_offy_SX = 0
               FSN_alte_SX = Y
            }
         }
      }

      wk_idx_dx = idx_dx
      if( IS_IDX(wk_idx_dx) )
      {
         //se la z è uguale, verifico l'eventuale base a sx alta
         if( VAR_VAL(wk_idx_dx,"Z")==Z )
         {
            if( VAR_EXIST(ATTUALE(),"idx_alto_dx") ) { wk_idx_dx = idx_alto_dx }
         }
      }

      if( IS_IDX(wk_idx_dx) )
      {
         if( FSN_flag_DX==1 | FSN_flag_DX==3 | FSN_flag_DX==4 )
         {
            FSN_pHPL_DX = Z
            FSN_prof_DX = VAR_VAL(wk_idx_dx,"Zt")
            FSN_alte_DX = VAR_VAL(wk_idx_dx,"Y")

            if( Zt>VAR_VAL(wk_idx_dx,"Zt") )
            {
               FSN_pHPL_DX = VAR_VAL(wk_idx_dx,"Z")
               FSN_prof_DX = Zt
            }

            SET_#(wk_idx_dx)
            if( #base_0.y > base_0.y ) { FSN_offy_DX = #base_0.y - base_0.y - Cuc_Alt_Zoc }

            if( FSN_alte_DX>Y )
            {
               FSN_offy_DX = 0
               FSN_alte_DX = Y
            }
         }
      }

      //EXITSUB()

      //LZ 27/11/2021: utilizzo i tipi collo dal B01 al B06 per fondere i fianchi hpl alle basi.
      //               In definitiva G07 e B01-06 hanno lo stesso scopo, raggruppo tutto nella procedura "Assegna_TipoCollo_FianchiBasiCucina"
      //Luca 03/10/2019 verifico tipo collo
      //TIPO_COLLO = ""
      //if( FSN_flag_SX==1 | FSN_flag_SX==3 ) { TIPO_COLLO = "G07" }
      //if( FSN_flag_DX==1 | FSN_flag_DX==3 ) { TIPO_COLLO = "G07" }

      //Luca 08/07/2019
      //se sono una base fusion ridotta a sx e la base a Sx è maggiore,
      //devo gestire l'offset di eventuali basi agganciate (oppure me stessa se sono agganciata)
      if( wk_controlla_agganciati==1 )
      {
         if( VAR_VAL(idx_sx,"Y") > Y )
         {
            wk_offx = FSN_ridx_SX

            wk_agg = AGGANCIATA(ATTUALE(),"*")

            //Se sono agganciata
            if( IS_IDX(wk_agg) )
            {
               //Se non sono agganciata alla base con HPL
               if( wk_agg!=idx_sx )
               {
                  wk_cnt_str = CNT_STR(ATTUALE())
                  wk_cnt_str_offx = ATOI(GetParamStrCnt(wk_cnt_str,"OX"))

                  //sposto
                  if( wk_cnt_str_offx!=wk_offx )
                  {
                     wk_cnt_str_sd = GetParamStrCnt(wk_cnt_str,"SD+")
                     wk_cnt_str_ab = GetParamStrCnt(wk_cnt_str,"AB+")
                     wk_cnt_str_fr = GetParamStrCnt(wk_cnt_str,"FR+")

                     wk_cnt_str_oy = ATOI(GetParamStrCnt(wk_cnt_str,"OY"))
                     wk_cnt_str_oz = ATOI(GetParamStrCnt(wk_cnt_str,"OZ"))
                     wk_cnt_str_ang = ATOI(GetParamStrCnt(wk_cnt_str,"ANG"))

                     wk_cnt_new = CostruisciStrCnt(wk_cnt_str_sd,wk_cnt_str_ab,wk_cnt_str_fr,wk_offx,wk_cnt_str_oy,wk_cnt_str_oz,wk_cnt_str_ang)
                     COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
                     COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_cnt_new, " //sposto"))
                  }

                  //ripristino
                  if( wk_cnt_str_offx==wk_offx )
                  {
                     wk_cnt_str_sd = GetParamStrCnt(wk_cnt_str,"SD+")
                     wk_cnt_str_ab = GetParamStrCnt(wk_cnt_str,"AB+")
                     wk_cnt_str_fr = GetParamStrCnt(wk_cnt_str,"FR+")

                     wk_cnt_str_oy = ATOI(GetParamStrCnt(wk_cnt_str,"OY"))
                     wk_cnt_str_oz = ATOI(GetParamStrCnt(wk_cnt_str,"OZ"))
                     wk_cnt_str_ang = ATOI(GetParamStrCnt(wk_cnt_str,"ANG"))

                     wk_cnt_new = CostruisciStrCnt(wk_cnt_str_sd,wk_cnt_str_ab,wk_cnt_str_fr,0,wk_cnt_str_oy,wk_cnt_str_oz,wk_cnt_str_ang)
                     COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
                     COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_cnt_new," //ripristino" ))
                  }
               }
            }

            //verifico se ho agganciate strutture sopra o sotto --> sposto quelle
            AGGANCIATI("wk_agg","*",ATTUALE())
            if( wk_agg>0 )
            {
               wk_offx = -4

               i = 1
               while ( i<=wk_agg )
               {
                  wk_idx_agg = wk_agg[i]
                  wk_cnt_str = CNT_STR(wk_idx_agg)

                  wk_cnt_str_offx = ATOI(GetParamStrCnt(wk_cnt_str,"OX"))

                  //verifico se è S+ o D+
                  wk_cnt_str_sd = GetParamStrCnt(wk_cnt_str,"SD+")
                  if( wk_cnt_str_sd=="S+" | wk_cnt_str_sd=="D+" )
                  {
                     wk_cnt_str_sd = GetParamStrCnt(wk_cnt_str,"SD+")
                     wk_cnt_str_ab = GetParamStrCnt(wk_cnt_str,"AB+")
                     wk_cnt_str_fr = GetParamStrCnt(wk_cnt_str,"FR+")

                     wk_cnt_str_oy = ATOI(GetParamStrCnt(wk_cnt_str,"OY"))
                     wk_cnt_str_oz = ATOI(GetParamStrCnt(wk_cnt_str,"OZ"))
                     wk_cnt_str_ang = ATOI(GetParamStrCnt(wk_cnt_str,"ANG"))

                     wk_offx_new = 99999

                     //sposto
                     if( wk_cnt_str_offx!=wk_offx ) { wk_offx_new = wk_offx }
                     //ripristino
                     if( wk_cnt_str_offx==wk_offx ) { wk_offx_new = 0 }

                     if( wk_offx_new<1000 )
                     {
                        wk_cnt_new = CostruisciStrCnt(wk_cnt_str_sd,wk_cnt_str_ab,wk_cnt_str_fr,wk_offx_new,wk_cnt_str_oy,wk_cnt_str_oz,wk_cnt_str_ang)
                        COMANDO(STRCAT("SETTA ",STR(wk_idx_agg)))
                        COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_cnt_new," //sposto basi agganciate"))
                     }
                  }
                  i = i + 1
               }
            }
         }
      }
   }

   PROCEDURA CtrlBarraFusion
   {
      if( ACTION()<=0 | ACTION()==2 ) { EXITSUB() }

      if( $OnLoadOrder )              { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"FSN_RRid_SX_prec")==0 ) { FSN_RRid_SX_prec = FSN_RRid_SX }
      if( VAR_EXIST(ATTUALE(),"FSN_RRid_DX_prec")==0 ) { FSN_RRid_DX_prec = FSN_RRid_DX }

      ricalcola_x_fusion = 0

      if( FSN_RRid_SX_prec != FSN_RRid_SX )  { ricalcola_x_fusion = 1 }
      if( FSN_RRid_DX_prec != FSN_RRid_DX )  { ricalcola_x_fusion = 2 }

      wk_x_ori = X
      wk_x_new = X

      wk_ridx = 4

      if( ricalcola_x_fusion==1 )
      {
         if( FSN_RRid_SX_prec==0 & FSN_RRid_SX==1 ) { wk_x_new = wk_x_new - wk_ridx }
         if( FSN_RRid_SX_prec==1 & FSN_RRid_SX==0 ) { wk_x_new = wk_x_new + wk_ridx  }

         FSN_RRid_SX_prec = FSN_RRid_SX
      }
      if( ricalcola_x_fusion==2 )
      {
         if( FSN_RRid_DX_prec==0 & FSN_RRid_DX==1 ) { wk_x_new = wk_x_new - wk_ridx }
         if( FSN_RRid_DX_prec==1 & FSN_RRid_DX==0 ) { wk_x_new = wk_x_new + wk_ridx  }

         FSN_RRid_DX_prec = FSN_RRid_DX
      }

      if( wk_x_ori!=wk_x_new ) { COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(wk_x_new) , " //CtrlBarraFusion ",NOME(idx_att))) }

      //se riduco a sx --> offset connessione 4 mm

      if( ricalcola_x_fusion!=1 )  { EXITSUB() }

      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( IS_IDX(idx_agg)==0 ) { EXITSUB() }

      //if( VAR_VAL(idx_agg,"FSN_flag_SX")>0 ) { EXITSUB() }

      cnt_attuale = CNT_STR(ATTUALE())

      //sinistro - destro
      wk_sd = GetParamStrCnt(cnt_attuale,"SD+")
      //alto-basso
      wk_ab = GetParamStrCnt(cnt_attuale,"AB+")
      //fronte-retro
      wk_fr = GetParamStrCnt(cnt_attuale,"FR+")

      wk_ox  = ATOI(GetParamStrCnt(cnt_attuale,"OX"))
      wk_oy  = ATOI(GetParamStrCnt(cnt_attuale,"OY"))
      wk_oz  = ATOI(GetParamStrCnt(cnt_attuale,"OZ"))
      wk_ang = ATOI(GetParamStrCnt(cnt_attuale,"ANG"))

      wk_str = CostruisciStrCnt(wk_sd,wk_ab,wk_fr,wk_ox,wk_oy,wk_oz,wk_ang)

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE())," " ,wk_str ," | DEBUG ---- "))

      wk_ox_new = SE_NUM(FSN_RRid_SX==1,4,0)
      wk_str_new = CostruisciStrCnt(wk_sd,wk_ab,wk_fr,wk_ox_new,wk_oy,wk_oz,wk_ang)

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE())," " ,wk_str_new ," | DEBUG ---- "))

      if( wk_str_new==wk_str ) { EXITSUB() }
      COMANDO(STRCAT("SETTA ",STR(ATTUALE()) ," //CtrlBarraFusion sposta"))
      COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_str_new))
   }

   PROCEDURA CtrlBasiBarra
   {
      if( ACTION()<=0 | ACTION()==2 ) { EXITSUB() }

      if( $OnLoadOrder )              { EXITSUB() }

      if( IS_IDX(idx_cnear_a)==0 )    { EXITSUB() }

      BasiLatoA = 0
      BasiLatoB = 0

      BOX_MODE(0)
      NEAR_GLOBALE("BasiLatoA",idx_cnear_a,1,1,"ScoccaT_Ba*")
      NEAR_GLOBALE("BasiLatoB",idx_cnear_b,1,1,"ScoccaT_Ba*")

   }

   // FT 10/02/20
   PROCEDURA CtrlBarraSotto
   {
//      if( ACTION() <= 0 | ACTION() == 2 )      { EXITSUB() }
      if( ACTION() <= 0 )                      { EXITSUB() }

      if( VAR_VAL(-1, "__loading__" ) == 1 )   { EXITSUB() }

      if( IS_IDX(idx_cnear_barre_S) != 1 )     { EXITSUB() }
      if( IS_IDX(idx_cnear_barre_A) != 1 )     { EXITSUB() }
      if( IS_IDX(idx_cnear_barre_B) != 1 )     { EXITSUB() }

      // in senso orizzontale i pannelli devono essere della stessa altezza
      // perchè così è definito dalle regole. Per cui è sufficiente
      // vedere chi ho alla mia sinistra e comportarmi di conseguenza
      // (potrebbe essere gestito direttamente nel posizionamento
      // delle barre tanto sò da subito se sono 1, 2 o 3 barre orizzontali)
      BarreSinistra = 0

      // in senso verticale potrei avere dei disallineamenti.
      // pertanto devo verificarele lunghezze delle barre.
      // Per default la barra più corta si porta sempre dietro
      // le giunzioni e "vince" sulla barra più grande

      BarreAlto   = 0
      BarreBasso    = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("BarreSinistra", idx_cnear_barre_S, 1, "BarraIsola")
      NEAR_GLOBALE2("BarreAlto", idx_cnear_barre_A, 1, "BarraIsola")
      NEAR_GLOBALE2("BarreBasso", idx_cnear_barre_B, 1, "BarraIsola")


      // FT Annullo le Barre Alto o Basso a seconda della situazione

      // 1 - 1 : caso della mia barra in alto maggiore, la escludo
      if( BarreAlto == 1 )
      {
         if( X > VAR_VAL(BarreAlto[1], "X"))   { BarreAlto = 0 }
      }

      // 1 - 1 : caso della mia barra in basso maggiore, la escludo
      if( BarreBasso == 1 )
      {
         if( X > VAR_VAL(BarreBasso[1], "X"))  { BarreBasso = 0 }
      }

      // 2 - 1: se sopra ne ho 2 sicuramente sono più corte quindi mi escludo
      if( BarreAlto == 2 )   { BarreAlto = 0 }

      // 2 - 1: se sotto ne ho 2 sicuramente sono più corte qiundi mi escludo
      if( BarreBasso == 2 )   { BarreBasso = 0 }


      // conto le giunzioni verticali e orizzontali
      COMPONENTI2("Giunzioni", idx_att, "GiunzioneBarraIsola")
      COMPONENTI2("Spine", idx_att, "SpinaBarraIsola")

      // VAR_giunzioni_verticali = 0
      // VAR_giunzioni_orizzontali = 0
      //
      // i = 1
      // while( i <= Giunzioni )
      // {
      //    idx_giu = Giunzioni[i]
      //    tipo_giu = VAR_VAL_STR(idx_giu, "VAR_tipo_giunzione")
      //
      //    if( tipo_giu == "VERTICALE" )     { VAR_giunzioni_verticali = VAR_giunzioni_verticali + 1 }
      //    if( tipo_giu == "ORIZZONTALE" )   { VAR_giunzioni_orizzontali = VAR_giunzioni_orizzontali + 1 }
      //
      //    i = i + 1
      // }

      VT_KITBARRA = STR(Giunzioni)
      VT_NRSPINE = STR(Spine)
   }

   //Luca 03/07/2019 -. solo su bifacciali
   PROCEDURA CtrlBifaccialiFusion
   {
      //solo per bifacciali basi
      if( FLAG_perColonna==1 )  { EXITSUB() }

      //Luca 19/07/2019 in caso di isola, devo ridurre il bifaciale per far spazio al fianco di finitura
      if( FSN_RRid_DX==1 | FSN_RRid_SX==1 )
      {
         FSN_RidSx = FSN_RRid_SX
         FSN_RidDx = FSN_RRid_DX

         EXITSUB()
      }

      if( IS_IDX(idx_struttura)==0 ) { EXITSUB() }

      if( VAR_EXIST(idx_struttura,"FSN_flag_SX")==0 ) { EXITSUB() }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- CtrlBifaccialiFusion"))

      //devo considerare il fatto che tutti i bifacciale hanno angolo+180 rispetto alla base
      FSN_MagSx = 0
      FSN_MagDx = 0
      FSN_RidSx = 0
      FSN_RidDx = 0

      SET_#(idx_struttura)

      if( #FSN_flag_SX==1 )
      {
         FSN_RidDx = 1

         //se la base a sx è maggiore in altezza e le basi sono allineate retro, non devo ridurre il bifacciale
         if( IS_IDX(#idx_sx) )
         {
            if( VAR_VAL(#idx_sx,"Y")>VAR_VAL(idx_struttura,"Y") )
            {
               wk_dis_retro = BasiDisallineateRetro(idx_struttura,#idx_sx,-1)
               if( wk_dis_retro==0 ) { FSN_RidDx = 0 }
            }
         }
      }
      if( #FSN_flag_SX==2 )
      {
         FSN_MagDx = 1

         //se la base a sx è minore in altezza e le basi sono allineate retro, non devo ridurre il bifacciale
         if( IS_IDX(#idx_sx) )
         {
            if( VAR_VAL(#idx_sx,"Y")<VAR_VAL(idx_struttura,"Y") )
            {
               wk_dis_retro = BasiDisallineateRetro(idx_struttura,#idx_sx,-1)
               if( wk_dis_retro==0 ) { FSN_MagDx = 0 }
            }
         }
      }
      if( #FSN_flag_SX==4 )  { FSN_RidDx = 1 }

      if( #FSN_flag_DX==1 )
      {
         FSN_RidSx = 1

         //se la base a dx è maggiore in altezza e le basi sono allineate retro, non devo ridurre il bifacciale
         if( IS_IDX(#idx_dx) )
         {
            if( VAR_VAL(#idx_dx,"Y")>VAR_VAL(idx_struttura,"Y") )
            {
               wk_dis_retro = BasiDisallineateRetro(idx_struttura,#idx_dx,1)
               if( wk_dis_retro==0 ) { FSN_RidSx = 0 FSN_MagSx = 1 }
            }
         }
      }
      if( #FSN_flag_DX==2 )
      {
         FSN_MagSx = 1

         //se la base a dx è minore in altezza e le basi sono allineate retro, non devo ridurre il bifacciale
         if( IS_IDX(#idx_dx) )
         {
            if( VAR_VAL(#idx_dx,"Y")<VAR_VAL(idx_struttura,"Y") )
            {
               wk_dis_retro = BasiDisallineateRetro(idx_struttura,#idx_dx,1)
               if( wk_dis_retro==0 ) { FSN_MagSx = 0 }
            }
         }
      }
      if( #FSN_flag_DX==4 )  { FSN_RidSx = 1 }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- ",STR(VAR_VAL(ATTUALE(),"fia_sx"))))

      //Luca 23/08/2021
      BOX_MODE(0)
      fia_sx = 0
      fia_dx = 0

      NEAR_GLOBALE("fia_sx",idx_cnear_sx,0.1,1,"FiancoFinitura")
      NEAR_GLOBALE("fia_dx",idx_cnear_dx,0.1,1,"FiancoFinitura")

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- ",STR(VAR_VAL(ATTUALE(),"fia_sx"))))

      if( FSN_RidSx == 0 & fia_sx > 0 ) { FSN_RidSx = 1 }
      if( FSN_RidDx == 0 & fia_dx > 0 ) { FSN_RidDx = 1 }
   }

   PROCEDURA FSN_Def_X_Xt
   {
      ////per FUSION
      //Xt = X + FSN_flag_SX*FSN_ridx_SX + FSN_flag_DX*FSN_ridx_DX

      Xt = X

      if( FSN_flag_SX==1
        | FSN_flag_SX==3
        ) { Xt =  Xt + FSN_ridx_SX }

      //if( FSN_flag_SX==2 ) { Xt =  Xt - FSN_ridx_SX }

      if( FSN_flag_DX==1
        | FSN_flag_DX==3
        ) { Xt =  Xt + FSN_ridx_DX }
      //if( FSN_flag_DX==2 ) { Xt =  Xt - FSN_ridx_DX }
   }

   //controllo la presenza di eventuali basi fusion
   PROCEDURA FSN_ControlloFUSION
   {
      $FSN_debug = 0
#ifdef TE
      $FSN_debug = 1
#endif
      $FSN_debug_msg  = "Start"     LogProcedura2("FSN_ControlloFUSION")

      VAR_SET_MODE(-1,"FSN_debug",$MODE_NOSAVE)
      VAR_SET_MODE(-1,"FSN_debug_msg",$MODE_NOSAVE)

      COMANDO("RIGENERA")

      //cerco tutte le basi
      //analizzo le singole basi per individuare, o cercare di individuare, le basi fusion (cambio profondità)
      $wk_str = 0
      STRUTTURE("$wk_str_tmp")
      $wk_i = 1
      while ( $wk_i<=$wk_str_tmp )
      {
         if( IS_MATCH(NOME($wk_str_tmp[$wk_i]),"ScoccaT_B*")
         //  & IS_MATCH(NOME($wk_str_tmp[$wk_i]),"ScoccaT_BaseLvs*")==0 )
         )
         {
            $wk_ne = $wk_str + 1
            $wk_str = $wk_ne
            $wk_str[$wk_ne] = $wk_str_tmp[$wk_i]
         }
         $wk_i = $wk_i + 1
      }

//$FSN_debug = 0

      //primo giro
      $FSN_debug_msg  = "******** PRIMO GIRO -- CONTROLLI BASI CAMBIO PROFONDITA' ********"
      LogProcedura2("FSN_ControlloFUSION")

      $wk_i = 1
      while ( $wk_i<=$wk_str )
      {
         $wk_idx_bas = $wk_str[$wk_i]

         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"]")
         LogProcedura2("FSN_ControlloFUSION")

         $wk_verso_chk = "SX"
         GOSUB FSN_ControlloFUSION_SubVerso

         $wk_verso_chk = "DX"
         GOSUB FSN_ControlloFUSION_SubVerso

         //GOSUB FSN_ControlloFUSION_SubSingolaBase

         $wk_i = $wk_i + 1
      }

//$FSN_debug = 1

      //Luca 19/07/2019
      $FSN_debug_msg  = "******** SECONDO GIRO -- CONTROLLO ELEMENTI ISOLE ********"
      LogProcedura2("FSN_ControlloFUSION")

      //Luca 19/07/2019 reset var
      // FSN_RRid_SX utilizzate su bifacciali e fianchi di finitura
      WITH_VAR("$wk_reset_var","FSN_RRid_SX",0,0,"")
      while( $wk_reset_var>0 )
      {
         //$wk_nome_var_rid = STRCAT("FSN_RRid_",UPPER($wk_verso_chk))
         VAR_VALUE_SET($wk_reset_var[$wk_reset_var],"FSN_RRid_SX",0)
         VAR_VALUE_SET($wk_reset_var[$wk_reset_var],"FSN_RRid_DX",0)

         $wk_reset_var = $wk_reset_var - 1
      }

      $wk_i = 1
      while ( $wk_i<=$wk_str )
      {
         $wk_idx_bas = $wk_str[$wk_i]

         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"]")
         LogProcedura2("FSN_ControlloFUSION")

         $wk_verso_chk = "SX"
         GOSUB FSN_ControlloFUSION_Retro

         $wk_verso_chk = "DX"
         GOSUB FSN_ControlloFUSION_Retro

         //GOSUB FSN_ControlloFUSION_SubSingolaBase

         $wk_i = $wk_i + 1
      }

//$FSN_debug = 0
      //**verifico i fianchi di finitura agganciati alle base
      //GOSUB FSN_ControlloFUSION_SubFianchiFinitura

      COMANDO("RIGENERA //1° FSN_ControlloFUSION")

      $FSN_debug_msg  = "******** RICALCOLO BASI ********"
      LogProcedura2("FSN_ControlloFUSION")

      //Secondo giro, ricalcolo le basi
      $wk_i = 1
      while ( $wk_i<=$wk_str )
      {
         $wk_idx_bas = $wk_str[$wk_i]
         COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bas) , " no_agganciati //FSN_ControlloFUSION"))
         $wk_i = $wk_i + 1
      }

      $FSN_debug_msg  = "******** RICALCOLO BIFACCIALI ********"
      LogProcedura2("FSN_ControlloFUSION")

      //Secondo giro, ricalcolo i bifacciai
      WITH_ALIAS("$wk_bif","Bifacciale")
      $wk_i = 1
      while ( $wk_i<=$wk_bif )
      {
         $wk_idx_bif = $wk_bif[$wk_i]
         COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bif) , " no_agganciati //FSN_ControlloFUSION"))
         $wk_i = $wk_i + 1
      }

      COMANDO("RIGENERA //2° FSN_ControlloFUSION")

      $FSN_debug_msg  = "END"       LogProcedura2("FSN_ControlloFUSION")
   }

   //[I] $wk_verso_chk = ""
   //PROCEDURA FSN_ControlloFUSION_SubVerso_OLD
   //{
   //   $wk_check = 0
   //
   //   if( VAR_EXIST($wk_idx_bas,STRCAT("idx_",LOWER($wk_verso_chk))) )
   //   {
   //      $wk_idx_sd = #idx_sx
   //      if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_sd = #idx_dx }
   //
   //      if( IS_IDX($wk_idx_sd) )
   //      {
   //         if( VAR_VAL($wk_idx_sd,"Z")<VAR_VAL($wk_idx_bas,"Z") ) { $wk_check = 1 }
   //
   //         //Luca 13/06/2019
   //         //ECCEZIONE LAVASTOVIGLIE
   //         //la lavastoviglie non può mai essere ridotta, se è maggiore riduco la base più piccola
   //         if( IS_MATCH(NOME($wk_idx_sd),"ScoccaT_BaseLvs*") )
   //         {
   //            if( VAR_VAL($wk_idx_sd,"Z")>VAR_VAL($wk_idx_bas,"Z") ) { $wk_check = 1 }
   //         }
   //
   //         //Luca 17/06/2019 mantis 0020070: Fusion cucine 2.0: Controlli fusion interviene anche su colonna
   //         //non controllo il caso di accosto con colonne
   //         if( IS_MATCH(NOME($wk_idx_sd),"ScoccaT_Col*") ) { $wk_check = 0 }
   //      }
   //   }
   //
   //   $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] CHECK ",UPPER($wk_verso_chk)," = ",STR($wk_check))
   //   LogProcedura2("FSN_ControlloFUSION")
   //
   //   $wk_nome_var_fg = STRCAT("FSN_flag_",UPPER($wk_verso_chk))
   //
   //   if( IS_VAR_FIXED($wk_idx_bas,$wk_nome_var_fg)==0 )
   //   {
   //      VAR_VALUE_SET($wk_idx_bas,$wk_nome_var_fg,0)
   //   }
   //   else
   //   {
   //      $wk_check = 0
   //
   //      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] FLAG ",UPPER($wk_verso_chk)," FORZATO")
   //      LogProcedura2("FSN_ControlloFUSION")
   //   }
   //
   //   if(  $wk_check == 0 ) { EXITSUB() }
   //
   //   $wk_blocca = 0
   //   $wk_msg1   = "ATTENZIONE!\nCambio profondità non fattibile.\n"
   //   $wk_msg2   = ""
   //
   //   //**** se c'è disallineamento sia fronte che retro non è possibile fare il cambio di profondità
   //   //deve esserci almeno un punto in comune per essere allineato
   //   SET_#($wk_idx_bas)
   //
   //   $wk_b0 = #base_0  $wk_b0.y = 0
   //   $wk_b1 = #base_1  $wk_b1.y = 0
   //   $wk_b2 = #base_0  $wk_b2.y = 0
   //   $wk_b3 = #base_1  $wk_b3.y = 0
   //
   //   $wk_b0_sd = #base_0  $wk_b0_sd.y = 0
   //   $wk_b1_sd = #base_1  $wk_b1_sd.y = 0
   //   $wk_b2_sd = #base_0  $wk_b2_sd.y = 0
   //   $wk_b3_sd = #base_1  $wk_b3_sd.y = 0
   //
   //   $wk_b0_all = 0
   //   $wk_b1_all = 0
   //   $wk_b2_all = 0
   //   $wk_b3_all = 0
   //
   //   if( ABS(DISTANZA($wk_b0,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b0,$wk_b1_sd))<0.1
   //     | ABS(DISTANZA($wk_b0,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b0,$wk_b3_sd))<0.1 ) { $wk_b0_all = 1 }
   //
   //   if( ABS(DISTANZA($wk_b1,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b1,$wk_b1_sd))<0.1
   //     | ABS(DISTANZA($wk_b1,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b1,$wk_b3_sd))<0.1 ) { $wk_b1_all = 1 }
   //
   //   if( ABS(DISTANZA($wk_b2,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b2,$wk_b1_sd))<0.1
   //     | ABS(DISTANZA($wk_b2,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b2,$wk_b3_sd))<0.1 ) { $wk_b2_all = 1 }
   //
   //   if( ABS(DISTANZA($wk_b3,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b3,$wk_b1_sd))<0.1
   //     | ABS(DISTANZA($wk_b3,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b3,$wk_b3_sd))<0.1 ) { $wk_b3_all = 1 }
   //
   //   $FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_0=",STR($wk_b0_all))
   //   LogProcedura2("FSN_ControlloFUSION")
   //   $FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_1=",STR($wk_b1_all))
   //   LogProcedura2("FSN_ControlloFUSION")
   //   $FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_2=",STR($wk_b2_all))
   //   LogProcedura2("FSN_ControlloFUSION")
   //   $FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_3=",STR($wk_b3_all))
   //   LogProcedura2("FSN_ControlloFUSION")
   //
   //   if( $wk_b0_all==0 & $wk_b1_all==0 | $wk_b2_all==0 & $wk_b3_all==0  )
   //   {
   //      $wk_blocca = 1
   //      $wk_msg2   = ""
   //
   //      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASI DISALLINEATE")
   //      LogProcedura2("FSN_ControlloFUSION")
   //   }
   //
   //   //*** verifico apertura
   //   //*** se anta battente a sx con verso dx non è fattibile, l'anta non si apre
   //   $wk_val_gest_aper = "DX001"
   //   if( UPPER($wk_verso_chk)=="DX" ) { $wk_val_gest_aper = "SX001" }
   //
   //   if( VAR_VAL_STR($wk_idx_sd,"GEST_C007")==$wk_val_gest_aper )
   //   {
   //      $wk_blocca = 1
   //      $wk_msg2   = "Verificare verso apertura ante base minore."
   //   }
   //
   //   if( $wk_blocca==1 )
   //   {
   //      HI($wk_idx_bas,1)
   //      HI($wk_idx_sd,1)
   //      DISPLAY3(STRCAT($wk_msg1,$wk_msg2),$MB_ICONERROR)
   //      HI($wk_idx_bas,0)
   //      HI($wk_idx_sd,0)
   //
   //      EXITSUB()
   //   }
   //
   //   //**** se non ho trovato vincoli, attivo flag fusion
   //   //** ASSEGNO IL FLAG FUSION
   //   VAR_VALUE_SET($wk_idx_bas,$wk_nome_var_fg,1)
   //   COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bas) , " no_agganciati no_ridisegna //FSN_ControlloFUSION"))
   //
   //   $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] RICALCOLO")
   //   LogProcedura2("FSN_ControlloFUSION")
   //}

   PROCEDURA FSN_ControlloFUSION_SubVerso
   {
      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] CHECK ",UPPER($wk_verso_chk))
      LogProcedura2("FSN_ControlloFUSION")

      //Se non esiste la variabile, esco subito
      if( VAR_EXIST($wk_idx_bas,"FSN_flag_SX")==0 )
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] VARIABILI FUSION NON TROVATE - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }

      //reset variabili
      $wk_nome_var_fg = STRCAT("FSN_flag_",UPPER($wk_verso_chk))
      if( IS_VAR_FIXED($wk_idx_bas,$wk_nome_var_fg)==0 )
      {
         VAR_VALUE_SET($wk_idx_bas,$wk_nome_var_fg,0)
      }
      else
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] FLAG ",UPPER($wk_verso_chk)," FORZATO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }

      $wk_idx_sd = -1
      if( VAR_EXIST($wk_idx_bas,STRCAT("idx_",LOWER($wk_verso_chk))) )
      {
         SET_#($wk_idx_bas)
         $wk_idx_sd = #idx_sx
         if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_sd = #idx_dx }

         //Luca 18/07/2019 se idx_sd ha la stessa profondità, verific se h una base sopra
         if( VAR_VAL($wk_idx_sd,"Z")==VAR_VAL($wk_idx_bas,"Z") )
         {
            if( VAR_EXIST($wk_idx_bas,STRCAT("idx_alto_",LOWER($wk_verso_chk))) )
            {
               SET_#($wk_idx_bas)
               $wk_idx_sd = #idx_alto_sx
               if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_sd = #idx_alto_dx }
            }
         }
      }

      if( IS_IDX($wk_idx_sd)==0 )
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] IDX VICINO NON VALIDO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }


      //Luca 17/06/2019 mantis 0020070: Fusion cucine 2.0: Controlli fusion interviene anche su colonna
      //non controllo il caso di accosto con colonne
      if( IS_MATCH(NOME($wk_idx_sd),"ScoccaT_Col*") )
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] IDX VICINO --> COLONNA - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }

      //Luca 10/12/2019 blocco se a sx/dx ho una base angolo con angolo divesio
      if( NOME($wk_idx_sd)=="ScoccaT_BaseAngPan"
        | NOME($wk_idx_sd)=="ScoccaT_BaseAngoloIsola" )
      {
         if( ABS(ANG_TOT2($wk_idx_sd)-ANG_TOT2($wk_idx_bas))>0.1 )
         {
            $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] IDX VICINO --> ANGOLO - ESCO")
            LogProcedura2("FSN_ControlloFUSION")

            EXITSUB()
         }
      }

      ///*** VERIFICO SE C'E' DISALLIANEMNTO SIA FRONTE CHE RETRO ***
      $wk_blocca = 0
      $wk_msg1   = "ATTENZIONE!\nCambio profondità non fattibile.\n"
      $wk_msg2   = ""

      //**** se c'è disallineamento sia fronte che retro non è possibile fare il cambio di profondità
      //deve esserci almeno un punto in comune per essere allineato
      SET_#($wk_idx_bas)

      $wk_b0 = #base_0  $wk_b0.y = 0
      $wk_b1 = #base_1  $wk_b1.y = 0
      $wk_b2 = #base_0  $wk_b2.y = 0
      $wk_b3 = #base_1  $wk_b3.y = 0

      $wk_b0_sd = #base_0  $wk_b0_sd.y = 0
      $wk_b1_sd = #base_1  $wk_b1_sd.y = 0
      $wk_b2_sd = #base_0  $wk_b2_sd.y = 0
      $wk_b3_sd = #base_1  $wk_b3_sd.y = 0

      $wk_b0_all = 0
      $wk_b1_all = 0
      $wk_b2_all = 0
      $wk_b3_all = 0

      if( ABS(DISTANZA($wk_b0,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b0,$wk_b1_sd))<0.1
        | ABS(DISTANZA($wk_b0,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b0,$wk_b3_sd))<0.1 ) { $wk_b0_all = 1 }

      if( ABS(DISTANZA($wk_b1,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b1,$wk_b1_sd))<0.1
        | ABS(DISTANZA($wk_b1,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b1,$wk_b3_sd))<0.1 ) { $wk_b1_all = 1 }

      if( ABS(DISTANZA($wk_b2,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b2,$wk_b1_sd))<0.1
        | ABS(DISTANZA($wk_b2,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b2,$wk_b3_sd))<0.1 ) { $wk_b2_all = 1 }

      if( ABS(DISTANZA($wk_b3,$wk_b0_sd))<0.1 | ABS(DISTANZA($wk_b3,$wk_b1_sd))<0.1
        | ABS(DISTANZA($wk_b3,$wk_b2_sd))<0.1 | ABS(DISTANZA($wk_b3,$wk_b3_sd))<0.1 ) { $wk_b3_all = 1 }

      //$FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_0=",STR($wk_b0_all))
      //LogProcedura2("FSN_ControlloFUSION")
      //$FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_1=",STR($wk_b1_all))
      //LogProcedura2("FSN_ControlloFUSION")
      //$FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_2=",STR($wk_b2_all))
      //LogProcedura2("FSN_ControlloFUSION")
      //$FSN_debug_msg  = STRCAT("TEST ALLINEAMENTO IDX [",STR($wk_idx_bas),"]  BASE_3=",STR($wk_b3_all))
      //LogProcedura2("FSN_ControlloFUSION")

      if( $wk_b0_all==0 & $wk_b1_all==0 | $wk_b2_all==0 & $wk_b3_all==0  )
      {
         $wk_blocca = 1
         $wk_msg2   = ""

         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASI DISALLINEATE - MSG - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }

      ///*** VERIFICO IL VERSO DI APERTURA ANTE ***
      //*** se anta battente a sx con verso dx non è fattibile, l'anta non si apre
      if( VAR_VAL($wk_idx_bas,"Z")<VAR_VAL($wk_idx_sd,"Z") )
      {
         $wk_val_gest_aper = "DX001"
         if( UPPER($wk_verso_chk)=="SX" ) { $wk_val_gest_aper = "SX001" }

         if( VAR_VAL_STR($wk_idx_bas,"GEST_C007")==$wk_val_gest_aper )
         {
            $wk_blocca = 1
            $wk_msg2   = "Verificare verso apertura ante base minore."
         }
      }
      if( VAR_VAL($wk_idx_bas,"Z")>VAR_VAL($wk_idx_sd,"Z") )
      {
         $wk_val_gest_aper = "DX001"
         if( UPPER($wk_verso_chk)=="DX" ) { $wk_val_gest_aper = "SX001" }

         if( VAR_VAL_STR($wk_idx_sd,"GEST_C007")==$wk_val_gest_aper )
         {
            $wk_blocca = 2
            //il messaggio viene dato dalla base minore, ma comunque devo bloccare il caso
            //$wk_msg2   = "Verificare verso apertura ante base minore."
         }
      }


      if( $wk_blocca>0 )
      {
         if( $wk_blocca==1 )
         {
            HI($wk_idx_bas,1)
            HI($wk_idx_sd,1)
            DISPLAY3(STRCAT($wk_msg1,$wk_msg2),$MB_ICONERROR)
            HI($wk_idx_bas,0)
            HI($wk_idx_sd,0)
         }

         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] VERSO ANTE NON POSSIBILE - MSG - ESCO")
         LogProcedura2("FSN_ControlloFUSION")

         EXITSUB()
      }

      //*** ASSEGNO FLAG FUSION ***
      //se no ho trovato nessun vincolo, assegno il flag fusion corretto
      $wk_flag_FSN = 0

      $wk_basi_contrapposte = 0
      $wk_ang_att = ANG_TOT2($wk_idx_bas)
      $wk_ang_bsd = ANG_TOT2($wk_idx_sd)

      if( ABS($wk_ang_att-$wk_ang_bsd)>179.9
        & ABS($wk_ang_att-$wk_ang_bsd)<180.1 ) { $wk_basi_contrapposte = 1 }

      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] ANG=",STR($wk_ang_att)," ANG_BASE_IDX[",STR($wk_ang_bsd),"] ANG=",STR($wk_ang_bsd),"  CONTRAPPOSTE=",STR($wk_basi_contrapposte))
      LogProcedura2("FSN_ControlloFUSION")

      //se sono la base minore:
      // - se allinato retro --> FLAG = 1 -- attivi HPL
      //    -- se vicino base lavastoviglie --> FLAG = 3 -- attivi HPL + riduzione
      // - se allinato fronte --> FLAG = 4 -- solo fascia sul retro
      //se sono la base maggiore:
      // - se allinato retro  --> FLAG = 2 -- riduco la base
      $wk_dis_retro = BasiDisallineateRetro($wk_idx_bas,$wk_idx_sd,SE_NUM($wk_verso_chk=="DX",1,-1))

      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE_IDX[",STR($wk_ang_bsd),"] $wk_dis_retro=",STR($wk_dis_retro))
      LogProcedura2("FSN_ControlloFUSION")

      if( VAR_VAL($wk_idx_sd,"Z")>VAR_VAL($wk_idx_bas,"Z") )
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE MINORE")
         LogProcedura2("FSN_ControlloFUSION")

         if( $wk_dis_retro==0 )
         {
            $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE MINORE ALLINEATA RETRO")
            LogProcedura2("FSN_ControlloFUSION")

            $wk_flag_FSN = 1

            if( IS_MATCH(NOME($wk_idx_sd),"ScoccaT_BaseLvs*") ) { $wk_flag_FSN = 3 }
         }
         else
         {
            $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE MINORE ALLINEATA FRONTE")
            LogProcedura2("FSN_ControlloFUSION")

            $wk_flag_FSN = 4
         }

         if( $wk_basi_contrapposte==1 )
         {
            //$wk_flag_FSN = 3
            if( $wk_dis_retro==1 ) { $wk_flag_FSN = 4 }
            else                   { $wk_flag_FSN = 3 }
         }
      }

      if( VAR_VAL($wk_idx_sd,"Z")<VAR_VAL($wk_idx_bas,"Z") )
      {
         $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE MAGGIORE")
         LogProcedura2("FSN_ControlloFUSION")

         if( $wk_dis_retro==0 )
         {
            $wk_flag_FSN = 2
            //Luca 18/07/2019 non posso ridurre la base lavastoviglie
            //if( NOME($wk_idx_sd)=="ScoccaT_BaseLvst" )  { $wk_flag_FSN = 3 }
         }
         //else
         //{
         //   if( IS_MATCH(NOME($wk_idx_sd),"ScoccaT_BaseLvs*") )
         //   {
         //      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] BASE MAGGIORE -- LVST MINORE")
         //      LogProcedura2("FSN_ControlloFUSION")
         //      $wk_flag_FSN = 4
         //   }
         //
         //}
      }

      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] FSN_flag_",$wk_verso_chk,"=",STR($wk_flag_FSN))
      LogProcedura2("FSN_ControlloFUSION")

      //basi tecniche non riducibili
      if( NOME($wk_idx_bas)=="ScoccaT_BaseLvst"
        | NOME($wk_idx_bas)=="ScoccaT_BaseLavatrice"
        | NOME($wk_idx_bas)=="ScoccaT_BaseForno"
        | NOME($wk_idx_bas)=="ScoccaT_BaseFrigo"
        | NOME($wk_idx_bas)=="ScoccaT_BaseCantinetta" )
      {
         if( $wk_flag_FSN==2 | $wk_flag_FSN==3 ) { $wk_flag_FSN = 0 }
      }

      VAR_VALUE_SET($wk_idx_bas,$wk_nome_var_fg,$wk_flag_FSN)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bas) , " no_agganciati no_ridisegna //FSN_ControlloFUSION"))

      $FSN_debug_msg  = STRCAT("TEST IDX [",STR($wk_idx_bas),"] RICALCOLO")
      LogProcedura2("FSN_ControlloFUSION")
   }

   //controllo gli angolo sx/dx delle basi
   //se ho un bifacciale retro a sx/dx (non il 'mio' bifacciale) devo:
   //- ridurre la base (e la barra) per far spazio al fianco di finitura se il fianco di finitura in questione non copre tutto il bifacciale
   //- ridurre il bifacciale se il fianco di finitura è della stessa dimensione
   PROCEDURA FSN_ControlloFUSION_Retro
   {
      $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] CHECK ",UPPER($wk_verso_chk))
      LogProcedura2("FSN_ControlloFUSION")

      //Se non esiste la variabile, esco subito
      if( VAR_EXIST($wk_idx_bas,"FSN_flag_SX")==0 )
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] VARIABILI FUSION NON TROVATE - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      //se c'è già una riduzione FUSION nel lato che sto testando escp
      $wk_nome_var_fg = STRCAT("FSN_flag_",UPPER($wk_verso_chk))
      if( VAR_VAL($wk_idx_bas,$wk_nome_var_fg)>0 )
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] FLAG ",UPPER($wk_verso_chk)," FLAG_FUSION GIA' SETTATO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      if( IS_VAR_FIXED($wk_idx_bas,$wk_nome_var_fg)>0 )
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] FLAG ",UPPER($wk_verso_chk)," FORZATO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      //verifico se non ho un'altra base a sx/dx e devo avere il fianco di finitura
      $wk_idx_sd = -1
      if( VAR_EXIST($wk_idx_bas,STRCAT("idx_",LOWER($wk_verso_chk))) )
      {
         SET_#($wk_idx_bas)
         $wk_idx_sd = #idx_sx
         if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_sd = #idx_dx }

         if( IS_IDX($wk_idx_sd)==1 )
         {
            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] IDX_",UPPER($wk_verso_chk),"=",STR($wk_idx_sd)," - ESCO")
            LogProcedura2("FSN_ControlloFUSION")
            EXITSUB()
         }
      }
      else
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] IDX_",UPPER($wk_verso_chk)," NON TROVATO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      //verifico presenza fianco di finitura
      $wk_idx_fia_sd = -1
      if( VAR_EXIST($wk_idx_bas,STRCAT("idx_fiaf_",LOWER($wk_verso_chk))) )
      {
         SET_#($wk_idx_bas)
         $wk_idx_fia_sd = #idx_fiaf_sx
         if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_fia_sd = #idx_fiaf_dx }

         if( IS_IDX($wk_idx_fia_sd)==0 )
         {
            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] NON E' PRESENTE IL FIANCO DI FINITURA - ESCO")
            LogProcedura2("FSN_ControlloFUSION")
            EXITSUB()
         }
      }
      else
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] VARIABILI IDX FIANCO FINITURA NON ESISTONO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      //se sono arrivato qui verifico la presenza della barra e di un bifacciale vicino
      $wk_idx_near_sd = -1
      if( VAR_EXIST($wk_idx_bas,STRCAT("idx_near_ang_r",LOWER($wk_verso_chk))) )
      {
         SET_#($wk_idx_bas)
         $wk_idx_near_sd = #idx_near_ang_rsx
         if( UPPER($wk_verso_chk)=="DX" ) { $wk_idx_near_sd = #idx_near_ang_rdx  }
      }
      else
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] VARIABILI IDX NEAR NON ESISTONO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      BOX_MODE(0)
      NEAR_GLOBALE("$wk_barre",$wk_idx_near_sd,1,0,"BarraIsola")

      BOX_MODE(0)
      NEAR_GLOBALE("$wk_bifacc1",$wk_idx_near_sd,1,0,"Cuc_AntaBifacciale")

      //filtro il bifacciale, escludendo il bifacciale della base corrente (devo tenere quello con stesso angolo
      //$FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] $wk_barre=",STR($wk_barre)," - ESCO")
      //LogProcedura2("FSN_ControlloFUSION")
      //$FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] $wk_bifacc1=",STR($wk_bifacc1)," - ESCO")
      //LogProcedura2("FSN_ControlloFUSION")

      $wk_bifacc = 0
      $wk_j = 1
      while ( $wk_j<=$wk_bifacc1 )
      {
         $wk_ang_bas = ANG_TOT2($wk_idx_bas)
         if( $wk_ang_bas<0 )    { $wk_ang_bas = $wk_ang_bas + 360 }
         if( $wk_ang_bas>=360 ) { $wk_ang_bas = $wk_ang_bas - 360 }
         $wk_ang_bif = ANG_TOT2($wk_bifacc1[$wk_j])
         if( $wk_ang_bif<0 )    { $wk_ang_bif = $wk_ang_bif + 360 }
         if( $wk_ang_bif>=360 ) { $wk_ang_bif = $wk_ang_bif - 360 }

         if( ABS($wk_ang_bas-$wk_ang_bif)<0.1 )
         {
            $wk_ne = $wk_bifacc + 1
            $wk_bifacc = $wk_ne
            $wk_bifacc[$wk_ne] = $wk_bifacc1[$wk_j]
         }

         $wk_j = $wk_j + 1
      }

      if( $wk_barre==0 )
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] TROVATE 0 BARRE - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }
      if( $wk_bifacc==0 )
      {
         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] TROVATE 0 BIFACCIALE STESSO ANGOLO - ESCO")
         LogProcedura2("FSN_ControlloFUSION")
         EXITSUB()
      }

      $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] BARRE=",STR($wk_barre), " BIFACC=",STR($wk_bifacc))
      LogProcedura2("FSN_ControlloFUSION")

      //ora devo verificare se devo ridurre la base + barra oppure ridurre il bifacciale
      $wk_idx_bar = $wk_barre[1]
      $wk_idx_bif = $wk_bifacc[1]

      $wk_idx_ffin  = $wk_idx_fia_sd

      $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] IDX_BARRA=",STR($wk_idx_bar), " N BIFACC=",STR($wk_bifacc))
      LogProcedura2("FSN_ControlloFUSION")

      $wk_rid_base  = 0
      $wk_rid_barra = 0
      $wk_rid_bif   = 0

      $wk_j = 1
      while ( $wk_j<=$wk_bifacc )
      {
         $wk_idx_bif = $wk_bifacc[$wk_j]

         $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] IDX_BARRA=",STR($wk_idx_bar), " IDX_BIFACC=",STR($wk_idx_bif))
         if( VAR_VAL($wk_idx_ffin,"Y")<VAR_VAL($wk_idx_bif,"Y") )
         {
            $wk_rid_base  = 1
            $wk_rid_barra = 1

            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] RIDUCO BASE" )
            LogProcedura2("FSN_ControlloFUSION")
            $wk_flag_FSN = 2
            VAR_VALUE_SET($wk_idx_bas,$wk_nome_var_fg,$wk_flag_FSN)
            COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bas) , " no_agganciati no_ridisegna //FSN_ControlloFUSION BASE --- "))

            //se la barra ha lo stesso angolo, riduco stesso lato, altrimenti opposto
            $wk_nome_var_br = STRCAT("FSN_RRid_",UPPER($wk_verso_chk))

            $wk_ang_bas = ANG_TOT2($wk_idx_bas)
            if( $wk_ang_bas<0 )    { $wk_ang_bas = $wk_ang_bas + 360 }
            if( $wk_ang_bas>=360 ) { $wk_ang_bas = $wk_ang_bas - 360 }
            $wk_ang_bar = ANG_TOT2($wk_idx_bar)
            if( $wk_ang_bar<0 )    { $wk_ang_bar = $wk_ang_bar + 360 }
            if( $wk_ang_bar>=360 ) { $wk_ang_bar = $wk_ang_bar - 360 }

            //angolo diverso
            if( ABS($wk_ang_bas-$wk_ang_bar)>0.1 )
            {
               if( $wk_verso_chk=="SX" ) { $wk_nome_var_br = "FSN_RRid_DX" }
               else                      { $wk_nome_var_br = "FSN_RRid_SX" }
            }

            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] RIDUCO BARRA --> " ,$wk_nome_var_br )
            LogProcedura2("FSN_ControlloFUSION")

            VAR_VALUE_SET($wk_idx_bar,$wk_nome_var_br,1)

            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] RIDUCO BARRA" )
            LogProcedura2("FSN_ControlloFUSION")

            COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bar) , " no_agganciati no_ridisegna //FSN_ControlloFUSION BARRA -- "))
         }

         if( VAR_VAL($wk_idx_ffin,"Y")>=VAR_VAL($wk_idx_bif,"Y") )
         {
            if( $wk_verso_chk=="SX" ) { $wk_nome_var_br = "FSN_RRid_DX" }
            else                      { $wk_nome_var_br = "FSN_RRid_SX" }

            $wk_rid_bif = 1

            VAR_VALUE_SET($wk_idx_bif,$wk_nome_var_br,1)

            $FSN_debug_msg  = STRCAT("CTRL_RETRO TEST IDX [",STR($wk_idx_bas),"] RIDUCO BIFACCIALE" )
            LogProcedura2("FSN_ControlloFUSION")

            COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_bif) , " no_agganciati no_ridisegna //FSN_ControlloFUSION"))
         }

         $wk_j = $wk_j + 1
      }
   }

   //PROCEDURA FSN_ControlloFUSION_SubFianchiFinitura
   //{
   //   $FSN_debug_msg  = "******** CONTROLLO FIANCHI FINITURA ********"
   //   LogProcedura2("FSN_ControlloFUSION")
   //
   //   WITH_ALIAS("$wk_fia","FiancoFin")
   //
   //   if( $wk_fia==0 ) { EXITSUB() }
   //
   //   $wk_i = 1
   //   while ( $wk_i<=$wk_fia )
   //   {
   //      $wk_idx_fia = $wk_fia[$wk_i]
   //      $wk_idx_agg = AGGANCIATA($wk_idx_fia,"*")
   //
   //      if( IS_IDX($wk_idx_agg) )
   //      {
   //         if( IS_MATCH(NOME($wk_idx_agg),"ScoccaT*")==1 )
   //         {
   //            $FSN_debug_msg  = STRCAT("TEST FIANCO IDX [",STR($wk_idx_fia),"] -- AGGANCIATO A BASE [",STR($wk_idx_agg),"]")
   //            LogProcedura2("FSN_ControlloFUSION")
   //
   //            $wk_CNT_STR = CNT_STR($wk_idx_fia)
   //            $wk_pos_agg = LEFT($wk_CNT_STR,1)
   //
   //            $FSN_debug_msg  = STRCAT("TEST FIANCO IDX [",STR($wk_idx_fia),"] -- CNT_STR=",$wk_CNT_STR)
   //            LogProcedura2("FSN_ControlloFUSION")
   //
   //            //se la base ha il flag fusion attivo sul lato del fianco
   //            if( VAR_VAL($wk_idx_agg,STRCAT("FSN_flag_",$wk_pos_agg,"X"))==1 )
   //            {
   //               //se Elemento fusion stessa altezza della base non faccio nulla,
   //               //altrimenti verifico se devo spostare il fianco di finitura
   //               if( VAR_VAL($wk_idx_agg,STRCAT("FSN_alte_",$wk_pos_agg,"X"))<VAR_VAL($wk_idx_agg,"Y") )
   //               {
   //                  //verifico se è già stato spostato
   //                  if( VAR_VAL($wk_idx_fia,"FSN_FiancoInteroBase")==0 )
   //                  {
   //                     //salvo l'info sul fianco
   //                     COMANDO(STRCAT("VAR_CHANGE 1 ",STR($wk_idx_fia)," FSN_FiancoInteroBase=1"))
   //                     //per non segnalare la collisione
   //                     VAR_VALUE_SET($wk_idx_fia,"FSN_FiancoInteroBase",1)
   //
   //                     $wk_cnt_par1 = STRMID(0,18,$wk_CNT_STR)
   //                     $wk_cnt_par2 = SE_NUM($wk_pos_agg=="S",4,-4)
   //                     $wk_cnt_offy = GetParamStrCnt($wk_CNT_STR,"OY")
   //                     $wk_cnt_offz = GetParamStrCnt($wk_CNT_STR,"OZ")
   //                     $wk_cnt_offa = GetParamStrCnt($wk_CNT_STR,"ANG")
   //
   //                     $wk_cnt_new = STRCAT($wk_cnt_par1," ",STR($wk_cnt_par2), " " ,$wk_cnt_offy ," ",$wk_cnt_offz," ",$wk_cnt_offa )
   //                     COMANDO(STRCAT("SETTA ",STR($wk_idx_fia)))
   //                     COMANDO(STRCAT("CONNESSIONE_EDIT ",$wk_cnt_new))
   //
   //                     $FSN_debug_msg  = STRCAT("TEST FIANCO IDX [",STR($wk_idx_fia),"] -- SPOSTO")
   //                     LogProcedura2("FSN_ControlloFUSION")
   //                  }
   //               }
   //            }
   //            else
   //            {
   //               //verifico se è già stato spostato --> ripristino
   //               if( VAR_VAL($wk_idx_fia,"FSN_FiancoInteroBase")==1 )
   //               {
   //                  DEL_VAR_MODIFICATE($wk_idx_fia,"FSN_FiancoInteroBase")
   //                  VAR_VALUE_SET($wk_idx_fia,"FSN_FiancoInteroBase",0)
   //
   //                  $wk_cnt_par1 = STRMID(0,18,$wk_CNT_STR)
   //                  $wk_cnt_par2 = 0
   //                  $wk_cnt_offy = GetParamStrCnt($wk_CNT_STR,"OY")
   //                  $wk_cnt_offz = GetParamStrCnt($wk_CNT_STR,"OZ")
   //                  $wk_cnt_offa = GetParamStrCnt($wk_CNT_STR,"ANG")
   //
   //                  $wk_cnt_new = STRCAT($wk_cnt_par1," ",STR($wk_cnt_par2), " " ,$wk_cnt_offy ," ",$wk_cnt_offz," ",$wk_cnt_offa )
   //                  COMANDO(STRCAT("SETTA ",STR($wk_idx_fia)))
   //                  COMANDO(STRCAT("CONNESSIONE_EDIT ",$wk_cnt_new))
   //
   //                  $FSN_debug_msg  = STRCAT("TEST FIANCO IDX [",STR($wk_idx_fia),"] -- RIPRISTINO")
   //                  LogProcedura2("FSN_ControlloFUSION")
   //               }
   //            }
   //         }
   //      }
   //
   //      $wk_i = $wk_i + 1
   //   }
   //}

   //per gestire da macro
   PROCEDURA FSN_ResetVar
   {
      FSN_ResetVar()
   }

   //} PROCEDURE FUSION

   PROCEDURA CtrlPannello_BifAngolo
   {
      if( ACTION()<=0 | ACTION()==2 )  { EXITSUB() }

      if( FLAG_perColAng==0 )          { EXITSUB() }

      if( IS_IDX(idx_struttura)==0 )   { EXITSUB() }

      VAR_SET_MODE(ATTUALE(),"X_PanAng_Sx",$MODE_SAVEALWAYS)
      VAR_SET_MODE(ATTUALE(),"X_PanAng_Dx",$MODE_SAVEALWAYS)

      wk_xt = VAR_VAL(idx_struttura,"Xt")

      Verso_Col = VAR_VAL(idx_struttura,"Verso")

      PerAccosto = 700
      if( wk_xt<=1238 ) { PerAccosto = 630 }
      if( wk_xt<=1128 ) { PerAccosto = 520 }

      wk_pan_anta = 730
      if( PerAccosto==630 ) { wk_pan_anta = 660 }
      if( PerAccosto==520 ) { wk_pan_anta = 550 }

      wk_x_fro = (X - 2*$Cuc_Aria_Ant_X)
      wk_x_pan = (wk_x_fro - 2*RieX_Pan)

      wk_pan_fix = wk_x_pan - wk_pan_anta

      //pannello anta ha il vetro rientrante di 28mm
      //pannello fisso il vetro che sporge di 25
      wk_pan_fix  = wk_pan_fix  + 25 + 2*$Cuc_Aria_Ant_X
      wk_pan_anta = wk_pan_anta + 2*$Cuc_Aria_Ant_X

      X_PanAng_Sx = wk_pan_anta
      X_PanAng_Dx = wk_pan_fix

      if( Verso_Col>0 )
      {
         X_PanAng_Sx = wk_pan_fix
         X_PanAng_Dx = wk_pan_anta
      }

      //X_PanAng_Sx = wk_x_fro/2
      //X_PanAng_Dx = wk_x_fro/2
   }

   PROCEDURA CtrlPosizioneKEKU
   {
      // Colonne, procedura dedicata
      if( VAR_VAL(ATTUALE(),"FLAG_perColonna")==1
        | VAR_VAL(ATTUALE(),"FLAG_perColSof")==1 )
      {
         GOSUB CtrlPosizioneKEKU_ColBif
         EXITSUB()
      }

      wk_keku_posy = SE_NUM( Cucina_Versione > 2, 65, 65.5)

      KekuSX1 = 1
      KekuSX2 = 0
      KekuSX3 = 0

      KekuSX1_Y = Y/2
      KekuSX2_Y = 0
      KekuSX3_Y = 0

      if( Yr >= 181)
      {
         KekuSX2   = 1
         KekuSX1_Y = wk_keku_posy
         KekuSX2_Y = Y - wk_keku_posy
      }

      if( Yr > 733)
      {
         KekuSX3   = 1
         KekuSX3_Y = KekuSX1_Y + (KekuSX2_Y  - KekuSX1_Y)/2
      }

      // Staffa snack: se presente, sposto il keku di 70 + 96 = 166mm
      if( ConPianoSNACK == 1) { KekuSX2_Y = KekuSX2_Y - SNACK_RidY - 96 }

      if( Y_Base > 0
        & UN_PADRE("ScoccaT_Base_AirKitchen"))
      {
         KekuSX1 = 1
         KekuSX2 = 1
         KekuSX3 = 0

         KekuSX1_Y = wk_keku_posy
         KekuSX2_Y = Y_Base - wk_keku_posy
         KekuSX3_Y = Y_Base/2
      }

      KekuDX1 = KekuSX1
      KekuDX2 = KekuSX2
      KekuDX3 = KekuSX3

      KekuDX1_Y = KekuSX1_Y
      KekuDX2_Y = KekuSX2_Y
      KekuDX3_Y = KekuSX3_Y
   }

   PROCEDURA Cuc_AntaBif_Posiziona_Keku
   {
      @VersoStr = SE_STR( @Verso > 0, "Dx", "Sx")
      @VERSOStr = UPPER(@VersoStr)

      @wk_var_escluso = FMT( "Keku{}{}", @VERSOStr, STR(@Numero))
      @escluso = 1 - VAR_VAL( idx_att, @wk_var_escluso)

      // Posizione
      @base_0 = base_0

      /// X
      wk_FSNRid_min = SE_NUM( Cucina_Versione > 2, 1, 0) //Filtro anche negativi
      if( @Verso < 0) {
         @base_0.x = base_0.x + KekuRieSx + SE_NUM( FSN_RidSx > wk_FSNRid_min, FSN_RidSx - wk_FSNRid_min, 0)*FSN_ParX
      }
      if( @Verso > 0) {
         @base_0.x = base_0.x + X - KekuRieDx - @X - SE_NUM( FSN_RidDx > wk_FSNRid_min, FSN_RidDx - wk_FSNRid_min, 0)*FSN_ParX
      }

      /// Y
      @wk_var_posy = FMT( "Keku{}{}_Y", @VERSOStr, STR(@Numero))
      @base_0.y = base_0.y + VAR_VAL( idx_att, @wk_var_posy) - @Y/2

      /// Z
      @base_0.z = base_0.z + Zt - Z - @Z + SE_NUM( Cucina_Versione <= 2, 1, 0)
   }

   PROCEDURA CtrlPosizioneKEKU_ColBif
   {
      KekuSX1 = 1
      KekuSX2 = 1
      KekuSX3 = 1
      KekuSX4 = 1

      Keku_Y = 32

      KekuSX1_Y = 125.5 + $Cuc_Aria_Ant_Y + Keku_Y/2
      KekuSX2_Y = Y - 58.5 - $Cuc_Aria_Ant_Y - Keku_Y/2

      wk_passo = (KekuSX2_Y - KekuSX1_Y - 3*Keku_Y)/3

      KekuSX3_Y = KekuSX1_Y + Keku_Y + wk_passo
      KekuSX4_Y = KekuSX3_Y + Keku_Y + wk_passo

      //per ora tengo allineate
      KekuDX1 = KekuSX1
      KekuDX2 = KekuSX2
      KekuDX3 = KekuSX3
      KekuDX4 = KekuSX4

      KekuDX1_Y = KekuSX1_Y
      KekuDX2_Y = KekuSX2_Y
      KekuDX3_Y = KekuSX3_Y
      KekuDX4_Y = KekuSX4_Y
   }

   PROCEDURA CtrlPosizioneKEKU_FroFixAng
   {
      KekuOff = [128, 172.5, 0]

      KekuSX1 = 0    KekuSX1_Y = KekuOff.y     KekuSX1_OX = 0
      KekuSX2 = 0    KekuSX2_Y = Y - KekuOff.y KekuSX2_OX = 0
      KekuSX3 = 0    KekuSX3_Y = 0             KekuSX3_OX = 0
      KekuSX4 = 0    KekuSX4_Y = 0             KekuSX4_OX = 0
      KekuSX5 = 0    KekuSX5_Y = 0             KekuSX5_OX = 0

      KekuDX1 = 0    KekuDX1_Y = KekuOff.y     KekuDX1_OX = X
      KekuDX2 = 0    KekuDX2_Y = Y - KekuOff.y KekuDX2_OX = X
      KekuDX3 = 0    KekuDX3_Y = 0             KekuDX3_OX = X
      KekuDX4 = 0    KekuDX4_Y = 0             KekuDX4_OX = X
      KekuDX5 = 0    KekuDX5_Y = 0             KekuDX5_OX = X

      KekuSU1 = 0    KekuSU1_OX = KekuOff.x
      KekuSU2 = 0    KekuSU2_OX = X - KekuOff.x

      KekuIN1 = 0    KekuIN1_OX = KekuOff.x
      KekuIN2 = 0    KekuIN2_OX = X - KekuOff.x

      if( UN_PADRE("ScoccaT_B*"))                       { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder) { EXITSUB() }

      // Orizzontali
      VT_DIB_NUMERO = 4

      KekuSU1 = 1
      KekuSU2 = 1

      KekuIN1 = 1
      KekuIN2 = 1

      // Verticali
      KekuV_YIn = Y - 2*KekuOff.y

      // NOTA: specifiche perse per le 2.0, mancanti per le 3.0
      //       - 2.0: replico il comportamento del cam, sempre 4 cerniere
      //       - 3.0: invento qualcosa in base alle dimensioni passate a gestionale finora
      KekuV = 4
      if( Cucina_Versione > 2)
      {
         KekuV = 3
         if( Y - $Cuc_Spe_Cop - $Cuc_Spe_Fnd - 1 > 1246) { KekuV = 4 }
         if( Y - $Cuc_Spe_Cop - $Cuc_Spe_Fnd - 1 > 1942) { KekuV = 5 }
      }

      VT_DIB_NUMERO = VT_DIB_NUMERO + 2*KekuV

      KekuVNum = 0
      while( inc(KekuVNum) <= KekuV)
      {
         VAR_VALUE_SET( idx_att, FMT( "KekuSX{}", STR(KekuVNum)), 1)
         VAR_VALUE_SET( idx_att, FMT( "KekuDX{}", STR(KekuVNum)), 1)

         if( KekuVNum > 2)
         {
            KekuV_YPos = KekuOff.y + ((KekuVNum - 2)*(KekuV_YIn/(KekuV - 1)))

            VAR_VALUE_SET( idx_att, FMT( "KekuSX{}_Y", STR(KekuVNum)), KekuV_YPos)
            VAR_VALUE_SET( idx_att, FMT( "KekuDX{}_Y", STR(KekuVNum)), KekuV_YPos)
         }
      }
   }

   PROCEDURA CtrlPosizioneKEKU_FrontaleFisso
   {
      if( ins2_att == $ins2_componente ) { EXITSUB() }

      KekuSX1 = 1
      KekuSX2 = 0
      KekuSX3 = 0

      KekuSX1_Y = Y/2
      KekuSX2_Y = 0
      KekuSX3_Y = 0

      KekuDX1 = 0
      KekuDX2 = 0
      KekuDX3 = 0

      KekuDX1_Y = Y/2
      KekuDX2_Y = 0
      KekuDX3_Y = 0

      if( Y >= 181 )
      {
         KekuSX2   = 1
         KekuSX1_Y = SE_NUM( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2, 63.5, 64)
         KekuSX2_Y = Y - KekuSX1_Y
      }

      if( Y > 733 )
      {
         KekuSX3   = 1
         KekuSX3_Y = KekuSX1_Y + (KekuSX2_Y  - KekuSX1_Y)/2
      }

      KekuDX1 = KekuSX1
      KekuDX2 = KekuSX2
      KekuDX3 = KekuSX3

      KekuDX1_Y = KekuSX1_Y
      KekuDX2_Y = KekuSX2_Y
      KekuDX3_Y = KekuSX3_Y
   }

   //Luca 15/10/2019 definisco i punti di scasso da utilizzare poi nelle stampe
   PROCEDURA DefPuntiScasso
   {
      base_so = base_0
      alto_ne = alto_2

      pnt_scs_top_0 = base_0
      pnt_scs_top_1 = base_1
      pnt_scs_top_2 = base_2
      pnt_scs_top_3 = base_3

      //Luca 10/06/2020
      //if( VAR_ELD_TipoIncasso==1 )
      //if( VAR_ELD_TipoIncasso==1 | VAR_ELD_TipoIncasso==3 )
      //Luca 20/01/2021 riporto modifiche LAGO
      if( VAR_ELD_TipoIncasso==1 )
      {
         //wk_riex = VAR_ELD_EldomX/2 - VAR_ELD_ScassoX/2
         //wk_riez = VAR_ELD_EldomZ/2 - VAR_ELD_ScassoZ/2

         pnt_scs_top_0.x = pnt_scs_top_0.x - VAR_ELD_FT_RieX
         //pnt_scs_top_0.z = pnt_scs_top_0.z - VAR_ELD_FT_RieX
         pnt_scs_top_0.z = pnt_scs_top_0.z - VAR_ELD_FT_RieZ

         pnt_scs_top_1.x = pnt_scs_top_1.x - VAR_ELD_FT_RieX
         //pnt_scs_top_1.z = pnt_scs_top_1.z + VAR_ELD_FT_RieX
         pnt_scs_top_1.z = pnt_scs_top_1.z + VAR_ELD_FT_RieZ

         pnt_scs_top_2.x = pnt_scs_top_2.x + VAR_ELD_FT_RieX
         //pnt_scs_top_2.z = pnt_scs_top_2.z + VAR_ELD_FT_RieX
         pnt_scs_top_2.z = pnt_scs_top_2.z + VAR_ELD_FT_RieZ

         pnt_scs_top_3.x = pnt_scs_top_3.x + VAR_ELD_FT_RieX
         //pnt_scs_top_3.z = pnt_scs_top_3.z - VAR_ELD_FT_RieX
         pnt_scs_top_3.z = pnt_scs_top_3.z - VAR_ELD_FT_RieZ
      }

      pnt_scs_stop_0 = base_0    pnt_scs_stop_0.x = base_0.x - VAR_ELD_ST_RieScS      pnt_scs_stop_0.z = base_0.z - VAR_ELD_ST_RieScS
      pnt_scs_stop_1 = base_1    pnt_scs_stop_1.x = base_1.x - VAR_ELD_ST_RieScS      pnt_scs_stop_1.z = base_1.z + VAR_ELD_ST_RieScS
      pnt_scs_stop_2 = base_2    pnt_scs_stop_2.x = base_2.x + VAR_ELD_ST_RieScS      pnt_scs_stop_2.z = base_2.z + VAR_ELD_ST_RieScS
      pnt_scs_stop_3 = base_3    pnt_scs_stop_3.x = base_3.x + VAR_ELD_ST_RieScS      pnt_scs_stop_3.z = base_3.z - VAR_ELD_ST_RieScS

      if( NOME(ATTUALE())=="LavelloGenerico" )
      {
         if( VAR_ELD_TipoIncasso==2 | VAR_ELD_TipoIncasso==3 )
         {
            pnt_scs_stop_0.z = base_0.z - VAR_ELD_ST_RieScS_Z
            pnt_scs_stop_1.z = base_1.z + VAR_ELD_ST_RieScS_Z
            pnt_scs_stop_2.z = base_2.z + VAR_ELD_ST_RieScS_Z
            pnt_scs_stop_3.z = base_3.z - VAR_ELD_ST_RieScS_Z
         }
      }

      pnt_scs_centro = [X/2,Y,Z/2]

      //puntie lettere bordi per stampa
      pnt_stp_letter_rt = pnt_scs_top_0    pnt_stp_letter_rt.x = pnt_stp_letter_rt.x + X/2  pnt_stp_letter_rt.z = pnt_stp_letter_rt.z + 10
      pnt_stp_letter_sx = pnt_scs_top_0    pnt_stp_letter_sx.x = pnt_stp_letter_sx.x + 10   pnt_stp_letter_sx.z = pnt_stp_letter_sx.z + Z/2
      pnt_stp_letter_dx = pnt_scs_top_3    pnt_stp_letter_dx.x = pnt_stp_letter_dx.x - 10   pnt_stp_letter_dx.z = pnt_stp_letter_dx.z + Z/2
      pnt_stp_letter_fr = pnt_scs_top_1    pnt_stp_letter_fr.x = pnt_stp_letter_fr.x + X/2  pnt_stp_letter_fr.z = pnt_stp_letter_fr.z - 10
   }

   PROCEDURA AttrezzaEldomSuTop
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      ATTREZZA_SU = "BASE"
      if( IS_MATCH(NOME(idx_ref),"Top*") )      { ATTREZZA_SU = "TOP" }
      if( IS_MATCH(NOME(idx_ref),"Mensola_*") ) { ATTREZZA_SU = "TOP" }

      // Su top sp.4 non si possono attrezzare lavelli\pc
      if( IS_MATCH( VAR_VAL_STR( ATTUALE(), "VAR_TipoTopStr"), "*_4"))
      {
         COMANDO2( FMT( "CANCELLA {} //AttrezzaEldomSuTop", STR(ATTUALE())))
         EXITSUB()
      }

      idx_top = -1
      if( VAR_EXIST( idx_ref, "idx_top") )
      {
         SET_#(idx_ref)
         if( IS_IDX(#idx_top) ) { idx_top = #idx_top }
      }

      if( ATTREZZA_SU == "TOP" ) { idx_top = idx_ref }

      if( IS_VAR_FIXED(ATTUALE(),"OffsetX")==0 ) { OffsetX = @X/2 - X/2 }
      if( IS_VAR_FIXED(ATTUALE(),"OffsetZ")==0 )
      {
         OffsetZ = @Z/2 - Z/2

         if( IS_IDX(idx_top) )
         {
            if( NOME(idx_top)=="Top_2P0" )
            {
               if( VAR_VAL(GetTopLevel(ATTUALE()),"Zt")>631 ) { OffsetZ = 115 - VAR_VAL(idx_top,"Sbrd_FR") }
               else                                           { OffsetZ = 80  - VAR_VAL(idx_top,"Sbrd_FR") }

               //Luca 23/03/2020  mantis 22263: Posizione std lavello sottotop
               //per i lavelli sottotop gentilmente ti chiedo di impostare il limite frontale a 72mm dal fronte del SOTTOTOP
               if( VAR_VAL(ATTUALE(),"VAR_ELD_TipoIncasso")==2 ) { OffsetZ = 72 - VAR_VAL(idx_top,"Sbrd_ST_FR") + VAR_ELD_FT_RieZ }
               //Luca 10/06/2020
               if( NOME(ATTUALE())=="LavelloGenerico"
                 & VAR_VAL(ATTUALE(),"VAR_ELD_TipoIncasso")==3 ) { OffsetZ = 72 - VAR_VAL(idx_top,"Sbrd_ST_FR") + VAR_ELD_FT_RieZ }
            }
            else
            {
               if( VAR_VAL(GetTopLevel(ATTUALE()),"Zt")>631 ) { OffsetZ = 115 - VAR_VAL(idx_top,"aa_sbrd_fr") }
               else                                           { OffsetZ = 80  - VAR_VAL(idx_top,"aa_sbrd_fr") }
            }
         }
      }

      base_0.x = @base_0.x + OffsetX
      base_0.z = @base_0.z + @Z - OffsetZ - Z
      base_0.y = @alto_0.y

      //Simone 22/06/2022
      if( NOME(ATTUALE()) == "LavaboKERA" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"OffsetX")==0 ) { OffsetX = @X/2 - X/2  }
         if( IS_VAR_FIXED(ATTUALE(),"OffsetZ")==0 )
         {
            OffsetZ = @Zt/2 - Z/2

            //senza miscelatore centrato rimane centrato
            if( VAR_VAL(ATTUALE(),"VAR_Rubinetto") == 1 )
            {
               //230 da fronte a centro foro lavabo
               if( VAR_VAL(idx_top,"Zt") >= 520 ) { OffsetZ = 230 - Z/2 }
               //if( VAR_VAL(idx_top,"Zt") >= 630 ) { OffsetZ = 315 - Z/2 }
               if( VAR_VAL(idx_top,"Zt") >= 630 ) { OffsetZ = 80 }
            }
         }

         base_0.x = @base_0.x + OffsetX
         base_0.z = @base_0.z + @Zt - OffsetZ - Z
      }

      //Luca 20/12/2019
      if( NOME(ATTUALE())=="LavaboKERA" ) { EXITSUB() }

      //Luca 14/07/2020
      if( ATTREZZA_SU == "BASE" ) { base_0.y = @alto_0.y - Y + VAR_ELD_YSopra }

      if( IS_IDX(idx_top) )
      {
         base_0.y = @alto_0.y + VAR_VAL(idx_top,"SpessorePiano") - VAR_ELD_YRientr
         if( VAR_ELD_TipoIncasso==1 )
         {
            base_0.y = @alto_0.y + VAR_VAL(idx_top,"SpessorePiano") - VAR_ELD_YRientr - VAR_ELD_YSopra
         }

         if( VAR_ELD_TipoIncasso==2 )
         {
            base_0.y = @alto_0.y - VAR_ELD_YRientr - VAR_ELD_YSopra
         }

         //Luca 10/06/2020
         if( NOME(ATTUALE())=="PianoCotturaGenerico" & VAR_ELD_TipoIncasso==3 )
         {
            base_0.y = @alto_0.y + VAR_VAL(idx_top,"SpessorePiano") - VAR_ELD_YRientr - VAR_ELD_YSopra
         }
         if( NOME(ATTUALE())=="LavelloGenerico" & VAR_ELD_TipoIncasso==3 )
         {
            base_0.y = @alto_0.y - VAR_ELD_YRientr - VAR_ELD_YSopra
         }
      }
   }

   PROCEDURA SetVar_ScassoTopGenerico
   {
      //assegno dei default per ACTION = 0
      if( ACTION()==0 )
      {
         VAR_ELD_EldomX      = 200
         VAR_ELD_EldomZ      = 100
         VAR_ELD_TipoIncasso = 0
         VAR_ELD_ScassoX     = 200
         VAR_ELD_ScassoZ     = 100

         VAR_ELD_Raggio      = 0
         VAR_ELD_YSopra      = 10
         VAR_ELD_YRientr     = 30

         Y  =  VAR_ELD_YSopra + VAR_ELD_YRientr

         VAR_ELD_ScassoDelta = 0

         VAR_ELD_ScassoMaxX  = VAR_ELD_ScassoX + VAR_ELD_ScassoDelta
         VAR_ELD_ScassoMaxZ  = VAR_ELD_ScassoZ + VAR_ELD_ScassoDelta

         VAR_ELD_FT_RieX     = 0
         VAR_ELD_FT_RieY     = 0
         VAR_ELD_FT_RieZ     = 0
      }

      if( $ATTIVA_DLL )
      {
         if( ACTION()==2 & CMD()==$CMD_INTERATTIVO & $PLIKO==0 ) { SchedaTecnica = 1 }
      }

      wk_PC_LV = 0
      GOSUB DefParSchedaTecnicaPianoCottura

      X = VAR_ELD_ScassoX
      Z = VAR_ELD_ScassoZ
      Y = VAR_ELD_YSopra + VAR_ELD_YRientr

      VAR_ELD_FT_RieX = 0
      VAR_ELD_FT_RieZ = 0
      if( VAR_ELD_TipoIncasso>0 )
      {
         VAR_ELD_FT_RieX = (VAR_ELD_EldomX - VAR_ELD_ScassoX)/2
         VAR_ELD_FT_RieZ = (VAR_ELD_EldomZ - VAR_ELD_ScassoZ)/2

         VAR_ELD_ST_RieScS = 1
         if( VAR_ELD_TipoIncasso==1 & IS_IDX(idx_top) )
         {
            if( VAR_ELD_FT_RieY >= VAR_VAL(idx_top,"Y") ) { VAR_ELD_ST_RieScS = 0 }
         }
      }
   }

   PROCEDURA SetVar_PCotturaLavello
   {
      //assegno dei default per ACTION = 0
      if( ACTION()==0 )
      {
         VAR_ELD_EldomX      = 600
         VAR_ELD_EldomZ      = 500
         VAR_ELD_TipoIncasso = 0
         VAR_ELD_TipoPC      = 0
         VAR_ELD_ScassoX     = 580
         VAR_ELD_ScassoZ     = 480

         VAR_ELD_ScassoDelta = 0

         VAR_ELD_ScassoMaxX  = VAR_ELD_ScassoX + VAR_ELD_ScassoDelta
         VAR_ELD_ScassoMaxZ  = VAR_ELD_ScassoZ + VAR_ELD_ScassoDelta

         VAR_ELD_Raggio      = 10

         VAR_ELD_YSopra      = 2.5
         VAR_ELD_YRientr     = 150

         VAR_ELD_ST_RieScS   = 1

         Y  =  VAR_ELD_YSopra + VAR_ELD_YRientr

         VAR_ELD_FT_RieX     = 0
         VAR_ELD_FT_RieY     = 0
         //Luca 12/02/2020
         VAR_ELD_FT_RieZ     = 0
      }

      GOSUB DefParSchedaTecnicaPianoCottura

      if( $ATTIVA_DLL )
      {
         GOSUB Ctrl_InsEldom
         if( ACTION()==2 & CMD()==$CMD_INTERATTIVO & $PLIKO==0 )
         {
            if( InsEldom==0 ) { SchedaTecnica = 1 }
         }
      }

      //Luca 24/03/2020
      VAR_ELD_ST_RieScS = 1

      wk_PC_LV = 0
      if( NOME(ATTUALE())=="LavelloGenerico" ) { wk_PC_LV = 1 }

      //setto le dimensione del piano eldom
      X = VAR_ELD_ScassoX
      Z = VAR_ELD_ScassoZ
      Y = VAR_ELD_YSopra + VAR_ELD_YRientr

      VAR_ELD_FT_RieX = 0
      VAR_ELD_FT_RieZ = 0
      if( VAR_ELD_TipoIncasso>0 )
      {
         VAR_ELD_FT_RieX = (VAR_ELD_EldomX - VAR_ELD_ScassoX)/2
         //Luca 12/02/2020
         VAR_ELD_FT_RieZ = (VAR_ELD_EldomZ - VAR_ELD_ScassoZ)/2

         //Luca 24/03/2020
         VAR_ELD_ST_RieScS = 1
         if( VAR_ELD_TipoIncasso==1 & IS_IDX(idx_top) )
         {
            if( VAR_ELD_FT_RieY >= VAR_VAL(idx_top,"Y") ) { VAR_ELD_ST_RieScS = 0 }
         }
         //Luca 10/06/2020
         if( NOME(ATTUALE())=="PianoCotturaGenerico" & VAR_ELD_TipoIncasso==3 & IS_IDX(idx_top) )
         {
            if( VAR_ELD_FT_RieY >= VAR_VAL(idx_top,"Y") ) { VAR_ELD_ST_RieScS = 0 }
         }
      }

      if( NOME(ATTUALE())=="LavelloGenerico" )
      {
         VAR_ELD_ST_RieScS = 1
         if( VAR_ELD_TipoIncasso==1 & IS_IDX(idx_top) )
         {
            if( VAR_ELD_FT_RieY >= VAR_VAL(idx_top,"Y") ) { VAR_ELD_ST_RieScS = 0 }
         }
         //Luca 10/06/2020
         //if( VAR_ELD_TipoIncasso==2 ) { VAR_ELD_ST_RieScS = (VAR_ELD_EldomX - VAR_ELD_ScassoX)/2 }
         if( VAR_ELD_TipoIncasso==2 | VAR_ELD_TipoIncasso==3 )
         {
            VAR_ELD_ST_RieScS   = (VAR_ELD_EldomX - VAR_ELD_ScassoX)/2
            VAR_ELD_ST_RieScS_Z = (VAR_ELD_EldomZ - VAR_ELD_ScassoZ)/2
         }

         //integrato quarzo
         if( IntegratoQuarzo )
         {
            VAR_ELD_ST_RieScS = VAR_ELD_FT_RieX + 12.5
            VAR_ELD_ST_RieScS = VAR_ELD_FT_RieZ + 12.5
            VAR_ELD_ST_RieScS_Z = VAR_ELD_ST_RieScS
         }
      }

      //Luca 16/05/2022 aumento scasso sottotop
      if( AppoggioWW80 == 1 ) { VAR_ELD_ST_RieScS = 12.5 }
   }

   PROCEDURA DefParSchedaTecnicaPianoCottura
   {
      if( SchedaTecnica==0 )  { EXITSUB() }

      DEL_VAR_MODIFICATE(ATTUALE(),"SchedaTecnica")
      SchedaTecnica = 0

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      //"Scheda tecnica Piano Cottura"
      $wk_title = STRCAT(MSG(1071)," ",MSG(1010))
      if( wk_PC_LV==1 )  { $wk_title = STRCAT(MSG(1071)," ",MSG(1011)) }

      if( NOME(ATTUALE()) == "ScassoTopGenerico" ) { $wk_title = MSG(1071) }

      //$wk_image = STRCAT($path_bmp,"Dialog\PCotturaAppoggio.png")
      //if( VAR_ELD_TipoIncasso==1 ) { $wk_image = STRCAT($path_bmp,"Dialog\PCotturaFiloTop.png") }
      //if( VAR_ELD_TipoIncasso==2 ) { $wk_image = STRCAT($path_bmp,"Dialog\PCotturaSottoTop.png") }
      //$wk_image_red_arrow = STRCAT($path_bmp,"Dialog\RedArrow.png")

      $wk_image = STRCAT($path_bdm,"bmp\Dialog\PCotturaAppoggio.png")
      if( VAR_ELD_TipoIncasso==1 ) { $wk_image = STRCAT($path_bdm,"bmp\Dialog\PCotturaFiloTop.png") }
      if( VAR_ELD_TipoIncasso==2 ) { $wk_image = STRCAT($path_bdm,"bmp\Dialog\PCotturaSottoTop.png") }

      $wk_image_red_arrow = STRCAT($path_bdm,"bmp\Dialog\RedArrow.png")

      //RADIO BUTTON - "Tipologia Incasso:"
      $wk_dsc_tpinc = MSG(1072)
      $wk_dsc_tpinc_opz1 = MSG(1073)
      $wk_dsc_tpinc_opz2 = MSG(1074)
      $wk_dsc_tpinc_opz3 = MSG(1075)

      $wk_val_tpinc_opz1 = SE_NUM(VAR_ELD_TipoIncasso==0,1,0)
      $wk_val_tpinc_opz2 = SE_NUM(VAR_ELD_TipoIncasso==1,1,0)
      $wk_val_tpinc_opz3 = SE_NUM(VAR_ELD_TipoIncasso==2,1,0)

      //"Tipologia Eldom:"  "GAS" - "Induzione"
      $wk_dsc_tpeld      = MSG(1076)
      $wk_dsc_tpeld_opz1 = MSG(1077)
      $wk_dsc_tpeld_opz2 = MSG(1078)

      $wk_val_tpeld_opz1 = SE_NUM(VAR_ELD_TipoPC==0,1,0)
      $wk_val_tpeld_opz2 = SE_NUM(VAR_ELD_TipoPC==1,1,0)

      //Luca 17/07/2020 lavello sottotop
      if( wk_PC_LV==1 )
      {
         if( VAR_ELD_TipoIncasso == 2  )
         {
            VAR_ELD_ScassoX = VAR_ELD_ScassoX + VAR_ELD_ST_MaggDim
            VAR_ELD_ScassoZ = VAR_ELD_ScassoZ + VAR_ELD_ST_MaggDim

            VAR_ELD_EldomX = VAR_ELD_EldomX - VAR_ELD_ST_MaggDim
            VAR_ELD_EldomZ = VAR_ELD_EldomZ - VAR_ELD_ST_MaggDim
         }
      }

      $wk_xeld = STR(VAR_ELD_EldomX)
      $wk_zeld = STR(VAR_ELD_EldomZ)
      $wk_xscs = STR(VAR_ELD_ScassoX)
      $wk_zscs = STR(VAR_ELD_ScassoZ)
      $wk_rag  = STR(VAR_ELD_Raggio)
      $wk_delt = STR(VAR_ELD_ScassoDelta)
      $wk_ysup = STR(VAR_ELD_YSopra)
      $wk_yrie = STR(VAR_ELD_YRientr)
      $wk_xrft = STR(VAR_ELD_FT_RieX)

      //alcuni valori possono essere ricalcolati, ma in apertura di dialog recupero quello che sono
      //stati inseriti dall'operatore
      if( VAR_FirmaEldom!="" )
      {
         $wk_xscs = GetParametroFirmaEldom(VAR_FirmaEldom,5)
         $wk_zscs = GetParametroFirmaEldom(VAR_FirmaEldom,6)
         $wk_rag  = GetParametroFirmaEldom(VAR_FirmaEldom,8)
      }

      $wk_leg_xeld    = "[ XE ] "
      $wk_leg_zeld    = "[ ZE ] "
      $wk_leg_xscs    = "[ XS ] "
      $wk_leg_zscs    = "[ ZS ] "
      $wk_leg_rag     = "[ RA ] "
      $wk_leg_delta   = "[ DT ] "
      $wk_leg_ysup    = "[ YS ] "
      $wk_leg_yrie    = "[ YR ] "
      $wk_leg_xrft    = "[ XRS ] "

      $wk_dsc_xeld  = MSG(1179) //"Larghezza:"
      $wk_dsc_zeld  = MSG(1180) //"Profondità:"
      $wk_dsc_xscs  = MSG(1192) //"X Scasso:"
      $wk_dsc_zscs  = MSG(1193) //"Z Scasso:"
      $wk_dsc_rag   = MSG(1194) //"Raggio:"
      $wk_dsc_delta = MSG(1195) //"Delta Scasso:"
      $wk_dsc_ysup  = MSG(1196) //"Altezza superiore:"
      $wk_dsc_yrie  = MSG(1197) //"Altezza Rientro:"
      $wk_dsc_xrft  = MSG(1198) //"X Scasso Top:"

      $wk_dsc_note = MSG(1199) //"Note:"
      $wk_val_not1 = ""
      $wk_val_not2 = ""
      $wk_val_not3 = ""
      $wk_val_not4 = ""

      $wk_idx_top = idx_top
      GOSUB Sub_Note_SchedaTecnicaPianoCottura

      //gestione errori - reset sempre
      $wk_errore_xeld = 0

      $wk_posx_leg = 20
      $wk_posx_lab = 60
      $wk_posx_edt = 190

      $wk_dimx_leg = 40
      $wk_dimx_lab = 110
      $wk_dimx_edt = 50

      $wk_esci_dlg = 0
      while( $wk_esci_dlg==0 )
      {
         $wk_nome_dlg = "SchedaTecnicaPCottura"
         if( wk_PC_LV==1 )  { $wk_nome_dlg = "SchedaTecnicaLavello"  }

         if( NOME(ATTUALE()) == "ScassoTopGenerico" ) { $wk_nome_dlg = "SchedaTecnicaScassoGen" }

         COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|",$wk_nome_dlg,APICI()))

         GOSUB Sub_CtrlErrori_SchedaTecnicaPianoCottura

         if( $wk_errore_xeld + $wk_errore_zeld
           + $wk_errore_xscs + $wk_errore_zscs
           //Luca 26/06/2020
           + $wk_errore_rag
           + $wk_errore_ysup + $wk_errore_yrie == 0 ) { $wk_esci_dlg = 1 }

         //non controllo in caso di annulla e in caso di mancanza di valori
         if( $wk_esci_dlg==1 & $DlgResult__==1 )
         {
            //devo verificare se con i valori inseriti è possibile produrre il top
            //1° -- verifico che il raggio inserito non sia minore del raggio minimo possibile
            if( ATOI($wk_rag)<$wk_raggio_min )
            {
               //verifico se posso star dentro aumentando lo scasso ( e il raggio di conseguenza )
               $wk_diff_raggi = $wk_raggio_min - ATOI($wk_rag)
               if( $wk_diff_raggi<=ATOI($wk_delt) )
               {
                  a = 1
               }
               else
               {
                  wk_msg = STRCAT(MSG(1079),"\n",MSG(1080))
                  if( wk_PC_LV==1 ) { wk_msg = STRCAT(MSG(1081),"\n",MSG(1082)) }

                  r = DISPLAY3(wk_msg,$MB_ICONERROR+$MB_YESNO)
                  if( r==$MB_ID_YES ) { COMANDO2(STRCAT("CANCELLA ",STR(ATTUALE()), "  //cancello piano cottura")) $DlgResult__= 0 }
                  else                { $wk_esci_dlg = 0 }
               }
            }

            //2° -- se filo_top verifico le lavorazioni da fare sul top
            if( $wk_val_tpinc_opz2==1 )
            {
               $wk_FT_scassoy = ATOI($wk_ysup)

               if( $wk_FT_scassoy<$wk_FT_scs_ymin
                 | $wk_FT_scassoy>$wk_FT_scs_ymax )
               {
                  //Luca 24/03/2020 mail 'Riepilogo migliorie top' del 07/02
                  //Se altezza YS non rispetta limiti produrre avvertimento e scassare top in tutta la sua altezza, verrà compensato al montaggio

                  //wk_msg = STRCAT(MSG(1079),"\n",MSG(1080))
                  //if( wk_PC_LV==1 ) { wk_msg = STRCAT(MSG(1081),"\n",MSG(1082)) }
                  //r = DISPLAY3(wk_msg,$MB_ICONERROR+$MB_YESNO)
                  //
                  //if( r==$MB_ID_YES ) { COMANDO2(STRCAT("CANCELLA ",STR(ATTUALE()), "  //cancello piano cottura ")) $DlgResult__= 0 }
                  //else                { $wk_esci_dlg = 0 }

                  if( $wk_spe_top > 0 & $wk_FT_scassoy > $wk_spe_top )
                  {
                     wk_msg = STRCAT(MSG(1090),"\n",MSG(1084))
                     DISPLAY2(wk_msg)
                     $wk_esci_dlg = 0
                     $wk_errore_ysup = 1
                  }
                  else
                  {
                     if( $wk_FT_scassoy<$wk_spe_top )
                     {
                        //$wk_FT_scassoy = STR($wk_spe_top + 1)
                        $wk_FT_scassoy = STR($wk_spe_top)
                        $wk_ysup =  $wk_FT_scassoy
                     }

                     $wk_esci_dlg = 1
                     wk_msg = STRCAT(MSG(1090),"\n",MSG(1083))
                     DISPLAY2(wk_msg)
                  }
               }
            }
         }

         //se annulla esco dal ciclo
         if( $DlgResult__==0 )
         {
            $wk_esci_dlg = 1
         }
      }

      if($DlgResult__==0 )
      {
         //Luca 17/07/2020 lavello sottotop
         if( wk_PC_LV==1 )
         {
            if( VAR_ELD_TipoIncasso == 2  )
            {
               VAR_ELD_ScassoX = VAR_ELD_ScassoX - VAR_ELD_ST_MaggDim
               VAR_ELD_ScassoZ = VAR_ELD_ScassoZ - VAR_ELD_ST_MaggDim

               VAR_ELD_EldomX = VAR_ELD_EldomX + VAR_ELD_ST_MaggDim
               VAR_ELD_EldomZ = VAR_ELD_EldomZ + VAR_ELD_ST_MaggDim
            }
         }
         EXITSUB()
      }

      wk_redo_scassi = 0

      VAR_ELD_TipoIncasso = -1
      if( $wk_val_tpinc_opz1==1 ) { VAR_ELD_TipoIncasso = 0 }
      if( $wk_val_tpinc_opz2==1 ) { VAR_ELD_TipoIncasso = 1 }
      if( $wk_val_tpinc_opz3==1 ) { VAR_ELD_TipoIncasso = 2 }

      VAR_ELD_TipoPC        = -1
      if( $wk_val_tpeld_opz1==1 ) { VAR_ELD_TipoPC = 0 }
      if( $wk_val_tpeld_opz2==1 ) { VAR_ELD_TipoPC = 1 }

      VAR_ELD_EldomX      = ATOI($wk_xeld)
      VAR_ELD_EldomZ      = ATOI($wk_zeld)
      VAR_ELD_ScassoX     = ATOI($wk_xscs)
      VAR_ELD_ScassoZ     = ATOI($wk_zscs)

      VAR_ELD_ScassoDelta = ATOI($wk_delt)

      VAR_ELD_ScassoMaxX  = VAR_ELD_ScassoX + VAR_ELD_ScassoDelta
      VAR_ELD_ScassoMaxZ  = VAR_ELD_ScassoZ + VAR_ELD_ScassoDelta

      VAR_ELD_Raggio      = ATOI($wk_rag)
      VAR_ELD_RaggioInt   = $wk_raggio_min

      VAR_ELD_YSopra      = ATOI($wk_ysup)
      VAR_ELD_YRientr     = ATOI($wk_yrie)

      VAR_ELD_FT_RieX     = ATOI($wk_xrft)

      VAR_ELD_FT_RieY = VAR_ELD_YSopra

      wk_VAR_FirmaEldom_save = VAR_FirmaEldom

      //prima di far qualsiasi calcolo per adattare i dati, mi salvo i volori inseriti nella maschera
      VAR_FirmaEldom = STRCAT(STR(VAR_ELD_TipoIncasso),"|",STR(VAR_ELD_TipoPC),"|",$wk_xeld,"|",$wk_zeld,"|",$wk_xscs,"|",$wk_zscs,"|",$wk_delt,"|",$wk_rag,"|",$wk_ysup,"|",$wk_yrie)
      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," VAR_FirmaEldom=",APICI(),VAR_FirmaEldom,APICI()))

      //verifico se c'è qualche valore da sistemare
      if( VAR_ELD_Raggio<$wk_raggio_min )
      {
         if( VAR_ELD_TipoIncasso!=1 )
         {
            if( VAR_ELD_Raggio<$wk_raggio_min )
            {
               VAR_ELD_Raggio = $wk_raggio_min
            }
         }

         //verifico se posso star dentro aumentando lo scasso ( e il raggio di conseguenza )
         wk_diff_raggi = $wk_raggio_min - ATOI($wk_rag)
         if( wk_diff_raggi<=ATOI($wk_delt) )
         {
            VAR_ELD_ScassoX = VAR_ELD_ScassoX + wk_diff_raggi
            VAR_ELD_ScassoZ = VAR_ELD_ScassoZ + wk_diff_raggi
         }
      }

      //Luca 17/07/2020 lavello sottotop
      if( wk_PC_LV==1 )
      {
         if( VAR_ELD_TipoIncasso == 2  )
         {
            VAR_ELD_ScassoX = VAR_ELD_ScassoX - VAR_ELD_ST_MaggDim
            VAR_ELD_ScassoZ = VAR_ELD_ScassoZ - VAR_ELD_ST_MaggDim

            VAR_ELD_EldomX = VAR_ELD_EldomX + VAR_ELD_ST_MaggDim
            VAR_ELD_EldomZ = VAR_ELD_EldomZ + VAR_ELD_ST_MaggDim
         }
      }


      if( wk_VAR_FirmaEldom_save!=VAR_FirmaEldom )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_agganciati //DefParSchedaTecnicaPianoCottura"))
         //COMANDO(STRCAT("VAR_CHANGE 0 ",STR(ATTUALE())," RigeneraScasso=1"))
      }
   }

   PROCEDURA Sub_Note_SchedaTecnicaPianoCottura
   {
      //tipo top
      $wk_dsc_note = ""

      $wk_val_not1 = ""
      $wk_val_not2 = ""
      $wk_val_not3 = ""
      $wk_val_not4 = ""

      $wk_str_nota = ""
      $wk_cnote    = 0

      $wk_spe_top  = 0

      $wk_raggio_min = 0

      $wk_FT_scs_ymin = 0
      $wk_FT_scs_ymax = 9999

      //Luca 09/10/2019
      //nota1 - raggio minimo per tipo top
      if( IS_IDX($wk_idx_top) )
      {
         //nota 1 - tipo top
         $wk_tipo_top = VAR_VAL($wk_idx_top,"VAR_TipoTop")
         $wk_dsc_note = MSG(1200) //"TOP VETRO"
         if( $wk_tipo_top==2 )   { $wk_dsc_note = MSG(1201) } //"TOP QUARZO"
         if( $wk_tipo_top==3
           | $wk_tipo_top==4 )   { $wk_dsc_note = MSG(1202) } //"TOP FENIX"
         if( $wk_tipo_top==6
           | $wk_tipo_top==7  )  { $wk_dsc_note = MSG(1203) } //"TOP XGLASS"
         if( $wk_tipo_top==10
           | $wk_tipo_top==13 )  { $wk_dsc_note = MSG(1204) } //"TOP LAMINATO"
         if( $wk_tipo_top==11 )  { $wk_dsc_note = MSG(1205) } //"TOP STEEL"
         if( $wk_tipo_top==12 )  { $wk_dsc_note = MSG(1206) } //"TOP WILDWOOD"

         $wk_spe_top = VAR_VAL($wk_idx_top,"Y")

         //note raggio per tipo top
         if( $wk_tipo_top==0 | $wk_tipo_top==1 ) { $wk_raggio_min = 7 }

         if( $wk_tipo_top==6
           | $wk_tipo_top==7 )                   { $wk_raggio_min = 7 }

         if( $wk_tipo_top==2 )                   { $wk_raggio_min = 4 }

         //LZ 06/12/2021
         //Filotop
         if( $wk_val_tpinc_opz2 == 1 )
         {
            if( $wk_tipo_top==0 | $wk_tipo_top==1
              | $wk_tipo_top==6 | $wk_tipo_top==7 )
            {
               //LZ 08/04/2022: nuovo limite fornitore
               // Vedi mail di Alessandro Emigrato del 08/04/22 - "Raggiatura minima eldom filotop su top vetro"
               //$wk_raggio_min = 10.5
               $wk_raggio_min = 13
            }
         }

         //Sottotop
         if( $wk_val_tpinc_opz3==1 )
         {
            $wk_raggio_min = 18
            //Luca 04/02/2020 nel caso di vetro opaco, il raggio minimo deve essere 8
            $wk_top_c001   = VAR_VAL_STR($wk_idx_top,"GEST_C028")
            $wk_no_sig = STRDADB($wk_idx_top,"DAMMI_NONSIGNIF",STRCAT("GEST_C028;",$wk_top_c001))
            if( $wk_no_sig=="VO000"
              | $wk_no_sig=="XO000"
              | $wk_no_sig=="XF000"  ) { $wk_raggio_min = 8 }
         }

         if( $wk_raggio_min!=0 )
         {
            $wk_cnote = $wk_cnote + 1
            //$wk_str_nota = STRCAT("- ","Raggio minimo ",STR($wk_raggio_min)," mm")
            $wk_str_nota = STRCAT("- ",MSG(1207), " ",STR($wk_raggio_min)," mm")

            VAR_VALUESTR_SET(-1,STRCAT("wk_val_not",STR($wk_cnote)),$wk_str_nota)
         }

         //minimi / massimi scassi y sottotop
         if( $wk_val_tpinc_opz2==1 )
         {
            if( $wk_tipo_top==0 | $wk_tipo_top==1
              | $wk_tipo_top==6 | $wk_tipo_top==7 )
            {
               //$wk_FT_scs_ymin = 2
               //$wk_FT_scs_ymax = 3
               $wk_FT_scs_ymin = 2.5
               $wk_FT_scs_ymax = 3.5
            }

            if( $wk_tipo_top==2 )
            {
               $wk_FT_scs_ymin = 1
               $wk_FT_scs_ymax = 7
            }

            if( $wk_FT_scs_ymin!=0 )
            {
               $wk_cnote = $wk_cnote + 1
               //$wk_str_nota = STRCAT("- ","Altezza minima scasso filotop ",STR($wk_FT_scs_ymin)," mm")
               $wk_str_nota = STRCAT("- ",MSG(1208), " ",STR($wk_FT_scs_ymin)," mm")
               VAR_VALUESTR_SET(-1,STRCAT("wk_val_not",STR($wk_cnote)),$wk_str_nota)
            }
            if( $wk_FT_scs_ymax!=0 & $wk_FT_scs_ymax!=9999 )
            {
               $wk_cnote = $wk_cnote + 1
               //$wk_str_nota = STRCAT("- ","Altezza massima scasso filotop ",STR($wk_FT_scs_ymax)," mm")
               $wk_str_nota = STRCAT("- ",MSG(1209) , " ",STR($wk_FT_scs_ymax)," mm")
               VAR_VALUESTR_SET(-1,STRCAT("wk_val_not",STR($wk_cnote)),$wk_str_nota)
            }
         }
      }
   }

   PROCEDURA Sub_CtrlErrori_SchedaTecnicaPianoCottura
   {
      GOSUB Sub_GetLimitiScassi_PCotturaLavello

      $wk_max_zscs = 9999
      $wk_top_zt   = 9999

      //verifico dimensioni massime scasso in base al tipo top
      if( VAR_VAL(ATTUALE(),"wk_min_rt")>0
        & IS_IDX(idx_top) )
      {
         $wk_max_zscs = VAR_VAL(idx_top,"Zt")  - wk_min_rt - wk_min_fr
         $wk_top_zt   = VAR_VAL(idx_top,"Zt")
      }

      //gestione errori - reset sempre
      $wk_errore_xeld = 0
      $wk_errore_zeld = 0
      $wk_errore_xscs = 0
      $wk_errore_zscs = 0
      $wk_errore_ysup = 0
      $wk_errore_yrie = 0

      //Luca 26/06/2020
      $wk_errore_rag  = 0

      //finchè non vengono inseriti tutti i valori non permetto l'uscita dalla dialog
      if( ATOI($wk_xeld)==0 ) { $wk_errore_xeld = 1 }

      //if( ATOI($wk_zeld)==0 ) { $wk_errore_zeld = 1 }
      //Luca 20/07/2020
      if( $wk_max_zscs < 9998  )
      {
         if( ATOI($wk_zeld) > $wk_top_zt - 10 ) { $wk_errore_zeld = 1 }
      }
      //if( ATOI($wk_zeld)==0 ) { $wk_errore_zeld = 1 }

      if( ATOI($wk_xscs)==0 ) { $wk_errore_xscs = 1 }

      if( ATOI($wk_zscs)==0
        | ATOI($wk_zscs)>$wk_max_zscs ) { $wk_errore_zscs = 1 }

      if( ATOI($wk_ysup)==0 ) { $wk_errore_ysup = 1 }
      if( ATOI($wk_yrie)==0 ) { $wk_errore_yrie = 1 }

      if( NOME(ATTUALE())=="ScassoTopGenerico" )
      {
         if( ATOI($wk_rag)<$wk_raggio_min )    { $wk_errore_rag = 1 }
      }
   }

   PROCEDURA TrovaIdxTopDaScassare
   {
      //ScriviSuLog(0,"TrovaIdxTopDaScassare",STRCAT("[",STR(ATTUALE()),"] - START"))
      //Simone 08/02/2024
      if( VAR_VAL_STR(ATTUALE(),"TipoLavaboStr") == "DEPTH" ) { EXITSUB() }

      //trovo tutti gli elementi da scassare
      if( ACTION()>0 & COMPONENDO()==0 )
      {
         BOX_MODE(0)

         wk_idx_near = ATTUALE()
         if( VAR_EXIST(ATTUALE(),"idx_cnear") )
         {
            if( IS_IDX(idx_cnear) )  { wk_idx_near = idx_cnear }
         }

         idx_top = -1
         NEAR_GLOBALE("wk_top",wk_idx_near,5,1,"Top*")

         //ScriviSuLog(0,"TrovaIdxTopDaScassare",STRCAT("[",STR(ATTUALE()),"] - wk_top = ",STR(wk_top)))

         if( wk_top>0 )
         {
            idx_top = wk_top[1]

            //Luca 01/02/2022
            //miglioro il controllo in presenza di top fusion: devo trovare quello effettivamente interessato
            //dall'eldom e non quello sagomato
            if( wk_top > 1 )
            {
               i = 1
               while ( i <= wk_top )
               {
                  if( NOME(wk_top[i]) == "Top_2P0" )
                  {
                     p_int_idx = wk_top[i]
                     if( VAR_VAL(wk_top[i],"FLAG_TopFusion") == 2 )
                     {
                        SET_#(wk_top[i])
                        p_int_idx = #idx_cnear_FUSION
                     }

                     p_int = P_INTERNO_POLIGONO(pnt_scs_centro,p_int_idx,"base_")
                     //VAR_CREATE_NUM(ATTUALE(),STRCAT("PINT_",STR(p_int_idx)), p_int,0,"")
                     if( p_int == 1 ) { idx_top = wk_top[i] }
                  }
                  i = i + 1
               }
            }

            //Luca 23/06/2020
            if( NOME(idx_top)=="Top_generico_2P0" ) { idx_top = PADRE(idx_top,1) }
         }

         //ScriviSuLog(0,"TrovaIdxTopDaScassare",STRCAT("[",STR(ATTUALE()),"] - idx_top = ",STR(idx_top)))

         //Luca 09/12/2021
         if( IS_IDX(idx_top) == 0 ) { idx_top = PADRE( ATTUALE(), 1) }

         VAR_TipoTopStr = ""
         if( IS_IDX(idx_top) )
         {
            if( NOME(idx_top)=="Top_2P0" )
            {
               VAR_TipoTopStr = VAR_VAL_STR(idx_top,"VAR_TipoTopStr")
            }

            Spe_Top = VAR_VAL(idx_top,"Y")
         }

         NEAR_GLOBALE("wk_bl",wk_idx_near,5,1,"*")

         Scassa_Chi_Plus = ""
         Scassa_Chi_Plus_SottoTop = ""

         i = 0
         while ( inc(i) <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE )
               //Luca 08/05/2020 non scasso se è un lavabo con vasche termoformate
              //& VAR_VAL(GetTopLevel(wk_bl[i]),"FLAG_ConVascheTermoformate")==0 )
            {
               if( UN_PADRE2(wk_bl[i],"Top")
                 | UN_PADRE2(wk_bl[i],"SottopTop")
                 | UN_PADRE2(wk_bl[i],"Top_2P0")
                 | UN_PADRE2(wk_bl[i],"SottoTop_2P0")
                 //Luca 09/12/2021 no mensola ma figlio (così non includo le staffe)
                 | UN_PADRE2(wk_bl[i],"Grafica_Mensola_*_Air")  )
               {
                  if( VAR_VAL(wk_bl[i],"UsoSottoTop")==1 )
                  {
                     Scassa_Chi_Plus_SottoTop = STRCAT(Scassa_Chi_Plus_SottoTop,STR(wk_bl[i]),";")
                  }
                  else
                  {
                     if( wk_bl[i] == ATTUALE() )                { continue }
                     if( NOME(PADRE(wk_bl[i],1)) == "Piletta" ) { continue }

                     Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";")
                  }
               }
            }
         }

         if( VAR_EXIST(ATTUALE(),"idx_cnear_st") )
         {
            Scassa_Chi_Plus_SottoTop = ""
            NEAR_GLOBALE("wk_bl",idx_cnear_st,1,1,"*")

            i = 1
            while ( i<=wk_bl )
            {
               if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE )
               {
                  if( UN_PADRE2(wk_bl[i],"SottoTop_2P0")
                    | UN_PADRE2(wk_bl[i],"Top_2P0")
                    //Luca 09/12/2021 no mensola ma figlio (così non includo le staffe)
                    | UN_PADRE2(wk_bl[i],"Grafica_Mensola_*_Air")
                    )
                  {
                     if( VAR_VAL(wk_bl[i],"UsoSottoTop")==1 )
                     {
                        Scassa_Chi_Plus_SottoTop = STRCAT(Scassa_Chi_Plus_SottoTop,STR(wk_bl[i]),";")
                     }
                  }
               }

               i = i + 1
            }
         }

         if( Scassa_Chi_Plus == ""
           & VAR_VAL_STR(ATTUALE(),"TipoLavaboStr") != "BASICA"
           & VAR_VAL_STR( ATTUALE(), "ATTREZZA_SU") != "BASE"  )
         {
            Scassa_Chi_Plus = TrovaIdx_Grafica(idx_top)
         }
      }
   }

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

      if( VAR_EXIST(ATTUALE(),"VAR_ELD_TipoIncasso_prec")==0 )  { VAR_ELD_TipoIncasso_prec = -1 }
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_ScassoX_prec")==0 )      { VAR_ELD_ScassoX_prec = VAR_ELD_ScassoX }
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_ScassoZ_prec")==0 )      { VAR_ELD_ScassoZ_prec = VAR_ELD_ScassoZ }

      if( VAR_EXIST(ATTUALE(),"VAR_ELD_Raggio_prec")==0 )       { VAR_ELD_Raggio_prec = VAR_ELD_Raggio }
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_YSopra_prec")==0 )       { VAR_ELD_YSopra_prec = VAR_ELD_YSopra }
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_YRientr_prec")==0 )      { VAR_ELD_YRientr_prec = VAR_ELD_YRientr }

      if( VAR_EXIST(ATTUALE(),"VAR_ELD_FT_RieX_prec")==0 )      { VAR_ELD_FT_RieX_prec = VAR_ELD_FT_RieX }
      //Luca 12/02/2020
      if( VAR_EXIST(ATTUALE(),"VAR_ELD_FT_RieZ_prec")==0 )      { VAR_ELD_FT_RieZ_prec = VAR_ELD_FT_RieZ }

      if( VAR_EXIST(ATTUALE(),"OffX_prec")==0 )                 { OffX_prec = OffsetX }
      if( VAR_EXIST(ATTUALE(),"OffZ_prec")==0 )                 { OffZ_prec = OffsetZ }

      if( VAR_EXIST(ATTUALE(),"VAR_Graf_Miscelatore_prec")==0 ) { VAR_Graf_Miscelatore_prec = VAR_VAL(ATTUALE(),"VAR_Graf_Miscelatore") }

      if( VAR_ELD_TipoIncasso_prec != VAR_ELD_TipoIncasso
        | VAR_ELD_ScassoX_prec != VAR_ELD_ScassoX
        | VAR_ELD_ScassoZ_prec != VAR_ELD_ScassoZ
        | VAR_ELD_Raggio_prec != VAR_ELD_Raggio
        | VAR_ELD_YSopra_prec != VAR_ELD_YSopra
        | VAR_ELD_YRientr_prec != VAR_ELD_YRientr
        | VAR_ELD_FT_RieX_prec != VAR_ELD_FT_RieX
        | VAR_ELD_FT_RieZ_prec != VAR_ELD_FT_RieZ
        | OffX_prec!=OffsetX
        | OffZ_prec!=OffsetZ
        //Luca 14/10/2020
        | VAR_Graf_Miscelatore_prec != VAR_VAL(ATTUALE(),"VAR_Graf_Miscelatore")
        )
      {
         VAR_ELD_TipoIncasso_prec = VAR_ELD_TipoIncasso
         VAR_ELD_ScassoX_prec     = VAR_ELD_ScassoX
         VAR_ELD_ScassoZ_prec     = VAR_ELD_ScassoZ
         VAR_ELD_Raggio_prec      = VAR_ELD_Raggio
         VAR_ELD_YSopra_prec      = VAR_ELD_YSopra
         VAR_ELD_YRientr_prec     = VAR_ELD_YRientr
         VAR_ELD_FT_RieX_prec     = VAR_ELD_FT_RieX
         VAR_ELD_FT_RieZ_prec     = VAR_ELD_FT_RieZ

         //se viene spostato
         OffX_prec = OffsetX
         OffZ_prec = OffsetZ

         VAR_Graf_Miscelatore_prec = VAR_VAL(ATTUALE(),"VAR_Graf_Miscelatore")

         GOSUB EliminaScassi
         //COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
         COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
      }
   }

   PROCEDURA CtrlLimitiScassi_PCotturaLavello
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder | $OnLoadOrder2 ) { EXITSUB() }

      if( IS_IDX(idx_top)==0 )                                       { EXITSUB() }

      if( IS_IDX(idx_bas)==0 )                                       { EXITSUB() }

      if( BloccaControlloLimiti )                                    { EXITSUB() }

      CL_DistTop_Rt  = 0   CL_DistTop_Fr  = 0
      CL_DistTop_Sx  = 0   CL_DistTop_Dx  = 0

      CL_DistBasi_Rt = 0   CL_DistBasi_Fr = 0
      CL_DistBasi_Sx = 0   CL_DistBasi_Dx = 0

      //Luca 17/07/2020
      CL_DistSTop_Rt = 0
      CL_DistSTop_Fr = 0

      CL_Controllo   = 0

      //verifico che top - basi siano allineati
      if( ABS(ANG_TOT2(idx_bas)-ANG_TOT2(idx_top))>0.1 )             { EXITSUB() }

      CL_Controllo   = 1

      ang_test  = ANG_TOT2(idx_bas)+90
      ang_test2 = ANG_TOT2(idx_bas)

      while( ang_test<0 )    { ang_test  = ang_test  + 360 }
      while( ang_test>360 )  { ang_test  = ang_test  - 360 }
      while( ang_test2<0 )   { ang_test2 = ang_test2 + 360 }
      while( ang_test2>360 ) { ang_test2 = ang_test2 - 360 }

      SET_#(idx_top)

      if( NOME(idx_top)=="Top" )
      {
         CL_DistTop_Rt = DistanzaFraPunti(base_0,#pnt_b0,ang_test)
         CL_DistTop_Fr = DistanzaFraPunti(base_1,#pnt_b1,ang_test)

         CL_DistTop_Sx = DistanzaFraPunti(base_0,#pnt_b0,ang_test2)
         CL_DistTop_Dx = DistanzaFraPunti(base_3,#pnt_b3,ang_test2)
      }

      if( NOME(idx_top)=="Top_2P0" )
      {
         CL_DistTop_Rt = DistanzaFraPunti(base_0,#pnt_top_b0,ang_test)
         CL_DistTop_Fr = DistanzaFraPunti(base_1,#pnt_top_b1,ang_test)

         CL_DistTop_Sx = DistanzaFraPunti(base_0,#pnt_top_b0,ang_test2)
         CL_DistTop_Dx = DistanzaFraPunti(base_3,#pnt_top_b3,ang_test2)

         CL_DistSTop_Rt = DistanzaFraPunti(pnt_scs_stop_0,#pnt_stop_b0,ang_test)
         CL_DistSTop_Fr = DistanzaFraPunti(pnt_scs_stop_1,#pnt_stop_b1,ang_test)
      }

      SET_#(idx_bas)

      CL_DistBasi_Rt = DistanzaFraPunti(base_0,#base_0,ang_test)
      CL_DistBasi_Fr = DistanzaFraPunti(base_1,#base_1,ang_test)

      CL_DistBasi_Sx = DistanzaFraPunti(base_0,#base_0,ang_test2)
      CL_DistBasi_Dx = DistanzaFraPunti(base_3,#base_3,ang_test2)

      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello idx_eldom = ",STR(ATTUALE()) , " START"))
      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello idx_top = ",STR(idx_top)))
      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello CL_DistTop_Rt = ",STR(CL_DistTop_Rt) , "   CL_DistTop_Fr = ",STR(CL_DistTop_Fr)))
      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello CL_DistTop_Sx = ",STR(CL_DistTop_Sx) , "   CL_DistTop_Dx = ",STR(CL_DistTop_Dx)))
      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello idx_eldom = ",STR(ATTUALE()) , " END"))

      GOSUB Sub_GetLimitiScassi_PCotturaLavello

      wk_ricalcola_z = 0
      wk_ricalcola_x = 0

      wk_OffsetX_save = OffsetX
      wk_OffsetZ_save = OffsetZ

      wk_OffsetX_new = OffsetX
      wk_OffsetZ_new = OffsetZ

      if( CL_DistTop_Fr<wk_min_fr )
      {
         wk_diff = wk_min_fr - CL_DistTop_Fr
         wk_OffsetZ_new = OffsetZ + wk_diff

         wk_ricalcola_z = 1
      }

      if( CL_DistTop_Rt<wk_min_rt )
      {
         wk_diff = wk_min_rt - CL_DistTop_Rt
         wk_OffsetZ_new = OffsetZ - wk_diff
         wk_ricalcola_z = 1
      }

      if( CL_DistTop_Sx<wk_min_lt )
      {
         wk_diff = wk_min_lt - CL_DistTop_Sx
         wk_OffsetX_new = OffsetX + wk_diff

         wk_ricalcola_x = 1
      }

      if( CL_DistTop_Dx<wk_min_lt )
      {
         wk_diff = wk_min_lt - CL_DistTop_Dx
         wk_OffsetX_new = OffsetX - wk_diff

         wk_ricalcola_x = 1
      }

      //LZ 30/05/2022: controllo limiti dalla base
      //TODO: da completare e sbloccare
      if( VAR_ELD_YRientr > 50 & 0 )
      {
         if( CL_DistBasi_Fr<wk_minb_fr )
         {
            wk_diff = wk_minb_fr - CL_DistBasi_Fr
            wk_OffsetZ_new = OffsetZ + wk_diff

            wk_ricalcola_z = 1
         }

         if( CL_DistBasi_Rt<wk_minb_rt )
         {
            wk_diff = wk_minb_rt - CL_DistBasi_Rt
            wk_OffsetZ_new = OffsetZ - wk_diff
            wk_ricalcola_z = 1
         }

         if( CL_DistBasi_Sx<wk_minb_lt )
         {
            wk_diff = wk_minb_lt - CL_DistBasi_Sx
            wk_OffsetX_new = OffsetX + wk_diff

            wk_ricalcola_x = 1
         }

         if( CL_DistBasi_Dx<wk_minb_lt )
         {
            wk_diff = wk_minb_lt - CL_DistBasi_Dx
            wk_OffsetX_new = OffsetX - wk_diff

            wk_ricalcola_x = 1
         }

         //Controllo collisioni
         wk_coll = 2                              wk_coll_tipo = 2       wk_min_dist = 2
         wk_coll[1] = "_grafica_sch_sag_str_lav"  wk_coll_tipo[1] = "x"  wk_min_dist[1] = 10
         wk_coll[2] = "Cuc_CatOriz"               wk_coll_tipo[2] = "z"  wk_min_dist[2] = 0    if( VAR_ELD_TipoIncassoStr == "SOTTOTOP" | VAR_ELD_TipoIncassoStr == "INTEGRATO" ) { wk_min_dist[2] = 22 }

         BOX_MODE(0)

         wk_i = 1
         while( wk_i <= wk_coll )
         {
            wk_coll_att = wk_coll[wk_i]
            wk_min_dist_att = wk_min_dist[wk_i]
            wk_coll_tipo_att = wk_coll_tipo[wk_i]

            NEAR_GLOBALE2( "wk_coll_itm", ATTUALE(), wk_min_dist_att, wk_coll_att)

            if( wk_coll_itm > 0 )
            {
               VAR_VALUE_SET( ATTUALE(), STRCAT("wk_ricalcola_", wk_coll_tipo_att), 1)
            }

            wk_i = wk_i + 1
         }
      }

      //Luca 17/07/2020
      if( VAR_VAL(ATTUALE(),"VAR_ELD_TipoIncasso")==2 )
      {
         if( CL_DistSTop_Rt != 0  )
         {
            wk_min_sottotop = 60
            if( CL_DistSTop_Rt < wk_min_sottotop )
            {
               wk_diff = wk_min_sottotop - CL_DistSTop_Rt
               wk_OffsetZ_new = OffsetZ - wk_diff

               wk_ricalcola_z = 1
            }

            if( CL_DistSTop_Fr < wk_min_sottotop )
            {
               wk_diff = wk_min_sottotop - CL_DistSTop_Fr
               wk_OffsetZ_new = OffsetZ + wk_diff
               wk_ricalcola_z = 1
            }
         }
      }

      if( VAR_EXIST(ATTUALE(),"CL_Valvola")==0 )  { CL_Valvola = 0 }
      else
      {
         //reset se ho trovato la posizione corretta
         if( wk_ricalcola_z==0 & wk_ricalcola_x==0 ) { CL_Valvola = 0 }
      }

      //Luca 04/09/2020: cancello se non sono riuscito a riposizionare
      //Mantis 23139: Limiti eldom top: contatore riposizionamento non si resetta
      if( CL_Valvola>5 )
      {
         DISPLAY2( MSG(1089) )

        #ifndef TEC
         COMANDO2(STRCAT("CANCELLA ",STR(ATTUALE()), "  //cancello piano cottura"))
         EXITSUB()
        #endif
      }
      else
      {
         if( wk_ricalcola_z==1  | wk_ricalcola_x==1 )
         {
            //wk_str = "ATTENZIONE! Posizione Eldom non rispetta i limiti.\nRiposizionare in automastico? \nSI - Riposiziona \nNO - Elimina"
            wk_str = STRCAT(MSG(1090)," ",MSG(1085),"\n ",MSG(1086),"\n",MSG(1087),"\n",MSG(1088))

            r = DISPLAY3(wk_str,$MB_ICONERROR+$MB_YESNO)
            if( r==$MB_ID_NO ) { COMANDO2(STRCAT("CANCELLA ",STR(ATTUALE()), "  //cancello piano cottura"))}
            else
            {
               CL_Valvola = CL_Valvola + 1

               wk_cmd = ""
               if( wk_ricalcola_z==1 ) { wk_cmd = STRCAT("OffsetZ=",STR(wk_OffsetZ_new)) }
               if( wk_ricalcola_x==1 ) { wk_cmd = STRCAT(wk_cmd, " OffsetX=",STR(wk_OffsetX_new))  }

               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()), " " ,  wk_cmd , " //riposizione da CtrlLimitiScassi_PCotturaLavello"))
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_ridisegna no_agganciati //riposizione da CtrlLimitiScassi_PCotturaLavello"))
            }
         }
      }
   }

   PROCEDURA Sub_GetLimitiScassi_PCotturaLavello
   {
      //Basi
      wk_minb_rt = 30
      wk_minb_fr = 30
      wk_minb_lt = 10

      //Top
      wk_tipotop = -1
      if( VAR_EXIST( idx_top, "VAR_TipoTop")) { wk_tipotop = VAR_VAL(idx_top,"VAR_TipoTop") }
      wk_proftop = VAR_VAL(idx_bas,"Zt")

      wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 40   wk_min_eld = 80
      if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 40   wk_min_eld = 80 }

      //vetro - xglass
      if( wk_tipotop==0 | wk_tipotop==1
        | wk_tipotop==6 | wk_tipotop==7 )
      {
         //Luca 09/07/2020 mantis 65
         //Luca 04/03/2020 riporto modifiche LAGO
         //wk_min_rt = 65  wk_min_fr = 80    wk_min_lt = 65   wk_min_eld = 120
         //wk_min_rt = 60  wk_min_fr = 80    wk_min_lt = 65   wk_min_eld = 120
         wk_min_rt = 65  wk_min_fr = 80    wk_min_lt = 65   wk_min_eld = 120

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         //if( wk_proftop>630 ) { wk_min_rt = 65  wk_min_fr = 115   wk_min_lt = 65   wk_min_eld = 120 }
         if( wk_proftop>662 ) { wk_min_rt = 65  wk_min_fr = 115   wk_min_lt = 65   wk_min_eld = 120 }

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         wk_min_rt = 55

         if( VAR_VAL(ATTUALE(),"CL_DistTop_Rt") > 0
           & VAR_VAL(ATTUALE(),"CL_DistTop_Rt") < 65  )  { wk_min_lt = 90 }
      }

      //quarzo
      if( wk_tipotop==2 )
      {
         //Luca 21/01/2020
         //corretti limiti
         //wk_min_rt = 65  wk_min_fr = 80    wk_min_lt = 65   wk_min_eld = 120
         //if( wk_proftop>630 ) { wk_min_rt = 65  wk_min_fr = 115   wk_min_lt = 65   wk_min_eld = 120 }
         //Luca 04/03/2020
         //riporto modifiche LAGO
         //wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 65   wk_min_eld = 120
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 65   wk_min_eld = 120 }
         wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 40   wk_min_eld = 120

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 40   wk_min_eld = 120 }
         if( wk_proftop>662 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 40   wk_min_eld = 120 }

      }

      //wildwood 80 (NON GESTITO ORA)
      if( wk_tipotop==12 | wk_tipotop==22 )
      {
         //TESTE CHIUSE
         wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 40   wk_min_eld = 110

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 40   wk_min_eld = 110 }
         if( wk_proftop>662 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 40   wk_min_eld = 110 }

         //Luca 31/08/2020 riporto modifiche di LAGO
         //TESTE APERTE
         //wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 115   wk_min_eld = 110

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 105   wk_min_eld = 110 }
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_lt = 105   wk_min_eld = 110 }
         //if( wk_proftop>662 ) { wk_min_fr = 115 }
      }

      //STEEL
      if( wk_tipotop==11 | wk_tipotop==21 )
      {
         wk_min_rt = 50  wk_min_fr = 80    wk_min_lt = 50   wk_min_eld = 50

         //Luca 09/07/2020 aggiornamento specifiche mantis 22893
         //if( wk_proftop>630 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 50   wk_min_eld = 60 }
         if( wk_proftop>662 ) { wk_min_rt = 50  wk_min_fr = 115   wk_min_lt = 50   wk_min_eld = 60 }
      }

      // Limiti inutili, vengono forzati di continuo,
      // approfitto delle cucine nuove per ricavare i 5mm che solitamente mi servono
      if( VAR_VAL( ATTUALE(), "Cucina_Versione") > 2)
      {
         wk_min_rt = wk_min_rt - 2
         wk_min_fr = wk_min_fr - 3
      }

      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello wk_min_rt = ",STR(wk_min_rt) , "   wk_min_fr = ",STR(wk_min_fr)))
      //COMANDO2(STRCAT("LOGMSG CtrlLimitiScassi_PCotturaLavello wk_min_lt = ",STR(wk_min_lt) , "  wk_min_eld = ",STR(wk_min_eld)))
   }

   PROCEDURA Ctrl_Cuc_DistAngolo
   {
      if( ACTION()<0 & ACTION()==2 ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"Con_DistAng")==0 ) { Con_DistAng  = 1 }

      Y_DistAng     = Y
      PosY_DistAng  = 0
      //if( NOME(ATTUALE())=="ScoccaT_BaseAngPan" ) { Y_DistAng = Y - $Cuc_RidY_Sco - Cuc_Alt_Zoc }

      idx_test = -1
      if( Verso<0 )
      {
         if( VAR_EXIST(ATTUALE(),"idx_sx") )  { idx_test = idx_sx }
      }

      if( Verso>0 )
      {
         if( VAR_EXIST(ATTUALE(),"idx_dx") )  { idx_test = idx_dx }
      }

      if( IS_IDX(idx_test)==0 )
      {
         //se non ho basi vicine, verifico presenza Cuc_FroFixColAngolo
         COMPONENTI2("wk_fro",PADRE(ATTUALE(),1),"Cuc_FroFix*Angolo")
         idx_fro = -1

         if( wk_fro==0 )  { EXITSUB() }

         idx_fro = wk_fro[1]

         if( Y==VAR_VAL(idx_fro,"Y") ) { Con_DistAng = 0 }
         EXITSUB()
      }

      //verifico se ha una base sotto
      if( VAR_EXIST(idx_test,"idx_sotto") )
      {
         SET_#(idx_test)
         if( IS_IDX(#idx_sotto) ) { idx_test = #idx_sotto }
      }


      if( IS_VAR_FIXED(ATTUALE(),"PosY_DistAng")==0 )
      {
         SET_#(idx_test)
         PosY_DistAng = (#base_0.y + VAR_VAL(idx_test,"Cuc_Alt_Zoc"))  - (base_0.y + Cuc_Alt_Zoc)
      }

      if( IS_VAR_FIXED(ATTUALE(),"Y_DistAng") == 0 )
      {
         Y_DistAng = VAR_VAL(idx_test,"Y_Scocca") + $Cuc_RidY_Sco

         //Luca 04/02/2020
         //verifico se ha una base sotto
         if( VAR_EXIST(idx_test,"idx_sopra") )
         {
            SET_#(idx_test)
            if( IS_IDX(#idx_sopra) ) { Y_DistAng = Y_DistAng + VAR_VAL(#idx_sopra,"Y_Scocca") + $Cuc_RidY_Sco }
         }

         //if( IS_MATCH(NOME(idx_test),"ScoccaT_Bas*")
         //  & IS_MATCH(NOME(ATTUALE()),"ScoccaT_Col*") ) { Y_DistAng = VAR_VAL(idx_test,"Y_Scocca") }
         //
         //if( IS_MATCH(NOME(idx_test),"ScoccaT_Bas*")
         //  & IS_MATCH(NOME(idx_test),"ScoccaT_Bas*") ) { Y_DistAng = Y_DistAng + $Cuc_RidY_Sco }

         if( PosY_DistAng + Y_DistAng> Y ) { Y_DistAng = Y - PosY_DistAng }
         if( Y_DistAng>Y )                 { Y_DistAng = Y }

         if( PosY_DistAng<0 )
         {
            //Y_DistAng = Y_DistAng + PosY_DistAng
            PosY_DistAng = 0
         }
      }
   }

   PROCEDURA Ctrl_Cuc_DistManiglia
   {
      if( ACTION()<0 & ACTION()==2 ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"Con_DistMan")==1 ) { EXITSUB() }

      Con_DistMan_prec = VAR_VAL(ATTUALE(),"Con_DistMan")

      Con_DistMan    = 0

      idx_test = -1
      if( Verso<0 )
      {
         if( VAR_EXIST(ATTUALE(),"idx_sx") )  { idx_test = idx_sx }
      }

      if( Verso>0 )
      {
         if( VAR_EXIST(ATTUALE(),"idx_dx") )  { idx_test = idx_dx }
      }

      if( IS_IDX(idx_test)==0 )
      {
         if( Con_DistMan_prec==1 )
         {
            //ripristino
            wk_xt = Xt
            wk_xt = wk_xt - X_DistMan - 3

            Xt = wk_xt
            //DEL_VAR_MODIFICATE(ATTUALE(),"Con_DistMan")
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Xt=",STR(wk_xt) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
            COMANDO(STRCAT("RICALCOLA ",STR(idx_att) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
         }

         EXITSUB()
      }

      if( NOME(idx_test)!="ScoccaT_BaseForno" ) { EXITSUB() }

      Con_DistMan = 1

      if( Con_DistMan==Con_DistMan_prec )  { EXITSUB() }

      wk_xt = Xt
      wk_xt  = wk_xt + X_DistMan + 3

      Xt = wk_xt
      COMANDO(STRCAT("SHOW ABILITA OFF"))
      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Xt=",STR(wk_xt) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_att) , " // OnChangedVar di ScoccaT_BaseAngPan (Con_DistMan)" ))
      COMANDO(STRCAT("SHOW ABILITA ON"))
      COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ",STR(idx_att)))
   }

   // FT 29/01/20 macro da chiamare per verifiche/debug (da comandi manuali)
   PROCEDURA ChiamaCtrlBarraIsola
   {
      COMANDO2("Procedura CtrlBarraIsola")
   }

   PROCEDURA ChiamaCtrlBarraIsolaDebug
   {
      COMANDO2("Procedura CtrlBarraIsolaDebug")
   }

   PROCEDURA CtrlBarraIsola
   {
      // FT 31/01/2020 - controllo le basi in maniera tale da avere
      // gli array corretti e poter fare da subito le corrette valutazioni
      GOSUB CtrlBasiBarra

      // se la
      if( X <= X_BarMax )   { N_Bar = 1   EXITSUB() }

//---      if( DEBUG > 0 )
//---      {
//---         HI(idx_att, 1)
//---         DISPLAY2(STRCAT("Sono idx=", STR(idx_att), "\nBasiLatoA=", STR(BasiLatoA), "\nBasiLatoB=", STR(BasiLatoB)))
//---         HI(idx_att, 0)
//---      }

      // segmento della barra per l'interferisci
      // (metto a zero la y per il calcolo bidimensionale)
      wk_pnt_sx = [pnt_barra_sx.x, 0, pnt_barra_sx.z]
      wk_pnt_dx = [pnt_barra_dx.x, 0, pnt_barra_dx.z]

      // la distanza massima è la misura massima della barra (2700)
      wk_dist_max   = X_BarMax

      // flag per ricalcolo
      wk_ricalcola = 0

      // se la lunghezza è inferiore o uguale alle 2 barre
      // provo con le 2 barre, altrimenti vado direttamente
      // al controllo per le 3 barre
      wk_n_barre_a = 2
      wk_n_barre_b = 2

      if( X > 2 * X_BarMax )
      {
         wk_n_barre_a = 3
         wk_n_barre_b = 3
      }

      // CONTROLLO PER 2 BARRE
      if( wk_n_barre_a == 2 & wk_n_barre_b == 2 )
      {
         // [ parametri di confronto/inizializzaizone ----------------------------
         // punto di mezzo (per controllo a 2 barre)
         // (metto a zero la y per il calcolo bidimensionale)
         wk_pnt_2  = [pnt_barra_2.x, 0, pnt_barra_2.z]

         // punto iniziale per calcolo distanza per il caso a 2 barre (centro)
         wk_pnt_int_2 = wk_pnt_sx

         // mi salvo l'idx più vicino al centro-barra (per controllo a 2 barre)
         wk_idx_near_2_a = -1
         wk_idx_near_2_b = -1

         // misure temporanee delle barre per verifiche/test
         // prima dell'assegnazione ufficiale
         wk_x_bar1_a = 0   wk_x_bar2_a = 0
         wk_x_bar1_b = 0   wk_x_bar2_b = 0

         // conteggio temporaneo del numero di barre lati a/b
//NO!!         wk_n_barre_a = 1
//NO!!         wk_n_barre_b = 1
         // ] parametri di confronto/inizializzaizone ----------------------------


         // [ algoritmo di controllo ---------------------------------------------
         // check lato A
         wk_lato = "A"   GOSUB CtrlBarraIsola2Bar
         // check lato B
         wk_lato = "B"   GOSUB CtrlBarraIsola2Bar
         // ] algoritmo di controllo ---------------------------------------------


         // [ assegnazioni finali ------------------------------------------------
         // in base alle variabili di ritorno devo capire se vince lato "A" o lato "B"
         // assegnazioni (dirette) in base al lato vincente
         wk_lato_win = ""
         wk_caso_win = "2"

         if( wk_x_bar1_a > X_BarMax | wk_x_bar2_a > X_BarMax )   { wk_n_barre_a = 3 }
         if( wk_x_bar1_b > X_BarMax | wk_x_bar2_b > X_BarMax )   { wk_n_barre_b = 3 }

         // se esistono basi su lato A e B ...
         if( BasiLatoA > 0 & BasiLatoB > 0 )
         {

            // ... se il lato A e B hanno lo stesso numero di barre ...
            if( wk_n_barre_a == wk_n_barre_b )
            {
               // ... vince il lato, la cui base ha il centro pià vicino alla metà
               if( wk_dist_min_2_a < wk_dist_min_2_b )  { wk_lato_win = "A"   wk_caso_win = "2.1" }
               else                                     { wk_lato_win = "B"   wk_caso_win = "2.2" }
            }
            else
            {
               // ... vince il lato che ha il minor numero di barre
               if( wk_n_barre_a < wk_n_barre_b )        { wk_lato_win = "A"  wk_caso_win = "2.3" }
               else                                     { wk_lato_win = "B"  wk_caso_win = "2.4" }
            }
         }
         else
         {
            // se c'è solo il lato A vince il lato A
            if( BasiLatoA > 0 )   { wk_lato_win = "A"   wk_caso_win = "2.5"  }

            // se c'è solo il lato B vince il lato B
            if( BasiLatoB > 0 )   { wk_lato_win = "B"   wk_caso_win = "2.6"  }
         }

         if( wk_lato_win == "A" )
         {
            if( wk_n_barre_a != N_Bar )                     { N_Bar  = wk_n_barre_a  wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar1_a > 0 & wk_x_bar1_a != X_Bar1 )   { X_Bar1 = wk_x_bar1_a   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar2_a > 0 & wk_x_bar2_a != X_Bar2 )   { X_Bar2 = wk_x_bar2_a   wk_ricalcola = wk_ricalcola + 1 }
         }

         if( wk_lato_win == "B" )
         {
            if( wk_n_barre_b != N_Bar )                     { N_Bar  = wk_n_barre_b  wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar1_b > 0 & wk_x_bar1_b != X_Bar1 )   { X_Bar1 = wk_x_bar1_b   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar2_b > 0 & wk_x_bar2_b != X_Bar2 )   { X_Bar2 = wk_x_bar2_b   wk_ricalcola = wk_ricalcola + 1 }
         }

         // ] assegnazioni finali ------------------------------------------------


//         if( DEBUG == 1 & wk_n_barre_a == 2 & wk_n_barre_b == 2 )
         if( DEBUG == 1 )
         {
            HI(idx_att, 1)
            DISPLAY2(STRCAT("Vincono le assegnazioni per il lato ", wk_lato_win,
//---            "\nDist. minima A = ", STR(wk_dist_min_2_a),
//---            "\nDist. minima B = ", STR(wk_dist_min_2_b),
            "\nBarre necessarie A = ", STR(wk_n_barre_a),
            "\nBarre necessarie B = ", STR(wk_n_barre_b),
            "\nX_Bar1 = ", STR(X_Bar1),
            "\nX_Bar2 = ", STR(X_Bar2),
            "\nwk_caso_win = ", wk_caso_win,
            "\n\n(CTRL 2 BARRE)"))
            HI(idx_att, 0)
         }
      }


      // CASO DELLE 3 BARRE
      //if( wk_n_barre_a == 3 | wk_n_barre_b == 3 )
      if( wk_n_barre_a == 3 & wk_n_barre_b == 3 )
      {
         // [ parametri di confronto/inizializzaizone ----------------------------
         // punti a 1/3 e 2/3 (per controllo a 3 barre)
         // (metto a zero la y per il calcolo bidimensionale)
         wk_pnt_3_1  = [pnt_barra_1_3.x, 0, pnt_barra_1_3.z]
         wk_pnt_3_2  = [pnt_barra_2_3.x, 0, pnt_barra_2_3.z]

         // mi salvo l'idx più vicino al centro-barra (per controllo a 3 barre)
         wk_idx_near_3_1_a = -1
         wk_idx_near_3_2_a = -1
         wk_idx_near_3_1_b = -1
         wk_idx_near_3_2_b = -1

         // misure temporanee delle barre per verifiche/test
         // prima dell'assegnazione ufficiale
         wk_x_bar1_a = 0   wk_x_bar2_a = 0   wk_x_bar3_a = 0
         wk_x_bar1_b = 0   wk_x_bar2_b = 0   wk_x_bar3_b = 0

         // conteggio temporaneo del numero di barre lati a/b
//NO!!         wk_n_barre_a = 1
//NO!!         wk_n_barre_b = 1
         // ] parametri di confronto/inizializzaizone ----------------------------

         // [ algoritmo di controllo ---------------------------------------------
         // check lato A
         if( wk_n_barre_a == 3 )   { wk_lato = "A"   GOSUB CtrlBarraIsola3Bar }

         // check lato B
         if( wk_n_barre_b == 3 )   { wk_lato = "B"   GOSUB CtrlBarraIsola3Bar }
         // ] algoritmo di controllo ---------------------------------------------



         // [ assegnazioni finali ------------------------------------------------
         // in base alle variabili di ritorno devo capire se vince lato "A" o lato "B"
         // assegnazioni (dirette) in base al lato vincente
         wk_lato_win = ""
         wk_caso_win = "3"

         if( wk_x_bar1_a > X_BarMax | wk_x_bar2_a > X_BarMax | wk_x_bar3_a > X_BarMax )   { wk_n_barre_a = 4 }
         if( wk_x_bar1_b > X_BarMax | wk_x_bar2_b > X_BarMax | wk_x_bar3_b > X_BarMax )   { wk_n_barre_b = 4 }

         // se esistono basi su lato A e B ...
         if( BasiLatoA > 0 & BasiLatoB > 0 )
         {
            // ... se il lato A e B hanno lo stesso numero di barre ...
            if( wk_n_barre_a == wk_n_barre_b )
            {
               // // ... vince il lato, la cui base ha il centro pià vicino a 1/3
               // if( wk_dist_min_3_1_a < wk_dist_min_3_1_b )  { wk_lato_win = "A" }
               // else                                         { wk_lato_win = "B" }

               wk_lato_win = "A"
               wk_caso_win = "3.1"
            }
            else
            {
               // ... vince il lato che ha il minor numero di barre
               if( wk_n_barre_a < wk_n_barre_b )        { wk_lato_win = "A"   wk_caso_win = "3.3" }
               else                                     { wk_lato_win = "B"   wk_caso_win = "3.5" }
            }
         }
         else
         {
            // se c'è solo il lato A vince il lato A
            if( BasiLatoA > 0 )   { wk_lato_win = "A"   wk_caso_win = "3.5" }

            // se c'è solo il lato B vince il lato B
            if( BasiLatoB > 0 )   { wk_lato_win = "B"   wk_caso_win = "3.6" }
         }

         if( wk_lato_win == "A" )
         {
            if( wk_n_barre_a != N_Bar )                     { N_Bar  = wk_n_barre_a  wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar1_a > 0 & wk_x_bar1_a != X_Bar1 )   { X_Bar1 = wk_x_bar1_a   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar2_a > 0 & wk_x_bar2_a != X_Bar2 )   { X_Bar2 = wk_x_bar2_a   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar3_a > 0 & wk_x_bar3_a != X_Bar3 )   { X_Bar3 = wk_x_bar3_a   wk_ricalcola = wk_ricalcola + 1 }
         }

         if( wk_lato_win == "B" )
         {
            if( wk_n_barre_b != N_Bar )                     { N_Bar  = wk_n_barre_b  wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar1_b > 0 & wk_x_bar1_b != X_Bar1 )   { X_Bar1 = wk_x_bar1_b   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar2_b > 0 & wk_x_bar2_b != X_Bar2 )   { X_Bar2 = wk_x_bar2_b   wk_ricalcola = wk_ricalcola + 1 }
            if( wk_x_bar3_b > 0 & wk_x_bar3_b != X_Bar3 )   { X_Bar3 = wk_x_bar3_b   wk_ricalcola = wk_ricalcola + 1 }
         }
         // ] assegnazioni finali ------------------------------------------------

         // ] assegnazioni finali ------------------------------------------------

         if( DEBUG == 1 )
         {
            HI(idx_att, 1)
            DISPLAY2(STRCAT("Vincono le assegnazioni per il lato ", wk_lato_win,
            "\nBarre necessarie A = ", STR(wk_n_barre_a),
            "\nBarre necessarie B = ", STR(wk_n_barre_b),
            "\nX_Bar1 = ", STR(X_Bar1),
            "\nX_Bar2 = ", STR(X_Bar2),
            "\nX_Bar3 = ", STR(X_Bar3),
            "\nX_Bar4 = ", STR(X_Bar4),
            "\nwk_caso_win = ", wk_caso_win,
            "\n\n(CTRL 3 BARRE)"))
            HI(idx_att, 0)
         }
      }

      // ricalcolo per aggiornare
      if( wk_ricalcola > 0 )   { COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_att))) }
   }

   PROCEDURA CtrlBarraIsola2Bar
   {
      // controllo della barra isola:
      // in input:
      // "wk_lato"  con valore "A" o "B" per le verifiche del lato A (array BasiLatoA) o B (BasiLatoB)
      // in output (a seconda dell'input):
      // wk_x_bar1_a = larghezza della barra 1 (a)
      // wk_x_bar2_a = larghezza della barra 2 (a)
      // wk_x_bar1_b = larghezza della barra 1 (b)
      // wk_x_bar2_b = larghezza della barra 2 (b)

      if( wk_lato != "A" & wk_lato != "B" )   { EXITSUB() }

      if( wk_lato == "A" & BasiLatoA == 0 )   { EXITSUB() }
      if( wk_lato == "B" & BasiLatoB == 0 )   { EXITSUB() }


      // dati array "BasiLatoA" o "BasiLatoB"
      // Il controllo è interno all'elemento quindi posso
      // utilizzare idx_att perchè le variabili sono locali

      wk_nome_array = STRCAT("BasiLato", wk_lato)
      wk_len_array = VAR_VAL(idx_att, wk_nome_array)

      wk_var_idx_near_2 = STRCAT("wk_idx_near_2_", LOWER(wk_lato))

      wk_dist_min_2_a = X_BarMax
      wk_dist_min_2_b = X_BarMax

      if( wk_lato == "A" )   { wk_ang_retta_int =  90 }
      else                   { wk_ang_retta_int = 270 }

      i = 1
      //while( i <= BasiLatoA )
      while( i <= wk_len_array )
      {
         //idx_temp = BasiLatoA[i]
         idx_temp = VAR_VAL(idx_att, STRCAT(wk_nome_array, "_##", STR(i)))

         // verifico la distanza dal centro-barra delle basi
         // sul lato "A" ovvero le basi che hanno lo
         // stesso angolo della barra
         if( VAR_EXIST(idx_temp, "pnt_base_cx") == 1 )
         {
            SET_#(idx_temp)
            wk_pnt_retta = [#pnt_base_cx.x, 0, #pnt_base_cx.z]
            //wk_ang_retta = ANG_TOT2(idx_temp) + 90
            wk_ang_retta = ANG_TOT2(idx_temp) + wk_ang_retta_int

            wk_pnt_int = INTERFERISCI(wk_pnt_retta, wk_ang_retta, wk_pnt_sx, wk_pnt_dx)

            // se il punto è valido calcolo la distanza tra il punto e il centro barra
            wk_dist_int_2 = wk_dist_max

            if( wk_pnt_int.x != $ERR_INTERFERISCI
              & wk_pnt_int.y != $ERR_INTERFERISCI
              & wk_pnt_int.z != $ERR_INTERFERISCI
              )
            {
               wk_dist_int_2 = DISTANZA(wk_pnt_int, wk_pnt_2)
            }

            // verifico se è più vicino di altri punti, mi salvo la distanza per successivi confronti e l'idx della base
            // if( wk_dist_int_2 < wk_dist_max & wk_dist_int_2 < wk_dist_min )
            if( wk_dist_int_2 < wk_dist_max & wk_dist_int_2 < VAR_VAL(idx_att, STRCAT("wk_dist_min_2_", LOWER(wk_lato))) )
            {
               // // Arrotondo subito allo 0.5 mm
               VAR_VALUE_SET(idx_att, STRCAT("wk_dist_min_2_", LOWER(wk_lato)), ROUND2(wk_dist_int_2, 0.5))

               wk_pnt_int_2 = wk_pnt_int
               //wk_idx_near_2_a = idx_temp
               VAR_VALUE_SET(idx_att, wk_var_idx_near_2, idx_temp)
               // DISPLAY2(STRCAT("Setto ", wk_var_idx_near_2, " = ", STR(idx_temp)))
            }

//---            if( DEBUG == 1 )
//---            {
//---               HI(idx_temp, 1)
//---
//---               DISPLAY2(STRCAT("LATO ", wk_lato, "\n",
//---               "\nValuto base idx = ", STR(idx_temp),
//---               "\nang_retta = ", STR(wk_ang_retta),
//---               "\nwk_pnt_sx = [", STR(wk_pnt_sx.x), ",", STR(wk_pnt_sx.y), ",", STR(wk_pnt_sx.z), "]",
//---               "\nwk_pnt_dx = [", STR(wk_pnt_dx.x), ",", STR(wk_pnt_dx.y), ",", STR(wk_pnt_dx.z), "]",
//---               "\nwk_pnt_retta = [", STR(wk_pnt_retta.x), ",", STR(wk_pnt_retta.y), ",", STR(wk_pnt_retta.z), "]",
//---               "\nwk_pnt_int = [", STR(wk_pnt_int.x), ",", STR(wk_pnt_int.y), ",", STR(wk_pnt_int.z), "]",
//---               "\nDistanza dal centro = ", STR(wk_dist_int_2),
//---               "\n\n(CTRL 2 BARRE)"))
//---               HI(idx_temp, 0)
//---            }
         }

         i = i + 1
      }

      // calcolo la distanza della prima barra
      if( IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_2)) == 1 )
      {
         //wk_n_barre_a = 2
         //wk_x_bar1_a = DISTANZA(wk_pnt_sx, wk_pnt_int_2)
         //
         //// riporto l'arrotondamento
         //wk_x_bar1_a = ROUND2(wk_x_bar1_a, 0.5)
         //wk_x_bar2_a = X - wk_x_bar1_a

         VAR_VALUE_SET(idx_att, STRCAT("wk_n_bar_", LOWER(wk_lato)), 2)
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)), DISTANZA(wk_pnt_sx, wk_pnt_int_2))

         // riporto l'arrotondamento
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)), ROUND2(VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato))), 0.5))
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar2_", LOWER(wk_lato)), X - VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato))))
      }

//---      if( DEBUG == 1 )
//---      {
//---         //if( IS_IDX(wk_idx_near_2_a) == 1 )
//---         if( IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_2)) == 1 )
//---         {
//---            //HI(wk_idx_near_2_a, 1)
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_2), 1)
//---            DISPLAY2(STRCAT("LATO ", wk_lato, "\n",
//---            "\nSono la base il cui centro è più vicino al centro barra",
//---            "\n\nIdx = ", STR(VAR_VAL(idx_att, wk_var_idx_near_2)),
//---            "\nwk_dist_min_2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_dist_min_2_", LOWER(wk_lato)))),
//---            "\nwk_x_bar1 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)))),
//---            "\nwk_x_bar2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar2_", LOWER(wk_lato)))),
//---            "\nwk_n_barre = ", STR(VAR_VAL(idx_att, STRCAT("wk_n_barre_", LOWER(wk_lato)))),
//---            "\n\n(CTRL 2 BARRE)"))
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_2), 0)
//---         }
//---      }
   }

   PROCEDURA CtrlBarraIsola3Bar
   {
      // controllo della barra isola:
      // in input:
      // "wk_lato"  con valore "A" o "B" per le verifiche del lato A (array BasiLatoA) o B (BasiLatoB)
      // in output (a seconda dell'input):
      // wk_x_bar1_a = larghezza della barra 1 (a)
      // wk_x_bar2_a = larghezza della barra 2 (a)
      // wk_x_bar1_b = larghezza della barra 1 (b)
      // wk_x_bar2_b = larghezza della barra 2 (b)

      if( wk_lato != "A" & wk_lato != "B" )   { EXITSUB() }

      if( wk_lato == "A" & BasiLatoA == 0 )   { EXITSUB() }
      if( wk_lato == "B" & BasiLatoB == 0 )   { EXITSUB() }


      // dati array "BasiLatoA" o "BasiLatoB"
      // Il controllo è interno all'elemento quindi posso
      // utilizzare idx_att perchè le variabili sono locali

      wk_nome_array = STRCAT("BasiLato", wk_lato)
      wk_len_array = VAR_VAL(idx_att, wk_nome_array)

      wk_var_idx_near_3_1 = STRCAT("idx_near_3_1_", LOWER(wk_lato))
      wk_var_idx_near_3_2 = STRCAT("idx_near_3_2_", LOWER(wk_lato))

      wk_dist_min_3_1_a = X_BarMax
      wk_dist_min_3_1_b = X_BarMax

      wk_dist_min_3_2_a = X_BarMax
      wk_dist_min_3_2_b = X_BarMax

      if( wk_lato == "A" )   { wk_ang_retta_int =  90 }
      else                   { wk_ang_retta_int = 270 }

      i = 1
      //while( i <= BasiLatoA )
      while( i <= wk_len_array )
      {
         //idx_temp = BasiLatoA[i]
         idx_temp = VAR_VAL(idx_att, STRCAT(wk_nome_array, "_##", STR(i)))

         // verifico la distanza dal centro-barra delle basi
         // sul lato "A" ovvero le basi che hanno lo
         // stesso angolo della barra
         if( VAR_EXIST(idx_temp, "pnt_base_cx") == 1 )
         {
             SET_#(idx_temp)
             wk_pnt_retta = [#pnt_base_cx.x, 0, #pnt_base_cx.z]
             //wk_ang_retta = ANG_TOT2(idx_temp) + 90
             wk_ang_retta = ANG_TOT2(idx_temp) + wk_ang_retta_int

             wk_pnt_int = INTERFERISCI(wk_pnt_retta, wk_ang_retta, wk_pnt_sx, wk_pnt_dx)

             // se il punto è valido calcolo la distanza tra il punto e il centro barra
             wk_dist_int_3_1 = wk_dist_max
             wk_dist_int_3_2 = wk_dist_max

             if( wk_pnt_int.x != $ERR_INTERFERISCI
               & wk_pnt_int.y != $ERR_INTERFERISCI
               & wk_pnt_int.z != $ERR_INTERFERISCI
               )
             {
                wk_dist_int_3_1 = DISTANZA(wk_pnt_int, wk_pnt_3_1)
                wk_dist_int_3_2 = DISTANZA(wk_pnt_int, wk_pnt_3_2)
             }

            // verifico se è più vicino di altri punti, mi salvo la distanza per successivi confronti e l'idx della base
            if( wk_dist_int_3_1 < wk_dist_max & wk_dist_int_3_1 < VAR_VAL(idx_att, STRCAT("wk_dist_min_3_1_", LOWER(wk_lato))) )
            {
               // Arrotondo subito allo 0.5 mm
               VAR_VALUE_SET(idx_att, STRCAT("wk_dist_min_3_1_", LOWER(wk_lato)), ROUND2(wk_dist_int_3_1, 0.5))

               wk_pnt_int_3_1 = wk_pnt_int
               VAR_VALUE_SET(idx_att, wk_var_idx_near_3_1, idx_temp)
            }

            // verifico se è più vicino di altri punti, mi salvo la distanza per successivi confronti e l'idx della base
            if( wk_dist_int_3_2 < wk_dist_max & wk_dist_int_3_2 < VAR_VAL(idx_att, STRCAT("wk_dist_min_3_2_", LOWER(wk_lato))) )
            {
               // Arrotondo subito allo 0.5 mm
               VAR_VALUE_SET(idx_att, STRCAT("wk_dist_min_3_2_", LOWER(wk_lato)), ROUND2(wk_dist_int_3_2, 0.5))

               wk_pnt_int_3_2 = wk_pnt_int
               VAR_VALUE_SET(idx_att, wk_var_idx_near_3_2, idx_temp)
            }

//---            if( DEBUG == 1 )
//---            {
//---               HI(idx_temp, 1)
//---
//---               DISPLAY2(STRCAT("LATO ", wk_lato, "\n",
//---               "\nValuto base idx = ", STR(idx_temp),
//---               "\nang_retta = ", STR(wk_ang_retta),
//---               "\nwk_pnt_sx = [", STR(wk_pnt_sx.x), ",", STR(wk_pnt_sx.y), ",", STR(wk_pnt_sx.z), "]",
//---               "\nwk_pnt_dx = [", STR(wk_pnt_dx.x), ",", STR(wk_pnt_dx.y), ",", STR(wk_pnt_dx.z), "]",
//---               "\nwk_pnt_retta = [", STR(wk_pnt_retta.x), ",", STR(wk_pnt_retta.y), ",", STR(wk_pnt_retta.z), "]",
//---               "\nwk_pnt_int = [", STR(wk_pnt_int.x), ",", STR(wk_pnt_int.y), ",", STR(wk_pnt_int.z), "]",
//---               "\nDistanza da 1/3 = ", STR(wk_dist_int_3_1),
//---               "\nDistanza da 2/3 = ", STR(wk_dist_int_3_2),
//---               "\n\n(CTRL 3 BARRE)"))
//---               HI(idx_temp, 0)
//---            }
         }

         i = i + 1
      }

      // calcolo la distanza della barre
      if( IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_3_1)) == 1
        & IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_3_2)) == 1
        )
      {
         // setto le 3 barre
         VAR_VALUE_SET(idx_att, STRCAT("wk_n_bar_", LOWER(wk_lato)), 3)

         // calcolo la barra 1 (distanza da sx + arrotondamento allo 0.5)
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)), DISTANZA(wk_pnt_sx, wk_pnt_int_3_1))
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)), ROUND2(VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato))), 0.5))

         // calcolo la barra 3 (distanza da dx + arrotondamento allo 0.5)
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato)), DISTANZA(wk_pnt_dx, wk_pnt_int_3_2))
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato)), ROUND2(VAR_VAL(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato))), 0.5))

         // calcolo la barra 2 (centrale) per differenza
         VAR_VALUE_SET(idx_att, STRCAT("wk_x_bar2_", LOWER(wk_lato)), X - VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato))) - VAR_VAL(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato))))
      }

//---      if( DEBUG == 1 )
//---      {
//---         if( IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_3_1)) == 1 )
//---         {
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_3_1), 1)
//---            DISPLAY2(STRCAT("LATO ", wk_lato, "\n",
//---            "\nSono la base il cui centro è più vicino a 1/3 barra",
//---            "\n\nIdx = ", STR(VAR_VAL(idx_att, wk_var_idx_near_3_1)),
//---            "\nwk_dist_min_3_1 = ", STR(VAR_VAL(idx_att, STRCAT("wk_dist_min_3_1_", LOWER(wk_lato)))),
//---            // "\nwk_dist_min_3_2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_dist_min_3_2_", LOWER(wk_lato)))),
//---            "\nwk_x_bar1 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)))),
//---            "\nwk_x_bar2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar2_", LOWER(wk_lato)))),
//---            "\nwk_x_bar3 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato)))),
//---            "\n\n(CTRL 3 BARRE)"))
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_3_1), 0)
//---         }
//---
//---         if( IS_IDX(VAR_VAL(idx_att, wk_var_idx_near_3_2)) == 1 )
//---         {
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_3_2), 1)
//---            DISPLAY2(STRCAT("LATO ", wk_lato, "\n",
//---            "\nSono la base il cui centro è più vicino a 2/3 barra",
//---            "\n\nIdx = ", STR(VAR_VAL(idx_att, wk_var_idx_near_3_2)),
//---            //"\nwk_dist_min_3_1 = ", STR(VAR_VAL(idx_att, STRCAT("wk_dist_min_3_1_", LOWER(wk_lato)))),
//---            "\nwk_dist_min_3_2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_dist_min_3_2_", LOWER(wk_lato)))),
//---            "\nwk_x_bar1 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar1_", LOWER(wk_lato)))),
//---            "\nwk_x_bar2 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar2_", LOWER(wk_lato)))),
//---            "\nwk_x_bar3 = ", STR(VAR_VAL(idx_att, STRCAT("wk_x_bar3_", LOWER(wk_lato)))),
//---            "\nwk_n_barre = ", STR(VAR_VAL(idx_att, STRCAT("wk_n_barre_", LOWER(wk_lato)))),
//---            "\n\n(CTRL 3 BARRE)"))
//---            HI(VAR_VAL(idx_att, wk_var_idx_near_3_2), 0)
//---         }
//---      }
   }

   // FT 10/02/2020 - sistema costruttivo barra isola
   PROCEDURA SistCostrBarIso
   {
      //M4_GRUPPO__  = "BARRA ISOLA"
      M4_GRUPPO__  = MSG(1013)

      Z = $Cuc_Spe_BarraIso

      // sbordo grafico per miglior
      // visualizzazione dell'eccentrico
      // (solo dal punto di vista geometrico
      kv = 2

      // Diametro Eccentrico
      D_Ecc = 35
      // Distanza (offset) tra eccentrici
      Off_EccEcc = 68

      // Lunghezza/Diametro (spessore) Spina
      L_Spi = 65
      D_Spi = 12
      Off_SpiGiu = 46

      // distanza centroforo dal lato sx/dx per ORIZZONTALE
      OffX_GiuLat = 92
      // distanza centroforo dal basso/alto per VERTICALE
      OffY_GiuB = 73
      OffY_GiuA = 92


      // Per GruppoGiunzioniBarraIsola (alias GruppoGiunzioniBI)
      // Per GiunzioneBarraIsola (alias GiunzioneBI)

      VAR_tipo_giunzione = VAR_VAL_STR(idx_att, "VAR_tipo_giunzione")

      if( VAR_tipo_giunzione == "ORIZZONTALE" )
      {
         // 35x103
         X_Giu = D_Ecc
         Y_Giu = Off_EccEcc + D_Ecc

         c_rivestimento = [255, 0, 0]
      }
      else
      {
         // 103x35
         X_Giu = Off_EccEcc + D_Ecc
         Y_Giu = D_Ecc

         c_rivestimento = [0, 255, 0]
      }
   }

   // FT 10/02/2020 Visualizza giunzioni
   PROCEDURA GiunzioniShow
   {
      $Cuc_GiunzioniShow = 1
      COMANDO("RIGENERA")
   }

   PROCEDURA GiunzioniHide
   {
      $Cuc_GiunzioniShow = 0
      COMANDO("RIGENERA")
   }

   PROCEDURA FFLavorazioniShowHide
   {
      $Cuc_FFLavorazioniShow = 1 - $Cuc_FFLavorazioniShow
      COMANDO("RIGENERA")
   }

   // FT 10/03/2020 - Debug lavorazioni fianco di finitura
   // solo attivazione
   PROCEDURA FFLavorazioniDebug
   {
      $Cuc_FFLavorazioniDebug = 1
      $Cuc_FFLavorazioniShow = 1

      // attivo tutto
      COMANDO2("Show Abilita Off")
      COMANDO2("Rigenera")

      COMANDO("Rigenera")
      COMANDO("Show Abilita On")

      COMANDO("RenderMode aa transparency 0.900000")
      COMANDO("M4_Show Quote_Dinamiche Hide")
      COMANDO("M4_Show Annotazioni Hide")
      COMANDO("M4_Show Quote Hide")
      COMANDO("Show None")
      COMANDO("Show Alias Add FiancoFin")
      COMANDO("Update")

      COMANDO("M4_Show Quote_Dinamiche Show")
      COMANDO("M4_Show Quote Show")
   }

   PROCEDURA posa_vassoio_MeccEstraibile
   {
      @escluso = 1
      if( Vassoi_num >= Vassoio_num) { @escluso = 0 }

      @GRAFICA = "_graf_MeccEstr_Vassoio"

      @X = Vassoio_X
      @Z = Vassoio_Z

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - Telaio_Yatt)/2 + (Telaio_Yatt/Vassoi_num)*(Vassoio_num - 1)
      @base_0.z = base_0.z + Z - @Z - Telaio_Spe
      if( TipoEstraibile == 4) { @base_0.z = base_0.z + Z - @Z - Telaio_Spe - Vassoio_Side_Z }

      GEST_CODICE = ""
      if( Cucina_Versione > 2)
      {
         @GEST_CODICE = "7FK016"
         if( TipoEstraibile == 3) { @GEST_CODICE = "7FK012" }
         if( TipoEstraibile == 5)
         {
            @GEST_CODICE = "7FK025"
            if( VAR_VAL(PADRE(ATTUALE(),1), "X") < 300 ) { @GEST_CODICE = "" }
         }
      }

      if( IS_IDX(@GRAFICA_IDX) != 1) { EXITSUB() }
      SET_#(@GRAFICA_IDX)

      #TipoEstraibile = TipoEstraibile
   }

   PROCEDURA Cuc_PortaRifiuti_Cestone_Assegnazioni
   {
      if( IsIdx( ATTUALE(), "idx_ref") != 1)             { idx_ref = PADRE( ATTUALE(), 1) }
      if( IS_IDX(idx_ref) == 0)                          { EXITSUB() }

      idx_topl = GetTopLevel(ATTUALE())

      Cucina_Versione_Idx = idx_ref
      GOSUB Cucina_Versione

      DELETE_ME = 0

      // 1 - Larghezza
      X_Rid_Min = SE_NUM( Cucina_Versione > 2, -4, 0)
      X_Consentite = "600;736;900;920;1104"
      if( Cucina_Versione > 2) { X_Consentite = "600;750;900;1050;1200" }

      X_ref = VAR_VAL( idx_ref, "Xn")
      if( X_ref <= 0) { X_ref = VAR_VAL( idx_ref, "X") }

      X  = ARound( X_ref, X_Consentite, 0, 2)
      Xi = X  - X_Xi_Delta
      Xr = Xi - Xi_Xr_Delta

      // 1.1 - Controlli riduzione
      if( X - X_ref < X_Rid_Min
        | X - X_ref > X_Rid_Max)                         { DELETE_ME = 100000 + ABS(X - X_ref) }

      // 2 - Altezza
      Y = VAR_VAL( idx_ref, "Yn")
      if( Y <= 0) { Y = VAR_VAL( idx_ref, "Y") }

      Yi = Y - Y_Yi_Delta

      FLAG_HRidotta = 0
      //TODO: Mantengo come prima, specifiche da controllare, probabilmente va verificata l'altezza del cassetto, non del toplevel
      //if( Y <= 368) { FLAG_HRidotta = 1 }
      if( VAR_VAL( idx_topl, "Y") <= 368) { FLAG_HRidotta = 1 }

      Yr = 266
      if( FLAG_HRidotta > 0) { Yr = 220 }

      // 2.1 - Controlli riduzione
      if( Yr > Yi)                                       { DELETE_ME = 200001 }

      if( VAR_VAL( idx_topl, "Y") < 736
        & VAR_VAL( idx_topl, "VAR_Lavello") > 0)         { DELETE_ME = 200002 }

      // 3 - Profondita
      Z_ref = VAR_VAL( idx_ref, "MZ")
      if( Z_ref <= 0) { Z_ref = VAR_VAL( idx_ref, "Z") }

      Z = 500
      FLAG_Compensatore = 0
      if( Z_ref >= Z + Z_Compensatore) { FLAG_Compensatore = 1 }

      Z = Z + FLAG_Compensatore*Z_Compensatore
      Zi = Z - Z_Zi_Delta

      // 3.3 - Controlli riduzione
      if( Z_ref < Z )                                    { DELETE_ME = 300000 + (Z - Z_ref) }

      // 4 - Limiti costruttivi
      if( VAR_VAL( idx_ref, "UsoLavello") == 1)          { DELETE_ME = 400001 }
      if( VAR_VAL( idx_ref, "ConCassettoInterno") == 1)  { DELETE_ME = 400002 }

      // 5 - Modello 3d
      import_ext  = "|model|model.hsf"
      import_name = STRCAT( $path_sat,
                           "Cucina\PortaRifiuti\PRTRFT_",
                           SE_STR( FLAG_HRidotta > 0, "RID_", ""),
                           STR(X),
                           "#I.m4s" )
      import_new = STRCAT( import_name, import_ext )

      if( import != import_new)
      {
         import = import_new
         import_exist = FILE_EXIST(import_name)
      }
   }

   PROCEDURA Cuc_PortaRifiuti_Cestone_Controlli
   {
      if( $OnLoadOrder2 > 0)  { EXITSUB() }
      if( ACTION() <= 0)      { EXITSUB() }
      if( $CNP > 0)           { EXITSUB() }

      if( DELETE_ME > 0)
      {
         DISPLAY2( STRCAT( MSG(1105), " [", STR(DELETE_ME), "]"))
         DELETE_ME = 0

         GEST_CODICE = ""
         RADICE      = ""
         FLAG_RADICE = $NO_RAD

         COMANDO( STRCAT( "DELETE ", STR(ATTUALE()), " // Controlli", NOME(ATTUALE())))
      }
   }

   PROCEDURA Cuc_PortaRifiuti_Cestone_OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         $QueryResult__ = 1
         idx_ref      = $query_p1
         idx_ref_topl = GetTopLevel(idx_ref)

         GOSUB Cuc_PortaRifiuti_Cestone_Assegnazioni
         if( DELETE_ME > 0)                                                   { $QueryResult__ = 0 EXITSUB() }

         // Altri componenti
         COMPONENTI2( "wk_comp", idx_ref, "Cuc_PortaRifiuti_Cestone")
         if( wk_comp > 0)                                                     { $QueryResult__ = 0 EXITSUB() }
      }
   }

   PROCEDURA Cuc_PortaRifiuti_Cestone_Gestionale
   {
      GEST_X = X
      if( VAR_EXIST( ATTUALE(), "ORD_X"))
      {
         if( ORD_X - X >= X_Rid_Min
           & ORD_X - X <= X_Rid_Max) { GEST_X = ORD_X }
      }

      GEST_Y = Yr
      GEST_Z = Z

      perRADICE = "PRFT"
      if( FLAG_HRidotta > 0) { perRADICE = "PRFTB" }

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

   PROCEDURA Cuc_Ctrl_PresenzaPortaRifiuti
   {
      COMPONENTI2("wk_cmp",ATTUALE(),"Cuc_PortaRifiuti_Cestone")
      if( wk_cmp==0 )  { EXITSUB() }

      wk_msg = STRCAT(MSG(1090),"\n",MSG(1105))
      DISPLAY2(wk_msg)
      i = 1
      while ( i<=wk_cmp )
      {
         COMANDO(STRCAT("CANCELLA ",STR(wk_cmp[i]), " //da Cuc_Ctrl_PresenzaPortaRifiuti"))
         i = i + 1
      }
   }

   PROCEDURA Cuc_AttivaDistanzialeSuBaseAngolo
   {
      if( $OnLoadOrder==1 | $OnRigenera==1 )      { EXITSUB() }
      if( ACTION()<=0 )                           { EXITSUB() }
      if( $CNP==1 )                               { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_sx")==0 )      { EXITSUB() }

      wk_onoff = 1
      if( VAR_VAL(ATTUALE(),"OnCancellaBase")==1 )    { wk_onoff = 0 }

      if( IS_IDX(idx_sx) )
      {
         if( NOME(idx_sx)=="ScoccaT_BaseAngPan" ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_sx) , " // Cuc_AttivaDistanzialeSuBaseAngolo " )) }
      }

      if( IS_IDX(idx_dx) )
      {
         if( NOME(idx_dx)=="ScoccaT_BaseAngPan" ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_dx) , " // Cuc_AttivaDistanzialeSuBaseAngolo " )) }
      }
   }

   PROCEDURA Config_Led_Cuc
   {
      X_Max = 1000
      Y = 11
      Z = 15

      RieX  =  0
      RieY  =  0
      RieZR =  0
      RieZF =  0

      //LED per colonna cucina
      if( TipoLED==0 )
      {
         Y = 10
         Z = 11
         X_Max = 1162
         gest_y = Y
         gest_z = Z

         RieX  = 0
         RieY  = -2
         RieZF = 106 - VAR_VAL( PADRE( ATTUALE(), 1), "wk_RieZF")

         perRADICE = "MSKY"
      }

      //LED per pensile
      if( TipoLED==1 )
      {
         perRADICE = "LEDPENS"
         gest_y = 0
         gest_z = 0

         RieX  =  35.5

         RieY  =  -1
         RieZR =  71

         Xmin_LED_LED = 45
        #ifdef TEC;AZI
         Xmin_LED_LED = 0
        #endif

         X_Max = VAR_VAL(PADRE(ATTUALE(),1),"X")

         idx_test = PADRE(ATTUALE(),1)
         COMPONENTI2("led",idx_test,"Cuc_Led")
         wk_sezione = "ASSEGNAZIONI"
         GOSUB Calcola_Spazio_Disponibile_Led_Cuc
         X_Max = wk_free
         //+ X

         wk_menu = "XLedPe0"
         if( X_Max>=500 )  { wk_menu = "XLedPe1" }
         if( X_Max>=750 )  { wk_menu = "XLedPe2" }
         if( X_Max>=1000 ) { wk_menu = "XLedPe3" }

         VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE)
         VAR_SET_MENU(ATTUALE(),"X",wk_menu)

         wk_offx_min = RieX
         wk_offx_max = VAR_VAL(PADRE(ATTUALE(),1),"X") - RieX

         idx_test = PADRE(ATTUALE(),1)
         COMPONENTI2("led",idx_test,"Cuc_Led")
         if( led==2 )
         {
            idx_led1 = led[1]
            idx_led2 = led[2]

            if( ATTUALE()==idx_led1 ) { wk_offx_max = VAR_VAL(idx_led2,"OffX") - Xmin_LED_LED }
            if( ATTUALE()==idx_led2 ) { wk_offx_min = VAR_VAL(idx_led1,"X") + VAR_VAL(idx_led1,"OffX") + Xmin_LED_LED }
         }

         wk_offx_min = ROUNDDOWN(wk_offx_min,0)
         wk_offx_max = ROUNDDOWN(wk_offx_max,0)

         wk_offx_max = wk_offx_max - X

         wk_menu = STRCAT("( ",STR(wk_offx_min),"-",STR(wk_offx_max)," )")

         VAR_SET_MODE(ATTUALE(),"OffX",$MODE_USER)
         VAR_SET_MENU(ATTUALE(),"OffX",wk_menu)

         if( wk_offx_min>wk_offx_max ) { VAR_SET_MODE(ATTUALE(),"OffX",$MODE_SHOWALWAYS) }

         //Luca 20/10/2020
         if( UN_PADRE("ScoccaS_PensileAngolo") )  { VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS) }
      }

      //LED per pensile scolapiatti
      if( TipoLED==2 )
      {
         X_Max = 1104
         perRADICE = "LEDSP"
         gest_y = 0
         gest_z = 0

         RieX  =   0
         RieY  =  18
         RieZR =  15
      }

      //LED sottobasi
      if( TipoLED==3 )
      {
         Y = 10
         Z = 10
         X_Max = 1162

         gest_y = Y
         gest_z = Z

         RieX  =  0
         RieY  =  -10
         RieZR =  7
      }

      //LED per bagno
      if( TipoLED==4 )
      {
         Y = 10
         Z = 10
         perRADICE = ""
         gest_y = Y
         gest_z = Z

         RieX  =  0
         RieY  =  -10
         RieZF =  0
      }
   }

   PROCEDURA Set_WATT_Led_Cuc
   {
      //LED per colonna cucina
      if( TipoLED==0 )
      {
         Led_WATT = (X/10)*0.11
      }

      //LED per pensile
      if( TipoLED==1 )
      {
         if( X==372  )  { Led_WATT = 5.5 }
         if( X==500  )  { Led_WATT = 6.8 }
         if( X==760  )  { Led_WATT = 10 }
         if( X==1000 )  { Led_WATT = 15 }
      }

      //LED per pensile scolapiatti
      if( TipoLED==2 )
      {
         if( X==736  )  { Led_WATT = 6.8  }
         if( X==920  )  { Led_WATT = 10 }
         if( X==1104 )  { Led_WATT = 14 }
      }

      //LED sottobasi
      if( TipoLED==3 )
      {
         if( X==600  )  { Led_WATT = 9.1  }
         if( X==900  )  { Led_WATT = 14.2 }
      }
   }

   PROCEDURA Calcola_Spazio_Disponibile_Led_Cuc
   {
      //verifico spazio libero
      wk_free = VAR_VAL(idx_test,"X") - 2*RieX
      i = 1

      while ( i<=led )
      {
         if( wk_sezione=="ASSEGNAZIONI"
           | wk_sezione=="ATTREZZA"  )
         {
            if( led[i]!=ATTUALE()  )
            {
               wk_free = wk_free - VAR_VAL(led[i],"X") - Xmin_LED_LED
            }
         }
         else
         {
            wk_free = wk_free - VAR_VAL(led[i],"X") - Xmin_LED_LED
         }
         i = i + 1
      }

      //COMANDO2( STRCAT( "LOGMSG Calcola_Spazio_Disponibile_Led_Cuc [", STR(ATTUALE()), " - ", NOME(ATTUALE()), "]: wk_free: ", STR(wk_free)))
   }

   PROCEDURA Cuc_CalcolaTrasformatori
   {
      // 0 - Preliminari
      // 0.1 - Debug
      $wk_log = VAR_VAL( -1, "ATTIVA_LOG_DBG")

      $wk_proc_nome = "CUC_CalcolaTrasformatori"
      $wk_proc_nome = STRCAT( $wk_proc_nome, " |")
      $wk_proc_nome_sub = STRCAT( $wk_proc_nome, "  ")

      ScriviSuLog( $wk_log, $wk_proc_nome, "START")

      // 0.2 - Strutture
      STRUTTURE("$wk_cuc_calcolatrasf_strutture")
      if( $wk_cuc_calcolatrasf_strutture <= 0 )
      {
         ScriviSuLog( $wk_log, $wk_proc_nome_sub, "NESSUNA STRUTTURA TROVATA")
         ScriviSuLog( $wk_log, $wk_proc_nome, "END")
         EXITSUB()
      }

      // 1 - Raggruppamenti
      $wk_cuc_calcolatrasf_elementi = 3                                              $wk_cuc_calcolatrasf_codice = 3              $wk_cuc_calcolatrasf_watt = 3
      $wk_cuc_calcolatrasf_elementi_##1 = "ScoccaT_C*"                               $wk_cuc_calcolatrasf_codice_##1 = "D20021"   $wk_cuc_calcolatrasf_watt_##1 = 30
      $wk_cuc_calcolatrasf_elementi_##2 = "ScoccaS_P*;Modulo*Pens*368"               $wk_cuc_calcolatrasf_codice_##2 = "D20008"   $wk_cuc_calcolatrasf_watt_##2 = 30
      $wk_cuc_calcolatrasf_elementi_##3 = "ScoccaT_B*;GruppoBarraIsola;BarraIsola"   $wk_cuc_calcolatrasf_codice_##3 = "D20008"   $wk_cuc_calcolatrasf_watt_##3 = 30

      // 2 - Composizioni
      $wk_cuc_calcolatrasf_comp_var = "CLED_NrComp"
      $wk_cuc_calcolatrasf_comp_val = 0

      // 2.1 - Reset
      WITH_VAR( "$wk_cuc_calcolatrasf_comp", $wk_cuc_calcolatrasf_comp_var, 0, 0, "")

      $wk_cuc_calcolatrasf_comp_num = 1
      while ( $wk_cuc_calcolatrasf_comp_num <= $wk_cuc_calcolatrasf_comp)
      {
         DEL_VAR( $wk_cuc_calcolatrasf_comp[$wk_cuc_calcolatrasf_comp_num], $wk_cuc_calcolatrasf_comp_var)

         $wk_cuc_calcolatrasf_comp_num = $wk_cuc_calcolatrasf_comp_num + 1
      }

      // 2.2 - Genero
      $wk_cuc_calcolatrasf_strutture_toll = 10

      // 2.2.1 - Ciclo i vari raggruppamenti del punto 1
      $wk_cuc_calcolatrasf_elemento_num = 1
      while( $wk_cuc_calcolatrasf_elemento_num <= $wk_cuc_calcolatrasf_elementi)
      {
         $wk_cuc_calcolatrasf_elemento_att     = $wk_cuc_calcolatrasf_elementi[$wk_cuc_calcolatrasf_elemento_num]

         // 2.2.1.1 - Ciclo tutte le strutture
         $wk_cuc_calcolatrasf_struttura_num      = 1
         $wk_cuc_calcolatrasf_struttura_comp_num = 1000*$wk_cuc_calcolatrasf_elemento_num //Utilizzo migliaia per identificare il raggruppamento, unità come progressivo

         while( $wk_cuc_calcolatrasf_struttura_num <= $wk_cuc_calcolatrasf_strutture)
         {
            $wk_cuc_calcolatrasf_struttura_att      = $wk_cuc_calcolatrasf_strutture[$wk_cuc_calcolatrasf_struttura_num]
            $wk_cuc_calcolatrasf_struttura_att_nome = NOME($wk_cuc_calcolatrasf_struttura_att)

            $wk_cuc_calcolatrasf_struttura_att_comp = VAR_VAL( $wk_cuc_calcolatrasf_struttura_att, $wk_cuc_calcolatrasf_comp_var)

            // 2.2.1.1.1 - Assegno composizione se la struttura corrisponde ai criteri del raggruppamento
            if( Is_In_StrArray( $wk_cuc_calcolatrasf_struttura_att_nome, $wk_cuc_calcolatrasf_elemento_att, "") == 1)
            {
               if( $wk_cuc_calcolatrasf_struttura_att_comp <= 0)
               {
                  $wk_cuc_calcolatrasf_struttura_comp_num = $wk_cuc_calcolatrasf_struttura_comp_num + 1
                  $wk_cuc_calcolatrasf_struttura_att_comp = $wk_cuc_calcolatrasf_struttura_comp_num

                  VAR_VALUE_SET( $wk_cuc_calcolatrasf_struttura_att, $wk_cuc_calcolatrasf_comp_var, $wk_cuc_calcolatrasf_struttura_att_comp)

                  AddItem2Array_IfNotExist( -1, "wk_cuc_calcolatrasf_comp_val", $wk_cuc_calcolatrasf_struttura_att_comp, "")
               }

               // 2.2.1.1.2 - Ciclo le strutture vicine, assegno lo stesso gruppo se non fanno già parte di una composizione e corrispondono ai criteri del raggruppamento
               BOX_MODE(0)
               NEAR( "$wk_cuc_calcolatrasf_strutture_near", $wk_cuc_calcolatrasf_struttura_att, $wk_cuc_calcolatrasf_strutture_toll, 0, "*")

               $wk_cuc_calcolatrasf_struttura_near_num = 1
               while( $wk_cuc_calcolatrasf_struttura_near_num <= $wk_cuc_calcolatrasf_strutture_near)
               {
                  $wk_cuc_calcolatrasf_struttura_near_att      = $wk_cuc_calcolatrasf_strutture_near[$wk_cuc_calcolatrasf_struttura_near_num]
                  $wk_cuc_calcolatrasf_struttura_near_att_nome = NOME($wk_cuc_calcolatrasf_struttura_near_att)
                  $wk_cuc_calcolatrasf_struttura_near_att_comp = VAR_VAL( $wk_cuc_calcolatrasf_struttura_near_att, $wk_cuc_calcolatrasf_comp_var)

                  if( $wk_cuc_calcolatrasf_struttura_near_att_comp <= 0
                    & $wk_cuc_calcolatrasf_struttura_near_att != $wk_cuc_calcolatrasf_struttura_att )
                  {
                     if( Is_In_StrArray( $wk_cuc_calcolatrasf_struttura_near_att_nome, $wk_cuc_calcolatrasf_elemento_att, "") == 1)
                     {
                        VAR_VALUE_SET( $wk_cuc_calcolatrasf_struttura_near_att, $wk_cuc_calcolatrasf_comp_var, $wk_cuc_calcolatrasf_struttura_att_comp)
                     }
                  }

                  $wk_cuc_calcolatrasf_struttura_near_num = $wk_cuc_calcolatrasf_struttura_near_num + 1
               }
            }

            $wk_cuc_calcolatrasf_struttura_num = $wk_cuc_calcolatrasf_struttura_num + 1
         }

         $wk_cuc_calcolatrasf_elemento_num = $wk_cuc_calcolatrasf_elemento_num + 1
      }

      // 3 - Trasformatori
      $wk_cuc_calcolatrasf_trasf          = 0
      $wk_cuc_calcolatrasf_trasf_qta      = 0
      $wk_cuc_calcolatrasf_trasf_qta_prev = 0

      // 3.1 - Calcolo necessari: devo calcolare quanti trasformatori servono per composizione, per tipologia di led e per vattaggio
      // 3.1.1 - Ciclo composizioni individuate nel punto 2
      $wk_cuc_calcolatrasf_comp_num = 1
      while( $wk_cuc_calcolatrasf_comp_num <= $wk_cuc_calcolatrasf_comp_val)
      {
         // 3.1.1.1 - Dati composizione
         $wk_cuc_calcolatrasf_comp_att      = $wk_cuc_calcolatrasf_comp_val[$wk_cuc_calcolatrasf_comp_num]
         $wk_cuc_calcolatrasf_comp_att_tipo = FLOOR2( $wk_cuc_calcolatrasf_comp_att, 1000)/1000

         // 3.1.1.2 - Pe rogni composizione creo un array temporaneo per i trasformatori, composto da chiave univoca trasformatore necessario e watt, i dati verranno poi utilizzati per calcolare la quantità
         $wk_cuc_calcolatrasf_comp_att_trasf      = 0
         $wk_cuc_calcolatrasf_comp_att_trasf_watt = 0

         $wk_cuc_calcolatrasf_comp_att_trasf_codice_var = GetArrayVar( "wk_cuc_calcolatrasf_codice", $wk_cuc_calcolatrasf_comp_att_tipo)
         $wk_cuc_calcolatrasf_comp_att_trasf_codice_val = VAR_VAL_STR( -1, $wk_cuc_calcolatrasf_comp_att_trasf_codice_var)

         WITH_VAR( "$wk_cuc_calcolatrasf_strutture", "CLED_NrComp", 0, 1, STR($wk_cuc_calcolatrasf_comp_att))

         if( $wk_cuc_calcolatrasf_strutture > 0 )
         {
            // 3.1.1.3 - Ordino le strutture
            SORT_POINT( [-99999,-99999,-99999], "$wk_cuc_calcolatrasf_strutture", "base_0")

            SET_#($wk_cuc_calcolatrasf_strutture[1])
            SORT_POINT( #base_0, "$wk_cuc_calcolatrasf_strutture", "base_0")

            // 3.1.2 - Ciclo le strutture di ogni composizione
            $wk_cuc_calcolatrasf_struttura_num = 1
            while( $wk_cuc_calcolatrasf_struttura_num <= $wk_cuc_calcolatrasf_strutture )
            {
               $wk_cuc_calcolatrasf_struttura_att = $wk_cuc_calcolatrasf_strutture[$wk_cuc_calcolatrasf_struttura_num]

               // 3.1.2.1 - Ciclo i led trovati per ogni struttura di ogni composizione
               COMPONENTI2( "$wk_cuc_calcolatrasf_led", $wk_cuc_calcolatrasf_struttura_att, "Cuc_Led")
               $wk_cuc_calcolatrasf_led_num = 1
               while ( $wk_cuc_calcolatrasf_led_num <= $wk_cuc_calcolatrasf_led )
               {
                  // 3.1.2.1.1 - Dati del led
                  $wk_cuc_calcolatrasf_led_att  = $wk_cuc_calcolatrasf_led[$wk_cuc_calcolatrasf_led_num]
                  $wk_cuc_calcolatrasf_led_rev  = VAR_VAL( $wk_cuc_calcolatrasf_led_att, "VAR_Revisione")
                  $wk_cuc_calcolatrasf_led_watt = VAR_VAL( $wk_cuc_calcolatrasf_led_att, "Led_WATT")
                  $wk_cuc_calcolatrasf_led_volt = 12
                  if( $wk_cuc_calcolatrasf_led_rev > 0 ) { $wk_cuc_calcolatrasf_led_volt = 24 }

                  // 3.1.2.1.2 - Creo chiave univoca del trasformatore necessario
                  $wk_cuc_calcolatrasf_led_trasf_codice = STRCAT( "GEST_CODICE=", APICI(), $wk_cuc_calcolatrasf_comp_att_trasf_codice_val, APICI())
                  $wk_cuc_calcolatrasf_led_trasf_vest   = STRCAT( "GEST_C024=", APICI(), "AL005", APICI())
                  if( $wk_cuc_calcolatrasf_led_volt == 24 ) { $wk_cuc_calcolatrasf_led_trasf_vest = STRCAT( "GEST_C024=", APICI(), "AL006", APICI()) }
                  $wk_cuc_calcolatrasf_led_trasf        = STRCAT( $wk_cuc_calcolatrasf_led_trasf_codice, ";", $wk_cuc_calcolatrasf_led_trasf_vest)

                  // 3.1.2.1.3 - Cerco chiave univoca negli array dei trasformatori, se trovo incremento il wattaggio precedente, altrimenti creo nuovo valore
                  $wk_cuc_calcolatrasf_comp_att_trasf_trovati = 0
                  $wk_cuc_calcolatrasf_comp_att_trasf_num = 1
                  while( $wk_cuc_calcolatrasf_comp_att_trasf_trovati == 0
                       & $wk_cuc_calcolatrasf_comp_att_trasf_num <= $wk_cuc_calcolatrasf_comp_att_trasf )
                  {
                     $wk_cuc_calcolatrasf_comp_att_trasf_att = $wk_cuc_calcolatrasf_comp_att_trasf[$wk_cuc_calcolatrasf_comp_att_trasf_num]

                     if( $wk_cuc_calcolatrasf_comp_att_trasf_att == $wk_cuc_calcolatrasf_led_trasf ) { $wk_cuc_calcolatrasf_comp_att_trasf_trovati = $wk_cuc_calcolatrasf_comp_att_trasf_num }

                     $wk_cuc_calcolatrasf_comp_att_trasf_num = $wk_cuc_calcolatrasf_comp_att_trasf_num + 1
                  }

                  // 3.1.2.1.3.1 - Creo nuovo valore
                  if( $wk_cuc_calcolatrasf_comp_att_trasf_trovati == 0)
                  {
                     AddItem2Array( -1, "wk_cuc_calcolatrasf_comp_att_trasf", 0, $wk_cuc_calcolatrasf_led_trasf)
                     AddItem2Array( -1, "wk_cuc_calcolatrasf_comp_att_trasf_watt", $wk_cuc_calcolatrasf_led_watt, "")
                  }

                  // 3.1.2.1.3.1 - Incremento precedente
                  if( $wk_cuc_calcolatrasf_comp_att_trasf_trovati > 0)
                  {
                     $wk_cuc_calcolatrasf_comp_att_trasf_watt_var = GetArrayVar( "wk_cuc_calcolatrasf_comp_att_trasf_watt", $wk_cuc_calcolatrasf_comp_att_trasf_trovati)
                     $wk_cuc_calcolatrasf_comp_att_trasf_watt_val = VAR_VAL( -1, $wk_cuc_calcolatrasf_comp_att_trasf_watt_var)

                     VAR_VALUE_SET( -1, $wk_cuc_calcolatrasf_comp_att_trasf_watt_var, $wk_cuc_calcolatrasf_comp_att_trasf_watt_val + $wk_cuc_calcolatrasf_led_watt)
                  }

                  $wk_cuc_calcolatrasf_led_num = $wk_cuc_calcolatrasf_led_num + 1
               }

               $wk_cuc_calcolatrasf_struttura_num = $wk_cuc_calcolatrasf_struttura_num + 1
            }
         }

         // 3.1.3 - Ho trovato i trasformatori necessari per questa composizione e i watt che devono erogare, converto in quantità
         $wk_cuc_calcolatrasf_comp_att_trasf_watt_var   = GetArrayVar( "wk_cuc_calcolatrasf_watt", $wk_cuc_calcolatrasf_comp_att_tipo)
         $wk_cuc_calcolatrasf_comp_att_trasf_watt_val   = VAR_VAL( -1, $wk_cuc_calcolatrasf_comp_att_trasf_watt_var)

         // 3.1.3.1 - Ciclo i trasformatori di altre composizioni
         $wk_cuc_calcolatrasf_comp_att_trasf_num = 1
         while( $wk_cuc_calcolatrasf_comp_att_trasf_num <= $wk_cuc_calcolatrasf_comp_att_trasf )
         {
            $wk_cuc_calcolatrasf_comp_att_trasf_att  = $wk_cuc_calcolatrasf_comp_att_trasf[$wk_cuc_calcolatrasf_comp_att_trasf_num]
            $wk_cuc_calcolatrasf_comp_att_trasf_watt = $wk_cuc_calcolatrasf_comp_att_trasf_watt[$wk_cuc_calcolatrasf_comp_att_trasf_num]
            $wk_cuc_calcolatrasf_comp_att_trasf_qta  = CEIL2( $wk_cuc_calcolatrasf_comp_att_trasf_watt/$wk_cuc_calcolatrasf_comp_att_trasf_watt_val, 1)

            // 3.1.3.2 - Cerco chiave univoca negli array dei trasformatori, se trovo incremento la quantità, altrimenti creo nuovo valore
            $wk_cuc_calcolatrasf_trasf_trovati = 0
            $wk_cuc_calcolatrasf_trasf_num     = 1
            while( $wk_cuc_calcolatrasf_trasf_trovati == 0
                 & $wk_cuc_calcolatrasf_trasf_num <= $wk_cuc_calcolatrasf_trasf )
            {
               $wk_cuc_calcolatrasf_trasf_att = $wk_cuc_calcolatrasf_trasf[$wk_cuc_calcolatrasf_trasf_num]

               if( $wk_cuc_calcolatrasf_trasf_att == $wk_cuc_calcolatrasf_led_trasf ) { $wk_cuc_calcolatrasf_trasf_trovati = $wk_cuc_calcolatrasf_trasf_num }

               $wk_cuc_calcolatrasf_trasf_num = $wk_cuc_calcolatrasf_trasf_num + 1
            }

            // 3.1.3.2.1 - Creo nuovo valore
            if( $wk_cuc_calcolatrasf_trasf_trovati == 0)
            {
               AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf", 0, $wk_cuc_calcolatrasf_comp_att_trasf_att)
               AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf_qta", $wk_cuc_calcolatrasf_comp_att_trasf_qta, "")
               AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf_qta_prev", 0, "")
            }

            // 3.1.3.2.2 - Incremento
            if( $wk_cuc_calcolatrasf_trasf_trovati > 0)
            {
               $wk_cuc_calcolatrasf_trasf_qta_var = GetArrayVar( "wk_cuc_calcolatrasf_trasf_qta", $wk_cuc_calcolatrasf_trasf_trovati)
               $wk_cuc_calcolatrasf_trasf_qta_val = VAR_VAL( -1, $wk_cuc_calcolatrasf_trasf_qta_var)

               VAR_VALUE_SET( -1, $wk_cuc_calcolatrasf_trasf_qta_var, $wk_cuc_calcolatrasf_trasf_qta_val + $wk_cuc_calcolatrasf_comp_att_trasf_qta)
            }

            $wk_cuc_calcolatrasf_comp_att_trasf_num = $wk_cuc_calcolatrasf_comp_att_trasf_num + 1
         }

         $wk_cuc_calcolatrasf_comp_num = $wk_cuc_calcolatrasf_comp_num + 1
      }

      // 3.2 - Trasformatori già inseriti
      WITH_VAR( "$wk_cuc_calcolatrasf_trasf_esistenti", "AUTO_DA_CLED", $num, 1, "1")

      // 3.2.1 - Ciclo i trasformatori già inseriti e colleziono i relativi dati
      $wk_cuc_calcolatrasf_trasf_esistente_num = 1
      while( $wk_cuc_calcolatrasf_trasf_esistente_num <= $wk_cuc_calcolatrasf_trasf_esistenti )
      {
         $wk_cuc_calcolatrasf_trasf_esistente_att = $wk_cuc_calcolatrasf_trasf_esistenti[$wk_cuc_calcolatrasf_trasf_esistente_num]

         // 3.2.1.1 - Quantità esistente
         $wk_cuc_calcolatrasf_trasf_esistente_att_qta    = VAR_VAL( $wk_cuc_calcolatrasf_trasf_esistente_att, "QUANTITA")
         if( $wk_cuc_calcolatrasf_trasf_esistente_att_qta <= 0 ) { $wk_cuc_calcolatrasf_trasf_esistente_att_qta = 1 }

         // 3.2.1.2 - Chiave univoca
         $wk_cuc_calcolatrasf_trasf_esistente_att_codice = VAR_VAL_STR( $wk_cuc_calcolatrasf_trasf_esistente_att, "GEST_CODICE")
         $wk_cuc_calcolatrasf_trasf_esistente_att_codice = STRCAT( "GEST_CODICE=", APICI(), $wk_cuc_calcolatrasf_trasf_esistente_att_codice, APICI())

         $wk_cuc_calcolatrasf_trasf_esistente_att_vest   = VAR_VAL_STR( $wk_cuc_calcolatrasf_trasf_esistente_att, "GEST_C024")
         if( $wk_cuc_calcolatrasf_trasf_esistente_att_vest == "" ) { $wk_cuc_calcolatrasf_trasf_esistente_att_vest = "AL006" }
         $wk_cuc_calcolatrasf_trasf_esistente_att_vest   = STRCAT( "GEST_C024=", APICI(), $wk_cuc_calcolatrasf_trasf_esistente_att_vest, APICI())

         $wk_cuc_calcolatrasf_trasf_esistente            = STRCAT( $wk_cuc_calcolatrasf_trasf_esistente_att_codice, ";", $wk_cuc_calcolatrasf_trasf_esistente_att_vest)

         // 3.2.1.3 - Cerco chiave univoca negli array dei trasformatori necessari
         $wk_cuc_calcolatrasf_trasf_trovati = 0
         $wk_cuc_calcolatrasf_trasf_num     = 1
         while( $wk_cuc_calcolatrasf_trasf_trovati == 0
              & $wk_cuc_calcolatrasf_trasf_num <= $wk_cuc_calcolatrasf_trasf )
         {
            $wk_cuc_calcolatrasf_trasf_att = $wk_cuc_calcolatrasf_trasf[$wk_cuc_calcolatrasf_trasf_num]

            if( $wk_cuc_calcolatrasf_trasf_att == $wk_cuc_calcolatrasf_trasf_esistente ) { $wk_cuc_calcolatrasf_trasf_trovati = $wk_cuc_calcolatrasf_trasf_num }

            $wk_cuc_calcolatrasf_trasf_num = $wk_cuc_calcolatrasf_trasf_num + 1
         }

         // 3.2.1.3.1 - Creo nuovo valore
         if( $wk_cuc_calcolatrasf_trasf_trovati == 0)
         {
            AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf", 0, $wk_cuc_calcolatrasf_trasf_esistente)
            AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf_qta", 0, "")
            AddItem2Array( -1, "wk_cuc_calcolatrasf_trasf_qta_prev", $wk_cuc_calcolatrasf_trasf_esistente_att_qta, "")
         }

         // 3.2.1.3.2 - Incremento
         if( $wk_cuc_calcolatrasf_trasf_trovati > 0)
         {
            $wk_cuc_calcolatrasf_trasf_qta_var      = GetArrayVar( "wk_cuc_calcolatrasf_trasf_qta", $wk_cuc_calcolatrasf_trasf_trovati)
            $wk_cuc_calcolatrasf_trasf_qta_val      = VAR_VAL( -1, $wk_cuc_calcolatrasf_trasf_qta_var)

            $wk_cuc_calcolatrasf_trasf_qta_prev_var = GetArrayVar( "wk_cuc_calcolatrasf_trasf_qta_prev", $wk_cuc_calcolatrasf_trasf_trovati)
            $wk_cuc_calcolatrasf_trasf_qta_prev_val = VAR_VAL( -1, $wk_cuc_calcolatrasf_trasf_qta_prev_var)

            VAR_VALUE_SET( -1, $wk_cuc_calcolatrasf_trasf_qta_prev_var, $wk_cuc_calcolatrasf_trasf_qta_prev_val + $wk_cuc_calcolatrasf_trasf_esistente_att_qta)
         }

         // 3.2.1.4 - Quantità necessaria e precedente
         $wk_cuc_calcolatrasf_trasf_qta_necessaria = 0
         if( $wk_cuc_calcolatrasf_trasf_trovati > 0 ) { $wk_cuc_calcolatrasf_trasf_qta_necessaria = $wk_cuc_calcolatrasf_trasf_qta_val }

         $wk_cuc_calcolatrasf_trasf_qta_precedente = 0
         if( $wk_cuc_calcolatrasf_trasf_trovati > 0 ) { $wk_cuc_calcolatrasf_trasf_qta_precedente = $wk_cuc_calcolatrasf_trasf_qta_prev_val }

         // 3.2.1.5 - Modifica trasformatori esistenti, ovvero sono il primo trasformatore che corrisponde alla chiave e la quantità necessaria non corrisponde
         if( $wk_cuc_calcolatrasf_trasf_qta_precedente == 0
           & $wk_cuc_calcolatrasf_trasf_esistente_att_qta > 0
           & $wk_cuc_calcolatrasf_trasf_qta_necessaria > 0
           & $wk_cuc_calcolatrasf_trasf_esistente_att_qta != $wk_cuc_calcolatrasf_trasf_qta_necessaria)
         {
            COMANDO2( STRCAT( "VAR_CHANGE 1 ", STR($wk_cuc_calcolatrasf_trasf_esistente_att), " QUANTITA=", STR($wk_cuc_calcolatrasf_trasf_qta_necessaria), " // [3.2.1.5] Cuc_CalcolaTrasformatori"))
         }

         // 3.2.1.6 - Elimino trasformatori esistenti, ovvero non sono più necessario o non sono il primo trasformatore che corrisponde alla chiave
         if( $wk_cuc_calcolatrasf_trasf_qta_precedente > 0
           | $wk_cuc_calcolatrasf_trasf_qta_necessaria <= 0)
         {
            COMANDO2( STRCAT( "DELETE ", STR($wk_cuc_calcolatrasf_trasf_esistente_att), " // [3.2.1.6] Cuc_CalcolaTrasformatori"))
         }

         $wk_cuc_calcolatrasf_trasf_esistente_num = $wk_cuc_calcolatrasf_trasf_esistente_num + 1
      }

      // 3.2.2 - Inserisco trasformatori mancanti
      $wk_cuc_calcolatrasf_trasf_num = 1
      wk_i = 1
      while( $wk_cuc_calcolatrasf_trasf_num <= $wk_cuc_calcolatrasf_trasf )
      {
         $wk_cuc_calcolatrasf_trasf_att          = $wk_cuc_calcolatrasf_trasf[$wk_cuc_calcolatrasf_trasf_num]
         $wk_cuc_calcolatrasf_trasf_att_qta      = $wk_cuc_calcolatrasf_trasf_qta[$wk_cuc_calcolatrasf_trasf_num]
         $wk_cuc_calcolatrasf_trasf_att_qta_prev = $wk_cuc_calcolatrasf_trasf_qta_prev[$wk_cuc_calcolatrasf_trasf_num]

         if( $wk_cuc_calcolatrasf_trasf_att_qta > 0
           & $wk_cuc_calcolatrasf_trasf_att_qta_prev <= 0)
         {
            COMANDO2( "ELEMENTO RigaOrdine_NonGraficato")
            COMANDO2( "STRUTTURA")
            COMANDO2( STRCAT( "VAR_FIX ",
                              REPLACE( $wk_cuc_calcolatrasf_trasf_att, ";", " "),
                              " QUANTITA=", STR($wk_cuc_calcolatrasf_trasf_att_qta),
                              " NO_AUTO=1",
                              " AUTO_DA_CLED=1"))
            COMANDO2("ACCESSORIO")
         }

         $wk_cuc_calcolatrasf_trasf_num = $wk_cuc_calcolatrasf_trasf_num + 1
      }
   }

   //Luca 08/04/2020
   //calcolo i trasfomatori della cucina
   //anche se il trasformatore è sempre lo stesso divido tra:
   // - LED BASI E COLONNE
   // - LED PENSILI
   //
   //devo dividere però tutte le composizioni (gestisco tolleranza di vicinanza)
   PROCEDURA CUC_CalcolaTrasformatori
   {
      $CLED_debug = 0
      #ifdef TE
         $CLED_debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      $CLED_debug_msg = "START"     LogProcedura2("CLED_CalcoloTrasf")

      VAR_SET_MODE(-1,"CLED_debug",$MODE_NOSAVE)
      VAR_SET_MODE(-1,"CLED_debug_msg",$MODE_NOSAVE)

      $wk_trasf_cod = "D20008"

      WITH_ALIAS("$wk_led","Cuc_Led")
      if( $wk_led==0 )
      {
         $CLED_debug_msg  = "NON SONO PRESENTI LED -- ESCO"
         LogProcedura2("CLED_CalcoloTrasf")

         //CANCELLO EVENTUALI TRASFORMATORI NON NECESSARI
         GOSUB CUC_CalcolaTrasformatori_TroviTrasf_Presenti
         $CLED_debug_msg  = STRCAT("CANCELLO TRASFORMATORE NON PIÙ NECESSARIO")
         LogProcedura2("CLED_CalcoloTrasf")

         $wk_i = 1
         while ( $wk_i<=$wk_trasf_exist )
         {
            COMANDO2(STRCAT("DELETE ",STR($wk_trasf_exist[$wk_i]), " //da CUC_CalcolaTrasformatori"))
            $wk_i = $wk_i + 1
         }

         EXITSUB()
      }

      //**************************************************
      //RESET VARIABILI SU TUTTE LE STRUTTURE
      //**************************************************
      WITH_VAR("$wk_str_comp","CLED_NrComp",0,0,"")
      $wk_i = 1
      while ( $wk_i<=$wk_str_comp )
      {
         DEL_VAR($wk_str_comp[$wk_i],"CLED_NrComp")
         $wk_i = $wk_i + 1
      }

      $wk_toll = 10
      //**************************************************
      //CREO LE COMPOSIZIONI
      //**************************************************
      $CLED_debug_msg  = "CREO LE COMPOSIZIONI"
      LogProcedura2("CLED_CalcoloTrasf")

      STRUTTURE("$wk_str")
      $wk_comp = 1

      $wk_i = 1
      while ( $wk_i<=$wk_str )
      {
         $wk_idx_str = $wk_str[$wk_i]
         $wk_comp_str = VAR_VAL($wk_idx_str,"CLED_NrComp")

         $CLED_debug_msg  = STRCAT("CREO LE COMPOSIZIONI -- TESTO STRUTTURA " ,STR($wk_idx_str), " - ", NOME($wk_idx_str) , " -- COMPOSIZIONE=",STR($wk_comp))
         LogProcedura2("CLED_CalcoloTrasf")

         //testo solo elementi cucina e 368 (pensili)
         $wk_test_str = 0
         if( IS_MATCH(NOME($wk_idx_str),"ScoccaT_*")
           | IS_MATCH(NOME($wk_idx_str),"ScoccaS_*")
           | IS_MATCH(NOME($wk_idx_str),"Modulo*368") ) { $wk_test_str = 1 }

         if( $wk_comp_str==0 & $wk_test_str==1 )
         {
            VAR_VALUE_SET($wk_idx_str,"CLED_NrComp",$wk_comp)
            CLED_CercaStruttureVicine( $wk_idx_str , $wk_toll , $wk_comp)

            $wk_comp = $wk_comp + 1
         }

         $wk_i = $wk_i + 1
      }

      $wk_comp =  $wk_comp - 1
      $CLED_debug_msg  = STRCAT("CREO LE COMPOSIZIONI -- IN TOTALE ",STR($wk_comp))
      LogProcedura2("CLED_CalcoloTrasf")

      //**************************************************
      //DEBUG PER VEDERE LE COMPOSIZIONI CREATE
      //**************************************************
      if( $CLED_debug==1 )
      {
         $wk_i = 1
         while ( $wk_i<=$wk_comp )
         {
            WITH_VAR("$wk_str_comp","CLED_NrComp",0,1,STR($wk_i))

            $wk_j = 1
            while ( $wk_j<=$wk_str_comp )
            {
               HI($wk_str_comp[$wk_j],1)
               $wk_j = $wk_j + 1
            }

            //DISPLAY2(STRCAT("COMPOSIZIONE ",STR($wk_i)))

            $wk_j = 1
            while ( $wk_j<=$wk_str_comp )
            {
               HI($wk_str_comp[$wk_j],0)
               $wk_j = $wk_j + 1
            }

            $wk_i = $wk_i + 1
         }
      }

      //***************************************************************
      //CICLO LE COMPOSIZIONI E VERIFICO QUANTI TRASFORMATORI SERVONO
      //***************************************************************
      $CLED_debug_msg  = "CONTEGGIO LED"
      LogProcedura2("CLED_CalcoloTrasf")

      $wk_trasf_tot  = 0
      $wk_trasf_watt = 30
      //LZ 29/10/2021: passaggio da 12 a 24V
      //               se nell'ordine trovo un led a 24V, consideto tutti i led/trasf a 24V
      $wk_trasf_volt = 12

      $wk_watt_parz  = 999

      $wk_i = 1
      while ( $wk_i<=$wk_comp )
      {
         WITH_VAR("$wk_str_comp","CLED_NrComp",0,1,STR($wk_i))

         if( $wk_str_comp>0 )
         {
            $CLED_debug_msg  = STRCAT("CONTEGGIO LED -- COMPOSIZIONE " ,STR($wk_i))
            LogProcedura2("CLED_CalcoloTrasf")

            //ORDINO L'ARRAY
            //prendo come punto di partenza la base più vicina a $wk_point
            $wk_point = [-99999,-99999,-99999]
            SORT_POINT($wk_point,"$wk_str_comp","base_0")

            //trovata la base di partenza --->
            //utilizzo questa come punto di riferimento
            SET_#($wk_str_comp[1])
            SORT_POINT(#base_0, "$wk_str_comp","base_0")

            //$wk_trasf_parz = 0

            $wk_j = 1
            while ( $wk_j<=$wk_str_comp )
            {
               $wk_idx_str = $wk_str_comp[$wk_j]

               COMPONENTI2("$wk_led",$wk_idx_str,"Cuc_Led")
               $wk_h = 1
               while ( $wk_h<=$wk_led )
               {
                  $wk_led_att = $wk_led[$wk_h]
                  $wk_watt = VAR_VAL($wk_led_att,"Led_WATT")

                  //LZ 29/10/2021
                  if( VAR_VAL( $wk_led_att, "VAR_Revisione") > 0 ) { $wk_trasf_volt = 24 }

                  if( $wk_watt_parz + $wk_watt <= $wk_trasf_watt )
                  {
                     $wk_watt_parz = $wk_watt_parz + $wk_watt
                  }
                  else
                  {
                     $wk_trasf_tot = $wk_trasf_tot + 1
                     $wk_watt_parz = $wk_watt
                  }

                  $CLED_debug_msg  = STRCAT("CONTEGGIO LED -- COMPOSIZIONE " ,STR($wk_i), " TRASF=",STR($wk_trasf_tot) , " LED[",STR($wk_led[$wk_h]),"]=",STR($wk_watt) )
                  LogProcedura2("CLED_CalcoloTrasf")

                  $wk_h = $wk_h + 1
               }
               $wk_j = $wk_j + 1
            }
         }

         $wk_watt_parz  = 999

         $wk_i = $wk_i + 1
      }

      $CLED_debug_msg  = STRCAT("TRASFORMATORI TOTALI " ,STR($wk_trasf_tot))
      LogProcedura2("CLED_CalcoloTrasf")

      //***************************************************************
      //AGGIUNGO I TRASFORMATORI NECESSARI
      //***************************************************************
      GOSUB CUC_CalcolaTrasformatori_TroviTrasf_Presenti

      //SE NON SONO PRESENTI TRASFORMATORI, AGGIUNGO
      if( $wk_trasf_exist==0 & $wk_trasf_tot>0 )
      {
         $CLED_debug_msg  = STRCAT("INSERISCO IL TRASFORMATORE")
         LogProcedura2("CLED_CalcoloTrasf")

         $wk_trasf_volt_val = "AL005"
         if( $wk_trasf_volt == 24 ) { $wk_trasf_volt_val = "AL006" }

         //aggiungo
         COMANDO2("ELEMENTO RigaOrdine_NonGraficato")
         COMANDO2("STRUTTURA")
         COMANDO2(STRCAT("VAR_FIX NO_AUTO=1",
                        " AUTO_DA_CLED=1",
                        " GEST_C024=", APICI(), $wk_trasf_volt_val, APICI(),
                        " GEST_CODICE=",APICI(),$wk_trasf_cod,APICI(),
                        " QUANTITA=",STR($wk_trasf_tot)))
         COMANDO2("ACCESSORIO")
      }

      //SE NE ESISTE SOLO UNO VERIFICO/MODIFICO LA QTA
      if( $wk_trasf_exist>=1 & $wk_trasf_tot>0 )
      {
         $CLED_debug_msg  = STRCAT("AGGIORNO QTA TRASFORMATORE PRESENTE")
         LogProcedura2("CLED_CalcoloTrasf")

         if( VAR_VAL($wk_trasf_exist[1],"QUANTITA")!=$wk_trasf_tot )
         {
            COMANDO2(STRCAT("VAR_CHANGE 1 ",STR($wk_trasf_exist[1])," QUANTITA=",STR($wk_trasf_tot)," //da CLED_CalcolaTrasformatori"))
         }
      }

      //SE È PRESENTE UN TRASFORMATORE MA NON SERVE PIÙ
      if( $wk_trasf_exist>=1 & $wk_trasf_tot==0 )
      {
         $CLED_debug_msg  = STRCAT("CANCELLO TRASFORMATORE NON PIÙ NECESSARIO")
         LogProcedura2("CLED_CalcoloTrasf")

         $wk_i = 1
         while ( $wk_i<=$wk_trasf_exist )
         {
            COMANDO2(STRCAT("DELETE ",STR($wk_trasf_exist[$wk_i]), " //da BLED_CalcolaTrasformatori"))
            $wk_i = $wk_i + 1
         }
      }

      //SE PIÙ DI UNO, CANCELLO TUTTI GLI ALTRI
      $wk_i = 2
      while ( $wk_i<=$wk_trasf_exist )
      {
         $CLED_debug_msg  = STRCAT("CANCELLO TRASFORMATORI >=2")
         LogProcedura2("CLED_CalcoloTrasf")

         COMANDO2(STRCAT("DELETE ",STR($wk_trasf_exist[$wk_i]), " //da CLED_CalcolaTrasformatori"))
         $wk_i = $wk_i + 1
      }

      DEL_VAR(-1,"CLED*")
   }

   PROCEDURA CUC_CalcolaTrasformatori_TroviTrasf_Presenti
   {
      $wk_trasf_exist = 0
      $wk_trasf_qta   = 0

      WITH_VAR("$wk_trasf_exist_tmp","GEST_CODICE",1,1,$wk_trasf_cod)
      $wk_i = 1
      while ( $wk_i<=$wk_trasf_exist_tmp )
      {
         if( VAR_VAL($wk_trasf_exist_tmp[$wk_i],"AUTO_DA_CLED")==1 )
         {
            $wk_ne = $wk_trasf_exist + 1
            $wk_trasf_exist = $wk_ne
            $wk_trasf_exist[$wk_ne] = $wk_trasf_exist_tmp[$wk_i]
         }

         $wk_i = $wk_i + 1
      }
   }

   //Luca 20/04/2020
   PROCEDURA SetCODICE_AnteForno_Cuc
   {
      if( VAR_VAL( idx_att, "Cucina_Versione") > 2) { EXITSUB() }
      if( $BDM_REV_Cuc_GestFusti==0 )               { EXITSUB() }

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

      if( Apertura != "BA" )                        { EXITSUB() }

      if( UN_PADRE("ScoccaT_ColForno")!=1
        & UN_PADRE("ScoccaT_Col2Forno")!=1
        & UN_PADRE("ScoccaT_ColLvstForno")!=1
        & UN_PADRE("ScoccaT_ColLvst2Forno")!=1 )    { EXITSUB() }

      perCODICE_par1 = "F10"
      if( TipoFrontale==2
        | TipoFrontale==3
        | TipoFrontale==4 ) { perCODICE_par1 = "F18" }

      idx_col = PADRE(ATTUALE(),2)
      idx_ant = PADRE(ATTUALE(),1)

      perCODICE_par2 = VAR_VAL(idx_col,"YAntaInf_cmp")

      if( VAR_VAL( idx_ant,"AntaSuperiore_Forno") == 1)
      {
         perCODICE_par2 = VAR_VAL( idx_col, "YAntaSup_cmp")
      }

      wk_mis1 = perCODICE_par2
      perCODICE_par2 = ROUNDUP(perCODICE_par2,0)
      wk_mis2 = perCODICE_par2

      perCODICE_par2 = STR(FLOOR(perCODICE_par2))

      if( STRLEN(perCODICE_par2)==0 ) { EXITSUB() }

      if( STRLEN(perCODICE_par2)==1 ) { perCODICE_par2 = STRCAT("000",perCODICE_par2) }
      if( STRLEN(perCODICE_par2)==2 ) { perCODICE_par2 = STRCAT("00",perCODICE_par2) }
      if( STRLEN(perCODICE_par2)==3 ) { perCODICE_par2 = STRCAT("0",perCODICE_par2) }

      perRADICE = ""
      perCODICE = STRCAT(perCODICE_par1,perCODICE_par2)
   }

   //Luca 14/07/2020 mantis 22867: Basi cucina: controlli per barra retro abbassata
   PROCEDURA Ctrl_BasiNonProducibili
   {
      if( $CNP__ ) { EXITSUB() }

      STRUTTURE("$wk_strutt")

      $wk_blocca  = 0
      $wk_basi_np = 0

      $wk_i = 1
      while ( $wk_i <= $wk_strutt)
      {
         $wk_idxs = $wk_strutt[$wk_i]

         $wk_idxs_fusto = $wk_idxs
         if( IsIdx( $wk_idxs, "idx_fusto") == 1) { $wk_idxs_fusto = VAR_VAL( $wk_idxs, "idx_fusto") }

         if( CheckSel_ORD_SOST($wk_idxs_fusto)
           & IS_MATCH( NOME($wk_idxs), "ScoccaT_Bas*"))
         {
            $wk_test_1 = 0
            $wk_test_2 = 0
            $wk_test_3 = 0
            $wk_test_4 = 0

            // 1 - H base < 368,
            if( VAR_VAL($wk_idxs,"Y") < 368 )             { $wk_test_1 = 1 }

            // 2 - Base fissata a muro o su barra isola, e
            wk_dist   = QUERY_WALL($wk_idxs,"distance from face R")
            wk_a_muro = 0
            if( wk_dist == 0) { wk_a_muro = 1 }
            if( wk_a_muro == 1
              | VAR_VAL($wk_idxs,"ConBarraIsola") == 1)   { $wk_test_2 = 1 }

            // 3 - Base non appoggiata sopra ad altre basi
            $wk_test_3 = 1
            if( VAR_EXIST($wk_idxs,"idx_sotto") )
            {
               $wk_idx_sotto = VAR_VAL($wk_idxs,"idx_sotto")
               if( IS_IDX($wk_idx_sotto))                 { $wk_test_3 = 0 }
            }

            // 4 - Barra retro ribassata
            if( VAR_VAL($wk_idxs,"VAR_LavPC_FiaSx") == 1
              | VAR_VAL($wk_idxs,"VAR_LavPC_FiaDx") == 1) { $wk_test_4 = 1 }

            if( $wk_test_1 == 1 & $wk_test_2 == 1
              & $wk_test_3 == 1 & $wk_test_4 == 1  )
            {
               $wk_blocca = 1

               $wk_ne = $wk_basi_np + 1
               $wk_basi_np = $wk_ne
               $wk_basi_np[$wk_ne] = $wk_idxs
            }
         }

         $wk_i = $wk_i + 1
      }

      $wk_msg = MSG(1090)
      $wk_msg = STRCAT($wk_msg,"\n",MSG(1162))

      if( $OnTerminate==1 ) { $wk_msg = STRCAT($wk_msg,"\n",MSG(1096)) }

      if( $wk_blocca==1 )
      {
         if( VAR_VAL(-1,"wk_CG_Riassunto")==1 )
         {
            $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
            //VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIT_",STR($wk_CG_Ctrl_Count)), "CONTROLLO BASI NON PRODUCIBILI" )
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), "Basi NON producibili." )
            r = ArrayCopy(-1 ,"wk_basi_np", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
            EXITSUB()
         }

         $wk_i = 1
         while ( $wk_i<=$wk_basi_np ) { HI($wk_basi_np[$wk_i],1)  $wk_i = $wk_i + 1 }
         DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)

         $wk_i = 1
         while ( $wk_i<=$wk_basi_np ) { HI($wk_basi_np[$wk_i],0)  $wk_i = $wk_i + 1 }

         if( $OnTerminate==1 ) { $BLOCCO_FINE_ORDINE = 1 }
      }
   }

   //Luca 07/09/2020
   PROCEDURA Ctrl_ScoccaT_ColLvst2Forno
   {
      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno -- START")) }

      WITH_ALIAS( "$wk_col", "ColLvst2Forno")

      if( $wk_col == 0 ) { EXITSUB() }

      $wk_blocca = 0
      $wk_col_blo = 0

      $wk_i = 1
      while ( $wk_i <= $wk_col )
      {
         $wk_idx_col = $wk_col[$wk_i]

         $wk_idx_sx = -1
         if( VAR_EXIST( $wk_idx_col, "idx_sx")) { $wk_idx_sx = VAR_VAL( $wk_idx_col, "idx_sx") }
         $wk_idx_dx = -1
         if( VAR_EXIST( $wk_idx_col, "idx_dx")) { $wk_idx_dx = VAR_VAL( $wk_idx_col, "idx_dx") }

         $wk_blocco_col = 1

         if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 1 - $wk_blocco_col:", STR($wk_blocco_col), " - Idx Sx: ", STR($wk_idx_sx), " Idx Dx: ", STR($wk_idx_dx))) }

         if( IS_IDX($wk_idx_sx) & IS_IDX($wk_idx_dx) )
         {
            if( IsIdx( $wk_idx_sx, "FF_idx_ref")
              & NOME($wk_idx_sx) == "FiancoFinitura") { $wk_idx_sx = VAR_VAL( $wk_idx_sx, "FF_idx_ref") }
            if( IsIdx( $wk_idx_dx, "FF_idx_ref")
              & NOME($wk_idx_dx) == "FiancoFinitura") { $wk_idx_dx = VAR_VAL( $wk_idx_dx, "FF_idx_ref") }

            //colonna a terra
            // --> deve avere, su un fianco, almeno una base o colonna a terra, e sull'altro almeno una base/colonna, anche sospesa.
            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 2 - $wk_blocco_col:", STR($wk_blocco_col), " - TipoScocca: ", STR(VAR_VAL($wk_idx_col ,"TipoScocca")), " Tipo Scocca Sx: ", STR(VAR_VAL($wk_idx_sx ,"TipoScocca")), " Tipo Scocca Dx: ", STR(VAR_VAL($wk_idx_dx ,"TipoScocca")))) }
            if( VAR_VAL($wk_idx_col ,"TipoScocca")==0 )
            {
               //almeno una delle due a terra
               if( VAR_VAL($wk_idx_sx ,"TipoScocca") == 0
                 | VAR_VAL($wk_idx_dx ,"TipoScocca") == 0 )
               {
                  //deve essere base o colonna a sx
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 3 - $wk_blocco_col:", STR($wk_blocco_col), " - Nome Sx: ", NOME($wk_idx_sx), " Nome Dx: ", NOME($wk_idx_dx))) }
                  if( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Bas*")
                    | IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Col*") )
                  {
                     //Luca 09/10/20 riporto modifiche inviate da LAGO
                     ////deve essere base o colonna a dx
                     //if( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Bas*")
                     //  | IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Col*") ) { $wk_blocco_col = 0 }
                     //deve essere base o colonna a dx
                     if( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Bas*")
                       | IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Col*") )
                     {
                        $wk_blocco_col = 0

                        //LZ 15/09/2020 - la colonna deve essere a terra, non esiste fianco di finitura dedicato per coprire il divario di altezza
                        if( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Col*")
                          & ( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_ColLvst2Forno")==1
                            | VAR_VAL($wk_idx_sx ,"TipoScocca")!=0 )) { $wk_blocco_col = 1 }

                        if( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Col*")
                          & ( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_ColLvst2Forno")==1
                            | VAR_VAL($wk_idx_dx ,"TipoScocca")!=0 )) { $wk_blocco_col = 1 }
                     }
                  }
               }
            }
            //sospesa
            // --> deve obbligatoriamente essere sospesa tra due colonne che non siano ScoccaT_ColLvst2Forno
            else
            {
               //Luca 09/10/20 riporto modifiche inviate da LAGO
               //if( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Col*")
               //  & IS_MATCH(NOME($wk_idx_sx),"ScoccaT_ColLvst2Forno")==0 )

               //LZ 15/09/2020 - Valuto anche l'altezza delle colonne confinanti
               //if( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Col*")
               //  & IS_MATCH(NOME($wk_idx_sx),"ScoccaT_ColLvst2Forno")==0 )
               //{
               //   if( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Col*")
               //     & IS_MATCH(NOME($wk_idx_dx),"ScoccaT_ColLvst2Forno")==0 ) { $wk_blocco_col = 0 }
               //}

               //stessa posizione
               //Luca 29/10/2020 riporto modifiche di LAGO
               //if( VAR_VAL($wk_idx_sx ,"TipoScocca")==VAR_VAL($wk_idx_col ,"TipoScocca")
               //  & VAR_VAL($wk_idx_dx ,"TipoScocca")==VAR_VAL($wk_idx_col ,"TipoScocca") )
               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 4 - $wk_blocco_col:", STR($wk_blocco_col), " - TipoScocca: ", STR(VAR_VAL($wk_idx_col ,"TipoScocca")), " Tipo Scocca Sx: ", STR(VAR_VAL($wk_idx_sx ,"TipoScocca")), " Tipo Scocca Dx: ", STR(VAR_VAL($wk_idx_dx ,"TipoScocca")))) }
               if( VAR_VAL($wk_idx_sx ,"TipoScocca")>=VAR_VAL($wk_idx_col ,"TipoScocca")
                 & VAR_VAL($wk_idx_dx ,"TipoScocca")>=VAR_VAL($wk_idx_col ,"TipoScocca") )
               {
                  //basi o colonne a sx
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 5 - $wk_blocco_col:", STR($wk_blocco_col), " - Nome Sx: ", NOME($wk_idx_sx), " Nome Dx: ", NOME($wk_idx_dx))) }
                  if( IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Bas*")
                    | IS_MATCH(NOME($wk_idx_sx),"ScoccaT_Col*") )
                  {
                     //basi o colonne a dx
                     if( IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Bas*")
                       | IS_MATCH(NOME($wk_idx_dx),"ScoccaT_Col*") )
                     {
                        //no dello stesso tipo
                        if(IS_MATCH(NOME($wk_idx_sx),"ScoccaT_ColLvst2Forno")==0 & IS_MATCH(NOME($wk_idx_dx),"ScoccaT_ColLvst2Forno")==0)
                        {
                           //alla stessa altezza
                           if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 6 - $wk_blocco_col:", STR($wk_blocco_col), " - Altezza: ", STR(VAR_VAL($wk_idx_col,"base_0.y")), " Altezza Sx: ", STR(VAR_VAL($wk_idx_sx,"base_0.y")), " Altezza Dx: ", STR(VAR_VAL($wk_idx_dx,"base_0.y")))) }
                           if( VAR_VAL($wk_idx_col,"base_0.y")==VAR_VAL($wk_idx_sx,"base_0.y") & VAR_VAL($wk_idx_col,"base_0.y")==VAR_VAL($wk_idx_dx,"base_0.y") )
                           {
                              $wk_blocco_col = 0
                           }
                        }
                     }
                  }
               }
            }

            //Luca 09/10/20 riporto modifiche inviate da LAGO
            //profondità
            // --> deve essere compresa tra due elementi di profondità uguale
            if( $wk_blocco_col==0 )
            {
               z_col = SE_NUM(VAR_VAL($wk_idx_col,"Zt")>0, VAR_VAL($wk_idx_col,"Zt"), VAR_VAL($wk_idx_col,"Z"))

               z_sx = SE_NUM(VAR_VAL($wk_idx_sx,"Zr")>0, VAR_VAL($wk_idx_sx,"Zr"), SE_NUM(VAR_VAL($wk_idx_sx,"Zt")>0, VAR_VAL($wk_idx_sx,"Zt"), VAR_VAL($wk_idx_sx,"Z")))
               z_dx = SE_NUM(VAR_VAL($wk_idx_dx,"Zr")>0, VAR_VAL($wk_idx_dx,"Zr"), SE_NUM(VAR_VAL($wk_idx_dx,"Zt")>0, VAR_VAL($wk_idx_dx,"Zt"), VAR_VAL($wk_idx_dx,"Z")))

               if( z_sx < z_col
                 | z_dx < z_col) { $wk_blocco_col = 1 }
               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 7 - $wk_blocco_col:", STR($wk_blocco_col), " - Prof: ", STR(z_col), " Prof Sx: ", STR(z_sx), " Prof Dx: ", STR(z_dx))) }
            }

            //LZ 25/05/2021: deve essere compresa tra due elementi non ruotati
            if( $wk_blocco_col==0 )
            {
               ang_col = ANG_TOT_NOR($wk_idx_col)

               if( IS_IDX($wk_idx_sx) )
               {
                  ang_sx = ANG_TOT_NOR($wk_idx_sx)
                  ang_sx_diff = ang_col - ang_sx
                  if( ang_sx_diff < -0.1
                    | ang_sx_diff > 0.1 ) { $wk_blocco_col = 1 }
               }

               if( IS_IDX($wk_idx_dx) )
               {
                  ang_dx = ANG_TOT_NOR($wk_idx_dx)
                  ang_dx_diff = ang_col - ang_dx
                  if( ang_dx_diff < -0.1
                    | ang_dx_diff > 0.1 ) { $wk_blocco_col = 1 }
               }

               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno [",STR($wk_idx_col), "] -- 8 - $wk_blocco_col:", STR($wk_blocco_col), " - Angolo: ", STR(ang_col), " Angolo Sx: ", STR(ang_sx), " Angolo Dx: ", STR(ang_dx))) }
            }
         }

         //per gestione speciale
         if( VAR_VAL( $wk_idx_col, "FLAG_Speciale") == 1 ) { $wk_blocco_col = 0 }

         //per gestione dialog riassunto anomalie
         if( $wk_blocco_col == 1 )
         {
            $wk_ne      = $wk_col_blo + 1
            $wk_col_blo = $wk_ne
            $wk_col_blo[$wk_ne] = $wk_idx_col

            $wk_blocca = 1
         }

         if( $wk_blocco_col==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_col,1)
            $wk_msg = STRCAT(MSG(1090),"\n", MSG(1165))
            if( $OnTerminate==1 ) { $wk_msg = STRCAT($wk_msg,"\n",MSG(1096)) }

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_col,0)

            if( $OnTerminate==1 ) { $BLOCCO_FINE_ORDINE = 1 }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         //VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIT_",STR($wk_CG_Ctrl_Count)), "CONTROLLO MODULI CONTROPPOSTI" )
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), "Colonna Forno+LVST non rispetta le regole di inserimento." )
         r = ArrayCopy(-1 ,"wk_col_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_ColLvst2Forno -- END")) }
   }


   PROCEDURA Ctrl_ScoccaT_BaseCantinetta
   {
      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      debug = 1

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta -- START")) }

      WITH_ALIAS("$wk_base","BaseCantinetta")

      if( $wk_base == 0 ) { EXITSUB() }

      $wk_blocca = 0
      $wk_base_blo = 0

      $wk_i = 1
      while ( $wk_i <= $wk_base )
      {
         $wk_idx_base = $wk_base[$wk_i]

         $wk_blocco_base = 1

         SET_#($wk_idx_base)

         if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta [",STR($wk_idx_base), "] -- 1 - $wk_blocco_base:", STR($wk_blocco_base), " - Idx Sx: ", STR(#idx_sx), " Idx Dx: ", STR(#idx_dx))) }

         if( IS_IDX(#idx_sx) & IS_IDX(#idx_dx) )
         {
            //colonna a terra
            // --> deve avere, su un fianco, almeno una base a terra, e sull'altro almeno una base, anche sospesa.
            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta [",STR($wk_idx_base), "] -- 2 - $wk_blocco_base:", STR($wk_blocco_base), " - TipoScocca: ", STR(VAR_VAL($wk_idx_base ,"TipoScocca")), " Tipo Scocca Sx: ", STR(VAR_VAL(#idx_sx ,"TipoScocca")), " Tipo Scocca Dx: ", STR(VAR_VAL(#idx_dx ,"TipoScocca")))) }
            if( VAR_VAL($wk_idx_base, "TipoScocca") <= 1 )
            {
               //almeno una delle due a terra
               if( VAR_VAL(#idx_sx ,"TipoScocca") <= 1
                 | VAR_VAL(#idx_dx ,"TipoScocca") <= 1 )
               {
                  //deve essere base a sx
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta [",STR($wk_idx_base), "] -- 3 - $wk_blocco_base:", STR($wk_blocco_base), " - Nome Sx: ", NOME(#idx_sx), " Nome Dx: ", NOME(#idx_dx))) }
                  if( IS_MATCH(NOME(#idx_sx),"ScoccaT_Bas*") )
                  {
                     if( IS_MATCH(NOME(#idx_dx),"ScoccaT_Bas*") )
                     {
                        $wk_blocco_base = 0
                     }
                  }
               }
            }


            // --> deve essere compresa tra due elementi di profondità uguale o maggiore
            if( $wk_blocco_base==0 )
            {
               z_base = SE_NUM(VAR_VAL($wk_idx_base,"Zt")>0, VAR_VAL($wk_idx_base,"Zt"), VAR_VAL($wk_idx_base,"Z"))

               //valuto anche Zr, utilizzato nelle basi e colonne ad angolo
               z_sx = SE_NUM(VAR_VAL(#idx_sx,"Zr")>0, VAR_VAL(#idx_sx,"Zr"), SE_NUM(VAR_VAL(#idx_sx,"Zt")>0, VAR_VAL(#idx_sx,"Zt"), VAR_VAL(#idx_sx,"Z")))
               z_dx = SE_NUM(VAR_VAL(#idx_dx,"Zr")>0, VAR_VAL(#idx_dx,"Zr"), SE_NUM(VAR_VAL(#idx_dx,"Zt")>0, VAR_VAL(#idx_dx,"Zt"), VAR_VAL(#idx_dx,"Z")))

               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta [",STR($wk_idx_base), "] -- 7 - $wk_blocco_base:", STR($wk_blocco_base), " - Prof: ", STR(z_base), " Prof Sx: ", STR(z_sx), " Prof Dx: ", STR(z_dx))) }
               if( z_sx<z_base | z_dx<z_base ) { $wk_blocco_base = 1 }
            }

            //LZ 25/05/2021: deve essere compresa tra due elementi non ruotati
            if( $wk_blocco_base==0 )
            {
               ang_base = ANG_TOT_NOR($wk_idx_base)

               if( IS_IDX(#idx_sx) )
               {
                  ang_sx = ANG_TOT_NOR(#idx_sx)
                  ang_sx_diff = ang_base - ang_sx
                  if( ang_sx_diff < -0.1
                    | ang_sx_diff > 0.1 ) { $wk_blocco_base = 1 }
               }

               if( IS_IDX(#idx_dx) )
               {
                  ang_dx = ANG_TOT_NOR(#idx_dx)
                  ang_dx_diff = ang_base - ang_dx
                  if( ang_dx_diff < -0.1
                    | ang_dx_diff > 0.1 ) { $wk_blocco_base = 1 }
               }

               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta [",STR($wk_idx_base), "] -- 8 - $wk_blocco_base:", STR($wk_blocco_base), " - Angolo: ", STR(ang_base), " Angolo Sx: ", STR(ang_sx), " Angolo Dx: ", STR(ang_dx))) }
            }
         }

         //per gestione speciale
         if( VAR_VAL( $wk_idx_base, "FLAG_Speciale") == 1 ) { $wk_blocco_base = 0 }

         //per gestione dialog riassunto anomalie
         if( $wk_blocco_base == 1 )
         {
            $wk_ne      = $wk_base_blo + 1
            $wk_base_blo = $wk_ne
            $wk_base_blo[$wk_ne] = $wk_idx_base

            $wk_blocca = 1
         }

         if( $wk_blocco_base==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_base,1)
            $wk_msg = STRCAT(MSG(1090),"\n", MSG(1165))
            if( $OnTerminate==1 ) { $wk_msg = STRCAT($wk_msg,"\n",MSG(1096)) }

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_base,0)

            if( $OnTerminate==1 ) { $BLOCCO_FINE_ORDINE = 1 }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), "Base Cantinetta non rispetta le regole di inserimento." )
         r = ArrayCopy(-1 ,"wk_base_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaT_BaseCantinetta -- END")) }
   }

   //LZ 05/05/2021: richiesta disegno tecnico per ff ww
   PROCEDURA Ctrl_Ins_FFinitura_WW
   {
      wk_msg="Richiedere disegno tecnico per fianchi finitura in WW"
      WITH_ALIAS("$wk_itm","FiancoFin")

      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_itm_blo=0
      $wk_ne=1
      $wk_i=1
      while( $wk_i <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_i]
         //SET_#($wk_itm_idx)

         selezionato=0
         if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1"
           | VAR_VAL_STR($wk_itm_idx,"ORD_SOST") == "1"  ) { selezionato=1 }

         if( selezionato==1
           & NOME($wk_itm_idx) == "FiancoFinitura"
           & VAR_VAL($wk_itm_idx, "TipoFFinitura") < 3
           & VAR_VAL_STR($wk_itm_idx,"FF_Materiale") == "WILDWOOD" )
         {
            $wk_itm_blo[$wk_ne]=$wk_itm_idx
            $wk_itm_blo=$wk_ne
            $wk_ne=$wk_ne+1
         }

         $wk_i=$wk_i+1
      }

      if( VAR_VAL(-1,"wk_itm_blo")>0)
      {
         if( VAR_VAL(-1, "wk_CG_Riassunto")==1 )
         {
            $wk_ne = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_ne)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_ne)), "NO_BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_ne)), wk_msg )
            r = ArrayCopy(-1 ,"wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   //LZ 22/07/2021: controllo se la base lvst è a terra
   PROCEDURA Ctrl_Ins_BaseLvstSosp
   {
      $wk_msg = "Base lvst sospesa posizionata a terra"
      $wk_tipo = "NO_BLOCCO"

      $wk_itm_blo = 0

      STRUTTURE("$wk_str")

      wk_i = 1
      while( wk_i <= $wk_str )
      {
         wk_str_att = $wk_str[wk_i]

         if( NOME(wk_str_att) == "ScoccaT_BaseLvst"
           & VAR_VAL( wk_str_att, "TipoScocca") > 0
           & VAR_VAL( wk_str_att, "base_0.y") <= 17 )
         {
            $wk_itm_blo = $wk_itm_blo + 1
            VAR_VALUE_SET( -1, STRCAT( "wk_itm_blo_##", STR($wk_itm_blo)), wk_str_att)
         }

         wk_i = wk_i + 1
      }

      if( $wk_itm_blo > 0)
      {
         if( VAR_VAL(-1, "wk_CG_Riassunto") == 1 )
         {
            $wk_ne = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_ne)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_ne)), $wk_tipo)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_ne)), $wk_msg )
            r = ArrayCopy(-1 ,"wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2($wk_msg)
         }
      }
   }

   PROCEDURA Ctrl_Ins_AntaAlleggerita
   {
      WITH_ALIAS( "$wk_itm", "Frontale")
      if( $wk_itm == 0) { EXITSUB() }

      $wk_CG_Nome   = "Ctrl_Ins_AntaAlleggerita"
      $wk_CG_Blocca = 0
      $wk_CG_Items  = 0
      $wk_CG_Tipo   = "BLOCCO"
      $wk_CG_Msg    = "Richiedere disegno tecnico per ante alleggerite ridotte"

      $wk_itm_num = 0
      while( inc($wk_itm_num) <= $wk_itm)
      {
         $wk_itm_idx = $wk_itm[$wk_itm_num]

         if( CheckSel_ORD_SOST($wk_itm_idx) != 1)       { continue }
         if( NOME($wk_itm_idx) != "Cuc_AntaSingola")    { continue }
         if( VAR_VAL($wk_itm_idx,"Alleggerita") != 1)   { continue }
         if( VAR_VAL_STR($wk_itm_idx,"ORD_COD") == "")  { continue }
         if( VAR_VAL($wk_itm_idx,"FLAG_Speciale") != 0) { continue }

         SET_#($wk_itm_idx)

         if( VAR_VAL( $wk_itm_idx, "Cucina_Versione") <= 2)
         {
            if( #ORD_Y != #Y
              | #ORD_X != #X + #VAR_RidXVtrAnta*3
              | Is_In_StrArray( VAR_VAL_STR( $wk_itm_idx, "GEST_C031") , "FR002;FR031", ";") == 1) { AddItem2Array( -1, "wk_CG_Items", $wk_itm_idx, "") }

            continue
         }

         if( VAR_VAL( $wk_itm_idx, "Cucina_Versione") > 2)
         {
            if( VAR_VAL( $wk_itm_idx, "ORD_RID") != 0)                                             { AddItem2Array( -1, "wk_CG_Items", $wk_itm_idx, "") }

            continue
         }
      }

      if( $wk_CG_Items > 0) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_Cuc_Lvl
   {
      WITH_ALIAS("$wk_itm","Base")
      wk_msg="Lavello inserito su base standard"

      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_itm_blo=0
      $wk_ne=1
      $wk_i=1
      while( $wk_i <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_i]
         //SET_#($wk_itm_idx)

         if( CheckSel_ORD_SOST($wk_itm_idx)
           & VAR_VAL( $wk_itm_idx, "ConLavello") > 0
           & VAR_VAL( $wk_itm_idx, "VAR_Lavello") <= 0 )
         {
            $wk_itm_blo[$wk_ne]=$wk_itm_idx
            $wk_itm_blo=$wk_ne
            $wk_ne=$wk_ne+1
         }

         $wk_i=$wk_i+1
      }

      if( VAR_VAL(-1,"wk_itm_blo")>0)
      {
         if( VAR_VAL(-1, "wk_CG_Riassunto")==1 )
         {
            $wk_ne = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_ne)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_ne)), "NO_BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_ne)), wk_msg )
            r = ArrayCopy(-1 ,"wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   //LZ 05/05/2021: Blocco colonne lvst+forno di revisione < 1
   PROCEDURA Ctrl_Ins_ColLvstForno
   {
      wk_msg="Colonna Forno+LVST obsoleta, va eliminata e inserita nuovamente"
      WITH_ALIAS("$wk_col","ColLvst*Forno")

      if( $wk_col == 0 ) { EXITSUB() }

      $wk_col_blo=0
      $wk_ne=1
      $wk_i=1
      while( $wk_i <= $wk_col )
      {
         $wk_col_idx = $wk_col[$wk_i]

         if( VAR_VAL( $wk_col_idx, "FLAG_Speciale") == 0
           & VAR_VAL( $wk_col_idx, "VAR_Revisione") < 1)
         {
            if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1" | VAR_VAL_STR($wk_col_idx,"ORD_SOST") == "1")
            {
               $wk_col_blo[$wk_ne]=$wk_col_idx
               $wk_col_blo=$wk_ne
               $wk_ne=$wk_ne+1
            }
         }

         $wk_i=$wk_i+1
      }

      if( VAR_VAL(-1,"wk_col_blo")>0)
      {

         if( VAR_VAL(-1, "wk_CG_Riassunto")==1 )
         {
            $wk_ne = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_ne)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_ne)), "BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_ne)), wk_msg )
            r = ArrayCopy(-1 ,"wk_col_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   //LZ 14/05/2021: blocco top fusion in vetro con fascia troppo stretta
   PROCEDURA Ctrl_Cuc_TopFusionVtr
   {
      wk_msg="Top fusion in vetro con fascia troppo stretta, richiedere fattibilità"
      WITH_ALIAS("$wk_itm","BDM_Top")

      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_itm_blo=0
      $wk_ne=1
      $wk_i=1
      while( $wk_i <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_i]

         if( VAR_VAL($wk_itm_idx,"FLAG_TopFusion") == 2
           & ( IS_MATCH( VAR_VAL_STR($wk_itm_idx,"VAR_TipoTopStr"), "VETRO*" )
             | IS_MATCH( VAR_VAL_STR($wk_itm_idx,"VAR_TipoTopStr"), "XGLASS*" ) ) )
         {
            wk_ok = 0
            wk_largh_fsc = VAR_VAL($wk_itm_idx,"Xt") - VAR_VAL($wk_itm_idx,"FSN_ScsX")
            wk_prof_fsc  = VAR_VAL($wk_itm_idx,"Zt") - VAR_VAL($wk_itm_idx,"FSN_ScsZ")

            if( wk_largh_fsc <= 400 & wk_prof_fsc < 70 )  { wk_ok = 1 }
            if( wk_largh_fsc  > 400 & wk_prof_fsc < 120 ) { wk_ok = 1 }

            if( wk_ok == 1
              & ( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1"
                | VAR_VAL_STR($wk_itm_idx,"ORD_SOST") == "1" ) )
            {
               $wk_itm_blo[$wk_ne]=$wk_itm_idx
               $wk_itm_blo=$wk_ne
               $wk_ne=$wk_ne+1
            }
         }

         $wk_i=$wk_i+1
      }

      if( VAR_VAL(-1,"wk_itm_blo")>0)
      {

         if( VAR_VAL(-1, "wk_CG_Riassunto")==1 )
         {
            $wk_ne = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_ne)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_ne)), "BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_ne)), wk_msg )
            r = ArrayCopy(-1 ,"wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   //LZ 05/05/2021: controllo revisione maniglia flapp
   PROCEDURA Ctrl_Cuc_ManFlapp
   {
      WITH_ALIAS("$wk_itm","Colonna")
      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_itm_blo = 0
      wk_msg="Maniglia FLAPP con revisione obsoleta, eliminare e reinserire la colonna"

      $wk_i1 = 1
      while( $wk_i1 <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_i1]

         $wk_cmp_ok = 0
         $wk_cmp_sel = 0

         COMPONENTI2("$wk_cmp",$wk_itm_idx,"Cuc_AntaSingola")
         $wk_i2 = 1
         while( $wk_i2 <= $wk_cmp )
         {
            $wk_cmp_idx = $wk_cmp[$wk_i2]

            //Colleziono tutte le ante della colonna che corrispondono ai criteri
            if( VAR_VAL($wk_cmp_idx,"VAR_Revisione_FLAPP") < 1
              & VAR_VAL_STR($wk_cmp_idx,"GEST_C004")  == "MA001"
              & VAR_VAL_STR($wk_cmp_idx,"Man_Orie")   == "V"
              & ( VAR_VAL_STR($wk_cmp_idx,"Man_PosY") == "A"
                | VAR_VAL_STR($wk_cmp_idx,"Man_PosY") == "B" ) )
            {
               $wk_tmp = $wk_cmp_ok + 1
               VAR_VALUE_SET(-1,STRCAT("wk_cmp_ok_##",STR($wk_tmp)),$wk_cmp_idx)
               $wk_cmp_ok = $wk_tmp

               //Controllo se queste passano righe
               if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1"
                 | VAR_VAL_STR($wk_cmp_idx,"ORD_SOST") == "1"  )
               {
                  $wk_tmp = $wk_cmp_sel + 1
                  VAR_VALUE_SET(-1,STRCAT("wk_cmp_sel_##",STR($wk_tmp)),$wk_cmp_idx)
                  $wk_cmp_sel = $wk_tmp
               }
            }

            $wk_i2 = $wk_i2 + 1
         }

         //Permessa la sostituzione parziale delle ante
         if( $wk_cmp_sel == $wk_cmp_ok )
         {
            $wk_i3 = 1
            while( $wk_i3 <= $wk_cmp_sel )
            {
               $wk_tmp = $wk_itm_blo + 1
               VAR_VALUE_SET(-1,STRCAT("wk_itm_blo_##",STR($wk_tmp)),$wk_cmp_sel[$wk_i3])
               $wk_itm_blo = $wk_tmp

               $wk_i3 = $wk_i3 + 1
            }
         }

         $wk_i1 = $wk_i1 + 1
      }

      if( VAR_VAL(-1,"wk_itm_blo") > 0 )
      {
         if( VAR_VAL(-1, "wk_CG_Riassunto") == 1 )
         {
            $wk_tmp = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_tmp)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_tmp)), "BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_tmp)), wk_msg )
            r = ArrayCopy(-1 ,"wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_tmp)))

            $wk_CG_Ctrl_Count = $wk_tmp
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   PROCEDURA Ctrl_Cuc_PesoAntaLvst
   {
      wk_msg1 = "Anta lvst troppo pesante per l'eldom, procedere con richiesta di fattibilità"
      wk_msg2 = "Peso anta lvst impreciso, contattare ufficio Metron, tolleranza calcolo: "
      wk_toll = 0

      WITH_ALIAS( "$wk_itm", "Cuc_AntaLvst")

      if( $wk_itm == 0 ) { EXITSUB() }

      COMANDO2("PROCEDURA VerificaPeso //Ctrl_Cuc_PesoAntaLvst")
      wk_toll = VAR_VAL( -1, "GetPesoAntaLvstFromDB_TollMax")

      $wk_itm_blo = 0
      $wk_i = 0
      while( inc($wk_i) <= $wk_itm)
      {
         $wk_itm_idx = $wk_itm[$wk_i]

         if( CheckSel_ORD_SOST($wk_itm_idx) <= 0)          { continue }
         if( VAR_VAL( $wk_itm_idx, "Cucina_Versione") > 2) { continue }

         $wk_itm_peso = VAR_VAL( $wk_itm_idx, "VAR_Peso")
         $wk_itm_peso_max = VAR_VAL( $wk_itm_idx, "VAR_Peso_Max")

         if( $wk_itm_peso > 0
           & $wk_itm_peso < $wk_itm_peso_max)              { continue }

         AddItem2Array( -1, "wk_itm_blo", $wk_itm_idx, "")
      }

      if( wk_toll > 2
        | $wk_itm_blo > 0)
      {
         wk_msg = wk_msg1
         if( wk_toll > 2 ) { wk_msg = STRCAT( wk_msg2, STR(wk_toll)) }

         if( VAR_VAL( -1, "wk_CG_Riassunto") == 1 )
         {
            $wk_ne = VAR_VAL( -1,"wk_CG_Ctrl_Count") + 1

            VAR_VALUE_SET( -1, STRCAT("wk_CG_Ctrl_BLO_", STR($wk_ne)), 1)
            VAR_VALUESTR_SET( -1, STRCAT("wk_CG_Ctrl_TIP_", STR($wk_ne)), "NO_BLOCCO")
            VAR_VALUESTR_SET( -1, STRCAT("wk_CG_Ctrl_MSG_", STR($wk_ne)), wk_msg)
            r = ArrayCopy( -1, "wk_itm_blo", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)))

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2(wk_msg)
         }
      }
   }

   PROCEDURA Ctrl_ScoccaT_BaseLvstOriz
   {
      WITH_ALIAS( "$wk_itm", "Cuc_AntaLvst")
      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_CG_Nome    = "Ctrl_ScoccaT_BaseLvstOriz"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Richiedere speciale per base lavastoviglie orizzontale"
      $wk_CG_Info    = ""

      $wk_itm_num = 1
      while( $wk_itm_num <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_itm_num]

         if( CheckSel_ORD_SOST($wk_itm_idx)
           & VAR_VAL( $wk_itm_idx, "FLAG_Speciale") == 0
           & UN_PADRE2( $wk_itm_idx, "ScoccaT_BaseLvstOriz") )
         {
            AddItem2Array( -1, "wk_CG_Items", $wk_itm_idx, "")
         }

         $wk_itm_num = $wk_itm_num + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_ScoccaT_BaseFornoH600
   {
      $wk_CG_Nome    = "Ctrl_ScoccaT_BaseFornoH600"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1168)
      $wk_CG_Info    = ""

      WITH_ALIAS("$wk_bf","BaseForno")
      if( $wk_bf == 0 ) { EXITSUB() }

      $wk_bf_num = 1
      while( $wk_bf_num <= $wk_bf)
      {
         $wk_bf_att = $wk_bf[$wk_bf_num]

         if( VAR_VAL( $wk_bf_att, "base_0.y") <= 1
           & VAR_VAL( $wk_bf_att, "ConCassetto") == 0
           & VAR_VAL( $wk_bf_att, "FLAG_Speciale") != 1)
         {
            AddItem2Array( -1, "wk_CG_Items", $wk_bf_att, "")
         }

         $wk_bf_num = $wk_bf_num + 1
      }

      if( $wk_CG_Items > 0) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

   //Luca 19/10/2020 23558: Pensile angolo: avviso se fianco scoperto
   PROCEDURA Ctrl_ScoccaS_PensileL_Fianchi
   {
      #ifdef AGE;RIV
         EXITSUB()
      #endif

      WITH_ALIAS("$wk_pang","PensileAngoloL")

      if( $wk_pang == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i<= $wk_pang )
      {
         $wk_idx_test = $wk_pang[$wk_i]

         $wk_blocca_ele = 0

         $wk_msg_lato_sx = 0
         $wk_msg_lato_dx = 0

         //controllo elemento sx - dx
         $wk_lato_check = "SX"
         GOSUB Ctrl_ScoccaS_PensileL_Fianchi_SubLato

         $wk_lato_check = "DX"
         GOSUB Ctrl_ScoccaS_PensileL_Fianchi_SubLato

         if( $wk_msg_lato_sx ==1 | $wk_msg_lato_dx == 1  ) { $wk_blocca_ele = 1 }

         //per gestione dialog riassunto anomalie
         if( $wk_blocca_ele == 1 )
         {
            $wk_ne              = $wk_blo_arr + 1
            $wk_blo_arr         = $wk_ne
            $wk_blo_arr[$wk_ne] = $wk_idx_test

            $wk_blocca = 1
         }

         if( $wk_blocca_ele ==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_test,1)
            $wk_msg = STRCAT(MSG(1090),"\n", MSG(1169))

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_test,0)
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), MSG(1169) )
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }
   }

   PROCEDURA Ctrl_ScoccaS_PensileL_Fianchi_SubLato
   {
      $wk_idx_cnear = VAR_VAL($wk_idx_test,STRCAT("idx_cnear_",LOWER($wk_lato_check)))

      if( IS_IDX($wk_idx_cnear) == 0 ) { EXITSUB() }

      BOX_MODE(0)
      NEAR("$wk_near_tmp",$wk_idx_cnear,5,0,"*")

      $wk_near = 0
      $wk_j = 1
      while ( $wk_j <= $wk_near_tmp )
      {
         if( $wk_near_tmp[$wk_j] != $wk_idx_test )
         {
            $wk_ne              = $wk_near + 1
            $wk_near         = $wk_ne
            $wk_near[$wk_ne] = $wk_near_tmp[$wk_j]
         }
         $wk_j = $wk_j + 1
      }

      SET_#($wk_idx_test)
      $wk_B0 = #base_0.y
      $wk_A0 = #alto_0.y

      $wk_point_sort = SE_STR( $wk_lato_check == "SX" , "base_3" , "base_0" )
      SORT_POINT(#base_0,"$wk_near",$wk_point_sort)

      //DBG COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_B0=",STR($wk_B0) , " $wk_A0_2=",STR($wk_A0)))
      //DBG COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_near=",STR($wk_near) , " LATO=",$wk_lato_check))
      //DBG $wk_j = 1
      //DBG while ( $wk_j <= $wk_near )
      //DBG {
      //DBG    COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_near[",STR($wk_j),"]=", STR($wk_near[$wk_j]), "-",NOME($wk_near[$wk_j])  ))
      //DBG
      //DBG    $wk_j = $wk_j + 1
      //DBG }

      $wk_scoperto = 0

      if( $wk_near == 0 ) { $wk_scoperto = 1 }
      if( $wk_near == 1 )
      {
         SET_#($wk_idx_test)
         $wk_B0 = #base_0.y
         $wk_A0 = #alto_0.y


         SET_#($wk_near[1])
         $wk_B0_2 = #base_0.y
         $wk_A0_2 = #alto_0.y

         if( $wk_B0_2 > $wk_B0
           | $wk_A0_2 < $wk_A0 ) { $wk_scoperto = 1 }
      }

      if( $wk_near > 1 )
      {

         SET_#($wk_near[1])
         $wk_B0_2 = #base_0.y
         $wk_A0_2 = #alto_0.y

         //DBG COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_near[",STR(1),"]=", STR($wk_near[1]), " $wk_B0_2=",STR($wk_B0_2) , " $wk_A0_2=",STR($wk_A0_2)))

         $wk_j = 2
         while ( $wk_j <= $wk_near & $wk_scoperto == 0 )
         {
            SET_#($wk_near[$wk_j])

            //DBG COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_near[",STR($wk_j),"]=", STR($wk_near[$wk_j]), " $wk_B0_2=",STR(#base_0.y) , " $wk_A0_2=",STR(#alto_0.y)))

            if( #base_0.y - $wk_A0_2 > 2 )   { $wk_scoperto = 1  }
            else                             { $wk_A0_2 = #alto_0.y }
            $wk_j = $wk_j + 1
         }

         //DBG COMANDO2(STRCAT("LOGMSG Ctrl_ScoccaS_PensileL  $wk_idx_test:",STR($wk_idx_test), " $wk_B0_2=",STR($wk_B0_2) , " $wk_A0_2=",STR($wk_A0_2)))

         if( $wk_B0_2 > $wk_B0
           | $wk_A0_2 < $wk_A0 ) { $wk_scoperto = 1 }
      }

      if( $wk_scoperto == 1 & $wk_lato_check=="SX" ) { $wk_msg_lato_sx = 1 }
      if( $wk_scoperto == 1 & $wk_lato_check=="DX" ) { $wk_msg_lato_dx = 1 }
   }

   //Luca 03/11/2020
   PROCEDURA Ctrl_ScoccaS_Pensile_Sovrapposti
   {
      WITH_VAR("$wk_pens","FLAG_Sovrapposto",0,1,"1")

      if( $wk_pens == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i<= $wk_pens )
      {
         $wk_idx_test = $wk_pens[$wk_i]

         $wk_blocca_ele = 0

         if( IS_MATCH( NOME($wk_idx_test) , "ModuloPen*368" ) == 1  )
         {
            COMPONENTI2( "$wk_ante", $wk_idx_test, "AntaSingola_368")

            $wk_ante_push = 0

            $wk_j = 1
            while( $wk_j <= $wk_ante )
            {
               if( VAR_VAL_STR( $wk_ante[$wk_j], "GEST_C017") == "PU001" ) { $wk_ante_push = $wk_ante_push + 1 }
               $wk_j = $wk_j + 1
            }

            if( VAR_VAL($wk_idx_test,"FLAG_Speciale") == 0
              & VAR_VAL($wk_idx_test,"FLAG_Sovrapposto") == 1
              & VAR_VAL($wk_idx_test,"Y") == 552
              & $wk_ante != $wk_ante_push ) { $wk_blocca_ele = 1 }
         }

         //per gestione dialog riassunto anomalie
         if( $wk_blocca_ele == 1 )
         {
            $wk_ne              = $wk_blo_arr + 1
            $wk_blo_arr         = $wk_ne
            $wk_blo_arr[$wk_ne] = $wk_idx_test

            $wk_blocca = 1
         }

         if( $wk_blocca_ele ==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_test,1)
            $wk_msg = STRCAT(MSG(1090),"\n", MSG(1213))

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_test,0)
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), MSG(1213) )
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }
   }

   //Luca 03/12/2020
   PROCEDURA Ctrl_ScoccaT_PresenzaTopSottotop
   {
      STRUTTURE("$wk_str")

      if( $wk_str == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i<= $wk_str )
      {
         $wk_idx_test = $wk_str[$wk_i]

         $wk_blocca_ele = 0

         if( IS_MATCH( NOME($wk_idx_test) , "ScoccaT_B*" ) == 1
           & NOME($wk_idx_test) != "ScoccaT_Base_AirKitchen" )
         {
            wk_trovato_top  = 0
            wk_trovato_stop = 0
            if( VAR_EXIST($wk_idx_test,"idx_top") )
            {
               if( IS_IDX(VAR_VAL($wk_idx_test,"idx_top")) )  { wk_trovato_top = 1 }
            }
            if( VAR_EXIST($wk_idx_test,"idx_stop") )
            {
               if( IS_IDX(VAR_VAL($wk_idx_test,"idx_stop")) ) { wk_trovato_stop = 1 }
            }

            if( wk_trovato_top + wk_trovato_stop == 0 ) { $wk_blocca_ele = 1 }
         }

         //per gestione dialog riassunto anomalie
         if( $wk_blocca_ele == 1 )
         {
            $wk_ne              = $wk_blo_arr + 1
            $wk_blo_arr         = $wk_ne
            $wk_blo_arr[$wk_ne] = $wk_idx_test

            $wk_blocca = 1
         }

         if( $wk_blocca_ele ==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_test,1)
            $wk_msg = STRCAT(MSG(1090),"\n", MSG(1219))

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_test,0)
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), MSG(1219) )
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }
   }

   //Luca 03/12/2020 mantis 23932: Colonne soffietto: controllo distanza dal muro
   PROCEDURA Ctrl_ScoccaT_ColAperturaSoffietto
   {
      $wk_CG_Nome = "Ctrl_ScoccaT_ColAperturaSoffietto"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1224)

      STRUTTURE("$wk_str")
      if( $wk_str == 0 ) { EXITSUB() }

      $wk_i = 1
      while ( $wk_i<= $wk_str )
      {
         $wk_idx_test = $wk_str[$wk_i]

         if( IS_MATCH( NOME($wk_idx_test) , "ScoccaT_Col*" ) == 1  )
         {
            if( VAR_VAL( $wk_idx_test , "FLAG_soffietto") == 1 )
            {
               $wk_verso     = VAR_VAL( $wk_idx_test , "Verso" )
               $wk_verso_str = SE_STR( $wk_verso>0 , "D" , "S" )
               $wk_dist = QUERY_WALL($wk_idx_test,STRCAT("distance from face ",$wk_verso_str))

               $wk_distance = 9999
               if( $wk_dist == 0 ) { $wk_distance = 0 }
               if( $wk_dist == 1 ) { $wk_distance = DISTANZA($Query_Wall1,$Query_Wall2) }

               //if( $wk_distance < 84 ) { $wk_blocca_ele = 1 }
               if( $wk_distance < 84 ) { AddItem2Array( -1, "wk_CG_Items", $wk_idx_test, "") }
            }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_ScoccaT_Base_Retro
   {
      log = 0
      #ifdef TEC
        log = VAR_VAL( -1, "ATTIVA_LOG_DBG")
      #endif

      #ifndef TEC
      EXITSUB()
      #endif

      log=1

      $wk_msg_1  = "Basi cucina ad isola senza pannello strutturale, rivedere la costruzione"
      //LZ 24/09/2021: TODO - TEMPORANEO
      //$wk_tipo_1 = "BLOCCO"
      $wk_tipo_1 = "NO_BLOCCO"

      $wk_msg_2  = "Basi cucina centrostanza con retro non finito"
      $wk_tipo_2 = "NO_BLOCCO"

      ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro", "-- INIZIO --")

      STRUTTURE("$wk_str")

      if( $wk_str == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i <= $wk_str )
      {
         $wk_idx_test = $wk_str[$wk_i]

         $wk_blocca_ele = 0

         wk_idx_cnear_rt = -1
         if( IS_MATCH( NOME($wk_idx_test) , "ScoccaT_Base*" ) == 1  )
         {
            wk_tiposcocca = VAR_VAL( $wk_idx_test, "TipoScocca")

            //Solo le basi centrostanza
            if( VAR_EXIST( $wk_idx_test, "idx_cnear_rt")
              & ( wk_tiposcocca == 1
                | wk_tiposcocca == 3 ) )
            {
               wk_idx_cnear_rt = VAR_VAL( $wk_idx_test, "idx_cnear_rt")
               ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro -- 1: ", STRCAT( "Idx: ", STR($wk_idx_test), " - Nome: ", NOME($wk_idx_test), " - TipoScocca: ", STR(wk_tiposcocca), " - Idx Near Retro: ", STR(wk_idx_cnear_rt)))

               if( IS_IDX(wk_idx_cnear_rt) )
               {
                  //Basi direttamente appoggiate
                  $wk_retro_scocca = 0
                  BOX_MODE(0)
                  NEAR_GLOBALE2( "$wk_retro_near", wk_idx_cnear_rt, $Cuc_Spe_BarraIso, "_cont_per_near")

                  wk_j = 1
                  while( wk_j <= $wk_retro_near )
                  {
                     wk_retro_near_att = $wk_retro_near[wk_j]
                     wk_retro_near_att_pdr = PADRE( wk_retro_near_att, -1)

                     //Tra tutti i near analizzo solo quelli retro di una ScoccaT_Base
                     if( IS_MATCH( NOME(wk_retro_near_att_pdr), "ScoccaT_Base*")
                       & VAR_VAL( wk_retro_near_att_pdr, "idx_cnear_rt") == wk_retro_near_att )
                     {
                        $wk_retro_scocca = $wk_retro_scocca + 1
                        VAR_VALUE_SET( -1, STRCAT( "wk_retro_scocca_##", STR($wk_retro_scocca)), wk_retro_near_att_pdr)
                        ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro -- 2: ", STRCAT( "Idx: ", STR($wk_idx_test), " - Nome: ", NOME($wk_idx_test), " - TipoScocca: ", STR(wk_tiposcocca), " - Idx Near Retro: ", STR(wk_idx_cnear_rt), " - Base retro:", STR(wk_retro_near_att_pdr)))
                     }

                     wk_j = wk_j + 1
                  }

                  if( $wk_retro_scocca < 1 )
                  {
                     wk_altezza_scocca = VAR_VAL( $wk_idx_test, "Y_Scocca")
                     if( wk_altezza_scocca == 0 ) { wk_altezza_scocca = VAR_VAL( $wk_idx_test, "Y") }

                     DEL_VAR( -1, "wk_altezza_min")
                     DEL_VAR( -1, "wk_altezza_max")

                     //wk_altezza_min =

                     //if( VAR_EXIST(  )

                     //Elementi coprenti: barra isola e bifacciali
                     $wk_retro_cop = 0

                     BOX_MODE(0)
                     NEAR_GLOBALE2( "$wk_retro_isola", wk_idx_cnear_rt, 2, "BarraIsola")
                     wk_j = 1
                     while( wk_j <= $wk_retro_isola )
                     {
                        AddItem2Array( -1, "wk_retro_cop", $wk_retro_isola[wk_j], "")
                        wk_j = wk_j + 1
                     }

                     BOX_MODE(0)
                     NEAR_GLOBALE2( "$wk_retro_bif", wk_idx_cnear_rt, 2, "Cuc_AntaBifacciale")
                     wk_j = 1
                     while( wk_j <= $wk_retro_isola )
                     {
                        AddItem2Array( -1, "wk_retro_cop", $wk_retro_isola[wk_j], "")
                        wk_j = wk_j + 1
                     }

                     wk_j = 1
                     while( wk_j <= $wk_retro_cop )
                     {
                        wk_retro_cop_att = $wk_retro_cop[wk_j]
                        wk_basso_cop_att = VAR_VAL( wk_retro_cop_att, "base_0.y")
                        wk_alto_cop_att  = VAR_VAL( wk_retro_cop_att, "alto_0.y")

                        ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro -- 3: ", STRCAT( "Idx: ", STR($wk_idx_test), " - Nome: ", NOME($wk_idx_test), " - Idx near retro: ", STR(wk_idx_cnear_rt), " - Idx elm retro: ", STR(wk_retro_cop_att), " - Nome elm retro: ", NOME(wk_retro_cop_att)))

                        if( VAR_EXIST( -1, "wk_altezza_min") == 0
                          | ( wk_basso_cop_att < VAR_VAL( -1, "wk_altezza_min")
                            & wk_alto_cop_att >= VAR_VAL( -1, "wk_altezza_min") )) { $wk_altezza_min = wk_basso_cop_att }

                        if( VAR_EXIST( -1, "wk_altezza_max") == 0
                          | ( wk_alto_cop_att > VAR_VAL( -1, "wk_altezza_max")
                            & wk_basso_cop_att <= VAR_VAL( -1, "wk_altezza_max") )) { $wk_altezza_max = wk_alto_cop_att }

                        ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro -- 4: ", STRCAT( "Idx: ", STR($wk_idx_test), " - Nome: ", NOME($wk_idx_test), " - Alt min att: ", STR(wk_basso_cop_att), " - Alt max att: ", STR(wk_alto_cop_att), " - Alt min: ", STR($wk_altezza_min), " - Alt max: ", STR($wk_altezza_max)))

                        wk_j = wk_j + 1
                     }

                     wk_altezza_coperta = 0
                     if( VAR_EXIST( -1, "wk_altezza_min") & VAR_EXIST( -1, "wk_altezza_max") )
                     {
                        wk_altezza_coperta = $wk_altezza_max - $wk_altezza_min
                        if( $wk_retro_bif > 0 )
                        {
                           //Il bifacciale normalmente copre anche il sottotop
                           wk_altezza_coperta = wk_altezza_coperta - $Cuc_RidY_Sco
                        }
                     }

                     ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro -- 5: ", STRCAT( "Idx: ", STR($wk_idx_test), " - Nome: ", NOME($wk_idx_test), " - Alt scocca:", STR(wk_altezza_scocca), " - Alt coperta:", STR(wk_altezza_coperta)))
                     if( wk_altezza_scocca > wk_altezza_coperta )
                     {
                        $wk_blocca_ele = 1
                        $wk_msg = $wk_msg_2
                        $wk_tipo = $wk_tipo_2
                     }
                  }
                  else
                  {
                     $wk_blocca_ele = 1
                     $wk_msg = $wk_msg_1
                     $wk_tipo = $wk_tipo_1
                  }
               }
            }
         }

         //per gestione dialog riassunto anomalie
         if( $wk_blocca_ele == 1 )
         {
            $wk_ne              = $wk_blo_arr + 1
            $wk_blo_arr         = $wk_ne
            $wk_blo_arr[$wk_ne] = $wk_idx_test

            $wk_blocca = 1
         }

         if( $wk_blocca_ele ==1 & VAR_VAL(-1,"wk_CG_Riassunto")==0 )
         {
            HI($wk_idx_test,1)

            DISPLAY3($wk_msg,$MB_OK + $MB_ICONERROR)
            HI($wk_idx_test,0)
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), $wk_tipo)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), $wk_msg)
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }

      ScriviSuLog( log, "Ctrl_ScoccaT_Base_Retro", "-- FINE --")
   }

   //Alberto B. 05/08/20
   PROCEDURA punti_completi_angoloL
   {
      base_0 = [ 0, 0,  0]
      base_1 = [ 0, 0,  ZFiaSx]
      base_2 = [Xt-ZFiaDx, 0 , ZFiaSx]
      base_3 = [Xt-ZFiaDx, 0 , Zt]
      base_4 = [Xt, 0, Zt]
      base_5 = [Xt, 0,  0]

      //FM
      //if( ang==180 )  { ang=90   }
      //SINA = SENO(ang-90)
      //COSA = COSENO(ang-90)
      //TGA  = SINA/COSA
      //
      //if( ang!=90 )
      //{
      //   //questo si refirisce al caso in cui non sono allineato con il pensile
      //   if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
      //   {
      //      base_0 = [     0, 0,  0]
      //      base_1 = [     0, 0, ZFiaSx]
      //      base_2 = [AntaSx, 0, ZFiaSx]
      //      base_3 = [AntaSx+AntaDx*SINA, 0, ZFiaSx+AntaDx*COSA]
      //      base_4 = [base_3.x+ZFiaDx*COSA, 0, (base_3.z-ZFiaDx*SINA) ]
      //      base_5 = [base_4.x-(base_4.z*TGA), 0,  0]
      //   }
      //   if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
      //   {
      //      base_0 = [ 0, 0,  0]
      //      base_1 = [ 0, 0,  ZFiaSx]
      //      base_5 = [Xt, 0,  0]
      //      base_4 = [Xt+Zt*SINA, 0, Zt*COSA ]
      //      base_3 = [base_4.x -ZFiaDx*COSA, 0, base_4.z+ZFiaDx*SINA]
      //      base_2 = [base_3.x -(base_3.z-ZFiaSx)*TGA, 0, base_1.z]
      //
      //      if( IS_VAR_FIXED(ATTUALE(),"AntaSx")==0 )
      //         {  AntaSx = ABS(DISTANZA(base_1,base_2))     }
      //      if( IS_VAR_FIXED(ATTUALE(),"AntaDx")==0 )
      //         {  AntaDx = ABS(DISTANZA(base_2,base_3))     }
      //   }
      //
      //   delta_x = 0
      //   PERNO   = ZFiaSx
      //   if( STRCMP(FuoriSquadraBA,"ANTE")==0 )
      //   {
      //      AntaP = (Zt_Retro -$Cuc_Def_PeStd_Z)/COSENO(45)
      //      tang = SENO(ang-90)/COSENO(ang-90)
      //      //calcolo le ipotetiche basi di un pensile in FS
      //      ba0 = [0, 0, 0]
      //      ba1 = [0, 0, $Cuc_Def_PeStd_Z]
      //      ba2 = [AntaP*COSENO(90-ang/2), 0, $Cuc_Def_PeStd_Z+AntaP*SENO(90-ang/2)]
      //      ba3 = [ba2.x+$Cuc_Def_PeStd_Z*COSENO(ang-90), 0, (ba2.z-$Cuc_Def_PeStd_Z*SENO(ang-90)) ]
      //      ba4 = [ba3.x-(ba3.z*tang), 0,  0]
      //
      //      c_rivestimento_ba0 = ba0
      //      c_rivestimento_ba1 = ba1
      //      c_rivestimento_ba2 = ba2
      //      c_rivestimento_ba3 = ba3
      //      c_rivestimento_ba4 = ba4
      //
      //      //trovo quindi la dimensione dell'ingombro a muro dell'ipotetico pensile FS
      //      IngMuro = DISTANZA(ba0,ba4)
      //      //calcolo la riduzione/maggiorazione rispetto misure iniziali
      //      deltaIngMuro = $Cuc_BAPRef_X -IngMuro
      //   }
      //}

      alto_0 = base_0    alto_0.y = Y
      alto_1 = base_1    alto_1.y = Y
      alto_2 = base_2    alto_2.y = Y
      alto_3 = base_3    alto_3.y = Y
      alto_4 = base_4    alto_4.y = Y
      alto_5 = base_5    alto_5.y = Y

      pnt_sx_0 = base_0
      pnt_sx_1 = base_1
      pnt_dx_0 = base_4
      pnt_dx_1 = base_3

      base_so = base_0
      alto_ne = alto_4

      if( STRCMP(FuoriSquadraBA,"SCHIENE")==0 )
      {  if(ang<90)  {  alto_ne.x = alto_5.x    }     }
   }

   PROCEDURA Cuc_PosaAngL
   {
      @base_0 = base_0
      @Y  = Y
      @Xt = Xt
      @Zt = Zt
      @ZFiaSx = ZFiaSx
      @ZFiaDx = ZFiaDx
      @AntaSx = AntaSx
      @AntaDx = AntaDx
      @ang = ang
      @FuoriSquadraBA = FuoriSquadraBA
   }

   PROCEDURA DefVanoPensAngolo
   {
      //0 = vano anta sx
      //1 = vano anta dx
      //2 = vano complessivo
      LatoAntaSx = ABS(DISTANZA(base_1,base_2))
      LatoAntaDx = ABS(DISTANZA(base_2,base_3))
      //if(X_Mont<1 | NoMont==1 )   { LatoAntaSx = ABS(DISTANZA(base_1,base_2))  }
      //if(Z_Mont<1 | NoMont==1 )   { LatoAntaDx = ABS(DISTANZA(base_2,base_3))  }

      if(LatoAntaSx>=LatoAntaDx)
      {
         vano_nome_0 = "vano_max"
         vano_nome_1 = "vano_min"
      }
      else
      {
         vano_nome_0 = "vano_min"
         vano_nome_1 = "vano_max"
      }

      vano_0_0 = [base_0.x + $Cuc_Spe_Fia, base_0.y, base_0.z + $Cuc_Rie_SchPA_ZR + $Cuc_Spe_Fia]
      vano_l_0 = LatoAntaSx - $Cuc_Spe_Fia
      vano_p_0 = ZFiaSx - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia

      //x_vano = LatoAntaDx - $Cuc_Spe_Fia
      //z_vano = ZFiaDx - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia

      //vano_0_1 = base_5
      //vano_0_1.x = base_0.x + LatoAntaSx
      //vano_0_1.z = base_0.z + ZFiaSx
      //vano_l_1 = ZFiaDx - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia
      //vano_p_1 = LatoAntaDx - $Cuc_Spe_Fia
      //vano_ang_1 = 90

      vano_l_1 = LatoAntaDx - $Cuc_Spe_Fia
      vano_p_1 = ZFiaDx - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia

      vano_0_1 = base_5
      vano_0_1.x = base_5.x - $Cuc_Rie_SchPA_ZR - $Cuc_Spe_Fia
      vano_0_1.z = base_4.z - $Cuc_Spe_Fia - vano_l_1
      vano_ang_1 = -90

      vano_0_2 = [base_0.x+$Cuc_Spe_Fia+2, base_0.y, base_0.z+$Cuc_Rie_SchPA_ZR+$Cuc_Spe_Fia +2*$Cuc_Aria_Sch_Z ]
      vano_l_2 = Xt -2*$Cuc_Spe_Fia -$Cuc_Rie_SchPA_ZR
      vano_h_2 = Y
      vano_p_2 = Zt -2*$Cuc_Spe_Fia -$Cuc_Rie_SchPA_ZR
      vano_nome_2 = "vano_tot"

      if( VAR_VAL(idx_att,"Spe_Fia_Sx")>0 )
      {
         vano_0_0.x = vano_0_0.x +Spe_Fia_Sx
         vano_0_2.x = vano_0_1.x +Spe_Fia_Sx
      }

      if( VAR_VAL(idx_att,"Spe_Fia_Dx")>0 )
      {
         vano_0_1.x = vano_0_1.x-Spe_Fia_Dx*SENO(ang-90)
         vano_0_1.z = vano_0_1.z-Spe_Fia_Dx*COSENO(ang-90)
      }
   }

   PROCEDURA Assegna_TipoCollo_MeccanismoLeMans
   {
      $ATPC_debug_msg  = "Assegna_TipoCollo_MeccanismoLeMans - START"
      LogProcedura2("ATPC_TipoCollo")

      //tipo collo specchio da G58 a G59
      $wk_pre_tp = "G"

      Reset_TIPO_COLLO($wk_pre_tp,58,59)

      WITH_VAR("$wk_mecc","Cuc_MeccanismoLeMans",0,1,"1")

      if( $wk_mecc==0 )
      {
         $ATPC_debug_msg  = "NON SONO PRESENTI MECCANISMI LE MANS - END"
         LogProcedura2("ATPC_TipoCollo")

         EXITSUB()
      }

      //ciclo tutte le barre e assegno Tipo collo al relativo fianco
      $wk_prg = 58

      $wk_i = 1
      while ( $wk_i <= $wk_mecc )
      {
         $wk_idx_mecc = $wk_mecc[$wk_i]
         $wk_idx_padre  = PADRE($wk_idx_mecc,1)

         #ifdef TEC;AZI
            if( $wk_prg>59 )
            {
               $wk_msg = "ATTENZIONE!\nTipoCollo=G59 non previsto per Meccanismo Le Mans.\nAvvisare ufficio tecnico."
               DISPLAY2($wk_msg)
               $wk_i = 100
               $wk_idx_fiafin = -1
               $BLOCCO_FINE_ORDINE = 1
            }
         #endif

         $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))

         //Luca 15/01/2021 AGGIUNGO CONTROLLO SOSTITUZIONI
         $wk_ATTIVA_TIPO_COLLO = 1
         if( VAR_VAL_STR(-1,"TST_OrdineSostituzione") == "1" )
         {
            $wk_ATTIVA_TIPO_COLLO = 0
            if( VAR_VAL_STR($wk_idx_mecc,"ORD_SOST") == "1"
              & VAR_VAL_STR($wk_idx_padre,"ORD_SOST") == "1" ) { $wk_ATTIVA_TIPO_COLLO = 1 }
         }

         if( $wk_ATTIVA_TIPO_COLLO )
         {
            VAR_VALUESTR_SET($wk_idx_mecc,"TIPO_COLLO",$wk_val_tp)
            VAR_VALUESTR_SET($wk_idx_padre,"TIPO_COLLO",$wk_val_tp)
            $wk_prg = $wk_prg + 1
         }

         $ATPC_debug_msg  = STRCAT("TIPO COLLO = ", $wk_val_tp , " idx ",STR($wk_idx_mecc), " e idx ",STR($wk_idx_padre))
         LogProcedura2("ATPC_TipoCollo")


         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA Assegna_TipoCollo_Eldom_Saldati
   {
      $ATPC_debug_msg  = "Assegna_TipoCollo_Eldom_Saldati - START"
      LogProcedura2("ATPC_TipoCollo")

      $wk_pre_tp = "K"
      //Acciaio: K01 K02 K03
      $wk_prg_acciaio = 01
      $wk_prgmax_acciaio = 03
      Reset_TIPO_COLLO( $wk_pre_tp, $wk_prg_acciaio, $wk_prgmax_acciaio)
      //laminato: K11 K12 K13
      $wk_prg_laminato = 11
      $wk_prgmax_laminato = 13
      Reset_TIPO_COLLO( $wk_pre_tp, $wk_prg_laminato, $wk_prgmax_laminato)
      //Quarzo: K21 K22 K23
      $wk_prg_quarzo = 21
      $wk_prgmax_quarzo = 23
      Reset_TIPO_COLLO( $wk_pre_tp, $wk_prg_quarzo, $wk_prgmax_quarzo)

      //Parto dal top in modo da avere subito il materiale
      WITH_ALIAS( "$wk_top", "BDM_Top")
      if( $wk_top == 0 )
      {
         $ATPC_debug_msg  = "NON SONO PRESENTI TOP - END"
         LogProcedura2("ATPC_TipoCollo")

         EXITSUB()
      }

      WITH_ALIAS( "$wk_eld", "Eldom")
      if( $wk_eld == 0 )
      {
         $ATPC_debug_msg  = "NON SONO PRESENTI ELDOM - END"
         LogProcedura2("ATPC_TipoCollo")

         EXITSUB()
      }

      $wk_i = 1
      while( $wk_i <= $wk_top )
      {
         $wk_top_idx = $wk_top[$wk_i]
         $wk_top_idxpan = VAR_VAL( $wk_top_idx, "idx_pann_top")
         $wk_top_mat = VAR_VAL_STR( $wk_top_idx, "VAR_TipoTopStr")

         $wk_var_tipo = ""
         if( IS_MATCH( $wk_top_mat, "MDI*") == 1
           | IS_MATCH( $wk_top_mat, "QUARZO*") == 1)   { $wk_var_tipo = "quarzo"   }

         if( IS_MATCH( $wk_top_mat, "FENIX*") == 1
           | IS_MATCH( $wk_top_mat, "LAMINATO*") == 1) { $wk_var_tipo = "laminato" }

         if( IS_MATCH( $wk_top_mat, "ACCIAIO*") == 1)
         {
            $wk_var_tipo = "acciaio"

            if( IS_IDX($wk_top_idxpan)
              & $wk_top_mat == "ACCIAIO_80") { $wk_top_idx = $wk_top_idxpan }
         }

         if( $wk_var_tipo != "" )
         {
            //Utilizzo eventuali tipi collo già esistenti nel top
            $wk_val_tp = VAR_VAL_STR( $wk_top_idx, "TIPO_COLLO")
            if( $wk_val_tp == "" )
            {
               $wk_prg = VAR_VAL( -1, STRCAT( "wk_prg_", $wk_var_tipo))
               $wk_prgmax = VAR_VAL( -1, STRCAT( "wk_prgmax_", $wk_var_tipo))

               $wk_val_tp = STRCAT( $wk_pre_tp, STR($wk_prg))
               if( $wk_prg < 10 ) { $wk_val_tp = STRCAT( $wk_pre_tp, STR(0), STR($wk_prg)) }

              #ifdef TEC;AZI
               if( $wk_prg > $wk_prgmax )
               {
                  $wk_msg = STRCAT( "ATTENZIONE!\nTipoCollo=", $wk_val_tp, " non previsto per Eldom integrato.\nAvvisare ufficio tecnico.")
                  DISPLAY2($wk_msg)

                  $wk_i = $wk_top
                  $BLOCCO_FINE_ORDINE = 1
               }
              #endif
            }

            //Cerco eldom associati al top corrente
            $wk_j = 1
            while( $wk_j <= $wk_eld )
            {
               $wk_eld_idx = $wk_eld[$wk_j]

               if( VAR_VAL( $wk_eld_idx, "idx_top") == GetTopLevel($wk_top_idx)
                 & VAR_VAL( $wk_eld_idx, "InsEldom") == 1
                 & Assegna_TIPO_COLLO_CheckSost( $wk_top_idx, $wk_eld_idx) )
               {
                  VAR_VALUESTR_SET( $wk_top_idx, "TIPO_COLLO", $wk_val_tp)
                  VAR_VALUESTR_SET( $wk_eld_idx, "TIPO_COLLO", $wk_val_tp)

                  $ATPC_debug_msg  = STRCAT("TIPO COLLO = ", $wk_val_tp, " idx ",STR($wk_top_idx), " e idx ",STR($wk_eld_idx))
                  LogProcedura2("ATPC_TipoCollo")

                  $wk_prg = $wk_prg + 1
                  VAR_VALUE_SET( -1, STRCAT( "wk_prg_", $wk_var_tipo), $wk_prg)
               }

               $wk_j = $wk_j + 1
            }
         }

         $wk_i = $wk_i + 1
      }
   }

   //Luca 04/11/2020
   //mantis 22873: Divisorio induzione: gestione con fianchi di finitura
   PROCEDURA CtrlCollisioni_Pannello_Trafile
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      if( $OnLoadOrder == 1  )            { EXITSUB() }
      if( $M4RicalcoloOffset__ == 1 )     { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_sx")==0  )  { EXITSUB() }
      if( IS_IDX(idx_cnear_sx)==0
        | IS_IDX(idx_cnear_dx)==0 )                  { EXITSUB() }

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_tra_sx", idx_cnear_sx, 8, "FFTrafila")
      NEAR_GLOBALE2( "wk_tra_dx", idx_cnear_dx, 8, "FFTrafila")

      RidX_SX = 0
      if( wk_tra_sx > 0 )
      {
         if( VAR_VAL_STR(wk_tra_sx[1],"FF_Materiale") != "WILDWOOD" ) { RidX_SX = 1 }
      }

      RidX_DX = 0
      if( wk_tra_dx > 0 )
      {
         if( VAR_VAL_STR(wk_tra_dx[1],"FF_Materiale") != "WILDWOOD" ) { RidX_DX = 1 }
      }

      Xr = X - RidX*RidX_SX - RidX*RidX_DX
   }

   //Luca 03/09/2021 non serve utilizzare variabili globali
   //LZ 26/04/2021 - Calcolo dimensioni staffa supporto vetro
   PROCEDURA SetSuppVtrDimStaffa
   {
      //Variabile dimensionamento staffa
      wk_staffa_var_test = "X_Staffa"
      if( NOME(ATTUALE()) == "SostegnoVetro_368" )        { wk_staffa_var_test = "Staffa_Z" }

      //Valore dimensione vetro
      wk_staffa_val_test = X
      if( NOME(ATTUALE()) == "SostegnoVetro_368" )        { wk_staffa_val_test = Z }
      if( NOME(ATTUALE()) == "SupportoVetro_Tavoli_AIR" ) { wk_staffa_val_test = LargVet }

      //Esco se la staffa ha dimensioni bloccate
      if( IS_VAR_FIXED(ATTUALE(), wk_staffa_var_test) )   { EXITSUB() }

      wk_staffa_diffX_min = 40
      wk_staffa_diffX_max = 40

      DEL_VAR( ATTUALE(), "wk_staffa_x_##*")
      wk_staffa_x = 10
      wk_staffa_x[1]  = 150
      wk_staffa_x[2]  = 200
      wk_staffa_x[3]  = 250
      wk_staffa_x[4]  = 300
      wk_staffa_x[5]  = 400
      wk_staffa_x[6]  = 500
      wk_staffa_x[7]  = 600
      wk_staffa_x[8]  = 700
      wk_staffa_x[9]  = 800
      wk_staffa_x[10] = 1000

      if( NOME(ATTUALE()) == "SostegnoVetro_368" )
      {
         DEL_VAR( ATTUALE(), "wk_staffa_x_##*")
         wk_staffa_x = 6
         wk_staffa_x[1]  = 150
         wk_staffa_x[2]  = 250
         wk_staffa_x[3]  = 400
         wk_staffa_x[4]  = 500
         wk_staffa_x[5]  = 600
         wk_staffa_x[6]  = 800
      }

      //Simone 16/06/2022
      if( NOME(ATTUALE()) == "SupportoVetro_Tavoli_AIR"
        & NOME(PADRE(ATTUALE(),1)) == "TavolinoGenerico" )
      {
         DEL_VAR( ATTUALE(), "wk_staffa_x_##*")
         wk_staffa_x = 3
         wk_staffa_x[1]  = 200
         wk_staffa_x[2]  = 250
         wk_staffa_x[3]  = 400
      }

      wk_i = 1
      while( wk_i <= wk_staffa_x )
      {
         wk_staffa_x_att = wk_staffa_x[wk_i]

         wk_staffa_x_succ = wk_staffa_x_att
         if( wk_i + 1 <= wk_staffa_x ) { wk_staffa_x_succ = VAR_VAL( ATTUALE(), STRCAT( "wk_staffa_x_##", STR(wk_i+1))) }

         //Calcolo copertura di ogni singolo supporto in base al supporto successivo
         if( wk_staffa_x_succ > wk_staffa_x_att )
         {
           wk_staffa_diffX_max = wk_staffa_diffX_min + ( wk_staffa_x_succ - wk_staffa_x_att )
         }

         //Esco se il vetro può essere accoppiato alla staffa corrente
         if( wk_staffa_val_test < wk_staffa_x_att + wk_staffa_diffX_max ) { wk_i = wk_staffa_x }

         wk_i = wk_i + 1
      }

      VAR_VALUE_SET( ATTUALE(), wk_staffa_var_test, wk_staffa_x_att)
   }

   // Dump del top-level
   PROCEDURA Dump
   {
      Recursive = 0

      DumpIdx = PADRE(IDX_REF(), -1)

      // creo il file
      FileName = STRCAT(SUBST_LABEL("%install_dir%\Dump_"), STR(DumpIdx), "_", NOME(DumpIdx), "_", DATA(0), ".txt")
      FILE_APPEND(FileName, STRCAT("DUMP: ", FileName))
      FILE_APPEND(FileName, " ")

      Dump(0, DumpIdx, FileName, Recursive)

      DISPLAY2(STRCAT("Dump completato:\n", FileName))
   }

   // Dump del top-level + componenti
   PROCEDURA Dump2
   {
      Recursive = 1

      DumpIdx = PADRE(IDX_REF(), -1)

      // creo il file
      FileName = STRCAT(SUBST_LABEL("%install_dir%\Dump2_"), STR(DumpIdx), "_", NOME(DumpIdx), "_", DATA(0), ".txt")
      FILE_APPEND(FileName, STRCAT("DUMP2: ", FileName))
      FILE_APPEND(FileName, " ")

      Dump(0, DumpIdx, FileName, Recursive)

      DISPLAY2(STRCAT("Dump2 completato:\n", FileName))
   }

   // Dump degli elementi top-level + componenti dell'intero ordine
   PROCEDURA DumpAll
   {
      Recursive = 1

      // creo il file
      FileName = STRCAT(SUBST_LABEL("%install_dir%\DumpAll_"), VAR_VAL_STR(-1, "nOrdine"), "_", DATA(0), ".txt")
      FILE_APPEND(FileName, STRCAT("DUMP ALL: ", FileName))
      FILE_APPEND(FileName, " ")

      STRUTTURE("Structs")

      i = 1
      while( i <= Structs )
      {
         Dump(0, Structs[i], FileName, Recursive)

         i = i + 1
      }

      DISPLAY2(STRCAT("DumpAll completato:\n", FileName))
   }

   //{ procedure colonna falegnameria
   PROCEDURA SettaPosizioneColFalegnameria
   {
      //OnQueryBdmLocal
      if( ACTION()==-12 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            liv0y = $M4_DragInfo_Snap.y

            if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
            {
               SET_#($M4_DragInfo_Ref)
               wk_alto_M4_ref = #alto_0.y
               wk_base_M4_ref = #base_0.y

               wk_diff = wk_alto_M4_ref - Y

               if( wk_diff <= 17 )      { liv0y = 0 ric = 1 }

               if( wk_diff == 17
                 & wk_base_M4_ref<0.1 ) { liv0y = 0 }
            }
         }
         else
         {
            liv0y = $M4_DragInfo_Snap.y

            //se sono a pavimento, chiedo livello di inserimento
            id_wall = $M4_DragInfo_WallIdx
            ChiediY = 0

            r = QUERY_WALL(0,"listfloor")
            i = 1
            while ( i<=$Query_Wall & ChiediY==0 )
            {
               if( $Query_Wall[i]==id_wall ) { ChiediY = 1 }
               i = i + 1
            }

            //if( ChiediY )
            //{
            //   r = CHIEDI(-1,"ChiediLivInsCS")
            //   $query_p1 = $M4_DragInfo_Snap
            //   $query_p1.y = $ChiediLivInsCS
            //   $query_p2 = 0
            //
            //   $QueryResult__ = 1
            //}
            //else
            //{
               wk_a_muro = 1
            //}

            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " M4_FIX_Y=0"))
         }
      }
      else
      {
         liv0y = base_0.y

         if( liv0y==17 )
         {
            liv0y = 0
            ric = 1
            if( ACTION()==2 & $OnLoadOrder==0 & ric==1) { COMANDO(STRCAT("RICALCOLA ",STR(ATTUALE())," //SettaPosizioneBase")) }
         }
      }

      TipoScocca = 0
      if( liv0y>0.1 ) { TipoScocca = 2 }
      VAR_SET_MODIFICATA(ATTUALE(),"TipoScocca","")


      wk_dist = QUERY_WALL(ATTUALE(),"distance from face R")

      //Luca 26/06/2020
      //aggiungo controllo per base posizionata ad angolo
      wk_pos = TIPO_POS(ATTUALE())
      //se agganciata ad angolo, sempre a parete
      if( wk_pos==2 )  { wk_dist = 0 }

      if( wk_dist>0 )
      {
         if( TipoScocca==0 ) { TipoScocca = 1 }
         else                { TipoScocca = 3 }
      }
   }

   PROCEDURA OnSetupLivelli_VaniColFalegnameria
   {
      LIVELLI_VISIBILI__  = 1

      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")
      liv2add    = 1
      liv2add[1] = 0

      if( VAR_EXIST(ATTUALE(),"Vano_OffY_Inf") ) { liv2add[1] = Vano_OffY_Inf }

      liv2addscr = 0

      liv_max = VAR_VAL(idx_ref,"Y")

      wk_b0_col = VAR_VAL(idx_ref,"base_0.y") + VAR_VAL(idx_ref,"Cuc_Alt_Zoc")

      COMPONENTI2("vani",idx_ref,"Vano*ColFalegnameria")
      i = 1
      while ( i <= vani )
      {
         liv_att = VAR_VAL(vani[i],"alto_0.y") - wk_b0_col
         AddItem2Array(ATTUALE(),"liv2add",liv_att,"")
         i = i + 1
      }

      SORT_ARRAY(ATTUALE(),"liv2add")
      ArrayCopy(ATTUALE(),"liv2add","liv2addscr")
      GOSUB livelli_add2

      //liv_att = 0
      //step = 92
      //while ( liv_att <= liv_max )
      //{
      //   ne = liv2add + 1
      //   liv2add = ne
      //   liv2addscr = ne
      //   liv2add[ne]    = liv_att
      //   liv2addscr[ne] = liv_att
      //
      //   liv_att = liv_att + step
      //}
      //if( NOME(ATTUALE()) == "VanoFrigo_ColFalegnameria" )  {  liv2add = 1 }
      //GOSUB livelli_add2
   }

   PROCEDURA Attrezza_Vano_ColFalegnameria
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      wk_RieX  = $Cuc_Spe_Fia
      wk_RieZR = 0
      wk_RieZF = 0

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + $livello
      base_0.z = $vano_0.z + wk_RieZR

      X = $larghezza  - 2*wk_RieX
      Z = $profondita - wk_RieZR - wk_RieZF

      //Luca 21/04/2021
      if( ACTION() == 2 & $OnLoadOrder==0 & VAR_EXIST(idx_att,"copied__") != 1 )
      {
         var_chiedi = ""
         if( NOME(ATTUALE()) == "VanoFrigo_ColFalegnameria" ) { var_chiedi = "TipoColFrigo" }
         //if( NOME(ATTUALE()) == "VanoForno_ColFalegnameria" ) { var_chiedi = "TipoColForno" }

         if( var_chiedi != "" )
         {
            CHIEDI(ATTUALE(),var_chiedi)
            SchedaTecnica = 1
         }
      }

      //trovo in progressivo del vano
      NrVano_CF = 0
      SET_#(idx_ref)

      i = 1
      while ( i <= #Vani_CF  )
      {
         if( #Vani_CF[i] == ATTUALE() )  { NrVano_CF = i }
         i = i + 1
      }

      if( NrVano_CF == 0 ) { EXITSUB() }

      wk_liv = 0
      i = 1
      while ( i <= #Vani_CF & i < NrVano_CF )
      {
         wk_liv = wk_liv +  VAR_VAL(#Vani_CF[i],"Y")
         i = i + 1
      }

      if( VAR_EXIST(ATTUALE(),"Vano_OffY_Inf") )
      {
         if( wk_liv < Vano_OffY_Inf ) { wk_liv = Vano_OffY_Inf }
      }

      base_0.y = $vano_0.y + wk_liv

      //Luca 26/04/2021
      if( NOME(ATTUALE()) == "VanoRipiani_ColFalegnameria" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Y") == 0 )
         {
            //se ultimo vano
            if( NrVano_CF == #Vani_CF ) { Y = @Y -  wk_liv - $Cuc_Spe_Cop/2 }
            if( NrVano_CF <  #Vani_CF )
            {
               //TODO
               //Y = @Y -  wk_liv - $Cuc_Spe_Cop
            }
         }
      }
   }

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

      ConVanoSopra = 0
      ConVanoSotto = 0

      idx_vano_inf = -1
      idx_vano_sup = -1

      if( NrVano_CF == 0) { EXITSUB() }

      idx_pdr = PADRE( ATTUALE(), 1)
      wk_num_vani = VAR_VAL( idx_pdr, "Vani_CF")

      // Vano inferiore
      wk_num_var  = NrVano_CF - 1
      wk_nome_var = GetArrayVar( "Vani_CF", wk_num_var)
      if( wk_num_var >= 1
        & wk_num_var <= wk_num_vani
        & IsIdx( idx_pdr, wk_nome_var)) { idx_vano_inf = VAR_VAL( idx_pdr, wk_nome_var) }

      if( IS_IDX(idx_vano_inf) )
      {
         SET_#(idx_vano_inf)
         if( ABS(base_0.y - #alto_0.y) < 0.1)  { ConVanoSotto = 1 }
      }

      // Vano superiore
      wk_num_var  = NrVano_CF + 1
      wk_nome_var = GetArrayVar( "Vani_CF", wk_num_var)
      if( wk_num_var >= 1
        & wk_num_var <= wk_num_vani
        & IsIdx( idx_pdr, wk_nome_var)) { idx_vano_inf = VAR_VAL( idx_pdr, wk_nome_var) }

      if( IS_IDX(idx_vano_sup))
      {
         SET_#(idx_vano_sup)
         if( ABS(#base_0.y - alto_0.y) < 0.1)  { ConVanoSopra = 1 }
      }

      if( NOME(ATTUALE()) == "VanoForno_ColFalegnameria" )
      {
         ConCoperchio = 1
         ConFondo     = 1

         if( ConVanoSotto == 1
            & NOME(idx_vano_inf)  == "VanoFrigo_ColFalegnameria" ) { ConFondo = 0 }
      }

      if( NOME(ATTUALE()) == "VanoRipiani_ColFalegnameria" )
      {
         ConCoperchio = 0
         ConFondo     = 0

         if( ConVanoSopra == 1 ) { ConCoperchio = 1 }
         if( ConVanoSotto == 0 ) { ConFondo = 1 }
      }
   }

   PROCEDURA Ctrl_Frontali_ColFalegnameria
   {
      if( ACTION() <= 0 | ACTION() == 2 )  { EXITSUB() }

      FrontaleY    = 0
      FrontaleOffY = 0

      idx_vano = ATTUALE()
      idx_col = PADRE(ATTUALE() ,1)
      idx_vano_sopra = VAR_VAL(idx_vano,"idx_vano_sup")
      idx_vano_sotto = VAR_VAL(idx_vano,"idx_vano_inf")

      TipoVano = VAR_VAL_STR(idx_vano,"TipoVano")

      if( TipoVano == "FRIGO" )
      {
         //se vano superiore è un vano forno
         if( IsIdx(ATTUALE(),"idx_vano_sopra")  )
         {
            if( VAR_VAL_STR(idx_vano_sopra,"TipoVano") == "FORNO"
              & VAR_VAL(idx_vano_sopra,"FroForno_B0") > 0  )
            {
               wk_y = VAR_VAL(idx_vano_sopra,"FroForno_B0") - VAR_VAL(idx_vano,"base_0.y") - 3*$Cuc_Aria_Ant_Y
               FrontaleY = wk_y
               FrontaleOffY = $Cuc_Aria_Ant_Y
            }
         }
      }

      if( TipoVano == "RIPIANI" )
      {
         //se vano inferiore è un vano forno
         if( IsIdx(ATTUALE(),"idx_vano_sotto")  )
         {
            if( VAR_VAL_STR(idx_vano_sotto,"TipoVano") == "FORNO"
              & VAR_VAL(idx_vano_sotto,"FroForno_A0") > 0  )
            {
               b0y = base_0.y + Vano_OffY_Inf
               wk_diffy = b0y - VAR_VAL(idx_vano_sotto,"FroForno_A0")

               wk_diffy_new = 0
               if( wk_diffy <= 0 ) { wk_diffy_new = ABS(wk_diffy) + 2*$Cuc_Aria_Ant_Y }

               if( wk_diffy > 0 )  { wk_diffy_new = 2*$Cuc_Aria_Ant_Y - wk_diffy }

               FrontaleOffY = wk_diffy_new

               FrontaleY = Y - $Cuc_Aria_Ant_Y - wk_diffy_new

               //se ultimo vano
               //if( NrVano_CF == VAR_VAL(idx_col,"Vani_CF")  ) { FrontaleY = FrontaleY }
            }
         }
      }

   }

   PROCEDURA Ctrl_VanoFrigo_Allinea_ColFalegnameria
   {
      if( ACTION() <= 0 | ACTION() == 2 )  { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"FrontaleY") == 0 ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"AllineaFrontaleSX_prec") == 0 ) { AllineaFrontaleSX_prec = VAR_VAL(ATTUALE(),"AllineaFrontaleSX") }
      if( VAR_EXIST(ATTUALE(),"AllineaFrontaleDX_prec") == 0 ) { AllineaFrontaleDX_prec = VAR_VAL(ATTUALE(),"AllineaFrontaleDX") }

      wk_y_altezza_fro = 0
      idx_col = GetTopLevel(ATTUALE())

      idx_col_vic = -1

      if( AllineaFrontaleSX == 1 )
      {
         if( IsIdx(idx_col,"idx_sx") == 1 ) { idx_col_vic = VAR_VAL(idx_col,"idx_sx") }
      }

      if( AllineaFrontaleDX == 1 )
      {
         if( IsIdx(idx_col,"idx_dx") == 1 ) { idx_col_vic = VAR_VAL(idx_col,"idx_dx") }
      }

      if( IS_IDX(idx_col_vic) == 0 ) { EXITSUB() }

      COMPONENTI2("wk_fro",idx_col_vic,"Cuc_Anta*")
      if( wk_fro == 0 )  { EXITSUB() }

      SORT_POINT(base_0,"wk_fro","base_0")

      idx_fro = wk_fro[1]

      alto_0_frontale_vicino = VAR_VAL(idx_fro,"alto_0.y")
      alto_0_frontale_vano = FrontaleY + base_0.y + FrontaleOffY

      wk_diff = alto_0_frontale_vicino - alto_0_frontale_vano

      //213 pos max fondo frigo
      if( wk_diff < 213 )
      {
         if( PosFondoFr != wk_diff )
         {
            PosFondoFr = wk_diff
            VAR_SET_MODIFICATA(ATTUALE(),"PosFondoFr","")
            COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())), " no_agganciati //OnChangedVar_VaniColFalegnameria"))
         }
      }
   }

   PROCEDURA OnChangedVar_VaniColFalegnameria
   {
      if( $ChangedIdx!=ATTUALE() ) { EXITSUB() }


      if( VAR_EXIST(ATTUALE(),"ListVar_RicTopL") == 0  ) { EXITSUB() }

      STR_SPLIT( ListVar_RicTopL , ";" , 1 , "arr_var" , ATTUALE() )

      ric = 0
      i = 1
      while ( i <= arr_var )
      {
         if( $ChangedVar == arr_var[i] ) { ric = 1 }

         i = i + 1
      }

      if( ric == 0 )  { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())), " no_agganciati //OnChangedVar_VaniColFalegnameria"))
   }

   PROCEDURA Cuc_VestiFrontali_Falegnameria
   {
      if( UN_PADRE("ScoccaT_ColFalegnameria") == 0 )  { EXITSUB() }

      idx_vano = PADRE(ATTUALE(),1)
      idx_col  = GetTopLevel(ATTUALE())

      TipoVano = VAR_VAL_STR(idx_vano,"TipoVano")

      NrVaniTot = VAR_VAL(idx_col,"Vani_CF")
      NrVaniAtt = VAR_VAL(idx_vano,"NrVano_CF")

      idx_vano_sopra = VAR_VAL(idx_vano,"idx_vano_sup")
      idx_vano_sotto = VAR_VAL(idx_vano,"idx_vano_inf")

      offy = $Cuc_Aria_Ant_Y
      dimy = Y

      if( TipoVano == "FRIGO" )
      {
         dimy = @Y - 2*$Cuc_Aria_Ant_Y

         Y = dimy
         base_0.y = $vano_0.y + offy

         if( VAR_VAL(idx_vano,"FrontaleY") > 0 )
         {
            Y = @FrontaleY
            base_0.y = $vano_0.y + @FrontaleOffY
         }
      }

      if( TipoVano == "RIPIANI" )
      {
         offy = -@Vano_OffY_Inf + $Cuc_Aria_Ant_Y
         dimy = @Y - 2*$Cuc_Aria_Ant_Y

         //se ultimo vano
         if( NrVaniAtt == NrVaniTot )
         {
            dimy = @Y + $Cuc_Spe_Cop/2 - 2*$Cuc_Aria_Ant_Y
         }

         //se primo vano
         if( NrVaniAtt == 1 ) { offy = - $Cuc_Spe_Fnd + $Cuc_Aria_Ant_Y }

         Y = dimy
         base_0.y = $vano_0.y + offy

         if( VAR_VAL(idx_vano,"FrontaleY") > 0 )
         {
            Y = @FrontaleY
            base_0.y = $vano_0.y + @FrontaleOffY
         }
      }
   }
   //} procedure colonna falegnameria

   PROCEDURA Ctrl_Cuc_StaffaFrigo
   {
      if( IS_IDX(Staffa_Idx) != 1 ) { EXITSUB() }

      Staffa_Stop_Idx_prec   = Staffa_Stop_Idx
      Staffa_Tipo_prec       = Staffa_Tipo
      Staffa_OX_prec         = Staffa_OX

      //Di default staffa U
      Staffa_Tipo = 0
      Staffa_OX   = 2

      wk_stop = -1
      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_stop", Staffa_Idx, 1, "SottoTop_generico")

      if( wk_stop < 1 )
      {
         //UsoSottoTop
         WITH_VAR( "wk_uso_stop", "UsoSottoTop", 0, 1, "1")
         NEAR_GLOBALE2( "wk_near", Staffa_Idx, 1, "*")

         wk_i = 1
         while( wk_i <= wk_uso_stop )
         {
            wk_j = 1
            while( wk_j <= wk_near )
            {
               if( wk_uso_stop[wk_i] == wk_near[wk_j] )
               {
                  wk_stop = wk_stop + 1
                  VAR_VALUE_SET( ATTUALE(), STRCAT("wk_stop_##", STR(wk_stop)), wk_near[wk_j])
                  //Esco se trovo corrispondenza
                  wk_j = wk_near
               }

               wk_j = wk_j + 1
            }

            wk_i = wk_i + 1
         }
      }

      if( wk_stop < 1 ) { EXITSUB() }

      //BASE
      //Definisco punti di riferimento per la base
      wk_base_fronte_pnt_sx = [alto_1.x, 0, alto_1.z]
      wk_base_fronte_pnt_dx = [alto_2.x, 0, alto_2.z]

      wk_pnt_base = wk_base_fronte_pnt_sx
      if( Staffa_Verso > 0 )
      {
         wk_pnt_base = wk_base_fronte_pnt_dx
      }

      //SOTTOTOP
      //Ordino i top, prima il più vicino al punto di riferimento della base
      if( Staffa_Verso > 0 ) { SORT_POINT(wk_pnt_base,"wk_stop","pnt_dx_fro") }
      else                   { SORT_POINT(wk_pnt_base,"wk_stop","pnt_sx_fro") }
      Staffa_Stop_Idx = wk_stop[1]

      SET_#(Staffa_Stop_Idx)

      //Definisco punti di riferimento per il sottotop, porto altezza a 0
      if( VAR_VAL( Staffa_Stop_Idx, "UsoSottoTop") == 0 )
      {
         if( VAR_EXIST( Staffa_Stop_Idx, "pnt_sx_fro") == 0
           | VAR_EXIST( Staffa_Stop_Idx, "pnt_dx_fro") == 0 ) { EXITSUB() }


         wk_stop_fronte_pnt_sx = [#pnt_sx_fro.x, 0, #pnt_sx_fro.z]
         wk_stop_fronte_pnt_dx = [#pnt_dx_fro.x, 0, #pnt_dx_fro.z]
      }
      else
      {
         wk_stop_fronte_pnt_sx = [#base_1.x, 0, #base_1.z]
         wk_stop_fronte_pnt_dx = [#base_2.x, 0, #base_2.z]
      }

      wk_pnt_stop = wk_stop_fronte_pnt_sx
      if( Staffa_Verso > 0 )
      {
         wk_pnt_stop = wk_stop_fronte_pnt_dx
      }

      //INTERSEZIONE
      //Punto di intersezione tra la retta passante per il punto riferimento della base e il segmento del fronte sottotop
      wk_pnt_int = INTERFERISCI(wk_pnt_base, ANG_TOT2(ATTUALE())-90, wk_stop_fronte_pnt_sx, wk_stop_fronte_pnt_dx)

      wk_dist_int = $ERR_INTERFERISCI
      if( wk_pnt_int.x != $ERR_INTERFERISCI
        & wk_pnt_int.y != $ERR_INTERFERISCI
        & wk_pnt_int.z != $ERR_INTERFERISCI )
      {
         wk_dist_int = DISTANZA( wk_pnt_int, wk_pnt_stop)
      }
      else
      {
         //Se il punto di intersezione non esiste, il sottotop rientra rispetto alla base
         //Calcolo quindi l'intersezione tra la retta passante per il punto riferimento del sottotop e il frontale della base
         wk_pnt_int = INTERFERISCI(wk_pnt_stop, ANG_TOT2(Staffa_Stop_Idx)-90, wk_base_fronte_pnt_sx, wk_base_fronte_pnt_dx)

         if( wk_pnt_int.x != $ERR_INTERFERISCI
           & wk_pnt_int.y != $ERR_INTERFERISCI
           & wk_pnt_int.z != $ERR_INTERFERISCI )
         {
            wk_dist_int = -DISTANZA( wk_pnt_base, wk_pnt_int)
         }
         else
         {
            wk_dist_int = -DISTANZA( wk_pnt_base, wk_pnt_stop)
         }
      }

      if( wk_dist_int >= -52 & wk_dist_int <= Staffa_OX_max )
      {
         Staffa_Tipo = 1
         Staffa_OX   = wk_dist_int
      }

      //Rigenero scasso al cambiamento
      if( Staffa_Tipo          != Staffa_Tipo_prec
        | Staffa_OX            != Staffa_OX_prec
        | Staffa_Stop_Idx_prec != Staffa_Stop_Idx
        | VAR_VAL( ATTUALE(), "Staffa_Verso_prec") != Staffa_Verso ) { VAR_VALUE_SET( Staffa_Idx, "RigeneraScasso", 1) }

      Staffa_Verso_prec = Staffa_Verso
   }

   PROCEDURA Gest_Cuc_StaffaFrigo
   {
      if( IS_IDX(Staffa_Stop_Idx) != 1 ) { EXITSUB() }

      GEST_IDXPADRE = PADRE( ATTUALE(), 1 )

      wk_ok = 1
      wk_idx_gest_padre = Staffa_Stop_Idx
      while( wk_ok )
      {
         if( VAR_VAL_STR( wk_idx_gest_padre, "ORD_COD") != "" )
         {
            GEST_IDXPADRE = wk_idx_gest_padre
         }

         wk_idx_gest_padre_pre = wk_idx_gest_padre
         wk_idx_gest_padre = PADRE(wk_idx_gest_padre, 1)
         if( wk_idx_gest_padre_pre == wk_idx_gest_padre ) { wk_ok = 0 }
      }
   }

   //{ Portaposate
   PROCEDURA SistCostr_Portaposate
   {
      //Vani
      //Stringa che identifica i vani determinati dai divisori del portaposate
      //Quelli contrassegnati da * sono attrezzabili, il tipo di accessorio dipende dalla larghezza del vano
      Vani_N = 0
      Vani_X_array_str = ""

      if( X >=  288 ) { Vani_N = 3   Vani_X_array_str = "90|90*" }
      if( X >=  472 ) { Vani_N = 4   Vani_X_array_str = "90|90*|90" }
      if( X >=  656 ) { Vani_N = 6   Vani_X_array_str = "90|90|90*|140*|90*" }
      if( X >=  840 ) { Vani_N = 7   Vani_X_array_str = "140*|90*|90|90*|200*|90*" }
      if( X >= 1024 ) { Vani_N = 8   Vani_X_array_str = "140*|90*|90|90*|200*|90|90*" }

      // la suddivisione indicata nel nuovo listino discorda dalla dimensioni degli accessori
      // tengo la dimensioni dei vani attrezzabili allineata alle cucine 2.0
      if( Cucina_Versione > 2 )
      {
         if( X >=  216 ) { Vani_N = 3   Vani_X_array_str = "93|90*" }
         if( X >=  368 ) { Vani_N = 3   Vani_X_array_str = "93|90*" }
         if( X >=  518 ) { Vani_N = 5   Vani_X_array_str = "90|90*|90|90*" }
         if( X >=  718 ) { Vani_N = 6   Vani_X_array_str = "85|90*|200*|90*|95" }
         if( X >=  818 ) { Vani_N = 7   Vani_X_array_str = "90|90*|200*|100|90*|140*" }
         if( X >= 1027 ) { Vani_N = 8   Vani_X_array_str = "90*|200*|90*|95|140*|95|90*" }
         if( X >= 1118 ) { Vani_N = 9   Vani_X_array_str = "99|90*|200*|90*|95|140*|95|90*" }
      }
   }

   PROCEDURA Decodifica_Portaposate
   {
      //Parametri vani portaposare
      Vano_acc_char = "*"

      STR_SPLIT( Vani_X_array_str , "|" , 1 , "Vani_X_array" , ATTUALE() )

      wk_vano_att = -1
      wk_vani_x_curr = 0
      wk_i = 1
      while( wk_i <= Vani_N )
      {
         wk_substr     = VAR_VAL_STR(ATTUALE(), STRCAT("Vani_X_array_##", STR(wk_i)))
         wk_substr_len = STRLEN(wk_substr)

         wk_vani_x_att = wk_vani_x_curr + X_Divisorio * (wk_i - 1)

         wk_att = 0
         if( wk_substr != "" )
         {
            wk_att        = STR_INDEX_OF( wk_substr, 0, Vano_acc_char)
            wk_vano_x_att = STRMID( 0, wk_att, wk_substr)
            wk_vano_x_att = ATOI(wk_vano_x_att)

            wk_vano_t_att = "U"
            if( wk_vano_x_att >= 140 ) { wk_vano_t_att = "B" }
            if( wk_vano_x_att >= 200 ) { wk_vano_t_att = "A" }
         }
         else
         {
            wk_vano_x_att = X - wk_vani_x_att
         }

         //Vani del portaposate ( per posizionamento divisori)
         VAR_VALUE_SET(idx_att, STRCAT("Vano_l_", STR(wk_i)), wk_vano_x_att)
         VAR_VALUE_SET(idx_att, STRCAT("Vano_0_", STR(wk_i)), wk_vani_x_att)

         //vani per attrezzaggio
         VAR_CREATE_XYZ(idx_att, STRCAT("vano_0_", STR(wk_i)), wk_vani_x_att, Y_Fondo + Y_Tapetino, 0, 0, "")
         VAR_CREATE_NUM(idx_att, STRCAT("vano_l_", STR(wk_i)), wk_vano_x_att, 0, "")
         VAR_CREATE_NUM(idx_att, STRCAT("vano_p_", STR(wk_i)), Z, 0, "")
         if( wk_att > 0 ) { VAR_CREATE_STR(idx_att, STRCAT("vano_t_", STR(wk_i)), wk_vano_t_att, 0, "") }

         //Abilito sempre il vano, lo filtro in seguito, l'accessorio ad U deve sempre essere attrezzabile in costruzione composti
         if( wk_att > 0 )
         {
            wk_vano_att = wk_vano_att + 1

            VAR_CREATE_XYZ(idx_att, STRCAT("vano_0_", STR(wk_vano_att)), wk_vani_x_att, Y_Fondo + Y_Tapetino, 0, 0, "")
            VAR_CREATE_NUM(idx_att, STRCAT("vano_l_", STR(wk_vano_att)), wk_vano_x_att, 0, "")
            VAR_CREATE_NUM(idx_att, STRCAT("vano_p_", STR(wk_vano_att)), Z, 0, "")
            VAR_CREATE_STR(idx_att, STRCAT("vano_t_", STR(wk_vano_att)), wk_vano_t_att, 0, "")
         }

         wk_vani_x_curr = wk_vani_x_curr + wk_vano_x_att
         wk_i = wk_i + 1
      }
   }

   PROCEDURA Set_Dim_Portaposate
   {
      if( IsIdx( ATTUALE(), "idx_ref") == 0 ) { idx_ref = idx_pdr }
      Cucina_Versione_Idx = idx_ref
      GOSUB Cucina_Versione

      X_vano_diff = 77
      Z_vano_diff = 48

      if( NOME(idx_ref) == "Cuc_CassettoInterno")
      {
         X_vano_diff = 27
         Z_vano_diff = 27
      }

      if( Cucina_Versione > 2)
      {
         X_vano_diff = X_vano_diff + 2
         Z_vano_diff = Z_vano_diff + SE_NUM( NOME(idx_ref) == "Cuc_CassettoInterno", 1, 2)
      }

      if( FLAG_CompostoGEN == 1)
      {
         wk_vano = VAR_VAL( ATTUALE(), "vano_n")
         if( VAR_VAL_STR( ATTUALE(), "wk_proc") == "OnQueryBdmLocal" ) { wk_vano = $query_p2 }

         X = VAR_VAL( idx_ref, STRCAT( "vano_l_", STR(wk_vano))) - X_vano_diff
         Z = VAR_VAL( idx_ref, STRCAT( "vano_p_", STR(wk_vano))) - Z_vano_diff
      }
   }

   PROCEDURA Ctrl_Dim_Portaposate
   {
      //Larghezza
      wk_X_arraystr = "288;472;656;840;1024"
      if( Cucina_Versione > 2) { wk_X_arraystr = "218;368;518;668;818;968;1118" }

      wk_X_ok = Is_In_StrArray( STR(X), wk_X_arraystr, ";")
      if( wk_X_ok != 1
        & X_rid_max != 0) { wk_X_ok = Is_In_StrArray( STR(X - X_rid_max), wk_X_arraystr, ";") }

      //Profondità
      //Non permesso su p.406
      wk_Z_arraystr = "373;473;523"
      if( Cucina_Versione > 2) { wk_Z_arraystr = "372;472;522" }

      wk_Z_ok = Is_In_StrArray( STR(Z), wk_Z_arraystr, ";")
      if( wk_Z_ok != 1
        & Z_rid_max != 0) { wk_Z_ok = Is_In_StrArray( STR(Z - Z_rid_max), wk_Z_arraystr, ";") }

      //COMANDO2( FMT( "LOGMSG Ctrl_Dim_Portaposate Cucina_Versione = {} | X = {} - wk_X_ok = {} | Z = {} - wk_Z_ok = {}", Cucina_Versione, X, wk_X_ok, Z, wk_Z_ok))
   }

   PROCEDURA Posiziona_PortaPosate_Divisorio
   {
      @escluso = SE_NUM( Vani_N > wk_div_num, 0, 1 )

      GOSUB posa_blocco
      @X = X_Divisorio
      @Y = Y_Divisorio

      @base_0.x = base_0.x + VAR_VAL( idx_att, STRCAT( "Vano_0_", STR(wk_div_num + 1)) ) - X_Divisorio
      @base_0.y = base_0.y + Y_Fondo

      FIN_var = "C028"
      FIN_orie = "V"
      FIN_idx_gest = PADRE( ATTUALE(), 2)
      GOSUB rivestimento
   }

   PROCEDURA Posiziona_PortaPosate_Tappetino
   {
      @escluso = SE_NUM( Vani_N >= wk_tpt_num, 0, 1 )

      GOSUB posa_blocco
      @X = VAR_VAL( idx_att, STRCAT( "Vano_l_", STR(wk_tpt_num )) )
      @Y = Y_Tapetino

      @base_0.x = base_0.x + VAR_VAL( idx_att, STRCAT( "Vano_0_", STR(wk_tpt_num )) )
      @base_0.y = base_0.y + Y_Fondo

      @c_rivestimento = $c_grafite
   }

   PROCEDURA Posiziona_PortaPosate_PortaColtelli
   {
      @escluso = SE_NUM( Elm_N >= wk_elm_num, 0, 1 )

      GOSUB posa_blocco

      @X = Elm_X

      @base_0.x = base_0.x + Elm_X * (wk_elm_num - 1) + Elm_OffX * (wk_elm_num - 1)

      GOSUB rivestimento
   }

   PROCEDURA Posiziona_PortaPosate_PortaSpezie
   {
      @escluso = SE_NUM( Cil_Tot >= wk_cil_num, 0, 1 )

      wk_pos_z = CEIL( wk_cil_num / Cil_Col )
      wk_pos_x = FLOOR( wk_cil_num / wk_pos_z )

      GOSUB posa_blocco

      @X = Cil_X
      @Y = Cil_Y
      @Z = Cil_X

      @base_0.x = base_0.x + Cil_OffX * wk_pos_x + @X * (wk_pos_x - 1)
      @base_0.z = base_0.z + ((Z/3) * wk_pos_z) - 5

      @ang_x = Cil_A

      @c_rivestimento = $c_alluminio
   }

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

      //C008 - Lavorazioni
      CAT_VM_var     = "C008"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)

      if( VAR_EXIST( ATTUALE(), CAT_VM_gestvar) == 0 )   { EXITSUB() }

      idx_att = ATTUALE()
      idx_pdr = PADRE( idx_att, 1 )
      if( idx_att == idx_pdr )                           { EXITSUB() }

      //PF004 - Lavorazione maniglia Flapp
      CAT_VM_opz = "PF004"
      CAT_VM_sel = ""

      if( VAR_VAL_STR( idx_pdr, "GEST_C004") == "MA001")
      {
         AddVal_CAT_VM_sel( CAT_VM_sel, "PF004")
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Ass_Acc_Portaposate
   {
      Xr = X - 1
   }

   PROCEDURA OnQueryBdmLocal_Acc_Portaposate
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 0

         if( NOME($query_p1) == "Cuc_Portaposate" )
         {
            //Attrezzabile solo se c'è spazio per l'accessorio
            vano_l_ref = VAR_VAL( $query_p1, STRCAT( "vano_l_", STR($query_p2)))
            vano_p_ref = VAR_VAL( $query_p1, STRCAT( "vano_p_", STR($query_p2)))
            vano_t_ref = VAR_VAL_STR( $query_p1, STRCAT( "vano_t_", STR($query_p2)))

            if( vano_l_ref >= X
              & vano_p_ref >= Z )
            {
               //Solo vani predisposti all'attrezzaggio
               if( vano_t_ref != "" )
               {
                  //Analizzo eventuali accessori già presenti
                  COMPONENTI2("wk_acc", $query_p1, "Cuc_Portaposate_Acc*")

                  wk_z = vano_p_ref
                  wk_i = 1
                  while( wk_i <= wk_acc )
                  {
                     wk_acc_att = wk_acc[wk_i]

                     if( VAR_EXIST( wk_acc_att, "vano_n")
                       & VAR_VAL( wk_acc_att, "vano_n") == $query_p2 ) { wk_z = wk_z - VAR_VAL( wk_acc_att, "Z") }

                     wk_i = wk_i + 1
                  }

                  if( wk_z >= Z ) { $QueryResult__ = 1 }
               }

               if( $ATTIVA_DLL==0 ) { $QueryResult__ = 1 }
            }

            //Accessori con doppia dimensione
            //if( vano_t_ref == "A"
            //  & ( NOME(ATTUALE()) == "Cuc_Portaposate_Acc_PC"
            //    | NOME(ATTUALE()) == "Cuc_Portaposate_Acc_PS" )) { $QueryResult__ = 1 }
         }
         //Escludo dalla visualizzazione i frontali e le maniglie flapp, così da agevolare l'attrezzaggio nel portaposate
         else
         {
            COMPONENTI2( "wk_pps", $query_p1, "Cuc_Portaposate")
            if( wk_pps > 0 )
            {
               COMPONENTI2( "wk_fro", $query_p1, "FroStandard")
               COMPONENTI2( "wk_man", $query_p1, "ManigliaFLAPP")
               if( wk_fro > 0 )
               {
                  wk_i = 1
                  while( wk_i <= wk_fro )
                  {
                     COMANDO2(STRCAT("SHOW STRUTTURE IDX DEL ", STR(wk_fro[wk_i])))
                     wk_i = wk_i + 1
                  }

                  wk_i = 1
                  while( wk_i <= wk_man )
                  {
                     COMANDO2(STRCAT("SHOW STRUTTURE IDX DEL ",STR(wk_man[wk_i])))
                     wk_i = wk_i + 1
                  }
               }
            }
         }
      }
   }

   PROCEDURA OnSetupLivelli_Acc_Portaposate
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      liv2add       = 1
      liv2addscr    = 1
      liv2add[1]    = 0
      liv2addscr[1] = 0

      annulla_ins = 0

      vano_ref_x = VAR_VAL( idx_ref, STRCAT("vano_l_",STR(vano_ref)))
      vano_ref_z = VAR_VAL( idx_ref, STRCAT("vano_p_",STR(vano_ref)))
      COMANDO2( STRCAT( "LOGMSG OnSetupLivelli_Acc_Portaposate -- idx_ref=", STR(idx_ref), " - vano_ref=", STR(vano_ref), " - vano_ref_x=", STR(vano_ref_x), " - X=", STR(X)))

      //Analizzo eventuali accessori già presenti
      COMPONENTI2("wk_acc", idx_ref, "Cuc_Portaposate_Acc*")

      wk_z = vano_ref_z
      wk_i = 1
      while( wk_i <= wk_acc )
      {
         wk_acc_att = wk_acc[wk_i]

         if( wk_acc_att < ATTUALE()
           & VAR_EXIST( wk_acc_att, "vano_n")
           & VAR_VAL( wk_acc_att, "vano_n") == vano_ref ) { wk_z = wk_z - VAR_VAL( wk_acc_att, "Z") }

         wk_i = wk_i + 1
      }

      if( wk_z < Z ) { annulla_ins = 1 }
      COMANDO2( STRCAT( "LOGMSG OnSetupLivelli_Acc_Portaposate -- annulla_ins=", STR(annulla_ins), " - idx_ref=", STR(idx_ref), " - vano_ref=", STR(vano_ref), " - vano_ref_z=", STR(vano_ref_z), " - wk_z=", STR(wk_z) , " - Z=", STR(Z)))

      GOSUB livelli_add2
   }

   PROCEDURA PostGestDllValida_Acc_Portaposate
   {
      if( $OnLoadOrder2==1 | $OnRigenera==1 )     { EXITSUB() }
      if( ACTION()<=0 | ACTION()==2 )             { EXITSUB() }
      if( $CNP==1 )                               { EXITSUB() }

      COMANDO2(STRCAT("SHOW STRUTTURE IDX ADD ", STR( PADRE( ATTUALE(), 2))))
   }

   PROCEDURA Attrezza_Acc_Portaposate
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      base_0 = $vano_0

      X = $larghezza

      //Analizzo eventuali accessori già presenti
      COMPONENTI2("wk_acc", idx_ref, "Cuc_Portaposate_Acc*")

      wk_zoff = 0
      wk_i = 1
      while( wk_i <= wk_acc )
      {
         wk_acc_att = wk_acc[wk_i]

         if( wk_acc_att < ATTUALE()
           & VAR_EXIST( wk_acc_att, "vano_n")
           & VAR_VAL( wk_acc_att, "vano_n") == vano_n ) { wk_zoff = wk_zoff + VAR_VAL( wk_acc_att, "Z") }

         wk_i = wk_i + 1
      }

      base_0.z = $vano_0.z + wk_zoff
   }

   PROCEDURA Gest_Acc_Portaposate
   {
      GEST_X = Xr
   }
   //} Portaposate

   //LZ 02/08/2021: cucine laccate
   PROCEDURA Set_MaterialeFrontale_Ante
   {
      wk_fin_gest = "GEST_C001"
      if( VAR_EXIST( ATTUALE(), wk_fin_gest) == 0 )
      {
         wk_fin_gest = STRCAT( "GEST_", VAR_VAL_STR( ATTUALE(), "FIN_var") )
         if( VAR_EXIST( ATTUALE(), wk_fin_gest) == 0 ) { EXITSUB() }
      }

      //MaterialeFrontale_prec = VAR_VAL_STR( ATTUALE(), "MaterialeFrontale")
      MaterialeFrontale = "VETRO"
      VAR_Melaminico = 0

      wk_fin_val = VAR_VAL_STR( ATTUALE(), wk_fin_gest)
      if( wk_fin_val != "" & wk_fin_val != "__" )
      {
         wk_no_sig = STRDADB(ATTUALE(),"DAMMI_NONSIGNIF",STRCAT( wk_fin_gest, ";", wk_fin_val))

         if( wk_no_sig == "LA000"
           | wk_no_sig == "FX000"  )  { MaterialeFrontale = "LAMINATO"                      }
         if( wk_no_sig == "WW000"  )  { MaterialeFrontale = "WILDWOOD"                      }
         if( wk_no_sig == "LB000"  )  { MaterialeFrontale = "NOBILITATO" VAR_Melaminico = 1 }
         if( wk_no_sig == "LC000"  )  { MaterialeFrontale = "MELAMINICO" VAR_Melaminico = 1 }

         //LZ 14/09/2021: devo gestire una revisione, le ante dei pensili esistevano già in laccato
         //La revisione si attiva con $BDM_REV_Cuc_Fro_Mel=1 per singolo ordine, oppure in base alla data impostata in $BDM_REV_Cuc_Fro_Mel_1
         SetRevisioneElemento( GetTopLevel( ATTUALE()), "BDM_REV_Cuc_Fro_Mel", "VAR_Revisione_FroMel")

         if( VAR_VAL( -1, "BDM_REV_Cuc_Fro_Mel") == 0
           & VAR_VAL( GetTopLevel( ATTUALE()), "VAR_Revisione_FroMel") == 0 ) { VAR_Melaminico = 0 }

         //if( MaterialeFrontale != MaterialeFrontale_prec ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Ricalcola Set_MaterialeFrontale_Ante")) }
      }
   }

   PROCEDURA Set_REV_Cuc_Fro_Mel
   {
      if( VAR_VAL( -1, "BDM_REV_Cuc_Fro_Mel") == 0 )
      {
         COMANDO("VAR_SET$ $BDM_REV_Cuc_Fro_Mel=1")
         DISPLAY2("Revisione cucine melaminiche - ATTIVATA")
      }
      else
      {
         COMANDO("VAR_SET$ $BDM_REV_Cuc_Fro_Mel=0")
         DISPLAY2("Revisione cucine melaminiche - DISATTIVATA")
      }
   }

   PROCEDURA TrovaIdx_DaScassare_Anta
   {
      Scassa_Chi_Plus = ""

      if( ACTION() <= 0 | ACTION() == 2 | COMPONENDO()==1 | $OnLoadOrder2==1 ) { EXITSUB() }
      if( escluso != 0 )                                                       { EXITSUB() }

      wk_idx_near = ATTUALE()
      if( VAR_EXIST(ATTUALE(),"idx_cnear") )
      {
         if( IS_IDX(idx_cnear) )  { wk_idx_near = idx_cnear }
      }

      BOX_MODE(0)
      NEAR_GLOBALE( "wk_bl", wk_idx_near, 1, 1, "*")

      i = 1
      while ( i<=wk_bl )
      {
         wk_bl_att = wk_bl[i]
         if( FORMA(wk_bl_att) != $FORMA_CONTENITORE )
         {
            if( UN_PADRE2(wk_bl_att, "Fro*") )
            {
               Scassa_Chi_Plus = STRCAT( Scassa_Chi_Plus, STR(wk_bl_att), ";")
            }
         }

         i = i + 1
      }
   }

   //Luca 15/11/2021 procedure per la gestione delle grafica degli eldom
   PROCEDURA ELD_GestisciGrafica
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"ELD_GraficaGen") == 0 )       { EXITSUB() }

      ELD_Tipo = ""
      if( VAR_EXIST(ATTUALE(),"ELD_TIPO_ELDOM")  )  { ELD_Tipo = ELD_TIPO_ELDOM }

      if( ELD_Tipo == "" ) { EXITSUB() }

      ELD_GraficaGen_M4S1 = ""
      ELD_GraficaGen_M4S2 = ""

      //Apro DB
      $wk_DbLago = STRCAT($path_tab,$LagoSqlite)
      if( SQLiteApriDb($wk_DbLago,1)==0 )
      {
         COMANDO2(STRCAT("LOGMSG DB SQLITE NON APERTO"))
         EXITSUB()
      }

      //verifico se già creato
      nome_menu = STRCAT("ELD_Mn",UPPER(ELD_Tipo))
      nome_var = STRCAT("ELD_Mn",UPPER(ELD_Tipo))
      GOSUB ELD_CreaMenu

      if( VAR_VAL(-1,nome_var) == 1 )
      {
         //la variabili da dichiarare negli archetipi è ELD_GraficaGen
         VAR_SET_MODE(ATTUALE(),"ELD_GraficaGen",$MODE_MISURE)
         VAR_SET_MENU(ATTUALE(),"ELD_GraficaGen",nome_menu)
      }

      //Luca 23/11/2021
      if( VAR_VAL(ATTUALE(),"ELD_GraficaGen") != 0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Vedi_Grafica3D")  )  { DEL_VAR_MODIFICATE(ATTUALE(),"Vedi_Grafica3D") }
         Vedi_Grafica3D = 0
      }

      GOSUB ELD_LeggiDati

      SQLITE_CLOSE($wk_DbLago)
   }

   PROCEDURA ELD_CreaMenu
   {
      if( VAR_VAL(-1,nome_var) == 1 ) { EXITSUB() }

      $wk_query_in = STRCAT("select * from ELDOM where Enable=1 and TipoEldom=",APICI(), ELD_Tipo  ,APICI())
      $wk_query = SQLITE_QUERY($wk_DbLago, $wk_query_in)

      if( $wk_query == 0 ) { EXITSUB() }

      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," clear"))
      wk_val_img = STRCAT("%path_bdm%\Bmp\vuoto.bmp")
      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," add 0 ",APICI(),"NO GRAFICA",APICI()," ",wk_val_img ))

      // ciclo finchè ci sono valori
      while( SQLITE_NEXT($wk_DbLago, $wk_query) == 1 )
      {
         // chiave sempre come primo campo
         $wk_val_key   = SQLITE_FIELD($wk_DbLago, $wk_query, 0)
         $wk_where     = STRCAT("IDEldom = ",APICI(),$wk_val_key,APICI())
         $wk_val_id    = SQLiteLeggiCampo($wk_DbLago, "ELDOM", "IDEldom", $wk_where)
         $wk_val_desc  = SQLiteLeggiCampo($wk_DbLago, "ELDOM", "Desc"   , $wk_where)
         $wk_val_img   = SQLiteLeggiCampo($wk_DbLago, "ELDOM", "MnImage", $wk_where)

         wk_val_id = ATOI(RIGHT($wk_val_id,3))
         wk_val_img = STRCAT("%path_bdm%\Bmp\Menu\Eldom\",$wk_val_img)

         COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," add ",STR(wk_val_id)," ",APICI(),$wk_val_desc,APICI(), " " ,wk_val_img ))
      }

      VAR_VALUE_SET(-1,nome_var,1)
   }

   PROCEDURA ELD_LeggiDati
   {
      if( ELD_GraficaGen == 0 ) { EXITSUB() }

      wk_ELD_GraficaGen = STR(ELD_GraficaGen)

      while( STRLEN(wk_ELD_GraficaGen) < 3 ) { wk_ELD_GraficaGen = STRCAT("0",wk_ELD_GraficaGen) }

      //ricostruisco la chiave
      wk_key = STRCAT(ELD_Tipo,wk_ELD_GraficaGen)

      //leggo M4S
      $wk_query_in = STRCAT("select FileM4S_1 from ELDOM where IDEldom=",APICI(), wk_key  ,APICI())
      $wk_query = SQLITE_QUERY($wk_DbLago, $wk_query_in)

      if( $wk_query != 0 )
      {
         $wk_where = STRCAT("IDEldom=",APICI(), wk_key  ,APICI())
         wk_FileM4S1 = SQLiteLeggiCampo($wk_DbLago, "ELDOM", "FileM4S_1", $wk_where)

         wk_M4S_X    = ATOI(SQLiteLeggiCampo($wk_DbLago, "ELDOM", "X_M4S_1", $wk_where))
         wk_M4S_Y    = ATOI(SQLiteLeggiCampo($wk_DbLago, "ELDOM", "Y_M4S_1"  ,$wk_where))
         wk_M4S_Z    = ATOI(SQLiteLeggiCampo($wk_DbLago, "ELDOM", "Z_M4S_1", $wk_where))

         ELD_GraficaGen_M4S1 = STRCAT($path_m4s,"Eldom\",wk_FileM4S1)

         if( wk_M4S_X != 0 )  { M4S_X = wk_M4S_X }
         if( wk_M4S_Y != 0 )  { M4S_Y = wk_M4S_Y }
         if( wk_M4S_Z != 0 )  { M4S_Z = wk_M4S_Z }
      }

      M4S_Scala = [ X / M4S_X, 1 , Z / M4S_Z]
   }

   //Simone 21/10/2022
   PROCEDURA Ctrl_Sbordo_Top_Steel29
   {
      $wk_CG_Nome    = "Ctrl_Sbordo_Top_Steel29"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Il top steel da 29mm non può avere uno sbordo diverso da 0, 7 o minore di 21"

      WITH_ALIAS("$wk_top", "BDM_Top")
      if( $wk_top == 0 ) { EXITSUB() }

      $wk_top_steel_29 = 0

      $wk_i = 1
      while( $wk_i <= $wk_top )
      {
         $wk_idx_top = $wk_top[$wk_i]
         if( VAR_VAL_STR($wk_idx_top,"VAR_TipoTopStr") == "ACCIAIO_10" )
         {
            AddItem2Array(-1,"wk_top_steel_29",$wk_idx_top,"")
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_top_steel_29 == 0 ) { EXITSUB() }

      $wk_j = 1
      while( $wk_j <= $wk_top_steel_29 )
      {
         $wk_idx_top_steel = $wk_top_steel_29[$wk_j]

         SET_#($wk_idx_top_steel)
         $wk_Sbrd_T_DX   = #Sbrd_DX
         $wk_Sbrd_T_SX   = #Sbrd_SX
         $wk_Sbrd_ST_DX  = #Sbrd_ST_DX
         $wk_Sbrd_ST_SX  = #Sbrd_ST_SX

         $wk_Sbrd_DX = ABS($wk_Sbrd_T_DX - $wk_Sbrd_ST_DX)
         $wk_Sbrd_SX = ABS($wk_Sbrd_T_SX - $wk_Sbrd_ST_SX)

         $wk_check_dx = 0
         $wk_check_sx = 0

         if( $wk_Sbrd_DX != 0
           & $wk_Sbrd_DX != 7
           & $wk_Sbrd_DX < 21 ) { $wk_check_dx = 1 }

         if( $wk_Sbrd_SX != 0
           & $wk_Sbrd_SX != 7
           & $wk_Sbrd_SX < 21 ) { $wk_check_sx = 1 }

         if( $wk_check_dx + $wk_check_sx > 0 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_top_steel,"") }

         $wk_j = $wk_j + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_Cuc_Fianchi_Stesura
   {
      $wk_CG_Nome    = "Ctrl_Cuc_Fianchi_Stesura"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "NO_BLOCCO"
      $wk_CG_Msg     = "Controllare stesura fianco di finitura, probabilmente errata."

      WITH_ALIAS("$wk_ff", "FiancoFin")

      if( $wk_ff == 0 ) { EXITSUB() }

      $wk_ff_num = 1
      while( $wk_ff_num <= $wk_ff )
      {
         $wk_ff_idx   = $wk_ff[$wk_ff_num]
         $wk_ff_rev   = VAR_VAL( $wk_ff_idx, "REV")
         $wk_ff_nome  = NOME($wk_ff_idx)

         if( $wk_ff_rev >= 2
           & $wk_ff_nome == "FiancoFinitura" )
         {
            $wk_ff_verso = VAR_VAL( $wk_ff_idx, "Verso")

            $wk_ff_pnt_test = "base_0;alto_1;base_1;alto_0;base_3;alto_2;base_2;alto_3"
            $wk_ff_var_test = "punto_ff_dx;punto_ff_sx"

            if( $wk_ff_verso < 0 )
            {
               $wk_ff_pnt_test = "base_3;alto_2;base_2;alto_3;base_0;alto_1;base_1;alto_0"
               $wk_ff_var_test = "punto_ff_sx;punto_ff_dx"
            }

            STR_SPLIT( $wk_ff_pnt_test, ";", 1, "wk_ff_pnt_tst" , -1 )
            STR_SPLIT( $wk_ff_var_test, ";", 1, "wk_ff_var_tst" , -1 )

            //Punti da testare
            $wk_ff_tst_lim = 3 - VAR_VAL( $wk_ff_idx, "FiancoColAppTop")
            //$wk_ff_tst_lim = 1 + #FF_ScoccaSx + #FF_ScoccaDx
            //if( $wk_ff_tst_lim < 2 ) { $wk_ff_tst_lim = 2 }

            $wk_ff_tst = 0
            $wk_ff_pnt_tst_num = 1
            while( $wk_ff_tst < $wk_ff_tst_lim
                 & $wk_ff_pnt_tst_num <= $wk_ff_pnt_tst )
            {
               $wk_ff_pnt_tst_var_att = $wk_ff_pnt_tst[$wk_ff_pnt_tst_num]

               $wk_ff_pnt_tst_val_att   = [ 0, 0, 0]
               $wk_ff_pnt_tst_val_att.x = VAR_VAL( $wk_ff_idx, STRCAT( $wk_ff_pnt_tst_var_att, ".x"))
               $wk_ff_pnt_tst_val_att.y = VAR_VAL( $wk_ff_idx, STRCAT( $wk_ff_pnt_tst_var_att, ".y"))
               $wk_ff_pnt_tst_val_att.z = VAR_VAL( $wk_ff_idx, STRCAT( $wk_ff_pnt_tst_var_att, ".z"))

               $wk_ff_idx_ref = -1

               $wk_ff_var_tst_num = 1
               while( IS_IDX($wk_ff_idx_ref) == 0
                    & $wk_ff_var_tst_num <= $wk_ff_var_tst )
               {
                  $wk_ff_var_tst_att = $wk_ff_var_tst[$wk_ff_var_tst_num]

                  $wk_ff_idx_ref = GetIdxWithPoint( -1, STRCAT( $wk_ff_var_tst_att, "f_"), STRCAT( $wk_ff_var_tst_att, "r_"), $wk_ff_pnt_tst_val_att)
                  if( IS_IDX($wk_ff_idx_ref) ) { $wk_ff_tst = $wk_ff_tst + 1 }

                  $wk_ff_var_tst_num = $wk_ff_var_tst_num + 1

                  //COMANDO2( STRCAT( "LOGMSG  > ", $wk_CG_Nome, " : ", " - $wk_ff_idx: ", STR($wk_ff_idx), ",",
                  //                                             " - $wk_ff_verso: ", STR($wk_ff_verso), ",",
                  //                                             " - $wk_ff_pnt_tst_var_att: ", $wk_ff_pnt_tst_var_att, ",",
                  //                                             " - $wk_ff_pnt_tst_val_att: ", Point2String($wk_ff_pnt_tst_val_att), ",",
                  //                                             " - $wk_ff_var_tst_att: ", $wk_ff_var_tst_att, ",",
                  //                                             " - $wk_ff_idx_ref: ", STR($wk_ff_idx_ref), ",",
                  //                                             " - $wk_ff_tst: ", STR($wk_ff_tst)))
               }

               $wk_ff_pnt_tst_num = $wk_ff_pnt_tst_num + 1
            }

            if( $wk_ff_tst < $wk_ff_tst_lim ) { AddItem2Array( -1, "wk_CG_Items", $wk_ff_idx, "") }
         }

         $wk_ff_num = $wk_ff_num + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_Cuc_Eldom_Collisione
   {
      WITH_ALIAS( "$wk_eldom", "Eldom_Collision_Check")

      if( $wk_eldom <= 0 ) { EXITSUB() }

      $wk_eldom_num = 1
      while( $wk_eldom_num <= $wk_eldom )
      {
         $wk_eldom_att      = $wk_eldom[$wk_eldom_num]

         $wk_eldom_near_att = $wk_eldom_att
         if( IsIdx( $wk_eldom_att, "coll_idx_cnear")) { $wk_eldom_near_att = VAR_VAL( $wk_eldom_att, "coll_idx_cnear") }

         $wk_eldom_coll_toll = VAR_VAL( $wk_eldom_att, "coll_toll")
         if( $wk_eldom_coll_toll <= 0)      { $wk_eldom_coll_toll = 10 }

         $wk_eldom_coll_elementi = VAR_VAL_STR( $wk_eldom_att, "coll_elementi")
         if( $wk_eldom_coll_elementi == "") { $wk_eldom_coll_elementi = "Cuc_StrIntCassCest;Cuc_CassettoInterno;Cuc_PortaRifiuti_Cestone;Cuc_PortaRifiuti_Generico;Cuc_PannelloDivisorio;Cuc_Sch;Cuc_Fianco;Cuc_Cat*;!Top_2P0;!_cont_per_near*" }

         $wk_CG_Nome    = "Ctrl_Cuc_Eldom_Collisione"
         $wk_CG_Blocca  = 0
         $wk_CG_Items   = 0
         $wk_CG_Tipo    = "BLOCCO"
         $wk_CG_Msg     = "Rilevata collisione tra l'eldom e gli elementi sottostanti"

         if( VAR_VAL( $wk_eldom_att, "FLAG_Speciale") > 0 ) { $wk_CG_Tipo = "NO_BLOCCO" }

         $wk_eldom_coll = 0
         BOX_MODE(0)
         NEAR_GLOBALE2( "$wk_eldom_coll", $wk_eldom_near_att, $wk_eldom_coll_toll, "*")

         //Identifico elementi in collisione
         $wk_eldom_coll_num = 1
         while( $wk_eldom_coll_num <= $wk_eldom_coll )
         {
            $wk_eldom_coll_att = $wk_eldom_coll[$wk_eldom_coll_num]

            if( $wk_eldom_coll_att == $wk_eldom_att
              | $wk_eldom_coll_att == $wk_eldom_near_att
              | Is_In_StrArray( NOME($wk_eldom_coll_att), $wk_eldom_coll_elementi, ";") != 1 )
            {
               DEL_ARRAY_ITEM( -1, "wk_eldom_coll", $wk_eldom_coll_num)
               $wk_eldom_coll_num = $wk_eldom_coll_num - 1
            }

            $wk_eldom_coll_num = $wk_eldom_coll_num + 1
         }

         //Testo collisione
         $wk_eldom_coll_trovata = 0
         $wk_eldom_coll_num = 1
         while( $wk_eldom_coll_trovata <= 0
              & $wk_eldom_coll_num <= $wk_eldom_coll )
         {
            $wk_eldom_coll_att = $wk_eldom_coll[$wk_eldom_coll_num]

            $wk_eldom_coll_trovata = CheckCollisione( $wk_eldom_near_att, $wk_eldom_coll_att, $wk_eldom_coll_toll)

            if( $wk_eldom_coll_trovata > 0 )
            {
               VAR_VALUE_SET( $wk_eldom_att, "wk_eldom_coll_trovata", $wk_eldom_coll_att) //Salvo nell'eldom per comodità nel debug
               AddItem2Array( -1, "wk_CG_Items", $wk_eldom_att, "")
            }

            $wk_eldom_coll_num = $wk_eldom_coll_num + 1
         }

         if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
         GOSUB CG_CFO_FineControllo

         $wk_eldom_num = $wk_eldom_num + 1
      }
   }

   //{ CUCINA - MODULI GLASS
   //Assegnazioni
   PROCEDURA Cuc_ModuloGlass_Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      idx_topl = GetTopLevel(ATTUALE())

      idx_sx = idx_sinistra
      idx_dx = idx_destra

      // Dimensioni
      Cuc_ModuloGlass_Pos_Fro_OffZ = $Cuc_ModuloGlass_Pos_Fro_OffZ
      Cuc_ModuloGlass_Pos_Rt_OffZ = $Cuc_ModuloGlass_Pos_Rt_OffZ

      if( Cucina_Versione > 2)
      {
         Cuc_ModuloGlass_Pos_Fro_OffZ = 2
         Cuc_ModuloGlass_Pos_Rt_OffZ = 27
      }

      Cuc_Alt_Zoc = 0
      if( VAR_Posizione == 0 ) { Cuc_Alt_Zoc = $Cuc_Alt_Zoc }

      GOSUB Cuc_ModuloGlass_Assegna_Ripiani

      //Debug giunzioni
      //G368_VediDebug = 3
   }

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

      if( IS_VAR_FIXED( ATTUALE(), "VAR_Ripiani") == 1 )      { EXITSUB() }

      VAR_Ripiani = 0
      if( Y >= 552 + $Cuc_ModuloGlass_Coperchio_Sp ) { VAR_Ripiani = 1 }
      if( Y >= 774 + $Cuc_ModuloGlass_Coperchio_Sp ) { VAR_Ripiani = 2 }
   }

   //Punti notevoli
   PROCEDURA Cuc_ModuloGlass_PuntiNotevoli
   {
      //Dimensioni
      Yt = Y
      if( VAR_Posizione == 0 ) { Yt = Y + $Cuc_ModuloGlass_Piedini_Sp }

      //Punti
      GOSUB punti_Yt

      //Snap nei confronti delle basi cucina
      base_0_m4 = [ base_0.x,                                 base_0.y, base_0.z + Cuc_ModuloGlass_Pos_Rt_OffZ ]
      alto_2_m4 = [ alto_2.x, alto_2.y - $Cuc_ModuloGlass_Coperchio_Sp, alto_2.z - Cuc_ModuloGlass_Pos_Fro_OffZ]

      //Punti stampa:
      //Scritta fronte:
      pnt_stp_fronte.x = base_1.x + X/2
      pnt_stp_fronte.y = base_1.y + Y
      pnt_stp_fronte.z = base_1.z - $Yscr - 10

      //Bollinatura
      STP_Bollina_Pnt = [X/2 , Y/2, Z/2]
   }

   //Controlli
   PROCEDURA Cuc_ModuloGlass_Controlli
   {
      GOSUB CtrlComune

      GOSUB Cuc_ModuloGlass_Ctrl_PosizioneH
      GOSUB Cuc_ModuloGlass_Ctrl_Near
      GOSUB Cuc_ModuloGlass_Ctrl_Posizione
      GOSUB Cuc_ModuloGlass_Ctrl_Pellicola
      GOSUB ContaGiunzioni_368
   }

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

      if( base0y_abs != 0
        & base0y_abs <= $Cuc_ModuloGlass_Piedini_Sp )
      {
         if( IS_IDX( AGGANCIATA( ATTUALE(), "*")) == 0 )
         {
            COMANDO( STRCAT( "EDITPOS_REL ", STR(ATTUALE()), " 0 ", STR(-1 * base0y_abs), " 0 0 //Cuc_ModuloGlass_Ctrl_Posizione"))
         }
      }
   }

   PROCEDURA Cuc_ModuloGlass_Ctrl_Near
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 ) { EXITSUB() }
      //COMANDO2( STRCAT( "LOGMSG Cuc_ModuloGlass_Ctrl_Near ACTION: ", STR(ACTION()), " - IDX: ", STR(ATTUALE())))

      wk_lato = 9                 wk_near = wk_lato               wk_nome_test = wk_lato
      wk_lato[1] = "sotto"        wk_near[1] = "idx_cnear_dw"     wk_nome_test[1] = "ScoccaT_B*"
      wk_lato[2] = "destra"       wk_near[2] = "idx_cnear_dx"     wk_nome_test[2] = "ScoccaT_B*;!ScoccaT_BaseCantinetta;!ScoccaT_BaseLvst*;!ScoccaT_BaseAng*"
      wk_lato[3] = "sinistra"     wk_near[3] = "idx_cnear_sx"     wk_nome_test[3] = "ScoccaT_B*;!ScoccaT_BaseCantinetta;!ScoccaT_BaseLvst*;!ScoccaT_BaseAng*"
      wk_lato[4] = "top_destra"   wk_near[4] = "idx_cnear_top_dx" wk_nome_test[4] = "Top*"
      wk_lato[5] = "top_sinistra" wk_near[5] = "idx_cnear_top_sx" wk_nome_test[5] = "Top*"
      wk_lato[6] = "sost_sotto"   wk_near[6] = "idx_cnear_dw"     wk_nome_test[6] = "Cuc_Telaio"
      wk_lato[7] = "blc_sopra"    wk_near[7] = "idx_cnear_up"     wk_nome_test[7] = "*"
      wk_lato[8] = "blc_destra"   wk_near[8] = "idx_cnear_dx"     wk_nome_test[8] = "Cuc_ModuloGlass;ScoccaT_BaseCantinetta;ScoccaT_BaseLvst*;ScoccaT_BaseAng*;BarraIsola"
      wk_lato[9] = "blc_sinistra" wk_near[9] = "idx_cnear_sx"     wk_nome_test[9] = "Cuc_ModuloGlass;ScoccaT_BaseCantinetta;ScoccaT_BaseLvst*;ScoccaT_BaseAng*;BarraIsola"

      wk_lato_num = 1
      while( wk_lato_num <= wk_lato )
      {
         wk_lato_att = wk_lato[wk_lato_num]
         wk_near_att = wk_near[wk_lato_num]
         wk_nome_test_att = wk_nome_test[wk_lato_num]

         wk_lato_var_wk  = STRCAT( "wk_", wk_lato_att)
         wk_lato_var_idx = STRCAT( "idx_", wk_lato_att)

         //Resetto idx
         VAR_VALUE_SET( ATTUALE(), wk_lato_var_idx, -1)

         wk_near_val = VAR_VAL( ATTUALE(), wk_near_att)
         if( IS_IDX(wk_near_val) )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2( wk_lato_var_wk, wk_near_val, 1, "*")

            wk_lato_val_wk  = VAR_VAL( ATTUALE(), wk_lato_var_wk )
            wk_lato_val_idx = VAR_VAL( ATTUALE(), wk_lato_var_idx)
            wk_loop_num = 1
            while ( IS_IDX(wk_lato_val_idx) == 0
                  & wk_loop_num <= wk_lato_val_wk )
            {
               wk_lato_var_wk_idx = STRCAT( wk_lato_var_wk, "_##", STR(wk_loop_num))
               wk_lato_val_wk_idx  = -1
               wk_lato_val_wk_nome = ""

               if( VAR_EXIST( ATTUALE(), wk_lato_var_wk_idx) )
               {
                  wk_lato_val_wk_idx = VAR_VAL( ATTUALE(), wk_lato_var_wk_idx)

                  if( IS_IDX(wk_lato_val_wk_idx) )
                  {
                     wk_lato_val_wk_nome = NOME(wk_lato_val_wk_idx)

                     if( NOME(wk_lato_val_wk_idx) != "" )
                     {
                        if( Is_In_StrArray( wk_lato_val_wk_nome, wk_nome_test_att, ";") == 1 )
                        {
                           if( GetTopLevel(wk_lato_val_wk_idx) != idx_topl )
                           {
                              VAR_VALUE_SET( ATTUALE(), wk_lato_var_idx, wk_lato_val_wk_idx)
                              wk_lato_val_idx = VAR_VAL( ATTUALE(), wk_lato_var_idx)
                           }
                        }
                     }
                  }
               }

               wk_loop_num = wk_loop_num + 1
            }
         }

         wk_lato_num = wk_lato_num + 1
      }
   }

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

      if( IS_VAR_FIXED( ATTUALE(), "VAR_Posizione") == 0 )
      {
         VAR_Posizione = -1

         wk_check = 0
         if( base0y_abs <= $Cuc_ModuloGlass_Piedini_Sp ) { VAR_Posizione =  0  wk_check = wk_check + 1 }
         if( IS_IDX(idx_sotto) )                         { VAR_Posizione =  1  wk_check = wk_check + 1 }
         if( IS_IDX(idx_sost_sotto))                     { VAR_Posizione =  2  wk_check = wk_check + 1 }

         if( wk_check > 1 )                              { VAR_Posizione = -1                          }
      }

      VAR_Posizione_Str = "NON VALIDA"
      if( VAR_Posizione == 0 ) { VAR_Posizione_Str = "A TERRA"             }
      if( VAR_Posizione == 1 ) { VAR_Posizione_Str = "SU BASE"             }
      if( VAR_Posizione == 2 ) { VAR_Posizione_Str = "A TERRA SU SOSTEGNO" }
   }

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

      if( IS_VAR_FIXED( ATTUALE(), "VAR_Pellicola") == 1 )    { EXITSUB() }

      VAR_Pellicola = 0
      if( IS_IDX(idx_destra)   ) { VAR_Pellicola =  1 }
      if( IS_IDX(idx_sinistra) ) { VAR_Pellicola = -1 }
      if( IS_IDX(idx_destra)
        & IS_IDX(idx_sinistra) ) { VAR_Pellicola =  2 }
   }

   PROCEDURA Cuc_ModuloGlass_Ctrl_FineOrdine
   {
      $wk_CG_Nome    = "Cuc_ModuloGlass_Ctrl_FineOrdine"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1500)
      $wk_CG_Info    = ""

      WITH_ALIAS( "$wk_items", "Cuc_ModuloGlass")
      if( $wk_items == 0) { EXITSUB() }
      $wk_items_spec = 0

      $wk_item_num = 0
      while( inc($wk_item_num) <= $wk_items )
      {
         $wk_item_idx = $wk_items[$wk_item_num]
         SET_#($wk_item_idx)

         // ELEMENTO
         if( isSpeciale($wk_item_idx) > 0) { inc($wk_items_spec) }

         // CONTROLLI
         $wk_err = 0

         //1 - Limiti dimensionali
         //1.1 - Larghezza compresa tra 368 e 736
         if( #X < $Cuc_ModuloGlass_X_Min
           | #X > $Cuc_ModuloGlass_X_Max ) { AddItem2Array( -1, "wk_err", 0, STRCAT( "1.1 - ", MSGF( 1501, STRCAT( STR($Cuc_ModuloGlass_X_Min), ";", STR($Cuc_ModuloGlass_X_Max), ";", STR(#X))))) }

         //1.2 - Altezza compresa tra 194 e 930
         if( #Y < $Cuc_ModuloGlass_Y_Min
           | #Y > $Cuc_ModuloGlass_Y_Max ) { AddItem2Array( -1, "wk_err", 0, STRCAT( "1.2 - ", MSGF( 1502, STRCAT( STR($Cuc_ModuloGlass_Y_Min), ";", STR($Cuc_ModuloGlass_Y_Max), ";", STR(#Y))))) }

         //1.3 - Profondità compresa 655 e 926
         if( #Z < $Cuc_ModuloGlass_Z_Min
           | #Z > $Cuc_ModuloGlass_Z_Max ) { AddItem2Array( -1, "wk_err", 0, STRCAT( "1.3 - ", MSGF( 1503, STRCAT( STR($Cuc_ModuloGlass_Z_Min), ";", STR($Cuc_ModuloGlass_Z_Max), ";", STR(#Z))))) }

         //2 - Controllo near
         //2.1 - Elementi bloccanti
         //2.1.1 - Sopra: non deve esserci altro
         if( IsIdx( $wk_item_idx, "idx_blc_sopra") == 1 )    { AddItem2Array( -1, "wk_err", 0, STRCAT( "2.1.1 - ", MSG(1510))) }

         //2.1.2 - Destra e sinistra: no elementi bloccanti
         if( IsIdx( $wk_item_idx, "idx_blc_destra") == 1
           | IsIdx( $wk_item_idx, "idx_blc_sinistra") == 1 ) { AddItem2Array( -1, "wk_err", 0, STRCAT( "2.1.2 - ", MSG(1511))) }

         //2.2 - Elementi vicini obbligatori
         //2.2.1 - Destra e sinistra: almeno una base a fianco
         if( IsIdx( $wk_item_idx, "idx_destra") == 0
           & IsIdx( $wk_item_idx, "idx_sinistra") == 0 )     { AddItem2Array( -1, "wk_err", 0, STRCAT( "2.2.1 - ", MSG(1512))) }

         //2.2.2 - Destra e sinistra: almeno un top a fianco
         if( IsIdx( $wk_item_idx, "idx_top_destra") == 0
           & IsIdx( $wk_item_idx, "idx_top_sinistra") == 0 ) { AddItem2Array( -1, "wk_err", 0, STRCAT( "2.2.2 - ", MSG(1513))) }

         //3 - Controllo posizione
         //3.1 - Posizione non valida
         if( #VAR_Posizione_Str == ""
           | #VAR_Posizione_Str == "NON VALIDA" )            { AddItem2Array( -1, "wk_err", 0, STRCAT( "3.1 - ", MSG(1520))) }

         //3.2 - Su base: non può essere terminale
         if( #VAR_Posizione_Str == "SU BASE" )
         {
            if( IsIdx( $wk_item_idx, "idx_destra") == 0
              | IsIdx( $wk_item_idx, "idx_sinistra") == 0 )  { AddItem2Array( -1, "wk_err", 0, STRCAT( "3.2 - ", MSG(1521))) }
         }

         //4 - Controllo dimensioni in base a elementi vicini
         //4.1 - Top a fianco: stessa profondità
         //4.1.1 - Top a dx
         if( IsIdx( $wk_item_idx, "idx_top_destra") )
         {
            $wk_top_destra_Z = VAR_VAL( #idx_top_destra, "Zt")
            if( #Z != $wk_top_destra_Z )                     { AddItem2Array( -1, "wk_err", 0, STRCAT( "4.1.1 - ", MSGF( 1530, STRCAT( STR(#Z), ";", STR($wk_top_destra_Z))))) }
         }

         //4.1.2 - Top a sx
         if( IsIdx( $wk_item_idx, "idx_top_sinistra") )
         {
            $wk_top_sinistra_Z = VAR_VAL( #idx_top_sinistra, "Zt")
            if( #Z != VAR_VAL( #idx_top_sinistra, "Zt") )    { AddItem2Array( -1, "wk_err", 0, STRCAT( "4.1.2 - ", MSGF( 1530, STRCAT( STR(#Z), ";", STR($wk_top_sinistra_Z))))) }
         }

         if( $wk_err <= 0) { continue }

         //MESSAGGI FINE ORDINE
         $wk_err_num = 0
         while( inc($wk_err_num) <= $wk_err)
         {
            $wk_err_att = FMT( ">> [{}] - {}", STR($wk_item_idx), $wk_err[$wk_err_num])

            if( $wk_CG_Info == "" ) { $wk_CG_Info = $wk_err_att }
            else                    { $wk_CG_Info = STRCAT( $wk_CG_Info, "\n\n", $wk_err_att) }
         }

         AddItem2Array( -1, "wk_CG_Items", $wk_item_idx, "")
      }

      if( $wk_CG_Items > 0)            { $wk_CG_Blocca = 1         }
      if( $wk_items_spec >= $wk_items) { $wk_CG_Tipo = "NO_BLOCCO" }

      GOSUB CG_CFO_FineControllo
   }

   //OnQueryBdmLocal
   PROCEDURA Cuc_ModuloGlass_OnQueryBdmLocal
   {
      //Dump variabili
      //GOSUB OnQueryBdmLocal_Debug

      if ( $query_type == 1 )
      {
         if ( $M4_DragInfo_Mode == 0 )
         {
            wk_idx_ref  = $M4_DragInfo_Ref
            wk_nome_ref = NOME(wk_idx_ref)
            wk_ang_ref  = ANG_TOT2(wk_idx_ref)

            //Se ho erroneamente selezionato il bifacciale, tento di spostarmi sulla base di riferimento
            if( wk_nome_ref == "Cuc_AntaBifacciale"
              & IsIdx( wk_idx_ref, "idx_struttura") )
            {
               wk_idx_ref  = VAR_VAL( wk_idx_ref, "idx_struttura")
               wk_nome_ref = NOME(wk_idx_ref)
               wk_ang_ref  = ANG_TOT2(wk_idx_ref)

               $M4_DragInfo_Ref = wk_idx_ref
               //Inverto il verso, il bifacciale è ruotato di 180 gradi
               if( ABS($M4_DragInfo_SxDx) == 1 )
               {
                  $M4_DragInfo_SxDx = -1 * $M4_DragInfo_SxDx
               }
            }

            if( IS_MATCH( wk_nome_ref, "ScoccaT_B*") == 1 )
            {
               SET_#(wk_idx_ref)

               //Sopra
               $query_p1 = $M4_DragInfo_Snap

               //Destra
               if( $M4_DragInfo_SxDx == 1 )
               {
                  $query_p1 = #base_3
               }

               //Sinistra
               if( $M4_DragInfo_SxDx == -1 )
               {
                  $query_p1 = #base_0

                  $query_p1.x = $query_p1.x - COSENO(wk_ang_ref) * X
                  $query_p1.z = $query_p1.z + SENO(wk_ang_ref) * X
               }

               //Allineamento con base
               $query_p1.x = $query_p1.x - SENO(wk_ang_ref) * Cuc_ModuloGlass_Pos_Rt_OffZ
               //$query_p1.y = $query_p1.y + $Cuc_ModuloGlass_Coperchio_Sp
               $query_p1.z = $query_p1.z - COSENO(wk_ang_ref) * Cuc_ModuloGlass_Pos_Rt_OffZ

               //Angolo della base
               $query_p2 = wk_ang_ref

               $QueryResult__ = 1
            }

            if( VAR_VAL( ATTUALE(), "M4_CNT_LINK_MODE__") == 2 )
            {
               //Sopra
               wk_sd = "S+"
               wk_offx = 0
               wk_offy = Y
               wk_offz = -1 * Cuc_ModuloGlass_Pos_Rt_OffZ

               //Destra
               if( $M4_DragInfo_SxDx == 1 )
               {
                  wk_sd = "D+"
                  wk_offx = X
                  wk_offy = $Cuc_ModuloGlass_Coperchio_Sp
               }

               //Sinistra
               if( $M4_DragInfo_SxDx == -1 )
               {
                  wk_sd = "S+"
                  wk_offx = -X
                  wk_offy = $Cuc_ModuloGlass_Coperchio_Sp
               }

               $M4_DragInfo_Cnt = CostruisciStrCnt2( wk_sd, "A+", "R+", STRCAT( STR(wk_offx), " ", STR(wk_offy), " ", STR(wk_offz), " 0"))
               $QueryResult__ = 3
            }
         }
      }

      if( $query_type == 7 )
      {
         if( IS_MATCH( NOME($query_p1), "ScoccaT_B*") == 1 )
         {
            $QueryResult__ = 1
         }
      }

      //Dump variabili
      //GOSUB OnQueryBdmLocal_Debug
   }

   //Gestionale
   PROCEDURA Cuc_ModuloGlass_Gestionale
   {
      GOSUB GestComune

      GOSUB Cuc_ModuloGlass_Set_Gest_C062
      GOSUB Cuc_ModuloGlass_Set_Gest_C177
   }

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

      VarAdd = "GEST_C062"

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) == 1 ) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      gest_C062 = "TE002"                              //Di default tengo il valore che comporta meno lavorazioni
      if( VAR_Posizione == 0 ) { gest_C062 = "TE001" } //A terra
      if( VAR_Posizione == 1 ) { gest_C062 = "P0010" } //Su base
      if( VAR_Posizione == 2 ) { gest_C062 = "TE002" } //A terra su sostegno

      if( VAR_VAL_STR( ATTUALE(), VarAdd) != gest_C062 )
      {
         VAR_VALUESTR_SET( ATTUALE(), VarAdd, gest_C062)
      }

      GOSUB Add_TABER_VARSETTATE
   }

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

      VarAdd = "GEST_C177"

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) == 1 ) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      gest_C177 = "__"
      if( VAR_Pellicola == -1 ) { gest_C177 = "SX001"  } //Sinistra
      if( VAR_Pellicola ==  1 ) { gest_C177 = "DX001"  } //Destra
      if( VAR_Pellicola ==  2 ) { gest_C177 = "DXSX01" } //Entrambi

      if( VAR_VAL_STR( ATTUALE(), VarAdd) != gest_C177 )
      {
         VAR_VALUESTR_SET( ATTUALE(), VarAdd, gest_C177)
      }

      GOSUB Add_TABER_VARSETTATE
   }

   //Offset
   PROCEDURA Cuc_ModuloGlass_Offset
   {
      if( VAR_VAL( -1, "offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB Cuc_ModuloGlass_Assegnazioni
      GOSUB Cuc_ModuloGlass_Controlli
      GOSUB Cuc_ModuloGlass_Gestionale

      COMANDO( STRCAT( "RICALCOLA_UNA ", STR(ATTUALE()), " no_agganciati //Offset ", NOME(ATTUALE())))
   }

   //Debug
   PROCEDURA OnQueryBdmLocal_Debug
   {
      $wk_oqbl_vars_debug = 0
      LISTA_VARIABILI( -1, 0, "$wk_oqbl_vars_debug", "M4_DragInfo*")

      InsertItem2Array( -1, "wk_oqbl_vars_debug", 0, "query_type", 1)
      InsertItem2Array( -1, "wk_oqbl_vars_debug", 0, "query_p1",   2)
      InsertItem2Array( -1, "wk_oqbl_vars_debug", 0, "query_p2",   3)

      if( $wk_oqbl_vars_debug > 0 )
      {
         $wk_oqbl_cmd = STRCAT( "LOGMSG OnQueryBdmLocal_Debug - ", STR(ATTUALE()), "-", NOME(ATTUALE()))
         $wk_var_num = 1
         while( $wk_var_num <= $wk_oqbl_vars_debug )
         {
            $wk_var_att = $wk_oqbl_vars_debug[$wk_var_num]
            $wk_var_att_tipo = VAR_TYPE( -1, $wk_var_att)
            $wk_var_val = ""
            if( $wk_var_att_tipo == 0 ) { $wk_var_val = STR( VAR_VAL( -1, $wk_var_att)) }
            if( $wk_var_att_tipo == 1 ) { $wk_var_val = VAR_VAL_STR( -1, $wk_var_att) }
            if( $wk_var_att_tipo == 2 ) { $wk_var_val = STRCAT( "[", STR( VAR_VAL( -1, STRCAT( $wk_var_att, ".x"))), ", ", STR( VAR_VAL( -1, STRCAT( $wk_var_att, ".y"))), ", ", STR( VAR_VAL( -1, STRCAT( $wk_var_att, ".z"))), "]") }

            $wk_oqbl_cmd = STRCAT( $wk_oqbl_cmd, " - ", $wk_var_att, ": ", $wk_var_val)

            $wk_var_num = $wk_var_num + 1
         }

         COMANDO2($wk_oqbl_cmd)
      }
   }
   //} CUCINA - MODULI GLASS


   //{ CUCINA - ANTE STRIPES
   PROCEDURA Posizione_Fascia_Frontale_Stripes
   {
      if( IS_IDX(idx_pdr) == 0 )                   { EXITSUB() }
      if( $OnLoadOrder == 1 | ACTION() <= 0 )      { EXITSUB() }

      VAR_Posizione = ""

      wk_pdr_pos_basey = VAR_VAL( idx_pdr, "base_0.y")
      wk_pdr_pos_altoy = VAR_VAL( idx_pdr, "alto_0.y")

      wk_match = 0
      if( ABS( base_0.y - wk_pdr_pos_basey) <= $Cuc_Stripes_Aria_Y ) { VAR_Posizione = "INFERIORE" wk_match = wk_match + 1 }
      if( ABS( alto_0.y - wk_pdr_pos_altoy) <= $Cuc_Stripes_Aria_Y ) { VAR_Posizione = "SUPERIORE" wk_match = wk_match + 1 }
      if( wk_match == 0 )                                            { VAR_Posizione = "INTERMEDIO" }
      if( wk_match == 2 )                                            { VAR_Posizione = "INTERO" }
   }

   PROCEDURA Dimensiona_Fascia_Frontale_Stripes
   {
      Yr = Y - 2*$Cuc_Stripes_Aria_Y

      if( VAR_Posizione == "INTERO" )    { Yr = Y }

      if( VAR_Posizione == "INFERIORE"
        | VAR_Posizione == "SUPERIORE" ) { Yr = Y - $Cuc_Stripes_Aria_Y }
   }

   PROCEDURA Calcola_Fascia_Frontale_Stripes
   {
      //Calcolo numero e posizione delle stripes in base alle stripes inserite dall'utente
      wk_stripes = 1
      wk_stripes[1] = STRCAT( "0;", STR(Y))

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

      COMPONENTI2( "wk_stripes_usr", idx_pdr, "Fascia_Frontale_Stripes")

      if( wk_stripes_usr == 0 )                    { EXITSUB() }

      $wk_i = 1
      while( $wk_i <= wk_stripes_usr )
      {
         if( VAR_VAL_STR( wk_stripes_usr[$wk_i], "VAR_Tipo_Ins") != "VESTITO" )
         {
            DEL_ARRAY_ITEM( idx_att, "wk_stripes_usr", $wk_i)
            $wk_i = $wk_i - 1
         }

         $wk_i = $wk_i + 1
      }

      if( wk_stripes_usr == 0 )                    { EXITSUB() }

      r = ArraySortVarNum( idx_att, "wk_stripes_usr", "base0y_abs")

      wk_stripes = 0

      $wk_i = 1
      while( $wk_i <= wk_stripes_usr )
      {
         //Stripe utente attuale
         wk_stripes_usr_idx = wk_stripes_usr[$wk_i]
         wk_stripes_usr_b0y = VAR_VAL( wk_stripes_usr_idx, "base_0.y")
         wk_stripes_usr_a0y = VAR_VAL( wk_stripes_usr_idx, "alto_0.y")
         wk_stripes_usr_y   = VAR_VAL( wk_stripes_usr_idx, "Y")

         //Stripe utente precedente
         wk_stripes_usr_prev_idx = -1
         wk_stripes_usr_prev_a0y = base_0.y
         if( $wk_i > 1 )
         {
            wk_stripes_usr_prev_idx = wk_stripes_usr[$wk_i - 1]
            wk_stripes_usr_prev_a0y = VAR_VAL( wk_stripes_usr_prev_idx, "alto_0.y")
         }

         //Stripes inferiori
         ///Base
         wk_stripe_add_b0y = wk_stripes_usr_prev_a0y - base_0.y

         ///Altezza
         wk_stripe_add_y = wk_stripes_usr_b0y - wk_stripes_usr_prev_a0y

         if( wk_stripe_add_y > 0 )
         {
            AddItem2Array( ATTUALE(), "wk_stripes", 0, STRCAT( STR(wk_stripe_add_b0y), ";", STR(wk_stripe_add_y)))
         }

         //Stripes superiore, se sono l'ultimo elemento e non copro fino a sopra
         if( $wk_i == wk_stripes_usr
           & wk_stripes_usr_a0y < alto_0.y )
         {
            ///Base
            wk_stripe_add_b0y = wk_stripes_usr_a0y - base_0.y

            ///Altezza
            wk_stripe_add_y = alto_0.y - wk_stripes_usr_a0y

            if( wk_stripe_add_y > 0 )
            {
               AddItem2Array( ATTUALE(), "wk_stripes", 0, STRCAT( STR(wk_stripe_add_b0y), ";", STR(wk_stripe_add_y)))
            }
         }

         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA Posa_Fascia_Frontale_Stripes
   {
      GOSUB posa_blocco

      @X = X
      @Y = 0
      @Z = Spe_PanFin

      @base_0.z = base_0.z + Z - @Z

      @VAR_Tipo_Ins = "POSIZIONATO"
      @wk_array_var = STRCAT("wk_stripe_", STR(@Nr_Fin))

      @escluso = 1

      if( @Nr_Fin <= wk_stripes )
      {
         STR_SPLIT( wk_stripes[@Nr_Fin], ";", 1, @wk_array_var , ATTUALE())

         if( VAR_VAL( ATTUALE(), @wk_array_var) >= 2 )
         {
            @base_0.y = base_0.y + ATOI(VAR_VAL_STR( ATTUALE(), STRCAT( @wk_array_var, "_##1")))
            @Y = ATOI(VAR_VAL_STR( ATTUALE(), STRCAT( @wk_array_var, "_##2")))

            @escluso = 0
         }
      }
   }

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

      if( VAR_Tipo_Ins == "VESTITO" )
      {
         GEST_IDXPADRE = ATTUALE()

         COMPONENTI2( "wk_anta", PADRE( ATTUALE(), 1), "Frontale_Stripes")
         if( wk_anta > 0 )
         {
            GEST_IDXPADRE = wk_anta[1]
         }
      }
   }

   PROCEDURA Gestionale_Frontale_Stripes
   {
      if( IS_VAR_FIXED( ATTUALE(), "RADICE")
        | IS_VAR_FIXED( ATTUALE(), "GEST_CODICE")) { EXITSUB() }

      perCODICE_prec = VAR_VAL_STR( ATTUALE(), "GEST_CODICE")

      perCODICE = "F09017"
      if( Apertura == "RB" )               { perCODICE = "F09018" }
      if( UN_PADRE("Cuc_AntaBifacciale") ) { perCODICE = "F09019" }

      if( perCODICE != perCODICE_prec )
      {
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
         GOSUB CAMBIA_VAR
      }
   }

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

      //$wk_log = VAR_VAL( -1, "ATTIVA_LOG_DBG")
      //$wk_log_proc     = STRCAT( "Set_NonSig_Frontale_Stripes | ", STR(ATTUALE()), " - ", NOME(ATTUALE()), " | ")
      //$wk_log_proc_sub = STRCAT( $wk_log_proc, "  ")
      //
      //ScriviSuLog( $wk_log , $wk_log_proc , "START")

      wk_fin_var = GetVarGest(FIN_var)
      FIN_val = VAR_VAL_STR( ATTUALE(), wk_fin_var)

      //Ricavo ns solo se cambia la finitura frontale
      if( FIN_val != ""
        & FIN_val != "__" )
      {
         wk_fin_val_prec = VAR_VAL_STR( ATTUALE(), "FIN_val_prec")
         if( wk_fin_val_prec != FIN_val )
         {
            FIN_ns = GetValoreNS( ATTUALE(), wk_fin_var)
            //ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT( "- FIN_val: ", FIN_val, " - FIN_val_prec: ", wk_fin_val_prec, " - FIN_ns: ", FIN_ns))
         }

         FIN_val_prec = FIN_val
      }

      //ScriviSuLog( $wk_log , $wk_log_proc , "END")
   }

   //Porto la finitura più costosa nell'anta
   PROCEDURA Set_Finitura_Frontale_Stripes
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 | COMPONENDO() == 1 )  { EXITSUB() }

      $wk_log = VAR_VAL( -1, "ATTIVA_LOG_DBG")
      $wk_log_proc     = STRCAT( "Set_Finitura_Frontale_Stripes | ", STR(ATTUALE()), " - ", NOME(ATTUALE()), " | ")
      $wk_log_proc_sub = STRCAT( $wk_log_proc, "  ")

      ScriviSuLog( $wk_log , $wk_log_proc , "START")

      // 0 - Controlli preliminari su ATTUALE()
      GOSUB Set_NonSig_Frontale_Stripes

      // 0.0 - Variabile finitura
      wk_fin_var_var = "FIN_var"
      wk_fin_var = GetVarGest( VAR_VAL_STR( ATTUALE(), wk_fin_var_var))

      // 0.1 - Valore finitura
      wk_fin_val_var = "FIN_val"
      wk_fin_val = VAR_VAL_STR( ATTUALE(), wk_fin_val_var)

      // 0.1.1 - Se non valido tento ricalcolo
      if( wk_fin_val == ""
        | wk_fin_val == "__" ) { VAR_VALUESTR_SET( ATTUALE(), wk_fin_val_var, VAR_VAL_STR( ATTUALE(), wk_fin_var)) }

      // 0.1.2 - Se ancora non valido, esco
      wk_fin_val = VAR_VAL_STR( ATTUALE(), wk_fin_val_var)
      if( wk_fin_val == ""
        | wk_fin_val == "__" )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[0.1.2] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - Valore finitura non valido, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 0.2 - Valore non significativo, utilizzo un valore calcolato solo al cambio di finitura, per evitare query continue
      wk_fin_ns_var = "FIN_ns"
      wk_fin_ns = VAR_VAL_STR( ATTUALE(), wk_fin_ns_var)

      // 0.2.1 - Se non valido tento ricalcolo
      if( wk_fin_ns == ""
        | IS_MATCH( wk_fin_ns, "*configurato*") != 0 ) { VAR_VALUESTR_SET( ATTUALE(), wk_fin_ns_var, GetValoreNS( ATTUALE(), wk_fin_var)) }

      // 0.2.2 - Se ancora non valido, esco
      wk_fin_ns = VAR_VAL_STR( ATTUALE(), wk_fin_ns_var)
      if( wk_fin_ns == ""
        | IS_MATCH( wk_fin_ns, "*configurato*") != 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[0.2.2] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - Valore non sig finitura non valido, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 0.3 - Esistenza ns nell'elenco dei valori ns
      wk_fin_pos = GetItemPos( -1, "NonSig", 0, wk_fin_ns)
      if( wk_fin_pos == 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[0.3] - wk_fin_var: ", wk_fin_var,
                                                               " - wk_fin_val: ", wk_fin_val,
                                                               " - wk_fin_ns: ", wk_fin_ns,
                                                               " - wk_fin_pos: ", STR(wk_fin_pos),
                                                               " - Valore non sig finitura non trovato nell'elenco, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 1 - Controlli preliminari per fascia
      // 1.0 - Array delle fasce
      COMPONENTI2( "wk_stripes", ATTUALE(), "Fascia_Frontale_Stripes")

      // 1.0.1 - Non sono presenti fasce
      if( wk_stripes == 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.0.1] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - wk_fin_pos: ", STR(wk_fin_pos),
                                                                 " - Non ho trovato fasce di finitura, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 1.0.2 - Reset draw mode di debug
      if( $wk_log > 0 )
      {
         wk_stripes_num = 1
         while( wk_stripes_num <= wk_stripes )
         {
            wk_stripes_att = wk_stripes[wk_stripes_num]
            wk_stripes_att_m4dm = VAR_VAL( wk_stripes_att, "M4_DRAW_MODE__")

            if( wk_stripes_att_m4dm != 0 ) { VAR_VALUE_SET( wk_stripes_att, "M4_DRAW_MODE__", 0) }


            wk_stripes_num = wk_stripes_num + 1
         }
      }

      // 1.1 - Array finitura fasce
      wk_stripes_fin_val = wk_stripes
      wk_stripes_fin_val_error = 0
      wk_stripes_num = 1
      while( wk_stripes_fin_val_error == 0
           & wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att = wk_stripes[wk_stripes_num]
         wk_stripes_att_fin_val = VAR_VAL_STR( wk_stripes_att, wk_fin_var)

         if( wk_stripes_att_fin_val == ""
           | wk_stripes_att_fin_val == "__" ) { wk_stripes_fin_val_error = wk_stripes_fin_val_error + 1 }

         VAR_VALUESTR_SET( ATTUALE(), GetArrayVar( "wk_stripes_fin_val", wk_stripes_num), wk_stripes_att_fin_val)

         wk_stripes_num = wk_stripes_num + 1
      }

      // 1.1.1 - Trovate fasce con valori finitura non validi
      if( wk_stripes_fin_val_error > 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.1.1] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - wk_fin_pos: ", STR(wk_fin_pos),
                                                                 " - wk_stripes_fin_val_error: ", STR(wk_stripes_fin_val_error),
                                                                 " - Trovate fasce con finitura non valida, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 1.2 - Array non significativo fasce
      wk_stripes_fin_ns = wk_stripes
      wk_stripes_fin_ns_error = 0
      wk_stripes_num = 1
      while( wk_stripes_fin_ns_error == 0
           & wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att = wk_stripes[wk_stripes_num]
         wk_stripes_att_fin_val = wk_stripes_fin_val[wk_stripes_num]
         wk_stripes_att_fin_ns = VAR_VAL_STR( wk_stripes_att, wk_fin_ns_var)

         // 1.2.1 - Se non valido tento ricalcolo
         if( wk_stripes_att_fin_ns == ""
           | IS_MATCH( wk_stripes_att_fin_ns, "*configurato*") != 0 )
         {
            VAR_VALUESTR_SET( wk_stripes_att, wk_fin_val_var, wk_stripes_att_fin_val)
            VAR_VALUESTR_SET( wk_stripes_att, wk_fin_ns_var, GetValoreNS( wk_stripes_att, wk_fin_var))
            wk_stripes_att_fin_ns = VAR_VAL_STR( wk_stripes_att, wk_fin_ns_var)
         }

         if( wk_stripes_att_fin_ns == ""
           | IS_MATCH( wk_stripes_att_fin_ns, "*configurato*") != 0 ) { wk_stripes_fin_ns_error = wk_stripes_fin_ns_error + 1 }

         VAR_VALUESTR_SET( ATTUALE(), GetArrayVar( "wk_stripes_fin_ns", wk_stripes_num), wk_stripes_att_fin_ns)

         wk_stripes_num = wk_stripes_num + 1
      }

      // 1.2.2 - Trovate fasce con valori ns non validi
      if( wk_stripes_fin_ns_error > 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.2.2] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - wk_fin_pos: ", STR(wk_fin_pos),
                                                                 " - wk_stripes_fin_ns_error: ", STR(wk_stripes_fin_ns_error),
                                                                 " - Trovate fasce con finitura non significativa non valida, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 1.3 - Posizione ns nell'array globale dei ns
      wk_stripes_fin_pos = wk_stripes
      wk_stripes_fin_pos_error = 0
      wk_stripes_num = 1
      while( wk_stripes_fin_pos_error == 0
           & wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att     = wk_stripes[wk_stripes_num]
         wk_stripes_att_ns  = wk_stripes_fin_ns[wk_stripes_num]
         wk_stripes_att_pos = GetItemPos( -1, "NonSig", 0, wk_stripes_att_ns)

         if( wk_stripes_att_pos == 0 ) { wk_stripes_fin_pos_error = wk_stripes_fin_pos_error + 1 }

         VAR_VALUE_SET( ATTUALE(), GetArrayVar( "wk_stripes_fin_pos", wk_stripes_num), wk_stripes_att_pos)

         wk_stripes_num = wk_stripes_num + 1
      }

      // 1.3.1 - Trovate fasce con posizione ns non valida
      if( wk_stripes_fin_pos_error > 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.3.1] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - wk_fin_pos: ", STR(wk_fin_pos),
                                                                 " - wk_stripes_fin_pos_error: ", STR(wk_stripes_fin_pos_error),
                                                                 " - Trovate fasce con finitura non significativa non riconosciuta, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      //1.4 - Array finitura fasce fixata
      wk_stripes_fix = wk_stripes
      wk_stripes_fix_tot = 0      //Numero totale di fasce con finitura fixata
      wk_stripes_num = 1
      while( wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att = wk_stripes[wk_stripes_num]
         wk_stripes_att_fin_fix = IS_VAR_FIXED( wk_stripes_att, wk_fin_var)
         wk_stripes_fix_tot = wk_stripes_fix_tot + wk_stripes_att_fin_fix

         VAR_VALUE_SET( ATTUALE(), GetArrayVar( "wk_stripes_fix", wk_stripes_num), wk_stripes_att_fin_fix)

         wk_stripes_num = wk_stripes_num + 1
      }

      // 1.4.1 - Nessuna fascia fixata
      if( wk_stripes_fix_tot == 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.4.1] - wk_fin_var: ", wk_fin_var,
                                                                 " - wk_fin_val: ", wk_fin_val,
                                                                 " - wk_fin_ns: ", wk_fin_ns,
                                                                 " - wk_fin_pos: ", STR(wk_fin_pos),
                                                                 " - wk_stripes_fix_tot: ", STR(wk_stripes_fix_tot),
                                                                 " - Non ho trovato fasce di finitura con finitura fixata, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      //1.5 - Riassunto
      ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[1.4] - wk_fin_var: ", wk_fin_var,
                                                            " - wk_fin_val: ", wk_fin_val,
                                                            " - wk_fin_ns: ", wk_fin_ns,
                                                            " - wk_fin_pos: ", STR(wk_fin_pos),
                                                            " - wk_stripes: ", STR(wk_stripes),
                                                            " - wk_stripes_fin_val_error: ", STR(wk_stripes_fin_val_error),
                                                            " - wk_stripes_fin_ns_error: ", STR(wk_stripes_fin_ns_error),
                                                            " - wk_stripes_fix_tot: ", STR(wk_stripes_fix_tot)))

      // 2 - Analisi finitura fasce
      // 2.1 - Array finiture fasce e loro occorrenze
      wk_stripes_fin  = 0         //Array finiture presenti nelle fasce
      wk_stripes_ns   = 0         //Array dei relativi valori non significativi
      wk_stripes_pos  = 0         //Array di come si posiziona il prezzo della finitura nella scala delle finiture
      wk_stripes_occ  = 0         //Array di quante fasce presentano questa finitura
      wk_stripes_nfix = 0         //Array di quante fasce di questa finitura sono fixate

      // 2.2 - Popolo array finiture fasce
      wk_stripes_fin_pos_max = 0 //Finitura più costosa

      wk_stripes_num = 1
      while( wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att     = wk_stripes[wk_stripes_num]
         wk_stripes_fin_val = wk_stripes_fin_val[wk_stripes_num]
         wk_stripes_fin_ns  = wk_stripes_fin_ns[wk_stripes_num]
         wk_stripes_fin_pos = wk_stripes_fin_pos[wk_stripes_num]
         wk_stripes_fin_fix = wk_stripes_fix[wk_stripes_num]

         // 2.2.1 - Testo se la finitura attuale è già presente nell'array delle finiture
         // Invertire i commenti per aggiungere solo quelle fixate
         //wk_check = 1
         //if( wk_stripes_fin_fix > 0 ) { wk_check = 0 }
         wk_check = 0

         // 2.2.1.1 - Se presente incremento valore attuale
         wk_stripes_fin_num = 1
         while( wk_check == 0
              & wk_stripes_fin_num <= wk_stripes_fin )
         {
            wk_stripes_fin_att = wk_stripes_fin[wk_stripes_fin_num]

            if( wk_stripes_fin_att == wk_stripes_fin_val )
            {
               wk_check = wk_check + 1

               wk_var_occ = GetArrayVar( "wk_stripes_occ", wk_stripes_fin_num)
               wk_val_occ = VAR_VAL( ATTUALE(), wk_var_occ)
               wk_val_occ = wk_val_occ + 1
               VAR_VALUE_SET( ATTUALE(), wk_var_occ, wk_val_occ)

               ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.2.1.1] - wk_stripes_att: ", STR(wk_stripes_att),
                                                                         " - wk_stripes_fin_val: ", wk_stripes_fin_val,
                                                                         " - wk_stripes_fin_ns: ", wk_stripes_fin_ns,
                                                                         " - wk_stripes_fin_pos: ", STR(wk_stripes_fin_pos),
                                                                         " - wk_stripes_occ: ", STR(wk_val_occ),
                                                                         " - Valore finitura trovata, ho incremetato il totale."))
            }

            wk_stripes_fin_num = wk_stripes_fin_num + 1
         }

         // 2.2.1.2 - Se non è presente l'aggiungo
         if( wk_check == 0 )
         {
            AddItem2Array( ATTUALE(), "wk_stripes_fin",  0, wk_stripes_fin_val)
            AddItem2Array( ATTUALE(), "wk_stripes_ns",   0, wk_stripes_fin_ns)
            AddItem2Array( ATTUALE(), "wk_stripes_pos",  wk_stripes_fin_pos, "")
            AddItem2Array( ATTUALE(), "wk_stripes_occ",  1, "")

            ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.2.1.2] - wk_stripes_att: ", STR(wk_stripes_att),
                                                                      " - wk_stripes_fin_val: ", wk_stripes_fin_val,
                                                                      " - wk_stripes_fin_ns: ", wk_stripes_fin_ns,
                                                                      " - wk_stripes_fin_pos: ", STR(wk_stripes_fin_pos),
                                                                      " - Nuovo valore trovato, aggiungo all'array delle finiture."))
         }

         // 2.2.1.3 - Aggiorno posizionamento finitura, vedi nota di "wk_stripes_pos"
         if( wk_stripes_fin_pos > wk_stripes_fin_pos_max ) { wk_stripes_fin_pos_max = wk_stripes_fin_pos }
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.2.1.3] - wk_stripes_fin_pos_max: ", STR(wk_stripes_fin_pos_max)))

         wk_stripes_num = wk_stripes_num + 1
      }

      // 2.2.2 - Esco se qualcosa è andato storto
      if( wk_stripes_fin <= 0
        | wk_stripes_fin_pos_max <= 0 )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.2.2] - wk_stripes_fin: ", STR(wk_stripes_fin),
                                                                 " - wk_stripes_fin_pos_max: ", STR(wk_stripes_fin_pos_max),
                                                                 " - Non sono riuscito a popolare l'array delle finiture, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 2.3 - Ricavo finitura più costosa
      // 2.3.1 - Analizzo array appena creato e seleziono finitura più costosa e più utilizzata
      wk_stripes_fin_max = ""
      wk_stripes_pos_max = 0
      wk_stripes_occ_max = 0

      wk_stripes_fin_num = 1
      while( wk_stripes_fin_num <= wk_stripes_fin )
      {
         wk_stripes_fin_att  = wk_stripes_fin[wk_stripes_fin_num]
         wk_stripes_pos_att  = wk_stripes_pos[wk_stripes_fin_num]
         wk_stripes_occ_att  = wk_stripes_occ[wk_stripes_fin_num]

         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.3.1] - wk_stripes_fin_att: ", wk_stripes_fin_att,
                                                                 " - wk_stripes_pos_att: ", STR(wk_stripes_pos_att),
                                                                 " - wk_stripes_fin_pos_max: ", STR(wk_stripes_fin_pos_max),
                                                                 " - wk_stripes_occ_att: ", STR(wk_stripes_occ_att),
                                                                 " - wk_stripes_occ_max: ", STR(wk_stripes_occ_max)))

         if( wk_stripes_pos_att >= wk_stripes_fin_pos_max
           & wk_stripes_occ_att >  wk_stripes_occ_max )
         {
            wk_stripes_occ_max = wk_stripes_occ_att
            wk_stripes_pos_max = wk_stripes_pos_att
            wk_stripes_fin_max = wk_stripes_fin_att
         }

         wk_stripes_fin_num = wk_stripes_fin_num + 1
      }

      // 2.3.2 - Esco se non ho trovato la finitura più pregiata
      if( wk_stripes_occ_max == 0
        | wk_stripes_pos_max == 0
        | wk_stripes_fin_max == ""
        | wk_stripes_fin_max == "__" )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.3.2] - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                                 " - wk_stripes_occ_max: ", STR(wk_stripes_occ_max),
                                                                 " - Finitura piu' pregiata non valida, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      //// 2.3.3 - Se anta e finitura pià pregiata sono dello stesso pregio, tengo la finitura dell'anta
      //if( wk_fin_pos == wk_stripes_pos_max )
      //{
      //   wk_stripes_occ_max = 1
      //   wk_stripes_pos_max = wk_fin_pos
      //   wk_stripes_fin_max = wk_fin_val
      //}

      // 2.3.4 - Checkpoint
      ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[2.3.4] - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                              " - wk_stripes_occ_max: ", STR(wk_stripes_occ_max)))

      // 3 - Setto finiture
      // 3.1 - Finitura già settata
      if( wk_fin_val == wk_stripes_fin_max )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[3.1] - wk_fin_val: ", wk_fin_val,
                                                               " - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                               " - Finitura piu' pregiata gia' settata, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 3.2 - Finitura da settare su fasce: le ciclo tutte, fisso quelle con valore finitura differente, elimino fix su quelle con la stessa finitura
      wk_stripes_num = 1
      while( wk_stripes_num <= wk_stripes )
      {
         wk_stripes_att     = wk_stripes[wk_stripes_num]
         wk_stripes_fin_val = wk_stripes_fin_val[wk_stripes_num]
         wk_stripes_fin_fix = wk_stripes_fix[wk_stripes_num]

         if( wk_stripes_fin_val != wk_stripes_fin_max )
         {
            if( wk_stripes_fin_fix == 0 )
            {
               // 3.2.1 - Fixo la finitura della fascia perchè diversa
               VAR_SET_MODIFICATA( wk_stripes_att, wk_fin_var, "")

               if( $wk_log > 0 )
               {
                  VAR_VALUE_SET( wk_stripes_att, "M4_DRAW_MODE__", 4)
               }

               ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[3.2.1] - wk_stripes_att: ", STR(wk_stripes_att),
                                                                       " - wk_stripes_fin_val: ", wk_stripes_fin_val,
                                                                       " - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                                       " - La finitura della fascia non corrisponde con quella dell'anta, fixo."))
            }
         }
         else
         {
            if( wk_stripes_fin_fix > 0 )
            {
               // 3.2.2 - Tolgo fix da fascia perchè corrisponderà con quello dell'anta
               DEL_VAR_MODIFICATE( wk_stripes_att, wk_fin_var)

               if( $wk_log > 0 )
               {
                  VAR_VALUE_SET( wk_stripes_att, "M4_DRAW_MODE__", 5)
               }

               ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[3.2.2] - wk_stripes_att: ", STR(wk_stripes_att),
                                                                       " - wk_stripes_fin_val: ", wk_stripes_fin_val,
                                                                       " - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                                       " - La finitura della fascia corrisponde con quella dell'anta, elimino il fix."))
            }
         }

         wk_stripes_num = wk_stripes_num + 1
      }

      // 3.3 - Finitura da fixare su anta/livelli superiori
      // 3.3.1 - Cerco primo livello con finitura fixata o livello più alto con finitura
      wk_idx_fix_max     = ATTUALE()
      wk_idx_fix_val_max = wk_fin_val
      wk_tmp_idx         = wk_idx_fix_max
      wk_tmp_idx_topl    = GetTopLevel(ATTUALE())

      //Ramo idx con categoria di finitura
      wk_ramo_idx = 1                  wk_ramo_nome = wk_ramo_idx
      wk_ramo_idx[1] = wk_idx_fix_max  wk_ramo_nome[1] = NOME(wk_ramo_idx[1])

      wk_check = 0
      wk_i = 1
      while( wk_i <= 20       //Limito a 20 iterazioni
           & wk_check == 0 )  //Esco al primo livello fixato trovato o al top level
      {
         wk_tmp_fin_val = VAR_VAL_STR( wk_tmp_idx, wk_fin_var)
         wk_tmp_fin_fix = IS_VAR_FIXED( wk_tmp_idx, wk_fin_var)
         wk_tmp_idx_pdr = GetPrimoGest( wk_tmp_idx, 1)

         // Aggiorno idx del livello superiore
         if( wk_tmp_fin_val != ""
           & wk_tmp_fin_val != "__" )
         {
            wk_idx_fix_max     = wk_tmp_idx
            wk_idx_fix_val_max = wk_tmp_fin_val

            if( wk_idx_fix_max != wk_ramo_idx[wk_ramo_idx] )
            {
               AddItem2Array( ATTUALE(), "wk_ramo_idx", wk_idx_fix_max, "")
               AddItem2Array( ATTUALE(), "wk_ramo_nome", 0, NOME(wk_idx_fix_max))
            }
         }

         // Se l'idx corrente ha la variabile fixata, esco.
         if( wk_tmp_fin_fix > 0 )            { wk_check = 1 }

         // Se l'idx corrente è il top level, esco.
         if( wk_tmp_idx == wk_tmp_idx_topl ) { wk_check = 2 }

         // Verifico se il padre cade in uno dei casi speciali, in tal caso mi fermo qui
         if( wk_check == 0 )
         {
            wk_check_nome = "ScoccaT_BaseLvst"
            if( Is_In_StrArray( NOME(wk_tmp_idx_pdr), wk_check_nome, ";") ) { wk_check = 3 }
         }

         // Verifico se il padre del livello attuale contiene più elementi con la categoria di finitura, in tal caso mi fermo qui
         if( wk_check == 0 )
         {
            //Potrei non avere altri elementi con lo stesso nome, ma altri elementi con la stessa variabile di finitura
            //COMPONENTI2( "wk_tmp_cmp", wk_tmp_idx_pdr, wk_ramo_nome[wk_ramo_nome])
            r = WITH_VAR_LOCAL_LVL( wk_tmp_idx_pdr, $GetPrimoGest_Lvl, ATTUALE(), "wk_tmp_cmp", wk_fin_var, $alfa, 1, "*;!__", "*;!Fusto*")

            if( wk_tmp_cmp > 1 ) { wk_check = 4 }
         }

         wk_tmp_idx = wk_tmp_idx_pdr

         wk_i = wk_i + 1
      }

      // 3.3.2 - Verifico allineamento finitura massima e livello identificato
      if( wk_idx_fix_val_max == wk_stripes_fin_max )
      {
         ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[3.3.2] - wk_idx_fix_max: ", STR(wk_idx_fix_max), "_", NOME(wk_idx_fix_max),
                                                                 " - wk_idx_fix_val_max: ", wk_idx_fix_val_max,
                                                                 " - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                                 " - Livello identificato già allineato, esco."))
         ScriviSuLog( $wk_log , $wk_log_proc , "END")

         GOSUB Set_Gest_C180_Frontale_Stripes
         EXITSUB()
      }

      // 3.3.3 - Evito ricalcolo e setto manualmente la finitura su tutti i livelli con quella categoria
      wk_ramo_idx_num = 1
      while( wk_ramo_idx_num <= wk_ramo_idx )
      {
         wk_ramo_idx_att = wk_ramo_idx[wk_ramo_idx_num]

         if( IS_IDX(wk_ramo_idx_att)
           & wk_ramo_idx_att != wk_idx_fix_max )
         {
            //TODO: dovrei testare se il valore è ammesso dalla griglia
            VAR_VALUESTR_SET( wk_ramo_idx_att, wk_fin_var, wk_stripes_fin_max)
         }

         wk_ramo_idx_num = wk_ramo_idx_num + 1
      }

      // 3.3.4 - Setto finitura su livello fixato
      DEL_VAR_MODIFICATE( wk_idx_fix_max, wk_fin_var)
      //TODO: dovrei testare se il valore è ammesso dalla griglia
      VAR_VALUESTR_SET( wk_idx_fix_max, wk_fin_var, wk_stripes_fin_max)
      VAR_SET_MODIFICATA( wk_idx_fix_max, wk_fin_var, "")
      ScriviSuLog( $wk_log , $wk_log_proc_sub , STRCAT("[3.3.4] - wk_idx_fix_max: ", STR(wk_idx_fix_max), "_", NOME(wk_idx_fix_max),
                                                              " - wk_idx_fix_val_max: ", wk_idx_fix_val_max,
                                                              " - wk_stripes_fin_max: ", wk_stripes_fin_max,
                                                              " - Setto la finitura nel livello identificato."))

      // 3.3.4.1 - Ricalcolo elemento fixato
      COMANDO( STRCAT( "RICALCOLA_UNA ", STR(wk_idx_fix_max)," no_agganciati //Set_Finitura_Frontale_Stripes ", STR(wk_idx_fix_max), " - ", NOME(ATTUALE())))

      // 4 - Setto GEST relative alle fasce
      GOSUB Set_Gest_C180_Frontale_Stripes

      ScriviSuLog( $wk_log , $wk_log_proc , "END")
   }

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

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM001;SM080"
      CAT_VM_sel = ""

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_man", ATTUALE(), 1, "ManigliaFLAPP")
      NEAR_GLOBALE2( "wk_griglia", ATTUALE(), 1, "Griglia_Areazione")

      if( wk_man > 0 )     { AddVal_CAT_VM_sel( CAT_VM_sel , "SM001") }
      if( wk_griglia > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM080") }

      GOSUB Gest_CAT_VM
   }

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

      CAT_VM_var = "C180"
      wk_vm_var = GetVarGest(CAT_VM_var)
      if( VAR_EXIST( ATTUALE(), wk_vm_var) == 0 )             { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), wk_vm_var) ) { DEL_VAR_MODIFICATE( ATTUALE(), wk_vm_var) }

      CAT_VM_opz = "WW003;ST002;ST003;ST004;ST005;ST006;ST007;ST008;ST009;ST010"
      CAT_VM_sel = "WW003"

      COMPONENTI2( "wk_stripes", ATTUALE(), "Fascia_Frontale_Stripes")

      if( wk_stripes > 1 )
      {
         wk_vm_val       = "ST000"

         wk_stripes_nstr = STR(wk_stripes)
         if( wk_stripes > 10 ) { wk_stripes_nstr = "10" }

         wk_vm_val_len       = STRLEN(wk_vm_val)
         wk_stripes_nstr_len = STRLEN(wk_stripes_nstr)

         CAT_VM_sel = STRCAT( LEFT( wk_vm_val, wk_vm_val_len-wk_stripes_nstr_len), wk_stripes_nstr)
      }

      GOSUB Gest_CAT_VM
   }

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

      CAT_VM_var = "C181"
      wk_vm_var = GetVarGest(CAT_VM_var)
      if( VAR_EXIST( ATTUALE(), wk_vm_var) == 0 )             { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), wk_vm_var) ) { DEL_VAR_MODIFICATE( ATTUALE(), wk_vm_var) }

      CAT_VM_opz = "ST000"
      CAT_VM_sel = ""

      COMPONENTI2( "wk_stripes", ATTUALE(), "Fascia_Frontale_Stripes")

      if( wk_stripes > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , CAT_VM_opz) }

      GOSUB Gest_CAT_VM
   }
   //} CUCINA - ANTE STRIPES

   PROCEDURA Set_Rev_NowNastro_Gest_C179
   {
      //Devo settare la revisione, esco dopo

      //0 - Controlli preliminari
      wk_archetipo_check = Is_In_StrArray( NOME(ATTUALE()), $Set_Rev_NowNastro_Gest_C179, ";")
      wk_archetipo_fix_check = Is_In_StrArray( NOME(ATTUALE()), $Set_Rev_NowNastro_Gest_C179_Fix, ";")

      if( wk_archetipo_check + wk_archetipo_fix_check == 0 ) { EXITSUB() }

      // 1 - Revisione, setto sempre
      if( VAR_EXIST( ATTUALE(), "VAR_Revisione_NowNastro") == 0 )
      {
         VAR_CREATE_NUM( ATTUALE(), "VAR_Revisione_NowNastro", 0, $MODE_NONE, "")
      }

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Now_Nastro", "VAR_Revisione_NowNastro")

      // 2 - Componenti
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 ) { EXITSUB() }

      wk_pan = 0  //Pannelli
      wk_fin = 0  //Finitura

      COMPONENTI2( "wk_cmp", ATTUALE(), "*")

      wk_i = 1
      while( wk_i <= wk_cmp )
      {
         wk_cmp_att_idx  = wk_cmp[wk_i]
         wk_cmp_att_nome = NOME(wk_cmp_att_idx)

         if( Is_In_StrArray( wk_cmp_att_nome, $Set_Rev_NowNastro_Gest_C179_Pan_Test, ";") ) { AddItem2Array( ATTUALE(), "wk_pan", wk_cmp_att_idx, "") }
         if( Is_In_StrArray( wk_cmp_att_nome, $Set_Rev_NowNastro_Gest_C179_Fin_Test, ";") ) { AddItem2Array( ATTUALE(), "wk_fin", wk_cmp_att_idx, "") }

         wk_i = wk_i + 1
      }

      if( wk_fin <= 1
        & wk_archetipo_fix_check == 0 )        { EXITSUB() }

      // 3 - Variabile gestionale
      VarAdd = "GEST_C179"
      if( VAR_EXIST( ATTUALE(), VarAdd) == 0 ) { EXITSUB() }

      // 3.1 - Per il momento elimino scelta utente
      if( IS_VAR_FIXED( ATTUALE(), VarAdd) ) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      // 3.2 - Valore, BC005 - Pomice | AC005 - Alluminio
      gest_C179 = "__"

      //non ho nastro se fascia unica o se il numero di pannelli è uguali a quello delle fasce di finitura
      //sempre abilitato su archetipi specifici

      wk_check = wk_archetipo_fix_check
      if( wk_fin > 1 & wk_fin != wk_pan ) { wk_check = wk_check + 1 }

      if( wk_check > 0 )
      {
        gest_C179 = "AC005"
        if( VAR_Revisione_NowNastro > 0 ) { gest_C179 = "BC005" }
      }

      // 3.3 - Assegnazione
      wk_val_att = VAR_VAL_STR( ATTUALE(), VarAdd)
      if( gest_C179 != wk_val_att )
      {
         GEST_C179 = gest_C179
         GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Ctrl_Cuc_ColFrigo_Check_Eldom
   {
      STRUTTURE("$wk_strutture")
      if( $wk_strutture == 0 ) { EXITSUB() }

      $wk_CG_Nome    = "Ctrl_Cuc_ColFrigo_Check_Eldom"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Colonna frigo, eldom troppo alto, contattare ufficio tecnico."


      $wk_strutture_num = 1
      $wk_strutture_nome_check = "ScoccaT_ColFrigo"
      while( $wk_strutture_num <= $wk_strutture )
      {
         $wk_struttura_att = $wk_strutture[$wk_strutture_num]

         if( Is_In_StrArray( NOME($wk_struttura_att), $wk_strutture_nome_check, ";") )
         {
            $wk_struttura_YVanoRip = VAR_VAL( $wk_struttura_att, "YVanoRip")
            $wk_struttura_YVanoRip = $wk_struttura_YVanoRip + $Cuc_Spe_Fnd

            if( $wk_struttura_YVanoRip < 0 ) { AddItem2Array_IfNotExist( -1, "wk_CG_Items", $wk_struttura_att, "") }
         }

         $wk_strutture_num = $wk_strutture_num + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_Cuc_Isola_Singola
   {
      $wk_cuc_basi_sosp_cs_nome = "ScoccaT_B*;Cuc_ModuloGlass;!ScoccaT_BaseTamponamento"

      WITH_VAR( "$wk_cuc_basi_sosp_cs", "TipoScocca", $num, 1, "3")
      if( $wk_cuc_basi_sosp_cs == 0 ) { EXITSUB() }

      //Trovo le basi sx
      $wk_cuc_basi_sosp_cs_sx  = 0
      $wk_cuc_basi_sosp_cs_num = 1
      while( $wk_cuc_basi_sosp_cs_num <= $wk_cuc_basi_sosp_cs )
      {
         $wk_cuc_basi_sosp_cs_att = $wk_cuc_basi_sosp_cs[$wk_cuc_basi_sosp_cs_num]
         $wk_cuc_basi_sosp_cs_att_idx_sx = VAR_VAL( $wk_cuc_basi_sosp_cs_att, "idx_sx")

         if( Is_In_StrArray( NOME($wk_cuc_basi_sosp_cs_att), $wk_cuc_basi_sosp_cs_nome, ";") )
         {
            if( IS_IDX($wk_cuc_basi_sosp_cs_att_idx_sx) == 0
              | Is_In_StrArray( NOME($wk_cuc_basi_sosp_cs_att_idx_sx), $wk_cuc_basi_sosp_cs_nome, ";") == 0 ) { AddItem2Array_IfNotExist( -1, "wk_cuc_basi_sosp_cs_sx", $wk_cuc_basi_sosp_cs_att, "") }
         }

         $wk_cuc_basi_sosp_cs_num = $wk_cuc_basi_sosp_cs_num + 1
      }

      if( $wk_cuc_basi_sosp_cs_sx == 0 ) { EXITSUB() }

      //Calcolo lunghezza della composizione
      $wk_cuc_basi_sosp_cs_sx_num = 1
      while( $wk_cuc_basi_sosp_cs_sx_num <= $wk_cuc_basi_sosp_cs_sx )
      {
         $wk_CG_Nome    = "Ctrl_Cuc_Isola_Singola"
         $wk_CG_Blocca  = 0
         $wk_CG_Items   = 0
         $wk_CG_Tipo    = "BLOCCO"
         $wk_CG_Msg     = "Isola %s sospesa deve essere larga almeno %smm, lunghezza attuale: %smm"

         $wk_cuc_basi_sosp_cs_sx_att = $wk_cuc_basi_sosp_cs_sx[$wk_cuc_basi_sosp_cs_sx_num]

         $wk_cuc_basi_sosp_cs_cmp          = 0
         $wk_cuc_basi_sosp_cs_cmp_lun      = 0
         $wk_cuc_basi_sosp_cs_cmp_isola    = 0
         $wk_cuc_basi_sosp_cs_cmp_speciale = 0
         $wk_cuc_basi_sosp_cs_cmp_verMax   = VAR_VAL( $wk_cuc_basi_sosp_cs_sx_att, "Cucina_Versione")

         $wk_cuc_basi_sosp_cs_next_idx = $wk_cuc_basi_sosp_cs_sx_att
         $wk_cuc_basi_sosp_cs_limite = 99
         while( $wk_cuc_basi_sosp_cs_limite > 0
              & IS_IDX($wk_cuc_basi_sosp_cs_next_idx) )
         {
            $wk_cuc_basi_sosp_cs_cmp_lun      = $wk_cuc_basi_sosp_cs_cmp_lun + VAR_VAL( $wk_cuc_basi_sosp_cs_next_idx, "X")
            $wk_cuc_basi_sosp_cs_cmp_isola    = $wk_cuc_basi_sosp_cs_cmp_isola + VAR_VAL( $wk_cuc_basi_sosp_cs_next_idx, "ConBarraIsola")
            $wk_cuc_basi_sosp_cs_cmp_speciale = $wk_cuc_basi_sosp_cs_cmp_speciale + VAR_VAL( $wk_cuc_basi_sosp_cs_next_idx, "FLAG_Speciale")
            $wk_cuc_basi_sosp_cs_cmp_ver      = VAR_VAL( $wk_cuc_basi_sosp_cs_next_idx, "Cucina_Versione")
            $wk_cuc_basi_sosp_cs_cmp_verMax   = SE_NUM( $wk_cuc_basi_sosp_cs_cmp_ver > $wk_cuc_basi_sosp_cs_cmp_verMax, $wk_cuc_basi_sosp_cs_cmp_ver, $wk_cuc_basi_sosp_cs_cmp_verMax)
            AddItem2Array( -1, "wk_cuc_basi_sosp_cs_cmp", $wk_cuc_basi_sosp_cs_next_idx, "")

            if( VAR_EXIST( $wk_cuc_basi_sosp_cs_next_idx, "idx_dx") )
            {
               $wk_cuc_basi_sosp_cs_next_idx = VAR_VAL( $wk_cuc_basi_sosp_cs_next_idx, "idx_dx")
               if( Is_In_StrArray( NOME($wk_cuc_basi_sosp_cs_next_idx), $wk_cuc_basi_sosp_cs_nome, ";") == 0 ) { $wk_cuc_basi_sosp_cs_next_idx = -1 }
            }
            else
            {
               $wk_cuc_basi_sosp_cs_next_idx = -1
            }

            $wk_cuc_basi_sosp_cs_limite = $wk_cuc_basi_sosp_cs_limite - 1
         }

         $wk_cuc_basi_sosp_cs_cmp_tipo    = "singola"
         //A listino sarebbe 2208, ma diverse specifiche prevedono isole singole da 1840 (vedi snack)
         //$wk_cuc_basi_sosp_cs_cmp_lun_max = 2208
         $wk_cuc_basi_sosp_cs_cmp_lun_max = SE_NUM( $wk_cuc_basi_sosp_cs_cmp_verMax > 2, 1800, 1840)
         if( $wk_cuc_basi_sosp_cs_cmp_isola > 0 )
         {
            $wk_cuc_basi_sosp_cs_cmp_tipo    = "doppia"
            $wk_cuc_basi_sosp_cs_cmp_lun_max = SE_NUM( $wk_cuc_basi_sosp_cs_cmp_verMax > 2, 1500, 1472)
         }

         if( $wk_cuc_basi_sosp_cs_cmp_lun < $wk_cuc_basi_sosp_cs_cmp_lun_max )
         {
            MergeArray2Array( -1, "wk_cuc_basi_sosp_cs_cmp", "wk_CG_Items")

            if( $wk_cuc_basi_sosp_cs_cmp_speciale > 0 ) { $wk_CG_Tipo = "NO_BLOCCO" }

            $wk_CG_Blocca = 1
            $wk_CG_Msg = PRINTF( $wk_CG_Msg, STRCAT( $wk_cuc_basi_sosp_cs_cmp_tipo, ";", STR($wk_cuc_basi_sosp_cs_cmp_lun_max), ";", STR($wk_cuc_basi_sosp_cs_cmp_lun)), ";")

            GOSUB CG_CFO_FineControllo
         }

         $wk_cuc_basi_sosp_cs_sx_num = $wk_cuc_basi_sosp_cs_sx_num + 1
      }
   }

   PROCEDURA Cuc_AntaSingola_Alleggerita
   {
      if( IS_VAR_FIXED( idx_att, "Alleggerita")) { EXITSUB() }

      if( UN_PADRE("ScoccaT_ColFrigo")
        | UN_PADRE("VanoFrigo_ColFalegnameria"))
      {
         wk_tipoanta = VAR_VAL_STR( PADRE(ATTUALE(),2), "GEST_C031")
         wk_melaminico = VAR_VAL( PADRE(ATTUALE(),2), "VAR_Melaminico")

         if( wk_melaminico == 0 )
         {
            if( wk_tipoanta == "FR001")
            {
              if( Y >= 1939
                | X > 700 )    { Alleggerita = 1 }
            }
            else
            {
               if( X > 700 )   { Alleggerita = 1 }
            }
         }
      }

      while( Cucina_Versione > 2)
      {
         // 0 - Alleggerita da composto
         Alleggerita = VAR_VAL( idx_att, "Var_Alleggerita")
         if( Alleggerita > 0)                   { break }

         // 1 - Alleggerita per archetipo
         if( UN_PADRE("ScoccaT_C*") != 1)       { break }

         // 2 - Alleggerita da finitura
         wk_fin_val_topl = VAR_VAL_STR( idx_pdr_gest, GetVarGest(FIN_var))
         if( IS_MATCH( wk_fin_val_topl, "LC*")) { break }

         // 3 - Alleggerita per dimensione
         Alleggerita = SE_NUM( X > 700, 1, 0)     break
      }
   }

   PROCEDURA Cuc_Anta_Dim
   {
      L_Anta_SX = 0

      if( Cucina_Versione > 2) { GOSUB Cucina_2_5_Anta_Dim  EXITSUB() }

      // Now asimmetrica
      if( TipoFrontale == 3)
      {
         if( X >= Sdoppia & FAttSdoppia == 1)
         {
            if( X <= 707)            { L_Anta_SX = 227 }
            if( X > 707 & X <= 897)  { L_Anta_SX = (X - $Cuc_Aria_Ant_Ant_X)/2 }
            if( X > 897 & X <= 997)  { L_Anta_SX = 497 }
            if( X > 997 & X <= 1197) { L_Anta_SX = 697 }
         }
      }

      // Now varia
      if( TipoFrontale == 4)
      {
         wk_xcmp_col = VAR_VAL( PADRE(ATTUALE(),1), "X_Cmp")
         wk_x_col = VAR_VAL( PADRE(ATTUALE(),1), "X")
         wk_ridx_col = wk_xcmp_col - wk_x_col
         if( X >= Sdoppia & FAttSdoppia == 1 & wk_ridx_col > 0)
         {
            wk_xant_cmp = (wk_xcmp_col - 2*$Cuc_Aria_Ant_X - $Cuc_Aria_Ant_Ant_X)/2
            L_Anta_SX = X - wk_xant_cmp - $Cuc_Aria_Ant_Ant_X
         }
      }

      // Now asimmetrica con vetrinetta
      if( TipoFrontale == 6)
      {
         wk_xcmp_col = VAR_VAL( PADRE(ATTUALE(),1), "X_Cmp")
         wk_x_col = VAR_VAL( PADRE(ATTUALE(),1), "X")
         wk_ridx_col = wk_xcmp_col - wk_x_col

         if( X >= Sdoppia & FAttSdoppia == 1)
         {
            if( X > 707 & X <= 897) { L_Anta_SX = 447 }
            if( X > 897 & X <= 997)
            {
               L_Anta_SX = 497
               if( wk_ridx_col > 0) { L_Anta_SX = 497 - wk_ridx_col }
               if( X < 947)         { L_Anta_SX = 447 }
            }
            if( X > 997 & X <= 1197)
            {
               L_Anta_SX = 597
               if( wk_ridx_col > 0) { L_Anta_SX = 597 - wk_ridx_col }
               if( X < 1097)        { L_Anta_SX = 497 }

            }
         }
      }
   }
}

Funzioni
{
   void Dump ( number Level, number DumpIdx, string FileName, number Recursive )
   {
      Space = ""
      BreadCrumb = ""

      i = 1
//      while( i <= Level & Level > 0 )
      while( i <= Level )
      {
         Space = STRCAT(Space, "   ")
         IdxPadre = PADRE(DumpIdx, Level - i + 1)
         BreadCrumb = STRCAT(BreadCrumb, " -> ", APICI(), NOME(IdxPadre), APICI())
         i = i + 1
      }

      if(  VAR_EXIST(DumpIdx, "cmp_name") == 1  )  { CmpName = STRCAT("   cmp_name = ", APICI(), VAR_VAL_STR(DumpIdx, "cmp_name"), APICI()) }
      else                                         { CmpName = "" }

      if( VAR_EXIST(DumpIdx, "ORD_COD") == 1 )  { OrdCod = STRCAT("   ORD_COD = ", APICI(), VAR_VAL_STR(DumpIdx, "ORD_COD"), APICI()) }
      else                                      { OrdCod = "" }

      FILE_APPEND(FileName, STRCAT(Space, "----------------------------------------------------------------------------------------"))
      FILE_APPEND(FileName, STRCAT(Space, "Level = ", STR(Level), "   Idx = ", STR(DumpIdx), CmpName, OrdCod, " (", BreadCrumb, " -> ", APICI(), NOME(DumpIdx), APICI(), ")"))
      FILE_APPEND(FileName, STRCAT(Space, "----------------------------------------------------------------------------------------"))
      FILE_APPEND(FileName, STRCAT(Space, "{"))

      LISTA_VARIABILI(DumpIdx, 0, "DumpArray", "*")

      i = 1
      while( i <= DumpArray )
      {
         var = DumpArray[i]
         var_type = VAR_TYPE(DumpIdx, var)

         val = ""

         // var. numerica
         if( var_type == 0 )   { val = STR(VAR_VAL(DumpIdx, var)) }

         // var. stringa
         if( var_type == 1 )   { val = STRCAT(APICI(), VAR_VAL_STR(DumpIdx, var), APICI()) }

         // var. punto
         if( var_type == 2 )   { val = STRCAT("[", STR(VAR_VAL(DumpIdx, STRCAT(var, ".x"))), ", ", STR(VAR_VAL(DumpIdx, STRCAT(var, ".y"))), ", ", STR(VAR_VAL(DumpIdx, STRCAT(var, ".z"))), "]") }

         FILE_APPEND(FileName, STRCAT(Space, "   ", var, " = ", val))

         i = i + 1
      }

      if( Recursive > 0 )
      {
         // creo l'albero componenti in maniera ricorsiva
         COMPONENTI2("DumpComp", DumpIdx, "*")

         if( DumpComp > 0 )
         {
            i = 1
            while( i <= DumpComp )
            {
               Dump(Level + 1, DumpComp[i], FileName, Recursive)
               i = i + 1
            }

            FILE_APPEND(FileName, STRCAT(Space, "}"))
         }
         else
         {
            FILE_APPEND(FileName, STRCAT(Space, "}"))
         }
      }
      else
      {
         FILE_APPEND(FileName, STRCAT(Space, "}"))
      }
   }

   // Setto la revisione incrementale
   number RevisioneInc ( number Idx )
   {
      // 0 - Variabili
      Var = "REV"
      Val = VAR_VAL(Idx, Var)

      VAR_VALUE_SET(Idx, Var, Val)
      Result = Val

      //      COMANDO2(STRCAT("LOGMSG TCA_Revisione | Idx=", STR(Idx), " | Var=", Var, " | Val=", STR(Val), " | ACTION()=", STR(ACTION()), " | CMD()=", STR(CMD()), " | TGEO=", STR($TGEO), " | ", $TGEO_Data_Importazione, "=", STR($TGEO_Data_Importazione)))

      // 1 - Controlli
      // 1.1 - Action
      if( ACTION() != 2 )               { EXITSUB() }

      // 1.2 - Cmd
      Continua = ""

      // 1.2.1 - Interattivo
      Cmd = CMD()
      if( Cmd == $CMD_INTERATTIVO )     { Continua = "INSERIMENTO INTERATTIVO" }

      if( Cmd == $CMD_DA_REDO
        & $TGEO == 0
        & $TGEO_Data_Importazione < 0 ) { Continua = "REDO TGEO IN AZIENDA"    }

      if( Continua == "" )              { EXITSUB() }

      // 2 - Setto revisione
      REVISIONE = VAR_VAL(Idx, "REVISIONE")
      if( REVISIONE == 0 )              { EXITSUB() }

      VAR_VALUE_SET(Idx, Var, REVISIONE)
      COMANDO2( STRCAT( "VAR_CHANGE 1 ", STR(Idx), " ", Var, "=", STR(REVISIONE), " //RevisioneInc ", NOME(Idx), ", Continua: ", Continua))

      Result = REVISIONE
   }

   //TEST // [ LP 31/03/2031 - Gestione dei fianchi attrezzati con basi sovrapposte/isola
   //TEST void CtrlLavFiancoBasiYZ ( number idx , string array, string asse, string verso )
   //TEST {
   //TEST    // la faccia della base doppia (bifacciale) è sempre contraria
   //TEST
   //TEST    FF_PosizioneSD_Bif = "SX"
   //TEST
   //TEST    // La scocca che "comanda" in termini di orientamento è la prima scocca selezionata "FF_ScoccaSx_##1"
   //TEST    FF_idx_base_ref = VAR_VAL(idx, STRCAT(array, "_##1"))
   //TEST
   //TEST    // da calcolare/dentificare in maniera apposita, per diversificare dal bifacciale/base doppia.
   //TEST    FF_ScoccheInY = 0     VAR_VALUE_SET(idx, "FF_ScoccheInY", 0)
   //TEST    FF_ScoccheInZ = 0     VAR_VALUE_SET(idx, "FF_ScoccheInZ", 0)
   //TEST
   //TEST    scocca = VAR_VAL(idx, array)
   //TEST
   //TEST    // ciclo le basi e costruisco gli array
   //TEST    i = 1
   //TEST    while( i <= scocca )
   //TEST    {
   //TEST       idx_tmp = VAR_VAL(idx, STRCAT(array, "_##", STR(i)))
   //TEST
   //TEST       // creo l'array degli elementi su base doppia
   //TEST       // se l'angolo è opposto significa che sono sulla base doppia
   //TEST       if( ANG_TOT2(FF_idx_base_ref) != ANG_TOT2(idx_tmp) )
   //TEST       {
   //TEST          FF_ScoccheInZ = FF_ScoccheInZ + 1
   //TEST          VAR_VALUE_SET(idx, "FF_ScoccheInZ", FF_ScoccheInZ)
   //TEST          VAR_CREATE_NUM(idx, STRCAT("FF_ScoccheInZ_##", STR(FF_ScoccheInZ)), idx_tmp, $MODE_NONE, "")
   //TEST       }
   //TEST       else
   //TEST       {
   //TEST          FF_ScoccheInY = FF_ScoccheInY + 1
   //TEST          VAR_VALUE_SET(idx, "FF_ScoccheInY", FF_ScoccheInY)
   //TEST          VAR_CREATE_NUM(idx, STRCAT("FF_ScoccheInY_##", STR(FF_ScoccheInY)), idx_tmp, $MODE_NONE, "")
   //TEST       }
   //TEST
   //TEST       i = i + 1
   //TEST    }
   //TEST
   //TEST    // dvo ordinare gli array PRIMA di chiamare le evntuali funzioni
   //TEST    if( FF_ScoccheInY > 0 )
   //TEST    {
   //TEST       SORT_POINT(base_0, "FF_ScoccheInY", "base_0")
   //TEST       AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInY", "Y", "SX")
   //TEST    }
   //TEST
   //TEST    if( FF_ScoccheInZ > 0 )
   //TEST    {
   //TEST       SORT_POINT(base_0, "FF_ScoccheInZ", "base_0")
   //TEST       AttrLavFiancoBasiYZ(idx_att, "FF_ScoccheInZ", "Z", "SX")
   //TEST    }
   //TEST }
   //TEST
   //TEST // ] LP 31/03/2031 - Gestione dei fianchi atrezzati con basi sovrapposte/isola




   // [ LP 22/03/2021 - caso di fianco di finitura che copre più basi sovrapposte in altezza
   // caso di fianco di finitura che copre più basi sovrapposte in altezza
   // con gestione di un unico lamierino ma più gruppi lavorazione
   // Da capire come gestire il fatto di 2 scocche per sapere se le scocche si
   // sviluppano in profondità (Caso dell'isola/base doppia),
   // o in altezza come delle basi sovrapposte

   void AttrLavFiancoBasiYZ ( number idx , string array, string asse, string verso )
   {
      if( VAR_EXIST(idx, array) != 1 )                       { EXIT() }

      if( VAR_VAL_STR(idx, "FF_Materiale") != "WILDWOOD" )   { EXIT() }

// LP: devo chiamarlo fuori....
//      // ordino in altezza l'array
//      SORT_POINT(base_0, "FF_ScoccaSx", "base_0")

      WITH_VAR_LOCAL(idx, "wk_GruppiLavAttr", "FF_GruppoLavAttr", $num_con_figli, 1, "1")

      //DISPLAY2(STRCAT("FF_GruppoLavAttr=", STR(FF_GruppoLavAttr), "\nACTION()=", STR(ACTION()), "\nCMD()=", STR(CMD())))

      // per fare il match non devo considereare il gruppo lavorazioni strutturale
      scocche = VAR_VAL(idx, array)
      VAR_VALUE_SET(idx, STRCAT("FF_Scocche", asse, verso), scocche)

      // Disattivo le lavoazioni (trafile) sull'elemento strutturale
      // il quale conterrà soltanto la lamiera unica comune a tutte le basi
      // FF_DisattivaSoloLav = 1
      VAR_VALUE_SET(idx, "FF_DisattivaSoloLav", 1)

      i = 1

      attrezzati = 0

      while( i <= scocche )
      {
         var = STRCAT(array, "_##", STR(i))
         idx_tmp = VAR_VAL(idx, var)

         // creo gli idx dei fianchi come variabili di riferimento dei gruppi di lavorazioni,
         // che vengono letti nell'attrezza dei gruppi lavorazione
         VAR_VALUE_SET(idx, STRCAT("FIN_idx_ref_", asse, "_", STR(i)), idx_tmp)

         // se necessario attrezzo
         if( wk_GruppiLavAttr == 0 & VAR_VAL(-1, "__loading__") == 0 )
         {
            attrezzati = attrezzati + 1

            //COMANDO(STRCAT("LOGMSG  { INIZIO - ATTREZZO LAVORAZIONE SU IDX ", STR(idx_att)))
            // X_tmp = VAR_VAL(idx_tmp, "X")
            // Y_tmp = VAR_VAL(idx_tmp, "Y")
            // Z_tmp = VAR_VAL(idx_tmp, "Z")
            // b0_tmp = VAR_VAL(idx_tmp, "base_0.y") - base_0.y

            // DISPLAY2(STRCAT("ATTREZZO FFGruppoLavorazioni\nN° = ", STR(i), " di ", STR(FF_ScoccaSx), "\nlivello = ", STR(b0_tmp)))

            // if( asse == "Y" )   { var_to_set = "FF_GruppoLavAttrRefY" }
            // if( asse == "Z" )   { var_to_set = "FF_GruppoLavAttrRefZ" }

            var_to_set = STRCAT("FF_GruppoLavAttrRef", asse)

            COMANDO("PUSH_SITUAZIONE")
            COMANDO(STRCAT("SETTA ", STR(idx)))
            COMANDO("ELEMENTO_I FFGruppoLavorazioni")
            COMANDO("STRUTTURA_I")
            COMANDO(STRCAT("VAR_FIX ", var_to_set,"=", STR(i), " FF_GruppoLavAttr=1  NO_AUTO=1"))
            COMANDO("ATTREZZA2 0")
            COMANDO("POP_SITUAZIONE")
            //COMANDO(STRCAT("LOGMSG  } FINE - ATTREZZO LAVORAZIONE SU IDX ", STR(idx_att)))
         }

         i = i + 1
      }

      if( attrezzati > 0 )   { COMANDO(STRCAT("RICALCOLA ", STR(idx), " no_agganciati    // AttrLavFiancoBasiYZ")) }
   }


   void CtrlRangeRidM2G ( number idx , string var )
   {
      var = UPPER(var)

      VarDim       = VAR_VAL_STR(idx,STRCAT("VarDim",var))
      VarMenu      = VAR_VAL_STR(idx,STRCAT("VarMenu",var))
      VarMenuFisso = VAR_VAL_STR(idx,STRCAT("VarMenuFisso",var))
      VarFlgChange = VAR_VAL(idx,STRCAT("VarFlgChange",var))

      ValDelta     = VAR_VAL(idx,STRCAT("ValDelta",var))

      //Luca 21/05/2019 gestisco eventuali casi di passaggio di Xt o Zt
      ord_varmax = VAR_VAL(idx,STRCAT("ORD_",var,"MAX"))
      ord_varmin = VAR_VAL(idx,STRCAT("ORD_",var,"MIN"))
      if( STRLEN(var)==2 )
      {
         ord_varmax = VAR_VAL(idx,STRCAT("ORD_",LEFT(var,1),"MAX"))
         ord_varmin = VAR_VAL(idx,STRCAT("ORD_",LEFT(var,1),"MIN"))
      }

      //Eventuali limiti gestiti a composto
      if ( VAR_EXIST(idx,STRCAT("Lim",var,"_Inf"))
         & VAR_EXIST(idx,STRCAT("Lim",var,"_Sup")) )
      {
         ord_varmax = VAR_VAL(idx,STRCAT("Lim",var,"_Sup"))
         ord_varmin = VAR_VAL(idx,STRCAT("Lim",var,"_Inf"))
      }

      ord_varmax = ord_varmax + ValDelta
      ord_varmin = ord_varmin + ValDelta

      //mi salvo le misure min/max
      VAR_CREATE_NUM(idx,STRCAT("CR_",var,"_min"),ord_varmin,0,"")
      VAR_CREATE_NUM(idx,STRCAT("CR_",var,"_max"),ord_varmax,0,"")

      //REGOLE ATTIVAZIONE EDITABILITA'
      edit_var = 0

      if( edit_var==0 )
      {
         //1) se c'è categoria di variazione dimensionale
         if( VarFlgChange==1 )   { edit_var = 1 }
      }

      if( edit_var==0 & VAR_VAL(idx,STRCAT("NoCtrMis",var,"DaGest"))==0 )
      {
         //2) se c'è la dimensione gestionale std a 0, per convenzione significa che è un range
         if( VAR_EXIST(idx,STRCAT("ORD_",var)) )
         {
            if( VAR_VAL(idx,STRCAT("ORD_",var))==0 )   { edit_var = 1 }
         }
      }

      if( edit_var==0 )
      {
         //3) misura dichiarata come 'al metro'
         ord_misametro = VAR_VAL_STR(idx,"ORD_MISAMETRO")
         if( STR_INDEX_OF(ord_misametro,0,var)>-1 )   { edit_var = 1 }
      }

      if( edit_var )
      {
         if( VAR_MODE(idx,VarDim)!=$MODE_NONE )
         {
            VAR_SET_MODE(idx,VarDim,$MODE_USER)
            VAR_SET_MENU(idx,VarDim,"")

            if( ord_varmin>0 & ord_varmax>0 ) { VAR_SET_MENU(idx,VarDim,STRCAT("(",STR(ord_varmin),"-",STR(ord_varmax),")")) }
            else
            {
               if( ord_varmin>0 )   { VAR_SET_MENU(idx,VarDim,STRCAT("(",STR(ord_varmin),"-)")) }
               if( ord_varmax>0 )   { VAR_SET_MENU(idx,VarDim,STRCAT("(-",STR(ord_varmax),")")) }
            }

            if( ord_varmin>=ord_varmax & ord_varmin>0 )
            {
               VAR_SET_MODE(idx,VarDim,$MODE_SHOWALWAYS)
               VAR_SET_MENU(idx,VarDim,"")
            }

            if( STRLEN(VarMenu)>0 )
            {
               VAR_SET_MODE(idx,VarDim,$MODE_MISURE+$MODE_USER)
               VAR_SET_MENU(idx,VarDim,STRCAT(VarMenu," ",VAR_MENU(idx,VarDim)))
            }

            if( STRLEN(VarMenuFisso)>0 )
            {
               VAR_SET_MODE(idx,VarDim,$MODE_MISURE)
               VAR_SET_MENU(idx,VarDim,VarMenuFisso)
            }
         }
      }
      else
      {
         VAR_SET_MODE(idx,VarDim,$MODE_SHOWALWAYS)
         VAR_SET_MENU(idx,VarDim,"")
      }
   }

   //Cerco l'elemento che contiene il punto point nelle variabili var1 o var2.
   //Se idx è valido, lo preferisco ripetto agli altri elementi
   number GetIdxWithPoint ( number idx , string var1 , string var2 , xyz point )
   {
      ScriviSuLog(0,"GetIdxWithPoint","START")
      ScriviSuLog(0,"GetIdxWithPoint",STRCAT("PARAMETRI   var1=",var1, "  var2=",var2, " Point=[",STR(point.x),",",STR(point.y),",",STR(point.z),"]"))

      idx_res = -1
      var_test = STRCAT( var1, "1")

      WITH_VAR( "arrb", var_test, 4, 0, "")
      if( IS_IDX(idx))
      {
         arrb = arrb + 1
         EVAL( STRCAT( "arrb_##", STR(arrb), " = ", STR(idx)))
      }

      i = 1
      while( i <= arrb)
      {
         idx_mod = arrb[i]

         ScriviSuLog(0,"GetIdxWithPoint",STRCAT("idx_mod = ",STR(idx_mod) , " " , NOME(idx_mod)))

         SET_#(idx_mod)
         j = 1
         nome_var = STRCAT(var1,STR(j))

         while ( VAR_EXIST(idx_mod,nome_var) )
         {
            //SX
            EVAL( STRCAT(" pnt_test = #",nome_var))
            dist = DISTANZA(point,pnt_test)
            if( dist < 0.1 ) { idx_res = idx_mod }

            ScriviSuLog(0,"GetIdxWithPoint",STRCAT("USO var1 " , nome_var , " pnt_test=[",STR(pnt_test.x),",",STR(pnt_test.y),",",STR(pnt_test.z),"]   dist = ",STR(dist) , "  idx_res=", STR(idx_res)))

            if( var2 != "" )
            {
               EVAL( STRCAT(" pnt_test = #",var2,STR(j)))
               dist = DISTANZA(point,pnt_test)
               if( dist < 0.1 ) { idx_res = idx_mod }
               //if( DISTANZA(point,pnt_test) < 0.1) { idx_res = idx_mod }

               ScriviSuLog(0,"GetIdxWithPoint",STRCAT("USO var2 " , var2,STR(j) , " pnt_test=[",STR(pnt_test.x),",",STR(pnt_test.y),",",STR(pnt_test.z),"]   dist = ",STR(dist) , "  idx_res=", STR(idx_res)))
            }

            j = j + 1
            nome_var = STRCAT(var1,STR(j))
         }

         i = i + 1
      }

      Result = idx_res

      ScriviSuLog(0,"GetIdxWithPoint",STRCAT("Result = ",STR(Result)))
      ScriviSuLog(0,"GetIdxWithPoint","END")
   }

   void FSN_ResetVar ( )
   {
      STRUTTURE("str")

      i = 1
      while ( i<=str )
      {
         idx = str[i]

         DEL_VAR_MODIFICATE(idx,"FSN*")
         VAR_VALUE_SET(idx,"FSN_flag_SX",0)
         VAR_VALUE_SET(idx,"FSN_flag_DX",0)

         i = i + 1
      }

      COMANDO("RIGENERA")
      COMANDO("RIGENERA")
   }

   //Luca 08/07/2019
   //verifico disalianementro tra basi
   //verso indica se idx2 è posizionata a dx o a sx rispetto idx1
   number BasiDisallineateRetro ( number idx1 , number idx2 , number verso )
   {
      Result = 0

      if( IS_IDX(idx1)==0 | IS_IDX(idx2)==0 ) { EXITSUB() }

      SET_#(idx1)
      p1 = #base_3
      if( verso<0 ) { p1 = #base_0 }
      p1.y = 0


      SET_#(idx2)
      p2 = #base_0
      if( verso<0 ) { p2 = #base_3 }
      p2.y = 0

      if( DISTANZA(p1,p2)>0.1 ) { Result = 1 }

      //verifico se sono basi contrapposte
      basi_contrapposte = 0
      ang_idx1 = ANG_TOT2(idx1)
      ang_idx2 = ANG_TOT2(idx2)

      if( ABS(ang_idx1-ang_idx2)>179.9
        & ABS(ang_idx1-ang_idx2)<180.1 ) { basi_contrapposte = 1 }

      if( basi_contrapposte==0 ) { EXITSUB() }

      Result = 0

      SET_#(idx1)
      p1 = #base_3
      if( verso<0 ) { p1 = #base_0 }
      p1.y = 0

      SET_#(idx2)
      p2 = #base_2
      if( verso<0 ) { p2 = #base_1 }
      p2.y = 0

      //se contrapposte devo testare il filo fianco, base_1/base_2 comprendono il frontale
      offz = $Cuc_Spe_Fro + $Cuc_Aria_Ant_Z

      p2.x = p2.x -   SENO(ANG_TOT2(idx2))*offz
      p2.z = p2.z - COSENO(ANG_TOT2(idx2))*offz

      if( DISTANZA(p1,p2)>0.1 ) { Result = 1 }


      //COMANDO2(STRCAT("LOGMSG BasiDisallineateRetro idx1=",STR(idx1),"  idx2=",STR(idx2), " Result = ",STR(Result)))
   }

   string GetParametroFirmaEldom ( string Firma , number par )
   {
      Result = ""

      Firma_save = Firma

      array_par = 0

      while ( Firma!="" )
      {
         wk_pipe = STR_INDEX_OF(Firma,0,"|")

         if( wk_pipe<0 ) { wk_pipe = STRLEN(Firma) }

         wk_par = STRMID(0,wk_pipe,Firma)

         ne = array_par + 1
         array_par = ne
         array_par[ne] = wk_par

         Firma = STRMID(wk_pipe+1,100000,Firma)
      }

      if( array_par>=par ) { Result = array_par[par] }
   }

   //trasformo in funzione per porterla richiamare da altri elementi, devo però usare il near_globale
   void FNC_VICINESXDX_cuc ( number idx_test , string match , string dove )
   {
      if( ACTION()<=0 | ACTION()==2 ) { EXITSUB() }

      // In input  idx_test,match,dove
      // In output idx_sx, idx_dx

      idx_dx = -1
      idx_sx = -1

      //nel caso di più basi a sx/dx
      //mi salvo in questa variabile sempre la più alta
      idx_alto_dx = -1
      idx_alto_sx = -1

      if( IS_IDX(idx_test)==0 ) { EXITSUB() }

      if( VAR_EXIST(idx_test,"base_0")==0 ) { EXITSUB() }
      if( VAR_EXIST(idx_test,"alto_2")==0 ) { EXITSUB() }

      SET_#(idx_test)
      if( VAR_EXIST(idx_test,"base_so")
        & VAR_EXIST(idx_test,"alto_ne") ) { bas0 = #base_so alt0 = #alto_ne }
      else                                { bas0 = #base_0  alt0 = #alto_2  }

      usa_nearg = 0
      if( VAR_EXIST(idx_test,"idx_cnear_sx") & VAR_EXIST(idx_test,"idx_cnear_dx") )
      {
         SET_#(idx_test)
         if( IS_IDX(#idx_cnear_sx) & IS_IDX(#idx_cnear_dx) )  { usa_nearg = 1 }
      }

      if( usa_nearg==0 )
      {
         EXITSUB()
      }

      SET_#(idx_test)
      BOX_MODE(0)
      NEAR_GLOBALE("ele_SX",#idx_cnear_sx,6,1,match)
      NEAR_GLOBALE("ele_DX",#idx_cnear_dx,6,1,match)

      //ordino gli array generati
      //cosi da averli in ordine di altazza
      SORT_POINT(#base_0,"ele_SX","base_3")
      SORT_POINT(#base_3,"ele_DX","base_0")

      SET_#(idx_test)

      vic_sx = ele_SX
      vic_dx = ele_DX

      if ( vic_dx>0 )
      {
         i=1

         while( i<=vic_dx )
         {
            ang_test = ANG_TOT2(idx_test)

            temp_idx=ele_DX[i]

            if( temp_idx!=idx_test )
            {
               SET_#(temp_idx)

               idx_vic = -1

               if ( STRCMP(dove,"FB")==0 )
               {
                  deltafb = ABS(#base_0.y -bas0.y)
                  if( deltafb<=$toll_filoB_VICINE )     { idx_vic=temp_idx   }
               }
               if ( STRCMP(dove,"FA")==0 )
               {
                  deltafa = ABS(#alto_2.y-alt0.y)
                  if( deltafa<=$toll_filoA_VICINE )     { idx_vic=temp_idx   }
               }

               if ( STRCMP(dove,"*")==0 )               { idx_vic=temp_idx   }

               if ( ABS(bas0.y-#alto_2.y)<1 )           { idx_vic=-1 }
               if ( ABS(alt0.y-#base_0.y)<1 )           { idx_vic=-1 }

               if( IS_IDX(idx_dx)==0 ) { idx_dx      = idx_vic }
               else                    { idx_alto_dx = idx_vic }
            }
            i=i+1
         }

         if( IS_IDX(idx_dx)==1 & IS_IDX(idx_alto_dx)==0 ) { idx_alto_dx = idx_dx }
      }

      SET_#(idx_test)
      if ( vic_sx>0 )
      {
         i=1

         //while( i<=vic_sx & idx_sx==-1)
         while( i<=vic_sx )
         {
            ang_test = ANG_TOT2(idx_test)

            temp_idx=ele_SX[i]

            if( temp_idx!=idx_test )
            {
               SET_#(temp_idx)

               idx_vic = -1

               if ( STRCMP(dove,"FB")==0 )
               {
                  deltafb = ABS(#base_0.y -bas0.y)
                  if( deltafb<=$toll_filoB_VICINE )     { idx_vic=temp_idx   }
               }
               if ( STRCMP(dove,"FA")==0 )
               {
                  deltafa = ABS(#alto_2.y-alt0.y)
                  if( deltafa<=$toll_filoA_VICINE )     { idx_vic=temp_idx   }
               }

               if ( STRCMP(dove,"*")==0 )               { idx_vic=temp_idx   }

               if ( ABS(bas0.y-#alto_2.y)<1 )           { idx_vic=-1 }
               if ( ABS(alt0.y-#base_0.y)<1 )           { idx_vic=-1 }

               if( IS_IDX(idx_sx)==0 ) { idx_sx = idx_vic }
               else                    { idx_alto_sx = idx_vic }
            }
            i=i+1
         }

         if( IS_IDX(idx_sx)==1 & IS_IDX(idx_alto_sx)==0 ) { idx_alto_sx = idx_sx }
      }

      //COMANDO2(STRCAT("LOGMSG idx_test: ",STR(idx_test), " | (",STR(ACTION()),") FNC_VICINESXDX_cuc --> idx_sx=",STR(idx_sx), " idx_dx=",STR(idx_dx)))

      if( IS_IDX(idx_sx) )      { VAR_VALUE_SET(idx_test,"idx_sx",idx_sx) }
      if( IS_IDX(idx_dx) )      { VAR_VALUE_SET(idx_test,"idx_dx",idx_dx) }
      if( IS_IDX(idx_alto_sx) ) { VAR_VALUE_SET(idx_test,"idx_alto_sx",idx_alto_sx) }
      if( IS_IDX(idx_alto_dx) ) { VAR_VALUE_SET(idx_test,"idx_alto_dx",idx_alto_dx) }
   }

   void CLED_CercaStruttureVicine ( number idx , number toll , number nr_comp )
   {
      BOX_MODE(0)
      NEAR("near",idx,toll,0,"*")

      //$CLED_debug_msg  = STRCAT("CREO LE COMPOSIZIONI -- TROVATE " ,STR(near), " STRUTTURE VICINE")
      //LogProcedura2("CLED_CalcoloTrasf")

      i = 1
      while ( i<=near )
      {
         idx_test = near[i]
         add = 0

         if( IS_MATCH(NOME(idx),"ScoccaT_*")
           | IS_MATCH(NOME(idx),"GruppoBarraIsola")
           | IS_MATCH(NOME(idx),"BarraIsola") )
         {
            if( IS_MATCH(NOME(idx_test),"ScoccaT_*")
              | IS_MATCH(NOME(idx_test),"GruppoBarraIsola")
              | IS_MATCH(NOME(idx_test),"BarraIsola") )        { add = 1 }
         }

         if( IS_MATCH(NOME(idx),"Modulo*368") )
         {
            if( IS_MATCH(NOME(idx_test),"Modulo*368") )        { add = 1 }
         }

         //$CLED_debug_msg  = STRCAT("CREO LE COMPOSIZIONI -- STRUTTURA VICINA ", NOME(idx_test) , " [",STR(idx_test), "] --> ",STR(add))
         //LogProcedura2("CLED_CalcoloTrasf")

         if( add==1 )
         {
            comp_str = VAR_VAL(idx_test,"CLED_NrComp")
            if( comp_str==0 )
            {
               VAR_VALUE_SET(idx_test,"CLED_NrComp",nr_comp)

               CLED_CercaStruttureVicine(idx_test,toll,nr_comp)
            }
         }

         i = i + 1
      }
   }

   number GetPesoAntaLvstFromDB ( number idx )
   //( number Revisione, number Idx, string Tipo, string Apertura, string Materiale, number Larghezza, number Altezza)
   {
      log = 0
      #ifdef TEC
        log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      Result = -1

      ScriviSuLog( log, "GetPesoAntaLvstFromDB", "START")

      //Parametri idx riferimento:
      ////Idx
      $wk_idx_att      = idx
      $wk_idx_topl     = GetTopLevel($wk_idx_att)
      $wk_nome_topl    = NOME($wk_idx_topl)

      ////Array parametri, dal più al meno importante.
      ////Gli ultimi $wk_param_sql_modificabili parametri verranno man mano esclusi fino ad ottenere un risultato
      $wk_param_sql_modificabili = 4
      $wk_param_sql = 6                     $wk_param_var = $wk_param_sql
      $wk_param_sql[1] = "REVISIONE"        $wk_param_var[1] = "wk_rev"
      $wk_param_sql[2] = "PADRE_NOME"       $wk_param_var[2] = "wk_nome_topl"
      $wk_param_sql[3] = "LARGHEZZA"        $wk_param_var[3] = "wk_lar"
      $wk_param_sql[4] = "ALTEZZA"          $wk_param_var[4] = "wk_alt"
      $wk_param_sql[5] = "APERTURA"         $wk_param_var[5] = "wk_apertura"
      $wk_param_sql[6] = "MATERIALE"        $wk_param_var[6] = "wk_mat"

      //Materiale solo per le basi, tipo solo per le colonne
      if( IS_MATCH( $wk_nome_topl, "ScoccaT_Col*") == 1 )
      {
        $wk_param_sql[6] = "TIPO"             $wk_param_var[6] = "wk_tipo"
      }

      ////Rev
      $wk_rev          = VAR_VAL( $wk_idx_att, "VAR_Revisione_PesoAntaLvst")

      ////Tipologia frontale
      $wk_tipo         = "36E8"
      $wk_tipo_val     = VAR_VAL( $wk_idx_att, "TipoFrontale")

      if( $wk_tipo_val > 1 )
      {
         $wk_tipo      = "NOW"
      }

      ////Apertura
      $wk_apertura     = "PUSH"
      if( VAR_VAL( $wk_idx_att, "ConManigliaFLAPP") > 0 )
      {
         $wk_apertura  = "FLAPP"
      }

      ////Materiale
      $wk_mat          = VAR_VAL_STR( $wk_idx_att, "MaterialeFrontale")

      ////Larghezza
      $wk_lar          = VAR_VAL( $wk_idx_att, "X")

      ////Altezza
      $wk_alt          = VAR_VAL( $wk_idx_att, "Y")

      ////Converto tutto in stringhe e genero query sql
      $wk_dbg_str = STRCAT("| PARAMETRI - INFO | Idx: ", STR($wk_idx_att))

      $wk_i = 1
      while( $wk_i <= $wk_param_var )
      {
         $wk_param_var_att = $wk_param_var[$wk_i]
         $wk_param_sql_att = $wk_param_sql[$wk_i]

         if( VAR_TYPE( -1, $wk_param_var_att) == 0 )
         {
            VAR_VALUESTR_SET( -1, $wk_param_var_att, STR(VAR_VAL( -1, $wk_param_var_att)))
         }

         if( log > 0 ) { $wk_dbg_str = STRCAT( $wk_dbg_str, " - ", $wk_param_sql_att, ": ", VAR_VAL_STR( -1, $wk_param_var_att)) }

         $wk_i = $wk_i + 1
      }

      ////Dbg parametri
      ScriviSuLog( log, "GetPesoAntaLvstFromDB", $wk_dbg_str)


      //Sql
      $wk_sql_db      = STRCAT($path_tab, $LagoSqlite)
      $wk_sql_tab     = "PESI_ANTELVST"
      $wk_sql_div     = ";"
      $wk_sql_val_gen = "*"

      $GetPesoAntaLvstFromDB_TollMax = 0

      ////Apro db per query
      if( SQLiteApriDb( $wk_sql_db, 1) == 0 )
      {
         ScriviSuLog( 1, "GetPesoAntaLvstFromDB", "| SQL - ERRORE | NON SONO RIUSCITO A APRIRE UNA CONNESSIONE CON IL DB")
         EXITSUB()
      }

      ////Sql: tipi padre
      ////Estraggo tutti i nome padre disponibili in sql,
      ////andrenno testati dal più specifico al più generico
      ////Query: SELECT GROUP_CONCAT(PADRE_NOME, ';') FROM (SELECT DISTINCT PADRE_NOME FROM PESI_ANTELVST WHERE PADRE_NOME != '*' ORDER BY LENGTH(PADRE_NOME) DESC)
      $wk_sql_padre_nomi = 0
      $wk_sql_col = "PADRE_NOME"
      $wk_sql_res = SQLITE_EXECUTE_STR( $wk_sql_db, STRCAT("SELECT GROUP_CONCAT(", $wk_sql_col, ", '", $wk_sql_div, "') FROM (SELECT DISTINCT ", $wk_sql_col, " FROM ", $wk_sql_tab, " WHERE ", $wk_sql_col, " != '", $wk_sql_val_gen, "' ORDER BY LENGTH(", $wk_sql_col, ") DESC)"))

      if( $wk_sql_res == "" )
      {
         ScriviSuLog( log, "GetPesoAntaLvstFromDB", STRCAT( "| SQL | ERRORE: ", SQLITE_LAST_ERR($wk_sql_db)))
         ScriviSuLog( log, "GetPesoAntaLvstFromDB", "| SQL - ERRORE | LA QUERY NON HA RESTITUITO RISULTATI, CONTROLLARE SE LA TABELLA E' POPOLATA, ESCO")
         EXITSUB()
      }

      //Integro caso generico come ultima risorsa
      $wk_sql_res = STRCAT( $wk_sql_res, $wk_sql_div, $wk_sql_val_gen)
      ScriviSuLog( log, "GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | NOMI PADRE DISPONIBILI: ", $wk_sql_res))

      STR_SPLIT( $wk_sql_res, $wk_sql_div, 1, "wk_sql_padre_nomi", -1)

      ////Sql: esegui, loop principale
      ////Testo un padre alla volta, genero il where, verifico e utilizzo la revisione massima per quel determinato where
      ////Il where diventa sempre più generico fino a che non trovo un risultato
      $wk_i = 1
      while( Result <= 0
           & $wk_i <= $wk_sql_padre_nomi )
      {
         $wk_sql_padre_nome = $wk_sql_padre_nomi[$wk_i]

         if( IS_MATCH( $wk_nome_topl, STRCAT($wk_sql_padre_nome, "*")) == 1 )
         {
            ScriviSuLog( log, "   GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | NOME PADRE TEST ATTUALE: ", $wk_sql_padre_nome))

            $wk_param_sql_modificati = 0
            while( Result <= 0
                 & $wk_param_sql_modificati <= $wk_param_sql_modificabili )
            {
               ScriviSuLog( log, "   GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | UTILIZZO ", STR($wk_param_sql_modificabili - $wk_param_sql_modificati), " PARAMETRI SU ",  STR($wk_param_sql_modificabili)))

               $wk_sql_where = STRCAT("PADRE_NOME LIKE '", $wk_sql_padre_nome, "'")

               //Parametri da utilizzare, ne utilizzo meno man mano che la query non da risultato
               $wk_j = $wk_param_sql - $wk_param_sql_modificati
               while( $wk_j > $wk_param_sql - $wk_param_sql_modificabili )
               {
                  $wk_param_sql_att = $wk_param_sql[$wk_j]
                  $wk_param_var_att = $wk_param_var[$wk_j]

                  $wk_sql_where = STRCAT( $wk_sql_where, " AND ", $wk_param_sql_att, " LIKE '", VAR_VAL_STR( -1, $wk_param_var_att), "'")

                  $wk_j = $wk_j - 1
               }

               //Revisione
               $wk_sql_revisione = SQLITE_EXECUTE_STR( $wk_sql_db, STRCAT("SELECT MAX(REVISIONE) FROM ", $wk_sql_tab, " WHERE ", $wk_sql_where, " AND REVISIONE <= ", $wk_rev))
               if( $wk_sql_revisione == "" ) { $wk_sql_revisione = "0" }
               ScriviSuLog( log, "      GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | REVISIONE TEST ATTUALE: ", $wk_sql_revisione))

               $wk_sql_where = STRCAT( $wk_sql_where, " AND REVISIONE = ", $wk_sql_revisione)

               ScriviSuLog( log, "      GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | WHERE: ", $wk_sql_where))

               Result = SQLITE_EXECUTE_STR( $wk_sql_db, STRCAT("SELECT MAX(PESO) FROM ", $wk_sql_tab, " WHERE ", $wk_sql_where))
               if( Result == "" ) { Result = -1 }
               else               { Result = ATOI(Result) }
               ScriviSuLog( log, "      GetPesoAntaLvstFromDB", STRCAT( "| SQL - INFO | RISULTATO: ", STR(Result)))

               $wk_param_sql_modificati = $wk_param_sql_modificati + 1
            }

            //Salvo la tolleranza utilizzata
            if( $wk_param_sql_modificati > VAR_VAL( -1, "GetPesoAntaLvstFromDB_TollMax") ) { $GetPesoAntaLvstFromDB_TollMax = $wk_param_sql_modificati }
         }

         $wk_i = $wk_i + 1
      }

      ////Chiudo db
      SQLITE_CLOSE($wk_sql_db)

      ScriviSuLog( log, "GetPesoAntaLvstFromDB", "END")
   }

   //Modifico l'offset di aggancio al variare di una variabile; ritorno -1 se errore, 0 se nessuno spostamento, 1 se presente spostamento
   //                              cnt_idx: idx agganciato
   //                                              var_idx: idx che contiene la variabile
   //                                                              var: nome della variabile
   //                                                                          offset: offset da modificare, ovvero X, Y o Z. Se sono punto posso anche lasciare vuoto, verrà calcolato il delta sui tre assi
   //                                                                                         moltiplicatore: moltiplico la differenza per questo valore, se 0 utilizzo direttamente valore
   number CheckStrCnt_Var ( number cnt_idx, number var_idx, string var, string offset, number moltiplicatore )
   {
         wk_func_nome = "CheckStrCnt_Var"

         // 0 - Controlli preliminari
         Result = -1

         // 0.1 - Esistenza idx con connessione
         if( IS_IDX(cnt_idx) == 0 )          { EXITSUB() }

         // 0.2 - Esistenza idx variabile
         if( var_idx != -1
           & IS_IDX(var_idx) == 0 )          { EXITSUB() }

         // 0.3 - Esistenza variabile
         if( VAR_EXIST( var_idx, var) == 0 ) { EXITSUB() }

         // 0.4 - Tipo variabile compatibile
         var_tipo = VAR_TYPE( var_idx, var)

         // 0.4.1 - Se sono stringa devo contenere un numero
         if( var_tipo == 1
           & IsNumber( var_idx, var) <= 0 )  { EXITSUB() }

         // 0.5 - Offset corretto
         offset = LOWER(offset)

         if( offset != ""
           & offset != "x"
           & offset != "y"
           & offset != "z" )                 { EXITSUB() }

         // 0.5.1 - Se non sono punto ho bisogno di offset
         if( var_tipo != 2
           & offset == "" )                  { EXITSUB() }

         // 0.6 - Aggancio
         // 0.6.1 - Idx a cui sono agganciato
         agg_idx = AGGANCIATA( cnt_idx, "*")
         if( IS_IDX(agg_idx) == 0 )          { EXITSUB() }

         // 0.6.2 - Stringa di connessione
         cnt_str = UPPER( CNT_STR(cnt_idx))
         if( cnt_str == "" )                 { EXITSUB() }

         // 1 - Variabili e valori
         // 1.1 - Variabile precedente, per il confronto
         var_prev      = STRCAT( "wk_", wk_func_nome, "_", STR(cnt_idx), "_", STR(var_idx), "_", var, "_prev") //Da valutare se specializzare ulterioremente
         var_prev_glob = STRCAT( "$", var_prev)

         // 1.2 - Valore attuale
         var_val = ""
         var_val_num = 0
         var_val_pnt = [ 0, 0, 0]

         if( var_tipo == 0 ) { var_val = VAR_VAL( var_idx, var)     var_val_num = var_val       var_val_pnt = [ var_val_num, var_val_num, var_val_num] }
         if( var_tipo == 1 ) { var_val = VAR_VAL_STR( var_idx, var) var_val_num = ATOI(var_val) var_val_pnt = [ var_val_num, var_val_num, var_val_num] }
         if( var_tipo == 2 )
         {
            var_val   = [ 0, 0, 0]
            var_val.x = VAR_VAL( var_idx, STRCAT( var, ".x"))
            var_val.y = VAR_VAL( var_idx, STRCAT( var, ".y"))
            var_val.z = VAR_VAL( var_idx, STRCAT( var, ".z"))

            var_val_pnt = var_val
         }

         // 1.3 - Se la variabile con il valore precedente non esiste o non è del tipo corretto, non posso confrontare; quindi la assegno ed esco.
         var_prev_tipo = VAR_TYPE( -1, var_prev)

         if( VAR_EXIST( -1, var_prev) == 0
           | var_prev_tipo != var_tipo )
         {
            EVAL( STRCAT( var_prev_glob, " = var_val"))
            EXITSUB()
         }

         Result = 0

         // 1.4 - Valore precedente
         var_prev_val     = ""
         var_prev_val_num = 0
         var_prev_val_pnt = [ 0, 0, 0]

         if( var_prev_tipo == 0 ) { var_prev_val = VAR_VAL( -1, var_prev)     var_prev_val_num = var_prev_val       var_prev_val_pnt = [ var_prev_val_num, var_prev_val_num, var_prev_val_num] }
         if( var_prev_tipo == 1 ) { var_prev_val = VAR_VAL_STR( -1, var_prev) var_prev_val_num = ATOI(var_prev_val) var_prev_val_pnt = [ var_prev_val_num, var_prev_val_num, var_prev_val_num] }
         if( var_prev_tipo == 2 )
         {
            var_prev_val   = [ 0, 0, 0]
            var_prev_val.x = VAR_VAL( -1, STRCAT( var_prev, ".x"))
            var_prev_val.y = VAR_VAL( -1, STRCAT( var_prev, ".y"))
            var_prev_val.z = VAR_VAL( -1, STRCAT( var_prev, ".z"))

            var_prev_val_pnt = var_prev_val
         }

         // 1.5 - Delta tra valore attuale e valore precedente
         var_val_delta = var_val_pnt

         if( moltiplicatore != 0 )
         {
            var_val_delta.x = moltiplicatore * (var_val_pnt.x - var_prev_val_pnt.x)
            var_val_delta.y = moltiplicatore * (var_val_pnt.y - var_prev_val_pnt.y)
            var_val_delta.z = moltiplicatore * (var_val_pnt.z - var_prev_val_pnt.z)
         }

         if( offset != ""
           & offset != "x" ) { var_val_delta.x = 0 }

         if( offset != ""
           & offset != "y" ) { var_val_delta.y = 0 }

         if( offset != ""
           & offset != "z" ) { var_val_delta.z = 0 }

         // 1.6 - Nessuno spostamento, esco
         if( var_val_delta.x == 0
           & var_val_delta.y == 0
           & var_val_delta.z == 0 ) { EXITSUB() }

         // 2 - Modifico la connessione
         // 2.1 - Connessione attuale
         cnt_sd     = GetParamStrCnt( cnt_str, "SD+" )
         cnt_ab     = GetParamStrCnt( cnt_str, "AB+" )
         cnt_fr     = GetParamStrCnt( cnt_str, "FR+" )
         cnt_offx   = GetParamStrCnt( cnt_str, "OX"  )
         cnt_offy   = GetParamStrCnt( cnt_str, "OY"  )
         cnt_offz   = GetParamStrCnt( cnt_str, "OZ"  )
         cnt_ang    = GetParamStrCnt( cnt_str, "ANG" )

         // 2.2 - Applico delta
         cnt_offx   = ATOI(cnt_offx) + var_val_delta.x
         cnt_offy   = ATOI(cnt_offy) + var_val_delta.y
         cnt_offz   = ATOI(cnt_offz) + var_val_delta.z

         // 2.3 - Costruisco nuova stringa
         cnt_offset = STRCAT( STR(cnt_offx), " ", STR(cnt_offy), " ", STR(cnt_offz), " ", cnt_ang)

         cnt_new    = CostruisciStrCnt2( cnt_sd, cnt_ab, cnt_fr, cnt_offset)

         // 2.4 - Applico nuova connessione
         //cmd_debug = STRCAT( " //", wk_func_nome, " - Modifico conn. tra [", STR(cnt_idx), "]-", APICI(), NOME(cnt_idx), APICI(), " e [", STR(agg_idx), "]-", APICI(), NOME(agg_idx), APICI(), ", delta: ", Point2String(var_val_delta))
         cmd_debug = STRCAT( " //", wk_func_nome)
         COMANDO( STRCAT( "SETTA ", STR( cnt_idx), cmd_debug))
         COMANDO( STRCAT( "CONNESSIONE_EDIT ", cnt_new, cmd_debug))
         //COMANDO( STRCAT( "RICALCOLA_UNA ", STR( cnt_idx), cmd_debug))

         // 3 - Salvo valore attuale per confronto successivo
         EVAL( STRCAT( var_prev_glob, " = var_val"))
         Result = 1
    }
}

// FT 29/01/20
Macro
{
   // FT 29/01/20 macro da chiamare per verifiche/debug (da comandi manuali)
   ChiamaCtrlBarraIsola      "" interattiva ChiamaCtrlBarraIsola
   ChiamaCtrlBarraIsolaDebug "" interattiva ChiamaCtrlBarraIsolaDebug

   // FT 10/02/20 - visualizza/nascondi giunzioni
   GiunzioniShow             "" interattiva GiunzioniShow
   GiunzioniHide             "" interattiva GiunzioniHide

   // FT 06/03/20 - visualizza/nascondi lavorazioni per fianco di finitura (trafile, ecc.)
   #ifdef TEC
      FFLavorazioniDebug     "" interattiva FFLavorazioniDebug
      //FFLavorazioniShowHide  "Visualizza/Nascondi Lavorazioni Fianco di Finitura" interattiva FFLavorazioniShowHide

      // Dump delle variabili di un top-level
      Dump    "" interattiva Dump
      Dump2   "" interattiva Dump2
      DumpAll "" interattiva DumpAll
   #endif

   #ifndef TEC
      FFLavorazioniShowHide  "" interattiva FFLavorazioniShowHide
   #endif

   //#ifdef TEC;AZI
   //Set_REV_Cuc_Fro_Mel       "Revisione cucine melaminiche" interattiva Set_REV_Cuc_Fro_Mel
   //#endif
}
