ScadaAdminWebJP

Просмотр 15 сообщений - с 1 по 15 (из 23 всего)
  • Автор
    Сообщения
  • #43718
    JurasskPark
    Участник

    Михаил, мы тут с manjey73 спорим.
    Он говорит, чтобы я писал версию веб Администратора и делал ее, и что Михаил, что-то посмотрим и возьмет оттуда и сделает по своему, я говорю, никакие наработки Михаил из ней брать к себе не будет.
    Кто прав?

    Что по вашему не хватает в редакторе мнеомосхем?
    Видео ниже.
    https://jurasskpark.ru/files/forum/scadaadminwebjp_001.mp4

    #43719
    manjey73
    Участник

    Злыдень подстаучий 🤣

    #43720
    manjey73
    Участник

    не буду сильно кидаться тапками 🙂

    1. Сворачивание меню панели свойств 5+, кстати IDE сохраняет свое состояние при закрытии и повторном открытии?

    2. Спрячь Views при создании папок, файлов. и так понятно, что оно туда должно попасть.

    3. Настройку толщины рамки элемента можно сделать? ну толстая сильно рамка эта зеленая, как по мне.

    4. Растягивания круглых объектов, например кнопки. в Inkscape есть функция построения круга, элипса, так вот, при зажатии кнопки Ctrl будет строиться круг (circle), без будет ellipse — полезная штука.

    5. победил редактирование вершин линий после вставки? з.ы. сделай настройку на примитивы, чтобы можно было отключить(спрятать) «лишние», я вот не уверен, что я хоть раз буду рисовать на мнемосхемах звездочки 🙂

    6. Выделение рамкой 5+… ну я тебе коротко написал, как в CAD программах рамка работает. Непосредственно в AutoCAD например несколько режимов. Если строишь рамку СЛЕВА-НАПРАВО, то выделятся только элементы, полностью попавшие внутрь рамки. Если СПРАВА-НАЛЕВО — выделится все элементы, которые пересекла граница рамки.
    Ну и уже не говорю про выделение петлей так же слева-направо или справа-налево.
    Да просто за рамку уже тебе генеральские погоны 🙂

    еще чего-то хотел написать, вспомню, добавлю.

    #43721
    manjey73
    Участник

    и что Михаил, что-то посмотрим и возьмет оттуда и сделает по своему

    речь была о том, что Михаил добавляет тот или иной функционал по мере запросов и когда руки дойдут.

    ну, из того что помню сам:

    1. добавлен механизм остановки по массивам байт и показано примером как это делать.
    2. добавлены строковые теги и связь Коммуникатора по ним, раньше со строгой индексацией при передаче тегов были мучения.

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

    • Ответ изменён 3 дня, 16 часов назад пользователем manjey73.
    #43723
    manjey73
    Участник

    В Редакторе не хватает масштабирования мнемосхемы, без затрагивания окна браузера и соответственно панели свойств.

    Сейчас все окно браузера масштабируется.

    а, и добавлю.

    7. «Выравнивание по объекту» — есть такая штука, когда выбрав такой режим, надо тыкнуть на объект, по которому выровнять выбранные, ну там по умолчанию наверное левый край указанного объекта используется.
    По умолчанию если просто выровнять по левому краю, выравнивание происходит либо по последнему, либо по первому, либо по самому левому. Такое во многих прогах происходит.

    #43724
    manjey73
    Участник

    8. Группирование компонентов в дереве. (пусть виртуальное, пофигу).
    Скрытие с глаз группы или компонента (скрыть/показать) при работе с мнемосхемой.

    Сейчас это можно сделать, используя Панель и ручками писать в css — hidden

    з.ы. можно посмотреть в Inkscape как это происходит.

    • Ответ изменён 3 дня, 16 часов назад пользователем manjey73.
    #43726
    manjey73
    Участник

    добавление к п.8 — Блокировка Группы. То есть мы можем ее видеть, но выбрать элементы нельзя, они не копируются и т.д.

    #43727
    manjey73
    Участник

    9. еще есть «волшебный ввод» :). В общем в CAD мы строим линию, указываем мышкой первую точку, а потом просто вводим на цифровой клавиатуре ее длину и мы уже в конечной точке линии, продолжаем рисовать дальше.

    К этому еще есть функция делать это строго горизонтально или вертикально (Орто, сидит на функционально кнопке F8 в AutoCAD) — если режим включен, а мы мышкой повели вправо не идеально горизонтально и указали длину или даже просто мышкой ставим вторую точку, она будет строго по оси Х, если повели мышку вверх или вниз, то точка будет срого по оси Y. Действует еще для угла 45 градусов. То есть режим фиксирует 8 направлений.

    Без Орто, в любую точку ставится вторая.

    Если нужно задать длину и при этом угол, то есть кнопочка Tab для «волшебного ввода» например поставили первую точку, вбили длину, нажали Tab -> переход на ввод угла, вбили угол — Enter.

    #43728
    manjey73
    Участник

    Окно быстрого ввода

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

    Ну соответственно для разных фигур разные значения, например для круга это по умолчанию Радиус, для прямоугольника по умолчанию не помню, кажется площадь, можно переключиться на длину сторон тапнув Tab. То есть вбили одну длину, надали Tab, первая длина это одна сторона, потом вводим длину второй стороны и Enter.

    з.ы. в общем как-то так при построении примитивов, это просто ускоряет процесс рисования.

    • Ответ изменён 3 дня, 15 часов назад пользователем manjey73.
    #43731
    Mikhail
    Модератор

    Видео очень интересное. Это уже почти готовый Веб-администратор?
    Каким образом реализовали создание линий на мнемосхемах?

    Михаил, что-то посмотрим и возьмет оттуда и сделает по своему, я говорю, никакие наработки Михаил из ней брать к себе не будет

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

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

    Может быть, кто-то разработает мобильное приложение для оператора — мне кажется, был бы интерес к нему.

    На текущий момент моя позиция заключается в том, что полностью уходить от десктопа в веб нужно в следующем поколении Rapid SCADA, но это не скоро.

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

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

    Это не касается полностью другого приложения, такого как Веб-администратор.

    • Ответ изменён 3 дня, 9 часов назад пользователем Mikhail.
    #43734
    manjey73
    Участник

    имхо, я вообще противник web администратора. но то, что показывал мне @JurasskPark очень даже 🙂

    текущий Администратор имеет ряд неудобств, в основном из-за отсутствия хорошей каскадной фильтрации и возможности одним Ctrl+V вставить одинаковые значения в выбранные ячейки столбца.
    А это приводит к тупому жмаканью «Вставить» на куче ячеек. Потому что не всегда можно взять и заменить через Ctrl+F, когда уже многие вещи прописаны.

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

    #43745
    JurasskPark
    Участник

    Каким образом реализовали создание линий на мнемосхемах?

    
    $("#divComponents").on("click", ".component-item", function () {
        let typeName = $(this).data("type-name");
    
        if (typeName === "ShapeLine" || typeName === "ShapePolyline") {
            startLongAction(createDrawLineAction(typeName));
        } else {
            startLongAction(LongAction.add(typeName));
        }
    });
    
    function handleLineDrawingMouseDown(event, parentID, relativeElem) {
        if (event.button !== 0) {
            return;
        }
    
        continueLineDrawing(parentID, getMimicPoint(event, relativeElem, true), event.shiftKey);
        event.preventDefault();
    }
    
    function continueLineDrawing(parentID, point, constrain) {
        if (longAction?.actionType !== DRAW_LINE_ACTION) {
            return;
        }
    
        longAction.parentID ??= parentID;
        longAction.points.push(constrain ? constrainLinePoint(point, longAction.points) : { x: point.x, y: point.y });
        updateLineDrawingPreview(point, false);
    
        if (longAction.componentTypeName === "ShapeLine" && longAction.points.length >= 2) {
            finishLineDrawing();
        }
    }
    
    $("#divMimicWrapper").on("contextmenu", function (event) {
        if (longAction?.actionType === DRAW_LINE_ACTION) {
            event.preventDefault();
            finishOrCancelLineDrawing();
        }
    });
    
    function finishOrCancelLineDrawing() {
        if (longAction.points.length >= 2) {
            finishLineDrawing();
        } else {
            pointer();
        }
    }
    
    function ensureLineDrawingPreview() {
        lineDrawingPreviewElem = $(
            "<div class='line-drawing-preview'>" +
            "<svg class='line-drawing-preview-svg'></svg>" +
            "<div class='line-drawing-preview-points'></div>" +
            "</div>");
        mimicElem.append(lineDrawingPreviewElem);
    }
    
    function updateLineDrawingPreview(currentPoint, constrain) {
        let points = longAction.points.map(point => ({ x: point.x, y: point.y }));
    
        if (currentPoint) {
            points.push({ x: currentPoint.x, y: currentPoint.y });
        }
    
        let pointAttr = points.map(point => <code>${point.x},${point.y}</code>).join(" ");
        let svgElem = lineDrawingPreviewElem.children("svg");
        svgElem.empty();
    
        $("<polyline class='line-drawing-preview-path'></polyline>")
            .attr("points", pointAttr)
            .appendTo(svgElem);
    }
    
    function addDrawnLineComponent(typeName, parentID, points) {
        let factory = mimic.getComponentFactory(typeName);
        let component = factory.createComponent();
        let bounds = getPointBounds(points);
    
        component.id = getNextComponentID();
        component.setLocation(bounds.left, bounds.top);
        component.properties.size.width = bounds.width;
        component.properties.size.height = bounds.height;
    
        if (typeName === "ShapeLine") {
            let p1 = pointToPercent(points[0], bounds);
            let p2 = pointToPercent(points[1], bounds);
    
            component.properties.orientation = rs.mimic.ShapeLineOrientation.CUSTOM;
            component.properties.x1 = p1.x;
            component.properties.y1 = p1.y;
            component.properties.x2 = p2.x;
            component.properties.y2 = p2.y;
        } else {
            component.properties.pointCount = points.length;
            component.properties.points = formatPercentPoints(points, bounds);
        }
    
        mimic.addComponent(component, parent, null, bounds.left, bounds.top);
        unitedRenderer.createComponentDom(component);
        structTree.addComponent(component);
        selectComponent(component);
        pushChanges(Change.addComponent(component));
    }
    
    function pointToPercent(point, bounds) {
        return {
            x: Math.round((point.x - bounds.left) / bounds.width * 10000) / 100,
            y: Math.round((point.y - bounds.top) / bounds.height * 10000) / 100
        };
    }
    
    #43746
    JurasskPark
    Участник

    1. Сворачивание панели свойств + сохранение состояния: — Да
    2. Спрятать Views при создании папок/файлов: — Да
    3. Настройка толщины зеленой рамки/точек: — Да
    4. Ctrl для круга/квадрата при растягивании: — Нет. Круг и квадрат и так пропорции сохраняют, в прямоугольнике и овале нет сохранения пропорций.
    5. Редактирование вершин линий после вставки: — Позже
    Скрытие лишних примитивов: — Нет
    6. CAD-рамка слева-направо / справа-налево: — Нет
    Выделение петлей: — Нет
    7. Выравнивание по указанному объекту: — Да
    8. Виртуальные группы в дереве: — Скорее всего это будет отдельный плагин Group
    Скрыть/показать компонент в редакторе: — Нет
    Сохранять это состояние вне .mim: — Нет
    9. Орто/F8 на 0/45/90 градусов: — Нет
    Ввод длины с клавиатуры: — Нет
    Длина + Tab + угол: — Нет

    #43747
    manjey73
    Участник

    Сказал, как отрезал 🤣
    А 5, скрытие ненужных примитивов, почему нет? Через какой-то маааленький конфиг файлик. Или этот компонент типа сам все это лепит?

Просмотр 15 сообщений - с 1 по 15 (из 23 всего)
  • Для ответа в этой теме необходимо авторизоваться.