Normand Briere
2019-04-23 ec9d13e42c9c8674739acefb0769a9273a1048c9
BoundaryRep.java
....@@ -15,7 +15,7 @@
1515 {
1616 this(0, 0);
1717 }
18
-
18
+
1919 void SaveSupports()
2020 {
2121 transientsupport = support;
....@@ -172,16 +172,16 @@
172172 bufV = other.bufV;
173173 bufF = other.bufF;
174174
175
- positions = (float[]) GraphreeD.clone(other.positions);
176
- normals = (float[]) GraphreeD.clone(other.normals);
177
- colors = (float[]) GraphreeD.clone(other.colors);
178
- uvmap = (float[]) GraphreeD.clone(other.uvmap);
179
- triangles = (int[]) GraphreeD.clone(other.triangles);
175
+ positions = (float[]) GrafreeD.clone(other.positions);
176
+ normals = (float[]) GrafreeD.clone(other.normals);
177
+ colors = (float[]) GrafreeD.clone(other.colors);
178
+ uvmap = (float[]) GrafreeD.clone(other.uvmap);
179
+ triangles = (int[]) GrafreeD.clone(other.triangles);
180180
181
- indices = (int[]) GraphreeD.clone(other.indices);
181
+ indices = (int[]) GrafreeD.clone(other.indices);
182182
183
- vertices = (Vector<Vertex>) GraphreeD.clone(other.vertices);
184
- faces = (Vector<Face>) GraphreeD.clone(other.faces);
183
+ vertices = (Vector<Vertex>) GrafreeD.clone(other.vertices);
184
+ faces = (Vector<Face>) GrafreeD.clone(other.faces);
185185 }
186186 else
187187 {
....@@ -497,10 +497,10 @@
497497 return dist2;
498498 }
499499
500
- static Vertex vertextemp = new Vertex();
501
- static Vertex vertextemp2 = new Vertex();
500
+ static Vertex vertextemp = new Vertex(true);
501
+ static Vertex vertextemp2 = new Vertex(true);
502502
503
- static double SEUIL = 0.1; // 0.1 for rag doll; 0.07;
503
+ static double SEUIL = 0.1f; // 0.1 for rag doll; 0.07;
504504
505505 // Compute weight of point w/r to this
506506 float ComputeWeight(Vertex v, double[][] toRoot, int k)
....@@ -570,8 +570,10 @@
570570
571571 if (dot > distmax)
572572 dot = distmax;
573
+ //return 0; // patch for strange behavior
573574 if (dot < -distmax)
574575 dot = -distmax;
576
+ //return 0; // patch for strange behavior
575577
576578 // v3 = GetVertex(this.startvertices[subsupport] + 16);
577579 //
....@@ -609,10 +611,12 @@
609611
610612 float dist2 = (float)Distance2(v, v2, 1E10, toRoot, k);
611613
612
- if (dist2 >= 2 * SEUIL*SEUIL) // && !CameraPane.CROWD) // weightmode
614
+ double seuil = SEUIL * 2;
615
+
616
+ if (dist2 >= 2 * seuil*seuil) // && !CameraPane.CROWD) // weightmode
613617 return 0;
614618
615
- dist2 /= 2 * SEUIL*SEUIL; // multiplied by two because center of support
619
+ dist2 /= 2 * seuil*seuil; // multiplied by two because center of support
616620 // could be far from closest point
617621
618622 // dist2 = Math.pow(dist2, 2);
....@@ -786,7 +790,7 @@
786790 v.weights[k] = other.ComputeWeight(v, toRoot, k); // (float)(supportsize * normalweight * nz / Math.pow(tx*tx+ty*ty+tz*tz, 1));
787791 v.totalweight += v.weights[k];
788792
789
- if (CameraPane.CROWD)
793
+ if (Globals.CROWD)
790794 {
791795 // System.out.print("weight = " + v.weights[k]);
792796 // System.out.println("; totalweight = " + v.totalweight);
....@@ -946,7 +950,7 @@
946950
947951 int nbsupports;
948952
949
- SEUIL = 0.1; // aout 2013
953
+ // sept 2017 SEUIL = 0.1; // aout 2013
950954
951955 supports = InitConnections(other);
952956
....@@ -982,7 +986,7 @@
982986
983987 int subsupports = 0;
984988
985
- SEUIL = 0.1; // aout 2013
989
+ // sept 2017 SEUIL = 0.1; // aout 2013
986990
987991 while (subsupports == 0)
988992 {
....@@ -1006,6 +1010,26 @@
10061010
10071011 vect.set(v);
10081012 vect.sub(vect2);
1013
+
1014
+// vertextemp.x = other.averagepoints[c*3];
1015
+// vertextemp.y = other.averagepoints[c*3+1];
1016
+// vertextemp.z = other.averagepoints[c*3+2];
1017
+//
1018
+// Vertex v3 = vertextemp2;
1019
+// v3.x = other.extremepoints[c*3];
1020
+// v3.y = other.extremepoints[c*3+1];
1021
+// v3.z = other.extremepoints[c*3+2];
1022
+//
1023
+// vect3.set(v3); // "X" axis apex
1024
+// vect3.sub(vertextemp); // origin (center)
1025
+//
1026
+// double distmax = vect3.length();
1027
+//
1028
+// vect3.set(v2); // "X" axis apex
1029
+// vect3.sub(vertextemp); // origin (center)
1030
+//
1031
+// if (vect3.length() >= distmax)
1032
+// continue;
10091033
10101034 if (mindistance > vect.dot(vect))
10111035 {
....@@ -1017,7 +1041,9 @@
10171041
10181042 subsupports = v.closestsupport==-1 ? 0 : supports[v.closestsupport].Length();
10191043
1020
- SEUIL *= 2;
1044
+ // previously for "contains", now for weights.
1045
+ assert(subsupports > 0);
1046
+ //SEUIL *= 2;
10211047 }
10221048
10231049 assert(subsupports > 0);
....@@ -1492,7 +1518,7 @@
14921518 InitFaceIndices();
14931519 }
14941520
1495
- BoundaryRep rep = (BoundaryRep) GraphreeD.clone(this);
1521
+ BoundaryRep rep = (BoundaryRep) GrafreeD.clone(this);
14961522 //float[] v = new float[100];
14971523
14981524 for (int loops=1; --loops>=0;)
....@@ -1522,7 +1548,7 @@
15221548 InitFaceIndices();
15231549 }
15241550
1525
- BoundaryRep rep = (BoundaryRep) GraphreeD.clone(this);
1551
+ BoundaryRep rep = (BoundaryRep) GrafreeD.clone(this);
15261552 //float[] v = new float[100];
15271553
15281554 for (int loops=10; --loops>=0;)
....@@ -2163,7 +2189,7 @@
21632189 // if (slow)
21642190 // aout 2013
21652191 // sept 2013 merde...
2166
- W = 13;
2192
+ W = 3; // 13;
21672193
21682194 // POSERATE
21692195 if (CameraPane.tickcount > 0 || CameraPane.SLOWPOSE)
....@@ -2600,7 +2626,7 @@
26002626 // if (stepout && !playedonce)
26012627 // {
26022628 // // sound
2603
-// GraphreeD.wav.play();
2629
+// GrafreeD.wav.play();
26042630 // playedonce = true;
26052631 // }
26062632 //
....@@ -2635,18 +2661,18 @@
26352661 if (false) // slow && stepout && onein)
26362662 {
26372663 // sound
2638
- cVector eye = CameraPane.theRenderer.eyeCamera.location;
2664
+ cVector eye = Globals.theRenderer.EyeCamera().location;
26392665
26402666 Vertex v = GetVertex(0);
26412667
26422668 tmp.set(v);
26432669 tmp.sub(eye);
26442670
2645
- if (CameraPane.framecount - lastsoundtime > 30) // 0.25 secs
2671
+ if (Globals.framecount - lastsoundtime > 30) // 0.25 secs
26462672 {
2647
- GraphreeD.wav.play((Math.random()+0.5)/Math.max(tmp.length2(),0.2)); //, 1);
2673
+ GrafreeD.wav.play((Math.random()+0.5)/Math.max(tmp.length2(),0.2)); //, 1);
26482674
2649
- lastsoundtime = CameraPane.framecount;
2675
+ lastsoundtime = Globals.framecount;
26502676 }
26512677
26522678 stepout = false;
....@@ -3229,7 +3255,7 @@
32293255 k /= x*x + y*y;
32303256 }
32313257 else
3232
- GraphreeD.Assert(z == 1);
3258
+ GrafreeD.Assert(z == 1);
32333259
32343260 if (k < 0)
32353261 k = 0;
....@@ -3531,7 +3557,7 @@
35313557 e.printStackTrace();
35323558 }
35333559
3534
- Trim(wastrim,true,crease,wasstrip,false);
3560
+ Trim(true/*wastrim*/,true,crease,wasstrip,false);
35353561 }
35363562
35373563 void GenNormalsJME()
....@@ -3776,10 +3802,19 @@
37763802 for (int i = 0; i < VertexCount(); i++)
37773803 {
37783804 Vertex v = GetVertex(i);
3805
+
3806
+ vertextemp.set(v);
3807
+
37793808 //if (v.norm.x == 0 && v.norm.y == 0 && v.norm.z == 0)
37803809 {
3781
- GenerateNormal(i, v);
3782
- SetVertex(v, i);
3810
+ if (!GenerateNormal(i, vertextemp))
3811
+ continue;
3812
+
3813
+ if (v.norm.dot(vertextemp.norm) < 0)
3814
+ vertextemp.norm.mul(-1);
3815
+
3816
+ if (v.norm.dot(vertextemp.norm) < 0.9)
3817
+ SetVertex(vertextemp, i);
37833818 }
37843819 }
37853820
....@@ -3790,7 +3825,7 @@
37903825 static cVector temp2 = new cVector();
37913826 static cVector temp3 = new cVector();
37923827
3793
- void GenerateNormal(int index, Vertex v)
3828
+ boolean GenerateNormal(int index, Vertex v)
37943829 {
37953830 //System.out.println("Old normal = " + v.norm);
37963831 LA.setVector(v.norm, 0, 0, 0);
....@@ -3819,6 +3854,10 @@
38193854 LA.vecSub(p/*.pos*/, v/*.pos*/, temp1);
38203855 LA.vecSub(q/*.pos*/, v/*.pos*/, temp2);
38213856 }
3857
+ else
3858
+ {
3859
+ continue;
3860
+ }
38223861
38233862 //LA.vecNormalize(temp1);
38243863 //LA.vecNormalize(temp2);
....@@ -3829,17 +3868,25 @@
38293868 double s = temp3.length();
38303869 //double c = temp2.dot(temp1);
38313870
3871
+ if (s == 0)
3872
+ return false;
3873
+
38323874 float angle = 1; // (float) Math.atan2(s, c);
38333875 //if(angle < 0) angle = -angle;
38343876
38353877 //LA.vecNormalize(temp3);
38363878 LA.vecScale(temp3, angle / s);
38373879
3880
+// if (temp3.dot(v.norm) < 0)
3881
+// assert(temp3.dot(v.norm) >= 0);
3882
+
38383883 LA.vecAdd(temp3, v.norm, v.norm);
38393884 }
38403885
38413886 LA.vecNormalize(v.norm);
38423887 //System.out.println("New normal = " + v.norm);
3888
+
3889
+ return true;
38433890 }
38443891
38453892 double Arccos(double x)
....@@ -4233,7 +4280,7 @@
42334280 int count = VertexCount();
42344281
42354282 // mars 2014
4236
- while (step >= count)
4283
+ while (step > count)
42374284 step /= 10;
42384285
42394286 for (int i = 0; i < count; i+=step)
....@@ -4381,7 +4428,7 @@
43814428 }
43824429 }
43834430
4384
- void CullVertex(javax.media.opengl.GL gl, boolean shadow)
4431
+ void CullVertex(javax.media.opengl.GL glNOTUSED, boolean shadowNOTUSED)
43854432 {
43864433 CameraPane.glu.gluProject(vect5.x,vect5.y,vect5.z,
43874434 CameraPane.tempmat,0, CameraPane.tempmat2,0,
....@@ -4413,14 +4460,14 @@
44134460 // june 2014
44144461 // Camera parentcam = cam;
44154462 //
4416
-// if (cam == CameraPane.theRenderer.cameras[0])
4463
+// if (cam == Globals.theRenderer.cameras[0])
44174464 // {
4418
-// parentcam = CameraPane.theRenderer.cameras[1];
4465
+// parentcam = Globals.theRenderer.cameras[1];
44194466 // }
44204467 //
4421
-// if (cam == CameraPane.theRenderer.cameras[1])
4468
+// if (cam == Globals.theRenderer.cameras[1])
44224469 // {
4423
-// parentcam = CameraPane.theRenderer.cameras[0];
4470
+// parentcam = Globals.theRenderer.cameras[0];
44244471 // }
44254472
44264473 gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, CameraPane.tempmat, 0);
....@@ -4846,7 +4893,7 @@
48464893 return verticesCopy;
48474894 }
48484895
4849
- void PreprocessOcclusion(CameraPane cp, double[][] transform)
4896
+ void PreprocessOcclusion(iCameraPane cp, double[][] transform)
48504897 {
48514898 if (//!trimmed ||
48524899 AOdone)
....@@ -4855,80 +4902,7 @@
48554902 return;
48564903 }
48574904
4858
- Camera keep = cp.renderCamera;
4859
- cp.renderCamera = localcamera;
4860
-
4861
- if (trimmed)
4862
- {
4863
- float[] colors = new float[positions.length / 3];
4864
-
4865
- int i3 = 0;
4866
- for (int i = 0; i < positions.length / 3; i++, i3 += 3)
4867
- {
4868
- if (normals[i3] == 0 && normals[i3+1] == 0 && normals[i3+2] == 0)
4869
- continue;
4870
-
4871
- from.set(positions[i3], positions[i3 + 1], positions[i3 + 2]);
4872
- to.set(positions[i3] + normals[i3],
4873
- positions[i3 + 1] + normals[i3 + 1],
4874
- positions[i3 + 2] + normals[i3 + 2]);
4875
- LA.xformPos(from, transform, from);
4876
- LA.xformPos(to, transform, to); // RIGID ONLY
4877
- localcamera.setAim(from, to);
4878
-
4879
- CameraPane.occlusionbuffer.display();
4880
-
4881
- if (CameraPane.DEBUG_OCCLUSION)
4882
- cp.display(); // debug
4883
-
4884
- colors[i] = cp.vertexOcclusion.r;
4885
- //colors[i3 + 1] = cp.vertexOcclusion.g;
4886
- //colors[i3 + 2] = cp.vertexOcclusion.b;
4887
-
4888
- if ((i % 1000) == 0 && i != 0)
4889
- {
4890
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
4891
- //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done");
4892
- System.out.println((int) (100.0 * i / (positions.length / 3)) + "% (" + i + " of " + (positions.length / 3) + ")");
4893
- }
4894
- }
4895
-
4896
- this.colors = colors;
4897
- }
4898
- else
4899
- {
4900
- for (int i = 0; i < VertexCount(); i++)
4901
- {
4902
- Vertex v = GetVertex(i);
4903
-
4904
- if (v.norm.x == 0 && v.norm.y == 0 && v.norm.z == 0)
4905
- continue;
4906
-
4907
- from.set(v.x, v.y, v.z);
4908
- to.set(v.x+v.norm.x, v.y+v.norm.y, v.z+v.norm.z);
4909
- LA.xformPos(from, transform, from);
4910
- LA.xformPos(to, transform, to); // RIGID ONLY
4911
- localcamera.setAim(from, to);
4912
-
4913
- CameraPane.occlusionbuffer.display();
4914
-
4915
- if (CameraPane.DEBUG_OCCLUSION)
4916
- cp.display(); // debug
4917
-
4918
- v.AO = cp.vertexOcclusion.r;
4919
-
4920
- if ((i % 1000) == 0 && i != 0)
4921
- {
4922
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
4923
- //System.out.println("Color = " + cp.vertexOcclusion.r + ", " + cp.vertexOcclusion.g + ", " + cp.vertexOcclusion.b + "; " + (int)(100.0*i/(positions.length/3)) + "% done");
4924
- System.out.println((int) (100.0 * i / VertexCount()) + "% (" + i + " of " + VertexCount() + ")");
4925
- }
4926
- }
4927
- }
4928
-
4929
- System.out.println("done.");
4930
-
4931
- cp.renderCamera = keep;
4905
+ cp.PrepOcclusion(this, transform);
49324906
49334907 AOdone = true;
49344908 }
....@@ -5036,6 +5010,59 @@
50365010 }
50375011 }
50385012 colors = null;
5013
+ }
5014
+
5015
+ void CreateMesh(iHeightField hf, int x, int y)
5016
+ {
5017
+ BoundaryRep tmp = new BoundaryRep();
5018
+
5019
+ int vc = 0;
5020
+
5021
+ Vertex v = new Vertex(true);
5022
+
5023
+ for (int i=0; i<x; i++)
5024
+ {
5025
+ for (int j=0; j<y; j++)
5026
+ {
5027
+// Vertex v = tmp.GetVertex(vc++);
5028
+
5029
+ v.s = v.x = i;
5030
+ v.t = v.z = j;
5031
+ v.s /= x; v.t /= y;
5032
+ v.y = hf.f(i,j);
5033
+
5034
+ int iu = tmp.AddTableVertex(v);
5035
+
5036
+ v.s = v.x = i+1;
5037
+ v.t = v.z = j;
5038
+ v.s /= x; v.t /= y;
5039
+ v.y = hf.f(i+1,j);
5040
+
5041
+ int iv = tmp.AddTableVertex(v);
5042
+
5043
+ v.s = v.x = i+1;
5044
+ v.t = v.z = j+1;
5045
+ v.s /= x; v.t /= y;
5046
+ v.y = hf.f(i+1,j+1);
5047
+
5048
+ int iw = tmp.AddTableVertex(v);
5049
+
5050
+ v.s = v.x = i;
5051
+ v.t = v.z = j+1;
5052
+ v.s /= x; v.t /= y;
5053
+ v.y = hf.f(i,j+1);
5054
+
5055
+ int ix = tmp.AddTableVertex(v);
5056
+
5057
+ tmp.AddFace(iu,iw,iv);
5058
+ tmp.AddFace(iu,ix,iw);
5059
+ }
5060
+ }
5061
+
5062
+ Set(tmp);
5063
+
5064
+ Trim(true,false,true);
5065
+ ClearColors();
50395066 }
50405067
50415068 void Stripify()
....@@ -5297,18 +5324,10 @@
52975324 double minweight = 1E10;
52985325
52995326 nbbadfaces = 0;
5300
- for (int i=faces.size(); (i-=8)>=0;)
5327
+ for (int i=0; i<faces.size(); i+=8)
5328
+// for (int i=faces.size(); (i-=8)>=0;)
53015329 {
53025330 Face face = (Face) faces.get(i);
5303
-
5304
- //?? if (face.weight < 0)
5305
- // continue;
5306
-
5307
- double K = 1; // 0.01; // .25;
5308
-
5309
- double factor = (1-K)*face.nbiterations + K; //*face.weight;
5310
-
5311
- double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor;
53125331
53135332 if (!Valid(face))
53145333 {
....@@ -5327,10 +5346,21 @@
53275346 !ValidValence(face.r))
53285347 continue;
53295348
5349
+ //?? if (face.weight < 0)
5350
+ // continue;
5351
+
5352
+ double K = 1; // 0.01; // .25;
5353
+
5354
+ double factor = (1-K)*face.nbiterations + K; //*face.weight;
5355
+
5356
+ double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor;
5357
+
53305358 if (minweight > weight)
53315359 {
53325360 minweight = weight;
53335361 chosen = i;
5362
+ if (minweight == 0)
5363
+ break;
53345364 }
53355365 }
53365366
....@@ -7019,6 +7049,7 @@
70197049 assert(f2.contains(i));
70207050 assert(f3.contains(i));
70217051
7052
+ // when r is the "center", p is along the boundary
70227053 while (f0.r != i)
70237054 {
70247055 int t = f0.p;
....@@ -7075,59 +7106,90 @@
70757106 f0 = f3;
70767107 f3 = t;
70777108 }
7078
- atleastone = true;
70797109
7110
+ int va = f0.q;
7111
+ int vb = f0.r;
7112
+ int vc = -1;
7113
+
7114
+ Face toremove1 = null;
7115
+ Face toremove2 = null;
7116
+
7117
+ // f0 is the buffer for the first new triangle,
7118
+ // and otherf is the other upper one.
70807119 Face otherf = null;
70817120
70827121 if (f1.contains(f0.p))
70837122 {
70847123 if (f1.p == f0.p)
70857124 {
7125
+ assert(false);
70867126 f0.r = f1.q;
70877127 }
70887128 else
70897129 {
70907130 assert(f1.q == f0.p);
7091
- f0.r = f1.p;
7131
+ vc = f1.p;
70927132 }
70937133
70947134 otherf = f2;
7095
- faces.remove(f1);
7096
- faces.remove(f3);
7135
+ toremove1 = f1;
7136
+ toremove2 = f3;
70977137 }
70987138 else
70997139 if (f2.contains(f0.p))
71007140 {
71017141 if (f2.p == f0.p)
71027142 {
7143
+ assert(false);
71037144 f0.r = f2.q;
71047145 }
71057146 else
71067147 {
71077148 assert(f2.q == f0.p);
7108
- f0.r = f2.p;
7149
+ vc = f2.p;
71097150 }
71107151
71117152 otherf = f3;
7112
- faces.remove(f1);
7113
- faces.remove(f2);
7153
+ toremove1 = f1;
7154
+ toremove2 = f2;
71147155 }
71157156 if (f3.contains(f0.p))
71167157 {
71177158 if (f3.p == f0.p)
71187159 {
7160
+// assert(false);
7161
+ new Exception().printStackTrace();
71197162 f0.r = f3.q;
71207163 }
71217164 else
71227165 {
71237166 assert(f3.q == f0.p);
7124
- f0.r = f3.p;
7167
+ vc = f3.p;
71257168 }
71267169
71277170 otherf = f1;
7128
- faces.remove(f2);
7129
- faces.remove(f3);
7171
+ toremove1 = f2;
7172
+ toremove2 = f3;
71307173 }
7174
+
7175
+ vertextemp.set(vertices.get(va));
7176
+ vertextemp.sub(vertices.get(vb));
7177
+ vertextemp.normalize();
7178
+ vertextemp2.set(vertices.get(vc));
7179
+ vertextemp2.sub(vertices.get(vb));
7180
+ vertextemp2.normalize();
7181
+
7182
+ if (vertextemp.dot(vertextemp2) > -0.95)
7183
+ {
7184
+ continue;
7185
+ }
7186
+
7187
+ atleastone = true;
7188
+
7189
+ f0.r = vc;
7190
+
7191
+ faces.remove(toremove1);
7192
+ faces.remove(toremove2);
71317193
71327194 if (!f0.contains(otherf.p))
71337195 {
....@@ -7335,7 +7397,7 @@
73357397 Trim();
73367398 Untrim();
73377399
7338
- BoundaryRep tmp = new BoundaryRep(); // (BoundaryRep) GraphreeD.clone(this);
7400
+ BoundaryRep tmp = new BoundaryRep(); // (BoundaryRep) GrafreeD.clone(this);
73397401
73407402 double minx = Float.POSITIVE_INFINITY;
73417403 double maxx = Float.NEGATIVE_INFINITY;
....@@ -7373,7 +7435,7 @@
73737435 if (max < maxz - minz)
73747436 max = maxz - minz;
73757437
7376
- tmp.THRESHOLD = max/25; // 50;
7438
+ tmp.THRESHOLD = 0.5; // max/25; // 50;
73777439
73787440 tmp.faces.clear();
73797441
....@@ -7498,7 +7560,7 @@
74987560 s3 = new cVector();
74997561 }
75007562
7501
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
7563
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
75027564
75037565 try
75047566 {
....@@ -7593,7 +7655,7 @@
75937655 {
75947656 if (i++%100 == 0)
75957657 {
7596
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
7658
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
75977659 System.out.println("#faces = " + faces.size());
75987660 // if (i != 1)
75997661 // break;
....@@ -7637,7 +7699,7 @@
76377699 //Trim(true,cJME.gennormals,true,false); // doesn't work
76387700 Trim(true,false,false,false,false);
76397701
7640
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
7702
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
76417703 }
76427704
76437705 void UpdateIndices(Face face, Face minface)
....@@ -7932,6 +7994,8 @@
79327994
79337995 minface.q = minface.r = minface.p;
79347996
7997
+ int count = 0;
7998
+
79357999 for (int i=0; i<faces.size(); i++)
79368000 {
79378001 Face face = (Face) faces.get(i);
....@@ -7943,6 +8007,9 @@
79438007 TouchVertex(face.r, true); // , minface.weight);
79448008 // assert(!lock);
79458009 faces.remove(i--);
8010
+ count++;
8011
+ if (count == 4)
8012
+ break;
79468013 }
79478014 }
79488015
....@@ -8006,7 +8073,7 @@
80068073 if (!trimmed)
80078074 return;
80088075
8009
- GraphreeD.linkUV = false;
8076
+ GrafreeD.linkUV = false;
80108077
80118078 try
80128079 {
....@@ -8214,9 +8281,6 @@
82148281 return "trim = " + trimmed + "; stripped = " + stripified + "; colors = " + colors + "; faces = " + (faces!=null?faces.size():null) + "; triangles = " + (triangles!=null?triangles.length:null) + "; indices = " + indices;
82158282 }
82168283
8217
- static Camera localcamera = new Camera();
8218
- static cVector from = new cVector();
8219
- static cVector to = new cVector();
82208284 boolean trimmed = false;
82218285 boolean stripified = false;
82228286 transient boolean AOdone = false;
....@@ -8224,8 +8288,10 @@
82248288 /*transient*/ int maxIndexV = 0;
82258289 /*transient*/ int bufV, bufF;
82268290 // Raw version
8227
- private float[] positions;
8228
- private float[] normals;
8291
+ //private
8292
+ float[] positions;
8293
+ //private
8294
+ float[] normals;
82298295 float[] colors;
82308296 private float[] uvmap;
82318297 private int[] triangles;