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