Пример #1
0
    public void AngleConnect(int a0, int a1, int a2)
    {
        _busy++;

        long key = GetAngleConnectionKey(a0, a1, a2);

        if (!anglesDict.ContainsKey(key))
        {
            AngleConnection angleConnection = new AngleConnection(atoms, a0, a1, a2);
            anglesDict[key] = angleConnection;
        }

        _busy--;
    }
Пример #2
0
 //Params
 public Bend GetBendParameter(AngleConnection angleConnection)
 {
     foreach (Bend param in parameters.bends)
     {
         if (angleConnection.atom1.amberName != param.t1)
         {
             continue;
         }
         if (angleConnection.atom0.amberName == param.t0 && angleConnection.atom2.amberName == param.t2)
         {
             return(param);
         }
         if (angleConnection.atom0.amberName == param.t2 && angleConnection.atom2.amberName == param.t0)
         {
             return(param);
         }
     }
     return(null);
 }
Пример #3
0
    void Update()
    {
        //Populate/Display tooltip
        if (activeAtoms == null)
        {
            return;
        }


        if (activeAtoms.selection.Count == 3)
        {
            if (bendBoxContainer.activeSelf == false)
            {
                bendBoxContainer.SetActive(true);
            }

            a0 = activeAtoms.selection[0];
            a1 = activeAtoms.selection[1];
            a2 = activeAtoms.selection[2];

            angleConnection = activeAtoms.graph.GetAngleConnection(a0, a1, a2);

            if (angleConnection == null)
            {
                return;
            }

            atom0 = angleConnection.atom0;
            atom1 = angleConnection.atom1;
            atom2 = angleConnection.atom2;

            bend = activeAtoms.graph.GetBendParameter(angleConnection);

            Mathematics.VectorFromVector3(atom0.p, p0);
            Mathematics.VectorFromVector3(atom1.p, p1);
            Mathematics.VectorFromVector3(atom2.p, p2);

            if (Mathematics.IsEqual(p0, p0Old) && Mathematics.IsEqual(p1, p1Old) && Mathematics.IsEqual(p2, p2Old))
            {
                return;
            }

            Mathematics.GetBendForce(p0, p1, p2, energies, force0, force1, force2, Mathf.Deg2Rad * bend.req, bend.keq);

            atom0Text.text         = string.Format("{0}{1} ({2})", atom0.element, atom0.index, atom0.amberName);
            atom1Text.text         = string.Format("{0}{1} ({2})", atom1.element, atom1.index, atom1.amberName);
            atom2Text.text         = string.Format("{0}{1} ({2})", atom2.element, atom2.index, atom2.amberName);
            angleText.text         = string.Format("{0}", angleConnection.angle);
            energyText.text        = string.Format("{0}", energies[0]);
            gradientText.text      = string.Format("{0}", energies[1]);
            forceConstantText.text = string.Format("{0}", energies[2]);

            Mathematics.Copy(p0, p0Old);
            Mathematics.Copy(p1, p1Old);
            Mathematics.Copy(p2, p2Old);
        }
        else
        {
            bendBoxContainer.SetActive(false);
        }
    }