Я делаю довольно абстрактную систему рисования деревьев, но у меня довольно много проблем с формализацией всех функций чертежа, которые она должна иметь. Я был бы очень признателен, если бы кто-нибудь мог указать мне на вещи, чтобы прочитать об этой теме, потому что, к сожалению, мои поиски были напрасны.Рисунок пользовательского дерева
Я ищу/пытаюсь сделать метаязык для отображения деревьев. В этих деревьях каждый узел представляет собой экземпляр пользовательского объекта, который имеет пользовательское графическое представление.
Каждый объект связан с именем, графическим представлением и имеет конечное число дочерних элементов (0+), которые известны как сами объекты. Рекурсия объекта не допускается. У каждого объекта могут быть определенные пользователем параметры, которые используются для запуска условий, которые изменят их графическое представление (определенными пользователем способами). Некоторые параметры автоматически применяются, другие могут потребовать взаимодействия с пользователем («Хотелось бы, чтобы этот объект был A или B?»), Объясняя, почему деревья объектов необходимо установить.
Object
Name // The Object Name
Childs // List of Object Childs
ContextName // The Name of the Child within this context
Types // List of Objects' names. This child may be only one of them. Decided by the user during instancing.
Options // List of Options assigned to this child. Some of them may require user interaction, and apply other Options to the Child's childs.
*Priority // This is an integer which is used to decide the order in which childs are drawn.
Symbol Name // The Graphical representation of the Object
После того, как объект Дерево было инстансы, оно должно быть обращено без addictional пользовательского ввода, и это, где я имею некоторые проблемы. Инстанцирование дерева объектов присваивает каждому объекту определенное графическое представление (назовем его символом). Однако назначение не известно до начала. Различные объекты могут также иметь один и тот же символ, который может быть выполнен по-разному в зависимости от параметров объекта.
Из-за этого символы должны быть определены отдельно от объектов и должны иметь серию абстрактных механизмов, чтобы иметь возможность правильно рисовать (и назначенные дочерние элементы), следуя указанным пользователем правилам.
Каждый символ представлен изображением (или отсутствием изображения) и конечным числом вложений. Вложения - это относительные положения к координатам символа, которые указывают код чертежа, где нужно нарисовать символы дочерних объектов объекта. Каждый из них может иметь особые условия, которые необходимо использовать (например, это Приложение может использоваться только символом, имеющим конкретный вариант, или если N Символов уже нарисовано, никаких столкновений с уже нарисованными символами и т. Д. И т. Д.).
Алгоритм должен найти бесплатное приложение для каждого дочернего объекта Объекта, следуя порядку, указанному их Приоритетом. Если невозможно найти приложение для ребенка, пользователь может указать заранее правила, которые допускают некоторые автоматические повторные попытки, но если они также терпят неудачу, то весь рисунок дерева не выполняется. Некоторые из этих правил позволяют добавлять addictional дочерние символы и/или назначения ребенку Символы другим Чайлдс (что делает их внуками) и т.д.
Symbol
Name
Main Image // Image Path, Height, Width
Attachments // List of the attachments, their position, requirements and addictional infos
Fail Rules // List of actions to do if it is not possible to successfully assign each Child to an Attachment
Моя главная проблема заключается в том, что число переменных, что символ должен быть в состоянии получить доступ довольно высока. Каждый символ, который я еще раз напоминаю, должен быть определен с использованием этого метаязыка, должен иметь возможность получать доступ к его дочерним символам (а не к другим, чтобы избежать взаимоблокировок и циклических ссылок): например, пользователю может понадобиться высота и ширина Символ, равный сумме высоты и ширины всех символов ребенка, или использовать одну и ту же картинку и т. д. Это также связано с тем, что пользователь пишет правила символов независимо от окончательной структуры.
В то же время, поскольку дерево должно быть нарисовано сверху вниз, некоторые из этих сведений могут быть недоступны с самого начала и могут потребовать большой откат.
Кроме того, поскольку все это должно быть определено в метаязыке, который я должен иметь возможность формализовать и проанализировать, я должен определить, какие функции должны выполнять метаязыки, чтобы обеспечить максимальный уровень свободы для пользователя, пишущего язык, не слишком сложного (это неопределенный предел, но по существу я не хочу, чтобы Tikz был подмножеством моего метаязыка). У меня, однако, довольно много проблем, идентифицирующих их.
Как я уже говорил, я ищу информацию об этой теме и/или методах для завершения такого проекта. Как только я смогу полностью заполнить метаязык, я думаю, что у меня не будет слишком много проблем с реализацией кода, чтобы сделать все это, мои проблемы в основном теоретические.
Спасибо, но моя проблема больше всего связана с описанием формы и визуального представления дерева (путем определения каждой формы символа и вложений и связывания их в структуре с использованием деревьев объектов), а не столько от данных. – Svalorzen
В книгах Селько говорится об этой части его ссылки. Вы имеете в виду метаданные, которые используются для описания деревьев. Представление объектов не является чем-то необычным. Числа, объекты, кластеры слов, файлов, изображений и т. Д. Описаны с использованием одной и той же системы. Даже при использовании данных из базы данных вы будете использовать те же условия. Это уже язык, чтобы описать это. Это частично связано с математическим миром. Вы можете попробовать искать ссылки на основе XML, если SQL незначителен. – Stradas