From bb9328a10639871e4d29f6ea73f45eed6d88d407 Mon Sep 17 00:00:00 2001 From: BenniHome <benjamin.boesl@studium.fau.de> Date: Wed, 1 Apr 2020 20:04:48 +0200 Subject: [PATCH] cheated directions --- Assets/InteractionEngine/Fact.cs | 95 +++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 14 deletions(-) diff --git a/Assets/InteractionEngine/Fact.cs b/Assets/InteractionEngine/Fact.cs index e63cf21f..596ae179 100644 --- a/Assets/InteractionEngine/Fact.cs +++ b/Assets/InteractionEngine/Fact.cs @@ -1,6 +1,5 @@ using UnityEngine; using UnityEngine.Networking; -using static CommunicationEvents; public abstract class Fact { @@ -9,24 +8,31 @@ public abstract class Fact public string backendURI; public string backendValueURI; // supposed to be null, for Facts without values eg. Points, OpenLines, OnLineFacts... - public string format(float t) { + public string format(float t) + { return t.ToString("0.0000").Replace(',', '.'); } } +public abstract class DirectedFact : Fact +{ + public DirectedFact flippedFact; +} + public class AddFactResponse { //class to Read AddFact Responses. public string factUri; public string factValUri; - public static AddFactResponse sendAdd(string path, string body) { + public static AddFactResponse sendAdd(string path, string body) + { Debug.Log(body); //Put constructor parses stringbody to byteArray internally (goofy workaround) UnityWebRequest www = UnityWebRequest.Put(path, body); www.method = UnityWebRequest.kHttpVerbPOST; www.SetRequestHeader("Content-Type", "application/json"); - + AsyncOperation op = www.Send(); while (!op.isDone) { } if (www.isNetworkError || www.isHttpError) @@ -48,12 +54,13 @@ public class PointFact : Fact public Vector3 Point; public Vector3 Normal; - public PointFact(int i,Vector3 P, Vector3 N) { + public PointFact(int i, Vector3 P, Vector3 N) + { this.Id = i; this.Point = P; this.Normal = N; - string body = @"{ ""a"":" +format(P.x) + @"," + @"""b"":" + format(P.y) + @","+@"""c"":" + format(P.y) + "}"; + string body = @"{ ""a"":" + format(P.x) + @"," + @"""b"":" + format(P.y) + @"," + @"""c"":" + format(P.y) + "}"; Debug.Log(body); AddFactResponse res = AddFactResponse.sendAdd("localhost:8081/fact/add/vector", body); this.backendURI = res.factUri; @@ -63,14 +70,18 @@ public PointFact(int i,Vector3 P, Vector3 N) { public PointFact(int i, float a, float b, float c, string uri) { this.Id = i; - this.Point = new Vector3(a,b,c); - this.Normal = new Vector3(0,1,0); + this.Point = new Vector3(a, b, c); + this.Normal = new Vector3(0, 1, 0); this.backendURI = uri; } + } -public class LineFact : Fact + + + +public class LineFact : DirectedFact { //Id's of the 2 Point-Facts that are connected public int Pid1, Pid2; @@ -78,7 +89,8 @@ public class LineFact : Fact //only for temporary Use of LineFacts. public LineFact() { } - public LineFact(int i, int pid1, int pid2) { + public LineFact(int i, int pid1, int pid2) + { this.Id = i; this.Pid1 = pid1; this.Pid2 = pid2; @@ -91,15 +103,38 @@ public LineFact(int i, int pid1, int pid2) { AddFactResponse res = AddFactResponse.sendAdd("localhost:8081/fact/add/distance", body); this.backendURI = res.factUri; this.backendValueURI = res.factValUri; + this.flippedFact = new LineFact(pid2, pid1); } - public LineFact(int i, int pid1, int pid2, string uri, string valuri) { + // to create flipped fact + public LineFact(int pid1, int pid2) + { + this.Pid1 = pid1; + this.Pid2 = pid2; + PointFact pf1 = CommunicationEvents.Facts.Find((x => x.Id == pid1)) as PointFact; + PointFact pf2 = CommunicationEvents.Facts.Find((x => x.Id == pid2)) as PointFact; + string p1URI = pf1.backendURI; + string p2URI = pf2.backendURI; + float v = (pf1.Point - pf2.Point).magnitude; + string body = @"{ ""pointA"":""" + p1URI + @"""," + @"""pointB"":""" + p2URI + @"""," + @"""value"":" + format(v) + "}"; + AddFactResponse res = AddFactResponse.sendAdd("localhost:8081/fact/add/distance", body); + this.backendURI = res.factUri; + this.backendValueURI = res.factValUri; + } + + //pushout return + public LineFact(int i, int pid1, int pid2, string uri, string valuri) + { this.Id = i; this.Pid1 = pid1; this.Pid2 = pid2; this.backendURI = uri; this.backendValueURI = valuri; + this.flippedFact = new LineFact(pid2, pid1); + } + + } public class OpenLineFact : Fact @@ -141,6 +176,8 @@ public RayFact(int i, int pid1, int pid2, string uri, string valuri) this.backendURI = uri; this.backendValueURI = valuri; } + + } @@ -162,12 +199,14 @@ public OnLineFact(int i, int pid, int lid) AddFactResponse res = AddFactResponse.sendAdd("localhost:8081/fact/add/onLine", body); this.backendURI = res.factUri; this.backendValueURI = res.factValUri; - Debug.Log("created onLine" + this.backendURI + " " + this.backendValueURI); + Debug.Log("created onLine" + this.backendURI + " " + this.backendValueURI); } + + } -public class AngleFact : Fact +public class AngleFact : DirectedFact { //Id's of the 3 Point-Facts, where Pid2 is the point, where the angle is public int Pid1, Pid2, Pid3; @@ -184,7 +223,33 @@ public AngleFact(int i, int pid1, int pid2, int pid3) PointFact pf1 = CommunicationEvents.Facts.Find((x => x.Id == pid1)) as PointFact; PointFact pf2 = CommunicationEvents.Facts.Find((x => x.Id == pid2)) as PointFact; PointFact pf3 = CommunicationEvents.Facts.Find((x => x.Id == pid3)) as PointFact; - + + float v = Vector3.Angle((pf1.Point - pf2.Point), (pf3.Point - pf2.Point)); + if (Mathf.Abs(v - 90.0f) < 0.01) v = 90.0f; + Debug.Log("angle: " + v); + string body = @"{" + + @"""left"":""" + pf1.backendURI + @"""," + + @"""middle"":""" + pf2.backendURI + @"""," + + @"""right"":""" + pf3.backendURI + @"""," + + @"""value"":" + format(v) + + "}"; + Debug.Log(body); + AddFactResponse res = AddFactResponse.sendAdd("localhost:8081/fact/add/angle", body); + this.backendURI = res.factUri; + this.backendValueURI = res.factValUri; + this.flippedFact = new AngleFact(pid3, pid2, pid1); + } + + //to create flipped fact + public AngleFact(int pid1, int pid2, int pid3) + { + this.Pid1 = pid1; + this.Pid2 = pid2; + this.Pid3 = pid3; + PointFact pf1 = CommunicationEvents.Facts.Find((x => x.Id == pid1)) as PointFact; + PointFact pf2 = CommunicationEvents.Facts.Find((x => x.Id == pid2)) as PointFact; + PointFact pf3 = CommunicationEvents.Facts.Find((x => x.Id == pid3)) as PointFact; + float v = Vector3.Angle((pf1.Point - pf2.Point), (pf3.Point - pf2.Point)); if (Mathf.Abs(v - 90.0f) < 0.01) v = 90.0f; Debug.Log("angle: " + v); @@ -200,6 +265,7 @@ public AngleFact(int i, int pid1, int pid2, int pid3) this.backendValueURI = res.factValUri; } + //pushout return public AngleFact(int i, int pid1, int pid2, int pid3, string uri, string valuri) { this.Id = i; @@ -208,6 +274,7 @@ public AngleFact(int i, int pid1, int pid2, int pid3, string uri, string valuri) this.Pid3 = pid3; this.backendURI = uri; this.backendValueURI = valuri; + this.flippedFact = new AngleFact(pid3, pid2, pid1); } } -- GitLab