Esempio n. 1
0
    private void RemoveSameAlignData(List <AlignData> alignDatas)
    {
        IList <UILineInfo> lines            = cachedTextGenerator.lines;
        List <AlignData>   removeAlignDatas = new List <AlignData>();

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];


            for (int j = 0; j < lines.Count; j++)
            {
                UILineInfo lInfo = lines[j];
                if (lInfo.startCharIdx <= alignData.startCharIndex)
                {
                    alignData.lineIndex          = j;
                    alignData.lineStartCharIndex = lInfo.startCharIdx;
                    if (j == lines.Count - 1)
                    {
                        if (alignData.startCharIndex > cachedTextGenerator.characterCountVisible)
                        {
                            removeAlignDatas.Add(alignData);
                        }
                        else
                        {
                            alignData.lineEndCharIndex = cachedTextGenerator.characterCountVisible;
                        }
                    }
                }
                else
                {
                    alignData.lineEndCharIndex = lInfo.startCharIdx - 1;
                    break;
                }
            }

            alignDatas[i] = alignData;
        }

        List <int> lineList = new List <int>();

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];
            //Debug.Log("alignData.lineIndex :" + alignData.lineIndex);
            if (lineList.Contains(alignData.lineIndex))
            {
                removeAlignDatas.Add(alignData);
                continue;
            }
            else
            {
                lineList.Add(alignData.lineIndex);
            }
        }
        for (int i = 0; i < removeAlignDatas.Count; i++)
        {
            alignDatas.Remove(removeAlignDatas[i]);
        }
    }
Esempio n. 2
0
            public static void GetEnergies(AlignData data1, IList <Vector> coords2
                                           , out double pot_rmsd, out double pot_enrg, out double pot_enrg_full, out double pot_enrg_anisou
                                           , Pdb pdb2           = null
                                           , string pdb2outpath = null
                                           )
            {
                Anisou[] anisous1;// = data1.GetAnisous();
                double[] bfactor1;
                {
                    List <Mode> modes = new List <Mode>(data1.GetModes());
                    for (int i = 0; i < 6; i++)
                    {
                        modes.RemoveAt(0);
                    }
                    bfactor1 = HBioinfo.GetBFactor(modes.ToArray(), data1.masses);
                    HDebug.Assert(data1.size == bfactor1.Length);
                    anisous1 = Anisou.FromBFactor(bfactor1, scale: 10000 * 1000);
                }
                //Trans3 trans = MinAnisou.GetTrans(data1.coords, anisous1, coords2);
                Trans3        trans        = GetTrans(data1.coords, bfactor1, coords2);
                List <Vector> coords2trans = new List <Vector>(trans.GetTransformed(coords2));

                if (pdb2 != null && pdb2outpath != null)
                {
                    data1.pdb.ToFile(pdb2outpath, coords2trans, anisous: anisous1.GetUs());
                }

                pot_rmsd        = data1.GetRmsdFrom(coords2trans);
                pot_enrg        = data1.GetEnergyFromDiag(coords2trans);
                pot_enrg_full   = data1.GetEnergyFromFull(coords2trans);
                pot_enrg_anisou = data1.GetEnergyFromAnisou(coords2trans);
            }
