Я написал свой собственный полилинейный класс, который по сути хранит список точек, которые можно изменить с помощью матрицы.Линии поли могут быть добавлены к другим линиям поли и соединены в общих конечных точках.Линия poly будет представлять многоугольник, когда конечная точка равна начальной точке.
Затем у меня есть метод, позволяющий превратить мой многоугольник в объект Path путем итерации списка точек с помощью серии вызовов lineTo ().Этот путь затем применяется к холсту в качестве пути клипа в методе onDraw моего View.
Он отлично работает для сложных полигонов, и я могу нарисовать этот путь, чтобы проверить его точность.
Покахорошо, за исключением того, что я замечаю проблемы, когда у меня есть составной многоугольник с нерегулярным отверстием в середине.Мне, вероятно, следует прекратить называть его многоугольником в этой точке, поскольку он является многоугольником внутри другого многоугольника.
Например, рассмотрим диаграмму ниже, где внешняя рамка и "замковая" форма в середине являются частямитот же объект Path, который используется в качестве пути клипа.# Представляет нарисованную область.
+---------+
|#########|
|#+-+#+-+#|
|#| |#| |#|
|#| +-+ |#|
|#| |#|
|#+-----+#|
|#########|
+---------+
Я ожидаю, что все, что находится снаружи внешней коробки и внутренней формы "замка", будет обрезано.Проблема, которую я вижу, заключается в том, что внутренняя форма не обрезается должным образом.Кажется, проблема с алгоритмом трассировки лучей.
Любые идеи будут полезны.
РЕДАКТИРОВАТЬ: Кроме того, я пытался протестировать каждый режим Region.Op, и ни один из них не решил проблему,Я подозреваю, что мне нужно будет принять меры, чтобы определить, есть ли «дыра», и сделать что-то творческое.