//Luca 01/08/2019
//COLLEZIONE MATERIA

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

   Mat_Spe_Fia                   "Spessore fianco"                                        19                   NoSave
   Mat_Spe_Sch                   "Spessore schiene"                                       8                    NoSave
   Mat_Spe_Cop                   "Spessore coperchio"                                     38                   NoSave
   Mat_Spe_Fnd                   "Spessore fondo"                                         19                   NoSave
   Mat_Spe_Div                   "Spessore divisorio"                                     38                   NoSave

   Mat_Spe_Ant                   "Spessore Anta"                                          20                   NoSave

   Mat_Spe_Vtr                   "Spessore fianco vetro"                                  4                    NoSave

   Mat_Spe_RipV                  "Spessore ripiano vetro"                                 8                    NoSave

   Mat_Spe_Gambe                 "Spessore gambe omega"                                   12                   NoSave
   Mat_Alt_Gambe                 "Altezza gambe omega"                                    196                  NoSave

   Mat_Rie_Sch_ZR                "Rientro schienale dal retro"                            16.5                 NoSave

   Mat_Aria_Ant_X                "Aria fra il frontale e la scocca in X"                  1.5                  NoSave
   Mat_Aria_Ant_Y                "Aria fra il frontale e la scocca in Y"                  1.5                  NoSave
   Mat_Aria_Ant_Z                "Aria fra il frontale e la scocca in Z"                  2                    NoSave

   Mat_Aria_Ant_Ant_X            "Aria tra coppia frontali in X"                          3                    NoSave
   Mat_Aria_Ant_Ant_Y            "Aria tra coppia frontali in Y"                          3                    NoSave

   Mat_Aria_Cas_Y                "Aria fra il frontale e la scocca in Y"                  1.5                  NoSave
   Mat_Aria_Ces_Y                "Aria fra il frontale e la scocca in Y"                  1.5                  NoSave

   Mat_MagSch_X                  "Maggiorazione in larghezza schiene per fresata"         7.5                  NoSave
   Mat_MagSch_Y                  "Maggiorazione in altezza schiene per fresata"           7.5                  NoSave

   PCF_OnPcfStore_Custom_MATERIA ""                                                       "OnPcfStore_Materia" NoSave

   //{ VARIABILI -- REVISIONI -- MATERIA
   BDM_REV_Mat_Bifacciale_1      "Revisione pannello bifacciale"                          201111               NoSave

   //LZ 30/06/2021: REV1 - distinta omega in gestione grafica
   BDM_REV_Mat_SupOmega_1        "Revisione supporto omega"                               210701               NoSave
   //LZ 08/04/2022: REV2 - gestione gamba centrale
   BDM_REV_Mat_SupOmega_2        "Revisione supporto omega"                               220410               NoSave

   BDM_REV_Mat_StrIntCassCest_1  "Revisione struttura interna cassetti cestoni"           230416               NoSave
   //} VARIABILI -- REVISIONI -- MATERIA
}

Altimetri
{
}

Misure
{
   LargMMat "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 368  460  552  644  736   920   1104  1288  1472  1656  1840  2208  2576  2944
      Reali    368  460  552  644  736   920   1104  1288  1472  1656  1840  2208  2576  2944
   }

   //supporto
   LargSMat "Larghezza sostegno OMEGA" < OnlyDesc;NoDiz >
   {
      Nominali  460  552  644  736   828   920   1012  1104  1196  1288  1472  1656  1840  2208  2576  2944  3312
      Reali     460  552  644  736   828   920   1012  1104  1196  1288  1472  1656  1840  2208  2576  2944  3312
   }

   AltMMat "Altezza"  < OnlyDesc;NoDiz >
   {
      Nominali 138  184  276  368   506   552   736  920   1104  1288  1472
      Reali    138  184  276  368   506   552   736  920   1104  1288  1472
   }

   AltGCMat "Altezza"  < OnlyDesc;NoDiz >
   {
      Nominali 137  293
      Reali    137  293
   }

   ProfMMat "Profondita'"  < OnlyDesc;NoDiz >
   {
      Nominali 320  406  510  740
      Reali    320  406  510  740
   }

   ProfSMat "Profondita' sostegno OMEGA" < OnlyDesc;NoDiz >
   {
      Nominali 366 470
      Reali    366 470
   }

   ProfSMat_r1 "Profondita' sostegno OMEGA - REV.1" < OnlyDesc;NoDiz >
   {
      Nominali 346 450
      Reali    346 450
   }

   AltCassMat  "Altezza frontale cassetto"  < OnlyDesc;NoDiz >
   {
      Nominali 135 181
      Reali    135 181
   }

   AltCestMat  "Altezza frontale cestone"  < OnlyDesc;NoDiz >
   {
      Nominali 273 365
      Reali    273 365
   }

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

   PosPcf_Mat "Posizione Ante"  < OnlyDesc;NoDiz >
   {
      Nominali "A Terra"  "A terra a Muro"  "Sospeso a muro"
      Reali        0            1               2
   }

   PosMod_Mat "Posizione Ante"  < OnlyDesc;NoDiz >
   {
      Nominali "Terra C/Piedini"  "Terra C/Omega"  "Sospeso"  "Sovrapposto"
      Reali        0                    1               2           3
   }

   LargBMat "Larghezza Bifacciale"  < OnlyDesc;NoDiz >
   {
      Nominali 554  646  738  1106  1290  1474  1658  1842  2210  2578  2946
      Reali    554  646  738  1106  1290  1474  1658  1842  2210  2578  2946
   }

   AltBMat "Altezza Bifacciale" < OnlyDesc;NoDiz >
   {
      Nominali 185 369 386 478 506 553 570 754 938 1122 1306 1490 1674
      Reali    185 369 386 478 506 553 570 754 938 1122 1306 1490 1674
   }

   TpCarter "Tipologia Carter" < OnlyDesc;NoDiz >
   {
      Nominali "Interno"  "Superiore"  "Telescopico"  "Intermedio (H>552)"
      Reali        0           1             2                 3
   }
}

//Luca 18/11/2021 modulo materia da attrezzare al letto
Elemento ModuloMateriaXTestiera_Mat
{
   Descrizione = "Modulo materia"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile   Testiera_L21 PannelloAccessorio_Testiera_L21
   Altimetro      Auto
   Alias       CamIncidente;AccL21

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      //X       "Larghezza"            460
      //Y       "Altezza"              138
      X       "Larghezza"            460 Menu ( LargMMat )
      Y       "Altezza"              138 Menu ( AltMMat )
      Z       "Profondita'"          406

      Xt       ""                    468
      Yt       ""                    142
      Zt       ""                    406

      //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]

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

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

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

      //LZ 08/03/2022: per stampa xglass
      PCF_MATERIA  "" 1

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB SetLimiti_Accessorio_Testiera_L21
   }

   PuntiNotevoli
   {
      Xt = X + 2*$Mat_Spe_Vtr
      Yt = Y + $Mat_Spe_Vtr

      GOSUB punti_XtYtZt

      NFC_Point = alto_2
   }
   #include %path_bdm%\Tlib\orie.inc

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

         if( NOME($query_p1)=="RipianoVetro_Mat" )
         {
            if( $query_p2==1 ) { $QueryResult__ = 1 }
            if( $query_p2==2 ) { $QueryResult__ = VAR_ConDivVert }
         }
         else
         {
            if( $query_p2==0 ) { $QueryResult__ = 1 }
         }
      }
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelloAccessorio_Testiera_L21
   }

   Attrezza
   {
      GOSUB AttrezzaAccessorio_Testiera_L21
   }

   //Procedura OnTabEredita
   //{
   //   if( TABER_REGOLA=="PRE" )
   //   {
   //      GOSUB Set_Gest_C003_Mat
   //
   //      GOSUB Set_Gest_C007_Mat
   //
   //      GOSUB Set_Gest_C054_Mat
   //   }
   //
   //   if( TABER_REGOLA=="POST" )
   //   {
   //      GOSUB Set_Verso
   //   }
   //}

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xt
      GEST_Y = Yt

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura PostGestDllValida
   {
      RicalcolaOnInsert(ATTUALE())
   }

   //Procedura cancella
   //{
   //}

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

   Posiziona FiancoVetroMateria_Mat fiasx
   {
      GOSUB posa_blocco
      @X = $Mat_Spe_Vtr

      @GEST_CODICE = "F31001"
   }

   Posiziona ModuloMateria_Mat mod
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + $Mat_Spe_Vtr

      //@GEST_CODICE = "MT1702"
      @RADICE = "COMACA"
   }

   Posiziona FiancoVetroMateria_Mat fiadx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt - $Mat_Spe_Vtr
      @X = $Mat_Spe_Vtr

      @GEST_CODICE = "F31001"
   }

   Posiziona TopVetroMateria_Mat topv
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + Xt/2 - @X/2
      @base_0.y = base_0.y + Y
      @X = X + 2
      @Y = $Mat_Spe_Vtr
      @GEST_CODICE = "T04905"
   }

   Posiziona ContCollisioni_L21 cs1
   {
      @X = X + 40
      @Y = Y + 40
      @Z = 100
      @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 - 80
   }
}

//{ MODULI
Elemento ModuloMateria_Mat
{
   Descrizione = "Modulo materia"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Pensile

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Materia_StrIntCassCest "Revisione struttura interna cassetti cestoni" 0 SaveAlways

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X           "Larghezza"                   368   Menu ( LargMMat )
      Y           "Altezza"                     184   Menu ( AltMMat )
      Yt          "Altezza con piedini"         184
      Z           "Profondita'"                 406   Menu ( ProfMMat )
      Z_Attrezza  "Profondità per attrezzaggi"    0   Menu ( ProfMMat )

      //PCF_Posizione   "Posizione Materia" 0 Menu ( PosPcf_Mat )
      VAR_Posizione     "Posizione modulo"  0 Menu ( PosMod_Mat )
      VAR_FixMuro       "Fissato a muro"    0 Boolean

      //VAR_ConPiedini     "Con Piedini" 0

      //LZ 05/08/2021: moduli H138, coperchio da 19
      //anche la nuova gamma di pensili ha il coperchio da 19
      VAR_Coperchio19    "Coperchio sp 19"           0 Boolean
      VAR_InvertiFNCP    "Fondo/coperchio invertiti" 0 Boolean

      VAR_ConDivVert     "Con Divisorio verticale"   0 Boolean

      VAR_SupAggancioSx "Massello aggancio SX"    0 Boolean
      VAR_SupAggancioDx "Massello aggancio DX"    0 Boolean

      VAR_SostegnoOmega "Su sostegno Omega"       0

      //se ante battenti
      Verso         "Verso" -1 Menu ( DXSX )

     #ifndef AGE;RIV
      VT_KITREGMAT  "Num.KIT REGOLAZIONE"                  "0"
      VT_GO_1919    "Numero Kit Giunzioni Cop 19/Fondo 19" 0
      VT_GO_1938    "Numero Kit Giunzioni Cop 38/Fondo 19" 0
      VT_NGO        "Numero Kit Giunzioni Fianco/Fianco"   0
     #endif

      idx_cnear_sx "" -1
      idx_cnear_dx "" -1

      idx_cnear_up "" -1
      idx_cnear_dw "" -1

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

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

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

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

      FillerM2G            " " "" ShowAlways

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

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento( ATTUALE(), "BDM_REV_Mat_StrIntCassCest", "VAR_Revisione_Materia_StrIntCassCest")

      Alt_Pie = 17

      VAR_ConPiedini = 0
      if( VAR_Posizione==0 ) { VAR_ConPiedini = 1 }

      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_Posizione",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_FixMuro",1)
         //LZ 05/08/2021: moduli H138, coperchio da 19
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Coperchio19",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_InvertiFNCP",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_ConDivVert",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_SupAggancioSx",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_SupAggancioDx",1)
         HIDE_ON_EDIT2(ATTUALE(),"Verso",1)
         HIDE_ON_EDIT2(ATTUALE(),"Z_Attrezza",1)
      }

      // Coperchio spessore 19, attivazione automatica
      if( IS_VAR_FIXED( ATTUALE(), "VAR_Coperchio19") == 0 )
      {
         VAR_Coperchio19 = 0

         // Sempre per moduli H138
         if( Y < 184 )                                          { VAR_Coperchio19 = 1 }

         // Per moduli con cassetto superiore H138
         if( Y > 184 )
         {
            COMPONENTI2( "wk_cass", ATTUALE(), "Cassetto_Mat")
            if( wk_cass > 0)
            {
               SORT_POINT( alto_0, "wk_cass", "base_0")

               SET_#(wk_cass[1])
               wk_cass_sup_y_delta = alto0y_abs - #base_0.y

               if( wk_cass_sup_y_delta < 184 - $Mat_Aria_Cas_Y) { VAR_Coperchio19 = 1 }
            }
         }
      }

      //Simone 09/09/2022 - Viene chiamata una procedura direttamente nel pcf materia per nascondere i figli ma non gli elementi attrezzati
      //Luca 05/03/2021 mantis 024230: Materia: nascondere sottolivelli se preconfigurato
      //#ifdef AGE;RIV
      //if( $ATTIVA_DLL==1 & ACTION()>0 ) { HIDE = VAR_VAL(ATTUALE(),"in_pcfto") }
      //#endif
   }

   PuntiNotevoli
   {
      Yt = Y + VAR_ConPiedini*Alt_Pie

      GOSUB punti_Yt

      //per ante
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + VAR_ConPiedini*Alt_Pie
      vano_l_0 = X
      vano_p_0 = Z - $Mat_Spe_Ant - $Mat_Aria_Ant_Z

      //per ripiani
      vano_0_1 = base_0
      vano_0_1.y = base_0.y + VAR_ConPiedini*Alt_Pie
      vano_l_1 = X
      if( VAR_ConDivVert==1 ) { vano_l_1 = X/2 }
      vano_p_1 = Z - $Mat_Spe_Ant - $Mat_Aria_Ant_Z

      //per ripiani
      vano_0_2 = vano_0_1
      vano_0_2.x = vano_0_1.x + X/2
      vano_l_2 = vano_l_1
      vano_p_2 = vano_p_1

      //Luca 06/09/2019
      //punti per l'inserimento dei pannelli bifacciali
      pnt_panbif_so.x = 69
      pnt_panbif_so.y = VAR_ConPiedini*Alt_Pie + $Mat_Spe_Fnd
      pnt_panbif_so.z = 0
      pnt_panbif_ne.x = X - 69
      pnt_panbif_ne.y = Yt - $Mat_Spe_Cop - 1
      pnt_panbif_ne.z = 0

      if( VAR_InvertiFNCP==1 )
      {
         pnt_panbif_so.y = VAR_ConPiedini*Alt_Pie + $Mat_Spe_Cop
         pnt_panbif_ne.y = Yt - $Mat_Spe_Fnd - 1
      }

      panbif_x = X - 69 - 69
      panbif_y = Y - $Mat_Spe_Cop - $Mat_Spe_Fnd - 1

      //LZ 05/08/2021: moduli H138, coperchio da 19
      if( VAR_Coperchio19 == 1 )
      {
         pnt_panbif_so.y = VAR_ConPiedini*Alt_Pie + $Mat_Spe_Fnd
         pnt_panbif_ne.y = Yt - $Mat_Spe_Fnd - 1

         panbif_y = Y - 2*$Mat_Spe_Fnd - 1
      }

      NFC_Point = alto_2
   }
   #include %path_bdm%\Tlib\orie.inc

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

         if( NOME($query_p1) == "RipianoVetro_Mat" )
         {
            if( $query_p2 == 1)     { $QueryResult__ = 1 }
            if( $query_p2 == 2)     { $QueryResult__ = VAR_ConDivVert }
         }
         else
         {
            if( $query_p2 == 0)     { $QueryResult__ = 1 }
            if( $query_p2 != 0
              & VAR_ConDivVert > 0) { $QueryResult__ = 1 - $ATTIVA_DLL }
         }
      }
   }

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

         GOSUB Set_Gest_C003_Mat

         GOSUB Set_Gest_C007_Mat

         GOSUB Set_Gest_C054_Mat
      }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 24/09/2020 verifico se posizionato su modulo omega
      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder == 0 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE2("wk_omega",idx_cnear_dw,10,"SostegnoOmega_Mat")
         NEAR_GLOBALE2("wk_omega_368",idx_cnear_dw,10,"SostegnoOmega")

         VAR_SostegnoOmega = 0
         if( wk_omega + wk_omega_368 > 0 )  { VAR_SostegnoOmega = 1 }
      }

      GOSUB Ctrl_VarTecnica_ModMateria

      GOSUB GetRegola_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Set_Gest_C003_Mat

      GOSUB Set_Gest_C054_Mat

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

   Posiziona Cuc_GruppoPiedini gp
   {
      @escluso = 1 - VAR_ConPiedini
      GOSUB posa_blocco
      @Y = Alt_Pie
   }

   Posiziona FustoModulo_Mat fbs
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + VAR_ConPiedini*Alt_Pie

      @Z = Z - $Mat_Spe_Ant - $Mat_Aria_Ant_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 ndw
   {
      idx_cnear_dw = ATTUALE()
      @base_0.x = base_0.x + 5
      @base_0.y = base_0.y - 1
      @base_0.z = base_0.z + 5
      @X = X - 10
      @Y = 2
      @Z = Z - 10
   }

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

