написать впереди
В этом документе реализуется проектирование и редактирование топологии сети в режиме онлайн на основе Jtopo, который может создавать сложные сети и выполнять различные операции с сетями и устройствами, а также обеспечивать сериализацию и десериализацию топологии.
Для удобства демонстрации я развернул статическое DEMO на github,портал
Что касается доступа к проекту, из-за чтения удаленных данных json будут ограничения безопасности при открытии его напрямую с помощью браузера.Пожалуйста, поместите проект в tomcat, чтобы начать доступ, или напрямую откройте проект с помощью idea/webstorm и щелкните правой кнопкой мыши, чтобы открыть его, как показано на следующем рисунке:
Полный код выложен на гитхабе отдельно:GitHub.com/ProcessFan/Я…
Введение в функцию
Базовую операцию можно увидеть на изображении GIF ниже. Перетащите узел из панели значков слева в область редактирования. Щелкните значок узла и отпустите кнопку мыши, чтобы перетащить соединение. Нажмите на целевой узел, чтобы завершить операцию подключения. Вы можете выбрать различные способы подключения в левой колонке.
Этот пользовательский интерфейс редактора топологии представляет собой макет, созданный easyUI, а редактирование и подключение узлов основаны на вторичной разработке jTopo. jTopo предоставляет Stage, Scene, Node, Container и поддержку анимации, а API относительно прост в использовании. Недостатком является отсутствие документации, но мы можем ознакомиться с DEMO, предоставленным автором. После знакомства с его исходным кодом он очень удобен для вторичной разработки. Также легко реализовать некоторые анимации. Поскольку это живопись на основе холста, каждое изменение и операция фактически перерисовывают весь холст. Есть еще много областей, которые можно оптимизировать. На самом деле, я думаю, что D3.js также может достичь такого эффекта, но недавняя работа не была изучена на бэкэнде.
Так как извлекается только front-end часть проекта персональной разработки, эта часть может разрабатываться только по лицензии компании.Если интересно, можете зайти на мой гитхаб и клонировать для ознакомления. Основная часть кода находится в editor.js, который обеспечивает поддержку методов, таких как перетаскивание узлов, соединение узлов и макет. Это начальная версия. Код грубый, просто для справки.
Вот несколько важных моментов для объяснения:
Код инициализации редактора
|
|
Мы можем вызвать JTopo.Stage(canvas) для инициализации области рисования, а затем мы можем использовать API для операций с узлами и анимацией. Иерархия JSON всего объекта рисования выглядит следующим образом:
|
|
Обычно нам нужен только один объект сцены для управления всеми объектами.Конечно, если вы хотите добиться более сложного управления сгруппированными объектами, вы можете создать несколько объектов сцены для раздельного управления. В то же время мы можем вызвать метод JTopo.createStageFromJson(stageJson, canvas) для повторного рендеринга сохраненной топологии.
Перетаскивание узлов
Перетаскивание узлов реализовано с помощью родного перетаскивания H5.
|
|
Передача подложки и необходимые параметры ondragStart обратный вызов Способ обратного вызова, для создания нового узла, а затем узлов JTOPO.NODE () Структура, соответствующие свойства, добавленные затем на сцену Scene.add (Node) в OnDrop. Почему добавить к выполнению операций на интерфейсе вы можете увидеть новый узел этого?
Причина в том, что у Stage есть свойствоframes, которое определяет частоту перерисовки холста 1000/кадров.
свойство фреймов
Установите количество кадров в секунду, воспроизводимых на текущей сцене
По умолчанию: 24
Кадры могут быть равны 0, что означает отсутствие автоматического рисования, вызванного пользователем, вручную вызвавшим метод paint() объекта Stage.
Если меньше 0, значит: будут перерисовываться только клавиатура и мышь, например: stage.frames = -24.
Рамки изображения по умолчанию до 24 кадров, то есть каждые 1000/24 мс перерисовывают экран. Фон обновить код следующим образом:
|
|
setTimeout вызовет следующую функцию перерисовки:
|
|
Пара рисования обходит все видимые объекты и по очереди вызывает метод перерисовки.
соединение узла
Используемый здесь метод соединения состоит в том, чтобы нажать левую кнопку мыши на узле, а затем отпустить мышь, чтобы создать соединение.Начальной точкой является выбранный узел, а конечная точка динамически обновляется при движении мыши. Поэтому, если вы отпустите кнопку мыши на одном узле, вы увидите линию соединения, которая перемещается вместе с мышью. Затем нажмите и отпустите левую кнопку на узле, чтобы завершить соединение между двумя узлами. Эффект следующий:
Часть кода реализована следующим образом:
jTopo поддерживает общие ответвления, полилинии, кривые и т. д., но длину углов полилиний теперь можно указать только во время создания. Для динамического создания второй точки требуется вторичное развитие. код показывает, как показано ниже:
|
|
О сохранении и загрузке топологий
Поскольку эта статья представляет собой только внешний интерфейс редактора топологии, внутренняя часть не имеет открытого исходного кода из-за коммерческих ограничений. А так как общий проект очень большой, его нелегко отделить от него по отдельности. На самом деле, если мы знаем логику загрузки и сохранения топологии, реализовать операцию сериализации структуры топологии очень просто. Следующее занимает место, чтобы сосредоточиться на обсуждении:
Загрузите существующую карту топологии
Теперь у нас есть топология, которая представляет собой топологию, отображаемую адресом текстового портала, и ее сериализованная структура выглядит следующим образом:
|
|
Нам просто нужно позвонить на страницу
editor.loadTopology("images/backimg.png",'${templateId}','${topologyId}',"");
Среди них templateIdtemplateId и topologyId — это идентификаторы первичных ключей, связанные с таблицей внутренних данных, которые здесь можно игнорировать. Код метода loadTopology выглядит следующим образом:
|
|
Сначала отправить запрос на получение данных в формате json, а затем обработать структуру ответа.Логика реальной реализации загрузки топологии находится в методе editor.init. Здесь, если обнаруживается, что запрошенная топология не существует, будет создана пустая карта топологии.
Давайте посмотрим на логику реализации init:
|
|
Код здесь выглядит сложным, но на самом деле он делает две вещи:
1) Постройте базовую сцену и сцену
2) Вызовите JTopo.createStageFromJson(stageJson, canvas) для создания структуры всей топологии
3) Инициализируйте и отредактируйте его меню
4) Окончательно привязать логику обработки различных событий
5) Наконец, если при получении данных топологии возникает ошибка, создается пустая топология.
|
|
На этом загрузка топологии и задача создания пустой топологии завершены.
сохранить топологию
Для сохранения топологии стоит сериализовать отредактированную топологию в json, а затем загрузить ее на сервер для сохранения базы данных. По самой простой идее нам нужно следовать Node, Scene, Stage. Итак, мы определяем следующие объекты сущности:
Node
|
|
Scene
|
|
Stage
|
|
После определения этих трех структур у нас есть отношение сравнения между передней и задней частями. Тогда посмотрите, как сериализуется интерфейс?
Сначала посмотрите, как внешний интерфейс сериализует топологию:
|
|
- Чтобы удалить линии линейки (горизонтальные и вертикальные линии, отображаемые в области редактирования), этот объект нужно удалить из нашей структуры, а также вызвать метод clearRuleLines.
- Объекты узлов в области контейнеров необходимо извлечь, поскольку эти узлы уже включены при вызове сериализации, поэтому вам нужно только связать их идентификаторы узлов с контейнерами при их сохранении.
- Если поддерживается иерархическое редактирование, также сохраните количество уровней в текущей топологии.
- Вызовите editor.stage.toJson(), чтобы получить структуру всей топологии.
- замена json, просто для уменьшения передаваемых данных
- Наконец, отправьте проанализированный json в фоновую обработку.
Остальные подробности здесь повторяться не будут.Этот проект требует от читателей базовых знаний, таких как H5, easyUI, jTopo, canvas и JSON. Что касается jTopo, вы можете быстро начать работу, просто взглянув на DEMO и несколько API, предоставленных его автором. Лучший способ научиться — разбить различные трассировки отладки в точках останова и посмотреть, как все это работает. Демонстрируемое здесь редактирование топологии также является очень простым и неполным примером.На самом деле, есть еще много вещей, которые можно настроить, например соединения и методы подключения, которые можно настроить дополнительно.
end
Использованная литература:
www.jtopo.com/
Woohoo J easy UI.com/document ATI…