Посоветуйте идею алгоритма для многоколоночной верстки

  • Автор темы Автор темы Author
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Так вся логика - во внешнем приложении. А когда все уже продумано - то оно будет управлять InDesign'ом через COM
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author сказал(а):
Так вся логика - во внешнем приложении. А когда все уже продумано - то оно будет управлять InDesign'ом через COM
А не все ли равно где логика?
Или плугин не может управлять ИнДизайном?
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author сказал(а):
Ну вот. Зеленое - обычные объявление, Желто-оранжевое - широкие объявления. Оранжевое в них - родная колонка. Серое - пустое пока что место. Красное - на это место надо вставить объявление шириной в две колонки.
вам надо сначала расставить самые широкие оъявления и только потом ставить узкие. а не расставлять их все подряд.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Strizh сказал(а):
А не все ли равно где логика?
Или плугин не может управлять ИнДизайном?
Ну чтобы писать плагин, если можно обойтись без него - это надо совсем конченым извращенцем быть, потому как ихний плагинский SDK - просто жуть и тьма. Жертва многоплатформенности. Мне .NET ближе и роднее.

ermouth сказал(а):
вам надо сначала расставить самые широкие оъявления и только потом ставить узкие. а не расставлять их все подряд.
При запихивании узких между широких - широкие надо сдвигать, они будут перетекать из колонки в колонку и т.д. (Напомню, что порядок сортировки нарушать нельзя.). Так вот, корректно смоделировать все их перетекания, обтекание одних другими и т.д. - как раз и есть самое сложное.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

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

2. Хоть .НЕТ, хоть ЖС, даже трети не сделаешь того, что можно плагином.

Author сказал(а):
При запихивании узких между широких - широкие надо сдвигать, они будут перетекать из колонки в колонку и т.д. (Напомню, что порядок сортировки нарушать нельзя.). Так вот, корректно смоделировать все их перетекания, обтекание одних другими и т.д. - как раз и есть самое сложное.
Ты ищешь того, кто тебе решит поставленную задачу, просто так?
Так таких думаю не найдешь, читай матчасть, тем более о том, что читать тебе уже сказали.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки


Не по теме:
"конченный извращенец" тот кто макет такой придумал :lol:
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author

Author сказал(а):
Specialist
Индюк задачу решает, но только на половину.
Для вставки "широкого" объявления надо, чтобы в "чужих" колонках, на которые заходит наше объявление текст раздвинулся. В этом проблема.
Если вставлять "широкое" объявление как инлайн-объект, то текст раздвигается только в колонках, которые идут после текущей. А в предыдущих колонках ничего не меняется, т.е. "широкое" объявление закрывает часть текста.
Если вставлять его как обычный объект, то текст, конечно, раздвигается везде. Но объявление получается непривязанным к тексту.

А заякоренные объекты?
Надо проверить как у них там обтекание работает...
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author сказал(а):
Напомню, что порядок сортировки нарушать нельзя.).
Полагаю, при таком ограничении задача в общем случае неразрешима :)
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

ermouth сказал(а):
Полагаю, при таком ограничении задача в общем случае неразрешима :)

Гм... Я бы сказал, что она может быть неразрешима в некотором (большом, видимо) числе частных случаев...
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Я бы посоветовал сделать несколько (десятков) раз руками такую верстку запоминая (записывая) последовательность действий при расстановке. Вот вам и алгоритм.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Specialist сказал(а):
Гм... Я бы сказал, что она может быть неразрешима в некотором (большом, видимо) числе частных случаев...
задача, для которой нет общего универсального решения, и называется "задача в общем случае неразрешима" :)
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

ermouth сказал(а):
задача, для которой нет общего универсального решения, и называется "задача в общем случае неразрешима" :)


Не по теме:
Ну, строго говоря, да, хотя это вопрос терминологии.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Вот уже работающее решение "неразрешимой в общем случае" задачи.
Чтобы его запустить надо .NET Framework 2.0. Если у кого-то нет, а качать не охота, то вот три частных решения (результата работы демки).

