Home
- POV-Ray Tutorial
- Esempi per POV-Ray
Indice generale
- Geometria
- Architettura
- Tecnica
- Scala a Pioli
- Piloni e Tralicci
- Parapetto
- Ponte
- Tubi e Tubature
- Bifucazione di Tubi
- Rubinetto di Arresto
- Catena
- Bobina di filo
- Torpedo
- Cruise Missile
- Razzo, Missile
- Ruota
- Camion
- Elica
- Aeroplano
- Canoa
- Chitarra
- Display a 7 Segmenti
- Cavo piatto
- Fascio di cavi
|
|
Bifucazione di Tubi
Oggetti: isosurface, cylinder.
Metodi: #declare, #local, #macro, union, difference.
Una forma di base di una bifucazione di tubi
per collegare pipelines, per un rubinetto o per un rubinetto di arresto.
|
|
Consideriamo due isosurface di forma blob.
Le dimensioni per tutt'e due insieme:
#local R1 = 0.50; // raggio di tubo
#local R2 = 0.35; // raggio di sfera blob
#local Box_L = 4*R1; // misura di box container
#local Bloby = 0.15, // il fattore blob |
Dapprima un isosurface di forma tubo con blob sferico:
isosurface{ //-----------------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1)))
- pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2)))
} // end function
contained_by{
box{<-Box_L,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<0.45,1,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface -------------------------- |
|
Un isosurface di forma tubo con blob sferico.
|
Poi un isosurface di tubi incrociati:
isosurface{ //-----------------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1)))
- pow( Bloby,(sqrt(y*y+z*z)-(R2)))
} // end function
contained_by{
box{<-Box_L,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<1,0.7,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface -------------------------- |
|
Un isosurface di tubi incrociati.
|
|
Come si fa una Bifurcazione di Tubi:
Qui limitiamo ogni dei due container di isosurface à una metà adeguata.
Poi combiniamo le due parte usando "union".
union{
isosurface{ //-----------------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1)))
- pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2)))
} // end function
contained_by{
box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<0.45,1,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface 1 ------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1)))
- pow( Bloby,(sqrt(y*y+z*z)-(R2)))
} // end function
contained_by{
box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<1,0.7,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface 2 ------------------------
} // end of union |
|
Due isosurface divisi a metà.
Il isosurface della bifurcazione di tubi.
|
|
L'adattamento de la bifurcazione di tubi per collegare à tubi esterni:
Perche questi tipi di isosurface non ha il raggio R1 o altrimenti R2 ai fini dei container
dobbiamo aggiungere un valore di correzione à ogni raggio dei isosurface.
(Questo valore non é calculato preciso - usiamo qui il methodo di "tentativo e errore"!)
Note: Se cambiamo i raggi
dobbiamo anche adattare questo valore di correzione!
Per facilitare l'adattamento dei raggi dei isosurface aggiungiamo qualque cilindro di test.
#local Cor = 0.06; isosuface radius correction
#local Test_Cylinders_ON = 1; // 1 = on; 0 = off
//-----------------------------------------------
union{
isosurface{ //-----------------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1+Cor)))
- pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2+Cor)))
} // end function
contained_by{
box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<0.45,1,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface 1 ------------------------
function{ (1+Bloby)
- pow( Bloby,(sqrt(x*x+y*y)-(R1+Cor)))
- pow( Bloby,(sqrt(y*y+z*z)-(R2+Cor)))
} // end function
contained_by{
box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
texture{ pigment{ color rgb<1,0.7,0>}
finish { phong 1 reflection 0.10}}
} // end of isosurface 2 ------------------------
// ----------------------------------------------
#if(Test_Cylinders_ON=1)
union{ // test
cylinder{<0,0,Box_L>,<0,0,Box_L+0.5*R1>,R1}
cylinder{<0,0,-Box_L-0.5*R1>,<0,0,-Box_L>,R1}
cylinder{<Box_L,0,0>,<Box_L+0.5*R1,0,0>,R2}
texture{ pigment{ color rgb<1,0.7,0>} }
} // end of union 'test'
#end // of Test_Cylinders_ON
} // end of union ------------------------------- |
|
La bifurcazione di tubi con cilindri di test
|
|
Con scavare l'interno e riunire tutto in una macro
si completa la bifurcazione di tubi:
La macro "Tube_Fork_000":
//---------------------------------------------
#macro Tube_Fork_000 (
R1, // ~0.50,
R2, // ~0.35 ~0.65,
Tube_D, // ~0.05, tube material thickness
Bloby, // blob factor, // 0.1~0.002,
Cor, // radius correction,
Test_Cylinders_ON, // on = 1; off = 0,
) // ----------------------------------------
//---------------------------------------------
#local D = 0.0001; // just a little bit !!!
#local Box_L = 4*R1;
//---------------------------------------------
//------------- default textures --------------
#ifndef (Slide_Body_Texture)
#declare Slide_Body_Texture =
texture{ pigment{ color rgb<1,1,1>*0.85}
normal { bumps 0.05 scale 0.3005}
finish { phong 0.7 reflection 0.05}}
#end
#ifndef (Slide_Inside_Texture)
#declare Slide_Inside_Texture =
texture{ pigment{ color rgb<1,1,1>*0.7}}
#end
#ifndef (Test_Tube_Texture)
#declare Test_Tube_Texture =
texture { pigment { color rgb<0.7,0.3,1>}}
#end
//-----------....----------- main part --------
union{ // main union
#if(Test_Cylinders_ON=1)
union{ // 1
#end
difference{
union{
isosurface{ //--------------------------------
function{
(1+Bloby)
- pow( Bloby, ( sqrt(x*x+y*y)-(R1+Cor) ) )
- pow( Bloby,( sqrt( y*y+z*z)-(R2+Cor) ) )
}// end function
contained_by{
box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>} }
accuracy 0.001
max_gradient 7
} // end of isosurface -----------------------
isosurface{ //--------------------------------
function{
(1+Bloby)
- pow( Bloby, ( sqrt(x*x+y*y)-(R1+Cor) ) )
- pow( Bloby,( sqrt(y*y+z*z +x*x)-(R2+Cor) ) )
}// end function
contained_by{
box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
accuracy 0.001
max_gradient 7
} // end of isosurface -----------------------
texture{Slide_Body_Texture}
}// end of union
cylinder{ <0,0,-Box_L-D>,<0,0,Box_L+D>,R1-Tube_D
texture{ Slide_Inside_Texture }}
cylinder{ <0,0,0>,<Box_L+D,0,0>, R2-Tube_D
texture{ Slide_Inside_Texture }}
}//end of difference //
#if(Test_Cylinders_ON=1)
union{ // 'test'
cylinder{<0,0, Box_L>,<0,0,Box_L+0.5*R1>, R1}
cylinder{<0,0,-Box_L-0.5*R1>,<0,0,-Box_L>,R1}
cylinder{<Box_L,0,0>,<Box_L+0.5*R1,0,0>, R2}
texture { Test_Tube_Texture }}
}// end union 'test'
} // end union of '#if(Test_Cylinders_ON = 1)'
#end // Test_Cylinders_ON=1
// ---------
} // end union main
#end // -------------------------- end of macro |
E qui c'é un esempio tipico per come usare questa macro:
// -------------------------- optional textures
#declare Slide_Body_Texture =
texture{ pigment{ color rgb<0.75,1,0>}
finish { phong 1 reflection 0.1}}
#declare Slide_Inside_Texture =
texture{ pigment{ color rgb<0.3,0.7,0>*1.1}
finish { phong 1}}
#declare Test_Tube_Texture =
texture{ pigment { color rgb<1,0.7,0>}
} // end of texture
// ----------------------------------------------
object{
Tube_Fork_000 (
// total container box length = 4*R1
0.50, // R1, // main tube radius: 1 ~ 0.25
0.35, // R2, // side tube radius: 1.5 ~ 0.20
0.05, // Tube_D, // tube material thickness
0.15, // Blobfactor; // 0.1~0.002 ; max~0.2!!
0.06, // radius correction, ~ 0.06
0, // Test_cylinders_ON; on = 1; off = 0
) // ------------------------------------------
// rotate <0,0,90>
translate <0,0,0>
} // -------------------------------------------- |
|
La macro Tube_Fork_000.
La macro Tube_Fork_000
con R1 = 0.35, R2 = 0.50,
e rotate<0,0,90>.
Per scaricare questa forma come un oggetto pronto per l'uso per POV-Ray
in un include file con macro e per file esempi vede qui:
Pagina Oggetti POV-Ray - Tubi e Tubature con flangie
|
.
|