
// Persistence of Vision Ray Tracer Include File
// POV-Ray 3.0
// File: KR200.inc
// Vers: 1.1
// Desc: Kugelraumer 200m Durchmesser
//       Schwerer Kreuzer der TERRA-Klasse
// Date: 20.01.97
// Auth: Harald Ottacher
//       email: ottacher@iwf.tu-graz.ac.at
//
////////////////////////////////////////////////////

#declare _MAT_gif = "KRPL200.GIF"
#declare _M_ANGL = 0.0;

#declare _FENSTER_R = 100;

//#declare _STUETZE = 1;        // wenn deklariert dann sind
                                // die Landstützen ausgefahren
//#declare _NO_F_LIGHT = 1;     // wenn deklariert dann sind
                                // die Fenster dunkel
//#declare _NO_K_LIGHT = 1;     // wenn deklariert dann sind
                                // Beobachtungskuppel dunkel

#include "KRMAT.INC"

////////////////////////////////////////////////////

// Kugelraumer 200 Meter
#declare R = 100.0;    // Kugelradius
#declare wr = 15.0;    // Wulstradius

// Fenster
#declare F_O1 =
union {
   superellipsoid { < 0.5, 0.5 >
      scale < R+5, 0.8, 0.65 >
      translate < 0, 0, -1.35 >
   }
   superellipsoid { < 0.5, 0.5 >
      scale < R+5, 0.8, 0.65 >
      translate < 0, 0, 1.35 >
   }
   texture { TERKONIT }
 }

#declare Count = 0;
#declare F_OR =
union {
  // OBEN 1
  #while (Count < 180)
    union {
      object {
        F_O1
        rotate < 0, Count-2.5, 0 >
      }
      object {
        F_O1
        rotate < 0, Count+2.5, 0 >
      }
      translate < 0, 70, 0 >  // oben 1
    }
    #declare Count=Count+20; //18
  #end
  // OBEN 2
  #declare Count = 0;
  #while (Count < 180)
    union {
      object {
        F_O1
        rotate < 0, Count-2.1, 0 >
      }
      object {
        F_O1
        rotate < 0, Count+2.1, 0 >
      }
      translate < 0, 52, 0 >  // oben 2
    }
    #declare Count=Count+18; //15
  #end
  // OBEN 3
  #declare Count = 36;
  #while (Count < 325)
    union {
      object {
        F_O1
        scale < 0.5, 1, 1 >
        translate < -R, 0, 0 >
        rotate < 0, Count-2.1, 0 >
      }
      object {
        F_O1
        scale < 0.5, 1, 1 >
        translate < -R, 0, 0 >
        rotate < 0, Count+2.1, 0 >
      }
      translate < 0, 35, 0 > //oben 3
    }
    #declare Count=Count+12;
  #end

  // UNTEN 1
  #declare Count = 0;
  #while (Count < 180)
    union {
      object {
        F_O1
        rotate < 0, Count-2.1, 0 >
      }
      object {
        F_O1
        rotate < 0, Count+2.1, 0 >
      }
      translate < 0, -54, 0 >  // unten 1
    }
    #declare Count=Count+18; //15
  #end

  // UNTEN 2
  #declare Count = 0;
  #while (Count < 180)
    union {
      object {
        F_O1
        rotate < 0, Count-2.5, 0 >
      }
      object {
        F_O1
        rotate < 0, Count+2.5, 0 >
      }
      translate < 0, -72, 0 >  // unten 2
    }
    #declare Count=Count+20; //18
  #end
} // end union

#declare FENSTER =
difference {
  object { F_OR }
  sphere { <0, 0, 0>, R-0.3
    hollow
    texture {
      _T_FENSTER
      //pigment { Yellow }
    }
  }
} // end difference

//----- Hangar Textur
#declare Mannschl =
texture {
  pigment {
    image_map {
      gif "MANNS.GIF"
      interpolate 4 // 4=normalized distance
      filter 5 1.0
      once
    }
    translate < -0.5, -0.5, 0 >
    scale < 5, 2.5 , 1 >
    rotate < 0, 90, 0 >
  } // end pigment
} // end texture