Elemento FiancoVetroMateria_Mat
{
   Descrizione = "Fianco materia"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Pensile
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                  "Larghezza"          4   ShowAlways
      Y                  "Altezza nominale"   184 Menu ( AltMMat )  SaveAlways
      Z                  "Profondita'"        406 Menu ( ProfMMat ) SaveAlways
      Yt                 "Altezza"            185

      Verso              ""                  -1

      FillerM2G          " "                  "" ShowAlways

      idx_sx             ""                  -1
      idx_dx             ""                  -1

      idx_cnear_sx       ""                  -1
      idx_cnear_dx       ""                  -1

      M4_CNT_LINK_MODE__ ""                   2

      FIN_var            ""                   "C028"
      FIN_orie           ""                   "V"

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

      XGLASS             "Num. XGLASS"        "" Utente ( )

      M4_VAR             ""                   "X;Y;Z"
   }

   Assegnazioni
   {
      GOSUB AssComune
      MagY = 1

      GOSUB Stato_8

      //Luca 04/09/2020
      if( ACTION()==0 & $ATTIVA_DLL==1 )
      {
         VAR_SET_MODE( ATTUALE(), "Y", $MODE_SHOWALWAYS)
         VAR_SET_MODE( ATTUALE(), "Z", $MODE_SHOWALWAYS)
      }

      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C028;C185")
      FIN_var_gest = GetVarGest( FIN_var)
      FIN_var_val  = VAR_VAL_STR( FIN_idx_gest, FIN_var_gest)

      STP_XG_ValY = Yt
   }

   PuntiNotevoli
   {
      Yt = Y + MagY
      GOSUB punti

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type==1 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            wk_y = VAR_VAL($M4_DragInfo_Ref,"Y")
            //offset piedini
            wk_off = 0
            if( VAR_VAL($M4_DragInfo_Ref,"VAR_Posizione")==0 ) { wk_off = 17 }

            if( $M4_DragInfo_SxDx==-1 | $M4_DragInfo_SxDx==1 )
            {
               wk_sd = SE_STR($M4_DragInfo_SxDx>0,"D","S")
               wk_ab = "B"
               wk_rf = "R"
               cnt_new = CostruisciStrCnt(wk_sd,wk_ab,wk_rf,0,wk_off,0,0)

               $M4_DragInfo_Cnt = cnt_new
               $QueryResult__ = 3

               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Y=",STR(wk_y) , " //OnQueryBdmLocal ",NOME(ATTUALE())))

               wk_z = VAR_VAL($M4_DragInfo_Ref,"Z")
               COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Z=",STR(wk_z) , " //OnQueryBdmLocal ",NOME(ATTUALE())))
            }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 24/09/2019
      //definisco verso fianco
      if( ACTION()>0 & ACTION()!=2 )
      {
         idx_sx = -1
         idx_dx = -1
         BOX_MODE(0)
         NEAR_GLOBALE("wk_csx",idx_cnear_sx,1,1,"ModuloMateria_Mat")
         NEAR_GLOBALE("wk_cdx",idx_cnear_dx,1,1,"ModuloMateria_Mat")
         if( wk_csx>0 ) { idx_sx = wk_csx[1] }
         if( wk_cdx>0 ) { idx_dx = wk_cdx[1] }

         Verso = 0
         if( IS_IDX(idx_sx)==1 & IS_IDX(idx_dx)==0 ) { Verso =  1 }
         if( IS_IDX(idx_sx)==0 & IS_IDX(idx_dx)==1 ) { Verso = -1 }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_Y = Yt

      //Luca 04/09/2020 mantis 23277: Fianchi materia: numero composizione su nota automatica
      //aggiungo nota cod.composizione se fianco figlio di un preconfigurato
      //TODO -- da cancellare in caso di ESPLOSIONE PCF
      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder==0 )
      {
         if( VAR_VAL(ATTUALE(),"in_pcfto")==1 )
         {
            cod_comp = ""
            cod_pcf  = VAR_VAL_STR(PADRE(ATTUALE(),1),"GEST_CODICE")
            if( cod_pcf  != "" ) { cod_comp = STRCAT("COMP.",LEFT(cod_pcf,4)) }
            if( cod_comp != "" ) { M2G_AddNotaBDM(ATTUALE(),"GEN",1,cod_comp) }
         }
      }

      GOSUB GestComune_Post
   }

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

   Posiziona BloccoBlend vt
   {
      @escluso = 0
      if( IS_MATCH( FIN_var_val, "A*") == 1
        & VAR_VAL(-1,"wk_StampeProduzione") == 0 ) { @escluso = 1 }

      GOSUB posa_blocco
      @Y = Yt
      GOSUB rivestimento
      @BLEND__ = 1
   }

   Posiziona _graf_cannettato can
   {
      @escluso = 1
      if( IS_MATCH( FIN_var_val, "A*") == 1
        & VAR_VAL(-1,"wk_StampeProduzione") == 0 ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = Z
      @Y = Yt
      @Z = X

      @ang_y = -90
      @base_0.x = base_0.x + X
      if( Verso == 1 )
      {
         @ang_y = 90
         @base_0.x = base_0.x
         @base_0.z = base_0.z + Z
      }

      GOSUB rivestimento
   }

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

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

Elemento TopVetroMateria_Mat
{
   Descrizione = "Fianco materia"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   //Alias       Pensile
   Alias       Stp_TopMat

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                  "Larghezza nominale"    368 Menu ( LargMMat ) Utente ( )
      Xt                 "(Larghezza reale)"     368 ShowAlways
      Y                  "Altezza"                 4 ShowAlways
      Z                  "Profondita'"           406 Menu ( ProfMMat ) SaveAlways

      Verso              ""                       -1

      idx_cnear_sx       ""                       -1
      idx_cnear_dx       ""                       -1

      M4_CNT_LINK_MODE__ ""                        2
      M4_CNT_MODE__      ""                        1

      FIN_var            ""                        "C028"
      FIN_orie           ""                        "V"

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

      M4_VAR             ""                        "X;Y;Z"

      FillerM2G          " "                       "" ShowAlways

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

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      MagX_Sx = 1
      MagX_Dx = 1

      if( ACTION()==2 & $ATTIVA_DLL==0 & IS_VAR_FIXED(ATTUALE(),"X")==0 ) { CHIEDI(ATTUALE(),"X") }

      FIN_idx_gest = GetPrimoGest(ATTUALE(), 0)
      FIN_var      = GetFirstValidVarGest( FIN_idx_gest, "C028;C185")

      STP_XG_ValX = Xt
   }

   PuntiNotevoli
   {
      Xt = X + MagX_Sx + MagX_Dx
      GOSUB punti

      pnt_top_b0 = base_0   pnt_top_b0.x = pnt_top_b0.x - MagX_Sx
      pnt_top_b1 = base_1   pnt_top_b1.x = pnt_top_b1.x - MagX_Sx
      pnt_top_b2 = base_2   pnt_top_b2.x = pnt_top_b2.x + MagX_Dx
      pnt_top_b3 = base_3   pnt_top_b3.x = pnt_top_b3.x + MagX_Dx

      base_so = base_0
      alto_ne = [X,Y,Z]
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type==1 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            //wk_x = VAR_VAL($M4_DragInfo_Ref,"X")
            //COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," X=",STR(wk_x) , " //OnQueryBdmLocal ",NOME(ATTUALE())))
            wk_z = VAR_VAL($M4_DragInfo_Ref,"Z")
            COMANDO(STRCAT("VAR_CHANGE 1 ",STR(ATTUALE())," Z=",STR(wk_z) , " //OnQueryBdmLocal ",NOME(ATTUALE())))
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xt

      GOSUB SetGest_C009_Mat

      GOSUB GestComune_Post
   }

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

   //Posiziona Blocco vt
   Posiziona BloccoBlend vt
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x - MagX_Sx
      @X = Xt
      GOSUB rivestimento
      @BLEND__ = 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 Bifacciale_Mat
{
   Descrizione = "Fianco materia"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   //Luca 20/01/2021 riporto modifiche LAGO
   //Alias       Pensile
   //Alias       StpBifMateria
   Alias       StpBifMateria;Bifacciale;CheckBifaccialePassacavi

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"    552
      Xt      "Larghezza"    554 Menu ( LargBMat ) SaveAlways

      Y       "Altezza"      368
      Yt      "Altezza"      369 Menu ( AltBMat ) SaveAlways

      Z       "Profondita'"    4
      Zt      "Profondita'"   20

      idx_cnear "" -1

      RADICE  "" "BIMA"

      M4_CNT_LINK_MODE__ ""   2
      M4_CNT_MODE__      ""   1

      FIN_var  "" "C028"
      FIN_orie "" "V"

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

      M4_VAR "" "X;Y;Z"

      FillerM2G            " " "" ShowAlways

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

   Assegnazioni
   {
      GOSUB AssComune

      SetRevisioneElemento(ATTUALE(),"BDM_REV_Mat_Bifacciale","")

      no_collisione = 1

      Pan1_offx = 0  Pan1_offy = 0
      Pan2_offx = 0  Pan2_offy = 0
      Pan3_offx = 0  Pan3_offy = 0
      Pan4_offx = 0  Pan4_offy = 0

      Pan1_X = 0  Pan1_Y = 0  Pan1_Z = 16
      Pan2_X = 0  Pan2_Y = 0  Pan2_Z = 16
      Pan3_X = 0  Pan3_Y = 0  Pan3_Z = 16
      Pan4_X = 0  Pan4_Y = 0  Pan4_Z = 16

      Pan1   = 0  Pan2   = 0  Pan3   = 0   Pan4 = 0

      //speciale
      Vet2   = 0
   }

   PuntiNotevoli
   {
      X = Xt - 2
      Y = Yt - 1
      GOSUB punti
   }
   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type==1 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            idx_ref = $M4_DragInfo_Ref

            wk_offx = 0
            wk_offy = 0
            wk_offz = 0

            if( VAR_VAL(idx_ref,"pcfto") )
            {
               //wk_offx = -3
               //wk_offx = 0
               //Xt = VAR_VAL(idx_ref,"X") - 6

               wk_offx = -3
               Xt = VAR_VAL(idx_ref,"X") - 6

               Yt = VAR_VAL(idx_ref,"Y") - 3

               //Luca 29/10/2020 riporto modifiche di Lago
               //LZ - Differenzio per comodini
               //if( VAR_VAL(idx_ref,"PCF_Supporto")==2 ) { wk_offy = 201 }
               if( VAR_VAL(idx_ref,"PCF_Supporto")==2 )
               {
                 COMPONENTI2("wk_gamba",idx_ref,"GambaMetalloComodino_Mat")
                 COMPONENTI2("wk_omega",idx_ref,"SostegnoOmega_Mat")

                 wk_offy = 201
                 if( wk_gamba>0 & wk_omega==0 ) { wk_offy = 137 }
               }
               if( VAR_VAL(idx_ref,"PCF_Supporto")==1 ) { wk_offy = 17 }
               Yt = Yt - wk_offy
            }

            if( NOME(idx_ref)=="ModuloMateria_Mat" )
            {
               wk_offx = 1

               Xt = VAR_VAL(idx_ref,"X") + 2
               Yt = VAR_VAL(idx_ref,"Y") + 1

               wk_offy = VAR_VAL(idx_ref,"VAR_ConPiedini")*17
            }

            cnt_new = STRCAT("D - 0,B + 0,R + 0, ",STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 180")
            $M4_DragInfo_Cnt = cnt_new
            $QueryResult__ = 3
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //gestisco pannelli bifacciali dinamici
      GOSUB CalcPannelliBifacciali
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xt
      GEST_Y = Yt
      GEST_Z = Zt

      GEST_CODICE = ""

      GOSUB GestComune_Post
   }

   Posiziona BloccoBlend vt
   {
      @X = Xt
      @Y = Yt
      @Z = 4
      if( Vet2 == 1 ) { @X = Xt/2 - 1.5 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      GOSUB rivestimento
      @BLEND__ = 1
      @VetroFrontale = 1
   }

   //speciale
   Posiziona BloccoBlend vt2
   {
      @escluso = 1
      if( Vet2 == 1 ) { @escluso = 0 }

      @X = Xt/2 - 1.5
      @Y = Yt
      @Z = 4

      @base_0.x = base_0.x + 3 + @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      GOSUB rivestimento
      @BLEND__ = 1
      @VetroFrontale = 1
   }

   Posiziona PannelloBif_Mat pan1
   {
      @escluso = 1 - Pan1
      @base_0.x = base_0.x + Pan1_offx
      @base_0.y = base_0.y + Pan1_offy
      @base_0.z = base_0.z - Pan1_Z
      @X = Pan1_X
      @Y = Pan1_Y
      @Z = Pan1_Z
      GOSUB rivestimento
   }

   Posiziona PannelloBif_Mat pan2
   {
      @escluso = 1 - Pan2
      @base_0.x = base_0.x + Pan2_offx
      @base_0.y = base_0.y + Pan2_offy
      @base_0.z = base_0.z - Pan2_Z
      @X = Pan2_X
      @Y = Pan2_Y
      @Z = Pan2_Z
      GOSUB rivestimento
   }

   Posiziona PannelloBif_Mat pan3
   {
      @escluso = 1 - Pan3
      @base_0.x = base_0.x + Pan3_offx
      @base_0.y = base_0.y + Pan3_offy
      @base_0.z = base_0.z - Pan3_Z
      @X = Pan3_X
      @Y = Pan3_Y
      @Z = Pan3_Z
      GOSUB rivestimento
   }

   Posiziona PannelloBif_Mat pan4
   {
      @escluso = 1 - Pan4
      @base_0.x = base_0.x + Pan4_offx
      @base_0.y = base_0.y + Pan4_offy
      @base_0.z = base_0.z - Pan4_Z
      @X = Pan4_X
      @Y = Pan4_Y
      @Z = Pan4_Z
      GOSUB rivestimento
   }

   Posiziona _cont_per_near near
   {
      idx_cnear = ATTUALE()
      @base_0.x = base_0.x + 50
      @base_0.y = base_0.y + 50
      @base_0.z = base_0.z - 5
      @X = X - 100
      @Y = Y - 100
      @Z = 2
   }
}

//il supporto ha come larghezza il valore nominale dei moduli (senza condiderare ff)
Elemento SostegnoOmega_Mat
{
   Descrizione = "Supporto Omega"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      //LZ 30/06/2021
      VAR_Revisione   ""      0  SaveAlways

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"             460 Menu ( LargSMat )
      Y       "Altezza"               201 ShowAlways
      Z       "Profondita'"           366 Menu ( ProfSMat )
      Zt      "Profondita nominale"   366

      VAR_OrieComp "Composizione: 0 Oriz - 1 Vert" 0 Boolean

      VAR_GambaC   "Gamba centrale"                0   Boolean
      VAR_XGambaC  "X gamba cent."                 346
      VAR_YGambaC  "H gamba cent."                 174

      VAR_XSuppC   "X supporto cent."              300

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

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

      M4_VAR "" "X;Y;Z;VAR_OrieComp"

      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

      idx_cnear_up  ""  -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 30/06/2021: REV1 - distinta omega in gestione grafica
      SetRevisioneElemento( ATTUALE(), "BDM_REV_Mat_SupOmega", "")
      //wk_oggi = ATOI(STRMID(0,6,DATA(0)))
      //if( wk_oggi >= $BDM_REV_Mat_SupOmega_1 ) { VAR_Revisione = 1 }

      //RieXG = 138
      RieXG = 184
      if( VAR_OrieComp==1 )    { RieXG = 138 }

      RieZG = 18
      if( VAR_Revisione >= 1 ) { RieZG = 28 }

      //LZ 30/06/2021: REV1 - modifica dimensioni gambe e distinta omega in gestione grafica
      if( VAR_Revisione >= 1 ) { VAR_SET_MENU( ATTUALE(), "Z", "ProfSMat_r1") }

      //Simone 27/10/2022 - Sposto nella procedura dedicata
      //LZ 08/04/2022: gamba centrale
      //VAR_GambaC = 0
      //if( X > 2300
      //  & VAR_Revisione >= 2 ) { VAR_GambaC = 1 }
      GOSUB Set_Omega_GambaC

      if( ACTION()==2 & $ATTIVA_DLL==0 & IS_VAR_FIXED(ATTUALE(),"X")==0 ) { CHIEDI(ATTUALE(),"X") }

      //Luca 23/09/2019 mantis 0020909
      ////Luca 05/09/2019
      //if( $ATTIVA_DLL==1 & ACTION()>0 ) { HIDE = VAR_VAL(ATTUALE(),"in_pcfto") }

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

   PuntiNotevoli
   {
      Zt = Z + RieZG
      GOSUB punti_Zt
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      if( VAR_Revisione > 0 )
      {
         GOSUB Set_Vt_SuppOmega
      }

      //Simone 27/10/2022
      //GOSUB Trova_Elementi_Su_Omega_Mat
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_X = X-2*RieXG
      GEST_CODICE = ""
      RADICE = "SOME"

      GOSUB GestComune_Post
   }

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

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

   //Posiziona Blocco gsx
   Posiziona VetroOmega gsx
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + RieXG
      @base_0.z = base_0.z + RieZG
      @X = $Mat_Spe_Gambe
      @Y = $Mat_Alt_Gambe
      @Pos = -1
   }

   //Posiziona Blocco gdx
   Posiziona VetroOmega gdx
   {
      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 = $Mat_Alt_Gambe
      @Pos = 1
   }

   //Posiziona _graf_staffa_OMEGA staffa
   Posiziona StaffaOmega staffa
   {
      @X = X - 2*RieXG - 2*$Mat_Spe_Gambe

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

   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

      @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 _cont_per_near nup
   {
      @X = X-2*RieXG
      @Y = 10
      @Z = Z

      @base_0.x = base_0.x + RieXG
      @base_0.y = base_0.y + Y - @Y/2
      @base_0.z = base_0.z + Z/2 - @Z/2 + RieZG

      idx_cnear_up = ATTUALE()
   }
}

Elemento SostegnoComodino_Mat
{
   Descrizione = "Supporto Omega"
   Code        = CUC
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""

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

      X       "Larghezza"     460 Menu ( LargSMat )
      Y       "Altezza"       137 Menu ( AltGCMat )
      Z       "Profondita'"   366 ShowAlways
      Zt      "Profondita nominale"   366

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

      M4_A_MURO          ""   0
      M4_CNT_MODE__      ""   1

      M4_VAR "" "X;Y;Z;VAR_OrieComp"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_7

      RieXG = 80

      if( ACTION()==2 & $ATTIVA_DLL==0 & IS_VAR_FIXED(ATTUALE(),"X")==0 ) { CHIEDI(ATTUALE(),"X") }

      //solo per pcf
      if( $ATTIVA_DLL==1 )  { HIDE = 3 }
   }

   PuntiNotevoli
   {
      Zt = Z + 18
      GOSUB punti_Zt

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

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

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

   Posiziona GambaMetalloComodino_Mat gsx
   {
      @base_0.x = base_0.x + RieXG
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Y = Y
   }

   Posiziona GambaMetalloComodino_Mat gdx
   {
      @base_0.x = base_0.x + X - RieXG - @X
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Y = Y
   }
}

Elemento GambaMetalloComodino_Mat
{
   Descrizione = "Gamba Metallo Comodino"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 12
      Y "" 100
      Z "" 366

      FIN_var     ""  "C052"
      //FIN_var     ""  "C002"

      FIN_orie    ""  "V"

      RADICE      ""  "GAMEC"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      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
   }
}

Elemento VetroOmega
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      //LZ 30/06/2021
      VAR_Revisione   ""    0 Implicit

      X "Larghezza"  12  ShowAlways
      Y "Altezza"    196 ShowAlways
      Z "Profondità" 366 ShowAlways

      FillerM2G " " " " ShowAlways

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

      FIN_var "" "C052"
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 30/06/2021: REV1 - modifica dimensioni gambe e distinta omega in gestione grafica
      if( VAR_Revisione == 0 ) { FIN_idx_gest = PADRE(ATTUALE(),1) }
      else                     { HIDE = 0 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //LZ 30/06/2021: REV1 - modifica dimensioni gambe e distinta omega in gestione grafica
   Gestionale
   {
      GOSUB GestComune

      if( VAR_Revisione >= 1 )
      {
         RADICE = "GAME"

         if( IS_VAR_FIXED( ATTUALE(), "GEST_C052") ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C052") }
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento StaffaOmega
{
   Descrizione = ""
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      //LZ 30/06/2021
      VAR_Revisione   ""    0 Implicit

      Xn  "Larghezza nominale" 736 ShowAlways

      X   "Larghezza"  712
      Y   "Altezza"    40  ShowAlways
      Z   "Profondità" 268 ShowAlways

      M4_MIS "" "Filler*;Xn;Y;Z"

      FIN_var "" "C052"
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Xn = X + 2*$Mat_Spe_Gambe

      FIN_idx_gest = PADRE(ATTUALE(),1)

      //LZ 30/06/2021: REV1 - modifica dimensioni gambe e distinta omega in gestione grafica
      if( VAR_Revisione >= 1 ) { HIDE = 0 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //LZ 30/06/2021: REV1 - modifica dimensioni gambe e distinta omega in gestione grafica
   Gestionale
   {
      GOSUB GestComune

      if( VAR_Revisione >= 1 )
      {
         RADICE = "SUPRO"

         GEST_X = Xn

         if( IS_VAR_FIXED( ATTUALE(), "GEST_C052") ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C052") }
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona _graf_staffa_OMEGA bl
   {
      GOSUB posa_blocco
      //Luca 07/10/2019 Mantis 21014: Materia: sostegno in metallo, finitura errata
      @c_rivestimento = [69,73,78]
   }
}


Elemento _graf_staffa_OMEGA
{
   Descrizione = "Fianco"
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = XSweep
   Alias Scassabile

   Variabili
   {
      X "" 1
      Y "" 40
      Z "" 268

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

   PuntiNotevoli
   {
      base_0 = [0,20,0]   alto_0 = [X, 20, 0]
      base_1 = [0,Y,0]

      base_2  = [0,Y,32.5]
      base_3  = [0,3,74.5]
      base_4  = [0,Y,115.5]
      base_5  = [0,Y,151.5]
      base_6  = [0,3,193.5]
      base_7  = [0,Y,243.5]
      base_8  = [0,Y,Z]
      base_9  = [0,20,Z]

      base_10 = [0,20,Z-2]
      base_11 = [0,Y-2,Z-2]
      base_12 = [0,Y-2,base_7.z+2]
      base_13 = [0,0,base_6.z]
      base_14 = [0,Y-2,base_5.z-2]
      base_15 = [0,Y-2,base_4.z+2]
      base_16 = [0,0,base_3.z]
      base_17 = [0,Y-2,base_2.z-2]
      base_18 = [0,Y-2,base_1.z+2]
      base_19 = [0,20,base_0.z+2]

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

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

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

      HIDE "" 3

      VAR_Posizione     "" 0 Implicit

      //LZ 05/08/2021: moduli H138, coperchio da 19
      VAR_Coperchio19   "" 0 Implicit
      VAR_InvertiFNCP   "" 0 Implicit
      VAR_ConDivVert    "" 0 Implicit

      VAR_SupAggancioSx "" 0 Implicit
      VAR_SupAggancioDx "" 0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Fianco_Mat fncsx
   {
      @base_0 = base_0
      @Y = Y
      @Z = Z
      @Verso = -1
   }

   Posiziona Fianco_Mat fncdx
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X - $Mat_Spe_Fia
      @Verso = 1
      @Y = Y
      @Z = Z
   }

   Posiziona Fondo_Mat fd1r
   {
      @base_0.x = base_0.x + $Mat_Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z

      //if( VAR_InvertiFNCP==1 ) { @base_0.y = base_0.y + Y - $Mat_Spe_Fnd }
      @X = X - 2*$Mat_Spe_Fia
      @Z = Z
      @Y = $Mat_Spe_Fnd

      //LZ 05/08/2021: moduli H138, coperchio da 19
      //if( VAR_InvertiFNCP==1 ) { @Y = $Mat_Spe_Cop  }
      if( VAR_InvertiFNCP==1
        & VAR_Coperchio19==0 ) { @Y = $Mat_Spe_Cop  }
   }

   Posiziona Cop_Mat cop
   {
      @base_0.x = base_0.x + $Mat_Spe_Fia
      @base_0.y = base_0.y + Y - $Mat_Spe_Cop
      @base_0.z = base_0.z

      //if( VAR_InvertiFNCP==1 ) { @base_0.y = base_0.y }

      @X = X - 2*$Mat_Spe_Fia
      @Z = Z
      @Y = $Mat_Spe_Cop

      //LZ 05/08/2021: moduli H138, coperchio da 19
      //if( VAR_InvertiFNCP==1 )
      if( VAR_InvertiFNCP==1
        | VAR_Coperchio19==1 )
      {
         @Y = $Mat_Spe_Fnd
         @base_0.y = base_0.y + Y - $Mat_Spe_Fnd
      }
   }

   //Luca 15/10/2019 21047: Materia: grafica led
   Posiziona GraficaLed_Mat gf
   {
      @escluso = 1
      wk_gest_C054 = VAR_VAL_STR(PADRE(idx_att,1),"GEST_C054")
      if( wk_gest_C054!="__" &  wk_gest_C054!="" )  { @escluso = 0 }

      @base_0.x = base_0.x + $Mat_Spe_Fia
      @base_0.y = base_0.y + Y - $Mat_Spe_Cop - 1
      //Simone 21/02/2023
      if( VAR_InvertiFNCP==1
        | VAR_Coperchio19==1 )
      {
         @base_0.y = base_0.y + Y - $Mat_Spe_Fnd - 1
      }

      //Luca 12/11/2019
      if( VAR_InvertiFNCP==1 )
      {
         @base_0.y = base_0.y + Y - $Mat_Spe_Fnd - 1
      }

      wk_prof_van = (Z - $Mat_Rie_Sch_ZR - $M368_Spe_Sch)

      @base_0.z = base_0.z + $Mat_Rie_Sch_ZR + $M368_Spe_Sch + wk_prof_van/2 - @Z/2

      if( Z>=248 & Z<=288 ) { @base_0.z = @base_0.z -25 }
      if( Z>=426 & Z<=476 ) { @base_0.z = @base_0.z -25 }
      @X = X - 2*$Mat_Spe_Fia
   }

   Posiziona Schiena_Mat sch1r
   {
      @base_0.x = base_0.x + $Mat_Spe_Fia
      @base_0.y = base_0.y + $Mat_Spe_Fnd
      @base_0.z = base_0.z + $Mat_Rie_Sch_ZR
      if( VAR_InvertiFNCP==1
        & VAR_Coperchio19==0 ) { @base_0.y = base_0.y + $Mat_Spe_Cop }

      @X = X - 2*$Mat_Spe_Fia
      @Y = Y - $Mat_Spe_Fnd - $Mat_Spe_Cop
      if( VAR_Coperchio19==1 ) { @Y = Y - 2*$Mat_Spe_Fnd }
   }

   Posiziona MasselloSupportoAggancio_Mat sasx
   {
      @escluso = 1 - VAR_SupAggancioSx
      @base_0.x = base_0.x + $Mat_Spe_Fia
      @base_0.y = base_0.y + $Mat_Spe_Fnd
      @base_0.z = base_0.z
      if( VAR_InvertiFNCP==1
        & VAR_Coperchio19==0 ) { @base_0.y = base_0.y + $Mat_Spe_Cop }
      @Y = Y - $Mat_Spe_Fnd - $Mat_Spe_Cop
      if( VAR_Coperchio19==1 ) { @Y = Y - 2*$Mat_Spe_Fnd }
   }

   Posiziona MasselloSupportoAggancio_Mat sadx
   {
      @escluso = 1 - VAR_SupAggancioDx
      @base_0.x = base_0.x + X - $Mat_Spe_Fia - @X
      @base_0.y = base_0.y + $Mat_Spe_Fnd
      @base_0.z = base_0.z
      if( VAR_InvertiFNCP==1
        & VAR_Coperchio19==0 ) { @base_0.y = base_0.y + $Mat_Spe_Cop }
      @Y = Y - $Mat_Spe_Fnd - $Mat_Spe_Cop
      if( VAR_Coperchio19==1 ) { @Y = Y - 2*$Mat_Spe_Fnd }
   }

   //Luca 26/09/2019
   Posiziona BarraRetroSch_Mat bars
   {
      @escluso = 1
      //modulo 510 --> fusto 488
      //if( VAR_Posizione==2 & X>=368 & Z>=510 ) { @escluso = 0 }
      if( VAR_Posizione==2 & X>=368 & Z>=488 ) { @escluso = 0 }

      @X = X - 48
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y - $Mat_Spe_Cop - @Y
      if( VAR_InvertiFNCP==1 ) { @base_0.y = base_0.y + Y - $Mat_Spe_Fnd - @Y }
      @base_0.z = base_0.z + $Mat_Rie_Sch_ZR - @Z
   }

   Posiziona DivisorioVert_Mat div
   {
      @escluso = 1 - VAR_ConDivVert
      @base_0.x = base_0.x + X/2 - $Mat_Spe_Div/2
      @base_0.y = base_0.y + $Mat_Spe_Fnd
      if( VAR_InvertiFNCP==1 ) { @base_0.y = base_0.y + $Mat_Spe_Cop }
      @base_0.z = base_0.z + $Mat_Rie_Sch_ZR + $Mat_Spe_Sch

      @Y = Y - $Mat_Spe_Fnd - $Mat_Spe_Cop
      @Z = Z - $Mat_Rie_Sch_ZR - $Mat_Spe_Sch - 0.5
   }

   Posiziona Ferramenta_Mat fer
   {
      @escluso = 1
      if( Y >= 184
        & VAR_Posizione == 2
        & VAR_SupAggancioSx == 0
        & VAR_SupAggancioDx == 0 ) { @escluso = 0 }

      GOSUB posa_blocco
   }
}

Elemento Ferramenta_Mat
{
   Descrizione = "Ferramenta Materia"
   Code        = FERMAT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Offset_X_Cx     ""            28.5

      VAR_InvertiFNCP ""            0 Implicit
      VAR_Coperchio19 ""            0 Implicit

      VAR_ConDivVert  ""            0 Implicit

      FLAG_Debug      "Debug"       0 Implicit Boolean

      HIDE            ""            1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Attaccaglie_Num   = 2 + VAR_ConDivVert
      Attaccaglie_Tipo  = 2   //Bottone, vedi Elemento Attaccaglia_368
      Attaccaglie_Barra = -1  //Barra, forzo a L102
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

   Posiziona Attaccaglia_Mat Att_1
   {
      @Attaccaglia_Num = 1
      GOSUB PosaAttaccaglie_Mat
   }

   Posiziona Attaccaglia_Mat Att_2
   {
      @Attaccaglia_Num = 2
      GOSUB PosaAttaccaglie_Mat
   }

   Posiziona Attaccaglia_Mat Att_3
   {
      @Attaccaglia_Num = 3
      GOSUB PosaAttaccaglie_Mat
   }
}

Elemento Attaccaglia_Mat
{
   Descrizione = "Attaccaglie Materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      X                 "Larghezza"  42
      Y                 "Spessore"   146
      Z                 "Profondità" 19

      Verso             ""           0

      ConBarra          ""           1
      Barra_Offset_X    ""           2
      Barra_Offset_Y    ""           63

      M4_NO_OFFS        ""           1

      FLAG_Debug        ""           0 Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      DescEdit__ = "ATTACCAGLIA CON BOTTONE"

      nome_file = "AttaccagliaBottoneSX"
      if( Verso == 1 ) { nome_file = "AttaccagliaBottoneDX" }
      file_sat = STRCAT($path_sat,"368\Ferramenta\",nome_file,".sat")
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat
   {
      GOSUB posa_blocco

      @import = file_sat
      @c_rivestimento = $c_alluminio
   }

   Posiziona Attaccaglia_Barra bar
   {
      @base_0 = base_0
      @base_0.x = base_0.x + Barra_Offset_X
      if( Verso == 1 ) { @base_0.x = base_0.x + X - @X - Barra_Offset_X }
      if( Verso == 0 ) { @base_0.x = base_0.x + (X - @X)/2              }

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

      @ConBarra = 2
   }

   Posiziona Blocco dbg
   {
      @escluso = 1 - FLAG_Debug

      GOSUB posa_blocco

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

//{ COMPONENTI
Elemento Fianco_Mat
{
   Descrizione = "Fianco Materia"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Verso "" -1

      idx_near    ""  -1

      FIN_var     ""  "C002"
      //FIN_var     ""  "C002"

      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  "FIMA"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $Mat_Spe_Fia

      //  non fare i controlli gestionali nei figli
      GOSUB Stato_8
   }

   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
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      GOSUB rivestimento
   }
}

Elemento Fondo_Mat
{
   Descrizione = "Fondo Materia"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      VAR_Posizione     "Posizione modulo"  0 Implicit
      VAR_FixMuro       "Fissato a muro"    0 Implicit

      idx_bl2           ""                 -1

      idx_cnear_dw      ""                 -1

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

      perCODICE         ""                 ""
      GEST_CODICE       ""                 ""

      perRADICE         ""                 ""
      RADICE            ""                 ""

      //Variabili tecniche 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 Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Set_Vt_SuppOmega
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "FOMA"

      //Hanging unit, attualmente non li distinguo in alcun modo
      if( Z < 300
        & VAR_FixMuro > 0
        & VAR_Posizione == 2 ) { perRADICE = "FOMAS" }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      GOSUB rivestimento
   }

   Posiziona _cont_per_near ndw
   {
      idx_cnear_dw = ATTUALE()

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

      @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
   }
}

Elemento Schiena_Mat
{
   Descrizione = "Schienale generico"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   //Luca 20/01/2021 riporto modifiche LAGO
   //Alias        CamIncidente;CamInciso
   Alias        Schiena;CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      FLAG_Sp16   ""  0

      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  "SCHIMA"
      //RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      //così se la passo dal padre vince quella
      if( ACTION()==0 )
      {
         Z = $M368_Spe_Sch
         if( FLAG_Sp16 ) { Z = 16 }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB CtrlComune

      GEST_X = X + 2*$Mat_MagSch_X
      GEST_Y = Y + 2*$Mat_MagSch_Y

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

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

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 1
      Z "" 1

      VAR_Cappa   "" 0

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

      perRADICE   ""  ""
      RADICE      ""  "COMA"
   }

   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

      GOSUB CAMBIA_VAR
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB SetGest_C009_Mat

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura OnTabEredita
   {
      GOSUB CucP_OnTabEredita
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento RipianoVetro_Mat
{
   Descrizione = "Ripiano vetro materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloMateria_Mat Pensile_NOW_S24
   Altimetro   Auto
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563 ShowAlways
      Y "Spessore ripiano"     18 ShowAlways
      Z "Profondità"          318 ShowAlways

      FIN_var     ""  "C014"
      FIN_orie    ""  "O"

      perRADICE   ""  ""
      RADICE      ""  "RIVTRMA"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      Y = $Mat_Spe_RipV

      RieX_Rip  = 1
      RieZR_Rip = 0.5
      RieZF_Rip = 10
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani
   }

   //Procedura OnQueryBdmLocal
   //{
   //}

   Attrezza
   {
      base_0.x = $vano_0.x + $Mat_Spe_Fia + RieX_Rip
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + $Mat_Spe_Sch + $Mat_Rie_Sch_ZR + RieZR_Rip

      X = $larghezza  - 2*RieX_Rip - 2*$Mat_Spe_Fia
      Z = $profondita - $Mat_Spe_Sch - $Mat_Rie_Sch_ZR - RieZR_Rip - RieZF_Rip

      //   if( IS_VAR_FIXED(ATTUALE(),"PosRipiano")==0 ) { PosRipiano = -1 }
      //   X = ($larghezza - 2*$Mat_Spe_Fia - $Mat_Spe_Div)/2  - 2*RieX_Rip
      //   if( PosRipiano>0 ) { base_0.x = $vano_0.x + X/2 + $Mat_Spe_Div/2 + RieX_Rip }
     // Raffaele 16.06.2020
      vano_n = $vano_n
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }
}

Elemento RipianoLegno_Mat
{
   Descrizione = "Ripiano legno materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloMateria_Mat Pensile_NOW_S24
   Altimetro   Auto
   //Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"           563 ShowAlways
      Y "Spessore ripiano"     19 ShowAlways
      Z "Profondità"          318 ShowAlways

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

      perRADICE   ""  ""
      RADICE      ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8

      RieX_Rip  = 0
      RieZR_Rip = 0.5
      RieZF_Rip = 10
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Ripiani
   }

   Attrezza
   {
      base_0.x = $vano_0.x + $Mat_Spe_Fia + RieX_Rip
      base_0.y = $vano_0.y + $livello - Y/2
      base_0.z = $vano_0.z + $Mat_Spe_Sch + $Mat_Rie_Sch_ZR + RieZR_Rip

      X = $larghezza  - 2*RieX_Rip - 2*$Mat_Spe_Fia
      Z = $profondita - $Mat_Spe_Sch - $Mat_Rie_Sch_ZR - RieZR_Rip - RieZF_Rip

      vano_n = $vano_n
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco bl
   {
      GOSUB Posa_Elemento
      GOSUB rivestimento
   }
}

Elemento PannelloBif_Mat
{
   Descrizione = "Pannello Bifacciale"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente;CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

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

      GEST_CODICE  ""  "T01902"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco

      GOSUB rivestimento
   }
}

Elemento MasselloSupportoAggancio_Mat
{
   Descrizione = "Massello supporto aggancio"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 38
      Y "" 1
      Z "" 16

      Verso "" -1

      idx_near    ""  -1

      //FIN_var     ""  "C018"
      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  "MARIB"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //  non fare i controlli gestionali nei figli
      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
   }
}

Elemento DivisorioVert_Mat
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Verso "" -1

      idx_near    ""  -1

      //FIN_var     ""  "C018"
      FIN_var     ""  "C002"
      FIN_orie    ""  "V"

      perRADICE   ""  ""
      RADICE      ""  "DIVMA"

      COD_EREDITA      ""      "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      X = $Mat_Spe_Div

      //  non fare i controlli gestionali nei figli
      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
   }
}

Elemento PassaCavi_Mat
{
   Descrizione = "Passacavi"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloMateria_Mat Schiena_368
   Altimetro   Auto
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  ""          67
      Y  ""          67
      Z  ""          10

      OffsetX     "Offset X"  0 Utente ( )
      OffsetY     "Offset Y"  0 Utente ( )

      FileSAT "" "PassacaviTondoV.sat"

      GEST_CODICE "" "D21005"

      FIN_var     ""  "C014"
      FIN_orie    ""  "O"

      M4_MIS "" "OffsetX;OffsetY"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_7
      //DescEdit__ = MSG(1009)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   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

      GOSUB livelli_add2
   }

   Attrezza
   {
      base_0.x = $vano_0.x + @X/2 - X/2

      if( VAR_VAL(@idx_att,"VAR_ConDivVert")==1 )
      {
         base_0.x = $vano_0.x + @X/4 - X/2
      }

      base_0.y = $vano_0.y + @Y/2 - Y/2
      base_0.z = $vano_0.z + $Mat_Spe_Sch + $Mat_Rie_Sch_ZR

      base_0.x = base_0.x + OffsetX
      base_0.y = base_0.y + OffsetY

      //Simone 13/07/21
      if( NOME(@idx_att) == "Schiena_368" )
      {
         base_0.x = $vano_0.x + @X/2 - X/2

         if( VAR_VAL(PADRE(@idx_att, 1), "VAR_DivVerticale")>0 )
         {
            base_0.x = $vano_0.x + @X/4 - X/2
         }

         base_0.y = $vano_0.y + @Y/2 - Y/2
         base_0.z = $vano_0.z + $M368_Spe_Sch

         base_0.x = base_0.x + OffsetX
         base_0.y = base_0.y + OffsetY
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Simone 13/07/21 - Gestisco i limiti del passacavi
      if( ACTION() > 0 & ACTION()!=2 & $OnLoadOrder==0 & $ATTIVA_DLL==1 & $CNP == 0 )
      {
         if( VAR_VAL(ATTUALE(),"FLAG_Speciale") ) { EXITSUB() }

         //wk_x_max = VAR_VAL(PADRE(idx_att, 1), "X")/2 - X
         //if( VAR_VAL(PADRE(idx_att, 1), "VAR_ConDivVert")== 1
         //  | VAR_VAL(PADRE(idx_att, 2), "VAR_DivVerticale")>1 )
         //{
         //    wk_x_max = VAR_VAL(PADRE(idx_att, 1), "X") - X
         //}
         //wk_x_min = -wk_x_max

         wk_y_max = VAR_VAL(PADRE(idx_att,1), "Y")/2 - Y
         wk_y_min = -wk_y_max

         //if( OffsetX > wk_x_max | OffsetX < wk_x_min )   { CHIEDI(ATTUALE(),"OffsetX") }
         if( OffsetY > wk_y_max | OffsetY < wk_y_min )   { CHIEDI(ATTUALE(),"OffsetY") }

         //Simone 10/06/2022 - Va mantenuta una distanza di 50mm da fianchi e divisori
         BOX_MODE(0)
         NEAR_GLOBALE2("wk_fia",ATTUALE(),50,"Fianco_Mat")
         NEAR_GLOBALE2("wk_div",ATTUALE(),50,"DivisorioVert_Mat")
         NEAR_GLOBALE2("wk_sch",ATTUALE(),1,"Schiena_Mat")

         if( wk_fia > 0
           | wk_div > 0
           | wk_sch == 0 )
         {
            if( VAR_EXIST(ATTUALE(),"valv_chiedi_pcv") == 0 ) { valv_chiedi_pcv = 0 }

            if( valv_chiedi_pcv < 10 )
            {
               CHIEDI(ATTUALE(),"OffsetX")
               COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),-1))," //Controlli ",NOME(ATTUALE())))
               valv_chiedi_pcv = valv_chiedi_pcv + 1
            }
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      //Luca 01/10/2019
      if( VAR_VAL(ATTUALE(),"in_pcfto")==1
        & VAR_VAL(ATTUALE(),"att_su_pcf")==1 ) { GEST_IDXPADRE = PADRE(ATTUALE(),1) }
      else                                     { FLAG_RADICE = FLAG_RADICE + $MAKE_ROW }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

   Posiziona Blocco bl1
   {
      @base_0.x = base_0.x + X/2 - 2
      @base_0.y = base_0.y + Y/2 - 2
      @base_0.z = base_0.z
      @X = 2
      @Y = 2
      @Z = 4.5
   }

   Posiziona Blocco bl2
   {
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2- 2
      @base_0.z = base_0.z
      @X = 2
      @Y = 2
      @Z = 4.5
   }

   Posiziona Blocco bl4
   {
      @base_0.x = base_0.x + X/2- 2
      @base_0.y = base_0.y + Y/2
      @base_0.z = base_0.z
      @X = 2
      @Y = 2
      @Z = 4.5
   }

   Posiziona Blocco bl3
   {
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2
      @base_0.z = base_0.z
      @X = 2
      @Y = 2
      @Z = 4.5
   }

   Posiziona __import__ sat
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2
      @base_0.z = base_0.z - 6.5
      @import = STRCAT($path_sat,FileSAT)
      @c_rivestimento = $c_nero
   }
}

Elemento PassaCaviRett_Mat
{
   Descrizione = "Passacavi per Top Materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloMateria_Mat
   Altimetro   Auto
   Alias       CamIncidente;OnChangedVar;PassacaviMat

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  ""          180
      Y  ""           20
      Z  ""           49

      OffsetX     "Offset X"  50 Utente ( )
      OffsetZ     "Offset Z"  50 Utente ( )

      //0 Rettangolare Pic Alluminio
      //1 Vetro
      TipoPassaCavi  "" 0

      FileSAT "" "PassacaviRettPicAL.sat"

      //GEST_CODICE "" ""

      RigeneraScasso "Rigenera Scasso"  0

      idx_scasso "" -1
      Scassa_Chi_Plus     "" ""
      Scassa_Chi_Plus_Cop "" ""

      CMP2_AZIONI      ""      "A"

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

      M4_MIS "" "OffsetX;OffsetZ"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_7
      //DescEdit__ = MSG(1009)

      X = 180
      Y = 20
      Z = 50
      FileSAT = "PassacaviRettPicAL.sat"

      x_scasso = 178
      z_scasso = 48
      Raggio  = 5

      //Luca 12/06/2020 Vetro
      if( TipoPassaCavi==1 )
      {
         X = 200
         Y = 4
         Z = 70
         FileSAT = "PassacaviVetro.sat"

         //x_scasso = 198
         //z_scasso = 40
         //Raggio  = 17

         x_scasso = 200
         z_scasso = 70
         Raggio   = 18
      }

      //imposto minimi/massimi OffsetX/OffsetZ
      if( ACTION()>0 )
      {
         idx_pdr = PADRE(ATTUALE(),1)
         X_pdr = VAR_VAL(idx_pdr,"X")
         Z_pdr = VAR_VAL(idx_pdr,"Z")
         wk_led = VAR_VAL(idx_pdr,"wk_kled")

         lim_sx = 50
         lim_dx = 50
         lim_rt = 50
         lim_fr = 50

         //Luca 12/06/2020 aggiorno limiti
         lim_fr = 100

         //Simone 16/09/2022 - In presenza di led, devo evitare la zona in cui c'è la lavorazione per l'uscita del cavo alim.
         if( wk_led > 0 )
         {
            OffsetX = 70
            lim_sx = 70
         }

         VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( ",STR(lim_sx)," - ",STR(X_pdr-lim_dx-X)," )"))
         VAR_SET_MENU(ATTUALE(),"OffsetZ",STRCAT("( ",STR(lim_rt)," - ",STR(Z_pdr-lim_fr-Z)," )"))
      }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //centro scasso
      pnt_stp_centro = [X/2,0,Z/2]
      if( TipoPassaCavi==1 ) { pnt_stp_centro.z = Z - z_scasso/2 }
   }

   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

      GOSUB livelli_add2
   }

   Attrezza
   {
      base_0.x = @base_0.x + OffsetX
      base_0.y = $vano_0.y + @Y  + 4 - Y + 1.7
      base_0.z = @base_0.z + OffsetZ

      //if( ACTION()==2 & $OnLoadOrder==0 ) { COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(GetTopLevel(ATTUALE())),"  // Scassa_e_Taglia ")) }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 23/04/2020
      if( ACTION()>0 & $OnLoadOrder==0 )
      {
         Scassa_Chi_Plus     = ""
         Scassa_Chi_Plus_Cop = ""

         BOX_MODE(0)
         NEAR_GLOBALE2("wk_bl",idx_scasso,1,"*")
         i = 1
         while ( i<=wk_bl )
         {
            if( FORMA(wk_bl[i])!=$FORMA_CONTENITORE )
            {
               //Luca 02/09/2020 passacavi vetro - scasso diverso tra top e coperchio
               if( TipoPassaCavi==1 )
               {
                  if( UN_PADRE2(wk_bl[i],"Cop_Mat") ) { Scassa_Chi_Plus_Cop = STRCAT(Scassa_Chi_Plus_Cop,STR(wk_bl[i]),";") }

                  if( UN_PADRE2(wk_bl[i],"TopVetroMateria_Mat") ) { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }
               }
               else
               {
                  if( UN_PADRE2(wk_bl[i],"Cop_Mat")
                    | UN_PADRE2(wk_bl[i],"TopVetroMateria_Mat") ) { Scassa_Chi_Plus = STRCAT(Scassa_Chi_Plus,STR(wk_bl[i]),";") }
               }
            }
            i = i + 1
         }

         if( VAR_EXIST(ATTUALE(),"OffsetX_prec")==0 )          { OffsetX_prec  = OffsetX }
         if( VAR_EXIST(ATTUALE(),"OffsetZ_prec")==0 )          { OffsetZ_prec  = OffsetZ }
         if( VAR_EXIST(ATTUALE(),"Scassa_Chi_Plus_prec")==0 )  { Scassa_Chi_Plus_prec  = Scassa_Chi_Plus }

         if( OffsetX_prec  != OffsetX
           | OffsetZ_prec  != OffsetZ
           | Scassa_Chi_Plus_prec  != Scassa_Chi_Plus
           )
         {
            OffsetX_prec = OffsetX
            OffsetZ_prec = OffsetZ
            Scassa_Chi_Plus_prec  = Scassa_Chi_Plus

            //dal pcf
            idx_topl = PADRE(ATTUALE(),-1)
            $wk_EliminaScassi_da_idx = idx_topl
            GOSUB EliminaScassi
            COMANDO(STRCAT("PROCEDURA M4_Scassi ",STR(idx_topl),"  // 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 "))
         //}

         //Simone 16/09/2022
         if( IS_VAR_FIXED(ATTUALE(),"OffsetX") == 1
           & VAR_VAL(ATTUALE(),"FLAG_Speciale") == 0 )
         {
            if( OffsetX < lim_sx ) { CHIEDI(ATTUALE(),"OffsetX") }
         }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

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

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

      if( $ChangedVar=="OffsetX" )
      {
         idx_pdr = PADRE(ATTUALE(),1)
         if( VAR_VAL(idx_pdr,"VAR_ConDivVert")==1 )
         {
            wk_pos_div = VAR_VAL(idx_pdr,"X")/2
            wk_min_sx = 50
            wk_max_sx = wk_pos_div - $Mat_Spe_Div/2 - 30 - X
            wk_min_dx = wk_pos_div + $Mat_Spe_Div/2 + 30
            wk_max_dx = VAR_VAL(idx_pdr,"X") - 50 - X

            wk_count = 1
            while( wk_count <= 15
                 & OffsetX>wk_max_sx & OffsetX<wk_min_dx )
            {
               wk_count = wk_count + 1

               wk_msg = MSG(1090)
               wk_msg = STRCAT(wk_msg,"\n",MSG(1094))
               wk_msg = STRCAT(wk_msg,"\n",MSG(1095), " " , STR(wk_min_sx),"-",STR(wk_max_sx), " / " , STR(wk_min_dx),"-",STR(wk_max_dx))
               DISPLAY2(wk_msg)
               if( VAR_VAL(idx_pdr,"FLAG_Speciale") == 0 ) { CHIEDI(ATTUALE(),"OffsetX") }
            }
         }
      }
   }

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

   Posiziona __import__ sat
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x
      @base_0.y = base_0.y
      @base_0.z = base_0.z
      @import = STRCAT($path_sat,FileSAT)

      //Luca 12/06/2020
      if( TipoPassaCavi==1 ) { GOSUB rivestimento }
      else                   { @c_rivestimento = $c_alluminio  }
   }

   Posiziona BloccoSmussato_Scassa bl_scs
   //Posiziona Blocco Ing
   {
      //x_scasso = 180
      //z_scasso = 50
      //x_scasso = 178
      //z_scasso = 48
      //@Raggio  = 5
      //
      //if( TipoPassaCavi ==1 )
      //{
      //   x_scasso = 198
      //   z_scasso = 40
      //   @Raggio  = 17
      //}

      @Raggio = Raggio


      @base_0.x = base_0.x + X/2 - x_scasso/2
      @base_0.y = base_0.y - 45
      @base_0.z = base_0.z + Z/2 - z_scasso/2
      if( TipoPassaCavi ==1 ) { @base_0.z = base_0.z + Z - z_scasso }

      @X = x_scasso
      @Y = Y + 50
      @Z = z_scasso

      //@c_rivestimento = [120,120,255]
      //@f_rivestimento = "0.9"
      idx_scasso = ATTUALE()
      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }

   //Luca 02/09/2020 per coperchio
   Posiziona BloccoSmussato_Scassa bl_scs2
   {
      @escluso = 1
      if( TipoPassaCavi==1 ) { @escluso = 0 }
      @Raggio = Raggio

      @X = 180
      @Y = 50
      @Z = 70

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y - 45
      @base_0.z = base_0.z + 11

      //idx_scasso = ATTUALE()
      @Scassa_Chi_Plus = Scassa_Chi_Plus_Cop
   }
}

Elemento RipetitoreIR_Mat
{
   Descrizione = "Ripetitore IR Materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile ModuloMateria_Mat
   Altimetro   Auto
   Alias       CamIncidente;OnChangedVar

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  ""           25
      Y  ""           25
      Z  ""           25

      //0 -- FREESTANDING
      //1 -- DA INCASSO
      TipoIR      "" 0

      OffsetX     "Offset X"  50 Utente ( )
      OffsetZ     "Offset Z"  50 Utente ( )

      //LZ 07/07/2021: scasso il top in modo così da riportare la posizione del ripetitore nella stampa xglass
      idx_top                  ""                 -1

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

      //Simone 17/06/2022
      idx_sat "" -1

      //GEST_CODICE "" ""

      CMP2_AZIONI      ""      "A"

      FIN_var     ""  ""
      FIN_orie    ""  "O"

      M4_MIS "" "OffsetX;OffsetZ"
   }

   Assegnazioni
   {
      GOSUB AssComune

      FileSat = ""

      //imposto minimi/massimi OffsetX/OffsetZ
      if( ACTION()>0 )
      {
         idx_pdr = PADRE(ATTUALE(),1)
         X_pdr = VAR_VAL(idx_pdr,"X")
         Z_pdr = VAR_VAL(idx_pdr,"Z")
         VAR_SET_MENU(ATTUALE(),"OffsetX",STRCAT("( ",STR(50)," - ",STR(X_pdr-50-X)," )"))
         VAR_SET_MENU(ATTUALE(),"OffsetZ",STRCAT("( ",STR(50)," - ",STR(Z_pdr-50-Z)," )"))

         if( TipoIR==1 ) { Y = 50 }

         if( TipoIR == 0 )
         {
            X = 40
            Y = 40
            Z = 20

            FileSat = "RipIR_Appoggio.sat"
         }

         HIDE_ON_EDIT(ATTUALE(),"Offset*",1-TipoIR)
      }

      if( FileSat != "" ) { FileSat = STRCAT($path_sat,"368\",FileSat) }
   }

   PuntiNotevoli
   {
      GOSUB punti

      pnt_stp_centro = [X/2,0,Z/2]
   }

   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

      GOSUB livelli_add2
   }

   Attrezza
   {
      base_0.x = @base_0.x + @X - X - 22
      base_0.y = $vano_0.y + @Y + 4 // - Y - 38
      base_0.z = @base_0.z + @Z - 50

      if( TipoIR==1 )
      {
         base_0.x = @base_0.z + OffsetX
         base_0.y = $vano_0.y + @Y + 8 - Y
         base_0.z = @base_0.z + OffsetZ
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      if( IS_IDX(idx_top) != 1 )
      {
         BOX_MODE(0)
         NEAR_GLOBALE2( "wk_top", ATTUALE(), 1, "TopVetroMateria_Mat")

         if( wk_top > 0 )
         {
            idx_top = wk_top[1]
            Scassa_Chi_Plus = STR(idx_top)

            COMPONENTI( "wk_top_cmp", idx_top)

            wk_i = 1
            while( wk_i <= wk_top_cmp )
            {
               Scassa_Chi_Plus = STRCAT( Scassa_Chi_Plus, ";", STR(wk_top_cmp[wk_i]) )
               wk_i = wk_i + 1
            }
         }
      }

      if( RigeneraScasso==1 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"RigeneraScasso")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"RigeneraScasso") }
         RigeneraScasso = 0

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

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

      if( $ChangedVar=="OffsetX" )
      {
         idx_pdr = PADRE(ATTUALE(),1)
         if( VAR_VAL(idx_pdr,"VAR_ConDivVert")==1 )
         {
            wk_pos_div = VAR_VAL(idx_pdr,"X")/2
            wk_min_sx = 50
            wk_max_sx = wk_pos_div - $Mat_Spe_Div/2 - 30 - X
            wk_min_dx = wk_pos_div + $Mat_Spe_Div/2 + 30
            wk_max_dx = VAR_VAL(idx_pdr,"X") - 50 - X

            if( OffsetX>wk_max_sx & OffsetX<wk_min_dx )
            {
               wk_msg = MSG(1090)
               wk_msg = STRCAT(wk_msg,"\n",MSG(1094))
               wk_msg = STRCAT(wk_msg,"\n",MSG(1095), " " , STR(wk_min_sx),"-",STR(wk_max_sx), " / " , STR(wk_min_dx),"-",STR(wk_max_dx))
               DISPLAY2(wk_msg)
               CHIEDI(ATTUALE(),"OffsetX")
            }
         }

         RigeneraScasso = 1
      }

      if( $ChangedVar=="OffsetZ" )
      {
         RigeneraScasso = 1
      }
   }

   //Luca 14/11/2019 per posizionamento subito corretto
   Procedura PostGestDllValida
   {
      if($OnRigenera | $OnLoadOrder | ACTION()<=0) { EXITSUB() }

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


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

   //Posiziona Blocco TIR0
   //{
   //   @escluso = TipoIR
   //   GOSUB posa_blocco
   //   @c_rivestimento = $c_nero
   //}

   //Simone 17/06/2022
   Posiziona __import__ sat
   {
      @escluso = 1
      if( FileSat != "" & TipoIR == 0 )  { @escluso = 0 }
      GOSUB posa_blocco
      @import = FileSat

      GOSUB rivestimento
      if( FIN_var == "" ) { @c_rivestimento = $c_alluminio }

      idx_sat = ATTUALE()
   }

   Posiziona CilindroY TIR1
   {
      @escluso = 1 - TipoIR
      GOSUB posa_blocco

      @c_rivestimento = $c_nero
   }

   Posiziona CilindroY_Scassa TIR1s
   {
      @escluso = 1 - TipoIR
      GOSUB posa_blocco

      @Scassa_Chi_Plus = Scassa_Chi_Plus
   }
}

Elemento BarraRetroSch_Mat
{
   Descrizione = "Fianco "
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

   Variabili
   {
      X "" 18
      Y "" 30
      Z "" 10

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl
   {
      GOSUB posa_blocco
      @c_rivestimento = $c_alluminio
   }
}

Elemento GraficaLed_Mat
{
   Descrizione = "Grafica LED materia"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias        CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1
      Y "" 18
      Z "" 10

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco_Luce bl
   {
      GOSUB posa_blocco

      @FacciaLuminosa = "DW"
   }
}
//} COMPONENTI

//{ FRONTALI
Elemento Anta_Mat
{
   Descrizione = "Anta Generica Materia"
   Code        = ANTBAT
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   //Altimetro   Cuc_Altim_Fro Auto
   Altimetro     Zero
   Attrezzabile  ModuloMateria_Mat
   Alias         Frontale

   Variabili
   {
      X            "Larghezza"                     600 Utente ( )
      Y            "Altezza"                       600 Utente ( )
      Z            "Spessore"                       21

      //Luca 01/02/2019 tipofrontele numerico
      //TipoFrontale "Tipologia Frontale"            "A"
      TipoFrontale "Tipologia Frontale"              0

      AperturaMn   "Apertura Ante"                         0 Menu ( AperAnt_368 )
      Apertura     "Tipologia"                           "BA"

      Pos_Fro      "Progressivo anta"                1 Utente ( )
      Verso        "Verso apertura ante"            -1 Menu ( DXSX )

      Sdoppia      "Sdoppio del frontale oltre:"          600
      FAttSdoppia  "Flag di attivazione sdoppio "           1 Menu ( bool )

      //M4
      CMP2_AZIONI  ""    "V+"
      c_rivestimento "" [0,0,0]
   }

   Assegnazioni
   {
      GOSUB AssComune

      //GOSUB Ass_Comune_Cuc
      M4_VAR_NoGest = "X*;Y*;Z*;TipoFrontale;Sdoppia;FAttSdoppia;Verso;AperturaMn"
      HIDE_ON_EDIT(idx_att,"TipoFrontale;Sdoppia;FAttSdoppia;AperturaMn",$ATTIVA_DLL)

      if($ATTIVA_DLL==0)  {  HIDE = 0  }
      else                {  HIDE = 3  }

      Apertura = "BA"
      if( AperturaMn==1 ) { Apertura = "RB" }
      //if( AperturaMn==2 ) { Apertura = "VS" }

      if( Apertura=="RB" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"FAttSdoppia")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"FAttSdoppia") }
         FAttSdoppia = 0
      }

      Z = $Mat_Spe_Ant

      //Luca 19/05/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C028"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }
   #include %path_bdm%\TLib\Orie.inc

   //Procedura OnSetupLivelli
   //{
   //   idx_ref  = $__lev_ref__
   //   vano_ref = $__lev_vano__
   //
   //   DEL_VAR(idx_att,"liv2add*")
   //   liv2add    = 0
   //   liv2addscr = 0
   //   liv2add[1]    = 0
   //   liv2addscr[1] = 0
   //
   //   GOSUB livelli_add2
   //}

   Attrezza
   {
      GOSUB AttrezzaFrontali_Materia
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   //Procedura OnQueryBdmLocal
   //{
   //   GOSUB CucP_OnQueryBdmLocal
   //}

   //Procedura cancella
   //{
   //   GOSUB CucP_Cancella
   //}

   Posiziona AntaSingola_Mat an0
   {
      @base_0 = base_0
      @X = X
      @Y = Y
      @Pos          = Pos_Fro
      @Apertura     = Apertura
      @TipoFrontale = TipoFrontale

      if ( X>=Sdoppia & FAttSdoppia==1 )
      {
         @X = ( X - $Mat_Aria_Ant_Ant_X )/2

         @Verso = -1
         @AntaInCoppia  = 1
      }
      else
      {  @Verso = Verso    }

      @M4_NO_OFFS = 1

      //aliasposiz = "an0"
      //GOSUB CucP_Posiziona
   }

   Posiziona AntaSingola_Mat an1
   {
      @base_0 = base_0
      if ( X>Sdoppia & FAttSdoppia==1 )
      {
         @base_0.x = base_0.x + (X - $Mat_Aria_Ant_Ant_X)/2 +$Mat_Aria_Ant_Ant_X
         @X = (X - $Mat_Aria_Ant_Ant_X )/2

         @escluso=0
      }
      else
      {
         @escluso=1
      }
      @Y = Y


      @Verso         = 1
      @Pos           = Pos_Fro
      @Apertura      = Apertura
      @TipoFrontale  = TipoFrontale
      @AntaInCoppia  = 1

      @M4_NO_OFFS = 1

      //aliasposiz     = "an1"
      //GOSUB CucP_Posiziona
   }
}

Elemento AntaSingola_Mat
{
   Descrizione = "Anta Singola"
   Code        = ATS
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Cuc_Altim_Fro Auto
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              "Larghezza"                         568
      Y              "Altezza"                           686
      Yprec          "Altezza"                           686
      Z              "Profondita' anta"                   18

      //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

      perRADICE "" ""
      RADICE "" ""

      COD_EREDITA      ""      "PRE;POST"

      XGLASS      "Num. XGLASS" "" Utente ( )

      //GESTIONE NFC
      VT_NFC         "NFC"  0
      NFC_FlagAttiva  ""    0
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z = $Mat_Spe_Ant
      //GOSUB Stato_8

      //Luca 19/05/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C028"
   }

   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
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB AttrezzaGraficaFrontale

      //tutti i pensili anta orizzontale
      perRADICE = "ANMAOR"

      if( Apertura=="BA" ) { perRADICE = "ANMAVE" }

      RADICE = perRADICE

      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
      MdF_Load_Interat = "CerBat;CerRib"
      GOSUB MdF_ADD_Reg_Interat

      //Luca 30/06/2021
      GOSUB NFC_AttivaSuFrontale

      // Vedi svn 2703 (14/03/2023) e 2725 (29/03/2023) di RegFacc.txt
      wk_ctrl_sost_materia = 0
      if( X > 1432
        & Apertura == "RB"
        & VT_DATAINS <= 230329 + 7) { wk_ctrl_sost_materia = 1 }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         GOSUB Set_Gest_C007_AntaSing
      }
      if( TABER_REGOLA=="POST" )
      {
         GOSUB Set_Gest_C007_Ante
        // 08.03.2023 10468 Non e' molto lineare che l' Apertura sia corretta solo alla fine del caricamento ordine e quando passa nei Controlli non e' ancora corretta
         MdF_ElePostValido = 2
         GOSUB MdF_ADD_Reg_Interat
      }
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,2)
      // LucaP 07/04/2021
      if( VAR_VAL(azione_idx_pdr,"in_pcfto") ) { azione_idx_pdr = PADRE(idx_att,3) }

      if( Verso==-1 )   { azione_verso = "SX"   }
      else              { azione_verso = "DX"   }

      //Battente           BA
      if( Apertura=="BA" )     { GOSUB azione_apertura_battente  }
      if( Apertura=="RB" )     { GOSUB azione_apertura_ribalta  }
   }

   //Procedura cancella
   //{
   //   if( VAR_EXIST(-1,"StartingDel__")
   //     & INSERIMENTO2(ATTUALE())==$ins2_componente )
   //   {
   //      if( $StartingDel__==ATTUALE() )
   //      {
   //         $no_cancel=1
   //         COMANDO(STRCAT("CANCELLA ",STR(PADRE($StartingDel__,1)), " //cancello anta"))
   //      }
   //      else                             {  $no_cancel=0   }
   //   }
   //   //GOSUB CucP_Cancella
   //}

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   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
   }
}

