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

   M368_Spe_Fia             "Spessore fianco"                                        19    NoSave
   M368_Spe_Sch             "Spessore schiene"                                        8    NoSave
   M368_Spe_SchPiena        "Spessore schiene"                                       25    NoSave
   M368_Spe_Cop             "Spessore coperchio"                                     19    NoSave
   M368_Spe_Cop38           "Spessore coperchio"                                     38    NoSave
   M368_Spe_Fnd             "Spessore fondo"                                         19    NoSave
   M368_Spe_Ant             "Spessore Anta"                                          20    NoSave
   M368_Spe_VetAnt          "Spessore Vetro Anta"                                     4    NoSave
   M368_Spe_Cas             "Spessore Cassetto"                                      21    NoSave
   M368_Spe_BarSc           "Spessore Barra scolapiatti"                             18    NoSave
   M368_Spe_Riv             "Spessore rivestimento alluminio"                        0.5   NoSave

   M368_Alt_Pie             "Altezza piedini  368"                                   17    NoSave

   M368_Rie_Sch_ZR          "Rientro schienale dal retro"                            16.5  NoSave
   M368_Aria_Ant_X          "Aria fra il frontale e la scocca in X"                  1.5   NoSave
   M368_Aria_Ant_Y          "Aria fra il frontale e la scocca in Y"                  1.5   NoSave
   M368_Aria_Ant_Z          "Aria fra il frontale e la scocca in Z"                  2     NoSave
   M368_Aria_Ant_Z_PP       "Aria fra il frontale e la scocca in Z"                  3.5   NoSave

   M368_Aria_Ant_Ant_X      "Aria tra coppia frontali in X"                          3     NoSave
   M368_Aria_Ant_Ant_Y      "Aria tra coppia frontali in Y"                          3     NoSave
   M368_Aria_Cas_Y          "Aria fra il frontale e la scocca in Y"                  1.5   NoSave
   M368_Aria_Ces_Y          "Aria fra il frontale e la scocca in Y"                  1.5   NoSave

   M368_MagSch_X            "Maggiorazione in larghezza schiene per fresata"         7.5   NoSave
   M368_MagSch_Y            "Maggiorazione in altezza schiene per fresata"           7.5   NoSave
   M368_RidSchPiena_X       "Maggiorazione in larghezza schiene piene (H.138)"       1     NoSave
   M368_RidSchPiena_Y       "Maggiorazione in altezza schiene piene (H.138)"         1     NoSave
   M368_Spe_Rip             "Spessore Ripiano"                                       8     NoSave
   M368_Spe_Div             "Spessore Divisorio"                                     8     NoSave

   M368_Spe_DivLeg19        "Spessore Divisorio Legno 19"                            19    NoSave
   M368_Spe_DivLeg38        "Spessore Divisorio Legno 38"                            38    NoSave

   M368_Rie_Pan             "Rientro del pannello"                                   3     NoSave

   //Giunzioni
   M368_Giu_Diametro        "Giunzioni - Diametro"                                   10    NoSave
   M368_Giu_Sporgenza       "Giunzione - Sporgenza"                                  1     NoSave
   M368_Giu_Near_Rid        "Giunzioni - Near - Riduzione rispetto giunzione"        0.2   NoSave
   M368_Giu_Collisioni_PMin "Giunzioni - Collisioni - Dim area rispetto perimetrale" 45    NoSave

   M368_Giu_YMin            "Giunzioni - Altezza minima per inserimento"             92    NoSave
   M368_Giu_YMin_R1         "Giunzioni - Altezza minima per inserimento - REV 1"     86    NoSave

   //Passacavi
   M368_Pcv_Coll_X          "Passacavi/Led - Larghezza area rispetto"                32.5  NoSave
   M368_Pcv_Coll_X_Cest     "Passacavi/Led - Larghezza area rispetto cestone"        67    NoSave
   M368_Pcv_Coll_X_Punto    "Passacavi/Led - Larghezza area rispetto punto"          30    NoSave
   M368_Pcv_Coll_Y          "Passacavi/Led - Altezza area rispetto"                  85    NoSave
   M368_Pcv_Coll_Z          "Passacavi/Led - Larghezza area rispetto"                49.5  NoSave

   //Omega
   Omega_Spe_Gambe          "Omega - spessore gambe"                                 12    NoSave
   Omega_RieY_Gambe         "Omega - rientro in altezza gambe"                       2     NoSave

   Omega_YPie               "Omega - Spessore piedini"                               3     NoSave
   Omega_ZPie               "Omega - Profondità piedini"                             54    NoSave
   Omega_RieZ_Pie           "Omega - Rientro Z piedini"                              6     NoSave

   Omega_YRinf_Vtr          "Omega - Spessore rinforzo gamba vetro"                  2     NoSave

   //Mail di A. Ramina del 20/03/2023 - "Supporto centrale Omega - modifica altezza"
   //Omega_RieY_GambaC        "Omega - rientro in altezza gamba centrale"              27    NoSave
   Omega_RieY_GambaC        "Omega - rientro in altezza gamba centrale"              29    NoSave
   Omega_OffY_StafC         "Omega - rientro in altezza staffa centrale"             6     NoSave

   //gestione collisione IR
   PCV_ContCollisioni_da_IR     "" 0 NoSave
   //gestione collisione da ILLUMINAZIONE FARETTO/LED
   PCV_ContCollisioni_da_IL     "" 0 NoSave
   PCV_ContCollisioni_da_IL_INT "" 0 NoSave
   PCV_ContCollisioni_da_IL_EST "" 0 NoSave
   //gestione collisione PCV su schiena, fondo, fianchi e divisorio
   PCV_ContCollisioni_su_SCH    "" 0 NoSave
   PCV_ContCollisioni_su_FND    "" 0 NoSave
   PCV_ContCollisioni_su_FIA    "" 0 NoSave
   PCV_ContCollisioni_su_DIV    "" 0 NoSave

   //Luca 03/03/2022
   PCV_ContCollisioni_L21       "" 0 NoSave

   OnRigenera_AttivaPCV         "" 0 NoSave

   DBG_GruppiXG                 "" 0 NoSave

   //Luca 29/01/2021
   G368_OnMacro                 ""  0 NoSave
   G368_VediCollisioni          ""  0 NoSave

   //Revisioni
   //LZ 16/07/2021
   BDM_REV_368_PosPCV_1               "Revisione posizione default passacavi 368"      210718 NoSave
   //LZ 22/03/2022: rivisto centro in presenza di top
   BDM_REV_368_PosPCV_2               "Revisione posizione default passacavi 368"      220324 NoSave

   //LZ 18/10/2021
   BDM_REV_368_Omega_SC_1             "Revisione supporto centrale omega 368"          211018 NoSave

   //Simone 26/10/2022
   BDM_REV_368_Omega_SC_2             "Revisione supporto centrale omega 368"          221028 NoSave

   //Simone 27/10/21
   BDM_REV_368_Off_Sost_1             "Revisione offset laterale sostegni vetro"       211028 NoSave

   //LZ 09/12/2021: Cestoni da 1104 con apertura push devono avere il divisorio
   //               La regola è già impostata correttamente, ma non entra in funzione se l'apertura non risulta modificata (exit se is_var_fixed == 0 )
   //               La applico anche se l'apertura è impostata da allestimento o tramite controlli,
   //               ma utilizzo una revisione per non mandare in errore gli ordini da produrre e permettere la sostituzione corretta di quelli già prodotti.
   BDM_REV_368_PushCest1104_1         "Revisione cestone 1104 con push"                211207 NoSave

   //Revisione fissaggio muro Air, 0: preferisco attaccaglie, 1: preferisco antiribaltamento
   BDM_REV_368_AIR_FissaggioMuro_1    "Revisione fissaggio muro contenitori Air"       221214 NoSave

   //17/01/2023: Introduzione del paracolpo
   //            Questo sostisuisce i push pull obbligatori per allineamento dei frontali quando un contenitore è affiancato ad uno dove il push pull è obbligatorio/abilitato dall'utente
   BDM_REV_368_AIR_Paracolpo_1        "Revisione paracolpo frontali 368 e Air"         290117 NoSave

   //17/01/2023: Revisione miniwinch
   BDM_REV_368_AIR_Miniwinch_1        "Revisione miniwinch ribalta 368 e Air"          290117 NoSave

   //Simone 26/01/2023 - Nuove regole per contenitori a terra che necessitano fix a muro: utilizzo antiribaltamenti al posto degli agg. std.
   //                    Allineo a questa gestione anche l'antiribaltamento nei pcf
   BDM_REV_368_Antiribaltamento_1     "Revisione antiribaltamento 368"                 230212 NoSave
}

Altimetri
{
}

Misure
{
   LargP368 "Larghezza"
   {
      Nominali 368   460   552   600   640   736   900   920   1104   1472   1656   1840  2208
      Reali    368   460   552   600   640   736   900   920   1104   1472   1656   1840  2208
   }

   AltP368 "Altezza"
   {
      Nominali 138   184   276   368   552   736   920   1104   1472   1840   2208
      Reali    138   184   276   368   552   736   920   1104   1472   1840   2208
   }

   ProfP368 "Profondita'"
   {
      Nominali 180   248   270   384   406   488   538   560
      Reali    180   248   270   384   406   488   538   560
   }

   XVano_M368 "Larghezza Vano"
   {
      Nominali 368   552   736   920   1104
      Reali    368   552   736   920   1104
   }

   //Simone 04/10/2022 - Per prof. 510
   DimRA368 "Larghezza"
   {
      Nominali  273 409 513 563
      Reali     273 409 513 563
   }

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

   TpDivV_368 "Tipologia divisorio"  < OnlyDesc;NoDiz >
   {
      Nominali "No"  "Sp.19"  "Sp.38"
      Reali     0       2        3
   }

   SpeRipLegno_368 "Spessore ripiano legno 368"  < OnlyDesc;NoDiz >
   {
      Nominali  19  38
      Reali     19  38
   }

   Ferr_368_Mw     "Ferramenta 368 - Verso Miniwinch" < OnlyDesc; NoDiz >
   {
      Nominali "Escluso" "Sx" "Dx" "Sx+Dx" "Sx+Dx+CxDx" "Sx+Dx+CxDx+CxSx"
      Reali        0      -1   1      2          3              4
   }

   DimWP368 "Dimensione Wall Panel" < OnlyDesc >
   {
      Nominali 184  276  368  552  736  920  1104  1288  1472  1840  2208
      Reali    184  276  368  552  736  920  1104  1288  1472  1840  2208
   }

   //Luca 04/05/2020 menù dinamici per wallpanel
   DimXWP368 "Dimensione Wall Panel" < OnlyDesc >
   {
      Nominali 184
      Reali    184
   }

   DimYWP368 "Dimensione Wall Panel" < OnlyDesc >
   {
      Nominali 184
      Reali    184
   }

   Lar368_Mirror "Larghezza 368Mirror" < OnlyDesc >
   {
      Nominali 828  1012  1104  1288  1472  1840  2024
      Reali    828  1012  1104  1288  1472  1840  2024
   }

   Alt368_Mirror "Altezza 368Mirror" < OnlyDesc >
   {
      Nominali 828  1012  1288  1840  2024
      Reali    828  1012  1288  1840  2024
   }

   Fascia368_Mirror "Fascia fissa 368Mirror" < OnlyDesc >
   {
      Nominali 181  250  273
      Reali    181  250  273
   }

   AltCa368 "Altezza cassetto 368" < OnlyDesc >
   {
      Nominali 138   184   276   368
      Reali    138   184   276   368
   }

   TpBif_368 "Tipologia bifacciale 368"  < OnlyDesc;NoDiz >
   {
      Nominali "ANTA BIFACCIALE"  "PANNELLO RETRO"
      Reali       0                     1
   }

   XPan_PTE "Larghezza pannello" < OnlyDesc >
   {
      Nominali 368   736   920   1104   1472  1840  2208
      Reali    368   736   920   1104   1472  1840  2208
   }

   YPan_PTE "Altezza pannello" < OnlyDesc >
   {
      Nominali 368   736
      Reali    368   736
   }

   LarMGl_368 "Larghezza madia glass"
   {
      Nominali 920   1104  1288  1472  1840
      Reali    920   1104  1288  1472  1840
   }

   //Luca 15/10/2020
   DimAnt_368   "Dimensione anta" < OnlyDesc >
   {
      Nominali 368 552 736
      Reali    368 552 736
   }

   TpTopWW_368   "Tipo Top " < OnlyDesc >
   {
      Nominali    "18 mm"    "80 mm"
      Reali        0            1
   }

   //MENSOLA ELLE
   XMensL_368 "Largheza mensola ELLE" < OnlyDesc;NoDiz >
   {
      Nominali  365   549   733   917   1101  1469  1837  2205
      Reali     365   549   733   917   1101  1469  1837  2205
   }

   YMensL_368 "Altezza mensola ELLE" < OnlyDesc;NoDiz >
   {
      Nominali  181  365
      Reali     181  365
   }

   ZMensL_368 "Profondità mensola ELLE" < OnlyDesc;NoDiz >
   {
      Nominali  136  248
      Reali     136  248
   }

   TMensL_368 "Tipologia mensola ELLE" < OnlyDesc;NoDiz >
   {
      Nominali   "Bassa"   "Alta"
      Reali        0          1
   }

   ProSV_368 "Profondita'" < OnlyDesc;NoDiz >
   {
      Nominali  232  368  522  628  736  920
      Reali     232  368  522  628  736  920
   }

   ProPTV368 "Larghezza Porta TV" < OnlyDesc;NoDiz >
   {
      Nominali  360 520
      Reali     360 520
   }

   DXSXPER "Posizione"   < OnlyDesc >
   {
      Nominali  "SX"   "Personalizzata"   "DX"
      Reali      -1           0            1
   }

   DXSXPER2 "Posizione"   < OnlyDesc >
   {
      Nominali  "SX"  "SX DIVISORIO"  "DX DIVISORIO"    "DX" "Personalizzata"
      Reali      -1    -2                  2            1          0
   }

   TipoLed "Tipologia" < OnlyDesc >
   {
      Nominali  "36e8"  "Punto"
      Reali       1        2
   }

   PosFar "Posizione"   < OnlyDesc >
   {
      Nominali  "Interno"  "Esterno"
      Reali         1          2
   }

   PosFar2 "Posizione"   < OnlyDesc >
   {
      Nominali  "Sotto"  "Sopra"
      Reali        1        2
   }

   AltSUP368 "Altezza"  < OnlyDesc >
   {
      Nominali 92 184 276 368
      Reali    92 184 276 368
   }

   LargOmega "Larghezza sostegno OMEGA" < OnlyDesc;NoDiz >
   {
      Nominali  736  920  1104  1288  1472  1656  1840  2024  2208  2392  2576  2760  2944  3128  3312
      Reali     736  920  1104  1288  1472  1656  1840  2024  2208  2392  2576  2760  2944  3128  3312
   }

   AlteOmega "Altezza sostegno OMEGA" < OnlyDesc;NoDiz >
   {
      Nominali 136  201  293  385  569
      Reali    136  201  293  385  569
   }

   ProfOmega "Profondita' sostegno OMEGA" < OnlyDesc;NoDiz >
   {
      Nominali 346 450
      Reali    346 450
   }

   TipoCmpOmega "Tipo composizione omega" < OnlyDesc;NoDiz >
   {
      Nominali "GENERICO" "MATERIA" "368" "NOW"
      Reali        0          1       2     3
   }
}

//{ MODULI
Elemento ModuloGiorno_368
{
   Descrizione = "Modulo Giorno 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile;StampaXG;CtrlAllineamento368;NoCollision2;AccL21

   Attrezzabile   Testiera_L21 PannelloAccessorio_Testiera_L21
   Altimetro      Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //Simone 26/01/2023
      VAR_Revisione_Antiribaltamento  "Revisione impiego antiribatamento 368"  0  SaveAlways

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1
      Tipo368            ""  "368-GIO"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"         368 Menu ( LargP368 )

      Y       "Altezza"           184 Menu ( AltP368 )
      Yt      "Altezza c/piedini" 184

      Z       "Profondità"        180 Menu ( ProfP368 )

      ConPiedini         "" 0
      ConAttaccaglie     "" 0

      ConBifacciale      "" 0

      //nel modulo giorno solo divisori vetro
      VAR_DivVerticale  "Divisorio verticale" 0 Boolean
      DivVert_X         ""                    8
      PosDivVert_X      ""                  400

      VAR_FixMuro       "Fissato a muro"      0 Menu ( SiNo )
      VAR_FixTerra      "Solo a terra"        0 Menu ( SiNo )

      FLAG_CopSp38      "Coperchio sp.38"     0

      FLAG_ConModuloSotto "" 0
      FLAG_ConModuloSopra "" 0

      //gestione pannello per LED
      //PannelloRetroLED  "" 0 SaveAlways
      FLAG_ConPannelloLED "" 0 SaveAlways
      idx_pannelloLED     "" -1

      //Simone 21/06/2022
      Trasformatore_Led  ""  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"

      #ifdef TEC
         VAR_Regola_Elements   "Config.Elements"         "" Utente ( )
         VAR_FixMuro_Elements  "Pcf.FIX Muro"            0  Menu ( SiNo )
         VAR_FixTerra_Elements "Pcf.FIX Terra"           0  Menu ( SiNo )
         VAR_Massello_Elements "Massello"                2  Menu ( DXSXD2 )
      #endif
      #ifndef TEC
         VAR_Regola_Elements   "" ""
         VAR_FixMuro_Elements  ""  0
         VAR_FixTerra_Elements ""  0
         VAR_Massello_Elements ""  2
      #endif

      VAR_Side     "Elemento side"    0

      //Simone 14/03/2022
      VAR_Acc_Letto   "Per Letto AIR"  0  Implicit

      //Luca 29/03/2022
      //variabili per spostamento se attrezzato su testiera
      Filler1       " " "" ShowAlways
      ATT_OffsetX   "Offset X posizionamento" 0 Utente ( )
      ATT_OffsetY   "Offset Y posizionamento" 0 Utente ( )

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

      CARB_Attiva   ""  0  SaveAlways

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      //Simone 26/01/2023
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_Antiribaltamento", "VAR_Revisione_Antiribaltamento")

      //Luca 02/03/2022
      if( UN_PADRE("Testiera_L21") )  { VediLimiti_PCV = 0 }

      GOSUB SetLimiti_Accessorio_Testiera_L21

      //Simone 31/01/2023
      if( VAR_Revisione_Antiribaltamento > 0 ) { VAR_Massello_Elements = 0 }
   }

   PuntiNotevoli
   {
      GOSUB PuntiModuli_368
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368

      //Luca 04/11/2021 solo su testiere, probabilmente sarà da ampliare il blocco per tipologia di testiere e/o dimensioni di 36e8
      if( $query_type == 8 )
      {
         if( $query_p2 == 2 )        { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelloAccessorio_Testiera_L21
   }

   Attrezza
   {
      GOSUB AttrezzaAccessorio_Testiera_L21
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368

      //Simone 21/02/2023
      if( VAR_DivVerticale == 1 ) { PosDivVert_X = X/2 - DivVert_X/2 }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_cancella_368
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB SettaPosizione_368
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //Offset ", NOME(ATTUALE())))

      GOSUB Offset_Modulo_368
   }

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

      //Luca 04/11/2021 in caso di attrezzaggio su testiere
      if( $ins2_attrezzato == ins2_att )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
      }
   }

   Procedura cancella
   {
      GOSUB Cancella_Modulo_368

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

   //Posiziona Cuc_GruppoPiedini gp
   Posiziona GruppoPiedini_368 gp
   {
      @escluso = 1 - ConPiedini
      GOSUB Posa_Elemento
      @Y = $M368_Alt_Pie
   }

   Posiziona FerramentaModulo_368 fer
   {
      //LZ 14/01/2022: gestisco ConAttaccaglie in FerramentaModulo_368, dato che questo porta anche altri elementi indispensabili per diversi controlli
      //               (per esempio miniwinch e controlli collisioni giunzioni)
      //@escluso = 1 - ConAttaccaglie

      //Simone 14/03/2022
      @escluso = 0
      if( VAR_Acc_Letto == 1 ) { @escluso = 1 }

      GOSUB posa_fusto_368
   }

   Posiziona FustoModulo_368 fbs
   {
      GOSUB posa_fusto_368
   }

   //Luca 21/09/2020
   //su indicazine di Enrico, il divisorio in vetro fuori fusto
   Posiziona DivisiorioVetLiv_368 DivVV
   {
      @escluso = 1
      if( VAR_DivVerticale == 1 ) { @escluso = 0 }

      //@base_0.x = base_0.x + X/2 - $M368_Spe_Div/2
      @base_0.x = base_0.x + PosDivVert_X
      @base_0.y = base_0.y + $M368_Spe_Fnd + $M368_Alt_Pie*ConPiedini

      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop

      if( FLAG_CopSp38 == 1  ) { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }

      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div - RieZF_Div
   }

   //Simone 21/06/2022 - Trasformatore per led sottopensile
   Posiziona RigaOrdine_NonGraficato trasf
   {
      @escluso = 1 - Trasformatore_Led

      @base_0 = base_0
      @GEST_CODICE = "CU0625"
      @X = 247
      @Y = 30
      @Z = 17

      @RIGA_ORDINE = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = alto_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 = alto_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 40
      @Z = 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Yt - 20
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 40
      @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 - 20
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 40
      @Z = Z - 110
   }

   //{ INGOMBRI PER COLLISIONI CON STAFFE SUPPORTI VETRO
   // l'ingombro è di 30, ma faccio 29 per gestire la tolleranza di 1mm del near
   Posiziona SVT_ContCollisioni_368 colsx
   //Posiziona _cont_per_near colsx
   //Posiziona Blocco colsx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + ConPiedini*$M368_Alt_Pie
      @base_0.z = base_0.z
      @X = 30 - 1
      @Y = 10
      @Z = Z
      @c_rivestimento = $c_rosso

      @CtrlCol_StaffeSupportoVetro = 1
   }

   Posiziona SVT_ContCollisioni_368 colc
   //Posiziona _cont_per_near colc
   //Posiziona Blocco colc
   {
      @escluso = 1 - VAR_DivVerticale
      @base_0.x = base_0.x + X/2 - 29/2
      @base_0.y = base_0.y + ConPiedini*$M368_Alt_Pie
      @base_0.z = base_0.z
      @X = 30 - 1
      @Y = 10
      @Z = Z
      @c_rivestimento = $c_rosso

      @CtrlCol_StaffeSupportoVetro = 1
   }

   //Posiziona _cont_per_near coldx
   Posiziona SVT_ContCollisioni_368 coldx
   //Posiziona Blocco coldx
   {
      @base_0.x = base_3.x - 29
      @base_0.y = base_0.y + ConPiedini*$M368_Alt_Pie
      @base_0.z = base_0.z
      @X = 30 - 1
      @Y = 10
      @Z = Z
      @c_rivestimento = $c_rosso

      @CtrlCol_StaffeSupportoVetro = 1
   }
   //}

   //Luca 21/01/2021
   Posiziona TAG_NFC nfc
   {
      @escluso = 1 - NFC_Attiva

      @base_0.x = base_0.x + X - @X - $M368_Spe_Fia
      @base_0.y = base_0.y + Y - @Y - 5
      @base_0.z = base_0.z + Z
   }
}

//Luca 14/09/2020
Elemento Modulo_368
{
   Descrizione = "Modulo 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Pensile;Offset
   Alias       Pensile;OnChangedVar;CheckPushPull;StampaXG;CtrlAllineamento368;NoCollision2;Modulo_368;CamIncidente;AccL21
   Attrezzabile   Testiera_L21 PannelloAccessorio_Testiera_L21 LibreriaPentagram_LP22
   Altimetro      Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 09/12/2021
      VAR_Revisione_PushCest1104      "Revisione push su cestone 1104"           0 SaveAlways
      VAR_Revisione_AIR_FissaggioMuro "Revisione fissaggio muro contenitori Air" 0 SaveAlways
      VAR_Revisione_Paracolpo         "Revisione paracolpo frontali 368 e Air"   0 SaveAlways
      VAR_Revisione_Miniwinch         "Revisione miniwinch ribalta 368 e Air"    0 SaveAlways
      //Simone 26/01/2023
      VAR_Revisione_Antiribaltamento  "Revisione impiego antiribatamento 368"    0 SaveAlways

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1
      Tipo368            "" "368-BAT"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X           "Larghezza"                  368 Menu ( LargP368 ) Utente ( 400-1200 )

      Y           "Altezza"                    184 Menu ( AltP368 )
      Yt          "Altezza c/piedini"          184

      Z           "Profondità"                 180 Menu ( ProfP368 )
      Zt          "Profondità c/ante"          180 ShowAlways
      Zn          "Profondità c/ante"          180
      Z_Attrezza  "Profondità per attrezzaggi" 0   Menu ( ProfP368 )

      Verso         "verso della scocca"    -1
      //Menu ( DXSX )

      ConPiedini      "" 1
      ConAttaccaglie  "" 0

      ConBifacciale   "" 0

      ConPushPull     "" 0

      //solo nel caso di divisorio interno con singolo frontale
      VAR_DivVerticale  "Divisorio verticale"    0 Menu ( TpDivV_368 )

      //CONFIGURAZIONE VANI DEFINITA IN FASE DI COSTRUZIONE COMPOSTI
      //per gestione vani cassetti / ante
      VAR_ConfigVani    "Configurazione vani"    1 Utente ( 1-6  )
      VAR_Vano1_X       "Largheza Vano 1"        0 Menu ( XVano_M368 )
      VAR_Vano2_X       "Largheza Vano 2"        0 Menu ( XVano_M368 )
      VAR_Vano3_X       "Largheza Vano 3"        0 Menu ( XVano_M368 )
      VAR_Vano4_X       "Largheza Vano 4"        0 Menu ( XVano_M368 )
      VAR_Vano5_X       "Largheza Vano 5"        0 Menu ( XVano_M368 )
      VAR_Vano6_X       "Largheza Vano 6"        0 Menu ( XVano_M368 )

      //dimensione e posizione divisorio verticale (utilizzo anche nei cassetti per calcolo strutture interne)
      DivVert_X         ""  19
      PosDivVert_X      ""  400

      DivVert2_X         ""  19
      PosDivVert2_X      ""  400

      //da attivare in caso di cassetto con VanoGiorno
      VAR_DivOriz       "Divisorio orizzontale" 0 Menu ( SiNo )

      VAR_FixMuro       "Fissato a muro"      0 Menu ( SiNo )
      VAR_FixTerra      "Solo a terra"        0 Menu ( SiNo )

      FLAG_CopSp38      "Coperchio sp.38"     0

      //Gestione PUSH PULL
      PP_PushPull        "" 0
      //attivo da procedura
      PP_AttivaAuto      "" 0 SaveAlways

      //Luca 15/01/2021
      PP_Manuale        "PUSH PULL: disattivare controllo AUTO" 0 Boolean

      //gestione pannello per LED
      //PannelloRetroLED    "" 0
      FLAG_ConPannelloLED "" 0  SaveAlways
      idx_pannelloLED     "" -1

      //Luca 11/03/2021 moduli AIR
      FLAG_Modulo_AIR    "Contenitore 36e8 AIR"      0 Boolean
      PosSporgenzaAIR    "Lato sporgenza"            0 Menu ( PSC_AIR ) SaveAlways
      ConDivisorioAIR    "Divisorio aggiuntivo AIR"  0
      PosDivisorioAIR    "Pos divisorio x AIR"       0
      SpeDivisorioAIR    "Spessore divisorio x AIR"  0

      ConFresataSup  "" 0 SaveAlways
      ConFresataInf  "" 0 SaveAlways

      FLAG_ConModuloSotto "" 0
      FLAG_ConModuloSopra "" 0

      //Simone 21/06/2022
      Trasformatore_Led   "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_top      "" -1

      //Luca 29/03/2022
      //variabili per spostamento se attrezzato su testiera
      Filler1       " " "" ShowAlways
      ATT_OffsetX   "Offset X posizionamento" 0 Utente ( )
      ATT_OffsetY   "Offset Y posizionamento" 0 Utente ( )

      COD_EREDITA   ""   "PRE;POST"
      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

      #ifdef TEC
         VAR_Regola_Elements   "Config.Elements"         "" Utente ( )
         VAR_FixMuro_Elements  "Pcf.FIX Muro"            0  Menu ( SiNo )
         VAR_FixTerra_Elements "Pcf.FIX Terra"           0  Menu ( SiNo )
         VAR_Massello_Elements "Massello"                2  Menu ( DXSXD2 )
      #endif
      #ifndef TEC
         VAR_Regola_Elements   "" ""
         VAR_FixMuro_Elements  ""  0
         VAR_FixTerra_Elements ""  0
         VAR_Massello_Elements ""  2
      #endif

      VAR_Side        "Elemento side"  0

      //Simone 14/03/2022
      VAR_Acc_Letto   "Per Letto AIR"  0  Implicit

      //VARIABILI PER GESTIONE NFC
      NFC_Attiva    ""  0  SaveAlways
      NFC_Categoria ""  "LIVING"
      NFC_Priorita  ""  10

      CARB_Attiva   ""  0 SaveAlways

      //Luca 16/03/2021
      BdmCollision_Local "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      //LZ 09/12/2021
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_PushCest1104", "VAR_Revisione_PushCest1104")
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_AIR_FissaggioMuro", "VAR_Revisione_AIR_FissaggioMuro")
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_AIR_Paracolpo", "VAR_Revisione_Paracolpo")
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_AIR_Miniwinch", "VAR_Revisione_Miniwinch")
      //Simone 26/01/2023
      SetRevisioneElemento( ATTUALE(), "BDM_REV_368_Antiribaltamento", "VAR_Revisione_Antiribaltamento")

      if( VAR_ConfigVani == 1 ) { VAR_Vano1_X = X }
      if( VAR_ConfigVani == 3 ) { VAR_Vano3_X = X - VAR_Vano1_X - VAR_Vano2_X }

      //nascondo sempre per i rivenditori
      #ifdef AGE;RIV
      HIDE_ON_EDIT(ATTUALE(),"PP_Manuale",1)
      #endif

      //Luca 11/03/2021
      if( FLAG_Modulo_AIR == 1 )
      {
         M4_CNT_LINK_MODE__ = 2
         M4_CNT_MODE__      = 0
         M4_CNT_MODE2__     = 0

         //Luca 22/10/2021 solo a terra non possono essere sospesi
         M4_A_MURO  = 0

         ALIAS_ADD( ATTUALE() , "AIR_Compo" )
      }

      //Luca 29/09/2021
      //mantis 026841: 368 - Blocco PUSH PULL su cassetti/cestoni con L > 1104
      //"ti chiedo di bloccare il tipo apertura push su cassetti e cestoni con L > 1104, poichè non disponibile."
      //Simone 06/12/21 - Rivista dimensione massima disponibilità push
      if( FLAG_Cassetto == 1 | FLAG_Cestone == 1 )
      {
         if( X > 1472 )
         {
            NO_PushPull = 1
            if( wk_cas > 1 )
            {
               NO_PushPull = 0
               if( VAR_VAL(wk_cas[1],"X") > 1469 ) { NO_PushPull = 1 }
            }
         }

         if( X > 1104
           & FLAG_Modulo_AIR == 1 )  { NO_PushPull = 1 }
      }

      AIR_Componente = ""
      if( FLAG_Modulo_AIR > 0 ) { AIR_Componente = "Contenitore" }

      //Luca 02/03/2022
      if( UN_PADRE("Testiera_L21") )  { VediLimiti_PCV = 0 }

      //Luca 29/03/2022
      GOSUB SetLimiti_Accessorio_Testiera_L21

      //Simone 31/01/2023
      if( VAR_Revisione_Antiribaltamento > 0 ) { VAR_Massello_Elements = 0 }
   }

   PuntiNotevoli
   {
      GOSUB PuntiModuli_368

      //Simone 18/12/2023
      if( FLAG_Modulo_AIR == 1
        & VAR_VAL(ATTUALE(),"in_pcfto") == 1 ) { GOSUB DefPuntiLED_368 }
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368

      //Luca 04/11/2021 solo su testiere, probabilmente sarà da ampliare il blocco per tipologia di testiere e/o dimensioni di 36e8
      if( $query_type == 8 )
      {
         if( $query_p2 == 2 )        { $QueryResult__ = 0 }

         //Luca 07/07/2022
         if( NOME($query_p1) == "LibreriaPentagram_LP22" )
         {
            if( $ATTIVA_DLL == 0 )
            {
               $QueryResult__ = 1
            }
            else
            {
               //per ora blocco sempre
               $QueryResult__ = 0

              #ifdef TEC
               if( Z == 248 & Y == 368 )
               {
                  if( X >= VAR_VAL($query_p1,"X") - 30  & X <= 1104 )
                  {
                     $QueryResult__ = 1
                  }
               }
              #endif
            }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      if( NOME($__lev_ref__) == "LibreriaPentagram_LP22" )
      {
         GOSUB OnSetupLivello_Pentragram_LP22
      }
      else
      {
         GOSUB OnSetupLivelloAccessorio_Testiera_L21
      }
   }

   Attrezza
   {
      if( NOME(@idx_att) == "LibreriaPentagram_LP22" )
      {
         GOSUB AttrezzaSuPentagram_LP22
      }
      else
      {
         GOSUB AttrezzaAccessorio_Testiera_L21
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368

      GOSUB CtrlContenitoreAIR_368

      if( VAR_DivVerticale > 1 )
      {
         DivVert_X    = $M368_Spe_DivLeg19
         if( VAR_DivVerticale == 3 )  { DivVert_X = $M368_Spe_DivLeg38 }

         PosDivVert_X = X/2 - DivVert_X/2

         if( Tipo368 == "368-RIB" )
         {
            if( X == 1104 )  { PosDivVert_X = $M368_Spe_Fia + 330  }

            //Luca 11/11/2020 solo per h > 184
            //Luca 02/11/2020 solo div.sp.38
            //if( X >= 1840 )  { PosDivVert_X = X/2 - DivVert_X/2 - 19/2 }
            //if( Y > 184 & X >= 1840 & VAR_DivVerticale == 3 )  { PosDivVert_X = X/2 - DivVert_X/2 - 19/2 }
            if( Y > 184 & X >= 1472 & VAR_DivVerticale == 3 )  { PosDivVert_X = X/2 - DivVert_X/2 - 19/2 }
         }

         //Luca 12/03/2021
         if( FLAG_Modulo_AIR == 1 )
         {
            GOSUB SetSopraSotto_Lib_AIR
            GOSUB SetVerso_Lib_AIR
            if( Tipo368 == "368-CAS" |  Tipo368 == "368-CES" )
            {
               if( X > 1800 )
               {
                  PosDivVert_X = 717
                  if( PosSporgenzaAIR < 0 ) { PosDivVert_X = 1085 }
               }
            }
         }
      }

      if( VAR_ConfigVani > 1 )
      {
         PosDivVert1_X  = 0   PosDivVert2_X  = 0   PosDivVert3_X  = 0   PosDivVert4_X  = 0   PosDivVert5_X  = 0
         if( VAR_ConfigVani >=2 ) { PosDivVert1_X = VAR_Vano1_X - $M368_Spe_DivLeg38/2 }
         if( VAR_ConfigVani >=3 ) { PosDivVert2_X = VAR_Vano1_X + VAR_Vano2_X - $M368_Spe_DivLeg38/2 }
         if( VAR_ConfigVani >=4 ) { PosDivVert3_X = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X - $M368_Spe_DivLeg38/2 }
         if( VAR_ConfigVani >=5 ) { PosDivVert4_X = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X - $M368_Spe_DivLeg38/2 }
         if( VAR_ConfigVani >=6 ) { PosDivVert5_X = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X + VAR_Vano5_X - $M368_Spe_DivLeg38/2 }
      }

      GOSUB SetTipologia_Cont_AIR
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB Set_Gest_C094_MensolaLib_AIR

      GOSUB Set_Gest_C062_368
      GOSUB Set_Gest_C062_Contenitore_AIR

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

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

      //if( $ATTIVA_DLL == 0 )
      //{
      //   if( $ChangedVar=="VAR_ConfigVani" )
      //   {
      //      if( VAR_ConfigVani > 1 )
      //      {
      //         CHIEDI(ATTUALE(),"VAR_Vano1_X")
      //         CHIEDI(ATTUALE(),"VAR_Vano2_X")
      //      }
      //   }
      //}

      if( $ChangedVar=="VAR_ConfigVani" )
      {
         if( VAR_ConfigVani > 1 )
         {
            CHIEDI(ATTUALE(),"VAR_Vano1_X")
            CHIEDI(ATTUALE(),"VAR_Vano2_X")
         }
         if( VAR_ConfigVani > 2 ) { CHIEDI(ATTUALE(),"VAR_Vano3_X") }
         if( VAR_ConfigVani > 3 ) { CHIEDI(ATTUALE(),"VAR_Vano4_X") }
         if( VAR_ConfigVani > 4 ) { CHIEDI(ATTUALE(),"VAR_Vano5_X") }
         if( VAR_ConfigVani > 5 ) { CHIEDI(ATTUALE(),"VAR_Vano6_X") }
      }

      GOSUB OnChangedVar_PosLib_Air
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB SettaPosizione_368
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //Offset ", NOME(ATTUALE())))

      GOSUB Offset_Modulo_368
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_cancella_368
   }

   Procedura CtrlStatici
   {
      GOSUB CtrlStatici_Lib_AIR
   }

   Procedura OnQueryBdmCollision
   {
      GOSUB BdmCollision_30MM
   }

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

      //Luca 04/11/2021 in caso di attrezzaggio su testiere
      if( $ins2_attrezzato == ins2_att )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //PostGestDllValida ",NOME(ATTUALE())))
      }

      if( FLAG_Modulo_AIR != 1 )  { EXITSUB() }

      GOSUB PostGest_Lib_AIR
   }

   Procedura cancella
   {
      GOSUB Cancella_Modulo_368

      if( in_pcfto == 1 )                      { GOSUB BloccaCancellaComponente  }
      if( UN_PADRE("LibreriaPentagram_LP22") ) { GOSUB BloccaCancellaAttrezzato2 }
   }

   //Posiziona Cuc_GruppoPiedini gp
   Posiziona GruppoPiedini_368 gp
   {
      @escluso = 1 - ConPiedini
      GOSUB Posa_Elemento
      @Y = $M368_Alt_Pie
   }

   Posiziona FerramentaModulo_368 fer
   {
      //LZ 14/01/2022: gestisco ConAttaccaglie in FerramentaModulo_368, dato che questo porta anche altri elementi indispensabili per diversi controlli
      //               (per esempio miniwinch e controlli collisioni giunzioni)
      //@escluso = 1 - ConAttaccaglie

      //Simone 14/03/2022
      @escluso = 0
      if( VAR_Acc_Letto == 1 ) { @escluso = 1 }

      GOSUB posa_fusto_368
   }

   Posiziona FustoModulo_368 fbs
   {
      GOSUB posa_fusto_368
   }

   //Simone 21/06/2022 - Trasformatore per led sottopensile
   Posiziona RigaOrdine_NonGraficato trasf
   {
      @escluso = 1 - Trasformatore_Led

      @base_0 = base_0
      @GEST_CODICE = "CU0625"
      @X = 247
      @Y = 30
      @Z = 17

      @RIGA_ORDINE = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @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 nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 40
      @Z = 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Yt - 20
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 40
      @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 - 20
      @base_0.z = base_0.z + 50
      @X = X - 100
      @Y = 40
      @Z = Z - 110
   }

   //{ INGOMBRI PER COLLISIONI CON STAFFE SUPPORTI VETRO
   // l'ingombro è di 30, ma faccio 29 per gestire la tolleranza di 1mm del near
   Posiziona SVT_ContCollisioni_368 colsx
   //Posiziona _cont_per_near colsx
   //Posiziona Blocco colsx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + ConPiedini*$M368_Alt_Pie
      @base_0.z = base_0.z
      @X = 30 - 1
      @Y = 10
      @Z = Z
      @c_rivestimento = $c_rosso

      @CtrlCol_StaffeSupportoVetro = 1
   }

   Posiziona SVT_ContCollisioni_368 coldx
   //Posiziona _cont_per_near coldx
   //Posiziona Blocco coldx
   {
      @base_0.x = base_3.x - 29
      @base_0.y = base_0.y + ConPiedini*$M368_Alt_Pie
      @base_0.z = base_0.z
      @X = 30 - 1
      @Y = 10
      @Z = Z
      @c_rivestimento = $c_rosso

      @CtrlCol_StaffeSupportoVetro = 1
   }
   //} INGOMBRI PER COLLISIONI CON STAFFE SUPPORTI VETRO
}

Elemento ModuloGlass_368
{
   Descrizione = "Modulo 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Pensile;Offset
   Alias       Pensile;StampaXG;CtrlAllineamento368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1
      Tipo368            "" "368-GLS"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"          368 Menu ( LargP368 )

      Y       "Altezza"            184 Menu ( AltP368 )

      Z       "Profondità"         180 Menu ( ProfP368 )

      ConRipiano  "" 0

      ConAttaccaglie  "" 0

      //LASCIO PER COMPATIBILITA' PROCEDURE
      ConPiedini      "" 0
      ConBifacciale   "" 0
      ConPushPull     "" 0

      VAR_FixMuro       "Fissato a muro"      1
      VAR_FixTerra      "Solo a terra"        0

      VAR_GlassL_ConScasso  "Con Scasso"          0 Menu ( SiNo )
      GlassL_Scasso_Pos     "Pos.Scasso"    "SX-AL" Utente ( )
      GlassL_Scasso_X       ""                  184
      GlassL_Scasso_Y       ""                  184

      //Simone 09/02/2023
      VAR_Glass_SUV   "Glass SUV"  0  Boolean

      //gestione pannello per LED
      //PannelloRetroLED  "" 0

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia "" "GLASS"

      LED_Sopra          ""  0
      LED_Sotto          ""  0

      TLED_Attiva          "" 0 SaveAlways
      TLED_Tipologia       "" 1 SaveAlways
      TLED_Watt            "" 0

      TLED_Lavorazione     "" 0 SaveAlways
      TLED_TipoLavorazione "" 0 SaveAlways


      FLAG_Orizzontale  "" 0
      FLAG_Verticale    "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      COD_EREDITA      ""      "PRE;POST"
      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

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

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      FLAG_Orizzontale = 0
      FLAG_Verticale   = 1
      if( X > 736
        & Y < 552 )
      {
         FLAG_Orizzontale = 1
         FLAG_Verticale   = 0
      }

      if( FLAG_Verticale == 1 )
      {
         ConRipiano = 0
         //Simone 13/02/2023 - Nuova altezza di gamma H.552
         if( Y == 552
           | Y == 736  )  { ConRipiano = 1 }
         if( Y == 1104 )  { ConRipiano = 2 }
      }

      //Simone 09/02/2023
      if( VAR_Glass_SUV == 1 )
      {
         ConRipiano = 1
         VAR_GlassL_ConScasso = 1
         //Simone 24/05/2023 - Modifica necessaria per far tornare la dimensione corretta delle schiene di finitura
         //GlassL_Scasso_Y = 368
         GlassL_Scasso_Y = 367
         GlassL_Scasso_X = X - 552
      }

      if( $ATTIVA_DLL==1 & ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_GlassL_ConScasso",1)
         HIDE_ON_EDIT2(ATTUALE(),"GlassL_Scasso_Pos",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Glass_SUV",1)
      }

      //da limitare con action = 2 quando ci saranno i composti
      if( VAR_GlassL_ConScasso==1 ) { ALIAS_ADD( ATTUALE() , "NoCollision2" ) }
   }

   PuntiNotevoli
   {
      GOSUB PuntiModuli_368

      pnt_scs_l = [GlassL_Scasso_X,GlassL_Scasso_Y,0]
      if( GlassL_Scasso_Pos == "DX-BA" ) { pnt_scs_l = [ X- GlassL_Scasso_X , GlassL_Scasso_Y , 0] }
      if( GlassL_Scasso_Pos == "SX-AL" ) { pnt_scs_l = [ GlassL_Scasso_X   ,Y - GlassL_Scasso_Y,0] }
      if( GlassL_Scasso_Pos == "DX-AL" ) { pnt_scs_l = [ X- GlassL_Scasso_X,Y - GlassL_Scasso_Y,0] }

      GOSUB DefPuntiLED_368

      STP_Bollina_Pnt = [X/2 , Y/2 - 56.5 , Z/2]
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368

      GOSUB CtrlPresenza_LED_368

      //Luca 25/01/2021
      GOSUB TLED_CalcolaTrasformatore_368
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB Offset_Modulo_Glass_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   //Posiziona FerramentaModulo_368 fer
   //{
   //   GOSUB posa_fusto_368
   //}

   Posiziona FustoModuloGlass_368 fbs
   {
      GOSUB posa_fusto_368
   }

   Posiziona _cont_per_near_2 nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

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

   Posiziona _cont_per_near_2 ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 2
      @Y = Y - 10
      @Z = Z - 10

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

   Posiziona _cont_per_near_2 nrt
   {
      idx_cnear_rt = ATTUALE()

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

      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - @Z/2
   }

   Posiziona _cont_per_near_2 nup
   {
      idx_cnear_up = ATTUALE()

      @X = X - 100
      @Y = 20
      @Z = Z - 100

      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near_2 ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = X - 100
      @Y = 20
      @Z = Z - 100

      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 5
   }

   Posiziona _cont_per_near_2 nscs
   {
      idx_cnear_scs = ATTUALE()

      @X = 50
      @Y = 50
      @Z = Z - 20

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

      if( GlassL_Scasso_Pos=="SX-AL"
        | GlassL_Scasso_Pos=="DX-AL" ) { @base_0.y = base_0.y + Y - 25 }

      if( GlassL_Scasso_Pos=="DX-AL"
        | GlassL_Scasso_Pos=="DX-BA" ) { @base_0.x = base_0.x + X - 25 }
   }

   //Luca 25/01/2021
   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   //Luca 25/01/2021
   Posiziona TrasformatoreLED_368 Trasd
   {
      GOSUB posa_trasformatore_368
   }
}

//LZ 26/07/2021: 36e8 sideboard
Elemento ModuloGlass_368Sideboard
{
   Descrizione = "Modulo 368 Sideboard"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Stp_ModuloGlass;Pensile;StampaXG;CtrlAllineamento368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"          368 Menu ( LargP368 )
      Y       "Altezza"            184 Menu ( AltP368 )
      Z       "Profondità"         180 Menu ( ProfP368 )

      FLAG_CompostoGEN  "Mod. composto GENERICO" 0 Boolean

      FLAG_Moduli_368   ""  1
      Tipo368           "" "368-GLS"

      FLAG_Orizzontale  "" 0
      FLAG_Verticale    "" 0
      ConRipiano        "" 0

      VAR_FixMuro       "Fissato a muro"      0
      VAR_FixTerra      "Solo a terra"        0
      VAR_SostegnoOmega "Su sostegno omega"   0

      VAR_ConSchiena    "Presenza schiena"    1 Boolean

      VAR_368Vicini     "Numero contenitori adiacenti" 0

      ConPiedini        "" 1

      //LASCIO PER COMPATIBILITA' PROCEDURE
      ConBifacciale     "" 0
      ConPushPull       "" 0

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

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

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

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

      M4_MIS "" "X;Y;Z"

      FillerM2G            " " "" ShowAlways

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

      //LZ 07/09/2021: vt per omega e moduli su omega
      VT_NRFIXOMG "Omega - Numero viti fissaggio"            0
      VT_NRREGPL  "Omega - Numero grani regolazione"         0
      VT_NRGMB    "Omega - Numero gambe per modulo"          0

      VT_NRVITI   "Numero giunzioni glass/368"               0
      VT_GMW      "Numero giunzioni glass/368 con miniwinch" 0

      perRADICE   ""  ""
      RADICE      ""  ""

      XGLASS      "Num. XGLASS" "" Utente ( )

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      //LZ 09/09/2021
      GOSUB DefPuntiLED_368

      FLAG_Orizzontale = 0
      FLAG_Verticale   = 1
      if( X > Y )
      {
         FLAG_Orizzontale = 1
         FLAG_Verticale   = 0
      }

      if( FLAG_Verticale == 1 )
      {
         if( Y >= 552  ) { ConRipiano = 1 }
         if( Y >= 920 )  { ConRipiano = 2 }
      }

      if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",1)

         if( FLAG_CompostoGEN == 0 )
         {
           VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
           VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1

           CtrlRangeRidM2G(ATTUALE(),"X")
           CtrlRangeRidM2G(ATTUALE(),"Y")
         }

         if( FLAG_CompostoGEN == 1 )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB PuntiModuli_368

      //Scritta fronte:
      pnt_stp_fronte.x = base_1.x + X/2
      pnt_stp_fronte.y = base_1.y + Y
      pnt_stp_fronte.z = base_1.z - $Yscr - 10

      STP_Bollina_Pnt = [X/2 , Y/2 - 56.5 , Z/2]

      STP_XG_PSCR = [X/2 , Yt + 5 , Z/2]
      STP_XG_Point = 3
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368

      GOSUB Set_Vt_SuppOmega

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_c368", ATTUALE(), 1, "Modulo_368" )
      NEAR_GLOBALE2( "wk_c368g", ATTUALE(), 1, "ModuloGiorno_368" )

      VAR_368Vicini = wk_c368 + wk_c368g
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""
         RADICE = "GL36E8S"
      }

      GOSUB CAMBIA_VAR

      GOSUB Set_Gest_C008_ModuloGlass_368Sideboard
      GOSUB Set_Gest_C062_ModuloGlass_368Sideboard
      GOSUB Set_Gest_C090_ModuloGlass_368Sideboard

      GOSUB ContaGiunzioni_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368

      if( TABER_REGOLA == "PRE" )
      {
         GOSUB Set_Gest_C062_ModuloGlass_368Sideboard
      }
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB SettaPosizione_368
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //Offset ", NOME(ATTUALE())))

      GOSUB Offset_Modulo_368
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
      GOSUB Cuc_cancella_std2
   }

   Posiziona GruppoPiedini_368 gp
   {
      @escluso = 1 - ConPiedini

      GOSUB Posa_Elemento

      @Y = $M368_Alt_Pie
   }

   Posiziona FustoModuloGlass_368 fbs
   {
      GOSUB posa_fusto_368

      @FLAG_Madia368 = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @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 nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 40
      @Z = 10
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + Y - 20 + $M368_Alt_Pie * ConPiedini
      @base_0.z = base_0.z + 5
      @X = X - 100
      @Y = 20
      @Z = Z - 100
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + $M368_Alt_Pie * ConPiedini
      @base_0.z = base_0.z + 5
      @X = X - 100
      @Y = 20
      @Z = Z - 100
   }

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368SX
   {
      GOSUB G368_PosaGrLavorazione

      @X = Spe_Vtr_Glass
      @Y = Y - 2*$M368_Rie_Pan

      @base_0.y = base_0.y + $M368_Rie_Pan
      if( ConPiedini == 1 ) { @base_0.y = base_0.y + $M368_Alt_Pie + $M368_Rie_Pan }

      @Lato = "SX"
   }

   Posiziona G368_GruppoLavorazione G368DX
   {
      GOSUB G368_PosaGrLavorazione

      @X = Spe_Vtr_Glass
      @Y = Y - 2*$M368_Rie_Pan

      @base_0.x = base_3.x - @X
      @base_0.y = base_3.y + $M368_Rie_Pan
      if( ConPiedini == 1 ) { @base_0.y = base_3.y + $M368_Alt_Pie + $M368_Rie_Pan }

      @Lato = "DX"
   }

   Posiziona G368_GruppoLavorazione G368UP
   {
      GOSUB G368_PosaGrLavorazione

      @X = X - 2*$M368_Rie_Pan
      @Y = Spe_Vtr_Glass

      @base_0.x = alto_0.x + $M368_Rie_Pan
      @base_0.y = alto_0.y - @Y

      @Lato = "UP"
   }

   Posiziona G368_GruppoLavorazione G368DW
   {
      GOSUB G368_PosaGrLavorazione

      @X = X - 2*$M368_Rie_Pan
      @Y = Spe_Vtr_Glass

      @base_0.x = base_0.x + $M368_Rie_Pan

      @Lato = "DW"
   }
   #endif
}

Elemento ModuloMadiaGlass_368
{
   Descrizione = "Modulo 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile;NoCollision;StampaXG;CtrlAllineamento368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1
      Tipo368            "" "368-GLS"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"          920 Menu ( LarMGl_368 )

      Y       "Altezza"            368  ShowAlways

      Z       "Profondità"         240  ShowAlways

      //Luca 21/02/2022
      ModuloMadiaGlass_368 "" 1

      ConRipiano      "" 0
      ConAttaccaglie  "" 0

      //LASCIO PER COMPATIBILITA' PROCEDURE
      ConPiedini      "" 0
      ConBifacciale   "" 0
      ConPushPull     "" 0

      VAR_FixMuro       "Fissato a muro"      0
      VAR_FixTerra      "Solo a terra"        0

      VAR_GlassL_ConScasso  "Con Scasso"          1
      GlassL_Scasso_Pos     "Pos.Scasso"    "SX-AL" Utente ( )
      GlassL_Scasso_X       ""                  184
      GlassL_Scasso_Y       ""                  184

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

      //gestione pannello per LED
      //PannelloRetroLED  "" 0

      FLAG_Orizzontale  "" 0
      FLAG_Verticale    "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

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

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

      M4_MIS "" "X;Y;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      GlassL_Scasso_X  = X - 184
      GlassL_Scasso_Y  = 230.5

      if( $ATTIVA_DLL==1 & ACTION()==0 ) { HIDE_ON_EDIT2(ATTUALE(),"GlassL_Scasso_Pos",1) }
   }

   PuntiNotevoli
   {
      GOSUB PuntiModuli_368

      pnt_scs_l = [GlassL_Scasso_X,GlassL_Scasso_Y,0]
      if( GlassL_Scasso_Pos == "DX-BA" ) { pnt_scs_l = [ X- GlassL_Scasso_X , GlassL_Scasso_Y , 0] }
      if( GlassL_Scasso_Pos == "SX-AL" ) { pnt_scs_l = [ GlassL_Scasso_X   ,Y - GlassL_Scasso_Y,0] }
      if( GlassL_Scasso_Pos == "DX-AL" ) { pnt_scs_l = [ X- GlassL_Scasso_X,Y - GlassL_Scasso_Y,0] }
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368

      //Luca 21/02/2022
      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder== 0 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE2("wk_mod_tmp",idx_cnear_scs,5,"Mod*368")

         idx_mod_ref = -1

         i = 1
         while ( i<= wk_mod_tmp )
         {
            if( wk_mod_tmp[i] != ATTUALE() ) { idx_mod_ref = wk_mod_tmp[i] }
            i = i + 1
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB Offset_Modulo_Glass_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   //Posiziona FerramentaModulo_368 fer
   //{
   //   GOSUB posa_fusto_368
   //}

   Posiziona FustoModuloGlass_368 fbs
   {
      GOSUB posa_fusto_368

      @FLAG_MadiaGlass = 1
   }

   Posiziona StaffaMadiaGlass_368 sv
   {
      @OrieStaffa = 1

      @Y = 150

      @base_0.x = base_0.x + GlassL_Scasso_X - 20
      if( IS_MATCH( GlassL_Scasso_Pos , "DX*" )  ) { @base_0.x = base_0.x + X - GlassL_Scasso_X - 19 }
      @base_0.y = base_0.y + 40.5
      if( IS_MATCH( GlassL_Scasso_Pos , "*AL" )  ) { @base_0.y = base_0.y + Y - 40.5 - @Y }
      @base_0.z = base_0.z - @Z
   }

   Posiziona StaffaMadiaGlass_368 so
   {
      @OrieStaffa = 1

      @X = 600
      if( X > 1104 ) { @X = 900 }

      offx = 68.5
      if( X == 1104 ) { offx = 160.5  }
      if( X == 1288 ) { offx = 102.5  }
      if( X == 1472 ) { offx = 194.5  }

      @base_0.x = base_0.x + offx
      if( IS_MATCH( GlassL_Scasso_Pos , "DX*" )  ) { @base_0.x = base_0.x + X -  offx - @X }
      @base_0.y = base_0.y + GlassL_Scasso_Y - 38
      if( IS_MATCH( GlassL_Scasso_Pos , "*AL" )  ) { @base_0.y = base_0.y + Y - GlassL_Scasso_Y - 20 }
      @base_0.z = base_0.z - @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
   }

   Posiziona _cont_per_near nrt
   {
      idx_cnear_rt = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 40
      @Z = 10
   }

   Posiziona _cont_per_near nscs
   //Posiziona Blocco nscs
   {
      idx_cnear_scs = ATTUALE()
      @base_0.x = base_0.x + 100

      if( IS_MATCH( GlassL_Scasso_Pos , "SX*" )  ) { @base_0.x = base_0.x + GlassL_Scasso_X - 50 - @X }

      @base_0.y = base_0.y - 10

      if( IS_MATCH( GlassL_Scasso_Pos , "*AL" )  ) { @base_0.y = base_0.y + Y - GlassL_Scasso_Y  }

      @base_0.z = base_0.z + 10
      @X = 500
      @Y = GlassL_Scasso_Y + 10
      @Z = Z - 20
   }
}

Elemento ModuloPensile_368
{
   Descrizione = "Pensile 368"
   Code        = CUC
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

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

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"   1

      X                        "Larghezza"                                  368   Menu      (   LargP368   )   Utente   (   )
      Y                        "Altezza"                                    184   Menu      (   AltP368    )   Utente   (   )
      Z                        "Profondita' fianco"                         180   Menu      (   ProfP368   )   Utente   (   )
      Zt                       "(Profondità)"                               406   ShowAlways

      Verso                    "verso della scocca"                         -1

      Var_Anta_Apertura        "Anta - Apertura"                            -1 // Default deve essere non valido
      Var_Anta_Apertura_Dsc    "Anta - Apertura"                            ""

      Var_Anta_Opzione         "Anta - Opzioni"                             -1 // Default deve essere non valido
      Var_Anta_Opzione_Dsc     "Anta - Opzioni"                             ""

      FLAG_Sovrapposto         ""                                           0

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

      idx_fusto                ""                                           -1
      idx_cnear_sx             ""                                           -1
      idx_cnear_dx             ""                                           -1
      idx_cnear_dw             ""                                           -1

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

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

      M4_VAR                   ""                                           "X;Y;Z"

      FillerM2G                " "                                          ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      Var_Anta_Apertura_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Apertura", Var_Anta_Apertura)
      Var_Anta_Opzione_Dsc = VAL_MENU( "Cucina_2_5_Pensile_Anta_Opzione", Var_Anta_Opzione)

      if( $ATTIVA_DLL & ACTION() == 0) {
         HIDE_ON_EDIT(ATTUALE(),"X;Y;Z;Zt",1)
      }
   }

   PuntiNotevoli
   {
      GOSUB DimPensili
      GOSUB DefVanoPensili
      GOSUB DefPuntiStampa
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368

      GOSUB OnQueryBdm_Pensili_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPensili

      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoModulo_368 fbs
   {
      GOSUB posa_blocco

      idx_fusto = ATTUALE()
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = alto_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 = alto_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

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

//Luca 27/03/2020
Elemento ModuloTampPensile_368
{
   Descrizione = "Tamponamento pensile 368"
   Code        = CUC
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 15/12/2021: fixato su composto o se VAR_Melaminico
      //         rev1: gestione anta in grafica, per cucine melaminiche
      VAR_Revisione      "Revisione"   0 SaveAlways

      //identifico elementi 368 living
      FLAG_Moduli_368    "Modulo 368"  0 Boolean

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"           200 Utente ( 50-367 )
      Y       "Altezza"             184 Menu ( AltP368 )  Utente ( 184-920 ) SaveAlways
      Z       "Profondita' fianco"  384 Utente ( 100-470 ) SaveAlways
      Zt      "(Profondità)"        406 ShowAlways

      Verso         "verso della scocca"    -1 SaveAlways

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

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

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

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

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

      XGLASS      "Num. XGLASS" "" Utente ( )

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB CucP_AssRangeRid
      GOSUB CucP_Assegnazioni

      if( IS_VAR_FIXED( ATTUALE(), "VAR_Revisione") == 0 )
      {
         VAR_Revisione = 0
         if( VAR_Melaminico == 1 ) { VAR_Revisione = 1 }
      }

      Spe_Fia = 19
      Spe_Pan = 30

      FIN_str = "C032"

      //Luca 09/10/2020
      if( ACTION() == 0 & $ATTIVA_DLL == 1 ) { HIDE_ON_EDIT2(ATTUALE(),"FLAG_Moduli_368",1) }

      if( $OnLoadOrder != 1
        & $ATTIVA_DLL == 1
        & ACTION() > 0)
      {
         VarDimZ = "Z"   ValDeltaZ = -22   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1

         CtrlRangeRidM2G(ATTUALE(),"Z")

         if( VAR_EXIST(ATTUALE(),"CR_Z_min")
           & VAR_EXIST(ATTUALE(),"CR_Z_max")
           & VAR_MODE(ATTUALE(),"Z") == $MODE_USER )
         {
            wk_new_menu = STRCAT( "( ", STR(CR_Z_min), "-", STR(CR_Z_max), " )")
            VAR_SET_MENU( ATTUALE(), "Z", wk_new_menu)
         }

         // Blocco l'altezza come a listino
         // Ale R. - altezze superiori sono realizzabili se la larghezza è 100-150 mm
         #ifndef TEC
         if( FLAG_Moduli_368 == 1 )
         {
            VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1

            CtrlRangeRidM2G(ATTUALE(),"Y")

            if( VAR_EXIST(ATTUALE(),"CR_Y_min")
            & VAR_EXIST(ATTUALE(),"CR_Y_max")
            & VAR_MODE(ATTUALE(),"Y") == $MODE_USER )
            {
               wk_new_menu = STRCAT( "( ", STR(CR_Y_min), "-", STR(CR_Y_max), " )")
               VAR_SET_MENU( ATTUALE(), "Y", wk_new_menu)
            }
         }
         #endif
      }
   }

   PuntiNotevoli
   {
      GOSUB DimPensili
      //GOSUB DefVanoPensili
      GOSUB DefPuntiStampa
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368

      if( $query_type==1 )
      {
         idx_agg = -1
         if( $M4_DragInfo_Mode==0 )
         {
            if( IS_MATCH(NOME($M4_DragInfo_Ref),"Modu*368")==1 )
            {
               Y = VAR_VAL($M4_DragInfo_Ref,"Y")
               Z = VAR_VAL($M4_DragInfo_Ref,"Z")
               Verso = -1
               if( $M4_DragInfo_SxDx>0 )  { Verso = 1 }
            }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPensili

      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

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

   Posiziona Blocco fia
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Spe_Pan
      @X = Spe_Fia
      @Y = Y - 2*Spe_Pan

      if( Verso<0 ) { @base_0.x = base_0.x + X - @X }
      FIN_var = FIN_str
      GOSUB rivestimento
   }

   Posiziona Blocco fnd
   {
      GOSUB posa_blocco
      @Y = Spe_Pan
      FIN_var = FIN_str
      GOSUB rivestimento
   }

   Posiziona Blocco cop
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - Spe_Pan
      @Y = Spe_Pan
      FIN_var = FIN_str
      GOSUB rivestimento
   }

   Posiziona Blocco panfro
   {
      @base_0.x = base_0.x
      @base_0.z = base_0.z + Z - Spe_Pan
      @base_0.y = base_0.y + Spe_Pan
      if( Verso>0 ) { @base_0.x = base_0.x + Spe_Fia }

      @X = X - Spe_Fia
      @Y = Y - 2*Spe_Pan
      @Z = Spe_Pan
      FIN_var = FIN_str
      GOSUB rivestimento
   }

   Posiziona FroStandard368 fro
   {
      //LZ 15/12/2021: rev 1, anta grafica
      @escluso = SE_NUM( VAR_Revisione > 0, 1, 0)

      @base_0.x = base_0.x + $M368_Aria_Ant_X
      @base_0.y = base_0.y + $M368_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $M368_Aria_Ant_Z

      @X = X - 2*$M368_Aria_Ant_X
      @Y = Y - 2*$M368_Aria_Ant_Y
      @Z = $M368_Spe_Ant
   }

   //LZ 15/12/2021: rev 1, anta grafica
   Posiziona AntaSingola_368 fr
   {
      @escluso = SE_NUM( VAR_Revisione > 0, 0, 1)

      @X = X - 2*$M368_Aria_Ant_X
      @Y = Y - 2*$M368_Aria_Ant_Y
      @Z = $Cuc_Spe_Ant

      @base_0.x = base_0.x + $M368_Aria_Ant_X
      @base_0.y = base_0.y + $M368_Aria_Ant_Y
      @base_0.z = base_0.z + Z + $M368_Aria_Ant_Z

      @inserito = 1
      @Verso = 0
      @AntaInCoppia  = 0
      @Apertura = "FX"

      //Nascondo per evitare modifica diretta e sostituzione (Gemo esclude categorie in base al padre)
      //@HIDE = 1
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = alto_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 = alto_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }
}

Elemento ModuloPensileScPiatti_368
{
   Descrizione = "Pensile Scolapiatti"
   Code        = CUC
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      //LZ 23/11/2021: revisione pensile scolapiatti
      VAR_Revisione_PenScp ""                           0  SaveAlways

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

      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"           600 Menu ( LargP368 ) Utente ( )
      Y       "Altezza"             368 Menu ( AltP368 )  Utente ( )
      Z       "Profondita' fianco"  384 Menu ( ProfP368 ) Utente ( )
      Zt      "(Profondità)"          406 ShowAlways

      TipoRipiano "Tipo ripiano"  1

      Verso         "verso della scocca"    -1

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

      FLAG_Sovrapposto  "" 0

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


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

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

      M4_VAR "" "X;Y;Z;Zt"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 23/11/2021: revisione pensile scolapiatti
      VAR_Revisione_PenScp = 0
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_Pen_Scp", "VAR_Revisione_PenScp")

      if( VAR_Revisione_PenScp == 0 )
      {
         if( VAR_Melaminico > 0) { VAR_Revisione_PenScp = 1 }

         //LZ 13/09/2022: la revisione era stata gestita alla perfezione, ma è rimasta in sospeso per un anno e come ogni volta gli acquisti rovinano tutto.
         //               Abbiamo infatti terminato il materiale per produrre i pensili scolapiatti con il 45°, utilizzo rev 1 per revistione da data, rev 2 per revisione massiva.
         wk_datains = DATA(0)
         wk_datains = ATOI( LEFT( wk_datains, 6))

         if( wk_datains >= $BDM_REV_Cuc_Pen_Scp_1 ) { VAR_Revisione_PenScp = 2 }
      }

      VAR_OffY_Div   = 0
      if( VAR_Revisione_PenScp > 0 )
      {
         if( Y >= 920 ) { VAR_OffY_Div = Y - $M368_Spe_Fnd - 368 }
      }

      if( $ATTIVA_DLL & 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_EDIT(ATTUALE(),"X;Y;Z;Zt",1)
      }
   }

   PuntiNotevoli
   {
      GOSUB DimPensili
      GOSUB DefVanoPensili
      GOSUB DefPuntiStampa
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368

      //TODO-- se agganciato a basi, filo alto
      GOSUB OnQueryBdm_Pensili_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPensili

      GOSUB Set_MaterialeFrontale_Ante

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoModulo_368 fbs
   {
      GOSUB posa_blocco
      @VAR_ScolaPiatti = 1
   }

   Posiziona __import__ bl
   {
      @escluso = 0
      if( VAR_Revisione_PenScp > 0 ) { @escluso = 1 }

      GOSUB Posa_Elemento
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y + 35
      @base_0.z = base_0.z + 30
      @import = STRCAT($path_sat,"Cucina\Scolapiatti\Scolapiatti_",STR(X),".sat")
   }

   Posiziona Scolapiatti scp
   {
      @escluso = 1
      if( VAR_Revisione_PenScp > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @X = X - 2*$M368_Spe_Fia
      if( VAR_OffY_Div > 0 ) { @Y = VAR_OffY_Div + $M368_Spe_DivLeg19 }
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = alto_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 = alto_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

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

Elemento ModuloPensileCappa_368
{
   Descrizione = "Pensile Cappa"
   Code        = CUC
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile;OnChangedVar

   Variabili
   {
      //LZ 26/11/2021: revisione pensile cappa
      VAR_Revisione_PenCpp     ""                                           0     SaveAlways

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

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

      genera_disegno_collo__   "Variabile per la gestione delle bindelle"   1

      ELD_TIPO_ELDOM           ""                                           "CAPPA"

      X                        "(Larghezza)"                                600   Menu      (   LargP368   )   Utente   (   )
      Y                        "(Altezza)"                                  368   Menu      (   AltP368    )   Utente   (   )
      Z                        "(Profondità fianco)"                        384   Menu      (   ProfP368   )   Utente   (   )
      Zt                       "(Profondità)"                               406   ShowAlways

      Filler2                  " "                                          ""    ShowAlways

      //0 cappa standard
      //1 cappa cliente
      //2 cappa slitta
      TipoPenCappa             ""                                           0
      TipoPenCappaStr          ""                                           ""
      Cmp_TipoPenCappa         ""                                           -1

      TipoRipiano              "Tipo ripiano"                               1

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

      FLAG_Fianco45            ""                                           1

      //Luca 23/04/2020
      VAR_LarScasso            "Larghezza scasso fondo"                     600   Utente    (   )
      VAR_PrfScasso            "Profondità scasso fondo"                    600   Utente    (   )

      //Luca 03/06/2020
      VAR_ConScassoCop         "Presenza scasso coperchio"                  1     Menu      (   SiNo       )
      VAR_PosX_ScassoCop       "Posizione larghezza scasso (centro)"        500   Utente    (   )
      VAR_PosZ_ScassoCop       "Posizione profondità scasso (centro)"       100   Utente    (   )
      VAR_DiamScasso           "Diametro scasso coperchio"                  155   Utente    (   )
      //Simone 03/12/21
      VAR_ConScassoSch         "Presenza scasso schiena"                    0     Menu      (   SiNo       )
      VAR_PosX_ScassoSch       "Posizione larghezza scasso (centro)"        105
      VAR_PosY_ScassoSch       "Posizione altezza scasso (centro)"          285
      VAR_DiamScassoSch        "Diametro scasso piccolo schiena"            60

      //1 sotto
      //2 sopra
      Posizione_ScassoSch      "Scasso sulla schiena"                       2     Menu      (   PosFar2    )
      Posizione1_Scasso        "Posizione scasso schiena BASSO"             480
      Posizione2_Scasso        "Posizione scasso schiena ALTO"              120

      //Ripiano/divisorio
      Rip_1                    "Ripiano - 1"                                0
      Rip_2                    "Ripiano - 2"                                0

      Rip_Vano1_DimY           "Ripiano - Vano - Altezza"                   349
      Rip_Vano3_DimY           "Ripiano - Vano - Altezza"                   349
      Rip_Vano2_Var_DimY       "Ripiano - Vano - Altezza"                   0

      Rip_Scs_Var_PosX         "Ripiano - Scasso - Posizione in X"          500
      Rip_Scs_Var_PosZ         "Ripiano - Scasso - Posizione in Z"          100

      RigeneraScasso           "Rigenera Scasso"                            0     Boolean

      Verso                    "verso della scocca"                         -1
      // Menu ( DXSX )

      idx_cnear_sx             ""                                           -1
      idx_cnear_dx             ""                                           -1

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

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

      M4_MIS                   ""                                           "X;Y;Z;FillerM2G;VAR*;Posizione*;Filler2"
      //M4_VAR "" "X;Y;Z;Zt;VAR*"

      FillerM2G                " "                                          ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      //LZ 26/11/2021: revisione pensile cappa
      VAR_Revisione_PenCpp = 0
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Cuc_Pen_Cpp", "VAR_Revisione_PenCpp")
      if( VAR_Melaminico > 0
        & VAR_Revisione_PenCpp == 0 ) { VAR_Revisione_PenCpp = 1 }

      // Modello
      /// Modello composto, cucine 2.5 merda
      if( ACTION() == 0)
      {
         Cmp_TipoPenCappa = TipoPenCappa
         if( TipoPenCappa == 0
           & Cucina_Versione > 2) { TipoPenCappa = 2 }
      }

      TipoPenCappaStr = "STANDARD"
      if( TipoPenCappa == 1) { TipoPenCappaStr = "CLIENTE" }
      if( TipoPenCappa == 2) { TipoPenCappaStr = "SLITTA"  }

      // Fianco 45 gradi
      FLAG_Fianco45 = 1
      if( TipoPenCappa == 2)   { FLAG_Fianco45 = 0 }
      if( TipoPenCappa != 1
        & Cucina_Versione > 2) { FLAG_Fianco45 = 0 }

      if( $ATTIVA_DLL & 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_EDIT(ATTUALE(),"VAR_*;Posizione*;Filler2",1)

         //cappa cliente possibilità di editare entrambi gli scassi
         if( TipoPenCappaStr == "CLIENTE" )
         {
            wk_offX = 120
            wk_offY = 80
           #ifdef TEC
            wk_offX = 100
            wk_offY = 80
           #endif

            VAR_SET_MENU(ATTUALE(),"VAR_LarScasso",STRCAT("( 100-",STR(X-wk_offX)," )"))
            VAR_SET_MENU(ATTUALE(),"VAR_PrfScasso",STRCAT("( 100-",STR(Z-wk_offY)," )"))
            VAR_LarScasso = X - 120
            VAR_PrfScasso = Z - 80

            wk_diam_max_x = X - 29 - 29
            wk_diam_max_z = Z - 36.75 - 12

            wk_diam_max = wk_diam_max_x
            if( wk_diam_max_z<wk_diam_max_x ) { wk_diam_max = wk_diam_max_z }

            //Luca 17/07/2020 'Re: Revisione pensili cappa cliente' mail 16/07
            if( Y==552  ) { wk_diam_max = 200  }

            VAR_SET_MENU(ATTUALE(),"VAR_DiamScasso",STRCAT("( 100-",STR(wk_diam_max)," )"))

            HIDE_ON_EDIT(ATTUALE(),"VAR_PrfScasso;VAR_LarScasso;VAR_DiamScasso;Filler2",0)
         }

         //cappa slitta
         if( TipoPenCappaStr == "SLITTA" )
         {
            wk_diam_max_x = X - 29 - 29
            wk_diam_max_z = Z - 55 - 12

            wk_diam_max = wk_diam_max_x
            if( wk_diam_max_z<wk_diam_max_x ) { wk_diam_max = wk_diam_max_z }

            if( Y==552  ) { wk_diam_max = 180 }

            VAR_SET_MENU(ATTUALE(),"VAR_DiamScasso",STRCAT("( 100-",STR(wk_diam_max)," )"))
         }

         //Simone 06/12/21
         HIDE_ON_EDIT(ATTUALE(),"VAR_ConScassoCop;Filler2",0)
         if( Y > 552 ) { HIDE_ON_EDIT(ATTUALE(),"VAR_ConScassoSch;VAR_ConScassoCop;Filler2",0) }
      }

      //Divisorio/Ripiano
      if( IS_VAR_FIXED( ATTUALE(), "Rip_1" ) == 0 ) { Rip_1 = SE_NUM( Y > 552, 1, 0 ) }
      if( IS_VAR_FIXED( ATTUALE(), "Rip_2" ) == 0 ) { Rip_2 = SE_NUM( Y > 736, 1, 0 ) }

      Rip_Vano2_Var_DimY = Y - Rip_Vano1_DimY - $M368_Spe_Cop - $M368_Spe_DivLeg19 - ( Rip_Vano3_DimY + $M368_Spe_DivLeg19 )*Rip_2

      //Luca 17/07/2020
      if( TipoPenCappaStr == "CLIENTE" )
      {
         wk_pos_x_min = 29 + VAR_DiamScasso/2
         wk_pos_x_max = X - wk_pos_x_min

         wk_pos_z_min = 36.75 + VAR_DiamScasso/2
         wk_pos_z_max = Z - 12 - VAR_DiamScasso/2

         HIDE_ON_EDIT(ATTUALE(),"VAR_DiamScasso;VAR_PosX_ScassoCop;VAR_PosZ_ScassoCop",SE_NUM(VAR_ConScassoCop==1,0,1))

         VAR_SET_MENU(ATTUALE(),"VAR_PosX_ScassoCop",STRCAT("(  ",STR(wk_pos_x_min),"-",STR(wk_pos_x_max)," )"))
         VAR_SET_MENU(ATTUALE(),"VAR_PosZ_ScassoCop",STRCAT("(  ",STR(wk_pos_z_min),"-",STR(wk_pos_z_max)," )"))

         if( Y==552 )
         {
            VAR_PosZ_ScassoCop = 133
            VAR_SET_MODE(ATTUALE(),"VAR_PosZ_ScassoCop",$MODE_SHOWALWAYS)
         }
      }

      //Luca 03/06/2020 non solo per action==0
      if( TipoPenCappaStr == "SLITTA" )
      //if( TipoPenCappa==2 )
      {
         HIDE_ON_EDIT(ATTUALE(),"VAR_DiamScasso;VAR_ConScassoCop;Filler2",0)

         wk_pos_x_min = 29 + VAR_DiamScasso/2
         wk_pos_x_max = X - wk_pos_x_min

         wk_pos_z_min = 55 + VAR_DiamScasso/2
         //Simone 03/12/21 - Limite diverso in presenza di divisorio
         if( Rip_1 > 0 | Rip_2 > 0 )  { wk_pos_z_min = 66 + VAR_DiamScasso/2 }

         wk_pos_z_max = Z - 12 - VAR_DiamScasso/2

         HIDE_ON_EDIT(ATTUALE(),"VAR_DiamScasso;VAR_PosX_ScassoCop;VAR_PosZ_ScassoCop",SE_NUM(VAR_ConScassoCop==1,0,1))

         VAR_SET_MENU(ATTUALE(),"VAR_PosX_ScassoCop",STRCAT("(  ",STR(wk_pos_x_min),"-",STR(wk_pos_x_max)," )"))
         VAR_SET_MENU(ATTUALE(),"VAR_PosZ_ScassoCop",STRCAT("(  ",STR(wk_pos_z_min),"-",STR(wk_pos_z_max)," )"))

         if( Y==552 )
         {
            VAR_PosZ_ScassoCop = 148
            //LZ 26/11/2021
            //if( VAR_Revisione_PenCpp > 0 ) { VAR_PosZ_ScassoCop = 184 }

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

      //Simone 03/12/21
      if( TipoPenCappaStr == "STANDARD" )
      {
         if( VAR_ConScassoSch == 1 & Y > 920 ) { HIDE_ON_EDIT(ATTUALE(),"Posizione_ScassoSch;Filler2",0) }
         else                                  { HIDE_ON_EDIT(ATTUALE(),"Posizione_ScassoSch",1) }
      }

   #ifndef TEC
      if( ACTION()==0 ) { HIDE_ON_EDIT2(ATTUALE(),"InsEldom",1) }
   #endif
   }

   PuntiNotevoli
   {
      GOSUB DimPensili
      GOSUB DefVanoPensili
      GOSUB DefPuntiStampa
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368

      //TODO-- se agganciato a basi, filo alto
      GOSUB OnQueryBdm_Pensili_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_InsEldom

      GOSUB CtrlPensili

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

      GOSUB CucP_Controlli

      //Luca 23/04/2020
      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         //Luca 03/06/2020 cappa slitta, posizioni default per foro coperchio
         //if( TipoPenCappa==2 )
         if( TipoPenCappaStr=="CLIENTE" )
         {
            if( IS_VAR_FIXED(ATTUALE(),"VAR_PosX_ScassoCop")==0 ) { VAR_PosX_ScassoCop = X/2 }
            if( IS_VAR_FIXED(ATTUALE(),"VAR_PosZ_ScassoCop")==0 ) { VAR_PosZ_ScassoCop = 133 }
         }

         if( TipoPenCappaStr=="SLITTA" )
         {
            if( IS_VAR_FIXED(ATTUALE(),"VAR_PosX_ScassoCop")==0 ) { VAR_PosX_ScassoCop = X/2 }
            if( IS_VAR_FIXED(ATTUALE(),"VAR_PosZ_ScassoCop")==0 ) { VAR_PosZ_ScassoCop = 148 }
         }

         if( VAR_EXIST(ATTUALE(),"VAR_LarScasso_prec")==0 )  { VAR_LarScasso_prec  = VAR_LarScasso }
         if( VAR_EXIST(ATTUALE(),"VAR_PrfScasso_prec")==0 )  { VAR_PrfScasso_prec  = VAR_PrfScasso }
         if( VAR_EXIST(ATTUALE(),"VAR_DiamScasso_prec")==0 ) { VAR_DiamScasso_prec = VAR_DiamScasso }

         //Luca 03/06/2020 aggiunti
         if( VAR_EXIST(ATTUALE(),"VAR_ConScassoCop_prec")==0 )    { VAR_ConScassoCop_prec    = VAR_ConScassoCop   }
         if( VAR_EXIST(ATTUALE(),"VAR_PosX_ScassoCop_prec")==0 )  { VAR_PosX_ScassoCop_prec  = VAR_PosX_ScassoCop }
         if( VAR_EXIST(ATTUALE(),"VAR_PosZ_ScassoCop_prec")==0 )  { VAR_PosZ_ScassoCop_prec  = VAR_PosZ_ScassoCop }
         if( VAR_EXIST(ATTUALE(),"VAR_ConScassoSch_prec")==0 )    { VAR_ConScassoSch_prec    = VAR_ConScassoSch   }
         if( VAR_EXIST(ATTUALE(),"Posizione_ScassoSch_prec")==0 ) { Posizione_ScassoSch_prec = Posizione_ScassoSch }

         if( VAR_LarScasso_prec  != VAR_LarScasso
           | VAR_PrfScasso_prec  != VAR_PrfScasso
           | VAR_DiamScasso_prec != VAR_DiamScasso
           | VAR_ConScassoCop_prec    != VAR_ConScassoCop
           | VAR_PosX_ScassoCop_prec  != VAR_PosX_ScassoCop
           | VAR_PosZ_ScassoCop_prec  != VAR_PosZ_ScassoCop
           | VAR_ConScassoSch_prec    != VAR_ConScassoSch
           | Posizione_ScassoSch_prec != Posizione_ScassoSch
           )
         {
            VAR_LarScasso_prec  = VAR_LarScasso
            VAR_PrfScasso_prec  = VAR_PrfScasso
            VAR_DiamScasso_prec = VAR_DiamScasso

            VAR_ConScassoCop_prec    = VAR_ConScassoCop
            VAR_PosX_ScassoCop_prec  = VAR_PosX_ScassoCop
            VAR_PosZ_ScassoCop_prec  = VAR_PosZ_ScassoCop
            VAR_ConScassoSch_prec    = VAR_ConScassoSch
            Posizione_ScassoSch_prec = Posizione_ScassoSch

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

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

      VAR_PosX_ScassoRip = VAR_PosX_ScassoCop - $M368_Spe_Fia
      VAR_PosZ_ScassoRip = VAR_PosZ_ScassoCop - $M368_Rie_Sch_ZR - $M368_Spe_Sch
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

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

      if( TipoPenCappa!=1 & TipoPenCappa!=2 ) { EXITSUB() }

      if( $ChangedVar=="VAR_DiamScasso" )
      {
         wk_pos_x_min = 29 + VAR_DiamScasso/2
         wk_pos_x_max = X - wk_pos_x_min

         if( TipoPenCappaStr == "CLIENTE" )
         {
            wk_pos_z_min = 36.75 + VAR_DiamScasso/2
            wk_pos_z_max = Z - 12 - VAR_DiamScasso/2
         }

         if( TipoPenCappaStr == "SLITTA" )
         {
            wk_pos_z_min = 55 + VAR_DiamScasso/2
            wk_pos_z_max = Z - 12 - VAR_DiamScasso/2
         }

         VAR_SET_MENU(ATTUALE(),"VAR_PosX_ScassoCop",STRCAT("(  ",STR(wk_pos_x_min),"-",STR(wk_pos_x_max)," )"))
         VAR_SET_MENU(ATTUALE(),"VAR_PosZ_ScassoCop",STRCAT("(  ",STR(wk_pos_z_min),"-",STR(wk_pos_z_max)," )"))

         if( VAR_PosX_ScassoCop < wk_pos_x_min
           | VAR_PosX_ScassoCop > wk_pos_x_max ) { CHIEDI(ATTUALE(),"VAR_PosX_ScassoCop") }

         if( VAR_PosZ_ScassoCop < wk_pos_z_min
           | VAR_PosZ_ScassoCop > wk_pos_z_max ) { CHIEDI(ATTUALE(),"VAR_PosZ_ScassoCop") }
      }
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona FustoModuloCappa_368 fbs
   {
      GOSUB posa_blocco

      @VAR_LarScasso  = VAR_LarScasso
      @VAR_PrfScasso  = VAR_PrfScasso
      @VAR_DiamScasso = VAR_DiamScasso
   }

   //Luca 30/09/2019
   Posiziona CappaGenerica cap
   {
      @escluso = 0
      if( TipoPenCappa == 1
        | TipoPenCappa == 2)        { @escluso = 1 }

      if( InsEldom == 1
        & VAR_Revisione_PenCpp > 0) { @escluso = 0 }

      if( TipoPenCappa == 2
        & Cmp_TipoPenCappa == 0)    { @escluso = 0 }

      @X = X - 2*$M368_Spe_Fia
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 20
      if( TipoPenCappa == 2
        & Cmp_TipoPenCappa == 0) { @Z = Z - 54 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + SE_NUM( TipoPenCappa == 1 | FLAG_Fianco45 > 0, $M368_Spe_Fnd, 0)
      @base_0.z = base_0.z + Z - @Z

      idx_eldom = ATTUALE()
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()
      @base_0.x = base_0.x + 1
      @base_0.y = alto_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 = alto_0.y + 5
      @base_0.z = base_0.z + 5
      @X = 2
      @Y = Y - 10
      @Z = Z - 10
   }

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

Elemento ModuloRaccordoAngolo_368
{
   Descrizione = "Raccordo angolo 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1
      Tipo368            ""  "368-ANG"

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      Z       "Profondità accosto SX"   273 Menu ( DimRA368 )

      Y       "Altezza"                 184 Menu ( AltP368 )
      Yt      "Altezza c/piedini"       184

      X       "Profondità accosto DX"   273 Menu ( DimRA368 )

      ConPiedini         "" 0
      ConAttaccaglie     "" 0

      VAR_FixMuro       "Fissato a muro"      1 //Menu ( SiNo )
      VAR_FixTerra      "Solo a terra"        0 //Menu ( SiNo )

      //gestione pannello per LED
      //PannelloRetroLED  "" 0

      idx_cnear_sx   "" -1
      idx_cnear_dx   "" -1

      CMP2_AZIONI      ""      "S"

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

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

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1
      M4_CNT_MODE2__     ""   1

      M4_MIS "" "X;Y;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      Yt = Y + ConPiedini * $M368_Alt_Pie

      GOSUB punti_Yt

      offset_muro = -X

      base_so = base_0
      alto_ne = alto_2

      base_o0 = base_0     alto_o0 = alto_0
      base_o1 = base_1     alto_o1 = alto_1
      base_o2 = base_1     alto_o2 = alto_1
      base_o3 = base_2     alto_o3 = alto_2

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

      //GOSUB DefPuntiSnapPasso184_368
      GOSUB PuntiModuli_368
   }

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

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gestionale_368

      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder==0 )
      {
         CAT_VM_var = "C003"
         CAT_VM_opz = "TE001;SO001"

         CAT_VM_sel = "SO001"
         if( ConPiedini ) { CAT_VM_sel = "TE001" }
         GOSUB Gest_CAT_VM
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         C003 = "SO001"
         VarAdd = "C003"   GOSUB Add_TABER_VARSETTATE

         CAT_VM_var = "C003"
         CAT_VM_opz = "TE001;SO001"

         CAT_VM_sel = "SO001"
         if( ConPiedini ) { CAT_VM_sel = "TE001" }
         GOSUB Gest_CAT_VM
      }
      GOSUB OnTabEredita_368
   }

   Procedura Offset
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      GOSUB SettaPosizione_368
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //Offset ", NOME(ATTUALE())))

      GOSUB Offset_Modulo_368
   }

   Procedura cancella
   {
      GOSUB Cuc_cancella_std2
   }

   Posiziona GruppoPiedini_368 gp
   {
      @escluso = 1 - ConPiedini
      GOSUB Posa_Elemento
      @Y = $M368_Alt_Pie
   }

   //Posiziona FerramentaModulo_368 fer
   //{
   //   GOSUB posa_fusto_368
   //}

   Posiziona FustoRaccordoAngolo_368 fbs
   {
      GOSUB posa_blocco
      if( ConPiedini == 1 ) { @base_0.y = base_0.y + $M368_Alt_Pie }
   }

   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 - 5
      @base_0.y = base_0.y + 5
      @base_0.z = base_0.z + Z - 1
      @X = 2
      @Y = Y - 10
      @Z = X - 10
      @ang_y = -90
   }
}

Elemento PannelloParetePTE_368
{
   Descrizione = "Pannello Parete PTE"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      X       "Larghezza"       368 Menu ( XPan_PTE )
      Y       "Altezza"         368 Menu ( YPan_PTE )
      Z       "Profondità"       20 ShowAlways

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

      VAR_FixMuro   "Fissato a muro"      1
      VAR_FixTerra  "" 0

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      GEST_CODICE  "" ""
      RADICE       "" "PTE"

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

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1
      M4_CNT_MODE2__     ""   1

      M4_MIS "" "FillerM2G;X;Y;Z"

      FillerM2G            " " "" ShowAlways

      XGLASS      "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune
      Spe_Vtr = 4

      RieXY  = 1.5

      RieX_Pan = 3.5
      RieY_Pan = 3.5

      M4_GRUPPO__  = MSG(1022)

      GOSUB NO_AUTO

      FIN_var_fin = "C042"
      FIN_var_pan = "C033"

      //if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      //{
      //   VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
      //   VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
      //
      //   CtrlRangeRidM2G(ATTUALE(),"X")
      //   CtrlRangeRidM2G(ATTUALE(),"Y")
      //}

   }

   PuntiNotevoli
   {
      Yr = Y - $M368_Rie_Pan
      Xr = X - $M368_Rie_Pan

      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }


   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlModuli_368
   }

   //Procedura OnTabEredita
   //{
   //   //eredito il valore da GEST_C001 della base
   //   if( TABER_REGOLA=="PRE" )
   //   {
   //   }
   //}

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }


   Posiziona Blocco VT
   {
      @base_0.x = base_0.x + RieXY
      @base_0.y = base_0.y + RieXY
      @base_0.z = base_0.z + Z - Spe_Vtr
      @X = Xr
      @Y = Yr
      @Z = Spe_Vtr
      FIN_var = FIN_var_fin
      GOSUB rivestimento
   }

   Posiziona Blocco pan
   {
      @base_0.x = base_0.x + RieXY + RieX_Pan
      @base_0.y = base_0.y + RieXY + RieY_Pan
      @base_0.z = base_0.z
      @X = Xr - 2*RieX_Pan
      @Y = Yr - 2*RieY_Pan
      @Z = Z - Spe_Vtr

      FIN_var = FIN_var_pan
      GOSUB rivestimento
   }
}

Elemento MensolaElle_368
{
   Descrizione = "MENSOLA ELLE"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      X       "Larghezza"       365 Menu ( XMensL_368 )
      Y       "Altezza"         181 Menu ( YMensL_368 )
      Z       "Profondità"      136 Menu ( ZMensL_368 )

      VAR_FixTerra   "" 0

      TipoMensolaL   "Tipo mensola L"  0 Menu ( TMensL_368 )

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia "" "WALL"

      LED_Sopra          ""  0
      LED_Sotto          ""  0

      TLED_Attiva          "" 0 SaveAlways
      TLED_Tipologia       "" 1 SaveAlways
      TLED_Watt            "" 0

      TLED_Lavorazione     "" 0 SaveAlways
      TLED_TipoLavorazione "" 0 SaveAlways


      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_cnear_up       "" -1
      idx_cnear_dw       "" -1

      //GEST_CODICE  "" ""
      //RADICE       "" ""

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

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1
      M4_CNT_MODE2__     ""   1

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

      FillerM2G       " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      RieX_Pan = 13.5
      RieY_Pan = 13.5

      Spe_Pan  = 19

      Spe_Lam  = 2

      FIN_var_pan = ""
      FIN_var_lam = "C028"

      if( $ATTIVA_DLL==1  )
      {
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",1)

         if( FLAG_CompostoGEN == 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(),"TipoMensolaL",1)

         //Simone 05/10/21 - Gestione riduzioni
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")

         //X
         if( VAR_EXIST( ATTUALE(), "CR_X_min")
           & VAR_EXIST( ATTUALE(), "CR_X_max") )
         {
            if( CR_X_min <= CR_X_max )
            {
               wk_new_menu = STRCAT( "( ", STR(CR_X_min),"-", STR(CR_X_max), " )")
               VAR_SET_MENU( ATTUALE(), "X", wk_new_menu)
            }
         }

         //Y
         if( VAR_EXIST( ATTUALE(), "CR_Y_min")
           & VAR_EXIST( ATTUALE(), "CR_Y_max") )
         {
            if( CR_Y_min <= CR_Y_max )
            {
               wk_new_menu = STRCAT( "( ", STR(CR_Y_min),"-", STR(CR_Y_max), " )")
               VAR_SET_MENU( ATTUALE(), "Y", wk_new_menu)
            }
         }
      }

      STP_Bollina = 1
      STP_Bollina_Pnt = [X/2, Y/2 - 56.5, Z]

      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB DefPuntiLED_368
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPresenza_LED_368

      //Luca 25/01/2021
      GOSUB TLED_CalcolaTrasformatore_368
   }

   Gestionale
   {
      GOSUB GestComune

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""

         perRADICE = "MNELBA"
         if( TipoMensolaL == 1 ) {  perRADICE = "MNELAL" }

         RADICE = perRADICE
      }

      GOSUB Set_Gest_C008_MensolaELLE_368
      GOSUB Set_Gest_C009_MensolaELLE_368

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura Offset
   {
      GOSUB Offset_Modulo_368
   }

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

   //Posiziona PannelloRetro_MensolaL_368 pan
   Posiziona PannelloRetro_WallPanel_368 pan
   {
      @base_0.x = base_0.x + RieX_Pan
      @base_0.y = base_0.y + RieY_Pan
      @base_0.z = base_0.z
      @X = X - 2*RieX_Pan
      @Y = Y - 2*RieY_Pan
      @Z = Spe_Pan

      FIN_var = FIN_var_pan
      GOSUB rivestimento
   }

   Posiziona _grafica_mensolaL_368 mens
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Spe_Pan
      @X = X
      @Y = Y
      @Z = Z - Spe_Pan

      @TipoMensolaL = TipoMensolaL

      FIN_var = FIN_var_lam
      GOSUB rivestimento
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @base_0.x = base_0.x + 30
      @base_0.y = alto_0.y - RieX_Pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 30
      @Y = 10
      @Z = 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 30
      @base_0.y = base_0.y + RieX_Pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 30
      @Y = 10
      @Z = 10
   }

   //Luca 25/01/2021
   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   //Luca 25/01/2021
   Posiziona TrasformatoreLED_368 Trasd
   {
      GOSUB posa_trasformatore_368
   }
}

Elemento BarraTV_Modulo_368
{
   Descrizione = "Barra TV"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile Modulo_368
   Alias  CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      X       "Larghezza"       736 Menu ( LargP368 )
      Y       "Altezza"          30
      Z       "Profondità"       20

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0

      Xr "" 736

      BarraDoppia    "" 0

      //GEST_CODICE  "" ""
      //RADICE       "" ""

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "A"

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

      FIN_var         ""  "C028"

      FillerM2G       " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Div = $M368_Spe_DivLeg19

      //Luca 16/11/2020
      idx_pdr = PADRE(ATTUALE(),1)
      if( VAR_VAL(idx_pdr,"VAR_DivVerticale") == 3 ) { Spe_Div = $M368_Spe_DivLeg38 }

      BarraDoppia = 0
      if( X > 1104 ) { BarraDoppia = 1 }

      //Luca 04/11/2020
      if( $ATTIVA_DLL == 1 )
      {
         VAR_SET_MODE( ATTUALE() , "X" , $MODE_SHOWALWAYS)
      }
   }

   PuntiNotevoli
   {
      Xr  = X - 2*$M368_Spe_Fia
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         COMPONENTI2("wk_bar",$query_p1,"BarraTV_Modulo_368")
         if( wk_bar > 0 )  { $QueryResult__ = 0 }

         if( FLAG_CompostoGEN == 0 )
         {
            if( VAR_VAL($query_p1,"X") != X ) { $QueryResult__ = 0 }
         }
         else
         {
            if( VAR_VAL($query_p1,"X") < 736 ) { $QueryResult__ = 0 }
         }

         if( VAR_VAL($query_p1,"FLAG_Modulo_AIR") == 1
           | VAR_VAL_STR($query_p1,"Tipo368" )!= "368-RIB"  ) { $QueryResult__ = 0 }

         #ifndef TEC
            if( VAR_VAL($query_p1,"Y") <= 184 ) { $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,"BarraTV_Modulo_368")
      if( wk_bar > 0 )  { annulla_ins = 1 }

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

   Attrezza
   {
      idx_ref = @idx_att

      base_0 = $vano_0

      base_0.y = $vano_0.y + @Y - $M368_Spe_Cop - Y
      if( VAR_VAL(idx_ref,"FLAG_CopSp38") == 1 ) { base_0.y = $vano_0.y + @Y - $M368_Spe_Cop38 - Y }

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

      if( FLAG_CompostoGEN == 1 ) { X = @X }

      //Luca 16/11/2020
      if( @Y <= 184 & @Z < 500 ) { base_0.z = @base_0.z + @Z - 5 - Z }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""

         perRADICE = "BATV368"
         RADICE = perRADICE
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

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

   Posiziona BarraTVMod_368 bar1
   {
      GOSUB posa_blocco
      @X = Xr

      if( BarraDoppia == 1 )
      {
         @X = ( Xr - Spe_Div)  /2
      }

      //GOSUB rivestimento
   }

   Posiziona BarraTVMod_368 bar2
   {
      @escluso = 1 - BarraDoppia
      GOSUB posa_blocco
      @X = ( Xr - Spe_Div)  /2

      @base_0.x = base_0.x + Xr - @X
      //GOSUB rivestimento
   }
}

Elemento BarraTVMod_368
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias  CamIncidente

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

      X "" 1
      Y "" 1
      Z "" 1

      FIN_var     ""  "C028"

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB GestComune_Post
   //}

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento AppendiabiltiEstraibile_368
{
   Descrizione = "Appendiabiti estraibile"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile Modulo_368 ModuloGiorno_368  Armadio*Arm20 !ArmadioAng*Arm20 Armadio_EtVoila
   Alias  CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      X       "Larghezza"        34
      Y       "Altezza"          50
      Z       "Profondità"       290

      FLAG_Arm20 "" 0

      //GEST_CODICE  "" ""
      //RADICE       "" ""

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "A"

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

      FIN_var         ""  "C028"

      FillerM2G       " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

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

         if( VAR_VAL($query_p1,"FLAG_Battente") == 1 )                   { $QueryResult__ = 1 }
         if( VAR_VAL($query_p1,"VAR_ConfigVani") == 0 & $query_p2 == 1 ) { $QueryResult__ = 0 }
         if( VAR_VAL($query_p1,"Zt") < 406 )                             { $QueryResult__ = 0 }

         COMPONENTI2("wk_estr",$query_p1,"AppendiabiltiEstraibile_368")
         i = 1
         while ( i <= wk_estr   )
         {
            if( VAR_VAL(wk_estr[i],"vano_n") == $query_p2 ) { $QueryResult__ = 0 }
            i = i + 1
         }

         if( FLAG_Arm20 == 1 )
         {
            $QueryResult__ = 0
            COMPONENTI2("wk_rip",$query_p1,"Ripiano_Arm20")
            if( wk_rip > 0 ) { $QueryResult__ = 1 }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      wk_specop = $M368_Spe_Cop
      if( VAR_VAL(idx_ref,"FLAG_CopSp38") ==1 )  { wk_specop = $M368_Spe_Cop38 }

      liv2add[1] = VAR_VAL(idx_ref,"Y") - wk_specop

      COMPONENTI2("wk_estr",idx_ref,"AppendiabiltiEstraibile_368")

      i = 1
      while ( i <= wk_estr   )
      {
         if( VAR_VAL(wk_estr[i],"vano_n" ) == vano_ref ) { annulla_ins = 1 }
         i = i + 1
      }

      //Luca 11/12/2020
      if( FLAG_Arm20 == 1 )
      {
         annulla_ins = 0
         DEL_VAR(idx_att,"liv2add*")
         liv2add    = 0

         COMPONENTI2("wk_rip",idx_ref,"Ripiano_Arm20")
         i = 1
         while ( i <= wk_rip )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2add[ne] = VAR_VAL(wk_rip[i],"base_0.y") -  VAR_VAL(idx_ref,"base_0.y")
            i = i + 1
         }
      }

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

   }

   Attrezza
   {
      vano_n = $vano_n
      idx_ref = @idx_att

      base_0 = $vano_0

      base_0.x = $vano_0.x + $larghezza/2  - X/2
      base_0.y = $vano_0.y + $livello      - Y
      base_0.z = $vano_0.z + $profondita/2 - Z/2
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Z
      GEST_Y = Y
      GEST_Z = X

      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( $OnRigenera | $OnLoadOrder | ACTION()<=0 ) { EXITSUB() }

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

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

   Posiziona __import__ bl
   {
      GOSUB posa_blocco
      @import = STRCAT($path_sat,"368\TER005_Appendiabiti_1.sat" )
      @c_rivestimento = $c_alluminio
   }

   Posiziona TuboAppEstraibile_368 tb
   {
      GOSUB posa_blocco
      @X = 5
      @base_0.x = base_0.x + X/2 - @X/2
   }
}

Elemento TuboAppEstraibile_368
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      X "" 5
      Y "" 1
      Z "" 1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura azione
   {
      azione_val_max = 145
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Posiziona __import__ bl
   {
      GOSUB Posa_Elemento
      @import = STRCAT($path_sat,"368\TER005_Appendiabiti_2.sat" )
      @c_rivestimento = $c_alluminio
   }
}

Elemento SchienaleVano_368
{
   Descrizione = "Schienale vano"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368 Menu ( LargP368 )
      Y       "Altezza"         368 Menu ( AltP368 )
      Z       "Spessore"         20 ShowAlways
      Zt       ""                20

      //LACCATO --> Laccat/Gentle pannello unico
      //VETRO --> Vetro/XGLASS
      TipoSchienale  "" "LACCATO"

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      NO_GEST      "" 0


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

      //XGLASS      "Num. XGLASS" ""

      CMP2_AZIONI      ""      "MS"

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

      COD_EREDITA "" "PRE;POST"

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio  non graficato
      //16 : schienali
      //32 : punti
      M4_MIS    "" "Filler*;X;Y;Z"

      M4_DIALOG "" 32

      M4_LINK2WALL_MODE__   ""  3

      //M4_STENDI_RIPETIZIONI "" 1

      M4_DLINK_MODE__ "rimane steso"  0

      FillerM2G            " " "" ShowAlways

      XGLASS      "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune

      M4_GRUPPO__  = MSG(1022)

      Spe_PanLac = 19

      Spe_Pan = 16
      Spe_Vtr = 4

      RieX_Lac = 0.2
      //RieY_Lac = 0.2
      RieY_Lac =   2


      //RiePanX_Vtr = 3.5
      //RiePanY_Vtr = 3.5
      RiePanX_Vtr = 3
      RiePanY_Vtr = 2

      //RieVtrX_Vtr = 0.5
      //RieVtrY_Vtr = 1
      RieVtrX_Vtr = 0.5
      RieVtrY_Vtr = 2

      FIN_var_pan  = "C033"
      FIN_var_fin  = "C048"

      if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",1)

         if( FLAG_CompostoGEN == 0 )
         {
           VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
           VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1

           CtrlRangeRidM2G(ATTUALE(),"X")
           CtrlRangeRidM2G(ATTUALE(),"Y")
         }

         if( FLAG_CompostoGEN == 1 )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)
         }
      }


      GOSUB NO_AUTO

      STP_Bollina = 1

      if( FLAG_CompostoGEN == 0 ) {  CMP2_AZIONI = "S" }
   }

   PuntiNotevoli
   {
      RieZ_Retro = 6.5
      Zt = Z + RieZ_Retro
      GOSUB punti_Zt

      base_so = base_0
      alto_ne = alto_2

      //Luca 20/04/2021
      STP_XG_B0 = [RieVtrX_Vtr,RieVtrY_Vtr,0]
      STP_XG_B3 = [X-RieVtrX_Vtr,RieVtrY_Vtr,0]
      STP_XG_A0 = [RieVtrX_Vtr,Y-RieVtrY_Vtr,0]

      STP_XG_ValX = X - 2*RieVtrX_Vtr
      STP_XG_ValY = Y - 2*RieVtrY_Vtr
   }

   #include %path_bdm%\Tlib\orie.inc


   //Procedura OnQueryBdmLocal
   //{
   //   //Stesura con due pick
   //   if($query_type==3)
   //   {
   //      $QueryResult__ = 2
   //      EXITSUB()
   //   }
   //}

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXIT() }

      if( ACTION()==$stesi_Action )
      {
         SHOW_POINT($idx_show_point, "punto_stendisch368_*")
         EXIT()
      }

      GOSUB Stendi_SchienaleVani_368
   }

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

      GOSUB Notifica_SchienaleVani_368
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST" )
      {
         TipoSchienale = "LACCATO"
         wk_gest_c048  = VAR_VAL_STR(ATTUALE(),"GEST_C048")
         if( IS_MATCH( wk_gest_c048 ,"VL*" ) == 1  | IS_MATCH( wk_gest_c048 ,"VO*" ) == 1
           | IS_MATCH( wk_gest_c048 ,"XE*" ) == 1  | IS_MATCH( wk_gest_c048 ,"XF*" ) == 1
           | IS_MATCH( wk_gest_c048 ,"XL*" ) == 1  | IS_MATCH( wk_gest_c048 ,"XO*" ) == 1 ) { TipoSchienale = "VETRO" }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST==1 )
      {
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""

         perRADICE = "SCVN368"

         RADICE = perRADICE
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

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

   //Procedura cancella
   //{
   //   if( $StartingDel__!=ATTUALE() ) { EXITSUB() }
   //
   //   idx_agg = AGGANCIATA(idx_att,"*")
   //   if( IS_IDX(idx_agg) ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," no_agganciati //Cancella Bifacciale")) }
   //}

   //Posiziona PannelloXSchienaleVano_368 panr
   //{
   //   //@escluso = 1
   //   //if( TipoSchienale == "VETRO" ) { @escluso = 0 }
   //
   //   @X = X - 2*RiePanX_Vtr
   //   @Y = Y - 2*RiePanY_Vtr
   //   @Z = Spe_Pan
   //
   //   @base_0.x = base_0.x + RiePanX_Vtr
   //   @base_0.y = base_0.y + RiePanY_Vtr
   //   @base_0.z = base_0.z
   //
   //}

   Posiziona PannelloXSchienaleVano_368 panr
   {
      @X = X - 2*RieX_Lac
      @Y = Y - 2*RieY_Lac
      @Z = Spe_PanLac

      @base_0.x = base_0.x + RieX_Lac
      @base_0.y = base_0.y + RieY_Lac
      @base_0.z = base_0.z + RieZ_Retro
      @FIN_var = FIN_var_fin

      if( TipoSchienale == "VETRO" )
      {
         @X = X - 2*RiePanX_Vtr
         @Y = Y - 2*RiePanY_Vtr
         @Z = Spe_Pan

         @base_0.x = base_0.x + RiePanX_Vtr
         @base_0.y = base_0.y + RiePanY_Vtr
         @base_0.z = base_0.z + RieZ_Retro

         @FIN_var = FIN_var_pan
      }
   }

   //vetro
   Posiziona Blocco panf
   {
      @escluso = 1
      if( TipoSchienale == "VETRO" ) { @escluso = 0 }

      @X = X - 2*RieVtrX_Vtr
      @Y = Y - 2*RieVtrY_Vtr
      @Z = Spe_Vtr

      @base_0.x = base_0.x + RieVtrX_Vtr
      @base_0.y = base_0.y + RieVtrY_Vtr
      @base_0.z = base_0.z + Spe_Pan  + RieZ_Retro

      FIN_var = FIN_var_fin
      GOSUB rivestimento
   }

   Posiziona _cont_per_near nb0
   //Posiziona Blocco nb0
   {
      idx_cnear_b0 = ATTUALE()
      @base_0.x = base_0.x - 10
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + RieZ_Retro - 10
      @X = 20
      @Y = 20
      @Z = 20
   }

   Posiziona _cont_per_near na3
   //Posiziona Blocco na3
   {
      idx_cnear_a3 = ATTUALE()
      @base_0.x = alto_3.x - 10
      @base_0.y = alto_3.y - 10
      @base_0.z = alto_3.z + RieZ_Retro - 10
      @X = 20
      @Y = 20
      @Z = 20
   }

   Posiziona _cont_per_near cn_sx
   {
      @base_0.x = base_0.x - 3
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z + 10

      @X = 6
      @Y = Y - 20
      @Z = Z
      idx_cnear_sx = ATTUALE()
   }

   Posiziona _cont_per_near cn_dx
   {
      @base_0.x = base_0.x + X - 3
      @base_0.y = base_0.y +  10
      @base_0.z = base_0.z + RieZ_Retro + 10
      @X = 6
      @Y = Y - 20
      @Z = Z

      idx_cnear_dx = ATTUALE()
   }

   Posiziona _cont_per_near cn_up
   {
      @base_0.x = base_0.x + 2
      @base_0.y = alto_0.y - 3
      @base_0.z = base_0.z  + RieZ_Retro + 10

      @X = X - 4
      @Y = 6
      @Z = Z

      idx_cnear_up = ATTUALE()
   }

   Posiziona _cont_per_near cn_dw
   {
      @base_0.x = base_0.x + 2
      @base_0.y = base_0.y - 3
      @base_0.z = base_0.z + RieZ_Retro + 10

      @X = X - 4
      @Y = 6
      @Z = Z

      idx_cnear_dw = ATTUALE()
   }

// Posiziona _cont_per_near nsx
// {
//    idx_cnear_sx = ATTUALE()
//    @base_0.x = base_0.x + 1
//    @base_0.y = alto_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 = alto_0.y + 5
//    @base_0.z = base_0.z + 5
//    @X = 2
//    @Y = Y - 10
//    @Z = Z - 10
// }
}

Elemento PannelloXSchienaleVano_368
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

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

      X "" 1
      Y "" 1
      Z "" 1

      //FIN_var     ""  "C033"

      //RADICE       ""  ""
      //COD_EREDITA  ""  "PRE;POST"

      TipoSchienale  "" "" Implicit

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB GestComune_Post
   //}

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      if( TipoSchienale == "VETRO" )
      {
         @m_rivestimento = ""
         @c_rivestimento = $c_pomice
      }
   }
}

Elemento SchienaleVanoGiorno_368
{
   Descrizione = "Schienale vano"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile ModuloGiorno_368 //Modulo_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368
      Y       "Altezza"         368
      Z       "Spessore"          4

      Xr      "Larghezza"       368 ShowAlways
      Yr      "Altezza"         368 ShowAlways
      Zr      "Spessore"          4 ShowAlways

      NrSchiene     "" 1 SaveAlways

      Schiena1_X    "" 0
      Schiena1_Y    "" 0
      Schiena1_PosX "" 0
      Schiena1_PosY "" 0

      Schiena2_X    "" 0
      Schiena2_Y    "" 0
      Schiena2_PosX "" 0
      Schiena2_PosY "" 0

      Schiena3_X    "" 0
      Schiena3_Y    "" 0
      Schiena3_PosX "" 0
      Schiena3_PosY "" 0

      Schiena4_X    "" 0
      Schiena4_Y    "" 0
      Schiena4_PosX "" 0
      Schiena4_PosY "" 0

      Schiena5_X    "" 0
      Schiena5_Y    "" 0
      Schiena5_PosX "" 0
      Schiena5_PosY "" 0

      Schiena6_X    "" 0
      Schiena6_Y    "" 0
      Schiena6_PosX "" 0
      Schiena6_PosY "" 0

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      //COD_EREDITA   "" "PRE"

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

      NO_GEST     "" 0

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

      CMP2_AZIONI "" "AS"

      COD_EREDITA "" "PRE;POST"

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

      FillerM2G   " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      AriaLato  = 1
      AriaRetro = 1

      //if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      //{
      //   HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",1)
      //
      //   if( FLAG_CompostoGEN == 0 )
      //   {
      //     VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
      //     VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
      //
      //     CtrlRangeRidM2G(ATTUALE(),"X")
      //     CtrlRangeRidM2G(ATTUALE(),"Y")
      //   }
      //
      //   if( FLAG_CompostoGEN == 1 )
      //   {
      //      VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
      //      VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)
      //   }
      //}
   }

   PuntiNotevoli
   {
      Xr = X - 2*AriaLato
      Yr = Y - 2*AriaLato

      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 1
         COMPONENTI2("wk_sch",$query_p1,"SchienaleVanoGiorno_368")

         if( wk_sch > 0 )  { $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("wk_sch",idx_ref,"SchienaleVanoGiorno_368")
      if( wk_sch > 0 )  { annulla_ins = 1 }

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

   Attrezza
   {
      vano_n = $vano_n
      idx_ref = @idx_att

      base_0.x = $vano_0.x
      base_0.y = $vano_0.y + $M368_Spe_Cop
      base_0.z = $vano_0.z

      X = $larghezza
      Y = @Y - 2*$M368_Spe_Cop
      Z = $profondita
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CalcolaNrSchienaliVanoGiorno_368

      GOSUB GetRegola_Componenti_Elements

      //Simone 07/11/2022 - Per Glass Sideboards con schiena bloccata in finitura specchio bronzo
      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1
        & INSERIMENTO2(ATTUALE()) == $ins2_attrezzato2 )
      {
         HIDE = 2
      }
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST == 1 )
      {
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""

         perRADICE = "SCVT36"
         //SCVT36MULTI
         if( NrSchiene > 1 ) { perRADICE = STRCAT( perRADICE, "MULTI") }
         //SCVT36CA e SCVT36MULTICA
         if( in_pcfto == 1 ) { perRADICE = STRCAT( perRADICE, "CA")    }

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

         GEST_X = Xr
         GEST_Y = Yr
         GEST_Z = Zr
      }

      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 Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   //schiena singola
   Posiziona Blocco SSS1
   {
      @escluso = 0
      if( NrSchiene > 1  ) { @escluso = 1 }

      @base_0.x = base_0.x + AriaLato
      @base_0.y = base_0.y + AriaLato
      @base_0.z = base_0.z + AriaRetro
      @X = Xr
      @Y = Yr
      @Z = 4

      FIN_var = "C048"
      GOSUB rivestimento
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS1
   {
      nrsch = 1
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS2
   {
      nrsch = 2
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS3
   {
      nrsch = 3
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS4
   {
      nrsch = 4
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS5
   {
      nrsch = 5
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona SchienaSingolaVanoGiorno_368 SS6
   {
      nrsch = 6
      GOSUB PosaSchienaSingolaVano_368
   }

   Posiziona _cont_per_near cne
   {
      idx_cnear = ATTUALE()
      @base_0.x = base_0.x + 20
      @base_0.y = base_0.y + 20
      @base_0.z = base_0.z + 20
      @X = X - 40
      @Y = Y - 40
      @Z = Z - 40
   }
}

Elemento SchienaSingolaVanoGiorno_368
{
   Descrizione = "Schiena singola vano giorno"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 18
      Y "" 1
      Z "" 4

      NO_GEST      "" 0

      FIN_var     ""  "C048"
      FIN_orie    ""  "V"

      //Simone 04/10/21
      //RADICE      ""  "SCVT36"
      RADICE      ""  ""
      perRADICE   ""  ""

      COD_EREDITA "" "PRE;POST"

      XGLASS      "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune
      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST==1 )
      {
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      FLAG_RADICE = $FLAG_STANDARD

      if( IS_VAR_FIXED(ATTUALE(),"GEST_CODICE") == 0
        & IS_VAR_FIXED(ATTUALE(),"RADICE") == 0 )
      {
         GEST_CODICE = ""
         //Simone 04/10/21

         perRADICE = "SCVT36"
         if( in_pcfto==1 ) { perRADICE = "SCVT36CA" }
         if( RADICE != perRADICE ) { RADICE = perRADICE }
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento PortaTV_368
{
   Descrizione = "Porta TV"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"         980 ShowAlways
      //Luca 19/04/2021 riporto modifiche di LAGO
      //Modifico misura default
      //Y       "Altezza"           250 ShowAlways
      Y       "Altezza"           210 ShowAlways
      Z       "Profondità"        360 ShowAlways

      CMP2_AZIONI      ""      "S"

      FIN_var "" "C032"

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1

      M4_MIS "" "FillerM2G;X;Y;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      Rientro = 5
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona _grafica_pannello_368 cop
   {
      @base_0 = base_0
      @base_0.x = base_0.x + Rientro
      @base_0.y = base_0.y + Y - @Y
      @X = X - 2*Rientro
      @Y = 50
      @Z = Z

      @TipoPan = "COP"
      GOSUB rivestimento
   }

   Posiziona _grafica_pannello_368 fiasx
   {
      @base_0 = base_0
      @X = 50
      @Y = Y - Rientro
      @Z = Z

      @TipoPan = "FIASX_PS"
      GOSUB rivestimento
   }

   Posiziona _grafica_pannello_368 fiadx
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - 50
      @X = 50
      @Y = Y - Rientro
      @Z = Z

      @TipoPan = "FIADX_PS"
      GOSUB rivestimento
   }
}

Elemento PannelloRetroXLED_368
{
   Descrizione = "Pannello Retro x LED"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloGiorno_368 Modulo_368
   //Altimetro   Auto
   Stendibile  ModuloGiorno_368 Modulo_368
   //Luca 20/01/2021 riporto modifiche LAGO
   //Alias       CamInciso;CamIncidente
   Alias       Schiena;CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"           368 ShowAlways
      Xt   "Larghezza nominale"  368 ShowAlways

      Y    "Altezza"             368 ShowAlways
      Yt   "Altezza nominale"    368 ShowAlways

      Z    "Spessore"             19 ShowAlways

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia   ""  ""

      LED_Sopra          ""  0
      LED_Sotto          ""  0

      TLED_Attiva          "" 0 SaveAlways
      TLED_Tipologia       "" 1 SaveAlways
      TLED_Watt            "" 0

      TLED_Lavorazione     "" 0 SaveAlways
      TLED_TipoLavorazione "" 0 SaveAlways

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      idx_modulo         ""  -1
      idx_cnear_up       "" -1
      idx_cnear_dw       "" -1


      COD_EREDITA        "" "PRE"

      CMP2_AZIONI      ""      "M"

      FIN_var         ""  "C002"
      FIN_orie        ""  "O"

      NO_GEST         ""  0

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

      M4_STENDI_SINGLE_PICK "" 1
      M4_DIALOG "" 2

      M4_STENDI_RIPETIZIONI "" 1

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

      FillerM2G       " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_8

      RieX = 15
      RieY = 15
   }

   PuntiNotevoli
   {
      X = Xt - 2*RieX
      Y = Yt - 2*RieY

      GOSUB punti_XtYt

      GOSUB DefPuntiLED_368

      STP_Bollina = 0
   }
   #include %path_bdm%\Tlib\orie.inc

   //ATT Procedura OnQueryBdmLocal
   //ATT {
   //ATT    if( $query_type == 8 )
   //ATT    {
   //ATT       COMPONENTI2( "pan" , $query_p1 , "PannelloRetroXLED_368" )
   //ATT       if( pan > 0  ) { $QueryResult__ = 0 }
   //ATT    }
   //ATT }

   //ATT Procedura OnSetupLivelli
   //ATT {
   //ATT    idx_ref  = $__lev_ref__
   //ATT    vano_ref = $__lev_vano__
   //ATT
   //ATT    DEL_VAR(idx_att,"liv2add*")
   //ATT    liv2add    = 1       liv2add[1]    = 0
   //ATT    liv2addscr = 1       liv2addscr[1] = 0
   //ATT
   //ATT    COMPONENTI2( "pan" , idx_ref , "PannelloRetroXLED_368" )
   //ATT    annulla_ins = 0
   //ATT    if( pan > 0 )  { annulla_ins = 1 }
   //ATT
   //ATT    GOSUB livelli_add2
   //ATT }

   //ATT Attrezza
   //ATT {
   //ATT    Xt = @X
   //ATT    Yt = @Y
   //ATT
   //ATT    base_0 = @base_0
   //ATT    base_0.y = $vano_0.y
   //ATT }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPresenza_LED_368

      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder == 0 )
      {
         idx_modulo = -1
         PanLED_Tipologia = ""

         idx_agg = AGGANCIATA(idx_att,"*")
         if( IS_IDX(idx_agg) )
         {
            idx_modulo = idx_agg
            PanLED_Tipologia = "368"
         }
      }

      //Luca 25/01/2021
      GOSUB TLED_CalcolaTrasformatore_368
   }

   Gestionale
   {
      GOSUB GestComune

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

         GOSUB GestComune_Post
         EXIT()
      }

      GEST_X = X

      GOSUB Set_Gest_C009_PannelloLED_368

      GOSUB Set_Gest_C008_PannelloLED_368

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C009_PannelloLED_368

         GOSUB Set_Gest_C008_PannelloLED_368
      }
   }

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXIT() }

      if( $stesi_mode_sx==$stesi_Elemento
        & $stesi_mode_dx==$stesi_Elemento  )
      {
         $stesi_idx_sx = $stesi_idx1

         idx_ref = $stesi_idx_sx

         //devo controllare i casi in cui non è possibile stendere
         wk_blocca_stesura = 0
         wk_blocca_stesura_msg = ""

         //if( NOME(idx_ref) != "PannelloRetroXLED_368" )
         if( IS_MATCH( NOME(idx_ref) , "Modulo*368" ) == 0  )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = STRCAT("Non è possibile inserire il pannello in questo elemento.")
         }

         if( VAR_VAL(idx_ref,"FLAG_ConPannelloLED") == 1 )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1240)
         }

         SET_#(idx_ref)
         base_0 = #base_0

         Xt = #X
         Yt = #Y

         if( Yt <= 368 & VAR_VAL(idx_ref,"Zt") == 560 )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1263)
         }

         //Simone 24/11/21 - Blocco stesura se è attiva la barra per cartongesso
         if( VAR_VAL_STR(idx_ref,"GEST_C087") == "FR005" )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1302)
         }

         if( wk_blocca_stesura > 0 )
         {
            delme = 1
            FLAG_RADICE = $NO_RAD
            if( wk_blocca_stesura_msg!="" )  { DISPLAY2(wk_blocca_stesura_msg) }

            //COMANDO2("Show Abilita ON")
            NO_GEST = 1
            EXIT()
         }
      }
   }

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

      //GOSUB Notifica_Barra_Bifacciale
      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         COMANDO2("Show Abilita ON")
         EXIT()
      }

      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," Xt=",STR(Xt)," Yt=",STR(Yt) ," //Notifica ",NOME(ATTUALE())))

      COMANDO("Show Abilita OFF")

      wk_offx = 0
      wk_offy = 0
      wk_offz = 0

      wk_cnt = STRCAT("CNT S + 0, A + 0,R - 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0")

      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_att)," //Notifica",NOME(ATTUALE())))

      ang_ref = ANG_TOT_NOR(idx_ref)

      offx =   SENO(ang_ref)*Z
      offy = 0
      offz = COSENO(ang_ref)*Z

      COMANDO(STRCAT("INTERIORS unlink ",STR(idx_ref)))
      COMANDO(STRCAT("EDITPOS_REL ",STR(idx_ref) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // Notifica PannelloRetroXLED_368"))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_ref)," //Notifica",NOME(ATTUALE())))

      COMANDO("Show Abilita ON")
      COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_ref)))

      COMANDO(STRCAT("INTERIORS link try ",STR(ATTUALE())))
   }


   //ATT Procedura PostGestDllValida
   //ATT {
   //ATT    if( $OnRigenera | $OnLoadOrder | ACTION()<=0 ) { EXITSUB() }
   //ATT
   //ATT    idx_mod = PADRE(ATTUALE(),1)
   //ATT
   //ATT    VAR_VALUE_SET(idx_mod,"PannelloRetroLED",1)
   //ATT    COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_mod)," //PannelloRetroXLED_368"))
   //ATT }

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

      //ATT idx_mod = PADRE(ATTUALE(),1)
      //ATT VAR_VALUE_SET(idx_mod,"PannelloRetroLED",0)
      //ATT COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_mod)," no_agganciati //Cancella ",NOME(ATTUALE())))

      AGGANCIATI("wk_bif","*",ATTUALE())

      i = 1
      while ( i<=wk_bif  )
      {
         if( NOME(wk_bif[i])=="Led_PannelloRetro_368" )
         {
            COMANDO(STRCAT("DELETE ",STR(wk_bif[i])," //cancella ",NOME(ATTUALE())))
         }
         i = i + 1
      }

      idx_agg = AGGANCIATA(ATTUALE(),"*")

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

      ang_ref = ANG_TOT_NOR(idx_agg)

      offx =   SENO(ang_ref)*(-1*Z)
      offy = 0
      offz = COSENO(ang_ref)*(-1*Z)

      COMANDO(STRCAT("EDITPOS_REL ",STR(idx_agg) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // Cancella PannelloRetroXLED_368"))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," //Notifica",NOME(ATTUALE())))
      COMANDO(STRCAT("INTERIORS link try ",STR(idx_agg)))

   }

   //Posiziona Blocco bl
   Posiziona PannelloRetro_WallPanel_368 bl
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + RieX
      @base_0.y = base_0.y + RieY
      GOSUB rivestimento

      //@FIN_var = "C002"
   }

   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   //Luca 25/01/2021
   Posiziona TrasformatoreLED_368 Trasd
   {
      GOSUB posa_trasformatore_368
   }

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

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 30
      @base_0.y = base_0.y + RieX- 5
      @base_0.z = base_0.z + 5
      @X = X - 30
      @Y = 10
      @Z = 10
   }
}

Elemento AppendiabitiWallPanel_368
{
   Descrizione = "Appendiabiti Wall Panel"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"         980 ShowAlways
      Y       "Altezza"           360 ShowAlways
      Z       "Profondità"         68 ShowAlways

      Xr      "" 980
      Yr      "" 980

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia "" "WALL"

      LED_Sopra          ""  0
      LED_Sotto          ""  0

      TLED_Attiva          "" 0 SaveAlways
      TLED_Tipologia       "" 1 SaveAlways
      TLED_Watt            "" 0

      TLED_Lavorazione     "" 0 SaveAlways
      TLED_TipoLavorazione "" 0 SaveAlways

      COD_EREDITA      "" "PRE"

      CMP2_AZIONI      "" "S"

      M4_A_MURO          ""  -1
      M4_CNT_LINK_MODE__ ""   0
      M4_CNT_MODE__      ""   1
      M4_CNT_MODE2__     ""   1

      M4_MIS "" "FillerM2G;X;Y;Z"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB ConfigAppendiabiti_368
   }

   PuntiNotevoli
   {
      Xr = X - 2*RieLam_X
      Yr = Y - 2*RieLam_Y

      GOSUB punti

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

   Controlli
   {
      GOSUB CtrlComune

      //Luca 25/01/2021
      GOSUB CtrlPresenza_LED_368
      GOSUB TLED_CalcolaTrasformatore_368
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_X = Xr
      GEST_Y = Yr

      //Simone 14/04/2022
      GOSUB Set_Gest_C008_ModuloGlass_368

      GOSUB GestComune_Post
   }

   //Simone 14/04/2022
   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         GOSUB Set_Gest_C008_ModuloGlass_368
      }
   }

   Procedura Offset
   {
      GOSUB Offset_Modulo_368
   }

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

      COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
   }
   //Posiziona Blocco Ing
   //{
   //   GOSUB posa_blocco
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona PannelloRetro_WallPanel_368 bl
   {
      @base_0.x = base_0.x + RiePan_X
      @base_0.y = base_0.y + RiePan_Y
      @base_0.z = base_0.z
      @X = X - 2*RiePan_X
      @Y = Y - 2*RiePan_Y
      @Z = Spe_Pan

      GOSUB rivestimento
      @FIN_var = ""

      idx_pan = ATTUALE()
   }

   Posiziona Blocco lam
   {
      @base_0.x = base_0.x + RieLam_X
      @base_0.y = base_0.y + RieLam_Y
      @base_0.z = base_0.z + Spe_Pan
      @X = X - 2*RieLam_X
      @Y = Y - 2*RieLam_Y
      @Z = Spe_Lam

      FIN_var = "C028"
      GOSUB rivestimento

      idx_lam = ATTUALE()
   }

   //{ Appendini
   Posiziona BloccoSmussatoZ app1
   {
      @escluso = 1
      if( App1_PosX > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + App1_PosX + 1
      @base_0.y = base_0.y + App1_PosY + 1
      @base_0.z = base_0.z + Spe_Pan
      @X = Lar_App - 2
      @Y = Alt_App - 2
      @Z = Spe_Lam
      @R0 = Rag_App   @R1 = @R0  @R2 = @R0   @R3 = @R0
      @ang_x = 45
      GOSUB rivestimento
   }

   Posiziona BloccoSmussatoZ app2
   {
      @escluso = 1
      if( App2_PosX > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + App2_PosX + 1
      @base_0.y = base_0.y + App2_PosY + 1
      @base_0.z = base_0.z + Spe_Pan
      @X = Lar_App - 2
      @Y = Alt_App - 2
      @Z = Spe_Lam
      @R0 = Rag_App   @R1 = @R0  @R2 = @R0   @R3 = @R0
      @ang_x = 45
      GOSUB rivestimento
   }

   Posiziona BloccoSmussatoZ app3
   {
      @escluso = 1
      if( App3_PosX > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + App3_PosX + 1
      @base_0.y = base_0.y + App3_PosY + 1
      @base_0.z = base_0.z + Spe_Pan
      @X = Lar_App - 2
      @Y = Alt_App - 2
      @Z = Spe_Lam
      @R0 = Rag_App   @R1 = @R0  @R2 = @R0   @R3 = @R0
      @ang_x = 45
      GOSUB rivestimento
   }
   //} Appendini

   //{ SCASSI SU LAMIERA (massimo 3 come appendiabiti)
   Posiziona BloccoSmussatoZ_Scassa scapp1
   {
      @escluso = 1
      if( App1_PosX > 0 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App1_PosX
      @base_0.y = base_0.y + App1_PosY
      @base_0.z = base_0.z + 5
      @X = Lar_App
      @Y = Alt_App
      @Z = Z

      @Scassa_Chi_Plus = STR(idx_lam)
   }

   Posiziona BloccoSmussatoZ_Scassa scapp2
   {
      @escluso = 1
      if( App2_PosX > 0 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App2_PosX
      @base_0.y = base_0.y + App2_PosY
      @base_0.z = base_0.z + 5
      @X = Lar_App
      @Y = Alt_App
      @Z = Z

      @Scassa_Chi_Plus = STR(idx_lam)
   }

   Posiziona BloccoSmussatoZ_Scassa scapp3
   {
      @escluso = 1
      if( App3_PosX > 0 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App3_PosX
      @base_0.y = base_0.y + App3_PosY
      @base_0.z = base_0.z + 5
      @X = Lar_App
      @Y = Alt_App
      @Z = Z

      @Scassa_Chi_Plus = STR(idx_lam)
   }
   //} SCASSI SU LAMIERA

   //{ SCASSI SU PANNELLO
   //  1 in caso di Y=184
   //  1 + n_app in caso di Y = 368
   Posiziona BloccoSmussatoZ_Scassa scappl1
   {
      @escluso = 1
      if( App1_PosX > 0 & Y > 200 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App1_PosX - Mag_Foro_App
      @base_0.y = base_0.y + App1_PosY - Mag_Foro_App
      @base_0.z = base_0.z - 5
      @X = Lar_App + 2*Mag_Foro_App
      @Y = Alt_App + 2*Mag_Foro_App
      @Z = Z + 10

      @Scassa_Chi_Plus = STR(VAR_VAL(idx_pan,"idx_grafica"))
   }

   Posiziona BloccoSmussatoZ_Scassa scappl2
   {
      @escluso = 1
      if( App2_PosX > 0 & Y > 200 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App2_PosX - Mag_Foro_App
      @base_0.y = base_0.y + App2_PosY - Mag_Foro_App
      @base_0.z = base_0.z - 5
      @X = Lar_App + 2*Mag_Foro_App
      @Y = Alt_App + 2*Mag_Foro_App
      @Z = Z + 10

      @Scassa_Chi_Plus = STR(VAR_VAL(idx_pan,"idx_grafica"))
   }

   Posiziona BloccoSmussatoZ_Scassa scappl3
   {
      @escluso = 1
      if( App3_PosX > 0 & Y > 200 ) { @escluso = 0 }

      @Raggio = Rag_App

      @base_0.x = base_0.x + App3_PosX - Mag_Foro_App
      @base_0.y = base_0.y + App3_PosY - Mag_Foro_App
      @base_0.z = base_0.z - 5
      @X = Lar_App + 2*Mag_Foro_App
      @Y = Alt_App + 2*Mag_Foro_App
      @Z = Z + 10

      @Scassa_Chi_Plus = STR(VAR_VAL(idx_pan,"idx_grafica"))
   }

   Posiziona BloccoSmussatoZ_Scassa sctra
   {
      @escluso = 1
      if( Scs_Tra_X > 0 ) { @escluso = 0 }

      @Raggio = Rag_Foro_App

      @base_0.x = base_0.x + Scs_Tra_PosX
      @base_0.y = base_0.y + Scs_Tra_PosY
      @base_0.z = base_0.z - 5
      @X = Scs_Tra_X
      @Y = Scs_Tra_Y
      @Z = Z + 10

      @Scassa_Chi_Plus = STR(VAR_VAL(idx_pan,"idx_grafica"))
   }
   //} SCASSI SU LAMIERA

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

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

   //Luca 25/01/2021
   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   //Luca 25/01/2021
   Posiziona TrasformatoreLED_368 Trasd
   {
      GOSUB posa_trasformatore_368
   }
}
//} MODULI

//{ FUSTI
Elemento FustoModulo_368
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368                  ""                                        0     Implicit
      Tipo368                          ""                                        ""    Implicit

      //LZ 23/11/2021: Revisioni (cerco di non utilizzare il generico VAR_Revisione, il fusto è condiviso)
      VAR_Revisione_PenScp             ""                                        0     Implicit
      VAR_Revisione_Antiribaltamento   "Revisione impiego antiribatamento 368"   0     Implicit

      NO_GEST                          ""                                        1

      X                                "Larghezza"                               500
      Y                                "Altezza"                                 720
      Z                                "Profondita'"                             560

      VAR_Giorno                       ""                                        0

      FLAG_Fianco45                    ""                                        1

      idx_pdr                          ""                                        -1

      //{ ****** VARIABILI 368 PENSILI CUCINA ******
      VAR_ScolaPiatti                  ""                                        0
      VAR_OffY_Div                     ""                                        0     Implicit
      //} ****** VARIABILI 368 PENSILI CUCINA ******

      //{ ****** VARIABILI 368 LIVING ******
      VAR_DivVerticale                 ""                                        0     Implicit

      DivVert_X                        ""                                        19    Implicit
      PosDivVert_X                     ""                                        400   Implicit

      VAR_DivOriz                      ""                                        0     Implicit

      FLAG_CopSp38                     ""                                        0     Implicit
      Var_Anta_Opzione_Dsc             ""                                        ""    Implicit

      VAR_ConfigVani                   ""                                        0     Implicit
      VAR_Vano1_X                      ""                                        0     Implicit
      VAR_Vano2_X                      ""                                        0     Implicit
      VAR_Vano3_X                      ""                                        0     Implicit

      VAR_Vano4_X                      ""                                        0     Implicit
      VAR_Vano5_X                      ""                                        0     Implicit
      VAR_Vano6_X                      ""                                        0     Implicit
      //} ****** VARIABILI 368 LIVING ******

      FLAG_Modulo_AIR                  "Contenitore 36e8 AIR"                    0     Implicit
      PosSporgenzaAIR                  "Posizione modulo"                        0     Implicit
      ConDivisorioAIR                  "Divisorio aggiuntivo AIR"                0     Implicit
      PosDivisorioAIR                  "Pos divisorio x AIR"                     0     Implicit
      SpeDivisorioAIR                  "Spessore divisorio x AIR"                0     Implicit

      VAR_Massello_Elements            "Massello"                                0     Implicit

      Y_Rivestimento                   "H di rif per rivestimento"               368

      idx_spigolo_ad                   ""                                        -1
      idx_spigolo_as                   ""                                        -1
      idx_spigolo_bd                   ""                                        -1
      idx_spigolo_bs                   ""                                        -1

      VT_SPSP368                       "Protezioni spigolo/spigolo"              0

      VT_NRDI19                        "Numero divisori sp19"                    0
      VT_NRDI38                        "Numero divisori sp38"                    0

      M4_NO_OFFS                       ""                                        1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368
      GOSUB Cucina_2_5_Pensile_Dimensioni

      idx_pdr = PADRE(ATTUALE(),1)

      NO_GEST = 1
      if( FLAG_Moduli_368 == 1
        | $BDM_REV_Cuc_Pen_GestFusti == 1) { NO_GEST = 0 }

      FLAG_Fianco45 = 1
      if( VAR_Revisione_PenScp > 0 ) { FLAG_Fianco45 = 0 }

      Y_Rivestimento = 368
      if( Y >= 552 ) { Y_Rivestimento = 552 }
      if( Y >= 736 ) { Y_Rivestimento = 736 }
      if( VAR_OffY_Div >= 533 ) { Y_Rivestimento = 552 }
      if( VAR_OffY_Div >= 717 ) { Y_Rivestimento = 736 }

      if( ACTION() == 1
        | ACTION() == 2 )
      {
         WITH_VAR_LOCAL_LVL( ATTUALE(), 1, ATTUALE(), "VT_NRDI19", "X", $num, 1, "19", "Div*Vert*")
         WITH_VAR_LOCAL_LVL( ATTUALE(), 1, ATTUALE(), "VT_NRDI38", "X", $num, 1, "38", "Div*Vert*")
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestionaleFusto_368

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona FiancoSX_368 sp1r
   {
      @base_0 = base_0
      @base_0.y =  base_0.y + $M368_Rie_Pan

      @Y = Y - 2*$M368_Rie_Pan
      @Z = Z

      //LZ 23/11/2021
      if( VAR_Revisione_PenScp > 0 )
      {
         @Y = Y - $M368_Rie_Pan
         @base_0.y = base_0.y
      }
   }

   Posiziona FiancoDX_368 sp2r
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - $M368_Spe_Fia
      @base_0.y =  base_0.y + $M368_Rie_Pan

      @Verso = -1
      @Y = Y - 2*$M368_Rie_Pan
      @Z = Z

      //LZ 23/11/2021
      if( VAR_Revisione_PenScp > 0 )
      {
         @Y = Y - $M368_Rie_Pan
         @base_0.y = base_0.y
      }
   }

   Posiziona Fondo_368 fd1r
   {
      @escluso = 0
      if( VAR_ScolaPiatti==1 ) { @escluso = 1 }

      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @X = X - 2*$M368_Rie_Pan
      @Z = Z
   }

   Posiziona Cop_368 cop
   {
      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z

      @X = X - 2*$M368_Rie_Pan
      @Z = Z
   }

   Posiziona Schiena_368 sch1r
   {
      @FLAG_SchPiena = SE_NUM( Y < 184, 1, 0)

      wk_offy = 0
      if( VAR_ScolaPiatti == 1
        & VAR_Revisione_PenScp == 0 ) { wk_offy = $M368_Spe_BarSc }

      @X = X - 2*$M368_Spe_Fia
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop - wk_offy
      //La dimensione non cambia se coperchio sp38, viene rifilato
      //if( FLAG_CopSp38 == 1 ) { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + $M368_Spe_Fnd + wk_offy
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch - @Z
   }

   Posiziona DivisorioOrizLeg_368 divo
   {
      @escluso = SE_NUM( VAR_OffY_Div > 0, 0, 1)

      @X = X - 2*$M368_Spe_Fia
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 0.5

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + VAR_OffY_Div
      @base_0.z = base_0.z + Z - @Z

      GOSUB rivestimento
   }

   Posiziona BarraPenScPiatti_368 br
   {
      @escluso = 1 - VAR_ScolaPiatti
      if( VAR_Revisione_PenScp > 0 ) { @escluso = 1 }

      @base_0.x = base_0.x + $M368_Spe_Fia + 0.5
      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + 15
      @X = X - 2*$M368_Spe_Fia - 2*$M368_Spe_Riv
   }

   Posiziona TelaioPenScPiatti_368 tl
   {
      @escluso = 1 - VAR_ScolaPiatti
      if( VAR_Revisione_PenScp == 0 ) { @escluso = 1 }

      @X = X - 2*$M368_Spe_Fia - 2*$M368_Spe_Riv
      @Z = Z - 2

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

   Posiziona RivestSc_368 ri1r
   {
      @escluso = 1 - VAR_ScolaPiatti

      @Verso = -1

      @Y = Y_Rivestimento - $M368_Rie_Pan - $M368_Spe_Cop
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y =  base_0.y + $M368_Rie_Pan

      //LZ 23/11/2021
      if( FLAG_Fianco45 == 0 )
      {
         @Y = Y_Rivestimento - $M368_Rie_Pan - $M368_Spe_Cop + 1
         @base_0.y = base_0.y
      }
   }

   Posiziona RivestSc_368 ri2r
   {
      @escluso = 1 - VAR_ScolaPiatti

      @Verso = 1

      @Y = Y_Rivestimento - $M368_Rie_Pan - $M368_Spe_Cop
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x + X - $M368_Spe_Fia - $M368_Spe_Riv
      @base_0.y = base_0.y + $M368_Rie_Pan

      //LZ 23/11/2021
      if( FLAG_Fianco45 == 0 )
      {
         @Y = Y_Rivestimento - $M368_Rie_Pan - $M368_Spe_Cop + 1
         @base_0.y = base_0.y
      }
   }

   //Luca 21/09/2020
   //su indicazine di Enrico, il divisorio in vetro fuori fusto
   Posiziona Dummy DivVV
   {
      @escluso = 1
   }

   Posiziona DivisiorioVertLegLiv_368 DivVL
   {
      @escluso = 1
      if( VAR_DivVerticale == 2
        | VAR_DivVerticale == 3 ) { @escluso = 0 }

      if( VAR_ConfigVani >= 2 )   { @escluso = 0 }

      @base_0.x = base_0.x + PosDivVert_X

      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      //Luca 19/04/2021 riporto modifiche di LAGO
      //@Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 3 - RieZR_Div
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div - 3

      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }

      if( VAR_DivVerticale == 3 ) { @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div }

      //if( Tipo368 == "368-RIB" )
      //{
      //   if( X == 1104 )  { @base_0.x = base_0.x + $M368_Spe_Fia + 330  }
      //   if( X >= 1840 )  { @base_0.x = base_0.x + X/2 - @X/2 - 19/2 }
      //}

      //Luca 24/09/2020
      if( VAR_DivOriz == 1  ) { @Y = 184 - $M368_Spe_Fnd - $M368_Spe_DivLeg19 }

      if( VAR_ConfigVani >= 2 )
      {
         @X = $M368_Spe_DivLeg38
         @base_0.x = base_0.x + VAR_Vano1_X - $M368_Spe_DivLeg38/2
         @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch  - RieZR_Div
      }
   }

   Posiziona DivisiorioVertLegLiv_368 DivVL2
   {
      @escluso = 1
      if( VAR_ConfigVani >= 3 ) { @escluso = 0 }

      @X = $M368_Spe_DivLeg38

      @base_0.x = base_0.x + VAR_Vano1_X + VAR_Vano2_X - $M368_Spe_DivLeg38/2
      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div

      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
   }

   Posiziona DivisiorioVertLegLiv_368 DivVL3
   {
      @escluso = 1
      if( VAR_ConfigVani >= 4 ) { @escluso = 0 }

      @X = $M368_Spe_DivLeg38

      @base_0.x = base_0.x + VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X - $M368_Spe_DivLeg38/2
      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div

      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
   }

   Posiziona DivisiorioVertLegLiv_368 DivVL4
   {
      @escluso = 1
      if( VAR_ConfigVani >= 5 ) { @escluso = 0 }

      @X = $M368_Spe_DivLeg38

      @base_0.x = base_0.x + VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X - $M368_Spe_DivLeg38/2
      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div

      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
   }

   Posiziona DivisiorioVertLegLiv_368 DivVL5
   {
      @escluso = 1
      if( VAR_ConfigVani >= 6 ) { @escluso = 0 }

      @X = $M368_Spe_DivLeg38

      @base_0.x = base_0.x + VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X + VAR_Vano5_X - $M368_Spe_DivLeg38/2
      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div

      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
   }

   Posiziona DivisiorioOrizLegLiv_368 DivO
   {
      @escluso = 1
      if( VAR_DivOriz == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      //@base_0.y = base_0.y + Y/2 - $M368_Spe_DivLeg19
      @base_0.y = base_0.y + 184 - $M368_Spe_DivLeg19
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch  + RieZR_Div
      @X = X - 2*$M368_Spe_Fia
      @Y = $M368_Spe_DivLeg19
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div
   }

   Posiziona DivisiorioVertLegLiv_368 DivAIR
   {
      @escluso = 1 - ConDivisorioAIR

      @X = SpeDivisorioAIR

      @base_0.x = base_0.x + PosDivisorioAIR - @X/2
      if( PosSporgenzaAIR < 0  ) { @base_0.x = base_0.x + X - PosDivisorioAIR - @X/2 }

      @base_0.y = base_0.y + $M368_Spe_Fnd
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Div

      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      //Luca 19/04/2021 riporto modifiche di LAGO
      if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div - 3
      //Luca 19/04/2021 riporto modifiche di LAGO
      //if( FLAG_CopSp38 == 1  )    { @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38 }
       if( VAR_DivVerticale == 3 ) { @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div }
   }

   //Simone 22/06/21 - Gestisco masselli anti ribaltamento
   Posiziona MasselloBif_368 masDX
   {
      @escluso = 1
      if( VAR_Revisione_Antiribaltamento < 1 )
      {
         if( VAR_VAL_STR(idx_pdr, "GEST_C087")== "FR015" & ( VAR_Massello_Elements == 1 | VAR_Massello_Elements == 2 ) )      { @escluso = 0 }
      }

      @offX = 13
      @FLAG_Massello_Elements = 1

      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Spe_Fia + @offX
      @base_0.y = base_0.y + $M368_Spe_Fnd

      @Y = Y - $M368_Spe_Cop - $M368_Spe_Fnd
      if( FLAG_CopSp38 == 1 )
      {
        @Y = Y - $M368_Spe_Cop38 - $M368_Spe_Fnd
      }
   }

   Posiziona MasselloBif_368 masSX
   {
      @escluso = 1
      if( VAR_Revisione_Antiribaltamento < 1 )
      {
         if( VAR_VAL_STR(idx_pdr, "GEST_C087")== "FR015" & ( VAR_Massello_Elements == -1 | VAR_Massello_Elements == 2 ) )     { @escluso = 0 }
      }

      @offX = 13
      @FLAG_Massello_Elements = 1

      @base_0 = base_0
      @base_0.x = X -@X - $M368_Spe_Fia - @offX
      @base_0.y = base_0.y + $M368_Spe_Fnd

      @Y = Y - $M368_Spe_Cop - $M368_Spe_Fnd
      if( FLAG_CopSp38 == 1 )
      {
        @Y = Y - $M368_Spe_Cop38 - $M368_Spe_Fnd
      }
   }

   //Near per attivazione protezioni angolo
   Posiziona _cont_per_near ns_ad //Near Spigolo Alto-Destra
   {
      idx_spigolo_ad = ATTUALE()

      @X = 1.5 * $M368_Rie_Pan
      @Y = @X
      @Z = Z

      @base_0 = alto_3
      @base_0.x = @base_0.x - $M368_Rie_Pan
      @base_0.y = @base_0.y - $M368_Rie_Pan

      @Tipo_near = "ns_ad"
   }

   Posiziona _cont_per_near ns_as //Near Spigolo Alto-Destra
   {
      idx_spigolo_as = ATTUALE()

      @X = 1.5 * $M368_Rie_Pan
      @Y = @X
      @Z = Z

      @base_0 = alto_0
      @base_0.x = @base_0.x - @X + $M368_Rie_Pan
      @base_0.y = @base_0.y - $M368_Rie_Pan

      @Tipo_near = "ns_as"
   }

   Posiziona _cont_per_near ns_bd //Near Spigolo Alto-Destra
   {
      idx_spigolo_bd = ATTUALE()

      @X = 1.5 * $M368_Rie_Pan
      @Y = @X
      @Z = Z

      @base_0 = base_3
      @base_0.x = @base_0.x - $M368_Rie_Pan
      @base_0.y = @base_0.y - @Y + $M368_Rie_Pan

      @Tipo_near = "ns_bd"
   }

   Posiziona _cont_per_near ns_bs //Near Spigolo Alto-Destra
   {
      idx_spigolo_bs = ATTUALE()

      @X = 1.5 * $M368_Rie_Pan
      @Y = @X
      @Z = Z

      @base_0 = base_0
      @base_0.x = @base_0.x - @X + $M368_Rie_Pan
      @base_0.y = @base_0.y - @Y + $M368_Rie_Pan

      @Tipo_near = "ns_bs"
   }
}

Elemento FustoModuloGlass_368
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias FustoModuloGlass_368

   Variabili
   {
      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  ""  0 Implicit
      Tipo368          "" "" Implicit

      X  "Larghezza "   500
      Y  "Altezza "     720
      Z  "Profondita'"  560

      Zr ""             554

      ConRipiano        ""  0 Implicit
      FLAG_Orizzontale  ""  0 Implicit
      FLAG_Verticale    ""  0 Implicit

      //gestione scasso L
      VAR_GlassL_ConScasso  ""  0 Implicit
      GlassL_Scasso_Pos     "" "" Implicit
      GlassL_Scasso_X       ""  0 Implicit
      GlassL_Scasso_Y       ""  0 Implicit
      //Simone 09/02/2023
      VAR_Glass_SUV         ""  0 Implicit

      FLAG_MadiaGlass       "" 0

      //LZ 26/07/2021: 36e8 sideboard
      FLAG_Madia368         "" 0
      ConPiedini            "" 0 Implicit
      VAR_SostegnoOmega     "" 0 Implicit

      VAR_ConSchiena        "" 1 Implicit

      //LZ 31/08/2021: stampe produzione moduli 368 glass
      VAR_Esplodi_Modulo    "" 0

      HIDE "" 3
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      Zr = Z - Spe_SchV_Glass*VAR_ConSchiena

      //LZ 19/04/2021 -  Correggo posizionamento
      //PosRip1 = Y/2 - Spe_Vtr_Glass
      PosRip1 = (Y - Spe_Vtr_Glass)/2
      PosRip2 = 9999

      if( ConRipiano == 2 )
      {
         PosRip1 = 364
         PosRip2 = 732
      }

      //LZ 26/07/2021: 36e8 sideboard, ripiani simmetrici
      if( FLAG_Madia368 )
      {
         PosRip = (Y - 2 * Spe_Vtr_Glass - ConRipiano * Spe_Vtr_Glass) / (ConRipiano + 1)
         PosRip1 = Spe_Vtr_Glass + PosRip
         PosRip2 = 2 * PosRip1
      }

      //Simone 09/02/2023
      if( VAR_Glass_SUV == 1 )
      {
         PosRip1 = GlassL_Scasso_Y - Spe_Vtr_Glass
         if( IS_MATCH(GlassL_Scasso_Pos,"*AL") == 1 )
         {
            PosRip1 = Y - GlassL_Scasso_Y
         }
      }

      FIN_var_str = "C002"
      FIN_var_sch = "C048"

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         FIN_var_str = "C014"
         FIN_var_sch = "C014"

         //Simone 05/07/2022 - Glass Mirror
         if( UN_PADRE("GlassMirror") )
         {
            FIN_var_str = "C164"
            FIN_var_sch = "C163"
         }
      }

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Procedura cancella
   //{
   //   GOSUB BloccaCancellaComponente
   //}

   //PANNELLO 19 RETRO
   //Posiziona _graf_pannello_glass pan
   Posiziona PanRetroGLASS_368 pan
   {
      @base_0.x = base_0.x + Rie_PanR_Glass
      @base_0.y = base_0.y + Rie_PanR_Glass
      @base_0.z = base_0.z
      @X = X - 2*Rie_PanR_Glass
      @Y = Y - 2*Rie_PanR_Glass
      @Z = Pan_Rtr_Glass

      //LZ 26/07/2021: 36e8 sideboard
      //@escluso = FLAG_MadiaGlass
      @escluso = 0
      if( FLAG_MadiaGlass | FLAG_Madia368 ) { @escluso = 1 }
   }

   //SCHIENA STRUTTURA
   Posiziona _graf_pannello_glass sch
   {
      @escluso = 1 - VAR_ConSchiena

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Pan_Rtr_Glass

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

      FIN_var = FIN_var_str

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z
         @Z = Spe_Vtr_Glass

         FIN_var = FIN_var_sch
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         @X = X - 2*RieX_SchV_Glass
         @Y = Y - 2*RieY_SchV_Glass
         @Z = Spe_SchV_Glass

         @base_0.x = base_0.x + RieX_SchV_Glass
         @base_0.y = base_0.y + RieY_SchV_Glass
         @base_0.z = base_0.z

         @Raggio = 3
         if( UN_PADRE("GlassMirror") ) { @Raggio = 1 }

         FIN_var = FIN_var_sch
      }

      GOSUB rivestimento

      @f_rivestimento = "0.8"
      if( FLAG_MadiaGlass
        | UN_PADRE("GlassMirror") ) { @f_rivestimento = "0" }
   }

   Posiziona _graf_comp_glass fiasx
   {
      @TipoPan = "FIASX"

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Rie_Pan_Glass
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @Y = Y - 2*Rie_Pan_Glass
      @X = Spe_Vtr_Glass
      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         @Z = Zr
         //@base_0.z = base_0.z + Spe_SchV_Glass
         @base_0.z = base_0.z + Z - @Z
      }

      if( VAR_GlassL_ConScasso == 1  )
      {
         if( GlassL_Scasso_Pos == "SX-AL"
           | GlassL_Scasso_Pos == "SX-BA" ) { @Y = Y - Rie_Pan_Glass - GlassL_Scasso_Y }
         if( GlassL_Scasso_Pos == "SX-BA" ) { @base_0.y = base_0.y + GlassL_Scasso_Y }

         if( GlassL_Scasso_Pos == "SX-BA" ) { @TipoPan = STRCAT("FIASX-GL-AL") }
         if( GlassL_Scasso_Pos == "SX-AL" ) { @TipoPan = STRCAT("FIASX-GL-BA") }
      }

      FIN_var = FIN_var_str
      GOSUB rivestimento

      @f_rivestimento = "0.8"

      //LZ 31/08/2021: stampe produzione moduli 368 glass
      @STP_STAMPA = 1
      @STP_VERSO = "SX"

      @ang_y = -90 * VAR_Esplodi_Modulo
   }

   Posiziona _graf_comp_glass fiadx
   {
      @TipoPan= "FIADX"

      @base_0.x = base_0.x + X - Spe_Vtr_Glass
      @base_0.y = base_0.y + Rie_Pan_Glass
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @Verso = -1
      @Y = Y - 2*Rie_Pan_Glass
      @X = Spe_Vtr_Glass

      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         @Z = Zr
         //@base_0.z = base_0.z + Spe_SchV_Glass
         @base_0.z = base_0.z + Z - @Z
      }

      if( VAR_GlassL_ConScasso == 1  )
      {
         if( GlassL_Scasso_Pos == "DX-AL"
           | GlassL_Scasso_Pos == "DX-BA" ) { @Y = Y - Rie_Pan_Glass - GlassL_Scasso_Y }
         if( GlassL_Scasso_Pos == "DX-BA" ) { @base_0.y = base_0.y + GlassL_Scasso_Y  }

         if( GlassL_Scasso_Pos == "DX-BA" ) { @TipoPan = STRCAT("FIADX-GL-AL") }
         if( GlassL_Scasso_Pos == "DX-AL" ) { @TipoPan = STRCAT("FIADX-GL-BA") }
      }

      FIN_var = FIN_var_str
      GOSUB rivestimento

      @f_rivestimento = "0.8"

      //LZ 31/08/2021: stampe produzione moduli 368 glass
      @STP_STAMPA = 1
      @STP_VERSO = "DX"

      @ang_y = 90 * VAR_Esplodi_Modulo
      @base_0.x = @base_0.x + @X * VAR_Esplodi_Modulo
   }

   Posiziona _graf_comp_glass fnd
   {
      @TipoPan = "FON"

      @base_0.x = base_0.x + Rie_Pan_Glass
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Rie_Pan_Glass
      @Y = Spe_Vtr_Glass

      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         @Z = Zr
         //@base_0.z = base_0.z + Spe_SchV_Glass
         @base_0.z = base_0.z + Z - @Z
      }

      if( VAR_GlassL_ConScasso == 1  )
      {
         if( GlassL_Scasso_Pos == "SX-BA"
           | GlassL_Scasso_Pos == "DX-BA" ) { @X = X - Rie_Pan_Glass- GlassL_Scasso_X  }
         if( GlassL_Scasso_Pos == "SX-BA" ) { @base_0.x = base_0.x + GlassL_Scasso_X }

         if( GlassL_Scasso_Pos == "SX-BA" ) { @TipoPan = STRCAT("FON-GL-DX") }
         if( GlassL_Scasso_Pos == "DX-BA" ) { @TipoPan = STRCAT("FON-GL-SX") }
      }

      FIN_var = FIN_var_str
      GOSUB rivestimento

      @f_rivestimento = "0.8"

      //LZ 31/08/2021: stampe produzione moduli 368 glass
      @STP_STAMPA = 1
      @STP_VERSO = "DW"

      @ang_x = 90 * VAR_Esplodi_Modulo
   }

   //LZ 26/07/2021: 36e8 sideboard, pellicolatura fondo
   Posiziona Blocco pel
   {
      @escluso = 1
      if( FLAG_Madia368 )
      {
         if( ConPiedini
           | VAR_SostegnoOmega ) { @escluso = 0 }
      }

      @base_0.x = base_0.x + Rie_Pan_Glass
      @base_0.y = base_0.y - 0.1
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Rie_Pan_Glass
      @Y = Spe_Pel_Glass
      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      if( FLAG_Madia368 )
      {
         @Z = Zr
         //@base_0.z = base_0.z + Spe_SchV_Glass
         @base_0.z = base_0.z + Z - @Z
      }

      //FIN_var = FIN_var_sch
      //GOSUB rivestimento
      @c_rivestimento = $c_grafite
   }

   Posiziona _graf_comp_glass cop
   {
      @TipoPan = "COP"

      @base_0.x = base_0.x + Rie_Pan_Glass
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Rie_Pan_Glass
      @Y = Spe_Vtr_Glass

      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      if( FLAG_MadiaGlass )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_Madia368 )
      {
         @Z = Zr
         //@base_0.z = base_0.z + Spe_SchV_Glass
         @base_0.z = base_0.z + Z - @Z
      }

      if( VAR_GlassL_ConScasso == 1  )
      {
         if( GlassL_Scasso_Pos == "SX-AL"
           | GlassL_Scasso_Pos == "DX-AL" ) { @X = X - Rie_Pan_Glass- GlassL_Scasso_X }
         if( GlassL_Scasso_Pos == "SX-AL" ) { @base_0.x = base_0.x + GlassL_Scasso_X }

         if( GlassL_Scasso_Pos == "SX-AL" ) { @TipoPan = STRCAT("COP-GL-DX") }
         if( GlassL_Scasso_Pos == "DX-AL" ) { @TipoPan = STRCAT("COP-GL-SX") }
      }

      FIN_var = FIN_var_str
      //@f_rivestimento = "0.8"

      //Simone 02/09/21 - Top per comodino UPGLASS
      if( VAR_EXIST( ATTUALE(), "GEST_C099") == 1 )  { FIN_var = "C099" }

      GOSUB rivestimento
      @f_rivestimento = "0.8"

      //LZ 31/08/2021: stampe produzione moduli 368 glass
      @STP_STAMPA = 1
      @STP_VERSO = "UP"

      @ang_x = -90 * VAR_Esplodi_Modulo
      @base_0.y = @base_0.y + @Y * VAR_Esplodi_Modulo
   }


   //Posiziona SchienaGlass_368 sch2
   //{
   //   @escluso = FLAG_MadiaGlass
   //   @base_0.x = base_0.x
   //   @base_0.y = base_0.y
   //   @base_0.z = base_0.z + Pan_Rtr_Glass
   //
   //   @X = X
   //   @Z = Spe_SchV_Glass
   //   @Y = Y
   //}
   //SCHIENE DI FINITURA
   //Posiziona _graf_pannello_glass schf1
   Posiziona SchienaGlass_368 schf1
   {
      @base_0.x = base_0.x + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.y = base_0.y + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Y = Y - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Z = Spe_SchF_Glass

      if( ConRipiano >=1  )
      {
         @Y = PosRip1 - Spe_Vtr_Glass - 2*Rie_SchF_Glass
      }

      //Simone 10/02/2023
      if( VAR_Glass_SUV == 1
        & IS_MATCH(GlassL_Scasso_Pos,"*BA") == 1 )
      {
         @X = X - Spe_Vtr_Glass - Rie_SchF_Glass - GlassL_Scasso_X
         if( IS_MATCH(GlassL_Scasso_Pos,"SX*") == 1 )
         {
            @base_0.x = base_0.x + GlassL_Scasso_X
         }
      }

      @SchienaFinitura = 1

      //FIN_var = FIN_var_sch
      //GOSUB rivestimento

      //LZ 26/07/2021: 36e8 sideboard
      //Luca 15/10/2020
      //@escluso = FLAG_MadiaGlass
      @escluso = 0
      if( FLAG_MadiaGlass | FLAG_Madia368 ) { @escluso = 1 }
   }

   //Posiziona Blocco schf2
   Posiziona SchienaGlass_368 schf2
   {
      @escluso = 1
      //LZ 26/07/2021: 36e8 sideboard
      //if( ConRipiano >=1 ) { @escluso = 0 }
      if( ConRipiano >=1
        & FLAG_Madia368 == 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.y = base_0.y + PosRip1 + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Y = Y - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Z = Spe_SchF_Glass

      if( ConRipiano >=1  )
      {
         @Y = Y - PosRip1 - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      }

      if( ConRipiano == 2  )
      {
         @Y = PosRip2 - PosRip1 - Spe_Vtr_Glass - 2*Rie_SchF_Glass
      }

      //Simone 10/02/2023
      if( VAR_Glass_SUV == 1
        & IS_MATCH(GlassL_Scasso_Pos,"*AL") == 1 )
      {
         @X = X - Spe_Vtr_Glass - Rie_SchF_Glass - GlassL_Scasso_X
         if( IS_MATCH(GlassL_Scasso_Pos,"SX*") == 1 )
         {
            @base_0.x = base_0.x + GlassL_Scasso_X
         }
      }

      //FIN_var = FIN_var_sch
      //GOSUB rivestimento
   }

   //Posiziona Blocco schf3
   Posiziona SchienaGlass_368 schf3
   {
      @escluso = 1
      //LZ 26/07/2021: 36e8 sideboard
      //if( ConRipiano == 2 ) { @escluso = 0 }
      if( ConRipiano == 2
        & FLAG_Madia368 == 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.y = base_0.y + PosRip2 + Spe_Vtr_Glass + Rie_SchF_Glass
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Y = Y - PosRip2 - 2*Spe_Vtr_Glass - 2*Rie_SchF_Glass
      @Z = Spe_SchF_Glass

      //FIN_var = FIN_var_sch
      //GOSUB rivestimento
   }

   //RIPIANI
   Posiziona Blocco rip1
   {
      @escluso = 1
      if( ConRipiano >=1 ) { @escluso = 0 }

      @base_0.x = base_0.x + Spe_Vtr_Glass
      @base_0.y = base_0.y + PosRip1

      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Spe_Vtr_Glass
      @Y = Spe_Vtr_Glass
      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_MadiaGlass | FLAG_Madia368 )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      //Simone 09/02/2023
      if( VAR_GlassL_ConScasso == 1 )
      {
         @X = X - Spe_Vtr_Glass - GlassL_Scasso_X
         if( IS_MATCH(GlassL_Scasso_Pos, "SX*") == 1 )
         {
            @base_0.x = base_0.x + X - @X - Spe_Vtr_Glass
         }
      }

      FIN_var = FIN_var_str
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco rip2
   {
      @escluso = 1
      if( ConRipiano == 2 ) { @escluso = 0 }

      @base_0.x = base_0.x + Spe_Vtr_Glass
      @base_0.y = base_0.y + PosRip2
      @base_0.z = base_0.z + Spe_SchV_Glass + Pan_Rtr_Glass

      @X = X - 2*Spe_Vtr_Glass
      @Y = Spe_Vtr_Glass
      @Z = Z - Spe_SchV_Glass - Pan_Rtr_Glass

      //LZ 26/07/2021: 36e8 sideboard
      if( FLAG_MadiaGlass | FLAG_Madia368 )
      {
         @base_0.z = base_0.z + Spe_Vtr_Glass
         @Z = Z - Spe_Vtr_Glass
      }

      FIN_var = FIN_var_str
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona ScassoGlass_368 sc
   {
      @escluso = 1 - VAR_GlassL_ConScasso

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      if( GlassL_Scasso_Pos == "SX-AL"
        | GlassL_Scasso_Pos == "DX-AL" ) { @base_0.y = base_0.y + Y - GlassL_Scasso_Y }

      if( GlassL_Scasso_Pos == "DX-AL"
        | GlassL_Scasso_Pos == "DX-BA" ) { @base_0.x = base_0.x + X - GlassL_Scasso_X }

      @X = GlassL_Scasso_X
      @Y = GlassL_Scasso_Y

   }
}

Elemento FustoRaccordoAngolo_368
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  ""  0 Implicit
      Tipo368          "" "" Implicit

      ConPiedini       ""  0 Implicit

      NO_GEST        "" 1

      X  "Larghezza "   500
      Y  "Altezza "     720
      Z  "Profondita'"  560

      M4_NO_OFFS "" 1

      HIDE       "" 3
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB GestionaleFusto_368
   //
   //   GOSUB GestComune_Post
   //}

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona FiancoRAng_368 fiasx
   {
      @base_0 = base_0
      @base_0.z =  base_0.z + $M368_Rie_Pan
      @Y = Y - $M368_Rie_Pan
      @Z = Z - 2*$M368_Rie_Pan
      @TipoPan = "FIASX"
   }

   Posiziona FiancoRAng_368 fiadx
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - $M368_Spe_Fia
      @base_0.z =  base_0.z + $M368_Rie_Pan

      @Y = Y - $M368_Rie_Pan
      @Z = Z - 2*$M368_Rie_Pan

      @TipoPan = "FIADX"
   }

   Posiziona FiancoRAng_368 retro
   {
      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.z = base_0.z + $M368_Spe_Fia

      @ang_y = 90

      @Y = Y - $M368_Rie_Pan
      @Z = X - 2*$M368_Rie_Pan
      @TipoPan = "FIADX"
   }

   Posiziona FiancoRAng_368 fronte
   {
      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.z = base_0.z + Z

      @ang_y = 90

      @Y = Y - $M368_Rie_Pan
      @Z = X - 2*$M368_Rie_Pan
      @TipoPan = "FIASX"
   }

   Posiziona CopRAng_368 cop
   {
      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + $M368_Rie_Pan

      @X = X - 2*$M368_Rie_Pan
      @Z = Z - 2*$M368_Rie_Pan
   }

   //supporti piedini
   Posiziona _grafica_supp_piedini_RA_368 sp_rsx
   {
      @escluso = 1 - ConPiedini
      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $M368_Spe_Fia
   }

   Posiziona _grafica_supp_piedini_RA_368 sp_rdx
   {
      @escluso = 1 - ConPiedini
      @base_0.x = base_0.x + X - $M368_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $M368_Spe_Fia
      @ang_y = -90
   }

   Posiziona _grafica_supp_piedini_RA_368 sp_fsx
   {
      @escluso = 1 - ConPiedini
      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - $M368_Spe_Fia
      @ang_y = 90
   }

   Posiziona _grafica_supp_piedini_RA_368 sp_fdx
   {
      @escluso = 1 - ConPiedini
      @base_0.x = base_0.x + X - $M368_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z - $M368_Spe_Fia
      @ang_y = 180
   }
}

Elemento FerramentaModulo_368
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      VAR_Revisione_Miniwinch         "Revisione miniwinch ribalta 368 e Air"  0  Implicit
      //Simone 26/01/2023
      VAR_Revisione_Antiribaltamento  "Revisione impiego antiribatamento 368"  0  Implicit

      FLAG_Moduli_368                 ""                                       0  Implicit
      Tipo368                         ""                                       "" Implicit

      NO_GEST                         ""                                       1

      X                               "Larghezza"                              500
      Y                               "Altezza"                                720
      Z                               "Profondita"                             560

      ConPiedini                      ""                                       0  Implicit
      ConAttaccaglie                  ""                                       0  Implicit
      VAR_Massello_Elements           ""                                       0  Implicit

      ConSostegnoVetro                ""                                       0  Implicit
      VAR_SostegnoOmega               ""                                       0  Implicit

      VAR_DivVerticale                ""                                       0  Implicit
      VAR_ConfigVani                  ""                                       0  Implicit
      VAR_Vano1_X                     ""                                       0  Implicit
      FLAG_CopSp38                    ""                                       0  Implicit

      FLAG_PerCtg                     ""                                       0

      //variabili per gestione attaccaglie
      ATT_Tipologia                   ""                                       0
      ATT_Centrale                    ""                                       0
      ATT_Doppie                      ""                                       0

      //ATTACCAGLIE PER MADIE -- 1 per ogni divisorio
      PosDivVert1_X                   ""                                       0 Implicit
      PosDivVert2_X                   ""                                       0 Implicit
      PosDivVert3_X                   ""                                       0 Implicit
      PosDivVert4_X                   ""                                       0 Implicit
      PosDivVert5_X                   ""                                       0 Implicit

      ATT_Divisorio1                  ""                                       0
      ATT_Divisorio2                  ""                                       0
      ATT_Divisorio3                  ""                                       0
      ATT_Divisorio4                  ""                                       0
      ATT_Divisorio5                  ""                                       0

      ATT_Divisorio1_Pos              ""                                       0
      ATT_Divisorio2_Pos              ""                                       0
      ATT_Divisorio3_Pos              ""                                       0
      ATT_Divisorio4_Pos              ""                                       0
      ATT_Divisorio5_Pos              ""                                       0

      //variabili per gestione miniwinch ( 0 - no | -1 - sx | 1 - dx | 2 - sx+dx | 3 - sx+dx+cx_dx | 4 - sx+dx+cx_dx+cx_sx )
     #ifndef TEC
      Miniwinch                       ""                                       0
     #endif
     #ifdef TEC
      Miniwinch                       ""                                       0 Menu ( Ferr_368_Mw )
     #endif
      Miniwinch_std                   ""                                       0

      Massello_Sx                     "Massello vert sx"                       0
      Massello_Dx                     "Massello vert dx"                       0
      Massello_O                      "Massello orizzontale"                   0

      M4_NO_OFFS                      ""                                       1

     #ifndef TEC
      HIDE                            ""                                       1
     #endif

      VediLimiti_PCV                  ""                                       0
      FLAG_Debug                      ""                                       0  Boolean

      idx_fusto                       ""                                       -1 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368

      DescEdit__ = "FERRAMENTA"

      //Utilizzato da FO_BLOCCO
      GEST_IDXPADRE = idx_fusto
      if( IS_IDX(GEST_IDXPADRE) == 0) { GEST_IDXPADRE = idx_pdr }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_Miniwinch_Moduli_368
      GOSUB Ctrl_Attaccaglie_Moduli_368
      GOSUB Ctrl_Mas_Antirib_Moduli_368

      FLAG_PerCtg = 0
      if( VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_C087") == "FR005" ) { FLAG_PerCtg = 1 }

      FO_BLOCCO = ""
      if( Miniwinch != Miniwinch_std)
      {
         wk_mw_dsc  = VAL_MENU( "Ferr_368_Mw", Miniwinch)
         wk_mws_dsc = VAL_MENU( "Ferr_368_Mw", Miniwinch_std)
         FO_BLOCCO = STRCAT( "Miniwinch modificato manualmente da ", APICI(), wk_mws_dsc, APICI(), " a ", APICI(), wk_mw_dsc, APICI())
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //{ Gestione attaccaglie
   Posiziona Attaccaglia_368 Att1
   {
      @NrAtt = 1
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att2
   {
      @NrAtt = 2
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att3
   {
      @NrAtt = 3
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att4
   {
      @NrAtt = 4
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att5
   {
      @NrAtt = 5
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att6
   {
      @NrAtt = 6
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att7
   {
      @NrAtt = 7
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att8
   {
      @NrAtt = 8
      GOSUB PosaAttaccaglie_368
   }

   Posiziona Attaccaglia_368 Att9
   {
      @NrAtt = 9
      GOSUB PosaAttaccaglie_368
   }
   //} Gestione attaccaglie

   //LZ 22/11/2021: devo passare codice, elemento dedicato
   //{ Barra Hettich
   //Posiziona __import__ bh
   //{
   //   @escluso = 1 - FLAG_PerCtg
   //   GOSUB posa_blocco
   //   @X = X - 42
   //   @base_0.x = base_0.x + X/2
   //   @base_0.y = base_0.y + Y - 61
   //   @base_0.z = base_0.z + 10
   //
   //   if( ATT_Tipologia == 2 )
   //   {
   //      @base_0.y = base_0.y + Y - 90
   //      @base_0.z = base_0.z + 6
   //   }
   //
   //   file_sat = STRCAT($path_sat,"368\Ferramenta\BarraHettich_",STR(X-42),".sat")
   //   @import = file_sat
   //   @c_rivestimento = $c_alluminio
   //}
   //
   ////Luca 03/02/2021
   //Posiziona PCV_ContCollisioni_368 PCV2
   //{
   //   @escluso = 1
   //   if( FLAG_PerCtg > 0 ) { @escluso = 0 }
   //
   //   @Z = 30
   //   @Y = 30
   //   @X = X - 42
   //   @base_0.x = base_0.x
   //   @base_0.y = base_0.y + Y - 71
   //   @base_0.z = base_0.z + 5
   //
   //   if( ATT_Tipologia == 2 )
   //   {
   //      @base_0.y = base_0.y + Y - 90 - 12
   //      @base_0.z = base_0.z
   //   }

   Posiziona BarraHettich_368 bh
   {
      @escluso = 1 - FLAG_PerCtg

      @X = X

      @base_0 = base_0
      @base_0.y = base_0.y + Y - 71
      @base_0.z = base_0.z + 4

      if( ATT_Tipologia == 2 )
      {
         @base_0 = base_0
         @base_0.y = base_0.y + Y - 100
      }
   }

   Posiziona BarraHettich_368 bh2
   {
      @escluso = 1
      if( ATT_Doppie > 0
        & FLAG_PerCtg > 0) { @escluso = 0 }

      @X = X

      @base_0 = base_0
      @base_0.y = base_0.y + Y - 71
      @base_0.z = base_0.z + 4

      if( ATT_Tipologia == 2 )
      {
         @base_0 = base_0
         @base_0.y = base_0.y + Y - 100
      }

      @base_0.y = @base_0.y - 136
   }
   //} Barra Hettich

   //{ Piastre in caso di barra a T
   Posiziona Blocco piaTsx
   {
      @escluso = 1
      if ( ATT_Tipologia == 3 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @base_0.x = base_0.x + $M368_Spe_Fia + 0.5
      @base_0.y = base_0.y + 23.5
      @base_0.z = base_0.z + 6.5

      @X = 130
      @Y = 50
      @Z = 10

      @c_rivestimento = $c_alluminio
   }

   Posiziona PCV_ContCollisioni_368 P_piTsx
   {
      @escluso = 1
      if ( ATT_Tipologia == 3 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      aum = 10

      @base_0.x = base_0.x + $M368_Spe_Fia + 0.5 - aum/2
      @base_0.y = base_0.y + 23.5 - aum/2
      @base_0.z = base_0.z + 6.5

      @X = 130 + aum
      @Y = 50  + aum
      @Z = 30
   }

   Posiziona Blocco piaTdx
   {
      @escluso = 1
      if ( ATT_Tipologia == 3 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @base_0.x = base_0.x + X - $M368_Spe_Fia - 0.5 - 130
      @base_0.y = base_0.y + 23.5
      @base_0.z = base_0.z + 6.5
      @X = 130
      @Y = 50
      @Z = 10

      @c_rivestimento = $c_alluminio
   }

   Posiziona PCV_ContCollisioni_368 P_piTdx
   {
      @escluso = 1
      if ( ATT_Tipologia == 3 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @base_0.x = base_0.x + X - $M368_Spe_Fia - 0.5 - 130  - aum/2
      @base_0.y = base_0.y + 23.5  - aum/2
      @base_0.z = base_0.z + 6.5
      @X = 130 + aum
      @Y = 50  + aum
      @Z = 30
   }
   //} Piastre in caso di barra a T

   //Simone 22/09/2022 - Pannello fix a Pentagram
   Posiziona Blocco P_Pent
   {
      @escluso = 1
      if( ATT_Tipologia == 5 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @X = X - $M368_Spe_Fia*2 - 4
      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop - 4
      @Z = 16

      @base_0 = base_0
      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + $M368_Spe_Fnd + 2
   }

   //{ Gestione miniwinch
   Posiziona Miniwinch_368 MWSX
   {
      @escluso = 1
      if( Miniwinch < 0
        | Miniwinch >= 2) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @VAR_Posizione = -1
      @base_0.x = base_0.x + $M368_Spe_Fia

      GOSUB PosaMiniwinch_368
   }

   Posiziona Miniwinch_368 MWDX
   {
      @escluso = 1
      if( Miniwinch >= 1) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @VAR_Posizione = 1

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

      GOSUB PosaMiniwinch_368
   }

   Posiziona Miniwinch_368 MWCNDX
   {
      @escluso = 1
      if( Miniwinch >= 3 ) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @VAR_Posizione = -1

      @base_0.x = base_0.x + X/2

      if( VAR_DivVerticale == 2 ) { @base_0.x = base_0.x + X/2 + $M368_Spe_DivLeg19           }
      if( VAR_DivVerticale == 3 ) { @base_0.x = base_0.x + X/2 + $M368_Spe_DivLeg38           }

      if( X == 1104 )             { @base_0.x = base_0.x + $M368_Spe_Fia + 330                }
      if( X >= 1840 )             { @base_0.x = base_0.x + X/2 + $M368_Spe_DivLeg19/2         }

      if( VAR_ConfigVani == 2 )   { @base_0.x = base_0.x + VAR_Vano1_X + $M368_Spe_DivLeg38/2 }

      GOSUB PosaMiniwinch_368
   }

   //TODO: ferramenta legata all'anta
   Posiziona Miniwinch_368 MWCNSX
   {
      @escluso = 1
      if( Miniwinch >= 4
        & VAR_ConfigVani == 2) { @escluso = 0 }

      @HIDE = VAR_VAL( idx_att, "HIDE")

      @VAR_Posizione = 1

      @base_0.x = base_0.x + VAR_Vano1_X - $M368_Spe_DivLeg38/2 - @X

      GOSUB PosaMiniwinch_368
   }
   //} Gestione miniwinch

   //Simone 26/01/2023 - Nuova gestione masselli antiribaltamento
   //                    Posizione rispetto retro contenitore
   Posiziona Massello_Antiribaltamento mas_SX
   {
      @escluso = 1
      if( ATT_Tipologia == 6 & Massello_Sx == 1 ) { @escluso = 0 }

      @Pos_massello = -1

      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      if( FLAG_CopSp38 == 1 )
      {
         @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38
      }

      @base_0 = base_0
      @base_0.x = base_0.x + X - $M368_Spe_Fia - @X - @OffX
      @base_0.y = base_0.y + $M368_Spe_Fnd
   }

   Posiziona Massello_Antiribaltamento mas_DX
   {
      @escluso = 1
      if( ATT_Tipologia == 6 & Massello_Dx == 1 ) { @escluso = 0 }

      @Pos_massello = 1

      @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop
      if( FLAG_CopSp38 == 1 )
      {
         @Y = Y - $M368_Spe_Fnd - $M368_Spe_Cop38
      }

      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Spe_Fia + @OffX
      @base_0.y = base_0.y + $M368_Spe_Fnd
   }

   Posiziona Massello_Antiribaltamento mas_ORI
   {
      @escluso = 1
      if( ATT_Tipologia == 6 & Massello_O == 1 ) { @escluso = 0 }

      @Pos_massello = 0

      @X = X - 2*$M368_Spe_Fia

      @base_0 = base_0
      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + Y - $M368_Spe_Cop - @OffY - @Y
      if( FLAG_CopSp38 == 1 )
      {
         @base_0.y = base_0.y + Y - $M368_Spe_Cop38 - @OffY - @Y
      }
   }

   Posiziona Dbg dbg
   {
      GOSUB posa_blocco
   }
}

Elemento FustoModuloCappa_368
{
   Descrizione = "Fusto per base standard"
   Code        = BBSS
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_PenCpp   ""                                    0     Implicit

      X                      "Larghezza "                          500
      Y                      "Altezza "                            720
      Z                      "Profondita'"                         560

      NO_GEST                ""                                    1

      VAR_Cappa              ""                                    1     Implicit

      FLAG_Fianco45          ""                                    1     Implicit

      TipoPenCappa           ""                                    0     Implicit
      Cmp_TipoPenCappa       ""                                    -1    Implicit

      VAR_LarScasso          ""                                    0
      VAR_PrfScasso          ""                                    0
      VAR_DiamScasso         ""                                    0

      VAR_ConScassoCop       ""                                    0     Implicit
      VAR_ConScassoSch       ""                                    0     Implicit
      Posizione_ScassoSch    ""                                    0     Implicit

      Rip_1                  "Ripiano - 1"                         0     Implicit
      Rip_2                  "Ripiano - 2"                         0     Implicit

      Rip_Vano1_DimY         "Ripiano - Vano - Altezza"            349   Implicit
      Rip_Vano3_DimY         "Ripiano - Vano - Altezza"            349   Implicit
      Rip_Vano2_Var_DimY     "Ripiano - Vano - Altezza"            165   Implicit

      Rip_Scs_Var_PosX       "Ripiano - Scasso - Posizione in X"   500   Implicit
      Rip_Scs_Var_PosZ       "Ripiano - Scasso - Posizione in Z"   100   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      NO_GEST = 1
      if( $BDM_REV_Cuc_Pen_GestFusti == 1  ) { NO_GEST = 0 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestionaleFusto_368

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona FiancoSX_368 sp1r
   {
      @base_0 = base_0
      @base_0.y =  base_0.y + $M368_Rie_Pan

      @Y = Y - 2*$M368_Rie_Pan
      @Z = Z

      if( FLAG_Fianco45 == 0)
      {
         @base_0.y =  base_0.y
         @Y = Y - $M368_Rie_Pan
      }
   }

   Posiziona FiancoDX_368 sp2r
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - $M368_Spe_Fia
      @base_0.y =  base_0.y + $M368_Rie_Pan

      @Verso = -1
      @Y = Y - 2*$M368_Rie_Pan
      @Z = Z

      if( FLAG_Fianco45 == 0)
      {
         @base_0.y =  base_0.y
         @Y = Y - $M368_Rie_Pan
      }
   }

   Posiziona Cop_368 cop
   {
      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z

      @X = X - 2*$M368_Rie_Pan
      @Z = Z
      @VAR_Cappa = 1

      @VAR_DiamScasso = VAR_DiamScasso
   }

   Posiziona FondoCappa_368 fon
   {
      @escluso = 1
      if( TipoPenCappa == 1) { @escluso = 0 }

      wk_x_fnd  = X - 2*$M368_Rie_Pan
      RieScs_SX = (wk_x_fnd - VAR_LarScasso)/2
      RieScs_DX = RieScs_SX
      RieScs_RT = (Z - VAR_PrfScasso)/2
      RieScs_FR = RieScs_RT

      @base_0.x = base_0.x + $M368_Rie_Pan
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      @X = wk_x_fnd
      @Z = Z

      @RieScs_SX = RieScs_SX
      @RieScs_DX = RieScs_DX
      @RieScs_RT = RieScs_RT
      @RieScs_FR = RieScs_FR
   }

   Posiziona DivOrizLegCappa_368 rip1
   {
      @escluso = 1 - Rip_1

      if( TipoPenCappa == 0 ) { @VAR_Carter = 1 }

      //Simone 06/12/21
      @ConForo = 0
      if( VAR_ConScassoCop > 0 | VAR_ConScassoSch > 0 ) { @ConForo = 1 }

      @X = X - 2*$M368_Spe_Fia
      @Y = Rip_Vano2_Var_DimY
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 0.5

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + Rip_Vano1_DimY
      @base_0.z = base_0.z + Z - @Z
   }

   Posiziona DivOrizLegCappa_368 rip2
   {
      @escluso = 1 - Rip_2

      if( TipoPenCappa == 0 ) { @VAR_Carter = 1 }

      //Simone 06/12/21
      @ConForo = 0
      if( VAR_ConScassoCop > 0 )        { @ConForo = 1 }
      if( VAR_ConScassoSch > 0 )
      {
         if( Posizione_ScassoSch == 2 ) { @ConForo = 1 }
         //Simone 28/06/2022 - Con VAR_Carter == 2 escludo il carter superiore se lo scasso sulla schiena si trova in basso
         if( VAR_ConScassoCop == 0
           & Posizione_ScassoSch == 1 ) { @VAR_Carter = 2 }
      }

      @X = X - 2*$M368_Spe_Fia
      @Y = Rip_Vano3_DimY
      @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 0.5

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + Y - $M368_Spe_Cop - Rip_Vano3_DimY - $M368_Spe_DivLeg19
      @base_0.z = base_0.z + Z - @Z
   }

   Posiziona ProfiloPenCappaSlitta_368 prf_r
   {
      @escluso = 1
      if( TipoPenCappa==2 ) { @escluso = 0 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X - 2*$M368_Spe_Fia
   }

   Posiziona BarraPenCappaSlitta_368 bar_f
   {
      @escluso = 1
      if( TipoPenCappa == 2
        & Cmp_TipoPenCappa != 0) { @escluso = 0 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + 2.25
      @base_0.z = base_0.z + Z - 67.5 - @Z
      @X = X - 2*$M368_Spe_Fia
   }

   Posiziona Schiena_368 sch1r
   {
      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + 31.5
      @base_0.z = base_0.z + $M368_Rie_Sch_ZR

      @X = X - 2*$M368_Spe_Fia
      @Y = Y - $M368_Spe_Cop - 31.5

      //Simone 03/12/21
      @VAR_Cappa = 0
      if( TipoPenCappa == 0
        & ( VAR_Revisione_PenCpp > 0 | Cucina_Versione > 2 ) ) { @VAR_Cappa = 1 }

      //Luca 23/04/2020
      if( TipoPenCappa==1 )
      {
         @base_0.y = base_0.y + $M368_Spe_Fnd
         @Y = Y - $M368_Spe_Cop - $M368_Spe_Fnd
      }

      //Luca 14/05/2020
      if( TipoPenCappa==2 )
      {
         @base_0.y = base_0.y
         @Y = Y - $M368_Spe_Cop
      }
   }

   Posiziona SchienaPenCappaSlitta_368 sch2r
   {
      @escluso = 1
      if( TipoPenCappa==2 ) { @escluso = 0 }

      @base_0.x = base_0.x + $M368_Spe_Fia
      @base_0.y = base_0.y + 20.5
      @base_0.z = base_0.z + 38

      @X = X - 2*$M368_Spe_Fia
      @Y = Y - $M368_Spe_Cop - 20 - 0.5 - 1.5
      @Z = 16
   }

   //Posiziona Cappa cap
   //{
   //   @base_0.x = base_0.x + $M368_Spe_Fia
   //   @base_0.y = base_0.y + $M368_Spe_Fnd
   //   @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch
   //
   //   @X = X - 2*$M368_Spe_Fia
   //   @Z = Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - 20
   //}

   //Posiziona CarterCappa_368 cc
   //{
   //   @base_0.x = base_0.x + X/2 - @X/2
   //   @base_0.y = base_0.y + 50 + $M368_Spe_Fnd
   //   @base_0.z = base_0.z + $M368_Rie_Sch_ZR + $M368_Spe_Sch
   //
   //   @Y = 277
   //   if( Y>500 )  { @Y = 411 }
   //}
   Posiziona Dummy cc
   {
      @base_0 = base_0
   }
}
//} FUSTI

//{ COMPONENTI
// { COMPONENTI 368 GENERICI
Elemento GruppoPiedini_368
{
   Descrizione = "Piedini per Terminale"
   Code        = ZOC0
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "" 600
      Y               "" 100
      Z               "" 300

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

      //LZ 26/07/2021: 36e8 sideboard
      Alt_Pie  ""                        0
      Dia_Pie  ""                        0

      Lar_Pia  ""                        0
      Alt_Pia  ""                        0
      Prof_Pia ""                        0

      //al massimo 5 divisori + air
      PieDiv1 "" 0
      PieDiv2 "" 0
      PieDiv3 "" 0
      PieDiv4 "" 0
      PieDiv5 "" 0
      PieDivA "" 0

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

      //perRADICE   ""  ""
      //RADICE      ""  ""

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      //Default
      Cuc_Dia_Pie  = $Cuc_Dia_Pie
      Rie_Sx   = 33
      Rie_Dx   = 33
      Rie_Fr   = 26
      Rie_Rt   = 48

      PieDiv1 = 0
      PieDiv2 = 0
      PieDiv3 = 0
      PieDiv4 = 0
      PieDiv5 = 0
      PieDivA = 0

      if( VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-CAS"
        | VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-CES"  )
      {
         Rie_Sx  = 58
         Rie_Dx  = 58
      }

      if( UN_PADRE("ModuloRaccordoAngolo_368") )
      {
         Rie_Sx   = 32
         Rie_Dx   = 32
         Rie_Fr   = 32
         Rie_Rt   = 32

         EXITSUB()
      }

      //LZ 26/07/2021: 36e8 sideboard
      if( VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-GLS" )
      {
         Rie_Sx  = 55
         Rie_Dx  = 55
         Rie_Fr  = 55
         Rie_Rt  = 55

         Alt_Pie = 7

         Alt_Pia = 8
         Lar_Pia = 100
         Prof_Pia = 100

         EXITSUB()
      }

      //Divisori
      ///Divisorio verticale in centro
      wk_div    = VAR_VAL(PADRE(ATTUALE(),1),"VAR_DivVerticale")
      wk_div_px = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert_X")
      wk_meta   = X/2

      if( wk_div > 0 )
      {
         PieDiv1 = X/2

         //vetro
         if( wk_div==1 )
         {
            if( wk_div_px < wk_meta ) { PieDiv1 = wk_div_px + $M368_Spe_Div + 14 }
            else                      { PieDiv1 = wk_div_px - 14 }
         }
         //sp.19
         if( wk_div==2 )
         {
            if( wk_div_px < wk_meta ) { PieDiv1 = wk_div_px + $M368_Spe_DivLeg19 + 14  }
            else                      { PieDiv1 = wk_div_px - 14   }
         }
         //sp.38
         if( wk_div==3 )
         {
            if( wk_div_px < wk_meta ) { PieDiv1 = wk_div_px + $M368_Spe_DivLeg38 + 39 }
            else                      { PieDiv1 = wk_div_px - 39  }
         }
      }

      ///Divisori vani
      wk_conf    = VAR_VAL(PADRE(ATTUALE(),1),"VAR_ConfigVani")
      if( wk_conf > 1 )
      {
         wk_div_px1 = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert1_X")
         if( wk_div_px1 > 0 )
         {
            if( wk_div_px1 < wk_meta ) { PieDiv1 = wk_div_px1 + $M368_Spe_DivLeg38 + 39 }
            else                       { PieDiv1 = wk_div_px1 - 39  }
         }
         wk_div_px2 = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert2_X")
         if( wk_div_px2 > 0 )
         {
            if( wk_div_px2 < wk_meta ) { PieDiv2 = wk_div_px2 + $M368_Spe_DivLeg38 + 39 }
            else                       { PieDiv2 = wk_div_px2 - 39  }
         }
         wk_div_px3 = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert3_X")
         if( wk_div_px3 > 0 )
         {
            if( wk_div_px3 < wk_meta ) { PieDiv3 = wk_div_px3 + $M368_Spe_DivLeg38 + 39 }
            else                       { PieDiv3 = wk_div_px3 - 39  }
         }
         wk_div_px4 = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert4_X")
         if( wk_div_px4 > 0 )
         {
            if( wk_div_px4 < wk_meta ) { PieDiv4 = wk_div_px4 + $M368_Spe_DivLeg38 + 39 }
            else                       { PieDiv4 = wk_div_px4 - 39  }
         }
         wk_div_px5 = VAR_VAL(PADRE(ATTUALE(),1),"PosDivVert5_X")
         if( wk_div_px5 > 0 )
         {
            if( wk_div_px5 < wk_meta ) { PieDiv5 = wk_div_px5 + $M368_Spe_DivLeg38 + 39 }
            else                       { PieDiv5 = wk_div_px5 - 39  }
         }
      }

      //Divisorio air
      wk_air    = VAR_VAL(PADRE(ATTUALE(),1),"ConDivisorioAIR")

      if( wk_air > 0 )
      {
         wk_air_px = VAR_VAL(PADRE(ATTUALE(),1),"PosDivisorioAIR")
         wk_air_ds = VAR_VAL(PADRE(ATTUALE(),1),"PosSporgenzaAIR")
         wk_air_sp = VAR_VAL(PADRE(ATTUALE(),1),"SpeDivisorioAIR")

         PieDivA = X/2

         if( wk_air_ds < 0 ) { PieDivA = X - wk_air_px + wk_air_sp/2 + 14 }
         if( wk_air_ds > 0 ) { PieDivA = wk_air_px - wk_air_sp/2 - 14 }

         if( wk_air_sp == 38 )
         {
            if( wk_air_ds < 0 ) { PieDivA = X - wk_air_px + wk_air_sp/2 + 39 }
            if( wk_air_ds > 0 ) { PieDivA = wk_air_px - wk_air_sp/2 - 39 }
         }

         //Simone 20/01/2023 - Unica eccezione ribalta air L.2208:
         //                    i piedini del div. agg. devono essere spostati per evitare la cerniera dell'anta
         if( VAR_VAL_STR(PADRE(ATTUALE(),1),"Tipo368") == "368-RIB"
           & VAR_VAL(PADRE(ATTUALE(),1),"X") == 2208                )
         {
            if( wk_air_ds < 0 ) { PieDivA = X - wk_air_px - wk_air_sp/2 - 14 }
            if( wk_air_ds > 0 ) { PieDivA = wk_air_px + wk_air_sp/2 + 14 }
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB GestComune_Post
   //}

   //{ SX
   Posiziona Cuc_piedino p1
   {
      GOSUB PosaPiedino
      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      if( X<150 ) {  @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 }

      //LZ 26/07/2021: 36e8 sideboard
      @Y = Y - Alt_Pia
      if( Alt_Pie > 0 ) { @alt1 = Alt_Pie }

      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino p2
   {
      GOSUB PosaPiedino
      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      if( X<150 ) {  @base_0.x = base_0.x + X/2 - Cuc_Dia_Pie/2 }

      //LZ 26/07/2021: 36e8 sideboard
      @Y = Y - Alt_Pia
      if( Alt_Pie > 0 ) { @alt1 = Alt_Pie }

      @rag1 = Cuc_Dia_Pie
   }

   //LZ 26/07/2021: 36e8 sideboard
   Posiziona Blocco b1
   {
      @escluso = SE_NUM( Alt_Pia > 0, 0, 1)

      @X = Lar_Pia
      @Y = Alt_Pia
      @Z = Prof_Pia

      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco b2
   {
      @escluso = SE_NUM( Alt_Pia > 0, 0, 1)

      @X = Lar_Pia
      @Y = Alt_Pia
      @Z = Prof_Pia

      @base_0.x = base_0.x + Rie_Sx - Cuc_Dia_Pie/2
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + Z - Rie_Fr + Cuc_Dia_Pie/2 - @Z

      @c_rivestimento = $c_nero
   }
   //} SX

   //{ DX
   Posiziona Cuc_piedino p3
   {
      @escluso = 1  if ( X>=150 ) {  @escluso=0  }
      GOSUB PosaPiedino
      @base_0.x = base_0.x + X - Rie_Dx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2

      //LZ 26/07/2021: 36e8 sideboard
      @Y = Y - Alt_Pia
      if( Alt_Pie > 0 ) { @alt1 = Alt_Pie }

      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino p4
   {
      @escluso = 1  if ( X>=150 ) {  @escluso=0  }
      GOSUB PosaPiedino

      @base_0.x = base_0.x + X - Rie_Dx - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2

      //LZ 26/07/2021: 36e8 sideboard
      @Y = Y - Alt_Pia
      if( Alt_Pie > 0 ) { @alt1 = Alt_Pie }

      @rag1 = Cuc_Dia_Pie
   }

   //LZ 26/07/2021: 36e8 sideboard
   Posiziona Blocco b3
   {
      @escluso = SE_NUM( Alt_Pia > 0, 0, 1)

      @X = Lar_Pia
      @Y = Alt_Pia
      @Z = Prof_Pia

      @base_0.x = base_0.x + X - Rie_Dx + Cuc_Dia_Pie/2 - @X
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + Z - Rie_Fr + Cuc_Dia_Pie/2 - @Z

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco b4
   {
      @escluso = SE_NUM( Alt_Pia > 0, 0, 1)

      @X = Lar_Pia
      @Y = Alt_Pia
      @Z = Prof_Pia

      @base_0.x = base_0.x + X - Rie_Dx + Cuc_Dia_Pie/2 - @X
      @base_0.y = alto_0.y - @Y
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2

      @c_rivestimento = $c_nero
   }
   //} DX

   //{ DIV1
   Posiziona Cuc_piedino d1r
   {
      @escluso = SE_NUM(PieDiv1>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv1 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d1f
   {
      @escluso = SE_NUM(PieDiv1>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv1 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV1

   //{ DIV2
   Posiziona Cuc_piedino d2r
   {
      @escluso = SE_NUM(PieDiv2>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv2 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d2f
   {
      @escluso = SE_NUM(PieDiv2>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv2 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV2

   //{ DIV3
   Posiziona Cuc_piedino d3r
   {
      @escluso = SE_NUM(PieDiv3>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv3 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d3f
   {
      @escluso = SE_NUM(PieDiv3>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv3 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV3

   //{ DIV4
   Posiziona Cuc_piedino d4r
   {
      @escluso = SE_NUM(PieDiv4>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv4 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d4f
   {
      @escluso = SE_NUM(PieDiv4>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv4 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV4

   //{ DIV5
   Posiziona Cuc_piedino d5r
   {
      @escluso = SE_NUM(PieDiv5>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv5 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino d5f
   {
      @escluso = SE_NUM(PieDiv5>0, 0 , 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDiv5 - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV5

   //{ DIV AIR
   Posiziona Cuc_piedino dar
   {
      @escluso = SE_NUM(PieDivA>0, 0, 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDivA - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Rie_Rt - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino daf
   {
      @escluso = SE_NUM(PieDivA>0, 0, 1)

      GOSUB PosaPiedino
      @base_0.x = base_0.x + PieDivA - Cuc_Dia_Pie/2
      @base_0.z = base_0.z + Z - Rie_Fr - Cuc_Dia_Pie/2
      @rag1 = Cuc_Dia_Pie
   }
   //} DIV AIR
}

Elemento FiancoSX_368
{
   Descrizione = "Fianco sx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elemen9i 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 18
      Y "" 1
      Z "" 1

      Verso "" -1

      //{ ****** VARIABILI 368 PENSILI CUCINA ******
      FLAG_Fianco45 "" 1 Implicit
      //} ****** VARIABILI 368 PENSILI CUCINA ******

      idx_near    ""  -1

      FIN_var     ""  "C032"
      //FIN_orie    ""  "O"
      FIN_orie    ""  "V"


      perRADICE   ""  ""
      RADICE      ""  ""

      COD_EREDITA      ""      "PRE;POST"

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif
      VAR_Side_cmp        "Elemento side"    0

      VediLimiti_PCV      ""  0 Implicit

      //VARIABILI TECNICHE
      //VT_GV_3630  "Numero giunzioni vert. 368-30MM" 0
      VT_GV_3636     "Numero giunzioni vert. 368-368 d.5"  0
      VT_GV_3636_D8  "Numero giunzioni vert. 368-368 d.8"  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $M368_Spe_Fia

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 20.10.2020 per MdF_Sat. In pratica su tutti gli archetipi se *Fia* e CamInciso
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      //vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ContaGiunzioni_368

      GOSUB GetRegola_Componenti_Elements

      perRADICE = "FNS36"

      //Luca 14/05/2020
      if( FLAG_Fianco45==0 )
      {
         perRADICE = "FNS36CS"
         if( UN_PADRE("ModuloPensileScPiatti_368") ) { perRADICE = "FNSCSX" }
      }

      RADICE = perRADICE
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C009_CmpModulo_368
      GOSUB Set_Gest_C187_CmpModulo_368

      //Luca 01/12/2020
      GOSUB SetGest_ComponenteSide_368

      GOSUB GestComune_Post
   }

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

         if( FLAG_Moduli_368 == 1 ) { GOSUB SetGest_ComponenteSide_368 }
         else                       { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) ) }

         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_pannello_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = "FIASX"

      //Luca 14/05/2020 fianco pensile slitta no 45 sotto
      if( FLAG_Fianco45==0 ) { @TipoPan = "FIASX_PS" }

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento
   }

   //profilo inferiore
   Posiziona Blocco pinf
   {
      @escluso = 0
      if( UN_PADRE("ModuloPensileScPiatti_368") ) { @escluso = 1 }
      if( UN_PADRE("ModuloPensileCappa_368") )
      {
         if( VAR_VAL(PADRE(idx_att,1),"TipoPenCappa") != 1 ) { @escluso = 1 }
      }

      @X = 1.24
      @Y = 24.55
      @Z = Z
      @base_0.x = base_0.x + 1.64
      @base_0.y = base_0.y - 0.47
      @base_0.z = base_0.z
      @ang_z = -45
      @c_rivestimento = $c_alluminio
   }

   //profilo superiore
   Posiziona Blocco psup
   {
      @X = 1.24
      @Y = 24.55
      @Z = Z
      @base_0.x = base_0.x + 2.53
      @base_0.y = base_0.y + Y + 1.36
      @base_0.z = base_0.z
      @ang_z = -135
      @c_rivestimento = $c_alluminio
   }

   //{ CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO
   Posiziona PCV_ContCollisioni_368 cfdw
   {
      limite = 42

      @X = X*2
      @Y = limite
      @Z = Z

      @base_0 = base_0
      @base_0.x = base_0.x - @X/2

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfup
   {
      limite = 42

      @X = X*2
      @Y = limite
      @Z = Z

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfrt
   {
      limite = 45

      @X = X*2
      @Y = Y
      @Z = limite

      @base_0 = base_0
      @base_0.x = base_0.x - @X/2

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cffr
   {
      limite = 45

      @X = X*2
      @Y = Y
      @Z = limite

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368L
   {
      @escluso = 0
      GOSUB G368_PosaGrLavorazione

      //Simone 23/09/2022 - No giunzioni tra cont se figli di libreria Pentagram
      if( UN_PADRE("LibreriaPentagram_LP22") )
      {
         wk_idx_pdr = GetTopLevel(idx_att)
         wk_verso_pdr = VAR_VAL(wk_idx_pdr,"Verso")

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

   Posiziona G368_ContCollisioni G368CDW
   {
      @X = X
      @Y = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Z = Z

      @base_0 = base_0

      @Posizione = "DW"
   }

   Posiziona G368_ContCollisioni G368CUP
   {
      @X = X
      @Y = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Z = Z

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

      @Posizione = "UP"
   }

   Posiziona G368_ContCollisioni G368CRT
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

      @base_0 = base_0

      @Posizione = "RT"
   }

   Posiziona G368_ContCollisioni G368CFR
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

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

      @Posizione = "FR"
   }
   #endif
}

Elemento FiancoDX_368
{
   Descrizione = "Fianco dx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 18
      Y "" 1
      Z "" 1

      Verso "" 1

      //{ ****** VARIABILI 368 PENSILI CUCINA ******
      FLAG_Fianco45 "" 1 Implicit
      //} ****** VARIABILI 368 PENSILI CUCINA ******

      idx_near    ""  -1

      FIN_var     ""  "C032"
      //FIN_orie    ""  "O"
      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  ""

      COD_EREDITA      ""      "PRE;POST"

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif
      VAR_Side_cmp        "Elemento side"    0

      VediLimiti_PCV      ""  0 Implicit

      //VARIABILI TECNICHE
      //VT_GV_3630  "Numero giunzioni vert. 368-30MM" 0
      VT_GV_3636     "Numero giunzioni vert. 368-368 d.5"  0
      VT_GV_3636_D8  "Numero giunzioni vert. 368-368 d.8"  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $M368_Spe_Fia

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 20.10.2020 per MdF_Sat
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      //vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ContaGiunzioni_368

      GOSUB GetRegola_Componenti_Elements

      perRADICE = "FND36"

      //Luca 14/05/2020
      if( FLAG_Fianco45==0 )
      {
         perRADICE = "FND36CS"
         if( UN_PADRE("ModuloPensileScPiatti_368") ) { perRADICE = "FNSCDX" }
      }

      RADICE = perRADICE
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C009_CmpModulo_368
      GOSUB Set_Gest_C187_CmpModulo_368

      //Luca 01/12/2020
      GOSUB SetGest_ComponenteSide_368

      GOSUB GestComune_Post
   }

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

         if( FLAG_Moduli_368 == 1 ) { GOSUB SetGest_ComponenteSide_368 }
         else                       { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) ) }

         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Posiziona _grafica_pannello_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = "FIADX"

      //Luca 14/05/2020 fianco pensile slitta no 45 sotto
      if( FLAG_Fianco45==0 ) { @TipoPan = "FIADX_PS" }

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento
   }

   //profilo inferiore
   Posiziona Blocco pinf
   {
      @escluso = 0
      if( UN_PADRE("ModuloPensileScPiatti_368") ) { @escluso = 1 }
      if( UN_PADRE("ModuloPensileCappa_368") )
      {
         if( VAR_VAL(PADRE(idx_att,1),"TipoPenCappa") != 1 ) { @escluso = 1 }
      }

      @X = 1.24
      @Y = 24.55
      @Z = Z
      @base_0.x = base_0.x - 0.05
      @base_0.y = base_0.y + 16.93
      @base_0.z = base_0.z
      @ang_z = -135
      @c_rivestimento = $c_alluminio
   }
   //profilo superiore
   Posiziona Blocco psup
   {
      @X = 1.24
      @Y = 24.55
      @Z = Z
      @base_0.x = base_0.x - 0.93
      @base_0.y = base_0.y + Y - 16.05
      @base_0.z = base_0.z
      @ang_z = -45
      @c_rivestimento = $c_alluminio
   }

   //{ CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO
   Posiziona PCV_ContCollisioni_368 cfdw
   {
      limite = 42

      @X = X*2
      @Y = limite
      @Z = Z

      @base_0 = base_0

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfup
   {
      limite = 42

      @X = X*2
      @Y = limite
      @Z = Z

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfrt
   {
      limite = 45

      @X = X*2
      @Y = Y
      @Z = limite

      @base_0 = base_0

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cffr
   {
      limite = 45

      @X = X*2
      @Y = Y
      @Z = limite

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_FIA == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368L
   {
      @escluso = 0
      GOSUB G368_PosaGrLavorazione

      //Simone 23/09/2022 - No giunzioni tra cont se figli di libreria Pentagram
      if( UN_PADRE("LibreriaPentagram_LP22") )
      {
         wk_idx_pdr = GetTopLevel(idx_att)
         wk_verso_pdr = VAR_VAL(wk_idx_pdr,"Verso")

         if( wk_verso_pdr == -1 ) { @escluso = 1 }
      }
   }

   Posiziona G368_ContCollisioni G368CDW
   {
      @X = X
      @Y = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Z = Z

      @base_0 = base_0

      @Posizione = "DW"
   }

   Posiziona G368_ContCollisioni G368CUP
   {
      @X = X
      @Y = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Z = Z

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

      @Posizione = "UP"
   }

   Posiziona G368_ContCollisioni G368CRT
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

      @base_0 = base_0

      @Posizione = "RT"
   }

   Posiziona G368_ContCollisioni G368CFR
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

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

      @Posizione = "FR"
   }
   #endif
}

Elemento Fondo_368
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368       ""                                   0    Implicit

      X                     ""                                   1
      Y                     ""                                   1
      Z                     ""                                   1

      idx_bl2               ""                                   -1

      FIN_var               ""                                   "C032"
      FIN_orie              ""                                   "O"

      perRADICE             ""                                   ""
      RADICE                ""                                   ""

      COD_EREDITA           ""                                   "PRE;POST"

      //Luca 27/01/2021
      //verifico se c'è un push inserito sul coperchio
      FLAG_ConPushPull      ""                                   0

      FLAG_Cassetto         ""                                   0    Implicit
      FLAG_Cestone          ""                                   0    Implicit

      VediLimiti_PCV        ""                                   0    Implicit

      //Simone 28/06/2022
      Scasso_Cappa          "Foro per cappa"                     0    Boolean

     #ifdef TEC
      VAR_Regola_Elements   "Config.Elements"                    ""   Utente   (   )
     #endif
     #ifndef TEC
      VAR_Regola_Elements   ""                                   ""
     #endif
      VAR_Side_cmp          "Elemento side"                      0

      //VARIABILI TECNICHE
      VT_NGO                "Numero giunzioni orizzontali"       0

      //LZ 07/09/2021: vt per omega e moduli su omega
      VT_NRFIXOMG           "Omega - Numero viti fissaggio"      0
      VT_NRREGPL            "Omega - Numero grani regolazione"   0
      VT_NRGMB              "Omega - Numero gambe per modulo"    0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Modello

      Y = $M368_Spe_Fnd

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB Cucina_Versione

      // Vani
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      /// Vano illuminazione fondo cucine 2.5
      vano_l_1        = X - $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Rid.x
      vano_h_1        = $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Dim.y
      vano_p_1        = $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Dim.z
      vano_0_1.x      = base_0.x + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Off.x
      vano_0_1.y      = base_0.y + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Off.y
      vano_0_1.z      = base_0.z + $Cucina_2_5_Pensile_Illuminazione_Fondo_INCASSO_36e8_Off.z
      vano_hide_1     = SE_NUM( Cucina_Versione > 2, 0, 1)
      vano_nome_1     = "Illuminazione_Fondo"
      vano_elementi_1 = "Cucina_2_5_Pensile_Illuminazione_Fondo"
   }

   Procedura OnQueryBdmLocal
   {
      while( $query_type == 2)
      {
         $QueryResult__ = 1

         if( NOME($query_p1) == "Led_368")                                { break }
         if( NOME($query_p1) == "Faretto_368")                            { break }
         if( NOME($query_p1) == "Passacavi_368")                          { break }
         if( Cucina_Versione > 2
           & NOME($query_p1) == "Cucina_2_5_Pensile_Illuminazione_Fondo") { break }

         $QueryResult__ = 0
         break
      }
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlPushPush_Cmp_368
      GOSUB GetRegola_Componenti_Elements
      GOSUB ContaGiunzioni_368

      GOSUB Set_Vt_SuppOmega

      if( ACTION() > 0 )
      {
         //Simone 29/07/2022
         Scasso_Cappa = 0
         BOX_MODE(0)
         if( IS_IDX(idx_cnear_dw) == 1 )
         {
            wk_scs = 0
            NEAR_GLOBALE2("wk_scs",idx_cnear_dw,2,"ForoCappa")
            if( wk_scs > 0 ) { Scasso_Cappa = 1 }
            else
            {
               if( IS_VAR_FIXED(ATTUALE(),"Scasso_Cappa") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"Scasso_Cappa") }
            }
         }
      }

      //Simone 28/06/2022
      if( ACTION()> 0 & ACTION()!=2 & $OnLoadOrder != 1 )
      {
         CRS_lista_var = "Scasso_Cappa"
         GOSUB CheckRigeneraScasso
         if( CRS_Result == 1 )  { RigeneraScasso = 1 }
      }

      if( VAR_VAL(ATTUALE(),"RigeneraScasso") ==1 )
      {
         idx_scs = -1

         BOX_MODE(0)
         NEAR_GLOBALE2("wk_scs",ATTUALE(),1,"ForoCappa")
         if( wk_scs > 0 )
         {
            idx_scs = wk_scs[1]
            if( IS_IDX(idx_scs) == 1 ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_scs)," //da Controlli ",NOME(ATTUALE()))) }
         }

         RigeneraScasso = 0

         GOSUB EliminaScassi

         COMANDO(STRCAT("PROCEDURA M4_Scassi  // Scassa_e_Taglia "))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      RADICE = "FO36"

      GOSUB GestComune_Post

      GOSUB Set_Gest_C009_CmpModulo_368
      GOSUB SetGest_ComponenteSide_368
   }

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

         if( FLAG_Moduli_368 == 1 ) { GOSUB SetGest_ComponenteSide_368 }
         else                       { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) ) }

         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_pannello_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = "FON"

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento

      //@f_rivestimento = "0.8"
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1 //Retro
   {
      @X = X
      @Y = $M368_Pcv_Coll_Y
      @Z = $M368_Pcv_Coll_Z

      @base_0.x = base_0.x
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z
   }

   Posiziona PCV_ContCollisioni_368 cs2 //Fronte
   {
      @X = X
      @Y = $M368_Pcv_Coll_Y
      //@Z = Z/2 - 39
      @Z = $M368_Pcv_Coll_Z
      if( FLAG_ConPushPull == 1) { @Z = 87 }

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

   Posiziona PCV_ContCollisioni_368 cs3 //Sinistra
   {
      @X = $M368_Pcv_Coll_X
      if( FLAG_Cassetto | FLAG_Cestone )    { @X = $M368_Pcv_Coll_X_Cest  }
      if( UN_PADRE("ModuloPensile_Punto") ) { @X = $M368_Pcv_Coll_X_Punto }
      @Y = $M368_Pcv_Coll_Y
      @Z = Z - 2*$M368_Pcv_Coll_Z

      @base_0.x = base_0.x
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + $M368_Pcv_Coll_Z
   }
   Posiziona PCV_ContCollisioni_368 cs4 //Destra
   {
      @X = $M368_Pcv_Coll_X
      if( FLAG_Cassetto | FLAG_Cestone )    { @X = $M368_Pcv_Coll_X_Cest  }
      if( UN_PADRE("ModuloPensile_Punto") ) { @X = $M368_Pcv_Coll_X_Punto }
      @Y = $M368_Pcv_Coll_Y
      @Z = Z - 2*$M368_Pcv_Coll_Z

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + $M368_Pcv_Coll_Z
   }
   //} CONTROLLO COLLISIONI PASSACAVI

   //Simone 29/07/2022
   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @X = 0.90 * X
      @Y = 20
      @Z = 0.75 * Z

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

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368L
   {
      GOSUB G368_PosaGrLavorazione
   }

   Posiziona G368_ContCollisioni G368CFR
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

      @base_0 = base_0

      @Posizione = "FR"
   }

   Posiziona G368_ContCollisioni G368CRT
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

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

      @Posizione = "RT"
   }

   Posiziona G368_ContCollisioni G368CSX
   {
      @X = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Y = Y
      @Z = Z

      @base_0 = base_0

      @Posizione = "SX"
   }

   Posiziona G368_ContCollisioni G368CDX
   {
      @X = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Y = Y
      @Z = Z

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

      @Posizione = "DX"
   }
   #endif
}

Elemento Schiena_368
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        Schiena;CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    "" 0 Implicit

      X                  "" 1
      Y                  "" 1
      Z                  "" 1
      Zr                 "" 1

      VAR_Giorno         "" 0
      Posizione "Per identificarla nelle strutture angolo"  ""

      FLAG_SchPiena      "" 0
      FLAG_CopSp38       "" 0 Implicit

      //{ ****** VARIABILI 368 PENSILI CUCINA ******
      FLAG_SchPenCappaS  "" 0

      //Simone 03/12/21
      VAR_Cappa          "" 0
      TipoPenCappa       "" 0 Implicit

      VAR_ConScassoSch   "" 0 Implicit
      VAR_DiamScasso     "" 0 Implicit

      VAR_PosX_ScassoSch  "Posizione larghezza scasso (centro)"  105
      VAR_PosY_ScassoSch  "Posizione altezza scasso (centro)"    285
      VAR_DiamScassoSch   "Diametro scasso piccolo schiena"       60
      //1 sotto
      //2 sopra
      Posizione_ScassoSch ""     0 Implicit
      Posizione1_Scasso   ""   480
      Posizione2_Scasso   ""   120
      //} ****** VARIABILI 368 PENSILI CUCINA ******

      VediLimiti_PCV     "" 0

      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  ""
      //RADICE      ""  ""

      COD_EREDITA      ""      "PRE;POST"

      //Luca 21/01/2021
      VT_CARB      "CARB" ""
      CARB_Attiva  ""     0 Implicit

      idx_grafica1 ""     -1
      idx_grafica2 ""     -1
      idx_grafica3 ""     -1
      str_grafica  ""     ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z  = $M368_Spe_Sch
      Zr = Z
      if( FLAG_SchPiena ) { Z = $M368_Spe_SchPiena }

      str_grafica = STRCAT( STR(idx_grafica1), ";", STR(idx_grafica2), ";", STR(idx_grafica3))

      GOSUB AssModuli_368

      VT_CARB = CARB_Attiva

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

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune

      //Simone 29/06/2022
      if( VAR_Cappa == 1 & ACTION()==2 & $OnLoadOrder==0 & COMPONENDO()==0 )
      {
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia Schiena_368"))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      // Dimensioni
      GEST_X = X + 2*$M368_MagSch_X
      GEST_Y = Y + 2*$M368_MagSch_Y
      //TODO: da togliere passato il 10/09/23
      wk_data = ATOI(STRMID( 0, 6, DATA(0)))
      if( wk_data <= 230910 ) { GEST_Z = Zr }

      if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_ScolaPiatti")
        & VAR_VAL(PADRE(ATTUALE(),1),"VAR_Revisione_PenScp") == 0 )
      {
         GEST_Y = Y + $M368_MagSch_Y + 12.5
      }

      //if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_Cappa")==1
      //  & VAR_VAL(PADRE(ATTUALE(),1),"TipoPenCappa")=0 )
      //{
      //   GEST_Y = Y + $M368_MagSch_Y
      //}

      if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_Cappa")==1 )
      {
         if( VAR_VAL(PADRE(ATTUALE(),1),"TipoPenCappa")==0 ) { GEST_Y = Y + $M368_MagSch_Y }
         //Luca 14/05/2020
         if( VAR_VAL(PADRE(ATTUALE(),1),"TipoPenCappa")==2 )
         {
            GEST_Y = Y + 6
            if( FLAG_SchPenCappaS==1 )
            {
               GEST_Y = Y
               GEST_X = X
            }
         }
      }

      //Radice/codice
      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perRADICE = "SC36"

         if( UN_PADRE("ModuloPensileScPiatti_368") )            { perRADICE = "SCSP36"   }

         if( UN_PADRE("ModuloPensileCappa_368") )
         {
            perRADICE = "SCCP36"
            //Luca 23/04/2020
            if( VAR_VAL(PADRE(ATTUALE(),1),"TipoPenCappa")==1 ) { perRADICE = "SC36"     }
            //Luca 14/05/2020
            if( VAR_VAL(PADRE(ATTUALE(),1),"TipoPenCappa")==2 )
            {
               perRADICE = "SC36CS8"
               if( FLAG_SchPenCappaS==1 )                       { perRADICE = "SC36CS16" }
            }
         }

         if( FLAG_Moduli_368 == 1 )
         {
            perRADICE = "SC36LV"
            FIN_var   = "C048"
         }

         RADICE = perRADICE
      }

      //Gest
      GOSUB Set_Gest_C009_CmpModulo_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE(), STRCAT("GEST_",FIN_var))

         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

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

      GOSUB rivestimento

      idx_grafica1 = ATTUALE()
   }

   Posiziona Blocco bl2
   {
      @escluso = 1 - FLAG_SchPiena

      @X = X - $M368_RidSchPiena_X*2
      @Y = Y - ($M368_Spe_Cop38 - $M368_Spe_Cop)*FLAG_CopSp38 - $M368_RidSchPiena_Y*2
      @Z = Z - Zr

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

      //GOSUB rivestimento
      @c_rivestimento = $c_bianco

      idx_grafica2 = ATTUALE()
   }

   //retro bianco
   Posiziona Blocco blr
   {
      GOSUB posa_blocco

      @Z = 0.25
      @base_0.z = base_0.z + Z - Zr - @Z

      @c_rivestimento = $c_bianco

      idx_grafica3 = ATTUALE()
   }

   //Simone 03/12/21 - Foro schiena per cappa Lago
   Posiziona ForoCappaSchiena foro1
   {
      @escluso = 1 - VAR_Cappa

      @base_0.x = base_0.x + X/2 - @X/2 + VAR_PosX_ScassoSch
      @base_0.y = base_0.y - @X/2 + VAR_PosY_ScassoSch
      @base_0.z = base_0.z - 2.5
      @X = VAR_DiamScassoSch
      @Y = Y + 8
      @Z = Z + 5

      @Scassa_Chi_Plus = str_grafica
   }

   Posiziona ForoCappaSchiena FORO2
   {
      @escluso = 1
      if( VAR_Cappa == 1 & VAR_ConScassoSch == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @X/2 + Y - Posizione2_Scasso + 8
      if( Posizione_ScassoSch == 1 )
      {
         @base_0.y = base_0.y - @X/2 + Y - Posizione1_Scasso + 8
      }
      @base_0.z = base_0.z - 2.5
      @X = VAR_DiamScasso
      @Y = Y + 8
      @Z = Z + 5

      @Scassa_Chi_Plus = str_grafica
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 49 - $M368_MagSch_X

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

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + limite
      @base_0.z = base_0.z
      @X = limite
      @Y = Y - 2*limite
      @Z = Z + 5
   }
   Posiziona PCV_ContCollisioni_368 cs3
   {
      //LZ 16/07/2021: permetto inserimento dei passacavi previsti nei preconfigurati
      if( Y < 170 ) { limite = 37 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = limite
      @Z = Z + 5
   }
   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - limite
      @base_0.z = base_0.z
      @X = X
      @Y = limite
      @Z = Z + 5
   }
   //} CONTROLLO COLLISIONI PASSACAVI

   #ifdef TEC
   Posiziona Blocco CARB
   {
      @escluso = 1 - CARB_Attiva
      @X = 80
      @Y = 20
      @Z = 3

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

      @c_rivestimento = $c_nero
   }
   #endif
}

Elemento Cop_368
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 1
      Y "" 1
      Z "" 1

      //{ ****** VARIABILI 368 PENSILI CUCINA ******
      VAR_Cappa          "" 0
      //Simone 29/07/2022 - Per contenitore sopra pensile cappa
      Scasso_Cappa       "Foro per cappa" 0 Boolean

      TipoPenCappa       "" 0 Implicit
      VAR_DiamScasso     "" 0 Implicit

      VAR_ConScassoCop   "" 0 Implicit
      VAR_PosX_ScassoCop "" 0 Implicit
      VAR_PosZ_ScassoCop "" 0 Implicit
      //} ****** VARIABILI 368 PENSILI CUCINA ******

      //{ ****** VARIABILI 368 LIVING ******
      FLAG_CopSp38     "" 0 Implicit
      //} ****** VARIABILI 368 LIVING ******

      //Luca 27/01/2021
      //verifico se c'è un push inserito sul coperchio
      FLAG_ConPushPull   ""  0

      //Luca 01/12/2020
      VediLimiti_PCV  "" 0 Implicit

      FIN_var     ""  "C032"
      //FIN_orie    ""  "V"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  ""

      COD_EREDITA      ""      "PRE;POST"

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif
      VAR_Side_cmp         "Elemento side"    0

      //VARIABILI TECNICHE
      VT_NGO      "Numero giunzioni orizzontali"     0
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssModuli_368

      //  non fare i controlli gestionali nei figli
      //GOSUB Stato_8

      //Luca 15/09/2020
      if( ACTION() == 0 ) { Y = $M368_Spe_Cop }

      Y = $M368_Spe_Cop
      if( FLAG_CopSp38 == 1 )  { Y = 38 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 2 )
      {
         $QueryResult__  = 0
         if( NOME($query_p1) == "Passacavi_368" ) { $QueryResult__  = 1 }
         if( NOME($query_p1) == "Faretto_368" )   { $QueryResult__  = 1 }
         if( NOME($query_p1) == "Led_368" )       { $QueryResult__  = 1 }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements

      //Luca 27/01/2021
      GOSUB CtrlPushPush_Cmp_368

      //Luca 12/02/2021
      GOSUB ContaGiunzioni_368

      perRADICE = "CO36"

      //Luca 23/04/2020
      if( TipoPenCappa==1 ) { perRADICE = "CO36CP"  }
      //Luca 14/05/2020
      if( TipoPenCappa==2 ) { perRADICE = "CO36CS"  }

      RADICE = perRADICE

      if( VAR_Cappa==1 & ACTION()==2 & $OnLoadOrder==0 & COMPONENDO()==0 )
      {
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
      }

      //Simone 29/07/2022
      wk_idx_fnd = -1
      Scasso_Cappa = 0
      COMPONENTI2("wk_fnd",PADRE(ATTUALE(),2),"Fondo_368")
      if( wk_fnd > 0 )
      {
         wk_idx_fnd = wk_fnd[1]
         if( VAR_VAL(wk_fnd[1],"Scasso_Cappa") == 1 )
         {
            Scasso_Cappa = 1
         }
         else
         {
            if( IS_VAR_FIXED(ATTUALE(),"Scasso_Cappa") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"Scasso_Cappa") }
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 01/12/2020
      GOSUB SetGest_ComponenteSide_368

      GOSUB Set_Gest_C009_CmpModulo_368

      GOSUB GestComune_Post
   }

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

         if( FLAG_Moduli_368 == 1 ) { GOSUB SetGest_ComponenteSide_368 }
         else                       { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) ) }

         //GOSUB CucP_OnTabEredita
         //BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )

         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_pannello_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = "COP"

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento
   }

   //Posiziona CilindroY_Scassa ScaS
   Posiziona ForoCappa ScaS
   {
      //@escluso = 1 - VAR_Cappa
      //Simone 06/12/21
      @escluso = 1
      if( VAR_Cappa == 1 & VAR_ConScassoCop == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + 121 - @X/2
      @X = VAR_DiamScasso
      @Y = 2*Y + 20
      @Z = VAR_DiamScasso

      if( TipoPenCappa == 1
        | TipoPenCappa == 2 )
      {
         @base_0.x = base_0.x + VAR_PosX_ScassoCop - @X/2 - $M368_Rie_Pan
         @base_0.z = base_0.z + VAR_PosZ_ScassoCop - @X/2
      }

      @Scassa_Chi_Plus = STR(idx_grafica1)
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1 //Retro
   {
      @X = X
      @Y = $M368_Pcv_Coll_Y
      @Z = $M368_Pcv_Coll_Z
      if( $PCV_ContCollisioni_da_IR == 1 ) { @Z = 68 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z

      if( $PCV_ContCollisioni_da_IL == 1 ) { @base_0.y = base_0.y - (@Y-Y)/2 }
   }

   Posiziona PCV_ContCollisioni_368 cs2 //Fronte
   {
      @X = X
      @Y = $M368_Pcv_Coll_Y
      @Z = $M368_Pcv_Coll_Z
      if( $PCV_ContCollisioni_da_IR == 1 ) { @Z = 68 }
      if( VAR_VAL(GetTopLevel(idx_att),"FLAG_Vasistas")==1 | FLAG_ConPushPull == 1) { @Z = 87 }
      if( $PCV_ContCollisioni_da_IL == 1 ) { @Z = Z/2 - 39 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + Z - @Z
      if( $PCV_ContCollisioni_da_IL == 1 ) { @base_0.y = base_0.y - (@Y-Y)/2 }
   }

   Posiziona PCV_ContCollisioni_368 cs3 //Sinistra
   {
      @X = $M368_Pcv_Coll_X
      if( $PCV_ContCollisioni_da_IR == 1 )  { @X = 68 }
      if( UN_PADRE("ModuloPensile_Punto") ) { @X = 30 }
      @Y = $M368_Pcv_Coll_Y
      @Z = Z - 2*$M368_Pcv_Coll_Z

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      if( $PCV_ContCollisioni_da_IL == 1 ) { @base_0.y = base_0.y - (@Y-Y)/2 }
      @base_0.z = base_0.z + $M368_Pcv_Coll_Z
   }

   Posiziona PCV_ContCollisioni_368 cs4 //Destra
   {
      @X = $M368_Pcv_Coll_X
      if( $PCV_ContCollisioni_da_IR == 1 )  { @X = 68 }
      if( UN_PADRE("ModuloPensile_Punto") ) { @X = 30 }
      @Y = $M368_Pcv_Coll_Y
      @Z = Z - 2*$M368_Pcv_Coll_Z

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + Y
      if( $PCV_ContCollisioni_da_IL == 1 ) { @base_0.y = base_0.y - (@Y-Y)/2 }
      @base_0.z = base_0.z + $M368_Pcv_Coll_Z
   }
   //} CONTROLLO COLLISIONI PASSACAVI

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368L
   {
      GOSUB G368_PosaGrLavorazione
   }

   Posiziona G368_ContCollisioni G368CFR
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

      @base_0 = base_0

      @Posizione = "FR"
   }

   Posiziona G368_ContCollisioni G368CRT
   {
      @X = X
      @Y = Y
      @Z = $M368_Giu_Collisioni_PMin

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

      @Posizione = "RT"
   }

   Posiziona G368_ContCollisioni G368CSX
   {
      @X = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Y = Y
      @Z = Z

      @base_0 = base_0

      @Posizione = "SX"
   }

   Posiziona G368_ContCollisioni G368CDX
   {
      @X = $M368_Giu_Collisioni_PMin - $M368_Rie_Pan
      @Y = Y
      @Z = Z

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

      @Posizione = "DX"
   }
   #endif
}

Elemento DivisorioOrizLeg_368
{
   Descrizione = "Divisorio ORIZZONTALE pensili"
   Code        = CUB
   Gruppo      = "P368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           564
      Y "Spessore"             19
      Z "Profondità"          359

      RADICE  ""  "DIPE"

      FIN_var ""  "C032"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
   }
}

Elemento PanRetroGLASS_368
{
   Descrizione = "Pannello retro Glass"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente;StpPannelliRetro

   Variabili
   {
      FLAG_Moduli_368  "" 0 Implicit

      X "" 18
      Y "" 1
      Z "" 1

      HIDE "" 1

      idx_LED_sopra "" -1 Implicit
      idx_LED_sotto "" -1 Implicit
      idx_LavTrasf  "" -1 Implicit

      //Simone 06/10/21 - per gestione attaccaglie con scasso L
      VAR_GlassL_ConScasso  ""  0 Implicit
      GlassL_Scasso_Pos     "" "" Implicit
      GlassL_Scasso_X       ""  0 Implicit
      GlassL_Scasso_Y       ""  0 Implicit
      VAR_Glass_SUV         ""  0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Simone 06/10/21
      offX = 85
      offY = 24
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_pannello_glass bl
   {
      GOSUB posa_blocco
      //@c_rivestimento = $c_pomice
      @c_rivestimento = [255,255,255]
   }

   //Simone 06/10/21
   Posiziona Blocco att1
   {
      @X = 60
      @Y = 125
      @Z = 8

      @base_0.x = base_0.x + offX - @X/2
      if( VAR_GlassL_ConScasso==1 & GlassL_Scasso_Pos=="SX-AL" ) { @base_0.x = base_0.x + offX - @X/2 + GlassL_Scasso_X }

      @base_0.y = base_0.y + Y - offY - @Y
      @base_0.z = base_0.z - 0.1

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco att2
   {
      @X = 60
      @Y = 125
      @Z = 8

      @base_0.x = base_0.x + X - offX - @X/2
      if( VAR_GlassL_ConScasso==1 & GlassL_Scasso_Pos=="DX-AL" ) { @base_0.x = base_0.x + X - offX - @X/2 - GlassL_Scasso_X }

      @base_0.y = base_0.y + Y - offY - @Y
      @base_0.z = base_0.z - 0.1

      @c_rivestimento = $c_alluminio
   }

   //Simone 10/02/2023 - Glass SUV
   Posiziona Blocco att3
   {
      @escluso = 1
      if( VAR_Glass_SUV == 1 )
      {
         if( IS_MATCH(GlassL_Scasso_Pos,"*AL") == 1 ) { @escluso = 0 }
         if( X > 1104 )                               { @escluso = 0 }
      }

      @X = 60
      @Y = 125
      @Z = 8

      @base_0.x = base_0.x + X - offX - @X/2
      if( GlassL_Scasso_Pos=="SX-AL" ) { @base_0.x = base_0.x + offX - @X/2 }

      @base_0.y = base_0.y + Y - offY - GlassL_Scasso_Y - @Y
      @base_0.z = base_0.z - 0.1

      if( IS_MATCH(GlassL_Scasso_Pos,"*BA") == 1 )
      {
         @base_0.y = base_0.y + Y - offY - @Y
         if( GlassL_Scasso_Pos=="SX-BA" ) { @base_0.x = base_0.x + GlassL_Scasso_X + offX - @X/2 }
         if( GlassL_Scasso_Pos=="DX-BA" ) { @base_0.x = base_0.x + X - GlassL_Scasso_X - offX - @X/2 }
      }

      @c_rivestimento = $c_alluminio
   }
}

Elemento SchienaGlass_368
{
   Descrizione = "Schiena Glass"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      FLAG_Moduli_368  "" 0 Implicit

      X "" 18
      Y "" 1
      Z "" 1

      //Simone 10/02/2023
      VAR_Glass_SUV    "" 0 Implicit
      SchienaFinitura  "" 0


      FIN_var     ""  "C048"
      FIN_orie    ""  "V"

      //perRADICE   ""  ""
      //RADICE      ""  ""
      GEST_CODICE  "" "GSU001"

      XGLASS      "Num. XGLASS" "" Utente ( )

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C092" )
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_pannello_glass bl
   {
      @escluso = VAR_Glass_SUV

      GOSUB posa_blocco
      @f_rivestimento = "0.8"
      @SchienaFinitura = SchienaFinitura
      GOSUB rivestimento
   }

   //Simone 10/02/2023
   Posiziona Blocco sch
   {
      @escluso = 1 - VAR_Glass_SUV

      GOSUB posa_blocco
      @f_rivestimento = "0.8"
      @SchienaFinitura = SchienaFinitura
      GOSUB rivestimento
   }
}

Elemento ScassoGlass_368
{
   Descrizione = "Fianco sx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X "" 18
      Y "" 1
      Z "" 30

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Posiziona Blocco ing
   //{
   //   GOSUB posa_blocco
   //}
}

Elemento MasselloBif_368
{
   Descrizione = "Massello Bifacciale"
   Code        = CUB
   Gruppo      = "MAS"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile FustoModulo_368
   Altimetro    Auto
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 38
      Y "" 100
      Z "" 16

      OffsetX     "" 0

      FLAG_Massello_Elements "" 0

      FIN_var     "" "C028"
      FIN_orie    "" "V"

      GEST_CODICE "" "L03004"

      COD_EREDITA "" "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Attrezza
   {
      base_0.x = @base_0.x + OffsetX - X/2
      base_0.y = @base_0.y + $M368_Spe_Fnd
      base_0.z = @base_0.z

      Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop
      if( @FLAG_CopSp38 == 1 )
      {
         Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop38
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      ///Simone 31/08/21
      perCODICE = "L03004"

      if( FLAG_Massello_Elements == 1) { perCODICE = "F33008" }

      GEST_CODICE = perCODICE

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento PCV_ContCollisioni_368
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      c_rivestimento "" [255,0,0]
      f_rivestimento "" "0.9"

      VediLimiti_PCV "" 0 Implicit

      //Luca 07/09/2021 se > 0 verifico la collisione con M4_COLLISION hard
      // 1 utilizzato sui tavoli round
      ContCollisione_Speciale "" 0
      limite                  "" 20
   }

   Assegnazioni
   {
      VAR_IMPLICITLY_INHERITS(ATTUALE(), 0)
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
      base_so = base_0
      alto_ne = alto_2
   }

   Procedura Attiva_PCV_ContCollisioni_368
   {
      RIGENERA_IDX(ATTUALE())
   }

   Posiziona Blocco vedi
   {
      @escluso = 1 - VediLimiti_PCV

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

      GOSUB posa_blocco
      @f_rivestimento = f_rivestimento
      @c_rivestimento = c_rivestimento
   }

   Posiziona _cont_collisioni_tavround_AIR sp1
   {
      @escluso = 1
      if( ContCollisione_Speciale > 0 )  { @escluso = 1 - VediLimiti_PCV }

      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @limite = limite
      @f_rivestimento = f_rivestimento
      @c_rivestimento = c_rivestimento

      idx_cont_speciale = ATTUALE()
   }
}

Elemento _cont_collisioni_tavround_AIR
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X "" 1200
      Y "" 100
      Z "" 1200

      Verso "" 1 Utente ( )

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

      NO_SCASSA_PCV "" 1
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base*")

      limite = 60

      diam = X - 2*limite
      rag = X/2

      base_0  = [ 0, 0, 0 ]
      base_1  = [ 0, 0, limite ]
      base_2  = [ 0, Y, limite ]
      base_3  = [ 0, Y, 0 ]

      k = SENO(45)*rag

      base_path_0 = [ 0, 0 , 0]
      arc_path_0  = [ k, 0,  rag-k]
      base_path_1 = [ rag , 0 ,rag]
      arc_path_1  = [ k, 0,  rag+k]
      base_path_2 = [ 0 , 0 ,rag*2]
      arc_path_2  = [ -1*k, 0,  rag+k]
      base_path_3 = [ -1*rag , 0 ,rag]
      arc_path_3  = [ -1*k, 0,  rag-k]
      base_path_4 = [  0 , 0 ,0]

      base_so = [-1*rag,0,0]
      alto_ne = [rag,Y,X]
   }
}
// } COMPONENTI 368 GENERICI

// { COMPONENTI 368 PENSILI CUCINA
Elemento ForoCappa
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

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

      HIDE    "" 1
      escluso "" 0

      Var_Diam_Scasso      ""  0
      Var_PosZ_ScassoDiv   ""  0
      Var_Cappa_ScassoFnd  ""  0

      Scassa_Chi_Plus      "" ""
      Scassa_Chi_Plus_Div  "" ""
      Scassa_Chi_Plus_Fnd  "" ""

      //Simone 27/06/2022
      idx_topl             "" -1
      wk_idx_mod_up        "" -1
      wk_idx_cop_scs       "" -1
      wk_idx_grf_cop_scs   "" -1
      wk_idx_fnd_scs       "" -1
      wk_idx_grf_fnd_scs   "" -1

      FLAG_Debug           ""  0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      idx_topl = GetTopLevel(ATTUALE())
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      //Simone 29/07/2022
      wk_idx_mod_up       = -1
      wk_idx_cop_scs      = -1
      wk_idx_grf_cop_scs  = -1
      wk_idx_fnd_scs      = -1
      wk_idx_grf_fnd_scs  = -1

      Scassa_Chi_Plus_Div = ""
      Scassa_Chi_Plus_Fnd = ""

      BOX_MODE(0)
      wk_mod_up = 0
      wk_items  = 0
      if( IsIdx(ATTUALE(),"idx_cnear_up") == 1 ) { NEAR_GLOBALE2("wk_mod_up",idx_cnear_up,1,"Modulo*_368") }
      if( UN_PADRE("Cucina_2_5_Pensile"))
      {
         Scassa_Chi_Plus = ""
         if( IsIdx(ATTUALE(),"idx_cnear_up") == 1 ) { NEAR_GLOBALE2("wk_items",idx_cnear_up,1,"*") }
      }

      wk_i = 1
      while( wk_i <= wk_mod_up )
      {
         if( wk_mod_up[wk_i] == idx_topl )
         {
            DEL_ARRAY_ITEM( ATTUALE(), "wk_mod_up", wk_i )
            wk_i = wk_i - 1
         }
         wk_i = wk_i + 1
      }

      if( wk_mod_up > 0 )
      {
         wk_idx_mod_up = wk_mod_up[1]
         COMPONENTI2("wk_cop",wk_idx_mod_up,"Cop_368")
         COMPONENTI2("wk_fnd",wk_idx_mod_up,"Fondo_368")
         if( wk_cop > 0 )
         {
            wk_idx_cop_scs = wk_cop[1]
            //trovo grafica da scassare
            COMPONENTI2("wk_cop_graf",wk_idx_cop_scs,"_grafica_pannello_368")
            if( wk_cop_graf > 0 ) { wk_idx_grf_cop_scs = wk_cop_graf[1] }
         }
         if( wk_fnd > 0 )
         {
            wk_idx_fnd_scs = wk_fnd[1]
            //trovo grafica da scassare
            COMPONENTI2("wk_fnd_graf",wk_idx_fnd_scs,"_grafica_pannello_368")
            if( wk_fnd_graf > 0 ) { wk_idx_grf_fnd_scs = wk_fnd_graf[1] }
         }
      }

      wk_items_num = 0
      while( inc(wk_items_num) <= wk_items )
      {
         if( FORMA(wk_items[wk_items_num]) == $FORMA_CONTENITORE ) { continue }

         if( UN_PADRE2(wk_items[wk_items_num], "Cucina_2_5_Pensile_Fusto_Fondo") )
         {
            Scassa_Chi_Plus_Fnd = STRCAT(Scassa_Chi_Plus_Fnd,STR(wk_items[wk_items_num]),";")
            continue
         }

         Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_items[wk_items_num]),";")

         if( UN_PADRE2(wk_items[wk_items_num], "RipCappa") )
         {
            Scassa_Chi_Plus_Div = STRCAT(Scassa_Chi_Plus_Div,STR(wk_items[wk_items_num]),";")
         }
      }
   }

   Posiziona CilindroY_Scassa ScaS
   {
      @escluso = SE_NUM(FLAG_Debug | Var_Cappa_ScassoFnd > 0, 1, 0 )

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = Y
      @Z = X

      @Scassa_Chi_Plus = Scassa_Chi_Plus

      if( VAR_VAL(wk_idx_fnd_scs,"Scasso_Cappa") == 1 )
      {
         @Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,";",STR(wk_idx_grf_fnd_scs))

         if( VAR_VAL(wk_idx_cop_scs,"Scasso_Cappa") == 1 )
         {
            @Y = @Y + VAR_VAL( PADRE(wk_idx_fnd_scs,2),"Y" )
            @Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,";",STR(wk_idx_grf_fnd_scs),";",STR(wk_idx_grf_cop_scs))
         }
      }
   }

   Posiziona CilindroY debug
   {
      @escluso = SE_NUM(FLAG_Debug, 0, 1 )

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = Y
      @Z = X
   }

   Posiziona Blocco_Scassa bl
   {
      @escluso = 1
      if( UN_PADRE("Cucina_2_5_Pensile_Cappa") )
      {
        if( Var_Cappa_ScassoFnd < 1
          & Var_PosZ_ScassoDiv  < 10 ) { @escluso = 0 }
      }

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

      @Scassa_Chi_Plus = Scassa_Chi_Plus_Div
   }

   Posiziona Blocco_Scassa blret
   {
      @escluso = SE_NUM(Var_Cappa_ScassoFnd, 0, 1)

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = Y
      @Z = Z

      @Scassa_Chi_Plus = Scassa_Chi_Plus_Fnd
   }

   Posiziona _cont_per_near_2 cup
   {
      idx_cnear_up = ATTUALE()

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = Y
      @Z = Z
   }
}

//Simone 03/12/21 - Gestione foro su schiena
Elemento ForoCappaSchiena
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

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

      HIDE    "" 1
      escluso "" 0

      Scassa_Chi_Plus "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      Y = X
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      BOX_MODE(0)
      wk_items  = 0
      if( UN_PADRE("Cucina_2_5_Pensile"))
      {
         if( IsIdx(ATTUALE(),"idx_cnear_cn") == 1 ) { NEAR_GLOBALE2("wk_items",idx_cnear_cn,1,"*") }
      }

      if( wk_items > 0 )
      {
         wk_items_num = 1
         while( wk_items_num <= wk_items )
         {
            if( NOME(PADRE(wk_items[wk_items_num],1)) == "Cucina_2_5_Pensile_Fusto_Schiena" )
            {
               Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_items[wk_items_num]),";")
            }

            wk_items_num = wk_items_num + 1
         }
      }
   }

   Posiziona CilindroZ_Scassa scas
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = Y
      @Z = X

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   // Posiziona CilindroZ cil
   // {
   //    @escluso = 1
   //    if( UN_PADRE("Cucina_2_5_Pensile_Cappa")) { @escluso = 0 }

   //    @base_0.x = base_0.x
   //    @base_0.y = base_0.y
   //    @base_0.z = base_0.z
   //    @X = X
   //    @Y = X
   //    @Z = Z
   // }

   Posiziona _cont_per_near cn
   {
      idx_cnear_cn = ATTUALE()

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X
      @Y = X
      @Z = Z
   }
}

Elemento FondoCappa_368
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 1
      Z "" 1

      RieScs_SX   ""  60
      RieScs_DX   ""  60
      RieScs_RT   ""  40
      RieScs_FR   ""  40

      FIN_var     ""  "C032"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "FO36CP"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      Y = $M368_Spe_Fnd

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION()==2 & $OnLoadOrder==0 & COMPONENDO()==0 )
      {
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(ATTUALE()),"  // Scassa_e_Taglia "))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona _grafica_pannello_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = "FON"

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento
   }

   Posiziona Blocco_Scassa ScaS
   {
      @base_0.x = base_0.x + RieScs_SX
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + RieScs_RT
      @X = X - RieScs_SX - RieScs_DX
      @Y = Y + 10
      @Z = Z - RieScs_RT - RieScs_FR
      @Scassa_Chi_Plus = STR(idx_grafica1)
   }
}

Elemento DivOrizLegCappa_368
{
   Descrizione = "Divisorio orizzontale legno pensile cappa 368"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include           %path_bdm%\var_db.inc

      X                  "Larghezza"     562

      Y                  "Altezza"       349
      Yr                 "Altezza reale" 19

      Z                  "Profondità"    359

      TipoPenCappa       ""              0 Implicit
      VAR_DiamScasso     ""              0 Implicit

      VAR_ConScassoCop   ""              0 Implicit
      VAR_PosX_ScassoCop ""              0 Implicit
      VAR_PosZ_ScassoCop ""              0 Implicit

      VAR_Carter         ""              0

      ConForo            ""              0

      Cucina_Versione    ""              2 Implicit

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

      FIN_var            ""              "C032"

      idx_grafica        ""              -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      VAR_Carter_Y = 0
      if( VAR_Carter == 1) { VAR_Carter_Y = Y - $M368_Spe_DivLeg19 }

      X_Carter = 287
      Z_Carter = 207
      Y_Carter_Rid = 1
      if( Cucina_Versione > 2) { Y_Carter_Rid = 2 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      if( VAR_Carter == 1 & ACTION() == 2 & $OnLoadOrder == 0 & COMPONENDO() == 0)
      {
         COMANDO( STRCAT( "PROCEDURA M4_Scassi ", STR(ATTUALE()), " // Scassa_e_Taglia DivOrizLegCappa_368"))
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      perRADICE = "DIPECL"
      GEST_IDXPADRE = idx_pdr_gest
      if( Cucina_Versione > 2)
      {
         perCODICE = "P01053"
         GEST_IDXPADRE = GetTopLevelSost(idx_att)
      }

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

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona RipCappa div
   {
      GOSUB posa_blocco

      @Y = Yr

      GOSUB rivestimento

      idx_grafica = VAR_VAL( ATTUALE(), "idx_grafica")
   }

   Posiziona ForoCappa ScaS
   {
      @X = VAR_DiamScasso
      @Y = Y + 20

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + 19

      @escluso = 1
      if( ConForo == 1 ) { @escluso = 0 }

      if( TipoPenCappa==1 )
      {
         @base_0.x = base_0.x - 19 - @X/2 + VAR_PosX_ScassoCop
         @base_0.z = base_0.z - 25 - @X/2 + VAR_PosZ_ScassoCop
      }

      if( TipoPenCappa == 2)
      {
         @X = VAR_DiamScasso
         @base_0.x = base_0.x - VAR_DiamScasso/2 + VAR_PosX_ScassoCop - 19
         @base_0.z = base_0.z - 25 + VAR_PosZ_ScassoCop - @X/2
      }

      @Scassa_Chi_Plus = STR(idx_grafica)
   }

   Posiziona CarterCappa_368 crt
   {
      @escluso = SE_NUM( VAR_Carter == 1, 0, 1)

      @X = X_Carter
      @Y = Y - Y_Carter_Rid
      @Z = Z_Carter

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

      @TipoCarter = 3

      @GEST_IDXPADRE = idx_att
      if( idx_att != PADRE(idx_att, -1)) { @GEST_IDXPADRE = PADRE( idx_att, 1)       }
      if( Cucina_Versione > 2)           { @GEST_IDXPADRE = GetTopLevelSost(idx_att) }
   }

   Posiziona MassDivOrizLegCappa_368 mas1
   {
      @escluso = 1
      if( VAR_Carter == 1 ) { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X/2 - X_Carter/2 + 1
      @base_0.y = base_0.y + Yr
   }

   Posiziona MassDivOrizLegCappa_368 mas2
   {
      @escluso = 1
      if( VAR_Carter == 1 ) { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + X/2 + X_Carter/2 - @X - 1
      @base_0.y = base_0.y + Yr
   }
}

Elemento RipCappa
{
   Descrizione = "Ripiano divisorio cappa"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "Larghezza"       562
      Y           "Altezza"         19
      Z           "Profondità"      359

      //RADICE      ""                "DIPECL"

      FIN_var     ""                "C032"

      idx_grafica ""                -1

      HIDE        ""                 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Stato_7

      GOSUB GestComune_Post
   }

   Posiziona Blocco div
   {
      GOSUB posa_blocco

      GOSUB rivestimento

      idx_grafica = ATTUALE()
   }
}

Elemento MassDivOrizLegCappa_368
{
   Descrizione = "Massello divisorio cappa"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"       60
      Y               "Altezza"         30
      Z               "Profondità"      30

      GEST_CODICE     ""                "2CB083"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco mas
   {
      GOSUB posa_blocco

      @c_rivestimento = [ 153, 102, 51]
   }
}

Elemento BarraPenScPiatti_368
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 18
      Z "" 70

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "BASUSC36"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + 6
      @X = X - 12
      @Z = 10.5

      GOSUB rivestimento
   }

   Posiziona Blocco blsx
   {
      GOSUB posa_blocco
      @X = 6

      GOSUB rivestimento
   }

   Posiziona Blocco bldx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 6
      @X = 6

      GOSUB rivestimento
   }
}

Elemento TelaioPenScPiatti_368
{
   Descrizione = "Telaio Pensile scolapiatti"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                ""        562
      Y                ""        18
      Z                ""        382

      perCODICE        ""        ""
      GEST_CODICE      ""        ""

      perRADICE        ""        ""
      RADICE           ""        ""

      import           ""        ""
      import_escluso   ""        0
      import_grafica   ""        ""

      FIN_var          ""        "C028"

      FLAG_Debug       "Debug"   0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni
      GOSUB Stato_8

      // Modello 3D
      file_dir   = FMT( "{}\Cucina\Scolapiatti\Telaio", $path_sat)
      file_name  = FMT( "{}x{}.sat", STR(X), STR(Z))
      import_new = FMT( "{}\{}", file_dir, file_name)

      if( import != import_new)
      {
         import = import_new
         import_escluso = SE_NUM( FILE_EXIST(import) == 1, 0, 1)
      }

      import_grafica = SE_STR( import_escluso == 0, "__import__", "_graf_TelaioPenScPiatti_368")
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli

      // Vani
      /// Vano illuminazione fondo
      vano_l_0        = X - $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Rid.x
      vano_h_0        = $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Dim.y
      vano_p_0        = $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Dim.z
      vano_0_0.x      = base_0.x + $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Off.x
      vano_0_0.y      = base_0.y + $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Off.y
      vano_0_0.z      = base_0.z + $Cucina_2_5_Pensile_Illuminazione_Fondo_SCOLAPIATTI_Off.z
      vano_hide_0     = SE_NUM( Cucina_Versione > 2, 0, 1)
      vano_nome_0     = "Illuminazione_Fondo"
      vano_elementi_0 = "Cucina_2_5_Pensile_Illuminazione_Fondo"
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = ""
      perRADICE = "TESC"
      if( Cucina_Versione > 2)
      {
         perRADICE = ""
         perCODICE = "B21021"
      }

      GEST_IDXPADRE = GetTopLevelSost(idx_att)

      if( RADICE != perRADICE
        | GEST_CODICE != perCODICE)
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      BloccaModificaCatGest_Cmp_368( idx_att, "GEST_C165")
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Procedura Vault
   {
      if( Cucina_Versione > 2) { vaultFile = "ASM_012501" }
   }

   Posiziona %import_grafica% tel
   {
      GOSUB posa_blocco

      @import = import

      GOSUB rivestimento
   }

   Posiziona Blocco led_br
   {
      wk_gest_c165 = VAR_VAL_STR( idx_att, "GEST_C165")
      @escluso = SE_NUM( wk_gest_c165 != "" & wk_gest_c165 != "__", 0, 1)

      @X = X - 12
      @Y = Y
      @Z = 27.5

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

      GOSUB rivestimento
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

Elemento _graf_TelaioPenScPiatti_368
{
   Descrizione = "Grafica Telaio Pensile Scolapiatti"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X      ""   562
      Y      ""   18
      Z      ""   324

      Sp     ""   16

      HIDE   ""   1
   }

   PuntiNotevoli
   {
      base_0  = [ 0 , 0, 0]
      base_1  = [ Sp, 0, 0]
      base_2  = [ Sp, Y, 0]
      base_3  = [ 0 , Y, 0]

      base_path_0 = [ 0, 0, 0]
      base_path_1 = [ 0, 0, Z]
      base_path_2 = [ X, 0, Z]
      base_path_3 = [ X, 0, 0]
      base_path_4 = [ 0, 0, 0]
   }
}

Elemento RivestSc_368
{
   Descrizione = "Rivestimento alluminio sx"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 1
      Z "" 1

      Verso "" -1

      //LZ 23/11/2021
      FLAG_Fianco45 ""  1  Implicit

      idx_near      ""  -1

      FIN_var       ""  "C002"
      FIN_orie      ""  "V"

      perRADICE     ""  ""
      RADICE        ""  ""

      COD_EREDITA   ""  "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB CucP_Assegnazioni

      FIN_var = "C002"
      if( FLAG_Fianco45 == 0 ) { FIN_var = "C028" }

      X = $M368_Spe_Riv
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      perRADICE = "FALD36"
      if( Verso<0 ) { perRADICE = "FALS36" }

      GEST_X = 18
      GEST_Y = Y-1

      //LZ 23/11/2021
      if( FLAG_Fianco45 == 0 )
      {
         perRADICE = STRCAT( perRADICE, "T")

         GEST_X = 19.5
         GEST_Y = Y + 0.5
      }

      RADICE = perRADICE

      GOSUB CucP_Controlli
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

   Posiziona Blocco bl
   {
      @X = X
      @Y = Y - 16
      @Z = Z - 26

      @base_0.x = base_0.x
      @base_0.y = base_0.y + 16
      @base_0.z = base_0.z + 26

      if( FLAG_Fianco45 == 0 )
      {
         @Y = Y
         @base_0.y = base_0.y
      }

      idx_grafica1 = ATTUALE()
      GOSUB rivestimento
   }

   Posiziona _grafica_rivestPS_368 la
   {
      @escluso = 1 - FLAG_Fianco45

      @X = 16.5
      @Y = 16
      @Z = Z

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      GOSUB rivestimento

      @Pos = "SX"
      if( Verso>0 ) { @Pos = "DX" }

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

   Posiziona Blocco la2
   {
      @escluso = FLAG_Fianco45

      @X = 19.5
      @Y = 0.5
      @Z = Z

      @base_0 = base_0
      @base_0.y = base_0.y - @Y

      GOSUB rivestimento

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

Elemento Scolapiatti
{
   Descrizione = "Scolapiatti"
   Code        = SCP
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
       #include %path_bdm%\var_db.inc

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

       Xr            "Larghezza reale"      711

       Doppio        ""                     0

       OffX_Xr       "Offset larghezza"     15
       OffY_Inf      "Off y inf (filo a)"   69
       OffY_InfSup   "Offset y inf/sup"     116.5
       OffZ_Zr       "Offset profondità"    49

       perCODICE     ""                     ""
       GEST_CODICE   ""                     ""

       FLAG_Debug    "Debug"                0   Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Versione

      Xr = X + OffX_Xr

      OffY_InfSup = 116.5
      if( Y > 552 ) { OffY_InfSup = 208.5 }

      Doppio = SE_NUM( Y > 368, 1, 0)

      path_sat_scp = STRCAT($path_sat,"Cucina\Scolapiatti\")

      c_rivestimento = $c_alluminio
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Y
      GEST_Z = Z
      if( VAR_VAL( ATTUALE(), "ORD_Y") > 0) { GEST_Y = ORD_Y }
      if( VAR_VAL( ATTUALE(), "ORD_Z") > 0) { GEST_Z = ORD_Z }

      GEST_IDXPADRE = GetTopLevelSost(idx_att)

      perCODICE = ""
      if( Cucina_Versione > 2)
      {
         perCODICE = "B21020"
         if( Doppio > 0) { perCODICE = "B21019" }
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Scolapiatti_Inferiore scpinf
   {
      @X = X
      @Z = Z

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

      @c_rivestimento = c_rivestimento
   }

   Posiziona Scolapiatti_Superiore scpsup
   {
      @escluso = 1 - Doppio

      @X = X
      @Z = Z

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

      @c_rivestimento = c_rivestimento
   }
}

Elemento Scolapiatti_Inferiore
{
   Descrizione = "Scolapiatti_Inferiore"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
        #include %path_bdm%\var_db.inc

        X                "Larghezza"         698
        Y                "Altezza"           43.5
        Z                "Profondità"        384

        Xr               "Larghezza reale"   711
        Zr               "Prof scp"          252.4

        OffX_Xr          ""                  15   Implicit
        OffZ_Zr          ""                  49   Implicit

        OffZ             "Offset Z"          28.6
        OffZ_Sat         ""                  20.4

        path_sat_scp     ""                  ""   Implicit

        import           ""                  ""
        import_escluso   ""                  0
        import_grafica   ""                  ""

        FLAG_Debug       "Debug"             0    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( UN_PADRE("Cucina_2_5_Pensile*")) { OffX_Xr = 14 }
      Xr = X + OffX_Xr

      // Modello 3D
      import_new = STRCAT(path_sat_scp, "Griglia inferiore\GrigliaInf L", STR(X), ".sat")
      if( import_new != import)
      {
         import = import_new
         import_escluso = SE_NUM( FILE_EXIST(import) == 1, 0, 1)
      }

      import_grafica = "__import__"
      if( import_escluso != 0) { import_grafica = "Blocco" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

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

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

   Posiziona %import_grafica% scinf
   {
      @escluso = 1
      if( $OnLoadOrder != 0) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "Posiziona") == 0) { @Posiziona = 1  EXITSUB() }
      @escluso = import_escluso

      GOSUB posa_blocco

      @X = Xr
      @Z = Zr

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

      @import = import

      @c_rivestimento = c_rivestimento
   }
}

Elemento Scolapiatti_Superiore
{
   Descrizione = "Scolapiatti_Superiore"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
        #include %path_bdm%\var_db.inc

        X                "Larghezza"         698
        Y                "Altezza"           72
        Z                "Profondità"        384

        Xr               "Larghezza reale"   711
        Zr               "Prof scp"          242

        OffX_Xr          ""                  15   Implicit
        OffZ_Zr          ""                  49   Implicit

        DimZ             "Profondità scp"    225
        OffZ             "Offset Z"          40

        OffZ_Sat         ""                  9

        path_sat_scp     ""                  ""   Implicit

        import           ""                  ""
        import_escluso   ""                  0
        import_grafica   ""                  ""

        FLAG_Debug       "Debug"             0    Boolean   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( UN_PADRE("Cucina_2_5_Pensile*")) { OffX_Xr = 16 }

      Xr = X + OffX_Xr

      // Modello 3D
      import_new = STRCAT(path_sat_scp, "Griglia superiore\GrigliaSup L",STR(X),".sat")
      if( import_new != import)
      {
         import = import_new
         import_escluso = SE_NUM( FILE_EXIST(import) == 1, 0, 1)
      }

      import_grafica = "__import__"
      if( import_escluso != 0) { import_grafica = "Blocco" }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

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

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

   Posiziona %import_grafica% scsup
   {
      @escluso = 1
      if( $OnLoadOrder != 0) { EXITSUB() }
      if( VAR_VAL( ATTUALE(), "Posiziona") == 0) { @Posiziona = 1  EXITSUB() }
      @escluso = import_escluso

      GOSUB posa_blocco

      @X = Xr
      @Z = Zr

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

      @import = import

      @c_rivestimento = c_rivestimento
   }
}

Elemento CarterCappa_368
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente
   Attrezzabile ModuloPensile_368 ModuloPensileCappa_368

   Variabili
   {
        #include %path_bdm%\var_db.inc

        X                    "Larghezza"     328
        Y                    "Altezza"       160
        Z                    "Profondità"    250

        //0 interno
        //1 superiore
        //2 telescopico
        //3 intermedio ( per cappe H>552 )
        TipoCarter           "Tipo Carter"   0   Menu   (   TpCarter   )

        Cucina_Versione      ""              2   Implicit

        perRADICE            ""              ""
        RADICE               ""              ""

        FIN_var              ""              "C030"
        FIN_orie             ""              "O"

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

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

        M4_MIS               ""              "X;Y;Z;FillerM2G"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      X = 328
      Y = 160
      Z = 250

      if( TipoCarter>0 )
      {
         X = 420
         Y = 411
         Z = 280
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 1)
      {
         if( $M4_DragInfo_Mode == 0)
         {
            offx = VAR_VAL($M4_DragInfo_Ref,"X")/2 - X/2
            cnt_new = CostruisciStrCnt("S+","A-","R",offx,0,0,0)
            $M4_DragInfo_Cnt = cnt_new
            $QueryResult__ = 3
         }
      }

      if( $query_type == 8)
      {
         if( TipoCarter != 0) { $QueryResult__ = 0 }
      }
   }

   Attrezza
   {
      base_0.x = $vano_0.x + $larghezza/2 - X/2
      base_0.y = $vano_0.y + $M368_Spe_Fnd
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = ""
      if( TipoCarter == 3)     { perRADICE = "CAPC" }
      if( Cucina_Versione > 2) { perRADICE = "CAPC3"}

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona _grafica_cartercappa_368 bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Cappa
{
   Descrizione = "Cappa Generico"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 50
      Z "" 1

      FIN_var     ""  ""
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      //  non fare i controlli gestionali nei figli
      GOSUB Stato_78

      DescEdit__  = MSG(1008)
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Gestionale
   //{
   //   GOSUB GestComune
   //
   //   GOSUB GestComune_Post
   //}

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @Y = 50
      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco bl4
   {
      @base_0.x = base_0.x + X/2 - 100
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z

      @X = 200
      @Y = 150
      @Z = 150

      @c_rivestimento = $c_alluminio
   }

   Posiziona _grafica_cartercappa_368 car
   {
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z

      wk_y_pdr = VAR_VAL(PADRE(idx_att,1),"Y")
      @Y = 277
      if( wk_y_pdr>500 )  { @Y = 411 }
      @X = 420
      @Z = 280

      @c_rivestimento = $c_alluminio
   }
}

Elemento CappaGenerica
{
   Descrizione = "Cappa generica"
   Code        = CUB
   Gruppo      = "Elettrodomestici"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile  Cucina_2_5_Pensile_Cappa
   Alias        CamIncidente

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

      ELD_TIPO_ELDOM            ""                            "CAPPA"
      SoloGrafica               ""                            0

      X                         ""                            1
      Y                         ""                            50
      Z                         ""                            1

      Rip_Vano1_DimY            ""                            349 Implicit
      Rip_Vano3_DimY            ""                            349 Implicit
      Rip_Vano2_Var_DimY        ""                            165 Implicit

      DU_DIRETTI_CAP            ""                            1   NoSave

      GEST_CODICE               ""                            "CPP"

      FIN_var                   ""                            ""
      FIN_orie                  ""                            "O"

      Cucina_Versione           ""                            0 Implicit
      VT_CUC_REV                "Cucine - Revisione"          0
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( ACTION() == 0) { HIDE_ON_EDIT2( ATTUALE(), "InsEldom", 1) }

      var_gest_eldom = "GEST_E009"
      GOSUB LeggiDatiEldomGen

      VT_CUC_REV = Cucina_Versione*10
   }

   PuntiNotevoli
   {
      GOSUB punti

      GOSUB CucP_PuntiNotevoli
   }
   #include %path_bdm%\TLib\Orie.inc

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n

      X = $larghezza
      Z = $profondita

      base_0 = $vano_0
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $NORID_X + $NORID_Y + $NORID_Z
      GEST_X = 0 GEST_Y = 0 GEST_Z = 0

      GEST_IDXPADRE = SE_NUM( Cucina_Versione > 2, GetTopLevelSost(idx_att), idx_pdr_gest)

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if($StartingDel__==ATTUALE()) { $no_cancel=1 }
         else                          { $no_cancel=0 }
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @Y = 50
      //@c_rivestimento = $c_alluminio
      @c_rivestimento = [215,215,215]
   }

   Posiziona Blocco bl4
   {
      @base_0.x = base_0.x + X/2 - 100
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z

      @X = 200
      @Y = 150
      @Z = 150
      //@c_rivestimento = $c_alluminio
      @c_rivestimento = [215,215,215]
   }

   Posiziona _grafica_cartercappa_368 car
   {
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z

      wk_y_pdr = VAR_VAL(PADRE(idx_att,1),"Y")
      @X = 420
      //@Y = 277
      @Y = Rip_Vano1_DimY - 50 - 19 * SE_NUM(UN_PADRE("Cucina_2_5_Pensile"), 0, 1)
      if( wk_y_pdr == 552 )  { @Y = 463 }
      @Z = 280
      //@c_rivestimento = $c_alluminio
      @c_rivestimento = [215,215,215]
   }
}

//Ripiano utilizzano solo su modulo 368 PENSILE
Elemento Ripiano_368
{
   Descrizione = "Ripiano generico 368"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Modulo*368
   Altimetro   Auto
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"                              563   ShowAlways
      Y               "Spessore ripiano"                       18    ShowAlways
      Z               "Profondità"                             318   ShowAlways

      TipoRipiano     "Tipologia: 0 - appoggio, 1 - incasso"   0
      TipoRipianoPrec ""                                       -1

      RieX_Rip        ""                                       0
      RieZR_Rip       ""                                       0
      RieZF_Rip       ""                                       0
      RieZF_RipPrec   ""                                       0

      idx_contxnear   ""                                       -1

      FIN_var         ""                                       "C014"
      FIN_orie        ""                                       "O"

      perRADICE       ""                                       ""
      RADICE          ""                                       ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB CucP_Assegnazioni

      // Dimensioni
      Y = $M368_Spe_Rip

      // Rientri
      if( TipoRipianoPrec != TipoRipiano)
      {
         /// Ripiano appoggio
         if( TipoRipiano == 0)
         {
            RieX_Rip  = 1
            RieZR_Rip = 0.5
            RieZF_Rip = 29
         }

         /// Ripiano incassato
         if( TipoRipiano == 1)
         {
            RieX_Rip  = 0
            RieZR_Rip = 0
            RieZF_Rip = 0
         }
      }

      if( TipoRipiano == 0)
      {
         // Rientro frontale: 29mm di default
         // Se GEST_C007 è diverso da:
         //  - VA003 - Vasistas HS
         //  - VA005 - Vasistas HS Top
         // allora il ripiano rientra di 10mm.
         gest_C007_pdr = VAR_VAL_STR( idx_pdr, "GEST_C007")
         if( gest_C007_pdr != ""
           & gest_C007_pdr != "__")
         {
            RieZF_Rip = 29
            if( gest_C007_pdr != "VA003"
              & gest_C007_pdr != "VA005") { RieZF_Rip = 10 }
         }
      }

      TipoRipianoPrec = TipoRipiano
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8)
      {
         if( NOME($query_p1) != "ModuloPensile_368"
           & NOME($query_p1) != "ModuloPensileCappa_368"
           & NOME($query_p1) != "ModuloPensileScPiatti_368") { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani
   }

   Attrezza
   {
      base_0.x = $vano_0.x + RieX_Rip
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + RieZR_Rip

      X = $larghezza  - 2*RieX_Rip
      Z = $profondita - RieZR_Rip - RieZF_Rip
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = SE_STR( TipoRipiano == 1, "RPVT36", "RPVTAP36")

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

      if( RieZF_Rip != RieZF_RipPrec)
      {
         flag_CAMBIA_VAR = 1
      }
      RieZF_RipPrec = RieZF_Rip

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento BarraPenCappaSlitta_368
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 15.5
      Z "" 56.5

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

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

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "BOCS"
      perCODICE = ""

      if( UN_PADRE("Cucina_2_5_Pensile*") )
      {
         perRADICE = ""
         perCODICE = "B21022"
      }

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

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + 6
      @base_0.z = base_0.z + Z - Y
      @X = X - 12
      @Z = Y

      GOSUB rivestimento
   }

   Posiziona Blocco blsx
   {
      GOSUB posa_blocco
      @X = 6

      GOSUB rivestimento
   }

   Posiziona Blocco bldx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X - 6
      @X = 6

      GOSUB rivestimento
   }
}

Elemento SchienaPenCappaSlitta_368
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   //Luca 20/01/2021 riporto modifiche LAGO
   //Alias       CamInciso;CamIncidente
   Alias       Schiena;CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 1
      Z "" 1

      FIN_var     ""  "C032"
      FIN_orie    ""  "V"

      RADICE      ""  "SC36CS16"
      //RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
      Z = 16

      GOSUB CucP_Assegnazioni
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB CtrlComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
   }
}

Elemento ProfiloPenCappaSlitta_368
{
   Descrizione = "Coperchio generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 20
      Z "" 54

      FIN_var     ""  "C021"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "PRCS"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }
   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}
// }  COMPONENTI 368 PENSILI CUCINA

// { COMPONENTI 368 Living
Elemento RipianoVetroLiv_368
{
   Descrizione = "Ripiano vetro 368"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloGiorno_368 Modulo_368
   Altimetro   Auto
   Alias       CamIncidente;AGGIUNTO

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563
      Y "Spessore"             18
      Z "Profondità"          318

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0

      VediLimiti_PCV  "" 0

      //0 appoggio
      //1 in fresata
      TipoRipiano     "Tipologia Ripiano"  1

      FIN_var         ""  "C014"
      FIN_orie        ""  "O"

      COD_EREDITA "" "PRE"

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

      perRADICE       ""  ""
      RADICE          ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB AssModuli_368

      TipoRipianoStr = "FRESATA"
      if( TipoRipiano == 0 )
      {
         TipoRipianoStr = "APPOGGIO"
         RieX_Rip  = 1
         RieZR_Rip = 0.5
      }

      Y = $M368_Spe_Rip

      //Luca 17/06/2021
      STP_Bollina = 1
      STP_Bollina_Pnt = [X/2, Y/2, Z]
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         //Luca 06/04/2021
         //mantis 024675: 368 - Ripiani in vetro in aggiunta
         if( $ATTIVA_DLL == 1 )
         {
            if( VAR_VAL_STR($query_p1,"Tipo368") == "368-RIB"
              | VAR_VAL_STR($query_p1,"Tipo368") == "368-CAS"
              | VAR_VAL_STR($query_p1,"Tipo368") == "368-CES"  )
            {
               //LZ 17/01/2022: gestione speciali, valuto se effettivamente è presente un anta
               COMPONENTI2( "wk_ant", $query_p1, "Anta_368")
               COMPONENTI2( "wk_cas", $query_p1, "Cassetto_368")

               if( VAR_VAL($query_p1, "FLAG_Speciale") == 0 )
               {
                  if( wk_ant + wk_cas > 0 )
               {
                  $QueryResult__ = 0
                  EXITSUB()
               }
            }
               else
               {
                  $QueryResult__ = 1
               }
            }

            if( FLAG_CompostoGEN == 1 )
            {
               //ripiani in appoggio in aggiunta
               if( TipoRipiano == 0 )
               {
                  if( VAR_VAL_STR($query_p1,"Tipo368") == "368-GIO" ) { $QueryResult__ = 0 }

                  //Luca 12/04/2021
                  if( VAR_VAL($query_p1,"VAR_DivVerticale") >= 1 )
                  {
                     if( $query_p2 == 0 )  { $QueryResult__ = 0 }
                  }
               }

               //ripiani in fresata in aggiunta
               if( TipoRipiano == 1 )
               {
                  if( VAR_VAL_STR($query_p1,"Tipo368") != "368-GIO" ) { $QueryResult__ = 0 }
               }
            }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani_368
   }

   Attrezza
   {
      wk_RieZF_Rip = 69.65
      if( @Z < 384 ) { wk_RieZF_Rip = 29.65 }
      if( @Z < 248 ) { wk_RieZF_Rip = 14.65 }

      if( TipoRipiano == 0 )
      {
         //wk_RieZF_Rip = 113
         //if( @Z <= 488) { wk_RieZF_Rip = 63 }
         //if( @Z < 480 ) { wk_RieZF_Rip = 10 }

         //Z di riferimento
         wk_RefZ_Rip = 400
         wk_RieZF_Rip = @Z - (wk_RefZ_Rip + $M368_Rie_Sch_ZR + $M368_Spe_Sch + RieZR_Rip)
         if( @Z < 480 ) { wk_RieZF_Rip = 10 }

         if( VAR_VAL_STR( @idx_att, "Tipo368") == "368-VAS" )
         {
            wk_RieZF_Rip = 109
            if( @Z < 384 ) { wk_RieZF_Rip = 98 }
         }
      }

      base_0.x = $vano_0.x + RieX_Rip
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + RieZR_Rip

      X = $larghezza  - 2*RieX_Rip
      Z = $profondita - RieZR_Rip - wk_RieZF_Rip

      if( FLAG_CompostoGEN == 0 )
      {
         if( UN_PADRE("Modulo_368")
           | UN_PADRE("ModuloPensile_Punto") )  { TipoRipiano = 0 }
      }
   }

   Controlli
   {
      GOSUB CANCELLA_AGGIUNTI

      GOSUB CtrlComune

      GOSUB CtrlCollisioneRipiano_368

      GOSUB COLLIDE_AGGIUNTI

      GOSUB GetRegola_Componenti_Elements
   }

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

         GOSUB Set_Gest_C014_Ripiano_368
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C014_Ripiano_368

      GEST_X = X
      RADICE_prec = RADICE

      if( FLAG_CompostoGEN == 1 ) { GEST_CODICE = "" }

      if( TipoRipiano==0 )
      {
         perRADICE = "RPVTAP36"
         if( UN_PADRE("ModuloPensile_Punto")) { perRADICE = "RVTPS" }
      }
      if( TipoRipiano==1 )
      {
         GEST_X = X + MagX_Rip*2
         perRADICE = "RPVT36"
      }

      RADICE = perRADICE

      if( RADICE!=RADICE_prec ) { flag_CAMBIA_VAR = 1 }
      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_Elemento
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z - 5
      @X = X
      @Y = 38
      @Z = Z + 10
   }
   #endif

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @Y = 18 + 16.5 + 16.5
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - 18 - 16.5
      @base_0.z = base_0.z
      @X = X
      @Z = Z

      @escluso = 1
      if( $PCV_ContCollisioni_su_SCH == 1 ) { @escluso = 0 }
   }
}

Elemento RipianoLegnoLiv_368
{
   Descrizione = "Ripiano legno 368"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   #ifndef TEC
   Attrezzabile Modulo_368
   #endif
   #ifdef TEC
   Attrezzabile Modulo*_368
   #endif

   Altimetro   Auto
   Alias       AGGIUNTO;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           330 ShowAlways
      Y "Spessore"             19 Menu ( SpeRipLegno_368 ) ShowAlways
      Z "Profondità"          213 ShowAlways

      TipoRipiano        ""  0

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368    ""  1

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1

      VediLimiti_PCV  "" 0

      FIN_var         ""  "C032"
      FIN_orie        ""  "O"

      COD_EREDITA "" "PRE"

      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
         M4_MIS              ""                "X;Y;Z"
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
         M4_MIS              "" ""
      #endif

      RADICE                 "" "RL368"
      GEST_CODICE            "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB AssModuli_368
      RieZR_Rip = 0.5

      //Luca 17/06/2021
      STP_Bollina = 1
      STP_Bollina_Pnt = [X/2, Y/2, Z]
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         wk_rif_tipo = VAR_VAL_STR($query_p1,"Tipo368")
         if( wk_rif_tipo != "368-BAT"
           & wk_rif_tipo != "368-VAS"
           & wk_rif_tipo != "368-MAD" )                   { $QueryResult__ = 0 }
         if( $query_p2 == 0
           & VAR_VAL($query_p1,"VAR_DivVerticale") >= 1 ) { $QueryResult__ = 0 }

         wk_rif_x = VAR_VAL($query_p1, "X")
         wk_rif_vano = STRCAT("vano_l_",STR($query_p2))
         if( VAR_VAL($query_p1, "VAR_ConfigVani") > 1 )   { wk_rif_x = VAR_VAL($query_p1, wk_rif_vano) }

         wk_rif_xmin = 368
         wk_rif_xmax = 736
       #ifdef TEC
         wk_rif_xmin = 330
         wk_rif_xmax = 1104
       #endif

         if( wk_rif_x < wk_rif_xmin
           | wk_rif_x > wk_rif_xmax )                     { $QueryResult__ = 0 }

         COMANDO2(STRCAT("LOGMSG RipLegno: wk_rif_x=",STR(wk_rif_x)," wk_rif_vano=",wk_rif_vano))
      }
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani_368
   }

   Attrezza
   {
      //wk_RieZF_Rip = 138
      wk_RieZF_Rip = 35
      if( @Z > 384 ) { wk_RieZF_Rip = 88  }
      if( @Z > 488 ) { wk_RieZF_Rip = 138 }

      if( @Tipo368 == "368-VAS" )
      {
         wk_RieZF_Rip = 134
         if( @Z < 384 ) { wk_RieZF_Rip = 123 }
      }

      wk_RieZF_Rip = wk_RieZF_Rip - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Rip
      if( wk_RieZF_Rip < 0 ) { wk_RieZF_Rip = 0 }

      base_0.x = $vano_0.x + RieX_Rip
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + RieZR_Rip

      X = $larghezza  - 2*RieX_Rip
      Y = 19
      if( X > 736 ) { Y = 38 }
      Z = $profondita - RieZR_Rip - wk_RieZF_Rip
   }

   Controlli
   {
      GOSUB CANCELLA_AGGIUNTI

      GOSUB CtrlComune

      GOSUB CtrlCollisioneRipiano_368

      GOSUB COLLIDE_AGGIUNTI

      GOSUB GetRegola_Componenti_Elements

      Y = 19
      if( X > 736 )
      {
         if( IS_VAR_FIXED( ATTUALE(), "Y") ) { DEL_VAR_MODIFICATE( ATTUALE(), "Y") }
         Y = 38
      }
   }

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

         GOSUB Set_Gest_C014_Ripiano_368
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C014_Ripiano_368

      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_Elemento
      GOSUB rivestimento
   }

   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @X = X
      @Y = Y*2
      @Z = Z + 10

      @base_0.x = base_0.x
      @base_0.y = base_0.y + (Z - @Z)/2
      @base_0.z = base_0.z - 5
   }
   #endif

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @Y = 18 + 16.5 + 16.5
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - 18 - 16.5
      @base_0.z = base_0.z
      @X = X
      @Z = Z

      @escluso = 1
      if( $PCV_ContCollisioni_su_SCH == 1 ) { @escluso = 0 }
   }
}

Elemento DivisiorioVetLiv_368
{
   Descrizione = "Divisorio vetro 368"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente
   Altimetro    AutoL
   Attrezzabile ModuloGiorno_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"            18
      Y "Spessore"            300
      Z "Profondità"          318

      FLAG_Moduli_368    ""  1

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0

      //0 appoggio
      //1 in fresata
      TipoRipiano     "Tipologia Ripiano"  1

      VediLimiti_PCV  "" 0 Implicit

      FIN_var         ""  "C014"
      FIN_orie        ""  "O"

      perRADICE       ""  ""
      RADICE          ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB AssModuli_368

      X = $M368_Spe_Div
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv_max = VAR_VAL(idx_ref,"X")
      passo = 92
      liv_att = passo

      while ( liv_att <= liv_max )
      {
         ne = liv2add + 1
         liv2add = ne
         liv2add[ne]    = liv_att

         liv_att = liv_att + passo
      }

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

   Attrezza
   {
      base_0.x = $vano_0.x + $livello - X/2
      base_0.y = $vano_0.y + $M368_Spe_Fnd
      base_0.z = $vano_0.z

      Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop
      Z = @Z - $M368_Rie_Sch_ZR - $M368_Spe_Sch - RieZR_Div - RieZF_Div
   }


   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( FLAG_CompostoGEN == 1 ) { GEST_CODICE = "" }

      GEST_Y = Y + MagY_Div*2
      RADICE = "DVVT36"

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //Simone 16/01/2023
   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

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

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   //{ CONTROLLO COLLISIONI PASSACAVI SU ILLUMINAZIONE
   Posiziona PCV_ContCollisioni_368 cdil1
   {
      limite = 10 + 10 + X

      if( $PCV_ContCollisioni_da_IL_INT == 1 ) { limite = 10 + 10 + X }

      @escluso = 1
      if( $PCV_ContCollisioni_da_IL == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2 - limite/2
      @base_0.y = base_0.y - 20
      @base_0.z = base_0.z
      @X = limite
      @Y = Y + 60
      @Z = 10
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU ILLUMINAZIONE

   //{ CONTROLLO COLLISIONI PASSACAVI SU SCHIENA
   Posiziona PCV_ContCollisioni_368 cdsch
   {
      limite = 50

      @escluso = 1
      if( $PCV_ContCollisioni_su_SCH == 1 ) { @escluso = 0 }

      @base_0.x = base_0.x + X/2 - limite/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = limite
      @Y = Y
      @Z = 10
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU SCHIENA

   //Luca 09/03/2021
   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @base_0.x = base_0.x - 10
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X + 20
      @Y = Y
      @Z = Z
      //?
      //if( Z > 350 ) { @Z = 345 }
   }
   #endif
}

Elemento DivisiorioVertLegLiv_368
{
   Descrizione = "Divisorio vetro 368"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"            18
      Y "Spessore"            300
      Z "Profondità"          318

      VAR_DivVerticale   ""  0 Implicit

      FLAG_Moduli_368    ""  1

      FLAG_Cassetto      ""  0 Implicit
      FLAG_Cestone       ""  0 Implicit

      FIN_var            ""  "C032"
      FIN_orie           ""  "O"

      //Luca 17/12/2020
      VediLimiti_PCV     "" 0 Implicit

      perRADICE          ""  ""
      RADICE             ""  ""

      COD_EREDITA        ""  "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB AssModuli_368

      //if( ACTION()==0  )
      //{
      //   if( VAR_DivVerticale == 2 )  { X = $M368_Spe_DivLeg19 }
      //   if( VAR_DivVerticale == 3 )  { X = $M368_Spe_DivLeg38 }
      //}
      if( VAR_DivVerticale == 2 )  { X = $M368_Spe_DivLeg19 }
      if( VAR_DivVerticale == 3 )  { X = $M368_Spe_DivLeg38 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //X BASETTE
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      //vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C009_CmpModulo_368
      GOSUB Set_Gest_C187_CmpModulo_368

      RADICE = "DVLG36"

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //Simone 18/05/2022
   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C009_CmpModulo_368
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
   }

   //{ CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO
   Posiziona PCV_ContCollisioni_368 cfdw
   {
      limite = 42

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

      @base_0 = base_0

      @escluso = 1
      if( $PCV_ContCollisioni_su_DIV == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfup
   {
      limite = 42

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

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_DIV == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cfrt
   {
      limite = 45

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

      @base_0 = base_0

      @escluso = 1
      if( $PCV_ContCollisioni_su_DIV == 1 ) { @escluso = 0 }
   }

   Posiziona PCV_ContCollisioni_368 cffr
   {
      limite = 45

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

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

      @escluso = 1
      if( $PCV_ContCollisioni_su_DIV == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU ELEMENTO

   //{ CONTROLLO COLLISIONI RIPETITORE IR
   Posiziona PCV_ContCollisioni_368 cs4
   {
      limite = 30

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

      @escluso = 1
      if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI RIPETITORE IR

   //{ CONTROLLO COLLISIONI LED E FARETTI INTERNI
   Posiziona PCV_ContCollisioni_368 cdw
   {
      limite = 30

      if( $PCV_ContCollisioni_da_IL_INT == 1 ) { limite = 10 + 10 + X }
      if( $PCV_ContCollisioni_da_IL_EST == 1 ) { limite = 15 + 15 + X  }

      @base_0.x = base_0.x + X/2 - limite/2
      @base_0.y = base_0.y - 95
      @base_0.z = base_0.z
      @X = limite
      @Y = Y + 30
      @Z = Z

      if( $PCV_ContCollisioni_da_IL_INT == 1
        | $PCV_ContCollisioni_da_IL_EST == 1  )
      {
         @Y = Y + 60
         @base_0.y = base_0.y - 20
      }

      @escluso = 1
      if( $PCV_ContCollisioni_da_IL == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI LED E FARETTI INTERNI

   //{ CONTROLLO COLLISIONI PASSACAVI SU SCHIENA
   Posiziona PCV_ContCollisioni_368 cdsch
   {
      limite = 50

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

      @PCV_Orie_test = "XYZ"

      @escluso = 1
      if( $PCV_ContCollisioni_su_SCH == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU SCHIENA

   //{ CONTROLLO COLLISIONI PASSACAVI SU FONDO
   Posiziona PCV_ContCollisioni_368 cdfnd
   {
      limite = 50
      if( FLAG_Cassetto | FLAG_Cestone ) { limite = 128 }

      @base_0.x = base_0.x + X/2 - limite/2
      @base_0.y = base_0.y - $M368_Spe_Fnd*1.5
      @base_0.z = base_0.z
      @X = limite
      @Y = 85
      @Z = Z

      @PCV_Orie_test = "XZY"

      @escluso = 1
      if( $PCV_ContCollisioni_su_FND == 1 ) { @escluso = 0 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI SU FONDO

   //Luca 15/02/2021
   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @base_0.x = base_0.x - 15
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = X + 30
      @Y = Y
      @Z = Z
      //?
      //if( Z > 350 ) { @Z = 345 }
   }
   #endif
}

Elemento DivisiorioOrizLegLiv_368
{
   Descrizione = "Divisorio ORIZZONTALE moduli con cassetto"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           300
      Y "Spessore"             18
      Z "Profondità"          318

      FLAG_Moduli_368    ""  1

      //FIN_var         ""  "C032"
      FIN_var         ""  "C036"
      FIN_orie        ""  "O"

      RADICE          ""  "RPLG36"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
   }

   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z
      @X = X
      @Y = 49
      @Z = Z
   }
   #endif
}


Elemento Attaccaglia_368
{
   Descrizione = "Attaccaglie"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {

      X                      "Larghezza"    30
      Y                      "Spessore"     70
      Z                      "Profondità"   15

      // 1 ATTACCAGLIA CON GANCIO
      // 2 ATTACCAGLIA A BOTTONE
      // 3 BARRA A T
      TipoAttaccaglia        ""             0
      PosAttaccaglia         ""             -1

      X_modulo               ""             0

      FLAG_PerCtg            ""             0    Implicit

      ConBarra               ""             0
      Barra_Offset_X         ""             2
      Barra_Offset_Y         ""             0

      Var_Anta_Opzione_Dsc   ""             ""   Implicit

      file_sat               ""             ""
      file_sat_barra         ""             ""

      M4_NO_OFFS             ""             1

      FLAG_Debug             ""             0    Implicit

      VediLimiti_PCV         ""             0    Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Config_Attaccaglia_368
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Config_Attaccaglia_368

      X_modulo = VAR_VAL(PADRE(ATTUALE(),1),"X")
      Y_modulo = VAR_VAL(PADRE(ATTUALE(),1),"Y")

      ConBarra = 0

      if( TipoAttaccaglia==1 | TipoAttaccaglia==2 )
      {
         ConBarra = 1
         if( X_modulo == 368 )
         {
            ConBarra = 0
            if( PosAttaccaglia == -1 ) { ConBarra = 2 }
         }
         if( X_modulo >  552 )
         {
            ConBarra = 2
            if( X_modulo <= 2*$M368_Spe_Fia + 2*320 + 2*Barra_Offset_X ) { ConBarra = 1 }
         }

         //"le madie con ante battenti multiple hanno barre a muro da 102mm, attualmente vengono utilizzate quelle da 300"
         if( VAR_VAL(PADRE(ATTUALE(),2),"VAR_ConfigVani") > 1 )  { ConBarra = 1 }

         if( Var_Anta_Opzione_Dsc == "VETRINA")                  { ConBarra = 1 }
      }

      //PER CARTONGESSO
      if( FLAG_PerCtg )                                          { ConBarra = 0 }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat
   {
      GOSUB posa_blocco
      @import = file_sat

      if( TipoAttaccaglia == 3 ) { @base_0.x = base_0.x + X/2 }

      @c_rivestimento = $c_alluminio
   }

   Posiziona Attaccaglia_Barra bar
   {
      @escluso = 1
      if ( ConBarra > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + Barra_Offset_X                                                                        //Sinistra
      if( PosAttaccaglia > 0  )                    { @base_0.x = base_0.x + X - @X - Barra_Offset_X }              //Destra
      if( PosAttaccaglia == 0 )                    { @base_0.x = base_0.x + (X - @X)/2 }                           //Centrata rispetto attaccaglia
      if( X_modulo == 368 & PosAttaccaglia == -1 ) { @base_0.x = base_0.x + (X_modulo - 2*$M368_Spe_Fia - @X)/2 }  //Centrata rispetto contenitore

      @base_0.y = base_0.y + Y - @Y/2 - Barra_Offset_Y

      @base_0.z = base_0.z + 2.5
   }

   //ingombro passacavi
   Posiziona PCV_ContCollisioni_368 PCV1
   {
      @escluso = 1
      if( TipoAttaccaglia==1 | TipoAttaccaglia==2 | TipoAttaccaglia==3 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = 42.5
      @Y = 146.6
      @Z = 32

      @base_0.x = base_0.x
      if( PosAttaccaglia > 0  ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z

      if( TipoAttaccaglia == 3 )
      {
         @base_0.x = base_0.x + $M368_Spe_Fia
         @base_0.y = base_0.y + Y - 35
         @X = X - 2*$M368_Spe_Fia
         @Y = 35
      }
   }

   Posiziona PCV_ContCollisioni_368 PCV2
   {
      @escluso = 1
      if( TipoAttaccaglia==1 | TipoAttaccaglia==2 )
      {
         if( ConBarra > 0 ) { @escluso = 0 }
      }

      GOSUB posa_blocco
      @X = 67.5
      if( ConBarra == 2 ) { @X = 287.5  }
      //BARRA INTERA
      if( X_modulo == 368 & ConBarra == 2 )  { @X = 287.5 - 42.5 }

      @Y = 81
      @Z = 28

      @base_0.x = base_0.x + 42.5
      if( PosAttaccaglia > 0  ) { @base_0.x = base_0.x + X - @X - 42.5 }
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z
   }

   Posiziona PCV_ContCollisioni_368 PCVTSX
   {
      @escluso = 1
      if( TipoAttaccaglia==3 ) { @escluso = 0 }

      @Y = 90
      @Z = 32
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z

      @X = 40
      @base_0.x = base_0.x + X/2 - @X/2
      if( X > 368 )  { @base_0.x = base_0.x + $M368_Spe_Fia + 105 }
      if( X > 552 )  { @base_0.x = base_0.x + $M368_Spe_Fia + 150 }
   }

   Posiziona PCV_ContCollisioni_368 PCVTDX
   {
      @escluso = 1
      if( TipoAttaccaglia==3 & X > 368 ) { @escluso = 0 }

      @Y = 90
      @Z = 32
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z

      @X = 40
      @base_0.x = base_0.x + X - 105 - $M368_Spe_Fia - @X
      if( X > 552 )  { @base_0.x = base_0.x + X - $M368_Spe_Fia - 150 - @X }
   }

   Posiziona PCV_ContCollisioni_368 PCVTCX
   {
      @escluso = 1
      if( TipoAttaccaglia==3 & X>1472 ) { @escluso = 0 }

      @Y = 90
      @Z = 32
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z

      @X = 40
      @base_0.x = base_0.x + X/2 - @X/2
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

Elemento Attaccaglia_Barra
{
   Descrizione = "Attaccaglie - Barra"
   Code        = 368
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X          "Larghezza"       320
      Xr         ""                320
      Y          "Altezza"         27.5
      Z          "Profondità"      6

      ConBarra   ""                0 Implicit

      FLAG_Debug ""                0 Implicit

      M4_NO_OFFS ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      DescEdit__ = "BARRA ATTACCAGLIA 368/MAT"

      X  = 320
      Xr = 320
      Y  = 27.5
      Z  = 6

      if( ConBarra == 1 )
      {
         X  = 102
         Xr = 100
         Y  = 26
         Z  = 6.5
      }

      file_sat_barra = ""
      if( ConBarra == 1
        | ConBarra == 2 ) { file_sat_barra = STRCAT( $path_sat, "368\Ferramenta\BarraAttaccaglia_", STR(X), ".sat") }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

      GOSUB posa_blocco

      @X = Xr

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

   Posiziona __import__ sat
   {
      @escluso = 0
      if( file_sat_barra == "" ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = Xr

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

      @import = file_sat_barra
      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

   Posiziona Blocco dbg2
   {
      @escluso = 1 - FLAG_Debug

      @X = X/2
      @Y = Y/2
      @Z = Z

      @base_0 = base_0
      @base_0.z = base_0.z - 0.1

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

Elemento BarraHettich_368
{
   Descrizione = "Barra Hettich 368"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X             "Larghezza"       368
      Xr            "Larghezza reale" 326

      Y             "Altezza"         28
      Z             "Profondità"      6

      ATT_Tipologia ""                0 Implicit

      HIDE          ""                2
   }

   Assegnazioni
   {
      GOSUB AssComune

      file_dir  = STRCAT( $path_sat, "368\Ferramenta\")
      file_name = STRCAT( "BarraHettich_", STR(Xr), ".sat")
      file_sat =  STRCAT( file_dir, file_name)

      wk_file = 0
      if ( FILE_EXIST(file_sat) == 1 ) { wk_file = 1 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      Xr = X - 42
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

      GEST_X = Xr
      RADICE = "CTG"

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona __import__ bh
   {
      @escluso = 1 - wk_file

      GOSUB posa_blocco
      @X = Xr

      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z + Z

      @import = file_sat

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco bhb
   {
      @escluso = wk_file

      GOSUB posa_blocco
      @X = Xr

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

      @c_rivestimento = $c_alluminio
   }

   Posiziona PCV_ContCollisioni_368 PCV
   {
      @X = Xr
      @Z = 30
      @Y = 30

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

Elemento Miniwinch_368
{
   Descrizione = "MINIWINCH"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X               "Larghezza"         15.5
      Y               "Spessore"          90
      Z               "Profondità"        164

      //MINIWINCH - NANOWINCH
      VAR_Tipologia   ""                  "MINIWINCH"
      VAR_Posizione   ""                  -1

      file_sat        ""                  ""

      M4_NO_OFFS      ""                  1

      FLAG_Debug      ""                  0 Boolean Implicit

      idx_inner_near  ""                  -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      DescEdit__ = VAR_Tipologia

      //Dimensioni
      X = 15.5
      Y = 90
      Z = 164

      if( VAR_Tipologia == "NANOWINCH")
      {
         X = 20
         Y = 75.2
         Z = 105.5
      }

      //Sat
      sat_verso = ""
      if( VAR_Tipologia == "MINIWINCH")
      {
         if(VAR_Posizione < 0) { sat_verso = "SX" }
         if(VAR_Posizione > 0) { sat_verso = "DX" }
      }

      sat_file = STRCAT( VAR_Tipologia, sat_verso, ".sat")
      sat_path = STRCAT( $path_sat, "368\Ferramenta\", sat_file)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

   Posiziona __import__ sat
   {
      GOSUB posa_blocco

      @import = sat_path

      @c_rivestimento = $c_pomice
   }

  #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @X = X + 10
      @Y = 100
      @Z = 225

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

      if( VAR_Tipologia == "NANOWINCH") { GOSUB posa_blocco }
   }

   Posiziona _cont_per_near near_in
   {
      idx_inner_near = ATTUALE()

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

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

Elemento StaffaMadiaGlass_368
{
   Descrizione = "StaffaMadiaGlass"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "Larghezza"         100
      Y "Spessore"           90
      Z "Profondità"          1

      OrieStaffa "" 0

      HIDE "" 1

      M4_NO_OFFS "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( OrieStaffa == 0 ) { Y = 38 + 20 }
      //verticale
      if( OrieStaffa == 1 ) { X = 20 + 19 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @c_rivestimento = $c_alluminio
   }
}

//Simone 26/01/2023
Elemento Massello_Antiribaltamento
{
   Descrizione = "Antiribaltamento"
   Code        = CUB
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X            "Larghezza"  38
      Y            "Altezza"    146
      Z            "Profondità" 16

      FLAG_CopSp38 ""           0         Implicit

      idx_fusto    ""           -1        Implicit

      Pos_massello "Posizione"  -1
      OffX         ""           13
      OffY         ""           32

      GEST_CODICE  ""           "F33008"
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = 38
      Z = 16
      if( Pos_massello == 0 ) { Y = X }

      if( FLAG_CopSp38 == 1 ) { OffY = 13 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_IDX(idx_fusto)) { GEST_IDXPADRE = idx_fusto                   }
      else                   { GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1) }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco mas_ant
   {
      GOSUB posa_blocco
      @c_rivestimento = [242, 231, 191]
   }
}

Elemento Led_PannelloRetro_368
{
   Descrizione = "Led per pannello retro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       NoCollision;LedPan368;CamIncidente;Offset

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                         "Lunghezza"      50
      Xr                        "Lunghezza"      50       ShowAlways
      Y                         "Altezza"        7
      Z                         "Spessore"       8.6

      //Luca 10/02/2022
      //gestione maggiorazioni sx/dx in caso di led che si devono unire
      MaggSX                    ""               0
      MaggDX                    ""               0
      MaggX                     ""               30

      LED_Watt                  "WATT LED"       0        ShowAlways

      TLED_Posizione            ""               0

      //0 Inferiore
      //1 Superiore
      //2 Sinistra
      //3 Destra
      PosizioneLED              ""               0        SaveAlways

      //1 368 Legno / 368 Glass / 368 Glass Suv
      //2 Contenitore 368 Glass per madia
      //3 GlassMirror
      //4 Modulo368 sotto alzata Air
      TipologiaLED              ""               1        SaveAlways

      idx_steso1                ""               -1
      idx_steso2                ""               -1

      idx_led                   ""               -1
      idx_pan_ref               ""               -1
      idx_pan_ref_sx            ""               -1
      idx_pan_ref_dx            ""               -1

      idx_cnear                 ""               -1
      idx_cnear_sx              ""               -1
      idx_cnear_dx              ""               -1

      VediIlluminazione         ""               1

      auto                      ""               0
      M4_A_MURO                 ""               -1

      //M4_STENDI_RIPETIZIONI   ""               1

      TopLevel_NoMisCmp_ACT2    ""               1

      M4_DLINK_MODE__           "rimane steso"   0
      M4_DIALOG                 ""               32

      CMP2_AZIONI               ""               "M"
      ORD_MISAMETRO             ""               "X"

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

      FillerM2G                 " "              ""       ShowAlways

      M4_MIS                    ""               "X;Xr"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB NO_AUTO

      if(ACTION()==2 & CMD()==$CMD_INTERATTIVO & $ATTIVA_DLL==1)
      {
         if ( ins2_att==$ins2_posizionato
            | ins2_att==$ins2_agganciato
            | ins2_att==$ins2_accessorio )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"X","(100-2500)")
            CHIEDI(idx_att,"X")
         }
      }

      Xr = X + MaggSX*MaggX + MaggDX*MaggX
      if( TipologiaLED == 2 ) { Xr = Xr - 40 }
      //Simone 07/07/2022
      if( TipologiaLED == 3 ) { Xr = X }

      Xt = Xr

      // assorbimento 11w/m
      xm = Xt/1000
      LED_Watt = 11 * xm

      if( $OnLoadOrder )
      {
         wk_diff = ABS( X - FLOOR(X) )
         if( wk_diff > 0 & wk_diff != 0.5 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"X")
            X = X*10
            X = FLOOR(X+0.5)/10
            VAR_SET_MODIFICATA(ATTUALE(),"X","")
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      base_so = base_0
      alto_ne = alto_2

      pnt_sx_0 = base_0
      pnt_sx_1 = alto_1
      pnt_dx_0 = base_3
      pnt_dx_1 = alto_2
   }
   #include %path_bdm%\TLib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if($query_type==3)
      {
         //Decido quanti pick (2)
         $QueryResult__ = 2
         //GOSUB CMP_CODICEATT
         EXITSUB()
      }

      //if($query_type==4)
      //{
      //   $id_sx = $query_p1[1]
      //   $id_dx = $query_p1[2]
      //
      //   GOSUB CorpoAvanzata_Led_Pannello_368
      //}
   }

   Procedura Stendi
   {
      if ( ACTION() == $stesi_Action )
      {
         SHOW_POINT($idx_show_point, "pnt_stendi_led*")
         EXIT()
      }

      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXITSUB() }

      //devo controllare i casi in cui non è possibile stendere
      blocca_stesura = 0
      blocca_stesura_msg = ""

      if( $stesi_mode_sx == $stesi_XYZ & $stesi_mode_dx == $stesi_XYZ ) { GOSUB Stendi_Led_368 }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

      GOSUB CtrlLed_Idx_Dimensione

      //Luca 10/02/2022
      if( NOME(idx_pan_ref) == "PannelloRetroXLED_368" ) { GOSUB CtrlLed_Affiancati }
   }

   Procedura Offset
   {
      GOSUB CtrlLed_Idx_Dimensione
   }

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

      GOSUB Notifica_Led_368
   }

   Gestionale
   {
      if( COMPONENDO() | ACTION() <= 0 | ACTION() == 2 ) { EXIT() }

      GOSUB GestComune

      //Riga o figlio
      TIPO_COLLO    = ""
      GEST_IDXPADRE = ATTUALE()

      if( UN_PADRE("368_Mirror"))  { GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1) TIPO_COLLO = "LT4" }
      if( UN_PADRE("GlassMirror")) { GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1)                    }

      //Radice
      perRADICE = "LEDPAN368"
      if( TipologiaLED == 2
        | TipologiaLED == 4 ) { perRADICE = "LED368GS" }
      if( TipologiaLED == 3 ) { perRADICE = "LEDSOSCC" }

      if( RADICE != perRADICE
        | VAR_VAL( ATTUALE(), "GEST_X") != Xr )
      {
         flag_CAMBIA_VAR = 1
         RADICE = perRADICE
         GEST_X = Xr
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco dbg
   {
      @escluso = 1
      GOSUB posa_blocco
      @c_rivestimento = [255, 0, 0]
      @f_rivestimento = "0.9"
   }

   Posiziona _graf_Led_PannelloRetro_368 led
   {
      @X = Xr

      @base_0 = base_0
      @base_0.x = base_0.x - MaggSX*MaggX
      if( TipologiaLED == 2 )
      {
         if( PosizioneLED <= 1 ) { @base_0.x = base_0.x + (X - @X)/2 }
         else                    { @base_0.y = base_0.y - (X - @X)/2 }
      }

      @ang_z = 0
      if( PosizioneLED > 1 )  { @ang_z = -90 }

      //Verso del VediLuce, devono puntare verso l'interno se led 368Glass
      @Verso = 0
      if( PosizioneLED == 1
        | PosizioneLED == 3 ) { @Verso = 1 }

      if( TipologiaLED == 2 ) { @Verso = 1 - @Verso }

      idx_led = ATTUALE()
      idx_cnear = @idx_cnear
      idx_cnear_sx = @idx_cnear_sx
      idx_cnear_dx = @idx_cnear_dx
   }

   Posiziona RigaOrdine_NonGraficato trasf
   {
      @escluso = 1
      if( TipologiaLED == 2
        | TipologiaLED == 4 ) { @escluso = 0 }

      @base_0 = base_0

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

      @X = 247
      @Y = 30
      @Z = 17

      @RIGA_ORDINE = 1
   }
}

Elemento _graf_Led_PannelloRetro_368
{
   Descrizione = ""
   Code        = LED
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"    100
      Y                 "Altezza"        7
      Z                 "Profondità"   8.6

      PosizioneLED      ""               0 Implicit
      TipologiaLED      ""               1 Implicit
      VediIlluminazione ""               1 Implicit

      Verso             ""               0

      NumLuci           ""               1

      idx_cnear         ""              -1
      idx_cnear_sx      ""              -1
      idx_cnear_dx      ""              -1

      HIDE              ""               1
   }

   Assegnazioni
   {
      GOSUB AssComune

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

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Posiziona Blocco_Luce led
   {
      GOSUB posa_blocco

      @FacciaLuminosa = "DW"
      if( Verso > 0 ) { @FacciaLuminosa = "UP" }
   }

   Posiziona VediLuce vd1
   {
      @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
   }

   Posiziona _cont_per_near_sx sx
   //Posiziona Blocco sx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 15
      if( PosizioneLED == 0  ) { @base_0.y = base_0.y - 5 }
      @base_0.z = base_0.z
      @X = 20
      @Y = 30
      @Z = Z

      idx_cnear_sx = ATTUALE()
   }

   Posiziona _cont_per_near_dx dx
   //Posiziona Blocco dx
   {
      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - 15
      if( PosizioneLED == 0  ) { @base_0.y = base_0.y - 5 }
      @base_0.z = base_0.z
      @X = 20
      @Y = 30
      @Z = Z

      idx_cnear_dx = ATTUALE()

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

   Posiziona _cont_per_near_dx cx
   //Posiziona Blocco cx
   {
      @base_0.x = base_0.x + 100
      @base_0.y = base_0.y - 15
      @base_0.z = base_0.z
      @X = X - 200
      @Y = 30
      @Z = Z

      idx_cnear = ATTUALE()
   }
}

Elemento TrasformatoreLED_368
{
   Descrizione = "LEd per pannello retro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       NoCollision;LedPan368;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X      "Lunghezza"  100
      Y      "Altezza"     30
      Z      "Spessore"    20

      //Simone 07/12/2022 - l'alimentatore da 24W viene sostituito dal 15W
      //TLED_Tipologia = 0 --> 24W  (solo 36e8)
      //TLED_Tipologia = 1 --> 30W
      //TLED_Tipologia = 2 --> 100W
      TLED_Tipologia  ""    0

      //Simone 18/11/21 - Mail di Barbara "ALIMENTATORI 30mm/36e8"
      //Se 0, indica l'utilizzo dell'alimentatore Standard
      //Se 1, indica l'utilizzo dell'alimentatore Slim
      VT_ALI          "Alimentatore slim"          0

      VAR_Glass_SUV   ""                           0 Implicit

      GEST_CODICE     ""                           ""
      perCODICE       ""                           ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = 100
      Y =  30
      Z =  20

      if( TLED_Tipologia == 1
        | TLED_Tipologia == 2
        | TLED_Tipologia == 3 )
      {
         X = 247
         Y =  30
         Z =  17
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\TLib\orie.inc

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $MAKE_ROW

      //Simone 07/12/2022 - L'alimentatore da 24W viene sostituito dal 15W
      //perCODICE = "CU1702"
      perCODICE = "CU1715"
      if( TLED_Tipologia == 1 )  { perCODICE = "CU1703" }
      if( TLED_Tipologia == 2 )  { perCODICE = "CU1710" }

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

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco led
   {
      GOSUB posa_blocco
      @c_rivestimento = $c_nero
   }
}

Elemento LavTrasformatoreLED_368
{
   Descrizione = "LEd per pannello retro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X      "Lunghezza"  100
      Y      "Altezza"     30
      Z      "Spessore"    20

      TLED_Tipologia  ""    0
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti

      stp_pnt_centro = [X/2,Y/2,Z/2]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco led
   {
      GOSUB posa_blocco
      @c_rivestimento = $c_alluminio

      if( UN_PADRE("GlassMirror")
        | UN_PADRE("368_Mirror") ) { @Stp_Quota_WP = 2 }
   }

   Posiziona ContCtrlScassi_WallPanel cont
   {
      //@escluso = 1
      ////if( VediIng==1 & FormaScasso==0 ) { @escluso = 0 }
      //if( VediIng==1 ) { @escluso = 0 }

      dist = 40

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

      idx_cont_coll = ATTUALE()
   }
}

Elemento FiancoRAng_368
{
   Descrizione = "Fianco dx generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 18
      Y "" 1
      Z "" 1

      TipoPan     "" "FIASX"

      idx_near    ""  -1

      FIN_var     ""  "C032"
      FIN_orie    ""  "V"

      //perRADICE   ""  ""
      //RADICE      ""  ""
      GEST_CODICE   ""  "2AE034"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $M368_Spe_Fia

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8

      GOSUB AssModuli_368
   }

   PuntiNotevoli
   {
      GOSUB punti
     // Raffaele 20.10.2020 per MdF_Sat
      vano_0_0 = [0,0,0]
      vano_l_0 = X
      vano_p_0 = Z
      vano_hide_0 = 1
   }

   Controlli
   {
      GOSUB CtrlComune

      //perRADICE = ""
      //RADICE = perRADICE
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _grafica_pannello_RA_368 bl
   {
      GOSUB posa_blocco
      @TipoPan = TipoPan
      GOSUB rivestimento
   }
}

Elemento CopRAng_368
{
   Descrizione = "Coperchio Raccordo angolo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X "" 1
      Y "" 19
      Z "" 1

      FIN_var     ""  "C032"
      FIN_orie    ""  "O"

      //perRADICE   ""  ""
      //RADICE      ""  ""
      GEST_CODICE   ""  "2AE035"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssModuli_368

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //GOSUB CucP_OnTabEredita
         BloccaModificaCatGest_Cmp_368( ATTUALE() , STRCAT("GEST_",FIN_var) )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + 17
      @base_0.z = base_0.z + 17
      @X = X - 17*2
      @Z = Z - 17*2
      @Y = 16
      GOSUB rivestimento
   }

   Posiziona Blocco bl2
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - 3
      @Y = 3
      GOSUB rivestimento
   }
}

Elemento AntaBifacciale_368
{
   Descrizione = "Frontale Bifacciale"
   Code        = INT
   Gruppo      = "Ante"
   Tipo        = Contenitore
   Forma       = ""
   Alias         Base;Bifacciale;CamInciso;Bifacciale368;StampaXG;CheckBifaccialePassacavi;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368
      Y       "Altezza"         368
      Z       "Profondità"       20

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

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0 Boolean

      TipoBifacciale    "Tipo Bifacciale" 0 Menu ( TpBif_368 )
      TipoBifaccialeStr "" ""

      //Verso        "" -1
      //AntaInCoppia "" 0
      //Apertura     "Tipologia"  "BA"

      //Legenda valori M4_DIALOG:
      // 1 : automatica
      // 2 : selezione
      // 4 : manuale
      // 8 : accessorio  non graficato
      //16 : schienali
      //32 : punti
#ifndef TEC
      M4_DIALOG "" 2
      //Luca 23/12/2021
      //M4_STENDI_SINGLE_PICK "" 1
      M4_STENDI_SINGLE_PICK "" 0
      VAR_Regola_Elements "" ""
#endif

#ifdef TEC
      M4_DIALOG "" 34
      M4_STENDI_SINGLE_PICK "" 0
      VAR_Regola_Elements "Config.Elements" "" Utente ( )
#endif

      M4_MIS    "" "Filler*;X;Y;Z;Xr;Yr"

      //M4_A_MURO "" 0
      M4_LINK2WALL_MODE__   ""  3


      //M4_STENDI_RIPETIZIONI "" 1

      M4_DLINK_MODE__ "rimane steso"  0

      //FIN_var  "" "C002"
      FIN_var    "" "C001"
      FIN_orie   ""  "O"

      NO_GEST      "" 0

      //idx_struttura a cui sono agganciata
      idx_struttura "" -1
      idx_ref       "" -1

      idx_cnear_cx  "" -1
      idx_cnear_sx  "" -1
      idx_cnear_dx  "" -1

      XGLASS      "Num. XGLASS" "" Utente ( )

      CMP2_AZIONI      ""      "MS"

      //perRADICE   "" ""
      //RADICE      "" ""
      //GEST_CODICE "" ""
      COD_EREDITA "" "PRE;POST;C011_PRE"

      M4_CNT_LINK_MODE__ ""   2

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Ant = $M368_Spe_Ant

      Spe_Vtr = 4

      RieXY  = 1.5

      RieX_Pan = 3.5
      RieY_Pan = 3.5

      //Simone 28/06/21 - Correggo posizionamento vetro bifacciale sp.4
      if( TipoBifacciale == 1 )
      {
        RieX_Pan = 22.5
        RieY_Pan = 18
      }

      Z = Spe_Ant

      M4_GRUPPO__  = MSG(1022)

      GOSUB NO_AUTO

      FIN_var_fin = "C001"
      FIN_var_pan = "C033"

      TipoBifaccialeStr = "ANTA BIFACCIALE"
      if( TipoBifacciale == 1 ) { TipoBifaccialeStr = "PANNELLO RETRO" }

      if( ACTION()==0 )
      {
         //M4_DIALOG = 2
         //if( TipoBifaccialeStr == "ANTA BIFACCIALE" ) { M4_DIALOG = 34 }

         //Luca 22/12/2021
         //entrambi per punti, per gestire la stesura su pcf
         M4_DIALOG = 34
      }

      if( ACTION()>0 & $OnLoadOrder==0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_CompostoGEN",1)
         HIDE_ON_EDIT2(ATTUALE(),"TipoBifacciale",1)


         if( FLAG_CompostoGEN == 0 )
         {
           VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
           VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1

           CtrlRangeRidM2G(ATTUALE(),"X")
           CtrlRangeRidM2G(ATTUALE(),"Y")
         }

         if( FLAG_CompostoGEN == 1 )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
            VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)
         }
      }

      if( FLAG_CompostoGEN == 0 ) {  CMP2_AZIONI = "S" }

      //per definizioni variabili
      GOSUB CtrlPosizioneKEKU_AntaBif_368
   }

   PuntiNotevoli
   {
      Yr = Y - $M368_Rie_Pan
      Xr = X - $M368_Rie_Pan

      GOSUB punti

      base_c = [X/2,0,0]

      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z

      //Luca 04/06/2021
      STP_Bollina = 1
   }

   #include %path_bdm%\Tlib\orie.inc

   //Procedura OnQueryBdmLocal
   //{
   //   //Stesura con due pick
   //   if($query_type==3)
   //   {
   //      $QueryResult__ = 2
   //      EXITSUB()
   //   }
   //}

   Procedura Stendi
   {
      //se la selezione è errata non passo la seconda volta
      if( VAR_VAL( ATTUALE(), "delme") > 0) { EXIT() }

      if( ACTION() == $stesi_Action)
      {
         SHOW_POINT($idx_show_point, "punto_bif368_*_*")
         EXIT()
      }

      //devo controllare i casi in cui non è possibile stendere
      wk_blocca_stesura = 0
      wk_blocca_stesura_msg = ""

      if( $stesi_mode_sx == $stesi_XYZ
        & $stesi_mode_dx == $stesi_XYZ)
      {
         // Punti e idx
         wk_punto_1 = $stesi_pt_sx
         wk_punto_1_0 = [ wk_punto_1.x, 0, wk_punto_1.z]

         wk_punto_2 = $stesi_pt_dx
         wk_punto_2_0 = [ wk_punto_2.x, 0, wk_punto_2.z]

         // Sinistra e destra
         wk_punto_1_var = "punto_bif368_sx_##"
         wk_punto_2_var = "punto_bif368_dx_##"
         wk_punto_1_idx = GetIdxWithPoint( -1, wk_punto_1_var, wk_punto_2_var, wk_punto_1)
         wk_punto_2_idx = GetIdxWithPoint( wk_punto_1_idx, wk_punto_1_var, wk_punto_2_var, wk_punto_2)

         if( wk_punto_2_idx != wk_punto_1_idx)
         {
            wk_punto_2_idx = GetIdxWithPoint( -1, wk_punto_1_var, wk_punto_2_var, wk_punto_2)
            wk_punto_1_idx = GetIdxWithPoint( wk_punto_2_idx, wk_punto_1_var, wk_punto_2_var, wk_punto_1)
         }

         // Superiore e inferiore
         if( wk_punto_2_idx != wk_punto_1_idx)
         {
            wk_punto_1_var = "punto_bif368_up_##"
            wk_punto_2_var = "punto_bif368_dw_##"
            wk_punto_1_idx = GetIdxWithPoint( -1, wk_punto_1_var, wk_punto_2_var, wk_punto_1)
            wk_punto_2_idx = GetIdxWithPoint( wk_punto_1_idx, wk_punto_1_var, wk_punto_2_var, wk_punto_2)
         }

         if( wk_punto_2_idx != wk_punto_1_idx)
         {
            wk_punto_2_idx = GetIdxWithPoint( -1, wk_punto_1_var, wk_punto_2_var, wk_punto_2)
            wk_punto_1_idx = GetIdxWithPoint( wk_punto_2_idx, wk_punto_1_var, wk_punto_2_var, wk_punto_1)
         }

         if( IS_IDX( wk_punto_1_idx) == 0
           | IS_IDX( wk_punto_2_idx) == 0)
         {
            delme = 1
            wk_blocca_stesura = 1
            EXITSUB()
         }

         wk_idx_ref = wk_punto_1_idx

         // Inverto
         SET_#(wk_idx_ref)
         wk_elemento_b0_0 = [ #base_0.x, 0, #base_0.z]
         if( DISTANZA( wk_punto_1_0, wk_elemento_b0_0) < DISTANZA( wk_punto_2_0, wk_elemento_b0_0))
         {
            wk_punto_1 = $stesi_pt_dx
            wk_punto_1_0 = [ wk_punto_1.x, 0, wk_punto_1.z]

            wk_punto_2 = $stesi_pt_sx
            wk_punto_2_0 = [ wk_punto_2.x, 0, wk_punto_2.z]
         }

         // Bifacciale
         /// Posiziono
         idx_ref = PADRE( wk_punto_1_idx, -1)

         base_0 = wk_punto_1
         if( wk_punto_1.y > wk_punto_2.y) { base_0.y = wk_punto_2.y }

         /// Dimensiono
         X = DISTANZA( wk_punto_1_0, wk_punto_2_0)*10
         X = FLOOR( X + 0.5)/10

         Y = ABS( wk_punto_2.y - wk_punto_1.y)

         /// Angolo
         ang_y = ANG_TOT_NOR(idx_ref) + 180

         // BLOCCHI
         // 1 - No unico su due moduli
         if( wk_blocca_stesura <= 0
           & wk_punto_1_idx != wk_punto_2_idx)
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1110)

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.000")
            #endif
         }

         // 2 - No parziale sia in larghezza che altezza
         if( wk_blocca_stesura <= 0
           & X != #X & Y != #Y)
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1110)

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.001")
            #endif
         }

         // 3 - No dimensioni non valide
         if( wk_blocca_stesura <= 0
           & (X <= 0 | Y <= 0 | X > #X | Y > #Y))
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1110)

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.002")
            #endif
         }

         // 4 - No se presenza di attaccaglie
         if( wk_blocca_stesura <= 0
           & VAR_VAL( idx_ref, "ConAttaccaglie") == 1)
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1217)
            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.003")
            #endif
         }

         // 5 - Pcf
         if( wk_blocca_stesura <= 0
           & VAR_VAL( idx_ref, "PCF_Elements") == 1)
         {
            //NOTA: non mi torna, intanto commento, qualcuno alzerà la mano se qualcosa non funziona
            //wk_blocca_stesura = 0

            if( VAR_VAL( idx_ref, "VAR_FixMuro") == 1
              & VAR_VAL( idx_ref, "FLAG_Speciale") == 0)
            {
               wk_blocca_stesura = 1
               wk_blocca_stesura_msg = MSG(1217)
               #ifdef TEC
                  wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.008")
               #endif
            }
         }
      }

      if( $stesi_mode_sx==$stesi_Elemento
        & $stesi_mode_dx==$stesi_Elemento)
      {
         $stesi_idx_sx = $stesi_idx1
         $stesi_idx_dx = $stesi_idx2

         idx_ref = $stesi_idx_sx

         if( NOME(idx_ref) != "ModuloGiorno_368"
           & NOME(idx_ref) != "Modulo_368" )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1217)

            if( VAR_VAL(idx_ref,"PCF_Elements") == 1)
            {
               wk_blocca_stesura = 10
               wk_blocca_stesura_msg = STRCAT(MSG(1305))
            }

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.004")
            #endif
         }

         if( VAR_VAL(idx_ref,"ConAttaccaglie") == 1 )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1217)

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.005")
            #endif
         }

         if( VAR_VAL(idx_ref,"ConBifacciale") == 1 )
         {
            wk_blocca_stesura = 1
            wk_blocca_stesura_msg = MSG(1216)

            #ifdef TEC
               wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.006")
            #endif
         }

         SET_#(idx_ref)
         base_0 = #base_3

         X = #X
         Y = #Y
      }

      if( wk_blocca_stesura != 10 )
      {
         //Luca 04/02/2021
         //aggiungo controllo dimensioni
         if( TipoBifaccialeStr == "PANNELLO RETRO" )
         {
            //Altezze assolute
            if( Y  < 138
              | Y  > 1104 )                       { wk_blocca_stesura = 2 }

            //Larghezze assolute
            if( X  < 368
              | X  > 2208 )                       { wk_blocca_stesura = 2 }

            //Casi specifici non fattibili
            // 184
            if( Y  > 138 & Y <= 184 & X > 1840 )  { wk_blocca_stesura = 2 }

            // 920
            if( Y  > 736 & Y <= 920 & X > 552 )   { wk_blocca_stesura = 2 }

            // 1104
            if( Y  > 920 & Y <= 1104 & X > 736 )  { wk_blocca_stesura = 2 }
         }
         else
         {
            if( Y <= 184 & X > 1840 )             { wk_blocca_stesura = 2 }
            if( Y  > 184 & Y <=  368 & X > 2208 ) { wk_blocca_stesura = 2 }
            if( Y  > 368 & Y <=  552 & X > 1104 ) { wk_blocca_stesura = 2 }
            if( Y  > 552 & Y <=  736 & X > 1472 ) { wk_blocca_stesura = 2 }
            if( Y  > 736 & Y <= 1472 & X >  736 ) { wk_blocca_stesura = 2 }
         }

         //Simone 22/02/2023
         if( VAR_VAL(idx_ref,"FLAG_Speciale") == 1 ) { wk_blocca_stesura = 0 }
      }

      if( wk_blocca_stesura == 2 )
      {
         wk_blocca_stesura_msg = STRCAT(MSG(1110), "\n", MSG(1243))

         #ifdef TEC
            wk_blocca_stesura_msg = STRCAT(wk_blocca_stesura_msg,"\nCod.007")
         #endif
      }

      if( wk_blocca_stesura > 0 )
      {
         delme = 1
         FLAG_RADICE = $NO_RAD

         if( wk_blocca_stesura_msg!="" )  { DISPLAY2(wk_blocca_stesura_msg) }

         //COMANDO2("Show Abilita ON")
         NO_GEST = 1
         EXIT()
      }
   }

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

      //GOSUB Notifica_Barra_Bifacciale
      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         COMANDO2("Show Abilita ON")
         EXIT()
      }

      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(X)," Y=",STR(Y) ," //Notifica ",NOME(ATTUALE())))

      GOSUB AgganciaBifacciale_368
   }

   Controlli
   {
      GOSUB CtrlComune

      //definisco idx struttura a cui sono agganciato
      if( IS_IDX(idx_ref)==1 ) { idx_struttura = idx_ref }

      if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 )
      {
         idx_struttura = AGGANCIATA(ATTUALE(),"*")

         //LZ 17/09/2021: ripristino riferimento se pcf
         if( IS_IDX(idx_struttura) == 0
           & in_pcfto == 1 )
         {
            WITH_VAR_LOCAL( PADRE( ATTUALE(), -1), "wk_itm", "wk_idx_bif", 0, 1, STR(ATTUALE()))

            $wk_i = 1
            while( $wk_i <= wk_itm )
            {
               wk_itm_att = wk_itm[$wk_i]

               if( PADRE( ATTUALE(), 1) == PADRE( wk_itm_att, 1) )
               {
                  idx_struttura = wk_itm_att
                  $wk_i = wk_itm
               }

               $wk_i = $wk_i + 1
            }
         }

         //Modulo per near
         idx_modulo_agg = idx_struttura

         BOX_MODE(0)
         NEAR_GLOBALE( "wk_near", idx_cnear_cx, 11, 0, "Modulo*368")
         if( wk_near > 0 ) { idx_modulo_agg = wk_near[1] }

         if( IS_IDX(idx_struttura) == 0 ) { idx_struttura = idx_modulo_agg }

         //Luca 17/03/2022 unisco gruppi xglass
         GrXG_IdxRef = -1
         idx_agg = AGGANCIATA(ATTUALE(),"*")
         if( IS_IDX(idx_agg) )
         {
            if( VAR_VAL(idx_agg,"pcfto") == 1  ) { GrXG_IdxRef = idx_agg }
         }
      }

      //Simone 28/06/21 - caso wildwood e laccati: finitura pannello come frontale
      FIN_idx_gest = ATTUALE()
      if( VAR_VAL_STR(FIN_idx_gest,STRCAT("GEST_",FIN_var_pan))=="__"
        | VAR_VAL_STR(FIN_idx_gest,STRCAT("GEST_",FIN_var_pan))==""  ) { FIN_var_pan  = "C001" }

      GOSUB CtrlPosizioneKEKU_AntaBif_368

      GOSUB CtrlFiancoMassello_AntaBif_368

      GOSUB GetRegola_Componenti_Elements
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST==1 )
      {
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""

         perRADICE = "ATX"
         if( TipoBifaccialeStr == "PANNELLO RETRO" )
         {
            perRADICE = "ATY"
            GEST_Z = Spe_Vtr
         }

         RADICE = perRADICE
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

      idx_agg = AGGANCIATA(idx_att,"*")
      if( IS_IDX(idx_agg) )
      {
         VAR_VALUE_SET(idx_agg,"ConBifacciale",0)
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_agg)," no_agganciati //Cancella Bifacciale"))
      }
   }

   //se posizionata, aggancio
   Procedura PostAction2
   {
      if( ACTION()<0 | COMPONENDO() | $ATTIVA_DLL==0 )   { EXITSUB() }

      if( $OnLoadOrder == 1 )                            { EXITSUB() }

      if( FLAG_CompostoGEN == 1  )                       { EXITSUB() }

      idx_agg = AGGANCIATA(ATTUALE(),"*")

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

      idx_ref = idx_agg
      COMANDO(STRCAT("LINK2POS ",STR(ATTUALE()), "  //PostAction2 ",NOME(ATTUALE())))
      GOSUB AgganciaBifacciale_368
   }

   Posiziona Blocco VT
   {
      @base_0.x = base_0.x + RieXY
      @base_0.y = base_0.y + RieXY
      @base_0.z = base_0.z + Z - Spe_Vtr
      @X = Xr
      @Y = Yr
      @Z = Spe_Vtr
      FIN_var = FIN_var_fin
      GOSUB rivestimento

      @STP_XG_STAMPA = 1
      @STP_XG_QUOTA  = 1
   }

   Posiziona Blocco pan
   {
      @escluso = 0
      if( Y < 184
        & TipoBifaccialeStr == "PANNELLO RETRO" ) { @escluso = 1 }

      @base_0.x = base_0.x + RieXY + RieX_Pan
      @base_0.y = base_0.y + RieXY + RieY_Pan
      @base_0.z = base_0.z
      @X = Xr - 2*RieX_Pan
      @Y = Yr - 2*RieY_Pan
      @Z = Z - Spe_Vtr
      FIN_var = FIN_var_pan
      GOSUB rivestimento

      if( TipoBifaccialeStr == "PANNELLO RETRO" )
      {
         @c_rivestimento = $c_pomice
         @m_rivestimento = ""
      }
   }

   Posiziona _cont_per_near cncx
   {
      idx_cnear_cx = ATTUALE()
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y/2 - @Y/2
      @base_0.z = base_0.z - 10
      @X = 20
      @Y = 20
      @Z = 20
   }

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

   Posiziona _cont_per_near cndx
   {
      idx_cnear_dx = ATTUALE()
      @base_0.x = base_3.x - 10
      @base_0.y = base_0.y + 10
      @base_0.z = base_0.z - 10
      @X = 20
      @Y = Y - 40
      @Z = 20
   }

#ifdef TEC;AZI
   Posiziona Keku kk_sx1
   {
      @escluso = 1 - KekuSX1

      @base_0.x = base_0.x + KekuSX1_OX - @X/2
      @base_0.y = base_0.y + KekuSX1_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = -1
   }

   Posiziona Keku kk_sx2
   {
      @escluso = 1 - KekuSX2

      @base_0.x = base_0.x + KekuSX2_OX - @X/2
      @base_0.y = base_0.y + KekuSX2_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = -1
   }

   Posiziona Keku kk_dx1
   {
      @escluso = 1 - KekuDX1

      @base_0.x = base_0.x + KekuDX1_OX - @X/2
      @base_0.y = base_0.y + KekuDX1_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = 1
   }

   Posiziona Keku kk_dx2
   {
      @escluso = 1 - KekuDX2

      @base_0.x = base_0.x + KekuDX2_OX - @X/2
      @base_0.y = base_0.y + KekuDX2_Y    - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = 1
   }

   Posiziona Keku kk_sxc1
   {
      @escluso = 1 - KekuSXC1

      @base_0.x = base_0.x + KekuSXC1_OX - @X/2
      @base_0.y = base_0.y + KekuSXC1_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = -1
   }

   Posiziona Keku kk_sxc2
   {
      @escluso = 1 - KekuSXC2

      @base_0.x = base_0.x + KekuSXC2_OX - @X/2
      @base_0.y = base_0.y + KekuSXC2_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = -1
   }

   Posiziona Keku kk_dxc1
   {
      @escluso = 1 - KekuDXC1

      @base_0.x = base_0.x + KekuDXC1_OX - @X/2
      @base_0.y = base_0.y + KekuDXC1_Y  - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = 1
   }

   Posiziona Keku kk_dxc2
   {
      @escluso = 1 - KekuDXC2

      @base_0.x = base_0.x + KekuDXC2_OX - @X/2
      @base_0.y = base_0.y + KekuDXC2_Y   - @Y/2
      @base_0.z = base_0.z - @Z +1

      @Verso = 1
   }
#endif
}

Elemento TopVetro_368
{
   Descrizione = "Top Vetro 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   //LZ 30/08/2021: anche su pcf
   //Stendibile   Modulo*368 Ripiano_30MM
   Stendibile  *
   Alias NoCollision;TopVet368;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X      "Lunghezza"  1000
      Xt     "(Lunghezza)"  1000 ShowAlways

      Y      "Altezza"       4 ShowAlways

      Z      "Profondità"  300
      Zt     "(Profondità)"  300 ShowAlways

      Steso_30MM      "" 0 SaveAlways
      StesoPunti_30MM "" 0 SaveAlways

      idx_ref  "" -1

      Sbrd_SX  "Sbordo TOP sx"      0 Utente ( ) SaveAlways
      Sbrd_DX  "Sbordo TOP dx"      0 Utente ( ) SaveAlways
      Sbrd_FR  "Sbordo TOP fronte"  0 Utente ( ) SaveAlways
      Sbrd_RT  "Sbordo TOP retro"   0 Utente ( ) SaveAlways

      idx_grafica    "" -1

      RigeneraScasso "" 0

      //Luca 27/01/2021
      //aumenta in 2 casi:
      // - coperchio contenitore vasistas
      // - coperchio con push
      AumentaLimiteFroPCV   "" 0

      auto "" 0
      M4_A_MURO               "" -1

      M4_DLINK_MODE__         "rimane steso" 0
      //M4_DIALOG               "" 2
      M4_DIALOG               "" 34

      CMP2_AZIONI       "" "M"
      ORD_MISAMETRO     "" "X"

      RADICE            "" ""

      FIN_var           "" "C042"

      FillerM2G         " " "" ShowAlways

      M4_MIS "" "FillerM2G;X;Z;Xt;Y;Zt"

      //Luca 07/04/2021
      XGLASS      "Num. XGLASS" "" Utente ( )
   }

   Assegnazioni
   {
      GOSUB AssComune

      //X_Min = 368
      X_Min = 120
      #ifdef AGE;RIV
      X_Min = 184
      #endif

      X_Max = 3200

      //Z_Min = 126
      Z_Min = 136
      //#ifndef AGE;RIV
      //   //Z_Min = 150
      //   Z_Min = 225
      //#endif
      Z_Max = 583

      Rie_Vtr = 2

      GOSUB NO_AUTO

      if(ACTION()==2 & CMD()==$CMD_INTERATTIVO & $ATTIVA_DLL==1)
      {
         if ( ins2_att==$ins2_posizionato
            | ins2_att==$ins2_agganciato
            | ins2_att==$ins2_accessorio )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"X",STRCAT("( ",STR(X_Min),"-",STR(X_Max)," )"))
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"Z",STRCAT("( ",STR(Z_Min),"-",STR(Z_Max)," )"))
            CHIEDI(idx_att,"X")
            CHIEDI(idx_att,"Z")
         }
      }

      if( StesoPunti_30MM == 1 )
      {
         VAR_SET_MODE(ATTUALE(),"X",$MODE_USER)
         VAR_SET_MENU(ATTUALE(),"X",STRCAT("( ",STR(X_Min),"-",STR(X_Max)," )"))
         VAR_SET_MODE(ATTUALE(),"Z",$MODE_USER)
         VAR_SET_MENU(ATTUALE(),"Z",STRCAT("( ",STR(Z_Min),"-",STR(Z_Max)," )"))
      }

      #ifdef AGE;RIV
      if( ACTION() == 0 ) { HIDE_ON_EDIT(ATTUALE(),"Sbrd_SX;Sbrd_DX;Sbrd_RT;Sbrd_FR",1) }
      #endif

      //nascondo la possibilità di impostare gli sbordi se steso su 30MM
      if( Steso_30MM==1 | StesoPunti_30MM == 1 ) { HIDE_ON_EDIT(ATTUALE(),"Sbrd_SX;Sbrd_DX;Sbrd_RT;Sbrd_FR",1)  }
   }

   PuntiNotevoli
   {
      GOSUB Punti_Top_368

      //Luca 07/04/2021
      STP_XG_PSCR = [X/2 , Y + 10 , Z/2]
      STP_XG_Point = 3

      STP_XG_B0 = pnt_top_b0
      STP_XG_B3 = pnt_top_b3

      STP_XG_ValX = Xt
      STP_XG_ValZ = Zt
      //STP_XG_NOQUOTA = 1
   }

   #include %path_bdm%\TLib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 2 )
      {
         $QueryResult__  = 0
         if( NOME($query_p1) == "Passacavi_368"
           | NOME($query_p1) == "RipetitoreIR_368" ) { $QueryResult__  = 1 }
      }
   }

   Procedura Stendi
   {
      wk_stesi_ok_sx = 0
      wk_stesi_ok_dx = 0

      //valutazione per nome
      wk_nome_stesi_idx_sx = NOME($stesi_idx_sx)
      wk_nome_stesi_idx_dx = NOME($stesi_idx_dx)

      wk_stesi_nomi_test = 4
      wk_stesi_nomi_test_##1 = "Modulo*368"
      wk_stesi_nomi_test_##2 = "Ripiano_30MM"
      wk_stesi_nomi_test_##3 = "Fianco_30MM"
      wk_stesi_nomi_test_##4 = "Colonna_30MM"


      wk_i = 1
      while( wk_i <= wk_stesi_nomi_test )
      {
         if( IS_MATCH( wk_nome_stesi_idx_sx, wk_stesi_nomi_test[wk_i]) == 1 ) { wk_stesi_ok_sx = wk_stesi_ok_sx + 1 }
         if( IS_MATCH( wk_nome_stesi_idx_dx, wk_stesi_nomi_test[wk_i]) == 1 ) { wk_stesi_ok_dx = wk_stesi_ok_dx + 1 }

         wk_i = wk_i + 1
      }

      //valutazione per valore
      if( VAR_VAL( $stesi_idx_sx, "PCF_Elements") == 1 ) { wk_stesi_ok_sx = wk_stesi_ok_sx + 1 }
      if( VAR_VAL( $stesi_idx_dx, "PCF_Elements") == 1 ) { wk_stesi_ok_dx = wk_stesi_ok_dx + 1 }


      if( wk_stesi_ok_sx == 0
        & wk_stesi_ok_dx == 0 ) { EXITSUB() }


      if( ACTION()==$stesi_Action )
      {
         SHOW_POINT($idx_show_point, "punto_*_top_30MM")
         EXIT()
      }

      GOSUB Stendi_Top_368
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 17/02/2021
      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder==0 )
      {
         if( IS_IDX(idx_ref) == 0 )
         {
            BOX_MODE(0)
            NEAR_GLOBALE2("near",idx_cnear_dw,2,"*")
            i = 1
            while ( i <= near )
            {

               if( NOME(near[i]) == "Ripiano_30MM"
                 | IS_MATCH(NOME(near[i]), "Mod*368" )==1 )
               {
                  idx_ref = near[i]
                  i = near
               }
               i = i + 1
            }
         }


         //Luca 17/03/2022 unisco gruppi xglass
         GrXG_IdxRef = -1
         idx_agg = AGGANCIATA(ATTUALE(),"*")
         if( IS_IDX(idx_agg) )
         {
            if( VAR_VAL(idx_agg,"pcfto") == 1  ) { GrXG_IdxRef = idx_agg }
         }
      }

      GOSUB Calcola_SbordiTop_368

      GOSUB CtrlScassi_Top_368

      GOSUB CtrlLimitiPCV_Top_368
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestTop_368

      GOSUB Set_Gest_C008_Top_368

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura Notifica
   {
      GOSUB Notifica_Top_368
   }

   Posiziona BloccoBlend top
   {
      @escluso = 0
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  ) { @escluso = 1 }

      GOSUB posa_blocco
      @base_0.x = base_0.x - Sbrd_SX
      @base_0.z = base_0.z - Sbrd_RT
      @X = Xt
      @Z = Zt

      @BLEND__ = 0.5

      GOSUB rivestimento
      idx_grafica = ATTUALE()
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1

      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  ) { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x - Sbrd_SX
      @base_0.z = base_0.z - Sbrd_RT
      @X = Xt
      @Z = Zt

      @OrieVetro = "TOP"
      @FIN_var = FIN_var

      GOSUB rivestimento
   }

   //Posiziona _cont_per_near_sx sx
   //{
   //   @base_0 = base_0
   //   @base_0.x = base_0.x - 10
   //   @X = X/2 + 10
   //   @Y = Z
   //   @Z = Z
   //}
   //
   //Posiziona _cont_per_near_dx dx
   //{
   //   @base_0   = base_3
   //   @base_0.x = base_3.x - @X + 10
   //   @X = X/2 + 10
   //   @Y = Z
   //   @Z = Z
   //}

   Posiziona _cont_per_near cndw
   {
      @base_0.x = base_0.x + 10
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + 10
      @X = X - 20
      @Y = 20
      @Z = Z - 20

      idx_cnear_dw = ATTUALE()
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 50
      @base_0.x = base_0.x - Sbrd_SX
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z - Sbrd_RT
      @X = Xt
      @Y = 78
      @Z = limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }
   Posiziona PCV_ContCollisioni_368 cs2
   {
      if( AumentaLimiteFroPCV == 1 ) { limite = 87 }
      @base_0.x = base_0.x -  Sbrd_SX
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + Zt - limite - Sbrd_RT
      @X = Xt
      @Y = 78
      @Z = limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }
   Posiziona PCV_ContCollisioni_368 cs3
   {
      limite = 50
      @base_0.x = base_0.x - Sbrd_SX
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + limite - Sbrd_RT
      @X = limite
      @Y = 78
      @Z = Zt - 2*limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }
   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x + Xt - limite - Sbrd_SX
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + limite - Sbrd_RT
      @X = limite
      @Y = 78
      @Z = Zt - 2*limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI

}

Elemento TopWildwood_368
{
   Descrizione = "Top Legno 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Stendibile   Modulo*368
   Alias NoCollision;TopWW368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X      "Lunghezza" 1000
      Xt     "Lunghezza" 1000 ShowAlways

      Y      "Altezza"     18 ShowAlways
      Z      "Profondità" 300
      Zt     "Profondità" 300 ShowAlways

      TipoTop "Tipo top"    0 Menu ( TpTopWW_368 )

      Sbrd_SX  "Sbordo TOP sx"      0 Utente ( ) SaveAlways
      Sbrd_DX  "Sbordo TOP dx"      0 Utente ( ) SaveAlways
      Sbrd_FR  "Sbordo TOP fronte"  0 Utente ( ) SaveAlways
      Sbrd_RT  "Sbordo TOP retro"   0 Utente ( ) SaveAlways

      RigeneraScasso "" 0

      idx_grafica    "" -1

      //Luca 27/01/2021
      //aumenta in 2 casi:
      // - coperchio contenitore vasistas
      // - coperchio con push
      AumentaLimiteFroPCV   "" 0

      auto "" 0
      M4_A_MURO               "" -1

      M4_DLINK_MODE__         "rimane steso" 0
      M4_DIALOG               "" 2

      CMP2_AZIONI       "" "M"
      ORD_MISAMETRO     "" "X"

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

      FillerM2G            " " "" ShowAlways

      M4_MIS "" "FillerM2G;Xt;Y;Zt;TpTopWW_368"
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y = 18
      if( TipoTop == 1 ) { Y = 80 }

      X_Min = 120
      X_Max = 3500

      Z_Min = 225
      #ifndef AGE;RIV
         Z_Min = 150
      #endif
      Z_Max = 1500


      GOSUB NO_AUTO

      if(ACTION()==2 & CMD()==$CMD_INTERATTIVO & $ATTIVA_DLL==1)
      {
         if ( ins2_att==$ins2_posizionato
            | ins2_att==$ins2_agganciato
            | ins2_att==$ins2_accessorio )
         {
            VAR_SET_MODE(ATTUALE(),"X",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"X",STRCAT("( ",STR(X_Min),"-",STR(X_Max)," )"))
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_USER)
            VAR_SET_MENU(ATTUALE(),"Z",STRCAT("( ",STR(Z_Min),"-",STR(Z_Max)," )"))

            CHIEDI(idx_att,"X")
            CHIEDI(idx_att,"Z")
         }
      }

      if( $ATTIVA_DLL==1 ) { HIDE_ON_EDIT2(ATTUALE(),"TipoTop",1) }

      #ifdef AGE;RIV
      if( ACTION() == 0 ) { HIDE_ON_EDIT(ATTUALE(),"Sbrd_SX;Sbrd_DX;Sbrd_RT;Sbrd_FR",1) }
      #endif
   }

   PuntiNotevoli
   {
      GOSUB Punti_Top_368
   }
   #include %path_bdm%\TLib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 2 )
      {
         $QueryResult__  = 0
         if( NOME($query_p1) == "Passacavi_368"
           | NOME($query_p1) == "RipetitoreIR_368" ) { $QueryResult__  = 1 }
      }
   }

   Procedura Stendi
   {
      GOSUB Stendi_Top_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Calcola_SbordiTop_368

      GOSUB CtrlScassi_Top_368

      GOSUB CtrlLimitiPCV_Top_368
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestTop_368

      GOSUB Set_Gest_C008_Top_368

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura Notifica
   {
      GOSUB Notifica_Top_368
   }


   Posiziona Blocco top
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x - Sbrd_SX
      @base_0.z = base_0.z - Sbrd_RT
      @X = Xt
      @Z = Zt

      GOSUB rivestimento
      idx_grafica = ATTUALE()
   }

   //Posiziona _cont_per_near_sx sx
   //{
   //   @base_0 = base_0
   //   @base_0.x = base_0.x - 10
   //   @X = X/2 + 10
   //   @Y = Z
   //   @Z = Z
   //}
   //
   //Posiziona _cont_per_near_dx dx
   //{
   //   @base_0   = base_3
   //   @base_0.x = base_3.x - @X + 10
   //   @X = X/2 + 10
   //   @Y = Z
   //   @Z = Z
   //}

   Posiziona _cont_per_near cndw
   {
      @base_0.x = base_0.x + 10
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + 10
      @X = X - 20
      @Y = 20
      @Z = Z - 20

      idx_cnear_dw = ATTUALE()
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      limite = 50
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z
      @X = X
      @Y = 78
      @Z = limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      if( AumentaLimiteFroPCV == 1 ) { limite = 87 }
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + Z - limite
      @X = X
      @Y = 78
      @Z = limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      limite = 50
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = 78
      @Z = Z - 2*limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x + X - limite
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + limite
      @X = limite
      @Y = 78
      @Z = Z - 2*limite

      //@escluso = 0
      //if( $PCV_ContCollisioni_da_IR == 1 ) { @escluso = 1 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI
}

Elemento FondoVetroCassetti_368
{
   Descrizione    = "Fondo Vetro "
   Code           = ARM20
   Gruppo         = "ARM20"
   Tipo           = Contenitore
   Forma          = ""
   Altimetro      Auto
   Attrezzabile   Cassetto_368 Cassetto_Mat Cestone_Mat

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"    290 ShowAlways
      Y  "Spessore"       4
      Z  "Profondità"   434 ShowAlways

      NrVetri     "" 1
      Vetro1_X    "" 0
      Vetro2_X    "" 0
      Vetro3_X    "" 0
      Vetro1_PosX "" 0
      Vetro2_PosX "" 0
      Vetro3_PosX "" 0

      RADICE    ""  ""

      COD_EREDITA "" "PRE"

      FIN_orie       "" "O"
      FIN_var        "" "C042"

      GEST_CODICE "" ""
      CMP2_AZIONI    "" "AP"

      FillerM2G            " " "" ShowAlways

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

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\TLib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         COMPONENTI2("wk_fnd",$query_p1,"FondoVetroCassetti_368")

         //i = 1
         //while ( i <= wk_fnd  )
         //{
         //   if( VAR_VAL(wk_fnd[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
         //   i = i + 1
         //}
         if( wk_fnd > 0 )  { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add    = 1
      liv2add[1] = 0

      COMPONENTI2("wk_fnd",idx_ref,"FondoVetroCassetti_368")
      //i = 1
      //while ( i <= wk_fnd  )
      //{
      //   if( VAR_VAL(wk_fnd[i],"vano_n") == vano_ref )  { annulla_ins = 1 }
      //   i = i + 1
      //}
      if( wk_fnd > 0 )  { annulla_ins = 1 }

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

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      rie_x = 16.75
      rie_z = 16.75

      base_0.x = $vano_0.x + rie_x
      base_0.y = $vano_0.y + $livello + 50
      base_0.z = $vano_0.z + rie_z

      X = $larghezza - 2 * rie_x
      Z = $profondita - 2 * rie_z

      if( IS_MATCH(NOME(idx_ref), "*_Mat"))
      {
         base_0.y = $vano_0.y + $livello + 51.5
         base_0.z = $vano_0.z - rie_z - Z
      }

      //Luca 07/04/2021 nuova gestione

      NrVetri  = 1
      Vetro1_X    = X
      Vetro1_PosX = 0

      if( NOME(idx_ref) == "Cassetto_368")
      {
         if( @StrDoppia == 1 )     { NrVetri = 2 }
         if( @FLAG_Modulo_AIR == 1
         & @ConDivisorioAIR == 1 ) { NrVetri = 3 }

         if( NrVetri >= 2 )
         {
            Vetro1_X    = @StrDoppia_X1 - 2*rie_x
            Vetro1_PosX = 0
            Vetro2_X    = @StrDoppia_X2 - 2*rie_x
            Vetro2_PosX = @StrDoppia_P2 - @RieX_SX_GiroC
         }
         if( NrVetri == 3 )
         {
            Vetro3_X    = @StrDoppia_X3 - 2*rie_x
            Vetro3_PosX = @StrDoppia_P3 - @RieX_SX_GiroC
         }
      }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = ""
      RADICE      = "FNDVT368"

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //Posiziona Blocco bl
   //{
   //   GOSUB posa_blocco
   //   GOSUB rivestimento
   //   @f_rivestimento = "0.8"
   //}

   Posiziona FondoSingoloVetroCassetti_368 f1
   {
      @base_0.x = base_0.x + Vetro1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = Vetro1_X
      @Z = Z
   }
   Posiziona FondoSingoloVetroCassetti_368 f2
   {
      @escluso = 1
      if( NrVetri > 1 ) { @escluso = 0 }
      @base_0.x = base_0.x + Vetro2_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = Vetro2_X
      @Z = Z
   }
   Posiziona FondoSingoloVetroCassetti_368 f3
   {
      @escluso = 1
      if( NrVetri > 2 ) { @escluso = 0 }
      @base_0.x = base_0.x + Vetro3_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @X = Vetro3_X
      @Z = Z
   }
}

Elemento FondoSingoloVetroCassetti_368
{
   Descrizione    = "Fondo Vetro "
   Code           = ARM20
   Gruppo         = "ARM20"
   Tipo           = Contenitore
   Forma          = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"    290
      Y  "Spessore"       4
      Z  "Profondità"   434

      GEST_CODICE     ""  "F09073"

      COD_EREDITA "" "PRE"

      FIN_orie       "" "O"
      FIN_var        "" "C042"

      FillerM2G            " " "" ShowAlways

      M4_MIS         "" "Filler*;X;Z"

      XGLASS         "Num. XGLASS" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

//Elemento PannelloRetro_MensolaL_368
//{
//   Descrizione = "Pannello Retro Mensola L"
//   Code        = CUB
//   Gruppo      = ""
//   Tipo        = Contenitore
//   Forma       = ""
//   Alias       StpPannelliRetro
//
//   Variabili
//   {
//      //#include %path_bdm%\var_db.inc
//
//      X "" 18
//      Y "" 1
//      Z "" 1
//
//      FIN_var     ""  "C032"
//      FIN_orie    ""  "V"
//
//      HIDE "" 1
//
//      //perRADICE   ""  ""
//      //RADICE      ""  ""
//      //
//      //COD_EREDITA ""  "PRE;POST"
//
//      idx_LED_sopra "" -1 Implicit
//      idx_LED_sotto "" -1 Implicit
//      idx_LavTrasf  "" -1 Implicit
//
//   }
//
//   Assegnazioni
//   {
//      GOSUB AssComune
//      FIN_idx_gest = PADRE(ATTUALE(),1)
//   }
//
//   PuntiNotevoli
//   {
//      GOSUB punti
//   }
//
//   Controlli
//   {
//      GOSUB CtrlComune
//   }
//
//   //Gestionale
//   //{
//   //   GOSUB GestComune
//
//   //   GOSUB GestComune_Post
//   //}
//
//   Posiziona Blocco bl
//   {
//      GOSUB posa_blocco
//      @c_rivestimento = $c_pomice
//      //GOSUB rivestimento
//   }
//}

Elemento Passacavi_368
{
   Descrizione = "Scasso Eldom Top"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Top*368 Cop_368 Fondo_368 Schiena_368 Fianco*_368 DivisiorioVertLegLiv_368 Ripiano_30MM Fianco_30MM BaseTeca_30MM AssiemeScrivaniaMuro_AIR Scrivania*_AIR Top_Vetro_Plenum Coperchio_Plenum PianoTavolo* Mensola_Air MensolaLib_AIR TopVetroScrivania_AIR Mensola_Rivestita Mensola_Dub
   Alias       CamIncidente;OnChangedVar;PCV_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_PosPCV    "Revisione posizione default" 0 SaveAlways

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

      TipoPassacavi    "Tipologia passacavi"  0
      TipoPassacaviStr "Tipologia passacavi"  ""

      ATTREZZATO_SU "" ""

      Spessore_Top  "" 0

      // 0 -- top legno
      // 1 -- top vetro
      TipoTop     ""       0  SaveAlways
      TipoTopStr  "" "LEGNO"  SaveAlways

      Scassa_Chi_Plus_Top "" ""
      Scassa_Chi_Plus_Cop "" ""

      //XZY nel caso di attrezzaggio su elementi orizzontali (top, coperchio)
      //XYZ nel caso di attrezzaggio su elementi verticali   (schiene)
      PCV_Orie      ""    "XZY"

      OffsetX       "Offset X"    150 Utente ( ) SaveAlways
      OffsetY       "Offset Y"    150 Utente ( ) SaveAlways
      OffsetZ       "Offset Z"    150 Utente ( ) SaveAlways

      //le lavorazioni per i passacavi e altri accessori, come il led, devono distare almeno 2cm tra loro.
      //aumento ingrombro in X e Z (per lato)
      AumentoIng_X   "" 10
      AumentoIng_Y   "" 10
      AumentoIng_Z   "" 10

      VAR_Modifica     ">> MODIFICA POSIZIONE"  0 Boolean

      VAR_Orientamento "Orientamento"           0 Utente ( )

      #ifdef TEC;AZI
         VAR_AttivaRot    "Attiva rotazioni"    1 Boolean
      #endif
      #ifndef TEC;AZI
         VAR_AttivaRot    "Attiva rotazioni"    0
      #endif

      VediPassacavi    "Vedi Passacavi"      1

      VediLimiti_PCV   "Vedi Limiti"         0 Implicit

      RigeneraScasso   "Rigenera Scasso"     0 Boolean

      FIN_var  "" ""
      FIN_orie "" "O"

      idx_top "" -1
      idx_cop "" -1
      idx_sch "" -1

      idx_scassa_add "" -1

      idx_coll_PCV "" -1

      idx_sat "" -1

      //stampa mensole bagno
      Stp_Quota_Foro "" 1

      M4_NO_OFFS "" 1

      CMP2_AZIONI "" "A"

      M4_MIS "" "FillerM2G;VAR_Modifica"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB ConfigPassacavi_368

      SetRevisioneElemento(ATTUALE(),"BDM_REV_368_PosPCV","VAR_Revisione_PosPCV")

      HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ;VAR_Orientamento",1)

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_scs_centro  = [X/2,Y,Z/2]
      if( PCV_Orie == "XYZ" ) { pnt_scs_centro = [X/2,Y/2,Z]   }
      if( PCV_Orie == "ZYX" ) { pnt_scs_centro = [X/2,Y/2,Z/2] }

      pnt_scs_centro2 = pnt_scs_centro
      if( TipoPassacaviStr == "D21006-VETRO" )
      {
         if( PCV_Orie == "XZY" ) { pnt_scs_centro2.z = pnt_scs_centro.z + 10 }
      }
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type==8 )
      {
         //SOLO SU TOP VETRO
         if( TipoPassacaviStr == "D21006-VETRO" )
         {
            $QueryResult__ = 0
            //LZ 26/05/2021: gestione passacavi su plenum
            //if( NOME($query_p1) == "TopVetro_368" ) { $QueryResult__ = 1 }
            //if( NOME($query_p1) == "BaseTeca_30MM" )    { $QueryResult__ = 1 }
            if( NOME($query_p1) == "TopVetro_368"
              | NOME($query_p1) == "BaseTeca_30MM"
              | NOME($query_p1) == "Top_Vetro_Plenum"
              //Simone 01/07/2022
              | NOME($query_p1) == "TopVetroScrivania_AIR"
              //Simone 04/07/2022
              | NOME($query_p1) == "Mensola_Rivestita"     ) { $QueryResult__ = 1 }
         }

         //VETRO + COPERCHIO
         if( TipoPassacaviStr == "TER030-QUADRATO"
           | TipoPassacaviStr == "TER031-RETTANGOLARE-PIC"
           | TipoPassacaviStr == "TER032-RETTANGOLARE-GRA" )
         {
            $QueryResult__ = 0
            if( NOME($query_p1) == "TopVetro_368"
              | NOME($query_p1) == "Cop_368"
              | NOME($query_p1) == "Schiena_368"
              | NOME($query_p1) == "Fondo_368"
              //| IS_MATCH(NOME($query_p1),"Fianco*_368")
              | IS_MATCH(NOME($query_p1),"Fianco*3*")
              | NOME($query_p1) == "DivisiorioVertLegLiv_368"
              | NOME($query_p1) == "Ripiano_30MM"
              | NOME($query_p1) == "BaseTeca_30MM"
              //Luca 12/05/2021
              | NOME($query_p1) == "AssiemeScrivaniaMuro_AIR"
              | NOME($query_p1) == "ScrivaniaFS_AIR"
              | NOME($query_p1) == "Scrivania_AIR"
              //Luca 06/09/2021
              | IS_MATCH(NOME($query_p1),"PianoTavolo*")
              //LZ 26/05/2021: gestione passacavi su plenum
              | NOME($query_p1) == "Top_Vetro_Plenum"
              //Luca 09/12/2021
              | NOME($query_p1) == "Mensola_Air"
              //Luca 15/12/2021
              | NOME($query_p1) == "MensolaLib_AIR"
              //Simone 05/07/2022
              | NOME($query_p1) == "Mensola_Dub"
              | NOME($query_p1) == "Mensola_Rivestita"     ) { $QueryResult__ = 1 }
         }

         // SU TOP WW
         if( TipoPassacaviStr == "TER035-QUADRATO"
           | TipoPassacaviStr == "TER036-RETTANGOLARE-PIC"
           | TipoPassacaviStr == "TER037-RETTANGOLARE-GRA" )
         {
            $QueryResult__ = 0
            if( NOME($query_p1) == "TopWildwood_368" ) { $QueryResult__ = 1 }

            //Simone 16/07/21 - Gestisco passacavi ww su Air Desk e Mensola wildwood
            if( IS_MATCH(NOME($query_p1),"*Scrivania*")
              | NOME($query_p1) == "Mensola_Air" )
            {
               if( VAR_VAL_STR($query_p1, "VAR_MaterialeStr") == "WILDWOOD" )  { $QueryResult__ = 1 }
            }

            //Luca 06/09/2021
            if( NOME($query_p1) == "PianoTavolo_Wildwood_AIR" ) { $QueryResult__ = 1 }

            //Luca 15/12/2021
            if( NOME($query_p1) == "MensolaLib_AIR" )
            {
               if( VAR_VAL_STR($query_p1,"VAR_MaterialeStr") == "WILDWOOD"
                 & VAR_VAL($query_p1,"Y") == 80 ) { $QueryResult__ = 1 }
            }
         }

#ifndef TEC
         //LZ 26/05/2021: gestione passacavi su plenum, attualmente speciale
         if( IS_MATCH( NOME($query_p1), "*Plenum*") == 1 ) { $QueryResult__ = 0 }

         //LZ 16/03/2022: gestione passacavi su fianchi e divisori, attualmente speciale
         if( IS_MATCH(NOME($query_p1),"Fianco*3*") == 1
           | NOME($query_p1) == "DivisiorioVertLegLiv_368" ) { $QueryResult__ = 0 }

         if( NOME($query_p1) == "Mensola_Rivestita" )
         {
            if( TipoPassacaviStr != "D21006-VETRO" ) { $QueryResult__ = 0 }
         }

         if( IS_MATCH(NOME($query_p1), "PianoTavolo*")
           & VAR_VAL_STR($query_p1, "ModTavoloStr") != "CORRER" ) { $QueryResult__ = 0 }
#endif

#ifdef AGE;RIV
         //Luca 24/02/2022
         if( UN_PADRE2($query_p1,"Modulo_368") )
         {
            if( VAR_VAL(GetTopLevel($query_p1) , "FLAG_Cassetto" )
              & VAR_VAL(GetTopLevel($query_p1) , "Y" ) <= 184  ) { $QueryResult__ = 0 }
         }
#endif
      }
   }

   Attrezza
   {
      idx_ref = @idx_att

      wk_r = Get_Pcv_AttOrie(idx_ref)
      ATTREZZATO_SU = $Get_Pcv_Att
      PCV_Orie = $Get_Pcv_Orie

      GOSUB ConfigPassacavi_368

         //if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 )
         //{
         //   OffsetX = @X/2
         //   if( PCV_Orie == "ZYX" ) { OffsetX = @Z/2 }
         //
         //   if( VAR_Revisione_PosPCV > 1
         //     & NOME(idx_ref) == "TopVetro_368" ) { OffsetX = @Xt/2 }
         //
         //}
         //
         //if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 )
         //{
         //   OffsetZ = 50 + AumentoIng_Z + Z/2
         //
         //   if( PCV_Orie == "XYZ"
         //     | PCV_Orie == "ZYX" ) { OffsetZ = @Y/2 }
         //
         //}

         //Luca 27/05/2022
         //mi calcolo sempre le posizioni di default

         DEF_OffsetX = @X/2
         if( PCV_Orie == "ZYX" ) { DEF_OffsetX = @Z/2 }

         if( VAR_Revisione_PosPCV > 1
           & NOME(idx_ref) == "TopVetro_368" ) { DEF_OffsetX = @Xt/2 }

         DEF_OffsetZ = 50 + AumentoIng_Z + Z/2

         if( PCV_Orie == "XYZ"
           | PCV_Orie == "ZYX" ) { DEF_OffsetZ = @Y/2 }

      if( ACTION()==2 & $OnLoadOrder == 0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 ) { OffsetX = DEF_OffsetX }
         if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 ) { OffsetZ = DEF_OffsetZ }
      }

      //GOSUB CtrlPassacavi_PosCentroCoperchio_368

      base_0.x = $vano_0.x + OffsetX - X/2
      base_0.y = $vano_0.y + @Y - Y
      base_0.z = $vano_0.z + OffsetZ - Z/2

      if( PCV_Orie == "XZY" )
      {
         ang_y = 0
         if( VAR_Orientamento == 1 )
         {
            ang_y = 90

            base_0.x = $vano_0.x + OffsetX - Z/2
            base_0.z = $vano_0.z + OffsetZ + X/2
         }
         if( VAR_Orientamento == 2 )
         {
            ang_y = 180

            base_0.x = $vano_0.x + OffsetX + X/2
            base_0.z = $vano_0.z + OffsetZ + Z/2
         }

         if( VAR_Orientamento == 3 )
         {
            ang_y = 270

            base_0.x = $vano_0.x + OffsetX + Z/2
            base_0.z = $vano_0.z + OffsetZ - X/2
         }
      }

      if( PCV_Orie == "XYZ"
        | PCV_Orie == "ZYX" )
      {
         DEL_VAR_MODIFICATE( ATTUALE(), "VAR_AttivaRot")
         VAR_AttivaRot = 0
      }

      if( ATTREZZATO_SU == "COPERCHIO"
        | ATTREZZATO_SU == "RIP_30MM" )
      {
         Spessore_Top = 0

         idx_modulo = GetTopLevel(idx_ref)
         if( VAR_EXIST(idx_modulo,"idx_top") )
         {
            SET_#(idx_modulo)
            //if( IS_IDX(@idx_top) ) { idx_top = @idx_top }
            if( IS_IDX(#idx_top) ) { Spessore_Top = VAR_VAL(#idx_top,"Y") }
         }

         base_0.y = base_0.y + Spessore_Top
      }

      if( ATTREZZATO_SU == "SCHIENA" )
      {
         base_0.x = $vano_0.x + OffsetX - X/2

         base_0.y = $vano_0.y + OffsetZ - Z/2
         //LZ 16/07/2021: centro passacavi sulla schiena
         if( VAR_Revisione_PosPCV > 0 ) { base_0.y = $vano_0.y + OffsetZ - Y/2 }

         base_0.z = $vano_0.z + @Z - Z
      }

      if( ATTREZZATO_SU == "FIANCO_SX"
        | ATTREZZATO_SU == "DIVISORIO"
        | ATTREZZATO_SU == "FIA_30MM" )
      {
         base_0.x = $vano_0.x + X
         base_0.y = $vano_0.y + @Y - OffsetZ - Y/2
         base_0.z = $vano_0.z + OffsetX - Z/2
      }

      if( ATTREZZATO_SU == "FIANCO_DX" )
      {
         base_0.x = $vano_0.x + X
         base_0.y = $vano_0.y + @Y - OffsetZ - Y/2
         base_0.z = $vano_0.z + OffsetX - Z/2
      }

      if( ATTREZZATO_SU == "SCRIVANIA"
        | ATTREZZATO_SU == "MENSOLA_AIR" )
      {
         Spessore_Top = 0
         if( VAR_VAL(idx_ref,"ConTopVetro") == 1 ) { Spessore_Top = 4 }

         base_0.y = base_0.y + Spessore_Top
      }

      if( ATTREZZATO_SU == "TAVOLO_AIR" )
      {
         base_0.y = $vano_0.y + @Spe_Piano - Y
      }

      if( ATTREZZATO_SU == "TAVOLO_GEN" )
      {
         base_0.y = $vano_0.y + @Piano_Spe - Y
      }

      //Simone 05/07/2022
      if( ATTREZZATO_SU == "MENSOLA_LIV" )
      {
         if( UN_PADRE("Mensola_Dub") ) { base_0.y = base_0.y - 21 }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlPassacavi_TrovaTopCop_368

      //Luca 04/12/2020
      GOSUB CtrlPassacavi_PosCentroCoperchio_368

      GOSUB CtrlPassacavi_Sposta_368

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

         //lista_idx = STRCAT(STR(ATTUALE()),";",STR(idx_cop))
         lista_idx = STRCAT(STR(idx_top),";",STR(idx_cop), ";",STR(idx_scassa_add))
         AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //GEST_X = DimX
      //GEST_Y = gest_y
      //GEST_Z = DimZ
      GEST_X = gest_x
      GEST_Y = gest_y
      GEST_Z = gest_z

      if( TipoPassacaviStr == "TER031-RETTANGOLARE-PIC" ) { GEST_Z = 50 }

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }

      if( $StartingDel__ != ATTUALE()
        & $StartingDel__ != PADRE(ATTUALE(),1)  ) { EXITSUB() }

      lista_idx = STRCAT(STR(idx_top),";",STR(idx_cop), ";",STR(idx_scassa_add))
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())),"  // cancella Passacavi"))
   }

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

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Passacavi"))

      lista_idx = STRCAT(STR(ATTUALE()),";",STR(idx_cop))
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx, 0 )

      if( ATTREZZATO_SU == "SCHIENA"  )
      {
         $PCV_ContCollisioni_su_SCH = 1
         RIGENERA_IDX(ATTUALE())
      }

      if( ATTREZZATO_SU == "FONDO"  )
      {
         $PCV_ContCollisioni_su_FND = 1
         RIGENERA_IDX(ATTUALE())
      }

      if( IS_MATCH( ATTREZZATO_SU, "FIANCO*") == 1 )
      {
         $PCV_ContCollisioni_su_FIA = 1
         RIGENERA_IDX(ATTUALE())
      }

      if( ATTREZZATO_SU == "DIVISORIO" )
      {
         $PCV_ContCollisioni_su_DIV = 1
         RIGENERA_IDX(ATTUALE())
      }

      //controllo posizione in inserimento
      GOSUB CtrlPassacavi_Posizione_368
      if( OK_POSIZIONE == 0 ) { VAR_Modifica = 1 }
      $PCV_ContCollisioni_su_SCH = 0
      $PCV_ContCollisioni_su_FND = 0
      $PCV_ContCollisioni_su_FIA = 0
      $PCV_ContCollisioni_su_DIV = 0
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Passacavi"))
   }

   Procedura AggiornaSAT_PCV_368
   {
      if( IS_IDX(idx_sat) == 0 )  { EXITSUB() }
      COMANDO("SHOW ABILITA OFF")
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_sat),"  // AggiornaSAT_PCV Passacavi"))
      COMANDO("SHOW ABILITA ON")
      COMANDO("SHOW ALL")
   }

   Procedura PCV_ControllaPosizione_30MM
   {
      Attrezzato_30MM = 0
      // if( ATTREZZATO_SU == "RIP_30MM"
      //   | ATTREZZATO_SU == "TECA_30MM" ) { Attrezzato_30MM = 1 }
      if( IS_MATCH( ATTREZZATO_SU, "*30MM") == 1 ) { Attrezzato_30MM = 1 }

      if( ATTREZZATO_SU == "TOP" )
      {
         if( IS_IDX(idx_cop) )
         {
            if( NOME(idx_cop) == "Ripiano_30MM" )  { Attrezzato_30MM = 1 }
         }
      }

      if( Attrezzato_30MM == 0 )  { EXITSUB() }

      GOSUB CtrlPassacavi_Posizione_368
      if( OK_POSIZIONE == 0 ) { VAR_Modifica = 1 }
      GOSUB CtrlPassacavi_Sposta_368
   }

   Posiziona Blocco Ing
   {
      @escluso = 1 - VAR_VAL(-1,"ATTIVA_LOG_DBG")
      GOSUB posa_blocco

      @Y = Y + 10

      if( PCV_Orie == "XYZ" )
      {
         @Y = Y
         @Z = Z + 10
      }

      if( PCV_Orie == "ZYX" )
      {
         @X = X + 10
         @Y = Y
         if( ATTREZZATO_SU != "FIANCO_DX" )
         {
            @base_0.x = base_0.x - 10
         }
      }

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

   Posiziona PCV_Contenitore pcvcont
   {
      GOSUB posa_blocco

      @ang_x = 0
      @ang_z = 0

      if( PCV_Orie == "XYZ" )
      {
         @base_0.y = base_0.y + Y
         @Y = Z
         @Z = Y
         @ang_x = 90
      }

      if( PCV_Orie == "ZYX" )
      {
         @X = Y
         @Y = X
         @Z = Z

         @ang_z = 90
         if( ATTREZZATO_SU == "FIANCO_DX" )
         {
            @ang_z = -90
            @base_0.y = base_0.y + Y
         }
      }
   }
}

Elemento PCV_Contenitore
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 18
      Y "" 1
      Z "" 1

      ATTREZZATO_SU       "" "" Implicit

      TipoPassacaviStr    "" "" Implicit

      Scassa_Chi_Plus_Top "" "" Implicit
      Scassa_Chi_Plus_Cop "" "" Implicit

      FileSat             "" "" Implicit
      FileSat_ScaT        "" "" Implicit
      FileSat_ScaC        "" "" Implicit

      AumentoIng_X        ""  0  Implicit
      AumentoIng_Z        ""  0  Implicit

      PosaCentro          ""  0 Implicit

      FIN_var             "" "" Implicit
      FIN_orie            "" "" Implicit

      VediPassacavi       ""  0 Implicit

      HIDE                ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - VAR_VAL(-1,"ATTIVA_LOG_DBG")

      GOSUB posa_blocco

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

   //{ PER GESTIONE QUOTA CENTRO
   Posiziona ContenitoreInvisibile q1
   {
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2
      @Y = Y + 5
      @X = X/2
      @Z = Z/2
   }

   Posiziona Blocco q2
   {
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y - 10
      @base_0.z = base_0.z + Z/2
      @Y = 1
      @X = X/2
      @Z = Z/2
      @f_rivestimento = "1"
      @NoPrint_StpTop = 1
   }
   //} PER GESTIONE QUOTA CENTRO

   Posiziona _cont_per_near cnear
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - 109
      @Y = 110
      idx_cnear = ATTUALE()

      VAR_VALUE_SET(PADRE(idx_att,1),"idx_cnear",idx_cnear)
   }

   Posiziona __import__ sat
   {
      @escluso = 1
      if( FileSat != "" & VediPassacavi == 1 )  { @escluso = 0 }

      GOSUB posa_blocco
      @import = FileSat

      if( PosaCentro == 1  )
      {
         @base_0.x = base_0.x + X/2
         @base_0.z = base_0.z + Z/2
      }

      GOSUB rivestimento
      if( FIN_var == "" )
      {
         @c_rivestimento = $c_alluminio
         if( TipoPassacaviStr == "D21005-TONDO-NERO" )   { @c_rivestimento = $c_nero }
      }

      idx_sat = ATTUALE()
      VAR_VALUE_SET(PADRE(idx_att,1),"idx_sat",idx_sat)
   }

   //Scasso su top
   Posiziona Import_Scassa sat_ScT
   {
      @escluso = 1
      if( FileSat_ScaT != "" )  { @escluso = 0 }

      GOSUB posa_blocco
      @import = FileSat_ScaT

      if( PosaCentro == 1  )
      {
         @base_0.x = base_0.x + X/2
         @base_0.z = base_0.z + Z/2
      }

      @Scassa_Chi_Plus = Scassa_Chi_Plus_Top

      //if( ATTREZZATO_SU == "COPERCHIO" & IS_IDX(idx_top) == 0 )
      //{
      //   @Scassa_Chi_Plus = Scassa_Chi_Plus_Cop
      //}

      //@c_rivestimento = $c_rosso
      @SCASSATO_da_idx = PADRE(idx_att,1)
   }

   //Scasso su coperchio
   Posiziona Import_Scassa sat_SCC
   {
      @escluso = 1
      if( FileSat_ScaC != "" )  { @escluso = 0 }

      GOSUB posa_blocco
      @import = FileSat_ScaC

      if( PosaCentro == 1  )
      {
         @base_0.x = base_0.x + X/2
         @base_0.z = base_0.z + Z/2
      }

      @Scassa_Chi_Plus = Scassa_Chi_Plus_Cop
      //if( ATTREZZATO_SU == "COPERCHIO" & IS_IDX(idx_top) == 0 ) { @Scassa_Chi_Plus = "" }

      //@c_rivestimento = $c_verde

      @SCASSATO_da_idx = PADRE(idx_att,1)
   }

   Posiziona PCV_ContCollisioni_368 PCV
   {
      @X = X + 2*AumentoIng_X
      @Y = Y + 100
      @Z = Z + 2*AumentoIng_Z

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

      if( TipoPassacaviStr == "TER050-OVALE" )
      {
         @base_0.x = base_0.x + X/2 - @X/2 - 2.5
         @base_0.z = base_0.z + Z/2 - @Z/2 - 3.5
      }
   }

   //per il controllo collisioni utilizzo questo
   // -0.2 per lato in quanto utilizzo il NEAR_GLOBALE con tolleranza 0.1
   Posiziona _cont_per_near PCV_1
   {
      @X = X + 2*AumentoIng_X - 0.4
      @Y = Y + 110
      @Z = Z + 2*AumentoIng_Z - 0.4

      //Luca 21/01/2021
      if( ATTREZZATO_SU == "SCHIENA"
        | ATTREZZATO_SU == "RIP_30MM"  )
      {
         @X = X - 0.4
         @Z = Z - 0.4
      }

      @X = X - 0.4
      @Z = Z - 0.4

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

      if( TipoPassacaviStr == "TER050-OVALE" )
      {
         @base_0.x = base_0.x + X/2 - @X/2 - 2.5
         @base_0.z = base_0.z + Z/2 - @Z/2 - 3.5
      }

      idx_coll_PCV = ATTUALE()

      VAR_VALUE_SET(PADRE(idx_att,1),"idx_coll_PCV",idx_coll_PCV)

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

   //Luca 07/09/2021 utilizzato per le collisioni speciali
   //e quindi con M4_collision
   Posiziona Blocco_Invisibile sel
   {
      @X = X + 2*AumentoIng_X - 0.4
      @Y = Y + 110
      @Z = Z + 2*AumentoIng_Z - 0.4

      //Luca 21/01/2021
      if( ATTREZZATO_SU == "SCHIENA"
        | ATTREZZATO_SU == "RIP_30MM"  )
      {
         @X = X - 0.4
         @Z = Z - 0.4
      }

      @X = X - 0.4
      @Z = Z - 0.4

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

      if( TipoPassacaviStr == "TER050-OVALE" )
      {
         @base_0.x = base_0.x + X/2 - @X/2 - 2.5
         @base_0.z = base_0.z + Z/2 - @Z/2 - 3.5
      }

      idx_cont_PCV_hide = ATTUALE()

      VAR_VALUE_SET(PADRE(idx_att,1),"idx_cont_PCV_hide",idx_cont_PCV_hide)
   }
}

Elemento ScassoGenerico_368
{
   Descrizione = "Scasso generico 368"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Schiena_368
   Alias       CamIncidente;OnChangedVar

   Variabili
   {
      X "Larghezza"           100
      Y "Altezza"             100
      Z "Profondità"           30

      ATTREZZATO_SU   "" ""

      Scassa_Chi_Plus "" ""

      Raggio         "" 10

      //XZY nel caso di attrezzaggio su elementi orizzontali (top, coperchio)
      //XYZ nel caso di attrezzaggio su elementi verticali   (schiene)
      ScassoGen_Orie      ""    "XYZ"

      OffsetX       "Offset X"    150 Utente ( ) SaveAlways
      OffsetY       "Offset Y"    150 Utente ( ) SaveAlways
      OffsetZ       "Offset Z"    150 Utente ( ) SaveAlways

      //le lavorazioni per i passacavi e altri accessori, come il led, devono distare almeno 2cm tra loro.
      //aumento ingrombro in X e Z (per lato)
      AumentoIng_X   "" 0
      AumentoIng_Y   "" 0
      AumentoIng_Z   "" 0

      VAR_Modifica     ">> MODIFICA POSIZIONE"  0 Boolean

      DimX "Larghezza" 100
      DimY "Altezza"   100

      FormaScasso   "Forma Scasso"  0

      VediLimiti_PCV   "Vedi Limiti"         0 Implicit

      RigeneraScasso   "Rigenera Scasso"     0 Boolean

      idx_da_scassare "" -1
      idx_coll_PCV "" -1

      M4_NO_OFFS "" 1

      VediIngScasso  "" 0

      CMP2_AZIONI "" "A"

      M4_MIS "" "FillerM2G;VAR_Modifica;DimX;DimY;FormaScasso"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
      FLAG_RADICE = $NO_RAD

      HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ",1)


      X = DimX
      Y = DimY

      DescEdit__ = MSG(1026)
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_scs_centro = [X/2,Y/2,Z]
   }

   Attrezza
   {
      idx_ref = @idx_att

      PCV_Orie = "XYZ"
      ATTREZZATO_SU = "SCHIENA"

      if( ACTION()==2 & $OnLoadOrder == 0 )
      {
         DEF_OffsetX = @X/2
         DEF_OffsetZ = @Y/2

         if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 )
         {
            //OffsetX = @X/2
            OffsetX = DEF_OffsetX
         }

         if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 )
         {
            //OffsetZ = 50 + AumentoIng_Z + Z/2
            //
            //if( PCV_Orie == "XYZ"  ) { OffsetZ = @Y/2  }

            //OffsetZ = @Y/2
            OffsetZ = DEF_OffsetZ
         }
      }

      base_0.x = $vano_0.x + OffsetX - X/2
      base_0.y = $vano_0.y + OffsetZ - Y/2
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlScassoGen_TrovaPan_368

      GOSUB CtrlPassacavi_Sposta_368

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

         lista_idx = STR(idx_da_scassare)
         AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )
      }
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }

      if( $StartingDel__ != ATTUALE()
        & $StartingDel__ != PADRE(ATTUALE(),1)  ) { EXITSUB() }

      lista_idx = STR(idx_da_scassare)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())),"  // cancella Passacavi"))
   }

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

      GOSUB CtrlScassoGen_TrovaPan_368

      if( IS_IDX(idx_da_scassare)  )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Passacavi"))
         AggiornaScassi_Passacavi_368( ATTUALE() , STR(idx_da_scassare), 0 )
      }

      //controllo posizione in inserimento
      //GOSUB CtrlPassacavi_Posizione_368
      //if( OK_POSIZIONE == 0 )
      //{
      //   VAR_Modifica = 1
      //   VediIngScasso = 1
      //}

      //Luca 30/03/2022
      //apro sempre la dialog in inserimento, così da intercettare subito posizione non valide
      //non trova collisioni in quanto alcuni elementi risultano escluso con dialog chiusa
      if( ATTREZZATO_SU == "SCHIENA" )
      {
         VAR_Modifica = 1
         VediIngScasso = 1
      }

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

   //{ SCASSO SU SCHIENA
   //blocco per selezione
   Posiziona Blocco_Invisibile sel
   {
      GOSUB posa_blocco
   }

   Posiziona BloccoSmussatoZ_Scassa blo
   {
      @escluso = 1
      if( ScassoGen_Orie=="XYZ" & FormaScasso == 0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Z = Z + 5
      @base_0.z = base_0.z - 2.5
      @R0 = Raggio   @R1 = @R0  @R2 = @R0   @R3 = @R0

      @Scassa_Chi_Plus = Scassa_Chi_Plus

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

   //Luca 30/03/2022 per preview
   Posiziona BloccoSmussatoZ prev
   {
      @escluso = 1
      wk_var_ctrl_dlg = STRCAT("wk_DLG_open_",STR(idx_att))
      if( VAR_VAL(-1,wk_var_ctrl_dlg) == 1
        | VediIngScasso == 1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @c_rivestimento = $c_verde

      @R0 = Raggio
      @R1 = Raggio
      @R2 = Raggio
      @R3 = Raggio
   }

   Posiziona CilindroZ_Scassa cil
   {
      @escluso = 1
      if( ScassoGen_Orie=="XYZ" & FormaScasso == 1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Z = Z + 5
      @base_0.z = base_0.z - 2.5
      @Scassa_Chi_Plus = Scassa_Chi_Plus

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

   Posiziona _cont_per_near PCV_1
   {
      @escluso = 1
      if( ScassoGen_Orie=="XYZ" ) { @escluso = 0 }

      AumentoIng_X = 10
      AumentoIng_Y = 10

      if( FormaScasso == 1 )
      {
         AumentoIng_X = 0
         AumentoIng_Y = 0
      }

      AumentoIng_X = 0
      AumentoIng_Y = 0

      @X = X + 2*AumentoIng_X - 0.4
      @Y = Y + 2*AumentoIng_Y - 0.4
      @Z = Z

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

      if( FormaScasso == 1 )
      {
         @Y = X + 2*AumentoIng_Y - 0.4
         @base_0.y = base_0.y + X/2 - @Y/2
      }
      idx_coll_PCV = ATTUALE()
      idx_cnear = ATTUALE()

     // @f_rivestimento = "0.9"
   }

   Posiziona PCV_ContCollisioni_368 PCV
   {
      AumentoIng_X = 20
      AumentoIng_Y = 20

      @X = X + 2*AumentoIng_X
      @Y = Y + 2*AumentoIng_Y
      @Z = Z

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

      if( FormaScasso == 1 )
      {
         @Y = X + 2*AumentoIng_Y
         @base_0.y = base_0.y + X/2 - @Y/2
      }
   }
   //} SCASSO SU SCHIENA
}

Elemento RipetitoreIR_368
{
   Descrizione = "Scasso Eldom Top"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Modulo_368
   Altimetro    Auto
   Alias       CamIncidente;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      // 0 -- DA INCASSO
      // 1 -- IN APPOGGIO
      TipoIR    "Tipologia Ripetitore IR"  0
      TipoIRStr "Tipologia Ripetitore IR"  ""

      ATTREZZATO_SU "" ""

      // 0 -- top legno
      // 1 -- top vetro
      TipoTop     ""       0
      TipoTopStr  "" "LEGNO"

      Scassa_Chi_Plus_Top "" ""
      Scassa_Chi_Plus_Cop "" ""

      VAR_Posizione    "Posizione Riperitore"   1 Menu ( DXSXPER )

      OffsetX       "Offset X"    150 Utente ( ) SaveAlways
      OffsetZ       "Offset Z"    150 Utente ( ) SaveAlways

      VAR_Modifica     ">> MODIFICA POSIZIONE"  0 Boolean

      VediLimiti_PCV   "Vedi Limiti"         0 Implicit

      RigeneraScasso   "Rigenera Scasso"     0 Boolean

      FIN_var "" ""

      Spessore_Top "" 0

      idx_top "" -1
      idx_cop "" -1

      idx_sat "" -1

      idx_coll_PCV "" -1

      M4_NO_OFFS "" 1

      CMP2_AZIONI "" "A"

      M4_MIS "" "FillerM2G;VAR_Modifica;VAR_Posizione;OffsetX;OffsetZ"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      TipoIRStr = "IR_INCASSO"
      if( TipoIR == 1 ) { TipoIRStr = "IR_APPOGGIO" }

      X = 30
      Y = 12.25
      Z = 30

      FileSat   = "RipIR_Incasso.sat"
      FaiScasso = 1
      if( TipoIRStr == "IR_INCASSO" )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Modifica",SE_NUM(VAR_Posizione==0,0,1))
         HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ",1)
      }

      if( TipoIRStr == "IR_APPOGGIO" )
      {
         X = 40
         Y = 40
         Z = 20
         FaiScasso = 0
         FileSat = "RipIR_Appoggio.sat"

         HIDE_ON_EDIT2(ATTUALE(),"VAR_Modifica",1)
         HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ",SE_NUM(VAR_Posizione==0,0,1))
      }

      if( FileSat != "" ) { FileSat = STRCAT($path_sat,"368\",FileSat) }

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti

      //pnt_scs_centro = [X/2,Y,Z/2]
      pnt_scs_centro = base_0
      pnt_stp_centro = [base_0.x + X/2, alto_0.y, base_0.z + Z/2]
   }

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

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

   Attrezza
   {
      idx_ref = @idx_att

      ATTREZZATO_SU = "TOP"
      if( NOME(idx_ref) == "Modulo_368" )  { ATTREZZATO_SU = "MODULO" }

      wk_OffsetX = OffsetX
      wk_OffsetZ = OffsetZ

      //SX
      if( VAR_Posizione == -1 )
      {
         wk_OffsetX = 83
         wk_OffsetZ = @Z - 80

         if( NOME(idx_ref) == "TopWildwood_368" ) { wk_OffsetZ = @Z - 80 - 22 }
         if( NOME(idx_ref) == "TopVetro_368" )    { wk_OffsetX = 81 }
      }

      //DX
      if( VAR_Posizione == 1 )
      {
         wk_OffsetX = @X - 83
         if( TipoIRStr == "APPOGGIO" )  { wk_OffsetX = wk_OffsetX - X }

         wk_OffsetZ = @Z - 80
         if( NOME(idx_ref) == "TopWildwood_368" ) { wk_OffsetZ = @Z - 80 - 22 }
         if( NOME(idx_ref) == "TopVetro_368" )    { wk_OffsetX = @X - 81 }
      }
      if( VAR_Posizione == 0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 )  { OffsetX = wk_OffsetX }
         if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 )  { OffsetZ = wk_OffsetZ }
         wk_OffsetX = OffsetX
         wk_OffsetZ = OffsetZ
      }

      base_0.x = @base_0.x + wk_OffsetX
      base_0.y = @base_0.y + @Y
      base_0.z = @base_0.z + wk_OffsetZ

      //Luca 17/12/2020
      if( TipoIRStr == "IR_INCASSO" )
      {
         base_0.x = base_0.x - X/2
         base_0.z = base_0.z - Z/2
      }

      if( ATTREZZATO_SU == "MODULO" )
      {
         Spessore_Top = 0

         //if( VAR_EXIST(idx_ref,"idx_top") )
         //{
         //   //if( IS_IDX(@idx_top) ) { idx_top = @idx_top }
         //   if( IS_IDX(@idx_top) ) { Spessore_Top = VAR_VAL(@idx_top,"Y") }
         //}
         if( IS_IDX(idx_top) ) { Spessore_Top = VAR_VAL(idx_top,"Y") }

         base_0.y = @base_0.y + @Yt + Spessore_Top
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlRipetitoreIR_TrovaTopCop_368

      GOSUB CtrlRipetitore_Sposta_368

      if( FaiScasso == 0 ) { EXITSUB() }

      if( ACTION()> 0 & ACTION()!=2 & $OnLoadOrder != 1 )
      {
         //CRS_lista_var = "OffsetX;OffsetZ"
         CRS_lista_var = "VAR_Posizione"
         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

         lista_idx = STRCAT(STR(idx_top),";",STR(idx_cop))
         AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = 0
      GEST_Y = 0
      GEST_Z = 0

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }

      if( $StartingDel__ != ATTUALE()
        & $StartingDel__ != PADRE(ATTUALE(),1)  ) { EXITSUB() }

      if( FaiScasso == 0 ) { EXITSUB() }

      lista_idx = STRCAT(STR(idx_top),";",STR(idx_cop))
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())),"  // cancella Passacavi"))
   }

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

      if( FaiScasso == 0 ) { EXITSUB() }

      GOSUB CtrlRipetitoreIR_TrovaTopCop_368
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Ripetitore_IR"))

      lista_idx = STRCAT(STR(idx_top),";",STR(idx_cop))
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx, 0 )
   }

   Procedura AggiornaSAT_PCV_368
   {
      if( IS_IDX(idx_sat) == 0 )  { EXITSUB() }
      COMANDO("SHOW ABILITA OFF")
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_sat),"  // AggiornaSAT_PCV Passacavi"))
      COMANDO("SHOW ABILITA ON")
      COMANDO("SHOW ALL")
   }

   Posiziona _cont_per_near cnear
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Y - 109
      @Y = 110
      idx_cnear = ATTUALE()
   }

   Posiziona __import__ sat
   {
      @escluso = 1
      if( FileSat != "" )  { @escluso = 0 }
      GOSUB posa_blocco
      @import = FileSat

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_alluminio }

      idx_sat = ATTUALE()
   }

   //Scasso su coperchio
   Posiziona CilindroY_Scassa cil1
   {
      @escluso = 1 - FaiScasso
      diam = 24
      @X = diam
      @Y = 150
      //@base_0.x = base_0.x - @X/2
      @base_0.y = base_0.y + 1 - @Y
      //@base_0.z = base_0.z - @Z/2
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Scassa_Chi_Plus = Scassa_Chi_Plus_Cop
   }

   Posiziona CilindroY_Scassa cil2
   {
      @escluso = 1 - FaiScasso
      diam = 24
      if( TipoTop == 1) { diam = 25 }
      @X = diam
      @Y = 150
      //@base_0.x = base_0.x - @X/2
      @base_0.y = base_0.y + 20 - @Y
      //@base_0.z = base_0.z - @Z/2
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Scassa_Chi_Plus = Scassa_Chi_Plus_Top
   }

   //per il controllo collisioni utilizzo questo
   // -0.2 per lato in quanto utilizzo il NEAR_GLOBALE con tolleranza 0.1
   Posiziona _cont_per_near PCV_1
   {
      @X = 24 - 0.4
      @Y = Y + 110
      @Z = 24 - 0.4

      //@base_0.x = base_0.x - @X/2
      @base_0.y = base_0.y - 100
      //@base_0.z = base_0.z - @Z/2

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

      idx_coll_PCV = ATTUALE()
   }
}

//TER001
Elemento Faretto_368
{
   Descrizione = "Scasso Eldom Top"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Fondo_368 Cop_368 Ripiano_30MM
   Altimetro    Auto
   Alias       CamIncidente;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           85
      Y "Altezza"             13
      Z "Profondità"          85

      VAR_Posizione    "Posizione Faretto"        2 Menu ( PosFar )

      OffsetX          "Offset X"               150 Utente ( ) SaveAlways
      OffsetZ          "Offset Z"               150 Utente ( ) SaveAlways

      VAR_Modifica     ">> MODIFICA POSIZIONE"    0 Boolean
      VediLimiti_PCV   "Vedi Limiti"              0 Implicit
      RigeneraScasso   "Rigenera Scasso"          0

      VediFaretto      "Grafica faretto"          1
      //PER ORA NON ATTIVO LO SCASSO, NON NECESSARIO
      FaiScasso        ""                         0

      M4_NO_OFFS       ""                         1

      ATTREZZATO_SU    ""                         ""

      Scassa_Chi_Plus  ""                         ""

      CMP2_AZIONI      ""                         "A"

      M4_MIS           ""  "FillerM2G;VAR_Modifica;VAR_Posizione;OffsetX;OffsetZ"
      FillerM2G        " " "" ShowAlways

      //per evitare attrezza diretto
      LIVELLI_VISIBILI__   "" 1

      FIN_var      "" ""

      idx_cop      "" -1
      idx_sat      "" -1
      idx_coll_PCV "" -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( UN_PADRE("Ripiano_30MM") ) { VAR_SET_MENU(ATTUALE(),"VAR_Posizione","PosFar2") }

      PosizioneStr = "INTERNO"
      if( VAR_Posizione == 2 ) { PosizioneStr = "ESTERNO" }

      Lato = "SOPRA"
      if( ATTREZZATO_SU == "FONDO"     & PosizioneStr == "ESTERNO" )   { Lato = "SOTTO" }
      if( ATTREZZATO_SU == "COPERCHIO" & PosizioneStr == "INTERNO" )   { Lato = "SOTTO" }
      if( ATTREZZATO_SU == "RIP_30MM"  & PosizioneStr == "INTERNO" )   { Lato = "SOTTO" }

      if( ACTION() == 0 ) { HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ",1) }

      FileSat = STRCAT($path_sat,"368\Faretto.sat")
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_scs_centro = [X/2,Y,Z/2]
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add[1] = 0

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

   Attrezza
   {
      idx_ref = @idx_att

      ATTREZZATO_SU = "FONDO"
      if( NOME(idx_ref) == "Cop_368" )       { ATTREZZATO_SU = "COPERCHIO" }
      if( NOME(idx_ref) == "Ripiano_30MM" )  { ATTREZZATO_SU = "RIP_30MM"  }

      wk_OffsetX = @X/2
      wk_OffsetZ = @Z/2

      if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 1 ) { wk_OffsetX = OffsetX }
      else                                         { OffsetX = wk_OffsetX }
      if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 1 ) { wk_OffsetZ = OffsetZ }
      else                                         { OffsetZ = wk_OffsetZ }

      base_0.x = @base_0.x + wk_OffsetX - X/2
      base_0.z = @base_0.z + wk_OffsetZ - Z/2
      base_0.y = @base_0.y

      base_0.y = @alto_0.y
      if( Lato == "SOTTO" ) { base_0.y = @base_0.y - Y }
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() <= 0 | ACTION() == 2 )
      {
         Scassa_Chi_Plus = ""

         idx_cop = PADRE(ATTUALE(),1)

         COMPONENTI2("wk_bl",idx_cop,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & UN_PADRE2(wk_bl[i],"Faretto_368")==0 ) { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }
            i = i + 1
         }
      }

      GOSUB CtrlFarettoLed_Sposta_368

      if( FaiScasso == 0 ) { EXITSUB() }

      if( ACTION()> 0 & ACTION()!=2 & $OnLoadOrder != 1 )
      {
         CRS_lista_var = "OffsetX;OffsetZ"
         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

         lista_idx = STR(idx_cop)
         AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }

      if( $StartingDel__ != ATTUALE()
        & $StartingDel__ != PADRE(ATTUALE(),1)  ) { EXITSUB() }

      if( FaiScasso == 0 ) { EXITSUB() }

      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE())),"  // cancella Faretti"))
   }

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


      if( FaiScasso == 0 )
      {
         //controllo posizione in inserimento
         GOSUB CtrlPassacavi_Posizione_368
         if( OK_POSIZIONE == 0 )
         {
            VAR_Modifica = 1
            VAR_Modifica_OnInsert = 1
         }
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Faretti"))
         EXITSUB()
      }


      idx_cop = PADRE(ATTUALE(),1)
      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Faretti"))

      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx, 0 )
   }

   Posiziona __import__ sat
   {
      @escluso = 1 - VediFaretto
      GOSUB posa_blocco
      @import = FileSat

      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      @ang_x = 0
      if( Lato == "SOTTO" )  { @ang_x = 180  @base_0.y = base_0.y + Y }

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_alluminio }

      idx_sat = ATTUALE()
   }

   //Scasso su coperchio
   Posiziona CilindroY_Scassa cil1
   //Posiziona CilindroY cil1
   {
      @escluso = 1 - FaiScasso

      diam = 78
      @X = diam
      @Y = 12
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @Y
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( Lato == "SOTTO" )  { @base_0.y = base_0.y + Y  }

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //per il controllo collisioni utilizzo questo
   // -0.2 per lato in quanto utilizzo il NEAR_GLOBALE con tolleranza 0.1
   Posiziona _cont_per_near PCV_1
   //Posiziona PCV_ContCollisioni_368 cs1
   {
      @X = X - 8.4
      @Y = 2*Y
      @Z = X - 8.4

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

      idx_coll_PCV = ATTUALE()
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   {
      @Y = 40
      @X = X + 2*24
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @Y/2
      if( Lato == "SOTTO" )  { @base_0.y = base_0.y  }

      @base_0.z = base_0.z - OffsetZ + Z/2
      @Z = VAR_VAL(PADRE(idx_att,1),"Z")
   }
   //} CONTROLLO COLLISIONI PASSACAVI

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

Elemento Led_368
{
   Descrizione = "Scasso Eldom Top"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Fondo_368 Cop_368 //Modulo_368
   Altimetro    Auto
   Alias       CamIncidente;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           85
      Y "Altezza"             12
      Z "Profondità"          18.1

      ATTREZZATO_SU    "" ""

      Scassa_Chi_Plus  "" ""

      //368 - PUNTO
      VAR_Tipo          "Tipologia Led"          1 Menu ( TipoLed )
      VAR_Posizione     "Posizione Led"          2 Menu ( PosFar ) SaveAlways

      OffsetX           "Offset X"               150 Utente ( ) SaveAlways
      OffsetZ           "Offset Z"               78.5 //Utente ( ) SaveAlways

      VAR_Modifica      ">> MODIFICA POSIZIONE"  0 Boolean
      VediLimiti_PCV    "Vedi Limiti"            0 Implicit

      VediGrafica       "Attiva Grafica"         0

      RigeneraScasso    "Rigenera Scasso"        0
      //Boolean

      FIN_var           "" ""

      idx_cop           "" -1
      idx_sat           "" -1
      idx_coll_PCV      "" -1

      idx_illuminazione "" -1 Implicit

      //PER ORA NON ATTIVO LO SCASSO, NON NECESSARIO
      FaiScasso "" 0

      #ifndef TE
      M4_NO_OFFS "" 1
      #endif

      CMP2_AZIONI "" "A"

      M4_MIS "" "FillerM2G;VAR_Modifica;VAR_Posizione;OffsetX;OffsetZ"

      FillerM2G            " " "" ShowAlways

      //per evitare attrezza diretto
      LIVELLI_VISIBILI__   "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      PosizioneStr = "INTERNO"
      if( VAR_Posizione == 2 ) { PosizioneStr = "ESTERNO" }

      Lato = "SOPRA"

      if( ATTREZZATO_SU == "FONDO" & PosizioneStr == "ESTERNO"  )    { Lato = "SOTTO" }
      if( ATTREZZATO_SU == "COPERCHIO" & PosizioneStr == "INTERNO" ) { Lato = "SOTTO" }

      VediGrafica = 0
      FileSat = STRCAT($path_sat,"368\Led368_",STR(X),".sat")
      if( FILE_EXIST(FileSat) ) { VediGrafica = 1 }

      if( ACTION() == 0 ) { HIDE_ON_EDIT(ATTUALE(),"OffsetX;OffsetZ;VAR_Tipo",1) }
      if( VAR_Tipo == 2 ) { HIDE_ON_EDIT(ATTUALE(),"VAR_Posizione;VAR_Modifica",1) }

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_scs_centro = [X/2,Y,Z/2]
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 1
         //Luca 15/01/2021 nel bloccare l'attrezzaggio del led, terrei già conto degli ingombri laterali, sistemando in automatico anche il caso precedente
         //if( VAR_VAL($query_p1,"X")< X )  { $QueryResult__ = 0 }
         if( VAR_VAL($query_p1,"X") - 2* 32.5 < X )  { $QueryResult__ = 0 }

         if( VAR_Tipo == 2 )
         {
            COMPONENTI2("wk_led", $query_p1, NOME(ATTUALE()))
            if( wk_led > 0
              | NOME(GetTopLevel($query_p1)) != "ModuloPensile_Punto" ) { $QueryResult__ = 0 }
         }
         else
         {
            if( NOME(GetTopLevel($query_p1)) == "ModuloPensile_Punto" ) { $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

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

   Attrezza
   {
      idx_ref = @idx_att
      idx_topl = GetTopLevel(idx_ref)
      vano_n = $vano_n

      ATTREZZATO_SU = "FONDO"
      if( NOME(idx_ref) == "Cop_368" )  { ATTREZZATO_SU = "COPERCHIO" }

      if( IS_VAR_FIXED(ATTUALE(),"VAR_Posizione") == 0 & ACTION() == 2 & $OnLoadOrder==0 )
      {
         if( ATTREZZATO_SU == "FONDO" )
         {
            VAR_Posizione = 2
            if( VAR_VAL(idx_topl,"FLAG_ConModuloSotto") == 1 ) { VAR_Posizione = 1 }
         }

         if( ATTREZZATO_SU == "COPERCHIO" )
         {
            VAR_Posizione = 2
            if( IS_IDX( VAR_VAL(idx_topl,"idx_top")) == 1 )    { VAR_Posizione = 1 }
            if( VAR_VAL(idx_topl,"FLAG_ConModuloSopra")==1 )   { VAR_Posizione = 1 }
         }
      }

      wk_OffsetX = @X/2
      wk_OffsetZ = 78.5

      //Punto
      if( VAR_Tipo == 2 )
      {
         X = 372
         if( @X > 550 ) { X = 500 }

         VAR_Posizione = 2

         wk_OffsetZ = 90
      }

      if( VAR_Posizione == 1 )
      {
         COMPONENTI2("led",idx_ref,"Led_368")
         nrled = 1
         if( led > 1 )
         {
            if( led[2] == ATTUALE() )  { nrled = 2 }
         }

         if( VAR_VAL(idx_topl,"VAR_DivVerticale") )
         {
            wk_OffsetX = VAR_VAL(idx_topl,"PosDivVert_X")/2
            if( nrled == 2 )
            {
               wk_OffsetX = VAR_VAL(idx_topl,"PosDivVert_X") + VAR_VAL(idx_topl,"DivVert_X") + VAR_VAL(idx_topl,"PosDivVert_X")/2
            }
         }
         if( VAR_VAL(idx_topl,"VAR_ConfigVani") > 1 )
         {
            wk_OffsetX = VAR_VAL(idx_topl,"VAR_Vano1_X")/2
            if( nrled == 2 )
            {
               wk_OffsetX = VAR_VAL(idx_topl,"VAR_Vano1_X") + $M368_Spe_DivLeg38 + VAR_VAL(idx_topl,"VAR_Vano2_X")/2
            }
         }
      }

      if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 1 ) { wk_OffsetX = OffsetX }
      else                                         { OffsetX = wk_OffsetX }
      //if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 1 ) { wk_OffsetZ = OffsetZ }
      //else                                         { OffsetZ = wk_OffsetZ }

      base_0.x = @base_0.x + wk_OffsetX - X/2
      base_0.z = @base_0.z + wk_OffsetZ - Z/2

      base_0.y = @alto_0.y - Y + 1.25
      if( Lato == "SOTTO" ) { base_0.y = @base_0.y - 1.25 }
   }

   Controlli
   {
      GOSUB CtrlComune

      if( ACTION() <= 0 | ACTION() == 2 )
      {
         Scassa_Chi_Plus = ""

         idx_cop = PADRE(ATTUALE(),1)

         COMPONENTI2("wk_bl",idx_cop,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & UN_PADRE2(wk_bl[i],"Led_368")==0 ) { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }
            i = i + 1
         }
      }

      GOSUB CtrlFarettoLed_Sposta_368

      if( FaiScasso == 0 ) { EXITSUB() }

      if( ACTION()> 0 & ACTION()!=2 & $OnLoadOrder != 1 )
      {
         CRS_lista_var = "OffsetX;OffsetZ"
         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

         lista_idx = STR(idx_cop)
         AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = VAR_VAL( ATTUALE(), "ORD_Y")
      GEST_Z = VAR_VAL( ATTUALE(), "ORD_Z")

      if( VAR_Tipo == 2
        & IS_IDX(idx_illuminazione))
      {
         GEST_CODICE = ""
         RADICE = "LEDPENS"

         GEST_IDXPADRE = idx_illuminazione
      }

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }

      if( $StartingDel__ != ATTUALE()
        & $StartingDel__ != PADRE(ATTUALE(),1)  ) { EXITSUB() }

      if( FaiScasso == 0
        & VAR_Tipo == 1 ) { EXITSUB() }

      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(ATTUALE()))," // cancella Led_368"))
   }

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

      if( FaiScasso == 0 )
      {
         //controllo posizione in inserimento
         GOSUB CtrlPassacavi_Posizione_368
         if( OK_POSIZIONE == 0 )
         {
            VAR_Modifica = 1
            VAR_Modifica_OnInsert = 1
         }
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Faretti"))

         EXITSUB()
      }

      idx_cop = PADRE(ATTUALE(),1)
      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx , 0 )

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  // PostGestDllValida Faretti"))

      lista_idx = STR(idx_cop)
      AggiornaScassi_Passacavi_368( ATTUALE() , lista_idx, 0 )
   }

   Posiziona __import__ sat
   {
      @escluso = 1 - VediGrafica
      GOSUB posa_blocco
      @import = FileSat

      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      @ang_z = 0
      if( Lato == "SOPRA" )  { @ang_z = 180  @base_0.y = base_0.y + Y }

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_alluminio }

      idx_sat = ATTUALE()

      //per TREND
      @TREND_P0 = base_0
      @TREND_P1 = base_1
      @TREND_P2 = base_2
      @TREND_P3 = base_3

      @TREND_P4 = base_0
      @TREND_P4.y = base_0.y - 10

      if( Lato == "SOPRA")
      {
         @TREND_P0 = alto_0
         @TREND_P1 = alto_1
         @TREND_P2 = alto_2
         @TREND_P3 = alto_3

         @TREND_P4 = alto_0
         @TREND_P4.y = alto_0.y + 10
      }

      @TrLadsMaterial = "GlowTheGeometry"
      @TrLadsLight    = "LG_newledstripe"
   }

   Posiziona Blocco_Luce led
   {
      @escluso = VediGrafica
      GOSUB posa_blocco

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_giallo }

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

   Posiziona Blocco_Scassa bls
   //Posiziona Blocco bl
   {
      @escluso = 1 - FaiScasso
      @X = X - 16
      @Y = 12 - 1.25
      @Z = 14
      @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( Lato == "SOTTO" )  { @base_0.y = base_0.y + 1.25  }

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //per il controllo collisioni utilizzo questo
   // -0.2 per lato in quanto utilizzo il NEAR_GLOBALE con tolleranza 0.1
   Posiziona _cont_per_near PCV_1
   //Posiziona PCV_ContCollisioni_368 cs1
   {
      @X = X - 0.4
      @Y = 2*Y
      @Z = Z - 0.4

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

      idx_coll_PCV = ATTUALE()
   }

   //{ CONTROLLO COLLISIONI PASSACAVI
   Posiziona PCV_ContCollisioni_368 cs1
   //Posiziona Blocco cs1
   {
      @Y = 40
      @X = X + 2*25
      @Z = Z
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - @Y/2
      @base_0.z = base_0.z + Z/2 - @Z/2
      if( Lato == "SOTTO" )  { @base_0.y = base_0.y - 10 }
   }
   //} CONTROLLO COLLISIONI PASSACAVI

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

Elemento PannelloRetro_WallPanel_368
{
   Descrizione = "Pannello Retro WallPanel"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpPannelliRetro;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 18
      Y "" 1
      Z "" 1

      FIN_var         ""  ""

      perRADICE       ""  ""
      RADICE          ""  ""

      COD_EREDITA     ""  "PRE;POST"

      idx_LED_sopra   "" -1 Implicit
      idx_LED_sotto   "" -1 Implicit
      idx_LavTrasf    "" -1 Implicit

      LED_Posizionati "" 0
      LED_Sopra       "" 0 Implicit
      LED_Sotto       "" 0 Implicit
      LED_Sx          "" 0 Implicit
      LED_Dx          "" 0 Implicit

      LED_Watt        "" 0

      //Simone 06/10/21
      panstrut        ""  1
      VAR_Revisione   ""  1 Implicit
      Fin_WP          ""  0 Implicit

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C002"
      FIN_idx_gest = PADRE(ATTUALE(),1)
      if( VAR_VAL(PADRE(ATTUALE(),1),"FLAG_CompostoGEN") == 1 ) { FIN_idx_gest = ATTUALE() }

      //Simone 06/10/21
      panstrut = 1
      if( UN_PADRE("PannelloRetroXLED_368") ) { panstrut = 0 }

      X_Att = 60
      Y_Att = 125
      //Simone 07/04/2022 - Wall Panel in rovere ha le attaccaglie diverse (tipo vecchio)
      if( Fin_WP == 2 )
      {
         X_Att = 140
         Y_Att = 164
         if( Y < 338 ) { Y_Att = 135 }
      }

      X_Att_Inf = 140
      Y_Att_Inf = 194

      //Offset attaccaglie std
      offX = 85
      if( X < 420 & Y < 338 )                               { offX = 45 }
      if( Y < 338 & UN_PADRE("AppendiabitiWallPanel_368") ) { offX = 45 }
      offY = 24

      //Simone 07/04/2022
      if( Fin_WP == 2 )
      {
         offX = 96
         offY = 19
      }

      //Offset attaccaglie agg per WP h>=736
      offaggX = 15
      offaggY = 121.5
      if( Y >= 1442 ) { offaggY = 305.5 }

      //Simone 06/07/2022
      if( UN_PADRE("GlassMirror") ) { HIDE = 3 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      if( FIN_var != "" )  { GOSUB rivestimento }
      else
      {
         DEL_VAR(ATTUALE(), "*rivestimento")
         @c_rivestimento = $c_bianco
      }

      idx_grafica = ATTUALE()
   }

   //Simone 06/07/2022 - Per GlassMirror
   Posiziona Led_PannelloRetro_368 leddw
   {
      @escluso = 1
      if( LED_Sotto == 1
        & LED_Posizionati == 1 ) { @escluso = 0 }

      @X = X

      @base_0 = base_0
      @base_0.y = base_0.y - 1
      @base_0.z = base_0.z + 7.5

      @PosizioneLED = 0
      @TipologiaLED = 3

      LED_Watt = 0
      if( @escluso == 0 ) { LED_Watt = LED_Watt + @LED_Watt }
   }

   Posiziona Led_PannelloRetro_368 ledup
   {
      @escluso = 1
      if( LED_Sopra == 1
        & LED_Posizionati == 1 ) { @escluso = 0 }

      @X = X

      @base_0 = base_0
      @base_0.y = base_0.y + Y - @Y + 1
      @base_0.z = base_0.z + 7.5

      @PosizioneLED = 1
      @TipologiaLED = 3

      if( @escluso == 0 ) { LED_Watt = LED_Watt + @LED_Watt }
   }

   Posiziona Led_PannelloRetro_368 ledsx
   {
      @escluso = 1
      if( LED_Sx == 1
        & LED_Posizionati == 1 ) { @escluso = 0 }

      @X = Y

      @base_0.x = base_0.x - 1
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + 7.5

      @PosizioneLED = 4
      @TipologiaLED = 3

      if( @escluso == 0 ) { LED_Watt = LED_Watt + @LED_Watt }
   }

   Posiziona Led_PannelloRetro_368 leddx
   {
      @escluso = 1
      if( LED_Dx == 1
        & LED_Posizionati == 1 ) { @escluso = 0 }

      @X = Y

      @base_0.x = base_0.x + X - @Y + 1
      @base_0.y = base_0.y + Y
      @base_0.z = base_0.z + 7.5

      @PosizioneLED = 3
      @TipologiaLED = 3

      if( @escluso == 0 ) { LED_Watt = LED_Watt + @LED_Watt }
   }

   //Simone 06/10/21
   Posiziona Blocco att1
   {
      @escluso = 1
      if( panstrut == 1 ) { @escluso = 0 }

      @X = X_Att
      @Y = Y_Att
      @Z = 8

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

      @c_rivestimento = $c_alluminio
   }

   //Luca 07/04/2022
   Posiziona ContCtrlScassi_WallPanel cont
   {
      dist = 80

      @escluso = 1
      if( panstrut == 1 ) { @escluso = 0 }

      @X = X_Att + dist
      @Y = Y_Att + dist
      @Z = 25

      @base_0.x = base_0.x + offX - @X/2
      @base_0.y = base_0.y + Y - offY - @Y + dist/2
      @base_0.z = base_0.z - 0.1
   }

   Posiziona Blocco att2
   {
      @escluso = 1
      if( panstrut == 1 ) { @escluso = 0 }

      @X = X_Att
      @Y = Y_Att
      @Z = 8

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

      @c_rivestimento = $c_alluminio
   }

   Posiziona ContCtrlScassi_WallPanel cont2
   {
      dist = 80

      @escluso = 1
      if( panstrut == 1 ) { @escluso = 0 }

      @X = X_Att + dist
      @Y = Y_Att + dist
      @Z = 25

      @base_0.x = base_0.x + X - offX - @X/2
      @base_0.y = base_0.y + Y - offY - @Y + dist/2
      @base_0.z = base_0.z - 0.1
   }

   Posiziona Blocco att3
   {
      @escluso = 1
      if( panstrut == 1 & X > 1442 )                 { @escluso = 0 }
      if( Fin_WP == 2 & X >= 1442 )                  { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 & X >= 1412 ) { @escluso = 0 }

      @X = X_Att
      @Y = Y_Att
      @Z = 8

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

      @c_rivestimento = $c_alluminio
   }

   //Luca 07/04/2022
   Posiziona ContCtrlScassi_WallPanel cont3
   {
      @escluso = 1
      if( panstrut == 1 & X > 1442 )                 { @escluso = 0 }
      if( Fin_WP == 2 & X >= 1442 )                  { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 & X >= 1412 ) { @escluso = 0 }

      @X = X_Att + dist
      @Y = Y_Att + dist
      @Z = 25

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y - offY - @Y + dist/2
      @base_0.z = base_0.z - 0.1
   }

   Posiziona Blocco att4
   {
      @escluso = 1
      if( panstrut == 1 & VAR_Revisione > 0 & Y >= 706 ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 )                 { @escluso = 0 }

      @X = X_Att_Inf
      @Y = Y_Att_Inf
      @Z = 8

      @base_0.x = base_0.x + offaggX
      @base_0.y = base_0.y + offaggY
      @base_0.z = base_0.z - 0.1

      @c_rivestimento = $c_alluminio
   }

   //Luca 07/04/2022
   Posiziona ContCtrlScassi_WallPanel cont4
   {
      @escluso = 1
      if( panstrut == 1 & VAR_Revisione > 0 & Y >= 706 ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 )                 { @escluso = 0 }

      @X = X_Att_Inf + dist
      @Y = Y_Att_Inf + dist
      @Z = 25

      @base_0.x = base_0.x + offaggX - dist/2
      @base_0.y = base_0.y + offaggY - dist/2
      @base_0.z = base_0.z - 0.1
   }

   Posiziona Blocco att5
   {
      @escluso = 1
      if( panstrut==1 & VAR_Revisione > 0 & Y >= 706 ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 )               { @escluso = 0 }

      @X = X_Att_Inf
      @Y = Y_Att_Inf
      @Z = 8

      @base_0.x = base_0.x + X - offaggX - @X
      @base_0.y = base_0.y + offaggY
      @base_0.z = base_0.z - 0.1

      @c_rivestimento = $c_alluminio
   }

   //Luca 07/04/2022
   Posiziona ContCtrlScassi_WallPanel cont5
   {
      @escluso = 1
      if( panstrut==1 & VAR_Revisione > 0 & Y >= 706 ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 )               { @escluso = 0 }

      @X = X_Att_Inf + dist
      @Y = Y_Att_Inf + dist
      @Z = 25

      @base_0.x = base_0.x + X - offaggX - @X + dist/2
      @base_0.y = base_0.y + offaggY - dist/2
      @base_0.z = base_0.z - 0.1
   }

   Posiziona Blocco att6
   {
      @escluso = 1
      if( panstrut == 1 & VAR_Revisione > 0 & Y >= 706 & X > 1442  ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 & X >= 1412 )                 { @escluso = 0 }

      @X = X_Att_Inf
      @Y = Y_Att_Inf
      @Z = 8

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

      @c_rivestimento = $c_alluminio
   }

   //Luca 07/04/2022
   Posiziona ContCtrlScassi_WallPanel cont6
   {
      @escluso = 1
      if( panstrut == 1 & VAR_Revisione > 0 & Y >= 706 & X > 1442  ) { @escluso = 0 }
      if( UN_PADRE("GlassMirror") == 1 & X >= 1412 )                 { @escluso = 0 }

      @X = 140 + dist
      @Y = 194 + dist
      @Z = 25

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + offaggY - dist/2
      @base_0.z = base_0.z - 0.1
   }
}

Elemento SchienaVetro_368
{
   Descrizione = "Schienale vetro 36e8"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile Modulo_368 ModuloGiorno_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368
      Y       "Altezza"         368
      Z       "Spessore"          4

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      NO_GEST      "" 0

      CMP2_AZIONI      ""      "AS"

      COD_EREDITA "" "PRE;POST"

      FIN_var     "" "C048"

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

      Verso_SchDoppia  "" -1

      XGLASS      "Num. XGLASS" "" Utente ( )

      //FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      idx_pdr = PADRE(ATTUALE(),1)

      AriaLato  = 1
      AriaSotto = 0
      AriaSopra = 30

      if( NOME(PADRE(ATTUALE(),1))=="Modulo_368"
        & VAR_VAL(PADRE(ATTUALE(),1),"X") >= 1472 ) { AriaLato  = 1.25 }

      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 0
         COMPONENTI2("wk_rip",$query_p1,"RipianoAccScrittoio_368")
         if( wk_rip > 0 )
         {
            $QueryResult__ = 1

            COMPONENTI2("wk_sch",$query_p1,"SchienaVetro_368")

            i = 1
            while ( i <= wk_sch )
            {
               if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
               i = i + 1
            }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add[1] = 0
      COMPONENTI2("wk_sch",idx_ref,"SchienaVetro_368")
      i = 1
      while ( i <= wk_sch )
      {
         if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
         i = i + 1
      }

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

   Attrezza
   {
      vano_n = $vano_n
      idx_ref = @idx_att

      base_0.x = $vano_0.x + AriaLato
      base_0.y = $vano_0.y + $M368_Spe_Fnd
      base_0.z = $vano_0.z

      X = $larghezza - 2* AriaLato
      Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop - AriaSopra
      if( VAR_VAL(idx_ref,"FLAG_CopSp38") == 1  )
      {
         Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop38 - AriaSopra
      }

      if( @X >= 1472 )
      {
         posx_div = VAR_VAL(idx_ref,"PosDivVert_X") - $M368_Spe_Fia
         if( NOME(idx_ref)=="ModuloGiorno_368" ) { posx_div = ($larghezza - @DivVert_X)/2 }

         if( VAR_VAL(idx_ref,"VAR_DivVerticale") > 0 )
         {
            //X = ($larghezza - @DivVert_X)/2 - 2* AriaLato
            X = posx_div - 2* AriaLato
         }

         if( Verso_SchDoppia > 0 )
         {
            X = $larghezza - posx_div - @DivVert_X - 2*AriaLato
            base_0.x = $vano_0.x + $larghezza - AriaLato - X
         }
      }

      if( ACTION() == 2 & $OnLoadOrder == 0 & Verso_SchDoppia < 0 )
      {
         if( @X >= 1472 ) { P2A_AttrezzaSecondaSchiena = 1 }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""
         perRADICE = "SCVTACSC"
         FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW
         //Simone 21/02/2022
         if( NOME(idx_pdr)=="SchienaVetro_AIR")
         {
            perRADICE = "SCVTACSCAVS"
            FLAG_RADICE = $FLAG_STANDARD
         }

         RADICE = perRADICE
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura PostAction2
   {
      if( VAR_VAL(ATTUALE(),"P2A_AttrezzaSecondaSchiena") == 1 )
      {
         P2A_AttrezzaSecondaSchiena = 0

         idx_pdr = PADRE(ATTUALE(),1)

         COMANDO(STRCAT("SETTA ",STR(idx_pdr)))
         COMANDO(STRCAT("ELEMENTO_I ",NOME(ATTUALE())))
         COMANDO("STRUTTURA_I")
         COMANDO(STRCAT("VANO ",STR(vano_n)))
         COMANDO(STRCAT("VAR_FIX Verso_SchDoppia=1"))
         COMANDO("VAR_SET NO_AUTO=1")
         //COMANDO("VAR_SET NO_AUTO=1")
         COMANDO("ATTREZZA2 0")
      }
   }

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

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

   //schiena singola
   Posiziona Blocco SSS1
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

//Simone 21/02/2022
Elemento SchienaVetro_AIR
{
   Descrizione = "Schienale vetro AIR"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   Attrezzabile Modulo_368

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       368
      Y       "Altezza"         368
      Z       "Spessore"          4

      FLAG_CompostoGEN  "Modalità composto GENERICO" 1 Boolean

      NO_GEST     "" 0

      CMP2_AZIONI ""      "AS"

      COD_EREDITA "" "PRE;POST"

      FIN_var     "" "C048"

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

      XGLASS      "Num. XGLASS" ""
   }

   Assegnazioni
   {
      GOSUB AssComune
      idx_pdr = PADRE(ATTUALE(),1)

      AriaLato  = 1.25
      AriaSchCX = 1
      AriaSotto = 0
      AriaSopra = 30
      Spe_Div   = VAR_VAL(idx_pdr,"SpeDivisorioAIR")

      larghezza = VAR_VAL(idx_pdr,"X") - $M368_Spe_Fia*2
      X_sch1 = 0
      X_sch2 = 0
      X_sch3 = 0

      posx_div = VAR_VAL(idx_pdr,"PosDivVert_X") - $M368_Spe_Fia
      posx_div_air = VAR_VAL(idx_pdr,"PosDivisorioAIR") - $M368_Spe_Fia - Spe_Div/2

      if( VAR_VAL(idx_pdr,"PosSporgenzaAIR") > 0 )
      {
         X_sch1 = posx_div - 2* AriaLato
         X_sch2 = posx_div_air - X_sch1 - Spe_Div - 2*AriaLato - 2*AriaSchCX
         X_sch3 = larghezza - posx_div_air - Spe_Div - 2*AriaLato
         //arrotondo la misura
         if( VAR_VAL(idx_pdr,"Zt") == 560 )
         {
            X_sch2 = X_sch2 - 0.5
            X_sch3 = X_sch3 + 0.5
         }
      }
      else
      {
         posx_div_air = VAR_VAL(idx_pdr,"X") - VAR_VAL(idx_pdr,"PosDivisorioAIR") - Spe_Div/2 - $M368_Spe_Fia

         X_sch1 = posx_div_air - 2* AriaLato
         X_sch2 = posx_div - X_sch1 - Spe_Div - 2*AriaLato - 2*AriaSchCX
         X_sch3 = larghezza - posx_div - Spe_Div - 2*AriaLato
         //arrotondo la misura
         if( VAR_VAL(idx_pdr,"Zt") == 560 )
         {
            X_sch1 = X_sch1 + 0.5
            X_sch2 = X_sch2 - 0.5
         }
      }

      GOSUB NO_AUTO
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 0
         COMPONENTI2("wk_rip",$query_p1,"RipianoAccScrittoio_368")
         if( wk_rip > 0 & VAR_VAL($query_p1,"FLAG_Modulo_AIR")==1 )
         {
            $QueryResult__ = 1

            COMPONENTI2("wk_sch",$query_p1,"SchienaVetro_AIR")

            i = 1
            while ( i <= wk_sch )
            {
               if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
               i = i + 1
            }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv2add[1] = 0
      COMPONENTI2("wk_sch",idx_ref,"SchienaVetro_AIR")
      i = 1
      while ( i <= wk_sch )
      {
         if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
         i = i + 1
      }

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Attrezza
   {
      vano_n = $vano_n
      idx_ref = @idx_att

      base_0.x = $vano_0.x
      base_0.y = $vano_0.y + $M368_Spe_Fnd
      base_0.z = $vano_0.z

      X = $larghezza - 2*AriaLato
      Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop - AriaSopra
      if( VAR_VAL(idx_ref,"FLAG_CopSp38") == 1  )
      {
         Y = @Y - $M368_Spe_Fnd - $M368_Spe_Cop38 - AriaSopra
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //idx_pdr = PADRE(ATTUALE(),1)

      if( FLAG_CompostoGEN == 1 )
      {
         GEST_CODICE = ""
         perRADICE = "SCVTACSCA"

         RADICE = perRADICE
      }

      GEST_X = X_sch1 + X_sch2 + X_sch3

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   //SX
   Posiziona SchienaVetro_368 sch1
   {
      GOSUB posa_blocco

      @X = X_sch1
      @base_0.x = base_0.x + AriaLato

      GOSUB rivestimento
   }

   //CX
   Posiziona SchienaVetro_368 sch2
   {
      GOSUB posa_blocco

      @X = X_sch2
      @base_0.x = base_0.x + posx_div + Spe_Div + AriaSchCX
      if( VAR_VAL(idx_pdr,"PosSporgenzaAIR") < 0 ) { @base_0.x = base_0.x + posx_div_air + Spe_Div + AriaSchCX }

      GOSUB rivestimento
   }

   //DX
   Posiziona SchienaVetro_368 sch3
   {
      GOSUB posa_blocco

      @X = X_sch3
      @base_0.x = base_0.x + posx_div_air + Spe_Div + AriaLato
      if( VAR_VAL(idx_pdr,"PosSporgenzaAIR") < 0 ) { @base_0.x = base_0.x + posx_div + Spe_Div + AriaLato }

      GOSUB rivestimento
   }
}

Elemento RipianoAccScrittoio_368
{
   Descrizione = "Ripiano Accessorio 368"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro    Auto
   //Luca 19/04/2021 riporto modifiche di LAGO
   //Attrezzabile Modulo_368 ModuloGiorno_368
    Attrezzabile Modulo_368 ModuloGiorno_368 Ripiano_Arm20
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       705
      Y       "Altezza"         110
      Z       "Spessore"        198

      FLAG_CompostoGEN  "Modalità composto GENERICO" 0

      //Luca 19/04/2021 riporto modifiche di LAGO
      //LZ 14/04/2021 - Attrezzabile su ripiano armadio, ma con codice e prezzo differenti
      FLAG_Armadio "Attrezzabile su ripiano armadio" 0

      NO_GEST      "" 0

      CMP2_AZIONI      ""      "AS"

      COD_EREDITA "" "PRE;POST"

      FIN_var     "" "C028"

      M4_MIS "" "Filler*;X*;Y*;Z*;Posizione;OffsetX"

      Posizione "Posizione" -1 Menu ( DXSXPER )
      OffsetX   "Offset"     0 Utente ( )

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      FileSat = STRCAT($path_sat,"368\RipianoAccScrittoio.sat")

      HIDE_ON_EDIT2(ATTUALE(),"OffsetX",SE_NUM(Posizione==0,0,1))

      idx_pdr = PADRE(ATTUALE(),1)

      //Luca 19/04/2021 riporto modifiche di LAGO
      //LZ 14/04/2021 - Gestione su ripiano armadio
      if( FLAG_Armadio == 0
        & VAR_VAL(idx_pdr,"VAR_DivVerticale") > 0 )
      {
         VAR_SET_MENU(ATTUALE(),"Posizione","DXSXPER2")

         // Specificato che per i contenitori di tipologia "Ribalta" L.1472 x P.560,
         // il ripiano accessoriato nel vano a SX del divisorio non è
         // tecnicamente inseribile.. non ci starebbe fisicamente (il divisorio per questa variante è decentrato).
         if( VAR_VAL(idx_pdr,"X") == 1472
           & VAR_VAL(idx_pdr,"Z") == 538
           & NOME(idx_pdr) == "Modulo_368" )
         {
            HIDE_ON_EDIT2(ATTUALE(),"OffsetX",1)
            HIDE_ON_EDIT2(ATTUALE(),"Posizione",1)
            Posizione = 1
         }

         //Luca 19/04/2021 riporto modifiche di LAGO
         VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( 0-",STR(VAR_VAL(idx_pdr,"X")-2*19-X)," )"))
      }

      //Luca 19/04/2021 riporto modifiche di LAGO
      if( FLAG_Armadio == 1 )
      {
         //Default centrale
         Posizione = 0
         OffsetX = (VAR_VAL(PADRE(ATTUALE(),1),"X") - X ) / 2

         VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( 0-",STR(VAR_VAL(idx_pdr,"X")-X)," )"))

#ifdef RIV;AGE
         HIDE_ON_EDIT2(ATTUALE(),"Posizione",1)
         HIDE_ON_EDIT2(ATTUALE(),"OffsetX",1)
#endif
      }

      //Simone 18/02/2022 - Di default evito la collisione con il divisorio AIR
      if( VAR_VAL(idx_pdr,"ConDivisorioAIR") == 1 )
      {
         Posizione = 0
         if( VAR_VAL(idx_pdr,"PosSporgenzaAIR") == 1 )  { Posizione = -1 }
         else                                           { Posizione =  1 }
         HIDE_ON_EDIT2(ATTUALE(),"Posizione",1)
         HIDE_ON_EDIT2(ATTUALE(),"OffsetX",1)
      }

      //VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( 0-",STR(VAR_VAL(idx_pdr,"X")-2*19-X)," )"))
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 8 )
      {
         $QueryResult__ = 1
         COMPONENTI2("wk_sch",$query_p1,"RipianoAccScrittoio_368")

         //LZ 14/04/2021 - Gestione su ripiano armadio
         if( IS_MATCH(NOME($query_p1),"*368*") )
         {
            if( $query_p2 == 1 )  { $QueryResult__ = 0 }

            wk_x_max = VAR_VAL($query_p1,"X") - 2*$M368_Spe_Fia
            wk_x_sch_tot = 0
            i = 1
            while ( i <= wk_sch )
            {
               wk_x_sch_tot = wk_x_sch_tot + VAR_VAL(wk_sch[i],"X")
               i = i + 1
            }

            wk_x_sch_tot = wk_x_sch_tot + X
            if( wk_x_sch_tot > wk_x_max )  { $QueryResult__ = 0 }

            if( VAR_VAL($query_p1,"VAR_ConfigVani" ) > 1 ) { $QueryResult__ = 0 }

            if( VAR_VAL($query_p1,"X" ) < 736 ) { $QueryResult__ = 0 }


            //Luca 12/02/2021
            // ti chiederei un'ulteriore restrizione: i ripiani accessoriati
            // non possono essere inseriti su contenitori di altezza < 368.'
            ////blocco su Y=184
            //if( VAR_VAL($query_p1,"Y" ) < 184 ) { $QueryResult__ = 0 }
            if( VAR_VAL($query_p1,"Y" ) < 368 ) { $QueryResult__ = 0 }

            if( NOME($query_p1) == "Modulo_368" )
            {
               if( VAR_VAL($query_p1,"FLAG_Ribalta") == 0 )  { $QueryResult__ = 0 }
            }

            //Simone 21/02/2022 - Su contenitori AIR solo per X >= 1472
            //su L.920 e L.1104 la vite di fissaggio della schiena air collide ocn quella dell'accessorio
            if( VAR_VAL($query_p1,"FLAG_Modulo_AIR")==1
              & VAR_VAL($query_p1,"X" ) < 1472 )             { $QueryResult__ = 0 }

            if( FLAG_Armadio != 0 ) { $QueryResult__ = 0 }
         }

         //Luca 19/04/2021 riporto modifiche di LAGO
         //LZ 14/04/2021 - Gestione su ripiano armadio
         if( NOME($query_p1)=="Ripiano_Arm20" )
         {
            if( wk_sch > 0 ) { $QueryResult__ = 0 }
            if( FLAG_Armadio != 1 ) { $QueryResult__ = 0 }

            //No in presenza di tubo
            COMPONENTI2("wk_tubo",PADRE($query_p1,1),"Tubo_Arm20")
            i=1
            while( i <= wk_tubo )
            {
               if( VAR_VAL(wk_tubo[i],"idx_rif") == $query_p1 ) { $QueryResult__ = 0 }
               i = i + 1
            }

            if( VAR_VAL($query_p1,"X" ) < X ) { $QueryResult__ = 0 }

            //Limito come da listino
#ifdef RIV;AGE
            if( VAR_VAL($query_p1,"X" ) != 975 ) { $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] = 0
      COMPONENTI2("wk_sch",idx_ref,"RipianoAccScrittoio_368")

      wk_x_max = VAR_VAL(idx_ref,"X") - 2*$M368_Spe_Fia

      wk_x_sch_tot = 0
      i = 1
      while ( i <= wk_sch )
      {
         //if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
         wk_x_sch_tot = wk_x_sch_tot + VAR_VAL(wk_sch[i],"X")
         i = i + 1
      }
      wk_x_sch_tot = wk_x_sch_tot + X
      if( wk_x_sch_tot > wk_x_max )  { annulla_ins = 1 }

      //i = 1
      //while ( i <= wk_sch )
      //{
      //   if( VAR_VAL(wk_sch[i],"vano_n") == $query_p2 )  { $QueryResult__ = 0 }
      //   i = i + 1
      //}

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

   Attrezza
   {
      vano_n = $vano_n
      idx_ref = @idx_att

      wk_offx = 0
      if( Posizione == 1 ) { wk_offx = $larghezza - X }
      if( Posizione == 0 ) { wk_offx = OffsetX }

      if( Posizione == -2 ) { wk_offx = $larghezza/2 - @DivVert_X/2 - X }
      if( Posizione == 2 )  { wk_offx = $larghezza/2 + @DivVert_X/2}

      //LZ 14/04/2021 - Gestione su ripiano armadio
      if( FLAG_Armadio == 0 )
      {
         base_0.x = $vano_0.x + wk_offx
         base_0.y = $vano_0.y + @Y - $M368_Spe_Cop - Y
         base_0.z = $vano_0.z + 7

         if( VAR_VAL(idx_ref,"FLAG_CopSp38") == 1  )
         {
            base_0.y = $vano_0.y + @Y - $M368_Spe_Cop38 - Y
         }

         if( VAR_VAL(idx_ref,"Z") >= 538 )  { base_0.z = $vano_0.z + 7 + 17 }
       }
       else
       {
         base_0 = $vano_0
         base_0.x = $vano_0.x + wk_offx
         base_0.y = $vano_0.y - Y
       }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      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 SSS1
   //{
   //   GOSUB posa_blocco
   //   GOSUB rivestimento
   //}

   Posiziona __import__ sat
   {
      GOSUB posa_blocco
      @import = FileSat
      GOSUB rivestimento
   }

   #ifndef AGE;RIV
   Posiziona G368_ContCollisioni G368CC
   {
      @escluso=FLAG_Armadio
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z - 6
      @X = X
      @Y = 120
      @Z = 80.5
   }
   Posiziona G368_ContCollisioni G368CC2
   {
      @escluso=FLAG_Armadio
      @base_0.x = base_0.x
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z + 74
      @X = X
      @Y = 12
      @Z = 129.5
   }
   #endif
}
// } COMPONENTI 368 Living
//} COMPONENTI

//{ FRONTALI
Elemento Anta_368
{
   Descrizione = "Anta Generica battente o complanare singola/doppia"
   Code        = ANTBAT
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro   Auto
   Vestibile   Modulo*368
   Alias       Frontale

   Variabili
   {
      X                      "Larghezza"             600
      Y                      "Altezza"               600
      Z                      "Spessore"              21

      TipoFrontale           "Tipologia Frontale"    0

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

      AperturaMn             "Apertura Ante"         0    Menu   (   AperAnt_368   )
      Apertura               "Tipologia"             "BA"

      Pos_Fro                "Progressivo anta"      1
      Verso                  "Verso apertura ante"   -1

      SdoppiaAnta            "Anta Doppia"           0    Menu   (   bool          )

      VersoFix               ""                      0

      VAR_DimAntaSX          "Dimensione anta SX"    0    Menu   (   DimAnt_368    )
      VAR_DimAntaDX          "Dimensione anta DX"    0    ShowAlways

      M4_MIS                 ""                      "SdoppiaAnta;AperturaMn;VAR_DimAntaSX;VAR_DimAntaDX"

      CMP2_AZIONI            ""                      "V+"
      c_rivestimento         ""                      [0,0,0]
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Modello
      GOSUB Cucina_Versione

      // Apertura
      while( Var_Anta_Apertura_Dsc != ""
           & IS_VAR_FIXED( idx_att, "AperturaMn") != 1)
      {
         if( Var_Anta_Apertura_Dsc == "RIBALTA")    { AperturaMn = 1 break }
         if( Var_Anta_Apertura_Dsc == "VASISTAS")   { AperturaMn = 2 break }
         if( Var_Anta_Apertura_Dsc == "BASCULANTE") { AperturaMn = 2 break }

         AperturaMn = 0
         break
      }

      Apertura = "BA"
      if( AperturaMn == 1) { Apertura = "RB" }
      if( AperturaMn == 2) { Apertura = "VS" }

      // Sdoppio
      if( Apertura == "RB" | Apertura == "VS")
      {
         if( IS_VAR_FIXED(ATTUALE(),"FAttSdoppia")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"FAttSdoppia") }
         FAttSdoppia = 0
      }

      Z = $M368_Spe_Ant

      GOSUB ConfigAntaInCoppia_Modulo_368

      HIDE = SE_NUM( $ATTIVA_DLL == 0, 0, 3)
      HIDE_ON_EDIT(idx_att,"SdoppiaAnta;AperturaMn",$ATTIVA_DLL)
   }

   PuntiNotevoli
   {
      GOSUB punti
      GOSUB CucP_PuntiNotevoli
   }

   #include %path_bdm%\TLib\Orie.inc

   Procedura OnSetupLivelli
   {
      //GOSUB CucP_OnSetupLivelli
      GOSUB OnSetupLivelli_Fro368
   }

   Vesti
   {
      GOSUB VestiFrontale_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CucP_Controlli
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

   //Procedura cancella
   //{
   //   GOSUB CucP_Cancella
   //}

   Posiziona AntaSingola_368 an0
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Pos          = Pos_Fro
      @Apertura     = Apertura
      @TipoFrontale = TipoFrontale

      //if ( X>=Sdoppia & FAttSdoppia==1 )
      if( SdoppiaAnta == 1  )
      {
         @X = ( X - $M368_Aria_Ant_Ant_X )/2

         @Verso = -1
         @AntaInCoppia  = 1

         //Luca 15/10/2020
         if( VAR_DimAntaSX > 0 ) { @X = VAR_DimAntaSX - 2*$M368_Aria_Ant_X }
      }
      else
      {
         @Verso = Verso
      }

      @M4_NO_OFFS = 1
   }

   Posiziona AntaSingola_368 an1
   {
      @escluso = 1
      if( SdoppiaAnta == 1 )  { @escluso = 0 }

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

      //Luca 15/10/2020
      if( VAR_DimAntaDX > 0 )
      {
         @X = VAR_DimAntaDX - 2*$M368_Aria_Ant_X
         //@base_0.x = base_0.x + X - $M368_Aria_Ant_X - @X
         @base_0.x = base_0.x + X - @X
      }

      //if ( X>Sdoppia & FAttSdoppia==1 )
      //{
      //
      //   @escluso=0
      //}
      //else
      //{
      //   @escluso=1
      //}

      @Y = Y


      @Verso         = 1
      @Pos           = Pos_Fro
      @Apertura      = Apertura
      @TipoFrontale  = TipoFrontale
      @AntaInCoppia  = 1

      @M4_NO_OFFS = 1
   }
}

Elemento AntaSingola_368
{
   Descrizione = "Anta Singola"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Cuc_Altim_Fro Auto
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Paracolpo   "Revisione paracolpo frontali 368 e Air"                0    Implicit

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368           ""                                                      0    Implicit

      X                         "Larghezza"                                             568
      Y                         "Altezza"                                               686
      Yprec                     "Altezza"                                               686
      Z                         "profondita' anta"                                      18

      Var_Anta_Opzione_Dsc      ""                                                      ""   Implicit

      //TipoFrontale "Tipologia Frontale" "A"
      TipoFrontale              "Tipologia Frontale"                                    0

      FroGrafica                "Grafica frontale"                                      ""
      Pos                       ""                                                      1
      PosHFro                   "Altezza posiz. Frontale per posizionamento maniglia"   0

      escludi_man               "esclusione posizionamento maniglia"                    0
      sdoppia_man               "doppia maniglia"                                       0

      modello                   ""                                                      ""
      modello_prec              ""                                                      "NN"

      Posizione                 ""                                                      0
      Verso                     "Verso apertura ante"                                   -1
      Apertura                  "tipo Anta"                                             "BA"
      AntaInCoppia              ""                                                      0
      FLAG_CopSp38              ""                                                      0    Implicit

      //verso fisso anche in caso di anta singola
      VersoFix                  ""                                                      0    Implicit

      //Simone 26/07/2022 - TODO:Per gestione speciali
      Con_Serratura             "Serratura"                                             0    Menu     (   SiNo   )

      perRADICE                 ""                                                      ""
      RADICE                    ""                                                      ""

      COD_EREDITA               ""                                                      "PRE;POST"

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

      XGLASS                    "Num. XGLASS"                                           ""   Utente   (   )

      PP_PushPull               ""                                                      0    Implicit

      PP_PushPull1              ""                                                      0
      PP_PushPull2              ""                                                      0

      PP_Tipologia              ""                                                      0
      PP_Agganciato             ""                                                      ""

      PP_OffsetX1               ""                                                      0
      PP_OffsetX2               ""                                                      0
      PP_OffsetY                ""                                                      0
      PP_OffsetZ                ""                                                      0

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

      //GESTIONE NFC
      VT_NFC                    "NFC"                                                   0
      NFC_FlagAttiva            ""                                                      0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Cucina_Modello
      GOSUB Cucina_Versione

      Z = $M368_Spe_Ant

      //GOSUB Stato_8

      //Luca 15/05/2020
      STP_Bollina = 1

      //VARIABILE PER STAMPA XGLASS
      STP_XG_ValZ = $M368_Spe_VetAnt

      GOSUB TWEB_OrieVena

      //Simone 27/07/2022
      #ifndef TEC
      HIDE_ON_EDIT2(ATTUALE(),"Con_Serratura",1)
      #endif
   }

   PuntiNotevoli
   {
      GOSUB punti
      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z

      pnt_fro_i      = base_1
      pnt_fro_s      = alto_1
      pnt_fro_sx     = base_1
      pnt_fro_dx     = base_2
      pnt_fro_scr    = base_1
      pnt_fro_scr.x  = base_1.x + X/2

      GOSUB CucP_PuntiNotevoli
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

   //Procedura OnSetupLivelli
   //{
   //   GOSUB CucP_OnSetupLivelli
   //}

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune

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

      GOSUB AttrezzaGraficaFrontale
      //GOSUB DecodificaParametriManiglie

      GOSUB GetRegola_Componenti_Elements

      GOSUB Set_Radice_AntaSingola_368

      GOSUB CucP_Controlli

     // Raffaele 20.10.2020
      antaSciolta = 0
      if (IS_MATCH(NOME(PADRE(idx_att, -1)), "Anta*") == 1  &  PADRE(idx_att, 1) == PADRE(idx_att, -1))  { antaSciolta = 1 }

      if ( antaSciolta == 0
         & IS_MATCH(VAR_VAL_STR(idx_att, "MDFSys_Load_ini"), "OnMacro*") != 1
         )
         { MdF_Visualize_sat = "OnInterat" }

      // Per visualizzare solo il cilindro
      if (antaSciolta == 1)  { MCB_Vis_CerBat = 1 }
      GOSUB MdF_sat_CerBat
     // Raffaele 09.02.2021
      GOSUB MdF_sat_PisBrac
     // Raffaele 20.10.2020
      MdF_Load_COMANDO2 = 1
      // 28.05.2019
      MdF_Load_Interat = "CerBat;CerRib"
      GOSUB MdF_ADD_Reg_Interat

      GOSUB PP_PosizionaPushPull_368

      GOSUB NFC_AttivaSuFrontale

      GOSUB G368_AttrezzaContCollisioni
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C007_Anta_368

      //Luca 28/05/2021 passa come figlio del topl level e non del fusto
      if( UN_PADRE("FustoContenitoreAlzata_AIR") )
      {
         GEST_IDXPADRE = GetTopLevel(ATTUALE())
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //pensili
         if( UN_PADRE("ModuloP*368") )
         {
            //LZ 02/08/2021: cucine laccate
            VAR_Melaminico = VAR_VAL( PADRE( ATTUALE(), -1), "VAR_Melaminico")

            GOSUB Set_Gest_C017
            GOSUB Set_Gest_C007_AntaSing
         }

         //LZ 15/12/2021: con la rev1 del tamponamento l'anta è gestita graficamente.
         //               Vengono utilizzate le ante verticali e in Gemo tolte le categorie C007 e C017 se figlie del tamponamento
         //               Annullo eventuali richieste di configurazione iniziali
         if( UN_PADRE("ModuloTampPensile_368") )
         {
            if( ACTION() == 28 )
            {
               GEST_C007 = "SX001"
               GEST_C017 = "AB002"
            }
         }

         //368 living
         if( FLAG_Moduli_368 == 1 )
         {
            GOSUB PCF_Elements_RegoleEredita

            COMPONENTI2("wk_ant",GetTopLevel(ATTUALE()),"AntaSingola_368")
            if( wk_ant <= 1 ) { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C001" ) }

            //LZ 29/10/2021
            //BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C033" )
            if( VAR_VAL(ATTUALE(), "FLAG_Speciale") == 0 ) { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C033" ) }

            BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C017" )

            GOSUB Set_Gest_C007_Anta_368
         }

         //LZ 02/08/2021: cucine laccate
         GOSUB Set_Radice_AntaSingola_368
      }

      if( TABER_REGOLA == "POST" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C007") == 1 )
         {
            if( GEST_C007 == "SX001" ) { Verso = -1 }
            if( GEST_C007 == "DX001" ) { Verso =  1 }
         }

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

         //Luca 30/06/2022
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C017") )
         {
            VAR_SET_MODE(ATTUALE(),"PP_PushPull",$MODE_IMPLICIT)
            if( GEST_C017 != VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C017") )
            {
               PP_PushPull = 0
               if( GEST_C017 == "PU001" )  { PP_PushPull = 1 }
               VAR_SET_MODE(ATTUALE(),"PP_PushPull",$MODE_NONE)
            }
         }
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,2)
      //aperture disponibili
      //azione_verso = Verso
      if( Verso==-1 )   { azione_verso = "SX"   }
      else              { azione_verso = "DX"   }

      AperturaAzione = Apertura

      if( AperturaAzione == "VS")
      {
         if( VAR_VAL_STR( ATTUALE(), "GEST_C007") == "VA003"
           | VAR_VAL_STR( ATTUALE(), "GEST_C007") == "VA005") { AperturaAzione = "VE" }
      }

      //Battente           BA
      if( AperturaAzione=="BA" )     { GOSUB azione_apertura_battente  }
      //"Pacchetto"       "LB" -Libro verticale
      //anta inferiore -> azione_posizione!=1
      if( AperturaAzione=="LB" )     { GOSUB azione_apertura_libro     }

      if( AperturaAzione=="RB" )     { GOSUB azione_apertura_ribalta   }

      if( AperturaAzione=="VS" )     { GOSUB azione_apertura_vasistas  }

      if( AperturaAzione=="VE" )     { GOSUB azione_apertura_verticale }
   }

   Procedura cancella
   {

      if( VAR_EXIST(-1,"StartingDel__")
        & INSERIMENTO2(ATTUALE())==$ins2_componente )
      {
         if( $StartingDel__==ATTUALE() )
         {
            $no_cancel=1

            #ifdef TEC
               //Luca 09/01/2019 per ora cancello il padre
               COMANDO(STRCAT("CANCELLA ",STR(PADRE($StartingDel__,1)), " //cancello anta"))
            #endif

         }
         else                             {  $no_cancel=0   }
      }
      //GOSUB CucP_Cancella
   }

   Posiziona TAG_NFC nfc
   {
      @escluso = SE_NUM( NFC_FlagAttiva == 1, 0, 1 )

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

   Posiziona PushPull_368 PP1
   {
      @escluso = 1 - PP_PushPull1

      @PP_Tipologia  = PP_Tipologia
      @PP_Agganciato = PP_Agganciato

      @base_0.x = base_0.x + PP_OffsetX1
      @base_0.y = base_0.y + PP_OffsetY
      @base_0.z = base_0.z + PP_OffsetZ  - @RieZ
   }

   Posiziona PushPull_368 PP2
   {
      @escluso = 1 - PP_PushPull2

      @PP_Tipologia  = PP_Tipologia
      @PP_Agganciato = PP_Agganciato

      @base_0.x = base_0.x + PP_OffsetX2
      @base_0.y = base_0.y + PP_OffsetY
      @base_0.z = base_0.z + PP_OffsetZ  - @RieZ
   }

   Posiziona ManigliaPAMAR man
   {
      @escluso = 1
      if( FLAG_Moduli_368 == 0
        & VAR_Melaminico == 1
        & VAR_VAL_STR( idx_att, "GEST_C017") == "AB002" ) { @escluso = 0 }

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

   //Simone 27/07/2022 - Serratura
   Posiziona CilindroZ serr
   {
      @escluso = 1 - Con_Serratura

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

      OffX = 40
      OffY = 40
      if( FLAG_CopSp38 == 1 ) { OffY = 60 }

      if( Apertura == "BA" )
      {
         @base_0.x = base_0.x + OffX - @X/2
         @base_0.y = base_0.y + Y - @Y/2 - OffY
         @base_0.z = base_0.z + Z - @Z

         if( Verso == -1 ) { @base_0.x = base_0.x + X - @X/2 - OffX }
      }

      if( Apertura == "VS" )
      {
         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.y = base_0.y + OffY - @Y/2
         @base_0.z = base_0.z + Z - @Z
      }

      if( Apertura == "RB" )
      {
         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.y = base_0.y + Y - @Y/2 - OffY
         @base_0.z = base_0.z + Z - @Z
      }

      @c_rivestimento = $c_rosso
   }
}

Elemento Cassetto_368
{
   Descrizione = "Cassetto"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro      Auto
   Attrezzabile   Modulo_368
   Alias CamIncidente;CamInciso;Frontale

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Girocassetto   "Revisione prof. girocassetti"   1

      X                            "(Larghezza)"                    83

      Y                            "(Altezza)"                      181
      Yt                           "(Altezza)"                      184               Menu ( AltCa368 )

      Z                            "(Profondita)"                   400
      Zt                           "Profondita tot"                 400

      StrDoppia                    ""                               0
      StrDoppia_X1                 ""                               0
      StrDoppia_X2                 ""                               0
      StrDoppia_P2                 ""                               0

      StrDoppia_X3                 ""                               0
      StrDoppia_P3                 ""                               0

      //dimensione e posizione divisorio verticale (calcolati su TL)
      DivVert_X                    ""                               19                Implicit
      PosDivVert_X                 ""                               400               Implicit

      //Tutti i contenitori modello "Cassetto" e "Cestone" hanno sempre i divisori
      //Sp. 38 mm (mai Sp.19 mm).
      VAR_DivVerticale             ""                               0                 Implicit

      FLAG_Modulo_AIR              ""                               0                 Implicit
      PosSporgenzaAIR              ""                               0                 Implicit
      ConDivisorioAIR              ""                               0                 Implicit
      PosDivisorioAIR              ""                               0                 Implicit
      SpeDivisorioAIR              ""                               0                 Implicit

      VAR_Cestone                  ""                               0

      vano_n                       ""                               0

      MZ                           ""                               350
      MY                           ""                               97

      perRADICE                    ""                               ""
      RADICE                       ""                               ""

      COD_EREDITA                  ""                               "PRE"

      FIN_var                      ""                               "C032"
      FIN_orie                     ""                               "O"

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

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

      //GESTIONE NFC
      NFC_FlagAttiva               ""                               0

      //Vedi Ctrl_Gest_Riduzioni
      ORD_RID_CHECK                ""                               7
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Fro = 20

      AriaX_Ant_Fia = 1.5
      AriaY_Ant_Ant = 1.5

      RieX_SX_GiroC = $M368_Spe_Fia - AriaX_Ant_Fia + 5
      RieX_DX_GiroC = RieX_SX_GiroC

      StrDoppia = 0
      if( VAR_DivVerticale == 2
        | VAR_DivVerticale == 3 )
      {
         StrDoppia = 1

         StrDoppia_X1 = PosDivVert_X - RieX_SX_GiroC - AriaX_Ant_Fia - 5

         StrDoppia_X2 = X - RieX_SX_GiroC - RieX_DX_GiroC  - StrDoppia_X1 - 2*5 - DivVert_X
         StrDoppia_P2 = RieX_SX_GiroC + StrDoppia_X1 + 2*5 + DivVert_X
      }

      //Luca 03/02/2022
      //gestione dedicata per cassetto unico con 2 strutture su modulo 2 vani
      if( vano_n == 6 )
      {
         DivVert_X = 38
         x_vano_sx = VAR_VAL(PADRE(ATTUALE(),1),"VAR_Vano1_X") - DivVert_X/2

         StrDoppia = 1

         StrDoppia_X1 = x_vano_sx - RieX_SX_GiroC - AriaX_Ant_Fia - 5

         StrDoppia_X2 = X - RieX_SX_GiroC - RieX_DX_GiroC  - StrDoppia_X1 - 2*5 - DivVert_X
         StrDoppia_P2 = RieX_SX_GiroC + StrDoppia_X1 + 2*5 + DivVert_X
      }

      if( FLAG_Modulo_AIR == 1 & ConDivisorioAIR == 1 )
      {
         if( PosSporgenzaAIR > 0 )
         {
            StrDoppia_X1 = 688
            StrDoppia_X2 = 466
            StrDoppia_X3 = 174

            StrDoppia_P2 = 758.5
            StrDoppia_P3 = 1272.5

            if( X > 1800 )
            {
               StrDoppia_X3 = 542
               StrDoppia_P3 = 1272.5
            }
         }

         if( PosSporgenzaAIR <= 0 )
         {
            StrDoppia_X1 = 174
            StrDoppia_X2 = 466
            StrDoppia_X3 = 688

            StrDoppia_P2 = 244.5
            StrDoppia_P3 = 758.5

            if( X > 1800 )
            {
               StrDoppia_P2 =  612.5
               StrDoppia_P3 = 1126.5

               StrDoppia_X1 = 542
            }
         }
      }

      VAR_Cestone = 0
      if( Yt >= 276 )  { VAR_Cestone = 1 }

      //Luca 22/03/2021
      if( UN_PADRE("FustoContenitoreAlzata_AIR") )
      {
         MY = 100
         MZ = 304
      }

      //Simone 22/06/2022
      GOSUB HideFigliInseriti2
   }

   PuntiNotevoli
   {
      Y = Yt - 2*AriaY_Ant_Ant
      Z = Spe_Fro
      Zt = Z + MZ

      GOSUB punti_Zt

      //per attrezzaggio fondi interni cassetto
      vano_0_0 = [RieX_SX_GiroC,0,0]
      vano_l_0 = X - RieX_SX_GiroC - RieX_DX_GiroC
      vano_p_0 = MZ

      vano_0_1 = base_0
      vano_l_1 = X
      vano_p_1 = MZ
      vano_hide_1 = 1

      vano_0_2 = base_0
      vano_l_2 = X
      vano_p_2 = MZ
      vano_hide_2 = 1

      if( StrDoppia == 1 )
      {
         vano_0_1.x = StrDoppia_P2

         vano_l_0 = StrDoppia_X1
         vano_l_1 = StrDoppia_X2

         vano_hide_1 = 0
      }

      if( FLAG_Modulo_AIR == 1 & ConDivisorioAIR == 1 )
      {
         vano_0_2.x  = StrDoppia_P3
         vano_l_2    = StrDoppia_X3
         vano_hide_2 = 0
      }

      //Luca 07/04/2021 cambio gestione
      vano_hide_1 = 1
      vano_hide_2 = 1

      vano_0_0 = [RieX_SX_GiroC,0,0]
      vano_l_0 = X - RieX_SX_GiroC - RieX_DX_GiroC
      vano_p_0 = MZ
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")
      liv2add = 1
      liv2addscr = 1

      liv2add[1]    = 0
      liv2addscr[1] = 0

      COMPONENTI2("wk_cas",idx_ref,"Cassetto_368")
      SET_#(idx_ref)
      wk_b0 = #base_0.y

      alt_cas_prec = -1

      i = 1
      while ( i<=wk_cas )
      {
         if( VAR_VAL(wk_cas[i],"vano_n") == vano_ref
            //Luca 03/02/2022 vano 6 prende tutte le altezze
           | vano_ref == 6 )
         {
            SET_#(wk_cas[i])
            alt_cas = #alto_0.y - wk_b0 + AriaY_Ant_Ant - VAR_VAL(idx_ref,"ConPiedini")*$M368_Alt_Pie
            if( alt_cas!=alt_cas_prec )
            {
               ne = liv2add + 1
               liv2add = ne
               liv2addscr = liv2add
               liv2add[ne]    =  alt_cas
               liv2addscr[ne] = alt_cas

               alt_cas_prec = alt_cas
            }
         }

         i = i + 1
      }

      GOSUB livelli_add2
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      wk_z_ref = VAR_VAL( idx_ref, "Z_Attrezza")
      if( wk_z_ref <= 0) { wk_z_ref = @Z }

      VAR_Revisione_Girocassetto = 1
      if( wk_z_ref > 500 ) { VAR_Revisione_Girocassetto = 0 }

      // 1 - Dimensioni:
      // 1.1 - Cassetto:
      X = $larghezza + 2*$M368_Spe_Fia - 2*AriaX_Ant_Fia

      // 1.2 - Struttura interna:
      // 1.2.1 - Altezza:
      MY = 180
      if( Y < 200)
      {
         MY = 118

         //Coperchio da 38 necessita di ulteriore riduzione
         if( @FLAG_CopSp38 == 1)
         {
            wk_VAR_DivOriz = VAR_VAL(idx_ref,"VAR_DivOriz")

            if( wk_VAR_DivOriz == 0)                  { MY = 97 }
            if( wk_VAR_DivOriz == 1 & wk_z_ref > 480) { MY = 97 }
         }
      }

      if( Y < 181)
      {
         MY = 72
      }

      // 1.2.2 - Profondità:
      MZ = 350
      if( wk_z_ref > 480 ) { MZ = 450 }
      if( wk_z_ref > 500 ) { MZ = 500 }

      if( VAR_Revisione_Girocassetto > 0 ) { MZ = MZ - 10 }

      // 2 - Posizionamento:
      base_0.x = $vano_0.x - $M368_Spe_Fia + AriaX_Ant_Fia
      base_0.y = $vano_0.y + $livello + AriaY_Ant_Ant
      base_0.z = $vano_0.z + $profondita - MZ
      if( VAR_VAL( idx_ref, "PP_PushPull") == 1 )
      {
         base_0.z = $vano_0.z + $profondita - MZ + $M368_Aria_Ant_Z_PP
      }

      // 3 - Chiedo altezza in costruzione composti
      if( ACTION() == 2
        & $ATTIVA_DLL == 0
        & IS_VAR_FIXED( ATTUALE(),"Yt") == 0) { CHIEDI( ATTUALE(), "Yt") }
   }

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

         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C001" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C017" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C033" )
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Z = Zt
      if( VAR_Revisione_Girocassetto > 0 ) { GEST_Z = Zt + 10 }

      perRADICE = "CA36"
      if( VAR_Cestone == 1 ) { perRADICE = "CE36" }

      //LZ 05/05/2021: differenzio radice se moduli air
      if( FLAG_Modulo_AIR == 1 )
      {
         perRADICE = "AIRCA"
         if( VAR_Cestone == 1 ) { perRADICE = "AIRCE" }
      }

      RADICE = perRADICE

      //Luca 22/03/2021
      if( UN_PADRE("FustoContenitoreAlzata_AIR") )
      {
         RADICE = ""
         GEST_CODICE  = "AIR742"

         //Luca 28/05/2021 passa come figlio del topl level e non del fusto
         GEST_IDXPADRE = GetTopLevel(ATTUALE())
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura azione
   {
      azione_val_max = 3*(Zt - Spe_Fro)/4
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona FrontaleCassetto_368 fro
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z + Zt - Z
   }

   Posiziona StrInternaCassetto_368 str
   {
      @X = X - RieX_SX_GiroC - RieX_DX_GiroC
      @Y = MY
      @Z = MZ

      if( StrDoppia == 1 )  { @X = StrDoppia_X1 }

      @base_0.x = base_0.x + RieX_SX_GiroC
      @base_0.y = base_0.y + 37 - 1.5
      @base_0.z = base_0.z
   }

   Posiziona StrInternaCassetto_368 str2
   {
      @escluso = 1 - StrDoppia
      @X = StrDoppia_X2
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + StrDoppia_P2
      @base_0.y = base_0.y + 37 - 1.5
      @base_0.z = base_0.z
   }

   Posiziona StrInternaCassetto_368 str3
   {
      @escluso = 1
      if( StrDoppia==1 & ConDivisorioAIR==1 ) { @escluso = 0 }
      @X = StrDoppia_X3
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + StrDoppia_P3
      @base_0.y = base_0.y + 37 - 1.5
      @base_0.z = base_0.z
   }
}

Elemento FrontaleCassetto_368
{
   Descrizione = "Struttura interna Cassetto/Cestello"
   Code        = ARM20
   Gruppo      = "ARM20"
   Tipo        = Contenitore
   Forma       = ""
      Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //identifico elementi 368 living (NO PENSILI cucina)
      FLAG_Moduli_368  "" 0 Implicit

      X  "(Larghezza)"   600
      Y  "(Altezza)"     100
      Z  "(Profondità)"  490

      TipoFrontale "" 0
      Verso        "" 0


      FroGrafica     "Grafica friontale" ""

      RADICE    ""  "FR36"

      COD_EREDITA "" "PRE"

      XGLASS      "Num. XGLASS" "" Utente ( )

      M4_NO_OFFS "" 1

      //GESTIONE NFC
      VT_NFC         "NFC"  0
      NFC_FlagAttiva  ""    0
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z = $M368_Spe_Ant

      //Luca 15/05/2020
      STP_Bollina = 1

      GOSUB TWEB_OrieVena
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0       = base_0
      vano_l_0       = X
      vano_p_0       = Z
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB AttrezzaGraficaFrontale

      //Luca 22/03/2021
      if( UN_PADRE("FustoContenitoreAlzata_AIR") )
      {
         RADICE      = ""
         GEST_CODICE = "F52001"
      }

      GOSUB NFC_AttivaSuFrontale
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C001" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C017" )
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C033" )
      }
   }

   Posiziona TAG_NFC nfc
   {
      @escluso = SE_NUM( NFC_FlagAttiva == 1, 0, 1 )

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

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   //Posiziona Blocco fr
   //{
   //   GOSUB posa_blocco
   //   GOSUB rivestimento
   //}
}

Elemento StrInternaCassetto_368
{
   Descrizione = "Struttura interna cassetto/cestone"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Girocassetto   "Revisione prof. girocassetti"   1         Implicit

      X                            "Larghezza"                      600
      Y                            "Altezza"                        100
      Z                            "Profondita'"                    490

      DYFronte                     "Altezza fronte"                 0
      DYSchiena                    "Altezza schienale"              0
      SpSponda                     "Spessore sponde"                16
      DYSponda                     "Altezza sponde"                 0

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

      FIN_var                      ""                               "C034"

      M4_NO_OFFS                   ""                               1

      NO_GEST                      ""                               0
      ORD_RID_CHECK                ""                               7
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso

      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_VAR_FIXED(ATTUALE(),"RADICE") == 1
        | IS_VAR_FIXED(ATTUALE(),"GEST_CODICE") == 1 ) { EXITSUB() }

      //Luca 14/04/2022
      if( NO_GEST==1 )
      {
         GEST_CODICE = ""
         RADICE = ""
         FLAG_RADICE = $NO_RAD

         GOSUB GestComune_Post
         EXITSUB()
      }

      perRADICE = "GIR36"
      if( VAR_Revisione_Girocassetto > 0 )
      {
         perRADICE = "GIR36R"
         flag_CAMBIA_VAR = 1
      }

      //Luca 22/03/2021
      if( UN_PADRE("FustoContenitoreAlzata_AIR"))
      {
         perRADICE = ""
         perCODICE = "B05301"
      }

      GEST_CODICE = perCODICE
      RADICE = perRADICE

      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
}
//} FRONTALI

//{ GRAFICA
Elemento _grafica_pannello_368
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      //FIASX
      //FIADX
      //FND
      //COP
      TipoPan "" "FIASX"

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

   PuntiNotevoli
   {
      idx_att = ATTUALE()

      riex = $M368_Rie_Pan
      riey = $M368_Rie_Pan

      if( UN_PADRE("PortaTV_368") )
      {
         riex = 5
         riey = 5
      }

      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]

      //rientro per profilo
      riep = 0.88

      if( TipoPan=="FIASX" )
      {
         Spe = X
         base_0 = [ 0    , 0               , 0 ]
         base_1 = [ riex - riep , 0               , 0 ]
         base_2 = [ Spe  ,  Spe-riey + riep       , 0 ]
         base_3 = [ Spe  ,  Y - Spe + riey - riep , 0 ]
         base_4 = [ riex - riep ,  Y              , 0 ]
         base_5 = [ 0    ,  Y              , 0 ]

         if( UN_PADRE("ModuloPensileCappa_368") )
         {
            if( VAR_VAL(PADRE(idx_att,2),"TipoPenCappa") != 1 )
            {
               base_1 = [ riex  , 0               , 0 ]
               base_2 = [ Spe  ,  Spe-riey   , 0 ]
            }
         }
      }

      if( TipoPan=="FIADX" )
      {
         Spe = X

         base_0 = [ 0          , Spe-riey+riep  , 0 ]
         base_1 = [ Spe-riex + riep   , 0          , 0 ]
         base_2 = [ Spe        , 0            , 0 ]
         base_3 = [ Spe        , Y              , 0 ]
         base_4 = [ Spe - riex + riep, Y              , 0 ]
         base_5 = [ 0          , Y - Spe + riey - riep, 0 ]

         if( UN_PADRE("ModuloPensileCappa_368") )
         {
            if( VAR_VAL(PADRE(idx_att,2),"TipoPenCappa") != 1 )
            {
               base_0 = [ 0          , Spe-riey       , 0 ]
               base_1 = [ Spe-riex   , 0              , 0 ]
            }
         }
      }

      if( TipoPan=="FIASX_PS" )
      {
         Spe = X
         base_0 = [ 0    , 0               , 0 ]
         base_1 = [ Spe  , 0               , 0 ]
         base_2 = [ Spe  ,  Y - Spe + riey -riep , 0 ]
         base_3 = [ riex - riep,  Y              , 0 ]
         base_4 = [ 0    ,  Y              , 0 ]
      }
      if( TipoPan=="FIADX_PS" )
      {
         Spe = X

         base_0 = [ 0          , 0              , 0 ]
         base_1 = [ Spe        , 0              , 0 ]
         base_2 = [ Spe        , Y              , 0 ]
         base_3 = [ Spe - riex + riep , Y              , 0 ]
         base_4 = [ 0          , Y - Spe + riey - riep , 0 ]
      }

      if( TipoPan=="FON" )
      {
         Spe = Y

         base_0 = [ 0              , 0       , 0 ]
         base_1 = [ X              , 0       , 0 ]
         base_2 = [ X              , riey - riep  , 0 ]
         base_3 = [ X - Spe + riex - riep , Y       , 0 ]
         base_4 = [ Spe - riex  + riep  , Y       , 0 ]
         base_5 = [ 0              , riey - riep    , 0 ]
      }

      if( TipoPan=="COP" )
      {
         Spe = Y

         base_0 = [ Spe - riex + riep    , 0        , 0 ]
         base_1 = [ X - Spe + riex - riep , 0        , 0 ]
         base_2 = [ X              , Y-riey + riep   , 0 ]
         base_3 = [ X              , Y        , 0 ]
         base_4 = [ 0              , Y        , 0 ]
         base_5 = [ 0              , Y - riey + riep , 0 ]

         if( Y == 38 )
         {
            Spe = Spe / 2
            base_0 = [ Spe - riex     , 0         , 0 ]
            base_1 = [ X - Spe + riex , 0         , 0 ]
            base_2 = [ X - Spe + riex , Spe + riep , 0 ]
            base_3 = [ X              , Y-riey + riep  , 0 ]
            base_4 = [ X              , Y        , 0 ]
            base_5 = [ 0              , Y        , 0 ]
            base_6 = [ 0              , Y - riey + riep, 0 ]
            base_7 = [ Spe - riex     , Spe + riep     , 0 ]
         }
      }

      alto_0 = base_0
      alto_0.z = Z

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

Elemento _grafica_rivestPS_368
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

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

      Pos "" "SX"

      FLAG_Fianco45  "" 1 Implicit

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

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base_*")

      base_0 = [0,0,0]
      base_1 = [0.5,0,0]
      base_2 = [X,Y,0]
      base_3 = [X-0.5,Y,0]

      if( Pos=="DX" )
      {
         base_0 = [ X-0.5   , 0 , 0 ]
         base_1 = [ X       , 0 , 0 ]
         base_2 = [ 0.5     , Y , 0 ]
         base_3 = [ 0       , Y , 0 ]
      }

      alto_0 = base_0
      alto_0.z = Z

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

Elemento _grafica_cartercappa_368
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

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

   PuntiNotevoli
   {
      //spessore lamiera (sarebbe 0.8)
      spe = 2
      rie = 10

      base_0  = [0,0,0]
      base_1  = [0,0,Z]
      base_2  = [X,0,Z]
      base_3  = [X,0,0]

      base_4  = [X-rie,0,0]
      base_5  = [X-rie,0,rie]
      base_6  = [X-rie+spe,0,rie]
      base_7  = [X-rie+spe,0,spe]

      base_8  = [X-spe,0,spe]
      base_9  = [X-spe,0,Z-spe]

      base_10 = [spe,0,Z-spe]
      base_11 = [spe,0,spe]
      base_12 = [rie-spe,0,spe]
      base_13 = [rie-spe,0,rie]
      base_14 = [rie,0,rie]
      base_15 = [rie,0,0]

      alto_0 = base_0
      alto_0.y = Y

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

Elemento _grafica_pannello_RA_368
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

      //FIASX
      //FIADX
      TipoPan "" "FIASX"

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

   PuntiNotevoli
   {
      riex = $M368_Rie_Pan
      riez = $M368_Rie_Pan

      DEL_VAR(ATTUALE(),"base_*")
      //DEL_VAR(ATTUALE(),"arc_*")

      base_0 = [0,0,0]
      base_1 = [0,0,Z]
      base_2 = [X,0,Z]
      base_3 = [X,0,0]

      if( TipoPan=="FIASX" )
      {
         Spe = X
         base_0 = [ 0    , 0, 0                ]
         base_1 = [ riex , 0, 0                ]
         base_2 = [ Spe  , 0,  Spe-riez        ]
         base_3 = [ Spe  , 0,  Z - Spe + riez  ]
         base_4 = [ riex , 0,  Z               ]
         base_5 = [ 0    , 0,  Z               ]
      }

      if( TipoPan=="FIADX" )
      {
         Spe = X

         base_0 = [ 0          , 0 , Spe-riez        ]
         base_1 = [ Spe-riex   , 0 , 0               ]
         base_2 = [ Spe        , 0 , 0               ]
         base_3 = [ Spe        , 0 , Z               ]
         base_4 = [ Spe - riex , 0 , Z               ]
         base_5 = [ 0          , 0 , Z - Spe + riez  ]
      }

      alto_0 = base_0
      alto_0.y = Y

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

Elemento _grafica_supp_piedini_RA_368
{
   Descrizione = " "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X "" 81
      Y "" 25
      Z "" 81

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

   PuntiNotevoli
   {
      base_0  = [0,0,0]
      base_1  = [0,0,Z]
      base_2  = [X,0,0]

      alto_0 = base_0
      alto_0.y = Y

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

Elemento _graf_comp_glass
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      //FIASX
      //FIADX
      //FND
      //COP
      TipoPan "" "FIASX"

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

   PuntiNotevoli
   {
      riex = 2.5
      riey = 2.5

      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( IS_MATCH( TipoPan , "FIASX*" ) == 1 )
      {
         Spe = X
         base_0 = [ 0    , 0               , 0 ]
         base_1 = [ riex , 0               , 0 ]
         base_2 = [ Spe  ,  Spe-riey       , 0 ]
         base_3 = [ Spe  ,  Y - Spe + riey , 0 ]
         base_4 = [ riex ,  Y              , 0 ]
         base_5 = [ 0    ,  Y              , 0 ]

         if( TipoPan=="FIASX-GL-AL" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_0 = [ 0    , 0               , 0 ]
            base_1 = [ Spe  , 0               , 0 ]
            base_2 = [ Spe  ,  Y - Spe + riey , 0 ]
            base_3 = [ riex ,  Y              , 0 ]
            base_4 = [ 0    ,  Y              , 0 ]
         }

         if( TipoPan=="FIASX-GL-BA" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_3 = [ Spe  ,  Y       , 0 ]
            base_4 = [ 0    ,  Y       , 0 ]
         }
      }

      if( IS_MATCH( TipoPan , "FIADX*" ) == 1 )
      {
         Spe = X

         base_0 = [ 0          , Spe-riey       , 0 ]
         base_1 = [ Spe-riex   , 0              , 0 ]
         base_2 = [ Spe        , 0              , 0 ]
         base_3 = [ Spe        , Y              , 0 ]
         base_4 = [ Spe - riex , Y              , 0 ]
         base_5 = [ 0          , Y - Spe + riey , 0 ]

         if( TipoPan=="FIADX-GL-AL" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_0 = [ 0          , 0       , 0 ]
            base_1 = [ Spe        , 0              , 0 ]
            base_2 = [ Spe        , Y              , 0 ]
            base_3 = [ Spe - riex , Y              , 0 ]
            base_4 = [ 0          , Y - Spe + riey , 0 ]
         }

         if( TipoPan=="FIADX-GL-BA" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_4 = [ 0 , Y  , 0 ]
         }
      }

      if( IS_MATCH( TipoPan , "FON*" ) == 1 )
      {
         Spe = Y

         base_0 = [ 0              , 0       , 0 ]
         base_1 = [ X              , 0       , 0 ]
         base_2 = [ X              , riey    , 0 ]
         base_3 = [ X - Spe + riex , Y       , 0 ]
         base_4 = [ Spe - riex     , Y       , 0 ]
         base_5 = [ 0              , riey    , 0 ]

         if( TipoPan=="FON-GL-SX" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_2 = [ X           , Y    , 0 ]
            base_3 = [ Spe - riex  , Y       , 0 ]
            base_4 = [ 0           , riey    , 0 ]
         }

         if( TipoPan=="FON-GL-DX" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_4 = [ 0  , Y   , 0 ]
         }
      }

      if( IS_MATCH( TipoPan , "COP*" ) == 1 )
      {
         Spe = Y

         base_0 = [ Spe - riex     , 0        , 0 ]
         base_1 = [ X - Spe + 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 ]

         if( TipoPan=="COP-GL-SX" )
         {
            DEL_VAR(ATTUALE(),"base_5")

            base_1 = [ X    , 0        , 0 ]
            base_2 = [ X    , Y        , 0 ]
            base_3 = [ 0    , Y        , 0 ]
            base_4 = [ 0    , Y - riey , 0 ]
         }

         if( TipoPan=="COP-GL-DX" )
         {
            DEL_VAR(ATTUALE(),"base_5")
            base_0 = [ 0  , 0        , 0 ]
         }
      }

      alto_0 = base_0
      alto_0.z = Z

      alto_1 = base_1
      alto_1.z = Z

      alto_4 = base_4
      alto_4.z = Z

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

Elemento _graf_pannello_glass
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep
   Alias Scassabile

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

      VAR_GlassL_ConScasso  ""  0 Implicit
      GlassL_Scasso_Pos     "" "" Implicit
      GlassL_Scasso_X       ""  0 Implicit
      GlassL_Scasso_Y       ""  0 Implicit

      Raggio                ""  0

      SchienaFinitura       ""  0

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

   PuntiNotevoli
   {
      VAR_IMPLICITLY_INHERITS(ATTUALE(), 0)

      DEL_VAR(ATTUALE(),"base_*")

      base_0 = [0,0,0]
      base_1 = [X,0,0]
      base_2 = [X,Y,0]
      base_3 = [0,Y,0]

      if( Raggio > 0 )
      {
         k = Raggio - Raggio * SENO(45)

         base_0 = [0,Raggio,0]
         arc_0  = [k,k,0]
         base_1 = [Raggio,0,0]
         base_2 = [X-Raggio,0,0]
         arc_2  = [X-k,k,0]
         base_3 = [X,Raggio,0]
         base_4 = [X,Y-Raggio,0]
         arc_4  = [X-k,Y-k,0]
         base_5 = [X-Raggio,Y,0]
         base_6 = [Raggio,Y,0]
         arc_6  = [k,Y-k,0]
         base_7 = [0,Y-Raggio,0]
      }

      if( VAR_GlassL_ConScasso == 1 )
      {
         DEL_VAR(ATTUALE(),"base_*")
         DEL_VAR(ATTUALE(),"arc_*")

         riex = GlassL_Scasso_X
         riey = GlassL_Scasso_Y

         if( SchienaFinitura == 1 )
         {
            riex = GlassL_Scasso_X - 8
            riey = GlassL_Scasso_Y - 8
         }

         if( GlassL_Scasso_Pos == "SX-BA" )
         {
            base_0 = [ riex , 0     , 0 ]
            base_1 = [ X    , 0     , 0 ]
            base_2 = [ X    , Y     , 0 ]
            base_3 = [ 0    , Y     , 0 ]
            base_4 = [ 0    , riey  , 0 ]
            base_5 = [ riex , riey  , 0 ]
         }

         if( GlassL_Scasso_Pos == "DX-BA" )
         {
            base_0 = [ 0        , 0    , 0 ]
            base_1 = [ X - riex , 0    , 0 ]
            base_2 = [ X - riex , riey , 0 ]
            base_3 = [ X        , riey , 0 ]
            base_4 = [ X        , Y    , 0 ]
            base_5 = [ 0        , Y    , 0 ]
         }

         if( GlassL_Scasso_Pos == "SX-AL" )
         {
            base_0 = [ 0    , 0        , 0 ]
            base_1 = [ X    , 0        , 0 ]
            base_2 = [ X    , Y        , 0 ]
            base_3 = [ riex , Y        , 0 ]
            base_4 = [ riex , Y - riey , 0 ]
            base_5 = [ 0    , Y - riey , 0 ]
         }

         if( GlassL_Scasso_Pos == "DX-AL" )
         {
            base_0 = [ 0        , 0        , 0 ]
            base_1 = [ X        , 0        , 0 ]
            base_2 = [ X        , Y - riey , 0 ]
            base_3 = [ X - riex , Y - riey , 0 ]
            base_4 = [ X - riex , Y        , 0 ]
            base_5 = [ 0        , Y        , 0 ]
         }
      }

      alto_0 = base_0
      alto_0.z = Z

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

Elemento _grafica_mensolaL_368
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      //0 bassa
      //1 alta
      TipoMensolaL "" 0

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

   PuntiNotevoli
   {
      spe = 2

      base_0 = [0,0,0]
      base_1 = [0,0,Z]
      base_2 = [0,spe,Z]
      base_3 = [0,spe,spe]
      base_4 = [0,Y,spe]
      base_5 = [0,Y,0]

      //ALTA
      if( TipoMensolaL == 1 )
      {
         base_1 = [0,0,spe]
         base_2 = [0,Y-spe,spe]
         base_3 = [0,Y-spe,Z]
         base_4 = [0,Y,Z]
      }

      alto_0 = base_0
      alto_0.x = X

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

//**************************************
//{  SOSTEGNI VETRO 368
//**************************************
Elemento GruppoSostegniVetro_368
{
   Descrizione = "Gruppo Sostegni Vetro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Stendibile  Modulo_368 ModuloGiorno_368
   Alias NoCollision;OnChangedVar

   Variabili
   {
      //Simone 27/10/21
      VAR_Revisione_Offset_Laterale  "Revisione offset laterale"  0  SaveAlways

      X      "Lunghezza"   1000  SaveAlways
   #ifdef TEC;AZI
      Y      "Altezza"      184 Menu ( AltSUP368 ) Utente ( 92-368 )
   #endif
   #ifndef TEC;AZI
      Y      "Altezza"      184 Menu ( AltSUP368 )
   #endif
      Yt     "Altezza"      184

      Z      "Profondità"   300  SaveAlways

      FILLER " " "" ShowAlways

      //Gestione dimensione e posizionamento in Z
      Sostegni_Muro    "" 0 SaveAlways
      Sostegni_VertZ   "" 0 SaveAlways
      Sostegni_VertPZ  "" 0 SaveAlways
      Sostegni_OrizZ   "" 0 SaveAlways
      Sostegni_OrizPZ  "" 0 SaveAlways

      NrSostegni         "[AUTO] Nr.Sostegni"     2 ShowAlways

      VAR_Manuale        "[MANUALE] Attiva"       0 Boolean
      NrSostegni_Man     "[MANUALE] Nr.Sostegni"  0 Utente ( )

      VAR_Omega          ""                       0 //Boolean

      //NrSostegni_Custom "[MANUALE] Nr.Sostegni"  0 Utente ( )

      ControllaCollisioni "Avvia controllo collisioni" 0 Boolean

      //non serve salvare le misure X_Cmp (proc.asscomune)
      TopLevel_NoMisCmp_ACT2 "" 1

      //auto "" 0
      M4_A_MURO               "" -1

      M4_DLINK_MODE__         "rimane steso" 0
      M4_DIALOG               "" 2

      CMP2_AZIONI       "" "M"
      ORD_MISAMETRO     "" "X"

      FillerM2G            " " "" ShowAlways

      M4_MIS "" "FILLER;Y;NrSostegni;VAR_Manuale;NrSostegni_Man"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7

      //Simone 27/10/21
      SetRevisioneElemento(ATTUALE(),"BDM_REV_368_Off_Sost","VAR_Revisione_Offset_Laterale")

      #ifndef TEC
      if( ACTION() == 0 )  { HIDE_ON_EDIT(ATTUALE(),"VAR_Manuale;NrSostegni_Man",1) }
      #endif

      #ifdef TEC
      if( ACTION() == 0 )  { HIDE_ON_EDIT2(ATTUALE(),"VAR_Manuale",0) }
      HIDE_ON_EDIT2(ATTUALE(),"NrSostegni_Man",1 - VAR_Manuale)
      #endif

      DescEdit__ = MSG(1025)
   }

   PuntiNotevoli
   {
      Yt = Y + $M368_Alt_Pie
      GOSUB punti_Yt

      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }
   #include %path_bdm%\TLib\orie.inc

   Procedura Stendi
   {
      GOSUB Stendi_GruppoSostVetro_368
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB CtrlSostegniVetro_368
   }

   Procedura SV_SpostaStaffeGruppoSostegni_368
   {
      GOSUB CtrlSostegniVetro_SpostaStaffeInCollisione_368
      COMANDO(STRCAT("Procedura SV_AggiornaSostegno ",STR(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //CtrlSostegniVetro_368" ))
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $NO_RAD

      GOSUB GestComune_Post
   }

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

      //if( $ChangedVar == "VAR_Manuale" )
      //{
      //   if( VAR_Manuale == 1 )
      //   {
      //      ArrayCopy(ATTUALE(),"SV_Auto","SV_Manuale")
      //      if( VAR_VAL(ATTUALE(),"SV_Manuale") > 0 )
      //      {
      //         i = 1
      //         while ( i <= SV_Manuale  )
      //         {
      //            nome_var = STRCAT("SV_Manuale_##",STR(i))
      //            VAR_SET_MODE(ATTUALE(),nome_var,$MODE_USER+$MODE_SAVEALWAYS)
      //            i = i + 1
      //         }
      //      }
      //   }
      //   if( VAR_Manuale == 0 )
      //   {
      //      DEL_VAR(ATTUALE(),"SV_Manuale*")
      //   }
      //}

      if( $ChangedVar == "Y" )
      {
         Yt = Y + 17
         GOSUB AggiornaPosModulo_SostVetro_368
      }
   }

   Procedura Notifica
   {
      GOSUB Notifica_GruppoSostVetro_368
   }

   //Procedura CtrlStatici
   //{
   //   COMANDO2(STRCAT("LOGMSG CtrlStatici ATTUALE[",STR(ATTUALE()), "]  ACT[" , STR(ACTION()) ,"]" ))
   //}
   //
   //Procedura PostAction2
   //{
   //   COMANDO2(STRCAT("LOGMSG PostAction2 ATTUALE[",STR(ATTUALE()), "]  ACT[" , STR(ACTION()) ,"]" ))
   //}

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

      //Simone 06/02/2023 - Cambio nome variabile perchè OnCancella da errore
      //OnCancella = 1
      Del_Sost = 1
      GOSUB AggiornaPosModulo_SostVetro_368
   }

   Posiziona SostegnoOmega omg
   {
      @escluso = 1 - VAR_Omega

      GOSUB posa_blocco
      @Y = Yt
      @Z = Z - 60

      @FLAG_CompostoGEN = 1
   }

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

   //{ ELEMENTI X DEBUG
   //Posiziona Blocco top
   //{
   //   GOSUB posa_blocco
   //   //@Z = 5
   //   GOSUB rivestimento
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}
   //
   //Posiziona SCRITTA_CAD scr
   //{
   //   @escluso = 1
   //
   //   if( ACTION() > 0 & ACTION() !=2  & $OnLoadOrder==0 )  {  @escluso = 0  }
   //
   //   @HIDE = 1
   //   @base_0.x = base_0.x + X/2
   //   @base_0.y = base_0.y + 10
   //   @base_0.z = base_1.z + 30
   //   @X = 40
   //   @Y = 50
   //   @senso=0
   //   @point=5
   //   @faccia="A"
   //   @scritta = STRCAT("X Tot.= ",STR(X))
   //}
   //
   //Posiziona SCRITTA_CAD scr2
   //{
   //   @escluso = 1
   //   if( ACTION() > 0 & ACTION() !=2  & $OnLoadOrder==0 )  {  @escluso = 0  }
   //
   //   @HIDE = 1
   //   @base_0.x = base_0.x + X/2
   //   @base_0.y = base_0.y + 10
   //   @base_0.z = base_1.z + 90
   //   @X = 40
   //   @Y = 50
   //   @senso=0
   //   @point=5
   //   @faccia="A"
   //   @scritta = STRCAT("NrSostegni=",STR(NrSostegni))
   //}
   //} ELEMENTI X DEBUG
}

Elemento SostegnoVetro_368
{
   Descrizione = "Sostegno Vetro"
   Code        = T68
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile GruppoSostegniVetro_368
   Altimetro    Auto
   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"      184 ShowAlways //Menu ( AltSUP368 )
      Yt     "Altezza"      184 //ShowAlways

      Z      "Profondità"   368 ShowAlways

      Filler1            " " "" ShowAlways

      FLAG_CompostoGEN  "Composto Generico"      0

      #ifdef TEC
         //Luca 27/11/2020
         VAR_Manuale   "[MANUALE] Attiva"        0  Implicit
         Man_OffX      "[MANUALE] Offset X"      0  Utente ( )
         Man_OffZ      "[MANUALE] Offset Z"      0  Utente ( )
         Man_Orie      "[MANUALE] Orientamento"  "" Utente ( )
         Man_Verso     "[MANUALE] Verso"         "" Utente ( )
      #endif

      #ifndef TEC
         VAR_Manuale   ""   0  Implicit
         Man_OffX      ""   0
         Man_OffZ      ""   0
         Man_Orie      ""   ""
         Man_Verso     ""   ""
      #endif

      //Sequenza vetro inserito
      NrVetro        "" 0

      //identifica se i sostegni vetri sono inseriti su una composizione a muro
      Sostegni_Muro  "" 0 Implicit

      //Offset x e Z di attrezzaggio al gruppo sostegni vetro
      //l'orientamento è:
      //   V (verticale) se il sostegno è parallelo ai fianchi
      //   O (Orizzontale) se il sostegno è perpendicolare ai fianchi
      OffX        ""  0    SaveAlways
      OffZ        ""  0    SaveAlways
      Orie        "" "V"   SaveAlways

      Collisione_OFFSET  "" 0 SaveAlways

      //il verso è necessario per capire la decentratura del vetro rispetto alla staffa (e quindi a tutto il sostegno vetro)
      Verso       "" "DX"

      COD_EREDITA ""  "PRE;POST"

      FillerM2G            " " "" ShowAlways

      M4_MIS "" "FillerM2G;Filler*;Xt;Yt;Y;Z;VAR_Manuale;Man_OffX;Man_OffZ;Man_Orie;Man_Verso"
   }

   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 = 150
      //if( Z == 368 ) { Staffa_Z = 250 }
      //if( Z == 522 ) { Staffa_Z = 400 }
      //if( Z == 628 ) { Staffa_Z = 500 }
      //if( Z == 736 ) { Staffa_Z = 600 }
      //if( Z >= 920 ) { Staffa_Z = 800 }
      Staffa_Z = 150
      GOSUB SetSuppVtrDimStaffa

      //S.2 la staffa è entrata rispetto al vetro
      Staffa_OffZ = (Z - Staffa_Z)/2
      //S.3 nel caso di sostegno vetro a muro e parallelo ai fianchi, la staffa è quasi a filo retro
      if( Sostegni_Muro == 1 & Orie == "V" ) { Staffa_OffZ = 15 }

      //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

      //V2. il rientro in X dipende dal verso, il vetro non è centrato rispetto alla staffa (e quindi rispetto a tutto il sostegno)
      Vetro_OffX  = 32
      if( Verso == "SX" ) { Vetro_OffX  = 26 }

      #ifndef TEC
         HIDE_ON_EDIT(ATTUALE(),"VAR_Manuale;Man_OffX;Man_OffZ;Man_Orie;Man_Verso",1)
      #endif

      #ifdef TEC
         HIDE_ON_EDIT(ATTUALE(),"VAR_Manuale;Man_OffX;Man_OffZ;Man_Orie;Man_Verso",1 - VAR_Manuale)
         if( VAR_Manuale == 0 )
         {
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS)
         }
         else
         {
            VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS+$MODE_MISURE)
            VAR_SET_MENU(ATTUALE(),"Z","ProSV_368")
         }
      #endif

      if( FLAG_CompostoGEN )
      {
         VAR_SET_MODE( ATTUALE(), "Y", $MODE_SHOWALWAYS+$MODE_USER)
         VAR_SET_MENU( ATTUALE(), "Y", STRCAT("( 50-1000 )"))

         VAR_SET_MODE( ATTUALE(), "Z", $MODE_SHOWALWAYS+$MODE_USER)
         VAR_SET_MENU( ATTUALE(), "Z", STRCAT("( 50-1000 )"))
      }

     #ifndef TEC
      M4_NO_OFFS = SE_NUM( FLAG_CompostoGEN > 0, 1, 0)
     #endif
   }

   PuntiNotevoli
   {
      Yt = Y + 17
      //Yt = Y - 17
      //GOSUB punti_Yt
      GOSUB punti_Yt
   }

   #include %path_bdm%\TLib\orie.inc

   Attrezza
   {
      if( VAR_Manuale == 0 )
      {
         //Le profondità e la posizione in profondità è calcolato direttamente sul GruppoSostegno
         Z    = @Sostegni_VertZ
         OffZ = @Sostegni_VertPZ
         if( Orie == "O" )
         {
            Z    = @Sostegni_OrizZ
            OffZ = @Sostegni_OrizPZ
         }

         //rileggo 'al volo', se esistono, i dati dal padre
         idx_ref = @idx_att
         if( NrVetro > 0  & VAR_EXIST(idx_ref,STRCAT("SV_Attrezza_##",STR(NrVetro))) )
         {
            wk_str   = VAR_VAL_STR(idx_ref,STRCAT("SV_Attrezza_##",STR(NrVetro)))

            Orie  = LEFT(wk_str,1)
            Verso = STRMID(2,2,wk_str)
            OffX  = ATOI(STRMID(5,STRLEN(wk_str)-5,wk_str))
         }
      }

      if( VAR_Manuale == 1 )
      {
         Orie  = Man_Orie
         Verso = Man_Verso
         OffX  = Man_OffX
         OffZ  = Man_OffZ
      }

      //OffX  e OffZ fanno riferimento al centro del Vetro
      //devo quindi utilizzare dei delta di spostamento in base al verso
      wk_sposta = 3
      if( Verso == "DX" ) { wk_sposta = -3 }
      if( Verso == "CX" ) { wk_sposta = -32 }

      base_0 = $vano_0
      base_0.x = $vano_0.x + OffX - X/2 + wk_sposta + Collisione_OFFSET
      base_0.z = $vano_0.z + OffZ
      ang_y = 0

      if( Orie == "O" )
      {
         base_0.x = $vano_0.x + OffX - Z/2 + Collisione_OFFSET
         base_0.z = $vano_0.z + X + OffZ + wk_sposta

         ang_y = 90
      }

      Y = @Y
   }

   Controlli
   {
      GOSUB CtrlComune

      //quando viene attivata la gestione manuale, leggo i valori presenti e li forzo
      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder ==0 )
      {
         idx_pdr = PADRE(ATTUALE(),1)

         if( VAR_Manuale == 1  & IS_VAR_FIXED(ATTUALE(),"Man_Orie") == 0  )
         {
            wk_str   = VAR_VAL_STR(idx_pdr,STRCAT("SV_Attrezza_##",STR(NrVetro)))

            Orie  = LEFT(wk_str,1)
            Verso = STRMID(2,2,wk_str)
            OffX  = ATOI(STRMID(5,STRLEN(wk_str)-5,wk_str))
            Z     = VAR_VAL(idx_pdr,"Sostegni_VertZ")
            OffZ  = VAR_VAL(idx_pdr,"Sostegni_VertPZ")
            if( Orie == "O" )
            {
               Z     = VAR_VAL(idx_pdr,"Sostegni_OrizZ")
               OffZ  = VAR_VAL(idx_pdr,"Sostegni_OrizPZ")
            }

            wk_cmd = ""
            Man_Orie = Orie
            Man_Verso = Verso
            Man_OffX = OffX
            Man_OffZ = OffZ
            Z = Z

            wk_cmd = STRCAT(wk_cmd," Man_Orie=",APICI(),Man_Orie,APICI())
            wk_cmd = STRCAT(wk_cmd," Man_Verso=",APICI(),Man_Verso,APICI())
            wk_cmd = STRCAT(wk_cmd," Man_OffX=",STR(Man_OffX))
            wk_cmd = STRCAT(wk_cmd," Man_OffZ=",STR(Man_OffZ))
            wk_cmd = STRCAT(wk_cmd," Z=",STR(Z))
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " ", wk_cmd))
         }
      }

      //GOSUB CtrlStaffa_Collisione_368
   }

   Gestionale
   {
      GOSUB GestComune

      if( FLAG_CompostoGEN )
      {
         RADICE = ""
      }
      else
      {
         GEST_CODICE = ""
         RADICE = "36SOSVT"
      }

      //Luca 02/12/2020
      if( VAR_VAL(ATTUALE(),"in_pcfto")==1 ) { GEST_IDXPADRE = PADRE(ATTUALE(),-1) }

      GEST_X = Xt
      GEST_Y = Yt

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

   Procedura SV_AggiornaSostegno
   {
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //CtrlSostegniVetro_368" ))
   }

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

      //Luca 13/01/2022 in alcuni casi il vetro viene inserito con la dimensione errata, quindi prende codice errato.
      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 )
      {
         flag_CAMBIA_VAR = 1
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_ridisegna //PostGestDllValida ",NOME(ATTUALE())))
      }
   }

   //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
   }
}

Elemento SVT_ContCollisioni_368
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X   ""    20
      Y   ""    20
      Z   ""    20

      HIDE "" 1

      c_rivestimento "" [255,0,0]
      f_rivestimento "" "0.9"
   }

   PuntiNotevoli
   {
      GOSUB punti
      base_so = base_0
      alto_ne = alto_2
   }

   Posiziona Blocco vedi
   {
      GOSUB posa_blocco

      @f_rivestimento = f_rivestimento
      @c_rivestimento = c_rivestimento

      @escluso = 1

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

Elemento StaffaXSostegno_368
{
   Descrizione = "Vetro x sostegno"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente;Staffa

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 70
      Y "" 30
      Z "" 300

      LargVet    "" 0  //Specificare solo se non standard

      Verso       ""  ""

      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      idx_collisione_1 "" -1
      idx_collisione_2 "" -1

      RADICE      ""  "STRG"

      COD_EREDITA ""  "PRE;POST"

      M4_NO_OFFS  "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Z
      GEST_Z = X

      //Padre gestionale
      GEST_IDXPADRE = GetPrimoGest( ATTUALE(), 1)

      if( UN_PADRE("SostegnoScrivania_AIR") )
      {
         topl_idx = GetTopLevel(ATTUALE())

         piano_idx = -1
         if( IsIdx( topl_idx, "idx_piano")) { piano_idx = VAR_VAL( topl_idx, "idx_piano") }

         if( piano_idx >= 0)
         {
            piano_materiale = VAR_VAL_STR( piano_idx, "VAR_MaterialeStr")

            if( piano_materiale == "VETRO"
              | piano_materiale == "WILDWOOD" ) { GEST_IDXPADRE = piano_idx }
         }
      }

      if( IS_IDX(GEST_IDXPADRE) == 0 ) { GEST_IDXPADRE = ATTUALE() }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ bl
   {
      GOSUB posa_blocco
      @import = STRCAT($path_sat,"368\StaffaSV_STRG_",STR(Z),".sat")
      @ang_y = 0
      if( Verso == "SX" )
      {
         @ang_y = 180
         @base_0.x = base_0.x + X
         @base_0.z = base_0.z + Z
      }

      GOSUB rivestimento
   }

   //Simone 01/12/2022
   Posiziona LavorazioneStaffa_Tav_AIR lav
   {
      @escluso = 1

      if( UN_PADRE("Scrivania_AIR")
        | UN_PADRE("ScrivaniaMuro_AIR") )
      {
         if( VAR_VAL_STR(GetTopLevel(ATTUALE()), "VAR_MaterialeStr") == "WILDWOOD"
           | VAR_VAL_STR(GetTopLevel(ATTUALE()), "VAR_MaterialeStr") == "VETRO"   )  { @escluso = 0 }
      }

      GOSUB posa_blocco

      @LargVet = LargVet
   }

   Posiziona _cont_per_near colrt
   //Posiziona Blocco colrt
   {
      @base_0.x = base_0.x + 13
      @base_0.y = alto_0.y - 1
      @base_0.z = base_0.z + 4
      @X = X - 13 - 13
      @Y = 30
      @Z = 10
      if( Z > 150 )
      {
         @base_0.z = base_0.z + 13
         @Z = 75
      }
      @c_rivestimento = $c_verde

      idx_collisione_1 = ATTUALE()
   }

   Posiziona _cont_per_near colfr
   //Posiziona Blocco colfr
   {
      @base_0.x = base_0.x + 13
      @base_0.y = alto_0.y - 1
      @base_0.z = base_1.z - 4 - 10
      @X = X - 13 - 13
      @Y = 30
      @Z = 10
      if( Z > 150 )
      {
         @Z = 75
         @base_0.z = base_1.z - 13 - @Z
      }
      @c_rivestimento = $c_verde

      idx_collisione_2 = ATTUALE()
   }
}

Elemento VetroXSostegno_368
{
   Descrizione = "Vetro x sostegno"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 12
      Y "" 179
      Z "" 368

      FLAG_CompostoGEN "" 0 Implicit

      VAR_Manuale ""  0 Implicit

      idx_near    ""  -1

      FIN_var     ""  "C014"
      FIN_orie    ""  "V"

      RADICE      ""  ""
      GEST_CODICE ""  ""

      COD_EREDITA ""  "PRE;POST"

      M4_NO_OFFS  "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      perRADICE_prec = RADICE
      perCODICE_prec = GEST_CODICE

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         perRADICE = "36SUPVT"
         perCODICE = ""

         //Vetro a misura
         wk_test = 0
         if( UN_PADRE("SetVetriFondoATerra_AIR") )
         {
            if( VAR_Manuale )      { wk_test = wk_test + 1 }
         }
         else
         {
            if( FLAG_CompostoGEN ) { wk_test = wk_test + 1 }
         }

         if( wk_test > 0 )
         {
            perRADICE = ""
            perCODICE = "D05900"
         }

         GEST_CODICE = perCODICE
         RADICE = perRADICE
      }

      if( perRADICE != RADICE
        | perCODICE != GEST_CODICE ) { flag_CAMBIA_VAR = 1 }

      GOSUB CAMBIA_VAR
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Z
      GEST_Z = X

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}
//**************************************
//}  SOSTEGNI VETRO 368
//**************************************

//LZ 26/07/2021: 36e8 sideboard
//**************************************
//{  OMEGA 368
//**************************************
Elemento SostegnoOmega
{
   Descrizione = "Sostegno Omega"
   Code        = OMG
   Gruppo      = "368"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"             460 Menu ( LargOmega )
      Xr      "Larghezza reale"        92
      Y       "Altezza"               201 Menu ( AlteOmega )
      Z       "Profondita'"           346 Menu ( ProfOmega )
      Zt      "Profondita nominale"   346

      FLAG_CompostoGEN  "Modalità composto GENERICO"       1

      VAR_YGambe        "H gambe"                          199

      VAR_GambaC        "Gamba centrale"                   0   Boolean
      VAR_XGambaC       "X gamba cent."                    346
      VAR_YGambaC       "H gamba cent."                    174

      VAR_XSuppC        "X supporto cent."                 300

      //Tipo sostegno: 0 - METALLO , 1 - VETRO
      VAR_TipoSost      "Tipo sostegno"                    0
      //Omega parziale: 0 - Intero, -1 - Parziale Sx, 1 - Parziale Dx
      VAR_Parziale      "Omega parziale"                   0 SaveAlways
      VAR_Parziale_prec ""                                 0

      VAR_TipoComp      "Tipologia composizione"           0 Menu ( TipoCmpOmega )
      VAR_OrieComp      "Composizione: 0 Oriz - 1 Vert"    0 Boolean
      VAR_AltComp       "Altezza composizione"             0 SaveAlways

      perCODICE         ""      ""

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

      //CNear
      idx_cnear_up      ""      -1
      idx_cnear_sx      ""      -1
      idx_cnear_dx      ""      -1

      //Regole per elements
      #ifdef TEC
         VAR_Regola_Elements "Config.Elements" "" Utente ( )
      #endif
      #ifndef TEC
         VAR_Regola_Elements "" ""
      #endif

      OnBubble_FIXVARS   ""  "X|Y|Z|FLAG_CompostoGEN"

      M4_A_MURO          ""   0
      //M4_CNT_LINK_MODE__ ""   2
      M4_CNT_MODE__      ""   1

      M4_VAR      "" "X;Y;Z;VAR_TipoComp;VAR_OrieComp;VAR_GambaC"

      FIN_var    "" "C052"

      FillerM2G  " " "" ShowAlways

      //LZ 07/09/2021: vt per omega e moduli su omega
      VT_NRVANI   "Omega - Numero vani su omega"      0
      VT_NRFIXOMG "Omega - Numero viti fissaggio"     0
      VT_NRREGPL  "Omega - Numero grani regolazione"  0
      VT_NRGMB    "Omega - Numero gambe per modulo"   0

      //LZ 18/10/2021
      VAR_Revisione_SostC "" 0
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 18/10/2021
      SetRevisioneElemento(ATTUALE(),"BDM_REV_368_Omega_SC","VAR_Revisione_SostC")

      VAR_YGambe  = Y - $Omega_RieY_Gambe
      VAR_YGambaC = Y - $Omega_RieY_GambaC

      //GOSUB Set_Omega_TipoComp
      //GOSUB Set_Omega_OrieComp

      RieXG = 184
      RieZG = 28
      if( VAR_OrieComp == 1 ) { RieXG = 138 }

      Xr = X - 2*RieXG
      if( VAR_Parziale != 0 ) { Xr = X - RieXG }

      GOSUB Set_Omega_GambaC

      if( ACTION()==2
        & $ATTIVA_DLL==0
        & IS_VAR_FIXED(ATTUALE(),"X")==0
        & INSERIMENTO2(ATTUALE())!=$ins2_composto ) { CHIEDI( ATTUALE(), "X") }
      if( ACTION()==0 )
      {
         HIDE_ON_EDIT2( ATTUALE(), "VAR_TipoComp", $ATTIVA_DLL)
         HIDE_ON_EDIT2( ATTUALE(), "VAR_OrieComp", $ATTIVA_DLL)
         HIDE_ON_EDIT2( ATTUALE(), "VAR_GambaC", $ATTIVA_DLL)
      }
   }

   PuntiNotevoli
   {
      Zt = Z + RieZG
      GOSUB punti_Zt
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Set_Omega_TipoComp
      GOSUB Set_Omega_OrieComp

      GOSUB GetRegola_Componenti_Elements

      GOSUB Set_Verso_SostegnoOmega

      GOSUB Set_Vt_SuppOmega
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = ""
      if( FLAG_CompostoGEN == 1 )
      {
         perCODICE = "SG0001"
         if( VAR_Parziale != 0 )  { perCODICE = "SG0002" }

         if( VAR_VAL_STR( ATTUALE(), "GEST_CODICE") != perCODICE )
         {
            flag_CAMBIA_VAR = 1
            GEST_CODICE = perCODICE
         }
      }

      GOSUB Set_VAR_TipoSost_SostegnoOmega
      GOSUB Set_Gest_C157_SostegnoOmega

      if( Xr != VAR_VAL(idx_att,"GEST_X") ) { flag_CAMBIA_VAR = 1 }

      GEST_X = Xr

      GOSUB CAMBIA_VAR
      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      if( idx_pdr != idx_att ) { GOSUB BloccaCancellaComponente }
   }

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

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Posiziona GambaOmega gsx
   {
      @escluso = 0
      if( VAR_Parziale == 1 ) { @escluso = 1 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + RieXG
      @base_0.z = base_0.z + RieZG

      @X = $Omega_Spe_Gambe
      @Y = VAR_YGambe

      @Pos = -1
   }

   Posiziona GambaOmega gdx
   {
      @escluso = 0
      if( VAR_Parziale == -1 ) { @escluso = 1 }

      GOSUB posa_blocco

      @base_0.x = base_0.x + X - RieXG - $Mat_Spe_Gambe
      @base_0.z = base_0.z + RieZG

      @X = $Mat_Spe_Gambe
      @Y = VAR_YGambe

      @Pos = 1
   }

   Posiziona GambaOmegaCent_Supp suppc
   {
      @escluso = 1 - VAR_GambaC

      @X = VAR_XGambaC
      @Y = VAR_YGambaC

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

   Posiziona GambaOmegaCent_Staffa staffc
   {
      @escluso = 1 - VAR_GambaC
      if( VAR_Revisione_SostC == 0 ) { @escluso = 1 }

      @X = VAR_XSuppC

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + VAR_YGambaC + $Omega_OffY_StafC
      @base_0.z = base_0.z + (Z - @Z)/2 + RieZG
   }

   Posiziona SupportoVetro_Staffa sostc
   {
      @escluso = 1 - VAR_GambaC
      if( VAR_Revisione_SostC > 0 ) { @escluso = 1 }

      @X = VAR_XSuppC

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + VAR_YGambaC - @Y + $Omega_OffY_StafC
      @base_0.z = base_0.z + (Z - @Z)/2 + RieZG
   }

   Posiziona GambaOmegaCent_Mass masc
   {
      @escluso = 1 - VAR_GambaC
      if( VAR_Revisione_SostC > 0 ) { @escluso = 1 }

      @X = VAR_XSuppC

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + VAR_YGambaC + $Omega_OffY_StafC
      @base_0.z = base_0.z + (Z - @Z)/2 + RieZG
   }

   Posiziona ProfiloOmega prof
   {
      @X = X - 2*RieXG - 2*$Omega_Spe_Gambe

      @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)/2 + RieZG

      if( VAR_Parziale == -1 )
      {
         @X = X - RieXG - $Omega_Spe_Gambe
         @base_0.x = base_0.x + X - @X
      }

      if( VAR_Parziale == 1 )
      {
         @X = X - RieXG - $Omega_Spe_Gambe
         @base_0.x = base_0.x
      }
   }

   //CNear
   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      GOSUB posa_blocco

      @X = X - 2*RieXG
      @Y = 10

      @base_0.y = alto_0.y - @Y/2
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @X = 20
      @Y = Y - @X
      @Z = Z - @X

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

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @X = 20
      @Y = Y - @X
      @Z = Z - @X

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

Elemento GambaOmega
{
   Descrizione = "Gamba Omega"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"   12  ShowAlways
      Y   "Altezza"     199
      Yr  "Altezza"     196 ShowAlways
      Z   "Profondità"  346 ShowAlways

      VAR_TipoSost   "" 0   Implicit

      FillerM2G     " " " " ShowAlways

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

      GEST_CODICE "" ""
      perCODICE   "" ""

      FIN_var "" "C052"
   }

   Assegnazioni
   {
      GOSUB AssComune

      Yr = Y - $Omega_YPie
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder != 1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C052") ) { DEL_VAR_MODIFICATE( ATTUALE(),"GEST_C052") }

         perCODICE_prec = VAR_VAL_STR( ATTUALE(), "perCODICE")

         perCODICE = "D18024"
         if( VAR_TipoSost == 1 ) { perCODICE = "D18025" }

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

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco rinf
   {
      @escluso = 1 - VAR_TipoSost

      GOSUB posa_blocco

      @Y = $Omega_YRinf_Vtr
      @base_0.y = base_0.y + Y - @Y

      @c_rivestimento = $c_alluminio
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      @Y = Yr
      if( VAR_TipoSost == 1 ) { @Y = Yr - $Omega_YRinf_Vtr }

      @base_0.y = base_0.y + $Omega_YPie

      GOSUB rivestimento

      @f_rivestimento = ""
      if( VAR_TipoSost == 1 ) { @f_rivestimento = "0.8" }
   }

   Posiziona Blocco pie1
   {
      @X = $Omega_Spe_Gambe
      @Y = $Omega_YPie
      @Z = $Omega_ZPie

      @base_0 = base_0
      @base_0.z = base_0.z + $Omega_RieZ_Pie

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco pie2
   {
      @X = $Omega_Spe_Gambe
      @Y = $Omega_YPie
      @Z = $Omega_ZPie

      @base_0 = base_0
      @base_0.z = base_0.z + Z - $Omega_RieZ_Pie - @Z

      @c_rivestimento = $c_nero
   }
}

Elemento GambaOmegaCent_Staffa
{
   Descrizione = "Staffa Gamba Centrale Omega"
   Code        = CUB
   Gruppo      = "TEST"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"   300
      Y               "Altezza"     49
      Z               "Profondità"  72

      VAR_GambaC_tipo ""            0    Implicit
      VAR_YGambaC     ""            109  Implicit
      RieZG           ""            28   Implicit

      GEST_CODICE     ""            "D18028"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003_Omega_GambaC

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona SupportoVetro_Staffa sostc
   {
      @X = X

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

   Posiziona GambaOmegaCent_Mass masc
   {
      @X = X

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

Elemento GambaOmegaCent_Supp
{
   Descrizione = "Supporto Gamba Centrale Omega"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X               "Larghezza"   346 ShowAlways
      Y               "Altezza"     174
      Yr              "Altezza"     171 ShowAlways
      Z               "Profondità"  12  ShowAlways

      VAR_TipoSost    ""            0   Implicit
      VAR_GambaC_tipo ""            0   Implicit

      FillerM2G       " "           " " ShowAlways

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

      GEST_CODICE     ""            ""
      perCODICE       ""            ""

      FIN_var         ""            "C052"
   }

   Assegnazioni
   {
      GOSUB AssComune

      Yr = Y - $Omega_YPie
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      if( ACTION() > 0 & ACTION() != 2 & $OnLoadOrder != 1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C052") ) { DEL_VAR_MODIFICATE( ATTUALE(),"GEST_C052") }

         perCODICE_prec = VAR_VAL_STR( ATTUALE(), "perCODICE")

         perCODICE = "D18026"
         if( VAR_TipoSost == 1 ) { perCODICE = "D18027" }

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

      GOSUB Set_Gest_C003_Omega_GambaC

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      @Y = Yr
      @base_0.y = base_0.y + $Omega_YPie

      GOSUB rivestimento

      @f_rivestimento = ""
      if( VAR_TipoSost == 1 ) { @f_rivestimento = "0.8" }
   }

   Posiziona Blocco pie1
   {
      @X = $Omega_ZPie
      @Y = $Omega_YPie
      @Z = $Omega_Spe_Gambe

      @base_0 = base_0
      @base_0.x = base_0.x + $Omega_RieZ_Pie

      @c_rivestimento = $c_nero
   }

   Posiziona Blocco pie2
   {
      @X = $Omega_ZPie
      @Y = $Omega_YPie
      @Z = $Omega_Spe_Gambe

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

      @c_rivestimento = $c_nero
   }
}

Elemento GambaOmegaCent_Mass
{
   Descrizione = "Massello Gamba Centrale Omega"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"   300   ShowAlways
      Y "Altezza"     19    ShowAlways
      Z "Profondità"  71.71 ShowAlways

      FillerM2G " " " "   ShowAlways

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

      GEST_CODICE "" "B27001"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona _xsweep_graf_massello_gambac_omega rie
   {
      @X = X

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

Elemento ProfiloOmega
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Xn           "Larghezza nominale" 736 ShowAlways

      X            "Larghezza"          712
      Y            "Altezza"            40  ShowAlways
      Z            "Profondità"         268 ShowAlways

      VAR_Parziale ""                   0 Implicit

      GEST_CODICE  ""                   ""
      perCODICE    ""                   ""

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

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      //LZ 03/12/2021: il profilo omega è sempre della stessa finitura
      //FIN_var "" "C052"
      //FIN_idx_gest = PADRE(ATTUALE(),1)

      c_rivestimento = [69,73,78]
   }

   PuntiNotevoli
   {
      GOSUB punti

      Xn = X + 2*$Omega_Spe_Gambe
      if( VAR_Parziale != 0 ) { Xn = X + $Omega_Spe_Gambe }
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perCODICE = "D17020"
      if( VAR_Parziale != 0 ) { perCODICE = "D17021" }

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

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C052") ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C052") }

      if( Xn != VAR_VAL(idx_att,"GEST_X") ) { flag_CAMBIA_VAR = 1 }
      GEST_X = Xn

      GOSUB CAMBIA_VAR
      GOSUB GestComune_Post
   }

   Posiziona _graf_staffa_OMEGA bl
   {
      GOSUB posa_blocco

      @c_rivestimento = c_rivestimento
   }

   //Fronte Sx
   Posiziona Blocco blc1
   {
      @escluso = 0
      if( VAR_Parziale == 1 ) { @escluso = 1 }

      @X = 12
      @Y = 2
      @Z = 24.5

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

      @c_rivestimento = c_rivestimento
   }

   //Retro Sx
   Posiziona Blocco blc2
   {
      @escluso = 0
      if( VAR_Parziale == 1 ) { @escluso = 1 }

      @X = 12
      @Y = 2
      @Z = 32.5

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

      @c_rivestimento = c_rivestimento
   }

   //Fronte Dx
   Posiziona Blocco blc3
   {
      @escluso = 0
      if( VAR_Parziale == -1 ) { @escluso = 1 }

      @X = 12
      @Y = 2
      @Z = 24.5

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

      @c_rivestimento = c_rivestimento
   }

   //Retro Dx
   Posiziona Blocco blc4
   {
      @escluso = 0
      if( VAR_Parziale == -1 ) { @escluso = 1 }

      @X = 12
      @Y = 2
      @Z = 32.5

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

      @c_rivestimento = c_rivestimento
   }
}

Elemento _xsweep_graf_massello_gambac_omega
{
   Descrizione = "Riempitivo Omega"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

   Variabili
   {
      X "" 300
      Y "" 19
      Z "" 71.71

      Zsup "" 28

      HIDE "" 1
      c_rivestimento "" [63,47,31]
   }

   PuntiNotevoli
   {
      base_0 = [0, 0, 0]
      base_1 = [0, 0, Z]
      base_2 = [0, Y, Z-(Z-Zsup)/2]
      base_3 = [0, Y, (Z-Zsup)/2]

      alto_0 = base_0
      alto_0.x = X
   }
}

Elemento TopOmega
{
   Descrizione = "TopOmega"
   Code        = TOM
   Gruppo      = "OMEGA"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      "Larghezza"              368     Menu ( LargP368 )
      Y                      "Altezza"                184     Menu ( AltP368 )
      Yr                     "Altezza reale"          8
      Z                      "Profondità"             180     Menu ( ProfP368 )

      VAR_Materiale          "Materiale"              "VETRO"

      FLAG_CompostoGEN       "Mod. composto GENERICO" 1       Boolean

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

      COD_EREDITA            ""                       "PRE;POST"
      RADICE                 ""                       "VTROMG"

      FIN_var                ""                       "C042"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = Yr

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   //Posiziona Vetro_Saponetta_Verniciato vtr
   Posiziona Blocco vtr
   {
      @escluso = 0
      if( VAR_Materiale != "VETRO" ) { @escluso = 1 }

      GOSUB posa_blocco

      @Y = Yr

      GOSUB rivestimento
   }

   Posiziona Blocco leg
   {
      @escluso = 0
      if( VAR_Materiale != "LEGNO" ) { @escluso = 1 }

      GOSUB posa_blocco

      @Y = Yr

      GOSUB rivestimento
   }
}
//**************************************
//}  OMEGA 368
//**************************************

//**************************************
//{             WALL PANEL
//**************************************
Elemento WallPanel_368
{
   Descrizione = "WALL PANEL 368"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;StpWallPanel;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"    368 Menu ( DimWP368 ) Utente ( )
      Y       "Altezza"      368 Menu ( DimWP368 ) Utente ( )
      Z       "Profondità"    23 ShowAlways

      //0 Vetro
      //1 Metallo
      //2 Rovere
      Fin_WP        "Finitura WALL PANEL"  0

      //0 standard
      //1 sottolavello
      Tipologia_WP  "Tipologia WALL PANEL" 0

      VediLimiti    "Vedi limiti scassi"   0 Boolean

      //Simone 05/07/21
      VAR_Revisione "Revisione"            0

      VAR_RangeDim "" 0

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia     "" "368"

      LED_Sopra            ""  0
      LED_Sotto            ""  0

      TLED_Attiva          ""  0 SaveAlways
      TLED_Tipologia       ""  1 SaveAlways
      TLED_Watt            ""  0

      TLED_Lavorazione     ""  0 SaveAlways
      TLED_TipoLavorazione ""  0 SaveAlways

      FLAG_CompostoGEN     ""  0

     #ifdef TEC
      vetri_num      "Vetri - Numero, 0 disabilita"       0 Utente ( )
      vetri_dim_str  "Vetri - Dimensioni separate da ;"  "" Utente ( )
      vetri_dim_arr  ""                                   0
     #endif

     #ifndef TEC
      vetri_num      ""   0
      vetri_dim_str  ""  ""
      vetri_dim_arr  ""   0
     #endif

      idx_cnear_up   "" -1
      idx_cnear_dw   "" -1

      idx_pan        "" -1
      idx_pannello   "" -1
      idx_blocco_agg "" -1

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

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

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

      FillerM2G          " " "" ShowAlways
      XGLASS             "Num. XGLASS" "" Utente ( )

      STP_Bollina        "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_WallPanel
      GOSUB AssRangeRid_WallPanel

      //Simone 05/07/21 - Per finitura Rovere Gentle e Metallo Laccato
      if( VAR_Revisione >= 1 )
      {
         Fin_WP = 0
         if( IS_MATCH( VAR_VAL_STR(ATTUALE(), "GEST_C028"), "LC*" ))    { Fin_WP = 1 }
         if( IS_MATCH( VAR_VAL_STR(ATTUALE(), "GEST_C028"), "GE00*" ))  { Fin_WP = 2 }
      }

      M4_GRUPPO__  = MSG(1016)
      if(ACTION()==0 & VAR_EXIST(idx_att,"copied__")!=1) { X_ori=X Y_ori=Y Z_ori=Z }

      if( $OnLoadOrder )
      {
         if( IS_VAR_FIXED(ATTUALE(),"VediLimiti")==1 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"VediLimiti")
            VediLimiti = 0
         }
      }

      //Generico per speciali
      if( FLAG_CompostoGEN > 0 )
      {
         RieX_Pan = 0
         RieY_Pan = 0
      }

      vetri_dim_arr = 0
      if( vetri_dim_str != "" )
      {
         STR_SPLIT( vetri_dim_str, ";", 1, "vetri_dim_arr" , ATTUALE())
      }

      ///X totale da sommma di vetri
      if( vetri_num > 0 & vetri_dim_arr >= vetri_num )
      {
         wk_X = 0

         wk_i = 1
         while( wk_i <= vetri_num )
         {
            wk_X = wk_X + ATOI(vetri_dim_arr[wk_i])
            wk_i = wk_i + 1
         }

         wk_X = wk_X + $M368_Aria_Ant_Ant_X*(vetri_num - 1)

         if( IS_VAR_FIXED( ATTUALE(), "X") ) { DEL_VAR_MODIFICATE( ATTUALE(), "X") }
         X = wk_X
      }
   }

   PuntiNotevoli
   {
      Xr = X - 2*RieX_Pan
      Yr = Y - 2*RieY_Pan

      Z = Spe_PanVet + Spe_Prof
      if( Fin_WP == 1 )  { Z = Spe_PanMet + Spe_Prof }

      //Simone 02/07/21 - Gestione WallPanel 2.0
      if( VAR_Revisione >= 1 )
      {
         Z = Spe_PanVet + Spe_Pan
         if( Fin_WP == 1 )  { Z = Spe_PanMet + Spe_Pan }
         if( Fin_WP == 2 )  { Z = Spe_Pan }

         if( Fin_WP != 2 )
         {
            GOSUB DefPuntiLED_368
         }
      }

      GOSUB punti

      vano_0_0    = [RieX_Pan, RieY_Pan, 0 ]
      vano_l_0    = Xr
      vano_p_0    = Z

      //Luca 04/05/2020
      stp_base_0 = [RieX_Pan,RieY_Pan,0]        stp_alto_0 = [RieX_Pan,RieY_Pan+Yr,0]
      stp_base_1 = [RieX_Pan,RieY_Pan,Z]        stp_alto_1 = [RieX_Pan,RieY_Pan+Yr,Z]
      stp_base_2 = [RieX_Pan+Xr,RieY_Pan,Z]     stp_alto_2 = [RieX_Pan+Xr,RieY_Pan+Yr,Z]
      stp_base_3 = [RieX_Pan+Xr,RieY_Pan,0]     stp_alto_3 = [RieX_Pan+Xr,RieY_Pan+Yr,0]

      //Luca 30/03/2022 mantis 28674: Stampe fine ordine/commerciali: quota reali wallpanel
      TSTP_Pianta_base_0 = stp_base_0
      TSTP_Pianta_base_1 = stp_base_1
      TSTP_Pianta_base_2 = stp_base_2
      TSTP_Pianta_base_3 = stp_base_3

      TSTP_Prospetti_pnt_0 = stp_base_0
      TSTP_Prospetti_pnt_1 = stp_alto_0
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="POST" )
      {
         Tipologia_WP = 0
         if( VAR_VAL_STR(ATTUALE(),"GEST_C037")=="FR003" )  { Tipologia_WP = 1 }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Per finitura Rovere Gentle
      if( VAR_VAL(ATTUALE(), "Fin_WP")== 2 )
      {
         RieX_pan = 0
         RieY_pan = 0
      }

      Scassa_Chi_Plus = STRCAT(STR(idx_pannello), ";", STR(VAR_VAL(idx_pan, "idx_grafica")))

      //Luca 07/04/2022
      if( VAR_Revisione >=0  )
      {
         Scassa_Chi_Plus = STR(idx_pannello)
         Scassa_Chi_Plus_PanRetro = STR(VAR_VAL(idx_pan, "idx_grafica"))
      }
      GOSUB CtrlScassi_WallPanel

      //Simone 02/07/21
      GOSUB CtrlPresenza_LED_368

      GOSUB TLED_CalcolaTrasformatore_368
   }

   Gestionale
   {
      GOSUB GestComune

      if( VAR_Revisione >= 1 )
      {
         GEST_X = Xr
         GEST_Y = Yr
      }

      GOSUB Set_Gest_C008_WallPanel

      GOSUB Set_Gest_C009_WallPanel

      GOSUB GestComune_Post
   }

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

      //if( $ChangedVar=="X" | $ChangedVar=="Y" | $ChangedVar=="GEST_C037" )
      //{
      //   COMPONENTI2("wk_scs",ATTUALE(),"Scasso_WallPanel")
      //   i = 1
      //   while ( i<=wk_scs  )
      //   {
      //      SET_#(wk_scs[i])
      //      #RigeneraScasso=1
      //      COMANDO(STRCAT("RICALCOLA_UNA ",STR(wk_scs[i])))
      //      //COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(wk_scs[i])))
      //      i = i + 1
      //   }
      //}
   }

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

      @base_0.x = base_0.x + RieX_Pan
      @base_0.y = base_0.y + RieY_Pan
      @base_0.z = base_0.z

      @X = X - 2*RieX_Pan
      @Y = Y - 2*RieY_Pan
      @Z = Spe_Prof

      idx_blocco_agg = ATTUALE()
   }

   //Simone 02/07/21 - Gestione WallPanel 2.0
   Posiziona PannelloRetro_WallPanel_368 pan
   {
      @escluso = 1
      if( VAR_Revisione >= 1 ) { @escluso = 0 }

      @X = X - 2*RieX_Pan - 2*RieX_pan
      @Y = Y - 2*RieY_Pan - 2*RieY_pan
      @Z = Spe_Pan

      @base_0.x = base_0.x + RieX_Pan + RieX_pan
      @base_0.y = base_0.y + RieY_Pan + RieY_pan
      @base_0.z = base_0.z

      @FIN_var = ""
      if( Fin_WP == 2 )
      {
         @FIN_var = "C028"
         @FIN_orie= "O"
      }

      if( FLAG_CompostoGEN > 0 )
      {
         @HIDE = 0
         @GEST_CODICE = "2AE097"
         @FIN_var = "C002"
         @FIN_orie= "O"
      }

      idx_pan = ATTUALE()
   }

   Posiziona Blocco vet
   {
      @escluso = 0
      if( Fin_WP == 2 )    { @escluso = 1 }
      if( vetri_num > 0 )  { @escluso = 1 }

      @X = X - 2*RieX_Pan
      @Y = Y - 2*RieY_Pan
      @Z = Spe_PanVet
      if( Fin_WP == 1 ) { @Z = Spe_PanMet }

      @base_0.x = base_0.x + RieX_Pan
      @base_0.y = base_0.y + RieY_Pan
      @base_0.z = base_0.z + Z - @Z

      FIN_var = "C042"
      if( Fin_WP == 1 | VAR_Revisione >= 1 ) { FIN_var = "C028"  }
      GOSUB rivestimento

      idx_pannello = ATTUALE()
   }

   Posiziona VetroAnta_Arm20 vet1
   {
      vetro_num = 1
      wk_x_prec = 0
      GOSUB Posiziona_Vetro_WallPanel_368
   }

   Posiziona VetroAnta_Arm20 vet2
   {
      vetro_num = 2
      GOSUB Posiziona_Vetro_WallPanel_368
   }

   Posiziona VetroAnta_Arm20 vet3
   {
      vetro_num = 3
      GOSUB Posiziona_Vetro_WallPanel_368
   }

   //Simone 02/07/21
   Posiziona LavTrasformatoreLED_368 LavTra
   {
      @escluso = 1
      if( VAR_Revisione >= 1 ) { @escluso = 0 }
      GOSUB posa_lavorazione_trasformatore_368
   }

   Posiziona TrasformatoreLED_368 Tras
   {
      @escluso = 1
      if( VAR_Revisione >= 1 ) { @escluso = 0 }
      GOSUB posa_trasformatore_368
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @base_0.x = base_0.x + RieX_Pan + RieX_pan
      @base_0.y = alto_0.y - RieY_Pan - RieY_pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 2*RieX_Pan - 2*RieX_pan
      @Y = 10
      @Z = 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @base_0.x = base_0.x + RieX_Pan + RieX_pan
      @base_0.y = base_0.y + RieY_Pan + RieY_pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 2*RieX_Pan - 2*RieX_pan
      @Y = 10
      @Z = 10
   }
}

Elemento GlassMirror
{
   Descrizione = "Glass Mirror"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;StpWallPanel;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                    "Larghezza"    368 Menu ( DimWP368 ) Utente ( )
      Y                    "Altezza"      368 Menu ( DimWP368 ) Utente ( )
      Z                    "Profondità"   125 ShowAlways

      VediLimiti           "Vedi limiti scassi"   0 Boolean

      Tipologia_WP         "Tipologia WALL PANEL" 0

      //Simone 05/07/21
      VAR_Revisione        "Revisione"            1

      // ** GESTIONE ILLUMINAZIONE **
      PanLED_Tipologia     "" "WALL"

      LED_Posizionati      "" 1
      LED_Sopra            "" 0
      LED_Sotto            "" 0
      LED_Sx               "" 0
      LED_Dx               "" 0

      idx_LED_sopra        "" -1
      idx_LED_sotto        "" -1
      //idx_LED_sx           "" -1
      //idx_LED_dx           "" -1

      TLED_Attiva          ""  0 SaveAlways
      TLED_Tipologia       ""  1 SaveAlways
      TLED_Watt            ""  0
      LED_Watt             ""  0

      TLED_Lavorazione     ""  0 SaveAlways
      TLED_TipoLavorazione ""  0 SaveAlways

      FLAG_Moduli_368      ""  1

      idx_pannello         "" -1
      idx_pan              "" -1
      idx_cnear_up         "" -1
      idx_cnear_dw         "" -1

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

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

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

      FillerM2G            " " "" ShowAlways
      XGLASS               "Num. XGLASS" "" Utente ( )

      STP_Bollina          "" 1
      STP_Bollina_Cat      "" "C163;C164"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB AssModuli_368
      GOSUB SistCostr_WallPanel
      GOSUB AssRangeRid_WallPanel

      M4_GRUPPO__  = MSG(1016)
      if(ACTION()==0 & VAR_EXIST(idx_att,"copied__")!=1) { X_ori=X Y_ori=Y Z_ori=Z }

      if( $OnLoadOrder )
      {
         if( IS_VAR_FIXED(ATTUALE(),"VediLimiti")==1 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"VediLimiti")
            VediLimiti = 0
         }
      }

      STP_Bollina_Pnt = [ X/2, Y/2, Z+30]
   }

   PuntiNotevoli
   {
      Xr = X - 2*RieX_Pan
      Yr = Y - 2*RieY_Pan

      GOSUB punti
      if( LED_Posizionati == 0 ) { GOSUB DefPuntiLED_368 }

     #ifdef TEC
      vano_0_0    = [RieX_Pan, RieY_Pan, 0 ]
      vano_l_0    = Xr
      vano_p_0    = Spe_Pan + Spe_PanVet
     #endif

      //Luca 04/05/2020
      stp_base_0 = [RieX_Pan,RieY_Pan,0]        stp_alto_0 = [RieX_Pan,RieY_Pan+Yr,0]
      stp_base_1 = [RieX_Pan,RieY_Pan,Z]        stp_alto_1 = [RieX_Pan,RieY_Pan+Yr,Z]
      stp_base_2 = [RieX_Pan+Xr,RieY_Pan,Z]     stp_alto_2 = [RieX_Pan+Xr,RieY_Pan+Yr,Z]
      stp_base_3 = [RieX_Pan+Xr,RieY_Pan,0]     stp_alto_3 = [RieX_Pan+Xr,RieY_Pan+Yr,0]

      //Luca 30/03/2022 mantis 28674: Stampe fine ordine/commerciali: quota reali wallpanel
      TSTP_Pianta_base_0 = stp_base_0
      TSTP_Pianta_base_1 = stp_base_1
      TSTP_Pianta_base_2 = stp_base_2
      TSTP_Pianta_base_3 = stp_base_3

      TSTP_Prospetti_pnt_0 = stp_base_0
      TSTP_Prospetti_pnt_1 = stp_alto_0
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB GestioneLivelliOnWall_368
   }

   Controlli
   {
      GOSUB CtrlComune

      M4_VAR = "GEST_C163;GEST_C164;GEST_C165;GEST_C166"

      Scassa_Chi_Plus = TrovaIdx_Grafica(ATTUALE())
      Scassa_Chi_Plus_PanRetro = STR(VAR_VAL(idx_pan, "idx_grafica"))

      GOSUB CtrlScassi_WallPanel

      if( LED_Posizionati == 0 )
      {
         GOSUB CtrlPresenza_LED_368

         GOSUB TLED_CalcolaTrasformatore_368
      }

      //Simone 06/07/2022
      GOSUB Set_Posizione_Led_GlassMirror
      GOSUB CalcolaTrasformatore_GlassMirror
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xr
      GEST_Y = Yr

      GOSUB Set_Gest_C008_GlassMirror
      GOSUB Set_Gest_C009_WallPanel
      GOSUB Set_Gest_C160_GlassMirror
      GOSUB Set_Gest_C165_GlassMirror
      GOSUB Set_Gest_C169_Trasf_GlassMirror

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="POST" )
      {
         GOSUB Set_Posizione_Led_GlassMirror
         GOSUB CalcolaTrasformatore_GlassMirror
      }
   }

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

      if( $ChangedVar == "GEST_C165"
        | $ChangedVar == "GEST_C166" )
      {
         GOSUB Set_Posizione_Led_GlassMirror
         GOSUB CalcolaTrasformatore_GlassMirror
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," //OnChangedVar ",NOME(ATTUALE())))
      }
   }

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

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

   Posiziona PannelloRetro_WallPanel_368 pan
   {
      @X = X - 2*RieX_Pan - 2*RieX_pan
      @Y = Y - 2*RieY_Pan - 2*RieY_pan
      @Z = Spe_Pan

      @base_0.x = base_0.x + RieX_Pan + RieX_pan
      @base_0.y = base_0.y + RieY_Pan + RieY_pan
      @base_0.z = base_0.z

      @LED_Posizionati = LED_Posizionati

      idx_pan = ATTUALE()
      LED_Watt = @LED_Watt
   }

   Posiziona FustoModuloGlass_368 vtr
   {
      @X = X - 2*RieX_Pan
      @Y = Y - 2*RieY_Pan
      @Z = 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 + Z - @Z

      @FLAG_Madia368 = 1
      @ConRipiano = 0
      @VAR_ConSchiena = 1

      idx_pannello = ATTUALE()
   }

   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   Posiziona TrasformatoreLED_368 Tras
   {
      GOSUB posa_trasformatore_368
   }

   Posiziona _cont_per_near nup
   {
      idx_cnear_up = ATTUALE()

      @base_0.x = base_0.x + RieX_Pan + RieX_pan + 20
      @base_0.y = alto_0.y - RieY_Pan - RieY_pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 2*RieX_Pan - 2*RieX_pan - 40
      @Y = 10
      @Z = 10
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

      @base_0.x = base_0.x + RieX_Pan + RieX_pan + 20
      @base_0.y = base_0.y + RieY_Pan + RieY_pan - 5
      @base_0.z = base_0.z + 5
      @X = X - 2*RieX_Pan - 2*RieX_pan - 40
      @Y = 10
      @Z = 10
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear_sx = ATTUALE()

      @base_0.x = base_0.x + RieX_Pan + RieX_pan - 5
      @base_0.y = base_0.y + RieY_Pan + RieY_pan + 20
      @base_0.z = base_0.z + 5
      @X = 10
      @Y = Y - 2*RieX_Pan - 2*RieX_pan - 40
      @Z = 10
   }

   Posiziona _cont_per_near ndx
   {
      idx_cnear_dx = ATTUALE()

      @base_0.x = base_0.x + X - RieX_pan - 5
      @base_0.y = base_0.y + RieY_Pan + RieY_pan + 20
      @base_0.z = base_0.z + 5
      @X = 10
      @Y = Y - 2*RieX_Pan - 2*RieX_pan - 40
      @Z = 10
   }
}

Elemento ProfiloWallPanel_368
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 8
      Y "" 1
      Z "" 8

      Tipologia_WP "" 0 Implicit

      //solo per quelli centrali
      CtrlCollisione "" 0


      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB SistCostr_WallPanel

      X = Spe_Prof
      Z = Spe_Prof

      if( Tipologia_WP==1 ) { X = Lar_FHPL }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   Posiziona ContCtrlScassi_WallPanel cont
   {
      @escluso = 1 - CtrlCollisione
      @base_0.x = base_0.x - 5
      @base_0.y = base_0.y
      @base_0.z = base_1.z
      @X = X + 10
      @Y = Y
   }
}

Elemento AttaccagliaWallPanel_368
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 100
      Y "" 125
      Z "" 5

      Attaccaglia_inferiore "" 0

      Verso "" -1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      GOSUB SistCostr_WallPanel

      X = Lar_AttBarra
      Y = Atl_Att
      Z = 5

   }

   PuntiNotevoli
   {
      GOSUB punti

      stp_base_0 = [0,Y-85,0]
      stp_base_1 = [0,Y-85,Z]
      stp_base_2 = [75,Y-85,Z]
      stp_base_3 = [75,Y-85,0]

      if( Verso>0 )
      {
         stp_base_0.x = X - 75
         stp_base_1.x = X - 75
         stp_base_2.x = X
         stp_base_3.x = X
      }

      stp_alto_0 = stp_base_0    stp_alto_0.y = Y
      stp_alto_1 = stp_base_1    stp_alto_1.y = Y
      stp_alto_2 = stp_base_2    stp_alto_2.y = Y
      stp_alto_3 = stp_base_3    stp_alto_3.y = Y

   }

   Controlli
   {
      GOSUB CtrlComune
   }

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

   Posiziona Blocco bl1
   {
      @X = 75
      @Y = 85
      @Z = 3
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z + 2
      if( Verso>0 ) { @base_0.x = base_0.x + X - @X }
   }

   Posiziona Blocco bl2
   {
      GOSUB posa_blocco
      @Y = 25
   }

   Posiziona Blocco bl3
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + 25
      @X = 25
      @Y = Y - 25
      @Z = 2

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

   Posiziona ContCtrlScassi_WallPanel cont
   {
      @base_0.x = base_0.x - 5
      @base_0.y = base_0.y - 5
      @base_0.z = base_1.z
      @X = X + 10
      @Y = Y + 10
      if( Attaccaglia_inferiore==1 ) { @Y = Y + 20 }
   }
}

Elemento BloccoAggancioWallPanel_368
{
   Descrizione = "Fondo generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

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

      Tipologia_WP "" 0 Implicit

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_WallPanel

      GOSUB ConfiguraAgganci_WallPanel

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona ProfiloWallPanel_368 prf1
   {
      @escluso = 1 - Prof_1
      @base_0.x = base_0.x + Prof_posx_1
      @base_0.y = base_0.y + RieY_ProfInf
      @base_0.z = base_0.z
      @Y = Y - RieY_ProfInf - RieY_ProfSup
   }

   Posiziona ProfiloWallPanel_368 prf2
   {
      @escluso = 1 - Prof_2
      @base_0.x = base_0.x + Prof_posx_2
      @base_0.y = base_0.y + RieY_ProfInf
      @base_0.z = base_0.z
      @Y = Y - RieY_ProfInf - RieY_ProfSup
   }

   Posiziona ProfiloWallPanel_368 prf3
   {
      @escluso = 1 - Prof_3
      @base_0.x = base_0.x + Prof_posx_3
      @base_0.y = base_0.y + RieY_ProfInf
      @base_0.z = base_0.z
      @Y = Y - RieY_ProfInf - RieY_ProfSup
      @CtrlCollisione = 1
   }

   Posiziona ProfiloWallPanel_368 prf4
   {
      @escluso = 1 - Prof_4
      @base_0.x = base_0.x + Prof_posx_4
      @base_0.y = base_0.y + RieY_ProfInf
      @base_0.z = base_0.z
      @Y = Y - RieY_ProfInf - RieY_ProfSup
      @CtrlCollisione = 1
   }

   Posiziona ProfiloWallPanel_368 prf5
   {
      @escluso = 1 - Prof_5
      @base_0.x = base_0.x + Prof_posx_5
      @base_0.y = base_0.y + RieY_ProfInf
      @base_0.z = base_0.z
      @Y = Y - RieY_ProfInf - RieY_ProfSup
      @CtrlCollisione = 1
   }

   Posiziona AttaccagliaWallPanel_368 atts1
   {
      @escluso = 1 - Attac_1
      @base_0.x = base_0.x + Attac_posx_1
      @base_0.y = base_0.y + Y - RieY_AttacSup - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
   }

   Posiziona AttaccagliaWallPanel_368 atts2
   {
      @escluso = 1 - Attac_2
      @base_0.x = base_0.x + Attac_posx_2
      @base_0.y = base_0.y + Y - RieY_AttacSup - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
      @Verso = 1
   }

   Posiziona AttaccagliaWallPanel_368 atts3
   {
      @escluso = 1 - Attac_3
      @base_0.x = base_0.x + Attac_posx_3
      @base_0.y = base_0.y + Y - RieY_AttacSup - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
      @Verso = 1
   }

   Posiziona AttaccagliaWallPanel_368 atti1
   {
      @escluso = 1
      if( Attac_1==1 & Attac_inf==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + Attac_posx_1
      @base_0.y = base_0.y + Y - Attac_inf_posy - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
      @Attaccaglia_inferiore = 1
   }

   Posiziona AttaccagliaWallPanel_368 atti2
   {
      @escluso = 1
      if( Attac_2==1 & Attac_inf==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + Attac_posx_2
      @base_0.y = base_0.y + Y - Attac_inf_posy - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
      @Attaccaglia_inferiore = 1
      @Verso = 1
   }

   Posiziona AttaccagliaWallPanel_368 atti3
   {
      @escluso = 1
      if( Attac_3==1 & Attac_inf==1 ) { @escluso = 0 }
      @base_0.x = base_0.x + Attac_posx_3
      @base_0.y = base_0.y + Y - Attac_inf_posy - Atl_Att
      @base_0.z = base_0.z + Spe_Prof - @Z
      @Attaccaglia_inferiore = 1
      @Verso = 1
   }

   Posiziona ContCtrlScassi_WallPanel cont_sx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_1.z
      @X = Scs_LimLat
      @Y = Y
   }

   Posiziona ContCtrlScassi_WallPanel cont_dx
   {
      @base_0.x = base_0.x + X - Scs_LimLat
      @base_0.y = base_0.y
      @base_0.z = base_1.z
      @X = Scs_LimLat
      @Y = Y
   }
   Posiziona ContCtrlScassi_WallPanel cont_in
   {
      @base_0.x = base_0.x + Scs_LimLat
      @base_0.y = base_0.y
      @base_0.z = base_1.z
      @X = X - 2*Scs_LimLat
      @Y = Scs_LimLat
   }
   Posiziona ContCtrlScassi_WallPanel cont_su
   {
      @base_0.x = base_0.x + Scs_LimLat
      @base_0.y = base_0.y + Y - Scs_LimLat
      @base_0.z = base_1.z
      @X = X - 2*Scs_LimLat
      @Y = Scs_LimLat
   }
}

Elemento ProfiloSuperioreWallPanel_368
{
   Descrizione = "Profilo Superiore"
   Code        = M368
   Gruppo      = "M368"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile WallPanel_368
   Altimetro Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza" 100 ShowAlways
      Y "Altezza"   8   ShowAlways
      Z "Spessore"  8   ShowAlways

      COD_EREDITA      ""      "PRE;POST"
      CMP2_AZIONI      ""      "A"

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

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_WallPanel
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type==8 )
      {
         COMPONENTI2("wk_comp",$query_p1,"ProfiloSuperioreWallPanel_368")
         if( wk_comp>0 )  { $QueryResult__ = 0 }

         if( VAR_VAL($query_p1, "VAR_Revisione") > 0 )   { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")
      liv2add = 1
      liv2add[1] = VAR_VAL(idx_ref,"Yr")

      COMPONENTI2("wk_comp",idx_ref,"ProfiloSuperioreWallPanel_368")
      if( wk_comp>0 ) { liv2add[1] = 9999 }

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

   Attrezza
   {
      X = $larghezza - 2*RieX_ProfSupChiusura
      base_0.x = $vano_0.x + RieX_ProfSupChiusura
      base_0.y = $vano_0.y + @Yr - RieY_ProfSupChiusura - Y
      base_0.z = $vano_0.z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento ContCtrlScassi_WallPanel
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      c_rivestimento "" [255,0,0]
      f_rivestimento "" "0.9"


      VediLimiti "" 0 Implicit
   }

   Assegnazioni
   {
      VAR_IMPLICITLY_INHERITS(ATTUALE(), 0)
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
      base_so = base_0
      alto_ne = alto_2
   }

   Procedura Ric_ContCtrlScassi_WallPanel
   {
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())))
   }

   Posiziona Blocco vedi
   {
      @escluso = 1 - VediLimiti

      GOSUB posa_blocco
      @f_rivestimento = f_rivestimento
      @c_rivestimento = c_rivestimento
   }
}

Elemento Scasso_WallPanel
{
   Descrizione = "Scasso Eldom Top"
   Code        = CUB
   Gruppo      = "ELD"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile WallPanel_368 GlassMirror
   Alias       CamIncidente

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

      X "Larghezza"           100 //Utente ( )
      Y "Altezza"             100 //Utente ( )
      Z "Profondità"           30

      VAR_Modifica     ">> MODIFICA DIMENSIONI/POSIZIONE"  0 Boolean
      //VAR_Modifica "Modifica dimensioni/posizione"  0 Boolean

      //0 rettangolare
      //1 cilindro
      FormaScasso   "Forma Scasso"  0

      Diametro      "Diametro"               50 //Utente ( 5-400 )

      OffsetX       "Offset X (basso sx)"    0 //Utente ( )
      OffsetY       "Offset Y (basso sx)"    0 //Utente ( )
      Raggio        "Raggio"                 5 //Utente ( 0-20 )

      Offset_CilX   "Offset X (basso sx)"    0 //Utente ( )
      Offset_CilY   "Offset Y (basso sx)"    0 //Utente ( )

      //forma 3 cilindri
      Diam1         "Diametro Superiore" 22
      Diam2         "Diametro Inferiore" 35

      InterasseX    "" 94
      InterasseY    "" 50

      VediIng        "Vedi Ingombro"         0 Boolean
      RigeneraScasso "Rigenera Scasso"       0 Boolean

      VediIngScasso  "" 0

      idx_cont_coll  "" -1

      Scassa_Chi_Plus          "" ""
      Scassa_Chi_Plus_SottoTop "" ""
      Scassa_Chi_Plus_PanRetro "" ""

      //Luca 17/04/2020 blocco spostamento relativo
      M4_NO_OFFS "" 1

      CMP2_AZIONI "" "A"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Luca 07/04/2022
      VAR_Revisione_WP = VAR_VAL(PADRE(ATTUALE(),1),"VAR_Revisione")

      FLAG_RADICE = $NO_RAD

      //M4_MIS = "X;Y;Diametro;OffsetX;OffsetY;Raggio;Offset_CilX;Offset_CilY;VediIng;RigeneraScasso"
      M4_MIS = "VAR_Modifica"

      GOSUB Stato_78

      if( FormaScasso==0 )
      {
         //HIDE_ON_EDIT2(ATTUALE(),"X",0)
         //HIDE_ON_EDIT2(ATTUALE(),"Y",0)
         //HIDE_ON_EDIT2(ATTUALE(),"OffsetX",0)
         //HIDE_ON_EDIT2(ATTUALE(),"OffsetY",0)
         //HIDE_ON_EDIT2(ATTUALE(),"Raggio",0)
         //
         //HIDE_ON_EDIT2(ATTUALE(),"Diametro",1)
         //HIDE_ON_EDIT2(ATTUALE(),"Offset_CilX",1)
         //HIDE_ON_EDIT2(ATTUALE(),"Offset_CilY",1)

         DescEdit__  = MSG(1119)
      }

      if( FormaScasso==1 )
      {
         //HIDE_ON_EDIT2(ATTUALE(),"X",1)
         //HIDE_ON_EDIT2(ATTUALE(),"Y",1)
         //HIDE_ON_EDIT2(ATTUALE(),"OffsetX",1)
         //HIDE_ON_EDIT2(ATTUALE(),"OffsetY",1)
         //HIDE_ON_EDIT2(ATTUALE(),"Raggio",1)
         //
         //HIDE_ON_EDIT2(ATTUALE(),"Diametro",0)
         //HIDE_ON_EDIT2(ATTUALE(),"Offset_CilX",0)
         //HIDE_ON_EDIT2(ATTUALE(),"Offset_CilY",0)

         DescEdit__  = MSG(1120)
      }

      if( FormaScasso==2 )
      {
         DescEdit__  = MSG(1121)
      }

      if( VAR_VAL(PADRE(ATTUALE(),1),"Fin_WP")==1 ) { Raggio = 0 }

      //Luca 17/04/2020
      //se viene attivata VediLimiti da variabile e non da dialog, non faccio vedere i limiti dello scasso
      if( VAR_VAL(PADRE(ATTUALE(),1),"VediLimiti")==1
        & VAR_VAL(-1,"wk_DLG_Scassi_Open")==0  ) {  VediLimiti = 0 }

      if( FormaScasso==2 )
      {
         X = InterasseX + Diam1/2 + Diam1/2
         Y = InterasseY + Diam1/2 + Diam2/2
      }
   }

   PuntiNotevoli
   {
      if( FormaScasso==1 )
      {
         X = Diametro
         Y = Diametro
      }

      GOSUB punti

      //Luca 26/10/2019
      //utilizzo in stampa
      pnt_scs_centro = [X/2,Y,Z/2]
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      if( IS_VAR_FIXED(ATTUALE(),"OffsetX")==0 ) { OffsetX = @X/2 - X/2 }
      if( IS_VAR_FIXED(ATTUALE(),"OffsetY")==0 ) { OffsetY = @Y/2 - Y/2 }

      base_0.x = $vano_0.x + OffsetX
      base_0.y = $vano_0.y + OffsetY
      base_0.z = $vano_0.z + $profondita/2 - Z/2

      if( FormaScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Offset_CilX")==0 ) { Offset_CilX = @X/2 }
         if( IS_VAR_FIXED(ATTUALE(),"Offset_CilY")==0 ) { Offset_CilY = 100 }

         base_0.x = $vano_0.x +  Offset_CilX - X/2
         base_0.y = $vano_0.y +  Offset_CilY - Y/2
         //base_0.z = $vano_0.z
      }

      if( FormaScasso==2 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"OffsetX")==0 ) { OffsetX = @X/2 }
         if( IS_VAR_FIXED(ATTUALE(),"OffsetY")==0 ) { OffsetY = 100 }

         base_0.x = $vano_0.x +  OffsetX - X/2
         base_0.y = $vano_0.y +  OffsetY - Diam2/2
         //base_0.z = $vano_0.z
      }

      if( ACTION()==2 & $OnLoadOrder==0 )
      {
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia "))
         //COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR()," // Scassa_e_Taglia "))
         $wk_inserimento = 1
         COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(ATTUALE())))
      }

   }

   Procedura CtrlPosizionaScassi_WallPanel
   {
      GOSUB CtrlPosizionaScassi_WallPanel
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ModificaPosizioneScassi_WallPanel

      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         //Scassa_Chi_Plus = STRCAT(STR(VAR_VAL(PADRE(ATTUALE(),1),"idx_pannello")))
         Scassa_Chi_Plus = VAR_VAL_STR(PADRE(ATTUALE(), 1), "Scassa_Chi_Plus")

         if( VAR_Revisione_WP >=0  )
         {
            Scassa_Chi_Plus_PanRetro = VAR_VAL_STR(PADRE(ATTUALE(), 1), "Scassa_Chi_Plus_PanRetro")
         }

         if( VAR_EXIST(ATTUALE(),"X_prec")==0 )      { X_prec = X }
         if( VAR_EXIST(ATTUALE(),"Y_prec")==0 )      { Y_prec = Y }
         if( VAR_EXIST(ATTUALE(),"OffX_prec")==0 )   { OffX_prec = OffsetX }
         if( VAR_EXIST(ATTUALE(),"OffY_prec")==0 )   { OffY_prec = OffsetY }
         if( VAR_EXIST(ATTUALE(),"Raggio_prec")==0 ) { Raggio_prec = Raggio }

         if( VAR_EXIST(ATTUALE(),"Diam_prec")==0 )   { Diam_prec   = Diametro }
         if( VAR_EXIST(ATTUALE(),"OffCX_prec")==0 )  { OffCX_prec  = Offset_CilX }
         if( VAR_EXIST(ATTUALE(),"OffCY_prec")==0 )  { OffCY_prec  = Offset_CilY }

         if(  X_prec!=X | OffX_prec!=OffsetX
            | Y_prec!=Y | OffY_prec!=OffsetY
            | Raggio!=Raggio_prec
            | Diam_prec!=Diametro
            | OffCX_prec!=Offset_CilX
            | OffCY_prec!=Offset_CilY  )
         {
            X_prec    = X
            Y_prec    = Y
            OffX_prec = OffsetX
            OffY_prec = OffsetY
            Diam_prec  = Diametro
            OffCX_prec = Offset_CilX
            OffCY_prec = Offset_CilY
            Raggio_prec = Raggio

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

            if( VAR_VAL(ATTUALE(),"ControlloCollisioni")==1 ) { ControlloCollisioni = 0 }
         }
      }

      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("PROCEDURA M4_Scassi // Scassa_e_Taglia ")
         COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia "))
         COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(ATTUALE())))

         if( VAR_VAL(ATTUALE(),"ControlloCollisioni")==1 ) { ControlloCollisioni = 0 }
      }

      //Luca 17/04/2020
      if( VAR_VAL(ATTUALE(),"ControlloCollisioni")==1 ) { COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(ATTUALE()))) }
   }

   Procedura PostAction2
   {
      if( $OnLoadOrder )  { EXITSUB() }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()),"  //PostAction2 "))
   }

   Procedura cancella
   {
      if( VAR_EXIST(-1,"StartingDel__")==0 ) { EXITSUB() }
      if( $StartingDel__!=ATTUALE() )        { EXITSUB() }

      idx_acis = ATOI(Scassa_Chi_Plus)
      if ( HAS_ALIAS(idx_acis,"M4_SCASSA") )
      {
         COMANDO2(STRCAT("M4_ELIMINAACIS ",STR(idx_acis),"   //elimina scasso"))
         elimina_acis = 1

         COMANDO("RIGENERA //su elimina scasso")
         COMANDO("ESEGUI Scassa_e_Taglia //su elimina scasso")
      }

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1)), " //da cancella di ",NOME(ATTUALE())))
   }

   //Posiziona Blocco_Invisibile inv
   //{
   //   GOSUB posa_blocco
   //   @Scassa_Chi_Plus = Scassa_Chi_Plus
   //}

   //attivo quando dlg aperta, per vedere la preview
   Posiziona Blocco prev
   {
      @escluso = 1
      //wk_var_ctrl_dlg = STRCAT("wk_DLG_open_",STR(idx_att))
      //if( VAR_VAL(-1,wk_var_ctrl_dlg) == 1
      //  | VediIngScasso ) { @escluso = 0 }
      if( VediIngScasso ) { @escluso = 0 }

      GOSUB posa_blocco
      @c_rivestimento = $c_verde
   }

   //{ RETTANGOLO
   Posiziona Blocco vedi
   {
      @escluso = 1
      if( VediIng==1 & FormaScasso==0 & Raggio==0 ) { @escluso = 0 }

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

   Posiziona Blocco_Scassa scs
   {
      @escluso = 1
      if( FormaScasso==0 & Raggio==0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @Stp_Quota_WP = 1
   }

   //Luca 07/04/2022
   //scasso sul pannello retro deve essere maggiorato di 2 mm per parte
   Posiziona Blocco_Scassa scs_pr
   {
      @escluso = 1
      if( FormaScasso==0 & Raggio==0 & VAR_Revisione_WP >=1 ) { @escluso = 0 }

      MaggScs_PanRetro=2
      GOSUB posa_blocco

      @X =  X + 2*MaggScs_PanRetro
      @Y =  Y + 2*MaggScs_PanRetro

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

      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro

      @Stp_Quota_WP = 2
   }
   //} RETTANGOLO

   Posiziona ContCtrlScassi_WallPanel cont
   {
      //@escluso = 1
      ////if( VediIng==1 & FormaScasso==0 ) { @escluso = 0 }
      //if( VediIng==1 ) { @escluso = 0 }

      dist = 40

      if( VAR_Revisione_WP >= 1 ) { dist = 80 }

      @base_0.x = base_0.x - dist/2
      @base_0.y = base_0.y - dist/2
      @base_0.z = base_0.z + 8
      @X = X + dist
      @Y = Y + dist

      if( FormaScasso==1 )
      {
         @X = Diametro + dist
         @Y = Diametro + dist
      }

      idx_cont_coll = ATTUALE()
   }

   //Luca 20/12/2019 per selezione
   Posiziona ContenitoreInvisibile sel
   {
      GOSUB posa_blocco
   }

   //{ RETTANGOLO CON RAGGIO
   Posiziona BloccoSmussatoZ vedis
   {
      @escluso = 1
      if( VediIng==1 & FormaScasso==0 & Raggio!=0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @R0 = Raggio
      @R1 = Raggio
      @R2 = Raggio
      @R3 = Raggio

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

   }

   Posiziona BloccoSmussatoZ_Scassa scs2
   {
      @escluso = 1
      if( FormaScasso==0 & Raggio!=0 ) { @escluso = 0 }

      @Raggio = Raggio

      GOSUB posa_blocco

      @pnt_scs_centro = pnt_scs_centro

      @Scassa_Chi_Plus = Scassa_Chi_Plus
      @Stp_Quota_WP = 1
   }

   //Luca 07/04/2022
   //scasso sul pannello retro deve essere maggiorato di 2 mm per parte
   Posiziona BloccoSmussatoZ_Scassa scs2a
   {
      @escluso = 1
      if( FormaScasso==0 & Raggio!=0 & VAR_Revisione_WP >=1 ) { @escluso = 0 }

      @Raggio = Raggio + MaggScs_PanRetro

      GOSUB posa_blocco

      @X =  X + 2*MaggScs_PanRetro
      @Y =  Y + 2*MaggScs_PanRetro

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

      @pnt_scs_centro = pnt_scs_centro

      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro
      @Stp_Quota_WP = 2
   }
   //} RETTANGOLO CON RAGGIO

   //{ CILINDRO
   Posiziona CilindroZ Cil
   {
      @escluso = 1
      if( VediIng & FormaScasso==1 ) { @escluso = 0 }

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

   Posiziona CilindroZ_Scassa scs_cil
   {
      @escluso = 1
      if( FormaScasso==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Diametro
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @Stp_Quota_WP = 1
   }

   //Luca 07/04/2022
   //scasso sul pannello retro deve essere maggiorato di 2 mm per parte
   Posiziona CilindroZ_Scassa scs_ci2
   {
      @escluso = 1
      if( FormaScasso==1 & VAR_Revisione_WP >= 1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Diametro + 2*MaggScs_PanRetro
      @Y = @X
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y/2 - @Y/2

      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro

      @Stp_Quota_WP = 2
   }
   //} CILINDRO

   //{ 3 CILINDRI
   Posiziona Blocco vedi3c
   {
      @escluso = 1
      if( VediIng==1 & FormaScasso==2 ) { @escluso = 0 }

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

   //Posiziona CilindroZ Cil1
   Posiziona CilindroZ_Scassa scs_c1
   {
      @escluso = 1
      if( FormaScasso==2 ) { @escluso = 0 }

      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2  - Diam2/2
      @Z = Z + 10
      @X = Diam2
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @Stp_Quota_WP = 1
   }

   Posiziona CilindroZ_Scassa c1_pr
   {
      @escluso = 1
      if( FormaScasso==2 & VAR_Revisione_WP >= 1) { @escluso = 0 }

      GOSUB posa_blocco

      @X = Diam2 + 2*MaggScs_PanRetro
      @Y = @X
      @base_0.x = base_0.x + X/2  - Diam2/2 - MaggScs_PanRetro
      @base_0.y = base_0.y - MaggScs_PanRetro

      @Z = Z + 10
      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro

      @Stp_Quota_WP = 2
   }

   //Posiziona CilindroZ Cil2a
   Posiziona CilindroZ_Scassa scs_c2a
   {
      @escluso = 1
      if( FormaScasso==2 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Diam1
      @Z = Z + 10
      @base_0.x = base_0.x + X/2 - InterasseX/2 - Diam1/2
      @base_0.y = base_0.y + Diam2/2 + InterasseY - Diam1/2
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @Stp_Quota_WP = 1
   }

   Posiziona CilindroZ_Scassa c2_pr
   {
      @escluso = 1
      if( FormaScasso==2 & VAR_Revisione_WP >= 1) { @escluso = 0 }

      GOSUB posa_blocco

      @X = Diam1 + 2*MaggScs_PanRetro
      @Y = @X
      @base_0.x = base_0.x + X/2 - InterasseX/2 - Diam1/2   - MaggScs_PanRetro
      @base_0.y = base_0.y + Diam2/2 + InterasseY - Diam1/2 - MaggScs_PanRetro

      @Z = Z + 10
      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro

      @Stp_Quota_WP = 2
   }

   Posiziona CilindroZ_Scassa scs_c2b
   {
      @escluso = 1
      if( FormaScasso==2 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Diam1
      @Z = Z + 10
      @base_0.x = base_0.x + X/2 + InterasseX/2 - Diam1/2
      @base_0.y = base_0.y + Diam2/2 + InterasseY - Diam1/2
      @Scassa_Chi_Plus = Scassa_Chi_Plus

      @Stp_Quota_WP = 1
   }

   Posiziona CilindroZ_Scassa c3_pr
   {
      @escluso = 1
      if( FormaScasso==2 & VAR_Revisione_WP >= 1) { @escluso = 0 }

      GOSUB posa_blocco

      @X = Diam1 + 2*MaggScs_PanRetro
      @Y = @X
      @base_0.x = base_0.x + X/2 + InterasseX/2 - Diam1/2  - MaggScs_PanRetro
      @base_0.y = base_0.y + Diam2/2 + InterasseY - Diam1/2 - MaggScs_PanRetro

      @Z = Z + 10
      @Scassa_Chi_Plus = Scassa_Chi_Plus_PanRetro

      @Stp_Quota_WP = 2
   }
   //} 3 CILINDRI
}

Elemento 368_Mirror
{
   Descrizione = "Specchio"
   Code        = COD
   Gruppo      = "SP"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;StpWallPanel;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                      "Larghezza"            1012                ShowAlways
      Y                      "Altezza"              1012                ShowAlways
      Z                      "Profondita'"          23                  ShowAlways

     #ifdef TEC
      n_vtr                  "Numero fasce vetro"   2                   Utente ( )
      orie_vtr               "Orientamento"         "V"                 Utente ( )
     #endif
     #ifndef TEC
      n_vtr                  "Numero fasce vetro"   2
      orie_vtr               "Orientamento"         "V"
     #endif

      dim_vtr1               "Fascia vetro 1"       181
      dim_vtr2               "Fascia vetro 2"       0

      idx_pan                ""                    -1

      //per compatibilità procedure
      VAR_Revisione          ""                     1

      LED_Posizionati        ""                     1
      LED_Sopra              ""                     0
      LED_Sotto              ""                     0
      LED_Sx                 ""                     0
      LED_Dx                 ""                     0
      TLED_Attiva            ""                     0                   SaveAlways
      TLED_Tipologia         ""                     1                   SaveAlways
      TLED_Watt              ""                     0
      LED_Watt               ""                     0

      TLED_Lavorazione       ""                     0                   SaveAlways
      TLED_TipoLavorazione   ""                     0                   SaveAlways

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

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

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

      FillerM2G              " "                    ""                  ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Vet     = 4
      Spe_Pan     = 19
      //per misure nominali
      RieX_Pan    = 1.5
      RieY_Pan    = 1.5
      //rientro pannello
      RieX_pan    = 13.5
      RieY_pan    = 13.5

      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

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")

         //Utilizzo le misure nominali
         CR_X_min = CR_X_min + 2*RieX_Pan     CR_X_max = CR_X_max + 2*RieX_Pan
         CR_Y_min = CR_Y_min + 2*RieY_Pan     CR_Y_max = CR_Y_max + 2*RieY_Pan

         VAR_SET_MENU(ATTUALE(),"X",STRCAT("(",STR(CR_X_min),"-",STR(CR_X_max),")"))
         VAR_SET_MENU(ATTUALE(),"Y",STRCAT("(",STR(CR_Y_min),"-",STR(CR_Y_max),")"))


         if( VAR_VAL( ATTUALE(), "FLAG_Speciale") > 0 ) { EXITSUB() }

         if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 & $CNP__==0 )
         {
            //controllo dimensioni
            if( VAR_EXIST(ATTUALE(),"CR_X_min")>0 )
            {
               if( X<CR_X_min | X>CR_X_max ) { CHIEDI(ATTUALE(),"X") }
               if( Y<CR_Y_min | Y>CR_Y_max ) { CHIEDI(ATTUALE(),"Y") }
            }
         }
      }

      Xr = X - 2*RieX_Pan
      Yr = Y - 2*RieY_Pan

      if( $modalita == "TEC" )
      {
         VAR_SET_MODE(ATTUALE(),"dim_vtr1",$MODE_MISURE + $MODE_USER)
         VAR_SET_MENU(ATTUALE(),"dim_vtr1","Fascia368_Mirror")
         VAR_SET_MODE(ATTUALE(),"dim_vtr2",$MODE_USER)
      }

      if( $ATTIVA_DLL == 0 )
      {
         VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE + $MODE_USER)
         VAR_SET_MODE(ATTUALE(),"Y",$MODE_MISURE + $MODE_USER)
         VAR_SET_MENU(ATTUALE(),"X","Lar368_Mirror")
         VAR_SET_MENU(ATTUALE(),"Y","Alt368_Mirror")
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      stp_base_0 = [RieX_Pan,RieY_Pan,0]        stp_alto_0 = [RieX_Pan,RieY_Pan+Yr,0]
      stp_base_1 = [RieX_Pan,RieY_Pan,Z]        stp_alto_1 = [RieX_Pan,RieY_Pan+Yr,Z]
      stp_base_2 = [RieX_Pan+Xr,RieY_Pan,Z]     stp_alto_2 = [RieX_Pan+Xr,RieY_Pan+Yr,Z]
      stp_base_3 = [RieX_Pan+Xr,RieY_Pan,0]     stp_alto_3 = [RieX_Pan+Xr,RieY_Pan+Yr,0]

      //quota reali wallpanel
      TSTP_Pianta_base_0 = stp_base_0
      TSTP_Pianta_base_1 = stp_base_1
      TSTP_Pianta_base_2 = stp_base_2
      TSTP_Pianta_base_3 = stp_base_3

      TSTP_Prospetti_pnt_0 = stp_base_0
      TSTP_Prospetti_pnt_1 = stp_alto_0
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      M4_VAR = "GEST_C002;GEST_C042;GEST_C165;GEST_C166;GEST_C19*"

      GOSUB Set_Posizione_Led_GlassMirror
      GOSUB CalcolaTrasformatore_GlassMirror
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="POST" )
      {
         GOSUB Set_Posizione_Led_GlassMirror
         GOSUB CalcolaTrasformatore_GlassMirror
      }
   }

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

      if( $ChangedVar == "GEST_C165"
        | $ChangedVar == "GEST_C166")
      {
         GOSUB Set_Posizione_Led_GlassMirror
         GOSUB CalcolaTrasformatore_GlassMirror
         COMANDO( STRCAT( "RICALCOLA_UNA ", STR(ATTUALE()), " //OnChangedVar ", NOME(ATTUALE())))
      }
   }

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

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

   Posiziona PannelloRetro_WallPanel_368 pan
   {
      @X = X - 2*RieX_Pan - 2*RieX_pan
      @Y = Y - 2*RieY_Pan - 2*RieY_pan
      @Z = Spe_Pan

      @base_0.x = base_0.x + RieX_Pan + RieX_pan
      @base_0.y = base_0.y + RieY_Pan + RieY_pan
      @base_0.z = base_0.z

      @LED_Posizionati = LED_Posizionati

      idx_pan = ATTUALE()
      LED_Watt = @LED_Watt
   }

   Posiziona LavTrasformatoreLED_368 LavTra
   {
      GOSUB posa_lavorazione_trasformatore_368
   }

   Posiziona TrasformatoreLED_368 Tras
   {
      GOSUB posa_trasformatore_368
   }

   Posiziona Vetro_Saponetta_Verniciato vtr1
   {
      @vetro_num = 1
      GOSUB Posiziona_Vetro_368_Mirror
   }

   Posiziona Vetro_Saponetta_Verniciato vtr2
   {
      @vetro_num = 2
      GOSUB Posiziona_Vetro_368_Mirror
   }

   Posiziona Vetro_Saponetta_Verniciato vtr3
   {
      @vetro_num = 3
      GOSUB Posiziona_Vetro_368_Mirror
   }
}
//} WALL PANEL

Elemento PushPull_368
{
   Descrizione = "Push Pull"
   Code        = CUB
   Gruppo      = "ACC"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X "Larghezza"           100
      Y "Altezza"             100
      Z "Profondità"          100

      // 0 - ESTERNO
      // 1 - INTERNO
      PP_Tipologia  "" 0
      // FIASX
      // FIADX
      // COP
      // FONDO
      PP_Agganciato "" "FND"

      azione_locked "" 1

      M4_NO_OFFS "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      X = 12
      Y = 12
      Z = 65
      RieZ = 49.5
      FileSat = STRCAT($path_sat,"PushIncasso.sat")

      //IL SAT E' POSIZIONATO DI DEFUALT SUL FONDO
      if( PP_Tipologia == 0 )
      {
         X = 12
         Y = 14.5

         if( IS_MATCH(PP_Agganciato,"FIA*") )
         {
            X = 14.5
            Y = 12
         }
         Z = 85
         RieZ = 82
         FileSat = STRCAT($path_sat,"PushConBasetta.sat")
      }

      #ifndef TEC
         HIDE = 1
      #endif
      #ifdef TEC
         HIDE = 0
         DescEdit__ = "PUSH PULL"
      #endif
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat
   {
      @escluso = 1
      if( FileSat != "" )  { @escluso = 0 }

      GOSUB posa_blocco

      if( PP_Tipologia == 0 )
      {
         @ang_z =0

         if( PP_Agganciato == "COP" )
         {
            @ang_z = 180
            @base_0.x = base_0.x + X
            @base_0.y = base_0.y + Y
         }

         if( PP_Agganciato == "FIASX" )
         {
            @ang_z = -90
            @base_0.y = base_0.y + Y
         }

         if( PP_Agganciato == "FIADX" )
         {
            @base_0.x = base_0.x + X
            @ang_z = 90
         }
      }
      if( PP_Tipologia == 1 )
      {
         @base_0 = base_0
         @ang_z = 0
      }

      @import = FileSat
      @c_rivestimento = $c_alluminio

      idx_sat = ATTUALE()

      @TrLadsMaterial = "TesyPlasticLowRoughNoRefl"
   }

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

   //Luca 15/02/2021
   Posiziona G368_ContCollisioni G368CC
   {
      //@escluso = 1
      //if( PP_Agganciato == "COP" | PP_Agganciato == "FND" )
      //{
      //   if( PP_Tipologia == 1 ) { @escluso = 0 }
      //}

      @base_0.x = base_0.x - 4.5
      @base_0.y = base_0.y - 5
      @base_0.z = base_0.z - 5
      @X = X + 9
      @Y = Y + 10
      @Z = 100
   }
}

Elemento StpGruppoXG
{
   Descrizione = " "
   Code        = BSB
   Gruppo      = ""
   Tipo        = XXX
   Forma       = Blocco
   Alias StpGruppoXG

   Variabili
   {
      X  "Larghezza"    100
      Y  "Altezza"      100
      Z  "Profondità"   100

      c_rivestimento "" [235, 235, 255]
      m_rivestimento "" ""
      f_rivestimento "" "0.8"
   }

   Assegnazioni
   {
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_cnt_base = [ (base_2.x - base_0.x)/2, base_0.y, (base_2.z - base_0.z)/2]
      pnt_cnt_alto = [ (alto_2.x - alto_0.x)/2, alto_0.y, (alto_2.z - alto_0.z)/2]
   }

   #include %path_bdm%\TLib\orie.inc
}

//********************************************************************************************
// { ELEMENTI PER GIUNZIONI 368
//********************************************************************************************
Elemento G368_GruppoLavorazione
{
   Descrizione = "Gruppo Lavorazioni giunzioni 368"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias G368_GruppoLavorazione

   Variabili
   {
      X       "Spessore"          4
      Y       "Altezza"         100
      Z       "Profondità"      368

      G368_PanRef     "" ""
      G368_ModRef     "" ""

      G368_ModRefX    ""  0
      G368_ModRefY    ""  0
      G368_ModRefZ    ""  0

      G368_NrLav      ""  0
      G368_NrLavMax   ""  4

      idx_ref_pan     ""  -1
      idx_ref_mod     ""  -1

      idx_cnear_est   ""  -1
      idx_cnear_int   ""  -1

      //variabili per debug
      G368_VediGiunzioni "" 1
      // G368_VediDebug == 1 giunzioni
      // G368_VediDebug == 2 solo lavorazione + giunzioni
      // G368_VediDebug == 3 blocchi near
      G368_VediDebug     "" 0 Implicit


      //Luca 21/02/2022 integro gestione revisioni
      // REVISIONE 1 : modificata offset giunzioni cassetti (mantis 0028426)
      // REVISIONE 2 e 3: tampono errori di produzione per giunzione retro modulo 368 glass sideboard h184. Rispetto al fianco:
      //   REV 0 e 1: una giunzione a 78 dal retro contenitore, una a 84 dal fronte; in stampa, per il fianco sinistro, compariva una giunzione a 84 dal retro e una a 78 dal fronte, quindi invertite
      //   REV 2    : una giunzione a 84 dal retro contenitore, una a 78 dal fronte; compensa l'errore di stampa delle rev precedenti, abilitata manualmente solo su certi ordini per recupere i contenitori glass errati
      //   REV 3    : una giunzione a 90 dal retro contenitore, una a 84 dal fronte; revisione corretta come da specifiche
      //   REV 4    : rivista logica di riposizionamento in caso di collisione:
      //              1) inserite collisioni con aree perimetrali di rispetto di fianchi, fondi e coperchi
      //              2) gestito spostamento in caso di collisioni delle aree perimetrali del punto precedente
      //              3) effettuo ricalcolo intermedio in caso di spostamento in Y, non veniva presa la nuova posizione (veniva già fatto per gli spostamenti in X)
      //              4) gestito avviso ed esclusione giunzione in caso di 3 riposizionamenti falliti
      //              5) gestito spostamento in X in caso di collisioni con cassetti
      //  REV 5     : modificate specifiche relative al posizionamento in Z delle giunzioni nei 368glass.
      //              Questo per evitare continui nuovi casi di collisione tra la giunzioni e i vari meccanismi di apertura come il Miniwinch
      //              Nello specifico l'errore è sato riscontrato tra contenitore glass *x552x384 con affiancati due contenitori legno da *x276x406 ribalta (vedi pcf 2660/2661)
      //  REV 6     : contenitori 368glass, disabilitate le giunzioni se interessano preconfigurati (vedi 2024_SO035042)
      REVISIONE  "Revisione Incrementale (salvata al primo inserimento)"      6
      REV        "Revisione Corrente (quella con cui stà lavorando il bdm)"   0    // da passare ai figli o implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      Revisione_Incrementale_Inserimento( idx_att, "REV", REVISIONE)
      VAR_VALUE_SET( idx_pdr, "GIUNZIONI_REV", REV)

      //creo le variabili
      if( ACTION() == 0 )
      {
         i = 1
         while ( i<= G368_NrLavMax )
         {
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosX_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosY_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosZ_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_DimX_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_DimY_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_DimZ_Lav",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_idxR_Lav",STR(i)) , -1 , 0 , "" )
            i = i + 1
         }
      }

      DescEdit__ = "GRUPPO LAV.GIUNZIONI"

      #ifndef TEC;AZI
         G368_VediGiunzioni = 0
         G368_VediDebug     = 0
      #endif

      HIDE = 1 - G368_VediDebug
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB G368_SetVarRef

      if( $G368_OnMacro == 0 )  { GOSUB G368_SetLavorazioni }
   }

   Procedura CalcolaLavorazioni_GIU368
   {
      GOSUB G368_SetLavorazioni
      if( G368_NrLav > 0 ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " //CalcolaLavorazioni_GIU368")) }
   }

   // { ** ELEMENTI PER DEBUG **
   //UTILIZZO PER AVERE LA DESCRIZIONE IN EDIT
   Posiziona Dummy scr
   {
      @escluso    = 1
      if( G368_VediDebug >= 1 ) { @escluso  = 0 }

      @base_0     = base_0
      @DescEdit__ = STRCAT(G368_ModRef," | ",G368_PanRef)
   }

   //l'ingombro totale è uguale al pannello di riferimento
   Posiziona Blocco IngF
   {
      @escluso    = 1
      if( G368_VediDebug >= 2 ) { @escluso  = 0 }

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

   Posiziona G368_cont_per_near_EST IngEst
   {
      GOSUB posa_blocco
      @X = 1

      if( G368_PanRef == "FIASX" ) { @base_0.x = base_0.x - @X }
      if( G368_PanRef == "FIADX" ) { @base_0.x = base_3.x }

      if( G368_PanRef == "FON" )
      {
         @X = X
         @Y = 1
         @base_0.y = base_0.y - @Y
      }

      if( G368_PanRef == "COP" )
      {
         @X = X
         @Y = 1
         @base_0.y = alto_0.y
      }

      idx_cnear_est = ATTUALE()
   }

   Posiziona G368_cont_per_near_INT IngInt
   {
      GOSUB posa_blocco
      @X = 5

      if( G368_PanRef == "FIASX" ) { @base_0.x = base_3.x }
      if( G368_PanRef == "FIADX" ) { @base_0.x = base_0.x - @X }

      if( G368_PanRef == "FON" )
      {
         @X = X
         @Y = 5
         @base_0.y = alto_0.y
      }

      if( G368_PanRef == "COP" )
      {
         @X = X
         @Y = 5
         @base_0.y = base_0.y - @Y
      }

      idx_cnear_int = ATTUALE()

      //Luca 23/03/2021
      @escluso = 0
      if( G368_ModRef == "30M-FIA"
        | G368_ModRef == "30M-RIP" ) { @escluso = 1 }
   }
   // } ** ELEMENTI PER DEBUG **

   Posiziona G368_Lavorazione Lav1
   {
      IdLav = 1
      GOSUB G368_PosaLavSingola
   }

   Posiziona G368_Lavorazione Lav2
   {
      IdLav = 2
      GOSUB G368_PosaLavSingola
   }

   Posiziona G368_Lavorazione Lav3
   {
      IdLav = 3
      GOSUB G368_PosaLavSingola
   }

   Posiziona G368_Lavorazione Lav4
   {
      IdLav = 4
      GOSUB G368_PosaLavSingola
   }

   //Posiziona G368_Lavorazione Lav5
   //{
   //   IdLav = 5
   //   GOSUB G368_PosaLavSingola
   //}
   //
   //Posiziona G368_Lavorazione Lav6
   //{
   //   IdLav = 6
   //   GOSUB G368_PosaLavSingola
   //}
   //
   //Posiziona G368_Lavorazione Lav7
   //{
   //   IdLav = 7
   //   GOSUB G368_PosaLavSingola
   //}
   //
   //Posiziona G368_Lavorazione Lav8
   //{
   //   IdLav = 8
   //   GOSUB G368_PosaLavSingola
   //}
}

Elemento G368_cont_per_near_EST
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X     ""  20
      Y     ""  20
      Z     ""  20

      G368_VediDebug "" 0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7
      DescEdit__ = "LATO ESTERNO"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona Blocco Ing
   {
      @escluso    = 1
      if( G368_VediDebug >= 3 ) { @escluso  = 0 }

      GOSUB posa_blocco

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

Elemento G368_cont_per_near_INT
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X     ""  20
      Y     ""  20
      Z     ""  20

      G368_VediDebug "" 0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7
      DescEdit__ = "LATO INTERNO"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona Blocco Ing
   {
      @escluso    = 1
      if( G368_VediDebug >= 3 ) { @escluso  = 0 }

      GOSUB posa_blocco

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

Elemento G368_ContCollisioni
{
   Descrizione = "_cont_per_near"
   Code        = CPN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile AntaSingola_368

   Variabili
   {
      X   ""    20
      Y   ""    20
      Z   ""    20

      Apertura "" ""

      Lato ""  ""

      OffX ""  0
      OffY ""  0
      OffZ ""  0

      azione_locked "" 1

      Fianco30MM_sup "" 0
      Fianco30MM_inf "" 0

      TPRN_IMPORT    "" "NO"

      HIDE "" 1

      c_rivestimento "" [255,0,0]
      f_rivestimento "" "0.9"
   }

   Assegnazioni
   {
      GOSUB Stato_7
      VediCollisioni = $G368_VediCollisioni
   }

   PuntiNotevoli
   {
      GOSUB punti
      base_so = base_0
      alto_ne = alto_2
   }

   //se attezzato --> cerniera
   Attrezza
   {
      base_0 = base_0
      X = 30
      Y = 29
      Z = 78.5

      base_0.x = @base_0.x + 17.5
      if( Lato == "DX" ) { base_0.x = @base_0.x + @X - 17.5 - X }
      base_0.z = @base_0.z - Z
      base_0.y = @base_0.y + OffY + 3.5

      if( Apertura == "RB" )
      {
         base_0.x = @base_0.x + OffX - X/2
         base_0.y = @base_0.y
      }
      if( Apertura == "VS" )
      {
         base_0.x = @base_0.x + OffX  - X/2
         base_0.y = @base_0.y + @Y - Y
      }
   }

   Posiziona Blocco vedi
   {
      @escluso = 1 - VediCollisioni

      if( Fianco30MM_sup == 1
        | Fianco30MM_inf == 1 )  { @escluso = 1 }

      GOSUB posa_blocco
      @f_rivestimento = f_rivestimento
      @c_rivestimento = c_rivestimento
   }

   //m4_collision hard non funziona su elementi esclusi
   Posiziona _cont_collisioni_fianco_30MM fiasup
   {
      @escluso = 1

      if( Fianco30MM_sup == 1 ) { @escluso = 0 }
      @pos = "SUP"

      GOSUB posa_blocco

      idx_cont_fiasup = ATTUALE()

      if( VediCollisioni == 0 )
      {
         @c_rivestimento       = [255,255,255]
         @f_rivestimento       = "1"
         @HOOPS_VISIBILITY__   = "edges=off"
      }
      else
      {
         @f_rivestimento = f_rivestimento
         @c_rivestimento = c_rivestimento
         @HOOPS_VISIBILITY__   = ""
      }
   }

   Posiziona _cont_collisioni_fianco_30MM fiainf
   {
      @escluso = 1

      if( Fianco30MM_inf == 1 ) { @escluso = 0 }
      @pos = "INF"

      GOSUB posa_blocco
      idx_cont_fiainf = ATTUALE()

      if( VediCollisioni == 0 )
      {
         @c_rivestimento       = [255,255,255]
         @f_rivestimento       = "1"
         @HOOPS_VISIBILITY__   = "edges=off"
      }
      else
      {
         @f_rivestimento = f_rivestimento
         @c_rivestimento = c_rivestimento
         @HOOPS_VISIBILITY__   = "edges=off"
      }
   }
}

Elemento _cont_collisioni_fianco_30MM
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep

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

      pos  "" "INF"

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

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"base*")

      X = 30
      Y = 107.5
      Z = 86

      base_0 = [0,0,0]
      base_1 = [0,0,76]
      base_2 = [0,23,76]
      base_3 = [0,23,Z]
      base_4 = [0,23+34,Z]
      base_5 = [0,23+34,46]
      base_6 = [0,Y,46]
      base_7 = [0,Y,0]

      if( pos == "SUP" )
      {
         Y = 175.5
         Z = 93.5

         base_1 = [0,0,21.5]
         base_2 = [0,20,21.5]
         base_3 = [0,20,41.5]
         base_4 = [0,80,41.5]
         base_5 = [0,80,Z]
         base_6 = [0,80+34,Z]
         base_7 = [0,80+34,34]
         base_8 = [0,Y,34]
         base_9 = [0,Y,0]
      }

      alto_0 = base_0
      alto_0.x = X

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

Elemento G368_Lavorazione
{
   Descrizione = "Lavorazione giunzioni 368"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X       ""         4
      Y       ""       100
      Z       ""       368

      G368_AttivaGiu     "" 0

      //valori del modulo padre
      G368_Orie          "" "" Implicit
      G368_PanRef        "" "" Implicit
      G368_ModRef        "" "" Implicit

      //valori del modulo padre
      G368_ModRefX       ""  0 Implicit
      G368_ModRefY       ""  0 Implicit
      G368_ModRefZ       ""  0 Implicit

      G368_NrLav         ""  0 Implicit
      G368_IdLav         ""  1

      G368_NrGiu         ""  0
      G368_NrGiuMax      ""  8
      G368_NrGiuColl     ""  0

      //idx del pannello padre della lavorazione (FIASX)
      idx_ref_pan        "" -1 Implicit
      idx_ref_mod        "" -1 Implicit

      //idx lavorazione corrispondente
      idx_lav_ref        "" -1

      //tipologia del modulo lavorazione corrispondente
      G368_ModLavRef     "" ""

      G368_VediDebug     ""  0 Implicit
      G368_VediGiunzioni ""  0 Implicit

      G368_Tipologia     "" ""

      FLAG_CopSp38       ""  0 Implicit

      REV                ""  0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      G368_NrGiuMax = 8
      if( UN_PADRE("Cuc_ModuloGlass") )          { G368_NrGiuMax = 6 }
      if( UN_PADRE("ModuloGlass_368Sideboard") ) { G368_NrGiuMax = 2 }

      //creo le variabili
      if( ACTION() == 0)
      {
         i = 1
         while ( i <= G368_NrGiuMax)
         {
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosX_Giu",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosY_Giu",STR(i)) ,  0 , 0 , "" )
            VAR_CREATE_NUM( ATTUALE() , STRCAT("G368_PosZ_Giu",STR(i)) ,  0 , 0 , "" )

            VAR_CREATE_STR( ATTUALE() , STRCAT("G368_Pos_Giu",STR(i)) ,  "" , 0, "" )

            i = i + 1
         }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      //Giunzioni in collisione
      G368_NrGiuColl = 0

      wk_giu_num = 1
      wk_giu_var = STRCAT( "G368_Idx_", STR(wk_giu_num))
      while ( VAR_EXIST( ATTUALE(), wk_giu_var))
      {
         wk_giu_idx = VAR_VAL( ATTUALE(), STRCAT( "G368_Idx_", STR(wk_giu_num)))

         if( IS_IDX(wk_giu_idx))
         {
            wk_giu_coll = VAR_VAL( wk_giu_idx, "G368_Collide")

            if( wk_giu_coll == 1) { G368_NrGiuColl = G368_NrGiuColl + wk_giu_coll }
         }

         wk_giu_num = wk_giu_num + 1
         wk_giu_var = STRCAT( "G368_Idx_", STR(wk_giu_num))
      }

      if( $G368_OnMacro == 0 )  { GOSUB G368_SetGiunzioni }
   }

   Procedura CalcolaGiunzioni_GIU368
   {
      GOSUB G368_SetGiunzioni
      if( G368_NrGiu > 0 ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " //CalcolaGiunzioni_GIU368")) }
   }

   // { ** ELEMENTI PER DEBUG **
   //UTILIZZO PER AVERE LA DESCRIZIONE IN EDIT
   Posiziona Dummy scr
   {
      @escluso    = 1
      if( G368_VediDebug >= 2 ) { @escluso  = 0 }

      @base_0     = base_0
      @DescEdit__ = ""
      if( IS_IDX(idx_ref_lav) )
      {
         idx_pan = PADRE(idx_ref_lav,1)
         @DescEdit__ = STRCAT("[",STR(G368_IdLav),"]  --> ",STR(idx_pan),"-",NOME(idx_pan))
      }
   }

   Posiziona Blocco Lav
   {
      @escluso    = 1
      if( G368_VediDebug >= 2 ) { @escluso  = 0 }

      GOSUB posa_blocco

      if( G368_Orie == "VERT" )
      {
         @X = X + 10
         @base_0.x = base_0.x - 5
      }
      if( G368_Orie == "ORIZ" )
      {
         @Y = Y + 10
         @base_0.y = base_0.y - 5
      }

      @c_rivestimento = [255,0,0]
      if( G368_AttivaGiu == 1 ) { @c_rivestimento = [0,255,0] }

      @f_rivestimento = "0.5"
   }
   // } ** ELEMENTI PER DEBUG **

   Procedura G368_ResetControlloCollisioni
   {
      wk_giu_num = 1
      wk_giu_var = STRCAT( "G368_Idx_", STR(wk_giu_num))
      while ( VAR_EXIST( ATTUALE(), wk_giu_var))
      {
         wk_giu_idx = VAR_VAL( ATTUALE(), STRCAT( "G368_Idx_", STR(wk_giu_num)))

         if( IS_IDX(wk_giu_idx))
         {
            if( VAR_VAL( wk_giu_idx,"G368_Collide") > 0)
            {
               VAR_VALUE_SET( wk_giu_idx, "escluso", 0)
               VAR_VALUE_SET( wk_giu_idx, "G368_Collide", 0)
            }
         }

         wk_giu_num = wk_giu_num + 1
         wk_giu_var = STRCAT( "G368_Idx_", STR(wk_giu_num))
      }
   }

   Posiziona G368_Giunzione G1
   {
      IdGiunzione = 1
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G2
   {
      IdGiunzione = 2
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G3
   {
      IdGiunzione = 3
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G4
   {
      IdGiunzione = 4
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G5
   {
      IdGiunzione = 5
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G6
   {
      IdGiunzione = 6
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G7
   {
      IdGiunzione = 7
      GOSUB G368_PosaGiunzione
   }

   Posiziona G368_Giunzione G8
   {
      IdGiunzione = 8
      GOSUB G368_PosaGiunzione
   }
}

Elemento G368_Giunzione
{
   Descrizione = "Lavorazione giunzioni 368"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       G368_Giunzione;CamIncidente

   Variabili
   {
      X                    "" 40
      Y                    "" 10
      Z                    "" 10

      REVISIONE            ""  0 Implicit
      REV                  ""  0 Implicit

      G368_NrGiu           ""  0 Implicit
      G368_NrGiuColl       ""  0 Implicit
      G368_PosGiu          "" ""
      G368_Orie            "" "" Implicit
      G368_IdGiunzione     ""  1

      G368_VediDebug       ""  0 Implicit
      G368_VediGiunzioni   ""  0 Implicit

      G368_Collide         ""  0
      G368_Escluso         ""  0

      //Giunzione d.8 per moduli 368 con sormonto ridotto
      G368_GiuRinforzata   ""  0

      idx_ref_pan          "" -1 Implicit
      idx_pan              "" -1 Implicit

      G368_GiuTipologia    "" ""

      //pannello padre
      G368_PanRef          "" "" Implicit
      //tipo modulo padre
      G368_ModRef          "" "" Implicit
      //tipo modulo padre lavorazione corrispondente
      G368_ModLavRef       "" "" Implicit

      G368_ModRefX         ""  0 Implicit
      G368_ModRefY         ""  0 Implicit
      G368_ModRefZ         ""  0 Implicit

      FLAG_CopSp38         ""  0
      FLAG_Grafica_Esclusa ""  0

      COLL_OFFX            ""  0
      COLL_OFFY            ""  0
      COLL_OFFZ            ""  0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78

      // 1 - Dimensioni
      // 1.1 - Parte 1: in riferimento all'idx pannello/tipo pannello/tipo contenitore che ospita la giunzione (idx_ref_pan/G368_PanRef/G368_ModRef)
      Lunghezza_1 = $M368_Spe_Fia
      Sporgenza_1 = $M368_Giu_Sporgenza

      if( IS_IDX(idx_pdr))
      {
         Lunghezza_1 = VAR_VAL( idx_pdr, "X")
         if( G368_Orie == "ORIZ") { Lunghezza_1 = VAR_VAL( idx_pdr, "Y") }
      }

      // 1.2 - Parte 2: in riferimento all'idx dell'altro pannello/tipo altro contenitore (idx_pan/G368_ModLavRef)
      Lunghezza_2 = $M368_Spe_Fia
      Sporgenza_2 = $M368_Giu_Sporgenza

      if( IsIdx( idx_pan, "idx_ref_pan"))
      {
         Lunghezza_2 = VAR_VAL( idx_pan, "X")
         if( G368_Orie == "ORIZ") { Lunghezza_2 = VAR_VAL( idx_pan, "Y") }
      }

      // 1.3 - Lunghezza totale
      Lunghezza = Lunghezza_1 + Sporgenza_1 + Lunghezza_2 + Sporgenza_2

      X = $M368_Giu_Diametro
      Y = $M368_Giu_Diametro
      Z = $M368_Giu_Diametro

      if( G368_Orie == "ORIZ") { Y = Lunghezza }
      else                     { X = Lunghezza }


      // 2 - FLAG_CopSp38: Interessa un elemento sp.38
      //     La giunzione tra 38 e 19 esiste solo in pcf ed è composta da:
      //     - Vite sul coperchio (attualmente unico elemento di sp.38), visibile dall'interno del contenitore
      //     - Bussola sul fondo (sp.19), non visibile dall'interno del contenitore
      //     NOTA: Non eredito dal padre e considero anche se sono fondo e scarico le giunzioni su un coperchio sp38
      FLAG_CopSp38 = 0
      if( Lunghezza_1 == $M368_Spe_Cop38) { FLAG_CopSp38 = FLAG_CopSp38 + 1 }
      if( Lunghezza_2 == $M368_Spe_Cop38) { FLAG_CopSp38 = FLAG_CopSp38 + 1 }

      // 3 - Dimensioni grafiche, composta da due parti:
      //     - Parte 1: in riferimento all'idx pannello/tipo pannello/tipo contenitore che ospita la giunzione (idx_ref_pan/G368_PanRef/G368_ModRef)
      //     - Parte 2: in riferimento all'idx dell'altro pannello/tipo altro contenitore (idx_pan/G368_ModLavRef)
      Grafica_Lunghezza = Lunghezza
      Grafica_Offset    = 0

      // 3.1 - Parte 1: in riferimento all'idx pannello/tipo pannello/tipo contenitore che ospita la giunzione (idx_ref_pan/G368_PanRef/G368_ModRef)
      Grafica_Lunghezza_1 = Lunghezza_1
      Grafica_Sporgenza_1 = Sporgenza_1

      // 3.1.1 - La giunzione attuale è parte di un modulo giorno
      if( G368_ModRef == "MOD-GIO")
      {
         Grafica_Lunghezza_1 = Lunghezza_1/2
         Grafica_Sporgenza_1 = 0

         if( G368_PanRef == "COP"
           | G368_PanRef == "FIADX") { Grafica_Offset = Grafica_Offset + Grafica_Lunghezza_1 + Sporgenza_1 }
      }

      // 3.1.2 - La giunzione attuale scarica su di un elemento sp38
      if( FLAG_CopSp38 == 1
        & Lunghezza_2 == $M368_Spe_Cop38)
      {
         Grafica_Lunghezza_1 = Lunghezza_1/2
         Grafica_Sporgenza_1 = 0

         if( G368_PanRef == "COP"
           | G368_PanRef == "FIADX") { Grafica_Offset = Grafica_Offset + Grafica_Lunghezza_1 + Sporgenza_1 }
      }

      // 3.2 -  Parte 2: in riferimento all'idx dell'altro pannello/tipo altro contenitore (idx_pan/G368_ModLavRef)
      Grafica_Lunghezza_2 = Lunghezza_2
      Grafica_Sporgenza_2 = Sporgenza_2

      // 3.2.1 - La giunzione attuale scarica su un modulo giorno
      if( G368_ModLavRef == "MOD-GIO")
      {
         Grafica_Lunghezza_2 = Lunghezza_2/2
         Grafica_Sporgenza_2 = 0

         if( G368_PanRef == "FON"
           | G368_PanRef == "FIASX") { Grafica_Offset = Grafica_Offset + Grafica_Lunghezza_2 + Sporgenza_2 }
      }

      // 3.2.2 - La giunzione attuale fa parte di un elemento sp.38, l'altra lunghezza viene dimezzata (vedi punto 3)
      if( FLAG_CopSp38 == 1
        & Lunghezza_1 == $M368_Spe_Cop38)
      {
         Grafica_Lunghezza_2 = Lunghezza_2/2
         Grafica_Sporgenza_2 = 0

         if( G368_PanRef == "FON"
           | G368_PanRef == "FIASX") { Grafica_Offset = Grafica_Offset + Grafica_Lunghezza_2 + Sporgenza_2 }
      }

      // 3.3 - Lunghezza totale
      Grafica_Lunghezza = Grafica_Lunghezza_1 + Grafica_Sporgenza_1 + Grafica_Lunghezza_2 + Grafica_Sporgenza_2

      // 4 - Esclusioni
      FLAG_Grafica_Esclusa = 0
      if( G368_Collide == 1)         { FLAG_Grafica_Esclusa = 1  }

      // 5 - Finitura
      c_rivestimento = $c_alluminio
      if( FLAG_Grafica_Esclusa > 0 ) { c_rivestimento = $c_rosso }
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_stp_cnt = base_0
      pnt_stp_cnt.x = pnt_stp_cnt.x + X/2
      pnt_stp_cnt.y = pnt_stp_cnt.y + Y/2
      pnt_stp_cnt.z = pnt_stp_cnt.z + Z/2

      if( G368_Orie == "ORIZ" )
      {
         pnt_stp_cnt = base_0
         pnt_stp_cnt.x = pnt_stp_cnt.x + X/2
         pnt_stp_cnt.z = pnt_stp_cnt.z + Z/2
      }

      pnt_scs_centro = pnt_stp_cnt
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura G368_ResetControlloCollisioni
   {
      if( COLL_OFFX != 0 | COLL_OFFY != 0 | COLL_OFFZ != 0 | G368_Collide != 0 | G368_Escluso != 0)
      {
         escluso = 0

         DEL_VAR( ATTUALE(), "Riposizionata*")
         Riposizionata = 0

         G368_Collide = 0
         G368_Escluso = 0

         COLL_OFFX = 0
         COLL_OFFY = 0
         COLL_OFFZ = 0

         RIGENERA_IDX(ATTUALE())
      }
   }

   Procedura G368_RefreshControlloCollisioni
   {
      RIGENERA_IDX(ATTUALE())
   }

   Posiziona Blocco Giu
   {
    #ifndef TEC
      @escluso = FLAG_Grafica_Esclusa
    #endif

      if( G368_VediDebug == 0 )
      {
         @f_rivestimento       = "1"
         @HOOPS_VISIBILITY__   = "edges=off"
      }

      GOSUB posa_blocco

      //DBG
      if( G368_VediDebug > 0 )
      {
         if( G368_Orie == "VERT" )
         {
            @X = X + 40
            @base_0.x = base_0.x + (X - @X)/2
         }
         if( G368_Orie == "ORIZ" )
         {
            @Y = Y + 40
            @base_0.y = base_0.y + (Y - @Y)/2
         }
      }

      @c_rivestimento = c_rivestimento
      idx_grafica = ATTUALE()
   }

   Posiziona CilindroX Giu2
   {
      @escluso = 1
      if( G368_VediGiunzioni >= 1 & G368_VediDebug == 0 & G368_Orie == "VERT" ) { @escluso = FLAG_Grafica_Esclusa }

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

      @base_0 = base_0
      @base_0.x = base_0.x + Grafica_Offset

      @c_rivestimento = c_rivestimento
   }

   Posiziona CilindroY Giu3
   {
      @escluso = 1
      if( G368_VediGiunzioni >= 1 & G368_VediDebug == 0 & G368_Orie == "ORIZ" ) { @escluso = FLAG_Grafica_Esclusa }

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

      @base_0 = base_0
      @base_0.y = base_0.y + Grafica_Offset

      @c_rivestimento = c_rivestimento
   }

   Posiziona _cont_per_near nsx
   {
      idx_cnear = ATTUALE()

      @X = X + 4
      @Y = Y - 2*$M368_Giu_Near_Rid
      @Z = Z - 2*$M368_Giu_Near_Rid

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

      if( G368_Orie == "ORIZ" )
      {
         @X = X - 2*$M368_Giu_Near_Rid
         @Y = Y + 4
         @Z = Z - 2*$M368_Giu_Near_Rid

         @base_0.x = base_0.x + $M368_Giu_Near_Rid
         @base_0.y = base_0.y + (Y - @Y)/2
         @base_0.z = base_0.z + $M368_Giu_Near_Rid
      }

      @c_rivestimento = [ 0, 255, 0]
   }
}
//********************************************************************************************
// } ELEMENTI PER GIUNZIONI 368
//********************************************************************************************

Subroutine
{
   //{ ********** 368 PENSILI CUCINA **********
   PROCEDURA DimPensili
   {
      M4_GRUPPO__  = MSG(1007)

      if(ACTION()==0 & VAR_EXIST(idx_att,"copied__")!=1) { X_ori=X Y_ori=Y Z_ori=Z }

      Zt = Z + $M368_Spe_Ant + $M368_Aria_Ant_Z

      GOSUB punti_Zt
   }

   PROCEDURA DefVanoPensili
   {
      vano_0_0 = [$M368_Spe_Fia, 0, $M368_Rie_Sch_ZR +$M368_Spe_Sch ]
      vano_l_0 = X - 2*$M368_Spe_Fia
      vano_p_0 = Z - $M368_Spe_Sch - $M368_Rie_Sch_ZR

      vano_0_1 = [0, 0, 0 ]
      vano_l_1 = X
      vano_p_1 = Z
   }

   PROCEDURA OnQueryBdm_Pensili_368
   {
      if( $query_type==2 )
      {
         //vano 1 solo per i led
         if( $query_p2==0 )
         {
            $QueryResult__ = 1
            if( NOME($query_p1)=="Cuc_Led" ) { $QueryResult__ = 0 }
         }

         if( $query_p2==1 )
         {
            $QueryResult__ = 0
            if( NOME($query_p1)=="Cuc_Led" ) { $QueryResult__ = 1 }
         }
      }
   }

   PROCEDURA GestioneLivelliOnWall_368
   {
      if($query_type==5)
      {
         COMANDO2("LIVELLI CLEAR OnWall")

         liv_wall =  6
         //liv_wall[1] = 0
         //liv_wall[2] = 201
         //liv_wall[3] = 385
         //liv_wall[4] = 569
         //liv_wall[5] = 753
         liv_wall[1] = 937
         liv_wall[2] = 1121
         liv_wall[3] = 1305
         liv_wall[4] = 1489
         liv_wall[5] = 1673
         liv_wall[6] = 1857

         if( NOME(ATTUALE())=="WallPanel_368" )
         {
            liv_wall =  7
            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 CtrlPensili
   {
      if( ACTION()<0 | COMPONENDO() )  { EXITSUB() }
      if( $OnLoadOrder )               { EXITSUB() }

      idx_test = ATTUALE()
      match = "ModuloP*"
      match2 = "ScoccaS*"

      dove  = "*"
      GOSUB VICINESXDX_cuc

      //Luca 31/08/2020
      if( VAR_EXIST(ATTUALE(),"VAR_Aggancio") )
      {
         GOSUB CambiaPuntoConnessione
      }

      GOSUB Ctrl_PensileSovrapposto_368
   }

   PROCEDURA Ctrl_PensileSovrapposto_368
   {
      if( ACTION() <= 0 | ACTION() == 2 | COMPONENDO() )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"FLAG_Sovrapposto") == 0 )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_dw") == 0 )      { EXITSUB() }

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

      FLAG_Sovrapposto = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("mods",idx_cnear_dw,5,"Mod*368")

      //cancello me stesso dagli array
      DelFromArray(ATTUALE(),"mods",0,ATTUALE(),"")

      if( mods == 0 ) { EXITSUB() }

      //Un pensile è sovrapposto se il suo fondo è coperto per più di metà larghezza
      ang_att = ANG_TOT_NOR(ATTUALE())

      wk_b0 = base_0
      wk_b3 = base_3

      //wk_bc = wk_b0
      //wk_bc.x = wk_bc.x + COSENO(ang_att)*(X/2)
      //wk_bc.z = wk_bc.z -   SENO(ang_att)*(X/2)

      wk_bx = wk_b0
      wk_bx.x = wk_bx.x - COSENO(ang_att)*9999
      wk_bx.z = wk_bx.z +   SENO(ang_att)*9999

      SORT_POINT(wk_bx,"mods","alto_0")

      wk_liv_s  = -9999
      wk_liv_e  = -9999
      wk_libero = 0

      esci = 0

      i = 1
      while ( i <= mods & esci == 0  )
      {
         wk_idxt = mods[i]
         SET_#(wk_idxt)

         wk_angt = ANG_TOT_NOR(wk_idxt)

         //1. verifico altezza
         if( ABS(#alto_0.y - wk_b0.y ) < 0.1 )
         {
            wk_test_p0 = #alto_0   PT.y = wk_b0.y
            wk_test_p3 = #alto_3   PT.y = wk_b0.y

            if( i==1 )  { wk_pprec = wk_test_p3 }

            PX = INTERFERISCI( wk_b0 , ang_att+90 , wk_test_p0 , wk_test_p3 )

            if( PX.x != $ERR_INTER & PX.y != $ERR_INTER  & PX.z ! =$ERR_INTER )
            {
               if( wk_liv_s < 0 )
               {
                  wk_liv_s = 0
                  wk_liv_e = DISTANZA(wk_b0, wk_test_p3 )
               }
            }
            else
            {
               if( wk_liv_s < 0 ) { wk_liv_s = DISTANZA(wk_b0, wk_test_p0 ) }

               wk_liv_e = DISTANZA(wk_b0, wk_test_p3 )

               //se il primo modulo inizia dopo
               if( i == 1 & wk_liv_s > X/2 ) { esci = 1 }
            }

            if( i > 1 )
            {
               wk_dist = DISTANZA(wk_pprec,wk_test_p0)
               if( wk_dist > 0 )
               {
                  wk_libero = wk_libero + wk_dist
                  wk_pprec = wk_test_p3
               }
            }

            wk_pprec = wk_test_p3
         }

         i = i + 1
      }

      if( wk_liv_s == 0 & wk_liv_e >= X/2  )
      {
         if( wk_libero < X/2 ) { FLAG_Sovrapposto = 1 }
      }

      if( wk_liv_s > 0 & wk_liv_s < X/2  )
      {
         if( wk_liv_e - wk_liv_s >= X/2 )
         {
            if( wk_libero == 0 ) { FLAG_Sovrapposto = 1 }
         }
      }
   }

   PROCEDURA OnSetupLivelli_Fro368
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv_max = VAR_VAL(idx_ref,"Y") + 50
      liv_att = 0
      step = 46

      while ( liv_att<=liv_max )
      {
         ne = liv2add + 1
         liv2add = ne
         liv2addscr = ne
         liv2add[ne]    = liv_att
         liv2addscr[ne] = liv_att

         liv_att = liv_att + step
      }

      GOSUB livelli_add2
   }

   PROCEDURA VestiFrontale_368
   {
      vano_n = $vano_n
      idx_pdr = PADRE(ATTUALE(),1)

      base_0.x = $vano_0.x - $M368_Spe_Fia + $M368_Aria_Ant_X
      base_0.y = $vano_0.y + $livello + $M368_Aria_Ant_Y
      base_0.z = $vano_0.z + $profondita + $M368_Aria_Ant_Z

      //Luca 17/12/2020 gestione pushpull
      if( VAR_VAL(idx_pdr,"PP_PushPull") == 1 )
      {
         base_0.z = $vano_0.z + $profondita + $M368_Aria_Ant_Z_PP
      }

      if( IS_VAR_FIXED(idx_att,"X")==0 )
      {
         X = $larghezza + 2*$M368_Spe_Fia - 2*$M368_Aria_Ant_X
      }

      if( IS_VAR_FIXED(idx_att,"Y")==0 )
      {
         Y = $altezza - 2*$M368_Aria_Ant_Y
      }

      Verso = @Verso

      if( NOME(idx_pdr) == "Modulo_368" )
      {
         if( @VAR_ConfigVani == 2 )
         {
            AnteSingole = 0

            COMPONENTI2("wk_ant",idx_pdr,"Anta_368")
            i = 1
            while ( i<= wk_ant )
            {
               if( VAR_VAL(wk_ant[i],"SdoppiaAnta") == 0 ) { AnteSingole = AnteSingole + 1 }
               i = i + 1
            }

            if( AnteSingole == 2 )
            {
               Verso_Fix = 1
               if( vano_n == 0 ) { Verso = -1 }
               if( vano_n == 1 ) { Verso =  1 }
            }
         }
      }

      //GOSUB Cuc_TaglioAutomatico
   }
   //} ********** 368 PENSILI CUCINA **********

   PROCEDURA DefPuntiLED_368
   {
      if( NOME(ATTUALE()) == "PannelloRetroXLED_368" )
      {
         pnt_stendi_led_sx_b = [ RieX , RieY , Z/2 ]
         pnt_stendi_led_sx_a = [ RieX , Yt - RieY , Z/2 ]

         pnt_stendi_led_dx_b = [ Xt - RieX , RieY , Z/2 ]
         pnt_stendi_led_dx_a = [ Xt - RieX , Yt - RieY , Z/2 ]
      }

      if( NOME(ATTUALE()) == "ModuloGlass_368" )
      {
         RieX_Led = 15
         RieY_Led = 15
         Z_pan    = 19

         pnt_stendi_led_sx_b = [ RieX_Led , RieY_Led , Z_pan/2 ]
         pnt_stendi_led_sx_a = [ RieX_Led , Y - RieY_Led , Z_pan/2 ]

         pnt_stendi_led_dx_b = [ X - RieX_Led , RieY_Led , Z_pan/2 ]
         pnt_stendi_led_dx_a = [ X - RieX_Led , Y - RieY_Led ,  Z_pan/2 ]

         if( VAR_GlassL_ConScasso == 1 )
         {
            if( GlassL_Scasso_Pos == "SX-BA" ) { pnt_stendi_led_sx_b.x = pnt_stendi_led_sx_b.x + GlassL_Scasso_X }
            if( GlassL_Scasso_Pos == "DX-BA" ) { pnt_stendi_led_dx_b.x = pnt_stendi_led_dx_b.x - GlassL_Scasso_X }
            if( GlassL_Scasso_Pos == "SX-AL" ) { pnt_stendi_led_sx_a.x = pnt_stendi_led_sx_a.x + GlassL_Scasso_X }
            if( GlassL_Scasso_Pos == "DX-AL" ) { pnt_stendi_led_dx_a.x = pnt_stendi_led_dx_a.x - GlassL_Scasso_X }
         }
      }

      if( NOME(ATTUALE()) == "MensolaElle_368" )
      {
         pnt_stendi_led_sx_b = [ RieX_Pan , RieY_Pan , Spe_Pan/2 ]
         pnt_stendi_led_sx_a = [ RieX_Pan , Y - RieY_Pan , Spe_Pan/2 ]

         pnt_stendi_led_dx_b = [ X - RieX_Pan , RieY_Pan , Spe_Pan/2 ]
         pnt_stendi_led_dx_a = [ X - RieX_Pan , Y - RieY_Pan , Spe_Pan/2 ]
      }

      if( NOME(ATTUALE()) == "WallPanel_368"
        | NOME(ATTUALE()) == "GlassMirror" )
      {
         pnt_stendi_led_sx_b = [ RieX_Pan + RieX_pan , RieY_Pan + RieY_pan , Spe_Pan/2 ]
         pnt_stendi_led_sx_a = [ RieX_Pan + RieX_pan , Y - RieY_Pan - RieY_pan , Spe_Pan/2 ]

         pnt_stendi_led_dx_b = [ X - RieX_Pan - RieX_pan , RieY_Pan + RieY_pan , Spe_Pan/2 ]
         pnt_stendi_led_dx_a = [ X - RieX_Pan - RieX_pan , Y - RieY_Pan - RieY_pan , Spe_Pan/2 ]
      }

      if( NOME(ATTUALE()) == "AppendiabitiWallPanel_368"  )
      {
         pnt_stendi_led_sx_b = [ RiePan_X , RiePan_Y , Spe_Pan/2 ]
         pnt_stendi_led_sx_a = [ RiePan_X , Y - RiePan_Y , Spe_Pan/2 ]

         pnt_stendi_led_dx_b = [ X - RiePan_X , RiePan_Y , Spe_Pan/2 ]
         pnt_stendi_led_dx_a = [ X - RiePan_X , Y - RiePan_Y , Spe_Pan/2 ]

         if( X == 368 & Y == 184 )  { DEL_VAR(ATTUALE(),"pnt_stendi_led_*") }
      }

      //LZ 09/09/2021: punti stesura led, vengono anche riportati sul preconfigurato
      if( NOME(ATTUALE()) == "ModuloGlass_368Sideboard" )
      {
         RieX = 9.5
         RieY = 9.5
         RieZ = 5

         if( IS_IDX(idx_sx) )
         {
            wk_nome_idx_sx = NOME(idx_sx)
            if( VAR_VAL( idx_sx, "ConBifacciale") == 0
              & ( wk_nome_idx_sx == "Modulo_368"
                | wk_nome_idx_sx == "ModuloGiorno_368"))
            {
               pnt_stendi_led_dw_sx = [ -RieX, 0, -RieZ ]
               pnt_stendi_led_up_sx = [ -RieX, Y, -RieZ ]
            }
         }

         if( IS_IDX(idx_dx) )
         {
            wk_nome_idx_dx = NOME(idx_dx)
            if( VAR_VAL( idx_dx, "ConBifacciale") == 0
              & ( wk_nome_idx_dx == "Modulo_368"
                | wk_nome_idx_dx == "ModuloGiorno_368"))
            {
               pnt_stendi_led_dw_dx = [ X + RieX, 0, -RieZ ]
               pnt_stendi_led_up_dx = [ X + RieX, Y, -RieZ ]
            }
         }

         if( IS_IDX(idx_sopra) )
         {
            wk_nome_idx_up = NOME(idx_sopra)
            if( VAR_VAL( idx_sopra, "ConBifacciale") == 0
              & ( wk_nome_idx_up == "Modulo_368"
                | wk_nome_idx_up == "ModuloGiorno_368"))
            {
               pnt_stendi_led_sx_a = [ 0, Y + RieY, -RieZ ]
               pnt_stendi_led_dx_a = [ X, Y + RieY, -RieZ ]
            }
         }

         if( IS_IDX(idx_sotto) )
         {
            wk_nome_idx_dw = NOME(idx_sotto)
            if( VAR_VAL( idx_sopra, "ConBifacciale") == 0
              & ( wk_nome_idx_dw == "Modulo_368"
                | wk_nome_idx_dw == "ModuloGiorno_368"))
            {
               pnt_stendi_led_sx_b = [ 0, -RieY, -RieZ ]
               pnt_stendi_led_dx_b = [ X, -RieY, -RieZ ]
            }
         }
      }

      if( IS_MATCH( NOME(ATTUALE()), "Mensola_Glasserie*") == 1 )
      {
         pnt_stendi_led_sx_b = [ $Mens_Glasserie_PanRt_OffX_Sx, $Mens_Glasserie_PanRt_OffY_Inf, $Mens_Glasserie_PanRt_Z/2]
         pnt_stendi_led_sx_a = [ $Mens_Glasserie_PanRt_OffX_Sx, Y-$Mens_Glasserie_PanRt_OffY_Sup, $Mens_Glasserie_PanRt_Z/2]

         pnt_stendi_led_dx_b = [ X-$Mens_Glasserie_PanRt_OffX_Dx, $Mens_Glasserie_PanRt_OffY_Inf, $Mens_Glasserie_PanRt_Z/2]
         pnt_stendi_led_dx_a = [ X-$Mens_Glasserie_PanRt_OffX_Dx, Y-$Mens_Glasserie_PanRt_OffY_Sup, $Mens_Glasserie_PanRt_Z/2]
      }

      //Simone 18/12/2023 - nel caso di alzata air
      if( NOME(ATTUALE()) == "Modulo_368" )
      {
         RieX = 20
         RieY = 9.5
         RieZ = 5

         if( IsIdx(ATTUALE(),"idx_setv_sopra") )
         {
            pnt_stendi_led_sx_a = [ RieX, alto_0.y -RieY, -RieZ ]
            pnt_stendi_led_dx_a = [ X - RieX, alto_3.y -RieY, -RieZ ]
         }
      }
   }

   PROCEDURA OnTabEredita_368
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C007

         GOSUB Set_Gest_C017_368

         if( NOME(ATTUALE())=="ModuloPensile_368"
           | NOME(ATTUALE())=="ModuloPensile_Punto" ) { GOSUB Set_Gest_C009_CmpModulo_368 }

         if( VAR_VAL( ATTUALE(),"FLAG_Moduli_368" ) == 1 )
         {
            GOSUB Set_Gest_C062_368
            GOSUB Set_Gest_C087_368
            GOSUB Set_Gest_C088_368

            GOSUB Set_Gest_SIDE_368
         }

         //Luca 25/01/2021
         if( NOME(ATTUALE()) == "ModuloGlass_368" )
         {
            GOSUB Set_Gest_C008_ModuloGlass_368
         }

         if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR")==1 )
         {
            GOSUB Set_Gest_C062_Contenitore_AIR
            GOSUB Set_Gest_C094_MensolaLib_AIR
         }

           GOSUB PCF_Elements_RegoleEredita
      }

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

         GOSUB Set_ConAttaccaglie_Moduli_368

         GOSUB Set_Apertura_368

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

         ////gestione Pushpull
         //if( VAR_EXIST(ATTUALE(),"PP_PushPull")
         //  & VAR_VAL_STR(ATTUALE(),"GEST_C017") != ""  )
         //{
         //   COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- GEST_C017 = ", GEST_C017))
         //   PP_PushPull = 0
         //   if( GEST_C017 == "PU001" )  { PP_PushPull = 1 }
         //}

         //Luca 04/10/2021
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 1
           & VAR_VAL_STR(ATTUALE(),"GEST_C089") != "__"
           & VAR_VAL(ATTUALE(),"VAR_Side") == 0 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C089")
            GEST_C089 = "__"
            TABER_VARSETTATE = VarAdd
         }

         //Luca 11/10/2022 possibilità di fix piedini da categoria
         if( VAR_VAL(-1,"TPC4WEB") == 1 )
         {
            if( IS_VAR_FIXED(ATTUALE(),"GEST_C088") )
            {
               DEL_VAR_MODIFICATE(ATTUALE(),"ConPiedini")

               ConPiedini = 0
               if( VAR_VAL_STR(ATTUALE(),"GEST_C088") == "FR007" ) { ConPiedini = 1 }

               VAR_SET_MODIFICATA(ATTUALE(),"ConPiedini","")
            }
         }
      }
   }

   //Luca 03/04/2019
   PROCEDURA Gestionale_368
   {
      if( COMPONENDO() | ACTION()<0 | $M4RicalcoloOffset__ ) { EXITSUB() }

      //GOSUB Set_Gest_C017_368

      ////Luca 09/10/20 riporto modifiche inviate da LAGO
      //if( NOME(ATTUALE())=="ModuloTampPensile_368" ) { GEST_Z = Zt }
      //if( NOME(ATTUALE())=="Modulo_368" ) { GEST_Z = Zt }

      if( UN_PADRE("*Pentagram*")
        & VAR_VAL(ATTUALE(),"in_pcfto") == 0 )
      {
         FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW
      }

      //Luca 20/01/2021 riporto modifiche LAGO
      if( NOME(ATTUALE())=="Modulo_368" |
          NOME(ATTUALE())=="ModuloTampPensile_368" |
          IS_MATCH( NOME(ATTUALE()) , "ModuloPensile*_368" )) { GEST_Z = Zt }

      //Luca 08/04/2020
      if( NOME(ATTUALE())=="ModuloPensile_368"
        | NOME(ATTUALE())=="ModuloPensile_Punto" ) { GOSUB Set_Gest_C009_CmpModulo_368 }

      if( NOME(ATTUALE())=="ModuloPensile_368" ) { GOSUB Set_Gest_C017_368 }

      if( VAR_VAL( ATTUALE(),"FLAG_Moduli_368" ) == 1 )
      {
         GOSUB Set_Gest_C017_368

         GOSUB Set_Gest_C087_368
         GOSUB Set_Gest_C088_368

         GOSUB Set_Gest_SIDE_368
      }

      //Luca 29/06/2021
      GOSUB Set_Gest_C008_Modulo_368

      //Luca 05/03/2021
      if( NOME(ATTUALE()) == "Modulo_368"
        | NOME(ATTUALE()) == "ModuloGiorno_368" )
      {
         GOSUB Set_Gest_C009_Modulo_368
         GOSUB PCF_Elements_RegoleEredita
      }

      //Luca 25/01/2021
      if( NOME(ATTUALE()) == "ModuloGlass_368" )
      {
         GOSUB Set_Gest_C008_ModuloGlass_368
      }
   }

   PROCEDURA Set_Gest_C017_368
   {
      if( ACTION() <= 0 | ACTION()==2 )  { EXITSUB() }

      //if( VAR_VAL_STR(ATTUALE(),"GEST_C017") == "" )  { EXITSUB() }

      //LZ 24/11/2021
      //if( VAR_VAL(ATTUALE(),"in_pcfto")==1 & ACTION() != 1064 ) { EXITSUB() }
      if( VAR_VAL(ATTUALE(),"in_pcfto")==1 & ACTION() != 1064 )
      {
         PP_PushPull = 0
         if( VAR_VAL_STR( ATTUALE(), "GEST_C017") == "PU001" ) { PP_PushPull = 1 }
         EXITSUB()
      }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C017") == 0 )
      {
         GEST_C017 = "AB002"

         if( VAR_VAL_STR(-1,"GEST_C017") != ""
           & VAR_VAL_STR(-1,"GEST_C017") != "__"  ) { GEST_C017 = VAR_VAL_STR(-1,"GEST_C017") }

         PP_PushPull = 0
         //LZ 29/07/2021: allineo subito la grafica
         if( GEST_C017 == "PU001" ) { PP_PushPull = 1 }
      }
      else
      {
         PP_PushPull = 0
         if( GEST_C017 == "PU001" ) { PP_PushPull = 1 }
      }

      //Luca 03/11/2020
      //- Un pensile sovrapposto di H368 può avere apertura solo push
      if( VAR_VAL(ATTUALE(),"FLAG_Sovrapposto") == 1  & Y == 368 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C017")==1 )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C017") }

         GEST_C017 = "PU001"
         PP_PushPull = 1
      }

      //attivo il PUSH PULL
      if( VAR_VAL(ATTUALE(),"PP_AttivaAuto") == 1 & VAR_VAL(ATTUALE(),"PP_Manuale") == 0 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C017")==1 )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C017") }

         GEST_C017 = "PU001"
         PP_PushPull = 1
      }

      //Luca 29/09/2021
      if( VAR_VAL(ATTUALE(),"NO_PushPull") == 1  )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C017")==1 )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C017") }
         GEST_C017 = "AB002"
         PP_PushPull = 0
      }

      VarAdd = "GEST_C017"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C009_PannelloLED_368
   {
      CAT_VM_var = "C009"
      CAT_VM_opz = "SM023;SM025;SM026"
      CAT_VM_sel = ""

      if( LED_Sopra == 1 )  { CAT_VM_sel = "SM023" }
      if( LED_Sotto == 1 )  { CAT_VM_sel = "SM025" }
      if( LED_Sopra == 1
        & LED_Sotto == 1 )  { CAT_VM_sel = "SM026" }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C008_PannelloLED_368
   {
      //if( IS_VarsUser__(ATTUALE(),"GEST_C008") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C008") }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM075;SM076;SM077;SM078;SM079"
      CAT_VM_sel = ""

      if( TLED_Lavorazione > 0 )
      {
         //Simone 14/04/2022
         if( VAR_VAL(ATTUALE(),"mis_std") == 0 )
         {
            CAT_VM_sel = "SM079"
            if( TLED_TipoLavorazione == 1 ) { CAT_VM_sel = "SM075" }
            if( TLED_TipoLavorazione == 2 ) { CAT_VM_sel = "SM076" }
         }
         else
         {
            CAT_VM_sel = "SM076"
         }
      }

      GOSUB Gest_CAT_VM
   }

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

      //if( IS_VarsUser__(ATTUALE(),"GEST_C008") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C008") }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM075;SM076;SM077;SM078;SM079"
      CAT_VM_sel = ""

      if( TLED_Lavorazione > 0 )
      {
         //Simone 14/04/2022
         if( VAR_VAL(ATTUALE(),"mis_std") == 0 )
         {
            CAT_VM_sel = "SM079"
            if( TLED_TipoLavorazione == 1 ) { CAT_VM_sel = "SM075" }
            if( TLED_TipoLavorazione == 2 ) { CAT_VM_sel = "SM076" }
         }
         else
         {
            CAT_VM_sel = "SM076"
         }
      }

      if( LED_Sopra == 1
        & LED_Sotto == 0 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM023" ) }

      if( LED_Sopra == 0
        & LED_Sotto == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM025" ) }

      if( LED_Sopra == 1
        & LED_Sotto == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM056" ) }

      GOSUB Gest_CAT_VM
   }

   //Simone 06/07/21
   PROCEDURA Set_Gest_C009_MensolaELLE_368
   {
      if( ACTION()<= 0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }

      if( IS_VarsUser__(ATTUALE(),"GEST_C009") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C009") }

      CAT_VM_var = "C009"
      CAT_VM_opz = "SM023;SM025;SM026"
      CAT_VM_sel = ""

      if( LED_Sopra == 1
        & LED_Sotto == 0 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM023" ) }

      if( LED_Sopra == 0
        & LED_Sotto == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM025" ) }

      if( LED_Sopra == 1
        & LED_Sotto == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM056" ) }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C008_ModuloGlass_368
   {
      //Luca 25/01/2021 inserimento
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C008") == 0 )
      {
         if( VAR_VAL_STR(ATTUALE(),"GEST_C008") == ""
           & VAR_VAL_STR(ATTUALE(),"GEST_C008") == "__" )
         {
            GEST_C008 = "SM062"
            VarAdd    = "GEST_C008"   GOSUB Add_TABER_VARSETTATE
         }
      }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM023;SM025;SM026;SM062;SM074;SM075;SM076;SM077;SM078;SM079;SM175;SM182;SM183"
      CAT_VM_sel = ""

      // Orizzontali
      wk_sel_oriz = ""
      if( LED_Sopra == 1)  { AddVal_CAT_VM_sel( wk_sel_oriz, "SM023") }
      if( LED_Sotto == 1)  { AddVal_CAT_VM_sel( wk_sel_oriz, "SM025") }
      if( LED_Sopra == 1
        & LED_Sotto == 1)  { wk_sel_oriz = "SM026" }
      AddVal_CAT_VM_sel( CAT_VM_sel, wk_sel_oriz)

      // Verticali
      wk_sel_vert = ""
      if( VAR_VAL_STR( idx_att, "GEST_C160") == "S0000")
      {
         LED_Sx = VAR_VAL( idx_att, "LED_Sx")
         LED_Dx = VAR_VAL( idx_att, "LED_Dx")

         if( LED_Sx == 1)  { AddVal_CAT_VM_sel( wk_sel_vert, "SM182") }
         if( LED_Dx == 1)  { AddVal_CAT_VM_sel( wk_sel_vert, "SM183") }
         if( LED_Sx == 1
           & LED_Dx == 1)  { wk_sel_vert = "SM175" }
      }
      AddVal_CAT_VM_sel( CAT_VM_sel, wk_sel_vert)

      if( CAT_VM_sel == "") { CAT_VM_sel = "SM062" }

      if( TLED_Attiva == 1 )
      {
         if( VAR_VAL(ATTUALE(),"mis_std") == 0 )
         {
            if( TLED_Tipologia == 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM079") }
            if( TLED_Tipologia == 1 ) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM075") }
            if( TLED_Tipologia == 2 ) { AddVal_CAT_VM_sel( CAT_VM_sel, "SM076") }
         }
         else
         {
            AddVal_CAT_VM_sel( CAT_VM_sel, "SM076")
         }
      }

      GOSUB Gest_CAT_VM
   }

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

      CAT_VM_var = "C008"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)

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

      CAT_VM_opz = "SPEC1"
      CAT_VM_sel = ""

      COMPONENTI2( "wk_giu", ATTUALE(), "G368_Giunzione")
      wk_giu_num = 1
      while( CAT_VM_sel == ""
           & wk_giu_num <= wk_giu)
      {
         SET_#(wk_giu[wk_giu_num])
         if( #REV != #REVISIONE) { CAT_VM_sel = CAT_VM_opz }

         wk_giu_num = wk_giu_num + 1
      }

      GOSUB Gest_CAT_VM
   }

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

      if( NOME(ATTUALE()) != "ModuloGiorno_368"
        & NOME(ATTUALE()) != "Modulo_368" )                          { EXITSUB() }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM056;SM057"
      CAT_VM_sel = ""

      if( VAR_VAL(ATTUALE(),"ConBifacciale") == 1 )
      {
         if( VAR_VAL_STR(ATTUALE(),"TipoBifacciale") == "ANTA BIFACCIALE" )  { CAT_VM_sel = "SM056" }
         if( VAR_VAL_STR(ATTUALE(),"TipoBifacciale") == "PANNELLO RETRO" )   { CAT_VM_sel = "SM057" }
      }

      GOSUB Gest_CAT_VM
   }

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

      if( IS_VarsUser__(ATTUALE(),"GEST_C009") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C009")
         DEL_VARS_USER(ATTUALE(),"GEST_C009")

         //GEST_C009 = ""
      }

      CAT_VM_var = "C009"
      CAT_VM_opz = "SM002;SM003;SM004;SM055;SM149"
      CAT_VM_sel = ""

      COMPONENTI2("wk_bar",ATTUALE(),"BarraTV_Modulo_368")
      if( wk_bar > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM055" ) }

      //Simone 24/11/2022
      COMPONENTI2("wk_scs",ATTUALE(),"ScassoGenerico_368")
      if( wk_scs > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM149" ) }

      GOSUB Gest_CAT_VM
   }

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

      if( IS_VarsUser__(ATTUALE(),"GEST_C009") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C009")
         DEL_VARS_USER(ATTUALE(),"GEST_C009")
         DEL_VAR(-1,"wk_cmd_CAT_VM")
      }

      if( ACTION()!=1064 )
      {
         if( NOME(ATTUALE()) == "Cop_368"
           | NOME(ATTUALE()) == "Fondo_368" )
         {
            wk_led1 = 0
            wk_led2 = 0
            COMPONENTI2("wk_led1",ATTUALE(),"Led_368")
            if( NOME(ATTUALE()) == "Fondo_368" ) { COMPONENTI2("wk_led2",PADRE(ATTUALE(),2),"Cuc_Led") }

            CAT_VM_var = "C009"
            CAT_VM_opz = "SM002;SM003;SM059"
            if( NOME(ATTUALE()) == "Cop_368"
              & UN_PADRE("ModuloPensile_Punto") ) { CAT_VM_opz = "SM002;SM003;SM131" }

            CAT_VM_sel = ""

            if( wk_led1 + wk_led2 > 0 )
            {
               wk_val = "SM002"
               if( NOME(ATTUALE()) == "Cop_368"
                 & UN_PADRE("ModuloPensile_Punto") ) { wk_val = "SM131" }

               AddVal_CAT_VM_sel( CAT_VM_sel , wk_val)
            }

            BOX_MODE(0)
            NEAR_GLOBALE2("wk_pcv",ATTUALE(),2,"Passacavi_368")
            if( wk_pcv > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM003" ) }

            //Simone 28/07/2022
            if( VAR_VAL(ATTUALE(),"Scasso_Cappa") == 1
              | VAR_VAL(ATTUALE(),"VAR_ConScassoCop") == 1 )
            {
               AddVal_CAT_VM_sel( CAT_VM_sel , "SM059" )
            }

            GOSUB Gest_CAT_VM
         }
      }

      if( NOME(ATTUALE()) == "Schiena_368"
        | NOME(ATTUALE()) == "FiancoSX_368"
        | NOME(ATTUALE()) == "FiancoDX_368"
        | NOME(ATTUALE()) == "DivisiorioVertLegLiv_368" )
      {
         gest_C009 = ""
         COMPONENTI2("wk_pcv",ATTUALE(),"Passacavi_368")
         //COMPONENTI2("wk_scs2",ATTUALE(),"ScassoGenerico_368")
         if( wk_pcv > 0 ) { gest_C009 = "SM003" }

         GEST_C009 = gest_C009
         VarAdd = "GEST_C009"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_Gest_C187_CmpModulo_368
   {
      // 0 - Controlli preliminari
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 ) { EXITSUB() }

      CAT_VM_var     = "C187"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)

      if( VAR_EXIST( ATTUALE(), CAT_VM_gestvar) == 0 )        { EXITSUB() }

      if( IS_VarsUser__( ATTUALE(), CAT_VM_gestvar) == 1 )
      {
         DEL_VAR_MODIFICATE( ATTUALE(), CAT_VM_gestvar)
         DEL_VARS_USER( ATTUALE(), CAT_VM_gestvar)
      }

      // 1 - Valori
      CAT_VM_opz = "SM164;SM165;SM166"
      CAT_VM_sel = ""

      wk_att_pdr     = PADRE( ATTUALE(), -1)
      wk_att_pdr_ref = GetTopLevelTipo( ATTUALE(), 1, $ins2_attrezzato + $ins2_vestito + $ins2_riempito)

      // 1.1 - Test
      wk_test_cmps = 3                                  wk_test_vals = 3
      wk_test_cmps[1] = "Miniwinch_368"                 wk_test_vals[1] = "SM164"
      wk_test_cmps[2] = "Cassetto_368|#VAR_Cestone==0"  wk_test_vals[2] = "SM165"
      wk_test_cmps[3] = "Cassetto_368|#VAR_Cestone==1"  wk_test_vals[3] = "SM166"

      wk_test_num = 1
      while( wk_test_num <= wk_test_cmps )
      {
         wk_test_cmp = wk_test_cmps[wk_test_num]
         wk_test_val = wk_test_vals[wk_test_num]

         STR_SPLIT( wk_test_cmp, "|", 1, "wk_test", ATTUALE() )
         wk_test_cmp = wk_test[1]

         wk_test_wkvar = STRCAT( "wk_", LOWER(wk_test_cmp))

         BOX_MODE(0)
         if( wk_att_pdr == wk_att_pdr_ref) { NEAR_GLOBALE2( wk_test_wkvar, ATTUALE(), 2, wk_test_cmp)    }
         else                              { NEAR_GLOBALE(  wk_test_wkvar, ATTUALE(), 2, 1, wk_test_cmp) }

         wk_test_wkval = VAR_VAL( ATTUALE(), wk_test_wkvar)

         wk_test_wkval_ok  = 0
         wk_test_wkval_num = 1
         while( wk_test_wkval_ok == 0
              & wk_test_wkval_num <= wk_test_wkval )
         {
            wk_test_wkval_att = VAR_VAL( ATTUALE(), GetArrayVar( wk_test_wkvar, wk_test_wkval_num))
            wk_test_wkval_pdr = GetTopLevelTipo( wk_test_wkval_att, 1, $ins2_attrezzato + $ins2_vestito + $ins2_riempito)
            wk_test_ret       = 1

            if( IS_IDX(wk_test_wkval_att)
              & wk_test_wkval_att != ATTUALE()
              & wk_test_wkval_pdr == wk_att_pdr_ref)
              {
               wk_test_if_num = 2
               while( wk_test_if_num <= wk_test)
               {
                  wk_test_if_att = wk_test[wk_test_if_num]
                  wk_test_if_att = STRCAT( "if( ", wk_test_if_att, ") { wk_test_ret = wk_test_ret + 1 }")

                  SET_#(wk_test_wkval_att)
                  wk_test_eval = EVAL( wk_test_if_att)

                  wk_test_if_num = wk_test_if_num + 1
               }

               if( wk_test_ret >= wk_test) { wk_test_wkval_ok = 1 }
            }

            wk_test_wkval_num = wk_test_wkval_num + 1
         }

         if( wk_test_wkval_ok > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , wk_test_val) }

         wk_test_num = wk_test_num + 1
      }

      GOSUB Gest_CAT_VM
   }


   //{ ********** WALL PANEL **********
   //Luca 15/04/2020
   PROCEDURA SistCostr_WallPanel
   {
      Spe_PanVet = 4
      Spe_PanMet = 2
      //pannello melaminico bianco - rovere
      Spe_Pan = 19

      Spe_Prof    = 8
      Spe_Velcro  = 3
      Spe_FHPL    = 6
      Lar_FHPL    = 25

      RieX_Pan    = 1.5
      RieY_Pan    = 1.5
      //Rientro pannello sp.19
      RieX_pan    = 13.5
      RieY_pan    = 13.5

      RieY_ProfInf = 7
      RieY_ProfSup = 18
      RieX_ProfLat = 17

      RieX_AttacLat = 30
      RieY_AttacSup = 28

      Lar_Att = 75
      Lar_AttBarra = 100
      Atl_Att = 125

      RieX_ProfSupChiusura = 15.5
      RieY_ProfSupChiusura = 10

      Scs_LimLat = 40
      if( VAR_VAL(ATTUALE(),"Tipologia_WP")==1 ) { Scs_LimLat = 50 }

      if( NOME(ATTUALE()) == "GlassMirror" )
      {
         Spe_PanVet = 6
         RieX_Pan   = 0
         RieY_Pan   = 0

         RieX_pan   = 30
         RieY_pan   = 30

         Scs_LimLat = 30 + 25
      }
   }

   PROCEDURA ConfiguraAgganci_WallPanel
   {
      Prof_1 = 0
      Prof_2 = 0
      Prof_3 = 0
      Prof_4 = 0
      Prof_5 = 0

      Prof_posx_1 = 0
      Prof_posx_2 = 0
      Prof_posx_3 = 0
      Prof_posx_4 = 0
      Prof_posx_5 = 0

      Attac_1 = 0
      Attac_2 = 0
      Attac_3 = 0

      Attac_posx_1 = 0
      Attac_posx_2 = 0
      Attac_posx_3 = 0

      Attac_inf = 0
      Attac_inf_posy = 0

      //********************
      //PROFILI HPL
      //********************
      if( Tipologia_WP==1 )
      {
         Prof_1 = 1
         Prof_2 = 1

         Prof_posx_1 = RieX_ProfLat
         Prof_posx_2 = X - RieX_ProfLat - Lar_FHPL

         Prof_posx_3 = X/2 - Lar_FHPL/2

         //Tre strisce
         //primo range / fascia:
         //con H compresa tra un minimo di 184 ed un massimo di 368,
         //e L compresa tra un minimo di 273 ed un massimo di 1840.
         //secondo range / fascia:
         //con H compresa tra un minimo di 369 ed un massimo di 736,
         //e L compresa tra un minimo di 273 ed un massimo di 1472.
         if( Y>=184 & Y<=368
           & X>=273 & X<=1840 ) { Prof_3 = 1 }

         if( Y>=369 & Y<=736
           & X>=273 & X<=1472 ) { Prof_3 = 1 }

         //Cinque strisce
         //primo range / fascia:
         //con H compresa tra un minimo di 184 e un massimo di 368,
         //e L compresa tra un minimo di 1841 ed un massimo di 2208.
         //secondo range / fascia:
         //con H compresa tra un minimo di 369 ed un massimo di 736,
         //e L compresa tra un minimo di 1473 ed un massimo di 2208.
         if( Y>=184 & Y<=368
           & X>=1841 & X<=2208 ) { Prof_3 = 1 Prof_4 = 1  Prof_5 = 1 }

         if( Y>=369 & Y<=736
           & X>=1473 & X<=2208 ) { Prof_3 = 1 Prof_4 = 1  Prof_5 = 1 }

         wk_dist_sx_cen = (Prof_posx_3 - Prof_posx_1 -  Lar_FHPL)
         wk_dist_cen_dx = (Prof_posx_2 - Prof_posx_3 - Lar_FHPL)

         Prof_posx_4 = Prof_posx_1 + Lar_FHPL + wk_dist_sx_cen/2 - Lar_FHPL/2
         Prof_posx_5 = Prof_posx_3 + Lar_FHPL + wk_dist_cen_dx/2 - Lar_FHPL/2

         EXITSUB()
      }

      //********************
      //PROFILI ALLUMINIO
      //********************
      Prof_1 = 1
      Prof_2 = 1

      Prof_posx_1 = RieX_ProfLat
      Prof_posx_2 = X - RieX_ProfLat - Spe_Prof

      if( X>=366 )  { Prof_3 = 1 }

      Prof_posx_3 = X/2 - Spe_Prof/2
      if( X>=1102 ) { Prof_posx_3 = X/2 + Lar_Att/2 + 5 }

      if( X>=1838 )
      {
         Prof_4 = 1
         Prof_5 = 1

         wk_dist_sx_cen = (Prof_posx_3 - Prof_posx_1 -  Spe_Prof)
         wk_dist_cen_dx = (Prof_posx_2 - Prof_posx_3 - Spe_Prof)

         Prof_posx_4 = Prof_posx_1 + Spe_Prof + wk_dist_sx_cen/2 - Spe_Prof/2
         Prof_posx_5 = Prof_posx_3 + Spe_Prof + wk_dist_cen_dx/2 - Spe_Prof/2
      }

      //********************
      //ATTACCAGLIE
      //********************
      Attac_1 = 1
      Attac_2 = 1

      if( X>=1102 ) { Attac_3 = 1 }

      Attac_posx_1 = RieX_AttacLat
      Attac_posx_2 = X - RieX_AttacLat - Lar_AttBarra
      Attac_posx_3 = X/2 - Lar_Att/2 - 25

      if( Y>=551 ) { Attac_inf = 1 }

      Attac_inf_posy = 530
      if( Y>=1157 ) { Attac_inf_posy = 1000 }
   }

   PROCEDURA AssRangeRid_WallPanel
   {
      if( $ATTIVA_DLL==0 )                               { EXITSUB() }

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

      if( VAR_VAL( ATTUALE(), "FLAG_CompostoGEN") == 1 ) { EXITSUB() }

      //Simone 07/07/21 - Condizione le regole di riduzione per Rev0
      if( VAR_Revisione == 0 )
      {
         nome_menu_x = STRCAT("DimXWP368_",STR(ATTUALE()))
         nome_menu_y = STRCAT("DimYWP368_",STR(ATTUALE()))

         #ifdef AGE;RIV
            y_min = 184   x_min = 368
            y_max = 736   x_max = 2208

            if( VAR_RangeDim==1 )
            {
               y_min = 737   x_min = 368
               y_max = 1104  x_max = 1472
            }

            if( VAR_RangeDim==2 )
            {
               y_min = 1105  x_min = 368
               y_max = 2208  x_max = 736
            }

            CR_X_min = x_min     CR_X_max = x_max
            CR_Y_min = y_min     CR_Y_max = y_max

            CreateMenuWallPanel(nome_menu_x,CR_X_min,CR_X_max)
            CreateMenuWallPanel(nome_menu_y,CR_Y_min,CR_Y_max)

            VAR_SET_MENU(ATTUALE(),"X",STRCAT(nome_menu_x,"(",STR(x_min),"-",STR(x_max),")"))
            VAR_SET_MENU(ATTUALE(),"Y",STRCAT(nome_menu_y,"(",STR(y_min),"-",STR(y_max),")"))
         #endif

         #ifndef AGE;RIV
            //VarDimX = "X"   ValDeltaX = 0   VarMenuX = "DimWP368"  VarMenuFissoX = ""   VarFlgChangeX = 1
            //VarDimY = "Y"   ValDeltaY = 0   VarMenuY = "DimWP368"  VarMenuFissoY = ""   VarFlgChangeY = 1
            VarDimX = "X"   ValDeltaX = 0   VarMenuX = nome_menu_x  VarMenuFissoX = ""   VarFlgChangeX = 1
            VarDimY = "Y"   ValDeltaY = 0   VarMenuY = nome_menu_y  VarMenuFissoY = ""   VarFlgChangeY = 1

            CtrlRangeRidM2G(ATTUALE(),"X")
            CtrlRangeRidM2G(ATTUALE(),"Y")

            CreateMenuWallPanel(nome_menu_x,CR_X_min,CR_X_max)
            CreateMenuWallPanel(nome_menu_y,CR_Y_min,CR_Y_max)

            if( VAR_RangeDim==2 )
            {
               if( Y>1445 )
               {
                  x_min = 273
                  x_max = 1445
                  CR_X_min = x_min     CR_X_max = x_max
                  CreateMenuWallPanel(nome_menu_x,CR_X_min,CR_X_max)

                  VAR_SET_MENU(ATTUALE(),"X",STRCAT(nome_menu_x,"(",STR(x_min),"-",STR(x_max),")"))
               }
            }
         #endif

         if( ACTION()>0 & ACTION()!=2
           & IS_VAR_FIXED(ATTUALE(),"X")==0
           & IS_VAR_FIXED(ATTUALE(),"Y")==0
           & $CNP__==0 )
         {
            CHIEDI(ATTUALE(),"X")
            CHIEDI(ATTUALE(),"Y")
         }
      }
      else
      //Simone 07/07/21 - Gestisco i limiti di riduzione per Rev1
      {
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""   VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""   VarMenuFissoY = ""   VarFlgChangeY = 1

         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Y")

         //Utilizzo le misure nominali
         CR_X_min = CR_X_min + 2*RieX_Pan     CR_X_max = CR_X_max + 2*RieX_Pan
         CR_Y_min = CR_Y_min + 2*RieY_Pan     CR_Y_max = CR_Y_max + 2*RieY_Pan

         VAR_SET_MENU(ATTUALE(),"X",STRCAT("(",STR(CR_X_min),"-",STR(CR_X_max),")"))
         VAR_SET_MENU(ATTUALE(),"Y",STRCAT("(",STR(CR_Y_min),"-",STR(CR_Y_max),")"))
      }

      if( VAR_VAL( ATTUALE(), "FLAG_Speciale") > 0 ) { EXITSUB() }

      if( ACTION()>0 & ACTION()!=2 & $OnLoadOrder==0 & $CNP__==0 )
      {
         //controllo dimensioni
         if( VAR_EXIST(ATTUALE(),"CR_X_min")>0 )
         {
            if( X<CR_X_min | X>CR_X_max ) { CHIEDI(ATTUALE(),"X") }
            if( Y<CR_Y_min | Y>CR_Y_max ) { CHIEDI(ATTUALE(),"Y") }
         }
      }
   }

   //Luca 16/04/2020
   PROCEDURA CtrlPosizionaScassi_WallPanel
   {
      if( $ATTIVA_DLL==0 ) { EXITSUB() }

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

      idx_pdr = PADRE(ATTUALE(),1)
      if( NOME(idx_pdr)!="WallPanel_368" )  { EXITSUB() }

      DEL_VAR(ATTUALE(),"coll*")

      BOX_MODE(0)
      //COLLIDE2(idx_cont_coll,"coll_tmp","ContCtrlScassi_WallPanel")
      COLLIDE2(ATTUALE(),"coll_tmp","ContCtrlScassi_WallPanel")

      //elimino il contctrscassi dello scasso stesso
      coll = 0
      i = 1
      while ( i<=coll_tmp )
      {
         if( PADRE(coll_tmp[i],1)!=ATTUALE() )
         {
            ne = coll + 1
            coll = ne
            coll[ne] = coll_tmp[i]
         }

         i = i + 1
      }

      x_pan = VAR_VAL(idx_pdr,"Xr")
      y_pan = VAR_VAL(idx_pdr,"Yr")

      //scasso fuori pannello
      scasso_fuori = 0
      if( FormaScasso==0 )
      {
         if( OffsetX<0 | OffsetX + X > x_pan  )  { scasso_fuori = 1 }
         if( OffsetY<0 | OffsetY + Y > y_pan  )  { scasso_fuori = 1 }
      }
      else
      {
         wk_xmax = Offset_CilX + Diametro/2
         wk_ymax = Offset_CilY + Diametro/2
         if( Offset_CilX<0 | wk_xmax > x_pan  )  { scasso_fuori = 1 }
         if( Offset_CilY<0 | wk_ymax > y_pan  )  { scasso_fuori = 1 }
      }

      if( coll>0 | scasso_fuori==1 )
      {
         VAR_Modifica = 1
         GOSUB ModificaPosizioneScassi_WallPanel
      }
      else
      {
         //quando la posizione è corretta e ho la dialog "aperta", ripristino la vista
         if( VAR_VAL(-1,"wk_DLG_Scassi_Open")==1 )
         {
            GOSUB ModificaPosizioneScassi_DialogRipristina_WallPanel
            $wk_DLG_Scassi_Open = 0
         }
      }
   }

   //Luca 17/04/2020
   //richiamata da bottone oppure da procedura CtrlPosizionaScassi_WallPanel ricorsivamente
   PROCEDURA ModificaPosizioneScassi_WallPanel
   {
      if( VAR_Modifica==0 )  { EXITSUB() }

      //se forzata arriva da modifica manuale utente
      //altrimenti da controllo collisioni
      $wk_DLG_da_collisioni = 1
      if( IS_VAR_FIXED(ATTUALE(),"VAR_Modifica")==1 ) {  $wk_DLG_da_collisioni = 0 }

      DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Modifica")
      VAR_Modifica = 0

      VediIngScasso = 1

      $wk_DLG_Scassi_ripristina_vista = 0

      idx_pdr = PADRE(ATTUALE(),1)

      //SALVO LA VISTA DELLA CAMERA
      VIEW_CAMERA(0)

      //ATTIVO LA GRAFICA DEI LIMITI
      if( IS_VAR_FIXED(idx_pdr,"VediLimiti") ) { DEL_VAR_MODIFICATE(idx_pdr,"VediLimiti") }

      VAR_VALUE_SET(idx_pdr,"VediLimiti",1)
      VediLimiti = 0
      COMANDO2(STRCAT("Procedura Ric_ContCtrlScassi_WallPanel ",STR(idx_pdr)))

      //solo le la dialog non è gia 'aperta'
      //wk_DLG_Scassi_Open quando il controllo collisione ha dato esito positivo
      if( VAR_VAL(-1,"wk_DLG_Scassi_Open")==0 )
      {
         //IMPOSTO LA VISTA SOLO SU PANNELLO
         COMANDO2("Show none")
         COMANDO2("M4_Show Ambienti Hide")
         COMANDO2("Show Riferimento Off")
         COMANDO2(STRCAT("Show strutture idx add ",STR(idx_pdr)))
         COMANDO2(STRCAT("setviewhoops aaa front"))
         wk_ang_wp = ANG_TOT2(idx_pdr)
         wk_view_orbit = STRCAT( STR(-1*wk_ang_wp) ," 0" )
         COMANDO2(STRCAT("SetViewHoops view orbit ",wk_view_orbit))
      }

      GOSUB ModificaPosizioneScassi_Dialog_WallPanel

      VediIngScasso = 0
   }

   PROCEDURA ModificaPosizioneScassi_DialogRipristina_WallPanel
   {
      //DISATTIVO LA GRAFICA DEI LIMITI
      VAR_VALUE_SET(idx_pdr,"VediLimiti",0)
      COMANDO2(STRCAT("Procedura Ric_ContCtrlScassi_WallPanel ",STR(idx_pdr)))
      DEL_VAR(ATTUALE(),"VediLimiti")
      //COMANDO2(STRCAT("Procedura Ric_ContCtrlScassi_WallPanel"))

      //RIPRISITO LA VISTA CON ZOOM ALL
      COMANDO2("Show Abilita On")
      VIEW_CAMERA(1)
      COMANDO2("M4_show Ambienti Show")
      COMANDO2("Show All")
      COMANDO2("ZOOMHOOPS")
      COMANDO2("ZOOMHOOPS 0.9")
   }

   PROCEDURA ModificaPosizioneScassi_Dialog_WallPanel
   {
      $wk_DLG_Scassi_Open = 1

      debug = 0

      #ifdef TE
         debug = 1
      #endif

      $wk_title = MSG(1112)

      $wk_dlg_idx = ATTUALE()

      $wk_lbl_1   = STRCAT("  " ,MSG(1113),"  ")
      $wk_lbl_2   = STRCAT("  " ,MSG(1114) ,"  ")
      $wk_lbl_2a  = MSG(1115)
      if( FormaScasso==2 ) { $wk_lbl_2a  = MSG(1117) }

      $wk_lbl_2b  = MSG(1116)

      $wk_lbl_ctrl = ""
      if( $wk_DLG_da_collisioni==1 ) { $wk_lbl_ctrl = STRCAT(MSG(1090)," ",MSG(1118)) }

      $wk_scs_x    = STR(X)
      $wk_scs_y    = STR(Y)
      $wk_scs_rag  = STR(Raggio)

      $wk_scs_offx = STR(OffsetX)
      $wk_scs_offy = STR(OffsetY)

      $wk_scs_diam     = STR(Diametro)
      $wk_scs_cil_offx = STR(Offset_CilX)
      $wk_scs_cil_offy = STR(Offset_CilY)

      $wk_scs_3cil_dia1 = STR(Diam2)
      $wk_scs_3cil_dia2 = STR(Diam1)
      $wk_scs_3cil_InAX = STR(InterasseX)
      $wk_scs_3cil_InAY = STR(InterasseY)


      $wk_enable_ret = 1
      $wk_enable_cil = 0
      $wk_enable_3ci = 0

      //Frame posizione in comune tra rettangolo e 3 cilindri
      $wk_enable_pos_ret_3ci = 1

      if( FormaScasso==1 )
      {
         $wk_enable_ret = 0
         $wk_enable_cil = 1
         $wk_enable_3ci = 0

         $wk_enable_pos_ret_3ci = 0
      }

      if( FormaScasso==2 )
      {
         $wk_enable_ret = 0
         $wk_enable_cil = 0
         $wk_enable_3ci = 1
         $wk_enable_pos_ret_3ci = 1
      }

      $wk_enale_raggio = 1
      if( VAR_VAL(idx_pdr,"Fin_WP")==1 )
      {
         $wk_enale_raggio = 0
      }

      GOSUB LimitiPosizioneScassiWallPanel

      $wk_scs_dia_min = 50
      $wk_scs_dia_max = 400

      $wk_scs_y    = STR(Y)
      $wk_scs_rag  = STR(Raggio)

      $wk_scs_offx = STR(OffsetX)
      $wk_scs_offy = STR(OffsetY)

      $wk_scs_diam     = STR(Diametro)
      $wk_scs_cil_offx = STR(Offset_CilX)
      $wk_scs_cil_offy = STR(Offset_CilY)


      //$wk_posx_leg = 30
      $wk_posx_lab = 20
      $wk_posx_edt = 200
      $wk_posx_lim = 230

      $wk_dimx_lim = 100
      $wk_dimx_leg = 30
      $wk_dimx_edt = 50

      $wk_lim_ok = 0
      while( $wk_lim_ok==0 )
      {
         COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|ScassiWallPanel",APICI()))
         if($DlgResult__==0 )
         {
            $wk_lim_ok = 2
            //solo in inserimento
            if( VAR_VAL(-1,"wk_inserimento")==1 )
            {
               $wk_lim_ok = 0
            }
            else
            {
               if( VAR_VAL(-1,"wk_DLG_Scassi_Open")==1 )
               {
                  GOSUB ModificaPosizioneScassi_DialogRipristina_WallPanel
                  $wk_DLG_Scassi_Open = 0
               }
            }

         }
         else
         {
            //controllo i limiti
            GOSUB LimitiPosizioneScassiWallPanel

            $wk_lim_ok = 1

            if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  $wk_lim_ok=",STR($wk_lim_ok)," | CONTROLLI ---- ModificaPosizioneScassi_Dialog_WallPanel")) }

            if( FormaScasso==0 )
            {
               //se non rispetta i limiti, riprisino il valore precedente
               if( ATOI($wk_scs_x) < $wk_scs_x_min
                 | ATOI($wk_scs_x) > $wk_scs_x_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_x    = STR(X)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore X non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( ATOI($wk_scs_y) < $wk_scs_y_min
                 | ATOI($wk_scs_y) > $wk_scs_y_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_y    = STR(Y)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore Y non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( $wk_enale_raggio==1 )
               {
                  if( ATOI($wk_scs_rag) < $wk_scs_rag_min
                    | ATOI($wk_scs_rag) > $wk_scs_rag_max  )
                  {
                     $wk_lim_ok = 0
                     $wk_lim_ok = 3
                     $wk_scs_rag  = STR(Raggio)
                     if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore Raggio non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
                  }
               }
               if( ATOI($wk_scs_offx) < $wk_scs_offx_min
                 | ATOI($wk_scs_offx) > $wk_scs_offx_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_offx = STR(OffsetX)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetX non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( ATOI($wk_scs_offy) < $wk_scs_offy_min
                 | ATOI($wk_scs_offy) > $wk_scs_offy_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_offy = STR(OffsetY)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetY non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
            }

            if( FormaScasso==1 )
            {
               //se non rispetta i limiti, riprisino il valore precedente
               if( ATOI($wk_scs_diam) < $wk_scs_diam_min
                 | ATOI($wk_scs_diam) > $wk_scs_diam_max )
               {
                  $wk_lim_ok   = 0
                  $wk_lim_ok = 3
                  $wk_scs_diam = STR(Diametro)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore Diametro non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( ATOI($wk_scs_cil_offx) < $wk_scs_cil_offx_min
                 | ATOI($wk_scs_cil_offx) > $wk_scs_cil_offx_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_cil_offx = STR(Offset_CilX)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetX Cil non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( ATOI($wk_scs_cil_offy) < $wk_scs_cil_offy_min
                 | ATOI($wk_scs_cil_offy) > $wk_scs_cil_offy_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_cil_offy = STR(Offset_CilY)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetY Cil non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
            }

            if( FormaScasso==2 )
            {
               ////se non rispetta i limiti, riprisino il valore precedente
               //if( ATOI($wk_scs_x) < $wk_scs_x_min
               //  | ATOI($wk_scs_x) > $wk_scs_x_max )
               //{
               //   $wk_lim_ok = 0
               //   $wk_scs_x    = STR(X)
               //   if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore X non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               //}
               //if( ATOI($wk_scs_y) < $wk_scs_y_min
               //  | ATOI($wk_scs_y) > $wk_scs_y_max )
               //{
               //   $wk_lim_ok = 0
               //   $wk_scs_y    = STR(Y)
               //   if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore Y non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               //}
               //if( $wk_enale_raggio==1 )
               //{
               //   if( ATOI($wk_scs_rag) < $wk_scs_rag_min
               //     | ATOI($wk_scs_rag) > $wk_scs_rag_max  )
               //   {
               //      $wk_lim_ok = 0
               //      $wk_scs_rag  = STR(Raggio)
               //      if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore Raggio non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               //   }
               //}
               if( ATOI($wk_scs_offx) < $wk_scs_offx_min
                 | ATOI($wk_scs_offx) > $wk_scs_offx_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_offx = STR(OffsetX)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetX non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
               if( ATOI($wk_scs_offy) < $wk_scs_offy_min
                 | ATOI($wk_scs_offy) > $wk_scs_offy_max )
               {
                  $wk_lim_ok = 0
                  $wk_lim_ok = 3
                  $wk_scs_offy = STR(OffsetY)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  Valore OffsetY non Valido ---- ModificaPosizioneScassi_Dialog_WallPanel")) }
               }
            }

            if( $wk_lim_ok==3 )
            {
               $wk_lim_ok = 0
               $wk_lbl_ctrl = STRCAT(MSG(1090)," ",MSG(1132))
            }
         }
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  $wk_lim_ok=",STR($wk_lim_ok)," | $wk_scs_offx=",$wk_scs_offx," | CONTROLLI ---- ModificaPosizioneScassi_Dialog_WallPanel")) }


      if($wk_lim_ok==2 ) { EXITSUB() }


      if( VAR_VAL(-1,"wk_inserimento")==1 )
      {
         COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(ATTUALE())))
         $wk_inserimento = 0
      }

      X           = ATOI($wk_scs_x)
      Y           = ATOI($wk_scs_y)
      Raggio      = ATOI($wk_scs_rag)
      OffsetX     = ATOI($wk_scs_offx)
      OffsetY     = ATOI($wk_scs_offy)

      Diametro    = ATOI($wk_scs_diam)
      Offset_CilX = ATOI($wk_scs_cil_offx)
      Offset_CilY = ATOI($wk_scs_cil_offy)

      $wk_cmd = "VAR_CHANGE 1 "
      $wk_cmd = STRCAT($wk_cmd," ",STR(ATTUALE()))
      if( FormaScasso==0 )
      {
         $wk_cmd = STRCAT($wk_cmd," X="      ,$wk_scs_x)
         $wk_cmd = STRCAT($wk_cmd," Y="      ,$wk_scs_y)
         $wk_cmd = STRCAT($wk_cmd," Raggio=" ,$wk_scs_rag)
         $wk_cmd = STRCAT($wk_cmd," OffsetX=",$wk_scs_offx)
         $wk_cmd = STRCAT($wk_cmd," OffsetY=",$wk_scs_offy)
      }
      if( FormaScasso==1 )
      {
         $wk_cmd = STRCAT($wk_cmd," Diametro=",$wk_scs_diam)
         $wk_cmd = STRCAT($wk_cmd," Offset_CilX=",$wk_scs_cil_offx)
         $wk_cmd = STRCAT($wk_cmd," Offset_CilY=",$wk_scs_cil_offy)
      }
      if( FormaScasso==2 )
      {
         $wk_cmd = STRCAT($wk_cmd," OffsetX=",$wk_scs_offx)
         $wk_cmd = STRCAT($wk_cmd," OffsetY=",$wk_scs_offy)
      }

      COMANDO2($wk_cmd)

      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()), " //da ModificaPosizioneScassi_Dialog_WallPanel"))

      ControlloCollisioni = 1
   }

   PROCEDURA LimitiPosizioneScassiWallPanel
   {
      $wk_scs_x_min = 50
      $wk_scs_x_max = 400

      $wk_scs_y_min = 50
      $wk_scs_y_max = 400

      //$wk_scs_rag_min = 5
      $wk_scs_rag_min = 7
      $wk_scs_rag_max = (X-10)/2
      if( Y<X ) { $wk_scs_rag_max = (Y-10)/2 }

      $wk_scs_offx_min = VAR_VAL(idx_pdr,"Scs_LimLat")
      $wk_scs_offx_max = VAR_VAL(idx_pdr,"Xr") - X - VAR_VAL(idx_pdr,"Scs_LimLat")

      $wk_scs_offy_min = VAR_VAL(idx_pdr,"Scs_LimLat")
      $wk_scs_offy_max = VAR_VAL(idx_pdr,"Yr") - Y - $wk_scs_offy_min

      //3 cilindri
      if( FormaScasso==2 )
      {
         $wk_scs_offx_min = 40 + InterasseX/2 + Diam1/2
         $wk_scs_offx_max = VAR_VAL(idx_pdr,"Xr") - $wk_scs_offx_min

         $wk_scs_offy_min = VAR_VAL(idx_pdr,"Scs_LimLat") + Diam2/2
         $wk_scs_offy_max = VAR_VAL(idx_pdr,"Yr") - Y - 40 + Diam2/2
      }

      $wk_scs_diam_min = 50
      $wk_scs_diam_max = 400

      $wk_scs_cil_offx_min = Diametro/2 + VAR_VAL(idx_pdr,"Scs_LimLat")
      $wk_scs_cil_offx_max = VAR_VAL(idx_pdr,"X") - $wk_scs_cil_offx_min

      $wk_scs_cil_offy_min = Diametro/2 + VAR_VAL(idx_pdr,"Scs_LimLat")
      $wk_scs_cil_offy_max = VAR_VAL(idx_pdr,"Y") - $wk_scs_cil_offx_min

      $wk_scs_x_range        = STRCAT("[ " ,STR($wk_scs_x_min)       ," - ",STR($wk_scs_x_max)       ," ]")
      $wk_scs_y_range        = STRCAT("[ " ,STR($wk_scs_y_min)       ," - ",STR($wk_scs_y_max)       ," ]")
      $wk_scs_rag_range      = STRCAT("[ " ,STR($wk_scs_rag_min)     ," - ",STR($wk_scs_rag_max)     ," ]")
      $wk_scs_offx_range     = STRCAT("[ " ,STR($wk_scs_offx_min)    ," - ",STR($wk_scs_offx_max)    ," ]")
      $wk_scs_offy_range     = STRCAT("[ " ,STR($wk_scs_offy_min)    ," - ",STR($wk_scs_offy_max)    ," ]")
      $wk_scs_diam_range     = STRCAT("[ " ,STR($wk_scs_diam_min)    ," - ",STR($wk_scs_diam_max)    ," ]")
      $wk_scs_cil_offx_range = STRCAT("[ " ,STR($wk_scs_cil_offx_min)," - ",STR($wk_scs_cil_offx_max)," ]")
      $wk_scs_cil_offy_range = STRCAT("[ " ,STR($wk_scs_cil_offy_min)," - ",STR($wk_scs_cil_offy_max)," ]")
   }

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

      CAT_VM_var = "C008"
      CAT_VM_opz = "TP008;TP025;TP026;TP027;TP028;SM075;SM076;SM077;SM078;SM079"
      CAT_VM_sel = ""

      COMPONENTI2("wk_scs", ATTUALE(), "Scasso_WallPanel")
      if( wk_scs==1 )  { CAT_VM_sel = "TP008" }
      if( wk_scs==2 )  { CAT_VM_sel = "TP025" }
      if( wk_scs==3 )  { CAT_VM_sel = "TP026" }
      if( wk_scs==4 )  { CAT_VM_sel = "TP027" }
      if( wk_scs==5 )  { CAT_VM_sel = "TP028" }

      //Simone 02/07/21 - Gestione trasformatori
      wk_val_trasf = ""
      if( TLED_Lavorazione > 0 )
      {
         //Simone 14/04/2022
         if( VAR_VAL( ATTUALE(), "mis_std") == 0 )
         {
            wk_val_trasf = "SM079"
            if( TLED_TipoLavorazione == 1 ) { wk_val_trasf = "SM075" }
            if( TLED_TipoLavorazione == 2 ) { wk_val_trasf = "SM076" }
         }
         else
         {
            wk_val_trasf = "SM076"
         }
      }

      if( wk_val_trasf != "" ) { AddVal_CAT_VM_sel( CAT_VM_sel , wk_val_trasf) }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C009_WallPanel
   {
      CAT_VM_var = "C009"
      CAT_VM_opz = "SM023;SM025;SM026"
      CAT_VM_sel = ""

      if( LED_Sopra == 1 )  { CAT_VM_sel = "SM023" }
      if( LED_Sotto == 1 )  { CAT_VM_sel = "SM025" }
      if( LED_Sopra == 1
        & LED_Sotto == 1 )  { CAT_VM_sel = "SM026" }

      GOSUB Gest_CAT_VM
   }

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

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM058"
      CAT_VM_sel = ""

      COMPONENTI2( "wk_scs", ATTUALE(), "Scasso_WallPanel")
      if( wk_scs>0 )  { CAT_VM_sel = "SM058" }

      GOSUB Gest_CAT_VM
   }

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

      if( VAR_EXIST(ATTUALE(),"x_prec")==0 )             { x_prec = X }
      if( VAR_EXIST(ATTUALE(),"y_prec")==0 )             { y_prec = Y }
      if( VAR_EXIST(ATTUALE(),"Tipologia_WP_prec")==0 )  { Tipologia_WP_prec = Tipologia_WP }

      if( x_prec != X
        | y_prec != Y
        | Tipologia_WP_prec != Tipologia_WP )
      {
         x_prec = X
         y_prec = Y
         Tipologia_WP_prec = Tipologia_WP

         COMPONENTI2("wk_scs",ATTUALE(),"Scasso_WallPanel")

         if( wk_scs>0
           & VAR_EXIST( ATTUALE(), "idx_blocco_agg") ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_blocco_agg) , " //da CtrlScassi_WallPanel")) }

         i = 1
         while ( i<=wk_scs  )
         {
            SET_#(wk_scs[i])
            #RigeneraScasso=1
            COMANDO(STRCAT("RICALCOLA_UNA ",STR(wk_scs[i]) , " //da CtrlScassi_WallPanel"))
            //COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(wk_scs[i])))
            i = i + 1
         }
      }
   }
   //} ********** WALL PANEL **********

   //{ ********** 368 LIVING **********
   PROCEDURA GestionaleFusto_368
   {
      if( NO_GEST==1 )
      {
         GEST_CODICE = ""
         RADICE = ""
         GOSUB Stato_7

         DescEdit__  = MSG(1003)
         HIDE = 3

         EXIT()
      }


      HIDE_ON_EDIT(ATTUALE(),"GEST_*",1)

      SET_GEST_STATO(ATTUALE(),7,0)
      FLAG_RADICE = $FLAG_STANDARD

      gest_codice_prec = VAR_VAL_STR(ATTUALE(),"GEST_CODICE")

      if( IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0)
      {
         if( VAR_VAL_STR(PADRE(ATTUALE(),1),"ORD_COD") != "" ) { cod_padre   = VAR_VAL_STR(PADRE(ATTUALE(),1),"ORD_COD") }
         else
         {
            cod_padre = VAR_VAL_STR(PADRE(ATTUALE(),1),"cmp_name")

            //Luca 14/02/2022 correggo i codici di eventuali composto con #
            pos = STR_INDEX_OF(cod_padre,0,"#")
            if( pos>0 ) { cod_padre = LEFT(cod_padre,pos) }
         }

         //LZ 25/08/2021
         if( VAR_VAL( ATTUALE(), "FLAG_Moduli_368") == 1 )
         {
            //elimino la prima lettera del codice
            cod_fusto = STRMID(1,STRLEN(cod_padre),cod_padre)

            GEST_CODICE = STRCAT("X",cod_fusto)
         }
         else
         {
            GEST_CODICE = STRCAT("F",cod_padre)
         }
      }

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

      //Simone 17/03/2022
      if( UN_PADRE("ComodinoxTelaio")
        & $OnLoadOrder2 == 1 )
      {
         flag_CAMBIA_VAR = 1
      }

      GOSUB CAMBIA_VAR
   }

   PROCEDURA CtrlModuli_368
   {
      if( ACTION()<=0 | ACTION()==2 | COMPONENDO() )  { EXITSUB() }

      GOSUB SettaPosizione_368

      if( $OnLoadOrder )                              { EXITSUB() }

      idx_test = ATTUALE()
      match = "Modulo*368"
      dove  = "*"
      GOSUB VICINESXDX_cuc

      //Luca 28/07/2022 aggiorno qui in quanto mi potrebbero servire gli idx vicini
      //GOSUB SettaPosizione_368

      ConSostegnoVetro = 0
      idx_sost_vetro   = -1

      //LZ 26/07/2021: 36e8 sideboard
      VAR_SostegnoOmega = 0
      idx_supp_omega = -1

      if( VAR_EXIST(ATTUALE(),"idx_cnear_dw") )
      {
         NEAR_GLOBALE2("wk_sostv",idx_cnear_dw,2,"SostegnoVetro_*")
         if( wk_sostv > 0  )
         {
            ConSostegnoVetro = 1
            if( UN_PADRE2(wk_sostv[1],"GruppoSostegniVetro_368")
              | UN_PADRE2(wk_sostv[1],"SetVetriContenitore_AIR") ) { idx_sost_vetro = PADRE(wk_sostv[1],1) }
            else                                                   { idx_sost_vetro = wk_sostv[1] }
         }

         //LZ 26/07/2021: 36e8 sideboard
         NEAR_GLOBALE2("wk_omega",idx_cnear_dw,10,"*Omega*")

         if( wk_omega > 0 )
         {
            VAR_SostegnoOmega = 1
            idx_supp_omega = wk_omega[1]
         }
      }

      GOSUB SettaPosizione_368

      //Simone 27/01/2023
      COMPONENTI2("wk_mas_antirib",ATTUALE(),"Massello_Antiribaltamento")

      GOSUB CtrlPosizione_ModuliTerra_368

      //Luca 25/09/2020 verifico presenza pannello per LED
      //PannelloRetroLED = 0
      //COMPONENTI2( "pan" , ATTUALE() , "PannelloRetroXLED_368" )
      //if( pan > 0 ) { PannelloRetroLED = 1 }
      //Luca 22/10/2020

      if( VAR_EXIST(ATTUALE(),"idx_cnear_rt") )
      {
         if( IS_IDX(idx_cnear_rt) )
         {
            idx_pannelloLED = -1
            FLAG_ConPannelloLED = 0
            NEAR_GLOBALE2("pan",idx_cnear_rt,2,"PannelloRetroXLED_368")
            if( pan > 0 )
            {
               idx_pannelloLED    = pan[1]
               FLAG_ConPannelloLED = 1
            }
         }
      }

      //Simone 21/06/2022 - Per trasfrmatore led sottopensile, uno per contenitore
      if( VAR_EXIST(ATTUALE(),"idx_cnear_up")
        & VAR_EXIST(ATTUALE(),"idx_cnear_dw") )
      {
         NEAR_GLOBALE2("wk_led_fres_up",idx_cnear_up,1,"Led_368")
         NEAR_GLOBALE2("wk_led_fres_dw",idx_cnear_dw,1,"Led_368")

         wk_led_cop  = 0
         wk_led_fon  = 0
         wk_led_fres = 0

         if( wk_led_fres_up > 0 ) { wk_led_cop = 1 }
         if( wk_led_fres_dw > 0 ) { wk_led_fon = 1 }

         wk_led_fres = wk_led_cop + wk_led_fon

         Trasformatore_Led = 0
         if( wk_led_fres > 0 ) { Trasformatore_Led = 1 }
      }

      //Luca 07/10/2020
      //GOSUB Ctrl_Attaccaglie_Moduli_368

      //Luca 07/10/2020
      GOSUB Ctrl_PresenzaBifacciale_Moduli_368

      GOSUB Ctrl_PresenzaTop_Moduli_368

      //Luca 29/12/2020
      if( VAR_EXIST(ATTUALE(),"idx_cnear_up")
        & VAR_EXIST(ATTUALE(),"idx_cnear_dw") )
      {
         idx_sopra = -1
         idx_sotto = -1
         FLAG_ConModuloSopra = 0
         FLAG_ConModuloSotto = 0
         NEAR_GLOBALE2("msopra",idx_cnear_up,2,"Modu*368")
         NEAR_GLOBALE2("msotto",idx_cnear_dw,2,"Modu*368")
         i = 1
         while ( i <= msopra )
         {
            if( msopra[i] != ATTUALE() )
            {
               FLAG_ConModuloSopra = 1
               idx_sopra = msopra[i]

               //Aggiorno al volo i riferimenti dell'altro contenitore
               if( IsIdx( idx_sopra, "idx_sotto") == 0
                 & VAR_EXIST( idx_sopra, "idx_sotto")
                 & VAR_EXIST( idx_sopra, "FLAG_ConModuloSotto"))
               {
                  VAR_VALUE_SET( idx_sopra, "FLAG_ConModuloSotto", 1)
                  VAR_VALUE_SET( idx_sopra, "idx_sotto", ATTUALE())
               }
            }
            i = i + 1
         }
         i = 1
         while ( i <= msotto  )
         {
            if( msotto[i] != ATTUALE()
              & NOME(msotto[i]) != "ModuloMadiaGlass_368" )
            {
               FLAG_ConModuloSotto = 1
               idx_sotto = msotto[i]

               //Aggiorno al volo i riferimenti dell'altro contenitore
               if( IsIdx( idx_sotto, "idx_sopra") == 0
                 & VAR_EXIST( idx_sotto, "idx_sopra")
                 & VAR_EXIST( idx_sotto, "FLAG_ConModuloSopra"))
               {
                  VAR_VALUE_SET( idx_sotto, "FLAG_ConModuloSopra", 1)
                  VAR_VALUE_SET( idx_sotto, "idx_sopra", ATTUALE())
               }
            }
            i = i + 1
         }
      }

      //Luca 09/10/2020
      if( NOME(ATTUALE()) == "Modulo_368" )
      {
         if( Tipo368 == "368-CES" & X == 1104 & Y == 368 )
         {
            VAR_DivVerticale = 0
            if( ConPushPull == 1 )  { VAR_DivVerticale = 3 }
         }
      }

      //Luca 15/11/2022
      GOSUB TWEB_ScriviLivelliMuro
   }

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

      AGGANCIATI("wk_bif","*",ATTUALE())

      i = 1
      while ( i<=wk_bif  )
      {
         if( NOME(wk_bif[i])=="AntaBifacciale_368"
           | NOME(wk_bif[i])=="PannelloRetroXLED_368"  )
         {
            COMANDO(STRCAT("DELETE ",STR(wk_bif[i])," //cancella ",NOME(ATTUALE())))
         }
         i = i + 1
      }
   }

   PROCEDURA CtrlPosizione_ModuliTerra_368
   {
      //GOSUB Ctrl_Moduli_FIXY

      if( VAR_VAL(ATTUALE(),"VAR_FixTerra") != 1 )
      {
         if ( IS_VAR_FIXED(idx_att,"M4_FIX_Y") )
         {
            DEL_VAR_MODIFICATE(idx_att,"M4_FIX_Y")
            DEL_VAR(idx_att,"M4_FIX_Y")
         }

         EXITSUB()
      }

      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 ) { EXITSUB() }

      hdp = H_DA_PAVIMENTO(ATTUALE(), "")

      if( hdp > 0 & VAR_VAL(ATTUALE(),"ConSostegnoVetro")!=1 )
      {
         COMANDO(STRCAT("EDITPOS_REL ", STR(ATTUALE()), " 0 ", STR(-1*hdp) ,"  0  0 // da CtrlPosizione_ModuliTerra_368"))
         COMANDO(STRCAT("RICALCOLA_UNA ", STR(ATTUALE()), " no_agganciati "))
      }

      if ( IS_VAR_FIXED(idx_att,"M4_FIX_Y") !=1 )
      {
         base0y = FLOOR(base_0.y*10)/10
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," M4_FIX_Y=",STR(base0y)))
      }
   }

   //Simone 29/06/2022 - Blocco posizionamento a terra di cassettiere >= 1472
   //                    se non è accessibile l'aperura del frontale dall'alto
   PROCEDURA Ctrl_Posizione_Cassettiera_368
   {
      ScriviSuLog( 0 , "Ctrl_Pos_Cass" , "START" )

      $wk_CG_Nome   = "Ctrl_Posizione_Cassettiera_368"
      $wk_CG_Blocca = 0
      $wk_CG_Items  = 0
      $wk_CG_Tipo   = "BLOCCO"
      $wk_CG_Msg    = MSG(1342)

      WITH_ALIAS("$wk_mod","Modulo_368")

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_blocco  = 0
         $wk_idx_mod = $wk_mod[$wk_i]

         if( VAR_VAL($wk_idx_mod,"base_0.y") == 0
           | VAR_VAL($wk_idx_mod,"Con_Piedini") == 1 )
         {
            COMPONENTI2( "$wk_cas_tmp", $wk_idx_mod, "Cassetto_368")
            wk_r = ArraySortVarNum( -1, "wk_cas_tmp", "base0y_abs")

            $wk_cas_livelli_h = $wk_cas_tmp
            $wk_cas_inf_max_idx = -1
            $wk_cas_inf_max_x = 0

            $wk_j = 1
            while( $wk_j <= $wk_cas_tmp )
            {
               $wk_cas_tmp_att = $wk_cas_tmp[$wk_j]
               $wk_cas_tmp_x   = VAR_VAL( $wk_cas_tmp_att, "X")
               $wk_cas_tmp_alt = VAR_VAL( $wk_cas_tmp_att, "base0y_abs")

               if( $wk_cas_tmp_alt == VAR_VAL( $wk_cas_tmp[1], "base0y_abs")
                 & $wk_cas_tmp_x > $wk_cas_inf_max_x )
               {
                  $wk_cas_inf_max_idx = $wk_cas_tmp_att
                  $wk_cas_inf_max_x = $wk_cas_tmp_x
               }

               if( $wk_j > 1
                 & VAR_VAL( -1, "wk_cas_tmp_alt_prec") == $wk_cas_tmp_alt) { $wk_cas_livelli_h = $wk_cas_livelli_h - 1 }

               $wk_cas_tmp_alt_prec = $wk_cas_tmp_alt
               $wk_j = $wk_j + 1
            }

            $wk_cas_inf_max_x = $wk_cas_inf_max_x + 2*$M368_Aria_Ant_X

            //Se ho più file di cassetti sovrapposti, controllo l'accessibilità di quello a terra
            if( $wk_cas_livelli_h > 1 )
            {
               if( $wk_cas_inf_max_x > 1104 )
               {
                  if( IS_IDX($wk_cas_inf_max_idx)
                    & VAR_VAL_STR( $wk_cas_inf_max_idx, "GEST_C017") != "PU001" ) { $wk_blocco = 1 }
               }
            }

            //Se ho solo una fila di cassetti, controllo se c'è un modulo sovrapposto che impedisce l'apertura
            if( $wk_cas_livelli_h <= 1
              & IsIdx( $wk_idx_mod, "idx_sopra") == 1 )
            {
               SET_#($wk_idx_mod)
               $wk_B0 = #base_0    $wk_B0.y = 0
               $wk_B3 = #base_3    $wk_B3.y = 0

               //rientro di 3 mm per parte
               $wk_B0.x = $wk_B0.x + COSENO(ANG_TOT_NOR($wk_idx_mod))*2*$M368_Aria_Ant_X
               $wk_B0.z = $wk_B0.z +   SENO(ANG_TOT_NOR($wk_idx_mod))*2*$M368_Aria_Ant_X

               $wk_B3.x = $wk_B3.x - COSENO(ANG_TOT_NOR($wk_idx_mod))*2*$M368_Aria_Ant_X
               $wk_B3.z = $wk_B3.z +   SENO(ANG_TOT_NOR($wk_idx_mod))*2*$M368_Aria_Ant_X

               $wk_coperto = 0
               $wk_idx_sopra = VAR_VAL( $wk_idx_mod, "idx_sopra")

               SET_#($wk_idx_sopra)
               $wk_B0_mod_up = #base_0    $wk_B0_mod_up.y = 0
               $wk_B3_mod_up = #base_3    $wk_B3_mod_up.y = 0

               $wk_PX_1 = INTERFERISCI($wk_B0,ANG_TOT_NOR($wk_idx_mod)+90,$wk_B0_mod_up,$wk_B3_mod_up)
               $wk_PX_2 = INTERFERISCI($wk_B3,ANG_TOT_NOR($wk_idx_mod)+90,$wk_B0_mod_up,$wk_B3_mod_up)

               $wk_DIST = 9999

               //se base_0 è fuori dal modulo sup, misuro da base_0 del modulo sup a base_3 del modulo sotto
               if( $wk_PX_1.x == $ERR_INTER & $wk_PX_1.y == $ERR_INTER & $wk_PX_1.z == $ERR_INTER
                 & $wk_PX_2.x != $ERR_INTER & $wk_PX_2.y != $ERR_INTER & $wk_PX_2.z != $ERR_INTER )
               {
                  $wk_DIST = DISTANZA($wk_B0_mod_up,$wk_B3)
               }

               //se base_3 è fuori dal modulo sup, misuro da base_3 del modulo sup a base_0 del modulo sotto
               if( $wk_PX_1.x != $ERR_INTER & $wk_PX_1.y != $ERR_INTER & $wk_PX_1.z != $ERR_INTER
                 & $wk_PX_2.x == $ERR_INTER & $wk_PX_2.y == $ERR_INTER & $wk_PX_2.z == $ERR_INTER )
               {
                  $wk_DIST = DISTANZA($wk_B3_mod_up,$wk_B0)
               }

               //contenitori completamente sovrapposti
               if( $wk_PX_1.x != $ERR_INTER & $wk_PX_1.y != $ERR_INTER & $wk_PX_1.z != $ERR_INTER
                 & $wk_PX_2.x != $ERR_INTER & $wk_PX_2.y != $ERR_INTER & $wk_PX_2.z != $ERR_INTER )
               {
                  $wk_coperto = 1
               }

               //verifico se il cassetto inferiore è coperto per più della metà
               //if( ( $wk_DIST + 2*$M368_Aria_Ant_X ) > VAR_VAL($wk_idx_mod,"X")/2 )
               if( ( $wk_DIST + 2*$M368_Aria_Ant_X ) > $wk_cas_inf_max_x/2 )
               {
                  $wk_coperto = 1
               }

               if( NOME($wk_idx_sopra) == "Modulo_368" & $wk_coperto == 1 )
               {
                  //if( VAR_VAL($wk_idx_mod,"X") >= 1472
                  //  & VAR_VAL($wk_idx_mod,"FLAG_Cassetto") == 1
                  //  & VAR_VAL($wk_idx_mod,"wk_cas") == 1
                  //  & VAR_VAL_STR($wk_idx_mod,"GEST_C017") != "PU001" )
                  //{
                  //   if( VAR_VAL($wk_idx_mod,"base_0.y") == 0
                  //     | VAR_VAL($wk_idx_mod,"Con_Piedini") == 1 ) { $wk_blocco = 1 }
                  //}

                  if( $wk_cas_inf_max_x > 1104 )
                  {
                     if( IS_IDX($wk_cas_inf_max_idx)
                       & VAR_VAL_STR( $wk_cas_inf_max_idx, "GEST_C017") != "PU001" ) { $wk_blocco = 1 }
                  }
               }
            }
         }

         if( $wk_blocco == 1
           & VAR_VAL( $wk_idx_mod, "in_pcfto") == 0
           & VAR_VAL( $wk_idx_mod, "FLAG_Speciale") == 0 ) { AddItem2Array( -1, "wk_CG_Items", $wk_idx_mod, "") }

         $wk_i = $wk_i + 1
      }

      ScriviSuLog( 0 , "Ctrl_Pos_Cass" , "END" )

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      GOSUB CG_CFO_FineControllo
   }

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

      if( VAR_EXIST(ATTUALE(),"idx_cnear_rt") == 0 ) { EXITSUB() }

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

      ConBifacciale = 0
      TipoBifacciale = ""

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_bif",idx_cnear_rt,5,"AntaBifacciale_368")
      if( wk_bif > 0 )
      {
         ConBifacciale = 1
         TipoBifacciale = VAR_VAL_STR(wk_bif[1],"TipoBifaccialeStr")
      }

      //Simone 17/03/2022
      if( UN_PADRE("ComodinoxTelaio") )
      {
         ConBifacciale = 1
         TipoBifacciale = "PANNELLO RETRO"
      }

      //Luca 29/12/2020
      //CONTROLLO SE SERVONO MASSELLI
      COMPONENTI2("wk_mas",ATTUALE(),"MasselloBif_368")
      if( wk_bif == 0
        & wk_mas == 0 )   { EXITSUB() }

      //Simone 26/01/2023 - Esco se masselli attivati manualmente
      if( VAR_VAL(ATTUALE(),"VAR_Revisione_Antiribaltamento") < 1
        & VAR_VAL_STR( ATTUALE(), "GEST_C087") == "FR015")   { EXITSUB() }

      if( wk_bif == 0 & wk_mas > 0 )
      {
         //COMANDO2(STRCAT("LOGMSG MASSELLI ELIMINO TUTTO"))
         //elimino i masselli
         i = 1
         while( i <= wk_mas )
         {
           if( VAR_VAL(wk_mas[i], "FLAG_Massello_Elements" )==0 )
           {
             COMANDO(STRCAT("ELIMINA ",STR(wk_mas[i])))
           }

           i = i + 1
         }

         wk_mas = 0
         EXITSUB()
      }

      wk_b0 = base_0       wk_b0.y = 0

      SORT_POINT(base_0,"wk_bif","base_3")
      wk_count      = 0
      wk_posmas     = 0
      wk_posmas_log = 0

      ang_att = ANG_TOT_NOR(ATTUALE())

      //ciclo i bifacciali e verifico quanti masselli servono
      i = 1
      while ( i <= wk_bif )
      {
         wk_idx_bif = wk_bif[i]
         SET_#( wk_idx_bif )
         wk_bb3 = #base_3  wk_bb3.y = 0
         wk_bb0 = #base_0  wk_bb0.y = 0
         wk_bbc = #base_c  wk_bbc.y = 0

         //no masselli su h.138
         if( #TipoBifaccialeStr == "ANTA BIFACCIALE" & Y >= 184 )
         {
            if( #X >= 1104 )
            {
               wk_count =  wk_count + 1
               wk_posmas = wk_count
               wk_posmas[wk_count] = DistanzaFraPunti(wk_b0,wk_bbc,ang_att)

               wk_posmas_log = wk_count
               wk_posmas_log[wk_count] = STRCAT("BIFACCIALE [",STR(wk_idx_bif),"] CON X >= 1104" )
            }
            else
            {
               if( IS_IDX(#idx_fia_sx) == 0 )
               {
                  wk_count =  wk_count + 1
                  wk_posmas = wk_count
                  wk_posmas[wk_count] = DistanzaFraPunti(wk_b0,wk_bb0,ang_att)

                  wk_posmas_log = wk_count
                  wk_posmas_log[wk_count] = STRCAT("BIFACCIALE [",STR(wk_idx_bif),"] CON idx_fia_sx = -1" )
               }
               if( IS_IDX(#idx_fia_dx) == 0 )
               {
                  wk_count =  wk_count + 1
                  wk_posmas = wk_count
                  wk_posmas[wk_count] = DistanzaFraPunti(wk_b0,wk_bb3,ang_att)

                  wk_posmas_log = wk_count
                  wk_posmas_log[wk_count] = STRCAT("BIFACCIALE [",STR(wk_idx_bif),"] CON idx_fia_dx = -1" )
               }
            }
         }

         i = i + 1
      }

      //verifico il caso in cui sono più fasce orizzontale, aggiungo massello centrale - no h.138
      if( Y >= 184 )
      {
         if( wk_count == 0 & wk_bif > 1 )
         {
            wk_count =  wk_count + 1
            wk_posmas = wk_count
            wk_posmas[wk_count] = DistanzaFraPunti(wk_b0,wk_bbc,ang_att)

            wk_posmas_log = wk_count
            wk_posmas_log[wk_count] = STRCAT("MASSELLI = 0  MA BIFACCIALI = ",STR(wk_bif) , " --> AGGIUNGO MASSELLO CENTRALE")
         }
      }

      //ordino e filtro l'array in caso di valori doppi
      SORT_ARRAY(ATTUALE(),"wk_posmas")

      wk_mas2add = 0
      wk_pos_prec = -999
      i = 1
      while ( i <= wk_posmas )
      {
         if( wk_posmas[i] != wk_pos_prec )
         {
            ne = wk_mas2add + 1
            wk_mas2add = ne
            wk_mas2add[ne] = wk_posmas[i]

            wk_pos_prec = wk_posmas[i]
         }

         i = i + 1
      }

      wk_count = wk_mas2add

      //DBG COMANDO2(STRCAT("LOGMSG wk_mas2add=",STR(wk_mas2add) , "  wk_mas=",STR(wk_mas) ))

      if( wk_count == 0 & wk_mas == 0  ) { EXITSUB() }

      //AGGIUNGO I MASSELLI NECESSARI
      if( wk_count > 0 & wk_mas == 0  )
      {
         //DBG COMANDO2(STRCAT("LOGMSG MASSELLI AGGIUNGO I MASSELLI NECESSARI"))

         i = 1
         while ( i <= wk_count )
         {
            COMANDO(STRCAT("SETTA ",STR(idx_fusto)))
            COMANDO(STRCAT("ELEMENTO_I MasselloBif_368"))
            COMANDO("STRUTTURA_I")
            COMANDO(STRCAT("VAR_FIX OffsetX=",STR(wk_mas2add[i])))
            COMANDO("VAR_SET NO_AUTO=1")
            COMANDO("ATTREZZA2 0")
            i = i + 1
         }

         EXITSUB()
      }

      // AGGIORNO, SE SERVE, I MASSELLI NECESSARI
      if( wk_count >= wk_mas )
      {
         //DBG COMANDO2(STRCAT("LOGMSG MASSELLI AGGIORNO I MASSELLI e AGGIUNGO SE MANCANO"))
         ricalcola = 0

         i = 1
         while ( i <= wk_mas )
         {
            if( VAR_VAL(wk_mas[i],"OffsetX") != wk_mas2add[i] )
            {
               COMANDO(STRCAT("VAR_CHANGE 1 ", STR(wk_mas[i]) , " OffsetX=",STR(wk_mas2add[i])))
               ricalcola = 1
            }
            i = i + 1
         }

         while ( i <= wk_count )
         {
            ricalcola = 1
            COMANDO(STRCAT("SETTA ",STR(idx_fusto)))
            COMANDO(STRCAT("ELEMENTO_I MasselloBif_368"))
            COMANDO("STRUTTURA_I")
            COMANDO(STRCAT("VAR_FIX OffsetX=",STR(wk_mas2add[i])))
            COMANDO("VAR_SET NO_AUTO=1")
            COMANDO("ATTREZZA2 0")
            i = i + 1
         }

         if( ricalcola ) { COMANDO(STRCAT("RICALCOLA UNA ", STR(idx_fusto) , " Ctrl_PresenzaBifacciale_Moduli_368")) }
         EXITSUB()
      }

      // CANCELLO I MASSELLI NON NECESSARI E AGGIORNO GLI ALTRI
      if( wk_count < wk_mas )
      {
         //DBG COMANDO2(STRCAT("LOGMSG MASSELLI AGGIORNO E CANCELLO"))
         ricalcola = 0

         i = 1
         while ( i <= wk_count )
         {
            if( VAR_VAL(wk_mas[i],"OffsetX") != wk_mas2add[i] )
            {
               COMANDO(STRCAT("VAR_CHANGE 1 ", STR(wk_mas[i]) , " OffsetX=",STR(wk_mas2add[i])))
               ricalcola = 1
            }
            i = i + 1
         }

         while( i <= wk_mas )
         {
            COMANDO(STRCAT("ELIMINA ",STR(wk_mas[i])))
            i = i + 1
         }

         if( ricalcola ) { COMANDO(STRCAT("RICALCOLA UNA ", STR(idx_fusto) , " Ctrl_PresenzaBifacciale_Moduli_368")) }
      }
   }

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

      if( VAR_EXIST(ATTUALE(),"idx_cnear_up") == 0 ) { EXITSUB() }

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

      idx_top = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_top",idx_cnear_up,1,"Top*368")

      if( wk_top > 0 )  { idx_top = wk_top[1] }
   }

   PROCEDURA Config_Attaccaglia_368
   {
      nome_file = "AttaccagliaGancioSX"
      if( PosAttaccaglia == 1 ) { nome_file = "AttaccagliaGancioDX" }
      X = 36
      Y = 136
      Z = 15

      Barra_Offset_X = 2
      Barra_Offset_Y = 58 - $M368_Spe_Cop

      if( TipoAttaccaglia == 2 )
      {
         X = 42
         Y = 146
         Z = 19

         Barra_Offset_X = 0.5
         Barra_Offset_Y = 91 - $M368_Spe_Cop

         nome_file = "AttaccagliaBottoneSX"
         if( PosAttaccaglia == 1 ) { nome_file = "AttaccagliaBottoneDX" }
      }

      if( TipoAttaccaglia == 3 )
      {
         //X = VAR_VAL(PADRE(ATTUALE(),1),"X") - 48
         X = VAR_VAL(PADRE(ATTUALE(),1),"X")
         Y = 120
         Z = 10

         nome_file = STRCAT("BarraT_",STR(X))
      }

      DescEdit__ = "ATTACCAGLIA CON GANCIO"
      if( TipoAttaccaglia == 2 ) { DescEdit__ = "ATTACCAGLIA CON BOTTONE" }
      if( TipoAttaccaglia == 3 ) { DescEdit__ = "ATTACCAGLIA BARRA T" }

      file_sat = STRCAT($path_sat,"368\Ferramenta\",nome_file,".sat")
   }

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

      if( $ATTIVA_DLL == 0 )                    { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"Tipo368") == 0  )              { EXITSUB() }
      if( VAR_EXIST(ATTUALE(),"ConAttaccaglie") == 0 )        { EXITSUB() }

      ATT_Tipologia = 0
      ATT_Centrale  = 0
      ATT_Doppie    = 0

      ATT_Divisorio1 = 0      ATT_Divisorio1_Pos = 0
      ATT_Divisorio2 = 0      ATT_Divisorio2_Pos = 0
      ATT_Divisorio3 = 0      ATT_Divisorio3_Pos = 0
      ATT_Divisorio4 = 0      ATT_Divisorio4_Pos = 0
      ATT_Divisorio5 = 0      ATT_Divisorio5_Pos = 0

      if( ConAttaccaglie == 0 )                              { EXITSUB() }
      //Simone 26/01/2023 - Filtro per revisione
      if( ConAttaccaglie == 1
        & VAR_VAL_STR(GetPrimoGest(ATTUALE(),0), "GEST_C087") == "FR015"
        & VAR_VAL(ATTUALE(),"VAR_Revisione_Antiribaltamento") < 1 )  { EXITSUB() }

      if( Tipo368 == "368-GIO" )
      {
         ATT_Tipologia = 1

         if( X >= 1472 )  { ATT_Centrale = 1 }

         if( Y <= 184 & Z > 180 )
         {
            ATT_Tipologia = 2
            if( X > 1472 )  { ATT_Centrale = 1 }
            //if( X > 1104 )  { ATT_Centrale = 1 }
         }

         if( Y > 1472 )
         {
            //Luca 04/11/2020 doppie solo se sospese
            //ATT_Doppie = 1
            if( ConPiedini==0  ) { ATT_Doppie = 1 }
         }
      }

      if( Tipo368 == "368-RIB"
        | Tipo368 == "368-VAS"  )
      {
         ATT_Tipologia = 2
         if( X > 1104 )  { ATT_Centrale = 1 }

         if( Y > 184 )
         {
            ATT_Centrale = 0
            ATT_Tipologia = 1
            if( X > 1472 )  { ATT_Centrale = 1 }
         }

         //Simone 24/01/2023 - Includo anche la nuova prof. 510
         //if( Z > 500 ) { ATT_Tipologia = 3 }
         if( Z > 450 ) { ATT_Tipologia = 3 }
      }

      if( Tipo368 == "368-BAT" )
      {
         ATT_Tipologia = 1

         if( Y > 1472 )
         {
            //ATT_Doppie = 1
            if( ConPiedini == 0  ) { ATT_Doppie = 1 }
         }
      }

      //TODO
      if( Tipo368 == "368-MAD" )
      {
         ATT_Tipologia = 1

         if( Y > 1472 & ConPiedini == 0 ) { ATT_Doppie = 1 }

         wk_meta = X/2 - 50
         wk_xatt = 36
         //stesse regole dei piedini
         if( PosDivVert1_X > 0 )
         {
            if( PosDivVert1_X < wk_meta ) { ATT_Divisorio1 = PosDivVert1_X + $M368_Spe_DivLeg38  ATT_Divisorio1_Pos = -1 }
            else                          { ATT_Divisorio1 = PosDivVert1_X - wk_xatt             ATT_Divisorio1_Pos =  1 }
         }
         if( PosDivVert2_X > 0 )
         {
            if( PosDivVert2_X < wk_meta ) { ATT_Divisorio2 = PosDivVert2_X + $M368_Spe_DivLeg38  ATT_Divisorio2_Pos = -1 }
            else                          { ATT_Divisorio2 = PosDivVert2_X - wk_xatt             ATT_Divisorio2_Pos =  1 }
         }
         if( PosDivVert3_X > 0 )
         {
            if( PosDivVert3_X < wk_meta ) { ATT_Divisorio3 = PosDivVert3_X + $M368_Spe_DivLeg38  ATT_Divisorio3_Pos = -1 }
            else                          { ATT_Divisorio3 = PosDivVert3_X - wk_xatt             ATT_Divisorio3_Pos =  1 }
         }
         if( PosDivVert4_X > 0 )
         {
            if( PosDivVert4_X < wk_meta ) { ATT_Divisorio4 = PosDivVert4_X + $M368_Spe_DivLeg38  ATT_Divisorio4_Pos = -1 }
            else                          { ATT_Divisorio4 = PosDivVert4_X - wk_xatt             ATT_Divisorio4_Pos =  1 }
         }
         if( PosDivVert5_X > 0 )
         {
            if( PosDivVert5_X < wk_meta ) { ATT_Divisorio5 = PosDivVert5_X + $M368_Spe_DivLeg38  ATT_Divisorio5_Pos = -1 }
            else                          { ATT_Divisorio5 = PosDivVert5_X - wk_xatt             ATT_Divisorio5_Pos =  1 }
         }
      }

      if( Tipo368 == "368-CAS" | Tipo368 == "368-CES" )
      {
         ATT_Tipologia = 2
         if( X > 1104 ) { ATT_Centrale = 1 }

         //if( Z > 500 )  { ATT_Tipologia = 3 }
         if( Z > 450 )  { ATT_Tipologia = 3 }
      }

      //Simone 26/01/2023 - Revisione antiribaltamento
      if( VAR_Revisione_Antiribaltamento > 0 )
      {
         if( IS_VAR_FIXED(GetPrimoGest(ATTUALE(),0),"GEST_C087") == 0 )
         {
            //quando il contenitore necessita fix a parete e non è sospeso, metto l'antiribaltamento
            if( ConPiedini        == 1
              | ConSostegnoVetro  == 1
              | VAR_SostegnoOmega == 1 ) { ATT_Tipologia = 6 }
         }
         else
         {
            if( VAR_VAL_STR(GetPrimoGest(ATTUALE(),0),"GEST_C087") == "FR015" ) { ATT_Tipologia = 6 }
         }

         if( VAR_VAL(ATTUALE(),"in_pcfto") == 1
           | VAR_VAL(PADRE(ATTUALE(),1),"FLAG_Modulo_AIR") == 1 )
         {
            if( VAR_VAL_STR(GetPrimoGest(ATTUALE(),0),"GEST_C087") == "FR015" ) { ATT_Tipologia = 6 }
         }
      }

      //LZ 12/11/2021: pannello per contenitori H138
      if( Y < 184 ) { ATT_Tipologia = 4 }

      //Simone 22/09/2022 - Pannello per cont su Pentagram
      if( UN_PADRE("LibreriaPentagram_LP22") ) { ATT_Tipologia = 5 }
   }

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

      Miniwinch_std = 0

      if( Tipo368 != "368-RIB")                  { EXITSUB() }

      //Se non ho anta non posiziono miniwinch
      COMPONENTI2( "wk_ant", PADRE( ATTUALE(), 1), "Anta_368")
      if( wk_ant == 0)                           { EXITSUB() }

      if( Y < 184)
      {
         Miniwinch_std = -1
         if( X >= 736)  { Miniwinch_std = 2 }

         Miniwinch_std = Miniwinch_std * wk_ant
         if( Miniwinch_std < -1) { Miniwinch_std = ABS(Miniwinch_std) }
      }

      if( Y == 184)
      {
         Miniwinch_std = 1
         if( X >= 1424) { Miniwinch_std = 2 }
      }

      if( Y > 184)
      {
         Miniwinch_std = 1
         if( X >= 736)  { Miniwinch_std = 2 }
         if( X >= 1840) { Miniwinch_std = 3 }
      }

      if( IS_VAR_FIXED( ATTUALE(), "Miniwinch") == 0)
      {
         Miniwinch = Miniwinch_std
      }
   }

   //Simone 26/01/2023
   PROCEDURA Ctrl_Mas_Antirib_Moduli_368
   {
      if( VAR_Revisione_Antiribaltamento < 1 )  { EXITSUB() }

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

      if( $ATTIVA_DLL == 0 )                    { EXITSUB() }

      Massello_Sx = 0
      Massello_Dx = 0
      Massello_O  = 0

      if( X >= Y )
      {
         Massello_Sx = 1
         Massello_Dx = 1
      }
      else
      {
         Massello_O  = 1
      }

      if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 )
      {
         if( Massello_O == 0 )
         {
            if( VAR_VAL(ATTUALE(),"VAR_Massello_Elements") ==  1 ) { Massello_Sx = 0 Massello_Dx = 1 }
            if( VAR_VAL(ATTUALE(),"VAR_Massello_Elements") == -1 ) { Massello_Sx = 1 Massello_Dx = 0 }
         }

         if( VAR_VAL(ATTUALE(),"VAR_Massello_Elements") == 0 )     { Massello_Sx = 0 Massello_Dx = 0 }
      }
   }

   PROCEDURA AssModuli_368
   {
      //dichiaro variabili per compatibilità con pensili cucina (utilizzate posiziona figli fusto)
      RieZR_Div = 0
      RieZF_Div = 0

      if( FLAG_Moduli_368 == 0 ) { EXITSUB() }

      //non riducibili
      if( IS_MATCH(nome_att,"Modulo*368") )
      {
         COD_EREDITA = "PRE;POST"

         M4_MIS = "Filler*;X;Y;Z;Zt;VAR_DivVerticale;VAR_DivOriz;VAR_FixMuro;VAR_FixTerra;VAR_ConfigVani;VAR_Vano*_X;PosSporgenzaAIR"

         if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

         if( $ATTIVA_DLL & 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(),"VAR_DivVerticale",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_DivOriz",1)

            HIDE_ON_EDIT2(ATTUALE(),"VAR_FixMuro",1)
            HIDE_ON_EDIT2(ATTUALE(),"VAR_FixTerra",1)

            HIDE_ON_EDIT2(ATTUALE(),"VAR_ConfigVani",1)
            HIDE_ON_EDIT(ATTUALE(),"VAR_Vano1_X;VAR_Vano2_X;VAR_Vano3_X;VAR_Vano4_X;VAR_Vano5_X;VAR_Vano6_X",1)

            HIDE_ON_EDIT2(ATTUALE(),"FLAG_Modulo_AIR",1)

            HIDE_ON_EDIT2(ATTUALE(),"Z_Attrezza",1)
         }

         M4_A_MURO = -1
         if( VAR_VAL(ATTUALE(),"VAR_FixTerra") == 1 ) { M4_A_MURO = 0 }
         if( VAR_VAL(ATTUALE(),"VAR_FixMuro") == 1  ) { M4_A_MURO = 1 }

         M4_GRUPPO__  = MSG(1022)
         if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR")  ) { M4_GRUPPO__  = MSG(1036) }

         //Tipologia 368
         if( NOME(ATTUALE()) == "Modulo_368" )
         {
            wk_ante_tipo = 0
            COMPONENTI2( "wk_ant", ATTUALE(), "Anta_368")

            wk_anta_num = 1
            while( wk_anta_num <= wk_ant )
            {
               wk_anta_att          = wk_ant[wk_anta_num]
               wk_anta_att_apertura = VAR_VAL_STR( wk_anta_att, "Apertura")

               if( wk_anta_att_apertura != "" )
               {
                  AddItem2Array_IfNotExist( ATTUALE(), "wk_ante_tipo", 0, wk_anta_att_apertura)
               }

               wk_anta_num = wk_anta_num + 1
            }

            Tipo368 = "368-BAT"
            if( wk_ante_tipo == 1)
            {
               if( wk_ante_tipo[1] == "RB") { Tipo368 = "368-RIB" }
               if( wk_ante_tipo[1] == "VS") { Tipo368 = "368-VAS" }
               if( wk_ant > 1
                 & wk_ante_tipo[1] == "BA") { Tipo368 = "368-MAD" }
            }

            COMPONENTI2("wk_cas",ATTUALE(),"Cassetto_368")
            if( wk_cas > 0 )
            {
               Tipo368 = "368-CAS"
               if( VAR_VAL(wk_cas[1],"Y") > 200 )              { Tipo368 = "368-CES" }
            }

            //COMPONENTI2("wk_ces",ATTUALE(),"Cestone_368")
            //if( wk_ces > 0 )                                 { Tipo368 = "368-CES" }

            //Luca 11/03/2021
            wk_hide = 1
            if( FLAG_Modulo_AIR
              & Tipo368 != "368-MAD"
              & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_hide = 0 }

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

         FLAG_Battente    = 0
         FLAG_Ribalta     = 0
         FLAG_Vasistas    = 0
         FLAG_Cassetto    = 0
         FLAG_Cestone     = 0

         COMPONENTI2("wk_ant",ATTUALE(),"AntaSingola_368")
         COMPONENTI2("wk_ces",ATTUALE(),"Cestone_368")
         COMPONENTI2("wk_cas",ATTUALE(),"Cassetto_368")

         if( wk_cas > 0 )  { FLAG_Cassetto = 1 }
         if( wk_ces > 0 )  { FLAG_Cestone  = 1 }
         i = 1
         while ( i <= wk_ant )
         {
            if( VAR_VAL_STR(wk_ant[i],"Apertura") == "BA" ) { FLAG_Battente = 1 }
            if( VAR_VAL_STR(wk_ant[i],"Apertura") == "RB" ) { FLAG_Ribalta  = 1 }
            if( VAR_VAL_STR(wk_ant[i],"Apertura") == "VS" ) { FLAG_Vasistas = 1 }

            i = i + 1
         }

         // FLAG_CopSp38 - Coperchio spessore 38mm:
         //  - per contenitori P.510/560
         //  - per cassetti a giorno con vano
         //  - no per vasistas air
         //  - no per altezza < 184

         FLAG_CopSp38 = 0
         if( VAR_VAL( ATTUALE(), "Z") > 487 )              { FLAG_CopSp38 = 1 }
         if( VAR_VAL (ATTUALE(), "VAR_DivOriz") == 1 )     { FLAG_CopSp38 = 1 }

         if( VAR_VAL( ATTUALE(), "FLAG_Vasistas") == 1
           & VAR_VAL( ATTUALE(), "FLAG_Modulo_AIR") == 1 ) { FLAG_CopSp38 = 0 }

         if( VAR_VAL( ATTUALE(), "Y") < 184 )              { FLAG_CopSp38 = 0 }
      }

      //Luca 22/01/2021
      //nascondo variabili per creazione elements
      //if( ACTION() == 0 & $ATTIVA_DLL == 1 )
      //{
      //   if( VAR_EXIST(ATTUALE(),"VAR_Regola_Elements") == 1 ) { HIDE_ON_EDIT2(ATTUALE(),"VAR_Regola_Elements",1) }
      //}

      #ifndef TE
        if( ins_att == $ins_componente ) { M4_NO_OFFS = 1 }
      #endif

      RieX_Rip  = 0
      MagX_Rip  = 9

      MagY_Div  = 9

      RieZR_Rip = 0.85

      RieZR_Div = 0.5

      RieZF_Div = 70
      if( Z < 384  ) { RieZF_Div = 30 }

      PanRtrLED_Z = 19

      //elementi GLASS
      Spe_Vtr_Glass  = 8

      Spe_SchV_Glass = 6
      //LZ 26/07/2021: 36e8 sideboard
      RieX_SchV_Glass = 1
      RieY_SchV_Glass = 1

      Spe_Pel_Glass  = 0.5

      //schiena di finitura
      Spe_SchF_Glass = 4

      Rie_Pan_Glass  = 2.5
      Pan_Rtr_Glass  = 19

      Rie_PanR_Glass = 15
      Rie_SchF_Glass = 1

      //RieZF_Rip = 69.65
      ////se modulo < 384
      //RieZF_Rip = 29.65
      ////se modulo < 284
      //RieZF_Rip = 14.65

      if( UN_PADRE("GlassMirror") )
      {
         Spe_Vtr_Glass = 10

         RieX_SchV_Glass = 1.5
         RieY_SchV_Glass = 1.5
      }
   }

   PROCEDURA PuntiModuli_368
   {
      Zt = Z
      Yt = Y + ConPiedini * $M368_Alt_Pie

      if( NOME(ATTUALE()) == "Modulo_368" )
      {
         Zt = Z + $M368_Spe_Ant + $M368_Aria_Ant_Z
         //Luca 21/12/2020 profondità con aria reale
         Zn = Zt
         if( PP_PushPull == 1 )  { Zn = Z + $M368_Spe_Ant + $M368_Aria_Ant_Z_PP }
      }

      GOSUB punti_YtZt

      //Zn = Zt + PannelloRetroLED*PanRtrLED_Z

      //base_0 = [0, 0,  0]    alto_0 = [0, Yt,  0]
      //base_1 = [0, 0, Zn]    alto_1 = [0, Yt, Zn]
      //base_2 = [X, 0, Zn]    alto_2 = [X, Yt, Zn]
      //base_3 = [X, 0,  0]    alto_3 = [X, Yt,  0]

      base_so = base_0
      alto_ne = alto_2

      GOSUB DefVanoPensili
      vano_0_0.y = ConPiedini * $M368_Alt_Pie
      //vano_0_0.z = vano_0_0.z + PannelloRetroLED * PanRtrLED_Z
      vano_0_0.z = vano_0_0.z

      //Luca 12/04/2021
      if( VAR_VAL(ATTUALE(),"VAR_DivVerticale") > 1 )
      {
         vano_0_1    = vano_0_0
         vano_l_1    = PosDivVert_X - $M368_Spe_Fia
         vano_p_1    = vano_p_0
         vano_hide_1 = 0

         vano_0_2    = vano_0_0
         vano_0_2.x  = PosDivVert_X + DivVert_X
         vano_l_2    = X - $M368_Spe_Fia - DivVert_X - PosDivVert_X
         vano_p_2    = vano_p_0
         vano_hide_2 = 0
      }

      if( VAR_VAL(ATTUALE(),"VAR_ConfigVani") > 1 )
      {
         vano_l_0 = VAR_Vano1_X - 2*$M368_Spe_Fia

         vano_0_1    = vano_0_0
         vano_0_1.x  = VAR_Vano1_X + $M368_Spe_Fia
         vano_l_1    = VAR_Vano2_X - 2*$M368_Spe_Fia
         vano_p_1    = vano_p_0
         vano_hide_1 = 0

         vano_0_2    = vano_0_0
         vano_0_2.x  = VAR_Vano1_X + VAR_Vano2_X + $M368_Spe_Fia
         vano_l_2    = VAR_Vano3_X - 2*$M368_Spe_Fia
         vano_p_2    = vano_p_0
         vano_hide_2 = 1

         vano_0_3    = vano_0_0
         vano_0_3.x  = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + $M368_Spe_Fia
         vano_l_3    = VAR_Vano4_X - 2*$M368_Spe_Fia
         vano_p_3    = vano_p_0
         vano_hide_3 = 1

         vano_0_4    = vano_0_0
         vano_0_4.x  = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X + $M368_Spe_Fia
         vano_l_4    = VAR_Vano5_X - 2*$M368_Spe_Fia
         vano_p_4    = vano_p_0
         vano_hide_4 = 1

         vano_0_5    = vano_0_0
         vano_0_5.x  = VAR_Vano1_X + VAR_Vano2_X + VAR_Vano3_X + VAR_Vano4_X + VAR_Vano5_X + $M368_Spe_Fia
         vano_l_5    = VAR_Vano6_X - 2*$M368_Spe_Fia
         vano_p_5    = vano_p_0
         vano_hide_5 = 1

         if( VAR_ConfigVani > 2 )  { vano_hide_2 = 0 }
         if( VAR_ConfigVani > 3 )  { vano_hide_3 = 0 }
         if( VAR_ConfigVani > 4 )  { vano_hide_4 = 0 }
         if( VAR_ConfigVani > 5 )  { vano_hide_5 = 0 }

         //Luca 03/02/2022 vano totale
         vano_0_6    = vano_0_0
         vano_l_6    = X - 2*$M368_Spe_Fia
         vano_p_6    = vano_p_0

      }

      GOSUB DefPuntiSnapPasso184_368

      GOSUB DefPuntiStendiSchienale_368

      GOSUB DefPuntiStendiBifacciale_368

      //GOSUB DefPuntiPannelloXLed_368

      //punti stesura top
      punto_sx_top = alto_0         punto_sx_top_fro = alto_0
      punto_dx_top = alto_3         punto_dx_top_fro = alto_3

      //punto_sx_top.z = punto_sx_top.z + PannelloRetroLED * PanRtrLED_Z
      punto_sx_top.z = punto_sx_top.z
      punto_dx_top.z = punto_sx_top.z

      punto_sx_top_fro.z = punto_sx_top.z + Z
      punto_dx_top_fro.z = punto_dx_top.z + Z

      NFC_Point = alto_2

      //Luca 04/06/2021
      //STP_Bollina = 1
   }

   PROCEDURA DefPuntiStendiBifacciale_368
   {
      DEL_VAR( ATTUALE(), "punto_bif368_*")

      if( IS_MATCH( NOME(ATTUALE()), "*Glass*") ) { EXITSUB() }

      wk_passo = 92
      wk_base_0_offset_y = VAR_VAL( ATTUALE(), "ConPiedini") * $M368_Alt_Pie

      // NOTA: includo volutamente i vertici in entrambi gli array
      // Orizzontali e vertici
      wk_lar = 0
      while( wk_lar <= X)
      {
         // Inferiori
         AddPoint2Array( ATTUALE(), "punto_bif368_dw", [ base_0.x + wk_lar, base_0.y + wk_base_0_offset_y, base_0.z])

         // Superiori
         AddPoint2Array( ATTUALE(), "punto_bif368_up", [ alto_0.x + wk_lar, alto_0.y, alto_0.z])

         wk_lar = wk_lar + wk_passo
      }

      // Verticali e vertici
      wk_alt = wk_base_0_offset_y
      while( wk_alt <= Y)
      {
         // Sinistri
         AddPoint2Array( ATTUALE(), "punto_bif368_sx", [ base_0.x, base_0.y + wk_alt, base_0.z])

         // Destri
         AddPoint2Array( ATTUALE(), "punto_bif368_dx", [ base_3.x, base_3.y + wk_alt, base_3.z])

         wk_alt = wk_alt + wk_passo
      }
   }

   PROCEDURA DefPuntiPannelloXLed_368
   {
      DEL_VAR(ATTUALE(),"pnt_stendi_led_*")

      if( VAR_VAL(ATTUALE(),"PannelloRetroLED") == 0 )  { EXITSUB() }

      pnt_stendi_led_sx_b = [ 15 , 15 , 10 ]
      pnt_stendi_led_sx_a = [ 15 , Y- 15 , 10 ]

      pnt_stendi_led_dx_b = [ X - 15 , 15 , 10 ]
      pnt_stendi_led_dx_a = [ X - 15 , Y - 15 , 10]
   }

   PROCEDURA posa_fusto_368
   {
      GOSUB posa_blocco
      if( ConPiedini == 1 )                                 { @base_0.y = base_0.y + $M368_Alt_Pie }

      if( NOME(idx_att) == "ModuloGiorno_368" )             { @VAR_Giorno = 1 }
      if( IS_MATCH( UPPER(NOME(ATTUALE())), "FUSTO*") == 1) { idx_fusto = ATTUALE() }
   }

   //creo punti di SNAP a passo 184 (sx, dx, alto, basso)
   PROCEDURA DefPuntiSnapPasso184_368
   {
      DEL_VAR(ATTUALE(),"M4_SNAP_P*")

      np = 1
      step = 184
      np_alt = (Y / step) - 1
      np_lar = (X / step) - 1

      off_y = ConPiedini * $M368_Alt_Pie

      i = 1
      while ( i<= np_alt )
      {
         px = 0   pz = 0
         VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , px , off_y + step*i , pz , 0 , "" )
         //VAR_CREATE_XYZ( ATTUALE() , STRCAT("txt_pos_",STR(np-1))  , px , off_y + step*i , pz , 0 , "" )
         //VAR_CREATE_STR( ATTUALE() , STRCAT("txt_str_",STR(np-1)) , STR(np-1 ) , 0 , "" )

         np = np + 1

         px = X   pz = 0
         if( NOME(ATTUALE()) == "ModuloRaccordoAngolo_368" ) { pz = Z }

         VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , px , off_y + step*i , pz , 0 , "" )
         //VAR_CREATE_XYZ( ATTUALE() , STRCAT("txt_pos_",STR(np-1))  , px , off_y + step*i , pz , 0 , "" )
         //VAR_CREATE_STR( ATTUALE() , STRCAT("txt_str_",STR(np-1)) , STR(np-1 ) , 0 , "" )

         np = np + 1

         i = i + 1
      }

      if( NOME(ATTUALE()) == "ModuloRaccordoAngolo_368" ) { EXITSUB() }

      i = 1
      while ( i<= np_lar )
      {
         VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , step*i , off_y + Y , 0 , 0 , "" )
         //VAR_CREATE_XYZ( ATTUALE() , STRCAT("txt_pos_",STR(np-1))  , step*i , off_y + Y , 0 , 0 , "" )
         //VAR_CREATE_STR( ATTUALE() , STRCAT("txt_str_",STR(np-1)) , STR(np-1 ) , 0 , "" )

         np = np + 1

         if( VAR_VAL( ATTUALE() , "ConPiedini" ) == 0 )
         {
            VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , step*i , 0 , 0 , 0 , "" )
            //VAR_CREATE_XYZ( ATTUALE() , STRCAT("txt_pos_",STR(np-1))  , step*i , 0 , 0 , 0 , "" )
            //VAR_CREATE_STR( ATTUALE() , STRCAT("txt_str_",STR(np-1)) , STR(np-1 ) , 0 , "" )

            np = np + 1
         }

         i = i + 1
      }

      if( NOME(ATTUALE()) == "ModuloGlass_368" )
      {
         if( VAR_GlassL_ConScasso == 1 )
         {
            px = GlassL_Scasso_X
            py = GlassL_Scasso_Y

            if( GlassL_Scasso_Pos=="SX-AL"
              | GlassL_Scasso_Pos=="DX-AL" ) { py = Y- GlassL_Scasso_Y }

            if( GlassL_Scasso_Pos=="DX-AL"
              | GlassL_Scasso_Pos=="DX-BA" ) { px = X - GlassL_Scasso_X }

            VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , px , py, 0 , 0 , "" )
         }
      }

      if( NOME(ATTUALE()) == "ModuloMadiaGlass_368" )
      {
         DEL_VAR(ATTUALE(),"M4_SNAP_P*")
         np = 1

         px = GlassL_Scasso_X
         py = GlassL_Scasso_Y

         if( GlassL_Scasso_Pos=="SX-AL"
           | GlassL_Scasso_Pos=="DX-AL" ) { py = Y- GlassL_Scasso_Y }

         if( GlassL_Scasso_Pos=="DX-AL"
           | GlassL_Scasso_Pos=="DX-BA" ) { px = X - GlassL_Scasso_X }

         VAR_CREATE_XYZ( ATTUALE() , STRCAT("M4_SNAP_P",STR(np)) , px , py, 0 , 0 , "" )

      }
   }

   //Luca 12/11/2020
   PROCEDURA DefPuntiStendiSchienale_368
   {
      if( IS_MATCH( NOME(ATTUALE()), "*Glass*") ) { EXITSUB() }

      punto_stendisch368_sx_1 = base_0    punto_stendisch368_dx_1 = alto_0
      punto_stendisch368_sx_2 = base_3    punto_stendisch368_dx_2 = alto_3
   }

   //Luca 14/09/2020
   PROCEDURA OnSetupLivelli_Ripiani_368
   {

      if( $ATTIVA_DLL==1 & TipoRipiano==1 & FLAG_CompostoGEN == 0 )
      {
         COMANDO(STRCAT("LIVELLI CLEAR ",$__lev_nome__))
         EXITSUB()
      }

      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      //n_ripiani  = 1
      //
      //if( VAR_VAL(idx_ref,"Z") >180 )
      //{
      //   if( VAR_VAL(idx_ref,"Y") >  736 ) { n_ripiani  = 2 }
      //   if( VAR_VAL(idx_ref,"Y") > 1104 ) { n_ripiani  = 3 }
      //   if( VAR_VAL(idx_ref,"Y") > 1472 ) { n_ripiani  = 4 }
      //   if( VAR_VAL(idx_ref,"Y") > 1840 ) { n_ripiani  = 5 }
      //}

      //wk_y_vano =  VAR_VAL(idx_ref,"Y") - $M368_Spe_Fnd - $M368_Spe_Cop

      //wk_y_parz = ( wk_y_vano - n_ripiani*$M368_Spe_Rip) / ( n_ripiani + 1 )

      //liv = $M368_Spe_Fnd
      //liv = liv - $M368_Spe_Rip/2

      //i = 1
      //while ( i<= n_ripiani )
      //{
      //   liv = liv + wk_y_parz + $M368_Spe_Rip
      //
      //   ne          = liv2add + 1
      //   liv2add     = ne
      //   liv2add[ne] = liv
      //
      //   i = i + 1
      //}

      //if( VAR_VAL(idx_ref,"Y") == 920 )
      //{
      //   liv2add    = 2
      //   liv2add[1] = 312
      //   liv2add[2] = 608
      //}

      //Luca 21/09/2020 regole riviste
      n_ripiani  = 1

      if( VAR_VAL(idx_ref,"Y") >  736 ) { n_ripiani  = 2 }
      if( VAR_VAL(idx_ref,"Y") > 1104 ) { n_ripiani  = 3 }
      if( VAR_VAL(idx_ref,"Y") > 1472 ) { n_ripiani  = 4 }
      if( VAR_VAL(idx_ref,"Y") > 1840 ) { n_ripiani  = 5 }

      liv2add    = 1
      liv2add[1] = VAR_VAL(idx_ref,"Y") / 2

      liv  = 0
      step = 368

      i = 1
      while ( i<= n_ripiani )
      {
         liv = liv + step
         if( n_ripiani == 1 ) { liv = VAR_VAL(idx_ref,"Y") / 2  }

         ne          = liv2add + 1
         liv2add     = ne
         liv2add[ne] = liv

         i = i + 1
      }

      if( VAR_VAL(idx_ref,"Y") == 920 )
      {
         liv2add    = 2
         liv2add[1] = 276
         liv2add[2] = 276 + 368
      }

      //livelli passo 92
      if( VAR_VAL(ATTUALE(),"FLAG_CompostoGEN") == 1 )
      {
         DEL_VAR(idx_att,"liv2add*")
         liv2add    = 0
         liv2addscr = 0

         liv_max = VAR_VAL(idx_ref,"Y")
         passo = 92
         liv_att = passo

         while ( liv_att <= liv_max )
         {
            ne = liv2add + 1
            liv2add = ne
            liv2add[ne]    = liv_att

            liv_att = liv_att + passo
         }
      }

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

   PROCEDURA OnQueryBdmLocal_368
   {
      //inserimento
      if( $query_type==1)
      {
         GOSUB SettaPosizione_368

         //Luca 11/03/2021
         if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") )      { GOSUB OnQueryBdmLocal_Lib_AIR }

         //Luca 21/02/2022
         if( NOME(ATTUALE()) == "ModuloMadiaGlass_368" ) { GOSUB OnQueryBdmLocal_MadiaGlass_368 }
      }

      //filtro livelli attrezzaggi
      if( $query_type==2 )
      {
         //Luca 03/02/2022
         if( $query_p2 == 6  )
         {
            if( $ATTIVA_DLL ) { $QueryResult__ = 0 }
         }
      }

      //livelli inserimento muro
      if( $query_type==5 )
      {
         if( VAR_VAL(ATTUALE(), "VAR_FixTerra") == 1 ) { EXITSUB() }

         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
         }

         GOSUB TWEB_ScriviLivelliMuro

         $QueryResult__ = 1
      }
   }

   PROCEDURA OnQueryBdmLocal_MadiaGlass_368
   {
      if( $M4_DragInfo_Mode == 0 )
      {
         if( IS_MATCH(NOME($M4_DragInfo_Ref),"Modu*368") )
         {
            //wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
            wk_sd   = "S"
            wk_offx = GlassL_Scasso_X
            wk_offy = -1*(GlassL_Scasso_Y)

            if( LEFT(GlassL_Scasso_Pos,2) == "SX" )
            {
               wk_sd = "D"
               wk_offx = -1*(GlassL_Scasso_X)
            }

            cnt_new = CostruisciStrCnt(wk_sd,"A-","R",wk_offx,wk_offy,0,0)

            $M4_DragInfo_Cnt = cnt_new
            $QueryResult__ = 3
         }
         else
         {
            //sgancio?
         }
      }
   }

   PROCEDURA SettaPosizione_368
   {
      //if( $ATTIVA_DLL == 0 )  { EXITSUB() }

      //OnQueryBdmLocal
      if( ACTION()==-12 )
      {
         wk_A_TERRA  = 1 - APPESO( ATTUALE(), 1 , "$M4_DRAGINFO_SNAP" )
         wk_A_PARETE = 0

         if( $M4_DragInfo_Mode==0 )
         {
            wk_dist = QUERY_WALL($M4_DragInfo_Ref,"distance from face R")
            //LZ 23/06/2021: no attaccaglie per i preconfigurati
            //if( wk_dist <= 0 ) { wk_A_PARETE = 1 }
            if( wk_dist <= 0
              & VAR_VAL( ATTUALE(), "in_pcfto") == 0 ) { wk_A_PARETE = 1 }

            //Simone 30/01/2023
            if( wk_dist <= 0
              & VAR_VAL(ATTUALE(), "VAR_Revisione_Antiribaltamento") > 0 ) { wk_A_PARETE = 1 }

            if( VAR_VAL(ATTUALE(),"VAR_FixMuro") == 1 & wk_A_PARETE == 0 )
            {
               P2A_Delme = 1
               P2A_Delme_MSG = STRCAT(MSG(1090),"\n",MSG(1218))

               FLAG_RADICE = $NO_RAD
               GOSUB Stato_78
            }
         }
         else
         {
            id_wall = $M4_DragInfo_WallIdx
            r = QUERY_WALL(0,"listwall")
            i = 1
            while ( i<=$Query_Wall )
            {
               if( $Query_Wall[i]==id_wall ) { wk_A_PARETE = 1 }
               i = i + 1
            }
         }
      }
      else
      {
         wk_A_TERRA  = 1 - APPESO( ATTUALE(), 1 , "" )

         wk_A_PARETE = 0
         wk_dist = QUERY_WALL(ATTUALE(),"distance from face R")
         if( wk_dist <= 0
           & VAR_VAL(ATTUALE(), "in_pcfto")==0 ) { wk_A_PARETE = 1 }

         //Simone 30/01/2023
         if( wk_dist <= 0
           & VAR_VAL(ATTUALE(), "VAR_Revisione_Antiribaltamento") > 0 ) { wk_A_PARETE = 1 }

         //Luca 26/07/2022
         //mantis 030307: Errore attaccaglie mancanti su 368 sospesi / AIR
         //controllo se sono agganciata/se ho agganciato elementi AIR a parete
         if( wk_A_PARETE == 0 )
         {
            idx_agg = AGGANCIATA(ATTUALE(),"*")
            AGGANCIATI("agg","*",ATTUALE())
            if( wk_dist == 1 )
            {
               wk_dist = DISTANZA($Query_Wall1,$Query_Wall2)
            }

            AGG_CompoAIR_prec = VAR_VAL(ATTUALE(),"AGG_CompoAIR")
            AGG_CompoAIR = 0
            if( IS_IDX(idx_agg) )
            {
               if( VAR_VAL(idx_agg,"FLAG_Modulo_AIR") == 1
                 | VAR_VAL(idx_agg,"AGG_CompoAIR") == 1  )  { AGG_CompoAIR = 1 }
            }
            i = 1
            while ( i <= agg )
            {
               if( VAR_VAL(agg[i],"FLAG_Modulo_AIR") == 1
                 | VAR_VAL(agg[i],"AGG_CompoAIR") == 1  )  { AGG_CompoAIR = 1 }

               i = i + 1
            }

            //verifico idx_sx / idx_dx
            if( AGG_CompoAIR == 0  )
            {
               if( IsIdx(ATTUALE(),"idx_sx") )
               {
                  if( VAR_VAL(idx_sx,"FLAG_Modulo_AIR") == 1
                    | VAR_VAL(idx_sx,"AGG_CompoAIR") == 1  )  { AGG_CompoAIR = 1 }
               }
               if( IsIdx(ATTUALE(),"idx_dx") )
               {
                  if( VAR_VAL(idx_dx,"FLAG_Modulo_AIR") == 1
                    | VAR_VAL(idx_dx,"AGG_CompoAIR") == 1  )  { AGG_CompoAIR = 1 }
               }
            }

            UpdatePos_AllineaParete = 0
            if( AGG_CompoAIR )
            {
               if( wk_dist > 0 & wk_dist < 2.01 ) { wk_A_PARETE = 1 }
            }
            else
            {
               //Luca 28/07/2022
               if( ABS( wk_dist - 2 ) < 0.1
                 & TIPO_POS(ATTUALE()) == 1
                 & AGG_CompoAIR_prec == 1 ) { UpdatePos_AllineaParete = 1 }
            }
         }
      }

      //ConPiedini_prec     =  ConPiedini
      //ConAttaccaglie_prec =  ConAttaccaglie

      ConPiedini      = 0
      ConAttaccaglie  = 0

      if( wk_A_TERRA  == 1 ) { ConPiedini = 1 }

      //Simone 26/01/2023 - Con Revisione > 0 se il contenitore non ha bisogno di fix a parete, non metto più gli agganci
      if( wk_A_PARETE == 1 )
      {
         ConAttaccaglie = 1

         if( VAR_VAL(ATTUALE(),"VAR_Revisione_Antiribaltamento") > 0 )
         {
            if( VAR_VAL(ATTUALE(),"in_pcfto") == 0 )
            {
               if( VAR_VAL(ATTUALE(),"VAR_FixMuro") == 0 )
               {
                  if( VAR_VAL(ATTUALE(),"ConPiedini") == 1
                    | VAR_VAL(ATTUALE(),"ConSostegnoVetro") == 1
                    | VAR_VAL(ATTUALE(),"VAR_SostegnoOmega") ==1 )   { ConAttaccaglie = 0 }
               }
            }
            else
            {
               //antiribaltamento solo dove indicato nel composto del pcf
               if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_FixTerra") == 1
                 & VAR_VAL(ATTUALE(),"VAR_Massello_Elements") == 0 ) { ConAttaccaglie = 0 }
            }
         }

         if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 1 )
         {
            if( VAR_VAL(ATTUALE(),"in_pcfto") == 0 )
            {
               if( alto_0.y <= 1750
                 & VAR_VAL_STR(ATTUALE(),"Tipo368") != "368-MAD") { ConAttaccaglie = 0 }

               //'Contenitore coperchio'
               if( X < 1472 )
               {
                  if( VAR_VAL(ATTUALE(),"ConFresataSup") == 1
                    & VAR_VAL(ATTUALE(),"FLAG_ConModuloSopra") == 1 )   { ConAttaccaglie  = 0 }
               }
            }
            else
            {
               //antiribaltamento solo dove indicato nel composto del pcf
               if( VAR_VAL(ATTUALE(),"VAR_Massello_Elements") == 0 ) { ConAttaccaglie = 0 }
            }
         }
      }

      if( VAR_VAL(ATTUALE(),"FLAG_ConPannelloLED")==1 ) { ConAttaccaglie = 1 }

      //Simone 06/02/2023 - Integro sopra
      //Luca 22/10/2021
      //if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 1 & wk_A_PARETE == 1 )
      //{
      //   ConAttaccaglie  = 0
      //   if( alto_0.y > 1750 ) { ConAttaccaglie = 1 }
      //
      //   //'Contenitore coperchio'
      //   if( X < 1472 )
      //   {
      //      if( VAR_VAL(ATTUALE(),"FLAG_ConModuloSopra") == 0
      //        & VAR_VAL(ATTUALE(),"ConFresataSup") == 0 )      { ConAttaccaglie  = 1 }
      //   }
      //}

      //Simone 17/03/2022
      if( UN_PADRE("ComodinoxTelaio") ) { ConAttaccaglie = 0 }

      //Luca 22/09/2022
      //if( UN_PADRE("LibreriaPentagram_LP22") ) { ConAttaccaglie = 0 }

      //salvo variabile per verifica su fine ordine
      //valore attaccaglie calcolato a BDM
      ConAttaccaglie_STD = ConAttaccaglie

      GOSUB Set_ConAttaccaglie_Moduli_368

      //if( ACTION() == - 12 )  { EXITSUB() }
      //if( $OnLoadOrder2 ==1 ) { EXITSUB() }
      //
      //if( ConPiedini_prec != ConPiedini ) { COMANDO(STRCAT("RICALCOLA_UNA ", STR(ATTUALE()) , " no_agganciati //SettaPosizione_368")) }

      //Luca 28/07/2022
      if( VAR_VAL(ATTUALE(),"UpdatePos_AllineaParete") & $OnLoadOrder2 != 1 )
      {
         UpdatePos_AllineaParete = 0

         //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 //UpdatePos_AllineaParete"))
      }
   }

   PROCEDURA PostAction2_cancella_368
   {
      if( VAR_VAL(ATTUALE(),"P2A_Delme") == 0 ) { EXITSUB() }

      if( VAR_VAL_STR(ATTUALE(),"P2A_Delme_MSG") != "" )  { DISPLAY2(P2A_Delme_MSG) }

      P2A_Delme = 0
      P2A_Delme_MSG  = ""

      COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
      COMANDO(STRCAT("DELETE ",STR(idx_att)," // PostAction2_cancella_368 ",NOME(ATTUALE())))

   }

   PROCEDURA Offset_Modulo_368
   {
      if( VAR_VAL(-1,"offset_idx") != ATTUALE() )  { EXITSUB() }

      //aggiorno subito posizione led stesi
      WITH_ALIAS("wk_led","LedPan368")
      i = 1
      while ( i <= wk_led )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(wk_led[i]) , " no_agganciati //Offset_Modulo_368 ", NOME(ATTUALE())))
         i = i + 1
      }
   }

   PROCEDURA Set_ConAttaccaglie_Moduli_368
   {
      if( VAR_VAL( ATTUALE(), "FLAG_Moduli_368") == 0 )  { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C087") == 0 )   { EXITSUB() }

      if( VAR_VAL_STR(ATTUALE(),"GEST_C087") == "" )     { EXITSUB() }

      ConAttaccaglie = 0
      if( GEST_C087 == "FR004" | GEST_C087 == "FR005" )  { ConAttaccaglie = 1 }

      //Simone 31/01/2022 - Agganci std anche su testiera
      if( GEST_C087 == "FR021"
        | GEST_C087 == "FR022" )                         { ConAttaccaglie = 1 }

      //Luca 08/03/2021 Mantis 24659: 368: aggiunta posizione
      if( GEST_C087 == "FR011" )                         { ConAttaccaglie = 1 }

      //Simone 23/06/21 - Aggiungo masselli antiribiltamento
      if( GEST_C087 == "FR015" )                         { ConAttaccaglie = 1 }

      //Simone 03/09/21 - Aggancio pannello H.138
      if( GEST_C087 == "FR016"
        | GEST_C087 == "FR019"
        | GEST_C087 == "FR020" )                         { ConAttaccaglie = 1 }

      //Simone 23/06/21 - Pannellino aggancio a Pentagram
      if( GEST_C087 == "FR028" )                         { ConAttaccaglie = 1 }
   }

   PROCEDURA Set_Apertura_368
   {
      if( VAR_VAL( ATTUALE(),"FLAG_Moduli_368" ) == 0 )            { EXITSUB() }

      //LZ 07/12/2021: se in pcf o push da allestimento la categoria non risulta modificata, ma sempre push sono
      //if( IS_VAR_FIXED(ATTUALE(),"GEST_C017") == 0 )    { EXITSUB() }
      if( IS_VAR_FIXED( ATTUALE(), "GEST_C017") == 0
        & VAR_EXIST( ATTUALE(), "VAR_Revisione_PushCest1104")
        & VAR_VAL( ATTUALE(), "VAR_Revisione_PushCest1104") == 0 ) { EXITSUB() }

      if( VAR_VAL_STR(ATTUALE(),"GEST_C017") == "" )               { EXITSUB() }

      ConPushPull = 0
      if( GEST_C017 == "PU001" )  { ConPushPull = 1 }

      PP_PushPull = ConPushPull
   }

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

      //Simone 24/11/21
      DEL_VAR( ATTUALE(),"ORD_FILTRO_C087" )
      gest_C087 = ""

      //if( IS_VAR_FIXED(ATTUALE(),"GEST_C087") )
      //{
      //   DISPLAY2(STRCAT(STR(ACTION())," C087= ",GEST_C087))
      //   if( VAR_VAL_STR(ATTUALE(), "GEST_C087") == "FR004" )  { DEL_VAR_MODIFICATE(ATTUALE(), "GEST_C087") }
      //   //else                                                  { EXITSUB() }
      //}

      gest_C087 = "FR006"
      if( VAR_VAL(ATTUALE(),"ConAttaccaglie") == 1 )   { gest_C087 = "FR004" }

      //Simone 20/07/21 - Gestisco agganci std solo se pcf è sospeso a parete
      if( VAR_VAL(ATTUALE(),"VAR_Revisione_Antiribaltamento") < 1 )
      {
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 1
           & VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 0 )
         {
            if( VAR_VAL(PADRE(ATTUALE(),1),"VAR_FixTerra") == 0 )   { ConAttaccaglie = 1  gest_C087 = "FR004" }
         }
      }

      //Luca 08/03/2021 Mantis 24659: 368: aggiunta posizione
      if( VAR_VAL(ATTUALE(),"FLAG_ConPannelloLED") == 1 )
      {
         gest_C087 = "FR011"
         //Simone 24/11/21 - Blocco modifica agganci se c'è il pannello per illuminazione
         ORD_FILTRO_C087 = "FR011"
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C087") & VAR_VAL_STR(ATTUALE(), "GEST_C087") != "FR011" )  { DEL_VAR_MODIFICATE(ATTUALE(), "GEST_C087") }
      }
      else
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C087") & VAR_VAL_STR(ATTUALE(), "GEST_C087") == "FR011" )  { DEL_VAR_MODIFICATE(ATTUALE(), "GEST_C087") }
      }

      //Simone 24/06/21 - Aggiungo antiribaltamento per pcf
      if( VAR_VAL(ATTUALE(),"ConBifacciale")==0
        & VAR_VAL(ATTUALE(),"wk_mas") > 0 )            { ConAttaccaglie = 1  gest_C087 = "FR015" }

      //Simone 26/01/2023 - Nuova gestione masselli antiribaltamento
      if( VAR_VAL(ATTUALE(),"wk_mas_antirib") > 0 )    { ConAttaccaglie = 1  gest_C087 = "FR015" }

      //Simone 03/09/21 - Aggiungo agganci cassetto H.138
      //FR016 - AGGANCI STD PER 138
      //Simone 18/11/21
      //FR019 - AGGANCI H.138 TESTIERA IMBOTTITA SP.80
      //FR020 - AGGANCI H.138 TESTIERA REPLIS-SAPONETTA
      //Simone 24/03/2022 - Nuova categoria dedicata agli agganci per testiera wildwood, tolgo da precedente
      //FR026 - AGGANCI H.138 TESTIERA WILDWOOD
      if( Y < 184 )
      {
         //gest_C087 = "FR016"
         //ConAttaccaglie = 1
         if( VAR_VAL(ATTUALE(),"ConAttaccaglie") == 1 )   { gest_C087 = "FR016" }

         if( VAR_EXIST(ATTUALE(),"idx_ref") )
         {
            if( NOME(idx_ref) == "Testiera_L21" )
            {
               gest_C087 = "FR020"
               if( VAR_VAL_STR(idx_ref, "VAR_TipoTest") == "IMBOTTITA" )  { gest_C087 = "FR019" }
               if( VAR_VAL_STR(idx_ref, "VAR_TipoTest") == "WILDWOOD"  )  { gest_C087 = "FR026" }
            }
            //Simone 24/03/2022
            if( NOME(idx_ref) == "PannelloAccessorio_Testiera_L21" )
            {
               if( VAR_VAL_STR(idx_ref,"VAR_Tipologia") == "WILDWOOD" )   { gest_C087 = "FR026" }
            }
         }
      }

      //Unico modulo attrezzabile: cassetto L.552 H.184
      //FR021 - PER TESTIERA VETRO
      //FR022 - PER TESTIERA REPLIS-SAPONETTA
      //Simone 24/03/2022 - Estesa la gestione di comodini H.184 a larghezze  e testiere diverse
      //FR024 - PER TESTIERA WILDWOOD
      //FR025 - PER TESTIERA IMBOTTITA SP.80
      //if( X == 552 & Y == 184 )
      if( Y >= 184 )
      {
         if( VAR_EXIST(ATTUALE(),"idx_ref") )
         {
            if( NOME(idx_ref) == "Testiera_L21" )
            {
              //if( VAR_VAL_STR(idx_ref, "VAR_TipoTest") == "SAPONETTA" )   { gest_C087 = "FR022" }
              gest_C087 = "FR022"
              if( VAR_VAL_STR(idx_ref, "VAR_TipoTest") == "WILDWOOD"  )  { gest_C087 = "FR024" }
              if( VAR_VAL_STR(idx_ref, "VAR_TipoTest") == "IMBOTTITA" )  { gest_C087 = "FR025" }
            }

            if( NOME(idx_ref) == "PannelloAccessorio_Testiera_L21" )
            {
               if( VAR_VAL_STR(idx_ref,"VAR_Tipologia") == "VETRO"    )  { gest_C087 = "FR021" }
               if( VAR_VAL_STR(idx_ref,"VAR_Tipologia") == "WILDWOOD" )  { gest_C087 = "FR024" }
            }
         }
      }

      //Luca 17/05/2022
      //Mantis 29280: Miglioria controlli Air
      if( VAR_VAL(ATTUALE(),"FLAG_Modulo_AIR") == 1 )
      {
         idx_ref = ATTUALE()
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 ) { idx_ref = PADRE(ATTUALE(),1) }
         wk_dist_parete = QUERY_WALL(idx_ref,"distance from face R")
         if( wk_dist_parete > 0 ) { wk_dist_parete = DISTANZA($Query_Wall1,$Query_Wall2) }

         //composizione AIR altezza massima 2100 se non agganciate a muro
         //quindi, se posso, attivo automaticamente le attaccaglie
         //if( wk_dist_parete <= 2.001  &  alto_0.y > 1750 )  { ConAttaccaglie = 1  gest_C087 = "FR004" }
         if( wk_dist_parete <= 2.001 )
         {
            //verifico se sotto ho un set vetri
            if( IsIdx(ATTUALE(),"idx_setv_sotto") )
            {
               if( alto_0.y > 1750 ) { ConAttaccaglie = 1 }

               if( FLAG_Cassetto )
               {
                  if( alto_0.y > 1104
                    | IS_IDX(idx_setv_sopra) == 0 ) { ConAttaccaglie = 1 }
               }
            }

            // Mail del 1/12/23 di Ale R. - Qualsiasi contenitore battente per Air Bookshelf
            //                              non a terra dovrà essere dotato di antiribaltamento
            if( VAR_VAL_STR(ATTUALE(),"Tipo368") == "368-MAD" )
            {
               if( VAR_VAL(ATTUALE(),"ConPiedini") == 0 ) { ConAttaccaglie = 1 }
            }
         }

         if( ConAttaccaglie == 1 )
         {
            gest_C087 = "FR004"
            if( VAR_VAL( ATTUALE(), "VAR_Revisione_AIR_FissaggioMuro") > 0 ) { gest_C087 = "FR015" }
         }
      }

      //Simone 22/09/2022 - Agganci per cont Pentagram
      if( UN_PADRE("LibreriaPentagram_LP22") ) { gest_C087 = "FR028" }

      if( IS_VAR_FIXED(ATTUALE(), "GEST_C087") )
      {
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C087") }
         else                                     { EXITSUB() }
      }

      GEST_C087 = gest_C087
      VarAdd = "GEST_C087"   GOSUB Add_TABER_VARSETTATE
   }

   //PIEDINI
   PROCEDURA Set_Gest_C088_368
   {
      gest_C088 = "FR008"

      //if( ConPiedini == 1 ) { gest_C088 = "FR007" }
      if( VAR_VAL(ATTUALE(),"ConPiedini") == 1 ) { gest_C088 = "FR007" }

      if( VAR_VAL(-1,"TPC4WEB") != 1 )
      {
         //non permetto modifica utente
         ORD_FILTRO_C088 = gest_C088
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C088") )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C088") }
      }

      GEST_C088 = gest_C088
      VarAdd = "GEST_C088"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C007_Anta_368
   {
      if( ACTION() <= 0 | ACTION()==2 ) { EXITSUB()  }

      VarAdd = "GEST_C007"

      gest_C007 = ""

      if( Apertura == "RB" )                            { gest_C007 = "RI001" }
      if( Apertura == "VS"
        & VAR_VAL( ATTUALE(), "FLAG_Moduli_368") == 1 ) { gest_C007 = "VA002" }

      if( Apertura == "BA" )
      {
         if( Verso < 0 )                                { gest_C007 = "SX001" }
         if( Verso > 0 )                                { gest_C007 = "DX001" }
      }

      if( gest_C007 != "" )
      {
         //Filtro valori disponibili
         wk_filtro = 1
         if( VAR_VAL( ATTUALE(), "FLAG_Moduli_368") == 0
           & VAR_EXIST(GetTopLevel(ATTUALE()), VarAdd) == 0 )  { wk_filtro = 0 }

         if( wk_filtro == 1 )
         {
            ORD_FILTRO_C007 = gest_C007
            if( IS_VAR_FIXED(ATTUALE(), VarAdd) == 1
              & VAR_VAL_STR( ATTUALE(), VarAdd) != gest_C007 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C007") }
         }

         GEST_C007 = gest_C007
         GOSUB Add_TABER_VARSETTATE
      }
      else
      {
         if( VAR_EXIST( ATTUALE(), "ORD_FILTRO_C007") ) { DEL_VAR( ATTUALE(), "ORD_FILTRO_C007") }
      }

      EXITSUB()

      if( VAR_EXIST(ATTUALE(),"AntaInCoppia")==0 ) { EXITSUB() }

      if( AntaInCoppia==0 )
      {
         //Luca 02/04/2020
         if( UN_PADRE("ArmadioAngoloWTL_Arm20") )
         {
            if( Verso<0 ) { GEST_C007 = "SX001" }
            if( Verso>0 ) { GEST_C007 = "DX001" }

            VarAdd = "GEST_C007"   GOSUB Add_TABER_VARSETTATE
         }

         EXITSUB()
      }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C007") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C007") }

      if( Verso<0 ) { GEST_C007 = "SX001" }
      if( Verso>0 ) { GEST_C007 = "DX001" }

      VarAdd = "GEST_C007"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA PosaAttaccaglie_368
   {
      @escluso = 1
      @HIDE = VAR_VAL( idx_att, "HIDE")

      //Simone 26/01/2023 - Filtro sotto
      //LZ 12/11/2021: pannello per contenitori H138
      //if( @TipoAttaccaglia > 3 ) { EXITSUB() }

      @TipoAttaccaglia = ATT_Tipologia

      //aggiorno subito le misure
      if( @TipoAttaccaglia == 1 )
      {
         @X = 36
         @Y = 136
         @Z = 15
      }
      if( @TipoAttaccaglia == 2 )
      {
         @X = 42
         @Y = 146
         @Z = 19
      }

      if( @TipoAttaccaglia == 3 )
      {
         @X = X
         @Y = 120
      }

      @base_0.y = base_0.y + Y - $M368_Spe_Cop - @Y
      if( FLAG_CopSp38 ) { @base_0.y = base_0.y + Y - $M368_Spe_Cop38 - @Y }

      //Luca 09/11/2020
      //moduli con vano a giorno attaccaglie -19
      //if( VAR_VAL(PADRE(idx_att,1),"VAR_DivOriz") == 1 & ATT_Tipologia == 2 )
      if( VAR_VAL(PADRE(idx_att,1),"VAR_DivOriz") == 1 & ATT_Tipologia == 2 & FLAG_CopSp38 == 0 )
      {
         @base_0.y = @base_0.y - 19
      }

      @base_0.z = base_0.z + $M368_Rie_Sch_ZR - @Z

      //SX / BARRA T
      if( @NrAtt == 1 )
      {
         //if( ATT_Tipologia > 0 ) { @escluso = 0 }
         if( ATT_Tipologia == 1
           | ATT_Tipologia == 2
           | ATT_Tipologia == 3 ) { @escluso = 0 }

         @base_0.x = base_0.x + $M368_Spe_Fia

         //if( ATT_Tipologia == 2 )  { @base_0.x = base_0.x + $M368_Spe_Fia + 30 - @X/2 }
         if( ATT_Tipologia == 2 )  { @base_0.x = base_0.x + $M368_Spe_Fia + 22.5 - @X/2 }

         //if( ATT_Tipologia == 3 )  { @base_0.x = base_0.x + X/2 - @X/2 }
         if( ATT_Tipologia == 3 ) { @base_0.x = base_0.x }

         @PosAttaccaglia = -1
      }

      //DX
      if( @NrAtt == 2 )
      {
         if( ATT_Tipologia == 1
           | ATT_Tipologia == 2 ) { @escluso = 0 }

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

         //if( ATT_Tipologia == 2 )  { @base_0.x = base_0.x + X - $M368_Spe_Fia - 30 - @X/2 }
         if( ATT_Tipologia == 2 )  { @base_0.x = base_0.x + X - $M368_Spe_Fia - 22.5 - @X/2 }

         @PosAttaccaglia = 1
      }

      //CENTRALE / SX INFERIORE (in caso di doppie)
      if( @NrAtt == 3 )
      {
         if( ATT_Tipologia == 1 | ATT_Tipologia == 2 )
         {
            if( ATT_Centrale == 1 | ATT_Doppie == 1 ) { @escluso = 0 }
         }

         //Luca 16/02/2021 su richiesta di Raffaele
         //@base_0.x = base_0.x + X/2 - @X/2 + 41.5
         @base_0.x = base_0.x + X/2 - @X/2 + 41.5 - 14

         //Luca 08/07/2022
         if( VAR_VAL(GetTopLevel(ATTUALE()),"DivVert_X") == 38
           | VAR_VAL(GetTopLevel(ATTUALE()),"VAR_ConfigVani") >= 2 ) { @base_0.x = base_0.x + X/2 - @X/2 + 41.5 }

         @PosAttaccaglia = 0

         if( ATT_Doppie == 1 )
         {
            @base_0.x = base_0.x + $M368_Spe_Fia
            //Luca 04/11/2020
            //@base_0.y = @base_0.y - @Y - 20
            @base_0.y = @base_0.y - @Y

            @PosAttaccaglia = -1
         }
      }

      //DX INFERIORE (in caso di doppie)
      if( @NrAtt == 4 )
      {
         if( ATT_Tipologia == 1 | ATT_Tipologia == 2 )
         {
            if( ATT_Doppie == 1 ) { @escluso = 0 }
         }

         @base_0.x = base_0.x + X - $M368_Spe_Fia - @X
         //Luca 04/11/2020
         //@base_0.y = @base_0.y - @Y - 20
         @base_0.y = @base_0.y - @Y

         @PosAttaccaglia = 1
      }

      //SOLO PER MADIE
      if( ATT_Tipologia == 1 )
      {
         if( @NrAtt == 5 )
         {
            @escluso = SE_NUM( ATT_Divisorio1<=0 , 1 , 0)
            @base_0.x = base_0.x + ATT_Divisorio1
            @PosAttaccaglia = ATT_Divisorio1_Pos
         }
         if( @NrAtt == 6 )
         {
            @escluso = SE_NUM( ATT_Divisorio2<=0 , 1 , 0)
            @base_0.x = base_0.x + ATT_Divisorio2
            @PosAttaccaglia = ATT_Divisorio2_Pos
         }
         if( @NrAtt == 7 )
         {
            @escluso = SE_NUM( ATT_Divisorio3<=0 , 1 , 0)
            @base_0.x = base_0.x + ATT_Divisorio3
            @PosAttaccaglia = ATT_Divisorio3_Pos
         }
         if( @NrAtt == 8 )
         {
            @escluso = SE_NUM( ATT_Divisorio4<=0 , 1 , 0)
            @base_0.x = base_0.x + ATT_Divisorio4
            @PosAttaccaglia = ATT_Divisorio4_Pos
         }
         if( @NrAtt == 9 )
         {
            @escluso = SE_NUM( ATT_Divisorio5<=0 , 1 , 0)
            @base_0.x = base_0.x + ATT_Divisorio5
            @PosAttaccaglia = ATT_Divisorio5_Pos
         }
      }

      //LZ 14/01/2022: gestisco ConAttaccaglie e posizione sempre FerramentaModulo_368, dato che questo porta anche altri elementi indispensabili per diversi controlli
      //               (per esempio miniwinch e controlli collisioni giunzioni)
      if( ConAttaccaglie == 0 ) { @escluso = 1 }
   }

   PROCEDURA PosaMiniwinch_368
   {
      @VAR_Tipologia = "MINIWINCH"

      @base_0.y = base_0.y + $M368_Spe_Fnd + 117.4
      @base_0.z = base_0.z + Z - 25.8 - @Z

      if( Y == 184)
      {
         @base_0.y = base_0.y + $M368_Spe_Fnd + 49.4
         @base_0.z = base_0.z + Z - 30.1 - @Z

         if( FLAG_CopSp38 == 1 )
         {
            @base_0.y = base_0.y + $M368_Spe_Fnd + 33.4
            @base_0.z = base_0.z + Z - 125.8 - @Z
         }
      }

      if( Y < 184)
      {
         @VAR_Tipologia = "NANOWINCH"

         @base_0.y = base_0.y + $M368_Spe_Fnd + 57 - 47.2
         @base_0.z = base_0.z + Z - 83 + 15.5 - @Z
      }

      wk_b0y_max = base_0.y + Y - $M368_Spe_Cop - FLAG_CopSp38*$M368_Spe_Cop - @Y
      if( @base_0.y > wk_b0y_max) { @base_0.y = wk_b0y_max }

      //Luca 21/01/2021
      if( $PCV_ContCollisioni_su_SCH ) { @escluso = 1 }
   }

   PROCEDURA Offset_Modulo_Glass_368
   {
      if( VAR_GlassL_ConScasso == 0 )  { EXITSUB() }

      NEAR_GLOBALE2("wk_mod_tmp",idx_cnear_scs,5,"Mod*368")

      idx_mod = -1

      i = 1
      while ( i<= wk_mod_tmp )
      {
         if( wk_mod_tmp[i] != ATTUALE() ) { idx_mod = wk_mod_tmp[i] }
         i = i + 1
      }

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

      SET_#(idx_mod)

      ang_att = ANG_TOT_NOR(ATTUALE())

      wk_offy = 0

      if( GlassL_Scasso_Pos=="SX-AL"
        | GlassL_Scasso_Pos=="DX-AL" ) { wk_offy = #base_0.y - pnt_scs_l.y  }

      if( GlassL_Scasso_Pos=="SX-BA"
        | GlassL_Scasso_Pos=="DX-BA" ) { wk_offy = #alto_0.y - pnt_scs_l.y }

      wk_offx = 0
      wk_offz = 0

      wk_offx1 = 0

      if( GlassL_Scasso_Pos=="SX-AL"
        | GlassL_Scasso_Pos=="SX-BA" )
      {
         wk_offx = DistanzaFraPunti(pnt_scs_l,#alto_3,ang_att)

         wk_offx1 = DistanzaFraPunti(base_0,#base_3,ang_att)

         //if( ABS(wk_offx1) < 0.1  ) { wk_offx = -1*wk_offx }

         //verifico se devo spostarmi a sx o a dx
         PX = pnt_scs_l
         PX.x  = pnt_scs_l.x - COSENO(ang_att)*10000
         PX.z  = pnt_scs_l.z +   SENO(ang_att)*10000

         PT_mod = #base_3
         PT_mod.y = PX.y

         if( DISTANZA(PX,PT_mod) < DISTANZA(PX,pnt_scs_l) ) { wk_offx = -1*wk_offx }
      }

      if( GlassL_Scasso_Pos=="DX-AL"
        | GlassL_Scasso_Pos=="DX-BA" )
      {
         wk_offx = DistanzaFraPunti(pnt_scs_l,#alto_0,ang_att)

         wk_offx1 = DistanzaFraPunti(base_3,#alto_0,ang_att)

         //if( ABS(wk_offx1) > 0.1  ) { wk_offx = -1*wk_offx }

         PX = pnt_scs_l
         PX.x  = pnt_scs_l.x - COSENO(ang_att)*10000
         PX.z  = pnt_scs_l.z +   SENO(ang_att)*10000

         PT_mod = #base_0
         PT_mod.y = PX.y

         if( DISTANZA(PX,PT_mod) < DISTANZA(PX,pnt_scs_l) ) { wk_offx = -1*wk_offx }
      }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- wk_offx = ",STR(wk_offx) , " wk_offy = ",STR(wk_offy)))

//    EXITSUB()

      offx = COSENO(ang_att)*wk_offx
      offz =   SENO(ang_att)*(-1*wk_offx)

      COMANDO(STRCAT("EDITPOS_REL ",STR(ATTUALE()) , " ",STR(offx), " ",STR(wk_offy) ," " ,STR(offz) , " 0 // Offset_Modulo_Glass_368"))
   }

   //} ********** 368 LIVING **********

   PROCEDURA CMP_CODICEATT
   {
      if ( VAR_EXIST(idx_att,"cmp_name") ) { $CMP_CODICEATTUALE = cmp_name }
      else                                 { $CMP_CODICEATTUALE = ""       }
   }

   PROCEDURA std_Punto_Punto
   {
      PART  = $stesi_pt_sx
      ARR   = $stesi_pt_dx
      ARR.y = PART.y
      X = DISTANZA(PART,ARR)

      base_0 = PART
      GOSUB calcola_ang_y_2
   }

   PROCEDURA calcola_ang_y_2
   {
      a_z=PART.z-ARR.z
      a_x=ARR.x-PART.x
      if(a_z==0 & a_x==0)  { ang_y=0 }
      else                 { ang_y=GRADI(ATAN2(a_z,a_x)) }
   }

   PROCEDURA CorpoAvanzata_Led_Pannello_368
   {
      COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- CorpoAvanzata_Led_Pannello_368"))
      EXITSUB()

      //Controllo se sto stendendo su top
      if ( NOME($id_sx) = "PannelloRetroXLED_368")
         | NOME($id_dx) = "PannelloRetroXLED_368") )
      {
         HI($id_sx,0)
         HI($id_dx,0)
         EXIT()
      }

      EXITSUB()

      $wk_cmd_ele  = STRCAT("ELEMENTO_S ",$CMP_CODICEATTUALE)
      $wk_cmd_stru = "STRUTTURA_S"
      $wk_cmd_memo = "VAR_SET con_macro=1"

      $wk_id_top_sx = $id_sx
      $wk_punto_sx = "punto_alz_sx"
      $wk_ang_prec = -1

      $wk_t = 1
      while($wk_t<=$wk_tops)
      {
         $wk_id_top = $wk_tops[$wk_t]

         //Se è l'ultimo top controllo per laterale dx
         if($wk_t==$wk_tops) { GOSUB alz_laterale_dx }

         HI($wk_id_top,0)
         //per spegnere serve un ridisegna
         RIDISEGNA($wk_id_top)
         $wk_t = $wk_t + 1
      }

      DEL_VAR(-1,"wk_*")
      DEL_VAR(-1,"quante_alza_con_macro")
   }

   PROCEDURA Punti_Top_368
   {
      Xt = X + Sbrd_SX + Sbrd_DX
      Zt = Z + Sbrd_FR + Sbrd_RT

      GOSUB punti

      //pnt_sx_0 = base_0
      //pnt_sx_1 = alto_1
      //pnt_dx_0 = base_3
      //pnt_dx_1 = alto_2

      pnt_top_b0 = base_0   pnt_top_b0.x = pnt_top_b0.x - Sbrd_SX        pnt_top_b0.z = pnt_top_b0.z - Sbrd_RT
      pnt_top_b1 = base_1   pnt_top_b1.x = pnt_top_b1.x - Sbrd_SX        pnt_top_b1.z = pnt_top_b1.z + Sbrd_FR
      pnt_top_b2 = base_2   pnt_top_b2.x = pnt_top_b2.x + Sbrd_DX        pnt_top_b2.z = pnt_top_b2.z + Sbrd_FR
      pnt_top_b3 = base_3   pnt_top_b3.x = pnt_top_b3.x + Sbrd_DX        pnt_top_b3.z = pnt_top_b3.z - Sbrd_RT

      base_so = pnt_top_b0
      alto_ne = pnt_top_b2  alto_ne.y = Y

      vano_0_0 = pnt_top_b0
      vano_l_0 = Xt
      vano_p_0 = Zt
   }

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

      wk_sbordo_sx = 0
      wk_sbordo_dx = 0
      wk_sbordo_rt = 0
      wk_sbordo_fr = 0

      if( nome_att == "TopVetro_368" )
      {
         wk_sbordo_sx = -1*Rie_Vtr
         wk_sbordo_dx = -1*Rie_Vtr

         //Luca 17/02/2021
         if( IS_IDX(idx_ref) )
         {
            if( NOME(idx_ref)=="Ripiano_30MM" )
            {
               wk_sbordo_sx = 0
               wk_sbordo_dx = 0
            }
         }
         if( StesoPunti_30MM == 1 )
         {
            wk_sbordo_sx = 0
            wk_sbordo_dx = 0
         }
      }

      if( nome_att == "TopWildwood_368" )
      {
         wk_sbordo_fr = $M368_Spe_Ant + $M368_Aria_Ant_Z

         wk_basi_cpp = 0
         //TODO-- verificare presenza pushpull --> aumento aria
         BOX_MODE(0)
         NEAR_GLOBALE2("near",idx_cnear_dw,2,"Modulo_368")
         i = 1
         while ( i <= near )
         {
            if( VAR_VAL(near[i],"PP_PushPull") == 1 )
            {
               wk_basi_cpp = 1
               i = near
            }

            i = i + 1
         }

         if( wk_basi_cpp == 1 ) { wk_sbordo_fr = $M368_Spe_Ant + $M368_Aria_Ant_Z + 1.5 }

      }

      if( IS_VAR_FIXED(ATTUALE(),"Sbrd_SX") == 0 ) { Sbrd_SX = wk_sbordo_sx }
      if( IS_VAR_FIXED(ATTUALE(),"Sbrd_DX") == 0 ) { Sbrd_DX = wk_sbordo_dx }
      if( IS_VAR_FIXED(ATTUALE(),"Sbrd_RT") == 0 ) { Sbrd_RT = wk_sbordo_rt }
      if( IS_VAR_FIXED(ATTUALE(),"Sbrd_FR") == 0 ) { Sbrd_FR = wk_sbordo_fr }
   }

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

      CRS_lista_var = "Sbrd_SX;Sbrd_DX;Sbrd_RT;Sbrd_FR"
      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 CtrlLimitiPCV_Top_368
   {
      if( ACTION() <= 0 | ACTION() == 2 | COMPONENDO() | $OnLoadOrder==1 )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_dw") == 0  )  { EXITSUB() }

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

      AumentaLimiteFroPCV = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_mod",idx_cnear_dw,2,"Modulo*368")

      if( wk_mod == 0 )  { EXITSUB() }

      //ciclo tutte le basi e verifico se
      // - sono basi vasistas
      // - hanno il push sul coperchio
      i = 1
      while ( i <= wk_mod  & AumentaLimiteFroPCV == 0 )
      {
         if( VAR_VAL(wk_mod[i],"FLAG_Vasistas")==1 ) { AumentaLimiteFroPCV = 1 }

         //cerco il coperchio
         COMPONENTI2("cop",wk_mod[i],"Cop_368")
         if( cop > 0 )
         {
            if( VAR_VAL(cop[1],"FLAG_ConPushPull") == 1 ) { AumentaLimiteFroPCV = 1 }
         }
         i = i + 1
      }
   }

   PROCEDURA GestTop_368
   {
      if( ACTION() <= 0 | ACTION() == 2 | COMPONENDO() )  { EXITSUB() }

      GEST_X = Xt
      GEST_Z = Zt

      top_bin_etvoila = 0
      BOX_MODE(0)
      NEAR_GLOBALE2("wk_bin",idx_cnear_dw,5,"Binario_EtVoila")

      if(wk_bin > 0)  { top_bin_etvoila = 1 }

      //Simone 04/03/2022 - Per gestire il top368 su altri articoli (es. armadio weightless)
      if( VAR_VAL(ATTUALE(),"FLAG_Speciale") == 1 )      { EXITSUB() }
      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 1
        | IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 1 ) { EXITSUB() }

      GEST_CODICE = ""

      RADICE_prec = VAR_VAL_STR(ATTUALE(),"RADICE")

      //parte 1 e 2
      perRADICE_PAR1 = "TBW"
      perRADICE_PAR2 = STR(Y)

      if( nome_att == "TopVetro_368" )
      {
         perRADICE_PAR1 = "TOPV368"
         perRADICE_PAR2 = ""
         if( top_bin_etvoila == 1 )  { perRADICE_PAR1 = "TOPV30M" }
      }

      //LZ 07/12/2021
      //parte 3
      perRADICE_PAR3 = LEFT(STR(Z),1)

      /// Top Vetro
      if( nome_att == "TopVetro_368" )
      {
         //// Top vetro std
         if( top_bin_etvoila == 1 )
         {
            if( perRADICE_PAR3 == "1"
              | perRADICE_PAR3 == "2" ) { perRADICE_PAR3 = "3" }
         }
         //// Top vetro etvoilà
         else
         {
            if( perRADICE_PAR3 == "4" ) { perRADICE_PAR3 = "5" }
         }
      }
      /// Top WW
      else
      {
         if( perRADICE_PAR3 == "1" ) { perRADICE_PAR3 = "2" }
         if( perRADICE_PAR3 == "4" ) { perRADICE_PAR3 = "5" }
      }

      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0 )
      {
         perRADICE = STRCAT( perRADICE_PAR1, perRADICE_PAR2, perRADICE_PAR3)
         RADICE = perRADICE
      }

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

   PROCEDURA Stendi_Top_368
   {
      if( VAR_VAL(ATTUALE(),"delme")==1 ) { EXITSUB() }
      steso = 1

      ScriviSuLog(0,"Stendi_Top_368","START")

      if ( VAR_EXIST(-1,"stesi_var_dx") )  { nome_punto_dx = $stesi_var_dx }
      if ( VAR_EXIST(-1,"stesi_var_sx") )  { nome_punto_sx = $stesi_var_sx }

      //devo controllare i casi in cui non è possibile stendere
      blocca_stesura = 0
      blocca_stesura_msg = ""

      stesi_mode_sx = $stesi_mode_sx
      stesi_mode_dx = $stesi_mode_dx

      if ( $stesi_mode_sx==$stesi_XYZ
         & $stesi_mode_dx==$stesi_XYZ )
      {
         StesoPunti_30MM = 1

         P1   = $stesi_pt_sx
         P2   = $stesi_pt_dx

         ang_y = ANG_2_PUNTI( P1 , P2)

         if( ABS( P2.y - P1.y ) > 0.1  )
         {
            blocca_stesura = 1
            blocca_stesura_msg = MSG(1051)
         }

         P1_0 = P1   P1_0.y = 0
         P2_0 = P2   P2_0.y = 0


         X = DISTANZA(P1_0,P2_0)*10
         X = FLOOR(X+0.5)/10

         if( X < 120 | X > 3200 )
         {
            blocca_stesura = 1
            blocca_stesura_msg = MSG(1215)
         }

         VAR_SET_MODE(ATTUALE(),"Z",$MODE_MISURE+$MODE_USER)
         VAR_SET_MENU(ATTUALE(),"Z",STRCAT("Prf_30MM ( ",STR(Z_Min),"-",STR(Z_Max)," )"))

         if( IS_VAR_FIXED(ATTUALE(),"Z")==0 ) { CHIEDI(ATTUALE(),"Z") }
         base_0 = P1
      }


      if ( $stesi_mode_sx==$stesi_Elemento
         & $stesi_mode_dx==$stesi_Elemento )
      {
         ID_Sin = $stesi_idx1
         ID_Des = $stesi_idx2

         ////Luca 23/02/2021
         //if( NOME(ID_Sin)=="Ripiano_30MM"
         //  & NOME(ID_Des)=="Ripiano_30MM"  ) { Steso_30MM = 1 }
         if( VAR_VAL(ID_Sin,"Stendi_TOP_30MM") == 1
           & VAR_VAL(ID_Des,"Stendi_TOP_30MM") == 1 ) { Steso_30MM = 1 }

         su_ang = 0

         //se hanno angolo diversi , non stendo
         if( ABS(ANG_TOT_NOR(ID_Sin)-ANG_TOT_NOR(ID_Des))>0.1 ) { blocca_stesura = 1 }

         SET_#(ID_Sin)
         if( VAR_EXIST(ID_Sin,"punto_sx_top") == 0 )
         {
            blocca_stesura = 1
            P1 = #alto_0
         }
         else
         {
            P1 = #punto_sx_top
         }
         Z1 = #Z
         //if( NOME(ATTUALE()) == "TopWildwood_368" & NOME(ID_Sin)=="Modulo_368" ) { Z1 = #Zt }

         //LZ 30/08/2021: preconfigurato e in generale elementi che presentano punto frontale
         if( VAR_VAL( ID_Sin, "PCF_Elements") == 1 ) { Z1 = #Z - $M368_Spe_Ant - $M368_Aria_Ant_Z }

         if( VAR_EXIST( ID_Sin, "punto_sx_top_fro") )
         {
            P3 = #punto_sx_top_fro
            Z1 = DISTANZA( P1, P3) * 10
            Z1 = FLOOR(Z1 + 0.5) / 10
         }

         //Luca 16/09/2021
         if( VAR_VAL( ID_Sin, "FLAG_BinAnta_EV") == 1 ) { Z1 = Z1 + 71 }

         SET_#(ID_Des)
         if( VAR_EXIST(ID_Des,"punto_dx_top") == 0 )
         {
            blocca_stesura = 1
            P2 = #alto_3
         }
         else
         {
            P2 = #punto_dx_top
         }
         Z2 = #Z

         //la Z del top corrisponde sempre alla profondità della scocca
         //if( NOME(ATTUALE()) == "TopWildwood_368" & NOME(ID_Des)=="Modulo_368" ) { Z2 = #Zt }

         //LZ 30/08/2021: preconfigurato e in generale elementi che presentano punto frontale
         if( VAR_VAL( ID_Des, "PCF_Elements") == 1 ) { Z2 = #Z - $M368_Spe_Ant - $M368_Aria_Ant_Z }

         if( VAR_EXIST( ID_Des, "punto_dx_top_fro") )
         {
            P4 = #punto_dx_top_fro
            Z2 = DISTANZA( P2, P4) * 10
            Z2 = FLOOR(Z2 + 0.5) / 10
         }

         //Luca 16/09/2021
         if( VAR_VAL( ID_Des, "FLAG_BinAnta_EV") == 1 ) { Z2 = Z2 + 71 }

         if( ABS( P2.y - P1.y ) > 0.1  )
         {
            blocca_stesura = 1
            #ifdef TE
               blocca_stesura_msg = "Punti y non allineati"
            #endif
         }

         GOSUB ricava_ang_y

         x1  = P1.x           z1  = P1.z
         x2  = P2.x           z2  = P2.z
         x12 = x2-x1          z12 = z2-z1
         ca = COSENO(ang_y )
         sa = SENO(-ang_y)

         X = FLOOR(((x12*ca+z12*sa)+0.005)*100)/100

         //if( NOME(ATTUALE())=="TopWildwood_368" ) { X = Xt }

         Z = Z1
         if( Z2 > Z1 ) { Z = Z2 }

         x_check = X
         if( NOME(ATTUALE()) == "TopVetro_368" ) { x_check = X - 2*Rie_Vtr }

         z_check = Z

         ScriviSuLog(0,"Stendi_Top_368",STRCAT("x_check=",STR(x_check)," | z_check=",STR(z_check)))

         if( x_check < X_Min | x_check > X_Max
           | z_check < Z_Min | z_check > Z_Max  )
         {
            blocca_stesura = 1
            blocca_stesura_msg = "Impossibile stendere. Non rispetta le misure minime/massime."
         }

         base_0 = P1

         idx_ref = ID_Sin

         ScriviSuLog(0,"Stendi_Top_368",STRCAT("idx_ref=",STR(idx_ref),"-",NOME(idx_ref)))
      }

      if( blocca_stesura > 0 )
      {
         delme = 1
         //FLAG_RADICE = $NO_RAD
         Delme_BloccaConfigurazione(ATTUALE())

         if( blocca_stesura_msg!="" )  { DISPLAY2(blocca_stesura_msg) }

         //COMANDO2("Show Abilita ON")
         //NO_GEST = 1
         EXIT()
      }

      ScriviSuLog(0,"Stendi_Top_368","END")

   }

   PROCEDURA Notifica_Top_368
   {
      if( ACTION()!=12 ) { EXITSUB() }

      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         EXIT()
      }

      ScriviSuLog(0,"Stendi_Top_368",STRCAT("START NOTIFICA"))

      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) ," X=",STR(X) , " Z=",STR(Z) ," auto=",STR(auto) ))

      //if( NOME(ATTUALE())=="TopWildwood_368" )
      //{
      //   COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) ," X=",STR(X) , " Z=",STR(Z) ," auto=",STR(auto) ))
      //}
      //else
      //{
      //   COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) ," Xt=",STR(Xt) , " Z=",STR(Z) ," auto=",STR(auto) ))
      //}

      GOSUB Calcola_SbordiTop_368

      COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_att)," //Notifica Top_368"))

      //non aggancio se steso per punti
      if( VAR_VAL(ATTUALE(),"StesoPunti_30MM") == 0 )
      {
         wk_offx = 0
         wk_offy = 0
         wk_offz = 0

         //LZ 30/08/2021: preconfigurati
         if( VAR_VAL( idx_ref, "PCF_Elements") == 1 )
         {
           SET_#(idx_ref)
           wk_offx = DISTANZA( [ #alto_0.x, 0, #alto_0.z], [ base_0.x, 0, base_0.z]) * 10
           wk_offx = FLOOR( wk_offx + 0.5) / 10
         }

         wk_cnt = STRCAT("CNT S + 0,A - 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0")

         COMANDO(wk_cnt)
         COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
         //COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_att)," //Notifica",NOME(ATTUALE())))
         //COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_ref)," no_agganciati //Notifica " , NOME(ATTUALE())))
      }

      BOX_MODE(0)
      NEAR_GLOBALE("wk_pc",ATTUALE(),2,1,"Passacavi_368")
      i = 1
      while ( i <= wk_pc )
      {
         COMANDO(STRCAT("VAR_CHANGE 0 ",STR(wk_pc[i]) , " RigeneraScasso=1"))
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(wk_pc[i])) , " no_agganciati \\ Notifica top"))
         COMANDO(STRCAT("Procedura AggiornaSAT_PCV_368 ",STR(wk_pc[i])))
         i = i + 1
      }

      NEAR_GLOBALE("wk_rip",ATTUALE(),2,1,"RipetitoreIR_368")

      i = 1
      while ( i <= wk_rip )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(GetTopLevel(wk_rip[i])) , " no_agganciati \\ Notifica top"))
         COMANDO(STRCAT("Procedura AggiornaSAT_PCV_368 ",STR(wk_rip[i])))
         i = i + 1
      }

      ScriviSuLog(0,"Stendi_Top_368",STRCAT("END NOTIFICA"))
   }

   PROCEDURA ConfigAntaInCoppia_Modulo_368
   {
      //LZ 16/06/2021:
      //devo calcolare le ante anche in fase di caricamento dell'ordine
      //alcune finiture sono limitate in base alle dimensioni dell'anta
      //if( ACTION() < 0 | ACTION() == 2 | $OnLoadOrder == 1 ) { EXITSUB() }
      if( ACTION() < 0 | ACTION() == 2 ) { EXITSUB() }

      HIDE_ON_EDIT2(ATTUALE(),"VAR_DimAntaSX",1)
      HIDE_ON_EDIT2(ATTUALE(),"VAR_DimAntaDX",1)

      if( UN_PADRE("Modulo_368") == 0 )  { EXITSUB() }

      idx_pdr = PADRE(ATTUALE(),1)

      if( VAR_VAL(idx_pdr,"VAR_ConfigVani") == 0 ) { EXITSUB() }

      if( SdoppiaAnta == 0 ) { EXITSUB() }

      if( $ATTIVA_DLL==1 )
      {
         HIDE = 0
         DescEdit__ = MSG(1023)
      }

      HIDE_ON_EDIT2(ATTUALE(),"VAR_DimAntaSX",0)
      HIDE_ON_EDIT2(ATTUALE(),"VAR_DimAntaDX",0)

      nome_menu = STRCAT("DimAnt_368_",STR(ATTUALE()))

      //gestisco una variabile di controllo per evitare di rigenerare di continuo il menù
      nome_var_ctr = STRCAT(nome_menu,"_CTRL")

      if( VAR_EXIST(ATTUALE(),nome_var_ctr) == 0  ) { VAR_CREATE_STR(ATTUALE(),nome_var_ctr,"",0,"") }

      dim_nom_ante = X + $M368_Aria_Ant_X*2

      wk_val_x = 0

      if( dim_nom_ante == 736 )
      {
         wk_val_x = 1
         wk_val_x[1] = 368
      }

      if( dim_nom_ante == 1104 )
      {
         wk_val_x = 3
         wk_val_x[1] = 368
         wk_val_x[2] = 552
         wk_val_x[3] = 736
      }

      if( dim_nom_ante == 1472 )
      {
         wk_val_x = 2
         wk_val_x[1] = 552
         wk_val_x[2] = 736
      }

      if( wk_val_x == 1 ) { VAR_DimAntaSX = wk_val_x[1] }

      //se cambio valori, rigenero menù
      wk_nome_var_ctr = STR(wk_val_x)

      i = 1
      while ( i <= wk_val_x )
      {
         wk_nome_var_ctr = STRCAT(wk_nome_var_ctr,"-",STR(wk_val_x[i]))
         i = i + 1
      }

      VAR_DimAntaDX = dim_nom_ante - VAR_DimAntaSX

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      VAR_SET_MENU(ATTUALE(),"VAR_DimAntaSX",nome_menu)

      if( wk_nome_var_ctr == VAR_VAL_STR(ATTUALE(),nome_var_ctr) ) { EXITSUB() }

      VAR_VALUESTR_SET(ATTUALE(),nome_var_ctr,wk_nome_var_ctr)

      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," ins"))
      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," clear"))
      i = 1
      while( i <= wk_val_x )
      {
         menu_val = wk_val_x[i]
         menu_dsc = wk_val_x[i]

         COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," add ",STR(menu_val)," ",STR(menu_dsc)))
         i = i + 1
      }
   }

   PROCEDURA CtrlPresenza_LED_368
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"idx_cnear_up") == 0 ) { EXITSUB() }

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

      BOX_MODE(0)

      LED_Sopra = 0
      LED_Sotto = 0

      idx_LED_sopra = -1
      idx_LED_sotto = -1

      NEAR_GLOBALE2("led_up",idx_cnear_up,2,"Led_PannelloRetro_368")
      NEAR_GLOBALE2("led_dw",idx_cnear_dw,2,"Led_PannelloRetro_368")

      if( led_up > 0 )  { LED_Sopra = 1   idx_LED_sopra = led_up[1] }
      if( led_dw > 0 )  { LED_Sotto = 1   idx_LED_sotto = led_dw[1] }
   }

   PROCEDURA Stendi_SchienaleVani_368
   {
      if( VAR_VAL(ATTUALE(),"steso") == 0 ) { COMANDO2("Show Abilita OFF") }
      steso = 1

      P1   = $stesi_pt_sx
      P2   = $stesi_pt_dx

      ang_y = ANG_2_PUNTI( P1 , P2)

      punto_ins = P1
      if( P1.y > P2.y  ) { punto_ins.y = P2.y }

      base_0 = punto_ins

      P1_0 = P1   P1_0.y = 0
      P2_0 = P2   P2_0.y = 0

      X = DISTANZA(P1_0,P2_0)*10
      X = FLOOR(X+0.5)/10

      if( P1.y>P2.y )  { Y = P1.y - P2.y }
      else             { Y = P2.y - P1.y }
      Y = Y * 10
      Y = FLOOR(Y+0.5)/10

      //devo verificare se le dimensioni sono possibili, altrimenti blocco la stesura
      wk_blocca_stesura = 0
      wk_blocca_stesura_msg = ""

      //verifico dimensioni
      if( X <= 0 | Y <= 0 )
      {
         wk_blocca_stesura = 1
         wk_blocca_stesura_msg = MSG(1215)
      }

      if( X > 1104 & Y > 1288 )
      {
         wk_blocca_stesura = 1
         wk_blocca_stesura_msg = MSG(1215)
      }

      if( X > 2944 )
      {
         wk_blocca_stesura = 1
         wk_blocca_stesura_msg = MSG(1215)
      }
      if( Y > 2944 )
      {
         wk_blocca_stesura = 1
         wk_blocca_stesura_msg = MSG(1215)
      }

      if( wk_blocca_stesura>0 )
      {
         delme = 1
         if( wk_blocca_stesura_msg=="" )
         {
            DISPLAY3(MSG(1110),$MB_ICONERROR)
         }
         else
         {
            DISPLAY3(wk_blocca_stesura_msg,$MB_ICONERROR)
         }

         FLAG_RADICE = $NO_RAD
         NO_GEST = 1
      }
   }

   PROCEDURA Notifica_SchienaleVani_368
   {
      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         COMANDO2("Show Abilita ON")
         EXIT()
      }

      COMANDO2("Show Abilita ON")

      //SE SERVE AGGANCIARLO
      NEAR("wk_near",idx_cnear_b0,5,0,"Modulo*368")
      if( wk_near == 0 )
      {
         //Simone 14/07/21 - Elimino lo schienale se la stesura non è corretta
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         EXIT()
      }

      idx_mod = wk_near[1]
      ang_mod = ANG_TOT_NOR(idx_mod)

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_mod=",STR(idx_mod) , " " , STR(ang_mod)))

      //controllo che le basi siano allineate
      idx_mod_a3 = -1
      NEAR("wk_near_a3",idx_cnear_a3,5,0,"Modulo*368")

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_mod=",STR(idx_mod) , " " , STR(ang_mod) , " ", "wk_near_a3 =", STR(wk_near_a3 )))

      if( wk_near_a3 > 0 )
      {

         idx_mod_a3 = wk_near_a3[1]
         ang_mod_a3 = ANG_TOT_NOR(idx_mod_a3)

         SET_#(idx_mod)
         wk_b0 = #base_0

         SET_#(idx_mod_a3)
         ang_2p = ANG_2_PUNTI(wk_b0,#base_0)

         ang_att = ANG_TOT_NOR(ATTUALE())

         //if( ABS(ang_mod_a3 - ang_mod) > 0.1  )
         if( ABS(ang_2p - ang_mod) > 0.1
           | ABS(ang_att - ang_mod) > 0.1   )
         {
            delme = 1
            if( VAR_VAL(ATTUALE(),"delme")==1 )
            {
               COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
               COMANDO2("Show Abilita ON")
               EXIT()
            }
         }
      }

      COMANDO(STRCAT("SHOW STRUTTURE IDX ADD ", STR(idx_att)))
      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(idx_att)," X=",STR(X)," Y=",STR(Y) ," //Notifica ",NOME(ATTUALE())))

      ang_att = ANG_TOT_NOR(idx_att)

      COMANDO(STRCAT("M4_Collision ", STR(idx_att)))

      //CONTROLLI CHE CI SIANO MODULI SU TUTTI E 4 I LATI??
      GOSUB CtrlSchiena_TrovaElementiVicini_368

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_ele_sx=",STR(idx_ele_sx)))
      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_ele_dx=",STR(idx_ele_dx)))
      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_ele_up=",STR(idx_ele_up)))
      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- idx_ele_dw=",STR(idx_ele_dw)))

      if( IS_IDX(idx_ele_sx) == 0
        | IS_IDX(idx_ele_dx) == 0
        | IS_IDX(idx_ele_up) == 0
        | IS_IDX(idx_ele_dw) == 0  )
      {
         msg = STRCAT(MSG(1090),"\n",MSG(1282),"\n",MSG(1283))
         DISPLAY2(msg)
         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         EXIT()
      }


      if( ABS(ang_att - ang_mod) < 0.1  ) { EXITSUB() }

      // se ruotato allora ho selezionato i punti in modo inverso, porto allo stesso angolo
      if( ABS(ang_att - ang_mod) > 179.9
        & ABS(ang_att - ang_mod) < 180.1   )
      {
         offx = (-1*X)*COSENO(ang_mod)
         offy = 0
         offz = (X)*SENO(ang_mod)

         COMANDO(STRCAT("EDITPOS_REL ",STR(idx_att) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 180 //Notifica_SchienaleVani_368"))
      }
   }

   PROCEDURA AgganciaBifacciale_368
   {
      wk_offx = 0
      wk_offy = 0
      wk_offz = 0

      //Luca 22/12/2021
      if( VAR_VAL(idx_ref,"pcfto") == 1 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE("wk_near",idx_cnear_cx,11,0,"Modulo*368")
         if( wk_near == 0 ) { EXITSUB() }

         SET_#(idx_ref)

         wk_offy = #alto_0.y - alto_0.y
         wk_offy = -1*wk_offy
         //se copre tutta l'altezza
         if( Y == #Y ) {  wk_offy = 0 }

         wk_p1 = #base_3   wk_p1.y = 0
         wk_p2 = base_0    wk_p2.y = 0

         wk_offx = Punti_Distanza_Idx( wk_p1, wk_p2, idx_ref, "xz", 0)
         wk_offx = -1*wk_offx
         wk_offz = 0
      }
      else
      {
         if( TipoBifaccialeStr == "ANTA BIFACCIALE" )
         {
            BOX_MODE(0)
            NEAR("wk_near",idx_cnear_cx,11,0,"Modulo*368")
            if( wk_near == 0 ) { EXITSUB() }

            wk_idx_near = wk_near[1]

            idx_ref = wk_idx_near

            SET_#(idx_ref)

            wk_offy = #alto_0.y - alto_0.y
            wk_offy = -1*wk_offy
            //se copre tutta l'altezza
            if( Y == #Y ) {  wk_offy = 0 }

            wk_p1 = #base_3   wk_p1.y = 0
            wk_p2 = base_0    wk_p2.y = 0

            wk_offx = Punti_Distanza_Idx( wk_p1, wk_p2, idx_ref, "xz", 0)
            wk_offx = -1*wk_offx
            wk_offz = 0
         }
      }

      if( TipoBifaccialeStr == "PANNELLO RETRO" )  { wk_offz = 16 }

      wk_cnt = STRCAT("CNT D - 0,A + 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 180")

      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA ",STR(idx_att)," //Notifica",NOME(ATTUALE())))

      GOSUB CtrlFiancoMassello_AntaBif_368

      VAR_VALUE_SET(idx_ref,"ConBifacciale",1)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_ref)," no_agganciati //Notifica " , NOME(ATTUALE())))
   }

   //Luca 19/11/2020
   PROCEDURA CtrlPosizioneKEKU_AntaBif_368
   {
      KekuSX1 = 0    KekuSX1_Y = 0    KekuSX1_OX = 0
      KekuSX2 = 0    KekuSX2_Y = 0    KekuSX2_OX = 0

      KekuDX1 = 0    KekuDX1_Y = 0    KekuDX1_OX = 0
      KekuDX2 = 0    KekuDX2_Y = 0    KekuDX2_OX = 0

      KekuSXC1 = 0   KekuSXC1_Y = 0   KekuSXC1_OX = 0
      KekuSXC2 = 0   KekuSXC2_Y = 0   KekuSXC2_OX = 0

      KekuDXC1 = 0   KekuDXC1_Y = 0   KekuDXC1_OX = 0
      KekuDXC2 = 0   KekuDXC2_Y = 0   KekuDXC2_OX = 0

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

      //Simone 11/07/2023
      if( IsIdx(ATTUALE(),"idx_struttura") )
      {
         if( VAR_VAL(idx_struttura,"Y") < 184 )  { EXITSUB() }
      }

      if( TipoBifaccialeStr == "PANNELLO RETRO") { EXITSUB() }

      wk_offx_lato = 27.5 + RieX_Pan + RieXY

      if( Y <= 184 )
      {
         KekuSX1    = 1                KekuDX1    = 1
         KekuSX1_Y  = Y - 85.5         KekuDX1_Y  = KekuSX1_Y
         KekuSX1_OX = wk_offx_lato     KekuDX1_OX = X - wk_offx_lato

         if( X >= 1101  )
         {
            KekuSXC1    = 1            KekuDXC1    = 1
            KekuSXC1_Y  = KekuSX1_Y    KekuDXC1_Y  = KekuSX1_Y
            KekuSXC1_OX = X/2 - 65/2   KekuDXC1_OX = X/2 + 65/2
         }

         EXITSUB()
      }

      if( Y <= 276 )
      {
         KekuSX1    = 1                KekuDX1    = 1
         KekuSX1_Y  = 102              KekuDX1_Y  = KekuSX1_Y
         KekuSX1_OX = wk_offx_lato     KekuDX1_OX = X - wk_offx_lato

         KekuSX2    = 1                KekuDX2    = 1
         KekuSX2_Y  = Y - 68           KekuDX2_Y  = KekuSX2_Y
         KekuSX2_OX = wk_offx_lato     KekuDX2_OX = X - wk_offx_lato

         if( X >= 1101  )
         {
            KekuSXC1    = 1            KekuDXC1    = 1
            KekuSXC1_Y  = KekuSX1_Y    KekuDXC1_Y  = KekuSX1_Y
            KekuSXC1_OX = X/2 - 65/2   KekuDXC1_OX = X/2 + 65/2
         }

         EXITSUB()
      }

      KekuSX1    = 1                KekuDX1    = 1
      KekuSX1_Y  = 148              KekuDX1_Y  = KekuSX1_Y
      KekuSX1_OX = wk_offx_lato     KekuDX1_OX = X - wk_offx_lato

      KekuSX2    = 1                KekuDX2    = 1
      KekuSX2_Y  = Y-84             KekuDX2_Y  = KekuSX2_Y
      KekuSX2_OX = wk_offx_lato     KekuDX2_OX = X - wk_offx_lato

      if( X >= 1101  )
      {
         KekuSXC1    = 1            KekuDXC1    = 1
         KekuSXC1_Y  = KekuSX1_Y    KekuDXC1_Y  = KekuSX1_Y
         KekuSXC1_OX = X/2 - 65/2   KekuDXC1_OX = X/2 + 65/2

         KekuSXC2    = 1            KekuDXC2    = 1
         KekuSXC2_Y  = KekuSX2_Y    KekuDXC2_Y  = KekuSX2_Y
         KekuSXC2_OX = X/2 - 65/2   KekuDXC2_OX = X/2 + 65/2
      }
   }

   PROCEDURA CtrlFiancoMassello_AntaBif_368
   {
      if( ACTION()<=0 | ACTION()==2 )  { EXITSUB() }

      if( TipoBifaccialeStr == "PANNELLO RETRO" ) { EXITSUB() }

      idx_fia_sx = -1
      idx_fia_dx = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_fiasx",idx_cnear_sx,2,"FiancoDX_368")
      //if( wk_fiasx == 0 )  { NEAR_GLOBALE2("wk_fiasx",idx_cnear_sx,2,"MasselloBif_368") }

      NEAR_GLOBALE2("wk_fiadx",idx_cnear_dx,2,"FiancoSX_368")
      //if( wk_fiadx == 0 )  { NEAR_GLOBALE2("wk_fiadx",idx_cnear_dx,2,"MasselloBif_368") }

      if( wk_fiasx > 0 ) { idx_fia_sx = wk_fiasx[1] }
      if( wk_fiadx > 0 ) { idx_fia_dx = wk_fiadx[1] }
   }

   //PROCEDURE PER STESURA SOSTEGNI VETRO
   PROCEDURA Stendi_GruppoSostVetro_368
   {
      if( VAR_VAL(ATTUALE(),"delme")==1 )  { EXITSUB() }
      steso=1

      if ( VAR_EXIST(-1,"stesi_var_dx") )  { nome_punto_dx = $stesi_var_dx }
      if ( VAR_EXIST(-1,"stesi_var_sx") )  { nome_punto_sx = $stesi_var_sx }

      stesi_mode_sx = $stesi_mode_sx
      stesi_mode_dx = $stesi_mode_dx

      if ( $stesi_mode_sx==$stesi_Elemento
         & $stesi_mode_dx==$stesi_Elemento )
      {
         ID_Sin = $stesi_idx1
         ID_Des = $stesi_idx2
         su_ang = 0

         if( ID_Sin != ID_Des ) { CTLR_SEQUENZA_SXDX( ID_Sin, ID_Des) }

         //devo controllare i casi in cui non è possibile stendere
         blocca_stesura = 0
         blocca_stesura_msg = "Impossibile stendere i vetri!"

         //se seleziono due elementi non collegati, non stendo
         wk_idx_test = ID_Sin

         wk_i = 1
         while( wk_i <= 99
              & blocca_stesura == 0
              & IS_IDX(wk_idx_test)
              & wk_idx_test != ID_Des )
         {
            //Salvo l'attuale
            wk_idx_att = wk_idx_test

            //Prendo l'idx di destra
            wk_idx_test = -1
            if( IsIdx( wk_idx_att, "idx_dx") ) { wk_idx_test = VAR_VAL( wk_idx_att, "idx_dx") }

            //Devo sempre avere qualcosa a dx se non sono l'ultimo elemento
            if( wk_idx_att != ID_Des
              & IS_IDX(wk_idx_test) == 0 ) { blocca_stesura = 1 }

            //COMANDO2( STRCAT( "LOGMSG Stendi_GruppoSostVetro_368 ID_Sin: ", STR(ID_Sin), " - ID_Des: ", STR(ID_Des), " - wk_idx_att: ", STR(wk_idx_att), " - wk_idx_test: ", STR(wk_idx_test), " - blocca_stesura: ", STR(blocca_stesura)))

            wk_i = wk_i + 1
         }

         //se hanno angolo diversi , non stendo
         if( ABS(ANG_TOT_NOR(ID_Sin)-ANG_TOT_NOR(ID_Des))>0.1 ) { blocca_stesura = 1 }

         SET_#(ID_Sin)
         P1 = #base_0
         Z1 = #Z

         SET_#(ID_Des)
         P2 = #base_3
         Z2 = #Z

         if( ABS( P2.y - P1.y ) > 0.1 ) { blocca_stesura = 1 }

         GOSUB ricava_ang_y

         x1  = P1.x           z1  = P1.z
         x2  = P2.x           z2  = P2.z
         x12 = x2-x1          z12 = z2-z1
         ca = COSENO(ang_y)
         sa = SENO(-ang_y)

         X = ROUND2( x12*ca + z12*sa, 0.2)
         Z = Z1
         if( Z2 > Z1 ) { Z = Z2 }

         base_0 = P1
         base_0.y = base_0.y - Y
         idx_ref = ID_Sin
      }
   }

   PROCEDURA AggiornaPosModulo_SostVetro_368
   {
      BOX_MODE(0)
      NEAR_GLOBALE2("wk_mod",idx_cnear_up,2,"Modu*368")

      if( wk_mod == 0 )  { EXITSUB() }

      i = 1
      while ( i <= wk_mod  )
      {
         SET_#(wk_mod[i])

         sposta = 0

         //if( VAR_VAL(ATTUALE(),"OnCancella")==1 )
         if( VAR_VAL(ATTUALE(),"Del_Sost")==1 )
         {
            if( #base_0.y == Yt  ) { sposta = 1 }
         }
         else
         {
            if( #base_0.y != Yt )  { sposta = 1 }
         }

         if( #in_pcfto > 0 )       { sposta = 0 }

         if( sposta )
         {
            offx = 0
            offy = Yt - #base_0.y

            if( VAR_VAL(ATTUALE(),"Del_Sost")==1 )  { offy = -1*Yt }
            offz = 0

            if( offx != 0
              | offy != 0
              | offz != 0  )
            {
               COMANDO(STRCAT("EDITPOS_REL ",STR(wk_mod[i]) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 // AggiornaPosModulo_SostVetro_368"))
               COMANDO(STRCAT("RICALCOLA_UNA ", STR(wk_mod[i])," no_agganciati // AggiornaPosModulo_SostVetro_368"))
            }
         }

         i = i + 1
      }
   }

   PROCEDURA Notifica_GruppoSostVetro_368
   {
      if( ACTION()!=12 ) { EXITSUB() }

      //Simone 30/09/2022 - Blocco se nella selezione è compreso qualcosa che non può stare su sostegni vetro
      BOX_MODE(0)
      NEAR_GLOBALE2("$wk_strut",idx_cnear_up,2,"*")

      $wk_i = 1
      while( $wk_i <= $wk_strut
           & blocca_stesura == 0 )
      {
         $wk_idx_mod = GetTopLevel($wk_strut[$wk_i])

         if( NOME($wk_idx_mod) != "Modulo_368"
           & NOME($wk_idx_mod) != "ModuloGiorno_368"
           & $wk_idx_mod != GetTopLevel(ATTUALE()) )
         {
            blocca_stesura = 1
         }

         $wk_i = $wk_i + 1
      }

      if( VAR_VAL( ATTUALE(), "delme") > 0
        | VAR_VAL( ATTUALE(), "blocca_stesura") > 0 )
      {
         if( VAR_VAL_STR( ATTUALE(), "blocca_stesura_msg") != "" )  { DISPLAY2(blocca_stesura_msg) }

         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         EXIT()
      }

      COMANDO("Show Abilita OFF")

      COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) ," X=",STR(X) , " Z=",STR(Z)  ))
      //COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_att)," //Notifica_GruppoSostVetro_368"))

      wk_offx = 0
      wk_offy = 0
      wk_offz = 0
      wk_cnt = STRCAT("CNT S + 0,B - 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0")
      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(idx_ref), " //Notifica ",NOME(ATTUALE())))
      COMANDO("Show Abilita ON")

      GOSUB AggiornaPosModulo_SostVetro_368

      //NEAR_GLOBALE2("wk_mod",idx_cnear_up,2,"Modu*368")
      //i = 1
      //while ( i <= wk_mod  )
      //{
      //   SET_#(wk_mod[i])
      //
      //   //if( #base_0.y != Y )
      //   if( #base_0.y != Yt )
      //   {
      //      offx = 0
      //      //offy = Y - #base_0.y
      //      offy = Yt - #base_0.y
      //      offz = 0
      //
      //      COMANDO(STRCAT("EDITPOS_REL ",STR(wk_mod[i]) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0"))
      //      COMANDO(STRCAT("RICALCOLA_UNA ", STR(wk_mod[i])," no_agganciati //Notifica_GruppoSostVetro_368"))
      //   }
      //
      //   i = i + 1
      //}

      COMANDO(STRCAT("RICALCOLA_UNA ", STR(idx_att)," //Notifica_GruppoSostVetro_368"))

      //GOSUB CtrlSostegniVetro_368
   }

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

      if( VAR_VAL(ATTUALE(),"in_pcfto")==1 )
      {
         if( VAR_Manuale == 1 )
         {
            VAR_SET_MODIFICATA(ATTUALE(),"VAR_Manuale","")
            VAR_SET_MODIFICATA(ATTUALE(),"NrSostegni_Man","")
         }
      }

      if( VAR_Manuale == 1 & IS_VAR_FIXED(ATTUALE(),"NrSostegni_Man") == 0  )
      {
         NrSostegni_Man = NrSostegni
         wk_cmd = STRCAT(" NrSostegni_Man=",STR(NrSostegni))
         COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE()) , " ", wk_cmd))
      }

      if( IS_VAR_FIXED(ATTUALE(),"ControllaCollisioni")  )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"ControllaCollisioni")
         ControllaCollisioni = 0
         SV_Riposiziona = 0
         COMPONENTI2("wk_sost",ATTUALE(),"SostegnoVetro_368")
         while( wk_sost > 0 )
         {
            VAR_VALUE_SET(wk_sost[wk_sost],"Collisione_OFFSET",0)
            wk_sost = wk_sost - 1
         }

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

      //1. trovo idx di riferimento
      //leggo i dati per la gestione della dimensione in profondità e il posizionamento
      GOSUB CtrlSostegniVetro_TrovaIdxRef_368

      //2.Calcolo il numero dei sostegni necessari
      GOSUB CtrlSostegniVetro_CalcolaNrSostegni_368

      //3. Calcolo la posizione dei sostegni vetro
      GOSUB CtrlSostegniVetro_CalcolaPosSostegni_368

      //4. Attrezzo i sostegni vetro (solo la prima volta in caso di gestione automatica)
      GOSUB CtrlAttrezza_SostegniVetro_368

      //4.1 Attrezzo i sostegni vetro (per la gestione manuale)
      GOSUB CtrlAttrezza_SostegniVetro_Manuale_368

      //5.  una volta attrezzati devo verificare se ci sono eventuali collisioni
      GOSUB CtrlSostegniVetro_ControllaCollisioniStaffe_368

      if( VAR_Manuale == 1 & $ATTIVA_DLL==1 ) { EXITSUB() }

      WITH_VAR_LOCAL(ATTUALE(),"wk_staffe_col","TrovataCollisione",$num,1,"1")
      if( wk_staffe_col == 0  ) { EXITSUB() }

      //5.1 riposiziono i sostegni in collisione
      if( VAR_EXIST(ATTUALE(),"SV_Riposiziona") == 0 ) { SV_Riposiziona = 1 }
      while( SV_Riposiziona <= 2 )
      {
         COMANDO(STRCAT("Procedura SV_SpostaStaffeGruppoSostegni_368 ",STR(ATTUALE()) , " //CtrlSostegniVetro_368" ))
         SV_Riposiziona = SV_Riposiziona + 1
      }
   }

   PROCEDURA CtrlSostegniVetro_TrovaIdxRef_368
   {
      //1. Gestisco la dimensione e la posizione in profondità
      idx_mod_ref = -1
      BOX_MODE(0)
      NEAR_GLOBALE2("wk_mod",idx_cnear_up,2,"Modu*368")
      if( wk_mod > 0 )
      {
         SORT_POINT(alto_0,"wk_mod","base_0")
         idx_mod_ref = wk_mod[1]
      }

      if( IS_IDX(idx_mod_ref) )
      {
         Sostegni_Muro   = VAR_VAL(idx_mod_ref,"ConAttaccaglie")
         //dimensione staffa verticale
         Sostegni_VertZ  = 368
         //dimensione staffa orizzontale
         Sostegni_OrizZ  = 368
         //posiziona in z della staffa verticale
         Sostegni_VertPZ = 10
         //posiziona in z della staffa orizzontale
         Sostegni_OrizPZ = 261

         //BASI 270
         if( VAR_VAL(idx_mod_ref,"Z") <= 248 )
         {
            Sostegni_VertZ = 232
            Sostegni_OrizPZ = 154
         }

         //BASI 510
         if( VAR_VAL(idx_mod_ref,"Z") >= 480 )
         {
            Sostegni_VertZ = 472
            Sostegni_OrizPZ = 326
         }

         //BASI 560
         if( VAR_VAL(idx_mod_ref,"Z") >= 500 )
         {
            Sostegni_VertZ = 522
            Sostegni_OrizPZ = 360
         }
      }
   }

   PROCEDURA CtrlSostegniVetro_CalcolaNrSostegni_368
   {
      //2. calcolo il numero di sostegni vetri necessari
      RientroLat = 92
      if( X > 552  ) { RientroLat = 184 }

      //Simone 27/10/21 - Gestione revisione offset laterale
      if( VAR_Revisione_Offset_Laterale > 0 )
      {
         RientroLat = 77
         if( X > 736  ) { RientroLat = 184 }
      }

      LarVetro = 368
      SpeVetro =  12

      //CALCOLO NUMERO DI VETRI
      //RIASSUNTO REGOLA GENERALE SEMPLIFICATA:
      //NUMERO VETRI = (L. TOT COMPOSIZIONE - PosExt*2) / 552 + 1
      //IL NUMERO VA ARROTONDATO PER DIFETTO ALL'UNITA'
      //SE IL RISULTATO E' MINORE DI 2, ALLORA NUMERO SUPPORTI = 2
      //SE RISULTA UN NUMERO PARI, MAGGIORE DI 4, SOTTRAGGO 1

      NrSostegni = ( X - 2*RientroLat) / 552 + 1
      NrSostegni = FLOOR(NrSostegni)

      if( NrSostegni < 2 )  { NrSostegni = 2 }
      if( NrSostegni > 4 & IsEven(NrSostegni) ) { NrSostegni = NrSostegni - 1 }

      if( VAR_Omega > 0 )   { NrSostegni = 0 }
   }

   PROCEDURA CtrlSostegniVetro_CalcolaPosSostegni_368
   {
      //3. calcolo posizione e orientamenti vetri da inserire
      //array dei sostegni in vetro da inserire
      //SV_Auto_##1 = V|SX|184
      // V/O orientamento del vetro --> V: verticale | O: orizzontale (vista in pianta)
      // SX  verso staffa per sostegni verticali
      // 184 offset X centro vetro

      SV_Auto = NrSostegni

      SV_Auto[1]        = STRCAT("V|SX|",STR(RientroLat))
      SV_Auto[SV_Auto] = STRCAT("V|DX|",STR(X - RientroLat))

      if( SV_Auto == 2 ) { EXITSUB() }

      if( SV_Auto == 3 )
      {
         wk_posv_vt = X/2
         SV_Auto[2] = STRCAT("O|CX|",STR(wk_posv_vt))
         EXITSUB()
      }

      //ECCEZIONE CASO CON 4 VETRI
      if( SV_Auto == 4 )
      {
         //vano interno vetri nominale
         wk_vanov_nom = X - 2*RientroLat
         //vano interno vetri reale
         wk_vanov_rea = wk_vanov_nom - SpeVetro

         //vano interno vetri senza vetri orizzontali
         wk_vanov_rea_nov = wk_vanov_rea - 2*LarVetro

         //tolgo la larghezza dei vetri orizzontali da inserire
         wk_vanov_rea_nov_sing = wk_vanov_rea_nov/3

         //arrotondo per eccesso
         wk_vanov_rea_nov_sing_are = FLOOR(wk_vanov_rea_nov_sing + 0.9)

         wk_posv_sx = RientroLat + SpeVetro/2 + wk_vanov_rea_nov_sing_are + LarVetro/2
         wk_posv_dx = X - RientroLat - SpeVetro/2 - wk_vanov_rea_nov_sing_are - LarVetro/2

         SV_Auto[2] = STRCAT("O|CX|",STR(wk_posv_sx))
         SV_Auto[3] = STRCAT("O|CX|",STR(wk_posv_dx))

         EXITSUB()
      }

      //per tutti i casi con sostegni > 4

      wk_vetri_ver = FLOOR(NrSostegni/2) + 1
      wk_vetri_ori = NrSostegni - wk_vetri_ver

      //vano interno vetri nominale
      wk_vanov_nom = X - 2*RientroLat
      wk_vano_sing = wk_vanov_nom / wk_vetri_ori
      wk_vano_sing = FLOOR(wk_vano_sing)

      nvv = 1
      nvo = 1

      i = 2
      metap1 = FLOOR(NrSostegni/2 +1)

      //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] X=",STR(X)," NrSostegni=",STR(NrSostegni) , " parto da ", STR(i) , " fino a ",STR(metap1)))
      //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] wk_vano_sing=",STR(wk_vano_sing)," wk_vano_sing=",STR(wk_vano_sing)))

      while ( i <= metap1 )
      {
         //trovi l'id del sostegno speculare
         is = NrSostegni - (i - 1)

         //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] X=",STR(X)," NrSostegni=",STR(NrSostegni) , " i=", STR(i) , " is=",STR(is)))

         wk_orie = ""
         wk_vers = ""
         wk_posx = 0

         //se pari è il vetro orizzontale
         if( IsEven(i) == 1 )
         {
            wk_orie = "O"
            wk_vers = "CX"

            wk_posv = RientroLat + wk_vano_sing*(nvv-1) + wk_vano_sing/2
            nvo = nvo + 1
         }
         //se dispari è quello verticale
         else
         {
            wk_orie = "V"
            wk_vers = "SX"

            wk_posv = RientroLat + wk_vano_sing*nvv
            nvv = nvv + 1
         }

         if( metap1 == i ) { wk_posv = X/2 }

         //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] X=",STR(X)," NrSostegni=",STR(NrSostegni) , " i=", STR(i) , " wk_posv=",STR(wk_posv)))

         //compilo i valori dell'array
         SV_Auto[i]  = STRCAT(wk_orie,"|",wk_vers,"|",STR(wk_posv))
         if( is > i )
         {
            if( wk_vers == "SX" ) { wk_vers = "DX" }
            SV_Auto[is]  = STRCAT(wk_orie,"|",wk_vers,"|",STR(X - wk_posv))
         }

         i = i + 1
      }
   }

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


      //in caso di gestione manuale non eseguo nessun sostegno vetro
      if( VAR_Manuale == 1 ) { EXITSUB() }

      ArrayCopy(ATTUALE(),"SV_Auto","SV_Attrezza")
      if( VAR_EXIST(ATTUALE(),"SV_Attrezza") == 0 )  { SV_Attrezza = 0 }

      //esco qui e non prima
      if( VAR_VAL(ATTUALE(),"in_pcfto") ) { EXITSUB() }

      //SV_Attrezza --> ARRAY UTILIZZATO PER ATTREZZARE I SOSTEGNI VETRO


      Oggetto = "SostegnoVetro_368"

      //if( SV_Attrezza == 0 )
      //{
      //   EXITSUB()
      //   GOSUB Cancella_Oggetto
      //}

      COMPONENTI2("wk_sost",ATTUALE(),Oggetto)

      //DBG COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] VAR_Manuale = 0 NrSostegni=",STR(NrSostegni) , " SONO PRESENTI ", STR(wk_sost) , " SOSTEGNI "))

      //il cambio di numero può esserci solo in caso di gestione manuale
      if( wk_sost == SV_Attrezza )  { EXITSUB() }

      //cancello i sostegni in più
      if( wk_sost > NrSostegni )
      {
         //DBG COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] CANCELLO QUELLI IN PIU' --> PARTO DA ",STR(NrSostegni + 1)))

         i = NrSostegni + 1
         while ( i <= wk_sost )
         {
            COMANDO(STRCAT("CANCELLA2 ",STR(wk_sost[i])))
            i = i + 1
         }
         EXITSUB()
      }

      COMANDO("SHOW ABILITA OFF")

      i = 1

      if( wk_sost > 0  & wk_sost < SV_Attrezza )
      {
         //DBG COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] CI SONO MENO SOSTEGNI DI QUELLI NECESSARI  --> AGGIORNO DA  ",STR(i)))

         //aggiorno il numero dei vetri presenti
         while ( i <= wk_sost  )
         {
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(wk_sost[i])," NrVetro=",STR(i)))
            i = i + 1
         }
         //DBG COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] CI SONO MENO SOSTEGNI DI QUELLI NECESSARI  --> AGGIUNGO DA  ",STR(i)))
      }

      while ( i <= SV_Attrezza  )
      {
         wk_str   = SV_Attrezza[i]
         wk_orie  = LEFT(wk_str,1)
         wk_verso = STRMID(2,2,wk_str)
         wk_offx  = ATOI(STRMID(5,STRLEN(wk_str)-5,wk_str))

         //COMANDO("PUSH_SITUAZIONE")
         COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
         COMANDO(STRCAT("ELEMENTO_I ",Oggetto))
         COMANDO("STRUTTURA_I")
         //COMANDO(STRCAT("VAR_FIX NrVetro=",STR(i)," OffX=",STR(wk_offx), " Verso=",APICI(),wk_verso,APICI() ," Orie=",APICI() ,wk_orie , APICI() ))
         COMANDO(STRCAT("VAR_FIX NrVetro=",STR(i)))
         COMANDO("VAR_SET NO_AUTO=1")
         //COMANDO("ATTREZZA2 0")
         COMANDO("ATTREZZA 0")
         //COMANDO("POP_SITUAZIONE")

         i = i + 1
      }
      COMANDO("SHOW ABILITA ON")
   }

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

      if( VAR_VAL( ATTUALE(), "in_pcfto") )                   { EXITSUB() }

      if( VAR_Manuale == 0 )                                  { EXITSUB() }

      Oggetto = "SostegnoVetro_368"
      COMPONENTI2("wk_sost",ATTUALE(),Oggetto)

      if( wk_sost == NrSostegni_Man ) { EXITSUB() }

      //cancello i sostegni in più
      if( wk_sost > NrSostegni_Man )
      {
         i = NrSostegni_Man + 1
         while ( i <= wk_sost  )
         {
            COMANDO(STRCAT("CANCELLA2 ",STR(wk_sost[i])))
            i = i + 1
         }

         EXITSUB()
      }

      //inserisco i sostegni mancanti
      if( wk_sost < NrSostegni_Man )
      {
         COMANDO("SHOW ABILITA OFF")

         i = wk_sost + 1
         while ( i <= NrSostegni_Man  )
         {
            COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
            COMANDO(STRCAT("ELEMENTO_I ",Oggetto))
            COMANDO("STRUTTURA_I")
            //COMANDO(STRCAT("VAR_FIX NrVetro=",STR(i)," OffX=",STR(wk_offx), " Verso=",APICI(),wk_verso,APICI() ," Orie=",APICI() ,wk_orie , APICI() ))
            COMANDO(STRCAT("VAR_FIX NrVetro=",STR(i)))
            COMANDO("VAR_SET NO_AUTO=1")
            //Luca 28/05/2021 in fase di costruzione pcf uso attrezza e non attrezza 2
            if( $ATTIVA_DLL == 0 )  { COMANDO("ATTREZZA 0") }
            else                    { COMANDO("ATTREZZA2 0") }
            i = i + 1
         }

         COMANDO("SHOW ABILITA ON")
      }
   }

   PROCEDURA CtrlSostegniVetro_ControllaCollisioniStaffe_368
   {
      //in caso di gestione manuale non eseguo nessun controllo su sostegno vetro
      //if( VAR_Manuale == 1 & $ATTIVA_DLL==1 ) { EXITSUB() }

      log = 0
      ScriviSuLog( log , "SV_CCollisioni" , "START" )
      ScriviSuLog( log , "SV_CCollisioni" , STRCAT("IDX_GRUPPO [",STR(ATTUALE()),"]" ))

      COMPONENTI2("wk_sost",ATTUALE(),"SostegnoVetro_368")
      if( wk_sost == 0 ) {  EXITSUB() }

      i = 1
      while ( i <= wk_sost )
      {
         wk_idx_sost = wk_sost[i]
         SET_#(wk_idx_sost)

         wk_idx_staffa = #idx_staffa
         //verifico se i due ingombri fori della staffa trovano una collisione sul modulo
         SET_#(wk_idx_staffa)

         wk_idx_col_1 = #idx_collisione_1
         wk_idx_col_2 = #idx_collisione_2

         BOX_MODE(0)
         nome_cerca = "SVT_ContCollisioni_368"
         //nome_cerca = "_cont_per_near"
         NEAR_GLOBALE2("wk_col1", wk_idx_col_1 , 0.9 ,nome_cerca)
         NEAR_GLOBALE2("wk_col2", wk_idx_col_2 , 0.9 ,nome_cerca)

         wk_TrovataCollisione = 0
         wk_TrovataCollisione_idx = -1
         wk_ArrayCollisioni       = 0
         wk_TrovataCollisione_1 = 0
         wk_TrovataCollisione_2 = 0

         j = 1
         while ( j <= wk_col1 )
         {
            if( VAR_VAL(wk_col1[j],"CtrlCol_StaffeSupportoVetro") == 1 )
            {
               wk_TrovataCollisione = 1
               wk_TrovataCollisione_idx = wk_col1[j]
               wk_TrovataCollisione_1 = 1
               AddItem2Array(ATTUALE(),"wk_ArrayCollisioni",wk_col1[j] ,"")
               //j = wk_col1
            }

            j = j + 1
         }

         j = 1
         while ( j <= wk_col2 )
         {
            if( VAR_VAL(wk_col2[j],"CtrlCol_StaffeSupportoVetro") == 1 )
            {
               wk_TrovataCollisione = 1
               wk_TrovataCollisione_idx = wk_col2[j]
               wk_TrovataCollisione_2 = 1
               AddItem2Array(ATTUALE(),"wk_ArrayCollisioni",wk_col2[j] ,"")
               //j = wk_col2
            }

            j = j + 1
         }

         VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione",wk_TrovataCollisione)
         VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione_idx",wk_TrovataCollisione_idx)
         VAR_VALUE_SET(wk_idx_sost,"M4_DRAW_MODE__",SE_NUM(wk_TrovataCollisione==1,4,0))

         //Luca 12/02/2021
         //calcolo lo spostamento verso SX/DX per 'uscire' dalla collisione
         if( wk_TrovataCollisione == 1  )
         {
            ScriviSuLog( log , "SV_CCollisioni" , STRCAT("IDX_SOSTEGNO [",STR(wk_idx_sost),"] TROVATO COLLISIONE" ))
            ScriviSuLog( log , "SV_CCollisioni" , STRCAT("wk_ArrayCollisioni =  ",STR(wk_ArrayCollisioni),"" ))

            //ordino le collisioni trovate
            SORT_POINT(alto_0,"wk_ArrayCollisioni","base_0")

            wk_idx_col = wk_idx_col_1
            if( wk_TrovataCollisione_2 ==1 )  { wk_idx_col = wk_idx_col_2 }

            SET_#(wk_idx_col)
            wk_base_0_contcol = #base_0
            wk_base_1_contcol = #base_1
            if( VAR_VAL_STR(wk_idx_sost,"Orie") == "V" ) { wk_base_1_contcol = #base_3 }

            SET_#(wk_ArrayCollisioni[1])
            wk_Offset_SX = DistanzaFraPunti(wk_base_1_contcol,#base_0,ANG_TOT_NOR(ATTUALE()))

            SET_#(wk_ArrayCollisioni[wk_ArrayCollisioni])
            wk_Offset_DX = DistanzaFraPunti(wk_base_0_contcol,#base_3,ANG_TOT_NOR(ATTUALE()))

            VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione_OffSX",wk_Offset_SX + 1 )
            VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione_OffDX",wk_Offset_DX + 1 )
         }
         else
         {
            VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione_OffSX",0)
            VAR_VALUE_SET(wk_idx_sost,"TrovataCollisione_OffDX",0)
         }

         i = i + 1
      }

      //// 4. Verifico eventuali collisione delle staffe con i punti 'vietati'
      //WITH_VAR_LOCAL(ATTUALE(),"wk_staffe_col","TrovataCollisione",$num,1,"1")
      //
      //if( wk_staffe_col == 0  )
      //{
      //   //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "]  ACTION[",STR(ACTION()),"] NON CI SONO STAFFE CHE COLLIDONO"))
      //   EXITSUB()
      //}

      //COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "]  ACTION[",STR(ACTION()),"] TROVATE ",STR(wk_staffe_col) , " CHE COLLIDONO"))
      //i = 1
      //while ( i <= wk_staffe_col )
      //{
      //   COMANDO2(STRCAT("LOGMSG CtrlCalcola_SostegniVetro_368 [",STR(ATTUALE()), "] ACTION[",STR(ACTION()),"]  COLLIDE [",STR(wk_staffe_col[i]) , "] ID=",STR(VAR_VAL(wk_staffe_col[i],"NrVetro"))))
      //
      //   i = i + 1
      //}

      ScriviSuLog( log , "SV_CCollisioni" , "END" )
   }

   PROCEDURA CtrlSostegniVetro_SpostaStaffeInCollisione_368
   {
      ScriviSuLog( log , "SV_CCollisioni" , STRCAT("SPOSTA STAFFE NrSostegni=",STR(NrSostegni)))

      //Luca 18/06/2021 25554: Problemi creazione preconfigurati
      if( VAR_Manuale == 1 ) { EXITSUB() }

      if( NrSostegni < 3 ) { EXITSUB() }

      wk_id_staffa_c = -1
      if( NrSostegni > 2 & IsEven(NrSostegni) == 0 ) { wk_id_staffa_c = (NrSostegni - 1)/2 + 1 }

      if( wk_id_staffa_c > 0 )
      {
         //verifico la staffa centrale
         WITH_VAR_LOCAL(ATTUALE(),"wk_staffac","NrVetro",0,1,STR(wk_id_staffa_c))
         if( wk_staffac == 0 ) { EXITSUB() }

         wk_idx_staffac = wk_staffac[1]

         if( VAR_VAL(wk_idx_staffac,"TrovataCollisione") == 1 )
         {
            wk_offset_sx = VAR_VAL(wk_idx_staffac,"TrovataCollisione_OffSX")
            wk_offset_dx = VAR_VAL(wk_idx_staffac,"TrovataCollisione_OffSX")
            //sposto a sx
            if( wk_offset_sx < wk_offset_dx ) { VAR_VALUE_SET(wk_idx_staffac,"Collisione_OFFSET",-1*wk_offset_sx) }
            //sposto a dx
            else                              { VAR_VALUE_SET(wk_idx_staffac,"Collisione_OFFSET",wk_offset_dx) }
         }
      }

      //analizzo le altre staffe a coppie
      wk_ncoppie = FLOOR(NrSostegni/2) - 1

      ScriviSuLog( log , "SV_CCollisioni" , STRCAT("wk_ncoppie=",STR(wk_ncoppie)))

      i = 1
      while ( i <=  wk_ncoppie )
      {
         wk_id_staffa1 = i + 1
         wk_id_staffa2 = NrSostegni - i

         ScriviSuLog( log , "SV_CCollisioni" , STRCAT("wk_id_staffa1=",STR(wk_id_staffa1) , " wk_id_staffa2=",STR(wk_id_staffa2)))

         WITH_VAR_LOCAL(ATTUALE(),"wk_staffac","NrVetro",0,1,STR(wk_id_staffa1))
         wk_idx_staffa1 = wk_staffac[1]

         WITH_VAR_LOCAL(ATTUALE(),"wk_staffac","NrVetro",0,1,STR(wk_id_staffa2))
         wk_idx_staffa2 = wk_staffac[1]

         ScriviSuLog( log , "SV_CCollisioni" , STRCAT("wk_idx_staffa1=",STR(wk_idx_staffa1) , " wk_idx_staffa2=",STR(wk_idx_staffa2)))

         //trovo lo spostamento minore della staffa 1
         wk_offset_s1_min = 0
         wk_offset_s1_sx  = VAR_VAL(wk_idx_staffa1,"TrovataCollisione_OffSX")
         wk_offset_s1_dx  = VAR_VAL(wk_idx_staffa1,"TrovataCollisione_OffDX")
         //sposto a sx
         if( wk_offset_s1_sx < wk_offset_s1_dx ) { wk_offset_s1_min = -1*wk_offset_s1_sx }
         //sposto a dx
         else                                    { wk_offset_s1_min = wk_offset_s1_dx }

         //trovo lo spostamento minore della staffa 2
         wk_offset_s2_min = 0
         wk_offset_s2_sx  = VAR_VAL(wk_idx_staffa2,"TrovataCollisione_OffSX")
         wk_offset_s2_dx  = VAR_VAL(wk_idx_staffa2,"TrovataCollisione_OffDX")

         //sposto a sx
         if( wk_offset_s2_sx <= wk_offset_s2_dx ) { wk_offset_s2_min = -1*wk_offset_s2_sx }
         //sposto a dx
         else                                     { wk_offset_s2_min = wk_offset_s2_dx }

         ScriviSuLog( log , "SV_CCollisioni" , STRCAT("wk_offset_s1_min=",STR(wk_offset_s1_min) , " wk_offset_s2_min=",STR(wk_offset_s2_min)))

         //prendo il maggiore tra i due
         if( ABS(wk_offset_s1_min) > ABS(wk_offset_s2_min) )
         {
            wk_val_collisione = VAR_VAL(wk_idx_staffa1,"Collisione_OFFSET")
            VAR_VALUE_SET(wk_idx_staffa1,"Collisione_OFFSET",wk_val_collisione + wk_offset_s1_min)

            wk_val_collisione = VAR_VAL(wk_idx_staffa2,"Collisione_OFFSET")
            VAR_VALUE_SET(wk_idx_staffa2,"Collisione_OFFSET",wk_val_collisione + (-1)*wk_offset_s1_min)
         }
         else
         {
            wk_val_collisione = VAR_VAL(wk_idx_staffa1,"Collisione_OFFSET")
            VAR_VALUE_SET(wk_idx_staffa1,"Collisione_OFFSET",wk_val_collisione + (-1)*wk_offset_s2_min)

            wk_val_collisione = VAR_VAL(wk_idx_staffa2,"Collisione_OFFSET")
            VAR_VALUE_SET(wk_idx_staffa2,"Collisione_OFFSET",wk_val_collisione + wk_offset_s2_min)
         }

         i = i + 1
      }

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

   //PROCEDURA CtrlStaffa_Collisione_368
   //{
   //   if( ACTION() <= 0 | ACTION()==2 | $OnLoadOrder == 1  )  { EXITSUB() }
   //
   //
   //   //verifico se i due ingombri fori della staffa trovano una collisione sul modulo
   //   SET_#(idx_staffa)
   //
   //   idx_collisione_1 = #idx_collisione_1
   //   idx_collisione_2 = #idx_collisione_2
   //
   //   BOX_MODE(0)
   //   nome_cerca = "Blocco"
   //   //nome_cerca = "_cont_per_near"
   //   NEAR_GLOBALE2("wk_col1", idx_collisione_1 , 1 ,nome_cerca)
   //   NEAR_GLOBALE2("wk_col2", idx_collisione_2 , 1 ,nome_cerca)
   //
   //   TrovataCollisione = 0
   //   TrovataCollisione_idx = -1
   //
   //   i = 1
   //   while ( i <= wk_col1 )
   //   {
   //      if( VAR_VAL(wk_col1[i],"CtrlCol_StaffeSupportoVetro") == 1 )
   //      {
   //         TrovataCollisione = 1
   //         TrovataCollisione_idx = wk_col1[i]
   //         i = wk_col1
   //      }
   //
   //      i = i + 1
   //   }
   //
   //   i = 1
   //   while ( i <= wk_col2 )
   //   {
   //      if( VAR_VAL(wk_col2[i],"CtrlCol_StaffeSupportoVetro") == 1 )
   //      {
   //         TrovataCollisione = 1
   //         TrovataCollisione_idx = wk_col2[i]
   //         i = wk_col2
   //      }
   //
   //      i = i + 1
   //   }
   //
   //   COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), "  ACTION[",STR(ACTION()),"] DEBUG TrovataCollisione=",STR(TrovataCollisione)," ---- CtrlStaffa_Collisione_368"))
   //
   //
   //   M4_DRAW_MODE__ = 0
   //   if( TrovataCollisione == 1 ) { M4_DRAW_MODE__ = 4 }
   //}

   //{ procedure per PASSACAV 368
   PROCEDURA DecodificaPassacavi_368
   {
      if( NOME(ATTUALE()) != "Passacavi_368" )  { EXITSUB() }

      //ALLUMINIO
      if( TipoPassacavi == 0  ) { TipoPassacaviStr = "TER052-ROTONDO" }
      if( TipoPassacavi == 1  ) { TipoPassacaviStr = "TER050-OVALE" }
      if( TipoPassacavi == 2  ) { TipoPassacaviStr = "TER030-QUADRATO" }
      if( TipoPassacavi == 3  ) { TipoPassacaviStr = "TER031-RETTANGOLARE-PIC" }
      if( TipoPassacavi == 4  ) { TipoPassacaviStr = "TER032-RETTANGOLARE-GRA" }

      //WILDWOOD
      if( TipoPassacavi == 12  ) { TipoPassacaviStr = "TER035-QUADRATO" }
      if( TipoPassacavi == 13  ) { TipoPassacaviStr = "TER036-RETTANGOLARE-PIC" }
      if( TipoPassacavi == 14  ) { TipoPassacaviStr = "TER037-RETTANGOLARE-GRA" }

      //PASSACAVI TV UNITS
      if( TipoPassacavi == 20  ) { TipoPassacaviStr = "D21005-TONDO-NERO" }

      //VETRO
      if( TipoPassacavi == 21 ) { TipoPassacaviStr = "D21006-VETRO" }

      //TIPO TOP
      if( TipoTop == 0 ) { TipoTopStr = "LEGNO" }
      if( TipoTop == 1 ) { TipoTopStr = "VETRO" }
   }

   PROCEDURA ConfigPassacavi_368
   {
      GOSUB DecodificaPassacavi_368

      FileSat      = ""
      FileSat_ScaT = ""
      FileSat_ScaC = ""

      PosaCentro   = 0

      gest_x = 0
      gest_y = Y
      gest_z = 0

      FIN_var = "C002"

      if( TipoPassacaviStr == "TER052-ROTONDO" )
      {
         FIN_var = ""
         PosaCentro   = 1

         //DimX = 67
         DimX = 72
         DimY = 10
         //DimZ = 67
         DimZ = 72

         gest_x = 67
         gest_y = 0
         gest_z = 67

         FileSat      = "TER052_Passacavi.sat"
         FileSat_ScaT = "TER052_Scasso.sat"
         FileSat_ScaC = "TER052_Scasso.sat"

         //Scasso_Top_X   = 202
         //Scasso_Top_Z   =  72
         //Scasso_Top_Rag =  18
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   =  60
         //Scasso_Cop_Z   =  60
         //Scasso_Cop_Rag =   0
         //Scasso_Cop_Sat =  ""
      }

      if( TipoPassacaviStr == "TER050-OVALE" )
      {
         FIN_var = ""

         DimX = 205
         DimY = 21
         DimZ = 45

         gest_x = 200
         //Luca 05/03/2021 mantis 24596: 368 - Passacavi TER050
         //gest_y = Y
         gest_y = 21
         gest_z = 38

         FileSat      = "TER050_Passacavi.sat"
         FileSat_ScaT = "TER050_ScassoC.sat"
         FileSat_ScaC = "TER050_ScassoC.sat"

         //if( TipoTopStr == "VETRO" ) { FileSat_ScaT = "TER050_ScassoTV.sat" }
         FileSat_ScaT = "TER050_ScassoTV.sat"

         //Scasso_Top_X   =  199
         //Scasso_Top_Z   =   36
         //Scasso_Top_Rag =   18
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   =  197
         //Scasso_Cop_Z   =   34
         //Scasso_Cop_Rag =   17
         //Scasso_Cop_Sat =  ""
      }

      if( TipoPassacaviStr == "TER030-QUADRATO" )
      {
         DimX = 100
         DimY = 10
         DimZ = 100

         gest_y = 0

         FileSat      = "TER030_Passacavi.sat"
         FileSat_ScaT = "TER030_ScassoTV.sat"
         FileSat_ScaC = "TER030_ScassoC.sat"

         //if( TipoTopStr == "VETRO" ) { FileSat_ScaT = "TER030_ScassoTV.sat" }
         FileSat_ScaT = "TER030_ScassoTV.sat"

         //Scasso_Top_X   =  94
         //Scasso_Top_Z   =  94
         //Scasso_Top_Rag =   4
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   =  98
         //Scasso_Cop_Z   =  95
         //Scasso_Cop_Rag =   9
         //Scasso_Cop_Sat =  ""
      }

      if( TipoPassacaviStr == "TER031-RETTANGOLARE-PIC" )
      {
         DimX = 180
         DimY = 10
         //DimZ = 50
         DimZ = 49

         gest_y = 0

         FileSat      = "TER031_Passacavi.sat"
         FileSat_ScaT = "TER031_ScassoC.sat"
         FileSat_ScaC = "TER031_ScassoC.sat"

         //if( TipoTopStr == "VETRO" ) { FileSat_ScaT = "TER031_ScassoTV.sat" }
         FileSat_ScaT = "TER031_ScassoTV.sat"

         //Scasso_Top_X   = 175
         //Scasso_Top_Z   =  44.75
         //Scasso_Top_Rag =   4
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   = 178
         //Scasso_Cop_Z   =  44
         //Scasso_Cop_Rag =   9
         //Scasso_Cop_Sat =  ""
      }

      if( TipoPassacaviStr == "TER032-RETTANGOLARE-GRA" )
      {
         DimX = 240
         DimY = 10
         DimZ = 100

         gest_y = 0

         FileSat      = "TER032_Passacavi.sat"
         FileSat_ScaT = "TER032_ScassoC.sat"
         FileSat_ScaC = "TER032_ScassoC.sat"

         //if( TipoTopStr == "VETRO" ) { FileSat_ScaT = "TER032_ScassoTV.sat" }
         FileSat_ScaT = "TER032_ScassoTV.sat"

         //Scasso_Top_X   = 234
         //Scasso_Top_Z   =  94
         //Scasso_Top_Rag =   4
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   = 238
         //Scasso_Cop_Z   =  95
         //Scasso_Cop_Rag =   9
         //Scasso_Cop_Sat =  ""
      }

      //Simone 13/07/21
      if( TipoPassacaviStr == "D21005-TONDO-NERO" )
      {
         FIN_var = ""
         PosaCentro = 1

         DimX = 67
         DimY = 10
         DimZ = 67

         gest_x = 67
         gest_y = 67
         gest_z = 10

         FileSat      = "D21005_Passacavi.sat"
         FileSat_ScaT = "TER052_Scasso.sat"
         FileSat_ScaC = "TER052_Scasso.sat"
      }


      //SOLO SU WILDWOOD
      if( TipoPassacaviStr == "TER035-QUADRATO" )
      {
         FIN_var = "C028"

         DimX = 95
         DimY = 18
         DimZ = 95

         FileSat      = "TER035_Passacavi.sat"
         FileSat_ScaT = "TER035_ScassoT.sat"
         FileSat_ScaC = "TER035_ScassoC.sat"

         //Scasso_Top_X   =  94
         //Scasso_Top_Z   =  94
         //Scasso_Top_Rag =   4
         //Scasso_Top_Sat =  ""
         //
         //Scasso_Cop_X   =  98
         //Scasso_Cop_Z   =  95
         //Scasso_Cop_Rag =   9
         //Scasso_Cop_Sat =  ""
      }

      if( TipoPassacaviStr == "TER036-RETTANGOLARE-PIC" )
      {
         FIN_var = "C028"

         DimX = 178
         DimY = 18
         DimZ = 45

         gest_y = DimY

         FileSat      = "TER036_Passacavi.sat"
         FileSat_ScaT = "TER036_ScassoT.sat"
         FileSat_ScaC = "TER036_ScassoC.sat"
      }

      if( TipoPassacaviStr == "TER037-RETTANGOLARE-GRA" )
      {
         FIN_var = "C028"

         DimX = 238
         DimY = 18
         DimZ = 96

         gest_y = DimY

         FileSat      = "TER037_Passacavi.sat"
         FileSat_ScaT = "TER037_ScassoT.sat"
         FileSat_ScaC = "TER037_ScassoC.sat"
      }

      if( TipoPassacaviStr == "D21006-VETRO" )
      {
         FIN_var = "C028"

         //DimX = 200
         DimX = 202
         DimY =   4
         //DimZ =  70
         DimZ =  72

         gest_x = 200
         gest_y = Y
         gest_z = 70

         FileSat      = "D21006_Passacavi.sat"
         FileSat_ScaT = "D21006_ScassoT.sat"
         FileSat_ScaC = "D21006_ScassoC.sat"
      }

      if( gest_x == 0 )  { gest_x = DimX }
      if( gest_z == 0 )  { gest_z = DimZ }

      X = DimX
      Y = DimY
      Z = DimZ

      if( PCV_Orie == "XYZ" )
      {
         X = DimX
         Y = DimZ
         Z = DimY
      }

      if( PCV_Orie == "ZYX" )
      {
         X = DimY
         Y = DimX
         Z = DimZ
      }

      if( FileSat      != "" ) { FileSat       = STRCAT($path_sat,"368\Passacavi\",FileSat) }
      if( FileSat_ScaT != "" ) { FileSat_ScaT  = STRCAT($path_sat,"368\Passacavi\",FileSat_ScaT ) }
      if( FileSat_ScaC != "" ) { FileSat_ScaC  = STRCAT($path_sat,"368\Passacavi\",FileSat_ScaC ) }
   }

   PROCEDURA CtrlPassacavi_TrovaTopCop_368
   {
      if( ACTION() <= 0 | ACTION() == 2  )  { EXITSUB() }

      idx_mod = GetTopLevel(ATTUALE())

      idx_top = -1
      idx_cop = -1

      Scassa_Chi_Plus_Top = ""
      Scassa_Chi_Plus_Cop = ""

      TipoTop = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_top",idx_cnear,1,"Top*368")
      NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Cop_368")

      if( ATTREZZATO_SU == "TOP"  )
      {
         if( wk_cop == 0 )  { NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Ripiano_30MM") }
      }

      //Luca 21/01/2021
      if( ATTREZZATO_SU == "SCHIENA" )
      {
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Schiena_368")
      }

      if( ATTREZZATO_SU == "FONDO" )
      {
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Fondo_368")
      }

      if( IS_MATCH( ATTREZZATO_SU, "FIA*") )
      {
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Fianco*")
      }

      if( ATTREZZATO_SU == "DIVISORIO" )
      {
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"DivisiorioVertLegLiv_368")
      }

      //Luca 17/02/2021
      if( ATTREZZATO_SU == "RIP_30MM" ) { NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Ripiano_30MM") }

      if( ATTREZZATO_SU == "TECA_30MM" )
      {
         NEAR_GLOBALE2("wk_top",idx_cnear,1,"BaseTeca_30MM")
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Ripiano_30MM")
      }

      if( ATTREZZATO_SU == "SCRIVANIA" )
      {
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Piano*Scrivania_AIR")
         NEAR_GLOBALE2("wk_top",idx_cnear,1,"TopVetroScrivania_AIR")

         //Simone 01/07/2022 - Per top attrezzato su Mensola_Air
         if( UN_PADRE("Mensola_Air") )
         {
            NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Mensola_Air")
         }
      }

      //LZ 26/05/2021: gestione passacavi
      if( ATTREZZATO_SU == "PLENUM" )
      {
         NEAR_GLOBALE2("wk_top",idx_cnear,1,"Top_Vetro_Plenum")
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Coperchio_Plenum")
      }

      //Luca 06/09/2021
      if( ATTREZZATO_SU == "TAVOLO_AIR" )
      {
         NEAR_GLOBALE2("wk_top",idx_cnear,1,"Piano*AIR")
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Piano*AIR")
      }

      if( ATTREZZATO_SU == "TAVOLO_GEN" )
      {
         NEAR_GLOBALE2("wk_top",idx_cnear,1,"Piano*Generico")
         NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Piano*Generico")
      }

      //Simone 04/07/2022
      if( ATTREZZATO_SU == "MENSOLA_LIV" )
      {
         if( UN_PADRE("Mensola_Rivestita") )
         {
            NEAR_GLOBALE2("wk_top",idx_cnear,1,"Mensola_Riv_Riv_Vtr")
            NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Mensola_Riv_Piano")
         }

         if( UN_PADRE("Mensola_Dub") )
         {
            NEAR_GLOBALE2("wk_cop",idx_cnear,1,"Mensola_Dub_Piano")
         }
      }

      if( wk_top > 0 ) { idx_top = wk_top[1] }
      if( wk_cop > 0 ) { idx_cop = wk_cop[1] }

      if( ATTREZZATO_SU == "MENSOLA_AIR" )
      {
         idx_top = PADRE(ATTUALE(),1)
         idx_cop = PADRE(ATTUALE(),1)
      }

      if( IS_IDX(idx_top)  )
      {
         if( NOME(idx_top) == "TopVetro_368" ) { TipoTop = 1 }

         COMPONENTI2("wk_bl",idx_top,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & VAR_VAL(wk_bl[i],"NO_SCASSA_PCV") == 0
              & UN_PADRE2(wk_bl[i],"Passacavi_368")==0 ) { Scassa_Chi_Plus_Top = STRCAT(Scassa_Chi_Plus_Top,STR(wk_bl[i]),";") }
            i = i + 1
         }

         if( IS_IDX(idx_cop) )  { idx_mod = GetTopLevel(idx_cop) }

         //VAR_VALUE_SET(idx_top,"VediLimiti_PCV",VediLimiti_PCV)
      }

      if( IS_IDX(idx_cop)  )
      {
         COMPONENTI2("wk_bl",idx_cop,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & VAR_VAL(wk_bl[i],"NO_SCASSA_PCV") == 0
              & UN_PADRE2(wk_bl[i],"Passacavi_368")==0 )  { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }
            i = i + 1
         }
         //VAR_VALUE_SET(idx_cop,"VediLimiti_PCV",VediLimiti_PCV)
      }

      if( ATTREZZATO_SU == "RIP_30MM"
        | ATTREZZATO_SU == "TECA_30MM"  )
      {
         BOX_MODE(0)
         NEAR_GLOBALE("wk_scassa",idx_cnear,10,1,"CopTeca_30MM")
         //Luca 19/03/2021
         //cerco eventuale coperchio 36e8
         if( wk_scassa == 0 ) { NEAR_GLOBALE("wk_scassa",idx_cnear,10,1,"Cop_368") }

         idx_scassa_add = -1
         if( wk_scassa>0 )  { idx_scassa_add = wk_scassa[1] }

         if( IS_IDX(idx_scassa_add) )
         {
            COMPONENTI2("wk_bl",idx_scassa_add,"*")
            i = 1
            while ( i <= wk_bl )
            {
               if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
                 & UN_PADRE2(wk_bl[i],"Passacavi_368")==0 )  { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }
               i = i + 1
            }
         }
      }

      if( ATTREZZATO_SU == "FIA_30MM" )
      {
         BOX_MODE(0)
         NEAR_GLOBALE("wk_scassa",idx_cnear,10,1,"Fia*368")

         idx_scassa_add = -1
         if( wk_scassa>0 )  { idx_scassa_add = wk_scassa[1] }

         if( IS_IDX(idx_scassa_add) )
         {
            COMPONENTI2("wk_bl",idx_scassa_add,"*")
            i = 1
            while ( i <= wk_bl )
            {
               if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
                 & UN_PADRE2(wk_bl[i],"Passacavi_368")==0 )  { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }
               i = i + 1
            }
         }
      }

      //Luca 12/05/2021
      if( ATTREZZATO_SU == "SCRIVANIA"  )
      {
         COMPONENTI2("wk_ins",GetTopLevel(ATTUALE()),"InsertoVetroScrivania_AIR")
         if( wk_ins == 0 ) { COMPONENTI2("wk_ins",GetTopLevel(ATTUALE()),"TopVetroScrivania_AIR") }

         idx_scassa_add = -1
         if( wk_ins>0 )  { idx_scassa_add = wk_ins[1] }

         if( IS_IDX(idx_scassa_add) )
         {
            COMPONENTI2("wk_bl",idx_scassa_add,"*")
            i = 1
            while ( i <= wk_bl )
            {
               if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
                 & UN_PADRE2(wk_bl[i],"Passacavi_368")==0 )  { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }
               i = i + 1
            }
         }
      }

      GOSUB DecodificaPassacavi_368

      AumentoIng_X = 20
      AumentoIng_Z = 20

      ////Luca 21/01/2021
      //if( ATTREZZATO_SU == "SCHIENA"
      //  | ATTREZZATO_SU == "RIP_30MM"  )
      //{
      //   AumentoIng_X = 20
      //   AumentoIng_Z = 20
      //}
      //
      if( VAR_VAL_STR(ATTUALE(),"TipoTopStr") == "VETRO"  )
      {
         AumentoIng_X = 25
         AumentoIng_Z = 25
      }
   }

   PROCEDURA CtrlScassoGen_TrovaPan_368
   {
      if( ACTION() <= 0 | ACTION() == 2  )  { EXITSUB() }

      nome_cerca = "Schiena_368"

      Scassa_Chi_Plus = ""
      idx_da_scassare = -1

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_scs",idx_cnear,1,nome_cerca)

      if( wk_scs > 0 )
      {
         idx_da_scassare  = wk_scs[1]

         COMPONENTI2("wk_bl",idx_da_scassare,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & UN_PADRE2(wk_bl[i],"ScassoGenerico_368")==0
              & UN_PADRE2(wk_bl[i],"PCV_ContCollisioni_368")==0 ) { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }
            i = i + 1
         }
      }
   }

   //Luca 04/12/2020
   PROCEDURA CtrlPassacavi_PosCentroCoperchio_368
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 )  { EXITSUB() }

      if( IS_MATCH( ATTREZZATO_SU,"*30MM") ) { EXITSUB() }

      if( ATTREZZATO_SU == "COPERCHIO" )
      {
         wk_offx = VAR_VAL(PADRE(ATTUALE(),1),"X")/2
         wk_offz = 50 + AumentoIng_Z + Z/2

         if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 & wk_offx > 0 ) { OffsetX = wk_offx }
         if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 & wk_offz > 0 ) { OffsetZ = wk_offz }

         EXITSUB()
      }

      if( IS_IDX(idx_cop) == 0 ) { EXITSUB() }
      if( IS_IDX(idx_top) == 0 ) { EXITSUB() }

      wk_offx = -1
      wk_offz = -1

      ang_top = ANG_TOT_NOR(GetTopLevel(ATTUALE()))

      //trovo il centro del coperchio in riferimento al punto di riferimento del top
      SET_#(idx_cop)
      wk_pc = #base_0
      wk_pc.x = #base_0.x + COSENO(ang_top)*(#X/2) +   SENO(ang_top)*100
      wk_pc.z = #base_0.z -   SENO(ang_top)*(#X/2) + COSENO(ang_top)*100
      wk_pc.y = 0

      SET_#(idx_top)

      wk_pt_b0 = #base_0
      wk_pt_b3 = #base_3

      if( VAR_Revisione_PosPCV > 1
        & VAR_EXIST( idx_top, "pnt_top_b0")
        & VAR_EXIST( idx_top, "pnt_top_b3"))
      {
         wk_pt_b0 = #pnt_top_b0
         wk_pt_b3 = #pnt_top_b3
      }

      wk_pt_b0.y = 0
      wk_pt_b3.y = 0

      wk_px = INTERFERISCI(wk_pc,ang_top+90,wk_pt_b0,wk_pt_b3)

      if( wk_px.x != $ERR_INTER
        & wk_px.z != $ERR_INTER ) { wk_offx = DISTANZA(wk_px,wk_pt_b0) }

      //distanza minima in z
      wk_offz = 50 + AumentoIng_Z + Z/2

      if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 0 & wk_offx > 0 ) { OffsetX = wk_offx }
      if( IS_VAR_FIXED(ATTUALE(),"OffsetZ") == 0 & wk_offz > 0 ) { OffsetZ = wk_offz }
   }

   PROCEDURA CtrlPassacavi_Sposta_368
   {
      if( VAR_Modifica == 0 )  { EXITSUB() }

      //se forzata arriva da utente altrimenti da controllo collisioni
      //$wk_DLG_da_collisioni = 1
      //if( IS_VAR_FIXED(ATTUALE(),"VAR_Modifica")==1 ) {  $wk_DLG_da_collisioni = 0 }

      DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Modifica")
      VAR_Modifica = 0

      VediIngScasso = 1

      FORZA_USCITA = 0

      // ATTIVO LA GRAFICA DEI LIMITI
      AttivaLimiti_Passacavi_368 ( ATTUALE() )

      var_globale_ctrl_dialog_open = STRCAT("wk_DLG_open_",STR(ATTUALE()))

      r = SetViewEditPos_Passacavi_368 ( ATTUALE(), var_globale_ctrl_dialog_open )

      //se non sono riuscito ad impostare la vista
      if( r == 0 )
      {
         DisattivaLimiti_Passacavi_368 (ATTUALE())
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 0

      GOSUB CtrlPassacavi_SpostaDlg_368

      // DISATTIVO GRAFICA LIMITI
      DisattivaLimiti_Passacavi_368 (ATTUALE())

      //RIPRISTINO VISTA
      ResetViewEditPos_Passacavi_368 ()

      VediIngScasso = 0

      //Luca 28/12/2020 cancello
      if( VAR_VAL(ATTUALE(),"Delme_Annulla_OnInsert") == 1
        | VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1 )
      {
         commento = "Delme_Annulla_OnInsert"
         if( VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1  )  { commento = "Delme_DaBottone" }
         COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()) , " //", commento))
      }
   }

   PROCEDURA CtrlPassacavi_SpostaDlg_368
   {
      VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,1)

      //CHIEDI_MULTIPLO(ATTUALE(),"OffsetX;OffsetZ")
      //CHIEDI(ATTUALE(),"OffsetX")

      GOSUB CtrlPassacavi_RunDlg_368

      RIGENERA_IDX(ATTUALE())

      //GOSUB CtrlPassacavi_AggiornaScassi_368
      if( NOME(ATTUALE()) == "ScassoGenerico_368" )
      {
         GOSUB CtrlScassoGen_TrovaPan_368
         AggiornaScassi_Passacavi_368( ATTUALE() , STR(idx_da_scassare) , 2 )
      }
      else
      {
         GOSUB CtrlPassacavi_TrovaTopCop_368
         AggiornaScassi_Passacavi_368( ATTUALE() , STRCAT(STR(idx_top),";",STR(idx_cop)) , 2 )
      }

      GOSUB CtrlPassacavi_Posizione_368

      if( VAR_VAL(ATTUALE(),"OK_POSIZIONE") == 1 | FORZA_USCITA == 1 )
      {
         VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,0)
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 1

      //richiamo ricorsivamente
      GOSUB CtrlPassacavi_SpostaDlg_368
   }

   PROCEDURA CtrlPassacavi_Posizione_368
   {
      OK_POSIZIONE = 1

      DEL_VAR(ATTUALE(),"coll*")

      BOX_MODE(0)
      //NEAR_GLOBALE2("coll_tmp",idx_coll_PCV,0.1,"PCV_ContCollisioni_368")
      //NEAR_GLOBALE("coll_tmp",idx_coll_PCV,0.1,1,"PCV_ContCollisioni_368")
      NEAR_GLOBALE("coll_tmp",idx_coll_PCV,0.1,0,"PCV_ContCollisioni_368")
      //COLLIDE2(idx_coll_PCV,"coll_tmp","PCV_ContCollisioni_368")

      ScriviSuLog( 0 , "CtrlPassacavi_Posizione_368" , "START" )
      ScriviSuLog( 0 , "CtrlPassacavi_Posizione_368" , STRCAT("coll_tmp=",STR(coll_tmp)))

      //elimino il contctrscassi dello scasso stesso
      coll = 0
      i = 1
      while ( i<=coll_tmp )
      {
         ScriviSuLog( 0 , "CtrlPassacavi_Posizione_368" , STRCAT("coll_tmp[",STR(i),"]=",STR(coll_tmp[i])))
         ////if( PADRE(coll_tmp[i],1) != ATTUALE()
         //if( PADRE(coll_tmp[i],2) != ATTUALE()
         //  & IS_ESCLUSO(coll_tmp[i]) == 0 )
         //{
         //   if( NOME(ATTUALE()) == "Passacavi_368" )
         //   {
         //      ne = coll + 1
         //      coll = ne
         //      coll[ne] = coll_tmp[i]
         //   }
         //   //per faretti, led, ripetitore verifico che il top level della collisione sia lo stesso
         //   //per evitare errore nel caso di led su contenitori sovrapposti
         //   else
         //   {
         //      if( GetTopLevel(coll_tmp[i]) == GetTopLevel(ATTUALE()) )
         //      {
         //         ne = coll + 1
         //         coll = ne
         //         coll[ne] = coll_tmp[i]
         //      }
         //   }
         //}

         controllato = 0

         if( NOME(ATTUALE()) == "Passacavi_368"
           | NOME(ATTUALE()) == "ScassoGenerico_368"  )
         {
            controllato = 1

            //verifico che non sia figlio dell'elemento che lancia il controllo e che non sia escluso
            if( PADRE(coll_tmp[i],2) != ATTUALE()
              & PADRE(coll_tmp[i],1) != ATTUALE()
              & IS_ESCLUSO(coll_tmp[i]) == 0 )
            {
               //LZ 17/05/2022: aggiunti passacavi anche ai fianchi, provo con l'orientamento

               ////se attrezzato su schiena verifico che non sia collisione figlia di fondo o coperchio
               //if( ATTREZZATO_SU == "SCHIENA" )
               //{
               //   if( NOME(PADRE(coll_tmp[i],1)) != "Cop_368"
               //     & NOME(PADRE(coll_tmp[i],1)) != "Fondo_368"
               //     & NOME(PADRE(coll_tmp[i],1)) != "SchienaVetroAlzata_AIR"  )
               //   {
               //      ne = coll + 1
               //      coll = ne
               //      coll[ne] = coll_tmp[i]
               //   }
               //}
               ////se non attrezzato su schiena verifico che non sia collisione figlia schiena
               //else
               //{
               //   if( NOME(PADRE(coll_tmp[i],1)) != "Schiena_368" )
               //   {
               //      ne = coll + 1
               //      coll = ne
               //      coll[ne] = coll_tmp[i]
               //   }
               //}

               wk_orie  = VAR_VAL_STR(coll_tmp[i],"PCV_Orie_test")
               if( wk_orie == "" )
               {
                  wk_orie  = Get_Pcv_AttOrie( PADRE(coll_tmp[i],1))
                  wk_orie  = $Get_Pcv_Orie
                  wk_attr  = $Get_Pcv_Att
               }

               wk_supcv = 0
               if( NOME(PADRE(coll_tmp[i],2)) == "Passacavi_368" )
               {
                  wk_supcv = 1
                  wk_orie  = VAR_VAL_STR( PADRE(coll_tmp[i],2), "PCV_Orie")
                  wk_attr  = VAR_VAL_STR( PADRE(coll_tmp[i],2), "ATTREZZATO_SU")
               }

               if( wk_orie == VAR_VAL_STR( ATTUALE(), "PCV_Orie") )
               {
                  wk_add = 1
                  //No collisione se passacavi su fianchi di contenitori diversi
                  if( wk_supcv == 1
                    & GetTopLevel(coll_tmp[i]) != GetTopLevel(ATTUALE())
                    & IS_MATCH( VAR_VAL_STR( ATTUALE(), "ATTREZZATO_SU"), "FIANCO*") ) { wk_add = 0 }

                  if( wk_add == 1 )
                  {
                     ne = coll + 1
                     coll = ne
                     coll[ne] = coll_tmp[i]
                  }
               }
            }
         }

         if( NOME(ATTUALE()) == "Led_368" )
         {
            controllato = 1
            //verifico che non sia figlio dell'elemento che lancia il controllo e che non sia escluso
            if( PADRE(coll_tmp[i],1) != ATTUALE()
              & IS_ESCLUSO(coll_tmp[i]) == 0
              & UN_PADRE2(coll_tmp[i],"Passacavi_368") == 0 )
            {
               //per faretti, led, ripetitore verifico che il top level della collisione sia lo stesso
               //per evitare errore nel caso di led su contenitori sovrapposti
               if( GetTopLevel(coll_tmp[i]) == GetTopLevel(ATTUALE()) )
               {
                  ne = coll + 1
                  coll = ne
                  coll[ne] = coll_tmp[i]
               }
            }
         }

         //else
         if( controllato == 0 )
         {
            //verifico che non sia figlio dell'elemento che lancia il controllo e che non sia escluso
            if( PADRE(coll_tmp[i],1) != ATTUALE() & IS_ESCLUSO(coll_tmp[i]) == 0  )
            {
               //per faretti, led, ripetitore verifico che il top level della collisione sia lo stesso
               //per evitare errore nel caso di led su contenitori sovrapposti
               if( GetTopLevel(coll_tmp[i]) == GetTopLevel(ATTUALE()) )
               {
                  ne = coll + 1
                  coll = ne
                  coll[ne] = coll_tmp[i]
               }
            }
         }

         i = i + 1
      }

      ScriviSuLog( 0 , "CtrlPassacavi_Posizione_368" , STRCAT("coll=",STR(coll)))

      coll_items = 0

      //integro gestione dei controlli speciali con M4_Collision hard
      i = 1
      while ( i <= coll )
      {
         if( VAR_VAL(coll[i],"ContCollisione_Speciale") > 0 )
         {
            idx_cont_speciale = VAR_VAL(coll[i],"idx_cont_speciale")
            //idx_cont_hide     = VAR_VAL(idx_coll_PCV,"idx_cont_hide")

            wk_cmd = STRCAT("M4_COLLISION hard ", STR(idx_cont_PCV_hide), " ", STR(idx_cont_speciale))
            COMANDO2(wk_cmd)

            if( VAR_VAL(-1, "COLLISION__") > 0 )
            {
               AddItem2Array( ATTUALE() , "coll_items",coll[i] ,"")
            }
         }
         else
         {
            AddItem2Array( ATTUALE() , "coll_items",coll[i] ,"")
         }

         i = i + 1
      }

      //verifico che sia interno al top/coperchio
      scasso_fuori = 0
      idx_pdr = PADRE(ATTUALE(),1)
      BOX_MODE(0)
      NEAR_GLOBALE("coll_top",idx_coll_PCV,0.1,1,NOME(idx_pdr))

      ScriviSuLog( 0 , "CtrlPassacavi_Posizione_368" , STRCAT("coll_top=",STR(coll_top)))

      if( coll_top == 0  ) { scasso_fuori = 1 }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " coll = ",STR(coll) , " scasso_fuori = ",STR(scasso_fuori)  ))
      //if( coll > 0 )
      //{
      //   i = 1
      //   while ( i<=coll  )
      //   {
      //      COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " coll[i] = ",STR(coll[i])))
      //      i = i + 1
      //   }
      //}
      //
      //if( coll > 0 | scasso_fuori == 1 ) { OK_POSIZIONE = 0 }

      COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " coll_items = ",STR(coll_items) , " scasso_fuori = ",STR(scasso_fuori)  ))
      if( coll_items > 0 )
      {
         i = 1
         while ( i<=coll_items  )
         {
            COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " coll_items[i] = ",STR(coll_items[i])))
            i = i + 1
         }
      }

      if( coll_items > 0 | scasso_fuori == 1 ) { OK_POSIZIONE = 0 }
   }

   PROCEDURA CtrlPassacavi_RunDlg_368
   {
      debug = 0

      #ifdef TE
         debug = 1
      #endif

      $wk_title = MSG(1227)

      //POSIZIONE
      $wk_lbl_1   = STRCAT("  " ,MSG(1114),"  ")
      //ORIENTAMENTO
      $wk_lbl_2   = STRCAT("  " ,MSG(1228),"  ")

      //Luca 17/02/2021
      //"Riferimento centro PASSACAVI / sx TOP"
      $wk_lbl_2a  = MSG(1229)
      if( VAR_VAL_STR( ATTUALE(), "ATTREZZATO_SU") == "FIANCO_DX" ) { $wk_lbl_2a = REPLACE( MSG(1229), "sx", "dx") }
      //"Riferimento centro RIPETITORE / sx TOP"
      if( NOME(ATTUALE()) == "RipetitoreIR_368"  ) { $wk_lbl_2a  = MSG(1232) }
      //"Riferimento centro FARETTO / sx TOP"
      if( NOME(ATTUALE()) == "Faretto_368"  )      { $wk_lbl_2a  = MSG(1235) }
      //"Riferimento centro LED / sx TOP"
      if( NOME(ATTUALE()) == "Led_368"  )          { $wk_lbl_2a  = MSG(1234) }

      //"Riferimento centro LED / sx TOP"
      if( NOME(ATTUALE()) == "Scasso_EldomTop"  )
      {
         $wk_lbl_2a  = MSG(1303)
         if( FormaScasso == 1 ) { $wk_lbl_2a  = MSG(1304) }
      }

      if( NOME(ATTUALE()) == "ScassoGenTest_L21"  )
      {
         $wk_lbl_2a  = MSG(1310)
      }

      $wk_lbl_ctrl = ""
      //"Posizione passacavi non consentita."
      if( $wk_DLG_da_collisioni==1 ) { $wk_lbl_ctrl = STRCAT(MSG(1090)," ",MSG(1231)) }

      if( NOME(ATTUALE()) == "RipetitoreIR_368"
        | NOME(ATTUALE()) == "Faretto_368"
        | NOME(ATTUALE()) == "Led_368"
        | NOME(ATTUALE()) == "Scasso_EldomTop"   )
      {
         //"Posizione non consentita."
         if( $wk_DLG_da_collisioni==1 ) { $wk_lbl_ctrl = STRCAT(MSG(1090)," ",MSG(1233)) }
      }

      //Luca 01/03/2022
      if( NOME(ATTUALE()) == "ScassoGenTest_L21" )
      {
         if( $wk_DLG_da_collisioni==1 ) { $wk_lbl_ctrl = STRCAT(MSG(1090)," ",MSG(1311)) }
      }

      $wk_DLG_dimy          = 300
      $wk_DLG_lbl_ctrl_posy = 180
      $wk_DLG_btn_ctrl_posy = 220

      $wk_DLG_AttivaRot = VAR_VAL(ATTUALE(),"VAR_AttivaRot")
      $wk_DLG_radio1 = 0
      $wk_DLG_radio2 = 0
      $wk_DLG_radio3 = 0
      $wk_DLG_radio4 = 0

      if( $wk_DLG_AttivaRot == 1  )
      {
         $wk_DLG_dimy = 460
         $wk_DLG_lbl_ctrl_posy = 340
         $wk_DLG_btn_ctrl_posy = 385

         $wk_DLG_radio1 = SE_NUM(VAR_Orientamento<=0,1,0)
         $wk_DLG_radio2 = SE_NUM(VAR_Orientamento==1,1,0)
         $wk_DLG_radio3 = SE_NUM(VAR_Orientamento==2,1,0)
         $wk_DLG_radio4 = SE_NUM(VAR_Orientamento==3,1,0)
      }

      $wk_enable_offz = 1
      if( NOME(ATTUALE()) == "Led_368") { $wk_enable_offz = 0 }

      $wk_label_offx = MSG(1125)
      $wk_label_offz = MSG(1230)

      //Luca 21/01/2021
      if( VAR_VAL_STR(ATTUALE(),"PCV_Orie") == "XYZ"
        | VAR_VAL_STR(ATTUALE(),"PCV_Orie") == "ZYX" ) { $wk_label_offz = MSG(1126) }

      //Luca 01/03/2022
      if( NOME(ATTUALE()) == "ScassoGenTest_L21" )     { $wk_label_offz = MSG(1126) }

      $wk_OffsetX_save      = OffsetX
      $wk_OffsetZ_save      = OffsetZ
      $wk_Orientamento_save = VAR_VAL(ATTUALE(),"VAR_Orientamento")

      $wk_pcv_offx = STR(OffsetX)
      $wk_pcv_offz = STR(OffsetZ)

      //Luca 09/12/2021
      if( NOME(ATTUALE()) == "Scasso_EldomTop")
      {
         if( FormaScasso == 1 )
         {
            $wk_OffsetX_save      = Offset_CilX
            $wk_OffsetZ_save      = Offset_CilZ

            $wk_pcv_offx = STR(Offset_CilX)
            $wk_pcv_offz = STR(Offset_CilZ)
         }
      }

      $wk_posx_lab = 20
      $wk_posx_edt = 220
      $wk_posx_lim = 230

      $wk_dimx_lab = 200
      $wk_dimx_lim = 100
      $wk_dimx_leg = 30
      $wk_dimx_edt = 50

      //Gestisco il Frame2 per la richiesta delle misure (NON previso insieme al frame di rotazione)
      $wk_AttivaMisure = 0
      $wk_lbl_3  = MSG(1113)
      $wk_lbl3_x = MSG(1122)
      $wk_lbl3_y = MSG(1123)
      $wk_lbl3_valx = "0"
      $wk_lbl3_valy = "0"

      $wk_dlg_idx = ATTUALE()

      $wk_enable_lbl3_valy = 1
      if( NOME(ATTUALE()) == "ScassoGenerico_368" )
      {
         $wk_AttivaMisure = 1

         $wk_DLG_dimy = 460
         $wk_DLG_lbl_ctrl_posy = 340
         $wk_DLG_btn_ctrl_posy = 385

         if( FormaScasso == 1 )
         {
            $wk_lbl3_x = MSG(1127)
            $wk_enable_lbl3_valy = 0
         }

         $wk_lbl3_valx = STR(DimX)
         $wk_lbl3_valy = STR(DimY)
      }

      if( NOME(ATTUALE()) == "ScassoGenTest_L21" )
      {
         $wk_AttivaMisure = 1

         $wk_DLG_dimy = 460
         $wk_DLG_lbl_ctrl_posy = 340
         $wk_DLG_btn_ctrl_posy = 385

         $wk_lbl3_valx = STR(X)
         $wk_lbl3_valy = STR(Y)
      }

      $wk_dlg_forza_uscita = 0
      $wk_dlg_button_elimina = 0

      //Luca 27/05/2022
      //attivo bottone defult se esistono le variabili
      $wk_dlg_btn_default = 0
      if( VAR_EXIST($wk_dlg_idx,"DEF_OffsetX") ) { $wk_dlg_btn_default = 1 }

      $wk_lim_ok = 0
      while( $wk_lim_ok == 0 )
      {
         $wk_dlg_button_annulla = 0
         COMANDO2(STRCAT("run_dll_cmd bdmdialog MakeDialog ",APICI(),$path_bdm,"Dialog.txt|SpostaPassacavi_368",APICI()))

         if( $DlgResult__ == 0 )  { $wk_lim_ok = 2 }
         else
         {
            $wk_lim_ok = 1

            if( NOME(ATTUALE()) == "ScassoGenerico_368" )
            {
               if( FormaScasso == 1 )
               {
                  if( ATOI($wk_lbl3_valx) < 5 | ATOI($wk_lbl3_valx) > 400 )  { $wk_lim_ok = 0 }
               }
            }

            //Luca 01/03/2022
            if( NOME(ATTUALE()) == "ScassoGenTest_L21" )
            {
               if( ATOI($wk_lbl3_valx) < 50 | ATOI($wk_lbl3_valx) > 300 )  { $wk_lim_ok = 0 }
               if( ATOI($wk_lbl3_valy) < 50 | ATOI($wk_lbl3_valy) > 300 )  { $wk_lim_ok = 0 }
            }
         }
      }

      if( $wk_lim_ok == 2 )
      {
         #ifdef TEC
         if( $wk_dlg_forza_uscita == 1 ) { FORZA_USCITA = 1  }
         #endif

         if( $wk_dlg_button_elimina == 1 )
         {
            Delme_DaBottone = 1
            FORZA_USCITA = 1
         }

         if( VAR_VAL(ATTUALE(),"VAR_Modifica_OnInsert") == 1 )
         {
            VAR_Modifica_OnInsert = 0
            Delme_Annulla_OnInsert = 1
            FORZA_USCITA = 1
         }

         if( $wk_dlg_button_annulla == 1 )
         {
            wk_restore = 0
            //restore
            if( OffsetX != $wk_OffsetX_save
              | OffsetZ != $wk_OffsetZ_save ) { wk_restore = 1 }

            //Luca 09/12/2021
            if( NOME(ATTUALE()) == "Scasso_EldomTop"  )
            {
               if( FormaScasso == 1 )
               {
                  if( Offset_CilX != $wk_OffsetX_save
                    | Offset_CilZ != $wk_OffsetZ_save ) { wk_restore = 1 }
               }
            }

            if( $wk_DLG_AttivaRot == 1 )
            {
               if( VAR_Orientamento != $wk_Orientamento_save ) { wk_restore = 1 }
            }

            if( wk_restore )
            {
               $wk_cmd = "VAR_CHANGE 1 "
               $wk_cmd = STRCAT($wk_cmd," ",STR(ATTUALE()))
               $wk_cmd = STRCAT($wk_cmd," OffsetX=",STR($wk_OffsetX_save))
               $wk_cmd = STRCAT($wk_cmd," OffsetZ=",STR($wk_OffsetZ_save))

               //Luca 09/12/2021
               if( NOME(ATTUALE()) == "Scasso_EldomTop"  )
               {
                  if( FormaScasso == 1 )
                  {
                     $wk_cmd = STRCAT($wk_cmd," Offset_CilX=",STR($wk_OffsetX_save))
                     $wk_cmd = STRCAT($wk_cmd," Offset_CilZ=",STR($wk_OffsetZ_save))
                  }
               }

               if( $wk_DLG_AttivaRot == 1 )
               {
                  $wk_cmd = STRCAT($wk_cmd," VAR_Orientamento=" ,STR($wk_Orientamento_save))
               }

               COMANDO2($wk_cmd)
            }

         }
         EXITSUB()
      }

      OffsetX = ATOI($wk_pcv_offx)
      OffsetZ = ATOI($wk_pcv_offz)

      VAR_Orientamento = 0
      if( $wk_DLG_radio1 == 1) { VAR_Orientamento = 0 }
      if( $wk_DLG_radio2 == 1) { VAR_Orientamento = 1 }
      if( $wk_DLG_radio3 == 1) { VAR_Orientamento = 2 }
      if( $wk_DLG_radio4 == 1) { VAR_Orientamento = 3 }

      $wk_cmd = "VAR_CHANGE 1 "
      $wk_cmd = STRCAT($wk_cmd," ",STR(ATTUALE()))
      $wk_cmd = STRCAT($wk_cmd," OffsetX=",STR(OffsetX))
      $wk_cmd = STRCAT($wk_cmd," OffsetZ=",STR(OffsetZ))

      //Luca 09/12/2021
      if( NOME(ATTUALE()) == "Scasso_EldomTop"  )
      {
         if( FormaScasso == 1 )
         {
            $wk_cmd = STRCAT($wk_cmd," Offset_CilX=",STR(OffsetX))
            $wk_cmd = STRCAT($wk_cmd," Offset_CilZ=",STR(OffsetZ))
         }
      }

      $wk_cmd = STRCAT($wk_cmd," VAR_Orientamento=" ,STR(VAR_Orientamento))
      COMANDO2($wk_cmd)

      if( $wk_AttivaMisure == 1 )
      {
         $wk_cmd = ""
         if( ATOI($wk_lbl3_valx) != VAR_VAL(ATTUALE(),"DimX") ) { $wk_cmd = STRCAT(" DimX=",$wk_lbl3_valx) }
         if( ATOI($wk_lbl3_valy) != VAR_VAL(ATTUALE(),"DimY") ) { $wk_cmd = STRCAT($wk_cmd, " DimY=",$wk_lbl3_valy) }

         if( $wk_cmd != "" ) { COMANDO2(STRCAT("VAR_CHANGE 1  ",STR(ATTUALE()) , " " ,$wk_cmd)) }
      }

      //COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()), " //da ModificaPosizioneScassi_Dialog_WallPanel"))
   }
   //}

   PROCEDURA CtrlRipetitoreIR_TrovaTopCop_368
   {
      if( ACTION() <= 0 | ACTION() == 2 )  { EXITSUB() }

      idx_top = -1
      idx_cop = -1

      Scassa_Chi_Plus_Top = ""
      Scassa_Chi_Plus_Cop = ""

      TipoTop = 0

      BOX_MODE(0)
      NEAR_GLOBALE("wk_cop",idx_cnear,1,1,"Cop_368")
      NEAR_GLOBALE2("wk_top",idx_cnear,1,"Top*368")

      COMANDO2(STRCAT("LOGMSG idx_cnear = ",STR(idx_cnear), " wk_top = ", STR(wk_top), " wk_cop = ", STR(wk_cop)))

      if( wk_top > 0 ) { idx_top = wk_top[1] }
      if( wk_cop > 0 ) { idx_cop = wk_cop[1] }

      if( IS_IDX(idx_top)  )
      {
         if( NOME(idx_top) == "TopVetro_368" ) { TipoTop = 1 }

         COMPONENTI2("wk_bl",idx_top,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & UN_PADRE2(wk_bl[i],"RipetitoreIR_368")==0 ) { Scassa_Chi_Plus_Top = STRCAT(Scassa_Chi_Plus_Top,STR(wk_bl[i]),";") }
            i = i + 1
         }
      }

      if( IS_IDX(idx_cop)  )
      {
         COMPONENTI2("wk_bl",idx_cop,"*")
         i = 1
         while ( i <= wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE
              & UN_PADRE2(wk_bl[i],"RipetitoreIR_368")==0 )  { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }
            i = i + 1
         }
      }

      if( IS_IDX(idx_top) ) { Spessore_Top = VAR_VAL(idx_top,"Y") }
   }

   PROCEDURA CtrlRipetitore_Sposta_368
   {
      if( VAR_Modifica == 0 )  { EXITSUB() }

      //se forzata arriva da utente altrimenti da controllo collisioni
      //$wk_DLG_da_collisioni = 1
      //if( IS_VAR_FIXED(ATTUALE(),"VAR_Modifica")==1 ) {  $wk_DLG_da_collisioni = 0 }

      DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Modifica")
      VAR_Modifica = 0

      FORZA_USCITA = 0

      // ATTIVO LA GRAFICA DEI LIMITI
      AttivaLimiti_Passacavi_368 ( ATTUALE() )

      var_globale_ctrl_dialog_open = STRCAT("wk_DLG_open_",STR(ATTUALE()))

      r = SetViewEditPos_Passacavi_368 ( ATTUALE(), var_globale_ctrl_dialog_open )

      //se non sono riuscito ad impostare la vista
      if( r == 0 )
      {
         DisattivaLimiti_Passacavi_368 (ATTUALE())
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 0

      GOSUB CtrlRipetitore_SpostaDlg_368

      // DISATTIVO GRAFICA LIMITI
      DisattivaLimiti_Passacavi_368 (ATTUALE())

      //RIPRISTINO VISTA
      ResetViewEditPos_Passacavi_368 ()

      //Luca 28/12/2020 cancello
      if( VAR_VAL(ATTUALE(),"Delme_Annulla_OnInsert") == 1
        | VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1 )
      {
         commento = "Delme_Annulla_OnInsert"
         if( VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1  )  { commento = "Delme_DaBottone" }
         COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()) , " //", commento))
      }
   }

   PROCEDURA CtrlRipetitore_SpostaDlg_368
   {
      VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,1)

      //CHIEDI_MULTIPLO(ATTUALE(),"OffsetX;OffsetZ")
      //CHIEDI(ATTUALE(),"OffsetX")

      GOSUB CtrlPassacavi_RunDlg_368

      RIGENERA_IDX(ATTUALE())

      //GOSUB CtrlPassacavi_TrovaTopCop_368

      //GOSUB CtrlPassacavi_AggiornaScassi_368
      AggiornaScassi_Passacavi_368( ATTUALE() , STRCAT(STR(idx_top),";",STR(idx_cop)) , 2 )

      GOSUB CtrlPassacavi_Posizione_368

      if( VAR_VAL(ATTUALE(),"OK_POSIZIONE") == 1
        | FORZA_USCITA == 1 )
      {
         VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,0)
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 1

      //richiamo ricorsivamente
      GOSUB CtrlRipetitore_SpostaDlg_368
   }

   PROCEDURA CtrlFarettoLed_Sposta_368
   {
      if( VAR_Modifica == 0 )  { EXITSUB() }

      //se forzata arriva da utente altrimenti da controllo collisioni
      //$wk_DLG_da_collisioni = 1
      //if( IS_VAR_FIXED(ATTUALE(),"VAR_Modifica")==1 ) {  $wk_DLG_da_collisioni = 0 }

      DEL_VAR_MODIFICATE(ATTUALE(),"VAR_Modifica")
      VAR_Modifica = 0

      FORZA_USCITA = 0

      // ATTIVO LA GRAFICA DEI LIMITI
      AttivaLimiti_Passacavi_368 ( ATTUALE() )

      var_globale_ctrl_dialog_open = STRCAT("wk_DLG_open_",STR(ATTUALE()))

      r = SetViewEditPos_Passacavi_368 ( ATTUALE(), var_globale_ctrl_dialog_open )

      //se non sono riuscito ad impostare la vista
      if( r == 0 )
      {
         DisattivaLimiti_Passacavi_368 (ATTUALE())
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 0

      GOSUB CtrlFaretto_SpostaDlg_368

      // DISATTIVO GRAFICA LIMITI
      DisattivaLimiti_Passacavi_368 (ATTUALE())

      //RIPRISTINO VISTA
      ResetViewEditPos_Passacavi_368 ()

      //Luca 28/12/2020 cancello
      if( VAR_VAL(ATTUALE(),"Delme_Annulla_OnInsert") == 1
        | VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1 )
      {
         commento = "Delme_Annulla_OnInsert"
         if( VAR_VAL(ATTUALE(),"Delme_DaBottone") == 1  )  { commento = "Delme_DaBottone" }
         COMANDO(STRCAT("CANCELLA ",STR(ATTUALE()) , " //", commento))
      }
   }

   PROCEDURA CtrlFaretto_SpostaDlg_368
   {
      VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,1)

      //CHIEDI_MULTIPLO(ATTUALE(),"OffsetX;OffsetZ")
      //CHIEDI(ATTUALE(),"OffsetX")

      GOSUB CtrlPassacavi_RunDlg_368

      RIGENERA_IDX(ATTUALE())

      //GOSUB CtrlPassacavi_TrovaTopCop_368
      //GOSUB CtrlPassacavi_AggiornaScassi_368

      AggiornaScassi_Passacavi_368( ATTUALE() , STR(idx_cop) , 2 )

      GOSUB CtrlPassacavi_Posizione_368

      if( VAR_VAL(ATTUALE(),"OK_POSIZIONE") == 1 | FORZA_USCITA == 1 )
      {
         VAR_VALUE_SET(-1,var_globale_ctrl_dialog_open,0)
         EXITSUB()
      }

      $wk_DLG_da_collisioni = 1

      //richiamo ricorsivamente
      GOSUB CtrlFaretto_SpostaDlg_368
   }

   //GESTIONE SIDE
   PROCEDURA Set_Gest_SIDE_368
   {
      if( VAR_EXIST(ATTUALE(),"VAR_Side") == 0 )  { EXITSUB() }

      //Luca 27/09/2021 non deve risultare forzata dall'operatore!!
      if( IS_VarsUser__(ATTUALE(),"GEST_C089") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C089") }

      //if( VAR_VAL(ATTUALE(),"in_pcfto") == 1 )
      //{
      //   DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C089")
      //   GEST_C089 = "__"
      //   TABER_VARSETTATE = VarAdd
      //   EXITSUB()
      //}

      WITH_VAR_LOCAL(ATTUALE(),"wk_cmpside","VAR_Side_cmp",2,1,"1")

      VAR_Side = 0
      if( wk_cmpside > 0 )  { VAR_Side = 1 }

      gest_C089 = "__"
      if( VAR_Side == 1 ) { gest_C089 = "S0000" }

      //non permetto modifica utente, ma si attiva in automatico
      ORD_FILTRO_C089 = gest_C089
      if( IS_VAR_FIXED(ATTUALE(),"GEST_C089") )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C089") }

      GEST_C089 = gest_C089
      VarAdd = "GEST_C089"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA SetGest_ComponenteSide_368
   {
      if( VAR_VAL(ATTUALE(),"FLAG_Moduli_368") == 0 )  { EXITSUB() }

      //Blocco cambio finitura
      idx_mod = GetTopLevelTipo( ATTUALE(), 1, $ins2_attrezzato + $ins2_vestito + $ins2_riempito)

      wk_cmpside_tmp = 0
      if( IS_IDX(idx_mod) ) { WITH_VAR_LOCAL(idx_mod,"wk_cmpside_tmp","VAR_Side_cmp",2,1,"1") }

      wk_cmpside = 0
      i = 1
      while ( i <= wk_cmpside_tmp )
      {
         if( wk_cmpside_tmp[i] != ATTUALE() )  { AddItem2Array(ATTUALE(),"wk_cmpside",wk_cmpside_tmp[i] ,"") }
         i = i + 1
      }

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- wk_cmpside = ",STR(wk_cmpside)))
      //if( wk_cmpside == 1 )
      //{
      //   COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- wk_cmpside[1] = ",STR(wk_cmpside[1]) , " - ",NOME(wk_cmpside[1])))
      //}

      if( wk_cmpside > 0 & VAR_Side_cmp == 0 )  { BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) ) }

      wk_fin_var    = STRCAT("GEST_",FIN_var)
      wk_fin_val_tp = VAR_VAL_STR(idx_mod,wk_fin_var)

      wk_fin_val   = VAR_VAL_STR(ATTUALE(),wk_fin_var)

      VAR_Side_cmp = 0
      if( IS_VAR_FIXED(ATTUALE(),wk_fin_var) == 1 )
      {
         //se è uguale al top level, tolgo forzatura
         if( wk_fin_val_tp == wk_fin_val )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),wk_fin_val)
            VAR_VALUE_SET(idx_mod,"VAR_Side",0)
         }
         else
         {
            VAR_Side_cmp = 1
            VAR_VALUE_SET(idx_mod,"VAR_Side",1)
         }
      }

      //Luca 02/12/2020
      if(  VAR_VAL(ATTUALE(),"in_pcfto")==1 )
      {
         if( wk_fin_val_tp != wk_fin_val )
         {
            VAR_Side_cmp = 1
            VAR_VALUE_SET(idx_mod,"VAR_Side",1)
         }
      }
   }

   PROCEDURA PCF_Elements_RegoleEredita
   {
      //LZ 02/02/2022: gestione eredità pcf su se stesso
      if( VAR_VAL(ATTUALE(),"pcfto") == 0 )
      {
         if( VAR_VAL(ATTUALE(),"in_pcfto") == 0 )  { EXITSUB() }

         //Blocco modifica finitura dei figli,
         //escludo gli elementi della scocca che sono interessati da side, così da poterlo variare
         if( VAR_EXIST( ATTUALE(), "FIN_var")
           & VAR_VAL( ATTUALE(), "VAR_Side_cmp") == 0 )
         {
            BloccaModificaCatGest_Cmp_368 ( ATTUALE() , STRCAT("GEST_",FIN_var) )
         }

         //LZ 02/12/2021: gestione elementi il cui padre non sempre è configurato gestionalmente
         //               vedi SetAlzataVetro_AIR
         //if( VAR_VAL_STR(ATTUALE(),"VAR_Regola_Elements") == "" )   { EXITSUB() }
         if( VAR_VAL_STR(ATTUALE(),"VAR_Regola_Elements") == "" )
         {
            idx_pdr = PADRE( ATTUALE(), 1)

            //COMANDO2(STRCAT("LOGMSG idx_pdr: ", STR(idx_pdr), " - exist: ", STR(VAR_EXIST( idx_pdr, "NO_GEST")), " - NO_GEST: ", STR(VAR_VAL( idx_pdr, "NO_GEST"))))

            if( VAR_VAL_STR( idx_pdr, "VAR_Regola_Elements") != ""
              & VAR_VAL( idx_pdr, "NO_GEST") == 1 )
            {
               VAR_Regola_Elements = VAR_VAL_STR( idx_pdr, "VAR_Regola_Elements")
            }
            else
            {
               EXITSUB()
            }
         }
      }

      if( VAR_VAL_STR( ATTUALE(), "VAR_Regola_Elements") == "" ) { EXITSUB() }

      //La stringa è così composta:
      // "AC1=[E]PC1|AC2=[V]VAL"
      // dove
      // AC1 e AC2 sono le categorie di attuale
      // [E] eredita [V] valore
      // PC1 categoria da ereditare
      // VAL valore da settare

      STR_SPLIT(VAR_Regola_Elements,"|",1,"VAR_Elements_arr",ATTUALE())

      idx_pcf = PADRE(ATTUALE(),-1)

      i = 1
      while ( i <= VAR_Elements_arr )
      {
         //LZ 20/05/2021: elimino eventuali spazi e rendo maiuscolo
         //wk_regola    = VAR_Elements_arr[i]
         wk_regola    = UPPER(REPLACE(VAR_Elements_arr[i]," ",""))

         wk_uguale    = STR_INDEX_OF(wk_regola,0,"=")
         wk_azione    = STRMID(wk_uguale + 1, 3 ,wk_regola)
         wk_categoria = STRMID(0,wk_uguale,wk_regola)
         //categoria / valore
         wk_cat_val   = STRMID(wk_uguale + 4 ,STRLEN(wk_regola)-STRLEN(wk_categoria)- 3 ,wk_regola)

         wk_nome_var = STRCAT("GEST_",wk_categoria)

         //Luca 18/02/2022
         if( wk_azione == "[E]" )
         {
            wk_eredita_da = PADRE(ATTUALE(),-1)
            TWEB_ScriviVarEredita( ATTUALE(), wk_categoria , wk_eredita_da , wk_cat_val )
         }

         if( IS_VAR_FIXED(ATTUALE(),wk_nome_var) == 0 )
         {
            //Eredito dal preconfigurato
            if( wk_azione == "[E]" )
            {
               wk_val_pcf = VAR_VAL_STR( idx_pcf, STRCAT("GEST_",wk_cat_val))

               //Utile per calcolo pcf senza griglia
               if( $PLIKO==1
                 & wk_val_pcf == "" ) { wk_val_pcf = VAR_VAL_STR( -1, STRCAT("GEST_",wk_cat_val)) }

               //Strutture
               if( wk_categoria == "P101"
                 | wk_categoria == "C032"
                 | wk_categoria == "C036")
               {
                  wk_val_pcf = GetLaccatoCorrispondente(wk_val_pcf)

                  if( wk_val_pcf == "WW001" ) { wk_val_pcf = "GE001" }
                  if( wk_val_pcf == "WW002" ) { wk_val_pcf = "GE002" }
                  if( wk_val_pcf == "WW003" ) { wk_val_pcf = "GE003" }
               }

               //Schiene
               if( wk_categoria == "C048" )
               {
                  if( nome_att == "ModuloGlass_368"
                    | nome_att == "ModuloMadiaGlass_368" )
                  {
                     if( IS_MATCH(wk_val_pcf,"V*") == 0
                       & IS_MATCH(wk_val_pcf,"X*") == 0 ) { wk_val_pcf = GetVetroLucCorrispondente(wk_val_pcf) }
                  }
                  else
                  {
                     wk_val_pcf = GetLaccatoCorrispondente(wk_val_pcf)
                  }
               }

               //Luca 29/09/2021 aggiungo controllo forzatura
               if( IS_VAR_FIXED( ATTUALE(), wk_nome_var) == 0 )
               {
                  //LZ 02/02/2022: se sono pcf, eseguo solo se nella regola corretta di ereditarietà
                  //EVAL(STRCAT(wk_nome_var,"=",APICI(),wk_val_pcf,APICI()))
                  if( idx_pcf != ATTUALE()
                    | ( idx_pcf == ATTUALE()
                      & VAR_VAL_STR( ATTUALE(), "TABER_REGOLA") == STRCAT( wk_categoria, "_PRE")))
                  {
                     EVAL(STRCAT(wk_nome_var,"=",APICI(),wk_val_pcf,APICI()))
                  }
               }
            }

            //valore definito
            if( wk_azione == "[V]" )
            {
               //Luca 29/09/2021 aggiungo controllo forzatura
               if( IS_VAR_FIXED(ATTUALE(),wk_nome_var) == 0 )
               {
                  EVAL(STRCAT(wk_nome_var,"=",APICI(),wk_cat_val,APICI()))
               }
            }

            //wk_nome_var = UPPER(wk_nome_var)
            VarAdd = wk_nome_var
            GOSUB Add_TABER_VARSETTATE
         }

         i = i + 1
      }
   }

   PROCEDURA GetRegola_Componenti_Elements
   {
      if( $ATTIVA_DLL == 0  )  { EXITSUB() }

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

      if( ACTION() == 2 )  { EXITSUB() }

      idx_topl = GetTopLevel(ATTUALE())

      path_attuale = PATH_NAME(ATTUALE(),0)
      path_nome_tl = PATH_NAME(idx_topl,0)

      path_salva = STRMID(STRLEN(path_nome_tl)+1,STRLEN(path_attuale),path_attuale)

      LISTA_VARIABILI(idx_topl,0,"nvar_elements_cmp","VAR_Regola_Elements_PATH_*")

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- nvar_elements_cmp = ",STR(nvar_elements_cmp)))

      indice_var = 0

      i = 1
      while ( i <= nvar_elements_cmp )
      {
         if( VAR_VAL_STR(idx_topl,nvar_elements_cmp[i]) == path_salva )
         {
            indice_var = i
            i = nvar_elements_cmp
         }

         i = i + 1
      }

      if( indice_var == 0 ) { EXITSUB() }

      nome_var_regola = STRCAT("VAR_Regola_Elements_REG_",STR(indice_var))

      //COMANDO2(STRCAT("LOGMSG ATTUALE: ",STR(ATTUALE()), " | DEBUG ---- VAR_Regola_Elements = ",VAR_Regola_Elements))

      VAR_Regola_Elements = VAR_VAL_STR(idx_topl,nome_var_regola)

      VAR_SET_MODIFICATA(ATTUALE(),"VAR_Regola_Elements","")
   }

   PROCEDURA OnPcfStore_Componenti_Elements
   {
      if( VAR_VAL_STR(ATTUALE(),"VAR_Regola_Elements") == "" ) { EXITSUB() }

      idx_topl = GetTopLevel(ATTUALE())
      LISTA_VARIABILI(idx_topl,0,"nvar_elements_cmp","VAR_Regola_Elements_PATH_*")

      nome_var_path   = STRCAT("VAR_Regola_Elements_PATH_",STR(nvar_elements_cmp + 1))
      nome_var_regola = STRCAT("VAR_Regola_Elements_REG_",STR(nvar_elements_cmp + 1))

      path_attuale = PATH_NAME(ATTUALE(),0)
      path_nome_tl = PATH_NAME(idx_topl,1)

      path_salva = STRMID(STRLEN(path_nome_tl)+1,STRLEN(path_attuale),path_attuale)

      VAR_CREATE_STR(idx_topl,nome_var_path,path_salva,0,"")
      VAR_CREATE_STR(idx_topl,nome_var_regola,VAR_Regola_Elements,0,"")

      VAR_SET_MODIFICATA(idx_topl,nome_var_path,"")
      VAR_SET_MODIFICATA(idx_topl,nome_var_regola,"")
   }

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

      Schiena1_X    = 0       Schiena2_X    = 0       Schiena3_X    = 0
      Schiena1_Y    = 0       Schiena2_Y    = 0       Schiena3_Y    = 0
      Schiena1_PosX = 0       Schiena2_PosX = 0       Schiena3_PosX = 0
      Schiena1_PosY = 0       Schiena2_PosY = 0       Schiena3_PosY = 0

      Schiena4_X    = 0       Schiena5_X    = 0       Schiena6_X    = 0
      Schiena4_Y    = 0       Schiena5_Y    = 0       Schiena6_Y    = 0
      Schiena4_PosX = 0       Schiena5_PosX = 0       Schiena6_PosX = 0
      Schiena4_PosY = 0       Schiena5_PosY = 0       Schiena6_PosY = 0

      NrSchiene = 1

      BOX_MODE(0)

      NEAR_GLOBALE2("wk_rip",idx_cnear,1,"RipianoVetroLiv_368")
      //NEAR_GLOBALE2("wk_div",idx_cnear,1,"DivisiorioVetLiv_368")
      NEAR_GLOBALE2("wk_div",idx_cnear,1,"DivisiorioVe*Liv_368")

      if( wk_rip == 0 & wk_div == 0 )  { EXITSUB() }

      ang_att = ANG_TOT_NOR(ATTUALE())

      if( wk_div > 0 )
      {
         SORT_POINT(base_0,"wk_div","base_0")

         SET_#(wk_div[1])

         Schiena1_X    = DistanzaFraPunti(base_0,#base_0,ang_att) - 2*AriaLato
         Schiena1_Y    = Yr
         Schiena1_PosX = AriaLato
         Schiena1_PosY = AriaLato

         i = 1
         while ( i <= wk_div )
         {
            SET_#(wk_div[i])

            wk_Y    = Yr
            wk_PosX = DistanzaFraPunti(base_0,#base_3,ang_att) + AriaLato
            wk_PosY = AriaLato

            if( i == wk_div )
            {
               wk_X = DistanzaFraPunti(base_3,#base_3,ang_att) - 2*AriaLato
            }
            else
            {
               wk_b3 = #base_3
               SET_#( wk_div[i+1] )
               wk_X = DistanzaFraPunti(wk_b3,#base_0,ang_att) - 2*AriaLato
            }

            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_X"),wk_X )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_Y"),wk_Y )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_PosX"),wk_PosX )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_PosY"),wk_PosY )

            i = i + 1

            NrSchiene = NrSchiene + 1
         }

         EXITSUB()
      }

      if( wk_rip > 0 )
      {
         SORT_POINT(base_0,"wk_rip","base_0")

         SET_#(wk_rip[1])

         Schiena1_X    = Xr
         Schiena1_Y    = #base_0.y - base_0.y - 2*AriaLato
         Schiena1_PosX = AriaLato
         Schiena1_PosY = AriaLato

         i = 1
         while ( i <= wk_rip )
         {
            SET_#(wk_rip[i])

            wk_X    = Xr
            wk_PosX = AriaLato
            wk_PosY = #alto_0.y - base_0.y + AriaLato

            if( i == wk_rip )
            {
               wk_Y = alto_0.y - #alto_0.y - 2*AriaLato
            }
            else
            {
               wk_a0 = #alto_0.y
               SET_#( wk_rip[i+1] )
               wk_Y = #base_0.y - wk_a0 - 2*AriaLato
            }

            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_X"),wk_X )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_Y"),wk_Y )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_PosX"),wk_PosX )
            VAR_VALUE_SET(ATTUALE(),STRCAT("Schiena",STR(i+1),"_PosY"),wk_PosY )

            i = i + 1

            NrSchiene = NrSchiene + 1
         }

         EXITSUB()
      }
   }

   PROCEDURA PosaSchienaSingolaVano_368
   {
      //@base_0.x = base_0.x + AriaLato
      //@base_0.y = base_0.y + AriaLato
      //@base_0.z = base_0.z + AriaRetro
      //@X = Xr
      //@Y = Yr
      //
      //@escluso = 0
      //if( nrsch > 1 ) { @escluso = 1 }

      @escluso = 1
      if( NrSchiene == 1 ) { EXITSUB() }

      @base_0.z = base_0.z + AriaRetro

      var_x  = VAR_VAL(idx_att,STRCAT("Schiena",STR(nrsch),"_X"))
      var_y  = VAR_VAL(idx_att,STRCAT("Schiena",STR(nrsch),"_Y"))
      var_px = VAR_VAL(idx_att,STRCAT("Schiena",STR(nrsch),"_PosX"))
      var_py = VAR_VAL(idx_att,STRCAT("Schiena",STR(nrsch),"_PosY"))

      if( var_x > 0 ) { @escluso = 0 }

      @base_0.x = base_0.x + var_px
      @base_0.y = base_0.y + var_py
      @X = var_x
      @Y = var_y
   }

   PROCEDURA ConfigAppendiabiti_368
   {
      RiePan_X = 15
      RiePan_Y = 15

      Spe_Pan  = 19

      RieLam_X = 1.5
      RieLam_Y = 1.5

      Spe_Lam  = 2

      Lar_App = 70
      Alt_App = 70
      Rag_App = 5

      Mag_Foro_App = 15
      Rag_Foro_App = 15

      Nr_App  = 1

      //dimensione e posizione appendiabiti
      App1_PosX = 0  App2_PosX = 0  App3_PosX = 0
      App1_PosY = 0  App2_PosY = 0  App3_PosY = 0

      //dimensione e posiziona scasso
      Scs_Tra_X = 0  Scs_Tra_PosX = 0
      Scs_Tra_Y = 0  Scs_Tra_PosY = 0

      Configurazione = ""

      if( ACTION()==0 ) { X_cmp = X  Y_cmp = Y  Z_cmp = Z }

      if( ACTION()<0 ) { EXITSUB() }

      Configurazione = STRCAT(STR(X_cmp),"x",STR(Y_cmp))

      //Posizione Appendiabiti
      if( Configurazione == "368x184"
        | Configurazione == "368x368"  )
      {
         App1_PosX = X/2 - Lar_App/2
         App1_PosY = Y/2 - Alt_App/2

         Scs_Tra_X = 0  Scs_Tra_PosX = 0
         Scs_Tra_Y = 0  Scs_Tra_PosY = 0
      }

      if( Configurazione == "552x184"
        | Configurazione == "552x368" )
      {
         App1_PosX = 147.5 + RieLam_X
         App1_PosY = Y/2 - Alt_App/2

         App2_PosX = App1_PosX + Lar_App + 114
         App2_PosY = Y/2 - Alt_App/2
      }

      if( Configurazione == "736x184"
        | Configurazione == "736x368"  )
      {
         App1_PosX = 147.5 + RieLam_X
         App1_PosY = Y/2 - Alt_App/2

         App2_PosX = App1_PosX + Lar_App + 114
         App2_PosY = Y/2 - Alt_App/2

         App3_PosX = App2_PosX + Lar_App + 114
         App3_PosY = Y/2 - Alt_App/2
      }

      //posizione scasso trasformatore
      if( Configurazione == "368x184" )
      {
         //MANCANO QUOTE SU DISEGNI
         Scs_Tra_X = Lar_App + 80
         Scs_Tra_Y = Alt_App + 30
         Scs_Tra_PosX = App1_PosX - 40
         Scs_Tra_PosY = App1_PosY - 15
      }

      if( Configurazione == "552x184" )
      {
         Scs_Tra_X = 320
         Scs_Tra_Y = 116
         Scs_Tra_PosX = X/2 - Scs_Tra_X/2
         Scs_Tra_PosY = 27 + RiePan_Y
      }

      if( Configurazione == "736x184" )
      {
         Scs_Tra_X = 468
         Scs_Tra_Y = 116
         Scs_Tra_PosX = X/2 - Scs_Tra_X/2
         Scs_Tra_PosY = 27 + RiePan_Y
      }

      if( Configurazione == "368x368"
        | Configurazione == "552x368"
        | Configurazione == "736x368" )
      {
         Scs_Tra_X = 300
         Scs_Tra_Y = 80
         Scs_Tra_PosX = X/2 - Scs_Tra_X/2
         Scs_Tra_PosY = 30 + RiePan_Y
      }

      //Luca 07/04/2022 mantis 26975: Modifica pannello illuminazione 368
      if( Configurazione == "552x368"
        | Configurazione == "736x368" )
      {
         Scs_Tra_X = 370
         Scs_Tra_PosX = X/2 - Scs_Tra_X/2
      }
   }

   //Luca 21/12/2020
   PROCEDURA PP_PosizionaPushPull_368
   {
      //if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder==1 )  { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 )  { EXITSUB() }

      //Luca 18/06/2021
      //nuove regole push, eliminato push con basetta
      //mantis 025442: 368: revisione push
      PP_Rev = 1

      //Luca 26/01/2022
      //mantis 26600: 368 - Modifica posizione push pull
      PP_Rev = 2

      PP_Tipologia = 0
      if( PP_Rev >= 1 )  { PP_Tipologia = 1 }

      PP_Tipologia = 1

      PP_Agganciato = ""

      PP_PushPull1  = 0
      PP_PushPull2  = 0

      if( PP_PushPull == 0 ) { EXITSUB() }

      PP_OffsetX1  = 0
      PP_OffsetX2  = 0
      PP_OffsetY   = 0
      PP_OffsetZ = -1*$M368_Aria_Ant_Z_PP

      PP_CASO   = ""

      idx_topl = GetTopLevelTipo( ATTUALE(), 1, $ins2_attrezzato + $ins2_attrezzato2)
      if( IS_IDX(idx_topl) == 0 ) { idx_topl = GetTopLevel(ATTUALE()) }

      SET_#(idx_topl)
      x_mod    = #X
      y_mod    = #Y

      if( VAR_VAL_STR(ATTUALE(),"Apertura") == "RB" )
      {
         PP_PushPull1 = 1
         PP_Tipologia  = 1
         PP_DimX = 12
         PP_DimY = 12

         PP_Agganciato = "COP"

         PP_OffsetX1 = X/2 - PP_DimX/2

         PP_OffsetY = #alto_0.y - $M368_Spe_Cop/2
         //if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38/2  }
         PP_OffsetY = PP_OffsetY - base_0.y - PP_DimY/2

         if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY - 2.5 }

         PP_CASO = "RB-1.0"

         if( x_mod > 1104 )
         {
            PP_CASO = "RB-1.1"
            PP_PushPull2 = 1
            PP_Passo = 368
            if( x_mod > 1472 )  { PP_Passo = 736 }

            PP_OffsetX1 = X/2 - PP_Passo/2 - PP_DimX/2
            PP_OffsetX2 = X/2 + PP_Passo/2 - PP_DimX/2
         }

         EXITSUB()
      }

      if( VAR_VAL_STR(ATTUALE(),"Apertura") == "VS" )
      {
         PP_PushPull1 = 1
         //Luca 18/06/2021 revisione
         PP_Tipologia = 0
         if( PP_Rev >= 1 )  { PP_Tipologia = 1 }

         PP_DimX = 12
         PP_DimY = 14.5

         PP_Agganciato = "FND"

         PP_OffsetX1 = X - 38.5 - PP_DimX/2
         //if( x_mod > 920 ) { PP_OffsetX1 = X/2 - PP_DimX/2 }
         pp_centrato = 0
         if( x_mod > 736 ) { pp_centrato = 1 }
         if( y_mod > 184 & x_mod > 368  ) { pp_centrato = 1 }

         if( pp_centrato ) { PP_OffsetX1 = X/2 - PP_DimX/2 }

         //Luca 18/06/2021
         PP_OffsetY = #base_0.y + $M368_Spe_Fnd
         PP_OffsetY = PP_OffsetY - base_0.y
         if( PP_Rev >= 1 )
         {
            PP_OffsetY = #base_0.y + $M368_Spe_Fnd/2
            PP_OffsetY = PP_OffsetY + $M368_Aria_Ant_Y - base_0.y - PP_DimY/2 - 0.25
         }

         if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY + 2.5 }

         if( VAR_VAL(idx_topl,"ConPiedini") ) { PP_OffsetY = PP_OffsetY + $M368_Alt_Pie }

         PP_CASO = "VS-1.0"

         if( x_mod > 1104
           & VAR_VAL(idx_topl,"VAR_DivVerticale") > 0 )
         {
            PP_CASO = "VS-1.1"

            //Luca 15/01/2021
            //Vasistas con L > 1104:  i push passano da 2 a 1, e si posiziona a 25mm a dx del divisorio
            //PP_PushPull2 = 1
            //PP_Passo = 368
            //if( x_mod > 1472 )  { PP_Passo = 736 }
            //
            //PP_OffsetX1 = X/2 - PP_Passo/2 - PP_DimX/2
            //PP_OffsetX2 = X/2 + PP_Passo/2 - PP_DimX/2

            PP_OffsetX1 = VAR_VAL(idx_topl,"PosDivVert_X") + VAR_VAL(idx_topl,"DivVert_X") + 25 - $M368_Aria_Ant_X - PP_DimX/2
         }

         EXITSUB()
      }

      //anta del modulo tamponamento
      if( VAR_VAL_STR(ATTUALE(),"Apertura") == "FX" ) { EXITSUB() }

      PP_CASO = "BA-1.0"

      //se modulo < 1080
      PP_PushPull1 = 1

      PP_DimX = 14.5
      PP_DimY = 12

      PP_Agganciato = "FIADX"
      //Luca 18/06/2021
      PP_OffsetX1 = X - 17.5 - PP_DimX
      if( PP_Rev >= 1 )  { PP_OffsetX1 = X - 6.75 - PP_DimX/2 }

      //Luca 26/01/2022
      if( PP_Rev >= 2 )  { PP_OffsetX1 = PP_OffsetX1 - 2.5  }

      if( Verso > 0 )
      {
         PP_CASO = "BA-1.1"

         //Luca 18/06/2021
         PP_OffsetX1 = 17.5
         if( PP_Rev >= 1 )  { PP_OffsetX1 = $M368_Spe_Fia/2 - PP_DimX/2 - 0.25  }

         //Luca 26/01/2022
         if( PP_Rev >= 2 )  { PP_OffsetX1 = PP_OffsetX1 + 2.5  }

         PP_Agganciato = "FIASX"
      }

      PP_OffsetY = Y - 52.5 - PP_DimY/2
      //PP_OffsetY = Y - 52.5 - PP_DimY/2

      if( AntaInCoppia )
      {
         PP_CASO = "BA-2.0"

         PP_DimY = 14.5
         PP_DimX = 12

         PP_Agganciato = "COP"

         PP_OffsetY = #alto_0.y - $M368_Spe_Cop
         if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38  }
         PP_OffsetY = PP_OffsetY - base_0.y - PP_DimY

         if( PP_Rev >= 1 )
         {
            PP_OffsetY = #alto_0.y - $M368_Spe_Cop/2
            //LZ 29/07/2021: push sempre a 9.5mm dal filo superiore, anche con coperchio da 38mm
            //if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38/2 }
            PP_OffsetY = PP_OffsetY - base_0.y - PP_DimY/2
         }

         //Luca 26/01/2022
         if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY + 2.5  }


         PP_OffsetX1 = X - 30.5 - PP_DimX/2
         if( Verso > 0 ) { PP_OffsetX1 = 30.5 - PP_DimX/2 }
      }

      if( #alto_0.y > 1080 & AntaInCoppia == 0 )
      {
         PP_CASO = "BA-3.0"

         PP_OffsetY = 1080 - base_0.y - PP_DimY/2
      }

      //PER CONTENITORI SOSPESI
      if( VAR_VAL(ATTUALE(),"ConPiedini") == 0 )
      {
         PP_CASO = "BA-4.0"

         if( #base_0.y > 1080 )
         {
            PP_CASO = "BA-4.1"
            //un vano con anta battente singola non deve mai avere push sul fondo,
            //ma sempre sul fianco anche quando posizionato sopra i 1080mm di altezza

            //PP_Agganciato = "FND"
            //
            //PP_OffsetY = #base_0.y + $M368_Spe_Fnd
            //PP_OffsetY = PP_OffsetY - base_0.y

            PP_Agganciato = "FIADX"
            PP_OffsetX1 = X - 17.5 - PP_DimX
            if( PP_Rev >= 1 )  { PP_OffsetX1 = X - 6.75 - PP_DimX/2 }

            //Luca 26/01/2022
            if( PP_Rev >= 2 )  { PP_OffsetX1 = PP_OffsetX1 - 2.5  }

            if( Verso > 0 )
            {
               PP_OffsetX1 = 17.5
               if( PP_Rev >= 1 )  { PP_OffsetX1 = $M368_Spe_Fia/2 - PP_DimX/2 - 0.25  }

               //Luca 26/01/2022
               if( PP_Rev >= 2 )  { PP_OffsetX1 = PP_OffsetX1 + 2.5  }

               PP_Agganciato = "FIASX"
            }

            PP_OffsetY = 52.5 + PP_DimY/2
         }

         if( AntaInCoppia )
         {
            PP_CASO = "BA-4.2"

            //se a cavallo della linea
            if( #base_0.y < 1080 & #alto_0.y > 1080 )
            {
               //SU FONDO
               if( 1080 - #base_0.y < #alto_0.y - 1080  )
               {
                  PP_CASO = "BA-4.2.1"

                  PP_Agganciato = "FND"
                  PP_OffsetY = #base_0.y + $M368_Spe_Fnd
                  PP_OffsetY = PP_OffsetY - base_0.y

                  if( PP_Rev >= 1 )
                  {
                     PP_OffsetY = #base_0.y + $M368_Spe_Fnd/2
                     PP_OffsetY = PP_OffsetY + $M368_Aria_Ant_Y - base_0.y - PP_DimY/2 - 0.25
                  }

                  //Luca 26/01/2022
                  if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY + 2.5  }
               }
               //SU COPERCHIO
               else
               {
                  PP_CASO = "BA-4.2.3"

                  PP_Agganciato = "COP"
                  PP_OffsetY = #alto_0.y - $M368_Spe_Cop
                  if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38  }
                  PP_OffsetY = PP_OffsetY - base_0.y - PP_DimY

                  if( PP_Rev >= 1 )
                  {
                     PP_OffsetY = #alto_0.y - $M368_Spe_Cop/2
                     //LZ 29/07/2021: push sempre a 9.5mm dal filo superiore, anche con coperchio da 38mm
                     //if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38/2 }
                     PP_OffsetY = PP_OffsetY + $M368_Aria_Ant_Y  - base_0.y - PP_DimY/2 - 0.25
                  }

                  //Luca 26/01/2022
                  if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY - 2.5  }

               }
            }
            //FONDO
            if( #base_0.y > 1080 )
            {

               PP_OffsetX1 = X - 30.5 - PP_DimX/2
               if( Verso > 0 ) { PP_OffsetX1 = 30.5 - PP_DimX/2 }

               PP_CASO = "BA-4.3"

               PP_Agganciato = "FND"
               PP_OffsetY = #base_0.y + $M368_Spe_Fnd
               PP_OffsetY = PP_OffsetY - base_0.y

               if( PP_Rev >= 1 )
               {
                  PP_OffsetY = #base_0.y + $M368_Spe_Fnd/2
                  PP_OffsetY = PP_OffsetY + $M368_Aria_Ant_Y - base_0.y - PP_DimY/2 - 0.25
               }

               //Luca 26/01/2022
               if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY + 2.5  }
            }
            //COPERCHIOFONDO
            if( #alto_0.y < 1080 )
            {
               PP_CASO = "BA-4.4"

               PP_Agganciato = "COP"

               PP_OffsetY = #alto_0.y - $M368_Spe_Cop
               if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38  }
               PP_OffsetY = PP_OffsetY - base_0.y - PP_DimY

               if( PP_Rev >= 1 )
               {
                  PP_OffsetY = #alto_0.y - $M368_Spe_Cop/2
                  //LZ 29/07/2021: push sempre a 9.5mm dal filo superiore, anche con coperchio da 38mm
                  //if( VAR_VAL(idx_topl,"FLAG_CopSp38")==1 ) { PP_OffsetY = #alto_0.y - $M368_Spe_Cop38/2 }
                  PP_OffsetY = PP_OffsetY + $M368_Aria_Ant_Y- base_0.y - PP_DimY/2 - 0.25
               }

               //Luca 26/01/2022
               if( PP_Rev >= 2 )  { PP_OffsetY = PP_OffsetY - 2.5  }
            }
         }
      }

      //devo verificare che non sia nelle aree non possibili (coperchio/fondo/ripiano)
      //solo nel caso di posizionamento su fianco/divisorio
      PP_CASO2 = ""
      if( PP_Agganciato == "FIASX" | PP_Agganciato == "FIADX" )
      {
         COMPONENTI2("wk_cop",idx_topl,"Cop_368")
         COMPONENTI2("wk_fnd",idx_topl,"Fondo_368")
         COMPONENTI2("wk_rip",idx_topl,"RipianoVetroLiv_368")
         //il coperchio ha un zona non possibile che va da alto_0.y a alto_0.y - 54
         //il fondo ha un zona non possibile che va da base_0.y a base_0.y + 54
         //il ripiano vetro ha un zona non possibile che va da base_0.y - 26.5 a alto_0.y + 16.5

         PP_DimX = 14.5
         PP_DimY = 12

         //punto assoluto di inserimento PushPull
         wk_PP0     = base_0.y + PP_OffsetY
         wk_PP0_b0  = wk_PP0
         wk_PP0_a0  = wk_PP0_b0 + PP_DimY
         wk_PP0_cx  = wk_PP0_b0 + PP_DimY/2

         wk_PP0_new = wk_PP0

         i = 1
         while ( i <= wk_cop )
         {
            wk_a0_cop = VAR_VAL(wk_cop[i],"alto_0.y")
            wk_b0_cop = wk_a0_cop - 54

            //if( wk_PP0 > wk_b0_cop & wk_PP0 < wk_a0_cop )
            if( wk_PP0_a0 >= wk_b0_cop & wk_PP0_b0 <= wk_a0_cop )
            {
               PP_CASO2 = STRCAT("COP-",STR(wk_cop[i]))
               wk_PP0_new = wk_b0_cop
            }

            i = i + 1
         }

         i = 1
         while ( i <= wk_fnd )
         {
            wk_b0_fnd = VAR_VAL(wk_fnd[i],"base_0.y")
            wk_a0_fnd = wk_b0_fnd + 54

            //if( wk_PP0 > wk_b0_fnd & wk_PP0 < wk_a0_fnd )
            if( wk_PP0_a0 >= wk_b0_fnd & wk_PP0_b0 <= wk_a0_fnd )
            {
               PP_CASO2 = STRCAT("FND-",STR(wk_fnd[i]))
               wk_PP0_new = wk_a0_fnd
            }

            i = i + 1
         }

         i = 1
         while ( i <= wk_rip )
         {
            wk_b0_rip = VAR_VAL(wk_rip[i],"base_0.y") - 26.5
            wk_a0_rip = VAR_VAL(wk_rip[i],"alto_0.y") + 16.5

            //if( wk_PP0 > wk_b0_rip & wk_PP0 < wk_a0_rip )
            if( wk_PP0_a0 >= wk_b0_rip & wk_PP0_b0 <= wk_a0_rip )
            {
               PP_CASO2 = STRCAT("RIP-",STR(wk_rip[i]))
               //spostamento minore
               if( wk_PP0_cx - wk_b0_rip <= wk_a0_rip - wk_PP0_cx )
               {
                  wk_PP0_new = wk_b0_rip
               }
               else
               {
                  wk_PP0_new = wk_a0_rip
               }
            }

            i = i + 1
         }

         if( wk_PP0_new != wk_PP0 )
         {
            PP_CASO2 = STRCAT(PP_CASO2,"-1.0")

            PP_OffsetY = wk_PP0_new - base_0.y - PP_DimY/2
         }
      }
   }

   //Luca 21/12/2020
   //ciclo tutti i modulo 368 e verifico dove è necessario (e non removibile) il pushpull. Aggiungo in automatico se non presente
   PROCEDURA Ctrl_SettaPushPull_368
   {
      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
         //con 2 si attivano anche i display
         //debug = 2
      #endif

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 START")) }

      WITH_ALIAS("$wk_mod","CheckPushPull")

      //Luca 29/09/2021
      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         if( VAR_VAL($wk_mod[$wk_i],"NO_PushPull") == 1  )
         {
            DEL_ARRAY_ITEM(-1,"wk_mod",$wk_i)
            $wk_i = $wk_i - 1
         }

         $wk_i = $wk_i + 1
      }


      //x debug
      if( VAR_EXIST(-1,"wk_SettaPP_IDX_REF") )
      {
         if( IS_IDX($wk_SettaPP_IDX_REF) )
         {
            $wk_mod = 1
            $wk_mod[1] = $wk_SettaPP_IDX_REF
         }
      }

      if( $wk_mod == 0 )
      {
         if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 END --> No moduli da controllare")) }
         EXITSUB()
      }

      //per identificare gli elementi in cui è stato attivato/disattivato il PUSH_PULL in automatico
      $wk_mod_pp_attivato    = 0
      $wk_mod_pp_disattivato = 0
      //per identificare gli elementi dove, in seguito ad una forzatura di un operatore, non rispettano le regole di PUSH_PULL
      $wk_mod_pp_man  = 0

      $wk_mod_udpate = 0
      //PRIMA DI TUTTO MI SALVO IL VALORE DI PP_AttivaAuto NEI SINGOLI MODULI, COSI DA RICALCOLARI SOLO SE EFFETTIVAMENTE DIVERSI
      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_mod = $wk_mod[$wk_i]
         $wk_PP_AttivaAuto    = VAR_VAL($wk_idx_mod,"PP_AttivaAuto")
         VAR_VALUE_SET($wk_idx_mod,STRCAT("PP_AttivaAuto_SAVE"),$wk_PP_AttivaAuto)
         $wk_i = $wk_i + 1
      }

      //1° GIRO
      //verifico tutti quei moduli in cui è necessario inserire il pushpull
      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1")) }

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_mod = $wk_mod[$wk_i]
         $wk_PP_PushPull      = VAR_VAL($wk_idx_mod,"PP_PushPull")
         $wk_PP_AttivaAuto    = VAR_VAL($wk_idx_mod,"PP_AttivaAuto")
         $wk_PP_PushPull_FIX  = IS_VAR_FIXED($wk_idx_mod,"GEST_C017")

         $wk_attiva_PP = $wk_PP_AttivaAuto

         if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " $wk_PP_PushPull=",STR($wk_PP_PushPull) , " $wk_PP_AttivaAuto=",STR($wk_PP_AttivaAuto) )) }

         //CONTROLLO SOLO SE NON HA IL PUSH GIA' FORZATO, SE SETTATO IN AUTOMATICO PUO' ESSERE TOLTO
         if( $wk_PP_PushPull_FIX == 0 | $wk_PP_PushPull == 0 )
         {
            $wk_attiva_PP = 0
            SET_#($wk_idx_mod)

            $wk_B0 = #base_0    $wk_B0.y = 0
            $wk_B3 = #base_3    $wk_B3.y = 0

            //rientro di 3 mm per parte
            $wk_B0.x = $wk_B0.x + COSENO(ANG_TOT_NOR($wk_idx_mod))*3
            $wk_B0.z = $wk_B0.z +   SENO(ANG_TOT_NOR($wk_idx_mod))*3

            $wk_B3.x = $wk_B3.x - COSENO(ANG_TOT_NOR($wk_idx_mod))*3
            $wk_B3.z = $wk_B3.z +   SENO(ANG_TOT_NOR($wk_idx_mod))*3

            //CONTROLLO IDX
            //1.  TOP SPORGENTE CHE COPRE PIU' di X/2 (NO SU MODULO VASISTAS)
            //2.  CASSETTIERA O CESTONE CON X >= 920
            //3.  CONTENITORE CON TUTTI E 4 i LATI OSTRUITI (anche PARETE)
            //3.1 ATTENZIONE A CASSETTI / CESTONI (se c'è anche un solo cassetto bloccato a destra e sx tutta la composizione deve prendere il push)

            //1. VERIFICO PRESENZA DEL TOP
            if( VAR_EXIST($wk_idx_mod,"idx_top") & VAR_VAL($wk_idx_mod,"FLAG_Vasistas") == 0 )
            {
               $wk_idx_top = #idx_top
               if( IS_IDX(#idx_top) )
               {
                  SET_#(#idx_top)
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " TEST TOP [",STR(#idx_att),"] Zt=",STR(#Zt),"  Zn=",STR(VAR_VAL($wk_idx_mod,"Zn")) )) }

                  if( #Zt >= VAR_VAL($wk_idx_mod,"Zn") )
                  {
                     //Verifico ingombro larghezza
                     $wk_B0_TOP = #pnt_top_b0    $wk_B0_TOP.y = 0
                     $wk_B3_TOP = #pnt_top_b3    $wk_B3_TOP.y = 0

                     $wk_PX_1 = INTERFERISCI($wk_B0,ANG_TOT_NOR($wk_idx_mod)+90,$wk_B0_TOP,$wk_B3_TOP)
                     $wk_PX_2 = INTERFERISCI($wk_B3,ANG_TOT_NOR($wk_idx_mod)+90,$wk_B0_TOP,$wk_B3_TOP)

                     if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " TEST TOP [",STR(#idx_att),"] $wk_PX_1=[",STR($wk_PX_1.x),",",STR($wk_PX_1.y),",",STR($wk_PX_1.z),"] $wk_PX_2=[",STR($wk_PX_2.x),",",STR($wk_PX_2.y),",",STR($wk_PX_2.z),"]")) }

                     $wk_DIST = 9999

                     //se base_0 è fuori dal top, misuro da base_0 del top a base_3 del modulo
                     if( $wk_PX_1.x == $ERR_INTER & $wk_PX_1.y == $ERR_INTER & $wk_PX_1.z == $ERR_INTER
                       & $wk_PX_2.x != $ERR_INTER & $wk_PX_2.y != $ERR_INTER & $wk_PX_2.z != $ERR_INTER )
                     {
                        $wk_DIST = DISTANZA($wk_B0_TOP,$wk_B3)
                        if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " TEST TOP [",STR(#idx_att),"] PX1 FUORI, MISURO B0 TOP e B3 MODULO $wk_DIST=",STR($wk_DIST))) }
                     }

                     //se base_3 è fuori dal top, misuro da base_3 del top a base_0 del modulo
                     if( $wk_PX_1.x != $ERR_INTER & $wk_PX_1.y != $ERR_INTER & $wk_PX_1.z != $ERR_INTER
                       & $wk_PX_2.x == $ERR_INTER & $wk_PX_2.y == $ERR_INTER & $wk_PX_2.z == $ERR_INTER )
                     {
                        $wk_DIST = DISTANZA($wk_B3_TOP,$wk_B0)
                        if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " TEST TOP [",STR(#idx_att),"] PX2 FUORI, MISURO B3 TOP e B0 MODULO $wk_DIST=",STR($wk_DIST))) }
                     }

                     if( $wk_PX_1.x != $ERR_INTER & $wk_PX_1.y != $ERR_INTER & $wk_PX_1.z != $ERR_INTER
                       & $wk_PX_2.x != $ERR_INTER & $wk_PX_2.y != $ERR_INTER & $wk_PX_2.z != $ERR_INTER )
                     {
                        $wk_attiva_PP = 1
                        if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " TEST TOP [",STR(#idx_att),"] PX1 e PX2 DENTRO")) }
                     }

                     if( ( $wk_DIST + 3 ) > VAR_VAL($wk_idx_mod,"X")/2 )
                     {
                        $wk_attiva_PP = 1

                        //Luca 05/03/2021
                        //if( NOME($wk_idx_top) == "TopWildwood_368" ) { AddItem2Array(-1,"wk_mod_udpate",$wk_idx_top ,"") }

                        if( debug == 2 )
                        {
                           HI($wk_idx_mod,1)
                           DISPLAY2("TOP COPRE PER PIU' DI META' IL MODULO")
                           HI($wk_idx_mod,0)
                        }
                     }
                  }
               }
            }

            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " FINE TEST 1")) }

            //2.  CASSETTIERA O CESTONE CON X > 736
            if( VAR_VAL($wk_idx_mod,"FLAG_Cassetto") == 1
              | VAR_VAL($wk_idx_mod,"FLAG_Cestone") == 1 )
            {
               $wk_cas_vani = VAR_VAL($wk_idx_mod, "VAR_ConfigVani")
               if( $wk_cas_vani < 1) { $wk_cas_vani = 1 }

               COMPONENTI2( "$wk_cas", $wk_idx_mod, "Cassetto_368")
               $wk_cas_lvl = $wk_cas/$wk_cas_vani

               $wk_cas_xmax = 0
               $wk_cas_num = 1
               while( $wk_cas_num <= $wk_cas)
               {
                  $wk_cas_x = VAR_VAL( $wk_cas[$wk_cas_num], "X")

                  if( $wk_cas_x > $wk_cas_xmax) { $wk_cas_xmax = $wk_cas_x }

                  $wk_cas_num = $wk_cas_num + 1
               }


               //Per i cassetti di larghezza > 736, il push non è obbligatorio se la cassettiera è formata da un solo cassetto
               if( $wk_cas_lvl > 1
                 & $wk_cas_xmax > 736)
               {
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " CASSETTO/CESTONE > 736")) }
                  $wk_attiva_PP = 1

                  if( debug == 2 )
                  {
                     HI($wk_idx_mod,1)
                     DISPLAY2("MODULO CASSETTO CESTONE")
                     HI($wk_idx_mod,0)
                  }
               }
            }

            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " FINE TEST 2")) }


            //3.  CONTENITORE CON TUTTI E 4 i LATI OSTRUITI (anche PARETE)
            if( $wk_attiva_PP == 0 )
            {
               SET_#($wk_idx_mod)
               $wk_LATO_SX = 0
               $wk_LATO_DX = 0
               $wk_LATO_UP = 0
               $wk_LATO_DW = 0

               $wk_B0 = #base_0  $wk_A0 = #alto_0
               $wk_B3 = #base_3  $wk_A3 = #alto_3

               //3.1 distanza con pareti
               $wk_test = QUERY_WALL($wk_idx_mod,"distance from face S")
               if( $wk_test == 0 ) { $wk_LATO_SX = 1 }

               $wk_test = QUERY_WALL($wk_idx_mod,"distance from face D")
               if( $wk_test == 0 ) { $wk_LATO_DX = 1 }

               if( VAR_VAL($wk_idx_mod,"ConPiedini") == 1 )  { $wk_LATO_DW = 1 }

               if( $wk_LATO_SX == 0 )
               {
                  $wk_dist_sx = CalcolaLatoModuliVicini($wk_idx_mod,"SX")
                  if( $wk_dist_sx >= #Y - 50  ) { $wk_LATO_SX = 1 }
               }
               if( $wk_LATO_DX == 0 )
               {
                  $wk_dist_dx = CalcolaLatoModuliVicini($wk_idx_mod,"DX")
                  if( $wk_dist_dx >= #Y - 50  ) { $wk_LATO_DX = 1 }
               }

               if( $wk_LATO_UP == 0 )
               {
                  $wk_dist_up = CalcolaLatoModuliVicini($wk_idx_mod,"UP")
                  if( $wk_dist_up >= #X - 50  ) { $wk_LATO_UP = 1 }
               }
               if( $wk_LATO_DW == 0 )
               {
                  $wk_dist_dw = CalcolaLatoModuliVicini($wk_idx_mod,"DW")
                  if( $wk_dist_dw >= #X - 50  ) { $wk_LATO_DW = 1 }
               }

               //se tutti e 4 i lati coperti -->  attivo
               if( $wk_LATO_SX + $wk_LATO_DX
                 + $wk_LATO_DW + $wk_LATO_UP == 4 ) { $wk_attiva_PP = 1 }

               //Vasistas:
               //- <= 736: push obbligatorio se sia dx che sx che >1/2 lato sotto coperti
               //- > 736 : push obbligatorio se >1/2 lato sotto coperto
               if( VAR_VAL($wk_idx_mod,"FLAG_Vasistas") == 1 )
               {
                  $wk_dist_dw = CalcolaLatoModuliVicini($wk_idx_mod,"DW")
                  if( VAR_VAL($wk_idx_mod,"X") <= 736 )
                  {
                     if( $wk_LATO_SX == 1 & $wk_LATO_DX == 1 & $wk_dist_dw > VAR_VAL($wk_idx_mod,"X")/2 )  { $wk_attiva_PP = 1 }
                  }
                  else
                  {
                     if( $wk_dist_dw > VAR_VAL($wk_idx_mod,"X")/2 )  { $wk_attiva_PP = 1 }
                  }

                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " CTRL VAS- $wk_dist_dw=",STR($wk_dist_dw) , "    X/2=",STR(VAR_VAL($wk_idx_mod,"X")/2) , " $wk_attiva_PP= ",STR($wk_attiva_PP) )) }
               }

               //Ribalta/ Cestone/cassetto:
               //- <= 736 : push obbligatorio se sia dx che sx che >1/2 lato sopra coperti
               //- > 736 : push obbligatorio se >1/2 lato sopra coperto
               if( VAR_VAL($wk_idx_mod,"FLAG_Ribalta") == 1
                 | VAR_VAL($wk_idx_mod,"FLAG_Cassetto") == 1
                 | VAR_VAL($wk_idx_mod,"FLAG_Cestone") == 1 )
               {
                  $wk_dist_up = CalcolaLatoModuliVicini($wk_idx_mod,"UP")
                  if( VAR_VAL($wk_idx_mod,"X") <= 736 )
                  {
                     if( $wk_LATO_SX == 1 & $wk_LATO_DX == 1 & $wk_dist_up > VAR_VAL($wk_idx_mod,"X")/2 )  { $wk_attiva_PP = 1 }
                  }
                  else
                  {
                     if( $wk_dist_up > VAR_VAL($wk_idx_mod,"X")/2 )  { $wk_attiva_PP = 1 }
                  }
               }

               //Battente:
               //-  push obbligatorio se >1/2 lato contrapposto alle cerniere coperto
               //TODO: non sono mai state considerate le madie multianta, dove ogni anta ha l'apertura coperta e per logica dovrebbe essere sempre attivo il push
               //      In questo caso, inoltre, viene erroneamente valutato il verso anche quando il numero di ante è pari
               if( VAR_VAL($wk_idx_mod,"FLAG_Battente") == 1 )
               {
                  $wk_dist_lato = CalcolaLatoModuliVicini($wk_idx_mod,"SX")
                  if( VAR_VAL($wk_idx_mod,"Verso") < 1 ) { $wk_dist_lato = CalcolaLatoModuliVicini($wk_idx_mod,"DX") }

                  if( $wk_dist_lato > VAR_VAL($wk_idx_mod,"Y")/2 )  { $wk_attiva_PP = 1 }

               }

               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " $wk_LATO_SX=",STR($wk_LATO_SX), " $wk_LATO_DX=",STR($wk_LATO_DX) , " $wk_LATO_UP=",STR($wk_LATO_UP) , " $wk_LATO_DW=",STR($wk_LATO_DW))) }
            }

            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " FINE TEST 3")) }

            //4. CASSETTIERE CON ALMENO UN CASSETTO COMPLETAMENTE COPERTO
            if( $wk_attiva_PP == 0 & VAR_VAL($wk_idx_mod,"FLAG_Cassetto") == 1 )
            {
               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " CASSETTIERE CON ALMENO UN CASSETTO COMPLETAMENTE COPERTO ")) }

               COMPONENTI2("$wk_cass",$wk_idx_mod,"Cassetto_368")
               if( $wk_cass > 1 )
               {
                  $wk_LATO_SX = 0
                  $wk_LATO_DX = 0

                  $wk_dist_sx = CalcolaLatoModuliVicini($wk_idx_mod,"SX")
                  if( $wk_dist_sx >= 184  ) { $wk_LATO_SX = 1 }

                  $wk_dist_dx = CalcolaLatoModuliVicini($wk_idx_mod,"DX")
                  if( $wk_dist_dx >= 184  ) { $wk_LATO_DX = 1 }

                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " CASSETTIERE CON ALMENO UN CASSETTO COMPLETAMENTE COPERTO ")) }


                  if( $wk_LATO_SX == 1 & $wk_LATO_DX == 1 ) { $wk_attiva_PP = 1 }

                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " CONTROLLO CASSETTIRE $wk_LATO_SX=",STR($wk_LATO_SX), " $wk_LATO_DX=",STR($wk_LATO_DX))) }
               }
            }
            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " FINE TEST 4")) }
         }

         //SOLO SE DIVERSO DA QUELLO SETTATO
         if( $wk_attiva_PP != $wk_PP_AttivaAuto )
         {
            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " $wk_PP_AttivaAuto=",STR($wk_PP_AttivaAuto) , " $wk_attiva_PP=",STR($wk_attiva_PP))) }

            //se bloccato gestione auto da utente
            if( VAR_VAL($wk_idx_mod,"PP_Manuale") == 1 )
            {
               AddItem2Array(-1,"wk_mod_pp_man",$wk_idx_mod,"")
            }
            else
            {
               //SETTO SUBITO IL NUOVO VALORE PER AVERLO CORRETTO NEL 2° GIRO
               VAR_VALUE_SET($wk_idx_mod,"PP_AttivaAuto",$wk_attiva_PP)

               if( $wk_attiva_PP == 1 ) { AddItem2Array(-1,"wk_mod_pp_attivato",$wk_idx_mod,"") }
               else                     { AddItem2Array(-1,"wk_mod_pp_disattivato",$wk_idx_mod,"") }

               //SE NON E' FORZATO, DISATTIVO.. altrimenti nel giro sotto mi attiva il push pull a quelli vicini
               if( IS_VAR_FIXED($wk_idx_mod,"GEST_C017") == 0 & $wk_attiva_PP == 0) { VAR_VALUE_SET($wk_idx_mod,"PP_PushPull",0) }

               //AGGIUNGO SU ARRAY PER RICALCOLO FINALE
               $wk_ne = $wk_mod_udpate + 1
               $wk_mod_udpate = $wk_ne
               $wk_mod_udpate[$wk_ne] = $wk_idx_mod
            }
         }

         $wk_i = $wk_i + 1
      }
      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 1  - FINE - $wk_mod_udpate=",STR($wk_mod_udpate))) }

      //2° GIRO
      //controllo moduli vicini tra loro in cui bisogna attivare il push per rispettare le regole di allinemento
      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2")) }

      GOSUB Ctrl_SettaPushPull_CheckVicini_368

      ArrayCopy(-1,"wk_mod","wk_mod_tmp")
      $wk_mod = 0
      while( $wk_mod_tmp > 0)
      {
         AddItem2Array(-1,"wk_mod",$wk_mod_tmp[$wk_mod_tmp],"")
         $wk_mod_tmp = $wk_mod_tmp -1
      }

      GOSUB Ctrl_SettaPushPull_CheckVicini_368

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2  - FINE - $wk_mod_udpate=",STR($wk_mod_udpate))) }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 RICALCOLO_MODULI")) }

      //RICALCOLO FINALE PER CAT.GESTIONALI E GRAFICA
      $wk_i = 1
      while ( $wk_i <= $wk_mod_udpate )
      {
         if( VAR_VAL($wk_mod_udpate[$wk_i],"PP_AttivaAuto") != VAR_VAL($wk_mod_udpate[$wk_i],"PP_AttivaAuto_SAVE") )
         {
            VAR_VALUE_SET($wk_mod_udpate[$wk_i],"flag_CAMBIA_VAR",1)
            COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_mod_udpate[$wk_i]) , " no_agganciati //Ctrl_SettaPushPull_368" ))

            //Luca 05/03/2021 ricalcolo anche il top
            if( VAR_EXIST($wk_mod_udpate[$wk_i],"idx_top") )
            {
               $wk_idx_top = VAR_EXIST($wk_mod_udpate[$wk_i],"idx_top")
               if( IS_IDX($wk_idx_top) )
               {
                  if( NOME($wk_idx_top) == "TopWildwood_368" )
                  {
                     COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_idx_top) , " no_agganciati //Ctrl_SettaPushPull_368" ))
                  }
               }
            }
         }

         ////Luca 05/03/2021
         //if( NOME($wk_mod_udpate[$wk_i]) == "TopWildwood_368" )
         //{
         //   COMANDO(STRCAT("RICALCOLA_UNA ",STR($wk_mod_udpate[$wk_i]) , " no_agganciati //Ctrl_SettaPushPull_368 -  TOP_WW" ))
         //}
         $wk_i = $wk_i + 1
      }

      //Gestisco le info per gestione messaggi sul dlg riassunto

      if( VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         if( $wk_mod_pp_attivato > 0 )
         {
            $wk_msg = MSG(1238)
            $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1
            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), $wk_msg )
            r = ArrayCopy(-1 ,"wk_mod_pp_attivato", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
         }

         if( $wk_mod_pp_disattivato > 0 )
         {
            $wk_msg = MSG(1239)
            $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1
            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), $wk_msg )
            r = ArrayCopy(-1 ,"wk_mod_pp_disattivato", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
         }

         //sarà visibile solo in azienda, ai rivenditori non è possibile bloccare la gestione auto
         if( $wk_mod_pp_man > 0 )
         {
            $wk_msg = "Controllo PUSH PULL: articolo con gestione manuale che non rispetta le regole."
            $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1
            VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
            VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), $wk_msg )
            r = ArrayCopy(-1 ,"wk_mod_pp_man", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
         }

      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 FINE")) }
   }

   PROCEDURA Ctrl_SettaPushPull_CheckVicini_368
   {
      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_mod = $wk_mod[$wk_i]
         $wk_PP_PushPull = VAR_VAL($wk_idx_mod,"PP_PushPull")
         $wk_PP_AttivaAuto = VAR_VAL($wk_idx_mod,"PP_AttivaAuto")

         if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " $wk_PP_PushPull=",STR($wk_PP_PushPull), " $wk_PP_AttivaAuto=",STR($wk_PP_AttivaAuto) )) }

         SET_#($wk_idx_mod)

         $wk_B0 = #base_0.y
         $wk_A0 = #alto_0.y

         $wk_attiva_PP = $wk_PP_AttivaAuto

         //SOLO SE NON HA IL PUSH GIA' ATTIVATO
         if( $wk_PP_PushPull == 0 & $wk_PP_AttivaAuto == 0 )
         {
            $wk_attiva_PP = 0

            //CONTROLLO ELEMENTI VICINI
            //1. CONTENITORI ATTACCATI: LINEARI E SFALSATI (solo con stessa profondità e con push pull attivo)
            BOX_MODE(0)
            NEAR_GLOBALE("$wk_mnear",$wk_idx_mod,1,1,"Mod*")
            $wk_j = 1
            while ( $wk_j <= $wk_mnear )
            {
               if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " | CONTROLLI ELEMENTI VICINI $wk_mnear = ",STR($wk_mnear[$wk_j]) )) }

               if( VAR_VAL($wk_idx_mod,"Z") == VAR_VAL($wk_mnear[$wk_j],"Z") )
               {
                  if( VAR_VAL($wk_mnear[$wk_j],"PP_AttivaAuto") == 1
                    | VAR_VAL($wk_mnear[$wk_j],"PP_PushPull") == 1 )
                  {
                     if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " | CONTROLLI ELEMENTI VICINI $wk_mnear = ",STR($wk_mnear[$wk_j]) )) }
                     $wk_attiva_PP = 1
                     $wk_j = $wk_mnear
                  }
               }

               $wk_j = $wk_j + 1
            }

            //CONTROLLO ELEMENTI IN PROSSIMITA'
            //2. CONTENITORI IN PROSSIMITA' DEVONO ESSERE ALLINEATI O A CAVALLO IN ALTEZZa
            if( $wk_attiva_PP == 0 )
            {
               BOX_MODE(0)
               NEAR_GLOBALE("$wk_mnear",$wk_idx_mod,51,1,"Mod*")
               $wk_j = 1
               while ( $wk_j <= $wk_mnear )
               {
                  if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " | CONTROLLI ELEMENTI PROSSIMI $wk_mnear = ",STR($wk_mnear[$wk_j]) )) }

                  if( VAR_VAL($wk_idx_mod,"Z") == VAR_VAL($wk_mnear[$wk_j],"Z") )
                  {
                     if( VAR_VAL($wk_mnear[$wk_j],"PP_AttivaAuto") == 1
                       | VAR_VAL($wk_mnear[$wk_j],"PP_PushPull") == 1 )
                     {
                        //DEVE ESSERCI UNA PARTE IN COMUNE
                        SET_#($wk_mnear[$wk_j])

                        $wk_DBG = "ALLINEATI"

                        //ALLINEATI
                        if( ABS( $wk_B0 - #base_0.y ) < 0.1
                          & ABS( $wk_A0 - #alto_0.y ) < 0.1 ) { $wk_attiva_PP = 1 $wk_DBG = "ALLINEATI" }

                        //A CAVALLO SOTTO
                        if( $wk_B0  < #base_0.y
                          & $wk_A0  > #base_0.y ) { $wk_attiva_PP = 1 $wk_DBG = "CAVALLO SOTTO" }

                        //A CAVALLO SOPRA
                        if( $wk_B0  < #alto_0.y
                          & $wk_A0  > #alto_0.y ) { $wk_attiva_PP = 1 $wk_DBG = "CAVALLO SOPRA" }

                        if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO " , STR($wk_i) , " IDX=",STR($wk_idx_mod) , " | CONTROLLI ELEMENTI VICINI $wk_mnear = ",STR($wk_mnear[$wk_j]) , " $wk_attiva_PP=",STR($wk_attiva_PP) , " --> ", $wk_DBG)) }
                     }
                  }

                  $wk_j = $wk_j + 1
               }
            }
         }

         if( $wk_attiva_PP != $wk_PP_AttivaAuto )
         {
            if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_SettaPushPull_368 GIRO 2 - MODULO IDX=",STR($wk_idx_mod) , " $wk_PP_AttivaAuto=",STR($wk_PP_AttivaAuto) , " $wk_attiva_PP=",STR($wk_attiva_PP))) }

            //se bloccato gestione auto da utente
            if( VAR_VAL($wk_idx_mod,"PP_Manuale") == 1 )
            {
               AddItem2Array(-1,"wk_mod_pp_man",$wk_idx_mod,"")
            }
            else
            {
               //SETTO SUBITO IL NUOVO VALORE PER AVERLO CORRETTO NEL 2° GIRO
               VAR_VALUE_SET($wk_idx_mod,"PP_AttivaAuto",$wk_attiva_PP)

               if( $wk_attiva_PP == 1 )
               {
                  AddItem2Array(-1,"wk_mod_pp_attivato",$wk_idx_mod,"")

                  //se presente nell'array dei moduli disattivati, lo elimino
                  $wk_pos = 0
                  $wk_j = 1
                  while ( $wk_j <= $wk_mod_pp_disattivato )
                  {
                     if( $wk_mod_pp_disattivato[$wk_j] == $wk_idx_mod )
                     {
                        $wk_pos = $wk_j
                        $wk_j = $wk_mod_pp_disattivato
                     }

                     $wk_j = $wk_j + 1
                  }
                  if( $wk_pos > 0 ) { DEL_ARRAY_ITEM(-1,"wk_mod_pp_disattivato",$wk_pos) }
               }
               else { AddItem2Array(-1,"wk_mod_pp_disattivato",$wk_idx_mod,"") }

               //AGGIUNGO SU ARRAY PER RICALCOLO FINALE
               $wk_ne = $wk_mod_udpate + 1
               $wk_mod_udpate = $wk_ne
               $wk_mod_udpate[$wk_ne] = $wk_idx_mod
            }
         }

         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA Ctrl_CheckAttaccaglie_368
   {
      debug = 0
      #ifdef TE
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_CheckAttaccaglie_368 START")) }

      STRUTTURE("$wk_str")

      if( $wk_str == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i<= $wk_str )
      {
         $wk_idx_test = $wk_str[$wk_i]

         $wk_blocca_ele = 0

         if( IS_MATCH( NOME($wk_idx_test) , "Modulo*368" ) == 1 & VAR_VAL($wk_idx_test,"FLAG_Modulo_AIR")==0 )
         {
            if( VAR_VAL($wk_idx_test,"ConAttaccaglie") != VAR_VAL($wk_idx_test,"ConAttaccaglie_STD") )
            {
               $wk_ne              = $wk_blo_arr + 1
               $wk_blo_arr         = $wk_ne
               $wk_blo_arr[$wk_ne] = $wk_idx_test

               $wk_blocca = 1
            }
         }
         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), MSG(1237) )
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_CheckAttaccaglie_368 START")) }
   }

   PROCEDURA Ctrl_CheckSenzaAttaccaglie_368
   {
      $wk_msg = "Sono presenti moduli senza attaccaglie e piedini."

      debug = 0
      #ifdef TEC
         debug = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_CheckSenzaAttaccaglie_368 START")) }

      STRUTTURE("$wk_str")

      if( $wk_str == 0 ) { EXITSUB() }

      $wk_blocca  = 0
      $wk_blo_arr = 0

      $wk_i = 1
      while ( $wk_i<= $wk_str )
      {
         $wk_idx_test = $wk_str[$wk_i]

         $wk_blocca_ele = 0

         if( VAR_VAL( $wk_idx_test, "FLAG_Modulo_AIR") == 0
           & IS_MATCH( NOME($wk_idx_test) , "Modulo*368") == 1
           & IS_MATCH( NOME($wk_idx_test) , "Modulo*Pens*") != 1
           & IS_MATCH( NOME($wk_idx_test) , "ModuloMadiaGlass_368") != 1 )
         {
            if( VAR_VAL($wk_idx_test,"ConPiedini") == 0
              & VAR_VAL($wk_idx_test,"ConAttaccaglie") == 0
              & VAR_VAL($wk_idx_test,"ConSostegnoVetro") == 0
              & VAR_VAL($wk_idx_test,"VAR_SostegnoOmega") == 0
              & VAR_VAL($wk_idx_test,"FLAG_ConModuloSotto") == 0 )
            {
               $wk_ne              = $wk_blo_arr + 1
               $wk_blo_arr         = $wk_ne
               $wk_blo_arr[$wk_ne] = $wk_idx_test

               $wk_blocca = 1
            }
         }
         $wk_i = $wk_i + 1
      }

      if( $wk_blocca==1 & VAR_VAL(-1,"wk_CG_Riassunto")==1 )
      {
         $wk_CG_Ctrl_Count = VAR_VAL(-1,"wk_CG_Ctrl_Count") + 1

         VAR_VALUE_SET(-1,STRCAT("wk_CG_Ctrl_BLO_",STR($wk_CG_Ctrl_Count)), 1)
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_TIP_",STR($wk_CG_Ctrl_Count)), "NO_BLOCCO")
         VAR_VALUESTR_SET(-1,STRCAT("wk_CG_Ctrl_MSG_",STR($wk_CG_Ctrl_Count)), $wk_msg )
         r = ArrayCopy(-1 ,"wk_blo_arr", STRCAT("wk_CG_Ctrl_ARR_",STR($wk_CG_Ctrl_Count)))
      }

      if( debug ) { COMANDO2(STRCAT("LOGMSG Ctrl_CheckAttaccaglie_368 START")) }
   }

   //REGOLE TIPO COLLO 368
   PROCEDURA Assegna_TipoCollo_Passacavi_368_OLD
   {
      $ATPC_debug_msg  = "Assegna_TipoCollo_PassacaviWW_368"
      LogProcedura2("ATPC_TipoCollo")

      $wk_pre_tp = "G"
      Reset_TIPO_COLLO($wk_pre_tp,54,57)

      WITH_ALIAS("$wk_top","TopWW368")

      $wk_prg = 54

      $wk_i = 1
      while ( $wk_i <= $wk_top )
      {
         $wk_idx_str = $wk_top[$wk_i]

         $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))

         COMPONENTI2("$wk_pc",$wk_idx_str,"Passacavi_368")

         $wk_j = 1
         while ( $wk_j <= $wk_pc )
         {
            $wk_idx_pcv = $wk_pc[$wk_j]
            if( VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER035-QUADRATO"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER036-RETTANGOLARE-PIC"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER037-RETTANGOLARE-GRA" )
            {
               //Luca 15/01/2021 AGGIUNGO CONTROLLO SOSTITUZIONI
               //VAR_VALUESTR_SET($wk_idx_str, "TIPO_COLLO",$wk_val_tp)
               //VAR_VALUESTR_SET($wk_pc[$wk_j],  "TIPO_COLLO",$wk_val_tp)
               //$wk_prg = $wk_prg + 1
               $wk_ATTIVA_TIPO_COLLO = 1
               if( VAR_VAL_STR(-1,"TST_OrdineSostituzione") == "1" )
               {
                  $wk_ATTIVA_TIPO_COLLO = 0
                  if( VAR_VAL_STR($wk_idx_str,"ORD_SOST") == "1"
                    & VAR_VAL_STR($wk_pc[$wk_j],"ORD_SOST") == "1" ) { $wk_ATTIVA_TIPO_COLLO = 1 }
               }

               if( $wk_ATTIVA_TIPO_COLLO )
               {
                  VAR_VALUESTR_SET($wk_idx_str, "TIPO_COLLO",$wk_val_tp)
                  VAR_VALUESTR_SET($wk_pc[$wk_j],  "TIPO_COLLO",$wk_val_tp)
                  $wk_prg = $wk_prg + 1
               }
            }

            $wk_j = $wk_j + 1
         }

         $wk_i = $wk_i + 1
      }

      //Luca 18/02/2021
      //passacavi con top vetro
      WITH_ALIAS("$wk_top","TopVet368")
      $wk_i = 1
      while ( $wk_i <= $wk_top )
      {
         $wk_idx_str = $wk_top[$wk_i]
         $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))
         COMPONENTI2("$wk_pc",$wk_idx_str,"Passacavi_368")

         $wk_j = 1
         while ( $wk_j <= $wk_pc )
         {
            if( VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "D21006-VETRO" )
            {
               $wk_ATTIVA_TIPO_COLLO = 1
               if( VAR_VAL_STR(-1,"TST_OrdineSostituzione") == "1" )
               {
                  $wk_ATTIVA_TIPO_COLLO = 0
                  if( VAR_VAL_STR($wk_idx_str,"ORD_SOST") == "1"
                    & VAR_VAL_STR($wk_pc[$wk_j],"ORD_SOST") == "1" ) { $wk_ATTIVA_TIPO_COLLO = 1 }
               }

               if( $wk_ATTIVA_TIPO_COLLO )
               {
                  VAR_VALUESTR_SET($wk_idx_str, "TIPO_COLLO",$wk_val_tp)
                  VAR_VALUESTR_SET($wk_pc[$wk_j],  "TIPO_COLLO",$wk_val_tp)
                  $wk_prg = $wk_prg + 1
               }
            }

            $wk_j = $wk_j + 1
         }

         $wk_i = $wk_i + 1
      }

      //gli altri passacavi
      WITH_ALIAS("$wk_top","PCV_368")
      $wk_i = 1
      while ( $wk_i <= $wk_top )
      {
         $wk_idx_str = $wk_top[$wk_i]
         $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))

         if( VAR_VAL_STR($wk_idx_str,"TipoPassacaviStr") == "TER052-ROTONDO"
           | VAR_VAL_STR($wk_idx_str,"TipoPassacaviStr") == "TER050-OVALE" )
         {
            if( VAR_VAL_STR($wk_idx_str,"TIPO_COLLO") == ""  )
            {
               $wk_idx_mod = VAR_VAL($wk_idx_str,"idx_mod")

               if( IS_MATCH(NOME($wk_idx_mod),"Modu*368") )
               {
                  $wk_ATTIVA_TIPO_COLLO = 1
                  if( VAR_VAL_STR(-1,"TST_OrdineSostituzione") == "1" )
                  {
                     $wk_ATTIVA_TIPO_COLLO = 0
                     if( VAR_VAL_STR($wk_idx_str,"ORD_SOST") == "1"
                       & VAR_VAL_STR($wk_idx_mod,"ORD_SOST") == "1" ) { $wk_ATTIVA_TIPO_COLLO = 1 }
                  }

                  if( $wk_ATTIVA_TIPO_COLLO )
                  {
                     VAR_VALUESTR_SET($wk_idx_str, "TIPO_COLLO",$wk_val_tp)
                     VAR_VALUESTR_SET($wk_idx_mod,  "TIPO_COLLO",$wk_val_tp)
                     $wk_prg = $wk_prg + 1
                  }
               }
            }
         }

         $wk_i = $wk_i + 1
       }
   }

   //Luca 23/04/2021 rivista procedura sopra, mantis 25027: 368 -Tipi collo
   //- il passacavi in vetro integrato sul top non deve fare alcun tipo collo
   //- i passacavi in alluminio (TER030, TER031, TER032) non devono fare tipo collo
   //- i passacavi in plastica col. alluminio (TER050, TER052) devono fare tipo collo con il contenitore
   //- i passacavi se sono posizionati su un top wildwood (passacavi in ww e passacavi in plastica col. alluminio) devono fare tipo collo con il top
   PROCEDURA Assegna_TipoCollo_Passacavi_368
   {
      $ATPC_debug_msg  = "Assegna_TipoCollo_PassacaviWW_368"
      LogProcedura2("ATPC_TipoCollo")

      $wk_pre_tp = "G"
      Reset_TIPO_COLLO($wk_pre_tp,54,57)

      WITH_ALIAS("$wk_top","TopWW368")
      WITH_ALIAS("$wk_piano","PianoTavolo_AIR_WW")
      MergeArray2Array(-1,"wk_piano","wk_top")

      $wk_prg = 54

      $wk_i = 1
      while ( $wk_i <= $wk_top )
      {
         $wk_idx_str = $wk_top[$wk_i]
         COMPONENTI2("$wk_pc",$wk_idx_str,"Passacavi_368")

         $wk_idx_fusto = VAR_VAL( $wk_idx_str, "idx_fusto")
         if( VAR_VAL( $wk_idx_str, "X") > 1472
           & VAR_EXIST( $wk_idx_str, "idx_fusto")
           & IS_IDX($wk_idx_fusto) )
         {
            if( VAR_VAL_STR( $wk_idx_str, "Tipo368") == "368-BAT"
              | VAR_VAL_STR( $wk_idx_str, "Tipo368") == "368-MAD" ) { $wk_idx_str = $wk_idx_fusto }
         }

         $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))

         $wk_j = 1
         while ( $wk_j <= $wk_pc )
         {
            $wk_idx_comp = $wk_pc[$wk_j]
            //Passacavi in ww(TER035/6/7) e plastica(TER050/2)
            if( VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER035-QUADRATO"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER036-RETTANGOLARE-PIC"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER037-RETTANGOLARE-GRA"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER050-OVALE"
              | VAR_VAL_STR($wk_pc[$wk_j],"TipoPassacaviStr") == "TER052-ROTONDO"  )
            {
               $wk_ATTIVA_TIPO_COLLO = Assegna_TIPO_COLLO_CheckSost($wk_idx_str,$wk_idx_comp)

               if( $wk_ATTIVA_TIPO_COLLO )
               {
                  if( VAR_VAL_STR($wk_idx_str,"TIPO_COLLO") == "" )
                  {
                     VAR_VALUESTR_SET($wk_idx_str, "TIPO_COLLO",$wk_val_tp)
                     VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO",$wk_val_tp)
                     $wk_prg = $wk_prg + 1
                     $wk_val_tp = STRCAT($wk_pre_tp,STR($wk_prg))
                  }
                  else
                  {
                     //eredito dal fianco/ripiano
                     VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO",VAR_VAL_STR($wk_idx_str,"TIPO_COLLO"))
                  }
               }
            }

            $wk_j = $wk_j + 1
         }

         $wk_i = $wk_i + 1
      }

      //Passacavi vetro
      //LZ 11/11/2021: unisco le procedure di 368 e materia, utilizzano entrambe i tipi collo da P01 a P10
      $ATPC_debug_msg  = "Assegna_TipoCollo_Passacavi_Vetro_Top"
      LogProcedura2("ATPC_TipoCollo")

      //P01 - P10
      $wk_pre_tp = "P"
      Reset_TIPO_COLLO( $wk_pre_tp, 1, 10)

      WITH_ALIAS( "$wk_pcv_mat", "PassacaviMat")
      WITH_ALIAS( "$wk_pcv_368", "PCV_368")

      //Unisco i due array
      $wk_pcv = 0
      $wk_i = 1
      while( $wk_i <= $wk_pcv_mat )
      {
         AddItem2Array( -1, "wk_pcv", $wk_pcv_mat[$wk_i], "")
         $wk_i = $wk_i + 1
      }
      $wk_i = 1
      while( $wk_i <= $wk_pcv_368 )
      {
         AddItem2Array( -1, "wk_pcv", $wk_pcv_368[$wk_i], "")
         $wk_i = $wk_i + 1
      }

      $wk_prg = 1
      $wk_i = 1
      while ( $wk_i <= $wk_pcv )
      {
         $wk_idx_pcv = $wk_pcv[$wk_i]

         //Tipo collo
         if( $wk_prg < 10 ) { $wk_val_tp = STRCAT( $wk_pre_tp, "0", STR($wk_prg)) }
         else               { $wk_val_tp = STRCAT( $wk_pre_tp, STR($wk_prg)) }

         if( VAR_VAL_STR( $wk_idx_pcv, "TipoPassacaviStr") == "D21006-VETRO"       //36e8
           | ( NOME($wk_idx_pcv) == "PassaCaviRett_Mat"                            //Materia
             & VAR_VAL( $wk_idx_pcv, "TipoPassaCavi") == 1 ))
         {
            BOX_MODE(0)
            NEAR_GLOBALE2( "$wk_top", $wk_idx_pcv, 2, "Top*")

            if( $wk_top > 0 )
            {
               $wk_idx_top = $wk_top[1]

               if( NOME($wk_idx_top) == "TopVetroMateria_Mat"
                 | HAS_ALIAS( $wk_idx_top, "TopVet368") == 1 )
               {
                  if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_top, $wk_idx_pcv) )
                  {
                     if( VAR_VAL_STR( $wk_idx_top, "TIPO_COLLO") == "" )
                     {
                        VAR_VALUESTR_SET( $wk_idx_pcv, "TIPO_COLLO", $wk_val_tp)
                        VAR_VALUESTR_SET( $wk_idx_top, "TIPO_COLLO", $wk_val_tp)
                        $wk_prg = $wk_prg + 1
                     }
                     else
                     {
                        //eredito dal fianco/ripiano
                        VAR_VALUESTR_SET( $wk_idx_pcv, "TIPO_COLLO", VAR_VAL_STR( $wk_idx_top, "TIPO_COLLO"))
                     }
                  }
               }
            }
         }

         $wk_i = $wk_i + 1
      }

      //LZ 10/01/2022: passacavi su lagolinea
      $ATPC_debug_msg  = "Assegna_TipoCollo_Passacavi_Lagolinea_Mensole"
      LogProcedura2("ATPC_TipoCollo")

      WITH_ALIAS( "$wk_pcv", "PCV_368")

      //P11 - P20
      $wk_pre_tp = "P"
      Reset_TIPO_COLLO( $wk_pre_tp, 11, 20)

      $wk_prg = 11
      $wk_i = 1
      while ( $wk_i <= $wk_pcv )
      {
         $wk_pcv_idx  = $wk_pcv[$wk_i]
         $wk_pcv_tipo = VAR_VAL_STR($wk_pcv_idx, "TipoPassacaviStr")
         $wk_idx_pdr  = GetTopLevel($wk_pcv_idx)

         if( IS_MATCH( NOME($wk_idx_pdr), "Scrivania*") == 1
           & VAR_VAL_STR($wk_idx_pdr,"VAR_MaterialeStr") == "LACCATO" )
         {
            if( $wk_prg < 10 ) { $wk_val_tp = STRCAT( $wk_pre_tp, "0", STR($wk_prg)) }
            else               { $wk_val_tp = STRCAT( $wk_pre_tp, STR($wk_prg)) }

            $wk_idx_piano = $wk_idx_pdr

            NEAR_GLOBALE2("$wk_piani_near", $wk_pcv_idx, 2, "Piano*")
            COMPONENTI2("$wk_piani_cmp", $wk_idx_pdr, "Piano*")
            if( $wk_piani_near > 0 )   { $wk_idx_piano = $wk_piani_near[1] }
            else
            {
               if( $wk_piani_cmp > 0 ) { $wk_idx_piano = $wk_piani_cmp[1] }
            }

            //passavi in plastica
            if( $wk_pcv_tipo == "TER050-OVALE"
              | $wk_pcv_tipo == "TER052-ROTONDO" )
            {
               if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_piano, $wk_pcv_idx) )
               {
                  if( VAR_VAL_STR( $wk_idx_piano, "TIPO_COLLO") == "" )
                  {
                     VAR_VALUESTR_SET( $wk_pcv_idx, "TIPO_COLLO", $wk_val_tp)
                     VAR_VALUESTR_SET( $wk_idx_piano, "TIPO_COLLO", $wk_val_tp)
                     $wk_prg = $wk_prg + 1
                  }
                  else
                  {
                     VAR_VALUESTR_SET( $wk_pcv_idx, "TIPO_COLLO", VAR_VAL_STR( $wk_idx_piano, "TIPO_COLLO"))
                  }
               }
            }
         }

         $wk_i = $wk_i + 1
      }

      //P21 - P30
      $wk_pre_tp = "P"
      Reset_TIPO_COLLO( $wk_pre_tp, 21, 30)

      $wk_prg = 21
      $wk_i = 1
      while ( $wk_i <= $wk_pcv )
      {
         $wk_pcv_idx  = $wk_pcv[$wk_i]
         $wk_pcv_tipo = VAR_VAL_STR($wk_pcv_idx, "TipoPassacaviStr")
         $wk_idx_pdr  = GetTopLevel($wk_pcv_idx)

         if( IS_MATCH( NOME($wk_idx_pdr), "Mensola_*") == 1
           | IS_MATCH( NOME($wk_idx_pdr), "Scrivania*") == 1 )
         {
            if( $wk_prg < 10 ) { $wk_val_tp = STRCAT( $wk_pre_tp, "0", STR($wk_prg)) }
            else               { $wk_val_tp = STRCAT( $wk_pre_tp, STR($wk_prg)) }

            $wk_idx_piano = $wk_idx_pdr

            NEAR_GLOBALE2("$wk_piani_near", $wk_pcv_idx, 2, "Piano*")
            COMPONENTI2("$wk_piani_cmp", $wk_idx_pdr, "Piano*")
            if( $wk_piani_near > 0 )   { $wk_idx_piano = $wk_piani_near[1] }
            else
            {
               if( $wk_piani_cmp > 0 ) { $wk_idx_piano = $wk_piani_cmp[1] }
            }

            //passacavi in wildwood
            if( $wk_pcv_tipo == "TER035-QUADRATO"
              | $wk_pcv_tipo == "TER036-RETTANGOLARE-PIC"
              | $wk_pcv_tipo == "TER037-RETTANGOLARE-GRA" )
            {
               if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_piano, $wk_pcv_idx) )
               {
                  if( VAR_VAL_STR( $wk_idx_piano, "TIPO_COLLO") == "" )
                  {
                     VAR_VALUESTR_SET( $wk_pcv_idx, "TIPO_COLLO", $wk_val_tp)
                     VAR_VALUESTR_SET( $wk_idx_piano, "TIPO_COLLO", $wk_val_tp)
                     $wk_prg = $wk_prg + 1
                  }
                  else
                  {
                     VAR_VALUESTR_SET( $wk_pcv_idx, "TIPO_COLLO", VAR_VAL_STR( $wk_idx_piano, "TIPO_COLLO"))
                  }
               }
            }
         }

         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA Assegna_TipoCollo_Accessori_368
   {
      $ATPC_debug_msg  = "Assegna_TipoCollo_Accessori_368"
      LogProcedura2("ATPC_TipoCollo")

      //G60 - G79 accessori vari + schiena vetro se su 368 non a giorno se non è specchio
      $wk_pre_tp_acc = "G"
      Reset_TIPO_COLLO($wk_pre_tp_acc,60,79)
      $wk_prg_acc = 60

      //H01 - H09
      $wk_pre_tp_pc = "H"
      Reset_TIPO_COLLO($wk_pre_tp_pc,1,9)
      $wk_prg_pc = 1

      //H20 - H29 schiena vetro se su 368 giorno + schiene scrittoio, entrambe se non sono specchio
      $wk_pre_tp_sch = "H"
      Reset_TIPO_COLLO($wk_pre_tp_sch,20,29)
      $wk_prg_sch = 20

      //H30 schiena vetro specchio

      STRUTTURE("$wk_strut")

      //gestione su pcf, aggiungo i contenitori di primo livello all'array delle strutture
      $wk_i = 1
      while( $wk_i <= $wk_strut )
      {
         $wk_idx_str = $wk_strut[$wk_i]

         if( VAR_VAL( $wk_idx_str, "PCF_Elements") == 1 )
         {
            COMPONENTI2( "$wk_cmp", $wk_idx_str, "Modul*368" )

            $wk_k = 1
            while( $wk_k <= $wk_cmp )
            {
               $wk_idx_cmp = $wk_cmp[$wk_k]

               $wk_strut = $wk_strut + 1
               VAR_VALUE_SET( -1, STRCAT("wk_strut_##", STR($wk_strut)), $wk_idx_cmp)

               $wk_k = $wk_k + 1
            }
         }

         $wk_i = $wk_i + 1
      }

      $wk_i = 1
      while ( $wk_i <= $wk_strut )
      {
         $wk_idx_str  = $wk_strut[$wk_i]
         $wk_nome_str = NOME($wk_idx_str)
         $wk_tipo_str = VAR_VAL_STR( $wk_idx_str, "Tipo368")

         if( IS_MATCH( $wk_nome_str, "Modul*368") )
         {
            COMPONENTI2( "$wk_comp", $wk_idx_str, "*")

            $wk_idx_fusto = VAR_VAL( $wk_idx_str, "idx_fusto")
            if( VAR_VAL( $wk_idx_str, "X") > 1472
              & VAR_EXIST( $wk_idx_str, "idx_fusto")
              & IS_IDX($wk_idx_fusto) )
            {
               if( $wk_tipo_str == "368-BAT"
                 | $wk_tipo_str == "368-MAD" ) { $wk_idx_str = $wk_idx_fusto }
            }

            //LZ 10/11/2021: mail di Enrico M.P. del 02/11/21 - modifica tipo collo per passacavi
            //               ciclo prima tutti gli accessori
            if( $wk_prg_acc < 10 ) { $wk_val_tp_acc = STRCAT( $wk_pre_tp_acc, "0", STR($wk_prg_acc)) }
            else                   { $wk_val_tp_acc = STRCAT( $wk_pre_tp_acc, STR($wk_prg_acc)) }

         #ifdef TEC;AZI
            if( $wk_prg_acc > 80 )
            {
               $wk_msg = "ATTENZIONE!\nTipoCollo=G80 non previsto.\nAvvisare ufficio tecnico."
               DISPLAY2($wk_msg)

               $wk_i = $wk_strut + 1
               $BLOCCO_FINE_ORDINE = 1
            }
         #endif

            $wk_j = 1
            while ( $wk_j <= $wk_comp )
            {
               $wk_ok = 0
               $wk_idx_comp = $wk_comp[$wk_j]

               $wk_fin_var_comp = GetVarGest( VAR_VAL_STR( $wk_idx_comp, "FIN_var"))
               $wk_fin_val_comp = ""
               if( VAR_EXIST( $wk_idx_comp, $wk_fin_var_comp)) { $wk_fin_val_comp = VAR_VAL_STR( $wk_idx_comp, $wk_fin_var_comp) }

               if( NOME($wk_idx_comp) == "RipianoVetroLiv_368" )
               {
                  if( VAR_VAL($wk_idx_comp,"TipoRipiano") == 1
                   &  VAR_VAL($wk_idx_comp,"ins2_att") == $ins2_attrezzato )                    { $wk_ok =  1 }
               }
               if( NOME($wk_idx_comp) == "DivisiorioVetLiv_368" )
               {
                  if( VAR_VAL($wk_idx_comp,"ins2_att") == $ins2_attrezzato )                    { $wk_ok =  2 }
               }
               if( NOME($wk_idx_comp) == "BarraTV_Modulo_368" )                                 { $wk_ok =  3 }
               if( NOME($wk_idx_comp) == "Faretto_368" )                                        { $wk_ok =  4 }
               if( NOME($wk_idx_comp) == "Led_368" )                                            { $wk_ok =  5 }

               if( $wk_tipo_str != "368-GIO" )
               {
                  if( NOME($wk_idx_comp) == "SchienaleVanoGiorno_368" )
                  {
                     COMPONENTI2( "$wk_sch_sing", $wk_idx_comp, "SchienaSingolaVanoGiorno_368")
                     if( $wk_sch_sing == 0 )                                                    { $wk_ok =  6 }
                  }

                  if( NOME($wk_idx_comp) == "SchienaSingolaVanoGiorno_368" )                    { $wk_ok =  7 }

                  //No se specchio, si rompe; viene gestito separatamente con tipo collo H30
                  if( IS_MATCH( $wk_fin_val_comp, "SP0*") == 1 )                                { $wk_ok = -1 }
               }

               if( $wk_ok > 0 )
               {
                  if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_str, $wk_idx_comp) )
                  {
                     if( VAR_VAL_STR( $wk_idx_str, "TIPO_COLLO") == "" )
                     {
                        VAR_VALUESTR_SET( $wk_idx_str, "TIPO_COLLO",$wk_val_tp_acc)
                        VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO",$wk_val_tp_acc)
                        $wk_prg_acc = $wk_prg_acc + 1
                     }
                     else
                     {
                        //eredito dal contenitore
                        VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO", VAR_VAL_STR($wk_idx_str,"TIPO_COLLO"))
                     }
                  }
               }

               $wk_j = $wk_j + 1
            }

            //LZ 10/11/2021: mail di Enrico M.P. del 02/11/21 - modifica tipo collo per passacavi
            //               dopo agli accessori, ciclo tutti i passacavi (devo applicare il tipo collo per passacavi solo se non è già presente quello per gli accessori)
            if( $wk_prg_pc < 10 ) { $wk_val_tp_pc = STRCAT( $wk_pre_tp_pc, "0", STR($wk_prg_pc)) }
            else                  { $wk_val_tp_pc = STRCAT( $wk_pre_tp_pc, STR($wk_prg_pc)) }

         #ifdef TEC;AZI
            if( $wk_prg_pc > 10 )
            {
               $wk_msg = "ATTENZIONE!\nTipoCollo=H10 non previsto.\nAvvisare ufficio tecnico."
               DISPLAY2($wk_msg)

               $wk_i = $wk_strut + 1
               $BLOCCO_FINE_ORDINE = 1
            }
         #endif

            $wk_j = 1
            while ( $wk_j <= $wk_comp )
            {
               $wk_ok = 0
               $wk_idx_comp = $wk_comp[$wk_j]

               //LZ 10/11/2021
               //Luca 23/04/2021 mantis 25027: 368 - Tipi collo
               if( NOME($wk_idx_comp) == "Passacavi_368" )
               {
                  if( VAR_VAL_STR($wk_idx_comp,"TipoPassacaviStr") == "TER052-ROTONDO"
                    | VAR_VAL_STR($wk_idx_comp,"TipoPassacaviStr") == "TER050-OVALE"
                    | VAR_VAL_STR($wk_idx_comp,"TipoPassacaviStr") == "D21005-TONDO-NERO" )  { $wk_ok = 1 }
               }

               if( $wk_ok == 1 )
               {
                  if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_str, $wk_idx_comp) )
                  {
                     if( VAR_VAL_STR( $wk_idx_str, "TIPO_COLLO") == "" )
                     {
                        VAR_VALUESTR_SET( $wk_idx_str, "TIPO_COLLO", $wk_val_tp_pc)
                        VAR_VALUESTR_SET( $wk_idx_comp, "TIPO_COLLO", $wk_val_tp_pc)
                        $wk_prg_pc = $wk_prg_pc + 1
                     }
                     else
                     {
                        //eredito dal contenitore
                        VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO", VAR_VAL_STR($wk_idx_str,"TIPO_COLLO"))
                     }
                  }
               }

               $wk_j = $wk_j + 1
            }

            //LZ 01/12/2022: mail di Cosimo del 29/11/22 - modifica tipo collo per passacavi
            //               le schiene per contenitore a giorno, se applicate effettivamente a contenitori a giorno, utilizzano un tipo collo da H20 a H29
            if( $wk_prg_sch < 10 ) { $wk_val_tp_sch = STRCAT( $wk_pre_tp_pc, "0", STR($wk_prg_sch)) }
            else                   { $wk_val_tp_sch = STRCAT( $wk_pre_tp_pc, STR($wk_prg_sch)) }

         #ifdef TEC;AZI
            if( $wk_prg_sch > 30 )
            {
               $wk_msg = "ATTENZIONE!\nTipoCollo=H30 non previsto.\nAvvisare ufficio tecnico."
               DISPLAY2($wk_msg)

               $wk_i = $wk_strut + 1
               $BLOCCO_FINE_ORDINE = 1
            }
         #endif

            $wk_j = 1
            while ( $wk_j <= $wk_comp )
            {
               $wk_ok = 0
               $wk_idx_comp = $wk_comp[$wk_j]

               $wk_fin_var_comp = GetVarGest( VAR_VAL_STR( $wk_idx_comp, "FIN_var"))
               $wk_fin_val_comp = ""
               if( VAR_EXIST( $wk_idx_comp, $wk_fin_var_comp)) { $wk_fin_val_comp = VAR_VAL_STR( $wk_idx_comp, $wk_fin_var_comp) }

               if( $wk_tipo_str == "368-GIO" )
               {
                  if( NOME($wk_idx_comp) == "SchienaleVanoGiorno_368" )
                  {
                     COMPONENTI2( "$wk_sch_sing", $wk_idx_comp, "SchienaSingolaVanoGiorno_368")
                     if( $wk_sch_sing == 0 )                                                    { $wk_ok =  1 }
                  }

                  if( NOME($wk_idx_comp) == "SchienaSingolaVanoGiorno_368" )                    { $wk_ok =  2 }
               }

               //Simone 19/01/2023 - Applico lo stesso tipo collo anche alle schiene vetro per acc. scrittoio
               if( NOME($wk_idx_comp) == "SchienaVetro_368" )                                   { $wk_ok =  3 }

               //No se specchio, si rompe; viene gestito separatamente con tipo collo H30
               if( IS_MATCH( $wk_fin_val_comp, "SP0*") == 1 )                                   { $wk_ok = -1 }

               if( $wk_ok > 0 )
               {
                  if( Assegna_TIPO_COLLO_CheckSost( $wk_idx_str, $wk_idx_comp) )
                  {
                     if( VAR_VAL_STR( $wk_idx_str, "TIPO_COLLO") == "" )
                     {
                        VAR_VALUESTR_SET( $wk_idx_str, "TIPO_COLLO", $wk_val_tp_sch)
                        VAR_VALUESTR_SET( $wk_idx_comp, "TIPO_COLLO", $wk_val_tp_sch)
                        $wk_prg_sch = $wk_prg_sch + 1
                     }
                     else
                     {
                        //eredito dal contenitore
                        VAR_VALUESTR_SET($wk_idx_comp, "TIPO_COLLO", VAR_VAL_STR( $wk_idx_str,"TIPO_COLLO"))
                     }
                  }
               }

               $wk_j = $wk_j + 1
            }

            //Schiene in specchio, H30
            $wk_j = 1
            while ( $wk_j <= $wk_comp )
            {
               $wk_ok = 0
               $wk_idx_comp = $wk_comp[$wk_j]

               $wk_fin_var_comp = GetVarGest( VAR_VAL_STR( $wk_idx_comp, "FIN_var"))
               $wk_fin_val_comp = ""
               if( VAR_EXIST( $wk_idx_comp, $wk_fin_var_comp)) { $wk_fin_val_comp = VAR_VAL_STR( $wk_idx_comp, $wk_fin_var_comp) }

               if( IS_MATCH( $wk_fin_val_comp, "SP0*") == 1 )
               {
                  if( NOME($wk_idx_comp) == "SchienaleVanoGiorno_368" )
                  {
                     COMPONENTI2( "$wk_sch_sing", $wk_idx_comp, "SchienaSingolaVanoGiorno_368")
                     if( $wk_sch_sing == 0 )                                                    { $wk_ok =  1 }
                  }

                  if( NOME($wk_idx_comp) == "SchienaSingolaVanoGiorno_368" )                    { $wk_ok =  2 }

                  if( NOME($wk_idx_comp) == "SchienaVetro_368" )                                { $wk_ok =  3 }
               }

               if( $wk_ok > 0 ) { VAR_VALUESTR_SET( $wk_idx_comp, "TIPO_COLLO", "H30") }

               $wk_j = $wk_j + 1
            }
         }

         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA Assegna_TipoCollo_PannelliBifacciali_368
   {
      //G80 - G99
      $wk_pre_tp = "G"
      Reset_TIPO_COLLO( $wk_pre_tp, 80, 99)

      WITH_ALIAS( "$wk_bif", "Bifacciale368")

      $wk_prg = 80
      $wk_bif_num = 0
      while( inc($wk_bif_num) <= $wk_bif)
      {
         $wk_bif_idx = $wk_bif[$wk_bif_num]

         // Bifacciale
         if( VAR_VAL( $wk_bif_idx, "in_pcfto") != 0
           | VAR_VAL_STR( $wk_bif_idx, "TipoBifaccialeStr") != "PANNELLO RETRO") { continue }
         if( CheckSel_ORD_SOST($wk_bif_idx) != 1)                                { continue }

         // Modulo
         SET_#($wk_bif_idx)
         $wk_modulo_idx = -1
         if( IsIdx( $wk_bif_idx, "idx_ref") == 1 )                               { $wk_modulo_idx = #idx_ref }
         if( IsIdx( $wk_bif_idx, "idx_struttura") == 1 )                         { $wk_modulo_idx = #idx_struttura }
         if( IS_IDX($wk_modulo_idx) != 1)                                        { continue }

         // Se agganciato ad un pcf, trovo l'idx del modulo a cui sono effettivamente agganciato
         if( VAR_VAL( $wk_modulo_idx, "pcfto") == 1
           & IsIdx( $wk_bif_idx, "idx_modulo_agg") == 1)                         { $wk_modulo_idx = #idx_modulo_agg }
         if( IS_IDX($wk_modulo_idx) != 1)                                        { continue }

         $wk_fusto_idx = $wk_modulo_idx
         if( IsIdx( $wk_modulo_idx, "idx_fusto") == 1)                           { $wk_fusto_idx = VAR_VAL( $wk_modulo_idx, "idx_fusto") }

         // Moduli battenti con X > 1472, utilizzo fusto
         if( VAR_VAL( $wk_modulo_idx, "X") > 1472
           & ( VAR_VAL_STR( $wk_modulo_idx, "Tipo368") == "368-BAT"
             | VAR_VAL_STR( $wk_modulo_idx, "Tipo368") == "368-MAD"))            { $wk_modulo_idx = $wk_fusto_idx }

         // Modulo non selezionato, utilizzo fusto
         if( CheckSel_ORD_SOST($wk_modulo_idx) != 1)                             { $wk_modulo_idx = $wk_fusto_idx }
         if( CheckSel_ORD_SOST($wk_modulo_idx) != 1)                             { continue }

         // Tipo collo
         $wk_val_tp = VAR_VAL_STR( $wk_modulo_idx, "TIPO_COLLO")
         if( $wk_val_tp == "")
         {
            $wk_val_tp = STRCAT( $wk_pre_tp, STR($wk_prg))
            inc($wk_prg)
         }

         VAR_VALUESTR_SET( $wk_bif_idx, "TIPO_COLLO", $wk_val_tp)
         VAR_VALUESTR_SET( $wk_modulo_idx, "TIPO_COLLO", $wk_val_tp)
      }
   }

   PROCEDURA Stendi_Led_368
   {
      if( VAR_VAL(ATTUALE(),"steso") == 1 )  { EXITSUB() }

      steso = 1

      blocca_stesura = 0
      blocca_stesura_msg = ""

      log = 0
      #ifdef TEC
         log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif
      ScriviSuLog( log , "Stendi_Led_368" , "START" )

      //1 - RICAVO IDX DI REFERIMENTO
      //Led alto
      nome_var_pnt_alto_sx = "pnt_stendi_led_sx_a"
      nome_var_pnt_alto_dx = "pnt_stendi_led_dx_a"

      //Led basso
      nome_var_pnt_basso_sx = "pnt_stendi_led_sx_b"
      nome_var_pnt_basso_dx = "pnt_stendi_led_dx_b"

      //Led destra
      nome_var_pnt_destra_dw = "pnt_stendi_led_dw_dx"
      nome_var_pnt_destra_up = "pnt_stendi_led_up_dx"

      //Led sinistra
      nome_var_pnt_sinistra_dw = "pnt_stendi_led_dw_sx"
      nome_var_pnt_sinistra_up = "pnt_stendi_led_up_sx"

      P1 = $stesi_pt_sx
      P2 = $stesi_pt_dx

      wk_pos_led = ""

      wk_pos_P1  = ""
      idx_steso1 = -1                 idx_steso1 = GetIdxWithVarVal(nome_var_pnt_alto_sx,2,0,"",P1)     wk_pos_led = "ALTO"     wk_pos_P1 = "ALTO-SX"
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_alto_dx,2,0,"",P1)     wk_pos_led = "ALTO"     wk_pos_P1 = "ALTO-DX"  }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_basso_sx,2,0,"",P1)    wk_pos_led = "BASSO"    wk_pos_P1 = "BASSO-SX" }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_basso_dx,2,0,"",P1)    wk_pos_led = "BASSO"    wk_pos_P1 = "BASSO-DX" }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_destra_dw,2,0,"",P1)   wk_pos_led = "DESTRA"   wk_pos_P1 = "DX-BASSO" }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_destra_up,2,0,"",P1)   wk_pos_led = "DESTRA"   wk_pos_P1 = "DX-ALTO"  }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_sinistra_dw,2,0,"",P1) wk_pos_led = "SINISTRA" wk_pos_P1 = "SX-BASSO" }
      if( IS_IDX(idx_steso1) == 0 ) { idx_steso1 = GetIdxWithVarVal(nome_var_pnt_sinistra_up,2,0,"",P1) wk_pos_led = "SINISTRA" wk_pos_P1 = "SX-ALTO"  }

      wk_pos_P2  = ""
      idx_steso2 = -2                 idx_steso2 = GetIdxWithVarVal(nome_var_pnt_alto_sx,2,0,"",P2)     wk_pos_P2 = "ALTO-SX"
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_alto_dx,2,0,"",P2)     wk_pos_P2 = "ALTO-DX"  }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_basso_sx,2,0,"",P2)    wk_pos_P2 = "BASSO-SX" }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_basso_dx,2,0,"",P2)    wk_pos_P2 = "BASSO-DX" }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_destra_dw,2,0,"",P2)   wk_pos_P2 = "DX-BASSO" }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_destra_up,2,0,"",P2)   wk_pos_P2 = "DX-ALTO"  }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_sinistra_dw,2,0,"",P2) wk_pos_P2 = "SX-BASSO" }
      if( IS_IDX(idx_steso2) == 0 ) { idx_steso2 = GetIdxWithVarVal(nome_var_pnt_sinistra_up,2,0,"",P2) wk_pos_P2 = "SX-ALTO"  }

      if( NOME(idx_steso1) == "GlassMirror"
        | NOME(idx_steso2) == "GlassMirror" )
      {
         STR_SPLIT( wk_pos_P1, "-", 1, "wk_pos_P1_arr", ATTUALE() )
         STR_SPLIT( wk_pos_P2, "-", 1, "wk_pos_P2_arr", ATTUALE() )
         if( wk_pos_P1_arr == 2 & wk_pos_P2_arr == 2 )
         {
            if( wk_pos_P1_arr[2] == wk_pos_P2_arr[2] )
            {
               if( wk_pos_P1_arr[2] == "SX" ) { wk_pos_led = "SINISTRA" }
               if( wk_pos_P1_arr[2] == "DX" ) { wk_pos_led = "DESTRA" }
            }
         }
      }

      PosizioneLED = 0
      if( wk_pos_led == "ALTO" )     { PosizioneLED = 1 }
      if( wk_pos_led == "SINISTRA" ) { PosizioneLED = 2 }
      if( wk_pos_led == "DESTRA" )   { PosizioneLED = 3 }

      ScriviSuLog( log , "Stendi_Led_368" , STRCAT(" wk_pos_led: ", wk_pos_led, " - idx_steso1: ", STR(idx_steso1), " - idx_steso2: ", STR(idx_steso2), " - P1: [ ", STR(P1.x), ", ", STR(P1.y), ", ", STR(P1.z), "] - P2: [ ", STR(P2.x), ", ", STR(P2.y), ", ", STR(P2.z), "]") )

      if( IS_IDX(idx_steso1) == 0
        | IS_IDX(idx_steso2) == 0 ) { EXITSUB() }

      //2 - TIPOLOGIA E ANALISI STESURA
      TipologiaLED = 1
      if( NOME(idx_steso1) == "ModuloGlass_368Sideboard"
        | NOME(idx_steso2) == "ModuloGlass_368Sideboard" ) { TipologiaLED = 2 }

      if( NOME(idx_steso1) == "Modulo_368"
        | NOME(idx_steso2) == "Modulo_368" )               { TipologiaLED = 4 }

      if( idx_steso1 != idx_steso2 )
      {
         idx_steso1_save = idx_steso1
         //Inverto sx con dx se il pick è stato fatto al contrario
         CTLR_SEQUENZA_SXDX( idx_steso1, idx_steso2 )

         if( idx_steso1_save == idx_steso2 )
         {
            P1_save = P1
            P1 = P2
            P2 = P1_save
         }

         //Per Glass e modulo sotto alzata Air
         if( TipologiaLED == 2
           | TipologiaLED == 4 )
         {
            blocca_stesura = 1
            blocca_stesura_msg = STRCAT(MSG(1090),"\n",MSG(1245))
         }
      }

      if( idx_steso1 == idx_steso2 )
      {
         //Ordino in larghezza per i led orizzontali
         //se P1 è un punto DX --> diventa SX
         if( wk_pos_led == "BASSO"
           | wk_pos_led == "ALTO" )
         {
            SET_#(idx_steso1)
            if( VAR_EXIST( idx_steso1, "pnt_stendi_led_dx_a")
              & VAR_EXIST( idx_steso1, "pnt_stendi_led_sx_a") )
            {
               if( DISTANZA( #pnt_stendi_led_dx_a , P1 ) < 0.1 )
               {
                  P1_save = P1
                  P1 = #pnt_stendi_led_sx_a
                  P2 = P1_save
               }
            }
            if( VAR_EXIST( idx_steso1, "pnt_stendi_led_dx_b")
              & VAR_EXIST( idx_steso1, "pnt_stendi_led_sx_b") )
            {
               if( DISTANZA( #pnt_stendi_led_dx_b , P1 ) < 0.1 )
               {
                  P1_save = P1
                  P1 = #pnt_stendi_led_sx_b
                  P2 = P1_save
               }
            }
         }

         //Ordino in altezza per i led verticali
         //se P1 è un punto ALTO --> diventa BASSO
         if( wk_pos_led == "DESTRA" )
         {
            SET_#(idx_steso1)
            if( VAR_EXIST( idx_steso1, "pnt_stendi_led_up_dx")
              & VAR_EXIST( idx_steso1, "pnt_stendi_led_dw_dx") )
            {
               if( DISTANZA( #pnt_stendi_led_up_dx , P1 ) < 0.1 )
               {
                  P1_save = P1
                  P1 = #pnt_stendi_led_dw_dx
                  P2 = P1_save
               }
            }
            else
            {
               if( VAR_EXIST( idx_steso1, "pnt_stendi_led_dx_a")
                 & VAR_EXIST( idx_steso1, "pnt_stendi_led_dx_b") )
               {
                  if( DISTANZA( #pnt_stendi_led_dx_a , P1 ) < 0.1 )
                  {
                     P1_save = P1
                     P1 = #pnt_stendi_led_dx_b
                     P2 = P1_save
                  }
               }
            }
         }

         if( wk_pos_led == "SINISTRA" )
         {
            SET_#(idx_steso1)
            if( VAR_EXIST( idx_steso1, "pnt_stendi_led_up_sx")
              & VAR_EXIST( idx_steso1, "pnt_stendi_led_dw_sx") )
            {
               if( DISTANZA( #pnt_stendi_led_up_sx , P1 ) < 0.1 )
               {
                  P1_save = P1
                  P1 = #pnt_stendi_led_dw_sx
                  P2 = P1_save
               }
            }
            else
            {
               if( VAR_EXIST( idx_steso1, "pnt_stendi_led_sx_a")
                 & VAR_EXIST( idx_steso1, "pnt_stendi_led_sx_b") )
               {
                  if( DISTANZA( #pnt_stendi_led_sx_a , P1 ) < 0.1 )
                  {
                     P1_save = P1
                     P1 = #pnt_stendi_led_sx_b
                     P2 = P1_save
                  }
               }
            }
         }
      }

      //Luca 10/02/2021
      //verifico vincolo di contiguità tra i moduli
      //parto da idx_steso1 fino a idx_steso 2
      wk_x_mod = GetLunghezzaModuli_LED( ATTUALE(), idx_steso1, idx_steso2 )
      ScriviSuLog( log , "Stendi_Led_368" , STRCAT(" X_MODULI_TOT = ",STR(wk_x_mod) ) )

      //Controllo allineamento
      wk_pos_all = 1
      if( wk_pos_led == "BASSO"
        | wk_pos_led == "ALTO" )
      {
         if( ABS( P2.y - P1.y ) > 0.1  ) { wk_pos_all = 0 }
         P2.y = P1.y
      }

      if( wk_pos_led == "DESTRA"
        | wk_pos_led == "SINISTRA" )
      {
         if( ABS( P2.x - P1.x ) > 0.1
           | ABS( P2.z - P1.z ) > 0.1 ) { wk_pos_all = 0 }
      }

      if( wk_pos_all == 0 )
      {
         blocca_stesura = 1
         blocca_stesura_msg = STRCAT("Impossibile stendere su elementi non allineati.")
      }

      //3 - DIMENSIONAMENTO
      X = DISTANZA(P1,P2)*10
      X = FLOOR(X+0.5)/10

      //Glass, per sicurezza prendo le dimensioni del contenitore
      if( TipologiaLED == 2 )
      {
         X = VAR_VAL( idx_steso1, "X")
         if( wk_pos_led == "DESTRA"
           | wk_pos_led == "SINISTRA" ) { X = VAR_VAL( idx_steso1, "Y") }
      }

      GOSUB ricava_ang_y

      ScriviSuLog( log , "Stendi_Led_368" , STRCAT(" X = ",STR(X) ) )

      if( X > wk_x_mod
        & ( wk_pos_led == "BASSO"
          | wk_pos_led == "ALTO" ))
      {
         ScriviSuLog( log , "Stendi_Led_368" , " X > wk_x_mod --> DELME" )

         blocca_stesura = 1
         blocca_stesura_msg = STRCAT(MSG(1090),"\n",MSG(1244))
      }

      //4 - POSIZIONE
      base_0 = P1
      base_0.x = P1.x -   SENO(ang_y)*(Z/2)
      base_0.z = P1.z - COSENO(ang_y)*(Z/2)

      if( TipologiaLED != 2
        & TipologiaLED != 4 )           { base_0.y = base_0.y - Y/2 }
      else
      {
         if( wk_pos_led == "ALTO" )     { base_0.y = base_0.y - Y }
         if( wk_pos_led == "SINISTRA"
           | wk_pos_led == "DESTRA" )   { base_0.y = base_0.y + X }
         if( wk_pos_led == "DESTRA" )   { base_0.x = base_0.x - Y }
      }

      ScriviSuLog( log , "Stendi_Led_368" , STRCAT("IDX_1=",STR(idx_steso1) ," IDX_2=",STR(idx_steso2)) )
      ScriviSuLog( log , "Stendi_Led_368" , "END" )

      if( blocca_stesura > 0 )
      {
         delme = 1
         FLAG_RADICE = $NO_RAD
      }
   }

   PROCEDURA Notifica_Led_368
   {
      if( VAR_VAL(ATTUALE(),"delme")==1 )
      {
         if( blocca_stesura_msg!="" )  { DISPLAY2(blocca_stesura_msg) }

         COMANDO(STRCAT("DELETE3 ",STR(idx_att)," //Notifica ",NOME(ATTUALE())))
         COMANDO2("Show Abilita ON")
         EXIT()
      }

      steso = 1

      log = 0
      #ifdef TEC
        log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      ScriviSuLog( log , "Notifica_Led_368" , "START" )

      ScriviSuLog( log , "Notifica_Led_368" , STRCAT(" P1=", Point2String(P1)))
      ScriviSuLog( log , "Notifica_Led_368" , STRCAT(" P2=", Point2String(P2)))

      wk_idx_test = ATTUALE()
      if( IS_IDX(idx_led) ) { wk_idx_test = idx_led }

      //steso su più elementi
      if( idx_steso1 != idx_steso2 )
      {
         BOX_MODE(0)
         NEAR("wk_near_tmp",wk_idx_test,5,0,"*")

         wk_near = 0
         i = 1
         while ( i <= wk_near_tmp )
         {
            if( wk_near_tmp[i] != ATTUALE()
              & VAR_VAL_STR(wk_near_tmp[i],"PanLED_Tipologia") != "" ) { AddItem2Array(ATTUALE(),"wk_near",wk_near_tmp[i],"") }
            i = i + 1
         }

         wk_elementi = 0

         if( IS_IDX(idx_cnear) )
         {
            NEAR("wk_elementi_tmp",idx_cnear,1,0,"*")
            i = 1
            while ( i <= wk_elementi_tmp )
            {
               if( wk_elementi_tmp[i] != ATTUALE()
                 & VAR_VAL_STR(wk_elementi_tmp[i],"PanLED_Tipologia") != "" ) { wk_elementi = wk_elementi + 1 }
               i = i + 1
            }
         }

         if( wk_elementi == 0 )
         {
            wk_near = 0
            blocca_stesura = 1
            blocca_stesura_msg = STRCAT(MSG(1090),"\n",MSG(1110))
         }

         if( wk_near > 0 )
         {
            StendoSingolo = 0
            StendoParziale = 0
            StendoCompleto = 0

            SET_#(idx_steso1)

            P1 = #pnt_stendi_led_sx_a
            if( wk_pos_led == "BASSO" ) { P1 = #pnt_stendi_led_sx_b }

            //base_0 = P1

            SORT_POINT(#base_0,"wk_near","base_0")

            //verifico le varie tipologie di pannello,
            //se sono compatibili --> verifico distanza --> stendo
            //se non sono compatibili --> stendo il primo pezzo --> avviso
            wk_tipopan = VAR_VAL_STR(wk_near[1],"PanLED_Tipologia")

            if( wk_tipopan == "WALL" ) { StendoSingolo = 1 }
            else
            {
               i = 2
               while ( i <= wk_near )
               {
                  wk_tipopan_curr = VAR_VAL_STR(wk_near[i],"PanLED_Tipologia")

                  //GLASS CON GLASS NON POSSO
                  if( wk_tipopan_curr == "GLASS" & wk_tipopan == "GLASS" )
                  {
                     StendoParziale = 1
                     wk_near = i - 1
                  }

                  //WALL SEMPRE SINGOLO, quindi mi fermo
                  if( wk_tipopan_curr == "WALL"  )
                  {
                     StendoParziale = 1
                     wk_near = i - 1
                  }

                  wk_tipopan = wk_tipopan_curr

                  i = i + 1
               }
            }

            if( wk_near == 1 )
            {
               StendoParziale = 0
               StendoSingolo = 1
            }

            if( StendoSingolo == 0 & StendoParziale == 0 ) { StendoCompleto = 1 }

            if( StendoSingolo == 1 )
            {
               SET_#(idx_steso1)
               P1 = #pnt_stendi_led_sx_a
               if( wk_pos_led == "BASSO" ) { P1 = #pnt_stendi_led_sx_b }

               P2 = #pnt_stendi_led_dx_a
               if( wk_pos_led == "BASSO" ) { P2 = #pnt_stendi_led_dx_b }

               ricalcola = 1
            }

            if( StendoParziale == 1
              | StendoCompleto == 1 )
            {
               idx_steso2 = wk_near[wk_near]
               SET_#(idx_steso2)

               P2 = #pnt_stendi_led_dx_a
               if( wk_pos_led == "BASSO" ) { P2 = #pnt_stendi_led_dx_b }

               ricalcola = 1
            }

            ScriviSuLog( log , "Notifica_Led_368" , STRCAT("StendoSingolo=",STR(StendoSingolo)) )
            ScriviSuLog( log , "Notifica_Led_368" , STRCAT("StendoParziale=",STR(StendoParziale)) )
            ScriviSuLog( log , "Notifica_Led_368" , STRCAT("StendoCompleto=",STR(StendoCompleto)) )

            X = DISTANZA(P1,P2)
            ang_y = 0

            ScriviSuLog( log , "Notifica_Led_368" , STRCAT("X=",STR(X)) )

            //base_0.y = base_0.y - Y/2
            //base_0.x = P1.x -   SENO(ang_y)*(Z/2)
            //base_0.z = P1.z - COSENO(ang_y)*(Z/2)
            //Simone 01/03/2024 - Dim reale del led più grande a listino
            x_max = 3098

            //verifico se posso inserire il trasformatore più grande nei moduli esterni
            trasf_100_mod_sx = 1
            trasf_100_mod_dx = 1

            if( VAR_VAL(idx_steso1,"X") < 370 )  { trasf_100_mod_sx = 0 }
            if( VAR_VAL(idx_steso2,"X") < 370 )  { trasf_100_mod_dx = 0 }

            if( trasf_100_mod_sx == 0 | trasf_100_mod_dx == 0 ) { x_max = 2150 }

            //if( X > 3098 )
            if( X > x_max )
            {
               blocca_stesura = 1
               blocca_stesura_msg = STRCAT(MSG(1090),"\n",MSG(1241), STR(x_max))
            }
         }
      }

      COMANDO(STRCAT("VAR_CHANGE 1 ", STR(idx_att), " X=", STR(X), " //Notifica ",NOME(ATTUALE())))

      //controllo collisioni con altri led
      BOX_MODE(0)
      NEAR_GLOBALE( "wk_led", wk_idx_test, 1, 1, "_graf_Led_PannelloRetro_368")

      i = 1
      while( i <= wk_led & blocca_stesura == 0 )
      {
         if( wk_led[i] != wk_idx_test
           & GetTopLevel(wk_led[i]) != wk_idx_test )
         {
            blocca_stesura = 1
            blocca_stesura_msg = STRCAT(MSG(1090),"\n",MSG(1242))
         }

         i = i + 1
      }

      if( blocca_stesura > 0 )
      {
         if( blocca_stesura_msg!="" )  { DISPLAY2(blocca_stesura_msg) }

         COMANDO(STRCAT("SETTA ",STR(ATTUALE())))

         COMANDO(STRCAT("DELETE ",STR(idx_att)," // ",NOME(ATTUALE())))
         NO_GEST = 1
         EXIT()
      }

      wk_offx = 15

      ScriviSuLog( log , "Notifica_Led_368" , STRCAT("NOME(idx_steso1): ", NOME(idx_steso1)) )

      //Luca 22/07/2021
      if( NOME(idx_steso1) == "MensolaElle_368" ) { wk_offx = 13.5 }

      if( NOME(idx_steso1) == "ModuloGlass_368" )
      {
         if( VAR_VAL(idx_steso1,"VAR_GlassL_ConScasso") == 1 )
         {
            if( wk_pos_led == "BASSO"
              & VAR_VAL_STR(idx_steso1,"GlassL_Scasso_Pos") == "SX-BA" )
            {
               wk_offx = wk_offx + VAR_VAL(idx_steso1,"GlassL_Scasso_X")
            }

            if( wk_pos_led == "ALTO"
              & VAR_VAL_STR(idx_steso1,"GlassL_Scasso_Pos") == "SX-AL" )
            {
               wk_offx = wk_offx + VAR_VAL(idx_steso1,"GlassL_Scasso_X")
            }
            //if( VAR_VAL_STR(idx_steso1,"GlassL_Scasso_Pos") == "SX-BA"
            //  | VAR_VAL_STR(idx_steso1,"GlassL_Scasso_Pos") == "SX-AL"  )
            //{
            //   wk_offx = wk_offx + VAR_VAL(idx_steso1,"GlassL_Scasso_X")
            //}
         }
      }

      wk_offy = 15 + (Y/2)

      if( PosizioneLED == 1 )  { wk_offy = -15 - (Y/2) }

      wk_offz = 5.2

      //Glass e alzata Air
      if( TipologiaLED == 2
        | TipologiaLED == 4 )
      {
         wk_pdr = PADRE( idx_steso1, -1)
         if( idx_steso1 != wk_pdr )
         {
            wk_ang = ANG_TOT2(ATTUALE())

            SET_#(wk_pdr)

            wk_b0_int = base_0
            wk_b0_int.y = #base_0.y
            wk_b0_int = INTERFERISCI( wk_b0_int, wk_ang+90, #base_0, #base_3)
            wk_offx = DISTANZA(wk_b0_int, #base_0)

            wk_offy = base_0.y - #base_0.y + Y

            wk_offz = -Z
         }
      }

      ScriviSuLog( log , "Notifica_Led_368" , STRCAT("wk_offx: ", STR(wk_offx), " - wk_offy: ", STR(wk_offy), " - wk_offz: ", STR(wk_offz)) )

      wk_cnt = STRCAT("CNT S + 0,B - 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0")

      if( PosizioneLED == 1
        & TipologiaLED != 2
        & TipologiaLED != 4 )
      {
         wk_cnt = STRCAT("CNT S + 0,A - 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 0")
      }

      COMANDO(wk_cnt)
      COMANDO(STRCAT("POS2LINK ",STR(ATTUALE()), " ", STR(PADRE(idx_steso1, -1)), " //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE())," no_agganciati //Notifica ",NOME(ATTUALE())))
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(idx_steso1, -1))," no_agganciati //Notifica ",NOME(ATTUALE())))

      //Luca 07/04/2022 controllo posizione scassi presenti su wallpanel
      if( NOME(idx_steso1) == "WallPanel_368" )
      {
         COMPONENTI2("wk_scs",idx_steso1,"Scasso_WallPanel")

         i = 1
         while ( i <= wk_scs )
         {
            COMANDO(STRCAT("Procedura CtrlPosizionaScassi_WallPanel ",STR(wk_scs[i]) , " //da postgest led"))

            i = i + 1
         }
      }
   }

   //Simone 06/07/2022
   PROCEDURA Set_Posizione_Led_GlassMirror
   {
      wk_c166_val = VAR_VAL_STR( GetPrimoGest( ATTUALE(), 0), "GEST_C166")

      LED_Sx    = 0
      LED_Dx    = 0
      LED_Sopra = 0
      LED_Sotto = 0

      if( wk_c166_val == "DX001" )  { LED_Dx = 1 }
      if( wk_c166_val == "SX001" )  { LED_Sx = 1 }
      if( wk_c166_val == "DXSX01")  { LED_Dx = 1
                                      LED_Sx = 1 }

      if( wk_c166_val == "P0001" )  { LED_Sopra = 1 }
      if( wk_c166_val == "P0002" )  { LED_Sotto = 1 }
      if( wk_c166_val == "P0006" )  { LED_Sopra = 1
                                      LED_Sotto = 1 }
   }

   PROCEDURA CalcolaTrasformatore_GlassMirror
   {
      if( ACTION() <= 0 | ACTION() == 2 ) { EXITSUB() }

      LED_Watt = 0
      COMPONENTI2( "wk_led", ATTUALE(), "Led_PannelloRetro_368")
      wk_i = 1
      while( wk_i <= wk_led )
      {
         LED_Watt = LED_Watt + VAR_VAL( wk_led[wk_i], "LED_Watt")
         wk_i = wk_i + 1
      }

      TLED_Lavorazione     = 0
      TLED_TipoLavorazione = 0

      TLED_Attiva          = 0
      TLED_Tipologia       = 0
      TLED_Watt            = LED_Watt

      if( TLED_Watt == 0 )                { EXITSUB() }

      TLED_Attiva = 1
      TLED_Lavorazione = 1
      TLED_TipoLavorazione = 3

      if( LED_Watt > 15 ) { TLED_Tipologia = 1 }
      if( LED_Watt > 30 ) { TLED_Tipologia = 2 }

      //Simone 27/11/2023
      if( NOME(ATTUALE()) == "368_Mirror")
      {
         TLED_TipoLavorazione = TLED_Tipologia
      }
   }

   PROCEDURA Set_Gest_C169_Trasf_GlassMirror
   {
      if( ACTION() <= 0 | ACTION()== 2 )             { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C169") == 0  ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C169") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C169") }

      //Simone 07/07/2022 - Solo per TabEredita per avere subito un valore
      if( ACTION() == 28 )
      {
         GEST_C169 = "W0015"
         VarAdd = "GEST_C169"   GOSUB Add_TABER_VARSETTATE

         EXITSUB()
      }

      gest_C169 = "W0015"
      if( TLED_Tipologia == 1 ) { gest_C169 = "W0030" }
      if( TLED_Tipologia == 2 ) { gest_C169 = "W0100" }

      GEST_C169 = gest_C169
      VarAdd = "GEST_C169"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C160_GlassMirror
   {
      if( ACTION() <= 0 | ACTION()== 2 )             { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C160") == 0  ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C160") == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C160") }

      gest_C160 = "__"
      if( VAR_VAL( ATTUALE(), "ORD_RID") > 0 ) { gest_C160 = "S0000" }

      GEST_C160 = gest_C160
      VarAdd = "GEST_C160"   GOSUB Add_TABER_VARSETTATE
   }

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

      CAT_VM_var     = "C165"
      CAT_VM_gestvar = GetVarGest(CAT_VM_var)
      if( VAR_EXIST( ATTUALE(), CAT_VM_gestvar) == 0)        { EXITSUB() }

      CAT_VM_val     = VAR_VAL_STR( ATTUALE(), CAT_VM_gestvar)
      CAT_VM_val     = REPLACE( CAT_VM_val, "__", "")
      if( CAT_VM_val == "")                                  { EXITSUB() }

      CAT_VM_val     = STRCAT( ";", CAT_VM_val, ";")

      // NOTA: Due valori, SM137 e SM138, che non possono essere selezionati contemporaneamente
      //       Se uno dei due risulta già selezionato, prendo in carico la gestione del valore in modo da resettare la scelta dell'utente
      //SM137 - Led Verticale
      //SM138 - Led Orizzontale
      CAT_VM_opz_max = 2
      CAT_VM_opz_att = 0
      CAT_VM_opz = ""
      if( IS_MATCH( CAT_VM_val, "*;SM137;*")) { AddVal_CAT_VM_sel( CAT_VM_opz , "SM138") CAT_VM_opz_att = CAT_VM_opz_att + 1 }
      if( IS_MATCH( CAT_VM_val, "*;SM138;*")) { AddVal_CAT_VM_sel( CAT_VM_opz , "SM137") CAT_VM_opz_att = CAT_VM_opz_att + 1 }

      CAT_VM_sel = ""
      CAT_VM_varprec = STRCAT( CAT_VM_var, "_prec")
      if( CAT_VM_opz_att >= CAT_VM_opz_max)
      {
         DEL_VAR_MODIFICATE( ATTUALE(), CAT_VM_gestvar)
         CAT_VM_sel = VAR_VAL_STR( ATTUALE(), CAT_VM_varprec)
      }
      else
      {
         VAR_VALUESTR_SET( ATTUALE(), CAT_VM_varprec, VAR_VAL_STR( ATTUALE(), CAT_VM_gestvar))
      }

      GOSUB Gest_CAT_VM
   }

   //[ PROCEDURE GESTIONE GRUPPI XGLASS
   PROCEDURA AssegnaAutoGruppiXGlass
   {
      #ifdef TE
         $DBG_GruppiXG = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      $wk_On_AssegnaAutoGruppiXGlass = 1
      $wk_xg_genera_preview   = 0

      //Luca 30/11/2021 aggiungo controllo gruppi esistenti
      $wk_gruppi_gia_presenti = 0

      GOSUB Assegna_VarTecnica_XGLASS
      GOSUB GeneraGruppiXGlass
      //GOSUB EliminaBoxGruppiXGlass

      if( $wk_gruppi_gia_presenti == 0 )
      {
         $wk_i = 1
         while ( $wk_i <= 3  )
         {
            GOSUB UnisciGruppiXGlass
            $wk_i = $wk_i + 1
         }
      }

      GOSUB SettaGruppiXGlass


      $wk_On_AssegnaAutoGruppiXGlass = 0
   }

   PROCEDURA GeneraGruppiXGlass
   {
      LogProcedura("Start", "GeneraGruppiXGlass",$DBG_GruppiXG)

      $wk_xg_debug_GeneraGruppiXGlass = 0

      // ----------------------------------------------
      // 1) TROVI GLI ELEMENTI DA ANALIZZARE
      // ----------------------------------------------
      // Trovo tutti gli elementi che hanno senso essere gestiti.
      // Al momento verifico l'alias "ordina" o "stampa_menu", ma in futuro
      // potrei gestire un alias specifico

      // se non ci sono strutture top-level "grafiche".... esco
      GOSUB C_STRUTTURE
      if( $C_STRUTTURE!=1 )
      {
         LogProcedura("End", "GeneraGruppiXGlass",$DBG_GruppiXG)
         EXITSUB()
      }

      ////TROVO TUTTO GLI ELEMENTI DA AGGIUNGERE (VARIABILE XGLASS STRINGA VALORIZZATA)
      //WITH_VAR("$wk_xg_StructsAll","XGLASS",$alfa_con_figli,0,"")
      //if( $wk_xg_StructsAll == 0 )   { EXITSUB() }
      WITH_ALIAS("$wk_xg_StructsAll","StampaXG")

      // ------------------------------------------------------------------
      // 2) ANALIZZO GLI ARTICOLI CHE HO TROVATO  E PULISCO L'ARRAY
      // ------------------------------------------------------------------
      $wk_xg_Structs = 0

      ScriviSuLog($DBG_GruppiXG,"GeneraGruppiXGlass",STRCAT("TROVATI ",STR($wk_xg_StructsAll), " ELEMENTI"))

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_StructsAll )
      {
         $wk_xg_idx_str = $wk_xg_StructsAll[$wk_xg_i]

         ScriviSuLog($DBG_GruppiXG,"GeneraGruppiXGlass",STRCAT("VALUTO ",STR($wk_xg_idx_str), " - ",NOME($wk_xg_idx_str)))

         // se sono top-level (ma non preconfigurato) aggiungo all'array
         //$wk_xg_add = 0
         //if( VAR_VAL_STR($wk_xg_idx_str,"XGLASS") != ""
         //  & HAS_ALIAS(GetTopLevel($wk_xg_idx_str),"StampaXG") == 1 ) { $wk_xg_add = 1 }

         //Luca 27/01/2022 considero solo il pcf
         $wk_xg_add = 1
         if( VAR_VAL($wk_xg_idx_str,"in_pcfto") == 1 ) { $wk_xg_add = 0 }

         if( $wk_xg_add == 1 )
         {
            $wk_xg_idx_str_2add = GetTopLevel($wk_xg_idx_str)
            if( $wk_xg_debug_GeneraGruppiXGlass > 0 )   { HI($wk_xg_idx_str_2add, 1) }

            $wk_xg_Structs = $wk_xg_Structs + 1
            VAR_CREATE_NUM(-1, STRCAT("wk_xg_Structs_##", STR($wk_xg_Structs)), $wk_xg_idx_str_2add, $MODE_NOSAVE, "")
         }

         $wk_xg_i = $wk_xg_i + 1
      }

      if( $wk_xg_debug_GeneraGruppiXGlass > 0 )   { DISPLAY("INIZIO GeneraGruppiXGlass\nStrutture Ok:", $wk_xg_Structs) }

      if( $wk_xg_Structs < 1 )
      {
         LogProcedura("End", "GeneraGruppiXGlass - Non ci sono strutture da valutare",$DBG_GruppiXG)
         EXITSUB()
      }

      // -------------------------------------------------
      // 2.5) CONTROLLO GRUPPI ESISTENTI
      // -------------------------------------------------
      // se tutte le strutture xglass hanno giù il gruppo assegnato, esco subito.
      // così da mantenere eventuali gruppi fatti dall'utente
      $wk_gruppi_gia_presenti = 1
      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_Structs )
      {
         $wk_xg_idx_str = $wk_xg_Structs[$wk_xg_i]
         if( VAR_VAL_STR($wk_xg_idx_str,"GROUP__") == "" ) { $wk_gruppi_gia_presenti = 0 }
         $wk_xg_i = $wk_xg_i + 1
      }

      if( $wk_gruppi_gia_presenti )
      {
         $wk_xg_XGlassGroups = VAR_VAL(-1,"GROUPS__")
         LogProcedura("End", "GeneraGruppiXGlass - Tutte le strutture hanno gia' il gruppo assegnato",$DBG_GruppiXG)
         EXITSUB()
      }

      // -------------------------------------------------
      // 3) ANALIZZO LE STRUTTURE E LE ASSEGNO AI GRUPPI
      // -------------------------------------------------

      // FT 20/09/18 - aggiunta pulizia iniziale dei valori
      GOSUB EliminaDatiGruppiXGlass

      GOSUB CreaGruppiXGlass

      // ----------------------------------------------
      // 4) VERIFICO SE CI SONO GRUPPI DA FONDERE
      // (ELEMENTI STACCATI MA CHE FANNO PARTE
      // DELLO STESSO GRUPPO)
      // ----------------------------------------------
      // Per fare la verifica seguo questa regola:
      // - per ogni gruppo costruisco un blocco di
      //   ingombro che racchiude il gruppo
      // - eseguo un controllo di collisione del gruppo
      //   per capire se c'è una intersezione e quindi
      //   una fusione dei gruppi in uno unico

      // Se non è dichiaro niente faccio la preview dei box d'ingombro
      if( VAR_EXIST(-1, "wk_xg_genera_preview") != 1 )  { $wk_xg_genera_preview = 1 }

      if( $wk_xg_genera_preview == 1 )
      {
         GOSUB MostraNumeroGruppiXGlass
         GOSUB CreaBoxGruppiXGlass
      }

      // ----------------------------------------------
      // 5) TODO
      // ----------------------------------------------

      // ----------------------------------------------
      // 6) PULIZIA VARIABILI DI APPOGGIO
      // ----------------------------------------------
      $wk_dlg_Groups = $wk_xg_Groups
      DEL_VAR(-1, "wk_xg_*")

      // if( debug_GeneraGruppiXGlass > 0 )   { DISPLAY2("FINE GeneraGruppiXGlass") }

      LogProcedura("End", "GeneraGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA EliminaDatiGruppiXGlass
   {
      // (1) PULISCO DAI TOP-LEVEL LA VARIABILE DI RAGGRUPPAMENTO "XGlassGroupN"
      WITH_VAR("$wk_xg_XGlassGroups", "XGlassGroupN", 2, 0, "")

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_XGlassGroups )
      {
         $wk_xg_idx_tl = $wk_xg_XGlassGroups[$wk_xg_i]

         if( VAR_EXIST($wk_xg_idx_tl, "XGlassGroupN") == 1 )
         {
            DEL_VAR_MODIFICATE($wk_xg_idx_tl, "XGlassGroupN")
            DEL_VAR($wk_xg_idx_tl, "XGlassGroupN")
         }

         $wk_xg_i = $wk_xg_i + 1
      }


      // (2) PULISCO DAI TOP-LEVEL LA VARIABILE DI RAGGRUPPAMENTO "XGlassFreeStanding"
      WITH_VAR("$wk_xg_XGlassGroups", "XGlassFreeStanding", 2, 0, "")
      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_XGlassGroups )
      {
         $wk_xg_idx_tl = $wk_xg_XGlassGroups[$wk_xg_i]

         if( VAR_EXIST($wk_xg_idx_tl, "XGlassFreeStanding") == 1 )
         {
            DEL_VAR_MODIFICATE($wk_xg_idx_tl, "XGlassFreeStanding")
            DEL_VAR($wk_xg_idx_tl, "XGlassFreeStanding")
         }

         $wk_xg_i = $wk_xg_i + 1
      }


      // (3) PULISCO DAI TOP-LEVEL LA VARIABILE GROUP__ ("XG GRP " e "XG FS")
      WITH_VAR("$wk_xg_XGlassGroups", "GROUP__", 1, 0, "")

      $wk_xg_i = 1

      while( $wk_xg_i <= $wk_xg_XGlassGroups )
      {
         $wk_xg_idx_tl = $wk_xg_XGlassGroups[$wk_xg_i]

         $wk_xg_group = VAR_VAL_STR($wk_xg_idx_tl, "GROUP__")

         // HI($wk_xg_idx_tl, 1)

         if( $wk_xg_group != "" )
         {
            // pulisco ";XG FS"
            $wk_xg_group = StrRemove($wk_xg_group, ";XG FS")

            // pulisco "XG FS"
            $wk_xg_group = StrRemove($wk_xg_group, "XG FS")

            // se esiste un gruppo settato (ce ne può essere solo 1 di questa tipologia...
            if( STRSTR($wk_xg_group, "XG GRP") != "" )
            {
               // verifico se sono l'unico valore o ce ne sono altri (sono divisi da ;)
               if( STRSTR($wk_xg_group, ";") != "" )
               {
                  // verifico se sono all'inizio della stringa (senza ; iniziale ma con ; prima del nuovo valore

                  // se sono all'inizio devo eliminare tutto fino al primo ; compreso (tipo "XG GRP 6;PROVA;TAVOLI")
                  index_grp = STR_INDEX_OF($wk_xg_group, 0, "XG GRP")

                  if( index_grp == 0 )
                  {
                      // DISPLAY2(STRCAT("Caso di ", APICI(), "XG GRP", APICI(), " INIZIALE\n", $wk_xg_group))
                      index_pv = STR_INDEX_OF($wk_xg_group, 0, ";")
                      $wk_xg_group = STR_REMOVE($wk_xg_group, 0, index_pv + 1)
                  }
                  else
                  {
                     index_grp = STR_INDEX_OF($wk_xg_group, 0, ";XG GRP")
                     // trovo il ; successivo
                     index_pv = STR_INDEX_OF($wk_xg_group, index_grp + 1, ";")

                     // caso in cui ho il gruppo XG GRP <n> tra altri gruppi (tipo "PROVA;XG GRP 6;TAVOLI"
                     if( index_pv > index_grp )
                     {
                        // DISPLAY2(STRCAT("Caso di ", APICI(), "XG GRP", APICI(), " CENTRALE\n", $wk_xg_group))
                        $wk_xg_group = STR_REMOVE($wk_xg_group, index_grp, index_pv-index_grp)
                     }
                     else
                     {
                        // DISPLAY2(STRCAT("Caso di ", APICI(), "XG GRP", APICI(), " FINALE\n", $wk_xg_group))
                        // caso in cui il gruppo XG GRP <n> è l'ultimo nella stringa dei gruppi (tipo "PROVA;TAVOLI;XG GRP 6"
                        $wk_xg_group = STR_REMOVE($wk_xg_group, index_grp, STRLEN($wk_xg_group)-index_grp)
                     }
                  }
               }
               else
               {
                  // ssono l'unico valore "XG GRP <n>", quindi divento vuoto
                  $wk_xg_group = ""
               }
            }

            // alla fine ri-setto il valore pulito nella struttura (almeno che non sia vuoto)
            if( $wk_xg_group == "" )   { DEL_VAR($wk_xg_idx_tl, "GROUP__") }
            else                       { VAR_VALUESTR_SET($wk_xg_idx_tl, "GROUP__", $wk_xg_group) }
         }

         // HI($wk_xg_idx_tl, 0)

         $wk_xg_i = $wk_xg_i + 1
      }

      // qui posso pulire subito
      DEL_VAR(-1, "wk_xg_i")
      DEL_VAR(-1, "wk_xg_j")
      DEL_VAR(-1, "wk_xg_idx_cm")
      DEL_VAR(-1, "wk_xg_XGlassNumeroProg*")
      DEL_VAR(-1, "wk_xg_XGlassGroups*")
      DEL_VAR(-1, "wk_xg_group")
      DEL_VAR(-1, "wk_xg_groups_tot")
   }

   PROCEDURA CreaGruppiXGlass
   {
      // in input: $wk_xg_Structs
      // Array contente gli idx delle strutture da analizzare.
      // L'array deve essere già correttamente filtrato.
      LogProcedura("Start", "CreaGruppiXGlass",$DBG_GruppiXG)

      $wk_xg_debug_CreaGruppiXGlass = 0

      // -------------------------------------------------
      // 3) ANALIZZO LE STRUTTURE E LE ASSEGNO AI GRUPPI
      // -------------------------------------------------
      $wk_xg_Groups = 0

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_Structs )
      {
         $wk_xg_idx_str = $wk_xg_Structs[$wk_xg_i]

         if( $wk_xg_debug_CreaGruppiXGlass > 0 )
         {
            HI($wk_xg_idx_str, 0)
            DISPLAY2(STRCAT("ANALIZZO STRUTTURA " , STR($wk_xg_idx_str), " - ", NOME($wk_xg_idx_str) ))
         }

         // --------------------------------------------------------------------
         // REGOLE:
         // --------------------------------------------------------------------
         // 1 - gli elementi "agganciati", o che hanno una faccia di contatto,
         //     o che fanno parte dello stesso preconfigurato, allora fanno
         //     parte dello stesso gruppo/composizione ( per definizione un
         //     preconfigurato è una composizione)
         // --------------------------------------------------------------------

         // ANALIZZO L'IDX:
         // di default creo un nuovo gruppo, a meno che la struttura resetti il valore

         //Luca 27/01/2022 ogni preconfigurato nuovo gruppo
         //if( VAR_VAL($wk_xg_idx_str,"pcfto") == 1 )
         //{
         //   $wk_xg_XGlassGroupN_curr = $wk_xg_Groups + 1
         //   VAR_CREATE_NUM($wk_xg_idx_str, "XGlassGroupN", $wk_xg_XGlassGroupN_curr, $MODE_NONE, "")
         //   $wk_xg_Groups = $wk_xg_Groups + 1
         //}

         // se la struttura non è stata valutata
         if( VAR_EXIST($wk_xg_idx_str, "XGlassGroupN" ) != 1 )
         {
            // se sono una struttura a muro
            if( TIPO_POS($wk_xg_idx_str) > 0
              | QUERY_WALL($wk_xg_idx_str, "distance from face R") <= 1 )
            {
               // creo la variabile del gruppo con valore massimo + 1, per confrontarla poi con
               // gli eventuali valori delle strutture vicine.
               $wk_xg_XGlassGroupN_curr = $wk_xg_Groups + 1
               VAR_CREATE_NUM($wk_xg_idx_str, "XGlassGroupN", $wk_xg_XGlassGroupN_curr, $MODE_NONE, "")
               //VAR_VALUE_SET($wk_xg_idx_str, "XGlassChecked", VAR_VAL($wk_xg_idx_str, "XGlassChecked") + 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

               $wk_xg_add_new_group = AssegnaGruppoXG ( $wk_xg_idx_str,  $wk_xg_XGlassGroupN_curr )

               // aumento il contatore di gruppi
               if( $wk_xg_add_new_group == 1 ) { $wk_xg_Groups = $wk_xg_Groups + 1 }
            }
         }

         $wk_xg_i = $wk_xg_i + 1
      }

      // debug con bollinatura
      if( $wk_xg_debug_CreaGruppiXGlass > 0 ) { GOSUB MostraNumeroGruppiXGlass }

      LogProcedura("End", "CreaGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA MostraNumeroGruppiXGlass
   {
      GOSUB EliminaBollinatura
      COMANDO2("BOLLINATURA variabile XGlassGroupN")
      COMANDO2("BOLLINATURA mode 1")
      COMANDO2(STRCAT("BOLLINATURA color ", APICI(), "edge=black,faces=red,text=black", APICI()))
      COMANDO2("BOLLINATURA addall")
      COMANDO2("UPDATE")
   }

   PROCEDURA EliminaBollinatura
   {
      COMANDO2("BOLLINATURA clearall")
      COMANDO2("UPDATE")
   }

   PROCEDURA CreaBoxGruppiXGlass
   {
      LogProcedura("Start", "CreaBoxGruppiXGlass",$DBG_GruppiXG)

      $wk_xg_debug_CreaBoxGruppiXGlass = 0

      // ELIMINO I BOX GIA' PRESENTI
      GOSUB EliminaBoxGruppiXGlass

      // CONTO I GRUPPI DA VISUALIZZARE
      GOSUB ContaGruppiXGlass

      // PROCEDO ALLA CREAZIONE DEI BOX DI INGOMBRO
      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_Groups )
      {
         // attenzione: potrebbero esserci gruppi che
         // non hanno elementi associati, per cui devo
         // effettivamente veriifcare che il gruppo sia
         // valido (tramite with var)
         WITH_VAR("$wk_xg_GroupTemp", "XGlassGroupN", 0, 1, STR($wk_xg_i))

         BuildBoxXGlass(-1, "wk_xg_GroupTemp")

         $wk_xg_i = $wk_xg_i + 1
      }

      LogProcedura("End", "CreaBoxGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA EliminaBoxGruppiXGlass
   {
      LogProcedura("Start", "EliminaBoxGruppiXGlass",$DBG_GruppiXG)

      $wk_xg_debug_EliminaBoxGruppiXGlass = 0

      // Elimino i blocchi (box) di visualizzazione/raggruppamento dei gruppi

      // mi prendo gli elementi presenti
      WITH_ALIAS("$wk_xg_StpGruppoXG", "StpGruppoXG")

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_StpGruppoXG )
      {
         $wk_xg_idx_grp = $wk_xg_StpGruppoXG[$wk_xg_i]

         COMANDO2(STRCAT("DELETE3 ", STR($wk_xg_idx_grp), " //EliminaBoxGruppiXGlass"))
         $wk_xg_i = $wk_xg_i + 1
      }

      COMANDO2("UPDATE")

      LogProcedura("End", "EliminaBoxGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA ContaGruppiXGlass
   {
      LogProcedura("Start", "ContaGruppiXGlass",$DBG_GruppiXG)

      debug_ContaGruppiXGlass = 0

      // se non esiste il numero massimo di gruppi (caso in cui la procedura
      // venga chiamata tramite macro stand-alone e non in corretta
      // sequenza con altre procedura) allora me lo calcolo e lo
      // assegno alla var. "$wk_xg_Groups"

      if( VAR_EXIST(-1, "wk_xg_Groups") == 1 )  { EXITSUB() }

      WITH_VAR("$wk_xg_GroupsAll", "XGlassGroupN", 0, 0, "")

      $wk_xg_Groups = 0

      // ciclo e mi prendo il valore massimo
      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_GroupsAll )
      {
         $wk_xg_XGlassGroupN_curr = VAR_VAL($wk_xg_GroupsAll[$wk_xg_i], "XGlassGroupN")

         if( $wk_xg_XGlassGroupN_curr > $wk_xg_Groups )   { $wk_xg_Groups = $wk_xg_XGlassGroupN_curr }

         $wk_xg_i = $wk_xg_i + 1
      }

      LogProcedura("End", "ContaGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA SettaGruppiXGlass
   {
      LogProcedura("Start", "SettaGruppiXGlass",$DBG_GruppiXG)
      $wk_xg_debug_SettaGruppiXGlass = 0

      // applico i gruuppi calcolati a metron, tramite l'impostazione delle variabili globali dedicate.

      // defnisco
      $wk_xg_XGlassGroupDesc = "XG GRP "

      // Cancello gli eventuali box attivi, altrimenti vengono conteggiati
      GOSUB EliminaBoxGruppiXGlass

      // Procedo All'Analisi
      GOSUB ContaGruppiXGlass

      // pulisco l'array dei gruppi che viene ricreato da metron quando lancio il comando "M4_interfaccia in.raggruppa"
      // in base alle variabili "GROUP__" delle strutture
      DEL_VAR(-1, "GROUPS__*")

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_Groups )
      {
         // attenzione: potrebbero esserci gruppi che
         // non hanno elementi associati, per cui devo
         // effettivamente veriifcare che il gruppo sia
         // valido (tramite with var)
         WITH_VAR("$wk_xg_GroupTemp", "XGlassGroupN", 0, 1, STR($wk_xg_i))

         // se effettivamente è un gruppo valido ( più elementi)
         if( $wk_xg_GroupTemp > 0 )
         {

            $wk_xg_j = 1
            while( $wk_xg_j <= $wk_xg_GroupTemp )
            {
               $wk_xg_idx_str = $wk_xg_GroupTemp[$wk_xg_j]

               $wk_xg_val_group = VAR_VAL_STR($wk_xg_idx_str, "GROUP__")
               $wk_xg_val_new = STRCAT($wk_xg_XGlassGroupDesc, STR($wk_xg_i))

               if( $wk_xg_val_group == "" )  { $wk_xg_prefisso = ""  }
               else                          { $wk_xg_prefisso = ";" }

               if( $wk_xg_val_new != "" )
               {
                  VAR_CREATE_STR($wk_xg_idx_str, "GROUP__", STRCAT($wk_xg_val_group, $wk_xg_prefisso, $wk_xg_val_new), $MODE_NONE, "")

                  // HI($wk_xg_idx_str, 1)
                  // DISPLAY2(STRCAT("SettaGruppiXGlass\nAggiornato gruppo (GROUP__):\n",  VAR_VAL_STR($wk_xg_idx_str, "GROUP__") , "\nidx_str=", STR($wk_xg_idx_str)))
                  // HI($wk_xg_idx_str, 0)
               }

               $wk_xg_j = $wk_xg_j + 1
            }
         }

         $wk_xg_i = $wk_xg_i + 1
      }

      GOSUB EliminaBollinatura

      //// FT 10/09/18 - In coda creo il gruppo per gli elementi free-standing,
      //// in maniera da visualizzare il gruppo nell'apposita interfaccia
      //GOSUB CreaFreeStandingXGlass

      //DISPLAY2(STRCAT("PRE-CHIAMATA RAGGRUPPA\n$wk_dlg_result_genera=", STR($tua_sorella_bitch)))
      // Chiamo l'interfaccia del raggruppamento
      if( VAR_VAL(-1,"wk_On_AssegnaAutoGruppiXGlass") != 1 ) { COMANDO2("M4_interfaccia in.raggruppa") }

      LogProcedura("End", "SettaGruppiXGlass",$DBG_GruppiXG)
   }

   PROCEDURA UnisciGruppiXGlass
   {
      // in input: $wk_xg_Groups
      // Variabile numerica che contiene il numero di gruppi da verificare
      // Nella variabile potrebbero esserci numeratori di gruppi che in realtà
      // non hanno elementi associati.

      LogProcedura("Start", "UnisciGruppiXGlass",$DBG_GruppiXG)

      $wk_xg_debug_UnisciGruppiXGlass = 0

      // ----------------------------------------------
      // 4) VERIFICO SE CI SONO GRUPPI DA FONDERE
      // (ELEMENTI STACCATI MA CHE FANNO PARTE
      // DELLO STESSO GRUPPO)
      // ----------------------------------------------
      // Per fare la verifica seguo questa regola:
      // - per ogni gruppo costruisco un blocco di
      //   ingombro che racchiude il gruppo
      // - eseguo un controllo di collisione del gruppo
      //   per capire se c'è una intersezione e quindi
      //   una fusione dei gruppi in uno unico

      GOSUB CreaBoxGruppiXGlass

      // Verifico le collisioni tra gruppi:
      WITH_ALIAS("$wk_xg_StpGruppoXG", "StpGruppoXG")

      $wk_xg_i = 1
      while( $wk_xg_i <= $wk_xg_StpGruppoXG )
      {
         $wk_xg_idx_grp = $wk_xg_StpGruppoXG[$wk_xg_i]

         cmd = STRCAT("M4_COLLISION hard ", STR($wk_xg_idx_grp))

         $wk_xg_j = $wk_xg_i + 1
         while( $wk_xg_j <= $wk_xg_StpGruppoXG )
         {
            $wk_xg_idx_grp_next = $wk_xg_StpGruppoXG[$wk_xg_j]
            $wk_xg_cmd = STRCAT("M4_COLLISION hard ", STR($wk_xg_idx_grp), " ", STR($wk_xg_idx_grp_next))

            //DISPLAY2(cmd)
            COMANDO2($wk_xg_cmd)

            //--if( debug_UnisciGruppiXGlass > 0 )
            //--{
            //--   HI($wk_xg_idx_grp, 1)
            //--   HI(idx_grp_next, 1)
            //--   DISPLAY2(STRCAT("GRUPPO ", STR(VAR_VAL($wk_xg_idx_grp, "XGlassGroupN")),"\nVERIFICO COLLISIONE TRA ", STR($wk_xg_idx_grp), " E ", STR(idx_grp_next)))
            //--   HI($wk_xg_idx_grp, 0)
            //--   HI(idx_grp_next, 0)
            //--
            //--}

            $wk_collide = 0
            if( VAR_VAL(-1, "COLLISION__") > 0 ) { $wk_collide = 1 }


            //Luca 30/06/2021
            if( VAR_VAL($wk_xg_idx_grp,"Box_PCF") == 1 ) { $wk_collide = 0 }

            //if( VAR_VAL(-1, "COLLISION__") > 0 )
            if( $wk_collide ==1  )
            {
               if( $wk_xg_debug_UnisciGruppiXGlass > 0 )
               {
                  HI($wk_xg_idx_grp, 1)
                  HI($wk_xg_idx_grp_next, 1)
                  DISPLAY2(STRCAT("Collisione trovata!\n", $wk_xg_cmd, "\n$COLLISION__ = ", STR($COLLISION__)))
                  HI($wk_xg_idx_grp, 0)
                  HI($wk_xg_idx_grp_next, 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_xg_XGlassGroupN_curr = VAR_VAL($wk_xg_idx_grp, "XGlassGroupN")
               $wk_xg_XGlassGroupN_next = VAR_VAL($wk_xg_idx_grp_next, "XGlassGroupN")

               $wk_xg_group_list_curr = VAR_VAL($wk_xg_idx_grp, "XGlassGroupIdxList")
               $wk_xg_group_list_next = VAR_VAL($wk_xg_idx_grp_next, "XGlassGroupIdxList")

               // assegno a next il valore di curr
               if( $wk_xg_XGlassGroupN_curr < $wk_xg_XGlassGroupN_next )
               {
                  //-- HI($wk_xg_idx_grp, 1)
                  //-- DISPLAY2(STRCAT("IMPOSTO IL VALORE GRUPPO:\nSono il gruppo ", STR($wk_xg_XGlassGroupN_curr), "\nIl gruppo ", STR($wk_xg_XGlassGroupN_next), " diventerà il gruppo ", STR($wk_xg_XGlassGroupN_curr)))
                  //-- HI($wk_xg_idx_grp, 0)

                  VAR_VALUE_SET($wk_xg_idx_grp_next, "XGlassGroupN", $wk_xg_XGlassGroupN_curr)
                  //VAR_VALUE_SET(idx_grp_next, "XGlassChecked", VAR_VAL(idx_grp_next, "XGlassChecked") + 1)

                  $wk_xg_k = 1
                  while( $wk_xg_k <= $wk_xg_group_list_next )
                  {
                     $wk_xg_idx_str_next = VAR_VAL($wk_xg_idx_grp_next, STRCAT("XGlassGroupIdxList_##", STR($wk_xg_k)))

                     VAR_VALUE_SET($wk_xg_idx_str_next, "XGlassGroupN", $wk_xg_XGlassGroupN_curr)
                     //VAR_VALUE_SET(idx_str_next, "XGlassChecked", VAR_VAL(idx_str_next, "XGlassChecked") + 1)

                     $wk_xg_k = $wk_xg_k + 1
                  }

               }

               if( $wk_xg_XGlassGroupN_curr > $wk_xg_XGlassGroupN_next )
               {
                  //-- HI($wk_xg_idx_grp, 1)
                  //-- DISPLAY2(STRCAT("EREDITO IL VALORE GRUPPO:\nSono il gruppo ", STR($wk_xg_XGlassGroupN_curr), "\nIl gruppo ", STR($wk_xg_XGlassGroupN_curr), " diventerà il gruppo ", STR(XGlassGroupN_next)))
                  //-- HI($wk_xg_idx_grp, 0)

                  VAR_VALUE_SET($wk_xg_idx_grp, "XGlassGroupN", $wk_xg_XGlassGroupN_next)
                  //VAR_VALUE_SET($wk_xg_idx_grp, "XGlassChecked", VAR_VAL($wk_xg_idx_grp, "XGlassChecked") + 1)

                  $wk_xg_k = 1
                  while( $wk_xg_k <= $wk_xg_group_list_curr )
                  {
                     $wk_xg_idx_str_curr = VAR_VAL($wk_xg_idx_grp, STRCAT("XGlassGroupIdxList_##", STR($wk_xg_k)))

                     VAR_VALUE_SET($wk_xg_idx_str_next, "XGlassGroupN", $wk_xg_XGlassGroupN_curr)
                     //VAR_VALUE_SET(idx_str_next, "XGlassChecked", VAR_VAL(idx_str_next, "XGlassChecked") + 1)

                     $wk_xg_k = $wk_xg_k + 1
                  }
               }
            }

            $wk_xg_j = $wk_xg_j + 1
         }

         $wk_xg_i = $wk_xg_i + 1
      }

      if( VAR_VAL(-1,"wk_On_AssegnaAutoGruppiXGlass") == 0 )
      {
         GOSUB MostraNumeroGruppiXGlass
         GOSUB CreaBoxGruppiXGlass
      }

      if( VAR_VAL(-1,"wk_On_AssegnaAutoGruppiXGlass") == 1 )
      {
         GOSUB EliminaBoxGruppiXGlass
      }

      // debug con bollinatura
      if( $wk_xg_debug_UnisciGruppiXGlass > 0 )
      {
         GOSUB MostraNumeroGruppiXGlass
      }

      LogProcedura("End", "UnisciGruppiXGlass",$DBG_GruppiXG)
   }
   //] PROCEDURE GESTIONE GRUPPI XGLASS

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

      //leggo i valori del toplevel

      VT_NFC = 0
      NFC_FlagAttiva = 0

      idx_topl = GetTopLevel(ATTUALE())

      NFC_Attiva_toplevel = VAR_VAL(idx_topl,"NFC_Attiva")

      //Luca 22/09/2021
      if( NOME(idx_topl) == "MadiaSideboardNow" )
      {
         NFC_Attiva_toplevel = VAR_VAL(PADRE(ATTUALE(),2),"NFC_Attiva")
      }

      if( NFC_Attiva_toplevel == 0 ) { EXITSUB() }

      //devo verificare di essere quello più a dx
      //if( NOME(ATTUALE()) == "AntaSingola_368" )
      if( IS_MATCH(NOME(ATTUALE()) , "AntaSingola*") ==1 )
      {
         //COMPONENTI2("wk_fro",idx_topl,"AntaSingola_368")
         COMPONENTI2("wk_fro",idx_topl,"AntaSingola*")

         //filtro l'array dei soli elementi del vano a dx
         if( VAR_VAL(idx_topl,"VAR_ConfigVani") > 1 )
         {
            COMPONENTI2("wk_fro_tmp",idx_topl,"AntaSingola_368")

            wk_cass = 0
            i = 1
            while ( i  <= wk_fro_tmp  )
            {
               if( VAR_VAL(wk_fro_tmp[i],"vano_n") == VAR_VAL(idx_topl,"VAR_ConfigVani") - 1 )
               {
                  ne = wk_fro +1
                  wk_fro = ne
                  wk_fro[ne] = wk_fro_tmp[i]
               }

               i = i + 1
            }
         }

         SET_#(idx_topl)
         SORT_POINT(#base_1,"wk_fro","base_1")

         if( ATTUALE() == wk_fro[wk_fro] )  { NFC_FlagAttiva = NFC_Attiva_toplevel }
      }

      //devo verificare di essere quello più in alto
      if( NOME(ATTUALE()) == "FrontaleCassetto_368"
        | NOME(ATTUALE()) == "Cassetto_Mat"
        | NOME(ATTUALE()) == "Cestone_Mat")
      {
         //COMPONENTI2("wk_fro",idx_topl,"FrontaleCassetto_368")
         COMPONENTI2("wk_fro",idx_topl,NOME(ATTUALE()))

         //filtro l'array dei soli elementi del vano a dx
         if( VAR_VAL(idx_topl,"VAR_ConfigVani") > 1 )
         {
            COMPONENTI2("wk_fro_tmp",idx_topl,"FrontaleCassetto_368")

            wk_fro = 0
            i = 1
            while ( i  <= wk_fro_tmp  )
            {
               idx_cas = PADRE(wk_fro_tmp[i],1)
               if( VAR_VAL(idx_cas,"vano_n") == VAR_VAL(idx_topl,"VAR_ConfigVani") - 1 )
               {
                  ne = wk_fro +1
                  wk_fro = ne
                  wk_fro[ne] = wk_fro_tmp[i]
               }

               i = i + 1
            }
         }

         SET_#(idx_topl)
         SORT_POINT(#base_1,"wk_fro","base_1")

         if( wk_fro > 0 )
         {
            if( ATTUALE() == wk_fro[wk_fro] )  { NFC_FlagAttiva = NFC_Attiva_toplevel }
         }
      }

      //VARIABILE TECNICA PER GEMO
      VT_NFC = NFC_FlagAttiva
   }

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

      //COMANDO2(STRCAT("LOGMSG TLED_CalcolaTrasformatore_368 [",STR(ATTUALE()), "] $OnLoad=",STR($OnLoadOrder) , " LED_Sotto=",STR(LED_Sotto) , " LED_Sopra=",STR(LED_Sopra)))
      //COMANDO2(STRCAT("LOGMSG TLED_CalcolaTrasformatore_368 [",STR(ATTUALE()), "] $OnLoad=",STR($OnLoadOrder) , " idx_LED_sopra=",STR(idx_LED_sopra) , " idx_LED_sotto=",STR(idx_LED_sotto)))

      TLED_Lavorazione     = 0
      TLED_TipoLavorazione = 0

      TLED_Attiva          = 0
      TLED_Tipologia       = 0
      TLED_Watt            = 0

      TLED_Parziale        = 0

      if( VAR_VAL(ATTUALE(),"LED_Sopra") == 0
        & VAR_VAL(ATTUALE(),"LED_Sotto") == 0 ) { EXITSUB() }

      //verifico se il led sopra e sotto terminano sul pannello che sto testando
      wk_test = ATTUALE()
      if( NOME(ATTUALE()) == "Mensola_Glasserie_Modulo" ) { wk_test = PADRE( ATTUALE(), 1) }

      //2 led singolo sopra
      //1 led sopra termina a dx
      //-1 led sopra termina a sx
      wk_led_sopra = GetInfoLedPannello( wk_test, "SOPRA")
      wk_led_sotto = GetInfoLedPannello( wk_test, "SOTTO")

      //COMANDO2(STRCAT("LOGMSG TLED_CalcolaTrasformatore_368 [",STR(ATTUALE()), "] $OnLoad=",STR($OnLoadOrder) , " wk_led_sopra=",STR(wk_led_sopra) , " wk_led_sotto=",STR(wk_led_sotto)))

      wk_watt = 0
      wk_watt_sopra = 0
      wk_watt_sotto = 0

      if( wk_led_sopra != 0 ) { wk_watt_sopra = wk_watt_sopra + VAR_VAL(idx_LED_sopra,"LED_Watt") }

      if( wk_led_sotto != 0 ) { wk_watt_sotto = wk_watt_sotto + VAR_VAL(idx_LED_sotto,"LED_Watt") }

      wk_watt = wk_watt_sotto + wk_watt_sopra

      if( wk_led_sopra != 0 | wk_led_sotto != 0 ) { TLED_Lavorazione = 1 }

      watt_max = 100
      //if( X < 370 )  { watt_max = 24 }
      if( X < 370 )  { watt_max = 30 }

      //Simone 07/12/2022 - L'alimentatore da 24W viene sostituito dal 15W, viene mantenuta la lavorazione d'incasso
      //if( wk_watt > 24 ) { TLED_TipoLavorazione = 1 }
      if( wk_watt > 15 ) { TLED_TipoLavorazione = 1 }
      if( wk_watt > 30 ) { TLED_TipoLavorazione = 2 }

      //Simone 07/12/2022 - Non più necessaria questa distinzione
      //Luca 22/07/2021
      //L'alimentatore da 24W dev'essere utilizzato solamente in caso di pannello retro strutturale e dimensioni L.368 H.184 e L.552 H.184
      //o in caso di pannello retro accessorio quando L.368 H.184. Il tipo di pannello determina anche due fresate di misure differenti
      //if( TLED_TipoLavorazione == 0 )
      //{
      //   //PANNELLO ACCESSORIO
      //   if( NOME(ATTUALE()) == "PannelloRetroXLED_368" )
      //   {
      //      if( X > 368 | Y > 184 ) { TLED_TipoLavorazione = 1 }
      //   }
      //   else
      //   {
      //      //PANNELLO STRUTTURALE
      //      ok_tras_24 = 0
      //      //Simone 12/10/21 - Gestione riduzioni in altezza
      //      //if(  X <= 552 & Y <= 184 )  { ok_tras_24 = 1 }
      //      if( NOME(ATTUALE()) == "MensolaElle_368" )
      //      {
      //         if( X <= 549 & Y < 365 )  { ok_tras_24 = 1 }
      //      }
      //      else
      //      {
      //         if( X <= 552 & Y < 368 )  { ok_tras_24 = 1 }
      //      }
      //
      //      //Luca 22/07/2021
      //      if( ok_tras_24 == 0 )  { TLED_TipoLavorazione = 1 }
      //   }
      //}

      TLED_Parziale = 0
      if( wk_watt > watt_max )
      {
         TLED_Parziale = 1
      }

      TLED_Caso = ""
      if( wk_led_sopra == 2 )
      {
         TLED_Attiva = 1
         TLED_Tipologia = TLED_TipoLavorazione
         TLED_Caso = STRCAT(TLED_Caso,"_S2")
      }

      if( wk_led_sotto == 2 )
      {
         TLED_Attiva = 1
         TLED_Tipologia = TLED_TipoLavorazione
         TLED_Caso = STRCAT(TLED_Caso,"_T2")
      }

      //precedenza al pannello di DX
      if( wk_led_sopra == -1 )
      {
         //verifico se il pannello a DX ha bisogno del trasformatore
         wk_idx_pan_dx = VAR_VAL(idx_LED_sopra,"idx_pan_ref_dx")

         wk_pan_dx = GetInfoLedPannello(wk_idx_pan_dx,"SOTTO")

         //se non ho nulla sopra al pannello finale, oppure ho un led terminale, attivo qui il trasformatore
         if( wk_pan_dx == 0 | wk_pan_dx == 1 )
         {
            TLED_Attiva = 1
            TLED_Tipologia = TLED_TipoLavorazione
            TLED_Caso = STRCAT(TLED_Caso,"_S-1")
         }
      }

      if( wk_led_sotto == -1 )
      {
         //verifico se il pannello a DX ha bisogno del trasformatore
         wk_idx_pan_dx = VAR_VAL(idx_LED_sotto,"idx_pan_ref_dx")

         wk_pan_dx = GetInfoLedPannello(wk_idx_pan_dx,"SOPRA")

         //se non ho nulla sopra al pannello finale, oppure ho un led terminale, attivo qui il trasformatore
         if( wk_pan_dx == 0 | wk_pan_dx == 1 )
         {
            TLED_Attiva = 1
            TLED_Tipologia = TLED_TipoLavorazione
            TLED_Caso = STRCAT(TLED_Caso,"_T-1")
         }
      }

      if( wk_led_sopra == 1 & wk_led_sotto == 2 )
      {
         TLED_Attiva = 1
         TLED_Tipologia = TLED_TipoLavorazione


         ////Per questo l'alimentatore da 24w/220v viene ora inserito solo quando necessario,
         ////ovvero per i pannelli strutturali  L.368 H.184 e L.552 H.184 e i pannelli accessori L.368 H.184
         //if( TLED_TipoLavorazione == 1 )
         //{
         //   if( NOME(ATTUALE()) == "PannelloRetroXLED_368" )
         //   {
         //      if( Xt == 368 & Y==184 )
         //      {
         //
         //      }
         //   }
         //   else
         //   {
         //      if( Xt <= 552 & Y==184 )
         //      {
         //
         //      }
         //   }
         //}

         TLED_Caso = STRCAT(TLED_Caso,"_S1_T2")
      }

      if( wk_led_sotto == -1 & wk_led_sopra == 2 )
      {
         TLED_Attiva = 1
         TLED_Tipologia = TLED_TipoLavorazione
         TLED_Caso = STRCAT(TLED_Caso,"_T1_S2")
      }

      //Luca 10/02/2021
      if( TLED_Attiva == 0 & TLED_TipoLavorazione == 2 )
      {
         if( X < 370 )  { TLED_Lavorazione = 0 }
      }

      if( TLED_Attiva )  { TLED_Watt = wk_watt }

      //non posso mettere entrambi i led sullo stesso trasformatore
      if( wk_led_sotto == -1 & wk_led_sopra == -1 )
      {
         if(  TLED_Parziale == 1 )
         {
            TLED_Watt = wk_watt_sotto

            TLED_TipoLavorazione = 0
            //if( TLED_Watt > 24 ) { TLED_TipoLavorazione = 1 }
            if( TLED_Watt > 15 ) { TLED_TipoLavorazione = 1 }
            if( TLED_Watt > 30 ) { TLED_TipoLavorazione = 2 }

            TLED_Caso = STRCAT(TLED_Caso,"_PARZIALE_SX")
            TLED_Tipologia = TLED_TipoLavorazione
         }
      }

      //verifico se ho già messo il trasformatore a sx oppure devo metterlo qui
      if( wk_led_sopra == 1 )
      {
         idx_pan_sx_led = VAR_VAL(idx_LED_sopra,"idx_pan_ref_sx")
         if( IS_IDX(idx_pan_sx_led) )
         {
            if( VAR_VAL(idx_pan_sx_led,"TLED_Parziale") == 1 )
            {
               TLED_Watt = wk_watt_sopra

               TLED_TipoLavorazione = 0
               //if( TLED_Watt > 24 ) { TLED_TipoLavorazione = 1 }
               if( TLED_Watt > 15 ) { TLED_TipoLavorazione = 1 }
               if( TLED_Watt > 30 ) { TLED_TipoLavorazione = 2 }

               TLED_Lavorazione = 1

               TLED_Attiva = 1
               TLED_Tipologia = TLED_TipoLavorazione
               TLED_Caso = STRCAT(TLED_Caso,"_PARZIALE_DX")
            }
         }
      }

      //COMANDO2(STRCAT("LOGMSG TLED_CalcolaTrasformatore_368 [",STR(ATTUALE()), "] $OnLoad=",STR($OnLoadOrder) , " FINE  TLED_Attiva=",STR(TLED_Attiva)))
   }

   PROCEDURA posa_lavorazione_trasformatore_368
   {
      @escluso = 1 - TLED_Lavorazione

      //Simone 07/12/2022 - 15W
      //24W
      lavx = 180
      lavy = 100
      lavz =  6

      //if( Y > 184 )
      if( Y > 314 )
      {
         lavx = 300
         //lavy = 80
         lavy = 100
      }

      //30W
      if( TLED_TipoLavorazione == 1 )
      {
         lavx = 300
         lavy = 80
      }

      //100W
      if( TLED_TipoLavorazione == 2 )
      {
         lavx = 370
         lavy = 80
      }

      //Simone 06/07/2022 - Per GlassMirror
      if( TLED_TipoLavorazione == 3 )
      {
         lavx = 400
         lavy = 160
      }

      // la fresata si riduce in base allo spazio
      // rientro pan + 19 fisso dai lati
      if( X < 368 ) { lavx = X - 30 - 38 }

      //Luca 22/07/2021
      if( TLED_TipoLavorazione == 0 )
      {
         //PANNELLO ACCESSORIO
         if( NOME(idx_att) == "PannelloRetroXLED_368" )
         {
            lavx = 300
            lavy = 80
            //unica dimensione pannello accessorio in cui è necessaria lav diversa
            if( X == 338 & Y == 154 )
            {
               lavx = 300
               lavy = 60
            }
         }

         //Simone 12/12/2022
         if( NOME(idx_att)== "Mensola_Glasserie_Modulo" )
         {
            lavx = 320
            lavy = 80
         }
      }

      //Simone 27/02/2023 - Sempre un solo tipo di lavorazione nei glass SUV
      if( NOME(idx_att) == "ModuloGlass_368"
        & VAR_VAL(idx_att,"VAR_Glass_SUV") == 1 )
      {
         lavx = 320
         lavy = 130
      }

      if( NOME(idx_att)== "Mensola_Glasserie_Modulo" )
      {
         mis_std = 1
         if( X < 552  )           { mis_std = 0 }
         if( X < 736 & Y <= 184 ) { mis_std = 0 }
      }

      if( NOME(idx_att)== "WallPanel_368"
        | NOME(idx_att)== "368_Mirror" )
      {
         mis_std = 1
         if( X < 450  )          { mis_std = 0 }
         if( X < 736 & Y < 315 ) { mis_std = 0 }
      }

      if( NOME(idx_att)== "AppendiabitiWallPanel_368" )
      {
         mis_std = 1
         if( Y <= 184 )            { mis_std = 0 }
         if( X == 368 & Y == 368 ) { mis_std = 0 }
      }

      if( NOME(idx_att)== "MensolaElle_368" )
      {
         mis_std = 1
         if( X < 549  )           { mis_std = 0 }
         if( X < 733 & Y <= 181)  { mis_std = 0 }
      }

      if( NOME(idx_att)== "ModuloGlass_368"
        & VAR_VAL(idx_att,"VAR_Glass_SUV") == 0 )
      {
         mis_std = 1
         if( X < 552 )               { mis_std = 0 }
         if( X < 736 & Y < 368 )     { mis_std = 0 }
         if( VAR_GlassL_ConScasso )
         {
            //if( X == 552 & Y == 368 ) { mis_std = 0 }
           if( Y == 368
             & (X >= 552 & X <= 600) ) { mis_std = 0 }
         }
      }

      //Simone 12/12/2022
      if( NOME(idx_att)== "Mensola_Glasserie_Modulo" )
      {
         mis_std = 1
         if( X < 1300 )               { mis_std = 0 }
      }

      if( VAR_VAL(idx_att,"mis_std") == 1 )
      {
         lavx = 370
         //lavy = 80
         lavy = 100
      }

      @X = lavx
      @Y = lavy
      @Z = lavz

      posx = X/2 - @X/2
      posy = Y/2 - @Y/2
      //Simone 28/04/2023
      if( X > 1472 & Y < 368 )    { posx = X - @X - 276 }
      panoy = 0

      if( TLED_Lavorazione == 0 ) { EXITSUB() }

      //definito pannello strutturale quello per moduli glass, mensola, appendiabiti, wall panel e 368_mirror
      panstrut = 1
      pany = Y
      panoy = 0

      if( NOME(idx_att) == "ModuloGlass_368"  )
      {
         panoy = RieY_Led
         pany = Y - 2*RieY_Led

         if( VAR_GlassL_ConScasso == 1 )
         {
            //Simone 06/10/21 - Correggo posizione trasformatore
            //posx = RieX_Led + (X - GlassL_Scasso_X)/2 - @X/2
            posx = (X - GlassL_Scasso_X)/2 - @X/2

            if( GlassL_Scasso_Pos == "SX-AL"
              | GlassL_Scasso_Pos == "SX-BA"  ) { posx = posx + GlassL_Scasso_X }

            //Simone 28/04/2023
            if( X > 736
              & VAR_VAL(idx_att,"VAR_Glass_SUV") == 0 ) { posx = X/2 - @X/2 }
         }
      }
      if( NOME(idx_att) == "MensolaElle_368" )           { panoy = RieY_Pan   pany = Y - 2*RieY_Pan }
      if( NOME(idx_att) == "AppendiabitiWallPanel_368" ) { panoy = RiePan_Y   pany = Y - 2*RiePan_Y }
      if( NOME(idx_att) == "WallPanel_368"
        | NOME(idx_att) == "368_Mirror" )
      {
         panoy = RieY_Pan + RieY_pan
         pany = Y - 2*RieY_Pan - 2*RieY_pan
         if( X > 1472 & Y < 368 )    { posx = posx - RieY_Pan - RieY_pan }
      }

      if( NOME(idx_att) == "PannelloRetroXLED_368" )
      {
         panox = RieX
         panoy = RieY

         panstrut = 0

         X = Xt
      }

      //panello accessorio
      if( pany < 338 & panstrut == 0 )
      {
         //posy = panoy + pany - 113 - @Y/2
         posy = panoy + pany - 103 - @Y/2

         if( X > 1800 ) { posx = X - 175 - @X }
      }

      //Simone 28/04/2023 - Riviste ancora le specifiche
      //if( pany < 338 )
      if( pany < 315 )
      {
         posy = panoy + 27
         //if( X > 552 ) { posy = panoy + 17 }
      }

      //if( pany > 154 & pany < 1442 )
      if( pany > 314 & pany < 1442 )
      {
         posy = panoy + pany - @Y - 184
         //if( X < 552 ) { posy = panoy + pany - @Y - 276 }
         if( X < 450 )
         {
            posy = panoy + pany - @Y - 276
            if( pany < 522 ) { posy = panoy + pany - @Y - 200 }
         }

         //dedicate
         if( X == 368 & pany == 338 ) { posy = panoy + pany - @Y - 220 }
      }

      //1472
      if( pany >= 1442 )
      {
         posy = panoy + pany - @Y - 736
      }

      //1840
      if( pany >= 1810 )
      {
         posy = panoy + pany - @Y - 920
      }

      //2208
      if( pany >= 2178 )
      {
         posy = panoy + pany - @Y - 1104
      }

      //uso quelli calcolati nelle regole dell'appendiabiti
      if( NOME(idx_att) == "AppendiabitiWallPanel_368" )
      {
         posx = Scs_Tra_PosX
         posy = Scs_Tra_PosY
         lavx = Scs_Tra_X
         lavy = Scs_Tra_Y

         @X = lavx
         @Y = lavy
      }

      //Simone 06/07/2022 - Lav trasformatore sempre centrata tranne H.736
      if( NOME(idx_att) == "GlassMirror" )
      {
         posx = X/2 - @X/2
         posy = Y/2 - @Y/2
         if( Y == 736) { posy = Y - @Y - RieY_pan - 184 }
      }

      //Simone 12/12/2022
      if( NOME(idx_att)== "Mensola_Glasserie_Modulo" )
      {
         panoy = 15
         posx = X/2 - @X/2
         posy = Y - @Y - panoy - 33
         if( pany >= 246 ) { posy = Y - @Y - panoy - 92 }
         if( pany >= 338 ) { posy = Y - @Y - panoy - 184 }
      }

      //Simone 28/04/2023
      if( NOME(idx_att)== "ModuloGlass_368"
        & VAR_VAL(idx_att,"VAR_GlassL_ConScasso")== 1 )
      {
         if( Y == 368
           & (X >= 552 & X <= 600) )
         {
            posy = panoy + pany - @Y - 200
         }

         //Simone 27/02/2023
         if( VAR_VAL(idx_att,"VAR_Glass_SUV") == 1 )
         {
            posy = Y/2 - @Y/2
         }
      }

      @base_0.x = base_0.x + posx + VAR_VAL(idx_att, "panox")
      @base_0.y = base_0.y + posy
      @base_0.z = base_0.z - 0.5

      idx_LavTrasf = ATTUALE()
   }

   PROCEDURA posa_trasformatore_368
   {
      @escluso = 1 - TLED_Attiva

      //per aver subito la posizione corretta
      @X = 100
      if( TLED_Tipologia > 0 ) { @X = 247 }

      //uso posizione e dimensioni calcolate nel posizionamento della lavorazione
      @base_0.x = base_0.x + posx + lavx/2 - @X/2 + VAR_VAL(idx_att, "panox")
      @base_0.y = base_0.y + posy + lavy/2 - @Y/2
      @base_0.z = base_0.z - 1

      @TLED_Tipologia = TLED_Tipologia
      @TLED_Watt      = TLED_Watt

      if( UN_PADRE("ModuloGlass_368")) { @VT_ALI = 1 }
   }

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

      FLAG_ConPushPull = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("pp",ATTUALE(),1,"PushPull_368")
      if( pp > 0 ) { FLAG_ConPushPull = 1 }
   }

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

      cg_GO_1919    = 0
      cg_GV_3630    = 0
      cg_GV_3636    = 0
      cg_GV_3636_D8 = 0
      cg_G_G3S      = 0
      cg_G_GMW      = 0
      cg_G_CGL      = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_giu",ATTUALE(),0.1,"G368_Giunzione")

      wk_i = 1
      while ( wk_i <= wk_giu  )
      {
         wk_giu_att = wk_giu[wk_i]
         wk_giu_tipologia = VAR_VAL_STR(wk_giu_att, "G368_GiuTipologia")
         wk_giu_rinforzata = VAR_VAL(wk_giu_att, "G368_GiuRinforzata")

         if( wk_giu_tipologia == "GV_3630" ) { cg_GV_3630 = cg_GV_3630 + 1 }
         if( wk_giu_tipologia == "GV_3636" )
         {
            if( wk_giu_rinforzata > 0 ) { cg_GV_3636_D8 = cg_GV_3636_D8 + 1 }
            else                        { cg_GV_3636 = cg_GV_3636 + 1 }
         }

         if( wk_giu_tipologia == "GO_1919" ) { cg_GO_1919 = cg_GO_1919 + 1 }
         if( wk_giu_tipologia == "G_CGL" )   { cg_G_CGL   = cg_G_CGL   + 1 }

         //368 Glass
         if( wk_giu_tipologia == "G_G3S" )
         {
            //Giunzione dedicata se la giunzione del glass è in collisione
            if( VAR_VAL( wk_giu_att, "G368_Collide") == 2 ) { cg_G_GMW = cg_G_GMW + 1 }
            else                                            { cg_G_G3S = cg_G_G3S + 1 }
         }

         wk_i = wk_i + 1
      }

      //WITH_VAR_LOCAL(ATTUALE(),"cg_GO_1919","G368_GiuTipologia",$alfa_con_figli,1,"GO_1919")
      //WITH_VAR_LOCAL(ATTUALE(),"cg_GO_1938","G368_GiuTipologia",$alfa_con_figli,1,"GO_1938")
      //WITH_VAR_LOCAL(ATTUALE(),"cg_GV_3630","G368_GiuTipologia",$alfa_con_figli,1,"GV_3630")
      //WITH_VAR_LOCAL(ATTUALE(),"cg_GV_3636","G368_GiuTipologia",$alfa_con_figli,1,"GV_3636")

      //Luca 25/03/2021
      if( NOME(ATTUALE()) == "Fianco_30MM"
        | NOME(ATTUALE()) == "Fianco_LP22" )
      {
         VT_GV_3630 = cg_GV_3630
         EXITSUB()
      }

      if( NOME(ATTUALE()) == "ModuloGlass_368Sideboard" )
      {
         VT_NRVITI = cg_G_G3S
         VT_GMW    = cg_G_GMW
         EXITSUB()
      }

      if( NOME(ATTUALE()) == "Cuc_ModuloGlass" )
      {
         VT_NRVITI = cg_G_CGL
         EXITSUB()
      }

      //Luca 10/02/2022
      if( NOME(ATTUALE()) == "MensolaLib_AIR" )
      {
         VT_NRVITI = cg_GO_1919
         EXITSUB()
      }

      VT_NGO = cg_GO_1919
      VT_GV_3636 = cg_GV_3636
      VT_GV_3636_D8 = cg_GV_3636_D8
   }

   //********************************************************************************************
   // { PROCEDURE PER GIUNZIONI 368
   //********************************************************************************************
   PROCEDURA CalcolaGiunzioni368
   {
      //LZ 27/01/2022: non vengono posizonate giunzioni se non in azienda
   #ifndef TEC;AZI
      EXITSUB()
   #endif

      COMANDO("Procedura CalcolaLavorazioni_GIU368")
      COMANDO("Procedura CalcolaGiunzioni_GIU368")

      COMANDO("esegui ContCollisioniGiunzioni_368")
   }

   PROCEDURA G368_PosaGrLavorazione
   {
      GOSUB posa_blocco

      //Luca 03/03/2022 escludo per accessori attrezati ai letti
      if( UN_PADRE("Testiera_L21") ) { @escluso = 1 }
   }

   PROCEDURA G368_PosaLavSingola
   {
      @G368_IdLav = IdLav

      var_posx    = VAR_VAL(idx_att,STRCAT("G368_PosX_Lav",STR(IdLav)))
      var_posy    = VAR_VAL(idx_att,STRCAT("G368_PosY_Lav",STR(IdLav)))
      var_posz    = VAR_VAL(idx_att,STRCAT("G368_PosZ_Lav",STR(IdLav)))

      var_dimx    = VAR_VAL(idx_att,STRCAT("G368_DimX_Lav",STR(IdLav)))
      var_dimy    = VAR_VAL(idx_att,STRCAT("G368_DimY_Lav",STR(IdLav)))
      var_dimz    = VAR_VAL(idx_att,STRCAT("G368_DimZ_Lav",STR(IdLav)))

      var_idx     = VAR_VAL(idx_att,STRCAT("G368_idxR_Lav",STR(IdLav)))

      @escluso = 1
      if( IdLav <= G368_NrLav ) { @escluso = 0 }

      @X = var_dimx
      @Y = var_dimy
      @Z = var_dimz

      @base_0.x = base_0.x + var_posx
      @base_0.y = base_0.y + var_posy
      @base_0.z = base_0.z + var_posz

      @idx_ref_lav = var_idx
   }

   PROCEDURA G368_PosaGiunzione
   {
      //Numero e idx giunzione
      @G368_IdGiunzione = IdGiunzione
      VAR_VALUE_SET( idx_att, STRCAT( "G368_Idx_", STR(IdGiunzione)), ATTUALE())

      //Esclusione
      @escluso = 1
      if( IdGiunzione <= G368_NrGiu)
      {
         //Abilito se non sono in collisione
         if( @G368_Escluso != 1)           { @escluso = 0 }

         //Abilito se tutte le giunzioni della lavorazione sono in collisione
         if( @G368_Escluso == 1
           & G368_NrGiuColl == G368_NrGiu) { @escluso = 0 }
      }

      //Posizione
      var_posx    = VAR_VAL(idx_att,STRCAT("G368_PosX_Giu",STR(IdGiunzione)))
      var_posy    = VAR_VAL(idx_att,STRCAT("G368_PosY_Giu",STR(IdGiunzione)))
      var_posz    = VAR_VAL(idx_att,STRCAT("G368_PosZ_Giu",STR(IdGiunzione)))
      var_pos     = VAR_VAL_STR(idx_att,STRCAT("G368_Pos_Giu",STR(IdGiunzione)))

      @G368_PosGiu = var_pos

      @base_0.x = base_0.x + var_posx - $M368_Giu_Sporgenza
      if( G368_PanRef == "FIASX" ) { @base_0.x = base_3.x - @X + var_posx + $M368_Giu_Sporgenza }

      @base_0.y = base_0.y + var_posy - @Y/2
      @base_0.z = base_0.z + var_posz - @Z/2

      if( G368_Orie == "ORIZ" )
      {
         @base_0.x = base_0.x + var_posx - @X/2
         @base_0.y = base_0.y + var_posy - $M368_Giu_Sporgenza
         if( G368_PanRef == "FON" ) { @base_0.y = alto_0.y - @Y + var_posy + $M368_Giu_Sporgenza }

         @base_0.z = base_0.z + var_posz - @Z/2
      }

      @base_0.x = @base_0.x + @COLL_OFFX
      @base_0.y = @base_0.y + @COLL_OFFY
      @base_0.z = @base_0.z + @COLL_OFFZ

      @G368_GiuTipologia = G368_Tipologia

      //Giunzioni verticali d.8 per moduli 368 con sormonto ridotto
      @G368_GiuRinforzata = 0
      if( Y <= 92
        & G368_Tipologia == "GV_3636" ) { @G368_GiuRinforzata = 1 }
   }

   PROCEDURA G368_SetVarRef
   {
      if( ACTION() <= 0 | ACTION() == 2 )        { EXITSUB() }

      if( COMPONENDO() == 1 | $ATTIVA_DLL == 0 ) { EXITSUB() }

      idx_ref_pan = PADRE(ATTUALE(),1)
      idx_ref_mod = PADRE(ATTUALE(),3)

      //IDENTIFICO IL PANNELLO DI RIFERIMENTO
      G368_PanRef = ""
      G368_Orie   = ""

      if( NOME(idx_ref_pan) == "FiancoSX_368" ) { G368_PanRef = "FIASX" G368_Orie = "VERT" }
      if( NOME(idx_ref_pan) == "FiancoDX_368" ) { G368_PanRef = "FIADX" G368_Orie = "VERT" }
      if( NOME(idx_ref_pan) == "Fondo_368" )    { G368_PanRef = "FON"   G368_Orie = "ORIZ" }
      if( NOME(idx_ref_pan) == "Cop_368" )      { G368_PanRef = "COP"   G368_Orie = "ORIZ" }

      if( NOME(idx_ref_pan) == "Fianco_30MM" )
      {
         G368_PanRef = "FIASX"
         if( Lato == "DX" ) { G368_PanRef = "FIADX" }
         G368_Orie = "VERT"

         idx_ref_mod = idx_ref_pan
      }

      if( NOME(idx_ref_pan) == "Fianco_LP22" )
      {
         G368_PanRef = "FIASX"
         if( Lato == "DX" ) { G368_PanRef = "FIADX" }
         G368_Orie = "VERT"
         //idx_ref_mod = idx_ref_pan
      }

      if( NOME(idx_ref_pan) == "Ripiano_30MM" )
      {
         G368_PanRef = "RIPSX"
         if( Lato == "DX" ) { G368_PanRef = "RIPDX" }
         G368_Orie = "VERT"

         idx_ref_mod = idx_ref_pan
      }

      if( NOME(idx_ref_pan) == "Cuc_ModuloGlass"
        | NOME(idx_ref_pan) == "ModuloGlass_368Sideboard" )
      {
         G368_PanRef = "FIASX"
         G368_Orie = "VERT"

         if( Lato == "DX" ) { G368_PanRef = "FIADX" }

         if( Lato == "UP" ) { G368_PanRef = "COP" G368_Orie = "ORIZ" }
         if( Lato == "DW" ) { G368_PanRef = "FON" G368_Orie = "ORIZ" }

         idx_ref_mod = idx_ref_pan
      }

      if( NOME(idx_ref_pan) == "MensolaLib_AIR" )
      {
         G368_PanRef = "COP"
         if( VAR_VAL(ATTUALE(),"Fondo")  ) { G368_PanRef = "FON" }
         G368_Orie = "ORIZ"

         idx_ref_mod = idx_ref_pan
      }

      if( NOME(idx_ref_pan) == "Cuc_GruppoGiunzioni" )
      {
         G368_PanRef = "COP"
         G368_Orie = "ORIZ"

         if( Lato == "DX" ) { G368_PanRef = "FIADX" G368_Orie = "VERT" }
         if( Lato == "SX" ) { G368_PanRef = "FIASX" G368_Orie = "VERT" }

         idx_ref_mod = idx_ref_pan
      }

      G368_ModRefX = VAR_VAL(idx_ref_mod,"X")
      G368_ModRefY = VAR_VAL(idx_ref_mod,"Y")
      G368_ModRefZ = VAR_VAL(idx_ref_mod,"Z")

      //IDENTIFICO LA TIPOLOGIA DI MODULO
      G368_ModRef = ""
      if( NOME(idx_ref_mod) == "Modulo_368" )
      {
         G368_ModRef = "MOD-"
         if( VAR_VAL(idx_ref_mod,"FLAG_Battente") ) { G368_ModRef = STRCAT(G368_ModRef,"BAT") }
         if( VAR_VAL(idx_ref_mod,"FLAG_Ribalta")  ) { G368_ModRef = STRCAT(G368_ModRef,"RIB") }
         if( VAR_VAL(idx_ref_mod,"FLAG_Vasistas") ) { G368_ModRef = STRCAT(G368_ModRef,"VAS") }
         if( VAR_VAL(idx_ref_mod,"FLAG_Cassetto") ) { G368_ModRef = STRCAT(G368_ModRef,"CAS") }

         G368_ModRefZ = VAR_VAL(idx_ref_mod,"Zt")
      }

      if( NOME(idx_ref_mod) == "ModuloGiorno_368" )         { G368_ModRef = "MOD-GIO" } //368 giorno

      if( NOME(idx_ref_mod) == "Fianco_30MM" )              { G368_ModRef = "30M-FIA" } //30MM fianchi
      if( NOME(idx_ref_mod) == "LibreriaPentagram_LP22" )   { G368_ModRef = "30M-FIA" } //Libreria Pentagram

      if( NOME(idx_ref_mod) == "Ripiano_30MM" )             { G368_ModRef = "30M-RIP" } //30MM ripiani

      if( NOME(idx_ref_mod) == "ModuloGlass_368Sideboard" ) { G368_ModRef = "MOD-G3S" } //G3S - Glass 368 sideboard

      if( NOME(idx_ref_mod) == "Cuc_ModuloGlass" )          { G368_ModRef = "CUC-GLS" } //Cucina glass

      if( NOME(idx_ref_mod) == "Cuc_GruppoGiunzioni" )      { G368_ModRef = "CUC-BAS" } //Cucina basi

      if( NOME(idx_ref_mod) == "MensolaLib_AIR" )           { G368_ModRef = "MEN-AIR" } //Air mensole

   }

   PROCEDURA G368_SetLavorazioni
   {
      if( ACTION() <= 0 | ACTION() == 2 )         { EXITSUB() }

      if( COMPONENDO() == 1 | $ATTIVA_DLL == 0 )  { EXITSUB() }

      if( $G368_OnMacro == 1 )                    { GOSUB G368_SetVarRef }

      ScriviSuLog(0,"G368_SetLavorazioni",STRCAT("[",STR(ATTUALE()),"] G368_PanRef=",G368_PanRef," G368_ModRef=",G368_ModRef))

      //Luca 12/02/2021 no per la cucina
      if( UN_PADRE("ModuloPensile_368")
        | UN_PADRE("ModuloPensileCappa_368")
        | UN_PADRE("ModuloPensileScPiatti_368") ) { EXITSUB() }

      //IDENTIFICO IL NUMERO DI LAVORAZIONI, DEFINISCO POSIZIONE E DIMENSIONE DI OGNI LAVORAZIONE
      //per LAVORAZIONE si intende l'area in contatto con un altro mobile

      //reset variabili
      G368_NrLav = 0
      i = 1
      while ( i <= G368_NrLavMax)
      {
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosX_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosY_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosZ_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_DimX_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_DimY_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_DimZ_Lav",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_idxR_Lav",STR(i)) , -1 )
         i = i + 1
      }

      BOX_MODE(0)
      NEAR_GLOBALE2("glavnear",idx_cnear_est,1,"G368_cont_per_near_EST")
      //NEAR_GLOBALE("glavnear",idx_cnear_est,1,1,"G368_cont_per_near_EST")

      ScriviSuLog(0,"G368_SetLavorazioni",STRCAT("[",STR(ATTUALE()),"] G368_PanRef=",G368_PanRef," G368_ModRef=",G368_ModRef, " glavnear=",STR(glavnear)))

      if( glavnear == 0 ) { EXITSUB() }

      SORT_POINT(base_0,"glavnear","base_0")

      //SCORRO LE LAVORAZIONI TROVATE E IDENTIFICO LE AREE COMUNI
      i = 1
      while ( i <= glavnear )
      {
         idx_lavnear         = glavnear[i]
         idx_lavnear_pdr     = PADRE( idx_lavnear, 1)

         idx_lavnear_ref_mod = -1
         if( IsIdx( idx_lavnear_pdr, "idx_ref_mod") ) { idx_lavnear_ref_mod = VAR_VAL( idx_lavnear_pdr, "idx_ref_mod") }

         wk_ins_ref_mod = $ins_top_level
         wk_lavnear_ins_ref_mod = $ins_top_level
         if( IS_IDX(idx_ref_mod)
           & IS_IDX(idx_lavnear_ref_mod) )
         {
            wk_ins_ref_mod = INSERIMENTO2(idx_ref_mod)
            wk_lavnear_ins_ref_mod = INSERIMENTO2(idx_lavnear_ref_mod)
         }

         SET_#(idx_lavnear)

         lav_check = 1

         //Luca 29/01/2021
         if( PADRE( idx_lavnear, 1) == ATTUALE() )                                            { lav_check = 0 }

         if( wk_ins_ref_mod != $ins_top_level
           & IsIdx( ATTUALE(), "idx_ref_mod")
           & IsIdx( idx_lavnear_pdr, "idx_ref_mod")
           & VAR_VAL( ATTUALE(), "idx_ref_mod") == VAR_VAL( idx_lavnear_pdr, "idx_ref_mod") ) { lav_check = 0 }

         if( wk_ins_ref_mod == $ins_top_level
           & wk_lavnear_ins_ref_mod == $ins_top_level )
         {
            if( GetTopLevel(ATTUALE()) == GetTopLevel(idx_lavnear) )                          { lav_check = 0 }
         }
         else
         {
            if( IS_IDX(idx_ref_mod)
              & IS_IDX(idx_lavnear_ref_mod) )
            {
               if( idx_ref_mod == idx_lavnear_ref_mod )                                       { lav_check = 0 }
            }
         }

         //LZ 03/12/2021: permetto spessori 38 solo in preconfigurati
         if( VAR_VAL( ATTUALE(), "in_pcfto") == 0
           & ( VAR_VAL(PADRE(ATTUALE(),1),"Y") == $M368_Spe_Cop38
             | VAR_VAL(PADRE(idx_lavnear,2),"Y") == $M368_Spe_Cop38 ))                        { lav_check = 0 }

         //Luca 23/03/2021
         if( UN_PADRE2(ATTUALE(),"Fianco_30MM")
           & UN_PADRE2(idx_lavnear,"Ripiano_30MM") )                                          { lav_check = 0 }

         if( UN_PADRE2(ATTUALE(),"Ripiano_30MM")
           & UN_PADRE2(idx_lavnear,"Fianco_30MM") )                                           { lav_check = 0 }

         //LZ 27/07/2021: 36e8 sideboard, lavorazioni solo con contenitore 368 legno
         if( UN_PADRE2( ATTUALE(), "ModuloGlass_368Sideboard")
           & UN_PADRE2( idx_lavnear, "Modulo_368") != 1
           & UN_PADRE2( idx_lavnear, "ModuloGiorno_368") != 1 )                               { lav_check = 0 }

         if( UN_PADRE2( ATTUALE(), "Modulo_368") != 1
           & UN_PADRE2( ATTUALE(), "ModuloGiorno_368") != 1
           & UN_PADRE2( idx_lavnear, "ModuloGlass_368Sideboard") )                            { lav_check = 0 }

         //Cucina, moduli glass con basi
         if( UN_PADRE2(ATTUALE(),"Cuc_ModuloGlass")
           & UN_PADRE2(idx_lavnear,"Cuc_GruppoGiunzioni") != 1 )                              { lav_check = 0 }

         if( UN_PADRE2(ATTUALE(),"Cuc_GruppoGiunzioni")
           & UN_PADRE2(idx_lavnear,"Cuc_ModuloGlass") != 1 )                                  { lav_check = 0 }

         //verifico che sia una lavorazione compatibile
         //quindi orizzontali con orizzontale e verticali con verticali
         if( G368_Orie != VAR_VAL_STR(PADRE(idx_lavnear,1),"G368_Orie") )                     { lav_check = 0 }

         if( lav_check )
         {
            offx = 0    dimx = 0
            offz = 0    dimz = 0
            offy = 0    dimy = 0

            if( G368_Orie == "VERT" )
            {
               offx = 0
               dimx = X

               //ALTEZZA
               b0y_lavnear = #base_0.y
               a0y_lavnear = #alto_0.y

               b0y_lav = base_0.y
               a0y_lav = alto_0.y

               if( b0y_lavnear > b0y_lav ) { b0y_lav = b0y_lavnear }

               if( a0y_lavnear < a0y_lav ) { a0y_lav = a0y_lavnear }

               offy = b0y_lav - base_0.y
               dimy = a0y_lav - b0y_lav


               G368_CtrlAllineamentoZ( ATTUALE(), idx_lavnear , offz , dimz )
            }

            if( G368_Orie == "ORIZ" )
            {
               offy = 0
               dimy = Y

               G368_CtrlAllineamentoX( ATTUALE(), idx_lavnear , offx , dimx )

               G368_CtrlAllineamentoZ( ATTUALE(), idx_lavnear , offz , dimz )
            }

            idx = idx_lavnear

            G368_NrLav = G368_NrLav + 1
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_PosX_Lav",STR(G368_NrLav)), offx)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_PosY_Lav",STR(G368_NrLav)), offy)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_PosZ_Lav",STR(G368_NrLav)), offz)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_DimX_Lav",STR(G368_NrLav)), dimx)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_DimY_Lav",STR(G368_NrLav)), dimy)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_DimZ_Lav",STR(G368_NrLav)), dimz)
            VAR_VALUE_SET( ATTUALE(), STRCAT("G368_idxR_Lav",STR(G368_NrLav)), idx )

            // NOTA: gestisco in altro modo, dovrei rivedere la gestione degli idx (G368_idxR_Lav*) e trasformala in una array
            // REV 5, Modulo glass 368 sideboard: unisco tutti i gruppi in uno solo
            //if( REV >= 5
            //  & G368_NrLav > 1
            //  & UN_PADRE2( ATTUALE(), "ModuloGlass_368Sideboard"))
            //{
            //   // X
            //   endx   = offx + dimx + 2*$M368_Rie_Pan
            //   offx1  = G368_PosX_Lav1
            //   endx1  = offx1 + G368_DimX_Lav1 + 2*$M368_Rie_Pan
            //   deltax = endx - endx1

            //   /// Posizione
            //   if( offx < offx1
            //     & endx >= offx1) { G368_PosX_Lav1 = offx }

            //   /// Dimensione
            //   if( endx > endx1
            //     & offx <= endx1) { G368_DimX_Lav1 = G368_DimX_Lav1 + deltax }
            //
            //   // Y
            //   endy  = offy + dimy + 2*$M368_Rie_Pan
            //   offy1  = G368_PosY_Lav1
            //   endy1  = offy1 + G368_DimY_Lav1 + 2*$M368_Rie_Pan
            //   deltay = endy - endy1

            //   /// Posizione
            //   if( offy < offy1
            //     & endy >= offy1) { G368_PosY_Lav1 = offy }

            //   /// Dimensione
            //   if( endy > endy1
            //     & offy <= endy1) { G368_DimY_Lav1 = G368_DimY_Lav1 + deltay }

            //   // Z
            //   endz  = offz + dimz + 2*$M368_Rie_Pan
            //   offz1  = G368_PosZ_Lav1
            //   endz1  = offz1 + G368_DimZ_Lav1 + 2*$M368_Rie_Pan
            //   deltaz = endz - endz1

            //   /// Posizione
            //   if( offz < offz1
            //     & endz >= offz1) { G368_PosZ_Lav1 = offz }

            //   /// Dimensione
            //   if( endz > endz1
            //     & offz <= endz1) { G368_DimZ_Lav1 = G368_DimZ_Lav1 + deltaz }

            //   G368_NrLav = 1
            //}
         }

         i = i + 1
      }
   }

   PROCEDURA G368_SetGiunzioni
   {
      if( ACTION() <= 0 | ACTION() == 2 )        { EXITSUB() }

      if( COMPONENDO() == 1 | $ATTIVA_DLL == 0 ) { EXITSUB() }

      //reset var
      i = 1
      while ( i<= G368_NrGiuMax )
      {
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosX_Giu",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosY_Giu",STR(i)) ,  0 )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosZ_Giu",STR(i)) ,  0 )

         VAR_VALUESTR_SET( ATTUALE() , STRCAT("G368_Pos_Giu",STR(i)) ,  "" )
         i = i + 1
      }

      idx_lav_ref = -1

      BOX_MODE(0)
      NEAR_GLOBALE2( "glavnear", ATTUALE(), 1, "G368_Lavorazione")

      if( glavnear == 0 ) { EXITSUB() }

      i = 1
      while ( i <= glavnear )
      {
         glavnear_att = glavnear[i]

         if( glavnear_att != ATTUALE() )
         {
            glavnear_orie = VAR_VAL_STR( glavnear_att, "G368_Orie")

            if( glavnear_orie == G368_Orie )
            {
               glavnear_idx_ref_mod = -1
               if( IsIdx( glavnear_att, "idx_ref_mod")) { glavnear_idx_ref_mod = VAR_VAL( glavnear_att, "idx_ref_mod") }

               wk_ins_ref_mod = $ins_top_level
               wk_glavnear_ins_ref_mod = $ins_top_level
               if( IS_IDX(idx_ref_mod)
                 & IS_IDX(glavnear_idx_ref_mod) )
               {
                  wk_ins_ref_mod = INSERIMENTO2(idx_ref_mod)
                  wk_glavnear_ins_ref_mod = INSERIMENTO2(glavnear_idx_ref_mod)
               }

               wk_check_topl = 0
               if( wk_ins_ref_mod == $ins_top_level
                 & wk_glavnear_ins_ref_mod == $ins_top_level )
               {
                  if( GetTopLevel(glavnear[i]) == GetTopLevel(ATTUALE())) { wk_check_topl = 1 }
               }
               else
               {
                  if( IS_IDX(idx_ref_mod)
                    & IS_IDX(glavnear_idx_ref_mod) )
                  {
                     if( idx_ref_mod == glavnear_idx_ref_mod )            { wk_check_topl = 2 }
                  }
               }

               if( wk_check_topl == 0 )
               {
                  idx_lav_ref = glavnear[i]
                  i = glavnear
               }
            }
         }

         i = i + 1
      }

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

      //Luca 09/03/2021
      //informazione del modulo padre della lavorazione vicina trovata
      G368_ModLavRef = ""
      if( NOME(GetTopLevel(idx_lav_ref)) == "Modulo_368" )
      {
         G368_ModLavRef = "MOD-"
         if( VAR_VAL(GetTopLevel(idx_lav_ref),"FLAG_Battente") )         { G368_ModLavRef = STRCAT(G368_ModLavRef,"BAT") }
         if( VAR_VAL(GetTopLevel(idx_lav_ref),"FLAG_Ribalta")  )         { G368_ModLavRef = STRCAT(G368_ModLavRef,"RIB") }
         if( VAR_VAL(GetTopLevel(idx_lav_ref),"FLAG_Vasistas") )         { G368_ModLavRef = STRCAT(G368_ModLavRef,"VAS") }
         if( VAR_VAL(GetTopLevel(idx_lav_ref),"FLAG_Cassetto") )         { G368_ModLavRef = STRCAT(G368_ModLavRef,"CAS") }
      }

      if( NOME(GetTopLevel(idx_lav_ref)) == "ModuloGiorno_368" )         { G368_ModLavRef = "MOD-GIO" }

      if( NOME(GetTopLevel(idx_lav_ref)) == "ModuloGlass_368Sideboard" ) { G368_ModLavRef = "MOD-G3S" }

      if( NOME(GetTopLevel(idx_lav_ref)) == "Fianco_30MM" )              { G368_ModLavRef = "30M-FIA" }
      if( UN_PADRE2( idx_lav_ref, "Fianco_LP22"))                        { G368_ModLavRef = "30M-FIA" }

      if( NOME(GetTopLevel(idx_lav_ref)) == "Ripiano_30MM" )             { G368_ModLavRef = "30M-RIP" }

      if( NOME(GetTopLevel(idx_lav_ref)) == "Cuc_ModuloGlass" )          { G368_ModLavRef = "CUC-GLS" }
      if( UN_PADRE2( idx_lav_ref, "Cuc_GruppoGiunzioni") )               { G368_ModLavRef = "CUC-BAS" }

      SET_#(idx_lav_ref)

      //LA LAVORAZIONE TROVATA DEVE ESSERE UGUALE
      G368_AttivaGiu = 0
      G368_NrGiu     = 0

      wk_check = 0
      if( IS_MATCH(G368_ModRef,"30M*") == 1
        | IS_MATCH(G368_ModLavRef,"30M*") == 1 )
      {
         wk_check = 1
         GOSUB G368_SetGiunzioni_30MM
      }

      if( wk_check == 0
        & IS_MATCH(G368_ModRef, "MOD-*"))
      {
         if( G368_ModRef == "MOD-G3S")
         {
            wk_check = 2
            G368_AttivaGiu = 1

            if( REV >= 6
              & ( in_pcfto > 0
                | VAR_VAL( idx_lav_ref, "in_pcfto") > 0)
              & PADRE( idx_lav_ref, -1) != PADRE( ATTUALE(), -1)) { G368_AttivaGiu = 0 }
         }
         else
         {
            if( G368_ModLavRef != "MOD-G3S")
            {
               wk_check = 3
               GOSUB G368_SetGiunzioni_368
            }
         }
      }

      if( wk_check == 0
        & ( IS_MATCH(G368_ModRef,"CUC*") == 1
          | IS_MATCH(G368_ModLavRef,"CUC*") == 1))
      {
         wk_check = 4
         GOSUB G368_SetGiunzioni_Cuc
      }

      if( G368_AttivaGiu == 0) { EXITSUB() }

      G368_ValVar_Dim1 = Z
      G368_ValVar_Dim2 = Y

      G368_Tipologia = "GV_3636"
      if( UN_PADRE2(idx_lav_ref,"*30MM") == 1
        | UN_PADRE("*30MM") == 1
        | UN_PADRE2(idx_lav_ref,"*Pentagram*") == 1
        | UN_PADRE("*Pentagram*") == 1  ) { G368_Tipologia = "GV_3630" }

      if( G368_Orie == "ORIZ" )
      {
         G368_Tipologia = "GO_1919"

         //Gestito con la combinazione di VT_NGO > 0 e VT_PCF > 0
         //if( VAR_VAL(#idx_ref_pan,"Y") == 38
         //   | VAR_VAL(idx_ref_pan,"Y") == 38  ) { G368_Tipologia = "GO_1938" }

         G368_ValVar_Dim2 = X
      }

      if( UN_PADRE("Ripiano_30MM") )
      {
         G368_GiuFronte    = 1
         G368_GiuRetro     = 1
         G368_GiuInf       = 1

         G368_NrGiu = 1
         offy = Y/2
         offz = Z - 50
         pos = "FR-IN"
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosY_Giu",STR(G368_NrGiu)) ,  offy )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosZ_Giu",STR(G368_NrGiu)) ,  offz )
         VAR_VALUESTR_SET( ATTUALE() , STRCAT("G368_Pos_Giu",STR(G368_NrGiu)) , pos )

         G368_NrGiu = 2
         offy = Y/2
         offz = 50
         pos = "RT-IN"
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosY_Giu",STR(G368_NrGiu)) ,  offy )
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosZ_Giu",STR(G368_NrGiu)) ,  offz )
         VAR_VALUESTR_SET( ATTUALE() , STRCAT("G368_Pos_Giu",STR(G368_NrGiu)) , pos )
      }

      //LZ 08/03/2022: riduco limite, vedi elements 09966.
      //if( Y < 92 )  { EXITSUB() }
      //if( G368_ValVar_Dim2 < 92 ) { EXITSUB() }
      wk_y_var_test = "M368_Giu_YMin"
      if( REV > 0 ) { wk_y_var_test = "M368_Giu_YMin_R1" }

      if( G368_ValVar_Dim2 < VAR_VAL( -1, wk_y_var_test) ) { EXITSUB() }

      G368_GiuFronte    = 0
      G368_GiuRetro     = 0

      G368_GiuInf       = 0
      G368_GiuSup       = 0
      G368_GiuCentro    = 0
      G368_GiuCentro1   = 0
      G368_GiuCentro2   = 0

      wk_x_test = G368_ModRefX
      wk_y_test = G368_ModRefY
      wk_z_test = G368_ModRefZ

      //MODULI 368
      if( Y < G368_ModRefY )  { wk_y_test = Y }
      if( Z < G368_ModRefZ )  { wk_z_test = Z }

      if( G368_Orie == "ORIZ" )
      {
         wk_y_test = G368_ModRefX

         if( G368_ValVar_Dim2 < G368_ModRefX )  { wk_y_test = G368_ValVar_Dim2 }
      }

      if( wk_z_test <= 180 )
      {
         G368_GiuFronte    = 1
         G368_GiuInf       = 1
         G368_GiuSup       = 1

         if( wk_y_test <= 184 )
         {
            G368_GiuInf       = 0
            G368_GiuSup       = 0
            G368_GiuCentro    = 1
         }
      }

      if( wk_z_test >= 248 )
      {
         G368_GiuFronte    = 1
         G368_GiuRetro     = 1

         if( wk_y_test <= 184 )
         {
            G368_GiuCentro    = 1
         }

         if( wk_y_test > 184 )
         {
            G368_GiuInf       = 1
            G368_GiuSup       = 1
         }

         if( wk_y_test >= 1840 )
         {
            G368_GiuCentro    = 1
         }

         if( wk_y_test >= 2208 )
         {
            G368_GiuCentro    = 0
            G368_GiuCentro1   = 1
            G368_GiuCentro2   = 1
         }

         //if( Y < 184 )
         //{
         //   G368_GiuInf    = 0
         //   G368_GiuSup    = 0
         //   G368_GiuCentro = 1
         //}
      }

      //MODULI 368 GLASS
      if( G368_ModRef == "MOD-G3S" )
      {
         G368_Tipologia = "G_G3S"

         G368_GiuFronte    = 0
         G368_GiuRetro     = 0

         G368_GiuInf       = 0
         G368_GiuSup       = 0
         G368_GiuCentro    = 0
         G368_GiuCentro1   = 0
         G368_GiuCentro2   = 0

         G368_Caso         = "0"

         wk_x_test = G368_ModRefX
         wk_y_test = G368_ModRefY
         wk_z_test = G368_ModRefZ

         //Contenitori vicini
         //LZ 16/09/2021: specifiche errate, per passare a solo una giunzione devo avere un contenitore (sopra O sotto) E (uno dx O sx)
         //wk_368 = VAR_VAL( idx_ref_pan, "VAR_368Vicini")
         $wk_368glass_near_nomi_test = 2
         $wk_368glass_near_nomi_test[1] = "Modulo_368"
         $wk_368glass_near_nomi_test[2] = "ModuloGiorno_368"

         $wk_368glass_near_verso1_test = 2
         $wk_368glass_near_verso1_test[1] = "sopra"
         $wk_368glass_near_verso1_test[2] = "sotto"

         $wk_368glass_near_verso2_test = 2
         $wk_368glass_near_verso2_test[1] = "sx"
         $wk_368glass_near_verso2_test[2] = "dx"

         wk_368 = 0
         wk_368_updw = 0
         wk_368_dxsx = 0

         $wk_i = 0
         while( inc($wk_i) <= $wk_368glass_near_verso1_test)
         {
            $wk_368glass_near_verso1_test_att = $wk_368glass_near_verso1_test[$wk_i]
            $wk_var_test = STRCAT( "idx_", $wk_368glass_near_verso1_test_att)
            $wk_idx_test = VAR_VAL( idx_ref_pan, $wk_var_test)

            if( VAR_EXIST( idx_ref_pan, $wk_var_test) & IS_IDX($wk_idx_test))
            {
               $wk_nome_test = NOME($wk_idx_test)

               if( REV >= 6
                 & ( in_pcfto > 0
                   | VAR_VAL( $wk_idx_test, "in_pcfto") > 0)
                 & PADRE( $wk_idx_test, -1) != PADRE( ATTUALE(), -1)) { continue }

               $wk_k = 0
               while( inc($wk_k) <= $wk_368glass_near_nomi_test)
               {
                  $wk_368glass_near_nomi_test_att = $wk_368glass_near_nomi_test[$wk_k]

                  if( $wk_nome_test == $wk_368glass_near_nomi_test_att) { wk_368_updw = wk_368_updw + 1 }
               }
            }
         }

         $wk_i = 0
         while( inc($wk_i) <= $wk_368glass_near_verso2_test)
         {
            $wk_368glass_near_verso2_test_att = $wk_368glass_near_verso2_test[$wk_i]
            $wk_var_test = STRCAT( "idx_", $wk_368glass_near_verso2_test_att)
            $wk_idx_test = VAR_VAL( idx_ref_pan, $wk_var_test)

            if( VAR_EXIST( idx_ref_pan, $wk_var_test) & IS_IDX($wk_idx_test))
            {
               $wk_nome_test = NOME($wk_idx_test)

               if( REV >= 6
                 & ( in_pcfto > 0
                   | VAR_VAL( $wk_idx_test, "in_pcfto") > 0)
                 & PADRE( $wk_idx_test, -1) != PADRE( ATTUALE(), -1)) { continue }

               $wk_k = 0
               while( inc($wk_k) <= $wk_368glass_near_nomi_test)
               {
                  $wk_368glass_near_nomi_test_att = $wk_368glass_near_nomi_test[$wk_k]

                  if( $wk_nome_test == $wk_368glass_near_nomi_test_att) { wk_368_dxsx = wk_368_dxsx + 1 }
               }
            }
         }

         wk_368 = SE_NUM(wk_368_updw>0,1,0) + SE_NUM(wk_368_dxsx>0,1,0)

         //Controllo collisione con ripiano vicino
         wk_rip = VAR_VAL( idx_ref_pan, "ConRipiano")
         wk_rip_coll = 0

         if( G368_Orie == "VERT"
           & VAR_EXIST( ATTUALE(), "idx_pan") )
         {
            wk_tolleranza = 20
            wk_rip_near = 0
            wk_idx_top_near = -1
            if( IS_IDX(idx_pan) ) { wk_idx_top_near = GetTopLevel(idx_pan) }
            if( IS_IDX(wk_idx_top_near) ) { COMPONENTI2( "wk_rip_near", wk_idx_top_near, "Rip*368") }

            wk_j = 1
            wk_y_test_coll = VAR_VAL( idx_ref_pan, "base_0.y") + VAR_VAL( idx_ref_pan, "Y")/2
            while( wk_j <= wk_rip_near
                 & wk_rip_coll == 0 )
            {
               wk_rip_near_att = wk_rip_near[wk_j]

               if( wk_y_test_coll >= VAR_VAL( wk_rip_near_att, "base_0.y") - wk_tolleranza
                 & wk_y_test_coll <= VAR_VAL( wk_rip_near_att, "alto_0.y") + wk_tolleranza) { wk_rip_coll = wk_rip_coll + 1 }

               wk_j = wk_j + 1
            }
         }

         //Controllo collisione con meccanismo ribalta
         wk_mw_coll = 0

         if( G368_Orie == "VERT"
           & VAR_EXIST( ATTUALE(), "idx_pan") )
         {
            wk_tolleranza = 20
            wk_mw_near = 0

            wk_idx_top_near = -1
            if( IS_IDX(idx_pan) )
            {
               BOX_MODE(0)
               NEAR_GLOBALE2( "wk_mw_near", idx_pan, wk_tolleranza, "Miniwinch_368")
            }

            wk_j = 1
            wk_y_test_coll = VAR_VAL( idx_ref_pan, "base_0.y") + VAR_VAL( idx_ref_pan, "Y")/2
            while( wk_j <= wk_mw_near
                 & wk_mw_coll == 0 )
            {
               wk_mw_near_att = wk_mw_near[wk_j]

               if( wk_y_test_coll >= VAR_VAL( wk_mw_near_att, "base_0.y") - wk_tolleranza
                 & wk_y_test_coll <= VAR_VAL( wk_mw_near_att, "alto_0.y") + wk_tolleranza) { wk_mw_coll = wk_mw_coll + 1 }

               wk_j = wk_j + 1
            }
         }

         //LZ 13/10/2021: riviste NUOVAMENTE le specifiche, riscrivo i controlli
         ////Il numero di giunzioni varia in base al numero di lati giuntati:
         ////Una giunzione se ho più di un fissaggio
         //
         ////0 - Caso standard, due giunzioni per lato
         //G368_GiuFronte    = 1
         //G368_GiuRetro     = 0
         //G368_GiuCentro    = 0
         //G368_GiuInf       = 1
         //G368_GiuSup       = 1
         //
         ////1 - per altezza 184 le due giunzioni sono una frontale e una retro
         //if( G368_Orie == "VERT"
         //  & wk_y_test <= 184 )
         //{
         //   G368_GiuFronte    = 0
         //   G368_GiuRetro     = 1
         //   G368_GiuCentro    = 0
         //   G368_GiuInf       = 1
         //   G368_GiuSup       = 1
         //}
         //
         ////2 - Se più di un lato è giuntato con più contenitori 368 legno
         //if( wk_368 > 1 )
         //{
         //   if( G368_Orie == "ORIZ"
         //     & wk_x_test < 736 )
         //   {
         //      G368_GiuFronte    = 1
         //      G368_GiuRetro     = 0
         //      G368_GiuCentro    = 1
         //      G368_GiuInf       = 0
         //      G368_GiuSup       = 0
         //   }
         //
         //   if( G368_Orie == "VERT"
         //     & wk_y_test < 736 )
         //   {
         //      G368_GiuFronte    = 1
         //      G368_GiuRetro     = 0
         //      G368_GiuCentro    = 1
         //      G368_GiuInf       = 0
         //      G368_GiuSup       = 0
         //   }
         //}
         //
         ////3 - non posso posizionare una sola giunzione centrale se collido con un ripiano a fianco o è presente un ripiano centrale
         //if( G368_Orie == "VERT"
         //  & G368_GiuInf + G368_GiuSup + G368_GiuCentro == 1 )
         //{
         //   if( wk_rip_coll > 0
         //     | ( wk_rip > 0
         //       & IsEven(wk_rip) == 0 ))
         //   {
         //      G368_GiuFronte    = 1
         //      G368_GiuRetro     = 0
         //      G368_GiuCentro    = 0
         //      G368_GiuInf       = 1
         //      G368_GiuSup       = 1
         //   }
         //}

         //Il numero di giunzioni varia in base al numero di lati giuntati:

         //0 - Caso standard, due giunzioni per lato
         G368_GiuFronte    = 1
         G368_GiuRetro     = 0
         G368_GiuCentro    = 0
         G368_GiuInf       = 1
         G368_GiuSup       = 1

         //1 - Se giuntato a (DX o SX) E (SOPRA O SOTTO)
         if( wk_368 > 1 )
         {
            // 1.1 - larghezza > altezza
            //       1 foro a lato e 2 fori sotto o sopra
            if( wk_x_test > wk_y_test )
            {
               if( G368_Orie == "ORIZ" )
               {
                  G368_GiuFronte    = 1
                  G368_GiuRetro     = 0
                  G368_GiuCentro    = 0
                  G368_GiuInf       = 1
                  G368_GiuSup       = 1

                  G368_Caso         = STRCAT( G368_Caso, " - 1.1.1")
               }

               if( G368_Orie == "VERT" )
               {
                  G368_GiuFronte    = 1
                  G368_GiuRetro     = 0
                  G368_GiuCentro    = 1
                  G368_GiuInf       = 0
                  G368_GiuSup       = 0

                  G368_Caso         = STRCAT( G368_Caso, " - 1.1.2")
               }
            }

            // 1.2 - altezza >= larghezza
            //       2 fori a lato e 1 foro sopra o sotto
            else
            {
               // 1.2.1
               if( G368_Orie == "ORIZ" )
               {
                  G368_GiuFronte    = 1
                  G368_GiuRetro     = 0
                  G368_GiuCentro    = 1
                  G368_GiuInf       = 0
                  G368_GiuSup       = 0

                  G368_Caso         = STRCAT( G368_Caso, " - 1.2.1")
               }

               // 1.2.2
               if( G368_Orie == "VERT" )
               {
                  G368_GiuFronte    = 1
                  G368_GiuRetro     = 0
                  G368_GiuCentro    = 0
                  G368_GiuInf       = 1
                  G368_GiuSup       = 1

                  G368_Caso         = STRCAT( G368_Caso, " - 1.2.2")
               }
            }

            // 1.3 - Se giuntato a (DX E SX) E (SOPRA O SOTTO)
            if( wk_368_dxsx > 1 & wk_368_updw > 0 )
            {
               // 1.3.1 foro per lato
               if( G368_Orie == "VERT" )
               {
                  G368_GiuFronte    = 1
                  G368_GiuRetro     = 0
                  G368_GiuCentro    = 1
                  G368_GiuInf       = 0
                  G368_GiuSup       = 0

                  G368_Caso         = STRCAT( G368_Caso, " - 1.3.1")
               }

               // 1.3.2 - Larghezza <= 552
               //       1 foro sotto o sopra
               if( wk_x_test <= 552 )
               {
                  if( G368_Orie == "ORIZ" )
                  {
                     G368_GiuFronte    = 1
                     G368_GiuRetro     = 0
                     G368_GiuCentro    = 1
                     G368_GiuInf       = 0
                     G368_GiuSup       = 0

                     G368_Caso         = STRCAT( G368_Caso, " - 1.3.2")
                  }
               }
               // 1.3.3 - Larghezza > 552
               //       2 fori sotto o sopra
               else
               {
                  if( G368_Orie == "ORIZ" )
                  {
                     G368_GiuFronte    = 1
                     G368_GiuRetro     = 0
                     G368_GiuCentro    = 0
                     G368_GiuInf       = 1
                     G368_GiuSup       = 1

                     G368_Caso         = STRCAT( G368_Caso, " - 1.3.3")
                  }
               }
            }

            // 1.4 - Se giuntato a (DX O SX) E (SOPRA E SOTTO)
            if( wk_368_dxsx > 0 & wk_368_updw > 1 )
            {
               // 1.4.1 - Larghezza <= 552
               if( wk_x_test <= 552 )
               {
                  //1 foro sotto e 1 foro sopra
                  if( G368_Orie == "ORIZ" )
                  {
                     G368_GiuFronte    = 1
                     G368_GiuRetro     = 0
                     G368_GiuCentro    = 1
                     G368_GiuInf       = 0
                     G368_GiuSup       = 0

                     G368_Caso         = STRCAT( G368_Caso, " - 1.4.1")
                  }

                  // 1.4.1.1 - altezza <= 736
                  //         1 foro a lato
                  if( wk_y_test <= 736 )
                  {
                     if( G368_Orie == "VERT" )
                     {
                        G368_GiuFronte    = 1
                        G368_GiuRetro     = 0
                        G368_GiuCentro    = 1
                        G368_GiuInf       = 0
                        G368_GiuSup       = 0

                        G368_Caso         = STRCAT( G368_Caso, " - 1.4.1.1")
                     }
                  }
                  // 1.4.1.2 - altezza > 736
                  //         2 fori a lato
                  else
                  {
                     if( G368_Orie == "VERT" )
                     {
                        G368_GiuFronte    = 1
                        G368_GiuRetro     = 0
                        G368_GiuCentro    = 0
                        G368_GiuInf       = 1
                        G368_GiuSup       = 1

                        G368_Caso         = STRCAT( G368_Caso, " - 1.4.1.2")
                     }
                  }
               }

               // 1.4.2 - larghezza > 552
               //       1 foro a lato e 2 fori sotto e 2 fori sopra
               else
               {
                  // 1.4.2.1
                  if( G368_Orie == "ORIZ" )
                  {
                     G368_GiuFronte    = 1
                     G368_GiuRetro     = 0
                     G368_GiuCentro    = 0
                     G368_GiuInf       = 1
                     G368_GiuSup       = 1

                     G368_Caso         = STRCAT( G368_Caso, " - 1.4.2.1")
                  }

                  // 1.4.2.2
                  if( G368_Orie == "VERT" )
                  {
                     G368_GiuFronte    = 1
                     G368_GiuRetro     = 0
                     G368_GiuCentro    = 1
                     G368_GiuInf       = 0
                     G368_GiuSup       = 0

                     G368_Caso         = STRCAT( G368_Caso, " - 1.4.2.2")
                  }
               }
            }
         }

         // 2 - Eccezioni
         // 2.1 - nei fianchi sono presenti più G368_Lavorazione per G368_GruppoLavorazione, tratto come un unica lavorazione
         if( G368_NrLav > 1
           & G368_Orie == "VERT"
           & G368_GiuInf + G368_GiuSup + G368_GiuCentro > 1)
         {
            G368_GiuCentro    = 0
            G368_GiuInf       = 0
            G368_GiuSup       = 0

            G368_Caso         = STRCAT( G368_Caso, " - 2.1")

            if( G368_IdLav == 1)          { G368_GiuInf = 1  G368_Caso = STRCAT( G368_Caso, " - 2.1.1") }
            if( G368_IdLav == G368_NrLav) { G368_GiuSup = 1  G368_Caso = STRCAT( G368_Caso, " - 2.1.2") }
         }

         // 2.2 - Collisioni centrali
         if( G368_Orie == "VERT"
           & G368_GiuCentro == 1)
         {
            // 2.2.1 - Ripiano: non posso posizionare una sola giunzione centrale se collido con un ripiano a fianco o è presente un ripiano centrale
            if( wk_rip_coll > 0
              | ( wk_rip > 0
                & IsEven(wk_rip) == 0 ))
            {
               G368_GiuFronte    = 1
               G368_GiuRetro     = 0
               G368_GiuCentro    = 0
               G368_GiuInf       = 1
               G368_GiuSup       = 1

               G368_Caso         = STRCAT( G368_Caso, " - 2.2.1")
            }

            // 2.2.2 - Non posso posizionare una sola giunzione centrale se collido con un meccanisco ribalta
            //         Con la REV 5, le giunzioni sono state indietreggiate e non collidono più, ma lascio ugualmente
            if( wk_mw_coll > 0)
            {
               G368_GiuFronte    = 1
               G368_GiuRetro     = 0
               G368_GiuCentro    = 0
               G368_GiuInf       = 1
               G368_GiuSup       = 1

               G368_Caso         = STRCAT( G368_Caso, " - 2.2.2")

               //2.2.2.1 - per glass di altezza 276, disabilito giunzione superiore
               if( wk_y_test < 368
                 & wk_y_test > 184)
               {
                  G368_GiuSup    = 0

                  G368_Caso      = STRCAT( G368_Caso, " - 2.2.2.1")
               }
            }
         }

         // 2.3 - Contenitore di altezza <= 184, le due giunzioni sono una frontale e una retro
         if( G368_Orie == "VERT"
           & wk_y_test <= 184
           & G368_GiuInf + G368_GiuSup + G368_GiuCentro > 1 )
         {
            G368_GiuFronte    = 0
            G368_GiuRetro     = 1
            G368_GiuCentro    = 0
            G368_GiuInf       = 1
            G368_GiuSup       = 1

            G368_Caso         = STRCAT( G368_Caso, " - 2.3")
         }

         // 2.4 - Il fondo/coperchio del contenitore vetro L920 x H368 del modello n.1353 del listino avrà 1 solo foro di fissaggio.
         if( G368_Orie == "ORIZ"
           & X < (wk_x_test/4)*3
           & wk_368_updw > 1
           & wk_x_test == 920
           & wk_y_test == 368 )
         {
            G368_GiuFronte    = 1
            G368_GiuRetro     = 0
            G368_GiuCentro    = 1
            G368_GiuInf       = 0
            G368_GiuSup       = 0

            G368_Caso         = STRCAT( G368_Caso, " - 2.4")
         }
      }

      if( G368_ModRef == "CUC-GLS" )
      {
         G368_Tipologia = "G_CGL"

         G368_GiuFronte    = 0
         G368_GiuRetro     = 0

         G368_GiuInf       = 0
         G368_GiuSup       = 0
         G368_GiuCentro    = 0
         G368_GiuCentro1   = 0
         G368_GiuCentro2   = 0

         wk_x_test = G368_ModRefX
         wk_y_test = Y
         wk_z_test = Z

         if( G368_Orie == "VERT" )
         {
            G368_GiuFronte    = 1
            G368_GiuRetro     = 1
            G368_GiuCentro    = 0
            G368_GiuInf       = 0
            G368_GiuSup       = 1

            if( wk_y_test > 252 )
            {
               G368_GiuFronte    = 1
               G368_GiuRetro     = 1
               G368_GiuCentro    = 0
               G368_GiuInf       = 1
               G368_GiuSup       = 1
            }

            if( wk_y_test > 828 )
            {
               G368_GiuFronte    = 1
               G368_GiuRetro     = 1
               G368_GiuCentro    = 1
               G368_GiuInf       = 1
               G368_GiuSup       = 1
            }
         }

         if( G368_Orie == "ORIZ" )
         {
            G368_GiuFronte    = 1
            G368_GiuRetro     = 1
            G368_GiuCentro    = 1
            G368_GiuInf       = 0
            G368_GiuSup       = 0

            if( wk_x_test >= 552 )
            {
               G368_GiuFronte    = 1
               G368_GiuRetro     = 1
               G368_GiuCentro    = 0
               G368_GiuInf       = 1
               G368_GiuSup       = 1
            }
         }
      }

      //Calcolo il numero di giunzioni totali
      G368_NrGiuFr  = G368_GiuFronte*(G368_GiuInf + G368_GiuSup + G368_GiuCentro + G368_GiuCentro1 + G368_GiuCentro2 )
      G368_NrGiuRt  = G368_GiuRetro*(G368_GiuInf + G368_GiuSup + G368_GiuCentro + G368_GiuCentro1 + G368_GiuCentro2 )
      G368_NrGiuTot = G368_NrGiuFr + G368_NrGiuRt

      if( G368_NrGiuTot == 0 ) { EXITSUB() }

      $wk_DbLago = STRCAT($path_tab,$LagoSqlite)
      if( SQLiteApriDb($wk_DbLago,1)==0 )
      {
         COMANDO2(STRCAT("LOGMSG DB SQLITE NON APERTO"))
         EXITSUB()
      }

      //decido numero e "zona" giunzioni, leggo su DB le posizioni
      res_offz = ""
      res_offy = ""
      pos = ""

      //gestisco riduzioni: arrotondo valori di G368_ModRefX/Y/Z al valore inferiore
      //G368_ModRefX_Round = ARound( G368_ModRefX, "368;460;552;600;640;736;900;920;1104;1472;1656;1840;2208", -1, 2)
      //G368_ModRefY_Round = ARound( G368_ModRefY, "138;184;276;368;552;736;920;1104;1472;1840;2208", -1, 2)
      //G368_ModRefZ_Round = ARound( G368_ModRefZ, "180;248;270;384;406;488;538;560", -1, 2)
      G368_ModRefX_Round = G368_ModRefX
      G368_ModRefY_Round = G368_ModRefY
      G368_ModRefZ_Round = G368_ModRefZ

      //Luca 21/02/2022
      rev = VAR_VAL( ATTUALE(), "REV")

      if( G368_GiuFronte == 1 )
      {
         if( G368_GiuInf == 1 )
         {
            pos = "FR-IN"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "I" , "F" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuSup == 1 )
         {
            pos = "FR-SU"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "S" , "F" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro == 1 )
         {
            pos = "FR-CC"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C" , "F" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro1 == 1 )
         {
            pos = "FR-C1"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C1" , "F" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro2 == 1 )
         {
            pos = "FR-C2"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C2" , "F" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
      }
      if( G368_GiuRetro == 1 )
      {
         if( G368_GiuInf == 1 )
         {
            pos = "RT-IN"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "I" , "R" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuSup == 1 )
         {
            pos = "RT-SU"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "S" , "R" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro == 1 )
         {
            pos = "RT-CC"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C" , "R" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro1 == 1 )
         {
            pos = "RT-C1"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C1" , "R" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
         if( G368_GiuCentro2 == 1 )
         {
            pos = "RT-C2"
            r = GetPosGiunzioneFromDB( rev , G368_Orie , G368_ModRef , G368_ModRefX_Round , G368_ModRefY_Round , G368_ModRefZ_Round , "C2" , "R" , res_offz , res_offy )
            if( r == 1 ) { GOSUB G368_AddValoriGiunzione }
         }
      }

      SQLITE_CLOSE($wk_DbLago)
   }

   PROCEDURA G368_SetGiunzioni_30MM
   {
      //CASO 1
      //- ALTEZZA CONTENITORE <= ALTEZZA FIANCO 30MM
      //- CONTENITORE NON SPORGE DAL FIANCO
      //    CASO 1a
      //       - PROFONDITA' CONTENITORE <= PROFONDITA' FIANCO
      //       --> COMANDA SEMPRE LAVORAZIONE CONTENITORE
      //   CASO 1b
      //       - PROFONDITA' CONTENITORE > PROFONDITA' FIANCO
      //       --> COMANDA SEMPRE LAVORAZIONE CONTENITORE CON PROFONDITA' DEL FIANCO
      //CASO 2
      //- ALTEZZA CONTENITORE > ALTEZZA FIANCO 30MM
      //    CASO 2a
      //       - PROFONDITA' CONTENITORE <= PROFONDITA' FIANCO
      //       --> COMANDA SEMPRE LAVORAZIONE CONTENITORE
      //   CASO 2b
      //       - PROFONDITA' CONTENITORE > PROFONDITA' FIANCO
      //       --> COMANDA SEMPRE LAVORAZIONE CONTENITORE CON PROFONDITA' DEL FIANCO

      //RIPIANO COMANDA SEMPRE SU MODULO
      if( G368_ModRef == "30M-RIP" & IS_MATCH(G368_ModLavRef,"MOD*")==1 )
      {
         if( Y < VAR_VAL(PADRE(ATTUALE(),2),"Y") ) { EXITSUB() }
         G368_AttivaGiu = 1
      }

      //MODULO COMANDA SEMPRE SU FIANCO
      if( IS_MATCH(G368_ModRef,"MOD*")==1 & G368_ModLavRef == "30M-FIA"  ) { G368_AttivaGiu = 1 }
   }

   PROCEDURA G368_SetGiunzioni_Cuc
   {
      //LA BASE NON SCARICA SU NULLA
      if( G368_ModRef == "CUC-BAS" )    { EXITSUB() }

      //IL GLASS SCARICA SOLO SULLA BASE
      if( G368_ModRef == "CUC-GLS"
        & G368_ModLavRef == "CUC-BAS" ) { G368_AttivaGiu = 1 }
   }

   PROCEDURA G368_SetGiunzioni_368
   {
      //CASO 1
      // 1.0   LAVORAZIONE ATTUALE GRANDE COME TUTTO IL MODULO
      //   1.1 LAVORAZIONE REF MINORE DEL MODULO  --> ATTIVO GIUNZIONI QUI
      //   1.2 LAVORAZIONE REF UGUALE AL MODULO   --> IDX MINORE (EVENTUALMENTE DA DARE UNA PRORITA' IN BASE AL MODULO)
      // 2.0   LAVORAZIONE ATTUALE MINORE DEL MODULO
      //   2.1 LAVORAZIONE REF UGUALE AL MODULO   --> ATTIVO GIUNZIONI SULLA LAV.REF
      //   2.2 LAVORAZIONE REF MINORE DEL MODULO  --> MODULO PIU' PICCOLO

      StrDim1 = "Y"
      StrDim2 = "Z"

      if( G368_Orie == "ORIZ" )
      {
         StrDim1 = "X"
         StrDim2 = "Z"
      }

      DBG_CASO = ""

      //1.0
      if( VAR_VAL(ATTUALE(),StrDim1) == VAR_VAL(idx_ref_pan,StrDim1)
        & VAR_VAL(ATTUALE(),StrDim2) == VAR_VAL(idx_ref_pan,StrDim2)  )
      {
         DBG_CASO = "1"
         //1.1
         if( VAR_VAL(idx_lav_ref,StrDim1) < VAR_VAL(#idx_ref_pan,StrDim1)
           | VAR_VAL(idx_lav_ref,StrDim2) < VAR_VAL(#idx_ref_pan,StrDim2) )
         {
            G368_AttivaGiu = 1
            DBG_CASO = STRCAT(DBG_CASO,".1")
         }

         //1.2
         if( VAR_VAL(idx_lav_ref,StrDim1)  == VAR_VAL(#idx_ref_pan,StrDim1)
           & VAR_VAL(idx_lav_ref,StrDim2)  == VAR_VAL(#idx_ref_pan,StrDim2) )
         {
            DBG_CASO = STRCAT(DBG_CASO,".2")
            if( ATTUALE() < idx_lav_ref )
            {
               G368_AttivaGiu = 1
               DBG_CASO = STRCAT(DBG_CASO,".1")
            }
         }
      }

      //2.0
      if( VAR_VAL(ATTUALE(),StrDim1) < VAR_VAL(idx_ref_pan,StrDim1)
        | VAR_VAL(ATTUALE(),StrDim2) < VAR_VAL(idx_ref_pan,StrDim2)  )
      {
         DBG_CASO = "2"

         //2.1
         if( VAR_VAL(idx_lav_ref,StrDim1) == VAR_VAL(#idx_ref_pan,StrDim1)
           & VAR_VAL(idx_lav_ref,StrDim2) == VAR_VAL(#idx_ref_pan,StrDim2) )
         {
            G368_AttivaGiu = 0
            DBG_CASO = STRCAT(DBG_CASO,".1")
         }

         //2.2
         if( VAR_VAL(idx_lav_ref,StrDim1) < VAR_VAL(#idx_ref_pan,StrDim1)
           | VAR_VAL(idx_lav_ref,StrDim2) < VAR_VAL(#idx_ref_pan,StrDim2) )
         {
            DBG_CASO = STRCAT(DBG_CASO,".2")

            ////verifico il modulo più piccolo
            //if( VAR_VAL(idx_ref_pan,StrDim1) < VAR_VAL(#idx_ref_pan,StrDim1)
            //  & VAR_VAL(idx_ref_pan,StrDim2) < VAR_VAL(#idx_ref_pan,StrDim2)  )
            //{
            //   G368_AttivaGiu = 1
            //   DBG_CASO = STRCAT(DBG_CASO,".1")
            //}
            //else
            //{
            //   //if( VAR_VAL(idx_ref_pan,StrDim2) < VAR_VAL(#idx_ref_pan,StrDim2) )
            //   //{
            //   //   G368_AttivaGiu = 1
            //   //   DBG_CASO = STRCAT(DBG_CASO,".2")
            //   //}
            //   //else
            //   //{
            //      //idx minore
            //      DBG_CASO = STRCAT(DBG_CASO,".3")
            //      if( ATTUALE() < idx_lav_ref )  { G368_AttivaGiu = 1 }
            //   //}
            //}

            //se x e y sono minore
            DIFF_DIM1 =  VAR_VAL(idx_ref_pan,StrDim1) - VAR_VAL(#idx_ref_pan,StrDim1)
            DIFF_DIM2 =  VAR_VAL(idx_ref_pan,StrDim2) - VAR_VAL(#idx_ref_pan,StrDim2)

            if( DIFF_DIM1 < 0 & DIFF_DIM2 <= 0 )
            {
               DBG_CASO = STRCAT(DBG_CASO,".1")
               G368_AttivaGiu = 1
            }

            if( DIFF_DIM1 < 0 & DIFF_DIM2 > 0 )
            {
               DBG_CASO = STRCAT(DBG_CASO,".2")
               if( ABS(DIFF_DIM1) < ABS(DIFF_DIM2) )
               {
                  DBG_CASO = STRCAT(DBG_CASO,".1")
                  G368_AttivaGiu = 1
               }
            }

            if( DIFF_DIM1 > 0 & DIFF_DIM2 < 0 )
            //if( DIFF_DIM1 >= 0 & DIFF_DIM2 < 0 )
            {
               DBG_CASO = STRCAT(DBG_CASO,".3")

               if( ABS(DIFF_DIM2) < ABS(DIFF_DIM1) )
               {
                  DBG_CASO = STRCAT(DBG_CASO,".1")
                  G368_AttivaGiu = 1
               }
            }

            if( DIFF_DIM1 == 0 & DIFF_DIM2 == 0 )
            {
               DBG_CASO = STRCAT(DBG_CASO,".4")
               if( ATTUALE() < idx_lav_ref )
               {
                  DBG_CASO = STRCAT(DBG_CASO,".1")
                  G368_AttivaGiu = 1
               }
            }

            if( DIFF_DIM1 == 0 & DIFF_DIM2 < 0 )
            {
               DBG_CASO = STRCAT(DBG_CASO,".5")
               G368_AttivaGiu = 1
            }
         }
      }
   }

   PROCEDURA G368_AddValoriGiunzione
   {
      G368_NrGiu = G368_NrGiu + 1

      if( LEFT(res_offz,3) == "[F]"  ) { EVAL(STRCAT("offz = ", STRMID(3,200,res_offz))) }
      else                             { offz = ATOI(res_offz) }

      if( G368_Orie == "VERT" )
      {
         if( LEFT(res_offy,3) == "[F]"  ) { EVAL(STRCAT("offy = ", STRMID(3,200,res_offy))) }
         else                             { offy = ATOI(res_offy) }
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosY_Giu",STR(G368_NrGiu)) ,  offy )
      }

      if( G368_Orie == "ORIZ" )
      {
         res_offy = REPLACE(res_offy,"Y","X")
         if( LEFT(res_offy,3) == "[F]"  ) { EVAL(STRCAT("offx = ", STRMID(3,200,res_offy))) }
         else                             { offx = ATOI(res_offy) }
         VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosX_Giu",STR(G368_NrGiu)) ,  offx )
      }

      VAR_VALUE_SET( ATTUALE() , STRCAT("G368_PosZ_Giu",STR(G368_NrGiu)) ,  offz )
      VAR_VALUESTR_SET( ATTUALE() , STRCAT("G368_Pos_Giu",STR(G368_NrGiu)) ,  pos )
   }

   //Luca 01/02/2021
   //collisioni giunzioni sopra le cerniere
   PROCEDURA G368_AttrezzaContCollisioni
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 ) { EXITSUB() }

      //Luca 15/02/2021
      if( Apertura == "RB" )  { EXITSUB() }

      COMPONENTI2("contcol_tmp",ATTUALE(),"G368_ContCollisioni")
      COMPONENTI2("cer",ATTUALE(),"MdF_CernieraBatt")

      if( Apertura=="RB" | Apertura=="VS" ) { COMPONENTI2("cer",ATTUALE(),"MdF_CernieraBasetta_VasRib") }

      //non considero quelle del PushPull
      contcol = 0
      i = 1
      while ( i <= contcol_tmp )
      {
         if( UN_PADRE2(contcol_tmp[i],"PushPull_368") != 1 )
         {
            ne = contcol + 1
            contcol = ne
            contcol[ne] = contcol_tmp[i]
         }
         i = i + 1
      }

      if( cer == 0 & contcol < 0 )
      {

      }

      //cancello
      if( cer < contcol )
      {
         i = cer + 1
         while ( i <= contcol )
         {
            COMANDO(STRCAT("ELIMINA ",STR(contcol[i])))
            i = i + 1
         }

         EXITSUB()
      }

      //aggiorno
      if( cer == contcol )
      {
         i = 1
         while ( i <= contcol )
         {
            VAR_VALUESTR_SET(contcol[i] , "Lato" , VAR_VAL_STR(cer[i],"PosizioneCerniera"))
            VAR_VALUE_SET(contcol[i] , "OffY" , VAR_VAL(cer[i],"base_0.y") - base_0.y)

            i = i + 1
         }

         EXITSUB()
      }

      //aggiorno/ inserisco
      if( cer > contcol )
      {
         i = 1
         while ( i <= contcol )
         {
            CC_apertura = Apertura
            CC_lato = ""
            CC_off_x = 0
            CC_off_y = 0

            VAR_VALUESTR_SET(contcol[i] , "Apertura" , CC_apertura )

            if( Apertura == "BA" )
            {
               CC_lato  = VAR_VAL_STR(cer[i],"PosizioneCerniera")
               CC_off_y = VAR_VAL(cer[i],"base_0.y") - base_0.y
               VAR_VALUESTR_SET(contcol[i] , "Lato" , CC_lato)
               VAR_VALUE_SET(contcol[i] , "OffY" , CC_off_y )
            }
            else
            {
               SET_#(cer[i])
               CC_off_x = DistanzaFraPunti(base_0,#base_0,ANG_TOT_NOR(GetTopLevel(ATTUALE())))
               VAR_VALUE_SET(contcol[i] , "OffX" , CC_off_x )
            }


            i = i + 1
         }

         i = contcol + 1
         while( i <= cer )
         {
            COMANDO(STRCAT("SETTA ",STR(ATTUALE())))
            COMANDO("ELEMENTO_I G368_ContCollisioni")
            COMANDO("STRUTTURA_I")

            CC_apertura = Apertura
            CC_lato = ""
            CC_off_x = 0
            CC_off_y = 0
            if( Apertura == "BA" )
            {
               CC_lato  = VAR_VAL_STR(cer[i],"PosizioneCerniera")
               CC_off_y = VAR_VAL(cer[i],"base_0.y") - base_0.y
            }
            else
            {
               SET_#(cer[i])
               CC_off_x = DistanzaFraPunti(base_0,#base_0,ANG_TOT_NOR(GetTopLevel(ATTUALE())))
            }

            COMANDO(STRCAT("VAR_SET OffX=",STR(CC_off_x) , " OffY=",STR(CC_off_y) ," Lato=",APICI(),CC_lato , APICI() , " Apertura=",APICI(),CC_apertura , APICI()  ) )
            //COMANDO(STRCAT("VAR_SET OffY=",STR(VAR_VAL(cer[i],"base_0.y") - base_0.y) ," Lato=",APICI(),VAR_VAL_STR(cer[i],"PosizioneCerniera") , APICI() ) )
            COMANDO("ATTREZZA_Y 0")

            i = i + 1
         }
      }
   }

   PROCEDURA G368_ContCollisioniGiunzioni
   {
      log = 0
      #ifdef TEC
        log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif
      ScriviSuLog( log , "G368_ContCollisioniGiunzioni" , "START" )

      if( $OnLoadOrder2 == 0 )  { COMANDO2("SHOW ABILITA OFF") }

      WITH_ALIAS("$wk_giu","G368_Giunzione")
      ScriviSuLog( log , "G368_ContCollisioniGiunzioni GIUNZIONI:", STR($wk_giu))
      if( $wk_giu == 0 ) { ScriviSuLog( log , "G368_ContCollisioniGiunzioni" , "END" ) }

      COMANDO2("Procedura G368_ResetControlloCollisioni")

      WITH_ALIAS("$wk_giu","G368_Giunzione")

      $wk_tot_cicli = 4 //3 riposiziona + 1 per l'eliminazione
      ScriviSuLog( log , "G368_ContCollisioniGiunzioni CICLI:", STR($wk_tot_cicli))
      $wk_t = 1
      while ( $wk_t <= $wk_tot_cicli )
      {
         GOSUB G368_ContCollisioniGiunzioni_Sub

         $wk_t = $wk_t + 1
      }

      if( $OnLoadOrder2 == 0 )
      {
         COMANDO2("SHOW ABILITA ON")
         COMANDO("RIGENERA //G368_ContCollisioniGiunzioni")
      }

      ScriviSuLog( log , "G368_ContCollisioniGiunzioni" , "END" )
   }

   PROCEDURA G368_ContCollisioniGiunzioni_Sub
   {
      ScriviSuLog( log , "G368_ContCollisioniGiunzioni" , STRCAT("CICLO ", STR($wk_t), "/", STR($wk_tot_cicli)) )

      $wk_i = 1
      while ( $wk_i <= $wk_giu )
      {
         $wk_idx_giu = $wk_giu[$wk_i]
         $wk_rev_giu = VAR_VAL( $wk_idx_giu, "REV")
         SET_#($wk_idx_giu)

         //Reset
         if( $wk_t == 1 ) { #Riposizionata = 0 }
         #G368_Collide = 0

         //Verifico collisione
         BOX_MODE(0)
         NEAR_GLOBALE2( "$wk_coll", #idx_cnear, $M368_Giu_Near_Rid/2, "G368_ContCollisioni")

         //Trovo la giunzione corrispondente
         $wk_giu_corr = ""
         $wk_idx_giu_corr = -1
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "FR-SU" )  { $wk_giu_corr = "RT-SU" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-SU" )  { $wk_giu_corr = "FR-SU" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "FR-IN" )  { $wk_giu_corr = "RT-IN" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-IN" )  { $wk_giu_corr = "FR-IN" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "FR-CC" )  { $wk_giu_corr = "RT-CC" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-CC" )  { $wk_giu_corr = "FR-CC" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "FR-C1" )  { $wk_giu_corr = "RT-C1" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-C2" )  { $wk_giu_corr = "FR-C1" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "FR-C1" )  { $wk_giu_corr = "RT-C2" }
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-C2" )  { $wk_giu_corr = "FR-C2" }

         WITH_VAR_LOCAL( PADRE($wk_idx_giu,1), "$wk_corr", "G368_PosGiu", $alfa, 1, $wk_giu_corr)
         if( $wk_corr > 0) { $wk_idx_giu_corr = $wk_corr[1] }

         ScriviSuLog( log, "G368_ContCollisioniGiunzioni", STRCAT( "  CICLO: ", STR($wk_t), "/", STR($wk_tot_cicli),
                                                                   " GIUNZIONE: ", STR($wk_i), "/", STR($wk_giu),
                                                                   " ~ $wk_idx_giu: ", STR($wk_idx_giu),
                                                                   " - pnt_stp_cnt: ", Point2String(#pnt_stp_cnt),
                                                                   " - $wk_coll: ", STR($wk_coll), " (", ArrayConcat( -1, "wk_coll", ";"), ")",
                                                                   " - $wk_idx_giu_corr: ", STR($wk_idx_giu_corr)))

         if( $wk_coll > 0
           & $wk_rev_giu >= 4
           & VAR_VAL( $wk_idx_giu, "Riposizionata") >= $wk_tot_cicli - 1)
         {
            #G368_Collide = 1
            #G368_Escluso = 1

            ScriviSuLog( log , "G368_ContCollisioniGiunzioni" , STRCAT("   '- ULTIMO CICLO, ANCORA IN COLLISIONE --> ELIMINO"))
            $wk_coll = 0

            if( IS_IDX($wk_idx_giu_corr))
            {
               VAR_VALUE_SET( $wk_idx_giu_corr, "COLL_OFFZ", 0)
               VAR_VALUE_SET( $wk_idx_giu_corr, "COLL_OFFY", 0)
            }
         }

         if( VAR_VAL_STR($wk_idx_giu,"G368_Orie") == "ORIZ") { GOSUB G368_ContCollisioniGiunzioni_SubOrizzontali }
         else                                                { GOSUB G368_ContCollisioniGiunzioni_SubVerticali   }

         $wk_i = $wk_i + 1
      }
   }

   PROCEDURA G368_ContCollisioniGiunzioni_SubOrizzontali
   {
      if( $wk_coll == 0 ) { EXITSUB() }

      // 0 - Colleziono informazioni
      SET_#($wk_idx_giu)
      #G368_Collide = 1

      $wk_b0_giu = #base_0
      $wk_b1_giu = #base_1
      $wk_b2_giu = #base_2
      $wk_b3_giu = #base_3
      $wk_ang_giu = ANG_TOT_NOR($wk_idx_giu)

      $wk_idx_coll = $wk_coll[1]
      $wk_pdr_coll = PADRE( $wk_idx_coll, 1)
      $wk_ele_coll = NOME( $wk_pdr_coll)
      $wk_pos_coll = VAR_VAL_STR( $wk_idx_coll, "Posizione")

      $wk_COLL_ATT = STRCAT( STR(#COLL_OFFX), "|", STR(#COLL_OFFY), "|", STR(#COLL_OFFZ))

      ScriviSuLog( log, "G368_ContCollisioniGiunzioni", STRCAT("    SubO $wk_idx_giu: ", STR($wk_idx_giu),
                                                               " - $wk_idx_coll: ", STR($wk_idx_coll),
                                                               " - $wk_pdr_coll: ", STR($wk_pdr_coll), "(", $wk_ele_coll, ")",
                                                               " - $wk_idx_giu_corr: ", STR($wk_idx_giu_corr)))

      // 1 - Eccezioni
      // 1.1 - Contenitore madia glass, posizioni fisse
      if( VAR_VAL_STR( $wk_idx_giu, "G368_GiuTipologia") == "G_G3S")
      {
         #G368_Collide = 0

         ScriviSuLog ( log, "G368_ContCollisioniGiunzioni", STRCAT( "    SubO $wk_idx_giu: ", STR($wk_idx_giu), " -> Giunzione 368glass, da non riposizionare!"))
         EXITSUB()
      }

      // 2 - Incremento riposizionamento e salvo la posizione precedente
      $wk_giu_riposizionata = VAR_VAL( $wk_idx_giu, "Riposizionata")
      VAR_VALUE_SET( $wk_idx_giu, "Riposizionata", $wk_giu_riposizionata + 1)
      VAR_CREATE_XYZ( $wk_idx_giu, GetArrayVar( "Riposizionata", $wk_giu_riposizionata), #COLL_OFFX, #COLL_OFFY, #COLL_OFFZ, $MODE_XYZ_ABSOLUTE, "")

      // 3 - Testo collisioni con elementi:
      //   3.1 - divisorio legno
      //   3.2 - frontali
      //       3.2.1 - cerniera
      //       3.2.2 - pushpull
      //       3.2.3 - guida cassetti
      //   3.3 - TODO: passacavi

      $wk_ele_test = "DivisiorioVertLegLiv_368;DivisiorioVetLiv_368;PushPull_368;Cassetto_368;AntaSingola_368"
      if( $wk_rev_giu >= 4 ) { $wk_ele_test = STRCAT( $wk_ele_test, ";StrInternaCassetto_368") }

      if( Is_In_StrArray( $wk_ele_coll, $wk_ele_test, ";"))
      {
         SET_#($wk_idx_coll)

         //giunzione dx -- > sposto verso sx
         if( RIGHT(VAR_VAL_STR($wk_idx_giu,"G368_PosGiu"),2) == "SU" )
         {
            offx = DistanzaFraPunti($wk_b3_giu,#base_0,$wk_ang_giu)
            offx = -1*offx
         }
         //giunzione inferiore (SX)
         else
         {
            offx = DistanzaFraPunti($wk_b0_giu,#base_3,$wk_ang_giu)
         }

         SET_#($wk_idx_giu)
         #COLL_OFFX = #COLL_OFFX + offx

         //Sposto giunzione corrispondente
         $wk_ele_test = "PushPull_368;AntaSingola_368"
         if( $wk_rev_giu >= 4 ) { $wk_ele_test = STRCAT( $wk_ele_test, ";StrInternaCassetto_368") }

         if( Is_In_StrArray( $wk_ele_coll, $wk_ele_test, ";") )
         {
            if( IS_IDX($wk_idx_giu_corr) ) { VAR_VALUE_SET($wk_idx_giu_corr,"COLL_OFFX", VAR_VAL($wk_idx_giu_corr,"COLL_OFFX") + offx) }
         }
      }

      // 4 - Testo collisioni perimetrali:
      if( $wk_rev_giu >= 4
        & $wk_pos_coll != "" )
      {
         SET_#($wk_idx_coll)
         offx = 0
         offy = 0
         offz = 0

         if( $wk_pos_coll == "DX" ) { offx = -1 * ABS( DistanzaFraPunti( $wk_b3_giu, #base_0, $wk_ang_giu))    }
         if( $wk_pos_coll == "SX" ) { offx = ABS( DistanzaFraPunti( $wk_b0_giu, #base_1, $wk_ang_giu))         }
         if( $wk_pos_coll == "FR" ) { offz = -1 * ABS( DistanzaFraPunti( $wk_b1_giu, #base_0, $wk_ang_giu+90)) }
         if( $wk_pos_coll == "RT" ) { offz = ABS( DistanzaFraPunti( $wk_b0_giu, #base_1, $wk_ang_giu+90))      }

         SET_#($wk_idx_giu)
         #COLL_OFFX = #COLL_OFFX + offx
         #COLL_OFFY = #COLL_OFFY + offy
         #COLL_OFFZ = #COLL_OFFZ + offz
      }

      // 5 - Rigenero
      SET_#($wk_idx_giu)
      $wk_COLL_NEW = STRCAT( STR(#COLL_OFFX), "|", STR(#COLL_OFFY), "|", STR(#COLL_OFFZ))

      ScriviSuLog(log, "G368_ContCollisioniGiunzioni", STRCAT("    SubO $wk_COLL_ATT: ", $wk_COLL_ATT, " - $wk_COLL_NEW: ", $wk_COLL_NEW))

      if( $wk_COLL_NEW != $wk_COLL_ATT ) { COMANDO2( STRCAT( "Procedura G368_RefreshControlloCollisioni ", STR($wk_idx_giu), " //G368_ContCollisioniGiunzioni_SubOrizzontali - Post spostamento")) }
      COMANDO2( STRCAT( "Procedura G368_RefreshControlloCollisioni ", STR($wk_idx_giu), " //G368_ContCollisioniGiunzioni_SubOrizzontali"))
   }

   PROCEDURA G368_ContCollisioniGiunzioni_SubVerticali
   {
      if( $wk_coll == 0 ) { EXITSUB() }

      // 0 - Colleziono informazioni
      SET_#($wk_idx_giu)
      #G368_Collide = 1

      $wk_b0_giu = #base_0
      $wk_b1_giu = #base_1
      $wk_a0_giu = #alto_0
      $wk_a1_giu = #alto_1
      $wk_ang_giu = ANG_TOT_NOR($wk_idx_giu)

      $wk_idx_coll = $wk_coll[1]
      $wk_pdr_coll = PADRE( $wk_idx_coll, 1)
      $wk_ele_coll = NOME( $wk_pdr_coll)
      $wk_pos_coll = VAR_VAL_STR( $wk_idx_coll, "Posizione")

      $wk_COLL_ATT = STRCAT( STR(#COLL_OFFX), "|", STR(#COLL_OFFY), "|", STR(#COLL_OFFZ))

      ScriviSuLog( log, "G368_ContCollisioniGiunzioni", STRCAT("    SubV $wk_idx_giu: ", STR($wk_idx_giu),
                                                               " - $wk_idx_coll: ", STR($wk_idx_coll),
                                                               " - $wk_pdr_coll: ", STR($wk_pdr_coll), " (", $wk_ele_coll, ")",
                                                               " - $wk_idx_giu_corr: ", STR($wk_idx_giu_corr)))

      // 1 - Eccezioni
      // 1.1 - Contenitore madia glass, posizioni fisse
      if( VAR_VAL_STR( $wk_idx_giu, "G368_GiuTipologia") == "G_G3S")
      {
         #G368_Collide = 0

         // 1.1.1 - Se la giunzione cade nel mezzo di un miniwinch, viene utilizzata una giunzione dedicata, vedi VT_GMW
         if( $wk_ele_coll == "Miniwinch_368")
         {
            $wk_idx_coll_inner = -1
            if( IsIdx( $wk_pdr_coll, "idx_inner_near")) { $wk_idx_coll_inner = VAR_VAL( $wk_pdr_coll, "idx_inner_near") }

            if( CheckCollisione( #idx_cnear, $wk_idx_coll_inner, 1) == 1) { VAR_VALUE_SET( $wk_idx_giu, "G368_Collide", 2) }
         }

         ScriviSuLog ( log, "G368_ContCollisioniGiunzioni", STRCAT( "    SubV $wk_idx_giu: ", STR($wk_idx_giu), " -> Giunzione 368glass, da non riposizionare!"))

         EXITSUB()
      }

      // 1.2 - Contenitori H138, giunzioni fisse e, da specifiche, in collisione con le aree perimetrali dei fianchi
      if( #G368_ModRefY == 138
        & IS_MATCH( $wk_ele_coll, "Fianco*_368") == 1)
      {
         #G368_Collide = 0

         ScriviSuLog ( log, "G368_ContCollisioniGiunzioni", STRCAT( "    SubV $wk_idx_giu: ", STR($wk_idx_giu), " -> Giunzione contenitore H138, da non riposizionare!"))

         EXITSUB()
      }

      // 1.3 - Fianco 30MM, necessito di test con m4_collision hard in quanto forma irregolare
      if( $wk_ele_coll == "Fianco_30MM" )
      {
         GOSUB G368_ContCollisione_Solidi
         if( VAR_VAL(-1, "COLLISION__") == 0 )
         {
            if( IS_VAR_FIXED( $wk_idx_giu, "G368_Collide") == 0 ) { VAR_VALUE_SET( $wk_idx_giu, "G368_Collide", 0) }
            EXITSUB()
         }
      }

      // 2 - Incremento riposizionamento e salvo la posizione precedente
      SET_#($wk_idx_giu)

      $wk_giu_riposizionata = VAR_VAL( $wk_idx_giu, "Riposizionata")
      #Riposizionata = $wk_giu_riposizionata + 1

      VAR_CREATE_XYZ( $wk_idx_giu, GetArrayVar( "Riposizionata", $wk_giu_riposizionata), #COLL_OFFX, #COLL_OFFY, #COLL_OFFZ, $MODE_XYZ_ABSOLUTE, "")

      // 3 - Testo collisioni con elementi:
      // 3.1 - ripiano/divisorio legno
      if( $wk_ele_coll == "RipianoVetroLiv_368"
        | $wk_ele_coll == "DivisiorioOrizLegLiv_368" )
      {
         // 3.1.1 - abbasso se giunzione superiore
         if( RIGHT(VAR_VAL_STR($wk_idx_giu,"G368_PosGiu"),2) == "SU" )
         {
            offy = ABS( VAR_VAL($wk_idx_giu,"alto_0.y") - VAR_VAL($wk_idx_coll,"base_0.y") )
            offy = -1*offy
         }
         // 3.1.2 - alzo se giunzione inferiore o centrale
         else
         {
            offy = ABS( VAR_VAL($wk_idx_giu,"base_0.y") - VAR_VAL($wk_idx_coll,"alto_0.y") )
         }

         SET_#($wk_idx_giu)
         #COLL_OFFY = #COLL_OFFY + offy

         // 3.1.3 - traslo anche la corrispondente
         if( IS_IDX($wk_idx_giu_corr) ) { VAR_VALUE_SET($wk_idx_giu_corr,"COLL_OFFY", VAR_VAL($wk_idx_giu_corr,"COLL_OFFY") + offy) }
      }

      // 3.2 - Frontali
      // 3.2.1 - Cerniere
      if( $wk_ele_coll == "AntaSingola_368" )
      {
         // 3.2.1.1 - arretro in profondità (dovrebbero essere solo cerniere frontali)
         if( LEFT(VAR_VAL_STR($wk_idx_giu,"G368_PosGiu"),2) == "FR" )
         {
            SET_#($wk_idx_coll)
            offz = ABS(DistanzaFraPunti($wk_b0_giu,#base_0,$wk_ang_giu+90) + 10 )
            offz = -1*offz

            SET_#($wk_idx_giu)
            #COLL_OFFZ = #COLL_OFFZ + offz
         }
      }

      // 3.2.2 - Push pull
      if( $wk_ele_coll == "PushPull_368" )
      {
         // 3.2.2.1 - abbasso giunzione superiore
         if( RIGHT(VAR_VAL_STR($wk_idx_giu,"G368_PosGiu"),2) == "SU" )
         {
            offy = ABS( VAR_VAL($wk_idx_giu,"alto_0.y") - VAR_VAL($wk_idx_coll,"base_0.y") )
            offy = -1*offy
         }
         // 3.2.2.2 - alzo se giunzione inferiore o centrale
         else
         {
            offy = ABS( VAR_VAL($wk_idx_giu,"base_0.y") - VAR_VAL($wk_idx_coll,"alto_0.y") )
         }

         SET_#($wk_idx_giu)
         #COLL_OFFY = #COLL_OFFY + offy

         // 3.2.2.3 - traslo anche la corrispondente
         if( IS_IDX($wk_idx_giu_corr) ) { VAR_VALUE_SET($wk_idx_giu_corr,"COLL_OFFY", VAR_VAL($wk_idx_giu_corr,"COLL_OFFY") + offy) }
      }

      // 3.2.3 - Miniwinch/Nanowinch
      //         Era presente un errore nella REV 4, dove non venivano traslate le giunzioni
      //         lascio in collisione per permetterne l'esclusione
      if( $wk_rev_giu != 4
        & $wk_ele_coll == "Miniwinch_368")
      {
         // 3.2.3.1 - Di default abbasso
         offy = ABS( VAR_VAL($wk_idx_giu,"alto_0.y") - VAR_VAL($wk_idx_coll,"base_0.y") )
         offy = -1*offy

         SET_#($wk_idx_giu)
         #COLL_OFFY = #COLL_OFFY + offy

         // 3.2.3.2 - Differenza per tipo di meccanismo
         wk_mw_tipologia = VAR_VAL_STR( $wk_pdr_coll, "VAR_Tipologia")
         // 3.2.3.2.1 - Miniwinch
         if( wk_mw_tipologia == "MINIWINCH")
         {
         }

         // 3.2.3.2.2 - Nanowinch, specifiche mancanti
         if( wk_mw_tipologia == "NANOWINCH")
         {
         }

         // 3.2.3.1.1 - traslo anche la corrispondente
         //             REV >= 5, non sposto anche la corrispondente, non è bello
         if( $wk_rev_giu < 4
           & IS_IDX($wk_idx_giu_corr) ) { VAR_VALUE_SET($wk_idx_giu_corr,"COLL_OFFY", VAR_VAL($wk_idx_giu_corr,"COLL_OFFY") + offy) }
      }

      // 3.2.4 - Struttura interna cassetti/cestoni
      if( $wk_ele_coll == "StrInternaCassetto_368")
      {
         offy = ABS( VAR_VAL($wk_idx_giu,"base_0.y") - VAR_VAL($wk_idx_coll,"alto_0.y") )

         // 3.2.4.1 - Sposto in alto, ma solo se ho spazio per farlo
         wk_spe_cop = $M368_Spe_Cop
         if( VAR_VAL( $wk_idx_giu, "FLAG_CopSp38") == 1 ) { wk_spe_cop = $M368_Spe_Cop38 }

         if( VAR_VAL( $wk_idx_giu, "alto_0.y") + offy < VAR_VAL( PADRE( $wk_idx_giu, 1), "alto_0.y") - wk_spe_cop )
         {
            SET_#($wk_idx_giu)
            #COLL_OFFY = #COLL_OFFY + offy

            // 3.2.4.2 - traslo anche la corrispondente
            if( IS_IDX($wk_idx_giu_corr)) { VAR_VALUE_SET($wk_idx_giu_corr,"COLL_OFFY", VAR_VAL($wk_idx_giu_corr,"COLL_OFFY") + offy) }
         }
      }

      // 3.3 - Ripiano interno scrittorio
      if( $wk_ele_coll == "RipianoAccScrittoio_368" )
      {
         // 3.3.1 - avanzo giunzione retro
         if( LEFT(VAR_VAL_STR($wk_idx_giu,"G368_PosGiu"),2) == "RT" )
         {
            SET_#($wk_idx_coll)
            offz = ABS(DistanzaFraPunti($wk_b0_giu,#base_0,$wk_ang_giu+90) )
            offz = 80.5 - offz

            SET_#($wk_idx_giu)
            #COLL_OFFZ = #COLL_OFFZ + offz
         }
      }

      // 3.4 - Fianco 30mm
      if( $wk_ele_coll == "Fianco_30MM" )
      {
         // 3.4.1 - avanzo giunzione retro superiore
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-SU" )
         {
            SET_#($wk_idx_coll)
            offz = ABS(DistanzaFraPunti($wk_b0_giu,#base_0,$wk_ang_giu+90) )
            offz = 94.5 - offz

            SET_#($wk_idx_giu)
            #COLL_OFFZ = #COLL_OFFZ + offz
         }

         // 3.4.2 - alzo giunzione retro inferiore
         if( VAR_VAL_STR($wk_idx_giu,"G368_PosGiu") == "RT-IN" )
         {
            SET_#($wk_idx_coll)
            offz = ABS(DistanzaFraPunti($wk_b0_giu,#base_0,$wk_ang_giu+90) )
            offz = 94.5 - offz

            SET_#($wk_idx_giu)
            #COLL_OFFZ = #COLL_OFFZ + offz
         }
      }

      // 3.5 - Ripiano 30mm
      if( VAR_VAL_STR( $wk_idx_giu, "G368_ModRef") == "30M-RIP" )
      {
         if( $wk_ele_coll == "RipianoVetroLiv_368"
           | $wk_ele_coll == "DivisiorioOrizLegLiv_368"
           | $wk_ele_coll == "PushPull_368"
           | $wk_ele_coll == "Miniwinch_368"
           | $wk_ele_coll == "StrInternaCassetto_368"
           | $wk_ele_coll == "RipianoAccScrittoio_368"
           | $wk_ele_coll == "RipianoAccScrittoio_368"
           | $wk_ele_coll == "AntaSingola_368"  )
         {
            if( IS_VAR_FIXED( $wk_idx_giu, "G368_Collide") == 0 ) { VAR_VALUE_SET( $wk_idx_giu, "G368_Collide", 1) }
         }
      }

      // 4 - Testo collisioni perimetrali:
      if( $wk_rev_giu >= 4
        & $wk_pos_coll != "" )
      {
         SET_#($wk_idx_coll)
         offx = 0
         offy = 0
         offz = 0

         if( $wk_pos_coll == "FR" ) { offz = -1 * ABS( DistanzaFraPunti( $wk_b1_giu, #base_0, $wk_ang_giu+90)) }
         if( $wk_pos_coll == "RT" ) { offz = ABS( DistanzaFraPunti( $wk_b0_giu, #base_1, $wk_ang_giu+90)) }
         if( $wk_pos_coll == "UP" ) { offy = #base_0.y - $wk_a0_giu.y }
         if( $wk_pos_coll == "DW" ) { offy = #alto_0.y - $wk_b0_giu.y }

         SET_#($wk_idx_giu)
         #COLL_OFFX = #COLL_OFFX + offx
         #COLL_OFFY = #COLL_OFFY + offy
         #COLL_OFFZ = #COLL_OFFZ + offz
      }

      // 5 - Rigenero
      SET_#($wk_idx_giu)
      $wk_COLL_NEW = STRCAT( STR(#COLL_OFFX), "|", STR(#COLL_OFFY), "|", STR(#COLL_OFFZ))

      ScriviSuLog(log, "G368_ContCollisioniGiunzioni", STRCAT("    SubV $wk_COLL_ATT: ", $wk_COLL_ATT, " - $wk_COLL_NEW: ", $wk_COLL_NEW))

      if( $wk_COLL_NEW != $wk_COLL_ATT ) { COMANDO2( STRCAT( "Procedura G368_RefreshControlloCollisioni ", STR($wk_idx_giu), " //G368_ContCollisioniGiunzioni_SubVerticali - Post spostamento")) }
      COMANDO2( STRCAT( "Procedura G368_RefreshControlloCollisioni ", STR($wk_idx_giu), " //G368_ContCollisioniGiunzioni_SubVerticali"))
   }

   PROCEDURA G368_ContCollisione_Solidi
   {
      $wk_idx_graf_giu = VAR_VAL($wk_idx_giu,"idx_grafica")
      $wk_idx_graf_col = VAR_VAL($wk_idx_coll,"idx_cont_fiainf")
      if( VAR_VAL($wk_idx_coll,"Fianco30MM_sup")==1 )
      {
         $wk_idx_graf_col = VAR_VAL($wk_idx_coll,"idx_cont_fiasup")
      }

      $COLLISION__ = 0
      $wk_cmd = STRCAT("M4_COLLISION hard ", STR($wk_idx_graf_giu), " ", STR($wk_idx_graf_col))
      COMANDO2($wk_cmd)

      ScriviSuLog ( log , "G368_ContCollisioniGiunzioni - G368_ContCollisione_Solidi" , STRCAT("    SubVF30MM  COLLISION=", STR($COLLISION__),
                                                                                               " $wk_idx_giu=", STR($wk_idx_giu),
                                                                                               " graf coll base_0.y=", STR( VAR_VAL( $wk_idx_graf_col, "base_0.y")),
                                                                                               " --> giunzione base_0.y = ", STR($wk_b0_giu.y)))
   }

   PROCEDURA G368_ContCollisioniGiunzioni_BloccoFO
   {
      WITH_VAR( "$wk_G368_Giu_Collisione", "G368_Collide", $num_con_figli, 1, "1")
      if( $wk_G368_Giu_Collisione == 0 ) { EXITSUB() }

      $wk_CG_Nome    = "G368_ContCollisioniGiunzioni_BloccoFO"
      $wk_CG_Blocca  = 1
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Giunzioni 368 in collisione, contattare ufficio tecnico."

      $wk_G368_Giu_Collisione_num = 1
      while( $wk_G368_Giu_Collisione_num <= $wk_G368_Giu_Collisione )
      {
         $wk_G368_Giu_Collisione_att = $wk_G368_Giu_Collisione[$wk_G368_Giu_Collisione_num]

         AddItem2Array_IfNotExist( -1, "wk_CG_Items", GetTopLevel($wk_G368_Giu_Collisione_att), "")

         $wk_G368_Giu_Collisione_num = $wk_G368_Giu_Collisione_num + 1
      }

      GOSUB CG_CFO_FineControllo
   }
   //********************************************************************************************
   // } PROCEDURE PER GIUNZIONI 368
   //********************************************************************************************

   PROCEDURA CtrlLed_Idx_Dimensione
   {
      wk_proc_nome = "CtrlLed_Idx_Dimensione"
      wk_proc_log  = 0
      #ifdef TEC
         wk_proc_log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      ScriviSuLog( wk_proc_log, wk_proc_nome, " START" )

      //if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1 | $OnLoadOrder2 == 1 )  { EXITSUB() }
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder == 1  )  { EXITSUB() }
      //LZ 14/04/2022: passo prima per notifica, dove X viene fixata
      if( IS_VAR_FIXED( ATTUALE(), "X") == 0 )                  { EXITSUB() }

      idx_pan_ref = AGGANCIATA(ATTUALE(),"*")

      if( IS_IDX(idx_pan_ref) == 0
        | VAR_VAL( ATTUALE(), "TipologiaLED") == 2 )
      {
         if( VAR_EXIST(ATTUALE(), "idx_steso1")
           & IS_IDX(VAR_VAL( ATTUALE(), "idx_steso1"))) { idx_pan_ref = idx_steso1 }
      }

      ScriviSuLog( wk_proc_log, wk_proc_nome, STRCAT(" idx_pan_ref = ",STR(idx_pan_ref) ) )

      //No se verticali
      if( VAR_VAL_STR( ATTUALE(), "wk_pos_led") == "DESTRA"
        | VAR_VAL_STR( ATTUALE(), "wk_pos_led") == "SINISTRA" ) { EXITSUB() }

      //No se per tipo glass
      if( VAR_VAL( ATTUALE(), "TipologiaLED") > 1 )            { EXITSUB() }

      BOX_MODE(0)
      //NEAR_GLOBALE2("wk_sx",idx_cnear_sx,5,"*")
      //NEAR_GLOBALE2("wk_dx",idx_cnear_dx,5,"*")
      NEAR_GLOBALE2("wk_sx",idx_cnear_sx,1,"*")
      NEAR_GLOBALE2("wk_dx",idx_cnear_dx,1,"*")

      idx_pan_ref_sx = -1
      idx_pan_ref_dx = -1

      i = 1
      while ( i <= wk_sx )
      {
         if( VAR_VAL_STR(wk_sx[i],"PanLED_Tipologia") != "" )
         {
            idx_pan_ref_sx = wk_sx[i]
            i = wk_sx
         }

         i = i + 1
      }

      i = 1
      while ( i <= wk_dx )
      {
         if( VAR_VAL_STR(wk_dx[i],"PanLED_Tipologia") != "" )
         {
            idx_pan_ref_dx = wk_dx[i]
            i = wk_dx
         }

         i = i + 1
      }

      ScriviSuLog( wk_proc_log, wk_proc_nome, STRCAT(" idx_pan_ref_sx = ",STR(idx_pan_ref_sx) ) )
      ScriviSuLog( wk_proc_log, wk_proc_nome, STRCAT(" idx_pan_ref_dx = ",STR(idx_pan_ref_dx) ) )

      if( $OnLoadOrder2 == 1 )  { EXITSUB() }

      //Luca 10/02/2021 calcolo la lunghezza dei moduli del led
      idx_mod1 = idx_pan_ref_sx
      idx_mod2 = idx_pan_ref_dx
      M4_DRAW_MODE__ = 0

      x_mod_led = GetLunghezzaModuli_LED( ATTUALE() , idx_mod1 ,idx_mod2 )

      ScriviSuLog( wk_proc_log, wk_proc_nome, STRCAT(" x_mod_led = ",STR(x_mod_led) ) )

      wk_cancella = 0
      if( x_mod_led == -1 )               { wk_cancella = 1 }
      if( x_mod_led > 0 & x_mod_led < X ) { wk_cancella = 1 }

      if( wk_cancella == 1 & VAR_VAL(ATTUALE(),"FLAG_Speciale") == 0 )
      {
         delme = 1
         M4_DRAW_MODE__ = 4
      }

      if( VAR_VAL(ATTUALE(),"delme") == 1 & $CNP == 0 & $CNP__ == 0 )
      {
         delme = 0

         HI(ATTUALE(),1)
         DISPLAY2(STRCAT(MSG(1090),"\n",MSG(1110)))
         HI(ATTUALE(),0)
         COMANDO(STRCAT("DELETE ",STR(ATTUALE()), " //delete LED"))
      }

      ScriviSuLog( wk_proc_log, wk_proc_nome, " END")
   }

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

      MaggSX = 0
      MaggDX = 0

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_led_sx",idx_cnear_sx,31,"Led_PannelloRetro_368")
      NEAR_GLOBALE2("wk_led_dx",idx_cnear_dx,31,"Led_PannelloRetro_368")

      //pulisco gli array da idx_att
      i = 1
      while ( i <= wk_led_sx )
      {
         if( wk_led_sx[i] == ATTUALE() )
         {
            DEL_ARRAY_ITEM(ATTUALE(),"wk_led_sx",i)
            i = i - 1
         }

         i = i + 1
      }

      i = 1
      while ( i <= wk_led_dx )
      {
         if( wk_led_dx[i] == ATTUALE() )
         {
            DEL_ARRAY_ITEM(ATTUALE(),"wk_led_dx",i)
            i = i - 1
         }

         i = i + 1
      }

      idx_led_sx = -1
      idx_led_dx = -1

      if( wk_led_sx > 0 ) { idx_led_sx= wk_led_sx[1] }
      if( wk_led_dx > 0 ) { idx_led_dx= wk_led_dx[1] }

      if( IS_IDX(idx_led_sx)  )
      {
         if( VAR_VAL(idx_led_sx,"X") > X ) { MaggSX = 1 }
      }
      if( IS_IDX(idx_led_dx)  )
      {
         if( VAR_VAL(idx_led_dx,"X") >= X ) { MaggDX = 1 }
      }

      wk_magg_tot = MaggSX*MaggX + MaggDX*MaggX

      resto = 3128 - X

      //se non mi stanno 2 maggiorazioni, tengo solo a dx
      if( resto <= 60 & resto >= 30 )
      {
         if( wk_magg_tot == 60 ) { MaggSX = 0 }
         if( wk_magg_tot == 30 )
         {
            MaggSX = 0
            MaggDX = 0
         }
      }

      if( resto < 30 )
      {
         MaggSX = 0
         MaggDX = 0
      }

      Xr = X + MaggSX*MaggX + MaggDX*MaggX
   }

   //Luca 10/02/2021
   PROCEDURA Ctrl_VerificaAllineamentoModuli_368
   {
      log = 0
      #ifdef TE
         log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , "START" )

      WITH_ALIAS("$wk_mod","CtrlAllineamento368")

      if( $wk_mod == 0 ) { EXITSUB() }

      $wk_CG_Nome    = "Ctrl_VerificaAllineamentoModuli_368"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "NO_BLOCCO"
      $wk_CG_Msg     = MSG(1246)

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_test =  $wk_mod[$wk_i]

         SET_#($wk_idx_test)
         $wk_idx_sx    = -1
         $wk_idx_dx    = -1
         $wk_idx_sotto = -1
         $wk_idx_sopra = -1
         if( VAR_EXIST($wk_idx_test,"idx_sx") )    { $wk_idx_sx    = #idx_sx    }
         if( VAR_EXIST($wk_idx_test,"idx_dx") )    { $wk_idx_dx    = #idx_dx    }
         if( VAR_EXIST($wk_idx_test,"idx_sotto") ) { $wk_idx_sotto = #idx_sotto }
         if( VAR_EXIST($wk_idx_test,"idx_sopra") ) { $wk_idx_sopra = #idx_sopra }

         $wk_disallineati = 0

         $wk_idx_near = $wk_idx_sx
         GOSUB CtrlSub_VerificaAllineamentoModuli_368
         $wk_idx_near = $wk_idx_dx
         GOSUB CtrlSub_VerificaAllineamentoModuli_368
         $wk_idx_near = $wk_idx_sotto
         GOSUB CtrlSub_VerificaAllineamentoModuli_368
         $wk_idx_near = $wk_idx_sopra
         GOSUB CtrlSub_VerificaAllineamentoModuli_368

         if( $wk_disallineati==1 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_test,"") }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , "END" )

      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA CtrlSub_VerificaAllineamentoModuli_368
   {
      if( IS_IDX($wk_idx_near) == 0 ) { EXITSUB() }

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , STRCAT("$wk_idx_test = ",STR($wk_idx_test), " $wk_idx_near=",STR($wk_idx_near) ))

      //moduli con la stessa profondità
      $wk_prof_uguale = 0
      if( VAR_VAL($wk_idx_test,"Z") == VAR_VAL($wk_idx_near,"Z") )
      {
         $wk_prof_uguale = 1

         if( NOME($wk_idx_test) == "ModuloGlass_368" & NOME($wk_idx_near) != "ModuloGlass_368" ) { $wk_prof_uguale = 0 }
         if( NOME($wk_idx_test) != "ModuloGlass_368" & NOME($wk_idx_near) == "ModuloGlass_368" ) { $wk_prof_uguale = 0 }
      }

      if( $wk_prof_uguale == 1 )
      {
         ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , "PROFONDITA' UGUALE")
         EXITSUB()
      }

      //verifico se sono disallineati retro
      $wk_B0_Test = #base_0
      $wk_ang     = ANG_TOT_NOR($wk_idx_test)
      SET_#($wk_idx_near)
      $wk_B0_Near = #base_0

      $wk_distanza = DistanzaFraPunti($wk_B0_Test,$wk_B0_Near,$wk_ang+90)

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , STRCAT("DISTANZA PROF:",STR($wk_distanza)))

      if( $wk_distanza == 0 )
      {
         ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , "ALLINEATI")
         EXITSUB()
      }

      //se sono disallineati, verifico:
      // - 2 moduli di cui solo 1 ha il pannello
      // - modulo con pannello + modulo glass
      if( NOME($wk_idx_test) == "ModuloGlass_368" )
      {
         if( NOME($wk_idx_near) != "ModuloGlass_368"  )
         {
            if( VAR_VAL($wk_idx_near,"FLAG_ConPannelloLED")==1 ) { $wk_disallineati = 1 }
         }
      }

      if( NOME($wk_idx_test) != "ModuloGlass_368" )
      {
         if( NOME($wk_idx_near) == "ModuloGlass_368"  )
         {
            if( VAR_VAL($wk_idx_test,"FLAG_ConPannelloLED")==1 ) { $wk_disallineati = 1 }
         }
         else
         {
            if( VAR_VAL($wk_idx_test,"FLAG_ConPannelloLED")  != VAR_VAL($wk_idx_near,"FLAG_ConPannelloLED") ) { $wk_disallineati = 1 }
         }
      }

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , STRCAT("$wk_disallineati:",STR($wk_disallineati)))
   }

   PROCEDURA Posa_VediLuce_Led_PannelloRetro_368
   {
      @escluso = 1

      if( VediIlluminazione
        & @n_luce <= NumLuci ) { @escluso = 0 }

      @base_0.x = base_0.x + @n_luce*(X/(NumLuci+1)) - @X/2
      @base_0.y = base_0.y - @Y - 2
      @base_0.z = base_0.z + Z/2

      @ang_x = 0
      if( Verso != 0 )
      {
         @base_0.y = base_0.y + Y + @Y + 2
         @ang_x = 180
      }
   }

   PROCEDURA Ctrl_SovrappozioneCassettiCestoni_368
   {
      ScriviSuLog( 0 , "Ctrl_SovrappozioneCassCes_368" , "START" )

      WITH_ALIAS("$wk_mod_tmp","CtrlAllineamento368")

      $wk_mod = 0

      $wk_i = 1
      while ( $wk_i <= $wk_mod_tmp )
      {
         if( VAR_VAL_STR($wk_mod_tmp[$wk_i],"Tipo368")=="368-CAS"
           | VAR_VAL_STR($wk_mod_tmp[$wk_i],"Tipo368")=="368-CES" ) { AddItem2Array(-1,"wk_mod",$wk_mod_tmp[$wk_i] ,"") }

         $wk_i = $wk_i + 1
      }

      if( $wk_mod == 0 )
      {
         ScriviSuLog( 0 , "Ctrl_SovrappozioneCassCes_368" , "] END | NO-MODULI " )
         EXITSUB()
      }

      $wk_CG_Nome    = "Ctrl_SovrappozioneCassettiCestoni_368"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1259)

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_test =  $wk_mod[$wk_i]

         $wk_cass_sotto = 0

         SET_#($wk_idx_test)

         BOX_MODE(0)
         NEAR("$wk_mod_sotto",#idx_cnear_dw,2,0,"Modu*368")
         $wk_j = 1
         while ( $wk_j <= $wk_mod_sotto )
         {
            if( $wk_mod_sotto[$wk_j] != $wk_idx_test )
            {
               if( VAR_VAL_STR($wk_mod_sotto[$wk_j],"Tipo368")=="368-CAS"
                 | VAR_VAL_STR($wk_mod_sotto[$wk_j],"Tipo368")=="368-CES" )
               {
                  if( VAR_VAL($wk_mod_sotto[$wk_j],"Z") > VAR_VAL($wk_idx_test,"Z") )
                  {
                     $wk_cass_sotto = 1 $wk_j = $wk_mod_sotto
                  }
               }
            }

            $wk_j = $wk_j + 1
         }

         if( $wk_cass_sotto == 1 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_test,"") }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }

      ScriviSuLog( log , "Ctrl_VerificaAllineamentoModuli_368" , "END" )

      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_ModuliFixMuro_368
   {
      log = 0
      #ifdef TEC
         log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      ScriviSuLog( log , "Ctrl_ModuliFixMuro_368" , "START" )

      WITH_VAR("$wk_mod","VAR_FixMuro",0,1,"1")

      $wk_CG_Nome    = "Ctrl_ModuliFixMuro_368"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1275)


      if( $wk_mod == 0 )
      {
         ScriviSuLog( log , "Ctrl_ModuliFixMuro_368" , "] END NO MODULI CON VAR_FixMuro==1" )
         EXITSUB()
      }

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_mod  = $wk_mod[$wk_i]
         $wk_nome_mod = NOME($wk_idx_mod)

         //LZ 08/10/2021: aggiungo controllo su pcf
         if( VAR_VAL( $wk_idx_mod, "PCF_Elements") > 0 )
         {
            $wk_dist = QUERY_WALL( $wk_idx_mod, "distance from face R")
            if( $wk_dist != 0 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_mod,"") }
         }

         if( IS_MATCH($wk_nome_mod,"Modu*368") == 1 )
         {
            //Luca 19/04/2021 riporto modifiche di LAGO
            //$wk_dist = QUERY_WALL($wk_idx_mod,"distance from face R")
            //ScriviSuLog( log , "Ctrl_ModuliFixMuro_368" , STRCAT(STR($wk_idx_mod),"-",$wk_nome_mod," DIST=",STR($wk_dist)))
            //if( $wk_dist != 0 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_mod,"") }

            //LZ 07/04/2021
            //Dati pannello
            $wk_idx_pan = -1
            $wk_spe_pan = 19
            if( VAR_EXIST( $wk_idx_mod, "idx_pannelloLED"))
            {
               $wk_idx_pan = VAR_VAL( $wk_idx_mod, "idx_pannelloLED")
               if( IS_IDX($wk_idx_pan) ) { $wk_spe_pan = VAR_VAL($wk_idx_pan, "Z" ) }
            }

            $wk_flag_pan = VAR_VAL($wk_idx_mod,"FLAG_ConPannelloLED")
            //LZ 20/07/2021: l'ingombro del ModuloGlass_368 comprende lo spessore del pannello
            if( $wk_nome_mod == "ModuloGlass_368" ) { $wk_flag_pan = 0 }

            //Distanza
            $wk_dist = QUERY_WALL($wk_idx_mod,"distance from face R")
            //Luca 23/07/2021
            //se la distanza è zero non vengono create le variabili $Query_Wall*
            if( $wk_dist > 0 ) { $wk_dist = DISTANZA($Query_Wall1,$Query_Wall2) }

            ScriviSuLog( log , "Ctrl_ModuliFixMuro_368 - Idx: " , STRCAT(STR($wk_idx_mod),"(",$wk_nome_mod,") - DIST=",STR($wk_dist)))

            //LZ 15/06/2021: considero 0.1 di tolleranza per compensare gli errori di DISTANZA()
            //Considero lo spessore del pannello, se presente
            //if( $wk_dist != 0 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_mod,"") }
            //if( $wk_dist - ( VAR_VAL($wk_idx_mod,"FLAG_ConPannelloLED") * VAR_VAL($wk_idx_pan, "Z" ) ) != 0 )
            $wk_dist = $wk_dist - ( $wk_flag_pan * $wk_spe_pan )
            ScriviSuLog( log , "Ctrl_ModuliFixMuro_368 - Idx: " , STRCAT(STR($wk_idx_mod),"(",$wk_nome_mod,") - $wk_flag_pan: ", STR($wk_flag_pan), " - $wk_spe_pan: ", STR($wk_spe_pan), " - $wk_dist: ",STR($wk_dist)))

            if( $wk_dist <= -0.1 | $wk_dist >= 0.1 )
            {
               //LZ 08/10/2021: sui preconfigurati controllo solo il preconfigurato
               //AddItem2Array(-1,"wk_CG_Items",$wk_idx_mod,"")
               if( VAR_VAL( $wk_idx_mod, "in_pcfto") == 0
                 & VAR_VAL( $wk_idx_mod, "FLAG_Speciale") == 0 ) { AddItem2Array(-1,"wk_CG_Items",$wk_idx_mod,"") }
            }
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      ScriviSuLog( log , "Ctrl_ModuliFixMuro_368" , "END" )
      GOSUB CG_CFO_FineControllo
   }

   PROCEDURA Ctrl_ModuloMadiaGlass_368
   {
      log = 0
      #ifdef TEC
         log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif

      ScriviSuLog( log , "Ctrl_ModuloMadiaGlass_368" , "START" )

      WITH_VAR("$wk_mod","ModuloMadiaGlass_368",0,1,"1")

      $wk_CG_Nome    = "Ctrl_ModuloMadiaGlass_368"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = MSG(1308)

      if( $wk_mod == 0 )
      {
         ScriviSuLog( log , "Ctrl_ModuloMadiaGlass_368" , "] END NO MODULOMADIAGLASS" )
         EXITSUB()
      }

      $wk_i = 1
      while ( $wk_i <= $wk_mod )
      {
         $wk_idx_mod  = $wk_mod[$wk_i]

         ScriviSuLog( log , "Ctrl_ModuloMadiaGlass_368" , STRCAT("[",STR($wk_idx_mod),"]" ) )

         if( IsIdx($wk_idx_mod,"idx_mod_ref" ) == 1 )
         {
            SET_#($wk_idx_mod)

            //non può essere messo su elemento sospeso
            $wk_idx_inf = #idx_mod_ref
            $wk_idx_test = $wk_idx_inf

            vv = 1
            while( IS_IDX($wk_idx_test) & vv < 20 )
            {
               if( IsIdx($wk_idx_test,"idx_sotto") )
               {
                  $wk_idx_test = VAR_VAL( $wk_idx_test, "idx_sotto")
                  $wk_idx_inf = $wk_idx_test
               }
               else
               {
                  $wk_idx_test = -1
               }

               vv = vv + 1
            }

            ScriviSuLog( log , "Ctrl_ModuloMadiaGlass_368" , STRCAT("[",STR($wk_idx_mod),"] -- PRIMO SOTTO = ",STR($wk_idx_inf) ) )

            $wk_test = 0
            if( VAR_VAL($wk_idx_inf,"ConPiedini") == 0
              & VAR_VAL($wk_idx_inf,"ConSostegnoVetro") == 0
              & VAR_VAL($wk_idx_inf,"VAR_SostegnoOmega") == 0 )   { $wk_test = $wk_test + 1 }

            if( VAR_VAL($wk_idx_inf,"ConBifacciale") == 1 )       { $wk_test = $wk_test + 1 }

            if( VAR_VAL($wk_idx_inf,"FLAG_ConPannelloLED") == 1 ) { $wk_test = $wk_test + 1 }

            if( $wk_test > 0 ) { AddItem2Array( -1, "wk_CG_Items", $wk_idx_mod, "") }
         }
         else
         {
            AddItem2Array( -1, "wk_CG_Items", $wk_idx_mod, "")
         }

         $wk_i = $wk_i + 1
      }

      if( $wk_CG_Items > 0 ) { $wk_CG_Blocca = 1 }
      ScriviSuLog( log , "Ctrl_ModuloMadiaGlass_368" , "END" )
      GOSUB CG_CFO_FineControllo
   }

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

      CAT_VM_var = "C008"
      wk_var_gest = GetVarGest(CAT_VM_var)
      if( VAR_EXIST( ATTUALE(), wk_var_gest) == 0 )        { EXITSUB() }

      wk_top = ATTUALE()
      if( IsIdx( ATTUALE(), "idx_grafica") ) { wk_top = idx_grafica }

      BOX_MODE(0)
      NEAR_GLOBALE2( "wk_pcv", wk_top, 1, "Passacavi_368")
      NEAR_GLOBALE2( "wk_rip", wk_top, 1, "RipetitoreIR_368")
      wk_fori = wk_pcv + wk_rip

      CAT_VM_opz = "SM003"
      CAT_VM_sel = ""

      if( wk_fori > 0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SM003") }

      if( NOME(ATTUALE()) == "TopWildwood_368" )
      {
         CAT_VM_opz = "SM003;TP008;TP025;TP026;TP027;TP028"

         if( wk_fori == 1 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "TP008" ) }
         if( wk_fori == 2 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "TP025" ) }
         if( wk_fori == 3 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "TP026" ) }
         if( wk_fori == 4 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "TP027" ) }
         if( wk_fori >= 5 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "TP028" ) }
      }

      GOSUB Gest_CAT_VM
   }

   //LZ 14/09/2021: gestione posizionamento contenitori se in pcf
   //necessario per il passaggio delle bussole sul fondo
   PROCEDURA Set_Gest_C062_368
   {
      if( ACTION() <= 0 | ACTION()== 2 )                    { EXITSUB() }

      if( VAR_EXIST( ATTUALE(), "VAR_SostegnoOmega") == 0 ) { EXITSUB() }

      if( VAR_VAL( ATTUALE(), "FLAG_Modulo_AIR") == 1 )     { EXITSUB() }

      if( IS_VarsUser__(ATTUALE(),"GEST_C062") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C062")
         DEL_VARS_USER(ATTUALE(),"GEST_C062")
      }

      gest_C062  = "__"

      //LZ 26/10/2021: i valori non modificano la distinta gestionale, sono a tutti gli effetti solo delle indicazioni per la produzione
      //               TE002 serve quindi solo per i preconfigurati, che utilizzano delle giunzioni differenti per contenitori sovrapposti
      //               SO002 serve ogni qual volta è presente un omega sottostante
      //LZ 14/09/2021: necesario solo per i preconfigurati, in caso contrario genera dubbi alla produzione
      //if ( in_pcfto == 1 )
      //{
      //   if( VAR_VAL( ATTUALE(), "VAR_SostegnoOmega") == 1 )      { gest_C062 = "TE002" }
      //   else
      //   {
      //      if( VAR_VAL( ATTUALE(), "FLAG_ConModuloSotto") == 1 ) { gest_C062 = "SO002" }
      //   }
      //}
      if( VAR_VAL( ATTUALE(), "VAR_SostegnoOmega") == 1 )      { gest_C062 = "TE002" }
      else
      {
         if( in_pcfto == 1
           & VAR_VAL( ATTUALE(), "FLAG_ConModuloSotto") == 1 ) { gest_C062 = "SO002" }
      }

      GEST_C062 = gest_C062

      VarAdd = "GEST_C062"   GOSUB Add_TABER_VARSETTATE
   }

   //LZ 26/07/2021: 36e8 sideboard
   PROCEDURA Set_Gest_C062_ModuloGlass_368Sideboard
   {
      if( ACTION() <= 0 | ACTION() == 2 )                      { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C062") == 0 )            { EXITSUB() }

      if( IS_VarsUser__(ATTUALE(),"GEST_C062") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C062")
         DEL_VARS_USER(ATTUALE(),"GEST_C062")
      }

      gest_C062 = "__"
      if( ConPiedini == 1 )        { gest_C062 = "TE001" }
      if( VAR_SostegnoOmega == 1 ) { gest_C062 = "TE002" }

      if( GEST_C062 != gest_C062 )
      {
         GEST_C062 = gest_C062
         VarAdd = "GEST_C062"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA Set_Gest_C090_ModuloGlass_368Sideboard
   {
      if( ACTION() <= 0 | ACTION() == 2)             { EXITSUB() }

      VarAdd = "GEST_C090"

      if( VAR_EXIST( ATTUALE(), VarAdd) == 0)        { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) != 0)
      {
         DEL_VARS_USER( ATTUALE(), VarAdd)
         DEL_VAR_MODIFICATE( ATTUALE(), VarAdd)
      }

      if( VAR_VAL( ATTUALE(), "GIUNZIONI_REV") <= 0) { EXITSUB() }

      gest_C090 = STRCAT( "REV", STR(GIUNZIONI_REV))

      if( GEST_C090 != gest_C090 )
      {
         GEST_C090 = gest_C090
         GOSUB Add_TABER_VARSETTATE
      }
   }

   //Luca 06/04/2021
   PROCEDURA CtrlCollisioneRipiano_368
   {
      if( ACTION() <=0 | ACTION() == 2 | $OnLoadOrder == 1 )  { EXITSUB() }

      COMPONENTI2("mdf_MdF_Cer", PADRE(idx_att, 1), "MdF_CerniereBattenti")
      if( mdf_MdF_Cer == 0 )  { EXITSUB() }

      idx_mdf_cer = mdf_MdF_Cer[1]

      if( mdf_MdF_Cer > 1 )
      {
         iM = 1
         while( VAR_VAL(mdf_MdF_Cer[1], STRCAT("py_CerBat", STR(iM))) > 0 ) { iM = iM + 1 }
         ncer_1 = iM - 1

         iM = 1
         while( VAR_VAL(mdf_MdF_Cer[2], STRCAT("py_CerBat", STR(iM))) > 0 ) { iM = iM + 1 }
         ncer_2 = iM - 1

         if( ncer_2 > ncer_1 ) { idx_mdf_cer = mdf_MdF_Cer[2] }
      }

      offy_anta = VAR_VAL(idx_mdf_cer,"base_0.y") - VAR_VAL(GetTopLevel(ATTUALE()),"base_0.y")
      rip_collide = 0

      base_0_rip = base_0.y - VAR_VAL(GetTopLevel(ATTUALE()),"base_0.y")
      alto_0_rip = alto_0.y - VAR_VAL(GetTopLevel(ATTUALE()),"base_0.y")

      iM=1
      while( VAR_EXIST(idx_mdf_cer, STRCAT("py_CerBat", STR(iM))) == 1 & rip_collide == 0 )
      {
         pos_cer_start = VAR_VAL(idx_mdf_cer, STRCAT("py_CerBat", STR(iM))) - 25  +  offy_anta
         pos_cer_end  = pos_cer_start + 50 + offy_anta

         if( base_0_rip > pos_cer_start & base_0_rip < pos_cer_end ) { rip_collide = 1 }
         if( alto_0_rip > pos_cer_start & alto_0_rip < pos_cer_end ) { rip_collide = 1 }

         iM = iM+1
      }

      if( rip_collide == 0 ) { EXITSUB() }

      //sposto il ripiano
      wk_diff_a = pos_cer_end - base_0_rip
      wk_diff_b = alto_0_rip - pos_cer_start

      new_pos_y = 0

      //alzo
      if( wk_diff_a < wk_diff_b )
      {
         new_pos_y = base_0_rip + wk_diff_a + Y/2
      }
      //abbasso
      else
      {
         new_pos_y = base_0_rip - wk_diff_b - Y/2
      }

      if( new_pos_y == 0 )  { EXITSUB() }

      if( VAR_EXIST(ATTUALE(),"base_0_offset") )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"base_0_offset")
         DEL_VAR(ATTUALE(),"base_0_offset")
      }
      COMANDO(STRCAT("change_lev ",STR(ATTUALE()), " ", STR(new_pos_y)))
   }

   PROCEDURA PCF_PassaVar_Elements
   {
      if( VAR_VAL( @idx_att, "VAR_FixMuro_Elements") > 0 )  { VAR_FixMuro  = 1 }
      if( VAR_VAL( @idx_att, "VAR_FixTerra_Elements") > 0 ) { VAR_FixTerra = 1 }

      M4_A_MURO = 0
      if( VAR_FixMuro > 0 )  { M4_A_MURO = 1 }
   }

   PROCEDURA CtrlSchiena_TrovaElementiVicini_368
   {
      if( ACTION()<=0 | ACTION()==2 | COMPONENDO() )  { EXITSUB() }

      if( $OnLoadOrder )                              { EXITSUB() }

      idx_ele_sx = -1      nome_ele_sx = ""
      idx_ele_dx = -1      nome_ele_dx = ""
      idx_ele_up = -1      nome_ele_up = ""
      idx_ele_dw = -1      nome_ele_dw = ""

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_ele_up",idx_cnear_up,1,"*")
      NEAR_GLOBALE2("wk_ele_dw",idx_cnear_dw,1,"*")
      NEAR_GLOBALE2("wk_ele_sx",idx_cnear_sx,1,"*")
      NEAR_GLOBALE2("wk_ele_dx",idx_cnear_dx,1,"*")

      i = 1
      while ( i <= wk_ele_up )
      {
         if( NOME(wk_ele_up[i]) == "Modulo_368"
           | NOME(wk_ele_up[i]) == "ModuloGlass_368"
           | NOME(wk_ele_up[i]) == "ModuloGiorno_368"
           | NOME(wk_ele_up[i]) == "Ripiano_30MM" )  { idx_ele_up = wk_ele_up[i] }
         i = i + 1
      }

      i = 1
      while ( i <= wk_ele_dw )
      {
         if( NOME(wk_ele_dw[i]) == "Modulo_368"
           | NOME(wk_ele_dw[i]) == "ModuloGlass_368"
           | NOME(wk_ele_dw[i]) == "ModuloGiorno_368"
           | NOME(wk_ele_dw[i]) == "Ripiano_30MM" )  { idx_ele_dw = wk_ele_dw[i] }
         i = i + 1
      }

      i = 1
      while ( i <= wk_ele_sx )
      {
         if( NOME(wk_ele_sx[i]) == "ModuloGlass_368"
           | NOME(wk_ele_sx[i]) == "Modulo_368"
           | NOME(wk_ele_sx[i]) == "ModuloGiorno_368"
           | NOME(wk_ele_sx[i]) == "Fianco_30MM" )  { idx_ele_sx = wk_ele_sx[i] }
         i = i + 1
      }

      i = 1
      while ( i <= wk_ele_dx )
      {
         if( NOME(wk_ele_dx[i]) == "ModuloGlass_368"
           | NOME(wk_ele_dx[i]) == "Modulo_368"
           | NOME(wk_ele_dx[i]) == "ModuloGiorno_368"
           | NOME(wk_ele_dx[i]) == "Fianco_30MM" ) { idx_ele_dx = wk_ele_dx[i] }
         i = i + 1
      }

      if( IS_IDX(idx_ele_sx) ) { nome_ele_sx = NOME(idx_ele_sx) }
      if( IS_IDX(idx_ele_dx) ) { nome_ele_dx = NOME(idx_ele_dx) }
      if( IS_IDX(idx_ele_up) ) { nome_ele_up = NOME(idx_ele_up) }
      if( IS_IDX(idx_ele_dw) ) { nome_ele_dw = NOME(idx_ele_dw) }
   }

   PROCEDURA Set_Omega_TipoComp
   {
      if( ACTION()<=0 | ACTION() == 2 ) { EXITSUB() }

      //Cerco di stabilire il tipo di composizione se non specificato
      if( IS_VAR_FIXED( ATTUALE(), "VAR_TipoComp") == 0 )
      {
         VAR_TipoComp = 0

         if( UN_PADRE("MadiaSideboardNow") )
         {
            VAR_TipoComp = 3
         }
         else
         {
            if( VAR_VAL( ATTUALE(), "in_pcfto") == 1
              & IS_IDX( VAR_VAL( ATTUALE(), "idx_pcf")) == 1
              & IS_IDX(idx_cnear_up) )
            {
               BOX_MODE(0)
               NEAR_GLOBALE2("wk_itm", idx_cnear_up, 2, "*")

               wk_mat = 0
               wk_368 = 0

               wk_i = 1
               while( wk_i <= wk_itm )
               {
                  wk_itm_att = wk_itm[wk_i]
                  wk_itm_att_nome = NOME(wk_itm_att)

                  //Solo primi livelli del preconfigurato
                  if( PADRE( wk_itm_att, 1) == idx_pcf )
                  {
                    if( IS_MATCH( wk_itm_att_nome, "ModuloMateria_Mat") == 1 ) { wk_mat = wk_mat + 1 }
                    if( IS_MATCH( wk_itm_att_nome, "*368*") == 1 )             { wk_368 = wk_368 + 1 }
                  }

                  wk_i = wk_i + 1
               }

               wk_tot = wk_mat + wk_368

               if( wk_mat > 0 & wk_mat == wk_tot ) { VAR_TipoComp = 1 }
               if( wk_368 > 0 & wk_368 == wk_tot ) { VAR_TipoComp = 2 }
            }
         }
      }
   }

   PROCEDURA Set_Omega_OrieComp
   {
      if( ACTION()<=0 | ACTION() == 2 ) { EXITSUB() }

      //dimensioni corrette nei composti se orientamento non specificato
      if( IS_VAR_FIXED( ATTUALE(), "VAR_OrieComp") == 0 )
      {
         VAR_OrieComp = 0

         wk_idx_ref = -1
         if( VAR_VAL( ATTUALE(), "in_pcfto") == 1
           & IS_IDX( VAR_VAL( ATTUALE(), "idx_pcf")) == 1 ) { wk_idx_ref = idx_pcf }

         if( UN_PADRE("MadiaSideboardNow") ) { wk_idx_ref = GetTopLevel(ATTUALE()) }

         if( IS_IDX(wk_idx_ref) )
         {
            VAR_AltComp = VAR_VAL( wk_idx_ref, "Y")
            if( VAR_AltComp >= X ) { VAR_OrieComp = 1 }

            //Specifiche dubbie, ipotizzo il riferimento solo alla parte superiore
            VAR_AltComp = VAR_AltComp - Y
         }

         //Simone 08/01/25 - Con omega parziale, la composizione è considerata sempre orizzontale
         if( VAR_Parziale != 0 ) { VAR_OrieComp = 0 }
      }
   }

   PROCEDURA Set_Omega_GambaC
   {
      if( IS_VAR_FIXED( ATTUALE(), "VAR_GambaC"))             { EXITSUB() }
      if( VAR_VAL(PADRE(ATTUALE(), -1), "PCF_Capsule") == 1 ) { EXITSUB() }

      //LZ 28/02/2022: mail "TV UNITS MATERIA - Aggiunta sostegno centrale" del 11/02/2022:
      // vado ad uniformare la regola che vede l'inserimento del sostegno centrale per composizioni con largh >= 2300.
      // Questo causa uno scostamento dal listino Elements sia in termini di aspetto che di prezzo.
      // Per quest'ultimo vado ad identificare i casi che, a differenza di prima, ora prevedono il sostegno ma questo non deve fare maggiorazione.
      // L'azzeramento del prezzo è dato dalla GEST_C003 con valore a MA001 (se composizione Materia) o GS001 (se composizione 368 glass)
      // TODO: da valutare se mantenere il prezzo azzerato in caso di esplosione.

      // Presenza gamba centrale:
      // 0: assente
      // 1: presente
      VAR_GambaC = 0

      if( NOME(ATTUALE()) == "SostegnoOmega" )
      {
         if( X > 2300 ) { VAR_GambaC = 1 }
         //& VAR_VAL( PADRE(ATTUALE(), -1), "PCF_Capsule") == 0 ) { VAR_GambaC = 1 }

         //Simone 26/10/2022 - Riscrivo perchè le indicazioni di un anno fa non erano chiare/confermate
         if( VAR_Revisione_SostC > 1 )
         {
            VAR_GambaC = 0

            //Now Sideboard e Omega generico
            if( X > 2300 )
            {
              if( VAR_TipoComp == 0
                | VAR_TipoComp == 3 ) { VAR_GambaC = 1 }
            }

            //Materia e 368
            if( VAR_TipoComp == 1
              | VAR_TipoComp == 2 )
            {
               if( VAR_AltComp < 552 )
               {
                  if( X > 2760 ) { VAR_GambaC = 1 }
               }
               else
               {
                  if( X > 2576 ) { VAR_GambaC = 1 }
               }
            }
         }

         // Tipologia di gamba centrale:
         //-2: 368 glass     SENZA maggiorazione di prezzo
         //-1: materia       SENZA maggiorazione di prezzo
         // 0: generico      CON maggiorazione di prezzo
         // 1: materia       CON maggiorazione di prezzo
         // 2: 368 glass     CON maggiorazione di prezzo
         // 3: now sideboard CON maggiorazione di prezzo
         VAR_GambaC_tipo = VAR_VAL( ATTUALE(), "VAR_TipoComp")

         //Materia e 368
         if( VAR_TipoComp == 1
           | VAR_TipoComp == 2 )
         {
            //Non fa maggiorazione se non era previsto
            VAR_GambaC_tipo = -VAR_TipoComp

            if( VAR_AltComp < 552 )
            {
               if( X > 2760 )
               {
                  //VAR_GambaC = 1
                  //Già previsto a listino, deve passare prezzo
                  VAR_GambaC_tipo = VAR_TipoComp
               }
            }
            else
            {
               if( X > 2576 )
               {
                  //VAR_GambaC = 1
                  //Già previsto a listino, deve passare prezzo
                  VAR_GambaC_tipo = VAR_TipoComp
               }
            }
         }
      }

      //Simone 27/10/2022
      if( NOME(ATTUALE()) == "SostegnoOmega_Mat" )
      {
         //if( X > 2300 & VAR_Revisione >= 2 ) { VAR_GambaC = 1 }

         if( IsIdx(ATTUALE(),"idx_pcf") == 1
           & VAR_Revisione >= 2 )
         {
            wk_alt_tot  = VAR_VAL(idx_pcf,"alto_0.y")
            VAR_AltComp = wk_alt_tot - Y - 4

            if( VAR_AltComp < 552 )
            {
               if( X > 2760 ) { VAR_GambaC = 1 }
            }
            else
            {
               if( X > 2576 ) { VAR_GambaC = 1 }
            }
         }
      }
   }

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

      VarAdd = "GEST_C157"
      if( VAR_EXIST( ATTUALE(), VarAdd) == 0 )          { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), VarAdd) ) { DEL_VAR_MODIFICATE( ATTUALE(), VarAdd) }

      if( VAR_Parziale > 0 ) { VAR_VALUESTR_SET( ATTUALE(), VarAdd, "DX001") }
      else                   { VAR_VALUESTR_SET( ATTUALE(), VarAdd, "SX001") }

      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_VAR_TipoSost_SostegnoOmega
   {
      if( VAR_EXIST( ATTUALE(), "GEST_C052") )
      {
         if( IS_MATCH( GEST_C052, "V*") == 1 )  { VAR_TipoSost = 1 }
         else                                   { VAR_TipoSost = 0 }
      }
   }

   //LZ 02/08/2021: cucine laccate
   PROCEDURA Set_Radice_AntaSingola_368
   {
      Z = $M368_Spe_Ant

      if( VAR_Melaminico == 1
        & ( FLAG_Moduli_368 == 0
          | UN_PADRE("ModuloP*368"))) { Z = $Cuc_Spe_Ant_Mel }

      if( IS_VAR_FIXED( ATTUALE(), "RADICE")
        | IS_VAR_FIXED( ATTUALE(), "GEST_CODICE")) { EXITSUB() }

      perRADICE = "AN36O"

      if( Apertura=="BA"
        | Apertura=="FX")             { perRADICE = "AN36V" }

      if( Cucina_Versione > 2)        { perRADICE = STRCAT( perRADICE, "3") } //AN36O3, AN36V3

      if( VAR_Melaminico == 1
        & ( FLAG_Moduli_368 == 0
          | UN_PADRE("ModuloP*368"))) { perRADICE = "ANPEME" }

      GEST_CODICE = ""
      RADICE = perRADICE

      //Luca 22/03/2021
      if( UN_PADRE("FustoContenitoreAlzata_AIR") )
      {
         RADICE = ""
         GEST_CODICE = "AIR752"
      }

      if( VAR_Melaminico != 1
        & UN_PADRE("ModuloTampPensile_368") )
      {
         RADICE = ""
         GEST_CODICE = "F23900"
      }
   }

   //LZ 07/09/2021: imposto le variabili tecniche per la gestione della ferramenta legata al supporto omega
   PROCEDURA Set_Vt_SuppOmega
   {
      //Variabili:
      //VT_NRVANI   "Omega - Numero vani su omega"
      //VT_NRFIXOMG "Omega - Numero viti fissaggio (6 x fondo, 3 se X < 368)"
      //VT_NRREGPL  "Omega - Numero grani regolazione (2 x fondo esterno e 4 x fondo interno)"
      //VT_NRGMB    "Omega - Numero gambe per modulo"

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

      $wk_att_nome = NOME(ATTUALE())

      //Elementi:
      $wk_test_nome = "Fondo_Mat;FondoMadiaNow;Fondo_368"
      //Ho i valori nei moduli glass, ma non devono essere conteggiati
      //$wk_test_nome = "Fondo_Mat;FondoMadiaNow;Fondo_368;ModuloGlass_368Sideboard"

      if( IS_MATCH( $wk_att_nome, "SostegnoOmega*") == 1 )
      {
         //Sono omega
         VT_NRVANI = 0
         VT_NRGMB = 0
         VT_NRFIXOMG = 0
         VT_NRREGPL = 0

         $wk_test_near_up = ATTUALE()
         if( IsIdx( ATTUALE(), "idx_cnear_up")) { $wk_test_near_up = VAR_VAL( ATTUALE(), "idx_cnear_up") }

         BOX_MODE(0)
         NEAR_GLOBALE2( "wk_elementi", $wk_test_near_up, 5, "*")

         $wk_i = 1
         while( $wk_i <= wk_elementi )
         {
            $wk_elementi_att      = wk_elementi[$wk_i]
            $wk_elementi_att_nome = NOME($wk_elementi_att)

            if( Is_In_StrArray( $wk_elementi_att_nome, $wk_test_nome, ";") == 1 )
            {
               VT_NRVANI = VT_NRVANI + 1
               VT_NRGMB = VT_NRGMB + VAR_VAL( $wk_elementi_att, "VT_NRGMB")
               VT_NRFIXOMG = VT_NRFIXOMG + VAR_VAL( $wk_elementi_att, "VT_NRFIXOMG")
               VT_NRREGPL = VT_NRREGPL + VAR_VAL( $wk_elementi_att, "VT_NRREGPL")
            }

            $wk_i = $wk_i + 1
         }
      }
      else
      {
         //Sono un modulo/fondo
         VT_NRGMB = 0
         VT_NRFIXOMG = 0
         VT_NRREGPL = 0

         $wk_test_near_dw = ATTUALE()
         if( IsIdx( ATTUALE(), "idx_cnear_dw")) { $wk_test_near_dw = VAR_VAL( ATTUALE(), "idx_cnear_dw") }

         BOX_MODE(0)
         NEAR_GLOBALE2( "wk_omega", $wk_test_near_dw, 5, "*Omega*")

         if( wk_omega > 0 )
         {
            //1 - VT_NRGMB: Numero gambe
            $wk_i = 1
            while( $wk_i <= wk_omega )
            {
               $wk_omega_att = wk_omega[$wk_i]
               $wk_omega_att_nome = NOME($wk_omega_att)

               if( $wk_omega_att_nome == "VetroOmega"
                 | $wk_omega_att_nome == "GambaOmega" )   { VT_NRGMB = VT_NRGMB + 1 }

               $wk_i = $wk_i + 1
            }

            //2 - VT_NRFIXOMG: Numero viti fissaggio (6 x fondo, 3 se X < 368)
            VT_NRFIXOMG = 6
            if( VAR_VAL( GetTopLevel(ATTUALE()), "X") < 368 ) { VT_NRFIXOMG = 3 }

            //3 - VT_NRREGPL: Numero grani regolazione (2 x fondo esterno e 4 x fondo interno)
            if( VT_NRGMB == 0 ) { VT_NRREGPL = 4 }
            if( VT_NRGMB == 1 ) { VT_NRREGPL = 2 }
         }
      }
   }

   PROCEDURA Set_Verso_SostegnoOmega
   {
      if( IS_VAR_FIXED( ATTUALE(), "VAR_Parziale") ) { EXITSUB() }

      VAR_Parziale = 0
      if( IS_IDX(idx_cnear_sx) == 0
        | IS_IDX(idx_cnear_dx) == 0 )                { EXITSUB() }

      // Solo per 368 o in casi generici
      if( VAR_TipoComp != 0
        & VAR_TipoComp != 2 )                        { EXITSUB() }

      // Se non sono generico, deve esistere la variabile per la sporgenza
      if( FLAG_CompostoGEN == 0
        & VAR_EXIST( ATTUALE(), "GEST_C157") == 0 )  { EXITSUB() }

      BOX_MODE(0)
      NEAR_GLOBALE("wk_368_sx_tmp", idx_cnear_sx, 5, 1, "Modulo*_368")
      NEAR_GLOBALE("wk_368_dx_tmp", idx_cnear_dx, 5, 1, "Modulo*_368")

      wk_368_sx = wk_368_sx_tmp
      wk_368_dx = wk_368_dx_tmp
      if( VAR_VAL( ATTUALE(), "in_pcfto") == 1 )
      {
         wk_368_sx = 0
         $wk_i = 1
         while( $wk_i <= wk_368_sx_tmp )
         {
            if( PADRE( ATTUALE(), -1) == PADRE( wk_368_sx_tmp[$wk_i], -1))
            {
               wk_368_sx = wk_368_sx + 1
            }

            $wk_i = $wk_i + 1
         }

         wk_368_dx = 0
         $wk_i = 1
         while( $wk_i <= wk_368_dx_tmp )
         {
            if( PADRE( ATTUALE(), -1) == PADRE( wk_368_dx_tmp[$wk_i], -1))
            {
               wk_368_dx = wk_368_dx + 1
            }

            $wk_i = $wk_i + 1
         }
      }

      if( wk_368_sx > 0 & wk_368_dx == 0 ) { VAR_Parziale =  1 }
      if( wk_368_sx == 0 & wk_368_dx > 0 ) { VAR_Parziale = -1 }
   }

   //LZ 28/02/2022: vedi Set_Omega_GambaC, utilizzato per azzerarne il prezzo
   PROCEDURA Set_Gest_C003_Omega_GambaC
   {
      if( ACTION() <= 0 | ACTION() == 2 )            { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C003") == 0 )  { EXITSUB() }

     #ifndef TEC
      HIDE_ON_EDIT2( ATTUALE(), "GEST_C003", 1)
     #endif

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C003") )        { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C003") }

      GEST_C003 = "__"
      if( VAR_VAL( ATTUALE(), "VAR_GambaC_tipo") == -1 ) { GEST_C003 = "MA001" }
      if( VAR_VAL( ATTUALE(), "VAR_GambaC_tipo") == -2 ) { GEST_C003 = "GS001" }

      VarAdd = "GEST_C003"   GOSUB Add_TABER_VARSETTATE
   }

   //LZ 08/09/2021
   // attualmente i ripiani 368 sono disponibili solo in VT001 - vetro extrachiaro
   // Per la madia capsule codice 132401, nel ripiano P15034 viene resa disponibile anche la finitura VT002 - Fumè.
   // Blocco modifiche di finitura non permesse
   PROCEDURA Set_Gest_C014_Ripiano_368
   {
      if( ACTION() <= 0 | ACTION() == 2 )                       { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C014") == 0 )             { EXITSUB() }
      if( UN_PADRE("ModuloGiorno_368") )                        { EXITSUB() }

      gest_C014 = "VT001"
      if( VAR_VAL( PADRE( ATTUALE(), -1), "PCF_Capsule") == 1 ) { gest_C014 = "VF001" }

      if( GEST_C014 != gest_C014
        & VAR_VAL_STR(ATTUALE(),"GEST_C160") != "S0000" )
      {
         if( IS_VAR_FIXED( ATTUALE(), "GEST_C014") == 1 )
         {
            DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C014")
         }

         GEST_C014 = gest_C014
         VarAdd = "GEST_C014"   GOSUB Add_TABER_VARSETTATE
      }
   }

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

      DEL_VAR( ATTUALE(), "punto_bif368_*")

      if( VAR_VAL(ATTUALE(),"VAR_FixMuro") == 1
        & VAR_VAL(ATTUALE(),"FLAG_Speciale") == 0)           { EXITSUB() }

      COMPONENTI2( "wk_moduli", ATTUALE(), "Modu*368")
      wk_modulo_num = 1
      while( wk_modulo_num <= wk_moduli)
      {
         wk_modulo_att = wk_moduli[wk_modulo_num]

         ArrayCopy2Idx( wk_modulo_att, "punto_bif368_sx", ATTUALE(), STRCAT( "punto_bif368_sx_", STR(wk_modulo_att)))
         ArrayCopy2Idx( wk_modulo_att, "punto_bif368_dx", ATTUALE(), STRCAT( "punto_bif368_dx_", STR(wk_modulo_att)))
         ArrayCopy2Idx( wk_modulo_att, "punto_bif368_up", ATTUALE(), STRCAT( "punto_bif368_up_", STR(wk_modulo_att)))
         ArrayCopy2Idx( wk_modulo_att, "punto_bif368_dw", ATTUALE(), STRCAT( "punto_bif368_dw_", STR(wk_modulo_att)))

         wk_modulo_num = wk_modulo_num + 1
      }
   }

   PROCEDURA Posiziona_Vetro_WallPanel_368
   {
      @escluso = 1
      if( vetri_num > 0
        & vetro_num <= vetri_num ) { @escluso = 0 }

      FIN_var = "C042"
      GOSUB rivestimento

      //Posizionamento standard
      @X = X
      if( vetri_num > 1 ) { @X = (X - $M368_Aria_Ant_Ant_X * (vetri_num - 1))/vetri_num }
      @Y = Y
      @Z = Spe_PanVet

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

      //Se specificata dimensione
      if( vetri_dim_arr >= vetri_num
        & vetri_dim_arr >= vetro_num )
      {
         @X = ATOI(vetri_dim_arr[vetro_num])
      }

      @base_0.x = @base_0.x + wk_x_prec
      wk_x_prec = wk_x_prec + @X + $M368_Aria_Ant_Ant_X
   }

   PROCEDURA Assegna_VT_SPSP368
   {
      $wk_log = 0
      $wk_proc_nome     = "VT_SPSP368 | "
      $wk_proc_nome_sub = STRCAT( $wk_proc_nome, " ")

      ScriviSuLog( $wk_log , $wk_proc_nome, "START")

      $wk_spsp368_vt = "VT_SPSP368"

      // Il controllo parte dai near di dx nei confronti di quelli di sx
      $wk_spsp368_near_var = 2
      $wk_spsp368_near_var[1] = "idx_spigolo_ad"
      $wk_spsp368_near_var[2] = "idx_spigolo_bd"
      //$wk_spsp368_near_var[3] = "idx_spigolo_as"
      //$wk_spsp368_near_var[4] = "idx_spigolo_bs"

      $wk_spsp368_near_tipo_var = "Tipo_near"

      WITH_VAR( "$wk_fusti", $wk_spsp368_vt, $num_con_figli, 0, "")

      if( $wk_fusti <= 0 ) { EXITSUB() }

      //Reset variabile tecnica
      ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT("- Resetto valori nei ", STR($wk_fusti), " fusti trovati."))

      $wk_fusti_reset = 0
      $wk_fusti_num = 1
      while( $wk_fusti_num <= $wk_fusti )
      {
         $wk_fusto_att  = $wk_fusti[$wk_fusti_num]

         if( VAR_VAL( $wk_fusto_att, $wk_spsp368_vt) > 0 )
         {
            $wk_fusti_reset = $wk_fusti_reset + 1
            if( IS_VAR_FIXED( $wk_fusto_att, $wk_spsp368_vt)) { DEL_VAR_MODIFICATE( $wk_fusto_att, $wk_spsp368_vt) }
            VAR_VALUE_SET( $wk_fusto_att, $wk_spsp368_vt, 0)
         }

         $wk_fusti_num = $wk_fusti_num + 1
      }

      ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT( "- Valori resettati: ", STR($wk_fusti_reset)))

      //Fusti
      $wk_fusti_num = 1
      while( $wk_fusti_num <= $wk_fusti )
      {
         $wk_fusto_att = $wk_fusti[$wk_fusti_num]                                        //Fusto: idx

         //Near spigolo nei singoli fusti
         $wk_near_num = 1
         while( $wk_near_num <= $wk_spsp368_near_var )
         {
            $wk_near_att_var = $wk_spsp368_near_var[$wk_near_num]                        //Near su spigolo: variabile dove è memorizzato l'idx

            if( IsIdx( $wk_fusto_att, $wk_near_att_var) == 1 )
            {
               $wk_near_att      = VAR_VAL( $wk_fusto_att, $wk_near_att_var)             //Near su spigolo: idx
               $wk_near_att_nome = NOME($wk_near_att)                                    //Near su spigolo: nome

               $wk_near_att_tipo = VAR_VAL_STR( $wk_near_att, $wk_spsp368_near_tipo_var) //Near su spigolo: tipo
               $wk_near_att_tipo = RIGHT( $wk_near_att_tipo, 1)

               if( $wk_near_att_tipo == "d" ) // Il controllo parte dai near di dx nei confronti di quelli di sx
               {
                  $wk_proc_nome_sub = STRCAT( $wk_proc_nome, "  ", STR($wk_fusto_att), "_", NOME($wk_fusto_att), " | ")                     //Prefisso log
                  ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT( "- Analizzo spigolo numero: ", STR($wk_near_num),
                                                                   " - Idx spigolo: ", STR($wk_near_att)))
                  $wk_proc_nome_sub = STRCAT( $wk_proc_nome_sub, STR($wk_near_att), "_", $wk_near_att_nome, "-", $wk_near_att_tipo, " | ")  //Prefisso log

                  //Spigoli vicini
                  BOX_MODE(0)
                  NEAR_GLOBALE2( "$wk_spigoli_near", $wk_near_att, 1, $wk_near_att_nome)

                  ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT( "- Spigoli vicini trovati: ", STR($wk_spigoli_near)))

                  $wk_spigoli_near_num = 1
                  while( $wk_spigoli_near_num <= $wk_spigoli_near )
                  {
                     $wk_spigoli_near_att = $wk_spigoli_near[$wk_spigoli_near_num]                                //Spigoli vicini: idx

                     if( $wk_spigoli_near_att != $wk_near_att ) //Verifico di non aver trovato il near di partenza
                     {
                        $wk_spigoli_near_att_tipo = VAR_VAL_STR( $wk_spigoli_near_att, $wk_spsp368_near_tipo_var) //Spigoli vicini: tipo
                        $wk_spigoli_near_att_tipo = RIGHT( $wk_spigoli_near_att_tipo, 1)

                        ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT( "- Analizzo spigolo vicino numero: ", STR($wk_spigoli_near_num),
                                                                         " - Idx spigolo vicino: ", STR($wk_spigoli_near_att),
                                                                         " - Tipo spigolo vicino: ", $wk_spigoli_near_att_tipo))

                        if( $wk_spigoli_near_att_tipo != ""
                          & $wk_spigoli_near_att_tipo != $wk_near_att_tipo ) //Se lo spigolo vicino ha un tipo vicino e contrapposto al near di partenza, assegno
                        {
                           $wk_spigoli_near_pdr        = PADRE( $wk_spigoli_near_att, 1)                //Spigolo vicino: idx padre
                           $wk_spigoli_near_pdr_vt_val = VAR_VAL( $wk_spigoli_near_pdr, $wk_spsp368_vt) //Spigolo vicino: valore variabile tecnica del padre
                           $wk_spigoli_near_pdr_z      = VAR_VAL( $wk_spigoli_near_pdr, "Z")            //Spigolo vicino: profondità padre

                           $wk_fusto_vt_val = VAR_VAL( $wk_fusto_att, $wk_spsp368_vt)                   //Fusto: valore variabile tecnica
                           $wk_fusto_z      = VAR_VAL( $wk_fusto_att, "Z")                              //Fusto: profondità

                           ScriviSuLog( $wk_log , $wk_proc_nome_sub, STRCAT( "- Padre spigolo vicino: ", STR($wk_spigoli_near_pdr),
                                                                            " - Nome padre spigolo vicino: ", NOME($wk_spigoli_near_pdr),
                                                                            " - Vt val padre spigolo vicino: ", STR($wk_spigoli_near_pdr_vt_val),
                                                                            " - Z padre spigolo vicino: ", STR($wk_spigoli_near_pdr_z),
                                                                            " - Vt val fusto attuale: ", STR($wk_fusto_vt_val),
                                                                            " - Z fusto attuale: ", STR($wk_fusto_z)))

                           //Incremento vt sul fusto più profondo
                           if( $wk_fusto_z <= $wk_spigoli_near_pdr_z ) { VAR_VALUE_SET( $wk_fusto_att, $wk_spsp368_vt, $wk_fusto_vt_val + 1) }
                           else                                        { VAR_VALUE_SET( $wk_spigoli_near_pdr, $wk_spsp368_vt, $wk_spigoli_near_pdr_vt_val + 1) }
                        }
                     }

                     $wk_spigoli_near_num = $wk_spigoli_near_num + 1
                  }
               }
            }

            $wk_near_num = $wk_near_num + 1
         }

         $wk_fusti_num = $wk_fusti_num + 1
      }

      ScriviSuLog( $wk_log , $wk_proc_nome, "END")
   }

   PROCEDURA Posiziona_Vetro_368_Mirror
   {
      // 1 - Esclusione
      @escluso = 1
      if( @vetro_num <= n_vtr ) { @escluso = 0 }

      // 2 - Grafica
      @FLAG_Blend = 1

      // 2.1 - Posizionamento
      if( @vetro_num == 1 ) { wk_offs = 0 }

      @base_0.x = base_0.x + RieX_Pan + wk_offs
      @base_0.y = base_0.y + RieY_Pan + wk_offs
      @base_0.z = base_0.z + Spe_Pan

      // 2.2 - Dimensionamento
      wk_dim_var = STRCAT( "dim_vtr", STR(@vetro_num))

      @X = VAR_VAL(idx_att,wk_dim_var)
      @Y = VAR_VAL(idx_att,wk_dim_var)
      @Z = Spe_Vet

      // 2.2.1 - Ultimo vetro per differenza
      if( @vetro_num == n_vtr )
      {
         @X = Xr - wk_offs
         @Y = Yr - wk_offs
         VAR_VALUE_SET(idx_att,wk_dim_var,@X)
      }
      if( @vetro_num > n_vtr ) { VAR_VALUE_SET(idx_att,wk_dim_var,0) }

      // 2.3 - Aggiorno
      if( orie_vtr == "V" )
      {
         @Y = Yr
         @base_0.y = base_0.y + RieY_Pan
         wk_offs = wk_offs + @X
      }
      if( orie_vtr == "O" )
      {
         @X = Xr
         @base_0.x = base_0.x + RieX_Pan
         wk_offs = wk_offs + @Y
      }

      // 2.4 - Cancello le modifiche se non è attivo ELEMENTO SPECIALE
      if( IS_VAR_FIXED(idx_att,"n_vtr") )
      {
         if( VAR_EXIST(idx_att,"GEST_C160")
           & VAR_VAL_STR(idx_att,"GEST_C160") != "S0000" )
         {
            DEL_VAR_MODIFICATE(idx_att,"n_vtr")
            VAR_VALUE_SET(idx_att,"n_vtr",VAR_VAL(idx_att,"n_vtr_prec"))
         }
      }

      if( IS_VAR_FIXED(idx_att,wk_dim_var) )
      {
         if( @vetro_num >= n_vtr )
         {
            DEL_VAR_MODIFICATE(idx_att,wk_dim_var)
         }

         if( VAR_EXIST(idx_att,"GEST_C160")
           & VAR_VAL_STR(idx_att,"GEST_C160") != "S0000" )
         {
            DEL_VAR_MODIFICATE(idx_att,wk_dim_var)
            VAR_VALUE_SET(idx_att,wk_dim_var,VAR_VAL(idx_att,"X_prec"))
         }
      }

      // 2.5 - Salvo i valori iniziali
      if( ACTION() == 2 )
      {
         if( @vetro_num < n_vtr
           & VAR_VAL(ATTUALE(),"X_prec") <= 0 )   { @X_prec = @X }

         if( VAR_VAL(idx_att,"n_vtr_prec") <= 0 ) { n_vtr_prec = n_vtr }
      }

      // 3 - Gestionale
      // 3.1 - Finitura
      @wk_fin_var = GetFirstValidVarGest( idx_att, "C042;C191;C193")

      @wk_fin_val = ""
      @wk_fin_val_prec = VAR_VAL_STR( ATTUALE(), "GEST_C042")

      if( n_vtr > 1
        & @vetro_num == n_vtr )
      {
         @wk_fin_var = "C194"
         if( orie_vtr == "O" ) { @wk_fin_var = "C190" }
      }
      if( @vetro_num > 1
        & @vetro_num < n_vtr ) { @wk_fin_var = "C192" }

      @wk_fin_var = GetVarGest(@wk_fin_var)
      @wk_fin_val = VAR_VAL_STR( idx_att, @wk_fin_var)

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C042")) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C042") }
      @GEST_C042 = @wk_fin_val

      // 3.2 - Codice, solo una volta configurato il padre
      @wk_codice_prec = VAR_VAL_STR( ATTUALE(), "GEST_CODICE")
      @GEST_CODICE = ""
      if( @wk_fin_val != ""
        & @wk_fin_val != "__") { @GEST_CODICE = "F09145" }

      // 3.3 - Aggiorno
      if( @wk_fin_val_prec != @wk_fin_val
        | @wk_codice_prec != @GEST_CODICE) { flag_CAMBIA_VAR = 1 }
   }
}

Funzioni
{
   string TrovaIdx_Grafica ( number idx )
   {
      Result = ""

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

      COMPONENTI( "cmp", idx)
      if( cmp <= 0) { cmp[inc(cmp)] = idx }

      cmp_num = 0
      while ( inc(cmp_num) <= cmp)
      {
         cmp_idx = cmp[cmp_num]
         if( FORMA(cmp_idx) <= $FORMA_CONTENITORE) { continue }

         lstAddUniq( Result, STR(cmp_idx))
      }
   }

   void AggiornaScassi_Passacavi_368 ( number idx , string lista , number comando )
   {
      // 0 - Controlli preliminari
      if( idx < 0)     { GOSUB EliminaScassi EXITSUB() }
      if( lista == "")                     { EXITSUB() }

      if( IS_IDX(idx) != 1)                { EXITSUB() }

      // 1 - Elimino lo scasso presente su idx che non deve essere più scassato
      WITH_VAR( "wk_scassati", "M4_SCASSATO_da", $alfa_con_figli, 0, "")

      wk_scassatiNum = 0
      while( inc(wk_scassatiNum) <= wk_scassati)
      {
         wk_scassatiIdx = wk_scassati[wk_scassatiNum]
         if( wk_scassatiIdx == idx)                             { continue }
         if( STR_INDEX_OF( lista, 0, STR(wk_scassatiIdx)) >= 0) { continue }

         wk_scassatiDa  = VAR_VAL_STR( wk_scassatiIdx, "M4_SCASSATO_da")
         if( lstDel( wk_scassatiDa, STR(idx)) <= 0)             { continue }

         $wk_EliminaScassi_da_idx = GetTopLevel(wk_scassatiIdx)
         GOSUB EliminaScassi

         if( GetTopLevel(wk_scassatiIdx) == GetTopLevel(idx))   { continue }

         COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //AggiornaScassi_Passacavi_368", STR(wk_scassatiIdx)))
      }

      listaIdxStr = ""
      while( strSet( listaIdxStr, strTok( lista, ";")) != "")
      {
         listaIdx = ATOI(listaIdxStr)
         if( IS_IDX(listaIdx) != 1) { continue }

         $wk_EliminaScassi_da_idx = GetTopLevel(listaIdx)
         GOSUB EliminaScassi

         if( GetTopLevel(listaIdx) == GetTopLevel(idx)) { continue }

         COMANDO( FMT( "RICALCOLA_UNA {} no_agganciati //AggiornaScassi_Passacavi_368", STR(listaIdx)))
      }

      if( comando == 2)
      {
         COMANDO2( FMT( "PROCEDURA M4_Scassi {} // Scassa_e_Taglia", STR(GetTopLevel(idx))))
         EXITSUB()
      }

      COMANDO( FMT( "PROCEDURA M4_Scassi {} // Scassa_e_Taglia", STR(GetTopLevel(idx))))
   }

   void AttivaLimiti_Passacavi_368 ( number idx )
   {
      SET_#(idx)

      attrezzato = #ATTREZZATO_SU
      idx_topl   = GetTopLevel(idx)
      idx_attr   = PADRE(idx,1)

      if( NOME(idx) == "RipetitoreIR_368" ) { $PCV_ContCollisioni_da_IR = 1 }
      if( NOME(idx) == "Faretto_368" )      { $PCV_ContCollisioni_da_IL = 1 }
      if( NOME(idx) == "Led_368" )
      {
         $PCV_ContCollisioni_da_IL = 1
         if( VAR_VAL(idx,"VAR_Posizione") == 1 )  { $PCV_ContCollisioni_da_IL_INT = 1 }
         if( VAR_VAL(idx,"VAR_Posizione") == 2 )  { $PCV_ContCollisioni_da_IL_EST = 1 }
      }

      if( NOME(idx_attr) == "Schiena_368" )
      {
         $PCV_ContCollisioni_su_SCH = 1
         attrezzato = "SCHIENA"
      }

      if( NOME(idx_attr) == "Fondo_368" )
      {
         $PCV_ContCollisioni_su_FND = 1
         attrezzato = "FONDO"
      }

      if( NOME(idx_attr) == "FiancoDX_368" )
      {
         $PCV_ContCollisioni_su_FIA = 1
         attrezzato = "FIANCO_DX"
      }

      if( NOME(idx_attr) == "FiancoSX_368" )
      {
         $PCV_ContCollisioni_su_FIA = 1
         attrezzato = "FIANCO_SX"
      }

      if( NOME(idx_attr) == "DivisiorioVertLegLiv_368" )
      {
         $PCV_ContCollisioni_su_DIV = 1
         attrezzato = "DIVISORIO"
      }

      if( attrezzato == "TOP" )
      {
         idx_top = #idx_top
         //if( IS_IDX(idx_top) == 0 )  { EXITSUB() }
         VAR_VALUE_SET(idx_top,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_top,"VediLimiti_PCV_ATTIVI",idx)

         NEAR_GLOBALE2("arr_cop",idx_top,5,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }

         NEAR_GLOBALE2("arr_cop",idx_top,1,"Ripiano_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }
      }

      if( attrezzato == "COPERCHIO"
        | attrezzato == "MODULO" )
      {
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)
      }

      if( attrezzato == "FONDO" )
      {
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)

         BOX_MODE(0)
         NEAR_GLOBALE2("arr_div", idx_attr, 5, "DivisiorioVertLegLiv_368")
         i = 1
         while ( i <= arr_div  )
         {
            VAR_VALUE_SET(arr_div[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_div[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }
      }

      if( attrezzato == "SCHIENA" )
      {
         if( IS_VAR_FIXED( idx_attr,"VediLimiti_PCV") == 1 ) { DEL_VAR_MODIFICATE(idx_attr,"VediLimiti_PCV") }

         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)
      }

      if( IS_MATCH( attrezzato, "FIA*") == 1
        | attrezzato == "DIVISORIO" )
      {
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)
      }

      //Luca 17/02/2021
      if( attrezzato == "RIP_30MM" )
      {
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)

         //Luca 02/03/2021
         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",idx,40,1,"CopTeca_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }

         NEAR_GLOBALE("arr_cop",idx,40,1,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }
      }

      //Luca 17/02/2021
      if( attrezzato == "TECA_30MM" )
      {
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)

         NEAR_GLOBALE2("arr_cop",idx_attr,1,"Ripiano_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }

         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",idx,40,1,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }

         //Luca 02/03/2021 teca sotto
         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",idx,40,1,"CopTeca_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }
      }

      //Luca 12/05/2021
      if( attrezzato == "SCRIVANIA" )
      {
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV_ATTIVI",idx)
      }

      //LZ 26/05/2021: gestione passacavi su plenum
      if( attrezzato == "PLENUM" )
      {
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV_ATTIVI",idx)
      }

      //Luca 06/09/2021
      if( attrezzato == "TAVOLO_AIR"
        | attrezzato == "TAVOLO_GEN"
        | attrezzato == "MENSOLA_AIR"
        //Simone 05/07/2022
        | attrezzato == "MENSOLA_LIV" )
      {
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_topl,"VediLimiti_PCV_ATTIVI",idx)

         if( NOME(idx_topl) == "MensolaLib_AIR"  )
         {
            if( IsIdx(idx_topl,"idx_sopra") )
            {
               idx_sopra = VAR_VAL(idx_topl,"idx_sopra")
               VAR_VALUE_SET(idx_sopra,"VediLimiti_PCV",1)
               VAR_VALUE_SET(idx_sopra,"VediLimiti_PCV_ATTIVI",idx)
            }
            if( IsIdx(idx_topl,"idx_sotto") )
            {
               idx_sotto = VAR_VAL(idx_topl,"idx_sotto")

               VAR_VALUE_SET(idx_sotto,"VediLimiti_PCV",1)
               VAR_VALUE_SET(idx_sotto,"VediLimiti_PCV_ATTIVI",idx)
            }

            if( IsIdx(idx_topl,"idx_sotto_set_app") )
            {
               idx_sotto_set_app = VAR_VAL(idx_topl,"idx_sotto_set_app")

               VAR_VALUE_SET(idx_sotto_set_app,"VediLimiti_PCV",1)
               VAR_VALUE_SET(idx_sotto_set_app,"VediLimiti_PCV_ATTIVI",idx)
            }
         }
      }

      //Luca 01/03/2022
      if( attrezzato == "TESTIERA" )
      {
         $PCV_ContCollisioni_L21 = 1

         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV",1)
         VAR_VALUE_SET(idx_attr,"VediLimiti_PCV_ATTIVI",idx)

         COMPONENTI2("pan",GetTopLevel(idx),"PannelloIll_L21")

         i = 1
         while ( i <= pan )
         {
            VAR_VALUE_SET(pan[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(pan[i],"VediLimiti_PCV_ATTIVI",idx)

            //per bypassare l'implicit
            VAR_SET_MODE(pan[i],"VediLimiti_PCV",$MODE_NONE)

            i = i + 1
         }

         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",PADRE(idx,1) ,5,1,"Struttura_Pianale_AIR_L21")
         i = 1
         while ( i <= arr_cop  )
         {
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(arr_cop[i],"VediLimiti_PCV_ATTIVI",idx)
            i = i + 1
         }
      }

      Attiva_PCV_DIVISORI    = 0
      Attiva_PCV_ATTACCAGLIE = 0
      Attiva_PCV_RIPIANI     = 0

      //per divisori
      if( $PCV_ContCollisioni_da_IL == 1 )
      {
         ////SOLO SE INTERNO
         //if( VAR_VAL(idx,"VAR_Posizione") == 1 ) { Attiva_PCV_DIVISORI = 1 }
         Attiva_PCV_DIVISORI = 2
      }

      if( $PCV_ContCollisioni_su_SCH == 1 )
      {
         Attiva_PCV_DIVISORI    = 2
         Attiva_PCV_ATTACCAGLIE = 1
         Attiva_PCV_RIPIANI     = 1
      }

      if( Attiva_PCV_DIVISORI > 0 )
      {
         COMPONENTI2("div",GetTopLevel(idx),"DivisiorioVertLegLiv_368")
         if( Attiva_PCV_DIVISORI == 2  ) { COMPONENTI2("div",GetTopLevel(idx),"DivisiorioVe*Liv_368") }

         i = 1
         while ( i <= div )
         {
            VAR_VALUE_SET(div[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(div[i],"VediLimiti_PCV_ATTIVI",idx)

            //per bypassare l'implicit
            VAR_SET_MODE(div[i],"VediLimiti_PCV",$MODE_NONE)

            i = i + 1
         }
      }

      if( Attiva_PCV_RIPIANI > 0 )
      {
         COMPONENTI2("rip",GetTopLevel(idx),"RipianoVetroLiv_368")

         i = 1
         while ( i <= rip )
         {
            VAR_VALUE_SET(rip[i],"VediLimiti_PCV",1)
            VAR_VALUE_SET(rip[i],"VediLimiti_PCV_ATTIVI",idx)

            ////per bypassare l'implicit
            //VAR_SET_MODE(div[i],"VediLimiti_PCV",$MODE_NONE)

            i = i + 1
         }
      }

      //AGGIUNGO LE ATTACCAGLIE
      if( Attiva_PCV_ATTACCAGLIE > 0 )
      {
         COMPONENTI2("fer",GetTopLevel(idx),"FerramentaModulo_368")
         if( fer > 0 )
         {
            VAR_VALUE_SET(fer[1],"VediLimiti_PCV",1)
            VAR_VALUE_SET(fer[1],"VediLimiti_PCV_ATTIVI",idx)
         }
      }

      //NON ATTIVO SU IDX CHE LANCIA LA PROCEDURA
      VAR_VALUE_SET(idx,"VediLimiti_PCV",0)
      VAR_SET_MODIFICATA(idx,"VediLimiti_PCV","")

      COMANDO2("Show Abilita OFF")
      $OnRigenera_AttivaPCV = 1

      if( $PCV_ContCollisioni_L21 == 1 )
      {
         COMANDO2("PROCEDURA Attiva_PCV_ContCollisioni_L21")
      }
      else
      {
         COMANDO2("PROCEDURA Attiva_PCV_ContCollisioni_368")
      }

      $OnRigenera_AttivaPCV = 0
      COMANDO2("Show Abilita ON")
   }

   void DisattivaLimiti_Passacavi_368 ( number idx )
   {
      WITH_VAR("wk_pcv_attivi","VediLimiti_PCV_ATTIVI",2,1,STR(idx))
      i = 1
      while ( i <= wk_pcv_attivi )
      {
         VAR_VALUE_SET(wk_pcv_attivi[i],"VediLimiti_PCV",0)
         DEL_VAR(wk_pcv_attivi[i],"VediLimiti_PCV_ATTIVI")

         if( NOME(wk_pcv_attivi[i])=="DivisiorioVertLegLiv_368"
           | NOME(wk_pcv_attivi[i])=="DivisiorioVetLiv_368"  )
         {
            //ripristino l'implicit
            VAR_SET_MODE(wk_pcv_attivi[i],"VediLimiti_PCV",$MODE_IMPLICIT)
         }
         i = i + 1
      }

      if( NOME(idx) == "RipetitoreIR_368" ) { $PCV_ContCollisioni_da_IR = 0 }
      if( NOME(idx) == "Faretto_368"
        | NOME(idx) == "Led_368"  )
      {
         $PCV_ContCollisioni_da_IL = 0
         //$PCV_ContCollisioni_da_IL_SUP = 0
         //$PCV_ContCollisioni_da_IL_INF = 0
         $PCV_ContCollisioni_da_IL_INT = 0
         $PCV_ContCollisioni_da_IL_EST = 0
      }

      if( $PCV_ContCollisioni_su_SCH == 1  ) { $PCV_ContCollisioni_su_SCH = 0 }

      DEL_VAR_MODIFICATE(idx,"VediLimiti_PCV")
      COMANDO2("Show Abilita OFF")
      if( $PCV_ContCollisioni_L21 == 1 )
      {
         COMANDO2("PROCEDURA Attiva_PCV_ContCollisioni_L21")
         $PCV_ContCollisioni_L21  = 0
      }
      else
      {
         COMANDO2("PROCEDURA Attiva_PCV_ContCollisioni_368")
      }
      //COMANDO2("PROCEDURA Attiva_PCV_ContCollisioni_368")
      COMANDO2("Show Abilita ON")
   }

   number SetViewEditPos_Passacavi_368 ( number idx , string var_ctrl )
   {
      Result = 0
      if( VAR_VAL(-1,var_ctrl) == 1 )  { EXITSUB() }

      //SALVO LA VISTA DELLA CAMERA
      VIEW_CAMERA(0)

      //devi rendere visibile il top (padre) e i coperchi presenti
      SET_#(idx)
      attrezzato = #ATTREZZATO_SU

      array_attiva = 0

      //Luca 19/03/2021
      array_disattiva = 0

      if( attrezzato == "TOP" )
      {
         idx_top = #idx_top

         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = #idx_top

         BOX_MODE(0)
         NEAR_GLOBALE2("arr_cop",idx_top,5,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }

         NEAR_GLOBALE2("arr_cop",idx_top,1,"Ripiano_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }
      }

      if( attrezzato == "COPERCHIO"
        | attrezzato == "FONDO"
        | attrezzato == "SCHIENA"
        | attrezzato == "MODULO"  )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = PADRE(idx ,1)
      }

      if( IS_MATCH( attrezzato, "FIA*") == 1
        | attrezzato == "DIVISORIO" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = PADRE(idx ,1)
      }

      if( attrezzato == "RIP_30MM"  )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = PADRE(idx ,1)

         NEAR_GLOBALE2("arr_cop",idx,30,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }
      }

      //Luca 02/03/2021
      if( attrezzato == "TECA_30MM" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = PADRE(idx ,1)
         //array_attiva[ne] = VAR_VAL(PADRE(idx ,2),"idx_vetro_base")

         //questo mi attiva tutto i RIPIANO, figli compresi --> quindi tutta la teca!
         NEAR_GLOBALE2("arr_cop",idx,1,"Ripiano_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }

         //disattivo i componenti della teca
         if( arr_cop > 0 )
         {
            ne = array_disattiva + 1
            array_disattiva = ne
            array_disattiva[ne] = VAR_VAL(PADRE(idx ,2),"idx_vetro_cop")

            ne = array_disattiva + 1
            array_disattiva = ne
            array_disattiva[ne] = VAR_VAL(PADRE(idx ,2),"idx_vetro_fiasx")

            ne = array_disattiva + 1
            array_disattiva = ne
            array_disattiva[ne] = VAR_VAL(PADRE(idx ,2),"idx_vetro_fiadx")
         }

         NEAR_GLOBALE2("arr_cop",idx,30,"Cop_368")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }
      }

      if( attrezzato == "RIP_30MM"
        | attrezzato == "TECA_30MM"  )
      {
         //Luca 02/03/2021
         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",idx,40,1,"CopTeca_30MM")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }
      }

      //Luca 12/05/2021
      if( attrezzato == "SCRIVANIA" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = GetTopLevel(idx)
      }

      //LZ 26/05/2021: gestione passacavi su plenum
      if( attrezzato == "PLENUM" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = GetTopLevel(idx)
      }

      //Luca 06/09/2021
      if( attrezzato == "TAVOLO_AIR"
        | attrezzato == "TAVOLO_GEN"
        | attrezzato == "MENSOLA_AIR"
        | attrezzato == "MENSOLA_LIV" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = GetTopLevel(idx)

         idx_topl = GetTopLevel(idx)
         //Luca 15/12/2021 attivo eventuali alzate sopra e sotto
         if( NOME(idx_topl) == "MensolaLib_AIR"  )
         {
            if( IsIdx(idx_topl,"idx_sopra") )
            {
               ne = array_attiva + 1
               array_attiva = ne
               array_attiva[ne] = VAR_VAL(idx_topl,"idx_sopra")
            }
            if( IsIdx(idx_topl,"idx_sotto") )
            {
               ne = array_attiva + 1
               array_attiva = ne
               array_attiva[ne] = VAR_VAL(idx_topl,"idx_sotto")
            }

            if( IsIdx(idx_topl,"idx_sotto_set_app") )
            {
               ne = array_attiva + 1
               array_attiva = ne
               array_attiva[ne] = VAR_VAL(idx_topl,"idx_sotto_set_app")
            }
         }
      }

      //Luca 01/03/2022
      if( attrezzato == "TESTIERA" )
      {
         ne = array_attiva + 1
         array_attiva = ne
         array_attiva[ne] = PADRE(idx,1)

         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",PADRE(idx,1) ,5,1,"PannelloIll_L21")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }

         BOX_MODE(0)
         NEAR_GLOBALE("arr_cop",PADRE(idx,1) ,5,1,"Struttura_Pianale_AIR_L21")
         i = 1
         while ( i <= arr_cop  )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = arr_cop[i]
            i = i + 1
         }
      }

      Attiva_PCV_DIVISORI    = 0
      Attiva_PCV_ATTACCAGLIE = 0
      Attiva_PCV_RIPIANI     = 0

      //per divisori
      if( $PCV_ContCollisioni_da_IL == 1 )
      {
         //SOLO SE INTERNO
         //if( VAR_VAL(idx,"VAR_Posizione") == 1 ) { Attiva_PCV_DIVISORI = 1 }
         Attiva_PCV_DIVISORI = 2
      }

      if( $PCV_ContCollisioni_su_SCH == 1 )
      {
         Attiva_PCV_DIVISORI    = 2
         Attiva_PCV_ATTACCAGLIE = 1
         Attiva_PCV_RIPIANI     = 1
      }

      if( $PCV_ContCollisioni_su_FND == 1 )
      {
         Attiva_PCV_DIVISORI    = 2
      }

      if( $PCV_ContCollisioni_su_FIA == 1 )
      {
         Attiva_PCV_RIPIANI     = 1
      }

      if( $PCV_ContCollisioni_su_DIV == 1 )
      {
         Attiva_PCV_RIPIANI     = 1
      }

      //AGGIUNGO IL DIVISORIO
      if( Attiva_PCV_DIVISORI >= 1 )
      {
         COMPONENTI2("div",GetTopLevel(idx),"DivisiorioVertLegLiv_368")
         if( Attiva_PCV_DIVISORI == 2 ) {  COMPONENTI2("div",GetTopLevel(idx),"DivisiorioVe*_368") }

         i = 1
         while ( i <= div  )
         {
            if( Attiva_PCV_DIVISORI == 2 )
            {
               COMPONENTI2("contc",div[i],"PCV_ContCollisioni_368")
               j = 1
               while ( j <= contc )
               {
                  ne = array_attiva + 1
                  array_attiva = ne
                  array_attiva[ne] = contc[j]

                  j = j + 1
               }
            }
            else
            {
               ne = array_attiva + 1
               array_attiva = ne
               array_attiva[ne] = div[i]
            }
            i = i + 1
         }
      }

      //AGGIUNGO I RIPIANI
      if( Attiva_PCV_RIPIANI > 0 )
      {
         COMPONENTI2("rip",GetTopLevel(idx),"RipianoVetroLiv_368")

         i = 1
         while ( i <= rip  )
         {
            //if( Attiva_PCV_DIVISORI == 2 )
            //{
            //   COMPONENTI2("contc",div[i],"PCV_ContCollisioni_368")
            //   j = 1
            //   while ( j <= contc )
            //   {
            //      ne = array_attiva + 1
            //      array_attiva = ne
            //      array_attiva[ne] = contc[j]
            //
            //      j = j + 1
            //   }
            //}
            //else
            //{
               ne = array_attiva + 1
               array_attiva = ne
               array_attiva[ne] = rip[i]
            //}
            i = i + 1
         }
      }

      //AGGIUNGO LE ATTACCAGLIE
      if( Attiva_PCV_ATTACCAGLIE > 0 )
      {
         COMPONENTI2("fer",GetTopLevel(idx),"FerramentaModulo_368")
         if( fer > 0 )
         {
            ne = array_attiva + 1
            array_attiva = ne
            array_attiva[ne] = fer[1]
         }
      }

      if( array_attiva == 0 )  { EXITSUB() }

      Result = 1

      //IMPOSTO LA VISTA SOLO SU PANNELLO
      COMANDO2("Show none")
      COMANDO2("M4_Show Ambienti Hide")
      COMANDO2("Show Riferimento Off")

      i = 1
      while ( i <= array_attiva  )
      {
         COMANDO2(STRCAT("Show strutture idx add ",STR(array_attiva[i])))
         i = i + 1
      }

      i = 1
      while ( i <= array_disattiva  )
      {
         COMANDO2(STRCAT("Show strutture idx del ",STR(array_disattiva[i])))
         i = i + 1
      }

      //per angolo
      idx_topl = GetTopLevel(idx)
      wk_ang_wp = ANG_TOT2(idx_topl)*(-1)

      if( attrezzato == "SCRIVANIA" )
      {
         if( VAR_VAL_STR(idx_topl,"VAR_LatoAggStr") == "LATO-CORTO" ) { wk_ang_wp = ANG_TOT2(idx_topl)*(-1) + 90 }
      }

      if( attrezzato == "SCHIENA"
        | attrezzato == "TESTIERA" )
      {
         COMANDO2(STRCAT("setviewhoops aaa front"))
         COMANDO2(STRCAT("SetViewHoops aaa orbit ",STR(wk_ang_wp) , " 0 "))
         EXITSUB()
      }

      if( IS_MATCH( attrezzato, "FIA*") == 1
        | attrezzato == "DIVISORIO" )
      {
         if( attrezzato == "FIANCO_DX" ) { wk_ang_wp = wk_ang_wp - 90 }
         else                            { wk_ang_wp = wk_ang_wp + 90 }

         COMANDO2(STRCAT("setviewhoops aaa front"))
         COMANDO2(STRCAT("SetViewHoops aaa orbit ",STR(wk_ang_wp) , " 0 "))
         EXITSUB()
      }

      COMANDO2(STRCAT("setviewhoops aaa top"))

      if( VAR_VAL_STR(idx,"Lato") == "SOTTO" ) { COMANDO2("setviewhoops w0 orbit 0 180") }


      //wk_view_orbit = STRCAT( STR(-1*wk_ang_wp) ," 0" )
      //COMANDO2(STRCAT("SetViewHoops view orbit ",wk_view_orbit))
      COMANDO2(STRCAT("SetViewHoops view roll ",STR(wk_ang_wp)))

      if( attrezzato != "TECA_30MM" ) { EXITSUB() }

      //aggiorno passacavi
      COMANDO2(STRCAT("Show strutture idx add ",STR(idx)))

      COMANDO2("ZOOMHOOPS")
      COMANDO2("ZOOMHOOPS 0.9")
      COMANDO2("UPDATE")
   }

   void ResetViewEditPos_Passacavi_368 ( )
   {
      //RIPRISITO LA VISTA CON ZOOM ALL
      COMANDO2("Show Abilita On")
      VIEW_CAMERA(1)
      COMANDO2("M4_show Ambienti Show")
      //COMANDO2("RenderMode aa transparency 0")
      COMANDO2("Show All")
      COMANDO2("ZOOMHOOPS")
      COMANDO2("ZOOMHOOPS 0.9")

      if( NOME(IDX_REF()) == "AssiemeScrivaniaMuro_AIR" )
      {
         COMANDO2(STRCAT("SETTA ",STR(PADRE(IDX_REF(), -1))))
      }
   }

   void CreateMenuWallPanel ( string nome_menu , number minimo , number massimo )
   {
      valori_menu = 0

      valori_std     = 10
      valori_std[1]  = 184
      valori_std[2]  = 368
      valori_std[3]  = 552
      valori_std[4]  = 736
      valori_std[5]  = 920
      valori_std[6]  = 1104
      valori_std[7]  = 1288
      valori_std[8]  = 1472
      valori_std[9]  = 1840
      valori_std[10] = 2208

      i = 1
      while ( i<=valori_std )
      {
         if( valori_std[i] >= minimo
           & valori_std[i] <= massimo)
         {
            ne = valori_menu + 1
            valori_menu = ne
            valori_menu[ne] = valori_std[i]
         }

         i = i + 1
      }

      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," ins"))
      COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," clear"))

      i = 1
      while( i <= valori_menu )
      {
         menu_val = valori_menu[i]
         menu_dsc = valori_menu[i]

         COMANDO2(STRCAT("MISURE_EDIT ",nome_menu," add ",STR(menu_val)," ",STR(menu_dsc)))
         i = i + 1
      }
   }

   //Luca 11/09/2020 non permetto la forzatura delle categorie
   //viene modificata direttamente sul top level
   void BloccaModificaCatGest_Cmp_368 ( number idx , string var )
   {
      if( $CNP > 0 )                            { EXITSUB() }

      if( $OnLoadOrder2 == 1)                   { EXITSUB() }

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

      if( idx == GetTopLevelGest(idx))          { EXITSUB() }

      if( VAR_EXIST( idx, var) == 0)            { EXITSUB() }

      if( VAR_EXIST( PADRE( idx, 1), var) == 0) { EXITSUB() }

      val = VAR_VAL_STR( idx , var)
      if( val == "" | val == "__"  )            { EXITSUB() }

      if( VAR_VAL( idx, "FLAG_Speciale") > 0 )  { EXITSUB() }

      wk_cmp = 0
      COMPONENTI2( "wk_cmp", PADRE( idx, 1), NOME(idx))
      if( wk_cmp <= 1
        & IS_VAR_FIXED( idx , var) == 1)        { DEL_VAR_MODIFICATE( idx , var) }
   }

   number CalcolaLatoModuliVicini ( number idx , string lato )
   {
      dist = 0

      SET_#(idx)
      B0 = #base_0  A0 = #alto_0
      B3 = #base_3  A3 = #alto_3

      BOX_MODE(0)

      idx_near = #idx_cnear_sx
      if( lato == "DX" )  { idx_near = #idx_cnear_dx }
      if( lato == "UP" )  { idx_near = #idx_cnear_up }
      if( lato == "DW" )  { idx_near = #idx_cnear_dw }

      mod = 0
      NEAR("mod",idx_near,10,0,"Mod*")

      //mm30 = 0
      //if( lato == "SX" | lato == "DX" ) { NEAR("mm30",idx_near,10,0,"Fianco_30MM") }
      //if( lato == "UP" | lato == "DW" ) { NEAR("mm30",idx_near,10,0,"Ripiano_30MM") }
      //
      //i = 1
      //while ( i<= mm30 )
      //{
      //   ne = mod + 1
      //   mod = ne
      //   mod[ne] = mm30[i]
      //   i = i + 1
      //}

      if( lato == "SX" )  { SORT_POINT(#base_0,"mod","base_3") }
      if( lato == "DX" )  { SORT_POINT(#base_3,"mod","base_0") }
      if( lato == "UP" )  { SORT_POINT(#alto_0,"mod","base_0") }
      if( lato == "DW" )  { SORT_POINT(#base_0,"mod","alto_0") }

      i = 1
      while ( i <= mod )
      {
         wk_ref_test_var = "Z"
         if( VAR_EXIST( idx, "Zt")
           & VAR_VAL( idx, "Zt") > VAR_VAL( idx, "Z") )       { wk_ref_test_var = "Zt" }

         wk_mod_test_var = "Z"
         if( VAR_EXIST( mod[i], "Zt")
           & VAR_VAL( mod[i], "Zt") > VAR_VAL( mod[i], "Z") ) { wk_mod_test_var = "Zt" }

         if( mod[i] != idx
           & VAR_VAL( mod[i], wk_mod_test_var) >= VAR_VAL( idx, wk_ref_test_var) )
         {
            SET_#(mod[i])

            qstart = -1
            qend   = -1

            if( lato == "SX" | lato == "DX"  )
            {
               qstart = #base_0.y
               qend   = #alto_0.y

               if( #base_0.y < B0.y ) { qstart = B0.y }
               if( #alto_0.y > A0.y ) { qend   = A0.y }

               if( qstart > -1 )
               {
                  dist = dist + (qend - qstart)
               }
            }

            if( lato == "UP" | lato == "DW"  )
            {
               B0.y = 0
               B3.y = 0

               wk_b0 = #base_0    wk_b0.y = 0
               wk_b3 = #base_3    wk_b3.y = 0

               qstart = wk_b0
               qend   = wk_b3

               ang_tot = ANG_TOT_NOR(idx)

               PX = INTERFERISCI(B0,ang_tot+90,wk_b0,wk_b3)
               //DISPLAY2(STRCAT("PX1 = [",STR(PX.x),",",STR(PX.y),",",STR(PX.z), "]"))

               if( PX.x != $ERR_INTER
                 & PX.y != $ERR_INTER ) { qstart = B0 }

               PX = INTERFERISCI(B3,ang_tot+90,wk_b0,wk_b3)
               if( PX.x != $ERR_INTER
                 & PX.y != $ERR_INTER ) { qend = B3 }

               //DISPLAY2(STRCAT("PX2 = [",STR(PX.x),",",STR(PX.y),",",STR(PX.z), "]"))

               dist_parz = DISTANZA(qend,qstart)

               dist = dist + dist_parz
            }
         }
         i = i + 1
      }

      Result = dist
   }

   // FT 30/08/18 - funzione ricorsiva di assegnazione nuovo gruppo
   number AssegnaGruppoXG ( 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

      NEAR("near", idx_str, 1, 0, "*")

      if( VAR_VAL(-1,"wk_xg_debug_CreaGruppiXGlass") > 0  )
      {
         DISPLAY2(STRCAT("AssegnaGruppoXG \nidx_str =" , STR(idx_str), " - " , NOME(idx_str) , " \ngruppo=",STR(gruppo) , "\n near=",STR(near) ))
         if( near > 0  )
         {
            DISPLAY2(STRCAT("AssegnaGruppoXG \nnear[1] =" , STR(near[1]), " - " , NOME(near[1]) , " \n",STR(VAR_EXIST(near[1], "XGlassGroupN")) ))
         }
      }

      j = 1
      while( j <= near )
      {
         idx_str_near = near[j]

         ctrl_eredita = 0

         //if( VAR_EXIST(idx_str_near, "XGlassGroupN") == 1
         //  & VAR_VAL(idx_str_near, "pcfto") == 0 )

         if( VAR_EXIST(idx_str_near, "XGlassGroupN") == 1  )
         {
            //Luca 17/03/2022
            //aggiungo al/il preconfigurato al gruppo solo se nell'elemento vicino trovato c'è la variabile
            //GrXG_IdxRef valorizzata con l'idx del pcf
            if( VAR_VAL(idx_str_near, "pcfto") )
            {
               if( IsIdx(idx_str,"GrXG_IdxRef")  )
               {
                  if( idx_str_near ==  VAR_VAL(idx_str,"GrXG_IdxRef") ) { ctrl_eredita = 1 }
               }
            }
            else
            {
               if( VAR_VAL(idx_str, "pcfto") )
               {
                  if( IsIdx(idx_str_near,"GrXG_IdxRef") > 0  )
                  {
                     if( idx_str ==  VAR_VAL(idx_str_near,"GrXG_IdxRef") ) { ctrl_eredita = 1 }
                  }
               }
               else
               {
                  ctrl_eredita = 1
               }
            }
         }

         if( VAR_VAL(-1,"wk_xg_debug_CreaGruppiXGlass") > 0  )
         {
            DISPLAY2(STRCAT("AssegnaGruppoXG \nidx_str =" , STR(idx_str), " - " , NOME(idx_str) , " \nidx_str_near =",STR(idx_str_near) , " - " , NOME(idx_str_near), "\n eredita=",STR(ctrl_eredita) ))
         }


         if( ctrl_eredita == 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

            XGlassGroupN_curr = VAR_VAL(idx_str, "XGlassGroupN")
            XGlassGroupN_near = VAR_VAL(idx_str_near, "XGlassGroupN")

            // eredito il valore
            if( XGlassGroupN_near <  XGlassGroupN_curr )
            {
               VAR_VALUE_SET(idx_str, "XGlassGroupN", XGlassGroupN_near)
               //VAR_VALUE_SET(idx_str, "XGlassChecked", VAR_VAL(idx_str, "XGlassChecked") + 1)

            }

            // riassegno il valore
            if( XGlassGroupN_near >  XGlassGroupN_curr )
            {
               VAR_VALUE_SET(idx_str_near, "XGlassGroupN", XGlassGroupN_curr)
               //VAR_VALUE_SET(idx_str_near, "XGlassChecked", VAR_VAL(idx_str_near, "XGlassChecked") + 1)

               AssegnaGruppoXG ( idx_str_near,  XGlassGroupN_curr )
            }
         }

         j = j + 1
      }

      Result = add_new_group
   }

   void BuildBoxXGlass ( number idx, string array )
   {
      // mi copio il tutto nell'array temponaeo
      r = ArrayCopy(idx, array, "CopyTemp")

      if( ArrayCopy(idx, array, "CopyTemp") == 0 )   { EXITSUB() }

      //DISPLAY("$CopyTemp = ", $CopyTemp)

      // pulisco le var. di appoggio
      DEL_VAR(-1, "wk_xg_p_s")
      DEL_VAR(-1, "wk_xg_p_d")
      DEL_VAR(-1, "wk_xg_p_a")
      DEL_VAR(-1, "wk_xg_p_b")
      DEL_VAR(-1, "wk_xg_p_r")
      DEL_VAR(-1, "wk_xg_p_f")

      //Luca 27/01/2022
      Box_PCF = 0

      $wk_xg_GroupsIdxList = 0
      $wk_xg_GroupsIdxCmd = ""
      $wk_xg_GroupN = 0

      $wk_xg_j = 1
      while( $wk_xg_j <= $CopyTemp )
      {
         // mi prendo gli idx delle strutture che formano il gruppo
         // e calcolo lo spigoli per determinare l'ingombro del gruppo
         $wk_xg_idx_str = $CopyTemp[$wk_xg_j]

         //Luca 27/01/2022
         if( VAR_VAL($wk_xg_idx_str,"pcfto") == 1 ) { Box_PCF = 1 }

         $wk_xg_GroupsIdxList = $wk_xg_GroupsIdxList + 1
         VAR_CREATE_NUM(-1, STRCAT("wk_xg_GroupsIdxList_##", STR($wk_xg_GroupsIdxList)), $wk_xg_idx_str, $MODE_NONE, "")

         $wk_xg_GroupsIdxCmd = STRCAT($wk_xg_GroupsIdxCmd, " XGlassGroupIdxList_##", STR($wk_xg_j), "=", STR($wk_xg_idx_str))

         $wk_xg_GroupN = VAR_VAL($wk_xg_idx_str, "XGlassGroupN")

         if( VAR_VAL(-1, "wk_xg_debug_CreaBoxGruppiXGlass") > 0 )   { HI($wk_xg_idx_str, 1) }

         $wk_xg_ang_cur = ANG_TOT2($wk_xg_idx_str)

         // alto-basso indipendene dall'angolo strutture
         $wk_xg_a_cur = VAR_VAL($wk_xg_idx_str, "alto_0.y")
         $wk_xg_b_cur = VAR_VAL($wk_xg_idx_str, "base_0.y")

         // trovo valore del punto più in alto
         if( VAR_EXIST(-1, "wk_xg_p_a") != 1 )    { $wk_xg_p_a = $wk_xg_a_cur }  else { if( $wk_xg_a_cur > $wk_xg_p_a )  { $wk_xg_p_a = $wk_xg_a_cur } }

         // trovo valore del punto più in basso
         if( VAR_EXIST(-1, "wk_xg_p_b") != 1 )    { $wk_xg_p_b = $wk_xg_b_cur }  else { if( $wk_xg_b_cur < $wk_xg_p_b )  { $wk_xg_p_b = $wk_xg_b_cur } }

         // FT 27/11/18: gestione degli angoli non ortogonali
         // Per evitare errore a bdm, al momento mi comporto sempre come fosse
         // in angolo zero

         if( $wk_xg_ang_cur != 0 & $wk_xg_ang_cur != 90 & $wk_xg_ang_cur != 180 & $wk_xg_ang_cur != 270 )   { $wk_xg_ang_cur = 0 }

         // FT 17/09/18 - se l'angolo della struttura è 0 (punti assoluti)
         if( $wk_xg_ang_cur == 0 )
         {
            $wk_xg_s_cur = VAR_VAL($wk_xg_idx_str, "base_0.x")
            $wk_xg_d_cur = VAR_VAL($wk_xg_idx_str, "base_3.x")

            $wk_xg_f_cur = VAR_VAL($wk_xg_idx_str, "base_1.z")
            $wk_xg_r_cur = VAR_VAL($wk_xg_idx_str, "base_0.z")
         }

         // FT 17/09/18 - se l'angolo della struttura è 90 (punti assoluti)
         if( $wk_xg_ang_cur == 90 )
         {
            $wk_xg_s_cur = VAR_VAL($wk_xg_idx_str, "base_0.x")
            $wk_xg_d_cur = VAR_VAL($wk_xg_idx_str, "base_1.x")

            $wk_xg_f_cur = VAR_VAL($wk_xg_idx_str, "base_0.z")
            $wk_xg_r_cur = VAR_VAL($wk_xg_idx_str, "base_3.z")
         }

         // FT 17/09/18 - se l'angolo della struttura è 180 (punti assoluti)
         if( $wk_xg_ang_cur == 180 )
         {
            $wk_xg_s_cur = VAR_VAL($wk_xg_idx_str, "base_3.x")
            $wk_xg_d_cur = VAR_VAL($wk_xg_idx_str, "base_0.x")

            $wk_xg_f_cur = VAR_VAL($wk_xg_idx_str, "base_0.z")
            $wk_xg_r_cur = VAR_VAL($wk_xg_idx_str, "base_1.z")
         }

         // FT 17/09/18 - se l'angolo della struttura è 270 (punti assoluti)
         if( $wk_xg_ang_cur == 270 )
         {
            $wk_xg_s_cur = VAR_VAL($wk_xg_idx_str, "base_1.x")
            $wk_xg_d_cur = VAR_VAL($wk_xg_idx_str, "base_0.x")

            $wk_xg_f_cur = VAR_VAL($wk_xg_idx_str, "base_2.z")
            $wk_xg_r_cur = VAR_VAL($wk_xg_idx_str, "base_0.z")
         }

         if( VAR_VAL(-1, "wk_xg_debug_CreaBoxGruppiXGlass") > 0 )
         {
            HI($wk_xg_idx_str, 1)
            DISPLAY2(STRCAT("Angolo: ", STR($wk_xg_ang_cur), "\nPunti relativi\n$wk_xg_s_cur=", STR($wk_xg_s_cur), "\n$wk_xg_d_cur=", STR($wk_xg_d_cur), "\n$wk_xg_f_cur=", STR($wk_xg_f_cur), "\n$wk_xg_r_cur=", STR($wk_xg_r_cur)))
            HI($wk_xg_idx_str, 0)
         }

         // Ragiono sempre come in angolo zero
         // trovo valore del punto più a sx
         if( VAR_EXIST(-1, "wk_xg_p_s") != 1 )    { $wk_xg_p_s = $wk_xg_s_cur }
         else
         {
            if( $wk_xg_s_cur < $wk_xg_p_s )       { $wk_xg_p_s = $wk_xg_s_cur }
         }

         // trovo valore del punto più a dx
         if( VAR_EXIST(-1, "wk_xg_p_d") != 1 )    { $wk_xg_p_d = $wk_xg_d_cur }
         else
         {
            if( $wk_xg_d_cur > $wk_xg_p_d )       { $wk_xg_p_d = $wk_xg_d_cur }
         }

         // trovo valore del punto più in retro
         if( VAR_EXIST(-1, "wk_xg_p_r") != 1 )    { $wk_xg_p_r = $wk_xg_r_cur }
         else
         {
            if( $wk_xg_r_cur < $wk_xg_p_r )       { $wk_xg_p_r = $wk_xg_r_cur }
         }

         // trovo valore del punto più in fronte
         if( VAR_EXIST(-1, "wk_xg_p_f") != 1 )    { $wk_xg_p_f = $wk_xg_f_cur }
         else
         {
            if( $wk_xg_f_cur > $wk_xg_p_f )       { $wk_xg_p_f = $wk_xg_f_cur }
         }

         if( VAR_VAL(-1, "wk_xg_debug_CreaBoxGruppiXGlass") > 0 )
         {
            HI($wk_xg_idx_str, 1)
            DISPLAY2(STRCAT("Angolo: ", STR($wk_xg_ang_cur), "\nPunti assoluti\n$wk_xg_p_s=", STR($wk_xg_p_s), "\n$wk_xg_p_d=", STR($wk_xg_p_d), "\n$wk_xg_p_b=", STR($wk_xg_p_b), "\n$wk_xg_p_a=", STR($wk_xg_p_a), "\n$wk_xg_p_f=", STR($wk_xg_p_f), "\n$wk_xg_p_r=", STR($wk_xg_p_r)))
            HI($wk_xg_idx_str, 0)
         }

         $wk_xg_j = $wk_xg_j + 1
      }


      if( VAR_EXIST(-1, "wk_xg_p_s") == 1 & VAR_EXIST(-1, "wk_xg_p_d") == 1 & VAR_EXIST(-1, "wk_xg_p_a") == 1
        & VAR_EXIST(-1, "wk_xg_p_b") == 1 & VAR_EXIST(-1, "wk_xg_p_r") == 1 & VAR_EXIST(-1, "wk_xg_p_f") == 1
        )
      {
         // punto più in basso, a sx, retro (da punti assoluti a relativi con angolo)
         // Questo va bene per angoli  0/180
         $wk_xg_blc_base_0 = [$wk_xg_p_s, $wk_xg_p_b, $wk_xg_p_r]
         // punto più in alto, a dx, in fronte
         $wk_xg_blc_alto_2 = [$wk_xg_p_d, $wk_xg_p_a, $wk_xg_p_f]

         // FT 25/09/18 - sempre in angolo zero
         // FT // FT 17/09/18 - se l'angolo della struttura è 90 o 270  (da punti assoluti a relativi con angolo)
         // FT if( $wk_xg_ang_cur == 90 | $wk_xg_ang_cur == 270)
         // FT {
         // FT    // punto più in basso, a sx, retro
         // FT    $wk_xg_blc_base_0 = [$wk_xg_p_r, $wk_xg_p_b, $wk_xg_p_s]
         // FT    // punto più in alto, a dx, in fronte
         // FT    $wk_xg_blc_alto_2 = [$wk_xg_p_f, $wk_xg_p_a, $wk_xg_p_d]
         // FT }

         // calcolo le misure d'ingombro
         $wk_xg_blc_X = DISTANZA([$wk_xg_p_s, 0,          0],          [$wk_xg_p_d, 0,          0])
         $wk_xg_blc_Y = DISTANZA([0,          $wk_xg_p_b, 0],          [0,          $wk_xg_p_a, 0])
         $wk_xg_blc_Z = DISTANZA([0,          0,          $wk_xg_p_r], [0,          0,          $wk_xg_p_f])

         // DEBUG
         if( VAR_VAL(-1, "wk_xg_debug_CreaBoxGruppiXGlass") > 0 )
         {
            DISPLAY2(STRCAT("Costruisco il box per angolo: ", STR($wk_xg_ang_cur), ":\nX=", STR($wk_xg_blc_X), "\nY=", STR($wk_xg_blc_Y), "\nZ=", STR($wk_xg_blc_Z),  "\nAngolo=", STR($wk_xg_ang_cur), "\nbase_0 =[", STR($wk_xg_blc_base_0.x), ",", STR($wk_xg_blc_base_0.y), "," , STR($wk_xg_blc_base_0.z), "]\nalto_2 =[", STR($wk_xg_blc_alto_2.x), ",", STR($wk_xg_blc_alto_2.y), "," , STR($wk_xg_blc_alto_2.z), "]"))
         }

         if( $wk_xg_blc_X > 0 & $wk_xg_blc_Y > 0 & $wk_xg_blc_Z > 0 )
         {
            COMANDO2("ELEMENTO StpGruppoXG")
            COMANDO2("STRUTTURA")
            COMANDO2(STRCAT("VAR_SET X=", STR($wk_xg_blc_X), " Y=", STR($wk_xg_blc_Y), " Z=", STR($wk_xg_blc_Z)))
            COMANDO2(STRCAT("VAR_SET XGlassGroupIdxList=", STR($wk_xg_GroupsIdxList), $wk_xg_GroupsIdxCmd, " XGlassGroupN=", STR($wk_xg_GroupN)))

            //Luca 27/01/2022
            if( Box_PCF == 1 ) { COMANDO2("VAR_SET Box_PCF=1") }

            // FT 25/09/18 - sempre in angolo zero
            //COMANDO2(STRCAT("POSIZIONA ", STR($wk_xg_blc_base_0.x), " ", STR($wk_xg_blc_base_0.y), " ", STR($wk_xg_blc_base_0.z), " ", STR($wk_xg_ang_cur)))
            COMANDO2(STRCAT("POSIZIONA ", STR($wk_xg_blc_base_0.x), " ", STR($wk_xg_blc_base_0.y), " ", STR($wk_xg_blc_base_0.z), " ", STR(0)))
         }
      }

      if( VAR_VAL(-1, "wk_xg_debug_CreaBoxGruppiXGlass") > 0 )
      {
         $wk_xg_j = 1
         while( $wk_xg_j <= $CopyTemp )
         {
            HI($CopyTemp[$wk_xg_j], 0)
            $wk_xg_j = $wk_xg_j + 1
         }
      }

      // elimino l'array temponaeo
      DEL_VAR(idx, "CopyTemp*")
   }

   //cerco l'idx che contiene una variabile di nome var con valore specifico
   // tipovar = 0 [number] , 1 [string] , 2 [point]
   // nval --> numerb
   // sval --> string
   // pval --> point
   number GetIdxWithVarVal ( string var , number tipovar , number nval , string sval , xyz pval )
   {
      idx_res = -1

      WITH_VAR("arrb",var,0,0,"")

      if( tipovar == 1 ) { WITH_VAR("arrb",var,2,0,"") }
      if( tipovar == 2 ) { WITH_VAR("arrb",var,4,0,"") }

      i = 1
      while ( i <= arrb )
      {
         idx_mod = arrb[i]
         SET_#(idx_mod)

         if( VAR_EXIST( idx_mod , var) == 1 )
         {
            if( tipovar == 0 )
            {
               //TODO: falsi positivi a manetta
               if( VAR_VAL( idx_mod , var) == nval ) { idx_res = idx_mod }
            }
            if( tipovar == 1 )
            {
               //TODO: falsi positivi a manetta
               if( VAR_VAL_STR( idx_mod , var) == sval ) { idx_res = idx_mod }
            }
            if( tipovar == 2 )
            {
               EVAL( STRCAT(" pnt_test = #",var))
               if( DISTANZA(pval ,pnt_test) < 0.1 ) { idx_res = idx_mod }
            }
         }
         i = i + 1
      }

      Result = idx_res
   }

   //0 no led
   //2 led singolo
   //1 led termina a dx
   //-1 led termina a sx
   number GetInfoLedPannello ( number idx , string pos )
   {
      res = 0
      if( IS_IDX(idx) == 0 )
      {
         Result = res
         EXITSUB()
      }

      SET_#(idx)

      idx_led  = -1
      nome_var = "xx"
      if( pos == "SOPRA" ) { nome_var = "idx_LED_sopra" }
      if( pos == "SOTTO" ) { nome_var = "idx_LED_sotto" }

      if( VAR_EXIST(idx,nome_var) ) { idx_led = VAR_VAL(idx,nome_var) }

      if( IS_IDX(idx_led) == 0 )
      {
         Result = 0
         EXITSUB()
      }

      SET_#(idx_led)
      if( #idx_pan_ref_sx == idx
       &  #idx_pan_ref_dx == idx ) { res = 2 }

      if( #idx_pan_ref_sx == idx
       &  #idx_pan_ref_dx != idx ) { res = -1 }

      if( #idx_pan_ref_sx != idx
       &  #idx_pan_ref_dx == idx ) { res =  1 }

       Result = res
   }

   //********************************************************************************************
   // { FUNZIONI PER GIUNZIONI 368
   //********************************************************************************************
   void G368_CtrlAllineamentoZ ( number idx1 , number idx2 , VAR number offz , VAR number dimz )
   {
      if( IS_IDX(idx1) == 0 | IS_IDX(idx2) ==0 )   { EXITSUB() }

      DBG_LOG   = 0
      DBG_CASO  = ""
      DBG_CASO2 = ""

      AllineateFronte = 0
      AllineateRetro = 0

      OFFZ = 0
      DIMZ = 0

      IDX1_ANG = ANG_TOT_NOR(idx1)
      SET_#(idx1)
      IDX1_B0 = #base_0
      IDX1_B1 = #base_1
      IDX1_Z  = #Z

      IDX2_ANG = ANG_TOT_NOR(idx2)
      SET_#(idx2)
      IDX2_B0 = #base_0
      IDX2_B1 = #base_1
      IDX2_Z  = #Z

      if( ABS(IDX1_ANG - IDX2_ANG) > 0.1 )  { EXITSUB() }

      dist_0_0 = DistanzaFraPunti(IDX1_B0,IDX2_B0,IDX1_ANG+90)
      dist_0_1 = DistanzaFraPunti(IDX1_B0,IDX2_B1,IDX1_ANG+90)
      dist_1_1 = DistanzaFraPunti(IDX1_B1,IDX2_B1,IDX1_ANG+90)
      dist_1_0 = DistanzaFraPunti(IDX1_B1,IDX2_B0,IDX1_ANG+90)

      if( dist_0_0 == 0 )   { AllineateRetro  = 1 }
      if( dist_1_1 == 0 )   { AllineateFronte = 1 }

      if( AllineateRetro == 1 & AllineateFronte == 1 )
      {
         DIMZ = IDX1_Z
         DBG_CASO  = "|A"
         DBG_CASO2 = "A-FRONTE + A-RETRO | UGUALI"
      }

      if( AllineateRetro == 1 & AllineateFronte == 0 )
      {
         DBG_CASO = STRCAT(DBG_CASO,"|B")

         if( dist_0_1 > IDX1_Z )
         {
            DIMZ = IDX1_Z

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "A-RETRO | IDX1 MINORE"

         }
         else
         {
            DIMZ = IDX2_Z

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "A-RETRO | IDX1 MAGGIORE"
         }
      }

      if( AllineateRetro == 0 & AllineateFronte == 1 )
      {
         DBG_CASO = STRCAT(DBG_CASO,"|C")

         if( dist_0_1 > IDX2_Z )
         {
            DIMZ = IDX2_Z
            OFFZ  = dist_0_0

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "A-FRONTE | IDX1 MAGGIORE"
         }
         else
         {
            //OFFZ = dist_0_0
            OFFZ = 0
            DIMZ = IDX1_Z

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "A-FRONTE | IDX1 MINORE"
         }
      }

      //casi non allineati
      if( AllineateRetro == 0 & AllineateFronte == 0 )
      {
         DBG_CASO = STRCAT(DBG_CASO,"|D")

         //IDX2 "INTERNA" A IDX1
         if( dist_0_1 < IDX1_Z & dist_1_0 < IDX1_Z )
         {
            DIMZ = IDX2_Z
            OFFZ = dist_0_0

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "IDX2 INTERNO IDX1 | IDX1 MAGGIORE"
         }
         //IDX1 "INTERNA" A IDX2
         if( dist_0_1 < IDX2_Z & dist_1_0 < IDX2_Z )
         {
            DIMZ = IDX1_Z
            OFFZ = 0

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "IDX1 INTERNO IDX2 | IDX1 MINORE"
         }

         //IDX2 SPORGE FRONTE
         if( dist_0_1 > IDX1_Z & dist_1_0 < IDX1_Z )
         {
            OFFZ = dist_0_0
            DIMZ = dist_1_0

            DBG_CASO = STRCAT(DBG_CASO,"-3")
            DBG_CASO2 = "IDX2 SPORGE FRONTE"

         }

         if( dist_1_0 > IDX1_Z & dist_0_1 < IDX1_Z )
         {
            OFFZ = 0
            DIMZ = dist_0_1

            DBG_CASO = STRCAT(DBG_CASO,"-4")
            DBG_CASO2 = "IDX2 SPORGE RETRO"
         }
      }

      dimz = DIMZ
      offz = OFFZ

      if( DBG_LOG == 1 )
      {
         HI(idx1,1)
         HI(idx2,1)
         msg = STRCAT("DBG_VerificaAllineamento:\n")
         msg = STRCAT(msg,"OFFZ   = ",STR(OFFZ),"\n")
         msg = STRCAT(msg,"DIMZ   = ",STR(DIMZ),"\n\n\n")
         msg = STRCAT(msg,"CASO   = ",DBG_CASO,"\n")
         msg = STRCAT(msg,"CASO2  = ",DBG_CASO2)
         DISPLAY2(msg)
         HI(idx1,0)
         HI(idx2,0)
      }
   }

   void G368_CtrlAllineamentoX ( number idx1 , number idx2 , VAR number offx , VAR number dimx )
   {
      if( IS_IDX(idx1) == 0 | IS_IDX(idx2) ==0 )   { EXITSUB() }

      DBG_LOG   = 0
      DBG_CASO  = ""
      DBG_CASO2 = ""

      AllineateSX = 0
      AllineateDX = 0

      OFFX = 0
      DIMX = 0

      IDX1_ANG = ANG_TOT_NOR(idx1)
      SET_#(idx1)
      IDX1_B0 = #base_0
      IDX1_B3 = #base_3
      IDX1_X  = #X

      IDX2_ANG = ANG_TOT_NOR(idx2)
      SET_#(idx2)
      IDX2_B0 = #base_0
      IDX2_B3 = #base_3
      IDX2_X  = #X

      if( ABS(IDX1_ANG - IDX2_ANG) > 0.1 )  { EXITSUB() }

      dist_0_0 = DistanzaFraPunti(IDX1_B0,IDX2_B0,IDX1_ANG)
      dist_0_3 = DistanzaFraPunti(IDX1_B0,IDX2_B3,IDX1_ANG)
      dist_3_3 = DistanzaFraPunti(IDX1_B3,IDX2_B3,IDX1_ANG)
      dist_3_0 = DistanzaFraPunti(IDX1_B3,IDX2_B0,IDX1_ANG)

      if( dist_0_0 == 0 )   { AllineateSX = 1 }
      if( dist_3_3 == 0 )   { AllineateDX = 1 }

      if( AllineateSX == 1 & AllineateDX == 1 )
      {
         DIMX = IDX1_X
         DBG_CASO  = "|A"
         DBG_CASO2 = "A-SX + A-DX | UGUALI"
      }

      if( AllineateSX == 1 & AllineateDX == 0 )
      {
         DBG_CASO = STRCAT(DBG_CASO,"|B")

         if( dist_0_3 > IDX1_X )
         {
            DIMX = IDX1_X

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "A-SX | IDX1 MINORE"

         }
         else
         {
            DIMX = IDX2_X

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "A-SX | IDX1 MAGGIORE"
         }
      }

      if( AllineateSX == 0 & AllineateDX == 1 )
      {
         DBG_CASO = STRCAT(DBG_CASO,"|C")

         if( dist_0_3 > IDX2_X )
         {
            DIMX = IDX2_X
            OFFX  = dist_0_0

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "A-SX | IDX1 MAGGIORE"
         }
         else
         {
            OFFX = 0
            DIMX = IDX1_X

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "A-DX | IDX1 MINORE"
         }
      }

      //casi non allineati
      if( AllineateSX == 0 & AllineateDX == 0 )
         {
         DBG_CASO = STRCAT(DBG_CASO,"|D")

         //IDX2 "INTERNA" A IDX1
         if( dist_0_3 < IDX1_X & dist_3_0 < IDX1_X )
         {
            DIMX = IDX2_X
            OFFX = dist_0_0

            DBG_CASO = STRCAT(DBG_CASO,"-1")
            DBG_CASO2 = "IDX2 INTERNO IDX1 | IDX1 MAGGIORE"
         }
         //IDX1 "INTERNA" A IDX2
         if( dist_0_3 < IDX2_X & dist_3_0 < IDX2_X )
         {
            DIMX = IDX1_X
            OFFX = 0

            DBG_CASO = STRCAT(DBG_CASO,"-2")
            DBG_CASO2 = "IDX1 INTERNO IDX2 | IDX1 MINORE"
         }

         //IDX2 SPORGE FRONTE
         if( dist_0_3 > IDX1_X & dist_3_0 < IDX1_X )
         {
            OFFX = dist_0_0
            DIMX = dist_3_0

            DBG_CASO = STRCAT(DBG_CASO,"-3")
            DBG_CASO2 = "IDX2 SPORGE DX"

         }

         if( dist_3_0 > IDX1_X & dist_0_3 < IDX1_X )
         {
            OFFX = 0
            DIMX = dist_0_3

            DBG_CASO = STRCAT(DBG_CASO,"-4")
            DBG_CASO2 = "IDX2 SPORGE SX"
         }
      }

      dimx = DIMX
      offx = OFFX

      if( DBG_LOG == 1 )
      {
         HI(idx1,1)
         HI(idx2,1)
         msg = STRCAT("DBG_VerificaAllineamento:\n")
         msg = STRCAT(msg,"OFFX   = ",STR(OFFX),"\n")
         msg = STRCAT(msg,"DIMX   = ",STR(DIMX),"\n\n\n")
         msg = STRCAT(msg,"CASO   = ",DBG_CASO,"\n")
         msg = STRCAT(msg,"CASO2  = ",DBG_CASO2)
         DISPLAY2(msg)
         HI(idx1,0)
         HI(idx2,0)
      }
   }

   number GetPosGiunzioneFromDB ( number REV , string OrieG, string ModTipo , number ModX , number ModY , number ModZ , string posIS , string posFR , VAR string posz , VAR string posy )
   {
      log = 0
      #ifdef TEC
        log = VAR_VAL(-1,"ATTIVA_LOG_DBG")
      #endif
      //log = 9

      rev_att = REV

      if( ModTipo == "MOD-CAS" & OrieG == "ORIZ" ) { ModTipo = "O-MOD-CAS" }

      //lancio in ordine le seguenti query, ovviamenta appena trovo un risultato, esco
      //1. ModTipo + ModX + ModY + ModZ + posIS + posFR
      //2. ModTipo + ModY + ModZ + posIS + posFR
      //3. ModTipo + posIS + posFR
      //4. ModY + posIS + posFR
      //5. posIS + posFR

      //Luca 21/02/2022
      //integro gestione con Revisione
      //utilizzo il record con Revisione Maggiore ma comunque non superiore alla revisione corrente

      // per le giunzioni orizzontali, entro sempre con * * * *

      if( OrieG == "VERT" )
      {
         where = STRCAT(            "ModuloTipo=" ,APICI(), ModTipo   ,APICI())
         where = STRCAT(where, " and ModuloX="    ,APICI(), STR(ModX) ,APICI())
         where = STRCAT(where, " and ModuloY="    ,APICI(), STR(ModY) ,APICI())
         where = STRCAT(where, " and ModuloZ="    ,APICI(), STR(ModZ) ,APICI())
         where = STRCAT(where, " and GLatoIS="    ,APICI(), posIS     ,APICI())
         where = STRCAT(where, " and GLatoRF="    ,APICI(), posFR     ,APICI())

         //Luca 21/02/2022 Revisione
         select_rev = STRCAT("( SELECT MAX(Revision) FROM GIUNZIONI368 WHERE ",where," and Revision <= ",STR(rev_att) , " )")
         where = STRCAT(where, " and Revision = "    ,select_rev)

         run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ) )

         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("1Z --> run= " , run ))
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ))

         if( run != "" )
         {
            posz = run
            run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ) )
            ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("1XY --> run= " , run ))
            ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ))
            posy = run

            Result = 1
            EXITSUB()
         }

         //** 2
         where = STRCAT(            "ModuloTipo=" ,APICI(), ModTipo   ,APICI())
         where = STRCAT(where, " and ModuloX="    ,APICI(), "*"       ,APICI())
         where = STRCAT(where, " and ModuloY="    ,APICI(), STR(ModY) ,APICI())
         where = STRCAT(where, " and ModuloZ="    ,APICI(), STR(ModZ) ,APICI())
         where = STRCAT(where, " and GLatoIS="    ,APICI(), posIS     ,APICI())
         where = STRCAT(where, " and GLatoRF="    ,APICI(), posFR     ,APICI())

         //Luca 21/02/2022 Revisione
         select_rev = STRCAT("( SELECT MAX(Revision) FROM GIUNZIONI368 WHERE ",where," and Revision <= ",STR(rev_att) , " )")
         where = STRCAT(where, " and Revision = "    ,select_rev)


         run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ) )

         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("2Z --> run= " , run ))
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ))

         if( run != "" )
         {
            posz = run
            run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ) )
            ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("2XY --> run= " , run ))
            ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ))
            posy = run


            Result = 1
            EXITSUB()
         }
      }

      //** 3
      where = STRCAT(            "ModuloTipo=" ,APICI(), ModTipo   ,APICI())
      where = STRCAT(where, " and ModuloX="    ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloY="    ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloZ="    ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and GLatoIS="    ,APICI(), posIS     ,APICI())
      where = STRCAT(where, " and GLatoRF="    ,APICI(), posFR     ,APICI())

      //Luca 21/02/2022 Revisione
      select_rev = STRCAT("( SELECT MAX(Revision) FROM GIUNZIONI368 WHERE ",where," and Revision <= ",STR(rev_att) , " )")
      where = STRCAT(where, " and Revision = "    ,select_rev)

      run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ) )

      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("3Z --> run= " , run ))
      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ))

      if( run != "" )
      {
         posz = run
         run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ) )
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("3XY --> run= " , run ))
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ))
         posy = run

         Result = 1
         EXITSUB()
      }

      //** 4
      where = STRCAT(            "ModuloTipo= " ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloX="     ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloY="     ,APICI(), STR(ModY) ,APICI())
      where = STRCAT(where, " and ModuloZ="     ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and GLatoIS="     ,APICI(), posIS     ,APICI())
      where = STRCAT(where, " and GLatoRF="     ,APICI(), posFR     ,APICI())

      //Luca 21/02/2022 Revisione
      select_rev = STRCAT("( SELECT MAX(Revision) FROM GIUNZIONI368 WHERE ",where," and Revision <= ",STR(rev_att) , " )")
      where = STRCAT(where, " and Revision = "    ,select_rev)

      run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ) )

      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("4Z --> run= " , run ))
      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ))

      if( run != "" )
      {
         posz = run
         run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ) )
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("4XY --> run= " , run ))
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ))

         posy = run

         Result = 1
         EXITSUB()
      }

      //** 5
      where = STRCAT(            "ModuloTipo= " ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloX="     ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloY="     ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and ModuloZ="     ,APICI(), "*"       ,APICI())
      where = STRCAT(where, " and GLatoIS="     ,APICI(), posIS     ,APICI())
      where = STRCAT(where, " and GLatoRF="     ,APICI(), posFR     ,APICI())

      //Luca 21/02/2022 Revisione
      select_rev = STRCAT("( SELECT MAX(Revision) FROM GIUNZIONI368 WHERE ",where," and Revision <= ",STR(rev_att) , " )")
      where = STRCAT(where, " and Revision = "    ,select_rev)

      run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ) )

      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("5Z --> run= " , run ))
      ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosZ FROM GIUNZIONI368 WHERE " , where ))

      if( run != "" )
      {
         posz = run
         run = SQLITE_EXECUTE_STR($wk_DbLago,STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ) )
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("5XY --> run= " , run ))
         ScriviSuLog(log,"GetPosGiunzioneFromDB",STRCAT("SELECT PosY FROM GIUNZIONI368 WHERE " , where ))

         posy = run

         Result = 1
         EXITSUB()
      }

      Result = 0
   }
   //********************************************************************************************
   // } FUNZIONI PER GIUNZIONI 368
   //********************************************************************************************

   number GetLunghezzaModuli_LED ( number idx_LED, number idx1 , number idx2 )
   {
      Result = -1

      if( IS_IDX(idx1)==0 | IS_IDX(idx2) == 0 ) { EXITSUB() }

      wk_pos_led = "BASSO"
      if( VAR_VAL(idx_LED,"PosizioneLED")==1 ) {  wk_pos_led = "ALTO" }

      if( NOME(idx1) == "PannelloRetroXLED_368" ) { idx1 = VAR_VAL(idx1,"idx_modulo") }
      if( NOME(idx2) == "PannelloRetroXLED_368" ) { idx2 = VAR_VAL(idx2,"idx_modulo") }

      idx_test = idx1
      wk_x_mod = 0
      while( IS_IDX(idx_test) )
      {
         wk_xadd = VAR_VAL(idx_test,"X")

         if( NOME(idx_test) == "ModuloGlass_368" )
         {
            if( VAR_VAL(idx_test,"VAR_GlassL_ConScasso") == 1 )
            {
               if( wk_pos_led == "BASSO" )
               {
                  if( VAR_VAL_STR(idx_test,"GlassL_Scasso_Pos") == "SX-BA"
                    | VAR_VAL_STR(idx_test,"GlassL_Scasso_Pos") == "DX-BA"  )
                  {
                     wk_xadd = VAR_VAL(idx_test,"X") - VAR_VAL(idx_test,"GlassL_Scasso_X")
                  }
               }

               if( wk_pos_led == "ALTO" )
               {
                  if( VAR_VAL_STR(idx_test,"GlassL_Scasso_Pos") == "SX-AL"
                    | VAR_VAL_STR(idx_test,"GlassL_Scasso_Pos") == "DX-AL"  )
                  {
                     wk_xadd = VAR_VAL(idx_test,"X") - VAR_VAL(idx_test,"GlassL_Scasso_X")
                  }
               }
            }
         }
         wk_x_mod = wk_x_mod + wk_xadd

         if( VAR_EXIST(idx_test,"idx_dx") & idx_test != idx2 )
         {
            SET_#(idx_test)
            if( IS_IDX(#idx_dx) ) { idx_test = #idx_dx }
            else                  { idx_test = -1 }

         }
         else { idx_test = -1 }
      }
      Result = wk_x_mod
   }

   void Delme_BloccaConfigurazione ( number idx )
   {
      SET_#(idx)

      #FLAG_RADICE = $NO_RAD
      #GEST_CODICE = ""

      SET_GEST_STATO(idx,7,1)
      SET_GEST_STATO(idx,8,1)
   }

   string Get_Pcv_AttOrie ( number idx )
   {
      wk_nome_att = NOME(idx)
      wk_topl_att = GetTopLevel(idx)

      //Orizzontali
      VAR_CREATE_STR( -1, "Get_Pcv_Att", "TOP", $MODE_NOSAVE, "")
      VAR_CREATE_STR( -1, "Get_Pcv_Orie", "XZY", $MODE_NOSAVE, "")

      if( wk_nome_att == "Cop_368" )                   { $Get_Pcv_Att = "COPERCHIO"   }
      if( wk_nome_att == "Fondo_368" )                 { $Get_Pcv_Att = "FONDO"       }

      if( wk_nome_att == "Ripiano_30MM" )              { $Get_Pcv_Att = "RIP_30MM"    }
      if( wk_nome_att == "BaseTeca_30MM" )             { $Get_Pcv_Att = "TECA_30MM"   }

      if( wk_nome_att == "AssiemeScrivaniaMuro_AIR"
        | wk_nome_att == "ScrivaniaFS_AIR"
        | wk_nome_att == "Scrivania_AIR"
        | wk_nome_att == "ScrivaniaMuro_AIR"
        //Simone 01/07/2022 - Valido anche per mensola AIR
        | wk_nome_att == "TopVetroScrivania_AIR")      { $Get_Pcv_Att = "SCRIVANIA"   }

      if( wk_nome_att == "Top_Vetro_Plenum"
        | wk_nome_att == "Coperchio_Plenum" )          { $Get_Pcv_Att = "PLENUM"      }

      if( wk_nome_att == "Mensola_Air"
        | wk_nome_att == "MensolaLib_AIR" )            { $Get_Pcv_Att = "MENSOLA_AIR" }

        //Simone 04/07/2022
      if( wk_nome_att == "Mensola_Rivestita"
        | wk_nome_att == "Mensola_Dub"       )         { $Get_Pcv_Att = "MENSOLA_LIV" }

      if( IS_MATCH(wk_nome_att,"PianoTavolo*AIR") )    { $Get_Pcv_Att = "TAVOLO_AIR"  }

      if( wk_nome_att == "PianoTavolo_Generico" )      { $Get_Pcv_Att = "TAVOLO_GEN"  }

      //Verticali schiena
      if( wk_nome_att == "Schiena_368" )
      {
         $Get_Pcv_Orie = "XYZ"
         $Get_Pcv_Att  = "SCHIENA"
      }

      //Verticali fianchi
      if( wk_nome_att == "FiancoDX_368" )
      {
         $Get_Pcv_Orie = "ZYX"
         $Get_Pcv_Att  = "FIANCO_DX"
      }

      if( wk_nome_att == "FiancoSX_368" )
      {
         $Get_Pcv_Orie = "ZYX"
         $Get_Pcv_Att  = "FIANCO_SX"
      }

      if( wk_nome_att == "DivisiorioVertLegLiv_368" )
      {
         $Get_Pcv_Orie = "ZYX"
         $Get_Pcv_Att  = "DIVISORIO"
      }

      if( wk_nome_att == "Fianco_30MM" )
      {
         $Get_Pcv_Orie = "ZYX"
         $Get_Pcv_Att  = "FIA_30MM"
      }

      Result = STRCAT( $Get_Pcv_Att, ";", $Get_Pcv_Orie)
   }
}

Macro
{
   //[ MACRO GESTIONE GRUPPI XGLASS
   Assegna_VarTecnica_XGLASS       "" interattiva Assegna_VarTecnica_XGLASS
   GeneraGruppiXGlass              "" interattiva GeneraGruppiXGlass
   SettaGruppiXGlass               "" interattiva SettaGruppiXGlass
   UnisciGruppiXGlass              "" interattiva UnisciGruppiXGlass

   //#ifdef TEC;AZI
   //  AssegnaAutoGruppiXGlass   "Crea Gruppi XGLASS" interattiva AssegnaAutoGruppiXGlass
   //#endif

   //Luca 19/04/2022 no su lista macro ambiente RIV
   #ifndef TEC;AZI
     AssegnaAutoGruppiXGlass       "" interattiva AssegnaAutoGruppiXGlass
   #endif
   //] MACRO GESTIONE GRUPPI XGLASS

   #ifdef TEC;AZI
   //   CalcolaGiunzioni368          "368: Calcola Giunzioni" procedura CalcolaGiunzioni368
      ContCollisioniGiunzioni_368  "" procedura G368_ContCollisioniGiunzioni
   #endif
}
