Я разрабатываю редактор, который должен использовать формы SVG для создания диаграмм.
Чтобы открыть и отобразить SVG, я использую librsvg, который на самом деле довольно хорош, но полезен только для рендеринга SVG, а не для их редактирования.
Я хотел бы получить доступ к свойствам фигуры и изменить их значения (то есть ширину, размер).
Я использую Cairo, чтобы нарисовать их на экране, но я не хочу использовать функцию масштабирования Cairo, потому что это не то же самое, что изменение размера фигур.
Я использую C ++ Builder XE3 на Win32.
Кто-нибудь знает хорошую библиотеку C / C ++, которую я мог бы использовать для этого?
Спасибо за вашу помощь.
Функция масштабирования Каира масштабирует всю систему координат, но вы можете использовать ее для отдельной фигуры, если сначала переведите ее в начало координат; и если вы ограничите эти изменения парой сохранения / восстановления, это повлияет только на рисование, выполненное в пределах этого промежутка. Сброс матрицы перед штриховкой позволяет изменить размер чертежа без изменения ширины штриха (поочередно вы можете отрегулировать штрих-ширину на 1 / коэффициент масштабирования).
cairo_matrix_t m;
cairo_get_matrix(cr, &m);
cairo_save(cr);
cairo_translate(shape_x, shape_y);
cairo_scale(shape_w, shape_h);
//cairo_move_to(cr, x, y); //perform the actual drawing
//cairo_line_to(cr, x, y);
//cairo_closepath(cr);
cairo_set_matrix(cr, &m);
cairo_stroke(cr);
cairo_restore(cr);
И если сбросить матрицу в явном виде, как это, вам больше не нужно сохранять / восстанавливать (преобразование и масштабирование не влияют ни на что, кроме матрицы, и обводка сбрасывает путь).
Других решений пока нет …