Esempio n. 3
0
        // This updates the dragging
        private void Update()
        {
            snaptocardinaldirection = (General.Interface.ShiftState && General.Interface.AltState);             //mxd
            snaptogrid          = (snaptocardinaldirection || General.Interface.ShiftState ^ General.Interface.SnapToGrid);
            snaptonearest       = General.Interface.CtrlState;
            snaptogridincrement = (!snaptocardinaldirection && General.Interface.AltState);             //mxd

            //mxd. Snap to nearest linedef
            if (selectedthings.Count == 1 && snaptonearest && !snaptocardinaldirection &&
                Thing.AlignableRenderModes.Contains(dragitem.RenderMode) &&
                MoveThingsRelative(mousemappos - dragstartmappos, snaptogrid, snaptogridincrement, false, false))
            {
                Linedef l = General.Map.Map.NearestLinedefRange(oldpositions[0] + mousemappos - dragstartmappos, BuilderPlug.Me.StitchRange / renderer.Scale);
                bool    restoresettings = false;
                if (aligndata == null)
                {
                    aligndata = new AlignData(dragitem);
                }

                if (l != null)
                {
                    if (Tools.TryAlignThingToLine(dragitem, l))
                    {
                        aligndata.Position = new PointF(dragitem.Position.x, dragitem.Position.y);
                        aligndata.Active   = true;
                    }
                    else if (dragitem.AngleDoom != aligndata.InitialAngle)                    //restore initial angle?
                    {
                        restoresettings = true;
                    }
                }
                else if (dragitem.AngleDoom != aligndata.InitialAngle)                //restore initial angle?
                {
                    restoresettings = true;
                }

                if (restoresettings)
                {
                    aligndata.Position = PointF.Empty;
                    aligndata.Active   = false;
                    dragitem.Rotate(aligndata.InitialAngle);
                }

                UpdateRedraw();                // Redraw
                renderer.Present();

                return;
            }

            // Move selected geometry
            if (MoveThingsRelative(mousemappos - dragstartmappos, snaptogrid, snaptogridincrement, snaptonearest, snaptocardinaldirection))
            {
                // Redraw
                UpdateRedraw();
                renderer.Present();
            }
        }
