POV-Ray : Newsgroups : povray.advanced-users : Tricky object alignment problem : Re: A solution Server Time
28 Jul 2024 16:30:52 EDT (-0400)
  Re: A solution  
From: Rune
Date: 28 May 2006 11:11:55
Message: <4479bdbb$1@news.povray.org>
Orchid XP v2 wrote:
> This seems to work...
>
> In case it way be of use to anybod else...

Could you provide an example of use? I can't get it to work in the test 
scene below. Granted, it doesn't use a parallelogram, but it looks like it 
is meant to handle other coplanar points too. Besides, doesn't work with a 
parallelogram either. If you really need it for parallelograms only, then I 
can think of a simpler solution that uses a box instead of a prism.

#include "transforms.inc"

#macro Rectangle(A, B, C, D, r)
   sphere {A, r}
   sphere {B, r}
   sphere {C, r}
   sphere {D, r}
   cylinder {A, B, r}
   cylinder {B, C, r}
   cylinder {C, D, r}
   cylinder {D, A, r}
#end

#macro DrawPoly(Points, Radius)
   #local A = Points[0];
   #local B = Points[1];
   #local C = Points[2];

   #local AB = B - A;
   #local AC = C - A;
   #local Norm = vnormalize(vcross(AB, AC));

   #local V1 = Norm;
   #local V2 = vnormalize(AB);
   #local V3 = vcross(V1, V2);

   prism
   {
     linear_sweep
     linear_spline
     -Radius, +Radius, dimension_size(Points, 1),

     #local lp = 0;
     #while (lp < dimension_size(Points, 1))
       <vdot(V3, Points[lp]), vdot(V2, Points[lp])>

       #local lp = lp + 1;
     #end

     translate +y*vdot(A, Norm)
     Reorient_Trans(y, Norm)
   }
#end

#declare Points = array[4] {<-1,-1,0>, <1,-2,1>, <1,2,1>, <-1,2,0>}

camera {location -6*z}
light_source {<-1,2,-3>*1000, color rgb 1}

union {
   Rectangle(Points[0],Points[1],Points[2],Points[3], 0.3)
   DrawPoly(Points, 0.3)
   pigment {rgb 1}
}


Rune
-- 
http://runevision.com


Post a reply to this message

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