{"id":4872,"date":"2025-06-27T09:05:22","date_gmt":"2025-06-27T09:05:22","guid":{"rendered":"https:\/\/research.swissdigitization.ch\/?p=4872"},"modified":"2025-06-27T09:07:56","modified_gmt":"2025-06-27T09:07:56","slug":"plotterzgames-fehlende-befehle-heute-daten-aus-vectorprogrammen-svg-und-keine-echte-integration-in-processing","status":"publish","type":"post","link":"https:\/\/research.swissdigitization.ch\/?p=4872","title":{"rendered":"PlotterZGames: Fehlende Befehle heute, Daten aus Vectorprogrammen, SVG und keine echte Integration in Processing"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1608\" height=\"1144\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46.png\" alt=\"\" class=\"wp-image-4873\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46.png 1608w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46-300x213.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46-768x546.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46-1536x1093.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2025\/06\/Bildschirmfoto-2025-06-27-um-11.03.46-624x444.png 624w\" sizes=\"auto, (max-width: 1608px) 100vw, 1608px\" \/><\/figure>\n\n\n\n<p>Die neueren Plotter wie der benutzte AxiDraw verf\u00fcgen \u00fcber ein sehr eingeschr\u00e4nktes Plotter-Command-Repertoir &#8211; es gibt de facto fast nur &#8222;Line&#8220; und wenige andere Primitive. Vermutlich entf\u00e4llt sogar eine eingebaute Schrift. Man kann also nicht einfach einen Text schnell setzen. All das was damals in den 60\/70er Jahren eingebaut war in Plottern, das prozessiert heute mehrheitlich der Computer. Wie das bei teuren Plottern ist nicht absch\u00e4tzbar. Es ist also vermutlich in einem gewissen Sinn damals einfacher gewesen einen Plotter als GameDisplay zu brauchen als heute. Hier muss zuerst mal alles extern erstellt werden, was Fonts anbetrifft. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Zus\u00e4tzlich benutzt nat\u00fcrlich ein Game weitere Grafik. Dazu wird SVG genutzt, es ist ein Vectorformat und wird fast \u00fcberall unterst\u00fctzt. Es ist ein menschlich lesbares Format und damit auch gut geeignet f\u00fcr Debugging. <br><br>SVG kann sehr einfach in Prozessing dargestellt werden. Dazu gibt es eine Load-Funktion und eine Funktion zum Zeichnen: shape(). Die Idee einfach die Daten benutzen und Linien f\u00fcr den Plotter daraus zu machen.<\/p>\n\n\n\n<p>So einfach ist die Sache dann doch nicht. PShape ist quasi ein Datencontainer f\u00fcr Vectordaten aller Art von 3D bis 3D. Bl\u00f6derweise wandelt das System beim Laden die SVG Daten nicht um in Processing Java Vector Daten. Dadurch musste sogar im Source-Code von Processing nachgeschaut werden, wie diese Daten abgelegt werden. Sie werden als Parameter-Daten abgelegt. All dies findet weder die Suchemaschine Google (es gibt zu wenig mit diesem Problem) noch die darauf aufbauende integrierte AI heraus.<\/p>\n\n\n\n<p>Am Ende sucht man dann ganz banal im Source-Code von Processing, wie das funktioniert. Und bis man da ist, hat man Stunden bis Tage. GameDev-Lebensrealit\u00e4t. <\/p>\n\n\n\n<p>Anbei der Code f\u00fcr ein Processing-Projekt, das versucht die Daten auszulesen, quasi ein Researchprojekt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\/\/  getFloatWithUnit(element, \"x1\", svgWidth),\n\/\/ https:\/\/github.com\/processing\/processing4\/blob\/9de5e3643e3d17f604d4d533d07c7bccc70e91fd\/core\/src\/processing\/core\/PShapeSVG.java#L93\n\nPShape titleSVG;\n\npublic void setup() {\n  \n  \/\/ PShapeSVG\n  \/\/ https:\/\/processing.github.io\/processing-javadocs\/core\/processing\/core\/PShapeSVG.html\n  \n  titleSVG = loadShape(\"title_normal.svg\"); \n  \/\/ titleSVG.rotate(0.2);\n  \/\/ titleSVG.scale()\n  \/\/ titleSVG = createShape(RECT, 0, 0, 80, 80);\n  \n  \n  \n  \n  \/\/ layers?\n  for (int z=0;z&lt;titleSVG.getChildCount();z++) {\n      PShape child =  titleSVG.getChild(z);\n      println( z+\". layer:\"+child+\"   \" );\n      \/\/ ok child\n          for (int zz=0;zz&lt;child.getChildCount();zz++) {\n          PShape childchild = child.getChild(zz);\n           \n           println( \" \"+zz+\". kind: \"+childchild.getKind());\n           println( \" \"+zz+\". children \"+childchild.getChildCount());\n           \n           \/\/ SVG - lines ins params\n           float&#91;] arrF = childchild.getParams();\n             if (arrF!=null) {\n             println( \"   \"+zz+\". element \"+arrF.length);\n             for (int r=0;r&lt;arrF.length;r++) {\n               println( \"   \"+zz+\". element \"+r+\".param:  \"+arrF&#91;r]);\n                 \n             }\n           }\n           \n           \/\/ type ...\n           \/\/ works\n          \/*\n           float len  = 100;\n            childchild = createShape(); \/\/initialize the PShape object\n            childchild.beginShape(); \/\/starts a vertex shape\n            childchild.fill(200, 100, 100 );      \/\/ blue, HSB\n            childchild.vertex( 0, 0 );               \/\/point origin\n            childchild.vertex( len  *.4, 0 );          \/\/point(40,0)\n            childchild.vertex( len  *.6, len *.6 );    \/\/point(60,60);\n            childchild.vertex( 0, len *.4 );         \/\/point(0,40);\n            childchild.vertex( 0, 0 );              \/\/last point\n            childchild.endShape(CLOSE);             \/\/end shape\n          *\/\n              \n           \/\/ now the vertices ... \n           for (int ct=0;ct&lt;childchild.getVertexCount();ct++) {\n             PVector pv = childchild.getVertex(ct);\n             println(\"   \"+ct+\": \"+pv.x+\"\/\"+pv.y);\n             \n           }\n           \n        }\n       \n\n            \n  }\n  \n\n  \n  size(400,400);\n\n}\n\n\n\npublic void draw() {\n \n background(255);\n \n  line(50,50,50,50);\n  fill(0,0,0);\n  \/\/ shapeMode(CENTER);\n  \/\/ titleSVG.rotate(10);\n  titleSVG.enableStyle();\n  shape(titleSVG,50,50);\n  \n    PShape childA =  titleSVG.getChild(\"a\");\n   if (childA!=null) {\n     \n     shape(childA,10,10);      \n  } else {\n     println(\"sorry not found!\"); \n  }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Die neueren Plotter wie der benutzte AxiDraw verf\u00fcgen \u00fcber ein sehr eingeschr\u00e4nktes Plotter-Command-Repertoir &#8211; es gibt de facto fast nur &#8222;Line&#8220; und wenige andere Primitive. Vermutlich entf\u00e4llt sogar eine eingebaute Schrift. Man kann also nicht einfach einen Text schnell setzen. All das was damals in den 60\/70er Jahren eingebaut war in Plottern, das prozessiert heute [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4872","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4872"}],"version-history":[{"count":3,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4872\/revisions"}],"predecessor-version":[{"id":4876,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/4872\/revisions\/4876"}],"wp:attachment":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}