Bitbybit Docs
    Preparing search index...

    Class ManifoldOperations

    Modifier des solides Manifold au-delà des opérations booléennes : les envelopper dans une enveloppe convexe, les trancher et les projeter en sections, raffiner et lisser leurs maillages, les simplifier, les composer et les décomposer, et calculer les normales et la courbure dans des canaux de propriétés de sommets. Un canal de propriété est un nombre par sommet stocké sur le maillage, comme les trois canaux d'une normale. Chaque méthode renvoie un nouveau solide.

    Index

    Constructors

    adjustments

    • Calcule une normale pour chaque sommet à partir du maillage et la stocke dans trois canaux de propriétés à partir de normalIdx.

      Les arêtes plus vives que minSharpAngle, en degrés, gardent des normales séparées de chaque côté et restent nettes ; à 0 chaque triangle garde sa propre normale. Les faces planes de plusieurs triangles restent planes.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec les normales stockées

      const withNormals = await bitbybit.manifold.manifold.operations.calculateNormals({ manifold: shape, normalIdx: 0, minSharpAngle: 60 });
      
    • Calcule la force avec laquelle la surface se courbe en chaque sommet et la stocke dans des canaux de propriétés : courbure gaussienne à gaussianIdx, courbure moyenne à meanIdx.

      La courbure est l'inverse du rayon de courbure, positive là où la surface est convexe et négative là où elle est concave ; un index inférieur à 0 saute ce canal.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec la courbure stockée

      const withCurvature = await bitbybit.manifold.manifold.operations.calculateCurvature({ manifold: shape, gaussianIdx: 0, meanIdx: 1 });
      
    • Ajoute des triangles à un solide lissé jusqu'à ce que chaque point de son maillage soit à moins de tolerance de la surface lisse, de sorte que les régions très courbées reçoivent plus de triangles que les plates.

      Seul un solide lissé avec smoothOut ou smoothByNormals change ; tout autre revient sous forme de copie.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide raffiné

      const finer = await bitbybit.manifold.manifold.operations.refineToTolerance({ manifold: smoothed, tolerance: 0.01 });
      
    • Ajoute des triangles à un solide en divisant chaque arête en morceaux d'à peu près la longueur donnée, en ajoutant des sommets intérieurs pour garder les triangles réguliers.

      Sur un solide lissé avec smoothOut ou smoothByNormals, les nouveaux sommets se placent sur la surface lisse ; sinon la surface reste telle quelle.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide raffiné

      const finer = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
      
    • Ajoute des triangles à un solide en divisant chaque arête en number morceaux ; avec 2, chaque triangle en devient quatre.

      Sur un solide lissé avec smoothOut ou smoothByNormals, les nouveaux sommets se placent sur la surface lisse ; sinon les nouveaux triangles restent plats.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide raffiné

      const finer = await bitbybit.manifold.manifold.operations.refine({ manifold: smoothed, number: 2 });
      
    • Marque un solide pour le lissage en calculant des tangentes à partir de ses triangles, de sorte qu'un refine ou refineToLength ultérieur courbe les nouveaux triangles en une surface lisse.

      Les arêtes plus vives que minSharpAngle, en degrés, restent vives ; minSmoothness supérieur à 0 les arrondit un peu, et 1 lisse tout. La géométrie elle-même ne change pas tant qu'elle n'est pas raffinée.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec des tangentes de lissage

      const smoothed = await bitbybit.manifold.manifold.operations.smoothOut({ manifold: cube, minSharpAngle: 60, minSmoothness: 0 });
      const rounded = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
    • Marque un solide pour le lissage en utilisant les normales stockées dans ses propriétés de sommet, de sorte qu'un refine ou refineToLength ultérieur courbe les nouveaux triangles en une surface lisse.

      normalIdx est le premier des trois canaux de normales, tels que calculateNormals les stocke ; là où les normales d'un sommet divergent, l'arête reste vive.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec des tangentes de lissage

      const smoothed = await bitbybit.manifold.manifold.operations.smoothByNormals({ manifold: withNormals, normalIdx: 0 });
      
    • Retire des sommets du maillage d'un solide en gardant chaque surface à moins de tolerance de là où elle était, pour réduire le nombre de triangles.

      Le résultat garde un sous-ensemble des sommets d'origine ; la valeur de tolérance propre du solide reste inchangée.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide simplifié

      const lighter = await bitbybit.manifold.manifold.operations.simplify({ manifold: shape, tolerance: 0.05 });
      
    • Réécrit les propriétés de sommet d'un solide avec une fonction qui reçoit la position et les anciennes propriétés de chaque sommet et remplit les nouvelles.

      numProp règle combien de propriétés chaque sommet a ensuite, des canaux peuvent donc être ajoutés ou retirés ; lire au-delà de l'ancien nombre ou écrire au-delà du nouveau est indéfini.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec les nouvelles propriétés

      const colored = await bitbybit.manifold.manifold.operations.setProperties({
      manifold: shape,
      numProp: 3,
      propFunc: (newProp, position) => { newProp[0] = position[0]; newProp[1] = position[1]; newProp[2] = position[2]; },
      });

    basic

    • Donne à un solide une nouvelle tolérance, l'erreur d'arrondi qu'il est autorisé à porter, et simplifie son maillage quand la tolérance augmente.

      Les triangles plus fins que la tolérance sont considérés comme dégénérés et retirés.

      Parameters

      Returns Promise<ManifoldPointer>

      Le solide avec la nouvelle tolérance

      const coarser = await bitbybit.manifold.manifold.operations.setTolerance({ manifold: shape, tolerance: 0.01 });
      
    • Réserve une suite de count ids de maillage uniques et renvoie le premier, pour marquer des ensembles de triangles qui peuvent être retrouvés après des opérations ultérieures.

      Assignez-les au runOriginalID d'un maillage avant d'en construire un solide, par exemple pour garder plusieurs matériaux séparés.

      Parameters

      • inputs: CountDto

        Le nombre d'ids à réserver

      Returns Promise<number>

      Le premier des ids réservés ; les autres suivent en séquence

      const firstId = await bitbybit.manifold.manifold.operations.reserveIds({ count: 2 });
      
    • Fait une copie d'un solide qui compte comme un nouvel original, de sorte que la copie peut porter ses propres propriétés de sommet, comme une projection UV différente, et être distinguée de ce dont elle a été construite.

      Les faces coplanaires sont fusionnées et les arêtes entre elles supprimées au passage ; gardez plutôt la voie du maillage quand ces arêtes doivent rester.

      Parameters

      Returns Promise<ManifoldPointer>

      La copie marquée comme originale

      const original = await bitbybit.manifold.manifold.operations.asOriginal({ manifold: shape });
      

    composition

    • Regroupe plusieurs solides en un seul, l'inverse de decompose.

      Les solides qui se chevauchent sont fusionnés, comme le ferait une union booléenne ; ceux qui restent séparés demeurent des pièces distinctes du même résultat.

      Parameters

      Returns Promise<ManifoldPointer>

      Un solide qui les contient tous

      const packed = await bitbybit.manifold.manifold.operations.compose({ manifolds: [cube, sphere] });
      
    • Sépare un solide en ses morceaux distincts et non connectés, l'inverse de compose.

      Un solide d'un seul tenant revient sous forme de liste d'une seule copie.

      Parameters

      Returns Promise<ManifoldPointer[]>

      Les morceaux séparés

      const pieces = await bitbybit.manifold.manifold.operations.decompose({ manifold: packed });
      

    cross sections

    • Coupe un solide avec un plan parallèle au plan XY à la hauteur Z donnée et renvoie la section plane sous forme de section.

      Une hauteur au bas de la boîte englobante du solide donne ses faces du bas ; une hauteur au sommet donne une section vide.

      Parameters

      Returns Promise<CrossSectionPointer>

      La coupe sous forme de section

      const section = await bitbybit.manifold.manifold.operations.slice({ manifold: sphere, height: 2 });
      
    • Aplatit un solide sur le plan XY et renvoie son contour sous forme de section, comme son ombre sous une lumière placée juste au-dessus.

      Parameters

      Returns Promise<CrossSectionPointer>

      Le contour sous forme de section

      const shadow = await bitbybit.manifold.manifold.operations.project({ manifold: shape });
      

    hulls

    • Enveloppe un solide dans son enveloppe convexe, la plus petite forme sans creux qui le contient, comme un film plastique tendu autour de lui.

      Parameters

      Returns Promise<ManifoldPointer>

      L'enveloppe convexe

      const wrapped = await bitbybit.manifold.manifold.operations.hull({ manifold: shape });
      
    • Enveloppe des points, des solides ou un mélange des deux dans une seule enveloppe convexe, la plus petite forme sans creux qui les contient tous.

      Parameters

      Returns Promise<ManifoldPointer>

      L'enveloppe convexe

      const wrapped = await bitbybit.manifold.manifold.operations.hullPoints({ points: [[0, 0, 0], [10, 0, 0], [0, 10, 0], [0, 0, 10]] });