Bitbybit Docs
    Preparing search index...

    Class ManifoldOperations

    Cambiar sólidos Manifold más allá de los booleanos: envolverlos en una envolvente convexa, cortarlos y proyectarlos en secciones transversales, refinar y suavizar sus mallas, simplificarlos, componerlos y descomponerlos, y calcular normales y curvatura en canales de propiedades de vértice. Un canal de propiedades es un número por vértice almacenado en la malla, como los tres canales de una normal. Cada método devuelve un sólido nuevo.

    Index

    Constructors

    adjustments

    • Calcula una normal para cada vértice a partir de la malla y la guarda en tres canales de propiedades a partir de normalIdx.

      Las aristas más afiladas que minSharpAngle, en grados, conservan normales separadas a cada lado y se mantienen nítidas; en 0 cada triángulo conserva su propia normal. Las caras planas de varios triángulos se mantienen planas.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con las normales almacenadas

      const withNormals = await bitbybit.manifold.manifold.operations.calculateNormals({ manifold: shape, normalIdx: 0, minSharpAngle: 60 });
      
    • Calcula con qué fuerza se curva la superficie en cada vértice y lo guarda en canales de propiedades: la curvatura gaussiana en gaussianIdx, la curvatura media en meanIdx.

      La curvatura es el inverso del radio de curvatura, positiva donde la superficie es convexa y negativa donde es cóncava; un índice por debajo de 0 omite ese canal.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con la curvatura almacenada

      const withCurvature = await bitbybit.manifold.manifold.operations.calculateCurvature({ manifold: shape, gaussianIdx: 0, meanIdx: 1 });
      
    • Añade triángulos a un sólido suavizado hasta que cada punto de su malla queda dentro de tolerance respecto a la superficie suave, de modo que las regiones muy curvadas reciben más triángulos que las planas.

      Solo cambia un sólido que se suavizó con smoothOut o smoothByNormals; cualquier otro vuelve como una copia.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido refinado

      const finer = await bitbybit.manifold.manifold.operations.refineToTolerance({ manifold: smoothed, tolerance: 0.01 });
      
    • Añade triángulos a un sólido dividiendo cada arista en trozos de aproximadamente la longitud dada, añadiendo vértices interiores para mantener los triángulos uniformes.

      En un sólido suavizado con smoothOut o smoothByNormals los vértices nuevos se mueven sobre la superficie suave; en caso contrario la superficie se queda como está.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido refinado

      const finer = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
      
    • Añade triángulos a un sólido dividiendo cada arista en number trozos; con 2, cada triángulo se convierte en cuatro.

      En un sólido suavizado con smoothOut o smoothByNormals los vértices nuevos se mueven sobre la superficie suave; en caso contrario los triángulos nuevos se mantienen planos.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido refinado

      const finer = await bitbybit.manifold.manifold.operations.refine({ manifold: smoothed, number: 2 });
      
    • Marca un sólido para el suavizado calculando tangentes a partir de sus triángulos, de modo que un refine o refineToLength posterior curva los triángulos nuevos hasta una superficie suave.

      Las aristas más afiladas que minSharpAngle, en grados, se mantienen afiladas; minSmoothness por encima de 0 las redondea un poco, y 1 lo suaviza todo. La geometría en sí no cambia hasta que se refina.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con tangentes de suavizado

      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 });
    • Marca un sólido para el suavizado usando las normales guardadas en sus propiedades de vértice, de modo que un refine o refineToLength posterior curva los triángulos nuevos hasta una superficie suave.

      normalIdx es el primero de los tres canales de normales, tal como los guarda calculateNormals; donde las normales de un vértice discrepan la arista se mantiene afilada.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con tangentes de suavizado

      const smoothed = await bitbybit.manifold.manifold.operations.smoothByNormals({ manifold: withNormals, normalIdx: 0 });
      
    • Elimina vértices de la malla de un sólido manteniendo cada superficie dentro de tolerance respecto a donde estaba, para reducir el número de triángulos.

      El resultado conserva un subconjunto de los vértices originales; el valor de tolerancia propio del sólido no cambia.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido simplificado

      const lighter = await bitbybit.manifold.manifold.operations.simplify({ manifold: shape, tolerance: 0.05 });
      
    • Reescribe las propiedades de vértice de un sólido con una función que recibe la posición y las propiedades antiguas de cada vértice y rellena las nuevas.

      numProp establece cuántas propiedades tiene cada vértice después, de modo que pueden añadirse o descartarse canales; leer más allá del número antiguo o escribir más allá del nuevo es indefinido.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con las nuevas propiedades

      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

    • Da a un sólido una tolerancia nueva, el error de redondeo que se le permite llevar, y simplifica su malla cuando la tolerancia crece.

      Los triángulos más finos que la tolerancia se tratan como degenerados y se eliminan.

      Parameters

      Returns Promise<ManifoldPointer>

      El sólido con la nueva tolerancia

      const coarser = await bitbybit.manifold.manifold.operations.setTolerance({ manifold: shape, tolerance: 0.01 });
      
    • Reserva una serie de count ids de malla únicos y devuelve el primero, para marcar conjuntos de triángulos que puedan encontrarse de nuevo tras operaciones posteriores.

      Asígnalos al runOriginalID de una malla antes de construir un sólido a partir de ella, por ejemplo para mantener separados varios materiales.

      Parameters

      Returns Promise<number>

      El primero de los ids reservados; el resto siguen en secuencia

      const firstId = await bitbybit.manifold.manifold.operations.reserveIds({ count: 2 });
      
    • Hace una copia de un sólido que cuenta como un original nuevo, de modo que la copia puede llevar sus propias propiedades de vértice, como un mapeado UV distinto, y distinguirse de aquello a partir de lo que se construyó.

      Las caras coplanares se fusionan y las aristas entre ellas se colapsan por el camino; conserva la ruta de malla en su lugar cuando esas aristas deban quedarse.

      Parameters

      Returns Promise<ManifoldPointer>

      La copia marcada como original

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

    composition

    • Empaqueta varios sólidos en uno, el inverso de decompose.

      Los sólidos que se solapan se fusionan, como haría una unión booleana; los que se mantienen separados siguen siendo piezas independientes del único resultado.

      Parameters

      Returns Promise<ManifoldPointer>

      Un sólido que contiene todos ellos

      const packed = await bitbybit.manifold.manifold.operations.compose({ manifolds: [cube, sphere] });
      
    • Divide un sólido en sus piezas separadas y no conectadas, el inverso de compose.

      Un sólido que es todo una pieza vuelve como una lista de una copia.

      Parameters

      Returns Promise<ManifoldPointer[]>

      Los trozos separados

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

    cross sections

    • Corta un sólido con un plano paralelo al plano XY a la altura Z dada y devuelve la sección plana como una sección transversal.

      Una altura en la base de la caja delimitadora del sólido da sus caras inferiores; una altura en la cima da una sección transversal vacía.

      Parameters

      Returns Promise<CrossSectionPointer>

      La sección como sección transversal

      const section = await bitbybit.manifold.manifold.operations.slice({ manifold: sphere, height: 2 });
      
    • Aplana un sólido sobre el plano XY y devuelve su contorno como una sección transversal, como su sombra bajo una luz justo encima.

      Parameters

      Returns Promise<CrossSectionPointer>

      El contorno como sección transversal

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

    hulls

    • Envuelve un sólido en su envolvente convexa, la forma más pequeña sin abolladuras que lo contiene, como un plástico retráctil tensado sobre él.

      Parameters

      Returns Promise<ManifoldPointer>

      La envolvente convexa

      const wrapped = await bitbybit.manifold.manifold.operations.hull({ manifold: shape });
      
    • Envuelve puntos, sólidos o una mezcla de ambos en una sola envolvente convexa, la forma más pequeña sin abolladuras que los contiene a todos.

      Parameters

      Returns Promise<ManifoldPointer>

      La envolvente convexa

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