Git Product home page Git Product logo

pepr3d's Introduction

pepr3d's People

Contributors

arokip avatar ashencz avatar diiigle avatar fro-z avatar hojdars avatar tomasiser 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  avatar

pepr3d's Issues

[Brush] Continuous improvement

Change continuous criterion to use distance over triangle mesh to origin instead of distance by air.
Prevents this behavior
image

Export UI

Menu does not close after clicking Export
The file menu (Open,Save,Save As, Export) does not close after clicking Export, user needs to click away to close the menu.

BrushIssues

Merge checklist

  • Bucket compatibility
  • Export
  • Project saving
  • Color replacement/removal

Missing implementation

  • Implement bucket on triangle details (Requires new detailed polyhedron built) + way to change triDetail ideally without rebuilding all the polys

Performance
Lots of time spent converting detail triangles back to polys

  • Keep old poly representation if triangle colors did not change
  • Avoid generating geometry buffers after every brush use

Multithreading

  • Run in parallel on different color channels (probably overkill)

Documentation

BOLD means DONE.

Structure:

I. Introduction

  • Introduction - copy pasted from Spec
  • Related work - copy pasted from Spec, expanded by Jindra's comments

II. Developer Documentation

  • Architecture

in the following, elaborate on classes, what they do, how they are connected, what is ours/what is a library thing

  • Geometry
    • Geometry
    • Model Importer
    • Model Exporter
    • Font Rasterizer
    • Color Manager
  • Commands - check this @Fro-Z pls
  • Tools
  • User interface
  • Testing
    • Unit tests
    • Manual tests - corrupted files, non polyhedron files, different files (jpg), each tool test all properties, export a cube and test the insides, test error logs.
      • missing: Brush and Text Tool
      • done: everything else
    • Continuou Integration
  • Building the project
    • Required libraries (CGAL, Assimp, Freetype, Cereal)
    • Cmake

III. Progress of implementation

  • Progress of implementation
  • Comparison to minimal requirements - straight forward, we met all, and almost all from advanced
  • Results - with photos of real 3D prints
    • needs updating with new export
  • Chosen techniques critique - choosing CGAL/cereal/cinder, some other that didnt fit in their own chapter
  • Future work on the project - all that doesn't work and could, e.g. different more sophisticated export
  • Conclusion

IV. User Documentation

  • System requirements and Installation - one page, easy
  • First run (incl. color palette?)
  • Tools:
    • TriPainter
    • BucketPainter
    • Brush
    • Text
    • AutoSeg
    • ManuSeg
  • Import, export, .p3d format (incl. slicer support, photos of real examples??)
    • Import
    • Export
    • .p3d
  • Aditional options and settings

Feedback on Chapters 1 and 2

  • Start with an abstract of sorts, you could also see it as an 'executive summary'. Good place to put it would be right before Section 1.1, before you start explaining all the prerequisites. 1-2 sentences what the project is about is enough, and you can also include a brief overview of Chapter 1, so if the reader has any questions they know upfront they will be answered soon.

  • Try avoiding the use of vague terms such as "we aim", "should" etc. If you are reasonable sure that something is going to happen, you can commit to it. That way you separate the certain features from the intended but bonus ones. Prime example is Section 1.4. Same goes for challenges (1.6) - if you know something is nontrivial, you don't need to conjecture it with "could be difficult" etc.

  • I would swap 1.5 and 1.6. That way it's going to be clearer that the existing SWs don't do what we want.

  • Chapter 2 starts a little bit 'out of blue', would be good to include a summary what it's describing and its structuring.

  • The bucket painting is one of the most important tools, so some more care should go into explaining it: especially the stopping criteria, the SDF and so on.

Color palette management

  • Add an edit button to the color palette in side pane.
  • The button opens a modal popup / side pane editor that shows all colors in a palette one by one.
  • Every color has a Remove button that removes the color from the palette and geometry / color buffer.
  • New colors can be added.

List of all features for the final version

