Как мы получаем базовую геометрию Path в Paper.js? - PullRequest
0 голосов
/ 22 октября 2018

Мы можем нарисовать прямоугольник разными способами, и один из них сначала определяет Rectangle, а затем рисует его с помощью Path.Rectangle:

var rect = new Rectangle({
    from: [80, 50],
    to: [100, 200]
})

var rpath = new Path.Rectangle(rect)
rpath.strokeColor = 'red'

После этой точки, если мы проиграем rect(если мы не храним указатель или экспортируем / импортируем проект), мы не можем знать, rpath - это Rectangle или нет.

Как мы можем решить, является ли Path Circle или Rectangle или Polygon или Polyline?

1 Ответ

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

Path.Rectangle, Path.Circle и т. Д. - это просто фабричные функции, которые возвращают Path, который просто выглядит как прямоугольник.Они не являются подклассами / типами.

Так что нет, нет простого способа вывести тип.

В качестве обходного пути, вы можете сохранить type проп в item.data, который выживетсериализация / реимпортирование.

var rect = new Rectangle({
    from: [80, 50],
    to: [100, 200]
})

var rpath = new Path.Rectangle(rect)
rpath.strokeColor = 'red'
rpath.data = { type: 'rectangle' }

var serialized = rpath.exportJSON()
var reimported = paper.project.importJSON(serialized)

console.log(reimported.data.type)

А вот и Эскиз .

Существуют и другие решения, которые вы можете попробовать:

  • Подкласс Path к вашему Rectangle типу.Подклассы официально не поддерживаются, но все еще выполнимы, через paper.Path.extend().
  • Добавить метод Path.isRectangle(), который проверяет сегменты и математически определяет, является ли это прямоугольником или нет, во время выполнения.
...