*/
/*
* ./output-64 <dense-64.cfm 0.1 50 >t.stl
+ * ./output-125 <best-125.cfm >t.stl 0.1 50
* meshlab t.stl
*/
/*
const OutVertex *b, const OutVertex *c);
typedef int int_map(int);
-static int defs_aroundmap_swap(int around) { return NDEF-around; }
+static int defs_aroundmap_swap(int around) { return NDEF-1-around; }
static int int_identity_function(int i) { return i; }
static void normalise_thick(double a[D3]) {
static void compute_outvertices(void) {
int v0,k,side,ab,x,y;
- FOR_VERTEX(v0) {
+ FOR_VERTEX(v0, INNER) {
for (ab=0; ab<2; ab++) {
int v1= EDGE_END2(v0, ab?5:0);
int v2= EDGE_END2(v0, ab?0:1);
K Ok(ovAB[v0][ab][1], centroid[k] - normal[k]);
}
}
- FOR_VERTEX(v0) {
+ FOR_VERTEX(v0, INNER) {
int vw= EDGE_END2(v0,3);
int vnw= EDGE_END2(v0,2);
int vsw= EDGE_END2(v0,4);
K Ok(ovC[v0][side], in[v0][k] + adjust[k]);
}
}
- FOR_RIM_VERTEX(y,x,v0) {
+ FOR_RIM_VERTEX(y,x,v0, INNER) {
double rim[D3], inner[D3], radius_cos[D3], radius_sin[D3];
int vback, vfwd, around;
sin(angle) * radius_sin[k]);
}
}
- FOR_RIM_VERTEX(y,x,v0) {
+ FOR_RIM_VERTEX(y,x,v0, INNER) {
int vfwd= EDGE_END2(v0,0);
assert(vfwd >= 0);
- int around;
- for (around=0; around<NG; around++) {
- K Ok(ovG[x][!!y][around],
- 0.5 * (ovDEF[ x ][!!y][around*2].p[k] +
- ovDEF[vfwd & XMASK][!!y][around*2].p[k]));
+ int aroung;
+ int_map *around_map= vertices_span_join_p(v0,vfwd)
+ ? defs_aroundmap_swap : int_identity_function;
+ for (aroung=0; aroung<NG; aroung++) {
+ K Ok(ovG[x][!!y][aroung],
+ 0.5 * (ovDEF[ x ][!! y ][aroung*2+1].p[k] +
+ ovDEF[vfwd & XMASK][!!(vfwd & ~XMASK)][around_map(aroung*2+1)].p[k]));
}
}
}
static void outfacets(void) {
int v0,e,side,aroung;
- FOR_VERTEX(v0) {
+ FOR_VERTEX(v0, INNER) {
OutVertex *defs=0, *defs1=0;
int rimy=-1;
int_map *defs1aroundmap= 0;
int v1= EDGE_END2(v0,0); assert(v1>=0);
gs= ovG [v0 & XMASK][rimy];
defs= ovDEF[v0 & XMASK][rimy];
- defs1= ovDEF[v1 & XMASK][rimy];
+ defs1= ovDEF[v1 & XMASK][!!(v1 & ~XMASK)];
defs1aroundmap= vertices_span_join_p(v0,v1)
? defs_aroundmap_swap : int_identity_function;
static void transform_outvertex_array(int n, OutVertex ovX[n]) {
int i, k;
- for (i=0; i<n; i++)
+ for (i=0; i<n; i++) {
+ ovX[i].p[0] *= -1;
+ ovX[i].p[1] *= -1;
K ovX[i].p[k] *= scale;
+ }
/*
* double min[D3]= thick;
* if (ovX[i].p[k] < min)