예제 #1
0
        public void TranslateControlPointTest()
        {
            ARAPDeformation target = new ARAPDeformation(new List <PointF>()
            {
                new PointF(0, 0),
                new PointF(100, 0),
                new PointF(100, 100),
                new PointF(0, 100),
            }, null);     // TODO: 適切な値に初期化してください

            target.BeginDeformation();
            target.EndDeformation();

            target.AddControlPoint(new PointF(0, 0), new PointF(0, 0));
            target.AddControlPoint(new PointF(100, 0), new PointF(100, 0));
            target.AddControlPoint(new PointF(100, 100), new PointF(100, 100));
            //target.AddControlPoint(new PointF(50, 50));
            //        target.AddControlPoint(new PointF(150, 50));
            //        target.AddControlPoint(new PointF(150, 150));
            target.BeginDeformation();

            //target.TranslateControlPoint(new PointF(50, 50), new PointF(-50, -50));
            //target.TranslateControlPoint(new PointF(150, 50), new PointF(100, -50));
            //target.TranslateControlPoint(new PointF(150, 150), new PointF(50, 50));

            target.ToBitmap().Save("../../../before.png");
            target.TranslateControlPoint(new PointF(0, 0), new PointF(-100, -100), true);
            target.ToBitmap().Save("../../../after.png");
            Assert.AreEqual(target.meshPointList[0].X, -100, 1);
            Assert.AreEqual(target.meshPointList[0].Y, -100, 1);

            target.TranslateControlPoint(new PointF(100, 0), new PointF(0, -100), false);
            Assert.AreEqual(target.meshPointList[0].X, -100, 1);
            Assert.AreEqual(target.meshPointList[0].Y, -100, 1);

            target.TranslateControlPoint(new PointF(100, 100), new PointF(0, 0), true);

            target.EndDeformation();

            Assert.AreEqual(target.meshPointList[0].X, -100, 1);
            Assert.AreEqual(target.meshPointList[0].Y, -100, 1);
            Assert.AreEqual(target.meshPointList[1].X, 0, 1);
            Assert.AreEqual(target.meshPointList[1].Y, -100, 1);
            Assert.AreEqual(target.meshPointList[2].X, 0, 1);
            Assert.AreEqual(target.meshPointList[2].Y, 0, 1);
            Assert.AreEqual(target.meshPointList[3].X, -100, 1);
            Assert.AreEqual(target.meshPointList[3].Y, 0, 1);

            var path = target.GetPath();

            Assert.AreEqual(path[0].X, -100, 1);
            Assert.AreEqual(path[0].Y, -100, 1);
            Assert.AreEqual(path[1].X, 0, 1);
            Assert.AreEqual(path[1].Y, -100, 1);
            Assert.AreEqual(path[2].X, 0, 1);
            Assert.AreEqual(path[2].Y, 0, 1);
            Assert.AreEqual(path[3].X, -100, 1);
            Assert.AreEqual(path[3].Y, 0, 1);
        }
 public void newMesh(List <List <int> > neighbors_)
 {
     meshFilter      = mesh.GetComponent <MeshFilter>().mesh;
     vertices        = meshFilter.vertices;
     neighbors       = neighbors_;
     arapDeformation = new ARAPDeformation(meshFilter, neighbors);
     arapDeformation.Initializer();
 }
예제 #3
0
        public void ARAPDeformationConstructorTest()
        {
            ARAPDeformation refARAP = new ARAPDeformation(new List <PointF>()
            {
                new PointF(0, 0),
                new PointF(100, 0),
                new PointF(100, 100),
                new PointF(0, 100),
            }, null);     // TODO: 適切な値に初期化してください
            ARAPDeformation target = new ARAPDeformation(refARAP);

            var path1 = refARAP.GetPath();
            var path2 = target.GetPath();

            Assert.AreEqual(path1.Count, path2.Count);
            for (int i = 0; i < path1.Count; i++)
            {
                Assert.AreEqual(path1[i].X, path2[i].X, 1e-4);
                Assert.AreEqual(path1[i].Y, path2[i].Y, 1e-4);
            }
        }
예제 #4
0
        public void InitializeControlPointsTest()
        {
            SegmentMeshInfo_Accessor.InitializeControlPoints(null, null, 0, null, null);

            ARAPDeformation arap = new ARAPDeformation(new List <PointF>()
            {
                new PointF(-10, -10),
                new PointF(10, -10),
                new PointF(-10, 10),
                new PointF(10, 10),
            }, new List <PointF>());

            SkeletonAnnotation an = new SkeletonAnnotation(null);

            an.joints.Add(new JointAnnotation("0", new PointF(0, 0)));
            an.joints.Add(new JointAnnotation("1", new PointF(100, 0)));
            an.joints.Add(new JointAnnotation("2", new PointF(0, 50)));
            an.joints.Add(new JointAnnotation("3", new PointF(0, 100)));
            an.joints.Add(new JointAnnotation("4", new PointF(99, 100)));
            an.bones.Add(new BoneAnnotation(an.joints[0], an.joints[1]));
            an.bones.Add(new BoneAnnotation(an.joints[0], an.joints[2]));
            an.bones.Add(new BoneAnnotation(an.joints[3], an.joints[4]));

            Dictionary <BoneAnnotation, List <PointF> > boneToControl = new Dictionary <BoneAnnotation, List <PointF> >();

            SegmentMeshInfo_Accessor.InitializeControlPoints(arap, an, 50, null, boneToControl);
            Assert.AreEqual(arap.controlPoints.Count, 6);
            Assert.AreEqual(boneToControl.Sum(kv => kv.Value.Count), 7);

            Assert.AreEqual(arap.controlPoints[0].X, 0);
            Assert.AreEqual(arap.controlPoints[1].X, 50, 1e-4);
            Assert.AreEqual(arap.controlPoints[2].X, 100);

            Assert.AreEqual(arap.controlPoints[3].X, 0); Assert.AreEqual(arap.controlPoints[3].Y, 50);

            Assert.AreEqual(arap.controlPoints[4].X, 0);
            Assert.AreEqual(arap.controlPoints[5].X, 99);
        }