ChartDirector 6.0 (Ruby Edition)

H-Linear Meter Orientation


      

This example demonstrates horizontal linear meters in different orientations.

In a horizontal linear meter, the scale labels can be positioned above the meter scale or below it. This is controlled by the last argument to LinearMeter.setMeter, which can be Top or Bottom,

The title and value readout added using BaseChart.addText can be put at any position. In this example, we put them at the opposite side to the scale labels.

Source Code Listing

[Ruby On Rails Version - Controller] app/controllers/hlinearmeterorientation_controller.rb
require("chartdirector")

class HlinearmeterorientationController < ApplicationController

    def index()
        @title = "H-Linear Meter Orientation"
        @ctrl_file = File.expand_path(__FILE__)
        @noOfCharts = 4
        render :template => "templates/chartview"
    end

    #
    # Render and deliver the chart
    #
    def getchart()
        # This script can draw different charts depending on the chartIndex
        chartIndex = (params["img"]).to_i

        # The value to display on the meter
        value = 74.25

        # Create a LinearMeter object of size 250 x 75 pixels with very light grey (0xeeeeee)
        # backgruond and a light grey (0xccccccc) 3-pixel thick rounded frame
        m = ChartDirector::LinearMeter.new(250, 75, 0xeeeeee, 0xcccccc)
        m.setRoundedFrame(ChartDirector::Transparent)
        m.setThickFrame(3)

        # This example demonstrates putting the text labels at the top or bottom. This is by setting
        # the label alignment, scale position and label position.
        alignment = [ChartDirector::Top, ChartDirector::Top, ChartDirector::Bottom,
            ChartDirector::Bottom]
        meterYPos = [23, 23, 34, 34]
        labelYPos = [61, 61, 15, 15]

        # Set the scale region
        m.setMeter(14, meterYPos[chartIndex], 218, 20, alignment[chartIndex])

        # Set meter scale from 0 - 100, with a tick every 10 units
        m.setScale(0, 100, 10)

        # Add a smooth color scale at the default position
        smoothColorScale = [0, 0x6666ff, 25, 0x00bbbb, 50, 0x00ff00, 75, 0xffff00, 100, 0xff0000]
        m.addColorScale(smoothColorScale)

        # Add a blue (0x0000cc) pointer at the specified value
        m.addPointer(value, 0x0000cc)

        #
        # In this example, some charts have the "Temperauture" label on the left side and the value
        # readout on the right side, and some charts have the reverse
        #

        if chartIndex % 2 == 0
            # Add a label on the left side using 8pt Arial Bold font
            m.addText(10, labelYPos[chartIndex], "Temperature C", "arialbd.ttf", 8,
                ChartDirector::TextColor, ChartDirector::Left)

            # Add a text box on the right side. Display the value using white (0xffffff) 8pt Arial
            # Bold font on a black (0x000000) background with depressed rounded border.
            t = m.addText(235, labelYPos[chartIndex], m.formatValue(value, "2"), "arialbd.ttf", 8,
                0xffffff, ChartDirector::Right)
            t.setBackground(0x000000, 0x000000, -1)
            t.setRoundedCorners(3)
        else
            # Add a label on the right side using 8pt Arial Bold font
            m.addText(237, labelYPos[chartIndex], "Temperature C", "arialbd.ttf", 8,
                ChartDirector::TextColor, ChartDirector::Right)

            # Add a text box on the left side. Display the value using white (0xffffff) 8pt Arial
            # Bold font on a black (0x000000) background with depressed rounded border.
            t = m.addText(11, labelYPos[chartIndex], m.formatValue(value, "2"), "arialbd.ttf", 8,
                0xffffff, ChartDirector::Left)
            t.setBackground(0x000000, 0x000000, -1)
            t.setRoundedCorners(3)
        end

        # Output the chart
        send_data(m.makeChart2(ChartDirector::PNG), :type => "image/png", :disposition => "inline")

    end

end

