public class BrepFace : SurfaceProxy
Provides strongly-typed access to brep faces.

A Brep face is composed of one surface and trimming curves.

Properties

Brep

#Since v6.9
public Brep Brep { get; }
Gets the Brep that owns this face.

Disposed

public bool Disposed { get; }
Indicates if this object has been disposed or the document it originally belonged to has been disposed.
inherited fromCommonObject

FaceIndex

#Since v5.0
public int FaceIndex { get; }
Index of face in Brep.Faces array.

HasBrepForm

public bool HasBrepForm { get; }
Returns true if the Brep.TryConvertBrep function will be successful for this object
inherited fromGeometryBase

HasUserData

public bool HasUserData { get; }
Gets true if this class has any custom information attached to it through UserData.
inherited fromCommonObject

Id

#Since v7.7
public Guid Id { get; set; }
Gets or sets the persistent id of this Brep face. By default, the id is Guid.Zero. Note, Rhino does not set this id. Thus, the property is available for use as a way of tracking Brep faces.

IsDeformable

public bool IsDeformable { get; }
true if object can be accurately modified with "squishy" transformations like projections, shears, and non-uniform scaling.
inherited fromGeometryBase

IsDocumentControlled

public sealed override bool IsDocumentControlled { get; }
If true this object may not be modified. Any properties or functions that attempt to modify this object when it is set to "IsReadOnly" will throw a NotSupportedException.
inherited fromGeometryBase

IsShallowDuplicate

public bool IsShallowDuplicate { get; }
Is this instance a 'shallow copy'. Shallow copies are no different than regular instances with the exception that they will convert to complete independent 'deep' copies if a non const operation is perform on the instance (something that mutates the internal data)
inherited fromGeometryBase

IsSolid

public virtual bool IsSolid { get; }
Gets a values indicating whether a surface is solid.
inherited fromSurface

IsSubDFriendly

public bool IsSubDFriendly { get; }
Returns true if the surface is a non-rational, uniform, natural or periodic, cubic NURBS surface. Otherwise, false is returned.
inherited fromSurface

IsSurface

#Since v5.0
public bool IsSurface { get; }
Gets a value indicating whether the face is synonymous with the underlying surface. If a Face has no trimming curves then it is considered a Surface.

IsValid

public virtual bool IsValid { get; }
Tests an object to see if it is valid.
inherited fromCommonObject

Loops

#Since v5.0
public BrepLoopList Loops { get; }
Loops in this face.

MaterialChannelIndex

#Since v6.26
public int MaterialChannelIndex { get; set; }
This face's rendering material channel index.

ObjectType

[CLSCompliant(false)] public ObjectType ObjectType { get; }
Useful for switch statements that need to differentiate between basic object types like points, curves, surfaces, and so on.
inherited fromGeometryBase

OrientationIsReversed

#ExampleSince v5.0
public bool OrientationIsReversed { get; set; }
true if face orientation is opposite of natural surface orientation.

OuterLoop

#Since v5.0
public BrepLoop OuterLoop { get; }
Every face has a single outer loop.

PackId

#Since v7.19
[CLSCompliant(false)] public uint PackId { get; }
0 if the pack it is unset, or >0 if the set pack id.
Remarks: PackId values assigned to brep faces are inheritied from the PackId values assigned to subd faces when a subd is converted into a brep. These faces are "trivially trimmed" which means the boundary of the face is identical to the boundary of the underlying surface. There are two types of face packs in a subd, quad grid packs and singleton packs. A subd quad grid pack is a set of subd quads that form a rectangular grid. A subd singleton pack is a single face, quad or n-gon, that is not part of a quad grid pack. There are three types of face packs in a brep created from a subd, grid packs, star packs and singleton packs. A brep "grid pack" comes from a rectangular grid of subd quads. A grid pack of brep faces can be converted into a single larger trivially trimmed brep face. A brep "star pack" of brep faces comes from a singel subd n-gon (n = 3, 5 or more). The star pack will have n faces with a star center vertex and shared edges radiating from the star center. A brep "singleton" pack comes from a single subd quad that could not be grouped into a larger subd quad grid pack.

PerFaceColor

#Since v7.0
public Color PerFaceColor { get; set; }
If per-face color is "Empty", then this face does not have a custom color

ProxyBrepSubDFaceId

#Since v7.19
[CLSCompliant(false)] public uint ProxyBrepSubDFaceId { get; }
If this face is part of a brep created by SubD.ProxyBrep(), then the subd component id of the corresponding SubD face is returned. Otherwise 0 is returned.

SurfaceIndex

#Since v5.6
public int SurfaceIndex { get; }
Surface index of the 3d surface geometry used by this face or -1

UserData

public UserDataList UserData { get; }
List of custom information that is attached to this class.
inherited fromCommonObject

UserDictionary

public ArchivableDictionary UserDictionary { get; }
Dictionary of custom information attached to this class. The dictionary is actually user data provided as an easy to use shareable set of information.
inherited fromCommonObject

UserStringCount

public int UserStringCount { get; }
Gets the amount of user strings.
inherited fromGeometryBase

Methods

AdjacentEdges

#Since v5.0
[ConstOperation] public int[] AdjacentEdges()
Gets the indices of all the BrepEdges that delineate this Face.

AdjacentFaces

#Since v5.0
[ConstOperation] public int[] AdjacentFaces()
Gets the indices of all the BrepFaces that surround (are adjacent to) this face.

ChangeSurface

#Since v5.0
public bool ChangeSurface(int surfaceIndex)
Expert user tool that replaces the 3d surface geometry use by the face.
Remarks: If the face had a surface and new surface has a different shape, then you probably want to call something like RebuildEdges() to move the 3d edge curves so they will lie on the new surface. This doesn't delete the old surface; call Brep.CullUnusedSurfaces() or Brep.Compact() to remove unused surfaces.
surfaceIndex (int)brep surface index of new surface.
true if successful.

ClearMaterialChannelIndex

#Since v6.26
public void ClearMaterialChannelIndex()
Clear this face's rendering material channel index.

ClearPackId

#Since v7.19
public void ClearPackId()
Sets BrepFace.PackId to 0.

ClosestPoint

[ConstOperation] public bool ClosestPoint(Point3d testPoint, out double u, out double v)
Input the parameters of the point on the surface that is closest to testPoint.
inherited fromSurface
testPoint (Point3d)A point to test against.
u (out double)U parameter of the surface that is closest to testPoint.
v (out double)V parameter of the surface that is closest to testPoint.
true on success, false on failure.

ClosestPointOnFace

#Since v9.0
[ConstOperation] public bool ClosestPointOnFace(Point3d testPoint, out double u, out double v, double maximumDistance)
Get the closest point to this face. Closest point finding respects the trims on the face.
testPoint (Point3d)
u (out double)The surface u-parameter for the closest point
v (out double)The surface v-parameter for the closest point
maximumDistance (double)The maximum allowed distance.

Past this distance, the search is given up and false is returned.

Use 0 to turn off this parameter.

ClosestSide

[ConstOperation] public IsoStatus ClosestSide(double u, double v)
Gets the side that is closest, in terms of 3D-distance, to a U and V parameter.
inherited fromSurface
u (double)A u parameter.
v (double)A v parameter.
A side.

ComponentIndex

[ConstOperation] public ComponentIndex ComponentIndex()
If this piece of geometry is a component in something larger, like a BrepEdge in a Brep, then this function returns the component index.
inherited fromGeometryBase
This object's component index. If this object is not a sub-piece of a larger geometric entity, then the returned index has m_type = ComponentIndex.InvalidType and m_index = -1.

ConstructConstObject

protected void ConstructConstObject(object parentObject, int subobjectIndex)
Assigns a parent object and a sub-object index to this.
inherited fromCommonObject
parentObject (object)The parent object.
subobjectIndex (int)The sub-object index.

CreateExtrusion

#Since v5.3
[ConstOperation] public Brep CreateExtrusion(Curve pathCurve, bool cap)
Extrude a face in a Brep.
pathCurve (Curve)The path to extrude along. Note, the direction of the extrusion will follow the direction of the curve.
cap (bool)If true, the extrusion is capped with a translation of the face being extruded
A Brep on success or null on failure.

CurvatureAt

