Skip to content
Snippets Groups Projects
Commit bacdce81 authored by Tobias Schöner's avatar Tobias Schöner
Browse files

Added snapping to circle

parent aa6e4878
No related branches found
No related tags found
1 merge request!1feat: added visualisation for CircleFact; added Torus- and ConeGenerator
...@@ -166,7 +166,6 @@ void Update() ...@@ -166,7 +166,6 @@ void Update()
else if (multipleHits[i].collider.gameObject.layer == LayerMask.NameToLayer("Ring")) else if (multipleHits[i].collider.gameObject.layer == LayerMask.NameToLayer("Ring"))
{ {
#region Ring #region Ring
Debug.Log("PRINT");
var id = multipleHits[i].transform.GetComponent<FactObject>().URI; var id = multipleHits[i].transform.GetComponent<FactObject>().URI;
CircleFact circleFact = StageStatic.stage.factState[id] as CircleFact; CircleFact circleFact = StageStatic.stage.factState[id] as CircleFact;
Vector3 middlePoint = ((PointFact)StageStatic.stage.factState[circleFact.Pid1]).Point; Vector3 middlePoint = ((PointFact)StageStatic.stage.factState[circleFact.Pid1]).Point;
...@@ -192,6 +191,7 @@ void Update() ...@@ -192,6 +191,7 @@ void Update()
var direction = (pPlane - middlePoint).normalized; var direction = (pPlane - middlePoint).normalized;
multipleHits[i].point = middlePoint + direction * radius; multipleHits[i].point = middlePoint + direction * radius;
} }
// cursor orientation should match circle orientation; dont face downwards // cursor orientation should match circle orientation; dont face downwards
if (normal.y < 0) // if normal faces downwards use inverted normal instead if (normal.y < 0) // if normal faces downwards use inverted normal instead
multipleHits[i].normal = -normal; multipleHits[i].normal = -normal;
...@@ -199,6 +199,29 @@ void Update() ...@@ -199,6 +199,29 @@ void Update()
multipleHits[i].normal = normal; multipleHits[i].normal = normal;
#endregion Ring #endregion Ring
} }
else if (multipleHits[i].collider.gameObject.layer == LayerMask.NameToLayer("Circle"))
{
#region Circle
var id = multipleHits[i].transform.GetComponent<FactObject>().URI;
CircleFact circleFact = StageStatic.stage.factState[id] as CircleFact;
Vector3 middlePoint = ((PointFact)StageStatic.stage.factState[circleFact.Pid1]).Point;
Vector3 edgePoint = ((PointFact)StageStatic.stage.factState[circleFact.Pid2]).Point;
var normal = circleFact.normal;
var radius = circleFact.radius;
// project p on circlePlane
var q = multipleHits[i].point - middlePoint;
var dist = Vector3.Dot(q, normal);
var pPlane = multipleHits[i].point - (normal * dist); // p on circlePlane
multipleHits[i].point = pPlane;
// cursor orientation should match circle orientation; dont face downwards
if (normal.y < 0) // if normal faces downwards use inverted normal instead
multipleHits[i].normal = -normal;
else
multipleHits[i].normal = normal;
#endregion Circle
}
else else
{ {
multipleHits[i].point = multipleHits[i].collider.transform.position; multipleHits[i].point = multipleHits[i].collider.transform.position;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment