LINUX.ORG.RU

inkscape, округление размеров до целых пикселей

 , ,


1

2

Подскажите где в inkscape настроить округление всех значений до ровных пикселей. То есть чтобы не было цифр типа 212.0422782, а было 212, без всяких нулей после запятой.


Ответ на: комментарий от Vsevolod-linuxoid

Оперирует, только как и написал ТС не считает их неделимыми. Это условная единица длины. И эти тысячные доли пикселя действительно раздражают.

По сути нужна привязка «всего» к сетке с шагом в один пиксель. Но это тогда отменяет любую другую привязку и в целом неудобно.

Глобальная опция действительно была бы полезна.

alpha ★★★★★ ()

Ты ведь в курсе, что SVG - это частный случай XML? Читать-писать его на чём-нибудь умеешь? На том же и «числа» округли.
И да, там могут оказаться не пиксели, а, скажем, миллиметры.

blexey ★★★★ ()
Последнее исправление: blexey (всего исправлений: 1)

svg – это, по-сути, текст. Следовательно с ним легко работать как с текстом.

Я как-то правил векторную карту для сайта. Там использовалась библиотека jVectorMap. Я посмотрел, там внутри обычный svg (m0923 […] 9857z). Я вставил код из библиотеки в inkscape: редактор XML > выделенная фигура > d > paste > Установить. Поправил карту, скопировал и вставил обратно код, но он сглючил. Видимо из-за 6 знаков после запятой. Я быстро накатал скрипт на vbs, который тупо отрезал лишние 3 цифры. В принципе, это даже grep-выражением можно сделать, но я не силён и заморачиваться не захотел.

rechnick ★★ ()
Ответ на: комментарий от alpha

Это вроде автору писали и он лучше знает, что ему надо. Или ты и есть автор?

А идея с сеткой и привязками глубоко порочна. Вектор на то и вектор, что сохраняет точность при масштабировании. Поэтому закладывается 6 цифр после запятой. И это не так уж много по-сути. А твоё предложение убьёт масштабирование векторной графики на корню. Будет что-то близкое к растру. В том смысле, что это нельзя будет уменьшить в десять раз, а потом увеличить в сто.

rechnick ★★ ()
Ответ на: комментарий от rechnick

Мне не нужен красивый SVG, нахрен мне это сдалось? Мне нужно чтобы в интерфейсе не было лишних нулей, и случайных дробных чисел.

В Figma же всё пиксельное, что мешает то же сделать в inkscape?

devorg ()
Ответ на: комментарий от alpha

пиксельная сетка неудобна, особенно с привязкой... я помню с этими дробями мучался ещё в Adobe Flash, там тоже никак нельзя было сделать ровные числа... извращение

devorg ()
Ответ на: комментарий от rechnick

А твоё предложение убьёт масштабирование векторной графики на корню.

Ты что-то не так понял. Привязка к пиксельной сетке делается при рисовании, при размещении объектов, а не при отображении.

Масштабирование готового рисунка - это отлично. Но если я рисую например диаграмму, то мне не надо в ней блока ширины 121.097 и высоты 327.128, мне надо 120 на 330. Для простоты упихивания многих блоков в картинку и для простоты вычисления расстояний между ними и т.п.

alpha ★★★★★ ()

Есть лайфхак: если ты что-то делаешь в масштабе 100%, то все изменения будут кратны одному пикселу. Не очень удобно, но как уж есть. То есть, чтобы создать объект с размерами и положением кратными пикселу, надо нажать 1, создать объект и вернуться в исходный масштаб, нажав ё. Это работает также и с импортированием растра и изменением размеров объектов или правкой кривых.

Передвигать объекты и узелки по пикселам можно стрелочками на клавиатуре, но по-дефолту там за раз на 2 пиксела проскакивает — это можно изменить в настройках.

Чтобы быстро округлить значение в поле ввода, надо скопировать в primary буфер иксов (другими словами — просто где-то выделить) нецифровой символ и, при наведение на поле ввода, сразу же справа за точкой нажать на колесо, тем самым вставив туда этот символ. При смене фокуса дробная часть отбросится.

