//Luca 06/09/2019
Globali
{
   SVN_Living_Rev                       "SVN revision"                                "$Revision: 2749 $" NoSave

//{ DIVANO HAPPENING
   //Schiene
   DivanoHappening_Schienale_Y          "Divano happening - Schienale - Altezza"                 340 NoSave
   DivanoHappening_Schienale_Z          "Divano happening - Schienale - Profondità"              350 NoSave

   DivanoHappening_Schienale_Aperto_X   "Divano happening - Schienale - Profondità"             1100 NoSave

   //Gambe
   DivanoHappening_Gambe_Y              "Divano happening - Gambe - Altezza"                      50 NoSave
//} DIVANO HAPPENING

//{ DIVANO HERO
   DivanoHero_Schienale_Y               "Divano hero - Schienale - Altezza"                      280 NoSave
   DivanoHero_Schienale_Z               "Divano hero - Schienale - Profondità"                   300 NoSave
   DivanoHero_Schienale_Aperto_X        "Divano hero - Bracciolo - Larghezza"                    840 NoSave

   //bracciolo
   DivanoHero_Bracciolo_Aperto_X        "Divano hero - Bracciolo - Larghezza"                    840 NoSave
   DivanoHero_Bracciolo_Aperto_Z        "Divano hero - Bracciolo - Profondità"                   350 NoSave

   //saranno da 2.1 in grafica perchè realisticamente l'imbottitura ne nasconde una parte
   DivanoHero_Gambe_Y                   "Divano hero - Gambe - Altezza"                           40 NoSave
//} DIVANO HERO

//{ DIVANO LONDY
   DivanoLondy_Schienale_Z              "Divano londy - Schienale - Profondità"                 300 NoSave

   DivanoLondy_Bracciolo_RieZ           "Divano londy - Rientro bracciolo - Profondità"         100 NoSave

   DivanoLondy_Gambe_X                  "Divano londy - Gambe - Larghezza"                       80 NoSave
   DivanoLondy_Gambe_Y                  "Divano londy - Gambe - Altezza"                         40 NoSave
//} DIVANO LONDY

//{ DIVANO ALTANA
   DivanoAltana_Schienale_Y             "Divano Altana - Schienale - Altezza"                   300 NoSave
   DivanoAltana_Schienale_Z             "Divano Altana - Schienale - Profondità"                180 NoSave
   DivanoAltana_Schienale_Aperto_AriaX  "Divano Altana - Schienale - Aperutura in L"            450 NoSave

   //bracciolo
   DivanoAltana_Bracciolo_Offset        "Divano Altana - Bracciolo Offset - Profondità"          54 NoSave
   DivanoAltana_Bracciolo_DayBed_X      "Divano Altana - Bracciolo Day Bed - Larghezza"         600 NoSave

   //telaio + gamba
   DivanoAltana_Gambe_Y                 "Divano Altana - Gambe - Altezza"                       230 NoSave
   DivanoAltana_Telaio_Y                "Divano Altana - Telaio senza piedi - Altezza"           87 NoSave
   DivanoAltana_Piede_X                 "Divano Altana - Piede legno - Larghezza"                80 NoSave
   DivanoAltana_Piede_Y                 "Divano Altana - Piede legno - Altezza"                 143 NoSave
   DivanoAltana_Piede_Z                 "Divano Altana - Piede legno - Profondità"               40 NoSave
//} DIVANO ALTANA

//{ DIVANO BIZA
   DivanoBiza_Schienale_Y               "Divano Biza - Schienale - Altezza"                     300 NoSave
   DivanoBiza_Schienale_Z               "Divano Biza - Schienale - Profondità"                  250 NoSave
   DivanoBiza_Schienale_Aperto_AriaX    "Divano Biza - Schienale - Aperutura in L"              450 NoSave

   //bracciolo
   DivanoBiza_Bracciolo_X               "Divano Biza - Bracciolo - Larghezza"                   550 NoSave
   DivanoBiza_Bracciolo_Offset          "Divano Biza - Bracciolo Offset - Profondità"            50 NoSave

   //telaio + gamba
   DivanoBiza_Gambe_Y                   "Divano Biza - Gambe - Altezza"                         210 NoSave
   DivanoBiza_Telaio_Y                  "Divano Biza - Telaio senza piedi - Altezza"            200 NoSave
   DivanoBiza_Piede_X                   "Divano Biza - Piede legno - Larghezza"                  60 NoSave
   DivanoBiza_Piede_Y                   "Divano Biza - Piedino - Altezza"                        10 NoSave
   DivanoBiza_Piede_Z                   "Divano Biza - Piedino - Profondità"                     60 NoSave
//} DIVANO BIZA

//{ MADIA PLENUM
   //sostegni
   X_Sost                              "Sostegni madia plenum - Spessore"                        12 NoSave
   Y_Sost                              "Sostegni madia plenum - Altezza totale"                 100 NoSave
   Y_Lama_Sost                         "Sostegni madia plenum - Altezza lama sostegno"           70 NoSave
   Offset_Z_Rt_Pie                     "Sostegni madia plenum - Offset dal retro"                30 NoSave
   Offset_Z_Fr_Pie                     "Sostegni madia plenum - Offset dal fronte"               80 NoSave

   Spe_Staffa_L_Sost                   "Sostegni madia plenum - Spessore staffa L"                5 NoSave
   X_Staffa_L_Sost                     "Sostegni madia plenum - Larghezza staffa L"              60 NoSave
   Y_Staffa_L_Sost                     "Sostegni madia plenum - Altezza staffa L"                60 NoSave
   Offset_Z_Rt_Staffa_L                "Sostegni madia plenum - Offset dal retro staffa L"       30 NoSave
   Offset_Z_Fr_Staffa_L                "Sostegni madia plenum - Offset dal fronte staffa L"     140 NoSave

   //binari
   Y_Bin_Sup                           "Binario superiore madia plenum - Altezza"                15 NoSave
   Z_Bin_Sup                           "Binario superiore madia plenum - Profondità"             50 NoSave
   Y_Bin_Inf                           "Binario inferiore madia plenum - Altezza"                60 NoSave
   Z_Bin_Inf                           "Binario inferiore madia plenum - Profondità"            188 NoSave

   //schiena
   Y_Schiena                           "Schiena madia plenum - Altezza "                        558 NoSave
   Z_Schiena                           "Schiena madia plenum - Spessore"                          8 NoSave
   RieZ_Sch                            "Schiena madia plenum - Offset dal retro"                 16 NoSave
   MagX_Sch                            "Schiena madia plenum - Maggorazione in larg"            7.5 NoSave
   MagY_Sch                            "Schiena madia plenum - Maggorazione in prof"            7.5 NoSave

   //fianchi
   Offset_Y                            "Fianco madia plenum - Offset in altezza"                  6 NoSave
   X_Fianco                            "Fianco madia plenum - Spessore totale"                   23 NoSave
   X_Fianco_Legno                      "Fianco madia plenum - Spessore fia legno"                19 NoSave
   Y_Fianco                            "Fianco madia plenum - Altezza"                          644 NoSave
   Spe_Vet                             "Fianco madia plenum - Spessore vetro"                     4 NoSave

   //divisorio
   X_Div                               "Divisorio madia plenum - Spessore"                       38 NoSave
   Y_Div                               "Divisorio madia plenum - Altezza"                       543 NoSave
   Offset_Z_Div                        "Divisorio madia plenum - Offset dal fronte"             101 NoSave

   //coperchio
   Y_Cop                               "Coperchio madia plenum - Altezza"                        38 NoSave

   //fondo
   Y_Fondo                             "Fondo madia plenum - Altezza totale"                     57 NoSave
   Y_Fnd_Inf                           "Fondo madia plenum - Altezza pannello inf"               38 NoSave
   Y_Fnd_Sup                           "Fondo madia plenum - Altezza pannello sup"               19 NoSave
   Offset_Y_Fnd                        "Fondo madia plenum - Offset in altezza fondo-sost"       22 NoSave

   //top vetro
   Y_Top                               "Top vetro madia plenum - Altezza"                         4 NoSave
   Offset_X_Top                        "Top vetro madia plenum - Offset in larg"                  4 NoSave
//} MADIA PLENUM

//{ SGABELLO BEAT
  SgabelloBeat_Diam_Palo          "Sgabello Beat - Diametro palo"                          50 NoSave

  SgabelloBeat_Spe_Base           "Sgabello Beat - Spessore base"                          11 NoSave
  SgabelloBeat_Diam_Base          "Sgabello Beat - Diametro base"                         380 NoSave
  SgabelloBeat_Diam_SuppBase      "Sgabello Beat - Diametro supporto base"                200 NoSave
  SgabelloBeat_Spe_SuppBase       "Sgabello Beat - Spessore supporto base"                  5 NoSave

  SgabelloBeat_Spe_Seduta         "Sgabello Beat - Spessore seduta"                        60 NoSave
  SgabelloBeat_Diam_Seduta        "Sgabello Beat - Diametro seduta"                       380 NoSave

  SgabelloBeat_Telaio_OffZ        "Sgabello Beat - Offset telaio"                          47 NoSave
//} SGABELLO BEAT
}

Misure
{
   DivanoGenerico_Modello              "Divano generico - Modello"                                     < OnlyDesc;NoDiz >
   {
      Nominali "Happening" "Hero" "Londy" "Altana" "Biza"
      Reali        1         2       3        4      5
   }

//{ DIVANO HAPPENING
   //Tipologia
   DivanoHappening_Tipologia           "Divano happening - Tipologia"                                  < OnlyDesc;NoDiz >
   {
      Nominali "Lineare" "Centrale" "Laterale" "ChaiseLounge" "Trapezio" "Pouf" "ArmChair"
      Reali        1         2          3             4           5         6       7
   }

   DivanoHappening_Schienale_Tipologia "Divano happening - Schienale - Tipologia"                      < OnlyDesc;NoDiz >
   {
      Nominali "Intero" "Aperto"
      Reali       1        2
   }

   DivanoHappening_Schienale_Verso     "Divano happening - Schienale - Verso"                          < OnlyDesc;NoDiz >
   {
      Nominali "Nessuno" "Sinistro" "Destro" "Entrambi"
      Reali        0         -1         1        2
   }

   //1 - Lineare
   DivanoHappening_Lineare_X           "Divano happening - Seduta lineare - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 2500 2800
      Reali    2500 2800
   }

   DivanoHappening_Lineare_Y           "Divano happening - Seduta lineare - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_Lineare_Z           "Divano happening - Seduta lineare - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //2 - Centrale
   DivanoHappening_Centrale_X          "Divano happening - Seduta centrale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1000 1600 1800
      Reali    1000 1600 1800
   }

   DivanoHappening_Centrale_Y          "Divano happening - Seduta centrale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_Centrale_Z          "Divano happening - Seduta centrale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //3 - Laterale
   DivanoHappening_Laterale_X          "Divano happening - Seduta laterale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1600 2100 2300 2400
      Reali    1600 2100 2300 2400
   }

   DivanoHappening_Laterale_Y          "Divano happening - Seduta laterale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_Laterale_Z          "Divano happening - Seduta laterale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //4 - ChaiseLounge
   DivanoHappening_ChaiseLounge_X      "Divano happening - Seduta chaise lounge - X composto"          < OnlyDesc;NoDiz >
   {
      Nominali 1000 1300
      Reali    1000 1300
   }

   DivanoHappening_ChaiseLounge_Y      "Divano happening - Seduta chaise lounge - Altezza composto"    < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_ChaiseLounge_Z      "Divano happening - Seduta chaise lounge - Profondita composto" < OnlyDesc;NoDiz >
   {
      Nominali 1700
      Reali    1700
   }

   //5 - Trapezio
   DivanoHappening_Trapezio_X          "Divano happening - Seduta trapezio - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1870
      Reali    1870
   }

   DivanoHappening_Trapezio_Y          "Divano happening - Seduta trapezio - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_Trapezio_Z          "Divano happening - Seduta trapezio - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1760
      Reali    1760
   }

   //6 - Pouff
   DivanoHappening_Pouf_X              "Divano happening - Seduta pouf - X composto"                   < OnlyDesc;NoDiz >
   {
      Nominali 900
      Reali    900
   }

   DivanoHappening_Pouf_Y              "Divano happening - Seduta pouf - Altezza composto"             < OnlyDesc;NoDiz >
   {
      Nominali 420
      Reali    420
   }

   DivanoHappening_Pouf_Z              "Divano happening - Seduta pouf - Profondita composto"          < OnlyDesc;NoDiz >
   {
      Nominali 900
      Reali    900
   }

   //7 - ArmChair
   DivanoHappening_ArmChair_X          "Divano happening - Seduta poltrona - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 950 1000 1120
      Reali    950 1000 1120
   }

   DivanoHappening_ArmChair_Y          "Divano happening - Seduta poltrona - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoHappening_ArmChair_Z          "Divano happening - Seduta poltrona - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }
//} DIVANO HAPPENING

//{ DIVANO HERO
   //Tipologia
   DivanoHero_Tipologia           "Divano hero - Tipologia"                                  < OnlyDesc;NoDiz >
   {
      Nominali "Lineare" "Centrale" "Laterale" "ChaiseLounge" "Esagono"  "Pouf"
      Reali        1         2          3             4           5         6
   }

   DivanoHero_Schienale_Tipologia "Divano hero - Schienale - Tipologia"                      < OnlyDesc;NoDiz >
   {
      Nominali "Intero" "Aperto" "Aperto-Bracciolo"
      Reali       1        2            3
   }

   DivanoHero_Schienale_Verso     "Divano hero - Schienale - Verso"                          < OnlyDesc;NoDiz >
   {
      Nominali "Nessuno" "Sinistro" "Destro" "Entrambi"
      Reali        0         -1         1        2
   }

   //1 - Lineare
   DivanoHero_Lineare_X           "Divano hero - Seduta lineare - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 2530 2950
      Reali    2530 2950
   }

   DivanoHero_Lineare_Y           "Divano hero - Seduta lineare - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoHero_Lineare_Z           "Divano hero - Seduta lineare - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1030
      Reali    1030
   }

   //2 - Centrale
   DivanoHero_Centrale_X          "Divano hero - Seduta centrale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1470 1890 1800
      Reali    1470 1890 1800
   }

   DivanoHero_Centrale_Y          "Divano hero - Seduta centrale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoHero_Centrale_Z          "Divano hero - Seduta centrale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1030
      Reali    1030
   }

   //3 - Laterale
   DivanoHero_Laterale_X          "Divano hero - Seduta laterale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1520 1580 1940 2000 2055 2360 2410 2470
      Reali    1520 1585 1940 2005 2055 2350 2415 2470
   }

   DivanoHero_Laterale_Y          "Divano hero - Seduta laterale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoHero_Laterale_Z          "Divano hero - Seduta laterale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1030
      Reali    1030
   }

   //4 - ChaiseLounge
   DivanoHero_ChaiseLounge_X      "Divano hero - Seduta chaise lounge - X composto"          < OnlyDesc;NoDiz >
   {
      Nominali 1150 1450
      Reali    1165 1465
   }

   DivanoHero_ChaiseLounge_Y      "Divano hero - Seduta chaise lounge - Altezza composto"    < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoHero_ChaiseLounge_Z      "Divano hero - Seduta chaise lounge - Profondita composto" < OnlyDesc;NoDiz >
   {
      Nominali 1730
      Reali    1730
   }

   //5 - Esagono
   DivanoHero_Esagono_X          "Divano hero - Seduta esagono - X composto"                 < OnlyDesc;NoDiz >
   {
      Nominali 1760 2250
      Reali    1760 2250
   }

   DivanoHero_Esagono_Y          "Divano hero - Seduta esagono - Altezza composto"           < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoHero_Esagono_Z          "Divano hero - Seduta esagono - Profondita composto"        < OnlyDesc;NoDiz >
   {
      Nominali 1370
      Reali    1370
   }

   //6 - Pouff
   DivanoHero_Pouf_X              "Divano hero - Seduta pouf - X composto"                   < OnlyDesc;NoDiz >
   {
      Nominali 1050
      Reali    1050
   }

   DivanoHero_Pouf_Y              "Divano hero - Seduta pouf - Altezza composto"             < OnlyDesc;NoDiz >
   {
      Nominali 400
      Reali    390
   }

   DivanoHero_Pouf_Z              "Divano hero - Seduta pouf - Profondita composto"          < OnlyDesc;NoDiz >
   {
      Nominali 980
      Reali    980
   }
//} DIVANO HERO

//{ DIVANO LONDY
   //Tipologia
   DivanoLondy_Tipologia           "Divano Londy - Tipologia"                                  < OnlyDesc;NoDiz >
   {
      Nominali "Lineare" "Centrale" "Laterale" "ChaiseLounge" "Angolare" "Pouf" "DayBed"
      Reali        1         2          3             4           5         6       7
   }

   DivanoLondy_Schienale_Tipologia "Divano Londy - Schienale - Tipologia"                      < OnlyDesc;NoDiz >
   {
      Nominali "Basso" "Alto"
      Reali       1       2
   }

   DivanoLondy_Schienale_Verso     "Divano Londy - Schienale - Verso"                          < OnlyDesc;NoDiz >
   {
      Nominali "Nessuno" "Sinistro" "Destro" "Entrambi"
      Reali        0         -1         1        2
   }

   //1 - Lineare
   DivanoLondy_Lineare_X           "Divano Londy - Seduta lineare - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 2700 2770
      Reali    2700 2770
   }

   DivanoLondy_Lineare_Y           "Divano Londy - Seduta lineare - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 760 860
      Reali    760 860
   }

   DivanoLondy_Lineare_Z           "Divano Londy - Seduta lineare - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1040 1080
      Reali    1040 1080
   }

   //2 - Centrale
   DivanoLondy_Centrale_X          "Divano Londy - Seduta centrale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali  1400
      Reali     1400
   }

   DivanoLondy_Centrale_Y          "Divano Londy - Seduta centrale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760 860
      Reali    760 860
   }

   DivanoLondy_Centrale_Z          "Divano Londy - Seduta centrale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1050 1090
      Reali    1050 1090
   }

   //3 - Laterale
   DivanoLondy_Laterale_X          "Divano Londy - Seduta laterale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1500 1540 2000 2040 2500 2540
      Reali    1500 1540 2000 2040 2500 2540
   }

   DivanoLondy_Laterale_Y          "Divano Londy - Seduta laterale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 760 860
      Reali    760 860
   }

   DivanoLondy_Laterale_Z          "Divano Londy - Seduta laterale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1050 1090
      Reali    1050 1090
   }

   //4 - ChaiseLounge
   DivanoLondy_ChaiseLounge_X      "Divano Londy - Seduta chaise lounge - X composto"          < OnlyDesc;NoDiz >
   {
      Nominali 1320 1360 1580 1620 1980
      Reali    1320 1360 1580 1620 1980
   }

   DivanoLondy_ChaiseLounge_Y      "Divano Londy - Seduta chaise lounge - Altezza composto"    < OnlyDesc;NoDiz >
   {
      Nominali 760 860
      Reali    760 860
   }

   DivanoLondy_ChaiseLounge_Z      "Divano Londy - Seduta chaise lounge - Profondita composto" < OnlyDesc;NoDiz >
   {
      Nominali 1040 1650 1690 2000 2040
      Reali    1040 1650 1690 2000 2040
   }

   //5 - Angolare
   DivanoLondy_Angolare_X          "Divano Londy - Seduta angolare - X composto"                 < OnlyDesc;NoDiz >
   {
      Nominali 1300 1340 1400 1440
      Reali    1300 1340 1400 1440
   }

   DivanoLondy_Angolare_Y          "Divano Londy - Seduta angolare - Altezza composto"           < OnlyDesc;NoDiz >
   {
      Nominali 760 860
      Reali    760 860
   }

   DivanoLondy_Angolare_Z          "Divano Londy - Seduta angolare - Profondita composto"        < OnlyDesc;NoDiz >
   {
      Nominali 1300 1340
      Reali    1300 1340
   }

   //6 - Pouff
   DivanoLondy_Pouf_X              "Divano Londy - Seduta pouf - X composto"                   < OnlyDesc;NoDiz >
   {
      Nominali 900
      Reali    900
   }

   DivanoLondy_Pouf_Y              "Divano Londy - Seduta pouf - Altezza composto"             < OnlyDesc;NoDiz >
   {
      Nominali 400
      Reali    400
   }

   DivanoLondy_Pouf_Z              "Divano Londy - Seduta pouf - Profondita composto"          < OnlyDesc;NoDiz >
   {
      Nominali 900
      Reali    900
   }

   //7 - DayBed
   DivanoLondy_DayBed_X            "Divano Londy - Seduta day bed - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 1800
      Reali    1800
   }

   DivanoLondy_DayBed_Y            "Divano Londy - Seduta day bed - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 760
      Reali    760
   }

   DivanoLondy_DayBed_Z            "Divano Londy - Seduta day bed - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1500
      Reali    1500
   }
//} DIVANO LONDY

//{ DIVANO ALTANA
   //Tipologia
   DivanoAltana_Tipologia           "Divano Altana - Tipologia"                                  < OnlyDesc;NoDiz >
   {
      Nominali "Lineare" "Centrale" "Laterale" "ChaiseLounge" "DayBed" "ArmChair"
      Reali        1         2          3             4           5        6
   }

   DivanoAltana_Schienale_Tipologia "Divano Altana - Schienale - Tipologia"                      < OnlyDesc;NoDiz >
   {
      Nominali "Intero" "Aperto"
      Reali       1        2
   }

   DivanoAltana_Schienale_Verso     "Divano Altana - Schienale - Verso"                          < OnlyDesc;NoDiz >
   {
      Nominali "Nessuno" "Sinistro" "Destro" "Entrambi"
      Reali        0         -1         1        2
   }

   //1 - Lineare
   DivanoAltana_Lineare_X           "Divano Altana - Seduta lineare - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 2400 2700
      Reali    2400 2700
   }

   DivanoAltana_Lineare_Y           "Divano Altana - Seduta lineare - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_Lineare_Z           "Divano Altana - Seduta lineare - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 950
      Reali    950
   }

   //2 - Centrale
   DivanoAltana_Centrale_X          "Divano Altana - Seduta centrale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali  1800 2400 2700
      Reali     1800 2400 2700
   }

   DivanoAltana_Centrale_Y          "Divano Altana - Seduta centrale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_Centrale_Z          "Divano Altana - Seduta centrale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 950
      Reali    950
   }

   //3 - Laterale
   DivanoAltana_Laterale_X          "Divano Altana - Seduta laterale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1850 2450 2750
      Reali    1850 2450 2750
   }

   DivanoAltana_Laterale_Y          "Divano Altana - Seduta laterale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_Laterale_Z          "Divano Altana - Seduta laterale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 950
      Reali    950
   }

   //4 - ChaiseLounge
   DivanoAltana_ChaiseLounge_X      "Divano Altana - Seduta chaise lounge - X composto"          < OnlyDesc;NoDiz >
   {
      Nominali 950 1250 1550
      Reali    950 1250 1550
   }

   DivanoAltana_ChaiseLounge_Y      "Divano Altana - Seduta chaise lounge - Altezza composto"    < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_ChaiseLounge_Z      "Divano Altana - Seduta chaise lounge - Profondita composto" < OnlyDesc;NoDiz >
   {
      Nominali 1550 1850
      Reali    1550 1850
   }

   //5 - DayBed
   DivanoAltana_DayBed_X            "Divano Altana - Seduta day bed - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 1600
      Reali    1600
   }

   DivanoAltana_DayBed_Y            "Divano Altana - Seduta day bed - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_DayBed_Z            "Divano Altana - Seduta day bed - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1550
      Reali    1550
   }

   //6 - ArmChair
   DivanoAltana_ArmChair_X          "Divano Altana - Seduta poltrona - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 730
      Reali    730
   }

   DivanoAltana_ArmChair_Y          "Divano Altana - Seduta poltrona - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 700
      Reali    700
   }

   DivanoAltana_ArmChair_Z          "Divano Altana - Seduta poltrona - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 730
      Reali    730
   }
//} DIVANO ALTANA

//{ DIVANO BIZA
   //Tipologia
   DivanoBiza_Tipologia             "Divano Biza - Tipologia"                                  < OnlyDesc;NoDiz >
   {
      Nominali "Lineare" "Centrale" "Laterale" "ChaiseLounge" "Angolare" "Pouf" "DayBed" "ArmChair"
      Reali        1         2          3             4           5        6       7          8
   }

   DivanoBiza_Schienale_Tipologia   "Divano Biza - Schienale - Tipologia"                      < OnlyDesc;NoDiz >
   {
      Nominali "Intero" "Aperto"
      Reali       1        2
   }

   DivanoBiza_Schienale_Verso       "Divano Biza - Schienale - Verso"                          < OnlyDesc;NoDiz >
   {
      Nominali "Nessuno" "Sinistro" "Destro" "Entrambi"
      Reali        0         -1         1        2
   }

   //1 - Lineare
   DivanoBiza_Lineare_X             "Divano Biza - Seduta lineare - X composto"                < OnlyDesc;NoDiz >
   {
      Nominali 2100 2600
      Reali    2100 2600
   }

   DivanoBiza_Lineare_Y             "Divano Biza - Seduta lineare - Altezza composto"          < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_Lineare_Z             "Divano Biza - Seduta lineare - Profondita composto"       < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //2 - Centrale
   DivanoBiza_Centrale_X            "Divano Biza - Seduta centrale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali  2050
      Reali     2050
   }

   DivanoBiza_Centrale_Y            "Divano Biza - Seduta centrale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_Centrale_Z            "Divano Biza - Seduta centrale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //3 - Laterale
   DivanoBiza_Laterale_X            "Divano Biza - Seduta laterale - X composto"               < OnlyDesc;NoDiz >
   {
      Nominali 1700 1750 2150 2200
      Reali    1700 1750 2150 2200
   }

   DivanoBiza_Laterale_Y            "Divano Biza - Seduta laterale - Altezza composto"         < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_Laterale_Z            "Divano Biza - Seduta laterale - Profondita composto"      < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }

   //4 - ChaiseLounge
   DivanoBiza_ChaiseLounge_X        "Divano Biza - Seduta chaise lounge - X composto"          < OnlyDesc;NoDiz >
   {
      Nominali 1180 1420
      Reali    1180 1420
   }

   DivanoBiza_ChaiseLounge_Y        "Divano Biza - Seduta chaise lounge - Altezza composto"    < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_ChaiseLounge_Z        "Divano Biza - Seduta chaise lounge - Profondita composto" < OnlyDesc;NoDiz >
   {
      Nominali 1620 1820
      Reali    1620 1820
   }

   //5 - Angolare
   DivanoBiza_Angolare_X            "Divano Biza - Seduta angolare - X composto"                 < OnlyDesc;NoDiz >
   {
      Nominali 1300
      Reali    1300
   }

   DivanoBiza_Angolare_Y            "Divano Biza - Seduta angolare - Altezza composto"           < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_Angolare_Z            "Divano Biza - Seduta angolare - Profondita composto"        < OnlyDesc;NoDiz >
   {
      Nominali 1300
      Reali    1300
   }

   //6 - Pouff
   DivanoBiza_Pouf_X                "Divano Biza - Seduta pouf - X composto"                     < OnlyDesc;NoDiz >
   {
      Nominali 800 1100
      Reali    800 1100
   }

   DivanoBiza_Pouf_Y                "Divano Biza - Seduta pouf - Altezza composto"               < OnlyDesc;NoDiz >
   {
      Nominali 380
      Reali    380
   }

   DivanoBiza_Pouf_Z                "Divano Biza - Seduta pouf - Profondita composto"            < OnlyDesc;NoDiz >
   {
      Nominali 800 1100
      Reali    800 1100
   }

   //7 - DayBed
   DivanoBiza_DayBed_X              "Divano Biza - Seduta day bed - X composto"                  < OnlyDesc;NoDiz >
   {
      Nominali 1700
      Reali    1700
   }

   DivanoBiza_DayBed_Y              "Divano Biza - Seduta day bed - Altezza composto"            < OnlyDesc;NoDiz >
   {
      Nominali 680
      Reali    680
   }

   DivanoBiza_DayBed_Z              "Divano Biza - Seduta day bed - Profondita composto"         < OnlyDesc;NoDiz >
   {
      Nominali 1600
      Reali    1600
   }

   //8 - ArmChair
   DivanoBiza_ArmChair_X            "Divano Biza - Seduta poltrona - X composto"                 < OnlyDesc;NoDiz >
   {
      Nominali 1050
      Reali    1050
   }

   DivanoBiza_ArmChair_Y            "Divano Biza - Seduta poltrona - Altezza composto"           < OnlyDesc;NoDiz >
   {
      Nominali 720
      Reali    720
   }

   DivanoBiza_ArmChair_Z            "Divano Biza - Seduta poltrona - Profondita composto"        < OnlyDesc;NoDiz >
   {
      Nominali 1000
      Reali    1000
   }
//} DIVANO BIZA

   LarTavG "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali  500  600  900  1000  1200  1300  1400  1580  1600  1780  1800  2000  2200  2460  2480  2500  2800  2980  3000
      Reali     500  600  900  1000  1200  1300  1400  1580  1600  1780  1800  2000  2200  2460  2480  2500  2800  2980  3000
   }

   AltTavG "Altezza" < OnlyDesc;NoDiz >
   {
      Nominali 300 400 500 720 730 740 750 757 760
      Reali    300 400 500 720 730 740 750 757 760
   }

   ProTavG "Profondità" < OnlyDesc;NoDiz >
   {
      Nominali 500  600  700  800  900  1000  1100  1200  1240  1280  1300  1320  1400  1580  1800
      Reali    500  600  700  800  900  1000  1100  1200  1240  1280  1300  1320  1400  1580  1800
   }

   ModTav "Modello Tavolo" < OnlyDesc;NoDiz >
   {
      Nominali "U" "MRX" "PJ" "JANEIRO" "BOLD" "MEET" "WADI" "LOTO" "HOA" "ALBERONI" "ALBERONI_COFFEE" "CORRER" "CORRER_COFFEE"
      Reali     0    1     2      3        4     5      6       7     8        9              10          11           12
   }

   FrPiTav "Forma piano tavolo" < OnlyDesc;NoDiz >
   {
      Nominali "Rettangolare" "Botte" "Tondo" "Ellittico" "Organico"
      Reali         0            1       2         3           4
   }

   TpPiTav "Tipo piano tavolo" < OnlyDesc;NoDiz >
   {
      Nominali "Vetro"  "XGlass" "WildWood" "HayWood/AgeWood" "Trasparente" "Fume"  "Laccato"  "Finewood"  "MDi"  "Marmo"
      Reali       0        1         2              3               4          5        6           7        8       9
   }

   //Simone 14/06/2022 - Tavolini forme
   AltTavolino "Altezza Tavolino" < OnlyDesc;NoDiz >
   {
      Nominali 324  325  350  379  400
      Reali    324  325  350  379  400
   }

   //Simone 14/06/2022
   ModTavolino "Modello Tavolino" < OnlyDesc;NoDiz >
   {
      Nominali "Pleasure"  "Yama"  "Londy"
      Reali        0          1       2
   }

   FrTopTav "Forma Top Tavolino" < OnlyDesc;NoDiz >
   {
      Nominali "1"  "2"  "3"  "4"  "5"
      Reali     1    2    3    4    5
   }

   //Simone 15/06/2022 - Il wildwood attualmente non viene utilizzato perchè è un nuovo valore della stessa categoria
   TpTopTav "Materiale Top" < OnlyDesc;NoDiz >
   {
      Nominali "Vetro"  "Wildwood"
      Reali       0         1
   }

   LarDivS "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 1050 1300 1600 1900 2300 2700
      Reali    1050 1300 1600 1900 2300 2700
   }

   ProDivS "Profondità" < OnlyDesc;NoDiz >
   {
      Nominali 1050 1300 1600
      Reali    1050 1300 1600
   }

   DimDivST "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali "163x179"  "187x190"
      Reali        1          2
   }

   LarSFSDivS "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali 800 1000
      Reali    800 1000
   }

   Larg_Madia "Larghezza Plenum" <OnlyDesc>
   {
       Nominali  "1848"  "2216"
       Reali      1848    2216
   }

   Prof_Madia "Profondità Plenum" <OnlyDesc>
   {
       Nominali  "510"  "560"
       Reali      510    560
   }

   X_Tappeto "Larghezza Tappeto" <OnlyDesc>
   {
       Nominali  1500  1600  1700  2000  2400  2500  3000  3500  4500
       Reali     1500  1600  1700  2000  2400  2500  3000  3500  4500
   }

   Z_Tappeto "Altezza Tappeto" <OnlyDesc>
   {
       Nominali  1400  1500  1600  1700  2000  2400  2500  3000  3500  4000  5000
       Reali     1400  1500  1600  1700  2000  2400  2500  3000  3500  4000  5000
   }

   Forma_Tappeto "Forma Tappeto" <OnlyDesc>
   {
       Nominali  "Rettangolare"  "Rotondo"
       Reali          0              1
   }

   Trama_Tappeto "Tipo Trama Tappeto" <OnlyDesc>
   {
       Nominali  "Uniforme"  "Riga larga vert"  "Riga larga orizz"  "Riga stretta orizz"
       Reali          0              1                   2                    3
   }

   //MicheleC 16/12/2021
   XY_SpecchioPunto "Dimensioni XY Specchio Punto" <OnlyDesc>
   {
       Nominali  680   990   1300
       Reali     680   990   1300
   }

   //MicheleC 24/12/2021
   AngMorgana  "Angolazione del cassetto agganciato" <OnlyDesc>
   {
      Nominali    -20   -10   0   10   20
      Reali       -20   -10   0   10   20
   }

   //MicheleC 24/12/2021
   TpBasMor  "Tipo base Morgana" <OnlyDesc>
   {
      Nominali    "Base con piedini"   "Base con ruote"
      Reali               1                    2
   }

   ZMorgana "Profondità" < OnlyDesc;NoDiz >
   {
      Nominali  450   550
      Reali     450   550
   }

   //{ LIBRERIA PENTAGRAM
   Larg_LP22 "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali  398 582 766
      Reali     398 582 766
   }

   LarR_LP22 "Larghezza" < OnlyDesc;NoDiz >
   {
      Nominali  368 552 736 920 1104 1472
      Reali     368 552 736 920 1104 1472
   }

   Alt_LP22 "Altezza" < OnlyDesc;NoDiz >
   {
      Nominali  1104 1738 2074
      Reali     1104 1738 2074
   }
   //} LIBRERIA PENTAGRAM

   //Simone 29/03/2023
   Lar_Specchio  "Larghezza"  < OnlyDesc;NoDiz >
   {
      Nominali  700  1000  1484  1800
      Reali     700  1000  1484  1800
   }

   ALt_Specchio  "Altezza"   < OnlyDesc;NoDiz >
   {
      Nominali  700  1000  1484  1800
      Reali     700  1000  1484  1800
   }

   Mod_Specchio  "Modello"  < OnlyDesc;NoDiz >
   {
      Nominali  "PLEASURE"  "ERA"  "KIBI"  "MELTY"  "FUZE"
      Reali         1         2      3        4        5
   }

   Forma_Specchio  "Forma"  < OnlyDesc;NoDiz >
   {
      Nominali  1  2  3  4  5
      Reali     1  2  3  4  5
   }

   Mod_Sedia  "Modello"  < OnlyDesc;NoDiz >
   {
      Nominali  "RUFFLE"  "ZEPPELIN"  "COLOMBINA"  "NACHO"  "HUGGY"  "CHAMA"  "AMIDA"  "AMIDA STRETTA"  "BEAT"
      Reali        1          2            3          4        5        6        7           8             9
   }

   Tipologia_Seduta  "Tipologia"  < OnlyDesc;NoDiz >
   {
      Nominali  "SEDIA"  "POLTRONA"  "POLTRONCINA"  "SGABELLO"  "DIVANO"
      Reali        1         2             3            4           5
   }

   Mod_Lampada  "Modello"  < OnlyDesc;NoDiz >
   {
      Nominali  "CHIC"  "GLEE"
      Reali        1      2
   }
}

//{ TOP-LEVEL
Elemento TavoloGenerico
{
   Descrizione = "Tavolo"
   Code        = LIV
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""
   Alias StpTavoli

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X              "Larghezza"        500 Menu ( LarTavG ) Utente ( )
      Y              "Altezza"          500 Menu ( AltTavG )
      Z              "Profondita'"      500 Menu ( ProTavG ) Utente ( )

      Filler1        " "                 "" ShowAlways

      ModTavolo      "Modello Tavolo"    -1 Menu ( ModTav )
      FormaPiano     "Forma Piano"        0 Menu ( FrPiTav )
      TipoPiano      "Tipologia Piano"    0 Menu ( TpPiTav )

      ModTavoloStr   "" ""
      FormaPianoStr  "" ""
      TipoPianoStr   "" ""

      Verso         "Verso"           -1

      //Simone 24/09/21 - prolunghe tavolo Loto
      ConProlunghe  "Con Prolunghe"    0 Boolean
      VAR_chiuso    "Chiudi Tavolo"    0 Boolean

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

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

      M4_A_MURO   ""  -1

      M4_MIS      ""  "X;Y;Z;ModTavolo;FormaPiano;TipoPiano;Filler*;VAR_chiuso"

      FillerM2G   " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB ConfiguraTavolo

      if( $ATTIVA_DLL==1 & ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"ModTavolo",1)
         HIDE_ON_EDIT2(ATTUALE(),"FormaPiano",1)
         HIDE_ON_EDIT2(ATTUALE(),"TipoPiano",1)

         VAR_SET_MODE(ATTUALE(),"Y",$MODE_SHOWALWAYS)

         HIDE_ON_EDIT2(ATTUALE(),"Z",SE_NUM(FormaPiano==2,1,0))

         HIDE_ON_EDIT2(ATTUALE(),"ConProlunghe",1)

         HIDE_ON_EDIT2(ATTUALE(),"VAR_chiuso",1)
         if( ModTavolo==7) { HIDE_ON_EDIT2(ATTUALE(),"VAR_chiuso",0) }
      }

      if( FormaPiano==2 )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Z")==1 ) { DEL_VAR_MODIFICATE(ATTUALE(),"Z") }
         Z = X
      }
   }

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

   Controlli
   {
      GOSUB CtrlComune
      GOSUB GetRegola_Componenti_Elements

      //tavolo P&J
      if( ModTavolo==2 )
      {
         Verso = -1
         wk_gest_C024 = VAR_VAL_STR(ATTUALE(),"GEST_C024")
         if( STR_INDEX_OF(wk_gest_C024,0,"SP001")>=0 ) { Verso = 1 }
      }
   }

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

      if( TABER_REGOLA == "POST")
      {
         FIN_idx_gest = ATTUALE()
         finitura    = VAR_VAL_STR(FIN_idx_gest,STRCAT("GEST_",FIN_var_piano))
         finitura_ns = STRDADB(FIN_idx_gest,"DAMMI_NONSIGNIF",STRCAT("GEST_",FIN_var_piano, ";", finitura))

         if( IS_MATCH(finitura_ns,"V*") == 1
           | IS_MATCH(finitura_ns,"X*") == 1 )
         {
            TavoloVetro = 1
            if( ModTavoloStr == "HOA" ) { TipoPiano = 0 }
         }

         if( IS_MATCH(finitura_ns,"W*") == 1 )
         {
            TavoloVetro = 0
            TipoPiano = 2
         }
      }
   }

   Procedura OnPcfStore
   {
      GOSUB OnPcfStore_Componenti_Elements
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Posiziona PianoTavolo_Generico pia
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + GambaY
      @Y = Piano_Spe

      //Simone 13/09/21 - U-TABLE in legno ha la staffa incassata nello spessore
      //if( ModTavoloStr == "U" & TipoPianoStr == "WILDWOOD" ) { @base_0.y = base_0.y + GambaY - 10 }
      if( ModTavoloStr == "U")
      {
        if( TipoPianoStr == "WILDWOOD" | TipoPianoStr == "HAYWOOD/AGEWOOD" )  { @base_0.y = base_0.y + GambaY - 10 }

        if( FormaPianoStr == "ELLITTICO" )
        {
           if( TipoPianoStr == "VETRO"
             | TipoPianoStr == "XGLASS"   )  { @base_0.y = base_0.y + GambaY + 5 }
           if( TipoPianoStr == "WILDWOOD" )  { @base_0.y = base_0.y + GambaY + 8 }
        }
      }

      if( TipoPianoStr != "WILDWOOD" & (ModTavoloStr == "MEET" | ModTavoloStr == "WADI"))
      {
        @base_0.y = base_0.y + GambaY + 0.4
        if( FormaPianoStr == "ELLITTICO" ) { @base_0.y = base_0.y + GambaY + 5 }
      }

      if( ModTavoloStr == "BOLD" )
      {
         @base_0.y = base_0.y + GambaY - 14
         if( TipoPianoStr == "XGLASS"
           | TipoPianoStr == "VETRO" ) { @base_0.y = base_0.y + GambaY - 5 }
      }

      if( ModTavoloStr == "HOA"
        & GraficaPiano == 3 )
      {
         @base_0.y = base_0.y + GambaY + 5
         if( TipoPianoStr == "WILDWOOD" )
         {
            if( X >= 2500 ) { @X = X - 20 }
            @base_0.y = base_0.y + GambaY + 10
         }
      }

      //Simone 16/01/2023 - Sposto leggermente per evitare sfarfallio
      if( ModTavoloStr == "LOTO" ) { @base_0.y = base_0.y + GambaY + 0.1 }

      if( IS_MATCH(ModTavoloStr, "CORRER*") )
      {
         if( TipoPianoStr != "FINEWOOD" )
         {
            @X = X - 31.5
            @Z = Z - 31.5
         }
         @base_0.x = base_0.x + X/2 - @X/2
         @base_0.y = base_0.y + Y - Piano_Spe
         @base_0.z = base_0.z + Z/2 - @Z/2
      }

      @GraficaPiano = GraficaPiano
      @FileSAT  = ""
      @FileSAT2 = ""
      @FileSAT3 = ""
      if( Piano_sat1!="" ) { @FileSAT  = STRCAT(path_sat_tavoli,Piano_sat1) }
      if( Piano_sat2!="" ) { @FileSAT2 = STRCAT(path_sat_tavoli,Piano_sat2) }
      if( Piano_sat3!="" ) { @FileSAT3 = STRCAT(path_sat_tavoli,Piano_sat3) }

      @FileM4S = ""
      if( Piano_m4s1!="" ) { @FileM4S = STRCAT(path_m4s_tavoli,Piano_m4s1,"|model|model.hsf") }

      @FIN_var = FIN_var_piano
   }

   Posiziona GambaTavolo_Generico gam1
   {
      @escluso = 1
      if( Gamba1>0 ) { @escluso = 0  }

      @TipoGamba = Gamba1
      @FileSAT   = STRCAT(path_sat_tavoli,Gamba1_sat)
      @FileSAT2  = STRCAT(path_sat_tavoli,Gamba1_sat2)

      @base_0.x = base_0.x + Gamba1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Gamba1_PosZ

      @X = Gamba1_X
      @Y = Y -  Piano_Spe
      @Z = Gamba1_Z

      @FIN_var = FIN_var_gambe

      idx_gamba_1 = ATTUALE()
   }

   Posiziona GambaTavolo_Generico gam2
   {
      @escluso = 1
      if( Gamba2>0 ) { @escluso = 0  }

      @TipoGamba = Gamba2
      @FileSAT   = STRCAT(path_sat_tavoli,Gamba2_sat)

      @base_0.x = base_0.x + Gamba2_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Gamba2_PosZ

      @X = Gamba2_X
      @Y = Y -  Piano_Spe

      //Simone 13/09/21
      if( ModTavoloStr == "BOLD" )  { @Y = GambaY }
      @Z = Gamba2_Z

      @FIN_var = FIN_var_gambe

      @PosGamba = 2
      idx_gamba_2 = ATTUALE()
   }

   Posiziona GambaTavolo_Generico gam3
   {
      @escluso = 1
      if( Gamba3>0 ) { @escluso = 0  }

      @TipoGamba = Gamba3
      @FileSAT   = STRCAT(path_sat_tavoli,Gamba3_sat)

      @base_0.x = base_0.x + Gamba3_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Gamba3_PosZ

      @X = Gamba3_X
      @Y = Y -  Piano_Spe
      @Z = Gamba3_Z

      @FIN_var = FIN_var_gambe

      @PosGamba = 3
      idx_gamba_3 = ATTUALE()
   }

   Posiziona GambaTavolo_Generico gam4
   {
      @escluso = 1
      if( Gamba4>0 ) { @escluso = 0  }

      @TipoGamba = Gamba4
      @FileSAT   = STRCAT(path_sat_tavoli,Gamba4_sat)

      @base_0.x = base_0.x + Gamba4_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Gamba4_PosZ

      @X = Gamba4_X
      @Y = Y -  Piano_Spe
      @Z = Gamba4_Z

      @FIN_var = FIN_var_gambe

      @PosGamba = 4
      idx_gamba_4 = ATTUALE()
   }

   // Gruppo gambe tavolo Correr fw
   Posiziona RigaOrdine_NonGraficato grCor
   {
      @escluso = 1
      if( ModTavoloStr == "CORRER"
        & TipoPianoStr == "FINEWOOD" ) { @escluso = 0 }

      @VAR_Sost_Check_Idx_Custom = FMT("{};{};{};{}",STR(idx_gamba_1),STR(idx_gamba_2),STR(idx_gamba_3),STR(idx_gamba_4))
      @VAR_Sost_Check_Msg = "Non è possibile selezionare il gruppo gambe assieme a una o più gambe singole. Modificare la selezione."

      @GEST_CODICE = "TG2041"
      @DIM_GEST = 1
   }

   Posiziona __import__ satg
   {
      @escluso = 1
      if( ModTavoloStr == "BOLD" ) { @escluso = 0 }

      @base_0 = base_0
      @base_0.x = base_0.x + Gamba1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Gamba1_PosZ

      @import = STRCAT(path_sat_tavoli,file_import_gen)
      @c_rivestimento = $c_nero
   }

   Posiziona SostegnoVetroTavolo vtr1
   {
      @escluso = 1
      if( GambaVtr1>0 ) { @escluso = 0  }

      @base_0.x = base_0.x + GambaVtr1_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + GambaVtr1_PosZ
      @Y = Y -  Piano_Spe
      @Z = GambaVtr1_Z
   }

   Posiziona SostegnoVetroTavolo vtr2
   {
      @escluso = 1
      if( GambaVtr2>0 ) { @escluso = 0  }

      @base_0.x = base_0.x + GambaVtr2_PosX
      @base_0.y = base_0.y
      @base_0.z = base_0.z + GambaVtr2_PosZ
      @Y = Y -  Piano_Spe
      @Z = GambaVtr2_Z
   }

   Posiziona Prolunga_Tavolo_Loto Pro1
   {
      @escluso = 1 - ConProlunghe

      @base_0.x = base_0.x + X/2 - X_prolunga/2
      @base_0.y = base_0.y + GambaY
      @base_0.z = base_0.z + Z

      if( VAR_chiuso == 1 )
      {
         @base_0.y = base_0.y + GambaY - Piano_Spe
         @base_0.z = base_0.z
      }

      @X = X_prolunga
      @FIN_var = FIN_var_prolunghe

      //Simone 15/02/2023
      @VT_NFC = 1
   }

   Posiziona Prolunga_Tavolo_Loto Pro2
   {
      @escluso = 1 - ConProlunghe

      @base_0.x = base_0.x + X
      @base_0.y = base_0.y + GambaY
      @base_0.z = base_0.z + Z/2 + X_prolunga/2

      if( VAR_chiuso == 1 )
      {
         @base_0.x = base_0.x
         @base_0.y = base_0.y + GambaY - Piano_Spe
      }

      @ang_y = 90

      @X = X_prolunga
      @FIN_var = FIN_var_prolunghe
      @FIN_orie = "V"
   }

   Posiziona Prolunga_Tavolo_Loto Pro3
   {
      @escluso = 1 - ConProlunghe

      @base_0.x = base_0.x + X/2 + X_prolunga/2
      @base_0.y = base_0.y + GambaY
      @base_0.z = base_0.z

      if( VAR_chiuso == 1 )
      {
         @base_0.y = base_0.y + GambaY - Piano_Spe
         @base_0.z = base_0.z + Z
      }

      @ang_y = 180

      @X = X_prolunga
      @FIN_var = FIN_var_prolunghe
   }

   Posiziona Prolunga_Tavolo_Loto Pro4
   {
      @escluso = 1 - ConProlunghe

      @base_0.x = base_0.x
      @base_0.y = base_0.y + GambaY
      @base_0.z = base_0.z + Z/2 - X_prolunga/2

      if( VAR_chiuso == 1 )
      {
         @base_0.x = base_0.x + X
         @base_0.y = base_0.y + GambaY - Piano_Spe
      }

      @ang_y = -90

      @X = X_prolunga
      @FIN_var = FIN_var_prolunghe
      @FIN_orie = "V"
   }

   Posiziona Telaio_TavCorrer tel
   {
      @escluso = 1
      if( TipoPianoStr != "FINEWOOD"
        & IS_MATCH(ModTavoloStr,"CORRER*") == 1 ) { @escluso = 0 }

      @X = X - 47.2
      @Y = 60
      @Z = Z - 47.2
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Y - @Y - Piano_Spe - 1.5
      @base_0.z = base_0.z + Z/2 - @Z/2
   }
}
//} TOP-LEVEL

//{ COMPONENTI
Elemento PianoTavolo_Generico
{
   Descrizione = "Piano Tavolo Generico"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      //0 - rettangolo
      //1 - botte
      //2 - tondo
      //3 - SAT
      //4 - Loto
      //5 - M4S
      GraficaPiano   ""  0

      TipoPiano      ""  0 Implicit
      ModTavolo      "" -1 Implicit
      FormaPiano     ""  0 Implicit

      TipoPianoStr   "" "" Implicit
      ModTavoloStr   "" "" Implicit
      FormaPianoStr  "" "" Implicit

      Piano_Spe      "" 10 Implicit

      ConProlunghe   ""  0 Implicit

      TavoloVetro    ""  0 Implicit

      Y_Vtr_Sup      "" 10

      trasparenza    "" "0.8"

      perRADICE      "" ""
      RADICE         "" ""

      COD_EREDITA    "" "PRE;POST"

      FileSAT        "" ""
      FileSAT2       "" ""
      FileSAT3       "" ""
      FileM4S        "" ""

      FIN_var        "" "C044"

      FIN_var_piano  ""  ""
      FIN_var_fondo  ""  ""

      FIN_orie       ""  "O"

      XGLASS         "Num. XGLASS" "" Utente ( )

      VT_NFC         ""   0
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_8

      //Simone 11/06/21 - Suddivido il piano sp18 dei tavoli in vetro laccato/xglass in due vetri, come da specifiche
      diffX_vtr = 30
      X_Vtr_Inf = 479
      Y_Vtr_Inf = 4
      if( TipoPiano == 9 )
      {
         diffX_vtr = 80
         Y_Vtr_Sup = 20
      }

      if( TipoPiano == 0 | TipoPiano == 1 | TipoPiano == 9 )
      {
         X_Vtr_Inf = X - 2*diffX_vtr
         Y_Vtr_Inf = Y - Y_Vtr_Sup
         Z_Vtr_Inf = Z - 2*diffX_vtr
      }

      if( TipoPiano == 7 )
      {
         Y_Vtr_Sup = 9

         X_Vtr_Inf = X
         Y_Vtr_Inf = Y - Y_Vtr_Sup
         Z_Vtr_Inf = Z
      }

      if( TipoPiano == 8 )
      {
         Y_Vtr_Sup = 6

         X_Vtr_Inf = X
         Y_Vtr_Inf = Y - Y_Vtr_Sup
         Z_Vtr_Inf = Z
      }

      FIN_var_piano = "C044"
      FIN_var_fondo = ""
      if( VAR_EXIST(ATTUALE(),"GEST_C015") ) { FIN_var_fondo = "C015" }
      if( TipoPianoStr == "FINEWOOD" )       { FIN_var_piano = "C028" FIN_var_fondo = FIN_var_piano }

      //centro janeiro trasparente
      if( ModTavolo==3
        & TipoPiano==4
        | TipoPiano==5 ) { FIN_var_fondo = "C045" }

      //Simone 15/02/2023
      VT_NFC = 0
      if( ModTavoloStr == "LOTO" ) { VT_NFC = 1 }
   }

   PuntiNotevoli
   {
      GOSUB punti

      //vano per passacavi
      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Y - Piano_Spe
      vano_l_0 = X
      vano_p_0 = Z

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      RADICE = ""

      //PT + TIPO TAVOLO (UT, J, X, PJ) + FORMA(R, B, C) + MATERIALE(VL, VF, VT, XG, WW, HA)
      RADICE_prec = RADICE
      perRADICE = "PT"
      rad_par1 = ""
      if( ModTavolo==0 )  { rad_par1 = "UT" }
      if( ModTavolo==1 )  { rad_par1 = "X"  }
      if( ModTavolo==2 )  { rad_par1 = "PJ" FIN_var_piano = "C028" }
      if( ModTavolo==3 )  { rad_par1 = "J" }
      if( ModTavolo==8 )  { rad_par1 = "H" }
      if( ModTavolo==9
        | ModTavolo==10 ) { rad_par1 = "AL" }
      if( ModTavolo==11
        | ModTavolo==12 ) { rad_par1 = "C" }

      rad_par2 = ""
      if( FormaPiano==0 )
      {
         rad_par2 = "R"
         if( ModTavolo==3 ) { rad_par2 = "RE" }
      }
      if( FormaPiano==1 )
      {
         rad_par2 = "B"
         if( ModTavolo==3 ) { rad_par2 = "BO" }
      }
      if( FormaPiano==2 )
      {
         rad_par2 = "C"
         if( ModTavolo==3 ) { rad_par2 = "CI" }
      }

      //Simone 13/09/21 - Piano Ellittico
      if( FormaPiano==3 )
      {
         rad_par2 = "E"
      }

      //Organico
      if( FormaPiano==4 )
      {
         rad_par2 = "OR"
      }

      rad_par3 = ""
      if( TipoPiano==0 ) { rad_par3 = "VL" }
      if( TipoPiano==1 ) { rad_par3 = "XG"  }
      if( TipoPiano==2 ) { rad_par3 = "WW"  }
      if( TipoPiano==3 ) { rad_par3 = "HA"  }
      if( TipoPiano==4 ) { rad_par3 = "VT"  }
      if( TipoPiano==5 ) { rad_par3 = "VF"  }
      if( TipoPiano==7 ) { rad_par3 = "FI"  }
      if( TipoPiano==8 ) { rad_par3 = "MD"  }
      if( TipoPiano==9 ) { rad_par3 = "MA"  }

      if( ModTavoloStr == "BOLD" )
      {
         FIN_orie = "V"

         rad_par1 = "B"
         rad_par2 = "HAYAGE"
         if( TipoPianoStr == "VETRO" )  { rad_par2 = "VT" }
         if( TipoPianoStr == "XGLASS" ) { rad_par2 = "XG" }
         rad_par3 = ""
      }

      if( ModTavoloStr == "MEET" )
      {
         FIN_orie = "O"

         perRADICE = ""
         rad_par1 = "PM"
         rad_par2 = ""
         if( FormaPiano==0 )  { rad_par2 = "R" }
         if( FormaPiano==1 )  { rad_par2 = "B" }
         if( FormaPiano==3 )  { rad_par2 = "E" }
         rad_par3 = ""
      }

      if( ModTavoloStr == "WADI" )
      {
         FIN_orie = "O"

         perRADICE = ""
         rad_par1 = "PW"
         rad_par2 = ""
         if( FormaPiano==0 )  { rad_par2 = "R" }
         if( FormaPiano==1 )  { rad_par2 = "B" }
         if( FormaPiano==3 )  { rad_par2 = "E" }
         rad_par3 = ""
      }

      if( ModTavoloStr == "LOTO" )
      {
         FIN_orie = "O"

         perRADICE = "PTL"
         rad_par1 = ""
         rad_par2 = ""
         rad_par3 = ""
      }

      //varianti di finitura del piano sono tutte sotto lo stesso codice top level
      if( ModTavoloStr == "HOA"
        | IS_MATCH(ModTavoloStr,"ALBERONI*")
        | IS_MATCH(ModTavoloStr,"CORRER*") )
      {
         if( TavoloVetro == 1 ) { rad_par3 = "VTXG" }
      }

      if( ModTavoloStr == "CORRER"
        & TipoPianoStr == "FINEWOOD" )
      {
         FIN_idx_gest = PADRE(ATTUALE(),1)

         rad_par3  = "FW"
      }

      perRADICE = STRCAT(perRADICE,rad_par1,rad_par2,rad_par3)
      RADICE = perRADICE
      if( RADICE_prec != RADICE ) { flag_CAMBIA_VAR = 1 }

      //Simone 10/09/21 - Lo spessore del piano comprende le borchie per il fisssaggio
      if( ModTavoloStr == "MEET" | ModTavoloStr == "WADI"  )
      {
         if( TipoPianoStr == "XGLASS"
           | TipoPianoStr == "VETRO" )     { GEST_Y = 30 }
         if( TipoPianoStr == "TRASPARENTE"
           | TipoPianoStr == "FUME" )      { GEST_Y = 24 }
      }

      if( ModTavoloStr == "HOA" )
      {
         //Wildwood
         GEST_Y = 62
         if( TavoloVetro == 1 ) { GEST_Y = 52 }
      }

      //LZ 11/06/2021: blocco modifica finitura dal figlio
      wk_gest_fin = STRCAT( "GEST_", FIN_var_piano)

      if( VAR_EXIST(ATTUALE(), wk_gest_fin) )
      {
         if( IS_VAR_FIXED(ATTUALE(), wk_gest_fin) ) { DEL_VAR_MODIFICATE(ATTUALE(), wk_gest_fin) }
      }

      //Simone 24/09/21
      GOSUB Set_Gest_C106_Tavolo_Loto

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend ret
   {
      @BLEND__ = 1

      @escluso = 1
      if( GraficaPiano==0 ) { @escluso = 0 }

      if( TavoloVetro == 1 )
      {
         if( $VIRTUO | $VIRTUO_TEST | $OnTREND )
         {
            if( TipoPianoStr != "FUME"
              & TipoPianoStr != "TRASPARENTE" ) { @escluso = 1 }
         }
      }

      //Correr - uso blocco smussato raggiato
      if( ModTavolo == 11
        | ModTavolo == 12 )                     { @escluso = 1 }

      GOSUB posa_blocco
      //Simone 11/06/21
      if( TipoPiano==0 | TipoPiano==1 )
      {
         @Y = Y_Vtr_Sup
         @base_0.y = base_0.y + Y_Vtr_Inf
      }

      FIN_var = FIN_var_piano
      GOSUB rivestimento
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
   }

   //Simone 11/06/21 - Secondo vetro tavoli rettangolari
   Posiziona BloccoBlend rett
   {
      @BLEND__ = 1

      @escluso = 1
      //if( GraficaPiano==0 & ( TipoPiano==0 | TipoPiano==1 ) ) { @escluso = 0 }
      if( GraficaPiano==0  )
      {
         if( TipoPiano==0 | TipoPiano==1  )          { @escluso = 0 }

         if( TavoloVetro == 1 )
         {
            if( $VIRTUO | $VIRTUO_TEST | $OnTREND )  { @escluso = 1 }
         }

         //strato vetro su piano mdi
         if( ModTavolo == 11
           | ModTavolo == 12 )
         {
            @escluso = 1
            @BLEND_FACES__ = 4

            if( TipoPiano == 8 )
            {
               @escluso = 0
               @BLEND__ = 10
            }
         }
      }

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

      @X = X_Vtr_Inf
      @Y = Y_Vtr_Inf
      if( TipoPiano == 1 ) { @Y = Y_Vtr_Inf - 0.1 }
      @Z = Z_Vtr_Inf

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "")
      {
         SetRgb_Val( @c_rivestimento, idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)

         if( TipoPiano == 8 )
         {
            @c_rivestimento = $c_vetro
            @f_rivestimento = "0.8"
         }
      }
   }

   //retrolaccatura xglass
   Posiziona Blocco rettr
   {
      @escluso = 1
      if( GraficaPiano == 0 & TipoPiano == 1 ) { @escluso = 0 }
      if( ModTavolo == 11
        | ModTavolo == 12 )                    { @escluso = 1 }

      GOSUB posa_blocco

      @X = X - 2
      @Y = 0.1
      @Z = Z - 2

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento, idx_att, GetLaccatoCorrispondente(VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona VR_Vetro VV
   {
      @escluso = 1
      if( $VIRTUO | $VIRTUO_TEST | $OnTREND  )
      {
         if( GraficaPiano==0  & TavoloVetro ) { @escluso = 0 }
      }

      if( TipoPianoStr == "FUME"
        | TipoPianoStr == "TRASPARENTE" )     { @escluso = 1 }

      GOSUB posa_blocco

      @OrieVetro = "TOP"

      FIN_var = FIN_var_piano
      @FIN_var = FIN_var
      GOSUB rivestimento
   }

   Posiziona _graf_piano_botte bot
   {
      @escluso = 1
      if( GraficaPiano==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      //Simone 11/06/21
      if( TipoPiano==0 | TipoPiano==1 )
      {
         @Y = Y_Vtr_Sup
         @base_0.y = base_0.y + Y_Vtr_Inf
      }

      FIN_var = FIN_var_piano
      GOSUB rivestimento
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
   }

   //Simone 11/06/21 - Secondo vetro tavoli botte
   Posiziona _graf_piano_botte sot
   {
      @escluso = 1
      if( GraficaPiano==1 & ( TipoPiano==0 | TipoPiano==1 )) { @escluso = 0 }

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

      @X = X_Vtr_Inf
      @Y = Y_Vtr_Inf
      if( TipoPiano == 1 ) { @Y = Y_Vtr_Inf - 0.1 }
      @Z = Z_Vtr_Inf

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento, idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   //retrolaccatura xglass
   Posiziona _graf_piano_botte sotrt
   {
      @escluso = 1
      if( GraficaPiano==1 & TipoPiano==1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = 0.1
      @base_0.y = base_0.y + Y_Vtr_Inf - @Y

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento, idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   //Tavolo Correr ha un piano con una smussatura dedicata
   Posiziona BloccoSmussatoY blosmu
   {
      @escluso = 1
      if( GraficaPiano == 0
        & IS_MATCH(ModTavoloStr,"CORRER*") == 1 ) { @escluso = 0 }

      @R0 = 20
      if( TipoPiano == 7 ) { @R0 = 30 }
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      GOSUB posa_blocco
      if( TipoPiano == 7 | TipoPiano == 8 )
      {
         @Y = Y_Vtr_Sup
         @base_0.y = base_0.y + Y_Vtr_Inf
      }

      if( TipoPiano == 1 ) { @FIN_orie = "V" }
      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   //retrolaccatura xglass
   Posiziona BloccoSmussatoY blsmurt
   {
      @escluso = 1
      if( IS_MATCH(ModTavoloStr,"CORRER*") == 1 )
      {
         if( GraficaPiano == 0
           &
           ( TipoPiano == 1
           | TipoPiano == 7 ) ) { @escluso = 0 }
      }

      @X = X - 2
      @Y = 0.1
      @Z = Z - 2

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

      //riempimento correr finewood
      if( TipoPiano == 7 )
      {
         @X = X - 2*Y_Vtr_Inf
         @Y = Y_Vtr_Inf
         @Z = Z - 2*Y_Vtr_Inf

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
   }

   Posiziona _graf_piano_tav_FW piafw
   {
      @escluso = 1
      if( TipoPiano == 7
        & IS_MATCH(ModTavoloStr,"CORRER*") == 1 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = Y_Vtr_Inf

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   Posiziona CilindroY cil
   {
      @escluso = 1
      if( TipoPiano != 8
        & TipoPiano != 9
        & GraficaPiano == 2 ) { @escluso = 0 }

      GOSUB posa_blocco

      //Simone 11/06/21
      if( TipoPiano==0 | TipoPiano==1 )
      {
         @Y = Y_Vtr_Sup
         @base_0.y = base_0.y + Y_Vtr_Inf
      }

      FIN_var = FIN_var_piano
      GOSUB rivestimento
      if( TipoPiano == 4 | TipoPiano == 5 ) { @f_rivestimento = trasparenza }
   }

   //Simone 11/06/21
   //Posiziono un disco che simula la laccatura centrale sui tavoli Janeiro in vetro trasparente/fume
   //Sui tavoli tondi in vetro laccato/xglass posiziono invece il secondo vetro
   Posiziona CilindroY cop
   {
      @escluso = 1
      //Tavoli tondi
      if( FormaPiano==2
        & ( TipoPiano==0 | TipoPiano==1 | TipoPiano==4 | TipoPiano==5 | TipoPiano==9 )) { @escluso = 0 }

      //Tavolo Janeiro botte/rett trasparente/fume
      if( ModTavolo==3
      & ( FormaPiano==1 | FormaPiano==0 )
      & ( TipoPiano==4 | TipoPiano==5 ) ) { @escluso = 0 }

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

      @X = X_Vtr_Inf
      @Y = Y_Vtr_Inf
      if( TipoPiano == 1 ) { @Y = Y_Vtr_Inf - 0.1 }
      @Z = @X

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento, idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)

         if( TipoPiano == 9 ) { @c_rivestimento = $c_grafite }
      }
   }

   //Simone 25/01/2024
   Posiziona M4S topcil
   {
      @escluso = 1
      if( FormaPiano==2 & GraficaPiano==5 & FileM4S!="" ) { @escluso = 0 }

      @import = FileM4S
      GOSUB posa_blocco

      if( TipoPiano==0 | TipoPiano==1 | TipoPiano==8 )
      {
         @Y = Y_Vtr_Sup
         @base_0.y = base_0.y + Y_Vtr_Inf
      }

      FIN_var = FIN_var_piano
      GOSUB rivestimento
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
      @HIDE = 1
   }

   //retrolaccatura xglass
   Posiziona M4S toprt
   {
      @escluso = 1
      if( FormaPiano==2 & TipoPiano==1 & GraficaPiano==5 ) { @escluso = 0 }

      @import = FileM4S
      GOSUB posa_blocco

      @X = X - 5
      @Y = 0.1
      @Z = @X

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

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

      FIN_var = FIN_var_fondo
      GOSUB rivestimento

      if( FIN_var_fondo == "" )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
      }
      @HIDE = 1
   }

   Posiziona _graf_piano_loto lot
   {
      @escluso = 1
      if( GraficaPiano==4 ) { @escluso = 0 }

      GOSUB posa_blocco

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   // piano tondo marmo e 'fondo' per piano tondo mdi
   Posiziona _graf_piano_smussato_tav mar
   {
      @escluso = 1
      if( GraficaPiano == 2 )
      {
         if( TipoPiano == 8
           | TipoPiano == 9 ) { @escluso = 0 }
      }

      GOSUB posa_blocco
      @Y = Y_Vtr_Sup
      @base_0.y = base_0.y + Y_Vtr_Inf
      @base_0.z = base_0.z + Z/2

      FIN_var = FIN_var_piano
      GOSUB rivestimento

      if( TipoPiano == 8 )
      {
         @Y = Y_Vtr_Inf
         @base_0.y = base_0.y

         @c_rivestimento = $c_vetro
         @f_rivestimento = "0.8"
      }
   }

   Posiziona _graf_piano_smussato_tav mdi
   {
      @escluso = 1
      if( GraficaPiano == 2 & TipoPiano == 8 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = Y_Vtr_Sup
      @base_0.y = base_0.y + Y_Vtr_Inf
      @base_0.z = base_0.z + Z/2

      @smussato = 0

      FIN_var = FIN_var_piano
      GOSUB rivestimento
   }

   Posiziona __import__ sat1
   {
      @escluso = 1
      if( GraficaPiano==3 & FileSAT!="" ) { @escluso = 0 }
      @base_0 = base_0
      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      //Simone 13/09/21
      //if( ModTavoloStr == "U" & TipoPianoStr == "WILDWOOD" & FormaPianoStr == "ELLITTICO") { @base_0.y = base_0.y + 10 }

      if( ModTavoloStr == "MEET" | ModTavoloStr == "WADI" | ModTavoloStr == "U" | ModTavoloStr == "HOA")
      {
         if( TipoPianoStr == "VETRO" | TipoPianoStr == "XGLASS" )
         {
           @base_0.y = base_0.y + 8
           FIN_var = FIN_var_piano
           //@c_rivestimento = [224,245,244]
           //@f_rivestimento = trasparenza
         }
      }

      if( ModTavoloStr == "BOLD" )
      {
         @base_0.x = base_0.x
         @base_0.z = base_0.z
      }

      GOSUB rivestimento
      @import = FileSAT
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
   }

   Posiziona __import__ sat2
   {
      @escluso = 1
      if( GraficaPiano==3 & FileSAT2!="" ) { @escluso = 0 }
      @base_0 = base_0
      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      if( ModTavoloStr == "BOLD" )
      {
         @base_0.x = base_0.x
         @base_0.z = base_0.z
      }

      FIN_var = FIN_var_piano
      GOSUB rivestimento

      //Simone 13/09/21
      if( ModTavoloStr == "MEET" | ModTavoloStr == "WADI" | ModTavoloStr == "U" | ModTavoloStr == "HOA")
      {
         if( TipoPianoStr == "VETRO" | TipoPianoStr == "XGLASS" ) { @base_0.y = base_0.y + 8

            FIN_var = FIN_var_fondo
            GOSUB rivestimento

            if( FIN_var_fondo == "" )
      {
               SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
            }
         }
      }

      @import = FileSAT2
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
   }

   Posiziona __import__ sat3
   {
      @escluso = 1
      if( GraficaPiano==3 & FileSAT3!="" ) { @escluso = 0 }
      @base_0 = base_0
      @base_0.x = base_0.x + X/2
      @base_0.z = base_0.z + Z/2

      //GOSUB rivestimento

      //Simone 13/09/21
      if( ModTavoloStr == "MEET" | ModTavoloStr == "WADI" | ModTavoloStr == "U" | ModTavoloStr == "HOA" )
      {
         @base_0.y = base_0.y - 1
         FIN_var = FIN_var_fondo
         GOSUB rivestimento

         if( FIN_var_fondo == "" )
         {
            SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var_piano))), 0)
         }
      }
      else
      {
         GOSUB rivestimento
      }

      if( ModTavoloStr == "BOLD" )
      {
         @base_0.x = base_0.x
         @base_0.z = base_0.z
      }

      @import = FileSAT3
      if( TipoPiano==4 | TipoPiano==5 ) { @f_rivestimento = trasparenza }
   }

   //Simone 15/02/2023
   Posiziona TAG_NFC nfc_fr
   {
      @escluso = 1 - VT_NFC

      //attualmente solo tavolo loto
      @base_0.x = base_0.x + X - @X - 20
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z
   }

   Posiziona Gruppo_ContCollisioni_Tav_Correr CC
   {
      @escluso = 1
      if( ModTavoloStr == "CORRER" )  { @escluso = 0 }

      GOSUB posa_blocco
   }
}

Elemento Gruppo_ContCollisioni_Tav_Correr
{
   Descrizione = "Cont Coll"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      Piano_Spe     ""               10  Implicit
      TipoPianoStr  ""               ""  Implicit

      HIDE          ""                1
   }

   Assegnazioni
   {
      GOSUB AssComune

      limite_L   = 45
      limite_Z   = limite_L
      limite_int = 24
      limite_ang = 171.5

      if( TipoPianoStr == "FINEWOOD" )
      {
         limite_L   = 190
         limite_Z   = 70
         limite_ang = 0
         if( X <= 2000 )
         {
            limite_L = 70
            limite_ang = 190
         }
      }

      aumento_y = 2
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona PCV_ContCollisioni_368 cs1
   {
      @base_0.x = base_0.x + SE_NUM(limite_ang > limite_Z, limite_ang, limite_Z)
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z
      @X = X - 2*SE_NUM(limite_ang > limite_Z, limite_ang, limite_Z)
      @Y = Piano_Spe*aumento_y
      @Z = limite_L
   }

   Posiziona PCV_ContCollisioni_368 cs2
   {
      @base_0.x = base_0.x + SE_NUM(limite_ang > limite_Z, limite_ang, limite_Z)
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + Z - limite_L
      @X = X - 2*SE_NUM(limite_ang > limite_Z, limite_ang, limite_Z)
      @Y = Piano_Spe*aumento_y
      @Z = limite_L
   }

   Posiziona PCV_ContCollisioni_368 cs3
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + limite_ang
      @X = limite_Z
      @Y = Piano_Spe*aumento_y
      @Z = Z - 2*limite_ang
   }

   Posiziona PCV_ContCollisioni_368 cs4
   {
      @base_0.x = base_0.x + X - limite_Z
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + limite_ang
      @X = limite_Z
      @Y = Piano_Spe*aumento_y
      @Z = Z - 2*limite_ang
   }

   Posiziona PCV_ContCollisioni_368 sxrt
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" & X > 2000  ) { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z
      @X = limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_ang
   }

   Posiziona PCV_ContCollisioni_368 sxfr
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" & X > 2000  ) { @escluso = 1 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + Z - limite_ang
      @X = limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_ang
   }

   Posiziona PCV_ContCollisioni_368 dxrt
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" & X > 2000  ) { @escluso = 1 }

      @base_0.x = base_0.x + X - limite_ang
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z
      @X = limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_ang
   }

   Posiziona PCV_ContCollisioni_368 dxfr
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" & X > 2000  ) { @escluso = 1 }

      @base_0.x = base_0.x + X - limite_ang
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + Z - limite_ang
      @X = limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_ang
   }

   Posiziona PCV_ContCollisioni_368 int1
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" ) { @escluso = 1 }

      @base_0.x = base_0.x + limite_ang
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + limite_ang - limite_int
      @X = X - 2*limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_int
   }

   Posiziona PCV_ContCollisioni_368 int2
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" ) { @escluso = 1 }

      @base_0.x = base_0.x + limite_ang
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + Z - limite_ang + limite_int
      @X = X - 2*limite_ang
      @Y = Piano_Spe*aumento_y
      @Z = limite_int
   }

   Posiziona PCV_ContCollisioni_368 int3
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" ) { @escluso = 1 }

      @base_0.x = base_0.x + limite_ang - limite_int
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + limite_ang
      @X = limite_int
      @Y = Piano_Spe*aumento_y
      @Z = Z - 2*limite_ang
   }

   Posiziona PCV_ContCollisioni_368 int4
   {
      @escluso = 0
      if( TipoPianoStr == "FINEWOOD" ) { @escluso = 1 }

      @base_0.x = base_0.x + X - limite_ang
      @base_0.y = base_0.y + Y - Piano_Spe/2 - @Y/2
      @base_0.z = base_0.z + limite_ang
      @X = limite_int
      @Y = Piano_Spe*aumento_y
      @Z = Z - 2*limite_ang
   }
}

Elemento _graf_piano_botte
{
   Descrizione = "Piano botte "
   Code        = CUB
   Gruppo      = ""
   Tipo        = ""
   Forma       = YSweep
   Alias Scassabile

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

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

   //PuntiNotevoli
   //{
   //   R1 = 120
   //   k = R1*SENO(45)
   //
   //   base_0  = [0,0,R1]   alto_0 = [0, Y, R1]
   //
   //   base_1  = [0,0,Z-R1]
   //   arc_1   = [R1-k,0,Z-R1+k]
   //   base_2  = [R1,0,Z]
   //
   //   base_3  = [X-R1,0,Z]
   //   arc_3   = [X-R1+k,0,Z-R1+k]
   //   base_4  = [X,0,Z-R1]
   //   base_5  = [X,0,R1]
   //   arc_5   = [X-R1+k,0,R1-k]
   //   base_6  = [X-R1,0,0]
   //   base_7  = [R1,0,0]
   //   arc_7   = [R1-k,0,R1-k]
   //
   //   base_so = base_0
   //   alto_ne = [X,Y,Z]
   //}

   PuntiNotevoli
   {
      R1 = 120
      k  = R1*SENO(45)
      M2 = 70

      base_0  = [0,0,R1+M2]   alto_0 = [0, Y, R1+M2]

      base_1  = [0,0,Z-R1-M2]
      arc_1   = [R1-k,0,Z-R1+k-M2]
      base_2  = [R1,0,Z-M2]
      arc_2   = [X/2,0,Z]

      base_3  = [X-R1,0,Z-M2]
      arc_3   = [X-R1+k,0,Z-R1+k-M2]
      base_4  = [X,0,Z-R1-M2]
      base_5  = [X,0,R1+M2]
      arc_5   = [X-R1+k,0,R1-k+M2]
      base_6  = [X-R1,0,0+M2]
      arc_6   = [X/2,0,0]
      base_7  = [R1,0,M2]
      arc_7   = [R1-k,0,R1-k+M2]

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

Elemento _graf_piano_smussato_tav
{
   Descrizione = "Piano in marmo"
   Code        = COD
   Gruppo      = "PIA"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X             ""       1000
      Y             ""       20
      Z             ""       1000

      GraficaPiano  ""       2
      smussato      ""       1

      HIDE          ""       1
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"*path*")

      R  = Y
      L  = X/2

      par = L-0.0001
      L1 = R-COSENO(45)*R

      base_0 = [0, Y, 0]
      arc_0  = [L1, L1, 0]
      base_1 = [R, 0, 0]
      base_2 = [par, 0, 0]
      base_3 = [par, Y, 0]

      if( smussato == 0 )
      {
         DEL_VAR(ATTUALE(),"arc*")
         base_0 = [0, 0, 0]
         base_1 = [par, 0, 0]
         base_2 = [par, Y, 0]
         base_3 = [0, Y, 0]
      }

      base_so = [0,0,0]
      alto_ne = [X,Y,Z]

      //tondo
      base_path_0 = [0, 0, 0]
      arc_path_0  = [L, 0, Z/2]
      base_path_1 = [X, 0, 0]
      arc_path_1  = [L, 0, -Z/2]
      base_path_2 = [0, 0, 0]
   }
}

Elemento _graf_piano_tav_FW
{
   Descrizione = "Piano in FW"
   Code        = COD
   Gruppo      = "PIA"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X             ""       2000
      Y             ""       60
      Z             ""       1000

      HIDE          ""       1
   }

   PuntiNotevoli
   {
      DEL_VAR(ATTUALE(),"*path*")

      R = Y

      smusso = 60
      S = smusso - COSENO(45)*smusso

      L1 = R-COSENO(45)*R

      base_0 = [0, Y, smusso]
      arc_0  = [L1, L1, smusso]
      base_1 = [R, 0, smusso]
      base_2 = [R, Y, smusso]

      base_so = [0,0,0]
      alto_ne = [X,Y,Z]

      base_path_0 = [0, 0, smusso]
      base_path_1 = [0, 0, Z-smusso]
      arc_path_1  = [S, 0, Z - S]
      base_path_2 = [smusso, 0, Z]
      base_path_3 = [X - smusso, 0, Z]
      arc_path_3  = [X - S, 0, Z - S]
      base_path_4 = [X, 0, Z - smusso]
      base_path_5 = [X, 0, smusso]
      arc_path_5  = [X - S, 0, S]
      base_path_6 = [X - smusso, 0, 0]
      base_path_7 = [smusso, 0, 0]
      arc_path_7  = [S, 0, S]
      base_path_8 = [0, 0, smusso]
   }
}
//Simone 23/09/21
Elemento _graf_piano_loto
{
   Descrizione = "Piano loto"
   Code        = CUB
   Gruppo      = "GRP"
   Tipo        = ""
   Forma       = YSweep

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

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

   PuntiNotevoli
   {
      Rie = 10.17

      base_0  = [0,0,Rie]

      base_1  = [0,0,Z-Rie]
      base_2  = [Rie,0,Z]
      base_3  = [X-Rie,0,Z]
      base_4  = [X,0,Z-Rie]
      base_5  = [X,0,Rie]
      base_6  = [X-Rie,0,0]
      base_7  = [Rie,0,0]

      alto_0 = base_0
      alto_0.y = Y

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

Elemento Prolunga_Tavolo_Loto
{
   Descrizione = "Prolunga loto"
   Code        = CUB
   Gruppo      = "GRP"
   Tipo        = "Contenitore"
   Forma       = ""

   Variabili
   {
      X      "Larghezza"      974
      Y      "Altezza"        30
      Z      "Profondità"     487

      RADICE  "" "PPTL"

      FIN_var  ""  "C100"
      FIN_orie ""  "O"

      //Simone 14/02/2022 - Per gestire prolunghe di colori diversi
      FLAG_Speciale  ""  0  Implicit

      //Simone 15/02/2023
      VT_NFC         ""  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z = X/2
   }

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //Blocco modifica finitura dal figlio
      wk_gest_fin = STRCAT( "GEST_", FIN_var)

      if( VAR_EXIST(ATTUALE(), wk_gest_fin) )
      {
         if( IS_VAR_FIXED(ATTUALE(), wk_gest_fin) & FLAG_Speciale==0 ) { DEL_VAR_MODIFICATE(ATTUALE(), wk_gest_fin) }
      }

      GOSUB GestComune_Post
   }

   Posiziona _graf_prolunga_loto Pro
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   //Simone 15/02/2023
   Posiziona TAG_NFC nfc_fr
   {
      @escluso = 1 - VT_NFC

      @ang_y = -45
      @base_0.x = base_1.x + X/2 - @X*SENO(45)
      @base_0.y = base_0.y
      @base_0.z = base_1.z - @X*COSENO(45)
   }
}

Elemento _graf_prolunga_loto
{
   Descrizione = "Prolunga loto"
   Code        = CUB
   Gruppo      = "GRP"
   Tipo        = ""
   Forma       = YSweep

   Variabili
   {
      X "" 974
      Y "" 30
      Z "" 487

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

   PuntiNotevoli
   {
      base_0  = [0,0,0]

      base_1  = [X/2,0,Z]
      base_2  = [X,0,0]

      alto_0 = base_0
      alto_0.y = Y

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

Elemento Telaio_TavCorrer
{
   Descrizione = "Telaio correr"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X         "Larghezza"       2000
      Y         "Altezza"           60
      Z         "Profondità"      1000

      RADICE    ""               "TTCS"
      FIN_var   ""               "C028"
   }

   Assegnazioni
   {
      GOSUB AssComune

      rie = 141.9
      x = 20
      L = 214
      k = (SENO(45)*x)
      K = (SENO(45)*L)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = CEIL(X)
      GEST_Z = CEIL(Z)

      GOSUB GestComune_Post
   }

   Posiziona _graf_telaio_tav_correr te
   {
      GOSUB posa_blocco

      @X = X - 2*rie
      @Z = Z - 2*rie

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

      GOSUB rivestimento
   }

   Posiziona _graf_telaio_tav_correr sxrt
   {
      GOSUB posa_blocco

      @pos = "angolare"
      @X = x
      @Z = L
      @ang_y = 45
      @base_0.x = base_0.x
      @base_0.z = base_0.z + k

      GOSUB rivestimento
   }

   Posiziona _graf_telaio_tav_correr sxfr
   {
      GOSUB posa_blocco

      @pos = "angolare"
      @X = x
      @Z = L

      @ang_y = -45
      @base_0.x = base_0.x + K
      @base_0.z = base_0.z + Z - k - K

      GOSUB rivestimento
   }

   Posiziona _graf_telaio_tav_correr dxrt
   {
      GOSUB posa_blocco

      @pos = "angolare"
      @X = x
      @Z = L

      @ang_y = -45
      @base_0.x = base_0.x + X - k
      @base_0.z = base_0.z

      GOSUB rivestimento
   }

   Posiziona _graf_telaio_tav_correr dxfr
   {
      GOSUB posa_blocco

      @pos = "angolare"
      @X = x
      @Z = L

      @ang_y = 45
      @base_0.x = base_0.x + X - K - k
      @base_0.z = base_0.z + Z - K

      GOSUB rivestimento
   }
}

Elemento _graf_telaio_tav_correr
{
   Descrizione = "Grafica telaio correr"
   Code        = COD
   Gruppo      = "TAV"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X       "Larghezza"       2000
      Y       "Altezza"         60
      Z       "Profondità"      1000

      pos     ""                ""
      HIDE    ""                1
   }

   PuntiNotevoli
   {
      z = 20
      r = 5
      a = r*COSENO(45)
      A = r - a

      base_0 = [r, 0, 0]
      base_1 = [z-r, 0, 0]
      arc_1  = [z-A, A, 0]
      base_2 = [z, r, 0]
      base_3 = [z, Y-r, 0]
      arc_3  = [z-A, Y-A, 0]
      base_4 = [z-r, Y, 0]
      base_5 = [r, Y, 0]
      arc_5  = [A, Y-A, 0]
      base_6 = [0, Y-r, 0]
      base_7 = [0, r, 0]
      arc_7  = [A, A, 0]

      alto_ne = [X,Y,Z]

      base_path_0 = [0, 0, 0]
      base_path_1 = [0, 0, Z]
      base_path_2 = [X, 0, Z]
      base_path_3 = [X, 0, 0]
      base_path_4 = [0, 0, 0]

      if( pos == "angolare" )
      {
         DEL_VAR(ATTUALE(),"*path*")

         base_path_0 = [0, 0, 0]
         base_path_1 = [0, 0, Z]
      }
   }
}

Elemento GambaTavolo_Generico
{
   Descrizione = "Gamba Tavolo Generico"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      //1 - sat
      //2 - vetro
      TipoGamba       ""  0

      Gambe_Hoa       ""  0 Implicit
      Gambe_Hoa_Ovali ""  0 Implicit
      Gambe_Hoa_Cil   ""  0 Implicit

      ModTavolo       "" -1 Implicit
      TipoPiano       ""  0 Implicit

      TipoPianoStr   ""  "" Implicit
      ModTavoloStr   ""  "" Implicit
      FormaPianoStr  ""  "" Implicit

      GambaY         ""   1 Implicit
      PosGamba       ""   1

      GEST_CODICE    ""  ""
      perCODICE      ""  ""

      RADICE         ""  ""
      perRADICE      ""  ""

      NO_GEST        ""   0

      FileSAT        ""  ""
      FileSAT2       ""  ""

      FIN_var        ""  "C022"
      FIN_orie       ""  "O"

      HIDE           ""   0
   }

   Assegnazioni
   {
      GOSUB AssComune
      if( Gambe_Hoa > 0 ) { HIDE = 3 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune

      FIN_var  = "C022"
      FIN_orie = "O"

      //scasso piano tavolo correr fw
      BOX_MODE(0)
      NEAR_GLOBALE("wk_pia",ATTUALE(),1,1,"_graf_piano_tav_FW")
      idx_grafica_correr = -1
      if( wk_pia > 0 ) { idx_grafica_correr = wk_pia[1] }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = GambaY

      if( ModTavolo==0 )
      {
         perCODICE = "TG0101"
         GEST_X = 991
         GEST_Z = 500

         //Simone 25/07/2023 - Basamento più grande solo per piano da 3000
         if( VAR_VAL(PADRE(ATTUALE(),1),"X") > 2500 )
         {
            perCODICE = "TG0102"
            GEST_X = 1330
            GEST_Z = 550
         }
      }

      if( ModTavolo==3 )
      {
         perCODICE = "TG0201"
         GEST_X = 600
         GEST_Z = 600
      }

      if( ModTavolo==1 )
      {
         FIN_var  = "C023"
         FIN_orie = "V"

         perCODICE = "TG0302"
         if( PosGamba==2 )  { perCODICE = "TG0301" }

         GEST_X = 1134
         GEST_Y = 320
         //LZ 14/11 modificate dimensioni
         //GEST_Z = 105
         GEST_Z = 107
      }

      if( ModTavolo==2 )
      {
         FIN_var  = "C028"
         FIN_orie = "V"

         perCODICE = "TG0401"
         if( TipoPiano==3 ) { perCODICE = "TG0402" }

         GEST_X = 731
         GEST_Y = 150
         GEST_Z = 150
      }

      if( ModTavoloStr == "BOLD" )
      {
         FIN_var  = "C028"
         FIN_orie = "V"

         perCODICE = "TG0602"
         GEST_Y = 80

         if( IS_MATCH(FileSAT,"*Struttura*") ) { perCODICE = "TG0601"  FIN_var  = "C030" GEST_Y = Y }
      }

      if( ModTavoloStr == "MEET" )
      {
         perCODICE = "TG0901"

         GEST_X = 1068
         GEST_Z = 400
      }

      if( ModTavoloStr == "WADI" )
      {
         perCODICE = "TG0801"

         GEST_X = 980
         GEST_Z = 480
      }

      if( ModTavoloStr == "LOTO" )
      {
         FIN_var   = "C023"
         perCODICE = "TG0701"

         GEST_X = 150
         GEST_Y = 732
         GEST_Z = 115
      }

      if( ModTavoloStr == "HOA" )
      {
         FIN_idx_gest = PADRE(ATTUALE(),1)
         FIN_var   = "C023"
         perCODICE = ""
      }

      if( IS_MATCH(ModTavoloStr,"CORRER*") )
      {
         FIN_idx_gest = PADRE(ATTUALE(),1)
         FIN_orie = "V"
         FIN_var  = "C023"

         perCODICE = "TG2002"
         if( ModTavoloStr == "CORRER_COFFEE" ) { perCODICE = "TG2001" }

         if( TipoPianoStr == "FINEWOOD" )
         {
            FIN_var   = "C028"

            HIDE = 1
            NO_GEST = 1
            //gamba singola
            if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") == "1" )
            {
               HIDE = 0
               NO_GEST = 0
               perCODICE = "TG2042"
            }
         }
      }

      if( IS_MATCH(ModTavoloStr,"ALBERONI*") )
      {
         FIN_idx_gest = PADRE(ATTUALE(),1)

         perCODICE = ""
         perRADICE = "BTA"
      }

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

         perCODICE  = ""
         GEST_CODICE = ""

         EXITSUB()
      }
      FLAG_RADICE = $FLAG_STANDARD

      if( GEST_CODICE != perCODICE
        | RADICE != perRADICE )
      {
         GEST_CODICE = perCODICE
         RADICE = perRADICE
         flag_CAMBIA_VAR = 1
      }

      wk_gest_fin = STRCAT( "GEST_", FIN_var)
      if( VAR_EXIST(ATTUALE(), wk_gest_fin) )
      {
         if( IS_VAR_FIXED(ATTUALE(), wk_gest_fin) ) { DEL_VAR_MODIFICATE(ATTUALE(), wk_gest_fin) }
      }

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco vtr
   {
      @escluso = 1
      if( TipoGamba==2 ) { @escluso = 0 }

      @base_0 = base_0
      @X = X
      @Y = Y - 2
      @Z = Z

      GOSUB rivestimento
      @f_rivestimento = "0.4"
   }

   Posiziona __import__ sat1
   {
      @escluso = 1
      if( TipoGamba==1 ) { @escluso = 0 }

      GOSUB posa_blocco

      GOSUB rivestimento

      @import = FileSAT

      //Luca 28/11/2019
      if( IS_MATCH(FileSAT,"*P&J_GAMBA_SX_F.sat")==1 )  { @base_0.z = base_1.z }

      if( ModTavoloStr == "CORRER"
        & TipoPianoStr == "FINEWOOD" )
      {
         GOSUB ScassaChiPlus_M4
         @Scassa_Chi_Plus = STR(idx_grafica_correr)
      }
   }

   Posiziona __import__ sat2
   {
      @escluso = 1
      if( TipoGamba==1 & FileSAT2!="" ) { @escluso = 0 }

      GOSUB posa_blocco

      GOSUB rivestimento

      @import = FileSAT2

      //Luca 28/11/2019
      if( IS_MATCH(FileSAT2,"*P&J_GAMBA_DX*")==1 )    { @base_0.x = base_3.x }
      if( IS_MATCH(FileSAT2,"*P&J_GAMBA_DX_F*")==1 )  { @base_0.z = base_1.z }
   }

   // per tavolo Correr ridotto in h
   Posiziona BloccoSmussatoY gam
   {
      @escluso = 1
      if( TipoGamba == 3 ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = GambaY

      @R0 = X/2 - 0.001
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      @ang_y = 45
      @base_0.x = base_0.x - (SENO(45)*X - @R0)
      @base_0.z = base_0.z + @R0
      if( PosGamba == 2
        | PosGamba == 4 )
      {
         @ang_y = -45
         @base_0.x = base_0.x + SENO(45)*X
         @base_0.z = base_0.z - (SENO(45)*X - @R0)
      }

      GOSUB rivestimento

      GOSUB ScassaChiPlus_M4
      @Scassa_Chi_Plus = STR(idx_grafica_correr)
   }

   //Sostituzioni: Janeiro, basamento inferiore
   Posiziona RigaOrdine_Sostituzione jbi
   {
      @FLAG_escluso = 1
      if( ModTavoloStr == "JANEIRO" ) { @FLAG_escluso = 0 }

      @FLAG_Sost_Check_Idx_Padre = 1
      @FLAG_Sost_Check_Idx_Pari  = 1
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TG0202"
   }

   //Sostituzioni: Janeiro, basamento superiore
   Posiziona RigaOrdine_Sostituzione jbs
   {
      @FLAG_escluso = 1
      if( ModTavoloStr == "JANEIRO" ) { @FLAG_escluso = 0 }

      @FLAG_Sost_Check_Idx_Padre = 1
      @FLAG_Sost_Check_Idx_Pari  = 1
      @FLAG_Gest_DimCodifica     = 1

      @VAR_Gest_Codice = "TG0203"
   }

   //Gambe Hoa
   Posiziona RigaOrdine_NonGraficato g1
   {
      @escluso = 1
      if( ModTavoloStr == "HOA" ) { @escluso = 0 }

      //gamba cilindrica
      @GEST_CODICE = "TG1001"

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_NonGraficato g2
   {
      @escluso = 1
      if( ModTavoloStr == "HOA" ) { @escluso = 0 }

      //gamba ovale
      @GEST_CODICE = "TG1002"

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_NonGraficato g3
   {
      @escluso = 1
      if( ModTavoloStr == "HOA" ) { @escluso = 0 }

      @GEST_CODICE = "TG1002"
      if( Gambe_Hoa_Cil > 1 ) { @GEST_CODICE = "TG1001" }

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_NonGraficato g4
   {
      @escluso = 1
      if( ModTavoloStr == "HOA"
        & Gambe_Hoa > 3 )        { @escluso = 0 }

      @GEST_CODICE = "TG1002"

      @DIM_GEST = 1
   }
}

Elemento SostegnoVetroTavolo
{
   Descrizione = "Sostegno Vetro Tavolo"
   Code        = CUB
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  12
      Y "Spessore"   1
      Z "Profondità" 1

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

      RADICE "" "SOSVTRTAV"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB Stato_8
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Z
      //Luca 01/10/2019 vedi mail Enrico 'cambio vetri tavolo P&J'
      //GEST_Y = Y + 16
      GEST_Y = Y + 6
      GEST_Z = X

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco vtr
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.6"
   }
}
//} COMPONENTI

//Simone 14/06/2022
Elemento TavolinoGenerico
{
   Descrizione = "Tavolino"
   Code        = LIV
   Gruppo      = "Tavolo"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                   "Larghezza"           500
      Y                   "Altezza"             325      Menu ( AltTavolino )
      Z                   "Profondita'"         500

      Filler1             " "                   ""       ShowAlways

      ModTavolino         "Modello Tavolino"    0        Menu ( ModTavolino )
      FormaTopTav         "Forma Top Tavolino"  1        Menu ( FrTopTav )
      TipoTopTav          "Materiale Top"       "VETRO"  SaveAlways

      ModTavolinoStr      "" ""

      finitura_ns         "" ""

      FLAG_Boccola        ""  0

      idx_piano_tavolino  "" -1
      idx_base_londy      "" -1

      FIN_var             "" ""
      FIN_var_piano       "" "C044"
      FIN_var_base        "" ""

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

      Configurato         "" 0
      Raggio              "" 0
      Blend               "" 0

      M4_A_MURO           ""  -1

      M4_MIS              "" "X;Y;Z;ModTavolino;FormaTopTav;TipoTopTav;Filler*"

      FillerM2G           " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Assegnazioni_TavolinoGenerico

      if( ACTION() == 0 )
      {
         Y_Cmp = Y
      }

      if( $ATTIVA_DLL==1 & ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"ModTavolino",1)
         HIDE_ON_EDIT2(ATTUALE(),"FormaTopTav",1)
         HIDE_ON_EDIT2(ATTUALE(),"TipoTopTav",1)

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

      STP_Bollina = 1
   }

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

   Controlli
   {
      GOSUB CtrlComune
   }

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

      if( TABER_REGOLA == "POST")
      {
         finitura    = VAR_VAL_STR(ATTUALE(),STRCAT("GEST_",FIN_var_piano))
         finitura_ns = STRDADB(ATTUALE(),"DAMMI_NONSIGNIF",STRCAT("GEST_",FIN_var_piano,";",finitura))

         TipoTopTav  = "VETRO"
         if( IS_MATCH(finitura_ns,"W*") == 1 ) { TipoTopTav = "WILDWOOD" }

         Configurato = 1
      }
   }

   Gestionale
   {
      GOSUB GestComune

      Y = Y_Cmp

      //TipoTopTav  = "VETRO"
      //if( IS_MATCH(finitura_ns,"W*") == 1 )
      if( ModTavolino == 0
        & TipoTopTav == "WILDWOOD"  ) { Y = Y_Cmp + 25 }

      if( VAR_VAL(ATTUALE(),"ORD_X" ) > 0
        & VAR_VAL(ATTUALE(),"ORD_Z" ) > 0 )
      {
         X = ORD_X
         Z = ORD_Z
      }

     if( ModTavolino == 1
        & TipoTopTav == "VETRO" ) { GEST_Y = 325 }

      GOSUB GestComune_Post
   }

   Posiziona PianoTavolino top
   {
      GOSUB posa_blocco

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

      @base_0.y = Y - Spe_Piano

      @FIN_var = FIN_var_piano

      idx_piano_tavolino = ATTUALE()

      GOSUB rivestimento
   }

   Posiziona SupportoVetro_Tavoli_AIR sost1
   {
      @escluso = 0
      if( ModTavolino == 2 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.x = base_0.x + OffX_Vtr_O
      @base_0.z = base_0.z + OffZ_Vtr_O

      @AltVet  = Y - Spe_Piano - @RieY_Vtr
      @LargVet = X_Vtr_O

      @OrieSupporto = "O"
      @Verso = Verso_Vtr_O
   }

   Posiziona SupportoVetro_Tavoli_AIR sost2
   {
      @escluso = 0
      if( ModTavolino == 2 ) { @escluso = 1 }

      @base_0 = base_0
      @base_0.x = base_0.x + OffX_Vtr_V
      @base_0.z = base_0.z + OffZ_Vtr_V

      @AltVet  = Y - Spe_Piano - @RieY_Vtr
      @LargVet = X_Vtr_V
      @Verso = Verso_Vtr_V
   }

   Posiziona Base_Tavolino_Londy sed
   {
      @escluso = 1
      if( ModTavolino == 2 ) { @escluso = 0 }

      GOSUB posa_blocco

      @FIN_var = FIN_var_base
      GOSUB rivestimento

      idx_base_londy = @idx_base_londy
   }
}

Elemento PianoTavolino
{
   Descrizione = "Piano Tavolino"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X        "Larghezza"       500
      Y        "Altezza"          10
      Z        "Profondità"      500

      ModTavolino    ""    0  Implicit
      FormaTopTav    ""    1  Implicit
      TipoTopTav     ""   ""  Implicit

      ModTavolinoStr ""   ""  Implicit

      FIN_var_piano  ""   ""  Implicit

      Spe_Piano      ""   10  Implicit

      Configurato    ""    0  Implicit
      Raggio         ""    0  Implicit
      Blend          ""    0  Implicit

      idx_base_londy ""   -1  Implicit

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

   Assegnazioni
   {
      GOSUB AssComune

      path_file = STRCAT($path_sat,"Tavolini\",ModTavolinoStr,"\")

      FileSat1       = ""
      FileSat2       = ""
      File_m4s       = ""
      FileSat1_exist = 0
      FileSat2_exist = 0
      File_m4s_exist = 0
      m4s_import     = ""

      if( ModTavolinoStr == "PLEASURE" )
      {
         FileSat1 = STRCAT(path_file,"Top_Pleasure_",STR(FormaTopTav),"_",TipoTopTav,".SAT")
         FileSat2 = STRCAT(path_file,"Vernice_Pleasure_",STR(FormaTopTav),".SAT")
      }

      //Simone 13/03/2023
      if( ModTavolinoStr == "YAMA" )
      {
         FileSat1 = STRCAT(path_file,"Top_trapezoidale_",TipoTopTav,".SAT")
         //laccatura vetro
         FileSat2 = STRCAT(path_file,"Top_trapezoidale_",TipoTopTav,"_LC.SAT")
      }

      if( ModTavolinoStr == "LONDY" )
      {
         File_m4s   = STRCAT(path_file,"TOP_LONDY_",STR(FormaTopTav),"#A.m4s")
         m4s_import = STRCAT(File_m4s,"|model|model.hsf")
      }

      FileSat1_exist = FILE_EXIST(FileSat1)
      FileSat2_exist = FILE_EXIST(FileSat2)
      File_m4s_exist = FILE_EXIST(File_m4s)

      Y = Spe_Piano
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( IS_VarsUser__(ATTUALE(), STRCAT("GEST_",FIN_var_piano)) == 1 ) { DEL_VAR_MODIFICATE(ATTUALE(), STRCAT("GEST_",FIN_var_piano)) }

      GEST_X = X
      GEST_Y = Spe_Piano
      if( TipoTopTav == "VETRO" ) { GEST_Y = Spe_Piano + 30 }
      GEST_Z = Z

      if( ModTavolinoStr == "LONDY"
        & VAR_VAL_STR( ATTUALE(), "ORD_COD") != "" )
      {
         if( VAR_VAL( ATTUALE(), "ORD_X") > 0) { GEST_X = ORD_X }
         if( VAR_VAL( ATTUALE(), "ORD_Y") > 0) { GEST_Y = ORD_Y }
         if( VAR_VAL( ATTUALE(), "ORD_Z") > 0) { GEST_Z = ORD_Z }
      }

      wk_cod_topl = VAR_VAL_STR(idx_pdr,"ORD_COD")

      RADICE = ""
      GEST_CODICE = ""

      FLAG_RADICE = $FLAG_STANDARD
      if( Configurato == 0 )
      {
         FLAG_RADICE = $NO_RAD
         EXITSUB()
      }

      RADICE_prec = RADICE
      GEST_CODICE_prec = GEST_CODICE

      perRADICE = ""
      perCODICE = ""
      if( IS_VAR_FIXED( ATTUALE(), "RADICE") == 0
        & IS_VAR_FIXED( ATTUALE(), "GEST_CODICE") == 0 )
      {
         if( ModTavolinoStr == "PLEASURE" )
         {
            perRADICE = "PTAS"
            if( TipoTopTav == "WILDWOOD" ) { perRADICE = "PTASWW" }
         }

         if( ModTavolinoStr == "YAMA" )
         {
            perRADICE = "PTYAV"
            if( TipoTopTav == "WILDWOOD" ) { perRADICE = "PTYAWW" }
         }

         if( ModTavolinoStr == "LONDY" )
         {
            perCODICE = STRCAT(wk_cod_topl,"V")
         }
      }

      if( perCODICE != "") { perRADICE = "" }

      RADICE = perRADICE
      GEST_CODICE = perCODICE
      if( RADICE_prec != RADICE
        | GEST_CODICE_prec != GEST_CODICE ) { flag_CAMBIA_VAR = 1 }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona __import__ top
   {
      @escluso = 1 - FileSat1_exist
      @import = FileSat1

      @base_0 = base_0
      @Y = Spe_Piano

      GOSUB rivestimento

      if( TipoTopTav != "WILDWOOD" )
      {
         @Y = Y - 0.1
         @m_rivestimento = ""
         @c_rivestimento = ""
         @f_rivestimento = "0.9"
      }
   }

   Posiziona __import__ vernsup
   {
      @escluso = 1 - FileSat2_exist
      if( TipoTopTav == "WILDWOOD" ) { @escluso = 1 }
      @import = FileSat2

      @base_0 = base_0
      @Y = 0.1
      @base_0.y = base_0.y + 1

      GOSUB rivestimento
   }

   Posiziona __import__ verninf
   {
      @escluso = 1 - FileSat2_exist
      if( TipoTopTav == "WILDWOOD" ) { @escluso = 1 }
      @import = FileSat2

      @base_0 = base_0
      @Y = 0.1
      @base_0.y = base_0.y

      @c_rivestimento = $c_bianco

      if( IS_MATCH(VAR_VAL_STR(idx_att,"GEST_C044"),"V*") == 1 )
      {
         SetRgb_Val( @c_rivestimento,  idx_att, GetLaccatoCorrispondente( VAR_VAL_STR( idx_att, GetVarGest(FIN_var))), 0)
      }
   }

   //per tavolino Londy
   Posiziona BloccoSmussatoY topv
   {
      @escluso = 1
      if( File_m4s_exist == 0
        & ModTavolinoStr == "LONDY" ) { @escluso = 0 }

      @X = X - Blend
      @Y = Spe_Piano
      @Z = Z - Blend

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

      @R0 = Raggio
      @R1 = Raggio
      @R2 = Raggio
      @R3 = Raggio

      GOSUB rivestimento
   }

   Posiziona Blocco_Scassa scs
   {
      @escluso = 1
      if( File_m4s_exist == 0
        & ModTavolinoStr == "LONDY" ) { @escluso = 0 }

      @X = X - Blend/2
      @Y = Spe_Piano + 10
      @Z = Z - Blend/2

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

      @Scassa_Chi_Plus = STR(idx_base_londy)
   }

   Posiziona M4S m4s
   {
      @escluso = 1 - File_m4s_exist

      GOSUB posa_blocco
      @base_0.y = base_0.y - 13
      @import = m4s_import

      GOSUB rivestimento
      @HIDE = 1
   }
}

Elemento Base_Tavolino_Londy
{
   Descrizione = "Base Tavolino Londy"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X        "Larghezza"       500
      Y        "Altezza"          10
      Z        "Profondità"      500

      ModTavolino    ""    0 Implicit
      FormaTopTav    ""    1 Implicit
      TipoTopTav     ""   "" Implicit

      ModTavolinoStr ""   "" Implicit

      Blend          ""   0  Implicit

      perCODICE      ""   ""
      GEST_CODICE    ""   ""

      idx_topl       ""   -1
      idx_base_londy ""   -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      idx_topl = GetTopLevel(ATTUALE())
      wk_cod_topl = VAR_VAL_STR(idx_topl,"ORD_COD")

      path_file = STRCAT($path_sat,"Tavolini\",ModTavolinoStr,"\")

      File_m4s1       = ""
      File_m4s2       = ""
      m4s1_import     = ""
      m4s2_import     = ""
      File_m4s1_exist = 0
      File_m4s2_exist = 0

      File_m4s1   = STRCAT(path_file,"BASE_LONDY_",STR(FormaTopTav),"#A.m4s")
      File_m4s2   = STRCAT(path_file,"PIE_LONDY_",STR(FormaTopTav),"#A.m4s")
      m4s1_import = STRCAT(File_m4s1,"|model|model.hsf")
      m4s2_import = STRCAT(File_m4s2,"|model|model.hsf")

      File_m4s1_exist = FILE_EXIST(File_m4s1)
      File_m4s2_exist = FILE_EXIST(File_m4s2)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_CODICE = ""
      GEST_CODICE_prec = GEST_CODICE

      perCODICE = STRCAT(wk_cod_topl,"B")

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

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona BloccoBlend sed
   {
      @escluso = File_m4s1_exist

      GOSUB posa_blocco
      @BLEND__ = Blend

      GOSUB rivestimento

      idx_base_londy = ATTUALE()
   }

   Posiziona M4S m4s1
   {
      @escluso = 1 - File_m4s1_exist

      GOSUB posa_blocco
      @import  = m4s1_import

      GOSUB rivestimento
      @HIDE = 1
   }

   Posiziona M4S m4s2
   {
      @escluso = 1 - File_m4s2_exist

      GOSUB posa_blocco
      @import  = m4s2_import

      GOSUB rivestimento
      @HIDE = 1
   }

   Posiziona RigaOrdine_Sostituzione rives
   {
      @FLAG_Sost_Check_Idx_Padre = 1
      @VAR_Sost_Check_Idx_Custom = STR(idx_topl)

      @VAR_Gest_Codice    = STRCAT(perCODICE,"R")
      @VAR_Sost_Check_Msg = "Non è possibile sostituire sia la base che il rivestimento, selezionare solo la base"

      GOSUB posa_blocco
   }
}

//{ DIVANI SAND
//Luca 15/11/2019
Elemento DivanoSand
{
   Descrizione = "Divano"
   Code        = LIV
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpDivani

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"            1050 Menu ( LarDivS )
      Y       "Altezza"               500
      Z       "Profondita'"          1050 Menu ( ProDivS )

      ConSchienale "Con schienale fisso" 0 Menu ( SiNo )

      Meridienne   "Meridienne"          0 Menu ( SiNo )

      PosSchienali    "" 0
      PosSchienaliMer "" -1

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

      M4_A_MURO          ""  0

      FillerM2G            " " "" ShowAlways

      RA_RIFERIMENTO__ "" 0

      M4_MIS "" "X;Y;Z;Meridienne;FillerM2G"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_DivanoSand

      if( ACTION()==0 & $ATTIVA_DLL==1 )
      {
         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(),"ConSchienale",1)
         HIDE_ON_EDIT2(ATTUALE(),"Meridienne",1)
      }

      if( $ATTIVA_DLL==0 )
      {
         if( Meridienne==1 ) { PosSchienali = -1 }
      }

      //Simone 05/07/2022 - Sblocco possibilità al backoffice
      #ifdef TEC;AZI
      HIDE_ON_EDIT2(ATTUALE(),"ConSchienale",0)
      #endif
   }

   PuntiNotevoli
   {
      Y = Alt_Gamb + Alt_Base
      if( ConSchienale==1 ) { Y = Y + Alt_Sch }
      GOSUB punti

      //per scritta in stampa
      pnt_scritta = [X/2,Y+10,Z-200]

      //Luca 25/05/2020
      Stp_var_legenda   = "C071"
   }
   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="POST" )
      {
         if( ConSchienale==1 )
         {
            //PosSchienali = 0
            //if( VAR_VAL_STR(ATTUALE(),"GEST_C068")=="DX004" ) { PosSchienali =  1 }
            //if( VAR_VAL_STR(ATTUALE(),"GEST_C068")=="SX004" ) { PosSchienali = -1 }

            PosSchienali = 0
            if( VAR_VAL_STR(ATTUALE(),"GEST_C069")=="SX001" ) { PosSchienali = 1 }
            if( VAR_VAL_STR(ATTUALE(),"GEST_C069")=="DX001" ) { PosSchienali = -1 }

            if( Meridienne==1 )
            {
               PosSchienali    = 0
               PosSchienaliMer = 0

               if( VAR_VAL_STR(ATTUALE(),"GEST_C069")=="SX001" ) { PosSchienaliMer = 1 }
               if( VAR_VAL_STR(ATTUALE(),"GEST_C069")=="DX001" ) { PosSchienaliMer = -1 }
            }
         }
      }

   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona SedutaDivanoSand sds
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Alt_Gamb
      @Y = Alt_Base

      @ConSchienale = ConSchienale
   }

   //per inserimento seduta con RA
   //Posiziona BloccoInvisibile bl
   Posiziona ContenitoreInvisibile bl
   {
      GOSUB posa_blocco
      @Y = 5
      //@base_0.y = base_0.y + Y - @Y
      @base_0.y = base_0.y + Alt_Gamb + Alt_Base - @Y
      @RA_RIFERIMENTO__ = 1
      @HIDE = 3
   }

   Posiziona GambaDivanoSand gamsx
   {
      @base_0.x = base_0.x + RieL_Gamb - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - Pro_Gamb/2
      @Y = Alt_Gamb
      @Z = Pro_Gamb
   }

   Posiziona GambaDivanoSand gamdx
   {
      @base_0.x = base_0.x + X  - RieL_Gamb - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - Pro_Gamb/2
      @Y = Alt_Gamb
      @Z = Pro_Gamb
   }

   Posiziona PiedinoDivanoSand pie
   {
      @escluso = 1
      if( X>=2300 )  { @escluso = 0 }
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Y = Alt_Gamb
   }

   Posiziona SchienaleDivanoSand scds1
   {
      @escluso = 1
      if( Num_Sch>=1 ) { @escluso = 0 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Alt_Gamb + Alt_Base
      @base_0.z = base_0.z + RieR_Sch
      @X = Lar_Sch
      @Y = Alt_Sch
      @Z = Pro_Sch

      @base_0.x = base_0.x + X/2 - Lar_Sch/2
      if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch }
      if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - Lar_Sch }

      if( Num_Sch==2 )
      {
         @base_0.x = base_0.x + X/2 - @X
         if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch }
         if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - 2*Lar_Sch }
      }

      if( Num_Sch==3 )
      {
         @base_0.x = base_0.x + X/2 - @X - @X/2
         if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch }
         if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - 3*Lar_Sch }
      }

      if( Meridienne==1 & PosSchienaliMer>0 ) { @escluso = 1 }
   }

   Posiziona SchienaleDivanoSand scds2
   {
      @escluso = 1
      if( Num_Sch>=2 ) { @escluso = 0 }

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Alt_Gamb + Alt_Base
      @base_0.z = base_0.z + RieR_Sch
      @X = Lar_Sch
      @Y = Alt_Sch
      @Z = Pro_Sch

      @base_0.x = base_0.x + X/2
      if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch + Lar_Sch }
      if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - Lar_Sch }

      if( Num_Sch==3 )
      {
         @base_0.x = base_0.x + X/2 - @X/2
         if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch + Lar_Sch }
         if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - 2*Lar_Sch }
      }

      if( Meridienne==1 & PosSchienaliMer<0 & Num_Sch_Md==1 ) { @escluso = 1 }
   }

   Posiziona SchienaleDivanoSand scds3
   {
      @escluso = 1
      if( Num_Sch>=3 ) { @escluso = 0 }
      @base_0.x = base_0.x
      @base_0.y = base_0.y + Alt_Gamb + Alt_Base
      @base_0.z = base_0.z + RieR_Sch
      @X = Lar_Sch
      @Y = Alt_Sch
      @Z = Pro_Sch
      @base_0.x = base_0.x + X/2 + @X/2
      if( PosSchienali<0 ) { @base_0.x = base_0.x + RieL_Sch + 2*Lar_Sch }
      if( PosSchienali>0 ) { @base_0.x = base_0.x + X - RieL_Sch - Lar_Sch }

      if( Meridienne==1 & PosSchienaliMer<0 & Num_Sch_Md==2 ) { @escluso = 1 }
   }
}

Elemento DivanoSandTrapezio
{
   Descrizione = "Divano"
   Code        = LIV
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpDivani

   Variabili
   {
      #include %path_bdm%\var_db.inc

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X       "Larghezza"            1800
      Y       "Altezza"               500
      Z       "Profondita'"          1800

      Dimensioni      "Dimensioni"     1 Menu ( DimDivST )

      Verso            "Verso"      1 Menu ( DXSX )
      VersoStr         ""         "DX"

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

      M4_A_MURO        ""  0

      FillerM2G        " " "" ShowAlways

      RA_RIFERIMENTO__ "" 0

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

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_DivanoSand

      if( Dimensioni == 1 )
      {
         Z = 1630
         X = 1790
      }
      if( Dimensioni == 2 )
      {
         Z = 1870
         X = 1900
      }

      FileSAT  = STRCAT($path_sat,"Divani\Sand\Seduta\Sat\SedutaTrapezioSand_",STR(X),"x",STR(Z),"_SX.SAT")
      if( Verso > 0 )
      {
         FileSAT  = STRCAT($path_sat,"Divani\Sand\Seduta\Sat\SedutaTrapezioSand_",STR(X),"x",STR(Z),"_DX.SAT")
      }

      LatoAggancio_SX = 1300
      LatoAggancio_DX = 1300


      if( ACTION()==0 & $ATTIVA_DLL==1 )
      {
         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(),"Verso",1)
      }
   }

   PuntiNotevoli
   {
      Y = Alt_Gamb + Alt_Base
      GOSUB punti

      base_o0 = base_0
      base_o1 = base_1  base_o1.z = LatoAggancio_SX
      base_o2 = base_2  //base_o2.x = XLatoAggancio
      base_o3 = base_3  base_o3.x = LatoAggancio_DX

      alto_o0 = alto_0
      alto_o1 = alto_1  alto_o1.z = LatoAggancio_SX
      alto_o2 = alto_2  //alto_o2.x = XLatoAggancio
      alto_o3 = alto_3  alto_o3.x = LatoAggancio_DX

      if( Verso < 0 )
      {
         base_o0 = base_3
         base_o1 = base_3  base_o1.x = X - LatoAggancio_SX
         base_o2 = base_1  //base_o2.x = XLatoAggancio
         base_o3 = base_3  base_o3.z = LatoAggancio_DX

         alto_o0 = alto_3
         alto_o1 = alto_3  base_o1.x = X - LatoAggancio_SX
         alto_o2 = alto_1  //base_o2.x = XLatoAggancio
         alto_o3 = alto_3  base_o3.z = LatoAggancio_DX
      }

      base_so = [0,0,0]
      alto_ne = [X,Y,Z]


      //per scritta in stampa
      pnt_scritta = [X/2,Y+10,Z-500]

      //Luca 25/05/2020
      Stp_var_legenda   = "C071"
   }

   Orientamenti
   {
      Sinistra base_o0, base_o1, alto_o0, alto_o1
      Destra   base_o0, base_o3, alto_o3, alto_o0

      Alto     alto_o0, alto_o1, alto_o3, alto_o2
      Basso    base_o0, base_o1, base_o2, base_o2
      Fronte   base_o1, base_o2, alto_o1, alto_o2
      Retro    base_o0, alto_o3, alto_o0, base_o3
   }
   //#include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      //Simone 11/07/2022
      if( ACTION() <= 0 | ACTION()== 2 )             { EXITSUB() }
      if( VAR_EXIST( ATTUALE(), "GEST_C069") == 0  ) { EXITSUB() }

      Verso = 0
      if( GEST_C069 == "DX001" ) { Verso = 1  }
      if( GEST_C069 == "SX001" ) { Verso = -1 }
   }

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

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   ////Luca 30/06/2022 debug
   //Posiziona _ysweep_np bl
   //{
   //   @escluso = 1
   //   GOSUB posa_blocco
   //
   //   @quanti_punti = 4
   //   @x1=0                      @z1=LatoAggancio_SX
   //   @x2=200                    @z2=Z
   //   @x3=X                      @z3=Z - 200
   //   @x4=LatoAggancio_DX        @z4=0
   //
   //   if( Verso < 0 )
   //   {
   //      @base_0.x = base_0.x + X
   //      @x1 = -1* 0                      @z1=LatoAggancio_SX
   //      @x2 = -1* 200                    @z2=Z
   //      @x3 = -1* X                      @z3=Z - 200
   //      @x4 = -1* LatoAggancio_DX          @z4=0
   //   }
   //
   //   @c_rivestimento = [120,120,255]
   //   @f_rivestimento = "0.9"
   //}

   Posiziona SedutaDivanoSand sds
   {
      GOSUB posa_blocco

      @base_0.y = base_0.y + Alt_Gamb

      @Y = Alt_Base
   }

   //per inserimento seduta con RA
   Posiziona ContenitoreInvisibile bl
   {
      GOSUB posa_blocco
      @Y = 5
      @base_0.y = base_0.y + Alt_Gamb + Alt_Base - @Y
      @RA_RIFERIMENTO__ = 1
      @HIDE = 3
   }

   Posiziona GambaDivanoSand gamsx
   {
      @base_0.x = base_0.x + 517
      if( Verso > 0 )
      {
         @base_0.x = base_0.x + 223
      }
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 384

      if( Dimensioni == 2 )
      {
         @base_0.x = base_0.x + 631
         if( Verso > 0 )
         {
            @base_0.x = base_0.x + 203
         }

         @base_0.z = base_0.z + 466
      }


      @ang_y = 90
      @Y = Alt_Gamb
      @Z = Pro_Gamb


   }

   Posiziona GambaDivanoSand gamdx
   {
      @base_0.x = base_0.x + 265
      @base_0.y = base_0.y
      @base_0.z = base_0.z + 1093
      @ang_y = 81

      if( Dimensioni == 2 )
      {
         @base_0.x = base_0.x + 330
         @base_0.z = base_0.z + 1344
      }

      if( Verso > 0 )
      {
         @ang_y = 99

         @base_0.x = base_0.x + 265 + 227
         @base_0.z = base_0.z + 1093 + 168

         if( Dimensioni == 2 )
         {
            @base_0.x = base_0.x + 330 + 186
            @base_0.z = base_0.z + 1344 + 167
         }
      }

      @Y = Alt_Gamb
      @Z = Pro_Gamb
   }

   Posiziona PiedinoDivanoSand pie
   {
      @escluso = 1

      //if( X>=2300 )  { @escluso = 0 }
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Z/2 - @Z/2
      @Y = Alt_Gamb
   }
}

Elemento SedutaDivanoSand
{
   Descrizione = "Seduta divano sand"
   Code        = CUB
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  1000
      Y "Spessore"   1000
      Z "Profondità" 1000

      FileSAT "" ""

      //indicazione schienali integrato
      ConSchienale  "" 0
      //Simone 11/07/2022 - Baase trapezoidale
      Verso         "" 1  Implicit
      VersoStr      "" "" Implicit

      perRADICE "" ""
      RADICE    "" ""

      RA_RIFERIMENTO__  "" 0

      FIN_var     ""  "C071"
      FIN_orie    ""  "O"

   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB DivanoGenerico_Assegnazioni_Modello3D
   }

   PuntiNotevoli
   {
      GOSUB punti
      base_so = base_0
      alto_ne = alto_2

      STP_Bollina = 1
      STP_Bollina_Cat = "C071"
      STP_Bollina_Pnt = [ X/2 , Y/2 , Z + 10]
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
      FileSAT  = STRCAT($path_sat,"Divani\Sand\Seduta\Sat\SedutaSand_",STR(X),"x",STR(Z),".SAT")

      perRADICE = "SSOBAS"
      if( Z>1100 ) { perRADICE = "SSOBAPE" }

      if( ConSchienale==0 ) { perRADICE = "SSOBASP" }

      //Simone 11/07/2022
      if( UN_PADRE("DivanoSandTrapezio") )
      {
         FileSAT  = STRCAT($path_sat,"Divani\Sand\Seduta\Sat\SedutaTrapezioSand_",STR(X),"x",STR(Z),"_SX.SAT")
         if( Verso > 0 )
         {
            FileSAT  = STRCAT($path_sat,"Divani\Sand\Seduta\Sat\SedutaTrapezioSand_",STR(X),"x",STR(Z),"_DX.SAT")
         }
         perRADICE = "SSOBAST"
      }

      RADICE = perRADICE
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   ////per inserimento seduta con RA
   //Posiziona BloccoInvisibile bl
   //{
   //   GOSUB posa_blocco
   //   @Y = 5
   //   @base_0.y = base_0.y + Y - @Y
   //   //@base_0.y = base_0.y + Alt_Gamb + Alt_Base - @Y
   //   @RA_RIFERIMENTO__ =1
   //}


   //Posiziona Blocco sat1
   Posiziona __import__ sat1
   {
      @escluso = 1
      if( Seduta_modello_exist > 0
        & Seduta_modello_tipologia == "Sat" ) { @escluso = 0 }

      GOSUB posa_blocco
      @import = Seduta_modello_import
      GOSUB rivestimento
   }

   Posiziona M4S fnd_m4s
   {
      @escluso = 1
      if( Fondo_modello_exist > 0
        & Fondo_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Fondo_modello_import

      GOSUB posa_blocco

      GOSUB rivestimento

      @HIDE = 1
   }

   Posiziona M4S sed_m4s
   {
      @escluso = 1
      if( Seduta_modello_exist > 0
        & Seduta_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Seduta_modello_import

      GOSUB posa_blocco

      GOSUB rivestimento

      @HIDE = 1
   }

   Posiziona BloccoBlend bck
   {
      @escluso = 1
      if( Seduta_modello_exist <= 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      GOSUB rivestimento

      @BLEND__ = Y/3

      @HIDE = 1
   }
}

Elemento SchienaleDivanoSand
{
   Descrizione = "Seduta divano sand"
   Code        = CUB
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  1
      Y "Spessore"   1
      Z "Profondità" 310

      RADICE    "" "SSOSIN"
      FileSAT "" ""


      FIN_var     ""  "C070"
      FIN_orie    ""  "O"

      RA_RIFERIMENTO__ "" 0
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB DivanoGenerico_Assegnazioni_Modello3D
   }

   PuntiNotevoli
   {
      GOSUB punti

      //per scritta in stampa
      pnt_scritta = [X/2,Y+10,100]

      //Luca 25/05/2020
      Stp_var_legenda   = "C070"

      //Luca 18/09/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C070"
      STP_Bollina_Pnt = [ X/2 , Y/2 , Z + 10]
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
      FileSAT  = STRCAT($path_sat,"Divani\Sand\Schienale\Sat\SchienaleSand_",STR(X),".SAT")
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat1
   {
      @escluso = 1
      if( Schienale_modello_exist > 0
        & Schienale_modello_tipologia == "Sat" ) { @escluso = 0 }

      @base_0 = base_0
      @import = Schienale_modello_import
      GOSUB rivestimento
   }

   Posiziona M4S sch_m4s
   {
      @escluso = 1
      if( Schienale_modello_exist > 0
        & Schienale_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Schienale_modello_import

      GOSUB posa_blocco

      GOSUB rivestimento

      @HIDE = 1
   }
}

Elemento SchienaleFSDivanoSand
{
   Descrizione = "Schienale FreeStanding"
   Code        = LIV
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpDivSand_SFS;TSTP_BloccaVistaCentroStanza

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  800 Menu ( LarSFSDivS )
      Y "Altezza"    320
      Z "Profondità" 310

      FileSAT "" ""

      FIN_var     ""  "C070"
      FIN_orie    ""  "O"

      CMP2_AZIONI      ""   "L"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB DivanoGenerico_Assegnazioni_Modello3D

      FileSAT  = STRCAT($path_sat,"Divani\Sand\Schienale\Sat\SchienaleSand_",STR(X),".SAT")

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

   PuntiNotevoli
   {
      GOSUB punti

      //per scritta in stampa
      pnt_scritta = [X/2,Y+10,100]

      //Luca 25/05/2020
      Stp_var_legenda   = "C070"

      //Luca 18/09/2020
      STP_Bollina = 1
      STP_Bollina_Cat = "C070"
      STP_Bollina_Pnt = [ X/2 , Y/2 , Z + 10]
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      FLAG_RADICE = $FLAG_STANDARD + $MAKE_ROW

      if( VAR_VAL( ATTUALE(), "in_pcfto") > 0
        & VAR_VAL( ATTUALE(), "ins2_att") == $ins2_componente ) { FLAG_RADICE = $FLAG_STANDARD }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

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

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat1
   {
      @escluso = 1
      if( Schienale_modello_exist > 0
        & Schienale_modello_tipologia == "Sat" ) { @escluso = 0 }

      @base_0 = base_0
      @import = Schienale_modello_import
      GOSUB rivestimento
   }

   Posiziona M4S sch_m4s
   {
      @escluso = 1
      if( Schienale_modello_exist > 0
        & Schienale_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Schienale_modello_import

      GOSUB posa_blocco

      GOSUB rivestimento

      @HIDE = 1
   }
}

Elemento GambaDivanoSand
{
   Descrizione = "Seduta divano sand"
   Code        = CUB
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      RADICE    "" "SSOGAM"

      FileSAT "" ""

      FIN_var     ""  "C023"
      FIN_orie    ""  "O"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB DivanoGenerico_Assegnazioni_Modello3D
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
      FileSAT  = STRCAT($path_sat,"Divani\Sand\Gamba\Sat\GambaSand_",STR(Z),".SAT")
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat1
   {
      @base_0 = base_0
      @import = FileSAT
      GOSUB rivestimento
   }
}

Elemento PiedinoDivanoSand
{
   Descrizione = "Seduta divano sand"
   Code        = CUB
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  60
      Y "Altezza"    120
      Z "Profondità" 60

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

      FileSAT "" ""

      FIN_var     ""  "C023"
      FIN_orie    ""  "O"
   }

   Assegnazioni
   {
      GOSUB AssComune
      //GOSUB DivanoGenerico_Assegnazioni_Modello3D
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
      FileSAT  = STRCAT($path_sat,"Divani\Sand\Piedino\Sat\PiedinoSand.SAT")
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona __import__ sat1
   {
      @base_0 = base_0
      @import = FileSAT
      GOSUB rivestimento
   }
}
//} DIVANI SAND

//{ DIVANO GEN
Elemento DivanoGenerico
{
   Descrizione = "Divano Generico"
   Code        = LIV
   Gruppo      = "DIV"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StpDivani

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                               "Larghezza"                               2500
      Y                               "Altezza"                                 760
      Z                               "Profondità"                              1000

      VAR_Modello_Divano              "Modello"                                 1          Menu ( DivanoGenerico_Modello )

      VAR_Tipologia                   "Tipologia"                               1          Menu ( DivanoHappening_Tipologia )           Utente ( )
      VAR_Tipologia_Str               "Tipologia - stringa"                     "Lineare"
      VAR_Tipologia_Str_Abb           "Tipologia - stringa abbreviata"          "Lin"

      VAR_Schienale_Tipologia         "Schienale - Tipologia"                   1          Menu ( DivanoHappening_Schienale_Tipologia ) Utente ( )
      VAR_Schienale_Tipologia_Str     "Schienale - Tipologia - stringa"         "Intero"
      VAR_Schienale_Tipologia_Str_Abb "Schienale - Tipologia - stringa abb"     "Int"

      VAR_Schienale_Verso             "Schienale - Verso"                       0          Menu ( DivanoHappening_Schienale_Verso )     Utente ( )
      VAR_Schienale_Verso_Str         "Schienale - Verso - stringa"             "Nessuno"
      VAR_Schienale_Verso_Str_Abb     "Schienale - Verso - stringa"             "Nes"

      //Simone 12/01/2023
      scale_seduta                    "Scalatura seduta m4s"                    [1, 1, 1]  XyzAbsolute

      idx_brdx                        ""                                        -1
      idx_brsx                        ""                                        -1
      idx_sch                         ""                                        -1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB DivanoGenerico_Assegnazioni

      //Stampa
      pnt_scritta = [X/2,Y+10,Z/2]
      Stp_var_legenda = FIN_var

      //Sostituzioni da distinta gestionale
      if( VAR_Modello_Str == "Hero") { GOSUB Gestionale_Distinta_Popola_Elemento_Attuale_InSostituzione }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   //Grafica generica
   Posiziona BloccoBlend sed
   {
      @escluso = 1
      if( Seduta_modello_exist == 0 ) { @escluso = 0 }

      @X = Seduta_X
      @Y = Seduta_Y
      @Z = Seduta_Z

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

      //Altana laterale e chaise loungue
      if( VAR_Modello_Str == "Altana" )
      {
         @base_0.z = base_0.z + Bracciolo_Offset

         if( VAR_Tipologia == 3
           | VAR_Tipologia == 4 )
         {
            @base_0.x = base_0.x + Bracciolo_Offset
            if( VAR_Schienale_Verso == 1 ) { @base_0.x = base_0.x }
         }
      }

      GOSUB rivestimento
      @BLEND__ = Blend
      @HIDE = 1
   }

   //Scasso seduta > bracciolo-schienale
   Posiziona BloccoBlend sedscs
   {
      @escluso = 1
      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Altana") { @escluso = 0 }

      @X = Seduta_X
      @Y = Seduta_Y + Blend
      @Z = Seduta_Z + Blend

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + $DivanoAltana_Gambe_Y - Blend
      @base_0.z = base_0.z + Z/2 - @Z/2

      if( VAR_Schienale_Verso == -1 ) { @base_0.x = base_0.x + Bracciolo_Offset }
      if( VAR_Schienale_Verso ==  1 ) { @base_0.x = base_0.x }

      //Altana laterale e chaise loungue
      if( VAR_Modello_Str == "Altana" ) { @base_0.z = base_0.z + Bracciolo_Offset }

      @BLEND__ = Blend
      @HIDE = 1
      SHOW_MODE(ATTUALE(),0)

      GOSUB ScassaChiPlus_M4
      @Scassa_Chi_Plus = STRCAT(STR(idx_sch),";",STR(idx_brsx),";",STR(idx_brdx))
   }

   Posiziona BloccoBlend sch
   {
      @escluso = 1
      if( Seduta_modello_exist == 0 ) { @escluso = 0 }

      @X = Schienale_X
      @Y = Schienale_Y
      @Z = Schienale_Z

      @base_0.x = base_0.x + X/2 - @X/2
      if( VAR_Schienale_Verso == -1 ) { @base_0.x = base_0.x }
      if( VAR_Schienale_Verso ==  1 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z

      //Biza laterale aperto
      if( VAR_Modello_Str == "Biza" )
      {
         if( VAR_Tipologia == 3
           & VAR_Schienale_Tipologia_Str == "Intero" )
         {
            @base_0.x = base_0.x - Bracciolo_Offset
            if( VAR_Schienale_Verso == 1 ) { @base_0.x = base_0.x + X + Bracciolo_Offset - @X }
         }
      }

      GOSUB rivestimento
      @BLEND__ = Blend
      @HIDE = 1

      idx_sch = ATTUALE()
   }

   //Scasso schienale-bracciolo
   Posiziona BloccoBlend schscs
   {
      @escluso = 1
      if( VAR_Tipologia >= 3
        & VAR_Modello_Str == "Altana" ) { @escluso = 0 }

      if( VAR_Modello_Str == "Biza"
        & ( VAR_Tipologia == 1
          | VAR_Tipologia == 3
          | VAR_Tipologia == 7 ))       { @escluso = 0 }

      @X = Schienale_X
      @Y = Schienale_Y
      @Z = Schienale_Z

      @base_0.x = base_0.x + X/2 - @X/2
      if( VAR_Schienale_Verso == -1 ) { @base_0.x = base_0.x }
      if( VAR_Schienale_Verso ==  1 ) { @base_0.x = base_0.x + X - @X }
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z

      @BLEND__ = Blend
      @HIDE = 1
      SHOW_MODE(ATTUALE(),0)

      GOSUB ScassaChiPlus_M4
      @Scassa_Chi_Plus = STRCAT(STR(idx_brsx),";",STR(idx_brdx))
   }

   Posiziona BloccoBlend bradx
   {
      @escluso = 1
      if( Seduta_modello_exist == 0 )
      {
         if( VAR_Tipologia != 2 )
         {
            if( VAR_Schienale_Verso == 1
              | VAR_Schienale_Verso == 2 )    { @escluso = 0 }

            if( VAR_Tipologia == 3 )
            {
               if( VAR_Modello_Str == "Biza"
                 & VAR_Schienale_Tipologia_Str == "Aperto" ) { @escluso = 1 }
            }
         }
      }

      @X = Bracciolo_Z
      @Y = Bracciolo_Y
      @Z = Bracciolo_X

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + Y - @Y
      @base_0.z = base_0.z

      GOSUB rivestimento
      @BLEND__ = Blend
      @HIDE = 1

      idx_brdx = ATTUALE()
   }

   Posiziona BloccoBlend brasx
   {
      @escluso = 1
      if( Seduta_modello_exist == 0 )
      {
         if( VAR_Tipologia != 2 )
         {
            if( VAR_Schienale_Verso == -1
              | VAR_Schienale_Verso == 2 ) { @escluso = 0 }

            if( VAR_Tipologia == 3 )
            {
               if( VAR_Modello_Str == "Biza"
                 & VAR_Schienale_Tipologia_Str == "Aperto" ) { @escluso = 1 }
            }
         }
      }

      @X = Bracciolo_Z
      @Y = Bracciolo_Y
      @Z = Bracciolo_X

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

      GOSUB rivestimento
      @BLEND__ = Blend
      @HIDE = 1

      idx_brsx = ATTUALE()
   }

   Posiziona DivanoGen_BaseTelaio tel
   {
      @escluso = 1
      if( Piedini_modello_exist == 0 )
      {
         if( VAR_Modello_Str == "Londy"
           | VAR_Modello_Str == "Altana"
           | VAR_Modello_Str == "Biza"  ) { @escluso = 0 }
      }

      @X = Seduta_X
      @Y = BaseTelaio_Y + Piedino_Y
      @Z = Seduta_Z

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

      //Altana laterale e chaise loungue
      if( VAR_Modello_Str == "Altana" )
      {
         @base_0.z = base_0.z + Bracciolo_Offset

         if( VAR_Tipologia == 3
           | VAR_Tipologia == 4 )
         {
            @base_0.x = base_0.x + Bracciolo_Offset
            if( VAR_Schienale_Verso == 1 ) { @base_0.x = base_0.x }
         }
      }
   }

   //Grafica con modelli 3d
   Posiziona __import__ sed_sat
   {
      @escluso = 1
      if( Seduta_modello_exist > 0
        & Seduta_modello_tipologia == "Sat" ) { @escluso = 0 }

      @import = Seduta_modello_import

      GOSUB posa_blocco

      if( VAR_Modello_Str == "Happening" )
      {
         @base_0.x = base_0.x + @X/2
         @base_0.y = base_0.y + @Y/2 + 18
         @base_0.z = base_0.z + @Z/2
      }

      GOSUB rivestimento

      @HIDE = 1
   }

   Posiziona __import__ pie_sat
   {
      @escluso = 1
      if( Piedini_modello_exist > 0
        & Piedini_modello_tipologia == "Sat" ) { @escluso = 0 }

      @import = Piedini_modello_import

      GOSUB posa_blocco

      if( VAR_Modello_Str == "Happening" )
      {
         @base_0.x = base_0.x + @X/2
         @base_0.y = base_0.y + @Y/2 + 18
         @base_0.z = base_0.z + @Z/2
      }

      @HIDE = 1
      @c_rivestimento = $c_nero

      if( FIN_var_gambe == "" ) { EXITSUB() }
      FIN_var_prec = FIN_var
      FIN_var = FIN_var_gambe
      GOSUB rivestimento
      FIN_var = FIN_var_prec
   }

   Posiziona M4S sed_m4s
   {
      @escluso = 1
      if( Seduta_modello_exist > 0
        & Seduta_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Seduta_modello_import

      GOSUB posa_blocco

      //Simone 17/01/2023
      GOSUB Scala_M4S
      @scale__ = [M4S_scala_x, 1, 1]

      scale_seduta = @scale__

      GOSUB rivestimento

      @HIDE = 1
   }

   Posiziona M4S fnd_m4s
   {
      @escluso = 1
      if( Fondo_modello_exist  > 0
        & Fondo_modello_tipologia  == "M4s"
        & Seduta_modello_exist > 0
        & Seduta_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Fondo_modello_import

      GOSUB posa_blocco

      //Simone 17/01/2023
      @scale__ = scale_seduta

      GOSUB rivestimento

      @HIDE = 1
   }

   Posiziona M4S pie_m4s
   {
      @escluso = 1
      if( Piedini_modello_exist > 0
        & Piedini_modello_tipologia == "M4s" ) { @escluso = 0 }

      @import = Piedini_modello_import

      GOSUB posa_blocco

      //Simone 17/01/2023
      @scale__ = scale_seduta

      @c_rivestimento = $c_nero

      @HIDE = 1
   }

   Posiziona RigaOrdine_Sostituzione rives
   {
      @FLAG_escluso = 1
      if( VAR_Modello_Str == "Londy"
        | (VAR_Modello_Str == "Biza" & VAR_Tipologia_Str == "ArmChair") )
      {
         @FLAG_escluso = 0
         @VAR_Gest_Codice = STRCAT(wk_cod_topl,"R")
      }

      GOSUB posa_blocco

      @FLAG_Sost_Check_Idx_Padre = 1
      @VAR_Sost_Check_Msg = "Non è possibile sostituire sia la base che il rivestimento, selezionare solo la base"
   }
}

Elemento DivanoGen_BaseTelaio
{
   Descrizione = "Telaio divano"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"       1000
      Y    "Altezza"          200
      Z    "Profondità"      1000

      VAR_Modello_Divano   ""   1  Implicit
      VAR_Modello_Str      ""  ""  Implicit

      Piedino_X            ""   0  Implicit
      Piedino_Y            ""   0  Implicit
      Piedino_Z            ""   0  Implicit
      BaseTelaio_Y         ""   0  Implicit

      FIN_var              ""  "C136"

      idx_pie1             ""  -1
      idx_pie2             ""  -1
      idx_pie3             ""  -1
      idx_pie4             ""  -1

      HIDE                 ""   1
   }

   Assegnazioni
   {
      GOSUB AssComune

      Blend  = 20
      if( VAR_Modello_Str == "Biza" ) { Blend  = 40 }

      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Posiziona BloccoBlend base
   {
      @escluso = 1
      if( BaseTelaio_Y > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @Y = BaseTelaio_Y
      @base_0.y = base_0.y + Piedino_Y

      @BLEND__ = Blend
      GOSUB rivestimento

      if( VAR_Modello_Str == "Altana" )
      {
         GOSUB ScassaChiPlus_M4
         @Scassa_Chi_Plus = STRCAT(STR(idx_pie1),";",STR(idx_pie2),";",STR(idx_pie3),";",STR(idx_pie4))
      }
   }

   //SX RT
   Posiziona DivanoGen_Piedino pie1
   {
      @Y = Piedino_Y + Blend

      @base_0 = base_0
      @base_0.z = @base_0.z + @X
      @ang_y = 90

      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Londy" )
      {
         @X = Piedino_X
         @Y = Piedino_Y
         @Z = Piedino_Z
         @base_0.x = @base_0.x + Blend
         @base_0.z = @base_0.z + Blend
      }

      idx_pie1 = @idx_grafica
   }

   //SX FR
   Posiziona DivanoGen_Piedino pie2
   {
      @Y = Piedino_Y + Blend

      @base_0 = base_1
      @base_0.z = @base_0.z - @Z
      @ang_y = 0

      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Londy" )
      {
         @X = Piedino_X
         @Y = Piedino_Y
         @Z = Piedino_Z
         @base_0.x = @base_0.x + Blend
         @base_0.z = @base_0.z -  Blend
      }

      idx_pie2 = @idx_grafica
   }

   //DX FR
   Posiziona DivanoGen_Piedino pie3
   {
      @Y = Piedino_Y + Blend

      @base_0 = base_2
      @base_0.x = @base_0.x - @Z
      @ang_y = 90

      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Londy" )
      {
         @X = Piedino_X
         @Y = Piedino_Y
         @Z = Piedino_Z
         @base_0.x = @base_0.x - Blend
         @base_0.z = @base_0.z - Blend
      }

      idx_pie3 = @idx_grafica
   }

   //DX RT
   Posiziona DivanoGen_Piedino pie4
   {
      @Y = Piedino_Y + Blend

      @base_0 = base_3
      @base_0.x = @base_0.x - @X

      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Londy" )
      {
         @X = Piedino_X
         @Y = Piedino_Y
         @Z = Piedino_Z
         @base_0.x = @base_0.x - Blend
         @base_0.z = @base_0.z + Blend
      }

      idx_pie4 = @idx_grafica
   }
}

Elemento DivanoGen_Piedino
{
   Descrizione = "Piedino divano"
   Code        = COD
   Gruppo      = "A"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"       51.2
      Y    "Altezza"         143
      Z    "Profondità"      51.2

      VAR_Modello_Divano   ""   1  Implicit
      VAR_Modello_Str      ""  ""  Implicit

      Piedino_X            ""   1  Implicit
      Piedino_Y            ""   1  Implicit
      Piedino_Z            ""   1  Implicit

      FIN_var              ""  "C032"

      idx_grafica          ""  -1
   }

   Assegnazioni
   {
      GOSUB AssComune

      k = 0
      if( VAR_Modello_Str == "Altana" )
      {
         k = (SENO(45)*$DivanoAltana_Piede_Z)
         if( ACTION() == 2)
         {
            X = $DivanoAltana_Piede_Z + k
            Y = Piedino_Y
            Z = X
         }
      }

      FIN_idx_gest = GetTopLevel(ATTUALE())
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona BloccoSmussatoY gam
   {
      @escluso = 1
      if( VAR_Modello_Str == "Altana" ) { @escluso = 0 }

      @X = $DivanoAltana_Piede_X
      @Y = Y
      @Z = $DivanoAltana_Piede_Z

      @R0 = @Z/2
      @R1 = @R0
      @R2 = @R0
      @R3 = @R0

      @ang_y = 45
      @base_0 = base_0
      @base_0.x = base_0.x + @R0 - k
      @base_0.z = base_0.z + @R0 + k

      GOSUB rivestimento
      idx_grafica = ATTUALE()
   }

   Posiziona CilindroY pie
   {
      @escluso = 1
      if( VAR_Modello_Str == "Biza"
        | VAR_Modello_Str == "Londy" ) { @escluso = 0 }

      GOSUB posa_blocco
   }

   Posiziona Blocco dbg
   {
      @escluso = 1

      GOSUB posa_blocco

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

//{ MADIA PLENUM
//Luca 06/05/2021
Elemento Madia_Plenum
{
   Descrizione = "Madia Plenum"
   Code        = AAA
   Gruppo      = "PLENUM"
   Tipo        = Contenitore
   Forma       = ""
   Alias       MadiaPlenum

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza Madia"   1848 Menu ( Larg_Madia )
      Y "Altezza"            742 ShowAlways
      Z "Profondità"         560 Menu ( Prof_Madia )

      //0 -- FINITURA UNICA - VETRO LUCIDO / OPACO
      //1 -- FINITURA UNICA - XGLASS LUCIDO / OPACO
      //2 -- 2 FINITURE - XGLASS LUCIDO / OPACO STRUTTUR - VETRO LUCIDO / OPACO TOP
      ConfigPlenum     "" 0

      ConBifacciale    "" 0
      ConLed           "" 0
      //LZ 26/05/2021: gestione passacavi
      ConPassacavi     "" 0

      VediLimiti_PCV   "" 0

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

      M4_A_MURO        ""  0

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

      FillerM2G        " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB AssMadiaPlenum
   }

   PuntiNotevoli
   {
      GOSUB punti

      vano_0_0.x = base_0.x
      vano_0_0.y = base_0.y
      vano_0_0.z = base_0.z //+ $Z_Schiena
      vano_l_0   = X/2 - $X_Fianco - $X_Div/2
      vano_h_0   = Y - Y_Fondo_Tot - $Y_Cop
      vano_p_0   = Zt //- $Z_Schiena

      vano_0_1.x = base_0.x + X/2
      vano_0_1.y = base_0.y
      vano_0_1.z = base_0.z //+ $Z_Schiena
      vano_l_1   = X/2 - $X_Fianco - $X_Div/2
      vano_h_1   = Y - Y_Fondo_Tot - $Y_Cop
      vano_p_1   = Zt //- $Z_Schiena

      vano_0_2 = base_0
      vano_l_2 = X
      vano_p_2 = Z
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 2 )
      {
         if( $query_p2 == 2 )
         {
            if( NOME($query_p1) != "Led_Plenum" ) { $QueryResult__ = 0 }
         }
         if( $query_p2 != 2 )
         {
            if( NOME($query_p1) == "Led_Plenum" ) { $QueryResult__ = 0 }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //Luca 06/05/2021
      GOSUB FIN_CalcolaPunti_TEXTURE_CV_Materia

      if( ACTION() > 0 & ACTION() !=2 & $OnLoadOrder != 1)
      {
         ConBifacciale = 0

         BOX_MODE(0)
         NEAR_GLOBALE2("pan",idx_cnear_rt,2,"Bifacciale_Plenum")
         if( pan > 0 )  { ConBifacciale = 1 }

         ConLed = 0
         COMPONENTI2("led",ATTUALE(),"Led_Plenum")
         if( led > 0 )  { ConLed = 1 }

         //LZ 26/05/2021: gestione passacavi
         ConPassacavi = 0
         COMPONENTI2("pcv",ATTUALE(),"Passacavi_368")
         if( pcv > 0 )  { ConPassacavi = 1 }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      if( ACTION() > 0 )
      {
         //LZ 26/05/2021: gestione passacavi
         //GEST_C009 = "__"
         //if( ConLed )  { GEST_C009 = "SM073" }
         //VarAdd = "GEST_C009"   GOSUB Add_TABER_VARSETTATE
         GOSUB Set_Gest_C009_Plenum
      }

      GOSUB GestComune_Post
   }

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

         //LZ 26/05/2021: gestione passacavi
         //GEST_C009 = "__"
         //if( ConLed )  { GEST_C009 = "SM073" }
         //VarAdd = "GEST_C009"   GOSUB Add_TABER_VARSETTATE
         GOSUB Set_Gest_C009_Plenum
      }
   }

   Posiziona Gambe_Plenum sossx
   {
      @base_0.x = base_0.x + RieX_Gamba
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Offset_Z_Rt_Pie
   }

   Posiziona Gambe_Plenum sosdx
   {
      @base_0.x = base_0.x + X - @X - RieX_Gamba
      @base_0.y = base_0.y
      @base_0.z = base_0.z + $Offset_Z_Rt_Pie
      @Verso = 1
   }

   Posiziona Ass_Fondo_Plenum fnd
   {
      @base_0 = base_0
      @base_0.x = base_0.x + X/2 - X_Fondo/2
      @base_0.y = base_0.y + $Y_Sost - $Offset_Y_Fnd
      @X = X_Fondo
      @Z = Zt
   }

   Posiziona Fianco_Plenum fiasx
   {
      @base_0.x = base_0.x
      @base_0.y = base_0.y + $Y_Sost - $Offset_Y
      @base_0.z = base_0.z
      @X = $X_Fianco
      @Y = $Y_Fianco
      @Z = Z

      @Pos_Fianco = "SX"
   }

   Posiziona Fianco_Plenum fiadx
   {
      @base_0.x = base_0.x + X - $X_Fianco
      @base_0.y = base_0.y + $Y_Sost - $Offset_Y
      @base_0.z = base_0.z
      @X = $X_Fianco
      @Y = $Y_Fianco
      @Z = Z

      @Pos_Fianco = "DX"
   }

   Posiziona Schiena_Plenum sch
   {
      @base_0.x = base_0.x + X/2 - X_Schiena/2
      @base_0.y = base_0.y + Y_Fondo_Tot - $MagY_Sch
      @base_0.z = base_0.z + $RieZ_Sch
      @X = X_Schiena
      @Y = $Y_Schiena
      @Z = $Z_Schiena
   }

   Posiziona Coperchio_Plenum cop
   {
      @base_0.x = base_0.x + X/2 - X_Fondo/2
      @base_0.y = base_0.y + $Y_Sost + $Y_Fianco - $Y_Cop - $Y_Bin_Sup - $Offset_Y
      @base_0.z = base_0.z
      @X = X_Fondo
      @Y = Y_Cop_Tot
      @Z = Zt
   }

   Posiziona Divisorio_Plenum  divp
   {
      @base_0.x = base_0.x + X/2 - $X_Div/2
      @base_0.y = base_0.y + Y_Fondo_Tot
      @base_0.z = base_0.z + $Z_Schiena + $RieZ_Sch + 1
      @X = $X_Div
      @Y = $Y_Div
      @Z = Z_Div
   }

   Posiziona Top_Vetro_Plenum top
   {
      @base_0.x = base_0.x + $Offset_X_Top
      @base_0.y = base_0.y + Y - $Y_Top
      @base_0.z = base_0.z
      @X = X_Top
      @Z = Z
   }

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

Elemento Bifacciale_Plenum
{
   Descrizione = "Bifacciale Plenum"
   Code        = AAA
   Gruppo      = "PLENUM"
   Tipo        = Contenitore
   Forma       = ""
   Alias CheckBifaccialePassacavi

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza Madia"   1840 ShowAlways
      Y "Altezza"            644 ShowAlways
      Z "Profondita"          20 ShowAlways

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

      M4_A_MURO          ""    0
      M4_CNT_LINK_MODE__ ""    2


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

      FillerM2G          " "   "" ShowAlways

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

   Assegnazioni
   {
      GOSUB AssComune

      RieX_Pan = 18
      RieY_Pan_Inf = 63.50
      RieY_Pan_Sup = 38.50
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type == 1 )
      {
         if( $M4_DragInfo_Mode==0 )
         {
            if( NOME($M4_DragInfo_Ref) == "Madia_Plenum" )
            {
               if( X > VAR_VAL($M4_DragInfo_Ref,"X")
                 | X < VAR_VAL($M4_DragInfo_Ref,"X") - 50 )
               {
                  DELETE_ME = 1
                  DELETE_ME_msg = STRCAT(MSG(1090),"\n",MSG(1279) )
               }

               if( VAR_VAL($M4_DragInfo_Ref,"ConBifacciale") == 1 )
               {
                  DELETE_ME = 1
                  DELETE_ME_msg = STRCAT(MSG(1090),"\n",MSG(1216) )
               }

               wk_offx = -4
               //LZ 14/05/2021
               //wk_offy = -2
               wk_offy = -4
               wk_offz = 16

               wk_str_new = CostruisciStrCnt2("D-","A+","R+",STRCAT(STR(wk_offx)," ",STR(wk_offy)," ",STR(wk_offz)," 180"))

               $M4_DragInfo_Cnt = wk_str_new
               $QueryResult__ = 3

            }
            else
            {
               DELETE_ME = 1
               DELETE_ME_msg = STRCAT(MSG(1090),"\n",MSG(1279) )
            }
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura CtrlStatici
   {
      //cancello
      GOSUB CtrlStatici_Lib_AIR
   }


   Posiziona Pannello16_Plenum pom
   {
      @base_0 = base_0
      @base_0.x = base_0.x + RieX_Pan
      @base_0.y = base_0.y + RieY_Pan_Inf
      @X = X - 2*RieX_Pan
      @Y = Y - RieY_Pan_Inf - RieY_Pan_Sup
   }

   Posiziona Pan_Vetro_Plenum vet
   {
      @base_0 = base_0
      @base_0.z = base_0.z + 16
      @X = X
      @Y = Y
   }
}

Elemento Coperchio_Plenum
{
   Descrizione = "Coperchio madia plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X                "" 1840
      Y                ""   42
      Z                ""  560
      Zt               ""    0  Implicit

      RADICE           ""  "COMP"
      GEST_CODICE      ""  ""

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

      //LZ 26/05/2021: gestione passacavi
      Y_Cop_Tot        ""   50  Implicit
      Pcv_Largh        ""  100
      Pcv_Alt          ""  100
      Pcv_OffY         ""   10  Implicit

      VediLimiti_PCV   ""    0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 26/05/2021: gestione passacavi
      Pcv_Alt = Y_Cop_Tot + $Y_Top + Pcv_OffY
   }

   PuntiNotevoli
   {
      GOSUB punti

      //LZ 26/05/2021: gestione passacavi
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 26/05/2021: gestione passacavi
      GOSUB Set_Gest_C008_Cop_Plenum
      GEST_Y = 38

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + $Y_Bin_Sup
      @X = X
      @Y = $Y_Cop
      @Z = Zt
      GOSUB rivestimento
   }

   Posiziona Binario_Plenum bin
   {
      GOSUB posa_blocco
      @Pos_Binario = "Sup"

      @X = X
      @Y = $Y_Bin_Sup
      @Z = $Z_Bin_Sup

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

   //LZ 26/05/2021: gestione passacavi
   Posiziona PCV_ContCollisioni_368 pcv_sx
   {
      GOSUB posa_blocco

      @X = Pcv_Largh
      @Y = Pcv_Alt

      @base_0.y = base_0.y + Y - Y_Cop_Tot
   }

   Posiziona PCV_ContCollisioni_368 pcv_dx
   {
      GOSUB posa_blocco

      @X = Pcv_Largh
      @Y = Pcv_Alt

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y + Y - Y_Cop_Tot
   }

   Posiziona PCV_ContCollisioni_368 pcv_rt
   {
      GOSUB posa_blocco

      @X = X - 2*Pcv_Largh
      @Z = Pcv_Largh
      @Y = Pcv_Alt

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

   Posiziona PCV_ContCollisioni_368 pcv_fr
   {
      GOSUB posa_blocco

      @X = X - 2*Pcv_Largh
      @Y = Pcv_Alt
      @Z = Pcv_Largh

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

Elemento Pannello38_Plenum
{
   Descrizione = "Pannello pomice 38mm plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 1
      Y "" 1
      Z "" 38

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      FIN_idx_gest = PADRE(ATTUALE(),1)
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Pannello19_Plenum
{
   Descrizione = "Pannello pomice 19mm plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 1
      Y "" 1
      Z "" 19

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      FIN_idx_gest = PADRE(ATTUALE(),1)
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Pannello16_Plenum
{
   Descrizione = "Pannello pomice 16mm plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X "" 1
      Y "" 1
      Z "" 16

      FIN_var     ""  "C002"
      FIN_orie    ""  "O"
      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      FIN_idx_gest = PADRE(ATTUALE(),1)
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento Pan_Vetro_Plenum
{
   Descrizione = "Vetro 4 Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      X "" 1
      Y "" 1
      Z "" 4
      HIDE "" 1

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

   Assegnazioni
   {
      GOSUB AssComune
      FIN_idx_gest = PADRE(ATTUALE(),1)
      FIN_var = "C042"
      if( NOME(PADRE(ATTUALE(),1))=="Anta_Plenum" ) { FIN_var = "C001" }
      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      //Luca 06/05/2021 x continuità vena
      @FIN_TEXTURE_VAR = FIN_var
   }
}

Elemento Binario_Plenum
{
   Descrizione = "Binario Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      Pos_Binario "" ""

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( Pos_Binario == "SUP" ) { Y = $Y_Bin_Sup }
      if( Pos_Binario == "INF" ) { Y = $Y_Bin_Inf }

      GOSUB Stato_7
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

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

Elemento Divisorio_Plenum
{
   Descrizione = "Divisorio Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 38
      Y "" 543
      Z "" 412

      //GEST_CODICE "" "L22001"
      GEST_CODICE "" ""
      RADICE      "" "DIVMPL"

      FIN_var     ""  "C002"
      FIN_orie    ""  ""

      //LZ 26/05/2021: gestione passacavi
      Y_Cop_Tot        ""  50  Implicit
      Y_Fondo_Tot      ""  50  Implicit

      Pcv_Largh        ""  100
      Pcv_Alt          ""  100
      Pcv_OffY         ""  10  Implicit

      VediLimiti_PCV   ""  0   Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 26/05/2021: gestione passacavi
      Pcv_Alt = Y_Cop_Tot - $Y_Bin_Sup + $Y_Top + Pcv_OffY
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco div
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }

   //LZ 26/05/2021: gestione passacavi
   Posiziona PCV_ContCollisioni_368 pcv_alt
   {
      GOSUB posa_blocco

      @Y = Pcv_Alt
      @base_0.y = base_0.y + Y
   }

   Posiziona PCV_ContCollisioni_368 pcv_ba
   {
      GOSUB posa_blocco

      @Y = Y_Fondo_Tot
      @base_0.y = base_0.y - @Y
   }
}

Elemento Rip_Vetro_Plenum
{
   Descrizione = "Ripiano Vetro Madia Plenum"
   Code        = AAA
   Gruppo      = "PLENUM"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Madia_Plenum
   Altimetro    Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 880
      Y "" 8
      Z "" 460

      RADICE      ""  "RIMP"
      FIN_var     ""  "C006"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

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

      liv_max = VAR_VAL(idx_ref,"Y")

      liv_att = 276
      step = 999

      while ( liv_att<=liv_max )
      {
         ne = liv2add + 1
         liv2add = ne
         liv2addscr = ne
         liv2add[ne]    = liv_att
         liv2addscr[ne] = liv_att

         liv_att = liv_att + step
      }

      GOSUB livelli_add2
   }

   Attrezza
   {
      base_0.x = $vano_0.x + $X_Fianco + 1
      if( $vano_n == 1 )
      {
         base_0.x = $vano_0.x + $X_Div/2 + 1
      }
      base_0.y = $vano_0.y + $livello + @Y_Fondo_Tot //- 8.5
      base_0.z = $vano_0.z + @RieZ_RipV

      if( @X == 1848 ) { X = 880 }
      if( @X == 2216 ) { X = 1064 }

      Z = @Z - 100
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona Blocco rip
   {
      GOSUB posa_blocco
      GOSUB rivestimento
      @f_rivestimento = "0.9"
   }
}

Elemento Top_Vetro_Plenum
{
   Descrizione = "Top Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       Stp_TopPlenum

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 1
      Y "" 4
      Z "" 560

      ConfigPlenum     ""  0   Implicit

      COD_EREDITA      "" "PRE"

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

      //LZ 26/05/2021: gestione passacavi
      Y_Cop_Tot        ""  50  Implicit
      Pcv_Largh        ""  100
      Pcv_Alt          ""  100
      Pcv_OffY         ""  10  Implicit

      VediLimiti_PCV   ""  0   Implicit

      XGLASS           "Num. XGLASS" "" Utente ( )

      //LZ 06/10/2021: gestione top speciale
      FLAG_Speciale    ""  0   Boolean
   }

   Assegnazioni
   {
      GOSUB AssComune

      //LZ 26/05/2021: gestione passacavi
      Pcv_Alt = Y_Cop_Tot + $Y_Top + Pcv_OffY

      RADICE = "TOPMPVLO"
      if( ConfigPlenum == 1 ) { RADICE = "TOPMPVXG" }

      //LZ 06/10/2021: gestione top speciale
      HIDE_ON_EDIT2(ATTUALE(),"FLAG_Speciale",1)
   }

   PuntiNotevoli
   {
      GOSUB punti

      //LZ 26/05/2021: gestione passacavi
      vano_0_0 = base_0
      vano_l_0 = X
      vano_p_0 = Z

      pnt_top_b0 = base_0
      pnt_top_b1 = base_1
      pnt_top_b2 = base_2
      pnt_top_b3 = base_3
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //LZ 26/05/2021: gestione passacavi
      GOSUB Set_Gest_C008_Top_Plenum

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         if( FLAG_Speciale == 0)
         {
            BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
         }

         fin_top = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C042")
         if( ConfigPlenum == 2 ) { fin_top = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C099") }

         if( fin_top != "" & fin_top != "__" )
         {
            GEST_C028 = fin_top
            VarAdd = "GEST_C028"   GOSUB Add_TABER_VARSETTATE
         }

         //LZ 26/05/2021: gestione passacavi
         GOSUB Set_Gest_C008_Top_Plenum
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco bl1
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      //Luca 06/05/2021 x continuità vena
      @FIN_TEXTURE_VAR = FIN_var
   }

   //LZ 26/05/2021: gestione passacavi
   Posiziona PCV_ContCollisioni_368 pcv_sx
   {
      GOSUB posa_blocco

      @X = Pcv_Largh
      @Y = Pcv_Alt

      @base_0.y = base_0.y - Y_Cop_Tot
   }

   Posiziona PCV_ContCollisioni_368 pcv_dx
   {
      GOSUB posa_blocco

      @X = Pcv_Largh
      @Y = Pcv_Alt

      @base_0.x = base_0.x + X - @X
      @base_0.y = base_0.y - Y_Cop_Tot
   }

   Posiziona PCV_ContCollisioni_368 pcv_rt
   {
      GOSUB posa_blocco

      @X = X - 2*Pcv_Largh
      @Y = Pcv_Alt
      @Z = Pcv_Largh

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

   Posiziona PCV_ContCollisioni_368 pcv_fr
   {
      GOSUB posa_blocco

      @X = X - 2*Pcv_Largh
      @Y = Pcv_Alt
      @Z = Pcv_Largh

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

Elemento Schiena_Plenum
{
   Descrizione = "Schiena Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X "" 1817
      Y "" 558
      Z "" 8

      RADICE      ""  "SCHMP"
      GEST_CODICE ""  ""

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

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Blocco div
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + $MagX_Sch
      @base_0.y = base_0.y + $MagY_Sch
      @X = X - 2*$MagX_Sch
      @Y = Y - 2*$MagY_Sch
      GOSUB rivestimento
   }
}

Elemento Ass_Fondo_Plenum
{
   Descrizione = "Assieme Fondo Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X           "" 1802
      Y           ""   60
      Z           ""  538
      Zt          ""    0   Implicit

      RADICE      ""  "FOMP"
      GEST_CODICE ""  ""

      FIN_var     ""  ""
      FIN_orie    ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z_Fnd_Inf = Zt - $Z_Bin_Inf
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_Y = 57

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello38_Plenum p38
   {
      GOSUB posa_blocco

      @Y = $Y_Fnd_Inf
      @Z = Z_Fnd_Inf
      @base_0.y = base_0.y + $Y_Bin_Inf - @Y
   }

   Posiziona Pannello19_Plenum p19
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + $Y_Bin_Inf
      @Y = $Y_Fnd_Sup
      @Z = Zt
      GOSUB rivestimento
   }

   Posiziona Binario_Plenum bin
   {
      GOSUB posa_blocco
      @Pos_Binario = "Inf"
      @base_0.z = base_0.z + Z_Fnd_Inf
      @Z = $Z_Bin_Inf
   }
}

Elemento Gambe_Plenum
{
   Descrizione = "Assieme Gambe Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc
      X           ""   60
      Y           ""  100
      Z           ""  450

      Z_Sost      ""  450  Implicit

      //GEST_CODICE ""  "D18006"
      RADICE      ""   "SOSMPL"

      Verso       ""   -1

      FIN_var     ""  "C023"
      FIN_orie    ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z_Staffa_L_Sost = Z_Sost - $Offset_Z_Rt_Staffa_L - $Offset_Z_Fr_Staffa_L
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Z = Z_Sost

      //LZ 11/06/2021: blocco modifica finitura dal figlio
      if( VAR_EXIST(ATTUALE(),"GEST_C023") )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C023") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C023") }
      }

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _sweep_staffa_Plenum stfLsos
   {
      @X = $X_Staffa_L_Sost
      @Y = $Y_Staffa_L_Sost
      @Z = Z_Staffa_L_Sost

      @base_0.x = base_0.x
      @base_0.y = base_0.y + Y - $Y_Staffa_L_Sost
      @base_0.z = base_0.z + $Offset_Z_Rt_Staffa_L
      if( Verso > 0 )
      {
         @base_0.x = base_0.x + @X
         @base_0.z = base_0.z + @Z

         @ang_y = 180
      }
      GOSUB rivestimento
   }

   Posiziona Blocco lamasos
   {
      @X = $X_Sost
      @Y = $Y_Lama_Sost
      @Z = Z_Sost

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

      GOSUB rivestimento
   }
}

Elemento _sweep_staffa_Plenum
{
   Descrizione = ""
   Code        = AAA
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

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

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

   PuntiNotevoli
   {
      base_0  = [0, 0, 0]
      base_1  = [$Spe_Staffa_L_Sost, 0, 0]
      base_2  = [$Spe_Staffa_L_Sost, Y-$Spe_Staffa_L_Sost, 0]
      base_3  = [X, Y-$Spe_Staffa_L_Sost, 0]
      base_4  = [X, Y, 0]
      base_5  = [0, Y, 0]

      alto_0  = [0, 0, Z]
   }
}

Elemento Fianco_Plenum
{
   Descrizione = "Fianco Madia Plenum"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X            ""  23
      Y            "" 644
      Z            "" 538
      Zt           ""   0  Implicit

      ConfigPlenum ""   0  Implicit

      Pos_Fianco   ""  ""

      FIN_var      ""  "C042"
      FIN_orie     ""  ""

      RADICE       "" ""
      perRADICE    ""  ""

      COD_EREDITA  "" "PRE"

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

   Assegnazioni
   {
      GOSUB AssComune

      Verso = -1
      if( Pos_Fianco == "DX" ) { Verso = 1 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      //GEST_CODICE = "L21002"
      //if( ConfigPlenum == 0 ) { GEST_CODICE = "L21001" }

      perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")
      GEST_CODICE = ""

      perRADICE = "FIMPVXG"
      if( ConfigPlenum == 0 ) { perRADICE = "FIMPVLO" }

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

      if( Pos_Fianco == "SX" ) { GEST_C003 = "SX001" }
      if( Pos_Fianco == "DX" ) { GEST_C003 = "DX001" }
      VarAdd = "GEST_C003"   GOSUB Add_TABER_VARSETTATE

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C042" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello19_Plenum panp
   {
      GOSUB posa_blocco

      @X = $X_Fianco_Legno
      @Z = Zt
      if( Pos_Fianco == "SX" ) { @base_0.x = base_0.x + $Spe_Vet }

      GOSUB rivestimento
   }

   Posiziona Pan_Vetro_Plenum panv
   {
      GOSUB posa_blocco

      @base_0.x = base_0.x + $X_Fianco_Legno
      @X = $Spe_Vet
      if( Pos_Fianco == "SX" ) { @base_0.x = base_0.x }

      @Verso = Verso

      GOSUB rivestimento
   }
}

Elemento Anta_Plenum
{
   Descrizione    = "Anta Madia Plenum"
   Code           = AAA
   Gruppo         = "PLENUM"
   Tipo           = Contenitore
   Forma          = ""
   Altimetro      Auto
   Attrezzabile   Madia_Plenum
   Alias          Frontale;AntaGrafica

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"   916
      Y   "Altezza"     641
      Z   "(Spessore)"   20

      ConfigPlenum  ""    0 Implicit

      Pos_Anta      ""   ""

      //RADICE      ""   "ANMPVLO"

      COD_EREDITA   ""   "PRE"

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

   Assegnazioni
   {
      GOSUB AssComune
      if( Pos_Anta == "SX" ) { GEST_C003 = "SX001"}
      if( Pos_Anta == "DX" ) { GEST_C003 = "DX001"}
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLiv_Anta_Arm20
   }

   Attrezza
   {
      idx_ref = @idx_att

      base_0.x = $vano_0.x + 4
      base_0.y = $vano_0.y + $livello + $Y_Sost - $Offset_Y
      base_0.z = $vano_0.z + $profondita + 3
      if( $vano_n == 0 )
      {
         Pos_Anta = "SX"
         base_0.x = $vano_0.x + 7
      }
      if( $vano_n == 1 )
      {
         Pos_Anta = "DX"
         base_0.x = $vano_0.x + 1
      }

      Y = 641

      if( @X == 1848 ) { X = 916 }
      if( @X == 2216 ) { X = 1100 }
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "ANMPVXG"
      if( ConfigPlenum == 0 ) { perRADICE = "ANMPVLO" }

      RADICE = perRADICE

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

         fin_top = VAR_VAL_STR(GetTopLevel(ATTUALE()),"GEST_C042")

         if( fin_top != "" & fin_top != "__" )
         {
            GEST_C001 = fin_top
            VarAdd = "GEST_C001"   GOSUB Add_TABER_VARSETTATE
         }
      }

   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Procedura azione
   {
      azione_idx_pdr = PADRE(idx_att,1)
      if ( Pos_Anta == "SX" ) { azione_verso = "DX" }
      if ( Pos_Anta == "DX" ) { azione_verso = "SX" }

      azione_val_max = X/2
      GOSUB azione_apertura_complanare
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Pannello16_Plenum pom
   {
      @base_0 = base_0
      @X = X
      @Y = Y
   }

   Posiziona Pan_Vetro_Plenum vet
   {
      @base_0 = base_0
      @base_0.z = base_0.z + 16
      @X = X
      @Y = Y
   }
}

Elemento Led_Plenum
{
   Descrizione = "Meccanismo estraibile"
   Code        = CUB
   Gruppo      = "PLENUM"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile Madia_Plenum
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  1848
      Y "Altezza"    10
      Z "Profondità" 11

      CMP2_AZIONI "" "A"

      VediIlluminazione "" 1

      perRADICE   ""  ""
      RADICE      ""  ""

      M4_MIS "" "X;OffX"
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_8

      DimX = 811
      if( X > 2000 )  { DimX = 995 }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnQueryBdmLocal
   {
      //posso attrezzare solo su ripiano e coperchio di colonne
      if( $query_type==8 )
      {
         $QueryResult__ = 1
         COMPONENTI2("led",$query_p1,"Led_Plenum")

         if( led>0 ) { $QueryResult__ = 0 }

         if( X != VAR_VAL($query_p1,"X") ) { $QueryResult__ = 0 }
      }
   }

   Procedura OnSetupLivelli
   {
      idx_ref  = $__lev_ref__
      vano_ref = $__lev_vano__

      DEL_VAR(idx_att,"liv2add*")

      liv2add = 1
      liv2add[1] = 0

      COMPONENTI2("led",idx_ref,"Led_Plenum")
      if( led>0 ) { annulla_ins = 1 }

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

   Attrezza
   {
      idx_ref = @idx_att
      vano_n = $vano_n

      wk_RieX  = 0
      wk_RieY  = -42
      wk_RieZF = 157

      base_0.x = $vano_0.x + wk_RieX
      base_0.y = $vano_0.y + @Y + wk_RieY - 1
      base_0.z = $vano_0.z + $profondita - Z - wk_RieZF
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      FLAG_RADICE = $FLAG_STANDARD + $NORID_Y + $NORID_Z

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

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

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

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

      idx_pdr = PADRE(ATTUALE(),1)
      COMANDO(STRCAT("RICALCOLA_UNA ",STR(idx_pdr)," no_agganciati //Led Plenum"))
   }

   Posiziona Blocco_Luce bl
   {
      GOSUB posa_blocco
      offx =  X/2 - 19 - DimX

      @base_0.x = base_0.x + offx
      @X = DimX

      @FacciaLuminosa = "UP"
   }

   Posiziona VediLuce vd1
   {
      @escluso = 1 - VediIlluminazione
      @base_0.x = base_0.x + offx + DimX/2 - @X/2
      @base_0.y = base_0.y - @Y - 2
      @base_0.z = base_0.z
   }

   Posiziona Blocco bl2
   {
      GOSUB posa_blocco
      offx =  X/2 + 19

      @base_0.x = base_0.x + X/2 + 19
      @X = DimX
      @c_rivestimento = [255,242,0]
   }

   Posiziona VediLuce vd2
   {
      @escluso = 1 - VediIlluminazione
      @base_0.x = base_0.x + offx + DimX/2 - @X/2
      @base_0.y = base_0.y - @Y - 2
      @base_0.z = base_0.z
   }
}
//} MADIA PLENUM

//Simone 30/09/21
Elemento TappetoGenerico
{
   Descrizione = "Tappeto"
   Code        = COD
   Gruppo      = "GRP"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "Larghezza"       1700       Menu ( X_Tappeto ) //Utente ( )
      Y       "Spessore"        1          ShowAlways
      Z       "Profondità"      2400       Menu ( Z_Tappeto ) //Utente ( )

      //0 RETTANGOLARE
      //1 ROTONDO - ELLITTICO
      VAR_Forma  "Forma Tappeto"       0   Menu ( Forma_Tappeto )

      //0 UNIFORME
      //1 FASCIA LARGA SUL LATO CORTO
      //2 FASCIA STRETTA SUL LATO CORTO
      //3 FASCIA STRETTA SUL LATO LUNGO
      VAR_Tipo   "Tipo trama tappeto"  0  Menu ( Trama_Tappeto )

      FIN_var_A  ""  "C125"
      FIN_var_B  ""  ""
      FIN_orie   ""  "O"

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

      FillerM2G  " "  ""  ShowAlways

      M4_CNT_MODE__   ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( ACTION() == 0 & $ATTIVA_DLL == 1 )
      {
         HIDE_ON_EDIT(ATTUALE(),"VAR_Forma",1)
         HIDE_ON_EDIT(ATTUALE(),"VAR_Tipo",1)
      }

      if( $ATTIVA_DLL == 1  )
      {
         VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS)
         VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS)

         //Simone 09/05/2023
         VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
         VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1
         CtrlRangeRidM2G(ATTUALE(),"X")
         CtrlRangeRidM2G(ATTUALE(),"Z")
      }

      Raggio = 0.5
      if( VAR_Forma > 0)
      {
         Raggio = X/2
         if( Z < X) { Raggio = Z/2 }
         Raggio = Raggio - 0.01
      }
   }

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = 8

      GOSUB GestComune_Post
   }

   Procedura OnQueryBdmCollision
   {
      if( $query_type==1 ) { $QueryResult__ = 1 }
   }

   Posiziona BloccoSmussatoY tap
   {
      GOSUB posa_blocco

      @R0 = Raggio      @R1 = Raggio
      @R2 = Raggio      @R3 = Raggio

      FIN_var = FIN_var_A
      GOSUB rivestimento
   }

   Posiziona Blocco fas_ret
   {
      @escluso = 1
      if( VAR_Forma == 0
        & VAR_Tipo > 0  ) { @escluso = 0 }

      GOSUB posa_blocco
      @X = X
      @Y = 1
      @Z = Z/2

      if( VAR_Tipo == 2 ) { @Z = Z/3 }
      if( Z < X )
      {
         @X = X/2
         @Z = Z
         if( VAR_Tipo == 2 ) { @X = X/3 }
      }

      if( VAR_Tipo == 3 )
      {
         @Z = Z
         @X = X/10  //??
         @base_0.x = base_0.x + X - 2*@X
         if( Z < X )
         {
            @X = X
            @Z = Z/10  //??
            @base_0.x = base_0.x
            @base_0.z = base_0.z + Z - 2*@Z
         }
      }
      @base_0.y = base_0.y + Y

      FIN_var = FIN_var_B
      GOSUB rivestimento
   }

   Posiziona _graf_trama_tappeto fas_tnd
   {
      @escluso = 1
      if( VAR_Forma >= 1
        & VAR_Tipo  == 1 ) { @escluso = 0 }

      @X1 = X/20
      if( Z < X) { @X1 = Z/20 }
      @X  = X - 2*@X1
      @Z  = Z - 2*@X1

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

      FIN_var = FIN_var_B
      GOSUB rivestimento
   }
}

Elemento _graf_trama_tappeto
{
   Descrizione = "Fascia tappeto"
   Code        = GRF
   Gruppo      = "AAA"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X      ""   1500
      Y      ""   1
      Z      ""   1500

      X1     ""   200

      HIDE   ""   1
   }

   PuntiNotevoli
   {
      Raggio = X/2
      if( Z < X) { Raggio = Z/2 }
      Raggio = Raggio - 0.01

      K = Raggio - Raggio*SENO(45)

      base_0        =   [ 0,        0, Raggio   ]
      base_1        =   [ X1,       0, Raggio   ]
      base_2        =   [ X1,       Y, Raggio   ]
      base_3        =   [ 0,        Y, Raggio   ]

      base_path_0   =   [ 0,        0, Raggio   ]
      base_path_1   =   [ 0,        0, Z-Raggio ]
      arc_path_1    =   [ K,        0, Z-K      ]
      base_path_2   =   [ Raggio,   0, Z        ]
      base_path_3   =   [ X-Raggio, 0, Z        ]
      arc_path_3    =   [ X-K,      0, Z-K      ]
      base_path_4   =   [ X,        0, Z-Raggio ]
      base_path_5   =   [ X,        0, Raggio   ]
      arc_path_5    =   [ X-K,      0, K        ]
      base_path_6   =   [ X-Raggio, 0, 0        ]
      base_path_7   =   [ Raggio,   0, 0        ]
      arc_path_7    =   [ K,        0, K        ]
      base_path_8   =   [ 0,        0, Raggio   ]

      base_so       =   [ 0,        0, 0        ]
      alto_ne       =   [ X,        Y, Z        ]
   }
}
//}

// MODULO PUNTO {
//MicheleC 16/12/2021
Elemento ModuloPensile_Punto
{
   Descrizione = "Modulo Giorno Punto"
   Code        = T68
   Gruppo      = "Punto"
   Tipo        = Contenitore
   Forma       = ""
   Alias       Pensile;StampaXG;CtrlAllineamento368;NoCollision2
   Altimetro   Auto

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      genera_disegno_collo__ "Variabile per la gestione delle bindelle" 1

      X          "Larghezza"           680 ShowAlways
      Y          "Altezza"             680 ShowAlways
      Z          "Profondità"          196 ShowAlways

      Verso          "Verso apertura ante"               0

      VAR_specchio   "Misura specchio" 680  Menu ( XY_SpecchioPunto )

      ConPiedini         "" 0
      ConAttaccaglie     "" 0

      VAR_FixMuro        "Fissato a muro"      0 Menu ( SiNo )

      FLAG_ConPannelloLED "" 0 SaveAlways

      idx_fusto           "" -1
      idx_pannelloLED     "" -1

      CMP2_AZIONI      ""      "S"

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

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

      COD_EREDITA "" "PRE;POST"

      VAR_Illuminazione ""  0
      idx_illuminazione "" -1

      VT_NFC            "NFC" 1
   }

   Assegnazioni
   {
      X = 680
      Y = 680
      Z = 200

      X_fusto = 440
      Y_fusto = 440
      Z_fusto = 180

      if(VAR_specchio == 990)
      {
         X = 990
         Y = 990
         Z = 280

         X_fusto = 660
         Y_fusto = 660
         Z_fusto = 260
      }

      GOSUB AssComune
      GOSUB AssModuli_368

      RieZF_Rip = 9.65
      RieX_Rip  = 9

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

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Procedura OnQueryBdmLocal
   {
      GOSUB OnQueryBdmLocal_368
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivelloAccessorio_Testiera_L21
   }

   Controlli
   {
      GOSUB CtrlComune
      GOSUB CtrlModuli_368

      COMPONENTI2("VAR_Illuminazione", ATTUALE(), "Led_368")
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB Gestionale_368

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      GOSUB OnTabEredita_368
   }

   Procedura PostAction2
   {
      GOSUB PostAction2_cancella_368
   }

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

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

      GOSUB Offset_Modulo_368
   }

   Procedura cancella
   {
      GOSUB Cancella_Modulo_368
   }

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

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

      @X = X_fusto
      @Y = Y_fusto
      @Z = Z_fusto
   }

   Posiziona FustoModulo_368 fbs
   {
      @base_0.x = base_0.x + X/2 - X_fusto/2
      @base_0.y = base_0.y + Y/2 - Y_fusto/2
      @base_0.z = base_0.z

      @X = X_fusto
      @Y = Y_fusto
      @Z = Z_fusto

      idx_fusto = ATTUALE()
   }

   Posiziona RipianoVetroLiv_368 rip
   {
      @X = X_fusto - 2 * $M368_Spe_Fia - RieX_Rip
      @Y = $M368_Spe_Rip
      @Z = Z_fusto - $M368_Spe_Sch - $M368_Rie_Sch_ZR - RieZF_Rip - RieZR_Rip

      @base_0.x = base_0.x + (X - @X)/2
      @base_0.y = base_0.y + (Y - @Y)/2
      @base_0.z = base_0.z + $M368_Spe_Sch + $M368_Rie_Sch_ZR + RieZR_Rip

      @TipoRipiano = 0
   }

   Posiziona AntaPunto ant
   {
      GOSUB posa_blocco
      @Z = 16
      @base_0.z = base_1.z - @Z

      @VAR_Cerniera = 1
   }

   Posiziona RigaOrdine_NonGraficato ill
   {
      @escluso = 1
      if( VAR_Illuminazione > 0 ) { @escluso = 0 }

      @base_0 = base_0

      @X = 372
      wk_cod = "CU0641"
      if( VAR_Illuminazione > 1 ) { wk_cod = "CU0640" }

      if( VAR_specchio == 990 )
      {
         @X = 500
         wk_cod = "CU0643"
         if( VAR_Illuminazione > 1 ) { wk_cod = "CU0642" }
      }

      @GEST_CODICE = wk_cod
      @RIGA_ORDINE = 1
      idx_illuminazione = ATTUALE()
   }
}

//MicheleC 16/12/2021
Elemento AntaPunto
{
   Descrizione = "Anta Punto circolare"
   Code        = ANT
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X       "" 680
      Y       "" 680
      Z       ""  16

      D_vetro "" 682

      SpPan   "" 12

      Verso          "Verso apertura ante"     0  Implicit
      Apertura       "tipo Anta"              "BA"

      X_fusto        "" 440 Implicit
      Y_fusto        "" 440 Implicit

      VAR_Cerniera   "" 0
      Y_cerniera     "" 365
      X_cerniera     "" 30
      Z_cerniera     "" 20

      OX_cerniera    "" 0

      RADICE "" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      D_vetro = X + 2

      Y_cerniera = 365
      if( Y == 990 ) { Y_cerniera = 586 }

      OX_cerniera = (X - X_fusto - X_cerniera)/2
   }

   Controlli
   {
      GOSUB CtrlComune

      if( UN_PADRE("ModuloPensile_Punto") )
      {
         ALIAS_ADD(ATTUALE(),"Frontale")
      }
   }

   Procedura azione
   {
      if( UN_PADRE("SpecchioPunto") ) { EXITSUB() }

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

      AperturaAzione = Apertura

      if( VAR_EXIST(ATTUALE(),"azione_vel")==0 ) { azione_vel = 1 }

      if( ACTION()==6 )
      {
         ang_att      = ANG_TOT2(ATTUALE())
         azione_mode  = $az_ruota_y

         wk_offx = OX_cerniera + 7.5
         wk_offz = -10

         azione_point = base_3
         azione_point.x = base_3.x - wk_offx*COSENO(ang_att) + wk_offz*SENO(ang_att)
         azione_point.z = base_3.z + wk_offx*SENO(ang_att) + wk_offz*COSENO(ang_att)

         if( IS_MATCH(azione_verso,"SX")==1 )
         {
            //wk_offx = OX_cerniera - 7.5

            azione_point = base_0
            azione_point.x = base_0.x + wk_offx*COSENO(ang_att) + wk_offz*SENO(ang_att)
            azione_point.z = base_0.z - wk_offx*SENO(ang_att) + wk_offz*COSENO(ang_att)
         }
      }
      else
      {
         azione_valore = 90*($azione_valore/100)
         if( IS_MATCH(azione_verso,"SX")==1 )
         {
            azione_valore = -azione_valore
         }
      }
   }

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

   Gestionale
   {
      perRADICE = ""
      if( UN_PADRE("ModuloPensile_Punto") )
      {
         perRADICE = "ACP"
         GEST_X = D_vetro
         GEST_Y = D_vetro

         if( IS_VAR_FIXED( ATTUALE(), "Verso")) { DEL_VAR_MODIFICATE( ATTUALE(), "Verso") }
         if( IS_VAR_FIXED( ATTUALE(), "GEST_C007")) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C007") }
      }

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

      GOSUB GestComune_Post
   }

   Posiziona __import__ ig1
   {
      @base_0   = base_0
      @import   = STRCAT($path_sat,"Punto\PANN_",STR(Y),".SAT")

      FIN_var = "C033"
      GOSUB rivestimento
   }

   Posiziona CilindroZ fro
   {
      @X = D_vetro
      @Y = D_vetro
      @Z = $M368_Spe_VetAnt

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

      FIN_var = "C001"
      GOSUB rivestimento
   }

   Posiziona CernieraPunto cer
   {
      @escluso = 1 - VAR_Cerniera

      @X = X_cerniera
      @Y = Y_cerniera
      @Z = Z_cerniera

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

      @ang_z = 0
      if( Verso > 0 )
      {
         @ang_z = 180
         @base_0.x = base_0.x + X - OX_cerniera + @X/2
         @base_0.y = @base_0.y + @Y
      }
   }
}

//MicheleC 16/12/2021
Elemento CernieraPunto
{
   Descrizione = "Specchio Cerniera"
   Code        = NUL
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  ""     30
      Y  ""    365
      Z  ""     20

      RADICE "" "CCP"
   }

   Assegnazioni
   {
      GOSUB AssComune

      c_rivestimento = $c_alluminio
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }


   Gestionale
   {
      GEST_X = Y
      GEST_Y = X

      GOSUB GestComune_Post
   }

   Posiziona Blocco dbg
   {
      @escluso = 1
      GOSUB posa_blocco
      @c_rivestimento = [255, 0, 0]
      @f_rivestimento = "0.9"
   }

   Posiziona __import__ cern
   {
      GOSUB posa_blocco

      @Y = Y - 100

      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2

      @import   = STRCAT($path_sat,"Punto\CERN_",STR(Y),".SAT")

      @c_rivestimento = $c_alluminio
   }

   Posiziona __import__ alt
   {
      @X = 20
      @Y = 50
      @Z = 30

      @base_0 = base_0
      @base_0.x = base_0.x + X - @X
      @base_0.z = base_0.x + Z - @Z - 4
      @base_0.y = alto_0.y - @Y

      @import = STRCAT($path_sat,"Punto\CERN_ALT.SAT")

      @c_rivestimento = $c_alluminio
      @azione_locked = 1
   }

   Posiziona __import__ bas
   {
      @X = 20
      @Y = 50
      @Z = 30

      @base_0 = base_0
      @base_0.x = base_0.x + X - @X
      @base_0.z = base_0.x + Z - @Z - 4

      @import = STRCAT($path_sat,"Punto\CERN_BAS.SAT")

      @c_rivestimento = $c_alluminio
      @azione_locked = 1
   }
}

//MicheleC 16/12/2021
Elemento SpecchioPunto
{
   Descrizione = "Specchio punto"
   Code        = NUL
   Gruppo      = "Oggetti"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  ""    680
      Y  ""    680
      Z  ""     16

      M4_A_MURO      ""  1
      M4_VAR         ""  ""
      M4_GRUPPO__    ""  "LIVING"

      VAR_specchio   "Misura specchio"  680  Menu ( XY_SpecchioPunto )

      M4_MIS "" "VAR_specchio"

      HIDE   "" 2
   }

   Assegnazioni
   {
      GOSUB AssComune

      HIDE_ON_EDIT2(ATTUALE(),"VAR_specchio",$ATTIVA_DLL)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      idx_att = ATTUALE()

      X = VAR_specchio
      Y = VAR_specchio
   }

   Gestionale
   {
      GEST_X = X + 2
      GEST_Y = Y + 2

      GOSUB GestComune_Post
   }

   Posiziona AntaPunto spe
   {
      GOSUB posa_blocco

      @FIN_idx_gest = idx_att
      @VAR_Cerniera = 0
   }
}

// MODULO PUNTO }


// MODULO MORGANA {
//MicheleC 24/12/2021
//Elemento Morgana_Cassetto
Elemento Composizione_Morgana
{
   Descrizione = "Morgana_Cassetto"
   Code        = C0L
   Gruppo      = "Colonne"
   Tipo        = Contenitore
   Forma       = ""
   Alias       StampaXG;Morgana

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"    600 ShowAlways

      Yt   "Altezza"     180 ShowAlways

      Y   "Altezza"      180
      Z   "Profondità"   450 Menu ( ZMorgana )

      NrModuli "Numero Moduli" 1 Utente ( 1-7 )

      //Y_Pie             ""    0     SaveAlways
      //VAR_base          ""    1     SaveAlways
      //VAR_tipobase      "Tipo base"             1   Menu ( TpBasMor )
      //VAR_angolazione   "Angolo cassettiera"    0   Menu ( AngMorgana )

      //tipo appoggio definito da griglia Gemo
      TipoAppoggio       ""            1    Menu ( TpBasMor )
      TipoAppoggioStr    ""    "PIEDINI"

      VAR_scombussola   "Scombussola"     0 Boolean
      ang_scombussola   ""               10

      COD_EREDITA        ""    "POST"

      M4_A_MURO          ""    0
      M4_CNT_MODE__      ""    2
      M4_CNT_LINK_MODE__ ""    2

      M4_MIS "" "X;Yt;Z;VAR_scombussola;Filler*"

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Y_Pie    =  10
      Y_Ruote  = 127
      Y_Modulo = 180

      TipoAppoggioStr = "PIEDINI"
      if( TipoAppoggio == 2 ) { TipoAppoggioStr = "RUOTE" }

      if( ACTION() == 0 & $ATTIVA_DLL == 1 )
      {
         VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS)

         HIDE_ON_EDIT2(ATTUALE(),"NrModuli",1)
         HIDE_ON_EDIT2(ATTUALE(),"TipoAppoggio",1)
      }

      X_Off_Sco = 0
      Z_Off_Sco = 0

      if( VAR_scombussola==1 )
      {
         X_Off_Sco = 85
         Z_Off_Sco = 105
      }

      if( VAR_VAL(-1,"wk_StampeProduzione") )
      {
         VAR_scombussola_pre_stampe = VAR_scombussola
         if( IS_VAR_FIXED(ATTUALE(),"VAR_scombussola") ==1  ) { DEL_VAR_MODIFICATE(ATTUALE(),"VAR_scombussola") }
         VAR_scombussola = 0
      }
      else
      {
         if( VAR_VAL(ATTUALE(),"VAR_scombussola_pre_stampe") == 1 )
         {
            VAR_scombussola = 1
            VAR_SET_MODIFICATA(ATTUALE(),"VAR_scombussola","")
            DEL_VAR(ATTUALE(),"VAR_scombussola_pre_stampe")
         }
      }
   }

   PuntiNotevoli
   {
      Y = Y_Modulo * NrModuli
      //Simone 15/04/2022 - Non considero i piedini nella misura gestionale
      //Yt = Y + Y_Pie
      Yt = Y
      if( TipoAppoggioStr == "RUOTE" ) { Yt = Y + Y_Ruote }

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

   Controlli
   {
      GOSUB CtrlComune

      //Luca 14/04/2022
      GOSUB FIN_CalcolaPunti_TEXTURE_CV_Materia
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST" )
      {
         TipoAppoggioStr = "PIEDINI"
         if( VAR_VAL_STR(ATTUALE(),"GEST_C037") == "FR027" ) { TipoAppoggioStr = "RUOTE" }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GEST_Y = Yt

      //TODO - Da correggere in codifica
      GEST_Z = Z + 8

      //TODO - Filtro valori frontale
      //ORD_FILTRO_C001 = "!LC***"

      GOSUB GestComune_Post
   }

   //Procedura OnQueryBdmLocal
   //{
   //   if( $query_type == 1)
   //   {
   //      if( $M4_DragInfo_Mode == 0)
   //      {
   //         if( NOME($M4_DragInfo_Ref) == "Morgana_Cassetto" & $M4_DragInfo_SxDx == 0)
   //         {
   //            Y_Pie = 0
   //            VAR_base  = 0
   //            CHIEDI(ATTUALE(), "VAR_angolazione" )
   //         }
   //      }
   //
   //      if( $M4_DragInfo_Mode == 1)
   //      {
   //         CHIEDI(ATTUALE(), "VAR_tipobase")
   //      }
   //   }
   //
   //   if( $query_type == 7)
   //   {
   //      if( NOME($query_p1) == "Morgana_Cassetto" & $query_p2 == 0)
   //      {
   //         $QueryResult__ = 1
   //      }
   //   }
   //}

   //Posiziona Morgana_Contenitore_Cass cont
   //{
   //   @ang_y = VAR_angolazione
   //   @base_0  = base_0
   //
   //   //MicheleC 28/12/2021 per mantenere il centro fisso
   //   if( VAR_angolazione == -20 ) { @base_0 = [base_0.x + X/10, base_0.y, base_0.z - X/10] }
   //   if( VAR_angolazione == -10 ) { @base_0 = [base_0.x + X/20, base_0.y, base_0.z - X/20] }
   //   if( VAR_angolazione == 0 )   { @base_0 = base_0 }
   //   if( VAR_angolazione == 10 )  { @base_0 = [base_0.x - X/20, base_0.y, base_0.z + X/20] }
   //   if( VAR_angolazione == 20 )  { @base_0 = [base_0.x - X/10, base_0.y, base_0.z + X/10] }
   //
   //   @base_0.y = base_0.y + Y_Pie
   //
   //   @X       = X
   //   @Y       = Y
   //   @Z       = Z
   //   @HIDE = 1
   //}

   Posiziona Contenitore_Morgana cont1
   {
      IdCont = 1
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont2
   {
      IdCont = 2
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont3
   {
      IdCont = 3
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont4
   {
      IdCont = 4
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont5
   {
      IdCont = 5
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont6
   {
      IdCont = 6
      GOSUB posa_contenitore_morgana
   }

   Posiziona Contenitore_Morgana cont7
   {
      IdCont = 7
      GOSUB posa_contenitore_morgana
   }

   Posiziona Ruote_Morgana rm
   {
      @escluso = 1
      //if( VAR_base == 1 & VAR_tipobase == 2 ) { @escluso = 0 }
      if( TipoAppoggioStr == "RUOTE" ) { @escluso = 0 }

      GOSUB posa_blocco
      @Y = Y_Ruote
    }

   Posiziona Piedini_Morgana pm
   {
      @escluso = 1
      //if( VAR_base == 1 & VAR_tipobase == 1 ) { @escluso = 0 }
      if( TipoAppoggioStr == "PIEDINI" ) { @escluso = 0 }

      @base_0   = base_0
      @base_0.x = base_0.x + 2
      @base_0.z = base_0.z + 2

      @Y = Y_Pie
      @X = X - 8
      @Z = Z - 24
   }
}

//MicheleC 24/12/2021
//Elemento Morgana_Contenitore_Cass
Elemento Contenitore_Morgana
{
   Descrizione = "Morgana Contenitore Cassetto"
   Code   = CAS
   Gruppo = ""
   Tipo   = Contenitore
   Forma  = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"      600
      Y   "Altezza"        180
      Z   "Profondità"     450

      COD_EREDITA "" "PRE"

      RADICE "" "MMRG"

      PosizioneCont "" ""

      VT_NFC   "NFC"  0
   }

   Assegnazioni
   {
      GOSUB AssComune

      SpeFrontale = 20

      //Simone 25/05/2022
      STP_Bollina = 1

      //Simone 12/09/2022
      if( PosizioneCont == "COPERCHIO" ) { VT_NFC = 1 }
   }

   PuntiNotevoli
   {
      GOSUB punti

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

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Z = Z + 8

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "PRE" )
      {
         //if( IS_VAR_FIXED(ATTUALE(),"GEST_C062") ) { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C062") }

         C062 = "PS005"
         if( PosizioneCont == "FONDO" )      { C062 = "P0003" }
         if( PosizioneCont == "COPERCHIO" )  { C062 = "P0004" }
         if( PosizioneCont == "INTERMEDIO" ) { C062 = "P0005" }

         GEST_C062 = C062
         VarAdd = "GEST_C062"   GOSUB Add_TABER_VARSETTATE

         ORD_FILTRO_C062 = C062

         if( VAR_EXIST(ATTUALE(),"GEST_C037") )
         {
            ORD_FILTRO_C037 = GEST_C037
         }
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Fusto_Morgana fusto
   {
      GOSUB posa_blocco
   }

   Posiziona Cassetto_Morgana cas
   {
      RieCasX = 3
      RieCasY = 6
      @X = X - RieCasX
      @Y = Y - RieCasY
      @Z = Z - 30
      @base_0.x = base_0.x + RieCasX/2
      @base_0.y = base_0.y + RieCasY/2
      @base_0.z = base_0.z + Z + 6 - @Z
   }

   //Posiziona Morgana_Blocco    fro1
   //{
   //   @base_0.x  = base_0.x + 18
   //   @base_0.y  = base_0.y + 18
   //   @base_0.z  = base_0.z + Z -16
   //   @X        = X - 18 - 18
   //   @Y        = 180 - 18 - 18
   //   @Z        = 12
   //   @HIDE = 1
   //}
   //
   //Posiziona Morgana_Blocco_Vtr    fro2
   //{
   //   @base_0   = base_0
   //   @base_0.y = base_0.y
   //   @base_0.z = base_0.z + Z -4
   //   @X        = X
   //   @Y        = 180
   //   @Z        = 4
   //
   //   GOSUB rivestimento
   //   @HIDE = 1
   //}

}

Elemento Fusto_Morgana
{
   Descrizione = "Morgana Contenitore Cassetto"
   Code   = CAS
   Gruppo = ""
   Tipo   = Contenitore
   Forma  = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza"      600
      Y   "Altezza"        180
      Z   "Profondità"     450

      RADICE "" "FMMRG"
   }

   Assegnazioni
   {
      GOSUB AssComune

      Spe_Pannello = 19
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      HIDE_ON_EDIT(ATTUALE(),"GEST_*",1)

      //da verificare
      //GEST_Y = 178
      GEST_Z = Z - 12

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona Fondo_Morgana base
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + 3
      @base_0.z  = base_0.z + 6
      @X         = X - 6
      @Y         = Spe_Pannello
      @Z         = Z - 20
   }

   Posiziona Top_Morgana cielo
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + 3
      @base_0.y  = base_0.y + Y - Spe_Pannello
      @base_0.z  = base_0.z + 6
      @X         = X - 6
      @Y         = Spe_Pannello
      @Z         = Z -20
   }

   Posiziona Schiena_Morgana schiena
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + 3
      @base_0.y  = base_0.y + 3
      @base_0.z  = base_0.z
      @X         = X - 6
      @Y         = Y - 6
      @Z         = 6
   }

   Posiziona Schiena_Morgana schien2
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + Spe_Pannello
      @base_0.y  = base_0.y + Spe_Pannello
      @base_0.z  = base_0.z + 6
      @X         = X - 2*Spe_Pannello
      @Y         = Y - 2*Spe_Pannello
      @Z         = 13
   }

   Posiziona FiancoSX_Morgana Fsx
   {
      @base_0    = base_0
      @base_0.y  = base_0.y + 3
      @base_0.z  = base_0.z + 6
      @X         = Spe_Pannello
      @Y         = Y - 6
      @Z         = Z - 20
   }

   Posiziona FiancoDX_Morgana Fdx
   {
      @base_0    = base_3
      @base_0.x  = base_3.x - Spe_Pannello
      @base_0.y  = base_0.y + 3
      @base_0.z  = base_0.z + 6
      @X         = Spe_Pannello
      @Y         = Y - 6
      @Z         = Z - 20
   }
}

Elemento Fondo_Morgana
{
   Descrizione = "Fondo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_fondo_Morgana   base
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}


//MicheleC 24/12/2021
Elemento _graf_fondo_Morgana
{
   Descrizione = "Fondo Morgana"
   Code        = FND
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X              ""   600
      Y              ""    17
      Z              ""   450

      a              ""     3
      b              ""    19
   }

   PuntiNotevoli
   {
      base_0 = [0,     0,   0]    alto_0=base_0  alto_0.z=Z
      base_1 = [X,     0,   0]
      base_2 = [X,     a+a, 0]
      base_3 = [X-b+a, a+a, 0]
      base_4 = [X-b+a, Y,   0]
      base_5 = [b-a,   Y,   0]
      base_6 = [b-a,   a+a, 0]
      base_7 = [0,     a+a, 0]
   }
}

Elemento Top_Morgana
{
   Descrizione = "Fondo"
   Code        = CUB
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

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

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)

   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_top_Morgana   base
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

//MicheleC 24/12/2021
Elemento _graf_top_Morgana
{
   Descrizione = "Top Morgana"
   Code        = TOP
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X              ""   600
      Y              ""    18
      Z              ""   450

      a              ""     3
      b              ""    19

      c_rivestimento ""  [255, 255, 255]
   }

   PuntiNotevoli
   {
      base_0 = [b-a,   0,     0]    alto_0=base_0  alto_0.z=Z
      base_1 = [X-b+a, 0,     0]
      base_2 = [X-b+a, Y-a-a, 0]
      base_3 = [X,     Y-a-a, 0]
      base_4 = [X,     Y,     0]
      base_5 = [0,     Y,     0]
      base_6 = [0,     Y-a-a, 0]
      base_7 = [b-a,   Y-a-a, 0]
   }
}

Elemento Schiena_Morgana
{
   Descrizione = "Schiena cassetto morgana"
   Code        = SCH
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X              ""   394
      Y              ""   394
      Z              ""   3

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco sch
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

Elemento FiancoSX_Morgana
{
   Descrizione = "Schiena cassetto morgana"
   Code        = SCH
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X              ""   394
      Y              ""   394
      Z              ""   3

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_fiasx_Morgana sch
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

//MicheleC 24/12/2021
Elemento _graf_fiasx_Morgana
{
   Descrizione = "Fianco sinistra cassetto morgana"
   Code        = FIA
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X              ""    17
      Y              ""   180
      Z              ""   450

      a              ""     3
      b              ""    19
   }

   PuntiNotevoli
   {
      base_0 = [0, 0,   0]    alto_0=base_0  alto_0.z=Z
      base_1 = [a, 0,   0]
      base_2 = [a, a,   0]
      base_3 = [X, a,   0]
      base_4 = [X, Y-a, 0]
      base_5 = [a, Y-a, 0]
      base_6 = [a, Y,   0]
      base_7 = [0, Y,   0]
   }
}

Elemento FiancoDX_Morgana
{
   Descrizione = "Schiena cassetto morgana"
   Code        = SCH
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      X              ""   394
      Y              ""   394
      Z              ""   3

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C032"
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona _graf_fiadx_Morgana sch
   {
      GOSUB posa_blocco
      GOSUB rivestimento
   }
}

//MicheleC 24/12/2021
Elemento _graf_fiadx_Morgana
{
   Descrizione = "Fianco destro cassetto morgana"
   Code        = FIA
   Gruppo      = ""
   Tipo        = ""
   Forma       = ZSweep

   Variabili
   {
      X              ""    17
      Y              ""   180
      Z              ""   450

      a              ""     3
      b              ""    19
   }

   PuntiNotevoli
   {
      base_0 = [b-a, 0,   0]    alto_0=base_0  alto_0.z=Z
      base_1 = [b,   0,   0]
      base_2 = [b,   Y,   0]
      base_3 = [b-a, Y,   0]
      base_4 = [b-a, Y-a, 0]
      base_5 = [0,   Y-a, 0]
      base_6 = [0,   a,   0]
      base_7 = [b-a, a,   0]
   }
}

Elemento Cassetto_Morgana
{
   Descrizione = "Schiena cassetto morgana"
   Code        = SCH
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X              ""   394
      Y              ""   394
      Z              ""   3

      RADICE "" "CMMRG"

      XGLASS               "Num. XGLASS"  ""

      VT_NFC "NFC"  0  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_var = "C001"

      SpeVet = 4
      SpePan = 16
      SpeFro = SpePan + SpeVet

      AriaX_Ant_Fia = 1.5
      MY = 97
      MZ = Z - SpeFro

      RieX_SX_GiroC = $M368_Spe_Fia - AriaX_Ant_Fia + 5
      RieX_DX_GiroC = RieX_SX_GiroC
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      HIDE_ON_EDIT(ATTUALE(),"GEST_*",1)

      GOSUB GestComune_Post
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

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

   Posiziona StrInternaCassetto_368 str
   {
      @X = X - RieX_SX_GiroC - RieX_DX_GiroC
      @Y = MY
      @Z = MZ

      @base_0.x = base_0.x + RieX_SX_GiroC
      @base_0.y = base_0.y + 37 - 1.5
      @base_0.z = base_0.z

      //pomice
      @GEST_C034 = "FG002"
      @NO_GEST = 1
      @HIDE = 1
   }

   Posiziona Blocco pna
   {
      RiePan = 7

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

      @Z = SpePan
      @base_0.z = base_0.z + Z - @Z - SpeVet
      FIN_var = "C033"
      GOSUB rivestimento
   }

   Posiziona Blocco Vet
   {
      GOSUB posa_blocco
      @Z = SpeVet
      @base_0.z = base_0.z + Z - @Z
      FIN_var = "C001"
      GOSUB rivestimento
   }

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

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

//Elemento Morgana_Blocco
//{
//   Descrizione = "Retro del frontale"
//   Code        = CUB
//   Gruppo      = ""
//   Tipo        = Contenitore
//   Forma       = ""
//
//   Variabili
//   {
//      X  ""  100
//      Y  ""  100
//      Z  ""  100
//   }
//
//   Assegnazioni
//   {
//      GOSUB AssComune
//   }
//
//   PuntiNotevoli
//   {
//      GOSUB punti
//   }
//
//   Controlli
//   {
//      GOSUB CtrlComune
//   }
//
//   Posiziona   Blocco   blo
//   {
//      GOSUB posa_blocco
//      GOSUB rivestimento
//      @HIDE = 1
//   }
//}
//
////MicheleC 24/12/2021
//Elemento Morgana_Blocco_Vtr
//{
//   Descrizione = "Blocco frontale"
//   Code        = CUB
//   Gruppo      = ""
//   Tipo        = Contenitore
//   Forma       = ""
//
//   Variabili
//   {
//      X  ""  100
//      Y  ""  100
//      Z  ""  100
//   }
//
//   Assegnazioni
//   {
//      GOSUB AssComune
//   }
//
//   PuntiNotevoli
//   {
//      GOSUB punti
//   }
//
//   Controlli
//   {
//      GOSUB CtrlComune
//   }
//
//   Posiziona   Blocco   blo
//   {
//      GOSUB posa_blocco
//      GOSUB rivestimento
//      @HIDE = 1
//   }
//}

//MicheleC 24/12/2021
Elemento Piedini_Morgana
{
   Descrizione   = "Gruppo piedini Morgana"
   Code          = COL
   Gruppo        = ""
   Tipo          = Contenitore
   Forma         = ""

   Variabili
   {
      Z           "" 400
      Y           ""  10
      X           "" 400

      HIDE        "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona CilindroY pie1
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + 4
      @base_0.z  = base_0.z + 4
      @base_0.y  = base_0.y

      @X = 20
      @Y = Y

      @HIDE=1
      @c_rivestimento = $c_nero
   }

   Posiziona CilindroY pie2
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + 4
      @base_0.y  = base_0.y
      @base_0.z  = base_0.z + Z - @Z

      @X = 20
      @Y = Y

      @HIDE=1
      @c_rivestimento = $c_nero
   }

   Posiziona CilindroY pie3
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + X - @X
      @base_0.y  = base_0.y
      @base_0.z  = base_0.z + Z - @Z

      @X = 20
      @Y = Y

      @HIDE=1
      @c_rivestimento = $c_nero
   }

   Posiziona CilindroY  pie4
   {
      @base_0    = base_0
      @base_0.x  = base_0.x + X - @X
      @base_0.y  = base_0.y
      @base_0.z  = base_0.z + 4

      @X = 20
      @Y = Y

      @HIDE=1
      @c_rivestimento = $c_nero
   }
}

//MicheleC 24/12/2021
Elemento Ruote_Morgana
{
   Descrizione = "Ruote_morgana"
   Code   = CN1
   Gruppo = ""
   Tipo   = Contenitore
   Forma  = ""

   Variabili
   {
      X "" 515
      Y "" 120
      Z "" 426

      NO_GEST "" 1

//delta dell'origine del vano o dell'elemento, rispetto a base_0 (o altro vertice)
      delta  ""          [0,0,0]

//riduzione di dimensioni dell'elemento rispetto al contenitore
      riduci ""          [0,0,0]

      Rif_Alt    ""      0
      dia_RUO       ""  120
      spe_RUO       ""   40
      rie_RUO       ""   10
      flag "" 0

      ingombro "" 0
   }

   Assegnazioni
   {
      GOSUB AssComune

      if( ACTION() == 0 )
      {
         NO_GEST = 1
         wk_data = ATOI(STRMID( 0, 6, DATA(0)))
         if( wk_data > 220515 ) { NO_GEST = 0 }
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
      dia_RUO=Y
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      if( NO_GEST == 1 )
      {
         HIDE = 1

         FLAG_RADICE = $NO_RAD
         GEST_CODICE = ""
         GOSUB Stato_7

         GOSUB GestComune_Post

         GOSUB CAMBIA_VAR

         EXITSUB()
      }

      HIDE = 0

      GEST_CODICE = "MRG007"

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Posiziona __import__ imp1
   {
      @Y=Y
      @ang_y=90
      @base_0.x = base_2.x - 43.5
      @base_0.y = base_0.y + 44
      @base_0.z = base_0.z + 78.5
      @HIDE = 1
      @import = STRCAT($path_sat,"Ruota_Morgana.SAT")
      @c_rivestimento = [195,195,195]
   }

   Posiziona __import__ imp2
   {
      @Y=Y
      @ang_y=90
      @base_0.x = base_2.x - 43.5
      @base_0.y = base_0.y + 44
      @base_0.z = base_1.z
      @HIDE = 1
      @import = STRCAT($path_sat,"Ruota_Morgana.SAT")
      @c_rivestimento = [195,195,195]
   }

   Posiziona __import__ imp3
   {
      @Y=Y
      @base_0.x = base_0.x - 8.5
      @base_0.y = base_0.y + 44
      @base_0.z = base_1.z - 52
      @HIDE = 1
      @import = STRCAT($path_sat,"Ruota_Morgana.SAT")
      @c_rivestimento = [195,195,195]
   }

   Posiziona __import__ imp4
   {
      @Y=Y
      @base_0.x = base_0.x - 8.5
      @base_0.y = base_0.y + 44
      @base_0.z = base_0.z + 26.5
      @HIDE = 1
      @import = STRCAT($path_sat,"Ruota_Morgana.SAT")
      @c_rivestimento = [195,195,195]
   }
}
// MODULO MORGANA }

// MODULO TANGRAM {
//MicheleC 27/12/2021
Elemento Tangram
{
   Descrizione = "Tangram"
   Code        = ZOC
   Gruppo      = "Complementi"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X    "Larghezza"    850
      Y    "Altezza"      850
      Z    "Profondità"   240

      M4_A_MURO   ""    1

      figura      ""    "22"   Utente ( )

      FIN_var     ""    "C028"

      HIDE        ""    2
   }

   Assegnazioni
   {
      GOSUB AssComune

      $Tan_Tab = TABLE_OPEN( STRCAT($path_sat,"Tangram\ConfigurazioneTangram.txt"))
      if( $Tan_Tab >= 0)
      {
         X = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "X"))
         Y = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "Y"))

         pos_tan_1 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_1")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_1")),0]
         ang_tan_1 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_1"))
         pos_tan_2 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_2")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_2")),0]
         ang_tan_2 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_2"))
         pos_tan_3 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_3")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_3")),0]
         ang_tan_3 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_3"))
         pos_tan_4 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_4")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_4")),0]
         ang_tan_4 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_4"))
         pos_tan_5 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_5")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_5")),0]
         ang_tan_5 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_5"))
         pos_tan_6 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_6")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_6")),0]
         ang_tan_6 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_6"))
         pos_tan_7 = [ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_x_tan_7")),ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "pos_y_tan_7")),0]
         ang_tan_7 = ATOI(TABLE_FIELD_AT($Tan_Tab, figura, "ang_tan_7"))
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      //DescEdit__ = "TANGRAM"
      M4_DESC    = DescEdit__
   }

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

   Posiziona Tangram_Elemento 1
   {
      @base_0 = pos_tan_1
      @ang_z  = ang_tan_1
      @VAR_elemento = 1
      @VT_NFC = 1
   }

   Posiziona Tangram_Elemento 2
   {
      @base_0 = pos_tan_2
      @ang_z  = ang_tan_2
      @VAR_elemento = 2
   }

   Posiziona Tangram_Elemento 3
   {
      @base_0 = pos_tan_3
      @ang_z  = ang_tan_3
      @VAR_elemento = 3
   }

   Posiziona Tangram_Elemento 4
   {
      @base_0 = pos_tan_4
      @ang_z  = ang_tan_4
      @VAR_elemento = 4
   }

   Posiziona Tangram_Elemento 5
   {
      @base_0 = pos_tan_5
      @ang_z  = ang_tan_5
      @VAR_elemento = 5
   }

   Posiziona Tangram_Elemento 6
   {
      @base_0 = pos_tan_6
      @ang_z  = ang_tan_6
      @VAR_elemento = 6
   }

   Posiziona Tangram_Elemento 7
   {
      @base_0 = pos_tan_7
      @ang_z  = ang_tan_7
      @VAR_elemento = 7
   }
}

//MicheleC 27/12/2021
Elemento Tangram_Elemento
{
   Descrizione = "Elemento singolo Tangram"
   Code        = TAN
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"   850
      Y  "Altezza"     425
      Z  "Profondità"  240

      idx_ref      "" -1
      var_ref      "" ""

      VAR_elemento ""  1

      import_str "" ""
      import_sch   "" ""

      COD_EREDITA  "" "PRE"

      Angolo "Angolo posizionamento"  0
      M4_MIS "" "Angolo"

      //RADICE "" ""
      //RAD    "" ""

      //ELEMENTI :
      //1 = Triang. Grande
      //2 = Triang. Grande
      //3 = Parallelepipedo
      //4 = Triang. Piccolo
      //5 = Rombo
      //6 = Triang. Piccolo
      //7 = Triang. Medio

      VT_NFC     "NFC"  0

      FIN_var     ""  "C028"
      M4_A_MURO   ""  1
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

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

   Controlli
   {
      GOSUB CtrlComune

      import_str = STRCAT($path_sat,"Tangram\Tangram",STR(VAR_elemento),".sat")
      import_sch = STRCAT($path_sat,"Tangram\Tangram",STR(VAR_elemento),"s.sat")

      //Simone 17/05/2022
      //RAD = ""
      GEST_CODICE = ""
      //ELEMENTI :
      //1 = Triang. Grande
      //2 = Triang. Grande
      //3 = Parallelepipedo
      //4 = Triang. Piccolo
      //5 = Rombo
      //6 = Triang. Piccolo
      //7 = Triang. Medio

      //Simone 18/05/2022
      //elem_z = 240
      elem_z = 242
      Z = 240

      if(VAR_elemento == 1)
      {
         GEST_CODICE = "TAN010"
         elem_x = 850
         elem_y = 425
         X = 850
         Y = 425
      }

      if(VAR_elemento == 2)
      {
         GEST_CODICE = "TAN010"
         elem_x = 850
         elem_y = 425
         X = 425
         Y = 850
      }

      if(VAR_elemento == 3)
      {
         GEST_CODICE = "TAN014"
         elem_x = 425
         elem_y = 211
         X = 637.5
         Y = 212.5
      }

      if(VAR_elemento == 4)
      {
         GEST_CODICE = "TAN012"
         elem_x = 425
         elem_y = 211
         X = 425
         Y = 212.5
      }

      if(VAR_elemento == 5)
      {
         GEST_CODICE = "TAN013"
         elem_x = 300
         elem_y = 300
         X = 425
         Y = 425
      }

      if(VAR_elemento == 6)
      {
         GEST_CODICE = "TAN012"
         elem_x = 425
         elem_y = 211
         X = 212.5
         Y = 425
      }

      if(VAR_elemento == 7)
      {
         GEST_CODICE = "TAN011"
         elem_x = 601
         elem_y = 300
         X = 425
         Y = 425
      }

      GEST_X = elem_x
      GEST_Y = elem_y
      GEST_Z = elem_z
   }

   //Simone 18/05/2022
   Procedura OnTabEredita
   {
      #ifndef TEC
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest( ATTUALE() , "GEST_C028" )
      }
      #endif
   }

   Posiziona __import__ elem
   {
      @base_0 = base_0

      GOSUB Pos_ElemTangr_solograf

      @import = import_str
      ang_z = Angolo

      GOSUB rivestimento
      @HIDE = 1
   }

   Posiziona SchienaTangram sch
   {
      @base_0=base_0

      GOSUB Pos_ElemTangr_solograf

      @import = import_sch

      @VAR_elemento = VAR_elemento
      ang_z = Angolo

      @HIDE = 1
   }

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

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

//MicheleC 27/12/2021
Elemento SchienaTangram
{
   Descrizione = "Schiena Elemento Tangram"
   Code        = ZOC
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"   850
      Y  "Altezza"     425
      Z  "Profondità"  240

      //RADICE "" ""
      //RAD    "" ""

      idx_ref "" -1
      var_ref "" ""

      VAR_elemento ""  1   Utente ( )

      import_str "" ""
      import_sch "" ""

      COD_EREDITA  "" "PRE"
      FIN_var    "" "C028"

      Angolo "Angolo posizionamento"  0  Utente ( )
      M4_MIS "" "Angolo"

      //ELEMENTI :
      //1 = Schiena Triang. Grande   78x39 Libreria TANGRAM
      //2 = Schiena Triang. Grande   78x39 Libreria TANGRAM
      //3 = Schiena Parallelepipedo  39x18 Libreria TANGRAM
      //4 = Schiena Triang. Piccolo  36x18 Libreria TANGRAM
      //5 = Schiena Rombo            27x27 Libreria TANGRAM
      //6 = Schiena Triang. Piccolo  36x18 Libreria TANGRAM
      //7 = Schiena Triang. Medio    53x27 Libreria TANGRAM
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Simone 19/05/2022
      FIN_idx_gest = PADRE(ATTUALE(),1)
   }

   Controlli
   {
      GOSUB CtrlComune

      import_sch = STRCAT($path_sat,"Tangram\Tangram",STR(VAR_elemento),"s.sat")

      //Simone 17/05/2022
      //RAD = ""
      //RAD = "SCTANGR"

      //ELEMENTI :
      //1 = Schiena Triang. Grande   78x39 Libreria TANGRAM
      //2 = Schiena Triang. Grande   78x39 Libreria TANGRAM
      //3 = Schiena Parallelepipedo  39x18 Libreria TANGRAM
      //4 = Schiena Triang. Piccolo  36x18 Libreria TANGRAM
      //5 = Schiena Rombo            27x27 Libreria TANGRAM
      //6 = Schiena Triang. Piccolo  36x18 Libreria TANGRAM
      //7 = Schiena Triang. Medio    53x27 Libreria TANGRAM

      GEST_CODICE = ""

      Z = 12
      if(VAR_elemento == 1)
      {
         //GEST_CODICE = "TAN020"
         X = 783.9
         Y = 391.95
      }

      if(VAR_elemento == 2)
      {
         //GEST_CODICE = "TAN020"
         X = 783.9
         Y = 391.95
      }

      if(VAR_elemento == 3)
      {
         //GEST_CODICE = "TAN024"
         X = 386.3
         Y = 178.45
      }

      if(VAR_elemento == 4)
      {
         //GEST_CODICE = "TAN022"
         X = 358.9
         Y = 179.45
      }

      if(VAR_elemento == 5)
      {
         //GEST_CODICE = "TAN023"
         X = 273.1
         Y = 273.1
      }

      if(VAR_elemento == 6)
      {
         //GEST_CODICE = "TAN022"
         X = 358.9
         Y = 179.45
      }

      if(VAR_elemento == 7)
      {
         //GEST_CODICE = "TAN021"
         X = 534.9
         Y = 267.45
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   //Simone 18/05/2022
   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest( ATTUALE() , "GEST_C028" )
      }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Posiziona __import__  sch
   {
      @base_0=base_0

      @import = import_sch
      ang_z = Angolo

      GOSUB rivestimento

      @HIDE = 1
   }
}
// MODULO TANGRAM }

//{ LIBRERIA PENTAGRAM
Elemento LibreriaPentagram_LP22
{
   Descrizione = "Modulo Libreria pentagram"
   Code        = LIIV
   Gruppo      = "LIV"
   Tipo        = Contenitore
   Forma       = ""
   Alias       OnChangedVar;StampaXG

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X   "Larghezza schiena"          398  Menu ( Larg_LP22 )
      Xt  "(Larghezza complessiva)"    736  ShowAlways

      Y  "Altezza"                    1738  Menu ( Alt_LP22 )
      Yt "(Altezza con piedini)"      1738  ShowAlways

      Z  "Profondità"                  286  ShowAlways
      Zt "Profondità"                  286


      FLAG_Sospesa    "Libreria Sospesa"   0  Boolean
      Verso           "Verso Libreria"     1  Menu ( DXSX )

      FinituraSchiena ""                  "LACCATO"
      //FinituraSchiena ""                  "VETRO"

      VediIngombro  "Vedi Ingombro"      0

      //Luca 22/09/2022
      ConLed        ""     0
      ConLedSx      ""     0
      ConLedDx      ""     0
      Watt_Led      ""     0
      CodTrasf      ""     ""

      #ifdef TEC
         VAR_FixMuro_Elements  "Pcf.FIX Muro"    0  Menu ( SiNo )
         VAR_FixTerra_Elements "Pcf.FIX Terra"   0  Menu ( SiNo )
      #endif
      #ifndef TEC
         VAR_FixMuro_Elements  ""  0
         VAR_FixTerra_Elements ""  0
      #endif

      // gestionali
      COD_EREDITA       "" "PRE;POST"

      //Listino
      CMP2_AZIONI          "" "S"

      //M4
      TIPO__               "" 0
      M4_CNT_LINK_MODE__   "" 2

      M4_MIS               "" "Filler*;X;Xt;Y;Yt;Z;Zt"

      M4_A_MURO            "" 0

      FillerM2G            " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_LP22

      if( ACTION() == 0 & $ATTIVA_DLL==1 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"FLAG_Sospesa",1)
         HIDE_ON_EDIT2(ATTUALE(),"Verso",1)

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

   PuntiNotevoli
   {
      GOSUB CtrlLargh_Libreria_LP22

      Yt = Y + Alt_Pie
      Zt = Z
      GOSUB punti_XtYtZt

      vano_0_0 = base_0
      vano_0_0.y = base_0.y + Alt_Pie
      vano_l_0 = Xt
      vano_h_0 = Y

      vano_p_0 = Z
   }
   #include %path_bdm%\TLib\orie.inc

   Procedura OnQueryBdmLocal
   {
      if( $query_type==5 )
      {
         if( FLAG_Sospesa == 1 )
         {
            COMANDO2("LIVELLI CLEAR OnWall")

            liv_wall =  1
            liv_wall[1] = 201

            i = 1
            while ( i<=liv_wall )
            {
               COMANDO2( STRCAT("LIVELLI ADD OnWall ", STR(liv_wall[i]), " ", STR(liv_wall[i])) )
               i = i + 1
            }

            $QueryResult__ = 1
         }
      }
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB Ctrl_Moduli_FIXY

      GOSUB Calc_NrPos_Vetri_Libreria_LP22

      if( ACTION() > 0 & ACTION() != 2  )
      {
         ConLedSx = 0
         ConLedDx = 0

         if( ConLed == 1 )
         {
            if( Verso > 0 )  { ConLedSx = 1 }
            else             { ConLedDx = 1 }
         }

         if( ConLed == 2 )
         {
            ConLedSx = 1
            ConLedDx = 1
         }

         y_pan_str = (Y - RieY_Sup_SpeS - RieY_Inf_SpeS)/1000
         Watt_metro = 11.5
         Watt_Led =  ConLedSx*(y_pan_str*Watt_metro) + ConLedDx*(y_pan_str*Watt_metro)


         CodTrasf_prec = VAR_VAL_STR(ATTUALE(),"CodTrasf")

         CodTrasf = ""

         if( Watt_Led <= 15 )   { CodTrasf = "CU1715" }
         if( Watt_Led > 15
           & Watt_Led <= 30 )   { CodTrasf = "CU1703" }
         if( Watt_Led > 30
           & Watt_Led <= 100 )  { CodTrasf = "CU1710" }

         if( CodTrasf != CodTrasf_prec )
         {
            VAR_VALUE_SET(idx_trasf,"flag_CAMBIA_VAR",1)
         }

         M4_VAR = "GEST_C165;GEST_C11*;GEST_C174"
      }

      //Luca 01/02/2023
      GOSUB FIN_CalcolaPunti_TEXTURE_CV_Materia
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_X = Xt
      GEST_Y = Yt

      if( VAR_EXIST(ATTUALE(),"GEST_C116") )
      {
         if( IS_VAR_FIXED(ATTUALE(),"Verso") ) { DEL_VAR_MODIFICATE(ATTUALE(),"Verso") }

         Verso = 1
         if( GEST_C116 == "SX001" ) { Verso = -1 }
      }

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST")
      {
         finitura    = VAR_VAL_STR(ATTUALE(),"GEST_C114")
         finitura_ns = STRDADB(ATTUALE(),"DAMMI_NONSIGNIF",STRCAT("GEST_C114",";",finitura))

         FinituraSchiena = "LACCATO"
         if( IS_MATCH(finitura_ns,"LC*") != 1 ) { FinituraSchiena = "VETRO" }

         ConLed = 0
         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM074"  )  { ConLed = 1 }
         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM142"  )  { ConLed = 2 }
      }
   }

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

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

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

      GOSUB CtrlVincoloParete_LP22
   }

   Procedura cancella
   {
      GOSUB cancella_agganciati_comune
   }

   Posiziona Blocco Ing
   {
      @escluso = 1 - VediIngombro

      GOSUB posa_blocco
      @X = Xt
      @c_rivestimento = [120,120,255]
      @f_rivestimento = "0.9"
   }

   Posiziona Fianco_LP22 fia
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z + Spe_SchS

      if( Verso > 0 ) { @base_0.x = base_3.x - Spe_Fia }

      @X = Spe_Fia
      @Z = Z - Spe_SchS
      @Yt = Yt

      @ConPiedini = SE_NUM(Alt_Pie >0 , 1 , 0)
   }

   Posiziona Schiena_LP22 sch_s
   {
      @TipoSchiena = "STRUTTURALE"

      @base_0.x = base_0.x + RieX_SpeS
      @base_0.y = base_0.y + RieY_Inf_SpeS //+ Alt_Pie
      @base_0.z = base_0.z

      if( Verso > 0 ) { @base_0.x = base_3.x - RieX_SpeS - @X }

      @X = X - RidX_SpeS
      @Z = Spe_SchS
      @Yt = Y - RieY_Sup_SpeS - RieY_Inf_SpeS

      //Luca 22/09/2022
      @ConLed   = ConLed
      @ConLedDx = ConLedDx
      @ConLedSx = ConLedSx
   }

   Posiziona Schiena_LP22 sch_f
   {
      @TipoSchiena = "FINITURA"

      @base_0.x = base_0.x + Spe_Fia
      @base_0.y = base_0.y
      @base_0.z = base_0.z + Spe_SchS

      if( Verso > 0 ) { @base_0.x = base_3.x - Spe_Fia - @X }

      @X = X - Spe_Fia - RidX_SchF
      @Yt = Yt
      @Z = Spe_SchF

      @ConPiedini = SE_NUM(Alt_Pie >0 , 1 , 0)
   }

   Posiziona Vetro_LP22 vtr1
   {
      id = 1
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr2
   {
      id = 2
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr3
   {
      id = 3
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr4
   {
      id = 4
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr5
   {
      id = 5
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr6
   {
      id = 6
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr7
   {
      id = 7
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona Vetro_LP22 vtr8
   {
      id = 8
      GOSUB posa_vetro_lib_pentagram_LP22
   }

   Posiziona _cont_per_near cn_sx
   {
      GOSUB posa_cnear_sx_arm20
   }

   Posiziona _cont_per_near cn_dx
   {
      GOSUB posa_cnear_dx_arm20
   }

   Posiziona RigaOrdine_NonGraficato tra
   {
      //TODO - MERCATO USA cod CU1711

      @escluso = 1
      if( ConLed > 0 & CodTrasf != "")  { @escluso = 0 }

      @GEST_CODICE = CodTrasf

      @X = 247
      @Y = 30
      @Z = 17

      @base_0 = base_0

      @RIGA_ORDINE = 1

      idx_trasf = ATTUALE()
   }
}

Elemento Fianco_LP22
{
   Descrizione = "Fianco Pentagram"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 23
      Y "" 644
      Yt "" 644
      Z "" 538

      Verso       "" 1 Implicit

      ConPiedini  "" 0
      Alt_Pie     "" 0 Implicit

      FIN_var     ""  "C050"
      FIN_orie    ""  ""

      RADICE      ""  "PBFC"

      COD_EREDITA   "" "PRE"

      VT_GV_3630  "Numero giunzioni vert. 368-30MM" 0
   }

   Assegnazioni
   {
      GOSUB AssComune

      #ifndef TEC
         M4_NO_OFFS = 1
      #endif
   }

   PuntiNotevoli
   {
      Y = Yt - Alt_Pie*ConPiedini
      GOSUB punti_Yt
   }

   Controlli
   {
      GOSUB CtrlComune

      GOSUB ContaGiunzioni_368
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

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

         //Luca 22/09/2022 eredita da top level e non permetto modifica
         ORD_FILTRO_C062 = VAR_VAL_STR( GetTopLevel(ATTUALE()) , "GEST_C062" )
         ORD_FILTRO_C116 = VAR_VAL_STR( GetTopLevel(ATTUALE()) , "GEST_C116" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend bl
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Alt_Pie

      @BLEND__ = -1
      if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @BLEND__ = 2 }

      GOSUB rivestimento
   }

   Posiziona Cuc_piedino rt
   {
      @escluso = 1 - ConPiedini

      Cuc_Dia_Pie = 15
      GOSUB PosaPiedino
      @Y = Alt_Pie

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z + 52 - @Z/2

      @rag1 = Cuc_Dia_Pie
   }

   Posiziona Cuc_piedino fr
   {
      @escluso = 1 - ConPiedini

      GOSUB PosaPiedino
      @Y = Alt_Pie

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z + Z - 30 - @Z/2

      @rag1 = Cuc_Dia_Pie
   }

   #ifdef TEC;AZI
   Posiziona G368_GruppoLavorazione G368DX
   {
      GOSUB G368_PosaGrLavorazione

      @X = X/2 - $M368_Giu_Sporgenza

      if( Verso < 0)        { @base_0.x = base_0.x + X - @X  }
      if( ConPiedini == 1 ) { @base_0.y = base_0.y + Alt_Pie }

      @Lato = "SX"
      if( Verso < 0 ) { @Lato = "DX" }
   }
   #endif
}

Elemento Schiena_LP22
{
   Descrizione = "Schiena Pentagram"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "" 23
      Y  "" 644
      Yt "" 644
      Z  "" 538

      //STRUTTURALE
      //FINITURA
      //PER VETRI
      TipoSchiena       "" ""
      //Simone 20/09/2022
      FinituraSchiena   "" "" Implicit

      FLAG_Sospesa      "" 0  Implicit

      ConPiedini        "" 0
      Alt_Pie           "" 0 Implicit

      ConLed            "" 0
      ConLedSx          "" 0
      ConLedDx          "" 0

      Verso             "" 1 Implicit

      //FIN_var          ""  "C114"
      FIN_orie          ""  ""

      COD_EREDITA   "" "PRE"
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Simone 20/09/2022
      FIN_var = "C174"
      if( FinituraSchiena == "LACCATO" ) { FIN_var = "C114" }

      #ifndef TEC
         M4_NO_OFFS = 1
      #endif

      X_staffa = 220
      Y_staffa = 59
      Z_staffa = 17
      if( X == 522 ) { X_staffa = 404 }
      if( X == 706 ) { X_staffa = 588 }

      Y_Trasf    = 400
      OffY_Trasf = 368
      if( Y <= 1104 )
      {
         Y_Trasf    = 280
         OffY_Trasf = 192
      }
   }

   PuntiNotevoli
   {
      Y = Yt - Alt_Pie*ConPiedini
      GOSUB punti_Yt
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE_prec = VAR_VAL_STR(ATTUALE(),"perRADICE")
      GEST_CODICE = ""

      perRADICE = "PBSF"
      if( TipoSchiena == "STRUTTURALE" ) { perRADICE = "PBFM" }

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

      GOSUB Set_Gest_C008_Schiena_LP22

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )

         //Luca 22/09/2022 eredita da top level e non permetto modifica
         ORD_FILTRO_C062 = VAR_VAL_STR( GetTopLevel(ATTUALE()) , "GEST_C062" )
         ORD_FILTRO_C116 = VAR_VAL_STR( GetTopLevel(ATTUALE()) , "GEST_C116" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend bl
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + Alt_Pie
      GOSUB rivestimento

      @BLEND__ = -1
      if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @BLEND__ = 2 }

      idx_sch = ATTUALE()
   }

   //Posiziona Cuc_piedino psx
   //{
   //   @escluso = 1 - ConPiedini
   //
   //   Cuc_Dia_Pie = 15
   //   GOSUB PosaPiedino
   //   @Y = Alt_Pie
   //
   //   @base_0.x = base_0.x + 52 - @X/2
   //   @base_0.z = base_0.z + Z/2- @Z/2
   //
   //   @rag1 = Cuc_Dia_Pie
   //}

   Posiziona Cuc_piedino pdx
   {
      @escluso = 1 - ConPiedini

      Cuc_Dia_Pie = 15
      GOSUB PosaPiedino
      @Y = Alt_Pie

      @base_0.x = base_0.x + X - Cuc_Dia_Pie - @X/2
      if( Verso > 0 ) { @base_0.x = base_0.x + Cuc_Dia_Pie - @X/2 }
      @base_0.z = base_0.z + Z/2- @Z/2

      @rag1 = Cuc_Dia_Pie
   }

   //Luca 22/09/2022
   //illuminazione
   Posiziona BloccoSmussatoZ scTra
   {
      @escluso = 1
      if( ConLed > 0 )  { @escluso = 0 }

      @X = 140
      @Y = Y_Trasf
      @Z = Z + 2
      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.y = base_0.y + Alt_Pie + OffY_Trasf
      @base_0.z = base_0.z - 1

      @c_rivestimento = $c_alluminio
   }

   Posiziona _graf_BarraLed ledsx
   {
      @escluso = 1 - ConLedSx
      @Y = Y
      @base_0.x = base_0.x -1
      @base_0.y = base_0.y + Alt_Pie
      @base_0.z = base_0.z + Z/2 - @Z/2
      @PosizioneLED = 1
   }

   Posiziona _graf_BarraLed leddx
   {
      @escluso = 1 - ConLedDx
      @Y = Y
      @base_0.x = base_0.x + X - @X +1
      @base_0.y = base_0.y + Alt_Pie
      @base_0.z = base_0.z + Z/2 - @Z/2
      @PosizioneLED = -1
   }

   //Simone 21/09/2022
   Posiziona __import__ staffa
   {
      @escluso = 1
      if( TipoSchiena  == "STRUTTURALE" ) { @escluso = 0 }

      @import = STRCAT($path_sat,STRCAT("StaffaPentagram_",STR(X),".SAT"))

      @base_0.x = base_0.x + X/2 - X_staffa/2
      @base_0.y = base_0.y + Y - Y_staffa/2 + Alt_Pie + 2.5
      @base_0.z = base_0.z - 0.1

      @c_rivestimento = [90,88,86]
   }

   Posiziona BloccoSmussatoZ_Scassa lavstf
   {
      @escluso = 1
      if( TipoSchiena  == "STRUTTURALE" ) { @escluso = 0 }

      @X = X_staffa + 18
      @Y = Y_staffa/2 + 11.5
      @Z = 4

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

      @Raggio = 8
      @Scassa_Chi_Plus = STR(idx_sch)
   }
}

Elemento _graf_BarraLed
{
   Descrizione    = "Barra Led"
   Code           = ARM20
   Gruppo         = "ARM20"
   Tipo           = Contenitore
   Forma          = ""

   Variabili
   {
      X  "Larghezza"    7
      Y  "Altezza"     1100
      Z  "Profondità"   8

      c_rivestimento_barra "" [255,240,0]

      VediIlluminazione "" 1

      PosizioneLED      "" -1

      HIDE "" 1
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Stato_78
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlComune
   }

   Posiziona Blocco_Luce bl
   {
      GOSUB posa_blocco
      @c_rivestimento = c_rivestimento_barra

      @FacciaLuminosa = "DX"
      if( PosizioneLED > 0  ) { @FacciaLuminosa = "SX" }
   }

   Posiziona VediLuce vd1
   {
      npl = 1
      if( Y >= 1000 )  { npl = 2 }
      if( Y >= 2000 )  { npl = 3 }

      @escluso = 1 - VediIlluminazione
      @base_0.x = base_0.x + X + @X + 2
      @base_0.y = base_0.y + Y/(npl+1) - @Y/2
      @base_0.z = base_0.z + Z/2 - 1
      @ang_z = 90

      if( PosizioneLED > 0 )
      {
         @base_0.x = base_0.x - @X - 2
         @base_0.y = base_0.y + Y/(npl+1) + @Y/2
         @ang_z = 270
      }
   }

   Posiziona VediLuce vd2
   {
      @escluso = 1

      if( VediIlluminazione )
      {
         if( npl >= 2 )  { @escluso = 0 }
      }

      @base_0.x = base_0.x + X + @X + 2
      @base_0.y = base_0.y + Y - Y/(npl+1) - @Y/2
      @base_0.z = base_0.z + Z/2 - 1
      @ang_z = 90

      if( PosizioneLED > 0 )
      {
         @base_0.x = base_0.x - @X - 2
         @base_0.y = base_0.y + Y - Y/(npl+1) + @Y/2
         @ang_z = 270
      }
   }

   Posiziona VediLuce vd3
   {
      @escluso = 1

      if( VediIlluminazione )
      {
         if( npl >= 3 )  { @escluso = 0 }
      }

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

      if( PosizioneLED > 0 )
      {
         @base_0.x = base_0.x - @X - 2
         @base_0.y = base_0.y + (Y + @Y)/2
         @ang_z = 270
      }
   }
}

Elemento Ripiano_LP22
{
   Descrizione = "Ripiano Pentagram"
   Code        = AAA
   Gruppo      = "LIV"
   Tipo        = Contenitore
   Forma       = ""
   Altimetro     Auto
   Attrezzabile  LibreriaPentagram_LP22
   Alias       CamInciso;CamIncidente

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "Larghezza"  552 Menu ( LarR_LP22 )
      Y "" 30
      Z "" 350

      //0 FILO
      //1 SPORGENTE
      PosRipiano  "" 0

      Verso       "" 1

      FIN_var     ""  "C036"
      FIN_orie    ""  ""

      RADICE      ""  "PBRP"

      COD_EREDITA ""  "PRE"

      M4_MIS      ""  "Filler*;X"

      FillerM2G   " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB SistCostr_LP22

      #ifndef TEC
         M4_NO_OFFS = 1

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

   PuntiNotevoli
   {
      GOSUB punti
   }

   Procedura OnSetupLivelli
   {
      GOSUB OnSetupLivello_Pentragram_LP22
   }

   Attrezza
   {
      GOSUB AttrezzaSuPentagram_LP22
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         if( IS_VAR_FIXED(ATTUALE(),"GEST_C062") )  { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C062") }
         GEST_C062 = "P0008"
         if( PosRipiano > 0 ) { GEST_C062 = "P0009" }
         ORD_FILTRO_C062 = GEST_C062
         VarAdd = "GEST_C062"   GOSUB Add_TABER_VARSETTATE

         //BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
      }
   }

   Procedura cancella
   {
      //GOSUB BloccaCancellaComponente
      GOSUB BloccaCancellaAttrezzato2
   }

   Posiziona BloccoBlend bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      @BLEND__ = -1
      if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @BLEND__ = 2 }
   }
}

Elemento Vetro_LP22
{
   Descrizione = "Vetro Pentagram"
   Code        = AAA
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X "" 23
      Y "" 644
      Z "" 538

      FIN_var     ""  "C114"
      FIN_orie    ""  ""

      RADICE      ""  "PBVT"

      COD_EREDITA   "" "PRE"

      XGLASS      "Num. XGLASS" ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      #ifndef TEC
         M4_NO_OFFS = 1
      #endif
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post

      GOSUB CAMBIA_VAR
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         //BloccaModificaCatGest_Cmp_368 ( ATTUALE() , "GEST_C028" )
      }
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona BloccoBlend bl
   {
      GOSUB posa_blocco
      GOSUB rivestimento

      @BLEND__ = 0.5
      if( VAR_VAL(-1,"TPC4WEB") == 1 ) { @BLEND__ = 0.5 }
   }
}
//} LIBRERIA PENTAGRAM

Elemento Specchio_Generico
{
   Descrizione = "Specchio"
   Code        = COD
   Gruppo      = "SPE"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      Rev_Gestionale       ""        0

      X  "Larghezza"       700   ShowAlways
      Y  "Altezza"         700   ShowAlways
      Z  "Profondità"       27   ShowAlways

      VAR_Mod_Specchio    "Modello"  1  Menu ( Mod_Specchio   )
      VAR_Forma_Specchio  "Forma"    1  Menu ( Forma_Specchio )

      VAR_Melty     ""  0  Boolean
      VAR_Ruota     ""  0  Utente ( )

      Mod_Spe_Str   ""  ""

      ConLed        ""  0

      FIN_var       ""  ""

      COD_EREDITA   ""  "PRE;POST"

      M4_A_MURO     ""  1

      M4_MIS        ""  "X;Y;Z;VAR_Mod_Specchio;VAR_Forma_Specchio;FillerM2G"

      XGLASS        "Num. XGLASS" ""

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      Revisione_Incrementale_Gest_Ordine_Stato( idx_att, "Rev_Gestionale", 1)

      if( $ATTIVA_DLL==1 & ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Mod_Specchio",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Forma_Specchio",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Melty",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Ruota",1)

         if( Mod_Spe_Str == "ERA"
           | Mod_Spe_Str == "KIBI" )
         {
            VAR_SET_MODE(ATTUALE(),"XGLASS",$MODE_USER)
         }
      }

      GOSUB Assegnazioni_Specchio_Gen
   }

   PuntiNotevoli
   {
      GOSUB punti

      punto_cx = [base_0.x + X/2, base_0.y + Y/2, base_0.z + Z/2]
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      //optional
      if( VAR_EXIST(ATTUALE(),"GEST_C165") )
      {
         if( VAR_VAL_STR(ATTUALE(),"M4_VAR") == "" ) { M4_VAR = "GEST_C165" }
         else                                        { M4_VAR = STRCAT(VAR_VAL_STR(ATTUALE(),"M4_VAR"), ";", "GEST_C165") }
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST")
      {
         ConLed = 0
         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM074" )
         {
            ConLed = 1
         }
      }
   }

   Posiziona __import__ retro
   {
      GOSUB posa_blocco

      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2

      @import = File_Sat1

      FIN_var = FIN_var_B
      GOSUB rivestimento
   }

   Posiziona __import__ centro
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2
      if( VAR_Melty == 1 ) { @base_0.z = base_0.z + 6 }
      @ang_z = VAR_Ruota

      @import = File_Sat2

      @c_rivestimento = $c_bianco
      if( Mod_Spe_Str == "PLEASURE" ) { @c_rivestimento = [84,82,80] }
      if( Mod_Spe_Str == "FUZE" )
      {
         FIN_var = FIN_var_C
         GOSUB rivestimento
      }

      if( ConLed == 1 )
      {
         @c_rivestimento = $c_giallo
         @TrLadsMaterial = "GlowTheGeometry"
         @TrLadsLight    = "Lg_areapoint1"
         @TREND_P0       = punto_cx
	      if( $OnTREND == 1 ) { @c_rivestimento = [255,254,238] }
      }
   }

   Posiziona __import__ fronte
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2
      if( VAR_Melty == 1 ) { @base_0.z = base_0.z + 6 }

      @ang_z = VAR_Ruota

      @import = File_Sat3

      FIN_var = FIN_var_A
      GOSUB rivestimento
   }

   Posiziona __import__ lacc
   {
      GOSUB posa_blocco
      @base_0.x = base_0.x + X/2
      @base_0.y = base_0.y + Y/2
      if( VAR_Melty == 1 ) { @base_0.z = base_0.z + 6 }

      @ang_z = VAR_Ruota

      @import = File_Sat4

      @c_rivestimento = $c_bianco
   }

   //alimentatore
   Posiziona RigaOrdine_Sostituzione sost
   {
      @FLAG_escluso = 1
      if( ConLed == 1
       & Rev_Gestionale > 0 )      { @FLAG_escluso = 0 }

      @VAR_Gest_Codice = ""
      if( Tipo_Alimentatore == 1 ) { @VAR_Gest_Codice = "CU1718" }
      if( Tipo_Alimentatore == 2 ) { @VAR_Gest_Codice = "CU1717" }
      if( Tipo_Alimentatore == 3 ) { @VAR_Gest_Codice = "CU1716" }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
   }
}

//Nuovi comodini
Elemento Comodino_Class
{
   Descrizione = "Comodino"
   Code        = COD
   Gruppo      = "COM"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"      480     ShowAlways
      Xt "Larghezza Tot"  480
      Y  "Altezza"        519.5   ShowAlways
      Z  "Profondità"     402.5   ShowAlways

      ConLed        ""   0
      ConAli        ""   0
      ConAli_USA    ""   0

      idx_fia_sx    ""  -1
      idx_fia_dx    ""  -1

      COD_EREDITA   ""  "PRE;POST"

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

      XGLASS        "Num. XGLASS" ""

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Assegnazioni_Comodini

      Xt = X
      X_Scocca = X - 2*Spe_Fia_Vtr - 2*OffX_Str
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      //optional
      if( VAR_EXIST(ATTUALE(),"GEST_C165") )
      {
         if( VAR_VAL_STR(ATTUALE(),"M4_VAR") == "" ) { M4_VAR = "GEST_C165" }
         else                                        { M4_VAR = STRCAT(VAR_VAL_STR(ATTUALE(),"M4_VAR"), ";", "GEST_C165") }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GEST_Y = 520
      GEST_Z = 406

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST")
      {
         ConLed = 0
         ConAli = 0
         ConAli_USA = 0
         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM074" )
         {
            ConLed = 1
            if( VAR_VAL_STR(ATTUALE(),"GEST_C037") != "AL008" )
            {
               ConAli = 1
               if( VAR_VAL_STR(ATTUALE(),"GEST_C037") == "AL001" )
               {
                  ConAli_USA = 1
               }
            }
         }
      }
   }

   Posiziona Struttura_Completa_Com fusto
   {
      GOSUB posa_blocco

      @Y = 145.5

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

   Posiziona FiancoVetro_Class fiasx
   {
      GOSUB posa_blocco

      @X = Spe_Fia_Vtr
      @Y = 509
      @Z = 394

      idx_fia_sx = ATTUALE()
   }

   Posiziona FiancoVetro_Class fiadx
   {
      GOSUB posa_blocco

      @X = Spe_Fia_Vtr
      @Y = 509
      @Z = 394

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

      idx_fia_dx = ATTUALE()
   }
}

Elemento Comodino_Hom
{
   Descrizione = "Comodino"
   Code        = COD
   Gruppo      = "COM"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"      477.5   ShowAlways
      Xt "Larghezza Tot"  477.5
      Y  "Altezza"        238     ShowAlways
      Z  "Profondità"     414     ShowAlways

      ConLed        ""   0
      ConAli        ""   0
      ConAli_USA    ""   0

      idx_strutt    ""  -1

      COD_EREDITA   ""  "PRE;POST"

      M4_A_MURO     ""   1

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

      XGLASS        "Num. XGLASS" ""

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Assegnazioni_Comodini

      Xt = X
      X_Scocca = X - 2*Spe_Fia_Vtr - 2*OffX_Str
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      //optional
      if( VAR_EXIST(ATTUALE(),"GEST_C165") )
      {
         if( VAR_VAL_STR(ATTUALE(),"M4_VAR") == "" ) { M4_VAR = "GEST_C165" }
         else                                        { M4_VAR = STRCAT(VAR_VAL_STR(ATTUALE(),"M4_VAR"), ";", "GEST_C165") }
      }
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA == "POST")
      {
         ConLed = 0
         ConAli = 0
         ConAli_USA = 0
         if( VAR_VAL_STR(ATTUALE(),"GEST_C165") == "SM074" )
         {
            ConLed = 1
            if( VAR_VAL_STR(ATTUALE(),"GEST_C037") != "AL008" )
            {
               ConAli = 1
               if( VAR_VAL_STR(ATTUALE(),"GEST_C037") == "AL001" )
               {
                  ConAli_USA = 1
               }
            }
         }
      }
   }

   Posiziona Struttura_Completa_Com fusto
   {
      GOSUB posa_blocco

      @X = X_Scocca
      @Y = 138

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

   Posiziona Struttura_Vetro_Hom vet
   {
      GOSUB posa_blocco
      @base_0.z = base_0.z + 1

      idx_strutt = ATTUALE()
   }
}

Elemento Struttura_Completa_Com
{
   Descrizione = "Comodino"
   Code        = COD
   Gruppo      = "COM"
   Tipo        = Contenitore
   Forma       = ""
   Alias       CheckSost_Com

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"      480
      Xt "Larghezza Tot"  480  Implicit
      Y  "Altezza"        145.5
      Z  "Profondità"     400

      X_Scocca      ""    460  Implicit
      ConLed        ""      0  Implicit
      ConAli        ""      0  Implicit
      ConAli_USA    ""      0  Implicit

      FIN_var       ""  "C032"
      FIN_var_vetro ""  ""

      FrontaleWW    ""  0

      COD_EREDITA   ""  "PRE"
      RADICE        ""  "MCCC"

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Assegnazioni_Comodini

      if( UN_PADRE("Comodino_Hom") == 1 ) { X  = X_Scocca }
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      FIN_idx_gest = PADRE(ATTUALE(),1)

      HIDE = 0
      VAR_Check_Sost = 0
      FrontaleWW  = 0
      finitura    = VAR_VAL_STR(FIN_idx_gest,"GEST_C001")
      finitura_ns = STRDADB(FIN_idx_gest,"DAMMI_NONSIGNIF",STRCAT("GEST_C001",";",finitura))

      if( IS_MATCH(finitura_ns,"WW*") == 1 ) { FrontaleWW = 1 }

      if( FrontaleWW == 1
        & UN_PADRE("Comodino_Class") == 1 )
      {
         HIDE = 2
         VAR_Check_Sost = 1
      }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest( ATTUALE() , "GEST_C001" )
         BloccaModificaCatGest( ATTUALE() , "GEST_C032" )
      }
   }

   Posiziona Fusto_Legno_Com strut
   {
      GOSUB posa_blocco

      @VAR_Check_Sost = 0
      if( UN_PADRE("Comodino_Class") == 1 )
      {
         @Z = 400
         if( FrontaleWW == 1 ) { @VAR_Check_Sost = 1 }
      }
   }

   Posiziona Cassetto_Comodino_Gen cas
   {
      @base_0.x = base_0.x + Xt/2 - @X/2
      @base_0.y = base_0.y + Y - @Y - OffY_Cass - OffY_Str
      @base_0.z = base_0.z + Z - @Z

      @VAR_Check_Sost = 0
      if( FrontaleWW == 1
        & UN_PADRE("Comodino_Class") == 1 ) { @VAR_Check_Sost = 1 }
   }
}

Elemento Fusto_Legno_Com
{
   Descrizione = "Comodino"
   Code        = COD
   Gruppo      = "COM"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"      480
      Xt "Larghezza Tot"  480   Implicit
      Y  "Altezza"        145.5
      Z  "Profondità"     400

      idx_fia_sx    ""     -1   Implicit
      idx_fia_dx    ""     -1   Implicit
      idx_strutt    ""     -1   Implicit
      X_Scocca      ""    460   Implicit
      ConLed        ""      0   Implicit
      ConAli        ""      0   Implicit
      ConAli_USA    ""      0   Implicit

      FIN_var       ""  "C032"

      COD_EREDITA   ""  "PRE"
      RADICE        ""  "SMCC"

      FillerM2G     " " "" ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune
      GOSUB Assegnazioni_Comodini
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest( ATTUALE() , "GEST_C001" )
         BloccaModificaCatGest( ATTUALE() , "GEST_C032" )
      }
   }

   Posiziona Blocco cople
   {
      @X = X_Scocca
      @Y = $M368_Spe_Fia
      @Z = 384

      @base_0.x = base_0.x + Spe_Fia_Vtr + OffX_Str
      @base_0.y = base_0.y + Y - @Y - Spe_Top - OffY_Str
      @base_0.z = base_0.z + 10

      FIN_var = "C032"
      FIN_idx_gest = idx_att
      GOSUB rivestimento
   }

   Posiziona Vetro_Saponetta_Verniciato top
   {
      @escluso = 0
      if( UN_PADRE("Comodino_Hom") == 1 ) { @escluso = 1 }

      @X = X
      @Y = 400
      @Z = Spe_Top

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

      @FLAG_Blend        =  0
      @Ruota             =  1
      @Verso             = -1
      @ang_x             = -90

      @FIN_var_vetro     = ""
      @FIN_var_laccatura = "C001"

      @HIDE = 1
   }

   Posiziona Blocco fiasx
   {
      @X = $M368_Spe_Fia
      @Y = 115
      @Z = 384

      @base_0.x = base_0.x + Spe_Fia_Vtr + OffX_Str
      @base_0.y = base_0.y + Y - @Y - $M368_Spe_Fia - Spe_Top - OffY_Str
      @base_0.z = base_0.z + 10

      FIN_var = "C032"
      FIN_idx_gest = idx_att
      GOSUB rivestimento
   }

   Posiziona Blocco pelsx
   {
      @X = 0.1
      @Y = 138
      @Z = 394

      @base_0.x = base_0.x + Spe_Fia_Vtr - @X + OffX_Str
      @base_0.y = base_0.y + Y - @Y - Spe_Top - OffY_Str
      @base_0.z = base_0.z

      FIN_var = "C028"
      FIN_idx_gest = idx_fia_sx
      if( UN_PADRE("Comodino_Hom") ) { FIN_idx_gest = idx_strutt }

      GOSUB rivestimento
   }

   Posiziona Blocco fiadx
   {
      @X = $M368_Spe_Fia
      @Y = 115
      @Z = 384

      @base_0.x = base_0.x + Xt - @X - Spe_Fia_Vtr - OffX_Str
      @base_0.y = base_0.y + Y - @Y - $M368_Spe_Fia - Spe_Top - OffY_Str
      @base_0.z = base_0.z + 10

      FIN_var = "C032"
      FIN_idx_gest = idx_att
      GOSUB rivestimento
   }

   Posiziona Blocco peldx
   {
      @X = 0.1
      @Y = 138
      @Z = 394

      @base_0.x = base_0.x + Xt - Spe_Fia_Vtr - OffX_Str
      @base_0.y = base_0.y + Y - @Y - Spe_Top - OffY_Str
      @base_0.z = base_0.z

      FIN_var = "C028"
      FIN_idx_gest = idx_fia_dx
      if( UN_PADRE("Comodino_Hom") ) { FIN_idx_gest = idx_strutt }

      GOSUB rivestimento
   }

   Posiziona Blocco sch
   {
      @X = X_Scocca
      @Y = 122
      @Z = 25

      @base_0.x = base_0.x + Spe_Fia_Vtr + OffX_Str
      @base_0.y = base_0.y + Y - @Y - 12 - Spe_Top - OffY_Str
      @base_0.z = base_0.z

      FIN_var = "C032"
      FIN_idx_gest = idx_att
      GOSUB rivestimento
   }

   Posiziona Led_Living led
   {
      @escluso = 1 - ConLed

      @X = X_Scocca - 1

      @base_0.x = base_0.x + Xt/2 - @X/2
      @base_0.y = base_0.y + Y - @Y - Spe_Top - 4 - OffY_Str
      @base_0.z = base_0.z + Spe_Fia_Vtr - 2
   }

   Posiziona RigaOrdine_NonGraficato trasf
   {
      @escluso = 1 - ConAli

      @X = 247
      @Y = 30
      @Z = 17

      @base_0 = base_0

      @GEST_CODICE = "CU1715"
      if( ConAli_USA == 1 )
      {
         @GEST_CODICE = "CU1711"
      }
   }
}

Elemento Cassetto_Comodino_Gen
{
   Descrizione = "Comodino"
   Code        = COD
   Gruppo      = "COM"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"      480   Implicit
      Y  "Altezza"        143
      Z  "Profondità"     348

      FIN_var       ""  "C001"

      COD_EREDITA   ""  "PRE"
      RADICE        ""  "CMCC"

      //XGLASS        "Num. XGLASS" ""

      HIDE          ""   2
   }

   Assegnazioni
   {
      GOSUB AssComune

      Z_gir    = 340
      riex_str = 34
      riey_str = 14.5
      X_fro    = X
      Y_fro    = 143
      Z_fro    = 8
      Spe_Pan  = 0

      if( UN_PADRE("Comodino_Hom") == 1 )
      {
         riex_str = 22.5
         riey_str = 13.5
         Y_fro    = 135
         X_fro    = X - 3
         Z_fro    = 4
         Spe_Pan  = 16
      }

      X = X_fro
      Y = Y_fro
      Z = Z_gir + Spe_Pan + Z_fro
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Procedura OnTabEredita
   {
      if( TABER_REGOLA=="PRE" )
      {
         BloccaModificaCatGest( ATTUALE() , "GEST_C001" )
      }
   }

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

   Posiziona Mat_StrIntCassCest str
   {
      @X = X - 2*riex_str
      @Y = 97
      @Z = Z_gir

      @base_0   = base_0
      @base_0.x = base_0.x + riex_str
      @base_0.y = base_0.y + riey_str
   }

   Posiziona Vetro_Saponetta_Verniciato fro
   {
      @escluso = 0
      if( UN_PADRE("Comodino_Hom") == 1 ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = X_fro
      @Y = Y_fro
      @Z = Z_fro
      @base_0.z = base_0.z + Z_gir

      @FLAG_Blend        = 0
      @Ruota             = 1
      @Verso             = 1

      @FIN_var_vetro     = ""
      @FIN_var_laccatura = "C001"
   }

   Posiziona FrontaleCassetto_368 cas
   {
      @escluso = 0
      if( UN_PADRE("Comodino_Class") == 1 ) { @escluso = 1 }

      GOSUB posa_blocco

      @X = X_fro
      @Y = Y_fro
      @Z = 20

      @base_0.x = base_0.x
      @base_0.z = base_0.z + Z_gir

      @RADICE = "FCHBT"
   }
}

Elemento FiancoVetro_Class
{
   Descrizione = "Fianco"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      alt_pie     ""  2.5
      blend_vtr   ""  0.5  Implicit

      FIN_var     ""  "C014"

      GEST_CODICE ""  "2123G01"
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Posiziona BloccoBlend vtr
   {
      GOSUB posa_blocco
      @base_0.y = base_0.y + alt_pie

      @BLEND__ = blend_vtr

      GOSUB rivestimento
      @f_rivestimento = "0.8"
   }

   Posiziona Blocco piesx
   {
      @X = 8
      @Y = alt_pie
      @Z = 40

      @base_0.x = base_0.x + X/2 - @X/2
      @base_0.z = base_0.z + 2

      GOSUB rivestimento
      @f_rivestimento = "1"
   }

   Posiziona Blocco piedx
   {
      @X = 8
      @Y = alt_pie
      @Z = 40

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

      GOSUB rivestimento
      @f_rivestimento = "1"
   }
}

Elemento Struttura_Vetro_Hom
{
   Descrizione = "Vetri"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X  "Larghezza"     477.5
      Y  "Altezza"         238
      Z  "Profondità"      413

      Spe_Top      ""  8
      Spe_Fia_Vtr  ""  8

      idx_fia_sx   "" -1
      idx_fia_dx   "" -1

      RADICE       ""  "FVHBT"

      HIDE         ""   2
   }

   Assegnazioni
   {
      GOSUB AssComune
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Posiziona Vetro_Saponetta_Verniciato fiasx
   {
      GOSUB posa_blocco

      @X = 413
      @Y = 235.5
      @Z = Spe_Fia_Vtr

      @base_0.X = base_0.X + @Z

      @FLAG_Blend    = 0
      @Ruota         = 1
      @Verso         = 1
      @ang_y         = -90
      @VAR_laccatura = 0
   }

   Posiziona Vetro_Saponetta_Verniciato top
   {
      @X = X - 5
      @Y = 413
      @Z = Spe_Top

      @base_0.X = base_0.X + 2.5
      @base_0.y = base_0.y + Y - @Z
      @base_0.z = base_0.z + @Y

      @FLAG_Blend    = 0
      @VAR_laccatura = 0
      @ang_x         = -90
   }

   Posiziona Vetro_Saponetta_Verniciato fiadx
   {
      GOSUB posa_blocco

      @X = 413
      @Y = 235.5
      @Z = Spe_Fia_Vtr

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

      @FLAG_Blend    = 0
      @Ruota         = 1
      @Verso         = 1
      @ang_y         = 90
      @VAR_laccatura = 0
   }
}

Elemento Led_Living
{
   Descrizione = "Led"
   Code        = COD
   Gruppo      = "LIV"
   Tipo        = Contenitore
   Forma       = ""
   Attrezzabile *

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                 "Larghezza"        460
      Y                 "Altezza"          7
      Z                 "Profondità"       8.6

      // X_max nominale a listino > 3128
      X_max             ""                 3028
      X_delta_sx        ""                 100
      X_delta_dx        ""                 100

      Attrezzabile      ""                 "Modulo*368;ModuloMateria*"

      VAR_Tipologia     ""                 "" SaveAlways

      NO_GEST           ""                 0
      FLAG_Alimentatore "Con Alimentatore" 0

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

      PCF_Elements      ""                 0 Implicit
      PCF_MATERIA       ""                 0 Implicit

      LED_Watt          ""                 0
   }

   Assegnazioni
   {
      GOSUB AssComune

      //Tipologia
      if( VAR_Tipologia == "" )
      {
         if( PCF_Elements > 0)      { VAR_Tipologia = "PCF_ELEMENTS" }
         if( PCF_MATERIA  > 0)      { VAR_Tipologia = "PCF_MATERIA"  }
         if( UN_PADRE("Comodino*")) { VAR_Tipologia = "COMODINO"     }
      }

      //Assorbimento
      xm = X/1000
      LED_Watt = 11.4 * xm
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

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

         // 0 - Controlli preliminari
         wk_ref_idx     = $query_p1
         wk_ref_nome    = NOME( wk_ref_idx)
         wk_ref_pcf     = VAR_VAL( wk_ref_idx, "pcfto")
         wk_ref_inpcf   = VAR_VAL( wk_ref_idx, "in_pcfto")

         wk_ref_pdr_idx = PADRE( wk_ref_idx, -1)

         // 0.1 - Pcf, solo elements o materia
         if( wk_ref_pcf > 0
           & VAR_VAL( wk_ref_idx, "PCF_Elements") == 0
           & VAR_VAL( wk_ref_idx, "PCF_MATERIA")  == 0)               { EXITSUB() }

         // 0.2 - Moduli, solo 368 o materia
         if( wk_ref_inpcf > 0
           & Is_In_StrArray( wk_ref_nome, Attrezzabile, ";") != 1)    { EXITSUB() }

         // 0.3 - No se led già presente
         COMPONENTI2( "wk_led", wk_ref_idx, NOME(ATTUALE()))
         if( wk_led > 0)                                              { EXITSUB() }

         // 0.4 - No se presente omega parziale (TODO: da rimuovere, va calcolato led adatto)
         COMPONENTI2( "wk_omega", wk_ref_idx, "SostegnoOmega")
         wk_omega_num = 1
         while ( wk_omega_num <= wk_omega)
         {
            if( VAR_VAL( wk_omega[wk_omega_num], "VAR_Parziale") > 0) { EXITSUB() }

            wk_omega_num = wk_omega_num + 1
         }

         // 0.5 - No se presente un glass o top omega
         COMPONENTI2( "wk_glass", wk_ref_idx, "ModuloGlass_368Sideboard")
         COMPONENTI2( "wk_top", wk_ref_idx, "TopOmega")
         if( wk_glass + wk_top > 0 ) { EXITSUB() }

         // 0.6 - Moduli: devo essere singolo o figlio di un pcf troppo largo
         if( wk_ref_inpcf > 0)
         {
            wk_ref_idx = wk_ref_pdr_idx
            GOSUB Led_Living_Dimensione
            if( X <= X_max)                                           { EXITSUB() }
         }

         // 0.7 - Test lunghezza
         wk_ref_idx = $query_p1
         GOSUB Led_Living_Dimensione
         if( X > X_max)                                               { EXITSUB() }

         // 0.8 - Test posizione in altezza
         COMPONENTI2( "wk_fusti", wk_ref_idx, "FustoModulo*")
         if( wk_fusti <= 0)                                           { EXITSUB() }

         // 0.8.1 - Se ho più fusti ricavo quello più in basso
         wk_ref_fusto = -1
         if( ArraySortVarNum( ATTUALE(), "wk_fusti", "base_0.y"))     { wk_ref_fusto = wk_fusti[1] }

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

         wk_ref_alt       = VAR_VAL( wk_ref_idx, "base_0.y")
         wk_ref_fusto_alt = VAR_VAL( wk_ref_fusto, "base_0.y")

         // 0.8.2 - Articoli sospesi con fusti effettivamente sospesi
         if( wk_ref_alt > 0 & wk_ref_fusto_alt == wk_ref_alt)         { $QueryResult__ = 1 }

         // 0.8.3 - Pcf a terra senza fusti a filo sotto
         if( wk_ref_alt == 0 & wk_ref_fusto_alt > wk_ref_alt)         { $QueryResult__ = 1 }
      }
   }

   Attrezza
   {
      idx_ref = @idx_att
      vano_n  = $vano_n
      base_0  = $vano_0

      wk_ref_idx = idx_ref
      GOSUB Led_Living_Dimensione

      wk_ref_omega_alt = 0
      if( VAR_VAL( ATTUALE(), "wk_omega") > 0
        & IsIdx( ATTUALE(), GetArrayVar( "wk_omega", 1))) { wk_ref_omega_alt = VAR_VAL( wk_omega[1], "Y") }

      base_0.x = @base_0.x + X_delta_sx
      base_0.y = @base_0.y + wk_ref_omega_alt
      base_0.z = @base_0.z + 5 + Z

      ang_x = 180
   }

   Controlli
   {
      GOSUB CtrlEscluso
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      perRADICE = "ILLEDSB"

      FLAG_Alimentatore = 1

      GEST_Y = 10
      GEST_Z = 10

      if( VAR_Tipologia == "COMODINO")
      {
         perRADICE = "LEDPAN368"

         FLAG_Alimentatore = 0

         GEST_Y = Y
         GEST_Z = Z
      }

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

      GOSUB GestComune_Post
      GOSUB CAMBIA_VAR
   }

   Procedura cancella
   {
      GOSUB BloccaCancellaComponente
   }

   Posiziona _graf_Led_PannelloRetro_368 bl
   {
      GOSUB posa_blocco
      @Verso = 1
   }

   Posiziona RigaOrdine_NonGraficato trasf
   {
      @escluso = 1 - FLAG_Alimentatore

      @X = 247
      @Y = 30
      @Z = 17

      @base_0 = base_0

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

//Simone 21/04/2023
Elemento Sedia_Generica
{
   Descrizione = "Sedia"
   Code        = COD
   Gruppo      = "SED"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                  "Larghezza"     575
      Y                  "Altezza"       800
      Z                  "Profondità"    550

      VAR_Modello        ""                0  Menu ( Mod_Sedia )
      Var_Modello_Str    ""               ""

      VAR_Tipologia      ""                1  Menu ( Tipologia_Seduta )
      Var_Tipologia_Str  ""               ""

      Var_TipoGambe      ""               "METALLO"

      COD_EREDITA        ""               "PRE;POST"
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Assegnazioni_Sedia_Gen
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune

      finitura    = VAR_VAL_STR(ATTUALE(),STRCAT("GEST_",FIN_var_gambe))
      finitura_ns = STRDADB(ATTUALE(),"DAMMI_NONSIGNIF",STRCAT("GEST_",FIN_var_gambe,";",finitura))

      Var_TipoGambe = "LEGNO"
      if( IS_MATCH(finitura_ns,"BC*") == 1 ) { Var_TipoGambe = "METALLO" }
   }

   Gestionale
   {
      GOSUB GestComune
      GOSUB GestComune_Post
   }

   Posiziona Telaio_Sedia_Gen telaio
   {
      GOSUB posa_blocco
      @HIDE = 1

      @FIN_var = FIN_var_gambe
   }

   Posiziona Seduta_Sedia_Gen seduta
   {
      GOSUB posa_blocco
      @HIDE = 1
   }

   Posiziona RigaOrdine_Sostituzione rives
   {
      @FLAG_escluso = 1
      if( Var_Modello_Str == "COLOMBINA" )
      {
         @FLAG_escluso = 0
         @VAR_Gest_Codice = STRCAT(wk_cod_topl,"R")
      }

      GOSUB posa_blocco

      @FLAG_Sost_Check_Idx_Padre = 1
      @VAR_Sost_Check_Msg = "Non è possibile sostituire sia la sedia che il rivestimento, selezionare solo il rivestimento"
   }
}

Elemento Telaio_Sedia_Gen
{
   Descrizione = "Telaio"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Var_Modello_Str                ""  ""  Implicit
      Var_Modello_Str_Abb            ""  ""  Implicit
      Var_Tipologia_Str              ""  ""  Implicit
      Var_TipoGambe                  ""  ""  Implicit

      FIN_var                        ""  ""

      file_path                      ""  ""  Implicit
      import_telaio                  ""  ""
      import_tel_exist               ""  0

      wk_cod_topl                    ""  ""  Implicit
      GEST_CODICE                    ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)

      Var_TipoGambe_Abb = LEFT( Var_TipoGambe, 1)

      file_ext = "#A.m4s"
      nome_file_telaio = STRCAT(file_path, "TELAIO_", Var_Tipologia_Str, "_", Var_Modello_Str)
      if( Var_Modello_Str == "COLOMBINA" )       { nome_file_telaio = STRCAT( file_path, "TELAIO_", Var_Tipologia_Str, "_", Var_Modello_Str_Abb, "_", Var_TipoGambe_Abb) }
      if( IS_MATCH(Var_Modello_Str, "AMIDA*") )  { nome_file_telaio = STRCAT( file_path, "TELAIO_AMIDA_", Var_TipoGambe_Abb) }

      import_telaio = STRCAT(nome_file_telaio, file_ext)
      if( import_telaio != VAR_VAL_STR(ATTUALE(),"import_telaio_prec") ) { import_tel_exist = FILE_EXIST(import_telaio) }
      if( import_tel_exist ) { import_telaio = STRCAT(import_telaio, "|model|model.hsf") }
      else
      {
         file_ext = ".sat"
         import_telaio = STRCAT(nome_file_telaio, file_ext)
      }

      STP_Bollina = 1
      STP_Bollina_Pnt = [X/2, 0, Z]
      STP_Bollina_Cat = FIN_var
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona M4S tel
   {
      @escluso = SE_NUM(Var_Modello_Str == "BEAT", 1, 0)

      GOSUB posa_blocco
      GOSUB rivestimento

      if( Var_Modello_Str == "CHAMA" )
      {
         @m_rivestimento = ""
         @c_rivestimento = $c_grafite
      }
      SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")

      @import = import_telaio
   }

   Posiziona SgabelloBeat_Assieme_Telaio sga
   {
      @escluso = SE_NUM(Var_Modello_Str == "BEAT", 0, 1)

      GOSUB posa_blocco
      //GOSUB rivestimento
   }

   Posiziona RigaOrdine_NonGraficato str
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA" ) { @escluso = 0 }

      @GEST_CODICE = "SE0006"

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_NonGraficato str2
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA"
        & Var_Tipologia_Str == "DIVANO" ) { @escluso = 0 }

      @GEST_CODICE = "SE0006"

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_Sostituzione gambe
   {
      if( Var_Modello_Str == "COLOMBINA" ) { @VAR_Gest_Codice = STRCAT(wk_cod_topl,"T") }

      if( Var_Modello_Str == "RUFFLE" ) { @VAR_Gest_Codice = "SED042" }

      if( Var_Modello_Str == "ZEPPELIN" )
      {
         @VAR_Gest_Codice = "SED012"
         if( Var_Tipologia_Str == "POLTRONA" ) { @VAR_Gest_Codice = "SED022" }
      }

      if( Var_Modello_Str == "NACHO" )
      {
         @VAR_Gest_Codice = "SED032"
         if( Var_Tipologia_Str == "POLTRONA" ) { @VAR_Gest_Codice = "SED052" }
      }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
      @VAR_Sost_Check_Msg = "Non è possibile sostituire sia la sedia completa che il telaio, selezionare solo il telaio"
   }
}

Elemento Seduta_Sedia_Gen
{
   Descrizione = "Seduta"
   Code        = COD
   Gruppo      = ""
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      Var_Modello_Str      ""  ""      Implicit
      Var_Modello_Str_Abb  ""  ""      Implicit
      Var_Tipologia_Str    ""  ""      Implicit

      FIN_var_seduta       ""  "C109"  Implicit
      FIN_var_interno      ""  ""      Implicit
      FIN_var_schienale    ""  ""      Implicit

      file_path            ""  ""      Implicit
      import_seduta        ""  ""
      import_sed_exist     ""  0

      wk_cod_topl          ""  ""      Implicit
      GEST_CODICE          ""  ""
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)

      file_ext = "#A.m4s"
      import_int       = ""
      import_schienale = ""

      nome_file_seduta = STRCAT( file_path, "SEDUTA_", Var_Tipologia_Str, "_", Var_Modello_Str)
      if( Var_Modello_Str == "COLOMBINA"
        | Var_Modello_Str == "AMIDA STRETTA" ) { nome_file_seduta = STRCAT( file_path, "SEDUTA_", Var_Tipologia_Str, "_", Var_Modello_Str_Abb) }

      import_seduta = STRCAT(nome_file_seduta, file_ext)
      if( import_seduta != VAR_VAL_STR(ATTUALE(),"import_seduta_prec") ) { import_sed_exist = FILE_EXIST(import_seduta) }

      if( import_sed_exist ) { import_seduta = STRCAT(import_seduta, "|model|model.hsf") }
      else
      {
         file_ext = ".sat"
         import_seduta = STRCAT(nome_file_seduta, file_ext)
      }

      // componenti specifici in m4s
      if( Var_Modello_Str == "NACHO" )
      {
         import_int = STRCAT( file_path, "INTERNO_", Var_Tipologia_Str, "_", Var_Modello_Str, "#A.m4s|model|model.hsf")
      }

      if( Var_Modello_Str == "CHAMA" )
      {
         import_int = STRCAT( file_path, "BORDINO_", Var_Tipologia_Str, "_", Var_Modello_Str, "#A.m4s|model|model.hsf")
         import_schienale = STRCAT( file_path, "SCHIENALE_", Var_Tipologia_Str, "_", Var_Modello_Str, "#A.m4s|model|model.hsf")
      }

      STP_Bollina = 1
      STP_Bollina_Pnt =[X/2, Y - 150, Z]
      STP_Bollina_Cat = STRCAT(FIN_var_seduta, ";", FIN_var_interno,  ";", FIN_var_schienale)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona M4S sed
   {
      @escluso = SE_NUM(Var_Modello_Str == "BEAT", 1, 0)

      GOSUB posa_blocco

      FIN_var = FIN_var_seduta
      GOSUB rivestimento
      SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")

      @import = import_seduta
   }

   Posiziona CilindroY cus
   {
      @escluso = SE_NUM(Var_Modello_Str == "BEAT", 0, 1)

      @X = X
      @Y = $SgabelloBeat_Spe_Seduta
      @Z = @X

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

      GOSUB rivestimento
   }

   Posiziona RigaOrdine_NonGraficato div
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA" ) { @escluso = 0 }

      @GEST_CODICE = "SE0003"
      if( Var_Tipologia_Str == "DIVANO" ) { @GEST_CODICE = "SE0004" }

      @DIM_GEST = 1
   }

   Posiziona M4S sch
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA" ) { @escluso = 0 }

      GOSUB posa_blocco

      FIN_var = FIN_var_schienale
      GOSUB rivestimento
      SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")

      @import = import_schienale
   }

   Posiziona RigaOrdine_NonGraficato sch1
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA" ) { @escluso = 0 }

      @GEST_CODICE = "SE0005"

      @DIM_GEST = 1
   }

   Posiziona RigaOrdine_NonGraficato sch2
   {
      @escluso = 1
      if( Var_Modello_Str == "CHAMA"
        & Var_Tipologia_Str == "DIVANO" ) { @escluso = 0 }

      @GEST_CODICE = "SE0005"

      @DIM_GEST = 1
   }

   Posiziona M4S riv_int
   {
      @escluso = 1
      if( Var_Modello_Str == "NACHO"
        | Var_Modello_Str == "CHAMA" ) { @escluso = 0 }

      GOSUB posa_blocco

      FIN_var = FIN_var_interno
      GOSUB rivestimento
      SpalmaRiv( ATTUALE(), ATTUALE(), "__HSF__")

      @import = import_int
   }

   Posiziona RigaOrdine_Sostituzione seduta
   {
      if( Var_Modello_Str == "COLOMBINA" ) { @VAR_Gest_Codice = STRCAT(wk_cod_topl,"S") }

      if( Var_Modello_Str == "RUFFLE" ) { @VAR_Gest_Codice = "SED041" }

      if( Var_Modello_Str == "ZEPPELIN" )
      {
         @VAR_Gest_Codice = "SED011"
         if( Var_Tipologia_Str == "POLTRONA" ) { @VAR_Gest_Codice = "SED021" }
      }

      if( Var_Modello_Str == "NACHO" )
      {
         @VAR_Gest_Codice = "SED031"
         if( Var_Tipologia_Str == "POLTRONA" ) { @VAR_Gest_Codice = "SED051" }
      }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
      @VAR_Sost_Check_Msg = "Non è possibile sostituire sia la sedia completa che la seduta, selezionare solo la seduta"
   }
}

Elemento SgabelloBeat_Assieme_Telaio
{
   Descrizione = "Telaio Sgabello Beat"
   Code        = COD
   Gruppo      = "SGB"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

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

      SgabelloBeat_Poggiapiedi_OffY  ""  0   Implicit

      FIN_var_gambe                  ""  ""  Implicit
      FIN_var_interno                ""  ""  Implicit
   }

   Assegnazioni
   {
      GOSUB AssComune

      FIN_idx_gest = GetPrimoGest( ATTUALE(), 0)
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB GestComune_Post
   }

   Posiziona CilindroY base
   {
      @X = X
      @Y = $SgabelloBeat_Spe_Base
      @Z = @X

      @base_0 = base_0
      @base_0.z = base_0.z + $SgabelloBeat_Telaio_OffZ

      FIN_var = FIN_var_gambe
      GOSUB rivestimento
   }

   Posiziona CilindroY agg
   {
      @X = $SgabelloBeat_Diam_SuppBase
      @Y = $SgabelloBeat_Spe_SuppBase
      @Z = @X

      @base_0.x = base_0.x + $SgabelloBeat_Diam_Base/2 - @X/2
      @base_0.y = base_0.y + Y - @Y - $SgabelloBeat_Spe_Seduta
      @base_0.z = base_0.z + $SgabelloBeat_Telaio_OffZ + $SgabelloBeat_Diam_Base/2 - @X/2

      FIN_var = FIN_var_gambe
      GOSUB rivestimento
   }

   Posiziona CilindroY palo
   {
      @X = $SgabelloBeat_Diam_Palo
      @Y = Y - $SgabelloBeat_Spe_Base - $SgabelloBeat_Spe_Seduta - $SgabelloBeat_Spe_SuppBase
      @Z = @X

      @base_0.x = base_0.x + $SgabelloBeat_Diam_Base/2 - @X/2
      @base_0.y = base_0.y + $SgabelloBeat_Spe_Base
      @base_0.z = base_0.z + $SgabelloBeat_Telaio_OffZ + $SgabelloBeat_Diam_Base/2 - @X/2

      FIN_var = FIN_var_gambe
      GOSUB rivestimento
   }

   Posiziona _graf_poggiapiedi_beat pgg
   {
      @base_0.x = base_0.x + $SgabelloBeat_Diam_Base/2
      @base_0.y = base_0.y + SgabelloBeat_Poggiapiedi_OffY - @Y
      @base_0.z = base_0.z + Z - @Z

      FIN_var = FIN_var_interno
      GOSUB rivestimento
   }
}

Elemento Lampada_Generica
{
   Descrizione = "Lampada"
   Code        = COD
   Gruppo      = "GRP"
   Tipo        = Contenitore
   Forma       = ""

   Variabili
   {
      #include %path_bdm%\var_db.inc

      X                       "Larghezza"       850
      Y                       "Altezza"         770
      Z                       "Profondità"      250

      VAR_Modello             ""                0     Menu ( Mod_Lampada )
      VAR_Modello_Str         ""                ""
      VAR_Forma               ""                1    Utente ( )

      FLAG_Gest_DimCodifica   ""               0

      FIN_var                 ""                "C042"

      M4_CNT_LINK_MODE__      ""                1
      M4_LINK2WALL_MODE__     ""                4

      FillerM2G               " "               ""    ShowAlways
   }

   Assegnazioni
   {
      GOSUB AssComune

      GOSUB Ass_LampadaGen
   }

   PuntiNotevoli
   {
      GOSUB punti
   }

   #include %path_bdm%\Tlib\orie.inc

   Controlli
   {
      GOSUB CtrlComune
   }

   Gestionale
   {
      GOSUB GestComune

      GOSUB Gest_LampadaGen

      GOSUB GestComune_Post
   }

   Posiziona __import__ rosone
   {
      @escluso = 1
      if( FileSat1_exist > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat1

      @c_rivestimento = $c_alluminio
   }

   Posiziona __import__ cavi
   {
      @escluso = 1
      if( FileSat2_exist > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat2

      @c_rivestimento = $c_alluminio
   }

   Posiziona __import__ strutt
   {
      @escluso = 1
      if( FileSat3_exist > 0 ) { @escluso = 0 }

      GOSUB posa_blocco
      GOSUB rivestimento

      @import = FileSat3

      if( Var_Modello_Str == "CHIC" )
      {
         @m_rivestimento = ""
         @c_rivestimento = $c_alluminio
      }
   }

   Posiziona __import__ led
   {
      @escluso = 1
      if( FileSat4_exist > 0 ) { @escluso = 0 }

      GOSUB posa_blocco

      @import = FileSat4

      @c_rivestimento = [255,255,102]
      @f_rivestimento = "0.4"
      @TrLadsMaterial = "GlowTheGeometry"
      @TrLadsLight    = "LG_newledstripe"
   }

   //rosone
   Posiziona RigaOrdine_Sostituzione sost1
   {
      if( Var_Modello_Str == "CHIC" ) { @VAR_Gest_Codice = "LIG020R" }
      if( Var_Modello_Str == "GLEE" ) { @VAR_Gest_Codice = "LIG005R" }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
   }

   //kit alimentatore
   Posiziona RigaOrdine_Sostituzione sost2
   {
      if( Var_Modello_Str == "CHIC" ) { @VAR_Gest_Codice = "LIG020A" }
      if( Var_Modello_Str == "GLEE" ) { @VAR_Gest_Codice = "LIG005A" }
      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
   }

   //kit lamiera copri rosone
   Posiziona RigaOrdine_Sostituzione sost3
   {
      if( Var_Modello_Str == "CHIC" ) { @VAR_Gest_Codice = "LIG020L" }
      if( Var_Modello_Str == "GLEE" ) { @VAR_Gest_Codice = "LIG005L" }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
   }

   //kit copri borchia
   Posiziona RigaOrdine_Sostituzione sost4
   {
      if( Var_Modello_Str == "GLEE" ) { @VAR_Gest_Codice = "LIG005C" }

      GOSUB posa_blocco

      @FLAG_Gest_DimCodifica = 1
      @FLAG_Sost_Check_Idx_Padre = 1
   }
}

Elemento _graf_poggiapiedi_beat
{
   Descrizione = "Poggiapiedi"
   Code        = COD
   Gruppo      = "GRP"
   Tipo        = ""
   Forma       = PathSweep

   Variabili
   {
      X             "Larghezza"       268
      Y             "Altezza"          30
      Z             "Profondità"      268
   }

   PuntiNotevoli
   {
      x = 8
      Raggio = X/2
      J = Raggio - Raggio*SENO(45)

      base_0        =   [ 0, 0, 0 ]
      base_1        =   [ 0, 0, x ]
      base_2        =   [ 0, Y, x ]
      base_3        =   [ 0, Y, 0 ]

      base_path_0   =   [ 0,            0,   0      ]
      arc_path_0    =   [ -Raggio + J,  0,   J      ]
      base_path_1   =   [ -Raggio,      0,   Raggio ]
      arc_path_1    =   [ -Raggio + J,  0,   Z - J  ]
      base_path_2   =   [ 0,            0,   Z      ]
      arc_path_2    =   [ Raggio - J,   0,   Z - J  ]
      base_path_3   =   [ Raggio,       0,   Raggio ]
      arc_path_3    =   [ Raggio - J,   0,   J      ]
      base_path_4   =   base_path_0

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

Subroutine
{
   PROCEDURA DecodificaTipoTavolo
   {
      ModTavoloStr  = UPPER(GetValMenuStr(ATTUALE(),"ModTavolo"))
      FormaPianoStr = UPPER(GetValMenuStr(ATTUALE(),"FormaPiano"))
      TipoPianoStr  = UPPER(GetValMenuStr(ATTUALE(),"TipoPiano"))
   }

   PROCEDURA ConfiguraTavolo
   {
      M4_GRUPPO__ = MSG(1033)

      GOSUB DecodificaTipoTavolo

      path_sat_tavoli = STRCAT($path_sat,"Tavoli\")
      path_m4s_tavoli = STRCAT($path_m4s,"Top Tavoli\")
      if( ModTavoloStr == "BOLD" ) { path_sat_tavoli = STRCAT($path_sat,"Tavoli\Bold\") }
      if( ModTavoloStr == "HOA"  ) { path_sat_tavoli = STRCAT($path_sat,"Tavoli\Hoa\")  }
      if( IS_MATCH(ModTavoloStr,"ALBERONI*") == 1 ) { path_sat_tavoli = STRCAT($path_sat,"Tavoli\Alberoni\")  }
      if( IS_MATCH(ModTavoloStr,"CORRER*") == 1 )   { path_sat_tavoli = STRCAT($path_sat,"Tavoli\Correr\")  }

      file_import_gen = ""

      //****  gambe/supporti ****
      // 0 - escluso
      // 1 - SAT
      Gamba1 = 0     Gamba1_sat = ""   Gamba1_PosX = 0   Gamba1_PosZ = 0   Gamba1_X = 0   Gamba1_Z = 0   idx_gamba_1 = -1
      Gamba2 = 0     Gamba2_sat = ""   Gamba2_PosX = 0   Gamba2_PosZ = 0   Gamba2_X = 0   Gamba2_Z = 0   idx_gamba_2 = -1
      Gamba3 = 0     Gamba3_sat = ""   Gamba3_PosX = 0   Gamba3_PosZ = 0   Gamba3_X = 0   Gamba3_Z = 0   idx_gamba_3 = -1
      Gamba4 = 0     Gamba4_sat = ""   Gamba4_PosX = 0   Gamba4_PosZ = 0   Gamba4_X = 0   Gamba4_Z = 0   idx_gamba_4 = -1

      //gestisco doppio sat
      Gamba1_sat2 = ""

      GambaVtr1 = 0  GambaVtr1_PosX = 0   GambaVtr1_PosZ = 0  GambaVtr1_Z = 0
      GambaVtr2 = 0  GambaVtr2_PosX = 0   GambaVtr2_PosZ = 0  GambaVtr2_Z = 0
      GambaY = 0

      //gestione dedicata
      Gambe_Hoa = 0
      Gambe_Hoa_Ovali = 0
      Gambe_Hoa_Cil = 0

      //****  piano ****
      // 0 - rettangolo
      // 1 - botte
      // 2 - tondo
      // 3 - SAT
      // 4 - Loto
      // 5 - M4S
      GraficaPiano = -1
      Piano_sat1 = ""
      Piano_sat2 = ""
      Piano_sat3 = ""
      Piano_m4s1 = ""

      //definisco spessore piano
      Piano_Spe = 36
      if( TipoPiano == 0
        | TipoPiano == 1 )
      {
         Piano_Spe = 18
         if( ModTavolo == 11
           | ModTavolo == 12 ) { Piano_Spe = 12 }
      }
      if( TipoPiano == 4 )
      {
         Piano_Spe = 15
         //LZ 14/11 corretto spessore piano
         //Trasparente e tondo: spessore 12 - MEET e WADI
         if( FormaPiano == 2 | ModTavolo == 5 | ModTavolo == 6 ) { Piano_Spe = 12 }
      }
      if( TipoPiano == 5 ) { Piano_Spe = 12 }
      //Finewwod
      if( TipoPiano == 7 ) { Piano_Spe = 60 }
      //Mdi Correr - 6 + 6
      if( TipoPiano == 8 )
      {
         Piano_Spe = 12
         // Alberoni - 6 + 10
         if( ModTavolo == 9
           | ModTavolo == 10 ) { Piano_Spe = 16 }
      }
      //Marmo - comprendo anche piastra in ferro sp 2mm, non su d.500
      if( TipoPiano == 9 )
      {
         Piano_Spe = 22
         if( X == 500 ) { Piano_Spe = 20 }
      }

      //Simone 23/09/21 - Tavolo Loto
      if( ModTavolo == 7 ) { Piano_Spe = 30 }

      Rie = 10.17
      FIN_var_prolunghe = "C100"
      X_prolunga = 974
      if( X > 1000 ) { X_prolunga = 1174 }

      //riduzioni
      x_min = 0   x_max = 0
      z_min = 0   z_max = 0

      FIN_var_piano = "C044"
      FIN_var_gambe = "C022"

      //U-TABLE
      if( ModTavolo==0 )
      {
         Gamba1 = 1
         Gamba1_sat = "UTABLE_GAMBA.sat"
         if( X > 2500 ) { Gamba1_sat = "UTABLE_GAMBA_3000.sat" }
         Gamba1_PosX = X/2
         Gamba1_PosZ = Z/2

         GambaY = 731
      }

      //MRX-TABLE
      if( ModTavolo==1 )
      {
         Gamba1 = 1
         Gamba1_sat = "MRX_GAMBA_SX.sat"
         Gamba1_PosX = 500
         Gamba1_PosZ = Z/2

         Gamba2 = 1
         Gamba2_sat = "MRX_GAMBA_DX.sat"
         Gamba2_PosX = X - 500
         Gamba2_PosZ = Z/2

         GambaY = 726

         FIN_var_gambe = "C023"

         x_min = 2200   x_max = 3000
         z_min = 1200   z_max = 1200
      }

      //P&J-TABLE
      if( ModTavolo==2 )
      {
         wk_verso = "SX"
         if( Verso>0 ) { wk_verso = "DX" }

         GambaY = Y - Piano_Spe

         Gamba1 = 1
         Gamba1_sat = STRCAT("P&J_GAMBA_",wk_verso,".sat")

         Gamba1_sat = "P&J_GAMBA_SX_F.sat"
         Gamba1_sat2 = "P&J_GAMBA_DX_R.sat"

         if( Verso>0 )
         {
            Gamba1_sat  = "P&J_GAMBA_SX_R.sat"
            Gamba1_sat2 = "P&J_GAMBA_DX_F.sat"
         }

         Gamba1_X = X
         Gamba1_Z = Z

         //vetro
         GambaVtr1_Z = 268
         wk_offx = 506
         wk_offz = 190
         if( X==1800 ) { wk_offx = 540               GambaVtr1_Z = 268 }
         if( X==2000 ) { wk_offx = 590               GambaVtr1_Z = 385 }
         if( X==2200 ) { wk_offx = 742 wk_offz = 145 GambaVtr1_Z = 385 }
         if( X==2480 ) { wk_offx = 742 wk_offz = 145 GambaVtr1_Z = 385 }

         GambaVtr2_Z = GambaVtr1_Z

         GambaVtr1 = 1
         GambaVtr2 = 1

         GambaVtr1_PosX = wk_offx - 6
         GambaVtr2_PosX = X - wk_offx - 6

         GambaVtr1_PosZ = wk_offz
         GambaVtr2_PosZ = Z - wk_offz - GambaVtr2_Z

         if( Verso>0 )
         {
            GambaVtr2_PosZ = wk_offz
            GambaVtr1_PosZ = Z - wk_offz - GambaVtr2_Z
         }
      }

      //JANEIRO-TABLE
      if( ModTavolo==3 )
      {
         Gamba1 = 1
         Gamba1_sat = "JANEIRO_GAMBA.sat"
         Gamba1_PosX = X/2
         Gamba1_PosZ = Z/2

         GambaY = 710

         //Rettangolare
         if( FormaPiano==0 )
         {
            x_min = 1600   x_max = 2200
            z_min = 1000   z_max = 1100
         }
         //tondo
         if( FormaPiano==2 )
         {
            x_min = 1200   x_max = 1800
         }
      }

      //Simone 09/09/21 - MEET TABLE
      if( ModTavolo==5 )
      {
         Gamba1 = 1
         Gamba1_PosX = X/2 - 535
         Gamba1_PosZ = Z/2

         Gamba1_sat = "TAVOLO MEET - BASAMENTO - PARTE 02.SAT"
         Gamba1_sat2 = "TAVOLO MEET - BASAMENTO - PARTE 01.SAT"

         GambaY = 736
         FIN_var_gambe = "C022"
      }

      //Simone 10/09/21 - WADI TABLE
      if( ModTavolo==6 )
      {
         Gamba1 = 1
         Gamba1_PosX = X/2
         Gamba1_PosZ = Z/2

         Gamba1_sat = "TAVOLO WADI - BASAMENTO - PARTE 01.SAT"
         Gamba1_sat2 = "TAVOLO WADI - BASAMENTO - PARTE 02.SAT"

         GambaY = 737
         FIN_var_gambe = "C022"
      }

      //LOTO TABLE
      if( ModTavolo==7 )
      {
         Gamba1 = 1
         Gamba1_PosX = 9.9
         Gamba1_PosZ = Z + 0.7

         Gamba2 = 1
         Gamba2_PosX = X + 0.7
         Gamba2_PosZ = Z - 9.9

         Gamba3 = 1
         Gamba3_PosX = -0.7
         Gamba3_PosZ = 9.9

         Gamba4 = 1
         Gamba4_PosX = X - 9.9
         Gamba4_PosZ = -0.7

         Gamba1_sat = "TAVOLO LOTO - GAMBA 1.SAT"
         Gamba2_sat = "TAVOLO LOTO - GAMBA 2.SAT"
         Gamba3_sat = "TAVOLO LOTO - GAMBA 3.SAT"
         Gamba4_sat = "TAVOLO LOTO - GAMBA 4.SAT"

         GambaY = 730
         FIN_var_gambe = "C023"
      }

      //HOA TABLE
      if( ModTavolo==8 )
      {
         Gamba1 = 1
         Gamba1_PosX = X/2
         if( X >= 2500
           & TipoPianoStr == "WILDWOOD" )
         {
            Gamba1_PosX = (X - 20)/2
         }
         Gamba1_PosZ = Z/2

         Gamba1_sat = STRCAT("HOA_GAMBE_",FormaPianoStr,"_",STR(X),"x",STR(Z),".sat")
         GambaY = 729
         FIN_var_gambe = "C023"

         Gambe_Hoa_Ovali = 2
         Gambe_Hoa_Cil   = 1
         if( X > 2500 ) { Gambe_Hoa_Cil = 2 }

         //tondo
         if( FormaPiano == 2 )
         {
            if( X < 1600 )
            {
               Gambe_Hoa_Ovali = 1
               Gambe_Hoa_Cil = 2
            }
         }

         //ellittico
         if( FormaPiano == 3 )
         {
            if( X < 2200 )
            {
               Gambe_Hoa_Ovali = 1
               Gambe_Hoa_Cil = 2
            }
         }
         Gambe_Hoa = Gambe_Hoa_Ovali + Gambe_Hoa_Cil

         GEST_Y = Y
      }

      if( ModTavolo == 9
        | ModTavolo == 10 )
      {
         Gamba1 = 1

         GambaY = 718
         Gamba1_X = 600
         if( X > 1580 ) { Gamba1_X = 700 }
         //coffee table
         if( ModTavolo == 10 )
         {
            GambaY = 478
            Gamba1_X = 300
            if( X > 500 ) { GambaY = 378 }
            if( X > 600 )
            {
               GambaY = 278
               Gamba1_X = 440
            }
         }
         Gamba1_Z = Gamba1_X

         Gamba1_PosX = X/2
         Gamba1_PosZ = Z/2

         Gamba1_sat = STRCAT("TAVOLO ALBERONI - BASAMENTO_",STR(Gamba1_X),"x",STR(GambaY),".SAT")

         FIN_var_gambe = "C022"

         GEST_Y = GambaY + Piano_Spe
      }

      //CORRER TABLE
      if( ModTavolo == 11
        | ModTavolo == 12 )
      {
         Gamba1 = 1
         Gamba1_X = 60
         Gamba1_Z = 80

         Gamba2 = 1
         Gamba2_X = Gamba1_X
         Gamba2_Z = Gamba1_Z
         Gamba2_PosZ = Z - 73.4

         Gamba3 = 1
         Gamba3_X = Gamba1_X
         Gamba3_Z = Gamba1_Z
         Gamba3_PosX = X - 73.4
         Gamba3_PosZ = Z - 73.4

         Gamba4 = 1
         Gamba4_X = Gamba1_X
         Gamba4_Z = Gamba1_Z
         Gamba4_PosX = X - 73.4

         Gamba1_sat = STRCAT("TAVOLO ",ModTavoloStr," - GAMBA 1.SAT")
         Gamba2_sat = STRCAT("TAVOLO ",ModTavoloStr," - GAMBA 2.SAT")
         Gamba3_sat = STRCAT("TAVOLO ",ModTavoloStr," - GAMBA 3.SAT")
         Gamba4_sat = STRCAT("TAVOLO ",ModTavoloStr," - GAMBA 4.SAT")

         GambaY = Y - 0.5

         FIN_var_gambe = "C023"
         if( TipoPianoStr == "FINEWOOD" )
         {
            FIN_var_piano = "C028"
            FIN_var_gambe = FIN_var_piano

            GambaY = Y - 9
            Gamba1_sat = STRCAT("TAVOLO ",ModTavoloStr," ",TipoPianoStr," - GAMBA 1.SAT")
            Gamba2_sat = STRCAT("TAVOLO ",ModTavoloStr," ",TipoPianoStr," - GAMBA 2.SAT")
            Gamba3_sat = STRCAT("TAVOLO ",ModTavoloStr," ",TipoPianoStr," - GAMBA 3.SAT")
            Gamba4_sat = STRCAT("TAVOLO ",ModTavoloStr," ",TipoPianoStr," - GAMBA 4.SAT")
         }

         if( IS_VAR_FIXED(ATTUALE(),"Y") ) { Gamba1 = 3 }
         Gamba2 = Gamba1
         Gamba3 = Gamba1
         Gamba4 = Gamba1
      }

      //**  Forma del piano **
      //Rettangolare
      if( FormaPiano==0 )
      {
         //Vetro - XGLASS - Marmo
         GraficaPiano = 0

         //WildWood
         if( TipoPiano==2 )
         {
            //se standard utilizzo il SAT
            GraficaPiano = 3
            Piano_sat1   = STRCAT("PianoTavRetWW_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2   = STRCAT("PianoTavRetWW_",STR(X),"x",STR(Z),"_2.sat")
            //Piano sagomato dedicato
            if( ModTavoloStr == "MEET" ) { Piano_sat1 = STRCAT("PianoTavRetWW_",STR(X),"x",STR(Z),"_M1.sat") Piano_sat2 = "" }
            if( ModTavoloStr == "WADI" ) { Piano_sat1 = STRCAT("PianoTavRetWW_",STR(X),"x",STR(Z),"_W1.sat") Piano_sat2 = "" }
         }
         //HayWood/AgeWood
         if( TipoPiano==3 )
         {
            //se standard utilizzo il SAT
            GraficaPiano = 3
            Piano_sat1   = STRCAT("PianoTavRetHA_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2   = STRCAT("PianoTavRetHA_",STR(X),"x",STR(Z),"_2.sat")
            Piano_sat3   = STRCAT("PianoTavRetHA_",STR(X),"x",STR(Z),"_3.sat")
         }

         if( GraficaPiano==3 )
         {
            //se non esiste il sat grafica rettangolare
            if( FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat1))<0
              & FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat2))<0 ) { GraficaPiano = 0 }
         }
      }

      //Botte
      if( FormaPiano==1 )
      {
         //Vetro - XGLASS
         GraficaPiano = 1

         //WildWood
         if( TipoPiano==2 )
         {
            //se standard utilizzo il SAT
            GraficaPiano = 3
            Piano_sat1   = STRCAT("PianoTavBotteWW_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2   = STRCAT("PianoTavBotteWW_",STR(X),"x",STR(Z),"_2.sat")
            //Piano sagomato dedicato
            if( ModTavoloStr == "MEET" ) { Piano_sat1 = STRCAT("PianoTavBotteWW_",STR(X),"x",STR(Z),"_M1.sat") Piano_sat2 = "" }
            if( ModTavoloStr == "WADI" ) { Piano_sat1 = STRCAT("PianoTavBotteWW_",STR(X),"x",STR(Z),"_W1.sat") Piano_sat2 = "" }
         }
         //HayWood/AgeWood
         if( TipoPiano==3 )
         {
            //se standard utilizzo il SAT
            GraficaPiano = 3
            Piano_sat1   = STRCAT("PianoTavBotteHA_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2   = STRCAT("PianoTavBotteHA_",STR(X),"x",STR(Z),"_2.sat")
            Piano_sat3   = STRCAT("PianoTavBotteHA_",STR(X),"x",STR(Z),"_3.sat")
         }

         if( GraficaPiano==3 )
         {
            //se non esiste il sat grafica rettangolare
            if( FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat1))<0
              & FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat2))<0 ) {  GraficaPiano = 1  }
         }
      }

      //Tondo
      if( FormaPiano==2 )
      {
         //m4s
         GraficaPiano = 5
         Piano_m4s1 = STRCAT("PIANO_",STR(X),"X",STR(Z),"X",STR(Piano_Spe),"#A.m4s")

         //piano ww rastremato
         if( TipoPiano == 2 )
         {
            GraficaPiano = 3
            if( ModTavoloStr == "JANEIRO" ) { Piano_sat1 = STRCAT("PianoTavTondoWW_",STR(X),"_J1.sat") }
            if( ModTavoloStr == "HOA" )     { Piano_sat1 = STRCAT("PianoTavTondoWW_",STR(X),"_H1.sat") }
         }

         if( GraficaPiano==5 )
         {
            //se non esiste m4s piano tondo
            if( FILE_EXIST(STRCAT(path_m4s_tavoli,Piano_m4s1)) != 1 ) { GraficaPiano = 2 }
         }
      }

      //Simone 10/09/21 - Ellittico
      if( FormaPiano==3 )
      {
         GraficaPiano = 3

         //Vetro - XGLASS
         if( TipoPiano==0 | TipoPiano==1 )
         {
            Piano_sat1 = STRCAT("PianoTavEllitSp10_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2 = STRCAT("PianoTavEllitSp10_",STR(X),"x",STR(Z),"_2.sat")
            Piano_sat3 = STRCAT("PianoTavEllitSp08_",STR(X),"x",STR(Z),"_1.sat")

            if( ModTavoloStr == "HOA" )
            {
               Piano_sat1 = STRCAT("PianoTavEllitSp10_",STR(X),"x",STR(Z),"_H1.sat")
               Piano_sat2 = STRCAT("PianoTavEllitSp10_",STR(X),"x",STR(Z),"_H2.sat")
               Piano_sat3 = STRCAT("PianoTavEllitSp08_",STR(X),"x",STR(Z),"_H1.sat")
            }
         }

         //WildWood
         if( TipoPiano==2 )
         {
            //Piano sagomato dedicato
            if( ModTavoloStr == "U" )    { Piano_sat1 = STRCAT("PianoTavEllitWW_",STR(X),"x",STR(Z),"_U1.sat") }
            if( ModTavoloStr == "MEET" ) { Piano_sat1 = STRCAT("PianoTavEllitWW_",STR(X),"x",STR(Z),"_M1.sat") }
            if( ModTavoloStr == "WADI" ) { Piano_sat1 = STRCAT("PianoTavEllitWW_",STR(X),"x",STR(Z),"_W1.sat") }
            if( ModTavoloStr == "HOA" )  { Piano_sat1 = STRCAT("PianoTavEllitWW_",STR(X),"x",STR(Z),"_H1.sat") }
         }

         //Trasparente
         if( TipoPiano==4 )
         {
            Piano_sat1 = STRCAT("PianoTavEllitSp12_",STR(X),"x",STR(Z),"_1.sat")
            //Piano_sat1 = STRCAT("VernTavEllitSp10_",STR(X),"x",STR(Z),"_2.sat")
         }

         if( GraficaPiano==3 )
         {
            //se non esiste il sat
            if( FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat1))<0
              & FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat2))<0 ) {  GraficaPiano = 1  }
         }
      }

      //Organico
      if( FormaPiano==4 )
      {
         GraficaPiano = 3

         //Vetro - XGLASS
         if( TipoPiano==0 | TipoPiano==1 )
         {
            Piano_sat1 = STRCAT("PianoTavOrganicoSp10_",STR(X),"x",STR(Z),"_1.sat")
            Piano_sat2 = STRCAT("PianoTavOrganicoSp10_",STR(X),"x",STR(Z),"_2.sat")
            Piano_sat3 = STRCAT("PianoTavOrganicoSp08_",STR(X),"x",STR(Z),"_1.sat")

            if( ModTavoloStr == "HOA" )
            {
               Piano_sat1 = STRCAT("PianoTavOrganicoSp10_",STR(X),"x",STR(Z),"_H1.sat")
               Piano_sat2 = STRCAT("PianoTavOrganicoSp10_",STR(X),"x",STR(Z),"_H2.sat")
               Piano_sat3 = STRCAT("PianoTavOrganicoSp08_",STR(X),"x",STR(Z),"_H1.sat")
            }
         }

         //WildWood
         if( TipoPiano==2 )
         {
            //Piano sagomato dedicato
            if( ModTavoloStr == "HOA" ) { Piano_sat1 = STRCAT("PianoTavOrganicoWW_",STR(X),"x",STR(Z),"_H1.sat") }
         }

         if( GraficaPiano==3 )
         {
            //se non esiste il sat
            if( FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat1))<0
              & FILE_SIZE(STRCAT(path_sat_tavoli,Piano_sat2))<0 ) {  GraficaPiano = 1  }
         }
      }

      //P&J-TABLE -- piano indipendente da FormaPiano
      if( ModTavolo==2 )
      {
         GraficaPiano = 3
         Piano_sat1   = STRCAT("PianoTavPJ_",STR(X),"x",STR(Z),"_SX.sat")
         if( Verso>0 ) { Piano_sat1 = STRCAT("PianoTavPJ_",STR(X),"x",STR(Z),"_DX.sat") }
      }

      //Simone 23/09/21
      if( ModTavoloStr=="LOTO" )
      {
         GraficaPiano = 4
      }

      //Luca 25/08/2021
      if( ModTavoloStr == "BOLD" )
      {
         Piano_sat1 = ""
         Piano_sat2 = ""
         Piano_sat3 = ""

         GraficaPiano = 3

         GambaY    = 737
         Piano_Spe = 37

         wk_fin = "HAY"
         if( TipoPianoStr == "XGLASS"
           | TipoPianoStr == "VETRO" )
         {
            wk_fin = "VET"
            Piano_Spe = 18
         }

         if( IS_VAR_FIXED(ATTUALE(),"Y") == 0 )
         {
            Y = 760
            if( TipoPianoStr == "XGLASS"
              | TipoPianoStr == "VETRO" ) { Y = 750 }
         }

         //Y = GambaY + Piano_Spe

         Piano_sat1   = STRCAT("PianoBold",wk_fin,"_",STR(X),"x",STR(Z),"_1.sat")
         Piano_sat2   = STRCAT("PianoBold",wk_fin,"_",STR(X),"x",STR(Z),"_2.sat")

         Gamba1       = 1
         Gamba1_sat   = "BoldCoverBase.sat"

         Gamba2       = 1
         Gamba2_sat   = "BoldCoverStruttura.sat"

         Gamba1_X = 1212  Gamba1_Z = 390
         Gamba2_X = 250   Gamba2_Z = 250

         Gamba1_PosX = 500   Gamba1_PosZ = 550
         Gamba2_PosX = 500   Gamba2_PosZ = 550

         if( X == 2200 )
         {
            Gamba1_PosX = 550   Gamba1_PosZ = 550
            Gamba2_PosX = 550   Gamba2_PosZ = 550
         }
         if( X == 2480 )
         {
            Gamba1_PosX = 650   Gamba1_PosZ = 600
            Gamba2_PosX = 650   Gamba2_PosZ = 600
         }

         if( TipoPianoStr == "XGLASS"
           | TipoPianoStr == "VETRO" )
         {
            Gamba1_PosX = 530   Gamba1_PosZ = 550
            Gamba2_PosX = 530   Gamba2_PosZ = 550

            if( X == 2200 )
            {
               Gamba1_PosX = 580   Gamba1_PosZ = 550
               Gamba2_PosX = 580   Gamba2_PosZ = 550
            }
            if( X == 2500 )
            {
               Gamba1_PosX = 680   Gamba1_PosZ = 600
               Gamba2_PosX = 680   Gamba2_PosZ = 600
            }
         }

         file_import_gen = "BoldGamba.SAT"
      }

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

      ////riduzioni
      //if( x_min==0 & x_max==0 ) { VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS) }
      //if( x_min==x_max )        { VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS) }
      //if( x_min!=0 & x_max!=0 )
      //{
      //   VAR_SET_MODE(ATTUALE(),"X",$MODE_MISURE+$MODE_USER)
      //   wk_menu = STRCAT("LarTavG(",STR(x_min),"-",STR(x_max),")")
      //   VAR_SET_MENU(ATTUALE(),"X",wk_menu)
      //}
      //
      //if( z_min==0 & z_max==0 ) { VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS) }
      //if( z_min==z_max )        { VAR_SET_MODE(ATTUALE(),"Z",$MODE_SHOWALWAYS) }
      //if( z_min!=0 & z_max!=0 )
      //{
      //   VAR_SET_MODE(ATTUALE(),"Z",$MODE_MISURE+$MODE_USER)
      //   wk_menu = STRCAT("ProTavG(",STR(z_min),"-",STR(z_max),")")
      //   VAR_SET_MENU(ATTUALE(),"Z",wk_menu)
      //}

      if( $ATTIVA_DLL==0 ) { EXITSUB() }

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

      VarDimX = "X"   ValDeltaX = 0   VarMenuX = ""  VarMenuFissoX = ""   VarFlgChangeX = 1
      VarDimY = "Y"   ValDeltaY = 0   VarMenuY = ""  VarMenuFissoY = ""   VarFlgChangeY = 1
      VarDimZ = "Z"   ValDeltaZ = 0   VarMenuZ = ""  VarMenuFissoZ = ""   VarFlgChangeZ = 1
      CtrlRangeRidM2G(ATTUALE(),"X")
      CtrlRangeRidM2G(ATTUALE(),"Y")
      CtrlRangeRidM2G(ATTUALE(),"Z")

      STP_Bollina = 1
      STP_Bollina_Cat = STRCAT(FIN_var_piano, ";", FIN_var_gambe)
   }

   //Simone 16/06/2022
   PROCEDURA Assegnazioni_TavolinoGenerico
   {
      ModTavolinoStr = UPPER(GetValMenuStr(ATTUALE(),"ModTavolino"))
      FIN_var_piano  = "C044"

      Spe_Piano = 10
      FLAG_Boccola = 0
      if( TipoTopTav == "WILDWOOD" )
      {
         Spe_Piano = 36
         FLAG_Boccola = 1
      }

      //PLEASURE - Disposizione vetri
      if( ModTavolinoStr == "PLEASURE" )
      {
         if( FormaTopTav == 1 )
         {
            X_Vtr_O = 580
            X_Vtr_V = 580

            OffX_Vtr_O = 458.8
            OffZ_Vtr_O = 553

            OffX_Vtr_V = 262.8
            OffZ_Vtr_V = 269

            Verso_Vtr_O = "DX"
            Verso_Vtr_V = "SX"
         }

         if( FormaTopTav == 2 )
         {
            X_Vtr_O = 368
            X_Vtr_V = 368

            OffX_Vtr_O = 70
            OffZ_Vtr_O = 278

            OffX_Vtr_V = 563
            OffZ_Vtr_V = 100

            Verso_Vtr_V = "DX"
            Verso_Vtr_V = "DX"

            if( TipoTopTav == "WILDWOOD" )
            {
               OffX_Vtr_O = 333.58
               OffZ_Vtr_O = 310.57

               OffX_Vtr_V = 198.46
               OffZ_Vtr_V = 133.93

               Verso_Vtr_V = "SX"
            }
         }

         if( FormaTopTav == 3 )
         {
            X_Vtr_O = 288
            X_Vtr_V = 288

            OffX_Vtr_O = 171.8
            OffZ_Vtr_O = 233.19

            OffX_Vtr_V = 109.8
            OffZ_Vtr_V = 95.19

            Verso_Vtr_V = "DX"
            Verso_Vtr_V = "SX"

            if( TipoTopTav == "WILDWOOD" )
            {
               //Simone 15/09/2022 - Cambiata la dimensione del vetro, retrocompatibile
               X_Vtr_V = 368

               OffX_Vtr_O = 172.55
               OffZ_Vtr_O = 224

               OffX_Vtr_V = 127.5
               //Simone 15/09/2022
               //OffZ_Vtr_V = 84.26
               OffZ_Vtr_V = 26.26

               Verso_Vtr_O = "SX"
            }
         }

         if( FormaTopTav == 4 )
         {
            X_Vtr_O = 580
            X_Vtr_V = 368

            OffX_Vtr_O = 117
            OffZ_Vtr_O = 291

            OffX_Vtr_V = 892
            OffZ_Vtr_V = 113

            Verso_Vtr_V = "DX"
            Verso_Vtr_V = "DX"

            if( TipoTopTav == "WILDWOOD" )
            {
               OffX_Vtr_V = 890

               Verso_Vtr_O = "SX"
            }
         }
      }

      //Simone 13/03/2023
      if( ModTavolinoStr == "YAMA" )
      {
         FLAG_Boccola = 1

         X_Vtr_O = 644
         X_Vtr_V = 306

         OffX_Vtr_O = 132.4
         OffZ_Vtr_O = 184

         OffX_Vtr_V = 447.6
         OffZ_Vtr_V = 506

         Verso_Vtr_O = "DX"
         Verso_Vtr_V = "DX"
      }

      if( ModTavolinoStr == "LONDY" )
      {
         Spe_Piano = 4
         FIN_var_piano = "C099"
         FIN_var_base  = "C136"

         Raggio = 70
         Blend  = 70

         if( FormaTopTav == 1 )
         {
            X = 1090
            Z = 650
         }

         if( FormaTopTav == 2 )
         {
            X = 1550
            Z = 850
         }

         if( FormaTopTav == 3 )
         {
            X = 530
            Z = 900
         }

         if( FormaTopTav == 4 )
         {
            X = 900
            Z = 900
         }

         if( FormaTopTav == 5 )
         {
            X = 770
            Z = 920
         }
      }
   }

   PROCEDURA SistCostr_DivanoSand
   {
      Alt_Gamb = 128
      Alt_Base = 310

      Alt_Sch  = 320

      RieR_Sch = 120
      RieL_Sch = 0

      Lar_Sch = 800
      if( X==1300 ) { Lar_Sch = 1000 }
      if( X==2300 ) { Lar_Sch = 1000 }

      RieL_Gamb = 300

      Pro_Sch = 310

      Pro_Gamb = 500
      if( Z==1300 ) { Pro_Gamb = 750  }
      if( Z==1600 ) { Pro_Gamb = 1050 }

      //Luca 30/06/2022
      if( NOME(ATTUALE()) == "DivanoSandTrapezio" ) { Pro_Gamb = 1050 }

      Num_Sch = 0
      Num_Sch_Md = 0
      if( VAR_VAL(ATTUALE(),"ConSchienale")==1 )
      {
         Num_Sch = 1
         if( X==1900 ) { Num_Sch = 2 }
         if( X==2300 ) { Num_Sch = 2 }
         if( X==2700 ) { Num_Sch = 3 }

         //Luca 12/12/2019
         if( Meridienne==1 )
         {
            if( X==1900 ) { Num_Sch_Md = 1 Lar_Sch =  800 }
            if( X==2300 ) { Num_Sch_Md = 1 Lar_Sch = 1000 }
            if( X==2700 ) { Num_Sch_Md = 2 Lar_Sch =  800 }
         }
      }

      VersoStr = GetValMenuStr(ATTUALE(), "Verso")
   }

   PROCEDURA AssMadiaPlenum
   {
      if( ACTION() == 0 & $ATTIVA_DLL==1 ) { VAR_SET_MODE(ATTUALE(),"X",$MODE_SHOWALWAYS) }

      //Z fusto
      Zt = Z - 22

      Z_Div = Zt - $Offset_Z_Div - $Z_Schiena - $RieZ_Sch - 1

      Y_Fondo_Tot = $Y_Sost + $Y_Fondo
      Y_Cop_Tot   = $Y_Cop + $Y_Bin_Sup

      if( X == 1848 )
      {
         X_Schiena    = 1817
         X_Fondo      = 1802
         Offset_X_Pie = 296
         X_Top        = 1840
      }

      if( X == 2216 )
      {
         X_Schiena    = 2185
         X_Fondo      = 2170
         Offset_X_Pie = 362
         X_Top        = 2208
      }

      RieZ_RipV = $RieZ_Sch + $Z_Schiena + 1

      //sostegni
      Z_Sost = Z - $Offset_Z_Rt_Pie - $Offset_Z_Fr_Pie
      RieX_Gamba = 385 - $Spe_Staffa_L_Sost //+ $X_Fianco
      //if( X > 2000 )  { RieX_Gamba = 362 - $Spe_Staffa_L_Sost + $X_Fianco }
   }

   PROCEDURA azione_apertura_complanare
   {
      //In input:
      //- azione_val_max: limite massimo di spostamento
      //- azione_verso  : verso dell'anta (opposto allo scorrimento)
      if(ACTION()==6)
      {
         azione_mode = $az_percorso

         //L'azione va da 0 a 100 ed e' cosi' suddivisa:
         azione_delta_0 = 0
         azione_delta_1 = 10
         azione_delta_2 = 100

         // i vari punti che definiscono il percorso
         azione_path_0 = [0, 0, 0]

         if( azione_verso=="DX" )
         {
            azione_path_1 = [0, 0, Z]
            azione_path_2 = [azione_val_max, 0, Z]
            azione_point = base_3
         }
         else
         {
            //L'anta che scorre verso sx non la faccio uscire
            //in modo da evitare la sovrapposizione con l'altra
            azione_path_1 = [ 0, 0, 0]
            azione_path_2 = [-azione_val_max, 0, 0]
            azione_point = base_0
         }

         azione_rotate_mode = $az_rotate_mode_x
         azione_path_ang_0 = 0
         azione_path_ang_1 = 0
         azione_path_ang_2 = 0
      }
      else
      {
         azione_valore = $azione_valore
      }
   }

   //LZ 26/05/2021: gestione passacavi
   PROCEDURA Set_Gest_C009_Plenum
   {
      if( ACTION() <= 0 | ACTION()== 2 | $OnLoadOrder==1 ) { EXITSUB() }

      CAT_VM_var = "C009"
      CAT_VM_opz = "SM073;SM003"
      CAT_VM_sel = "__"

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

      if( ConLed ) { CAT_VM_sel = "SM073" }

      if( ConPassacavi )
      {
         if( CAT_VM_sel == "" ) { CAT_VM_sel = "SM003" }
         else                   { CAT_VM_sel = STRCAT( CAT_VM_sel, ";SM003") }
      }

      GOSUB Gest_CAT_VM
   }

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

      BOX_MODE(0)
      NEAR_GLOBALE2( "led", ATTUALE(), 1, "Led_Plenum")
      NEAR_GLOBALE2( "pcv", ATTUALE(), 1, "Passacavi_368")

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

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM073;SM003"
      CAT_VM_sel = "__"

      if( led > 0 ) { CAT_VM_sel = "SM073" }

      if( pcv > 0 )
      {
         if( CAT_VM_sel == "" ) { CAT_VM_sel = "SM003" }
         else                   { CAT_VM_sel = STRCAT( CAT_VM_sel, ";SM003") }
      }

      GOSUB Gest_CAT_VM
   }

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

      BOX_MODE(0)
      NEAR_GLOBALE2( "pcv", ATTUALE(), 1, "Passacavi_368")

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

      gest_C008 = "__"
      if( pcv > 0 ) { gest_C008 = "SM003" }

      GEST_C008 = gest_C008
      VarAdd = "GEST_C008"   GOSUB Add_TABER_VARSETTATE
   }

   //Simone 24/09/21 - Gestione prolunghe piano Tavolo Loto
   PROCEDURA Set_Gest_C106_Tavolo_Loto
   {
      if( ACTION() <= 0 | ACTION()== 2 )                { EXITSUB() }

      if( ModTavoloStr == "LOTO" )
      {
         gest_C106 = "PR002"

         if( IS_VarsUser__(ATTUALE(),"GEST_C106") == 1 )
         {
            DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C106")
            DEL_VARS_USER(ATTUALE(),"GEST_C106")
         }

         if( ConProlunghe == 1 )  { gest_C106 = "PR001" }

         GEST_C106 = gest_C106

         VarAdd = "GEST_C106"   GOSUB Add_TABER_VARSETTATE
      }
   }

   PROCEDURA OQBC_Living
   {
      if( NOME(idx_colliso) == "Madia_Plenum"
        & NOME(idx_attuale) == "Bifacciale_Plenum"  ) { $QueryResult__ = 1 }

      if( NOME(idx_attuale) == "Madia_Plenum"
        & NOME(idx_colliso) == "Bifacciale_Plenum"  ) { $QueryResult__ = 1 }
   }

   PROCEDURA PCF_PassaVar_DivanoAir
   {
      pv_idx_ref = @idx_att

      if( ACTION() == 0
        & VAR_EXIST( pv_idx_ref, "pcf_str")
        & VAR_EXIST( pv_idx_ref, "pcf_str_orig")==0 ) { @pcf_str_orig = @pcf_str }

      @pv_deltaX = @base_0.x - base_0.x
      @pv_deltaZ = @base_0.z - base_0.z

      if( VAR_VAL( pv_idx_ref, "ang_y") == 0 )
      {
         if( Verso > 0 )
         {
            @base_0.x = base_0.x + X - @X - @pv_deltaX
            @pv_deltaX = @base_0.x - base_0.x
         }
      }
      else
      {
         if( Verso > 0 )
         {
            @ang_y = NORMALIZZA_ANG(-@ang_y)

            @base_0.x = base_0.x + X - @pv_deltaX - @X*COSENO(@ang_y)
            @base_0.z = base_0.z + @pv_deltaZ + @X*SENO(@ang_y)
         }
      }

      //LZ 27/12/2021: non ricostruisco stringa di connessione, in modo da ripristinare situazione iniziale all'esplosione
      EXITSUB()

      //Non ricostruisco stringa connessione se non sono agganciato
      if( @pcf_str == "1" ) { EXITSUB() }

      wk_pcf_str = @pcf_str
      @pv_r = STR_INDEX_OF(wk_pcf_str,0,"R")
      @pv_v = STR_INDEX_OF(wk_pcf_str,@pv_r,",") + 1
      @pv_s = STR_INDEX_OF(wk_pcf_str,@pv_v+1," ") + 1
      @pcf_str = STRCAT(STRMID(0,@pv_v,wk_pcf_str), " " , STR(@pv_deltaX), " ", STRMID(@pv_s,100,wk_pcf_str))
   }

   //MicheleC 27/12/2021
   PROCEDURA Pos_ElemTangr_solograf
   {
      //1 = Triang. Grande
      //2 = Triang. Grande
      //3 = Parallelepipedo
      //4 = Triang. Piccolo
      //5 = Rombo
      //6 = Triang. Piccolo
      //7 = Triang. Medio
      if(VAR_elemento == 1 | VAR_elemento == 2)
      {
         @base_0 = base_0
      }
      if(VAR_elemento == 3 )
      {
         @base_0.x = base_0.x
         @base_0.y = base_0.y - 637.5
      }
      if( VAR_elemento == 4 )
      {
         @base_0.x = base_0.x - 212.5
         @base_0.y = base_0.y - 425
      }
      if(VAR_elemento == 5 )
      {
            @base_0.x = base_0.x - 425
            @base_0.y = base_0.y - 212.5
      }
      if(VAR_elemento == 6 )
      {
            @base_0.x = base_0.x - 637.5
            @base_0.y = base_0.y
      }
      if(VAR_elemento == 7 )
      {
         @base_0.x = base_0.x - 425
         @base_0.y = base_0.y - 425
      }
   }

   PROCEDURA posa_contenitore_morgana
   {
      @escluso = 1
      if( IdCont <= NrModuli ) { @escluso = 0 }

      @base_0 = base_0
      @base_0.y = base_0.y + Y_Pie + (IdCont - 1)*Y_Modulo
      if( TipoAppoggioStr == "RUOTE" ) { @base_0.y = base_0.y + Y_Ruote + (IdCont - 1)*Y_Modulo  }

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

      @PosizioneCont = "SINGOLO"

      if( NrModuli > 1 )
      {
         @PosizioneCont = "INTERMEDIO"

         if( IdCont == 1 )         { @PosizioneCont = "FONDO" }

         if( IdCont == NrModuli )  {  @PosizioneCont = "COPERCHIO" }
      }

      @ang_y = 0

      if( VAR_scombussola & IdCont > 1 )
      {
         if( IdCont == 2 ) { @ang_y = -8 }
         if( IdCont == 3 ) { @ang_y =   5 }
         if( IdCont == 4 ) { @ang_y =  -6 }
         if( IdCont == 5 ) { @ang_y =   0 }
         if( IdCont == 6 ) { @ang_y =   7 }
         if( IdCont == 7 ) { @ang_y =  -4 }

         //@base_0.x = base_0.x + X_Off_Sco
         //@base_0.z = base_0.z + Z_Off_Sco
         //
         //@ang_y = ang_scombussola
         //if( IsEven(IdCont) )
         //{
         //   @ang_y = -1*ang_scombussola
         //}
      }
   }

//{ PENTAGRAM
   PROCEDURA SistCostr_LP22
   {
      M4_A_MURO = 0

      Alt_Pie = 5

      Spe_Fia = 30
      Spe_Rip = 30

      //schiena strutturale
      Spe_SchS = 19

      //rientro da filo fianco
      RieX_SpeS = 28.5
      RidX_SpeS = RieX_SpeS + 31.5
      RieY_Sup_SpeS = 30
      RieY_Inf_SpeS = 100

      //schiena finitura / per vetri
      Spe_SchF = 19

      //vetro
      Spe_Vet  = 4
      AriaY_Vet = 0.5
      //aria vetro lato fianco
      AriaX_Vet = 0.5
      RidX_Vet  = AriaX_Vet + 2.5

      //da misura nominale libreria a reale schiena di finitura (scarico lato opposto fianco)
      RidX_SchF = 2.5

      RieX_Rip  = 0
      RieZ_Rip  = 0

      if( VAR_VAL(ATTUALE(),"FLAG_Sospesa")==1 )
      {
         M4_A_MURO = 1
         Alt_Pie = 0
         RieY_Inf_SpeS = 30
      }
   }

   PROCEDURA CtrlLargh_Libreria_LP22
   {
      if( ACTION() < 0 | ACTION() == 2 ) { EXITSUB() }

      Xt = X

      COMPONENTI2("rip",ATTUALE(),"Ripiano_LP22")
      COMPONENTI2("mod",ATTUALE(),"Modulo_368")

      i = 1
      while ( i <= mod )
      {
         AddItem2Array(ATTUALE(),"rip",mod[i],"")
         i = i + 1
      }

      i = 1
      while ( i <= rip  )
      {
         larg_rip = VAR_VAL(rip[i],"X")

         new_x = larg_rip + Spe_Fia

         if( new_x > Xt ) { Xt = new_x }

         i = i + 1
      }
   }

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

      Vetri_NrMax = 8
      Vetri_Nr = 0

      Vetro_MinY = 40


      //dichiaro e reset variabili
      i = 1
      while ( i <= Vetri_NrMax )
      {
         VAR_CREATE_NUM(ATTUALE(),STRCAT("Vetro",STR(i),"_posy"),0,0,"")
         VAR_CREATE_NUM(ATTUALE(),STRCAT("Vetro",STR(i),"_dimy"),0,0,"")
         i = i + 1
      }

      COMPONENTI2("rip",ATTUALE(),"Ripiano_LP22")
      COMPONENTI2("mod",ATTUALE(),"Modulo_368")

      i = 1
      while ( i <= mod )
      {
         AddItem2Array(ATTUALE(),"rip",mod[i],"")
         i = i + 1
      }

      SORT_POINT(base_0,"rip","base_0")
      if( Verso > 0 )  { SORT_POINT(base_3,"rip","base_3") }

      lib_b0y = base_0.y + Alt_Pie
      lib_a0y = alto_0.y

      liv_y = lib_b0y

      i = 1
      while ( i <= rip  )
      {
         idx_rip = rip[i]

         SET_#(idx_rip)

         if( #base_0.y - liv_y > Vetro_MinY )
         {
            Vetri_Nr = Vetri_Nr + 1

            posy = liv_y - lib_b0y
            dimy = #base_0.y - liv_y

            VAR_VALUE_SET(ATTUALE(),STRCAT("Vetro",STR(Vetri_Nr),"_posy"),posy)
            VAR_VALUE_SET(ATTUALE(),STRCAT("Vetro",STR(Vetri_Nr),"_dimy"),ROUND2(dimy,0.1))

         }

         liv_y = #alto_0.y

         i = i + 1
      }

      //verifico se ci sta l'ultimo
      if( lib_a0y - liv_y > Vetro_MinY )
      {
         Vetri_Nr = Vetri_Nr + 1

         posy = liv_y - lib_b0y
         dimy = lib_a0y - liv_y

         VAR_VALUE_SET(ATTUALE(),STRCAT("Vetro",STR(Vetri_Nr),"_posy"),posy)
         VAR_VALUE_SET(ATTUALE(),STRCAT("Vetro",STR(Vetri_Nr),"_dimy"),dimy)
      }
   }

   PROCEDURA posa_vetro_lib_pentagram_LP22
   {
      @escluso = 1
      @base_0 = base_0

      posy = VAR_VAL(idx_att,STRCAT("Vetro",STR(id),"_posy"))
      dimy = VAR_VAL(idx_att,STRCAT("Vetro",STR(id),"_dimy"))
      nvet = VAR_VAL(idx_att,"Vetri_Nr")

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

      if( FinituraSchiena != "VETRO" )  { EXITSUB() }

      if( id <= Vetri_Nr )              { @escluso = 0 }

      @X = X - Spe_Fia - RidX_Vet
      @Y = dimy - 2*AriaY_Vet
      @Z = Spe_Vet

      @base_0.x = base_0.x + Spe_Fia + AriaX_Vet
      if( Verso > 0 )
      {
         @base_0.x = base_0.x + Xt - Spe_Fia - AriaX_Vet - @X
      }
      @base_0.y = base_0.y + posy + AriaY_Vet + Alt_Pie
      @base_0.z = base_0.z + Spe_SchS + Spe_SchF
   }

   PROCEDURA OnSetupLivello_Pentragram_LP22
   {
      idx_ref  = $__lev_ref__

      vano_ref = $__lev_vano__

      liv2add = 0
      liv2addscr = 0

      //Luca 22/09/2022 blocco eventuali spostamenti con shift+click
      #ifndef TEC
         if( $ATTIVA_DLL ) { EXITSUB() }
      #endif

      if( VAR_VAL(idx_ref,"FLAG_Sospesa") == 1  )
      {
         liv2add = 5
         liv2add[1] = 15
         liv2add[2] = liv2add[1] + 366 + 30
         liv2add[3] = liv2add[2] + 308 + 30
         liv2add[4] = liv2add[3] + 182 + 30
         liv2add[5] = liv2add[4] + 366 + 30
      }
      else
      {
         liv2add = 6
         liv2add[1] = 15 + 182
         liv2add[2] = liv2add[1] + 308 + 30
         liv2add[3] = liv2add[2] + 182 + 30
         liv2add[4] = liv2add[3] + 308 + 30
         liv2add[5] = liv2add[4] + 182 + 30
         liv2add[6] = liv2add[5] + 366 + 30
      }

      //start = VAR_VAL(idx_ref,"Spe_Rip")/2
      //passo = 190.5
      //
      //liv_att = start
      //
      //while ( liv_att <= VAR_VAL(idx_ref,"Y") - start )
      //{
      //   AddItem2Array( ATTUALE(), "liv2add", liv_att, "")
      //   liv_att = liv_att + passo
      //}

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

   //tutti i valori di offset e rientro sono dichiarati nella libreria
   PROCEDURA AttrezzaSuPentagram_LP22
   {
      n_vano = $vano_n

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

      if( @Verso >0 )
      {
         base_0.x = $vano_0.x + $larghezza -  @Spe_Fia - X - @RieX_Rip
      }

      base_0.z = $vano_0.z + @Spe_SchS + @Spe_SchF + @RieX_Rip

      Z = $profondita - @Spe_SchS -  @Spe_SchF - @RieZ_Rip

      if( NOME(ATTUALE()) == "Modulo_368" )
      {
         base_0.y = $vano_0.y + $livello - 15
         EXITSUB()
      }

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

      //posizione ripiano
      PosRipiano = 0
      if( X > @X - 30 + 0.5 ) { PosRipiano = 1 }

      Verso = @Verso
   }

   PROCEDURA CtrlVincoloParete_LP22
   {
      if( ACTION() <= 0 | ACTION() == 2 | $OnLoadOrder | $OnLoadOrder2   )  { EXITSUB() }

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

      idx_agg = AGGANCIATA(ATTUALE(),"*")
      if( IS_IDX(idx_agg) ) { EXITSUB() }

      Tipo_pos = TIPO_POS(ATTUALE())

      offx = 0
      offy = 0
      offz = 0

      hdp = H_DA_PAVIMENTO(ATTUALE(), "")
      if( FLAG_Sospesa == 1 )
      {
         if( hdp < 200  )  { offy = 201 - hdp }
      }
      else
      {
         if( hdp > 0.1 )   { offy = - hdp }
      }

      //verifico se trovo un muro dietro
      wk_dist = QUERY_WALL(ATTUALE(), "distance from face R")

      //COMANDO2(STRCAT("LOGMSG | ********** | ATTUALE: ",STR(ATTUALE())," wk_dist = ",STR(wk_dist)))

      if( wk_dist > 0 )
      {
         wk_dist = DISTANZA($Query_Wall1,$Query_Wall2)
         ang_ref = ANG_TOT_NOR(ATTUALE())

         offx =   SENO(ang_ref)*(-1*wk_dist)
         offz = COSENO(ang_ref)*(-1*wk_dist)
      }

      if( offx !=0
        | offy !=0
        | offz !=0  )
      {
         COMANDO(STRCAT("EDITPOS_REL ",STR(ATTUALE()) , " ",STR(offx), " ",STR(offy) ," " ,STR(offz) , " 0 //CtrlVincoloParete_LP22"))
         if( offy != 0 ) { COMANDO(STRCAT("RICALCOLA_UNA ",STR(ATTUALE()) , " no_agganciati //CtrlVincoloParete_LP22")) }
      }

      if( Tipo_pos != 1 )  { COMANDO(STRCAT("INTERIORS link try ",STR(ATTUALE()))) }
   }

   PROCEDURA Set_Gest_C008_Schiena_LP22
   {
      if( ACTION()<= 0 | ACTION()==2 | $OnLoadOrder==1 ) { EXITSUB() }
      if( IS_VarsUser__(ATTUALE(),"GEST_C008") )         { DEL_VAR_MODIFICATE(ATTUALE(),"GEST_C008") }

      CAT_VM_var = "C008"
      CAT_VM_opz = "SM027;SM028"
      CAT_VM_sel = ""

      if( ConLedSx == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM027" ) }
      if( ConLedDx == 1 )  { AddVal_CAT_VM_sel( CAT_VM_sel , "SM028" ) }

      GOSUB Gest_CAT_VM
   }
//} PENTAGRAM

//{ DIVANO GENERICO
   PROCEDURA DivanoGenerico_Assegnazioni
   {
      if( IS_VAR_FIXED( ATTUALE(), "VAR_Modello_Str") ) { DEL_VAR_MODIFICATE( ATTUALE(), "VAR_Modello_Str") }

      idx_topl = GetTopLevel(ATTUALE())

      VAR_Modello_Str     = ""
      VAR_Modello_Str     = GetValMenuStr(ATTUALE(), "VAR_Modello_Divano")
      VAR_Modello_Str_Abb = LEFT( VAR_Modello_Str, 2)

      wk_new_menu_tipologia     = STRCAT("Divano",VAR_Modello_Str,"_Tipologia")
      wk_new_menu_sch_tipologia = STRCAT("Divano",VAR_Modello_Str,"_Schienale_Tipologia")
      wk_new_menu_sch_verso     = STRCAT("Divano",VAR_Modello_Str,"_Schienale_Verso")

      VAR_SET_MENU(ATTUALE(),"VAR_Tipologia",wk_new_menu_tipologia)
      VAR_SET_MENU(ATTUALE(),"VAR_Schienale_Tipologia",wk_new_menu_sch_tipologia)
      VAR_SET_MENU(ATTUALE(),"VAR_Schienale_Verso",wk_new_menu_sch_verso)

      //Variabili comuni
      Blend = 40
      if( VAR_Modello_Str == "Biza") { Blend = 60 }

      //Schienale
      Schienale_X = 0
      Schienale_Y = 0
      Schienale_Z = 0

      //Bracciolo
      Bracciolo_X      = 0
      Bracciolo_Y      = 0
      Bracciolo_Z      = 0
      Bracciolo_Offset = 0

      //Telaio
      Piedino_X    = 0
      Piedino_Y    = 0
      Piedino_Z    = 0
      BaseTelaio_Y = 0

      //Tipologia
      GOSUB DivanoGenerico_Assegnazioni_Tipologia
      GOSUB DivanoHappening_Assegnazioni_Dimensioni
      GOSUB DivanoHero_Assegnazioni_Dimensioni
      GOSUB DivanoLondy_Assegnazioni_Dimensioni
      GOSUB DivanoAltana_Assegnazioni_Dimensioni
      GOSUB DivanoBiza_Assegnazioni_Dimensioni
      GOSUB DivanoGenerico_Assegnazioni_Verso

      //Visibilità e menu variabili
      GOSUB DivanoGenerico_Assegnazioni_VarHide
      GOSUB DivanoGenerico_Assegnazioni_Dimensioni_Menu

      GOSUB DivanoGenerico_Assegnazioni_Modello3D
   }

   PROCEDURA DivanoGenerico_Assegnazioni_Tipologia
   {
      if( IS_VAR_FIXED( ATTUALE(), "VAR_Tipologia_Str") ) { DEL_VAR_MODIFICATE( ATTUALE(), "VAR_Tipologia_Str") }

      VAR_Tipologia_Str = ""
      VAR_Tipologia_Str = GetValMenuStr( ATTUALE(), "VAR_Tipologia")
      VAR_Tipologia_Str_Abb = LEFT( VAR_Tipologia_Str, 3)

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

      VAR_Schienale_Tipologia_Str = ""
      VAR_Schienale_Tipologia_Str = GetValMenuStr( ATTUALE(), "VAR_Schienale_Tipologia")
      VAR_Schienale_Tipologia_Str_Abb = LEFT( VAR_Schienale_Tipologia_Str, 2)

      FIN_var = GetFirstValidVarGest( ATTUALE(),"C109;C136")
      FIN_var_gambe = GetFirstValidVarGest( ATTUALE(),"C032")

      STP_Bollina = 1
      STP_Bollina_Cat = STRCAT(FIN_var, ";", FIN_var_gambe)
   }

   PROCEDURA DivanoHappening_Assegnazioni_Dimensioni
   {
      if( VAR_Modello_Str != "Happening" ) { EXITSUB() }

      //Imbottito - altezza
      Yr = Y - $DivanoHappening_Gambe_Y

      //Seduta
      Seduta_X = X
      Seduta_Y = Yr
      Seduta_Z = Z

      if( VAR_Tipologia_Str == "Pouf" ) { EXITSUB() }

      Seduta_Y = Yr - $DivanoHappening_Schienale_Y

      Schienale_X = X
      Schienale_Y = $DivanoHappening_Schienale_Y
      Schienale_Z = $DivanoHappening_Schienale_Z

      if( VAR_Schienale_Tipologia_Str == "Aperto" )
      {
         Schienale_X = $DivanoHappening_Schienale_Aperto_X
      }

      if( VAR_Tipologia_Str == "Lineare"
        | VAR_Tipologia_Str == "Laterale" )
      {
         Schienale_Z = Z
      }

      if( VAR_Tipologia_Str == "ChaiseLounge" )
      {
         Schienale_X = X
         Schienale_Z = $DivanoHappening_Schienale_Aperto_X
      }
   }

   PROCEDURA DivanoHero_Assegnazioni_Dimensioni
   {
      if( VAR_Modello_Str != "Hero" ) { EXITSUB() }

      //Imbottito - altezza
      Yr = Y - $DivanoHero_Gambe_Y

      //Seduta
      Seduta_X = X
      Seduta_Y = Yr
      Seduta_Z = Z

      if( VAR_Tipologia_Str == "Pouf" ) { EXITSUB() }

      Seduta_Y = Yr - $DivanoHero_Schienale_Y

      Schienale_X = X
      Schienale_Y = $DivanoHero_Schienale_Y
      Schienale_Z = $DivanoHero_Schienale_Z

      Bracciolo_X = Z
      Bracciolo_Y = $DivanoHero_Schienale_Y
      Bracciolo_Z = $DivanoHero_Schienale_Z

      //solo in tipologia Centrale il riferimento è allo schienale;
      //"Aperto" è il bracciolo che non arriva a filo seduta
      if( VAR_Schienale_Tipologia_Str == "Aperto" )
      {
         Bracciolo_X = $DivanoHero_Bracciolo_Aperto_X
         Bracciolo_Z = $DivanoHero_Bracciolo_Aperto_Z
         Schienale_Z = $DivanoHero_Bracciolo_Aperto_Z

         if( VAR_Tipologia_Str == "Centrale" )
         {
            Bracciolo_X = 0
            Bracciolo_Y = 0
            Bracciolo_Z = 0

            Schienale_X = $DivanoHero_Schienale_Aperto_X
            if( X > 1470 )
            {
               Schienale_X = X - $DivanoHero_Schienale_Aperto_X
            }
         }
      }

      if( VAR_Tipologia_Str == "ChaiseLounge" )
      {
         Schienale_X = X
         Schienale_Z = $DivanoHero_Schienale_Aperto_X
      }
   }

   PROCEDURA DivanoLondy_Assegnazioni_Dimensioni
   {
      if( VAR_Modello_Str != "Londy" ) { EXITSUB() }

      wk_cod_topl = VAR_VAL_STR(idx_topl,"ORD_COD")

      //Imbottito - altezza
      Yr = Y - $DivanoLondy_Gambe_Y
      DivanoLondy_Schienale_Y = 370
      if( VAR_Schienale_Tipologia_Str == "Alto" ) { DivanoLondy_Schienale_Y = 470 }

      //Seduta
      Seduta_X = X
      Seduta_Y = Yr
      Seduta_Z = Z

      Piedino_X    = $DivanoLondy_Gambe_X
      Piedino_Y    = $DivanoLondy_Gambe_Y
      Piedino_Z    = $DivanoLondy_Gambe_X

      if( VAR_Tipologia_Str == "Pouf" ) { EXITSUB() }

      Seduta_Y = Yr - DivanoLondy_Schienale_Y

      Schienale_X = X
      Schienale_Y = DivanoLondy_Schienale_Y
      Schienale_Z = $DivanoLondy_Schienale_Z

      Bracciolo_X = Z - $DivanoLondy_Bracciolo_RieZ
      Bracciolo_Y = Schienale_Y
      Bracciolo_Z = Schienale_Z

      if( VAR_Tipologia_Str == "Centrale" )
      {
         Bracciolo_X = 0
         Bracciolo_Y = 0
         Bracciolo_Z = 0
      }
   }

   PROCEDURA DivanoAltana_Assegnazioni_Dimensioni
   {
      if( VAR_Modello_Str != "Altana" ) { EXITSUB() }

      //Imbottito - altezza
      Yr = Y - $DivanoAltana_Gambe_Y

      //Bracciolo
      Bracciolo_X  = Z
      Bracciolo_Y  = Yr
      Bracciolo_Z  = $DivanoAltana_Schienale_Z
      Bracciolo_Offset = $DivanoAltana_Bracciolo_Offset
      Bracciolo_Aperto_AriaZ = 600
      if( Z > 1550 ) { Bracciolo_Aperto_AriaZ = 450 }

      //Seduta
      Seduta_X = X - Bracciolo_Offset
      Seduta_Y = Yr - $DivanoAltana_Schienale_Y
      Seduta_Z = Z - Bracciolo_Offset

      //Schienale
      Schienale_X = X
      Schienale_Y = Yr
      Schienale_Z = $DivanoAltana_Schienale_Z

      //Telaio
      Piedino_X    = $DivanoAltana_Piede_X
      Piedino_Y    = $DivanoAltana_Piede_Y
      Piedino_Z    = $DivanoAltana_Piede_Z
      BaseTelaio_Y = $DivanoAltana_Telaio_Y

      if( VAR_Schienale_Tipologia_Str == "Aperto" )
      {
         Schienale_X = X - $DivanoAltana_Schienale_Aperto_AriaX
         if( VAR_Tipologia_Str == "Lineare" ) { Schienale_X = X - 2* $DivanoAltana_Schienale_Aperto_AriaX }
      }

      if( VAR_Tipologia_Str == "Lineare"
        | VAR_Tipologia_Str == "Centrale" )
      {
         Seduta_X = X

         Bracciolo_X = 0
         Bracciolo_Y = 0
         Bracciolo_Z = 0
      }

      if( VAR_Tipologia_Str == "ChaiseLounge" )
      {
         Schienale_X = X
         Bracciolo_X = Z - Bracciolo_Aperto_AriaZ
      }

      if( VAR_Tipologia_Str == "DayBed" )
      {
         Seduta_X = X - 2*Bracciolo_Offset

         Schienale_X = X
         Bracciolo_X = $DivanoAltana_Bracciolo_DayBed_X + Bracciolo_Offset
      }
   }

   PROCEDURA DivanoBiza_Assegnazioni_Dimensioni
   {
      if( VAR_Modello_Str != "Biza" ) { EXITSUB() }

      wk_cod_topl = VAR_VAL_STR(idx_topl,"ORD_COD")

      //Imbottito - altezza
      Yr = Y - $DivanoBiza_Gambe_Y

      //Seduta
      Seduta_X = X
      Seduta_Y = Yr
      Seduta_Z = Z

      //Telaio
      Piedino_X    = $DivanoBiza_Piede_X
      Piedino_Y    = $DivanoBiza_Piede_Y
      Piedino_Z    = $DivanoBiza_Piede_Z
      BaseTelaio_Y = $DivanoBiza_Telaio_Y

      if( VAR_Tipologia_Str == "Pouf" ) { EXITSUB() }

      Seduta_Y = Yr - $DivanoBiza_Schienale_Y

      Bracciolo_Y = Yr
      Bracciolo_Offset = $DivanoBiza_Bracciolo_Offset

      Schienale_X = X
      Schienale_Y = Yr
      Schienale_Z = $DivanoBiza_Schienale_Z

      if( VAR_Tipologia_Str == "Lineare"
        | VAR_Tipologia_Str == "DayBed" )
      {
         Schienale_X = X + 2*Bracciolo_Offset
         Bracciolo_X = $DivanoBiza_Bracciolo_X + Bracciolo_Offset
         Bracciolo_Z = $DivanoBiza_Schienale_Z
      }

      if( VAR_Tipologia_Str == "Laterale" )
      {
         if( VAR_Schienale_Tipologia_Str == "Intero" )
         {
            Schienale_X = X + Bracciolo_Offset
            Bracciolo_X = $DivanoBiza_Bracciolo_X + Bracciolo_Offset
            Bracciolo_Z = $DivanoBiza_Schienale_Z
         }
         else
         {
            Schienale_X = X - $DivanoBiza_Schienale_Aperto_AriaX
            Bracciolo_X = 0
            Bracciolo_Y = 0
            Bracciolo_Z = 0
         }
      }

      if( VAR_Tipologia_Str == "ChaiseLounge"
        & VAR_Schienale_Tipologia_Str == "Aperto" )
      {
         Schienale_X = X - Bracciolo_Offset
      }
   }

   PROCEDURA DivanoGenerico_Assegnazioni_Verso
   {
      if( VAR_VAL( ATTUALE(), "in_pcfto") > 0 )
      {
            gest_C062_prec = VAR_VAL_STR( ATTUALE(), "GEST_C062")

            if( VAR_Schienale_Verso == -1 ) { GEST_C062 = "SX001" }
            if( VAR_Schienale_Verso == 1  ) { GEST_C062 = "DX001" }

            if( VAR_EXIST( ATTUALE(), "GEST_C062") )
            {
               if( GEST_C062 != gest_C062_prec )
               {
                  if( IS_VAR_FIXED( ATTUALE(), "GEST_C062") ) { DEL_VAR_MODIFICATE( ATTUALE(), "GEST_C062") }
                  VAR_SET_MODIFICATA( ATTUALE(), "GEST_C062", "")
               }
            }
      }
      else
      {
         if( IS_VAR_FIXED( ATTUALE(), "GEST_C062") )
         {
            if( IS_VAR_FIXED( ATTUALE(), "VAR_Schienale_Verso") ) { DEL_VAR_MODIFICATE( ATTUALE(), "VAR_Schienale_Verso") }

            VAR_Schienale_Verso = 0
            if( GEST_C062 == "SX001" ) { VAR_Schienale_Verso = -1 }
            if( GEST_C062 == "DX001" ) { VAR_Schienale_Verso =  1 }
         }
      }

      VAR_Schienale_Verso_Str = ""
      VAR_Schienale_Verso_Str = GetValMenuStr( ATTUALE(), "VAR_Schienale_Verso")
      VAR_Schienale_Verso_Str_Abb = LEFT( VAR_Schienale_Verso_Str, 1)
   }

   PROCEDURA DivanoGenerico_Assegnazioni_VarHide
   {
      if( ACTION() != 0 ) { EXITSUB() }

      wk_var_hide = 3
      wk_var_hide[1] = "VAR_Tipologia"
      wk_var_hide[2] = "VAR_Schienale_Tipologia"
      wk_var_hide[3] = "VAR_Schienale_Verso"

      wk_i = 1
      while( wk_i <= wk_var_hide )
      {
         wk_var_hide_att = wk_var_hide[wk_i]
         HIDE_ON_EDIT2( ATTUALE(), wk_var_hide_att, $ATTIVA_DLL)

         wk_i = wk_i + 1
      }
   }

   PROCEDURA DivanoGenerico_Assegnazioni_Dimensioni_Menu
   {
      if( VAR_Tipologia_Str == ""
        | VAR_Modello_Str == "" ) { EXITSUB() }

      wk_var_menu = 3
      wk_var_menu[1] = "X"
      wk_var_menu[2] = "Y"
      wk_var_menu[3] = "Z"

      wk_i = 1
      while( wk_i <= wk_var_menu )
      {
         wk_var_menu_att = wk_var_menu[wk_i]
         wk_val_menu_att = ""
         if( $ATTIVA_DLL != 1 )
         {
            wk_val_menu_att = STRCAT( "Divano",VAR_Modello_Str, "_", VAR_Tipologia_Str, "_", wk_var_menu_att)
         }

         VAR_SET_MENU( ATTUALE(), wk_var_menu_att, wk_val_menu_att)
         if( $ATTIVA_DLL != 1 ) { VAR_SET_MODE( ATTUALE(), wk_var_menu_att, $MODE_MISURE) }

         wk_i = wk_i + 1
      }

      if( $ATTIVA_DLL != 1 )
      {
         wk_i = 1
         while( wk_i <= wk_var_menu )
         {

            wk_i = wk_i + 1
         }
      }
   }
//} DIVANO HAPPENING

   PROCEDURA DivanoGenerico_Assegnazioni_Modello3D
   {
      // 0 - Debug
      $wk_log = VAR_VAL( -1, "ATTIVA_LOG_DBG")

      $wk_proc_nome = "Divano_Assegnazioni_Modello3D"
      $wk_proc_nome = STRCAT( $wk_proc_nome, " '", STR(ATTUALE()), " - ", NOME(ATTUALE()), "' |")
      $wk_proc_nome_sub = STRCAT( $wk_proc_nome, "  ")

      ScriviSuLog( $wk_log, $wk_proc_nome, "START")

      // 1 - Tipologia
      wk_modello_articolo = ""
      if( IS_MATCH( NOME(ATTUALE()), "DivanoSand*") == 1
        | IS_MATCH( NOME(ATTUALE()), "*DivanoSand") == 1 )   { wk_modello_articolo = "Sand" }
      if( NOME(PADRE(ATTUALE(),1)) == "DivanoSandTrapezio" ) { wk_modello_articolo = "SandTrapezio" }
      if( NOME(ATTUALE()) == "DivanoGenerico" )              { wk_modello_articolo = VAR_Modello_Str }

      // 2 - Ambiente
      wk_modello_ambiente = "Metron"
      if( VAR_VAL( -1, "TPC4WEB") == 1 ) { wk_modello_ambiente = "Web" }

      // 3 - Componenti da gestire
      wk_modello_componente = 0

      if( wk_modello_articolo == "Sand"
        | wk_modello_articolo == "SandTrapezio" )
      {
         wk_modello_componente = 3
         wk_modello_componente[1] = "Fondo"
         wk_modello_componente[2] = "Seduta"
         wk_modello_componente[3] = "Schienale"
      }

      if( wk_modello_articolo == "Happening"
        | wk_modello_articolo == "Hero"
        | wk_modello_articolo == "Londy"
        | wk_modello_articolo == "Altana"
        | wk_modello_articolo == "Biza"  )
      {
         wk_modello_componente = 3
         wk_modello_componente[1] = "Fondo"
         wk_modello_componente[2] = "Seduta"
         wk_modello_componente[3] = "Piedini"
      }

      // 4 - Estensione
      wk_modello_tipologia = 2
      wk_modello_tipologia[1] = "Sat"
      wk_modello_tipologia[2] = "M4s"

      if( wk_modello_ambiente == "Web" )
      {
         wk_modello_tipologia[1] = "M4s"
         wk_modello_tipologia[2] = "Sat"
      }

      // 5 - Variabili
      wk_modello_percorso_base = STRCAT( $path_sat, "Divani\", wk_modello_articolo, "\")

      wk_modello_variabile = 12
      wk_modello_variabile[1]  = "modello_tipologia"
      wk_modello_variabile[2]  = "modello_ambiente"
      wk_modello_variabile[3]  = "modello_nome_prefisso"
      wk_modello_variabile[4]  = "modello_nome"
      wk_modello_variabile[5]  = "modello_nome_suffisso"
      wk_modello_variabile[6]  = "modello_percorso"
      wk_modello_variabile[7]  = "modello_estensione"
      wk_modello_variabile[8]  = "modello_file"
      wk_modello_variabile[9]  = "modello_file_ideale"
      wk_modello_variabile[10] = "modello_exist"
      wk_modello_variabile[11] = "modello_import_suffisso"
      wk_modello_variabile[12] = "modello_import"

      // 6 - Costruisco variabili
      wk_modello_componente_num = 1
      while( wk_modello_componente_num <= wk_modello_componente )
      {
         wk_modello_componente_att = wk_modello_componente[wk_modello_componente_num]

         wk_modello_exist = 0

         wk_modello_tipologia_num = 1
         while( wk_modello_exist == 0
              & wk_modello_tipologia_num <= wk_modello_tipologia )
         {
            wk_modello_tipologia_att = wk_modello_tipologia[wk_modello_tipologia_num]

            wk_modello_percorso = STRCAT( wk_modello_percorso_base, wk_modello_componente_att, "\", wk_modello_tipologia_att, "\")
            wk_modello_import = wk_modello_percorso

            wk_modello_variabile_num = 1
            while( wk_modello_variabile_num <= wk_modello_variabile )
            {
               wk_modello_variabile_att = wk_modello_variabile[wk_modello_variabile_num]
               wk_modello_var = STRCAT( wk_modello_componente_att, "_", wk_modello_variabile_att)
               wk_modello_val = ""

               // Tipologia
               if( wk_modello_variabile_att == "modello_tipologia" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_tipologia_att)
               }

               // Ambiente
               if( wk_modello_variabile_att == "modello_ambiente" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_ambiente)
               }

               // Estensione modello
               if( wk_modello_variabile_att == "modello_estensione" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_tipologia_att)
               }

               // Prefisso del nome
               if( wk_modello_variabile_att == "modello_nome_prefisso" )
               {
                  if( wk_modello_tipologia_att == "M4s" ) { wk_modello_val = STRCAT( LEFT( wk_modello_componente_att, 1), "_") }
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_val)

                  wk_modello_import = STRCAT( wk_modello_import, wk_modello_val)
               }

               if( wk_modello_variabile_att == "modello_nome" )
               {
                  if( wk_modello_articolo == "Happening"
                    | wk_modello_articolo == "Hero"
                    | wk_modello_articolo == "Londy"
                    | wk_modello_articolo == "Altana"
                    | wk_modello_articolo == "Biza" )
                  {
                     wk_modello_val = VAR_Tipologia_Str
                     if( VAR_Schienale_Verso_Str != "Intero" )  { wk_modello_val = STRCAT( wk_modello_val, "_", VAR_Schienale_Tipologia_Str)}
                     if( VAR_Schienale_Verso_Str != "Nessuno" ) { wk_modello_val = STRCAT( wk_modello_val, "_", VAR_Schienale_Verso_Str)    }

                     if( wk_modello_tipologia_att == "M4s" )
                     {
                        wk_modello_val = VAR_Tipologia_Str_Abb
                        if( VAR_Schienale_Verso_Str != "Intero" )  { wk_modello_val = STRCAT( wk_modello_val, "_", VAR_Schienale_Tipologia_Str_Abb)}
                        if( VAR_Schienale_Verso_Str != "Nessuno" ) { wk_modello_val = STRCAT( wk_modello_val, "_", VAR_Schienale_Verso_Str_Abb)    }
                     }

                     wk_modello_val = STRCAT( wk_modello_val, "_", STR(X))
                  }

                  if( wk_modello_articolo == "Sand" )
                  {
                     wk_modello_val = STRCAT( wk_modello_componente_att, wk_modello_articolo )
                     if( wk_modello_componente_att == "Seduta" )    { wk_modello_val = STRCAT( wk_modello_val, "_", STR(X),"x",STR(Z)) }
                     if( wk_modello_componente_att == "Schienale" ) { wk_modello_val = STRCAT( wk_modello_val, "_", STR(X)) }

                    if( wk_modello_tipologia_att == "M4s" )
                    {
                        wk_modello_val = ""
                        if( wk_modello_componente_att == "Seduta"
                          | wk_modello_componente_att == "Fondo" )     { wk_modello_val = STRCAT(STR(X),"x",STR(Z)) }
                        if( wk_modello_componente_att == "Schienale" ) { wk_modello_val = STR(X) }
                     }
                  }

                  if( wk_modello_articolo == "SandTrapezio" )
                  {
                     wk_modello_val = STRCAT( wk_modello_componente_att, wk_modello_articolo )
                     if( wk_modello_componente_att == "Seduta" )    { wk_modello_val = STRCAT( wk_modello_val, "_", STR(X),"x",STR(Z),"_",VersoStr) }
                     if( wk_modello_componente_att == "Schienale" ) { wk_modello_val = STRCAT( wk_modello_val, "_", STR(X)) }

                     if( wk_modello_tipologia_att == "M4s" )
                     {
                        wk_modello_val = ""
                        if( wk_modello_componente_att == "Seduta"
                          | wk_modello_componente_att == "Fondo" )     { wk_modello_val = STRCAT(STR(X),"x",STR(Z),"_",VersoStr) }
                        if( wk_modello_componente_att == "Schienale" ) { wk_modello_val = STR(X) }
                     }
                  }

                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_val)

                  wk_modello_import = STRCAT( wk_modello_import, wk_modello_val)
               }

               if( wk_modello_variabile_att == "modello_nome_suffisso" )
               {
                  if( wk_modello_tipologia_att == "M4s" ) { wk_modello_val = "#A" }
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_val)

                  wk_modello_import = STRCAT( wk_modello_import, wk_modello_val)
               }

               if( wk_modello_variabile_att == "modello_estensione" )
               {
                  wk_modello_val = STRCAT( ".", wk_modello_tipologia_att)
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_percorso)

                  wk_modello_import = STRCAT( wk_modello_import, wk_modello_val)
               }

               if( wk_modello_variabile_att == "modello_percorso" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_percorso)
               }

               if( wk_modello_variabile_att == "modello_file" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_import)
               }

               if( wk_modello_tipologia_num == 1
                 & wk_modello_variabile_att == "modello_file_ideale" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_import)
               }

               if( wk_modello_variabile_att == "modello_exist" )
               {
                  wk_modello_val = FILE_EXIST(wk_modello_import)
                  VAR_VALUE_SET( ATTUALE(), wk_modello_var, wk_modello_val)

                  wk_modello_exist = wk_modello_val
               }

               if( wk_modello_variabile_att == "modello_import_suffisso" )
               {
                  if( wk_modello_tipologia_att == "M4s" ) { wk_modello_val = "|model|model.hsf" }
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_val)

                  wk_modello_import = STRCAT( wk_modello_import, wk_modello_val)
               }

               if( wk_modello_variabile_att == "modello_import" )
               {
                  VAR_VALUESTR_SET( ATTUALE(), wk_modello_var, wk_modello_import)
               }

               wk_modello_variabile_num = wk_modello_variabile_num + 1
            }

            wk_modello_tipologia_num = wk_modello_tipologia_num + 1
         }

         wk_modello_componente_num = wk_modello_componente_num + 1
      }
   }

   //Simone 29/03/2023
   PROCEDURA Assegnazioni_Specchio_Gen
   {
      Mod_Spe_Str = UPPER(GetValMenuStr(ATTUALE(),"VAR_Mod_Specchio"))

      FIN_var_A = "C128"
      FIN_var_B = "C129"
      FIN_var_C = "C130"

      File_Sat1 = ""
      File_Sat2 = ""
      File_Sat3 = ""
      File_Sat4 = ""
      nome_file = STRCAT($path_sat,"Specchiere\",Mod_Spe_Str,"\",Mod_Spe_Str,"_")

      File_Sat1 = STRCAT(nome_file,"RT_",STR(VAR_Forma_Specchio),".SAT")
      File_Sat2 = STRCAT(nome_file,"CX_",STR(VAR_Forma_Specchio),".SAT")
      File_Sat3 = STRCAT(nome_file,"FR_",STR(VAR_Forma_Specchio),".SAT")
      File_Sat4 = STRCAT(nome_file,"LC_",STR(VAR_Forma_Specchio),".SAT")

      //per gestire le sostituzioni
      Tipo_Alimentatore = 0

      if( Mod_Spe_Str == "PLEASURE" )
      {
         File_Sat1 = STRCAT(nome_file,"RT.SAT")
         if( VAR_Melty == 1 ) { File_Sat1 = STRCAT(nome_file,"RT_25.SAT") }
         FIN_var_A = GetFirstValidVarGest( ATTUALE(), "C042;C128;C129")
         FIN_var_B = ""

         if( VAR_Forma_Specchio == 1 )
         {
            X = 1229
            Y = 1071
         }

         if( VAR_Forma_Specchio == 2 )
         {
            X = 1000
            Y = 880
         }

         if( VAR_Forma_Specchio == 3 )
         {
            X = 1004
            Y = 983
         }

         if( VAR_Forma_Specchio == 4 )
         {
            X = 448
            Y = 639
         }

         if( VAR_Forma_Specchio == 5 )
         {
            X = 515
            Y = 478
         }

         if( VAR_Melty == 1 ) { Z = 33 }
      }

      if( Mod_Spe_Str == "ERA" )
      {
         Tipo_Alimentatore = 1

         if( VAR_Forma_Specchio == 1 )
         {
            X = 1094
            Y = 1923
         }

         if( VAR_Forma_Specchio == 2 )
         {
            X = 1217
            Y = 1074

            Tipo_Alimentatore = 2
         }

         if( VAR_Forma_Specchio == 3 )
         {
            X = 1923
            Y = 1094
         }

         Z = 28
      }

      if( Mod_Spe_Str == "KIBI" )
      {
         Tipo_Alimentatore = 2

         if( VAR_Forma_Specchio == 1 )
         {
            X = 700
            Y = 700

            Tipo_Alimentatore = 3
         }

         if( VAR_Forma_Specchio == 2 )
         {
            X = 1000
            Y = 1000
         }

         if( VAR_Forma_Specchio == 3 )
         {
            X = 1484
            Y = 1484
         }

         Z = 28
      }

      if( Mod_Spe_Str == "FUZE" )
      {
         File_Sat1 = STRCAT(nome_file,"B_",STR(VAR_Forma_Specchio),".SAT")
         File_Sat2 = STRCAT(nome_file,"C_",STR(VAR_Forma_Specchio),".SAT")
         File_Sat3 = STRCAT(nome_file,"A_",STR(VAR_Forma_Specchio),".SAT")
         File_Sat4 = STRCAT(nome_file,"RT_",STR(VAR_Forma_Specchio),".SAT")

         if( VAR_Forma_Specchio == 1 )
         {
            X = 990
            Y = 1250
         }

         if( VAR_Forma_Specchio == 2 )
         {
            X = 920
            Y = 1840
         }

         Z = 20
      }
   }

   //Simone 13/04/2023
   PROCEDURA Assegnazioni_Comodini
   {
      Spe_Top     = 8
      Spe_Fia_Vtr = 10
      //offset cassetto rispetto a struttura vetro
      OffX_Str    = 0
      OffY_Str    = 0
      OffY_Cass   = 2.5

      if( NOME(ATTUALE()) == "Comodino_Hom"
        | UN_PADRE("Comodino_Hom") == 1 )
      {
         Spe_Fia_Vtr = 8
         OffX_Str    = 0.75
         OffY_Str    = 92
         //considero qui anche lo spessore del top
         OffY_Cass   = 9.5
      }
   }

   PROCEDURA Assegnazioni_Sedia_Gen
   {
      Var_Modello_Str     = GetValMenuStr(ATTUALE(), "VAR_Modello")
      Var_Modello_Str_Abb = LEFT( Var_Modello_Str, 3)
      Var_Tipologia_Str   = GetValMenuStr(ATTUALE(), "VAR_Tipologia")
      file_path = STRCAT( $path_sat, "Sedie\", Var_Modello_Str, "\" )

      wk_cod_topl = VAR_VAL_STR(GetTopLevel(ATTUALE()),"ORD_COD")

      SgabelloBeat_Poggiapiedi_OffY = 210
      if( Y == 757 ) { SgabelloBeat_Poggiapiedi_OffY = 310 }

      GEST_X = X
      GEST_Y = Y
      GEST_Z = Z

      FIN_var_gambe     = "C041"
      FIN_var_seduta    = "C109"
      FIN_var_interno   = ""
      FIN_var_schienale = ""

      if( Var_Modello_Str == "RUFFLE" )
      {
         //sedia
         X = 581
         Y = 791
         Z = 530

         GEST_X = 575
         GEST_Y = 790
         GEST_Z = 570
      }

      if( Var_Modello_Str == "ZEPPELIN" )
      {
         //sedia
         X = 569
         Y = 721
         Z = 626

         GEST_X = 670
         GEST_Y = 790
         GEST_Z = 642

         if( Var_Tipologia_Str == "POLTRONA" )
         {
            X = 936
            Y = 650
            Z = 908

            GEST_X = 850
            GEST_Y = 783
            GEST_Z = 920

            FIN_var_gambe = "C127"
         }
      }

      if( Var_Modello_Str == "COLOMBINA" )
      {
         FIN_var_gambe = "C145"

         //sedia
         X = 580
         Y = 780
         Z = 610

         GEST_X = 570
         GEST_Z = 630

         if( Var_Tipologia_Str == "POLTRONA" )
         {
            X = 759
            Y = 675
            Z = 619

            GEST_X = 750
            GEST_Z = 680
         }

         if( Var_Tipologia_Str == "POLTRONCINA" )
         {
            X = 700
            Y = 795
            Z = 595

            GEST_X = 670
            GEST_Y = 780
            GEST_Z = 630
         }

         if( Var_Tipologia_Str == "SGABELLO" )
         {
            X = 579
            Y = 965
            Z = 600

            GEST_X = 575
            GEST_Z = 595
         }
      }

      if( Var_Modello_Str == "NACHO" )
      {
         FIN_var_seduta  = "C112"
         FIN_var_interno = "C111"

         //sedia
         X = 600
         Y = 785
         Z = 587

         if( Var_Tipologia_Str == "POLTRONA" )
         {
            FIN_var_gambe = "C145"

            X = 920
            Y = 760
            Z = 925
         }
      }

      if( Var_Modello_Str == "HUGGY" )
      {
         FIN_var_gambe   = "C127"
         FIN_var_seduta  = "C136"

         X = 1155
         Y = 897
         Z = 852

         GEST_X = 1300
         GEST_Y = 780
         GEST_Z = 800
      }

      if( Var_Modello_Str == "CHAMA" )
      {
         FIN_var_gambe     = ""
         // bordino
         FIN_var_interno   = "C150"
         FIN_var_schienale = "C110"

         X = 836
         Y = 932
         Z = 1100

         GEST_X = 825
         GEST_Y = 820
         GEST_Z = 1000

         if( Var_Tipologia_Str == "DIVANO" )
         {
            X = 1600
            GEST_X = 1780
         }
      }

      if( IS_MATCH( Var_Modello_Str, "AMIDA*") )
      {
         FIN_var_gambe = "C145"

         GEST_X = 540
         GEST_Y = 820
         GEST_Z = 550

         if( Var_Tipologia_Str == "POLTRONCINA" )
         {
            GEST_X = 570
            GEST_Y = 770
         }

         if( Var_Modello_Str == "AMIDA STRETTA" )
         {
            Var_Modello_Str_Abb = "AM_ST"

            if( Var_Tipologia_Str == "POLTRONCINA" )
            {
               GEST_X = 560
               GEST_Y = 820
            }
         }
      }

      if( Var_Modello_Str == "BEAT" )
      {
         FIN_var_gambe   = ""
         FIN_var_seduta  = ""
         //poggiapiedi
         FIN_var_interno = ""

         X = $SgabelloBeat_Diam_Seduta
         Y = 757 //TODO 657
         Z = 475

         GEST_Y = 750
         GEST_Z = 430
      }
   }

   PROCEDURA Ass_LampadaGen
   {
      if( $ATTIVA_DLL==1 & ACTION()==0 )
      {
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Modello",1)
         HIDE_ON_EDIT2(ATTUALE(),"VAR_Forma",1)
      }

      Var_Modello_Str = GetValMenuStr(ATTUALE(), "VAR_Modello")

      FLAG_Gest_DimCodifica = 0

      path_sat = STRCAT($path_sat,"Living\Lampade\",Var_Modello_Str,"\")

      FileSat1 = ""
      FileSat2 = ""
      FileSat3 = ""
      FileSat4 = ""
      FileSat1_exist = 0
      FileSat2_exist = 0
      FileSat3_exist = 0
      FileSat4_exist = 0

      FileSat1 = STRCAT(path_sat,Var_Modello_Str,"_rosone.sat")
      FileSat2 = STRCAT(path_sat,Var_Modello_Str,"_cavi.sat")
      FileSat3 = STRCAT(path_sat,Var_Modello_Str,"_strutt.sat")
      FileSat4 = STRCAT(path_sat,Var_Modello_Str,"_led.sat")

      if( Var_Modello_Str == "CHIC" )
      {
         X = 850
         Y = 1340
         Z = 250

         FLAG_Gest_DimCodifica = 1
      }

      if( Var_Modello_Str == "GLEE" )
      {
         FileSat3 = STRCAT(path_sat,Var_Modello_Str,"_strutt_",STR(VAR_Forma),".sat")
         FileSat4 = STRCAT(path_sat,Var_Modello_Str,"_led_",STR(VAR_Forma),".sat")

         X = 820
         Y = 1762.5
         Z = 26

         if( VAR_Forma == 2 ) { X = 1085 }

         FLAG_Gest_DimCodifica = 1
      }

      FileSat1_exist = FILE_EXIST(FileSat1)
      FileSat2_exist = FILE_EXIST(FileSat2)
      FileSat3_exist = FILE_EXIST(FileSat3)
      FileSat4_exist = FILE_EXIST(FileSat4)
   }

   PROCEDURA Gest_LampadaGen
   {
      GEST_X = X
      GEST_Y = Y
      GEST_Z = Z

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

   //Simone 17/01/2023
   PROCEDURA Scala_M4S
   {
      M4S_scala_x = 1
      M4S_scala_y = 1
      M4S_scala_z = 1

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

      lar_M4S = VAR_VAL(ATTUALE(),"Dim__.x")
      alt_M4S = VAR_VAL(ATTUALE(),"Dim__.y")
      pro_M4S = VAR_VAL(ATTUALE(),"Dim__.z")

      if( lar_M4S > 0 )
      {
         M4S_scala_x = VAR_VAL(ATTUALE(),"X") / lar_M4S
      }

      if( alt_M4S > 0 )
      {
         M4S_scala_y = VAR_VAL(ATTUALE(),"Y") / alt_M4S
      }

      if( pro_M4S > 0 )
      {
         M4S_scala_z = VAR_VAL(ATTUALE(),"Z") / pro_M4S
      }
   }

   PROCEDURA Led_Living_Dimensione
   {
      // 0 - Controlli preliminari
      // 0.1 - Devo passare un idx di riferimento (dato che questo cambia in base a dove chiamo la procedura)
      if( IsIdx( ATTUALE(), "wk_ref_idx") != 1 ) { EXITSUB() }
      wk_x_ref = VAR_VAL( wk_ref_idx, "X")

      // 0.2 - Comodino, qui viene posizionato
      if( UN_PADRE("Comodino*"))
      {
         X_delta_sx = 0
         X_delta_dx = 0

         EXITSUB()
      }

      // 1 - Delta
      // 1.1 - Standard
      X_delta_sx = 100
      X_delta_dx = 100

      // 1.2 - Preconfigurato
      wk_omega = 0
      if( VAR_VAL( wk_ref_idx, "pcfto") > 0)
      {
         COMPONENTI2( "wk_omega", wk_ref_idx, "SostegnoOmega")

         // 1.2.1 - Preconfigurato con sostegno omega
         if( wk_omega > 0)
         {
            X_delta_sx = 50
            X_delta_dx = 50
         }

         // 1.2.2 - Materia
         if( VAR_VAL( wk_ref_idx, "PCF_MATERIA") > 0)
         {
            X_delta_sx = X_delta_sx + $Mat_Spe_Vtr
            X_delta_dx = X_delta_dx + $Mat_Spe_Vtr
         }
      }

      // 1.3 - Singolo contenitore
      if( Is_In_StrArray( NOME(wk_ref_idx), Attrezzabile, "") == 1)
      {
         // 1.3.1 - Sx
         wk_mod_sx_idx  = -1
         wk_mod_sx_nome = ""
         if( IsIdx( wk_ref_idx, "idx_sx"))
         {
            wk_mod_sx_idx = VAR_VAL( wk_ref_idx, "idx_sx")

            if( Is_In_StrArray( NOME(wk_mod_sx_idx), Attrezzabile, "") == 1) { X_delta_sx = 0 }
         }

         // 1.3.2 - Dx
         wk_mod_dx_idx  = -1
         wk_mod_dx_nome = ""
         if( IsIdx( wk_ref_idx, "idx_dx"))
         {
            wk_mod_dx_idx = VAR_VAL( wk_ref_idx, "idx_dx")

            if( Is_In_StrArray( NOME( wk_mod_dx_idx), Attrezzabile, "") == 1) { X_delta_dx = 0 }
         }
      }

      X = wk_x_ref - X_delta_sx - X_delta_dx
   }

   //Simone 29/01/2024 - Nel caso di frontale ww, la sostituzione dovrà avvenire di tutto il modulo cassetto + top
   PROCEDURA CheckSel_Sost_ComodinoClass
   {
      if( VAR_VAL_STR(-1, "TST_OrdineSostituzione") != "1" ) { EXITSUB() }

      WITH_ALIAS("$wk_com", "CheckSost_Com")

      if( $wk_com == 0 ) { EXITSUB() }

      $wk_CG_Nome    = ""
      $wk_CG_Blocca  = 0
      $wk_CG_Items   = 0
      $wk_CG_Tipo    = "BLOCCO"
      $wk_CG_Msg     = "ATTENZIONE: per garantire la continuità di vena tra top e frontale, è obbligatorio sostituire tutto il modulo completo"
      $wk_CG_Info    = ""

      $wk_i = 1
      while( $wk_i <= $wk_com )
      {
         $wk_itm_sel = 0

         $wk_idx_com = $wk_com[$wk_i]
         WITH_VAR_LOCAL($wk_idx_com,"$wk_sel","VAR_Check_Sost",$num_con_figli,1,"1")
         WITH_VAR_LOCAL($wk_idx_com,"$wk_sost","ORD_SOST",$alfa_con_figli,1,"1")

         $wk_j = 1
         while( $wk_j <= $wk_sel )
         {
            $wk_idx_sel = $wk_sel[$wk_j]

            if( GetItemPos(-1,"wk_sost",$wk_idx_sel,"" ) > 0 ) { $wk_itm_sel = $wk_itm_sel + 1 }

            $wk_j = $wk_j + 1
         }

         if( $wk_itm_sel != 0
           & $wk_itm_sel != $wk_sel )
         {
            AddItem2Array( -1, "wk_CG_Items", $wk_idx_com, "")
         }

         $wk_i = $wk_i + 1
      }

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

      GOSUB CG_CFO_FineControllo
   }
}
