Skip to content

Instantly share code, notes, and snippets.

@yongkyuns
Created July 31, 2020 04:32
Show Gist options
  • Save yongkyuns/63910fdcb2fe3867a9bf0c73737a3cfb to your computer and use it in GitHub Desktop.
Save yongkyuns/63910fdcb2fe3867a9bf0c73737a3cfb to your computer and use it in GitHub Desktop.
// use ease::*;
use ease::{Arrow, EaseType, Tweener};
use nannou::prelude::*;
struct Model {
tweener: Tweener<Arrow>,
}
fn model(app: &App) -> Model {
app.new_window().size(512, 512).view(view).build().unwrap();
let r = app.window_rect();
let mut tweener = Tweener::new();
// let mut tweener: Tweener<T, geom::scalar::Default> = Default::default();
for r in r.subdivisions_iter() {
for r in r.subdivisions_iter() {
for r in r.subdivisions_iter() {
for r in r.subdivisions_iter() {
for r in r.subdivisions_iter() {
let start = r.xy();
let end = start + pt2(1.0, 1.0);
tweener.register(Arrow { start, end }, Arrow { start, end });
}
}
}
}
}
Model { tweener }
}
fn main() {
nannou::app(model).update(update).run();
}
fn update(app: &App, model: &mut Model, _update: Update) {
if app.mouse.buttons.left().is_down() {
let start = app.mouse.position();
let end = start + pt2(1.0, 1.0);
model
.tweener
.start(EaseType::ElasticOut, Arrow { start, end }, app.time, 10.0);
// for tween_pair in &mut model.tweener.entities.iter() {
// tween_pair.animator.start(
// EaseType::ElasticOut,
// arrow.tween_pair.current,
// app.mouse.position(),
// app.time,
// 1.0,
// );
// }
}
// for arrow in &mut model.tweener {
// arrow.animator.update(app.time);
// arrow.end = arrow.animator.current;
// }
model.tweener.update(app.time);
}
fn view(app: &App, model: &Model, frame: Frame) {
let draw = app.draw();
draw.background().color(BLACK);
for tween_pair in &model.tweener.entities {
let arrow = &tween_pair.current;
if arrow.start != arrow.end {
draw.arrow().weight(1.0).points(arrow.start, arrow.end);
}
}
// for r in r.subdivisions_iter() {
// for r in r.subdivisions_iter() {
// for r in r.subdivisions_iter() {
// for r in r.subdivisions_iter() {
// for r in r.subdivisions_iter() {
// for r in r.subdivisions_iter() {
// let side = r.w().min(r.h());
// let start = r.xy();
// let start_to_mouse = app.mouse.position() - start;
// let target_mag = start_to_mouse.magnitude().min(side * 0.5);
// let end = start + start_to_mouse.with_magnitude(target_mag);
// draw.arrow()
// .hsv(t / 5.0, 1.0, 1.0)
// .weight(5.0 + 2.0 * t.sin())
// .points(start, end);
// }
// }
// }
// }
// }
// }
// println!("fps = {}", app.fps());
draw.to_frame(app, &frame).unwrap();
}
// use nannou::prelude::*;
// use svg::Svg;
// fn main() {
// nannou::app(model).run();
// }
// struct Model {
// svg: Svg,
// }
// fn model(app: &App) -> Model {
// app.new_window().size(1200, 800).view(view).build().unwrap();
// let assets = app.assets_path().unwrap();
// // let svg_path = std::path::Path::new("D:\\Processing\\Generative Design\\02_M\\M_1_5_01\\data\\arrow.svg");
// //let svg_path = assets.join("svg").join("demo2.svg");
// let svg_path = assets.join("svg").join("tiger.svg");
// let svg = Svg::load(svg_path.to_path_buf()).expect("failed to load svg");
// Model { svg }
// }
// fn view(app: &App, m: &Model, frame: Frame) {
// frame.clear(BLACK);
// let draw = app.draw();
// m.svg.paths.iter().for_each(|p| {
// draw.path()
// .stroke()
// //.x_y(app.mouse.x, app.mouse.y)
// .stroke_weight(1.0)
// .color(BLACK)
// .events(p.events.iter().cloned());
// if let Some(color) = p.fill_color {
// draw.path()
// .fill()
// //.x_y(app.mouse.x, app.mouse.y)
// .color(color)
// .events(p.events.iter().cloned());
// }
// if let Some(ref stroke) = p.stroke_style {
// draw.path()
// .stroke()
// //.x_y(app.mouse.x, app.mouse.y)
// .stroke_weight(stroke.weight)
// .color(stroke.color)
// .join(stroke.line_join)
// .caps(stroke.line_cap)
// .events(p.events.iter().cloned());
// }
// });
// // Write the result of our drawing to the window's frame.
// draw.to_frame(app, &frame).unwrap();
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment