Стартовая страница › Форумы › Разработка и интеграция › Работа с SVG на мнемосхемах
- В этой теме 51 ответ, 3 участника, последнее обновление 4 года назад сделано manjey73.
-
АвторСообщения
-
21.03.2020 в 19:44 #15405manjey73Участник
да, пи… очередная пересборка собрала все без ошибок. Вчера ругался, что не может перенести два файла css…. чудеса блин…
21.03.2020 в 23:43 #15408MikhailМодераторгде часть кода, которая создает поля на русском ?
Там есть отдельный метод для перевода. Посмотрите, как в XML-словарях прописаны названия свойств по-русски. Пока можно пропустить этот момент и вернуться к нему, когда в целом всё что нужно заработает.
И не могу найти описание функционала библиотеки Svg.dll ?
Библиотеку нашёл где-то в интернете. Нужно найти её первоисточник.
22.03.2020 в 09:13 #15409manjey73УчастникНу вы же команды библиотеки как то изучали ? В ней есть некоторые вещи, как раз подходящие под идею, но не могу найти описания что куда, не все понятно.
Самый главный вопрос. propGrid можно формировать динамически ?, если чего-то нет. не добавлять пункты, если есть, добавлять. Пока в ScadaSchemeCommon вижу только статический способ. Есть где-нибудь пример динамики, если он возможен ?
Ну или как сделать динамику именно к этому propGrid ?
Перед этой строкой можно обрабатывать XML файл картинки на предмет добавления полей в propGrid но нужна динамика.
И пока не нашел место, где можно эти поля будет редактировать, и чтобы повторялась команда отрисовки в окне preview и дальнейшая вставка в схему.
Это вот тогда получится малой кровью сделать то, что я хочу. С PropertyGrid никогда еще не работал, так что помощь не помешает
- Этот ответ был изменен 4 года назад от manjey73.
22.03.2020 в 19:06 #15413manjey73УчастникВ первую очередь интересует как в PropertyGrid добавить словарь <string, string> или иной (если я одну из переменных буду конвертировать например <string, bool>)
В виде выпадающего списка. И в идеале обернуть в Список….
Нужна возможность редактирования в PropertyGrid
- Этот ответ был изменен 4 года назад от manjey73.
23.03.2020 в 09:16 #15419manjey73УчастникТакс. через Svg.dll можно прочитать дополнительные Атрибуты дочернего объекта xml в виде Dictionary<string, string>, соответственно настройки возможности редактировать те или иные параметры будут сделаны через дополнительные атрибуты (что и планировалось с самого начала).
Так как SVG документ может быть достаточно сложным по количеству вложений, нужен LIST (Список), в котором будут индексы вложений для внутреннего пользования, а так же список параметров в виде Dictionary для PropertyGrid.
Данные параметры должны появляться в PropertyGrid согласно Списку как отдельные раскрывающиеся (или не раскрывающиеся поля).
Нужен пример как этого добиться в PropertyGrid и собственно как это прикрутить в ScadaSchemeCommon.
То есть в PropertyGrid должны попадать Dictionary для редактирования, а положение в List как разделитель меню…
- Этот ответ был изменен 4 года назад от manjey73.
23.03.2020 в 10:35 #15423MikhailМодераторСамый главный вопрос. propGrid можно формировать динамически?
Нет. Там идея такая — Property Grid строится автоматически на основе структуры Вашего класса, который передан гриду на редактирование. То есть надо заранее все свойства прописать в классе. Однако, если что-то нужно редактировать динамически, то эту часть можно выделить как отдельное свойство класса и прописать для него свой собственный редактор — Windows форму.
23.03.2020 в 10:36 #15424MikhailМодераторВ первую очередь интересует как в PropertyGrid добавить словарь
В виде выпадающего списка.Словарь — это будет свойство того класса, который Вы редактируете. Автоматически подключится некий стандартный редактор словаря, а если нужен свой более удобный, потребуется создать свою форму.
Постарайтесь найти что-то похожее среди существующих компонентов схем.
23.03.2020 в 10:38 #15425MikhailМодераторЕсли речь идёт конкретно о редактировании SVG, то заведите свой класс-обертку. Он будет свойством компонента схемы. И сделайте свой редактор для SVG, который будет вызываться из Property Grid.
23.03.2020 в 11:40 #15426manjey73УчастникНапример у меня из известного.
Словарь с дополнительными Атрибутами — по нему будет обработка тех или иных свойств SVG файла
Словарь со списком возможных параметров для изменения, который попадет в список PropertyGrid, если я правильно понял, то там все string, и если например у мена параметр = «» то в свойствах PropertyGrid он не отобразится, если имеет значение то отобразится
И собственно Список этих словарей, если список из 2-х словарей, то в PropertyGrid должно появиться 2 меню для изменения параметров, если 5 то 5, если 1 то одно меню.23.03.2020 в 19:42 #15429MikhailМодераторТут лучше 1 раз попробовать и посмотреть, как словарь будет отображаться в Property Grid.
24.03.2020 в 09:09 #15434manjey73Участник24.03.2020 в 09:15 #15437manjey73УчастникТакой вариант бы устроил, но скорее всего надо иначе делать. Пока не до этого немного.
Пытаюсь разобраться с Svg.dll что она может. Смог вытянуть ID, но вот вытянуть ту же заливку (Fill) не могу.
Плюс Svg.dll не умеет удалять Элементы XML.Есть какие-нибудь наработки и примеры кода по обработке неизвестных XML, из известного только некоторый набор Атрибутов, как существующих для svg так и те, которые буду добавлять. Состав, уровень вложенности, имена элементов заранее неизвестны.
И у меня не получается открыть XML в memory stream и сохранить туда же или в новый, чтобы svg.dll открывала уже из другого источника…
24.03.2020 в 10:44 #15440manjey73УчастникМихаил, можете глянуть как в Svg.dll записывать заливку (fill) или цвет линии и так далее.
Код из библиотеки, SvgElement
public abstract class SvgElement : ISvgElement, ISvgTransformable, ICloneable, ISvgNode
[SvgAttribute("fill", true)] public virtual SvgPaintServer Fill { get { return ((SvgPaintServer)this.Attributes["fill"]) ?? SvgColourServer.NotSet; } set { this.Attributes["fill"] = value; } }
Когда читаем заливку из секции svg файла
var paintserv = SvgDocument.Children[1].Children[0].Children[0].Fill.ToString();я получаю например Lime или #ddffdd Но как запихнуть обратно в этот SvgPaintServer цвет из строки не понимаю… Подсказок особых нет….
24.03.2020 в 13:16 #15444manjey73УчастникРазобрался как поменять цвет заливки. Теперь вот понять как сделать интеграцию в ScadaSchemeEditor ???
Смену заливки применил прямо в коде (лишнее пока удалил для простоты)
using (MemoryStream memStream = new MemoryStream(Image.Data)) { SvgDocument svgDocument = SvgDocument.Open<SvgDocument>(memStream); // загружается svg файл svgDocument.Children[1].Children[0].Children[0].Fill = new SvgColourServer(Color.Red) ; // меняю заливку на красную // если пишу в файл svgDocument.Write("путь_файла"); // сохраняется с цветом новой заливки source = svgDocument.Draw(); // и перед эти надо изменить данные в потоке - КАК ?
Как изменить код, чтобы при редактировании потом через настройки в source или сам svgDocument был новым ????
24.03.2020 в 17:19 #15446MikhailМодераторПо поводу библиотеки Svg.dll ничего не могу сказать, т.к. использовал её для очень узкой задачи — отображения картинки.
В .NET есть стандартные классы для обработки произвольного XML. Как здесь удобнее, использовать библиотеку или стандартные классы — нужно пробовать. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.