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); }
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; }
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)); }
public bool Execute() { SketchObjectGroup.RemoveFromGroup(Object); return(true); }
public RemoveFromGroupCommand(IGroupable Object) { this.OriginalParent = Object.ParentGroup; this.Object = Object; }