Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: 5. Margin: Alignment: Custom #20

Closed
zvezdochiot opened this issue Jan 2, 2024 · 14 comments
Closed

feature: 5. Margin: Alignment: Custom #20

zvezdochiot opened this issue Jan 2, 2024 · 14 comments
Assignees
Labels
caution Important complete Performed enhancement New feature or request help wanted Extra attention is needed

Comments

@zvezdochiot
Copy link
Member

Hi @plzombie , @noobie-iv .

Не получается добавить выравнивание "Custom" (на базе "Scaling", но ручное задание масштабного коэффициента через дополнительный, отключаемый в других выравниваниях QDoubleSpinBox). То тут, то там запарываюсь наглухо. Ежели сможете подсобить, то буду очень рад. С этим выравниванием система масштабирования STEX станет завершённой. Такие вот дела.

@zvezdochiot zvezdochiot self-assigned this Jan 2, 2024
@zvezdochiot zvezdochiot added enhancement New feature or request help wanted Extra attention is needed labels Jan 2, 2024
@noobie-iv
Copy link
Member

Могу только поддержать морально. Гоп! Гоп!

У меня в планах зависнуть в отладчике, чтобы наконец понять, как там эта многопоточная лапша вообще работает. Ранее попытки понять это вычитыванием кода полностью провалились; веселые факты типа "знаете ли вы, что вызов updateSortOptions приводит к обновлению кеша картинок" просто выносят мозг.

Без понимания я не встрою никакой новый функционал, потому что он всю программу цепляет. Если разберусь - смогу и в STEX чем-то помочь.

А то, что я для STEX делал - это мелочи, на которые случайно натолкнулся в процессе поисков в STU.

@zvezdochiot
Copy link
Member Author

zvezdochiot commented Jul 21, 2024

Hi @plzombie , @noobie-iv .

Ещё раз обращаюсь к вам. Я опять в ступоре.

Для расчётов полей используется следующий базовый размер:

qreal const pagewidthx = m_innerRect.width();
qreal const pagewidthy = m_innerRect.height() * 0.7071067811865475244;
qreal const pagewidth = (pagewidthx < pagewidthy) ? pagewidthy : pagewidthx;

qreal pagewidth = m_innerRect.width();
qreal pagewidthheight = m_innerRect.height() * 0.7071067811865475244;
pagewidth = (pagewidth < pagewidthheight) ? pagewidthheight : pagewidth;

double const scalex = rect.width();
double const scaley = rect.height() * 0.7071067811865475244;
double const scale = (scalex < scaley) ? scaley : scalex;

double const scalex = size.width();
double const scaley = size.height() * 0.7071067811865475244;
double const scale = (scalex < scaley) ? scaley : scalex;

Как мне "вывести на табло" и иметь возможность поменять ручками этот базовый размер? Мои попытки приводят к дичи: либо всё ломается, либо нишиша не работает.

PS: Сейчас сканирую книгу, на которой просто необходим постоянный базовый размер для полей независимо от размеров контента. То бишь нужны одинаковые поля при сильно различающемся контенте.

@noobie-iv
Copy link
Member

Я пока даже свою пародию до ума не довел, не говоря про вмешательство в полноценный СТ. Кеш превьюшек оказался сам многопоточным, внутре многопоточного тейлора. И они таки друг другу сигналят. Чтобы добавлять что-то в интерфейс, надо наизусть знать, в каких местах добавлять эти сигналы, и в каких местах ловить. Иначе что-то обязательно не законтачит. В больших программах, типа автокада, на такие темы здоровенные разделы справки с примерами приводят. А тут надо все такие места выискивать. На такие вопросы я смогу отвечать только после доделки своего микро-ст до минимально рабочего состояния.

@zvezdochiot
Copy link
Member Author

zvezdochiot commented Jul 28, 2024

Hi @plzombie , @noobie-iv , @trufanov-nok .

Кажется я "нащупал", почему так неудобно работать с полями в STEX.

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

То есть, равность полей будет основана на том, что внешние аоля будут базироваться на:


В то время как индивидуальные поля - это то, что реализовано сейчас, только дефолтное значение поменяется на 0. У обложек же индивидуальные поля будут равны внешним со знаком минус.

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

PS: Сейчас мне для получения одинаковых полей приходится каждый раз патчить текущую версию STEX и прописывать какое то (обычно 3000) значение в качестве базового размера для полей в местах из предыдущего моего поста.

@zvezdochiot
Copy link
Member Author

Модифицировал RelativeMargins под базовый размер: cb736af

