The number of errors the SubD code has trapped since the process started.
This is a diagnostic counter, not a per-SubD property. Sample it before and after an operation to find out whether that operation hit an internal error, which usually means the SubD is not valid.
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.
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)
Clear all cached evaluation information (meshes, surface points, bounding boxes, ...) that depends on edge tags, vertex tags, and the location of vertex control points.
Gets the point on this SubD's surface that is closest to a test point.
Remarks: The search is refined on the surface itself, so the result is not limited to the surface mesh. The one exception is the corner of an extraordinary vertex, where the surface derivatives needed to refine are not available; there the result is the closest surface mesh point, so its accuracy is the accuracy of the surface mesh. Call UpdateSurfaceMeshCache(bool) first if you need more accuracy near extraordinary vertices.
Gets the points on this SubD's surface that are closest to each of a list of test points. This is faster than calling ClosestPoint(Point3d, Point3d, SubDComponentParameter) in a loop because the spatial index over the surface is built once.
Returns: 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.
Expert function that copies cached evaluations of component subdivision points and limit surface information from src to this. Typically this is done for performance critical situations like control point editing: - Copy a SubD to be modified (this does not copy the evaluation cache) - Copy the evaluation cache from the unmodified SubD - Modify the SubD copy - Update the surface mesh cache so that only the modified parts are recalculated - Display, meshing, bounding boxes on the modified SubD are now available
Remarks: Shape curves must be in the proper order and orientation and have point counts for the desired surface. Shape curves must be either all open or all closed.
Create a SubD that approximates the surface. If the surface is a SubD friendly NURBS surface and withCorners is true, then the SubD and input surface will have the same geometry.
If the surface is open, then the corner vertices with be tagged as VertexTagCorner. This makes the resulting SubD have sharp corners to match the appearance of the input surface.
Fits a SubD through a series of profile curves that define the SubD cross-sections and one curve that defines a SubD edge.
Remarks: Shape curves must be in the proper order and orientation. Shape curves must have the same point counts and rail curves must have the same point counts. Shape curves will relocated to the nearest pair of Greville points on the rails. Shape curves will be made at each pair of rail edit points where there isn't an input shape.
Determines how sweep frame rotations are calculated. If false (Freeform), frame are propagated based on a reference direction taken from the rail curve curvature direction. If true (Roadlike), frame rotations are calculated based on a vector supplied in "roadlikeNormal" and the world coordinate system.
Fits a SubD through a series of profile curves that define the SubD cross-sections and two curves that defines SubD edges.
Remarks: Shape curves must be in the proper order and orientation. Shape curves must have the same point counts and rail curves must have the same point counts. Shape curves will relocated to the nearest pair of Greville points on the rails. Shape curves will be made at each pair of rail edit points where there isn't an input shape.
Creates a SubD sphere made from polar triangle fans and bands of quads. The result resembles a globe with triangle fans at the poles and the edges forming latitude parallels and longitude meridians.
If vertexLocation = SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
Number of faces along the sphere's meridians. (axialFaceCount >= 2) For example, if you wanted each face to span 30 degrees of latitude, you would pass 6 (=180 degrees/30 degrees) for axialFaceCount.
Number of faces around the sphere's parallels. (equatorialFaceCount >= 3) For example, if you wanted each face to span 30 degrees of longitude, you would pass 12 (=360 degrees/30 degrees) for equatorialFaceCount.
Returns: If the input parameters are valid, a SubD globe sphere is returned. Otherwise null is returned.
Creates a SubD sphere based on an icosohedron (20 triangular faces and 5 valent vertices). This is a goofy topology for a Catmull-Clark subdivision surface (all triangles, all vertices have 5 edges). You may want to consider using the much behaved result from CreateSubDQuadSphere(sphere, vertexLocation, 1) or even the result from CreateSubDGlobeSphere().
If vertexLocation = SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
Returns: If the input parameters are valid, a SubD icosahedron is returned. Otherwise null is returned.
If vertexLocation = SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
Creates a SubD sphere made from triangular faces. This is a goofy topology for a Catmull-Clark subdivision surface (all triangles and all vertices have 5 or 6 edges). You may want to consider using the much behaved result from CreateSubDQuadSphere() or even the result from CreateSubDGlobeSphere().
If vertexLocation = SubDComponentLocation::ControlNet, then the control net points will be on the surface of the sphere. Otherwise the limit surface points will be on the sphere.
Deleting a vertex deletes every edge and face attached to it. Deleting an edge deletes every face attached to it. Deleting a face deletes only that face.
If true, edges that survive the deletion of a face they bounded get their runtime mark set, so the caller can find the boundary of the hole that was opened.
Dissolves the given edges and vertices, merging the faces around them, and deletes the given faces.
This is the difference between removing an edge between two quads to get one bigger face, and removing the two quads to leave a hole. Use DeleteComponents(IEnumerable<SubDComponent>, bool) when a hole is what you want.
If true, then only the boundary edges are duplicated. If false, then all edges are duplicated. If both boundaryOnly and interiorOnly are true, an empty array is returned.
If true, then only the interior edges are duplicated. If false, then all edges are duplicated. Note: interior edges with faces of different orientations are also returned. If both boundaryOnly and interiorOnly are true, an empty array is returned.
If true, then only the smooth (and not sharp) edges are duplicated. If false, then all edges are duplicated. If both smoothOnly and sharpOnly and creaseOnly are true, an empty array is returned.
If true, then only the sharp edges are duplicated. If false, then all edges are duplicated. If both smoothOnly and sharpOnly and creaseOnly are true, an empty array is returned.
If true, then only the creased edges are duplicated. If false, then all edges are duplicated. If both smoothOnly and sharpOnly and creaseOnly are true, an empty array is returned.
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.
Returns: An object of the same type as this object.
This behavior is overridden by implementing classes.
EnsurePrivateCopy
publicvoidEnsurePrivateCopy()
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.
Evaluates the location and unit normal of a point on this SubD's surface.
Remarks: The surface derivatives this needs are not available in the corner of an extraordinary vertex unless the parameter is exactly at the vertex, at the midpoint of one of its edges, or at the center of the face.
Evaluates the principal curvatures of a point on this SubD's surface.
Remarks: This needs second order surface derivatives. They are available throughout the corner quad of an extraordinary vertex, but not exactly on such a vertex: a SubD limit surface is C1 there but generally not C2, so it has no curvature. This returns false in that case, and kappa1 and kappa2 are double.NaN.
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.
Returns: The bounding box of the geometry in world coordinates or BoundingBox.Empty if not bounding box could be found.
If true, and if all inputs share the same symmetry, the output will also be symmetrical wrt. that symmetry. If false, or true but no common symmetry exists, symmetry information is removed from all newly joined SubDs.
Joins an enumeration of SubDs to form as few as possible resulting SubDs. There may be more than one SubD in the result array.
Remarks: NOTE: All of the input SubDs are copied and added to the result array in one form or another. NOTE: Symmetry information is removed from newly joined SubDs.See also comments in SubD.JoinSubDs with the bPreserveSymmetry parameter.
If possible, converts the object into a form that can be accurately modified with "squishy" transformations like projections, shears, an non-uniform scaling.
Makes a new SubD with vertices offset at distance in the direction of the control net vertex normals. Optionally, based on the value of solidify, adds the input SubD and a ribbon of faces along any naked edges.
Resets the SubD to the default face packing if adding creases or deleting faces breaks the quad grids. It does not change the topology or geometry of the SubD. SubD face packs always stop at creases.
Set the location of a single vertex surface point. This function is not suitable for setting the locations of multiple vertex surface points that are topologically near to each other.
The SubD to Brep conversion options. Use SubDToBrepOptions.Default for sensible defaults. Currently, these return unpacked faces and locally-G1 vertices in the output Brep.
Returns: A new Brep if successful, or null on failure.
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.
Updates vertex tag, edge tag, and edge coefficient values on the active level. After completing custom editing operations that modify the topology of the SubD control net or changing values of vertex or edge tags, the tag and sector coefficients information on nearby components in the edited areas need to be updated.
Returns: Number of vertices and edges that were changed during the update.
If false, all information is updated. If true, only missing information is updated. If a relatively small subset of a SubD has been modified and care was taken to mark cached subdivision information as stale, then passing true can substantially improve performance.
Returns: The number of elements that were updated.