-
Notifications
You must be signed in to change notification settings - Fork 3
/
circonvolutions.jscad
60 lines (56 loc) · 1.83 KB
/
circonvolutions.jscad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// GENERATEUR PARAMETRIQUE DE CIRCONVOLUTIONS
// Gilbert Duval 2016-10-16
//-----------------------------------------------
// Le modèle est fourni par l'éditeur de chemins
// --> http://gilboo.carton.free.fr/OPSPED/
function getParameterDefinitions() {
return [
{ name: 'modele', type: 'text', initial: 'polygon([[0,16],[8,16],[16,0],[16,-8],[0,-16],[-8,-16],[-16,0],[-16,8]]);', caption: "Modèle:" }
,{ name: 'nombre', type: 'int', initial: 5, caption: "Nombre:" }
,{ name: 'epaisseur', type: 'float', initial: 0.2, caption: "Epaisseur:" }
,{ name: 'decalage', type: 'float', initial: 0.1, caption: "Espace:" }
];
}
// gilboo.js
function faitPoly(ch){
var i, sr, pts = [];
sr = ch.match(/\[(\-?\d*\.?\d*,\-?\d*\.?\d*)\]/g);
if(sr !== null){
for(i in sr){
if( sr[i] !== ''){
sr[i] = sr[i].replace(/\]/g, "").replace(/\[/g, "");
pp = sr[i].split(',');
if(pp.length == 2){
pts.push([pp[0], pp[1]]);
//console.log('['+pp[0]+","+pp[1]+']');
}
}
}
}
return pts;
}
function main(params){
var sp, spp, i, ch, sr, j, P, R;
sp = params.modele.split(";");
spp= [];
for(i in sp){
ch = sp[i];
if(ch !== ''){
sr = ch.match(/\/\*.*?\*\//g);
if(sr !== null){
for(j in sr){
ch = ch.replace(sr[j], "");
}
if (ch !== '')
spp.push(ch);
} else
spp.push(ch);
}
}
P = CAG.fromPoints(faitPoly(spp[0]));
R = [];
for(i = 1; i< 1+params.nombre*(params.epaisseur+params.decalage); i+= params.epaisseur+params.decalage){
R.push(P.scale(i).subtract(P.scale(i-params.epaisseur)));
}
return union(R);
}