概述
去年9月的测试性文章,后续补充完整。
翻转
polygon1.invert_enabled = true # 翻转
print(polygon1.polygon)
polygon1.invert_border = 0.01 # 翻转后的边距
print(polygon1.polygon)
打印出的数据:
[(195, 152), (257, 74), (374, 25), (448, 107), (543, 187), (461, 272), (380, 323), (319, 345), (251, 296), (156, 227)]
[(195, 152), (257, 74), (374, 25), (448, 107), (543, 187), (461, 272), (380, 323), (319, 345), (251, 296), (156, 227)]
表明,invert_enabled
并不是简单的翻转顶点顺序。
显示多个多边形
extends Node2D
@onready var polygon1 = $Polygon1
@onready var polygon2: Polygon2D = $Polygon2
@onready var polygon_result: Polygon2D = $PolygonResult
func _ready():
var p1 = polygon1.polygon
var p2 = polygon2.polygon
var aa = Geometry2D.clip_polygons(p1,p2)
# 将两个
var p:PackedVector2Array
p = aa[0] + aa[1]
print(p1)
print(aa[0])
print(Geometry2D.is_polygon_clockwise(aa[0]))
print(p2)
print(aa[1])
print(Geometry2D.is_polygon_clockwise(aa[1]))
polygon_result.polygon = p
polygon_result.polygons = [[0,1,2,3],[4,5,6,7]]
通过为不同多边形的顶点设定不同的颜色,可以将重叠的多个多边形区分开来。
实现阵列
extends Node2D
@onready var polygon1 = $Polygon1
@onready var polygon_result: Polygon2D = $PolygonResult
func _ready():
var p1 = polygon1.polygon
var polygons = polygon_array1(p1,3,Vector2.RIGHT * 200)
polygon_result.polygon = polygons["points"]
polygon_result.polygons = polygons["polygons"]
# 多边形线性一维阵列
func polygon_array1(polygon:PackedVector2Array,num:int,offset:Vector2) -> Dictionary:
var dic ={
points = [],
polygons = []
}
for i in range(num):
# 添加多边形点集合
dic["points"].append_array(offset_polygon(polygon,offset * i))
# 添加多边形点索引
dic["polygons"].append(range(polygon.size() * i,(i+1) * polygon.size()))
return dic
# 对多边形进行偏移
func offset_polygon(polygon:PackedVector2Array,offset:Vector2) -> PackedVector2Array:
var arr:PackedVector2Array = polygon.duplicate()
for i in range(arr.size()):
arr.set(i,arr[i] + offset)
return arr