2017-01-23 3 views
2

J'ai développé une fonction pour faire une simple case à cocher dans postscript, mais cela ne semble toujours pas fonctionner. Il n'y a pas de problème pour générer le rectangle, mais il semble y avoir une exception lors de l'écriture des lignes (rendant le X classique de la case à cocher).nocurrentpoint exception PostScript

/nocurrentpoint in --nocurrentpoint-- 

Voici mon code.

/doMarkedCheckBox { 
0.1 setlinewidth 
currentpoint 
/yIniChk exch def 
/xIniChk exch def 
xIniChk 
yIniChk 
DimChars 
DimChars 
rectstroke 
xIniChk DimChars add yIniChk DimChars add lineto 
0 DimChars 0 sub moveto 
yIniChk DimChars add xIniChk lineto 
stroke 
} bind def 

Quelqu'un peut-il expliquer comment le faire correctement? Merci d'avance.

+0

Ceci est une définition de procédure, où appelez-vous la procédure? le 'currentpoint' est seulement valide quand vous avez fait' moveto' avant (ou toute autre commande qui définit le point courant). Il n'y a pas de point actuel avant d'en définir un vous-même. (La traduction ou d'autres transformations ne définissent pas le point actuel non plus) –

Répondre

3

C'est exactement le problème - après l'appel rectstroke vous fermez le chemin et est parti sans point de départ.

Vous pouvez simplement vous déplacer à nouveau, en mettant les valeurs sur la pile et en émettant moveto - il semble y avoir au moins une erreur sur le code pour générer l'autre partie de la vérification - et, puisque vous avez la taille dans DimChars déjà, il peut être plus facile d'utiliser rlineto dans ces questions.

Dans l'ensemble, si vous remplacez vos instructions après rectstroke par cette séquence, vous devez être bon:

... 
    xInitChk YInitChk moveto 
    DimChars DimChars rlineto 
    stroke 
    XInitChk YInitChk DimChars add moveto 
    DimChars DimChars neg rlineto 
    stroke 
} bind def