[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool CatmullClarkActionListener.java,1.1,1.
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Michael L. <he...@us...> - 2006-01-30 10:04:59
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18105/src/net/sourceforge/bprocessor/gl/tool Modified Files: CatmullClarkActionListener.java SpaceTool.java CatmullClark.java Log Message: Cylinder Example Index: SpaceTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SpaceTool.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** SpaceTool.java 23 Jan 2006 10:16:22 -0000 1.8 --- SpaceTool.java 30 Jan 2006 10:04:45 -0000 1.9 *************** *** 12,18 **** --- 12,21 ---- import java.awt.event.ActionListener; import java.awt.event.MouseEvent; + import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; + import java.util.LinkedList; + import java.util.List; import java.util.Set; *************** *** 27,30 **** --- 30,35 ---- import net.sourceforge.bprocessor.model.Constraints; import net.sourceforge.bprocessor.model.CoordinateSystem; + import net.sourceforge.bprocessor.model.Edge; + import net.sourceforge.bprocessor.model.Modellor; import net.sourceforge.bprocessor.model.Project; import net.sourceforge.bprocessor.model.Space; *************** *** 94,97 **** --- 99,114 ---- ); menu.add(offsetItem); + + menu.addSeparator(); + + JMenuItem cylinderItem = new JMenuItem("Cylinder"); + cylinderItem.addActionListener(new MenuAction() { + public void actionPerformed(ActionEvent event) { + createCylinder(selection); + } + } + ); + menu.add(cylinderItem); + return menu; } *************** *** 196,199 **** --- 213,316 ---- } + /** + * The cylinder class parametrically generates a cylinder. + */ + public class Cylinder implements Modellor { + + /** radius */ + private double radius = 1.0; + + /** height */ + private double height = 1.0; + + /** axis divisions */ + private int axisDivisions = 12; + + /** height divisions */ + private int heightDivisions = 1; + + /** cap divisions */ + private int capDivisions = 1; + + /*** + * Generate a Cylinder + */ + public void generate() { + /** Origin */ + Vertex o = new Vertex(0, 0, 0); + /** Bottom vertices */ + Vertex[] bv = new Vertex[axisDivisions]; + /** Top vertices */ + Vertex[] tv = new Vertex[axisDivisions]; + /** Bottom edges */ + Edge[] be = new Edge[axisDivisions]; + /** Top edges */ + Edge te[] = new Edge[axisDivisions]; + /** Side edges */ + Edge se[] = new Edge[axisDivisions]; + /** Side faces */ + Surface sf[] = new Surface[axisDivisions]; + + Surface top; + Surface bottom; + + for (int i = 0; i < axisDivisions; i++) { + double angle = ((2 * Math.PI) * i) / (double) axisDivisions; + double x = radius * Math.cos(angle) + o.getX(); + double y = radius * Math.sin(angle) + o.getY(); + double z = o.getZ(); + bv[i] = new Vertex(x, y, z); + tv[i] = new Vertex(x, y, z + height); + Project.getInstance().add(bv[i]); + Project.getInstance().add(tv[i]); + } + + for (int i = 0; i < axisDivisions; i++) { + be[i] = new Edge(bv[i], bv[(i + 1) % axisDivisions]); + Project.getInstance().add(be[i]); + } + + for (int i = 0; i < axisDivisions; i++) { + te[i] = new Edge(tv[i], tv[(i + 1) % axisDivisions]); + Project.getInstance().add(te[i]); + } + + for (int i = 0; i < axisDivisions; i++) { + se[i] = new Edge(bv[i], tv[i]); + Project.getInstance().add(se[i]); + } + + for (int i = 0; i < axisDivisions; i++) { + List edges = new LinkedList(); + edges.add(be[i]); + edges.add(se[(i + 1) % axisDivisions]); + edges.add(te[i]); + edges.add(se[i]); + sf[i] = new Surface(edges); + Project.getInstance().add(sf[i]); + } + { + List edges = new LinkedList(Arrays.asList(be)); + bottom = new Surface(edges); + Project.getInstance().add(bottom); + } + { + List edges = new LinkedList(Arrays.asList(te)); + top = new Surface(edges); + Project.getInstance().add(top); + } + } + + } + + /** + * Create a cylinder + * @param objects The selection + */ + protected void createCylinder(Collection objects) { + Modellor modellor = new Cylinder(); + modellor.generate(); + } + /** * Creates the correct type popup menu. Index: CatmullClark.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CatmullClark.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CatmullClark.java 27 Jan 2006 11:42:47 -0000 1.5 --- CatmullClark.java 30 Jan 2006 10:04:45 -0000 1.6 *************** *** 20,24 **** import net.sourceforge.bprocessor.model.Edge; import net.sourceforge.bprocessor.model.Space; - import net.sourceforge.bprocessor.model.Modellor; import net.sourceforge.bprocessor.model.Surface; import net.sourceforge.bprocessor.model.Vertex; --- 20,23 ---- *************** *** 27,31 **** * CatmullClark subdivision */ ! public class CatmullClark implements Modellor { /** The space */ --- 26,30 ---- * CatmullClark subdivision */ ! public class CatmullClark { /** The space */ Index: CatmullClarkActionListener.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CatmullClarkActionListener.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CatmullClarkActionListener.java 28 Nov 2005 22:24:50 -0000 1.1 --- CatmullClarkActionListener.java 30 Jan 2006 10:04:45 -0000 1.2 *************** *** 35,39 **** */ public void actionPerformed(ActionEvent event) { ! space.setModellor(new CatmullClark(space)); } --- 35,39 ---- */ public void actionPerformed(ActionEvent event) { ! } |