Esempio n. 4
0
            public static AlignData FromFiles(string path_pdb, string path_hess, IList <double> masses, string cachebase = null)
            {
                AlignData data = new AlignData();

                data.pdb       = Pdb.FromFile(path_pdb);
                data.coords    = data.pdb.atoms.ListCoord();
                data.cachebase = cachebase;
                int n = data.coords.Count;

                {   // data.hess
                    List <string> lines = HFile.ReadLines(path_hess).ToList();
                    int           row, col;
                    {
                        string[] tokens = lines[1].Split(new char[] { ' ', ',', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                        HDebug.Assert(tokens.Length == 2);
                        row = int.Parse(tokens[0]);
                        col = int.Parse(tokens[1]);
                        HDebug.Assert(row == col);
                    }
                    HDebug.Assert(row == n * 3, col == n * 3);
                    MatrixByArr[,] hess = new MatrixByArr[n, n];
                    for (int c = 0; c < n; c++)
                    {
                        for (int r = 0; r < n; r++)
                        {
                            hess[c, r] = new double[3, 3];
                        }
                    }
                    for (int c = 0; c < col; c++)
                    {
                        string   line   = lines[c + 2];
                        string[] tokens = line.Split(new char[] { ' ', ',', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                        HDebug.Assert(tokens.Length == row);
                        for (int r = 0; r < row; r++)
                        {
                            double val = double.Parse(tokens[r]);
                            hess[c / 3, r / 3][c % 3, r % 3] += val;
                            hess[r / 3, c / 3][r % 3, c % 3] += val;
                        }
                    }
                    for (int c = 0; c < n; c++)
                    {
                        for (int r = 0; r < n; r++)
                        {
                            hess[c, r] /= 2;
                        }
                    }
                    data.hess = hess;
                }

                data.masses = masses.ToArray();

                return(data);
            }
Esempio n. 5
0
            public static void GetEnergies(AlignData data1, IList <Vector> coords2
                                           , out double geo_rmsd, out double geo_enrg, out double geo_enrg_full, out double geo_enrg_anisou
                                           , Pdb pdb2, string pdb2outpath
                                           )
            {
                Trans3        trans        = GetTrans(data1.coords, coords2);
                List <Vector> coords2trans = new List <Vector>(trans.GetTransformed(coords2).ToArray());

                if (pdb2 != null && pdb2outpath != null)
                {
                    pdb2.ToFile(pdb2outpath, coords2);
                }

                geo_rmsd        = data1.GetRmsdFrom(coords2trans);
                geo_enrg        = data1.GetEnergyFromDiag(coords2trans);
                geo_enrg_full   = data1.GetEnergyFromFull(coords2trans);
                geo_enrg_anisou = data1.GetEnergyFromAnisou(coords2trans);
            }
Esempio n. 6
0
            //public static Trans3 GetTrans(IList<Vector> C1, Matrix[] anisou1, IList<Vector> C2)
            //{
            //    int size = C1.Count;
            //    Tuple<Vector[], double[]>[] eigs1 = new Tuple<Vector[], double[]>[size];
            //    {
            //        for(int i=0; i<size; i++)
            //        {
            //            Vector[] eigvec;
            //            double[] eigval;
            //            Debug.Verify(NumericSolver.Eig(anisou1[i], out eigvec, out eigval));
            //            {   // normalize eigval and eigvec
            //                double l;
            //                l = eigvec[0].Dist; eigvec[0] /= l; eigval[0] *= (l*l); eigval[0] = Math.Pow(eigval[0], 2); Debug.Assert(eigval[0] >= 0);
            //                l = eigvec[1].Dist; eigvec[1] /= l; eigval[1] *= (l*l); eigval[1] = Math.Pow(eigval[1], 2); Debug.Assert(eigval[1] >= 0);
            //                l = eigvec[2].Dist; eigvec[2] /= l; eigval[2] *= (l*l); eigval[2] = Math.Pow(eigval[2], 2); Debug.Assert(eigval[2] >= 0);
            //            }
            //            {
            //                eigval[0] = 1 / eigval[0];
            //                eigval[1] = 1 / eigval[1];
            //                eigval[2] = 1 / eigval[2];
            //            }
            //            eigs1[i] = new Tuple<Vector[], double[]>(eigvec, eigval);
            //        }
            //    }
            //    return GetTrans(C1, eigs1, C2);
            //}

            public static void GetEnergies(AlignData data1, IList <Vector> coords2
                                           , out double pot_rmsd, out double pot_enrg, out double pot_enrg_full, out double pot_enrg_anisou
                                           , Pdb pdb2           = null
                                           , string pdb2outpath = null
                                           )
            {
                Anisou[]      anisous1     = data1.GetAnisous();
                Trans3        trans        = GetTrans(data1.coords, anisous1, coords2);
                List <Vector> coords2trans = new List <Vector>(trans.GetTransformed(coords2));

                if (pdb2 != null && pdb2outpath != null)
                {
                    pdb2.ToFile(pdb2outpath, coords2trans);
                }
                //data1.pdb.ToFile(pdb2outpath, coords2trans, anisous: anisous1.GetUs());

                pot_rmsd        = data1.GetRmsdFrom(coords2trans);
                pot_enrg        = data1.GetEnergyFromDiag(coords2trans);
                pot_enrg_full   = data1.GetEnergyFromFull(coords2trans);
                pot_enrg_anisou = data1.GetEnergyFromAnisou(coords2trans);
            }
Esempio n. 7
0
    private void RichTextAlignDataSupport(VertexHelper toFill)
    {
        if (!supportRichText)
        {
            base.OnPopulateMesh(toFill);
            return;
        }

        string changedText = "";
        var    orignText   = m_Text;

        m_Text      = DealWithTextContent(m_Text);
        changedText = m_Text;
        base.OnPopulateMesh(toFill);
        m_Text = orignText;

        IList <UILineInfo> lines      = cachedTextGenerator.lines;
        IList <UICharInfo> characters = cachedTextGenerator.characters;
        Rect rectExtents = cachedTextGenerator.rectExtents;
        //Debug.Log("cachedTextGenerator.characterCountVisible :"+cachedTextGenerator.characterCountVisible);
        List <UIVertex> stream = new List <UIVertex>();

        toFill.GetUIVertexStream(stream);

        List <AlignData> removeAlignDatas = new List <AlignData>();

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];


            for (int j = 0; j < lines.Count; j++)
            {
                UILineInfo lInfo = lines[j];
                if (lInfo.startCharIdx <= alignData.startCharIndex)
                {
                    alignData.lineIndex          = j;
                    alignData.lineStartCharIndex = lInfo.startCharIdx;
                    if (j == lines.Count - 1)
                    {
                        if (alignData.startCharIndex > cachedTextGenerator.characterCountVisible)
                        {
                            removeAlignDatas.Add(alignData);
                        }
                        else
                        {
                            alignData.lineEndCharIndex = cachedTextGenerator.characterCountVisible;
                        }
                    }
                }
                else
                {
                    alignData.lineEndCharIndex = lInfo.startCharIdx - 1;
                    break;
                }
            }

            alignDatas[i] = alignData;
        }
        List <int> lineList = new List <int>();

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];
            //Debug.Log("alignData.lineIndex :" + alignData.lineIndex);
            if (lineList.Contains(alignData.lineIndex))
            {
                removeAlignDatas.Add(alignData);
                continue;
            }
            else
            {
                lineList.Add(alignData.lineIndex);
            }
        }
        for (int i = 0; i < removeAlignDatas.Count; i++)
        {
            alignDatas.Remove(removeAlignDatas[i]);
        }
        //Debug.Log("alignDatas :" + alignDatas.Count);

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];
            //Debug.Log("characters.Count :" + characters.Count + "  stream.Count:" + stream.Count + "  alignData.lineEndCharIndex:" + alignData.lineEndCharIndex);
            if (alignData.lineEndCharIndex >= characters.Count)
            {
                continue;
            }
            if (alignData.lineStartCharIndex >= characters.Count)
            {
                continue;
            }
            if ((alignData.lineEndCharIndex * 6) > stream.Count)
            {
                continue;
            }
            if (alignData.lineStartCharIndex * 6 >= stream.Count)
            {
                continue;
            }
            if (alignData.alignType == AlignType.Right)
            {
                UICharInfo uiChar   = characters[alignData.lineEndCharIndex];
                float      detaMove = rectExtents.width / 2 - uiChar.cursorPos.x - uiChar.charWidth;

                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    ver.position += new Vector3(detaMove, 0, 0);
                    //ver.color = Color.red;
                    stream[v] = ver;
                }
            }
            else if (alignData.alignType == AlignType.Left)
            {
                UICharInfo uiChar   = characters[alignData.lineStartCharIndex];
                float      detaMove = (-rectExtents.width / 2) - uiChar.cursorPos.x;
                //Debug.Log("LLeft alignData.lineStartCharIndex:" + alignData.lineStartCharIndex + "  alignData.lineEndCharIndex:" + alignData.lineEndCharIndex);
                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    ver.position += new Vector3(detaMove, 0, 0);
                    //ver.color = Color.green;
                    stream[v] = ver;
                }
            }
            else if (alignData.alignType == AlignType.Center)
            {
                float lineCharLenth = 0;
                for (int j = alignData.lineStartCharIndex; j < alignData.lineEndCharIndex; j++)
                {
                    lineCharLenth += characters[j].charWidth;
                }


                float detaMove = -lineCharLenth / 2 - characters[alignData.lineStartCharIndex].cursorPos.x;

                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    ver.position += new Vector3(detaMove, 0, 0);
                    //ver.color = Color.blue;
                    stream[v] = ver;
                }
            }
        }
        toFill.AddUIVertexTriangleStream(stream);
    }
