//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); }
/* * 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); }