Skip to content

Commit 074bb66

Browse files
committed
Add LGPL-2.1 license, update Processing.h/cpp with mouseDX/mouseDY/captureMouse/releaseMouse, add Topics examples, patch script
1 parent bf806f2 commit 074bb66

132 files changed

Lines changed: 1427 additions & 49 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

LICENSE

Lines changed: 501 additions & 0 deletions
Large diffs are not rendered by default.

cache/linux-x64/Processing.o

-8.53 KB
Binary file not shown.

examples/Basics/arrays/Array.pde

Lines changed: 0 additions & 45 deletions
This file was deleted.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include <vector>
2+
3+
class Ball {
4+
public:
5+
float x;
6+
float y;
7+
float speed;
8+
float gravity;
9+
float w;
10+
float life;
11+
12+
Ball(float tempX, float tempY, float tempW) {
13+
x = tempX;
14+
y = tempY;
15+
w = tempW;
16+
speed = 0;
17+
gravity = 0.1;
18+
life = 255;
19+
}
20+
21+
void move() {
22+
speed += gravity;
23+
y += speed;
24+
25+
if (y > height) {
26+
speed *= -0.8;
27+
y = height;
28+
}
29+
}
30+
31+
bool finished() {
32+
life--;
33+
return life < 0;
34+
}
35+
36+
void display() {
37+
fill(0, life);
38+
ellipse(x, y, w, w);
39+
}
40+
};
41+
42+
std::vector<Ball> balls;
43+
int ballWidth = 48;
44+
45+
void setup() {
46+
size(640, 360);
47+
noStroke();
48+
49+
balls.push_back(Ball(width / 2, 0, ballWidth));
50+
}
51+
52+
void draw() {
53+
background(255);
54+
55+
for (int i = (int)balls.size() - 1; i >= 0; i--) {
56+
balls[i].move();
57+
balls[i].display();
58+
59+
if (balls[i].finished()) {
60+
balls.erase(balls.begin() + i);
61+
}
62+
}
63+
}
64+
65+
void mousePressed() {
66+
balls.push_back(Ball(mouseX, mouseY, ballWidth));
67+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include <vector>
2+
3+
std::vector<int> lottery;
4+
std::vector<int> results;
5+
std::vector<int> ticket;
6+
7+
void showList(std::vector<int>& list, float x, float y) {
8+
for (int i = 0; i < (int)list.size(); i++) {
9+
int val = list[i];
10+
11+
stroke(255);
12+
noFill();
13+
ellipse(x + i * 32, y, 24, 24);
14+
15+
textAlign(CENTER);
16+
fill(255);
17+
text(val, x + i * 32, y + 6);
18+
}
19+
}
20+
21+
void setup() {
22+
size(640, 360);
23+
frameRate(30);
24+
25+
for (int i = 0; i < 20; i++) {
26+
lottery.push_back(i);
27+
}
28+
29+
for (int i = 0; i < 5; i++) {
30+
int index = (int)random(lottery.size());
31+
ticket.push_back(lottery[index]);
32+
}
33+
}
34+
35+
void draw() {
36+
background(51);
37+
38+
// shuffle lottery manually (since std::vector has no shuffle)
39+
for (int i = 0; i < (int)lottery.size(); i++) {
40+
int j = (int)random(lottery.size());
41+
std::swap(lottery[i], lottery[j]);
42+
}
43+
44+
showList(lottery, 16, 48);
45+
showList(results, 16, 100);
46+
showList(ticket, 16, 140);
47+
48+
for (int i = 0; i < (int)results.size(); i++) {
49+
if (results[i] == ticket[i]) {
50+
fill(0, 255, 0, 100);
51+
} else {
52+
fill(255, 0, 0, 100);
53+
}
54+
ellipse(16 + i * 32, 140, 24, 24);
55+
}
56+
57+
if (frameCount % 30 == 0) {
58+
if (results.size() < 5) {
59+
int val = lottery[0];
60+
lottery.erase(lottery.begin());
61+
results.push_back(val);
62+
} else {
63+
for (int i = 0; i < (int)results.size(); i++) {
64+
lottery.push_back(results[i]);
65+
}
66+
results.clear();
67+
}
68+
}
69+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/**
2+
* Loading JSON Data
3+
* Translated to C++ Mode from Processing Java by Daniel Shiffman.
4+
*/
5+
6+
struct Bubble {
7+
float x, y, diameter;
8+
std::string name;
9+
bool over = false;
10+
11+
Bubble(float x, float y, float diameter, std::string name)
12+
: x(x), y(y), diameter(diameter), name(name) {}
13+
14+
void rollover(float px, float py) {
15+
over = dist(px, py, x, y) < diameter / 2;
16+
}
17+
18+
void display() {
19+
stroke(0);
20+
strokeWeight(2);
21+
noFill();
22+
ellipse(x, y, diameter, diameter);
23+
if (over) {
24+
fill(0);
25+
textAlign(CENTER);
26+
text(name, x, y + diameter / 2 + 20);
27+
}
28+
}
29+
};
30+
31+
std::vector<Bubble> bubbles;
32+
JSONValue json;
33+
34+
void loadData() {
35+
json = loadJSONObject("data/data.json");
36+
37+
if (!json.isObject() || !json.hasKey("bubbles")) {
38+
println("Failed to load data.json");
39+
return;
40+
}
41+
42+
JSONArray& bubbleData = json["bubbles"].getArray();
43+
bubbles.clear();
44+
45+
for (auto& b : bubbleData) {
46+
if (!b.hasKey("position")) continue;
47+
float x = b["position"]["x"].getFloat();
48+
float y = b["position"]["y"].getFloat();
49+
float diameter = b["diameter"].getFloat();
50+
std::string label = b["label"].getString();
51+
bubbles.push_back(Bubble(x, y, diameter, label));
52+
}
53+
54+
println("Loaded " + std::to_string(bubbles.size()) + " bubbles");
55+
}
56+
57+
void setup() {
58+
size(640, 360);
59+
loadData();
60+
}
61+
62+
void draw() {
63+
background(255);
64+
for (auto& b : bubbles) {
65+
b.display();
66+
b.rollover(mouseX, mouseY);
67+
}
68+
textAlign(LEFT);
69+
fill(0);
70+
text("Click to add bubbles.", 10, height - 10);
71+
}
72+
73+
void mousePressed() {
74+
// Build position object
75+
JSONObject pos;
76+
pos["x"] = JSONValue((double)mouseX);
77+
pos["y"] = JSONValue((double)mouseY);
78+
79+
// Build bubble object
80+
JSONObject newBubble;
81+
newBubble["position"] = JSONValue(pos);
82+
newBubble["diameter"] = JSONValue((double)random(40, 80));
83+
newBubble["label"] = JSONValue(std::string("New label"));
84+
85+
// Append to array
86+
JSONArray& bubbleData = json["bubbles"].getArray();
87+
bubbleData.push_back(JSONValue(newBubble));
88+
89+
if ((int)bubbleData.size() > 10) {
90+
bubbleData.erase(bubbleData.begin());
91+
}
92+
93+
saveJSONObject("data/data.json", json);
94+
loadData();
95+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"bubbles": [
3+
{ "position": { "x": 160, "y": 103 }, "diameter": 43.19, "label": "Happy" },
4+
{ "position": { "x": 372, "y": 137 }, "diameter": 52.42, "label": "Sad" },
5+
{ "position": { "x": 273, "y": 235 }, "diameter": 61.80, "label": "Meh" }
6+
]
7+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/**
2+
* Loading Tabular Data
3+
* Translated to C++ Mode from Processing Java by Daniel Shiffman.
4+
*
5+
* Loads bubble data from a CSV file and allows adding
6+
* new bubbles by clicking.
7+
*
8+
* CSV format (data/data.csv):
9+
* x,y,diameter,name
10+
* 160,103,43.19838,Happy
11+
* 372,137,52.42526,Sad
12+
* 273,235,61.14072,Joyous
13+
* 121,179,44.758068,Melancholy
14+
*/
15+
16+
struct Bubble {
17+
float x, y, diameter;
18+
std::string name;
19+
bool over = false;
20+
21+
Bubble(float x, float y, float diameter, std::string name)
22+
: x(x), y(y), diameter(diameter), name(name) {}
23+
24+
void rollover(float px, float py) {
25+
over = dist(px, py, x, y) < diameter / 2;
26+
}
27+
28+
void display() {
29+
stroke(0);
30+
strokeWeight(2);
31+
noFill();
32+
ellipse(x, y, diameter, diameter);
33+
if (over) {
34+
fill(0);
35+
textAlign(CENTER);
36+
text(name, x, y + diameter / 2 + 20);
37+
}
38+
}
39+
};
40+
41+
std::vector<Bubble> bubbles;
42+
Table* table = nullptr;
43+
44+
void loadData() {
45+
table = loadTable("data/data.csv", "header");
46+
47+
if (!table) {
48+
println("Failed to load data.csv");
49+
return;
50+
}
51+
52+
bubbles.clear();
53+
for (int i = 0; i < table->getRowCount(); i++) {
54+
float x = table->getFloat(i, "x");
55+
float y = table->getFloat(i, "y");
56+
float diameter = table->getFloat(i, "diameter");
57+
std::string name = table->getString(i, "name");
58+
bubbles.push_back(Bubble(x, y, diameter, name));
59+
}
60+
61+
println("Loaded " + std::to_string(bubbles.size()) + " bubbles");
62+
}
63+
64+
void setup() {
65+
size(640, 360);
66+
loadData();
67+
}
68+
69+
void draw() {
70+
background(255);
71+
for (auto& b : bubbles) {
72+
b.display();
73+
b.rollover(mouseX, mouseY);
74+
}
75+
textAlign(LEFT);
76+
fill(0);
77+
text("Click to add bubbles.", 10, height - 10);
78+
}
79+
80+
void mousePressed() {
81+
if (!table) return;
82+
83+
// Add a new row
84+
std::vector<std::string>& row = table->addRow();
85+
TableRow tr(row, table->columns);
86+
tr.setFloat(table->getColumnIndex("x"), mouseX);
87+
tr.setFloat(table->getColumnIndex("y"), mouseY);
88+
tr.setFloat(table->getColumnIndex("diameter"), random(40, 80));
89+
tr.setString(table->getColumnIndex("name"), "Blah");
90+
91+
// Cap at 10 rows
92+
if (table->getRowCount() > 10) {
93+
table->removeRow(0);
94+
}
95+
96+
saveTable("data/data.csv", *table);
97+
loadData();
98+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
x,y,diameter,name
2+
160,103,43.19838,Happy
3+
372,137,52.42526,Sad
4+
273,235,61.14072,Joyous
5+
121,179,44.758068,Melancholy

0 commit comments

Comments
 (0)