Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmüller
English English English
Italiano  Italiano
Deutsch 

macro "Segment_of_Torus (...)" overview my macro objects macro "Round_Tube_Ring_N (...)"

Cette forme est définie comme une "macro" dans mon include file "shapes_lo.inc":

Segment_of_Object

Segment_of_Object


    Segment d'objet
 
syntaxe générale :
object{  Segment_of_Object (Moi_Objet, Segment_Angle)
        texture{ ... ... }
      } // fin de objet ------------
Avec :
Moi_Objet = un objet declaré,
Segment_Angle = l'angle du segment, orienté à main gauche.

Exemple :
#declare My_Test_Object =
difference{
 sphere{ <0,0,0>, 2.75
         texture { pigment{ color rgb< 0.5, 1.0, 0.0>}
                   finish { ambient 0.1 diffuse 0.85  phong 1}
                 } // end of texture
       }  // end of sphere ----------------------------------------
 sphere{ <0,0,0>, 2.25
         texture { pigment{ color rgb< 1, 0.6, 0> }
                   finish { ambient 0.1 diffuse 0.85  phong 1}
                 } // end of texture
       }  // end of sphere ----------------------------------------
 cylinder{ <0,-3.5,0>,<0,3.5,0>, 1.50
           texture { pigment { color rgb< 1, 1, 1>}
                     finish  { ambient 0.15 diffuse 0.85 phong 0.5}
                   } // end of texture
         } // end of cylinder  ------------------------------------
  scale<1,0.6,1>
} // end of difference --------------------------------------------

//-----------------------------------------------------------------
#include "shapes_lo.inc"
object{ Segment_of_Object (My_Test_Object,-235)

         texture { pigment{ color rgb<1,1,1>}
                   finish { ambient 0.1 diffuse 0.85  phong 1}
                 } // end of texture
      }
// ---------------------------------------------------------------- 


La macro en détail

En ce qui concerne la méthode de découper le segment avec deux parallélépipèdes on peut voir les illustrations des macros précédentes.
Le dimensions des parallélépipèdes usées ici pour découper le segment, sont calculées avec les fonctions "min_extent ( Object )" et "max_extent ( Object )" automatiquement :
//--------------------------------------------------- Segment_of_Object macro
#macro  Segment_of_Object ( SEgment_OBject, Segment_Angle)
#local D = 0.0001; // just a little bit
#if (Segment_Angle = 0) #local Segment_Angle = D; #end
#if (abs(Segment_Angle) >= 360)
    #local Segment_Angle = mod (Segment_Angle, 360); #end

#local O_min = min_extent ( SEgment_OBject );
#local O_max = max_extent ( SEgment_OBject );

#local O_max_x = max (O_min.x, O_max.x);
#local O_max_z = max (O_min.z, O_max.z);

#local R_max = 1.5*max(O_max_x,O_max_z);

#if (Segment_Angle > 0)
   #local Box_z = R_max+D;
#else
   #local Box_z = -R_max+D;
#end

 intersection{
  object{ SEgment_OBject }

  #if (abs(Segment_Angle) >= 180)
  union{
  #end // then use union!

   box { <-R_max+D,O_min.y-D,0>,< R_max+D, O_max.y+D,-Box_z>
       }// end of box

   box { <-R_max+D,O_min.y-D, Box_z>,<R_max+D, O_max.y+D,0>
         rotate<0, Segment_Angle,0>
        }// end of box

  #if (abs(Segment_Angle) >= 180)
   } // end of union
  #end // end of union, if union is used!

} // end of intersection

#end // end of macro ------------------------- end of macro Segment_of_Object -----

Un autre exemple :
 
Segment_of_Object Segment_of_Object
L'objet originale Segment_Angle = -225






macro "Segment_of_Torus (...)" overview my macro objects macro "Round_Tube_Ring_N (...)"

© Friedrich A. Lohmüller, 2010
email email: (legacy email redacted)
homepage:www.f-lohmueller.de