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.
 
 
 
misc/pmwiki_recipes/wikibrainmapping.php

109 lines
4.2 KiB

<?php
## give a visual representation of pages and group
$RecipeInfo['WikiBrainMapping']['Version'] = '2011-05-15';
Markup('WikiBrainMapping', 'directives', '/\\(:WikiBrainMapping:\\)/e', Keep(WikiBrainMapping()));
function WikiBrainMapping(){
$sourcepagename = $_SERVER["REQUEST_URI"];
// apply changes done to graphprocessing.php to insure proper URI format
$sourcepagename = preg_replace("/(.*)\?.*/","$1",$sourcepagename);
$sourcename = preg_replace("/.*[\.\/](.*)/","$1",$sourcepagename);
$sourcegroup = preg_replace("/\/(.*)[\/\.].*/","$1",$sourcepagename);
if ($sourcegroup == "/"){
$sourcegroup = "Main";
# consider instead filling the pages array with
## groups names
## "neighboors" wikis from InterWiki page
# list page, remove pagenames, sort|uniq ... then what? maybe whole different process
}
global $FarmD, $WikiTitle, $ScriptUrl;
$processingpath = '/pub/libraries/processing.js';
$processingfile = "/pub/visualization/wikibrainmapping.pjs";
$processinglib = "<script src=\"$processingpath\" type=\"text/javascript\"></script>";
# eventually modify to use a dedicated folder
# generate a file per page
if (!file_exists($FarmD.$processingfile))
if (!touch($FarmD.$processingfile))
print "Creation of the processing file fails, check write permissions for pmWiki and $processingfile.";
# cached version (to comment during tests)
#if ( (time() - filemtime($FarmD.$processingfile)) < 3600 ) return $processinglib.'<canvas data-src="'.$processingfile.'" width="'.$canvaswidth.'" height="'.$canvasheight.'"></canvas>';
$canvaswidth=500;
$canvasheight=300;
$groupname = $sourcegroup;
$pages = ListPages("/$groupname\./e");
$pages = MatchPageNames($pages,array('-*.*RecentChanges,-*.GroupFooter,-*.GroupHeader'));
$pagesnum = count($pages);
$processingsetupcode = "
PShape s;
void setup(){
frameRate(15);
size($canvaswidth,$canvasheight);
strokeWeight(2);
PFont font;
font = loadFont(\"FFScala-32.vlw\");
textFont(font);
sright = loadShape(\"/pub/illustrations/flat_brain_right.svg\");
sleft = loadShape(\"/pub/illustrations/flat_brain_left.svg\");
smooth();
";
$processingdrawcode .= "
void draw(){
background(255);
";
$processingdrawcode .= "shape(sright,300, 400);";
$processingdrawcode .= "shape(sleft,200, 400);";
$processingdrawcode .= "fill(0,0,255,255);\n";
$processingdrawcode .= "text(\"flattened left hemisphere\",300,10);\n;";
$processingdrawcode .= "text(\"flattened right hemisphere\",100,10);\n;";
$target_area["x"] = 150;
$target_area["y"] = 100;
$target_area["width"] = 50;
$target_area["height"] = 60;
//replace with actual list of pages
for ($pagen=0;$pagen<10;$pagen++){
$x = rand($target_area["x"],$target_area["x"]+$target_area["width"]);
$y = rand($target_area["y"],$target_area["y"]+$target_area["height"]);
//draw cercle in the area
$radius = 3;
$processingdrawcode .= "fill(255,0,0,100);ellipse($x,$y,$radius,$radius);\n";
//draw diagonal line of edits
$linelength=10;
$processingdrawcode .= "strokeWeight(1); line($x,$y,$x+$linelength,$y-$linelength);\n";
//replace with actual list of edits
$maxdiff = rand(0,10);
for ($diff=0;$diff<$maxdiff;$diff++){
//draw points on the line of edits with smaller stroke weight
$diff_pos = rand(0,$linelength);
$processingdrawcode .= "strokeWeight(2); point($x+$diff_pos,$y-$diff_pos);\n";
}
}
$processingdrawcode .= "fill(255,0,0,255);\n";
$processingdrawcode .= "text(\"Note that currently points are randomly generated\\nand randomly positionned on a designated area.\\nNo mapping has been done between function and position.\\nGyri and sulci are also not represented.\",10,200);\n;";
$processingsetupcode .= " }";
$processingdrawcode .= " }";
$result = $processinglib.'<canvas data-src="'.$processingfile.'" width="'.$canvaswidth.'" height="'.$canvasheight.'"></canvas>';
$write_result = file_put_contents($FarmD.$processingfile,$processingsetupcode.$processingdrawcode);
if (!$write_result)
if (strlen($processingcode)>0)
print "Creation of the feed file fails, check write permissions for pmWiki and $processingfile.";
else
print "No code to generate, did you correctly generate your Processing code?";
// ----------------------- return the processed result -----------------------
return $result;
}
?>