public override float GetBoundingRadius() { float radius = base.GetBoundingRadius(); if (Type != TypeEnum.Laser_Barrier || LaserPath == null || m_actorMeshes.Count == 0) { return(radius); } var points = LaserPath.GetPoints(); if (points.Count < 2) { return(radius); } for (int pathPointIndex = 0; pathPointIndex < 2; pathPointIndex++) { if (pathPointIndex >= points.Count) { break; } PathPoint_v2 point = points[pathPointIndex]; float dist = (Transform.Position - point.Transform.Position).Length; if (dist > radius) { radius = dist; } } return(radius); }
public override void Draw(WSceneView view) { if (Type == TypeEnum.Laser_Barrier && LaserPath != null) { Matrix4 centerTrs = Matrix4.CreateTranslation(Transform.Position); m_objRender.Render(view.ViewMatrix, view.ProjMatrix, centerTrs); if (m_actorMeshes.Count > 0) { var wallMountModel = m_actorMeshes[0]; for (int i = 0; i < 4; i++) { if (ColorOverrides.ColorsEnabled[i]) { wallMountModel.SetTevColorOverride(i, ColorOverrides.Colors[i]); } if (ColorOverrides.ConstColorsEnabled[i]) { wallMountModel.SetTevkColorOverride(i, ColorOverrides.ConstColors[i]); } } var points = LaserPath.GetPoints(); if (points.Count < 2) { return; } Vector3 p1 = points[0].Transform.Position; Vector3 p2 = points[1].Transform.Position; Vector3 path_delta = p2 - p1; float y_rot1 = (float)Math.Atan2(path_delta.X, path_delta.Z); float y_rot2 = (float)Math.Atan2(-path_delta.X, -path_delta.Z); Quaternion firstPointRotation = Quaternion.FromAxisAngle(Vector3.UnitY, y_rot1); Quaternion secondPointRotation = Quaternion.FromAxisAngle(Vector3.UnitY, y_rot2); Matrix4 firstTrs = Matrix4.CreateFromQuaternion(firstPointRotation) * Matrix4.CreateTranslation(points[0].Transform.Position); Matrix4 secondTrs = Matrix4.CreateFromQuaternion(secondPointRotation) * Matrix4.CreateTranslation(points[1].Transform.Position); wallMountModel.Render(view.ViewMatrix, view.ProjMatrix, firstTrs); wallMountModel.Render(view.ViewMatrix, view.ProjMatrix, secondTrs); } } else { base.Draw(view); } }
void Update() { if (Input.GetKeyDown(KeyCode.T)) { RunTest(); } if (video && tex2d) { EdgeDetect.image = tex2d; EdgeDetect.Process(); //var path = LaserPath.ConvertEdge(EdgeDetect.chains); //path = LaserPath.OptimizePath(path, 16); } //LaserPath.color = Color.HSVToRGB(Mathf.Clamp((EdgeDetect.brightness - 0.5f) * 2 + 1 / 3f, 1 / 6f, 1 / 2f), 1, 1); LaserPath.color = EdgeDetect.brightness > 0.5f ? Color.cyan : Color.yellow; var path = LaserPath.ConvertEdge(new List <EdgeChain>(EdgeDetect.chains)); DrawLaserPath(path); SerialUtil.instance.dataToSend = path; }