- renderer.render(tgc, visibleRegion.translate(posX, posY, submodelScale));
+ double visibleRegionFillRatio = Math.max(getBounds().width / visibleRegion.width, getBounds().height / visibleRegion.height);
+ double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1);
+ alphaFactor = Math.max(0, Math.min(1, alphaFactor));
+ // we need to take the old alpha into account to support nested submodules better.
+ int oldAlpha = gc.getAlpha();
+ int submodelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)));
+ int labelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))));
+ if (submodelAlpha != 0)
+ {
+ gc.setAlpha(submodelAlpha);
+ renderer.render(tgc, visibleRegion.translate(-posX, -posY, 1 / submodelScale));
+ }
+ if (labelAlpha != 0)
+ {
+ gc.setAlpha(labelAlpha);
+ renderSymbol(gc);
+ }