Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mode ideas [Meta] #193

Open
techninja opened this issue Dec 7, 2014 · 24 comments
Open

Mode ideas [Meta] #193

techninja opened this issue Dec 7, 2014 · 24 comments

Comments

@techninja
Copy link
Contributor

This issue is meant to be a catch-all for interesting projects that would be fun/interesting to have as a mode to drive RoboPaint. I see these kinds of things all the time but have no centralized location to store them (or time to work on them directly) so I figure they should just show up here as a single comment. Format should be:

#### MODE IDEA: Mode name
Description/link

**Work/Changes required:**
* Change 1
* Change 2
@techninja
Copy link
Contributor Author

MODE IDEA: Interactive fractal tree

http://www.princeton.edu/~aatishb/processing/tree_noleaves/
I know there's about a million of these around, but this one has a fun exploratory interface and the code is quite small.

Work/Changes required:

  • It's currently rendering to a canvas... Though it's just lines that can be converted to likely a single path, I wonder if the P5 library can output SVG
  • Need to add a click handler to lock the tree down (and likely some kind of nice UI for locking/unlocking)

@techninja
Copy link
Contributor Author

MODE IDEA: "Simplify"

http://simplify.thatsh.it/ and code @ https://github.com/jpag/simplify.thatsh.it
This is a very cool little app that takes a photo and creates an artistic impression of it with simple shapes and lines.

Work/Changes required:

  • This one is also using a canvas to render the shapes... though it's using an SVG compatible library! I've already started converting the functionality for this, though it's a bit more complex making semicircles in SVG paths vs in canvas
  • Apart from getting it to output SVG directly, we also need to manage handling of background color changes, as we really only output on white and coloring the entire background of something isn't really a good idea when it comes to paint or pens.

@techninja
Copy link
Contributor Author

MODE IDEA: Inspirograph

http://nathanfriend.io/inspirograph/ with code @ https://github.com/nfriend/inspirograph
Incredible and well thought out spirograph like toy. Use D3.js SVG library and TypeScript. Quite fun!

Work/Changes required:

  • Though it uses D3 and SVG for a number of elements, it appears to iterate over pen positions and draw that to the canvas. This will have to be reworked to output a simplified polygonal path (or better yet, a mathematically correct Bézier path).
  • Depending on implementation, will likely require either export to SVG to send to actual printing mode, or some kind of inner printing. Could likely do immediate printing for explorers to simply try something and wait for the bot to catch up.

@techninja
Copy link
Contributor Author

MODE IDEA: Direct Scratch/Snap support

http://scratch.mit.edu -- http://snap.berkeley.edu/
This would allow for a far more direct web based interface than the external application integration, but would rely on existing integration. Though @oskay has suggested against this method, I see some benefits:

Pros:

  • Direct integration means single application workflow
  • With better integration, could have visual sidebar loading of examples with preview images
  • Could support remote CNCServer by simply handing a different source to the initialization script.
  • Might be able to access other online projects through their interfaces.... maybe? 😟

Cons:

  • Both applications are somewhat inaccessible being flash (Scratch) and 100% canvas (Snap).
  • Both applications, though possibly re-hostable locally, would likely only be best used loaded from their sites directly, limiting the integration possibilities.
  • We likely don't want to "own" this external 3rd party workflow.
  • Proper integration may be a can of worms

Work/Changes required:

  • Very little, apart from injecting the extension script for flash. Though I have yet to prove that flash will run safely/happily in Node-Webkit.
  • No need to integrate export, though it's likely we need page leaving protection for saving work, or possibly even temp save export in localstorage.

@oskay
Copy link
Contributor

oskay commented Dec 7, 2014

As a general caution, adding additional third-party modules like these introduces additional places for bugs-not-under-our-control to sneak in. We have already had some issues from bugs deep within the serial or method draw code causing problems. One possible approach would be to label all of these as "Experimental Modes" and leave them in permanent beta status.

Fractal trees are good. They will only look good with pens, however.

