drawGroupPrimitives method
List<MarkElement<ElementStyle> >
drawGroupPrimitives(
- List<
Attributes> group, - CoordConv coord,
- Offset origin
override
Renders primitive elements of all tuples of a group.
The tuples are rendered in groups. the Attributes.shape of the first tuple of a group will be taken as a represent, and it's drawGroupPrimitives method decides the basic way to render the whole group. If different tuples have different shapes, define and call special element rendering methods for each item.
Implementation
@override
List<MarkElement> drawGroupPrimitives(
List<Attributes> group,
CoordConv coord,
Offset origin,
) {
assert(coord is RectCoordConv);
final rst = <MarkElement>[];
// First item.
Attributes item = group.first;
List<Offset> position = item.position;
double bandStart = 0;
double bandEnd = (group[1].position.first.dx + position.first.dx) / 2;
// [topLeft, topRight, bottomRight, bottomLeft]
List<Offset> corners = [
coord.convert(Offset(bandStart, position[1].dy)),
coord.convert(Offset(bandEnd, group[1].position[1].dy)),
coord.convert(Offset(bandEnd, group[1].position[0].dy)),
coord.convert(Offset(bandStart, position[0].dy)),
];
rst.add(PolygonElement(
points: corners,
style: getPaintStyle(item, false, 0, coord.region, null),
tag: item.tag));
// Middle items.
for (var i = 1; i < group.length - 1; i++) {
item = group[i];
position = item.position;
bandStart =
(group[i].position.first.dx + group[i - 1].position.first.dx) / 2;
bandEnd =
(group[i + 1].position.first.dx + group[i].position.first.dx) / 2;
corners = [
coord.convert(Offset(bandStart, position[1].dy)),
coord.convert(Offset(bandEnd, group[i + 1].position[1].dy)),
coord.convert(Offset(bandEnd, group[i + 1].position[0].dy)),
coord.convert(Offset(bandStart, position[0].dy)),
];
rst.add(PolygonElement(
points: corners,
style: getPaintStyle(item, false, 0, coord.region, null),
tag: item.tag));
}
// Last item.
item = group.last;
position = item.position;
bandStart =
(position.first.dx + group[group.length - 2].position.first.dx) / 2;
bandEnd = 1;
final closeStart = pyramid ? origin.dy : position[0].dy;
final closeEnd = pyramid ? origin.dy : position[1].dy;
corners = [
coord.convert(Offset(bandStart, position[1].dy)),
coord.convert(Offset(bandEnd, closeEnd)),
coord.convert(Offset(bandEnd, closeStart)),
coord.convert(Offset(bandStart, position[0].dy)),
];
rst.add(PolygonElement(
points: corners,
style: getPaintStyle(item, false, 0, coord.region, null),
tag: item.tag));
return rst;
}