2017-01-23 42 views
2

我開發了一個功能,使在後記一個簡單的複選框,但仍似乎無法工作。 有產生矩形沒有問題,但似乎線路(使複選框的經典X)的寫作過程中拋出一個異常。nocurrentpoint例外的PostScript

/nocurrentpoint in --nocurrentpoint-- 

這是我的代碼。

/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 

有人可以解釋如何正確地做到這一點嗎? 在此先感謝。

+0

這是一個過程定義,你在哪裏調用過程?當前點(或任何其他設置當前點的命令)執行'moveto'時,'currentpoint'僅有效。在你自己設置一個之前沒有現在的問題。 (翻譯或其他轉換不會設置當前點) –

回答

3

這正是問題 - 後rectstroke叫你關閉路徑,並留下沒有起點。

您可以再次移動到那裏,將值放在堆棧上併發出moveto - 在生成檢查的其他部分的代碼中似乎至少有一個錯誤 - 並且,由於您具有四捨五入在DimChars已經,可能更容易在這些問題用rlineto

總而言之,如果按這個順序更換rectstroke後您的指示,你應該是不錯的:

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