[ConstOperation] public SurfaceCurvature CurvatureAt(double u, double v)
Computes the curvature at the given UV coordinate.
inherited fromSurface
u (double)U parameter for evaluation.
v (double)V parameter for evaluation.
Surface Curvature data for the point at UV or null on failure.

DataCRC

[CLSCompliant(false)] public uint DataCRC(uint currentRemainder)
Returns a CRC calculated from the information that defines the object. This CRC can be used as a quick way to see if two objects are not identical.
inherited fromGeometryBase
currentRemainder (uint)The current remainder value.
CRC of the information the defines the object.

Degree

[ConstOperation] public int Degree(int direction)
Returns the maximum algebraic degree of any span (or a good estimate if curve spans are not algebraic).
inherited fromSurface
direction (int)0 gets first parameter's domain, 1 gets second parameter's domain.
The maximum degree.

DeleteAllUserStrings

public void DeleteAllUserStrings()
inherited fromGeometryBase

DeleteUserString

public bool DeleteUserString(string key)
inherited fromGeometryBase
key (string)

Dispose

public void Dispose()
Actively reclaims unmanaged resources that this instance uses.
inherited fromCommonObject

Dispose

protected override void Dispose(bool disposing)
Overridden in order to destroy local display cache information
inherited fromGeometryBase
disposing (bool)

Domain

[ConstOperation] public Interval Domain(int direction)
Gets the domain in a direction.
inherited fromSurface
direction (int)0 gets first parameter, 1 gets second parameter.
An interval value.

DraftAnglePoint

#Since v6.0
[ConstOperation] public bool DraftAnglePoint(Point2d testPoint, double testAngle, Vector3d pullDirection, bool edge, out Point3d draftPoint, out double draftAngle)
Returns the surface draft angle and point at a parameter.
testPoint (Point2d)The u,v parameter on the face to evaluate.
testAngle (double)The angle in radians to test.
pullDirection (Vector3d)The pull direction.
edge (bool)Restricts the point placement to an edge.
draftPoint (out Point3d)The draft angle point.
draftAngle (out double)The draft angle in radians.
True if successful, false otherwise.

Duplicate

public virtual GeometryBase Duplicate()
Constructs a deep (full) copy of this object.
inherited fromGeometryBase
An object of the same type as this, with the same properties and behavior.

DuplicateFace

#Since v5.0
[ConstOperation] public Brep DuplicateFace(bool duplicateMeshes)
Duplicate a face from the brep to create new single face brep.
duplicateMeshes (bool)If true, shading meshes will be copied as well.
A new single-face brep synonymous with the current Face.

DuplicateShallow

public GeometryBase DuplicateShallow()
Constructs a light copy of this object. By "light", it is meant that the same underlying data is used until something is done to attempt to change it. For example, you could have a shallow copy of a very heavy mesh object and the same underlying data will be used when doing things like inspecting the number of faces on the mesh. If you modify the location of one of the mesh vertices, the shallow copy will create a full duplicate of the underlying mesh data and the shallow copy will become a deep copy.
inherited fromGeometryBase
An object of the same type as this object.

This behavior is overridden by implementing classes.

DuplicateSurface

#Since v5.0
[ConstOperation] public Surface DuplicateSurface()
Gets a copy to the untrimmed surface that this face is based on.
A copy of this face's underlying surface.

EnsurePrivateCopy

public void EnsurePrivateCopy()
If you want to keep a copy of this class around by holding onto it in a variable after a command completes, call EnsurePrivateCopy to make sure that this class is not tied to the document. You can call this function as many times as you want.
inherited fromCommonObject

Evaluate

[ConstOperation] public bool Evaluate(double u, double v, int numberDerivatives, out Point3d point, out Vector3d[] derivatives)
Evaluates a surface mathematically.
inherited fromSurface
Remarks: The partial derivatives will be in the order {Su, Sv} for numberDerivatives = 1, {Su, Sv, Suu, Suv, Svv} for 2, {Su, Sv, Suu, Suv, Svv, Suuu, Suuv, Suvv, Svvv} for 3, and similar for higher counts.
u (double)A U parameter.
v (double)A V parameter.
numberDerivatives (int)The number of derivatives.
point (out Point3d)A point. This out parameter will be assigned during this call.
derivatives (out Vector3d[])A vector array. This out parameter will be assigned during this call. This can be null.
true if the operation succeeded; false otherwise.

Extend

public bool Extend(int direction, Interval interval)
Analytically extends the surface to include the interval.
inherited fromSurface
direction (int)If 0, Surface.Domain(0) will include the interval. (the first surface parameter). If 1, Surface.Domain(1) will include the interval. (the second surface parameter).
interval (Interval)If the interval is not included in surface domain, the surface will be extended so that its domain includes the interval. Note, this method will fail if the surface is closed in the specified direction.
True if successful, false otherwise.

Extend

[ConstOperation] public Surface Extend(IsoStatus edge, double extensionLength, bool smooth)
Extends an untrimmed surface along one edge.
inherited fromSurface
edge (IsoStatus)Edge to extend. Must be North, South, East, or West.
extensionLength (double)distance to extend.
smooth (bool)true for smooth (C-infinity) extension. false for a C1- ruled extension.
New extended surface on success.

FilletSurfaceToCurve

#Since v8.0
public bool FilletSurfaceToCurve(Curve curve, double t, double u, double v, double radius, int alignToCurve, int railDegree, int arcDegree, IEnumerable<double> arcSliders, int numBezierSrfs, double tolerance, List<Brep> out_fillets, out double[] fitResults)
Creates a constant-radius fillet surface between a surface and the curve.
curve (Curve)the curve to which this face is being filleted.
t (double)A parameter on the curve, indicating region of fillet.
u (double)A parameter in the u direction of the face indicating which side of the curve to fillet.
v (double)A parameter in the v direction of the face indicating which side of the curve to fillet.
radius (double)The radius of the constant-radius fillet desired. NOTE: using arcSliders will change the shape of the arcs themselves
alignToCurve (int)Does the user want the fillet to align to the curve? 0 - No, ignore the curve's b-spline structure 1 - Yes, match the curves's degree, spans, CVs as much as possible 2 - Same as 1, but iterate to fit to tolerance Note that a value of 1 or 2 will cause nBezierSrfs to be ignored
railDegree (int)Desired fillet degree (3 or 5) in the u-direction, along the curve
arcDegree (int)Desired fillet degree (2, 3, 4, or 5) in the v-direction, along the fillet arcs.If 2, then the surface is rational in v
arcSliders (IEnumerable<double>)Array of 2 sliders to shape the fillet in the arc direction, used for arcDegree = 3, 4, or 5; input { 0.0, 0.0 } to ignore [0] (-1 to 1) slides tangent arms from base (-1) to theoretical(1) [1] (-1 to 1) slides inner CV(s) from base (-1) to theoretical(1)
numBezierSrfs (int)If >0, this indicates the number of equally-spaced fillet surfaces to be output in the rail direction, each surface Bézier in u.
tolerance (double)The tolerance. In in doubt, the document's absolute tolerance.
out_fillets (List<Brep>)he results of the fillet calculation.
fitResults (out double[])array of doubles indicating fitting results: [0] max 3d point deviation along curve [1] max 3d point deviation along face [2] max angle deviation along face(in degrees) [3] max angle deviation between Bézier surfaces(in degrees) [4] max curvature difference between Bézier surfaces
true if successful, false otherwise.

FilletSurfaceToRail

