Giter Club home page Giter Club logo

mesh-cutter's Introduction

Mesh Cutter

A proof-of-concept Unity project for a mesh cutting algorithm. This is a simple implementation of an algorithm that splits in 2 any 3d manifold objects with genus 0. The split is done using a plane defined by the line drawn by the user and a depth in the same direction as the camera facing forward (i.e. when we draw a line, we don't see the generated plane since it's perfectly aligned with the camera and the line)

Implementation

For each object tagged as sliceable:

  • We create 2 new meshes : a positive mesh, which is on the positive side of the slice plane, and a negative mesh, which is on the other side.

  • We go through each triangle of the mesh and, if it intersects the plane, we separate it into 3 triangles : 2 on the bigger side of the cut and 1 on the other side (we assume that it can't be cut perfectly in 2 triangles). If the triangle doesn't intersect with the plane, we simply store it in its respective mesh (positive or negative). We also keep a list of the newly created vertices, which will all lie on the boundary of the meshes.

  • We then create new triangles to form the boundary face (the new face generated by the cut). There is currently 2 different ways of generating the boundary face (generating a center vertex, or creating triangles fans by iterating through sorted pairs of vertices), but both of them works mostly only for a convex polygon.

  • Finally we create new objects for the new meshes and push them apart by a small value (indicated by the separation property in the MouseSlice script)

Examples

Here are a few examples of simple shapes being cut.

Cylinder Refractive Sphere Toonlit Suzanne

Note

  • The material used for the sphere is GlassRefractive from Unity's Standard Assets
  • The material used for Suzanne monkey is ToonLit from Unity's Standard Assets
  • Those materials are used in the project's scenes, but are not included in this repo. If you want to experiment with them, import the following folders from the Standard Assets:
    • Effects/GlassRefraction
    • Effects/ToonShading
    • Prototyping/Materials
    • Prototyping/Textures

Future work

Here are some of the things that could be worked on or improved:

  • Use a new submesh to add a sliced surface so that we can set a separate material for it.

  • Smooth-shading on the sliced boundary is not preserved since we compute

  • Handling cuts on manifold objects of genus 1 and above. This would mostly imply detecting the number of boundaries made by cutting the object and associating vertices with their respective boundaries;

  • Handling non-convex sliced polygons on the surface generated by the slice. The algorithm used right now works mostly for convex polygons. Using a better triangulation algorithm could help (e.g. ear-clipping triangulation);

  • Optimize the cutting algorithm. It could be interesting to treat triangles as part of a face, such that when we cut through a face, we could recompute triangles based on the face's shape so that we get an efficient number of triangles. This would also help generate better boundaries;

  • Using Unity's Job System to parallelize the cutting process (since the algorithm is relatively slow);

mesh-cutter's People

Contributors

hugoscurti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mesh-cutter's Issues

Patch edge of hollow mesh

In the case where the to-be cut mesh is a hollow mesh with an inside, e.g. an egg with a outside AND inner shell is also existant, the cutter should patch up the spaces between the outer shell and the inner.

I've been trying to add this feature on my own by first collecting all vertices along the cut, then measuring distance and angle of a vertex[i] to its neighbor to determine the closest vertices to form a triangle with.
Having some issues, so thought I would drop this idea down here as it would make for a powerful feature addition. Otherwise awesome and fast cutter.

help

How to define the size of slice segmentation plane in your code,

Is there is any feature of cutting the mesh by giving exact size of cut for boundary cutting using mesh-cutter library?

Respected All,
I have a set of 3D data mesh file which look uniform plane. I want to cut the boundary of this mesh by 0.09 cm using coding. I was researching and found the mesh cutter library. I am very excited to work with this library. I tried the same using Meshlab software. But, I am unable to do cut the boundary mesh using a mesh cutter. I need mesh cutting for the boundary of 0.09 since I want to work on further processes using simulation, based on this mesh.

Any leads will be appreciated.
Thanks in advance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.