#declare Hangar_B =
texture {
  pigment {
    image_map {
      gif "HB200.GIF"
      interpolate 4 // 4=normalized distance
      filter 5 1.0
      once
    }
    translate < -0.5, -0.5, 0 >
    scale < 16, 9 , 1 >
    rotate < 0, 90 ,0 >
  } // end pigment
} // end texture

#declare Hangar_KRO =
texture {
  pigment {
    image_map {
      gif "HGRO200.GIF"
      interpolate 4 // 4=normalized distance
      filter 5 1.0
      once
    }
    translate < -0.5, -0.5, 0 >
    scale < 18, 9 , 1 >
    rotate < 0, 90 ,0 >
  } // end pigment
} // end texture

#declare Hangar_KRU =
texture {
  pigment {
    image_map {
      gif "HGRU200.GIF"
      interpolate 4 // 4=normalized distance
      filter 5 1.0
      once
    }
    translate < -0.5, -0.5, 0 >
    scale < 16, 8 , 1 >
    rotate < 0, 90 ,0 >
  } // end pigment
} // end texture

#declare Hangar_SJ =
texture {
  pigment {
    image_map {
      png "HGSJ200.png"
      interpolate 4 // 4=normalized distance
      once
    }
    translate < -0.5, -0.5, 0 >
    scale < 35, 26, 1 >
    rotate < 0, 90 ,0 >
  } // end pigment
} // end texture

//----- Hangar Tore
#declare norm_msl_h = 16.25;  // Höhe Mannschl normal
#declare zus_msl_h = 45;      // Höhe Mannschl zusätzlich
#declare sjh_h = 28;          // Höhe SJ-Hangar
#declare hgkr_ob = 60;        // Höhe Hangarkreis oben
#declare hgkr_ut = -35;       // Höhe Hangarkreis unten
#declare hgb_h = -85;         // Höhe Bodenhangar

#declare Count = 45;
#declare MANNSCHL =
union {
  #while (Count < 360)
    intersection {
      sphere { <0, 0, 0>, R-0.5 }
      box { <-1, -1, -1>, < -0.2,  1,  1>
        scale < R+5, 1.25, 2.5 >
        translate < 0, norm_msl_h, 0 >
      }
      texture { TERKONIT }
      texture {
        Mannschl
        translate < 0, norm_msl_h, 0 >
      }
      rotate < 0, Count ,0 >
    }  // end intersection
    #declare Count=Count+45;
  #end
  intersection {
    sphere { <0, 0, 0>, R-0.5 }
    box { <-1, -1, -1>, < -0.2,  1,  1>
      scale < R+5, 1.25, 2.5 >
      translate < 0, zus_msl_h, 0 >
    }
    texture { TERKONIT }
    texture {
      Mannschl
      translate < 0, zus_msl_h, 0 >
    }  // end texture
  }  // end intersection
} // end Union

#declare Count = 0;
#declare HANGAR_B =
union {
  #while (Count < 360)
    intersection {
      sphere { <0, 0, 0>, R-1.0 }
      box { <-1, -1, -1>, < -0.2,  1,  1>
        scale < R+5, 5, 13 >
        translate < 0, hgb_h, 0 >
      }
      texture { TERKONIT }
      texture {
        Hangar_B
        translate < 0, hgb_h, 0 >
      } // end texture
      rotate < 0, Count ,0 >
    }  // end intersection
    #declare Count=Count+180;
  #end
} // end union

#declare Count = 0;
#declare HANGARKR_OB =
union {
  #while (Count < 360)
    intersection {
      sphere { <0, 0, 0>, R-1.0 }
      box { <-1, -1, -1>, < -0.2,  1,  1>
        scale < R+5, 5, 20 >
        translate < 0, hgkr_ob, 0 >
      }
      texture { TERKONIT }
      texture {
        Hangar_KRO
        translate < 0, hgkr_ob, 0 >
      } // end texture
      rotate < 0, Count ,0 >
    }  // end intersection
    #declare Count=Count+60;
  #end
} // end union

#declare Count = 0;
#declare HANGARKR_UT =
union {
  #while (Count < 360)
    intersection {
      sphere { <0, 0, 0>, R-1.0 }
      box { <-1, -1, -1>, < -0.2,  1,  1>
        scale < R+5, 5, 15 >
        translate < 0, hgkr_ut, 0 >
      }
      texture { TERKONIT }
      texture {
        Hangar_KRU
        translate < 0, hgkr_ut, 0 >
      } // end texture
      rotate < 0, Count ,0 >
    }  // end intersection
    #declare Count=Count+45;
  #end
} // end union