#Since v8.0
[ConstOperation] public bool FilletSurfaceToRail(Curve curveOnFace, BrepFace secondFace, double u1, double v1, int railDegree, int arcDegree, IEnumerable<double> arcSliders, int numBezierSrfs, bool extend, FilletSurfaceSplitType split_type, double tolerance, List<Brep> out_fillets, List<Brep> out_breps0, List<Brep> out_breps1, out double[] fitResults)
Creates a surface between two surfaces, with a fixed rail curve on the first surface.
Remarks: The trim or split input Breps are in OutBreps0, and OutBreps1. If the input faces are from the same Brep, nothing will be added to OutBreps1.If you specified a split type of RhinoFilletSurfaceSplitType::Nothing, then nothing will be added to either OutBreps0 or OutBreps1.
curveOnFace (Curve)A curve on this face
secondFace (BrepFace)The second face
u1 (double)A parameter in the u direction of the second face at the side you want to keep after filleting.
v1 (double)A parameter in the v direction of the second face at the side you want to keep after filleting.
railDegree (int)Desired fillet degree (3 or 5) in the u-direction, along the rails
arcDegree (int)esired fillet degree (2, 3, 4, or 5) in the v-direction, along the fillet arcs.If 2, then the surface is rational in v
arcSliders (IEnumerable<double>)Array of 2 sliders to shape the fillet in the arc direction, used for arcDegree = 3, 4, or 5; input { 0.0, 0.0 } to ignore [0] (-1 to 1) slides tangent arms from base (-1) to theoretical(1) [1] (-1 to 1) slides inner CV(s) from base (-1) to theoretical(1)
numBezierSrfs (int)If >0, this indicates the number of equally-spaced fillet surfaces to be output in the rail direction, each surface Bézier in u.
extend (bool)If true, then when one input surface is longer than the other, the fillet surface is extended to the input surface edges.
split_type (FilletSurfaceSplitType)The split type
tolerance (double)The tolerance. In in doubt, the document's absolute tolerance.
out_fillets (List<Brep>)The results of the fillet calculation.
out_breps0 (List<Brep>)The trim or split results of the Brep owned by faceWithCurve.
out_breps1 (List<Brep>)The trim or split results of the Brep owned by pFace1.
fitResults (out double[])array of doubles indicating fitting results: [0] max 3d point deviation along surface 0 [1] max 3d point deviation along surface 1 [2] max angle deviation along surface 0 (in degrees) [3] max angle deviation along surface 1 (in degrees) [4] max angle deviation between Bézier surfaces(in degrees) [5] max curvature difference between Bézier surfaces
true if successful, false otherwise.

Fit

[ConstOperation] public Surface Fit(int uDegree, int vDegree, double fitTolerance)
Fits a new surface through an existing surface.
inherited fromSurface
uDegree (int)the output surface U degree. Must be bigger than 1.
vDegree (int)the output surface V degree. Must be bigger than 1.
fitTolerance (double)The fitting tolerance.
A surface, or null on error.

FitCurveToSurface

public Curve[] FitCurveToSurface(Curve trimCurve3d, Vector3d trimProjectionDir, double tolerance, IEnumerable<double> Knots, bool divideIntoSections, ref Curve trimCurveOnSurface, ref Curve splitCurve)
inherited fromSurface
trimCurve3d (Curve)curve that will trim from one edge to the opposite
trimProjectionDir (Vector3d)Vector for projection, or zero vector for no projection
tolerance (double)3d tolerance for projection, splitting, fitting...
Knots (IEnumerable<double>)For TrimParamKnots=3, the custom knots to add
divideIntoSections (bool)If true, the surface is divided at each knot
trimCurveOnSurface (ref Curve)the actual trim curve as it is projected on or pulled to the surface
splitCurve (ref Curve)the actual fit curve the split the surface

FrameAt

[ConstOperation] public bool FrameAt(double u, double v, out Plane frame)
Computes the orient plane on a surface given a U and V parameter.

This is the simple evaluation call with no error handling.

inherited fromSurface
u (double)A first parameter.
v (double)A second parameter.
frame (out Plane)A frame plane that will be computed during this call.
true if this operation succeeded; otherwise false.

GetBoundingBox

[ConstOperation] public BoundingBox GetBoundingBox(bool accurate)
Bounding box solver. Gets the world axis aligned bounding box for the geometry.
inherited fromGeometryBase
accurate (bool)If true, a physically accurate bounding box will be computed. If not, a bounding box estimate will be computed. For some geometry types there is no difference between the estimate and the accurate bounding box. Estimated bounding boxes can be computed much (much) faster than accurate (or "tight") bounding boxes. Estimated bounding boxes are always similar to or larger than accurate bounding boxes.
The bounding box of the geometry in world coordinates or BoundingBox.Empty if not bounding box could be found.

GetBoundingBox

[ConstOperation] public BoundingBox GetBoundingBox(Plane plane, out Box worldBox)
Aligned Bounding box solver. Gets the plane aligned bounding box.
inherited fromGeometryBase
plane (Plane)Orientation plane for BoundingBox.
worldBox (out Box)Aligned box in World coordinates.
A BoundingBox in plane coordinates.

GetBoundingBox

[ConstOperation] public BoundingBox GetBoundingBox(Plane plane)
Aligned Bounding box solver. Gets the plane aligned bounding box.
inherited fromGeometryBase
plane (Plane)Orientation plane for BoundingBox.
A BoundingBox in plane coordinates.

GetBoundingBox

[ConstOperation] public virtual BoundingBox GetBoundingBox(Transform xform)
Aligned Bounding box solver. Gets the world axis aligned bounding box for the transformed geometry.
inherited fromGeometryBase
xform (Transform)Transformation to apply to object prior to the BoundingBox computation. The geometry itself is not modified.
The accurate bounding box of the transformed geometry in world coordinates or BoundingBox.Empty if not bounding box could be found.

GetMesh

#Since v5.0
[ConstOperation] public Mesh GetMesh(MeshType meshType)
Obtains a reference to a specified type of mesh for this brep face.
meshType (MeshType)The mesh type.
A mesh.

GetNextDiscontinuity

[ConstOperation] public bool GetNextDiscontinuity(int direction, Continuity continuityType, double t0, double t1, double cosAngleTolerance, double curvatureTolerance, out double t)
Searches for a derivative, tangent, or curvature discontinuity.
inherited fromSurface
direction (int)If 0, then "u" parameter is checked. If 1, then the "v" parameter is checked.
continuityType (Continuity)The desired continuity.
t0 (double)Search begins at t0. If there is a discontinuity at t0, it will be ignored. This makes it possible to repeatedly call GetNextDiscontinuity and step through the discontinuities.
t1 (double)(t0 != t1) If there is a discontinuity at t1 is will be ignored unless c is a locus discontinuity type and t1 is at the start or end of the curve.
cosAngleTolerance (double)default = cos(1 degree) Used only when continuityType is G1_continuous or G2_continuous. If the cosine of the angle between two tangent vectors is <= cos_angle_tolerance, then a G1 discontinuity is reported.
curvatureTolerance (double)(default = ON_SQRT_EPSILON) Used only when continuityType is G2_continuous. If K0 and K1 are curvatures evaluated from above and below and |K0 - K1| > curvature_tolerance, then a curvature discontinuity is reported.
t (out double)if a discontinuity is found, then t reports the parameter at the discontinuity.
Parametric continuity tests c = (C0_continuous, ..., G2_continuous): TRUE if a parametric discontinuity was found strictly between t0 and t1. Note well that all curves are parametrically continuous at the ends of their domains. Locus continuity tests c = (C0_locus_continuous, ...,G2_locus_continuous): TRUE if a locus discontinuity was found strictly between t0 and t1 or at t1 is the at the end of a curve. Note well that all open curves (IsClosed()=false) are locus discontinuous at the ends of their domains. All closed curves (IsClosed()=true) are at least C0_locus_continuous at the ends of their domains.

GetNextDiscontinuity

[ConstOperation] public bool GetNextDiscontinuity(int direction, Continuity continuityType, double t0, double t1, out double t)
Searches for a derivative, tangent, or curvature discontinuity.
inherited fromSurface
direction (int)If 0, then "u" parameter is checked. If 1, then the "v" parameter is checked.
continuityType (Continuity)The desired continuity.
t0 (double)Search begins at t0. If there is a discontinuity at t0, it will be ignored. This makes it possible to repeatedly call GetNextDiscontinuity and step through the discontinuities.
t1 (double)(t0 != t1) If there is a discontinuity at t1 is will be ignored unless c is a locus discontinuity type and t1 is at the start or end of the curve.
t (out double)if a discontinuity is found, then t reports the parameter at the discontinuity.
Parametric continuity tests c = (C0_continuous, ..., G2_continuous): TRUE if a parametric discontinuity was found strictly between t0 and t1. Note well that all curves are parametrically continuous at the ends of their domains. Locus continuity tests c = (C0_locus_continuous, ...,G2_locus_continuous): TRUE if a locus discontinuity was found strictly between t0 and t1 or at t1 is the at the end of a curve. Note well that all open curves (IsClosed()=false) are locus discontinuous at the ends of their domains. All closed curves (IsClosed()=true) are at least C0_locus_continuous at the ends of their domains.

