Globali
{
   SVN_Air_Rev                        "SVN revision"                                                 "$Revision$"   NoSave

   PianoTavolo_Vetro_Air_Soft_Raggio  "Tavolo Air - Soft - Raggio smussi"                            80                    NoSave

   AstaAppendiabiti_AIR_TappoStd_X    "Asta appendiabiti - Tappo - Larghezza"                        20.5                  NoSave
   AstaAppendiabiti_AIR_TappoSpr_X    "Asta appendiabiti - Tappo Sporgente - Larghezza"              177                   NoSave
   AstaAppendiabiti_AIR_TappoCop_X    "Asta appendiabiti - Tappo cabina con coperchio - Larghezza"   2                     NoSave

   AlzataApp_ConCop_Rie_Vtr           "Alzata appendiabiti con coperchio - Rientro Vetro"            0.75                  NoSave

   Air_SetAlzataVetro_Spe_Vetro       "Set Alzata Vetro - Spessore vetro"                            8                     NoSave

   Air_SetAlzataVetro_MagY_AlzataMM   "Set Alzata Vetro - Maggiorazione Y per tipo MM"               16                    NoSave
   Air_SetAlzataVetro_MagY_AlzataCM   "Set Alzata Vetro - Maggiorazione Y per tipo CM"               14.5                  NoSave
   Air_SetAlzataVetro_MagY_AlzataCC   "Set Alzata Vetro - Maggiorazione Y per tipo CC"               13                    NoSave
   Air_SetAlzataVetro_MagY_AlzataCX   "Set Alzata Vetro - Maggiorazione Y per tipo CC"               6.5                   NoSave

   Air_SetAlzataVetro_Rie_Vetro_Lato  "Set Alzata Vetro - Rientro X fianco"                          20                    NoSave
   Air_SetAlzataVetro_RieZ_Sch        "Set Alzata Vetro - Rientro Z schiena"                         18                    NoSave
   Air_SetAlzataVetro_RieZ_Fia        "Set Alzata Vetro - Rientro Z fianco"                          18                    NoSave

   BDM_REV_Tavolo_Air_1               "Revisione Tavolo Air - Riduzioni"                             250529                NoSave
}

Misure
{
   LarMensAir  "Larghezza Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  552   600   736   750   900   920   1050   1104   1200   1472   1500   1800   1840   2100   2208   2400   2576   2700   2944
      Reali     552   600   736   750   900   920   1050   1104   1200   1472   1500   1800   1840   2100   2208   2400   2576   2700   2944
   }

   ProMensAir "Profondità"   < OnlyDesc;NoDiz >
   {
      Nominali 270   350   406   510   520   560
      Reali    270   350   406   510   520   560
   }

   SpeMensAir  "Spessore Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  50   80
      Reali     50   80
   }

   MatMensAir "Materiale"  < OnlyDesc;NoDiz >
   {
      Nominali    "Wildwood"  "Laminato"  "Laccato"
      Reali            0          1           2
   }

   LFinMensAir "Lati finiti"  < OnlyDesc;NoDiz >
   {
      Nominali  "Superiore"  "Superiore+Inferiore"
      Reali       1                    2
   }

   //Luca 04/05/2021
   TpAccBgn "Tipo Accessorio"  < OnlyDesc;NoDiz >
   {
      Nominali  "Porta Asciugamani" "Porta Carta" "Cellule Vassoio"  "Cellule Porta Asciugamani"
      Reali             0                 1               2                      3
   }

   //SIFONE
   TpSifone "Tipo Sifone"  < OnlyDesc;NoDiz >
   {
      Nominali "PLASTICA CROMATA" "ACCIAIO INOX" "OTTONE CROMATO" "PASSEPARTOUT" "SALVASPAZIO"  "SCARICO ORIZZONTALE"
      Reali            1                 2             3               4               5                  6
   }

   //LAVABI
   TpLavabo "Tipo Lavabo"  < OnlyDesc;NoDiz >
   {
      Nominali  "Depth"  "Cellule"  "Skin"  "Inbilico"  "Basica"  "Elyssa"
      Reali        0         1         2        3          4         5
   }

   TpMiscelatore "Tipo Miscelatore"  < OnlyDesc;NoDiz >
   {
      Nominali "MIL16"  "MIL17"  "FRE06"  "MIL69"  "CAR28"  "INV01"  "CAR06"  "MIL01"
      Reali       1        2        3        4        5        6        7        8
   }

   XLavBASICA "Lavabo Basica"   < OnlyDesc;NoDiz >
   {
      Nominali 500  600  800  1000
      Reali    500  600  800  1000
   }

   XLavSKIN "Lavabo Skin"   < OnlyDesc;NoDiz >
   {
      Nominali   736  920  1104
      Reali      736  920  1104
   }

   XLavELYSSA "Lavabo Elyssa"   < OnlyDesc;NoDiz >
   {
      Nominali   400  555
      Reali      400  555
   }

   PosDepth "Posizione vasca Depth"   < OnlyDesc >
   {
      Nominali "SX"  "Centrale" "DX" "Personalizzata"
      Reali     -1       0        1         9
   }

   TipoRub "Tipo Lavabo"  < OnlyDesc;NoDiz >
   {
      Nominali  "Solo foro"
      Reali        0
   }

   OrieInbil "Orientamento InBilico"  < OnlyDesc;NoDiz >
   {
      Nominali  "SX 90°"   "SX 45°"  "CENTRO"  "DX 45°"  "DX 90°"
      Reali        -2         -1         0        1          2
      Image     "%path_bdm%\Bmp\INBILICO_POS-2.png"  "%path_bdm%\Bmp\INBILICO_POS-1.png"  "%path_bdm%\Bmp\INBILICO_POS-0.png"  "%path_bdm%\Bmp\INBILICO_POS+1.png"  "%path_bdm%\Bmp\INBILICO_POS+2.png"
   }

   OrieInbil2 "Orientamento InBilico"  < OnlyDesc;NoDiz >
   {
      Nominali  "SX 45°"  "CENTRO"  "DX 45°"
      Reali        -1         0        1
      Image     "%path_bdm%\Bmp\INBILICO_POS-1.png"  "%path_bdm%\Bmp\INBILICO_POS-0.png"  "%path_bdm%\Bmp\INBILICO_POS+1.png"
   }

   TpApp_Air "Tipo Appoggio"  < OnlyDesc;NoDiz >
   {
      Nominali    "Piedini h.17"  "Sostegni vetro"
      Reali            1               2
   }

   AltSVetri_Air "Altezza sostegni"
   {
      Nominali   92  184  276  368
      //Reali     103  195  287  379
      //Nominali  139  231  323  415
      Reali     139  231  323  415
   }

   AltSVetriC_Air "Altezza sostegni contenitore"
   {
      //Nominali  109  201  293  385
      Nominali   92  184  276  368
      Reali     109  201  293  385
   }

   LarMensLibAir  "Larghezza Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  552   736   920   1104   1312   1472   1840   2208   2576   2944
      Reali     552   736   920   1104   1312   1472   1840   2208   2576   2944
   }

   //creati menu dinamici, tengo i vecchi per compatibilità
   LarMensLib1Air  "Larghezza Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  1312   1472  1840   2208
      Reali     1312   1472  1840   2208
   }

   LarMensLib2Air  "Larghezza Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  552   736   920   1104   1312   1472   1840   2208   2576   2944
      Reali     552   736   920   1104   1312   1472   1840   2208   2576   2944
   }

   LarMensLib3Air  "Larghezza Mensola AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  1472   1840   2208   2576   2944
      Reali     1472   1840   2208   2576   2944
   }

   ProMensLibAir   "Profondità"   < OnlyDesc;NoDiz >
   {
      Nominali  406  510  560
      Reali     406  510  560
   }

   MatMensLibAir "Materiale"  < OnlyDesc;NoDiz >
   {
      Nominali    "Wildwood"  "Laccato"  "Haywood"   "Vetro"
      Reali            0          1           2         3
   }

   //creati menu dinamici, tengo i vecchi per costruzione composti
   LarSetAlz_Air "Larghezza Set Alzate"  < OnlyDesc;NoDiz >
   {
      Nominali   512  696  880  1064  1272
      Reali      512  696  880  1064  1272
   }

   AltSetAlz_Air "Altezza Set Alzate"  < OnlyDesc;NoDiz >
   {
      Nominali   138  184  230  250  268  276  318  322  328  343  368  374  389  414  736  828  878  1263  1447
      Reali      138  184  230  250  268  276  318  322  328  343  368  374  389  414  736  828  878  1263  1447
   }

   PrfSetAlz_Air "Prof Set Alzate"  < OnlyDesc;NoDiz >
   {
      Nominali   406  510  560
      Reali      406  510  560
   }

   PM_AIR      "Posizione Mensola AIR" < OnlyDesc >
   {
      Nominali  "Sinistra"                                    "Destra"
      Reali         -1                                           1
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosMensolaSx.png  %path_bdm%\Bmp\Menu\AIR\AIR_PosMensolaDx.png
   }

   PM_AIR_C     "Posizione Mensola AIR" < OnlyDesc >
   {
      Nominali  "Centrata"
      Reali         0
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosMensolaCx.png
   }

   PSA_AIR      "Posizione Set VETRI AIR" < OnlyDesc >
   {
      Nominali  "Sinistra"                                   "Destra"
      Reali        -1                                           1
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosAlzataSx.png  %path_bdm%\Bmp\Menu\AIR\AIR_PosAlzataDx.png
   }

   PSA_AIR_C    "Posizione Set VETRI AIR" < OnlyDesc >
   {
      Nominali  "Centrato"
      Reali         0
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosAlzataCx.png
   }

   PSC_AIR      "Posizione contenitore AIR" < OnlyDesc >
   {
      Nominali  "Sinistra"                                 "Destra"
      Reali        -1                                         1
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosContSx.png  %path_bdm%\Bmp\Menu\AIR\AIR_PosContDx.png
   }

   PSC_AIR_C    "Posizione contenitore AIR" < OnlyDesc >
   {
      Nominali  "Centrato"
      Reali         0
      Image     %path_bdm%\Bmp\Menu\AIR\AIR_PosContCx.png
   }

   TpScsAIR "Tipo Scasso" < OnlyDesc;NoDiz >
   {
      Nominali  "Circolare"   "Rettangolare"
      Reali         0                1
   }

   LarScriv_AIR "Larghezza scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   1104   1472  1840   2208
      Reali      1104   1472  1840   2208
   }

   PrfScriv_AIR "Larghezza scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   406    700    850
      Reali      406    700    850
   }

   LarTopVScriv_AIR "Larghezza scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   920  1104   1472  1840
      Reali      920  1104   1472  1840
   }

   PrfTopVScriv_AIR "Prof scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   510   560  700    850
      Reali      510   560  700    850
   }

   MatScriv_AIR "Materiale"  < OnlyDesc;NoDiz >
   {
      Nominali    "Laccato"   "Wildwood"   "Vetro"
      Reali           1            2          3
   }

   //SpePScriv_AIR "Spessore"  < OnlyDesc;NoDiz >
   //{
   //   Nominali    50    80
   //   Reali       50    80
   //}

   LatoAScriv_AIR "Lato aggancio"  < OnlyDesc;NoDiz >
   {
      Nominali    "Lato lungo"   "Lato Corto"
      Reali             0           1
   }

   //Simone 27/10/21 - Aggiorno menù per modifica scrivanie Lagolinea fianco legno H.739
   AltScrivM_AIR "Altezza scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   739  740  760
      Reali      739  740  760
   }

   PrfScrivM_AIR "Prof scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   510 560 700  850
      Reali      510 560 700  850
   }

   TipoGScriv_AIR "Tipologia Gamba"  < OnlyDesc;NoDiz >
   {
      Nominali   "Vetro"   "Legno"
      Reali         0         1
   }

   //Simone 07/04/2022 - Aggiungo al menù L.2208 per composto speciale
   //Simone 16/05/2022 - Aggiungo al menù L.3000 per composto speciale
   LarScrivM_AIR "Larghezza scrivania AIR"  < OnlyDesc;NoDiz >
   {
      Nominali   920  1104  1472  1840  2208  3000
      Reali      920  1104  1472  1840  2208  3000
   }

   DimSosVAir "Larghezza Sostegno AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  366  470  520  628
      Reali     366  470  520  628
   }

   DimSosVAir_S "Larghezza Schiena Sostegno AIR"  < OnlyDesc;NoDiz >
   {
      Nominali  366  628
      Reali     366  628
   }

   //{ TAVOLO AIR
   X_Tav_AIR "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 850   1000  1200  1400  1600  1800  1900  2000  2200  2480  2500  2980  3000
      Reali    850   1000  1200  1400  1600  1800  1900  2000  2200  2480  2500  2980  3000
   }

   Y_Tav_AIR "Altezza" < OnlyDesc;NoDiz >
   {
      Nominali 460   730   760   1060
      Reali    460   730   760   1060
   }

   Z_Tav_AIR "Profondità" < OnlyDesc;NoDiz >
   {
      Nominali 406   850   900   1000  1200  1400  1600  1800
      Reali    406   850   900   1000  1200  1400  1600  1800
   }

   Tip_Tav_AIR "Tipologia Tavolo AIR" < OnlyDesc;NoDiz >
   {
      Nominali  "TABLE"   "BENCH"   "EXTENDABLE"   "SNACK"   "COFFEE"  "SLIM"
      Reali         0        1           2            3         4         5
   }

   Mat_Tav_AIR "Materiale piano tavolo AIR" < OnlyDesc;NoDiz >
   {
      Nominali  "LAMINATO"    "WILDWOOD"     "HAYAGEWOOD"   "VETRO"   "XGLASS"   "STRATUM"  "GLASS"
      Reali         0              1              2            3          4          5         6
   }

   Fr_Tav_AIR  "Forma piano tavolo AIR" < OnlyDesc;NoDiz >
   {
      Nominali "RETTANGOLARE" "BOTTE"  "ROUND"  "SOFT"  "ORGANICO"
      Reali          0           1        2       3         4
   }

   Tip_Gambe_Tav_AIR "Tipologia Game Tavolo AIR" < OnlyDesc;NoDiz >
   {
      Nominali  "RETTANGOLARI"   "SOFT"
      Reali           0            1
   }

   X_TavCof_AIR "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 500   736   782   828   900   920   1104  1200  1472  1600  1900
      Reali    500   736   782   828   900   920   1104  1200  1472  1600  1900
   }

   Y_TavCof_AIR "Altezza" < OnlyDesc;NoDiz >
   {
      Nominali 280   310   320   324   374   378   390   414
      Reali    280   310   320   324   374   378   390   414
   }

   Z_TavCof_AIR "Profondità" < OnlyDesc;NoDiz >
   {
      Nominali 368   500   552   736   782   828   850   900   920   1104  1200
      Reali    368   500   552   736   782   828   850   900   920   1104  1200
   }
   //} TAVOLO AIR

   PosTrMens "Posizione trasformatore"  < OnlyDesc >
   {
      Nominali    "Default"  "Custom"
      Reali            0         1
   }
}

//{ MENSOLE AIR
Elemento Mensola_Air
{
   Descrizione = "Mensola AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Mensola_Air;StpMensolaBagno;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"         552 Menu ( LarMensAir )
      Y       "Spessore"           80 ShowAlways
      Z       "Profondità"        270 Menu ( ProMensAir )

      //0 - WILDWOOD
      //1 - LAMINATO
      //2 - LACCATO
      VAR_Materiale    "Materiale"      0  Menu ( MatMensAir )
      VAR_MaterialeStr ""              ""

      //1 - SOLO SUPERIORE
      //2 - SUPERIORE + INFERIORE
      VAR_LatiFin      "Lati finiti"    1  Menu ( LFinMensAir )

      //MENSOLA SOSPESA -- GESTIONE STAFFE + LAVABO
      Staffa_X       "" 1
      Staffa_Z       "" 1
      Staffa_Num     "" 1

      //GESTIONE STAFFE
      #ifdef TEC;AZI
      Staffe_Vedi    "Vedi STAFFE" 0 Boolean NoSave
      #endif

      #ifndef TEC;AZI
      Staffe_Vedi    ""  0
      #endif

      FILLER2        "" ""

      Staffa_Utente       "Staffa: pos.personalizzata"  0 Menu ( SiNo )
      Staffa_PosUtente    "Staffa: pos.utente"          0 Utente ( )

      StaffaSX_Utente     "Staffa SX: pos.personalizzata"  0 Menu ( SiNo )
      StaffaSX_PosUtente  "Staffa SX: pos.utente"          0 Utente ( )
      StaffaSX            ""                               0
      StaffaSX_X          ""                               0
      StaffaSX_Z          ""                               0
      StaffaSX_OX         ""                               0

      StaffaDX_Utente     "Staffa DX: pos.personalizzata"  0 Menu ( SiNo )
      StaffaDX_PosUtente  "Staffa DX: pos.utente"          0 Utente ( )
      StaffaDX            ""                               0
      StaffaDX_X          ""                               0
      StaffaDX_Z          ""                               0
      StaffaDX_OX         ""                               0

      //STAFFE DEPTH
      StaffaDP_SX         ""  0
      StaffaDP_SX_OX      ""  0
      StaffaDP_SX_Z       ""  0

      StaffaDP_DX         ""  0
      StaffaDP_DX_OX      ""  0
      StaffaDP_DX_Z       ""  0

      StaffaDP_3         ""  0
      StaffaDP_3_OX      ""  0
      StaffaDP_3_Z       ""  0
      StaffaDP_3_Vrs     ""  0

      StaffaDP_4         ""  0
      StaffaDP_4_OX      ""  0
      StaffaDP_4_Z       ""  0
      StaffaDP_4_Vrs     ""  0

      FILLER3            " " "" ShowAlways

      //Luca 26/05/2022
      //gestione LED su Mensole
      LED_Sopra      ""                             0
      LED_Sotto      ""                             0

      LED_Lunghezza  "LED lunghezza"               10
      LED_Watt       "LED Watt"                     0 //ShowAlways

      LED_LavTrasfX  ""  10
      LED_LavTrasfZ  ""  10

      LED_Trasf      "LED trasformatore"            0
      LED_TrasfWatt  "LED trasformatore Watt"       0

      //0 pos.standard - 1 pos.custom
      LED_PosLavTrasf   "LED posizione trasformatore"  0 Menu ( PosTrMens )
      //Offset trasformatore
      LED_OffLavTrasf   "LED offset trasformatore"     0 Utente ( )

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      FLAG_LavaboKERA    "" 0

      //Simone 01/07/2022
      ConTopVetro        "" 0

      idx_cnear_sx       "" -1
      idx_cnear_dx       "" -1

      CMP2_AZIONI        ""      "S"

      M4_A_MURO          ""  1
      M4_CNT_LINK_MODE__ ""  0

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS             "" "X;Y;Z"

      FillerM2G          " " "" ShowAlways

      idx_grafica        "" -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssMensole_Air

      //Simone 22/06/2022
      Zt = Z
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      // led
      punto_led_sottobase_retro_1  = [ base_0.x, base_0.y, base_0.z + 20]
      punto_led_sottobase_retro_2  = [ base_3.x, base_3.y, base_3.z + 20]
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Mensole_Air
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Config_Staffe_Mensola_Air

      GOSUB GetRegola_Componenti_Elements

      GOSUB CtrlLed_Mensola_Air

      GOSUB Set_Posizione_Led_Mensola_Air

      //Simone 01/07/2022
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder!=1  )
      {
         ConTopVetro = 0
         idx_top = -1
         COMPONENTI2("wk_ins",ATTUALE(),"TopVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConTopVetro = 1
            idx_top = wk_ins[1]
         }
      }

      //GOSUB Config_Massellatura_Mensola_Air

      //PER DEBUG -- VEDERE LIMITI POSIZIONAMENTO LAVELLO BASICA
      //#ifdef TE
      //   //GOSUB Ctrl_RangePosizionamento_LavaboBasica
      //    GOSUB Ctrl_RangePosizionamento_LavaboInBilico
      //#endif
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C008_Mensola_Air

      GOSUB GestComune_Post
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
   }

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

      if( $ChangedVar == "GEST_C165" )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //OnChangedVar ",NOME(ATTUALE())))
      }
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   //Procedura Offset
   //{
   //   GOSUB Offset_368
   //}

   Posiziona Grafica_Mensola_WW_Air gm_WW
   {
      @escluso = 1
      if( VAR_MaterialeStr == "WILDWOOD" )  { @escluso = 0 }
      GOSUB posa_blocco

      if( @escluso == 0 ) { idx_grafica = ATTUALE() }
   }

   Posiziona Grafica_Mensola_LAM_Air gm_LAM
   {
      @escluso = 1
      if( VAR_MaterialeStr == "LAMINATO" )  { @escluso = 0 }
        //| VAR_MaterialeStr == "LACCATO"  )
      GOSUB posa_blocco

      if( @escluso == 0 ) { idx_grafica = ATTUALE() }
   }

   //Simone 24/01/2022
   Posiziona Grafica_Mensola_LAC_Air gm_LAC
   {
      @escluso = 1
      if( VAR_MaterialeStr == "LACCATO"  )  { @escluso = 0 }
      GOSUB posa_blocco

      if( @escluso == 0 ) { idx_grafica = ATTUALE() }
   }

   Posiziona Staffa_Mensola_Air ssx
   {
      @escluso = 1 - StaffaSX
      @base_0.x = base_0.x + StaffaSX_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Xt = StaffaSX_X
      @Z = StaffaSX_Z
   }

   Posiziona Staffa_Mensola_Air sdx
   {
      @escluso = 1 - StaffaDX
      @base_0.x = base_0.x + X - StaffaDX_OX - StaffaDX_X
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Xt = StaffaDX_X
      @Z = StaffaDX_Z
   }

   //{ STAFFE DEL DEPTH in caso di lavabo KERA
   Posiziona Staffa_MensolaDepth_Air sdsx
   {
      @escluso = 1 - StaffaDP_SX
      @Verso = -1
      @base_0.x = base_0.x + StaffaDP_SX_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaDP_SX_Z
   }

   Posiziona Staffa_MensolaDepth_Air sddx
   {
      @escluso = 1 - StaffaDP_DX

      @Verso = 1
      @base_0.x = base_0.x + X - StaffaDP_DX_OX - @X
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaDP_DX_Z
   }

   Posiziona Staffa_MensolaDepth_Air sds3
   {
      @escluso = 1 - StaffaDP_3
      @Verso = StaffaDP_3_Vrs
      @base_0.x = base_0.x + StaffaDP_3_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaDP_3_Z
   }

   Posiziona Staffa_MensolaDepth_Air sds4
   {
      @escluso = 1 - StaffaDP_4
      @Verso = StaffaDP_4_Vrs
      @base_0.x = base_0.x + StaffaDP_4_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaDP_4_Z
   }
   //} STAFFE DEL DEPTH in caso di lavabo KERA

   Posiziona Led_Mensola_Air lsup
   {
      @escluso = 1 - LED_Sopra

      @X = LED_Lunghezza
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y - @Y + 1
      @base_0.z = base_0.z + 45  - @Z/2

      @Lato = "SOPRA"
   }

   Posiziona Led_Mensola_Air lsot
   {
      @escluso = 1 - LED_Sotto

      @X = LED_Lunghezza
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 1
      @base_0.z = base_0.z + 45  - @Z/2

      @Lato = "SOTTO"
   }

   Posiziona LavTrasformatore_Mensola_Air lavt
   {
      @escluso = 1 - LED_Trasf

      @X = LED_LavTrasfX
      @Z = LED_LavTrasfZ
      @base_0.x = base_0.x + LED_OffLavTrasf - @X/2
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
   }

   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
   }

   #ifdef TE
   Posiziona Blocco R1
   {
      alias_pos = "R1"
      GOSUB posa_blocco_range_lavello
   }
   Posiziona Blocco R2
   {
      alias_pos = "R2"
      GOSUB posa_blocco_range_lavello
   }
   Posiziona Blocco R3
   {
      alias_pos = "R3"
      GOSUB posa_blocco_range_lavello
   }
   #endif

   Posiziona PCV_ContCollisioni_368 pcvc_r
   {
      limite_sx = 20
      limite_dx = 20
      limite_rt = 20
      limite_fr = 20

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 10
      @Z = limite_rt
   }

   Posiziona PCV_ContCollisioni_368 pcvc_f
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z + Z - limite_fr
      @X = X
      @Y = Y + 10
      @Z = limite_fr
   }

   Posiziona PCV_ContCollisioni_368 pcvc_sx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z + limite_rt
      @X = limite_sx
      @Y = Y + 10
      @Z = Z - limite_rt - limite_fr
   }
   Posiziona PCV_ContCollisioni_368 pcvc_dx
   {
      @base_0.x = base_0.x + X - limite_dx
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z + limite_rt
      @X = limite_dx
      @Y = Y + 10
      @Z = Z - limite_rt - limite_fr
   }
}

Elemento Led_Mensola_Air
{
   Descrizione = "Led_Mensola_Air"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X       "Larghezza"            552
      Y       "Spessore"               7
      Z       "Profondità"           8.6

      RADICE            "" "LEDSOSCC"

      VediIlluminazione "" 1

      Lato    "" "SOPRA"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_78

      //DescEdit__ = "LED"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco_Luce led
   {
      GOSUB posa_blocco

      @FacciaLuminosa = "DW"
      if( Lato == "SOPRA" ) { @FacciaLuminosa = "UP" }
   }

   Posiziona VediLuce vd1
   {
      NumLuci = 1
      if( X >= 1000 ) { NumLuci = 2 }
      if( X >= 2000 ) { NumLuci = 3 }

      Verso = 0
      if( Lato == "SOPRA" ) { Verso = 1 }

      @n_luce = 1
      GOSUB Posa_VediLuce_Led_PannelloRetro_368
   }

   Posiziona VediLuce vd2
   {
      @n_luce = 2
      GOSUB Posa_VediLuce_Led_PannelloRetro_368
   }

   Posiziona VediLuce vd3
   {
      @n_luce = 3
      GOSUB Posa_VediLuce_Led_PannelloRetro_368
   }
}

Elemento LavTrasformatore_Mensola_Air
{
   Descrizione = "Trasf_Mensola_Air"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X       "Larghezza"            552
      Y       "Spessore"              44
      Z       "Profondità"            10

      //per collisione PASSACAVI
      VediLimiti_PCV "" 0  Implicit

      //Simone 04/07/2022
      GEST_CODICE    "" ""
      LED_Watt       ""  0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

      GEST_CODICE = "CU1715"
      if( LED_Watt > 15 ) { GEST_CODICE = "CU1703" }
      if( LED_Watt > 30 ) { GEST_CODICE = "CU1710" }

      GEST_X = 247
      GEST_Y = 30
      GEST_Z = 17

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco scstras
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z - 0.5

      @c_rivestimento = $c_nero
   }

   Posiziona PCV_ContCollisioni_368 pcvc_r
   {
      limite = 15

      @base_0.x = base_0.x - limite
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X + 2*limite
      @Y = Y + 10
      @Z = Z + limite
   }
}

Elemento MensolaDepth_Air
{
   Descrizione = "Mensola AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;StpMensolaBagno

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"         552 Menu ( LarMensAir )
      Y       "Spessore"           80 ShowAlways
      Z       "Profondità"        520 ShowAlways

      //0 - WILDWOOD
      //1 - LAMINATO
      VAR_Materiale    "Materiale"      0  Menu ( MatMensAir )
      VAR_MaterialeStr ""              ""

      //1 - SOLO SUPERIORE
      //2 - SUPERIORE + INFERIORE
      VAR_LatiFin      "Lati finiti"    2

      Staffa_X       "" 1
      Staffa_Z       "" 1
      Staffa_Num     "" 1

      //GESTIONE STAFFE
      #ifdef TEC
      Staffe_Vedi    "Vedi STAFFE"  0 Boolean NoSave
      #endif

      #ifndef TEC
      Staffe_Vedi    ""  0
      #endif

      FILLER2        "" ""

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      VAR_DepthDoppio "Vasca doppia"        0 Menu ( SiNo )

      VAR_Depth_Pos  "Depth: posizione"     0 Menu ( PosDepth )
      VAR_Depth1_OX  "Depth 1: offset x"    0 Utente ( )
      VAR_Depth1_OZ  "Depth 1: offset z"    0

      VAR_Depth2_Pos "Depth 2: posizione"   0
      VAR_Depth2_OX  "Depth 2: offset x"    0 Utente ( )
      VAR_Depth2_OZ  "Depth 2: offset z"    0

      //STAFFE
      StaffaSX       ""                     1
      StaffaSX_Z     ""                     0
      StaffaSX_OX    ""                     0
      StaffaDX       ""                     1
      StaffaDX_Z     ""                     0
      StaffaDX_OX    ""                     0

      Staffa3        ""                     0
      Staffa3_Vrs    ""                     0
      Staffa3_OX     "Staffa 3: posizione"  0
      Staffa3_Z      ""                     0

      Staffa4        ""                     0
      Staffa4_Vrs    ""                     0
      Staffa4_OX     "Staffa 4: posizione"  0
      Staffa4_Z      ""                     0

      CMP2_AZIONI      ""      "S"

      M4_A_MURO          ""  1
      M4_CNT_LINK_MODE__ ""  0

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS "" "X;Y;Z"

      FillerM2G          " " "" ShowAlways

      idx_grafica   ""  -1

      VT_NFC "NFC"  1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssMensole_Air
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      //Simone 25/02/2022
      vano_0_1 = base_0
      vano_0_1.x = base_0.x + VAR_Depth1_OX
      vano_l_1 = 490
      vano_p_1 = Z

      if( VAR_DepthDoppio == 1 )
      {
         vano_0_2 = base_0
         vano_0_2.x = base_0.x + VAR_Depth2_OX
         vano_l_2 = 490
         vano_p_2 = Z
      }

      // led
      punto_led_sottobase_retro_1  = [ base_0.x, base_0.y, base_0.z + 20]
      punto_led_sottobase_retro_2  = [ base_3.x, base_3.y, base_3.z + 20]
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Mensole_Air

      //Simone 25/02/2022
      if( $query_type==2 )
      {
         if( NOME($query_p1)=="Cuc_Led" )
         {
            $QueryResult__ = 0
            if( $query_p2 == 1 | $query_p2 == 2 )  { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Config_Lavabo_Depth

      GOSUB Config_Staffe_MensolaDepth_Air
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 01/09/2021: aggiungo nota per produzione
      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder==0 )
      {
         wk_nota_1 = STRCAT( "POSIZIONE DA SX DEPTH: ", STR(VAR_Depth1_OX), "MM")
         wk_nota_2 = STRCAT( "POSIZIONE DA SX DEPTH 1: ", STR(VAR_Depth1_OX), "MM, DEPTH 2: ", STR(VAR_Depth2_OX), "MM")

         M2G_DelNotaBDM(ATTUALE(),"GEN",0,wk_nota_1)
         M2G_DelNotaBDM(ATTUALE(),"GEN",0,wk_nota_2)

         if(VAR_DepthDoppio == 1) { M2G_AddNotaBDM(ATTUALE(),"GEN",0,wk_nota_2) }
         else                     { M2G_AddNotaBDM(ATTUALE(),"GEN",0,wk_nota_1) }
      }

      GOSUB GestComune_Post
   }

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

      //lancio scasso in inserimento
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida MensolaDepth_Air"))
      COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // PostGestDllValida MensolaDepth_Air"))
   }

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

      if( $ChangedVar=="Z" )
      {
         if( Z <= 485 )
         {
            wk_manda_msg = 0
            if( VAR_VAL(idx_depth1,"VAR_Rubinetto") == 1 ) { wk_manda_msg = 1 }

            if( VAR_DepthDoppio ==1
              & VAR_VAL(idx_depth2,"VAR_Rubinetto") == 1 ) { wk_manda_msg = 1 }

            if( wk_manda_msg )
            {
               wk_msg = STRCAT(MSG(1090),"\n", MSG(1210))
               DISPLAY2(wk_msg)
            }
         }
      }

      if( $ChangedVar == "X")
      {
         if( VAR_Depth_Pos == 9)
         {
             wk_msg = STRCAT(MSG(1090),"\n", MSG(1256))

            //verifico se ci sono VASCHE FUORI DAI VALORI MINIMI / MASSIMI
            if( VAR_DepthDoppio == 0)
            {
               wk_min_v1 = wk_riex_min
               wk_max_v1 = X - wk_riex_min - VAR_Depth_X
               if( wk_max_v1 < wk_min_v1) { wk_max_v1 = wk_min_v1 }

               VAR_SET_MENU(ATTUALE(),"VAR_Depth1_OX",STRCAT("( ",STR(wk_min_v1) ,"-", STR(wk_max_v1)," )"))

               if( VAR_Depth1_OX < wk_min_v1
                 | VAR_Depth1_OX > wk_max_v1 )
               {
                  DISPLAY2(wk_msg)
                  CHIEDI(ATTUALE(),"VAR_Depth1_OX")
               }
            }

            if( VAR_DepthDoppio == 1)
            {
               wk_min_v1 = wk_riex_min
               wk_max_v1 = VAR_Depth2_OX - wk_depth_depth_min - VAR_Depth_X
               if( wk_max_v1 < wk_min_v1) { wk_max_v1 = wk_min_v1 }

               wk_min_v2 = VAR_Depth1_OX + wk_depth_depth_min + VAR_Depth_X
               wk_max_v2 = X - wk_riex_min - VAR_Depth_X
               if( wk_max_v2 < wk_min_v2) { wk_max_v2 = wk_min_v2 }

               VAR_SET_MENU(ATTUALE(),"VAR_Depth1_OX",STRCAT("( ",STR(wk_min_v1) ,"-", STR(wk_max_v1)," )"))
               VAR_SET_MENU(ATTUALE(),"VAR_Depth2_OX",STRCAT("( ",STR(wk_min_v2) ,"-", STR(wk_max_v2)," )"))

               if( VAR_Depth1_OX < wk_min_v1
                 | VAR_Depth1_OX > wk_max_v1)
               {
                  DISPLAY2(wk_msg)
                  CHIEDI(ATTUALE(),"VAR_Depth1_OX")
               }

               if( VAR_Depth2_OX < wk_min_v2
                 | VAR_Depth2_OX > wk_max_v2)
               {
                  DISPLAY2(wk_msg)
                  CHIEDI(ATTUALE(),"VAR_Depth2_OX")
               }
            }
         }
      }
   }

   //Procedura OnTabEredita
   //{
   //   GOSUB OnTabEredita_368
   //}

   //Procedura Offset
   //{
   //   GOSUB Offset_368
   //}

   Posiziona Grafica_Mensola_WW_Air gm_WW
   {
      @escluso = 1
      if( VAR_MaterialeStr == "WILDWOOD" )  { @escluso = 0 }
      GOSUB posa_blocco

      @FLAG_Depth = 1

      if( @escluso == 0 ) { idx_grafica = ATTUALE() }
   }

   Posiziona Grafica_Mensola_LAM_Air gm_LAM
   {
      @escluso = 1
      if( VAR_MaterialeStr == "LAMINATO" )  { @escluso = 0 }
      GOSUB posa_blocco

      @FLAG_Depth = 1

      if( @escluso == 0 ) { idx_grafica = ATTUALE() }
   }

   Posiziona Staffa_MensolaDepth_Air ssx
   {
      @Verso = -1
      @base_0.x = base_0.x + StaffaSX_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaSX_Z
   }

   Posiziona Staffa_MensolaDepth_Air sdx
   {
      @Verso = 1
      @base_0.x = base_0.x + X - StaffaDX_OX - @X
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = StaffaDX_Z
   }

   Posiziona Staffa_MensolaDepth_Air ss3
   {
      @escluso = 1 - Staffa3
      @Verso = Staffa3_Vrs
      @base_0.x = base_0.x + Staffa3_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Staffa3_Z
   }

   Posiziona Staffa_MensolaDepth_Air ss4
   {
      @escluso = 1 - Staffa4
      @Verso = Staffa4_Vrs
      @base_0.x = base_0.x + Staffa4_OX
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Staffa4_Z
   }

   //Posiziona Staffa_MensolaDepth_Air s3
   //{
   //   @escluso = 1 - StaffaDX
   //   @base_0.x = base_0.x + X - StaffaDX_OX - StaffaDX_X
   //   @base_0.y = base_0.y + Y/2 - @Y/2
   //   @base_0.z = base_0.z + 5
   //   @Xt = StaffaDX_X
   //   @Z = StaffaDX_Z
   //}
   //
   //Posiziona Staffa_MensolaDepth_Air s4
   //{
   //   @escluso = 1 - StaffaDX
   //   @base_0.x = base_0.x + X - StaffaDX_OX - StaffaDX_X
   //   @base_0.y = base_0.y + Y/2 - @Y/2
   //   @base_0.z = base_0.z + 5
   //   @Xt = StaffaDX_X
   //   @Z = StaffaDX_Z
   //}

   //Simone 12/09/2022
   Posiziona TAG_NFC nfc
   {
      //@escluso = 1 - VT_NFC

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z
   }

   //gestione Depth
   Posiziona LavaboGenerico LavD1
   {
      @base_0 = base_0
      @base_0.x = base_0.x + VAR_Depth1_OX
      @base_0.z = base_0.z + VAR_Depth1_OZ

      @TipoLavabo = 0
      @Stp_Quota_Foro = 1

      idx_depth1 = ATTUALE()
   }

   Posiziona LavaboGenerico LavD2
   {
      @escluso = 1 - VAR_DepthDoppio

      @base_0 = base_0
      @base_0.x = base_0.x + VAR_Depth2_OX
      @base_0.z = base_0.z + VAR_Depth2_OZ

      @TipoLavabo = 0
      @Stp_Quota_Foro = 1

      idx_depth1 = -1
      if( @escluso == 0) { idx_depth2 = ATTUALE() }
   }

   Posiziona _cont_per_near nsx
   {
      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5

      idx_cnear_sx = ATTUALE()
   }

   Posiziona _cont_per_near ndx
   {
      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5

      idx_cnear_dx = ATTUALE()
   }
}

Elemento Grafica_Mensola_WW_Air
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                 ""   552
      Y                 ""   60
      Z                 ""   270

      //disattivo la grafica per vedere le staffe
      Staffe_Vedi       ""   0   Implicit

      FLAG_Depth        ""   0

      VAR_Materiale     ""   0   Implicit
      VAR_LatiFin       ""   0   Implicit

      FLAG_LavaboKERA   ""   0   Implicit

      HIDE              ""   1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Pan_Fd = 10
      Spe_Pan_Rt = 18
      Spe_Pan_Fr = 18
      Spe_Pan_Lt = 6

      RieZ_Pan_FrRt = 3

      //Spe_Mas_Lat = 65
      Spe_Mas_Lat = 100

      //Spe_Mas_RFr = 100
      Spe_Mas_RFr = 50

      //Alt_Mas   = 50
      Alt_Mas    = 44

      RieX_Mas_Fr = 2

      // Finitura
      FIN_orie     = "O"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C028;C002")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco fsup
   {
      @escluso = Staffe_Vedi

      GOSUB posa_blocco
      @Y = 1
      @base_0.y = base_0.y + Y - 1
      GOSUB rivestimento
   }

   Posiziona _graf_faccia_mensola_air fret
   {
      @escluso = Staffe_Vedi

      @base_0 = base_0
      @X = X
      @Y = Y - 1
      @Z = Spe_Pan_Rt
      @lato = "RETRO"
      GOSUB rivestimento
   }

   Posiziona _graf_faccia_mensola_air ffro
   {
      @base_0 = base_0
      @base_0.z = base_0.z + Z - Spe_Pan_Fr
      @X = X
      @Y = Y - 1
      @Z = Spe_Pan_Fr
      @lato = "FRONTE"
      GOSUB rivestimento
   }

   Posiziona Blocco fsx
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z + RieZ_Pan_FrRt
      @Z = Z - 2*RieZ_Pan_FrRt
      @Y = Y - 1
      @X = Spe_Pan_Lt
      GOSUB rivestimento
   }

   Posiziona Blocco fdx
   {
      GOSUB posa_blocco
      @base_0.x = base_3.x - Spe_Pan_Lt
      @base_0.z = base_0.z + RieZ_Pan_FrRt
      @Z = Z - 2*RieZ_Pan_FrRt
      @Y = Y - 1
      @X = Spe_Pan_Lt
      GOSUB rivestimento
   }


   Posiziona Blocco finf
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Spe_Pan_Lt
      @base_0.y = base_0.y - 0.1
      @base_0.z = base_0.z + Spe_Pan_Rt
      @X = X - 2*Spe_Pan_Lt
      @Y = 10
      @Z = Z - Spe_Pan_Fr - Spe_Pan_Rt

      GOSUB rivestimento

      if( VAR_LatiFin == 1 )
      {
         @m_rivestimento = ""
         @c_rivestimento = $c_pomice
      }

      @UsoSottoTop = 1
   }

   //******************************************
   //{       Gestione masselli
   //******************************************
   Posiziona Blocco masx1
   {
      @escluso = 0

      //@base_0.x = base_0.x + 60
      @base_0.x = base_0.x + Spe_Pan_Lt
      @base_0.y = base_0.y + Spe_Pan_Fd
      @base_0.z = base_0.z + Spe_Pan_Rt
      @X = Spe_Mas_Lat
      @Z = Z - Spe_Pan_Rt - Spe_Pan_Fr
      @Y = Alt_Mas

      @PosMassello = "SX"

      @NO_SCASSABILE_DEPTH = 1

      if( FLAG_Depth == 1 ) { @escluso = 1 }

      //Luca 06/12/2021
      if( FLAG_LavaboKERA == 1 ) { @escluso = 1 }

      //Luca 10/03/2021
      if( UN_PADRE("MensolaLib_AIR") ) { @escluso = 1 }
   }

   Posiziona Blocco madx1
   {
      @escluso = 0

      //@base_0.x = base_0.x + X - 60 - Spe_Mas_Lat
      @base_0.x = base_0.x + X - Spe_Pan_Lt - Spe_Mas_Lat
      @base_0.y = base_0.y + Spe_Pan_Fd
      @base_0.z = base_0.z + Spe_Pan_Rt
      @X = Spe_Mas_Lat
      @Z = Z - Spe_Pan_Rt - Spe_Pan_Fr
      @Y = Alt_Mas

      @PosMassello = "DX"

      @NO_SCASSABILE_DEPTH= 1

      if( FLAG_Depth == 1 ) { @escluso = 1 }

      //Luca 06/12/2021
      if( FLAG_LavaboKERA == 1 ) { @escluso = 1 }

      //Luca 10/03/2021
      if( UN_PADRE("MensolaLib_AIR") ) { @escluso = 1 }
   }

   Posiziona Blocco mafr
   {
      @escluso = 1
      //if( Z > 1104 )  { @escluso = 0 }
      if( Z >= 406 & X > 1104 )  { @escluso = 0 }

      //@base_0.x = base_0.x + 60 + Spe_Mas_Lat + RieX_Mas_Fr
      @base_0.x = base_0.x + Spe_Pan_Lt + Spe_Mas_Lat + RieX_Mas_Fr
      @base_0.y = base_0.y + Spe_Pan_Fd
      @base_0.z = base_0.z + Z - Spe_Pan_Fr - Spe_Mas_RFr
      //@X = X - 2* 60  - 2*RieX_Mas_Fr - 2*Spe_Mas_Lat
      @X = X - 2*RieX_Mas_Fr - 2*Spe_Mas_Lat - 2*Spe_Pan_Lt
      @Z = Spe_Mas_RFr
      @Y = Alt_Mas

      @PosMassello = "FRONTE"

      @NO_SCASSABILE_DEPTH = 1

      if( FLAG_Depth == 1 ) { @escluso = 1 }

      //Luca 10/03/2021
      if( UN_PADRE("MensolaLib_AIR") ) { @escluso = 1 }
   }

   Posiziona Blocco mart
   {
      @escluso = 1
      //if( Z > 1104 )  { @escluso = 0 }
      if( Z >= 406 & X > 1104 )  { @escluso = 0 }

      //@base_0.x = base_0.x + 60 + Spe_Mas_Lat + RieX_Mas_Fr
      @base_0.x = base_0.x + Spe_Pan_Lt + Spe_Mas_Lat + RieX_Mas_Fr
      @base_0.y = base_0.y + Spe_Pan_Fd
      @base_0.z = base_0.z + Spe_Pan_Rt
      //@X = X - 2* 60  - 2*RieX_Mas_Fr - 2*Spe_Mas_Lat
      @X = X - 2*RieX_Mas_Fr - 2*Spe_Mas_Lat - 2*Spe_Pan_Lt
      @Z = Spe_Mas_RFr
      @Y = Alt_Mas

      @PosMassello = "RETRO"

      @NO_SCASSABILE_DEPTH = 1

      if( FLAG_Depth == 1 ) { @escluso = 1 }

      //Luca 10/03/2021
      if( UN_PADRE("MensolaLib_AIR") ) { @escluso = 1 }
   }

   //******************************************
   //}       Gestione masselli
   //******************************************
}

//Simone 24/01/2022
Elemento Grafica_Mensola_LAC_Air
{
   Descrizione = "Grafica mensola LAC"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                ""   552
      Y                ""   60
      Z                ""   270

      //disattivo la grafica per vedere le staffe
      Staffe_Vedi      ""   0   Implicit

      //FLAG_Depth "" 0

      Vedi_Struttura   ""   0

      HIDE             ""   1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = PADRE(ATTUALE(),1)

      Vedi_Struttura = Staffe_Vedi

      Spe_Pan_Fnd = 18
      Spe_Pan_Cop = 18

      Spe_Mas_Centrale = 50

      Spe_Mas = 45

      Spe_Mas_Rt = 70

      RieZ_Mas_Rt2 = 120.5

      // Finitura
      FIN_orie     = "O"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C028;C002")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //per avere la grafica pulita
   Posiziona Blocco bl
   {
      @escluso = Vedi_Struttura
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona Blocco sotto
   {
      @escluso = 1 - Vedi_Struttura

      GOSUB posa_blocco
      @Y = Spe_Pan_Fnd

      @PosMassello = "FONDO"

      @UsoSottoTop = 1
   }

   Posiziona Blocco sopra
   {
      @escluso = 1
      // - Vedi_Struttura
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - Spe_Pan_Cop
      @Y = Spe_Pan_Cop
      @f_rivestimento = "0.9"

      @PosMassello = "COPERCHIO"
   }

   Posiziona Blocco retro
   {
      @escluso = 1 - Vedi_Struttura
      GOSUB posa_blocco
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @Z = Spe_Mas_Rt
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop

      @PosMassello = "RETRO"
   }

   Posiziona Blocco retro2
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x + Spe_Mas
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas_Rt + RieZ_Mas_Rt2
      @X = X - 2*Spe_Mas
      @Z = Spe_Mas_Centrale
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop

      @PosMassello = "RETRO-2"
   }

   Posiziona Blocco fronte
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Z - Spe_Mas
      @X = X
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @Z = Spe_Mas

      @PosMassello = "FRONTE"
   }

   Posiziona Blocco fsx1
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas_Rt

      @Z = Z - Spe_Mas_Rt - Spe_Mas
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "SX-1"
   }

   Posiziona Blocco fdx1
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x + X - Spe_Mas
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas_Rt

      @Z = Z - Spe_Mas_Rt - Spe_Mas
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "DX-1"
   }
}

Elemento Grafica_Mensola_LAM_Air
{
   Descrizione = "Grafica mensola LAM"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                ""   552
      Y                ""   60
      Z                ""   270

      //disattivo la grafica per vedere le staffe
      Staffe_Vedi      ""   0   Implicit

      FLAG_Depth       ""   0

      Vedi_Struttura   ""   0

      HIDE             ""   1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = PADRE(ATTUALE(),1)

      Vedi_Struttura = Staffe_Vedi

      Spe_Pan_Fnd = 18
      Spe_Pan_Cop = 18

      //Simone 24/01/2022
      //Spe_Mas_Lat = 18
      Spe_Mas_Centrale = 55

      Spe_Mas = 50

      RieZ_Mas_Rt2 = 39

      // Finitura
      FIN_orie     = "O"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C028;C002")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //per avere la grafica pulita
   Posiziona Blocco bl
   {
      @escluso = Vedi_Struttura
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona Blocco sotto
   {
      @escluso = 1 - Vedi_Struttura

      GOSUB posa_blocco
      @Y = Spe_Pan_Fnd

      @PosMassello = "FONDO"

      @UsoSottoTop = 1
   }

   Posiziona Blocco sopra
   {
      @escluso = 1
      // - Vedi_Struttura
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - Spe_Pan_Cop
      @Y = Spe_Pan_Cop
      @f_rivestimento = "0.9"

      @PosMassello = "COPERCHIO"
   }

   Posiziona Blocco retro
   {
      @escluso = 1 - Vedi_Struttura
      GOSUB posa_blocco
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @Z = Spe_Mas
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop

      @PosMassello = "RETRO"
   }

   Posiziona Blocco retro2
   {
      //Simone 24/01/2022
      //@escluso = 1 - Vedi_Struttura
      @escluso = 1
      if( Vedi_Struttura == 1 & Z > 406 ) { @escluso = 0 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas + RieZ_Mas_Rt2
      @X = X
      @Z = Spe_Mas_Centrale
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop

      @PosMassello = "RETRO-2"

      if( FLAG_Depth == 1 ) { @escluso = 1 }
   }

   Posiziona Blocco fronte
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Z - Spe_Mas
      @X = X
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @Z = Spe_Mas

      @PosMassello = "FRONTE"
   }

   Posiziona Blocco fsx1
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas
      @Z = RieZ_Mas_Rt2
      //@Z = Z - Spe_Mas_Rt - Spe_Mas
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "SX-1"

      if( FLAG_Depth == 1 | Z <= 406 ) { @Z = Z - 2*Spe_Mas }
   }

   Posiziona Blocco fsx2
   {
      //@escluso = 1 - Vedi_Struttura
      @escluso = 1
      if( Vedi_Struttura == 1 & Z > 406 ) { @escluso = 0 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas + Spe_Mas_Centrale + RieZ_Mas_Rt2
      @Z = Z - Spe_Mas*2 - Spe_Mas_Centrale - RieZ_Mas_Rt2
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "SX-2"

      if( FLAG_Depth == 1 ) { @escluso = 1 }
   }

   Posiziona Blocco fdx1
   {
      @escluso = 1 - Vedi_Struttura
      @base_0.x = base_0.x + X - Spe_Mas
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas
      @Z = RieZ_Mas_Rt2
      //@Z = Z - Spe_Mas_Rt - Spe_Mas
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "DX-1"

      if( FLAG_Depth == 1 | Z <= 406  ) { @Z = Z - 2*Spe_Mas }
   }

   Posiziona Blocco fdx2
   {
      //@escluso = 1 - Vedi_Struttura
      @escluso = 1
      if( Vedi_Struttura == 1 & Z > 406 ) { @escluso = 0 }

      @base_0.x = base_0.x + X - Spe_Mas
      @base_0.y = base_0.y + Spe_Pan_Fnd
      @base_0.z = base_0.z + Spe_Mas + Spe_Mas_Centrale + RieZ_Mas_Rt2
      @Z = Z - Spe_Mas*2 - Spe_Mas_Centrale - RieZ_Mas_Rt2
      @Y = Y - Spe_Pan_Fnd - Spe_Pan_Cop
      @X = Spe_Mas

      @PosMassello = "DX-2"

      if( FLAG_Depth == 1 ) { @escluso = 1 }
   }
}

Elemento Staffa_Mensola_Air
{
   Descrizione = "Staffa_Mensola_Air"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"            552
      Y       "Spessore"              60
      Z       "Profondità"           270

      //dimensione lavorazione
      Xt      "" 568
      Yt      ""  64

      //LZ 24/09/2021
      VAR_Vedi_Lavorazione "" 1

      //Luca 19/01/2022
      VAR_MaterialeStr     "" "" Implicit

      Scassa_Chi_Plus      "" ""

      RADICE      "" ""
      perRADICE   "" ""

      FIN_var  "" "C082"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Sp_Pia   = 5

      RieX_LAV = 8
      RieY_LAV = 2

      //LZ 24/09/2021
      RieY_DxSx = 14

      //Luca 06/12/2021
      PosX_CornoSx = 75 - 30/2
      PosX_CornoDx = X - 75 - 30/2
   }

   PuntiNotevoli
   {
      //LZ 24/09/2021
      //X = Xt - 2*RieX_LAV
      //Y = Yt - 2*RieY_LAV
      if( VAR_Vedi_Lavorazione )
      {
         X = Xt - 2*RieX_LAV
         Y = Yt - 2*RieY_LAV
      }
      else
      {
         Xt = X + 2*RieX_LAV
         Yt = Y + 2*RieY_LAV
      }

      GOSUB punti_XtYt
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      if( Scassa_Chi_Plus == ""
        & VAR_Vedi_Lavorazione == 1 ) { GOSUB TrovaIdx_DaScassare_MensolaAir }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = X
      GEST_Y = Z
      GEST_Z = Y

      //LZ 24/09/2021
      perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")
      GEST_CODICE = ""

      perRADICE = "STMAIR"
      if( UN_PADRE("Mensola_Dub") ) { perRADICE = "SSMV" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco Ing
   {
      @escluso = 1

      GOSUB posa_blocco

      @X = Xt
      @Y = Yt

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

   Posiziona BloccoSmussatoZ lav
   {
      @escluso = 1
      if( $CNP != 0
        & Scassa_Chi_Plus == ""
        & VAR_Vedi_Lavorazione == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = Xt
      @Y = Yt
      @Z = Sp_Pia + 0.1

      @base_0.z = base_0.z - 0.1

      @Raggio = 10

      GOSUB rivestimento
   }

   Posiziona BloccoSmussatoZ_Scassa scslav
   {
      @escluso = 1
      if( $CNP == 0
        & Scassa_Chi_Plus != ""
        & VAR_Vedi_Lavorazione == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = Xt
      @Y = Yt
      @Z = Sp_Pia * 3

      @base_0.z = base_0.z - @Z + Sp_Pia

      @Raggio = 10

      @Scassa_Chi_Plus = Scassa_Chi_Plus

      //GOSUB rivestimento
   }

   Posiziona Blocco rtr
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + RieX_LAV
      @base_0.y = base_0.y + RieY_LAV
      @Z = Sp_Pia
      GOSUB rivestimento
   }

   Posiziona Blocco sx
   {
      offx_staffa_sx = RieX_LAV + 75 - @X/2

      GOSUB posa_blocco
      @X = 30
      @Z = Z - Sp_Pia
      @base_0.x = base_0.x + offx_staffa_sx
      @base_0.y = base_0.y + RieY_LAV
      @base_0.z = base_0.z + 5

      //LZ 24/09/2021
      if( VAR_Vedi_Lavorazione == 0 )
      {
         @Y = @Y - 2*RieY_DxSx
         @base_0.y = @base_0.y + RieY_DxSx
      }

      GOSUB rivestimento
   }

   Posiziona CilindroY_Quota fr1
   {
      @X = 4
      @Y = Y - 18

      @base_0.x = base_0.x + offx_staffa_sx + 30/2 - @X/2
      @base_0.y = base_0.y + 9
      @base_0.z = base_0.z + 25 - @X/2

      @Stp_Quota_Foro_St = 1
      @Stp_Quota_Foro_St2 = 1
   }

   Posiziona CilindroY_Quota fr2
   {
      @escluso = 0

      @X = 8
      @Y = Y - 18

      @base_0.x = base_0.x + offx_staffa_sx + 30/2 - @X/2
      @base_0.y = base_0.y + 9
      @base_0.z = base_0.z + Z - 25 - @X/2

      @Stp_Quota_Foro_St = 1
      @Stp_Quota_Foro_St2 = 1

      ////Luca 19/01/2022
      //if( UN_PADRE("Mensola_Air") )
      //{
      //   if( VAR_MaterialeStr == "LACCATA"
      //     | VAR_MaterialeStr == "LAMINATO"  )
      //   {
      //      @escluso = 1
      //      @Stp_Quota_Foro_St = 0
      //   }
      //}

   }

   Posiziona Blocco dx
   {
      offx_staffa_dx = Xt - RieX_LAV - 75 - @X/2

      GOSUB posa_blocco
      @X = 30
      @Z = Z - Sp_Pia
      //@base_0.x = base_0.x + Xt - RieX_LAV - 75 - @X/2
      @base_0.x = base_0.x + offx_staffa_dx
      @base_0.y = base_0.y + RieY_LAV
      @base_0.z = base_0.z + 5

      //LZ 24/09/2021
      if( VAR_Vedi_Lavorazione == 0 )
      {
         @Y = @Y - 2*RieY_DxSx
         @base_0.y = @base_0.y + RieY_DxSx
      }

      GOSUB rivestimento
   }

   Posiziona CilindroY_Quota fr3
   {
      @X = 4
      @Y = Y - 18

      @base_0.x = base_0.x + offx_staffa_dx + 30/2 - @X/2
      @base_0.y = base_0.y + 9
      @base_0.z = base_0.z + 25 - @X/2

      @Stp_Quota_Foro_St = 1
   }

   Posiziona CilindroY_Quota fr4
   {
      @escluso = 0

      @X = 8
      @Y = Y - 18

      @base_0.x = base_0.x + offx_staffa_dx + 30/2 - @X/2
      @base_0.y = base_0.y + 9
      @base_0.z = base_0.z + Z - 25 - @X/2

      ////Luca 19/01/2022  mantis 0025474
      //if( UN_PADRE("Mensola_Air") )
      //{
      //   if( VAR_MaterialeStr == "LACCATA"
      //     | VAR_MaterialeStr == "LAMINATO" )
      //   {
      //      @escluso = 1
      //      @Stp_Quota_Foro_St = 0
      //   }
      //}
   }

   Posiziona PCV_ContCollisioni_368 pcv1
   {
      //@escluso = 1
      //if( UN_PADRE("ScrivaniaMuro_AIR") ) { @escluso = 0 }

      @X = 130
      //Luca 07/12/2021 15 per lato
      if( UN_PADRE("Mensola_Air") )  { @X = 30 + 15 + 15 }
      @Y = Y + 25
      @Z = Z + 25

      @base_0.x = base_0.x + offx_staffa_sx + 15 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
   }

   Posiziona PCV_ContCollisioni_368 pcv2
   {
      //@escluso = 1
      //if( UN_PADRE("ScrivaniaMuro_AIR") ) { @escluso = 0 }

      @X = 130
      //Luca 07/12/2021 15 per lato
      if( UN_PADRE("Mensola_Air") )  { @X = 30 + 15 + 15 }

      @Y = Y + 25
      @Z = Z + 25

      @base_0.x = base_0.x + offx_staffa_dx + 15 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
   }
}

Elemento Staffa_MensolaDepth_Air
{
   Descrizione = "Staffa MensolaDepth Air"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"            225
      Y       "Spessore"              60
      Z       "Profondità"           270

      Verso    "" -1

      FIN_var  "" "C082"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_centro = [40,0,0]
      if( Verso > 0 ) { pnt_centro = [X-40,0,0] }

   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //manca codice staffa p.387
      perCODICE = "B20018"
      if( Z > 400 ) { perCODICE = "B20016" }

      if( Verso > 0 )
      {
         perCODICE = "B20017"
         if( Z > 400 ) { perCODICE = "B20015" }
      }
      GEST_CODICE = perCODICE

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco lav
   //{
   //   GOSUB posa_blocco
   //   @Z = 5
   //   GOSUB rivestimento
   //}

   Posiziona Blocco rtr
   {
      GOSUB posa_blocco
      @Z = 5
      GOSUB rivestimento
   }

   Posiziona Blocco st
   {
      @base_0.x = base_0.x + 25
      if( Verso > 0 ) { @base_0.x = base_0.x + X - 25 - @X }
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z + 5
      @X = 30
      @Y = Y - 20
      @Z = Z - 5
      GOSUB rivestimento
   }

   Posiziona PCV_ContCollisioni_368 pcv1
   {
      @X = 30 + 15 + 15
      @Y = Y + 25
      @Z = Z + 25

      @base_0.x = base_0.x + 25 - 15
      if( Verso > 0 ) { @base_0.x = base_0.x + X - 25 - @X + 15 }
      @base_0.y = base_0.y
      @base_0.z = base_0.z
   }


   Posiziona CilindroY_Quota fr1
   //Posiziona CilindroY_Scassa fr1
   {
      @escluso = 0

      @X = 14

      @Y = Y - 18

      @base_0.x = base_0.x + 25 + 30/2 - @X/2
      if( Verso > 0 ) { @base_0.x = base_0.x + X - 25 - 30/2 - @X/2 }

      @base_0.y = base_0.y + 9
      //Simone 05/11/21
      //@base_0.z = base_0.z + 152 - @X/2
      @base_0.z = base_0.z + 86 - @X/2
      if( Z > 313 )  { @base_0.z = base_0.z + 152 - @X/2 }

      @Stp_Quota_Foro_St = 1
      //quota profondità
      @Stp_Quota_Foro_St2 = 1
   }

   Posiziona CilindroY_Quota fr2
   //Posiziona CilindroY_Scassa fr1
   {
      @escluso = 0

      @X = 14
      @Y = Y - 18

      @base_0.x = base_0.x + 25 + 30/2 - @X/2
      if( Verso > 0 ) { @base_0.x = base_0.x + X - 25 - 30/2 - @X/2 }

      @base_0.y = base_0.y + 9
      //Simone 05/11/21
      //@base_0.z = base_0.z + 152 + 220 - @X/2
      @base_0.z = base_0.z + Z - 55 - @X/2

      @Stp_Quota_Foro_St = 2
      //quota profondità
      @Stp_Quota_Foro_St2 = 1
   }
}
//} MENSOLE AIR

//Lavabo generico: può essere a muro, attrezzabile su basi/mensole air, posizionato
Elemento LavaboGenerico
{
   Descrizione = "Lavabo"
   Code        = CUB
   Gruppo      = "Lavabo"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Mensola_Air Top_2P0
   //ScoccaT_BaseStandard
   //Altimetro    Auto
   Alias OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"   500
      Y    "Altezza"     140
      Z    "Profondità"  560

      Filler2 " " "" ShowAlways

      TipoLavabo    "Tipologia Lavabo"  0 Menu ( TpLavabo )
      TipoLavaboStr "" ""

      VAR_TipoPos   "" ""

      idx_top "" -1
      idx_bas "" -1

      //GESTIONE LAVELLO INBILICO
      VAR_Inbilico_Orie "Orientamento lavabo INBILICO"  0 Menu ( OrieInbil )

      //VAR_Inbilico_LavX    "" 0
      //VAR_Inbilico_LavZ    "" 0
      VAR_Inbilico_LavOffZ "" 0
      VAR_Inbilico_LavOffX "" 0
      VAR_OffZ_Rub         "" 0

      //VAR_Inbilico_VAR_Diam    "" 40
      //VAR_Inbilico_VAR_DiamInf "" 70
      //Simone 09/11/21 - Diametro > Raggio
      // VAR_Inbilico_VAR_Diam    "" 80
      // VAR_Inbilico_VAR_DiamInf "" 140

      //cellule, offset lavabo da muro
      VAR_Cellule_VAR_OffZ     "" 98
      VAR_Cellule_VAR_DiamHPL  "" 290

      // per lavello cellule
      VAR_Laccato   "" 0

      VAR_Lav_OX    "Posizione Lavabo in X (centro) "   0 Utente ( )
      VAR_Lav_OZ    "Posizione Lavabo in Z"             0 Utente ( )

      VAR_Rubinetto "Con foro rubinetto"  0 Menu ( SiNo )

      VAR_ScassoX   "" 0
      VAR_ScassoZ   "" 0

      RigeneraScasso "Rigenera Scasso"      0
      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""

      NO_GEST "" 0

      VediIngombro   "" 1
      VediIngScassi  "" 0

      idx_cnear "" -1

      FIN_var "" "C028"

      M4_A_MURO "" 1

      M4_MIS "" "Filler*;X;Y;Z;VAR_Inbilico_Orie;VAR_Rubinetto;VAR_Lav_OX;VAR_Lav_OZ"

      HIDE "" 0
      CMP2_AZIONI      ""      "S"

      FillerM2G          " " "" ShowAlways

      VT_NFC "NFC"  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Configura_Lavabo
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Luca 04/05/2021
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      pnt_scs_centro = [X/2,0,Z/2]

      //Luca 06/12/2021
      if( TipoLavaboStr=="INBILICO" ) { pnt_scs_centro = [VAR_Inbilico_LavOffX,0,VAR_Inbilico_LavOffZ] }

      stp_base_0 = base_0
      stp_base_1 = base_1
      stp_base_2 = base_2
      stp_base_3 = base_3
   }

   #include %path_bdm%\TLib\Orie.inc

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

         //Luca 04/05/2021 basica sia a muro che attrezzato
         //if( VAR_TipoPos ==  "ATTREZZATO" )
         if( IS_MATCH( VAR_TipoPos , "*ATTREZZATO*" ) == 1 )
         {
            if( TipoLavaboStr == "BASICA" )
            {
               //LZ 25/08/2021: utilizzo dimensioni totali top
               //if( VAR_VAL($query_p1,"Z") > 500
               //  & VAR_VAL($query_p1,"X") >= 920  ) { $QueryResult__ = 1 }
               if( NOME($query_p1) == "Mensola_Air"
                 & VAR_VAL($query_p1,"X") <= 500
                 & VAR_VAL($query_p1,"Z")  < 520 ) { $QueryResult__ = 0 }

               if( NOME($query_p1) == "Top_2P0"
                 & VAR_VAL($query_p1,"Xt") <= 500
                 & VAR_VAL($query_p1,"Zt")  < 520 ) { $QueryResult__ = 0 }

               //LZ 20/06/21: sblocco per top e basi
               //if( NOME($query_p1) == "ScoccaT_BaseStandard" ) { $QueryResult__ = 0 }
               //if( NOME($query_p1) == "Top_2P0" ) { $QueryResult__ = 0 }
            }

            if( TipoLavaboStr == "INBILICO"
              | TipoLavaboStr == "ELYSSA" )
            {
               COMPONENTI2("wk_lav",$query_p1,"LavaboGenerico")
               if( wk_lav > 0 )                                                      { $QueryResult__ = 0 }

               //Simone 18/10/21 - Permetto l'attrezzaggio di due lavabi
               if( NOME($query_p1) == "Mensola_Air" & VAR_VAL($query_p1,"X") >= 920 )
               {
                  if( wk_lav < 2 ) { $QueryResult__ = 1 }
               }

               if( NOME($query_p1) == "Top_2P0" & VAR_VAL($query_p1,"Xt") >= 920 )
               {
                  if( wk_lav < 2 ) { $QueryResult__ = 1 }
               }

               if( NOME($query_p1) == "Mensola_Air" & VAR_VAL($query_p1,"Z") < 400 ) { $QueryResult__ = 0 }

               if( NOME($query_p1) == "Top_2P0"    & VAR_VAL($query_p1,"Zt") < 400 ) { $QueryResult__ = 0 }
            }
         }

         //Simone 26/04/2023 - Blocco su top sp.4
         if( NOME($query_p1) == "Top_2P0" )
         {
           if( VAR_VAL_STR($query_p1,"VAR_TipoTopStr") == "VETRO_4"
             | VAR_VAL_STR($query_p1,"VAR_TipoTopStr") == "XGLASS_4" ) { $QueryResult__ = 0 }
         }
      }

      if( $query_type == 5 )
      {
         //Luca 04/05/2021 basica sia a muro che attrezzato
         //if( VAR_TipoPos == "A MURO" )
         if( IS_MATCH( VAR_TipoPos , "*A MURO*" ) == 1 )
         {
            COMANDO2("LIVELLI CLEAR OnWall")
            COMANDO2( STRCAT("LIVELLI ADD OnWall ", STR(500), " ", STR(600)) )
            COMANDO2( STRCAT("LIVELLI ADD OnWall ", STR(500), " ", STR(600)) )
            $QueryResult__ = 1
         }
      }
   }

   Attrezza
   {
      ATTREZZA_SU = "MENSOLA"
      if( UN_PADRE("ScoccaT_Bas*") ) { ATTREZZA_SU = "BASE" }
      if( UN_PADRE("Top_2P0") )      { ATTREZZA_SU = "TOP" }

      idx_ref = @idx_att

      base_0.x = @base_0.x + VAR_Lav_OX - X/2
      base_0.y = @alto_0.y
      base_0.z = @base_0.z + VAR_Lav_OZ
      //Simone 02/02/2024
      if( TipoLavaboStr == "INBILICO"
        & VAR_VAL(ATTUALE(),"REV_PosZ") ) { base_0.z = @base_0.z + wk_zp - Z - VAR_Lav_OZ }

      if( ATTREZZA_SU=="BASE" )
      {
         if( IsIdx(idx_ref,"idx_top") ) { base_0.y = @alto_0.y + VAR_VAL(@idx_top,"SpessorePiano") }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_RangePosizionamento_LavaboBasica

      GOSUB Ctrl_RangePosizionamento_LavaboInBilico

      if( FaiScasso == 1 )
      {
         GOSUB TrovaIdxTopDaScassare
         GOSUB TrovaIdx_DaScassare_MensolaAir

         CRS_lista_var = "VAR_Rubinetto;VAR_Lav_OX;VAR_Lav_OZ;VAR_Inbilico_Orie;VAR_Scasso_Top_Diam"
         GOSUB CheckRigeneraScasso
         if( CRS_Result == 1 )  { RigeneraScasso = 1 }

         //rigenera scasso manuale
         if( RigeneraScasso==1 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
            RigeneraScasso = 0

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

            //GOSUB EliminaScassi
            //COMANDO("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
         }
      }

      //Luca 05/05/2021
      //calcolo la distanza da muro
      if( ACTION() > 0 )
      {
         DistanzaDaMuro = 0
         if( GetTopLevel(ATTUALE()) != ATTUALE() )
         {
            b0_lav = base_0

            SET_#(GetTopLevel(ATTUALE()))
            b0_str = #base_0

            ang_test = ANG_TOT_NOR(GetTopLevel(ATTUALE())) + 90

            DistanzaDaMuro = DistanzaFraPunti(b0_lav,b0_str,ang_test )
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C008_LavCellule

      if( NO_GEST == 1 & $ATTIVA_DLL==1 )
      {
         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7

         DescEdit__ = "DEPTH"
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente

      GOSUB Elimina_Scasso
   }

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

      //if( VAR_TipoPos != "ATTREZZATO" ) { EXITSUB() }
      if( IS_MATCH( VAR_TipoPos , "*ATTREZZATO*" ) != 1 ) { EXITSUB() }

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

      #ifdef TEC;AZI
      //Luca 07/12/2021 mantis 025482: Bagno - Lavabo Basica
      //"inserire un messaggio all'inserimento del lavabo basica da 1000 su base o mensola,
      //che ricordi di fare richiesta di disegno tecnico all'UT"
      if( TipoLavaboStr == "BASICA" & X == 1000  & ins2_att > 0 )
      {
         msg = "Necessaria richiesta disegno tecnico all'U.T."
         DISPLAY2(msg)
      }
      #endif
   }

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

      GOSUB OnChangedVar_Lavabo_OffsetX
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @Z = 10
   //   //@Y = Y + 10
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona __import__ sat1
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @import = file_sat1

      if( TipoLavaboStr=="INBILICO" )
      {
         wk_z = 372
         @base_0.x = base_0.x + X/2
         @base_0.z = base_0.z + wk_z/2

         @ang_y = 0

         if( VAR_Inbilico_Orie == -2 ) { @ang_y = -90 }
         if( VAR_Inbilico_Orie == -1 ) { @ang_y = -45 }
         if( VAR_Inbilico_Orie ==  1 ) { @ang_y =  45 }
         if( VAR_Inbilico_Orie ==  2 ) { @ang_y =  90 }
      }

      FIN_var = FIN_sat1
      GOSUB rivestimento
   }

   Posiziona __import__ sat2
   {
      @escluso = 1
      if( file_sat2 != "" )  { @escluso = 0 }
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @import = file_sat2

      FIN_var = FIN_sat2
      GOSUB rivestimento
   }

   Posiziona Blocco bl
   {
      @escluso = 1
      if( TipoLavaboStr=="DEPTH"  ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = 10

      @f_rivestimento = "0.9"
   }

   //per simulare la grafica corretta in caso di mensola WW
   Posiziona Blocco grf
   {
      @escluso = 1
      if( TipoLavaboStr=="DEPTH"  )
      {
         if( IS_MATCH( VAR_VAL_STR(PADRE(idx_att,1),"GEST_C028") , "WW*") == 1 ) { @escluso = 0 }
      }

      @X = X + 20
      @Y = Y - 10 - 1
      @Z = Z + 20

      @base_0.x = base_0.x - 10
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z - 10

      FIN_idx_gest = PADRE(idx_att,1)
      FIN_var      = "C028"
      FIN_orie     = "O"
      GOSUB rivestimento

      @SCASSA_DEPTH = 1
   }

   //Simone 24/10/2022
   Posiziona __import__ vas
   {
      @escluso = 1
      if( TipoLavaboStr=="DEPTH" ) { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y - 50
      @base_0.z = base_0.z - 40

      @import = STRCAT($path_sat,"Lavabi\Dett_Vasca_Depth.sat")
      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco_Scassa sc1
   {
      @escluso = 1

      GOSUB posa_blocco

      if( TipoLavaboStr == "DEPTH"  )
      {
         @escluso = 0
         @base_0.y = base_0.y - 5
         @Y = Y + 10
      }

      if( TipoLavaboStr == "BASICA"  )
      {
         @escluso = 0
         @base_0.y = base_0.y - 90
         @Y = 100
         @Z = VAR_ScassoZ
         @X = VAR_ScassoX
         @base_0.x = base_0.x + X/2 - @X/2
      }

      @Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus, Scassa_Chi_Plus_SottoTop)
   }

   Posiziona RubinettoGenerico rub
   {
      @escluso = 1 - VAR_Rubinetto

      //non mi servono gli scassi ma la variabile VAR_Rubinetto è a 1
      if( TipoLavaboStr == "BASICA"
        | TipoLavaboStr == "CELLULE" ) { @escluso = 1 }

      @TipoRubinetto = 0

      @VAR_OffZ = 70

      @VAR_AccessorioSX_OffX = 100
      @VAR_AccessorioDX_OffX = 100
      @VAR_AccessorioSX_OffZ = @VAR_OffZ
      @VAR_AccessorioDX_OffZ = @VAR_OffZ

      @base_0.x = base_0.x + X/2 //+ @VAR_OffX
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z //- @VAR_OffZ

      //posizione di default inbilico
      if( TipoLavaboStr == "INBILICO" )
      {
         //@VAR_OffZ = 350 - VAR_Inbilico_LavOffZ
         //if( ABS( VAR_Inbilico_Orie ) == 1 ) { @VAR_OffZ = 311 - VAR_Inbilico_LavOffZ }
         //if( ABS( VAR_Inbilico_Orie ) == 2 ) { @VAR_OffZ = 220 - VAR_Inbilico_LavOffZ }
         @VAR_OffZ = VAR_OffZ_Rub

         @VAR_OffX = 0
         if( VAR_Inbilico_Orie == -2 ) { @VAR_OffX = -1* (X/2 - VAR_Inbilico_LavOffX - 82) }
         if( VAR_Inbilico_Orie == -1 ) { @VAR_OffX = -1* (X/2 - VAR_Inbilico_LavOffX - 38) }

         if( VAR_Inbilico_Orie == 1 ) { @VAR_OffX = VAR_Inbilico_LavOffX - X/2 - 38 }
         if( VAR_Inbilico_Orie == 2 ) { @VAR_OffX = VAR_Inbilico_LavOffX - X/2 - 82 }

         @base_0.x = base_0.x + X/2 //+ @VAR_OffX
         @base_0.y = base_0.y
         @base_0.z = base_0.z //+ @VAR_OffZ
      }

      if( TipoLavaboStr == "ELYSSA" ) { @base_0.y = base_0.y }

      idx_rubinetto = ATTUALE()
   }

   //Simone 12/09/2022
   Posiziona TAG_NFC nfc
   {
      @escluso = 1 - VT_NFC

      @ang_y = 90
      @base_0.x = base_0.x + X/2 + 75
      @base_0.y = base_0.y + 100 - @Y
      @base_0.z = base_0.z + @X
   }

   //{ MASSELLATURA LAVABO BASICA
   Posiziona Blocco lb_msx
   {
      @escluso = 1
      if( TipoLavaboStr == "BASICA" )
      {
         idx_men = PADRE(idx_att,1)
         if( IS_MATCH( VAR_VAL_STR(idx_men,"GEST_C028") , "WW*") == 1 ) { @escluso = 0 }
      }

      @X = 54
      @Y = 69.10
      @Z = 245.5
      @base_0.x = base_0.x + X/2 - VAR_ScassoX/2 - 18
      @base_0.y = base_0.y - 80 + 10
      @base_0.z = base_0.z + 72.5
   }

   Posiziona Blocco lb_mdx
   {
      @escluso = 1
      if( TipoLavaboStr == "BASICA" )
      {
         idx_men = PADRE(idx_att,1)
         if( IS_MATCH( VAR_VAL_STR(idx_men,"GEST_C028") , "WW*") == 1 ) { @escluso = 0 }
      }

      @X = 54
      @Y = 69.10
      @Z = 245.5
      @base_0.x = base_0.x + X/2 + VAR_ScassoX/2 + 18 - @X
      @base_0.y = base_0.y - 80 + 10
      @base_0.z = base_0.z + 72.5
   }

   Posiziona Blocco lb_fro
   {
      @escluso = 1
      if( TipoLavaboStr == "BASICA" )
      {
         idx_men = PADRE(idx_att,1)
         if( IS_MATCH( VAR_VAL_STR(idx_men,"GEST_C028") , "WW*") == 1 ) { @escluso = 0 }
      }

      @X = 258
      @Y = 69.10
      @Z = 54
      @base_0.x = base_0.x + X/2 - VAR_ScassoX/2 - 18 + 54
      @base_0.y = base_0.y - 80 + 10
      @base_0.z = base_0.z + VAR_ScassoZ + 18 - @Z
   }
   //} MASSELLATURA LAVABO BASICA

   //{ LAVABO INBILICO
   //per dbg
   Posiziona Blocco Ingib
   {
      @escluso = 1
      //if( TipoLavaboStr == "INBILICO" )  { @escluso = 0 }

      @X = 10  //VAR_Inbilico_LavX
      @Y = 100
      @Z = 400 //VAR_Inbilico_LavZ
      @base_0.x = base_0.x + VAR_Inbilico_LavOffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z - 50

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

   //Posiziona CilindroY scs2
   Posiziona CilindroY_Scassa scs2
   {
      @escluso = 1
      if( TipoLavaboStr == "INBILICO"
        | TipoLavaboStr == "ELYSSA" )  { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + VAR_Inbilico_LavOffX - VAR_Scasso_Top_Diam/2
      @base_0.y = base_0.y - 90
      @base_0.z = base_0.z + VAR_Inbilico_LavOffZ - VAR_Scasso_Top_Diam/2

      @X = VAR_Scasso_Top_Diam
      @Y = 150
      @Z = @X

      if( TipoLavaboStr == "ELYSSA" )
      {
         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.z = base_0.z + Z/2 - @Z/2
      }

      @StpQuotaScasso_Cil = 1

      @Scassa_Chi_Plus = Scassa_Chi_Plus //STRCAT(Scassa_Chi_Plus, Scassa_Chi_Plus_SottoTop)
   }

   //Posiziona CilindroY scs2inf
   Posiziona CilindroY_Scassa scs2inf
   {
      @escluso = 1
      if( TipoLavaboStr == "INBILICO"
        | TipoLavaboStr == "ELYSSA" )  { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + VAR_Inbilico_LavOffX - VAR_Scasso_StTop_Diam/2
      @base_0.y = base_0.y - 90
      @base_0.z = base_0.z + VAR_Inbilico_LavOffZ - VAR_Scasso_StTop_Diam/2

      @X = VAR_Scasso_StTop_Diam
      @Y = 50
      @Z = @X

      if( TipoLavaboStr == "ELYSSA" )
      {
         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.z = base_0.z + Z/2 - @Z/2
      }

      @StpQuotaScasso_Cil_S = 1

      if( UN_PADRE("Top_2P0") ) { @base_0.y = base_0.y - VAR_VAL(idx_pdr,"Y") - @Y }

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop //Scassa_Chi_Plus
   }
   //} LAVABO INBILICO

   //LZ 07/05/2021: aggiungo disco hpl per cellule
   //{ CELLULE
   Posiziona CilindroY ptt1
   {
      @escluso = 1
      if( TipoLavaboStr == "CELLULE" )  { @escluso = 0 }

      GOSUB posa_blocco

      @X = VAR_Cellule_VAR_DiamHPL
      @Y = 5
      @Z = @X

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

      @c_rivestimento = [30, 30, 30]
   }
   //} CELLULE

   Posiziona Piletta pil
   {
      @escluso = 1
      if( TipoLavaboStr == "CELLULE"
        | TipoLavaboStr == "ELYSSA" ) { @escluso = 0 }

      @X = 71
      @Y = 10
      @Z = 71

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + @Y + 15
      @base_0.z = base_0.z + Z/2 - @Z/2
      if( X == 555 ) { @base_0.y = @base_0.y + 15 }

      // FIN_var = FIN_sat2
      // GOSUB rivestimento

      if( TipoLavaboStr ==  "CELLULE" ) { @base_0.z = base_0.z + Z/2 + 12.2 }
   }

   Posiziona _cont_per_near near
   {
      GOSUB posa_blocco

      if( TipoLavaboStr == "BASICA"
        | TipoLavaboStr == "INBILICO"
        | TipoLavaboStr == "ELYSSA" ) { @base_0.y = base_0.y - 90 }

      idx_cnear = ATTUALE()
   }
}

Elemento RubinettoGenerico
{
   Descrizione = "Rubinetto Generico"
   Code        = CUB
   Gruppo      = "Lavabo"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile LavaboGenerico
   Altimetro    Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"    20

      Y    "Altezza"     120

      Z    "Profondità"   20

      TipoRubinetto   "Tipologia Rubinetto"  0 Menu ( TipoRub )
      TipoRubinettoStr "" ""

      VAR_OffX    "Offset X da centro lavabo"    0  Utente ( )
      VAR_OffZ    "Offset Z da retro lavabo"     0  Utente ( )
      VAR_Diam    "Diametro"                     35 Utente ( 15- )
      VAR_DiamInf "Diametro Inferiore"           41

      VAR_AccessorioSX        "Accessorio SX"           0   Menu ( SiNo )
      VAR_AccessorioSX_Diam   "Accessorio SX Diametro"  35  Utente ( 15- )
      VAR_AccessorioSX_OffX   "Accessorio SX Offset X"  100 Utente ( 0- )
      VAR_AccessorioSX_OffZ   "Accessorio SX Offset Z"  0   Utente ( 0- )

      Filler2 " "  " " ShowAlways

      VAR_AccessorioDX        "Accessorio DX"           0   Menu ( SiNo )
      VAR_AccessorioDX_Diam   "Accessorio DX Diametro"  35  Utente ( 15- )
      VAR_AccessorioDX_OffX   "Accessorio DX Offset X"  100 Utente ( 0- )
      VAR_AccessorioDX_OffZ   "Accessorio DX Offset Z"  0   Utente ( 0- )

      idx_top "" -1
      idx_bas "" -1

      RigeneraScasso "Rigenera Scasso"      0
      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""

      NO_GEST "" 0

      VediIngombro   "" 1
      VediIngScassi  "" 0

      idx_cnear "" -1

      FIN_var "" "C028"

      M4_A_MURO "" 1

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

      HIDE "" 0
      CMP2_AZIONI      ""      "S"

      FillerM2G          " " "" ShowAlways

      M4_NO_OFFS "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Configura_Rubinetto
   }

   PuntiNotevoli
   {
      X = VAR_Diam
      Z = VAR_Diam

      GOSUB punti

      //pnt_scs_centro = [X/2,0,Z/2]
      pnt_scs_centro = base_0
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 2 )
      {
         $QueryResult = 0
      }
   }

   //Attrezza
   //{
   //   base_0.x = @base_0.x + @X/2 - X/2
   //   base_0.y = @alto_0.y
   //   base_0.z = @base_0.z + 9.5
   //}

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      if( FaiScasso == 1 )
      {
         GOSUB TrovaIdx_DaScassare_MensolaAir

         CRS_lista_var = "VAR_OffX;VAR_OffZ;VAR_Diam"
         CRS_lista_var = STRCAT(CRS_lista_var,";VAR_AccessorioSX;VAR_AccessorioSX_Diam;VAR_AccessorioSX_OffX;VAR_AccessorioSX_OffZ")
         CRS_lista_var = STRCAT(CRS_lista_var,";VAR_AccessorioDX;VAR_AccessorioDX_Diam;VAR_AccessorioDX_OffX;VAR_AccessorioDX_OffZ")
         GOSUB CheckRigeneraScasso

         RigeneraScasso = CRS_Result

         //rigenera scasso manuale
         if( RigeneraScasso==1 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
            RigeneraScasso = 0

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

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST == 1 & $ATTIVA_DLL==1 )
      {
         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7
         DescEdit__ = MSG(1024)
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente

      GOSUB Elimina_Scasso
   }

   Posiziona __import__ sat1
   {
      @escluso = 1
      if( file_sat_sx != "" )  { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.x = base_0.x - VAR_Diam/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z - VAR_Diam/2
      @import = file_sat

      FIN_var = FIN_sat

      GOSUB rivestimento
   }

   Posiziona __import__ sat_sx
   {
      @escluso = 1
      if( file_sat_sx != "" )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x - VAR_AccessorioSX_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z - VAR_AccessorioSX_OffZ
      @import = file_sat_sx

      FIN_var = FIN_sat_sx

      GOSUB rivestimento
   }

   Posiziona __import__ sat_dx
   {
      @escluso = 1
      if( file_sat_sx != "" )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + VAR_AccessorioDX_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + VAR_AccessorioDX_OffZ
      @import = file_sat_dx

      FIN_var = FIN_sat_sx

      GOSUB rivestimento
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @X = 20
   //   @Y = 50
   //   @Y = 20
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   //Posiziona CilindroY rub
   Posiziona CilindroY_Scassa rub
   {
      @escluso = 0
      if( FaiScasso == 0 ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = VAR_Diam
      @Y = 100

      @base_0.x = base_0.x - VAR_Diam/2 + VAR_OffX
      @base_0.y = base_0.y - 90
      @base_0.z = base_0.z - VAR_Diam/2 - VAR_OffZ

      @Scassa_Chi_Plus = Scassa_Chi_Plus

      //Luca 10/05/2021
      @StpQuotaScasso_Cil = 1
   }

   //Posiziona CilindroY rubinf
   Posiziona CilindroY_Scassa rubinf
   {
      @escluso = 0
      if( FaiScasso == 0
        | VAR_DiamInf == VAR_Diam ) { @escluso = 1 }
      //  | VAR_VAL_STR(idx_pdr,"VAR_TipoTopStr") == "WILDWOOD_80" ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = VAR_DiamInf
      @Y = 50

      @base_0.x = base_0.x - VAR_DiamInf/2 + VAR_OffX
      @base_0.y = base_0.y - 90 - @Y/2
      @base_0.z = base_0.z - VAR_DiamInf/2 - VAR_OffZ

      @StpQuotaScasso_Cil = 2

      if( VAR_VAL_STR(idx_pdr,"ATTREZZA_SU") == "TOP" )
      {
        if( VAR_VAL_STR(idx_pdr,"TipoLavaboStr") == "INBILICO"
          | VAR_VAL_STR(idx_pdr,"TipoLavaboStr") == "ELYSSA"  ) { @base_0.y = base_0.y - VAR_VAL(PADRE(idx_att,2),"Yt") - @Y/2 }
      }

      //Simone 21/06/2022
      if( UN_PADRE("LavaboKERA") )
      {
         @base_0.y = base_0.y - VAR_VAL(idx_pdr,"Y")
         if( VAR_VAL(idx_pdr,"Spe_Top") == 80 ) { @base_0.y = @base_0.y - @Y }
      }

      @Scassa_Chi_Plus = Scassa_Chi_Plus_SottoTop
   }

   Posiziona CilindroY_Tratteggiato ri_stp
   {
      @escluso = 0
      if( FaiScasso == 0
        | VAR_DiamInf == VAR_Diam ) { @escluso = 1 }
      //  | VAR_VAL_STR(idx_pdr,"VAR_TipoTopStr") == "WILDWOOD_80" ) { @escluso = 1 }
      //if( @escluso == 0 )  { @escluso = 1 - VAR_VAL( -1, "wk_OnStampa_MensoleBagno") }

      GOSUB posa_blocco

      @X = VAR_DiamInf
      @Y = 5
      @Z = @X

      @base_0.x = base_0.x - @X/2 + VAR_OffX
      @base_0.y = base_0.y - Y + 45
      @base_0.z = base_0.z - @Z/2 - VAR_OffZ

      if( UN_PADRE("LavaboKERA") ) { @base_0.y = @base_0.y - 45 }
      if( VAR_VAL_STR(idx_pdr,"ATTREZZA_SU") == "TOP"
        & VAR_VAL_STR(idx_pdr,"TipoLavaboStr") == "ELYSSA" ) { @base_0.y = base_0.y - @Y - VAR_VAL(GetTopLevel(ATTUALE()),"Yt") }

      @StpVediScasso_Cil = 1
   }

   //Posiziona CilindroY rub_sx
   Posiziona CilindroY_Scassa rub_sx
   {
      @escluso = 1
      if( FaiScasso == 1 & VAR_AccessorioSX == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = VAR_AccessorioSX_Diam
      @Y = 100

      @base_0.x = base_0.x - VAR_AccessorioSX_OffX - @X/2
      @base_0.y = base_0.y - 90
      @base_0.z = base_0.z - VAR_AccessorioSX_OffZ - @X/2

      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @StpQuotaScasso_Cil = 1
   }

   Posiziona CilindroY_Tratteggiato rsi_stp
   {
      @escluso = 0
      if( FaiScasso == 0
        | VAR_AccessorioSX == 0
        | VAR_DiamInf == VAR_Diam
        | VAR_VAL_STR(idx_pdr,"VAR_TipoTopStr") == "WILDWOOD_80" ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = VAR_DiamInf
      @Y = 5
      @Z = @X

      @base_0.x = base_0.x - VAR_AccessorioSX_OffX - @X/2
      @base_0.y = base_0.y - Y
      @base_0.z = base_0.z - VAR_AccessorioSX_OffZ - @Z/2

      if( VAR_VAL_STR(idx_pdr,"TipoLavaboStr") == "DEPTH" ) { @base_0.y = @base_0.y + 45 }

      @StpVediScasso_Cil = 1
   }

   //Posiziona CilindroY rub_dx
   Posiziona CilindroY_Scassa rub_dx
   {
      @escluso = 1
      if( FaiScasso == 1 & VAR_AccessorioDX == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = VAR_AccessorioDX_Diam
      @Y = 100

      @base_0.x = base_0.x + VAR_AccessorioDX_OffX - @X/2
      @base_0.y = base_0.y - 90
      @base_0.z = base_0.z - VAR_AccessorioDX_OffZ - @X/2

      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @StpQuotaScasso_Cil = 1
   }

   Posiziona CilindroY_Tratteggiato rdi_stp
   {
      @escluso = 0
      if( FaiScasso == 0
        | VAR_AccessorioDX == 0
        | VAR_DiamInf == VAR_Diam
        | VAR_VAL_STR(idx_pdr,"VAR_TipoTopStr") == "WILDWOOD_80" ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = VAR_DiamInf
      @Y = 5
      @Z = @X

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

      if( VAR_VAL_STR(idx_pdr,"TipoLavaboStr") == "DEPTH" ) { @base_0.y = @base_0.y + 45 }

      @StpVediScasso_Cil = 1
   }

   Posiziona _cont_per_near nsx
   //Posiziona Blocco nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - VAR_AccessorioSX_OffX
      @base_0.y = base_0.y - 100
      if(UN_PADRE("LavaboKERA")) { @base_0.y = base_0.y - 160 }
      @base_0.z = base_0.z - VAR_Diam/2 - 20
      @X = Xt
      @Y = 120
      @Z = VAR_Diam + 40

      idx_cnear = ATTUALE()
   }
}

Elemento AccessorioBagno
{
   Descrizione = "Accessorio"
   Code        = CUB
   Gruppo      = "Lavabo"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Mensola_Air MensolaDepth_Air Ripiano_30MM ScoccaT_BaseStandard LavaboGenerico
   Altimetro   Auto
   Alias AGGIUNTO

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"   368 Utente ( )
      Y    "Altezza"      91
      Z    "Profondità"  105

      Posizione         "Posizione"  1 Menu ( DXSX ) SaveAlways
      PosizioneStr      "Posizione"  "DX"

      TipoAccessorio    "Tipologia Accessorio"  0 Menu ( TpAccBgn )
      TipoAccessorioStr "" ""

      VAR_Finitura      ""  0
      VAR_FinituraStr   ""  "Vetro"

      NO_GEST "" 0

      FIN_var "" "C028"

      COD_EREDITA "" "PRE;POST"


      file_sat "" ""

      M4_MIS "" "Filler*;Posizione;X;TipoAccessorio"

      HIDE "" 0
      CMP2_AZIONI      ""      "A"

      //FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      PosizioneStr = "DX"
      if( Posizione < 0 ) { PosizioneStr = "SX" }

      GOSUB Configura_Accessorio
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")

      liv2add = 1
      liv2add[1] = 0

      acc_sx = 0
      acc_dx = 0
      //Luca 04/05/2021
      COMPONENTI2("acc",idx_ref,"AccessorioBagno")

      if( TipoAccessorioStr == "P_ASCIUGAMANI"
        | TipoAccessorioStr == "P_CARTA"  )
      {
         i = 1
         while ( i <= acc )
         {
            if( VAR_VAL(acc[i],"Posizione") > 0 )  { acc_dx = 1 }
            if( VAR_VAL(acc[i],"Posizione") < 0 )  { acc_sx = 1 }

            i = i + 1
         }
      }

      if( Posizione == -1 & acc_sx == 1 )  { annulla_ins = 1  }
      if( Posizione ==  1 & acc_dx == 1 )  { annulla_ins = 1  }

      if( TipoAccessorioStr == "CELLULE_PASCIUGAMANI" )
      {
         npa = 0
         i = 1
         while ( i <= acc )
         {
            if( VAR_VAL_STR(acc[i],"TipoAccessorioStr") == "CELLULE_PASCIUGAMANI" ) { npa = npa + 1 }
            i = i + 1
         }

         if( npa >=2  )  { annulla_ins = 1  }
      }

      if( TipoAccessorioStr == "CELLULE_VASSOIO" )
      {
         nv = 0
         i = 1
         while ( i <= acc )
         {
            if( VAR_VAL_STR(acc[i],"TipoAccessorioStr") == "CELLULE_VASSOIO" )
            {
               nv = nv + 1
               Posizione = -1 * VAR_VAL(acc[i],"Posizione")
            }

            i = i + 1
         }

         if( nv >= 1  )  { annulla_ins = 1  }
      }

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

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

         //Luca 04/05/2021
         COMPONENTI2("acc",$query_p1,"AccessorioBagno")

         if( TipoAccessorioStr == "P_ASCIUGAMANI"
           | TipoAccessorioStr == "P_CARTA"  )
         {
            if( NOME($query_p1) == "Ripiano_30MM" )         { $QueryResult__ = 1 }
            if( NOME($query_p1) == "Mensola_Air" )          { $QueryResult__ = 1 }
            if( NOME($query_p1) == "MensolaDepth_Air" )     { $QueryResult__ = 1 }
            if( NOME($query_p1) == "ScoccaT_BaseStandard" )
            {
               if( VAR_VAL($query_p1,"TipoScocca") ==2 )    { $QueryResult__ = 1 }
            }

            acc_sx = 0
            acc_dx = 0
            i = 1
            while ( i <= acc )
            {
               if( VAR_VAL(acc[i],"Posizione") > 0 )  { acc_dx = 1 }
               if( VAR_VAL(acc[i],"Posizione") < 0 )  { acc_sx = 1 }

               i = i + 1
            }

            if( Posizione == -1 & acc_sx == 1 )  { $QueryResult__ = 0  }
            if( Posizione ==  1 & acc_dx == 1 )  { $QueryResult__ = 0  }
         }

         if( TipoAccessorioStr == "CELLULE_VASSOIO" )
         {
            if( NOME($query_p1) == "LavaboGenerico" )
            {
               if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "CELLULE" ) { $QueryResult__ = 1 }
            }

            nv = 0
            i = 1
            while ( i <= acc )
            {
               if( VAR_VAL_STR(acc[i],"TipoAccessorioStr") == "CELLULE_VASSOIO" ) { nv = nv + 1 }
               i = i + 1
            }

            if( nv >= 2  )  { $QueryResult__ = 0 }
         }

         if( TipoAccessorioStr == "CELLULE_PASCIUGAMANI"  )
         {
            if( NOME($query_p1) == "LavaboGenerico" )
            {
               if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "CELLULE" ) { $QueryResult__ = 1 }
            }

            npa = 0
            i = 1
            while ( i <= acc )
            {
               if( VAR_VAL_STR(acc[i],"TipoAccessorioStr") == "CELLULE_PASCIUGAMANI" ) { npa = npa + 1 }
               i = i + 1
            }
            if( npa >= 1  )  { $QueryResult__ = 0 }
         }

      }
   }

   Attrezza
   {
      offx = 150
      offz = 150
      if( UN_PADRE("MensolaDepth_Air") )
      {
         offx = 24
         offz = 35
      }

      base_0.x = @base_0.x + offx
      if( Posizione > 0 ) { base_0.x = @base_0.x + @X - offx - X }

      base_0.y = @base_0.y - Y
      base_0.z = @base_0.z + offz

      if( TipoAccessorioStr == "CELLULE_VASSOIO"
        | TipoAccessorioStr == "CELLULE_PASCIUGAMANI"  )
      {
         base_0.x = @base_0.x + @X/2
         base_0.y = @base_0.y
         base_0.z = @base_0.z
      }

      if( UN_PADRE("MensolaDepth_Air") )
      {
         base_0.z = @base_1.z - Z - offz
      }
   }

   Controlli
   {
      //LZ 25/05/2021
      //non posso effettuare il controllo collisione per gli accessori cellulle,
      //hanno un ingombro ben superiore al visibile.
      if( TipoAccessorioStr != "CELLULE_VASSOIO"
        & TipoAccessorioStr != "CELLULE_PASCIUGAMANI" ) { GOSUB CANCELLA_AGGIUNTI }

      GOSUB CtrlComune

      if( TipoAccessorioStr != "CELLULE_VASSOIO"
        & TipoAccessorioStr != "CELLULE_PASCIUGAMANI" ) { GOSUB COLLIDE_AGGIUNTI }
   }

   Gestionale
   {
      GOSUB GestComune

      //Simone 19/07/21
      if( TipoAccessorioStr == "CELLULE_VASSOIO" )
      {
         GEST_X = 275
         GEST_Y = 8
         GEST_Z = 227
      }

      if( TipoAccessorioStr == "CELLULE_PASCIUGAMANI" )
      {
         GEST_X = 130
         GEST_Y = 25
         GEST_Z = 100
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      //LZ 07/05/2021: setto/eredito la finitura della giunzione tra vassoio e cellule
      if( TABER_REGOLA == "PRE" )
      {
         if( TipoAccessorioStr == "CELLULE_VASSOIO" )
         {
            wk_fin_pdr = VAR_VAL_STR(PADRE(ATTUALE(),1), "GEST_C028")

            GEST_C025 = "LC001"
            if( IS_MATCH( wk_fin_pdr, "LC*") == 1 ) { GEST_C025 = wk_fin_pdr }
         }
      }

      if( TABER_REGOLA == "POST" )
      {
         if( TipoAccessorioStr == "CELLULE_VASSOIO" )
         {
            VAR_FinituraStr = "Vetro"
            VAR_Finitura = 0
            //LZ 25/05/2021: la posizione dei vassoi è indipendente dal materiale
            //if( IS_MATCH(VAR_VAL_STR(ATTUALE(),"GEST_C028"), "WW*") == 1 ) { VAR_Finitura = 1 }
            //file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_Vetro.sat")
            //if( VAR_Finitura == 1 )  { file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_Legno.sat") }

            if( IS_MATCH(VAR_VAL_STR(ATTUALE(),"GEST_C028"), "WW*") == 1 )
            {
               VAR_FinituraStr = "Legno"
               VAR_Finitura = 1

               GEST_C025 = "LC021"
            }

            file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_", VAR_FinituraStr,"_", PosizioneStr,".sat")
         }
      }
   }

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

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


   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona __import__ sat1
   {
      GOSUB posa_blocco
      @import = file_sat

      FIN_var = "C028"
      GOSUB rivestimento
   }

   //LZ 25/05/2021
   Posiziona Staffa_Acc_Cellule sta1
   {
      @escluso = SE_NUM(TipoAccessorioStr == "CELLULE_VASSOIO", 0, 1)

      @base_0 = base_0
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + 98 + 400/2

      @ang_y = 320
      if( Posizione < 0 ) { @ang_y = 245 }

      @FIN_var = "C025"
   }
}

//LZ 25/05/2021
Elemento Staffa_Acc_Cellule
{
   Descrizione = "Staffa accessorio cellule"
   Code        = STA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Spessore"        40
      Y       "Altezza"         5
      Z       "Profondità"      300
      Zr      "Prof. reale"     200

      FIN_var ""                ""

      HIDE    ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [-X/2,0,0]
      base_2 = [-X/2,0,Z]
      base_3 = [X/2,0,Z]
      base_4 = [X/2,0,0]

      alto_0 = base_0
      alto_0.y = Y

      base_so = base_0
      alto_ne = [X,Y,Z]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Posiziona Blocco stff
   {
      GOSUB posa_blocco

      @Z = Zr

      @base_0   = base_1
      @base_0.z = base_1.z + Z - @Z

      GOSUB rivestimento
   }
}

Elemento SifoneGenerico
{
   Descrizione = "Accessorio"
   Code        = CUB
   Gruppo      = "Lavabo"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile LavaboGenerico LavaboKERA
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"    50
      Y    "Altezza"     100
      Z    "Profondità"  200

      TipoSifone      "Tipologia Sifone"  1 Menu ( TpSifone )
      TipoSifoneStr   "" ""

      NO_GEST         "" 0

      FIN_var         "" "C028"

      COD_EREDITA     "" "PRE;POST"

      file_sat        "" ""
      file_m4s        "" ""
      file_m4s_exist  "" 0

      M4_MIS          "" "Filler*;TipoSifone"

      HIDE            "" 0
      CMP2_AZIONI     "" "A"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Configura_Sifone
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")

      liv2add = 1
      liv2add[1] = 0

      COMPONENTI2("acc",idx_ref,"SifoneGenerico")
      if( acc >= 1  )  { annulla_ins = 1  }

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

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

         //Luca 04/05/2021
         COMPONENTI2("acc",$query_p1,"SifoneGenerico")

         if( acc >= 1  )  { $QueryResult__ = 0 }
      }
   }

   Attrezza
   {
      idx_ref = @idx_att

      offx = @X/2 - X/2
      offy = 0
      offz = 0
      dist_muro = 0

      if( NOME(idx_ref) == "LavaboGenerico" )
      {
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "DEPTH" )    { offz = -43    offy = -49.2 }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "CELLULE" )  { offz = 298.25 offy =  8    }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "SKIN" )     { offz = 280    offy = -30   }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "BASICA" )   { offz = 215                 }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "INBILICO" )
         {
            offz = 280
            if( VAR_VAL_STR(idx_ref,"ATTREZZA_SU") == "MENSOLA" ) { offy = -62 }
            if( VAR_VAL(idx_ref,"VAR_Inbilico_Orie") == -2 )      { offz = 186 offx = 90.5 - X/2 }
            if( VAR_VAL(idx_ref,"VAR_Inbilico_Orie") ==  2 )      { offz = 186 offx = @X - 90.5 - X/2 }
            if( VAR_VAL(idx_ref,"VAR_Inbilico_Orie") == -1 )      { offz = 252 offx = 118 - X/2 }
            if( VAR_VAL(idx_ref,"VAR_Inbilico_Orie") ==  1 )      { offz = 252 offx = @X - 118 - X/2 }
         }
      }

      if( NOME(idx_ref) == "LavaboKERA" ) { offz = 200 }

      if( VAR_EXIST(idx_ref,"DistanzaDaMuro") ) { dist_muro = @DistanzaDaMuro }

      base_0.x = @base_0.x + offx
      base_0.y = @base_0.y - Y + offy
      base_0.z = @base_0.z - dist_muro
      Z = offz + dist_muro
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = 200
      GEST_Y = 100
      GEST_Z = 100

      GOSUB GestComune_Post
   }

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

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

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona CilindroZ cil1
   {
      @escluso = file_m4s_exist

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + 79
      @base_0.z = base_0.z
      @X = 25
      @Z = Z - 15

      if( TipoSifoneStr == "PASSEPARTOUT"
        | TipoSifoneStr == "SALVASPAZIO"
        | TipoSifoneStr == "SCARICO-ORIZZONTALE" )
      {
         @X = 28
         @Z = Z - 10
         @base_0.y = base_0.y + 2
      }

      @c_rivestimento = c_rivestimento
   }

   Posiziona BloccoSmussatoZ cop
   {
      @escluso = 1
      if( file_m4s_exist == 0
        & TipoSifoneStr == "SCARICO-ORIZZONTALE" ) { @escluso = 0}

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @Y + Y - 15
      @base_0.z = base_0.z
      @X = 120
      @Y = 150
      @Z = 5

      @R0 = 4
      @R1 = 4
      @R2 = 4
      @R3 = 4
      @c_rivestimento = c_rivestimento
   }

   Posiziona __import__ sat1
   {
      @escluso = file_m4s_exist

      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z
      @import = file_sat

      @c_rivestimento = c_rivestimento
   }

   Posiziona M4S sifone
   {
      @escluso = 1 - file_m4s_exist

      GOSUB posa_blocco
      if( TipoSifoneStr == "SALVASPAZIO" )         { @base_0.x = base_0.x - 31   }
      if( TipoSifoneStr == "SCARICO-ORIZZONTALE" ) { @base_0.y = base_0.y + 25.5 }

      @import = STRCAT(file_m4s,"|model|model.hsf")

      GOSUB Scala_M4S
      @scale__ = [M4S_scala_x, M4S_scala_y, M4S_scala_z]

      @c_rivestimento = c_rivestimento
      SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")

      @HIDE = 1
   }
}

Elemento MiscelatoreGenerico
{
   Descrizione = "Accessorio"
   Code        = CUB
   Gruppo      = "Lavabo"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile LavaboGenerico LavaboKERA VascaTermoformata
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"    50
      Y    "Altezza"     100
      Z    "Profondità"  200

      TipoMiscelatore      "Tipologia Miscelatore"  1 Menu ( TpMiscelatore )
      TipoMiscelatoreStr   "" ""

      COD_EREDITA          "" "PRE;POST"

      file_sat             "" ""

      FIN_var              "" "C028"
      FIN_orie             "" "O"

      M4_MIS               "" "Filler*"

      HIDE                 "" 0
      CMP2_AZIONI          "" "A"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Configura_Miscelatore
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\TLib\Orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")

      liv2add = 1
      liv2add[1] = 0

      COMPONENTI2("acc",idx_ref,"MiscelatoreGenerico")
      if( acc >= 1  )  { annulla_ins = 1  }

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

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

         COMPONENTI2("acc",$query_p1,"MiscelatoreGenerico")

         if( acc >= 1 )  { $QueryResult__ = 0 }

         //se non è attivo il foro miscelatore, non attrezzo
         if( IS_MATCH(NOME($query_p1),"Lavabo*") == 1
           & VAR_VAL($query_p1,"VAR_Rubinetto") == 0 )  { $QueryResult__ = 0 }
         if( NOME($query_p1) == "VascaTermoformata"
           & VAR_VAL($query_p1,"VT_Miscelatore") == 0 ) { $QueryResult__ = 0 }

         //skin solo miscelatore a parete
         if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "SKIN" ) { $QueryResult__ = 0 }

         //limitazioni da ri-confermare
         if( TipoMiscelatoreStr == "MIL16" )
         {
            if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "INBILICO" ) { $QueryResult__ = 0 }
         }

         if( TipoMiscelatoreStr == "CAR06"
           | TipoMiscelatoreStr == "FRE06"
           | TipoMiscelatoreStr == "MIL69"
           | TipoMiscelatoreStr == "INV01" )
         {
            if( VAR_VAL_STR($query_p1,"TipoLavaboStr") == "CELLULE"
              | VAR_VAL_STR($query_p1,"TipoLavaboStr") == "INBILICO" ) { $QueryResult__ = 0 }
         }
      }
   }

   Attrezza
   {
      idx_ref = @idx_att

      offx = @X/2
      offy = @Y
      offz = 0

      if( NOME(idx_ref) == "LavaboKERA" )                         { offy = offy - 80 }
      if( NOME(idx_ref) == "LavaboGenerico" )
      {
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "CELLULE" )  { offy = offy - 35.5  offz = -55 }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "BASICA" )   { offz = -65 }
         if( VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "INBILICO" ) { offy = 0   }
      }

      if( NOME(idx_ref) == "LavaboKERA"
        | VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "DEPTH"
        | VAR_VAL_STR(idx_ref,"TipoLavaboStr") == "INBILICO" )
      {
         COMPONENTI2("wk_rub",idx_ref,"RubinettoGenerico")

         offx = offx + VAR_VAL(wk_rub[1],"VAR_OffX")
         offz = VAR_VAL(wk_rub[1],"VAR_OffZ")
      }

      if( NOME(idx_ref) == "VascaTermoformata" )
      {
         offx = offx + VAR_VAL(idx_ref,"VT_Misc_OX")
         offz = VAR_VAL(idx_ref,"VT_Misc_OZ")
      }

      base_0.x = @base_0.x + offx
      base_0.y = @base_0.y + offy
      base_0.z = @base_0.z - offz

      //avviso per miscelatori che necessitano di due fori rubinetto
      if( $OnLoadOrder != 1 & ACTION() == 2 )
      {
         if( TipoMiscelatore == 3
           | TipoMiscelatore == 4
           | TipoMiscelatore == 7 )
         {
            DISPLAY2(STRCAT(MSG(1090)," ",MSG(2001)))
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = X
      GEST_Y = Y
      GEST_Z = Z

      if( VAR_VAL(ATTUALE(),"FLAG_Gest_DimCodifica") > 0 )
      {
         if( VAR_VAL( ATTUALE(), "ORD_X") > 0) { GEST_X = ORD_X }
         if( VAR_VAL( ATTUALE(), "ORD_Y") > 0) { GEST_Y = ORD_Y }
         if( VAR_VAL( ATTUALE(), "ORD_Z") > 0) { GEST_Z = ORD_Z }
      }

      GOSUB GestComune_Post
   }

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

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

   Posiziona __import__ sat1
   {
      GOSUB posa_blocco

      @import = file_sat

      GOSUB rivestimento
   }

   //monocomando secondo foro
   Posiziona __import__ sat2
   {
      @escluso = 1
      if( TipoMiscelatoreStr == "FRE06"
        | TipoMiscelatoreStr == "MIL69" ) { @escluso = 0 }

      GOSUB posa_blocco

      @TipoMiscelatoreStr = "MIL01"
      @import = STRCAT($path_sat,"Bagno\Miscelatori\",@TipoMiscelatoreStr,".sat")
      @base_0.x = base_0.x + 100

      GOSUB rivestimento
   }
}

//{ ELEMENTI GRAFICI
Elemento _graf_faccia_mensola_air
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X "" 20
      Y "" 1
      Z "" 10

      lato "" "FRONTE"

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [6,0,0]
      base_1 = [6,0,Z-3]
      base_2 = [0,0,Z-3]
      base_3 = [0,0,Z]
      base_4 = [X,0,Z]
      base_5 = [X,0,Z-3]
      base_6 = [X-6,0,Z-3]
      base_7 = [X-6,0,0]

      if( lato == "RETRO" )
      {
         base_0 = [0,0,0]
         base_1 = [0,0,3]
         base_2 = [6,0,3]
         base_3 = [6,0,Z]
         base_4 = [X-6,0,Z]
         base_5 = [X-6,0,3]
         base_6 = [X,0,3]
         base_7 = [X,0,0]
      }

      alto_0 = base_0
      alto_0.y = Y

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}
//} ELEMENTI GRAFICI

//FONDO / RIPIANO /COPERCHIO AIR
Elemento MensolaLib_AIR
{
   Descrizione = "Mensola AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;AIR_Compo;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "Larghezza"   1472  Menu ( LarMensLibAir )
      Y                "Spessore"      80  Menu ( SpeMensAir )
      Yt               ""              80
      Z                "Profondità"   406  Menu ( ProMensLibAir )

      AIR_Componente   ""              "Mensola"

      VAR_Rev_Prof     "Rev prof"       0  //Revisione profondità, aggiunto 510, gestita su composto

      //0 - WILDWOOD
      //1 - LACCATO
      //2 - HAYWOOD
      VAR_Materiale    "Materiale"      0  Menu ( MatMensLibAir )
      VAR_MaterialeStr ""              ""

      //1 - SOLO SUPERIORE
      //2 - SUPERIORE + INFERIORE
      VAR_LatiFin      "Lati finiti"    1  Menu ( LFinMensAir )

      //0 - Fondo
      //1 - Ripiano
      //2 - Coperchio
      VAR_TipoMensola      "" 0           SaveAlways
      VAR_TipoMensolaStr   "" "FONDO"

      // 0 - NO
      // 1 - SOTTO
      // 2 - SOPRA
      // 3 - SOTTO + SOPRA
      VAR_Fresate          "" 0

      //Luca 30/06/2022 non utilizzata
      //// -1 - SX
      ////  0 - CENTRO
      ////  1 - DX
      //VersoSporgenza "" -1 SaveAlways

      //LatoFresataSup "" 0
      //LatoFresataInf "" 0

      Filler2          " " " " ShowAlways

      VAR_TipoAppoggio "Tipologia appoggio"          1 Menu ( TpApp_Air )
      AltezzaSostegni  "Altezza sostegni"          231 Menu ( AltSVetri_Air )
      //se agganciata a set vetri
      ConSetVetriWW     ""                           0 SaveAlways

      ConFresataSup     ""                           0 SaveAlways

      //posizione rispetto alla mensola sotto
      PosSporgenzaAIR   "Lato sporgenza"             0 Menu ( PM_AIR ) SaveAlways

      //Simone 22/07/2022
      Con_Antirib       ""                           0

      LimX_Inf          ""                          -1
      LimX_Sup          ""                          -1
      LimZ_Inf          ""                          -1
      LimZ_Sup          ""                          -1

      FLAG_Stp_TPan     "Genera stampa T-Pan"        0 SaveAlways

      //per collisione PASSACAVI
      VediLimiti_PCV    ""                           0 Boolean

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      COD_EREDITA       ""                           "PRE;POST"
      RADICE            ""                           "__"

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements"       "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      idx_sopra          "" -1
      idx_sotto          "" -1

      idx_cnear_sx       "" -1
      idx_cnear_dx       "" -1

      idx_cnear_up       "" -1
      idx_cnear_dw       "" -1

      CMP2_AZIONI        "" "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  2

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS             ""  "Filler*;X;Y;Z;VAR_Materiale;VAR_LatiFin;VAR_TipoAppoggio;AltezzaSostegni;PosSporgenzaAIR"

      FillerM2G          " " "" ShowAlways

      OnBubble_FIXVARS   ""  "X|Z|PosSporgenzaAIR"

      //VARIABILI PER GESTIONE NFC
      NFC_Attiva         ""  0 SaveAlways
      NFC_Categoria      ""  ""
      NFC_Priorita       ""  10
      NFC_Point          ""  [0,0,0]

      //GESTIONE NFC
      VT_NFC             "NFC"  0

      VT_NRVITI          "VITI" 0

      //GESTIONE CARB
      VT_CARB            "CARB" ""
      CARB_Attiva        ""     0  SaveAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssMensoleLib_AIR

      //Luca 19/04/2022
      M4_GRUPPO__  = MSG(1036)

      //Luca 06/04/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { NFC_Categoria = "LIVING" }
      VT_NFC = NFC_Attiva

      //Simone 28/06/2021
      VT_CARB = CARB_Attiva

      //LZ 23/12/2021
      STP_Bollina = 1
      STP_Bollina_Cat = "C028"

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

      FLAG_Stp_TPan = 0
   }

   PuntiNotevoli
   {
      GOSUB SetAltezzaPie_MensolaLib_AIR

      GOSUB punti_Yt

      base_so = base_0
      alto_ne = alto_2

      vano_0_0 = base_0
      vano_0_0.y = base_0.y + AltPie
      vano_l_0 = X
      vano_p_0 = Z

      NFC_Point = base_2
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Lib_AIR

      if( $query_type == 1 )
      {
         wk_A_TERRA = 1 - APPESO( ATTUALE(), 1, "$M4_DRAGINFO_SNAP")
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      if( VAR_VAL(ATTUALE(),"in_pcfto") == 0 )
      {
         ChiediMisureInserimento(ATTUALE())
      }

      GOSUB SetTipologia_MensolaLib_AIR
      GOSUB SetVerso_Lib_AIR

      if( LimX_Inf > 0
        & LimX_Sup > 0
        & LimZ_Inf > 0
        & LimZ_Sup > 0
        & VAR_VAL( ATTUALE(), "FLAG_Speciale") == 0)
      {
         if( X < LimX_Inf
           | X > LimX_Sup )
         {
            HI( ATTUALE(), 1)
            CHIEDI( ATTUALE(), "X")
            HI( ATTUALE(), 0)
         }

         if( Z < LimZ_Inf
           | Z > LimZ_Sup )
         {
            HI( ATTUALE(), 1)
            CHIEDI( ATTUALE(), "Z")
            HI( ATTUALE(), 0)
         }
      }

      GOSUB GetRegola_Componenti_Elements

      GOSUB ContaGiunzioni_368

      //Simone 01/08/2022
      Con_Antirib = 0
      if( alto_0.y > 1950
        & VAR_TipoMensolaStr == "COPERCHIO" )
      {
         if( VAR_VAL( idx_sotto, "Xt") < 1312 ) { Con_Antirib = 1 }
      }

      wk_hide = 1
      if( $ATTIVA_DLL
        & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_hide = 0 }

      HIDE_ON_EDIT2( ATTUALE(), "PosSporgenzaAIR", wk_hide)

      //Simone 11/01/2024
      //FLAG_Stp_TPan = 0
      if( VAR_VAL(ATTUALE(),"ORD_RID") != 0 ) { FLAG_Stp_TPan = 1 }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Radice_MensolaLib_AIR

      //GOSUB Set_Gest_C003_MensolaLib_AIR
      GOSUB Set_Gest_C062_MensolaLib_AIR
      GOSUB Set_Gest_C087_MensolaLib_AIR
      GOSUB Set_Gest_C094_MensolaLib_AIR

      //Luca 15/12/2021
      GOSUB Set_Gest_C008_Mensola_Air
      //Simone 11/01/2024
      if( VAR_VAL_STR(ATTUALE(),"GEST_C008") != ""
        & VAR_VAL_STR(ATTUALE(),"GEST_C008") != "__" ) { FLAG_Stp_TPan = 1 }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         //GOSUB Set_Radice_MensolaLib_AIR
         //GOSUB Set_Gest_C003_MensolaLib_AIR
         GOSUB Set_Gest_C062_MensolaLib_AIR

         GOSUB Set_Gest_C094_MensolaLib_AIR

         GOSUB PCF_Elements_RegoleEredita
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGest_Lib_AIR
   }

   Procedura OnChangedVar
   {
      GOSUB OnChangedVar_PosLib_Air

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

      //Luca 20/04/2021
      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         if( $ChangedVar == "VAR_TipoAppoggio"
           & IS_VAR_FIXED(ATTUALE(),"PosSporgenzaAIR")==0
           & X > 1472
           & VAR_TipoAppoggio == 2 )
         {
            CHIEDI(ATTUALE(),"PosSporgenzaAIR")
         }
      }

      if( ConSetVetriWW == 1 )
      {
         if( $ChangedVar == "X" | $ChangedVar == "PosSporgenzaAIR" )
         {
            if( IS_IDX(idx_agg) )
            {
               if( IS_VAR_FIXED(idx_agg,"Xt") )              { DEL_VAR_MODIFICATE(idx_agg,"Xt")  }
               if( IS_VAR_FIXED(idx_agg,"PosSporgenzaAIR") ) { DEL_VAR_MODIFICATE(idx_agg,"PosSporgenzaAIR") }

               VAR_VALUE_SET(idx_agg,"Xt",X)
               VAR_VALUE_SET(idx_agg,"PosSporgenzaAIR",PosSporgenzaAIR)
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //OnChangedVar ",NOME(ATTUALE())))
            }
         }
      }
   }

   //Procedura Offset
   //{
   //   GOSUB Offset_368
   //}

   //Procedura PostAction2
   //{
   //   GOSUB PostAction2_Lib_AIR
   //}
   Procedura CtrlStatici
   {
      GOSUB CtrlStatici_Lib_AIR
   }

   Posiziona GruppoPiedini_AIR grp
   {
      @escluso = 1
      if( VAR_TipoAppoggio == 1
        & VAR_TipoMensolaStr == "FONDO"
        & VAR_VAL_STR(idx_att, "GEST_C088") == "FR007") { @escluso = 0 }

      @X = X
      @Z = Z

      @base_0 = base_0
      if( Yt < @Yt) { @base_0.y = alto_0.y - @Yt }
   }

   Posiziona SetVetriFondoATerra_AIR sv
   {
      @escluso = 1
      if( VAR_TipoMensolaStr == "FONDO" & VAR_TipoAppoggio == 2 ) { @escluso = 0 }
      @base_0 = base_0
      @Xt = X
      @Y  = AltezzaSostegni
      @Zt = Z
      @PosSporgenzaAIR = PosSporgenzaAIR
   }

   Posiziona Grafica_Mensola_WW_Air gm_WW
   {
      @escluso = 1
      if( VAR_MaterialeStr == "WILDWOOD"
        | VAR_MaterialeStr == "HAYWOOD"
        & VAR_VAL(-1,"TPC4WEB") == 0   )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + AltPie
   }

   Posiziona Grafica_Mensola_LAM_Air gm_LAM
   {
      @escluso = 1
      if( VAR_MaterialeStr == "LACCATO"
        & VAR_VAL(-1,"TPC4WEB") == 0   )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + AltPie
   }

   //Simone 01/08/2023
   Posiziona Mensola_Rivestita gm_RIV
   {
      @escluso = 1
      if( VAR_MaterialeStr == "VETRO" ) { @escluso = 0 }

      @VAR_Lib_Air = 1

      GOSUB posa_blocco
      @Z = Z + $Mens_Riv_Vetri_Spe
      @base_0.z = base_0.z - $Mens_Riv_Vetri_Spe
   }

   //Simone 07/12/2022 - Grafica per web
   Posiziona BloccoBlend mlam
   {
      @escluso = 1
      if( VAR_MaterialeStr == "LACCATO"
        & VAR_VAL(-1,"TPC4WEB") == 1   )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + AltPie

      FIN_orie = "O"
      FIN_var = "C028"
      GOSUB rivestimento

      @BLEND__ = 2
   }

   Posiziona BloccoBlend mww
   {
      @escluso = 1
      if( VAR_MaterialeStr == "WILDWOOD"
        & VAR_VAL(-1,"TPC4WEB") == 1    )  { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + AltPie

      FIN_var  = "C028"
      FIN_orie = "O"
      GOSUB rivestimento

      @BLEND__ = 2
   }

   //Simone 01/08/2022
   Posiziona Staffetta_Antirib_AIR stf1
   {
      @escluso = 1
      if( Con_Antirib == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y + Yt - @Y + @Spe
      @base_0.z = base_0.z - @Spe
   }

   Posiziona Staffetta_Antirib_AIR stf2
   {
      @escluso = 1
      if( Con_Antirib == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + X - @X - 100
      @base_0.y = base_0.y + Yt - @Y + @Spe
      @base_0.z = base_0.z - @Spe
   }

   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 nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y -  2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }

   Posiziona TAG_NFC nfc
   {
      @escluso = 1 - NFC_Attiva

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + AltPie
      @base_0.z = base_0.z + Z
   }

   //Luca 15/12/2021
   Posiziona PCV_ContCollisioni_368 pcvc_r
   {
      limite_sx = 30
      limite_dx = 30
      limite_rt = 30
      limite_fr = 30
      if( VAR_TipoMensolaStr == "FONDO" & VAR_TipoAppoggio == 1 )
      {
         limite_rt = 70
         limite_fr = 70
      }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + AltPie - 5
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 10
      @Z = limite_rt
   }

   Posiziona PCV_ContCollisioni_368 pcvc_f
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + AltPie - 5
      @base_0.z = base_0.z + Z - limite_fr
      @X = X
      @Y = Y + 10
      @Z = limite_fr
   }

   Posiziona PCV_ContCollisioni_368 pcvc_sx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + AltPie - 5
      @base_0.z = base_0.z + limite_rt
      @X = limite_sx
      @Y = Y + 10
      @Z = Z - limite_rt - limite_fr
   }
   Posiziona PCV_ContCollisioni_368 pcvc_dx
   {
      @base_0.x = base_0.x + X - limite_dx
      @base_0.y = base_0.y + AltPie - 5
      @base_0.z = base_0.z + limite_rt
      @X = limite_dx
      @Y = Y + 10
      @Z = Z - limite_rt - limite_fr
   }

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368LD
   {
      @escluso = 1
      if( VAR_VAL(idx_att,"in_pcfto") == 1
        | VAR_VAL_STR(idx_att,"PCF_INFO") != ""  ) { @escluso = 0 }

      GOSUB G368_PosaGrLavorazione
      @Y = 10
      @Fondo = 1
   }

   Posiziona G368_GruppoLavorazione G368L2
   {
      @escluso = 1
      if( VAR_VAL(idx_att,"in_pcfto") == 1
        | VAR_VAL_STR(idx_att,"PCF_INFO") != ""  ) { @escluso = 0 }

      GOSUB G368_PosaGrLavorazione
      @base_0.y = base_0.y + Y - 10
      @Y = 10
   }
   #endif
}

Elemento GruppoPiedini_AIR
{
   Descrizione = "Piedini per Terminale"
   Code        = ZOC0
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X         ""  600
      Y         ""   17
      Yt        ""   60
      Z         ""  300

      Rie_Sx  "rientro dal filo sx"      0
      Rie_Dx  "rientro dal filo dx"      0
      Rie_Fr  "rientro dal filo fronte"  0
      Rie_Rt  "rientro dal filo retro"   0
      Dia_Pie ""                         0

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

      //Simone 05/04/2022
      file_sat        ""  ""
      file_sat_exist  ""  ""

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Simone 05/04/2022
      file_sat = STRCAT($path_sat,"AIR\Piedino libreria AIR.SAT")
      file_sat_exist = FILE_EXIST(file_sat)

      //Simone 05/04/2022 - Dimensione sat piedino AIR
      //Cuc_Dia_Pie  = $Cuc_Dia_Pie
      Cuc_Dia_Pie  = 49

      Rie_Sx   = 100
      Rie_Dx   = 100
      Rie_Fr   = 40
      Rie_Rt   = 40

      //0 no
      //1 centrato
      //2 decentrato
      Pie_Centrale = 0

      if( X > 1300 ) { Pie_Centrale = 2 }
      if( X > 1350 ) { Pie_Centrale = 1 }

      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   //{ SX
   Posiziona Cuc_piedino p1
   {
      @escluso = file_sat_exist
      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
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino p2
   {
      @escluso = file_sat_exist
      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
      @rag1 = Cuc_Dia_Pie
   }

   //Simone 05/04/2022
   Posiziona __import__ pie1
   {
      @escluso = 1 - file_sat_exist
      @base_0.x = base_0.x + Rie_Sx
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Rie_Rt
      @import = file_sat
      @c_rivestimento = $c_nero
   }

   Posiziona __import__ pie2
   {
      @escluso = 1 - file_sat_exist
      @base_0.x = base_0.x + Rie_Sx
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - Rie_Fr
      @import = file_sat
      @c_rivestimento = $c_nero
   }
   //} SX

   //{ DX
   Posiziona Cuc_piedino p3
   {
      @escluso = file_sat_exist
      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
   }

   Posiziona Cuc_piedino p4
   {
      @escluso = file_sat_exist
      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
   }

   //Simone 05/04/2022
   Posiziona __import__ pie3
   {
      @escluso = 1 - file_sat_exist
      @base_0.x = base_0.x + X - Rie_Dx
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - Rie_Fr
      @import = file_sat
      @c_rivestimento = $c_nero
   }

   Posiziona __import__ pie4
   {
      @escluso = 1 - file_sat_exist
      @base_0.x = base_0.x + X - Rie_Dx
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Rie_Rt
      @import = file_sat
      @c_rivestimento = $c_nero
   }
   //} DX

   //{ DIV1
   Posiziona Cuc_piedino d1r
   {
      //Simone 05/04/2022
      //@escluso = SE_NUM( Pie_Centrale == 0 , 1 , 0)
      @escluso = 1
      if( file_sat_exist == 0 & Pie_Centrale > 0) { @escluso = 0 }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2
      if( Pie_Centrale == 2 ) { @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + 50 }
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d1f
   {
      //Simone 05/04/2022
      //@escluso = SE_NUM( Pie_Centrale == 0 , 1 , 0)
      @escluso = 1
      if( file_sat_exist == 0 & Pie_Centrale > 0) { @escluso = 0 }

      GOSUB PosaPiedino
      @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2
      if( Pie_Centrale == 2 ) { @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 + 50 }
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   //Simone 05/04/2022
   Posiziona __import__ pie5
   {
      @escluso = 1
      if( file_sat_exist & Pie_Centrale > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2
      if( Pie_Centrale == 2 ) { @base_0.x = base_0.x + X/2 + 50 }
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Rie_Rt
      @import = file_sat
      @c_rivestimento = $c_nero
   }

   Posiziona __import__ pie6
   {
      @escluso = 1
      if( file_sat_exist & Pie_Centrale > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2
      if( Pie_Centrale == 2 ) { @base_0.x = base_0.x + X/2 + 50 }
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - Rie_Fr
      @import = file_sat
      @c_rivestimento = $c_nero
   }
   //} DIV1
}

Elemento SetVetriFondoATerra_AIR
{
   Descrizione = "Set Vetri fondo a terra AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;AIR_Compo

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"           1472
      Xt      "Larghezza Mensola"   1472 Menu ( LarMensLib3Air )

      Y       "Altezza"              415 Menu ( AltSVetri_Air )
      Yt      "Altezza"              415

      Z       "Profondità"           406
      Zt      "Profondità"           406 Menu ( PrfSetAlz_Air )

      //Filler2 " " " " ShowAlways

      //posizione rispetto alla mensola sopra
      PosSporgenzaAIR "Lato sporgenza" 0

      NrVetri         "" 3

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      VediLimiti_PCV    "" 0 Implicit

      SetVetriSopraMensola     ""  0 SaveAlways
      idx_SetVetriSopraMensola "" -1

      //Simone 06/06/2022
      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      NO_GEST           ""                    0

      VAR_Manuale       "[MAN] Attiva"        0  Boolean
      Man_NrVetri       "[MAN] Nr. Vetri"     1  Utente ( 1-5 )
      Man_Verso         "[MAN] Verso"         "" Utente ( )

      ManVV1_PosX       "[MAN] Vetro Vert 1 - Offset X"     0  Utente ( )
      ManVV1_Dim        "[MAN] Vetro Vert 1 - Larghezza"  366  Menu ( DimSosVAir ) Utente ( )

      ManVO1_PosX       "[MAN] Vetro Oriz 1 - Offset X"     0  Utente ( )
      ManVO1_Dim        "[MAN] Vetro Oriz 1 - Larghezza"  628  Menu ( DimSosVAir ) Utente ( )

      ManVV2_PosX       "[MAN] Vetro Vert 2 - Offset X"     0  Utente ( )
      ManVV2_Dim        "[MAN] Vetro Vert 2 - Larghezza"  366  Menu ( DimSosVAir ) Utente ( )

      ManVO2_PosX       "[MAN] Vetro Oriz 2 - Offset X"     0  Utente ( )
      ManVO2_Dim        "[MAN] Vetro Oriz 2 - Larghezza"  628  Menu ( DimSosVAir ) Utente ( )

      ManVV3_PosX       "[MAN] Vetro Vert 3 - Offset X"     0  Utente ( )
      ManVV3_Dim        "[MAN] Vetro Vert 3 - Larghezza"  366  Menu ( DimSosVAir ) Utente ( )

      idx_sopra      "" -1
      idx_sotto      "" -1

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      idx_cnear_up   "" -1
      idx_cnear_dw   "" -1

      idx_mensola    "" -1

      CMP2_AZIONI    "" "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  2

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS "" "Filler*;Xt;Y;Zt"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Luca 19/04/2022
      M4_GRUPPO__  = MSG(1036)

      GOSUB CtrlPos_SetVetriFondoATerra_AIR

      //Luca 12/04/2021
      if( UN_PADRE("MensolaLib_AIR") & ACTION() == 0 )
      {
         HIDE_ON_EDIT(ATTUALE(),"Xt;Y;Zt;FillerM2G",1)
      }

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

      //Simone 06/06/2022
      if( $ATTIVA_DLL == 1  )
      {
         HIDE_ON_EDIT(ATTUALE(),"VAR_Manuale;Man*",$ATTIVA_DLL)
      }

      if( VAR_Manuale == 1 )
      {
         NO_GEST = 1
         GOSUB Stato_7
      }
   }

   PuntiNotevoli
   {
      Z = 366
      if( Zt > 406 ) { Z = 470 }
      if( Zt > 510 ) { Z = 520 }

      X = 1272
      if( Xt > 2208 ) { X = 2208 }
      if( Xt > 2576 ) { X = 2576 }

      //Yt = Y + 11
      Yt = Y
      GOSUB punti_XtYtZt

      base_so = base_0
      alto_ne = alto_2
   }
   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() > 0 & ACTION() != 2 )
      {
         idx_mensola = -1
         if( UN_PADRE("MensolaLib_AIR") ) { idx_mensola = PADRE(ATTUALE(),1) }

         if( UN_PADRE("MensolaLib_AIR") == 0 )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2("wk_mens",idx_cnear_up,5,"MensolaLib_AIR")
            if( wk_mens> 0 )   { idx_mensola = wk_mens[1] }

            if( IS_IDX(idx_mensola)  )
            {
               if( IS_VAR_FIXED(ATTUALE(),"Xt") ) { DEL_VAR_MODIFICATE(ATTUALE(),"Xt") }
               if( IS_VAR_FIXED(ATTUALE(),"Zt") ) { DEL_VAR_MODIFICATE(ATTUALE(),"Zt") }
               if( IS_VAR_FIXED(ATTUALE(),"PosSporgenzaAIR") ) { DEL_VAR_MODIFICATE(ATTUALE(),"PosSporgenzaAIR") }

               Xt = VAR_VAL(idx_mensola,"X")
               Zt = VAR_VAL(idx_mensola,"Z")
               PosSporgenzaAIR = VAR_VAL(idx_mensola,"PosSporgenzaAIR")

               VAR_SET_MODIFICATA(ATTUALE(),"Xt","")
               VAR_SET_MODIFICATA(ATTUALE(),"Zt","")
               VAR_SET_MODIFICATA(ATTUALE(),"PosSporgenzaAIR","")
            }
         }

         if( $OnLoadOrder != 1 )
         {
            SetVetriSopraMensola = 0

            if( IS_IDX(idx_mensola) )
            {
               SET_#(idx_mensola)
               if( IS_IDX(#idx_sopra)  )
               {
                  if( NOME(#idx_sopra) == "SetAlzataVetro_AIR"
                  //Luca 26/04/2021
                    | NOME(#idx_sopra) == "SetAlzataVetroConContenitore_AIR"  )
                  {
                     idx_SetVetriSopraMensola = #idx_sopra
                     SetVetriSopraMensola = 1
                  }
               }
            }
         }
      }

      GOSUB CtrlPos_SetVetriFondoATerra_AIR

      //Simone 06/06/2022
      GOSUB GetRegola_Componenti_Elements
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         //GOSUB Set_Radice_MensolaLib_AIR
         //GOSUB Set_Gest_C003_MensolaLib_AIR
         GOSUB PCF_Elements_RegoleEredita
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      //Simone 06/06/2022
      if( NO_GEST == 1 )
      {
         FLAG_RADICE = $NO_RAD

         RADICE = ""
         GEST_CODICE = ""

         EXITSUB()
      }

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

      if( FLAG_CompostoGEN == 1  )
      {
         perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")
         GEST_CODICE = ""

         perRADICE = STRCAT("SET",STR(NrVetri),"VTTERAIR")

         GEST_X = 1204
         if( NrVetri==4 )   { GEST_X = 2396 }
         if( NrVetri==5 )   { GEST_X = 2764 }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

      GOSUB BloccaCancellaComponente

      if( IS_IDX(idx_mensola) == 0 )   { EXITSUB() }

      VAR_VALUE_SET(idx_mensola,"VAR_TipoAppoggio",1)
      SET_#(idx_mensola)
      if( #base_0.y > 0 )
      {
         offx = 0
         offy = -1 * (#base_0.y)
         offz = 0
         COMANDO(STRCAT("EDITPOS_REL ",STR(idx_mensola) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // Cancella SetVetriFondoATerra_AIR"))
      }
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @X = Xt
   //   @Y = 10
   //   @Z = Zt
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona SostegnoVetro_AIR VV1
   {
      @escluso = 0

      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV1_PosX - @Vetro_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Zt/2 - Z/2

      @Verso = "SX"

      //Simone 06/06/2022
      if( VAR_Manuale == 1 )
      {
         @base_0.x = base_0.x + ManVV1_PosX - @Vetro_OffX
         @Z = ManVV1_Dim
         @Verso = Man_Verso
      }
   }

   Posiziona SostegnoVetro_AIR VO1
   {
      @escluso = 0

      @Z = Lar_Vet
      @Y = Y
      @X = Spe_Vet

      @base_0.x = base_0.x + VetO1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + RieR_VetO

      @VetroOriz = 1

      //Simone 06/06/2022
      if( VAR_Manuale == 1 )
      {
         @escluso = 1
         if( Man_NrVetri > 1 )
         {
            @escluso = 0
            @base_0.x = base_0.x + ManVO1_PosX
            @Z = ManVO1_Dim
         }
      }

      @ang_y = 90
   }

   Posiziona SostegnoVetro_AIR VV2
   {
      @escluso = 0

      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV2_PosX - @Vetro_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Zt/2 - Z/2

      //Simone 06/06/2022
      if( VAR_Manuale == 1 )
      {
         @escluso = 1
         if( Man_NrVetri > 2 )
         {
            @escluso = 0
            @base_0.x = base_0.x + ManVV2_PosX - @Vetro_OffX
            @Z = ManVV2_Dim
         }
      }
   }

   Posiziona SostegnoVetro_AIR VO2
   {
      @escluso = 1
      if( VetO2_PosX > 0  & VAR_Manuale == 0 )  { @escluso = 0 }
      //Simone 06/06/2022
      if( Man_NrVetri > 3 & VAR_Manuale == 1 )  { @escluso = 0 }

      @Z = Lar_Vet
      @Y = Y
      @X = Spe_Vet

      @base_0.x = base_0.x + VetO2_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + RieR_VetO
      @ang_y = 90

      @VetroOriz = 1

      //Simone 06/06/2022
      if( VAR_Manuale == 1 )
      {
         @base_0.x = base_0.x + ManVO2_PosX
         @Z = ManVO2_Dim
      }
   }

   Posiziona SostegnoVetro_AIR VV3
   {
      @escluso = 1
      if( VetV3_PosX > 0  & VAR_Manuale == 0 )  { @escluso = 0 }
      //Simone 06/06/2022
      if( Man_NrVetri > 4 & VAR_Manuale == 1 )  { @escluso = 0 }

      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV3_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Zt/2 - Z/2

      @Verso = "DX"
      @base_0.x = @base_0.x - @Vetro_OffX

      //Simone 06/06/2022
      if( VAR_Manuale == 1 )
      {
         @base_0.x = base_0.x + ManVV3_PosX - @Vetro_OffX
         @Z = ManVV3_Dim
      }

      if( PosSporgenzaAIR < 0 )
      {
         @Verso = "SX"
      }
   }

   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 nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y -  2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }
}

//Luca 23/04/2021
Elemento SetVetriContenitore_AIR
{
   Descrizione = "Set Vetri contenitore AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;AIR_Compo

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"           1272
      Xt      "Larghezza Mensola"   1472 Menu ( LarMensLib3Air )

      Y       "Altezza"              385 Menu ( AltSVetriC_Air )
      Yt      "Altezza"              385

      Z       "Profondità"           368
      Zt      "Profondità"           406 Menu ( PrfSetAlz_Air )

      //LZ 06/05/2021: Offset prof fianchi rispetto retro contenitore
      Fianco_OffZ  "Offset Z Fianchi" 10

      //Filler2 " " " " ShowAlways

      //posizione rispetto alla mensola sopra
      PosSporgenzaAIR "Lato sporgenza" 0

      NrVetri         "" 3

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      idx_sopra      "" -1
      idx_sotto      "" -1

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      idx_cnear_up   "" -1
      idx_cnear_dw   "" -1

      idx_mensola    "" -1

      COD_EREDITA    ""    "PRE;POST"

      CMP2_AZIONI        "" "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  2

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS "" "Filler*;Xt;Y;Zt"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Luca 19/04/2022
      M4_GRUPPO__  = MSG(1036)

      GOSUB CtrlPos_SetVetriContenitori_AIR
   }

   PuntiNotevoli
   {
      Z = 368
      if( Zt > 406 ) { Z = 472 }
      if( Zt > 510 ) { Z = 522 }

      X = 1272
      if( Xt > 2208 ) { X = 2208 }
      if( Xt > 2576 ) { X = 2576 }

      //Yt = Y + 11
      Yt = Y
      GOSUB punti_XtYtZt

      base_so = base_0
      alto_ne = alto_2
   }
   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() >0 & ACTION() !=2 )
      {
         idx_modulo = -1
         BOX_MODE(0)
         NEAR_GLOBALE2("wk_mens",idx_cnear_up,5,"Modulo_368")
         if( wk_mens> 0 )   { idx_modulo = wk_mens[1] }

         if( IS_IDX(idx_modulo) )
         {
            if( IS_VAR_FIXED(ATTUALE(),"Xt") )              { DEL_VAR_MODIFICATE(ATTUALE(),"Xt") }
            if( IS_VAR_FIXED(ATTUALE(),"Zt") )              { DEL_VAR_MODIFICATE(ATTUALE(),"Zt") }
            if( IS_VAR_FIXED(ATTUALE(),"PosSporgenzaAIR") ) { DEL_VAR_MODIFICATE(ATTUALE(),"PosSporgenzaAIR") }

            Xt = VAR_VAL(idx_modulo,"X")
            Zt = VAR_VAL(idx_modulo,"Zt")
            PosSporgenzaAIR = VAR_VAL(idx_modulo,"PosSporgenzaAIR")

            VAR_SET_MODIFICATA(ATTUALE(),"Xt","")
            VAR_SET_MODIFICATA(ATTUALE(),"Zt","")
            VAR_SET_MODIFICATA(ATTUALE(),"PosSporgenzaAIR","")
         }
      }

      GOSUB CtrlPos_SetVetriContenitori_AIR

      GOSUB GetRegola_Componenti_Elements
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         //GOSUB Set_Radice_MensolaLib_AIR
         //GOSUB Set_Gest_C003_MensolaLib_AIR
         GOSUB PCF_Elements_RegoleEredita
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW
      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 ) { FLAG_RADICE = $FLAG_STANDARD }

      if( FLAG_CompostoGEN == 1  )
      {
         perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")

         if( IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0
           & IS_VAR_FIXED( ATTUALE(), "RADICE") == 0 )
         {
            GEST_CODICE = ""

            perRADICE = "SETVTTERCONT"
            RADICE = perRADICE
         }

         GEST_X = 1204

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

      GOSUB BloccaCancellaComponente

      if( IS_IDX(idx_mensola) == 0 )  { EXITSUB() }

      VAR_VALUE_SET(idx_mensola,"VAR_TipoAppoggio",1)
      SET_#(idx_mensola)
      if( #base_0.y > 0 )
      {
         offx = 0
         offy = -1 * (#base_0.y)
         offz = 0
         COMANDO(STRCAT("EDITPOS_REL ",STR(idx_mensola) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // Cancella SetVetriContenitore_AIR"))
      }
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @X = Xt
   //   @Y = 10
   //   @Z = Zt
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona SostegnoVetro_AIR VV1
   {
      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV1_PosX - @Vetro_OffX
      @base_0.y = base_0.y
      //LZ 06/5/2021: il fianco non è centrato
      //@base_0.z = base_0.z + Zt/2 - Z/2
      @base_0.z = base_0.z + Fianco_OffZ

      @Verso = "SX"
      if( PosSporgenzaAIR < 0 ) { @Verso = "DX" }
   }

   Posiziona SostegnoVetro_AIR VO1
   {
      @Z = Lar_Vet
      @Y = Y
      @X = Spe_Vet
      @base_0.x = base_0.x + VetO1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + RieR_VetO
      @ang_y = 90
      @VetroOriz = 1
   }

   Posiziona SostegnoVetro_AIR VV2
   {
      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV2_PosX - @Vetro_OffX
      @base_0.y = base_0.y
      //LZ 06/5/2021: il fianco non è centrato
      //@base_0.z = base_0.z + Zt/2 - Z/2
      @base_0.z = base_0.z + Fianco_OffZ

      @Verso = "DX"
      if( PosSporgenzaAIR < 0 ) { @Verso = "SX" }
   }

   Posiziona SostegnoVetro_AIR VV3
   {
      @escluso = 1
      if( NrVetri == 4 ) { @escluso = 0 }

      @X = Spe_Vet
      @Y = Y
      @Z = Z
      @base_0.x = base_0.x + VetV3_PosX - @Vetro_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Fianco_OffZ

      @Verso = "DX"
      if( PosSporgenzaAIR < 0 ) { @Verso = "SX" }
   }

   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 nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y -  2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 4
      @Z = Z - 110
   }
}

Elemento SetAlzataVetro_AIR
{
   Descrizione = "Set Alzata Vetro AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias OnChangedVar;AIR_Compo;TSTP_NoQuota_PROSPETTI;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      AIR_Componente         ""                            "SetAlzata"

      X                      "Larghezza"                   1272 Menu ( LarSetAlz_Air )
      Xt                     ""                            1312

      Y                      "Altezza"                     368
      Yt                     "Altezza"                     368  Menu ( AltSetAlz_Air )  Utente ( 136-1514 )

      Z                      "Profondità"                  406
      Zt                     "Profondità"                  406  Menu ( PrfSetAlz_Air )

      Filler2                " "                           " " ShowAlways

      //posizione rispetto alla mensola sotto
      PosSporgenzaAIR        "Lato sporgenza"              0 Menu ( PSA_AIR ) SaveAlways
      PosSporgenzaAIR_sopra  "Lato sporgenza superiore"   -2

      //M - MENSOLA
      //C - CONTENITORE
      TipoElementoSotto      ""                            "M"
      TipoElementoSopra      ""                            "M"
      TipoAlzata             "Tipo Alzata MM - CC - CM"    "MM" SaveAlways

      ConVetroRT             "Presenza vetro Retro"        1 //Menu ( SiNo )
      ConVetroSX             "Presenza vetro SX"           1 //Menu ( SiNo )
      ConVetroDX             "Presenza vetro DX"           1 //Menu ( SiNo )

      FLAG_ConCoperchio      "Set alzata con coperchio"    0 Boolean
      FLAG_ConAppendiabiti   "Set alzata con appendiabiti" 0 Boolean
      FLAG_CompostoGEN       "Modalità composto GENERICO"  0
      ConForo_PCV            "Con foro passacavi"          0

      ConSchXG               ""                            0

      LimX_Inf               ""                           -1
      LimX_Sup               ""                           -1
      LimY_Inf               ""                           -1
      LimY_Sup               ""                           -1
      LimZ_Inf               ""                           -1
      LimZ_Sup               ""                           -1

      COD_EREDITA            ""                            "PRE;POST"

      VediLimiti_PCV         ""                            0

      //Simone 23/11/21
      NO_GEST                ""                            0

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements"             "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements ""                            ""
      #endif

      Filler3                " "                           " " ShowAlways

      OnBubble_FIXVARS       "" "X|Yt|Zt|PosSporgenzaAIR|ConVetroRT|ConVetroSX|ConVetroDX"

      //Luca 02/09/2021
      //{ gestione manuale dei vetro (3 fianchi / 3 schiene)
      VAR_Manuale        "[MAN] Attiva"                 0  Boolean
      Man_NrFianchi      "[MAN] Nr.Fianchi"             0  Utente ( 1-3 )

      ManF1_OffX         "[MAN] Fianco 1 - Offset X"    0  Utente ( )
      ManF1_OffY         "[MAN] Fianco 1 - Offset Y"    0  Utente ( )
      ManF1_OffZ         "[MAN] Fianco 1 - Offset Z"    0  Utente ( )
      ManF1_Dim          "[MAN] Fianco 1 - Larghezza"   0  Menu ( DimSosVAir )    Utente ( )
      ManF1_Alt          "[MAN] Fianco 1 - Altezza"     0  Menu ( AltSetAlz_Air ) Utente ( )

      ManF2_OffX         "[MAN] Fianco 2 - Offset X"    0  Utente ( )
      ManF2_OffY         "[MAN] Fianco 2 - Offset Y"    0  Utente ( )
      ManF2_OffZ         "[MAN] Fianco 2 - Offset Z"    0  Utente ( )
      ManF2_Dim          "[MAN] Fianco 2 - Larghezza"   0  Menu ( DimSosVAir )    Utente ( )
      ManF2_Alt          "[MAN] Fianco 2 - Altezza"     0  Menu ( AltSetAlz_Air ) Utente ( )

      ManF3_OffX         "[MAN] Fianco 3 - Offset X"    0  Utente ( )
      ManF3_OffY         "[MAN] Fianco 3 - Offset Y"    0  Utente ( )
      ManF3_OffZ         "[MAN] Fianco 3 - Offset Z"    0  Utente ( )
      ManF3_Dim          "[MAN] Fianco 3 - Larghezza"   0  Menu ( DimSosVAir )    Utente ( )
      ManF3_Alt          "[MAN] Fianco 3 - Altezza"     0  Menu ( AltSetAlz_Air ) Utente ( )

      Man_NrSchiene      "[MAN] Nr.Schiene"             0  Utente ( 1-3 )

      ManS1_OffX         "[MAN] Schiena 1 - Offset X"   0  Utente ( )
      ManS1_OffY         "[MAN] Schiena 1 - Offset Y"   0  Utente ( )
      ManS1_OffZ         "[MAN] Schiena 1 - Offset Z"   0  Utente ( )
      ManS1_Dim          "[MAN] Schiena 1 - Larghezza"  0  Menu ( DimSosVAir_S )  Utente ( )
      ManS1_Alt          "[MAN] Schiena 1 - Altezza"    0  Menu ( AltSetAlz_Air ) Utente ( )

      ManS2_OffX         "[MAN] Schiena 2 - Offset X"   0  Utente ( )
      ManS2_OffY         "[MAN] Schiena 2 - Offset Y"   0  Utente ( )
      ManS2_OffZ         "[MAN] Schiena 2 - Offset Z"   0  Utente ( )
      ManS2_Dim          "[MAN] Schiena 2 - Larghezza"  0  Menu ( DimSosVAir_S )  Utente ( )
      ManS2_Alt          "[MAN] Schiena 2 - Altezza"    0  Menu ( AltSetAlz_Air ) Utente ( )

      ManS3_OffX         "[MAN] Schiena 3 - Offset X"   0  Utente ( )
      ManS3_OffY         "[MAN] Schiena 3 - Offset Y"   0  Utente ( )
      ManS3_OffZ         "[MAN] Schiena 3 - Offset Z"   0  Utente ( )
      ManS3_Dim          "[MAN] Schiena 3 - Larghezza"  0  Menu ( DimSosVAir_S )  Utente ( )
      ManS3_Alt          "[MAN] Schiena 3 - Altezza"    0  Menu ( AltSetAlz_Air ) Utente ( )
      //} gestione manuale dei vetro (3 fianchi / 3 schiene)

      idx_sopra          ""  -1
      idx_sotto          ""  -1
      idx_sotto_sotto    ""  -1
      idx_dx             ""  -1
      idx_sx             ""  -1

      idx_cnear_sx       ""  -1
      idx_cnear_dx       ""  -1

      idx_cnear_up       ""  -1
      idx_cnear_dw       ""  -1

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

      CMP2_AZIONI        ""  "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  2

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS             ""  "Filler*;X;Yt;Zt;PosSporgenzaAIR;VAR_Manuale;Man*"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_GRUPPO__  = MSG(1036)

      if( ACTION() == 0)
      {
         HIDE_ON_EDIT2(ATTUALE(),"TipoAlzata",$ATTIVA_DLL)
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_ConAppendiabiti",$ATTIVA_DLL)

         HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",$ATTIVA_DLL)
         //Simone 21/07/2022
         HIDE_ON_EDIT2(ATTUALE(),"PosSporgenzaAIR",$ATTIVA_DLL)
      }

      if( $ATTIVA_DLL == 1)
      {
         HIDE_ON_EDIT( ATTUALE(), "Filler3;VAR_Manuale;Man*", $ATTIVA_DLL)
      }

      //Simone 17/02/2022 - Salvo le variabili per esplosione preconfigurati
      if( VAR_Manuale == 1 & VAR_VAL(ATTUALE(),"in_pcfto") )
      {
         if( STR_INDEX_OF(OnBubble_FIXVARS,0,"Man_NrFianchi") < 0)
         {
            OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|Man_NrFianchi|Man_NrSchiene|VAR_Manuale|")

            if( Man_NrFianchi >= 1) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManF1_OffX|ManF1_OffY|ManF1_OffZ|ManF1_Dim|ManF1_Alt") }
            if( Man_NrFianchi >= 2) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManF2_OffX|ManF2_OffY|ManF2_OffZ|ManF2_Dim|ManF2_Alt") }
            if( Man_NrFianchi >= 3) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManF3_OffX|ManF3_OffY|ManF3_OffZ|ManF3_Dim|ManF3_Alt") }

            if( Man_NrSchiene >= 1) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManS1_OffX|ManS1_OffY|ManS1_OffZ|ManS1_Dim|ManS1_Alt") }
            if( Man_NrSchiene >= 2) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManS2_OffX|ManS2_OffY|ManS2_OffZ|ManS2_Dim|ManS2_Alt") }
            if( Man_NrSchiene >= 3) { OnBubble_FIXVARS = STRCAT(OnBubble_FIXVARS,"|ManS3_OffX|ManS3_OffY|ManS3_OffZ|ManS3_Dim|ManS3_Alt") }
         }
      }

      if( VAR_Manuale == 1)
      {
         NO_GEST = 1

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

      Diametro  = 30
      GOSUB SetDimensioniAlzata_AIR

      FIN_var = "C014"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)

      STP_Bollina = 1
      STP_Bollina_Cat = "C014;C048"
   }

   PuntiNotevoli
   {
      GOSUB SetDimensioniAlzata_AIR

      GOSUB punti_XtYtZt

      base_so  = base_0
      alto_ne  = alto_2

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Lib_AIR
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB SetTipologiaAlzata_AIR

      GOSUB GetRegola_Componenti_Elements

      GOSUB SetDimMinMax_Alzata_AIR

      GOSUB SetVerso_Lib_AIR

      ConForo_PCV = 0
      if( IS_VarsUser__(ATTUALE(),"GEST_C092") == 1
        & VAR_VAL_STR( ATTUALE(), "GEST_C092") == "FS001") { ConForo_PCV = 1 }

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder == 0)
      {
         CRS_lista_var = ""
         if( FLAG_ConAppendiabiti == 1  ) { CRS_lista_var = "ConForo_PCV;X;Yt;Zt" }

         GOSUB CheckRigeneraScasso
         if( CRS_Result == 1 )
         {
            $wk_EliminaScassi_da_idx = GetTopLevel(ATTUALE())
            GOSUB EliminaScassi
            COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia "))
         }
      }

      ConSchXG = 0
      if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM173") { ConSchXG = 1 }
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         BloccaModificaCatGest_Cmp_368( ATTUALE(), "GEST_C048")
         BloccaModificaCatGest_Cmp_368( ATTUALE(), "GEST_C189")

         if( VAR_VAL( ATTUALE(), "in_pcfto"))
         {
            if( IS_VAR_FIXED( ATTUALE(),"GEST_C165") ) { DEL_VAR_MODIFICATE( ATTUALE(),"GEST_C165") }
         }

         GOSUB PCF_Elements_RegoleEredita
         GOSUB Set_Gest_C092_VetroAlzata_AIR
      }

      if( TABER_REGOLA == "POST")
      {
         //Luca 30/03/2021
         if( IS_VarsUser__(ATTUALE(),"GEST_C092") == 1
           & VAR_VAL_STR(ATTUALE(),"GEST_C092") == "FS001") { ConForo_PCV = 1 }

         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM173") { ConSchXG = 1 }
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD
      SET_GEST_STATO( ATTUALE(), 7, 0)

      if( NO_GEST == 1)
      {
         RADICE      = ""
         GEST_CODICE = ""

         GOSUB GestComune_Post
         if( STRCAT( RADICE, GEST_CODICE) == "")
         {
            GOSUB Stato_7
            FLAG_RADICE = $NO_RAD
         }

         EXITSUB()
      }

      //Utilizzo la larghezza del vetro centrale
      GEST_X = X
      if( FLAG_ConAppendiabiti != 1 ) { GEST_X = Larg_Vetro }
      GEST_Y = Y
      if( TipoAlzata == "CX" )        { GEST_Y = Y + 1.5 }

      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 = ""

         perRADICE = STRCAT( "AVA", TipoAlzata)
         if( FLAG_ConAppendiabiti) { perRADICE = STRCAT( perRADICE, "AP") }

         GEST_CODICE = perCODICE
         RADICE = perRADICE
      }

      if( perRADICE_prec != RADICE
        | perCODICE_prec != GEST_CODICE) { flag_CAMBIA_VAR = 1 }

      GOSUB Set_Gest_C092_VetroAlzata_AIR

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      if( in_pcfto == 1) { GOSUB BloccaCancellaComponente }
   }

   Procedura CtrlStatici
   {
      GOSUB CtrlStatici_Lib_AIR
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGest_Lib_AIR
   }

   Procedura OnChangedVar
   {
      GOSUB OnChangedVar_PosLib_Air
   }

   Posiziona ContenitoreInvisibile q1
   {
      GOSUB posa_blocco
      @Z = 10
   }

   Posiziona SchienaVetroAlzata_AIR vsch
   {
      @escluso = 1 - ConVetroRT

      GOSUB posa_blocco

      @X = Larg_Vetro
      @Y = Yt
      @Z = $Air_SetAlzataVetro_Spe_Vetro

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato + X/2 - Larg_Vetro/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Sch

      //Luca 02/09/2021
      if( VAR_Manuale == 1)
      {
         @escluso = 1
         if( Man_NrSchiene >= 1) { @escluso = 0 }

         if( ManS1_Dim > 0) { @X = ManS1_Dim }
         if( ManS1_Alt > 0) { @Y = ManS1_Alt }

         @base_0.x = base_0.x + ManS1_OffX
         @base_0.y = base_0.y + ManS1_OffY
         @base_0.z = base_0.z + ManS1_OffZ
      }

      idx_grafica_sch = -1
      if( @escluso == 0) { idx_grafica_sch = @idx_grafica }
   }

   Posiziona SchienaVetroAlzata_AIR vsch2
   {
      @escluso = 1
      if( VAR_Manuale == 1
        & Man_NrSchiene >= 2) { @escluso = 0 }

      @X = SE_NUM( ManS2_Dim > 0, ManS2_Dim, X)
      @Y = SE_NUM( ManS2_Alt > 0, ManS2_Alt, Yt)

      @base_0.x = base_0.x + ManS2_OffX
      @base_0.y = base_0.y + ManS2_OffY
      @base_0.z = base_0.z + ManS2_OffZ
   }

   Posiziona SchienaVetroAlzata_AIR vsch3
   {
      @escluso = 1
      if( VAR_Manuale == 1
        & Man_NrSchiene >= 3) { @escluso = 0 }

      @X = SE_NUM( ManS3_Dim > 0, ManS3_Dim, X)
      @Y = SE_NUM( ManS3_Alt > 0, ManS3_Alt, Yt)

      @base_0.x = base_0.x + ManS3_OffX
      @base_0.y = base_0.y + ManS3_OffY
      @base_0.z = base_0.z + ManS3_OffZ
   }

   Posiziona FiancoVetroAlzata_AIR vfsx
   {
      @escluso = 1 - ConVetroSX

      @Y = Yt
      @Z = Prof_Vetro

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Fia

      if( VAR_Manuale == 1)
      {
         @escluso = 1
         if( Man_NrFianchi >= 1) { @escluso = 0 }

         if( ManF1_Alt > 0) { @Y = ManF1_Alt }
         if( ManF1_Dim > 0) { @Z = ManF1_Dim }

         @base_0.x = base_0.x + ManF1_OffX
         @base_0.y = base_0.y + ManF1_OffY
         @base_0.z = base_0.z + ManF1_OffZ
      }

      @Lato = -1

      idx_grafica_fiasx = -1
      if( @escluso == 0) { idx_grafica_fiasx = @idx_grafica }
   }

   Posiziona FiancoVetroAlzata_AIR vfdx
   {
      @escluso = 1 - ConVetroDX

      @Y = Yt
      @Z = Prof_Vetro

      @base_0.x = base_0.x + Xt - $Air_SetAlzataVetro_Rie_Vetro_Lato - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Fia

      if( VAR_Manuale == 1)
      {
         @escluso = 1
         if( Man_NrFianchi >= 2) { @escluso = 0 }

         if( ManF2_Alt > 0) { @Y = ManF2_Alt }
         if( ManF2_Dim > 0) { @Z = ManF2_Dim }

         @base_0.x = base_0.x + ManF2_OffX
         @base_0.y = base_0.y + ManF2_OffY
         @base_0.z = base_0.z + ManF2_OffZ
      }

      @Lato = 1

      idx_grafica_fiadx = -1
      if( @escluso == 0) { idx_grafica_fiadx = @idx_grafica }
   }

   Posiziona FiancoVetroAlzata_AIR vfdx3
   {
      @escluso = 1
      if( VAR_Manuale == 1
        & Man_NrFianchi >= 3) { @escluso = 0 }

      @Y = SE_NUM( ManF3_Alt > 0, ManF3_Alt, Yt)
      @Z = SE_NUM( ManF3_Dim > 0, ManS3_Dim, Z)

      @base_0.x = base_0.x + ManF3_OffX
      @base_0.y = base_0.y + ManF3_OffY
      @base_0.z = base_0.z + ManF3_OffZ
   }

   Posiziona CoperchioVetroAlzata_AIR vcop
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0) { @escluso = 0 }

      @X = X
      @Y = $Air_SetAlzataVetro_Spe_Vetro
      @Z = Prof_Vetro

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato
      @base_0.y = alto_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Fia
   }

   Posiziona AstaAppendiabiti_AIR asta
   {
      @escluso = 1 - FLAG_ConAppendiabiti

      @X = Asta_X
      @Z = Prof_Vetro/2 - $Air_SetAlzataVetro_Spe_Vetro + Diametro/2

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato + $Air_SetAlzataVetro_Spe_Vetro
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Sch + $Air_SetAlzataVetro_Spe_Vetro

      @idx_grafica_fiasx = idx_grafica_fiasx
      @idx_grafica_fiadx = idx_grafica_fiadx
      @idx_grafica_sch   = idx_grafica_sch
   }

   Posiziona Blocco Ing
   {
      @escluso = 1
      if( $ATTIVA_DLL == 0
        & VAR_Manuale == 1) { @escluso =  0 }

      GOSUB posa_blocco
      @Y = 10

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

   Posiziona SCRITTA_CAD StpInfo
   {
      @escluso = 1
      if( VAR_VAL( -1, "wk_OnStampa_2Viste") > 0
        | VAR_VAL( -1, "wk_OnStampa_2VisteAcc") > 0) { @escluso = 0 }

      @X = $Xscr
      @Y = $Yscr

      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + 1.5*@Y
      @base_0.z = base_0.z + @Y

      @scritta = STRCAT("H. ", STR(Yt))
      @faccia = "F"
      @point = 5
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @X = X - 100
      @Y = 4
      @Z = Z - 110

      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y -  2
      @base_0.z = base_0.z + 50
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = X - 100
      @Y = 4
      @Z = Z - 110

      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + 50
   }
}

Elemento FiancoVetroAlzata_AIR
{
   Descrizione = "Air - Alzata - Fianco vetro"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      ""                  8
      Y                      ""                  1
      Yr                     ""                  1
      Z                      ""                  1

      TipoAlzata             ""                  ""
      VAR_Manuale            ""                  0 Implicit
      FLAG_ConAppendiabiti   ""                  0 Implicit

      Lato                   ""                  0

      COD_EREDITA            ""                  "PRE;POST"
      perRADICE              ""                  ""
      RADICE                 ""                  ""

      M4_NO_OFFS             ""                  1
      M4_VAR                 ""                  "X;Y;Z;TipoAlzata"

      VediLimiti_PCV         ""                  0 Implicit

     #ifdef TEC
      VAR_Regola_Elements    "Config.Elements"   "" Utente ( )
     #endif
     #ifndef TEC
      VAR_Regola_Elements    ""                  ""
     #endif

      idx_grafica            ""                  -1

      idx_sopra              ""                  -1
      idx_sotto              ""                  -1

      idx_cnear_up           ""                  -1
      idx_cnear_dw           ""                  -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB SetTipologiaAlzata_AIR
      Yr = Air_SetAlzata_Alt( Y, TipoAlzata, 1, 0)

      GOSUB Stato_8

      FIN_orie = "V"
      FIN_var  = "C014"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_1
      vano_l_0 = Z
      vano_p_0 = X
      vano_ang_0 = 90

      if( Lato > 0)
      {
         vano_0_0 = base_3
         vano_ang_0 = -90
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements

      COMPONENTI2( "wk_scs", ATTUALE(), "ScassoAlzataVetro_AIR")
      if( wk_scs > 0) { ALIAS_ADD( ATTUALE(), "StpAlzateCScasso")    }
      else            { ALIAS_REMOVE( ATTUALE(), "StpAlzateCScasso") }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Z
      GEST_Y = Yr
      GEST_Z = X

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0)
      {
         perRADICE = "FVA"
         if( FLAG_ConAppendiabiti) { perRADICE = STRCAT( perRADICE, "AP") }
         perRADICE = STRCAT( perRADICE, TipoAlzata)

         if( STRLEN(TipoAlzata) < 2) { perRADICE = "" GEST_CODICE = "" }

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

      GOSUB Set_Gest_C105_VetroAlzata_AIR

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         BloccaModificaCatGest( ATTUALE(), "GEST_C014")

         GOSUB PCF_Elements_RegoleEredita

         GOSUB Set_Gest_C105_VetroAlzata_AIR
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.8"

      idx_grafica = ATTUALE()
   }

   //Luca 07/12/2021
   Posiziona PCV_ContCollisioni_368 pcvc_r
   {
      @X = X + 51 * 2
      @Y = Y + 80 + 80 + 10
      @Z = Z + 19.5 * 2

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 80 - 5
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   Posiziona _cont_per_near nup
   {
      GOSUB posa_blocco

      @Y = 4
      @Z = Z/4*3

      @base_0.y = alto_0.y - @Y/2
      @base_0.z = alto_0.z + (Z - @Z)/2

      idx_cnear_up = ATTUALE()
   }

   Posiziona _cont_per_near ndw
   {
      GOSUB posa_blocco

      @Y = 4
      @Z = Z/4*3

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

      idx_cnear_dw = ATTUALE()
   }
}

Elemento SchienaVetroAlzata_AIR
{
   Descrizione = "Air - Alzata - Schiena vetro"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      ""                  1
      Y                      ""                  1
      Yr                     ""                  1
      Z                      ""                  8

      TipoAlzata             ""                  ""
      VAR_Manuale            ""                  0 Implicit
      FLAG_ConAppendiabiti   ""                  0 Implicit

      ConForo_PCV            ""                  0 Implicit
      ConSchXG               ""                  0 Implicit

      COD_EREDITA            ""                  "PRE;POST"
      perRADICE              ""                  ""
      RADICE                 ""                  ""

      M4_NO_OFFS             ""                  1
      M4_VAR                 ""                  "X;Y;Z;TipoAlzata"

      VediLimiti_PCV         ""                  0 Implicit

      XGLASS                 "Num. XGLASS"       "" Utente ( )

     #ifdef TEC
      VAR_Regola_Elements    "Config.Elements"   "" Utente ( )
     #endif
     #ifndef TEC
      VAR_Regola_Elements    ""                  ""
     #endif

      idx_grafica            ""                  -1
      idx_grafica_rt         ""                  -1

      idx_sopra              ""                  -1
      idx_sotto              ""                  -1

      idx_cnear_up           ""                  -1
      idx_cnear_dw           ""                  -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB SetTipologiaAlzata_AIR
      Yr = Air_SetAlzata_Alt( Y, TipoAlzata, 1, 0)

      GOSUB Stato_8

      FIN_orie = "V"
      FIN_var_rt  = "C189"
      FIN_var_sch = SE_STR( ConSchXG == 1, "C048", "C014")
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements

      COMPONENTI2( "wk_scs", ATTUALE(), "ScassoAlzataVetro_AIR")
      if( wk_scs > 0
        | ConForo_PCV > 0) { ALIAS_ADD( ATTUALE(), "StpAlzateCScasso")    }
      else                 { ALIAS_REMOVE( ATTUALE(), "StpAlzateCScasso") }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = X
      GEST_Y = Yr
      GEST_Z = Z

      FLAG_RADICE = $FLAG_STANDARD
      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0)
      {
         perRADICE = STRCAT( "SVA", TipoAlzata)
         if( ConSchXG == 1)
         {
            perRADICE = STRCAT( perRADICE, "XG")
            FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW
         }

         if( STRLEN(TipoAlzata) < 2) { perRADICE = "" GEST_CODICE = "" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         BloccaModificaCatGest_Cmp_368( ATTUALE(), "GEST_C092")
         BloccaModificaCatGest_Cmp_368( ATTUALE(), GetVarGest(FIN_var_sch))

         GOSUB PCF_Elements_RegoleEredita
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      FIN_var = FIN_var_sch
      GOSUB rivestimento
      @f_rivestimento = "0.8"
      if( ConSchXG == 1 ) { @f_rivestimento = "0" }

      idx_grafica = ATTUALE()
   }

   Posiziona Blocco rt
   {
      @escluso = 1
      if( ConSchXG == 1) { @escluso = 0 }

      GOSUB posa_blocco
      @Z = 0.1
      @base_0.z = base_0.z - @Z

      FIN_var = FIN_var_rt
      GOSUB rivestimento

      idx_grafica_rt = -1
      if( @escluso == 0) { idx_grafica_rt = ATTUALE() }
   }

   Posiziona CilindroZ_Scassa cil
   {
      @escluso = 1 - ConForo_PCV

      @X = 70
      @Y = 70
      @Z = Z + 2

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + 154
      @base_0.z = base_0.z - 1

      @pnt_centro = [@X/2,@Y/2,0]
      @VAR_TipoScasso = 0

      @Scassa_Chi_Plus = STRCAT( STR(idx_grafica), ";", STR(idx_grafica_rt))
   }

   Posiziona PCV_ContCollisioni_368 pcvc_r
   {
      @X = X + 19.5 * 2
      @Y = Y + 80 + 80 + 10
      @Z = Z + 51 * 2

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 80 - 5
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   Posiziona _cont_per_near nup
   {
      GOSUB posa_blocco

      @X = X/4*3
      @Y = 4

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

      idx_cnear_up = ATTUALE()
   }

   Posiziona _cont_per_near ndw
   {
      GOSUB posa_blocco

      @X = X/4*3
      @Y = 4

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

      idx_cnear_dw = ATTUALE()
   }
}

Elemento CoperchioVetroAlzata_AIR
{
   Descrizione = "Air - Alzata - Coperchio"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      ""   1
      Y                      ""   8
      Z                      ""   1

      TipoAlzata             ""   "" Implicit

      FLAG_ConAppendiabiti   ""   0  Implicit

      perRADICE              ""   ""
      RADICE                 ""   ""

      COD_EREDITA            ""   "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      FIN_orie = "V"
      FIN_var  = "C014"
      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE")
      {
         BloccaModificaCatGest_Cmp_368( ATTUALE(), "GEST_C014")
      }
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0)
      {
         perRADICE = "CVACX"

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento AstaAppendiabiti_AIR
{
   Descrizione = "Asta appendiabiti generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                     ""  200
      Y                     ""  77
      Z                     ""  239.50

      Zt                    ""  510 Implicit

      Diametro              ""  30

      VAR_Sporgente         ""  0   Boolean
      PosSporgenzaAIR       ""  0   Implicit
      PosSporgenzaAIR_sopra "" -2   Implicit

      FLAG_ConCoperchio     ""  0   Implicit

      Tappo_Sx_X            ""  20.5
      Tappo_Dx_X            ""  20.5

      FIN_var               ""  "C065"
      FIN_orie              ""  "V"

      COD_EREDITA           ""  "PRE;POST"
      perCODICE             ""  ""
      GEST_CODICE           ""  ""
      perRADICE             ""  ""
      RADICE                ""  ""

      idx_near              "" -1

      idx_grafica_fiasx     "" -1
      idx_grafica_fiadx     "" -1
      idx_grafica_sch       "" -1

      idx_fia_sx            "" -1
      idx_fia_dx            "" -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      Tappo_Sx_X = $AstaAppendiabiti_AIR_TappoStd_X
      Tappo_Dx_X = $AstaAppendiabiti_AIR_TappoStd_X

      //Sporgenza
      wk_sporgenza = PosSporgenzaAIR
      if( PosSporgenzaAIR_sopra > -2 ) { wk_sporgenza = PosSporgenzaAIR_sopra }

      if( wk_sporgenza != 0 )
      {
         if( IS_VAR_FIXED( ATTUALE(), "VAR_Sporgente") == 0 ) { VAR_Sporgente = 1 }

         if( VAR_Sporgente > 0 )
         {
            if( wk_sporgenza < 0 ) { Tappo_Sx_X = $AstaAppendiabiti_AIR_TappoSpr_X }
            if( wk_sporgenza > 0 ) { Tappo_Dx_X = $AstaAppendiabiti_AIR_TappoSpr_X }
         }
      }
      else
      {
         if( IS_VAR_FIXED( ATTUALE(), "VAR_Sporgente") ) { DEL_VAR_MODIFICATE( ATTUALE(), "VAR_Sporgente") }
         VAR_Sporgente = 0
      }

      if( FLAG_ConCoperchio == 1 )
      {
         Tappo_Sx_X = $AstaAppendiabiti_AIR_TappoCop_X
         Tappo_Dx_X = $AstaAppendiabiti_AIR_TappoCop_X
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = X
      GEST_Y = Diametro
      GEST_Z = Diametro

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perCODICE_prec = VAR_VAL_STR( ATTUALE(), "GEST_CODICE")
         perRADICE_prec = VAR_VAL_STR( ATTUALE(), "RADICE")

         perCODICE = ""
         perRADICE = "ASTAIR"

         if( VAR_Sporgente > 0 )
         {
            perRADICE = "ASTAIRCP"
            if( Zt == 560 )
            {
               perRADICE = ""
               perCODICE = "D28024"
            }
         }

         if( FLAG_ConCoperchio == 1 )
         {
            perRADICE = "ASTAIRX"
            GEST_X = X - 1
            GEST_Y = Y
            GEST_Z = Z
         }

         if( perRADICE_prec != perRADICE
           | perCODICE_prec != perCODICE )
         {
            GEST_CODICE = perCODICE
            RADICE = perRADICE

            flag_CAMBIA_VAR = 1
         }
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_AstaAppendiabiti_AIR bl
   {
      GOSUB posa_blocco

      GOSUB rivestimento
   }

   Posiziona CilindroX tsx
   {
      @X = 10
      @Y = 14
      @Z = 14

      @base_0.x = base_0.x - 9
      @base_0.y = base_0.y + Diametro/2 - @Y/2
      @base_0.z = base_1.z - Diametro/2 - @Z/2

      GOSUB rivestimento
   }

   Posiziona CilindroX_Scassa scsx
   {
      @X = 15
      @Y = 16
      @Z = 16

      @base_0.x = base_0.x - 14
      @base_0.y = base_0.y + Diametro/2 - @Y/2
      @base_0.z = base_1.z - Diametro/2 - @Z/2

      @Scassa_Chi_Plus = STR(idx_grafica_fiasx)
   }

   Posiziona CilindroX tapposx
   {
      @X = Tappo_Sx_X
      @Y = Diametro
      @Z = Diametro

      @base_0 = base_0
      @base_0.x = base_0.x - @X - 8
      @base_0.z = base_1.z - @Z

      GOSUB rivestimento
   }

   Posiziona CilindroX tdx
   {
      @X = 10
      @Y = 14
      @Z = 14

      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + Diametro/2 - @Y/2
      @base_0.z = base_1.z - Diametro/2 - @Z/2

      GOSUB rivestimento
   }

   Posiziona CilindroX_Scassa scdx
   {
      @X = 15
      @Y = 16
      @Z = 16

      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + Diametro/2 - @Y/2
      @base_0.z = base_1.z - Diametro/2 - @Z/2

      @Scassa_Chi_Plus = STR(idx_grafica_fiadx)
   }

   Posiziona CilindroX tappodx
   {
      @X = Tappo_Dx_X
      @Y = Diametro
      @Z = Diametro

      @base_0 = base_0
      @base_0.x = base_0.x + X + 8
      @base_0.z = base_1.z - @Z

      GOSUB rivestimento
   }

   Posiziona CilindroZ trt
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0 ) { @escluso = 0 }

      @X = 14
      @Y = 14
      @Z = 10

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

      GOSUB rivestimento
   }

   Posiziona CilindroZ_Scassa scrt
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0 ) { @escluso = 0 }

      @X = 16
      @Y = 16
      @Z = 15

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Diametro/2 - @Y/2
      @base_0.z = base_0.z - 9

      @Scassa_Chi_Plus = STR(idx_grafica_sch)
   }

   Posiziona CilindroZ tapport
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0 ) { @escluso = 0 }

      @X = Diametro
      @Y = Diametro
      @Z = Tappo_Dx_X

      @base_0 = base_0
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z - @Z - 8

      GOSUB rivestimento
   }

   Posiziona RigaOrdine_NonGraficato gast
   {
      @escluso = 1
      if( VAR_Sporgente > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @GEST_CODICE = "D28026"
   }

   Posiziona RigaOrdine_NonGraficato gpro
   {
      @escluso = 1
      if( VAR_Sporgente > 0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = $AstaAppendiabiti_AIR_TappoSpr_X

      @GEST_CODICE = "D28027"
   }
}

Elemento _graf_AstaAppendiabiti_AIR
{
   Descrizione = "Asta appendiabiti generico - Grafica"
   Code        = COD
   Gruppo      = "PALO"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X                     "Larghezza"       200
      Y                     "Altezza"         77
      Z                     "Profondità"      239.50

      Diametro              ""                30  Implicit

      Rinforzo_Sup_Y        "Rinf. sup - Y"   62
      Rinforzo_Rt_Z         "Rinf. sup - Y"   224.50

      FLAG_ConCoperchio     ""                0   Implicit

      FIN_var               ""                ""  Implicit

      HIDE                  ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Rinforzo_Sup_Y = Y - Diametro/2
      Rinforzo_Rt_Z  = Z - Diametro/2

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona CilindroX palo
   {
      @X = X
      @Y = Diametro
      @Z = Diametro

      @base_0 = base_0
      @base_0.z = base_0.z + Z - @Z

      GOSUB rivestimento
   }

   Posiziona CilindroY rinfs
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0 ) { @escluso = 0 }

      @X = Diametro
      @Y = Rinforzo_Sup_Y
      @Z = Diametro

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

      GOSUB rivestimento
   }

   Posiziona CilindroZ rinfr
   {
      @escluso = 1
      if( FLAG_ConCoperchio > 0 ) { @escluso = 0 }

      @X = Diametro
      @Y = Diametro
      @Z = Rinforzo_Rt_Z

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

      GOSUB rivestimento
   }
}

Elemento ScassoAlzataVetro_AIR
{
   Descrizione = "AIR"
   Code        = CUB
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile FiancoVetroAlzata_AIR SchienaVetroAlzata_AIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_TipoScasso "Tipologia Scasso"  0 Menu ( TpScsAIR )

      X    "Larghezza"   100
      Y    "Altezza"      50
      Z    "Profondità"   10

      Filler1 " " " " ShowAlways

      //rettangolare
      DimX  "Larghezza"    100 Utente ( 50-100 )
      DimY  "Altezza"       50 Utente ( 50-100 )
      Raggio "Raggio"        7 ShowAlways // Utente ( 7- )

      //circolare
      Diametro "Diametro"  9 Utente ( 9-100 )

      Filler2 " " " " ShowAlways

      ////Posizione
      //Pos1     "Distanza da centro foro"        " " ShowAlways
      //Pos2     "Distanza da filo basso sx foro" " " ShowAlways

      OffsetX     "Offset X"  45 Utente ( )
      OffsetY     "Offset Y"  45 Utente ( )

      RigeneraScasso  "" 0

      Scassa_Chi_Plus "" ""

      HIDE "" 0
      CMP2_AZIONI      ""      "A"

      M4_MIS "" "Filler*;VAR_TipoScasso;DimX;DimY;Raggio;Diametro;Pos1;Pos2;OffsetX;OffsetY"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7
      FLAG_RADICE = $NO_RAD

      HIDE_ON_EDIT(ATTUALE(),"DimX;DimY;Raggio;Pos2",1 - VAR_TipoScasso)
      HIDE_ON_EDIT(ATTUALE(),"Diametro;Pos1",VAR_TipoScasso)

      idx_pdr = PADRE(ATTUALE(),1)

      OffX_min = 45
      OffX_max = VAR_VAL(idx_pdr,"X") - OffX_min - X

      OffY_min = 45
      OffY_max = VAR_VAL(idx_pdr,"Y") - OffY_min - Y

      if( NOME(idx_pdr) == "FiancoVetroAlzata_AIR" )
      {
         OffX_max = VAR_VAL(idx_pdr,"Z") - OffX_min - X
      }

      VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( ",STR(OffX_min),"-",STR(OffX_max)," )"))
      VAR_SET_MENU(ATTUALE(),"OffsetY",STRCAT("( ",STR(OffY_min),"-",STR(OffY_max)," )"))

      if( ACTION() > 0 & ACTION() != 2 &  $OnLoadOrder== 0 & $CNP__ == 0 )
      {
         if( OffsetX < OffX_min | OffsetX > OffX_max )  { CHIEDI(ATTUALE(),"OffsetX") }
         if( OffsetY < OffY_min | OffsetY > OffY_max )  { CHIEDI(ATTUALE(),"OffsetY") }
      }

      DescEdit__ = MSG(1119)
      if( VAR_TipoScasso == 0 ) { DescEdit__ = MSG(1120) }

   }

   PuntiNotevoli
   {
      if( VAR_TipoScasso == 0 )
      {
         X = Diametro
         Y = Diametro
      }
      else
      {
         X = DimX
         Y = DimY
      }

      GOSUB punti

      pnt_centro = [X/2,Y/2,0]
   }

   #include %path_bdm%\TLib\Orie.inc

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

         COMPONENTI2("sca",$query_p1,"ScassoAlzataVetro_AIR")
         if( sca > 0 )  { $QueryResult__ = 0 }

         if( VAR_VAL($query_p1,"ConForo_PCV") > 0 ) { $QueryResult__ = 0 }
      }
   }

   Attrezza
   {
      idx_ref = @idx_att

      base_0 = $vano_0

      base_0.x = $vano_0.x + OffsetX
      base_0.y = $vano_0.y + OffsetY
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder != 1 )
      {
         idx_pdr = PADRE(ATTUALE(),1)

         Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(idx_pdr,"idx_grafica")),";", STR(VAR_VAL(idx_pdr,"idx_grafica_rt")))
      }

      CRS_lista_var = "VAR_TipoScasso;DimX;DimY;Diametro;OffsetX;OffsetY"
      GOSUB CheckRigeneraScasso
      if( CRS_Result == 1 )  { RigeneraScasso = 1 }

      //rigenera scasso manuale
      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

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

   Procedura PostAction2
   {
      if( $OnRigenera== 0
        & $OnLoadOrder==0  )
      {
         RigeneraScasso = 1
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
      }
   }


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

      $wk_EliminaScassi_da_idx = GetTopLevel(ATTUALE())
      GOSUB EliminaScassi

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

   //per selezione
   Posiziona ContenitoreInvisibile q1
   {
      GOSUB posa_blocco
   }

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

   Posiziona BloccoSmussatoZ_Scassa scs
   {
      @escluso = 1
      if( VAR_TipoScasso == 1 ) { @escluso = 0 }

      @Raggio = Raggio

      GOSUB posa_blocco
      @base_0.z = base_0.z - 2
      @Z = Z + 4

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //Posiziona CilindroZ Ing2
   //{
   //   @escluso = 1
   //   if( VAR_TipoScasso == 0 ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //
   //   @c_rivestimento = [255,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona CilindroZ_Scassa scs_cil
   {
      @escluso = 1
      if( VAR_TipoScasso == 0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Diametro
      @base_0.z = base_0.z - 2
      @Z = Z + 4

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }
}

Elemento SetAlzataVetroConContenitore_AIR
{
   Descrizione = "Set Alzata Vetro AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;AIR_Compo;TSTP_NoQuota_PROSPETTI;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Xt      "" 1240
      X       "Larghezza"        1272 ShowAlways

      Y       "Altezza"          322
      Yt      "Altezza"          322 ShowAlways

      Z       "Profondità"       406
      Zt      "Profondità"       406 ShowAlways

      AIR_Componente   ""          "SetAlzata"

      Filler2 " " " " ShowAlways

      //posizione rispetto alla mensola sotto
      PosSporgenzaAIR "Lato sporgenza" 0 Menu ( PSA_AIR ) SaveAlways

      //M - MENSOLA
      //C - CONTENITORE
      TipoElementoSotto  "" "M"
      TipoElementoSopra  "" "M"

      TipoAlzata         "Tipo Alzata MM - CC - CM - CX" "MM" SaveAlways

      ConVetroRT         "Presenza vetro Retro" 0 //Menu ( SiNo )
      ConVetroSX         "Presenza vetro SX"    1 //Menu ( SiNo )
      ConVetroDX         "Presenza vetro DX"    1 //Menu ( SiNo )

      FLAG_CompostoGEN   "Modalità composto GENERICO" 0 Boolean

      VAR_ContVetro      "Contenitore Vetro" 0

      VAR_ConCassetto    "" 0
      VAR_ConRibalta     "" 0

      idx_sopra          "" -1
      idx_sotto          "" -1

      idx_cnear_sx       "" -1
      idx_cnear_dx       "" -1

      idx_cnear_up       "" -1
      idx_cnear_dw       "" -1

      CMP2_AZIONI        ""  "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  2

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS             ""  "Filler*;X;Yt;Zt;PosSporgenzaAIR"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_GRUPPO__  = MSG(1036)

      if( ACTION() == 0 )
      {
         HIDE_ON_EDIT2( ATTUALE(), "TipoAlzata", $ATTIVA_DLL)
         HIDE_ON_EDIT2( ATTUALE(), "FLAG_CompostoGEN", $ATTIVA_DLL)
         HIDE_ON_EDIT2( ATTUALE(), "PosSporgenzaAIR", $ATTIVA_DLL)
      }

      Prof_Vetro = 366
      Larg_Vetro = 628
   }

   PuntiNotevoli
   {
      Xt = X + 2*$Air_SetAlzataVetro_Rie_Vetro_Lato
      Y = Air_SetAlzata_Alt( Yt, TipoAlzata, 1, 0)
      if( TipoAlzata == "CX") { Y = Y + $Air_SetAlzataVetro_Spe_Vetro }
      Z = Prof_Vetro

      GOSUB punti_XtYtZt

      base_so = base_0
      alto_ne = alto_2

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_Lib_AIR
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB SetTipologiaAlzata_AIR
      GOSUB SetVerso_Lib_AIR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         //GOSUB Set_Radice_MensolaLib_AIR
         //GOSUB Set_Gest_C003_MensolaLib_AIR
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //if( FLAG_CompostoGEN == 1  )
      //{
      //   perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")
      //   GEST_CODICE = ""
      //
      //   perRADICE = STRCAT("AVA",TipoAlzata)
      //
      //   if( FLAG_ConAppendiabiti ) { perRADICE = "AVAAP" }
      //
      //   RADICE = perRADICE
      //   if( perRADICE_prec != perRADICE ) { flag_CAMBIA_VAR = 1 }
      //}

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura PostGestDllValida
   {
      GOSUB PostGest_Lib_AIR
   }

   //Procedura PostAction2
   //{
   //   GOSUB PostAction2_Lib_AIR
   //}

   Procedura CtrlStatici
   {
      GOSUB CtrlStatici_Lib_AIR
   }

   Procedura OnChangedVar
   {
      GOSUB OnChangedVar_PosLib_Air
   }

   Posiziona ContenitoreInvisibile q1
   {
      GOSUB posa_blocco
      @Z = 10
   }

   Posiziona SchienaVetroAlzata_AIR vsch
   {
      @escluso = 1 - ConVetroRT

      @X = Larg_Vetro
      @Y = Yt

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato + (X - @X)/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Sch
   }

   Posiziona FustoContenitoreAlzata_AIR fust
   {
      @escluso = 0
      if( VAR_ContVetro == 1 ) { @escluso = 1 }

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato + X/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Sch + 4
   }

   Posiziona FustoContenitoreAlzataVetro_AIR fust2
   {
      @escluso = 1
      if( VAR_ContVetro == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato + X/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Sch
   }

   Posiziona FiancoVetroAlzata_AIR vfsx
   {
      @escluso = 1 - ConVetroSX

      @Y = Yt
      @Z = Prof_Vetro

      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Fia
   }

   Posiziona FiancoVetroAlzata_AIR vfdx
   {
      @escluso = 1 - ConVetroDX

      @Y = Yt
      @Z = Prof_Vetro

      @base_0.x = base_0.x + Xt - $Air_SetAlzataVetro_Rie_Vetro_Lato - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Air_SetAlzataVetro_RieZ_Fia
   }

   Posiziona Blocco Ing
   {
      @escluso = 1

      GOSUB posa_blocco
      @base_0.x = base_0.x + $Air_SetAlzataVetro_Rie_Vetro_Lato

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

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

      @base_0.x = base_0.x + X - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @X = X - 100
      @Y = 4
      @Z = Z - 110

      @base_0.x = base_0.x + 50
      @base_0.y = alto_0.y -  2
      @base_0.z = base_0.z + 50
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = X - 100
      @Y = 4
      @Z = Z - 110

      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + 50
   }
}

Elemento FustoContenitoreAlzata_AIR
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza "   634
      Y  "Altezza "     322
      Z  "Profondita'"  366

      M4_NO_OFFS "" 1

      GEST_CODICE "" "AIR741"

      VAR_ConCassetto "" 0 Implicit
      VAR_ConRibalta  "" 0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Vet =  4
      Spe_Fia = 23
      Spe_Pan = 19

      AriaX_Ant = 1.5
      AriaY_Ant = 2

      AriaY_Cas = 1.5
      AriaY_CasCas = 3

      AriaY_Cas = 1.5
      AriaY_CasCas = 3

      RieR_PanZ = 1
      RieF_PanZ = 22
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Y + 16
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona SchienaFustoAlzata_AIR sch
   {
      @X = 628
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 8
      @base_0.z = base_0.z - Spe_Vet
      @Y = Y + 16
      @Z = Spe_Fia
   }

   Posiziona FiancoFustoAlzata_AIR fsx
   {
      @base_0 = base_0
      @X = Spe_Fia
      @Y = Y
      @Z = Z - 3
      @Verso = -1
   }

   Posiziona FiancoFustoAlzata_AIR fdx
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - @X
      @X = Spe_Fia
      @Y = Y
      @Z = Z - 3
      @Verso = 11
   }

   Posiziona FondoCop_AIR fond
   {
      @base_0.x = base_0.x + Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + RieR_PanZ

      @X = X - 2*Spe_Fia
      @Y = Spe_Pan
      @Z = Z - 26
   }

   Posiziona FondoCop_AIR cop
   {
      @base_0.x = base_0.x + Spe_Fia
      @base_0.y = base_0.y + Y - Spe_Pan
      @base_0.z = base_0.z + RieR_PanZ

      @X = X - 2*Spe_Fia
      @Y = Spe_Pan
      @Z = Z - 26
   }

   Posiziona Anta_368 anta
   {
      @escluso = 1 - VAR_ConRibalta

      @base_0.x = base_0.x + Spe_Vet + AriaX_Ant
      @base_0.y = base_0.y + AriaY_Ant
      //@base_0.z = base_0.z + Z - RieF_PanZ - 3
      @base_0.z = base_0.z + Z - RieF_PanZ - 1

      @X = X - 2*(Spe_Vet + AriaX_Ant)
      @Y = Y - 2*AriaY_Ant

      @AperturaMn = 1
   }

   Posiziona Cassetto_368 cas1
   {
      @escluso = 1 - VAR_ConCassetto

      @base_0.x = base_0.x + Spe_Vet + AriaX_Ant
      @base_0.y = base_0.y + AriaY_Cas
      @base_0.z = base_0.z + Z - @MZ - 25

      @X  = X - 2*(Spe_Vet + AriaX_Ant)
      //@Yt = (Y - AriaY_CasCas) /2
      @Yt = Y /2
   }

   Posiziona Cassetto_368 cas2
   {
      @escluso = 1 - VAR_ConCassetto

      @base_0.x = base_0.x + Spe_Vet + AriaX_Ant
      @base_0.y = base_0.y + AriaY_Cas + @Y + AriaY_CasCas
      @base_0.z = base_0.z + Z - @MZ - 25

      @X = X - 2*(Spe_Vet + AriaX_Ant)
      //@Yt = (Y - AriaY_CasCas) /2
      @Yt = Y /2
   }

   //Simone 07/02/2023
   Posiziona Miniwinch_368 MWDX
   {
      @escluso = 1 - VAR_ConRibalta

      @HIDE = 1

      @VAR_Posizione = 1

      @base_0.x = base_0.x + X - $M368_Spe_Fia - @X - 4
      @base_0.y = base_0.y + $M368_Spe_Fnd + 135.9
      @base_0.z = base_0.z + Z - @Z - 55.4
   }
}

Elemento FiancoFustoAlzata_AIR
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X "" 23
      Y "" 1
      Z "" 1

      Verso "" -1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      RieR_PanZ = 1
      RieF_PanZ = 22

      //FIN_var_pan = "C032"
      FIN_var_vtr = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),2)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @X = X - 4
      if( Verso < 0  )  { @base_0.x = base_0.x + 4 }

      @base_0.z = base_0.z + RieR_PanZ
      @Z = Z - RieR_PanZ - RieF_PanZ

      //FIN_var = FIN_var_pan
      //GOSUB rivestimento
      @c_rivestimento = $c_pomice

   }

   Posiziona Blocco vt
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z - 1

      @X = 4
      if( Verso > 0 )  { @base_0.x = base_0.x + X - 4 }

      FIN_var = FIN_var_vtr
      GOSUB rivestimento
   }
}

Elemento SchienaFustoAlzata_AIR
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X "" 23
      Y "" 1
      Z "" 1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      Spe_Vet = 4
      RieX_Pan = 20
      RieY_Pan = 27
      Spe_Pan = 19

      RieR_PanZ = 1
      RieF_PanZ = 22

      //FIN_var_pan = "C032"
      FIN_var_vtr = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),2)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      @X = X - 2*RieX_Pan
      @Y = Y - 2*RieY_Pan
      @Z = Spe_Pan

      @base_0.x = base_0.x + RieX_Pan
      @base_0.y = base_0.y + RieY_Pan
      @base_0.z = base_0.z + Spe_Vet

      //FIN_var = FIN_var_pan
      //GOSUB rivestimento
      @c_rivestimento = $c_pomice
   }

   Posiziona Blocco vt
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Z = Spe_Vet

      FIN_var = FIN_var_vtr
      GOSUB rivestimento
   }

   Posiziona SchienaVetroAlzata_AIR sch
   {
      @X = X
      @Y = Y - 16
      @Z = 8

      @base_0 = base_0
      @base_0.y = base_0.y + 8

      @RADICE = ""
      @GEST_CODICE = ""
      SHOW_MODE(ATTUALE(),0)
   }
}

Elemento FustoContenitoreAlzataVetro_AIR
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza "   628
      Y  "Altezza "     322
      Z  "Profondita'"  366

      M4_NO_OFFS "" 1

      //LZ 04/05/20: Codice errato
      //GEST_CODICE "" "AIR741"
      GEST_CODICE "" "AIR8202"

      VAR_ConCassetto "" 0 Implicit
      VAR_ConRibalta  "" 0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Vet =  8

      Spe_Fia = 23
      Spe_Pan = 19

      AriaX_Ant = 1.5
      AriaY_Ant = 2

      AriaY_Cas = 1.5
      AriaY_CasCas = 3

      RieR_PanZ = 1
      RieF_PanZ = 22
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Y + 16

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @Y = 10
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona Blocco sch
   {
      GOSUB posa_blocco
      //@X = X - 6
      @Z = Spe_Vet
      //@base_0.x = base_0.x + 3

      //LZ 04/05/20
      //FIN_var = "C032"
      FIN_var = "C014"
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco fiasx
   {
      GOSUB posa_blocco
      //Luca 26/04/2021
      //@base_0.z = base_0.z + Spe_Vet + 1
      @base_0.z = base_0.z + Spe_Vet
      @Z = Z - 2*Spe_Vet - 2
      @X = Spe_Vet

      //LZ 04/05/20
      FIN_var = "C042"
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco fiadx
   {
      GOSUB posa_blocco
      //Luca 26/04/2021
      //@base_0.z = base_0.z + Spe_Vet + 1
      @base_0.z = base_0.z + Spe_Vet
      @Z = Z - 2*Spe_Vet - 2
      @base_0.x = base_0.x + X - Spe_Vet
      @X = Spe_Vet

      //LZ 04/05/20
      FIN_var = "C042"
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona AntaVetroAlzata_AIR ant
   {
      //@base_0.y = base_0.y
      @base_0.z = base_0.z + Z - Spe_Vet
      @Z = Spe_Vet

      //@base_0.x = base_0.x + 2
      //@X = X - 4

      //Luca 26/04/2021 mantis
      @base_0.x = base_0.x - 1
      @X = X + 2
      @base_0.y = base_0.y + 2.5
      @Y = Y - 5

   }
}

Elemento AntaVetroAlzata_AIR
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 23
      Y "" 1
      Z "" 1

      Verso ""    1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      //LZ 04/05/20
      //FIN_var = "C001"
      FIN_var = "C042"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   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
      azione_val_max = 100
      if(VAR_EXIST(ATTUALE(),"azione_vel")==0) { azione_vel = 1 }

      rotazione_max = 85
      if( NOME(ATTUALE())=="Cuc_AntaSoffietto" ) { rotazione_max = 90 }

      if(ACTION()==6)
      {
         //azione_mode = 6: spostamento lungo un percorso
         azione_mode = $az_percorso

         azione_path_0=[0,0,0]
         //Rotazione sull'asse y
         azione_rotate_mode = $az_rotate_mode_y

         azione_delta_0=0
         azione_delta_1=33.3
         azione_delta_2=66.6
         azione_delta_3=100

         if(STRCMP(azione_verso,"DX")==0)
         {
            azione_path_1=[-4,0,0]
            azione_path_2=[-8,0,-1]
            azione_path_3=[-12,0,-1]

            azione_point=[X,0,0]

            azione_path_ang_0 = 0
            azione_path_ang_1 = 30
            azione_path_ang_2 = 60
            azione_path_ang_3 = rotazione_max
         }
         else
         {
            azione_path_1=[0,0,0]
            azione_path_2=[6,0,0]
            azione_path_3=[12,0,0]

            azione_point=[0,0,0]

            azione_path_ang_0 = 0
            azione_path_ang_1 = -30
            azione_path_ang_2 = -60
            azione_path_ang_3 = -1*rotazione_max
         }

         //Calcolo l'angolo tra lo spostamento massimo e l'altezza della
         //scocca, da utilizzare come coefficiente
         SET_#(azione_idx_pdr)
         azione_ang = GRADI(ATAN2(azione_val_max,#Y))
         //Valore di spostamento massimo aumentato del coefficiente:
         //più il frontale è posizionato in basso, più aumenta,
         //quindi, durante l'azione, prima arriva al valore massimo
         azione_val_aum = azione_val_max + (#alto_0.y-alto_0.y)*TAN(azione_ang)

         //Valore unitario di spostamento che verrà moltiplicato
         //per il valore percentuale passato da Metron ($azione_valore)
         azione_unita_spost = (azione_val_aum/azione_val_max)*azione_val_aum
      }
      else
      {
         //Valore di spostamento effettivo
         azione_valore = azione_unita_spost*$azione_valore/100
         azione_valore = azione_valore*azione_vel
         if(azione_valore>azione_val_max) { azione_valore = azione_val_max }
      }

   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona __import__ sat_i1
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y + 3.6
      @base_0.z = base_0.z - 95.34
      @import = STRCAT($path_sat,"AIR\CernieraVetrinaM.sat")
      @c_rivestimento = $c_alluminio
   }

   Posiziona CernieraAntaVetroAlzata_AIR satiM2
   {
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y + 3.6
      @base_0.z = base_0.z - 95.34
   }

   Posiziona __import__ sat_i1F
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y +  3.6
      @base_0.z = base_0.z - 95.34
      @import = STRCAT($path_sat,"AIR\CernieraVetrinaF.sat")
      @c_rivestimento = $c_alluminio
      @azione_locked = 1
   }

   Posiziona __import__ satsM
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y + Y -  3.6  - 27.80
      @base_0.z = base_0.z - 95.34
      @import = STRCAT($path_sat,"AIR\CernieraVetrinaM.sat")
      @c_rivestimento = $c_alluminio
   }

   Posiziona CernieraAntaVetroAlzata_AIR satsM2
   {
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y + Y -  3.6  - 27.80
      @base_0.z = base_0.z - 95.34
   }

   Posiziona __import__ satsF
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 9
      @base_0.y = base_0.y + Y -  3.6  - 27.80
      @base_0.z = base_0.z - 95.34
      @import = STRCAT($path_sat,"AIR\CernieraVetrinaF.sat")
      @c_rivestimento = $c_alluminio
      @azione_locked = 1
   }
}

Elemento CernieraAntaVetroAlzata_AIR
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 23
      Y "" 1
      Z "" 1

      Verso ""    1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      FIN_var = "C001"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura azione
   {
      //GOSUB azione_apertura_battente
      azione_val_max = 100
      if(VAR_EXIST(ATTUALE(),"azione_vel")==0) { azione_vel = 1 }

      if(ACTION()==6)
      {
         //Calcolo del valore unitario di spostamento:
         //per ottenere una certa variabilità (velocità di apertura
         //differenti da frontale a frontale) lo si fa
         //dipendere dalla posizione in altezza rispetto al
         //contenitore moltiplicata (in qualche modo) da un
         //coefficiente calcolato a sua volta in funzione
         //dell'altezza del frontale stesso (TAN(azione_ang))

         //Calcolo l'angolo tra lo spostamento massimo e l'altezza della
         //scocca, da utilizzare come coefficiente
         //SET_#(azione_idx_pdr)
         // azione_ang = GRADI(ATAN2(azione_val_max,#Y))
         ////Valore di spostamento massimo aumentato del coefficiente:
         ////più il frontale è posizionato in basso, più aumenta,
         ////quindi, durante l'azione, prima arriva al valore massimo
         //azione_val_aum = azione_val_max + (#alto_0.y-alto_0.y)*TAN(azione_ang)
         azione_val_aum = -50

         //Valore unitario di spostamento che verrà moltiplicato
         //per il valore percentuale passato da Metron ($azione_valore)
         azione_unita_spost = (azione_val_aum/azione_val_max)*azione_val_aum

         //azione_mode = 2: spostamento in Z
         azione_mode = $az_sposta_x
         azione_point = base_0
      }
      else
      {
         //Valore di spostamento effettivo
         azione_valore = azione_unita_spost*$azione_valore/100
         azione_valore = azione_valore*azione_vel
         if(azione_valore>azione_val_max) { azione_valore = azione_val_max }
      }

   }

   Posiziona __import__ sat_i1
   {
      GOSUB posa_blocco
      @import = STRCAT($path_sat,"AIR\CernieraVetrinaM2.sat")
      @c_rivestimento = $c_alluminio
   }
}

Elemento FondoCop_AIR
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      //#include %path_bdm%\var_db.inc

      X "" 23
      Y "" 1
      Z "" 1

      Verso "" -1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      RieR_PanZ = 1
      RieF_PanZ = 22

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      //GOSUB rivestimento
      @c_rivestimento = $c_pomice
   }
}

Elemento GiunzioneMensole_AIR
{
   Descrizione = "Supporto per Schienale"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile MensolaLib_AIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X            "Larghezza"        30
      Y            "Altezza"          54 ShowAlways
      Z            "Profondità"       30

      Spessore     ""                 2

      LatoMensola  "Lato Giunzione"   -1 Menu ( DXSX )

      NO_GEST      ""                 0

      GEST_CODICE  ""                 ""

      FIN_var      ""                 "C082"
      CMP2_AZIONI  ""                 "A"

      M4_MIS       ""                 "Filler*;Y;LatoMensola"
      FillerM2G    " "                "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( UN_PADRE("MensolaLib_AIR") )
      {
         COMPONENTI2("gm",PADRE(ATTUALE(),1),"GiunzioneMensole_AIR")

         //nascondo se ho già 2 giunzioni
         HIDE_ON_EDIT2(ATTUALE(),"LatoMensola",SE_NUM(gm==2,1,0))
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 1
         COMPONENTI2("gm",$query_p1,"GiunzioneMensole_AIR")
         if( gm > 1  ) { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      annulla_ins = 0
      DEL_VAR(idx_att,"liv2add*")
      liv2add    = 1
      liv2add[1] = 0

      COMPONENTI2("gm",idx_ref,"GiunzioneMensole_AIR")

      if( gm > 1 )  { annulla_ins = 1 }

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

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      base_0  = $vano_0

      if( IS_VAR_FIXED(ATTUALE(),"LatoMensola") == 0 )
      {
         COMPONENTI2("gm",idx_ref,"GiunzioneMensole_AIR")
         LatoMensola = -1
         if( gm > 0 ) { LatoMensola = -1* VAR_VAL(gm[1],"LatoMensola") }

         VAR_SET_MODIFICATA(ATTUALE(),"LatoMensola","")
      }

      base_0.x = $vano_0.x - X/2 - Spessore/2
      if( LatoMensola > 0 ) { base_0.x = $vano_0.x + @X - X/2 + Spessore/2 }

      Y = @Y + 2*Spessore
      base_0.y = $vano_0.y + @Y/2 - Y/2

      base_0.Z = $vano_0.z + @Z/2 - Z/2
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = "AIR600"
      if( Y < 80 ) { GEST_CODICE = "AIR601" }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento
      @Y = Y + Spessore/2
      @X = 38
      @Z = 38
      @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_alluminio
      @import = STRCAT($path_sat,"AIR_GiunzioneMen_",STR(Y),".sat")
   }
}

Elemento PortaDVD_AIR
{
   Descrizione = "Porta TV"
   Code        = 30MM
   Gruppo      = "30MM"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"         440 ShowAlways
      Y       "Altezza"           128 ShowAlways
      Z       "Profondità"        330 ShowAlways

      CMP2_AZIONI      ""      "S"

      FIN_var "" "C014"

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1

      M4_MIS "" "FillerM2G;X;Y;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Vet = 8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco sup
   {
      GOSUB posa_blocco
      @Y = Spe_Vet
      @base_0.y = base_0.y + Y - @Y

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco fsx
   {
      GOSUB posa_blocco
      @X = Spe_Vet
      @Y = Y - Spe_Vet

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
   Posiziona Blocco fdx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - Spe_Vet
      @X = Spe_Vet
      @Y = Y - Spe_Vet

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento SostegnoVetro_AIR
{
   Descrizione = "Sostegno Vetro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   //Alias NoCollision

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //Il sostegno vetro è codificato come 12, in realtà la larghezza della staffa è 70
      X      "Spessore"      70
      Xt     "Spessore"      12 ShowAlways

      Y      "Altezza vetro"   727 ShowAlways
      Yt     "Altezza totale"  736 ShowAlways

      Z      "Profondità"      366 ShowAlways

      Filler1            " " "" ShowAlways

      //il verso è necessario per capire la decentratura del vetro rispetto alla staffa (e quindi a tutto il sostegno vetro)
      Verso       "" "DX"

      VetroOriz   "" 0

      VAR_Manuale "" 0 Implicit

      FillerM2G            " " "" ShowAlways

      VediLimiti_PCV "" 0 Implicit

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0 Boolean

      //Simone 08/06/2022
      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      M4_MIS "" "FillerM2G;;Xt;Yt;Z"

      #ifndef TE
         M4_NO_OFFS  "" 1
      #endif

      COD_EREDITA ""  "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB NO_AUTO

      //STAFFA METALLICA
      //S.1 la profondità della staffa varia in base alla profondità di tutto il sostegno vetro
      Staffa_Z    = 250
      if( Z > 400 ) { Staffa_Z = 300 }

      if( UN_PADRE("SetVetriFondoATerra_AIR") )
      {
         Staffa_Z    = 300
         if( Z > 400 ) { Staffa_Z = 400 }

         if( VetroOriz == 1 ) { Staffa_Z = 500 }
      }

      Staffa_OffZ =  (Z - Staffa_Z)/2

      //VETRO
      //V.1 il vetro è ridotto di 9 ( 3sotto + 6sopra) rispetto al sostegno completo
      Alt_Pie     = 3
      Vetro_RieY  = 6
      //Vetro_Y  = Y - Alt_Pie - Vetro_RieY
      Vetro_Y  = Yt - Alt_Pie - Vetro_RieY

      Vetro_OffX  = 32
      if( Verso == "SX" ) { Vetro_OffX  = 26 }

      //Luca 23/04/2021
      if( UN_PADRE("SetVetriContenitore_AIR") )
      {
         Staffa_OffZ = 15

         Staffa_Z    = 250
         if( Z > 400 ) { Staffa_Z = 400 }

         if( VetroOriz == 1 )
         {
            Staffa_Z    = 500
            Staffa_OffZ =  (Z - Staffa_Z)/2
         }
      }
   }

   PuntiNotevoli
   {
      Vetro_OffX  = 32
      if( Verso == "SX" ) { Vetro_OffX  = 26 }
      //Luca 23/04/2021
      if( UN_PADRE("SetVetriContenitore_AIR") )
      {
         Staffa_Z    = 250
         if( Z > 400 ) { Staffa_Z = 400 }

         if( VetroOriz == 1 )
         {
            Staffa_Z    = 500
            Staffa_OffZ =  (Z - Staffa_Z)/2
         }
      }

      //Yt = Y + Vetro_RieY + Alt_Pie
      Yt = Y

      GOSUB punti_Yt
   }
   #include %path_bdm%\TLib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      //Simone 08/06/2022
      GOSUB GetRegola_Componenti_Elements
   }

   //Simone 08/06/2022
   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         GOSUB PCF_Elements_RegoleEredita
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1)
      if( IS_IDX(GEST_IDXPADRE) != 1 ) { GEST_IDXPADRE = ATTUALE() }

      if( FLAG_CompostoGEN > 0 )             { EXITSUB() }

      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 )
      {
         perRADICE = "36SOSVT"
         perCODICE = ""

         if( VAR_Manuale == 1 )
         {
            perRADICE = ""
            perCODICE = "TER901"
         }

         GEST_CODICE = perCODICE
         RADICE = perRADICE
      }

      if( perRADICE != RADICE
        | perCODICE != GEST_CODICE ) { flag_CAMBIA_VAR = 1 }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //}

   Posiziona StaffaXSostegno_368 st
   {
      @base_0.x = base_0.x
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + Staffa_OffZ
      @Z = Staffa_Z
      @Verso = Verso

      idx_staffa = ATTUALE()
   }

   Posiziona VetroXSostegno_368 vtr
   {
      @base_0.x = base_0.x + Vetro_OffX
      @base_0.y = base_0.y + Alt_Pie
      @base_0.z = base_0.z
      @Y = Vetro_Y
      @Z = Z

      idx_vetro = ATTUALE()
   }

   Posiziona Blocco piesx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Vetro_OffX
      @X = 12
      @Y = Alt_Pie
      @Z = 20
      @c_rivestimento = $c_nero
   }
   Posiziona Blocco piedx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Vetro_OffX
      @base_0.z = base_0.z + Z - 20
      @X = 12
      @Y = Alt_Pie
      @Z = 20
      @c_rivestimento = $c_nero
   }

   Posiziona PCV_ContCollisioni_368 pcvc_dx
   {
      @X = 150
      @Z = Z + 12 + 12
      @Y = Y + 80 + 5

      @base_0.x = base_0.x - 50
      if( Verso == "SX" ) { @base_0.x = base_0.x - 30 }

      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
   }
}

//Simone 01/08/2022
Elemento Staffetta_Antirib_AIR
{
   Descrizione = "Staffetta L"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X        "Larghezza"       19.3
      Y        "Altezza"         31
      Z        "Profondità"      76

      Spe      "Spessore"        2.5

      file_sat ""                ""
      HIDE     ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      file_sat = STRCAT($path_sat,"AIR\Staffa_Antiribaltamento.SAT")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      //GEST_CODICE = ""

      GOSUB GestComune_Post
   }

   Posiziona __import__ staf
   {
      GOSUB posa_blocco
      @import = file_sat
      @c_rivestimento = $c_alluminio
   }
}

//** { SCRIVANIE AIR
Elemento Scrivania_AIR
{
   Descrizione = "SCRIVANIE AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpScrivaniaAIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "Larghezza"            1104 Menu ( LarScriv_AIR )
      Y                "Altezza"              760  ShowAlways
      Z                "Profondità"           700  Menu ( PrfScriv_AIR )

      //1 - LACCATO
      //2 - WILDWOOD
      //3 - VETRO
      VAR_Materiale       "Materiale"            1  Menu ( MatScriv_AIR )
      VAR_MaterialeStr    ""                     ""

      VAR_SpePiano        "Spessore Piano"       80

      VAR_ConCassetto     "Con cassetto"         0  Menu ( SiNo )
      VAR_PosCassetto     "Posizione cassetto"   0
      VAR_PosCassettoStr  ""                     ""

      //Simone 07/07/2023
      VAR_Consolle_AIR    "Tipologia - Consolle" 0  Boolean

      //usati in stampa
      ConInserto          ""    0
      idx_inserto         ""   -1

      VAR_OffX_Vetro      "Rientro vetro"       184 Utente ( 77-184 )

      //Luca 19/07/2021
      ConTopVetro         ""    0

      RigeneraScasso      ""    0

      //per collisione PASSACAVI
      VediLimiti_PCV      ""    0

      idx_cnear_sx        ""    -1
      idx_cnear_dx        ""    -1

      //Simone 10/05/22 - Per compatibilità stampe
      idx_staffa_mens     ""    -1

      idx_grafica_piano_sotto     "" -1
      idx_grafica_piano_sotto_web "" -1

      CMP2_AZIONI        ""  "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  0

      M4_CNT_MODE__      ""  1
      M4_CNT_MODE2__     ""  1

      M4_MIS             ""  "FillerM2G;X;Y;Z;VAR_Materiale;VAR_ConCassetto"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssScrivanie_AIR
   }

   PuntiNotevoli
   {
      GOSUB punti
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }
   #include %path_bdm%\Tlib\orie.inc

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

         if( VAR_MaterialeStr == "LACCATO" )
         {
            COMPONENTI2("wk_ins",ATTUALE(),"InsertoVetroScrivania_AIR")
            COMPONENTI2("wk_top",ATTUALE(),"TopVetroScrivania_AIR")
            if( wk_ins == 0
              & wk_top == 0 ) { $QueryResult__ = 1 }
         }

         if( NOME($query_p1) == "Passacavi_368" ) { $QueryResult__ = 1 }
      }

      if( $query_type==5 )
      {
         if( VAR_Consolle_AIR == 1 )
         {
            COMANDO2( STRCAT("LIVELLI ADD OnWall ", STR(0), " ", STR(0)) )
         }

         $QueryResult__ = 1
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 11/05/2021
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder!=1  )
      {
         ConInserto  = 0
         idx_inserto = -1
         COMPONENTI2("wk_ins",ATTUALE(),"InsertoVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConInserto  = 1
            idx_inserto = wk_ins[1]
         }

         //Luca 19/07/2021
         ConTopVetro = 0
         idx_top = -1
         COMPONENTI2("wk_ins",ATTUALE(),"TopVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConTopVetro = 1
            idx_top = wk_ins[1]
         }
      }

      if( ACTION()> 0 & ACTION()!=2 & $OnLoadOrder != 1 & VAR_ConCassetto )
      {
         //CRS_lista_var = "OffsetX;OffsetZ"
         CRS_lista_var = "X;Z"
         GOSUB CheckRigeneraScasso
         if( CRS_Result == 1 )  { RigeneraScasso = 1 }
      }

      //rigenera scasso manuale
      if( RigeneraScasso==1  )
      {
         RigeneraScasso = 0

         $wk_EliminaScassi_da_idx = ATTUALE()
         GOSUB EliminaScassi

         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 20/12/2021
      GOSUB Set_Gest_C008_Scrivania_AIR
      GOSUB Set_Gest_C009_Scrivania_AIR

      GOSUB GestComune_Post
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))

      if( VAR_ConCassetto == 0 )  { EXITSUB() }
      COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
   }

   Posiziona PianoScrivania_AIR piano
   {
      @escluso = 1
      if( VAR_MaterialeStr != "VETRO" )
      {
         @escluso = 0
         idx_grafica_piano = @idx_grafica_piano
         idx_grafica_piano_sotto = @idx_grafica_piano_sotto
         idx_grafica_piano_sotto_web = @idx_grafica_piano_sotto_web
         idx_piano = ATTUALE()
      }

      GOSUB posa_blocco
      @Y = VAR_SpePiano
      @base_0.y = base_0.y + Y - VAR_SpePiano
   }

   //Simone 07/07/2023
   Posiziona AIR_Consolle_Piano_Vetro vtr
   {
      @escluso = 1
      if( VAR_MaterialeStr == "VETRO" )
      {
         @escluso = 0
         idx_grafica_piano = -1
         idx_grafica_piano_sotto = @idx_grafica_piano_sotto
         idx_grafica_piano_sotto_web = -1
         idx_piano = ATTUALE()
      }

      GOSUB posa_blocco
      @Y = VAR_SpePiano
      @base_0.y = base_0.y + Y - VAR_SpePiano
   }

   Posiziona SostegnoScrivania_AIR vtrsx
   {
      @base_0.x = base_0.x + VAR_OffX_Vetro
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - Sostegno_Z/2
      if( VAR_MaterialeStr == "VETRO" ) { @base_0.z = base_0.z + Z/2 - Sostegno_Z/2 - $Mens_Riv_Vetri_Spe/2 }

      @Y = Sostegno_Y
      @Z = Sostegno_Z
      @Verso = "SX"

      idx_gamba_sx = ATTUALE()
   }

   Posiziona SostegnoScrivania_AIR vtrdx
   {
      @base_0.x = base_0.x + X - VAR_OffX_Vetro - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - Sostegno_Z/2
      if( VAR_MaterialeStr == "VETRO" ) { @base_0.z = base_0.z + Z/2 - Sostegno_Z/2 - $Mens_Riv_Vetri_Spe/2 }

      @Y = Sostegno_Y
      @Z = Sostegno_Z
      @Verso = "DX"

      idx_gamba_dx = ATTUALE()
   }

   Posiziona SostegnoScrivania_AIR vtrcx
   {
      @escluso = 1

      @Y = Sostegno_Y
      @Z = Sostegno_Z

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

      @ang_y = 90

      @Verso = "DX"

      idx_gamba_cx = ATTUALE()
   }

   Posiziona CassettoScrivania_AIR cas
   {
      @escluso = 1 - VAR_ConCassetto

      @OffX = (X - @X)/2
      if( VAR_PosCassetto < 0 ) { @OffX = 281          }
      if( VAR_PosCassetto > 0 ) { @OffX = X - 281 - @X }

      @base_0.x = base_0.x + @OffX
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + Z - @Z

      @idx_grafica_piano = idx_grafica_piano

      idx_cassetto = ATTUALE()
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   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 PianoScrivania_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       PianoScrivaniaAir;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""  552
      Y   ""   60
      Z   ""  270

      VAR_Materiale                ""   0   Implicit
      VAR_MaterialeStr             ""  ""   Implicit

      VAR_ConCassetto              ""   0   Implicit
      VAR_PosCassetto              ""   0   Implicit

      VAR_OffX_Vetro               ""   0   Implicit

      VAR_LatoAggStr               ""  ""   Implicit

      //Simone 07/07/2023
      VAR_Consolle_AIR             ""   0   Implicit

      //LZ 30/08/2021
      ConTopVetro                  ""   0   Implicit
      ConInserto                   ""   0   Implicit

      Smusso                       ""   1

      idx_inserto                  ""  -1   Implicit
      idx_top                      ""  -1   Implicit

      TIPO_COLLO                   ""  ""

      idx_grafica_piano            "" -1
      idx_grafica_piano_sotto      "" -1
      idx_grafica_piano_sotto_web  "" -1

      VediLimiti_PCV               "" 0 Implicit

      RADICE                       "" "PFSLACWW5080"

      COD_EREDITA                  "" "PRE"

      M4_NO_OFFS                   ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_orie     = "O"
      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C044;C028;C099")

      //Simone 02/12/2022
      if( VAR_MaterialeStr == "WILDWOOD" ) { Smusso = 2 }

      //Luca 28/04/2022
      GOSUB CalcolaOffset_Texture_Teste
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perRADICE = "PSFSLAC"
         if( VAR_MaterialeStr == "WILDWOOD" )
         {
            perRADICE = "PSFSWW"
            if( VAR_ConCassetto == 1 ) { perRADICE = "PFSWW80CAS" }
         }

         if( UN_PADRE("ScrivaniaMuro_AIR") )
         {
            perRADICE = "PSFLL"
            if( VAR_LatoAggStr == "LATO-CORTO" ) { perRADICE = "PSFLC" }
            perRADICE = STRCAT( perRADICE, STR(Y))

            //LZ 26/10/2021
            if( VAR_MaterialeStr == "WILDWOOD" )
            {
               perRADICE = "PDWL"
               if( VAR_LatoAggStr == "LATO-CORTO" ) { perRADICE = "PDWC" }
            }
         }

         if( VAR_Consolle_AIR == 1 )
         {
            perRADICE = "TAC"
            if( VAR_ConCassetto == 1 ) { perRADICE = "TACC" }
         }

         RADICE = perRADICE
      }

      //Simone 06/10/2022
      if( VAR_MaterialeStr == "WILDWOOD" ) { GOSUB Set_Gest_C008_Piano_Tav_Air }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         if( VAR_VAL( ATTUALE(), "FLAG_Speciale") == 0 )
         {
            BloccaModificaCatGest_Cmp_368( ATTUALE() , GetVarGest(FIN_var))
            BloccaModificaCatGest_Cmp_368( ATTUALE() , "GEST_C009")
         }
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco pia
   //{
   //   @escluso = 0
   //   if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @escluso = 1 }
   //
   //   GOSUB posa_blocco
   //   @base_0.x = base_0.x + 1
   //   @X = X - 2
   //
   //   FIN_orie = "O"
   //   @TEXTURE_OFFZ = TEXTURE_OFFZ
   //   @Piano = 1
   //
   //   GOSUB rivestimento
   //
   //   idx_grafica_piano = ATTUALE()
   //}

   //Simone 01/12/2022
   Posiziona BloccoBlend bl
   {
      idx_grafica_piano = ATTUALE()

      GOSUB posa_blocco

      FIN_orie = "O"
      @TEXTURE_OFFZ = TEXTURE_OFFZ
      @Piano = 1

      GOSUB rivestimento

      @BLEND__ = Smusso

      idx_grafica_piano_sotto = ATTUALE()
   }

   Posiziona Blocco fnd
   {
      GOSUB posa_blocco

      @ang_z = -180
      @base_0.x = base_0.x + @X - Smusso
      @base_0.y = base_0.y + 0.9
      @base_0.z = base_0.z + Smusso
      @Y = 1
      @X = X - 2*Smusso
      @Z = Z - 2*Smusso

      FIN_orie = "O"
      @TEXTURE_OFFZ = TEXTURE_OFFZ
      @Piano = 1

      if( VAR_Consolle_AIR == 1 ) { @c_rivestimento = $c_pomice }
      else
      {
         GOSUB rivestimento
      }

      idx_grafica_piano_sotto_web = ATTUALE()
   }

   Posiziona Blocco piasx
   {
      GOSUB posa_blocco
      @X = 1

      @ang_z = -180
      @base_0.x = base_0.x + @X - 0.1
      @base_0.y = base_0.y + Y - Smusso
      @base_0.z = base_0.z + Smusso
      @Y = Y - 2*Smusso
      @Z = Z - 2*Smusso

      FIN_orie = "V"
      @TEXTURE_OFFZ = TEXTURE_OFFZ

      GOSUB rivestimento
   }

   Posiziona Blocco piadx
   {
      GOSUB posa_blocco

      @X = 1

      @base_0.x = base_0.x + X - 0.9
      @base_0.y = base_0.y + Smusso
      @base_0.z = base_0.z + Smusso
      @Y = Y - 2*Smusso
      @Z = Z - 2*Smusso

      FIN_orie = "V"
      @TEXTURE_OFFZ = TEXTURE_OFFZ
      GOSUB rivestimento
   }

   Posiziona Blocco piart
   {
      GOSUB posa_blocco
      @X = X - 2*Smusso
      @Y = Y - 2*Smusso
      @Z = 1

      @base_0.x = base_0.x + Smusso
      @base_0.y = base_0.y + Smusso
      @base_0.z = base_0.z - 0.1

      FIN_orie = "O"
      @TEXTURE_OFFZ = TEXTURE_OFFZ

      GOSUB rivestimento
   }

   Posiziona Blocco piafr
   {
      @escluso = VAR_ConCassetto
      GOSUB posa_blocco
      @X = X - 2*Smusso
      @Y = Y - 2*Smusso
      @Z = 1

      @base_0.x = base_0.x + Smusso
      @base_0.y = base_0.y + Smusso
      @base_0.z = base_0.z + Z - 0.9

      FIN_orie = "O"
      @TEXTURE_OFFZ = TEXTURE_OFFZ

      GOSUB rivestimento
   }

   Posiziona Staffetta_Antirib_AIR ant_dx
   {
      @escluso = 1
      if( VAR_Consolle_AIR == 1 ) { @escluso = 0 }

      @X = 15
      @Y = 28.5

      @base_0 = base_0
      @base_0.x = base_0.x + X - 257.5 - @X/2
      @base_0.y = base_0.y - @Y - @Spe
   }

   Posiziona Staffetta_Antirib_AIR ant_sx
   {
      @escluso = 1
      if( VAR_Consolle_AIR == 1 ) { @escluso = 0 }

      @X = 15
      @Y = 28.5

      @base_0 = base_0
      @base_0.x = base_0.x + 257.5 - @X/2
      @base_0.y = base_0.y - @Y - @Spe
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      larg_pcv = 10
      if( UN_PADRE("Scrivania*") )         { larg_pcv = 50 }
      if( VAR_MaterialeStr == "WILDWOOD" ) { larg_pcv = 30 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 30
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - larg_pcv
      @X = X
      @Y = Y + 30
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv3
   {
      larg_pcv_lato = larg_pcv
      //if( UN_PADRE("Scrivania_AIR") ) { larg_pcv_lato = VAR_OffX_Vetro + 94 }
      if( VAR_MaterialeStr == "WILDWOOD"
        & VAR_LatoAggStr == "LATO-CORTO" ) { larg_pcv_lato = 100 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv_lato
      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv4
   {
      larg_pcv_lato = larg_pcv

      @base_0.x = base_0.x + X - larg_pcv_lato
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv_lato
      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }

   //Simone 12/04/2022
   Posiziona PCV_ContCollisioni_368 pcv5
   {
      larg_pcv_lato = larg_pcv

      @escluso = 1
      if( UN_PADRE("Scrivania_AIR") )
      {
         @escluso = 0
         larg_pcv_lato = 170
      }

      @base_0.x = base_0.x + VAR_OffX_Vetro + 9 - larg_pcv_lato/2
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv_lato
      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv6
   {
      @escluso = 1
      if( UN_PADRE("Scrivania_AIR") ) { @escluso = 0 }

      @base_0.x = base_0.x + X - VAR_OffX_Vetro - 9 - larg_pcv_lato/2
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv_lato
      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }
}

Elemento SostegnoScrivania_AIR
{
   Descrizione = "Sostegno Vetro"
   Code        = AIR
   Gruppo      = "S"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X      "Spessore"         12
      Y      "Altezza vetro"   710
      Z      "Profondità"      366

      VAR_SpePiano    "Spessore Piano" 80 Implicit

      VAR_MaterialeStr ""              "" Implicit

      VAR_Consolle_AIR ""              0  Implicit

      //il verso è necessario per capire la decentratura del vetro rispetto alla staffa (e quindi a tutto il sostegno vetro)
      Verso       "" "DX"

      HIDE        "" 3
   }

   Assegnazioni
   {
      GOSUB AssComune

      Alt_Pie     = 3
      RieY_Vetro  = 6

      Vetro_Y     = Y - Alt_Pie - RieY_Vetro
      Vetro_Z     = Z

      Staffa_X    = 70
      Staffa_Z    = 500
      if( Z > 600 ) { Staffa_Z = 600 }
      //Luca 11/05/2021
      if( Z < 500 ) { Staffa_Z = 400 }
      //Simone 11/03/2022
      if( Z < 460 ) { Staffa_Z = 300 }
      if( Z < 300 ) { Staffa_Z = 250 }

      Staffa_OffX = -32
      if( Verso == "SX" )  { Staffa_OffX = -26 }

      Staffa_OffZ  = (Z - Staffa_Z)/2
   }

   PuntiNotevoli
   {
      GOSUB punti

      //creo i punti della staffa per le stampe
      stp_staffa_b0 = [Staffa_OffX , 0 , Staffa_OffZ ]
      stp_staffa_b1 = [Staffa_OffX , 0 , Staffa_OffZ + Staffa_Z ]
      stp_staffa_b2 = [Staffa_OffX + Staffa_X ,0, Staffa_OffZ ]
      stp_staffa_b3 = [Staffa_OffX + Staffa_X ,0, Staffa_OffZ + Staffa_Z ]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //}

   Posiziona StaffaXSostegno_368 st
   //Posiziona Blocco st
   {
      @base_0.x = base_0.x + Staffa_OffX
      @base_0.y = alto_0.y - @Y + 1
      @base_0.z = base_0.z + Staffa_OffZ
      @Z = Staffa_Z
      @Verso = Verso

      @LargVet = VAR_Consolle_AIR * Vetro_Z

      idx_staffa = ATTUALE()
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      if( UN_PADRE("Scrivania_AIR") ) { @escluso = 1 }

      off_pcv = 10
      if( VAR_MaterialeStr == "WILDWOOD" ) { off_pcv = 55 }

      @base_0.x = base_0.x + Staffa_OffX - off_pcv
      @base_0.y = alto_0.y
      @base_0.z = base_0.z + Staffa_OffZ - off_pcv
      @X = Staffa_X + 2*off_pcv
      @Y = VAR_SpePiano + 10
      @Z = Staffa_Z + 2*off_pcv
   }

   Posiziona VetroXSostegno_368 vtr
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Alt_Pie
      @base_0.z = base_0.z
      @Y = Vetro_Y
      @Z = Z

      idx_vetro = ATTUALE()
   }

   Posiziona Blocco piesx
   {
      GOSUB posa_blocco
      @X = 12
      @Y = Alt_Pie
      @Z = 20
      @c_rivestimento = $c_nero
   }
   Posiziona Blocco piedx
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z + Z - 20
      @X = 12
      @Y = Alt_Pie
      @Z = 20
      @c_rivestimento = $c_nero
   }
}

Elemento InsertoVetroScrivania_AIR
{
   Descrizione = "Inserto vetro"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias        TopScrivanie
   Altimetro    Auto
   Attrezzabile Scrivania*AIR Tavolo_AIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"      900                  ShowAlways
      Y               "Altezza"        4                    ShowAlways
      Z               "Profondità"     600                  ShowAlways

      FillerM2G       " "              ""                   ShowAlways

      COD_EREDITA     ""               "PRE;POST"
      CMP2_AZIONI     ""               "A"

      VediLimiti_PCV  ""               0                    Implicit

      FIN_var         ""               "C028"
      XGLASS          "Num. XGLASS"    ""                   Utente ( )

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

      TIPO_COLLO      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Raggio = 8
      pcv_larg = 50
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
     #ifndef TEC
      if( $query_type == 8)
      {
         if( NOME($query_p1) == "Tavolo_AIR"
           | NOME($query_p1) == "ScrivaniaMuro_AIR" ) { $QueryResult__ = 0 }
      }
     #endif
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add[1] = VAR_VAL(idx_ref,"Y")
      COMPONENTI2("wk_bar",idx_ref,"InsertoVetroScrivania_AIR")
      if( wk_bar > 0 )  { annulla_ins = 1 }

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

   Attrezza
   {
      base_0.x = $vano_0.x + ( $larghezza - X)/2
      base_0.y = $vano_0.y + @Y - Y
      base_0.z = $vano_0.z + ( $profondita - Z)/2

      if( UN_PADRE("ScrivaniaMuro_AIR") == 1
        & VAR_VAL_STR(@idx_att,"VAR_LatoAggStr") == "LATO-CORTO")
      {
         base_0.x = $vano_0.x + ( $larghezza - Z)/2 + Z
         base_0.z = $vano_0.z + ( $profondita - X)/2

         ang_y = -90
      }

      if( UN_PADRE("Tavolo_AIR") == 1)
      {
         base_0.y = $vano_0.y + @Y - Y - 3
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C009_InsertoVetroScrivania_AIR

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      GOSUB Set_Gest_C009_InsertoVetroScrivania_AIR
   }

   Procedura PostGestDllValida
   {
      if( $OnRigenera | $OnLoadOrder | ACTION()<=0 ) { EXITSUB() }
      COMANDO( STRCAT( "RICALCOLA_UNA ", STR(ATTUALE()), " //PostGestDllValida ", NOME(ATTUALE())))
   }

   Posiziona BloccoSmussatoY bl
   {
      GOSUB posa_blocco

      @base_0.y = base_0.y + 0.2

      @R0 = Raggio
      @R1 = Raggio
      @R2 = Raggio
      @R3 = Raggio

      GOSUB rivestimento
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      @X = X
      @Y = Y + 30
      @Z = pcv_larg

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z
   }

   Posiziona PCV_ContCollisioni_368 pcv2
   {
      @X = X
      @Y = Y + 30
      @Z = pcv_larg

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - pcv_larg
   }

   Posiziona PCV_ContCollisioni_368 pcv3
   {
      @X = pcv_larg
      @Y = Y + 30
      @Z = Z - 2*pcv_larg

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + pcv_larg
   }

   Posiziona PCV_ContCollisioni_368 pcv4
   {
      @X = pcv_larg
      @Y = Y + 30
      @Z = Z - 2*pcv_larg

      @base_0.x = base_0.x + X - pcv_larg
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + pcv_larg
   }
}

Elemento TopVetroScrivania_AIR
{
   Descrizione = "Inserto vetro"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias        TopVet368;TopScrivanie
   Altimetro    Auto
   //Simone 29/12/2021 - Aggiungo mensola AIR per gestire richieste back-office
   Attrezzabile Scrivania* MensolaLib_AIR Mensola_Air

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       920 Menu ( LarTopVScriv_AIR ) Utente ( 920-1840 )
      Y       "Altezza"           4 ShowAlways
      Z       "Profondità"      560 Menu ( PrfTopVScriv_AIR ) Utente ( 560-850 )

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "A"

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

      FIN_var         ""  "C028"

      FillerM2G       " " "" ShowAlways

      idx_piano       ""  -1
      TIPO_COLLO      ""  ""

      VediLimiti_PCV  ""   0
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti

      //LZ 30/07/2021: riutilizzo la stampa dei top 368
      Sbrd_SX = 0
      Sbrd_DX = 0
      Sbrd_FR = 0
      Sbrd_RT = 0
      GOSUB Punti_Top_368
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add[1] = VAR_VAL(idx_ref,"Y")
      COMPONENTI2("wk_bar",idx_ref,"InsertoVetroScrivania_AIR")
      if( wk_bar > 0 )  { annulla_ins = 1 }

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

   Attrezza
   {
      idx_ref = @idx_att

      wk_idx_ass_att = -1
      COMPONENTI2( "wk_idx_ass", idx_ref, "AssiemeScrivaniaMuro_AIR")
      if( wk_idx_ass > 0 ) { wk_idx_ass_att = wk_idx_ass[1] }

      wk_rie = 0
      //LZ 08/07/2021
      //if( IS_IDX(wk_idx_ass_att) )
      //{
      //   if( VAR_VAL_STR( idx_ref, "VAR_TipoGambaStr") == "LEGNO" )
      //   {
      //      wk_rie = VAR_VAL( wk_idx_ass_att, "RiePan")
      //   }
      //}

      base_0 = $vano_0

      if( IS_VAR_FIXED(ATTUALE(),"X") == 0 )  { X = @X - wk_rie }
      if( IS_VAR_FIXED(ATTUALE(),"Z") == 0 )  { Z = @Z }

      base_0.x = $vano_0.x + $larghezza/2 - X/2
      base_0.y = $vano_0.y + @Y
      base_0.z = $vano_0.z + $profondita/2 - Z/2

      if( NOME(idx_ref) == "ScrivaniaMuro_AIR" )
      {
         base_0.x = $vano_0.x
         base_0.z = $vano_0.z

         if( VAR_VAL( idx_ref, "Verso") < 0 )
         {
            base_0.x = $vano_0.x + wk_rie
         }

         if( VAR_VAL_STR( idx_ref, "VAR_LatoAggStr") == "LATO-CORTO" )
         {
            base_0.x = $vano_0.x + @Z
            ang_y = VAR_VAL( wk_idx_ass_att, "ang_y")
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      RADICE       = "TVTRSP4FS"
      GEST_CODICE  = ""

      //LZ 08/07/2021
      //GEST_X = X
      //GEST_Y = Z
      //GEST_Z = Y

      //Simone 01/07/2022 - Per sag. passacavi sul top
      GOSUB Set_Gest_C009_Scrivania_AIR

      //LZ 30/07/2021
      if( IS_VAR_FIXED( ATTUALE(), "GEST_C009")) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C009") }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      larg_pcv = 50

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 4
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 8
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 4
      @base_0.z = base_0.z + Z - larg_pcv
      @X = X
      @Y = Y + 8
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv3
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 4
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv
      @Y = Y + 8
      @Z = Z - 2*larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv4
   {
      @base_0.x = base_0.x + X - larg_pcv
      @base_0.y = base_0.y - 4
      @base_0.z = base_0.z + larg_pcv
      @X = larg_pcv
      @Y = Y + 8
      @Z = Z - 2*larg_pcv
   }
}

Elemento CassettoScrivania_AIR
{
   Descrizione = "Cassetto"
   Code        = AIR
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"       460
      Y                 "Altezza"         80
      Z                 "Profondità"      372

      OffX              ""                281

      idx_grafica_piano ""               -1

      COD_EREDITA       ""                "PRE;POST"
      CMP2_AZIONI       ""                "A"

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

      FIN_var           ""                "C028"

      M4_NO_OFFS        ""                1

      FillerM2G         " "               "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Stato_78
      GOSUB Stato_7
      HIDE = 3

      Spe_Fro   = 18
      RieX_StrC = 2.5
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GEST_CODICE  = "CF1001"
   //
   //   GOSUB GestComune_Post
   //}

   Procedura azione
   {
      azione_val_max = (3*Z)/4
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @Y = Y + 10
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona FrontaleCassettoScrivania_AIR fro
   {
      GOSUB posa_blocco
      @Z = Spe_Fro
      @base_0.z = base_0.z + Z - Spe_Fro
   }

   Posiziona StrCassettoScrivania_AIR str
   {
      @X = X - 2*RieX_StrC
      @Y = 44
      @Z = Z - Spe_Fro

      @base_0.x = base_0.x + RieX_StrC
      @base_0.y = base_0.y + 18
      @base_0.z = base_0.z

      @FIN_var = "C028"
   }

   //Posiziona Blocco_Scassa bl
   Posiziona _graf_scasso_cassetto_desk_AIR aa
   {
      @base_0 = base_0
      @X = X
      @base_0.z = base_0.z + Z - @Z
      @Scassa_Chi_Plus = STR(idx_grafica_piano)
      @azione_locked = 1
   }

   Posiziona Blocco_Scassa bl
   {
      @X = X - 2*RieX_StrC
      @Y = 44
      @Z = Z - Spe_Fro

      @base_0.x = base_0.x + RieX_StrC
      @base_0.y = base_0.y + 18
      @base_0.z = base_0.z

      @Scassa_Chi_Plus = STR(idx_grafica_piano)
   }
}

Elemento _graf_scasso_cassetto_desk_AIR
{
   Descrizione = "Blocco Y smussato"
   Code        = CUBO
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 1
      Y "" 80
      Z "" 373
      //Z "" 19

      HIDE "" 1

      Acis "" 1

      R0    "Raggio0"      0
      R1    "Raggio1"      2
      R2    "Raggio2"      2
      R3    "Raggio3"      0

      Scassa_Chi_Plus "" ""
   }

   PuntiNotevoli
   {
      //rid_a = 0.001
      //
      //base_0 = [0, 18, 0]
      //base_1 = [0, 18, Z-19]
      //base_2 = [0, rid_a, Z-1]
      //base_3 = [0, rid_a, Z]
      //base_4 = [0, Y-rid_a, Z]
      //base_5 = [0, Y-rid_a, Z-1]
      //base_6 = [0, Y-18, Z-19]
      //base_7 = [0, Y-18, 0]

      //alto_0 = base_0
      //alto_0.x = X

      //Simone 05/12/2022
      a = 18
      Z = 18

      GOSUB FORME_Crea_Smussi

      base_0 = [0,a, 0]     alto_0=base_0   alto_0.x=X
      base_1 = [0,a-Ar0,Ar0]
      base_2 = [0,0, Z-Ar1]
      base_3 = [0,Ar1, Z]
      base_4 = [0, Y-Ar2, Z]
      base_5 = [0, Y, Z-Ar2]
      base_6 = [0, Y-a+Ar3,Ar3]
      base_7 = [0, Y-a, 0]

      arc_0=[0,base_0.y-Sm0,base_1.z-Sm0]
      arc_2=[0,base_3.y-Sm1,base_2.z+Sm1]
      arc_4=[0,base_4.y+Sm2,base_5.z+Sm2]
      arc_6=[0,base_7.y+Sm3,base_6.z-Sm3]

      GOSUB FORME_Ctrl_Smussi

      base_so = [0, 0, 0]
      alto_ne = [X, Y, Z]
   }

   Assegnazioni
   {
      SHOW_MODE(ATTUALE(),0)
      SET_GEST_STATO(ATTUALE(),7,1)
   }

   Procedura M4_Scassi
   {
      GOSUB ScassaChiPlus_M4
   }
}


Elemento FrontaleCassettoScrivania_AIR
{
   Descrizione = "Struttura interna Cassetto/Cestello"
   Code        = ARM20
   Gruppo      = "ARM20"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "(Larghezza)"   600
      Y                "(Altezza)"     100
      Z                "(Profondità)"  18

      VAR_PosCassetto  ""              0    Implicit
      OffX             ""              281  Implicit
      Spe_Fro          ""              18   Implicit

      X_doga_sx        ""              0
      X_doga_dx        ""              0

      COD_EREDITA      ""              "PRE"

      M4_NO_OFFS       ""              1

      HIDE             ""              1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Simone 06/12/2022
      idx_topl = GetTopLevel(ATTUALE())
      TEXTURE_OFFZ = 0

      FIN_orie     = "O"
      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C044;C028;C099")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      //GEST_CODICE = "CF1002"

      X_piano   = VAR_VAL(idx_topl,"X")
      X_doga_sx = OffX
      X_doga_dx = X_piano - X_doga_sx - X
   }

   //Procedura OnTabEredita
   //{
   //   if( TABER_REGOLA=="PRE" )
   //   {
   //      BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C001" )
   //      BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C033" )
   //      BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C017" )
   //   }
   //}

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona __import__ sat1
   ////Posiziona Blocco fr
   //{
   //   GOSUB posa_blocco
   //   @import = STRCAT($path_sat,"AIR\Desk\FroCassetto.sat")
   //   GOSUB rivestimento
   //}

   Posiziona Blocco dogasx
   {
      GOSUB posa_blocco

      @X = X_doga_sx - 2
      @Y = Y - 4
      @Z = 1
      @base_0.x = base_0.x - @X
      @base_0.y = base_0.y + 2
      @base_0.z = base_0.z + Spe_Fro - 0.9

      @azione_locked = 1

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      GOSUB rivestimento
   }

   Posiziona _graf_Frontalino_WW cas
   {
      GOSUB posa_blocco

      @TEXTURE_OFFZ = TEXTURE_OFFZ + X_doga_sx

      GOSUB rivestimento
   }

   Posiziona Blocco dogadx
   {
      GOSUB posa_blocco

      //utilizzo 2 perchè è attualmente il blend del tavolo
      @X = X_doga_dx - 2
      @Y = Y - 4
      @Z = 1
      @base_0.x = base_0.x + X
      @base_0.y = base_0.y + 2
      @base_0.z = base_0.z + Spe_Fro - 0.9

      @azione_locked = 1

      @TEXTURE_OFFZ = TEXTURE_OFFZ + X_doga_sx + X

      GOSUB rivestimento
   }
}

Elemento _graf_Frontalino_WW
{
   Descrizione = "Blocco X smussato"
   Code        = CUBO
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X     "Larghezza"    30
      Y     "Altezza"     400
      Z     "Profondità"  400

      R0    "Raggio0"      0
      R1    "Raggio1"      2
      R2    "Raggio2"      2
      R3    "Raggio3"      0

      a     ""            18

      HIDE "" 1
   }

   PuntiNotevoli
   {
      GOSUB FORME_Crea_Smussi

      base_0=[0,a,0]     alto_0=base_0   alto_0.x=X
      base_1=[0,a-Ar0,Ar0]
      base_2=[0,0,Z-Ar1]
      base_3=[0,Ar1,Z]
      base_4=[0,Y-Ar2,Z]
      base_5=[0,Y,Z-Ar2]
      base_6=[0,Y-a+Ar3,Ar3]
      base_7=[0,Y-a,0]

      arc_0=[0,base_0.y-Sm0,base_1.z-Sm0]
      arc_2=[0,base_3.y-Sm1,base_2.z+Sm1]
      arc_4=[0,base_4.y+Sm2,base_5.z+Sm2]
      arc_6=[0,base_7.y+Sm3,base_6.z-Sm3]

      GOSUB FORME_Ctrl_Smussi

      base_so = [0, 0, 0]
      alto_ne = [X, Y, Z]
   }
}

Elemento StrCassettoScrivania_AIR
{
   Descrizione = "Struttura interna Cassetto cestone"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"                600
      Y                 "Altezza"                  100
      Z                 "Profondita'"              490

      DYFronte          "Altezza Schienale"          0
      DYSchiena         "Altezza Schienale"          0
      SpSponda          "Spessore sponde"            8
      DYSponda          "Altezza Schienale"          0

      GEST_CODICE "" "CF1003"

      FIN_var "" "C034"

      M4_NO_OFFS "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso

      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 24/05/2021
      idx_piano = VAR_VAL(GetTopLevel(ATTUALE()),"idx_piano")
      GEST_IDXPADRE = idx_piano

      GEST_Y = 59

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   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
      GOSUB rivestimento
   }

   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
   {
      @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
   }

   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC1
   {
      @base_0.x = base_0.x - 5
      @base_0.y = base_0.y - 17.5
      @base_0.z = base_0.z + Z + 20 - @Z
      @X = 43
      @Y = 55
      @Z = 260

      if( Z > 350 ) { @Z = 345 }
   }

   Posiziona G368_ContCollisioni G368CC2
   {
      @base_0.x = base_0.x + X - @X + 5
      @base_0.y = base_0.y - 17.5
      @base_0.z = base_0.z + Z + 20 - @Z
      @X = 43
      @Y = 55
      @Z = 260

      if( Z > 350 ) { @Z = 345 }
   }
   #endif

   Posiziona PCV_ContCollisioni_368 pcv
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 30
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 60
      @Z = Z
   }
}

Elemento ScrivaniaMuro_AIR
{
   Descrizione = "SCRIVANIE AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpScrivaniaAIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                "Larghezza"      1104  Menu ( LarScrivM_AIR )
      Y                "Altezza"         740  Menu ( AltScrivM_AIR )
      Z                "Profondità"      560  Menu ( PrfScrivM_AIR )

      VAR_TipoGamba    "Tipo Gamba"        1  Menu ( TipoGScriv_AIR )
      VAR_TipoGambaStr ""                 ""

      VAR_LatoAgg      "Lato aggancio"     0  Menu ( LatoAScriv_AIR )
      VAR_LatoAggStr   ""                 ""

      //1 - LACCATO
      //2 - WILDWOOD
      VAR_Materiale    "Materiale"         1  Menu ( MatScriv_AIR )
      VAR_MaterialeStr ""                 ""

      VAR_SpePiano     "Spessore Piano"   80  //Menu ( SpePScriv_AIR )

      VAR_OffX_Vetro   "Rientro vetro"   184  Utente ( 50-184 )

      Verso            "" -1

      //staffe per scrivania ww aggancio lato lungo
      Staffa_OX        "" 0 Utente ( )
      Staffa_X         "" 0 Utente ( )
      Staffa_Z         "" 0 Utente ( )

      //LZ 30/07/2021
      ConTopVetro      ""  0
      idx_top          "" -1

      ConInserto       ""  0
      idx_inserto      "" -1

      COD_EREDITA    "" "PRE;POST"

      VAR_FixTerra   ""  1

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      idx_grafica_piano            "" -1
      idx_grafica_piano_sotto      "" -1
      idx_grafica_piano_sotto_web  "" -1

      CMP2_AZIONI      ""      "S"

      M4_A_MURO          ""  1
      M4_CNT_LINK_MODE__ ""  0

      //Luca 11/05/2021
      VediLimiti_PCV     ""  0

      M4_MIS "" "FillerM2G;X;Y;Z;VAR_Materiale;VAR_SpePiano;VAR_LatoAgg;VAR_TipoGamba"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssScrivanieMuro_AIR

      AltPie = 3
      RiePan = 5

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         ALIAS_ADD(ATTUALE(),"StpScrivaniaAIR")
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      if( VAR_LatoAggStr == "LATO-CORTO" )
      {
         base_0 = [0, 0, 0]    alto_0 = [0, Y, 0]
         base_1 = [0, 0, X]    alto_1 = [0, Y, X]
         base_2 = [Z, 0, X]    alto_2 = [Z, Y, X]
         base_3 = [Z, 0, 0]    alto_3 = [Z, Y, 0]

         vano_l_0 = Z
         vano_p_0 = X
      }
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if($query_type==5)
      {
         COMANDO2("LIVELLI CLEAR OnWall")
         COMANDO2("LIVELLI ADD OnWall 0 0")
         $QueryResult__ = 1
      }

      if( $query_type == 2 )
      {
         $QueryResult__ = 0

         if( VAR_MaterialeStr == "LACCATO" )
         {
            COMPONENTI2("wk_ins",ATTUALE(),"InsertoVetroScrivania_AIR")
            COMPONENTI2("wk_top",ATTUALE(),"TopVetroScrivania_AIR")
            if( wk_ins == 0
              & wk_top == 0 ) { $QueryResult__ = 1 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPosizione_ModuliTerra_368

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder!=1  )
      {
         ConInserto  = 0
         idx_inserto = -1
         COMPONENTI2("wk_ins",ATTUALE(),"InsertoVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConInserto  = 1
            idx_inserto = wk_ins[1]
         }

         ConTopVetro = 0
         idx_top = -1
         COMPONENTI2("wk_ins",ATTUALE(),"TopVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConTopVetro = 1
            idx_top = wk_ins[1]
         }
      }

      GOSUB Set_Staffe_Scriv_WW_LL
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C008_Scrivania_AIR
      GOSUB Set_Gest_C009_Scrivania_AIR

      GOSUB GestComune_Post
   }

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

      if( TABER_REGOLA == "POST" )
      {
         if( VAR_TipoGambaStr == "LEGNO" )
         {
            if( VAR_VAL_STR(ATTUALE(),"GEST_C101") == "DX001" ) { Verso =  1 }
            if( VAR_VAL_STR(ATTUALE(),"GEST_C101") == "SX001" ) { Verso = -1 }
         }
         if( VAR_TipoGambaStr == "VETRO" )
         {
            if( VAR_VAL_STR(ATTUALE(),"GEST_C058") == "DX001" ) { Verso =  1 }
            if( VAR_VAL_STR(ATTUALE(),"GEST_C058") == "SX001" ) { Verso = -1 }
         }
      }
   }

   Procedura Offset
   {
      wk_a_terra  = 0
      wk_a_parete = 0

      hdp = H_DA_PAVIMENTO(ATTUALE(), "")
      //tps = TIPO_POS(ATTUALE())
      dff =  QUERY_WALL(ATTUALE(), "distance from face R")

      if( hdp < 0.1 )  { wk_a_terra = 1 }
      if( dff == 0 )   { wk_a_parete = 1 }
      //if( tps == 1 & dff==0 )  { wk_a_parete = 1 }

      if( wk_a_parete == 1 & wk_a_terra == 1 ) { EXITSUB() }

      GOSUB CtrlPosizione_ModuliTerra_368

      //verifico se trovo un muro dietro
      wk_dist = QUERY_WALL(ATTUALE(), "distance from face R")
      if( wk_dist <= 0 )  { EXITSUB() }

      wk_dist = DISTANZA($Query_Wall1,$Query_Wall2)
      ang_ref = ANG_TOT_NOR(ATTUALE())

      offx =   SENO(ang_ref)*(-1*wk_dist)
      offy = 0
      offz = COSENO(ang_ref)*(-1*wk_dist)

      COMANDO(STRCAT("EDITPOS_REL ",STR(ATTUALE()) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // Offset ScrivaniaMuro_AIR"))

      COMANDO(STRCAT("INTERIORS link try ",STR(ATTUALE())))
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
   }

   Posiziona AssiemeScrivaniaMuro_AIR ass
   {
      GOSUB posa_blocco

      @ang_y = 0
      if( VAR_LatoAggStr == "LATO-CORTO" )
      {
         @base_0.x = base_0.x + Z
         @ang_y = -90
      }

      idx_assieme = ATTUALE()

      //Simone 02/12/2022
      idx_grafica_piano_sotto = @idx_grafica_piano_sotto
      idx_grafica_piano_sotto_web = @idx_grafica_piano_sotto_web
   }

   //Posiziona PianoScrivania_AIR piano
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "VETRO" ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //   @Y = VAR_SpePiano
   //   @base_0.y = base_0.y + Y - VAR_SpePiano
   //
   //   @ang_y = 0
   //   if( VAR_LatoAggStr == "LATO-CORTO" )
   //   {
   //      @base_0.x = base_0.x + Z
   //      @ang_y = -90
   //   }
   //
   //   idx_grafica_piano = @idx_grafica_piano
   //   idx_piano = ATTUALE()
   //}
   //
   //Posiziona SostegnoScrivania_AIR vtrsx
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "VETRO" ) { @escluso = 0 }
   //
   //   @base_0.x = base_0.x + VAR_OffX_Vetro
   //   @base_0.y = base_0.y
   //   @base_0.z = base_0.z + Z/2 - Sostegno_Z/2
   //
   //   @Verso = "SX"
   //   if( Verso > 0 )
   //   {
   //      @base_0.x = base_0.x + X - VAR_OffX_Vetro - @X
   //      @Verso = "DX"
   //   }
   //
   //   @Y = Sostegno_Y
   //   @Z = Sostegno_Z
   //
   //   @ang_y = 0
   //   if( VAR_LatoAggStr == "LATO-CORTO" )
   //   {
   //      @ang_y = -90
   //      @Verso = "DX"
   //      @base_0.x = base_0.x + Z/2 + Sostegno_Z/2
   //      @base_0.z = base_0.z + X - VAR_OffX_Vetro - @X
   //   }
   //
   //
   //   idx_gamba_sx = ATTUALE()
   //}
   //
   //Posiziona Piano45_Scrivania_AIR piano45
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "LEGNO" ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //   @Y = VAR_SpePiano
   //
   //   @X = X - RiePan
   //   if( Verso < 0 ) { @base_0.x = base_0.x + RiePan }
   //
   //   @base_0.y = base_0.y + Y - VAR_SpePiano
   //
   //   @Verso = Verso
   //   @ang_y = 0
   //   if( VAR_LatoAggStr == "LATO-CORTO" )
   //   {
   //      @base_0.x = base_0.x + Z
   //      @ang_y = -90
   //      @Verso = 1
   //   }
   //}
   //
   //Posiziona TriadeRipiano_30MM tri1
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "LEGNO"
   //     & VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }
   //
   //   posx = 250
   //   @base_0.x = base_0.x + posx - @X/2
   //   @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
   //   @base_0.z = base_0.z
   //   @Z = 165
   //}
   //
   //Posiziona TriadeRipiano_30MM tri2
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "LEGNO"
   //     & VAR_LatoAggStr == "LATO-LUNGO"
   //     & X >= 1104 ) { @escluso = 0 }
   //
   //   @base_0.x = base_0.x + X/2 - @X/2
   //   @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
   //   @base_0.z = base_0.z
   //   @Z = 165
   //}
   //
   //Posiziona TriadeRipiano_30MM tri3
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "LEGNO"
   //     & VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }
   //
   //   posx = 250
   //   @base_0.x = base_0.x + X - posx - @X/2
   //   @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
   //   @base_0.z = base_0.z
   //   @Z = 165
   //}
   //
   //Posiziona Fianco45_Scrivania_AIR fia
   //{
   //   @escluso = 1
   //   if( VAR_TipoGambaStr == "LEGNO" ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //
   //
   //   @base_0.y = base_0.y + AltPie
   //
   //   @X = VAR_SpeFianco
   //   @Y = Y - RiePan - AltPie
   //
   //   if( Verso > 0  ) { @base_0.x = base_0.x + X - @X }
   //
   //   @Verso = Verso
   //   @ang_y = 0
   //   if( VAR_LatoAggStr == "LATO-CORTO" )
   //   {
   //      @ang_y = -90
   //      @Verso = 1
   //      @base_0.x = base_0.x + Z
   //      @base_0.z = base_0.z + X - @X
   //   }
   //
   //   idx_gamba_sx = ATTUALE()
   //}
   //
   //Posiziona Barra_Scrivania_AIR br1
   //{
   //   @escluso = 1
   //   if( VAR_LatoAggStr == "LATO-CORTO"  )  { @escluso = 0 }
   //
   //   @X = X - VAR_SpeFianco
   //
   //   offz = 116
   //
   //   @base_0.x = base_0.x + offz + @Z/2
   //   @base_0.y = base_0.y + Y - VAR_SpePiano - @Y
   //   @base_0.z = base_0.z
   //
   //   if( VAR_TipoGambaStr == "VETRO" )
   //   {
   //      //centro barra
   //      offz = 100
   //      if( Z >= 560 )  { offz = 120 }
   //      if( Z >= 700 )  { offz = 140 }
   //      if( Z >= 800 )  { offz = 165 }
   //
   //
   //      @base_0.x = base_0.x + offz + @Z/2
   //      @X = X - VAR_OffX_Vetro - 45
   //   }
   //
   //   @ang_y = -90
   //}
   //
   //Posiziona Barra_Scrivania_AIR br2
   //{
   //   @escluso = 1
   //   if( VAR_LatoAggStr == "LATO-CORTO"  )  { @escluso = 0 }
   //
   //   @X = X - VAR_SpeFianco
   //
   //   @base_0.x = base_0.x + Z - offz + @Z/2
   //   @base_0.y = base_0.y + Y - VAR_SpePiano - @Y
   //   @base_0.z = base_0.z
   //
   //   if( VAR_TipoGambaStr == "VETRO" )
   //   {
   //      @base_0.x = base_0.x + Z - offz + @Z/2
   //
   //      @X = X - VAR_OffX_Vetro - 45
   //   }
   //
   //
   //   @ang_y = -90
   //}

   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 AssiemeScrivaniaMuro_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X   ""  552
      Y   ""   60
      Z   ""  270

      VAR_TipoGamba    "Tipo Gamba"      1 Implicit
      VAR_TipoGambaStr ""               "" Implicit

      VAR_LatoAgg      "Lato aggancio"   0 Implicit
      VAR_LatoAggStr    ""              "" Implicit

      VAR_SpePiano     "Spessore Piano" 80 Implicit
      VAR_OffX_Vetro   "Rientro vetro" 184 Implicit

      VAR_Materiale    ""                0 Implicit
      VAR_MaterialeStr ""               "" Implicit

      Verso            ""              -1  Implicit

      ConTopVetro      ""               0  Implicit
      idx_top          ""              -1  Implicit

      ConInserto       ""               0  Implicit
      idx_inserto      ""              -1  Implicit

      Staffa_OX        ""               0  Implicit
      Staffa_X         ""               0  Implicit
      Staffa_Z         ""               0  Implicit

      idx_piano        ""              -1
      idx_gamba_sx     ""              -1
      idx_gamba_dx     ""              -1
      idx_staffa_mens  ""              -1

      idx_grafica_piano_sotto       "" -1
      idx_grafica_piano_sotto_web   "" -1

      HIDE "" 3
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7

      AltPie = 3
      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      //RiePan = 5
      RiePan = 3
      VAR_SpePiano = 30

      if( Y >= 760 )
      {
         RiePan = 5
         VAR_SpePiano = 50
      }

      //Simone 06/04/2022
      if( VAR_TipoGambaStr == "VETRO" ) { RiePan = 0 }
      //Per posizionamento triadi
      X_piano = X - RiePan

      VAR_SpeFianco = VAR_SpePiano

      Sostegno_Y = Y - VAR_SpePiano
      Sostegno_Z = Z - 50 - 50

      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         VAR_SpePiano = 80
         Sostegno_Y = Y - VAR_SpePiano + 30
      }

      Triade_Z = 200

      //Simone 06/04/2022 - Posizione triadi
      posx = 250
      if( VAR_TipoGambaStr == "VETRO" ) { posx = 92 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 13/10/2021 porto sopra le variabili con gli idx utilizzate in stampa
      if( ACTION() > 0 )
      {
         VAR_VALUE_SET(PADRE(ATTUALE(),1),"idx_piano",idx_piano)
         VAR_VALUE_SET(PADRE(ATTUALE(),1),"idx_gamba_sx",idx_gamba_sx)
         VAR_VALUE_SET(PADRE(ATTUALE(),1),"idx_gamba_dx",idx_gamba_dx)
         VAR_VALUE_SET(PADRE(ATTUALE(),1),"idx_staffa_mens",idx_staffa_mens)
      }
   }

   Posiziona PianoScrivania_AIR piano
   {
      @escluso = 1
      if( VAR_TipoGambaStr == "VETRO" )
      {
         @escluso = 0
         idx_piano = ATTUALE()
      }

      GOSUB posa_blocco
      @X = X_piano
      @Y = VAR_SpePiano
      @base_0.y = base_0.y + Y - VAR_SpePiano

      //@ang_y = 0
      //if( VAR_LatoAggStr == "LATO-CORTO" )
      //{
      //
      //   //@base_0.x = base_0.x + Z
      //   //@ang_y = -90
      //}

      idx_grafica_piano_sotto = @idx_grafica_piano_sotto
      idx_grafica_piano_sotto_web = @idx_grafica_piano_sotto_web
   }

   Posiziona SostegnoScrivania_AIR vtrsx
   {
      @escluso = 1
      if( VAR_TipoGambaStr == "VETRO" )
      {
         @escluso = 0

         idx_gamba_sx = ATTUALE()
         idx_gamba_dx = -1

         if( Verso > 0 )
         {
            idx_gamba_sx = -1
            idx_gamba_dx = ATTUALE()
         }
      }

      @base_0.x = base_0.x + VAR_OffX_Vetro
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - Sostegno_Z/2

      @Verso = "SX"
      if( Verso > 0 )
      {
         @Verso = "DX"
         @base_0.x = base_0.x + X - VAR_OffX_Vetro - @X
      }

      @Y = Sostegno_Y
      @Z = Sostegno_Z

      //@ang_y = 0
      if( VAR_LatoAggStr == "LATO-CORTO" )
      {
         //@ang_y = -90
         @Verso = "DX"
         @base_0.x = base_0.x + X - VAR_OffX_Vetro - @X

         //@base_0.x = base_0.x + Z/2 + Sostegno_Z/2
         //@base_0.z = base_0.z + X - VAR_OffX_Vetro - @X
      }
   }

   Posiziona Piano45_Scrivania_AIR piano45
   {
      @escluso = 1
      if( VAR_TipoGambaStr == "LEGNO" )
      {
         @escluso = 0
         idx_piano = ATTUALE()
      }

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      @RiePan = RiePan

      GOSUB posa_blocco
      @Y = VAR_SpePiano

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

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

      @Verso = Verso
      //@ang_y = 0
      if( VAR_LatoAggStr == "LATO-CORTO" )
      {
         @base_0.x = base_0.x
         //@base_0.x = base_0.x + Z
         //@ang_y = -90
         @Verso = 1
      }

      //Luca 10/02/2022 porto su per le stampe
      //VAR_VALUE_SET(PADRE(idx_att,1),"idx_piano",idx_piano)
   }

   Posiziona TriadeRipiano_30MM tri1
   {
      @escluso = 1
      //if( VAR_TipoGambaStr == "LEGNO"
      //  & VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }

      if( VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }

      //Simone 06/04/2022 - Correggo poisizonamento triadi
      //posx = 250

      //da verificare
      //if( VAR_TipoGambaStr == "VETRO" ) { posx = 100 }

      //if( Verso < 0 ) { posx = posx + RiePan }

      @base_0.x = base_0.x + posx - @X/2
      if( Verso < 0 ) { @base_0.x = base_0.x + posx + RiePan - @X/2 }
      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Triade_Z

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }
   }

   Posiziona TriadeRipiano_30MM tri2
   {
      @escluso = 1

      //if( VAR_TipoGambaStr == "LEGNO"
      //  & VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }
      if( VAR_LatoAggStr == "LATO-LUNGO" ) { @escluso = 0 }

      //Simone 06/04/2022 - Correggo poisizonamento triadi
      //posx = 250
      //if( VAR_TipoGambaStr == "VETRO" ) { posx = 100 }

      //posx = 250

      //da verificare
      //if( VAR_TipoGambaStr == "VETRO" ) { posx = 100 }

      //if( Verso > 0 ) { posx = posx + RiePan }

      @base_0.x = base_0.x + X - posx - @X/2
      if( Verso > 0 ) { @base_0.x = base_0.x + X - posx - RiePan - @X/2 }
      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Triade_Z

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }
   }

   Posiziona TriadeRipiano_30MM tri3
   {
      @escluso = 1

      if( VAR_LatoAggStr == "LATO-LUNGO" )
      {
         if( VAR_TipoGambaStr == "LEGNO" & X >= 1104 ) { @escluso = 0 }
         if( VAR_TipoGambaStr == "VETRO" )             { @escluso = 0 }
      }

      //if( VAR_TipoGambaStr == "LEGNO"
      //  & VAR_LatoAggStr == "LATO-LUNGO"
      //  & X >= 1104 ) { @escluso = 0 }

      //Simone 06/04/2022 - Correggo posizionamento triadi
      //@base_0.x = base_0.x + (X-RiePan)/2 - @X/2
      @base_0.x = base_0.x + X_piano/2 - @X/2
      if( Verso < 0 ) { @base_0.x = @base_0.x + RiePan }

      if( VAR_TipoGambaStr == "VETRO" )
      {
         if( X >= 1104 )
         {
            //@base_0.x = base_0.x + (X - 2*posx - RiePan)/3 + posx - @X/2
            @base_0.x = base_0.x + (X_piano - 2*posx)/3 + posx - @X/2
            //if( Verso < 0 ) { @base_0.x = @base_0.x + RiePan }
         }
         //Simone 07/04/2022
         if( X > 1500 )
         {
            @base_0.x = base_0.x + (X_piano - 2*posx)/4 + posx - @X/2
         }
      }

      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Triade_Z

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }
   }

   Posiziona TriadeRipiano_30MM tri4
   {
      @escluso = 1

      if( VAR_LatoAggStr == "LATO-LUNGO" )
      {
         if( VAR_TipoGambaStr == "VETRO" & X >=1104 ) { @escluso = 0 }
      }

      //if( VAR_TipoGambaStr == "LEGNO"
      //  & VAR_LatoAggStr == "LATO-LUNGO"
      //  & X >= 1104 ) { @escluso = 0 }

      //Simone 06/04/2022 - Correggo poisizonamento triadi
      //@base_0.x = base_0.x + X - (X - 2*posx- RiePan)/3 - posx - @X/2
      @base_0.x = base_0.x + X - (X_piano - 2*posx)/3 - posx - @X/2
      //if( Verso < 0 ) { @base_0.x = @base_0.x + RiePan }

      //Simone 07/04/2022
      if( X > 1500 )
      {
         @base_0.x = base_0.x + (X_piano - 2*posx)/2 + posx - @X/2
      }

      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Triade_Z

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }
   }

   //Simone 07/04/2022 - Per gestione speciali
   Posiziona TriadeRipiano_30MM tri5
   {
      @escluso = 1

      if( VAR_LatoAggStr == "LATO-LUNGO" )
      {
         if( VAR_TipoGambaStr == "VETRO" )
         {
            if( X > 1500 & X <= 2208 )   { @escluso = 0 }
         }
      }

      @base_0.x = base_0.x + X - (X_piano - 2*posx)/4 - posx - @X/2
      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      @Z = Triade_Z

      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }
   }

   Posiziona Fianco45_Scrivania_AIR fia
   {
      @escluso = 1
      if( VAR_TipoGambaStr == "LEGNO" )
      {
         @escluso = 0

         if( VAR_MaterialeStr != "WILDWOOD" )
         {
            idx_gamba_sx = ATTUALE()
         }
      }

      GOSUB posa_blocco

      @base_0.y = base_0.y + AltPie

      @X = VAR_SpeFianco
      @Y = Y - RiePan - AltPie

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

      @Verso = Verso

      //@ang_y = 0
      if( VAR_LatoAggStr == "LATO-CORTO" )
      {
         //@ang_y = -90
         @Verso = 1
         @base_0.x = base_0.x + X - @X
         //@base_0.z = base_0.z + X - @X
      }
   }

   Posiziona Barra_Scrivania_AIR br1
   {
      @escluso = 1
      if( VAR_LatoAggStr == "LATO-CORTO"  )  { @escluso = 0 }

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }

      @X = X - VAR_SpeFianco

      //offz = 116
      offz = 170

      @base_0.x = base_0.x //+ offz + @Z/2
      @base_0.y = base_0.y + Y - VAR_SpePiano - @Y
      @base_0.z = base_0.z + offz - @Z/2

      if( VAR_TipoGambaStr == "VETRO" )
      {
         //centro barra
         offz = 100
         if( Z >= 560 )  { offz = 120 }
         if( Z >= 700 )  { offz = 140 }
         if( Z >= 800 )  { offz = 165 }

         @base_0.z = base_0.z + offz - @Z/2

         //@base_0.x = base_0.x + offz + @Z/2
         @X = X - VAR_OffX_Vetro - 45
      }
//    @ang_y = -90
   }

   Posiziona Barra_Scrivania_AIR br2
   {
      @escluso = 1
      if( VAR_LatoAggStr == "LATO-CORTO"  )  { @escluso = 0 }

      //Luca 13/10/2021
      if( VAR_MaterialeStr == "WILDWOOD" ) { @escluso = 1 }

      @X = X - VAR_SpeFianco

      @base_0.x = base_0.x //+ Z - offz + @Z/2
      @base_0.y = base_0.y + Y - VAR_SpePiano - @Y
      @base_0.z = base_0.z + Z - offz - @Z/2

      if( VAR_TipoGambaStr == "VETRO" )
      {
         //@base_0.x = base_0.x + Z - offz + @Z/2
         @X = X - VAR_OffX_Vetro - 45
      }
      //@ang_y = -90
   }

   //Luca 22/10/2021
   Posiziona Staffa_Mensola_Air ssx
   {
      @escluso = 1
      if( VAR_MaterialeStr == "WILDWOOD"
        & VAR_LatoAggStr == "LATO-LUNGO"
        & Staffa_X > 0 ) { @escluso = 0 }

      @Xt = Staffa_X
      @Z  = Staffa_Z

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

      @base_0.y = base_0.y + Y - VAR_SpePiano/2 - @Y/2
      @base_0.z = base_0.z
      //Simone 02/12/2022
      if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @base_0.z = base_0.z - 0.1 }

      @GEST_IDXPADRE  = idx_piano
      idx_staffa_mens = ATTUALE()
   }
}

Elemento Barra_Scrivania_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""  552
      Y   ""   30
      Z   ""   20

      VediLimiti_PCV  "" 0 Implicit
      VAR_SpePiano    "" 80 Implicit

      //LZ 06/09/2021
      VAR_TipoGamba    "" 0  Implicit
      VAR_TipoGambaStr "" "" Implicit

      COD_EREDITA "" "PRE"

      FIN_var     "" "C028"
      FIN_orie    "" "O"
   }

   Assegnazioni
   {
      GOSUB AssComune

      RADICE  = "BRPSFLC3050"
      //LZ 06/09/2021
      if( VAR_TipoGambaStr == "LEGNO" ) { RADICE  = "BRSGL" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco pia
   {
      GOSUB posa_blocco
      //GOSUB rivestimento
      @c_rivestimento = $c_alluminio
   }

   Posiziona PCV_ContCollisioni_368 pcv4
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z - 10
      @X = X
      @Y = Y + VAR_SpePiano + 10
      @Z = Z + 20
   }
}

Elemento Piano45_Scrivania_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       PianoScrivaniaAir;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""  552
      Y   ""   60
      Z   ""  270

      VAR_LatoAggStr    ""   "" Implicit

      VediLimiti_PCV    ""   0  Implicit

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      RiePan            ""   3  Implicit

      Verso             ""   -1

      ConTopVetro       ""   0  Implicit
      idx_top           ""   -1 Implicit

      idx_grafica_piano ""   -1

      COD_EREDITA "" "PRE"

      FIN_var     "" "C028"

      FIN_orie    "" "O"
   }

   Assegnazioni
   {
      GOSUB AssComune

      RADICE  = "PLD3050LC"
      if( VAR_LatoAggStr == "LATO-LUNGO"  )  { RADICE  = "PLD3050LL" }

      if( UN_PADRE("ScrivaniaFS_AIR") ) { RADICE  = "PLD3050FS" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C009" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C101" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _piano45_scrivania_AIR pia
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      @Verso = Verso

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      @RiePan = RiePan

      idx_grafica_piano = ATTUALE()
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      larg_pcv = 10
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z
      @X = X
      @Y = Y + 30
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - larg_pcv
      @X = X
      @Y = Y + 30
      @Z = larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv3
   {
      riex_sx  = Y + 5
      riex_dx  = 10
      if( Verso < 0 )  { riex_sx =  10  riex_dx  = Y + 5 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv

      @X = Y + 5
      if( Verso > 0 ) { @X = 10 }

      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }

   Posiziona PCV_ContCollisioni_368 pcv4
   {
      @X = Y + 5
      if( Verso < 0 ) { @X = 10 }

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + larg_pcv
      @Y = Y + 30
      @Z = Z - 2*larg_pcv
   }

   //area lav. tiranti gambe
   Posiziona PCV_ContCollisioni_368 pcv5
   {
      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + 49.5
   }

   Posiziona PCV_ContCollisioni_368 pcv6
   {
      @escluso = 1
      if( Z > 560 ) { @escluso = 0 }

      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + 281.5
   }

   Posiziona PCV_ContCollisioni_368 pcv7
   {
      @escluso = 1
      if( Z > 560 ) { @escluso = 0 }
      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - @Z - 281.5
   }

   Posiziona PCV_ContCollisioni_368 pcv8
   {
      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x
      if( Verso > 0 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - @Z - 49.5
   }

   Posiziona PCV_ContCollisioni_368 pcv9
   {
      @escluso = 1
      if( UN_PADRE("ScrivaniaFS_AIR") ) { @escluso = 0 }

      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + 49.5
   }

   Posiziona PCV_ContCollisioni_368 pcv10
   {
      @escluso = 1
      if( UN_PADRE("ScrivaniaFS_AIR") ) { @escluso = 0 }
      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - @Z - 49.5
   }

      Posiziona PCV_ContCollisioni_368 pcv11
   {
      @escluso = 1
      if( Z > 560
        & UN_PADRE("ScrivaniaFS_AIR") ) { @escluso = 0 }

      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + 281.5
   }

   Posiziona PCV_ContCollisioni_368 pcv12
   {
      @escluso = 1
      if( Z > 560
        & UN_PADRE("ScrivaniaFS_AIR") ) { @escluso = 0 }

      @X = 99.5
      @Y = Y + 30
      @Z = 55

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z + Z - @Z - 281.5
   }
}

Elemento _piano45_scrivania_AIR
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      RiePan            "" 3 Implicit

      Verso "" -1

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")
      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      //riey = 5
      //riex = Y - riey
      riey = RiePan
      riex = Y - RiePan

      base_0  = [0,0,0]
      base_1  = [X-riex,0,0]
      base_2  = [X,Y-riey,0]
      base_3  = [X,Y,0]
      base_4  = [0,Y,0]

      if( Verso < 0 )
      {
         base_0  = [riex,0,0]
         base_1  = [X,0,0]
         base_2  = [X,Y,0]
         base_3  = [0,Y,0]
         base_4  = [0,Y-riey,0]
      }

      if( Verso == 0 )
      {
         base_0  = [riex,0,0]
         base_1  = [X-riex,0,0]
         base_2  = [X,Y-riey,0]
         base_3  = [X,Y,0]
         base_4  = [0,Y,0]
         base_5  = [0,Y-riey,0]
      }

      alto_0 = base_0   alto_0.z = Z

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento Fianco45_Scrivania_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""  552
      Y   ""   60
      Z   ""  270

      VAR_LatoAggStr    ""   "" Implicit

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      RiePan            "" 3 Implicit

      Verso "" -1

      idx_grafica_piano    "" -1

      COD_EREDITA "" "PRE"

      FIN_var     "" "C028"
      FIN_orie    "" "O"
   }

   Assegnazioni
   {
      GOSUB AssComune

      RADICE  = "FLD3050LC"
      if( VAR_LatoAggStr == "LATO-LUNGO"  )  { RADICE  = "FLD3050LL" }

      if( UN_PADRE("ScrivaniaFS_AIR") ) { RADICE  = "FLD3050FS" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C009" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C101" )
      }
   }


   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _fianco45_scrivania_AIR pia
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @Verso = Verso

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      @RiePan = RiePan

      idx_grafica_piano = ATTUALE()
   }

   Posiziona Blocco piesx
   {
      @X = 15
      @Y = 3
      @Z = 50
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 3
      @base_0.z = base_0.z + 80
   }

   Posiziona Blocco piedx
   {
      @X = 15
      @Y = 3
      @Z = 50
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 3
      @base_0.z = base_0.z + Z - 80 - @Z
   }

}

Elemento _fianco45_scrivania_AIR
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      RiePan            "" 3 Implicit

      Verso "" -1

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      //riex = 5
      //riey = X - riex
      riex = RiePan
      riey = X - RiePan

      base_0  = [0,0,0]
      base_1  = [X,0,0]
      base_2  = [X,Y-riey,0]
      base_3  = [riex,Y,0]
      base_4  = [0,Y,0]

      if( Verso > 0 )
      {
         base_0  = [0,0,0]
         base_1  = [X,0,0]
         base_2  = [X,Y,0]
         base_3  = [X-riex,Y,0]
         base_4  = [0,Y-riey,0]
      }

      alto_0 = base_0   alto_0.z = Z

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento ScrivaniaFS_AIR
{
   Descrizione = "SCRIVANIE AIR"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias StpScrivaniaAIR

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"        1104 Menu ( LarScrivM_AIR )
      Y       "Altezza"           739 Menu ( AltScrivM_AIR )
      Z       "Profondità"        560 Menu ( PrfScrivM_AIR )

      VAR_SpePiano    "Spessore Piano" 80  //Menu ( SpePScriv_AIR )

      Verso            "" -1

      COD_EREDITA "" "PRE;POST"

      //per collisione PASSACAVI
      VediLimiti_PCV "" 0

      //Simone 04/11/2022
      ConTopVetro      "" 0
      idx_top          "" -1

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      CMP2_AZIONI      ""      "S"

      M4_A_MURO          ""  0
      M4_CNT_LINK_MODE__ ""  0


      M4_MIS "" "FillerM2G;X;Y;Z;VAR_Materiale;VAR_SpePiano;VAR_LatoAgg;VAR_TipoGamba"

      FillerM2G          " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssScrivanieFS_AIR

      //LZ 13/05/2021: gestito nella procedura dedicata
      //AltPie = 3
      //RiePan = 5
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

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

   Procedura OnQueryBdmLocal
   {
      //if( $query_type == 2 )
      //{
      //   $QueryResult__ = 0
      //
      //   if( VAR_MaterialeStr == "LACCATO" )
      //   {
      //      COMPONENTI2("wk_ins",ATTUALE(),"InsertoVetroScrivania_AIR")
      //      COMPONENTI2("wk_top",ATTUALE(),"TopVetroScrivania_AIR")
      //      if( wk_ins == 0
      //        & wk_top == 0 ) { $QueryResult__ = 1 }
      //   }
      //}
   }

   Controlli
   {
      GOSUB CtrlComune

      //Simone 04/11/2022
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder!=1  )
      {
         ConTopVetro = 0
         idx_top = -1
         COMPONENTI2("wk_ins",ATTUALE(),"TopVetroScrivania_AIR")
         if( wk_ins > 0 )
         {
            ConTopVetro = 1
            idx_top = wk_ins[1]
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
   }

   Posiziona Piano45_Scrivania_AIR piano45
   {
      GOSUB posa_blocco

      @Y = VAR_SpePiano

      @X = X - 2*RiePan
      @base_0.x = base_0.x + RiePan
      @base_0.y = base_0.y + Y - VAR_SpePiano

      @Verso = 0
      //MicheleC 23/11/2021
      idx_piano = ATTUALE()
   }

   Posiziona Fianco45_Scrivania_AIR fiasx
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + AltPie

      @X = VAR_SpeFianco
      @Y = Y - RiePan - AltPie

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

      @Verso = -1
      idx_gamba_sx = ATTUALE()
   }

   Posiziona Fianco45_Scrivania_AIR fiadx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - VAR_SpeFianco
      @base_0.y = base_0.y + AltPie

      @X = VAR_SpeFianco
      @Y = Y - RiePan - AltPie

      @Verso =  1
      idx_gamba_dx = ATTUALE()
   }

   Posiziona Schienale_ScrivaniaFS_AIR sch
   {
      @base_0.x = base_0.x + VAR_SpeFianco
      @base_0.y = base_0.y + Y - VAR_SpePiano - @Y
      @base_0.z = base_0.z + 100.5

      //centrale
      if( Z > 560 ) { @base_0.z = base_0.z + Z/2 - @Z/2 }

      @X = X - 2*VAR_SpeFianco

      idx_gamba_dx = ATTUALE()
   }

   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 Schienale_ScrivaniaFS_AIR
{
   Descrizione = "Grafica mensola WW"
   Code        = AIR
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   ""  552
      Y   ""  160
      Z   ""   19

      COD_EREDITA "" "PRE"

      FIN_var     "" "C028"
      FIN_orie    "" "O"
   }

   Assegnazioni
   {
      GOSUB AssComune

      RADICE  = "SLD3050FS"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
      }
   }


   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco pia
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona PCV_ContCollisioni_368 pcv
   {
      GOSUB posa_blocco
      @Z = Z + 20
      @base_0.y = base_0.y + 60
      @base_0.z = base_0.z - 10
   }
}
//** } SCRIVANIE AIR


//{ TAVOLO AIR
Elemento Tavolo_AIR
{
   Descrizione = "Tavolo"
   Code        = LIV
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpTavoliAIR;TavoliAir

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_TavAir          "Revisione Tavoli Air"    0     SaveAlways

      CMP_tipo_tav                  "Tipologia"               0     Menu     (   Tip_Tav_AIR         )
      VAR_tipo_tav                  "Tipologia"               ""

      CMP_mat_tav                   "Materiale piano"         0     Menu     (   Mat_Tav_AIR         )
      VAR_mat_tav                   "Materiale piano"         ""

      CMP_forma_tav                 "Forma tavolo"            0     Menu     (   Fr_Tav_AIR          )
      VAR_forma_tav                 "Forma tavolo"            ""

      CMP_tipo_gambe                "Tipologia"               0     Menu     (   Tip_Gambe_Tav_AIR   )
      VAR_tipo_gambe                "Tipologia"               ""

      X                             "Larghezza"               500   Menu     (   X_Tav_AIR           )   Utente   (   )
      X_ext                         "Larghezza c/prolunghe"   500   ShowAlways
      Y                             "Altezza"                 500   Menu     (   Y_Tav_AIR           )
      Z                             "Profondità"              500   Menu     (   Z_Tav_AIR           )   Utente   (   )

      VediProlunghe                 "Vedi prolunghe"          1

      //per wildowood
      VAR_TipoTeste                 "Tipologia Teste"         "CHIUSE"

      //Luca 03/09/2021
      //per con profondità > 1000 si passa a 3 supporti
      VAR_3Sostegni                 "Con 3 sostegni"          0

      VediLimiti_PCV                "Vedi limiti Passacavi"   0     Boolean

      idx_grafica_piano             ""                        -1
      idx_grafica_piano_sotto       ""                        -1
      idx_grafica_piano_sotto_web   ""                        -1

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

      #ifdef TEC
      VAR_Regola_Elements           "Config.Elements"         ""    Utente   (   )
      #endif
      #ifndef TEC
      VAR_Regola_Elements           ""                        ""
      #endif

      M4_A_MURO                     ""                        0

      M4_MIS                        ""                        "Filler*;X;X_ext;Y;Z;CMP_tipo_tav;CMP_mat_tav"

      FillerM2G                     " "                       ""    ShowAlways

      XGLASS                        "Num. XGLASS"             ""    Utente   (   )
   }

   Assegnazioni
   {
      GOSUB AssComune

      // decofica dei valori da composto
      VAR_tipo_tav   = GetValMenuStr(idx_att, "CMP_tipo_tav")
      VAR_mat_tav    = GetValMenuStr(idx_att, "CMP_mat_tav")
      VAR_forma_tav  = GetValMenuStr(idx_att, "CMP_forma_tav")
      VAR_tipo_gambe = GetValMenuStr(idx_att, "CMP_tipo_gambe")

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Tavolo_Air", "VAR_Revisione_TavAir")

      GOSUB SistCostr_Tavolo_AIR

      if( $ATTIVA_DLL == 0 )
      {
         menu_x = "X_Tav_AIR"
         menu_y = "Y_Tav_AIR"
         menu_z = "Z_Tav_AIR"
         if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1 )
         {
            menu_x = "X_TavCof_AIR"
            menu_y = "Y_TavCof_AIR"
            menu_z = "Z_TavCof_AIR"
         }

         VAR_SET_MENU(ATTUALE(),"X",menu_x)
         VAR_SET_MENU(ATTUALE(),"Y",menu_y)
         VAR_SET_MENU(ATTUALE(),"Z",menu_z)
      }

      if( ACTION() == 0 & $ATTIVA_DLL == 1 ) { HIDE_ON_EDIT(ATTUALE(),"CMP_tipo_tav;CMP_mat_tav;VAR_3Sostegni",1) }

      //#ifdef TE
      //   VAR_SET_MODE(ATTUALE(),"VAR_tipo_tav",$MODE_SHOWALWAYS)
      //   VAR_SET_MODE(ATTUALE(),"VAR_mat_tav",$MODE_SHOWALWAYS)
      //   M4_MIS = "FillerM2G;X;X_ext;Y;Z;VAR_tipo_tav;VAR_mat_tav"
      //#endif

      //Luca 31/08/2021 gestione riduzioni
      if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      {
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 0
         VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")
         CtrlRangeRidM2G(ATTUALE(),"Z")
      }

      //Luca 06/09/2021
      if( $OnLoadOrder )
      {
         if( IS_VAR_FIXED(ATTUALE(),"VediLimiti_PCV")==1 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"VediLimiti_PCV")
            VediLimiti_PCV = 0
         }
      }

      //Luca 21/12/2021 x stampa
      ALIAS_REMOVE(ATTUALE(),"StpXG_Fisse")
      if( VAR_tipo_tav == "TABLE"
        | VAR_mat_tav == "GLASS" )
      {
         ns = GetValoreNS(ATTUALE(),"C044")

         if( ns == "XO000" | ns == "XL000" ) { ALIAS_ADD(ATTUALE(),"StpXG_Fisse") }
      }

      //Simone 17/06/2022
      STP_Bollina = 1
   }

   PuntiNotevoli
   {
      GOSUB punti

      //Simone 04/08/2022
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      stp_base_0 = base_0
      stp_base_1 = base_1
      stp_base_2 = base_2
      stp_base_3 = base_3

      if( VAR_tipo_tav == "EXTENDABLE"  & VediProlunghe )
      {
         base_0 = [0, 0, 0]    alto_0 = [0, Y, 0]
         base_1 = [0, 0, Z]    alto_1 = [0, Y, Z]
         base_2 = [X_ext, 0, Z]    alto_2 = [X_ext, Y, Z]
         base_3 = [X_ext, 0, 0]    alto_3 = [X_ext, Y, 0]

         stp_base_0.x = Prolunga_X
         stp_base_1.x = Prolunga_X
         stp_base_2.x = X_ext - Prolunga_X
         stp_base_3.x = X_ext - Prolunga_X
      }

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

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements

      //Luca 31/03/2022 continuità vena
      GOSUB FIN_CalcolaPunti_TEXTURE_CV_Tavolo
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 06/09/2021 var passacavi
      GOSUB Set_Gest_C009_Scrivania_AIR

      GOSUB GestComune_Post
   }

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

      if( TABER_REGOLA == "POST" )
      {
         if( VAR_mat_tav == "WILDWOOD" )
         {
            VAR_TipoTeste = "CHIUSE"
            if( VAR_VAL_STR(ATTUALE(), "GEST_C038") == "WW002"  ) { VAR_TipoTeste = "APERTE" }
         }
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Posiziona PianoTavolo_Laminato_AIR pia_lam
   {
      @escluso = 1
      if( VAR_mat_tav == "LAMINATO" ) { @escluso = 0 }

      GOSUB posa_blocco
      //reale 575
      //@Y = Y - 3
      if( VAR_tipo_tav != "COFFEE" ) { @Y = Y - 3 }

      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
      @Spe_Piano = Spe_Piano

      //Simone 09/11/2022
      idx_grafica_piano_sotto = @idx_grafica_piano_sotto
   }

   Posiziona PianoTavolo_Wildwood_AIR pia_ww
   {
      @escluso = 1
      if( VAR_mat_tav == "WILDWOOD" ) { @escluso = 0 }

      GOSUB posa_blocco

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @X = X_ext }

      //Simone 24/09/2021
      //@Y = Y - 3
      if( VAR_tipo_tav != "BENCH"
        & VAR_tipo_tav != "COFFEE" ) { @Y = Y - 3 }

      @Spe_Piano = Spe_Piano

      //Simone 04/08/2022
      idx_grafica_piano = @idx_grafica_piano
      idx_grafica_piano_sotto = @idx_grafica_piano_sotto
      idx_grafica_piano_sotto_web = @idx_grafica_piano_sotto_web

      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
   }

   Posiziona PianoTavolo_HayAgeWood_AIR pia_haw
   {
      @escluso = 1
      if( VAR_mat_tav == "HAYAGEWOOD" ) { @escluso = 0 }

      GOSUB posa_blocco
      //reale 575
      //Simone 24/09/2021
      //@Y = Y - 3
      if( VAR_tipo_tav != "BENCH" ) { @Y = Y - 3 }

      @Spe_Piano = Spe_Piano

      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
   }

   Posiziona PianoTavolo_Vetro_AIR pia_vet
   {
      @escluso = 1
      if( VAR_mat_tav == "VETRO"
        | VAR_mat_tav == "XGLASS"
        | VAR_mat_tav == "STRATUM"  ) { @escluso = 0 }

      GOSUB posa_blocco

      //@Y = Y - 3
      if( VAR_tipo_tav != "COFFEE" ) { @Y = Y - 3 }

      @Spe_Piano = Spe_Piano
      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
   }

   Posiziona PianoTavolo_Glass_AIR pia_gls
   {
      @escluso = 1
      if( VAR_mat_tav == "GLASS" ) { @escluso = 0 }

      GOSUB posa_blocco

      @Spe_Piano = Spe_Piano
      @Y = Y + 1
   }
}

//laccato / laminato / fenix
Elemento PianoTavolo_Laminato_AIR
{
   Descrizione = "Piano Tavolo Laminato AIR"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Spe_Piano    "" 10

      VAR_tipo_tav   "Tipologia"        "" Implicit
      VAR_mat_tav    "Materiale piano"  "" Implicit
      VAR_forma_tav  "Forma piano"      "" Implicit
      VAR_tipo_gambe "Tipo Gambe"       "" Implicit

      VAR_3Sostegni  ""                  0 Implicit

      VAR_Revisione_TavAir    ""        -1 Implicit

      idx_grafica_piano_sotto ""        -1

      perRADICE               ""        ""
      RADICE                  ""        ""

      COD_EREDITA             ""        "PRE"

      FIN_var                 ""        "C044"
      FIN_orie                ""        "O"

      Ord_Sost_Allegato       ""         1

      M4_NO_OFFS              ""         1

      VT_NFC                  "NFC"      1

      m4s_exist               ""         0 Implicit
      m4s_import              ""        "" Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "PTLLF"

      if( VAR_tipo_tav == "SNACK" )     { perRADICE = "PASLL" }
      //Luca 07/12/2021
      if( VAR_tipo_tav == "COFFEE" )
      {
         perRADICE = "PCTLA"
         if( VAR_forma_tav == "ROUND" ) { perRADICE = "PCRLA" }
      }

      RADICE = perRADICE

      GOSUB ConfigSostegni_Tavolo_AIR

      //Simone 15/02/2023 - doppio tag
      VT_NFC = 1
      if( VAR_tipo_tav == "TABLE"
        & VAR_forma_tav == "RETTANGOLARE" ) { VT_NFC = 2 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Spe_Piano
      vano_l_0 = X
      vano_p_0 = Z

      base_so = base_0
      alto_ne = alto_2
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Spe_Piano

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
         BloccaModificaCatGest( ATTUALE() , "GEST_C009" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend ret
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - Spe_Piano
      @Y = Spe_Piano

      GOSUB rivestimento

      //Simone 09/11/2022
      idx_grafica_piano_sotto = ATTUALE()
      @BLEND__ = 2
   }

   Posiziona CilindroY cil
   {
      @escluso = 1
      if( m4s_exist == 0
        & VAR_forma_tav == "ROUND" )  { @escluso = 0 }

      GOSUB posa_blocco

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

      GOSUB rivestimento
   }

   //Simone 16/03/2023
   Posiziona M4S top
   {
      @escluso = 1
      if( m4s_exist == 1
        & VAR_forma_tav == "ROUND" )  { @escluso = 0 }

      GOSUB posa_blocco

      @import = m4s_import

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

      GOSUB rivestimento
      @HIDE = 1
   }

   Posiziona SupportoVetro_Tavoli_AIR sp1
   {
      //@escluso = 0
      //if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "V"
      @Verso = "DX"

      @LargVet = SostegnoV1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + X - SostegnoV1_OffX - @ProfVet
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2


      if( VAR_tipo_tav == "SNACK" )
      {
         @StaffaSNACK = 1

         @PosStaffa   = "RS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 40
         @base_0.z = base_0.z + 32 + @X

         @ang_y = 90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp2
   {
      //@escluso = 0
      //if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }
      //Luca 07/12/2021
      @escluso = 0
      if( SostegnoO1 == 0 ) { @escluso = 1 }

      @OrieSupporto = "O"
      @Verso = "DX"

      @LargVet = SostegnoO1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoO1_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @ProfVet/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "RD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 32 - @X
         @base_0.z = base_0.z + 40
         //@ang_y = -90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp3
   {
      @escluso = 1
      if( SostegnoV2 == 1 )  { @escluso = 0 }

      @OrieSupporto = "V"
      @Verso = "SX"

      @LargVet = SostegnoV2_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoV2_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 40
         @base_0.z = base_0.z + Z - 32 - @X
         @ang_y = -90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp4
   {
      @escluso = 1

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 32 + @X
         @base_0.z = base_0.z + Z - 40

         @ang_y = 180
      }
   }

   //Simone 15/02/2023
   Posiziona TAG_NFC nfc_fr
   {
      @base_0.x = base_0.x + X - @X - 2
      @base_0.y = base_0.y + Y - Spe_Piano + 2
      @base_0.z = base_0.z + Z

      //centrato sulla gamba in vetro
      if( VAR_forma_tav == "ROUND" )
      {
         @ang_y = -90
         @base_0.x = base_0.x
         @base_0.y = base_0.y + Y - Spe_Piano
         @base_0.z = base_0.z + Z/2 - @X/2
      }
   }

   //secondo tag sul retro del tavolo
   Posiziona TAG_NFC nfc_rt
   {
      @escluso = 1
      if( VT_NFC == 2 ) { @escluso = 0 }

      @ang_y = 180
      @base_0.x = base_0.x + @X + 2
      @base_0.y = base_0.y + Y - Spe_Piano + 2
      @base_0.z = base_0.z
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 30

      if( VAR_tipo_tav == "SNACK" )  { limite = 25 }

      aumento_y = 1.25

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      limite = 33

      if( VAR_tipo_tav == "SNACK" )  { limite = 25 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

Elemento PianoTavolo_Wildwood_AIR
{
   Descrizione = "Piano Tavolo Wildwood AIR"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""
   Alias PianoTavolo_AIR_WW

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      VAR_Revisione_TavAir        ""                   -1       Implicit

      VAR_tipo_tav                "Tipologia"          ""       Implicit
      VAR_mat_tav                 "Materiale piano"    ""       Implicit
      VAR_forma_tav               "Forma piano"        ""       Implicit
      VAR_tipo_tav_Abb            "Forma piano abbr"   ""

      VAR_tipo_gambe              "Tipo Gambe"         ""       Implicit

      VAR_TipoTeste               "Tipologia Teste"    "CHIUSE" Implicit

      Spe_Piano                   ""                   10

      VediProlunghe               ""                   0        Implicit
      LargProlunga                ""                   520

      VAR_3Sostegni               ""                   0        Implicit

      Smusso                      ""                   2

      idx_grafica_piano           ""                  -1
      idx_grafica_piano_sotto     ""                  -1
      idx_grafica_piano_sotto_web ""                  -1

      perRADICE                   ""                  ""
      RADICE                      ""                  ""

      COD_EREDITA                 ""                  "PRE;POST"

      FIN_var                     ""                  "C044"
      FIN_orie                    ""                  "O"

      TEXTURE_OFFZ                ""                   0       Utente ( )

      VT_NFC                      "NFC"                1

      Ord_Sost_Allegato           ""                   1

      m4s_exist                   ""                   0       Implicit
      m4s_import                  ""                  ""       Implicit

      FileSat1                    ""                  ""       Implicit
      FileSat1_exist              ""                   0       Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Bordo = 1
      if( VAR_tipo_tav == "EXTENDABLE" ) { Spe_Bordo = 2 }
      Spe_WW    = 18

      GOSUB ConfigSostegni_Tavolo_AIR
      GOSUB CalcolaOffset_Texture_Teste

      //Simone 15/02/2023 - doppio tag
      VT_NFC = 1
      if( VAR_forma_tav == "RETTANGOLARE" )
      {
        if( VAR_tipo_tav == "TABLE"
          | VAR_tipo_tav == "EXTENDABLE" ) { VT_NFC = 2 }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Spe_Piano
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = SE_NUM( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe, X - 2*LargProlunga, X)
      GEST_Y = Spe_Piano

      COMPONENTI2( "wk_sostegniNum", idx_att, "SupportoVetro_Tavoli_AIR")
      perRADICE = FMT( "PTWW{}", STR(wk_sostegniNum))

      if( VAR_tipo_tav == "BENCH")            { perRADICE = "PABWW"   }
      if( VAR_tipo_tav == "EXTENDABLE")       { perRADICE = "PTAWWCP" }

      if( VAR_tipo_tav == "SNACK")            { perRADICE = "PASWW"   }
      if( VAR_forma_tav == "ROUND")           { perRADICE = "PTTWW"   }

      if( VAR_tipo_tav == "COFFEE")
      {
         perRADICE = "PCTWW"
         if( VAR_forma_tav == "ROUND")        { perRADICE = "PCRWW"   }
      }

      if( VAR_forma_tav == "SOFT")            { perRADICE = "PRWWRAS" }

      if( VAR_tipo_tav == "SLIM")
      {
         if( VAR_forma_tav == "ROUND")        { perRADICE = "PTWWRAS" }
         if( VAR_forma_tav == "RETTANGOLARE") { perRADICE = "PTWWRES" }
         if( VAR_forma_tav == "BOTTE")        { perRADICE = "PTWWBS"  }
         if( VAR_forma_tav == "ORGANICO")     { perRADICE = "PTWWORS" }
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C008_Piano_Tav_Air
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C100" )
      }

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

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_piatav_ww_AIR ret
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND"
        | VAR_tipo_tav == "SLIM"   )  { @escluso = 1 }

      if( VAR_VAL(-1,"TPC4WEB") == 1
        & VAR_TipoTeste != "APERTE" ) { @escluso = 1 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + Spe_Bordo
      @base_0.y = base_0.y + Y - Spe_Piano
      @Y = Spe_Piano
      @X = X - 2*Spe_Bordo
      @spe = Spe_WW

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  )
      {
         @base_0.x = base_0.x + LargProlunga + Spe_Bordo
         @X = X - 2*LargProlunga - 2*Spe_Bordo
      }

      @spe = 18

      //Luca 11/10/2021
      if( VAR_TipoTeste == "APERTE" )
      {
         @spe = 3.5
         @X = X
         @base_0.x = base_0.x
      }

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      FIN_orie = "O"
      FIN_var  = "C044"
      GOSUB rivestimento

      idx_grafica_piano = ATTUALE()

      //if( VAR_VAL_STR(ATTUALE(),"t_rivestimento") != "" ) { @t_rivestimento = STRCAT("2",STRMID(1,1000,@t_rivestimento)) }
   }

   Posiziona Blocco cop
   {
      @escluso = 1
      if( VAR_VAL(-1,"TPC4WEB") == 1
        & VAR_tipo_tav != "EXTENDABLE"
        & VAR_tipo_tav != "SLIM"
        & VAR_forma_tav != "ROUND"      ) { @escluso = 0 }

      @X = X - 2*Smusso
      @Y = Spe_Bordo
      @Z = Z - 2*Smusso

      @base_0.x = base_0.x + Smusso
      @base_0.y = base_0.y + Y - Spe_Bordo + 0.1
      @base_0.z = base_0.z + Smusso

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      FIN_orie = "O"
      FIN_var  = "C044"
      GOSUB rivestimento

      idx_grafica_piano = ATTUALE()
   }

   Posiziona _graf_testav_ww_AIR brd1
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND"
        | VAR_tipo_tav == "EXTENDABLE"
        | VAR_tipo_tav == "SLIM"        ) { @escluso = 1 }

      //Luca 11/10/2021
      if( VAR_TipoTeste == "APERTE" )     { @escluso = 1 }

      GOSUB posa_blocco

      @ang_z = -180
      @X = Spe_Bordo
      @Y = Spe_Piano

      @base_0.x = base_0.x + Spe_Bordo
      @base_0.y = base_0.y + Y //- Spe_Piano

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      if( VAR_VAL(-1,"TPC4WEB") == 1 )
      {
         @Y = Spe_Piano - 2*Smusso
         @Z = Z - 2*Smusso

         @base_0.x = base_0.x - 0.1 + Spe_Bordo
         @base_0.y = base_0.y + Y - Smusso //- Spe_Piano
         @base_0.z = base_0.z + Smusso
      }

      FIN_orie = "V"

      //@TEXTURE_OFFZ = Z - TEXTURE_OFFZ

      //Luca 05/05/2022 per TWEB
      //wk_texture_set = VAR_VAL_STR(idx_att,"ORD_VR_TX_C044")
      //if( LEFT(wk_texture_set,6) == "G01.WW" ) { @ORD_VR_TX_CUSTOM = STRCAT(wk_texture_set,".TT") }

      GOSUB rivestimento

      //if( VAR_VAL_STR(ATTUALE(),"t_rivestimento") != "" ) { @t_rivestimento = STRCAT("2",STRMID(1,1000,@t_rivestimento)) }
   }

   Posiziona _graf_testav_ww_AIR brd2
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND"
        | VAR_tipo_tav == "EXTENDABLE"
        | VAR_tipo_tav == "SLIM"        ) { @escluso = 1 }

      //Luca 11/10/2021
      if( VAR_TipoTeste == "APERTE" )     { @escluso = 1 }

      GOSUB posa_blocco

      @X = Spe_Bordo
      @Y = Spe_Piano

      @base_0.x = base_0.x + X - Spe_Bordo
      @base_0.y = base_0.y + Y - Spe_Piano

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      if( VAR_VAL(-1,"TPC4WEB") == 1 )
      {
         @Y = Spe_Piano - 2*Smusso
         @Z = Z - 2*Smusso

         @base_0.x = base_0.x + X - Spe_Bordo + 0.1
         @base_0.y = base_0.y + Y - Spe_Piano + Smusso
         @base_0.z = base_0.z + Smusso
      }

      FIN_orie = "V"

      //if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  )
      //{
      //   @base_0.x = base_0.x + X - Spe_Bordo - LargProlunga
      //}

      GOSUB rivestimento

      //if( VAR_VAL_STR(ATTUALE(),"t_rivestimento") != "" ) { @t_rivestimento = STRCAT("2",STRMID(1,1000,@t_rivestimento)) }

      //@t_rivestimento = t_rivestimento_piano
      //@r_rivestimento = r_rivestimento_piano
   }

   Posiziona _graf_testav_ww_AIR brd3
   {
      @escluso = 1
      if( VAR_TipoTeste == "CHIUSE"
        & VAR_forma_tav != "ROUND"
        & VAR_tipo_tav != "EXTENDABLE"
        & VAR_tipo_tav != "SLIM"
        & VAR_VAL(-1,"TPC4WEB") == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = X - 2*Smusso
      @Y = Spe_Piano - 2*Smusso
      @Z = Spe_Bordo

      @base_0.x = base_0.x + Smusso
      @base_0.y = base_0.y + Y - Spe_Piano + Smusso
      @base_0.z = base_0.z + Z - Spe_Bordo + 0.1

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      FIN_orie = "O"
      GOSUB rivestimento
   }

   Posiziona _graf_testav_ww_AIR brd4
   {
      @escluso = 1
      if( VAR_TipoTeste == "CHIUSE"
        & VAR_forma_tav != "ROUND"
        & VAR_tipo_tav != "SLIM"
        & VAR_tipo_tav != "EXTENDABLE"
        & VAR_VAL(-1,"TPC4WEB") == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = X - 2*Smusso
      @Y = Spe_Piano - 2*Smusso
      @Z = Spe_Bordo

      @base_0.x = base_0.x + Smusso
      @base_0.y = base_0.y + Y - Spe_Piano + Smusso
      @base_0.z = base_0.z - 0.1

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      FIN_orie = "O"
      GOSUB rivestimento
   }

   Posiziona Blocco fnd
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND"
        | VAR_tipo_tav == "SLIM"    ) { @escluso = 1 }

      //Luca 11/10/2021
      if( VAR_TipoTeste == "APERTE" ) { @escluso = 1 }

      GOSUB posa_blocco

      @ang_z = -180
      @base_0.x = base_0.x - Spe_Bordo + X
      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Bordo
      @base_0.z = base_0.z + Spe_Bordo
      @Y = Spe_Bordo
      @X = X - 2*Spe_Bordo
      @Z = Z - 2*Spe_Bordo

      if( VAR_VAL(-1,"TPC4WEB") == 1 )
      {
         @X = X - 2*Smusso
         @Z = Z - 2*Smusso

         @base_0.x = base_0.x + X - Smusso
         @base_0.y = base_0.y + Y + Spe_Bordo - Spe_Piano - 0.1
         @base_0.z = base_0.z + Smusso
      }

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  )
      {
         @base_0.x = @base_0.x - LargProlunga - Spe_Bordo

         @X = X - 2*Spe_Bordo - 2*LargProlunga
      }

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      //@t_rivestimento = t_rivestimento_piano
      //@r_rivestimento = r_rivestimento_piano

      FIN_var  = "C044"
      FIN_orie = "O"
      GOSUB rivestimento

      idx_grafica_piano_sotto = ATTUALE()
   }

   Posiziona BloccoBlend bl
   {
      @escluso = 1
      if( VAR_VAL(-1,"TPC4WEB") == 1
        & VAR_TipoTeste != "APERTE"
        & VAR_forma_tav != "ROUND"
        & FileSat1_exist == 0        )
      {
         @escluso = 0
         idx_grafica_piano_sotto_web = ATTUALE()
      }

      GOSUB posa_blocco

      @Y = Spe_Piano

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

      //Simone 19/12/2022
      if( VAR_tipo_tav == "EXTENDABLE" )
      {
         @X = X - 2*LargProlunga
         @base_0.x = base_0.x + LargProlunga
      }

      FIN_orie = "O"

      GOSUB rivestimento

      @BLEND__ = Smusso
   }

   //Simone 20/03/2023 - Piano rastremato WW
   Posiziona __import__ sat
   {
      @escluso = 1
      if( FileSat1_exist == 1
        & VAR_tipo_tav == "SLIM"
        & VAR_mat_tav == "WILDWOOD" )
      {
         @escluso = 0
         idx_grafica_piano_sotto = ATTUALE()
      }

      @import = FileSat1

      GOSUB posa_blocco

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

      @TEXTURE_OFFZ = TEXTURE_OFFZ
      GOSUB rivestimento
   }

   //Simone 31/05/2022 - Rivedo grafica prolunghe
   //Posiziona Blocco prol1
   //{
   //   @escluso = 1
   //   if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //   @base_0.y = base_0.y + Y - Spe_Piano
   //   @Y = Spe_Piano
   //
   //   @X = LargProlunga
   //
   //   FIN_orie = "V"
   //   FIN_var = "C100"
   //   GOSUB rivestimento
   //}

   //Posiziona Blocco prol2
   //{
   //   @escluso = 1
   //   if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @escluso = 0 }
   //
   //   GOSUB posa_blocco
   //   @base_0.y = base_0.y + Y- Spe_Piano
   //   @Y = Spe_Piano
   //
   //   @base_0.x = base_0.x + X - LargProlunga
   //   @X = LargProlunga
   //
   //   GOSUB rivestimento
   //
   //   FIN_var = "C044"
   //   FIN_orie = "O"
   //}

   Posiziona Prolunga_Tav_Air prol1
   {
      @escluso = 1
      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @escluso = 0 }

      @Pos = "SX"
      GOSUB posa_blocco

      @X = LargProlunga
      @Y = Spe_WW

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

      GOSUB rivestimento
   }

   Posiziona Prolunga_Tav_Air prol2
   {
      @escluso = 1
      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @escluso = 0 }

      @Pos = "DX"

      GOSUB posa_blocco
      @X = LargProlunga
      @Y = Spe_WW

      @base_0.x = base_0.x + X - @X - 2*Spe_Bordo
      @base_0.y = base_0.y + Y

      GOSUB rivestimento
   }

   //TESTE APERTE
   Posiziona _graf_piano_inf_tav_ww Imp1
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0  = base_0
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z + 3.5
      @X = X
      @Y = 18
      @Z = Z - 7
      GOSUB rivestimento
   }

   Posiziona _graf_piano_sup_tav_ww Imp2
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0  = base_0
      @base_0.z = base_0.z + 3.5
      @base_0.y = base_0.y + Y - Spe_Piano + 18
      @X = X
      @Y = 58.5
      @Z = Z - 7
      GOSUB rivestimento
   }

   Posiziona _graf_teste_tav_ww Imp3
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0  = base_0
      @base_0.z = base_0.z + 3.5
      @base_0.y = base_0.y + Y - Spe_Piano + 3.5

      @X = 65
      @Y = Spe_Piano - 7
      @Z = 14.5
      GOSUB rivestimento
   }

   Posiziona _graf_teste_tav_ww Imp4
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0.x = base_0.x + X
      @base_0.z = base_0.z + Z - 3.5
      @base_0.y = base_0.y + Y - Spe_Piano + 3.5

      @ang_y = 180
      @X = 65
      @Y = Spe_Piano - 7
      @Z = 14.5
      GOSUB rivestimento
   }

   Posiziona _graf_teste_tav_ww Imp5
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0  = base_0
      @base_0.z = base_0.z + Z - 18
      @base_0.y = base_0.y + Y - Spe_Piano + 3.5

      @X = 65
      @Y = Spe_Piano - 7
      @Z = 14.5
      @Lato = 1
      GOSUB rivestimento
   }

   Posiziona _graf_teste_tav_ww Imp6
   {
      @escluso = 0
      if( VAR_TipoTeste == "CHIUSE" ) { @escluso = 1 }

      @base_0.x = base_0.x + X
      @base_0.z = base_0.z + 18
      @base_0.y = base_0.y + Y - Spe_Piano + 3.5

      @ang_y = 180
      @X = 65
      @Y = Spe_Piano - 7
      @Z = 14.5
      @Lato = 1
      GOSUB rivestimento
   }

   Posiziona CilindroY cil
   {
      @escluso = 1
      if( m4s_exist == 0
        & FileSat1_exist == 0 )
      {
         if( VAR_forma_tav == "ROUND" )
         {
            @escluso = 0
            idx_grafica_piano_sotto = ATTUALE()
         }
      }

      GOSUB posa_blocco

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

      @TEXTURE_OFFZ = TEXTURE_OFFZ

      @FIN_orie = "V"
      GOSUB rivestimento
   }

   //Simone 16/03/2023
   Posiziona M4S top
   {
      @escluso = 1
      if( m4s_exist == 1 )
      {
         if( VAR_forma_tav == "ROUND" )  { @escluso = 0 }
      }

      GOSUB posa_blocco

      @import = m4s_import

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

      GOSUB rivestimento
      @HIDE = 1
   }

   Posiziona SupportoVetro_Tavoli_AIR sp1
   {
      @OrieSupporto = "V"
      @Verso = "DX"

      @LargVet = SostegnoV1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + X - SostegnoV1_OffX - @ProfVet
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @base_0.x = @base_0.x - LargProlunga }

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "RS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         //@base_0.x = base_0.x + 32
         //@base_0.z = base_0.z + 40

         @base_0.x = base_0.x + 40
         @base_0.z = base_0.z + 32 + @X

         @ang_y = 90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp2
   {
      if( SostegnoO1 == 0 )  { @escluso = 1 }

      @OrieSupporto = "O"
      @Verso = "DX"

      @LargVet = SostegnoO1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoO1_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @ProfVet/2

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @base_0.x = @base_0.x + LargProlunga }

      if( VAR_tipo_tav == "SNACK" )
      {
         @StaffaSNACK = 1
         @PosStaffa   = "RD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         //@base_0.x = base_0.x + X - 40
         //@base_0.z = base_0.z + 32
         //@ang_y = -90
         @base_0.x = base_0.x + X - 32 - @X
         @base_0.z = base_0.z + 40
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp3
   {
      @escluso = 1
      if( SostegnoV2 == 1 )  { @escluso = 0 }

      @OrieSupporto = "V"
      @Verso = "SX"

      @LargVet = SostegnoV2_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoV2_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  ) { @base_0.x = @base_0.x + LargProlunga }

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         //@base_0.x = base_0.x + X - 32
         //@base_0.z = base_0.z + Z - 40
         //@ang_y = 180
         @base_0.x = base_0.x + X - 40
         @base_0.z = base_0.z + Z - 32 - @X
         @ang_y = -90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp4
   {
      @escluso = 1

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         //@base_0.x = base_0.x + 40
         //@base_0.z = base_0.z + Z - 32
         //
         //@ang_y = 90
         @base_0.x = base_0.x + 32 + @X
         @base_0.z = base_0.z + Z - 40

         @ang_y = 180
      }
   }

   //Simone 14/02/2023
   Posiziona TAG_NFC nfc_fr
   {
      @escluso = 0
      if( VAR_VAL(-1,"TPC4WEB") == 1
        | VAR_tipo_tav == "SLIM"     ) { @escluso = 1 }

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z + Z

      if( VAR_tipo_tav == "EXTENDABLE" ) { @base_0.x = @base_0.x - LargProlunga - 2 }

      //centrato sulla gamba in vetro
      if( VAR_forma_tav == "ROUND" )
      {
         @ang_y = -90
         @base_0.x = base_0.x
         @base_0.z = base_0.z + Z/2 - @X/2
      }
   }

   //secondo tag sul retro del tavolo
   Posiziona TAG_NFC nfc_rt
   {
      @escluso = 1
      if( VT_NFC == 2
        & VAR_VAL(-1,"TPC4WEB") == 0 ) { @escluso = 0 }

      @ang_y = 180
      @base_0.x = base_0.x + @X
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z

      if( VAR_tipo_tav == "EXTENDABLE" ) { @base_0.x = @base_0.x + LargProlunga + 2 }
   }
   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 30

      if( VAR_tipo_tav == "SNACK" )  { limite = 25 }

      aumento_y = 1.25

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite

      if( VAR_forma_tav == "ROUND" )
      {
         @ContCollisione_Speciale = 1
         @Z = X
         @limite = 60
      }
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      if( VAR_TipoTeste == "APERTE"  ) { limite = 90 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  )
      {
         @X = limite  + LargProlunga
         //@base_0.x = @base_0.x + LargProlunga
      }
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite

      if( VAR_tipo_tav == "EXTENDABLE" & VediProlunghe  )
      {
         @X = limite  + LargProlunga
          @base_0.x = @base_0.x - LargProlunga
      }
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

//Simone 31/05/2022
Elemento Prolunga_Tav_Air
{
   Descrizione = "Descrizione"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      FIN_var      ""  "C100"
      FIN_orie     ""     "O"

      LargProlunga ""      1    Implicit
      Spe_Bordo    ""      1    Implicit
      Spe_Piano    ""      1    Implicit

      Pos  "Posizione"    "SX"

      //HIDE         ""      1
   }

   Assegnazioni
   {
      GOSUB AssComune

      DescEdit__ = "PROLUNGA TAVOLO AIR"

      FIN_idx_gest = PADRE(ATTUALE(),1)

      //Simone 08/09/2022
      VAR_Check_Sost = 1
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      HIDE = 1
      NO_GEST = 1
      if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") == "1" )
      {
         HIDE = 0
         NO_GEST = 0
      }

      if( NO_GEST == 1 )
      {
         FLAG_RADICE = $NO_RAD

         RADICE = ""
         GEST_CODICE = ""

         EXITSUB()
      }

      FLAG_RADICE = $FLAG_STANDARD
      GEST_CODICE = "TP1215"
      if( Z > 850 ) { GEST_CODICE = "TP1216" }

      GOSUB GestComune_Post
   }

   Posiziona _graf_prolunga_sup_tav_ww pro1
   {
      GOSUB posa_blocco

      @X = LargProlunga/2
      @Z = Z - 2*Spe_Bordo
      @base_0.x = base_0.x + Spe_Bordo
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + Spe_Bordo

      @FIN_orie = "V"

      GOSUB rivestimento
   }

   Posiziona _graf_prolunga_sup_tav_ww pro2
   {
      GOSUB posa_blocco

      @X = LargProlunga/2
      @Z = Z - 2*Spe_Bordo
      @base_0.x = base_0.x + @X + Spe_Bordo
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + Spe_Bordo

      @FIN_orie = "V"

      GOSUB rivestimento
   }

   //Posiziona _graf_prolunga_inf_tav_ww fnd
   Posiziona Blocco fndSX
   {
      @X = LargProlunga - 20
      @Y = 4
      @Z = Z/2 - 30

      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y - Spe_Piano + 18
      @base_0.z = base_0.z + 20

      if( Pos == "DX" )
      {
         @base_0.x = base_0.x + 2*Spe_Bordo
      }

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco fndDX
   {
      @X = LargProlunga - 20
      @Y = 4
      @Z = Z/2 - 30

      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y - Spe_Piano + 18
      @base_0.z = base_0.z + Z - @Z - 20

      if( Pos == "DX" )
      {
         @base_0.x = base_0.x + 2*Spe_Bordo
      }

      @c_rivestimento = $c_nero
   }

   Posiziona _graf_Frontalino_WW testa
   {
      GOSUB posa_blocco

      @X = Z - 2*Spe_Bordo
      @Y = Spe_Piano
      @Z = 20

      @ang_y = -90
      @base_0.x = base_0.x + @Z
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + Spe_Bordo

      if( Pos == "DX" )
      {
         @ang_y = 90
         @base_0.x = base_0.x + LargProlunga - @Z + 2*Spe_Bordo
         @base_0.z = base_0.z + @X + Spe_Bordo
      }

      @FIN_orie = "O"

      GOSUB rivestimento
   }

   Posiziona _graf_Frontalino_WW brd1
   {
      GOSUB posa_blocco

      @X = LargProlunga
      @Y = Spe_Piano
      @Z = 20

      @ang_x = 180
      @base_0.x = base_0.x + Spe_Bordo
      @base_0.y = base_0.y
      @base_0.z = base_0.z + @Z

      @FIN_orie = "O"

      GOSUB rivestimento
   }

   Posiziona _graf_Frontalino_WW brd2
   {
      GOSUB posa_blocco

      @X = LargProlunga
      @Y = Spe_Piano
      @Z = 20

      @base_0.x = base_0.x + Spe_Bordo
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + Z - @Z

      @FIN_orie = "O"

      GOSUB rivestimento
   }

   Posiziona RigaOrdine_Sostituzione prol1
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1210"
      if( Z > 850 ) { @VAR_Gest_Codice = "TP1211" }
   }

   Posiziona RigaOrdine_Sostituzione prol2
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1210"
      if( Z > 850 ) { @VAR_Gest_Codice = "TP1211" }
   }

   Posiziona RigaOrdine_Sostituzione front
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1212"
      if( Z > 850 ) { @VAR_Gest_Codice = "TP1213" }
   }

   Posiziona RigaOrdine_Sostituzione fia1
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1214"
   }

   Posiziona RigaOrdine_Sostituzione fia2
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1214"
   }

   Posiziona RigaOrdine_Sostituzione stru
   {
      @FLAG_Sost_Check_Idx_Padre = 2
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TP1217"
      if( Z > 850 ) { @VAR_Gest_Codice = "TP1218" }
   }
}

Elemento _graf_piatav_ww_AIR
{
   Descrizione = "Blocco X smussato"
   Code        = CUBO
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 1
      Y "" 80
      Z "" 373

      HIDE "" 1

      Acis "" 1

      spe  "" 18
      r    "" 2

      t_rivestimento "" ""
      r_rivestimento "" ""
   }

   PuntiNotevoli
   {
      DEL_VAR( ATTUALE(), "base*")
      DEL_VAR( ATTUALE(), "arc*")

         base_0 = [0, 0, 0]
         base_1 = [0, 0, spe]
         base_2 = [0, Y-spe, spe]
         base_3 = [0, Y-spe, Z-spe]
         base_4 = [0, 0, Z-spe]
         base_5 = [0, 0, Z]
         base_6 = [0, Y, Z]
         base_7 = [0, Y, 0]


      //if( VAR_VAL(-1,"TPC4WEB") == 1 )
      //{
      //   DEL_VAR( ATTUALE(), "base*")
      //
      //   k = SENO(45)
      //
      //   base_0 = [0, 0, 0]
      //   base_1 = [0, 0, spe]
      //   base_2 = [0, Y-spe, spe]
      //   base_3 = [0, Y-spe, Z-spe]
      //   base_4 = [0, 0, Z-spe]
      //   base_5 = [0, 0, Z]
      //   base_6 = [0, Y-r, Z]
      //   arc_6  = [0, Y-r+r*k, Z-r+r*k]
      //   base_7 = [0, Y, Z-r]
      //   base_8 = [0, Y, r]
      //   arc_8  = [0, Y-r+r*k, r-r*k]
      //   base_9 = [0, Y-r, 0]
      //}

      alto_0 = base_0
      alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _graf_testav_ww_AIR
{
   Descrizione = "Blocco X smussato"
   Code        = CUBO
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 1
      Y "" 80
      Z "" 373

      HIDE "" 1

      Acis "" 1

      r    "" 2

      t_rivestimento "" ""
      r_rivestimento "" ""
   }

   PuntiNotevoli
   {
      DEL_VAR( ATTUALE(), "base*")
      DEL_VAR( ATTUALE(), "arc*")

      base_0 = [0, 0, 0]
      base_1 = [0, 0, Z]
      base_2 = [0, Y, Z]
      base_3 = [0, Y, 0]


//      if( VAR_VAL(-1,"TPC4WEB") == 1 )
//      {
//         DEL_VAR( ATTUALE(), "base*")
//
//         k = SENO(45)
//
//         base_0 = [0, 0, 0]
//         base_1 = [0, 0, Z]
//         base_2 = [0, Y-r, Z]
//         arc_2  = [0, Y-r+r*k, Z-r+r*k]
//         base_3 = [0, Y, Z-r]
//         base_4 = [0, Y, r]
//         arc_4  = [0, Y-r+r*k, r-r*k]
//         base_5 = [0, Y-r, 0]
//      }

      alto_0 = base_0
      alto_0.x = X

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento _graf_piano_inf_tav_ww
{
   Descrizione = ""
   Code        = TAV
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X     ""     1000
      Y     ""       80
      Z     ""    560
      HIDE  "" 1
   }

   PuntiNotevoli
   {
      K = X - 65
      T = Y - 3.5

      base_0 = [0,0,0]
      base_1 = [0,3.5,0]
      base_2 = [65,Y,0]
      base_3 = [K,Y,0]
      base_4 = [X,3.5,0]
      base_5 = [X,0,0]

      alto_0 = base_0   alto_0.z = Z
   }
}

Elemento _graf_piano_sup_tav_ww
{
   Descrizione = ""
   Code        = TAV
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X   ""     1000
      Y   ""       80
      Z   ""    560

      HIDE "" 1
   }

   PuntiNotevoli
   {
      K = X - 65
      T = Y - 14.5

      base_0 = [0,Y,0]
      base_1 = [65,T,0]
      base_2 = [65,0,0]
      base_3 = [K,0,0]
      base_4 = [K,T,0]
      base_5 = [X,Y,0]

      alto_0 = base_0   alto_0.z = Z

   }
}

Elemento _graf_teste_tav_ww
{
   Descrizione = ""
   Code        = TAV
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X   ""    65
      Y   ""    72
      Z   ""    14

      HIDE "" 1
      Lato "" -1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [X,0,0]
      base_2 = [X,0,Z]

      if( Lato > 0 )
      {
         base_0 = [0,0,Z]
         base_1 = [X,0,Z]
         base_2 = [X,0,0]
      }

      alto_0 = base_0   alto_0.y = Y
   }
}

//Simone 31/05/2022
Elemento _graf_prolunga_sup_tav_ww
{
   Descrizione = ""
   Code        = TAV
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X   ""      260
      Y   ""       18
      Z   ""      560

      HIDE "" 1
   }

   PuntiNotevoli
   {
      K = X - 65
      //T = Y - 14.5

      base_0 = [0,Y,0]
      base_1 = [65,0,0]
      base_2 = [K,0,0]
      base_3 = [X,Y,0]

      alto_0 = base_0   alto_0.z = Z
   }
}

Elemento _graf_prolunga_inf_tav_ww
{
   Descrizione = ""
   Code        = TAV
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X   ""      520
      Y   ""       80
      Z   ""      800

      HIDE "" 1
   }

   PuntiNotevoli
   {
      K = Z - 65
      T = Y - 18

      base_0 = [0,0,0  ]
      base_1 = [0,Y,0  ]
      base_2 = [0,T,K  ]
      base_3 = [0,18,K ]
      base_4 = [0,18,65]
      base_5 = [0,T,65 ]
      base_6 = [0,Y,Z  ]
      base_7 = [0,0,Z  ]

      alto_0 = base_0   alto_0.x = X
   }
}

Elemento PianoTavolo_HayAgeWood_AIR
{
   Descrizione = "Piano Tavolo Haywood/agewood AIR"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      VAR_Revisione_TavAir   ""                   -1 Implicit

      VAR_tipo_tav           "Tipologia"          "" Implicit
      VAR_mat_tav            "Materiale piano"    "" Implicit
      VAR_forma_tav          "Forma piano"        "" Implicit
      VAR_tipo_gambe         "Tipo Gambe"         "" Implicit
      VAR_3Sostegni          ""                    0 Implicit

      Spe_Piano              ""                   10

      perRADICE              ""                   ""
      RADICE                 ""                   ""

      COD_EREDITA            ""                   "PRE"

      FIN_var                ""                   "C044"
      FIN_orie               ""                   "V"
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "PTHAYAGE"
      if( VAR_tipo_tav == "BENCH" )  { perRADICE = "PABHAYAGE" }


      RADICE = perRADICE

      GOSUB ConfigSostegni_Tavolo_AIR
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Spe_Piano
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Spe_Piano

      //Simone 21/09/21 - Piano sp.62 se panca HAY/AGE
      if( VAR_tipo_tav == "BENCH" ) {GEST_Y = Spe_Piano + 12 }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco ret
   {
      GOSUB posa_blocco

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

      GOSUB rivestimento
   }

   Posiziona SupportoVetro_Tavoli_AIR sp1
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "V"
      @Verso = "DX"

      @LargVet = SostegnoV1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + X - SostegnoV1_OffX - @ProfVet
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   Posiziona SupportoVetro_Tavoli_AIR sp2
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "O"
      @Verso = "DX"

      @LargVet = SostegnoO1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoO1_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @ProfVet/2
   }

   Posiziona SupportoVetro_Tavoli_AIR sp3
   {
      @escluso = 1
      if( SostegnoV2 == 1 )  { @escluso = 0 }

      @OrieSupporto = "V"
      @Verso = "SX"

      @LargVet = SostegnoV2_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoV2_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 50 + 10
      aumento_y = 1.25

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

Elemento PianoTavolo_Vetro_AIR
{
   Descrizione = "Piano Tavolo Vetro AIR"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      VAR_Revisione_TavAir    ""                  -1   Implicit

      VAR_tipo_tav            "Tipologia"         ""   Implicit
      VAR_mat_tav             "Materiale piano"   ""   Implicit
      VAR_forma_tav           "Forma piano"       ""   Implicit
      VAR_tipo_gambe          "Tipo Gambe"        ""   Implicit

      Spe_Piano               ""                  10
      AltezzaSupporti         ""                  600

      VAR_3Sostegni           ""                  0    Implicit
      FLAG_Stondato           ""                  0

      perRADICE               ""                  ""
      RADICE                  ""                  ""

      COD_EREDITA             ""                  "PRE"

      Ord_Sost_Allegato       ""                  1

      FIN_var                 ""                  "C044"
      FIN_var_piano           ""                  ""
      FIN_var_fondo           ""                  ""
      FIN_val_fondo           ""                  ""
      FIN_orie                ""                  "O"

      m4s_exist               ""                  0    Implicit
      m4s_import              ""                  ""   Implicit

      FileSat1                ""                  ""   Implicit
      FileSat2                ""                  ""   Implicit
      FileSat3                ""                  ""   Implicit
      FileSat1_exist          ""                  0    Implicit
      FileSat2_exist          ""                  0    Implicit
      FileSat3_exist          ""                  0    Implicit

      XGLASS                  "Num. XGLASS"       ""   Utente   (   )
      VediXGlass_ShowAlways   ""                  1
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "PTVT"
      if( VAR_forma_tav == "ROUND"    )  { perRADICE = "PTTVTL"  }
      if( VAR_forma_tav == "BOTTE"    )  { perRADICE = "PTVTBS"  }
      if( VAR_forma_tav == "ORGANICO" )  { perRADICE = "PTVTORS" }

      if( VAR_mat_tav == "XGLASS"
        | VAR_mat_tav == "STRATUM" )
      {
         perRADICE = "PTVTXG"
         if( VAR_forma_tav == "ROUND"    )  { perRADICE = "PTTXG"     }
         if( VAR_forma_tav == "BOTTE"    )  { perRADICE = "PTVTXGBS"  }
         if( VAR_forma_tav == "ORGANICO" )  { perRADICE = "PTVTXGORS" }
      }

      if( VAR_forma_tav == "SOFT" )     { perRADICE = "PRASVTXG" }

      if( VAR_tipo_tav == "COFFEE" )
      {
         perRADICE = "PCTVL"
         if( VAR_mat_tav == "XGLASS" )  { perRADICE = "PCTVX" }

         if( VAR_forma_tav == "ROUND" )
         {
            perRADICE = "PCRVL"
            if( VAR_mat_tav == "XGLASS" )  { perRADICE = "PCRVX" }
         }

         if( VAR_forma_tav == "SOFT" )
         {
            perRADICE = "PCSVL"
            if( VAR_mat_tav == "XGLASS" )  { perRADICE = "PCSVX" }
         }
      }
      RADICE = perRADICE

      GOSUB ConfigSostegni_Tavolo_AIR

      Spe_Pia_inf = 8
      Spe_Pia_sup = 10

      if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1 )
      {
         Spe_Pia_sup = 9.9
         Spe_Pia_inf = 0.1
      }

      FIN_var_piano = "C044"
      FIN_var_fondo = ""
      FIN_val_fondo = ""
      if( VAR_EXIST(ATTUALE(),"GEST_C015") )
      {
         FIN_val_fondo = VAR_VAL_STR(ATTUALE(),"GEST_C015")
         if( FIN_val_fondo != "" & FIN_val_fondo != "__" )
         {
            FIN_var_fondo = "C015"
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Spe_Piano
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //Simone 24/09/2021
      //GEST_Y = Spe_Piano
      GEST_Y = Spe_Piano + 30

      if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1 )
      {
         GEST_Y = Spe_Piano
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend ret
   {
      @escluso = 0
      if( VAR_forma_tav != "RETTANGOLARE" ) { @escluso = 1 }

      @BLEND__ = 1
      GOSUB posa_blocco

      @base_0.x = base_0.x + 30
      @base_0.z = base_0.z + 30
      @X = X - 60
      @Z = Z - 60

      @base_0.y = base_0.y + Y - Spe_Piano
      @Y = Spe_Pia_inf - 0.1

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }

      if( VAR_tipo_tav == "COFFEE" )
      {
         @base_0.x = base_0.x + 1
         @base_0.z = base_0.z + 1
         @X = X - 2
         @Y = Spe_Pia_inf
         @Z = Z - 2

         @c_rivestimento = $c_bianco
         if( IS_MATCH(VAR_VAL_STR(idx_att,"GEST_C044"),"V*") == 1 )
         {
            FIN_var = FIN_var_fondo
            GOSUB rivestimento
            if( FIN_var_fondo == "" )
            {
               SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
            }
         }
      }
   }

   Posiziona BloccoBlend ret2
   {
      @escluso = 0
      if( VAR_forma_tav != "RETTANGOLARE" )     { @escluso = 1 }

      if( $VIRTUO | $VIRTUO_TEST | $OnTREND )  { @escluso = 1 }

      @BLEND__ = 1
      GOSUB posa_blocco

      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   //retrolaccatura xglass
   Posiziona Blocco rettr
   {
      @escluso = 1
      if( VAR_tipo_tav  != "COFFEE"
        & VAR_forma_tav == "RETTANGOLARE" )    { @escluso = 0 }
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND )  { @escluso = 1 }

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento
      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  )
      {
         @escluso = 0
         if( VAR_forma_tav != "RETTANGOLARE" )  { @escluso = 1 }
      }

      GOSUB posa_blocco

      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup

      @OrieVetro = "TOP"

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   Posiziona CilindroY cil
   {
      @escluso = 1
      if( VAR_forma_tav == "ROUND")
      {
         @escluso = 0
         if( m4s_exist == 1
           & VAR_tipo_tav == "COFFEE" ) { @escluso = 1 }
      }

      GOSUB posa_blocco

      @base_0.x = base_0.x + 30
      @base_0.z = base_0.z + 30
      @X = X - 60
      @Z = Z - 60

      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
      @base_0.y = base_0.y + Y - Spe_Piano
      @Y = Spe_Pia_inf - 0.1

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }

      //Simone 17/06/2022
      if( VAR_tipo_tav == "COFFEE" )
      {
         @base_0.x = base_0.x + 1
         @base_0.z = base_0.z + 1
         @X = X - 2
         @Y = Spe_Pia_inf
         @Z = Z - 2

         @c_rivestimento = $c_bianco
         if( IS_MATCH(VAR_VAL_STR(idx_att,"GEST_C044"),"V*") == 1 )
         {
            FIN_var = FIN_var_fondo
            GOSUB rivestimento
            if( FIN_var_fondo == "" )
            {
               SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
            }
         }
      }
   }

   Posiziona CilindroY cil2
   {
      @escluso = 1
      if( VAR_forma_tav == "ROUND" )  { @escluso = 0 }

      if( m4s_exist == 1 ) { @escluso = 1 }

      GOSUB posa_blocco

      //@base_0.y = base_0.y + Y - Spe_Piano
      //@Y = Spe_Piano
      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   //Simone 16/03/2023
   Posiziona M4S top
   {
      @escluso = 1
      if( m4s_exist == 1 )
      {
         if( VAR_forma_tav == "ROUND" )  { @escluso = 0 }
      }

      GOSUB posa_blocco

      @import = m4s_import

      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup

      FIN_var = FIN_var_piano
      GOSUB rivestimento
      @HIDE = 1
   }

   //retrolaccatura xglass
   Posiziona M4S toprt
   {
      @escluso = 1
      if( m4s_exist == 1 )
      {
         if( VAR_forma_tav == "ROUND" )  { @escluso = 0 }
      }

      GOSUB posa_blocco
      @import = m4s_import

      @X = X - 5
      @Y = 0.1
      @Z = @X

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

      GOSUB Scala_M4S
      @scale__ = [M4S_scala_x, M4S_scala_y, M4S_scala_z]

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      //TODO
      //if( VAR_tipo_tav == "COFFEE" )
      //{
      //   @c_rivestimento = $c_bianco
      //   if( IS_MATCH(VAR_VAL_STR(idx_att,"GEST_C044"),"V*") == 1 )
      //   {
      //      FIN_var = FIN_var_fondo
      //      GOSUB rivestimento
      //   }
      //}

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }

      @HIDE = 1
   }

   Posiziona __import__ piano1
   {
      @escluso = 1
      if( FileSat1_exist == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat1

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

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   Posiziona __import__ piano2
   {
      @escluso = 1
      if( FileSat2_exist == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat2

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }
      Posiziona __import__ piano3
   {
      @escluso = 1
      if( FileSat3_exist == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat3

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona BloccoSmussatoY blosmu
   {
      @escluso = 1
      if( IS_MATCH(VAR_forma_tav,"*SOFT") == 1 ) { @escluso = 0 }

      @X = X - 60
      @Y = Spe_Pia_inf - 0.1
      @Z = Z - 60

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

      @R0 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R1 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R2 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R3 = $PianoTavolo_Vetro_Air_Soft_Raggio

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }

      if( VAR_tipo_tav == "COFFEE" )
      {
         @base_0.x = base_0.x + 1
         @base_0.z = base_0.z + 1
         @X = X - 2
         @Y = Spe_Pia_inf
         @Z = Z - 2

         @c_rivestimento = $c_bianco
         if( IS_MATCH(VAR_VAL_STR(idx_att,"GEST_C044"),"V*") == 1 )
         {
            FIN_var = FIN_var_fondo
            GOSUB rivestimento
            if( FIN_var_fondo == "" )
            {
               SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
            }
         }
      }
   }

   Posiziona BloccoSmussatoY blosmu2
   {
      @escluso = 1
      if( IS_MATCH(VAR_forma_tav,"*SOFT") == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup

      @R0 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R1 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R2 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R3 = $PianoTavolo_Vetro_Air_Soft_Raggio

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   //retrolaccatura xglass
   Posiziona BloccoSmussatoY blosmrt
   {
      @escluso = 1
      if( VAR_tipo_tav != "COFFEE"
        & IS_MATCH(VAR_forma_tav,"*SOFT") == 1 ) { @escluso = 0 }

      GOSUB posa_blocco

      @Y = 0.1
      @base_0.y = base_0.y + Y - Spe_Pia_sup - @Y

      @R0 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R1 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R2 = $PianoTavolo_Vetro_Air_Soft_Raggio
      @R3 = $PianoTavolo_Vetro_Air_Soft_Raggio

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona _graf_piano_botte bot
   {
      @escluso = 1
      if( VAR_forma_tav == "BOTTE" ) { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.y = base_0.y + Y - Spe_Piano + Spe_Pia_inf
      @Y = Spe_Pia_sup - 0.1

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   Posiziona _graf_piano_botte sot
   {
      @escluso = 1
      if( VAR_forma_tav == "BOTTE" ) { @escluso = 0 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + 30
      @base_0.z = base_0.z + 30
      @X = X - 60
      @Z = Z - 60

      @base_0.y = base_0.y + Y - Spe_Piano
      @Y = Spe_Pia_inf - 0.1

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   //retrolaccatura xglass
   Posiziona _graf_piano_botte sotrt
   {
      @escluso = 1
      if( VAR_forma_tav == "BOTTE" ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = 0.1
      @base_0.y = base_0.y + Y - Spe_Pia_sup - @Y

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp1
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "V"
      @Verso = "DX"

      @LargVet = SostegnoV1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + X - SostegnoV1_OffX - @ProfVet
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @StaffaSNACK = 1
         @PosStaffa   = "RS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 32
         @base_0.z = base_0.z + 40
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp2
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      //Luca 07/12/2021
      if( SostegnoO1 == 0 ) { @escluso = 1 }


      @OrieSupporto = "O"
      @Verso = "DX"

      @LargVet = SostegnoO1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoO1_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @ProfVet/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "RD"

         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 40
         @base_0.z = base_0.z + 32
         @ang_y = -90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp3
   {
      @escluso = 1
      if( SostegnoV2 == 1 )  { @escluso = 0 }

      @OrieSupporto = "V"
      @Verso = "SX"

      @LargVet = SostegnoV2_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoV2_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 32
         @base_0.z = base_0.z + Z - 40
         @ang_y = 180
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp4
   {
      @escluso = 1

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 40
         @base_0.z = base_0.z + Z - 32

         @ang_y = 90
      }
   }
   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 80
      aumento_y = 2

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite

      if( VAR_forma_tav == "ROUND" )
      {
         @ContCollisione_Speciale = 1
         @Z = X
         @limite = limite
      }
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

Elemento PianoTavolo_Glass_AIR
{
   Descrizione = "Piano Tavolo glass"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      VAR_Revisione_TavAir   ""                   -1 Implicit

      VAR_tipo_tav           "Tipologia"          "" Implicit
      VAR_mat_tav            "Materiale piano"    "" Implicit
      VAR_forma_tav          "Forma piano"        "" Implicit
      VAR_tipo_gambe         "Tipo Gambe"         "" Implicit

      Spe_Piano              ""                   10

      AltezzaSupporti        ""                  600

      VAR_3Sostegni          ""                    0 Implicit

      Ord_Sost_Allegato      ""                    1

      perRADICE              ""                   ""
      RADICE                 ""                   ""

      COD_EREDITA            ""                "PRE"

      FIN_var                ""               "C044"
      FIN_orie               ""                  "O"

      VT_NFC                 "NFC"                 2
   }

   Assegnazioni
   {
      GOSUB AssComune

      perRADICE = "PTAGXG"

      RADICE = perRADICE

      GOSUB ConfigSostegni_Tavolo_AIR

      RieX_Vtr = 2
      RieY_Vtr = 1
      Spe_Vtr  = 4

      X_Pan    = X - 8
      Y_Pan    = 76
      Z_Pan    = Z - 8
      Spe_Pan  = 50
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Spe_Piano
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Spe_Piano

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona BloccoBlend vtr_r
   {
      @base_0.x = base_0.x + RieX_Vtr
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z
      @X = X - 2*RieX_Vtr
      @Y = Spe_Piano - 2*RieY_Vtr
      @Z = Spe_Vtr
      @BLEND__ = 1

      @ang_x = 180
      @base_0.y = @base_0.y + @Y
      @base_0.z = @base_0.z + @Z

      FIN_orie = "V"

      GOSUB rivestimento

      @FIN_CV_ORIE_PAN = "BIF"
   }

   Posiziona BloccoBlend vtr_f
   {
      @base_0.x = base_0.x + RieX_Vtr
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z + Z - Spe_Vtr
      @X = X - 2*RieX_Vtr
      @Y = Spe_Piano - 2*RieY_Vtr
      @Z = Spe_Vtr

      FIN_orie = "V"

      @BLEND__ = 1
      GOSUB rivestimento

      @FIN_CV_ORIE_PAN = "FRO"
   }

   Posiziona BloccoBlend vtr_sx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z + RieX_Vtr
      @X = Spe_Vtr
      @Y = Spe_Piano - 2*RieY_Vtr
      @Z = Z - 2*RieX_Vtr

      FIN_orie = "O"

      @BLEND__ = 1
      GOSUB rivestimento

      @FIN_CV_ORIE_PAN = "FIASX"
   }

   Posiziona BloccoBlend vtr_dx
   {
      @base_0.x = base_0.x + X - Spe_Vtr
      @base_0.y = base_0.y + Y - Spe_Piano
      @base_0.z = base_0.z + RieX_Vtr
      @X = Spe_Vtr
      @Y = Spe_Piano - 2*RieY_Vtr
      @Z = Z - 2*RieX_Vtr

      @ang_z = 180
      @base_0.y = @base_0.y + @Y
      @base_0.x = @base_0.x + @X

      FIN_orie = "O"
      @BLEND__ = 1
      GOSUB rivestimento

      @FIN_CV_ORIE_PAN = "FIADX"
  }

   Posiziona BloccoBlend vtr_pia
   {
      @base_0.x = base_0.x + RieX_Vtr
      @base_0.y = base_0.y + Y - Spe_Vtr
      @base_0.z = base_0.z + RieX_Vtr
      @X = X - 2*RieX_Vtr
      @Y = Spe_Vtr
      @Z = Z - 2*RieX_Vtr

      @FIN_CV_ORIE_PAN = "TOP"

      FIN_orie = "V"

      @BLEND__ = 1
      GOSUB rivestimento
   }

   //parte interna
   Posiziona Blocco st_pia
   {
      @base_0.x = base_0.x + X/2 - X_Pan/2
      @base_0.y = base_0.y + Y - Spe_Vtr - Spe_Pan
      @base_0.z = base_0.z + Z/2 - Z_Pan/2
      @X = X_Pan
      @Y = Spe_Pan
      @Z = Z_Pan

      @c_rivestimento = $c_bianco
    }

   Posiziona _graf_sottopiano_glass_air graf_rt
   {
      @base_0.x = base_0.x + X/2 - X_Pan/2
      @base_0.y = base_0.y + Y - Spe_Vtr - Y_Pan
      @base_0.z = base_0.z + Spe_Vtr
      @X = X_Pan
      @Y = Y_Pan - Spe_Pan
      @Z = Spe_Pan

      @c_rivestimento = $c_bianco
   }

   Posiziona _graf_sottopiano_glass_air graf_fr
   {
      @base_0.x = base_0.x + X/2 - X_Pan/2 + @X
      @base_0.y = base_0.y + Y - Spe_Vtr - Y_Pan
      @base_0.z = base_0.z + Z - Spe_Vtr
      @X = X_Pan
      @Y = Y_Pan - Spe_Pan
      @Z = Spe_Pan
      @ang_y = 180

      @c_rivestimento = $c_bianco
   }

   Posiziona _graf_sottopiano_glass_air graf_sx
   {
      @base_0.x = base_0.x + Spe_Vtr
      @base_0.y = base_0.y + Y - Spe_Vtr - Y_Pan
      @base_0.z = base_0.z + Z - Spe_Vtr
      @X = Z_Pan
      @Y = Y_Pan - Spe_Pan
      @Z = Spe_Pan
      @ang_y = 90

      @c_rivestimento = $c_bianco
   }

   Posiziona _graf_sottopiano_glass_air graf_dx
   {
      @base_0.x = base_0.x + X - Spe_Vtr
      @base_0.y = base_0.y + Y - Spe_Vtr - Y_Pan
      @base_0.z = base_0.z + Spe_Vtr
      @X = Z_Pan
      @Y = Y_Pan - Spe_Pan
      @Z = Spe_Pan
      @ang_y = -90

      @c_rivestimento = $c_bianco
   }

   Posiziona SupportoVetro_Tavoli_AIR sp1
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "V"
      @Verso = "DX"

      @LargVet = SostegnoV1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + X - SostegnoV1_OffX - @ProfVet
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @StaffaSNACK = 1
         @PosStaffa   = "RS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 32
         @base_0.z = base_0.z + 40
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp2
   {
      @escluso = 0
      if( VAR_tipo_tav == "SNACK" )  { @escluso = 1 }

      @OrieSupporto = "O"
      @Verso = "DX"

      @LargVet = SostegnoO1_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoO1_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @ProfVet/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "RD"

         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 40
         @base_0.z = base_0.z + 32
         @ang_y = -90
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp3
   {
      @escluso = 1
      if( SostegnoV2 == 1 )  { @escluso = 0 }

      @OrieSupporto = "V"
      @Verso = "SX"

      @LargVet = SostegnoV2_Dim
      @AltVet  = AltezzaVetro

      @base_0.x = base_0.x + SostegnoV2_OffX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FD"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + X - 32
         @base_0.z = base_0.z + Z - 40
         @ang_y = 180
      }
   }

   Posiziona SupportoVetro_Tavoli_AIR sp4
   {
      @escluso = 1

      if( VAR_tipo_tav == "SNACK" )
      {
         @escluso = 0

         @StaffaSNACK = 1
         @PosStaffa   = "FS"
         @OrieSupporto = "O"

         @LargVet = 150
         @AltVet  = AltezzaVetro

         @base_0.x = base_0.x + 40
         @base_0.z = base_0.z + Z - 32

         @ang_y = 90
      }
   }

   //Simone 15/02/2023
   Posiziona TAG_NFC nfc_fr
   {
      @base_0.x = base_0.x + X - @X - 3
      @base_0.y = base_0.y + Y - Spe_Piano + 1
      @base_0.z = base_0.z + Z
   }

   //secondo tag sul retro del tavolo
   Posiziona TAG_NFC nfc_rt
   {
      @ang_y = 180
      @base_0.x = base_0.x + @X + 3
      @base_0.y = base_0.y + Y - Spe_Piano + 1
      @base_0.z = base_0.z
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 80
      aumento_y = 2

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite

      if( VAR_forma_tav == "ROUND" )
      {
         @ContCollisione_Speciale = 1
         @Z = X
         @limite = limite
      }
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = Spe_Piano*aumento_y
      @Z = limite
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @escluso = 0
      if( VAR_forma_tav == "ROUND" )  { @escluso = 1 }

      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y - Spe_Piano/2 - @Y/2
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = Spe_Piano*aumento_y
      @Z = Z - 2*limite
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

Elemento _graf_sottopiano_glass_air
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X "" 20
      Y "" 1
      Z "" 10

      spe  "" 50

      c_rivestimento "" [255,255,255]
      HIDE "" 1
   }

   PuntiNotevoli
   {
      base_0 = [0,0,0]
      base_1 = [Z,0,Z]
      base_2 = [X-Z,0,Z]
      base_3 = [X,0,0]

      alto_0 = base_0
      alto_0.y = Y

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
}

Elemento SupportoVetro_Tavoli_AIR
{
   Descrizione = "Supporto vetro"
   Code        = CCSS
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile PianoTavolo_Wildwood_AIR
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      FILLER               " "             ""

      //le dimensioni corrispondono alla dimensione del vetro
      LargVet              "Larghezza"     400
      AltVet               "Altezza"       400
      ProfVet              "Spessore"      12

      //dimensione complete (con staffa)

      X                    ""              12
      Y                    ""              400
      Z                    ""              400

      Xt                   ""              12
      Yt                   ""              400
      Zt                   ""              400

      //V parallelo alla profondità del tavolo
      //O parallelo alla larghezza del tavolo
      OrieSupporto         ""              "V"    //Utente ( )

      //Indica la posizione della staffa rispetto al vetro (per regolazione)
      //nel caso di vetro 'O' il verso SX
      Verso                ""              "SX"   //Utente ( )

      StaffaSNACK          ""              0
      PosStaffa            ""              ""

      //Simone 30/11/21 - Nascondo per bloccare modifica finitura dal vetro
      #ifndef TEC
      HIDE                 ""              2
      #endif

      VAR_tipo_tav         "Tipologia"     ""     Implicit
      VAR_tipo_gambe       ""              ""     Implicit
      VAR_forma_tav        ""              ""     Implicit

      //Simone 15/06/2022 - Per tavolini
      idx_piano_tavolino   ""              -1     Implicit
      FLAG_Boccola         ""              0      Implicit
      FormaTopTav          ""              0      Implicit
      ModTavolino          ""              0      Implicit
      TipoTopTav           ""              ""     Implicit

      VAR_Raggio           ""              -1
      XGLASS               "Num. XGLASS"   ""     Utente   (   )
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7

      DescEdit__ = MSG(1292)

      Spe_Vtr = 12
      RieY_Vtr = 7
      if( UN_PADRE("TavolinoGenerico") & FLAG_Boccola == 0 ) { RieY_Vtr = 6 }

      Lar_Pie = 40
      Prf_Pie = 15
      Spe_Pie = 3

      X_Staffa = 150
      Y_Staffa = 30
      Z_Staffa = 70

      //Simone 13/12/2021 - Offset posizionamento boccole tavolini in base al vetro
      Off_boccola = 58
      if( LargVet >= 288 ) { Off_boccola = 69  }
      if( LargVet >= 460 ) { Off_boccola = 55  }
      if( LargVet >= 580 ) { Off_boccola = 106 }
      if( LargVet >= 644 ) { Off_boccola = 122 }
      if( LargVet >= 736 ) { Off_boccola = 92  }
      if( LargVet >= 920 ) { Off_boccola = 125 }
      if( VAR_tipo_tav == "COFFEE"
        & VAR_forma_tav == "ROUND"
        & LargVet == 368 ) { Off_boccola = 84  }

      GOSUB SetSuppVtrDimStaffa

      if( StaffaSNACK == 1 )
      {
         X_Staffa = 200
         Y_Staffa = 50
         //Simone 24/09/2021
         //Z_Staffa = 39
         Z_Staffa = 40

         RieY_Vtr = 11
      }

      //Luca 07/12/2021
      if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1
        | ( UN_PADRE("TavolinoGenerico") & FLAG_Boccola == 1 ))
        {
           HIDE = 2
           X_Staffa = 50
           Z_Staffa = 50
           RieY_Vtr = 5
        }

      //Simone 15/09/2022 - Pleasure
      //Riposiziono solo per questo caso specifico in seguito alla modifica del vetro
      if( LargVet == 368
        & ModTavolino == 0
        & FormaTopTav == 3
        & TipoTopTav  == "WILDWOOD" ) { Off_boccola = Off_boccola + 35 }

      //Simone 11/04/2023 - Trapezoidale
      if( ModTavolino == 1 )
      {
         Off_boccola = 106
      }

      VAR_Raggio = -1
      if( VAR_tipo_gambe == "SOFT" ) { VAR_Raggio = $PianoTavolo_Vetro_Air_Soft_Raggio }
   }

   PuntiNotevoli
   {
      X = ProfVet
      Y = AltVet
      Z = LargVet

      if( OrieSupporto == "O" )
      {
         X = LargVet
         Y = AltVet
         Z = ProfVet
      }

      Yt = Y + Spe_Pie + RieY_Vtr

      GOSUB punti_Yt
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      base_0.x = $vano_0.x
      base_0.y = $vano_0.y
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona SupportoVetro_Staffa staff
   {
      @base_0.x = base_0.x + (X - X_Staffa)/2
      @base_0.y = base_0.y + Yt - Y_Staffa
      @base_0.z = base_0.z - 26

      @X = X_Staffa
      @Y = Y_Staffa
      @Z = Z_Staffa

      @ang_y = 0

      if( OrieSupporto == "V" )
      {
         @base_0.x = base_0.x
         @base_0.z = base_0.z

         if( Verso == "SX" )
         {
            @ang_y = 90

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

         if( Verso == "DX" )
         {
            @ang_y = -90

            @base_0.z = base_0.z + (Z - X_Staffa)/2
            @base_0.x = base_0.x + 38
         }
      }

      if( StaffaSNACK == 1 )
      {
         @StaffaSNACK = StaffaSNACK

         //da controllare posizioni grafiche
         @base_0.x = base_0.x - 50
         @base_0.y = base_0.y + Yt - Y_Staffa
         @base_0.z = base_0.z - 12
      }

      @OrieSupporto = OrieSupporto
      @Verso        = Verso

      //Luca 07/12/2021
      @escluso = 0
      if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1 ) { @escluso = 1 }

      //Simone 15/06/2022
      if( UN_PADRE("TavolinoGenerico") )
      {
         @base_0.y = base_0.y + Yt - Y_Staffa - 3
         if( FLAG_Boccola == 1 ) { @escluso = 1 }
         @GEST_IDXPADRE = idx_piano_tavolino
      }
   }

   Posiziona SupportoVetro_Sost sost
   {
      @base_0 = base_0
      @X = LargVet
      @Y = AltVet + Spe_Pie
      if( UN_PADRE("TavolinoGenerico")
        | IS_MATCH( VAR_tipo_tav , "COFFEE*" )==1 )
      {
         @Y = AltVet
      }
      @Z = ProfVet

      @ang_y = 0

      if( OrieSupporto == "V" )
      {
         @base_0.x = base_0.x + @Z
         @ang_y = -90
      }

      @OrieSupporto = OrieSupporto
   }

   //Simone 13/12/2021
   Posiziona BoccolaTavolino boc1
   {
      @escluso = 1
      if( IS_MATCH( VAR_tipo_tav , "COFFEE*" ) == 1 ) { @escluso = 0 }

      //Simone 15/06/2022
      if( UN_PADRE("TavolinoGenerico") & FLAG_Boccola == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x - 18
      @base_0.y = base_0.y + Yt - Y_Staffa - 3
      @base_0.z = base_0.z - Z_Staffa/2 + Off_boccola

      @ang_y = 0

      if( OrieSupporto == "V" )
      {
         if( Verso == "DX" )
         {
            @ang_y = -180
            @base_0.x = base_0.x + 18 + Spe_Vtr
            @base_0.z = base_0.z + Z_Staffa/2 + Off_boccola
         }
      }
      else
      {
         if( Verso == "DX" )
         {
            @ang_y = 90
            @base_0.z = base_0.x + 18 + Spe_Vtr
            @base_0.x = @base_0.z - 30 - X_Staffa/2 + Off_boccola
         }

         if( Verso == "SX" )
         {
            @ang_y = -90
            @base_0.z = base_0.x - 18
            @base_0.x = base_0.z + Z_Staffa/2 + Off_boccola
         }
      }
   }

   Posiziona BoccolaTavolino boc2
   {
      @escluso = 1
      if( IS_MATCH( VAR_tipo_tav , "COFFEE*" ) == 1 ) { @escluso = 0 }

      //Simone 15/06/2022
      if( UN_PADRE("TavolinoGenerico") & FLAG_Boccola == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x - 18
      //@base_0.y = base_0.y + Spe_Pie + AltVet - 28
      @base_0.y = base_0.y + Yt - Y_Staffa - 3
      @base_0.z = base_0.z + LargVet - Z_Staffa/2 - Off_boccola

      @ang_y = 0

      if( OrieSupporto == "V" )
      {
         if( Verso == "DX" )
         {
            @ang_y = -180
            @base_0.x = base_0.x + 18 + Spe_Vtr
            @base_0.z = base_0.z + LargVet + Z_Staffa/2 - Off_boccola
         }
      }
      else
      {
         if( Verso == "DX" )
         {
            @ang_y = 90
            @base_0.z = base_0.x + 18 + Spe_Vtr
            @base_0.x = @base_0.z - 30 + LargVet - Z_Staffa/2 - Off_boccola
         }

         if( Verso == "SX" )
         {
            @ang_y = -90
            @base_0.z = base_0.x - 18
            @base_0.x = base_0.z + LargVet + Z_Staffa/2 - Off_boccola
         }
      }
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}
}

//Simone 13/12/2021
Elemento BoccolaTavolino
{
   Descrizione = "Boccola supporto vetro"
   Code        = ""
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"           50
      Y                 "Altezza"             30
      Z                 "Profondità"          50

      M4_NO_OFFS        "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      sat_file = STRCAT($path_sat,"Tavolini\Borchia.SAT")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ boc
   {
      GOSUB posa_blocco

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @import = sat_file

      GOSUB rivestimento
      @c_rivestimento = $c_alluminio
   }
}

Elemento LavorazioneStaffa_Tav_AIR
{
   Descrizione = "lavorazione staffe vetro"
   Code        = CCSS
   Gruppo      = "AIR"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X     ""  12
      Y     "" 400
      Z     "" 400

      LargVet  "" 0
      sat_file "" ""

      Verso    "" ""  Implicit

      VAR_tipo_tav "Tipologia"          "" Implicit
      VAR_mat_tav  "Materiale piano"    "" Implicit

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7

      //Simone 09/11/2022
      idx_topl = GetTopLevel(ATTUALE())

      sat_usa  = 0

      sat_path = STRCAT($path_sat,"Cucina\SupportiVetro\")
      sat_ext  = ".sat"
      sat_staffa_pre = "LavStaffa_"

      Spe_Piano = VAR_VAL(PADRE(idx_att,3),"Spe_Piano")
      if( Spe_Piano == 0 ) { Spe_Piano = VAR_VAL(PADRE(idx_att,3),"VAR_SpePiano") }

      pcv_x = X + 70 + 70
      pcv_y = Spe_Piano + 20
      pcv_z = Z + 30 + 0.5 + 15 + 15

      if( VAR_mat_tav == "HAYWOOD" )
      {
         pcv_x = VAR_VAL(PADRE(ATTUALE(),2),"LargVet") + 15 + 15
         pcv_z = Z + 15 + 15
      }

      if( VAR_mat_tav == "LAMINATO" )
      {
         sat_usa  = 1

         if( VAR_tipo_tav == "SNACK" )
         {
            pcv_x = X + 46
            pcv_z = Z + 53
         }
      }

      if( VAR_mat_tav == "WILDWOOD" )
      {
         sat_usa  = 1
         if( VAR_tipo_tav == "EXTENDABLE" ) { sat_usa  =  0  pcv_y = Spe_Piano + 10 + 40 }

         pcv_x = X + 85 + 85
         pcv_z = Z + 15 + 15

         if( VAR_tipo_tav == "SNACK" )
         {
            pcv_x = X + 46
            pcv_z = Z + 53
         }
      }

      if( VAR_mat_tav == "VETRO"
        | VAR_mat_tav == "XGLASS"
        | VAR_mat_tav == "STRATUM" )
      {
         pcv_x = VAR_VAL(PADRE(ATTUALE(),2),"LargVet") + 20 + 20
         pcv_z = Z + 20 + 20
         pcv_y = 30 + Spe_Piano + 10
      }

      //Simone 02/12/2022
      if( IS_MATCH(NOME(idx_topl),"Scrivania*AIR") == 1 )
      {
         if( VAR_VAL(idx_topl,"VAR_Materiale") == 2
           | VAR_VAL(idx_topl,"VAR_Materiale") == 3 )
         {
            //se la scrivania è ridotta in prfondità non faccio lo scasso della lavorazione perchè ho a disposizione solo quelli std
            if( VAR_VAL(idx_topl,"Z") == VAR_VAL(idx_topl,"ORD_Z") )  { sat_usa = 1 }
         }
      }

      //var utilizzata in stampa
      Stp_AddDettaglioLav = sat_usa
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      sat_staffa_post = ""
      if( LargVet > 0 ) { sat_staffa_post = STRCAT( "-Vetro_", STR(LargVet)) }

      sat_staffa_name = STRCAT(sat_staffa_pre,STR(X),sat_staffa_post,sat_ext)
      //Simone 01/12/2022
      if( NOME(PADRE(ATTUALE(),1)) == "StaffaXSostegno_368" )
      {
         sat_staffa_name = STRCAT(sat_staffa_pre,STR(Z),sat_staffa_post,sat_ext)
      }

      sat_staffa_file = STRCAT(sat_path,sat_staffa_name)

      sat_file = ""

      if( FILE_EXIST(sat_staffa_file) & sat_usa )
      {
         sat_file = sat_staffa_file
      }
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @escluso = 0
      if( UN_PADRE("ScrivaniaMuro_AIR") ) { @escluso = 1 }

      @X = pcv_x
      @Y = pcv_y
      @Z = pcv_z
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_mat_tav == "LAMINATO"
        | VAR_mat_tav == "WILDWOOD"  )
      {
         @base_0.z = base_0.z - 15.5
      }

      if( VAR_tipo_tav == "SNACK" )
      {
         @base_0.z = base_0.z - 15
      }
   }

   //Posiziona __import__ sta
   //{
   //   @escluso = 1
   //
   //   if( sat_file != "" )
   //   {
   //      @escluso = 0
   //   }
   //
   //   GOSUB posa_blocco
   //
   //   @base_0.x = base_0.x + X/2
   //   @base_0.z = base_0.z + Z/2
   //
   //   @import = sat_file
   //}

   Posiziona Import_Scassa sta
   {
      @escluso = 1

      if( sat_file != "" )
      {
         @escluso = 0
      }

      GOSUB posa_blocco

      @ang_y = 0
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y - 2
      @base_0.z = base_0.z + Z/2

      //Simone 02/12/2022
      if( IS_MATCH(NOME(idx_topl), "Scrivania*AIR") == 1 )
      {
         @ang_y = -90
         if( Verso == "SX" ) { @ang_y = 90 }
      }

      @import = sat_file
      @Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(idx_topl,"idx_grafica_piano_sotto")),";",STR(VAR_VAL(idx_topl,"idx_grafica_piano_sotto_web")))
   }

   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}
}
//} TAVOLO AIR

Subroutine
{
   PROCEDURA AssMensole_Air
   {
      if( nome_att == "Mensola_Air"
        | nome_att == "MensolaDepth_Air"  )
      {
         COD_EREDITA = "PRE;POST"

         M4_MIS = "Filler*;X;Y;Z;VAR_Materiale;VAR_LatiFin;VAR_Depth*"

         VAR_MaterialeStr = "WILDWOOD"
         if( VAR_Materiale == 1 ) { VAR_MaterialeStr = "LAMINATO" }
         if( VAR_Materiale == 2 ) { VAR_MaterialeStr = "LACCATO" }

         if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

         if( $ATTIVA_DLL & ACTION()==0 )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Materiale",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_LatiFin",1)

            if( nome_att == "MensolaDepth_Air"   ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_DepthDoppio",1) }
         }

         if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder != 1 & $ATTIVA_DLL==1 )
         {
            VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
            VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

            //Luca 19/03/2021
            //in presenza di lavabo INBILICO non posso ridurre
            ConLavInbilico = 0
            COMPONENTI2("wk_lav",ATTUALE(),"LavaboGenerico")
            i = 1
            while ( i <= wk_lav )
            {
               if( VAR_VAL_STR(wk_lav[i],"TipoLavaboStr") == "INBILICO" ) { ConLavInbilico = 1 }
               i = i + 1
            }
            if( ConLavInbilico == 1 ) { VarFlgChangeZ = 0 }

            CtrlRangeRidM2G(ATTUALE(),"X")
            CtrlRangeRidM2G(ATTUALE(),"Z")
         }
      }
   }

   PROCEDURA Config_Staffe_Mensola_Air
   {
      if( ACTION() <= 0 | ACTION() == 2  )  { EXITSUB()  }

      //Luca 06/12/2021 gestisco sostituzione quote x lavello kera
      StaffaDP_SX = 0
      StaffaDP_DX = 0

      StaffaDP_3 = 0
      StaffaDP_4 = 0

      FLAG_LavaboKERA = 0
      COMPONENTI2("wk_kera",ATTUALE(),"LavaboKERA")
      if( wk_kera > 0 )
      {
         idx_KERA = wk_kera[1]

         wk_off_kera = VAR_VAL(idx_KERA,"OffsetX") + VAR_VAL(idx_KERA,"X")/2

         //se il KERA non è centrato --> sempre staffe depth
         FLAG_LavaboKERA = 1
         if( wk_off_kera == X/2 )
         {
            //se centrato dipende da misure
            if( X > 736 )
            {
               if( VAR_VAL(idx_KERA,"X") == 400
                 & VAR_VAL(idx_KERA,"Z") == 400  ) { FLAG_LavaboKERA = 0 }

               if( VAR_VAL(idx_KERA,"X") == 500
                 & VAR_VAL(idx_KERA,"Z") == 380  ) { FLAG_LavaboKERA = 0 }
            }

            //qualiasi dimensione
            if( X > 1472 & X <=1840 ) { FLAG_LavaboKERA = 0 }
            //qualiasi dimensione
            if( X > 2208 )            { FLAG_LavaboKERA = 0 }
         }

         if( FLAG_LavaboKERA == 1  )
         {
            HIDE_ON_EDIT(ATTUALE(),"Staffa_Utente;StaffaSX_Utente;StaffaDX_Utente",1)
            HIDE_ON_EDIT(ATTUALE(),"Staffa_PosUtente;StaffaSX_PosUtente;StaffaDX_PosUtente",1)

            GOSUB Config_StaffeDepth_Mensola_Air_KERA

            wk_num_staffe = 0
            StaffaSX = 0
            StaffaDX = 0

            EXITSUB()
         }
      }

      wk_num_staffe = 1
      if( X > 1104 )  { wk_num_staffe = 2 }

      StaffaSX = 1
      StaffaDX = 0
      if( wk_num_staffe == 2 ) { StaffaDX = 1 }

      // CALCOLO DIMENSIONE STAFFE NECESSARIE
      // --- PROFONDITA'
      StaffaSX_Z = 247
      if( Z >= 485 )   { StaffaSX_Z = 427 }

      //Simone 24/01/2022
      //if( VAR_MaterialeStr == "LAMINATO" )
      //{
      //   if( Z <= 370 ) { StaffaSX_Z = 205 }
      //}
      StaffaDX_Z = StaffaSX_Z

      // --- LARGHEZZA: utilizzo larghezza nominale (lavorazione, +16x +4y)
      StaffaSX_X = 408
      if( X >= 920 )   { StaffaSX_X = 778 }

      if( wk_num_staffe==2 )
      {
         StaffaSX_X = 408
         if( X > 1840 )   { StaffaSX_X = 778 }

         StaffaDX_X = StaffaSX_X
      }

      // --- POSIZIONE IN LARGHEZZA
      StaffaSX_OX = X/2 - StaffaSX_X/2

      if( wk_num_staffe == 2 )
      {
         StaffaSX_OX = 137
         StaffaDX_OX = 137
      }

      //Luca 19/01/2022
      //rivedo limiti staffe: mantis 25474: AIR - Specifiche riduzioni mensole laccate
      if( VAR_MaterialeStr == "LAMINATO"
        | VAR_MaterialeStr == "LACCATO"  )
      {
         if( wk_num_staffe == 2 )
         {
            offx_staffe = 137
            if( X <= 1472 )             { offx_staffe = 71 }
            if( X > 1840 & X <= 2208  ) { offx_staffe = 71 }

            StaffaSX_OX = offx_staffe
            StaffaDX_OX = offx_staffe
         }

         //regole in profondità
         StaffaSX_Z = 205
         if( Z >= 310 )   { StaffaSX_Z = 247 }
         if( Z >= 420 )   { StaffaSX_Z = 367 }
         if( Z >= 485.5 ) { StaffaSX_Z = 427 }

         StaffaDX_Z = StaffaSX_Z
      }

      // POSIZONE STAFFE UTENTE
      if( wk_num_staffe == 1 )
      {
         if( Staffa_Utente == 1 ) { StaffaSX_OX = Staffa_PosUtente }
      }

      if( wk_num_staffe == 2 )
      {
         if( StaffaSX_Utente == 1 ) { StaffaSX_OX = StaffaSX_PosUtente }
         if( StaffaDX_Utente == 1 ) { StaffaDX_OX = StaffaDX_PosUtente }
      }

      //se non forzati, prendo i valori di defualt
      if( IS_VAR_FIXED(ATTUALE(),"Staffa_PosUtente") == 0 )   { Staffa_PosUtente   = StaffaSX_OX }
      if( IS_VAR_FIXED(ATTUALE(),"StaffaSX_PosUtente") == 0 ) { StaffaSX_PosUtente = StaffaSX_OX }
      if( IS_VAR_FIXED(ATTUALE(),"StaffaDX_PosUtente") == 0 ) { StaffaDX_PosUtente = StaffaDX_OX }

      //-- GESTIONE VISIBILITA' VARIABILI
      #ifdef AGE;RIV
         HIDE_ON_EDIT(ATTUALE(),"Staffa_Utente;StaffaSX_Utente;StaffaDX_Utente",1)
         HIDE_ON_EDIT(ATTUALE(),"Staffa_PosUtente;StaffaSX_PosUtente;StaffaDX_PosUtente",1)
      #endif

      #ifndef AGE;RIV
         //M4_MIS = "Filler*;X;Y;Z;VAR_Materiale;VAR_LatiFin;Staffa*"
         M4_MIS = "Filler*;X;Y;Z;VAR_Materiale;VAR_LatiFin*"

         HIDE_ON_EDIT2( ATTUALE() , "Staffa_Utente"   , SE_NUM(wk_num_staffe==1,0,1))
         HIDE_ON_EDIT2( ATTUALE() , "StaffaSX_Utente" , SE_NUM(wk_num_staffe==1,1,0))
         HIDE_ON_EDIT2( ATTUALE() , "StaffaDX_Utente" , SE_NUM(wk_num_staffe==1,1,0))

         HIDE_ON_EDIT2( ATTUALE() , "Staffa_PosUtente"   , SE_NUM(Staffa_Utente==1,0,1) )
         HIDE_ON_EDIT2( ATTUALE() , "StaffaSX_PosUtente" , SE_NUM(StaffaSX_Utente==1,0,1) )
         HIDE_ON_EDIT2( ATTUALE() , "StaffaDX_PosUtente" , SE_NUM(StaffaDX_Utente==1,0,1) )

         limx = 35
         VAR_SET_MENU(ATTUALE(),"Staffa_PosUtente"  ,STRCAT("( ",STR(limx),"-",STR(X-StaffaSX_X-limx)," )"))

         limsx_min = 35
         limsx_max = X - StaffaDX_OX - StaffaDX_X - 50
         if( StaffaDX_Utente == 1 ) { limsx_max = X - StaffaDX_PosUtente - StaffaDX_X - 50 }
         limsx_max  = limsx_max - StaffaSX_X
         if( limsx_max < limsx_min ) { limsx_min = limsx_max }
         VAR_SET_MENU(ATTUALE(),"StaffaSX_PosUtente",STRCAT("( ",STR(limsx_min),"-",STR(limsx_max)," )"))
         if( IS_VAR_FIXED(ATTUALE(),"StaffaSX_PosUtente") & StaffaSX_Utente == 1 )
         {
            if( StaffaSX_PosUtente < limsx_min
              | StaffaSX_PosUtente > limsx_max  ) { CHIEDI(ATTUALE(),"StaffaSX_PosUtente") }
         }

         limdx_min = 35
         limdx_max = X - StaffaSX_OX - StaffaSX_X - 50
         if( StaffaSX_Utente == 1 ) { limdx_max = X - StaffaSX_PosUtente - StaffaSX_X - 50 }
         limdx_max  = limdx_max - StaffaDX_X
         if( limdx_max < limdx_min ) { limdx_min = limdx_max }
         VAR_SET_MENU(ATTUALE(),"StaffaDX_PosUtente",STRCAT("( ",STR(limdx_min),"-",STR(limdx_max)," )"))
         if( IS_VAR_FIXED(ATTUALE(),"StaffaDX_PosUtente") & StaffaDX_Utente == 1 )
         {
            if( StaffaDX_PosUtente < limdx_min
              | StaffaDX_PosUtente > limdx_max  ) { CHIEDI(ATTUALE(),"StaffaDX_PosUtente") }
         }

      #endif


      //PARAMETRI STAFFA
      //Staffa_Z = 247
      //if( Z >= 485 )   { Staffa_Z = 427 }
      //
      ////LAMINATO
      //if( VAR_MaterialeStr == "LAMINATO" )
      //{
      //   if( Z <= 370 ) { Staffa_Z = 205 }
      //}
      //
      //
      //Staffa_Num = 1
      //if( X > 1104 )  { Staffa_Num = 2 }
      //
      //Staffa_X = 392
      //if( X >= 920 )   { Staffa_X = 762 }
      //
      //Staffa_OX = X/2 - Staffa_X/2
      //
      //if( Staffa_Num==2 )
      //{
      //   Staffa_X = 392
      //   if( X > 1840 )   { Staffa_X = 762 }
      //
      //   Staffa_OX = 145
      //}
   }

   PROCEDURA CtrlLed_Mensola_Air
   {
      if( ACTION() <= 0 | ACTION() == 2  )  { EXITSUB()  }

      if( ACTION() >= 0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"LED_PosLavTrasf",1)
         HIDE_ON_EDIT2(ATTUALE(),"LED_OffLavTrasf",1)
         HIDE_ON_EDIT2(ATTUALE(),"LED_PosLavTrasf",1 - LED_Trasf)
         HIDE_ON_EDIT2(ATTUALE(),"LED_OffLavTrasf",1 - LED_PosLavTrasf)

         HIDE_ON_EDIT2(ATTUALE(),"GEST_C165",0)
      }

      LED_Lunghezza = X - 6.5 - 6.5

      // assorbimento 11w/m
      xm = LED_Lunghezza/1000
      LED_Watt =  LED_Sopra*(11 * xm) + LED_Sotto*(11 * xm)

      LED_Trasf = 0

      if( LED_Sopra == 0 & LED_Sotto == 0 ) { EXITSUB() }

      LED_Trasf = 1

      //identifico il trasformatore necessario

      LED_LavTrasfX = 104
      LED_LavTrasfZ = 250

      if( Z <= 270 )
      {
         if( X >= 1288 )
         {
            LED_LavTrasfZ = 104
            LED_LavTrasfX = 310
         }
         if( X >= 1840.5 ) { LED_LavTrasfX = 340 }
      }

      //Posizione lavorazione di default
      if( LED_PosLavTrasf == 0 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"LED_OffLavTrasf")
         LED_OffLavTrasf = StaffaSX_OX + StaffaSX_X/2
         if( Z <= 270 )
         {
            if( X >= 1288 & X <= 1840 ) { LED_OffLavTrasf = X/2 }
         }
         EXITSUB()
      }

      Range_LB_1S = -1  Range_LB_1E = -1
      Range_LB_2S = -1  Range_LB_2E = -1
      Range_LB_3S = -1  Range_LB_3E = -1

      //recupero info dalla mensola
      idx_men = GetTopLevel(ATTUALE())

      NumStaffe = VAR_VAL(idx_men,"StaffaSX") + VAR_VAL(idx_men,"StaffaDX")
      LarStaffe = VAR_VAL(idx_men,"StaffaSX_X")

      //STAFFA 408
      // -- NON POSSIBILE ALL'INTERNO
      // -- POSSIBILE CON SORMONTO DI 33 mm
      //Luca 05/05/2021 diventa 28
      // -- POSSIBILE CON SORMONTO DI 28 mm

      //STAFFA 778
      // -- POSSIBILE ALL'INTERNO -- DA 133mm a X STAFFA - 133mm

      SET_#(idx_men)

      dist_da_st = 15

      if( NumStaffe == 1 )
      {
         Range_LB_1S = #StaffaSX_OX + 90 + 8 + dist_da_st
         Range_LB_1E = Range_LB_1S + #StaffaSX_X - 196 - 2*dist_da_st
      }

      if( NumStaffe == 2 )
      {
         Range_LB_1S = #StaffaSX_OX + 90 + 8 + dist_da_st
         Range_LB_1E = Range_LB_1S + #StaffaSX_X - 196 - 2*dist_da_st

         Range_LB_3S_tmp = #StaffaDX_OX + 90 + 8 + dist_da_st
         Range_LB_3E_tmp = Range_LB_3S_tmp + #StaffaDX_X - 196 - 2*dist_da_st

         Range_LB_3S = #X - Range_LB_3E_tmp
         Range_LB_3E = #X - Range_LB_3S_tmp

         Range_LB_2S = Range_LB_1E + dist_da_st + 30 + dist_da_st
         Range_LB_2E = Range_LB_3S - dist_da_st - 30 - dist_da_st
      }

      //DEVO PERO' CALCOLARE I LIMITI FACENDO RIFERIMENTO AL CENTRO VASCA
      if( Range_LB_1S > 0  )  { Range_LB_1S = Range_LB_1S + LED_LavTrasfX/2 }
      if( Range_LB_1E > 0  )  { Range_LB_1E = Range_LB_1E - LED_LavTrasfX/2 }

      if( Range_LB_2S > 0  )  { Range_LB_2S = Range_LB_2S + LED_LavTrasfX/2 }
      if( Range_LB_2E > 0  )  { Range_LB_2E = Range_LB_2E - LED_LavTrasfX/2 }

      if( Range_LB_3S > 0  )  { Range_LB_3S = Range_LB_3S + LED_LavTrasfX/2 }
      if( Range_LB_3E > 0  )  { Range_LB_3E = Range_LB_3E - LED_LavTrasfX/2 }

      wk_pos_ok = 0
      vv=1

      while( wk_pos_ok  == 0 )
      {
         wk_msg    = STRCAT(MSG(1135),"\n",MSG(1212))

         if( Range_LB_1S > 0  )
         {
            if( LED_OffLavTrasf >= Range_LB_1S & LED_OffLavTrasf <= Range_LB_1E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n", "    ", STR(Range_LB_1S-1) , " < Offset X < " , STR(Range_LB_1E+1) )
         }

         if( Range_LB_2S > 0  )
         {
            if( LED_OffLavTrasf >= Range_LB_2S & LED_OffLavTrasf <= Range_LB_2E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n", "    ", STR(Range_LB_2S-1) , " < Offset X < " , STR(Range_LB_2E+1) )
         }

         if( Range_LB_3S > 0  )
         {
            if( LED_OffLavTrasf >= Range_LB_3S & LED_OffLavTrasf <= Range_LB_3E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n","    ", STR(Range_LB_3S-1) , " < Offset X < " , STR(Range_LB_3E+1) )
         }

         if( wk_pos_ok == 0 )
         {
            if( $CNP ==1 | $CNP__ == 1 | $PLIKO == 1 )
            {
               //esco altrimenti va in loop
               wk_pos_ok = 2
               COMANDO2(STRCAT("LOGMSG  LAVABO ",TipoLavaboStr ," [idx",STR(ATTUALE()), "] POSIZIONE NON VALIDA"))
            }
            else
            {
               wk_cancella = 0
               if( Range_LB_1S < 0 & Range_LB_1E < 0 ) { wk_cancella = 1 }
               if( Range_LB_1S > Range_LB_1E )         { wk_cancella = 1 }

               DISPLAY2(wk_msg)
               CHIEDI(ATTUALE(),"LED_OffLavTrasf")
            }
         }
         vv = vv + 1
         if( vv > 5 )
         {
            DISPLAY2("Ripristino posizione standard.")

            DEL_VAR_MODIFICATE(ATTUALE(),"LED_PosLavTrasf")
            LED_PosLavTrasf = 0

            LED_OffLavTrasf = StaffaSX_OX + StaffaSX_X/2
            DEL_VAR_MODIFICATE(ATTUALE(),"LED_OffLavTrasf")

            wk_pos_ok = 2
         }
      }
   }

   //Simone 04/07/2022
   PROCEDURA Set_Posizione_Led_Mensola_Air
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C165") == 0 )    { EXITSUB() }
      if( IS_VAR_FIXED(ATTUALE(),"LED_Sopra") == 1 ) { DEL_VAR_MODIFICATE( ATTUALE(),"LED_Sopra") }
      if( IS_VAR_FIXED(ATTUALE(),"LED_Sotto") == 1 ) { DEL_VAR_MODIFICATE( ATTUALE(),"LED_Sotto") }

      LED_Sopra = 0
      LED_Sotto = 0

      if( IS_MATCH(GEST_C165, "*SM025*") )  { LED_Sotto = 1 }
      // speciale
      if( IS_MATCH(GEST_C165, "*SM023*") )  { LED_Sopra = 1 }
      // valore non più disponibile dal 04/03/25
      if( GEST_C165 == "SM026" )  { LED_Sopra = 1
                                    LED_Sotto = 1 }

      #ifndef TE
      if( GEST_C165 != "__"
        & GEST_C165 != "SM025" )  { DEL_VAR_MODIFICATE( ATTUALE(),"GEST_C165") }
      #endif

      M4_VAR = "GEST_C165;GEST_C028"
   }

   PROCEDURA Config_StaffeDepth_Mensola_Air_KERA
   {
      StaffaDP_SX = 1
      StaffaDP_DX = 1

      StaffaDP_SX_OX = 11
      StaffaDP_DX_OX = 11

      StaffaDP_SX_Z = 313
      if( Z >= 475 )
      {
         StaffaDP_SX_Z = 427
         if( Z <= 499 ) { StaffaDP_SX_Z = 427 - 40 }
      }

      StaffaDP_DX_Z = StaffaDP_SX_Z

      wk_x_staffa = 225

      wk_numero_st = 2
      if( X > 1104 )  { wk_numero_st = 3 }
      if( X > 2208 )  { wk_numero_st = 4 }

      if( wk_numero_st == 2 )  { EXITSUB() }

      //trovo l'idx del lavabo KERA
      idx_KERA = -1
      COMPONENTI2("wk_kera",ATTUALE(),"LavaboKERA")
      if( wk_kera > 0 )  { idx_KERA = wk_kera[1] }

      if( IS_IDX(idx_KERA) == 0 )  { EXITSUB() }

      SET_#(idx_KERA)

      StaffaDP_3 = 1
      StaffaDP_3_Z = StaffaDP_SX_Z
      StaffaDP_3_OX = #OffsetX + #X - 160
      StaffaDP_3_Vrs = 1

      wk_pos_staffa_dx = X - StaffaDP_DX_OX -  wk_x_staffa

      if( StaffaDP_3_OX + wk_x_staffa + 50 > wk_pos_staffa_dx )
      {
         StaffaDP_3_Vrs = -1
         StaffaDP_3_OX = #OffsetX - 70
      }

      if( wk_numero_st == 4 )
      {
         StaffaDP_4 = 1
         StaffaDP_4_Z = StaffaDP_SX_Z

         StaffaDP_4_Vrs = -1
         StaffaDP_4_OX = #OffsetX - 70

         StaffaDP_3_Vrs = 1
         StaffaDP_3_OX = #OffsetX + #X - 160


         if( StaffaDP_3_OX + wk_x_staffa + 50 > wk_pos_staffa_dx )
         {
            StaffaDP_3_Vrs = -1
            StaffaDP_3_OX = (StaffaDP_4_OX -  StaffaDP_SX_OX)/2
            StaffaDP_3_OX = StaffaDP_3_OX + StaffaDP_SX_OX
         }

         if( StaffaDP_4_OX < StaffaDP_SX_OX + wk_x_staffa + 50 )
         {
            StaffaDP_4_Vrs = 1
            StaffaDP_4_OX = StaffaDP_3_OX + (wk_pos_staffa_dx -  StaffaDP_3_OX )/2
         }
      }
   }

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

      Staffa3_OX_FIX = VAR_VAL(ATTUALE(),"Staffa3_OX")
      Staffa4_OX_FIX = VAR_VAL(ATTUALE(),"Staffa4_OX")

      StaffaX      = 225

      StaffaSX     = 1     StaffaDX     = 1
      StaffaSX_Z   = 0     StaffaDX_Z   = 0
      StaffaSX_OX  = 10    StaffaDX_OX  = 10

      Staffa3      = 0     Staffa4      = 0
      Staffa3_Vrs  = 0     Staffa4_Vrs  = 0
      Staffa3_OX   = 0     Staffa4_OX   = 0
      Staffa3_Z    = 0     Staffa4_Z    = 0

      StaffaSX_Z = 313
      if( Z >= 470 )
      {
         StaffaSX_Z = 427
         if( Z <= 499 ) { StaffaSX_Z = 427 - 40 }
      }

      StaffaDX_Z = StaffaSX_Z

      StaffaSX_CX = StaffaSX_OX + 25 + 15
      StaffaDX_CX = X - StaffaDX_OX - 25 - 15

      Staffa3_DBG = ""
      Staffa4_DBG = ""

      //DA COMPLETARE GESTIONE STAFFE

      num_staffe = 2
      if( X >= 1472 ) { num_staffe = 3 }
      if( X >= 2208 ) { num_staffe = 4 }

      if( num_staffe == 3 )
      {
         Staffa3_DBG = "CASO_1"

         Staffa3 = 1
         Staffa3_Z = StaffaSX_Z
         Staffa3_Vrs = 1

         //distanza da sx e da dx della vasca
         wk_depth_1_sx = VAR_Depth1_OX
         wk_depth_1_dx = X - VAR_Depth1_OX - VAR_Depth_X

         //Staffa a DX della vasca
         //if( wk_depth_1_sx >= 123 & wk_depth_1_dx >= 373 )
         if( wk_depth_1_sx >= 123 & wk_depth_1_dx >= 416 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_1")

            Staffa3_OX = wk_depth_1_sx + VAR_Depth_X + 76 - 170
            Staffa3_OX_Min = Staffa3_OX
            Staffa3_OX_Max = X - StaffaDX_OX - 50 - StaffaX
         }

         //Staffa a SX della vasca
         //if( wk_depth_1_dx < 373  )
         if( wk_depth_1_dx < 413  )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_2")

            Staffa3_OX = wk_depth_1_sx - 76 + 25 - StaffaX

            Staffa3_OX_Min = StaffaSX_OX + StaffaX + 50
            Staffa3_OX_Max = Staffa3_OX
         }

         if( VAR_DepthDoppio == 1 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_3")

            wk_depth_1_fdx = VAR_Depth1_OX + VAR_Depth_X
            wk_depth_2_fsx = VAR_Depth2_OX

            wk_centro = wk_depth_1_fdx + (wk_depth_2_fsx - wk_depth_1_fdx)/2

            Staffa3_OX = wk_centro - 15 - 170

            Staffa3_OX_Min = Staffa3_OX
            Staffa3_OX_Max = Staffa3_OX
         }

         if( IS_VAR_FIXED(ATTUALE(),"Staffa3_OX") == 1  )
         {
            if( Staffa3_OX_FIX < Staffa3_OX_Min
              | Staffa3_OX_FIX > Staffa3_OX_Max ) { DEL_VAR_MODIFICATE(ATTUALE(),"Staffa3_OX") }
         }

         #ifdef TEC;AZI
            VAR_SET_MODE(ATTUALE(),"Staffa3_OX",$MODE_USER)
            if( VAR_EXIST( ATTUALE(), "Staffa3_OX_Min")
              & VAR_EXIST( ATTUALE(), "Staffa3_OX_Max"))
            {
               VAR_SET_MENU(ATTUALE(),"Staffa3_OX",STRCAT("( ",STR(Staffa3_OX_Min),"-",STR(Staffa3_OX_Max)," )"))

               if( Staffa3_OX_Min < 0  | Staffa3_OX_Max <0
                 | Staffa3_OX_Min >= Staffa3_OX_Max
                 | Staffa3_OX_Min > X  | Staffa3_OX_Max > X ) { VAR_SET_MODE(ATTUALE(),"Staffa3_OX",$MODE_SHOWALWAYS) }
            }
         #endif

         #ifdef TEC;AZI
            VAR_SET_MODE(ATTUALE(),"Staffa3_DBG",$MODE_SHOWALWAYS)
         #endif
      }

      if( num_staffe == 4 )
      {
         Staffa3_DBG = "CASO_2"
         Staffa4_DBG = "CASO_2"

         Staffa3 = 1
         Staffa3_Z = StaffaSX_Z
         Staffa3_Vrs = 1

         Staffa4 = 1
         Staffa4_Z = StaffaSX_Z
         Staffa4_Vrs = 1

         //distanza da sx e da dx della vascha
         wk_depth_1_sx = VAR_Depth1_OX
         wk_depth_1_dx = X - VAR_Depth1_OX - VAR_Depth_X

         lim1 = 571
         lim2 = 416
         lim3 = 123

         //distanza minima staffa / Lavabo
         //lim_st_lav = 76
         lim_st_lav = 57

         //STAFFA 3 a DX della vasca
         //STAFFA 4 a SX della vasca
         //if( wk_depth_1_sx >= 571 & wk_depth_1_dx >= 413 )
         if( wk_depth_1_sx >= lim1 & wk_depth_1_dx >= lim2 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_1")
            Staffa4_DBG = STRCAT(Staffa4_DBG,"_1")

            Staffa3_OX = wk_depth_1_sx + VAR_Depth_X + lim_st_lav - 170
            Staffa3_OX_Min = Staffa3_OX
            Staffa3_OX_Max = X - StaffaDX_OX - StaffaX - 50 -  StaffaX

            Staffa4_OX = wk_depth_1_sx - lim_st_lav + 25 - StaffaX
            Staffa4_OX_Min = StaffaSX_OX + StaffaX + 50
            Staffa4_OX_Max = Staffa4_OX
         }

         //STAFFA 4 (SX) a destra della vasca
         //STAFFA 3 a metà tra vasca e filo dx
         //if( wk_depth_1_sx >= 413 & wk_depth_1_sx < 571 )
         if( wk_depth_1_sx >= lim2 & wk_depth_1_sx < lim1 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_2")
            Staffa4_DBG = STRCAT(Staffa4_DBG,"_2")

            Staffa4_Vrs = -1
            Staffa4_OX = wk_depth_1_sx - lim_st_lav - 30 - 25
            Staffa4_OX_Min = StaffaSX_OX + StaffaX + 50
            Staffa4_OX_Max = Staffa4_OX

            wk_depth_1_fdx = VAR_Depth1_OX + VAR_Depth_X

            wk_centro = wk_depth_1_fdx + (X - wk_depth_1_fdx )/2

            Staffa3_OX = wk_centro - 15 - 170

            Staffa3_OX_Min = wk_depth_1_sx + VAR_Depth_X + lim_st_lav - 170
            Staffa3_OX_Max = X - StaffaDX_OX - 50 - 2*StaffaX
         }

         //STAFFA 3 a destra della vasca
         //STAFFA 4 a metà tra staffa 3 e centro staffa dx
         //if( wk_depth_1_sx >= 123 & wk_depth_1_sx < 413 )
         if( wk_depth_1_sx >= lim3 & wk_depth_1_sx < lim2 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_3")
            Staffa4_DBG = STRCAT(Staffa4_DBG,"_3")

            Staffa3_OX = wk_depth_1_sx + VAR_Depth_X + lim_st_lav - 170
            Staffa3_OX_Min = Staffa3_OX
            Staffa3_OX_Max = X - StaffaDX_OX - 50 - 2*StaffaX

            Staffa3_CX = Staffa3_OX + 185

            wk_centro = Staffa3_CX + ( StaffaDX_CX - Staffa3_CX )/2

            Staffa4_OX = wk_centro - 15 - 170
            Staffa4_OX_Min = Staffa3_OX + StaffaX + 50
            Staffa4_OX_Max = Staffa3_OX_Max
         }

         //STAFFA 3 a destra della vasca
         //STAFFA 4 a metà tra staffa 4 e centro staffa sx
         //if( wk_depth_1_dx >= 123 & wk_depth_1_dx < 413 )
         if( wk_depth_1_dx >= lim3 & wk_depth_1_dx < lim2 )
         {
            Staffa3_DBG = STRCAT(Staffa3_DBG,"_4")
            Staffa4_DBG = STRCAT(Staffa4_DBG,"_4")

            Staffa3_OX     = wk_depth_1_sx - lim_st_lav + 25 - StaffaX
            Staffa3_OX_Min = StaffaSX_OX + StaffaX + 50
            Staffa3_OX_Max = Staffa3_OX

            Staffa3_CX = Staffa3_OX + 185

            wk_centro = StaffaSX_CX +  (Staffa3_CX - StaffaSX_CX)/2

            Staffa4_OX = wk_centro - 15 - 170
            Staffa4_OX_Min = Staffa3_OX_Min
            Staffa4_OX_Max = Staffa3_OX_Max
         }

         if( VAR_DepthDoppio == 1 )
         {
            Staffa4_Vrs = 1

            wk_depth_1_fsx = VAR_Depth1_OX
            wk_depth_1_fdx = VAR_Depth1_OX + VAR_Depth_X

            wk_depth_2_fsx = VAR_Depth2_OX
            wk_depth_2_fdx = VAR_Depth2_OX + VAR_Depth_X

            Staffa3_DBG = STRCAT(Staffa3_DBG,"_22")
            Staffa4_DBG = STRCAT(Staffa4_DBG,"_22")

            //CASO 1
            //STAFFA 3 a DX di vasca 1
            //STAFFA 4 a sx di vasca 2 (SX)
//LP            if( wk_depth_2_fsx - wk_depth_1_fdx > 288 + 33
            if( wk_depth_2_fsx - wk_depth_1_fdx >= 288
              & wk_depth_2_fsx - wk_depth_1_fdx < 434   )
            {
               Staffa3_DBG = STRCAT(Staffa3_DBG,"_1")
               Staffa4_DBG = STRCAT(Staffa4_DBG,"_1")

               Staffa3_OX     = wk_depth_1_fdx + lim_st_lav - 170
               Staffa3_OX_Min = Staffa3_OX
               Staffa3_OX_Max = Staffa3_OX

               Staffa4_Vrs    = -1
               Staffa4_OX     = wk_depth_2_fsx - lim_st_lav - 30 - 25
               Staffa4_OX_Min = Staffa4_OX
               Staffa4_OX_Max = Staffa4_OX
            }

            //CASO 2
            //STAFFA 3 a DX di vasca 1
            //STAFFA 4 a sx di vasca 2 (DX)
            if( wk_depth_2_fsx - wk_depth_1_fdx >= 434 )
            {
               Staffa3_DBG = STRCAT(Staffa3_DBG,"_2")
               Staffa4_DBG = STRCAT(Staffa4_DBG,"_2")

               Staffa3_OX     = wk_depth_1_fdx + lim_st_lav - 170
               Staffa3_OX_Min = Staffa3_OX
               Staffa3_OX_Max = wk_depth_2_fsx - 181

               Staffa4_Vrs    = 1
               Staffa4_OX     = wk_depth_2_fsx - lim_st_lav + 25 - StaffaX
               Staffa4_OX_Min = Staffa3_OX_Min + StaffaX + 50
               Staffa4_OX_Max = Staffa4_OX
            }

            //CASO 3
            //STAFFA 3 tra le 2 vasche
            //STAFFA 4 su lato libero maggiore
            if( wk_depth_2_fsx - wk_depth_1_fdx < 288 )
//LP            if( wk_depth_2_fsx - wk_depth_1_fdx < 288 + 33 )
            {
               Staffa3_DBG = STRCAT(Staffa3_DBG,"_3")
               Staffa4_DBG = STRCAT(Staffa4_DBG,"_4")

               wk_centro = wk_depth_1_fdx + (wk_depth_2_fsx - wk_depth_1_fdx)/2

               Staffa3_OX = wk_centro - 15 - 170

               Staffa3_OX_Min = Staffa3_OX
               Staffa3_OX_Max = Staffa3_OX

               //posiziono a sx della prima vasca
               if( wk_depth_1_fsx > X - wk_depth_2_fdx )
               {
                  Staffa4_OX = wk_depth_1_fsx - lim_st_lav + 25 - StaffaX
                  Staffa4_OX_Min = StaffaSX_OX + StaffaX + 50
                  Staffa4_OX_Max = Staffa4_OX
               }
               //posiziono a dx della seconda vasca
               else
               {
                  Staffa4_OX     = wk_depth_2_fdx + lim_st_lav - 170
                  Staffa4_OX_Min = Staffa4_OX
                  Staffa4_OX_Max = X - StaffaDX_OX - 50 - 2*StaffaX
               }
            }
         }

         //Staffa 3
         wk_staffa3_mode = $MODE_SHOWALWAYS
         wk_staffa3_menu = ""

         wk_staffa3_ox_min = -1
         if( VAR_EXIST( ATTUALE(), "Staffa3_OX_Min")) { wk_staffa3_ox_min = VAR_VAL( ATTUALE(), "Staffa3_OX_Min") }

         wk_staffa3_ox_max = -1
         if( VAR_EXIST( ATTUALE(), "Staffa3_OX_Max")) { wk_staffa3_ox_max = VAR_VAL( ATTUALE(), "Staffa3_OX_Max") }

         if( wk_staffa3_ox_min >= 0
           & wk_staffa3_ox_max <= X
           & wk_staffa3_ox_max >= wk_staffa3_ox_min )
         {
            wk_staffa3_mode = $MODE_USER
            wk_staffa3_menu = STRCAT( "( ", STR(wk_staffa3_ox_min), "-", STR(wk_staffa3_ox_max), " )")
         }

        #ifdef TEC;AZI
         VAR_SET_MODE( ATTUALE(), "Staffa3_OX", wk_staffa3_mode)
         VAR_SET_MENU( ATTUALE(), "Staffa3_OX", wk_staffa3_menu)
        #endif

         if( IS_VAR_FIXED( ATTUALE(), "Staffa3_OX") == 1 )
         {
            if( Staffa3_OX_FIX < Staffa3_OX_Min
              | Staffa3_OX_FIX > Staffa3_OX_Max ) { DEL_VAR_MODIFICATE(ATTUALE(),"Staffa3_OX") }
         }

         //Staffa 4
         wk_staffa4_mode = $MODE_SHOWALWAYS
         wk_staffa4_menu = ""

         wk_staffa4_ox_min = -1
         if( VAR_EXIST( ATTUALE(), "Staffa4_OX_Min")) { wk_staffa4_ox_min = VAR_VAL( ATTUALE(), "Staffa4_OX_Min") }

         wk_staffa4_ox_max = -1
         if( VAR_EXIST( ATTUALE(), "Staffa4_OX_Max")) { wk_staffa4_ox_max = VAR_VAL( ATTUALE(), "Staffa4_OX_Max") }

         if( wk_staffa4_ox_min >= 0
           & wk_staffa4_ox_max <= X
           & wk_staffa4_ox_max >= wk_staffa4_ox_min )
         {
            wk_staffa4_mode = $MODE_USER
            wk_staffa4_menu = STRCAT( "( ", STR(wk_staffa4_ox_min), "-", STR(wk_staffa4_ox_max), " )")
         }

        #ifdef TEC;AZI
         VAR_SET_MODE( ATTUALE(), "Staffa4_OX", wk_staffa4_mode)
         VAR_SET_MENU( ATTUALE(), "Staffa4_OX", wk_staffa4_menu)
        #endif

         if( IS_VAR_FIXED(ATTUALE(),"Staffa4_OX") == 1 )
         {
            if( Staffa4_OX_FIX < Staffa4_OX_Min
              | Staffa4_OX_FIX > Staffa4_OX_Max ) { DEL_VAR_MODIFICATE(ATTUALE(),"Staffa4_OX") }
         }

        #ifdef TE
         VAR_SET_MODE(ATTUALE(),"Staffa3_DBG",$MODE_SHOWALWAYS)
         VAR_SET_MODE(ATTUALE(),"Staffa4_DBG",$MODE_SHOWALWAYS)
        #endif
      }
   }

   PROCEDURA OnQueryBdmLocal_Mensole_Air
   {
      if( $query_type==5 )
      {
         COMANDO2("LIVELLI CLEAR OnWall")

         liv_wall =  11

         liv_wall[1]  = 0
         liv_wall[2]  = 201
         liv_wall[3]  = 385
         liv_wall[4]  = 569
         liv_wall[5]  = 753
         liv_wall[6]  = 937
         liv_wall[7]  = 1121
         liv_wall[8]  = 1305
         liv_wall[9]  = 1489
         liv_wall[10] = 1673
         liv_wall[11] = 1857

         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 TrovaIdx_DaScassare_MensolaAir
   {
      if( ACTION() <= 0 | ACTION() == 2 | COMPONENDO()==1 | $OnLoadOrder==1 ) { EXITSUB() }

      //Luca 23/06/2022 se ho già trovato un top non entro qui, altrimento resetto la variabile
      if( IsIdx(ATTUALE(),"idx_top") ) { EXITSUB() }

      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,"Mensola_Air")
      if( wk_top>0 ) { idx_top = wk_top[1] }

      NEAR_GLOBALE("wk_bl",wk_idx_near,5,1,"*")

      Scassa_Chi_Plus = ""
      Scassa_Chi_Plus_SottoTop = ""

      i = 1
      while ( i<=wk_bl )
      {
         if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE )
         {
            if( UN_PADRE2(wk_bl[i],"Grafica_Mensola_WW_Air")
              | UN_PADRE2(wk_bl[i],"Grafica_Mensola_LAM_Air")
              | UN_PADRE2(wk_bl[i],"Grafica_Mensola_LAC_Air")
              | UN_PADRE2(wk_bl[i],"Top_2P0")
              | UN_PADRE2(wk_bl[i],"PianoScrivania_AIR")
              )
            {
              if( VAR_VAL_STR(ATTUALE(),"TipoLavaboStr") == "DEPTH" )
              {
                  if( VAR_VAL(wk_bl[i],"NO_SCASSABILE_DEPTH") != 1 )
                  {
                     Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";")
                  }
               }
               else
               {
                  if( UN_PADRE2(wk_bl[i],"SottoTop_generico") )
                  {
                     Scassa_Chi_Plus_SottoTop = STRCAT(Scassa_Chi_Plus_SottoTop,STR(wk_bl[i]),";")
                  }
                  else
                  {
                     Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";")
                     Scassa_Chi_Plus_SottoTop = Scassa_Chi_Plus
                  }
               }
            }
            else
            {
               if( VAR_VAL(wk_bl[i],"SCASSA_DEPTH")==1 )  { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }

            }
         }

         i = i + 1
      }
   }

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

      VAR_Depth_X = 490
      VAR_Depth_Z = 310

      wk_riex_min = 123
      wk_depth_depth_min = 160

      wk_riez_fro = 70

      if( Z <= 485 )  { wk_riez_fro = 60 }

      VAR_Depth1_OZ = Z - wk_riez_fro - VAR_Depth_Z
      VAR_Depth2_OZ = VAR_Depth1_OZ

      HIDE_ON_EDIT(ATTUALE(),"VAR_Depth1_OX;VAR_Depth2_OX",1)

      if( VAR_Depth_Pos != 9 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"VAR_Depth1_OX")  )  { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Depth1_OX") }
         if( IS_VAR_FIXED(ATTUALE(),"VAR_Depth2_OX")  )  { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Depth2_OX") }
      }

      if( VAR_DepthDoppio == 0 )
      {
         if( VAR_Depth_Pos == -1 ) { VAR_Depth1_OX = wk_riex_min }
         if( VAR_Depth_Pos ==  0 ) { VAR_Depth1_OX = X/2 - VAR_Depth_X / 2 }
         if( VAR_Depth_Pos ==  1 ) { VAR_Depth1_OX = X - wk_riex_min - VAR_Depth_X }

         //devo gestire i limiti
         if( VAR_Depth_Pos == 9 )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Depth1_OX",0)

            wk_min = wk_riex_min
            wk_max = X - wk_riex_min - VAR_Depth_X
            VAR_SET_MENU(ATTUALE(),"VAR_Depth1_OX",STRCAT("( ",STR(wk_min) ,"-", STR(wk_max)," )"))
         }
      }

      if( VAR_DepthDoppio == 1 )
      {
         if( VAR_Depth_Pos == -1 )
         {
            VAR_Depth1_OX = wk_riex_min
            VAR_Depth2_OX = VAR_Depth1_OX + VAR_Depth_X + wk_depth_depth_min
         }
         if( VAR_Depth_Pos ==  0 )
         {
            VAR_Depth1_OX = X/2 - wk_depth_depth_min/2 - VAR_Depth_X
            VAR_Depth2_OX = X/2 + wk_depth_depth_min/2
         }
         if( VAR_Depth_Pos ==  1 )
         {
            VAR_Depth2_OX = X - wk_riex_min - VAR_Depth_X
            VAR_Depth1_OX = VAR_Depth2_OX - wk_depth_depth_min - VAR_Depth_X
         }

         //devo gestire i limiti
         if( VAR_Depth_Pos == 9 )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Depth1_OX",0)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Depth2_OX",0)

            wk_min = wk_riex_min
            wk_max = VAR_Depth2_OX - wk_depth_depth_min - VAR_Depth_X
            VAR_SET_MENU(ATTUALE(),"VAR_Depth1_OX",STRCAT("( ",STR(wk_min) ,"-", STR(wk_max)," )"))

            wk_min = VAR_Depth1_OX + wk_depth_depth_min + VAR_Depth_X
            wk_max = X - wk_riex_min - VAR_Depth_X
            VAR_SET_MENU(ATTUALE(),"VAR_Depth2_OX",STRCAT("( ",STR(wk_min) ,"-", STR(wk_max)," )"))
         }
      }

      CRS_lista_var = "VAR_Depth1_OX;VAR_Depth2_OX;VAR_Depth1_OZ;VAR_Depth2_OZ;X;Z"
      GOSUB CheckRigeneraScasso

      if( CRS_Result == 1 & $OnLoadOrder2 == 0 )
      {
         VAR_VALUE_SET(idx_depth1,"RigeneraScasso",1)
         if( VAR_DepthDoppio == 1 ) { VAR_VALUE_SET(idx_depth2,"RigeneraScasso",1) }
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //Rigenera Scassi Depth"))
      }
   }

   PROCEDURA Configura_Lavabo
   {
      if( ACTION() < 0 )  { EXITSUB() }

      M4_MIS = "Filler*;X;Y;Z;VAR_Inbilico_Orie;VAR_Rubinetto;VAR_Lav_OX;VAR_Lav_OZ"

      if( TipoLavabo == 0 ) { TipoLavaboStr = "DEPTH"    }
      if( TipoLavabo == 1 ) { TipoLavaboStr = "CELLULE"  }
      if( TipoLavabo == 2 ) { TipoLavaboStr = "SKIN"     }
      if( TipoLavabo == 3 ) { TipoLavaboStr = "INBILICO" }
      if( TipoLavabo == 4 ) { TipoLavaboStr = "BASICA"   }
      if( TipoLavabo == 5 ) { TipoLavaboStr = "ELYSSA"   }

      FIN_sat1     = "C028"
      FIN_sat2     = ""
      FIN_idx_gest = ATTUALE()

      file_sat1 = ""
      file_sat2 = ""

      Offset_CF_X = 0
      Offset_CF_Z = 0

      VAR_Scasso_Top_Diam   = 0
      VAR_Scasso_StTop_Diam = 0

      FaiScasso = 0
      Stp_Quota_Foro = 0

      NO_GEST = 0
      M4_NO_OFFS = 1

      if( $ATTIVA_DLL== 1 & ACTION() == 0 )
      {
         VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
         VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)
         VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS)

         HIDE_ON_EDIT2(ATTUALE(),"TipoLavabo",1)

         HIDE_ON_EDIT2(ATTUALE(),"VAR_Inbilico_Orie",1)

         HIDE_ON_EDIT2(ATTUALE(),"VAR_Lav_OX",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Lav_OZ",1)
      }

      if( TipoLavaboStr=="DEPTH" )
      {
         FaiScasso = 1

         X = 490
         Y = 80
         Z = 310

         NO_GEST = 1

         VAR_TipoPos = "POSIZIONATO"

         //Rubinetto di default attivo
         if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 0 ) { VAR_Rubinetto = 1 }

         if( VAR_VAL(PADRE(ATTUALE(),1) , "Z" ) <= 485 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Rubinetto") }
            VAR_Rubinetto = 0
         }

         FIN_idx_gest = PADRE(ATTUALE(),1)
      }

      if( TipoLavaboStr=="INBILICO" )
      {
         VAR_Scasso_Top_Diam   = 80
         VAR_Scasso_StTop_Diam = 140

         //Luca 06/12/2021
         Stp_Quota_Foro = 1
         FaiScasso = 1

         X = 368
         Y = 166
         Z = 368

         HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",0)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Lav_OX",0)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Inbilico_Orie",0)

         menu_orie = "OrieInbil"
         idx_pdr = PADRE(ATTUALE(),1)
         if( VAR_VAL(idx_pdr,"X") <= 736
           & VAR_VAL_STR(idx_pdr,"VAR_MaterialeStr") == "WILDWOOD"  ) { menu_orie = "OrieInbil2" }

         VAR_SET_MENU(ATTUALE(),"VAR_Inbilico_Orie",menu_orie)

         CMP2_AZIONI = "A"
         VAR_TipoPos = "ATTREZZATO"

         file_sat1 = STRCAT($path_sat,"Lavabi\INBILICO.sat")

         //Offset_CF_X = X/2
         //Offset_CF_Z = 0

         wk_xp = VAR_VAL(PADRE(ATTUALE(),1),"X")
         wk_zp = VAR_VAL(PADRE(ATTUALE(),1),"Z")
         if( VAR_EXIST(PADRE(ATTUALE(),1),"Zt") ) { wk_zp = VAR_VAL(PADRE(ATTUALE(),1),"Zt") }

         if( IS_VAR_FIXED(ATTUALE(),"VAR_Lav_OX")==0 )
         {
            VAR_Lav_OX = wk_xp / 2
         }
         //old
         VAR_Lav_OZ = wk_zp - 80 - X + 88

         VAR_Inbilico_LavOffX = X/2
         VAR_Inbilico_LavOffZ = 280
         VAR_OffZ_Rub = 350 - VAR_Inbilico_LavOffZ
         if( VAR_Inbilico_Orie == -2 ) { VAR_Inbilico_LavOffX = 90  VAR_Inbilico_LavOffZ = 185  VAR_OffZ_Rub = 220 - VAR_Inbilico_LavOffZ }
         if( VAR_Inbilico_Orie == -1 ) { VAR_Inbilico_LavOffX = 117 VAR_Inbilico_LavOffZ = 252  VAR_OffZ_Rub = 311 - VAR_Inbilico_LavOffZ }
         if( VAR_Inbilico_Orie == 1 )  { VAR_Inbilico_LavOffX = 250 VAR_Inbilico_LavOffZ = 252  VAR_OffZ_Rub = 311 - VAR_Inbilico_LavOffZ }
         if( VAR_Inbilico_Orie == 2 )  { VAR_Inbilico_LavOffX = 278 VAR_Inbilico_LavOffZ = 185  VAR_OffZ_Rub = 220 - VAR_Inbilico_LavOffZ }

         //Simone 02/02/2024 - Correggo posizione (con revisione del composto): il foro rubinetto va a 60mm dal retro
         if( VAR_VAL(ATTUALE(),"REV_PosZ") )
         {
            VAR_Lav_OZ = wk_zp - Z - VAR_OffZ_Rub - 60
            //centrato in profondità
            if( VAR_Rubinetto == 0 ) { VAR_Lav_OZ = wk_zp/2 - Z/2 }
         }

         //Luca 19/03/2021 mantis 24791: Bagno - Lavabo Inbilico
         if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 0 )  { VAR_Rubinetto = 1 }

         //non ci sta il rubinetto
         if( wk_zp < 520 )
         {
            //Simone 18/10/21
            VAR_Rubinetto = 0
            if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Rubinetto") }

            HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",1)
         }

         //if( wk_xp < 920 & VAR_Inbilico_Orie != 0 )
         //{
         //   if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Rubinetto") }
         //   HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",1)
         //}
      }

      if( TipoLavaboStr=="BASICA" )
      {
         CMP2_AZIONI = "A"

         VAR_Rubinetto = 1
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Lav_OX",SE_NUM(ins2_att < 1, 1, 0))
         HIDE_ON_EDIT2(ATTUALE(),"Filler2",SE_NUM(ins2_att < 1, 1,0))

         if( $ATTIVA_DLL==0 )
         {
            var_menu_x = "XLavBASICA"
            VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE)
            VAR_SET_MENU(ATTUALE(),"X",var_menu_x)
         }

         Y = 130
         Z = 470

         VAR_TipoPos = "ATTREZZATO|A MURO"

         file_sat1 = STRCAT($path_sat,"Lavabi\BASICA_",STR(X),".sat")

         if( IS_VAR_FIXED(ATTUALE(),"VAR_Lav_OX")==0 )
         {
            VAR_Lav_OX = VAR_VAL(PADRE(ATTUALE(),1),"X")/2
         }

         VAR_ScassoX = 330
         VAR_ScassoZ = 300

         FaiScasso  = 1
      }

      if( TipoLavaboStr=="CELLULE" )
      {
         X = 400
         Y = 136
         Z = 500

         VAR_TipoPos = "A MURO"

         file_sat1 = STRCAT($path_sat,"Lavabi\Cellule_NoForo.sat")
         if( VAR_Rubinetto == 1 ) { file_sat1 = STRCAT($path_sat,"Lavabi\Cellule_CForo.sat") }

         if( VAR_Laccato == 1 )   { file_sat2 = STRCAT($path_sat,"Lavabi\Cellule_Copertura.sat") }

         FIN_sat1 = ""
         FIN_sat2 = "C028"

         //Simone 12/09/2022
         VT_NFC = 1
         M4_NO_OFFS = 0
      }

      if( TipoLavaboStr=="SKIN" )
      {
         //Luca 04/05/2021
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",1)
         HIDE_ON_EDIT2(ATTUALE(),"Filler2",1)

         if( $ATTIVA_DLL==0 )
         {
            var_menu_x = "XLavSKIN"
            VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE)
            VAR_SET_MENU(ATTUALE(),"X",var_menu_x)
         }

         Y = 227
         Z = 641

         GEST_Y = Z
         GEST_Z = Y

         VAR_TipoPos = "A MURO"
         M4_NO_OFFS = 0
         file_sat1 = STRCAT($path_sat,"Lavabi\LavaboSKIN_",STR(X),".sat")
      }

      if( TipoLavaboStr=="ELYSSA" )
      {
         CMP2_AZIONI  = "A"
         VAR_TipoPos  = "ATTREZZATO"

         FaiScasso      = 1
         Stp_Quota_Foro = 1

         HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",0)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Lav_OX",0)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Scasso_Top_Diam",0)

         if( $ATTIVA_DLL==0 )
         {
            var_menu_x = "XLavELYSSA"
            VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE)
            VAR_SET_MENU(ATTUALE(),"X",var_menu_x)
         }

         // Round S
         Y = 143
         Z = 400
         wk_diam_min = 90
         wk_diam_max = 120
         // Oval M
         if( X == 555 )
         {
            Y = 140
            Z = 385
            wk_diam_max = 140
         }

         VAR_Scasso_Top_Diam   = 110
         VAR_Scasso_StTop_Diam = 160
         VAR_SET_MODE(ATTUALE(),"VAR_Scasso_Top_Diam",$MODE_USER)
         VAR_SET_MENU(ATTUALE(),"VAR_Scasso_Top_Diam",STRCAT("(",STR(wk_diam_min),"-",STR(wk_diam_max),")"))

         wk_xp = VAR_VAL(PADRE(ATTUALE(),1),"X")
         wk_zp = VAR_VAL(PADRE(ATTUALE(),1),"Z")
         if( VAR_EXIST(PADRE(ATTUALE(),1),"Zt") ) { wk_zp = VAR_VAL(PADRE(ATTUALE(),1),"Zt") }

         if( IS_VAR_FIXED(ATTUALE(),"VAR_Lav_OX") == 0 ) { VAR_Lav_OX = wk_xp/2 }
         // TODO
         VAR_Lav_OZ = wk_zp - Z //- VAR_OffZ_Rub - 60
         if( VAR_Rubinetto == 0 ) { VAR_Lav_OZ = wk_zp/2 - Z/2 }

         VAR_Rubinetto = 1
         //non ci sta il rubinetto - come Inbilico ??
         if( wk_zp < 520 )
         {
            VAR_Rubinetto = 0
            if( IS_VAR_FIXED(ATTUALE(),"VAR_Rubinetto") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Rubinetto") }

            HIDE_ON_EDIT2(ATTUALE(),"VAR_Rubinetto",1)
         }

         file_sat1 = STRCAT($path_sat,"Lavabi\",TipoLavaboStr,"_",STR(X),".sat")

         FIN_sat1 = "C209"
         FIN_sat2 = "C210"

         STP_Bollina = 1
         STP_Bollina_Cat = STRCAT(FIN_sat1,";",FIN_sat2)
      }
   }

   PROCEDURA Configura_Accessorio
   {
      if( ACTION() < 0 )  { EXITSUB() }

      //Luca 04/05/2021
      if( $ATTIVA_DLL==1 & ACTION()==0 ) { HIDE_ON_EDIT(ATTUALE(),"X;Posizione;TipoAccessorio",1) }

      //Luca 04/05/2021
      if( TipoAccessorio == 0 ) { TipoAccessorioStr = "P_ASCIUGAMANI" }
      if( TipoAccessorio == 1 ) { TipoAccessorioStr = "P_CARTA" }
      if( TipoAccessorio == 2 ) { TipoAccessorioStr = "CELLULE_VASSOIO" }
      if( TipoAccessorio == 3 ) { TipoAccessorioStr = "CELLULE_PASCIUGAMANI" }


      if( TipoAccessorioStr == "P_ASCIUGAMANI" )
      {
         file_sat = STRCAT($path_sat,"Bagno\PORTA_ASCIUGAMANI_DX")
         if( Posizione < 0 ) { file_sat = STRCAT($path_sat,"Bagno\PORTA_ASCIUGAMANI_SX") }
         file_sat = STRCAT(file_sat,"_",STR(X),".sat")
      }
      if( TipoAccessorioStr == "P_CARTA" )
      {
         X = 184
         file_sat = STRCAT($path_sat,"Bagno\PORTA_CARTA_DX.sat")
         if( Posizione < 0 ) { file_sat = STRCAT($path_sat,"Bagno\PORTA_CARTA_SX.sat") }
      }

      if( TipoAccessorioStr == "CELLULE_VASSOIO" )
      {
         //LZ 25/05/2021: la posizione dei vassoi è indipendente dal materiale
         //file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_Vetro.sat")
         //if( VAR_Finitura == 1 )  { file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_Legno.sat") }
         file_sat = STRCAT($path_sat,"Bagno\Cellule_Vassoio_", VAR_FinituraStr,"_", PosizioneStr,".sat")
      }

      if( TipoAccessorioStr == "CELLULE_PASCIUGAMANI" )
      {
         file_sat = STRCAT($path_sat,"Bagno\Cellule_portasciugamani.sat")
      }
   }

   PROCEDURA Configura_Sifone
   {
      if( ACTION() < 0 )  { EXITSUB() }

      //Luca 04/05/2021
      if( $ATTIVA_DLL==1 & ACTION()==0 ) { HIDE_ON_EDIT2(ATTUALE(),"TipoSifone",1) }

      c_rivestimento = $c_alluminio

      //CU0507
      if( TipoSifone == 1 )
      {
         TipoSifoneStr = "PLASTICA-CROMATA"

         X = 89.9
         Y = 306
         //Z = 313
      }

      //CU0511
      if( TipoSifone == 2 )
      {
         TipoSifoneStr = "ACCIAIO-INOX"

         X = 71
         Y = 256
         //Z = 385
      }

      //CU0512
      if( TipoSifone == 3 ) { TipoSifoneStr = "OTTONE-CROMATO" }

      //CU0509
      if( TipoSifone == 4 ) { TipoSifoneStr = "PASSEPARTOUT" }

      //CU0513
      if( TipoSifone == 5 )
      {
         TipoSifoneStr = "SALVASPAZIO"

         X = 128
         Y = 216
         //Z = 395

         c_rivestimento = [119,119,119]
      }

      //CU0514
      if( TipoSifone == 6 )
      {
         TipoSifoneStr = "SCARICO-ORIZZONTALE"

         X = 262
         Y = 361
         //Z = 391.5

         c_rivestimento = $c_bianco
      }

      file_m4s = STRCAT($path_sat,"Bagno\Sifoni\",VAR_VAL_STR(ATTUALE(),"cmp_name"),"#I.m4s")
      if( file_m4s != VAR_VAL_STR(ATTUALE(),"file_m4s_prec") ) { file_m4s_exist = FILE_EXIST(file_m4s) }
      file_m4s_prec = file_m4s

      if( file_m4s_exist == 0 )
      {
         Y = 120
         file_sat = STRCAT($path_sat,"Bagno\Sifone_Generico.sat")

         if( TipoSifoneStr == "PASSEPARTOUT"
           | TipoSifoneStr == "SALVASPAZIO"
           | TipoSifoneStr == "SCARICO-ORIZZONTALE" )
         {
            Y = 63.5
            file_sat = STRCAT($path_sat,"Bagno\Sifone_Incasso.sat")
         }
      }
   }

   PROCEDURA Configura_Rubinetto
   {
      if( ACTION() < 0 )  { EXITSUB() }

      if( TipoRubinetto == 0 ) { TipoRubinettoStr = "SOLO-FORO" }
      //if( TipoRubinetto == 1 ) { TipoRubinettoStr = "" }
      //if( TipoRubinetto == 2 ) { TipoRubinettoStr = "" }

      if( IS_VAR_FIXED(ATTUALE(),"VAR_DiamInf") == 0 ) { VAR_DiamInf = 41 }

      HIDE_ON_EDIT(ATTUALE(),"VAR_Accessor*",1)

      file_sat = ""
      file_sat_sx = ""
      file_sat_dx = ""

      FIN_sat    = ""
      FIN_sat_sx = ""
      FIN_sat_dx = ""

      Lavabo_Inbilico = 0

      if( UN_PADRE("LavaboGenerico") )
      {
         if( VAR_VAL_STR(PADRE(ATTUALE(),1),"TipoLavaboStr") == "INBILICO" )  { Lavabo_Inbilico = 1 }
      }

      if( TipoRubinettoStr == "SOLO-FORO" )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioSX",0)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioDX",0)

         //Luca 06/12/2021
         if( UN_PADRE("LavaboKERA") )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioSX",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioDX",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_OffX",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_OffZ",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Diam",1)
         }

         NO_GEST = 1
         FaiScasso = 1

         if( Lavabo_Inbilico == 1 )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioSX",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_AccessorioDX",1)
            if( IS_VAR_FIXED(ATTUALE(),"VAR_Diam") == 0 )    { VAR_Diam = 35 }
            if( IS_VAR_FIXED(ATTUALE(),"VAR_DiamInf") == 0 ) { VAR_DiamInf = 60 }
         }

         if( UN_PADRE("LavaboKERA") )
         {
            if( VAR_VAL(idx_pdr,"Spe_Top") == 80
              & IS_VAR_FIXED(ATTUALE(),"VAR_DiamInf") == 0 ) { VAR_DiamInf = 60 }
         }

         Xt = VAR_Diam

         wk_x_sx = 0
         wk_x_dx = 0

         wk_z_sx = 0
         wk_z_dx = 0

         if( VAR_AccessorioSX == 1 )
         {
            //nel depth non permetto lo spostamento
            if( UN_PADRE("MensolaDepth_Air") == 0 )
            {
               HIDE_ON_EDIT(ATTUALE(),"VAR_AccessorioSX_*",0)
            }

            wk_x_sx = VAR_AccessorioSX_Diam/2 + VAR_AccessorioSX_OffX
         }
         if( VAR_AccessorioDX == 1 )
         {
            //nel depth non permetto lo spostamento
            if( UN_PADRE("MensolaDepth_Air") == 0 )
            {
               HIDE_ON_EDIT(ATTUALE(),"VAR_AccessorioDX_*",0)
            }

            wk_x_dx = VAR_AccessorioDX_Diam/2 + VAR_AccessorioDX_OffX
         }

         if( VAR_AccessorioSX ==1 & VAR_AccessorioDX == 0 ) { Xt = VAR_Diam/2 + wk_x_sx }
         if( VAR_AccessorioSX ==0 & VAR_AccessorioDX == 1 ) { Xt = VAR_Diam/2 + wk_x_dx }
         if( VAR_AccessorioSX ==1 & VAR_AccessorioDX == 1 ) { Xt = wk_x_sx + wk_x_dx }
      }
   }

   PROCEDURA Configura_Miscelatore
   {
      if( $ATTIVA_DLL==1 ) { HIDE_ON_EDIT2(ATTUALE(),"TipoMiscelatore",1) }

      TipoMiscelatoreStr = GetValMenuStr(ATTUALE(),"TipoMiscelatore")

      file_sat = STRCAT($path_sat,"Bagno\Miscelatori\",TipoMiscelatoreStr,".sat")

      if( TipoMiscelatoreStr == "MIL16" ) { X = 45 Y = 155 Z = 151 }
      if( TipoMiscelatoreStr == "MIL17" ) { X = 45 Y = 315 Z = 225 }
      if( TipoMiscelatoreStr == "FRE06" ) { X = 25 Y = 228 Z = 169 }
      if( TipoMiscelatoreStr == "MIL69" ) { X = 25 Y = 195 Z = 159 }
      if( TipoMiscelatoreStr == "INV01" ) { X = 35 Y = 155 Z = 149 }
      if( TipoMiscelatoreStr == "CAR06" ) { X = 35 Y = 282 Z = 255 }
      if( TipoMiscelatoreStr == "MIL01" ) { X = 45 Y = 45  Z = 45  }
      if( TipoMiscelatoreStr == "CAR28" )
      {
         X = 260
         Y = 75
         Z = 200

         M4_A_MURO          = 1
         M4_CNT_LINK_MODE__ = 1
      }

      FLAG_Gest_DimCodifica = 1

      //elimino se viene tolto il foro rubinetto dal lavabo
      if( ACTION() > 0 | $OnLoadOrder != 1 )
      {
         wk_cancella = 0
         if( IS_MATCH(NOME(idx_pdr),"Lavabo*") == 1
           & VAR_VAL(idx_pdr,"VAR_Rubinetto") == 0 )  { wk_cancella = 1 }
         if( NOME(idx_pdr) == "VascaTermoformata"
           & VAR_VAL(idx_pdr,"VT_Miscelatore") == 0 ) { wk_cancella = 1 }
         if( wk_cancella == 1 ) { COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()) , " //Controlli_", NOME(ATTUALE()))) }
      }
   }

   //[I] = CRS_lista_var
   //[O] = CRS_Result
   PROCEDURA CheckRigeneraScasso
   {
      if( CRS_lista_var == "" )
      {
         CRS_Result = 0
         EXITSUB()
      }

      CRS_Result = 0

      STR_SPLIT( CRS_lista_var , ";" , 1 , "CRS_arr_var" , ATTUALE() )

      //1. creo le variabili prec
      i = 1
      while ( i<= CRS_arr_var )
      {
         wk_nome_var = CRS_arr_var[i]
         wk_nome_var_prec = STRCAT(wk_nome_var,"_prec")

         if( VAR_EXIST(ATTUALE(),wk_nome_var_prec) == 0 ) { EVAL( STRCAT(wk_nome_var_prec , " = " , wk_nome_var) ) }
         i = i + 1
      }

      //2. verifico se ci sono differenze
      i = 1
      while ( i<= CRS_arr_var )
      {
         wk_nome_var = CRS_arr_var[i]
         wk_nome_var_prec = STRCAT(wk_nome_var,"_prec")

         wk_tipo = VAR_TYPE(ATTUALE(),wk_nome_var)

         if( wk_tipo == 0 )
         {
            if( VAR_VAL(ATTUALE(),wk_nome_var) != VAR_VAL(ATTUALE(),wk_nome_var_prec) )   { CRS_Result = 1 }
         }
         if( wk_tipo == 1 )
         {
            if( VAR_VAL_STR(ATTUALE(),wk_nome_var) != VAR_VAL_STR(ATTUALE(),wk_nome_var_prec) )  { CRS_Result = 1 }
         }

         i = i + 1
      }

      if ( CRS_Result == 0 ) { EXITSUB() }


      //3. allineo var
      i = 1
      while ( i<= CRS_arr_var )
      {
         wk_nome_var = CRS_arr_var[i]
         wk_nome_var_prec = STRCAT(wk_nome_var,"_prec")

         EVAL( STRCAT(wk_nome_var_prec , " = " , wk_nome_var) )
         i = i + 1
      }
   }

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

      if( $ATTIVA_DLL == 0 ) { EXITSUB() }

      //se a muro
      if( GetTopLevel(ATTUALE()) == ATTUALE()
        & NOME(ATTUALE()) != "Mensola_Air" )  { EXITSUB() }

      Range_LB_1S = -1  Range_LB_1E = -1
      Range_LB_2S = -1  Range_LB_2E = -1
      Range_LB_3S = -1  Range_LB_3E = -1

      //recupero info dalla mensola
      idx_men = PADRE(ATTUALE(),1)

      if( NOME(ATTUALE()) == "LavaboGenerico" )
      {
         if( TipoLavaboStr != "BASICA" ) { EXITSUB() }
      }

      if( NOME(ATTUALE()) == "Mensola_Air" ) { idx_men = ATTUALE() }

      NumStaffe = VAR_VAL(idx_men,"StaffaSX") + VAR_VAL(idx_men,"StaffaDX")
      LarStaffe = VAR_VAL(idx_men,"StaffaSX_X")

      //STAFFA 408
      // -- NON POSSIBILE ALL'INTERNO
      // -- POSSILE CON SORMONTO DI 33 mm
      //Luca 05/05/2021 diventa 28
      // -- POSSILE CON SORMONTO DI 28 mm

      //STAFFA 778
      // -- POSSIBILE ALL'INTERNO -- DA 133mm a X STAFFA - 133mm

      SET_#(idx_men)

      if( LarStaffe < 500 )
      {
         if( NumStaffe < 2 ) { EXITSUB() }

         //Luca 05/05/2021
         //wk_off = 33
         wk_off = 38

         Range_LB_1S = #StaffaSX_OX + #StaffaSX_X - wk_off
         Range_LB_1E = #X - #StaffaDX_OX - #StaffaSX_X + wk_off
      }

      if( LarStaffe > 700 )
      {
         //Luca 05/05/2021
         //wk_off = 133
         wk_off = 128

         wk_off_ST_dx = #X - #StaffaDX_OX - #StaffaSX_X

         if( NumStaffe == 1 )
         {
            Range_LB_1S = #StaffaSX_OX + wk_off
            Range_LB_1E = #StaffaSX_OX + #StaffaSX_X - wk_off
         }

         if( NumStaffe == 2 )
         {
            Range_LB_1S = #StaffaSX_OX + wk_off
            Range_LB_1E = #StaffaSX_OX + #StaffaSX_X - wk_off

            Range_LB_3S = wk_off_ST_dx + wk_off
            Range_LB_3E = wk_off_ST_dx + #StaffaDX_X - wk_off

            //Luca 05/05/2021
            //Range_LB_2S = Range_LB_1E + 100
            //Range_LB_2E = Range_LB_3S - 100

            //Luca 05/05/2021
            Range_LB_2S = Range_LB_1E + 88
            Range_LB_2E = Range_LB_3S - 88

            if( #X > 2208 )
            {
               Range_LB_2S = Range_LB_1E + 90
               Range_LB_2E = Range_LB_3S - 90
            }
         }
      }

      if( NOME(ATTUALE()) == "Mensola_Air" ) { EXITSUB() }

      //I RANGE CALCOLATI FANNO RIFERIMENTO ALLO SCASSO ( X = 330 )
      //DEVO PERO' CALCOLARE I LIMITI FACENDO RIFERIMENTO AL CENTRO VASCA
      if( Range_LB_1S > 0  )  { Range_LB_1S = Range_LB_1S + VAR_ScassoX/2 }
      if( Range_LB_1E > 0  )  { Range_LB_1E = Range_LB_1E - VAR_ScassoX/2 }

      if( Range_LB_2S > 0  )  { Range_LB_2S = Range_LB_2S + VAR_ScassoX/2 }
      if( Range_LB_2E > 0  )  { Range_LB_2E = Range_LB_2E - VAR_ScassoX/2 }

      if( Range_LB_3S > 0  )  { Range_LB_3S = Range_LB_3S + VAR_ScassoX/2 }
      if( Range_LB_3E > 0  )  { Range_LB_3E = Range_LB_3E - VAR_ScassoX/2 }

      GOSUB Ctrl_PosLavabo
   }

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

      if( $ATTIVA_DLL == 0 ) { EXITSUB() }

      Range_LB_1S = -1  Range_LB_1E = -1
      Range_LB_2S = -1  Range_LB_2E = -1
      Range_LB_3S = -1  Range_LB_3E = -1

      //recupero info dalla mensola
      idx_men = PADRE(ATTUALE(),1)

      if( NOME(ATTUALE()) == "LavaboGenerico" )
      {
         if( TipoLavaboStr != "INBILICO" ) { EXITSUB() }
      }

      if( NOME(idx_men) != "Mensola_Air"
       &  NOME(idx_men) != "Top_2P0"  ) { EXITSUB() }

      if( NOME(ATTUALE()) == "Mensola_Air" )
      {
         idx_men = ATTUALE()
         VAR_Inbilico_Orie = 0
      }

      NumStaffe = VAR_VAL(idx_men,"StaffaSX") + VAR_VAL(idx_men,"StaffaDX")
      LarStaffe = VAR_VAL(idx_men,"StaffaSX_X")

      SET_#(idx_men)

      //Luca 06/12/2021
      //nuove regole: vedi mantis 24971
      //range di posizionamento in riferimento ai 'corni' delle staffe
      //scassi devono essere a minimo di 15mm dal bordo
      if( NOME(idx_men) == "Mensola_Air" )
      {
         wk_off_ST_dx = #X - #StaffaDX_OX - #StaffaSX_X

         wk_PosX_CornoSx = 75 + 8
         wk_PosX_CornoDx = #StaffaSX_X - wk_PosX_CornoSx
         wk_DimX_Corno   = 30
         wk_StaffaZ = #StaffaSX_Z
         wk_off_bordo = 15

         Range_LB_1S = #StaffaSX_OX + wk_PosX_CornoSx + wk_DimX_Corno/2 + wk_off_bordo
         Range_LB_1E = #StaffaSX_OX + wk_PosX_CornoDx - wk_DimX_Corno/2 - wk_off_bordo

         if( NumStaffe > 1 )
         {
            Range_LB_3S = wk_off_ST_dx + wk_PosX_CornoSx + wk_DimX_Corno/2 + wk_off_bordo
            Range_LB_3E = wk_off_ST_dx + wk_PosX_CornoDx - wk_DimX_Corno/2 - wk_off_bordo

            Range_LB_2S = Range_LB_1E + wk_DimX_Corno + wk_off_bordo*2
            Range_LB_2E = Range_LB_3S - wk_DimX_Corno - wk_off_bordo*2

            if( Range_LB_2E < Range_LB_2S )
            {
               Range_LB_2S = -1
               Range_LB_2E = -1
            }
         }
      }

      //REGOLE OLD
      //if( NOME(idx_men) == "Mensola_Air" )
      //{
      //   wk_off_ST_dx = #X - #StaffaDX_OX - #StaffaSX_X
      //
      //   if( LarStaffe < 500 )
      //   {
      //      Range_LB_1S = #StaffaSX_OX + #StaffaSX_X/2
      //      Range_LB_1E = #X/2
      //
      //      if( NumStaffe > 1 )
      //      {
      //         Range_LB_1S = #StaffaSX_OX + #StaffaSX_X/2
      //         Range_LB_1E = Range_LB_1S
      //
      //         Range_LB_3S = #X - #StaffaDX_OX - #StaffaDX_X/2
      //         Range_LB_3E = Range_LB_3S
      //
      //         if( #X > 1104 & #X <= 1840 )
      //         {
      //            Range_LB_1S = #StaffaSX_OX + #StaffaSX_X/2 - 5
      //            Range_LB_1E = Range_LB_1S                  + 10
      //
      //            Range_LB_3S = #X - #StaffaDX_OX - #StaffaDX_X/2  - 5
      //            Range_LB_3E = Range_LB_3S                        + 10
      //         }
      //
      //         Range_LB_2S = Range_LB_1S + 237
      //         Range_LB_2E = Range_LB_3E - 237
      //
      //         if( Range_LB_2E < Range_LB_2S )
      //         {
      //            Range_LB_2S = -1
      //            Range_LB_2E = -1
      //         }
      //
      //         //se c'è il rubinetto non può essere messo in mezzo alle staffe da 500
      //         if( VAR_Inbilico_Orie != 0 )
      //         {
      //            Range_LB_1S = Range_LB_2S
      //            Range_LB_1E = Range_LB_2E
      //
      //            Range_LB_2S = -1
      //            Range_LB_2E = -1
      //
      //            Range_LB_3S = -1
      //            Range_LB_3E = -1
      //         }
      //      }
      //   }
      //
      //   if( LarStaffe > 700 )
      //   {
      //      wk_off = 199
      //
      //      wk_off_ST_dx = #X - #StaffaDX_OX - #StaffaSX_X
      //
      //      if( NumStaffe == 1 )
      //      {
      //         Range_LB_1S = #StaffaSX_OX + wk_off
      //         Range_LB_1E = #StaffaSX_OX + #StaffaSX_X - wk_off
      //      }
      //
      //      if( NumStaffe == 2 )
      //      {
      //         Range_LB_1S = #StaffaSX_OX + wk_off
      //         Range_LB_1E = #StaffaSX_OX + #StaffaSX_X - wk_off
      //
      //         Range_LB_3S = wk_off_ST_dx + wk_off
      //         Range_LB_3E = wk_off_ST_dx + #StaffaDX_X - wk_off
      //
      //         Range_LB_2S = Range_LB_1E + 232
      //         Range_LB_2E = Range_LB_3S - 232
      //
      //      }
      //   }
      //}

      //VAR_Inbilico_LavX = 1
      //VAR_Inbilico_LavZ = 350
      //VAR_Inbilico_LavOffX = X/2
      //VAR_Inbilico_LavOffZ = -70
      //
      //if( VAR_Inbilico_Orie == -2 )
      //{
      //   VAR_Inbilico_LavX = 82
      //   VAR_Inbilico_LavZ = 220
      //   VAR_Inbilico_LavOffX = 90
      //   VAR_Inbilico_LavOffZ = -34
      //}
      //
      //if( VAR_Inbilico_Orie == -1 )
      //{
      //   VAR_Inbilico_LavX = 38
      //   VAR_Inbilico_LavZ = 312
      //   VAR_Inbilico_LavOffX = 117
      //   VAR_Inbilico_LavOffZ = -59
      //}
      //
      //if( VAR_Inbilico_Orie == 2 )
      //{
      //   VAR_Inbilico_LavX = 82
      //   VAR_Inbilico_LavZ = 220
      //   VAR_Inbilico_LavOffX = 196
      //   VAR_Inbilico_LavOffZ = -34
      //}
      //
      //if( VAR_Inbilico_Orie == 1 )
      //{
      //   VAR_Inbilico_LavX = 38
      //   VAR_Inbilico_LavZ = 312
      //   VAR_Inbilico_LavOffX = 212
      //   VAR_Inbilico_LavOffZ = -60
      //}

      if( NOME(ATTUALE()) == "Mensola_Air" ) { EXITSUB() }

      //Aggiorno
      VAR_Inbilico_LavOffX = X/2
      if( VAR_Inbilico_Orie == -2 ) { VAR_Inbilico_LavOffX = 90 }
      if( VAR_Inbilico_Orie == -1 ) { VAR_Inbilico_LavOffX = 117 }
      if( VAR_Inbilico_Orie == 1 )  { VAR_Inbilico_LavOffX = 250 }
      if( VAR_Inbilico_Orie == 2 )  { VAR_Inbilico_LavOffX = 278 }

      //I RANGE CALCOLATI FANNO RIFERIMENTO AL CENTRO DEL LAVABO
      //DEVO PERO' CALCOLARE I LIMITI FACENDO RIFERIMENTO AL CENTRO FORO
      wk_offset = 0
      if( VAR_Inbilico_LavOffX > X/2 )
      {
         wk_offset = VAR_Inbilico_LavOffX - X/2
         wk_offset = -1 * wk_offset
      }

      if( VAR_Inbilico_LavOffX < X/2 )
      {
         wk_offset = X/2 - VAR_Inbilico_LavOffX
      }

      //if( wk_xp < 920 & VAR_Inbilico_Orie != 0 ) { VAR_Rubinetto = 0 }
      //if( wk_xp < 920 & VAR_Inbilico_Orie == 0 ) { VAR_Rubinetto = 0 }

      wk_off_rub_s = 0
      wk_off_rub_e = 0
      if( VAR_VAL(ATTUALE(),"VAR_Rubinetto") == 1 )
      {
         //if( VAR_Inbilico_Orie == -2 ) { wk_off_rub_s =  0 wk_off_rub_e = 82 }
         //if( VAR_Inbilico_Orie == -1 ) { wk_off_rub_s =  0 wk_off_rub_e = 38 }
         //if( VAR_Inbilico_Orie == 1 )  { wk_off_rub_s = 38 wk_off_rub_e =  0 }
         //if( VAR_Inbilico_Orie == 2 )  { wk_off_rub_s = 82 wk_off_rub_e =  0 }

         if( VAR_Inbilico_Orie == -2 ) { wk_off_rub_s =  0      wk_off_rub_e = 12 + 15 }
         if( VAR_Inbilico_Orie == -1 ) { wk_off_rub_s =  0      wk_off_rub_e = 0  }
         if( VAR_Inbilico_Orie == 1 )  { wk_off_rub_s =  0      wk_off_rub_e = 0 }
         if( VAR_Inbilico_Orie == 2 )  { wk_off_rub_s = 12 + 15 wk_off_rub_e = 0 }
      }

      //Luca 06/12/2021
      //questi sono calcolati in base al centro foro lavello, devo aggiungere metà foro (inferiore diametro 140)
      if( Range_LB_1S > 0  )  { Range_LB_1S = Range_LB_1S + wk_offset + wk_off_rub_s + 70 }
      if( Range_LB_1E > 0  )  { Range_LB_1E = Range_LB_1E + wk_offset - wk_off_rub_e - 70 }

      if( Range_LB_2S > 0  )  { Range_LB_2S = Range_LB_2S + wk_offset + wk_off_rub_s + 70 }
      if( Range_LB_2E > 0  )  { Range_LB_2E = Range_LB_2E + wk_offset - wk_off_rub_e - 70 }

      if( Range_LB_3S > 0  )  { Range_LB_3S = Range_LB_3S + wk_offset + wk_off_rub_s + 70 }
      if( Range_LB_3E > 0  )  { Range_LB_3E = Range_LB_3E + wk_offset - wk_off_rub_e - 70 }

      if( NOME(idx_men) == "Top_2P0" )
      {
         SET_#(idx_men)
         //185

         Range_LB_1S = 185
         Range_LB_1E = #Xt - 185
      }

      GOSUB Ctrl_PosLavabo
   }

   PROCEDURA posa_blocco_range_lavello
   {
      @escluso = 1

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z
      @X = 5
      @Y = 5
      @Z = 300

      @c_rivestimento = [0,255,0]
      @f_rivestimento = "0.7"

      if( alias_pos == "R1" & VAR_VAL(idx_att,"Range_LB_1S") > 0 )
      {
         @escluso = 0
         @base_0.x = base_0.x + Range_LB_1S
         @X = Range_LB_1E - Range_LB_1S
      }

      if( alias_pos == "R2" & VAR_VAL(idx_att,"Range_LB_2S") > 0 )
      {
         @escluso = 0
         @base_0.x = base_0.x + Range_LB_2S
         @X = Range_LB_2E - Range_LB_2S
      }

      if( alias_pos == "R3" & VAR_VAL(idx_att,"Range_LB_3S") > 0 )
      {
         @escluso = 0
         @base_0.x = base_0.x + Range_LB_3S
         @X = Range_LB_3E - Range_LB_3S
      }
   }

   PROCEDURA OnChangedVar_Lavabo_OffsetX
   {
      EXITSUB()
      //if( $ChangedVar != "VAR_Lav_OX"
      //  & $ChangedVar != "VAR_Inbilico_Orie"  ) { EXITSUB() }

      esci = 1
      if( TipoLavaboStr == "BASICA" )
      {
         if( $ChangedVar == "VAR_Lav_OX" ) { esci = 0 }
      }

      if( TipoLavaboStr == "INBILICO" )
      {
         if( $ChangedVar == "VAR_Lav_OX"
           | $ChangedVar == "VAR_Inbilico_Orie"  )
         {
            GOSUB Ctrl_RangePosizionamento_LavaboInBilico
            esci = 0
         }
      }

      if( esci )  { EXITSUB() }

      GOSUB Ctrl_PosLavabo
   }

   PROCEDURA Ctrl_PosLavabo
   {
      wk_pos_ok = 0

      while( wk_pos_ok  == 0)
      {
         wk_msg    = STRCAT(MSG(1211),"\n",MSG(1212))

         if( Range_LB_1S > 0  )
         {
            if( VAR_Lav_OX >= Range_LB_1S & VAR_Lav_OX <= Range_LB_1E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n", "    ", STR(Range_LB_1S-1) , " < Offset X < " , STR(Range_LB_1E+1) )
         }

         if( Range_LB_2S > 0  )
         {
            if( VAR_Lav_OX >= Range_LB_2S & VAR_Lav_OX <= Range_LB_2E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n", "    ", STR(Range_LB_2S-1) , " < Offset X < " , STR(Range_LB_2E+1) )
         }

         if( Range_LB_3S > 0  )
         {
            if( VAR_Lav_OX >= Range_LB_3S & VAR_Lav_OX <= Range_LB_3E ) { wk_pos_ok = 1 }
            wk_msg = STRCAT(wk_msg,"\n","    ", STR(Range_LB_3S-1) , " < Offset X < " , STR(Range_LB_3E+1) )
         }

         if( wk_pos_ok == 0 )
         {
            if( $CNP ==1 | $CNP__ == 1 | $PLIKO == 1 )
            {
               //esco altrimenti va in loop
               wk_pos_ok = 2
               COMANDO2(STRCAT("LOGMSG  LAVABO ",TipoLavaboStr ," [idx",STR(ATTUALE()), "] POSIZIONE NON VALIDA"))
            }
            else
            {
               wk_cancella = 0
               if( Range_LB_1S < 0 & Range_LB_1E < 0 ) { wk_cancella = 1 }
               if( Range_LB_1S > Range_LB_1E )         { wk_cancella = 1 }

               if( wk_cancella == 1 )
               {
                  if( VAR_Lav_OX == -666 ) { EXITSUB() }
                  COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()) , " //OnChangedVar_Lavabo_OffsetX"))
               }

               DISPLAY2(wk_msg)
               CHIEDI(ATTUALE(),"VAR_Lav_OX")
            }
          }
       }

       if( wk_pos_ok == 1 )  { RigeneraScasso = 1 }
   }

   //Luca 17/11/2020
   PROCEDURA Set_Gest_C008_Mensola_Air
   {
      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() }

      CAT_VM_sel = ""
      CAT_VM_opz = "TP008;TP025;TP026;TP027;TP028;SM170"

      //Scassi
      wk_count = 0
      COMPONENTI2("wk_lav",  ATTUALE(), "LavaboGenerico")
      COMPONENTI2("wk_kera", ATTUALE(), "LavaboKERA")
      COMPONENTI2("wk_scs",  ATTUALE(), "Scasso_EldomTop")
      COMPONENTI2("wk_pcv",  ATTUALE(), "Passacavi_368")

      while ( wk_lav > 0 )
      {
         //LZ 05/08/2021
         //if( VAR_VAL_STR(wk_lav[wk_lav],"TipoLavaboStr" ) != "DEPTH" )  { wk_count = wk_count + 1 }
         if( VAR_VAL_STR(wk_lav[wk_lav],"TipoLavaboStr" ) != "DEPTH" )  { wk_count = wk_count + 1 + VAR_VAL( wk_lav[wk_lav], "VAR_Rubinetto") }

         wk_lav = wk_lav - 1
      }

      wk_count = wk_count + wk_kera
      wk_count = wk_count + wk_scs
      wk_count = wk_count + wk_pcv

      if( wk_count == 1 ) { CAT_VM_sel = "TP008" }
      if( wk_count == 2 ) { CAT_VM_sel = "TP025" }
      if( wk_count == 3 ) { CAT_VM_sel = "TP026" }
      if( wk_count == 4 ) { CAT_VM_sel = "TP027" }
      if( wk_count == 5 ) { CAT_VM_sel = "TP028" }
      //TODO: :/
      if( wk_count == 6 ) { CAT_VM_sel = "TP028;TP008" }
      if( wk_count == 7 ) { CAT_VM_sel = "TP028;TP025" }
      if( wk_count == 8 ) { CAT_VM_sel = "TP028;TP026" }
      if( wk_count == 9 ) { CAT_VM_sel = "TP028;TP027" }

      //A disegno
      wk_disegno = 0
      if( IsIdx( ATTUALE(), "wk_idx_alz_ref"))
      {
         if( VAR_VAL( wk_idx_alz_ref, "VAR_Manuale") != 0 ) { wk_disegno = 1 }
      }
      if( wk_disegno == 1)
      {
         AddVal_CAT_VM_sel( CAT_VM_sel, "SM170")
         if( IS_VAR_FIXED( ATTUALE(), CAT_VM_gestvar)) { DEL_VAR_MODIFICATE( ATTUALE(), CAT_VM_gestvar) }
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C008_Scrivania_AIR
   {
      if( ACTION() <=0 | ACTION()==2 )            { EXITSUB() }
      if( IS_VAR_FIXED( ATTUALE(), "GEST_C008") ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C008") }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM086"
      CAT_VM_sel = ""

      if( VAR_VAL( ATTUALE(), "ConInserto") > 0 ) { CAT_VM_sel = "SM086" }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C009_Scrivania_AIR
   {
      if( ACTION() <=0 | ACTION()==2 )            { EXITSUB() }

      CAT_VM_var = "C009"
      CAT_VM_opz = "SM003"
      CAT_VM_sel = ""

      if( IS_VarsUser__( ATTUALE(), "GEST_C009") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C009")
         DEL_VARS_USER( ATTUALE(), "GEST_C009") }

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_pcv", ATTUALE(), 2, "Passacavi_368")

      if( wk_pcv > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM003" ) }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C009_InsertoVetroScrivania_AIR
   {
      if( ACTION() <=0 | ACTION()==2 ) { EXITSUB() }
      VarAdd = "GEST_C009"

      if( IS_VarsUser__( ATTUALE(), VarAdd) == 1 ) { DEL_VARS_USER( ATTUALE(), VarAdd) }

      gest_C009 = "__"

      NEAR_GLOBALE( "wk_pcv", ATTUALE(), 5, 1, "Passacavi_368")
      if( wk_pcv > 0 ) { gest_C009 = "SM003" }

      GEST_C009 = gest_C009
      GOSUB Add_TABER_VARSETTATE

      COMANDO(STRCAT( "VAR_CHANGE 1 ", STR(ATTUALE()), " ", VarAdd, "=", APICI(), gest_C009, APICI()))
   }

   //Luca 10/03/2021
   PROCEDURA AssMensoleLib_AIR
   {
      if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

      GOSUB DecodificaLib_AIR

      if( ACTION()==0 )
      {
         if( $ATTIVA_DLL )
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_Materiale",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_LatiFin",1)

            //Luca 10/03/2021
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)

            if( VAR_Materiale != 0 )
            {
               HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoAppoggio",1)
               HIDE_ON_EDIT2(ATTUALE(),"AltezzaSostegni",1)
            }
         }
      }

      //Simone 21/09/2023
      if( VAR_VAL(ATTUALE(),"in_pcfto") > 0 )
      {
         VAR_SET_MODE(ATTUALE(), "X",  $MODE_SHOWALWAYS)
         VAR_SET_MODE(ATTUALE(), "Z",  $MODE_SHOWALWAYS)
      }

      GOSUB SetDimMinMax_MensolaLib_AIR
   }

   PROCEDURA SetDimMinMax_MensolaLib_AIR
   {
      if( $ATTIVA_DLL == 0 )                       { EXITSUB() }
      if( $OnLoadOrder == 1 )                      { EXITSUB() }
      if( ACTION() <= 0 )                          { EXITSUB() }
      if( VAR_VAL( -1, "OnBubble_LibAir") == 1 )   { DISPLAY("", $OnBubble_LibAir) EXITSUB() }

      ModX_Utente_prec = VAR_VAL( ATTUALE(), "ModX_Utente")
      LimX_Inf_prec = VAR_VAL( ATTUALE(), "LimX_Inf")   LimX_Sup_prec = VAR_VAL( ATTUALE(), "LimX_Sup")
      LimZ_Inf_prec = VAR_VAL( ATTUALE(), "LimZ_Inf")   LimZ_Sup_prec = VAR_VAL( ATTUALE(), "LimZ_Sup")

      ModX_Utente = 0
      LimX_Inf = 552   LimX_Sup = 1840
      LimZ_Inf = 406   LimZ_Sup = 406

      if( VAR_MaterialeStr == "HAYWOOD" )
      {
         LimX_Inf = 1312  LimX_Sup = 1840
      }

      if( VAR_MaterialeStr == "LACCATO" )
      {
         ModX_Utente = 1
         LimX_Inf = 552  LimX_Sup = 1840

         if( Y > 50 )
         {
            ModX_Utente = 0
            LimX_Inf = 1312  LimX_Sup = 2208
         }

         if( Y == 50
           & VAR_Rev_Prof > 0 )
         {
            LimZ_Sup = 510
         }
      }

      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         LimX_Inf = 552  LimX_Sup = 2208

         if( IS_IDX(idx_sotto) == 0
           | VAR_TipoMensolaStr == "FONDO" )
         {
            //Fondo a terra con piedini
            if( VAR_TipoAppoggio == 1
              & ConFresataSup == 0 )
            {
               //LimX_Inf = 736  LimX_Sup = 2944
               LimX_Inf = 552  LimX_Sup = 2944
               LimZ_Inf = 406  LimZ_Sup = 560
            }

            //Fondo per set vetri a terra
            if( VAR_TipoAppoggio == 2
              | ConSetVetriWW )
            {
               LimX_Inf = 1472   LimX_Sup = 2944
               LimZ_Inf = 406    LimZ_Sup = 560

               //Nei preconfigurati utilizzo sostegni manuali e mensole di dimensioni minori
               wk_manuale = 0
               if( VAR_VAL(ATTUALE(),"in_pcfto") > 0 )                              { wk_manuale = wk_manuale + 1 }
               if( IsIdx( ATTUALE(), "idx_agg") )
               {
                  if( VAR_VAL( VAR_VAL( ATTUALE(), "idx_agg"), "VAR_Manuale") > 0 ) { wk_manuale = wk_manuale + 1 }
               }

               if( wk_manuale > 0 )
               {
                  LimX_Inf = 920
               }
            }

            if( VAR_Rev_Prof > 0 ) { LimZ_Sup = 510 }
         }

         //nei pcf ci sono anche coperchi prof. 510
         if( VAR_VAL( ATTUALE(), "in_pcfto") > 0 ) { LimZ_Sup = 510 }
      }

      if( VAR_MaterialeStr == "VETRO" )
      {
         LimX_Inf = 552  LimX_Sup = 2208
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 0 ) { LimX_Inf = 1472 }
      }

      //Aggiorno i limiti X in base all'alzata di riferimento
      wk_idx_alz_ref = idx_sopra
      if( IS_IDX(idx_sotto) ) { wk_idx_alz_ref = idx_sotto }

      if( IS_IDX(wk_idx_alz_ref) )
      {
         wk_Xmin = VAR_VAL( wk_idx_alz_ref, "Xt")
         wk_Xmax = wk_Xmin + 184
         if( wk_Xmin == 1104 ) { wk_Xmax = 1312 }

         if( VAR_VAL( wk_idx_alz_ref, "VAR_Manuale") == 0 )
         {
            if( LimX_Inf < wk_Xmin ) { LimX_Inf = wk_Xmin }

            if( wk_Xmin < 1312
              & LimX_Sup > wk_Xmax ) { LimX_Sup = wk_Xmax }
         }

         if( LimX_Sup < LimX_Inf )
         {
            DELETE_ME = 1
         }

         //ScriviSuLog( 1, "SetDimMinMax_MensolaLib_AIR", STRCAT( "[", STR(ATTUALE()), " - ACTION(): ", STR(ACTION()), " - ALZATA REF: ", STR(wk_idx_alz_ref), "] LimX_Inf=", STR(LimX_Inf), " - wk_Xmin=", STR(wk_Xmin), " - LimX_Sup=", STR(LimX_Sup), " - wk_Xmax=",STR(wk_Xmax)) )
      }

      //Aggiorno i limiti in Z in base all'alzata di riferimento, non vale per il fondo, quindi controllo solo l'idx sotto
      if( IS_IDX(idx_sotto) )
      {
         wk_Zmin = VAR_VAL( idx_sotto, "Zt")
         wk_Zmax = wk_Zmin

         //Non aggiorno i limiti per i pcf
         if( VAR_VAL( idx_sotto, "VAR_Manuale") == 0 )
         {
            if( LimZ_Inf < wk_Zmin ) { LimZ_Inf = wk_Zmin }
            if( LimZ_Sup > wk_Zmax ) { LimZ_Sup = wk_Zmax }
         }

         if( LimZ_Sup < LimZ_Inf )
         {
            DELETE_ME = 1
         }

         //ScriviSuLog( 1, "SetDimMinMax_MensolaLib_AIR", STRCAT( "[", STR(ATTUALE()), " - ACTION(): ", STR(ACTION()), " - ALZATA SOTTO: ", STR(idx_sotto), "] LimZ_Inf=", STR(LimZ_Inf), " - wk_Zmin=", STR(wk_Zmin), " - LimZ_Sup=", STR(LimZ_Sup), " - wk_Zmax=",STR(wk_Zmax)) )
      }

      if( VAR_VAL( ATTUALE(), "FLAG_Speciale") > 0 ) { DELETE_ME = 0 }

      if( $PLIKO == 1 )                              { DELETE_ME = 0 }

      if( VAR_VAL( ATTUALE(), "DELETE_ME") == 1 )
      {
         NoChiediMisureOnInsert = 0

         HI( ATTUALE(), 1)
         DISPLAY2( STRCAT(MSG(1090),"\n",MSG(1258),"\n",MSG(1249)))
         HI( ATTUALE(), 0)

         COMANDO2( STRCAT("DELETE ", STR(ATTUALE()), " //SetDimMinMax_MensolaLib_AIR, le dimensioni minime o massime non sono compatibili con l'alzata di riferimento"))

         EXITSUB()
      }

      GOSUB CreaMenu_X_MensolaLib_AIR
      GOSUB CreaMenu_Z_MensolaLib_AIR

      if( ModX_Utente_prec != ModX_Utente )
      {
         VAR_SET_MODE( ATTUALE(), "X", $MODE_MISURE + $MODE_USER*ModX_Utente)
      }
   }

   PROCEDURA CreaMenu_X_MensolaLib_AIR
   {
      VarMenuX = "LarMensLibAir"
      VarMenuX = STRCAT( VarMenuX, "_", STR(ATTUALE()))

      wk_menu_X_sel = 0

      if( LimX_Inf_prec != LimX_Inf
        | LimX_Sup_prec != LimX_Sup )
      {
         wk_menu_X_opz_str = "552;736;920;1104;1312;1472;1840;2208;2576;2944"
         STR_SPLIT( wk_menu_X_opz_str, ";", 1, "wk_menu_X_opz", ATTUALE() )

         //Minimo
         wk_menu_X_sel = 1
         wk_menu_X_sel[1] = LimX_Inf

         //Intermedi
         wk_i = 1
         while( wk_i <= wk_menu_X_opz )
         {
            wk_menu_X_att = ATOI(wk_menu_X_opz[wk_i])

            if( wk_menu_X_att > LimX_Inf
              & wk_menu_X_att < LimX_Sup )
            {
               wk_add = 0

               //Misure dedicate, 2576 disponibile solo per i fondi ww senza alzate superiori
               if( wk_menu_X_att != 2576 )    { wk_add = 1 }
               else
               {
                  if( VAR_TipoAppoggio == 1
                    & ConFresataSup == 0 )    { wk_add = 1 }

                  if( ConSetVetriWW
                    | VAR_TipoAppoggio == 2 ) { wk_add = 1 }
               }

               if( wk_add > 0 ) { AddItem2Array( ATTUALE(), "wk_menu_X_sel", wk_menu_X_att,"") }
            }

            wk_i = wk_i + 1
         }

         //Massimo
         if( LimX_Sup > LimX_Inf)
         {
            wk_menu_X_sel = wk_menu_X_sel + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("wk_menu_X_sel_##", STR(wk_menu_X_sel)), LimX_Sup)
         }

         if( wk_menu_X_sel > 0 )
         {
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuX," ins"))
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuX," clear"))

            wk_i = 1
            while( wk_i <= wk_menu_X_sel )
            {
               wk_menu_X_sel_att = wk_menu_X_sel[wk_i]

               COMANDO2( STRCAT( "MISURE_EDIT ", VarMenuX," add ", STR(wk_menu_X_sel_att), " ", STR(wk_menu_X_sel_att)))

               wk_i = wk_i + 1
            }
         }
      }

      wk_menu_update = 0
      if( wk_menu_X_sel > 0
        & VAR_MENU( ATTUALE(), "X") != VarMenuX ) { wk_menu_update = 1 }

      if( ModX_Utente == 1
        & ( LimX_Inf != LimX_Inf_prec
          | LimX_Sup != LimX_Sup_prec ) )         { wk_menu_update = 1 }

      if( wk_menu_update )
      {
         wk_menuX = VarMenuX
         if( ModX_Utente == 1 ) { wk_menuX = STRCAT( wk_menuX, "( ", STR(LimX_Inf), "-", STR(LimX_Sup), " )") }

         VAR_SET_MENU( ATTUALE(), "X", wk_menuX)
      }
   }

   PROCEDURA CreaMenu_Z_MensolaLib_AIR
   {
      VarMenuZ = "ProMensLibAir"
      VarMenuZ = STRCAT( VarMenuZ, "_", STR(ATTUALE()))

      wk_menu_Z_sel = 0

      if( LimZ_Inf_prec != LimZ_Inf
        | LimZ_Sup_prec != LimZ_Sup )
      {
         wk_menu_Z_opz     = 2
         wk_menu_Z_opz[1]  = 406
         wk_menu_Z_opz[2]  = 560

         //if( Y == 50
         //  & VAR_Rev_Prof > 0
         //  & VAR_MaterialeStr == "LACCATO") { InsertItem2Array( ATTUALE(), "wk_menu_Z_opz", 510, "", 2) }

         if( VAR_Rev_Prof > 0 )
         {
            if( VAR_MaterialeStr == "WILDWOOD"
              | ( Y == 50 & VAR_MaterialeStr == "LACCATO") ) { InsertItem2Array( ATTUALE(), "wk_menu_Z_opz", 510, "", 2) }
         }

         //Minimo
         wk_menu_Z_sel = 1
         wk_menu_Z_sel[1] = LimZ_Inf

         //Intermedi
         wk_i = 1
         while( wk_i <= wk_menu_Z_opz )
         {
            wk_menu_Z_att = wk_menu_Z_opz[wk_i]

            if( wk_menu_Z_att > LimZ_Inf
              & wk_menu_Z_att < LimZ_Sup )
            {
               wk_add = 0

               //Misure dedicate, 2576 disponibile solo per i fondi ww senza alzate superiori
               if( wk_menu_Z_att != 2576 )    { wk_add = 1 }
               else
               {
                  if( VAR_TipoAppoggio == 1
                    & ConFresataSup == 0 )    { wk_add = 1 }

                  if( ConSetVetriWW
                    | VAR_TipoAppoggio == 2 ) { wk_add = 1 }
               }

               if( wk_add > 0 ) { AddItem2Array( ATTUALE(), "wk_menu_Z_sel", wk_menu_Z_att,"") }
            }

            wk_i = wk_i + 1
         }

         //Massimo
         if( LimZ_Sup > LimZ_Inf )
         {
            wk_menu_Z_sel = wk_menu_Z_sel + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("wk_menu_Z_sel_##", STR(wk_menu_Z_sel)), LimZ_Sup)
         }

         if( wk_menu_Z_sel > 0 )
         {
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuZ," ins"))
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuZ," clear"))

            wk_i = 1
            while( wk_i <= wk_menu_Z_sel )
            {
               wk_menu_Z_sel_att = wk_menu_Z_sel[wk_i]

               COMANDO2( STRCAT( "MISURE_EDIT ", VarMenuZ," add ", STR(wk_menu_Z_sel_att), " ", STR(wk_menu_Z_sel_att)))

               wk_i = wk_i + 1
            }
         }
      }

      if( wk_menu_Z_sel > 0
        & VAR_MENU( ATTUALE(), "Z") != VarMenuZ )
      {
         VAR_SET_MENU( ATTUALE(), "Z", VarMenuZ)
      }
   }

   PROCEDURA SetAltezzaPie_MensolaLib_AIR
   {
      ConSetVetriWW = 0
      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( NOME(idx_agg) == "SetVetriFondoATerra_AIR" ) { ConSetVetriWW = 1 }

      //Simone 08/06/2022
      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 )
      {
         if( IsIdx(ATTUALE(),"idx_sotto_set_app") ) { ConSetVetriWW = 1 }
      }

      AltPie = 0
      if( VAR_TipoMensolaStr == "FONDO" )
      {
         if( VAR_MaterialeStr == "WILDWOOD"  )
         {
            //vecchia gestione
            if( ConSetVetriWW == 1 )     { VAR_TipoAppoggio = 0 }

            if( VAR_TipoAppoggio == 1 )  { AltPie = 17 }
            if( VAR_TipoAppoggio == 2 )  { AltPie = AltezzaSostegni - 30 }
         }
         else
         {
            AltPie = 17
         }

         if( VAR_EXIST(ATTUALE(), "GEST_C088")
           & VAR_VAL_STR(ATTUALE(), "GEST_C088") == "FR008" )  { AltPie = 0 }
      }

      Yt = Y + AltPie
   }

   PROCEDURA DecodificaLib_AIR
   {
      VAR_MaterialeStr = "WILDWOOD"
      if( VAR_Materiale == 1 ) { VAR_MaterialeStr = "LACCATO" }
      if( VAR_Materiale == 2 ) { VAR_MaterialeStr = "HAYWOOD" }
      if( VAR_Materiale == 3 ) { VAR_MaterialeStr = "VETRO"   }

      VAR_TipoMensolaStr = "FONDO"
      if( VAR_TipoMensola == 1 ) { VAR_TipoMensolaStr = "RIPIANO" }
      if( VAR_TipoMensola == 2 ) { VAR_TipoMensolaStr = "COPERCHIO" }

      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         if( VAR_TipoMensolaStr == "FONDO"
           & VAR_VAL(ATTUALE(),"in_pcfto") == 0 )
         {
            if( ConSetVetriWW )
            {
               HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoAppoggio",1)
               HIDE_ON_EDIT2(ATTUALE(),"AltezzaSostegni",1)
            }
            else
            {
               HIDE_ON_EDIT2(ATTUALE(),"AltezzaSostegni",SE_NUM(VAR_TipoAppoggio==2,0,1))
               if( VAR_TipoAppoggio == 2
                 | VAR_VAL_STR(ATTUALE(),"GEST_C088") == "FR007" ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoAppoggio",0) }
               else                                                { HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoAppoggio",1) }
            }
         }
         else
         {
            HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoAppoggio",1)
            HIDE_ON_EDIT2(ATTUALE(),"AltezzaSostegni",1)
         }
      }
   }

   PROCEDURA Set_Radice_MensolaLib_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 )          { EXITSUB() }

      if( FLAG_CompostoGEN == 0 )                  { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), "RADICE")
        | IS_VAR_FIXED( ATTUALE(), "GEST_CODICE")) { EXITSUB() }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- VAR_MaterialeStr=",VAR_MaterialeStr))
      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- VAR_TipoMensolaStr=",VAR_TipoMensolaStr))

      perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")

      GEST_CODICE = ""

      perRADICE   = "AIR"
      if( VAR_MaterialeStr == "LACCATO" )  { perRADICE = STRCAT(perRADICE,"LAC5080CFM" ) }
      if( VAR_MaterialeStr == "HAYWOOD"  ) { perRADICE = STRCAT(perRADICE,"HAW5080CFM" ) }

      if( VAR_MaterialeStr == "WILDWOOD" )
      {
         perRADICE = STRCAT(perRADICE,"WW80")

         if( VAR_TipoMensolaStr != "FONDO" ) { perRADICE = STRCAT(perRADICE,"CFM") }

         if( VAR_TipoMensolaStr == "FONDO" )
         {
            if( VAR_TipoAppoggio == 1 )
            {
               if( ConFresataSup == 1 ) { perRADICE = STRCAT(perRADICE,"CFM") }
               else                     { perRADICE = STRCAT(perRADICE,"PNF") }
            }

            if( VAR_TipoAppoggio == 2 | ConSetVetriWW == 1 )
            {
               perRADICE = STRCAT(perRADICE,"VT")
               //if( IS_IDX(idx_sopra) != 1 ) { perRADICE = STRCAT(perRADICE,"NF") }
               if( ConFresataSup == 0 )
               {
                  perRADICE = STRCAT(perRADICE,"NF")
               }
            }
         }

         //Simone 12/07/2022 - mensola ww in composizioni pcf
         //verifico che la mensola sia a contatto con un contenitore 368, quindi genera giunzioni da stampare con TPan
         FLAG_Stp_TPan = 0

         if( in_pcfto == 1
           | VAR_VAL_STR(ATTUALE(),"PCF_INFO") != "" )
         {
            if( IS_IDX(idx_368_sopra)
              | IS_IDX(idx_368_sotto) )
            {
               perRADICE = "MNWWPCF"
               FLAG_Stp_TPan = 1
            }
         }
      }

      if( VAR_MaterialeStr == "VETRO" )
      {
         //solo coperchio
         perRADICE = STRCAT(perRADICE,"VTR80C")
      }

      RADICE = perRADICE

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

   PROCEDURA SetVerso_Lib_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder2 == 1 ) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "VAR_Manuale") > 0 )             { EXITSUB() }
      if( OnCancella( ATTUALE()) )                             { EXITSUB() }

      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      wk_pos_var     = "PosSporgenzaAIR"
      wk_pos_val     = VAR_VAL( ATTUALE(), wk_pos_var)
      wk_pos_menu    = "PM_AIR"
      wk_pos_values  = "-1;1"

      if( VAR_VAL_STR( ATTUALE(), "AIR_Componente") == "SetAlzata" ) { wk_pos_menu = "PSA_AIR" }
      if( NOME(ATTUALE()) == "Modulo_368" )                          { wk_pos_menu = "PSC_AIR" }

      // 1.0 - Determinato dall'idx sopra
      // 1.1 - Aggiorno variabile sporgenza relativa ad elemento superiore
      if( VAR_EXIST( ATTUALE(), "PosSporgenzaAIR_sopra"))
      {
         PosSporgenzaAIR_sopra = -2
         if( IS_IDX(idx_sopra) ) { PosSporgenzaAIR_sopra = VAR_VAL( idx_sopra, wk_pos_var) }
      }

      // 1.2 - Mensola fondo o contenitore a terra, setto un valore temporaneo se non ho idx_sopra, altrimenti prendo il verso dell'elemento sopra
      //       Gestisco il duale alla fine della procedura (alzata sopra uno di questi due elementi)
      if( VAR_VAL_STR( ATTUALE(),"Tipo368") != "368-MAD" )
      {
         if( VAR_VAL_STR( ATTUALE(), "VAR_TipoMensolaStr") == "FONDO"
           | VAR_VAL( ATTUALE(), "ConPiedini") == 1 )
         {
            DEL_VAR_MODIFICATE( ATTUALE(), wk_pos_var)

            if( IS_IDX(idx_sopra) ) { wk_pos_values = STR(VAR_VAL( idx_sopra, wk_pos_var)) if( debug ) { COMANDO2("LOGMSG 1.2.1  // SetVerso_Lib_AIR") } }
            else                    { wk_pos_values = "1"                                  if( debug ) { COMANDO2("LOGMSG 1.2.2  // SetVerso_Lib_AIR") } }
         }
      }
      else
      {
         wk_pos_values = STR(VAR_VAL( ATTUALE(), wk_pos_var))

         if( debug ) { COMANDO2(STRCAT("LOGMSG Sporgenza: FIXED ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val: ", STR(VAR_VAL( ATTUALE(), wk_pos_var)), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }
      }

      // 2.0 - Determinato dall'idx sotto
      if( IS_IDX(idx_sotto) )
      {
         // 2.1 - Set alzate, se non sono la prima, prendono sempre il verso dell'elemento sotto
         if( VAR_VAL_STR( ATTUALE(), "AIR_Componente") == "SetAlzata" )
         {
            if( VAR_VAL_STR( idx_sotto,"Tipo368") != "368-MAD" )
            {
               if( VAR_VAL_STR( idx_sotto, "VAR_TipoMensolaStr") != "FONDO"
                 & VAR_VAL( idx_sotto, "ConPiedini") != 1 )
               {
                  wk_pos_values = STR(VAR_VAL( idx_sotto, wk_pos_var))
               }

               if( debug ) { COMANDO2(STRCAT("LOGMSG 2.1.1 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " idx_sotto: ", STR(VAR_VAL(ATTUALE(),"idx_sotto")), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }
            }
            else
            {
               wk_pos_values = STR(VAR_VAL( idx_sotto, wk_pos_var))

               if( debug ) { COMANDO2(STRCAT("LOGMSG 2.1.2 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " idx_sotto: ", STR(VAR_VAL(ATTUALE(),"idx_sotto")), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }
            }
         }

         // 2.2 - Centrale
         wk_X_sotto = VAR_VAL( idx_sotto, "X")
         if( VAR_VAL( idx_sotto, "Xt") > wk_X_sotto ) { wk_X_sotto = VAR_VAL( idx_sotto, "Xt") }

         wk_X_att = X
         if( VAR_VAL( ATTUALE(), "Xt") > wk_X_att )   { wk_X_att = Xt }

         if( wk_X_att == wk_X_sotto )
         {
            wk_pos_menu   = STRCAT( wk_pos_menu, "_C")
            wk_pos_values = "0"

            if( debug ) { COMANDO2(STRCAT("LOGMSG 2.2.1 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_X_sotto: ", STR(wk_X_sotto), " wk_X_att: ", STR(wk_X_att), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }
         }

         if( debug ) { COMANDO2(STRCAT("LOGMSG 2.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " idx_sotto: ", STR(VAR_VAL(ATTUALE(),"idx_sotto")), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }
      }

      // 3.0 - Esamino array versi possibili
      STR_SPLIT( wk_pos_values, ";", 1, "wk_pos_array", ATTUALE())

      wk_check = 0

      if( debug ) { COMANDO2(STRCAT("LOGMSG 3.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_check: ", STR(wk_check), " wk_pos_array: ", STR(wk_pos_array), " wk_pos_values: ", wk_pos_values, " // SetVerso_Lib_AIR")) }

      wk_i = 1
      while( wk_i <= wk_pos_array
           & wk_check == 0 )
      {
         wk_pos_att = ATOI(wk_pos_array[wk_i])

         if( wk_pos_val == wk_pos_att ) { wk_check = 1 }

         wk_i = wk_i + 1
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG 3.1 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_att: ", STR(VAR_VAL(ATTUALE(),"wk_pos_att")), " wk_pos_val: ", STR(VAR_VAL(ATTUALE(),"wk_pos_val")), " wk_check: ", STR(wk_check), " // SetVerso_Lib_AIR")) }

      // 4.0 - Se non ho valori possibili, elimino
      if( wk_pos_array == 0 )
      {
         if( debug ) { COMANDO2("LOGMSG 4.0  // SetVerso_Lib_AIR") }
         DELETE_ME = 1
         EXITSUB()
      }

      // 5.0 - Se il valore attualmente impostato è ammesso ed è stato impostato dall'utente, esco
      if( wk_check > 0
        & IS_VAR_FIXED( ATTUALE(), wk_pos_var) )
      {
         if( debug ) { COMANDO2(STRCAT("LOGMSG 5.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val: ", STR(VAR_VAL( ATTUALE(), wk_pos_var)), " // SetVerso_Lib_AIR")) }
         EXITSUB()
      }

      // 6.0 - Se non ho scelta, imposto il valore
      if( wk_pos_array == 1 )
      {
         DEL_VAR_MODIFICATE( ATTUALE(), wk_pos_var)
         VAR_VALUE_SET( ATTUALE(), wk_pos_var, ATOI(wk_pos_array[1]))
         VAR_SET_MODIFICATA( ATTUALE(), wk_pos_var, "")

         if( debug ) { COMANDO2(STRCAT("LOGMSG 6.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val: ", STR(VAR_VAL( ATTUALE(), wk_pos_var)), " // SetVerso_Lib_AIR")) }
      }

      // 7.0 - Aggiorno menu se necessario
      if( VAR_MENU( ATTUALE(), wk_pos_var) != wk_pos_menu )
      {
         VAR_SET_MENU( ATTUALE(), wk_pos_var, wk_pos_menu)

         if( debug ) { COMANDO2(STRCAT("LOGMSG 7.0 ", NOME(ATTUALE()), ": ", STR( ATTUALE()), " wk_pos_val: ", STR(VAR_VAL( ATTUALE(), wk_pos_var)), " wk_pos_menu: ", wk_pos_menu, " // SetVerso_Lib_AIR")) }
      }

      // 8.0 - Se posso scegliere chiedo all'utente
      if( wk_check == 0
        & wk_pos_array > 1 )
      {
         HI( ATTUALE(), 1)
         CHIEDI( ATTUALE(), wk_pos_var)
         HI( ATTUALE(), 0)

         if( debug ) { COMANDO2(STRCAT("LOGMSG 8.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val: ", STR(VAR_VAL( ATTUALE(), wk_pos_var)), " // SetVerso_Lib_AIR")) }
      }

      // 9.0 - Se sono il primo set vetri e sono sopra ad una mensola fondo o a un contenitore a terra, imposto il mio verso alla mensola
      if( VAR_VAL_STR( idx_sotto,"Tipo368") != "368-MAD" )
      {
         if( VAR_VAL_STR( idx_sotto, "VAR_TipoMensolaStr") == "FONDO"
           | VAR_VAL( idx_sotto, "ConPiedini") == 1 )
         {
            if( debug ) { COMANDO2(STRCAT("LOGMSG 9.0 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val_alzata: ", STR(VAR_VAL(ATTUALE(), wk_pos_var)), " idx_sotto: ", STR(idx_sotto), " wk_pos_val_sotto: ", STR(VAR_VAL( idx_sotto, wk_pos_var)), " // SetVerso_Lib_AIR")) }

            DEL_VAR_MODIFICATE( idx_sotto, wk_pos_var)
            if( debug ) { COMANDO2(STRCAT("LOGMSG 9.0.1 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val_alzata: ", STR(VAR_VAL(ATTUALE(), wk_pos_var)), " idx_sotto: ", STR(idx_sotto), " wk_pos_val_sotto: ", STR(VAR_VAL( idx_sotto, wk_pos_var)), " // SetVerso_Lib_AIR")) }

            VAR_VALUE_SET( idx_sotto, wk_pos_var, VAR_VAL( ATTUALE(), "wk_pos_var"))
            VAR_SET_MODIFICATA( idx_sotto, wk_pos_var, "")
            COMANDO( STRCAT( "RICALCOLA_UNA ", STR(idx_sotto), " //SetVerso_Lib_AIR ", NOME(ATTUALE())))

            if( debug ) { COMANDO2(STRCAT("LOGMSG 9.0.2 ", NOME(ATTUALE()), ": ", STR(ATTUALE()), " wk_pos_val_alzata: ", STR(VAR_VAL(ATTUALE(), wk_pos_var)), " idx_sotto: ", STR(idx_sotto), " wk_pos_val_sotto: ", STR(VAR_VAL( idx_sotto, wk_pos_var)), " // SetVerso_Lib_AIR")) }
         }
      }

      // 10.0 - Ricalcolo aggancio
      if( wk_pos_val != VAR_VAL( ATTUALE(), wk_pos_var) )
      {
         GOSUB SetAggancio_Lib_AIR
      }
   }

   PROCEDURA SetAggancio_Lib_AIR
   {
      idx_agg = AGGANCIATA(ATTUALE(),"*")

      if( IS_IDX(idx_agg) == 0 )  { EXITSUB() }

      cnt_attuale = CNT_STR(ATTUALE())

      //sinistro - destro
      wk_sd = GetParamStrCnt(cnt_attuale,"SD")
      if( PosSporgenzaAIR > 0 & wk_sd == "S" ) { EXITSUB() }
      if( PosSporgenzaAIR < 0 & wk_sd == "D" ) { EXITSUB() }

      wk_sd = SE_STR( PosSporgenzaAIR < 0 , "D+","S+")

      //alto-basso
      wk_ab = GetParamStrCnt(cnt_attuale,"AB+")

      //fronte-retro
      wk_fr = GetParamStrCnt(cnt_attuale,"FR+")

      wk_offset = GetParamStrCnt(cnt_attuale,"OFFSET")

      wk_str_new = CostruisciStrCnt2(wk_sd,wk_ab,wk_fr,wk_offset)

      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
      COMANDO(STRCAT("CONNESSIONE_EDIT ",wk_str_new))

      UpdatePos_sotto = 0

      if( NOME(idx_agg) == "Modulo_368" )
      {
         if( IS_VarsUser__(idx_agg,"PosSporgenzaAIR") == 0 )
         {
            DEL_VAR_MODIFICATE(idx_agg,"PosSporgenzaAIR")
            VAR_VALUE_SET(idx_agg,"PosSporgenzaAIR",PosSporgenzaAIR)
            VAR_SET_MODIFICATA(idx_agg,"PosSporgenzaAIR","")
            COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
         }
      }

      if( NOME(idx_agg) == "MensolaLib_AIR"
        & VAR_VAL_STR(idx_agg,"VAR_TipoMensolaStr") == "FONDO"
        //& VAR_VAL_STR(idx_agg,"VAR_MaterialeStr") == "WILDWOOD" )
        )
      {
         DEL_VAR_MODIFICATE(idx_agg,"PosSporgenzaAIR")
         VAR_VALUE_SET(idx_agg,"PosSporgenzaAIR",PosSporgenzaAIR)
         VAR_SET_MODIFICATA(idx_agg,"PosSporgenzaAIR","")
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))

         if( VAR_VAL(idx_agg,"ConSetVetriWW") )
         {
            idx_setv = AGGANCIATA(idx_agg,"*")
            if( IS_IDX(idx_setv)  )
            {
               DEL_VAR_MODIFICATE(idx_setv,"PosSporgenzaAIR")
               VAR_VALUE_SET(idx_setv,"PosSporgenzaAIR",PosSporgenzaAIR)
               VAR_SET_MODIFICATA(idx_setv,"PosSporgenzaAIR","")
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_setv)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
            }
         }
      }

      if( NOME(ATTUALE()) == "MensolaLib_AIR" )
      {
         if( NOME(idx_agg) == "SetAlzataVetro_AIR"
           & IsIdx(ATTUALE(),"idx_sopra") == 1 )
         {
            if( NOME(idx_sopra) == "SetAlzataVetro_AIR" )
            {
               DEL_VAR_MODIFICATE(idx_sopra,"PosSporgenzaAIR")
               VAR_VALUE_SET(idx_sopra,"PosSporgenzaAIR",PosSporgenzaAIR)
               VAR_SET_MODIFICATA(idx_sopra,"PosSporgenzaAIR","")
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
               COMANDO(STRCAT("VAR_SET$ $ChangedIdx=",STR(idx_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
               COMANDO(STRCAT("Procedura OnChangedVar ",STR(idx_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
            }
         }
      }

      if( NOME(ATTUALE()) == "Modulo_368" )
      {
         if( NOME(idx_agg) == "SetAlzataVetro_AIR"
           & IsIdx(ATTUALE(),"idx_setv_sopra") == 1 )
         {
            if( NOME(idx_setv_sopra) == "SetAlzataVetro_AIR" )
            {
               DEL_VAR_MODIFICATE(idx_setv_sopra,"PosSporgenzaAIR")
               VAR_VALUE_SET(idx_setv_sopra,"PosSporgenzaAIR",PosSporgenzaAIR)
               VAR_SET_MODIFICATA(idx_setv_sopra,"PosSporgenzaAIR","")
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_setv_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
               COMANDO(STRCAT("VAR_SET$ $ChangedIdx=",STR(idx_setv_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
               COMANDO(STRCAT("Procedura OnChangedVar ",STR(idx_setv_sopra)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
            }
         }
      }

      if( NOME(idx_agg) == "SetVetriContenitore_AIR" )
      {
         DEL_VAR_MODIFICATE(idx_agg,"PosSporgenzaAIR")
         VAR_VALUE_SET(idx_agg,"PosSporgenzaAIR",PosSporgenzaAIR)
         VAR_SET_MODIFICATA(idx_agg,"PosSporgenzaAIR","")
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //SetAggancio_Lib_AIR ",NOME(ATTUALE())))
      }
   }

   PROCEDURA SetSopraSotto_Lib_AIR
   {
      idx_sopra     = -1
      idx_sotto     = -1
      idx_368_sopra = -1
      idx_368_sotto = -1

      //se appoggio sotto
      idx_sotto_set_app = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_sotto",idx_cnear_dw,2,"*")
      NEAR_GLOBALE2("wk_sopra",idx_cnear_up,2,"*")

      i = 1
      while ( i <= wk_sopra  )
      {
         if( NOME(wk_sopra[i]) == "MensolaLib_AIR"
           | NOME(wk_sopra[i]) == "SetAlzataVetro_AIR"
           | NOME(wk_sopra[i]) == "SetAlzataVetroConContenitore_AIR"  )
         {
            if( wk_sopra[i] != ATTUALE() )  { idx_sopra = wk_sopra[i] }
         }

         i = i + 1
      }

      i = 1
      while ( i <= wk_sotto  )
      {
         if( NOME(wk_sotto[i]) == "MensolaLib_AIR"
           | NOME(wk_sotto[i]) == "SetAlzataVetro_AIR"
           | NOME(wk_sotto[i]) == "SetAlzataVetroConContenitore_AIR"  )
         {
            if( wk_sotto[i] != ATTUALE() )  { idx_sotto = wk_sotto[i] }
         }

         //Luca 15/12/2021
         if( NOME(wk_sotto[i]) == "SetVetriFondoATerra_AIR"  ) { idx_sotto_set_app = wk_sotto[i] }

         i = i + 1
      }

      //Simone 06/04/2023
      $wk_i = 1
      while( $wk_i <= wk_sopra )
      {
         if( NOME(wk_sopra[$wk_i]) == "Modulo_368" ) { idx_368_sopra = wk_sopra[$wk_i] }
         $wk_i = $wk_i + 1
      }

      $wk_i = 1
      while( $wk_i <= wk_sotto )
      {
         if( NOME(wk_sotto[$wk_i]) == "Modulo_368" ) { idx_368_sotto = wk_sotto[$wk_i] }
         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA SetTipologia_MensolaLib_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      wk_A_TERRA  = 1 - APPESO( ATTUALE(), 1 , "" )

      GOSUB SetSopraSotto_Lib_AIR

      VAR_TipoMensola = 0
      if( IS_IDX(idx_sotto) == 1 & IS_IDX(idx_sopra) == 1 ) { VAR_TipoMensola = 1 }
      if( IS_IDX(idx_sotto) == 1 & IS_IDX(idx_sopra) == 0 ) { VAR_TipoMensola = 2 }

      //Luca 12/05/2022
      //aggiungo controllo elementi agganciati per gestire il tipo mensola
      if( VAR_TipoMensola == 0 )
      {
         idx_agg = AGGANCIATA(ATTUALE(),"*")
         wk_alzata_sotto = 0
         wk_alzata_sopra = 0

         if( IS_IDX(idx_agg) )
         {
            if( IS_MATCH( NOME(idx_agg) , "SetAlzata*AIR" ) ) { wk_alzata_sotto = 1  idx_sotto = idx_agg }
         }

         AGGANCIATI("wk_mens","*",ATTUALE())
         i = 1
         while ( i <= wk_mens )
         {
            if( IS_MATCH( NOME(wk_mens[i]) , "SetAlzata*AIR" )
              & VAR_VAL(wk_mens[i],"base_0.y") > base_0.y )   { wk_alzata_sopra = 1 idx_sopra = wk_mens[i] }
            i = i + 1
         }

         if( wk_alzata_sotto == 1 & wk_alzata_sopra == 1 ) { VAR_TipoMensola = 1 }
         if( wk_alzata_sotto == 1 & wk_alzata_sopra == 0 ) { VAR_TipoMensola = 2 }

      }

      GOSUB DecodificaLib_AIR

      //Luca 30/06/2022
      VAR_SET_MODE(ATTUALE(),"PosSporgenzaAIR",$MODE_MISURE)
      if( VAR_TipoMensolaStr == "FONDO" ) { VAR_SET_MODE(ATTUALE(),"PosSporgenzaAIR",$MODE_SHOWALWAYS) }

      if( $OnLoadOrder2==1 )  { EXITSUB() }

      ScriviSuLog( 0 , "SetTipologia_MensolaLib_AIR" , STRCAT("[",STR(ATTUALE()),"] VAR_TipoMensola=",STR(VAR_TipoMensola)) )

      ConFresataSup = 0
      if( IS_IDX(idx_sopra) )
      {
         if( NOME(idx_sopra) == "SetAlzataVetro_AIR"
           | NOME(idx_sopra) == "SetAlzataVetroConContenitore_AIR" ) { ConFresataSup = 1 }
      }

      //GOSUB DecodificaLib_AIR
      //
      ////Luca 30/06/2022
      //VAR_SET_MODE(ATTUALE(),"PosSporgenzaAIR",$MODE_MISURE)
      //if( VAR_TipoMensolaStr == "FONDO" ) { VAR_SET_MODE(ATTUALE(),"PosSporgenzaAIR",$MODE_SHOWALWAYS) }

      //aggiorno subito
      GOSUB SetAltezzaPie_MensolaLib_AIR

      GOSUB CtrlElementoInferiore_AIR
   }

   PROCEDURA CtrlElementoInferiore_AIR
   {
      if( IS_IDX(idx_sotto) == 0) { EXITSUB() }

      //Non stesso elemento
      wk_nome_sotto = NOME(idx_sotto)

      if( NOME(ATTUALE()) == wk_nome_sotto)
      {
         NoChiediMisureOnInsert = 1
         DELETE_ME = 1
         EXITSUB()
      }

      //Confronto con elementi compatibili
      wk_cmp_1 = 4                                       wk_cmp_2 = 4
      wk_cmp_1[1] = "SetAlzataVetro_AIR"                 wk_cmp_2[1] = "MensolaLib_AIR;Modulo_368"
      wk_cmp_1[2] = "SetAlzataVetroConContenitore_AIR"   wk_cmp_2[2] = "MensolaLib_AIR"
      wk_cmp_1[3] = "MensolaLib_AIR"                     wk_cmp_2[3] = "SetAlzataVetro_AIR;SetAlzataVetroConContenitore_AIR;SetVetriFondoATerra_AIR"
      wk_cmp_1[4] = "Modulo_368"                         wk_cmp_2[4] = "SetAlzataVetro_AIR;SetVetriContenitore_AIR"

      wk_check = 0
      wk_i = 1
      while( wk_check == 0
           & wk_i <= wk_cmp_1 )
      {
         wk_cmp_1_att = wk_cmp_1[wk_i]
         wk_cmp_2_att = wk_cmp_2[wk_i]

         if( Is_In_StrArray( NOME(ATTUALE()), wk_cmp_1_att, ";") )
         {
            if( Is_In_StrArray( wk_nome_sotto, wk_cmp_2_att, ";") ) { wk_check = 1 }
         }

         wk_i = wk_i + 1
      }

      //Nulla sopra al set con coperchio
      if( VAR_VAL( idx_sotto, "FLAG_ConCoperchio") > 0 ) { wk_check = 0 }

      if( wk_check == 0 )
      {
         NoChiediMisureOnInsert = 1
         DELETE_ME = 1
         EXITSUB()
      }
   }

   PROCEDURA Set_Gest_C062_MensolaLib_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 | ACTION() == 1064) { EXITSUB() }

      VarAdd = "GEST_C062"

      gest_C062 = "AIR02"
      if( VAR_TipoMensolaStr == "FONDO"    ) { gest_C062 = "AIR03" }
      if( VAR_TipoMensolaStr == "COPERCHIO") { gest_C062 = "AIR01" }

      if( gest_C062 != VAR_VAL_STR( ATTUALE(), VarAdd))
      {
         if( IS_VarsUser__( ATTUALE(), VarAdd) == 1) { DEL_VARS_USER( ATTUALE(), VarAdd) }
         if( IS_VAR_FIXED( ATTUALE(), VarAdd) == 1)  { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

         GEST_C062 = gest_C062
         GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_Gest_C092_VetroAlzata_AIR
   {
      if( ACTION() <= 0 | ACTION()== 2 )          { EXITSUB() }
      if( VAR_VAL(ATTUALE(),"ConForo_PCV") > 0 )  { EXITSUB() }

      gest_C092  = "__"

      //if( IS_VAR_FIXED(ATTUALE(),"GEST_C092") )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C092") }

      COMPONENTI2("sca",ATTUALE(),"ScassoAlzataVetro_AIR")
      if( sca > 0 ) { gest_C092 = "FS001" }

      C092 = gest_C092
      VarAdd = "C092"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C105_VetroAlzata_AIR
   {
      if( ACTION() <= 0 | ACTION()== 2 )           { EXITSUB() }

      gest_C105  = "__"
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C105") )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C105") }

      sca = 0
      COMPONENTI2("sca",ATTUALE(),"ScassoAlzataVetro_AIR")
      if( sca > 0 ) { gest_C105 = "FF003" }
      else          { gest_C105 = "__" }

      GEST_C105 = gest_C105
      VarAdd = "GEST_C105"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C062_Contenitore_AIR
   {
      if( ACTION() <= 0 | ACTION()== 2 )                { EXITSUB() }

      //LZ 14/09/2021: esco se non sono modulo air
      if( VAR_VAL( ATTUALE(), "FLAG_Modulo_AIR") == 0 ) { EXITSUB() }

      gest_C062  = "AIR02"

      if( IS_VarsUser__(ATTUALE(),"GEST_C062") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C062")
         DEL_VARS_USER(ATTUALE(),"GEST_C062")
      }

      if( ConFresataSup == 1 & ConFresataInf==0 ) { gest_C062 = "AIR03" }
      if( ConFresataSup == 0 & ConFresataInf==1 ) { gest_C062 = "AIR01" }
      if( ConFresataSup == 1 & ConFresataInf==1 ) { gest_C062 = "AIR02" }

      GEST_C062 = gest_C062

      VarAdd = "GEST_C062"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C087_MensolaLib_AIR
   {
      if( ACTION() <= 0 | ACTION()== 2 ) { EXITSUB() }

      if( IS_VarsUser__(ATTUALE(),"GEST_C087") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C087")
         DEL_VARS_USER(ATTUALE(),"GEST_C087")
      }

      gest_C087 = "__"
      if( VAR_VAL( ATTUALE(), "Con_Antirib") > 0 ) { gest_C087 = "FR015" }

      GEST_C087 = gest_C087
      VarAdd = "GEST_C087"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C094_MensolaLib_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2)           { EXITSUB() }

      VarAdd = "GEST_C094"

      DEL_VARS_USER( ATTUALE(), VarAdd)
      DEL_VAR_MODIFICATE( ATTUALE(), VarAdd)

      gest_C094 = ""
      if( PosSporgenzaAIR < 0 ) { gest_C094 = "SX001" }
      if( PosSporgenzaAIR == 0) { gest_C094 = "P0007" }
      if( PosSporgenzaAIR > 0 ) { gest_C094 = "DX001" }

      //STRDADB(idx,"CATVAL_INCONF","cat;val")
      //dove :   idx = idx della struttura su cui fare il controllo
      //         cat = codice della categoria da controllare (con o senza GEST_ iniziale)
      //         val = valore da controllare
      //ritorna: "0" = cat/val esiste in configurazione
      //         "1" = cat non esiste in configurazione
      //         "2" = val non esiste in configurazione
      //         "3" = cat mancante
      //         "4" = val mancante
      //         "-1" = articolo non trovato/configurato
      wk_test = STRDADB( ATTUALE(), "CATVAL_INCONF", STRCAT( VarAdd, ";", gest_C094))
      wk_test = ATOI(wk_test)

      WARN_ME = 0
      if( wk_test == 2
        | wk_test == 4) { WARN_ME = 1 }

      GEST_C094 = gest_C094
      GOSUB Add_TABER_VARSETTATE

      VAR_SET_MODIFICATA( ATTUALE(), VarAdd, "")
   }

   //Luca 06/10/2022 - Attivo la sag. a disegno sul piano se il tavolo risulta ridotto
   PROCEDURA Set_Gest_C008_Piano_Tav_Air
   {
      if( ACTION() <=0 | ACTION()==2 )            { EXITSUB() }

      VarAdd = "GEST_C008"

      gest_C008_att = VAR_VAL_STR( ATTUALE(), VarAdd)
      if( gest_C008_att == "" ) { gest_C008_att = "__" }

      gest_C008  = "__"
      wk_rid_x = VAR_VAL_STR( idx_pdr, "GEST_C011")
      if( wk_rid_x == "" ) { wk_rid_x = "__" }

      wk_rid_z = VAR_VAL_STR( idx_pdr, "GEST_C013")
      if( wk_rid_z == "" ) { wk_rid_z = "__" }

      if( wk_rid_x != "__"
        | wk_rid_z != "__" )  { gest_C008 = "SPEC1" }

      if( gest_C008_att == gest_C008 ) { EXITSUB() }

      if( gest_C008 == "__" )          { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) ) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      if( gest_C008_att != "__" ) { gest_C008 = STRCAT(gest_C008_att, ";", gest_C008 }

      GEST_C008 = gest_C008
      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C008_LavCellule
   {
      if( VAR_VAL_STR( ATTUALE(), "TipoLavaboStr") != "CELLULE" )   { EXITSUB() }
      if( ACTION() <= 0 | ACTION()== 2 )                            { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C008") == 0 )                 { EXITSUB() }

      gest_C008  = "FL001"

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C008") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C008") }

      if( VAR_Rubinetto ) { gest_C008 = "FL002" }

      if( GEST_C008 != gest_C008 )
      {
         GEST_C008 = gest_C008
         VarAdd = "GEST_C008"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA OnQueryBdmLocal_Lib_AIR
   {
      if( VAR_VAL( -1, "OnBubble_LibAir") == 1 ) { DISPLAY("", $OnBubble_LibAir) EXITSUB() }

      if( $query_type == 1 )
      {
         // 0 - Preparo il messaggio corretto per i delete
         //1265 "COMPOSIZIONE AIR non rispetta le regole di costruzione."
         //1257 "Non è possibile agganciare un SET VETRI in questa posizione."
         //1258 "Non è possibile agganciare una MENSOLA in questa posizione."
         wk_msg = MSG(1265)
         if( NOME(ATTUALE()) == "MensolaLib_AIR" )     { wk_msg = MSG(1258) }
         if( IS_MATCH( NOME(ATTUALE()), "SetVetri*") ) { wk_msg = MSG(1257) }

         DELETE_ME_msg = STRCAT( MSG(1090), "\n", wk_msg, "\n", MSG(1249))

         // 1 - Tutti gli elementi devono essere agganciati, ad eccezione dei seguenti che possono essere l'elemento di partenza
         wk_elm_test = "MensolaLib_AIR;SetVetriContenitore_AIR;SetVetriFondoATerra_AIR;Modulo_368"
         if( $M4_DragInfo_Mode != 0 )
         {
            if( Is_In_StrArray( NOME(ATTUALE()), wk_elm_test, ";") == 0 )
            {
               NoChiediMisureOnInsert = 1
               DELETE_ME = 1
               EXITSUB()
            }

            //1.1 - No mensole rivestite
            if( NOME(ATTUALE()) == "MensolaLib_AIR"
              & VAR_VAL_STR( ATTUALE(), "VAR_MaterialeStr") == "VETRO" )
            {
               NoChiediMisureOnInsert = 1
               DELETE_ME = 1
               EXITSUB()
            }
         }

         // 2 - Elementi che non possono essere agganciati
         wk_elm_test = "SetVetriContenitore_AIR;SetVetriFondoATerra_AIR"
         if( $M4_DragInfo_Mode == 0 )
         {
            if( Is_In_StrArray( NOME(ATTUALE()), wk_elm_test, ";") == 1 )
            {
               NoChiediMisureOnInsert = 1
               DELETE_ME = 2
               EXITSUB()
            }
         }

         // 3 - Gestisco aggancio
         if( $M4_DragInfo_Mode == 0 )
         {
            //Anticipo idx_sotto, necessario per creazione menu
            idx_sotto = $M4_DragInfo_Ref

            //Nome e tipo elemento a cui mi aggancio
            wk_agg_nome = NOME($M4_DragInfo_Ref)
            wk_agg_tipo = VAR_VAL_STR( $M4_DragInfo_Ref, "AIR_Componente")

            //Dimensioni elemento a cui mi aggancio
            wk_agg_x = VAR_VAL( $M4_DragInfo_Ref, "Xt")
            if( wk_agg_x <= 0 ) { wk_agg_x = VAR_VAL( $M4_DragInfo_Ref, "X") }

            //Elemento ancora più in basso
            wk_agg_idx_sotto  = -1
            wk_agg_nome_sotto = ""
            wk_agg_x_sotto    = -1
            if( IsIdx( $M4_DragInfo_Ref, "idx_sotto") )
            {
               wk_agg_idx_sotto = VAR_VAL( $M4_DragInfo_Ref, "idx_sotto")
               wk_agg_nome_sotto = NOME(wk_agg_idx_sotto)

               wk_agg_x_sotto = VAR_VAL( wk_agg_idx_sotto, "Xt")
               if( wk_agg_x_sotto <= 0 ) { wk_agg_x_sotto = VAR_VAL( wk_agg_idx_sotto, "X") }
            }

            wk_agg_z = VAR_VAL( $M4_DragInfo_Ref, "Zt")
            if( wk_agg_z <= 0 ) { wk_agg_z = VAR_VAL( $M4_DragInfo_Ref, "Z") }

            // 3.1 - Controlli su elemento a cui mi aggancio
            // 3.1.1 - Gli elementi devono essere intervallati, elimino se agganciato ad un elemento uguale
            if( wk_agg_nome == NOME(ATTUALE()) )
            {
               NoChiediMisureOnInsert = 1
               DELETE_ME = 3.11
               EXITSUB()
            }

            // 3.1.2 - I contenitori devono essere dedicati
            if( wk_agg_nome == "Modulo_368"
              & VAR_VAL( $M4_DragInfo_Ref, "FLAG_Modulo_AIR") == 0 )
            {
               // Lo permetto in costruzione composti, utilizzo per i pcf 36e8 con alzate modificate manualmente
               if( $ATTIVA_DLL == 1 )
               {
                  NoChiediMisureOnInsert = 1
                  DELETE_ME = 3.12
                  EXITSUB()
               }
            }

            // 3.2 - Accoppiamenti possibili
            GOSUB CtrlElementoInferiore_AIR
            if( VAR_VAL( ATTUALE(), "DELETE_ME") > 0 ) { EXITSUB() }

            // 3.3 - Controlli specifici per set alzate
            if( AIR_Componente == "SetAlzata" )
            {
               if( wk_agg_nome == "MensolaLib_AIR"
                 & VAR_VAL_STR($M4_DragInfo_Ref, "VAR_MaterialeStr") == "VETRO" )
               {
                  NoChiediMisureOnInsert = 1
                  DELETE_ME = 3.3
                  EXITSUB()
               }

               // 3.3.1 - Controlli specifici per set alzate con contenitore, solo con mensole P406 maggiori di 1312
               if( NOME(ATTUALE()) == "SetAlzataVetroConContenitore_AIR" )
               {
                  //Secondo listino sarebbe fattibile solo per mensole >= 1472, dato che fattibile sblocco anche per le 1312
                  //if( wk_agg_x <= 1312
                  //  | wk_agg_z != 406 )
                  if( wk_agg_x < 1312
                    | wk_agg_z != 406 )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.31
                     EXITSUB()
                  }
               }

               // 3.3.2 - Controlli specifici per set alzate dedicate ai contenitori, ormai obsoleti
               if( VAR_VAL( ATTUALE(), "FLAG_PerContenitori") == 1 )
               {
                  if( wk_agg_nome != "Modulo_368" )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.32
                     EXITSUB()
                  }
                  else
                  {
                     if( Xt != wk_agg_x )
                     {
                        NoChiediMisureOnInsert = 1
                        DELETE_ME = 3.32
                        EXITSUB()
                     }
                  }
               }

               // 3.3.3 - Controlli specifici per set alzate con appendiabiti
               if( VAR_VAL( ATTUALE(), "FLAG_ConAppendiabiti") )
               {
                  // 3.3.3.1 - Solo sopra moduli P560/510 e mensole P510
                  wk_check = 0
                  if( wk_agg_nome == "Modulo_368" & wk_agg_z >= 510 )     { wk_check = 1 }
                  if( wk_agg_nome == "MensolaLib_AIR" & wk_agg_z == 510 ) { wk_check = 2 }

                  //if( wk_check == 0 )
                  //{
                  //   NoChiediMisureOnInsert = 1
                  //   DELETE_ME = 3.331
                  //   EXITSUB()
                  //}

                  // 3.3.3.2 - No su moduli L552
                  if( wk_agg_x < 736
                    & VAR_VAL(ATTUALE(),"FLAG_Speciale") == 0 )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.332
                     EXITSUB()
                  }

                  // 3.3.3.3 - Dimensiono il set alzata con appendiabiti
                  if( wk_agg_x < 1472 )
                  {
                     X = 1064
                     if( wk_agg_x < 1104 ) { X = 696 }
                     VAR_SET_MODIFICATA( ATTUALE(), "X", "")
                     PA2_Ricalcola = 1
                  }

                  // 3.3.3.4 - Appendiabiti con coperchio
                  if( VAR_VAL( ATTUALE(), "FLAG_ConCoperchio") )
                  {
                     if( wk_agg_nome != "Modulo_368" ) { wk_check = 0 }

                     if( wk_agg_x > 1472
                       | wk_agg_x == 920 )             { wk_check = 0 }

                     if( wk_agg_x == 1472 )
                     {
                        X = 1432
                        VAR_SET_MODIFICATA( ATTUALE(), "X", "")
                        PA2_Ricalcola = 1
                     }
                  }

                  if( wk_check == 0 )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.33
                     EXITSUB()
                  }

                  //Aggiorno subito Xt, l'alzata con appendiabiti ha un composto unico che si adatta
                  Xt = X + 2*$Air_SetAlzataVetro_Rie_Vetro_Lato
               }

               //3.3.4 - Verifico dimensione, tengo presente che esistono composti dimensionati. Per i non dimensionati vedi procedura SetDimMinMax_Alzata_AIR
               if( VAR_VAL( ATTUALE(), "FLAG_CompostoGEN") == 0 )
               {
                  wk_blocca = 0
                  //Non posso essere di larghezza diversa rispetto ad altri set alzata della stessa composizione
                  if( wk_agg_x_sotto > 0
                    & Xt != wk_agg_x_sotto )           { wk_blocca = 1 }

                  //Non posso essere più grande dell'elemento inferiore
                  if( Xt > wk_agg_x )                  { wk_blocca = 1 }

                  //Se <= 1104, non posso nemmeno essere più piccolo
                  if( Xt <= 1104 )
                  {
                     // blocco sempre su contenitori di larghezza differente
                     if( Xt != wk_agg_x
                       & wk_agg_nome == "Modulo_368" ) { wk_blocca = 1 }

                     // per le mensole permetto anche misura successiva
                     if( wk_agg_nome == "MensolaLib_AIR" )
                     {
                        wk_Xmin = Xt
                        wk_Xmax = Xt + 184
                        if( wk_Xmax == 1104 + 184 )    { wk_Xmax = 1312 }

                        if( wk_agg_x < wk_Xmin
                          | wk_agg_x > wk_Xmax )       { wk_blocca = 1 }
                     }
                  }

                  if( wk_blocca == 1 )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.34
                     EXITSUB()
                  }
               }

               //3.3.5 - Creo stringa connessione
               wk_sd = SE_STR( PosSporgenzaAIR < 0 , "D+","S+")

               wk_offx = 0
               wk_offy = 0
               wk_offz = 0
               if( wk_agg_nome == "MensolaLib_AIR" ) { wk_offz = 2 }

               wk_str_new = CostruisciStrCnt2( wk_sd, "A-", "R+", STRCAT( STR(wk_offx), " ", STR(wk_offy), " ", STR(wk_offz)," 0"))

               $M4_DragInfo_Cnt = wk_str_new
               $QueryResult__ = 3
            }

            // 3.4 - Controlli specifici per mensole
            if( AIR_Componente == "Mensola" )
            {
               // 3.4.1 - Abbinamento materiali
               // 3.4.1.1 - Mensole solo WW se sopra Set vetri a terra
               if( wk_agg_nome == "SetVetriFondoATerra_AIR" )
               {
                  if( VAR_MaterialeStr != "WILDWOOD" )
                  {
                     NoChiediMisureOnInsert = 1
                     DELETE_ME = 3.4
                     EXITSUB()
                  }
               }

               // 3.4.2 - Dimensioni
               // 3.4.2.1 - Larghezza
               // 3.4.2.1.1 - Mensole strette laccate solo sp 50
               if( Y > 50
                 & wk_agg_x < 1312
                 & VAR_MaterialeStr == "LACCATO" )
               {
                  NoChiediMisureOnInsert = 1
                  DELETE_ME = 3.4211
                  EXITSUB()
               }

               // 3.4.2.1.2 - Dimensiono in larghezza
               wk_x_new = wk_agg_x
               if( wk_agg_x_sotto > wk_agg_x ) { wk_x_new = wk_agg_x_sotto }

               if( wk_x_new > 0
                 & wk_x_new >= LimX_Inf
                 & wk_x_new <= LimX_Sup )
               {
                  X = wk_x_new
                  VAR_SET_MODIFICATA( ATTUALE(), "X", "")
                  PA2_Ricalcola = 1
               }

               // 3.4.2.2 - Profondità
               // 3.4.2.2.1 - Mensole profonde solo sp 50
               if( Y > 50
                 & wk_agg_z > 406 )
               {
                  NoChiediMisureOnInsert = 1
                  DELETE_ME = 3.4221
                  EXITSUB()
               }

               // 3.4.2.2.2 - Dimensiono in profondità
               if( wk_agg_z > 0
                 & wk_agg_z >= LimZ_Inf
                 & wk_agg_z <= LimZ_Sup )
               {
                  Z = wk_agg_z
                  VAR_SET_MODIFICATA( ATTUALE(), "Z", "")
                  PA2_Ricalcola = 1
               }

               //3.4.3 - Creo stringa connessione
               wk_sd = SE_STR( PosSporgenzaAIR < 0 , "D+","S+")

               wk_offx = 0
               wk_offy = 0
               if( NOME($M4_DragInfo_Ref) == "SetVetriFondoATerra_AIR" ) { offy = -30 }
               wk_offz = -2

               wk_str_new = CostruisciStrCnt2( wk_sd, "A-", "R+", STRCAT( STR(wk_offx), " ", STR(wk_offy), " ", STR(wk_offz)," 0"))
               $M4_DragInfo_Cnt = wk_str_new
               $QueryResult__ = 3
            }

            // 3.5 - Controlli specifici per contenitori
            if( AIR_Componente == "Contenitore" )
            {
               // 3.5.1 - Larghezza
               wk_blocca = 0
               if( X > 1312
                 & wk_agg_x < 1312 )                          { wk_blocca = 1 }

               if( X <= 1312
                 & X != wk_agg_x )                            { wk_blocca = 2 }

               if( X < 1472
                 & wk_agg_nome == "SetVetriContenitore_AIR" ) { wk_blocca = 3 }

               if( wk_blocca > 0 )
               {
                  DELETE_ME = 3.51
                  EXITSUB()
               }

               // 3.5.2 - Profondità
               if( Zt != wk_agg_z )
               {
                  DELETE_ME = 3.52
                  EXITSUB()
               }

               //3.4.5 - Creo stringa connessione
               wk_sd = SE_STR( PosSporgenzaAIR < 0 , "D+","S+")

               wk_offx = 0
               wk_offy = 0
               wk_offz = 0

               wk_str_new = CostruisciStrCnt2( wk_sd, "A-", "R+", STRCAT( STR(wk_offx), " ", STR(wk_offy), " ", STR(wk_offz)," 0"))
               $M4_DragInfo_Cnt = wk_str_new
               $QueryResult__ = 3
            }
         }
      }

      //if( $modalita == "TEC" ) { DELETE_ME = 0 }
   }

   PROCEDURA OnChangedVar_PosLib_Air
   {
      if( $ChangedIdx != ATTUALE() ) { EXITSUB() }

      if( $ChangedVar == "Yt" )
      {
         $wk_ChangedVar_Yt_Alzate = 1
         EXITSUB()
      }

      if( $ChangedVar == "PosSporgenzaAIR" )
      {
         GOSUB SetAggancio_Lib_AIR
      }
   }

   PROCEDURA SetDimMinMax_Alzata_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 | $ATTIVA_DLL == 0 ) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "VAR_Manuale") > 0 )                               { EXITSUB() }

      LimX_Inf_prec = VAR_VAL( ATTUALE(), "LimX_Inf")   LimX_Sup_prec = VAR_VAL( ATTUALE(), "LimX_Sup")
      LimY_Inf_prec = VAR_VAL( ATTUALE(), "LimY_Inf")   LimY_Sup_prec = VAR_VAL( ATTUALE(), "LimY_Sup")
      LimZ_Inf_prec = VAR_VAL( ATTUALE(), "LimZ_Inf")   LimZ_Sup_prec = VAR_VAL( ATTUALE(), "LimZ_Sup")

      LimX_Inf = 512  LimX_Sup = 1272  wk_menu_X_opz_array = "512;696;880;1064;1272"
      LimY_Inf = 136  LimY_Sup = 1514  wk_menu_Y_opz_array = "138;184;230;250;268;276;318;322;328;343;368;374;389;414;560;736;828;878;1196;1514"  //TODO: è necessario il 136?
      LimZ_Inf = 406  LimZ_Sup = 560   wk_menu_Z_opz_array = "406;510;560"

      // 1 - Alzate senza appendiabiti
      if( FLAG_ConAppendiabiti != 1 )
      {
         // 1.1 - Alzate per mensole/contenitori >= 1312
         if( Xt >= 1312 )
         {
            // 1.1.1 - Alzate MM o CM
            LimY_Inf = 138  LimY_Sup = 828  wk_menu_Y_opz_array = "138;184;230;250;276;322;328;343;368;374;389;736;828"
            LimZ_Inf = 406  LimZ_Sup = 560

            // 1.1.2 - Alzate CC
            if( TipoAlzata == "CC" )
            {
               if( Zt >= 510 )
               {
                  LimY_Inf = 138  LimY_Sup = 368  wk_menu_Y_opz_array = "138;184;250;322;368"
               }
            }
         }

         // 1.2 - Alzate per mensole/contenitori < 1312
         if( Xt < 1312 )
         {
            LimY_Inf = 138  LimY_Sup = 368  wk_menu_Y_opz_array = "138;184;230;276;322;368"
            LimZ_Inf = 406  LimZ_Sup = 406

            // 1.2.1 - Alzate MM
            if( TipoAlzata == "MM" )
            {
               LimZ_Inf = 406  LimZ_Sup = 510

               if( Zt >= 510 )
               {
                  LimY_Inf = 268  LimY_Sup = 878  wk_menu_Y_opz_array = "268;318;414;560;878"
               }
            }

            // 1.2.2 - Alzate CM
            if( TipoAlzata == "CM" )
            {
               LimZ_Inf = 406  LimZ_Sup = 560 //Mantengo 560, se non ho nulla sopra l'alzata risulta comunque CM

               if( Zt >= 510 )
               {
                  LimY_Inf = 268  LimY_Sup = 878  wk_menu_Y_opz_array = "268;560;878"
               }
            }

            // 1.2.3 - Alzate CC
            if( TipoAlzata == "CC" )
            {
               LimZ_Inf = 406  LimZ_Sup = 560

               if( Zt >= 510 )
               {
                  LimY_Inf = 184  LimY_Sup = 368  wk_menu_Y_opz_array = "184;250;322;368"
               }
            }
         }
      }

      // 2 - Alzate con appendiabiti
      if( FLAG_ConAppendiabiti == 1 )
      {
         LimX_Inf = 696   LimX_Sup = 1272  wk_menu_X_opz_array = "696;880;1064;1272"
         LimY_Inf = 1196  LimY_Sup = 1514  wk_menu_Y_opz_array = "1196;1514"
         LimZ_Inf = 510   LimZ_Sup = 560   wk_menu_Z_opz_array = "510;560"

         if( TipoAlzata == "CX" )
         {
            LimX_Inf = 696  LimX_Sup = 1432  wk_menu_X_opz_array = "696;1064;1432"
            LimY_Inf = 1263 LimY_Sup = 1447  wk_menu_Y_opz_array = "1263;1447"
            LimZ_Inf = 510  LimZ_Sup = 510
         }
      }

      // 3 - Aggiorno limiti in profondità in base alla Z dell'elemento di riferimento
      wk_Xmin = 512
      wk_Xmax = 1272
      if( TipoAlzata == "CX" ) { wk_Xmax = 1432 }

      wk_Zmin = 406
      wk_Zmax = 560

      // 3.1 - In base all'elemento sotto
      if( IS_IDX(idx_sotto) )
      {
         wk_sotto_tipo = VAR_VAL_STR( idx_sotto, "AIR_Componente")

         // 3.1.1 - X
         wk_sotto_X = VAR_VAL( idx_sotto, "Xt")
         if( wk_sotto_X <= 0 ) { wk_sotto_X = VAR_VAL( idx_sotto, "X") }

         // 3.1.1.1 - Minimo
         wk_sotto_Xmin = wk_sotto_X - 184 - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato

         // 3.1.1.1.1 - Gestisco gap di listino, L1312 utilizza alzate della L1288, che non esiste
         wk_Xarr_tipo = 1
         if( wk_sotto_X >= 1288
           & wk_sotto_X <= 1312 ) { wk_Xarr_tipo = -1 }
         wk_sotto_Xmin = ARound( wk_sotto_Xmin, wk_menu_X_opz_array,  wk_Xarr_tipo, 2)
         //if( wk_sotto_Xmin > LimX_Sup ) { wk_sotto_Xmin = LimX_Sup }

         // 3.1.1.1.2 - Set alzata con coperchio
         if( TipoAlzata == "CX" ) { wk_sotto_Xmin = wk_sotto_X - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato }

         // 3.1.1.2 - Massimo
         wk_sotto_Xmax = wk_sotto_X - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato
         wk_sotto_Xmax = ARound( wk_sotto_Xmax, wk_menu_X_opz_array, -1, 2)
         //if( wk_sotto_Xmax > LimX_Sup ) { wk_sotto_Xmax = LimX_Sup }

         // 3.1.1.2.1 - Set alzata con coperchio
         if( TipoAlzata == "CX" ) { wk_sotto_Xmax = wk_sotto_X - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato }

         if( wk_sotto_Xmin > wk_Xmin )                           { wk_Xmin = wk_sotto_Xmin }
         if( wk_sotto_Xmax < wk_Xmax )                           { wk_Xmax = wk_sotto_Xmax }
         if( wk_sotto_tipo == "Contenitore" )                          { wk_Xmin = wk_Xmax }
         if( wk_sotto_X == 1312
           & VAR_VAL(idx_sotto, "Y") > 50
           & VAR_VAL_STR(idx_sotto, "VAR_MaterialeStr") == "LACCATO" ) { wk_Xmin = wk_Xmax }

         // 3.1.2 - Z
         wk_sotto_Z = VAR_VAL( idx_sotto, "Zt")
         if( wk_sotto_Z <= 0 ) { wk_sotto_Z = VAR_VAL( idx_sotto, "Z") }
         if( wk_Zmax > wk_sotto_Z ) { wk_Zmax = wk_sotto_Z }

         // 3.1.2.1 - Non limito la profondità se sotto ho un contenitore a terra o un contenitore su vetri a terra
         wk_Zmin_update = 1

         if( NOME(idx_sotto) == "Modulo_368" )
         {
            wk_vetri_terra_sotto = 0
            wk_near_sotto = idx_sotto
            if( IsIdx( idx_sotto, "idx_cnear_dw") ) { wk_near_sotto = VAR_VAL( idx_sotto, "idx_cnear_dw") }

            NEAR_GLOBALE2( "wk_vetri_terra_sotto", wk_near_sotto, 2, "SetVetriContenitore_AIR")

            wk_base0y_abs_ref = 0
            if( wk_vetri_terra_sotto > 0 )
            {
               if( VAR_VAL( wk_vetri_terra_sotto[1], "base0y_abs") == wk_base0y_abs_ref) { wk_base0y_abs_ref = VAR_VAL( wk_vetri_terra_sotto[1], "alto0y_abs") }
            }

            if( VAR_VAL( idx_sotto, "base0y_abs") == wk_base0y_abs_ref) { wk_Zmin_update = 0 }
         }

         // 3.1.2.2 - Non limito la profondità se sotto ho una mensola su vetri a terra
         if( wk_Zmin_update == 1
           & NOME(idx_sotto) == "MensolaLib_AIR" )
         {
            wk_vetri_terra_sotto = 0
            wk_near_sotto = idx_sotto
            if( IsIdx( idx_sotto, "idx_cnear_dw") ) { wk_near_sotto = VAR_VAL( idx_sotto, "idx_cnear_dw") }

            NEAR_GLOBALE2( "wk_vetri_terra_sotto", wk_near_sotto, 2, "SetVetriFondoATerra_AIR")

            wk_base0y_abs_ref = 0
            if( wk_vetri_terra_sotto > 0 )
            {
               if( VAR_VAL( wk_vetri_terra_sotto[1], "base0y_abs") == wk_base0y_abs_ref) { wk_Zmin_update = 0 }
            }
         }

         if( wk_Zmin_update > 0 ) { wk_Zmin = wk_Zmax }
      }

      // 3.2 - In base all'elemento sopra
      if( IS_IDX(idx_sopra) )
      {
         wk_sopra_tipo = VAR_VAL_STR( idx_sopra, "AIR_Componente")

         // 3.1.1 - X
         wk_sopra_X = VAR_VAL( idx_sopra, "Xt")
         if( wk_sopra_X <= 0 ) { wk_sopra_X = VAR_VAL( idx_sopra, "X") }

         // 3.1.1.1 - Minimo
         wk_sopra_Xmin = wk_sopra_X - 184 - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato

         // 3.1.1.1.1 - Gestisco gap di listino, L1312 utilizza alzate della L1288, che non esiste
         wk_Xarr_tipo = 1
         if( wk_sopra_X >= 1288
           & wk_sopra_X <= 1312 ) { wk_Xarr_tipo = -1 }
         wk_sopra_Xmin = ARound( wk_sopra_Xmin, wk_menu_X_opz_array,  wk_Xarr_tipo, 2)
         //if( wk_sopra_Xmin > LimX_Sup ) { wk_sopra_Xmin = LimX_Sup }

         // 3.1.1.2 - Massimo
         wk_sopra_Xmax = wk_sopra_X - 2*$Air_SetAlzataVetro_Rie_Vetro_Lato
         wk_sopra_Xmax = ARound( wk_sopra_Xmax, wk_menu_X_opz_array, -1, 2)
         //if( wk_sopra_Xmax > LimX_Sup ) { wk_sopra_Xmax = LimX_Sup }

         if( wk_sopra_Xmin > wk_Xmin )                           { wk_Xmin = wk_sopra_Xmin }
         if( wk_sopra_Xmax < wk_Xmax )                           { wk_Xmax = wk_sopra_Xmax }
         if( wk_sopra_tipo == "Contenitore" )                          { wk_Xmin = wk_Xmax }
          if( wk_sopra_X == 1312
           & VAR_VAL(idx_sopra, "Y") > 50
           & VAR_VAL_STR(idx_sopra, "VAR_MaterialeStr") == "LACCATO" ) { wk_Xmin = wk_Xmax }

         // 3.2.2 - Z
         wk_sopra_Z = VAR_VAL( idx_sopra, "Zt")
         if( wk_sopra_Z <= 0 ) { wk_sopra_Z = VAR_VAL( idx_sopra, "Z") }

         if( wk_Zmax > wk_sopra_Z ) { wk_Zmax = wk_sopra_Z  wk_Zmin = wk_Zmax }
      }

      // 3.3 - In base ad altri set della composizione
      if( IS_IDX(idx_sotto_sotto) )
      {
         wk_ss_tipo = VAR_VAL_STR( idx_sotto_sotto, "AIR_Componente")

         if( AIR_Componente == wk_ss_tipo )
         {
            // 3.3.1 - X
            wk_ss_X = VAR_VAL( idx_sotto_sotto, "X")

            if( wk_ss_X > 0 )
            {
               if( wk_ss_X > wk_Xmin ) { wk_Xmin = wk_ss_X }
               if( wk_ss_X < wk_Xmax ) { wk_Xmax = wk_ss_X }
            }

            // 3.3.2 - Z
            wk_ss_Z = VAR_VAL( idx_sotto_sotto, "Zt")

            if( wk_ss_Z > 0 )
            {
               if( wk_ss_Z > wk_Zmin ) { wk_Zmin = wk_ss_Z }
               if( wk_ss_Z < wk_Zmax ) { wk_Zmax = wk_ss_Z }
            }
         }
      }

      // 3.4 - Utilizzo limiti calcolati in base agli elementi sopra/sotto/sotto sotto
      // 3.4.1 - X
      if( wk_Xmin > 0
        & wk_Xmax > 0 )
      {
         if( LimX_Inf < wk_Xmin ) { LimX_Inf = wk_Xmin }
         if( LimX_Sup > wk_Xmax ) { LimX_Sup = wk_Xmax }
      }

      // 3.4.2 - Z
      if( wk_Zmin > 0
        & wk_Zmax > 0 )
      {
         if( LimZ_Inf < wk_Zmin ) { LimZ_Inf = wk_Zmin }
         if( LimZ_Sup > wk_Zmax ) { LimZ_Sup = wk_Zmax }
      }

      // 4 - Se limiti non validi, elimino
      // 4.1 - X
      if( LimX_Sup <= 0
        | LimX_Inf <= 0
        | LimX_Sup < LimX_Inf )
      {
         DELETE_ME = 4.1
      }

      // 4.2 - Z
      if( LimZ_Sup <= 0
        | LimZ_Inf <= 0
        | LimZ_Sup < LimZ_Inf )
      {
         DELETE_ME = 4.2
      }

      if( VAR_VAL( ATTUALE(), "VAR_Manuale") > 0) { DELETE_ME = -1 }
      if( VAR_VAL( ATTUALE(), "DELETE_ME") > 0 )
      {
         HI( ATTUALE(), 1)
         DISPLAY2( STRCAT( MSG(1090), "\n", MSG(1257), "\n", MSG(1249), " [ Err.: ", STR(DELETE_ME), "]"))
         HI( ATTUALE(), 0)

         ScriviSuLog( 0, "SetDimMinMax_Alzata_AIR", STRCAT( "[", STR(ATTUALE()), " - ELEMENTO SOTTO: ", STR(VAR_VAL( ATTUALE(), "idx_sotto")), "] LimX_Inf=", STR(LimX_Inf), " - wk_Xmin=", STR(wk_Xmin), " - LimX_Sup=", STR(LimX_Sup), " - wk_Xmax=",STR(wk_Xmax)) )
         ScriviSuLog( 0, "SetDimMinMax_Alzata_AIR", STRCAT( "[", STR(ATTUALE()), " - ELEMENTO SOTTO: ", STR(VAR_VAL( ATTUALE(), "idx_sotto")), "] LimZ_Inf=", STR(LimZ_Inf), " - wk_Zmin=", STR(wk_Zmin), " - LimZ_Sup=", STR(LimZ_Sup), " - wk_Zmax=",STR(wk_Zmax)) )

         COMANDO2( STRCAT("DELETE ", STR(ATTUALE()), " //SetDimMinMax_Alzata_AIR, le dimensioni minime o massime non sono compatibili con l'elemento di riferimento"))

         EXITSUB()
      }

      // 5 - Creo menu
      GOSUB CreaMenu_X_Alzata_AIR
      GOSUB CreaMenu_Y_Alzata_AIR
      GOSUB CreaMenu_Z_Alzata_AIR

      // 6 - Aggiorno immediatamente dimensione
      // 6.1 - Dimensione attualmente impostata non valida
      // 6.1.1 - X
      if( X < LimX_Inf
        | X > LimX_Sup )
      {
         if( IS_VAR_FIXED( ATTUALE(), "X") == 1) { DEL_VAR_MODIFICATE( ATTUALE(), "X") }
      }

      // 6.1.2 - Z
      if( Zt < LimZ_Inf
        | Zt > LimZ_Sup )
      {
         if( IS_VAR_FIXED( ATTUALE(), "Zt") == 1) { DEL_VAR_MODIFICATE( ATTUALE(), "Zt") }
      }

      // 6.2 - Dimensione preferenziale se non settata dall'utente
      // 6.2.1 - Se da preconfigurato e dentro i limiti, fixo
      if( VAR_VAL( ATTUALE(), "in_pcfto") > 0)
      {
         if( X >= LimX_Inf
           & X <= LimX_Sup
           & IS_VAR_FIXED( ATTUALE(), "X") == 0) { VAR_SET_MODIFICATA( ATTUALE(), "X", "") }

         if( X >= LimX_Inf
           & X <= LimX_Sup
           & IS_VAR_FIXED( ATTUALE(), "Zt") == 0) { VAR_SET_MODIFICATA( ATTUALE(), "Zt", "") }
      }

      // 6.2.2 - Se non fixata, prendo la maggiore
      if( IS_VAR_FIXED( ATTUALE(), "X") == 0)  { X  = LimX_Sup  VAR_SET_MODIFICATA( ATTUALE(), "X", "") }
      if( IS_VAR_FIXED( ATTUALE(), "Zt") == 0) { Zt = LimZ_Sup  VAR_SET_MODIFICATA( ATTUALE(), "Zt", "")}

      // 6.3 - Aggiorno tutti le variabili legate alle dimensioni
      GOSUB SetDimensioniAlzata_AIR
   }

   PROCEDURA CreaMenu_X_Alzata_AIR
   {
      //Modo e limiti uguali
      wk_X_mode = $MODE_SHOWALWAYS

      if( LimX_Inf < LimX_Sup
        & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_X_mode = $MODE_MISURE }

      VAR_SET_MODE( ATTUALE(), "X", wk_X_mode)

      if( LimX_Inf == LimX_Sup ) { EXITSUB() }

      //Menu
      VarMenuX = "LarAlzLibAir"
      VarMenuX = STRCAT( VarMenuX, "_", STR(ATTUALE()))

      wk_menu_X_sel = 0

      if( LimX_Inf_prec != LimX_Inf
        | LimX_Sup_prec != LimX_Sup )
      {
         STR_SPLIT( wk_menu_X_opz_array, ";", 1, "wk_menu_X_opz", ATTUALE())

         //Minimo
         wk_menu_X_sel = 1
         wk_menu_X_sel[1] = LimX_Inf

         //Intermedi
         wk_i = 1
         while( wk_i <= wk_menu_X_opz )
         {
            wk_menu_X_att = ATOI(wk_menu_X_opz[wk_i])

            if( wk_menu_X_att > LimX_Inf
              & wk_menu_X_att < LimX_Sup ) { AddItem2Array( ATTUALE(), "wk_menu_X_sel", wk_menu_X_att, "") }

            wk_i = wk_i + 1
         }

         //Massimo
         if( LimX_Sup > LimX_Inf)
         {
            wk_menu_X_sel = wk_menu_X_sel + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("wk_menu_X_sel_##", STR(wk_menu_X_sel)), LimX_Sup)
         }

         if( wk_menu_X_sel > 0 )
         {
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuX," ins"))
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuX," clear"))

            wk_i = 1
            while( wk_i <= wk_menu_X_sel )
            {
               wk_menu_X_sel_att = wk_menu_X_sel[wk_i]

               COMANDO2( STRCAT( "MISURE_EDIT ", VarMenuX," add ", STR(wk_menu_X_sel_att), " ", STR(wk_menu_X_sel_att)))

               wk_i = wk_i + 1
            }
         }
      }

      wk_menu_update = 0
      if( wk_menu_X_sel > 0
        & VAR_MENU( ATTUALE(), "X") != VarMenuX ) { wk_menu_update = 1 }

      if( LimX_Inf != LimX_Inf_prec
        | LimX_Sup != LimX_Sup_prec)              { wk_menu_update = 1 }

      if( wk_menu_update > 0 )
      {
         wk_menuX = STRCAT( VarMenuX, "( ", STR(LimX_Inf), "-", STR(LimX_Sup), " )")

         VAR_SET_MENU( ATTUALE(), "X", wk_menuX)
      }
   }

   PROCEDURA CreaMenu_Y_Alzata_AIR
   {
      //Modo e limiti uguali
      wk_Y_mode = $MODE_SHOWALWAYS

      if( LimY_Inf < LimY_Sup
        & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_Y_mode = $MODE_USER + $MODE_MISURE }

      VAR_SET_MODE( ATTUALE(), "Yt", wk_Y_mode)

      if( LimY_Inf == LimY_Sup ) { EXITSUB() }

      //Menu
      VarMenuY = "AltAlzLibAir"
      VarMenuY = STRCAT( VarMenuY, "_", STR(ATTUALE()))

      wk_menu_Y_sel = 0

      if( LimY_Inf_prec != LimY_Inf
        | LimY_Sup_prec != LimY_Sup )
      {

         STR_SPLIT( wk_menu_Y_opz_array, ";", 1, "wk_menu_Y_opz", ATTUALE())

         //Minimo
         wk_menu_Y_sel = 1
         wk_menu_Y_sel[1] = LimY_Inf

         //Intermedi
         wk_i = 1
         while( wk_i <= wk_menu_Y_opz )
         {
            wk_menu_Y_att = ATOI(wk_menu_Y_opz[wk_i])

            if( wk_menu_Y_att > LimY_Inf
              & wk_menu_Y_att < LimY_Sup ) { AddItem2Array( ATTUALE(), "wk_menu_Y_sel", wk_menu_Y_att, "") }

            wk_i = wk_i + 1
         }

         //Massimo
         if( LimY_Sup > LimY_Inf)
         {
            wk_menu_Y_sel = wk_menu_Y_sel + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("wk_menu_Y_sel_##", STR(wk_menu_Y_sel)), LimY_Sup)
         }

         if( wk_menu_Y_sel > 0)
         {
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuY," ins"))
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuY," clear"))

            wk_i = 1
            while( wk_i <= wk_menu_Y_sel )
            {
               wk_menu_Y_sel_att = wk_menu_Y_sel[wk_i]

               COMANDO2( STRCAT( "MISURE_EDIT ", VarMenuY," add ", STR(wk_menu_Y_sel_att), " ", STR(wk_menu_Y_sel_att)))

               wk_i = wk_i + 1
            }
         }
      }

      wk_menu_update = 0
      if( wk_menu_Y_sel > 0
        & VAR_MENU( ATTUALE(), "Yt") != VarMenuY ) { wk_menu_update = 1 }

      if( LimY_Inf != LimY_Inf_prec
        | LimY_Sup != LimY_Sup_prec)               { wk_menu_update = 1 }

      if( wk_menu_update > 0 )
      {
         wk_menuY = STRCAT( VarMenuY, "( ", STR(LimY_Inf), "-", STR(LimY_Sup), " )")

         VAR_SET_MENU( ATTUALE(), "Yt", wk_menuY)
      }
   }

   PROCEDURA CreaMenu_Z_Alzata_AIR
   {
      //Modo e limiti uguali
      wk_Z_mode = $MODE_SHOWALWAYS

      if( LimZ_Inf < LimZ_Sup
        & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_Z_mode = $MODE_MISURE }

      VAR_SET_MODE( ATTUALE(), "Zt", wk_Z_mode)

      if( LimZ_Inf == LimZ_Sup ) { EXITSUB() }

      //Menu
      VarMenuZ = "ProAlzLibAir"
      VarMenuZ = STRCAT( VarMenuZ, "_", STR(ATTUALE()))

      wk_menu_Z_sel = 0

      if( LimZ_Inf_prec != LimZ_Inf
        | LimZ_Sup_prec != LimZ_Sup )
      {
         STR_SPLIT( wk_menu_Z_opz_array, ";", 1, "wk_menu_Z_opz", ATTUALE())

         //Minimo
         wk_menu_Z_sel = 1
         wk_menu_Z_sel[1] = LimZ_Inf

         //Intermedi
         wk_i = 1
         while( wk_i <= wk_menu_Z_opz )
         {
            wk_menu_Z_att = ATOI(wk_menu_Z_opz[wk_i])

            if( wk_menu_Z_att > LimZ_Inf
              & wk_menu_Z_att < LimZ_Sup ) { AddItem2Array( ATTUALE(), "wk_menu_Z_sel", wk_menu_Z_att,"") }

            wk_i = wk_i + 1
         }

         //Massimo
         if( LimZ_Sup > LimZ_Inf )
         {
            wk_menu_Z_sel = wk_menu_Z_sel + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("wk_menu_Z_sel_##", STR(wk_menu_Z_sel)), LimZ_Sup)
         }

         if( wk_menu_Z_sel > 0 )
         {
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuZ," ins"))
            COMANDO2( STRCAT("MISURE_EDIT ", VarMenuZ," clear"))

            wk_i = 1
            while( wk_i <= wk_menu_Z_sel )
            {
               wk_menu_Z_sel_att = wk_menu_Z_sel[wk_i]

               COMANDO2( STRCAT( "MISURE_EDIT ", VarMenuZ," add ", STR(wk_menu_Z_sel_att), " ", STR(wk_menu_Z_sel_att)))

               wk_i = wk_i + 1
            }
         }
      }

      wk_menu_update = 0
      if( wk_menu_Z_sel > 0
        & VAR_MENU( ATTUALE(), "Zt") != VarMenuZ ) { wk_menu_update = 1 }

      if( LimZ_Inf != LimZ_Inf_prec
        | LimZ_Sup != LimZ_Sup_prec)              { wk_menu_update = 1 }

      if( wk_menu_update > 0 )
      {
         wk_menuZ = STRCAT( VarMenuZ, "( ", STR(LimZ_Inf), "-", STR(LimZ_Sup), " )")

         VAR_SET_MENU( ATTUALE(), "Zt", wk_menuZ)
      }
   }

   PROCEDURA SetDimensioniAlzata_AIR
   {
      //Vetri
      Prof_Vetro = 366
      Larg_Vetro = 628
      if( VAR_VAL( ATTUALE(), "VAR_Manuale") < 1)
      {
         if( Xt < 1000 ) { Larg_Vetro = 366 }
         if( Zt > 450  ) { Prof_Vetro = 470 }
         if( Zt > 510  ) { Prof_Vetro = 520 }
      }

      if( VAR_VAL(ATTUALE(),"FLAG_ConCoperchio") > 0)
      {
         Larg_Vetro = X - 2*$Air_SetAlzataVetro_Spe_Vetro - 2*$AlzataApp_ConCop_Rie_Vtr
      }

      //Asta
      Asta_X = X - 2*$Air_SetAlzataVetro_Spe_Vetro

      //Set alzata
      Xt = X + 2*$Air_SetAlzataVetro_Rie_Vetro_Lato
      Y = Air_SetAlzata_Alt( Yt, TipoAlzata, 1, 0)
      Z = Prof_Vetro
   }

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

      TipoAlzata = ""

      wk_idx_ref = idx_att
      if( IS_MATCH( NOME(idx_att), "SetAlzata*") != 1) { wk_idx_ref = idx_pdr }

      if( wk_idx_ref != idx_att
        & VAR_VAL( idx_att, "VAR_Manuale") == 0) { TipoAlzata = VAR_VAL_STR( wk_idx_ref, "TipoAlzata") EXITSUB() }

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_sotto", idx_cnear_dw, 2, "*")
      NEAR_GLOBALE2( "wk_sopra", idx_cnear_up, 2, "*")

      // Sopra
      idx_sopra = -1

      /// Per near
      wk_i = 1
      while( idx_sopra < 0
           & wk_i <= wk_sopra)
      {
         wk_sopra_att  = wk_sopra[wk_i]
         wk_nome_sopra = NOME(wk_sopra_att)

         if( wk_nome_sopra == "Modulo_368"
           | wk_nome_sopra == "MensolaLib_AIR")
         {
            if( wk_sopra_att != idx_att
              & wk_sopra_att != wk_idx_ref ) { idx_sopra = wk_sopra_att }
         }

         wk_i = wk_i + 1
      }

      /// Per aggancio
      AGGANCIATI( "wk_agg", "*", ATTUALE())

      wk_i = 1
      while( wk_i <= wk_agg)
      {
         wk_agg_att  = wk_agg[wk_i]
         wk_nome_agg = NOME(wk_agg_att)

         if( wk_nome_agg == "Modulo_368"
           | wk_nome_agg == "MensolaLib_AIR") { idx_sopra = wk_agg_att }

         wk_i = wk_i + 1
      }

      // Sotto
      idx_sotto       = -1
      idx_sotto_sotto = -1

      /// Per near
      wk_i = 1
      while( idx_sotto < 0
           & wk_i <= wk_sotto)
      {
         wk_sotto_att = wk_sotto[wk_i]
         wk_nome_sotto = NOME(wk_sotto_att)

         if( wk_nome_sotto == "Modulo_368"
           | wk_nome_sotto == "MensolaLib_AIR"
           | wk_nome_sotto == "SetAlzataVetro_AIR"
           | wk_nome_sotto == "SetAlzataVetroConContenitore_AIR")
         {
            if( wk_sotto_att != idx_att
              & wk_sotto_att != wk_idx_ref ) { idx_sotto = wk_sotto_att }
         }

         wk_i = wk_i + 1
      }

      /// Per aggancio
      idx_agg = AGGANCIATA( ATTUALE(), "*")

      if( IS_IDX(idx_agg))
      {
         if( NOME(idx_agg) == "Modulo_368"
           | NOME(idx_agg) == "MensolaLib_AIR" ) { idx_sotto = idx_agg }
      }

      if( IsIdx( idx_sotto, "idx_sotto")) { idx_sotto_sotto = VAR_VAL( idx_sotto, "idx_sotto") }

      if( idx_att == wk_idx_ref) { GOSUB CtrlElementoInferiore_AIR }

      // TipoAlzata
      /// Sopra
      TipoElementoSopra = ""
      if( idx_att == wk_idx_ref) { TipoElementoSopra = "M" }

      if( IS_IDX(idx_sopra))
      {
         TipoElementoSopra = "M"
         if( NOME(idx_sopra) == "Modulo_368")           { TipoElementoSopra = "C" }
      }

      /// Sotto
      TipoElementoSotto = ""
      if( idx_att == wk_idx_ref) { TipoElementoSotto = "M" }

      if( IS_IDX(idx_sotto))
      {
         TipoElementoSotto = "M"
         if( NOME(idx_sotto) == "Modulo_368")           { TipoElementoSotto = "C" }
      }

      if( VAR_VAL( ATTUALE(), "FLAG_ConCoperchio") > 0) { TipoElementoSopra = "X" }

      TipoAlzata = STRCAT( TipoElementoSotto, TipoElementoSopra)
      if( TipoAlzata == "MC")                           { TipoAlzata = "CM" }

      // Aggiorno subito le dimensioni
      if( idx_att == wk_idx_ref) { GOSUB SetDimensioniAlzata_AIR }
   }

   //PROCEDURA PostAction2_Lib_AIR
   PROCEDURA CtrlStatici_Lib_AIR
   {
      if( $OnLoadOrder == 1 | $OnLoadOrder2 == 1)    { EXITSUB() }

      if( NOME(ATTUALE()) == "Modulo_368"
        & VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") != 1) { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"DELETE_ME") > 0)
      {
         if( VAR_VAL_STR( ATTUALE(), "DELETE_ME_msg") != "" )
         {
            DELETE_ME_msg = STRCAT( DELETE_ME_msg, " [ Err.: ", STR(DELETE_ME), "]")
            DISPLAY2(DELETE_ME_msg)
         }

         GEST_CODICE = ""
         RADICE = ""
         FLAG_RADICE = $NO_RAD

         COMANDO2( STRCAT( "DELETE ", STR(ATTUALE()), " //CtrlStatici_Lib_AIR"))

         EXITSUB()
      }
   }

   PROCEDURA CtrlContenitoreAIR_368
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      ConDivisorioAIR  = 0
      PosDivisorioAIR  = 0
      SpeDivisorioAIR  = 0

      if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 0 )       { EXITSUB() }
      //se specificato nel file del composto
      if( IS_VAR_FIXED(ATTUALE(), "ConDivisorioAIR") == 1 ) { EXITSUB() }

      if( Tipo368 == "368-VAS"
        | Tipo368 == "368-RIB"  )
      {
         if( X > 1104 )
         {
            ConDivisorioAIR = 1
            PosDivisorioAIR = 1230
            //SpeDivisorioAIR = $M368_Spe_DivLeg38
            //if( Y > 184  ) { SpeDivisorioAIR = $M368_Spe_DivLeg19 }
         }

         if( X >= 2208 )
         {
            ConDivisorioAIR = 1
            PosDivisorioAIR = 1337
            //SpeDivisorioAIR = $M368_Spe_DivLeg38
            //if( Y > 184  ) { SpeDivisorioAIR = $M368_Spe_DivLeg19 }
         }
      }

      //Simone 16/06/2023 - Nuovi cont. battenti
      if( Tipo368 == "368-MAD" )
      {
         if( X > 1104 )
         {
            ConDivisorioAIR = 1
            PosDivisorioAIR = 1230
            SpeDivisorioAIR = $M368_Spe_DivLeg19
         }
      }

      //regole spessore divisorio
      if( ConDivisorioAIR == 1 )
      {
         if( Tipo368 == "368-VAS" )
         {
            SpeDivisorioAIR = $M368_Spe_DivLeg38
            if( Y > 184 )  { SpeDivisorioAIR = $M368_Spe_DivLeg19 }
         }
         if( Tipo368 == "368-RIB" )
         {
            SpeDivisorioAIR = $M368_Spe_DivLeg19
            if( Y <= 184
              | Zt >= 510 )  { SpeDivisorioAIR = $M368_Spe_DivLeg38 }
         }
      }

      if( Tipo368 == "368-CAS"
        | Tipo368 == "368-CES"  )
      {
         if( X > 1104 )
         {
            ConDivisorioAIR = 1
            PosDivisorioAIR = 1250
            SpeDivisorioAIR = $M368_Spe_DivLeg38

            //cassettiere h.552 non ci sono nel listino AIR ma solo nei preconfigurati con set alzata centrato sul contenitore -> no divisorio
            if( Tipo368 == "368-CAS" & Y > 368 ) { ConDivisorioAIR = 0 }
         }
      }
   }

   PROCEDURA SetTipologia_Cont_AIR
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 0 )  { EXITSUB() }

      idx_setv_sopra = -1
      idx_setv_sotto = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_sotto",idx_cnear_dw,2,"SetAlzataVetro*AIR")
      NEAR_GLOBALE2("wk_sopra",idx_cnear_up,2,"SetAlzataVetro*AIR")

      if( wk_sotto > 0 )  { idx_setv_sotto = wk_sotto[1] }
      if( wk_sopra > 0 )  { idx_setv_sopra = wk_sopra[1] }

      if( $OnLoadOrder2==1 )  { EXITSUB() }

      ConFresataSup = 0
      if( IS_IDX(idx_setv_sopra) ) { ConFresataSup = 1 }

      ConFresataInf = 0
      if( IS_IDX(idx_setv_sotto) ) { ConFresataInf = 1 }
   }

   PROCEDURA PostGest_Lib_AIR
   {
      if( $OnRigenera | $OnLoadOrder | ACTION()<=0 ) { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))

      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( IS_IDX(idx_agg) )
      {
         if( IS_VAR_FIXED(idx_agg,"PosSporgenzaAIR") == 0 )
         {
            VAR_VALUE_SET(idx_agg,"PosSporgenzaAIR",PosSporgenzaAIR)
            VAR_SET_MODIFICATA(idx_agg,"PosSporgenzaAIR","")
         }
         //Luca 12/04/2021
         if( NOME(idx_agg) == "SetVetriFondoATerra_AIR" )
         {
            if( IS_VAR_FIXED(idx_agg,"Xt") )  { DEL_VAR_MODIFICATE(idx_agg,"Xt")  }
            VAR_VALUE_SET(idx_agg,"Xt",X)
         }
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //PostGestDllValida ",NOME(ATTUALE())))

         //Luca 14/04/2021
         if( VAR_VAL(idx_agg,"VAR_TipoAppoggio")==2 & VAR_VAL(idx_agg,"X") > 2208 )
         {
            COMANDO("Show Abilita ON")
            COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_agg)))
         }
      }

      //Luca 30/03/2021 ricalcolo per aggiornare la posizione
      if( VAR_VAL(ATTUALE(),"PA2_Ricalcola") ) { COMANDO(STRCAT("RICALCOLA ",STR(ATTUALE())," no_agganciati //PostGestDllValida ",NOME(ATTUALE()))) }

      //Luca 15/04/2021
      if( IS_IDX(idx_agg) )
      {
         if( NOME(idx_agg) == "SetVetriFondoATerra_AIR"
           | NOME(idx_agg) == "SetVetriContenitore_AIR" )
         {
            COMANDO(STRCAT("RICALCOLA ",STR(idx_agg)," //PostGestDllValida ",NOME(ATTUALE())))
            COMANDO("Show Abilita ON")
            //COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_att)))
            COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_agg)))
         }

         if( NOME(idx_agg) == "MensolaLib_AIR")
         {
            idx_agg2 = AGGANCIATA(idx_agg,"*")
            if( IS_IDX(idx_agg2)  )
            {
               //se agganciati a set vetro
               if( NOME(idx_agg2) == "SetVetriFondoATerra_AIR" )
               {
                  COMANDO(STRCAT("RICALCOLA ",STR(idx_agg2)," //PostGestDllValida ",NOME(ATTUALE())))
                  COMANDO("Show Abilita ON")
                  COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_agg2)))
               }
            }
         }
      }

      if( VAR_VAL(ATTUALE(),"FLAG_ConAppendiabiti")==1 )
      {
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  //Scassa_e_Taglia"))
      }
   }

   PROCEDURA CtrlPos_SetVetriFondoATerra_AIR
   {
      Spe_Vet = 12
      Lar_Vet = 628

      RieR_VetO = 124 + 70 - 26

      VetV1_PosX = 90
      VetV2_PosX = Xt - 90 - Spe_Vet

      VetO1_PosX = Xt/2 - Lar_Vet/2

      VetV3_PosX = 0
      VetO2_PosX = 0

      NrVetri = 3

      //non sono più centrati
      if( SetVetriSopraMensola == 1 & Xt <= 2208 )
      {
         VetO1_PosX = 90 + Spe_Vet + 240
         VetV2_PosX = VetO1_PosX + Lar_Vet + 312

         if( PosSporgenzaAIR < 0 )
         {
            VetV1_PosX = Xt - VetV1_PosX - Spe_Vet
            VetV2_PosX = Xt - VetV2_PosX - Spe_Vet
            VetO1_PosX = Xt - VetO1_PosX - Lar_Vet
         }
      }

      if( Xt <= 2208 ) { EXITSUB() }

      NrVetri = 4

      VetO1_PosX = 90 + Spe_Vet + 240

      VetV3_PosX = VetO1_PosX + Lar_Vet + 312

      if( Xt > 2576 )
      {
         NrVetri = 5

         VetV3_PosX = VetO1_PosX + Lar_Vet + 312

         wk_dist = (Xt - VetV3_PosX - 90 - 2*Spe_Vet - Lar_Vet)/2
         VetO2_PosX = VetV3_PosX + Spe_Vet + wk_dist
      }

      if( PosSporgenzaAIR < 0 )
      {
         VetV1_PosX = Xt - VetV1_PosX - Spe_Vet
         VetV2_PosX = Xt - VetV2_PosX - Spe_Vet
         VetV3_PosX = Xt - VetV3_PosX - Spe_Vet

         VetO1_PosX = Xt - VetO1_PosX - Lar_Vet
         if( VetO2_PosX>0 ) { VetO2_PosX = Xt - VetO2_PosX - Lar_Vet }
      }
   }

   PROCEDURA CtrlPos_SetVetriContenitori_AIR
   {
      Spe_Vet = 12
      Lar_Vet = 628

      RieR_VetO = 124 + 70 - 26

      VetV1_PosX = 90
      VetV2_PosX = Xt - 90 - Spe_Vet

      VetO1_PosX = Xt/2 - Lar_Vet/2

      VetV3_PosX = 0
      VetO2_PosX = 0

      NrVetri = 3

      VetO1_PosX = 90 + Spe_Vet + 240
      VetV2_PosX = VetO1_PosX + Lar_Vet + 312

      //Simone 12/01/2024 - Aggiunto un sostegno verticale solo nel caso
      //                    di modulo con ante battenti multiple L.2208
      if( IsIdx(ATTUALE(),"idx_modulo") )
      {
         if( Xt == 2208
           & VAR_VAL_STR(idx_modulo,"Tipo368") == "368-MAD" )
         {
            NrVetri = 4
            VetV3_PosX = Xt - 90 - Spe_Vet
         }
      }

      if( PosSporgenzaAIR < 0   )
      {
         VetV1_PosX = Xt - VetV1_PosX - Spe_Vet
         VetV2_PosX = Xt - VetV2_PosX - Spe_Vet
         VetO1_PosX = Xt - VetO1_PosX - Lar_Vet
         VetV3_PosX = Xt - VetV3_PosX - Spe_Vet
      }
   }

   PROCEDURA AIR_Ctrl_Verso
   {
      $wk_CG_Nome = "AIR_Ctrl_Verso"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Sono presenti elementi AIR con verso incoerente, contattare ufficio Metron."

      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      if( debug ) { COMANDO2(STRCAT("LOGMSG AIR_Ctrl_Verso START")) }

      WITH_VAR( "$wk_CG_Items", "WARN_ME", $num_con_figli, 1, "1")

      //Analizzo coerenza tra ogni set alzata e l'elemento sotto
      WITH_VAR( "$wk_pos", "PosSporgenzaAIR", $num_con_figli, 0, "")
      $wk_i = 1
      while( $wk_i <= $wk_pos )
      {
         $wk_pos_att = $wk_pos[$wk_i]
         if( IsIdx( $wk_pos_att, "idx_sotto")
           & VAR_VAL_STR( $wk_pos_att, "AIR_Componente") == "SetAlzata" )
         {
            $wk_idx_sotto = VAR_VAL( $wk_pos_att, "idx_sotto")

            if( VAR_EXIST( $wk_idx_sotto, "PosSporgenzaAIR"))
            {
               $wk_idx_att_pos  =  VAR_VAL( $wk_pos_att, "PosSporgenzaAIR")
               $wk_idx_sotto_pos = VAR_VAL( $wk_idx_sotto, "PosSporgenzaAIR")

               if( $wk_idx_sotto_pos != $wk_idx_att_pos )
               {
                  //Necessario per i pcf, l'elemento sotto è un modulo 368 standard, quindi con FLAG_Modulo_AIR == 0
                  if( VAR_VAL( $wk_idx_sotto, "FLAG_Modulo_AIR") > 0
                    | VAR_EXIST( $wk_idx_sotto, "FLAG_Modulo_AIR") == 0 )
                  {
                     AddItem2Array( -1, "wk_CG_Items", $wk_pos_att, "")
                     if( debug ) { COMANDO2( STRCAT("LOGMSG AIR_Ctrl_Verso [", STR($wk_pos_att), "] - Pos attuale: ", STR($wk_idx_att_pos), " - Pos sotto: ", STR($wk_idx_sotto_pos))) }
                  }
               }
            }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo

      if( debug ) { COMANDO2(STRCAT("LOGMSG AIR_Ctrl_Verso END")) }
   }

   PROCEDURA AIR_Ctrl_Composizioni
   {
      $wk_log = 0
     #ifdef TEC
      $wk_log = VAR_VAL( -1, "ATTIVA_LOG_DBG")
     #endif

      ScriviSuLog( $wk_log, "AIR_Compo", "START")

      WITH_ALIAS( "$wk_items", "AIR_Compo")

      GOSUB AIR_CreaGruppiComposizioni

      GOSUB AIR_AnalizzaComposizioni

      if( $wk_log == 0) { GOSUB EliminaBoxGruppiXGlass }
   }

   //utilizzo procedure NFC/XGLASS per creazione gruppi composizione
   PROCEDURA AIR_CreaGruppiComposizioni
   {
      $wk_cmp_AIR_dbg_mostra_gruppi = 0
      $wk_cmp_AIR_dbg_mostra_numgro = 0

     #ifdef TEC
      $wk_cmp_AIR_dbg_mostra_gruppi = $wk_log
      $wk_cmp_AIR_dbg_mostra_numgro = $wk_log
     #endif

      GOSUB EliminaBoxGruppiXGlass

      //reset variabili gruppo
      WITH_VAR("$wk_delme", "air_gruppo", 2, 0, "")

      $wk_delme_i = 1
      while( $wk_delme_i <= $wk_delme)
      {
         $wk_delme_idx = $wk_delme[$wk_delme_i]

         if( VAR_EXIST($wk_delme_idx, "air_gruppo") == 1)
         {
            DEL_VAR_MODIFICATE( $wk_delme_idx, "air_gruppo")
            DEL_VAR( $wk_delme_idx, "air_gruppo")
         }

         $wk_delme_i = $wk_delme_i + 1
      }

      GOSUB NFC_ResetVarGruppi

      if( $wk_cmp_AIR_dbg_mostra_gruppi == 0 ) { COMANDO2("SHOW ABILITA OFF") }
      GOSUB AIR_CreaGruppi
      if( $wk_cmp_AIR_dbg_mostra_gruppi == 0 ) { COMANDO2("SHOW ABILITA ON")  }
   }

   PROCEDURA AIR_CreaGruppi
   {
      ScriviSuLog( $wk_log, "AIR_Compo", "AIR_CreaGruppi - START")

      $wk_AIR_Compo = 0

      SORT_ARRAY( -1, "wk_items")

      ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("wk_items=", STR($wk_items)))

      $wk_i = 1
      while( $wk_i <= $wk_items )
      {
         $wk_idx_str = $wk_items[$wk_i]

         ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("$wk_idx_str=", STR($wk_idx_str), " - ", NOME($wk_idx_str)))

         // se la struttura non è stata valutata
         if( VAR_EXIST($wk_idx_str, "air_gruppo" ) != 1 )
         {
            ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("$wk_idx_str=", STR($wk_idx_str), " - ", NOME($wk_idx_str), " NON VALUTATA"))

            // se sono una struttura a muro
            if( TIPO_POS($wk_idx_str) > 0
              | QUERY_WALL($wk_idx_str, "distance from face R") <= 1 )
            {

               ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("$wk_idx_str=", STR($wk_idx_str), " - ", NOME($wk_idx_str), " STR A MURO"))

               // creo la variabile del gruppo con valore massimo + 1, per confrontarla poi con
               // gli eventuali valori delle strutture vicine.
               $wk_AIR_Compo_curr = $wk_AIR_Compo + 1
               VAR_CREATE_NUM($wk_idx_str, "air_gruppo", $wk_AIR_Compo_curr, $MODE_NONE, "")

               // Verifico le strutture vicine per leggere/assegnare il gruppo
               // se le strutture vicine hanno il gruppo mi prendo il valore minore
               // e poi lo riassegno in cascata alle altre strutture che eventualmente
               // hanno un gruppo maggiore
               $wk_add_new_group = AIR_AssegnaGruppo ( $wk_idx_str, $wk_AIR_Compo_curr )

               // aumento il contatore di gruppi
               if( $wk_add_new_group == 1 ) { $wk_AIR_Compo = $wk_AIR_Compo + 1 }
            }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_cmp_AIR_dbg_mostra_numgro )
      {
         GOSUB EliminaBollinatura
         COMANDO2("BOLLINATURA variabile air_gruppo")
         COMANDO2("BOLLINATURA mode 1")
         COMANDO2(STRCAT("BOLLINATURA color ", APICI(), "edge=black, faces=red, text=black", APICI()))
         COMANDO2("BOLLINATURA addall")
         COMANDO2("UPDATE")
      }

      ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("TROVATE ", STR($wk_AIR_Compo), " COMPOSIZIONI AIR"))

      GOSUB AIR_CreaBoxGruppi

      //VERIFICO SE CI SONO GRUPPI DA UNIRE
      WITH_ALIAS("$wk_NFC_box", "StpGruppoXG")

      $wk_iu = 1
      while ( $wk_iu <= 3 )
      {
         GOSUB AIR_UnisciGruppi
         $wk_iu = $wk_iu + 1
      }
   }

   PROCEDURA AIR_CreaBoxGruppi
   {
      // ELIMINO I BOX GIA' PRESENTI
      GOSUB EliminaBoxGruppiXGlass

      $wk_AIR_CreaBoxGruppi = 1

      $wk_i = 1
      while( $wk_i <= $wk_AIR_Compo )
      {
         WITH_VAR("$wk_GroupTemp", "air_gruppo", 0, 1, STR($wk_i))
         NFC_BuildBox(-1, "wk_GroupTemp", 0)

         $wk_i = $wk_i + 1
      }

      $wk_AIR_CreaBoxGruppi = 0
   }

   PROCEDURA AIR_UnisciGruppi
   {
      ScriviSuLog( $wk_log, "AIR_Compo", "AIR_UnisciGruppi INIZIO")

      // Verifico le collisioni tra gruppi:
      WITH_ALIAS("$wk_AIR_box", "StpGruppoXG")

      $wk_j = 1
      while( $wk_j <= $wk_AIR_box )
      {
         $wk_idx_grp = $wk_AIR_box[$wk_j]

         $wk_h = $wk_j + 1
         while( $wk_h <= $wk_AIR_box )
         {
            $wk_idx_grp_next = $wk_AIR_box[$wk_h]

            $wk_collide = 0
            if( CheckCollisione( $wk_idx_grp, $wk_idx_grp_next, 100) == 1 )
            {
               $wk_grp_pnt_cnt   = [ 0, 0, 0]
               $wk_grp_pnt_cnt.x = VAR_VAL( $wk_idx_grp, "pnt_cnt_base.x")
               $wk_grp_pnt_cnt.y = VAR_VAL( $wk_idx_grp_next, "base_0.y" )
               $wk_grp_pnt_cnt.z = VAR_VAL( $wk_idx_grp, "pnt_cnt_base.z")

               if( P_INTERNO_POLIGONO( $wk_grp_pnt_cnt, $wk_idx_grp_next, "base_") > 0) { $wk_collide = 1 }

               ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("AIR_UnisciGruppi $wk_idx_grp=", STR($wk_idx_grp), " $wk_idx_grp_next=", STR($wk_idx_grp_next), " - Trovata vicinanza tra gruppi, $wk_collide=", STR($wk_collide)))
            }

            if( $wk_collide > 0 )
            {
               // se c'è collisione tra i 2 gruppi fondo tutto in un gruppo unico (tenendo il valore minore)
               // mi prendo il valore minore tra i 2 (analizzo la var. "XGlassGroupN" direttamente nel gruppo.
               // scorro gli idx del gruppo e assegno il nuovo valore.
               $wk_GroupN_curr = VAR_VAL($wk_idx_grp, "NFC_BoxGruppo")
               $wk_GroupN_next = VAR_VAL($wk_idx_grp_next, "NFC_BoxGruppo")

               $wk_list_curr = VAR_VAL($wk_idx_grp, "nfc_gruppo_IdxList")
               $wk_list_next = VAR_VAL($wk_idx_grp_next, "nfc_gruppo_IdxList")

               ScriviSuLog( $wk_log, "AIR_Compo", STRCAT("AIR_UnisciGruppi $wk_GroupN_curr=", STR($wk_GroupN_curr), " $wk_GroupN_next=", STR($wk_GroupN_next)))

               // assegno a next il valore di curr
               if( $wk_GroupN_curr < $wk_GroupN_next )
               {
                  VAR_VALUE_SET($wk_idx_grp_next, "NFC_BoxGruppo", $wk_GroupN_curr)

                  $wk_k = 1
                  while( $wk_k <= $wk_list_next )
                  {
                     $wk_idx_str_next = VAR_VAL($wk_idx_grp_next, STRCAT("nfc_gruppo_IdxList_##", STR($wk_k)))
                     VAR_VALUE_SET($wk_idx_str_next, "air_gruppo", $wk_GroupN_curr)
                     $wk_k = $wk_k + 1
                  }
               }

               if( $wk_GroupN_curr > $wk_GroupN_next )
               {
                  VAR_VALUE_SET($wk_idx_grp, "NFC_BoxGruppo", $wk_GroupN_next)

                  $wk_k = 1
                  while( $wk_k <= $wk_list_curr )
                  {
                     $wk_jdx_str_curr = VAR_VAL($wk_idx_grp, STRCAT("nfc_gruppo_IdxList_##", STR($wk_k)))
                     VAR_VALUE_SET($wk_idx_str_next, "air_gruppo", $wk_GroupN_curr)
                     $wk_k = $wk_k + 1
                  }
               }
            }

            $wk_h = $wk_h + 1
         }

         $wk_j = $wk_j + 1
      }

      GOSUB AIR_CreaBoxGruppi

      if( $wk_cmp_AIR_dbg_mostra_numgro )
      {
         GOSUB EliminaBollinatura
         COMANDO2("BOLLINATURA variabile air_gruppo")
         COMANDO2("BOLLINATURA mode 1")
         COMANDO2(STRCAT("BOLLINATURA color ", APICI(), "edge=black, faces=red, text=black", APICI()))
         COMANDO2("BOLLINATURA addall")
         COMANDO2("UPDATE")
      }

      ScriviSuLog( $wk_log, "AIR_Compo", "AIR_UnisciGruppi FINE")
   }

   PROCEDURA AIR_AnalizzaComposizioni
   {
      ScriviSuLog( $wk_log , "AIR_Compo" , "AIR_AnalizzaComposizioni START")

      $wk_i = 1
      while ( $wk_i <= $wk_AIR_Compo )
      {
         $wk_CG_Items = 0
         WITH_VAR("$wk_CG_Items", "air_gruppo", 2, 1, STR($wk_i))

         ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("COMPOSIZIONE ",STR($wk_i), " --> ",STR($wk_CG_Items), " ELEMENTI"))

         r = ArraySortVarNum(-1,"wk_CG_Items","base0y_abs")

         //utilizzo i box generati per trovare il più a DX
         $wk_idx_BOX = -1
         WITH_VAR( "$wk_box", "NFC_BoxGruppo", 0, 1, STR($wk_i))
         if( $wk_box > 0 ) { $wk_idx_BOX = $wk_box[1] }

         if( IS_IDX($wk_idx_BOX) )
         {
            SET_#($wk_idx_BOX)
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT( "$wk_idx_BOX = ", STR($wk_idx_BOX)))
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT( "base_0 = ", Point2String(#base_0)))
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT( "alto_0 = ", Point2String(#alto_0)))
         }

         $wk_error  = 0
         $wk_allert = 0

         //VERIFICO I COMPONENTI DELLA COMPOSIZIONE
         $wk_compo_X_min        = -1
         $wk_compo_X_var        = 0
         $wk_compo_base0y_abs   = 0
         $wk_compo_mensole_8    = 0
         $wk_compo_mensole_5    = 0
         $wk_compo_mensole_85   = 0
         $wk_compo_moduli       = 0
         $wk_compo_moduli_sosp  = 0
         $wk_compo_moduli_cass  = 0
         $wk_compo_alzate       = 0
         $wk_compo_appendiabiti = 0
         $wk_compo_pcf          = 0

         $wk_flag_speciale      = 0
         $wk_compo_blocco       = 0

         $wk_j = 1
         while ( $wk_j <= $wk_CG_Items )
         {
            if( VAR_VAL_STR( $wk_CG_Items[$wk_j], "AIR_Componente") == "SetAlzata")
            {
               //Non posso essere l'elemento più in basso o più in alto, blocco già
               $wk_alzata_term = 0
               if( $wk_j <= 1)                                              { $wk_alzata_term = 1 }
               if( $wk_j >= $wk_CG_Items
                 & VAR_VAL_STR( $wk_CG_Items[$wk_j], "TipoAlzata") != "CX") { $wk_alzata_term = 2 }

               if( $wk_alzata_term != 0)
               {
                  if( VAR_VAL( $wk_CG_Items[$wk_j], "VAR_Manuale") == 0
                    & VAR_VAL( $wk_CG_Items[$wk_j], "FLAG_Speciale") == 0) { AddItem2Array(-1,"wk_error",0,"GEN") }
               }

               //Traccio tutte le alzate
               $wk_compo_alzate = $wk_compo_alzate + 1

               //Traccio alzate con appendiabiti
               $wk_compo_appendiabiti = $wk_compo_appendiabiti + VAR_VAL( $wk_CG_Items[$wk_j], "FLAG_ConAppendiabiti")

               //Identifico il set alzata di dimensioni minime
               //Traccio anche quante dimensioni sono presenti, dovrei averne solo 1
               $wk_X_alzata = VAR_VAL( $wk_CG_Items[$wk_j], "Xt")

               if( $wk_compo_X_min < 0
                 | $wk_X_alzata < $wk_compo_X_min )            { $wk_compo_X_min = $wk_X_alzata }

               $wk_check = 0
               $wk_k = 1
               while( $wk_k <= $wk_compo_X_var
                    & $wk_check == 0 )
               {
                  if( $wk_compo_X_var[$wk_k] == $wk_X_alzata ) { $wk_check = 1 }

                  $wk_k = $wk_k + 1
               }

               if( $wk_check == 0 )
               {
                  AddItem2Array( -1, "wk_compo_X_var", $wk_X_alzata, "")
               }
            }

            if( NOME($wk_CG_Items[$wk_j]) == "MensolaLib_AIR" )
            {
               if( VAR_VAL($wk_CG_Items[$wk_j],"Y") == 50 )  { $wk_compo_mensole_5 = $wk_compo_mensole_5 + 1 }
               if( VAR_VAL($wk_CG_Items[$wk_j],"Y") == 80 )  { $wk_compo_mensole_8 = $wk_compo_mensole_8 + 1 }
            }

            if( NOME($wk_CG_Items[$wk_j]) == "Modulo_368" )
            {
               $wk_compo_moduli = $wk_compo_moduli + 1
               VAR_VALUE_SET( -1, STRCAT("wk_compo_moduli_##", STR($wk_compo_moduli)), $wk_CG_Items[$wk_j])

               if( VAR_VAL($wk_CG_Items[$wk_j],"ConPiedini") == 0 )
               {
                  $wk_compo_moduli_sosp = $wk_compo_moduli_sosp + 1
                  VAR_VALUE_SET( -1, STRCAT("wk_compo_moduli_sosp_##", STR($wk_compo_moduli_sosp)), $wk_CG_Items[$wk_j])
               }

               if( VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-CAS"
                 | VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-CES")
               {
                  $wk_compo_moduli_cass = $wk_compo_moduli_cass + 1
                  VAR_VALUE_SET( -1, STRCAT("wk_compo_moduli_cass_##", STR($wk_compo_moduli_cass)), $wk_CG_Items[$wk_j])
               }
            }

            $wk_compo_base0y_abs = VAR_VAL( $wk_CG_Items[1], "base0y_abs")

            if( VAR_VAL( $wk_CG_Items[$wk_j], "in_pcfto") == 1 )        { $wk_compo_pcf = $wk_compo_pcf + 1 }
            if( VAR_VAL( $wk_CG_Items[$wk_j], "FLAG_Speciale") > 0 )    { $wk_flag_speciale = $wk_flag_speciale + 1 }

            $wk_j = $wk_j + 1
         }

         if( $wk_compo_pcf > 0
           & $wk_compo_pcf == $wk_CG_Items ) { $wk_compo_pcf = 1 }
         else                                { $wk_compo_pcf = 0 }

         // Valuto se la composizione è a muro o meno - INIZIO:
         //  Se a muro le regole sono meno restrittive.
         //  La composizione è a muro solo se:
         //   1) appoggiata a muro su faccia R
         //   E
         //   ( 2) il contenitore più in alto (non a terra) ha attaccaglie
         //     O
         //     3) per le composizioni con moduli <= 1312 il coperchio ha antiribaltamento )
         $wk_compo_parete = 0

         // 1) appoggiata a muro su faccia R:
         // i contenitori e le mensole sono disallineati sul retro di 2mm (assurdo, ma è da specifiche).
         // Considero a muro se la distanza tra box e muro è minore od uguale a questo valore.

         //Luca 09/06/2022
         //non posso utilizzare il box di ingombro in quanto non ruotato come gli idx contenuti
         //ciclo gli elementi e verifico se almeno uno è a parte
         $wk_almeno_uno_a_parete = 0
         $wk_j = 1
         while ( $wk_almeno_uno_a_parete == 0
               & $wk_j <= $wk_CG_Items )
         {
            $wk_dist_fr = QUERY_WALL( PADRE( $wk_CG_Items[$wk_j], -1), "distance from face R")

            if( $wk_dist_fr > 0 )
            {
               $wk_dist_fr = DISTANZA($Query_Wall1, $Query_Wall2)
               if( $wk_dist_fr < 2.01 ) { $wk_dist_fr = 0 }
            }

            if( $wk_dist_fr == 0 ) { $wk_almeno_uno_a_parete = 1 }

            $wk_j = $wk_j + 1
         }

         $wk_dist_r = 99
         if( $wk_almeno_uno_a_parete > 0 ) { $wk_dist_r = 0 }

         // 2) il contenitore più in alto (non a terra) ha attaccaglie:
         // se non ho potuto valutare la distanza dal muro mi baso esclusivamente sulla presenza di attaccaglie nei contenitori.
         $wk_compo_moduli_sosp_h_max = -1
         if( $wk_compo_moduli_sosp <= 0 )
         {
            if( $wk_dist_r <= 0 )
            {
               if( $wk_compo_X_min >= 1312
                 | VAR_VAL( $wk_CG_Items[$wk_CG_Items], "Con_Antirib") > 0 )                       { $wk_compo_parete = 1 }
            }
         }
         else
         {
            $wk_compo_moduli_sosp_h_max = VAR_VAL( $wk_compo_moduli_sosp[$wk_compo_moduli_sosp], "alto_0.y") - $wk_compo_base0y_abs
            if( $wk_dist_r <= 0 )
            {
               if( VAR_VAL( $wk_compo_moduli_sosp[$wk_compo_moduli_sosp], "ConAttaccaglie") == 1 ) { $wk_compo_parete = 1 }
               if( $wk_compo_X_min < 1312
                 & VAR_VAL( $wk_CG_Items[$wk_CG_Items], "Con_Antirib") > 0 )                       { $wk_compo_parete = 1 }
            }
         }

         ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("COMPOSIZIONE ",STR($wk_i), " --> $wk_compo_parete = ", STR($wk_compo_parete),
                                                                                 " - $wk_compo_moduli_sosp: ", STR($wk_compo_moduli_sosp),
                                                                                 " - $wk_compo_moduli_sosp_h_max: ", STR($wk_compo_moduli_sosp_h_max),
                                                                                 " - $wk_dist_r: ", STR($wk_dist_r),
                                                                                 " - $wk_compo_X_min: ", STR($wk_compo_X_min)))

         // Valuto se la composizione è a muro o meno - FINE.

         // 0a. un contenitore AIR dev'essere sempre parte di una composizione

         //LZ 02/03/2022: modifico controllo: due elementi air affiancati lateralmente generano un gruppo unico,
         //               devo bloccarli ugualmente se sopra e sotto non hanno set vetri
         //if( $wk_compo_moduli == 1
         //  & $wk_CG_Items == 1
         //  & $wk_compo_pcf != 1 )  { AddItem2Array(-1,"wk_error",0,"0A") }

         $wk_j = 1
         while ( $wk_j <= $wk_CG_Items & $wk_compo_pcf != 1 )
         {
            if( NOME($wk_CG_Items[$wk_j]) == "Modulo_368"
              & VAR_VAL( $wk_CG_Items[$wk_j], "FLAG_Modulo_AIR") )
            {
               $wk_idx_setv_sopra = -1
               if( VAR_EXIST( $wk_CG_Items[$wk_j], "idx_setv_sopra") ) { $wk_idx_setv_sopra = VAR_VAL( $wk_CG_Items[$wk_j], "idx_setv_sopra") }

               $wk_idx_setv_sotto = -1
               if( VAR_EXIST( $wk_CG_Items[$wk_j], "idx_setv_sotto") ) { $wk_idx_setv_sotto = VAR_VAL( $wk_CG_Items[$wk_j], "idx_setv_sotto") }

               if( IS_IDX($wk_idx_setv_sopra) == 0
                 & IS_IDX($wk_idx_setv_sotto) == 0 ) { AddItem2Array(-1,"wk_error",0,"0A") }
            }

            $wk_j = $wk_j + 1
         }

         // 0b. una composizione air deve avere set vetri tutti della stessa larghezza
         if( $wk_compo_X_var > 1 )
         {
            AddItem2Array(-1,"wk_error",0,"GEN")
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("COMPOSIZIONE ",STR($wk_i), " --> $wk_compo_X_var = ",STR($wk_compo_X_var)))
         }

         // 0c. posso avere solo un set alzata con appendiabiti
         if( $wk_compo_appendiabiti > 1 )
         {
            AddItem2Array(-1,"wk_error",0,"GEN")
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("COMPOSIZIONE ",STR($wk_i), " --> $wk_compo_alzate = ", STR($wk_compo_alzate), " --> $wk_compo_appendiabiti = ", STR($wk_compo_appendiabiti)))
         }

         //1. VERIFICO COMPOSIZIONI A PARETE
         // 1a. h.max 245
         // 1b. contenitore con alto_0.y > 175 deve essere fissato a parete
         if( $wk_compo_parete == 1 & $wk_compo_moduli > 0 )
         {
            // 1a. h.max 245
            $wk_compo_pm_y_test = 2450
            $wk_compo_err = "1A"

            if( $wk_compo_X_min < 1312 )
            {
               if( $wk_compo_moduli > 1
                 & $wk_compo_mensole_5 + $wk_compo_mensole_8 == 0 )
              {
                 $wk_compo_pm_y_test = 1288 + 17
                 $wk_compo_err = "1A-A"
              }
            }

            //regole appendiabiti in contrasto, ora sparite dal listino, da verificare
            //if( $wk_compo_appendiabiti > 0 )
            //{
            //   $wk_compo_cm_y_test = 1949
            //   if( $wk_compo_X_min > 920 ) { $wk_compo_cm_y_test = 2450 }

            if( VAR_VAL($wk_idx_BOX,"alto_0.y") - $wk_compo_base0y_abs > $wk_compo_pm_y_test ) { AddItem2Array(-1,"wk_error",0,$wk_compo_err) }

            // 1b. contenitore con alto_0.y > 175 deve essere fissato a parete
            $wk_j = 1
            while ( $wk_j <= $wk_compo_moduli )
            {
               if( VAR_VAL($wk_compo_moduli[$wk_j],"ConAttaccaglie") == 0
                 & VAR_VAL($wk_compo_moduli[$wk_j],"alto_0.y") - $wk_compo_base0y_abs > 1750) { AddItem2Array(-1,"wk_allert",0,"1B") }

               $wk_j = $wk_j + 1
            }
         }

         //2. VERIFICO COMPOSIZIONI CENTRO STANZA
         // 2a. H.max 210, se L.920/1104 H.max 180, non fattibile se L.552/736
         //     Se presente contenitore a terra, lo considero come una mensola
         // 2b  posizione contenitore max alto_0.y == 1750
         // 2c  Larghezza max contenitore superiore 1840
         if( $wk_compo_parete == 0 & $wk_compo_moduli > 0 )
         {
            // 2a. h.max 210
            $wk_compo_cm_y_test = 2100
            $wk_compo_err = "2A"

            if( $wk_compo_X_min < 1312 )
            {
               $wk_compo_cm_y_test = 1800
               $wk_compo_err = "2A-A"
               if( $wk_compo_X_min < 920 )
               {
                  $wk_compo_cm_y_test = 0
                  $wk_compo_err = "2A-B"
               }
            }

            if( $wk_compo_moduli == 1
              & $wk_compo_moduli_sosp == 0 )
            {
               if( $wk_compo_X_min < 1312 )
               {
                  $wk_compo_cm_y_test = 1950
                  $wk_compo_err = "2A-C"
               }
               //regola non esplicitata a listino
               else
               {
                  $wk_compo_cm_y_test = 2450
                  $wk_compo_err = "2A-D"
               }
            }

            //if( $wk_compo_appendiabiti > 0 )
            //{
            //   $wk_compo_cm_y_test = 1949
            //   if( $wk_compo_X_min > 920 ) { $wk_compo_cm_y_test = 2450 }
            //}

            if( VAR_VAL($wk_idx_BOX,"alto_0.y") - $wk_compo_base0y_abs > $wk_compo_cm_y_test ) { AddItem2Array(-1,"wk_error",0,$wk_compo_err) }

            // 2b  posizione contenitore max alto_0.y == 1750
            $wk_j = 1
            while ( $wk_j <= $wk_CG_Items )
            {
               //Simone 17/12/2021 - Per l'alzata con appendiabiti limite in altezza > 1949
               wk_idx_att = $wk_CG_Items[$wk_j]
               wk_idx_alz_sotto = -1
               if( VAR_EXIST(wk_idx_att,"idx_setv_sotto") ) { wk_idx_alz_sotto = VAR_VAL(wk_idx_att,"idx_setv_sotto") }

               wk_y_test = 1750
               if( IS_IDX(wk_idx_alz_sotto) )
               {
                  if( VAR_VAL(wk_idx_alz_sotto, "FLAG_ConAppendiabiti") > 0 ) { wk_y_test = 1949 }
               }

               if( NOME($wk_CG_Items[$wk_j]) == "Modulo_368" )
               {
                  if( VAR_VAL($wk_CG_Items[$wk_j],"alto_0.y") - $wk_compo_base0y_abs > wk_y_test ) { AddItem2Array(-1,"wk_error",0,"2B") }
               }

               $wk_j = $wk_j + 1
            }

            // 2c  Larghezza max contenitore superiore 1840
            $wk_j = $wk_CG_Items
            while ( $wk_j > 0 )
            {
               if( NOME($wk_CG_Items[$wk_j]) == "Modulo_368" )
               {
                  //LZ 18/01/2022: non valuto il contenitore a terra
                  if( VAR_VAL($wk_CG_Items[$wk_j],"X") > 1840
                    & VAR_VAL($wk_CG_Items[$wk_j],"ConPiedini") == 0
                    & VAR_VAL($wk_CG_Items[$wk_j],"ConSostegnoVetro") == 0 )
                  {
                     //AddItem2Array(-1,"wk_error",0,"2C")
                     //verifico se sono non ha elementi affiancati
                     if( IsIdx($wk_CG_Items[$wk_j],"idx_sx") == 0
                       & IsIdx($wk_CG_Items[$wk_j],"idx_dx") == 0  )
                     {
                        AddItem2Array(-1,"wk_error",0,"2C")
                     }
                  }

                  $wk_j = 0
               }

               $wk_j = $wk_j - 1
            }

            // 2d  Qualsiasi contenitore battente per Air Bookshelf non a terra dovrà essere dotato di antiribaltamento
            $wk_j = 1
            while( $wk_j <= $wk_CG_Items  )
            {
               if( VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-MAD" )
               {
                  if( VAR_VAL($wk_CG_Items[$wk_j],"ConPiedini") == 0 ) { AddItem2Array(-1,"wk_error",0,"2D") }
               }

               $wk_j = $wk_j + 1
            }
         }

         //3. COMPOSIZIONI MENSOLE + ALZATE
         // 3a mensole sp. 8 H max 350 cm o massimo 10 mensole
         // 3b mensole sp. 5 H max 245 cm o massimo 10 mensole
         // 3c mensole sp. 8+5 (miste) H max 250 cm o massimo 10 mensole
         if( $wk_compo_mensole_8 > 0 & $wk_compo_mensole_5 > 0 ) { $wk_compo_mensole_85 = 1 }

         if( $wk_compo_moduli == 0 )
         {
            $wk_compo_nom_y_test = 0
            $wk_compo_err        = "GEN"

            if( $wk_compo_mensole_85 > 0 )
            {
               $wk_compo_nom_y_test = 2500
               $wk_compo_err        = "3C-A"

               if( $wk_compo_mensole_5 + $wk_compo_mensole_8 > 10)    { $wk_compo_err = "3C-B" }
            }
            else
            {
               if( $wk_compo_mensole_5 > 0 )
               {
                  $wk_compo_nom_y_test = 2450
                  $wk_compo_err        = "3B-A"

                  if( $wk_compo_mensole_5 + $wk_compo_mensole_8 > 10) { $wk_compo_err = "3B-B" }
               }

               if( $wk_compo_mensole_8 > 0 )
               {
                  $wk_compo_nom_y_test = 3500
                  $wk_compo_err        = "3A-A"

                  if( $wk_compo_mensole_5 + $wk_compo_mensole_8 > 10) { $wk_compo_err = "3A-B" }
               }
            }

            if( $wk_compo_X_min < 1312 )
            {
               $wk_compo_nom_y_test = 2450
               $wk_compo_err = "1A"

               if( $wk_compo_parete == 0 )
               {
                  $wk_compo_nom_y_test = 1950
                  $wk_compo_err = "2A"
               }

               if( $wk_compo_mensole_5 + $wk_compo_mensole_8 > 10)    { $wk_compo_err = "3A-B" }
            }

            if( $wk_compo_nom_y_test > 0
              & $wk_compo_mensole_5 + $wk_compo_mensole_8 > 0 )
            {
               if( $wk_compo_mensole_5 + $wk_compo_mensole_8 > 10
                 | VAR_VAL($wk_idx_BOX,"alto_0.y") - $wk_compo_base0y_abs > $wk_compo_nom_y_test ) { AddItem2Array(-1,"wk_error",0,$wk_compo_err) }
            }
         }

         //LZ 19/01/2022: nuova regola, vedi mail del 19/01 di A. Ramina - "Set vetri contenitore due cassetti - pg.185 Alphabets"
         ////4. COMPOSIZIONI con cassettiere
         //// 4a posizione contenitore cassetta max alto_0.y == 1104
         //$wk_j = 1
         //while ( $wk_j <= $wk_CG_Items )
         //{
         //   if( VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-CAS"
         //     | VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-CES")
         //   {
         //      //Luca 06/04/2021 mantis 24995: AIR - Limite altezza cassetto/cestone
         //      //if( VAR_VAL($wk_CG_Items[$wk_j],"alto_0.y") > 1104 )   { AddItem2Array(-1,"wk_error",0,"4A") }
         //      if( VAR_VAL($wk_CG_Items[$wk_j],"alto_0.y") > 1104 + 17 )   { AddItem2Array(-1,"wk_error",0,"4A") }
         //   }
         //
         //   $wk_j = $wk_j + 1
         //}

         //4. COMPOSIZIONI con cassettiere
         // 4a posizione contenitore cassetto max alto_0.y == 1288, alto_0.y == 1104 se L > 1104
         // 4b massimo una cassettiera per composizione se non fissata a muro
         if( $wk_compo_moduli_cass > 0 )
         {
            $wk_compo_moduli_cass_altoy_max = 1288 + 17

            //Non testo la cassettiera a terra, quindi $wk_j > 1
            $wk_j = $wk_compo_moduli_cass
            while( $wk_j > 1 )
            {
               if( VAR_VAL( $wk_compo_moduli_cass[$wk_j], "X" ) > 1104 ) { $wk_compo_moduli_cass_altoy_max = 1104 + 17 }
               $wk_j = $wk_j - 1
            }

            if( VAR_VAL( $wk_compo_moduli_cass[$wk_compo_moduli_cass], "alto_0.y") - $wk_compo_base0y_abs > $wk_compo_moduli_cass_altoy_max ) { AddItem2Array(-1,"wk_error",0,"4A") }
            if( $wk_compo_moduli_cass > 1 & $wk_compo_parete == 0 )                                                                           { AddItem2Array(-1,"wk_error",0,"4B") }
         }

         //5a. verifico presenza contenitore vasistas a terra [sconsigliato]
         //5b. posizione sconsigliate per moduli ribalta
         if( $wk_compo_moduli > 0  )
         {
            if( VAR_VAL_STR($wk_CG_Items[1],"Tipo368") == "368-VAS" ) { AddItem2Array(-1,"wk_allert",0,"5A") }

            $wk_j = 1
            while ( $wk_j <= $wk_CG_Items )
            {
               if( VAR_VAL_STR($wk_CG_Items[$wk_j],"Tipo368") == "368-RIB" )
               {
                  if(VAR_VAL($wk_CG_Items[$wk_j],"Y") >= 368
                    & VAR_VAL($wk_CG_Items[$wk_j],"base_0.y") - $wk_compo_base0y_abs > 1370) { AddItem2Array(-1,"wk_allert",0,"5B") }

                  if( VAR_VAL($wk_CG_Items[$wk_j],"Y") >= 184
                    & VAR_VAL($wk_CG_Items[$wk_j],"base_0.y") - $wk_compo_base0y_abs > 1480) { AddItem2Array(-1,"wk_allert",0,"5B") }
               }

               $wk_j = $wk_j + 1
            }
         }

         ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("ERROR  = ", STR($wk_error)))
         ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("ALLERT = ", STR($wk_allert)))

      if( $wk_error > 0 )
      {
         $wk_CG_Nome    = "AIR_AnalizzaComposizioni_1"
         $wk_CG_Blocca  = 1
         $wk_CG_Tipo    = "BLOCCO"

         //LZ 19/01/2022: gestione speciali
         //               Se uno degli elementi della composizione presenta FLAG_Speciale == 1, converto tutti i blocchi in allert
         if( $wk_flag_speciale > 0 ) { $wk_CG_Tipo = "NO_BLOCCO" }

         $wk_CG_Msg     = STRCAT( MSG(1265) , "[",STR($wk_i),"]")
         //$wk_CG_Info    = STRCAT(">> ", MSG(1261),"\n\n>> ", MSG(1262))
         $wk_CG_Info    = ""

         //Luca 09/06/2022 pulisco array errori per evitare di avere messaggi doppi
         r = ArrayCopy(-1,"wk_error","wk_tmp_error")
            //ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("TMP_ERROR  = ", STR(VAR_VAL(-1,"wk_tmp_error")) , " r=",STR(r)))

            DEL_VAR(-1,"wk_error*")
            $wk_error = 0

            $wk_j = 1
            while ( $wk_j <= $wk_tmp_error )
            {
               AddItem2Array_IfNotExist(-1,"wk_error",0,$wk_tmp_error[$wk_j])
               $wk_j = $wk_j + 1
            }
            ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("ERROR = ", STR($wk_error)))

            //riepilogo errori
            $wk_j = 1
            while ( $wk_j <= $wk_error )
            {
               if( $wk_error[$wk_j] == "0A" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1299),"\n\n") }

               if( $wk_error[$wk_j] == "1A" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1266),"\n\n") }
               if( $wk_error[$wk_j] == "1A-A" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1350),"\n\n") }

               if( $wk_error[$wk_j] == "2A" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1267),"\n\n") }
               if( $wk_error[$wk_j] == "2A-A" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1351),"\n\n") }
               if( $wk_error[$wk_j] == "2A-B" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1352),"\n\n") }
               if( $wk_error[$wk_j] == "2A-C" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1353),"\n\n") }
               if( $wk_error[$wk_j] == "2A-D" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1355),"\n\n") }

               if( $wk_error[$wk_j] == "2B" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1268),"\n\n") }
               if( $wk_error[$wk_j] == "2C" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1269),"\n\n") }
               if( $wk_error[$wk_j] == "2D" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1354),"\n\n") }

               if( $wk_error[$wk_j] == "3A-A" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1271),"\n\n") }
               if( $wk_error[$wk_j] == "3A-B" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1270),"\n\n") }

               if( $wk_error[$wk_j] == "3B-A" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1272),"\n\n") }
               if( $wk_error[$wk_j] == "3B-B" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1270),"\n\n") }

               if( $wk_error[$wk_j] == "3C-A" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1273),"\n\n") }
               if( $wk_error[$wk_j] == "3C-B" )  { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1270),"\n\n") }

               if( $wk_error[$wk_j] == "4A"
                 | $wk_error[$wk_j] == "4B" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1274),"\n\n") }

               if( $wk_error[$wk_j] == "GEN" )   { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1265),"\n\n") }

               $wk_j = $wk_j + 1
            }

            GOSUB CG_CFO_FineControllo
         }
         else
         {
            //if( $wk_allert > 0 )
            //{
            //   $wk_CG_Blocca  = 1
            //   $wk_CG_Tipo    = "NO_BLOCCO"
            //   $wk_CG_Msg     = STRCAT( MSG(1264) , "[",STR($wk_i),"]")
            //   $wk_CG_Info    = ""
            //
            //   GOSUB CG_CFO_FineControllo
            //}

            //ALLERT SOLO SE NON CI SONO MESSAGGI BLOCCANTI
            if( $wk_allert > 0 )
            {
               $wk_CG_Nome    = "AIR_AnalizzaComposizioni_2"
               $wk_CG_Blocca  = 1
               $wk_CG_Tipo    = "NO_BLOCCO"
               $wk_CG_Msg     = STRCAT( MSG(1265) , "[",STR($wk_i),"]")
               //$wk_CG_Info    = STRCAT(">> ", MSG(1261),"\n\n>> ", MSG(1262))
               $wk_CG_Info    = ""

               //Luca 09/06/2022 pulisco array errori per evitare di avere messaggi doppi
               r = ArrayCopy(-1,"wk_allert","wk_tmp_allert")
               //ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("TMP_ERROR  = ", STR(VAR_VAL(-1,"wk_tmp_error")) , " r=",STR(r)))

               DEL_VAR(-1,"wk_allert*")
               $wk_allert = 0

               $wk_j = 1
               while ( $wk_j <= $wk_tmp_allert )
               {
                  AddItem2Array_IfNotExist(-1,"wk_allert",0,$wk_tmp_allert[$wk_j])
                  $wk_j = $wk_j + 1
               }
               ScriviSuLog( $wk_log , "AIR_Compo" , STRCAT("ALLERT  = ", STR($wk_allert)))

               //riepilogo errori
               $wk_j = 1
               while ( $wk_j <= $wk_allert )
               {
                  if( $wk_allert[$wk_j] == "1B" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1264),"\n\n") }
                  if( $wk_allert[$wk_j] == "5A" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1301),"\n\n") }
                  if( $wk_allert[$wk_j] == "5B" )    { $wk_CG_Info = STRCAT($wk_CG_Info,">> ", MSG(1300),"\n\n") }

                  $wk_j = $wk_j + 1
               }

               GOSUB CG_CFO_FineControllo
            }
         }


         $wk_i = $wk_i + 1
      }

      ScriviSuLog( $wk_log , "AIR_Compo" , "AIR_AnalizzaComposizioni FINE")
   }

   PROCEDURA OQBC_AIR
   {
      if( NOME(idx_colliso) == "SetVetriFondoATerra_AIR"
        & NOME(idx_attuale) == "MensolaLib_AIR"  ) { $QueryResult__ = 1 }

      if( NOME(idx_attuale) == "SetVetriFondoATerra_AIR"
        & NOME(idx_colliso) == "MensolaLib_AIR"  ) { $QueryResult__ = 1 }
   }

   PROCEDURA AssScrivanie_AIR
   {
      if( VAR_Materiale == 1 ) { VAR_MaterialeStr = "LACCATO" }
      if( VAR_Materiale == 2 ) { VAR_MaterialeStr = "WILDWOOD"}
      //per gestire consolle air
      if( VAR_Materiale == 3 ) { VAR_MaterialeStr = "VETRO"}

      VAR_SpePiano = 80
      if( VAR_MaterialeStr == "LACCATO" ) { VAR_SpePiano = 50 }

      if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

      //Cassetto a destra per L 147,2 e 184 e centrale per L 110,4
      if( VAR_ConCassetto == 1 )
      {
         if( IS_VAR_FIXED( ATTUALE(), "VAR_PosCassetto") == 0 )
         {
            VAR_PosCassetto = 1
            if( X <= 1104 )  { VAR_PosCassetto = 0 }
         }
      }

      VAR_PosCassettoStr = "AL CENTRO"
      if( VAR_PosCassetto == 1 )  { VAR_PosCassettoStr = "A DX" }
      if( VAR_PosCassetto == -1 ) { VAR_PosCassettoStr = "A SX" }

      if( ACTION() == 0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Materiale",$ATTIVA_DLL)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_ConCassetto",$ATTIVA_DLL)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Consolle_AIR",$ATTIVA_DLL)

         #ifndef TE
            HIDE_ON_EDIT2(ATTUALE(),"VAR_OffX_Vetro",$ATTIVA_DLL)
         #endif
      }

      Sostegno_Y = Y - VAR_SpePiano
      //Simone 13/07/21 - Considero che le staffe sono incassate nel piano
      if( VAR_MaterialeStr == "WILDWOOD"
        | VAR_MaterialeStr == "VETRO"   )  { Sostegno_Y = Y - VAR_SpePiano + 30 }

      //dimensione sostegno = dimensione vetro
      Sostegno_Z = Z - 50 - 50

      if( VAR_Consolle_AIR > 0 )
      {
         Y = 757
         Z = 406
         Sostegno_Z = Z - 19 - 19

         // 27/03/25 su indicazione di Ale R.
         VAR_OffX_Vetro = 184
         if( IS_VAR_FIXED(ATTUALE(),"VAR_OffX_Vetro") == 0 & X < 1104 ) { VAR_OffX_Vetro = 92 }

         M4_FIX_Y  = 0
         M4_A_MURO = 1
         VAR_SET_MODE( ATTUALE(), "X",  $MODE_SHOWALWAYS)
         VAR_SET_MODE( ATTUALE(), "Z",  $MODE_SHOWALWAYS)
      }

      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder != 1 & $ATTIVA_DLL==1 )
      {
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Z")
      }
   }

   PROCEDURA AssScrivanieMuro_AIR
   {
      if( VAR_TipoGamba == 1 ) { VAR_TipoGambaStr = "LEGNO" }
      if( VAR_TipoGamba == 0 ) { VAR_TipoGambaStr = "VETRO" }

      if( VAR_LatoAgg == 0 ) { VAR_LatoAggStr = "LATO-LUNGO" }
      if( VAR_LatoAgg == 1 ) { VAR_LatoAggStr = "LATO-CORTO" }

      //Luca 13/10/2021
      VAR_MaterialeStr = UPPER(GetValMenuStr(idx_att, "VAR_Materiale"))

      //VAR_SpePiano = 30
      //if( Y == 760 ) { VAR_SpePiano = 50 }
      //
      //VAR_SpeFianco = VAR_SpePiano

      if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

      if( ACTION() == 0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_TipoGamba",$ATTIVA_DLL)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_LatoAgg",$ATTIVA_DLL)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Materiale",$ATTIVA_DLL)

         #ifndef TE
            HIDE_ON_EDIT2(ATTUALE(),"VAR_OffX_Vetro",$ATTIVA_DLL)
         #endif
      }

      //Sostegno_Y = Y - VAR_SpePiano
      //Sostegno_Z = Z - 50 - 50

      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder != 1 & $ATTIVA_DLL==1 )
      {
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
         VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")
         CtrlRangeRidM2G(ATTUALE(),"Z")
      }
   }

   PROCEDURA AssScrivanieFS_AIR
   {
      AltPie = 3

      //LZ 13/05/2021 - Rientro 3 per sp30, 5 per sp50
      RiePan = 3
      VAR_SpePiano = 30

      if( Y == 760 )
      {
         RiePan = 5
         VAR_SpePiano = 50
      }

      VAR_SpeFianco = VAR_SpePiano

      if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder != 1 & $ATTIVA_DLL==1 )
      {
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
         VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")
         CtrlRangeRidM2G(ATTUALE(),"Z")
      }
   }

   PROCEDURA SistCostr_Tavolo_AIR
   {
      M4_GRUPPO__  = MSG(1033)

      Spe_Piano    = 80

      //codificato come 48
      //if( VAR_mat_tav == "VETRO"
      //  | VAR_mat_tav == "XGLASS"  ) { Spe_Piano = 48 }

      if( VAR_mat_tav == "VETRO"
        | VAR_mat_tav == "XGLASS"
        | VAR_mat_tav == "STRATUM"  )       { Spe_Piano = 18 }

      //Simone 24/09/2021
      //if( VAR_mat_tav  == "HAYAGEWOOD"
      //  & VAR_tipo_tav == "BENCH"  ) { Spe_Piano = 62 }
      if( VAR_mat_tav  == "HAYAGEWOOD"
        & VAR_tipo_tav == "BENCH"      )    { Spe_Piano = 50 }

      //Simone 20/03/2023
      if( VAR_tipo_tav == "SLIM" )
      {
         Spe_Piano = 18
         if( VAR_mat_tav  == "WILDWOOD" )
         {
            Spe_Piano = 48
            if( VAR_forma_tav == "ROUND"
              | VAR_forma_tav == "ORGANICO" )  { Spe_Piano = 36 }
         }
      }

      if( VAR_tipo_tav == "COFFEE" )
      {
         if( VAR_mat_tav == "LAMINATO" )    { Spe_Piano = 50 }
         if( VAR_mat_tav == "HAYAGEWOOD" )  { Spe_Piano = 50 }

         if( VAR_mat_tav == "VETRO"  )      { Spe_Piano = 10 }
         if( VAR_mat_tav == "XGLASS" )      { Spe_Piano = 10 }

         if( VAR_forma_tav == "ROUND" )
         {
            if( VAR_mat_tav  == "WILDWOOD" )   { Spe_Piano = 50 }
            if( IS_VAR_FIXED(ATTUALE(),"Z") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"Z") }
            Z = X
         }
      }

      if( ACTION() == 0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"X_ext",1)
         HIDE_ON_EDIT2(ATTUALE(),"VediProlunghe",1)

         if( VAR_tipo_tav == "EXTENDABLE" )
         {
            HIDE_ON_EDIT2(ATTUALE(),"X_ext",0)
            HIDE_ON_EDIT2(ATTUALE(),"VediProlunghe",0)
         }

         Prolunga_X = 520

         X_ext = X + 2* Prolunga_X

         X_cmp = X
         Z_cmp = Z
      }

      if( ACTION() > 0 )
      {
         VAR_3Sostegni = 0
         if( VAR_tipo_tav != "COFFEE" & Z_cmp > 1000 ) { VAR_3Sostegni = 1 }
         if( VAR_forma_tav == "BOTTE" )
         {
            VAR_3Sostegni = 0
            if( X_cmp >= 2480 ) { VAR_3Sostegni = 1 }
         }

         if( VAR_forma_tav == "ORGANICO" ) { VAR_3Sostegni = 0 }

         // per gestione speciali
         if( VAR_Revisione_TavAir > 0 )
         {
            if( X > 1900
              & Z < 1000
              & VAR_tipo_tav != "COFFEE" ) { VAR_3Sostegni = 1 }
         }
      }

      //m4s piano
      m4s_path = STRCAT( $path_m4s, "Top Tavoli\")
      m4s_file_name = STRCAT("PIANO_",STR(X),"X",STR(Z),"X",STR(Spe_Piano),"#A.m4s")
      if( VAR_tipo_tav == "COFFEE"
        & VAR_forma_tav == "ROUND" )
      {
         m4s_file_name = STRCAT("TOP_",STR(X),"X",STR(Z),"X",STR(Spe_Piano),"#A.m4s")
      }
      m4s_file = STRCAT( m4s_path, m4s_file_name)
      m4s_import = STRCAT( m4s_file, "|model|model.hsf")

      m4s_exist = FILE_EXIST(m4s_file)

      //sat piano
      Forma_Piano_Abb  = LEFT(VAR_forma_tav,3)
      Path_Sat = STRCAT( $path_sat, "Tavoli\Air\")

      FileSat1       = ""
      FileSat2       = ""
      FileSat3       = ""
      FileSat1_exist = 0
      FileSat2_exist = 0
      FileSat3_exist = 0

      //wildwood
      FileSat1 = STRCAT(Path_Sat,"PianoTav",Forma_Piano_Abb,VAR_tipo_tav,"_",STR(X),"x",STR(Z),".sat")

      if( VAR_mat_tav == "VETRO"
        | VAR_mat_tav == "XGLASS" )
      {
         FileSat1 = STRCAT(Path_Sat,"PianoTav",Forma_Piano_Abb,VAR_tipo_tav,"Sp10_",STR(X),"x",STR(Z),"_1.sat")
         FileSat2 = STRCAT(Path_Sat,"PianoTav",Forma_Piano_Abb,VAR_tipo_tav,"Sp10_",STR(X),"x",STR(Z),"_2.sat")
         FileSat3 = STRCAT(Path_Sat,"PianoTav",Forma_Piano_Abb,VAR_tipo_tav,"Sp08_",STR(X),"x",STR(Z),"_1.sat")
      }

      FileSat1_exist = FILE_EXIST(FileSat1)
      FileSat2_exist = FILE_EXIST(FileSat2)
      FileSat3_exist = FILE_EXIST(FileSat3)
   }

   PROCEDURA ConfigSostegni_Tavolo_AIR
   {
      if( IS_ESCLUSO(ATTUALE()) )  { EXITSUB() }

      wk_X = X
      if( VAR_tipo_tav == "EXTENDABLE" & VAR_VAL(ATTUALE(),"VediProlunghe") )
      {
         wk_X = X - 2*LargProlunga
      }

      AltezzaVetro = Y - 62

      if( VAR_mat_tav == "VETRO"
        | VAR_mat_tav == "XGLASS"
        | VAR_mat_tav == "STRATUM" )       { AltezzaVetro = Y - 30 }

      if( VAR_mat_tav == "WILDWOOD"
        & VAR_tipo_tav == "EXTENDABLE" )   { AltezzaVetro = Y - 92 }

      if( VAR_mat_tav == "WILDWOOD"
        & VAR_tipo_tav == "SLIM" )         { AltezzaVetro = Y - 30 }

      if( VAR_tipo_tav == "SNACK" )        { AltezzaVetro = Y - 52 }

      //Luca 29/09/2021
      if( VAR_mat_tav == "GLASS" )         { AltezzaVetro = Y - 66 }

      AltezzaVetro = AltezzaVetro + 3

      //Simone 24/09/2021
      if( VAR_tipo_tav == "BENCH" )
      {
         if( VAR_mat_tav == "WILDWOOD"   ) { AltezzaVetro = Y - 59 }
         if( VAR_mat_tav == "HAYAGEWOOD" ) { AltezzaVetro = Y - 41 }
      }

      if( IS_MATCH(VAR_tipo_tav,"COFFEE*") == 1 )
      {
         GOSUB ConfigSostegni_Tavolini_AIR
         EXITSUB()
      }

      SostegnoSpessore = 12
      SostegnoV1_Dim  = Z - 100
      if( VAR_Revisione_TavAir > 0 )
      {
         SostegnoV1_Dim = 900
         if( Z > 1200 ) { SostegnoV1_Dim = 1104 }
         if( Z < 1000 ) { SostegnoV1_Dim = 800  }
         if( Z < 900  ) { SostegnoV1_Dim = 620  }
      }

      SostegnoO1      = 1
      SostegnoO1_Dim  = 0
      SostegnoO1_OffX = 0

      SostegnoV2      = 0
      SostegnoV2_Dim  = 0
      SostegnoV2_OffX = 0

      SostegnoO1_Dim  = 385
      SostegnoO1_OffX = 250
      SostegnoV1_OffX = 300

      //Simone 04/07/2023 - Ale R. dovrà allineare le specifiche
      if( wk_X > 1420  ) { SostegnoV1_OffX = 300   SostegnoO1_OffX = 250  SostegnoO1_Dim = 620  }
      if( wk_X >= 1600 ) { SostegnoV1_OffX = 470   SostegnoO1_OffX = 250  SostegnoO1_Dim = 620  }
      if( wk_X >= 1900 ) { SostegnoV1_OffX = 550   SostegnoO1_OffX = 250  SostegnoO1_Dim = 800  }
      if( wk_X >= 2200 ) { SostegnoV1_OffX = 600   SostegnoO1_OffX = 300  SostegnoO1_Dim = 800  }
      if( wk_X >= 2480 ) { SostegnoV1_OffX = 650   SostegnoO1_OffX = 300  SostegnoO1_Dim = 900  }
      if( wk_X >  2500 ) { SostegnoV1_OffX = 700   SostegnoO1_OffX = 300  SostegnoO1_Dim = 1104 }
      if( VAR_Revisione_TavAir > 0 )
      {
         if( wk_X > 1420 ) { SostegnoV1_OffX = 470   SostegnoO1_OffX = 250  SostegnoO1_Dim = 620  }
         if( wk_X > 1600 ) { SostegnoV1_OffX = 550   SostegnoO1_OffX = 250  SostegnoO1_Dim = 800  }
         if( wk_X > 2000 ) { SostegnoV1_OffX = 600   SostegnoO1_OffX = 300  SostegnoO1_Dim = 800  }
         if( wk_X > 2200 ) { SostegnoV1_OffX = 650   SostegnoO1_OffX = 300  SostegnoO1_Dim = 900  }
         if( wk_X > 2500 ) { SostegnoV1_OffX = 700   SostegnoO1_OffX = 300  SostegnoO1_Dim = 1104 }
      }

      //Simone 06/07/2023
      if( VAR_forma_tav == "BOTTE" )
      {
         SostegnoV1_Dim = 900
      }

      if( VAR_3Sostegni == 1 )
      {
         SostegnoV2 = 1

         if( VAR_Revisione_TavAir < 1 )
         {
            SostegnoV1_Dim  = 900

            if( Z >= 1400 ) { SostegnoV1_Dim  = Z - 600 }
            if( Z >= 1400 ) { SostegnoV1_Dim  = Z - 800 }
            if( Z >= 1800 ) { SostegnoV1_Dim  = Z - 900 }
         }
         SostegnoV2_Dim  = SostegnoV1_Dim

         SostegnoV1_OffX = 390
         SostegnoO1_Dim  = 385

         if( wk_X >= 1600 ) { SostegnoV1_OffX = 450   SostegnoO1_Dim = 385 }
         if( wk_X >= 1800 ) { SostegnoV1_OffX = 470   SostegnoO1_Dim = 550 }
         if( wk_X >= 2480 ) { SostegnoV1_OffX = 620   SostegnoO1_Dim = 800 }
         if( wk_X >= 2980 ) { SostegnoV1_OffX = 700   SostegnoO1_Dim = 900 }

         if( VAR_Revisione_TavAir > 0 )
         {
            if( wk_X >  1900 ) { SostegnoV1_OffX = 450  SostegnoO1_Dim = 550 }
            if( wk_X >  2000 ) { SostegnoV1_OffX = 450  SostegnoO1_Dim = 620 }
            if( wk_X >= 2480 ) { SostegnoV1_OffX = 620  SostegnoO1_Dim = 800 }
            if( wk_X >  2600 ) { SostegnoV1_OffX = 700  SostegnoO1_Dim = 900 }

            // gestione speciale tavoli quadrati
            if( X == Z )
            {
               if( wk_X >= 1000 ) { SostegnoV1_OffX = 300  SostegnoV1_Dim = 550  SostegnoO1_Dim = 385 }
               if( wk_X >  1300 ) { SostegnoV1_OffX = 450  SostegnoV1_Dim = 800  SostegnoO1_Dim = 385 }
               if( wk_X >  1600 ) { SostegnoV1_OffX = 470  SostegnoV1_Dim = 900  SostegnoO1_Dim = 550 }
            }
         }

         SostegnoV2_OffX = SostegnoV1_OffX
         SostegnoO1_OffX = wk_X/2 - SostegnoO1_Dim/2
      }

      if( VAR_tipo_tav == "BENCH" )
      {
         SostegnoV1_OffX = 184
         SostegnoV2_OffX = 184

         SostegnoV2 = 1

         SostegnoV1_Dim = Z - 40
         SostegnoV2_Dim = Z - 40

         SostegnoO1_Dim  = 366
         if( wk_X >= 1600 ) { SostegnoO1_Dim = 628 }

         SostegnoO1_OffX = wk_X/2 - SostegnoO1_Dim/2
      }

      if( VAR_tipo_tav == "EXTENDABLE" )
      {
         SostegnoO1 = 0
         SostegnoV1_Dim  = Z - 100
         if( Z > 850 )  { SostegnoV1_Dim  = Z - 250 }

         //Simone 12/10/21
         //SostegnoV1_OffX = 357
         SostegnoV1_OffX = 291.5
         if( wk_X >= 1900 & Z < 1000 ) { SostegnoV1_OffX = 356.7 }

         SostegnoV2 = 1
         SostegnoV2_Dim  = SostegnoV1_Dim
         SostegnoV2_OffX = SostegnoV1_OffX

         //Simone 12/10/21 - Terzo sostegno per prof. 1000
         //if( wk_X >= 1900 )
         if( Z >= 1000)
         {
            SostegnoO1 = 1

            //SostegnoO1_Dim  = 450
            //SostegnoV1_OffX = 290
            SostegnoO1_Dim  = 400
            SostegnoO1_OffX = wk_X/2 - SostegnoO1_Dim/2
         }
      }

      if( VAR_forma_tav == "ROUND" )
      {
         SostegnoV2 = 0

         SostegnoV1_OffX = 383
         SostegnoV1_Dim  = 800

         SostegnoO1_Dim  = 550
         //Simone 24/09/2021
         //SostegnoO1_OffX = 166
         SostegnoO1_OffX = 160

         if( X >= 1400 )
         {
            SostegnoV1_OffX = 453
            SostegnoO1_OffX = 166
         }

         if( X >= 1600 )
         {
            SostegnoV1_OffX = 503
            SostegnoV1_Dim  = 900

            SostegnoO1_Dim  = 800
            SostegnoO1_OffX = 166
         }

         if( X >= 1800 )
         {
            SostegnoV1_OffX = 503
            SostegnoV1_Dim  = 1104

            SostegnoO1_Dim  = 800
            SostegnoO1_OffX = 206
         }
      }

      if( VAR_forma_tav == "ORGANICO" )
      {
         SostegnoV1_OffX = 433
         SostegnoV1_Dim  = 800

         SostegnoO1_Dim  = 385
         SostegnoO1_OffX = 210

         if( X >= 1500 )
         {
            SostegnoV1_OffX = 453

            SostegnoO1_Dim  = 550
         }

         if( X >= 1700 )
         {
            SostegnoV1_OffX = 503
            SostegnoV1_Dim  = 900

            SostegnoO1_OffX = 265
         }

         if( X >= 1900 )
         {
            SostegnoV1_OffX = 503
            SostegnoV1_Dim  = 1104

            SostegnoO1_Dim  = 800
            SostegnoO1_OffX = 305
         }
      }

      //Luca 29/09/2021 posizione vetri con gestione riduzioni
      //Per ora specifiche solo per Tavolo Air SP.80
      if( VAR_tipo_tav == "TABLE"
        & VAR_forma_tav == "RETTANGOLARE" )
      {
         //A - distanza da sostegno di dx a lato dx tavolo
         //B - distanza tra i due vetri
         //G - distanza da sostegno di sx a lato sx tavolo
         wk_x = X - SostegnoO1_Dim - SostegnoSpessore

         if( X <= 1420 )
         {
            SostegnoV1_OffX = 400
            SostegnoO1_OffX = 300
            wk_dist_vetri = 323

            SostegnoV1_OffX = wk_x - SostegnoO1_OffX -  wk_dist_vetri
            if( SostegnoV1_OffX < 300 )
            {
               SostegnoV1_OffX = 300
               SostegnoO1_OffX = wk_x - SostegnoV1_OffX -  wk_dist_vetri
               if( SostegnoO1_OffX < 250 ) { SostegnoO1_OffX = 250 }
            }
         }

         if( X > 1420 & X <= 1600 )
         {
            SostegnoO1_OffX = 250
            SostegnoV1_OffX = 470
            wk_dist_vetri = 248

            SostegnoV1_OffX = wk_x - SostegnoO1_OffX -  wk_dist_vetri
            if( SostegnoV1_OffX < 300 ) { SostegnoV1_OffX = 300 }
         }
         //riduco prima a e poi solo B
         if( X > 1600 & X <= 1900 )
         {
            //SostegnoO1_Dim = 800
            wk_x = X - SostegnoO1_Dim - SostegnoSpessore

            SostegnoO1_OffX = 250
            SostegnoV1_OffX = 550
            wk_dist_vetri = 288

            if( VAR_mat_tav == "HAYAGEWOOD" )
            {
               SostegnoV1_OffX = 470
               wk_dist_vetri = 248
            }

            SostegnoV1_OffX = wk_x - SostegnoO1_OffX -  wk_dist_vetri

            if( SostegnoV1_OffX < 300 ) { SostegnoV1_OffX = 300 }
         }

         //riduco solo B
         if( X > 1900 & X < 2200 )
         {
            SostegnoO1_OffX = 250
            SostegnoV1_OffX = 550
         }

         if( X >= 2200 & X < 2300 )
         {
            SostegnoO1_OffX = 300
            SostegnoV1_OffX = 600
         }

         if( X >= 2300 & X <= 2500 )
         {
            SostegnoO1_OffX = 300
            SostegnoV1_OffX = 650
            wk_dist_vetri = 638

            SostegnoV1_OffX = wk_x - SostegnoO1_OffX -  wk_dist_vetri
            if( SostegnoV1_OffX < 550 ) { SostegnoV1_OffX = 550 }
         }

         if( X > 2500 )
         {
            SostegnoO1_OffX = 300
            SostegnoV1_OffX = 700
            wk_dist_vetri = 884

            SostegnoV1_OffX = wk_x - SostegnoO1_OffX -  wk_dist_vetri
            if( SostegnoV1_OffX < 550 ) { SostegnoV1_OffX = 550 }
         }

         if( VAR_3Sostegni == 1 )
         {
            wk_x = X - SostegnoO1_Dim - 2*SostegnoSpessore

            SostegnoO1_OffX = wk_X/2 - SostegnoO1_Dim/2
            SostegnoV1_OffX = 620

            if( X > 2600 )
            {
               SostegnoV1_OffX = 700
               wk_dist_vetri = 338

               SostegnoV1_OffX = (wk_x - 2*wk_dist_vetri)/2
               if( SostegnoV1_OffX < 620 ) { SostegnoV1_OffX = 620 }
            }

            if( VAR_Revisione_TavAir > 0 )
            {
               if( X > 1900 ) { SostegnoV1_OffX = 450 }

               if( X > 2000 )
               {
                  SostegnoV1_OffX = 620
                  wk_dist_vetri = 297.5

                  SostegnoV1_OffX = (wk_x - 2*wk_dist_vetri)/2
                  if( SostegnoV1_OffX < 450 ) { SostegnoV1_OffX = 620 }
               }

               if( X >= 2480 ) { SostegnoV1_OffX = 620 }

               if( X > 2600 )
               {
                  SostegnoV1_OffX = 700
                  wk_dist_vetri = 338

                  SostegnoV1_OffX = (wk_x - 2*wk_dist_vetri)/2
                  if( SostegnoV1_OffX < 620 ) { SostegnoV1_OffX = 620 }
               }

               // tavoli quadrati
               if( X == Z )
               {
                  if( X >= 1000 )
                  {
                     wk_dist_vetri = 145.5
                     SostegnoV1_OffX = (wk_x - 2*wk_dist_vetri)/2
                     if( SostegnoV1_OffX < 190 ) { SostegnoV1_OffX = 190 }
                  }

                  if( X > 1300 )
                  {
                     if( SostegnoV1_OffX < 340.5 ) { SostegnoV1_OffX = 340.5 }
                  }

                  if( X > 1600 )
                  {
                     wk_dist_vetri = 143
                     SostegnoV1_OffX = (wk_x - 2*wk_dist_vetri)/2
                     if( SostegnoV1_OffX < 390 ) { SostegnoV1_OffX = 390 }
                  }
               }
            }
         }

         SostegnoV2_Dim  = SostegnoV1_Dim
         SostegnoV2_OffX = SostegnoV1_OffX
      }
   }

   PROCEDURA ConfigSostegni_Tavolini_AIR
   {
      AltezzaVetro = Y + 3 - Spe_Piano - 8

      SostegnoSpessore = 12

      SostegnoO1      = 0
      SostegnoO1_Dim  = 0
      SostegnoO1_OffX = 0

      rie_x = 135
      vet_z = 368

      //parto dalle misure del composto del piano
      wk_x = VAR_VAL(GetTopLevel(ATTUALE()),"X_cmp")
      wk_z = VAR_VAL(GetTopLevel(ATTUALE()),"Z_cmp")

      if( $ATTIVA_DLL == 0 | wk_x <= 0 )
      {
         wk_x = X
         wk_z = Z
      }

      //quadrati
      if( wk_x ==  736 & wk_z ==  736 ) { rie_x = 135  vet_z = 580 }
      if( wk_x ==  828 & wk_z ==  828 ) { rie_x = 185  vet_z = 580 }
      if( wk_x ==  920 & wk_z ==  920 ) { rie_x = 185  vet_z = 580 }
      if( wk_x == 1104 & wk_z == 1104 ) { rie_x = 245  vet_z = 736 }
      if( wk_x == 1200 & wk_z == 1200 ) { rie_x = 245  vet_z = 736 }

      //rettangolari
      if( wk_x ==  782 & wk_z ==  368 ) { rie_x = 135  vet_z = 300 }
      if( wk_x == 1104 & wk_z ==  552 ) { rie_x = 185  vet_z = 368 }
      if( wk_x == 1200 & wk_z ==  850 ) { rie_x = 245  vet_z = 580 }

      if( wk_x == 1472 & wk_z ==  782 ) { rie_x = 295  vet_z = 580 }
      if( wk_x == 1600 & wk_z ==  900 ) { rie_x = 295  vet_z = 580 }
      if( wk_x == 1900 & wk_z ==  900 ) { rie_x = 345  vet_z = 580 }

      if( wk_x > 1200 )
      {
         SostegnoO1      = 1
         SostegnoO1_Dim  = 368
         SostegnoO1_OffX = X/2 - SostegnoO1_Dim/2
      }

      SostegnoV2      = 1
      SostegnoV1_Dim  = vet_z
      SostegnoV1_OffX = rie_x

      SostegnoV2      = 1
      SostegnoV2_Dim  = SostegnoV1_Dim
      SostegnoV2_OffX = SostegnoV1_OffX

      if( VAR_VAL_STR(ATTUALE(),"VAR_forma_tav") == "ROUND" )
      {
         SostegnoV2 = 0

         SostegnoO1      = 1
         SostegnoO1_Dim  = 288
         SostegnoO1_OffX = 17

         SostegnoV1_Dim  = 368
         SostegnoV1_OffX = 136 - SostegnoSpessore/2

         if( X == 900 )
         {
            SostegnoO1_Dim  = 460
            SostegnoO1_OffX = 40
            SostegnoV1_Dim  = 644
            SostegnoV1_OffX = 226 - SostegnoSpessore/2
         }

         if( X == 1200 )
         {
            SostegnoO1_Dim  = 460
            SostegnoO1_OffX = 65
            SostegnoV1_Dim  = 920
            SostegnoV1_OffX = 307 - SostegnoSpessore/2
         }
      }
   }

   //Simone 03/02/2022 - Avviso per back office per tavoli su misura in laminato-laccato
   PROCEDURA Ctrl_Rid_Tav_Air
   {
      wk_msg="Tavolo a misura - Consegna in 8 settimane"
      WITH_ALIAS("$wk_itm","TavoliAir")

      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]

         selezionato=0
         if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1"
           | VAR_VAL_STR($wk_itm_idx,"ORD_SOST") == "1"  ) { selezionato=1 }

         ridotto=0
         if( VAR_VAL($wk_itm_idx,"X") != VAR_VAL($wk_itm_idx,"ORD_X")
           | VAR_VAL($wk_itm_idx,"Z") != VAR_VAL($wk_itm_idx,"ORD_Z") ) { ridotto=1 }

         if( selezionato==1
           & NOME($wk_itm_idx) == "Tavolo_AIR"
           & VAR_VAL_STR($wk_itm_idx, "VAR_mat_tav") == "LAMINATO"
           & VAR_VAL($wk_itm_idx, "Spe_Piano") > 50
           & ridotto == 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)), "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_Rid_Men_Air
   {
      wk_msg="Mensola a misura - Consegna in 10 settimane"
      WITH_ALIAS( "$wk_itm", "Mensola_Air")

      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]

         check_materiale = 0
         if( VAR_VAL_STR( $wk_itm_idx, "VAR_MaterialeStr") == "LAMINATO"
           | VAR_VAL_STR( $wk_itm_idx, "VAR_MaterialeStr") == "LACCATO" )   { check_materiale = 1 }

         check_ridotto = 0
         if( VAR_VAL( $wk_itm_idx, "X") != VAR_VAL( $wk_itm_idx, "ORD_X")
           | VAR_VAL( $wk_itm_idx, "Z") != VAR_VAL( $wk_itm_idx, "ORD_Z") ) { check_ridotto = 1 }

         if( CheckSel_ORD_SOST($wk_itm_idx)
           & check_materiale == 1
           & check_ridotto == 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)), "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_Divani_Misti
   {
      $wk_msg="Sono presenti sia componenti Air che Air Soft; uno ha imbottitura in espanso e l'altro in piuma, inoltre il colore del tessuto potrebbe non essere lo stesso. Avvertire il cliente."
      WITH_ALIAS( "$wk_itm", "StpDivani")

      if( $wk_itm == 0 ) { EXITSUB() }

      $wk_air = 0
      $wk_airsoft = 0

      $wk_i = 1
      while( $wk_i <= $wk_itm )
      {
         $wk_itm_idx = $wk_itm[$wk_i]
         $wk_itm_tipo = STRCAT( VAR_VAL_STR( $wk_itm_idx, "VAR_TipoSeduta"), VAR_VAL_STR( $wk_itm_idx, "VAR_TipoSch"))

         if( Assegna_TIPO_COLLO_CheckSost( $wk_itm_idx, $wk_itm_idx))
         {
            if( $wk_itm_tipo == "AIR" )      { $wk_air = $wk_air + 1 }
            if( $wk_itm_tipo == "AIR_SOFT" ) { $wk_airsoft = $wk_airsoft + 1 }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_air > 0 & $wk_airsoft > 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 )
            //VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_ARR_",STR($wk_ne)), -1)

            $wk_CG_Ctrl_Count = $wk_ne
         }
         else
         {
            DISPLAY2($wk_msg)
         }
      }
   }

   PROCEDURA Ctrl_Divani_AirSoft2208
   {
      $wk_msg="Per gli schienali Air Soft L=2208 prodotti prima del 26/05/22 va sostituita la seduta completa."

      if( VAR_VAL_STR(-1,"TST_OrdineSostituzione") != "1" ) { EXITSUB() }

      WITH_ALIAS( "$wk_itm", "StpDivani")
      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]

         $wk_itm_datains = VAR_VAL_STR( $wk_itm_idx, "z_ins")
         if( $wk_itm_datains == "" ) { $wk_itm_datains = VAR_VAL_STR( PADRE( $wk_itm_idx, -1), "z_ins") }
         $wk_itm_datains = ATOI( LEFT( $wk_itm_datains, 6))

         if( VAR_VAL_STR( $wk_itm_idx, "VAR_TipoSch") == "AIR_SOFT"
           & $wk_itm_datains < 220526
           & VAR_VAL( $wk_itm_idx, "X") > 1840 )
         {
            if( CheckSel_ORD_SOST( VAR_VAL($wk_itm_idx, "idx_schienale")) != CheckSel_ORD_SOST( VAR_VAL($wk_itm_idx, "idx_staffa")) )
            {
               $wk_itm_blo[$wk_ne]=$wk_itm_idx
               $wk_itm_blo=$wk_ne
               $wk_ne=$wk_ne+1
            }
         }

         $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)), "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)
         }
      }
   }

   //Simone 25/10/2022 - Cerco i divani non abbassati di 2mm
   PROCEDURA Ctrl_Alt_Divani_Old
   {
      WITH_ALIAS( "$wk_item", "TelaioDivAIR")
      WITH_ALIAS( "$wk_pouf", "PoufDivAIR")

      if( $wk_item == 0
        & $wk_pouf == 0 ) { EXITSUB() }

      $wk_CG_Nome    = "Ctrl_Alt_Divani_Old"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "NO_BLOCCO"
      $wk_CG_Msg     = "Attenzione: l'altezza del divano è obsoleta."
      $wk_CG_Info    = ""

      $wk_i = 1
      while( $wk_i <= $wk_item )
      {
         $wk_item_idx = $wk_item[$wk_i]
         $Yt_item = VAR_VAL($wk_item_idx,"Yt")

         if( $Yt_item == 414 ) { AddItem2Array(-1,"wk_CG_Items",$wk_item_idx,"") }

         $wk_i = $wk_i + 1
      }

      $wk_j = 1
      while( $wk_j <= $wk_pouf )
      {
         $wk_pouf_idx = $wk_pouf[$wk_j]
         $Y_pouf = VAR_VAL($wk_pouf_idx,"Y")

         if( $Y_pouf == 414
           | $Y_pouf == 420 ) { AddItem2Array(-1,"wk_CG_Items",$wk_pouf_idx,"") }

         $wk_j = $wk_j + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo
   }

   //Luca 22/10/2021
   //staffe scrivania wildwood aggancio lato lungo
   PROCEDURA Set_Staffe_Scriv_WW_LL
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder==1 ) { EXITSUB() }

      Staffa_Z  = 427
      Staffa_OX = 0

      //passo la dimensione della lavorazione
      Staffa_X  = 778
      if( X <= 1288 ) { Staffa_X  = 408 }


      Staffa_OX = X - 450 - Staffa_X
      if( Staffa_OX - VAR_OffX_Vetro - 12 < 566.5 ) { Staffa_OX = VAR_OffX_Vetro - 12 + 556.5 }

      if( X <= 1840 )
      {
         Staffa_OX = X - 300 - Staffa_X
         if( Staffa_OX - VAR_OffX_Vetro - 12 < 348.5 ) { Staffa_OX = VAR_OffX_Vetro - 12 + 348.5 }
      }

      if( X <= 1472 ) { Staffa_OX = X - 150 - Staffa_X }

      if( X <= 1288 )
      {
         Staffa_OX = X - 242 - Staffa_X
         if( Staffa_OX - VAR_OffX_Vetro - 12 < 350 ) { Staffa_OX = VAR_OffX_Vetro - 12 + 350 }
      }

      if( X < 1104 ) { Staffa_OX = X - 150 - Staffa_X }

      //Simone 11/03/2022 - Integrate specifiche di riduzione
      if( X < 920 ) { Staffa_OX = VAR_OffX_Vetro + 12 + 166 }

      if( X < 780 ) { Staffa_OX = X - 10 - Staffa_X }

      //Simone 10/03/2022 - Per riduzioni in profondità
      if( Z <= 485 ) { Staffa_Z = 367 }

      if( Z <  420 ) { Staffa_Z = 247 }
   }

   PROCEDURA CalcolaOffset_Texture_Teste
   {
      Z_doga = 250
      wk_doghe = FLOOR(Z/Z_doga)
      //TEXTURE_OFFZ =  (Z - Z_doga*wk_doghe)/2
      wk_doghe_lat =  (Z - Z_doga*wk_doghe)/2

      //randomizzo la doga di partenza
      //restituisce un valore tra 0 e 899
      if( VAR_EXIST(ATTUALE(),"Random_Texture_Off") == 0 )
      {
         Random_Texture_Off  = RAND()*800
         if( Random_Texture_Off < 100  ) { Random_Texture_Off = 0 }
         else                            { Random_Texture_Off = FLOOR(Random_Texture_Off/100) }
      }

      //TEXTURE_OFFZ = (Z_doga - wk_doghe_lat) + Random_Texture_Off*Z_doga

      //TEXTURE_OFFZ = (Z_doga - wk_doghe_lat)

      TEXTURE_OFFZ = wk_doghe_lat + Random_Texture_Off*Z_doga
   }

   PROCEDURA Ctrl_Sost_Top_Scrivanie
   {
      if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1" ) { EXITSUB() }

      $wk_CG_Nome    = "Ctrl_Sost_Top_Scrivanie"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Top/inserto vetro incollato al piano: vanno sostituiti insieme"
      $wk_CG_Info    = ""

      STRUTTURE("$wk_str")

      $wk_str_num = 0
      while( inc($wk_str_num) <= $wk_str )
      {
         $wk_idx_str = $wk_str[$wk_str_num]

         if( IS_MATCH(NOME($wk_idx_str),"Scrivania*") == 0 ) { continue }

         if( IsIdx($wk_idx_str,"idx_piano") == 0 )           { continue }
         $wk_idx_pia = VAR_VAL($wk_idx_str,"idx_piano")

         $wk_idx_top = -1
         //non può avere sia il top che l'inserto in vetro
         if( IsIdx($wk_idx_str,"idx_top") )                  { $wk_idx_top = VAR_VAL($wk_idx_str,"idx_top")     }
         if( IsIdx($wk_idx_str,"idx_inserto") )              { $wk_idx_top = VAR_VAL($wk_idx_str,"idx_inserto") }
         if( IS_IDX($wk_idx_top) == 0 )                      { continue }

         if( CheckSel_ORD_SOST($wk_idx_top) != CheckSel_ORD_SOST($wk_idx_pia) ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_top,"") }
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Assegna_TipoCollo_Scrivanie_AIR
   {
      WITH_ALIAS( "$wk_elm", "PianoScrivaniaAir")
      if( $wk_elm == 0 ) { EXITSUB() }

      wk_tc_tipo = 2             wk_tc_tipo_abb = 2         wk_tc_var_idx = 2                 wk_tc_var_ctrl = 2                 wk_tc_pre = 2        wk_tc_prg_min = 2     wk_tc_prg_max = 2
      wk_tc_tipo[1] = "Top"      wk_tc_tipo_abb[1] = "top"  wk_tc_var_idx[1] = "idx_top"      wk_tc_var_ctrl[1] = "ConTopVetro"  wk_tc_pre[1] = "FS"  wk_tc_prg_min[1] = 1  wk_tc_prg_max[1] = 9  // Top - da FS1 a FS9
      wk_tc_tipo[2] = "Inserto"  wk_tc_tipo_abb[2] = "ins"  wk_tc_var_idx[2] = "idx_inserto"  wk_tc_var_ctrl[2] = "ConInserto"   wk_tc_pre[2] = "FT"  wk_tc_prg_min[2] = 1  wk_tc_prg_max[2] = 9  // Inserti - da FT1 a FT9

      wk_tc_num = 1
      while( wk_tc_num <= wk_tc_tipo )
      {
         wk_tc_tipo_att     = wk_tc_tipo[wk_tc_num]
         wk_tc_tipo_abb_att = wk_tc_tipo_abb[wk_tc_num]
         wk_tc_var_idx_att  = wk_tc_var_idx[wk_tc_num]
         wk_tc_var_ctrl_att = wk_tc_var_ctrl[wk_tc_num]
         wk_tc_pre_att      = wk_tc_pre[wk_tc_num]
         wk_tc_prg_min_att  = wk_tc_prg_min[wk_tc_num]
         wk_tc_prg_max_att  = wk_tc_prg_max[wk_tc_num]

         Reset_TIPO_COLLO( wk_tc_pre_att, wk_tc_prg_min_att, wk_tc_prg_max_att)
         wk_tc_prg = wk_tc_prg_min_att

         wk_elm_num = 1
         while( wk_elm_num <= $wk_elm )
         {
            wk_elm_att = $wk_elm[wk_elm_num]
            //Tipo collo attualmente assegnato al primo elemento
            wk_tc_att  = VAR_VAL_STR( wk_elm_att, "TIPO_COLLO")

            //Controllo associato al secondo elemento
            wk_acc_att = VAR_VAL( wk_elm_att, wk_tc_var_ctrl_att)
            if( wk_tc_var_ctrl_att == "" ) { wk_acc_att = 1 }

            //Secondo elemento
            wk_acc_att_idx = -1
            if( IsIdx( wk_elm_att, wk_tc_var_idx_att)) { wk_acc_att_idx = VAR_VAL( wk_elm_att, wk_tc_var_idx_att) }

            //Tipo collo attualmente assegnato al primo elemento
            wk_acc_att_tc = ""
            if( IS_IDX(wk_acc_att_idx) ) { wk_acc_att_tc = VAR_VAL_STR( wk_acc_att_idx, "TIPO_COLLO") }

            //Tipo collo da assegnare, se presente riutilizzo, in ordine, quello del secondo e del primo elemento
            wk_tc_val = STRCAT( wk_tc_pre_att, STR(wk_tc_prg))
            wk_tc_add = 1
            if( wk_tc_att != "" )     { wk_tc_val = wk_tc_att     wk_tc_add = 0 }
            if( wk_acc_att_tc != "" ) { wk_tc_val = wk_acc_att_tc wk_tc_add = 0 }

            if( wk_acc_att > 0
              & Assegna_TIPO_COLLO_CheckSost( wk_elm_att, wk_acc_att_idx) )
            {
               if( wk_tc_add > 0
                 & wk_tc_prg > wk_tc_prg_max_att )
               {
                 #ifdef TEC;AZI
                  $wk_msg = STRCAT( "ATTENZIONE!\nTipoCollo=", wk_tc_val, " non previsto per ", wk_tc_tipo_att, ".\nAvvisare ufficio Codifica, grazie.")
                  DISPLAY2($wk_msg)

                  wk_elm_num = $wk_elm
                  $BLOCCO_FINE_ORDINE = 1
                 #endif
               }
               else
               {
                  VAR_VALUESTR_SET( wk_elm_att, "TIPO_COLLO", wk_tc_val)
                  VAR_VALUESTR_SET( wk_acc_att_idx, "TIPO_COLLO", wk_tc_val)

                  if( wk_tc_add > 0 ) { wk_tc_prg = wk_tc_prg + 1 }
               }
            }

            wk_elm_num = wk_elm_num + 1
         }

         wk_tc_num = wk_tc_num + 1
      }
   }

   PROCEDURA Assegna_TipoCollo_Staffe_Fondi_WW_AIR
   {
      WITH_VAR( "$wk_fnd_vtr", "VAR_TipoAppoggio", $num_con_figli, 1, "2")
      if( $wk_fnd_vtr == 0 ) { EXITSUB() }

      $wk_pre_tp = "17"
      $wk_prg = 0

      //tipo collo da 170 a 179: fondo ww e staffe incassate
      Reset_TIPO_COLLO($wk_pre_tp,0,9)

      $wk_tp_used = 0
      $wk_i = 1
      while( $wk_i <= $wk_fnd_vtr )
      {
         $wk_fnd_att = $wk_fnd_vtr[$wk_i]
         COMPONENTI2("$wk_stf", $wk_fnd_att, "StaffaXSostegno_368" )

         #ifdef TEC;AZI
         if( $wk_prg > 9 )
         {
            $wk_msg = "ATTENZIONE!\nTipoCollo non previsto, da 170 a 179.\nAvvisare ufficio tecnico."
            DISPLAY2($wk_msg)
            $wk_i = $wk_fnd_vtr + 1
            $wk_fnd_att = -1
            $BLOCCO_FINE_ORDINE = 1
         }
         #endif

         $wk_j = 1
         while( $wk_j <= $wk_stf )
         {
            $wk_stf_num = $wk_stf[$wk_j]
            if( Assegna_TIPO_COLLO_CheckSost( $wk_fnd_att, $wk_stf_num) )
            {
               $wk_tp_used = 1
               $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))
               VAR_VALUESTR_SET($wk_fnd_att, "TIPO_COLLO", $wk_val_tp)
               VAR_VALUESTR_SET($wk_stf_num, "TIPO_COLLO", $wk_val_tp)
            }

            $wk_j = $wk_j + 1
         }

         if( $wk_tp_used > 0 ) { $wk_prg = $wk_prg + 1 }

         $wk_i = $wk_i + 1
      }
   }
}

Funzioni
{
   number Air_SetAlzata_Alt ( number altezza, string tipo, number moltiplicatore, number delta )
   {
      variabile = STRCAT( "Air_SetAlzataVetro_MagY_Alzata", tipo)
      if( VAR_EXIST( -1, variabile)) { delta = delta + VAR_VAL( -1, variabile) }

      Result = moltiplicatore * (altezza + delta)
   }

   number AIR_AssegnaGruppo ( number idx_str,  number gruppo )
   {
      add_new_group = 1

      // Verifico le strutture vicine per leggere/assegnare il gruppo
      // se le strutture vicine hanno il gruppo mi prendo il valore minore
      // e poi lo riassegno in cascata alle altre strutture che eventualmente
      // hanno un gruppo maggiore

      toll = 5
      NEAR("near", idx_str, toll, 0, "*")

      ScriviSuLog(1,"AIR_AssegnaGruppo",STRCAT("idx_str=", STR(idx_str), "-", NOME(idx_str), "  near=", STR(near), "-", NOME(near), " gruppo=", STR(gruppo)))

      j = 1
      while( j <= near )
      {
         aggiungo_al_gruppo = 0

         idx_str_near = near[j]

         if( HAS_ALIAS( idx_str_near, "AIR_Compo") == 1
           & VAR_EXIST( idx_str_near, "air_gruppo") == 1
           & ABS( ANG_TOT_NOR(idx_str) - ANG_TOT_NOR(idx_str_near)) < 0.1)
         {
            off_z = 50

            // Verifico che siano una sopra l'altra
            /// Dati elemento attuale
            SET_#(idx_str)
            ang_str = ANG_TOT_NOR(idx_str)

            B0_str.x = #base_0.x + SENO(ang_str) * off_z
            B0_str.y = 0
            B0_str.z = #base_0.z + COSENO(ang_str) * off_z

            BM_str.x = B0_str.x + COSENO(ang_str) * #X/2
            BM_str.y = 0
            BM_str.z = B0_str.z - SENO(ang_str) * #X/2

            B3_str.x = #base_3.x + SENO(ang_str) * off_z
            B3_str.y = 0
            B3_str.z = #base_3.z + COSENO(ang_str) * off_z

            /// Dati elemento near
            SET_#(idx_str_near)
            ang_str_near = ANG_TOT_NOR(idx_str_near)

            B0_str_near.x = #base_0.x + SENO(ang_str_near) * off_z
            B0_str_near.y = 0
            B0_str_near.z = #base_0.z + COSENO(ang_str_near) * off_z

            BM_str_near.x = B0_str_near.x + COSENO(ang_str_near) * #X/2
            BM_str_near.y = 0
            BM_str_near.z = B0_str_near.z - SENO(ang_str_near) * #X/2

            B3_str_near.x = #base_3.x + SENO(ang_str_near) * off_z
            B3_str_near.y = 0
            B3_str_near.z = #base_3.z + COSENO(ang_str_near) * off_z

            // Interferenze
            /// Punto medio elemento attuale nei confronti dell'elemento near
            if( aggiungo_al_gruppo == 0)
            {
               P1 = INTERFERISCI( BM_str, ang_str + 90, B0_str_near, B3_str_near)
               if( P1.x != $ERR_INTERFERISCI
                 & P1.z != $ERR_INTERFERISCI)  { aggiungo_al_gruppo = 1 }

               ScriviSuLog( 0, "AIR_AssegnaGruppo", STRCAT("P1 = ", Point2String(P1)))
            }

            /// Punto medio elemento near nei confronti dell'elemento attuale
            if( aggiungo_al_gruppo == 0)
            {
               P2 = INTERFERISCI( BM_str_near, ang_str + 90, B0_str, B3_str)
               if( P2.x != $ERR_INTERFERISCI
                 & P2.z != $ERR_INTERFERISCI)  { aggiungo_al_gruppo = 1 }

               ScriviSuLog( 0, "AIR_AssegnaGruppo", STRCAT("P2 = ", Point2String(P2)))
            }
         }

         ScriviSuLog(0,"AIR_AssegnaGruppo",STRCAT("idx_str=",STR(idx_str),"-",NOME(idx_str) ," idx_str_near=",STR(idx_str_near),"-",NOME(idx_str_near)))
         ScriviSuLog(0,"AIR_AssegnaGruppo",STRCAT("aggiungo_al_gruppo=",STR(aggiungo_al_gruppo)))

         if( aggiungo_al_gruppo == 1)
         {
            // se esiste già il gruppo nella struttura vicina...
            // lo eredito (se < al mio gruppo) o lo riassegno (se > al mio gruppo)
            add_new_group = 0

            air_gruppo_curr = VAR_VAL(idx_str, "air_gruppo")
            air_gruppo_near = VAR_VAL(idx_str_near, "air_gruppo")

            // eredito il valore
            if( air_gruppo_near < air_gruppo_curr)
            {
               VAR_VALUE_SET(idx_str, "air_gruppo", air_gruppo_near)
            }

            // riassegno il valore
            if( air_gruppo_near > air_gruppo_curr)
            {
               VAR_VALUE_SET(idx_str_near, "air_gruppo", air_gruppo_curr)

               AIR_AssegnaGruppo ( idx_str_near,  air_gruppo_curr)
            }
         }

         j = j + 1
      }

      Result = add_new_group
   }
}

Macro
{
   AIR_Compo "" interattiva AIR_Ctrl_Composizioni
}
