예제 #1
0
    //public void AddProteinInstance(string path, Vector3 position, Quaternion rotation)
    //{
    //    if (!ProteinIngredientNames.Contains(path))
    //    {
    //        throw new Exception("Ingredient path do not exists");
    //    }

    //    var ingredientId = ProteinIngredientNames.IndexOf(path);

    //    CPUBuffers.Get.ProteinInstanceInfos.Add(new Vector4(ingredientId, (int) InstanceState.Normal, 0));
    //    CPUBuffers.Get.ProteinInstancePositions.Add(position);
    //    CPUBuffers.Get.ProteinInstanceRotations.Add(MyUtility.QuanternionToVector4(rotation));

    //    TotalNumProteinAtoms += CPUBuffers.Get.ProteinAtomCount[ingredientId];
    //}

    //*** Curve Ingredients ****//

    public void AddCurveIngredient(string path, string pdbName)
    {
        if (SceneHierarchy.Contains(path))
        {
            throw new Exception("Invalid curve ingredient path: " + path);
        }
        if (CurveIngredientNames.Contains(path))
        {
            throw new Exception("Invalid curve ingredient path: " + path);
        }

        AddIngredientToHierarchy(path);
        CurveIngredientNames.Add(path);

        var numSteps      = 1;
        var twistAngle    = 0.0f;
        var segmentLength = 34.0f;
        var color         = new Color(1, 1, 1, 1);

        if (path.Contains("DNA"))
        {
            numSteps      = 12;
            twistAngle    = 34.3f;
            segmentLength = 34.0f;
            color         = Color.yellow;

            var atomSpheres = PdbLoader.LoadAtomSpheres(pdbName);

            CPUBuffers.Get.CurveIngredientsAtomStart.Add(CPUBuffers.Get.CurveIngredientsAtoms.Count);
            CPUBuffers.Get.CurveIngredientsAtomCount.Add(atomSpheres.Count);
            CPUBuffers.Get.CurveIngredientsAtoms.AddRange(atomSpheres);
        }
        //else if (path.Contains("mRNA"))
        else if (path.Contains("RNA"))
        {
            numSteps      = 12;
            twistAngle    = 34.3f;
            segmentLength = 34.0f;
            color         = Color.red;

            var atomSpheres = PdbLoader.LoadAtomSpheres(pdbName);

            CPUBuffers.Get.CurveIngredientsAtomStart.Add(CPUBuffers.Get.CurveIngredientsAtoms.Count);
            CPUBuffers.Get.CurveIngredientsAtomCount.Add(atomSpheres.Count);
            CPUBuffers.Get.CurveIngredientsAtoms.AddRange(atomSpheres);
        }
        else if (path.Contains("peptide"))
        {
            numSteps      = 10;
            twistAngle    = 0;
            segmentLength = 20.0f;
            color         = Color.magenta;

            var atomSphere = new Vector4(0, 0, 0, 3);
            CPUBuffers.Get.CurveIngredientsAtomStart.Add(CPUBuffers.Get.CurveIngredientsAtoms.Count);
            CPUBuffers.Get.CurveIngredientsAtomCount.Add(1);
            CPUBuffers.Get.CurveIngredientsAtoms.Add(atomSphere);
        }
        else if (path.Contains("lypoglycane"))
        {
            numSteps      = 10;
            twistAngle    = 0;
            segmentLength = 20;
            color         = Color.green;

            var atomSphere = new Vector4(0, 0, 0, 8);
            CPUBuffers.Get.CurveIngredientsAtomStart.Add(CPUBuffers.Get.CurveIngredientsAtoms.Count);
            CPUBuffers.Get.CurveIngredientsAtomCount.Add(1);
            CPUBuffers.Get.CurveIngredientsAtoms.Add(atomSphere);
        }
        else
        {
            throw new Exception("Curve ingredient unknown");
        }

        CPUBuffers.Get.CurveIngredientsColors.Add(color);
        CPUBuffers.Get.CurveIngredientToggleFlags.Add(1);
        CPUBuffers.Get.CurveIngredientsInfos.Add(new Vector4(numSteps, twistAngle, segmentLength, 0));
    }
예제 #2
0
    public void AddCurveIngredient(string name, string pdbName)
    {
        if (ProteinNames.Contains(name))
        {
            return;
        }

        int   numSteps      = 1;
        float twistAngle    = 0;
        float segmentLength = 34.0f;
        var   color         = Helper.GetRandomColor();

        if (name.Contains("DNA"))
        {
            numSteps      = 12;
            twistAngle    = 34.3f;
            segmentLength = 34.0f;
            color         = Color.yellow;

            var atomSpheres = PdbLoader.LoadAtomSpheres(pdbName);
            CurveIngredientsAtomCount.Add(atomSpheres.Count);
            CurveIngredientsAtomStart.Add(CurveIngredientsAtoms.Count);
            CurveIngredientsAtoms.AddRange(atomSpheres);
        }
        else if (name.Contains("mRNA"))
        {
            numSteps      = 12;
            twistAngle    = 34.3f;
            segmentLength = 34.0f;
            color         = Color.red;

            var atomSpheres = PdbLoader.LoadAtomSpheres(pdbName);
            CurveIngredientsAtomCount.Add(atomSpheres.Count);
            CurveIngredientsAtomStart.Add(CurveIngredientsAtoms.Count);
            CurveIngredientsAtoms.AddRange(atomSpheres);
        }
        else if (name.Contains("peptide"))
        {
            numSteps      = 10;
            twistAngle    = 0;
            segmentLength = 20.0f;
            color         = Color.magenta;

            var atomSphere = new Vector4(0, 0, 0, 3);
            CurveIngredientsAtomCount.Add(1);
            CurveIngredientsAtomStart.Add(CurveIngredientsAtoms.Count);
            CurveIngredientsAtoms.Add(atomSphere);
        }
        else if (name.Contains("lypoglycane"))
        {
            numSteps      = 10;
            twistAngle    = 0;
            segmentLength = 20;
            color         = Color.green;

            var atomSphere = new Vector4(0, 0, 0, 8);
            CurveIngredientsAtomCount.Add(1);
            CurveIngredientsAtomStart.Add(CurveIngredientsAtoms.Count);
            CurveIngredientsAtoms.Add(atomSphere);
        }
        else
        {
            throw new Exception("Curve ingredient unknown");
        }

        CurveIngredientsNames.Add(name);
        CurveIngredientsColors.Add(color);
        CurveIngredientToggleFlags.Add(1);
        CurveIngredientsInfos.Add(new Vector4(numSteps, twistAngle, segmentLength));
    }