starlingblue opened this issue on Sep 15, 2020 ยท 7 posts
adp001 posted Wed, 16 September 2020 at 11:52 AM
I had a bit time and wrote the following little script. It asks for a morphname as the original "Spawn Target" does and creates a morph from what the screen shows.
Don't forget to set all rotations/translations/scales to zero to avoid some funny effects.
from __future__ import print_function, division, absolute_import
import numpy as np
import wx
try:
import poser
except ImportError:
from PoserLibs import POSER_FAKE as poser
SCENE = poser.Scene()
def createmorph(actor, morphname):
assert isinstance(actor, poser.ActorType)
assert isinstance(morphname, basestring)
geom = None
if hasattr(actor, "Geometry"):
geom = actor.Geometry()
numv = geom.NumVertices()
if numv == 0:
raise TypeError("Actor has no Geometry.")
deltas = np.array([[v.X(), v.Y(), v.Z()] for v in geom.WorldVertices()]) -
np.array([[v.X(), v.Y(), v.Z()] for v in geom.Vertices()])
morphparm = actor.Parameter(morphname)
if morphparm is None:
actor.SpawnTarget(morphname)
morphparm = actor.Parameter(morphname)
morphparm.SetValue(0)
for idx, v in enumerate(deltas):
morphparm.SetMorphTargetDelta(idx, *v)
SCENE.DrawAll()
with wx.TextEntryDialog(None, "Enter Morphname", caption="Spawn Morphtarget") as dlg:
if dlg.ShowModal() == wx.ID_OK:
m_name = dlg.GetValue()
if m_name:
createmorph(SCENE.CurrentActor(), m_name)