bool TaperedLimb(Vector3i start, Vector3i end, float startSize, float endSize) { Vector3i delta = end - start; int primidx = delta.GetLargestComponent(); int maxdist = delta[primidx]; if (maxdist == 0) { return(false); } int primsign = (maxdist > 0 ? 1 : -1); int secidx1 = (primidx - 1) % 3; int secidx2 = (primidx + 1) % 3; int secdelta1 = delta[secidx1]; float secfac1 = secdelta1 / (float)delta[primidx]; int secdelta2 = delta[secidx2]; float secfac2 = secdelta2 / (float)delta[primidx]; Vector3i coord = new Vector3i(); int endoffset = delta[primidx] + primsign; for (int primoffset = 0; primoffset < endoffset; primoffset += primsign) { int primloc = start[primidx] + primoffset; int secloc1 = (int)(start[secidx1] + primoffset * secfac1); int secloc2 = (int)(start[secidx2] + primoffset * secfac2); coord[primidx] = primloc; coord[secidx1] = secloc1; coord[secidx2] = secloc2; float primdist = (float)Math.Abs(delta[primidx]); float radius = endSize + (startSize - endSize) * Math.Abs(delta[primidx] - primoffset) / (float)primdist; CrossSection(coord, radius, primidx, TILETYPE_LOG); } return(true); }