If in the file Font.js in the function createPath
value glyph.o
ends with text "m {number} {number} z "
(e.g. "m 167 878 z "
) then in the file ShapePath.js in the function isPointInsidePolygon
occurs this error:
This happens, for example, when I use character "脰" of font Calibri.
In the file ShapePath.js in the function toShapes
this code:
} else {
newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
should be changed to this code:
} else if ( tmpPoints.length ) {
newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
Can you create a jsfiddle?
I've checked out your fiddle but I don't think the suggested change is appropriate. We should clarify instead why THREE.Font
creates an empty sub path.
Does a definition of "m {number} {number} z "
actually makes sense? Could this be a problem in the font generator?
The JSON file used in jsfiddle was generated using generator http://gero3.github.io/facetype.js/ and using TTF file downloaded from https://www.fontmirror.com/calibri.
I have replaced all texts "m {number} {number} z "
with text "z"
and now there is no error and the character "脰" seems to be fine: https://jsfiddle.net/blizzard_mindfloat/6smn8heb/2
@gero3 Do you mind having a look at this? It would be good to know why "m {number} {number} z"
exists in the JSON (and what's its purpose).
Closing for now. The issue can be reopened if it's proven that facetype.js
works as intended.