GetNurbsFormParameterFromSurfaceParameter

[ConstOperation] public bool GetNurbsFormParameterFromSurfaceParameter(double surfaceS, double surfaceT, out double nurbsS, out double nurbsT)
Translates a parameter from the current surface to the parameter space of the surface returned by Surface.ToNurbsSurface().
inherited fromSurface
surfaceS (double)The parameter in the S, or sometimes U, direction, of this surface.
surfaceT (double)The parameter in the T, or sometimes V, direction of this surface.
nurbsS (out double)S on the NURBS form.
nurbsT (out double)T on the NURBS form.
True if the operation succeeded; otherwise, false.

GetObjectData

[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
Populates a System.Runtime.Serialization.SerializationInfo with the data needed to serialize the target object.
inherited fromCommonObject
info (SerializationInfo)The System.Runtime.Serialization.SerializationInfo to populate with data.
context (StreamingContext)The destination (see System.Runtime.Serialization.StreamingContext) for this serialization.

GetSpanVector

[ConstOperation] public double[] GetSpanVector(int direction)
Gets array of span "knots".
inherited fromSurface
direction (int)0 gets first parameter's domain, 1 gets second parameter's domain.
An array with span vectors; or null on error.

GetSurfaceParameterFromNurbsFormParameter

[ConstOperation] public bool GetSurfaceParameterFromNurbsFormParameter(double nurbsS, double nurbsT, out double surfaceS, out double surfaceT)
Translates a parameter from a value on the surface returned by Surface.ToNurbsSurface() to the current surface.
inherited fromSurface
nurbsS (double)The parameter in the S, or sometimes U, direction of the NURBS form surface.
nurbsT (double)The parameter in the T, or sometimes V, direction of the NURBS form surface.
surfaceS (out double)S on this surface.
surfaceT (out double)T o n this surface.
True if the operation succeeded; otherwise, false.

GetSurfaceSize

[ConstOperation] public bool GetSurfaceSize(out double width, out double height)
Gets an estimate of the size of the rectangle that would be created if the 3d surface where flattened into a rectangle.
inherited fromSurface
width (out double)corresponds to the first surface parameter.
height (out double)corresponds to the second surface parameter.
true if successful.
Re-parameterize a surface to minimize distortion in the map from parameter space to 3d. Surface surf = ...; double width, height; if ( surf.GetSurfaceSize( out width, out height ) ) { surf.SetDomain( 0, new ON_Interval( 0.0, width ) ); surf.SetDomain( 1, new ON_Interval( 0.0, height ) ); }

GetUserString

public string GetUserString(string key)
Gets user string from this geometry.
inherited fromGeometryBase
key (string)id used to retrieve the string.
string associated with the key if successful. null if no key was found.

GetUserStrings

public NameValueCollection GetUserStrings()
Gets a copy of all (user key string, user value string) pairs attached to this geometry.
inherited fromGeometryBase
A new collection.

HasNurbsForm

[ConstOperation] public int HasNurbsForm()
Is there a NURBS surface representation of this surface.
inherited fromSurface
0 unable to create NURBS representation with desired accuracy. 1 success - NURBS parameterization matches the surface's 2 success - NURBS point locus matches the surface's and the domain of the NURBS surface is correct. However, This surface's parameterization and the NURBS surface parameterization may not match. This situation happens when getting NURBS representations of surfaces that have a transcendental parameterization like spheres, cylinders, and cones.

InterpolatedCurveOnSurface

[ConstOperation] public NurbsCurve InterpolatedCurveOnSurface(IEnumerable<Point3d> points, double tolerance)
Constructs an interpolated curve on a surface, using 3D points.
inherited fromSurface
points (IEnumerable<Point3d>)A list, an array or any enumerable set of points.
tolerance (double)A tolerance value.
A new NURBS curve, or null on error.

InterpolatedCurveOnSurfaceUV

[ConstOperation] public NurbsCurve InterpolatedCurveOnSurfaceUV(IEnumerable<Point2d> points, double tolerance, bool closed, int closedSurfaceHandling)
Returns a curve that interpolates points on a surface. The interpolant lies on the surface.
inherited fromSurface
points (IEnumerable<Point2d>)List of at least two UV parameter locations on the surface.
tolerance (double)Tolerance used for the fit of the push-up curve. Generally, the resulting interpolating curve will be within tolerance of the surface.
closed (bool)If false, the interpolating curve is not closed. If true, the interpolating curve is closed, and the last point and first point should generally not be equal.
closedSurfaceHandling (int)If 0, all points must be in the rectangular domain of the surface. If the surface is closed in some direction, then this routine will interpret each point and place it at an appropriate location in the covering space. This is the simplest option and should give good results. If 1, then more options for more control of handling curves going across seams are available. If the surface is closed in some direction, then the points are taken as points in the covering space. Example, if srf.IsClosed(0)=true and srf.IsClosed(1)=false and srf.Domain(0)=srf.Domain(1)=Interval(0,1) then if closedSurfaceHandling=1 a point(u, v) in points can have any value for the u coordinate, but must have 0<=v<=1. In particular, if points = { (0.0,0.5), (2.0,0.5) } then the interpolating curve will wrap around the surface two times in the closed direction before ending at start of the curve. If closed=true the last point should equal the first point plus an integer multiple of the period on a closed direction.
A new NURBS curve if successful, or null on error.

InterpolatedCurveOnSurfaceUV

[ConstOperation] public NurbsCurve InterpolatedCurveOnSurfaceUV(IEnumerable<Point2d> points, double tolerance)
Returns a curve that interpolates points on a surface. The interpolant lies on the surface.
inherited fromSurface
points (IEnumerable<Point2d>)List of at least two UV parameter locations on the surface.
tolerance (double)Tolerance used for the fit of the push-up curve. Generally, the resulting interpolating curve will be within tolerance of the surface.
A new NURBS curve if successful, or null on error.

IsAtSeam

[ConstOperation] public int IsAtSeam(double u, double v)
Tests if a surface parameter value is at a seam.
inherited fromSurface
u (double)Surface u parameter to test.
v (double)Surface v parameter to test.
0 if not a seam, 1 if u == Domain(0)[i] and srf(u, v) == srf(Domain(0)[1-i], v) 2 if v == Domain(1)[i] and srf(u, v) == srf(u, Domain(1)[1-i]) 3 if 1 and 2 are true.

IsAtSingularity

[ConstOperation] public bool IsAtSingularity(double u, double v, bool exact)
Tests if a surface parameter value is at a singularity.
inherited fromSurface
u (double)Surface u parameter to test.
v (double)Surface v parameter to test.
exact (bool)If true, test if (u,v) is exactly at a singularity. If false, test if close enough to cause numerical problems.
true if surface is singular at (s,t)

IsClosed

[ConstOperation] public bool IsClosed(int direction)
Gets a value indicating if the surface is closed in a direction.
inherited fromSurface
direction (int)0 = U, 1 = V.
The indicating boolean value.

IsCone

[ConstOperation] public bool IsCone()
Determines if the surface is a portion of a cone within RhinoMath.ZeroTolerance.
inherited fromSurface
true if the surface is a portion of a cone.

IsCone

[ConstOperation] public bool IsCone(double tolerance)
Determines if the surface is a portion of a cone within a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a cone.

IsContinuous

[ConstOperation] public bool IsContinuous(Continuity continuityType, double u, double v)
Tests continuity at a surface parameter value.
inherited fromSurface
continuityType (Continuity)The continuity type to sample.
u (double)Surface u parameter to test.
v (double)Surface v parameter to test.
true if the surface has at least the specified continuity at the (u,v) parameter.

IsCylinder

[ConstOperation] public bool IsCylinder()
Determines if the surface is a portion of a cylinder within RhinoMath.ZeroTolerance.
inherited fromSurface
true if the surface is a portion of a cylinder.

IsCylinder

[ConstOperation] public bool IsCylinder(double tolerance)
Determines if the surface is a portion of a cylinder within a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a cylinder.

IsExtrusion

[ConstOperation] public bool IsExtrusion()
Determines if the surface is a portion of an extrusion within RhinoMath.ZeroTolerance.
inherited fromSurface
true if the surface is an extrusion.

IsExtrusion

[ConstOperation] public bool IsExtrusion(double tolerance)
Determines if the surface is a portion of an extrusion within a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if the surface is an extrusion.

IsIsoparametric

[ConstOperation] public IsoStatus IsIsoparametric(BoundingBox bbox)
Determines if a 2d bounding box is isoparametric in the parameter space of this surface.
inherited fromSurface
bbox (BoundingBox)Bounding box to test.
IsoStatus flag describing the iso-parametric relationship between the surface and the bounding box.

IsIsoparametric

[ConstOperation] public IsoStatus IsIsoparametric(Curve curve, Interval curveDomain)
Determines if a 2D curve is isoparametric in the parameter space of this surface.
inherited fromSurface
curve (Curve)Curve to test.
curveDomain (Interval)Sub domain of the curve.
IsoStatus flag describing the iso-parametric relationship between the surface and the curve.

IsIsoparametric

[ConstOperation] public IsoStatus IsIsoparametric(Curve curve)
Determines if a 2d curve is isoparametric in the parameter space of this surface.
inherited fromSurface
curve (Curve)Curve to test.
IsoStatus flag describing the iso-parametric relationship between the surface and the curve.

IsoCurve

[ConstOperation] public Curve IsoCurve(int direction, double constantParameter)
Gets isoparametric curve.
inherited fromSurface
Remarks: In this function "direction" indicates which direction the resulting curve runs. 0: horizontal, 1: vertical In the other Surface functions that take a "direction" argument, "direction" indicates if "constantParameter" is a "u" or "v" parameter.
direction (int)0 first parameter varies and second parameter is constant e.g., point on IsoCurve(0,c) at t is srf(t,c) This is a horizontal line from left to right 1 first parameter is constant and second parameter varies e.g., point on IsoCurve(1,c) at t is srf(c,t This is a vertical line from bottom to top.
constantParameter (double)The parameter that was constant on the original surface.
An isoparametric curve or null on error.

IsoCurve

[ConstOperation] public Curve IsoCurve(IsoStatus iso, double t)
Gets isoparametric curve. IsoStatus.None is not supported, and IsoStatus.X and IsoStatus.Y need valid t-values in the U- or V-domain respectively.
inherited fromSurface
iso (IsoStatus)IsoStatus.North returns the curve where U varies and V is V_max (paramter t is ignored) IsoStatus.East returns the curve where V varies and U is U_max (paramter t is ignored) IsoStatus.South returns the curve where U varies and V is V_min (paramter t is ignored) IsoStatus.West returns the curve where V varies and U is U_min (paramter t is ignored) IsoStatus.X returns the curve where V varies and U is t (if t is inside the U-domain) IsoStatus.Y returns the curve where U varies and V is t (if t is inside the V-domain)
t (double)the parameter used if iso is X or Y.
An isoparametric curve or null on error.

IsoCurve

[ConstOperation] public Curve IsoCurve(IsoStatus iso)
Gets isoparametric curve that corresponds to one of the four surface edges. Other IsoStatus values are not supported.
inherited fromSurface
iso (IsoStatus)IsoStatus.North returns the curve where U varies and V is V_max IsoStatus.East returns the curve where V varies and U is U_max IsoStatus.South returns the curve where U varies and V is V_min IsoStatus.West returns the curve where V varies and U is U_min
An isoparametric curve or null on error.

IsPeriodic

[ConstOperation] public bool IsPeriodic(int direction)
Gets a value indicating if the surface is periodic in a direction (default is false).
inherited fromSurface
direction (int)0 = U, 1 = V.
The indicating boolean value.

IsPlanar

[ConstOperation] public bool IsPlanar()
Tests a surface to see if it is planar to zero tolerance.
inherited fromSurface
true if the surface is planar (flat) to within RhinoMath.ZeroTolerance units (1e-12).

IsPlanar

[ConstOperation] public bool IsPlanar(double tolerance)
Tests a surface to see if it is planar to a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if there is a plane such that the maximum distance from the surface to the plane is <= tolerance.

IsPointOnFace

#Since v7.0
[ConstOperation] public PointFaceRelation IsPointOnFace(double u, double v, double tolerance)
Tests if a parameter space point is in the active region of a face.
u (double)Parameter space point U value.
v (double)Parameter space point V value.
tolerance (double)3D tolerance used when checking to see if the point is on a face or inside of a loop.
A value describing the relationship between the point and the face.

IsPointOnFace

#Since v5.0
[ConstOperation] public PointFaceRelation IsPointOnFace(double u, double v)
Tests if a parameter space point is in the active region of a face.
u (double)Parameter space point U value.
v (double)Parameter space point V value.
A value describing the relationship between the point and the face.

IsSingular

[ConstOperation] public bool IsSingular(int side)
true if surface side is collapsed to a point.
inherited fromSurface
side (int)side of parameter space to test 0 = south, 1 = east, 2 = north, 3 = west.
True if this specific side of the surface is singular; otherwise, false.

IsSphere

[ConstOperation] public bool IsSphere()
Determines if the surface is a portion of a sphere within RhinoMath.ZeroTolerance.
inherited fromSurface
true if the surface is a portion of a sphere.

IsSphere

[ConstOperation] public bool IsSphere(double tolerance)
Determines if the surface is a portion of a sphere within a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a sphere.

IsTorus

[ConstOperation] public bool IsTorus()
Determines if the surface is a portion of a torus within RhinoMath.ZeroTolerance.
inherited fromSurface
true if the surface is a portion of a torus.

IsTorus

[ConstOperation] public bool IsTorus(double tolerance)
Determines if the surface is a portion of a torus within a given tolerance.
inherited fromSurface
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a torus.

IsValidWithLog

public bool IsValidWithLog(out string log)
Determines if an object is valid. Also provides a report on errors if this object happens not to be valid.
inherited fromCommonObject
log (out string)A textual log. This out parameter is assigned during this call.
true if this object is valid; false otherwise.

LocalClosestPoint

[ConstOperation] public bool LocalClosestPoint(Point3d testPoint, double seedU, double seedV, out double u, out double v)
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.
inherited fromSurface
testPoint (Point3d)A point to test against.
seedU (double)The seed parameter in the U direction.
seedV (double)The seed parameter in the V direction.
u (out double)U parameter of the surface that is closest to testPoint.
v (out double)V parameter of the surface that is closest to testPoint.
true if the search is successful, false if the search fails.

MakeDeformable

public bool MakeDeformable()
If possible, converts the object into a form that can be accurately modified with "squishy" transformations like projections, shears, an non-uniform scaling.
inherited fromGeometryBase
false if object cannot be converted to a deformable object. true if object was already deformable or was converted into a deformable object.

MemoryEstimate

[CLSCompliant(false)] [ConstOperation] public uint MemoryEstimate()
Computes an estimate of the number of bytes that this object is using in memory.
inherited fromGeometryBase
An estimated memory footprint.

NonConstOperation

protected override void NonConstOperation()
Destroy cache handle
inherited fromGeometryBase

NormalAt

[ConstOperation] public Vector3d NormalAt(double u, double v)
Computes the surface normal at a point.

This is the simple evaluation call - it does not support error handling.

inherited fromSurface
u (double)A U parameter.
v (double)A V parameter.
The normal.

Offset

[ConstOperation] public Surface Offset(double distance, double tolerance)
Constructs a new surface which is offset from the current surface.
inherited fromSurface
distance (double)Distance (along surface normal) to offset.
tolerance (double)Offset accuracy.
The offset surface or null on failure.

OnSwitchToNonConst

protected override void OnSwitchToNonConst()
Is called when a non-constant operation occurs.
inherited fromGeometryBase

PointAt

[ConstOperation] public Point3d PointAt(double u, double v)
Evaluates a point at a given parameter.
inherited fromSurface
u (double)evaluation parameters.
v (double)evaluation parameters.
Point3d.Unset on failure.

Pullback

[ConstOperation] public Curve Pullback(Curve curve3d, double tolerance, Interval curve3dSubdomain)
Pulls a 3d curve back to the surface's parameter space.
inherited fromSurface
curve3d (Curve)A curve.
tolerance (double)the maximum acceptable 3d distance between from surface(curve_2d(t)) to the locus of points on the surface that are closest to curve_3d.
curve3dSubdomain (Interval)A sub-domain of the curve to sample.
2d curve.

Pullback

[ConstOperation] public Curve Pullback(Curve curve3d, double tolerance)
Pulls a 3d curve back to the surface's parameter space.
inherited fromSurface
curve3d (Curve)The curve to pull.
tolerance (double)the maximum acceptable 3d distance between from surface(curve_2d(t)) to the locus of points on the surface that are closest to curve_3d.
2d curve.

PullPointsToFace

#Since v5.0
[ConstOperation] public Point3d[] PullPointsToFace(IEnumerable<Point3d> points, double tolerance)
Pulls one or more points to a brep face.
points (IEnumerable<Point3d>)Points to pull.
tolerance (double)Tolerance for pulling operation. Only points that are closer than tolerance will be pulled to the face.
An array of pulled points.

Pushup

[ConstOperation] public Curve Pushup(Curve curve2d, double tolerance, Interval curve2dSubdomain)
Computes a 3d curve that is the composite of a 2d curve and the surface map.
inherited fromSurface
curve2d (Curve)a 2d curve whose image is in the surface's domain.
tolerance (double)the maximum acceptable distance from the returned 3d curve to the image of curve_2d on the surface.
curve2dSubdomain (Interval)The curve interval (a sub-domain of the original curve) to use.
3d curve.

Pushup

[ConstOperation] public Curve Pushup(Curve curve2d, double tolerance)
Computes a 3d curve that is the composite of a 2d curve and the surface map.
inherited fromSurface
curve2d (Curve)a 2d curve whose image is in the surface's domain.
tolerance (double)the maximum acceptable distance from the returned 3d curve to the image of curve_2d on the surface.
3d curve.

Rebuild

[ConstOperation] public NurbsSurface Rebuild(int uDegree, int vDegree, int uPointCount, int vPointCount)
Rebuilds an existing surface to a given degree and point count.
inherited fromSurface
uDegree (int)the output surface u degree.
vDegree (int)the output surface u degree.
uPointCount (int)The number of points in the output surface u direction. Must be bigger than uDegree (maximum value is 1000)
vPointCount (int)The number of points in the output surface v direction. Must be bigger than vDegree (maximum value is 1000)
new rebuilt surface on success. null on failure.

RebuildEdges

#Since v5.0
public bool RebuildEdges(double tolerance, bool rebuildSharedEdges, bool rebuildVertices)
Rebuild the edges used by a face so they lie on the surface.
tolerance (double)tolerance for fitting 3d edge curves.
rebuildSharedEdges (bool)if false and edge is used by this face and a neighbor, then the edge will be skipped.
rebuildVertices (bool)if true, vertex locations are updated to lie on the surface.
true on success.

RebuildOneDirection

[ConstOperation] public NurbsSurface RebuildOneDirection(int direction, int pointCount, LoftType loftType, double refitTolerance)
Rebuilds an existing surface with a new surface to a given point count in either the u or v directions independently.
inherited fromSurface
direction (int)The direction (0 = U, 1 = V).
pointCount (int)The number of points in the output surface in the "direction" direction.
loftType (LoftType)The loft type
refitTolerance (double)The refit tolerance. When in doubt, use the document's model absolute tolerance.
new rebuilt surface on success. null on failure.

RefitSimplySplitSurface

[ConstOperation] public bool RefitSimplySplitSurface(Curve trimCurve3d, Vector3d trimProjectionDir, double tolerance, RefitTrimKnotMode knotAdditionMode, int numInsertKnots, IEnumerable<double> Knots, RefitTrimSectionMode sectionMode, int numNonTrimSpans, bool meetCurve, bool oneSided, Point3d PtActive, bool outputSurface, bool outputCurve, ref int numSections, List<Surface> lowerSurface, List<Surface> upperSurface, List<Curve> edgeCurve, ref double FitMeasurement, ref Curve trimCurveOnSurface, ref Curve splitCurve)
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.
inherited fromSurface
trimCurve3d (Curve)curve that will trim from one edge to the opposite
trimProjectionDir (Vector3d)Vector for projection, or zero vector for no projection
tolerance (double)3d tolerance for projection, splitting, fitting...
knotAdditionMode (RefitTrimKnotMode)0: no, don't add any 1: Yes, add nKnots knots, spaced regularly over the entire surface 2: Yes, add nKnots knots, spaced regularly PER EXISTING SPAN 3: Yes, add nKnots knots, as provided in the array Knots
numInsertKnots (int)FOr TrimParamKnots != 3, the number of knots to add
Knots (IEnumerable<double>)For TrimParamKnots=3, the custom knots to add
sectionMode (RefitTrimSectionMode)0: no sections, just output one "upper" and one "lower" surface 1: Yes, divide into sections at each of the input surface's existing knots 2: Yes, divide into sections at each of the "nKnot" added knot values 3: Yes, divide into sections at ALL knot values (i.e. both 1 and 2)
numNonTrimSpans (int)number of spans in the non-trim parameter
meetCurve (bool)Drag the refit surfaces out to meet the original trim curve
oneSided (bool)Inputting an "active" point means you only want one side of the "split" to be refit - In other words, you want a "trim refit". Results will be returned in "srfLower"
PtActive (Point3d)Active point
outputSurface (bool)if true, output fit surfaces: srfLower and, if !bActivePt, srfUpper
outputCurve (bool)if true, output fit curve: crvEdge
numSections (ref int)
lowerSurface (List<Surface>)Surfaces (# = nSections) below trim curve in srf's (u,v) domain
upperSurface (List<Surface>)Surfaces (# = nSections) above trim curve in srf's (u,v) domain
edgeCurve (List<Curve>)Curves (# = nSections) fit to trim curve with srf's u/v parameter
FitMeasurement (ref double)Calculated based on trimParamSections
trimCurveOnSurface (ref Curve)the actual trim curve as it is projected on or pulled to the surface
splitCurve (ref Curve)the actual fit curve the split the surface
true for zuccess, false for failure

RefitSplit

[ConstOperation] public int RefitSplit(Curve curve, Vector3d trimProjectionDir, double tolerance, IEnumerable<double> Knots, bool bMeetCurve, bool divideIntoSections, List<Surface> srfLower, List<Surface> srfUpper, List<Curve> edgeCurve, ref Curve trimCurveOnSurface, ref Curve splitCurve)
Splits the surface into two and refits the split edge
inherited fromSurface
curve (Curve)The curve used to split the surface. It must be a simple division, from one edge of the parametric space to the opposite edge.
trimProjectionDir (Vector3d)Vector for projection, or zero vector for no projection
tolerance (double)3d tolerance for projection, splitting, fitting...
Knots (IEnumerable<double>)
bMeetCurve (bool)
divideIntoSections (bool)If true, the surface is divided at each knot
srfLower (List<Surface>)Surfaces below trim curve in srf's (u,v) domain
srfUpper (List<Surface>)Surfaces below trim curve in srf's (u,v) domain
edgeCurve (List<Curve>)Curves (# = nSections) fit to trim curve with srf's u/v parameter
trimCurveOnSurface (ref Curve)the actual trim curve as it is projected on or pulled to the surface
splitCurve (ref Curve)the actual fit curve the split the surface

RefitTrim

#Since v7.0
public Surface[] RefitTrim(BrepEdge edge, IEnumerable<double> knots, double tolerance, bool bSections, ref double fitQuality)
The RefitTrim command replaces a trimmed surface edge with an untrimmed edge.
edge (BrepEdge)The edge to fit.
knots (IEnumerable<double>)The custom knot vector to use, or an empty vector to use the existing knots of the surface.
tolerance (double)The 3d tolerance for projection, splitting, and fitting.
bSections (bool)If true, the surface is divided into separate surface patches at all knots.
fitQuality (ref double)A measure of the 3d fit to the trim curve.
The trimmed surfaces.

RemoveHoles

#Since v6.0
[ConstOperation] public Brep RemoveHoles(double tolerance)
Remove all inner loops, or holes, from a Brep face.
tolerance (double)

Reverse

public Surface Reverse(int direction, bool inPlace)
Same as Reverse, but if inPlace is set to true this Surface is modified instead of a new copy being created.
inherited fromSurface
direction (int)0 for first parameter's domain, 1 for second parameter's domain.
inPlace (bool)
If inPlace is False, a new reversed surface on success. If inPlace is true, this surface instance is returned on success.

Reverse

[ConstOperation] public Surface Reverse(int direction)
Reverses parameterization Domain changes from [a,b] to [-b,-a]
inherited fromSurface
direction (int)0 for first parameter's domain, 1 for second parameter's domain.
a new reversed surface on success.

Rotate

public bool Rotate(double angleRadians, Vector3d rotationAxis, Point3d rotationCenter)
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule).
inherited fromGeometryBase
angleRadians (double)Angle of rotation in radians.
rotationAxis (Vector3d)Direction of the axis of rotation.
rotationCenter (Point3d)Point on the axis of rotation.
true if geometry successfully rotated.

Scale

public bool Scale(double scaleFactor)
Scales the object by the specified factor. The scale is centered at the origin.
inherited fromGeometryBase
scaleFactor (double)The uniform scaling factor.
true if geometry successfully scaled.

SetDomain

#Since v5.0
public override bool SetDomain(int direction, Interval domain)
Sets the surface domain of this face.
direction (int)Direction of face to set (0 = U, 1 = V).
domain (Interval)Domain to apply.
true on success, false on failure.

SetMesh

#Since v5.0
public bool SetMesh(MeshType meshType, Mesh mesh)
Sets a reference to a specified type of mesh for this brep face.
meshType (MeshType)The mesh type.
mesh (Mesh)The new mesh.
true if the operation succeeded; otherwise false.

SetPackId

#Since v7.19
[CLSCompliant(false)] public void SetPackId(uint packId)
Used by SubD functions that create breps to transmit the subd face SubDFace.PackId value to the brep face or faces generated from the subd face. Unless you are an expert and doing something very carefully and very fancy, to not call this function.
packId (uint)The pack id.

SetUserString

public bool SetUserString(string key, string value)
Attach a user string (key,value combination) to this geometry.
inherited fromGeometryBase
key (string)id used to retrieve this string.
value (string)string associated with key.
true on success.

ShortPath

[ConstOperation] public Curve ShortPath(Point2d start, Point2d end, double tolerance)
Constructs a geodesic between 2 points, used by ShortPath command in Rhino.
inherited fromSurface
start (Point2d)start point of curve in parameter space. Points must be distinct in the domain of the surface.
end (Point2d)end point of curve in parameter space. Points must be distinct in the domain of the surface.
tolerance (double)tolerance used in fitting discrete solution.
a geodesic curve on the surface on success. null on failure.

ShrinkFace

#Since v6.0
public bool ShrinkFace(ShrinkDisableSide disableSide)
Shrinks the underlying untrimmed surface of this Brep face close to trimming boundaries. Shrinking a surface is like extending smoothly, only backwards. knot of full multiplicity are added where you want the surface to be cut off. Then the remaining control points are thrown away.
disableSide (BrepFace.ShrinkDisableSide)The side(s) of the surface to not shrink.
true on success, false on failure.

ShrinkSurfaceToEdge

#Since v6.16
public bool ShrinkSurfaceToEdge()
Shrinks the underlying untrimmed surface of this Brep face right to the trimming boundaries. Note, shrinking the trimmed surface can sometimes cause problems later since having the edges so close to the trimming boundaries can cause commands that use the surface edges as input to fail.
true on success, false on failure.

Smooth

public Surface Smooth(double smoothFactor, bool bXSmooth, bool bYSmooth, bool bZSmooth, bool bFixBoundaries, SmoothingCoordinateSystem coordinateSystem, Plane plane)
Smooths a surface by averaging the positions of control points in a specified region.
inherited fromSurface
smoothFactor (double)The smoothing factor, which controls how much control points move towards the average of the neighboring control points.
bXSmooth (bool)When true control points move in X axis direction.
bYSmooth (bool)When true control points move in Y axis direction.
bZSmooth (bool)When true control points move in Z axis direction.
bFixBoundaries (bool)When true the surface edges don't move.
coordinateSystem (SmoothingCoordinateSystem)The coordinates to determine the direction of the smoothing.
plane (Plane)If SmoothingCoordinateSystem.CPlane specified, then the construction plane.
The smoothed surface if successful, null otherwise.

Smooth

public Surface Smooth(double smoothFactor, bool bXSmooth, bool bYSmooth, bool bZSmooth, bool bFixBoundaries, SmoothingCoordinateSystem coordinateSystem)
Smooths a surface by averaging the positions of control points in a specified region.
inherited fromSurface
smoothFactor (double)The smoothing factor, which controls how much control points move towards the average of the neighboring control points.
bXSmooth (bool)When true control points move in X axis direction.
bYSmooth (bool)When true control points move in Y axis direction.
bZSmooth (bool)When true control points move in Z axis direction.
bFixBoundaries (bool)When true the surface edges don't move.
coordinateSystem (SmoothingCoordinateSystem)The coordinates to determine the direction of the smoothing.
The smoothed surface if successful, null otherwise.

SpanCount

[ConstOperation] public int SpanCount(int direction)
Gets number of smooth nonempty spans in the parameter direction.
inherited fromSurface
direction (int)0 gets first parameter's domain, 1 gets second parameter's domain.
The span count.

Split

#ExampleSince v5.0
[ConstOperation] public Brep Split(IEnumerable<Curve> curves, double tolerance)
Split this face using 3D trimming curves.
curves (IEnumerable<Curve>)Curves to split with.
tolerance (double)Tolerance for splitting, when in doubt use the Document Absolute Tolerance.
A brep consisting of all the split fragments, or null on failure.

Split

[ConstOperation] public Surface[] Split(int direction, double parameter)
Splits (divides) the surface into two parts at the specified parameter
inherited fromSurface
direction (int)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 surface in the array
parameter (double)value of constant parameter in interval returned by Domain(direction)
Array of two surfaces on success

ToBrep

[ConstOperation] public Brep ToBrep()
Converts the surface into a Brep.
inherited fromSurface
A Brep with a similar shape like this surface or null.

ToJSON

public string ToJSON(SerializationOptions options)
Create a JSON string representation of this object
inherited fromCommonObject
options (SerializationOptions)

ToNurbsSurface

[ConstOperation] public NurbsSurface ToNurbsSurface()
Gets a NURBS surface representation of this surface. Default tolerance of 0.0 is used.
inherited fromSurface
NurbsSurface on success, null on failure.

ToNurbsSurface

[ConstOperation] public NurbsSurface ToNurbsSurface(double tolerance, out int accuracy)
Gets a NURBS surface representation of this surface.
inherited fromSurface
tolerance (double)tolerance to use when creating NURBS representation.
accuracy (out int)

0 = unable to create NURBS representation with desired accuracy.

1 = success - returned NURBS parameterization matches the surface's to the desired accuracy.

2 = success - returned NURBS point locus matches the surface's to the desired accuracy and the domain of the NURBS surface is correct. However, this surface's parameterization and the NURBS surface parameterization may not match to the desired accuracy. This situation happens when getting NURBS representations of surfaces that have a transcendental parameterization like spheres, cylinders, and cones.

NurbsSurface on success, null on failure.

Transform

public bool Transform(Transform xform)
Transforms the geometry. If the input Transform has a SimilarityType of OrientationReversing, you may want to consider flipping the transformed geometry after calling this function when it makes sense. For example, you may want to call Flip() on a Brep after transforming it.
inherited fromGeometryBase
xform (Transform)Transformation to apply to geometry.
true if geometry successfully transformed.

Translate

public bool Translate(double x, double y, double z)
Translates the object along the specified vector.
inherited fromGeometryBase
x (double)The X component.
y (double)The Y component.
z (double)The Z component.
true if geometry successfully translated.

Translate

public bool Translate(Vector3d translationVector)
Translates the object along the specified vector.
inherited fromGeometryBase
translationVector (Vector3d)A moving vector.
true if geometry successfully translated.

Transpose

[ConstOperation] public Surface Transpose()
Transposes surface parameterization (swap U and V)
inherited fromSurface
New transposed surface on success, null on failure.

Transpose

public Surface Transpose(bool inPlace)
Transposes surface parameterization (swap U and V)
inherited fromSurface
inPlace (bool)
New transposed surface on success, null on failure.

Trim

[ConstOperation] public Surface Trim(Interval u, Interval v)
Constructs a sub-surface that covers the specified UV trimming domain.
inherited fromSurface
u (Interval)Domain of surface along U direction to include in the subsurface.
v (Interval)Domain of surface along V direction to include in the subsurface.
SubSurface on success, null on failure.

TrimAwareIsoCurve

#Since v5.0
[ConstOperation] public Curve[] TrimAwareIsoCurve(int direction, double constantParameter)
Similar to IsoCurve function, except this function pays attention to trims on faces and may return multiple curves.
Remarks: In this function "direction" indicates which direction the resulting curve runs. 0: horizontal, 1: vertical In the other Surface functions that take a "direction" argument, "direction" indicates if "constantParameter" is a "u" or "v" parameter.
direction (int)Direction of isocurve.

0 = Isocurve connects all points with a constant U value.

1 = Isocurve connects all points with a constant V value.

constantParameter (double)Surface parameter that remains identical along the isocurves.
Isoparametric curves connecting all points with the constantParameter value.

TrimAwareIsoIntervals

#Since v5.0
[ConstOperation] public Interval[] TrimAwareIsoIntervals(int direction, double constantParameter)
Gets intervals where the iso curve exists on a BrepFace (trimmed surface)
direction (int)Direction of isocurve.

0 = Isocurve connects all points with a constant U value.

1 = Isocurve connects all points with a constant V value.

constantParameter (double)Surface parameter that remains identical along the isocurves.
If direction = 0, the parameter space iso interval connects the 2d points (intervals[i][0],iso_constant) and (intervals[i][1],iso_constant). If direction = 1, the parameter space iso interval connects the 2d points (iso_constant,intervals[i][0]) and (iso_constant,intervals[i][1]).

TryGetCone

[ConstOperation] public bool TryGetCone(out Cone cone, double tolerance)
Tests a surface to see if it is a portion of a cone and returns the cone.
inherited fromSurface
cone (out Cone)On success, the cone parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a cone.

TryGetCone

[ConstOperation] public bool TryGetCone(out Cone cone)
Tests a surface to see if it is a portion of a cone within RhinoMath.ZeroTolerance and return the cone.
inherited fromSurface
cone (out Cone)On success, the cone parameters are filled in.
true if the surface is a portion of a cone.

TryGetCylinder

[ConstOperation] public bool TryGetCylinder(out Cylinder cylinder, double tolerance)
Tests a surface to see if it is a portion of a cylinder and return the infinite cylinder.
inherited fromSurface
Remarks: If successful, an infinite cylinder is returned. When a surface has a cylindrical shape, even if its ends are not circles on the cylinder, it returns the axis and radius. You can detect infinite cylinders using Cylinder.IsFinite.
cylinder (out Cylinder)On success, the cylinder parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a cylinder.

TryGetCylinder

[ConstOperation] public bool TryGetCylinder(out Cylinder cylinder)
Tests a surface to see if it is a portion of a cylinder within RhinoMath.ZeroTolerance and return the cylinder.
inherited fromSurface
Remarks: If successful, an infinite cylinder is returned. When a surface has a cylindrical shape, even if its ends are not circles on the cylinder, it returns the axis and radius. You can detect infinite cylinders using Cylinder.IsFinite.
cylinder (out Cylinder)On success, the cylinder parameters are filled in.
true if the surface is a portion of a cylinder.

TryGetExtrusion

[ConstOperation] public bool TryGetExtrusion(out Extrusion extrusion, double tolerance)
Tests a surface to see if it is an extrusion and returns the extrusion.
inherited fromSurface
extrusion (out Extrusion)On success, the extrusion parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of an extrusion.

TryGetExtrusion

[ConstOperation] public bool TryGetExtrusion(out Extrusion extrusion)
Tests a surface to see if it is an extrusion within RhinoMath.ZeroTolerance and returns the extrusion.
inherited fromSurface
extrusion (out Extrusion)On success, the extrusion parameters are filled in.
true if the surface is an extrusion.

TryGetFiniteCylinder

[ConstOperation] public bool TryGetFiniteCylinder(out Cylinder cylinder, double tolerance)
Tests a surface with the assumption that it might be a right circular cylinder and returns this geometry.
inherited fromSurface
Remarks: If successful, a finite cylinder is returned.
cylinder (out Cylinder)On success, the cylinder parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a cylinder.

TryGetInteriorPoint

#Since v9.0
[ConstOperation] public bool TryGetInteriorPoint(out Point3d point)
Tries to get a 3-D point that is comfortably in the interior of this face, which is useful for face labeling and for face classification.
Remarks: The returned point is not necessarily the point on the face that is furthest away from the face's boundary. It is just a point that is relatively far away from all of the face's trimming curves.
point (out Point3d)The interior point if successful.
true if successful, false otherwise.

TryGetPlane

[ConstOperation] public bool TryGetPlane(out Plane plane, double tolerance)
Tests a surface for planarity and return the plane.
inherited fromSurface
plane (out Plane)On success, the plane parameters are filled in.
tolerance (double)tolerance to use when checking.
true if there is a plane such that the maximum distance from the surface to the plane is <= tolerance.

TryGetPlane

[ConstOperation] public bool TryGetPlane(out Plane plane)
Tests a surface for planarity and return the plane.
inherited fromSurface
plane (out Plane)On success, the plane parameters are filled in.
true if there is a plane such that the maximum distance from the surface to the plane is <= RhinoMath.ZeroTolerance.

TryGetSphere

[ConstOperation] public bool TryGetSphere(out Sphere sphere, double tolerance)
Test a surface to see if it is a portion of a sphere and return the sphere.
inherited fromSurface
sphere (out Sphere)On success, the sphere parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a sphere.

TryGetSphere

[ConstOperation] public bool TryGetSphere(out Sphere sphere)
Test a surface to see if it is a portion of a sphere and return the sphere.
inherited fromSurface
sphere (out Sphere)On success, the sphere parameters are filled in.
true if the surface is a portion of a sphere.

TryGetTorus

[ConstOperation] public bool TryGetTorus(out Torus torus, double tolerance)
Tests a surface to see if it is a portion of a torus and returns the torus.
inherited fromSurface
torus (out Torus)On success, the torus parameters are filled in.
tolerance (double)tolerance to use when checking.
true if the surface is a portion of a torus.

TryGetTorus

[ConstOperation] public bool TryGetTorus(out Torus torus)
Tests a surface to see if it is a portion of a torus within RhinoMath.ZeroTolerance and returns the torus.
inherited fromSurface
torus (out Torus)On success, the torus parameters are filled in.
true if the surface is a portion of a torus.

UnderlyingSurface

#Since v5.0
[ConstOperation] public Surface UnderlyingSurface()
Gets the untrimmed surface that is the base of this face.
A surface, or null on error.

VariableOffset

public Surface VariableOffset(double uMinvMin, double uMinvMax, double uMaxvMin, double uMaxvMax, double tolerance)
Copies a surface so that all locations at the corners of the copied surface are specified distances from the original surface.
inherited fromSurface
uMinvMin (double)Offset distance at Domain(0).Min, Domain(1).Min.
uMinvMax (double)Offset distance at Domain(0).Min, Domain(1).Max.
uMaxvMin (double)Offset distance at Domain(0).Max, Domain(1).Min.
uMaxvMax (double)Offset distance at Domain(0).Max, Domain(1).Max.
tolerance (double)The offset tolerance.
The offset surface if successful, null otherwise.

VariableOffset

public Surface VariableOffset(double uMinvMin, double uMinvMax, double uMaxvMin, double uMaxvMax, IEnumerable<Point2d> interiorParameters, IEnumerable<double> interiorDistances, double tolerance)
Copies a surface so that all locations at the corners, and from specified interior locations, of the copied surface are specified distances from the original surface.
inherited fromSurface
uMinvMin (double)Offset distance at Domain(0).Min, Domain(1).Min.
uMinvMax (double)Offset distance at Domain(0).Min, Domain(1).Max.
uMaxvMin (double)Offset distance at Domain(0).Max, Domain(1).Min.
uMaxvMax (double)Offset distance at Domain(0).Max, Domain(1).Max.
interiorParameters (IEnumerable<Point2d>)An array of interior UV parameters to offset from.
interiorDistances (IEnumerable<double>)>An array of offset distances at the interior UV parameters.
tolerance (double)The offset tolerance.
The offset surface if successful, null otherwise.