16 namespace Molecule.View.DisplayAtom {
    19     using System.Collections;
    20     using System.Collections.Generic;
    27         public static GameObject AtomMeshParent = 
new GameObject(
"AtomMeshParent");
    42                 hbmeshManager.enabled = 
true;
    43                 if(AtomMeshParent == null)
    44                     AtomMeshParent = 
new GameObject(
"AtomMeshParent");
    47                 if(AtomMeshParent.GetComponentsInChildren<Renderer>().Length > 0){
    59                 meshesGO = 
new List<GameObject>();
    60                 collidersGO = 
new List<GameObject>();
    61                 Debug.Log(
"DisplayAtoms :: ***clear MolecularModel**** " );
    72                 hbmeshManager.
hball_meshes = (GameObject[]) meshesGO.ToArray();
    73                 hbmeshManager.
collidersGO = (GameObject[]) collidersGO.ToArray();
    77                 hbmeshManager.enabled = 
true;
    83             Vector3 posAtom = 
new Vector3();
    84             coordAtomTexture = 
new Dictionary<int,KeyValuePair<int,int> >();
    88             int currentVertex = 0;
    91             collidersParent = 
new GameObject(
"Colliders");
    92             collidersParent.transform.parent = AtomMeshParent.transform;
    94             GameObject currentGO = GameObject.CreatePrimitive(PrimitiveType.Cube);
    95             currentGO.transform.name = 
"AtomMesh0";
    96             currentGO.transform.parent = AtomMeshParent.transform;
    97             GameObject.Destroy(currentGO.GetComponent<Collider>());
    99             GameObject tmp = GameObject.CreatePrimitive(PrimitiveType.Cube);
   100             Mesh tmpMesh = tmp.GetComponent<MeshFilter>().mesh;
   101             GameObject.Destroy(tmp.GetComponent<Collider>());
   104             int VERTICES_IN_CUBE = tmpMesh.vertices.Length;
   105             int LIMIT_VERTICES_IN_MESH = 65536;
   106             int totalVertices = alist.Count*VERTICES_IN_CUBE;
   107             int maxAtomsinMesh = (int)LIMIT_VERTICES_IN_MESH/VERTICES_IN_CUBE;
   108             int currentAtomsinMesh = (int)Mathf.Min(maxAtomsinMesh,alist.Count - (idmesh*maxAtomsinMesh));
   111             int nb_meshes_needed = (int)Mathf.Ceil(totalVertices/(
float)LIMIT_VERTICES_IN_MESH);
   115             Mesh[] combinedMeshes = 
new Mesh[nb_meshes_needed];
   116             combinedMeshes[idmesh] = 
new Mesh();
   118             List<Vector3> newVertices = 
new List<Vector3>();
   119             List<Vector2> newUV = 
new List<Vector2>();
   120             List<int> newTriangles = 
new List<int>();
   124             Texture2D[] newTextures = 
new Texture2D[nb_meshes_needed];
   125             newTextures[idmesh] =  
new Texture2D(NBPARAM,currentAtomsinMesh,TextureFormat.ARGB32, 
false);
   126             float brightness=1.0f,attenuation=0.0f;
   128             Vector4 equation = 
new Vector4(1.0f,1.0f,1.0f,1.0f);
   131             for(
int i=0;i<alist.Count;i++){
   134                 if(currentVertex + tmpMesh.vertices.Length >= LIMIT_VERTICES_IN_MESH){
   137                     combinedMeshes[idmesh].vertices = newVertices.ToArray();
   138                     combinedMeshes[idmesh].uv = newUV.ToArray();
   139                     combinedMeshes[idmesh].triangles = newTriangles.ToArray();
   140                     combinedMeshes[idmesh].Optimize();
   141                     currentGO.GetComponent<MeshFilter>().mesh.Clear();
   142                     currentGO.GetComponent<MeshFilter>().mesh = combinedMeshes[idmesh];
   144                     meshesGO.Add(currentGO);
   148                     newTextures[idmesh].Apply(
false,
false);
   149                     newTextures[idmesh].wrapMode = TextureWrapMode.Clamp;
   150                     newTextures[idmesh].filterMode = FilterMode.Point;
   152                     Material curMat = currentGO.GetComponent<Renderer>().material;
   153                     curMat.shader = Shader.Find(
"FvNano/Ball HyperBalls Merged");
   155                     curMat.SetTexture(
"_MainTex",newTextures[idmesh]);
   156                     curMat.SetTexture(
"_MatCap",(Texture)Resources.Load(
"lit_spheres/divers/daphz05"));
   157                     curMat.SetFloat(
"_Brightness",brightness);
   158                     curMat.SetFloat(
"_Attenuation",attenuation);
   159                     curMat.SetFloat(
"_NBParam",(
float)NBPARAM);
   160                     curMat.SetFloat(
"_NBAtoms",(
float)currentAtomsinMesh);
   161                     currentGO.GetComponent<Renderer>().shadowCastingMode = ShadowCastingMode.Off;
   162                     currentGO.GetComponent<Renderer>().receiveShadows = 
false;
   164                     currentGO = GameObject.CreatePrimitive(PrimitiveType.Cube);
   165                     currentGO.transform.name = 
"AtomMesh"+(idmesh+1).ToString();
   166                     currentGO.transform.parent = AtomMeshParent.transform;
   167                     GameObject.Destroy(currentGO.GetComponent<Collider>());
   171                     newTriangles.Clear();
   173                     currentAtomsinMesh = (int)Mathf.Min(maxAtomsinMesh,alist.Count - (idmesh*maxAtomsinMesh));
   174                     newTextures[idmesh] =  
new Texture2D(NBPARAM,currentAtomsinMesh,TextureFormat.ARGB32, 
false);
   175                     combinedMeshes[idmesh] = 
new Mesh();
   180                 float [] a=alist[i] as 
float[];
   188                 foreach(Vector3 v 
in tmpMesh.vertices){
   189                     newVertices.Add(Vector3.Scale(v,
new Vector3(aModel.scale/100,aModel.scale/100,aModel.scale/100))+posAtom);
   191                     newUV.Add(
new Vector2(cptAtoms,0f));
   195                 foreach(
int tri 
in tmpMesh.triangles)
   196                     newTriangles.Add(tri+currentVertex);
   201                 newTextures[idmesh].SetPixel(1,cptAtoms,aModel.baseColor);
   206                 newTextures[idmesh].SetPixel(5,cptAtoms,
new Vector4(1.0f,0f,0f,0f));
   218                 coordAtomTexture.Add(i,
new KeyValuePair<int,int>(idmesh,cptAtoms));
   220                 GameObject colGO = 
new GameObject(
"Collider_Atom_"+i);
   221                 SphereCollider sc = colGO.AddComponent<SphereCollider>();
   222                 sc.radius = aModel.radius/3.0f;
   223                 colGO.transform.parent = collidersParent.transform;
   224                 collidersGO.Add(colGO);
   225                 colGO.transform.position = posAtom;
   238                 currentVertex+=tmpMesh.vertices.Length;
   246             combinedMeshes[idmesh].vertices = newVertices.ToArray();
   247             combinedMeshes[idmesh].uv = newUV.ToArray();
   248             combinedMeshes[idmesh].triangles = newTriangles.ToArray();
   249             combinedMeshes[idmesh].Optimize();
   250             currentGO.GetComponent<MeshFilter>().mesh.Clear();
   251             currentGO.GetComponent<MeshFilter>().mesh = combinedMeshes[idmesh];
   253             meshesGO.Add(currentGO);
   257             newTextures[idmesh].Apply(
false,
false);
   258             newTextures[idmesh].wrapMode = TextureWrapMode.Clamp;
   259             newTextures[idmesh].filterMode = FilterMode.Point;
   261             Material lastMat = currentGO.GetComponent<Renderer>().material;
   262             lastMat.shader = Shader.Find(
"FvNano/Ball HyperBalls Merged");
   264             lastMat.SetTexture(
"_MainTex",newTextures[idmesh]);
   265             lastMat.SetTexture(
"_MatCap",(Texture)Resources.Load(
"lit_spheres/divers/daphz05"));
   266             lastMat.SetFloat(
"_Brightness",brightness);
   267             lastMat.SetFloat(
"_Attenuation",attenuation);
   268             lastMat.SetFloat(
"_NBParam",(
float)NBPARAM);
   269             lastMat.SetFloat(
"_NBAtoms",(
float)currentAtomsinMesh);
   270             currentGO.GetComponent<Renderer>().shadowCastingMode = ShadowCastingMode.Off;
   271             currentGO.GetComponent<Renderer>().receiveShadows = 
false;
   272             GameObject.Destroy(tmp);
 override void Init()
Initalizes this instance. 
 
void DisplayAtomMethodByMesh(IList alist, IList typelist)
 
void DisplayAtoms(UIData.AtomType type_atom, bool force_display=false)
 
Dictionary< int, KeyValuePair< int, int > > coordAtomTexture
 
GameObject[] hball_meshes
 
override void EnableRenderers()
Enables the renderers for the entire set of balls and sticks. 
 
List< GameObject > collidersGO
 
static List< AtomModel > atomsTypelist
The type of each atom. 
 
GameObject collidersParent
 
static Vector4 EncodeFloatRGBA(float v)
 
GameObject collidersParent
 
!WiP Includes FLAGS of GUI. 
 
static bool isParticlesInitialized
 
Dictionary< int, KeyValuePair< int, int > > coordAtomTexture
 
static List< float[]> atomsLocationlist
The coordinates of each atom. 
 
List< GameObject > meshesGO