Home

Awesome

FindSurface

CurvSurf FindSurfaceâ„¢

Overview

FindSurface is a software library that extracts 3D geometric information from point cloud data.

This library supports the following platforms/languages and you can find the distribution of the library for each platform at the link:

NOTE: The repositories listed below are presently inaccessible due to internal complications. If you have any inquiries or require further assistance in relation to this matter, please contact to support@curvsurf.com. We greatly appreciate your patience and understanding during this period.

IMPORTANT: FindSurface does not work with error-free point clouds, such as procedurally calculated points or vertices from CAD modeling software. It requires points with measurement errors to function as intended. If you want to test FindSurface and don't have such data, we recommend introducing Gaussian-distributed random errors into your error-free data and adjusting the related parameters (i.e., measurement accuracy and mean distance) to match the error-producing configuration.

How does it work?

FindSurface detects a geometric model in point cloud. It starts searching with a region of interest in the points and spreading the search space until it converges to a specific mathematical representation of one of the geometric shapes according to their local curvature, which has the minimal errors in the distances to the points. The types of the shapes that FindSurface detects are planes (bounded), spheres, cylinders, cones, tori.

The strategy of FindSurface's algorithm, which affects how it spreads its search space or converges to the specific model, is determined by its parameters. The followings are the terms and its meanings that we define for the parameters:

What exactly do I get from FindSurface?

FindSurface produces the following information as the outputs of its algorithm:

Auto Detection

FindSurface can detect the following five surface types from input points:

The algorithm of FindSurface is capable of "Auto Detection", which means it can detect the most fit surface type among the five types above around the seed area without specifying the feature type manually. The resulted surface type is automatically determined when the surface model converges to a specific surface type.

The algorithm takes advantage of the fact that locally non-singular (i.e., differentiable) surfaces can have one of the following curvature types:

four-surfaces

One or more of these four types can comprise the five surface types, as follows:

Given the seed point, the algorithm analyzes the local curvature of the region around the seed, which makes it possible for the algorithm to assume the initial surface model from the curvature. As the seed region grows, the surface model evolves into one of the five surface types. The following pseudo-code depicts the process taking place in the algorithm:

pseudo-code
if planar {
    fit a plane;
}
else if parabolic {
    fit a cone;
    if the vertex angle is small {
        fit a cylinder;
    }
}
else if elliptic {
    fit a torus;
    if the mean radius is small {
        fit a sphere;
    }
    else if the mean radius is large {
        fit a cylinder;
    }
}
else /*if hyperbolic*/ {
    fit a torus;
    if the mean radius is large {
        fit a cylinder;
    }
}

figure1.png

To use auto detection feature, set the enum value representing any type (e.g., FS_TYPE_ANY for C, FeatureType::any for Kotlin) to the feature type parameter of findSurface function, instead of setting a specific type.

The auto detection performs well if the following conditions are met:

Smart Conversion

In the mathematical models of the geometric surfaces that the algorithm of FindSurface builds, there are some special relations between the surfaces in terms of geometric topology. For example, a cone (conical frustum) that has the same radii at both its top and bottom is actually a cylinder. After the model converges to a specific surface type, Smart conversion, if enabled, automatically converts the type according to the relations. Smart conversion converts:

See the pseudo-code in the Auto Detection section since it depicts the conversion criteria too.

To enable Smart Conversion, enum values corresponding to the options must be set to the context manually.

Important: Enable all smart conversion options. Because of the nature of the union used as FindSurface's result data structure, interpreting the un-converted results in usual ways might cause incorrect results when the results need to be converted. Please enable all the options before use.

Note: The options do not affect the behavior of Auto Detection since Auto Detection converts the types even if no options are enabled, as if all is enabled.

---

(c) Copyright 2021 CurvSurf, Inc. All rights reserved.

This library's ownership is solely on CurvSurf, Inc. and anyone can use it for non-commercial purposes. Contact to support@curvsurf.com for commercial use of the library.