public void Shape(Vector3 dv, ref Dictionary <Guid, MeshUndoInfo> undoInfo)
        {
            if (IsMirrored)
            {
                dv.X *= -1.0f;
            }
            foreach (var p in PartsPoints)
            {
                var point = p.Key.Points[p.Value];
                if (point.IsFixed.HasValue && point.IsFixed.Value)
                {
                    continue;
                }
                MeshUndoInfo info;
                if (!undoInfo.TryGetValue(p.Key.Guid, out info))
                {
                    info = new MeshUndoInfo();
                    undoInfo.Add(p.Key.Guid, info);
                }

                if (!info.Points.ContainsKey(p.Value))
                {
                    info.Points.Add(p.Value, point.Position);
                }

                point.Position += dv * Coef;
                foreach (var id in point.Indices)
                {
                    var v = p.Key.Vertices[id];
                    v.Position         = point.Position;
                    p.Key.Vertices[id] = v;
                }
            }
        }
        public void Undo(Dictionary <Guid, MeshUndoInfo> undoInfo)
        {
            MeshUndoInfo info = null;

            foreach (var part in RenderMesh.Parts.Where(part => undoInfo.TryGetValue(part.Guid, out info)))
            {
                part.Undo(info);
            }
        }
 public void Smooth(float percent)
 {
     KeyValuePair<MeshUndoInfo, MeshUndoInfo> info;
     foreach (var part in renderMesh.Parts)
     {
         if(smoothingInfo.TryGetValue(part.Guid, out info))
         {
             MeshUndoInfo smoothingData = new MeshUndoInfo();
             foreach(var p in info.Key.Points)
             {
                 var p2 = info.Value.Points[p.Key];
                 smoothingData.Points.Add(p.Key, p2 + ((p.Value - p2) * percent));
             }
             part.Undo(smoothingData);
         }
     }
 }
Example #4
0
        public void Smooth(float percent)
        {
            KeyValuePair <MeshUndoInfo, MeshUndoInfo> info;

            foreach (var part in renderMesh.Parts)
            {
                if (smoothingInfo.TryGetValue(part.Guid, out info))
                {
                    var smoothingData = new MeshUndoInfo();
                    foreach (var p in info.Key.Points)
                    {
                        var p2 = info.Value.Points[p.Key];
                        smoothingData.Points.Add(p.Key, p2 + ((p.Value - p2) * percent));
                    }
                    part.Undo(smoothingData);
                }
            }
        }