Hi all,
I try make a Hexagon Grid on a Surface in c#.Just like the Lunchbox component.
As base I used the scipts Nathan miller provided here: http://wiki.theprovingground.org/scripts-paneling
var p = new List<Polyline>();
double uStep = 1.0 / U;
double vStep = 1.0 / V;
t = t * uStep;
S.SetDomain(0, new Interval(0, 1));
S.SetDomain(1, new Interval(0, 1));
for (int i = 0; i < U; i++)
{
for (int j = 0; j < V; j++)
{
if (j == V - 1) // upper strip
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt(i * uStep, (j - t) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j + t) * vStep));//toMove
pts.Add((S.PointAt((i + 1) * uStep, (j - t) * vStep)));
pts.Add(S.PointAt((i + 1) * uStep, (j + 1 ) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j + 1 ) * vStep));//toMove
pts.Add(S.PointAt(i * uStep, (j + 1) * vStep));
pts.Add(S.PointAt(i * uStep, (j - t) * vStep));
p.Add(new Polyline(pts));
}
if (j == 0)// lowest strip
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt(i * uStep, (j ) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j ) * vStep));//toMove
pts.Add((S.PointAt((i + 1) * uStep, (j ) * vStep)));
pts.Add(S.PointAt((i + 1) * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j + 1 - t) * vStep));//toMove
pts.Add(S.PointAt(i * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt(i * uStep, (j - t) * vStep));
p.Add(new Polyline(pts));
}
if (j % 2 == 0 && (j != V - 1) && (j != 0))
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt(i * uStep, (j - t) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j + t) * vStep));//toMove
pts.Add((S.PointAt((i + 1) * uStep, (j - t) * vStep)));
pts.Add(S.PointAt((i + 1) * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt((i + 1 - 0.5) * uStep, (j + 1 - t) * vStep));//toMove
pts.Add(S.PointAt(i * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt(i * uStep, (j - t) * vStep));
p.Add(new Polyline(pts));
}
// odd rows
if (j % 2 == 1)
{
if (i < U - 1 )
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt((i + 0.5 ) * uStep, (j - t) * vStep));
pts.Add(S.PointAt((i + 1) * uStep, (j + t) * vStep));
pts.Add(S.PointAt((i + 1.5) * uStep, (j - t) * vStep));//moveDown
pts.Add(S.PointAt((i + 1.5) * uStep, (j + 1 + t) * vStep));//moveUp
pts.Add(S.PointAt((i + 1) * uStep, (j + 1 - t ) * vStep));
pts.Add(S.PointAt((i + 0.5) * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt((i + 0.5 ) * uStep, (j - t) * vStep));
p.Add(new Polyline(pts));
}
//left row
if (i == 0)
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt(i * uStep, (j + t) * vStep));
pts.Add(S.PointAt((i + 0.5) * uStep, (j - t) * vStep));
pts.Add(S.PointAt((i + 0.5) * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt(i * uStep, (j + 1 - t) * vStep));
pts.Add(S.PointAt(i * uStep, (j + t) * vStep));
p.Add(new Polyline(pts));
}
//right row
if (i == U - 1)
{
var pts = new List<Point3d>(7);
pts.Add(S.PointAt((i + 0.5) * uStep, (j - t) * vStep));
pts.Add(S.PointAt((i + 1) * uStep, (j + t) * vStep));
pts.Add(S.PointAt((i + 1) * uStep, (j + 1 - t) * vStep));
pts.Add(S.PointAt((i + 0.5) * uStep, (j + 1 + t) * vStep));
pts.Add(S.PointAt((i + 0.5) * uStep, (j - t) * vStep));
p.Add(new Polyline(pts));
}
}
}
}
Panels = p;
Its some kind of working but not really.
Maybe someone likes to help me puzzle, if not I would understand since its already a few lines, but as we say in my village: asking is free.
Regads!
HexGrid.gh (6.2 KB)