// Persistence of Vision Ray Tracer Scene Description File
// File: Sink Objects.inc
// Vers: 3.1
// Desc: Object Descriptions
// Date: July 15, 2001 
// Auth: Michael Koopman - mkoopman@hotmail.com
//  URL: http://www.geocities.com/ronfar.geo


//****************************************************************** START COUNTER TOP ******************************************************************//
#declare CounterTop =
union {

   difference {

      union {

         box {
            <-4, -2, -2.4>,
            < 4,  0,  2.5>
            pigment { White }
            finish { phong 1 }
         }

         box {
            <-4, -2, -2.5>,
            < 4, -0.1, 2.5>
            pigment { White }
            finish { phong 1 }
         }

         cylinder {
            <-4, -0.1, -2.4>,
            < 4, -0.1, -2.4>,
            0.1
            pigment { White }
            finish { phong 1 }
         }

      }


      sphere {
         0, 1
         scale <2, 1.5, 1.5>
         pigment { White }
         finish { phong 1 }
      }

      cylinder {
         <0, -0.1, 0>,
         <0,  0.5, 0>,
         1.1
         scale <2, 1, 1.5>
         pigment { White }
         finish { phong 1 }
      }

   }

   torus {
      1.1, 0.1
      scale <2, 1, 1.5>
      translate y*-0.1
      pigment { White }
      finish { phong 1 }
   }

}
//****************************************************************** END COUNTER TOP ******************************************************************//


//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//


//******************************************************************* START FAUCET ********************************************************************//

