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));
        }
    // Start is called before the first frame update
    void Start()
    {
        //Create a SketchWorld, many commands require a SketchWorld to be present
        SketchWorld = Instantiate(Defaults.SketchWorldPrefab).GetComponent <SketchWorld>();

        //Create a LineSketchObject
        LineSketchObject = Instantiate(Defaults.LineSketchObjectPrefab).GetComponent <LineSketchObject>();
        Invoker          = new CommandInvoker();
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 2, 3)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 4, 2)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 5, 3)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 5, 2)));
        Invoker.Undo();
        Invoker.Redo();

        //Create a RibbonSketchObject
        RibbonSketchObject = Instantiate(Defaults.RibbonSketchObjectPrefab).GetComponent <RibbonSketchObject>();
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(1, 1, 1), Quaternion.identity));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(1, 2, 2), Quaternion.Euler(25, 45, 0)));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(1, 2, 3), Quaternion.Euler(-25, 45, 0)));

        //Create a PatchSketchObject
        PatchSketchObject       = Instantiate(Defaults.PatchSketchObjectPrefab).GetComponent <PatchSketchObject>();
        PatchSketchObject.Width = 3;
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(0, 0, 1), new Vector3(0, 1, 2), new Vector3(0, 0, 3)
        }));
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(1, 1, 1), new Vector3(1, 0, 2), new Vector3(1, 1, 3)
        }));
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(2, 0, 1), new Vector3(2, 1, 2), new Vector3(2, 0, 3)
        }));

        //Add the LineSketchObject to the SketchWorld
        Invoker.ExecuteCommand(new AddObjectToSketchWorldRootCommand(LineSketchObject, SketchWorld));
        //Create a SketchObjectGroup and add objects to it
        SketchObjectGroup = Instantiate(Defaults.SketchObjectGroupPrefab).GetComponent <SketchObjectGroup>();
        Invoker.ExecuteCommand(new AddToGroupCommand(SketchObjectGroup, RibbonSketchObject));
        Invoker.ExecuteCommand(new AddToGroupCommand(SketchObjectGroup, PatchSketchObject));
        //Add the SketchObjectGroup to the SketchWorld
        Invoker.ExecuteCommand(new AddObjectToSketchWorldRootCommand(SketchObjectGroup, SketchWorld));

        //Serialize the SketchWorld to a XML file
        SavePath = System.IO.Path.Combine(Application.dataPath, "YourSketch.xml");
        SketchWorld.SaveSketchWorld(SavePath);

        //Create another SketchWorld and load the serialized SketchWorld
        DeserializedSketchWorld = Instantiate(Defaults.SketchWorldPrefab).GetComponent <SketchWorld>();
        DeserializedSketchWorld.LoadSketchWorld(SavePath);
        DeserializedSketchWorld.transform.position += new Vector3(5, 0, 0);

        //Export the SketchWorld as an OBJ file
        SketchWorld.ExportSketchWorldToDefaultPath();

        //Select the SketchObjectGroup
        SketchObjectSelection = Instantiate(Defaults.SketchObjectSelectionPrefab).GetComponent <SketchObjectSelection>();
        Invoker.ExecuteCommand(new AddToSelectionAndHighlightCommand(SketchObjectSelection, SketchObjectGroup));
        Invoker.ExecuteCommand(new ActivateSelectionCommand(SketchObjectSelection));
    }
        public void GetData_ChildGroup()
        {
            SketchObjectGroup newGroup = GameObject.Instantiate(this.Group);

            this.Group.AddToGroup(newGroup);
            SketchObjectGroupData data = (this.Group as ISerializableComponent).GetData() as SketchObjectGroupData;

            Assert.AreEqual(1, data.SketchObjectGroups.Count);
        }
        public IEnumerator SetUpScene()
        {
            yield return(SceneManager.LoadSceneAsync("CommandTestScene", LoadSceneMode.Single));

            this.Ribbon = GameObject.FindObjectOfType <RibbonSketchObject>();
            this.Group  = GameObject.FindObjectOfType <SketchObjectGroup>();
            yield return(null);

            Invoker = new CommandInvoker();
        }
        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);
        }
        public void ApplyData_MultipleChildSketchObjects()
        {
            SketchObjectGroup newGroup = GameObject.Instantiate(this.Group);

            this.Group.AddToGroup(this.Ribbon);
            this.Group.AddToGroup(this.Patch);
            this.Group.AddToGroup(this.Stroke);

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

            (newGroup as ISerializableComponent).ApplyData(data);

            Assert.AreEqual(3, newGroup.transform.childCount);
            Assert.AreEqual(1, newGroup.GetComponentsInChildren <RibbonSketchObject>().Length);
            Assert.AreEqual(1, newGroup.GetComponentsInChildren <StrokeSketchObject>().Length);
            Assert.AreEqual(1, newGroup.GetComponentsInChildren <PatchSketchObject>().Length);
        }
