POV-Ray : Newsgroups : povray.newusers : Writing a .inc file : Re: Writing a .inc file Server Time
28 Jul 2024 14:18:30 EDT (-0400)
  Re: Writing a .inc file  
From: OT
Date: 28 Jul 2009 12:50:01
Message: <web.4a6f2b6e2e2465d8411521dd0@news.povray.org>
"Chris B" <nom### [at] nomailcom> wrote:
> "Jug" <nomail@nomail> wrote in message
> news:web.489bf2df611ced9672762ce30@news.povray.org...
> > Hi,
> >  I am new to POV-Ray and have no previous programming experience, so
> > please
> > forgive me if this is a simple question.  I a trying to write an .inc file
> > of
> > an etched tile.  I want the tile and the lettering to be two different
> > colors
> > and to be able to easily edit the colors of the tile from the scene file I
> > add
> > it into.  I know that if I do not include a color/texture in the .inc file
> > I
> > can define the it in the scene, but it makes the tile and writing the same
> > color/texture.  Is there a way I can determine or change the color/texture
> > of
> > the individual components of the tile from the scene file?  I would also
> > like
> > to be able to easily change  the pigment, texture, and finish of the tile
> > in
> > the .inc file from the scene file.  Do I need to include the standard .inc
> > files, such as colors, textures, or stones1 into my .inc file, or will it
> > work
> > if I include them in the scene?  I have included my tile below and added
> > in the
> > color and texture as an example of what I am trying to do.  Thanks a lot
> > for any
> > help you can give me.
> >
> > Jug
>
> Hi and Welcome.
>
> There are actually lots of approaches you could take.
>
> I very much prefer the approach that I've illustrated below using #ifdef and
> #ifndef to define default texture values. As you can see from the
> 'WritingTexture' declaration, you can nest these to provide the sort of
> flexibility you mentioned in your question: If 'WritingTexture' is already
> defined by the time your include file is parsed, it'll use that. Otherwise
> if 'WritingPigment' or 'WritingNormal' are defined it'll use them to
> construct 'WritingTexture'. If none are defined it'll just define defaults
> and plough on regardless.
>
> You can use a similar technique to define any #include files that you're
> dependent upon if they weren't already included.
>
> By testing for everything you need you can make a very robust little
> #include file. By providing defaults for everything, anyone can start using
> the file without having to initially worry about setting variables,
> parameters etc.
>
> If you're planning to generate multiple element blocks (e.g. a whole
> periodic table), you're probably better off wrapping the contents of your
> #include file in a macro statement e.g. #macro Element() .... #end. Then you
> can #include it once and call it many times.
>
> p.s. To revert to default settings between macro calls you can use #undef on
> textures, pigments or normals that were previously declared.
>
> Regards,
> Chris B.
>
> #ifndef (Green)    #include "colors.inc" #end
> #ifndef (T_Stone1) #include "stones.inc" #end
>
> #ifndef(BlockTexture)
>   #declare BlockTexture = texture {T_Stone1}
> #end
> #ifndef(WritingTexture)
>   #declare WritingTexture = texture {
>     #ifdef (WritingPigment) pigment {WritingPigment}
>     #else pigment {Green}
>     #end
>     #ifdef (WritingNormal) pigment {WritingNormal}
>     #else normal {agate scale 0.5}
>     #end
>   }
> #end
>
>
> #declare Silver = union{            // Element Tile
>   difference{                       // Front Plate and Lettering
>     box{<0, 0, 0>,                    // Box, Near lower left corner
>       < 1.6, 2.2,  0.2>                   // Far upper right corner
>       texture {BlockTexture}              // color
>       translate <0, 0, 0>                 // location
>     }
>     text {ttf "Arial.ttf" "Ag" 5, 0   // text and symbol
>       texture {WritingTexture}            // color
>       scale 1                             // scale
>       translate <.2, .5, -1>              // location
>     }
>     text {ttf "Arial.ttf" "47" 5, 0   // text and number
>       texture {WritingTexture}            // color
>       scale 0.6                           // scale
>       translate <.1, 1.6, -1>             // location
>     }
>     translate <0.25, 0.25,  >           // location
>   }
>
>   difference{                   // Border and Back Plate
>     box{<0, 0,   0>,              // Border, Near lower left corner
>       < 2.1, 2.7,  0.3>             // Far upper right corner
>       texture {T_Stone1}            // color
>     }
>     box{<0.15, 0.15, -0.1>,       // Negative Space, Near lower left corner
>       < 1.95, 2.55,  0.2>           // Far upper right corner
>       texture {WritingTexture}      // color
>     }
>   }
> }

Hi,
Any ideas on how to actually write a macro to arrange all the elements in a
table?
-OT


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.