11package com .marginallyclever .makelangelo .donatelloimpl .nodes .points ;
22
3+ import com .marginallyclever .donatello .ports .InputImage ;
34import com .marginallyclever .makelangelo .donatelloimpl .ports .InputTurtle ;
45import com .marginallyclever .makelangelo .donatelloimpl .ports .OutputTurtle ;
56import com .marginallyclever .makelangelo .turtle .Turtle ;
67import com .marginallyclever .nodegraphcore .Node ;
78
9+ import java .awt .*;
10+ import java .awt .image .BufferedImage ;
11+
812/**
9- * Place a pattern on a path.
13+ * Place a pattern on a path. Modulate the pattern by the image.
1014 */
1115public class PatternAtPoints extends Node {
1216 private final InputTurtle pattern = new InputTurtle ("pattern" );
1317 private final InputPoints listOfPoints = new InputPoints ("points" );
18+ private final InputImage inputImage = new InputImage ("image" );
1419 private final OutputTurtle output = new OutputTurtle ("output" );
1520
1621 public PatternAtPoints () {
1722 super ("PatternAtPoints" );
1823 addVariable (pattern );
1924 addVariable (listOfPoints );
25+ addVariable (inputImage );
2026 addVariable (output );
2127 }
2228
@@ -25,16 +31,32 @@ public void update() {
2531 Turtle result = new Turtle ();
2632 Turtle myPattern = pattern .getValue ();
2733 ListOfPoints points = listOfPoints .getValue ();
34+ BufferedImage image = inputImage .getValue ();
35+ var w = image .getWidth ();
36+ var h = image .getHeight ();
37+
2838 if (points .isEmpty ()) {
2939 setComplete (100 );
3040 output .send (result );
3141 return ;
3242 }
43+
44+ double min = 0.1 ;
45+ double max = 2.0 ;
46+
3347 setComplete (0 );
3448 int total = points .size ();
3549 int i =0 ;
3650 for (var p : points ) {
3751 Turtle stamp = new Turtle (myPattern );
52+ if (p .x >=0 && p .x <w && p .y >=0 && p .y <h ) {
53+ // inside image
54+ var c = new Color (image .getRGB ((int )p .x ,(int )p .y ));
55+ // get intensity of c as a value 0....1
56+ var intensity = 1.0 -(c .getBlue ()+c .getGreen ()+c .getRed ())/(3.0 *255.0 );
57+ var i2 = min + intensity * (max -min );
58+ stamp .scale (i2 ,i2 );
59+ }
3860 stamp .translate (p .x ,p .y );
3961 result .add (stamp );
4062 setComplete ((100 *i ++/total ));
0 commit comments