Ejemplo n.º 1
0
        //iType : Atom type index (element)
        //iAtom : Atom index in atomLocationalist
        private void CreateAtomHB(int iType, int iAtom, ArrayList atomLocationalist, Color c, Vector3 v, int order)
        {
            GameObject Atom;

            Atom = GameObject.CreatePrimitive(PrimitiveType.Cube);

/*
 *                      UnityEngine.Object.Destroy(Atom.collider);
 *                      Object.DestroyImmediate(Atom.collider);
 *                      GameObject.DestroyImmediate(Atom.collider); // "good" one
 *                      Atom.AddComponent<Rigidbody>();
 *                      Atom.rigidbody.isKinematic = true;
 *                      Debug.Log("Atom collider?");
 *                      Debug.Log(Atom.collider.ToString());
 *                      GameObject.DestroyObject(Atom.collider);
 */
            float[] fLocation = atomLocationalist[iAtom] as float[];
            Vector3 location  = new Vector3(fLocation[0], fLocation[1], fLocation[2]);

            Atom.transform.Translate(location);
            Atom.renderer.material.SetColor("_Color", c);
//			Atom.transform.parent = AtomCubeParent.transform;
//			Debug.Log(Atom.collider.ToString());

            MoleculeModel.atoms.Add(Atom);

            BallUpdate script;

            if (atomtype == UIData.AtomType.hyperball)
            {
                RuntimePlatform platform = Application.platform;
                switch (platform)
                {
                case RuntimePlatform.WindowsPlayer:
                case RuntimePlatform.WindowsWebPlayer:
                case RuntimePlatform.WindowsEditor:
                    Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL");
                    break;

                default:
                    Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL");
                    break;
                }

                Atom.AddComponent("BallUpdateHB");
                BallUpdateHB comp = Atom.GetComponent <BallUpdateHB>();
                script         = comp;
                comp.rayon     = (float)(v[0]);
                comp.atomcolor = c;
                comp.number    = order;
                comp.z         = (float)(fLocation[2]);
//				Projector proj = Atom.AddComponent<Projector>();
                Atom.AddComponent <Projector>();
//				if(UI.GUIDisplay.file_extension=="xgmml")comp.xgmml=true;
                comp.enabled = true;
                switch (iType)
                {
                case 0:
                    comp.oldrayonFactor = (MoleculeModel.carbonScale) / 100; break;

                case 1:
                    comp.oldrayonFactor = (MoleculeModel.nitrogenScale) / 100; break;

                case 2:
                    comp.oldrayonFactor = (MoleculeModel.oxygenScale) / 100; break;

                case 3:
                    comp.oldrayonFactor = (MoleculeModel.sulphurScale) / 100; break;

                case 4:
                    comp.oldrayonFactor = (MoleculeModel.phosphorusScale) / 100; break;

                case 5:
                    comp.oldrayonFactor = (MoleculeModel.hydrogenScale) / 100; break;

                default:
                    comp.oldrayonFactor = 2.0f; break;
                }
            }
            else
            {
                Atom.AddComponent("BallUpdateCube");
                BallUpdateCube comp1 = Atom.GetComponent <BallUpdateCube>();
                script = comp1;
//				comp1.rayon = Atom.transform.localScale.x*2;
                comp1.rayon = (float)(v[0]) * 2;
                float rayonfactor;
                switch (iType)
                {
                case 0:
                    rayonfactor = (MoleculeModel.carbonScale) / 100; break;

                case 1:
                    rayonfactor = (MoleculeModel.nitrogenScale) / 100; break;

                case 2:
                    rayonfactor = (MoleculeModel.oxygenScale) / 100; break;

                case 3:
                    rayonfactor = (MoleculeModel.sulphurScale) / 100; break;

                case 4:
                    rayonfactor = (MoleculeModel.phosphorusScale) / 100; break;

                case 5:
                    rayonfactor = (MoleculeModel.hydrogenScale) / 100; break;

                default:
                    rayonfactor = 1.0f; break;
                }
                comp1.SetRayonFactor(rayonfactor);
                comp1.number  = order;
                comp1.enabled = true;
            }

            switch (iType)
            {
            case 0: Atom.tag = "C"; break;

            case 1: Atom.tag = "N"; break;

            case 2: Atom.tag = "O"; break;

            case 3: Atom.tag = "S"; break;

            case 4: Atom.tag = "P"; break;

            case 5: Atom.tag = "H"; break;

            default: Atom.tag = "X"; break;
            }
            if (atomtype == UIData.AtomType.particleball)
            {
                Atom.renderer.enabled = false;
            }

            BoxCollider collider = Atom.collider as BoxCollider;
            float       newSize  = script.rayon * 60 / 100;

            collider.size = new Vector3(newSize, newSize, newSize);
        }
