1 package org.jcae.opencascade.jni;
3 import static org.junit.Assert.*;
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.HashSet;
10 // Packages for 3D display
11 /*import java.awt.Container;
12 import java.awt.GridLayout;
13 import java.awt.Window;
14 import java.awt.event.KeyAdapter;
15 import java.awt.event.KeyEvent;
16 import javax.media.j3d.Transform3D;
17 import javax.swing.JFrame;
18 import javax.swing.WindowConstants;
19 import javax.vecmath.Matrix4d;
20 import org.jcae.viewer3d.PositionListener;
21 import org.jcae.viewer3d.View;
22 import org.jcae.viewer3d.ViewBehavior;
23 import org.jcae.viewer3d.cad.ViewableCAD;
24 import org.jcae.viewer3d.cad.occ.OCCProvider;*/
28 * A dirty static class to show what are holes, chamfer and fillet
29 * @author Jerome Robert
31 public class HoleFilletChamfer
33 /** Return the list of face owning the given edge */
34 private static TopoDS_Face[] getFace(TopoDS_Shape shape, TopoDS_Edge edge)
36 ArrayList toReturn=new ArrayList();
37 TopExp_Explorer exp=new TopExp_Explorer(shape, TopAbs_ShapeEnum.FACE);
40 TopoDS_Face face=(TopoDS_Face) exp.current();
41 HashSet edges = new HashSet(Arrays.asList(getEdges(face)));
42 if(edges.contains(edge))
46 return (TopoDS_Face[]) toReturn.toArray(new TopoDS_Face[toReturn.size()]);
49 private static TopoDS_Edge[] getEdges(TopoDS_Shape face)
51 HashSet toReturn=new HashSet();
52 TopExp_Explorer exp=new TopExp_Explorer(face, TopAbs_ShapeEnum.EDGE);
55 toReturn.add(exp.current());
58 return (TopoDS_Edge[]) toReturn.toArray(new TopoDS_Edge[toReturn.size()]);
61 private static TopoDS_Shape createCuttedBox()
63 TopoDS_Shape box1 = new BRepPrimAPI_MakeBox(
64 new double[3], new double[]{4, 3, 2}).shape();
66 TopoDS_Shape box2 = new BRepPrimAPI_MakeBox(
67 new double[]{-1,-1,-1}, new double[]{3, 2, 1}).shape();
69 return new BRepAlgoAPI_Cut(box1, box2).shape();
72 private static TopoDS_Shape createVerticalCylinder(double radius, double x, double y, double height)
74 BRepPrimAPI_MakeCylinder cyl1=new BRepPrimAPI_MakeCylinder(
75 new double[]{x,y,2,0,0,-1}, radius, height, Math.PI*2);
79 private static TopoDS_Shape makeHole(TopoDS_Shape shape)
81 TopoDS_Shape h1 = createVerticalCylinder(0.05, 0.4, 0.5, 2);
82 TopoDS_Shape h2 = createVerticalCylinder(0.1, 0.7, 0.5, 0.5);
83 TopoDS_Shape h3 = createVerticalCylinder(0.07, 3.5, 0.5, 1.9);
84 TopoDS_Shape toReturn = new BRepAlgoAPI_Cut(shape, h1).shape();
85 toReturn = new BRepAlgoAPI_Cut(toReturn, h2).shape();
86 toReturn = new BRepAlgoAPI_Cut(toReturn, h3).shape();
91 @Test public void sample()
93 TopoDS_Shape cuttedBox=createCuttedBox();
94 BRepFilletAPI_MakeFillet fillet = new BRepFilletAPI_MakeFillet(cuttedBox);
95 TopoDS_Edge[] edges = getEdges(cuttedBox);
96 for(int i=0; i<edges.length; i++)
98 fillet.add(0.1, edges[i]);
101 BRepFilletAPI_MakeChamfer chamfer = new BRepFilletAPI_MakeChamfer(cuttedBox);
102 for(int i=0; i<edges.length; i++)
104 chamfer.add(0.1, edges[i], getFace(cuttedBox, edges[i])[0]);
107 TopoDS_Shape holled=makeHole(cuttedBox);
108 //displayAll(cuttedBox, fillet.shape(), chamfer.shape(), holled);
110 //try the new Opencascade 6.2 tool to remove the hole
111 ShapeUpgrade_RemoveInternalWires sr=new ShapeUpgrade_RemoveInternalWires(holled);
113 sr.setRemoveFaceMode(true);
115 BRepTools.write(sr.getResult(), "/tmp/toto.brep");
119 /*private static View view1, view2, view3, view4;
121 private static View createView(TopoDS_Shape shape, Window w)
123 final View cadView=new View(w);
124 ViewableCAD fcad=new ViewableCAD(new OCCProvider(shape));
127 cadView.addPositionListener(new PositionListener(){
129 public void positionChanged()
131 System.out.println(cadView.where());
132 view1.move(cadView.where());
133 view2.move(cadView.where());
134 view3.move(cadView.where());
135 view4.move(cadView.where());
142 private static void displayAll(TopoDS_Shape s1, TopoDS_Shape s2, TopoDS_Shape s3, TopoDS_Shape s4)
144 JFrame cadFrame=new JFrame();
145 cadFrame.setSize(800,600);
146 cadFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
147 Container p = cadFrame.getContentPane();
148 p.setLayout(new GridLayout(2,2));
150 view1=createView(s1, cadFrame);
151 view2=createView(s2, cadFrame);
152 view3=createView(s3, cadFrame);
153 view4=createView(s4, cadFrame);
158 //view4.setMouseMode(ViewBehavior.CLIP_RECTANGLE_MODE);
159 view4.addKeyListener(new KeyAdapter()
161 public void keyPressed(KeyEvent e)
163 if(e.getKeyCode()!=KeyEvent.VK_SPACE)
165 view4.setMouseMode(ViewBehavior.DEFAULT_MODE);
166 Transform3D t3d=new Transform3D();
167 t3d.set(new Matrix4d(0.807441418753272, -0.12841821107377785, -0.5758012837310318, -9.570716029950235,
168 -0.5857562663771008, -0.2906520518814561, -0.7565784699137629, -13.674618670515233,
169 -0.07019937094913933, 0.948172003278784, -0.30990627698811507, -5.144127106635848,
170 0.0, 0.0, 0.0, 1.0));
177 cadFrame.setVisible(true);