### Question:
GeoScreenBubbleGeometry extends GeoScreenPolygonGeometry { @Override public GeoScreenBubbleGeometry derive(BaseRenderProperties renderProperties, Constraints constraints) throws ClassCastException { return new GeoScreenBubbleGeometry(createBuilder(), (PolygonRenderProperties)renderProperties, constraints); } GeoScreenBubbleGeometry(Builder builder, PolygonRenderProperties renderProperties, Constraints constraints); @Override GeoScreenBubbleGeometry clone(); @Override Builder createBuilder(); @Override GeoScreenBubbleGeometry derive(BaseRenderProperties renderProperties, Constraints constraints); final double getBorderBuffer(); final GeoScreenBoundingBox getBoundingBox(); final double getCornerRadius(); final int getCornerVertexCount(); final double getGapPercent();  }### Answer:
@Test public void testDerive() { GeographicPosition position = new GeographicPosition(LatLonAlt.createFromDegrees(23., 56.)); GeographicBoxAnchor gba = new GeographicBoxAnchor(position, null, 0, 0); ScreenPosition sPos1 = new ScreenPosition(0, 0); ScreenPosition sPos2 = new ScreenPosition(15, 15); GeoScreenBoundingBox gsbb = new GeoScreenBoundingBox(sPos1, sPos2, gba); GeoScreenBubbleGeometry.Builder builder = new GeoScreenBubbleGeometry.Builder(); builder.setBoundingBox(gsbb); builder.setDataModelId(3423L); builder.setAttachment(position); builder.setBorderBuffer(3.); builder.setCornerRadius(.75); builder.setCornerVertexCount(5); builder.setGapPercent(15); builder.setLineSmoothing(true); builder.setLineType(LineType.GREAT_CIRCLE); builder.setRapidUpdate(true); PolygonRenderProperties renderProperties1 = new DefaultPolygonRenderProperties(65763, false, true); TimeConstraint timeConstraint = TimeConstraint.getTimeConstraint(TimeSpan.get(10L, 20L)); Constraints constraints1 = new Constraints(timeConstraint); GeoScreenBubbleGeometry geom = new GeoScreenBubbleGeometry(builder, renderProperties1, constraints1); ColorRenderProperties renderProperties2 = renderProperties1.clone(); Constraints constraints2 = new Constraints(timeConstraint); GeoScreenBubbleGeometry derived = geom.derive(renderProperties2, constraints2); Assert.assertNotSame(geom, derived); Assert.assertEquals(geom.getBoundingBox(), derived.getBoundingBox()); Assert.assertEquals(geom.getDataModelId(), derived.getDataModelId()); Assert.assertEquals(geom.isLineSmoothing(), derived.isLineSmoothing()); Assert.assertEquals(geom.getLineType(), derived.getLineType()); Assert.assertEquals(geom.getAttachment(), derived.getAttachment()); Assert.assertEquals(geom.getBorderBuffer(), derived.getBorderBuffer(), 0.); Assert.assertEquals(geom.getCornerRadius(), derived.getCornerRadius(), 0.); Assert.assertEquals(geom.getCornerVertexCount(), derived.getCornerVertexCount()); Assert.assertEquals(geom.getGapPercent(), derived.getGapPercent(), 0.); Assert.assertEquals(geom.isRapidUpdate(), derived.isRapidUpdate()); Assert.assertNotSame(geom.getRenderProperties(), derived.getRenderProperties()); Assert.assertSame(renderProperties2, derived.getRenderProperties()); Assert.assertNotSame(geom.getConstraints(), derived.getConstraints()); Assert.assertSame(constraints2, derived.getConstraints()); }