2014-09-08 4 views
0

Привет У меня есть файл postscript, который отображает изображение слева направо.Формат Postscript сверху вниз

%%% Temporary 
/Fix_long 4.2 cm def 
/Fix_short 3.2 cm def 
%%% Set Image Scale 
/SetFixScale { 2 copy gt { Fix_long Fix_short }{ Fix_short Fix_long }ifelse scale } bind def 

%%% Set put coordinate 
/SetXAdjust { 2 copy gt 
{ X_Step Fix_long sub 2 div floor } 
{ Fix_long Fix_short sub 2 div} ifelse /XAdjust exch def 
} bind def 
/YAdjust 1.0 cm def 
%%% Temporary 
/Row 4 def 
/Column 5 def 
/X_Step urx llx sub Row div floor def 
/Y_Step ury lly sub Column div floor def 
/Row_pos 0 def 
/Column_pos 1 def 
/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate 
DrawFrame 
DrawFileName 
XAdjust YAdjust translate 
Row 1 sub Row_pos eq { /Row_pos 0 def /Column_pos Column_pos 1 add def }{ /Row_pos Row_pos 1 add def } ifelse 
Column_pos Column gt { /Column_pos 1 def } if 
} bind def 

Я попытался сменить постскриптум на макет изображения сверху донизу. Я могу разместить изображение сверху донизу, но я могу только поместить его в первый столбец.

/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate 
DrawFrame 
DrawFileName 
XAdjust YAdjust translate 
Row 1 sub Row_pos eq { /Row_pos 0 def /Column_pos Column_pos 1 add def }{ /Column_pos Column_pos 1 add def } ifelse 
Column_pos Column gt { /Row_pos 1 def } if 
} bind def 

ответ

0

Не все программы заданы, например llx, lly, urx и yury не определены. SO его невозможно воспроизвести то, что вы делаете .....

Определение строк и столбцов кажется мне нечетным, так как строки increment в направлении x и столбцах уменьшаются в направлении y.

Я предполагаю, что программа работает в цикле (также не показана). На каждой итерации цикла он устанавливает позицию на странице, чтобы:

х = LLX + (X_Step * Row_pos) у = URY - (Y_Step * Column_pos)

Затем программа затем вычитает 1 из Row и сравнивается с Row_pos. Если они совпадают, мы перезапускаем строку, иначе мы добавим 1 к Row_pos. По сути, мы увеличиваем Row_pos до тех пор, пока не получим Row - 1.

Теперь, если мы сбросим строку, то мы снова установим Row_pos в 0 и добавим 1 в столбец_pos.

Наконец, мы сравниваем столбцы Column_pos и Column, если Column_pos больше, чем Column, тогда мы сбросим Column_pos на 1. Так как мы бы также сбросили Row_pos в предыдущем блоке управления, это фактически полный сброс страницы и снова запустится от начальных значений.

Ваш код начинается с проверки Row_pos на Row снова (когда вы должны проверить Column_pos на колонку). Если Row_pos не достигло строки, вы добавляете 1 в Column_pos. Затем вы проверяете Column_pos на столбец, и если его больше вы сбросите Row_pos.

Обратите внимание, что единственным способом вы можете изменить Row_pos, если Row_pos равно Роу - 1

Если это так, то вы сбрасываете Row_pos до 0. После этого его невозможно увеличивать Row_pos, если строка не является 1.

В основном ваша логика нарушена.

Вы хотите сравнить Column_pos с Column-1. Когда они равны, вы хотите установить Column_pos в 1 и увеличивать Row_pos, в противном случае вы хотите увеличить Column_pos. Наконец, если Row_pos больше Роу, вы хотите сбросить Row_pos верхний 0.

Таким образом, имея в виду thaqt я не могу проверить это, потому что не весь код присутствует, что-то вроде:

/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate 
DrawFrame 
DrawFileName 
XAdjust YAdjust translate 
Column 1 sub Column_pos eq { /Column_pos 1 def /Row_pos Row_pos 1 add def }{ /Column_pos Column_pos 1 add def } ifelse 
Row_pos Row gt { /Row_pos 0 def } if 
} bind def 
+0

Спасибо, что предоставили мне логику ... Ваш код создал 4 столбца и 4 строки ... поэтому я изменил его ... '** Столбец 1 ** sub Column_pos eq {/ Column_pos 1 def/Row_pos Row_pos 1 add def} {/ Column_pos Column_pos 1 add def} ifelse '_ ** to ** _' ** Column 0 ** sub Column_pos eq {/ Column_pos 1 def/Row_pos Row_pos 1 add def} {/ Column_pos Column_pos 1 add def} ifelse ' – user3814700

+1

Ну, я сказал, что не могу проверить это ..... Обратите внимание, что «Столбец 0 sub» - это не-op, вы можете просто заменить его с «Колонкой», вычитание 0 не имеет эффекта :-) – KenS

Смежные вопросы