Выберите путь определения символа

Мне нужно просмотреть сегменты и дескрипторы пути, который определяет SymbolItem. Это проблема, связанная с этой , но наоборот ( Я хочу, чтобы поведение отображалось на этом jsfiddle). В следующем примере я могу просмотреть ограничивающую рамку SymbolItem, но не могу выбрать сам путь, чтобы просмотреть его сегменты/дескрипторы. Что мне не хватает?

function onMouseDown(event) {
    project.activeLayer.selected = false;
    // Check whether there is something on that position already. If there isn't:
    // Add a circle centered around the position of the mouse:
    if (event.item === null) {
        var circle = new Path.Circle(new Point(0, 0), 10);
        circle.fillColor = '#' + Math.floor(Math.random() * 16777215).toString(16);
        var circleSymbol = new SymbolDefinition(circle);
        multiply(circleSymbol, event.point);
    }
    // If there is an item at that position, select the item.
    else {
        event.item.selected = true;
    }
}

function multiply(item, location) {
    for (var i = 0; i < 10; i++) {
        var next = item.place(location);
        next.position.x = next.position.x + 20 * i; 
    } 
}

person Olga Saucedo    schedule 03.01.2018    source источник
comment
Вы пытались установить path.fullySelected = true;? Затем вам нужно управлять манипуляциями с дескриптором с помощью hitResult = item.hitTest(point) и перемещать нужный сегмент/дескриптор в обработчике событий mouseMove.   -  person arthur.sw    schedule 03.01.2018
comment
@arthur.sw, Спасибо! Я попробовал fullySelected в определении, а также event.item.fullySelected = true сразу после event.item.selected = true. Кажется, это не имеет никакого значения, к сожалению. Я могу двигать ручки, я просто не могу сделать их видимыми.   -  person Olga Saucedo    schedule 03.01.2018


Ответы (1)


Использование SymbolDefinition/SymbolItem не позволяет вам изменять свойства каждого элемента символа.
Единственное, что вы можете сделать в этом случае, это выбрать все символы, которые имеют общее определение.
Чтобы достичь того, что вы хотите, вы должны использовать Path directly.
Here is a схема, показывающая решение.

function onMouseDown(event) {
    project.activeLayer.selected = false;
    if (event.item === null) {
        var circle = new Path.Circle(new Point(0, 0), 10);
        circle.fillColor = Color.random();
        // just pass the circle instead of making a symbol definition
        multiply(circle, event.point);
    }
    else {
        event.item.selected = true;
    }
}

function multiply(item, location) {
    for (var i = 0; i < 10; i++) {
        // use passed item for first iteration, then use a clone
        var next = i === 0 ? item : item.clone();
        next.position = location + [20 * i, 0];
    }
}
person sasensi    schedule 19.10.2018