Page d'Accueil
- POV-Ray Tutorial
- Exemples POV-Ray
Table des matières
- Architecture
- Geometrie
- Technique
- Échelle
- Pylônes
- Garde-fou, Rambarde
- Pont
- Tuyaux
- Bifurcation de Tuyau
- Robinet d'Arrêt
- Chaîne
- Bobine de fil
- Torpedo
- Cruise Missile
- Missile
- Roue
- Camion
- Hélice
- Avion
- Canoë
- Guitare
- Afficheur 7 segments
- Câble plat - Nappe plat
- Harnais de câbles
|
|
Bifurcation de Tuyau
Objets : isosurface, cylinder.
Méthodes : #declare, #local, #macro, union, difference.
Une forme de base pour une bifurcation de tuyau
pour joindre des pipelines, pour un robinet ou pour un robinet d'arrêt..
|
|
Nous regardons deux isosurfaces ressemblant à blob.
Les dimensions pour le deux :
#local R1 = 0.50; // rayon de tuyau
#local R2 = 0.35; // rayon de la sphère blob
#local Box_L = 4*R1; // grandeur du box conteneur
#local Bloby = 0.15, // facteur blob |
Premièrement un isosurface en forme de tuyon avec un blob sphérique :
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 -------------------------- |
|
An isosurface tube with a spherical blob.
|
Puis un isosurface en forme de tuyaux croisés :
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 -------------------------- |
|
An isosurface of crossed tubes.
|
|
Comment peut on faire une Bifurcation de Tuyau :
Ici nous devons restreindre les conteneurs de tous les deux isosurfaces à la moitié correspondant.
Puis nous devons assembler les deux parties à l'aide de "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 |
|
Deux demi-isosurfaces.
L'union de isosurfaces d'une bifurcation de tuyau.
|
|
L'adaptation de la bifurcation de tuyau pour joindre de autres tuyaux :
Parce que cette façon de isosurfaces n'ont pas les rayons R1 respectivement R2 exactement
au bord de leurs conteneurs nous devons ajuter un valeur de correction aux rayons des isosurfaces.
(Ce valeur n'est pas calculé exactement - nous utilisons seulement la méthode de "tentative et erreur" !)
Note: Se vous changez le rayons
vous devez adapter ce valeur de correction !
Pour alléger l'adaptation le rayons du isosurface aux rayons de tuyaux externes, nous adjoindrons aussi quelques cylindres de 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 bifurcation de tuyau avec cylindres de test
|
|
Creuser l'intérieur et rassembler tous dans un macro
compléte la bifurcation de tuyau :
Le 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 |
Et ici un exemple typique pour comment utiliser ce 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>
} // -------------------------------------------- |
|
Le macro Tube_Fork_000.
Le macro Tube_Fork_000
avec R1 = 0.35, R2 = 0.50,
et rotate<0,0,90>.
Pour téléchargement de cette forme comme un Objet prêt à l'usage pour POV-Ray
dans un fichier include avec un macro
et pour fichiers d'exemples voyez ici
Page de Objets POV-Ray - Tuyaux
|
|