Example #1
0
        /**
         * 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;
        }
Example #2
0
        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;
        }
Example #3
0
        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);
                    }
                }
            }
        }