[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/view PopupMenu.java, 1.56, 1.57
Status: Pre-Alpha
Brought to you by:
henryml
From: Sebastian G. <sg...@us...> - 2011-12-29 17:59:49
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/view In directory vz-cvs-4.sog:/tmp/cvs-serv5728/src/net/sourceforge/bprocessor/gl/view Modified Files: PopupMenu.java Log Message: catmull clark runs - still minor mistakes computed when subdividing 2d shapes... Index: PopupMenu.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/view/PopupMenu.java,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** PopupMenu.java 21 Dec 2011 15:23:04 -0000 1.56 --- PopupMenu.java 29 Dec 2011 17:59:47 -0000 1.57 *************** *** 61,64 **** --- 61,66 ---- import org.apache.log4j.Logger; + import com.sun.net.ssl.internal.ssl.Debug; + /** *************** *** 717,721 **** { ! AbstractAction quadDivide = new GeometricMenuAction(arguments, "Subdivision Constant Quads") { Space owner; public void actionPerformed(ActionEvent arg0) { --- 719,723 ---- { ! AbstractAction quadDivide = new GeometricMenuAction(arguments, "Constant Quads") { Space owner; public void actionPerformed(ActionEvent arg0) { *************** *** 815,819 **** //Geometric first = arguments.iterator().next(); ! AbstractAction SiepinskiDivide = new GeometricMenuAction(arguments, "Subdivision Sierpinski") { Space owner; --- 817,821 ---- //Geometric first = arguments.iterator().next(); ! AbstractAction SiepinskiDivide = new GeometricMenuAction(arguments, "Sierpinski") { Space owner; *************** *** 923,929 **** - //NOT YET WORKING, WHY??? { ! AbstractAction catmullClark = new GeometricMenuAction(arguments, "Subdivision CatmullClark") { //http://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface Space owner; --- 925,930 ---- { ! AbstractAction catmullClark = new GeometricMenuAction(arguments, "CatmullClark") { //http://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface Space owner; *************** *** 934,939 **** cVertices.add(e.getTo().copy()); cVertices.add(e.getFrom().copy()); ! for (Surface s : cSurfaces) { ! cVertices.add(s.center().copy()); } Vertex eCenter = new Vertex(0,0,0); --- 935,944 ---- cVertices.add(e.getTo().copy()); cVertices.add(e.getFrom().copy()); ! if ((isPointFix(e.getTo())==false) || (isPointFix(e.getFrom())==false)) { ! if (cSurfaces.size()>1) { ! for (Surface s : cSurfaces) { ! cVertices.add(s.center().copy()); ! } ! } } Vertex eCenter = new Vertex(0,0,0); *************** *** 941,945 **** eCenter=eCenter.add(v); } ! eCenter=eCenter.scale(1/cVertices.size()); return eCenter; } --- 946,951 ---- eCenter=eCenter.add(v); } ! double s = (double) cVertices.size(); ! eCenter=eCenter.scale(1/s); return eCenter; } *************** *** 948,956 **** Vertex f = new Vertex(0,0,0); Collection<Surface> fSurfaces= p.getSurfaces(); ! if (fSurfaces.size()>0) { for (Surface s : fSurfaces) { ! f=f.add(s.center()); } ! f=f.scale(1/fSurfaces.size()); } else { f = p.copy(); --- 954,963 ---- Vertex f = new Vertex(0,0,0); Collection<Surface> fSurfaces= p.getSurfaces(); ! if (fSurfaces.size()>1) { for (Surface s : fSurfaces) { ! f=f.add(s.center().copy()); } ! double s = (double) fSurfaces.size(); ! f=f.scale(1/s); } else { f = p.copy(); *************** *** 963,970 **** Collection<Edge> pEdges= p.getEdges(); if (pEdges.size()>0) { ! for (Edge e : pEdges) { ! r.add(e.center()); ! } ! r.scale(1/pEdges.size()); } else { r = p.copy(); --- 970,978 ---- Collection<Edge> pEdges= p.getEdges(); if (pEdges.size()>0) { ! for (Edge e : pEdges) { ! r=r.add(e.center().copy()); ! } ! double s = (double) pEdges.size(); ! r=r.scale(1.0/s); } else { r = p.copy(); *************** *** 973,976 **** --- 981,1020 ---- } + public boolean isPointFix(Vertex p) { + boolean pointIsFix = false; + Collection<Edge> cEdges= p.getEdges(); + for (Edge e : cEdges) { + Vertex vE; + if (e.getFrom().coincides(p)) { + vE = e.getFrom().minus(e.getTo()); + } else { + vE = e.getTo().minus(e.getFrom()); + } + vE.normalize(); + for (Edge k : cEdges) { + if (!e.getFrom().coincides(k.getFrom())) { + Vertex vK; + if (k.getTo().coincides(p)) { + vK = k.getFrom().minus(k.getTo()); + } else { + vK = k.getTo().minus(k.getFrom()); + } + vK.normalize(); + if (vK.coincides(vE)) { + Collection<Surface> eSurfaces = e.getSurfaces(); + Collection<Surface> kSurfaces = k.getSurfaces(); + if ((eSurfaces.size() ==1) && (kSurfaces.size()==1)){ + pointIsFix = true; + } + } + } + } + } + if (p.isCorner()) { + pointIsFix = true; + } + return pointIsFix; + } + public void actionPerformed(ActionEvent arg0) { *************** *** 984,988 **** Surface surface = (Surface) current; owner = surface.getOwner(); - Vertex sNormal = surface.normal(); Collection<Edge> sEdges = surface.getEdges(); //save surface center --- 1028,1031 ---- *************** *** 997,1000 **** --- 1040,1044 ---- Edge previous = (Edge) lEdges.get(lEdges.size()-1); + for (Edge sE : lEdges) { List <Edge> nEdges = new ArrayList<Edge>(); *************** *** 1017,1034 **** corner = sE.getTo(); } - - //move corner point - Vertex f = CatMullClarkAverageFacePoints(corner); - Vertex r = CatMullClarkAverageEdgePoints(corner); - - double n = corner.getSurfaces().size(); - Vertex p = corner.copy(); - r=r.scale(2); - p=p.scale(n-3); - corner = f.copy(); - corner=corner.add(r); - corner=corner.add(p); - corner=corner.scale(1/n); //add new Edges Edge nE = new Edge(eCenter,sCenter); --- 1061,1107 ---- corner = sE.getTo(); } + double x = corner.getX(); + double y = corner.getY(); + double z = corner.getZ(); + + //check if corner point is at an edge of a 2d shape - any adjacent edge has only 1 surface attached + //if corner point is "corner" point then don't move neither + + if (isPointFix(corner)==false) { + //move corner point + Vertex f = CatMullClarkAverageFacePoints(corner); + Vertex r = CatMullClarkAverageEdgePoints(corner); + + double n = (double) corner.getEdges().size(); + + if ((f.coincides(corner)) || (corner.getEdges().size()>corner.getSurfaces().size())) { + //this does not yet work... + n = 5.0; + x = (1 * r.getX() + (2) * corner.getX()) / 3; + y = (1 * r.getY() + (2) * corner.getY()) / 3; + z = (1 * r.getZ() + (2) * corner.getZ()) / 3; + } else { + x = (f.getX() + 2 * r.getX() + (n-3) * corner.getX()) / n; + y = (f.getY() + 2 * r.getY() + (n-3) * corner.getY()) / n; + z = (f.getZ() + 2 * r.getZ() + (n-3) * corner.getZ()) / n; + } + System.out.println("n: " + n); + System.out.println("x: " + x); + System.out.println("y: " + y); + System.out.println("z: " + z); + System.out.println("f.x: " + f.getX()); + System.out.println("f.y: " + f.getY()); + System.out.println("f.z: " + f.getZ()); + System.out.println("r.x: " + r.getX()); + System.out.println("r.y: " + r.getY()); + System.out.println("r.z: " + r.getZ()); + System.out.println("c.x: " + corner.getX()); + System.out.println("c.y: " + corner.getY()); + System.out.println("c.z: " + corner.getZ()); + } + + Vertex c = new Vertex(x,y,z); + //add new Edges Edge nE = new Edge(eCenter,sCenter); *************** *** 1038,1045 **** nEdges.add(nE.copy()); ! nE = new Edge(pCenter,corner); nEdges.add(nE.copy()); ! nE = new Edge(corner, eCenter); nEdges.add(nE.copy()); --- 1111,1118 ---- nEdges.add(nE.copy()); ! nE = new Edge(pCenter,c); nEdges.add(nE.copy()); ! nE = new Edge(c, eCenter); nEdges.add(nE.copy()); *************** *** 1074,1081 **** Project.getInstance().changed(); } //Project.getInstance().changed(Geometric.collect(entities)); Project.getInstance().checkpoint(); //now add all the new surfaces to the original geometry ! for (Surface s : newSurfaces) { owner.insertAll(s); --- 1147,1155 ---- Project.getInstance().changed(); } + //Project.getInstance().changed(Geometric.collect(entities)); Project.getInstance().checkpoint(); //now add all the new surfaces to the original geometry ! for (Surface s : newSurfaces) { owner.insertAll(s); *************** *** 1084,1087 **** --- 1158,1162 ---- Project.getInstance().changed(); } + } }; |