Работа с SVG на мнемосхемах

Стартовая страница Форумы Разработка и интеграция Работа с SVG на мнемосхемах

Просмотр 15 сообщений - с 16 по 30 (из 52 всего)
  • Автор
    Сообщения
  • #15405
    manjey73
    Участник

    да, пи… очередная пересборка собрала все без ошибок. Вчера ругался, что не может перенести два файла css…. чудеса блин…

    #15408
    Mikhail
    Модератор

    где часть кода, которая создает поля на русском ?

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

    И не могу найти описание функционала библиотеки Svg.dll ?

    Библиотеку нашёл где-то в интернете. Нужно найти её первоисточник.

    #15409
    manjey73
    Участник

    Ну вы же команды библиотеки как то изучали ? В ней есть некоторые вещи, как раз подходящие под идею, но не могу найти описания что куда, не все понятно.

    Самый главный вопрос. propGrid можно формировать динамически ?, если чего-то нет. не добавлять пункты, если есть, добавлять. Пока в ScadaSchemeCommon вижу только статический способ. Есть где-нибудь пример динамики, если он возможен ?

    Ну или как сделать динамику именно к этому propGrid ?

    source = svgDocument.Draw();

    Перед этой строкой можно обрабатывать XML файл картинки на предмет добавления полей в propGrid но нужна динамика.

    И пока не нашел место, где можно эти поля будет редактировать, и чтобы повторялась команда отрисовки в окне preview и дальнейшая вставка в схему.

    Это вот тогда получится малой кровью сделать то, что я хочу. С PropertyGrid никогда еще не работал, так что помощь не помешает

    • Этот ответ был изменен 4 года назад от manjey73.
    #15413
    manjey73
    Участник

    В первую очередь интересует как в PropertyGrid добавить словарь <string, string> или иной (если я одну из переменных буду конвертировать например <string, bool>)

    В виде выпадающего списка. И в идеале обернуть в Список….

    Нужна возможность редактирования в PropertyGrid

    • Этот ответ был изменен 4 года назад от manjey73.
    #15419
    manjey73
    Участник

    Такс. через Svg.dll можно прочитать дополнительные Атрибуты дочернего объекта xml в виде Dictionary<string, string>, соответственно настройки возможности редактировать те или иные параметры будут сделаны через дополнительные атрибуты (что и планировалось с самого начала).

    Так как SVG документ может быть достаточно сложным по количеству вложений, нужен LIST (Список), в котором будут индексы вложений для внутреннего пользования, а так же список параметров в виде Dictionary для PropertyGrid.

    Данные параметры должны появляться в PropertyGrid согласно Списку как отдельные раскрывающиеся (или не раскрывающиеся поля).

    Нужен пример как этого добиться в PropertyGrid и собственно как это прикрутить в ScadaSchemeCommon.

    То есть в PropertyGrid должны попадать Dictionary для редактирования, а положение в List как разделитель меню…

    • Этот ответ был изменен 4 года назад от manjey73.
    #15423
    Mikhail
    Модератор

    Самый главный вопрос. propGrid можно формировать динамически?

    Нет. Там идея такая — Property Grid строится автоматически на основе структуры Вашего класса, который передан гриду на редактирование. То есть надо заранее все свойства прописать в классе. Однако, если что-то нужно редактировать динамически, то эту часть можно выделить как отдельное свойство класса и прописать для него свой собственный редактор — Windows форму.

    #15424
    Mikhail
    Модератор

    В первую очередь интересует как в PropertyGrid добавить словарь
    В виде выпадающего списка.

    Словарь — это будет свойство того класса, который Вы редактируете. Автоматически подключится некий стандартный редактор словаря, а если нужен свой более удобный, потребуется создать свою форму.

    Постарайтесь найти что-то похожее среди существующих компонентов схем.

    #15425
    Mikhail
    Модератор

    Если речь идёт конкретно о редактировании SVG, то заведите свой класс-обертку. Он будет свойством компонента схемы. И сделайте свой редактор для SVG, который будет вызываться из Property Grid.

    #15426
    manjey73
    Участник

    Например у меня из известного.
    Словарь с дополнительными Атрибутами — по нему будет обработка тех или иных свойств SVG файла
    Словарь со списком возможных параметров для изменения, который попадет в список PropertyGrid, если я правильно понял, то там все string, и если например у мена параметр = «» то в свойствах PropertyGrid он не отобразится, если имеет значение то отобразится
    И собственно Список этих словарей, если список из 2-х словарей, то в PropertyGrid должно появиться 2 меню для изменения параметров, если 5 то 5, если 1 то одно меню.

    #15429
    Mikhail
    Модератор

    Тут лучше 1 раз попробовать и посмотреть, как словарь будет отображаться в Property Grid.

    #15434
    manjey73
    Участник

    dict

    Если просто вставить Словарь в Property, то вот так. Редактировать не получается, видимо не все так просто…

    • Этот ответ был изменен 4 года назад от manjey73.
    • Этот ответ был изменен 4 года назад от manjey73.
    #15437
    manjey73
    Участник

    Такой вариант бы устроил, но скорее всего надо иначе делать. Пока не до этого немного.
    Пытаюсь разобраться с Svg.dll что она может. Смог вытянуть ID, но вот вытянуть ту же заливку (Fill) не могу.
    Плюс Svg.dll не умеет удалять Элементы XML.

    Есть какие-нибудь наработки и примеры кода по обработке неизвестных XML, из известного только некоторый набор Атрибутов, как существующих для svg так и те, которые буду добавлять. Состав, уровень вложенности, имена элементов заранее неизвестны.

    И у меня не получается открыть XML в memory stream и сохранить туда же или в новый, чтобы svg.dll открывала уже из другого источника…

    #15440
    manjey73
    Участник

    Михаил, можете глянуть как в 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 цвет из строки не понимаю… Подсказок особых нет….

    #15444
    manjey73
    Участник

    Разобрался как поменять цвет заливки. Теперь вот понять как сделать интеграцию в 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 был новым ????

    #15446
    Mikhail
    Модератор

    По поводу библиотеки Svg.dll ничего не могу сказать, т.к. использовал её для очень узкой задачи — отображения картинки.
    В .NET есть стандартные классы для обработки произвольного XML. Как здесь удобнее, использовать библиотеку или стандартные классы — нужно пробовать.

Просмотр 15 сообщений - с 16 по 30 (из 52 всего)
  • Вы должны авторизироваться для ответа в этой теме.