#declare HANGAR_SJ =
intersection {
  sphere { <0, 0, 0>,  R-1.0  }
  box { <-1, -1, -1>, < 0,  1,  1>
    scale < R+5, 15, 20 >
    translate < 0, sjh_h, 0 >
  }
  texture { TERKONIT }
  texture {
    Hangar_SJ
    translate < 0, sjh_h, 0 >
  } // end texture
} // end intersection

//----- Hangar Ausschnitte
#declare Count = 45;
#declare _MANNSCHL =
union {
  #while (Count < 360)
    superellipsoid { < 0.2, 0.2 >
      scale < R/2+5, 1.25, 2.5 >
      translate < -R/2, 0, 0 >
      rotate < 0, Count ,0 >
      translate < 0, norm_msl_h, 0 >
    }
    #declare Count=Count+45;
  #end
  superellipsoid { < 0.2, 0.2 >
    scale < R/2+5, 1.25, 2.5 >
    translate < -R/2, 0, 0 >
    translate < 0, zus_msl_h, 0 >
  }
  texture { TERKONIT }
} // end union

// Hangar Boden
#declare _HANGAR_B =
object {
    superellipsoid { < 0.2, 0.2 >
      scale < R, 4.5, 12 >
      translate < 0, hgb_h, 0 >
    }
  texture { TERKONIT }
} // end object

// oberer Hangarkreis
#declare Count = 0;
#declare _HANGARKR_OB =
union {
  #while (Count < 180)
    superellipsoid { < 0.2, 0.2 >
      scale < R, 4.5, 18 >
      rotate < 0, Count ,0 >
      translate < 0, hgkr_ob, 0 >
    }
    #declare Count=Count+60;
  #end
  texture { TERKONIT }
} // end union

// unterer Hangarkreis
#declare Count = 0;
#declare _HANGARKR_UT =
union {
  #while (Count < 180)
    superellipsoid { < 0.2, 0.2 >
      scale < R, 4, 13 >
      rotate < 0, Count ,0 >
      translate < 0, hgkr_ut, 0 >
    }
    #declare Count=Count+45;
  #end
  texture { TERKONIT }
} // end union

// SJ Hangar
#declare _HANGAR_SJ =
superellipsoid { < 0.2, 0.2 >
  scale < 50, 13, 19 >
  translate < -60, 0, 0 >
  translate < 0, sjh_h, 0 >
  texture { TERKONIT }
}

#declare SCHALE =
object {
  difference {
    sphere { <0, 0, 0>  R
    }
    object { _MANNSCHL }     // Mann Schleuse
    object { _HANGARKR_OB }  // Hangarkreis oben
    object { _HANGAR_SJ }    // Hangar für Space Jet
    object { _HANGARKR_UT }  // Hangarkreis unten
    object { _HANGAR_B }     // Hangar Boden
    object { FENSTER }
  }
} // end object

//---------------------------------------------------
// Ringwulst

#declare DUESE =
object {
  union {
    quadric {
      <1,  0,  1>,
      <0,  0,  0>,
      <0, -1,  0>, 0
    }
    cylinder {
      < 0, 0.3, 0 >,
      < 0, -0.2, 0 >,
      0.3
    }
  }
  scale 2.5
  texture { TERKONIT
    finish {
      ambient 0.05
      diffuse 0.7
      reflection 0.5
    }
  }
} // end obj

#declare r1 = 7.25;   // Düsenentfernung
#declare dsk = 45;    // Düsenwinkel

#declare WULST =
object {
  difference {
    union {
      torus { R,  wr }
      cylinder { -wr*y , wr*y, R }
    }
    #declare Count = 10;
    #while (Count < 360)
      #declare X=(r1*cos(radians( dsk ))+R)*sin(radians( Count ));
      #declare Z=(r1*cos(radians( dsk ))+R)*cos(radians( Count ));
      #declare Y=r1*sin(radians( dsk ));
      object {
        DUESE
        rotate < dsk, 0, 0 >
        rotate < 0, Count, 0 >
        translate < X, Y, Z, >
      }
      #declare Count=Count+20;
    #end
    #declare Count = 10;
    #while (Count < 360)
      #declare X=(r1*cos(radians( -dsk ))+R)*sin(radians( Count ));
      #declare Z=(r1*cos(radians( -dsk ))+R)*cos(radians( Count ));
      #declare Y=r1*sin(radians( -dsk ));
      object {
        DUESE
        rotate <180-dsk, 0, 0 >
        rotate < 0, Count, 0 >
        translate < X, Y, Z, >
      }
      #declare Count=Count+20;
    #end
  }
} // end object

