# Surface class

Namespace: [Rhino.Geometry](https://developer.rhino3d.com/api/rhinocommon/namespace/rhino.geometry.md) · Assembly: [RhinoCommon](https://developer.rhino3d.com/api/rhinocommon/assembly/rhinocommon.md)

```cs
[Serializable]
public class Surface : GeometryBase
```

Represents a base class that is common to most RhinoCommon surface types.

A surface represents an entity that can be all visited by providing two independent parameters, usually called (u, v), or sometimes (s, t).

**Derived types:** [Extrusion](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.extrusion.md), [NurbsSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.nurbssurface.md), [PlaneSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.planesurface.md), [RevSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.revsurface.md), [SumSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.sumsurface.md), [SurfaceProxy](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surfaceproxy.md)

## Constructors

- [Surface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/ctor.md): (2 overloads) Protected constructor for internal use.

## Properties

- [IsSolid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/issolid.md): Gets a values indicating whether a surface is solid.
- [IsSubDFriendly](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/issubdfriendly.md): Returns true if the surface is a non-rational, uniform, natural or periodic, cubic NURBS surface. Otherwise, false is returned.

## Methods

- [ClosestPoint](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/closestpoint.md): Input the parameters of the point on the surface that is closest to testPoint.
- [ClosestSide](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/closestside.md): Gets the side that is closest, in terms of 3D-distance, to a U and V parameter.
- [CreateExtrusion](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createextrusion.md): (static) Constructs a surface by extruding a curve along a vector.
- [CreateExtrusionToPoint](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createextrusiontopoint.md): (static) Constructs a surface by extruding a curve to a point.
- [CreatePeriodicSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createperiodicsurface.md): (2 overloads, static) Constructs a periodic surface from a base surface and a direction.
- [CreateRollingBallFillet](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createrollingballfillet.md): (3 overloads, static) Constructs a rolling ball fillet between two surfaces.
- [CreateSoftEditSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createsofteditsurface.md): (static) Creates a soft edited surface from an existing surface using a smooth field of influence.
- [CreateTweenSurfacesWithSampling](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/createtweensurfaceswithsampling.md): (static) Create tween surfaces that gradually transition between two bounding surfaces using point sampling.
- [CurvatureAt](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/curvatureat.md): Computes the curvature at the given UV coordinate.
- [Degree](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/degree.md): Returns the maximum algebraic degree of any span (or a good estimate if curve spans are not algebraic).
- [Domain](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/domain.md): Gets the domain in a direction.
- [Evaluate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/evaluate.md): Evaluates a surface mathematically.
- [Extend](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/extend.md): (2 overloads) Analytically extends the surface to include the interval.
- [Fit](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/fit.md): Fits a new surface through an existing surface.
- [FitCurveToSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/fitcurvetosurface.md)
- [FrameAt](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/frameat.md): Computes the orient plane on a surface given a U and V parameter. This is the simple evaluation call with no error handling.
- [GetNextDiscontinuity](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/getnextdiscontinuity.md): (2 overloads) Searches for a derivative, tangent, or curvature discontinuity.
- [GetNurbsFormParameterFromSurfaceParameter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/getnurbsformparameterfromsurfaceparameter.md): Translates a parameter from the current surface to the parameter space of the surface returned by [Surface.ToNurbsSurface()](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/tonurbssurface.md).
- [GetSpanVector](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/getspanvector.md): Gets array of span "knots".
- [GetSurfaceParameterFromNurbsFormParameter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/getsurfaceparameterfromnurbsformparameter.md): Translates a parameter from a value on the surface returned by [Surface.ToNurbsSurface()](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/tonurbssurface.md) to the current surface.
- [GetSurfaceSize](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/getsurfacesize.md): Gets an estimate of the size of the rectangle that would be created if the 3d surface where flattened into a rectangle.
- [HasNurbsForm](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/hasnurbsform.md): Is there a NURBS surface representation of this surface.
- [InterpolatedCurveOnSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/interpolatedcurveonsurface.md): Constructs an interpolated curve on a surface, using 3D points.
- [InterpolatedCurveOnSurfaceUV](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/interpolatedcurveonsurfaceuv.md): (2 overloads) Returns a curve that interpolates points on a surface. The interpolant lies on the surface.
- [IsAtSeam](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isatseam.md): Tests if a surface parameter value is at a seam.
- [IsAtSingularity](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isatsingularity.md): Tests if a surface parameter value is at a singularity.
- [IsClosed](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isclosed.md): Gets a value indicating if the surface is closed in a direction.
- [IsCone](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/iscone.md): (2 overloads) Determines if the surface is a portion of a cone within RhinoMath.ZeroTolerance.
- [IsContinuous](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/iscontinuous.md): Tests continuity at a surface parameter value.
- [IsCylinder](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/iscylinder.md): (2 overloads) Determines if the surface is a portion of a cylinder within RhinoMath.ZeroTolerance.
- [IsExtrusion](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isextrusion.md): (2 overloads) Determines if the surface is a portion of an extrusion within RhinoMath.ZeroTolerance.
- [IsIsoparametric](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isisoparametric.md): (3 overloads) Determines if a 2d bounding box is isoparametric in the parameter space of this surface.
- [IsoCurve](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isocurve.md): (3 overloads) Gets isoparametric curve.
- [IsPeriodic](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isperiodic.md): Gets a value indicating if the surface is periodic in a direction (default is false).
- [IsPlanar](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/isplanar.md): (2 overloads) Tests a surface to see if it is planar to zero tolerance.
- [IsSingular](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/issingular.md): true if surface side is collapsed to a point.
- [IsSphere](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/issphere.md): (2 overloads) Determines if the surface is a portion of a sphere within RhinoMath.ZeroTolerance.
- [IsTorus](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/istorus.md): (2 overloads) Determines if the surface is a portion of a torus within RhinoMath.ZeroTolerance.
- [LocalClosestPoint](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/localclosestpoint.md): Find parameters of the point on a surface that is locally closest to the testPoint. The search for a local close point starts at seed parameters.
- [NormalAt](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/normalat.md): Computes the surface normal at a point. This is the simple evaluation call - it does not support error handling.
- [Offset](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/offset.md): Constructs a new surface which is offset from the current surface.
- [PointAt](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/pointat.md): Evaluates a point at a given parameter.
- [Pullback](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/pullback.md): (2 overloads) Pulls a 3d curve back to the surface's parameter space.
- [Pushup](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/pushup.md): (2 overloads) Computes a 3d curve that is the composite of a 2d curve and the surface map.
- [Rebuild](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/rebuild.md): Rebuilds an existing surface to a given degree and point count.
- [RebuildOneDirection](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/rebuildonedirection.md): Rebuilds an existing surface with a new surface to a given point count in either the u or v directions independently.
- [RefitSimplySplitSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/refitsimplysplitsurface.md): This routine accepts a 3-d trim curve (trimCrv3d). The trim curve is assumed to run from one surface edge to the opposite edge; this is referred to as a "simple" trim curve, roughly parallel to one of the srf directions (either u or v). We refer to that parameter as the "trim parameter". The routine splits the surface via the trim curve, and then refits either side ("upper" = "above the trim", and "lower" = "below the trim") as a set of untrimmed Nurbs surfaces. The idea is to retain, as much as possible, the Nurbs structure of srf, especially in the trim parameter.
- [RefitSplit](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/refitsplit.md): Splits the surface into two and refits the split edge
- [Reverse](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/reverse.md): (2 overloads) Same as Reverse, but if inPlace is set to true this Surface is modified instead of a new copy being created.
- [SetDomain](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/setdomain.md): Sets the domain in a direction.
- [ShortPath](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/shortpath.md): Constructs a geodesic between 2 points, used by ShortPath command in Rhino.
- [Smooth](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/smooth.md): (2 overloads) Smooths a surface by averaging the positions of control points in a specified region.
- [SpanCount](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/spancount.md): Gets number of smooth nonempty spans in the parameter direction.
- [Split](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/split.md): Splits (divides) the surface into two parts at the specified parameter
- [ToBrep](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/tobrep.md): Converts the surface into a Brep.
- [ToNurbsSurface](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/tonurbssurface.md): (2 overloads) Gets a NURBS surface representation of this surface. Default tolerance of 0.0 is used.
- [Transpose](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/transpose.md): (2 overloads) Transposes surface parameterization (swap U and V)
- [Trim](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trim.md): Constructs a sub-surface that covers the specified UV trimming domain.
- [TryGetCone](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetcone.md): (2 overloads) Tests a surface to see if it is a portion of a cone and returns the cone.
- [TryGetCylinder](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetcylinder.md): (2 overloads) Tests a surface to see if it is a portion of a cylinder and return the infinite cylinder.
- [TryGetExtrusion](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetextrusion.md): (2 overloads) Tests a surface to see if it is an extrusion and returns the extrusion.
- [TryGetFiniteCylinder](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetfinitecylinder.md): Tests a surface with the assumption that it might be a right circular cylinder and returns this geometry.
- [TryGetPlane](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetplane.md): (2 overloads) Tests a surface for planarity and return the plane.
- [TryGetSphere](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygetsphere.md): (2 overloads) Test a surface to see if it is a portion of a sphere and return the sphere.
- [TryGetTorus](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/trygettorus.md): (2 overloads) Tests a surface to see if it is a portion of a torus and returns the torus.
- [VariableOffset](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.surface/variableoffset.md): (2 overloads) Copies a surface so that all locations at the corners of the copied surface are specified distances from the original surface.

## Inherited Members

- From [GeometryBase](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase.md): [HasBrepForm](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/hasbrepform.md), [IsDeformable](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/isdeformable.md), [IsDocumentControlled](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/isdocumentcontrolled.md), [IsShallowDuplicate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/isshallowduplicate.md), [ObjectType](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/objecttype.md), [UserStringCount](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/userstringcount.md), [ComponentIndex](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/componentindex.md), [DataCRC](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/datacrc.md), [DeleteAllUserStrings](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/deletealluserstrings.md), [DeleteUserString](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/deleteuserstring.md), [Dispose](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/dispose.md), [Duplicate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/duplicate.md), [DuplicateShallow](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/duplicateshallow.md), [GetBoundingBox](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/getboundingbox.md), [GetUserString](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/getuserstring.md), [GetUserStrings](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/getuserstrings.md), [MakeDeformable](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/makedeformable.md), [MemoryEstimate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/memoryestimate.md), [NonConstOperation](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/nonconstoperation.md), [OnSwitchToNonConst](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/onswitchtononconst.md), [Rotate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/rotate.md), [Scale](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/scale.md), [SetUserString](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/setuserstring.md), [Transform](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/transform.md), [Translate](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.geometrybase/translate.md)
- From [CommonObject](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject.md): [Disposed](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/disposed.md), [HasUserData](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/hasuserdata.md), [IsValid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/isvalid.md), [UserData](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/userdata.md), [UserDictionary](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/userdictionary.md), [ConstructConstObject](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/constructconstobject.md), [Dispose](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/dispose.md), [EnsurePrivateCopy](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/ensureprivatecopy.md), [GetObjectData](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/getobjectdata.md), [IsValidWithLog](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/isvalidwithlog.md), [ToJSON](https://developer.rhino3d.com/api/rhinocommon/type/rhino.runtime.commonobject/tojson.md)
