IceSL

IceSL est à la fois un modeleur 3D nécessitant l'écriture de scripts 

et un puissant outil pour préparer des impressions 3D (Slicer)

Les dimensions sont exprimées en mm

 

Vous pouvez télécharger le logiciel ICI

Documentation de IceSL

 

La modélisation ne se fait pas comme traditionnellement par l'intermédiaire d'une interface graphique, mais par l'écriture d'un script décrivant les géométries à créer.

Les scripts sont basés sur le langage LUA, une documentation du langage LUA est disponible ici ou ici en français

Le but est de décrire le model 3D puis de demander son affichage grâce a la commande emit()

Par exemple pour afficher une sphère de 10 mm de rayon on écrit : emit(sphere(10))

 

Les primitives de base

 

PrimitiveVersion centréeAlternatives
load(path) load_centered(path)  
sphere(r)    
cube(dx,dy,dz) ccube(dx,dy,dz) box(dx,dy,dz)
cone(r0,r1,h) ccone(r0,r1,h)  
cylinder(r,h) ccylinder(r,h)  
ocube(dx,dy,dz)    
cornerbox(dx,dy,dz)    

 

Créer un cube:

largeur = 10
dcube = ccube( largeur ) emit( dcube )

 

Créer une sphere

irayon = 7
dsphere = sphere( irayon )
emit( dsphere )

Extrusion Linéaire :

linear_extrude(dir, points)

 

exemple :

triangle = { v(-10,0), v(0,10), v(10,0) }   -- Variable contenant la liste des points 
dir = v(0,0,50)                             -- Vecteur de direction pour l'éxtrusion
emit( linear_extrude(dir, triangle) )       -- Extrusion linéaire 


Importer un tracé vectoriel SVG

 
svg_shapes = svg_ex('motif.svg',90)
for i,contour in pairs(svg_shapes) do
  emit(linear_extrude(v(0,0,1),contour:outline()), i)
end

 

Les transformations :

translate(dx,dy,dz)

rotate(angle,axis)

rotate(rx,ry,rz)

scale(sx, sy, sz)

mirror(normal)

 

Les operations Booléenne

union(s0,s1)

intersection(s0,s1)

difference(s0,s1)

 

Créer un Vase

hauteur = 10
diametreBas = 4
diametreHaut = 5
dcone = cone(diametreBas,diametreHaut,hauteur)
dcone2 = scale(0.8, 0.8, 0.8) * translate(0,0,3) * dcone
vase = difference(dcone ,dcone2)
emit(vase)

Autre operations

merge{ s0,...,sn }

flip(m)

convex_hull(shape)

dilate(mesh, factor)

erode(mesh, factor)


Chargement d'un fichier STL ou OBJ

merge_vertices(load_centered('fichier.stl')) 


Export en STL

dump(to_mesh(monObjet,0.2),'output.stl')

Distribution sur un objet

distribute(shape, density)

 

rayon = 7
dsphere = sphere( rayon )

s = distribute(dsphere, 0.01)
centroids = {} 
for i = 1,#s,1 do
    centroids[i] = translate(s[i][1]) * frame(s[i][2]) * sphere(s[i][3]) 
end
r = union(dsphere,merge(centroids))
emit(r)

 

Tweaks (interface graphique permetant de modifier un parametre)

ui_scalar(nom, par défaut, min, max)

Crée une barre de reglage pour définir de façon interactive une valeur entre min et max.
     nom: le nom de la barre coulissante
     par défaut: valeur par défaut
     min: valeur minimale
     max: valeur maximale

r = ui_scalar("Radius",10,1,20)
emit(sphere(r))

Distribution de formes (difference)

rayon = 7
dsphere    = sphere( rayon )
--emit( dsphere )
s = distribute(dsphere, 0.01)
centroids = {} 
for i = 1,#s,1 do
    centroids[i] = translate(s[i][1]) * frame(s[i][2]) * sphere(2.2*s[i][3]) 
end
r = difference(dsphere,merge(centroids))
emit(r)

Distribution de forme sur une face d'un cube

c= ccube(50 ,50,7)

s = distribute(c, -0.1)
centroids = {} 
for i = 1,#s,1 do
    if (s[i][1].z > 0) then 
	   centroids[i] = translate(s[i][1]) * frame(s[i][2]) * sphere(s[i][3]/0.7) 
    end 
end
m = merge(centroids)
emit(difference(c,m))

 

Boucle 

Nombre = math.floor(ui_scalar('Répetitions',1,2,150))
Longueur = ui_scalar('Longuer',1,20,100)
maForme = translate(Longueur/2,0,0) * cube(Longueur,1,1)
for i=1,Nombre-1 do 
  maForme = union(
         maForme,
         rotate(0,0,i*360/Nombre) * translate(Longueur/2,0,0) * cube(Longueur,1,1))
end
emit(maForme)

Fonctions Implicite

sphA = implicit(v(-30,-30,-30), v(30,30,30), [[
float perturb(vec3 p)
{
  return 5*abs(noise(p/7+7));
}
float distanceEstimator(vec3 p) 
{
  return 0.3*(max(sphere(p,25),-sphere(p,22)) + perturb(p));
}
]])
emit(sphA)

Enregistrer

Enregistrer

Enregistrer

Enregistrer

Enregistrer

Enregistrer

Enregistrer