Как создать дыру на пути в Paper.js? - PullRequest
0 голосов
/ 27 октября 2018

Я хочу получить такой результат, как этот , в то время как белый круг фактически является ударом:

enter image description here

Однако,Я получаю следующий результат , когда следую пример логической операции :

// this works okay 
var via = outer.exclude(hole)
project.activeLayer.addChild(via)

// this works weird 
var drilledY = y.exclude(hole)
project.activeLayer.addChild(drilledY)

enter image description here

Здесь, похоже, единственной проблемой является создание дыры внутри Path.Как я могу создать дыру в пути?

1 Ответ

0 голосов
/ 27 октября 2018

Я не думаю, что вы можете получить желаемый результат, используя Path.Line.

Перфорирование подразумевает, что вы хотите удалить некоторую внутреннюю область, которой не хватает в открытом Path, например Path.Line.

Итак, вы можете сделать следующее:

  • Замените эти толстые линии на Path.Rectangle с.
  • unite 2 прямоугольника, чтобы получить свой крест, поэтому у вас есть один Path для работы.
  • Используйте subtract вместо exclude для "пробивания".

Вот пример:

var x = new paper.Path.Rectangle({
    from: [100, 100],
    to: [120, 200],
    fillColor: 'red',
    strokeWidth: 1
});

var y = x.clone().rotate(90).set({ fillColor: 'blue' })

// Unite x/y to get a single path.
var cross = y.unite(x)

// Remove x,y we no longer need them, we got the cross.
x.remove()
y.remove()

var hole = new paper.Path.Circle({
    center:[110, 150],
    radius: 6,
    strokeColor: 'red',
    fillColor: 'red'
})

// Subtract (instead of exclude), to "punch through".
var drilled = cross.subtract(hole)

// Remove hole/cross, we no longer need them.
hole.remove()
cross.remove()

console.log(drilled)

и вот Эскиз .

Если вы не хотите unite ваших фигур, вы все равно можете пройти через них и subtract отверстие от них,просто не забудьте использовать закрытый Path с.

...