#declare Faucet =
union {


//***** BASE OF FAUCET *****//
   box {
      <-1, 0, -0.2>,
      < 1, 0.2, 0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   box {
      <-0.95, 0, -0.25>,
      < 0.95, 0.2, 0.25>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   box {
      <-0.95, 0, -0.2>,
      < 0.95, 0.25, 0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }


   sphere {
      0, 1
      scale 0.05
      translate <-0.95, 0.2, -0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   sphere {
      0, 1
      scale 0.05
      translate <-0.95, 0.2,  0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   sphere {
      0, 1
      scale 0.05
      translate < 0.95, 0.2, -0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   sphere {
      0, 1
      scale 0.05
      translate < 0.95, 0.2,  0.2>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.95, 0, -0.2>,
      <-0.95, 0.2, -0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      < 0.95, 0, -0.2>,
      < 0.95, 0.2, -0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.95, 0, 0.2>,
      <-0.95, 0.2, 0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      < 0.95, 0, 0.2>,
      < 0.95, 0.2, 0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.95, 0.2, -0.2>,
      < 0.95  0.2, -0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.95, 0.2, 0.2>,
      < 0.95  0.2, 0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.95, 0.2, -0.2>,
      <-0.95, 0.2,  0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      < 0.95, 0.2, -0.2>,
      < 0.95, 0.2,  0.2>,
      0.05
      pigment { P_Silver3 }
      finish { phong 1 }
   }

//***** END BASE OF FAUCET *****//



//***** SPOUT *****//

   difference {
      union {
         torus {
            1, 0.125
            rotate <90, 90, 0>
            translate <-0.125, 0, -1>
            pigment { P_Silver3 }
            finish { phong 1 }
         }

         torus {
            1, 0.125
            rotate <90, 90, 0>
            translate < 0.125, 0, -1>
            pigment { P_Silver3 }
            finish { phong 1 }
         }

         difference {

            cylinder {
               <-0.125, 0, -1>,
               < 0.125, 0, -1>,
               1.125
               pigment { P_Silver3 }
               finish { phong 1 }
            }

            cylinder {
               <-1, 0, -1>,
               < 1, 0, -1>,
               0.875
               pigment { P_Silver3 }
               finish { phong 1 }
            }

         }

      }



      box {
         <-5, -5, -5>,
         < 5,  0,  5>
         pigment { P_Silver3 }
         finish { phong 1 }
      }


      box {
         <-5, -5, -5>,
         < 5,  5, -1>
         pigment { P_Silver3 }
         finish { phong 1 }
      }

   }

   torus {
      0.125, 0.125
      translate <0, 1, -1>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <0, 0.875, -1>,
      <0, 1.125, -1>,
      0.125
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <0, 0.825, -1.05>,
      <0, 1.0, -1.05>,
      0.09
      pigment { P_Silver3 }
      finish { phong 1 }
   }

//***** END SPOUT *****//




//***** SPIGOTS *****//




   sphere {
      0, 1
      scale 0.125
      translate <-0.6, 0.25, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <0, 0.25, 0>,
      <0, 0.4, 0>,
      0.0625
      translate x*-0.6
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.125, 0, 0>,
      < 0.125, 0, 0>,
      0.0625
      translate <-0.6, 0.45, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   sphere {
      0, 1
      scale 0.0625
      translate <-0.475, 0.45, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.125, 0, 0>,
      < 0.125, 0, 0>,
      0.0625
      translate <-0.85, 0.45, 0>
      pigment { DMFWood4 scale 5 turbulence 0.1 }
      finish { phong 0.5 }
   }

   sphere {
      0, 1
      scale 0.0625
      translate <-0.975, 0.45, 0>
      pigment { DMFWood4 scale 5 turbulence 0.1 }
      finish { phong 0.5 }
   }

   



   sphere {
      0, 1
      scale 0.125
      translate <0.6, 0.25, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <0, 0.25, 0>,
      <0, 0.4, 0>,
      0.0625
      translate x*0.6
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.125, 0, 0>,
      < 0.125, 0, 0>,
      0.0625
      translate <0.6, 0.45, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   sphere {
      0, 1
      scale 0.0625
      translate <0.475, 0.45, 0>
      pigment { P_Silver3 }
      finish { phong 1 }
   }

   cylinder {
      <-0.125, 0, 0>,
      < 0.125, 0, 0>,
      0.0625
      translate <0.85, 0.45, 0>
      pigment { DMFWood4 scale 5 turbulence 0.1 }
      finish { phong 0.5 }
   }

   sphere {
      0, 1
      scale 0.0625
      translate <0.975, 0.45, 0>
      pigment { DMFWood4 scale 5 turbulence 0.1 }
      finish { phong 0.5 }
   }

//***** END SPIGOTS *****//

}

//******************************************************************* END FAUCET ********************************************************************//


//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//


//*************************************************************** START AC_BACKPLATE *****************************************************************//


#declare AC_Backplate =
union {
/*
   box {
      <-0.35, -0.5, -0.05>,
      < 0.35,  0.5,  0>
      pigment { Beige }
   }
*/
   box {
      <-0.3, -0.45, -0.1>,
      < 0.3,  0.45,  0>
      pigment { Beige }
   }

   cylinder {
      <-0.3, 0.45, -0.05>,
      < 0.3, 0.45, -0.05>,
      0.05
      pigment { Beige }
   }

   cylinder {
      <-0.3, -0.45, -0.05>,
      < 0.3, -0.45, -0.05>,
      0.05
      pigment { Beige }
   }

   cylinder {
      <-0.3, -0.45, -0.05>,
      <-0.3,  0.45, -0.05>,
      0.05
      pigment { Beige }
   }

   cylinder {
      < 0.3, -0.45, -0.05>,
      < 0.3,  0.45, -0.05>,
      0.05
      pigment { Beige }
   }

   sphere {
      0, 1
      scale 0.05
      translate <-0.3, -0.45, -0.05>
      pigment { Beige }
   }

   sphere {
      0, 1
      scale 0.05
      translate <-0.3,  0.45, -0.05>
      pigment { Beige }
   }

   sphere {
      0, 1
      scale 0.05
      translate < 0.3, -0.45, -0.05>
      pigment { Beige }
   }

   sphere {
      0, 1
      scale 0.05
      translate < 0.3,  0.45, -0.05>
      pigment { Beige }
   }

}

//*************************************************************** END AC_BACKPLATE *****************************************************************//


//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//


//*************************************************************** START AC_OUTLET *****************************************************************//


#declare AC_Outlet =
union {

   difference {

      union {
         object {
            AC_Backplate
            scale <0.9, 1, 1>
         }

         object {
            AC_Backplate
            scale <0.6, 0.75, 0.25>
            translate z*-0.09
         }
      }

      box {
         <-0.0125, -0.045, -1>,
         < 0.0125,  0.045, -0.099>
         translate <-0.05, 0.18, 0>
         pigment { Black }
      }

      box {
         <-0.0125, -0.045, -1>,
         < 0.0125,  0.045, -0.099>
         translate < 0.05, 0.18, 0>
         pigment { Black }
      }

      cylinder {
         <0, 0, -1>,
         <0, 0, -0.099>,
         0.025
         translate <0, 0.08, 0>
         pigment { Black }
      }



      box {
         <-0.0125, -0.045, -1>,
         < 0.0125,  0.045, -0.099>
         translate <-0.05, -0.08, 0>
         pigment { Black }
      }

      box {
         <-0.0125, -0.045, -1>,
         < 0.0125,  0.045, -0.099>
         translate < 0.05, -0.08, 0>
         pigment { Black }
      }

      cylinder {
         <0, 0, -1>,
         <0, 0, -0.099>,
         0.025
         translate <0, -0.18, 0>
         pigment { Black }
      }

   }

   cylinder {
      <0, 0, -0.105>,
      <0, 0, -0.09>,
      0.03
      translate <0, 0.42, 0>
      pigment { Silver }
   }

   cylinder {
      <0, 0, -0.105>,
      <0, 0, -0.09>,
      0.03
      translate <0, -0.42, 0>
      pigment { Silver }
   }

}



//*************************************************************** END AC_OUTLET *****************************************************************//


//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//


//*************************************************************** START TILEBASE *****************************************************************//


#declare TileBase =
union {
   box {
      <0.05, 0.05, -0.1>,
      <0.95, 0.95, 0>
   }

   cylinder {
      <0.05, 0.05, -0.05>,
      <0.95, 0.05, -0.05>,
      0.05
   }

   cylinder {
      <0.05, 0.95, -0.05>,
      <0.95, 0.95, -0.05>,
      0.05
   }

   cylinder {
      <0.05, 0.05, -0.05>,
      <0.05, 0.95, -0.05>,
      0.05
   }

   cylinder {
      <0.95, 0.05, -0.05>,
      <0.95, 0.95, -0.05>,
      0.05
   }

   sphere {
      0, 1
      scale 0.05
      translate <0.05, 0.05, -0.05>
   }

   sphere {
      0, 1
      scale 0.05
      translate <0.05, 0.95, -0.05>
   }

   sphere {
      0, 1
      scale 0.05
      translate <0.95, 0.05, -0.05>
   }

   sphere {
      0, 1
      scale 0.05
      translate <0.95, 0.95, -0.05>
   }

}


//*************************************************************** END TILEBASE *****************************************************************//



//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//



//*************************************************************** START TILE WALLS *****************************************************************//


#declare WhiteTile =
   object {
      TileBase
      pigment { White }
      finish { phong 0.5 reflection 0.01 }
   }



#declare GrayTile =
   object {
      TileBase
      pigment { Gray90 }
      finish { phong 0.5 reflection 0.01 }
   }




#declare WhiteTileRow = union {
#declare WhiteTileX = -9.75;
#while (WhiteTileX < 10.25)
object {
   WhiteTile
   translate x*WhiteTileX
}
#declare WhiteTileX = (WhiteTileX + 2);
#end

}



#declare GrayTileRow = union {
#declare GrayTileX = -8.75;
#while (GrayTileX < 11.25)
object {
   GrayTile
   translate x*GrayTileX
}
#declare GrayTileX = (GrayTileX + 2);
#end

}

#declare PatchTileRow =
union {

   object {
      WhiteTileRow
   }

   object {
      GrayTileRow
   }

}


#declare PatchTileWall = union {

#declare TileWall = -10;
#while (TileWall < 10)
object {
   PatchTileRow
   translate y*TileWall
}
#declare TileWall = (TileWall + 2);
#end

#declare TileWall2 = -9;
#while (TileWall2 < 10)
object {
   PatchTileRow
   translate x*1
   translate y*TileWall2
}
#declare TileWall2 = (TileWall2 + 2);
#end

}

//*************************************************************** END TILE WALLS *****************************************************************//



//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//



//*************************************************************** START TRASHCAN *****************************************************************//




#declare TrashCan =
difference {
   superellipsoid {
      <0.25, 0.25>
      scale <0.75, 1.75, 1.5>
//      translate <-5.5, -3.6, 0>
      translate <0, 0, 0>
      pigment { Gray30 }
      finish { reflection 0.01 phong 1 }
   }

   superellipsoid {
      <0.25, 0.25>
      scale <0.55, 1.74, 1.3>
//      translate <-5.5, -3.3, 0>
      translate <0, 0.3, 0>
      pigment { Gray30 }
      finish { reflection 0.01 phong 1 }
   }

}


//*************************************************************** END TRASHCAN *****************************************************************//


//=====================================================================================================================================================//
//=====================================================================================================================================================//
//=====================================================================================================================================================//



//*************************************************************** START BRUSH *************************************************************//


#declare Bristles =
union {
   cylinder {
      <0, 0, 0>,
      <0, 4, 0>,
      0.05
      pigment { Gray20 }
   }

   #declare bristlecount=0;
   #while (bristlecount < 360)
   cylinder {
      <0, 0, 0>,
      <0, 4, 0>,
      0.05
      rotate z*7.5
      rotate y*bristlecount
      pigment { Gray20 }
   }
   #declare bristlecount = (bristlecount + 30);
   #end
}

#declare bristlerow =
union {
   #declare bristleztrans = 11;
   #while (bristleztrans < 26)
   object {
      Bristles
      translate <0, 0, bristleztrans>
   }
   #declare bristleztrans = (bristleztrans + 1);
   #end
}



#declare FinishedBrush =
union {

   torus {
      2, 0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      <0, -0.5, 0>,
      <0,  0.5, 0>,
      2
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   box {
      <-2, -0.5, 0>,
      < 2,  0.5, 5>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      <-2, 0, 0>,
      <-2, 0, 5>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      <2, 0, 0>,
      <2, 0, 5>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   difference {
      cylinder {
         <0, -0.5, 0>,
         <0,  0.5, 0>,
         2
         scale <1, 1, 2>
         translate z*5
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      box {
         <-5, -5, -5>,
         < 5,  5,  5>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

   }



   difference {
      torus {
         2, 0.5
         scale <1, 1, 2>
         translate z*5
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }
      box {
         <-5, -5, -5>,
         < 5,  5,  5>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }
   }





   difference {
      box {
         <-4, -0.5, 9>,
         < 4,  0.5, 11>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      cylinder {
         <-4, -3, 9>,
         <-4,  3, 9>,
         2.5
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      cylinder {
         < 4, -3, 9>,
         < 4,  3, 9>,
         2.5
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

   }


   cylinder {
      <-1.5, 0, 9>,
      < 1.5, 0, 9>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   sphere {
      0, 0.5
      translate <-1.5, 0, 9>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   sphere {
      0, 0.5
      translate < 1.5, 0, 9>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }


   difference {
      torus {
         2.5, 0.5
         translate <-4, 0, 9>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      box {
         <-10, -5, 0>,
         < 10,  5, 9>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      box {
         <-10, -5, 0>,
         <-2.55, 5, 15>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

   }


   difference {
      torus {
         2.56, 0.5
         translate < 4, 0, 9>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      box {
         <-10, -5, 0>,
         < 10,  5, 9>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }

      box {
         < 10, -5, 0>,
         < 2.56, 5, 15>
         pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
         finish { phong 1 }
      }
   }

   sphere {
      0, 0.5
      translate <-2.5, 0, 10.88>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   sphere {
      0, 0.5
      translate < 2.5, 0, 10.88>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      <-2.5, 0, 10.88>,
      <-2.5, 0, 25.5>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      < 2.5, 0, 10.88>,
      < 2.5, 0, 25.5>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   box {
      <-2.5, -0.5, 10.88>,
      < 2.5,  0.5, 25.5>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   cylinder {
      <-2.5, 0, 25.5>,
      < 2.5, 0, 25.5>,
      0.5
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   sphere {
      0, 0.5
      translate <-2.5, 0, 25>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }

   sphere {
      0, 0.5
      translate < 2.5, 0, 25>
      pigment { DMFWood3 rotate y*1 turbulence 0.1 scale 5 }
      finish { phong 1 }
   }


   #declare bristlextrans = -2.25;
   #while (bristlextrans < 2.26) 
   object {
      bristlerow
      translate x*bristlextrans
   }
   #declare bristlextrans = (bristlextrans + 1);
   #end

   object {
      Bristles
      translate <-1, 0, 10>
   }

   object {
      Bristles
      translate <0, 0, 10>
   }

   object {
      Bristles
      translate < 1, 0, 10>
   }

}


//*************************************************************** END BRUSH *************************************************************//




    Source: geocities.com/ronfar.geo