--- /dev/null
+package org.jcae.opencascade.jni;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+public class Curvature
+{
+ /** Example to show how to get the curvature of a surface */
+ @Test public void sample()
+ {
+ //Create an cone for the example
+ double[] axis=new double[]{
+ 0, 0, 0,
+ 1, 2, 3
+ };
+ TopoDS_Shape shape=new BRepPrimAPI_MakeCone(
+ axis, 3, 1, 4, Math.PI*2).shape();
+
+ // Select the side of the cone
+ TopExp_Explorer exp=new TopExp_Explorer(shape, TopAbs_ShapeEnum.FACE);
+ TopoDS_Face face=(TopoDS_Face) exp.current();
+
+ // Get the geometry associated to the previously selected face
+ Geom_Surface geom = BRep_Tool.surface(face);
+
+ // Get parameters intervals
+ double[] paramBounds=new double[4];
+ geom.bounds(paramBounds);
+ double umin=paramBounds[0];
+ double umax=paramBounds[1];
+ double vmin=paramBounds[2];
+ double vmax=paramBounds[3];
+
+ // Handle the case of infinite geometry
+ if(!geom.isUClosed())
+ {
+ umin=0;
+ umax=1;
+ }
+
+ if(!geom.isVClosed())
+ {
+ vmin=0;
+ vmax=1;
+ }
+
+ // Create the object which allow to ask for various local geometry
+ // properties
+ GeomLProp_SLProps props=new GeomLProp_SLProps(2, 1E-7);
+ props.setSurface(geom);
+
+
+ // Iterate on u and v and display various properties at each point
+ double ustep=(umax-umin)/10;
+ double vstep=(vmax-vmin)/10;
+
+ for(double u=umin; u<umax; u+=ustep)
+ {
+ for(double v=vmin; v<vmax; v+=vstep)
+ {
+ props.setParameters(u, v);
+ //The 3D coordinate associated to the u,v coordinate
+ double[] p = props.value();
+ //The first derivative allong U
+ double[] d1u = props.d1U();
+ //The second derivative allong U
+ double[] d2u = props.d2U();
+
+ System.out.println("M: ("+p[0]+", "+p[1]+", "+p[2]+")");
+ System.out.println("dM/dU: ("+d1u[0]+", "+d1u[1]+", "+d1u[2]+")");
+ System.out.println("d2M/d2U: ("+d2u[0]+", "+d2u[1]+", "+d2u[2]+")");
+ }
+ }
+ }
+}
+