Uncanny_Film opened this issue on Feb 19, 2023 ยท 14 posts
adp001 posted Sat, 04 March 2023 at 12:55 PM
I do a lot of custom figure morphs using scaling, so I almost always need to add custom fit morphs to hair props later.In PP-2014 I can morph the hair using Magnets or the Morphbrush, spawn a new morph, and everything is fine.
In Poser 11 the spawned morph causes the hair prop to re-scale and re-move away from the custom figure's head.
It gets old having to switch between Poser apps just to make a simple fit morph for a rescaled figure.
Maybe the little Script below may help.
Scale , rotate and translate your (hair) prop as you need, use the morphbrush or magnets to deform, then run that script with the modified actor selected. The script will modify the original vertices to reflect the actual form, scale and position. All these dials are set to neutral position. If you used morphs, dial them back to 0 or delete them. All deformation is now part of the props base mesh.
Don't forget to save the prop after running the script!
Here we go:
import numpy as NP
SCENE = poser.Scene()
actor = SCENE.CurrentActor()
P_ROTS = poser.kParmCodeXROT, poser.kParmCodeYROT, poser.kParmCodeZROT
P_TRANS = poser.kParmCodeXTRAN, poser.kParmCodeYTRAN, poser.kParmCodeZTRAN
P_SCALES = poser.kParmCodeXSCALE, poser.kParmCodeYSCALE, poser.kParmCodeZSCALE, poser.kParmCodeASCALE
if hasattr(actor, "Geometry") and actor.Geometry().NumVertices() > 0:
geom = actor.Geometry()
worldverts = NP.array([[v.X(), v.Y(), v.Z()] for v in geom.WorldVertices()])
for vert, (x, y, z) in zip(geom.Vertices(), worldverts):
vert.SetX(x)
vert.SetY(y)
vert.SetZ(z)
actor.MarkGeomChanged()
for code in P_ROTS + P_TRANS:
actor.ParameterByCode(code).SetValue(0)
for code in P_SCALES:
actor.ParameterByCode(code).SetValue(1)
SCENE.DrawAll()
print("Done")
else:
print("No Vertices found")