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]+")"); } } } }