]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.opencascade/src/org/simantics/opencascade/OccTriangulator.java
Updated OpenCASCADE to 7.3.0
[simantics/3d.git] / org.simantics.opencascade / src / org / simantics / opencascade / OccTriangulator.java
index 3cc0ff4dd5af0bbbca829a300b890ee8b9a90415..5226eb8329836784002b1018445074ca843b31ca 100644 (file)
-package org.simantics.opencascade;\r
-\r
-/*******************************************************************************\r
- * Copyright (c) 2007, 2013- VTT Technical Research Centre of Finland.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-\r
-import javax.vecmath.Vector2d;\r
-\r
-import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;\r
-import org.jcae.opencascade.jni.BRepBuilderAPI_MakeFace;\r
-import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;\r
-import org.jcae.opencascade.jni.BRepBuilderAPI_Transform;\r
-import org.jcae.opencascade.jni.BRepPrimAPI_MakePrism;\r
-import org.jcae.opencascade.jni.BRepPrimAPI_MakeTorus;\r
-import org.jcae.opencascade.jni.BRep_Builder;\r
-import org.jcae.opencascade.jni.GP_Elips;\r
-import org.jcae.opencascade.jni.GP_Trsf;\r
-import org.jcae.opencascade.jni.TopoDS_Edge;\r
-import org.jcae.opencascade.jni.TopoDS_Face;\r
-import org.jcae.opencascade.jni.TopoDS_Shape;\r
-import org.jcae.opencascade.jni.TopoDS_Wire;\r
-\r
-\r
-public class OccTriangulator {\r
-\r
-    \r
-    public static final double MIN_VALUE = 0.001;\r
-    \r
-    public OccTriangulator() {\r
-        \r
-    }\r
-\r
-\r
-    public static TopoDS_Shape getShapeFromFile(String filename) {\r
-        assert (filename != null);\r
-        String lowerFileName = filename.toLowerCase(); \r
-        if (lowerFileName.endsWith(".stp") || lowerFileName.endsWith(".step")) {\r
-            TopoDS_Shape shape = importSTEP(filename);\r
-            return shape;\r
-        } else if (lowerFileName.endsWith(".iges")) {\r
-            TopoDS_Shape shape = importIGES(filename);\r
-            return shape;\r
-        } else if (lowerFileName.endsWith(".brep")) {\r
-            TopoDS_Shape shape = importBREP(filename);\r
-            return shape;\r
-        } else {\r
-            throw new UnsupportedOperationException("Unsupported format " + filename);\r
-        }\r
-    }\r
-\r
-    public static TopoDS_Shape importBREP(String filename) {\r
-               return importBREP(filename,1.0); // convert to meters.\r
-    }\r
-    public static TopoDS_Shape importBREP(String filename, double scale) {\r
-        org.jcae.opencascade.jni.BRep_Builder aBuilder = new org.jcae.opencascade.jni.BRep_Builder();\r
-        org.jcae.opencascade.jni.TopoDS_Shape myShape = org.jcae.opencascade.jni.BRepTools.read(filename, aBuilder);\r
-        aBuilder.delete();\r
-        if (Math.abs(scale-1.0) < 0.001)\r
-               return myShape;\r
-        TopoDS_Shape scaled = makeScale(myShape, scale);\r
-        myShape.delete();\r
-        return scaled;\r
-    }\r
-\r
-    public static TopoDS_Shape importIGES(String filename) {\r
-        org.jcae.opencascade.jni.IGESControl_Reader aReader = new org.jcae.opencascade.jni.IGESControl_Reader();\r
-        aReader.setReadUnitM();\r
-        aReader.readFile(filename.getBytes());\r
-        aReader.clearShapes();\r
-        aReader.transferRoots();\r
-        TopoDS_Shape result = aReader.oneShape();\r
-        aReader.delete();\r
-        return result;\r
-    }\r
-    \r
-    public static TopoDS_Shape importSTEP(String filename) {\r
-        org.jcae.opencascade.jni.STEPControl_Reader aReader = new org.jcae.opencascade.jni.STEPControl_Reader();\r
-        aReader.setReadUnitM();\r
-        aReader.readFile(filename.getBytes());\r
-        aReader.clearShapes();\r
-        aReader.transferRoots();\r
-        TopoDS_Shape result = aReader.oneShape();\r
-        aReader.delete();\r
-        return result;\r
-    }\r
-\r
-\r
-\r
-    public static TopoDS_Shape makeTranslation(TopoDS_Shape aShape, double x, double y, double z) {\r
-        GP_Trsf theTransformation = new GP_Trsf();\r
-        theTransformation.setTranslation(new double[] { x, y, z });\r
-        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);\r
-\r
-        TopoDS_Shape shape = bt.shape();\r
-        bt.delete();\r
-        theTransformation.delete();\r
-        return shape;\r
-    }\r
-\r
-    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double r1, double r2) {\r
-        double[] axe = new double[6];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();\r
-        torus.delete();\r
-        return tds;\r
-    }\r
-    \r
-\r
-    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double[] dirStruct2, double r1, double r2) {\r
-        double[] axe = new double[9];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        System.arraycopy(dirStruct2, 0, axe, 6, 3);\r
-        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();\r
-        torus.delete();\r
-        return tds;\r
-    }\r
-    \r
-    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double r1, double r2, double angle1, double angle2, double angle) {\r
-        double[] axe = new double[6];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2,angle1,angle2,angle);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();\r
-        torus.delete();\r
-        return tds;\r
-    }\r
-    \r
-    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double[] dirStruct2,  double r1, double r2, double angle1, double angle2, double angle) {\r
-        double[] axe = new double[9];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        System.arraycopy(dirStruct2, 0, axe, 6, 3);\r
-        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2,angle1,angle2,angle);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();\r
-        torus.delete();\r
-        return tds;\r
-    }\r
-\r
-    public static TopoDS_Shape makeSphere(double x, double y, double z, double radius) {\r
-        double[] c = new double[] { x, y, z };\r
-        org.jcae.opencascade.jni.BRepPrimAPI_MakeSphere sphere = new org.jcae.opencascade.jni.BRepPrimAPI_MakeSphere(c, radius);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = sphere.shape();\r
-        sphere.delete();\r
-        return tds;\r
-    }\r
-\r
-\r
-    public static TopoDS_Shape makeRotation(TopoDS_Shape aShape, double[] axisStruct, double angle) {\r
-\r
-        GP_Trsf theTransformation = new GP_Trsf();\r
-        theTransformation.setRotation(axisStruct, angle);\r
-        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);\r
-        TopoDS_Shape shape = bt.shape();\r
-        bt.delete();\r
-        theTransformation.delete();\r
-        return shape;\r
-    }\r
-\r
-    public static TopoDS_Shape makeScale(TopoDS_Shape aShape, double s) {\r
-\r
-        GP_Trsf theTransformation = new GP_Trsf();\r
-        theTransformation.setValues(s, 0, 0, 0,\r
-                                           0, s, 0, 0, \r
-                                           0, 0, s, 0, 1, 1);\r
-        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);\r
-        TopoDS_Shape shape = bt.shape();\r
-        bt.delete();\r
-        theTransformation.delete();\r
-        return shape;\r
-    }\r
-\r
-\r
-    public static TopoDS_Shape makeCylinder(double[] pointStruct, double[] dirStruct, double radius, double height) {\r
-        double[] axe = new double[6];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        org.jcae.opencascade.jni.BRepPrimAPI_MakeCylinder cyl = new org.jcae.opencascade.jni.BRepPrimAPI_MakeCylinder(axe, radius, height, 2 * Math.PI);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = cyl.shape();\r
-        cyl.delete();\r
-        return tds;\r
-    }\r
-\r
-    public static TopoDS_Shape makeCopy(TopoDS_Shape topoDS_Shape) {\r
-        throw new UnsupportedOperationException();\r
-    }\r
-\r
-    public static TopoDS_Shape makeCone(double[] pointStruct, double[] dirStruct, double radius1, double radius2, double height) {\r
-        double[] axe = new double[6];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        org.jcae.opencascade.jni.BRepPrimAPI_MakeCone cone = new org.jcae.opencascade.jni.BRepPrimAPI_MakeCone(axe, radius1, radius2, height, 2 * Math.PI);\r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = cone.shape();\r
-        cone.delete();\r
-        return tds;\r
-    }\r
-\r
-    public static TopoDS_Shape makeCompound(TopoDS_Shape[] shapes) {\r
-        BRep_Builder builder = new BRep_Builder();\r
-        org.jcae.opencascade.jni.TopoDS_Compound comp = new org.jcae.opencascade.jni.TopoDS_Compound();\r
-        builder.makeCompound(comp);\r
-        for (int i = 0; i < shapes.length; i++) {\r
-\r
-            builder.add(comp, shapes[i]);\r
-        }\r
-        builder.delete();\r
-        return comp;\r
-    }\r
-\r
-\r
-    public static TopoDS_Shape makeBox(double x1, double y1, double z1, double x2, double y2, double z2) {\r
-        double[] p1 = new double[] { x1, y1, z1 };\r
-        double[] p2 = new double[] { x2, y2, z2 };\r
-        org.jcae.opencascade.jni.BRepPrimAPI_MakeBox box = new org.jcae.opencascade.jni.BRepPrimAPI_MakeBox(p1, p2); \r
-        org.jcae.opencascade.jni.TopoDS_Shape tds = box.shape();\r
-        box.delete();\r
-        return tds;\r
-    }\r
-\r
-    public static TopoDS_Shape makeCut(TopoDS_Shape shape1, TopoDS_Shape shape2) {\r
-       org.jcae.opencascade.jni.BRepAlgoAPI_Cut cut = new org.jcae.opencascade.jni.BRepAlgoAPI_Cut(shape1, shape2);\r
-        org.jcae.opencascade.jni.TopoDS_Shape s = cut.shape();\r
-        cut.delete();\r
-        return s;\r
-    }\r
-    \r
-    public static TopoDS_Shape makeCommon(TopoDS_Shape shape1, TopoDS_Shape shape2) {\r
-       org.jcae.opencascade.jni.BRepAlgoAPI_Common common = new org.jcae.opencascade.jni.BRepAlgoAPI_Common(shape1, shape2); \r
-        org.jcae.opencascade.jni.TopoDS_Shape s = common.shape();\r
-        common.delete();\r
-        return s;\r
-    }\r
-    \r
-    public static TopoDS_Shape makeFuse(TopoDS_Shape shape1, TopoDS_Shape shape2) {\r
-       org.jcae.opencascade.jni.BRepAlgoAPI_Fuse fuse = new org.jcae.opencascade.jni.BRepAlgoAPI_Fuse(shape1, shape2);\r
-        org.jcae.opencascade.jni.TopoDS_Shape s = fuse.shape();\r
-        fuse.delete();\r
-        return s;\r
-    }\r
-\r
-    \r
-    public static TopoDS_Shape makeWedge(double[] pointStruct, double[] dirStruct,double dx, double dy, double dz, double xmin, double zmin, double xmax, double zmax) {\r
-        double[] axe = new double[6];\r
-        System.arraycopy(pointStruct, 0, axe, 0, 3);\r
-        System.arraycopy(dirStruct, 0, axe, 3, 3);\r
-        \r
-        org.jcae.opencascade.jni.BRepPrimAPI_MakeWedge wedge = new org.jcae.opencascade.jni.BRepPrimAPI_MakeWedge(axe,  dx,  dy,  dz,  xmin,  zmin, xmax, zmax); \r
-        org.jcae.opencascade.jni.TopoDS_Shape s = wedge.shape();\r
-        wedge.delete();\r
-        return s;\r
-    }\r
-    \r
-    public static TopoDS_Shape makeEllipticCylinder(double h, double r1, double r2) {\r
-       GP_Elips ellipse;\r
-               if (r1 < r2) {\r
-                       // FIXME : ellipse should be rotated, but current JNI won't allow it since Ax2 is not separate object\r
-                       ellipse = new GP_Elips(new double[]{0.0,-h*0.5,0.0,0.0,1.0,0.0},r2,r1);\r
-               } else {\r
-                       ellipse = new GP_Elips(new double[]{0.0,-h*0.5,0.0,0.0,1.0,0.0},r1,r2);\r
-               }\r
-               BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(ellipse);\r
-               TopoDS_Edge ed = (TopoDS_Edge) edge.shape();\r
-               BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire(ed);\r
-               TopoDS_Wire w = (TopoDS_Wire) wire.shape();\r
-               BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w); \r
-        TopoDS_Face F = (TopoDS_Face) face.shape();\r
-        BRepPrimAPI_MakePrism prism = new BRepPrimAPI_MakePrism(F, new double[] { 0.0, h, 0.0 }); \r
-        TopoDS_Shape shape = prism.shape();\r
-        ellipse.delete();\r
-        edge.delete();\r
-        wire.delete();\r
-        face.delete();\r
-        ed.delete();\r
-        w.delete();\r
-        F.delete();\r
-        prism.delete();\r
-        return shape;\r
-    }\r
-\r
-    public static TopoDS_Shape makeReqularPrism(double h, double r, int n) {\r
-       if (n < 3)\r
-               n = 3;\r
-       Vector2d vertices[] = new Vector2d[n];\r
-               for (int i = 0; i < n; i++) {\r
-                       vertices[i] = new Vector2d(Math.sin(Math.PI * 2.0 * i / n)*r,Math.cos(Math.PI * 2.0 * i / n)*r);\r
-               }\r
-               BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();\r
-               for (int i = 0; i < n; i++) {\r
-                       Vector2d v1 = vertices[i];\r
-                       Vector2d v2 = vertices[(i+1)%n];\r
-                       BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{v1.x,-h*0.5,v1.y},new double[]{v2.x,-h*0.5,v2.y}); \r
-                       wire.add((TopoDS_Edge)edge.shape());\r
-                       edge.delete();\r
-               }\r
-               TopoDS_Wire w = (TopoDS_Wire)wire.shape();\r
-               \r
-               BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w);\r
-               TopoDS_Face F = (TopoDS_Face) face.shape();\r
-               face.delete();\r
-               \r
-               BRepPrimAPI_MakePrism prism = new BRepPrimAPI_MakePrism(F, new double[] { 0.0, h, 0.0 }); \r
-        TopoDS_Shape shape = prism.shape();    \r
-        prism.delete();\r
-        \r
-        wire.delete();\r
-        w.delete();\r
-        F.delete();\r
-        return shape;\r
-    }\r
\r
-\r
-    public static void exportBREP(TopoDS_Shape shape, String filename) {\r
-        org.jcae.opencascade.jni.BRepTools.write(shape, filename);\r
-    }\r
-    \r
-}\r
+package org.simantics.opencascade;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2013- VTT Technical Research Centre of Finland.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+
+import javax.vecmath.Vector2d;
+
+import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;
+import org.jcae.opencascade.jni.BRepBuilderAPI_MakeFace;
+import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;
+import org.jcae.opencascade.jni.BRepBuilderAPI_Transform;
+import org.jcae.opencascade.jni.BRepPrimAPI_MakePrism;
+import org.jcae.opencascade.jni.BRepPrimAPI_MakeTorus;
+import org.jcae.opencascade.jni.BRep_Builder;
+import org.jcae.opencascade.jni.GP_Elips;
+import org.jcae.opencascade.jni.GP_Trsf;
+import org.jcae.opencascade.jni.TopoDS_Edge;
+import org.jcae.opencascade.jni.TopoDS_Face;
+import org.jcae.opencascade.jni.TopoDS_Shape;
+import org.jcae.opencascade.jni.TopoDS_Wire;
+
+
+public class OccTriangulator {
+
+    
+    public static final double MIN_VALUE = 0.001;
+    
+    public OccTriangulator() {
+        
+    }
+
+
+    public static TopoDS_Shape getShapeFromFile(String filename) {
+        assert (filename != null);
+        String lowerFileName = filename.toLowerCase(); 
+        if (lowerFileName.endsWith(".stp") || lowerFileName.endsWith(".step")) {
+            TopoDS_Shape shape = importSTEP(filename);
+            return shape;
+        } else if (lowerFileName.endsWith(".iges")) {
+            TopoDS_Shape shape = importIGES(filename);
+            return shape;
+        } else if (lowerFileName.endsWith(".brep")) {
+            TopoDS_Shape shape = importBREP(filename);
+            return shape;
+        } else {
+            throw new UnsupportedOperationException("Unsupported format " + filename);
+        }
+    }
+
+    public static TopoDS_Shape importBREP(String filename) {
+               return importBREP(filename,1.0); // convert to meters.
+    }
+    public static TopoDS_Shape importBREP(String filename, double scale) {
+        org.jcae.opencascade.jni.BRep_Builder aBuilder = new org.jcae.opencascade.jni.BRep_Builder();
+        org.jcae.opencascade.jni.TopoDS_Shape myShape = org.jcae.opencascade.jni.BRepTools.read(filename, aBuilder);
+        aBuilder.delete();
+        if (Math.abs(scale-1.0) < 0.001)
+               return myShape;
+        TopoDS_Shape scaled = makeScale(myShape, scale);
+        myShape.delete();
+        return scaled;
+    }
+
+    public static TopoDS_Shape importIGES(String filename) {
+        org.jcae.opencascade.jni.IGESControl_Reader aReader = new org.jcae.opencascade.jni.IGESControl_Reader();
+        aReader.setReadUnitM();
+        aReader.readFile(filename.getBytes());
+        aReader.clearShapes();
+        aReader.transferRoots();
+        TopoDS_Shape result = aReader.oneShape();
+        aReader.delete();
+        return result;
+    }
+    
+    public static TopoDS_Shape importSTEP(String filename) {
+        org.jcae.opencascade.jni.STEPControl_Reader aReader = new org.jcae.opencascade.jni.STEPControl_Reader();
+        aReader.setReadUnitM();
+        aReader.readFile(filename.getBytes());
+        aReader.clearShapes();
+        aReader.transferRoots();
+        TopoDS_Shape result = aReader.oneShape();
+        aReader.delete();
+        return result;
+    }
+
+
+
+    public static TopoDS_Shape makeTranslation(TopoDS_Shape aShape, double x, double y, double z) {
+        GP_Trsf theTransformation = new GP_Trsf();
+        theTransformation.setTranslation(new double[] { x, y, z });
+        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);
+
+        TopoDS_Shape shape = bt.shape();
+        bt.delete();
+        theTransformation.delete();
+        return shape;
+    }
+
+    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double r1, double r2) {
+        double[] axe = new double[6];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();
+        torus.delete();
+        return tds;
+    }
+    
+
+    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double[] dirStruct2, double r1, double r2) {
+        double[] axe = new double[9];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        System.arraycopy(dirStruct2, 0, axe, 6, 3);
+        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();
+        torus.delete();
+        return tds;
+    }
+    
+    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double r1, double r2, double angle1, double angle2, double angle) {
+        double[] axe = new double[6];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2,angle1,angle2,angle);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();
+        torus.delete();
+        return tds;
+    }
+    
+    public static TopoDS_Shape makeTorus(double[] pointStruct, double[] dirStruct, double[] dirStruct2,  double r1, double r2, double angle1, double angle2, double angle) {
+        double[] axe = new double[9];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        System.arraycopy(dirStruct2, 0, axe, 6, 3);
+        BRepPrimAPI_MakeTorus torus = new BRepPrimAPI_MakeTorus(axe, r1, r2,angle1,angle2,angle);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = torus.shape();
+        torus.delete();
+        return tds;
+    }
+
+    public static TopoDS_Shape makeSphere(double x, double y, double z, double radius) {
+        double[] c = new double[] { x, y, z };
+        org.jcae.opencascade.jni.BRepPrimAPI_MakeSphere sphere = new org.jcae.opencascade.jni.BRepPrimAPI_MakeSphere(c, radius);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = sphere.shape();
+        sphere.delete();
+        return tds;
+    }
+
+
+    public static TopoDS_Shape makeRotation(TopoDS_Shape aShape, double[] axisStruct, double angle) {
+
+        GP_Trsf theTransformation = new GP_Trsf();
+        theTransformation.setRotation(axisStruct, angle);
+        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);
+        TopoDS_Shape shape = bt.shape();
+        bt.delete();
+        theTransformation.delete();
+        return shape;
+    }
+
+    public static TopoDS_Shape makeScale(TopoDS_Shape aShape, double s) {
+
+        GP_Trsf theTransformation = new GP_Trsf();
+        theTransformation.setValues(s, 0, 0, 0,
+                                           0, s, 0, 0, 
+                                           0, 0, s, 0);
+        BRepBuilderAPI_Transform bt = new BRepBuilderAPI_Transform(aShape, theTransformation, true);
+        TopoDS_Shape shape = bt.shape();
+        bt.delete();
+        theTransformation.delete();
+        return shape;
+    }
+
+
+    public static TopoDS_Shape makeCylinder(double[] pointStruct, double[] dirStruct, double radius, double height) {
+        double[] axe = new double[6];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        org.jcae.opencascade.jni.BRepPrimAPI_MakeCylinder cyl = new org.jcae.opencascade.jni.BRepPrimAPI_MakeCylinder(axe, radius, height, 2 * Math.PI);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = cyl.shape();
+        cyl.delete();
+        return tds;
+    }
+
+    public static TopoDS_Shape makeCopy(TopoDS_Shape topoDS_Shape) {
+        throw new UnsupportedOperationException();
+    }
+
+    public static TopoDS_Shape makeCone(double[] pointStruct, double[] dirStruct, double radius1, double radius2, double height) {
+        double[] axe = new double[6];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        org.jcae.opencascade.jni.BRepPrimAPI_MakeCone cone = new org.jcae.opencascade.jni.BRepPrimAPI_MakeCone(axe, radius1, radius2, height, 2 * Math.PI);
+        org.jcae.opencascade.jni.TopoDS_Shape tds = cone.shape();
+        cone.delete();
+        return tds;
+    }
+
+    public static TopoDS_Shape makeCompound(TopoDS_Shape[] shapes) {
+        BRep_Builder builder = new BRep_Builder();
+        org.jcae.opencascade.jni.TopoDS_Compound comp = new org.jcae.opencascade.jni.TopoDS_Compound();
+        builder.makeCompound(comp);
+        for (int i = 0; i < shapes.length; i++) {
+
+            builder.add(comp, shapes[i]);
+        }
+        builder.delete();
+        return comp;
+    }
+
+
+    public static TopoDS_Shape makeBox(double x1, double y1, double z1, double x2, double y2, double z2) {
+        double[] p1 = new double[] { x1, y1, z1 };
+        double[] p2 = new double[] { x2, y2, z2 };
+        org.jcae.opencascade.jni.BRepPrimAPI_MakeBox box = new org.jcae.opencascade.jni.BRepPrimAPI_MakeBox(p1, p2); 
+        org.jcae.opencascade.jni.TopoDS_Shape tds = box.shape();
+        box.delete();
+        return tds;
+    }
+
+    public static TopoDS_Shape makeCut(TopoDS_Shape shape1, TopoDS_Shape shape2) {
+       org.jcae.opencascade.jni.BRepAlgoAPI_Cut cut = new org.jcae.opencascade.jni.BRepAlgoAPI_Cut(shape1, shape2);
+        org.jcae.opencascade.jni.TopoDS_Shape s = cut.shape();
+        cut.delete();
+        return s;
+    }
+    
+    public static TopoDS_Shape makeCommon(TopoDS_Shape shape1, TopoDS_Shape shape2) {
+       org.jcae.opencascade.jni.BRepAlgoAPI_Common common = new org.jcae.opencascade.jni.BRepAlgoAPI_Common(shape1, shape2); 
+        org.jcae.opencascade.jni.TopoDS_Shape s = common.shape();
+        common.delete();
+        return s;
+    }
+    
+    public static TopoDS_Shape makeFuse(TopoDS_Shape shape1, TopoDS_Shape shape2) {
+       org.jcae.opencascade.jni.BRepAlgoAPI_Fuse fuse = new org.jcae.opencascade.jni.BRepAlgoAPI_Fuse(shape1, shape2);
+        org.jcae.opencascade.jni.TopoDS_Shape s = fuse.shape();
+        fuse.delete();
+        return s;
+    }
+
+    
+    public static TopoDS_Shape makeWedge(double[] pointStruct, double[] dirStruct,double dx, double dy, double dz, double xmin, double zmin, double xmax, double zmax) {
+        double[] axe = new double[6];
+        System.arraycopy(pointStruct, 0, axe, 0, 3);
+        System.arraycopy(dirStruct, 0, axe, 3, 3);
+        
+        org.jcae.opencascade.jni.BRepPrimAPI_MakeWedge wedge = new org.jcae.opencascade.jni.BRepPrimAPI_MakeWedge(axe,  dx,  dy,  dz,  xmin,  zmin, xmax, zmax); 
+        org.jcae.opencascade.jni.TopoDS_Shape s = wedge.shape();
+        wedge.delete();
+        return s;
+    }
+    
+    public static TopoDS_Shape makeEllipticCylinder(double h, double r1, double r2) {
+       GP_Elips ellipse;
+               if (r1 < r2) {
+                       // FIXME : ellipse should be rotated, but current JNI won't allow it since Ax2 is not separate object
+                       ellipse = new GP_Elips(new double[]{0.0,-h*0.5,0.0,0.0,1.0,0.0},r2,r1);
+               } else {
+                       ellipse = new GP_Elips(new double[]{0.0,-h*0.5,0.0,0.0,1.0,0.0},r1,r2);
+               }
+               BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(ellipse);
+               TopoDS_Edge ed = (TopoDS_Edge) edge.shape();
+               BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire(ed);
+               TopoDS_Wire w = (TopoDS_Wire) wire.shape();
+               BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w); 
+        TopoDS_Face F = (TopoDS_Face) face.shape();
+        BRepPrimAPI_MakePrism prism = new BRepPrimAPI_MakePrism(F, new double[] { 0.0, h, 0.0 }); 
+        TopoDS_Shape shape = prism.shape();
+        ellipse.delete();
+        edge.delete();
+        wire.delete();
+        face.delete();
+        ed.delete();
+        w.delete();
+        F.delete();
+        prism.delete();
+        return shape;
+    }
+
+    public static TopoDS_Shape makeReqularPrism(double h, double r, int n) {
+       if (n < 3)
+               n = 3;
+       Vector2d vertices[] = new Vector2d[n];
+               for (int i = 0; i < n; i++) {
+                       vertices[i] = new Vector2d(Math.sin(Math.PI * 2.0 * i / n)*r,Math.cos(Math.PI * 2.0 * i / n)*r);
+               }
+               BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();
+               for (int i = 0; i < n; i++) {
+                       Vector2d v1 = vertices[i];
+                       Vector2d v2 = vertices[(i+1)%n];
+                       BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{v1.x,-h*0.5,v1.y},new double[]{v2.x,-h*0.5,v2.y}); 
+                       wire.add((TopoDS_Edge)edge.shape());
+                       edge.delete();
+               }
+               TopoDS_Wire w = (TopoDS_Wire)wire.shape();
+               
+               BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w);
+               TopoDS_Face F = (TopoDS_Face) face.shape();
+               face.delete();
+               
+               BRepPrimAPI_MakePrism prism = new BRepPrimAPI_MakePrism(F, new double[] { 0.0, h, 0.0 }); 
+        TopoDS_Shape shape = prism.shape();    
+        prism.delete();
+        
+        wire.delete();
+        w.delete();
+        F.delete();
+        return shape;
+    }
+
+    public static void exportBREP(TopoDS_Shape shape, String filename) {
+        org.jcae.opencascade.jni.BRepTools.write(shape, filename);
+    }
+    
+}