import nl.idgis.giclient.template.TemplateElement; import nl.idgis.giclient.gis.GIS; /** * @author copierrj */ class nl.idgis.giclient.template.ScaleBarElement extends TemplateElement { private var scale:Number = -1; private var parts:Number = 2; private static var pointToMeter = 0.000352777778; private static var minX:Number = 18, maxX = 45; public function ScaleBarElement(gis : GIS) { super(gis); } public function doDrawElement(mc:MovieClip, handler:Object):Void { var meters:Number = (this.width - minX - maxX) * scale * pointToMeter; var dim:Number = Math.pow(10, (Math.floor(1 + (Math.log(meters) / Math.log(10)))) - 1); var roundMeters:Number = Math.floor(meters / dim) * dim; var barWidth:Number = roundMeters / (scale * pointToMeter); var offset:Number = (this.width - minX - maxX - barWidth) / 2; var barY:Number = 0; var barHeight:Number = 8; var scaleTextY:Number = this.height - 24; mc.lineStyle(1); mc.beginFill(0xffffff); mc.moveTo(offset + minX, barY); mc.lineTo(offset + minX + barWidth, barY); mc.lineTo(offset + minX + barWidth, barY + barHeight); mc.lineTo(offset + minX, barY + barHeight); mc.lineTo(offset + minX, barY); if(parts > 1) { var subBarWidth:Number = barWidth / parts; mc.beginFill(0x808080); for(var i:Number = 0; i < parts; i+=2) { var startX:Number = offset + minX + subBarWidth * i; mc.moveTo(startX, barY); mc.lineTo(startX + subBarWidth, barY); mc.lineTo(startX + subBarWidth, barY + barHeight); mc.lineTo(startX, barY + barHeight); mc.lineTo(startX, barY); } } var format:TextFormat = new TextFormat(); format.size = 12; format.font = "Arial"; var tfmin:TextField = mc.createTextField("tfmin", mc.getNextHighestDepth(), offset, barY - 5, minX, 24); tfmin.setNewTextFormat(format); tfmin.text = "0"; tfmin.selectable = false; var tfmax:TextField = mc.createTextField("tfmax", mc.getNextHighestDepth(), offset + minX + barWidth, barY - 5, this.width - maxX, 24); tfmax.setNewTextFormat(format); tfmax.selectable = false; if(roundMeters < 1000) { tfmax.text = "" + roundMeters + " m"; } else { tfmax.text = "" + roundMeters / 1000 + " km"; } var scaleText:String = "1 : " + Math.round(scale); offset = (this.width - format.getTextExtent(scaleText)["textFieldWidth"]) / 2; var tfscale:TextField = mc.createTextField("tfscale", mc.getNextHighestDepth(), offset, scaleTextY, this.width, 24); tfscale.setNewTextFormat(format); tfscale.text = scaleText; tfscale.selectable = false; handler.onReady(); } }