Дальше модифицировать GUI: CheckBox+QDoubleSpinBox. При выключенном CheckBox базовый обнуляется и QDoubleSpinBox выключается, при включенном CheckBox QDoubleSpinBox включается и базовый приравнивается к getBaseRect.

Но! Как всё это сконектить, чтобы всё логично работало? Вот совсем не хочется колхоза.

@noobie-iv
Copy link
Member

Могу разве что скинуть своего недоделыша. В нем базовую логику легче увидеть, чем в трех мегабайтах stex. Сейчас там единственный работающий фильтр - поворот, но две кнопки право/лево честно работают. А там уж по образцу все эти коннекты подключить можно будет.

Не работают превьюшки (коплю силы на борьбу с многопоточным кешем). Но, надеюсь, в кеш не надо логику от UI добавлять, и этого огрызка хватит. И под линухом оно не собирается, что-то в подключениях не находит, что-то в проекте cmake подкрутить надо. Но код и так можно посмотреть.

@zvezdochiot
Copy link
Member Author

zvezdochiot commented Aug 11, 2024

Спасибо @noobie-iv .

Сделай репу scantailor-base или phototailor-base и сбрасывай туда. Я уверен, что именно это позволит разрулить всю эту кашу и нормализвать код. Потому как к этапам можно заранее предьявить следующие требования:

  1. они должны быть автоматизированы (как и сейчас)
  2. они должны быть легко параметризированы (как этап "Вывод", не сложнее), т.е. вся автоматика должна легко управляться.
  3. они дожны быть проще и легко сортироваться (предусмотреть сортировку во всех этапах).
  4. каждый этап должен иметь одну (ОДНУ! не несколько!!!) основную процедуру.

Отсюда этапы должны стать менее напряжными, но их дожно быть больше:

  1. Ориентация
  2. Разрезка
  3. Фильтры
  4. Искажения (с заданием порога и его параметров для маски)
  5. Обрезка (с заданием порога и его параметров для маски)
  6. Масштабирование (включая возможность исполдьзования biakima и RIS)
  7. Выравнивание (поля, желательно двойные: внутренние - для выравнивания, внешние - для обрамления)
  8. Макетирование (зоны с применением и Line и XSpline, а ежели постараться и Akima spline)
  9. Чистка (удаление пятен разными методиками с выделением зонами)
  10. Вывод (вывод метрик "качества" результата)

Может быть что-то ещё (так что предусмотреть встраивание этапов). Такие вот дела.

@noobie-iv
Copy link
Member

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

Так что я просто тут архив прикреплю, вдруг поможет:
mvst.zip

@zvezdochiot
Copy link
Member Author

@noobie-iv say:

вдруг поможет

Чего то не попёрло:

src/IntrusivePtr.h:51:43: error: invalid use of incomplete type ‘class Orientation::Settings’
   51 | inline void intrusive_unref(T &obj) { obj.unref(); }
      |                                       ~~~~^~~~~

@noobie-iv
Copy link
Member

Я интересу ради пробовал собирать под линуксом, но у меня даже компиляция не прошла. Что-то надо в cmake править - Qt не находит автосгенерированные заголовки, и прекомпилированные заголовки тоже глючат. Если надо просто посмотреть вживую, что там есть - вот скомпилированный под винду, может, в эмуляторе заработает:
install.zip
Qt-DLL я там занулил для уменьшения размера, их оригиналы можно из наших релизов забрать, от Qt5.

Если не заработает - придется время терять на разборки с cmake в линухах, прежде чем смогу что-то починить.

@noobie-iv
Copy link
Member

Вот поправленная версия, собирается под Debian12, если вдруг в отладчике захочется погонять:
mvst.zip

@zvezdochiot
Copy link
Member Author

Спсб, @noobie-iv .

На этот раз скомпилилось. Будем посмотреть.

@zvezdochiot
Copy link
Member Author

zvezdochiot commented Aug 22, 2024

Разделить поля на внешнии и внутренние оказалось просто: текущии поля полностью стали внутренними + к ним присобачились внешние.: c270e0f

❓ Как присобачить к этому хозяйству GUI? Чтобы внешние поля были не константой (0.08), а регулировались?

PS: Мне бы помочь намутить ExtraOptions.h и ExtraOptions.cpp и законектить всё это хозяйство. Так то я себя уже исчерпал.

@zvezdochiot
Copy link
Member Author

"С горем пополам" разрулил ситуёвину: скопипастил с Alignment.

Теперь выравнивание стало ну очень удобно и страницы не обязаны иметь один размер. Такие вот дела. 👍

@zvezdochiot zvezdochiot added the complete Performed label Aug 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
caution Important complete Performed enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants