[CDR 2017-2021] Сериализация объектов

  • Автор темы Автор темы Karatau
  • Дата начала Дата начала

Karatau

Участник
Топикстартер
Сообщения
60
Реакции
22
Здравствуйте, коллеги!
Внезапно появилась такая задача: как нарисовать сложные фигуры средствами VBA?
Например такие:
01.jpg

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

Т.е. как серилизовать объект?

Может, существует стандартная процедура для этого, и тогда задача становится элементарной, но я не смог найти такую.

Буду рад любой помощи.
 
Не пойму сакральный смысл сего действия. А не проще ли записать обьект в векторный файл который затем импортировать (возможно макросом)? И что за термин такой мудреный "серилизация"?
 
По определению:
Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт.
 
Хотелось обойтись вообще без файлов. Процедура рисовала бы нужную фигуру в нужном масштабе и нужном месте.

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

Вот такая-вот фантазия
 
Фантазия весьма специфическая. Звучит примерно так: "Я представляю себе такую программу. Выделяешь кусок растрового изображения и она в TextBox пишет C++ код. Вставляешь этот код в другую программу и она рисует то же изображение" Вы такую программу видели? Лично я нет, хотя сделать элементарно. Просто зачем шубу в трусы заправлять, так никто не делает.
 
Все весьма прагматично... Есть написанный макрос по автоматизированной верстке простых этикеток. Информация берется из экселевского файла (размер, цвет, заголовок, тексты, таблицы, и т.д.) и все отрисовывается. Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла. А хотелось (и фантазировалось), чтобы все было внутри макроса и никакие дополнительные файлы с ним не таскать. Все просто
 
Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла.
Ну так и берите, какие проблемы? Зачем множить сущности?
А хотелось (и фантазировалось), чтобы все было внутри макроса
Ну напишите инсталлятор, внутри которого будут все файлы, включая те, из которых данные читаться будут. В конце концов в конец (каломбур!) макроса дописать бинарник можно а потом читать оттуда - ничего дополнительно таскать не придется.
 
Я тоже не вполне понял. Сериализация — это превращение объекта в последовательность байтов, как правило направляемая через байтовый поток именно в файл. Вы же напротив хотите
никакие дополнительные файлы с ним не таскать

Не по теме:
Хтойта? ;)

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

В индизайне это data merge, например.
 
устроили тут осеннее обострение и стерилизацию котов
Кто насерилизовавшего в тапок кота стерилизовал? 'hmmm'
Жора, ты снова мимо кассы, человек хочет, выражаясь простым языком, декомпилятор объекта в VBA код, каким боком тут Data Merge? '%)'
 
Кто насерилизовавшего в тапок кота стерилизовал? 'hmmm'
Жора, ты снова мимо кассы, человек хочет, выражаясь простым языком, декомпилятор объекта в VBA код, каким боком тут Data Merge? '%)'
Ничего я не напутал, прочти пост 6 ещё раза три.
 
Но есть еще дополнительно различные условные знаки, которые сейчас берутся из другого кореловского файла. А хотелось (и фантазировалось), чтобы все было внутри макроса и никакие дополнительные файлы с ним не таскать
Конечно с иллюстрациями было бы понятнее - что это за знаки и куда они ставятся ...
Может ВСЕ эти различные условные знаки забить в шаблон - стартовый файл для верстки (принтмердж или что-то иное) - и сделать их поименованными и невидимыми, а средствами макроса делать их видимыми и задавать им позицию
 
Конечно с иллюстрациями было бы понятнее - что это за знаки и куда они ставятся ...
Все очень просто, есть с пол-сотни стран, в каждую из них нужно нарисовать этикетку-стикер с текстом и разными значками (для каждой страны свой набор). Сейчас они берутся из файлов, иногда возникает путаница с версиями, вариантами значков, т.к. каждый дизайнер добавляет и исправляет их по своему усмотрению.
01.jpg

Хочу, чтобы макрос их отрисовывал сам и хочу, чтобы поместить процедуру рисования значка в макрос было легко, просто поставил сгенерированную процедуру отрисовки значка, вызвал ее и макрос нарисовал в нужном месте нужным размером и цветом.
Вот такой генератор процедуры рисования данной фигуры (хм... рифма!) я сейчас и пишу.
Через пару дней выложу на тест, если это будет кому-либо интересно...
 
и разными значками (для каждой страны свой набор)
по этому признаку - страна - и активировать видимость (печатаемость) нужных значков (или слоя с набором значков) и удалением всех ненужных из стартового шаблона т.к. иначе есть опасения, что вес макета будет неприлично тяжёл
 
Все очень просто, есть с пол-сотни стран, в каждую из них нужно нарисовать этикетку-стикер с текстом и разными значками (для каждой страны свой набор). Сейчас они берутся из файлов, иногда возникает путаница с версиями, вариантами значков, т.к. каждый дизайнер добавляет и исправляет их по своему усмотрению.
Посмотреть вложение 99139
Хочу, чтобы макрос их отрисовывал сам и хочу, чтобы поместить процедуру рисования значка в макрос было легко, просто поставил сгенерированную процедуру отрисовки значка, вызвал ее и макрос нарисовал в нужном месте нужным размером и цветом.
Вот такой генератор процедуры рисования данной фигуры (хм... рифма!) я сейчас и пишу.
Через пару дней выложу на тест, если это будет кому-либо интересно...
Генератор рисования писать не надо, есть уже готовый встроенный, повторяю, называется он "запись макроса"
 
Генератор рисования писать не надо, есть уже готовый встроенный, повторяю, называется он "запись макроса"
Отлично! Получилось!
Оказывается, если у тебя уже есть готовый отрисованный объект и во время записи макроса немного подправить какую-либо точку (напр. подвигать туда-сюда):
01.jpg



То макрос запишет код, отрисовывающий нашу фигуру:

02.jpg


По-другому получить этот код не удалось, но и на этом спасибо!!! Задача решена
 
  • Спасибо
Реакции: Skvoznyak и ~RA~
Решена. Это хорошо. Все же спрошу ещё, интереса ради ...
Эта этикетка ( -и) однотипны? Или на большом листе будет сразу несколько типов этикеток разного типа?
Какие данные в приведенном примере постоянны и какие меняются? Что вы подгружаете их экселевского файла?
И ещё ... каким способом это предполагается выводить на печать? Офсет? Оперативка?
 
Решена. Это хорошо. Все же спрошу ещё, интереса ради ...
Эта этикетка ( -и) однотипны? Или на большом листе будет сразу несколько типов этикеток разного типа?
Какие данные в приведенном примере постоянны и какие меняются? Что вы подгружаете их экселевского файла?
И ещё ... каким способом это предполагается выводить на печать? Офсет? Оперативка?
Без разницы. На самом деле, PrintMerge в кореле - достаточно тупой, бессмысленный и беспощадный инструмент, чтобы макросом удобнее было.
Но смысла закидывания отрисовщика непосредственно в код я так и не разумею. Ну ладно, кривую загнать в код можно (да и то если маленькую и несложную типа лого или значка) Но существует полно объектов, которые так не закодить. Более того - банально удобнее хранить зачки в отдельных файлах. К примеру, поменяли чуть-чуть значок - что, опять перекодировать? А так файл подправил и все.