Added Uroko adjustment function for the pressure between horizontal
authorKoichi KAMICHI <kamichi@fonts.jp>
Thu, 12 Aug 2010 14:11:13 +0000 (14:11 +0000)
committerKoichi KAMICHI <kamichi@fonts.jp>
Thu, 12 Aug 2010 14:11:13 +0000 (14:11 +0000)
strokes.

engine/kage.js

index 2d6d2ad..69fbee5 100755 (executable)
@@ -3,7 +3,7 @@ function Kage(size){
   function makeGlyph(polygons, buhin){ // void\r
     var glyphData = this.kBuhin.search(buhin);\r
     if(glyphData != ""){\r
-      this.drawStrokesArray(polygons, this.adjustKirikuchi(this.adjustUroko(this.adjustKakato(this.adjustTate(this.adjustMage(this.getEachStrokes(glyphData)))))));\r
+      this.drawStrokesArray(polygons, this.adjustKirikuchi(this.adjustUroko2(this.adjustUroko(this.adjustKakato(this.adjustTate(this.adjustMage(this.getEachStrokes(glyphData))))))));\r
     }\r
   }\r
   Kage.prototype.makeGlyph = makeGlyph;\r
@@ -92,6 +92,32 @@ function Kage(size){
   }\r
   Kage.prototype.adjustUroko = adjustUroko;\r
   \r
+  function adjustUroko2(strokesArray){ // strokesArray\r
+    for(var i = 0; i < strokesArray.length; i++){\r
+      if(strokesArray[i][0] == 1 && strokesArray[i][2] == 0 && strokesArray[i][4] == strokesArray[i][6]){\r
+        var pressure = 0;\r
+        for(var j = 0; j < strokesArray.length; j++){\r
+          if(i != j && (\r
+             (strokesArray[j][0] == 1 && strokesArray[j][4] == strokesArray[j][6] &&\r
+              !(strokesArray[i][3] + 1 > strokesArray[j][5] || strokesArray[i][5] - 1 < strokesArray[j][3]) &&\r
+              Math.abs(strokesArray[i][4] - strokesArray[j][4]) < this.kAdjustUroko2Length) ||\r
+             (strokesArray[j][0] == 3 && strokesArray[j][6] == strokesArray[j][8] &&\r
+              !(strokesArray[i][3] + 1 > strokesArray[j][7] || strokesArray[i][5] - 1 < strokesArray[j][5]) &&\r
+              Math.abs(strokesArray[i][4] - strokesArray[j][6]) < this.kAdjustUroko2Length)\r
+             )){\r
+            pressure += Math.pow(this.kAdjustUroko2Length - Math.abs(strokesArray[i][4] - strokesArray[j][6]), 1.1);\r
+          }\r
+        }\r
+        var result = Math.min(Math.floor(pressure / this.kAdjustUroko2Length), this.kAdjustUroko2Step) * 100;\r
+        if(strokesArray[i][2] < result){\r
+          strokesArray[i][2] = strokesArray[i][2] % 100 + Math.min(Math.floor(pressure / this.kAdjustUroko2Length), this.kAdjustUroko2Step) * 100;\r
+        }\r
+      }\r
+    }\r
+    return strokesArray;\r
+  }\r
+  Kage.prototype.adjustUroko2 = adjustUroko2;\r
+  \r
   function adjustTate(strokesArray){ // strokesArray\r
     for(var i = 0; i < strokesArray.length; i++){\r
       if((strokesArray[i][0] == 1 || strokesArray[i][0] == 3 || strokesArray[i][0] == 7) && strokesArray[i][3] == strokesArray[i][5]){\r
@@ -302,6 +328,9 @@ function Kage(size){
     this.kAdjustUrokoLengthStep = 3; // number of steps\r
     this.kAdjustUrokoLine = ([22, 26, 30]); // check for crossing. corresponds to length\r
     \r
+    this.kAdjustUroko2Step = 3;\r
+    this.kAdjustUroko2Length = 40;\r
+    \r
     this.kAdjustTateStep = 4;\r
     \r
     this.kAdjustMageStep = 5;\r