public List <SelectWall> GetWallCandidate() { List <ReconstructManager.MeshSizeData> meshSizeDataList; List <MeshCollider> ignoreList; _getWallsByMaxArea(reconstructConvexCollidersVertical, out meshSizeDataList, out ignoreList); if (selectedWallRoot != null) { Destroy(selectedWallRoot); } selectedWallRoot = new GameObject("SelectedWallRoot"); for (int a = 0; a < meshSizeDataList.Count; a++) { ReconstructManager.MeshSizeData current = meshSizeDataList[a]; //filter area less then 0.5 if (current.area < 0.5f) { continue; } _cloneWallCandidate(current); } return(wallCandidates); }
void _cloneWallCandidate(ReconstructManager.MeshSizeData current) { bool alreadyClone = false; foreach (SelectWall wall in wallCandidates) { wall.SetUnselectColor(); if (wall.origWall.GetHashCode() == current.colliderMesh.gameObject.GetHashCode()) { alreadyClone = true; break; } } if (!alreadyClone) { GameObject cloneobj = Instantiate(current.colliderMesh.gameObject); cloneobj.GetComponent <Renderer>().material = Instantiate <Material>(selectWallMaterial); cloneobj.GetComponent <Renderer>().enabled = true; SelectWall selectwall; selectwall.origWall = current.colliderMesh.gameObject; selectwall.selectWall = cloneobj; selectwall.area = current.area; selectwall.normal = current.avgNormalWorld; selectwall.center = current.meshCenterWorld; wallCandidates.Add(selectwall); ARRender.Instance.AddUnityrenderWithDepth(cloneobj.transform); cloneobj.layer = ARRender.UnityRenderOnTopNoShadowLayer; MeshFilter mf = cloneobj.GetComponent <MeshFilter>(); mf.mesh.SetIndices(mf.mesh.GetIndices(0).Concat(mf.mesh.GetIndices(0).Reverse()).ToArray(), MeshTopology.Triangles, 0); Collider col = cloneobj.GetComponent <Collider>(); if (col != null) { DestroyImmediate(col); } cloneobj.AddComponent <MeshCollider>(); } }