/// <summary> /// Splits (divides) the surface into two parts at the specified parameter /// </summary> /// <param name="direction"> /// 0 = The surface is split vertically. The "west" side is returned as the first /// surface in the array and the "east" side is returned as the second surface in /// the array. /// 1 = The surface is split horizontally. The "south" side is returned as the first surface in the array and the "north" /// side is returned as the second surfae in the array /// </param> /// <param name="parameter"> /// value of constant parameter in interval returned by Domain(direction) /// </param> /// <returns>Array of two surfaces on success</returns> public Surface[] Split(int direction, double parameter) { using (var surfaces = new Runtime.InteropWrappers.SimpleArraySurfacePointer()) { IntPtr pSurfaces = surfaces.NonConstPointer(); IntPtr pConstThis = ConstPointer(); UnsafeNativeMethods.ON_Surface_Split(pConstThis, direction, parameter, pSurfaces); return surfaces.ToNonConstArray(); } }
/// <summary> /// Constructs a rolling ball fillet between two surfaces. /// </summary> /// <param name="surfaceA">A first surface.</param> /// <param name="uvA">A point in the parameter space of FaceA near where the fillet is expected to hit the surface.</param> /// <param name="surfaceB">A second surface.</param> /// <param name="uvB">A point in the parameter space of FaceB near where the fillet is expected to hit the surface.</param> /// <param name="radius">A radius value.</param> /// <param name="tolerance">A tolerance value used for approximating and intersecting offset surfaces.</param> /// <returns>A new array of rolling ball fillet surfaces; this array can be empty on failure.</returns> /// <exception cref="ArgumentNullException">If surfaceA or surfaceB are null.</exception> public static Surface[] CreateRollingBallFillet(Surface surfaceA, Point2d uvA, Surface surfaceB, Point2d uvB, double radius, double tolerance) { if (surfaceA == null) throw new ArgumentNullException("surfaceA"); if (surfaceB == null) throw new ArgumentNullException("surfaceB"); IntPtr const_ptr_surface_a = surfaceA.ConstPointer(); IntPtr const_ptr_surface_b = surfaceB.ConstPointer(); using (Runtime.InteropWrappers.SimpleArraySurfacePointer srfs = new Runtime.InteropWrappers.SimpleArraySurfacePointer()) { IntPtr ptr_surfaces = srfs.NonConstPointer(); UnsafeNativeMethods.RHC_RhinoSimpleRollingBallFillet2(const_ptr_surface_a, uvA, const_ptr_surface_b, uvB, radius, tolerance, ptr_surfaces); return srfs.ToNonConstArray(); } }