private void PopulateVoxel(object voxel_notifier_resolution) { List <object> param = (List <object>)voxel_notifier_resolution; OrderedVoxel <SeedPoint> voxel = (OrderedVoxel <SeedPoint>)param[0]; ManualResetEvent notifier = (ManualResetEvent)param[1]; int resolution = (int)param[2]; double diameter = voxel.GetVoxelDimension(); float step = (float)(diameter / resolution); for (int x = 0; x < resolution; x++) { for (int y = 0; y < resolution; y++) { semaphore.WaitOne(); for (int z = 0; z < resolution; z++) { Vector3 pos = new Vector3((x * step) + voxel.vertices[3].X, (y * step) + voxel.vertices[3].Y, (z * step) + voxel.vertices[3].Z); SeedPoint sp = Interpolator <SeedPoint> .IWDInterpolatePoint(pos, bulkList, diameter); if (sp == null) { sp = Interpolator <SeedPoint> .NNInterpolatePoint(pos, bulkList); } voxel.AddPoint(sp); voxel.AddPointAt(sp, x, y, z); } semaphore.Release(); } } notifier.Set(); }
public Point GetPoint(Vector3 pos) { return(Interpolator <Point> .IWDInterpolatePoint(pos, Interpolator <Point> .SelectVoxels(pos, Voxels), voxelSize)); }