Ещё есть привязки, но они в Инкскейпе убогие и бывает что он падает, если они включены.

Расширение Extensions/Modify Path/PixelSnap, вроде бы, должно делать то, что ты хочешь, но у меня оно почему-то не выравнивает вертикальную координату.

anonymous ()
Ответ на: комментарий от blexey

Читать-писать его на чём-нибудь умеешь? На том же и «числа» округли.

И да, там могут оказаться не пиксели, а, скажем, миллиметры.

Давай сначала сам попробуй так округлить.

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

anonymous ()
Ответ на: комментарий от anonymous

Давай сначала сам попробуй так округлить.

Я не представляю зачем мне это надо, но если понадобится, мне проще всего преобразовать SVG документ.
Это автор собрался всё округлять, включая трансформации, чтобы не видеть дробей нигде в UI.

Ничего бесконечного для обработки в SVG нет. Но я уверен, что она не нужна и даже вредна. Например, когда поворачиваешь объект на круглые 45°, sin|cos которого равен совсем не круглому (√2)/2, координаты объекта, внезапно, становятся тоже совсем не круглыми, что уже обязано отобразиться в UI.

То, что целые координаты вдруг становятся не целыми при простом мышевозюкании даже не взирая на snapping - мне кажется, это проблема выбранного масштаба и точности позиционирования курсора.

А если так уж приспичило всё округлять до целых, да ещё и пикселей - бросайте векторные форматы возитесь с растровыми. Они пиксели любят... с aliasing'ом.

blexey ★★★★ ()
Ответ на: комментарий от blexey

Я не представляю зачем мне это надо

Ну я так сразу и понял, что ты теоретик. Попробуй как-нибудь на досуге отрендерить или просто в том же Инкскейпе внимательно посмотреть в 100% масштабе два варианта закрашенного прямоугольника без обводки: один — привязанный к пиксельной сетке, а другой — нарисованный помимо неё или просто смещённый на полпиксела.

когда поворачиваешь объект на круглые 45°, sin|cos которого равен совсем не круглому (√2)/2, координаты объекта, внезапно, становятся тоже совсем не круглыми

А если ещё раз повернуть на те же 45°, то координаты снова могут стать круглыми. Хотя синус-косинус по прежнему останутся равными 1/√2. Удивительное дело! Приметно та же история с масштабированием и скосом.

anonymous ()
Ответ на: комментарий от anonymous

Ну я так сразу и понял, что ты теоретик.

Как раз наоборот. Мне вполне понятна причина, почему всюду в полях атрибутов тип чисел выбран float с шестью десятичными знаками и меня, в отличие от «теоретиков-перфекционистов», это устраивает.

Выбирай масштаб кратный 100%, всюду изначально используй snap и целые пиксели вместо всяких мм и их дробей, учитывай поправки на толщину рамок, и не используй дрожащие руки и курсор для трансформаций (вводи все точные параметры вручную), тогда и будет «счастье» даже при поворотах на ±45° и обратно.

blexey ★★★★ ()
Ответ на: комментарий от alpha

А в чём вопрос-то? Целые значения нужно не настраивать где-то, а вводить в поля атрибутов ручками. И тогда при прочих условиях выше они будут оставаться целыми, пока какая-нибудь из выполненных трансформаций их не захочет делить на части.

Это всё удобно и весело для небольшого числа простых объектов. Но когда начинаешь воевать с большим количеством сложных объектов, то на дроби проще или забить или округлять/обрезать их в XML фрагментах любым доступным способом, начиная с топорика sed 's/\(\.[0-9][0-9]\)[0-9]*/\1/g'.

blexey ★★★★ ()
Ответ на: комментарий от devorg

В Figma же всё пиксельное, что мешает то же сделать в inkscape?

Программтсты тупы и некомпетентны в применении написанных их программ.
Тебе надо внимательно прочитать нарисанное @rechnick, понять в чём у него ошибка(а она есть), понять в чём ошибка у тебя(тоже есть) и после испрпаления своей ошибки и раскрвтия и признания @rechnick его ошибки уже правильно внести своё предложение.

torvn77 ★★★★★ ()