Elemento Cassetto_Mat
{
   Descrizione  = "Cassetto Std"
   Code         = CAS
   Gruppo       = "MAT"
   Tipo         = Contenitore
   Forma        = ""
   Altimetro    Auto
   Attrezzabile ModuloMateria_Mat
   Alias        Frontale;CamInciso;CamMdFrontali

   Variabili
   {
         #include                             %path_bdm%\var_db.inc

         VAR_Revisione_Materia_StrIntCassCest "Revisione struttura interna cassetti cestoni" 0   Implicit

         X                                    "Larghezza"                                    600
         Y                                    "Altezza"                                      181 Menu   ( AltCassMat )
         Z                                    "Spessore Frontale"                            20

         Zn                                   "Profondità nominale"                          518 Menu   ( ZnCesCas   )
         Zt                                   "(Profondità complessiva)"                     518

         num_liv_cace                         "variabile per CAM"                            0
         tot_liv_cace                         "variabile per CAM"                            0

         TipoFrontale                         "Tipologia Frontale"                           0
         Pos_Fro                              "Progressivo frontale"                         1
         Apertura                             "Verso apertura Anta"                          "ES"

         //*variabili di gestione struttura interna cassetto
         NoStrInt                             "senza struttura interna"                      0
         TipoStrutturaCC                      "Tipolo struttura interna"                     "A"

         //* Delta posizione struttura rispetto al frontale vengono settati dalla tabella
         Px                                   "Delta posizione in x struttura"               25
         Py                                   "Delta posizione in y struttura"               25
         Pz                                   "Delta posizione in z struttura"               10
         MY                                   "Delta misura in Y sopra"                      10
         MZ                                   "Delta misura in Z"                            10
         HSponde                              "Altezza spondine struttura"                   90.5
         //*

         FroGrafica                           "Grafica frontale"                             ""
         PosHFro                              "Altezza posizionamento Frontale"              0
         escludi_man                          "esclusione posizionamento maniglia"           0
         sdoppia_man                          "doppia maniglia"                              0
         modello                              ""                                             ""
         modello_prec                         ""                                             "NN"
         Verso                                "Verso apertura ante"                          0
         ConGola                              "Presenza gola 0=no 1=sopra 2=sotto"           0

         VAR_ConDivVert                       ""                                             0   Implicit
         DoppiaStrInt                         ""                                             0

         Hide_Vano                            ""                                             1
         //dedicate al tab eredita se necessario
         PosManOpzY                           "Posizione manOpzionale in Y"                  ""
         OrieMan                              ""                                             ""

         perRADICE                            ""                                             ""
         RADICE                               ""                                             "CAMA"

         COD_EREDITA                          ""                                             "PRE;POST;C011_PRE"

         XGLASS                               "Num. XGLASS"                                  ""  Utente ( )
         //Utente ( )

         FillerM2G                            " "                                            ""  ShowAlways

         //GESTIONE NFC
         VT_NFC                               "NFC"                                          0
         NFC_FlagAttiva                       ""                                             0

         HIDE                                 ""                                             2

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

   Assegnazioni
   {
      GOSUB AssComune
      Spe_Ant = $Mat_Spe_Ant
      SpessoreFrontale = Spe_Ant

      GOSUB CucP_Assegnazioni

      DoppiaStrInt = 0
      if( VAR_ConDivVert > 0)
      {
         wk_x_pdr = VAR_VAL( idx_pdr, "X")
         if( wk_x_pdr <= 0) { wk_x_pdr = X }

         wk_x_vano_singolo = wk_x_pdr / (VAR_ConDivVert + 1)

         if( X > wk_x_vano_singolo) { DoppiaStrInt = 1 }
      }

      //Luca 19/05/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C028"
   }

   PuntiNotevoli
   {
      Zt = Spe_Ant + MZ
      GOSUB punti_Zt

      //vano per fondi vetro
      vano_0_0 = [Px,0,0]
      vano_l_0 = X - 2*Px
      vano_p_0 = MZ

      vano_0_1 = base_0
      vano_l_1 = X
      vano_p_1 = Zt
      vano_hide_1 = Hide_Vano
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Attrezza
   {
      GOSUB AttrezzaFrontali_Materia
      GOSUB SetStrIntCC_Materia
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements
      GOSUB NFC_AttivaSuFrontale
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 09/07/2021: gestisco profondità in caso di sostituzione del solo frontale o girocassetto
      GEST_Z = Zt
      if( IS_MATCH( VAR_VAL_STR( ATTUALE(), "GEST_C008"), "PF006") ) { GEST_Z = Spe_Ant }
      if( IS_MATCH( VAR_VAL_STR( ATTUALE(), "GEST_C008"), "PF008") ) { GEST_Z = MZ }

      perRADICE = "CAMA"
      if( DoppiaStrInt==1 ) { perRADICE = "CAMADIV" }
      if( VAR_Revisione_Materia_StrIntCassCest > 0 ) { perRADICE = STRCAT( perRADICE, "T") } //Revisione: CAMAT e CAMADIVT

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

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

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura azione
   {
      azione_val_max = 3*(Zt - Spe_Ant)/4
      azione_idx_pdr = PADRE(idx_att,2)
      GOSUB azione_apertura_cassetto
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   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 Mat_FroCassCest fro
   {
      @X = X
      @Y = Y
      @Z = Spe_Ant

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

   Posiziona Mat_StrIntCassCest cec
   {
      @escluso = NoStrInt

      @X = X - 2*Px
      if( DoppiaStrInt ) { @X = (X-93)/2 }
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz
   }

   Posiziona Mat_StrIntCassCest cec2
   {
      @escluso = 1
      if( NoStrInt==0 & DoppiaStrInt ) { @escluso = 0 }

      @X = (X-93)/2
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + X - @X - Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz
   }
}

Elemento Cestone_Mat
{
   Descrizione = "Cassetto Std"
   Code        = CAS
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro   Auto
   Attrezzabile ModuloMateria_Mat
   Alias       Frontale;CamInciso;CamMdFrontali

   Variabili
   {
         #include                             %path_bdm%\var_db.inc

         VAR_Revisione_Materia_StrIntCassCest "Revisione struttura interna cassetti cestoni" 0   Implicit

         X                                    "Larghezza"                                    600
         Y                                    "Altezza"                                      365 Menu   ( AltCestMat )
         Z                                    "Spessore Frontale"                            20

         Zn                                   "Profondità nominale"                          518 Menu   ( ZnCesCas   )
         Zt                                   "(Profondità complessiva)"                     518

         num_liv_cace                         "variabile per CAM"                            0
         tot_liv_cace                         "variabile per CAM"                            0

         TipoFrontale                         "Tipologia Frontale"                           0
         Pos_Fro                              "Progressivo frontale"                         1
         Apertura                             "Verso apertura Anta"                          "ES"

         //*variabili di gestione struttura interna cassetto
         NoStrInt                             "Senza struttura interna"                      0
         TipoStrutturaCC                      "Tipolo struttura interna"                     "A"

         //* Delta posizione struttura rispetto al frontale vengono settati dalla tabella
         Px                                   "Delta posizione in x struttura"               25
         Py                                   "Delta posizione in y struttura"               25
         Pz                                   "Delta posizione in z struttura"               10
         MY                                   "Delta misura in Y sopra"                      10
         MZ                                   "Delta misura in Z"                            10
         HSponde                              "Altezza spondine struttura"                   90.5
         //*

         FroGrafica                           "Grafica frontale"                             ""
         PosHFro                              "Altezza posizionamento Frontale"              0
         escludi_man                          "esclusione posizionamento maniglia"           0
         sdoppia_man                          "doppia maniglia"                              0
         modello                              ""                                             ""
         modello_prec                         ""                                             "NN"
         Verso                                "Verso apertura ante"                          0
         ConGola                              "Presenza gola 0=no 1=sopra 2=sotto"           0

         Hide_Vano                            ""                                             1
         //dedicate al tab eredita se necessario
         PosManOpzY                           "Posizione manOpzionale in Y"                  ""
         OrieMan                              ""                                             ""

         VAR_ConDivVert                       ""                                             0   Implicit
         DoppiaStrInt                         ""                                             0

         perRADICE                            ""                                             ""
         RADICE                               ""                                             ""

         COD_EREDITA                          ""                                             "PRE;POST;C011_PRE"

         XGLASS                               "Num. XGLASS"                                  ""  Utente ( )

         FillerM2G                            " "                                            ""  ShowAlways

         //GESTIONE NFC
         VT_NFC                               "NFC"                                          0
         NFC_FlagAttiva                       ""                                             0

         HIDE                                 ""                                             2

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

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Ant = $Mat_Spe_Ant
      SpessoreFrontale = Spe_Ant

      GOSUB CucP_Assegnazioni

      DoppiaStrInt = 0
      if( VAR_Revisione_Materia_StrIntCassCest <= 0 )
      {
         if( X > 920 ) { DoppiaStrInt = 1 }
      }
      //Simone 25/10/2023 - Ale R: TUTTI i moduli L1104 cassetto/cestone portano un unico frontale con un unico fusto cassetto
      //                    filtro anche per Rev delle guide perchè i cestoni h.368 con guida vecchia devono mantenere i girocassetti divisi
      else
      {
         if( VAR_ConDivVert > 0)
         {
            wk_x_pdr = VAR_VAL( idx_pdr, "X")
            if( wk_x_pdr <= 0) { wk_x_pdr = X }

            wk_x_vano_singolo = wk_x_pdr / (VAR_ConDivVert + 1)

            if( X > wk_x_vano_singolo) { DoppiaStrInt = 1 }
         }
      }

      //Luca 19/05/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C028"
   }

   PuntiNotevoli
   {
      Zt = Spe_Ant + MZ
      GOSUB punti_Zt

      //vano per fondi vetro
      vano_0_0 = [Px,0,0]
      vano_l_0 = X - 2*Px
      vano_p_0 = MZ

      vano_0_1 = base_0
      vano_l_1 = X
      vano_p_1 = Zt
      vano_hide_1 = Hide_Vano
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelli_Frontali
   }

   Attrezza
   {
      GOSUB AttrezzaFrontali_Materia
      GOSUB SetStrIntCC_Materia
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB GetRegola_Componenti_Elements
      GOSUB NFC_AttivaSuFrontale
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_Z = Zt

      perRADICE = "CEMA"
      if( DoppiaStrInt==1 ) { perRADICE = "CEMADIV" }
      if( VAR_Revisione_Materia_StrIntCassCest > 0 ) { perRADICE = STRCAT( perRADICE, "T") } //Revisione: CEMAT e CEMADIVT

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Procedura azione
   {
      azione_val_max = 3*(Zt - Spe_Ant)/4
      azione_idx_pdr = PADRE(idx_att,2)

      GOSUB azione_apertura_cassetto
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   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 Mat_FroCassCest fro
   {
      @X = X
      @Y = Y
      @Z = Spe_Ant

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

   Posiziona Mat_StrIntCassCest cec
   {
      @escluso = NoStrInt

      @X = X - 2*Px
      if( DoppiaStrInt ) { @X = (X-93)/2 }
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz
   }

   Posiziona Mat_StrIntCassCest cec2
   {
      @escluso = 1
      if( NoStrInt==0 & DoppiaStrInt ) { @escluso = 0 }

      @X = (X-93)/2
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + X - @X - Px
      @base_0.y = base_0.y + Py
      @base_0.z = base_0.z - MZ - Pz
   }
}

Elemento Mat_FroCassCest
{
   Descrizione = "Materia - Frontale Cassetto Cestone"
   Code        = MAT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Materia_StrIntCassCest "Revisione struttura interna cassetti cestoni" 0   Implicit

      X                                    "Larghezza"                                    549 ShowAlways
      Y                                    "Altezza"                                      181 ShowAlways
      Z                                    "Profondita'"                                  20  ShowAlways

      RADICE                               ""                                             ""
      perRADICE                            ""                                             ""

      GEST_CODICE                          ""                                             ""
      perCODICE                            ""                                             ""

      HIDE                                 ""                                             1

      XGLASS                               "Num. XGLASS"                                  "" Utente ( ) Implicit
      XGLASS_DISABLE                       ""                                             1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $NO_RAD
      perRADICE = ""
      perCODICE = ""

      HIDE = 1

      if( VAR_Revisione_Materia_StrIntCassCest > 0 )
      {
         FLAG_RADICE = $FLAG_STANDARD
         perRADICE = "FRCMT"

         HIDE = 0
      }

      if( perRADICE != RADICE
        | perCODICE != GEST_CODICE )
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona FroStandard368 cec
   {
      GOSUB Posa_Elemento
   }
}

Elemento Mat_StrIntCassCest
{
   Descrizione = "Materia - Struttura Interna Cassetto Cestone"
   Code        = MAT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      VAR_Revisione_Materia_StrIntCassCest "Revisione struttura interna cassetti cestoni" 0   Implicit

      X                                    "Larghezza"                                    504 ShowAlways
      Y                                    "Altezza"                                      97  ShowAlways
      Z                                    "Profondita'"                                  354 ShowAlways

      RADICE                               ""                                             ""
      perRADICE                            ""                                             ""

      GEST_CODICE                          ""                                             ""
      perCODICE                            ""                                             ""

      HIDE                                 ""                                             1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $NO_RAD
      perRADICE = ""
      perCODICE = ""

      HIDE = 1

      if( VAR_Revisione_Materia_StrIntCassCest > 0
        | UN_PADRE("Comodino_Hom") == 1 )
      {
         FLAG_RADICE = $FLAG_STANDARD
         perRADICE = "GIRMA"

         HIDE = 0
      }

      if( perRADICE != RADICE
        | perCODICE != GEST_CODICE )
      {
         RADICE = perRADICE
         GEST_CODICE = perCODICE

         flag_CAMBIA_VAR = 1
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Cuc_StrIntCC cec
   {
      GOSUB Posa_Elemento
   }
}
//} FRONTALI

Elemento KitLed_Mat
{
   Descrizione = "Kit led Materia"
   Code        = CUB
   Gruppo      = "MAT"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro     Auto
   Attrezzabile  *

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

      X "Larghezza"           100
      Y "Spessore ripiano"    100
      Z "Profondità"          100

      CMP2_AZIONI      ""     "A"

      //GEST_CODICE "" "D20021"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_7

      DescEdit__ = "KIT LED"
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      if( $query_type==8 )
      {
         $QueryResult__= 0
         COMPONENTI2("wk_kled",$query_p1,"KitLed_Mat")
         if( VAR_VAL($query_p1,"PCF_MATERIA")==1 & wk_kled==0 ) { $QueryResult__= 1 }

         //Simone 22/04/2022 - Blocco led su moduli con cassetto
         COMPONENTI2("wk_anta",$query_p1,"Anta_Mat")
         if( wk_anta == 0 ) { $QueryResult__= 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      COMPONENTI2("wk_kled",idx_ref,"KitLed_Mat")
      if( wk_kled>0 ) { EXITSUB() }

      DEL_VAR(idx_att,"liv2add*")
      liv2add    = 1
      liv2addscr = 1

      liv2add[1]    = 0
      liv2addscr[1] = 0

      liv2add[2]    = 99999
      liv2addscr[2] = 99999

      GOSUB livelli_add2
   }

   Attrezza
   {
      base_0 = $vano_0

      if( ACTION()==2 & $OnLoadOrder==0 )
      {
         COMANDO(STRCAT("RICALCOLA_UNA ",STR(PADRE(ATTUALE(),1))," no_agganciati //Led Materia"))
      }
   }

   Procedura PostAction2
   {
      //Aggiungo il trasformatore
      idx_pcf = PADRE(ATTUALE(),1)
      WITH_VAR_LOCAL(idx_pcf,"wk_trasf","GEST_CODICE",1,1,"D20021")

      if( wk_trasf>0 ) { EXITSUB() }

      COMANDO("ELEMENTO RigaOrdine_NonGraficato")
      COMANDO("STRUTTURA")
      COMANDO(STRCAT("VAR_FIX NO_AUTO=1 GEST_CODICE=",APICI(),"D20021",APICI()))
      COMANDO(STRCAT("ACCESSORIO2 ",STR(idx_pcf)))
   }

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

      idx_pcf = PADRE(ATTUALE(),1)
      //VAR_VALUE_SET(idx_pcf,"ConKitLed",0)
      //COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_pcf)," no_agganciati //Led Materia"))

      //Aggiungo il trasformatore
      idx_pcf = PADRE(ATTUALE(),1)
      WITH_VAR_LOCAL(idx_pcf,"wk_trasf","GEST_CODICE",1,1,"D20021")
      if( wk_trasf>0 ) { COMANDO(STRCAT("CANCELLA ",STR(wk_trasf[1])," //Led Materia")) }

      COMANDO(STRCAT("M4_UPDATEREF ",STR(idx_pcf)," //Led Materia"))
   }

   Controlli
   {
      GOSUB CtrlComune
      FLAG_RADICE = $NO_RAD
   }
}

Subroutine
{
   PROCEDURA AttrezzaFrontali_Materia
   {
      vano_n = $vano_n
      idx_pdr = PADRE(ATTUALE(),1)

      base_0.x = $vano_0.x + $Mat_Aria_Ant_X
      base_0.y = $vano_0.y + $livello + $Mat_Aria_Ant_Y
      base_0.z = $vano_0.z + $profondita + $Mat_Aria_Ant_Z

      if( IS_VAR_FIXED(idx_att,"X")==0 ) { X = $larghezza - 2*$Mat_Aria_Ant_X }

      //LZ 05/08/2021: moduli H138
      //if( NOME(ATTUALE())!="Anta_Mat" )  { EXITSUB() }
      if( NOME(ATTUALE()) != "Anta_Mat"
        & Y <= @Y - 2*$Mat_Aria_Ant_Y )  { EXITSUB() }

      if( IS_VAR_FIXED(idx_att,"Y")==0 ) { Y = @Y - 2*$Mat_Aria_Ant_Y }
      Verso = @Verso
   }

   PROCEDURA SetStrIntCC_Materia
   {
      Px = 22.5
      Py = 35.5
      Pz =  0

      HSponde = 97
      if( NOME(ATTUALE())=="Cestone_Mat" ) { HSponde = 180 }
      if( Y < 150 )                        { HSponde = 72  }
      MY = HSponde

      if( IS_VAR_FIXED(ATTUALE(),"Zt")==1 ) { EXITSUB() }

      //z_ref = $profondita
      z_ref = VAR_VAL( idx_pdr, "Z_Attrezza")
      if( z_ref <= 0) { z_ref = $profondita }

      Zn = 374
      if( z_ref >= 450 ) { Zn = 478 }

      if( VAR_Revisione_Materia_StrIntCassCest > 0 )
      {
         Zn = 360
         if( z_ref >= 450 ) { Zn = 460 }
      }

      MZ = Zn - $Mat_Spe_Ant
   }

   //Luca 02/09/2019
   //se per costruire il preconfigurato sono partito da un contenitore o da un sostegno, mi trovo il fianco a sx a -1
   //in questo caso dovo spostare tutto a dx di 4 mm
   PROCEDURA OnPcfStore_Materia
   {
      STRUTTURE("$wk_str")
      //trovo la stuttura posizionata
      $wk_idx_pos = -1

      $wk_i = 1
      while ( $wk_i<=$wk_str)
      {
         if( INSERIMENTO2($wk_str[$wk_i])==$ins2_posizionato ) { $wk_idx_pos = $wk_str[$wk_i] }
         $wk_i = $wk_i + 1
      }

      if( IS_IDX($wk_idx_pos)!=1 ) { EXITSUB() }

      if( NOME($wk_idx_pos)=="SostegnoOmega_Mat"
        | NOME($wk_idx_pos)=="ModuloMateria_Mat"
        | NOME($wk_idx_pos)=="SostegnoComodino_Mat")
      {
         $wk_zero = [0,0,0]
         SET_#($wk_idx_pos)
         $wk_str_zero = #base_0

         if( ABS(DISTANZA($wk_zero,$wk_str_zero))<0.1 ) { COMANDO2(STRCAT("EDITPOS_REL ",STR($wk_idx_pos)," 4 0 0 0")) z}
      }
   }

   PROCEDURA Set_Gest_C003_Mat
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C003")==0 )  { GEST_C003 = "" }

      CAT_VM_var = "C003"
      CAT_VM_opz = "TE001;CS001;SO001;TE002;TS001;TS002;TS003"
      CAT_VM_sel = ""

      if( VAR_ConPiedini==1 )     { AddVal_CAT_VM_sel( CAT_VM_sel , "TE001" ) }

      if( VAR_Posizione==2
         & VAR_SupAggancioSx==0
         & VAR_SupAggancioDx==0 ) { AddVal_CAT_VM_sel( CAT_VM_sel , "SO001" ) }

      //Luca 24/09/2020 mantis 23380: Materia: posizione su omega
      if( VAR_VAL(ATTUALE(),"VAR_SostegnoOmega") == 1 ) { AddVal_CAT_VM_sel(CAT_VM_sel, "TE002" ) }

      ////verifico se staccata da parete
      //idx_test = ATTUALE()
      //if( VAR_VAL(ATTUALE(),"in_pcfto")==1 ) { idx_test = PADRE(ATTUALE(),1) }
      //
      //if( VAR_Posizione!=0 )  { CAT_VM_sel = "SO001" }
      //
      //wk_dist = QUERY_WALL(idx_test,"distance from face R")
      //if( wk_dist>0 )         { CAT_VM_sel = STRCAT(CAT_VM_sel,";CS001") }

      //Simone 18/11/21
      //TS001 - AGGANCI H.138 TESTIERA IMBOTTITA SP.80
      //TS002 - AGGANCI H.138 TESTIERA REPLIS-SAPONETTA
      //Simone 24/03/2022 - Gestito aggancio per ww, tolgo da precedente
      //TS003 - AGGANCI H.138 TESTIERA WILDWOOD
      wk_ref = -1
      wk_pad = PADRE(ATTUALE(),1)
      if( VAR_EXIST(ATTUALE(),"idx_ref") ) { wk_ref = idx_ref }
      if( NOME(wk_pad) == "ModuloMateriaXTestiera_Mat" & VAR_EXIST(wk_pad,"idx_ref") )
      {
         wk_ref = VAR_VAL(wk_pad,"idx_ref")
      }

      if( IS_IDX(wk_ref) )
      {
         if( Y <= 184 )
         {
            if( NOME(wk_ref) == "Testiera_L21" )
            {
               CAT_VM_sel = "TS002"
               if(VAR_VAL_STR(wk_ref, "VAR_TipoTest") == "IMBOTTITA" )  { CAT_VM_sel = "TS001" }
               if(VAR_VAL_STR(wk_ref, "VAR_TipoTest") == "WILDWOOD"  )  { CAT_VM_sel = "TS003" }
            }
            //Simone 24/03/2022
            if( NOME(wk_ref) == "PannelloAccessorio_Testiera_L21" )
            {
               if( VAR_VAL_STR(wk_ref,"VAR_Tipologia") == "WILDWOOD" ) { CAT_VM_sel = "TS003" }
            }
         }
      }

      GOSUB Gest_CAT_VM
   }

   PROCEDURA Set_Gest_C007_Mat
   {
      VarAdd        = "GEST_C007"
      wk_varadd_pdr = VAR_VAL_STR( idx_pdr, VarAdd)
      wk_varadd_pdr = REPLACE( wk_varadd_pdr, "__", "")

      if( wk_varadd_pdr != ""
        | IS_VAR_FIXED(ATTUALE(), "GEST_C007") == 1 ) { EXITSUB() }

      GEST_C007 = "SX001"
      if( Verso > 0 ) { GEST_C007 = "DX001" }

      GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA Set_Gest_C054_Mat
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C054")==0 )  { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C054") )  { EXITSUB() }

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

      C054 = "__"

      COMPONENTI2("wk_kled",PADRE(ATTUALE(),1),"KitLed_Mat")

      if( wk_kled>0 )
      {
         C054 = "LED001"
         if( X>368 )  { C054 = "LED002" }
         if( X>552 )  { C054 = "LED003" }
         if( X>736 )  { C054 = "LED004" }
         if( X>920 )  { C054 = "LED005" }
         if( X>1104 ) { C054 = "LED006" }
         if( X>1472 ) { C054 = "LED007" }
         if( X>1840 ) { C054 = "LED008" }
      }

      VarAdd = "C054"   GOSUB Add_TABER_VARSETTATE
   }

   PROCEDURA SetGest_C009_Mat
   {
      if( VAR_EXIST(ATTUALE(),"GEST_C009")==0 )  { GEST_C009 = "" }

      CAT_VM_var = "C009"
      CAT_VM_opz = "SM003;TP008"
      CAT_VM_sel = ""

      BOX_MODE(0)
      NEAR_GLOBALE2("wk_pcr",ATTUALE(),3,"PassaCaviRett_Mat")
      if( wk_pcr>0 )  { CAT_VM_sel = "SM003" }

      NEAR_GLOBALE2("wk_rir",ATTUALE(),1,"RipetitoreIR_Mat")
      while( wk_rir>0 )
      {
         if( VAR_VAL(wk_rir[wk_rir],"TipoIR")==1 )
         {
            if( CAT_VM_sel=="" )  { CAT_VM_sel = "TP008" }
            else                  { CAT_VM_sel = STRCAT(CAT_VM_sel,";TP008") }
         }
         wk_rir = wk_rir - 1
      }

      GOSUB Gest_CAT_VM
   }

   //Luca 02/09/2019
   PROCEDURA PCF_PassaVar_Materia
   {
      if( NOME(@idx_att)=="ModuloMateria_Mat" )
      {
         //se almeno uno fix a muro
         if( @VAR_FixMuro==1 ) { PCF_Posizione = 1 }

         //se almeno uno sospeso
         if( @VAR_Posizione==2 )  { PCF_Posizione = 2 }

         M4_A_MURO = 0
         if( PCF_Posizione==1
           | PCF_Posizione==2  ) { M4_A_MURO = 1 }

         //PCF_Supporto = 0
         if( @VAR_Posizione==0 )  { PCF_Supporto = 1 }
         if( @VAR_Posizione==1 )  { PCF_Supporto = 2 }
      }
   }

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

      Pan1   = 1
      Pan1_offx = 69
      Pan1_offy = 19
      Pan1_X = X - Pan1_offx*2
      Pan1_Y = 59

      BOX_MODE(0)
      NEAR_GLOBALE("wk_mod",idx_cnear,1,0,"ModuloMateria_Mat")
      SORT_POINT(base_0,"wk_mod","base_0")

      Pan1_offx = 0  Pan1_offy = 0
      Pan2_offx = 0  Pan2_offy = 0
      Pan3_offx = 0  Pan3_offy = 0
      Pan4_offx = 0  Pan4_offy = 0

      Pan1_X = 0  Pan1_Y = 0
      Pan2_X = 0  Pan2_Y = 0
      Pan3_X = 0  Pan3_Y = 0
      Pan4_X = 0  Pan4_Y = 0

      Pan1   = 0  Pan2   = 0  Pan3   = 0   Pan4 = 0

      i = 1
      while ( i<=wk_mod )
      {
         idx_mod = wk_mod[i]
         SET_#(idx_mod)

         wk_pre_var = STRCAT("Pan",STR(i))

         wk_ridy_bif = 0
         if( VAR_VAL(ATTUALE(),"VAR_Revisione") == 1 )  { wk_ridy_bif = 6 }

         VAR_VALUE_SET(ATTUALE(),wk_pre_var,1)
         VAR_VALUE_SET(ATTUALE(),STRCAT(wk_pre_var,"_X"),VAR_VAL(idx_mod,"panbif_x") )
         VAR_VALUE_SET(ATTUALE(),STRCAT(wk_pre_var,"_Y"),VAR_VAL(idx_mod,"panbif_y") - wk_ridy_bif)

         wk_p0   = base_0
         wk_p0.y = 0

         wk_p1 = #pnt_panbif_so
         wk_p1.y =  0

         wk_point_x = DISTANZA(wk_p0,wk_p1) - VAR_VAL(idx_mod,"panbif_x")
         wk_point_y = #pnt_panbif_so.y - base_0.y

         VAR_VALUE_SET(ATTUALE(),STRCAT(wk_pre_var,"_offx"),wk_point_x)
         VAR_VALUE_SET(ATTUALE(),STRCAT(wk_pre_var,"_offy"),wk_point_y)

         i = i + 1
      }
   }

   //Luca 23/09/2019
   //salvo in fase di esplosione pcf le variabile di top, fianco e sostegno
   PROCEDURA OnBubble_Fix_VAR_MATERIA
   {
      //Cerco i composti
      WITH_VAR_LOCAL(ATTUALE(),"cmp","pcf_str",1,0,"")
      nc = 1
      while( nc<=cmp )
      {
         idx_cmp = cmp[nc]

         //Mi accerto che si tratti del primo livello di distinta del preconfigurato
         if( PADRE(idx_cmp,1)==ATTUALE() )
         {
            FIXVARS = 0
            if( NOME(idx_cmp)=="FiancoVetroMateria_Mat" )
            {
               FIXVARS = 2
               FIXVARS[1] = "Y"
               FIXVARS[2] = "Z"
            }

            if( NOME(idx_cmp)=="TopVetroMateria_Mat" )
            {
               FIXVARS = 2
               FIXVARS[1] = "X"
               FIXVARS[2] = "Z"
            }

            if( NOME(idx_cmp)=="ModuloMateria_Mat" )
            {
               FIXVARS = 6
               FIXVARS[1] = "VAR_Posizione"
               FIXVARS[2] = "VAR_SupAggancioDx"
               FIXVARS[3] = "VAR_SupAggancioSx"
               FIXVARS[4] = "VAR_Coperchio19"
               FIXVARS[5] = "VAR_InvertiFNCP"
               FIXVARS[6] = "VAR_ConDivVert"
            }

            if( NOME(idx_cmp)=="SostegnoOmega_Mat"
              | NOME(idx_cmp)=="SostegnoComodino_Mat" )
            {
               FIXVARS = 2
               FIXVARS[1] = "X"
               FIXVARS[2] = "Z"
            }

            //Scorro le varianti e per ciascuna verifico se è presente sul composto
            //e se non è già forzata
            cmd = ""
            nf = 1
            while( nf<=FIXVARS )
            {
               fixvar = FIXVARS[nf]
               if( VAR_EXIST(idx_cmp,fixvar))
               {
                  //Se stringa
                  if( VAR_TYPE(idx_cmp,fixvar)==1 )
                  {
                     //Incremento la stringa per il comando che forza in blocco le varianti
                     cmd = STRCAT(cmd," ",fixvar,"=",APICI(),VAR_VAL_STR(idx_cmp,fixvar),APICI())
                  }
                  //Se numero
                  if( VAR_TYPE(idx_cmp,fixvar)==0 )
                  {
                     //Incremento la stringa per il comando che forza in blocco le varianti
                     cmd = STRCAT(cmd," ",fixvar,"=",STR(VAR_VAL(idx_cmp,fixvar)))
                  }
               }
               nf = nf + 1
            }
            if( cmd!="" ) { COMANDO( STRCAT("VAR_CHANGE 1 ",STR(idx_cmp),cmd) ) }
         }
         nc = nc + 1
      }
   }

   PROCEDURA PcfMateria_Punti
   {
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   PROCEDURA OnBubble_KIT_LED_MATERIA
   {
      WITH_VAR_LOCAL(ATTUALE(),"wk_trasf","GEST_CODICE",1,1,"D20021")

      if( wk_trasf==0 ) { EXITSUB() }

      COMANDO("PUSH_SITUAZIONE")
      COMANDO("ELEMENTO RigaOrdine_NonGraficato")
      COMANDO("STRUTTURA")
      COMANDO(STRCAT("VAR_FIX NO_AUTO=1 GEST_CODICE=",APICI(),"D20021",APICI()))
      COMANDO("ACCESSORIO2")
      COMANDO("POP_SITUAZIONE")
   }

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

      //Luca 29/03/2022
      if( UN_PADRE("ComposizioneLetto_L21") ) { EXITSUB() }

      //LZ 07/09/2021: integrazione con vt per kit giunzioni
      VT_KITREGMAT = "0"
      VT_NGO     = 0
      VT_GO_1919 = 0
      VT_GO_1938 = 0

      //LZ 07/09/2021
      //if( VAR_Posizione!=1 ) { EXITSUB() }

      idx_test = ATTUALE()
      match = "ModuloMateria_Mat"
      dove  = "*"
      GOSUB VICINESXDX_cuc

      //1 - VT_KITREGMAT: kit planarità (solo per omega di tipo vecchio omega SostegnoOmega_Mat)
      if( VAR_Posizione == 1
        & VAR_VAL( ATTUALE(), "wk_omega_368") == 0)
      {
         if( IS_IDX(idx_sx)==1 | IS_IDX(idx_dx)==1 ) { VT_KITREGMAT = "1" }
         if( IS_IDX(idx_sx)==1 & IS_IDX(idx_dx)==1 ) { VT_KITREGMAT = "2" }
      }

      //2 - VT_NGO: numero giunzioni orizzontali (kit da 4, uno ogni due moduli)
      if( IS_IDX(idx_dx) == 1 ) { VT_NGO = "1" }

      //3 - VT_GO_1919: numero giunzioni verticali (kit da 4, uno ogni due moduli)
      if( VAR_EXIST( ATTUALE(), "idx_cnear_up")
        & IS_IDX( VAR_VAL( ATTUALE(), "idx_cnear_up")))
      {
         BOX_MODE(0)
         NEAR_GLOBALE2( "wk_sopra", idx_cnear_up, 2, "ModuloMateria_Mat")

         wk_i = 1
         while( wk_i <= wk_sopra )
         {
            wk_sopra_att = wk_sopra[wk_i]

            if( wk_sopra_att != ATTUALE() )
            {
               wk_sp_cop_att  = 38 - 19 * VAR_VAL( ATTUALE(), "VAR_InvertiFNCP")
               wk_sp_fondo_up = 19 + 19 * VAR_VAL( wk_sopra_att,  "VAR_InvertiFNCP")

               if( wk_sp_cop_att + wk_sp_fondo_up > 38)  { VT_GO_1938 = 1 }
               if( wk_sp_cop_att + wk_sp_fondo_up == 38) { VT_GO_1919 = 1 }

               //esco
               wk_i = wk_sopra
            }

            wk_i = wk_i + 1
         }
      }
   }

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

      //punti di default
      punto_sx_top = alto_0
      punto_sx_top_fro = alto_1

      punto_dx_top = alto_3
      punto_dx_top_fro = alto_2

      //calcolo punti da elementi del pcf
      COMPONENTI2("wk_mod", ATTUALE(), "Modulo_368")

      if( wk_mod > 0 )
      {
         //Filtro solo i moduli più in alto
         wk_mod_up = 0
         wk_punto_h_max = -9999

         if( ArraySortVarNum( ATTUALE(), "wk_mod", "punto_sx_top.y") )
         {
            wk_punto_h_max = VAR_VAL( wk_mod[1], "punto_sx_top.y")

            wk_i = wk_mod
            while( wk_i > 0 )
            {
               wk_mod_att = wk_mod[wk_i]

               if( VAR_VAL( wk_mod_att, "punto_sx_top.y") == wk_punto_h_max )
               {
                  wk_mod_up = wk_mod_up + 1
                  VAR_VALUE_SET( ATTUALE(), STRCAT( "wk_mod_up_##", STR(wk_mod_up)), wk_mod_att)
               }

               wk_i = wk_i - 1
            }

            //Calcolo punti estremi
            if( wk_mod_up > 0 )
            {
               SORT_POINT( [ alto_0.x, wk_punto_h_max, alto_0.z], "wk_mod_up", "punto_sx_top" )
               if( VAR_EXIST( wk_mod_up[1], "punto_sx_top" )
                 & VAR_EXIST( wk_mod_up[1], "punto_sx_top_fro" ) )
               {
                  //punto_dx_top = VAR_VAL_XYZ( wk_mod_up[1], "punto_sx_top")
                  //punto_dx_top_fro = VAR_VAL_XYZ( wk_mod_up[1], "punto_sx_top_fro")
                  SET_#(wk_mod_up[1])
                  punto_sx_top = #punto_sx_top
                  punto_sx_top_fro = #punto_sx_top_fro
               }

               if( VAR_EXIST( wk_mod_up[1], "punto_dx_top" )
                 & VAR_EXIST( wk_mod_up[1], "punto_dx_top_fro" ) )
               {
                  SORT_POINT( [ alto_3.x, wk_punto_h_max, alto_3.z], "wk_mod_up", "punto_dx_top" )
                  //punto_dx_top = VAR_VAL_XYZ( wk_mod_up[1], "punto_dx_top")
                  //punto_dx_top_fro = VAR_VAL_XYZ( wk_mod_up[1], "punto_dx_top_fro")
                  SET_#(wk_mod_up[1])
                  punto_dx_top = #punto_dx_top
                  punto_dx_top_fro = #punto_dx_top_fro
               }
            }
         }
      }
   }

   //LZ 16/09/2021
   PROCEDURA Set_Gest_C008_Elements
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 )  { EXITSUB() }

      if( VAR_EXIST( ATTUALE(), "GEST_C008") == 0)       { EXITSUB() }

      if( IS_VAR_FIXED( ATTUALE(), "GEST_C008") == 1)
      {
         DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C008")
      }

      gest_C008  = "__"

      COMPONENTI2( "wk_bif", ATTUALE(), "AntaBifacciale_368")
      if( wk_bif > 0 ) { gest_C008 = "SM121" }

      GEST_C008 = gest_C008
      VarAdd = "GEST_C008"   GOSUB Add_TABER_VARSETTATE
   }

   //Luca 19/05/2020 gestione continuità vena (SOLO PER PRECONFIGURATI)
   PROCEDURA FIN_CalcolaPunti_TEXTURE_CV_Materia
   {
      if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 )  { EXITSUB() }

      if( $OnRigenera_AttivaPCV == 1 )                   { EXITSUB() }

      debug = 0
      #ifdef TE
         debug = 1
      #endif

      wk_var_fin  = "C028"

      FIN_CV_PCF_Elements = 0
      FIN_CV_PCF_Elements_MadieNow = 0
      FIN_CV_PCF_Elements_LibreriaPentagram = 0

      //Luca 04/08/2021
      if( NOME(ATTUALE()) == "MadiaSideboardNow" ) { wk_var_fin  = "C042" }

      //Luca 14/04/2022
      if( NOME(ATTUALE()) == "Composizione_Morgana" ) { wk_var_fin  = "C001" }

      //Luca 01/02/2023
      if( NOME(ATTUALE()) == "LibreriaPentagram_LP22" ) { wk_var_fin  = "C114" }

      if( VAR_VAL(ATTUALE(),"PCF_Elements") )
      {
         wk_var_fin  = "C001"
         FIN_CV_PCF_Elements = 1

         //Luca 23/09/2021
         COMPONENTI2("wk_cmp",ATTUALE(),"MadiaSideboardNow")
         if( wk_cmp > 0 )
         {
            wk_var_fin  = "C042"
            FIN_CV_PCF_Elements_MadieNow = 1
         }

         //Luca 23/09/2021
         COMPONENTI2("wk_cmp",ATTUALE(),"LibreriaPentagram_LP22")
         if( wk_cmp > 0 )
         {
            wk_var_fin  = "C114"
            FIN_CV_PCF_Elements_LibreriaPentagram = 1
         }
      }

      wk_idx_test = ATTUALE()

      //trovo tutte le foglie grafiche che hanno la variabili dei finitura definita
      WITH_VAR_LOCAL(ATTUALE(),"wk_elementi","ORD_RETEX_VAR",3,1,wk_var_fin)

      //primo giro non hanno retex_var
      if( wk_elementi==0 ) { COMPONENTI2("wk_elementi",ATTUALE(),"Blocc*") }

      //Luca 06/05/2021 x continuità vena
      if( NOME(ATTUALE()) == "Madia_Plenum"
        | NOME(ATTUALE()) == "MadiaSideboardNow"
        | FIN_CV_PCF_Elements_MadieNow == 1)  { WITH_VAR_LOCAL(ATTUALE(),"wk_elementi","FIN_TEXTURE_VAR",3,0,"") }

      if( debug==1 )
      {
         i = 1
         COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_elementi = ",STR(wk_elementi)))
         while ( i<=wk_elementi )
         {
            COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_elementi[",STR(i),"] = ",STR(wk_elementi[i]) ))
            i = i + 1
         }
      }

      if( wk_elementi==0 ) { EXITSUB() }

      wk_pnt_ref = base_1

      wk_frontali = 0

      i = 1
      while ( i<=wk_elementi )
      {
         if( UN_PADRE2(wk_elementi[i],"Anta*")
           | UN_PADRE2(wk_elementi[i],"Cass*")
           | UN_PADRE2(wk_elementi[i],"Cest*")
           //Luca 01/02/2023 per pentagram
           | UN_PADRE2(wk_elementi[i],"Vetro_LP22")   )
         {
            ne = wk_frontali + 1
            wk_frontali = ne
            wk_frontali[ne] = wk_elementi[i]
         }

         i = i + 1
      }

      if( debug==1 )
      {
         i = 1
         COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_frontali = ",STR(i)))
         while ( i<=wk_frontali )
         {
            COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_frontali[",STR(i),"] = ",STR(wk_frontali[i]) ))
            i = i + 1
         }
      }

      if( wk_frontali==0 )  { EXITSUB() }

      SORT_POINT(wk_pnt_ref,"wk_frontali","base_0")

      wk_ang = ANG_TOT2(wk_idx_test)

      //base 0 primo vetro
      SET_#(wk_frontali[1])
      wk_pnt_0_txt = #base_0
      wk_pnt_0_txt.y = wk_pnt_0_txt.y + 2000

      if( debug==1 ) { COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_pnt_0_txt=[",STR(wk_pnt_0_txt.x),",",STR(wk_pnt_0_txt.y),",",STR(wk_pnt_0_txt.z),"]")) }

      //arretro di 500, per comprendere il fianco di finitura
      wk_pnt_0_txt.x = wk_pnt_0_txt.x - COSENO(wk_ang)*500
      wk_pnt_0_txt.z = wk_pnt_0_txt.z +   SENO(wk_ang)*500

      if( VAR_EXIST(ATTUALE(),"wk_rand")==0 )  { wk_rand = FIN_RAND(889,ATTUALE()) }
      wk_pnt_0_txt.x = wk_pnt_0_txt.x - COSENO(wk_ang)*wk_rand
      wk_pnt_0_txt.z = wk_pnt_0_txt.z +   SENO(wk_ang)*wk_rand

      if( debug==1 ) { COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_pnt_0_txt=[",STR(wk_pnt_0_txt.x),",",STR(wk_pnt_0_txt.y),",",STR(wk_pnt_0_txt.z),"]")) }

      //creo una serie di variabili XG_TEXTURE_OFF_idx_offx  XG_TEXTURE_OFF_idx_offy
      i = 1
      while ( i<=wk_elementi  )
      {
         if( debug==1 ) { COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] wk_elementi[",STR(i),"] = ",STR(wk_elementi[i]), " -> ",NOME(wk_elementi[i] ))) }

         wk_ele_test = wk_elementi[i]
         SET_#(wk_ele_test)

         wk_off_x = 0
         wk_off_y = 0
         wk_ok = 0

         if( UN_PADRE2(wk_ele_test,"Anta*")
           | UN_PADRE2(wk_ele_test,"Cass*")
           | UN_PADRE2(wk_ele_test,"Cest*")
           | UN_PADRE2(wk_ele_test,"PannelloBifaccialeMadiaNow")
           //Luca 01/02/2023
           | UN_PADRE2(wk_ele_test,"Vetro_LP22") )
         {
            wk_off_x = DistanzaFraPunti(wk_pnt_0_txt,#base_0,wk_ang)
            //wk_off_y = base_0.y - wk_pnt_0_txt.y
            if( VAR_EXIST(wk_ele_test,"alto_ne") == 1 )  { wk_off_y = wk_pnt_0_txt.y - #alto_ne.y }
            else                                         { wk_off_y = wk_pnt_0_txt.y - #alto_2.y  }

            wk_ok = 1
            wk_DBG = "FRO"
         }

         if( UN_PADRE2(wk_ele_test,"PannelloBifaccialeMadiaNow") )
         {

            SET_#(PADRE(wk_ele_test,2))

            wk_off_x = DistanzaFraPunti(wk_pnt_0_txt,#base_3,wk_ang) + VAR_VAL(PADRE(wk_ele_test,1),"TXT_OFFX")
            wk_off_y = wk_pnt_0_txt.y - #alto_2.y

            //if( VAR_EXIST(wk_ele_test,"alto_ne") == 1 )  { wk_off_y = wk_pnt_0_txt.y - #alto_ne.y }
            //else                                         { wk_off_y = wk_pnt_0_txt.y - #alto_2.y  }

            wk_ok = 1
            wk_DBG = "BIF"
         }


         if( UN_PADRE2(wk_ele_test,"Fianco*") )
         {
            //fianco dx
            if( VAR_VAL(PADRE(wk_ele_test,1),"Verso")>0 )
            {
               if( debug==1 ) { COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] FIANCO --> DX" )) }

               wk_off_x = DistanzaFraPunti(wk_pnt_0_txt,#base_0,wk_ang)
               //wk_off_y = base_0.y - wk_pnt_0_txt.y

               //Luca 04/08/2021
               if( UN_PADRE2(wk_ele_test,"FiancoFinituraMadiaNow") )
               {
                  if( VAR_VAL_STR(wk_ele_test,"PosFascia") == "RETRO" )
                  {
                     wk_off_x = wk_off_x + VAR_VAL(PADRE(wk_ele_test,2),"Z_FiaVetF") + 3
                  }
               }
               //Luca 15/06/2021
               //wk_off_y = wk_pnt_0_txt.y - #alto_ne.y
               if( VAR_EXIST(wk_ele_test,"alto_ne") == 1 )  { wk_off_y = wk_pnt_0_txt.y - #alto_ne.y }
               else                                         { wk_off_y = wk_pnt_0_txt.y - #alto_2.y  }

            }
            //fianco sx
            else
            {
               if( debug==1 ) { COMANDO2(STRCAT("LOGMSG Ctrl_CalcolaCont_XGLASS [",STR(ATTUALE()), "] FIANCO --> SX" )) }

               wk_off_x = DistanzaFraPunti(wk_pnt_0_txt,#base_0,wk_ang)
               //wk_off_y = base_0.y - wk_pnt_0_txt.y

               //Luca 04/08/2021
               if( UN_PADRE2(wk_ele_test,"FiancoFinituraMadiaNow") )
               {
                  if( VAR_VAL_STR(wk_ele_test,"PosFascia") == "FRONTE" )
                  {
                     wk_off_x = wk_off_x - VAR_VAL(PADRE(wk_ele_test,2),"Z_FiaVetF")
                  }
                  if( VAR_VAL_STR(wk_ele_test,"PosFascia") == "RETRO" )
                  {
                     wk_off_x = wk_off_x - VAR_VAL(PADRE(wk_ele_test,2),"Z")
                  }
               }
               else
               {
                  wk_off_x = wk_off_x - #Z
               }


               //Luca 15/06/2021
               //wk_off_y = wk_pnt_0_txt.y - #alto_ne.y
               if( VAR_EXIST(wk_ele_test,"alto_ne") == 1 )  { wk_off_y = wk_pnt_0_txt.y - #alto_ne.y }
               else                                         { wk_off_y = wk_pnt_0_txt.y - #alto_2.y  }

            }
            wk_DBG = "FIA"
            wk_ok = 1
         }

         if( UN_PADRE2(wk_ele_test,"Top*") )
         {
            wk_off_x = DistanzaFraPunti(wk_pnt_0_txt,#base_0,wk_ang)

            //Luca 15/06/2021
            //wk_off_y = wk_pnt_0_txt.y - #alto_ne.y - #Z
            if( VAR_EXIST(wk_ele_test,"alto_ne") == 1 )  { wk_off_y = wk_pnt_0_txt.y - #alto_ne.y - #Z }
            else                                         { wk_off_y = wk_pnt_0_txt.y - #alto_2.y - #Z }

            wk_DBG = "TOP"
            wk_ok = 1
         }

         if( wk_ok==1 )
         {
            //Luca 06/05/2021
            if( NOME(ATTUALE()) == "Madia_Plenum"
              | NOME(ATTUALE()) == "MadiaSideboardNow"  )  { wk_var_fin = VAR_VAL_STR(wk_ele_test,"FIN_TEXTURE_VAR")  }

            VAR_CREATE_NUM(wk_idx_test,STRCAT("TEXTURE_CV_",wk_var_fin,"_",STR(wk_ele_test),"_OFFX"),wk_off_x,0,"")
            VAR_CREATE_NUM(wk_idx_test,STRCAT("TEXTURE_CV_",wk_var_fin,"_",STR(wk_ele_test),"_OFFY"),wk_off_y,0,"")
            if( debug==1 )  { VAR_CREATE_STR(wk_idx_test,STRCAT("TEXTURE_CV_",wk_var_fin,"_",STR(wk_ele_test),"_DBG"),wk_DBG,0,"") }
         }

         i = i + 1
      }
   }

   PROCEDURA Set_Gest_C009_Pcf_Materia
   {
      if( ACTION() <= 0 | ACTION() == 2 )           { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C009") == 0 ) { EXITSUB() }

      if( IS_VAR_FIXED(ATTUALE(),"GEST_C009") == 1 )
      {
         DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C009")
      }

      gest_C009  = "__"
      if( ConKitLed == 1 ) { gest_C009  = "SM074" }

      if( GEST_C009 != gest_C009 )
      {
         GEST_C009 = gest_C009
         VarAdd = "GEST_C009"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA PosaAttaccaglie_Mat
   {
      // 0 - Escluso
      @escluso = 1
      if( @Attaccaglia_Num <= Attaccaglie_Num) { @escluso = 0 }

      // 1 - Posizione
      // 1.1 - PosAttaccaglia
      @Verso = 0
      if( @Attaccaglia_Num == 1 ) { @Verso = -1 }
      if( @Attaccaglia_Num == 2 ) { @Verso = 1  }

      // 1.2 - base_0
      @base_0 = base_0

      // 1.2.1 - Posizione larghezza
      wk_off_x = $Mat_Spe_Fia
      if( @Attaccaglia_Num == 2 ) { wk_off_x = X - $Mat_Spe_Fia - @X                   }
      if( @Attaccaglia_Num == 3 ) { wk_off_x = (X + $Mat_Spe_Div)/2 - Offset_X_Cx - @X }

      @base_0.x = base_0.x + wk_off_x

      // 1.2.2 - Posizione altezza
      wk_off_y = $Mat_Spe_Cop
      if( Y < 276
        | VAR_InvertiFNCP==1
        | VAR_Coperchio19==1 )             { wk_off_y = $Mat_Spe_Fnd }
      if( UN_PADRE("Cucina_2_5_Pensile*")) { wk_off_y = $Mat_Spe_Fnd }

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

      // 1.2.3 - Posizione profondità
      @base_0.z = base_0.z + $Mat_Rie_Sch_ZR - @Z

      @HIDE = 1
   }

   PROCEDURA Ctrl_Sost_Materia
   {
      $wk_CG_Nome    = "Ctrl_Sost_Materia"
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "Sostituzione non possibile per i moduli materia ribalta di L >= 1840,\nselezionare l'intero modulo o richiedere speciale per le forature delle cerniere."
      $wk_CG_Info    = ""

      WITH_VAR( "$wk_ctrl_sost_materia", "wk_ctrl_sost_materia", $num_con_figli, 1, "1")

      if( $wk_ctrl_sost_materia <= 0 )  { EXITSUB() }

      wk_ctrl_sost_materia_num = 1
      while( wk_ctrl_sost_materia_num <= $wk_ctrl_sost_materia)
      {
         wk_ctrl_sost_materia_att   = $wk_ctrl_sost_materia[wk_ctrl_sost_materia_num]
         wk_ctrl_sost_materia_pdr   = GetTopLevel(wk_ctrl_sost_materia_att)

         if( CheckSel_ORD_SOST(wk_ctrl_sost_materia_att)
           + CheckSel_ORD_SOST(wk_ctrl_sost_materia_pdr) == 1)
         {
            AddItem2Array( -1, "wk_CG_Items", wk_ctrl_sost_materia_pdr, "")
         }

         wk_ctrl_sost_materia_num = wk_ctrl_sost_materia_num + 1
      }

      if( $wk_CG_Items > 0) { $wk_CG_Blocca = 1 }

      GOSUB CG_CFO_FineControllo
   }

   //PROCEDURA Trova_Elementi_Su_Omega_Mat
   //{
   //   if( ACTION()<=0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }
   //
   //   //VAR_AltComp = 0
   //   $wk_alt_tot = 0
   //   $wk_mod_mat = 0
   //
   //   //trovo i moduli su omega
   //   BOX_MODE(0)
   //   NEAR_GLOBALE2("$wk_mod_mat",idx_cnear_up,1,"ModuloMateria_Mat")
   //
   //   $wk_i = 1
   //   while( $wk_i <= $wk_mod_mat )
   //   {
   //      $wk_idx_mod = $wk_mod_mat[$wk_i]
   //
   //      //verifico se ci sono altri moduli sovrapposti
   //      if( IsIdx($wk_idx_mod,"wk_sopra_att") )
   //      {
   //         SET_#($wk_idx_mod)
   //         AddItem2Array( -1, "wk_mod_mat", #wk_sopra_att, "")
   //      }
   //
   //      $wk_alt_mod = VAR_VAL($wk_idx_mod,"alto_0.y")
   //
   //      if( $wk_alt_mod > $wk_alt_tot ) { $wk_alt_tot = $wk_alt_mod }
   //
   //      $wk_i = $wk_i + 1
   //   }
   //}
}
