Normand Briere
2015-04-12 89da025f40680d9cea46f2b0a7c8c6829a0d0451
Height fields.
3 files added
1 files deleted
12 files modified
695 ■■■■ changed files
BiparamEditor.java 4 ●●●● patch | view | raw | blame | history
BoundaryRep.java 85 ●●●● patch | view | raw | blame | history
CameraPane.java 22 ●●●●● patch | view | raw | blame | history
Checker.java 27 ●●●● patch | view | raw | blame | history
CheckerIG.java 26 ●●●●● patch | view | raw | blame | history
CheckerInterface.java 5 ●●●●● patch | view | raw | blame | history
GroupEditor.java 390 ●●●● patch | view | raw | blame | history
HeightField.java 26 ●●●●● patch | view | raw | blame | history
KDNode.java 2 ●●● patch | view | raw | blame | history
KDTree.java 4 ●●●● patch | view | raw | blame | history
Mocap.java 16 ●●●● patch | view | raw | blame | history
ObjEditor.java 2 ●●● patch | view | raw | blame | history
Object3D.java 61 ●●●● patch | view | raw | blame | history
ScriptNode.java 8 ●●●● patch | view | raw | blame | history
Texture.java 4 ●●●● patch | view | raw | blame | history
iHeightField.java 13 ●●●●● patch | view | raw | blame | history
BiparamEditor.java
....@@ -66,9 +66,9 @@
6666 */
6767 super.SetupUI2(oe);
6868
69
- uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 256+biparam.minUDivs, biparam.uDivs);
69
+ uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 1024+biparam.minUDivs, biparam.uDivs);
7070 Return();
71
- vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 256+biparam.minVDivs, biparam.vDivs);
71
+ vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 1024+biparam.minVDivs, biparam.vDivs);
7272 Return();
7373 // oe.aConstraints.gridwidth = 1;
7474 // oe.aConstraints.fill = GridBagConstraints.VERTICAL;
BoundaryRep.java
....@@ -3531,7 +3531,7 @@
35313531 e.printStackTrace();
35323532 }
35333533
3534
- Trim(wastrim,true,crease,wasstrip,false);
3534
+ Trim(true/*wastrim*/,true,crease,wasstrip,false);
35353535 }
35363536
35373537 void GenNormalsJME()
....@@ -5038,6 +5038,59 @@
50385038 colors = null;
50395039 }
50405040
5041
+ void CreateMesh(iHeightField hf, int x, int y)
5042
+ {
5043
+ BoundaryRep tmp = new BoundaryRep();
5044
+
5045
+ int vc = 0;
5046
+
5047
+ Vertex v = new Vertex(true);
5048
+
5049
+ for (int i=0; i<x; i++)
5050
+ {
5051
+ for (int j=0; j<y; j++)
5052
+ {
5053
+// Vertex v = tmp.GetVertex(vc++);
5054
+
5055
+ v.s = v.x = i;
5056
+ v.t = v.z = j;
5057
+ v.s /= x; v.t /= y;
5058
+ v.y = hf.f(i,j);
5059
+
5060
+ int iu = tmp.AddTableVertex(v);
5061
+
5062
+ v.s = v.x = i+1;
5063
+ v.t = v.z = j;
5064
+ v.s /= x; v.t /= y;
5065
+ v.y = hf.f(i+1,j);
5066
+
5067
+ int iv = tmp.AddTableVertex(v);
5068
+
5069
+ v.s = v.x = i+1;
5070
+ v.t = v.z = j+1;
5071
+ v.s /= x; v.t /= y;
5072
+ v.y = hf.f(i+1,j+1);
5073
+
5074
+ int iw = tmp.AddTableVertex(v);
5075
+
5076
+ v.s = v.x = i;
5077
+ v.t = v.z = j+1;
5078
+ v.s /= x; v.t /= y;
5079
+ v.y = hf.f(i,j+1);
5080
+
5081
+ int ix = tmp.AddTableVertex(v);
5082
+
5083
+ tmp.AddFace(iu,iw,iv);
5084
+ tmp.AddFace(iu,ix,iw);
5085
+ }
5086
+ }
5087
+
5088
+ Set(tmp);
5089
+
5090
+ Trim(true,false,true);
5091
+ ClearColors();
5092
+ }
5093
+
50415094 void Stripify()
50425095 {
50435096 if (stripified)
....@@ -5297,18 +5350,10 @@
52975350 double minweight = 1E10;
52985351
52995352 nbbadfaces = 0;
5300
- for (int i=faces.size(); (i-=8)>=0;)
5353
+ for (int i=0; i<faces.size(); i+=8)
5354
+// for (int i=faces.size(); (i-=8)>=0;)
53015355 {
53025356 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;
53125357
53135358 if (!Valid(face))
53145359 {
....@@ -5327,10 +5372,21 @@
53275372 !ValidValence(face.r))
53285373 continue;
53295374
5375
+ //?? if (face.weight < 0)
5376
+ // continue;
5377
+
5378
+ double K = 1; // 0.01; // .25;
5379
+
5380
+ double factor = (1-K)*face.nbiterations + K; //*face.weight;
5381
+
5382
+ double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor;
5383
+
53305384 if (minweight > weight)
53315385 {
53325386 minweight = weight;
53335387 chosen = i;
5388
+ if (minweight == 0)
5389
+ break;
53345390 }
53355391 }
53365392
....@@ -7373,7 +7429,7 @@
73737429 if (max < maxz - minz)
73747430 max = maxz - minz;
73757431
7376
- tmp.THRESHOLD = max/25; // 50;
7432
+ tmp.THRESHOLD = 0.5; // max/25; // 50;
73777433
73787434 tmp.faces.clear();
73797435
....@@ -7932,6 +7988,8 @@
79327988
79337989 minface.q = minface.r = minface.p;
79347990
7991
+ int count = 0;
7992
+
79357993 for (int i=0; i<faces.size(); i++)
79367994 {
79377995 Face face = (Face) faces.get(i);
....@@ -7943,6 +8001,9 @@
79438001 TouchVertex(face.r, true); // , minface.weight);
79448002 // assert(!lock);
79458003 faces.remove(i--);
8004
+ count++;
8005
+ if (count == 4)
8006
+ break;
79468007 }
79478008 }
79488009
CameraPane.java
....@@ -768,6 +768,8 @@
768768 class CacheTexture
769769 {
770770 com.sun.opengl.util.texture.Texture texture;
771
+ com.sun.opengl.util.texture.TextureData texturedata;
772
+
771773 int resolution;
772774
773775 CacheTexture(com.sun.opengl.util.texture.Texture tex, int res)
....@@ -6451,7 +6453,7 @@
64516453 return; // true;
64526454 }
64536455
6454
- com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution)
6456
+ CacheTexture GetCacheTexture(String tex, boolean bump, int resolution)
64556457 {
64566458 CacheTexture/*com.sun.opengl.util.texture.Texture*/ texture = null;
64576459
....@@ -6665,6 +6667,8 @@
66656667 thetex.texture.dispose();
66666668 textures.remove(texname);
66676669 }
6670
+
6671
+ texture.texturedata = texturedata;
66686672 textures.put(texname, texture);
66696673
66706674 // newtex = true;
....@@ -6681,6 +6685,13 @@
66816685 }
66826686 }
66836687
6688
+ return texture;
6689
+ }
6690
+
6691
+ com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution)
6692
+ {
6693
+ CacheTexture texture = GetCacheTexture(tex, bump, resolution);
6694
+
66846695 if (bump)
66856696 {
66866697 // GraphreeD.trace("PUSH BUMP " + tex + "(" + bumpdepth + ")" + " : " + texture);
....@@ -6693,6 +6704,13 @@
66936704 }
66946705
66956706 return texture!=null?texture.texture:null;
6707
+ }
6708
+
6709
+ com.sun.opengl.util.texture.TextureData GetTextureData(String tex, boolean bump, int resolution)
6710
+ {
6711
+ CacheTexture texture = GetCacheTexture(tex, bump, resolution);
6712
+
6713
+ return texture!=null?texture.texturedata:null;
66966714 }
66976715
66986716 boolean BindTexture(String tex, boolean bump, int resolution)
....@@ -10253,7 +10271,7 @@
1025310271 return;
1025410272 }
1025510273
10256
- if (obj instanceof CheckerIG)
10274
+ if (obj instanceof Checker)
1025710275 {
1025810276 checker = obj;
1025910277
Checker.java
....@@ -1,5 +1,26 @@
1
-//package edu.wlu.cs.levy.CG;
1
+class Checker extends Object3D
2
+{
3
+ Checker()
4
+ {
5
+ this("Checker");
6
+ }
7
+
8
+ Checker(String name)
9
+ {
10
+ super(name);
11
+
12
+ material = new cMaterial();
13
+
14
+ material.ambient = 100;
15
+ material.specular = 0.001f;
16
+ material.diffuse = 0.01f;
17
+ material.cameralight = 0.001f;
18
+ }
219
3
-public interface Checker<T> {
4
- public boolean usable(T v);
20
+ Object3D deepCopy()
21
+ {
22
+ Object3D comp = new Checker();
23
+ deepCopySelf(comp);
24
+ return comp;
25
+ }
526 }
CheckerIG.java
deleted file mode 100644
....@@ -1,26 +0,0 @@
1
-class CheckerIG extends Object3D
2
-{
3
- CheckerIG()
4
- {
5
- this("Checker");
6
- }
7
-
8
- CheckerIG(String name)
9
- {
10
- super(name);
11
-
12
- material = new cMaterial();
13
-
14
- material.ambient = 100;
15
- material.specular = 0.001f;
16
- material.diffuse = 0.01f;
17
- material.cameralight = 0.001f;
18
- }
19
-
20
- Object3D deepCopy()
21
- {
22
- Object3D comp = new CheckerIG();
23
- deepCopySelf(comp);
24
- return comp;
25
- }
26
-}
CheckerInterface.java
....@@ -0,0 +1,5 @@
1
+//package edu.wlu.cs.levy.CG;
2
+
3
+public interface CheckerInterface<T> {
4
+ public boolean usable(T v);
5
+}
GroupEditor.java
....@@ -14,7 +14,7 @@
1414
1515 //import buoy.widget.BFileChooser;
1616
17
-class GroupEditor extends ObjEditor implements iParse, //iCallBack,
17
+class GroupEditor extends ObjEditor implements //iParse, //iCallBack,
1818 ObjectUI,
1919 Runnable,
2020 ActionListener,
....@@ -188,8 +188,9 @@
188188 clearItem.addActionListener(this);
189189 clearAllItem = menu.add(new MenuItem("Clear All"));
190190 clearAllItem.addActionListener(this);
191
- menu.add("-");
192
- resetMeshItem = menu.add(new MenuItem("Reset All"));
191
+
192
+ oe.menuBar.add(menu = new Menu("Setting"));
193
+ resetMeshItem = menu.add(new MenuItem("Reset All"));
193194 resetMeshItem.addActionListener(this);
194195 stepAllItem = menu.add(new MenuItem("Step All"));
195196 stepAllItem.addActionListener(this);
....@@ -221,7 +222,7 @@
221222 setMasterItem = menu.add(new MenuItem("Set Master Mesh"));
222223 setMasterItem.addActionListener(this);
223224
224
- oe.menuBar.add(menu = new Menu("Object"));
225
+ oe.menuBar.add(menu = new Menu("Group"));
225226 grabItem = menu.add(new MenuItem("Grab"));
226227 grabItem.addActionListener(this);
227228 frontItem = menu.add(new MenuItem("Front"));
....@@ -247,7 +248,8 @@
247248 scriptNodeItem.addActionListener(this);
248249 cameraItem = menu.add(new MenuItem("Camera"));
249250 cameraItem.addActionListener(this);
250
- menu.add("-");
251
+
252
+ oe.menuBar.add(menu = new Menu("Object"));
251253 textureItem = menu.add(new MenuItem("Texture"));
252254 textureItem.addActionListener(this);
253255 csgItem = menu.add(new MenuItem("CSG"));
....@@ -292,8 +294,6 @@
292294 untrimItem = menu.add(new MenuItem("Untrim"));
293295 untrimItem.addActionListener(this);
294296 menu.add("-");
295
- clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
296
- clearMaterialsItem.addActionListener(this);
297297 clearColorsItem = menu.add(new MenuItem("Clear AO"));
298298 clearColorsItem.addActionListener(this);
299299 reverseNormalsItem = menu.add(new MenuItem("Reverse Normals"));
....@@ -310,6 +310,10 @@
310310 smoothMeshItem.addActionListener(this);
311311 clipMeshItem = menu.add(new MenuItem("Clip mesh"));
312312 clipMeshItem.addActionListener(this);
313
+
314
+ oe.menuBar.add(menu = new Menu("Attributes"));
315
+ clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
316
+ clearMaterialsItem.addActionListener(this);
313317 menu.add("-");
314318 liveleavesItem = menu.add(new MenuItem("Live Leaves"));
315319 liveleavesItem.addActionListener(this);
....@@ -332,27 +336,18 @@
332336 flipVItem.addActionListener(this);
333337 unflipVItem = menu.add(new MenuItem("Unflip V"));
334338 unflipVItem.addActionListener(this);
335
- lowTexturesItem = menu.add(new MenuItem("Low Texture"));
339
+ lowTexturesItem = menu.add(new MenuItem("Low Texture (256)"));
336340 lowTexturesItem.addActionListener(this);
337
- normalTexturesItem = menu.add(new MenuItem("Normal Texture"));
341
+ normalTexturesItem = menu.add(new MenuItem("Normal Texture (512)"));
338342 normalTexturesItem.addActionListener(this);
339
- highTexturesItem = menu.add(new MenuItem("High Texture"));
343
+ highTexturesItem = menu.add(new MenuItem("High Texture (1024)"));
340344 highTexturesItem.addActionListener(this);
341
- veryhighTexturesItem = menu.add(new MenuItem("Very high Texture"));
345
+ veryhighTexturesItem = menu.add(new MenuItem("Very high Texture (2048)"));
342346 veryhighTexturesItem.addActionListener(this);
343
- maxTexturesItem = menu.add(new MenuItem("Max Texture"));
347
+ maxTexturesItem = menu.add(new MenuItem("Max Texture (4096)"));
344348 maxTexturesItem.addActionListener(this);
345
- panoTexturesItem = menu.add(new MenuItem("Panoramic Texture"));
349
+ panoTexturesItem = menu.add(new MenuItem("Panoramic Texture (8192)"));
346350 panoTexturesItem.addActionListener(this);
347
- menu.add("-");
348
- extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
349
- extractGeometriesItem.addActionListener(this);
350
- cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
351
- cloneGeometriesItem.addActionListener(this);
352
- shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
353
- shareGeometriesItem.addActionListener(this);
354
- mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
355
- mergeGeometriesItem.addActionListener(this);
356351
357352 oe.menuBar.add(menu = new Menu("Selection"));
358353 attachPigmentItem = menu.add(new MenuItem("Attach Pigment..."));
....@@ -370,9 +365,31 @@
370365 sortbysizeItem.addActionListener(this);
371366 sortbynameItem = menu.add(new MenuItem("Sort by name"));
372367 sortbynameItem.addActionListener(this);
368
+ menu.add("-");
369
+ extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
370
+ extractGeometriesItem.addActionListener(this);
371
+ cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
372
+ cloneGeometriesItem.addActionListener(this);
373
+ shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
374
+ shareGeometriesItem.addActionListener(this);
375
+ mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
376
+ mergeGeometriesItem.addActionListener(this);
377
+
373378 oe.menuBar.add(menu = new Menu("Insert"));
374379 buildCreateMenu(menu);
375
- oe.menuBar.add(menu = new Menu("Tools"));
380
+
381
+
382
+ oe.menuBar.add(menu = new Menu("Include"));
383
+ importGFDItem = menu.add(new MenuItem("GraphreeD Object..."));
384
+ importGFDItem.addActionListener(this);
385
+ importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
386
+ importVRMLX3DItem.addActionListener(this);
387
+ importOBJItem = menu.add(new MenuItem("OBJ Object..."));
388
+ importOBJItem.addActionListener(this);
389
+ import3DSItem = menu.add(new MenuItem("3DS Object..."));
390
+ import3DSItem.addActionListener(this);
391
+
392
+ oe.menuBar.add(menu = new Menu("Tools"));
376393 buildToolsMenu(menu);
377394 }
378395
....@@ -1002,6 +1019,8 @@
10021019
10031020 void buildCreateMenu(Menu menu)
10041021 {
1022
+ //heightFieldItem = menu.add(new MenuItem("Height Field"));
1023
+ //heightFieldItem.addActionListener(this);
10051024 gridItem = menu.add(new MenuItem("Grid"));
10061025 gridItem.addActionListener(this);
10071026 rectoidItem = menu.add(new MenuItem("Box"));
....@@ -1048,15 +1067,6 @@
10481067 doubleItem.addActionListener(this);
10491068 tripleItem = menu.add(new MenuItem("Trident"));
10501069 tripleItem.addActionListener(this);
1051
- menu.add("-");
1052
- importGFDItem = menu.add(new MenuItem("GraphreeD Object..."));
1053
- importGFDItem.addActionListener(this);
1054
- importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
1055
- importVRMLX3DItem.addActionListener(this);
1056
- importOBJItem = menu.add(new MenuItem("OBJ Object..."));
1057
- importOBJItem.addActionListener(this);
1058
- import3DSItem = menu.add(new MenuItem("3DS Object..."));
1059
- import3DSItem.addActionListener(this);
10601070 }
10611071
10621072 void buildToolsMenu(Menu menu)
....@@ -1068,6 +1078,8 @@
10681078 menu.add("-");
10691079 parseverticesItem = menu.add(new MenuItem("Multiplicity"));
10701080 parseverticesItem.addActionListener(this);
1081
+ textureFieldItem = menu.add(new MenuItem("Texture Field"));
1082
+ textureFieldItem.addActionListener(this);
10711083 alignItem = menu.add(new MenuItem("Align"));
10721084 alignItem.addActionListener(this);
10731085 mirrorItem = menu.add(new MenuItem("Mirror Poses"));
....@@ -1521,6 +1533,46 @@
15211533 makeSomething(ragdoll);
15221534 //makeSomething(new VehicleDemo());
15231535 } else
1536
+ /*
1537
+ */
1538
+ if (event.getSource() == heightFieldItem)
1539
+ {
1540
+ Object3D obj = new Object3D();
1541
+
1542
+ obj.CreateMaterial();
1543
+ obj.bRep = new BoundaryRep();
1544
+
1545
+ obj.bRep.CreateMesh(new iHeightField()
1546
+ {
1547
+ public double f(double x, double y)
1548
+ {
1549
+ // The Mandelbrot set is represented by coloring
1550
+ // each point (x,y) according to the number of
1551
+ // iterations it takes before the while loop in
1552
+ // this method ends. For points that are actually
1553
+ // in the Mandelbrot set, or very close to it, the
1554
+ // count will reach the maximum value, 80. These
1555
+ // points will be colored purple. All other colors
1556
+ // represent points that are definitely NOT in the set.
1557
+ x -= 600;
1558
+ y -= 500;
1559
+ x /= 200;
1560
+ y /= 200;
1561
+ int count = 0;
1562
+ double zx = x;
1563
+ double zy = y;
1564
+ while (count < 80 && Math.abs(x) < 100 && Math.abs(zy) < 100) {
1565
+ double new_zx = zx*zx - zy*zy + x;
1566
+ zy = 2*zx*zy + y;
1567
+ zx = new_zx;
1568
+ count++;
1569
+ }
1570
+ return count; // Math.sqrt(count);
1571
+ }
1572
+ }, 1000,1000);
1573
+
1574
+ makeSomething(obj);
1575
+ } else
15241576 if (event.getSource() == gridItem)
15251577 {
15261578 makeSomething(new Grid());
....@@ -1570,7 +1622,7 @@
15701622 LA.matConcat(obj.toParent, cameraView.renderCamera.fromParent, obj.toParent);
15711623 LA.matInvert(obj.toParent, obj.fromParent);
15721624 */
1573
- makeSomething(new CheckerIG());
1625
+ makeSomething(new Checker());
15741626 } else
15751627 if (event.getSource() == meshItem)
15761628 {
....@@ -2352,6 +2404,10 @@
23522404 if (event.getSource() == parseverticesItem)
23532405 {
23542406 ParseVertices();
2407
+ } else
2408
+ if (event.getSource() == textureFieldItem)
2409
+ {
2410
+ TextureVertices();
23552411 } else
23562412 if (event.getSource() == alignItem)
23572413 {
....@@ -3157,96 +3213,228 @@
31573213
31583214 //Object3D buffer;
31593215 cVector temp = new cVector();
3160
- BoundaryRep temprep;
3161
- Object3D nodes;
3162
- Vector<Vertex> vertices;
3163
-
3164
- public void Vertex(Object3D node, Vertex v)
3165
- {
3166
- vertices.add(v);
3167
- nodes.addElement(node);
3168
-
3169
- if (temprep.GetCache(v) != null)
3170
- {
3171
- temprep.Remove(v);
3172
- }
3173
- else
3174
- {
3175
- temprep.Remember(v);
3176
- }
3177
- }
3178
-
3179
- public void Face(Object3D node, Face f)
3180
- {
3181
-
3182
- }
3183
-
3216
+// BoundaryRep temprep;
3217
+// Object3D nodes;
3218
+// Vector<Vertex> vertices;
3219
+//
3220
+// cGroup buffer;
3221
+//
3222
+// public void Vertex(Object3D node, Vertex v)
3223
+// {
3224
+//// vertices.add(v);
3225
+//// nodes.addElement(node);
3226
+////
3227
+//// if (temprep.GetCache(v) != null)
3228
+//// {
3229
+//// temprep.Remove(v);
3230
+//// } else
3231
+//// {
3232
+//// temprep.Remember(v);
3233
+//// }
3234
+//
3235
+// //Object3D node = nodes.get(index);
3236
+// temp.set(v); // vertices.get(index)); // temprep.GetVertex(k));
3237
+// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3238
+//
3239
+// LA.xformPos(temp, node.GlobalTransformInv(), temp);
3240
+//
3241
+// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3242
+//
3243
+// cGroup g = new cGroup();
3244
+//
3245
+// if (g.toParent == null)
3246
+// {
3247
+// g.toParent = LA.newMatrix();
3248
+// g.fromParent = LA.newMatrix();
3249
+// }
3250
+// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3251
+// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3252
+//
3253
+// g.add(GraphreeD.clipboard);
3254
+//
3255
+// buffer.add(g);
3256
+// }
3257
+//
3258
+// public void Face(Object3D node, Face f)
3259
+// {
3260
+//
3261
+// }
3262
+//
3263
+// void ParseVerticesOld() // ??
3264
+// {
3265
+// //if (group.selection.size() != 1)
3266
+// // return;
3267
+//
3268
+// temprep = new BoundaryRep();
3269
+// nodes = new Object3D();
3270
+// vertices = new Vector<Vertex>();
3271
+//
3272
+// boolean epsequal = GraphreeD.epsequal;
3273
+// GraphreeD.epsequal = true;
3274
+//
3275
+// for (int i=0; i<group.selection.size(); i++)
3276
+// {
3277
+// Object3D buffer = new cGroup(group.selection.get(i).name + "+");
3278
+//
3279
+// group.selection.get(i).Parse(
3280
+//this );
3281
+//
3282
+// int repsize = temprep.VertexCount();
3283
+// int tablesize = temprep.vertextable.size();
3284
+// int nodesize = nodes.size();
3285
+//
3286
+// assert(vertices.size() == nodes.size());
3287
+//
3288
+// temprep.vertextable.elements();
3289
+//
3290
+// java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
3291
+//
3292
+// for (java.util.Map.Entry<Vertex,Vertex> entry : set)
3293
+// {
3294
+// cGroup g = new cGroup();
3295
+//
3296
+// int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
3297
+//
3298
+// Object3D node = nodes.get(index);
3299
+// temp.set(vertices.get(index)); // temprep.GetVertex(k));
3300
+// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3301
+//
3302
+// LA.xformPos(temp, node.GlobalTransformInv(), temp);
3303
+//
3304
+// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3305
+//
3306
+// if (g.toParent == null)
3307
+// {
3308
+// g.toParent = LA.newMatrix();
3309
+// g.fromParent = LA.newMatrix();
3310
+// }
3311
+// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3312
+// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3313
+//
3314
+// g.add(GraphreeD.clipboard);
3315
+//
3316
+// buffer.add(g);
3317
+// }
3318
+//
3319
+// makeSomething(buffer, i==group.selection.size()-1);
3320
+// }
3321
+//
3322
+// GraphreeD.epsequal = epsequal;
3323
+//
3324
+// //buffer = null;
3325
+// temprep = null;
3326
+// nodes = null;
3327
+//
3328
+// refreshContents();
3329
+// }
3330
+
31843331 void ParseVertices()
31853332 {
3186
- //if (group.selection.size() != 1)
3187
- // return;
3188
-
3189
- temprep = new BoundaryRep();
3190
- nodes = new Object3D();
3191
- vertices = new Vector<Vertex>();
3192
-
31933333 boolean epsequal = GraphreeD.epsequal;
31943334 GraphreeD.epsequal = true;
31953335
31963336 for (int i=0; i<group.selection.size(); i++)
31973337 {
3198
- Object3D buffer = new cGroup(group.selection.get(i).name + "+");
3338
+ final cGroup buffer = new cGroup(group.selection.get(i).name + "+");
31993339
3200
- group.selection.get(i).Parse(this);
3201
-
3202
- int repsize = temprep.VertexCount();
3203
- int tablesize = temprep.vertextable.size();
3204
- int nodesize = nodes.size();
3340
+ group.selection.get(i).Parse(
3341
+
3342
+ new iParse()
3343
+ {
3344
+ public void Vertex(Object3D node, Vertex v)
3345
+ {
3346
+ temp.set(v);
3347
+ LA.xformPos(temp, node.GlobalTransformInv(), temp);
32053348
3206
- assert(vertices.size() == nodes.size());
3207
-
3208
- temprep.vertextable.elements();
3209
-
3210
- java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
3349
+ cGroup g = new cGroup();
32113350
3212
- for (java.util.Map.Entry<Vertex,Vertex> entry : set)
3213
- {
3214
- cGroup g = new cGroup();
3351
+ if (g.toParent == null)
3352
+ {
3353
+ g.toParent = LA.newMatrix();
3354
+ g.fromParent = LA.newMatrix();
3355
+ }
3356
+ LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3357
+ LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
32153358
3216
- int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
3217
- Object3D node = nodes.get(index);
3218
- temp.set(vertices.get(index)); // temprep.GetVertex(k));
3219
- // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3359
+ g.add(GraphreeD.clipboard);
32203360
3221
- LA.xformPos(temp, node.GlobalTransformInv(), temp);
3222
-
3223
- // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3224
-
3225
- if (g.toParent == null)
3226
- {
3227
- g.toParent = LA.newMatrix();
3228
- g.fromParent = LA.newMatrix();
3229
- }
3230
- LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3231
- LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3361
+ buffer.add(g);
3362
+ }
32323363
3233
- g.add(GraphreeD.clipboard);
3364
+ public void Face(Object3D node, Face f)
3365
+ {
32343366
3235
- buffer.add(g);
3236
- }
3367
+ }
3368
+ }
3369
+ );
32373370
32383371 makeSomething(buffer, i==group.selection.size()-1);
32393372 }
32403373
32413374 GraphreeD.epsequal = epsequal;
32423375
3243
- //buffer = null;
3244
- temprep = null;
3245
- nodes = null;
3376
+ refreshContents();
3377
+ }
3378
+
3379
+ void TextureVertices()
3380
+ {
3381
+ for (int i=0; i<group.selection.size(); i++)
3382
+ {
3383
+ group.selection.get(i).Parse(
3384
+ new iParse()
3385
+ {
3386
+ public void Vertex(Object3D node, Vertex v)
3387
+ {
3388
+ cTexture tex = node.GetTextures();
3389
+ String pigment = Object3D.GetPigment(tex);
3390
+ //String bump = Object3D.GetBump(tex);
3391
+
3392
+ com.sun.opengl.util.texture.TextureData texturedata = CameraPane.theRenderer.GetTextureData(pigment, false, node.texres);
3393
+
3394
+ double s = v.s;
3395
+
3396
+ if (s == 1)
3397
+ s = 0;
3398
+
3399
+ double t = v.t;
3400
+
3401
+ if (t == 1)
3402
+ t = 0;
3403
+
3404
+ int indexs = (int) (texturedata.getWidth() * s);
3405
+ int indext = (int) (texturedata.getHeight() * t);
3406
+
3407
+ int index = indext * texturedata.getWidth() + indexs;
3408
+
3409
+ java.nio.ByteBuffer bytebuf = (java.nio.ByteBuffer)texturedata.getBuffer();
3410
+
3411
+ int slide = bytebuf.capacity() / texturedata.getWidth() / texturedata.getHeight();
3412
+
3413
+ float scale = bytebuf.get(index*slide) & 0xFF;
3414
+ scale += bytebuf.get(index*slide+1) & 0xFF;
3415
+ scale += bytebuf.get(index*slide+2) & 0xFF;
3416
+ scale /= 3;
3417
+
3418
+ scale /= 0xFF;
3419
+ scale /= 4;
3420
+
3421
+ //v.AO = scale;
3422
+
3423
+ v.x += v.norm.x * scale;
3424
+ v.y += v.norm.y * scale;
3425
+ v.z += v.norm.z * scale;
3426
+ }
3427
+
3428
+ public void Face(Object3D node, Face f)
3429
+ {
3430
+ }
3431
+ }
3432
+ );
3433
+ }
32463434
32473435 refreshContents();
32483436 }
3249
-
3437
+
32503438 void Align()
32513439 {
32523440 for (int i=0; i<group.selection.size(); i++)
....@@ -4728,6 +4916,8 @@
47284916 private MenuItem particleItem;
47294917 private MenuItem ragdollItem;
47304918 private MenuItem ragdoll2Item;
4919
+ private MenuItem heightFieldItem;
4920
+ private MenuItem textureFieldItem;
47314921 private MenuItem gridItem;
47324922 private MenuItem rectoidItem;
47334923 private MenuItem ellipsoidItem;
HeightField.java
....@@ -0,0 +1,26 @@
1
+/*
2
+ * To change this template, choose Tools | Templates
3
+ * and open the template in the editor.
4
+ */
5
+
6
+/**
7
+ *
8
+ * @author nbriere
9
+ */
10
+public class HeightField extends Grid
11
+{
12
+ iHeightField heightField;
13
+
14
+ HeightField(iHeightField hf)
15
+ {
16
+ heightField = hf;
17
+ }
18
+
19
+ Vertex biparamFunction(double u, double v)
20
+ {
21
+ Vertex temp = new Vertex((2*v-1)*radius*8, 0 /*-radius,*/, (2*u-1)*radius*8);
22
+ temp.norm = LA.newVector(0,1,0);
23
+ return temp;
24
+ }
25
+
26
+}
KDNode.java
....@@ -140,7 +140,7 @@
140140 protected static <T> void nnbr(KDNode<T> kd, HPoint target, HRect hr,
141141 double max_dist_sqd, int lev, int K,
142142 NearestNeighborList<KDNode<T>> nnl,
143
- Checker<T> checker,
143
+ CheckerInterface<T> checker,
144144 long timeout)
145145 {
146146
KDTree.java
....@@ -285,7 +285,7 @@
285285 * @throws IllegalArgumentException if <I>n</I> is negative or
286286 * exceeds tree size
287287 */
288
- public List<T> nearest(double[] key, int n, Checker<T> checker)
288
+ public List<T> nearest(double[] key, int n, CheckerInterface<T> checker)
289289 throws KeySizeException, IllegalArgumentException
290290 {
291291
....@@ -360,7 +360,7 @@
360360 }
361361
362362 private NearestNeighborList<KDNode<T>> getnbrs(double[] key, int n,
363
- Checker<T> checker) throws KeySizeException
363
+ CheckerInterface<T> checker) throws KeySizeException
364364 {
365365
366366 if (key.length != m_K)
Mocap.java
....@@ -754,7 +754,7 @@
754754 //long
755755 // june 2014 floorid = sourcenode.getFloor(floor); // , sourcenode.parent);
756756
757
- CameraPane.debugpoints[0].name = "Floor = " + floorid;
757
+ CameraPane.debugpoints[0].name = ""; // "Floor = " + 0; // floorid;
758758 CameraPane.debugpoints[0].toParent[3][0] = floor.x;
759759 CameraPane.debugpoints[0].toParent[3][1] = floor.y;
760760 CameraPane.debugpoints[0].toParent[3][2] = floor.z;
....@@ -770,7 +770,7 @@
770770
771771 this.count--; // currently drawing itself
772772
773
- CameraPane.debugpoints[7].name = "Centroid = " + groundid; // centroid;
773
+ CameraPane.debugpoints[7].name = ""; // Centroid = " + 0; // groundid; // centroid;
774774 CameraPane.debugpoints[7].toParent[3][0] = centroid.x;
775775 CameraPane.debugpoints[7].toParent[3][1] = centroid.y;
776776 CameraPane.debugpoints[7].toParent[3][2] = centroid.z;
....@@ -795,7 +795,7 @@
795795
796796 // jan 2014 sourcenode.parent.TransformToWorld(tmp);
797797
798
- CameraPane.debugpoints[1].name = "C+";
798
+ CameraPane.debugpoints[1].name = ""; // "C+";
799799 CameraPane.debugpoints[1].toParent[3][0] = tmp.x;
800800 CameraPane.debugpoints[1].toParent[3][1] = tmp.y;
801801 CameraPane.debugpoints[1].toParent[3][2] = tmp.z;
....@@ -814,7 +814,7 @@
814814 tmp.z = pinz;
815815 }
816816
817
- CameraPane.debugpoints[2].name = "Pin";
817
+ CameraPane.debugpoints[2].name = ""; // "Pin";
818818 CameraPane.debugpoints[2].toParent[3][0] = tmp.x;
819819 CameraPane.debugpoints[2].toParent[3][1] = tmp.y;
820820 CameraPane.debugpoints[2].toParent[3][2] = tmp.z;
....@@ -822,7 +822,7 @@
822822 //if (sourcenode.parent.parent != null)
823823 // jan 2014 sourcenode.parent.TransformToLocal(tmp); //, tmp);
824824
825
- CameraPane.debugpoints[3].name = "C-";
825
+ CameraPane.debugpoints[3].name = ""; // "C-";
826826 CameraPane.debugpoints[3].toParent[3][0] = tmp.x;
827827 CameraPane.debugpoints[3].toParent[3][1] = tmp.y;
828828 CameraPane.debugpoints[3].toParent[3][2] = tmp.z;
....@@ -895,14 +895,14 @@
895895 // if (sourcenode.parent.parent != null)
896896 // sourcenode.parent.parent.TransformToWorld(floor); //, floor);
897897
898
- CameraPane.debugpoints[5].name = "F++";
898
+ CameraPane.debugpoints[5].name = ""; // "F++";
899899 CameraPane.debugpoints[5].toParent[3][0] = floor.x;
900900 CameraPane.debugpoints[5].toParent[3][1] = floor.y;
901901 CameraPane.debugpoints[5].toParent[3][2] = floor.z;
902902
903903 floor.y = tempg;
904904
905
- CameraPane.debugpoints[6].name = "F+-";
905
+ CameraPane.debugpoints[6].name = ""; // "F+-";
906906 CameraPane.debugpoints[6].toParent[3][0] = floor.x;
907907 CameraPane.debugpoints[6].toParent[3][1] = floor.y;
908908 CameraPane.debugpoints[6].toParent[3][2] = floor.z;
....@@ -1318,7 +1318,7 @@
13181318
13191319 rotsourcenode.TransformToWorld(test);
13201320
1321
- CameraPane.debugpoints[4].name = "ROT = "; // + test;
1321
+ CameraPane.debugpoints[4].name = ""; // "ROT = "; // + test;
13221322 CameraPane.debugpoints[4].toParent[3][0] = test.x;
13231323 CameraPane.debugpoints[4].toParent[3][1] = test.y;
13241324 CameraPane.debugpoints[4].toParent[3][2] = test.z;
ObjEditor.java
....@@ -1336,7 +1336,7 @@
13361336
13371337 // aConstraints = gbc; // (GridBagConstraints) GraphreeD.clone(gbc);
13381338
1339
- frame.setSize(800, 600);
1339
+ frame.setSize(1024, 768);
13401340 frame.show();
13411341
13421342 gridPanel.setDividerLocation(1.0);
Object3D.java
....@@ -3717,7 +3717,7 @@
37173717
37183718 boolean getCentroid(cVector centroid, boolean xform)
37193719 {
3720
- assert(false);
3720
+// for speaker assert(false);
37213721 if (blockloop)
37223722 return false;
37233723
....@@ -4515,16 +4515,28 @@
45154515
45164516 Object3D GetFileRoot()
45174517 {
4518
+ if (overflow)
4519
+ return null;
4520
+
4521
+ overflow = true;
4522
+
4523
+ Object3D pfr = null;
4524
+
45184525 if (parent == null && fileparent == null)
4519
- return this;
4526
+ pfr = this;
45204527
45214528 if (parent == null && fileparent != null) // V4.gfd???
4522
- return fileparent;
4529
+ pfr = fileparent;
45234530
4524
- if (parent == null)
4525
- return this;
4531
+ if (pfr == null && parent == null)
4532
+ pfr = this;
45264533
4527
- return parent.GetFileRoot();
4534
+ if (pfr == null)
4535
+ pfr = parent.GetFileRoot();
4536
+
4537
+ overflow = false;
4538
+
4539
+ return pfr;
45284540 }
45294541
45304542 cTreePath GetPath()
....@@ -5280,7 +5292,7 @@
52805292 if (name != null && name.contains("sclera"))
52815293 name = name;
52825294
5283
- if (this instanceof CheckerIG)
5295
+ if (this instanceof Checker)
52845296 return;
52855297
52865298 if (display.drawMode == display.SHADOW && PASSTEST)
....@@ -7735,8 +7747,15 @@
77357747 info.pane.repaint();
77367748 }
77377749
7750
+ boolean overflow = false;
7751
+
77387752 void TransformToWorld(cVector out) // , cVector out)
77397753 {
7754
+ if (overflow)
7755
+ return;
7756
+
7757
+ overflow = true;
7758
+
77407759 // june 2013 ??? assert (in == out);
77417760 cVector in = out;
77427761 if (toParent != null && !(this instanceof Texture || this instanceof TextureNode))
....@@ -7753,6 +7772,8 @@
77537772 {
77547773 (parent!=null?parent:fileparent).TransformToWorld(out); //, out);
77557774 }
7775
+
7776
+ overflow = false;
77567777 }
77577778
77587779 void TransformToLocal(cVector out) //, cVector out)
....@@ -7995,19 +8016,22 @@
79958016 max = new cVector();
79968017 }
79978018
7998
- Object3D sourcenode = GetFileRoot();
7999
-
8000
- if (!sourcenode.name.contains("rclab"))
8019
+ if (false) // Can crawl!!
80018020 {
8002
- getBounds(min, max, true);
8021
+ Object3D sourcenode = GetFileRoot();
80038022
8004
- if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
8023
+ if (sourcenode != null && !sourcenode.name.contains("rclab"))
80058024 {
8006
-// sourcenode.getBounds(min, max, true);
8007
- sourcenode.getBounds(v0, v1, true);
8008
-// sourcenode.toParent = sourcenode.toParent;
8009
-// get(0).toParent = get(0).toParent;
8010
-// sourcenode.GlobalTransform();
8025
+ getBounds(min, max, true);
8026
+
8027
+ if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
8028
+ {
8029
+ // sourcenode.getBounds(min, max, true);
8030
+ sourcenode.getBounds(v0, v1, true);
8031
+ // sourcenode.toParent = sourcenode.toParent;
8032
+ // get(0).toParent = get(0).toParent;
8033
+ // sourcenode.GlobalTransform();
8034
+ }
80118035 }
80128036 }
80138037
....@@ -8016,7 +8040,8 @@
80168040 if (support != null)
80178041 {
80188042 assert(bRep != null);
8019
- GraphreeD.Assert(support.bRep == bRep.support);
8043
+ if (!(support instanceof GenericJoint)) // support.bRep != null)
8044
+ GraphreeD.Assert(support.bRep == bRep.support);
80208045 }
80218046 else
80228047 {
ScriptNode.java
....@@ -285,7 +285,7 @@
285285 else
286286 {
287287 if (speaker != null)
288
- System.err.println(speaker.GetFileRoot().name + " (not a command) : " + reader.line);
288
+ System.err.println(speaker.GetFileRoot().name + " (speaking) : " + reader.line);
289289 else
290290 System.err.println("no speaker (not a command) : " + reader.line);
291291 }
....@@ -412,7 +412,7 @@
412412 {
413413 //path += "/" + Filename(readers[i].script);
414414 ScriptReader reader = readers[i];
415
- path += Filename(readers[i].script) + "; duration=" + reader.duration + "; total=" + reader.totalduration +
415
+ path += Filename(reader.script) + "; duration=" + reader.duration + "; total=" + reader.totalduration +
416416 "; line#" + reader.linecount + ": " + reader.line;
417417 if (reader.line != null && // sept 2014
418418 reader.line.startsWith("_"))
....@@ -488,7 +488,7 @@
488488 reader = readers[stack] = new ScriptReader(new BufferedReader(new FileReader(script)), reader.totalduration, /*0, 0, "",*/ script);
489489 //duration = 0; // june 2014
490490 //linecount = 0;
491
- //reader.script = script;
491
+ reader.script = script; // oct 2014
492492 return;
493493 }
494494 if (command.equals("return")) // line.startsWith("; return"))
....@@ -1438,7 +1438,7 @@
14381438 object.skip = false;
14391439 return;
14401440 }
1441
- if (command.equals("skipmocap"))
1441
+ if (command.equals("skipmocap") || command.equals("mocapskip")) // oct 2014
14421442 {
14431443 object.skipmocap = true;
14441444 return;
Texture.java
....@@ -10,8 +10,8 @@
1010 public class Texture extends Composite implements java.io.Serializable
1111 {
1212 // deprecated due to serial problems
13
- static final long serialVersionUID = //-5280151442948961597L; // new java
14
- 7695543694999681408L; // old java !!!
13
+ static final long serialVersionUID = -5280151442948961597L; // new java
14
+ // 7695543694999681408L; // old java !!!
1515
1616 // default = -8076744133104150348L
1717
iHeightField.java
....@@ -0,0 +1,13 @@
1
+/*
2
+ * To change this template, choose Tools | Templates
3
+ * and open the template in the editor.
4
+ */
5
+
6
+/**
7
+ *
8
+ * @author nbriere
9
+ */
10
+public interface iHeightField
11
+{
12
+ double f(double x, double y);
13
+}