Tool um rotierte Bildausschnitte aus Bildstapeln zu schneiden
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bounder.pde 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. class Bounder {
  2. int state;
  3. float h;
  4. float angle, arcangle;
  5. float angle(PVector v1, PVector v2) {
  6. float a = atan2(v2.y, v2.x) - atan2(v1.y, v1.x);
  7. if (a < 0) a += TWO_PI;
  8. return a;
  9. }
  10. PVector p1, p2, p3, p4;
  11. void leftclick() {
  12. if (state < 3) state++;
  13. else state = 1;
  14. if (state == 1) {
  15. p1 = new PVector(mouseX, mouseY);
  16. loop();
  17. }
  18. if (state == 2) {
  19. p2 = new PVector(mouseX, mouseY);
  20. }
  21. if (state == 3) {
  22. h = -p2.dist(new PVector(mouseX, mouseY));
  23. }
  24. }
  25. void rightclick(){
  26. reset();
  27. }
  28. void reset(){
  29. boolean redrawthis = (state == 3) ? true : false;
  30. state = 0;
  31. if(redrawthis) redraw();
  32. }
  33. void update() {
  34. if (state == 2) {
  35. h = -p2.dist(new PVector(mouseX, mouseY));
  36. }
  37. }
  38. void display() {
  39. if (state > 0) {
  40. fill(0);
  41. noStroke();
  42. circle(p1.x, p1.y, 5);
  43. }
  44. if (state == 1) {
  45. stroke(1);
  46. line(p1.x, p1.y, mouseX, mouseY);
  47. }
  48. if (state > 1) {
  49. fill(0);
  50. noStroke();
  51. circle(p2.x, p2.y, 5);
  52. fill(255, 100);
  53. stroke(1);
  54. pushMatrix();
  55. translate(p1.x, p1.y);
  56. rotate(angle(new PVector(0, width), PVector.sub(p2, p1)));
  57. rect(0, 0, h, p1.dist(p2));
  58. p3 = new PVector(screenX(h, 0), screenY(h, 0));
  59. p4 = new PVector(screenX(h, p1.dist(p2)), screenY(h, p1.dist(p2)));
  60. popMatrix();
  61. fill(0);
  62. noStroke();
  63. circle(p3.x, p3.y, 5);
  64. circle(p4.x, p4.y, 5);
  65. }
  66. }
  67. void compile(boolean Execute) {
  68. if (Execute) {
  69. state = 0;
  70. covers.add(new Cover(p1, p2, p4, p3));
  71. }
  72. PVector ptopmid = new PVector((p1.x + p2.x)/2, (p1.y + p2.y)/2);
  73. PVector pbotmid = new PVector((p3.x + p4.x)/2, (p3.y + p4.y)/2);
  74. /*
  75. links: p1 -> ptopmid -> pbotmid -> p3
  76. rechts: ptopmid -> p2 -> p4 -> pbotmid
  77. */
  78. int leftLeftTopX = (int)map(p1.x, 0, width, 0, images[imageNo].width);
  79. int leftLeftTopY = (int)map(p1.y, 0, height, 0, images[imageNo].height);
  80. int leftRightTopX = (int)map(ptopmid.x, 0, width, 0, images[imageNo].width);
  81. int leftRightTopY = (int)map(ptopmid.y, 0, height, 0, images[imageNo].height);
  82. int leftRightBotX = (int)map(pbotmid.x, 0, width, 0, images[imageNo].width);
  83. int leftRightBotY = (int)map(pbotmid.y, 0, height, 0, images[imageNo].height);
  84. int leftLeftBotX = (int)map(p3.x, 0, width, 0, images[imageNo].width);
  85. int leftLeftBotY = (int)map(p3.y, 0, height, 0, images[imageNo].height);
  86. int rightLeftTopX = leftRightTopX;
  87. int rightLeftTopY = leftRightTopY;
  88. int rightRightTopX = (int)map(p2.x, 0, width, 0, images[imageNo].width);
  89. int rightRightTopY = (int)map(p2.y, 0, height, 0, images[imageNo].height);
  90. int rightRightBotX = (int)map(p4.x, 0, width, 0, images[imageNo].width);
  91. int rightRightBotY = (int)map(p4.y, 0, height, 0, images[imageNo].height);
  92. int rightLeftBotX = leftRightBotX;
  93. int rightLeftBotY = leftRightBotY;
  94. //beispielcommands:
  95. //for f in ./*.jpg; do convert "$f" \( -clone 0 -fill black -colorize 100 -fill white -draw "polygon 3218,2414 4882,2414 4882,2621 3218,4771" \) -alpha off -compose copy_opacity -composite -trim +repage "$f"_left.jpg; done
  96. //for f in ./*.jpg; do convert "$f" \( -clone 0 -fill black -colorize 100 -fill white -draw "polygon 3218,2414 4882,2414 4882,2621 3218,4771" \) -alpha off -compose copy_opacity -composite -trim +repage "$f"_right.jpg; done
  97. String folderName = String.valueOf((int)random(100000000));
  98. String cmdleft = "for f in ./*.jpg; do convert \"$f\" \\( -clone 0 -fill black -colorize 100 -fill white -draw \"polygon " + leftLeftTopX + "," + leftLeftTopY + " " + leftRightTopX + "," + leftRightTopY + " " + leftRightBotX + "," + leftRightBotY + " " + leftLeftBotX + "," + leftLeftBotY + "\" \\) -alpha off -compose copy_opacity -composite -trim +repage " + folderName + "/\"$f\"_left.jpg; done";
  99. String cmdright = "for f in ./*.jpg; do convert \"$f\" \\( -clone 0 -fill black -colorize 100 -fill white -draw \"polygon " + rightLeftTopX + "," + rightLeftTopY + " " + rightRightTopX + "," + rightRightTopY + " " + rightRightBotX + "," + rightRightBotY + " " + rightLeftBotX + "," + rightLeftBotY + "\" \\) -alpha off -compose copy_opacity -composite -trim +repage " + folderName + "/\"$f\"_right.jpg; done";
  100. String cmdpdf = "convert " + folderName + "/*.jpg notizheft.pdf";
  101. println(cmdleft);
  102. println(cmdright);
  103. //execl("/bin/sh", "-c", "cd", (const char *)0);
  104. //exec("/bin/sh -c cd " + folderURI + " && " + cmdleft);
  105. //String[] runConvert = { "/bin/bash", "-c", "cd " + folderURI + " && mkdir " + folderName + " && " + cmdleft + " && " + cmdright + " && " + cmdpdf };
  106. String[] runConvert = { "/bin/bash", "-c", "cd " + folderURI + " && mkdir " + folderName + " && " + cmdleft + " && " + cmdright };
  107. if (Execute) exec(runConvert);
  108. //println(leftLeftTopX + "," + leftLeftTopY + " " + leftRightTopX + "," + leftRightTopY + " " + leftRightBotX + "," + leftRightBotY + " " + leftLeftBotX + "," + leftLeftBotY);
  109. //println(rightLeftTopX + "," + rightLeftTopY + " " + rightRightTopX + "," + rightRightTopY + " " + rightRightBotX + "," + rightRightBotY + " " + rightLeftBotX + "," + rightLeftBotY);
  110. /*
  111. println((int)map(p1.x, 0, width, 0, images[imageNo].width));
  112. println((int)map(p1.y, 0, height, 0, images[imageNo].height));
  113. println((int)map(p2.x, 0, width, 0, images[imageNo].width));
  114. println((int)map(p2.y, 0, height, 0, images[imageNo].height));
  115. println((int)map(p3.x, 0, width, 0, images[imageNo].width));
  116. println((int)map(p3.y, 0, height, 0, images[imageNo].height));
  117. println((int)map(p4.x, 0, width, 0, images[imageNo].width));
  118. println((int)map(p4.y, 0, height, 0, images[imageNo].height));*/
  119. }
  120. }