Esempio n. 8
0
    private string DealWithTextContent(string content)
    {
        alignDatas.Clear();

        var temp = content;

        while (true)
        {
            for (int i = 0; i < temp.Length; i++)
            {
                if (temp[i] == '<')
                {
                    int    surplusLenth = temp.Length - i - 1;
                    string testStr      = "";
                    bool   isResult     = false;
                    if (surplusLenth >= alignRightString.Length)
                    {
                        testStr = temp.Substring(i, alignRightString.Length);
                        if (testStr == alignRightString)
                        {
                            isResult = true;
                            AlignData align = new AlignData();
                            align.alignType      = AlignType.Right;
                            align.startCharIndex = i;
                            alignDatas.Add(align);
                        }
                    }

                    if (!isResult)
                    {
                        if (surplusLenth >= alignLeftString.Length)
                        {
                            testStr = temp.Substring(i, alignLeftString.Length);
                            if (testStr == alignLeftString)
                            {
                                isResult = true;
                                AlignData align = new AlignData();
                                align.alignType      = AlignType.Left;
                                align.startCharIndex = i;
                                alignDatas.Add(align);
                            }
                        }
                    }
                    if (!isResult)
                    {
                        if (surplusLenth >= alignCenterString.Length)
                        {
                            testStr = temp.Substring(i, alignCenterString.Length);
                            if (testStr == alignCenterString)
                            {
                                isResult = true;
                                AlignData align = new AlignData();
                                align.alignType      = AlignType.Center;
                                align.startCharIndex = i;
                                alignDatas.Add(align);
                            }
                        }
                    }

                    if (isResult)
                    {
                        temp = temp.Remove(i, testStr.Length);
                        i    = 0;
                    }
                }
            }
            break;
        }

        //Debug.Log("alignDatas :" + alignDatas.Count);
        return(temp);
    }
