LgHS OpenSCAD Module

! Attention cette librairie n'est compatible qu'avec les Nightly Builds de OpenScad ! Librairie pour OpenSCAD apportant :

  • Nouvelles fonctions
  • Nouveaux modificateurs
  • Nouveaux objets 2D
  • Nouveaux objets 3D
  • Nouveaux objets hybrides

Le but est également de rendre accessible toutes les primitives 2D originelles ou de cette librairie accessibles sous forme de fonction et non plus seulement d'objet.

Par exemple :

square([20,10],center=true);

équivaut avec cette librairie à :

polygon(square([20,10],center=true));
Code Résultat
color([0.5,1,0.5,1]) square([10,15],center=true);

translate([15,0]) polygon( square([10,15],center=true) );

translate([30,0]) polygon(fractalize(square([10,15],center=true),maxit=3,force=0.5,seed=123 ));

translate([0,-20])  polygon(chaincurve(square([10,15],center=true),detail=3 ));

translate([15,-20]) polygon(chaincurve(koch(square([10,15],center=true),maxit=1),detail=2));

Dans le premier cas, nous faisons appel à un objet, dans le second à une fonction.
La différence principale vient de l'utilisation pouvant en être faite puisque l'appel à une fonction permet de lui appliquer des transformations directement sur les vecteurs composant la forme et non uniquement sur la forme en elle-même.

Date de début: 01/01/2019
Copyright: Marc Vanlindt © 2019 - marc at vanlindt dot com
Licence: GPL

Random

random(n,s,pos)

Cette fonction a pour but d'être plus simple à utiliser que la fonction présente nativement rands().

Variable Signification Type Utilité
n Nombre Nombre L'aléa ira de 0 à ce nombre.
s Seed Nombre Graine à utiliser pour créer l'aléa
pos Positif ? Booléen Si true ou non indiqué, l'aléa ira de 0 au nombre choisi. Si false, ira de -n à n

Exemple

Usage Sortie Type de sortie
echo(random(10,5)) 6.833 Nombre

Code de la fonction

function random(n,s,pos) = rands(pos==undef?0:pos==true?0:-n,n,1,s==undef?n:s)[0];

Fibonacci

fibonacci(n)

Cette fonction a pour but de donner la valeur voulue de la suie de Fibonacci.

Variable Signification Type Utilité
n Nombre Nombre Indique la valeur de la nème valeur de la suite de Fibonnaci

Exemple

Usage Sortie Type de sortie
for(i=[1:15]){
echo(fibonacci(i))
};
ECHO: 1
ECHO: 2
ECHO: 3
ECHO: 5
ECHO: 8
ECHO: 13
ECHO: 21
ECHO: 34
ECHO: 55
ECHO: 89
ECHO: 144
ECHO: 233
ECHO: 377
ECHO: 610
ECHO: 987
Nombre

Code de la fonction

function fibonacci(n,a=0,b=1,c=1) = c<n?fibonacci(a=b,b=a+b,c=c+1,n=n):a+b;

Hypo

hypo(a,b)

Fournit l'hypoténuse sur base de deux longueurs.

Variable Signification Type Utilité
a & b Nombre Nombre Indique les longueurs des deux côtés d'un triangle qui ne sont pas l'hypoténuse

Exemple

Usage Sortie Type de sortie
echo(hypo(3,4)); ECHO: 5 Nombre

Code de la fonction

function hypo(a,b) = sqrt((a*a)+(b*b));

Pair

pair(a)

Cette fonction indique si le nombre donné est pair ou impair.

Variable Signification Type Utilité
a & b Nombre Nombre Indique les longueurs des deux côtés d'un triangle qui ne sont pas l'hypoténuse

Exemple

Usage Sortie Type de sortie
echo(pair(3));
echo(pair(4));
ECHO: false
ECHO: true
Booléen

Code de la fonction

function pair(a) = a%2==0?true:false;

Sum

sum(a)

Cette fonction fournit la somme des valeurs contenues dans a.

Variable Signification Type Utilité
a Table Table Indique les valeurs devant être additionnées

Exemple

Usage Sortie Type de sortie
echo(sum([1,2,3,4])); ECHO: 10 Nombre

Code de la fonction

function sum(a,b=0,c=0) = b<len(a)?sum(a=a,b=b+1,c=c+a[b]):c;

ToPct

topct(a)

Cette fonction transforme les valeurs d'une table en le pourcentage qu'elles représentent dans cette table.

Variable Signification Type Utilité
a Table Table Indique les valeurs devant être traitées

Exemple

