Я пытаюсь преобразовать файл postscript таким образом, чтобы отдельные смежные полигоны (нарисованные в режиме fillcurve gnuplot) преобразовывались в один полигон. См. также этот связанный вопрос:
К тому же, я столкнулся со следующей проблемой.
полигоны имеют такую структуру в ps-файле
some statements
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
some statements
A1,A2.. и т.д. числа. Обработанный файл должен выглядеть так (здесь произвольный пример)
some statements
A1 A2
B1 B2
B1+A2 B5-A4
B1+A2 B5-A5
B1 B2
A1 A2
some statements
Вот, напр. B1+A2 должно быть результатом арифметической операции, то есть числом с плавающей запятой. Как можно что-то подобное в питоне? Каким-то образом мне нужно отсканировать файл, вычислить определенные строки и сохранить их (т.е. отдельные поля, как в awk)?
РЕДАКТИРОВАТЬ:
раздел из исходного файла постскриптума выглядит так
5918 4703 N
399 0 V
0 70 V
-399 0 V
0 -70 V
Z stroke
LT0
630 399 N 0 -3498 586 131 0 3490 h
1216 522 N 0 -3525 1171 204 0 3498 h
2387 699 N 0 -3557 1171 134 0 3525 h
3558 801 N 0 -3587 1171 55 0 3557 h
4729 826 N 0 -3613 1171 -20 0 3587 h
5900 780 N 0 -3624 585 -43 0 3613 h
% End plot #1
1.000 UL
LTb
0.500 UL
LTa
0.13 0.13 0.13 C 630 280 M
5855 0 V
stroke
где N и h обозначают
/N {newpath moveto} bind def
/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
в этом файле у нас есть 6 полигонов, они определены между строкой "LT0" и "% end plot #1". Строки, в которых определены многоугольники, легко сопоставить с регулярным выражением.
/^[0-9,-]+\ [0-9,-]+\ N\ [0-9]\ [0-9,-]+\ [0-9,-]+\ [0-9,-]+\ [0-9,-]+\ [0-9,-]+ h/
Я хотел бы преобразовать их во что-то вроде
newpath
630 399 moveto
1216 522 lineto
2387 699 lineto
3558 801 lineto
4729 826 lineto
5900 780 lineto
.. .. ..
.. .. ..
Поэтому новый многоугольник имеет больше строк кода, так как я хотел бы определить абсолютные координаты по точкам. замена отдельных строк не работает.