1 package org.jcae.opencascade.jni;
3 import static org.junit.Assert.*;
6 import java.util.HashMap;
9 * Workshop JINA 2006, Finite tilted Grid in front of a cavity
10 * @author Jerome Robert and Guillaume Sylvand
15 public final static int I_MAX=1;
16 public final static int J_MAX=10;
17 public final static int K_MAX=10;
20 * Used as index of edges of the grid
24 int i, j, k, i2, j2, k2;
25 public IntEdge(int i, int j, int k, int i2, int j2, int k2)
37 public boolean equals(Object obj)
39 if (!(obj instanceof IntEdge))
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);
49 return i+j+k+i2+j2+k2;
53 /** Coordinates on the grid */
54 static double[] coordinates(int i, int j, int k)
56 double x=-(k-5)*0.03*Math.sin(15*Math.PI/180)+(i-1)*0.01;
59 return new double[]{x, y, z};
62 /** Easy creation of vertices */
63 static TopoDS_Vertex createVertex(double x, double y, double z)
65 return (TopoDS_Vertex) new BRepBuilderAPI_MakeVertex(new double[]{x, y, z}).shape();
68 /** Easy creation of vertices */
69 static TopoDS_Vertex createVertex(double[] coords)
71 return (TopoDS_Vertex) new BRepBuilderAPI_MakeVertex(coords).shape();
74 /** Easy creation of edges */
75 static TopoDS_Edge createEdge(TopoDS_Vertex v1, TopoDS_Vertex v2)
77 return (TopoDS_Edge) new BRepBuilderAPI_MakeEdge(v1, v2).shape();
80 /** Easy creation of faces */
81 static TopoDS_Face createFace(TopoDS_Edge e1, TopoDS_Edge e2, TopoDS_Edge e3, TopoDS_Edge e4)
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();
88 /** Easy creation of faces */
89 static TopoDS_Face createFace(TopoDS_Shape wire)
91 return (TopoDS_Face) new BRepBuilderAPI_MakeFace((TopoDS_Wire)wire, true).shape();
94 @Test public void sample()
96 HashMap int2edges=new HashMap();
97 TopoDS_Vertex[][][] vertices=new TopoDS_Vertex[I_MAX+2][J_MAX+2][K_MAX+2];
99 //The compound to return
100 BRep_Builder bb=new BRep_Builder();
101 TopoDS_Compound compound=new TopoDS_Compound();
102 bb.makeCompound(compound);
104 //Create vertices of the grid
105 for(int i=0; i<I_MAX+2; i++)
107 for(int j=0; j<J_MAX+2; j++)
109 for(int k=0; k<K_MAX+2; k++)
110 vertices[i][j][k]=createVertex(coordinates(i,j,k));
114 //Create edges of the grid
115 for(int i=0; i<I_MAX+1; i++)
117 for(int j=0; j<J_MAX+1; j++)
119 for(int k=0; k<K_MAX+1; k++)
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);
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++)
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));
141 TopoDS_Edge edge3=(TopoDS_Edge) int2edges.get(new IntEdge(i+1, j, k, i+1, j+1, k));
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)
146 bb.add(compound, createFace(edge1, edge2, edge3, edge4));
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)
157 bb.add(compound, createFace(edge1, edge2, edge3, edge4));
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));
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);
179 BRepBuilderAPI_MakeWire mw=new BRepBuilderAPI_MakeWire();
180 for(int j=0; j<J_MAX ; j++)
182 TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, j, 0, 0, j+1, 0));
187 mw.add((TopoDS_Edge) eYmZm.reversed());
188 bb.add(compound, createFace(mw.shape()));
191 mw=new BRepBuilderAPI_MakeWire();
192 for(int j=0; j<J_MAX ; j++)
194 TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, j, K_MAX, 0, j+1, K_MAX));
198 mw.add((TopoDS_Edge) e4.reversed());
199 mw.add((TopoDS_Edge) eYmZp.reversed());
200 bb.add(compound, createFace(mw.shape()));
203 mw=new BRepBuilderAPI_MakeWire();
204 for(int k=0; k<K_MAX ; k++)
206 TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, 0, k, 0, 0, k+1));
210 mw.add((TopoDS_Edge) e3.reversed());
211 mw.add((TopoDS_Edge) eYmZm.reversed());
212 bb.add(compound, createFace(mw.shape()));
215 mw=new BRepBuilderAPI_MakeWire();
216 for(int k=0; k<K_MAX ; k++)
218 TopoDS_Edge aEdge=(TopoDS_Edge) int2edges.get(new IntEdge(0, J_MAX, k, 0, J_MAX, k+1));
223 mw.add((TopoDS_Edge) eYpZm.reversed());
224 bb.add(compound, createFace(mw.shape()));
226 BRepTools.write(compound, "/tmp/JINA-2006-6.brep");