public void GetData_Rotation()
        {
            this.Group.transform.rotation = Quaternion.Euler(10, 20, 30);
            SerializableComponentData data = (this.Group as ISerializableComponent).GetData();

            Assert.That(data.Rotation, Is.EqualTo(Quaternion.Euler(10, 20, 30)).Using(QuaternionEqualityComparer.Instance));
        }
        public void GetData_Position()
        {
            this.Group.transform.position = new Vector3(1, 2, 3);
            SerializableComponentData data = (this.Group as ISerializableComponent).GetData();

            Assert.AreEqual(new Vector3(1, 2, 3), data.Position);
        }
        public void GetData_Scale()
        {
            this.Group.transform.localScale = new Vector3(1, 2, 3);
            SerializableComponentData data = (this.Group as ISerializableComponent).GetData();

            Assert.AreEqual(new Vector3(1, 2, 3), data.Scale);
        }
        public void ApplyData_TransformedChildGroup()
        {
            this.Group.transform.position   = new Vector3(1, 2, 3);
            this.Group.transform.rotation   = Quaternion.Euler(20, 30, 40);
            this.Group.transform.localScale = new Vector3(5, 5, 5);

            SketchObjectGroup newGroup = GameObject.Instantiate(this.Group);

            this.Group.AddToGroup(newGroup);
            newGroup.transform.position   = new Vector3(3, 2, 1);
            newGroup.transform.rotation   = Quaternion.Euler(80, 90, 100);
            newGroup.transform.localScale = new Vector3(.5f, .5f, .5f);

            SketchObjectGroup targetGroup = GameObject.Instantiate(this.Group);


            SerializableComponentData data = (this.Group as ISerializableComponent).GetData();

            (targetGroup as ISerializableComponent).ApplyData(data);

            SketchObjectGroup deserializedChildGroup = targetGroup.transform.GetChild(0).GetComponent <SketchObjectGroup>();

            Assert.AreEqual(new Vector3(3, 2, 1), deserializedChildGroup.transform.position);
            Assert.AreEqual(new Vector3(.5f, .5f, .5f), deserializedChildGroup.transform.localScale);
            Assert.That(deserializedChildGroup.transform.rotation, Is.EqualTo(Quaternion.Euler(80, 90, 100)).Using(QuaternionEqualityComparer.Instance));
        }
 void ISerializableComponent.ApplyData(SerializableComponentData data)
 {
     if (data is LineSketchObjectData lineSketchData)
     {
         this.ApplyData(lineSketchData);
     }
     else
     {
         Debug.LogError("Trying to deserialize object as LineSketchObject that is not a LineSketchObjectData object.");
     }
 }
        public void ApplyData_ChildGroup()
        {
            SketchObjectGroup newGroup    = GameObject.Instantiate(this.Group);
            SketchObjectGroup targetGroup = GameObject.Instantiate(this.Group);

            this.Group.AddToGroup(newGroup);

            SerializableComponentData data = (this.Group as ISerializableComponent).GetData();

            (targetGroup as ISerializableComponent).ApplyData(data);

            Assert.AreEqual(1, targetGroup.transform.childCount);
            Assert.AreEqual(2, targetGroup.GetComponentsInChildren <SketchObjectGroup>().Length);
        }
 void ISerializableComponent.ApplyData(SerializableComponentData data)
 {
     if (data is RibbonSketchObjectData ribbonData)
     {
         RibbonMesh = new RibbonMesh(ribbonData.CrossSectionVertices, ribbonData.CrossSectionScale);
         SetControlPointsLocalSpace(ribbonData.ControlPoints, ribbonData.ControlPointOrientations);
         meshRenderer.sharedMaterial = Defaults.GetMaterialFromDictionary(ribbonData.SketchMaterial);
         ribbonData.ApplyDataToTransform(this.transform);
     }
     else
     {
         Debug.LogError("Invalid data for RibbonSketchObject.");
     }
 }
        void ISerializableComponent.ApplyData(SerializableComponentData data)
        {
            if (data is PatchSketchObjectData patchData)
            {
                transform.position   = Vector3.zero;
                transform.rotation   = Quaternion.identity;
                transform.localScale = Vector3.one;

                ResolutionWidth  = patchData.ResolutionWidth;
                ResolutionHeight = patchData.ResolutionHeight;

                SetControlPoints(patchData.ControlPoints, patchData.Width);

                meshRenderer.material = Defaults.GetMaterialFromDictionary(patchData.SketchMaterial);

                originalMaterial = meshRenderer.sharedMaterial;

                patchData.ApplyDataToTransform(this.transform);
            }
        }