public unsafe DisplacementMesh Clone() { DisplacementMesh ret = new DisplacementMesh(width, height); ret.Copy(this, Point.Empty, this.Bounds); return(ret); }
public ConfigToken(ConfigToken toCopy) { this.mesh = toCopy.mesh; this.grid = toCopy.grid; this.width = toCopy.width; this.height = toCopy.height; }
private void ConfigDialog_Load(object sender, EventArgs e) { this.BackColor = SystemColors.Control; this.Text = GridWarp.StaticDialogName; this.DesktopLocation = Owner.PointToScreen(new Point(0, 30)); this.Size = new Size(Owner.ClientSize.Width, Owner.ClientSize.Height - 30); this.WindowState = Owner.WindowState; surface = new Surface(EnvironmentParameters.SourceSurface.Size); mesh = new DisplacementMesh(surface.Size); canvas.Surface = surface; canvas.Selection = EnvironmentParameters.GetSelectionAsPdnRegion(); mesh.Render(surface, EnvironmentParameters.SourceSurface, EnvironmentParameters.SourceSurface.Bounds); }
protected override void OnSetRenderInfo(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs) { base.OnSetRenderInfo(parameters, dstArgs, srcArgs); ConfigToken token = parameters as ConfigToken; if (token != null && token.mesh != null) { mesh = token.mesh; if (mesh.Size != dstArgs.Surface.Size) { mesh = mesh.Resize(dstArgs.Size); } } }
public unsafe void Copy(DisplacementMesh srcMesh, Point dstOffset, Rectangle srcRect) { for (int y = 0; y < srcRect.Height; ++y) { DisplacementVector * src = srcMesh.GetPointAddressUnchecked(srcRect.X, y + srcRect.Y), dst = this.GetPointAddressUnchecked(dstOffset.X, y + dstOffset.Y); for (int x = 0; x < srcRect.Width; ++x) { *dst = *src; ++src; ++dst; } } }
public DisplacementGrid(Stream s, DisplacementMesh mesh) { using (BinaryReader br = new BinaryReader(s)) { handlesx = br.ReadInt32(); handlesy = br.ReadInt32(); this.mesh = mesh; SetSize(handlesx - 1, handlesy - 1); for (int j = 0; j < handlesy; ++j) { for (int i = 0; i < handlesx; ++i) { points[i, j].X = br.ReadSingle(); points[i, j].Y = br.ReadSingle(); } } } }
public unsafe DisplacementMesh Resize(Size size) { DisplacementMesh ret = new DisplacementMesh(size); float xfactor = (float)width / size.Width; float yfactor = (float)height / size.Height; for (int y = 0; y < size.Height; ++y) { DisplacementVector *ptr = ret.GetPointAddressUnchecked(0, y); float srcy = y * yfactor;; for (int x = 0; x < size.Width; ++x) { float srcx = x * xfactor; DisplacementVector v = GetBilinearSample(srcx, srcy); ptr->X = v.X / xfactor; ptr->Y = v.Y / yfactor; ++ptr; } } return(ret); }
public void Load(Stream s) { using (BinaryReader br = new BinaryReader(s)) { Size size = ReadHeader(br); if (size.Width == width && size.Height == height) { LoadData(br); } else { DisplacementMesh loaded = new DisplacementMesh(size); loaded.LoadData(br); this.Dispose(true); // safe to toss our own data at this point DisplacementMesh resized = loaded.Resize(this.Size); loaded.Dispose(); this.scan0 = resized.scan0; } } }
public DisplacementGrid(int width, int height, DisplacementMesh mesh) { this.mesh = mesh; SetSize(width, height); }
public DisplacementGrid(Size size, DisplacementMesh mesh) : this(size.Width, size.Height, mesh) { }
public DisplacementGrid(int width, int height, DisplacementMesh mesh, bool useLinearInterpolation = false) { this.mesh = mesh; this.useLinearInterpolation = useLinearInterpolation; SetSize(width, height); }
public DisplacementGrid(Size size, DisplacementMesh mesh, bool useLinearInterpolation = false) : this(size.Width, size.Height, mesh, useLinearInterpolation) { }