[Ruby On Rails Version - View] app/views/templates/chartview.html.erb
<html>
<body style="margin:5px 0px 0px 5px">

<!-- Title -->
<div style="font-size:18pt; font-family:verdana; font-weight:bold">
    <%= @title %>
</div>
<hr style="border:solid 1px #000080" />

<!-- Source Code Listing Link -->
<div style="font-size:9pt; font-family:verdana; margin-bottom:1.5em">
    <%= link_to "Source Code Listing", 
        :controller => "cddemo", :action => "viewsource",
        :ctrl_file => @ctrl_file, :view_file => File.expand_path(__FILE__) %>
</div>

<!-- Create one or more IMG tags to display the demo chart(s) -->
<% 0.upto(@noOfCharts - 1) do |i| %>
    <img src="<%= url_for(:action => "getchart", :img => i) %>">
<% end %>

</body>
</html>

[Command Line Version] rubydemo/hlinearmeterorientation.rb
#!/usr/bin/env ruby
require("chartdirector")

def createChart(chartIndex)

    # The value to display on the meter
    value = 74.25

    # Create a LinearMeter object of size 250 x 75 pixels with very light grey (0xeeeeee) backgruond
    # and a light grey (0xccccccc) 3-pixel thick rounded frame
    m = ChartDirector::LinearMeter.new(250, 75, 0xeeeeee, 0xcccccc)
    m.setRoundedFrame(ChartDirector::Transparent)
    m.setThickFrame(3)

    # This example demonstrates putting the text labels at the top or bottom. This is by setting the
    # label alignment, scale position and label position.
    alignment = [ChartDirector::Top, ChartDirector::Top, ChartDirector::Bottom,
        ChartDirector::Bottom]
    meterYPos = [23, 23, 34, 34]
    labelYPos = [61, 61, 15, 15]

    # Set the scale region
    m.setMeter(14, meterYPos[chartIndex], 218, 20, alignment[chartIndex])

    # Set meter scale from 0 - 100, with a tick every 10 units
    m.setScale(0, 100, 10)

    # Add a smooth color scale at the default position
    smoothColorScale = [0, 0x6666ff, 25, 0x00bbbb, 50, 0x00ff00, 75, 0xffff00, 100, 0xff0000]
    m.addColorScale(smoothColorScale)

    # Add a blue (0x0000cc) pointer at the specified value
    m.addPointer(value, 0x0000cc)

    #
    # In this example, some charts have the "Temperauture" label on the left side and the value
    # readout on the right side, and some charts have the reverse
    #

    if chartIndex % 2 == 0
        # Add a label on the left side using 8pt Arial Bold font
        m.addText(10, labelYPos[chartIndex], "Temperature C", "arialbd.ttf", 8,
            ChartDirector::TextColor, ChartDirector::Left)

        # Add a text box on the right side. Display the value using white (0xffffff) 8pt Arial Bold
        # font on a black (0x000000) background with depressed rounded border.
        t = m.addText(235, labelYPos[chartIndex], m.formatValue(value, "2"), "arialbd.ttf", 8,
            0xffffff, ChartDirector::Right)
        t.setBackground(0x000000, 0x000000, -1)
        t.setRoundedCorners(3)
    else
        # Add a label on the right side using 8pt Arial Bold font
        m.addText(237, labelYPos[chartIndex], "Temperature C", "arialbd.ttf", 8,
            ChartDirector::TextColor, ChartDirector::Right)

        # Add a text box on the left side. Display the value using white (0xffffff) 8pt Arial Bold
        # font on a black (0x000000) background with depressed rounded border.
        t = m.addText(11, labelYPos[chartIndex], m.formatValue(value, "2"), "arialbd.ttf", 8,
            0xffffff, ChartDirector::Left)
        t.setBackground(0x000000, 0x000000, -1)
        t.setRoundedCorners(3)
    end

    # Output the chart
    m.makeChart("hlinearmeterorientation%s.png" % chartIndex)
end

createChart(0)
createChart(1)
createChart(2)
createChart(3)