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); } } }
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); } } }