Usage Sortie Type de sortie
echo(topct([1,2,3])); ECHO: [0.1666667, 0.333333, 0.5] Table

Code de la fonction

function topct(a) = a/sum(a);

Middle

middle(a)

Cette fonction donne la moyenne des valeurs contenues dans une table.

Variable Signification Type Utilité
a Table Table Indique les valeurs devant être traitées

Exemple

Usage Sortie Type de sortie
echo(middle([1,2,3])); ECHO: 2 Nombre

Code de la fonction

function middle(a,b=0,c=0) = b<len(a)?sum(a=a,b=b+1,c=c+a[b])/len(a):c;

Invert

invert(a)

Cette fonction inverse une table.

Variable Signification Type Utilité
a Table Table Indique les valeurs devant être inversées

Exemple

Usage Sortie Type de sortie
echo(invert([1,2,3])); ECHO: [3,2,1] Table

Code de la fonction

function invert(a) = let(b=[for(i=[0:len(a)-1]) a[(len(a)-1)-i]])b;

Sort

sort(a,invert)

Cette fonction trie une table.

Variable Signification Type Utilité
a Table Table Indique les valeurs devant être triées
invert Inversion Booléen Inverse le sens du tri

Exemple

Usage Sortie Type de sortie
echo(sort([4,2,1,3]));
echo(sort([4,2,1,3],invert=true));
ECHO: [1,2,3,4]
ECHO: [4,3,2,1]
Table

Code de la fonction

function sort    (a,invert=false)  = len(a) == 0 ? [] : let ( 
      b=floor(len(a)/2), 
      c=[for(i=a) if (i<a[b]) i], 
      d=[for(i=a) if (i>a[b]) i], 
      e=[for(i=a) if (i==a[b]) i] 
    ) 
    invert==false?concat(sort(c),e,sort(d)):invert(concat(sort(c),e,sort(d)));

HypoVEC

hypovec(a,b)

Cette fonction donne l'hypoténuse sur base de deux coordonées.

Variable Signification Type Utilité
a & b Table Table Indique les coordonées

Exemple

Usage Sortie Type de sortie
echo(hypovec([0,0],[10,10])); ECHO: 14.14214 Nombre

Code de la fonction

function hypovec(a,b) = sqrt(((b[0]-a[0])*(b[0]-a[0]))+((b[1]-a[1])*(b[1]-a[1])));

Divide

divide(a,b,c)

Cette fonction divise un vecteur basé sur deux coordonnées et un diviseur.

Variable Signification Type Utilité
a & b Table Table Indique les coordonées
c Nombre Diviseur

Exemple

Usage Sortie Type de sortie
echo(divide([0,0],[10,10],1/3)); ECHO: [3.33333,3.33333] Table

Code de la fonction

function divide(a,b,c) = [a[0]+(b[0]-a[0])*c, a[1]+(b[1]-a[1])*c];

MyAngle

myangle(a,b)

Cette fonction fournit l'angle existant entre deux coordonnées.

Variable Signification Type Utilité
a & b Table Table Indique les coordonnées

Exemple

Usage Sortie Type de sortie
echo(myangle([0,0],[10,10])); ECHO: 45 Nombre

Code de la fonction

function myangle(a,b) = 90-atan2(b[0]-a[0],b[1]-a[1])*-1;

Join & Join2

join(a)

Dans une table composée d'autres tables : réunit tout en une seule table.
Join2 est beaucoup plus rapide mais ne fonctionne qu'avec les Nightly Builds de OpenSCAD.

Variable Signification Type Utilité
a Table Table Table devant voir ses données jointes

Exemple

Usage Sortie Type de sortie
echo(join([[[0,0],[10,10],[20,20]],[[30,30],[40,40],[50,50]],[[60,60],[70,70],[80,80]]]));
 ECHO: [[0, 0], [10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70], [80, 80]]
Table

Code de la fonction

function join(a,c=0,t=[]) = let (u=concat(t,a[c]))c==len(a)?t:join(a=a,c=c+1,t=u);
function join2(a) = [for(i=[0:len(a)-1] ) each a[i]];

Clean

clean(a)

Nettoie une table des doublons et valeurs indéfinies

Exemple

Usage Sortie Type de sortie
echo(clean([undef,[0,0],[10,10],[10,10],undef,[20,20]]));
 ECHO: [[0, 0], [10, 10], [20, 20]]
Table

Code de la fonction

function clean(a) = [for(i=[0:len(a)-1]) each (a[i]==a[i+1]?"":a[i][0]==undef?"":[a[i]])];