BillboardNode.java | ●●●●● patch | view | raw | blame | history | |
BiparamEditor.java | ●●●●● patch | view | raw | blame | history | |
Bone.java | ●●●●● patch | view | raw | blame | history | |
BoundaryRep.java | ●●●●● patch | view | raw | blame | history | |
CameraPane.java | ●●●●● patch | view | raw | blame | history | |
Grid.java | ●●●●● patch | view | raw | blame | history | |
GroupEditor.java | ●●●●● patch | view | raw | blame | history | |
HiddenObject.java | ●●●●● patch | view | raw | blame | history | |
Klein.java | ●●●●● patch | view | raw | blame | history | |
KleinEditor.java | ●●●●● patch | view | raw | blame | history | |
Mocap.java | ●●●●● patch | view | raw | blame | history | |
ObjEditor.java | ●●●●● patch | view | raw | blame | history | |
Object3D.java | ●●●●● patch | view | raw | blame | history | |
cMesh.java | ●●●●● patch | view | raw | blame | history | |
cSpring.java | ●●●●● patch | view | raw | blame | history |
BillboardNode.java
.. .. @@ -0,0 +1,54 @@ 1 +/*2 + * To change this template, choose Tools | Templates3 + * and open the template in the editor.4 + */5 +6 +/**7 + *8 + * @author nbriere9 + */10 +public class BillboardNode extends Composite implements java.io.Serializable11 +{12 + static final long serialVersionUID = 0;13 +14 + BillboardNode()15 + {16 + super("Billboard");17 +18 + toParent = LA.newMatrix();19 + fromParent = LA.newMatrix();20 + }21 +22 + cVector pos = new cVector();23 +24 + void draw(CameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)25 + {26 + cVector eye = display.eyeCamera.location;27 +28 + GlobalTransformInv();29 +30 + pos.x = parent.globalTransform[3][0];31 + pos.y = parent.globalTransform[3][1];32 + pos.z = parent.globalTransform[3][2];33 +34 + pos.x -= eye.x;35 + pos.y -= eye.y;36 + pos.z -= eye.z;37 +38 + double angle = Math.atan2(pos.x, pos.z);39 +40 + LA.matIdentity(toParent);41 + LA.matIdentity(fromParent);42 + LA.matYRotate(toParent, angle);43 + LA.matYRotate(fromParent, -angle);44 +45 + super.draw(display, root, selected, blocked);46 + }47 +48 + Object3D deepCopy()49 + {50 + Composite comp = new BillboardNode();51 + deepCopySelf(comp);52 + return comp;53 + }54 +}BiparamEditor.java
.. .. @@ -261,8 +261,8 @@ 261 261 } 262 262 263 263 Biparam biparam; 264 - JLabel uDivsLabel;265 - JLabel vDivsLabel;264 + //JLabel uDivsLabel;265 + //JLabel vDivsLabel;266 266 NumberSlider uDivsField; 267 267 NumberSlider vDivsField; 268 268 JCheckBox optionCB; Bone.java
.. .. @@ -26,7 +26,7 @@ 26 26 */ 27 27 28 28 import javax.media.j3d.*; 29 -import javax.vecmath.*;29 +//import javax.vecmath.*;30 30 31 31 import java.util.*; 32 32 BoundaryRep.java
.. .. @@ -497,10 +497,10 @@ 497 497 return dist2; 498 498 } 499 499 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);502 502 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;504 504 505 505 // Compute weight of point w/r to this 506 506 float ComputeWeight(Vertex v, double[][] toRoot, int k) .. .. @@ -570,8 +570,10 @@ 570 570 571 571 if (dot > distmax) 572 572 dot = distmax; 573 + //return 0; // patch for strange behavior573 574 if (dot < -distmax) 574 575 dot = -distmax; 576 + //return 0; // patch for strange behavior575 577 576 578 // v3 = GetVertex(this.startvertices[subsupport] + 16); 577 579 // .. .. @@ -609,10 +611,12 @@ 609 611 610 612 float dist2 = (float)Distance2(v, v2, 1E10, toRoot, k); 611 613 612 - if (dist2 >= 2 * SEUIL*SEUIL) // && !CameraPane.CROWD) // weightmode614 + double seuil = SEUIL * 2;615 +616 + if (dist2 >= 2 * seuil*seuil) // && !CameraPane.CROWD) // weightmode613 617 return 0; 614 618 615 - dist2 /= 2 * SEUIL*SEUIL; // multiplied by two because center of support619 + dist2 /= 2 * seuil*seuil; // multiplied by two because center of support616 620 // could be far from closest point 617 621 618 622 // dist2 = Math.pow(dist2, 2); .. .. @@ -946,7 +950,7 @@ 946 950 947 951 int nbsupports; 948 952 949 - SEUIL = 0.1; // aout 2013953 + // sept 2017 SEUIL = 0.1; // aout 2013950 954 951 955 supports = InitConnections(other); 952 956 .. .. @@ -982,7 +986,7 @@ 982 986 983 987 int subsupports = 0; 984 988 985 - SEUIL = 0.1; // aout 2013989 + // sept 2017 SEUIL = 0.1; // aout 2013986 990 987 991 while (subsupports == 0) 988 992 { .. .. @@ -1006,6 +1010,26 @@ 1006 1010 1007 1011 vect.set(v); 1008 1012 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 apex1024 +// vect3.sub(vertextemp); // origin (center)1025 +//1026 +// double distmax = vect3.length();1027 +//1028 +// vect3.set(v2); // "X" axis apex1029 +// vect3.sub(vertextemp); // origin (center)1030 +//1031 +// if (vect3.length() >= distmax)1032 +// continue;1009 1033 1010 1034 if (mindistance > vect.dot(vect)) 1011 1035 { .. .. @@ -1017,7 +1041,9 @@ 1017 1041 1018 1042 subsupports = v.closestsupport==-1 ? 0 : supports[v.closestsupport].Length(); 1019 1043 1020 - SEUIL *= 2;1044 + // previously for "contains", now for weights.1045 + assert(subsupports > 0);1046 + //SEUIL *= 2;1021 1047 } 1022 1048 1023 1049 assert(subsupports > 0); .. .. @@ -3776,10 +3802,19 @@ 3776 3802 for (int i = 0; i < VertexCount(); i++) 3777 3803 { 3778 3804 Vertex v = GetVertex(i); 3805 +3806 + vertextemp.set(v);3807 +3779 3808 //if (v.norm.x == 0 && v.norm.y == 0 && v.norm.z == 0) 3780 3809 { 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);3783 3818 } 3784 3819 } 3785 3820 .. .. @@ -3790,7 +3825,7 @@ 3790 3825 static cVector temp2 = new cVector(); 3791 3826 static cVector temp3 = new cVector(); 3792 3827 3793 - void GenerateNormal(int index, Vertex v)3828 + boolean GenerateNormal(int index, Vertex v)3794 3829 { 3795 3830 //System.out.println("Old normal = " + v.norm); 3796 3831 LA.setVector(v.norm, 0, 0, 0); .. .. @@ -3819,6 +3854,10 @@ 3819 3854 LA.vecSub(p/*.pos*/, v/*.pos*/, temp1); 3820 3855 LA.vecSub(q/*.pos*/, v/*.pos*/, temp2); 3821 3856 } 3857 + else3858 + {3859 + continue;3860 + }3822 3861 3823 3862 //LA.vecNormalize(temp1); 3824 3863 //LA.vecNormalize(temp2); .. .. @@ -3829,17 +3868,25 @@ 3829 3868 double s = temp3.length(); 3830 3869 //double c = temp2.dot(temp1); 3831 3870 3871 + if (s == 0)3872 + return false;3873 +3832 3874 float angle = 1; // (float) Math.atan2(s, c); 3833 3875 //if(angle < 0) angle = -angle; 3834 3876 3835 3877 //LA.vecNormalize(temp3); 3836 3878 LA.vecScale(temp3, angle / s); 3837 3879 3880 +// if (temp3.dot(v.norm) < 0)3881 +// assert(temp3.dot(v.norm) >= 0);3882 +3838 3883 LA.vecAdd(temp3, v.norm, v.norm); 3839 3884 } 3840 3885 3841 3886 LA.vecNormalize(v.norm); 3842 3887 //System.out.println("New normal = " + v.norm); 3888 +3889 + return true;3843 3890 } 3844 3891 3845 3892 double Arccos(double x) .. .. @@ -4926,7 +4973,7 @@ 4926 4973 } 4927 4974 } 4928 4975 4929 - System.out.println("done.");4976 + //System.out.println("done.");4930 4977 4931 4978 cp.renderCamera = keep; 4932 4979 .. .. @@ -7075,6 +7122,7 @@ 7075 7122 assert(f2.contains(i)); 7076 7123 assert(f3.contains(i)); 7077 7124 7125 + // when r is the "center", p is along the boundary7078 7126 while (f0.r != i) 7079 7127 { 7080 7128 int t = f0.p; .. .. @@ -7131,60 +7179,90 @@ 7131 7179 f0 = f3; 7132 7180 f3 = t; 7133 7181 } 7134 - atleastone = true;7135 7182 7183 + int va = f0.q;7184 + int vb = f0.r;7185 + int vc = -1;7186 +7187 + Face toremove1 = null;7188 + Face toremove2 = null;7189 +7190 + // f0 is the buffer for the first new triangle,7191 + // and otherf is the other upper one.7136 7192 Face otherf = null; 7137 7193 7138 7194 if (f1.contains(f0.p)) 7139 7195 { 7140 7196 if (f1.p == f0.p) 7141 7197 { 7198 + assert(false);7142 7199 f0.r = f1.q; 7143 7200 } 7144 7201 else 7145 7202 { 7146 7203 assert(f1.q == f0.p); 7147 - f0.r = f1.p;7204 + vc = f1.p;7148 7205 } 7149 7206 7150 7207 otherf = f2; 7151 - faces.remove(f1);7152 - faces.remove(f3);7208 + toremove1 = f1;7209 + toremove2 = f3;7153 7210 } 7154 7211 else 7155 7212 if (f2.contains(f0.p)) 7156 7213 { 7157 7214 if (f2.p == f0.p) 7158 7215 { 7216 + assert(false);7159 7217 f0.r = f2.q; 7160 7218 } 7161 7219 else 7162 7220 { 7163 7221 assert(f2.q == f0.p); 7164 - f0.r = f2.p;7222 + vc = f2.p;7165 7223 } 7166 7224 7167 7225 otherf = f3; 7168 - faces.remove(f1);7169 - faces.remove(f2);7226 + toremove1 = f1;7227 + toremove2 = f2;7170 7228 } 7171 7229 if (f3.contains(f0.p)) 7172 7230 { 7173 7231 if (f3.p == f0.p) 7174 7232 { 7233 + assert(false);7175 7234 f0.r = f3.q; 7176 7235 } 7177 7236 else 7178 7237 { 7179 7238 assert(f3.q == f0.p); 7180 - f0.r = f3.p;7239 + vc = f3.p;7181 7240 } 7182 7241 7183 7242 otherf = f1; 7184 - faces.remove(f2);7185 - faces.remove(f3);7243 + toremove1 = f2;7244 + toremove2 = f3;7186 7245 } 7187 7246 7247 + vertextemp.set(vertices.get(va));7248 + vertextemp.sub(vertices.get(vb));7249 + vertextemp.normalize();7250 + vertextemp2.set(vertices.get(vc));7251 + vertextemp2.sub(vertices.get(vb));7252 + vertextemp2.normalize();7253 +7254 + if (vertextemp.dot(vertextemp2) > -0.95)7255 + {7256 + continue;7257 + }7258 +7259 + atleastone = true;7260 +7261 + f0.r = vc;7262 +7263 + faces.remove(toremove1);7264 + faces.remove(toremove2);7265 +7188 7266 if (!f0.contains(otherf.p)) 7189 7267 { 7190 7268 otherf.r = otherf.p; CameraPane.java
.. .. @@ -13257,7 +13257,8 @@ 13257 13257 FlipTransform(); 13258 13258 break; 13259 13259 case ENTER: 13260 - object.editWindow.ScreenFit(); // Edit();13260 + // object.editWindow.ScreenFit(); // Edit();13261 + ToggleLive();13261 13262 break; 13262 13263 case DELETE: 13263 13264 ClearSelection(); Grid.java
.. .. @@ -4,6 +4,11 @@ 4 4 5 5 Grid() 6 6 { 7 + this(35, 34);8 + }9 +10 + Grid(int u, int v)11 + {7 12 super(false); 8 13 //this(true); 9 14 //} .. .. @@ -12,8 +17,8 @@ 12 17 //{ 13 18 inPnt = new cVector(); 14 19 name = "Grid"; 15 - uDivs = 35;16 - vDivs = 34;20 + uDivs = u;21 + vDivs = v;17 22 minUDivs = 1; 18 23 minVDivs = 1; 19 24 center = new cVector(); GroupEditor.java
.. .. @@ -219,6 +219,8 @@ 219 219 resetsupportItem.addActionListener(this); 220 220 linkverticesItem = menu.add(new MenuItem("Link to Support")); 221 221 linkverticesItem.addActionListener(this); 222 + relinkverticesItem = menu.add(new MenuItem("Re-link to Support"));223 + relinkverticesItem.addActionListener(this);222 224 setMasterItem = menu.add(new MenuItem("Set Master Mesh")); 223 225 setMasterItem.addActionListener(this); 224 226 .. .. @@ -231,6 +233,10 @@ 231 233 frontItem.addActionListener(this); 232 234 compositeItem = menu.add(new MenuItem("Composite")); 233 235 compositeItem.addActionListener(this); 236 + hideItem = menu.add(new MenuItem("Hide"));237 + hideItem.addActionListener(this);238 + ungroupItem = menu.add(new MenuItem("Ungroup"));239 + ungroupItem.addActionListener(this);234 240 menu.add("-"); 235 241 randomItem = menu.add(new MenuItem("Random")); 236 242 randomItem.addActionListener(this); .. .. @@ -252,6 +258,8 @@ 252 258 oe.menuBar.add(menu = new Menu("Object")); 253 259 textureItem = menu.add(new MenuItem("Texture")); 254 260 textureItem.addActionListener(this); 261 + billboardItem = menu.add(new MenuItem("Billboard"));262 + billboardItem.addActionListener(this);255 263 csgItem = menu.add(new MenuItem("CSG")); 256 264 csgItem.addActionListener(this); 257 265 shadowXItem = menu.add(new MenuItem("Shadow X")); .. .. @@ -269,14 +277,12 @@ 269 277 pointflowItem = menu.add(new MenuItem("Point Flow")); 270 278 pointflowItem.addActionListener(this); 271 279 menu.add("-"); 272 - transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));273 - transformgeometryItem.addActionListener(this);274 280 resetTransformItem = menu.add(new MenuItem("Reset Transform")); 275 281 resetTransformItem.addActionListener(this); 276 282 resetCentroidItem = menu.add(new MenuItem("Reset Centroid")); 277 283 resetCentroidItem.addActionListener(this); 278 - ungroupItem = menu.add(new MenuItem("Ungroup"));279 - ungroupItem.addActionListener(this);284 + transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));285 + transformgeometryItem.addActionListener(this);280 286 281 287 oe.menuBar.add(menu = new Menu("Geometry")); 282 288 genUVItem = menu.add(new MenuItem("Generate UV")); .. .. @@ -287,6 +293,8 @@ 287 293 genNormalsCADItem.addActionListener(this); 288 294 genNormalsMESHItem = menu.add(new MenuItem("Mesh Normals")); 289 295 genNormalsMESHItem.addActionListener(this); 296 + genNormalsMINEItem = menu.add(new MenuItem("My Normals"));297 + genNormalsMINEItem.addActionListener(this);290 298 stripifyItem = menu.add(new MenuItem("Stripify")); 291 299 stripifyItem.addActionListener(this); 292 300 unstripifyItem = menu.add(new MenuItem("Unstripify")); .. .. @@ -1035,6 +1043,8 @@ 1035 1043 torusItem.addActionListener(this); 1036 1044 superItem = menu.add(new MenuItem("Superellipsoid")); 1037 1045 superItem.addActionListener(this); 1046 + kleinItem = menu.add(new MenuItem("Klein Bottle"));1047 + kleinItem.addActionListener(this);1038 1048 particleItem = menu.add(new MenuItem("Particle system")); 1039 1049 particleItem.addActionListener(this); 1040 1050 ragdollItem = menu.add(new MenuItem("Rag Walk")); .. .. @@ -1595,6 +1605,10 @@ 1595 1605 { 1596 1606 makeSomething(new Superellipsoid()); 1597 1607 } else 1608 + if (event.getSource() == kleinItem)1609 + {1610 + makeSomething(new Klein());1611 + } else1598 1612 if (event.getSource() == blobItem) 1599 1613 { 1600 1614 Blob blob = new Blob(); .. .. @@ -2003,23 +2017,28 @@ 2003 2017 if (group.selection.size() == 1) 2004 2018 one = true; 2005 2019 2020 + Object3D merge = null;2021 +2006 2022 Object3D content = new cGroup(); 2007 2023 2008 2024 for (int i=0; i<group.selection.size(); i++) 2009 2025 { 2010 - Object3D sel = new Merge(group.selection.get(i));2026 + merge = new Merge(group.selection.get(i));2011 2027 2012 2028 if (one) 2013 - makeSomething(sel, false);2029 + makeSomething(merge, false);2014 2030 else 2015 - content.addChild(sel);2031 + content.addChild(merge);2016 2032 } 2017 2033 2018 2034 if (!one) 2019 - makeSomething(content, false);2020 -2021 - ResetModel();2022 - refreshContents();2035 + makeSomething(content, true);2036 + else2037 + {2038 + ResetModel();2039 + Select(merge.GetTreePath(), true, false); // unselect... false);2040 + refreshContents();2041 + }2023 2042 } else 2024 2043 if (event.getSource() == mergeGeometriesItem) 2025 2044 { .. .. @@ -2096,6 +2115,15 @@ 2096 2115 2097 2116 refreshContents(); 2098 2117 } else 2118 + if (event.getSource() == relinkverticesItem)2119 + {2120 + boolean random = CameraPane.RANDOM;2121 + CameraPane.RANDOM = false; // parse all random nodes2122 + group.selection.RelinkToSupport();2123 + CameraPane.RANDOM = random;2124 +2125 + refreshContents();2126 + } else2099 2127 if (event.getSource() == resetreferencesItem) 2100 2128 { 2101 2129 for (int i=0; i<group.selection.size(); i++) .. .. @@ -2164,6 +2192,10 @@ 2164 2192 if (event.getSource() == grabItem) 2165 2193 { 2166 2194 group(new cGroup(), true); 2195 + } else2196 + if (event.getSource() == hideItem)2197 + {2198 + group(new HiddenObject());2167 2199 } else 2168 2200 if (event.getSource() == frontItem) 2169 2201 { .. .. @@ -2287,6 +2319,10 @@ 2287 2319 { 2288 2320 group(new TextureNode()); 2289 2321 } else 2322 + if (event.getSource() == billboardItem)2323 + {2324 + group(new BillboardNode());2325 + } else2290 2326 if (event.getSource() == shadowXItem) 2291 2327 { 2292 2328 CastShadow(0); .. .. @@ -2301,7 +2337,15 @@ 2301 2337 } else 2302 2338 if (event.getSource() == ungroupItem) 2303 2339 { 2304 - ungroup();2340 + //ungroup();2341 + for (int i=0; i<group.selection.size(); i++)2342 + {2343 + Ungroup(group.selection.get(i));2344 + }2345 +2346 + ClearSelection(false);2347 +2348 + refreshContents();2305 2349 } else 2306 2350 if (event.getSource() == genUVItem) 2307 2351 { .. .. @@ -2318,6 +2362,10 @@ 2318 2362 if (event.getSource() == genNormalsORGANItem) 2319 2363 { 2320 2364 GenNormals(false); 2365 + } else2366 + if (event.getSource() == genNormalsMINEItem)2367 + {2368 + GenNormalsMINE();2321 2369 } else 2322 2370 if (event.getSource() == stripifyItem) 2323 2371 { .. .. @@ -3179,6 +3227,13 @@ 3179 3227 refreshContents(); 3180 3228 } 3181 3229 3230 + void GenNormalsMINE()3231 + {3232 + group.selection.GenNormalsMINE();3233 +3234 + refreshContents();3235 + }3236 +3182 3237 void Stripify() 3183 3238 { 3184 3239 group.StripifyS(); .. .. @@ -3447,12 +3502,26 @@ 3447 3502 3448 3503 void Align() 3449 3504 { 3505 + if (group.selection.size() == 0)3506 + return;3507 +3508 + cVector bbmin = new cVector();3509 + cVector bbmax = new cVector();3510 +3511 + group.selection.get(0).getBounds(bbmin, bbmax, true);3512 +3513 + double dx = bbmax.x - bbmin.x;3514 + double dy = bbmax.y - bbmin.y;3515 + double dz = bbmax.z - bbmin.z;3516 +3517 + double scale = Math.sqrt(dx*dx + dy*dy + dz*dz);3518 +3450 3519 for (int i=0; i<group.selection.size(); i++) 3451 3520 { 3452 3521 Object3D obj = group.selection.get(i); 3453 3522 3454 - LA.matTranslate(obj.toParent, i/2f, 0, 0);3455 - LA.matTranslateInv(obj.fromParent, -i/2f, 0, 0);3523 + LA.matTranslate(obj.toParent, i * scale, 0, 0);3524 + LA.matTranslateInv(obj.fromParent, -i * scale, 0, 0);3456 3525 } 3457 3526 3458 3527 refreshContents(); .. .. @@ -4474,6 +4543,26 @@ 4474 4543 makeSomething(csg); 4475 4544 } 4476 4545 4546 + void Ungroup(Object3D g)4547 + {4548 + if (g instanceof HiddenObject)4549 + {4550 + HiddenObject h = (HiddenObject) g;4551 +4552 + for (int i=0; i<h.ActualSize(); i++)4553 + {4554 + objEditor.makeSomething(h.get(i), false);4555 + }4556 + }4557 + else4558 + {4559 + for (int i=0; i<g.Size(); i++)4560 + {4561 + objEditor.makeSomething(g.get(i), false);4562 + }4563 + }4564 + }4565 +4477 4566 void ungroup() 4478 4567 { 4479 4568 /* .. .. @@ -4833,6 +4922,7 @@ 4833 4922 private MenuItem resetsupportItem; 4834 4923 private MenuItem resetreferencesItem; 4835 4924 private MenuItem linkverticesItem; 4925 + private MenuItem relinkverticesItem;4836 4926 private MenuItem setMasterItem; 4837 4927 private MenuItem resetMeshItem; 4838 4928 private MenuItem stepAllItem; .. .. @@ -4854,6 +4944,7 @@ 4854 4944 private MenuItem genNormalsMESHItem; 4855 4945 private MenuItem genNormalsCADItem; 4856 4946 private MenuItem genNormalsORGANItem; 4947 + private MenuItem genNormalsMINEItem;4857 4948 private MenuItem stripifyItem; 4858 4949 private MenuItem unstripifyItem; 4859 4950 private MenuItem trimItem; .. .. @@ -4895,6 +4986,7 @@ 4895 4986 private MenuItem resetCentroidItem; 4896 4987 private MenuItem transformgeometryItem; 4897 4988 private MenuItem resetTransformItem; 4989 + private MenuItem hideItem;4898 4990 private MenuItem grabItem; 4899 4991 private MenuItem backItem; 4900 4992 private MenuItem frontItem; .. .. @@ -4935,6 +5027,7 @@ 4935 5027 private MenuItem coneItem; 4936 5028 private MenuItem torusItem; 4937 5029 private MenuItem superItem; 5030 + private MenuItem kleinItem;4938 5031 private MenuItem blobItem; 4939 5032 private MenuItem latheItem; 4940 5033 private MenuItem bezierItem; .. .. @@ -4947,6 +5040,7 @@ 4947 5040 private MenuItem csgItem; 4948 5041 private MenuItem templateItem; 4949 5042 private MenuItem textureItem; 5043 + private MenuItem billboardItem;4950 5044 private MenuItem shadowXItem; 4951 5045 private MenuItem shadowYItem; 4952 5046 private MenuItem shadowZItem; HiddenObject.java
.. .. @@ -0,0 +1,39 @@ 1 +2 +class HiddenObject extends Object3D3 +{4 +static final long serialVersionUID = 0;5 +6 +static int globalcount = 1;7 +8 + HiddenObject()9 + {10 + this("Hidden" + globalcount++);11 + }12 +13 + HiddenObject(String name)14 + {15 + super(name);16 + }17 +18 + public int size()19 + {20 + return 0;21 + }22 +23 + public int Size()24 + {25 + return 0;26 + }27 +28 + public int ActualSize()29 + {30 + return super.size();31 + }32 +33 + HiddenObject deepCopy()34 + {35 + HiddenObject comp = new HiddenObject();36 + deepCopySelf(comp);37 + return comp;38 + }39 +}Klein.java
.. .. @@ -0,0 +1,200 @@ 1 +2 +class Klein extends Biparam implements java.io.Serializable3 +{4 +// void DrawNode(CameraPane display, Object3D /*Composite*/ root, boolean selected) {}5 +6 + static final long serialVersionUID = 0;7 +8 + double radius = 4;9 +10 + Klein()11 + {12 + this(true);13 + }14 +15 + Klein(Klein s)16 + {17 + s.deepCopySelf(this);18 + }19 +20 + public Klein(boolean recalc)21 + {22 + toParent = LA.newMatrix();23 + fromParent = LA.newMatrix();24 +25 + name = "Klein";26 + //uDivs = vDivs = 16;27 + uDivs = 32;28 + vDivs = 32;29 + minUDivs = 3;30 + minVDivs = 2;31 + //center = new cVector();32 + if (recalc)33 + {34 + retile();35 + recalculate();36 + }37 + }38 +39 + void refreshCenter(cVector c)40 + {41 + /**/42 + toParent[3][0] = c.x; // - center.x;43 + toParent[3][1] = c.y; // - center.y;44 + toParent[3][2] = c.z; // - center.z;45 +46 + fromParent[3][0] = -c.x; // + center.x;47 + fromParent[3][1] = -c.y; // + center.y;48 + fromParent[3][2] = -c.z; // + center.z;49 + /**/50 + //center.set(0,0,0);51 + }52 +53 + cVector getCenter()54 + {55 + //assert(center.x == 0);56 + //assert(center.y == 0);57 + //assert(center.z == 0);58 +59 + // if (center == null)60 + // center = new cVector();61 +62 + cVector c = new cVector(center);63 +64 + for (int i=GetTransformCount(); --i>=0;)65 + LA.xformPos(c, toParent, c);66 +67 + return c;68 + }69 +70 + Object3D deepCopy()71 + {72 + Sphere e = new Sphere();73 + deepCopySelf(e);74 + return e;75 + }76 +77 + protected void deepCopySelf(Object3D other)78 + {79 + super.deepCopySelf(other);80 + Klein e = (Klein) other;81 + if (center != null)82 + {83 + e.center = new cVector(center);84 + //LA.vecCopy(center, e.center);85 + }86 + e.radius = radius;87 + }88 +89 + void generatePOV(StringBuffer buffer)90 + {91 + generateNameComment(buffer);92 + generateIndent(buffer);93 + buffer.append("sphere { ");94 + // LA.toPOVRay(center, buffer);95 + buffer.append(", ");96 + // buffer.append(radius);97 + buffer.append("\n");98 + generateTransform(buffer);99 + generateIndent(buffer);100 + buffer.append("}\n");101 + }102 +103 + Vertex biparamFunction(double u, double v)104 + {105 + // KLEIN #!106 + /*107 + double uAng = LA.toRadians(-180*(1-u) + 180*u);108 + double vAng = LA.toRadians(-180*(1-v) + 180*v);109 +110 + // x = cos(u) (a + sin(v) cos(u/2) - sin(2v) sin(u/2)/2)111 + // y = sin(u) (a + sin(v) cos(u/2) - sin(2v) sin(u/2)/2)112 + // z = sin(u/2) sin(v) + cos(u/2) sin(2v)/2113 + //where114 + // -pi <= u <= pi115 + //and116 + // -pi <= v <= pi117 + double cosu = Math.cos(uAng);118 + double sinu = Math.sin(uAng);119 + double cosu2 = Math.cos(uAng/2);120 + double sinu2 = Math.sin(uAng/2);121 + double sinv = Math.sin(vAng);122 + double sin2v = Math.sin(vAng/2);123 +124 + double x = cosu * (handle + sinv * cosu2 - sin2v * sinu2 / 2);125 + double y = sinu * (handle + sinv * cosu2 - sin2v * sinu2 / 2);126 + double z = sinu2 * sinv + cosu2 * sin2v / 2;127 + */128 +129 + double uAng = LA.toRadians(u*360);130 + double vAng = LA.toRadians(v*360);131 +132 + double cosu = Math.cos(uAng);133 + double sinu = Math.sin(uAng);134 + double cosv = Math.cos(vAng);135 + double sinv = Math.sin(vAng);136 +137 + double r = radius * (1 - cosu / 2);138 +139 + double x = 6 * cosu * (1 + sinu);140 + double y = 16 * sinu;141 + double z = r * sinv;142 +143 + if (u < 0.5)144 + {145 + x += r * cosu * cosv;146 + y += r * sinu * cosv;147 + }148 + else149 + {150 + x += r * Math.cos(vAng + Math.PI);151 + }152 +153 + // y = -16 .. 20154 + r = radius * (20 - y)/36 * (1 - cosu / 2);155 +156 + x = 6 * cosu * (1 + sinu);157 + y = 16 * sinu;158 + z = r * sinv;159 +160 + if (u < 0.5)161 + {162 + x += r * cosu * cosv;163 + y += r * sinu * cosv;164 + }165 + else166 + {167 + x += r * Math.cos(vAng + Math.PI);168 + }169 +170 + Vertex temp = new Vertex();171 + temp.norm = LA.newVector(x, y, z);172 + //temp.pos = new cVector();173 + if (center != null)174 + LA.vecAdd(temp.norm, center, temp/*.pos*/);175 + else176 + LA.vecCopy(temp.norm, temp/*.pos*/);177 + LA.vecNormalize(temp.norm);178 +179 + return temp;180 + }181 +182 + void createEditWindow(GroupEditor callee, boolean newWindow)183 + {184 + //editWindow = (new SphereEditor(this, deepCopy(), callee)).GetEditor();185 + if (newWindow)186 + {187 + objectUI = new KleinEditor(this, deepCopy(), callee);188 + } else189 + {190 + objectUI = new KleinEditor(this, callee);191 + }192 +193 + editWindow = objectUI.GetEditor();194 + }195 +196 + boolean inside(double x, double y, double z, boolean xform)197 + {198 + return false;199 + }200 +}KleinEditor.java
.. .. @@ -0,0 +1,123 @@ 1 +// Decompiled by Jad v1.5.7b. Copyright 1997-99 Pavel Kouznetsov.2 +// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html3 +// Decompiler options: packimports(3)4 +// Source File Name: SphereEditor.java5 +6 +import java.awt.*;7 +import java.awt.event.*;8 +import javax.swing.*;9 +import javax.swing.event.*;10 +11 +class KleinEditor extends BiparamEditor implements ActionListener, ObjectUI12 +{13 + KleinEditor(Klein inSph, GroupEditor callee)14 + {15 + super(inSph, callee); // false);16 + //objEditor = new BiparamEditor(inSph, this, callee); // false);17 + objEditor = callee.GetEditor();18 + //parent = this;19 + klein = inSph;20 +21 + SetupUI2(objEditor);22 + }23 +24 + KleinEditor(Klein inSph, Object3D copy, GroupEditor callee)25 + {26 + super(inSph, copy, null, callee); // false);27 + //objEditor = new BiparamEditor(inSph, copy, this, callee); // false);28 + //parent = this;29 + objEditor = this;30 + klein = (Klein) copy;31 +32 + //SetupUI(objEditor);33 + }34 +35 + void SetupUI2(ObjEditor oe)36 + {37 + super.SetupUI2(oe);38 +39 + radiusField = AddSlider(oe.ctrlPanel, "Radius:", 0, 20.0, klein.radius, 1);40 + Return();41 + }42 +43 + void Clear()44 + {45 + objEditor.Clear();46 +47 + klein = null;48 + }49 +50 + /*51 + public void doLayout()52 + {53 + super.doLayout();54 + labelAndField(centerLabel, centerField);55 + labelAndField(radiusLabel, radiusField);56 + widgetPos += 5;57 + }58 + */59 +60 + /**/61 +// public void actionPerformed(ActionEvent e)62 +// {63 +// if (e.getSource() == centerField ||64 +// e.getSource() == radiusField)65 +// {66 +// applySelf();67 +// refreshContents();68 +// }69 +// else70 +// super.actionPerformed(e);71 +// }72 + /**/73 +74 + public void stateChanged(ChangeEvent e)75 + {76 + //System.out.println("Klein :: stateChanged");77 + if (e.getSource() == radiusField)78 + {79 + applySelf();80 + //super.applySelf();81 + objEditor.refreshContents();82 + //Refresh();83 + }84 + else85 + super.stateChanged(e);86 + }87 +88 + public void applySelf()89 + {90 + super.applySelf();91 +92 + klein.radius = radiusField.getFloat();93 + klein.recalculate();94 + }95 +96 + Klein klein;97 + NumberSlider radiusField;98 +99 + public ObjEditor GetEditor()100 + {101 + //new Exception().printStackTrace();102 + return objEditor; // .GetEditor();103 + }104 +105 + public void closeUI2()106 + {107 + objEditor.closeUI();108 + }109 +110 + public void closeUI()111 + {112 + Remove(radiusField);113 +114 + super.closeUI();115 + }116 +117 + void refreshContents2()118 + {119 + objEditor.refreshContents();120 + }121 +122 + //BiparamEditor objEditor;123 +}Mocap.java
.. .. @@ -2854,6 +2854,7 @@ 2854 2854 if (lastframetest == 0) 2855 2855 lastframetest = bvh.animation.getNumFrames(); 2856 2856 2857 + // WARNING: RESET DESTROYS EVERYTHING2857 2858 if (baseframe >= lastframetest) // july 2013 // - GetFirstFrame()) 2858 2859 { 2859 2860 System.out.println("MOCAP reset: " + this.GetFileRoot() + ObjEditor.java
.. .. @@ -1859,19 +1859,21 @@ 1859 1859 } 1860 1860 1861 1861 // Images/textures 1862 - if (textures1863 - && (filename.toLowerCase().endsWith(".jpg")1864 - || filename.toLowerCase().endsWith(".jpeg")1865 - || filename.toLowerCase().endsWith(".gif")1866 - || filename.toLowerCase().endsWith(".png")1867 - || filename.toLowerCase().endsWith(".tre")1868 - || filename.toLowerCase().endsWith(".bmp")1869 - || filename.toLowerCase().endsWith(".tga")1870 - || filename.toLowerCase().endsWith(".sgi")1871 - || filename.toLowerCase().endsWith(".tif")1872 - || filename.toLowerCase().endsWith(".tiff")))1862 + if (filename.toLowerCase().endsWith(".jpg")1863 + || filename.toLowerCase().endsWith(".jpeg")1864 + || filename.toLowerCase().endsWith(".gif")1865 + || filename.toLowerCase().endsWith(".png")1866 + || filename.toLowerCase().endsWith(".tre")1867 + || filename.toLowerCase().endsWith(".bmp")1868 + || filename.toLowerCase().endsWith(".tga")1869 + || filename.toLowerCase().endsWith(".sgi")1870 + || filename.toLowerCase().endsWith(".tif")1871 + || filename.toLowerCase().endsWith(".tiff"))1873 1872 { 1874 - DropTexture(filename);1873 + if (textures)1874 + DropTexture(filename);1875 + else1876 + CreateBillboard(filename);1875 1877 continue; 1876 1878 } 1877 1879 .. .. @@ -1882,6 +1884,60 @@ 1882 1884 ResetModel(); 1883 1885 } 1884 1886 1887 + void CreateBillboard(String filename)1888 + {1889 + Object3D source = null;1890 + Object3D group = copy;1891 +1892 + if (group.selection.size() > 0)1893 + {1894 + source = group.selection.get(0);1895 + }1896 +1897 + Grid grid = new Grid(1,1);1898 + grid.material = null;1899 +1900 + grid.toParent = LA.newMatrix();1901 + grid.fromParent = LA.newMatrix();1902 + LA.matYRotate(grid.toParent, Math.PI/2);1903 + LA.matXRotate(grid.toParent, -Math.PI/2);1904 + LA.matXRotate(grid.fromParent, Math.PI/2);1905 + LA.matYRotate(grid.fromParent, -Math.PI/2);1906 +1907 + BillboardNode bb = new BillboardNode();1908 + bb.addChild(grid);1909 +1910 + Object3D newgroup = new Object3D();1911 + newgroup.CreateMaterial();1912 +1913 + File file = new File(filename);1914 + newgroup.name = file.getName();1915 + newgroup.addChild(bb);1916 +1917 + Object3D main = newgroup;1918 +1919 + main.SetPigmentTexture(filename);1920 +1921 + if (source != null)1922 + {1923 + main.material = new cMaterial(source.material);1924 + if (main.projectedVertices.length < source.projectedVertices.length)1925 + {1926 + main.projectedVertices = new Object3D.cVector2[source.projectedVertices.length];1927 + }1928 +1929 + for (int i=0; i<source.projectedVertices.length; i++)1930 + {1931 + main.projectedVertices[i].x = source.projectedVertices[i].x;1932 + main.projectedVertices[i].y = source.projectedVertices[i].y;1933 + }1934 +1935 + main.texres = source.texres;1936 + }1937 +1938 + makeSomething(newgroup, false);1939 + }1940 +1885 1941 Point location; 1886 1942 1887 1943 void DropTexture(String filename) Object3D.java
.. .. @@ -355,7 +355,7 @@ 355 355 356 356 int MemorySize() 357 357 { 358 - if (memorysize == 0)358 + if (true) // memorysize == 0)359 359 { 360 360 try 361 361 { .. .. @@ -1446,7 +1446,16 @@ 1446 1446 // if (other == null) 1447 1447 // return; 1448 1448 1449 - System.out.println("Link support this = " + this + "; other = " + other);1449 + if (other != null)1450 + {1451 + BoundaryRep.SEUIL = other.material.cameralight;1452 +1453 + // Set default to 0.11454 + BoundaryRep.SEUIL /= 2;1455 + System.out.println("SEUIL = " + BoundaryRep.SEUIL);1456 + }1457 +1458 + System.out.println("Link this = " + this + "; support = " + other);1450 1459 1451 1460 //if (bRep != null) 1452 1461 // bRep.linkVerticesThis(other.bRep); .. .. @@ -1816,8 +1825,9 @@ 1816 1825 if (obj.name == null) 1817 1826 continue; // can't be a null one 1818 1827 1819 - //if (n.contains(obj.name)) // dec 2013 name.split(":")[0])) // Poser generates a count1820 - if (n.startsWith(obj.name))1828 + String name = obj.name.split(":")[0]; // Poser generates a count1829 + //if (n.startsWith(obj.name))1830 + if (n.contains(name))1821 1831 { 1822 1832 theobj = obj; 1823 1833 count++; .. .. @@ -2732,6 +2742,24 @@ 2732 2742 blockloop = false; 2733 2743 } 2734 2744 2745 + void GenNormalsMINE()2746 + {2747 + if (blockloop)2748 + return;2749 +2750 + blockloop = true;2751 + GenNormalsMINE0();2752 + for (int i = 0; i < Children().Size(); i++)2753 + {2754 + Object3D child = (Object3D) Children().get(i); // reserve(i);2755 + if (child == null)2756 + continue;2757 + child.GenNormalsMINE();2758 +// Children().release(i);2759 + }2760 + blockloop = false;2761 + }2762 +2735 2763 void ClearColors() 2736 2764 { 2737 2765 if (blockloop) .. .. @@ -2876,6 +2904,15 @@ 2876 2904 if (bRep != null) 2877 2905 { 2878 2906 bRep.GenerateNormals(crease); 2907 + Touch();2908 + }2909 + }2910 +2911 + void GenNormalsMINE0()2912 + {2913 + if (bRep != null)2914 + {2915 + bRep.GenerateNormalsMINE();2879 2916 Touch(); 2880 2917 } 2881 2918 } .. .. @@ -4111,7 +4148,7 @@ 4111 4148 if (blockloop) 4112 4149 return; 4113 4150 4114 - for (int i=0; i<size(); i++)4151 + for (int i=0; i<Size(); i++)4115 4152 { 4116 4153 if (get(i).parent != this) 4117 4154 { .. .. @@ -7733,7 +7770,7 @@ 7733 7770 if (parent == null) 7734 7771 { 7735 7772 System.out.println("NULL PARENT"); 7736 - new Exception().printStackTrace();7773 + //new Exception().printStackTrace();7737 7774 } else 7738 7775 { 7739 7776 if (parent instanceof BezierPatch) cMesh.java
.. .. @@ -355,7 +355,9 @@ 355 355 // DynamicNode handle = new DynamicNode(center.x, center.y, center.z, 0 /*0 , 1 or Float.MAX_VALUE*/, 0); 356 356 // Phys.addHandle(handle); 357 357 358 - for (int k=Phys.allNodes.size(); --k>=0;) // warning: "add handle" adds a node358 + int size = Phys.allNodes.size();359 +360 + for (int k=0; k < size; k++) // warning: "add handle" adds a node359 361 { 360 362 DynamicNode dn = Phys.allNodes.get(k); 361 363 DynamicNode handle = new DynamicNode(dn.position.x, dn.position.y, dn.position.z, 0 /*0 , 1 or Float.MAX_VALUE*/, 0); cSpring.java
.. .. @@ -1057,7 +1057,7 @@ 1057 1057 vect1.set(v); 1058 1058 LA.xformPos(vect1,toRoot,vect1); 1059 1059 1060 - handles.get(usedrep.VertexCount()-1-i).set(vect1);1060 + handles.get(i).set(vect1);1061 1061 } 1062 1062 } 1063 1063 .. .. @@ -2325,6 +2325,7 @@ 2325 2325 2326 2326 abstract Point3D forceOn(DynamicNode N); 2327 2327 } 2328 +2328 2329 Point3D force = new Point3D(); 2329 2330 Point3D dir = new Point3D(); 2330 2331