Комментарии:
Сначала программа генерирует случайную последовательность
лотов разной ширины, имитируя реальную ситуацию.
Отбирается столько лотов, сколько сможет войти на страницу
по площади (т.е. без зазоров).
Широкие лоты смещаются по горизонтали, и все лоты разбиваются на
колонки так, чтобы влезло наибольшее число лотов.
Результат вы видите. Программа пишет статус - сколько не влезло,
сколько размещено (чем больше не влезло - тем больше на странице
пустого места). Иногда пишет APPLICATION ERROR, по идее это должно
значить, что комбинации не существует, но на данный момент - это
чаще всего ошибка алгоритма (буду дорабатывать). Впрочем, ошибки
случаются достаточно редко.
По пользованию - нажимаете кнопку "Пуск", и если не было ошибки
можно нажать "Изобразить", программа нарисует найденную комбинацию.
Не смотрите на непроработанный интерфейс - дело не в нем, главное -
логика. То, что в окошке пропадает изображение - нормально, мне просто
даже не хотелось на этом останавливаться. Если нужно - нажмите кнопку
"Изобразить" еще раз.
По цветам: синий - лоты одиночной ширины, розовый + оливковый -
широкие лоты. Розовым обозначена их "родная" колонка, оливковым -
те, что они перекрывают. Цифры - порядковые номера.

В данном виде программа делает полный перебор вариантов, но у нее
много параметров. Можно, например, задать "достаточный" уровень,
т.е. сказать, что если найден вариант, заполняющий 90% площади
страницы, то можно дальше не искать. При большом количестве объявлений
(100 - 200) это может иметь смысл (т.к. время поиска увеличивается
экспоненциально).
Сейчас задано, что "большие" объявления встречаются достаточно часто.
Если сделать, чтобы они встречались реже (я думаю, в реальном журнале
так и будет), то страница будет заполняться лучше. Это тоже параметр.
Также можно задавать количество колонок, высоту страницы, максимальную
ширину объявления и т.д. Скоро сделаю вторую версию этого демо, где
все эти параметры можно будет регулировать из интерфейса.

По поводу пустого места: в этом демо оно просто остается пустым
(для того, чтобы виднее было, сколько его осталось и где),
но в программе верстки "синие" объявления будут растягиваться по
высоте, чтобы заполнить все пространство. Думаю, это естественно.

Если интересно - могу подробнее описать алгоритм. Совсем бесплано :)
Strizh сказал(а):
1. Я тут помочь пытаюсь, а в ответ
2. Хоть .НЕТ, хоть ЖС, даже трети не сделаешь того, что можно плагином.

Ты ищешь того, кто тебе решит поставленную задачу, просто так?
Так таких думаю не найдешь, читай матчасть, тем более о том, что читать тебе уже сказали.
Не стоит кипятиться. Просто я имел в виду, что в ДАННОМ случае создание плагина просто добавляет мороки. Здесь нет ничего, что нельзя бы было решить "извне".
 

Вложения

  • Makeup.zip
    Makeup.zip
    9.1 КБ · Просм.: 234
  • demo1.gif
    demo1.gif
    5.5 КБ · Просм.: 541
  • demo2.gif
    demo2.gif
    5.9 КБ · Просм.: 846
  • demo3.gif
    demo3.gif
    5.4 КБ · Просм.: 915
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author сказал(а):
Вот уже работающее решение "неразрешимой в общем случае" задачи.
ерунда это, демонстрашка, а никакое не решение.

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

не нашел нумерации на оливковых блоках, кстати.
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

ermouth сказал(а):
не нашел нумерации на оливковых блоках, кстати.
Оликовые, насколько я понял, это хвосты розовых...


Как исключения обрабатываются? (не влезло или влезло но не так)
 
Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Glutton сказал(а):
Оликовые, насколько я понял, это хвосты розовых...
Верно.

Glutton сказал(а):
Как исключения обрабатываются? (не влезло или влезло но не так)
Вообще, по идее, исключений типа "не влезло" быть не должно. Если лоты не шине страницы, то в любом случае что-то должно влезть.
А вот насчет "не так" - можно и просигнализировать. Не так - значит осталось много свободного места. Его можно заполнить рекламой или как-то еще вручную. Это уже выходит за рамки данной темы.
Сейчас движок еще не до конца настроен, поэтому иногда вылетает Application error, а совсем изредка - кое что похуже. Но все исправимо.
Кстати, вот версия с расширенным интерфейсом (внутренности те же).

ermouth сказал(а):
ерунда это, демонстрашка, а никакое не решение.

за газетную полосу, сверстанную как на образцах, я бы верстальщику его скрипт...эээ...немножко поругал бы
Это решение. По крайней мере, моего заказчика это устраивает. Может быть, Вы невнимательно читали постановку задачи. Такую верстку придумал не я, моя задача - ее автоматизировать.
 

Вложения

Ответ: Посоветуйте идею алгоритма для многоколоночной верстки

Author сказал(а):
Это решение. По крайней мере, моего заказчика это устраивает. Может быть, Вы невнимательно читали постановку задачи. Такую верстку придумал не я, моя задача - ее автоматизировать.
да не вопрос :) хорошо, что не я ваш заказчик.
 
Статус
Закрыто для дальнейших ответов.