Beispiel #7
0
    private void groupSerializationTest()
    {
        strokeSketchObject.AddControlPoint(new Vector3(-2, 1, 0));
        strokeSketchObject.AddControlPoint(Vector3.one);
        strokeSketchObject.AddControlPoint(new Vector3(2, 2, 0));
        strokeSketchObject.AddControlPoint(new Vector3(2, 1, 0));

        //lineSketchObject.setLineDiameter(.7f);
        //StartCoroutine(changeDiameter());

        strokeSketchObject2.AddControlPoint(new Vector3(1, 0, 0));
        strokeSketchObject2.AddControlPoint(new Vector3(2, 1, 1));
        strokeSketchObject2.AddControlPoint(new Vector3(3, 2, 0));
        //lineSketchObject2.minimumControlPointDistance = 2f;
        //lineSketchObject2.addControlPointContinuous(new Vector3(3, 1, 0));
        GameObject        groupGO = new GameObject("sketchObjectGroup", typeof(SketchObjectGroup));
        SketchObjectGroup group   = groupGO.GetComponent <SketchObjectGroup>();

        group.AddToGroup(strokeSketchObject);
        group.AddToGroup(strokeSketchObject2);

        SketchObjectGroupData groupData = (group as ISerializableComponent).GetData() as SketchObjectGroupData;
        string xmlFilePath = Serializer.WriteTestXmlFile <SketchObjectGroupData>(groupData);

        Serializer.DeserializeFromXmlFile <SketchObjectGroupData>(out SketchObjectGroupData readGrouptData, xmlFilePath);
        Debug.Log(readGrouptData.SketchObjects[0].GetType());

        SketchObjectGroup deserGroup = Instantiate(defaults.SketchObjectGroupPrefab).GetComponent <SketchObjectGroup>();

        (deserGroup as ISerializableComponent).ApplyData(readGrouptData);

        deserGroup.transform.position += new Vector3(3, 0, 0);

        //GameObject selectionGO = new GameObject("sketchObjectSelection", typeof(SketchObjectSelection));
        //GameObject selectionGO = Instantiate(selectionPrefab);
        //SketchObjectSelection selection = selectionGO.GetComponent<SketchObjectSelection>();
        //selection.addToSelection(lineSketchObject);
        //selection.addToSelection(lineSketchObject2);
        //selection.activate();
        //StartCoroutine(deactivateSelection(selection));
    }
 public AddToGroupCommand(SketchObjectGroup group, IGroupable NewObject)
 {
     Group               = group;
     this.NewObject      = NewObject;
     this.OriginalParent = NewObject.ParentGroup;
 }
