UNPKG

manifold-3d

Version:

Geometry library for topological robustness

113 lines 3.92 kB
// Copyright 2025 The Manifold Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** * Control detail level for the * {@link manifold.CrossSection.circle | CrossSection.circle}, * {@link manifold.CrossSection.revolve | CrossSection.revolve}, * {@link manifold.Manifold.cylinder | Manifold.cylinder}, and * {@link manifold.Manifold.sphere | Manifold.sphere} constructors. * * Libraries should not change these values, and if run through manifoldCAD or * the manifoldCAD CLI, will not be able to. Libraries may get values to * determine their own level of detail. * @packageDocumentation * @group ManifoldCAD * @category Modelling */ import { getManifoldModuleSync } from "./wasm.js"; let minCircularAngle = 10.0; let minCircularEdgeLength = 1.0; /** * Set an angle constraint when calculating the number of segments in a circle. * The number of segments will be rounded * up to the nearest factor of four. * * @param angle The minimum angle in degrees between consecutive segments. The * angle will increase if the the segments hit the minimum edge length. * Default is 10 degrees. */ export function setMinCircularAngle(angle) { minCircularAngle = angle; getManifoldModuleSync()?.setMinCircularAngle(angle); } /** * Set a length constraint when calculating the number segments in a circle. * The number of segments will be rounded * up to the nearest factor of four. * * @param length The minimum length of segments. The length will * increase if the the segments hit the minimum angle. Default is 1.0. */ export function setMinCircularEdgeLength(length) { minCircularEdgeLength = length; getManifoldModuleSync()?.setMinCircularEdgeLength(length); } ; /** * Set the default number of segments in a circle. * Overrides the edge length and angle * constraints and sets the number of segments to exactly this value. * * @param segments Number of circular segments. Default is 0, meaning no * constraint is applied. */ export function setCircularSegments(segments) { return getManifoldModuleSync()?.setCircularSegments(segments); } /** * Reset the circular construction parameters to their defaults if * `setMinCircularAngle()`, `setMinCircularEdgeLength()`, or * `setCircularSegments()` have been called. */ export function resetToCircularDefaults() { getManifoldModuleSync()?.resetToCircularDefaults(); minCircularAngle = 10; minCircularEdgeLength = 1; } ; /** * Get the current angle constraint. * * @returns The minimum angle in degrees between consecutive segments. The * angle will increase if the the segments hit the minimum edge length. * Default is 10 degrees. */ export function getMinCircularAngle() { return minCircularAngle; } /** * Get the current edge length constraint. * * @returns The minimum length of segments. The length will * increase if the the segments hit the minimum angle. Default is 1.0. */ export function getMinCircularEdgeLength() { return minCircularEdgeLength; } /** * Determine the appropriate number of segments for a given radius. * * @param radius For a given radius of circle, determine how many default * segments there will be. */ export function getCircularSegments(radius) { return getManifoldModuleSync()?.getCircularSegments(radius); } /** * @internal */ export const cleanup = () => { resetToCircularDefaults(); }; //# sourceMappingURL=level-of-detail.js.map