//---------------------------------------------------
// Geschützkuppeln

#declare GSROHR =
lathe {
  linear_spline
  16,
  <0, 0>,
  <0.1, 0>,
  <0.10, 1.03>, <0.15, 1.03>, <0.15, 1.05>, <0.10, 1.05>,
  <0.10, 1.07>, <0.15, 1.07>, <0.15, 1.09>, <0.10, 1.09>,
  <0.10, 1.11>, <0.15, 1.11>, <0.11, 1.25>, <0.08, 1.25>, <0.08, 1.0>,
  <0, 1.0>

  texture { TERKONIT
  }
} // end lathe

#declare POLGSROHR =
union {
  object { GSROHR }
  cylinder {
    < 0.1, 0, 0 >
    < 0.1, 1.0, 0 >, 0.05
  }
  cylinder {
    < -0.1, 0, 0 >
    < -0.1, 1.0, 0 >, 0.05
  }
  cylinder {
    < 0, 0, 0.1 >
    < 0, 1.0, 0.1 >, 0.05
  }
  cylinder {
    < 0, 0, -0.1 >
    < 0, 1.0, -0.1 >, 0.05
  }
  texture { TERKONIT }
  scale 0.8
} // end union

#declare GSKUPPEL_1 =
object {
  union {
    sphere {
      < 0, 0, 0 >, 1
      texture { TERKONIT }
      scale < 1, 0.75, 1 >
    }
    object { GSROHR
      scale 0.85
    }
  }
  scale 4
} // end obj

#declare GSKUPPEL_2 =
object {
  union {
    sphere {
      < 0, 0, 0 >, 1
      texture { TERKONIT }
      scale < 1, 0.75, 1 >
    }
    object { GSROHR
      scale 0.85
    }
  }
  scale 5
} // end obj

#declare GSKUPPEL_3 =
object {
  union {
    sphere {
      < 0, 0, 0 >, 1
      texture { TERKONIT }
      scale < 1, 0.70, 1 >
    }
    object { POLGSROHR
      scale 1.0
    }
  }
  scale 5
} // end obj

#declare rgs = R - 1.5;   // Radius Polgeschütz
#declare GSKP =
union {
  sphere { < 0, 0, 0 >, 1
    texture { TERKONIT }
    scale <1, 0.5, 1>
  }
  union {
    object {
      POLGSROHR
      translate < 0.2, 0, 0 >
    }
    object {
      POLGSROHR
      translate < -0.2, 0, 0 >
    }
    rotate < -40, 0, 0 >
  }
  scale 8
  translate rgs*y
  rotate < 0, 20, 0>
}