Esempio n. 9
0
    private void RichTextAlignDataSupport(VertexHelper toFill)
    {
        if (!supportRichText)
        {
            base.OnPopulateMesh(toFill);
            return;
        }
        List <AlignData> alignDatas = new List <AlignData>();
        //string changedText = "";
        var orignText = m_Text;

        m_Text = DealWithTextContent(m_Text, ref alignDatas);
        //changedText = m_Text;
        base.OnPopulateMesh(toFill);
        m_Text = orignText;

        RectTransform rectTransform = GetComponent <RectTransform>();
        float         rangeWith     = rectTransform.sizeDelta.x;


        IList <UICharInfo> characters = cachedTextGenerator.characters;
        Rect rectExtents = cachedTextGenerator.rectExtents;

        List <UIVertex> stream = new List <UIVertex>();

        toFill.GetUIVertexStream(stream);
        toFill.Clear();


        RemoveSameAlignData(alignDatas);

        for (int i = 0; i < alignDatas.Count; i++)
        {
            AlignData alignData = alignDatas[i];
            //Debug.Log("characters.Count :" + characters.Count + "  stream.Count:" + stream.Count + "  alignData.lineEndCharIndex:" + alignData.lineEndCharIndex);
            if (alignData.lineEndCharIndex >= characters.Count)
            {
                continue;
            }
            if (alignData.lineStartCharIndex >= characters.Count)
            {
                continue;
            }
            if ((alignData.lineEndCharIndex * 6) > stream.Count)
            {
                continue;
            }
            if (alignData.lineStartCharIndex * 6 >= stream.Count)
            {
                continue;
            }

            int indexEnd   = alignData.lineEndCharIndex * 6 - 3;
            int indexStart = alignData.lineStartCharIndex * 6;
            if (alignData.alignType == AlignType.Right)
            {
                float detaMove = rangeWith / 2 - stream[indexEnd].position.x;
                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    //if (v >= ((alignData.lineEndCharIndex - 1) * 6) && v <= (alignData.lineEndCharIndex * 6))
                    //Debug.Log("Pos :" + ver.position);
                    ver.position += new Vector3(detaMove, 0, 0);

                    //  ver.color = Color.red;
                    stream[v] = ver;
                }
            }
            else if (alignData.alignType == AlignType.Left)
            {
                float detaMove = (-rangeWith / 2) - stream[indexStart].position.x;
                //Debug.Log("LLeft alignData.lineStartCharIndex:" + alignData.lineStartCharIndex + "  alignData.lineEndCharIndex:" + alignData.lineEndCharIndex);
                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    ver.position += new Vector3(detaMove, 0, 0);
                    //if(v== (alignData.lineEndCharIndex * 6-1))
                    //ver.color = Color.green;
                    stream[v] = ver;
                }
            }
            else if (alignData.alignType == AlignType.Center)
            {
                float lineCharLenth = Mathf.Abs(stream[indexEnd].position.x) + Mathf.Abs(stream[indexStart].position.x);
                float detaMove      = (lineCharLenth) / 2 - stream[indexEnd].position.x;

                for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++)
                {
                    UIVertex ver = stream[v];
                    ver.position += new Vector3(detaMove, 0, 0);
                    //ver.color = Color.blue;
                    stream[v] = ver;
                }
            }
        }
        toFill.AddUIVertexTriangleStream(stream);
    }