public override void OnHit(RaycastHit hit) { if (!this.isActiveAndEnabled) { return; } var pid = FactManager.AddPointFact(hit).Id; if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Ray")) { FactManager.AddOnLineFact(pid, hit.transform.GetComponent <FactObject>().URI, true); } }
public override void OnHit(RaycastHit hit) { void CreateRayAndAngles(string pidIntersectionPoint, string pidLotPoint, bool samestep) { FactManager.AddRayFact(pidIntersectionPoint, pidLotPoint, samestep); //TODO: create at all? / for all points on basline? FactManager.AddAngleFact( this.LotModeLineSelected.Pid1 == pidIntersectionPoint ? this.LotModeLineSelected.Pid2 : this.LotModeLineSelected.Pid1, pidIntersectionPoint, pidLotPoint, true); } if (!this.isActiveAndEnabled) { return; } //If LotPoint is on baseLine if (this.LotModeIsPointSelected && (hit.transform.gameObject.layer == LayerMask.NameToLayer("Default") || hit.transform.gameObject.layer == LayerMask.NameToLayer("Tree"))) { Vector3 LotPoint = Math3d.ProjectPointOnLine(hit.point, this.LotModeLineSelected.Dir, this.LotModeIntersectionPoint.Point); //TODO: which normal? CreateRayAndAngles(this.LotModeIntersectionPoint.Id, FactManager.AddPointFact(LotPoint, hit.normal).Id, true); this.ResetGadget(); } //If baseline already selected and point selected else if (this.LotModeIsLineSelected && !this.LotModeIsPointSelected && hit.transform.gameObject.layer == LayerMask.NameToLayer("Point")) { PointFact tempFact = StageStatic.stage.factState[hit.transform.GetComponent <FactObject>().URI] as PointFact; Vector3 intersectionPoint = Math3d.ProjectPointOnLine(this.LotModeLinePointA.Point, this.LotModeLineSelected.Dir, tempFact.Point); if (intersectionPoint == tempFact.Point) // Vector3.operator== tests for almost Equal() { //TempFact is on baseLine this.LotModeIsPointSelected = true; this.LotModeIntersectionPoint = tempFact; return; } //TODO: test Facts existance //add Facts var intersectionId = FactManager.AddPointFact(intersectionPoint, this.LotModeLineHit.normal).Id; if (this.LotModeLineSelected is RayFact) //Add OnLineFact only on Ray not Line { FactManager.AddOnLineFact(intersectionId, this.LotModeLineSelected.Id, true); } CreateRayAndAngles(intersectionId, tempFact.Id, true); this.ResetGadget(); } //If nothing yet selected else if (!this.LotModeIsLineSelected && (hit.transform.gameObject.layer == LayerMask.NameToLayer("Ray") || hit.transform.gameObject.layer == LayerMask.NameToLayer("Line"))) { Fact tempFact = StageStatic.stage.factState[hit.transform.GetComponent <FactObject>().URI]; //Activate LineDrawing for preview this.LotModeIsLineSelected = true; this.LotModeLineSelected = tempFact as AbstractLineFact; this.LotModeLinePointA = (PointFact)StageStatic.stage.factState[this.LotModeLineSelected.Pid1]; this.LotModeLineHit = hit; this.ActivateLineDrawing(); } //unexpected usage else { if (this.LotModeIsLineSelected) { //Deactivate LineDrawing and first point selection this.ResetGadget(); } } }