示例#1
0
    // find the nearest dot
    void find_nearest_dot()
    {
        // get cursor position
        Vector3 cursor_position = cursor.transform.position;

        // check cursor range
        Vector3 deltaR   = cursor_position - dashboard_center;
        float   x_cursor = Vector3.Dot(dashboard_x_axis, deltaR);
        float   y_cursor = Vector3.Dot(dashboard_y_axis, deltaR);
        float   z_cursor = Vector3.Dot(dashboard_z_axis, deltaR);

        if (!(Mathf.Abs(x_cursor) < dashboard_Lx / 2 && Mathf.Abs(y_cursor) < dashboard_Ly / 2 && Mathf.Abs(z_cursor) < dashboard_Lz / 2))
        {
            if (dot_selected)
            {
                dot_selected.GetComponent <dot_template>().isHovered = false;
            }
            return;
        }

        // find the nearest dot
        float      d_min   = 1000f;
        GameObject dot_min = null;

        foreach (GameObject dot in dot_list)
        {
            Vector3 dot_position = dot.transform.position;
            dot.GetComponent <dot_template>().isHovered = false;
            float d = (cursor_position - dot_position).magnitude;
            if (d < d_min)
            {
                d_min   = d;
                dot_min = dot;
            }
        }
        dot_template dot_para = dot_min.GetComponent <dot_template>();

        dot_para.isHovered = true;
        int        I_b      = dot_para.I_b;
        List <int> I_b_list = dot_para.I_b_list;

        // plot line
        int I_b_hover;
        int I_b_selected_old = I_b_selected;

        if (I_b_list.Contains(I_b_selected_old))
        {
            I_b_hover = I_b_selected_old;
        }
        else
        {
            I_b_hover = I_b;
        }
        plot_line(line, line_position_list, I_b_hover);
    }
示例#2
0
    //initialization
    void initialization()
    {
        //2020.7.24

        dot_template_pool.PushAll();
        // import image
        string fname = "phonons_png/phonons" + DatabaseIndex;
        bool   tf    = importImage(fname);

        I_k_selected = -1;
        I_b_selected = -1;
        if (!tf)
        {
            //foreach (Transform childObj in ButtonPanel.transform)
            //{
            //    Destroy(childObj.gameObject);
            //}
            return;
        }

        // Button Panel
        ButtonPanel.SetActive(false);

        Loom.RunAsync(() =>
        {
            ////////////////////////////////////////////////////////
            // import data
            string fname2 = DataPath + "phonons" + DatabaseIndex + ".json";
            string text   = File.ReadAllText(fname2);

            JSONObject dict        = (JSONObject)JSON.Parse(text);
            JSONArray EigenvalueX_ = (JSONArray)dict["EigenvalueX"];
            JSONArray EigenvalueY_ = (JSONArray)dict["EigenvalueY"];

            EigenvalueX = JSONArray_to_Array_1d(EigenvalueX_);
            EigenvalueY = JSONArray_to_Array_2d(EigenvalueY_);

            // calc xlim and ylim
            x_min    = EigenvalueX.Cast <float>().Min();
            x_max    = EigenvalueX.Cast <float>().Max();
            float y1 = EigenvalueY.Cast <float>().Min();
            float y2 = EigenvalueY.Cast <float>().Max();
            y_min    = y1 - (y2 - y1) * gamma;
            y_max    = y2 + (y2 - y1) * gamma;

            N_k           = EigenvalueY.GetLength(0);
            N_b           = EigenvalueY.GetLength(1);
            float delta_y = (y_max - y_min) * eps;


            // line position list
            line_position_list = new Vector3[N_b][];
            for (int j = 0; j < N_b; j++)
            {
                Vector3[] position_list = new Vector3[N_k];
                for (int i = 0; i < N_k; i++)
                {
                    float x          = EigenvalueX[i];
                    float y          = EigenvalueY[i, j];
                    Vector3 position = calc_position(x, y, alfa, x_min, x_max, y_min, y_max, center.x, center.y, length.x, length.y);
                    position.z       = z0;
                    position         = Canvas_phonon_rotation * position + Canvas_phonon_position;
                    position_list[i] = position;
                }
                line_position_list[j] = position_list;
            }

            ////////////////////////////////////////////////////////
            Loom.QueueOnMainThread(() =>
            {
                ///////////////////////////////////////////////////////
                dot_list = new GameObject[N_k * N_b];
                for (int i = 0; i < N_k; i++)
                {
                    for (int j = 0; j < N_b; j++)
                    {
                        // get x and y
                        float x = EigenvalueX[i];
                        float y = EigenvalueY[i, j];
                        //calc overlapping band indices
                        var I_b_list = new List <int>();

                        for (int j_ = 0; j_ < N_b; j_++)
                        {
                            float y_ = EigenvalueY[i, j_];
                            if (Mathf.Abs(y - y_) < delta_y)
                            {
                                I_b_list.Add(j_);
                            }
                        }
                        //calc dot position

                        Vector3 dot_position = line_position_list[j][i];
                        dot_position        -= transform.forward * 0.05f;
                        //create dot
                        GameObject dot                 = dot_template_pool.Pop();
                        dot.transform.position         = dot_position;
                        dot_template dot_Template_comp = dot.requireComponent <dot_template>();

                        dot_Template_comp.I_k      = i;
                        dot_Template_comp.I_b      = j;
                        dot_Template_comp.I_b_list = I_b_list;
                        //dot.transform.SetParent(ButtonPanel.transform, false);
                        dot_list[i * N_b + j] = dot;

                        ////////////////////////////////////////////////////////
                    }
                }

                ////////////////////////////////////////////////////////
            });
        });
    }