]> gerrit.simantics Code Review - simantics/3d.git/blob - org.jcae.opencascade/src-java-test/org/jcae/opencascade/jni/HoleFilletChamfer.java
Remove dependencies on log4j
[simantics/3d.git] / org.jcae.opencascade / src-java-test / org / jcae / opencascade / jni / HoleFilletChamfer.java
1 package org.jcae.opencascade.jni;
2
3 import static org.junit.Assert.*;
4 import org.junit.Test;
5
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.HashSet;
9
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;*/
25
26
27 /**
28  * A dirty static class to show what are holes, chamfer and fillet
29  * @author Jerome Robert
30  */
31 public class HoleFilletChamfer
32 {
33         /** Return the list of face owning the given edge */
34         private static TopoDS_Face[] getFace(TopoDS_Shape shape, TopoDS_Edge edge)
35         {
36                 ArrayList toReturn=new ArrayList();
37                 TopExp_Explorer exp=new TopExp_Explorer(shape, TopAbs_ShapeEnum.FACE);          
38                 while(exp.more())
39                 {
40                         TopoDS_Face face=(TopoDS_Face) exp.current();                   
41                         HashSet edges = new HashSet(Arrays.asList(getEdges(face)));
42                         if(edges.contains(edge))
43                                 toReturn.add(face);
44                         exp.next();
45                 }
46                 return (TopoDS_Face[]) toReturn.toArray(new TopoDS_Face[toReturn.size()]);              
47         }
48         
49         private static TopoDS_Edge[] getEdges(TopoDS_Shape face)
50         {
51                 HashSet toReturn=new HashSet();
52                 TopExp_Explorer exp=new TopExp_Explorer(face, TopAbs_ShapeEnum.EDGE);           
53                 while(exp.more())
54                 {
55                         toReturn.add(exp.current());
56                         exp.next();
57                 }
58                 return (TopoDS_Edge[]) toReturn.toArray(new TopoDS_Edge[toReturn.size()]);
59         }
60         
61         private static TopoDS_Shape createCuttedBox()
62         {
63                 TopoDS_Shape box1 = new BRepPrimAPI_MakeBox(
64                         new double[3], new double[]{4, 3, 2}).shape();
65
66                 TopoDS_Shape box2 = new BRepPrimAPI_MakeBox(
67                         new double[]{-1,-1,-1}, new double[]{3, 2, 1}).shape();
68                 
69                 return new BRepAlgoAPI_Cut(box1, box2).shape();         
70         }
71         
72         private static TopoDS_Shape createVerticalCylinder(double radius, double x, double y, double height)
73         {
74                 BRepPrimAPI_MakeCylinder cyl1=new BRepPrimAPI_MakeCylinder(
75                 new double[]{x,y,2,0,0,-1}, radius, height, Math.PI*2); 
76                 return cyl1.shape();
77         }
78         
79         private static TopoDS_Shape makeHole(TopoDS_Shape shape)
80         {
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();
87                 
88                 return toReturn;
89         }
90         
91         @Test public void sample()
92         {
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++)
97                 {
98                         fillet.add(0.1, edges[i]);
99                 }               
100                 
101                 BRepFilletAPI_MakeChamfer chamfer = new BRepFilletAPI_MakeChamfer(cuttedBox);
102                 for(int i=0; i<edges.length; i++)
103                 {
104                         chamfer.add(0.1, edges[i], getFace(cuttedBox, edges[i])[0]);
105                 }
106
107                 TopoDS_Shape holled=makeHole(cuttedBox);
108                 //displayAll(cuttedBox, fillet.shape(), chamfer.shape(), holled);
109                 
110                 //try the new Opencascade 6.2 tool to remove the hole 
111                 ShapeUpgrade_RemoveInternalWires sr=new ShapeUpgrade_RemoveInternalWires(holled);
112                 sr.setMinArea(1);
113                 sr.setRemoveFaceMode(true);
114                 sr.perform();
115                 BRepTools.write(sr.getResult(), "/tmp/toto.brep");
116         }
117
118         // 3D display
119         /*private static View view1, view2, view3, view4;
120         
121         private static View createView(TopoDS_Shape shape, Window w)
122         {
123                 final View cadView=new View(w);                                                 
124                 ViewableCAD fcad=new ViewableCAD(new OCCProvider(shape));
125                 cadView.add(fcad);
126                 cadView.fitAll();
127                 cadView.addPositionListener(new PositionListener(){
128
129                         public void positionChanged()
130                         {
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());
136                         }});
137                 
138                 return cadView;
139         }
140                 
141         
142         private static void displayAll(TopoDS_Shape s1, TopoDS_Shape s2, TopoDS_Shape s3, TopoDS_Shape s4)
143         {
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));
149                 
150                 view1=createView(s1, cadFrame);
151                 view2=createView(s2, cadFrame);
152                 view3=createView(s3, cadFrame);
153                 view4=createView(s4, cadFrame);
154                 p.add(view1);
155                 p.add(view2);
156                 p.add(view3);
157                 p.add(view4);
158                 //view4.setMouseMode(ViewBehavior.CLIP_RECTANGLE_MODE);
159                 view4.addKeyListener(new KeyAdapter()
160                 {
161                         public void keyPressed(KeyEvent e)
162                         {
163                                 if(e.getKeyCode()!=KeyEvent.VK_SPACE)
164                                         return;
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));
171                                 view1.move(t3d);
172                                 view2.move(t3d);
173                                 view3.move(t3d);
174                                 view4.move(t3d);
175                         }
176                 });
177                 cadFrame.setVisible(true);
178         }*/
179 }