org.fxyz3d.importers.maya.MayaGroup Maven / Gradle / Ivy
The newest version!
/*
* Copyright (c) 2010, 2014, Oracle and/or its affiliates.
* All rights reserved. Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
* - Neither the name of Oracle Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.fxyz3d.importers.maya;
import javafx.scene.Group;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
/**
* MayaGroup - A MayaGroup is equivalent to a Maya Transform Node
*
* If you are post-multiplying matrices, To transform a point p from object-space to world-space you would need to
* post-multiply by the worldMatrix. (p' = p * wm) matrix = [SP-1][S][SH][SP][ST][RP-1][RA][R][RP][RT][T] where R =
* [RX][RY][RZ] (Note: order is determined by rotateOrder)
*
* If you are pre-multiplying matrices, to transform a point p from object-space to world-space you would need to
* pre-multiply by the worldMatrix. (p' = wm * p) matrix = [T][RT][RP][R][RA][RP-1][ST][SP][SH][S][SP-1] where R =
* [RZ][RY][RX] (Note: order is determined by rotateOrder) Of these sub-matrices we can set [RT], [RA], [ST], and [SH]
* to identity, so matrix = [T][RP][R][RP-1][SP][S][SP-1] matrix = [T][RP][RZ][RY][RX][RP-1][SP][S][SP-1]
*/
public class MayaGroup extends Group {
Translate t = new Translate();
Translate rpt = new Translate(); // rotate pivot translate
Translate rp = new Translate(); // rotate pivot
Translate rpi = new Translate(); // rotate pivot inverse
Translate spt = new Translate(); // scale pivot translate
Translate sp = new Translate(); // scale pivot
Translate spi = new Translate(); // scale pivot inverse
// should bind rpi = -rp, but doesn't currently work afaict
Rotate rx = new Rotate(0, Rotate.X_AXIS);
Rotate ry = new Rotate(0, Rotate.Y_AXIS);
Rotate rz = new Rotate(0, Rotate.Z_AXIS);
Scale s = new Scale();
public MayaGroup() {
initTransforms();
}
/**
* Creates mayaGroup with the same set of transforms as given mayaGroup. Children are not copied.
*
* @param mayaGroup
*/
public MayaGroup(MayaGroup mayaGroup) {
t = mayaGroup.t.clone();
rpt = mayaGroup.rpt.clone();
rp = mayaGroup.rp.clone();
rpi = mayaGroup.rpi.clone();
sp = mayaGroup.sp.clone();
spi = mayaGroup.spi.clone();
rx = mayaGroup.rx.clone();
ry = mayaGroup.ry.clone();
rz = mayaGroup.rz.clone();
s = mayaGroup.s.clone();
setId(mayaGroup.getId());
setDepthTest(mayaGroup.getDepthTest());
setVisible(mayaGroup.isVisible());
initTransforms();
}
private void initTransforms() {
getTransforms().setAll(t, rpt, rp, rz, ry, rx, rpi, spt, sp, s, spi);
}
}