我很难通过Python从Blender提取多边形数据到PostGIS。一开始我用一个简单的立方体尝试所有这些东西。 我想在PostGIS中看到一个纯粹的POLYGON - GEOMETRY-Type POLYGON((x1 y1 z1,x2 y2 z2,.....)) 我可以用这种方式从Blender读取信息:
载体:
verts=[
<Vector (1.0000, 1.0000, -1.0000)> ,
<Vector (1.0000, -1.0000, -1.0000)> ,
<Vector (-1.0000, -1.0000, -1.0000)> ,
<Vector (-1.0000, 1.0000, -1.0000)> ,
<Vector (1.0000, 1.0000, 1.0000)> ,
<Vector (1.0000, -1.0000, 1.0000)> ,
<Vector (-1.0000, -1.0000, 1.0000)> ,
<Vector (-1.0000, 1.0000, 1.0000)> ,
]
和面(数字是形成多边形的顶点):
faces = [
(0, 1, 2, 3)
(4, 7, 6, 5)
(0, 4, 5, 1)
(1, 5, 6, 2)
(2, 6, 7, 3)
(4, 0, 3, 7)
]
现在我不知道如何将这些信息导入POLYGON-GEOMETRY结构以将其存储在PostgreSQL / PostGIS中。
最后我想要一个多边形((...))用于立方体的每个面。我希望从Blender中为更复杂的3D模型做到这一点。使用POLYGON或TIN-GEOMETRY ......但首先我需要知道如何使用Python与几何体进行交互。
我希望你能再多一点。我很感激任何提示。 谢谢! Ĵ
答案 0 :(得分:1)
我不太确定Blender的内部对象模型,所以我为此创建了一些虚拟数据。但我认为最终结果应该接近你想要的结果:
verts = [[1.0,-1.0,0.0]]*8
faces = [
(0, 1, 2, 3),
(4, 7, 6, 5),
(0, 4, 5, 1),
(1, 5, 6, 2),
(2, 6, 7, 3),
(4, 0, 3, 7),
]
# ---------------------------------------------
# PostGIS POLYGON data formatting happens next
for f in faces:
print("POLYGON((", end="")
for point in f:
v = verts[point]
print("{} {} {} ".format(v[0], v[1], v[2]), end="")
print("))")
# Will print....
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))
# POLYGON((1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 -1.0 0.0 ))