#declare rgs = R - 1.0;  // Radius Geschütz
#declare Count = 0;
#declare wgsk = 50;      // Gesützkreiswinkel
#declare GSKR1 =
union{
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    #declare Y=rgs*sin(radians( wgsk ));
    object {
      GSKUPPEL_1
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+45;
  #end
}

#declare Count = 15;
#declare wgsk = 27;        // Gesützkreiswinkel
#declare GSKR2 =
union{
  #declare Y=rgs*sin(radians( wgsk ));
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_3
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_2
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_2
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
  #end
}

#declare Count = 15;
#declare wgsk = -27;        // Gesützkreiswinkel
#declare GSKR3 =
union{
  #declare Y=rgs*sin(radians( wgsk ));
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_3
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_2
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    object {
      GSKUPPEL_2
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
  #end
}

#declare Count = 0;
#declare wgsk = -50;      // Gesützkreiswinkel
#declare GSKR4 =
union{
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    #declare Y=rgs*sin(radians( wgsk ));
    object {
      GSKUPPEL_1
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+45;
  #end
}

//---------------------------------------------------
// Schutzschirmprojektor

#declare SSPROJ =
union {
  cylinder {
    < -1.0 0, 0 >,
    < 1.0, 0, 0 >,
    0.2
  }
  sphere {
    < 0.0, 0, 0 >, 1.0
    scale < 0.5, 0.25, 0.3 >
    translate < -1, 0, 0>
  }
  sphere {
    < 0.0, 0.0, 0 >, 1.0
    scale < 0.55, 0.3, 0.35 >
  }
  sphere {
    < 0.0, 0.0, 0 >, 1.0
    scale < 0.5, 0.25, 0.3 >
    translate < 1, 0, 0>
  }
  texture { TERKONIT }
}

#declare rgs = R - 1;   // Radius Schutzschirmprojektor
#declare Count = 22.5;
#declare wgsk = 50;        // Winkel SSprojektorkreis
#declare SSKR1 =
union{
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    #declare Y=rgs*sin(radians( wgsk ));
    object {
      SSPROJ
      scale 6
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+45;
  #end
}

#declare Count = 22.5;
#declare wgsk = -50;        // Winkel SSprojektorkreis
#declare SSKR2 =
union{
  #while (Count < 360)
    #declare X=rgs*sin(radians( Count ))*cos(radians( wgsk ));
    #declare Z=rgs*cos(radians( Count ))*cos(radians( wgsk ));
    #declare Y=rgs*sin(radians( wgsk ));
    object {
      SSPROJ
      scale 6
      rotate < 90-wgsk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+45;
  #end
}

//---------------------------------------------------
// Landeteller und Landestützen

#declare wldst = 15;

#declare LDST =
union{
  cylinder {
    < 0, 0.0, 0 >, < 0, -18.0, 0 >, 3
  }
  cylinder {
    < 0, -18.0, 0 >, < 0, -36.0, 0 >, 2.5
  }
  cylinder {
    < 0, -36.0, 0 >, < 0, -53.0, 0 >, 2
  }
  union {
    difference {
      sphere { < 0, 0, 0 >, 2.5
      }
      cylinder {
        < 0, -0.1, 0 >, < 0, -2.7, 0 >, 2.7
      }
    }
    cylinder {
      < 0, 0.0, 0 >, < 0, -1.5, 0 >, 6.0
    }
    rotate < 0, 0, -wldst >
    translate < 0, -53.0, 0 >
  }
  rotate < 0, 0, wldst >
}

#declare Count = 15;
#declare wltk = -40;
#declare rlt = R - 1;

#ifdef (_STUETZE)
#declare LTKR =
union{
  #while (Count < 360)
    #declare X=rlt*sin(radians( Count ))*cos(radians( wltk ));
    #declare Z=rlt*cos(radians( Count ))*cos(radians( wltk ));
    #declare Y=rlt*sin(radians( wltk ));
    object {
      LDST
      rotate < 0, -90, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
  #end
  texture { TERKONIT }
}
#else
#declare LTKR =
union{
  #while (Count < 360)
    #declare X=rlt*sin(radians( Count ))*cos(radians( wltk ));
    #declare Z=rlt*cos(radians( Count ))*cos(radians( wltk ));
    #declare Y=rlt*sin(radians( wltk ));
    cylinder {
      < 0, 1.0, 0 >
      < 0, 0, 0 >, 6
      rotate < 90-wltk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    }
    #declare Count=Count+30;
  #end
  texture { TERKONIT }
}
#end

//---------------------------------------------------
// Orter

#declare _ORTER_1 =
lathe {
  cubic_spline
  15,
  <0, 0>,
  <0, 0>,
  <2.0, 0.0>,<1.0, 0.5>,<0.8, 0.9>, <1.0, 1.0>,
  <1.250, 1.000>,<1.427, 1.073>,<1.500, 1.250>,<1.427, 1.427>,
  <1.250, 1.500>, <0.5, 1.500>, < 0.177, 1.677 >
  <0, 1.75>,
  <0, 1.75>

  texture { TERKONIT }
}

#declare _O_STAB =
union {
  cylinder {
    < 0, 0, 0 >,
    < 0, 2.0, 0 >,
    0.15
  }
  sphere {
    < 0, 2.0, 0 >,
    0.2
  }
}

#declare _ORTER_2 =
union {
  sphere {
    < 0, 0.0, 0 >,
    1.0
    scale < 1.0, 0.5, 1.0 >
  }
  cylinder {
    < 0, 0, 0 >,
    < 0, 1.0, 0 >,
    0.5
  }
  sphere {
    < 0, 1.0, 0 >,
    0.5
  }
  sphere {
    < 0.0, 0.0, 0 >,
    0.5
    scale < 0.5, 1, 1 >
    translate < 0.5, 1.0, 0 >
  }
  sphere {
    < 0.0, 0.0, 0 >,
    0.5
    scale < 0.5, 1, 1 >
    translate < -0.5, 1.0, 0 >
  }
  sphere {
    < 0.0, 0.0, 0 >,
    0.5
    scale < 1, 1, 0.5 >
    translate < 0, 1.0, 0.5 >
  }
  sphere {
    < 0.0, 0.0, 0 >,
    0.5
    scale < 1, 1, 0.5 >
    translate < 0, 1.0, -0.5 >
  }
  cylinder {
    < 0, 1.5, 0 >,
    < 0, 2.2, 0 >,
    0.2
  }
  lathe {
    cubic_spline
    13,
    <0, 0>,
    <0, 0>,
    <0.283, 0.117>, <0.400, 0.400>,
    <0.41, 0.40>, <0.90, 0.40>,
    <0.935, 0.415>, <1.000, 0.45>,<0.935, 0.485>,
    <0.90, 0.50>, <0.50, 0.55>,
    <0, 0.55>,
    <0, 0.55>
    scale < 1.5, 1, 0.5 >
    rotate < 60, 0, 0>
    translate < 0, 2.1, 0 >
  }
  texture { TERKONIT }
}

#declare wank = 69;
#declare rank = R-0.4;
#declare Y=rank*sin(radians( wank ));
#declare ORTER =
union {
  #declare X=rank*sin(radians( 0 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 0 ))*cos(radians( wank ));
  object {
    _ORTER_2
    scale 2
    //rotate < 0, 0, 0 >
    translate < X, Y-0.5, Z >
  }
  #declare X=rank*sin(radians( 180 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 180 ))*cos(radians( wank ));
  object {
    _ORTER_2
    scale 2
    rotate < 0, 180, 0 >
    translate < X, Y-0.5, Z >
  }
  #declare X=rank*sin(radians( 90 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 90 ))*cos(radians( wank ));
  object {
    _ORTER_1
    scale 2
    rotate < 90-wank, 0, 0 >
    rotate < 0, 90, 0 >
    translate < X, Y, Z >
  }
  #declare X=rank*sin(radians( 270 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 270 ))*cos(radians( wank ));
  object {
    _ORTER_1
    scale 2
    rotate < 90-wank, 0, 0 >
    rotate < 0, 270, 0 >
    translate < X, Y, Z >
  }
} // end union

//---------------------------------------------------
// Antennen

#declare _ANTENNE_1 =
lathe {
  cubic_spline
  17,
  <0.0, 0>,
  <0.0, 0>,
  <1.0, 0.0>,<0.4, 1.29>,
  <0.4, 1.300>,<0.541, 1.359>,<0.600, 1.500>,<0.541, 1.641>,
  <0.4, 1.7>,<0.4, 1.89>,
  <0.410, 1.900>, <0.495, 1.976>, <0.700, 2.400>, <0.495, 2.824>, <0.100, 2.999>,
  <0, 3.0>,
  <0, 3.0>

  texture { TERKONIT }
}

#declare _A_STAB_1 =
union {
  cylinder {
    < 0, 0, 0 >,
    < 0, 3.0, 0 >,
    0.4
  }
  sphere {
    < 0, 3.0, 0 >,
    0.45
  }
}

#declare _ANTENNE_2 =
union {
  object {
    _A_STAB_1
    translate < 0.0, 0.0, 0.0 >
  }
  object {
    _A_STAB_1
    translate < -1.2, -0.6, -1.2 >
  }
  object {
    _A_STAB_1
    translate < -1.2, -1.4, 1.2 >
  }
  object {
    _A_STAB_1
    translate < 1.2, -1.3, 1.2 >
  }
  object {
    _A_STAB_1
    translate < 1.2, -0.5, -1.2 >
  }
  sphere {
    < 0, 0.0, 0 >,
    1.0
    scale < 4.0, 2.0, 4.0 >
    rotate < 90-wank, 0, 0 >
    translate < 0, -0.9, -0.9>
  }
  texture { TERKONIT }
}

#declare _A_STAB =
union {
  cylinder {
    < 0, 0, 0 >,
    < 0, 2.0, 0 >,
    0.15
  }
  sphere {
    < 0, 2.0, 0 >,
    0.2
  }
}

#declare _ANTENNE_3 =
union {
  lathe {
    cubic_spline
    25,
    <0, 0>,
    <0, 0>,
    <1.50, 0.00>, <0.76, 0.80>,
    <0.800, 0.800>, <1.141, 0.859>, <1.200, 1.000>, <1.141, 1.141>, <0.700, 1.200>,
    <0.64, 1.20>, <0.47, 1.80>,
    <0.500, 1.800>, <0.641, 1.859>, <0.700, 2.000>, <0.641, 2.141>, <0.400, 2.200>,
    <0.35, 2.20>,<0.20, 2.70>,
    <0.210, 2.700>, <0.212, 2.788>, <0.300, 3.000>, <0.212, 3.212>, <0.05, 3.299>,
    <0, 3.3>,
    <0, 3.3>
  }
  object {
    _A_STAB
    rotate < 0, 0, -10 >
    translate < 1.0, 0, 0 >
  }
  object {
    _A_STAB
    rotate < 0, 0, 10 >
    translate < -1.0, 0, 0 >
  }
  object {
    _A_STAB
    rotate < 10, 0, 0 >
    translate < 0, 0, 1.0 >
  }
  object {
    _A_STAB
    rotate < -10, 0, 0 >
    translate < 0, 0, -1.0 >
  }
  texture { TERKONIT }
}

#declare Y=rank*sin(radians( wank ));
#declare ANTENNE =
union {
  #declare X=rank*sin(radians( 45 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 45 ))*cos(radians( wank ));
  object {
    _ANTENNE_1
    scale 2
    translate < X, Y-0.5, Z >
  }
  #declare X=rank*sin(radians( 225 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 225 ))*cos(radians( wank ));
  object {
    _ANTENNE_1
    scale 2
    translate < X, Y-0.5, Z >
  }
  #declare X=rank*sin(radians( 135 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 135 ))*cos(radians( wank ));
  object {
    _ANTENNE_3
    scale 1.5
    translate < X, Y-0.3, Z >
  }
  #declare X=rank*sin(radians( 315 ))*cos(radians( wank ));
  #declare Z=rank*cos(radians( 315 ))*cos(radians( wank ));
  object {
    _ANTENNE_2
    scale 1.5
    rotate < 0, 315, 0 >
    translate < X, Y, Z >
  }
} // end union

//---------------------------------------------------
// Beobachtungskuppel

#declare wbk = 63;           // Winkel Beobachtungskuppel
#declare rbk = R - 0.5;      // Radius Beobachtungskuppel
#declare Y=rbk*sin(radians( wbk ));
#declare Count = 67.5;
#declare BKPL =
union {
  #while (Count < 360)
    #declare X=rbk*sin(radians( Count ))*cos(radians( wbk ));
    #declare Z=rbk*cos(radians( Count ))*cos(radians( wbk ));
    sphere {
      < 0, 0, 0 >, 1
      hollow
      texture { _T_GSK }
      scale < 1, 0.5, 1 >
      scale 5
      rotate < 90-wbk, 0, 0 >
      rotate < 0, Count, 0 >
      translate < X, Y, Z >
    } // end sphere
    #declare Count=Count+180;
  #end
} // end union

//---------------------------------------------------
// Raumer

#declare KR200 =
union {
  object { SCHALE
    texture {
      _T_SCHALE
    }
  }
  object { MANNSCHL }
  object { HANGAR_B }
  object { HANGARKR_OB }
  object { HANGARKR_UT }
  object { HANGAR_SJ }
  object { WULST
    texture {
      _T_SCHALE
    }
  }
  object { GSKP }
  object { GSKR1 }
  object { GSKR2 }
  object { GSKR3 }
  object { GSKR4 }
  object { SSKR1 }
  object { SSKR2 }
  object { LTKR }
  object { ORTER }
  object { ANTENNE }
  object { BKPL }
}

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