2010-08-12 7 views
1

Je travaille actuellement sur un moteur de rendu qui convertit des glyphes de type freetype en polylignes pour contrôler un système de marquage laser. Le problème que j'ai est que je ne sais pas comment gérer correctement un contour commençant par un point de courbe (99,9% commence par les points de courbe!). J'ai cherché un peu plus d'informations mais je n'ai rien trouvé d'utile.comment interpréter un contour de glyphe freetype lorsque le premier point du contour est hors courbe

Merci pour votre aide

+0

mise à jour: pour résoudre le problème, j'ai essayé de fermer le contour de la façon dont j'utilise le dernier point du contour (qui est sur la courbe) comme le premier point du bezier. Le personnage rend correctement maintenant. Ce que je n'aime pas à propos de la solution, c'est que ça semble être une sorte de piratage et je ne suis pas sûr si c'est la bonne façon de le faire. – chrmue

Répondre

1

FreeType utilise trois types de points: sur la courbe, les points de contrôle du second degré (également connu sous le nom « coniques ») et des points de contrôle cubes. Les points de contrôle quadratiques sont groupés avec des points sur la courbe de chaque côté pour former les trois points nécessaires pour définir une spline de Bézier quadratique. Les points de contrôle cubiques doivent se produire par paires et sont regroupés avec des points sur la courbe de chaque côté pour constituer les quatre points nécessaires pour une spline de Bézier cubique.

Cependant, il existe une notation abrégée pour les points quadratiques seulement. Lorsque des points quadratiques apparaissent côte à côte, un point de contrôle sur la courbe est interpolé entre eux. Et il y a une autre convention, si un chemin fermé commence par un point quadratique, le dernier point du chemin est examiné, et s'il est quadratique, un point sur la courbe est interpolé entre eux, et le chemin est pris pour commencer avec ce point sur la courbe; si le dernier point n'est pas un point de contrôle quadratique, il est lui-même utilisé pour le point de départ.

Si vous voulez voir exactement comment cela est fait, veuillez regarder le code source FreeType. La fonction FT_Outline_Decompose parcourt un chemin et le convertit en une série de lignes et de courbes des deux types. Il est dans ce fichier:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftoutln.c

La partie d'un intérêt spécial commence par ce commentaire (note encore que « conic » signifie la même chose que « quadratique » dans ce contexte):

/* first point is conic control. Yes, this happens. */ 
Questions connexes