//import java.util.Vector;
|
|
class MorphNode extends Object3D implements java.io.Serializable
|
{
|
static final long serialVersionUID = 0;
|
|
Object3D morphobject;
|
|
// MORPH weights
|
double[] morphweights;
|
|
MorphNode(Object3D object)
|
{
|
this.morphobject = object;
|
|
name = "Mo:" + morphobject.name;
|
|
if (morphobject.get(0).bRep != null) // june 2014
|
{
|
CreateMaterial();
|
morphobject.get(0).bRep.SaveSupports();
|
bRep = (BoundaryRep) Grafreed.clone(morphobject.get(0).bRep);
|
morphobject.get(0).bRep.RestoreSupports();
|
}
|
|
for (int i=0; i<morphobject.get(0).size(); i++)
|
{
|
Object3D duplicate = morphobject.get(0).get(i);
|
Object3D par = duplicate.parent;
|
duplicate.parent = null;
|
Object3D sup = duplicate.support;
|
duplicate.support = null;
|
addChild((Object3D)Grafreed.clone(duplicate));
|
duplicate.parent = par;
|
duplicate.support = sup;
|
}
|
|
morphweights = new double[morphobject.Size()];
|
morphweights[0] = 1;
|
|
if (morphobject.count > 1)
|
morphobject.count = 1; // hide
|
}
|
|
void DrawNode(iCameraPane display, Object3D /*Composite*/ root, boolean selected)
|
{
|
//System.err.println("Frame # " + frame);
|
|
// if (morphobject == null)
|
// {
|
// // grosse patch!!
|
// morphobject = parent;
|
// parent = super.parent;
|
//
|
// }
|
|
// if (bRep == null)
|
// {
|
// bRep = (BoundaryRep) GrafreeD.clone(morphobject.get(0).bRep);
|
// }
|
|
if (CameraPane.SUPPORT && display.DrawMode() == display.SHADOW)
|
{
|
for (int i=0; i<morphobject.Size(); i++)
|
{
|
if (i == 0 || morphweights[i] != 0)
|
morphobject.get(i).resetMaster(false); // for mocap
|
}
|
|
// if (bRep != null)
|
// {
|
// morphobject.resetMaster(false);
|
// }
|
|
for (int i=0; i<Size(); i++)
|
{
|
get(i).morphThis(morphobject, i, morphweights);
|
}
|
|
if (bRep != null)
|
{
|
morphThis(morphobject, -1, morphweights);
|
}
|
}
|
|
super.DrawNode(display, root, selected);
|
}
|
|
// void ExtractGeometries()
|
// {
|
// Object3D o = new Object3D("Geometry:" + this.name);
|
// o.bRep = bRep;
|
// o.CreateMaterial();
|
// parent.addChild(o);
|
// }
|
|
// for slider
|
int getNumFrames()
|
{
|
return morphobject.Size();
|
}
|
|
Object3D deepCopy()
|
{
|
MorphNode e = new MorphNode(morphobject);
|
deepCopySelf(e);
|
return e;
|
}
|
|
protected void deepCopySelf(Object3D other)
|
{
|
super.deepCopySelf(other);
|
MorphNode bp = (MorphNode)other;
|
|
bp.morphweights = (double[]) Grafreed.clone(morphweights);
|
}
|
|
void createEditWindow(GroupEditor callee, boolean newWindow)
|
{
|
//editWindow = (new SphereEditor(this, deepCopy(), callee)).GetEditor();
|
if (newWindow)
|
{
|
objectUI = new MorphEditor(this, deepCopy(), callee);
|
} else
|
{
|
objectUI = new MorphEditor(this, callee);
|
}
|
editWindow = objectUI.GetEditor();
|
}
|
}
|