Bitbybit Docs
    Bereite Suchindex vor...

    Klasse ManifoldOperations

    Ändern von Manifold-Volumenkörpern jenseits boolescher Operationen: sie in eine konvexe Hülle einhüllen, sie zu Querschnitten schneiden und projizieren, ihre Meshes verfeinern und glätten, sie vereinfachen, sie zusammensetzen und zerlegen und Normalen und Krümmung in Vertex-Eigenschaftskanäle berechnen. Ein Eigenschaftskanal ist eine Zahl pro Vertex, die auf dem Mesh gespeichert ist, etwa die drei Kanäle einer Normalen. Jede Methode gibt einen neuen Volumenkörper zurück.

    Index

    Konstruktoren

    adjustments

    • Berechnet eine Normale für jeden Vertex aus dem Mesh und speichert sie in drei Eigenschaftskanälen, beginnend bei normalIdx.

      Kanten, die schärfer als minSharpAngle sind, in Grad, behalten auf jeder Seite eigene Normalen und bleiben scharf; bei 0 behält jedes Dreieck seine eigene Normale. Ebene Flächen aus mehreren Dreiecken bleiben eben.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit gespeicherten Normalen

      const withNormals = await bitbybit.manifold.manifold.operations.calculateNormals({ manifold: shape, normalIdx: 0, minSharpAngle: 60 });
      
    • Berechnet, wie stark sich die Oberfläche an jedem Vertex biegt, und speichert es in Eigenschaftskanälen: Gaußsche Krümmung bei gaussianIdx, mittlere Krümmung bei meanIdx.

      Krümmung ist der Kehrwert des Biegeradius, positiv, wo die Oberfläche konvex ist, und negativ, wo sie konkav ist; ein Index unter 0 überspringt diesen Kanal.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit gespeicherter Krümmung

      const withCurvature = await bitbybit.manifold.manifold.operations.calculateCurvature({ manifold: shape, gaussianIdx: 0, meanIdx: 1 });
      
    • Fügt einem geglätteten Volumenkörper Dreiecke hinzu, bis jeder Punkt seines Meshes innerhalb von tolerance zur glatten Oberfläche liegt, sodass stark gekrümmte Bereiche mehr Dreiecke erhalten als ebene.

      Nur ein Volumenkörper, der mit smoothOut oder smoothByNormals geglättet wurde, ändert sich; jeder andere kommt als Kopie zurück.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der verfeinerte Volumenkörper

      const finer = await bitbybit.manifold.manifold.operations.refineToTolerance({ manifold: smoothed, tolerance: 0.01 });
      
    • Fügt einem Volumenkörper Dreiecke hinzu, indem jede Kante in Stücke von ungefähr der gegebenen Länge geteilt wird, mit inneren Vertices, um die Dreiecke gleichmäßig zu halten.

      Bei einem mit smoothOut oder smoothByNormals geglätteten Volumenkörper rücken die neuen Vertices auf die glatte Oberfläche; andernfalls bleibt die Oberfläche, wie sie ist.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der verfeinerte Volumenkörper

      const finer = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
      
    • Fügt einem Volumenkörper Dreiecke hinzu, indem jede Kante in number Stücke geteilt wird; bei 2 wird jedes Dreieck zu vier.

      Bei einem mit smoothOut oder smoothByNormals geglätteten Volumenkörper rücken die neuen Vertices auf die glatte Oberfläche; andernfalls bleiben die neuen Dreiecke eben.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der verfeinerte Volumenkörper

      const finer = await bitbybit.manifold.manifold.operations.refine({ manifold: smoothed, number: 2 });
      
    • Markiert einen Volumenkörper zum Glätten, indem Tangenten aus seinen Dreiecken berechnet werden, sodass ein späteres refine oder refineToLength die neuen Dreiecke zu einer glatten Oberfläche biegt.

      Kanten, die schärfer als minSharpAngle sind, in Grad, bleiben scharf; minSmoothness über 0 rundet diese ein wenig, und 1 glättet alles. Die Geometrie selbst ändert sich nicht, bis sie verfeinert wird.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit Glättungstangenten

      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 });
    • Markiert einen Volumenkörper zum Glätten anhand der in seinen Vertex-Eigenschaften gespeicherten Normalen, sodass ein späteres refine oder refineToLength die neuen Dreiecke zu einer glatten Oberfläche biegt.

      normalIdx ist der erste der drei Normalenkanäle, wie calculateNormals sie speichert; wo die Normalen an einem Vertex nicht übereinstimmen, bleibt die Kante scharf.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit Glättungstangenten

      const smoothed = await bitbybit.manifold.manifold.operations.smoothByNormals({ manifold: withNormals, normalIdx: 0 });
      
    • Entfernt Vertices aus dem Mesh eines Volumenkörpers, während jede Oberfläche innerhalb von tolerance dort bleibt, wo sie war, um die Dreiecksanzahl zu senken.

      Das Ergebnis behält eine Teilmenge der ursprünglichen Vertices; der eigene Toleranzwert des Volumenkörpers bleibt unverändert.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der vereinfachte Volumenkörper

      const lighter = await bitbybit.manifold.manifold.operations.simplify({ manifold: shape, tolerance: 0.05 });
      
    • Schreibt die Vertex-Eigenschaften eines Volumenkörpers mit einer Funktion neu, die die Position und die alten Eigenschaften jedes Vertex erhält und die neuen ausfüllt.

      numProp legt fest, wie viele Eigenschaften jeder Vertex danach hat, sodass Kanäle hinzugefügt oder entfernt werden können; über die alte Anzahl hinaus zu lesen oder über die neue hinaus zu schreiben ist undefiniert.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit den neuen Eigenschaften

      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

    • Gibt einem Volumenkörper eine neue Toleranz, den Rundungsfehler, den er tragen darf, und vereinfacht sein Mesh, wenn die Toleranz wächst.

      Dreiecke, die dünner als die Toleranz sind, gelten als entartet und werden entfernt.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Der Volumenkörper mit der neuen Toleranz

      const coarser = await bitbybit.manifold.manifold.operations.setTolerance({ manifold: shape, tolerance: 0.01 });
      
    • Reserviert eine Folge von count eindeutigen Mesh-Ids und gibt die erste zurück, zum Markieren von Dreiecks- mengen, die nach späteren Operationen wiedergefunden werden können.

      Weisen Sie sie der runOriginalID eines Meshes zu, bevor Sie daraus einen Volumenkörper bauen, zum Beispiel um mehrere Materialien auseinanderzuhalten.

      Parameter

      • inputs: CountDto

        Wie viele Ids reserviert werden

      Rückgabewert Promise<number>

      Die erste der reservierten Ids; die übrigen folgen der Reihe nach

      const firstId = await bitbybit.manifold.manifold.operations.reserveIds({ count: 2 });
      
    • Erstellt eine Kopie eines Volumenkörpers, die als neues Original gilt, sodass die Kopie ihre eigenen Vertex- Eigenschaften tragen kann, etwa eine andere UV-Abbildung, und von dem unterschieden werden kann, woraus sie gebaut wurde.

      Koplanare Flächen werden dabei zusammengeführt und die Kanten dazwischen entfernt; bleiben Sie stattdessen beim Mesh- Weg, wenn diese Kanten bleiben müssen.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Die als Original markierte Kopie

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

    composition

    • Packt mehrere Volumenkörper in einen, die Umkehrung von decompose.

      Überlappende Volumenkörper werden verschmolzen, wie bei einer booleschen Vereinigung; auseinander gehaltene bleiben getrennte Teile des einen Ergebnisses.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Ein Volumenkörper, der alle enthält

      const packed = await bitbybit.manifold.manifold.operations.compose({ manifolds: [cube, sphere] });
      
    • Teilt einen Volumenkörper in seine getrennten, unverbundenen Stücke, die Umkehrung von compose.

      Ein Volumenkörper, der ganz aus einem Stück ist, kommt als Liste mit einer Kopie zurück.

      Parameter

      Rückgabewert Promise<ManifoldPointer[]>

      Die einzelnen Stücke

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

    cross sections

    • Schneidet einen Volumenkörper mit einer zur XY-Ebene parallelen Ebene in der gegebenen Z-Höhe und gibt den ebenen Schnitt als Querschnitt zurück.

      Eine Höhe am unteren Ende des Begrenzungsrahmens des Volumenkörpers ergibt seine Bodenflächen; eine Höhe am oberen Ende ergibt einen leeren Querschnitt.

      Parameter

      Rückgabewert Promise<CrossSectionPointer>

      Der Schnitt als Querschnitt

      const section = await bitbybit.manifold.manifold.operations.slice({ manifold: sphere, height: 2 });
      
    • Plättet einen Volumenkörper auf die XY-Ebene und gibt seinen Umriss als Querschnitt zurück, wie seinen Schatten unter einem Licht direkt darüber.

      Parameter

      Rückgabewert Promise<CrossSectionPointer>

      Der Umriss als Querschnitt

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

    hulls

    • Hüllt einen Volumenkörper in seine konvexe Hülle, die kleinste Form ohne Dellen, die ihn enthält, wie straff über ihn gezogene Schrumpffolie.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Die konvexe Hülle

      const wrapped = await bitbybit.manifold.manifold.operations.hull({ manifold: shape });
      
    • Hüllt Punkte, Volumenkörper oder eine Mischung aus beiden in eine konvexe Hülle, die kleinste Form ohne Dellen, die sie alle enthält.

      Parameter

      Rückgabewert Promise<ManifoldPointer>

      Die konvexe Hülle

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