import org.web3d.x3d.jsail.*;
import org.web3d.x3d.jsail.CADGeometry.*;
import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.CubeMapTexturing.*;
import org.web3d.x3d.jsail.DIS.*;
import org.web3d.x3d.jsail.EnvironmentalEffects.*;
import org.web3d.x3d.jsail.EnvironmentalSensor.*;
import org.web3d.x3d.jsail.EventUtilities.*;
import org.web3d.x3d.jsail.Followers.*;
import org.web3d.x3d.jsail.Geometry2D.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Geospatial.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.HAnim.*;
import org.web3d.x3d.jsail.Interpolation.*;
import org.web3d.x3d.jsail.KeyDeviceSensor.*;
import org.web3d.x3d.jsail.Layering.*;
import org.web3d.x3d.jsail.Layout.*;
import org.web3d.x3d.jsail.Lighting.*;
import org.web3d.x3d.jsail.NURBS.*;
import org.web3d.x3d.jsail.Navigation.*;
import org.web3d.x3d.jsail.Networking.*;
import org.web3d.x3d.jsail.ParticleSystems.*;
import org.web3d.x3d.jsail.Picking.*;
import org.web3d.x3d.jsail.PointingDeviceSensor.*;
import org.web3d.x3d.jsail.Rendering.*;
import org.web3d.x3d.jsail.RigidBodyPhysics.*;
import org.web3d.x3d.jsail.Scripting.*;
import org.web3d.x3d.jsail.Shaders.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Sound.*;
import org.web3d.x3d.jsail.Text.*;
import org.web3d.x3d.jsail.Texturing3D.*;
import org.web3d.x3d.jsail.Texturing.*;
import org.web3d.x3d.jsail.Time.*;
import org.web3d.x3d.jsail.VolumeRendering.*;
import org.web3d.x3d.jsail.fields.*;
import java.util.ArrayList;
import java.util.List;
public class JinOne {
  public static void main(String[] args) {
    ConfigurationProperties.setXsltEngine(ConfigurationProperties.XSLT_ENGINE_NATIVE_JAVA);
    ConfigurationProperties.setDeleteIntermediateFiles(false);
    ConfigurationProperties.setStripTrailingZeroes(true);
    ConfigurationProperties.setStripDefaultAttributes(true);
    X3D model = new JinOne().getRootNodeList().get(0); // only get one root node
    System.out.print(model.validationReport().trim());
    model.toFileX3D("JinOne_output.x3d");
    }
    public List<X3D> getRootNodeList() {
    	List<X3D> list = new ArrayList<X3D>(1);
    	list.add(initialize());
    	return list;
    }
    public X3D initialize() {
      X3D X3D0 =  new X3D().setProfile(new SFString("Immersive")).setVersion(new SFString("4.1"))
      .setHead(new head()
        .addComponent(new component().setName(new SFString("HAnim")).setLevel(3))
        .addMeta(new meta().setName(new SFString("title")).setContent(new SFString("JinOne.x3d")))
        .addMeta(new meta().setName(new SFString("description")).setContent(new SFString("Sample file to figure out field ordering and DEF/USE.")))
        .addMeta(new meta().setName(new SFString("creator")).setContent(new SFString("Yujin Jung")))
        .addMeta(new meta().setName(new SFString("reference")).setContent(new SFString("originals/FACS_AU45(Jin)_Blink_Morpher.x3d")))
        .addMeta(new meta().setName(new SFString("reference")).setContent(new SFString("https://en.wikipedia.org/wiki/Facial_Action_Coding_System")))
        .addMeta(new meta().setName(new SFString("reference")).setContent(new SFString("https://web.cs.wpi.edu/~matt/courses/cs563/talks/face_anim/ekman.html")))
        .addMeta(new meta().setName(new SFString("reference")).setContent(new SFString("Bryn Farnsworth, FACS Visual Guidebook https://imotions.com/blog/learning/research-fundamentals/facial-action-coding-system")))
        .addMeta(new meta().setName(new SFString("generator")).setContent(new SFString("x3d-tidy V3.0.9, https://www.npmjs.com/package/x3d-tidy")))
        .addMeta(new meta().setName(new SFString("generator")).setContent(new SFString("Suwon VRLAB X3D Converter")))
        .addMeta(new meta().setName(new SFString("generator")).setContent(new SFString("X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit")))
        .addMeta(new meta().setName(new SFString("MovingImage")).setContent(new SFString("originals/SuwonHAnimFacialMotionConverter.mp4"))))
      .setScene(new Scene()
        .addChild(new HAnimHumanoid().setDEF(new SFString("hanim_humanoid")).setName(new SFString("humanoid")).setVersion(new SFString("2.0"))
          .addSkeleton(new HAnimJoint("hanim_humanoid").setDEF(new SFString("hanim_humanoid_root")).setName(new SFString("humanoid_root"))
            .addChild(new HAnimSegment("hanim_humanoid_root").setDEF(new SFString("hanim_sacrum")).setName(new SFString("sacrum"))
              .setCoord(new Coordinate().setDEF(new SFString("Sacrum_COORD")).setPoint(new MFVec3f0().getArray()))
              .addChild(new Transform().setDEF(new SFString("Sacrum"))
                .addChild(new Shape()
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(new float[] {1f ,1f ,1f })))
                  .setGeometry(new IndexedFaceSet().setDEF(new SFString("Sacrum-FACES")).setCoordIndex(new MFInt321().getArray())
                    .setCoord(new Coordinate().setUSE(new SFString("Sacrum_COORD"))))))))
          .addJoints(new HAnimJoint("hanim_humanoid").setUSE(new SFString("hanim_humanoid_root")))));
    return X3D0;
    }
private class MFVec3f0 {
  private org.web3d.x3d.jsail.fields.MFVec3f getArray() {
    return new org.web3d.x3d.jsail.fields.MFVec3f(new float[] {0f ,-2.287f ,3.579f ,0f ,-0.1353f ,-6.353f ,3.657f ,-0.4253f ,2.123f ,3.345f ,0.9926f ,4.159f ,3.653f ,-0.9673f ,0.1176f ,5.33f ,0.7945f ,-6.311f ,0f ,1.438f ,6.353f ,3.006f ,2.287f ,5.134f ,4.492f ,-0.08641f ,-3.097f ,0.6344f ,1.617f ,6.096f ,-3.657f ,-0.4253f ,2.123f ,-3.345f ,0.9926f ,4.159f ,0f ,0.481f ,5.272f ,-5.33f ,0.7945f ,-6.311f ,-4.492f ,-0.08641f ,-3.097f ,0f ,-0.5988f ,-3.408f ,0f ,-2.111f ,1.781f ,-3.653f ,-0.9673f ,0.1176f ,-3.006f ,2.287f ,5.134f ,-0.6344f ,1.617f ,6.096f });
  }
}
private class MFInt321 {
  private org.web3d.x3d.jsail.fields.MFInt32 getArray() {
    return new org.web3d.x3d.jsail.fields.MFInt32(new int[] {0,2,3,-1,0,3,12,-1,5,8,15,-1,2,0,16,-1,16,4,2,-1,7,9,12,-1,7,12,3,-1,5,15,1,-1,4,16,15,-1,15,8,4,-1,9,6,12,-1,0,11,10,-1,0,12,11,-1,13,15,14,-1,10,17,16,-1,16,0,10,-1,18,12,19,-1,18,11,12,-1,13,1,15,-1,17,14,15,-1,15,16,17,-1,19,12,6,-1});
  }
}
}
