]> gerrit.simantics Code Review - simantics/3d.git/blob - org.jcae.opencascade/src-java-test/org/jcae/opencascade/jni/Jina2006.java
Reversing pipe runs was never implemented properly
[simantics/3d.git] / org.jcae.opencascade / src-java-test / org / jcae / opencascade / jni / Jina2006.java
1 package org.jcae.opencascade.jni;
2
3 import static org.junit.Assert.*;
4 import org.junit.Test;
5
6 import java.util.HashMap;
7
8 /**
9  * Workshop JINA 2006, Finite tilted Grid in front of a cavity
10  * @author Jerome Robert and Guillaume Sylvand
11  */
12 public class Jina2006
13 {
14         // Size of the grid
15         public final static int I_MAX=1;
16         public final static int J_MAX=10;
17         public final static int K_MAX=10;
18         
19         /**
20          * Used as index of edges of the grid  
21          */
22         static class IntEdge
23         {
24                 int i, j, k, i2, j2, k2;
25                 public IntEdge(int i, int j, int k, int i2, int j2, int k2)
26                 {
27                         this.i=i;
28                         this.j=j;
29                         this.k=k;
30                         this.i2=i2;
31                         this.j2=j2;
32                         this.k2=k2;
33
34                 }
35                 
36                 @Override
37                 public boolean equals(Object obj)
38                 {
39                         if (!(obj instanceof IntEdge))
40                                 return false;
41                         IntEdge other=(IntEdge)obj;                     
42                         return (i==other.i)&&(j==other.j)&&(k==other.k)
43                                 &&(i2==other.i2)&&(j2==other.j2)&&(k2==other.k2);
44                 }
45                 
46                 @Override
47                 public int hashCode()
48                 {
49                         return i+j+k+i2+j2+k2;
50                 }
51         }
52         
53         /** Coordinates on the grid */
54         static double[] coordinates(int i, int j, int k)
55         {
56                 double x=-(k-5)*0.03*Math.sin(15*Math.PI/180)+(i-1)*0.01;
57                 double y=(j-5)*0.03;
58                 double z=(k-5)*0.03;
59                 return new double[]{x, y, z};
60         }
61         
62         /** Easy creation of vertices */
63         static TopoDS_Vertex createVertex(double x, double y, double z)
64         {
65                 return (TopoDS_Vertex) new BRepBuilderAPI_MakeVertex(new double[]{x, y, z}).shape();
66         }
67
68         /** Easy creation of vertices */
69         static TopoDS_Vertex createVertex(double[] coords)
70         {
71                 return (TopoDS_Vertex) new BRepBuilderAPI_MakeVertex(coords).shape();
72         }
73
74         /** Easy creation of edges */
75         static TopoDS_Edge createEdge(TopoDS_Vertex v1, TopoDS_Vertex v2)
76         {
77                 return (TopoDS_Edge) new BRepBuilderAPI_MakeEdge(v1, v2).shape();
78         }
79         
80         /** Easy creation of faces */
81         static TopoDS_Face createFace(TopoDS_Edge e1, TopoDS_Edge e2, TopoDS_Edge e3, TopoDS_Edge e4)
82         {
83                 TopoDS_Wire wirePlate=
84                         (TopoDS_Wire) new BRepBuilderAPI_MakeWire(e1, e2, e3, e4).shape();
85                 return (TopoDS_Face) new BRepBuilderAPI_MakeFace(wirePlate, true).shape();
86         }
87         
88         /** Easy creation of faces */
89         static TopoDS_Face createFace(TopoDS_Shape wire)
90         {
91                 return (TopoDS_Face) new BRepBuilderAPI_MakeFace((TopoDS_Wire)wire, true).shape();
92         }
93         
94         @Test public void sample()
95         {
96                 HashMap int2edges=new HashMap();
97                 TopoDS_Vertex[][][] vertices=new TopoDS_Vertex[I_MAX+2][J_MAX+2][K_MAX+2];
98                 
99                 //The compound to return
100                 BRep_Builder bb=new BRep_Builder();
101                 TopoDS_Compound compound=new TopoDS_Compound();
102                 bb.makeCompound(compound);
103
104                 //Create vertices of the grid
105                 for(int i=0; i<I_MAX+2; i++)
106                 {
107                         for(int j=0; j<J_MAX+2; j++)
108                         {
109                                 for(int k=0; k<K_MAX+2; k++)
110                                         vertices[i][j][k]=createVertex(coordinates(i,j,k));
111                         }
112                 }
113
114                 //Create edges of the grid
115                 for(int i=0; i<I_MAX+1; i++)
116                 {
117                         for(int j=0; j<J_MAX+1; j++)
118                         {
119                                 for(int k=0; k<K_MAX+1; k++)
120                                 {                                       
121                                         TopoDS_Edge edge1=createEdge(vertices[i][j][k], vertices[i+1][j][k]);
122                                         int2edges.put(new IntEdge(i,j,k,i+1,j,k), edge1);
123                                         TopoDS_Edge edge2=createEdge(vertices[i][j][k], vertices[i][j+1][k]);
124                                         int2edges.put(new IntEdge(i,j,k,i,j+1,k), edge2);
125                                         TopoDS_Edge edge3=createEdge(vertices[i][j][k], vertices[i][j][k+1]);
126                                         int2edges.put(new IntEdge(i,j,k,i,j,k+1), edge3);
127                                 }
128                         }
129                 }
130                 
131                 //Create faces of the grid
132                 for(int i=0; i<I_MAX; i++)
133                 for(int j=0; j<J_MAX+1; j++)
134                 for(int k=0; k<K_MAX+1; k++)
135                 {       
136                         {
137                                 //face1
138                                 TopoDS_Edge edge1=(TopoDS_Edge) int2edges.get(new IntEdge(i, j,  k, i, j+1, k));
139                                 TopoDS_Edge edge2=(TopoDS_Edge) int2edges.get(new IntEdge(i, j+1,k, i+1, j+1, k));
140
141                                 TopoDS_Edge edge3=(TopoDS_Edge) int2edges.get(new IntEdge(i+1, j,  k, i+1, j+1, k));
142
143                                 TopoDS_Edge edge4=(TopoDS_Edge) int2edges.get(new IntEdge(i, j,  k, i+1, j,   k));                              
144                                 if(edge1!=null && edge2!=null && edge3!=null && edge4!=null)
145                                 {
146                                         bb.add(compound, createFace(edge1, edge2, edge3, edge4));
147                                 }
148                         }
149                         {
150                                 //face2
151                                 TopoDS_Edge edge1=(TopoDS_Edge) int2edges.get(new IntEdge(i, j,  k, i, j, k+1));
152                                 TopoDS_Edge edge2=(TopoDS_Edge) int2edges.get(new IntEdge(i, j,k+1, i+1, j, k+1));
153                                 TopoDS_Edge edge3=(TopoDS_Edge) int2edges.get(new IntEdge(i+1, j,  k, i+1, j, k+1));
154                                 TopoDS_Edge edge4=(TopoDS_Edge) int2edges.get(new IntEdge(i, j,  k, i+1, j,   k));                              
155                                 if(edge1!=null && edge2!=null && edge3!=null && edge4!=null)
156                                 {
157                                         bb.add(compound, createFace(edge1, edge2, edge3, edge4));
158                                 }
159                         }                       
160                 }
161                 
162                 // Face X-
163                 TopoDS_Vertex p1=createVertex(-0.15,0.15,0.15);
164                 TopoDS_Vertex p2=createVertex(-0.15,0.15,-0.15);
165                 TopoDS_Vertex p3=createVertex(-0.15,-0.15,-0.15);
166                 TopoDS_Vertex p4=createVertex(-0.15,-0.15,0.15);
167                 TopoDS_Edge e1=createEdge(p1,p2);
168                 TopoDS_Edge e2=createEdge(p2,p3);
169                 TopoDS_Edge e3=createEdge(p3,p4);
170                 TopoDS_Edge e4=createEdge(p4,p1);
171                 bb.add(compound, createFace(e1, e2, e3, e4));
172                 
173                 TopoDS_Edge eYpZp=createEdge(vertices[0][J_MAX][K_MAX], p1);
174                 TopoDS_Edge eYpZm=createEdge(vertices[0][J_MAX][0], p2);
175                 TopoDS_Edge eYmZm=createEdge(vertices[0][0][0], p3);
176                 TopoDS_Edge eYmZp=createEdge(vertices[0][0][K_MAX], p4);
177                 
178                 // Face Z-
179                 BRepBuilderAPI_MakeWire mw=new BRepBuilderAPI_MakeWire();
180                 for(int j=0; j<J_MAX ; j++)
181                 {
182                         TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, j,  0, 0, j+1, 0));
183                         mw.add(aEdge);
184                 } // end on 0,11,00
185                 mw.add(eYpZm); 
186                 mw.add(e2);
187                 mw.add((TopoDS_Edge) eYmZm.reversed());
188                 bb.add(compound, createFace(mw.shape()));
189                 
190                 // Face Z+
191                 mw=new BRepBuilderAPI_MakeWire();
192                 for(int j=0; j<J_MAX ; j++)
193                 {
194                         TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, j,  K_MAX, 0, j+1, K_MAX));
195                         mw.add(aEdge);
196                 } //end on 0, 11, 11
197                 mw.add(eYpZp); 
198                 mw.add((TopoDS_Edge) e4.reversed());
199                 mw.add((TopoDS_Edge) eYmZp.reversed());
200                 bb.add(compound, createFace(mw.shape()));
201
202                 // Face Y-
203                 mw=new BRepBuilderAPI_MakeWire();
204                 for(int k=0; k<K_MAX ; k++)
205                 {
206                         TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, 0,  k, 0, 0, k+1));
207                         mw.add(aEdge);
208                 } // end on 0,0,11
209                 mw.add(eYmZp); 
210                 mw.add((TopoDS_Edge) e3.reversed());
211                 mw.add((TopoDS_Edge) eYmZm.reversed());
212                 bb.add(compound, createFace(mw.shape()));
213                 
214                 // Face Y+
215                 mw=new BRepBuilderAPI_MakeWire();
216                 for(int k=0; k<K_MAX ; k++)
217                 {
218                         TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, J_MAX,  k, 0, J_MAX, k+1));
219                         mw.add(aEdge);
220                 } // end on 0,11,11
221                 mw.add(eYpZp); 
222                 mw.add(e1);
223                 mw.add((TopoDS_Edge) eYpZm.reversed());
224                 bb.add(compound, createFace(mw.shape()));
225                 
226                 BRepTools.write(compound, "/tmp/JINA-2006-6.brep");
227         }
228 }