/** * private void Awake() * { * worldPosition = Vector3.zero; * selectionRadius = 0f; * //unitaryTaskOn = false; * * } **/ private void PrepareThread() { Matrix4x4 world_to_local = data.gameObject.transform.worldToLocalMatrix; Vector3 selflocalpos = world_to_local.MultiplyPoint3x4(worldPosition); Mesh mesh = data.gameObject.GetComponent <MeshFilter>().mesh; Vector3[] points = mesh.vertices; Color[] colors = new Color[points.Length]; selectedPoints = data.globalMetaData.FreeSelectionIDList; SphereSelectionThreadHandler newHandler = new SphereSelectionThreadHandler(selectionRadius, data, selflocalpos, colors); Thread newThread = new Thread(new ThreadStart(newHandler.ThreadLoop)); newHandler.thread = newThread; newThread.Start(); Thread = newHandler; }
public void DoSelectionOnce() { Matrix4x4 world_to_local = data.gameObject.transform.worldToLocalMatrix; Vector3 selfworldpos = transform.position; Vector3 selflocalpos = world_to_local.MultiplyPoint3x4(selfworldpos); Mesh mesh = data.gameObject.GetComponent <MeshFilter>().mesh; Vector3[] points = mesh.vertices; Color[] colors = new Color[points.Length]; SphereSelectionThreadHandler newHandler = new SphereSelectionThreadHandler(radius, data, selflocalpos, colors); Thread newThread = new Thread(new ThreadStart(newHandler.ThreadLoop)); newHandler.thread = newThread; newThread.Start(); Thread = newHandler; unitaryTaskOn = true; }
private void OnTriggerStay(Collider cloud_box) { if (taskOn) { if (cloud_box.tag == "PointCloud") { data = cloud_box.transform.parent.GetComponentInChildren <CloudData>(); if (ThreadList.Count != 0) { SphereSelectionThreadHandler latestThread = ThreadList.Peek(); if (latestThread.isFinished == true) { latestThread = ThreadList.Dequeue(); selectedPoints = latestThread.pointSelectionList; latestThread.thread.Join(); } } Matrix4x4 world_to_local = data.gameObject.transform.worldToLocalMatrix; Vector3 selfworldpos = transform.position; Vector3 selflocalpos = world_to_local.MultiplyPoint3x4(selfworldpos); Mesh mesh = data.gameObject.GetComponent <MeshFilter>().mesh; Vector3[] points = mesh.vertices; Color[] colors = new Color[points.Length]; if (ThreadList.Count < maxThreadsNumber) { SphereSelectionThreadHandler newHandler = new SphereSelectionThreadHandler(radius, data, selflocalpos, colors); Thread newThread = new Thread(new ThreadStart(newHandler.ThreadLoop)); newHandler.thread = newThread; newThread.Start(); ThreadList.Enqueue(newHandler); } } } }