321 lines
12 KiB
C#
321 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using UniversalEditor.Accessors;
|
|
using UniversalEditor.DataFormats.Markup.XML;
|
|
using UniversalEditor.DataFormats.Package.OpenPackagingConvention;
|
|
using UniversalEditor.DataFormats.Text.Formatted.DOC;
|
|
using UniversalEditor.Plugins.Genealogy.ObjectModels.FamilyTree;
|
|
using UniversalEditor.ObjectModels.FileSystem;
|
|
using UniversalEditor.ObjectModels.Markup;
|
|
using UniversalEditor.ObjectModels.Multimedia3D.Model;
|
|
using UniversalEditor.ObjectModels.Package;
|
|
using UniversalEditor.ObjectModels.Text.Formatted;
|
|
using UniversalEditor.Plugins.Genealogy.DataFormats.GEDCOM;
|
|
|
|
namespace UniversalEditor.TestProject
|
|
{
|
|
class MainClass
|
|
{
|
|
|
|
class OPCModelDataFormat : OPCDataFormat
|
|
{
|
|
private static DataFormatReference _dfr;
|
|
protected override DataFormatReference MakeReferenceInternal()
|
|
{
|
|
if (_dfr == null)
|
|
{
|
|
_dfr = new DataFormatReference(this.GetType());
|
|
_dfr.Capabilities.Add(typeof(ModelObjectModel), DataFormatCapabilities.All);
|
|
}
|
|
return _dfr;
|
|
}
|
|
protected override void BeforeLoadInternal(Stack<ObjectModel> objectModels)
|
|
{
|
|
base.BeforeLoadInternal(objectModels);
|
|
objectModels.Push(new PackageObjectModel());
|
|
}
|
|
protected override void AfterLoadInternal(Stack<ObjectModel> objectModels)
|
|
{
|
|
base.AfterLoadInternal(objectModels);
|
|
|
|
PackageObjectModel package = (objectModels.Pop() as PackageObjectModel);
|
|
ModelObjectModel model = (objectModels.Pop() as ModelObjectModel);
|
|
}
|
|
|
|
protected override void BeforeSaveInternal(Stack<ObjectModel> objectModels)
|
|
{
|
|
ModelObjectModel model = (objectModels.Pop() as ModelObjectModel);
|
|
PackageObjectModel package = new PackageObjectModel();
|
|
|
|
MarkupObjectModel momDocument = CreateDocument(model);
|
|
|
|
File file = package.FileSystem.AddFile("model/document.xml");
|
|
file.SetObjectModel<MarkupObjectModel>(new XMLDataFormat(), momDocument);
|
|
|
|
objectModels.Push(package);
|
|
|
|
base.BeforeSaveInternal(objectModels);
|
|
}
|
|
|
|
private MarkupObjectModel CreateDocument(ModelObjectModel model)
|
|
{
|
|
MarkupObjectModel momDocument = new MarkupObjectModel();
|
|
MarkupTagElement tagModel = new MarkupTagElement();
|
|
tagModel.FullName = "cr:model";
|
|
tagModel.Attributes.Add("xmlns:cr", "urn:net.alcetech.schemas.Concertroid.OPC.Model");
|
|
|
|
MarkupTagElement tagSettings = new MarkupTagElement();
|
|
tagSettings.FullName = "cr:settings";
|
|
|
|
MarkupTagElement tagSettingIgnoreEdgeFlag = new MarkupTagElement();
|
|
tagSettingIgnoreEdgeFlag.FullName = "cr:setting";
|
|
tagSettingIgnoreEdgeFlag.Attributes.Add("name", "ignoreEdgeFlag");
|
|
tagSettingIgnoreEdgeFlag.Attributes.Add("value", model.IgnoreEdgeFlag ? "true" : "false");
|
|
|
|
tagModel.Elements.Add(tagSettings);
|
|
|
|
MarkupTagElement tagBones = new MarkupTagElement();
|
|
tagBones.FullName = "cr:bones";
|
|
foreach (ModelBone bone in model.Bones)
|
|
{
|
|
MarkupTagElement tagBone = new MarkupTagElement();
|
|
tagBone.FullName = "cr:bone";
|
|
tagBone.Attributes.Add("id", "b" + model.Bones.IndexOf(bone).ToString());
|
|
|
|
MarkupTagElement tagAngleLimit = new MarkupTagElement();
|
|
tagAngleLimit.FullName = "cr:angleLimit";
|
|
tagAngleLimit.Attributes.Add("enabled", bone.AngleLimit.Enabled ? "true" : "false");
|
|
tagAngleLimit.Elements.Add(bone.AngleLimit.Lower.ToXML("cr:lower"));
|
|
tagAngleLimit.Elements.Add(bone.AngleLimit.Upper.ToXML("cr:upper"));
|
|
tagBone.Elements.Add(tagAngleLimit);
|
|
|
|
tagBone.Attributes.Add("type", BoneTypeToXML(bone.BoneType));
|
|
tagBone.Attributes.Add("childId", "b" + model.Bones.IndexOf(bone.ChildBone).ToString());
|
|
tagBone.Attributes.Add("ikNumber", bone.IKNumber.ToString());
|
|
tagBone.Attributes.Add("name", bone.Name);
|
|
tagBone.Attributes.Add("parentId", "b" + model.Bones.IndexOf(bone.ParentBone).ToString());
|
|
|
|
tagBone.Elements.Add(bone.Position.ToXML("cr:position"));
|
|
tagBone.Elements.Add(bone.Rotation.ToXML("cr:rotation"));
|
|
tagBone.Elements.Add(bone.Vector3Offset.ToXML("cr:offset"));
|
|
|
|
tagBones.Elements.Add(tagBone);
|
|
}
|
|
tagModel.Elements.Add(tagBones);
|
|
|
|
MarkupTagElement tagExpressions = new MarkupTagElement();
|
|
tagExpressions.FullName = "cr:expressions";
|
|
foreach (ushort u in model.Expressions)
|
|
{
|
|
MarkupTagElement tagExpression = new MarkupTagElement();
|
|
tagExpression.FullName = "cr:expression";
|
|
tagExpression.Attributes.Add("value", u.ToString());
|
|
tagExpressions.Elements.Add(tagExpression);
|
|
}
|
|
tagModel.Elements.Add(tagExpressions);
|
|
|
|
MarkupTagElement tagJoints = new MarkupTagElement();
|
|
tagJoints.FullName = "cr:joints";
|
|
foreach (ModelJoint joint in model.Joints)
|
|
{
|
|
MarkupTagElement tagJoint = new MarkupTagElement();
|
|
tagJoint.FullName = "cr:joint";
|
|
|
|
MarkupTagElement tagLimits = new MarkupTagElement();
|
|
tagLimits.FullName = "cr:limits";
|
|
tagLimits.Elements.Add(joint.LimitAngleHigh.ToXML("cr:angleHigh"));
|
|
tagLimits.Elements.Add(joint.LimitAngleLow.ToXML("cr:angleLow"));
|
|
tagLimits.Elements.Add(joint.LimitMoveHigh.ToXML("cr:moveHigh"));
|
|
tagLimits.Elements.Add(joint.LimitMoveLow.ToXML("cr:moveLow"));
|
|
tagJoint.Elements.Add(tagLimits);
|
|
|
|
tagJoint.Attributes.Add("name", joint.Name);
|
|
tagJoint.Elements.Add(joint.Position.ToXML("cr:position"));
|
|
tagJoint.Elements.Add(joint.Rotation.ToXML("cr:rotation"));
|
|
|
|
MarkupTagElement tagSpringConstraint = new MarkupTagElement();
|
|
tagSpringConstraint.FullName = "cr:springConstraint";
|
|
tagSpringConstraint.Elements.Add(joint.SpringConstraintMovementStiffness.ToXML("cr:movementStiffness"));
|
|
tagSpringConstraint.Elements.Add(joint.SpringConstraintRotationStiffness.ToXML("cr:rotationStiffness"));
|
|
tagJoint.Elements.Add(tagSpringConstraint);
|
|
|
|
tagJoints.Elements.Add(tagJoint);
|
|
}
|
|
tagModel.Elements.Add(tagJoints);
|
|
|
|
MarkupTagElement tagIKHandles = new MarkupTagElement();
|
|
tagIKHandles.FullName = "cr:ikHandles";
|
|
foreach (ModelIK ik in model.IK)
|
|
{
|
|
MarkupTagElement tagIKHandle = new MarkupTagElement();
|
|
tagIKHandle.FullName = "cr:ikHandle";
|
|
|
|
tagIKHandle.Attributes.Add("effectedBoneId", model.Bones.IndexOf(ik.EffBone).ToString());
|
|
tagIKHandle.Attributes.Add("index", ik.Index.ToString());
|
|
tagIKHandle.Attributes.Add("limitOnce", ik.LimitOnce.ToString());
|
|
tagIKHandle.Attributes.Add("loopCount", ik.LoopCount.ToString());
|
|
tagIKHandle.Attributes.Add("targetBoneId", model.Bones.IndexOf(ik.TargetBone).ToString());
|
|
|
|
MarkupTagElement tagBoneList = new MarkupTagElement();
|
|
tagBoneList.FullName = "cr:boneList";
|
|
foreach (ModelBone bone in ik.BoneList)
|
|
{
|
|
MarkupTagElement tagBone = new MarkupTagElement();
|
|
tagBone.FullName = "cr:boneReference";
|
|
tagBone.Attributes.Add("boneId", model.Bones.IndexOf(bone).ToString());
|
|
tagBoneList.Elements.Add(tagBone);
|
|
}
|
|
tagIKHandle.Elements.Add(tagBoneList);
|
|
}
|
|
tagModel.Elements.Add(tagIKHandles);
|
|
|
|
MarkupTagElement tagSurfaces = new MarkupTagElement();
|
|
tagSurfaces.FullName = "cr:surfaces";
|
|
foreach (ModelSurface surf in model.Surfaces)
|
|
{
|
|
MarkupTagElement tagSurface = new MarkupTagElement();
|
|
tagSurface.FullName = "cr:surface";
|
|
|
|
MarkupTagElement tagTriangles = new MarkupTagElement();
|
|
tagTriangles.FullName = "cr:triangles";
|
|
foreach (ModelTriangle tri in surf.Triangles)
|
|
{
|
|
MarkupTagElement tagTriangle = new MarkupTagElement();
|
|
tagTriangle.FullName = "cr:triangle";
|
|
|
|
tagTriangle.Elements.Add(tri.Vertex1.ToXML("cr:vertex"));
|
|
tagTriangle.Elements.Add(tri.Vertex2.ToXML("cr:vertex"));
|
|
tagTriangle.Elements.Add(tri.Vertex3.ToXML("cr:vertex"));
|
|
|
|
tagTriangles.Elements.Add(tagTriangle);
|
|
}
|
|
tagSurface.Elements.Add(tagTriangles);
|
|
|
|
MarkupTagElement tagVertices = new MarkupTagElement();
|
|
tagVertices.FullName = "cr:vertices";
|
|
foreach (ModelVertex vtx in surf.Vertices)
|
|
{
|
|
tagVertices.Elements.Add(vtx.ToXML("cr:vertex"));
|
|
}
|
|
tagSurface.Elements.Add(tagVertices);
|
|
|
|
tagSurfaces.Elements.Add(tagSurface);
|
|
}
|
|
tagModel.Elements.Add(tagSurfaces);
|
|
|
|
MarkupTagElement tagRigidBodies = new MarkupTagElement();
|
|
tagRigidBodies.FullName = "cr:rigidBodies";
|
|
|
|
foreach (ModelRigidBody rb in model.RigidBodies)
|
|
{
|
|
MarkupTagElement tagRigidBody = new MarkupTagElement();
|
|
tagRigidBody.FullName = "cr:rigidBody";
|
|
|
|
tagRigidBody.Attributes.Add("boneId", "b" + model.Bones.IndexOf(rb.Bone).ToString());
|
|
tagRigidBody.Elements.Add(rb.BoxSize.ToXML("cr:boxSize"));
|
|
tagRigidBody.Attributes.Add("boxType", rb.BoxType.ToString());
|
|
|
|
tagRigidBody.Attributes.Add("friction", rb.Friction.ToString());
|
|
tagRigidBody.Attributes.Add("groupId", rb.GroupID.ToString());
|
|
tagRigidBody.Attributes.Add("itype", rb.IType.ToString());
|
|
tagRigidBody.Attributes.Add("mass", rb.Mass.ToString());
|
|
tagRigidBody.Attributes.Add("mode", rb.Mode.ToString());
|
|
tagRigidBody.Attributes.Add("name", rb.Name);
|
|
tagRigidBody.Elements.Add(rb.Position.ToXML("cr:position"));
|
|
tagRigidBody.Attributes.Add("positionDamping", rb.PositionDamping.ToString());
|
|
tagRigidBody.Attributes.Add("restitution", rb.Restitution.ToString());
|
|
tagRigidBody.Elements.Add(rb.Rotation.ToXML("cr:rotation"));
|
|
tagRigidBody.Attributes.Add("rotationDamping", rb.RotationDamping.ToString());
|
|
|
|
tagRigidBodies.Elements.Add(tagRigidBody);
|
|
}
|
|
|
|
tagModel.Elements.Add(tagRigidBodies);
|
|
|
|
momDocument.Elements.Add(tagModel);
|
|
return momDocument;
|
|
}
|
|
|
|
private string BoneTypeToXML(ModelBoneType boneType)
|
|
{
|
|
switch (boneType)
|
|
{
|
|
case ModelBoneType.Blank: return "blank";
|
|
case ModelBoneType.Hidden: return "hidden";
|
|
case ModelBoneType.IKConnect: return "inverseKinematicsConnect";
|
|
case ModelBoneType.IKInfluencedRotation: return "inverseKinematicsInfluencedRotation";
|
|
case ModelBoneType.InfluencedRotation: return "influencedRotation";
|
|
case ModelBoneType.InverseKinematics: return "inverseKinematics";
|
|
case ModelBoneType.Revolution: return "revolution";
|
|
case ModelBoneType.Rotate: return "rotate";
|
|
case ModelBoneType.RotateMove: return "rotateMove";
|
|
case ModelBoneType.Twist: return "twist";
|
|
case ModelBoneType.Unknown: return "unknown";
|
|
}
|
|
return String.Empty;
|
|
}
|
|
|
|
}
|
|
|
|
private static void TestCDFDOC()
|
|
{
|
|
DOCDataFormat doc = new DOCDataFormat();
|
|
FormattedTextObjectModel ftom = new FormattedTextObjectModel();
|
|
|
|
Document.Load(ftom, doc, new FileAccessor("/home/beckermj/Documents/UE Tests/OLE Compound Document/test.doc"));
|
|
}
|
|
|
|
private static void TestCDFFTW()
|
|
{
|
|
GEDCOMDataFormat ged = new GEDCOMDataFormat();
|
|
|
|
FamilyTreeObjectModel ftom = new FamilyTreeObjectModel();
|
|
|
|
/*
|
|
FTWDataFormat cdf = new FTWDataFormat();
|
|
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0000";
|
|
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0000.FTW"));
|
|
|
|
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0001";
|
|
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0001.FTW"));
|
|
|
|
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0002";
|
|
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0002.FTW"));
|
|
// Document.Save(ftom, cdf, new FileAccessor("/home/beckermj/Documents/UE Tests/OLE Compound Document/Anthony Azcona Family Tree UE-TEST.ftw", true, true));
|
|
*/
|
|
|
|
Document.Load(ftom, ged, new FileAccessor("/tmp/test.ue/AAFT/AAFT.GED"));
|
|
}
|
|
|
|
private static void TestOPCModel()
|
|
{
|
|
DateTime start = DateTime.Now;
|
|
|
|
ModelObjectModel model = new ModelObjectModel();
|
|
UniversalEditor.DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat pmd = new DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat();
|
|
|
|
Document.Load(model, pmd, new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/test.pmdx_source/model/kio_miku_20111121.pmd"));
|
|
Document.Save(model, new OPCModelDataFormat(), new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/kio_miku.pmdx", true, true));
|
|
|
|
DateTime end = DateTime.Now;
|
|
Console.WriteLine("Took " + (end - start).ToString() + " with buffer size " + MemoryAccessor.DefaultBufferAllocationSize);
|
|
}
|
|
|
|
public static void Main (string [] args)
|
|
{
|
|
/*
|
|
string fileName = "/tmp/UETest/test.opc";
|
|
|
|
PackageObjectModel om = new PackageObjectModel ();
|
|
OPCDataFormat df = new OPCDataFormat ();
|
|
|
|
Document.Save (om, df, new FileAccessor (fileName, true, true));
|
|
*/
|
|
|
|
// TestCDFDOC();
|
|
TestCDFFTW();
|
|
}
|
|
}
|
|
}
|