Tools

  • Triangle painter
  • Bucket painter
  • Brush
  • 3D Text
  • Semi-automatic segmentation
  • Automatic segmentation
  • Triangle subdivision/decimation (won't)

Import/Export

  • Importing of basic formats
  • Multicolor export basic
  • Multicolor exporting closed meshes
  • Warning/error pop-ups for when the model is not correct
  • Asynchronous import/export, dialog for loading

Pepr projects

  • Loading and unloading from .p3d arbitrary project file format

UI

  • Keyboard shortcuts
  • Disabled tools
  • Customizable keyboard shortcuts
  • Color Palette
  • Final polishing (#97)
  • Localization (won't)

Undo and redo

  • Working single-branch undo and redo

Release 0.1

  • Disable buttons in UI
  • Center camera on the object, simple version
  • Jindra's PR #61 merged
  • My #65 Bucket UI improvement merged

7NOV2018 Meeting goals

@Arokip

  • Export surfaces into multiple STLs.
  • Try Voro++ for 3D Voronoi, think about mesh splitting using 3D Voronoi.

@tomasiser

  • UI and UX for Triangle Painter.
  • Some basic version of color palette - 4 colors that you are able to adjust.

@Fro-Z

  • Finish doc about painting Here
  • Implement Undo and Redo for Triangle Painter.
  • Change CommandManager to allow combining commands

@AshenCZ

  • Fix basic bucket painter.
  • Add stopping criteria. Color border, normal threshold for neighboring triangles.
  • Play around with SDF computation using CGAL.
  • Fix every bug in Pepr, ever, apparently.

Cinder events block draw

When event handling takes too long another event of the same type can spawn. Because draw() is delayed until all events are processed this causes noticable delay between drawing and painting with brush. Even though individual strokes take ~ 30 ms.

Needs workaround / fix

[Brush] Model not paintable

"turagadume.stl" or "Cool_Luulia-Bigery.stl" is not paintable with brush. Area highlight preview works.

Neither detail, or respect triangles mode works.

For "Cool_Luulia-Bigery.stl" Area highlight does not work,

CommandManager - use snapshots for redo

  • use a future snapshot for redoing slow commands
  • allow joining of any commands together (This would remove the need to write join function for each command at the cost of more memory and possibly slower redo)

Implement a way to tell the user about disabled tools

Currently, if a user loads a non-polyhedron model, the polyhedron does not get built, gets emptied and bucket painting doesn't work. CI_LOG_E is logged into the console, but UI doesn't reflect this.

TODO: Print a text (instead of standard BucketPainter UI) into the side panel to inform the user, that bucket painter is not supported on a non-polyhedron mesh.

Meeting Goals 14NOV18

Hojdy

  • SDF and Segmentation

Tomas

  • UI loading
  • Camera fitting

Jindra

  • Extrude export

Luis

  • Brush start

TrianglePainter + Brush sampling improvement

Make these tools act idependently from framerate when dragging.
Possible way to do so is to save distance to triangle boundary during each sample, and run a next sample only after the distance treshold has been crossed.

Crash when loading a new model and segmenting

Pepr crashes if you try to load a new model when segmentation is in progress (user is assigning the colors).

Probably because of the overriden color buffer.

Fix: call reset() on all tools before new geometry gets loaded? (And call onNewGeometry afterwards, as it is right now)

Comments by Luis

(following is written by Luis)

2.2.1 - Importing the model, můžeme tam zmínit ještě drag & drop jak má slicer

2.2.2 - triangle painter, vyměnil bych "triangle that faces toward him" za visible triangle
přijde mi to přesnější, jelikož triangly co nejsou vidět ale koukají k nám nás nezajímaj

potom ještě ohledně Command stacku
máme tam psáno že každý command si bude ukládat původní state, aby mohl dělat undo
přijde mi lepší ta implementace jak nás napadla kdysi na schůzce, že command má jen data pro redo, a původní stav bude uložen někde v Command Manager klidně každých x commandů
a undo bude probíhat načtením snapshotu a redo třeba 2-3 commandů

Feedback on Chapters 3 and 4

  • In many places throughout Chapters 3, 4 and probably further you often say "and this will be described later". Don't be afraid to put concrete forward references there (that's what Latex is for). Mind you, the document won't necessarily be read linearly!

  • Minor Architecture remark: data from the geometry backend should probably flow to wherever the rendering subsystem is, in this case the UI application?

  • The implementation details of the undo/redo stack are not very clear. How about defining some notation for the object before/after command and writing around that? Nothing extreme, just tidy up a bit.

  • Nice examples of the data flow in 4.4. Would be really cool to have some diagrams accompanying them, but i get that there might not be the time for that.

  • You often talk about colors (coloring triangles etc.) but in fact one should probably use something like segmentation classes instead - since the concrete material is not known at editing time. For visulization in the editor, there will be colors of course, but they should be disambiguated i believe.

Final UI polishing

  • Provide tooltips for tools:
    • Triangle Painter
    • Paint Bucket
    • Brush
    • Text Editor
    • Automatic Segmentation
    • Manual Segmentation
    • Display Options
    • Settings
    • Information
    • Export Assistant
  • Antialiasing (does not seem to be possible to change MSAA at run-time, and creating some kind of a configuration for this would take too much effort; as a workaround, users may use the settings of their GPU to enable MSAA for Pepr3D)
  • Fill in Information tool
  • Fix font in File menu
  • Fix (missing) separator in Automatic/Manual Segmentation
  • Change "Reset model translation" to "Reset model transformation"
  • Hide Debug tool in Release
  • Provide fatal error dialogs:
    • If a font is not found (use default ImGui font for the dialog)
    • If defaultcube.stl is not found
    • If shaders are not found
    • Missing hotkeys.json is not an error!
  • Save all Cinder logs to a file pepr3d.log, fatals to pepr3d.fatal.log
  • Use Cinder logging automatically from Dialog.cpp
  • In Release, disable console and set CI_MIN_LOG_LEVEL to 3 (LEVEL_WARNING)
  • If an exception is uncaught and Pepr3D exits without a dialog (incl. when an exception is thrown while trying to display a fatal error dialog), use Cinder log files to save fatal errors and display an info dialog next time Pepr3D is launched (i.e., if pepr3d.fatal.log file exists when Pepr3D is launched, backup the original pepr3d.log into pepr3d.fatal.#.log file and show dialog and remove the .fatal.log file)
  • Provide warning & error & fatal error dialogs for tools:
    • Triangle Painter
    • Paint Bucket
    • Brush
    • Text Editor
    • Automatic Segmentation
    • Manual Segmentation
    • Display Options
    • Settings
    • Information
    • Import
    • Load
    • Save
    • Geometry (probably throw exceptions and handle from tools)
    • Export Assistant

Change camera behavior

  • Invert mouse wheel (scroll up = zoom in)
  • Left mouse button must not do anything
  • Rotate with right mouse button instead of left one
  • Add camera reset button
  • Investigate option to disallow rotating more than +/- 90° up/down (i.e., prevent flipping)
  • Investigate additional movement, e.g., roll

Oskar comments

Here are a few comments by Oskar that we should consider before the final release.

  • Add a slider for Brush that would adjust the fidelity (triangle count) of the brush. Related to #110.
  • Add faster Brush shapes such as a square which only has 2 triangles.
  • Normalize Brush size, e.g., 0.30 is big with a cube but very small with Onix. Probably use AABB for this or normalize it using the model matrix in ModelView.
  • Add progress bar to SDF computation.
  • Normalize robustness in automatic segmentation, i.e., so it does not go from 2 to 15.
  • In export/extrusion, detect self intersections automatically. (too complicated, out of scope)
  • In export/extrusion, allow the user to override the extrusion depth locally for certain parts of the object. (workaround: use the new Export Assistant tool with additional colors to represent different depths; Pepr3D will separate the model by these colors, but they can be set to the same color in slicer)
  • Check if the sliders are not too slow/fast, especially in Brush, the brush size slider is very sensitive to mouse movement.

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.