if (needPath) {
isSimple = false;
Point2D.Double pt = new Point2D.Double();
double tx = 0, ty = 0;
SegmentPathBuilder builder = new SegmentPathBuilder();
builder.moveTo(locs[0], 0);
for (int i = 0, n = 0; i < fComponents.length; ++i, n += 2) {
int vi = fComponentVisualOrder == null ? i : fComponentVisualOrder[i];
tlc = fComponents[vi];
AffineTransform at = tlc.getBaselineTransform();
if (at != null && ((at.getType() & at.TYPE_TRANSLATION) != 0)) {
double dx = at.getTranslateX();
double dy = at.getTranslateY();
builder.moveTo(tx += dx, ty += dy);
}
pt.x = locs[n+2] - locs[n];
pt.y = 0;
if (at != null) {
at.deltaTransform(pt, pt);
}
builder.lineTo(tx += pt.x, ty += pt.y);
}
lp = builder.complete();
if (lp == null) { // empty path
int vi = fComponentVisualOrder == null ? 0 : fComponentVisualOrder[0];
tlc = fComponents[vi];
AffineTransform at = tlc.getBaselineTransform();