Beispiel #9
0
    private void SketchWorldSerializationTest()
    {
        strokeSketchObject.AddControlPoint(new Vector3(-2, 1, 0));
        strokeSketchObject.AddControlPoint(Vector3.one);
        strokeSketchObject.AddControlPoint(new Vector3(2, 2, 0));
        strokeSketchObject.AddControlPoint(new Vector3(2, 1, 0));
        //lineSketchObject.gameObject.GetComponent<MeshRenderer>().material = twoSidedMaterial;
        strokeSketchObject.gameObject.GetComponent <MeshRenderer>().material = ropeMaterial;
        strokeSketchObject.SetStrokeCrossSection(CircularCrossSection.GenerateVertices(4), CircularCrossSection.GenerateVertices(4, 1f), .4f);

        //lineSketchObject.setLineDiameter(.7f);
        //StartCoroutine(changeDiameter());

        strokeSketchObject2.AddControlPoint(new Vector3(1, 0, 0));
        strokeSketchObject2.AddControlPoint(new Vector3(2, 1, 1));
        strokeSketchObject2.AddControlPoint(new Vector3(3, 2, 0));
        strokeSketchObject2.AddControlPoint(new Vector3(4, 4, 4));
        strokeSketchObject2.DeleteControlPoint();
        strokeSketchObject2.DeleteControlPoint();
        strokeSketchObject2.DeleteControlPoint();
        strokeSketchObject2.DeleteControlPoint();
        strokeSketchObject2.DeleteControlPoint();
        strokeSketchObject2.AddControlPoint(new Vector3(1, 0, 0));
        strokeSketchObject2.AddControlPoint(new Vector3(2, 1, 1));
        strokeSketchObject2.AddControlPoint(new Vector3(3, 2, 0));
        strokeSketchObject2.AddControlPoint(new Vector3(4, 4, 4));
        strokeSketchObject2.GetComponent <MeshRenderer>().material.color      = Color.blue;
        strokeSketchObject2.gameObject.GetComponent <MeshRenderer>().material = ropeMaterial;

        patchSketchObject.transform.position += new Vector3(3, 0, 0);
        patchSketchObject.Width = 3;
        patchSketchObject.AddPatchSegment(new List <Vector3> {
            new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(2, 0, 0)
        });
        patchSketchObject.AddPatchSegment(new List <Vector3> {
            new Vector3(0, 0, 1), new Vector3(1, 2, 1), new Vector3(2, 0, 1)
        });
        patchSketchObject.AddPatchSegment(new List <Vector3> {
            new Vector3(0, 0, 2), new Vector3(1, 0, 2), new Vector3(2, 0, 2)
        });

        (List <Vector3> points, List <Quaternion> rotations) = RibbonTest.GetPointTransformation(ControlPointParent);
        ribbonSketchObject.SetControlPoints(points, rotations);
        SketchWorld.AddObject(ribbonSketchObject);

        //lineSketchObject2.minimumControlPointDistance = 2f;
        //lineSketchObject2.addControlPointContinuous(new Vector3(3, 1, 0));
        GameObject        groupGO = new GameObject("sketchObjectGroup", typeof(SketchObjectGroup));
        SketchObjectGroup group   = groupGO.GetComponent <SketchObjectGroup>();

        group.defaults = this.defaults;

        SketchWorld.AddObject(strokeSketchObject);
        group.AddToGroup(strokeSketchObject2);
        group.AddToGroup(patchSketchObject);
        group.transform.position += new Vector3(2.568f, 5.555f, 1.123f);
        SketchWorld.AddObject(group);

        string worldXmlPath = System.IO.Path.Combine(Application.dataPath, "SketchWorldTest.xml");

        SketchWorld.SaveSketchWorld(worldXmlPath);

        SketchWorld2.LoadSketchWorld(worldXmlPath);

        SerializeBrushCollection();

        //SketchObjectGroupData groupData = group.GetData();
        //string xmlFilePath = Serializer.WriteTestXmlFile<SketchObjectGroupData>(groupData);
        //Serializer.DeserializeFromXmlFile<SketchObjectGroupData>(out SketchObjectGroupData readGrouptData, xmlFilePath);
        //Debug.Log(readGrouptData.SketchObjects[0].GetType());

        //SketchObjectGroup deserGroup = Instantiate(defaults.SketchObjectGroupPrefab).GetComponent<SketchObjectGroup>();
        //deserGroup.ApplyData(readGrouptData);

        //deserGroup.transform.position += new Vector3(3, 0, 0);
    }
    // Start is called before the first frame update
    void Start()
    {
        //Create a SketchWorld, many commands require a SketchWorld to be present
        SketchWorld = Instantiate(Defaults.SketchWorldPrefab).GetComponent <SketchWorld>();

        //Create a LineSketchObject
        LineSketchObject = Instantiate(Defaults.LineSketchObjectPrefab).GetComponent <LineSketchObject>();
        Invoker          = new CommandInvoker();
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 2, 3)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 4, 2)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 5, 3)));
        Invoker.ExecuteCommand(new AddControlPointCommand(this.LineSketchObject, new Vector3(1, 5, 2)));
        Invoker.Undo();
        Invoker.Redo();

        LineBrush brush = this.LineSketchObject.GetBrush() as LineBrush;

        brush.CrossSectionVertices = CircularCrossSection.GenerateVertices(3);
        brush.CrossSectionNormals  = CircularCrossSection.GenerateVertices(3, 1);
        Invoker.ExecuteCommand(new SetBrushCommand(this.LineSketchObject, brush));
        //oder ohne Command
        //this.LineSketchObject.SetBrush(brush);
        //oder nur
        //this.LineSketchObject.SetLineCrossSection(...


        //Create a RibbonSketchObject
        RibbonSketchObject = Instantiate(Defaults.RibbonSketchObjectPrefab).GetComponent <RibbonSketchObject>();
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(1, 1, 1), Quaternion.identity));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(1.5f, 1.1f, 1), Quaternion.Euler(0, 0, 0)));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(2f, 1.2f, 1), Quaternion.Euler(22, 0, 0)));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(2.5f, 1.3f, 1), Quaternion.Euler(45, 0, 0)));
        Invoker.ExecuteCommand(new AddPointAndRotationCommand(RibbonSketchObject, new Vector3(3f, 1.4f, 1), Quaternion.Euler(60, 0, 0)));

        //Create a PatchSketchObject
        PatchSketchObject       = Instantiate(Defaults.PatchSketchObjectPrefab).GetComponent <PatchSketchObject>();
        PatchSketchObject.Width = 3;
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(0, 0, 1), new Vector3(0, 1, 2), new Vector3(0, 0, 3)
        }));
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(1, 1, 1), new Vector3(1, 0, 2), new Vector3(1, 1, 3)
        }));
        Invoker.ExecuteCommand(new AddSegmentCommand(PatchSketchObject, new List <Vector3> {
            new Vector3(2, 0, 1), new Vector3(2, 1, 2), new Vector3(2, 0, 3)
        }));

        //Add the LineSketchObject to the SketchWorld
        Invoker.ExecuteCommand(new AddObjectToSketchWorldRootCommand(LineSketchObject, SketchWorld));
        //Create a SketchObjectGroup and add objects to it
        SketchObjectGroup = Instantiate(Defaults.SketchObjectGroupPrefab).GetComponent <SketchObjectGroup>();
        Invoker.ExecuteCommand(new AddToGroupCommand(SketchObjectGroup, RibbonSketchObject));
        Invoker.ExecuteCommand(new AddToGroupCommand(SketchObjectGroup, PatchSketchObject));
        //Add the SketchObjectGroup to the SketchWorld
        Invoker.ExecuteCommand(new AddObjectToSketchWorldRootCommand(SketchObjectGroup, SketchWorld));

        //Serialize the SketchWorld to a XML file
        SavePath = System.IO.Path.Combine(Application.dataPath, "YourSketch.xml");
        SketchWorld.SaveSketchWorld(SavePath);

        //Create another SketchWorld and load the serialized SketchWorld
        DeserializedSketchWorld = Instantiate(Defaults.SketchWorldPrefab).GetComponent <SketchWorld>();
        DeserializedSketchWorld.LoadSketchWorld(SavePath);
        DeserializedSketchWorld.transform.position += new Vector3(5, 0, 0);

        //Export the SketchWorld as an OBJ file
        //SketchWorld.ExportSketchWorldToDefaultPath();

        //Select the SketchObjectGroup
        SketchObjectSelection = Instantiate(Defaults.SketchObjectSelectionPrefab).GetComponent <SketchObjectSelection>();
        Invoker.ExecuteCommand(new AddToSelectionAndHighlightCommand(SketchObjectSelection, SketchObjectGroup));
        Invoker.ExecuteCommand(new ActivateSelectionCommand(SketchObjectSelection));
    }
Beispiel #11
0
 public bool Execute()
 {
     SketchObjectGroup.RemoveFromGroup(Object);
     return(true);
 }
Beispiel #12
0
 public RemoveFromGroupCommand(IGroupable Object)
 {
     this.OriginalParent = Object.ParentGroup;
     this.Object         = Object;
 }