redspark opened this issue on Jun 21, 2020 ยท 13 posts
adp001 posted Mon, 22 June 2020 at 10:38 AM
import numpy as NP
def po_reverse_normals(actor_or_geom):
if isinstance(actor_or_geom, poser.ActorType):
geom = actor_or_geom.Geometry()
elif isinstance(actor_or_geom, poser.GeomType):
geom = actor_or_geom
else:
raise Exception("Parameter must be actor or geometry.")
verts = NP.array([[v.X(), v.Y(), v.Z()] for v in geom.Vertices()], NP.float)
tverts = NP.array([[v.U(), v.V()] for v in geom.TexVertices()], NP.float)
sets = NP.array([s for s in geom.Sets()], NP.int32)
tsets = NP.array([s for s in geom.TexSets()], NP.int32)
polygons = NP.array([[p.Start(), p.NumVertices()] for p in geom.Polygons()], NP.int32)
tpolygons = NP.array([[p.Start(), p.NumTexVertices()] for p in geom.TexPolygons()], NP.int32)
for p in polygons:
start, end = p[0], p[0]+p[1]
s = v[start:end]
sets[start:end] = NP.flipud(s)
new_geom = poser.NewGeometry()
new_geom.AddGeneralMesh(polygons, sets, verts, tpolygons, tsets, tverts)
if isinstance(actor_or_geom, poser.ActorType):
actor_or_geom.SetGeometry(new_geom)
return actor_or_geom
else:
return poser.Scene().CreatePropFromGeom(new_geom)
if __name__ == "__main__":
po_reverse_normals(poser.Scene().CurrentActor())
poser.Scene().DrawAll()