HyperFun: sample model

Sample model without attributes

--This HyperFun program consists of one object:
--union of superellipsoid, torus and soft object

my_model(x[3], a[1])
{
array x0[9], y0[9], z0[9], d[9], center[3];
x1=x[1];
x2=x[2];
x3=x[3];

-- superellipsoid by formula
superEll = 1-(x1/0.8)^4-(x2/10)^4-(x3/0.8)^4;

-- torus by library function
center = [0, -9, 0];
torus = hfTorusY(x,center,3.5,1);

-- soft object
x0 = [2.,1.4, -1.4, -3, -3, 0, 2.5, 5., 6.5];
y0 = [8, 8, 8, 6.5, 5, 4.5, 3, 2, 1];
z0 = [0, -1.4,-1.4, 0, 3, 4, 2.5, 0, -1];
d = [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.7, 3];
sum = 0.;
i = 1;

while (i<10) loop
    xt = x[1] - x0[i];
    yt = x[2] - y0[i];
    zt = x[3] - z0[i];
    r = sqrt(xt*xt+yt*yt+zt*zt);

    if (r <= d[i]) then
        r2 = r*r; r4 = r2*r2; r6 = r4*r2;
        d2 = d[i]^2; d4 = d2*d2; d6 = d4*d2;
        sum = sum + (1 - 22*r2/(9*d2) +
        17*r4/(9*d4) - 4*r6/(9*d6));
    endif;

    i = i+1;
endloop;

soft = sum - 0.2;

-- final model as set-theoretic union
my_model = superEll | torus | soft;
} 

Model with attributes

my_model my_partition

--This object is provided as a test.

--This HyperFun program consists of one geometric object:
--union of superellipsoid, torus and soft object 

--Below two space paritions for attributes s[]
--First paritition
-- consisting in a union of blocks (5x5x5)
-- between blocks, attribute is a blue color
-- inside the block, attribute is a blue color
--Second parition
-- consisting in a torus

my_partition(x[3],a[1],s[3])
{
array xxt[3],center[3];

----------------
--first parition
 blocks = -1; --function value for the block partition
i=0;
j=0;
k=0;
dx = 3.35;  -- size of the bricks in x direction
dy = 3.35;  -- size of the bricks in y direction
dz = 3.35;  -- size of the bricks in z direction
NN = 5;     -- size of the grid of blocks: NNxNNxNN

  while (i<NN) loop     --loop along x axis
    j=0;
    while (j<NN) loop     --loop along y axis     
      k=0;
      while (k<NN) loop     --loop along z axis
        --definition of the block center
        center[1] = -10 + i*(4);
        center[2] = -6 + j*(4);         
        center[3] = -10 + k*(4); 	
        
        --union of the blocks
        blocks = blocks | hfBlock(x,center,dx,dy,dz);
        k =k+1;
      endloop;  
      j=j+1;
    endloop;
    i=i+1;
  endloop;
  --default color: mortar
  s[1] = 0.0;
  s[2] = 0.0;
  s[3] = 1.0;
  -- color of the briks
  if(blocks>=0.0) then
    s[1] = 1.0;
    s[2] = 0.0;
    s[3] = 0.0;
  endif;

----------------
--second parition
-- torus is a partition corresponding to the torus in the geometry model
-- torus is defined by library function: a bit larger than the one defined in my_object
  center = [0, -9, 0]; 
  torus = hfTorusY(x,center,3.5,1.2);

 if(torus > -0.01) then
    s[1] = hfA_Wave(x[1],0,1,1);
    s[2] = hfA_Wave(x[2],0.2,0.8,2);
    s[3] = 0.2;
  endif;
 
my_partition = blocks | torus;
}

my_model(x[3], a[1], s[3])
{
array x0[9], y0[9], z0[9], d[9], center[3];

x1=x[1];
x2=x[2];
x3=x[3];

-- superellipsoid by formula
superEll = 1-(x1/0.8)^4-(x2/10)^4-(x3/0.8)^4;

-- torus by library function
center = [0, -9, 0]; 
torus = hfTorusY(x,center,3.5,1);

-- soft object 
x0 = [2.,1.4, -1.4, -3, -3, 0, 2.5, 5., 6.5];
y0 = [8, 8, 8, 6.5, 5, 4.5, 3, 2, 1];
z0 = [0, -1.4,-1.4, 0, 3, 4, 2.5, 0, -1];
d = [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.7, 3];
sum = 0.;
i = 1;
while (i<10) loop 
     xt = x[1] - x0[i]; 
     yt = x[2] - y0[i]; 
     zt = x[3] - z0[i]; 
     r = sqrt(xt*xt+yt*yt+zt*zt);
     if (r <= d[i]) then 
          r2 = r*r; r4 = r2*r2; r6 = r4*r2; 
          d2 = d[i]^2; d4 = d2*d2; d6 = d4*d2; 
          sum = sum + (1 - 22*r2/(9*d2) + 17*r4/(9*d4) - 4*r6/(9*d6)); 
     endif; 
     i = i+1; 
endloop; 
soft = sum - 0.2; 

model =  superEll | torus | soft;

--define the space partition around this model and attributes obtained in s[] array
if ( model > -0.1) then
  tmpP = my_partition(x,a,s);
endif;

-- final geometry model with attributes returned in s[] array
my_model =model ; 
}
hyperfun/hf_sample.txt · Last modified: 2009/04/01 07:30 by ap
This site contains HyperFun and other software that is free to use and modify under the provisions of the CGPL agreement unless otherwise stated.
Project hosted by the Digital Materialization Group
HyperFun CGPL Creative Commons License Valid CSS