Ejemplo n.º 2
0
/*
 *              private void CreateAtomArray(int size) {
 *                      Debug.Log("AtomArray");
 *                      Debug.Log(size);
 *                      hyperballs = new GameObject[size];
 *                      GameObject first = GameObject.CreatePrimitive(PrimitiveType.Cube);
 *                      first.transform.parent = AtomCubeParent.transform;
 *                      hyperballs[0] = first;
 *                      for(int i=1; i<size; i++)
 *                              hyperballs[i] = (GameObject) GameObject.Instantiate(first);
 *              }
 */

        //iAtom : Atom index in atomLocationalist
        private void CreateAtomHB(int iAtom, IList coordinates, IList atomModels)
        {
            GameObject Atom;

            Atom = GameObject.CreatePrimitive(PrimitiveType.Cube);
            float[] fLocation = coordinates[iAtom] as float[];
            Vector3 location  = new Vector3(fLocation[0], fLocation[1], fLocation[2]);

            AtomModel atomModel = atomModels[iAtom] as AtomModel;

            Atom.transform.Translate(location);
            Atom.transform.parent = AtomCubeParent.transform;

            MoleculeModel.atoms.Add(Atom);

            if (atomtype == UIData.AtomType.hyperball)
            {
                //Test platform to choose the good shader
                RuntimePlatform platform = Application.platform;
                switch (platform)
                {
                case RuntimePlatform.WindowsPlayer:
                case RuntimePlatform.WindowsWebPlayer:
                case RuntimePlatform.WindowsEditor:
                    Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL");
                    break;

                default:
                    Atom.renderer.material.shader = Shader.Find("FvNano/Ball HyperBalls OpenGL");
//						Atom.renderer.material.shader=Shader.Find("Custom/BallImprovedZ");
                    break;
                }

                Atom.AddComponent("BallUpdateHB");
                if (UI.GUIDisplay.file_extension == "xgmml")
                {
                    Atom.GetComponent <BallUpdateHB>().z = (float)(fLocation[2]);
                }
            }
            else
            {
                Atom.AddComponent("BallUpdateCube");
                BallUpdateCube comp1 = Atom.GetComponent <BallUpdateCube>();
                comp1.SetRayonFactor(atomModel.scale / 100);
            }

            BallUpdate comp = Atom.GetComponent <BallUpdate>();

//			Debug.Log ("%%%%%%%%%%%%%%%%%%%%% Creating Atom");
//			Debug.Log (iAtom);
            comp.rayon     = atomModel.radius;
            comp.atomcolor = atomModel.baseColor;
            comp.number    = iAtom;
//			Debug.Log (comp.number);
            comp.oldrayonFactor = atomModel.scale / 100;            // Why division by 100 ???

            if (UI.GUIDisplay.file_extension == "xgmml")
            {
                comp.rayon     = ((MoleculeModel.CSRadiusList[iAtom]) as float[])[0];
                comp.atomcolor = HexToColor((MoleculeModel.CSColorList[iAtom] as string[])[0]);
            }

            Atom.renderer.material.SetColor("_Color", comp.atomcolor);

//			Projector proj = Atom.AddComponent<Projector>();
            Atom.AddComponent <Projector>();
            comp.enabled      = true;
            comp.isSplineNode = UIData.secondarystruct;
            Atom.tag          = atomModel.type;

            if (atomtype == UIData.AtomType.particleball)
            {
                Atom.renderer.enabled = false;
            }

            BoxCollider collider = Atom.collider as BoxCollider;
            float       newSize  = comp.rayon * 60 / 100;

            collider.size = new Vector3(newSize, newSize, newSize);
        }