Ejemplo n.º 1
0
                public static int Compare(_VertUnit lhs, _VertUnit rhs)
                {
                    Vector3 l = lhs.pos;
                    Vector3 r = rhs.pos;

                    if (l.x < r.x)
                    {
                        return(-1);
                    }
                    else if (l.x > r.x)
                    {
                        return(1);
                    }

                    if (l.y < r.y)
                    {
                        return(-1);
                    }
                    else if (l.y > r.y)
                    {
                        return(1);
                    }

                    if (l.z < r.z)
                    {
                        return(-1);
                    }
                    else if (l.z > r.z)
                    {
                        return(1);
                    }

                    return(0);
                }
Ejemplo n.º 2
0
        private void _FillVGroupCont(List <_VertUnit> vunits)
        {
            m_VGCont.Clear();
            if (vunits.Count == 0)
            {
                return;
            }

            float sqrDistThres = m_VertDistThres * m_VertDistThres;

            _VertUnit guard = vunits[0];

            for (int i = 1; i < vunits.Count; ++i)
            {
                _VertUnit one  = vunits[i];
                Vector3   diff = guard.pos - one.pos;
                //Dbg.Log("dist: {0}<->{1}, {2:F6}", guard.idx, one.idx, diff.magnitude);
                if (Vector3.SqrMagnitude(diff) < sqrDistThres)
                {
                    VGroup grp = _ForceGetVGroup(guard);
                    _AddToVGroup(one.idx, grp); //add `one' into grp
                }
                else
                {
                    guard = one; //advance guard to `one'
                }
            }
        }
Ejemplo n.º 3
0
            private VVert _ForceGetVVert(_VertUnit v)
            {
                int   idx   = v.idx;
                VVert vvert = null;

                if (!m_VVertCont.TryGetValue(idx, out vvert))
                {
                    vvert = new VVert(idx);
                    m_VVertCont.Add(idx, vvert);
                }
                return(vvert);
            }
Ejemplo n.º 4
0
        private VGroup _ForceGetVGroup(_VertUnit v)
        {
            int    idx = v.idx;
            VGroup grp = null;

            if (!m_VGCont.TryGetValue(idx, out grp))
            {
                grp = new VGroup();
                grp.Add(idx);
                m_VGCont.Add(idx, grp);
            }

            return(grp);
        }
Ejemplo n.º 5
0
            // private method

            #region "VVert table init"
            // "VVert table init"

            private void _InitVVertTable()
            {
                Vector3[]        verts  = m_RealMesh.vertices;
                List <_VertUnit> vunits = verts.Select((v, idx) => { return(new _VertUnit(v, idx)); }).ToList();

                vunits.Sort(_VertUnit.Compare);

                m_VVertCont.Clear();
                if (vunits.Count == 0)
                {
                    return;
                }

                // init vVertCont
                List <VVert> vvertLst = new List <VVert>();

                float     sqrDistThres = DEF_SAME_VERT_DIST_THRES * DEF_SAME_VERT_DIST_THRES;
                _VertUnit guard        = vunits[0];
                VVert     guardVV      = _ForceGetVVert(guard);

                vvertLst.Add(guardVV);

                for (int i = 1; i < vunits.Count; ++i)
                {
                    _VertUnit one  = vunits[i];
                    Vector3   diff = guard.pos - one.pos;

                    if (Vector3.SqrMagnitude(diff) < sqrDistThres)
                    {
                        _AddToVVert(one.idx, guardVV);
                    }
                    else
                    {
                        guard   = one; //advance guard to 'one'
                        guardVV = _ForceGetVVert(guard);
                        vvertLst.Add(guardVV);
                    }
                }

                // init m_VVertArr
                m_VVertArr = vvertLst.ToArray();
            }