Skip to content

A visual tool for placing predefined patterns onto a surface and generating the resulting gcode

License

Notifications You must be signed in to change notification settings

nicolaistein/TSDF

Repository files navigation

logo_wide

How to use

Unwrapping Objects

Currently the only supported extension is .obj. Furthermore the following restrictions are given:

  • Geometry must be manifold
  • Exacly one connected figure inside the file
  • Mesh has to be a triangulation
  • The file must not be binary
  • No unused vertices are allowed

In the manual mode the user can select a target number of segments below the 3D plotter and press "segment". This optional step divides the mesh into smaler pieces and is required if the object is closed and suggested if the object is not unwrappable without cutting into the surface. Afterwards a parameterization algorithm can be selected which flattens either the whole mesh or all segments if segmentation was performed beforehand. In the automatic mode the user just needs to press "flatten" to unwrap the object. Segmentation and algorithm selection are then done by the program. The resulting smaller objects from either manual segmentation or the automatic mode are saved in a folder with a similar name.

Placing Patterns

Once the flat surfaces are visible, patterns can be placed onto them. These are available in a list which also contains visualizations for each pattern's parameters. All length units are measured in millimeters. Additionally the following global gcode variables can be configured:

  • (required) Print height: Height at which the sensors are printed
  • (required) Move height: Height at which the nozzle can move freely along the x and y axes
  • (required) E Factor: Added to every GCode command which issues printing; tells the printer how much material to release docs
  • (required) mm per min: Speed of the printer in millimeters per minute
  • Pause in ms: Pause in milliseconds between each pattern
  • Overrun start and end: lengths of additional paths added to the start and end of each pattern where the printer moves through the liquid without releasing any material. Leave empty if undesired
  • (coming soon) Cleaning x and y: x and y location of a swamp where the nozzle will clean itself after each pattern. Leave empty if undesired

The pattern's list item background is green if the location is valid (pattern is completely inside a shape), red if not and blue if the location is currently being evaluated.

manager Menu for flattening objects (1); List of available patterns (2); List of placed patterns (3); GCode variables (4); 3D plotter with manual segmentation menu (5); Canvas (6)

Once unwrapping and pattern placcement are finished, the flat shapes can be exported as a single .obj file and the patterns as a single .gcode file.

Building from source

Libraries used are Numpy, Libigl, OpenMesh, Matplotlib, Plotly, Pillow and Rectpack. The program can be run by executing main.py. Windows executables can be generated by executing pyinstaller.py, requiring the PyInstaller library.

Contributing

The application's modularity allows for easy integration of additional algorithms and distortions but especially new patterns.

Algorithms

In algorithms.py all parameterization algorithms are made available for use in the algorithm menu as well as the automatic mode.

Patterns

Each pattern is represented by its own folder located inside the patterns folder. It contains an image.png and a pattern.py file. The image is displayed inside the program to visualize the parameters and pattern.py contains a class which is a subclass of the PatternParent class and programmatically draws the pattern in its gcode() method. This is done without any translation and rotation located at (0,0) using the methods below which are provided by PatternParent.

moveTo() # linear movement
printTo() # linear printing movement
clockArc() # clockwise arc
counterClockArc() # counter clockwise arc
workHeight() # lowers head to work height
freeMoveHeight() # moves nozzle up to free move height

All methods and their parameters are documented in detail in PatternParent. Currently 90 and 180 degree arcs are supported. A pattern can then be added to the system in PatternModel. At the beginning of the pattern's .py file, its attributes and parameters are noted as python comments. Already integrated patterns can serve as template and orientation.

Possible Future Work

  • Folder system for patterns inside the application to provide a clear overview and fast accessibility of all patterns
  • Enable manual chart merging for a more user-controlled segmentation
  • Storing the application state enabling undo and redo operations

Created by Nicolai Stein in 2022 as part of a Bachelor's Thesis. This application is intended for research purposes. Contact: nicolai_stein@outlook.de

About

A visual tool for placing predefined patterns onto a surface and generating the resulting gcode

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages