public void draw(DrawModel d) { view.detach(); rotation.removeAllChildren(); drawModel = d; if (drawModel.getPicture() == null) return; Integer i = 0; for (VisualShape v : drawModel.getPicture()) { TransformGroup shapeGroup = new TransformGroup(); rotation.addChild(shapeGroup); BranchGroup faces = v.getFaces2(BranchGroup.class); BranchGroup edges = v.getEdges2(BranchGroup.class); BranchGroup text = v.getText2(BranchGroup.class); if (faces == null && edges == null) continue; i++; if (faces != null) { faces.detach(); rotation.addChild(faces); faces.setPickable(true); faces.setUserData(v); faces.setCapability(TransformGroup.ENABLE_PICK_REPORTING); faces.setName(i.toString()); } if (edges != null) { edges.detach(); rotation.addChild(edges); edges.setPickable(true); edges.setUserData(v); edges.setCapability(TransformGroup.ENABLE_PICK_REPORTING); edges.setName(i.toString()); } if (text != null) { text.detach(); rotation.addChild(text); text.setPickable(false); if (text instanceof BranchGroup) { BranchGroup bg = (BranchGroup) text; for (int j = 0; j < bg.numChildren(); j++) { Node child = bg.getChild(j); if (child instanceof TransformGroup) { TransformGroup tg = (TransformGroup) child; tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); textLabels.add(tg); } } } // edges.setUserData(v); // edges.setCapability(TransformGroup.ENABLE_PICK_REPORTING); // edges.setName(i.toString()); } } root.addChild(view); }
public void actionPerformed(ActionEvent actionEvent) { String cmd = actionEvent.getActionCommand(); if ("Console" .equals( cmd)) { // opens a window to read the coordinates of a point that is added to the point // set. new InputPanelPointApplet(this); } else if ("Select_Point" .equals(cmd)) { // opens a window with the list of points. One is to be selected. new SelectPointPanelApplet(this); } else if ("Select_Cell" .equals(cmd)) { // opens a window with the list of cells. One is to be selected. // new SelectCellPanelApplet(this); } else if ("Random Point".equals(cmd)) { // adds random point to the point set /* com.artchase.geom3d.Point3d pointToAdd = new com.artchase.geom3d.Point3d(randGen); int size = getCells().getVertices().getSize(); Vertex v = new Vertex(pointToAdd, size); getCells().getVertices().insert(v); addSphere(v, 0.02f, Colors.red); getCells().setNrVertices(size+1); */ } else if ("Selected_Point_Move".equals(cmd)) { // new SelectedPointMovePanel(this); } else if ("Selected_Cell_Adjacent".equals(cmd)) { /* if (selectedCell != null) { System.out.println("selectedCell is not null"); if (selectedAdjCell != null) { System.out.println("adjacentCellShown is TRUE"); selectedAdjCell.changeAppearance(1, LineAttributes.PATTERN_SOLID, Colors.yellow); selectedAdjCell = null; } System.out.println("adjacentCellShown is FALSE"); if (cells.getNrCells() > 0) { System.out.println("Number of cells is " + cells.getNrCells()); int nrIter = 0; do { nrIter++; selectedAdjCellIndex = (++selectedAdjCellIndex)%4; System.out.println("selectedAdjCellIndex = " + selectedAdjCellIndex); selectedAdjCell = selectedCell.getAdjCell(selectedAdjCellIndex); } while (selectedAdjCell.isInfiniteCell() && (nrIter < 4)); if (!selectedAdjCell.isInfiniteCell()) { // adjacent cell found System.out.println("i am here displaying cell " + selectedAdjCellIndex); selectedAdjCell.changeAppearance(5, LineAttributes.PATTERN_SOLID, Colors.magenta); } else selectedAdjCell = null; // all adjacent cells are infinite } } */ } else if ("Selected_Cell_Circumcircle".equals(cmd)) { /* if (circumCircleShown) { circumCircleBranchGroup.detach(); circumCircleShown = false; } else { com.artchase.geom3d.Point3d[] points = selectedCell.getPoints(); Sphere3d sphere = new Sphere3d(points[0],points[1],points[2],points[3]); com.artchase.geom3d.Point3d center = sphere.getCenter(); circumCircleBranchGroup = addSphere(center, sphere.getRadius(), Colors.green); circumCircleShown = true; } */ } else if ("Random".equals(cmd)) { complex.clear(); spin.removeAllChildren(); setNrSpannedVerticesField(0); setNrEdgesField(0); setNrFacesField(0); setNrCellsField(0); // Open window to get the number of random points to be generated. new InputPanelRandomApplet(this); } else if ("Clear".equals(cmd)) { complex.clear(); spin.removeAllChildren(); setNrSpannedVerticesField(0); setNrEdgesField(0); setNrFacesField(0); setNrCellsField(0); selectedSimplex = null; selectedAdjCell = null; count2 = count3 = 0; } else if ("Run".equals(cmd)) { Simplex simplex; if (!complex.getPoints().isEmpty() && complex.isEmpty()) { simplex = complex.first3Simplex(); // addTriangle(simplex,Colors.yellow); while (!complex.getStack().isEmpty()) complex.next4Simplex(); /* int size = complex.simplicies[3].getSize(); for (int i = 0; i < size; i++) { simplex = (Simplex)complex.simplicies[3].get(i); addTetrahedron(simplex,Colors.yellow); } */ complex.computeAlphaValues(); SorterSelection sorter = new SorterSelection(); SortToolSimplexAlpha sortTool = new SortToolSimplexAlpha(); sorter.Sort(complex.getSimplicies()[1], sortTool, false); sorter.Sort(complex.getSimplicies()[2], sortTool, false); sorter.Sort(complex.getSimplicies()[3], sortTool, false); complex.toConsole(complex.getSimplicies()[1]); complex.toConsole(complex.getSimplicies()[2]); complex.toConsole(complex.getSimplicies()[3]); } /* if (!complex.points.isEmpty()) { while (!complex.stack.isEmpty()) complex.next4Simplex(); int size = complex.simplicies[3].getSize(); for (int i = 0; i < size; i++) { simplex = (Simplex)complex.simplicies[3].get(i); addTetrahedron(simplex,Colors.yellow); } } */ } else if ("Step".equals(cmd)) stepSimplicies3(); // stepSimplicies23 also available else if ("Step1".equals(cmd)) { if (complex.isEmpty()) { Simplex simplex = complex.first3Simplex(); addTriangle(simplex, Colors.yellow); } Simplex simplex = complex.next4Simplex(); if (simplex != null) addTetrahedron(simplex, Colors.yellow); } else if ("Save".equals(cmd)) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("data")); PrintWriter out = new PrintWriter(bw); int size = complex.getPoints().getSize(); Point3d p; for (int i = 0; i < size; i++) { p = (Point3d) complex.getPoints().get(i); out.print(p.getX() + " " + p.getY() + " " + p.getZ() + '\n'); } out.close(); } catch (IOException e) { System.out.println("IOException error!"); e.printStackTrace(); } } else if ("Load".equals(cmd)) { complex.clear(); spin.removeAllChildren(); geom3d.PointSet3d points = new PointSet3d("data"); int size = points.getSize(); Point3d point; for (int i = 0; i < size; i++) { point = (Point3d) points.get(i); complex.getPoints().insert(point); Simplex simplex = new Simplex(i); complex.insert(simplex); addSphere(simplex, 0.02f, Colors.red); } } else if ("PDB".equals(cmd)) { complex.clear(); spin.removeAllChildren(); Protein protein = new Protein("1CR4", 0, true); PointSet3d points = protein.getPointSet(); points.translate(points.getCentroid()); int size = points.getSize(); Point3d point; for (int i = 0; i < size; i++) { point = (Point3d) points.get(i); complex.getPoints().insert(point); Simplex simplex = new Simplex(i); complex.insert(simplex); addSphere(simplex, 0.02f, Colors.red); } // new InputPanelPDBApplet(this); } else if ("Point".equals(cmd)) { /* ap.setPolygonAttributes(new PolygonAttributes(PolygonAttributes.POLYGON_POINT, PolygonAttributes.CULL_BACK, 0)); ap.setPointAttributes(new PointAttributes(5, false)); } else if ("Line".equals(cmd)) { /* ap.setPolygonAttributes(new PolygonAttributes(PolygonAttributes.POLYGON_LINE, PolygonAttributes.CULL_BACK, 0)); ap.setLineAttributes(new LineAttributes(2, LineAttributes.PATTERN_DASH,false)); */ } else if ("Polygon".equals(cmd)) { // ap.setPolygonAttributes(new PolygonAttributes(PolygonAttributes.POLYGON_FILL, // PolygonAttributes.CULL_BACK, 0)); } else if ("Gouraud".equals(cmd)) { /* ColoringAttributes ca = new ColoringAttributes(); ca.setShadeModel(ColoringAttributes.SHADE_GOURAUD); ap.setColoringAttributes(ca); ap.setMaterial(null); RenderingAttributes ra = new RenderingAttributes(); ra.setIgnoreVertexColors(false); ap.setRenderingAttributes(ra); */ } else if ("Lighting".equals(cmd)) { /* ap.setMaterial(new Material()); RenderingAttributes ra = new RenderingAttributes(); ra.setIgnoreVertexColors(true); ap.setRenderingAttributes(ra); */ } }