Simplify is pretty neat. I worry that it's too simple. What everyone wants is a program that will take an image and output a representational watercolor. Simplify almost promises that, but it's so absurdly simplified that it almost over-promises. (Is there an approach that will do that?)

Inspirograph has an awesome interface. Again, will look best with pens. Would be best with multiple pen colors.

Direct Scratch sounds like a huge chunk to bite off. And a screen size issue.
Also, a huge amount of the success of a given programming language/environment pair (see Arduino, Scratch, etc) is the consistent interface. I think that the cost/benefit ratio of this is likely too high.

More modes:

@techninja
Copy link
Contributor Author

These modes don't fit into the core model, and the idea of adding more modes to the list of "Experimental" doesn't fit either (figuratively in the sense of the program's ideals, and literally in the actual settings menu).

These would work better as some kind of "third party extension", selected from a list that users could select from to download and use in their application. Building them out as modes right now is out of scope/priority, but if they're documented here as possibilities for a time when such a 3rd party extension browser is properly thought out, they would "work" then and could be integrated by us or other interested parties. I've done nothing right now to define that or how it would even work, though I suspect it could be done entirely on Github infrastructure. Again, the point here is just to talk about options. I don't want to support these within RoboPaint any more than you.

I'll take your word on the Scratch/Snap complications. I do like the possible Pros and am glad to have documented the possibility.

I've already put quite a bit of proof-of-concept work into a fast C++ stipple/generalized raster-to-vector mode to handle the 99% of photo to watercolor conversion use cases. It has not been a priority though and I have yet to commit any code for it. If we want to prioritize that out for v1 I think it would be great, but it wouldn't really be third party, and would likely be a core mode somewhat similar to auto-paint with more dropdown options.

More modes feedback:

  • Snowflake looks like a slam dunk, with SVG export built in! Very cool.
  • Autotrace looks pretty powerful. Weird I haven't looked at it before. the Node module wrapper looks like icing on the cake.
  • node gm looks pretty powerful, and will likely give far better/faster results than non-native JS implementations, not to mention Imagemagick is well known and supported so that's a total win. Good stuff all around

@oskay
Copy link
Contributor

oskay commented Dec 7, 2014

Understood, on the scope of the project.

@techninja
Copy link
Contributor Author

MODE IDEA: Double-pendulum trace/physics sandbox

http://www.i-programmer.info/news/167-javascript/7528-a-double-pendulum-in-100-lines-of-javascript.html
Code @ https://github.com/micaeloliveira/physics-sandbox/blob/master/assets/javascripts/pendulum.js

I've had this one on the list for a long time, as being able to trace and make art out of physical simulations has always been something I've loved. There's quite a few different ways this could go as well.

Work/Changes required:

  • Likely would just be using the physics code as a library and rendering engine, would need to translate the drawn canvas points into SVG polygonal paths.
  • Could be some kind of Physics playground, allowing for tracing of all sorts of presets with customizations out the wazoo.. Who knows.

@techninja
Copy link
Contributor Author

MODE IDEA: Celtic Knot Maker

Design and customize a celtic knot: http://w-shadow.com/celtic-knots/ (Also usable now with SVG export from http://sourceforge.net/projects/knotter/)

Work/Changes required:

  • Again, change path drawing from canvas to SVG, but likely a relatively small issue
  • Unless used with small knots wrought large, would work best with a pen.

@techninja
Copy link
Contributor Author

MODE IDEA: Geometric photo filter

Input via photo or webcam: http://face.haluska.sk/. Output to images or SVG! Has a BUNCH of options.

Work/Changes required:

  • The output is very heavy, with far more objects than even a maximum stipplegen output. I generated a file in ~1 min that has taken over 10 minutes to open in Adobe Illustrator (42mb SVG file of DOOOOM!).
  • Simply because of the heavy output, unless the number of objects can be culled or limited, this method is likely not worth it.

@techninja
Copy link
Contributor Author

MODE IDEA: Pursuit curves renderer

Draws polygons rotated and aligned to give the impression of a curve: http://jlchapa.azurewebsites.net/math/pursuitcurves.html

bp25fiw

Work/Changes required:

  • Improve Initial angle and adjusters to be better suited for aspect ratio
  • Color/BW output, Stripe mode is good, need to match to colors (include direction change).
  • Hard limit on max iterations beyond a certain size (pointless after 15 or so)

@techninja
Copy link
Contributor Author

MODE IDEA: Mondrian Generator

Draws Piet-Mondrian Style images in a random yet interesting fashion. http://jefworks.github.io/mondrian-generator/
mondrian

Work/Changes required:

  • Port code to Paper.js
  • Add in some options for colors/max fill & size / shape.

@forresto
Copy link

Mode Idea: JavaScript Turtle Graphics

I made this JS live coding turtle graphics editor a while ago... http://meemoo.org/blog/2013-02-11-live-code-editor-javascript-to-svg ... With a couple tweaks I think it could be a good mode.

Example codeWatercolorBot drawing

js turtle

@forresto
Copy link

Hatching editor

With pen (and brush) choosing different fills and angles in the creation view, and seeing a preview, would be great.

moka

@docprofsky
Copy link
Collaborator

3D Line Art Generator

Sample 3D line art renders
Using https://github.com/fogleman/ln

@docprofsky
Copy link
Collaborator

Handwriting Font Mode

http://kevinhou.wix.com/projects#!handwriting-font-app/cbfk
This could be integrated with robopaint-mode-example.

Work/Changes required:

  • Add an option to robopaint-mode-example to specify your own font.
  • Provide a way to make a font

@docprofsky
Copy link
Collaborator

Iterograph Mode

example iterograph
http://iterograph.laboiteatortue.com/

@docprofsky
Copy link
Collaborator

Birthday Cake Mode

Makes a drawing of a birthday cake with an adjustable number of candles.
This would take care of #136

@RI0
Copy link
Contributor

RI0 commented Mar 19, 2016

AUTOCAD MODE

Could be fun to be able to produce robot drawn versions of AutoCad
or Sketch-Up Drawings with nuanced line-weight and stroke-weight.

http://www.cadnstuff.com/sylb/bdrs_penwts/LineThick.pdf

@techninja
Copy link
Contributor Author

MODE IDEA: Maze mode

amazing

Creates mazes! Found a little code here, uses paperjs already. Unicursal maze generator.

Work/Changes required:

  • Adjust colors?
  • Add other maze type/code.

@forresto
Copy link

forresto commented Jul 6, 2016

@techninja that's my labyrinth! Will help test. https://github.com/forresto/sketch/blob/master/labyrinth-01.paper.js

I have the start of an interactive one (mouse can be wonky).

@forresto
Copy link

forresto commented Jul 6, 2016

@techninja That's a gray path drawn over a thicker black path. Is there something in paper or robopaint that could approximate that (stroke the inside and outside of one path)?

@techninja
Copy link
Contributor Author

Sure. Just differentiate what gets created as the "movement path" vs the path shown on screen. In the latest RoboPaint we draw to the paper.js "Action" layer the polygons that will become the x/y coordinate movements for the robot. You can also do path manual offsetting to take a given shape and trace an inset version of it.

@docprofsky
Copy link
Collaborator

From @RI0 in #255:

MODE IDEA: Serendipity Seed Mode

Could we look at adding a Serendipity Button in the Print Mode
that would render the current print absolutely unique?

The button could open a window to generate the Serendipity Seed
based on a set of variables such as :

Time of Day,
Current Cloud Cover,
Current Temperature,
or some other system based or human entered variable related to the
artist's mood.

Some of the variables could come from an online service such as Wolfram Alpha

https://www.wolframalpha.com/input/?i=weather+in+san+francisco

Serendipity could play out by adding some error to the brush height, the overshoot,
the speed, precision, etc. in a manner that would make it very difficult to produce
two prints that are exactly the same... and some might actually be better than the
vector drawing source.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants