Giter VIP home page Giter VIP logo

neelotpal-d / vectorfield_multiaxis Goto Github PK

View Code? Open in Web Editor NEW
10.0 2.0 2.0 31.05 MB

Vector Field Based Volume Peeling for Multi-Axis Machining (Planning method for CNC Milling)

C++ 83.75% QMake 0.04% C 5.83% CMake 4.18% Shell 0.12% HTML 0.09% Cuda 0.54% Fortran 5.37% JavaScript 0.03% CSS 0.02% Tcl 0.01% Python 0.01% MATLAB 0.01%
3d-modelling 3d-printing cnc-machine computational-geometry computer-aided-design computer-aided-machining computer-aided-manufacturing g-code g-code-optimization manufacturing

vectorfield_multiaxis's Introduction

Vector Field Based Volume Peeling for Multi-Axis Machining

Pipeline of the method

Abstract

This paper presents an easy-to-control volume peeling method for multi-axis machining based on the computation taken on vector fields. The current scalar field based methods are not flexible and the vector-field based methods do not guarantee the satisfaction of the constraints in the final results. We first conduct an optimization formulation to compute an initial vector field that is well aligned with those anchor vectors specified by users according to different manufacturing requirements. The vector field is further optimized to be an irrotational field so that it can be completely realized by a scalar field's gradients. Iso-surfaces of the scalar field will be employed as the layers of working surfaces for multi-axis volume peeling in the rough machining. Algorithms are also developed to remove and process singularities of the fields. Our method has been tested on a variety of models and verified by physical experimental machining.

Read the paper here! or Check the Arxiv version!

Installation

Please compile the code with QMake file “ShapeLab.pro”.

Platform: Windows + Visual Studio + QT-plugin (tested version: VS2019 + QT5.12.3 + msvc2017_64)

Installation Steps:

  • Install Visual Studio Extension plug-in (QT VS Tool) to open the *.pro file and generate the project
  • Set 'ShapeLab' as the start up project
  • Enable OpenMP to get best performace at: ShapeLab Property Pages -> Configuration Properties -> C/C++ -> Language -> Open MP Support -> Select 'Yes (/openmp)'
  • Open Console at: ShapeLab Property Pages -> Configuration Properties -> Linker -> System -> SubSystem -> Select 'Console (/SUBSYSTEM:CONSOLE)'
  • Install Intel oneAPI Math Kernel Library (oneMKL download) and enable it at: ShapeLab Property Pages -> Configuration Properties -> Intel Libraries for oneAPI -> Intel oneAPI Math Kernel Library (oneMKL) -> Use oneMKL -> Select 'Parallel'
  • And change the code generation method at: ShapeLab & QMeshLab & GLKLib Property Pages -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library -> Select 'Multi-threaded(/MT) for release configuration'. Note that this option will be 'Multi-threaded Debug (/MTd) for debug configuration.

Contact Information

Neelotpal Dutta ([email protected])
Charlie C.L. Wang ([email protected])

Usage

Files Required:

  • The .obj file of the model to be machined . Naming convention to be used: <name>_modelSurf.obj
  • The .obj file for the convex hull of the model. Naming convention to be used: <name>_convexHull.obj
  • .TET file of the removable volume (stock - model). This can generated by a boolean opearation on surface meshes followed by tetrahedralization using TetGen. Naming convention to be used: <name>_materialSpace.tet

The location of all of the above files is to be in the folder DataSet/TET_MODEL

Usage Steps

Read Data -> Initialise Meshes -> Initialise Vector Field -> Propagate Field -> Generate Scalar Field -> IsoLayer Generation -> ToolPath Generation

Read Data

To perform the peeling for the model <name>, type in the name in the 'File' text box and click on the button Read Data.

Initialise Meshes

Once all the files are read, click the button Initialise Meshes. This labels all mesh elements and records the necessary attributes for further processing.

Initialise Vector Field

The next step requires us to initialise a vector field inside each tetrahedal element. It can be done by clicking the button Initialse Vector Field. This function comes with a few pre-defined options to define the vector field anchors. Select the desired checkboxes- Inner Boundary, Outer Boundary or Convex Hull to initialise the anchors on selected surface. This needs to be done before clicking the Initialise Vector Field button. To define custom anchor vectors, go ahead with initialising the vector field without selecting any of the checkboxes.

Assigning Anchor Through Vertices

Once the vector field has been initialised, the custom anchors can be assigned. One way to do this is by selecting a vertex of the tetrahedral mesh of the _materialSpace. To do that, first, hide the model (shown as <name>_modelSurface) and convex hull (shown as <name>_targetrSurface) in the treeView Space (see lower right) by un-checking the corresponding boxes. Now, head to the 'Visualization' tab, which allows us to look inside the mesh and select nodes there. Use the 'slide bar' to change the depth of the section and click on 'Update Section'. On the tool-bar, click on the 'Node' icon to display the vertices. Now, go to the 'Interact' tab and on the tool-bar, select the 'Handle Rigid' icon (last icon). Now, bring the cursor over the vertex that needs to be selected, and Right Click on it to select the vertex as anchor. On the tool-bar, click the 'Profile' icon to display the corresponding anchor vector (note that it is not defined at this point). To define the anchor, click on the Edit Vector Direction button and Left Click somewhere on the viewport. Now, move the cursor around to change the vector orientation in the current plane. To assign a direction, Right Click on the mouse. To see the assigned vector, click on the Update button. The (nx,ny,nz) components are displayed on the corresponding boxes. Alternatively, enter the vector components throught the boxes itself and click Set (Note that the vector will be normalized). To remove the anchor point, click on deSelect Node. To confirm the anchor point and the vector direction, click the Translate Vector to Tets. button. Note that the current version does not include an option to remove the anchor point after the confirmation. Following the same steps, assign other anchors, if required.

Assigning Anchor Through Faces

...Instructions to be added soon...

Propagate Vector Field

This step involves solving equation 11 in the paper to generate the vector field in the whole domain (removable volume). Before clicking on the button Propagate Field, enter the magnitude (exponent) for the weight assigned to anchors (Represented as Beta in the paper).

Generate Scalar Field

After the vector field is solved, click on the button Generate Scalar Field to solve the Poisson eqution. Display the nodes to see the colours assigned according to the value of the corresponding scalar field.

Iso-Layer Generation

Click on the Iso-Layer Generation button to get the layers

Understanding the Code

Note that the code is not well commented now. Comments will be added soon. To understand the code, read the 'MainWindow.h' and 'MainWindow.cpp' files.

Example Models

Two examples models ('CupNew' and 'turbine') are included with the code.

vectorfield_multiaxis's People

Contributors

neelotpal-d avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

nsyi jackzhousz

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.