Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:
1. Добавить ссылку на css-файл PP.css. Также нужно добавить ссылки на следующие js-файлы:
PP.js;
PP.Charts.js;
PP.GraphicsBase.js;
PP.Util.js;
resources.ru.js.
2. Далее в теге <head> необходимо добавить сценарий, создающий цилиндр:
<script>
var cylinder;
function createCylinder() {
// Создаем цилиндр
cylinder = new PP.Ui.Cylinder({
AnimationDuration: 4000, // Длительность воспроизведения анимации
UseAnimation: false, // Воспроизведение анимации запрещено
ParentNode: document.body, // Корневая вершина
// Размеры колбы и области построения цилиндра не связаны
IsRelativeDimensions: false,
Width: 350, // Ширина области построения цилиндра
FlaskWidth: 130, // Ширина колбы цилиндра
Height: 250, // Высота области построения цилиндра
FlaskHeight: 170, // Высота колбы цилиндра
Orientation: PP.Orientation.Vertical,
Loaded: function(sender, args) {
console.log("Цилиндр загружен");
}
});
// Рисуем цилиндр
cylinder.draw(); // Перерисовываем цилиндр cylinder.redraw(); // Создаём ось цилиндра this.createGaugeAxis(); // Разрешаем использование анимации cylinder.setUseAnimation(true); // Устанавливаем значение цилиндра this.createGaugeValue(7); cylinder._Values = [cylinder.getValue()]; // Запрещаем использование анимации cylinder.setUseAnimation(false); // Создаём линию тренда this.createTrendLine(5); // Создаём заголовок цилиндра this.createCylindHeader(); // Перерисовываем значения цилиндра cylinder.redrawValues(); // Создаём рамку для области построения цилиндра this.createBorder(); }
// Создаёт ось цилиндра
var createGaugeAxis = function() {
var axis = new PP.Ui.CylinderGaugeAxis({
ParentCylinder: cylinder, // Родительский цилиндр
MajorTicksCount: 6, // Количество основных делений оси
Width: 450, // Ширина оси
Height: 250, // Высота оси
Min: 0, // Минимальное значение оси
Max: 10, // Максимальное значение оси
LabelStyle: new PP.Style(), // Стиль для делений оси
ValuesMode: PP.Ui.AxisValuesMode.MinMax, // Режим отображения значений оси
Position: PP.LTRB.Right // Располагаем ось справа
});
// Устанавливаем ось
cylinder.setAxis(axis.getSettings());
// Обновляем стиль для оси цилиндра
this.applyStyleForAxis(axis);
axis.setAxisUnits("см");
// Перемещаем подпись для указания единицы измерения оси
axis.getUnit().setLeft(axis.getUnit().getLeft() - 30);
// Обновляем ось цилиндра
this.updateAxis(axis);
}
// Обновляет ось цилиндра
var updateAxis = function(axis) {
cylinder._Axis = axis;
}
// Возвращает значения для оси
var getAxisValues = function(minValue, maxValue, majorTicksCount) {
var values = [];
var step = Math.round((maxValue - minValue) / (majorTicksCount - 1));
for (var i = minValue; i <= maxValue; i += step) {
values.push(i + " см");
}
return values;
}
// Применяем стиль для оси цилиндра
var applyStyleForAxis = function(axis) {
// Создаём стиль для делений оси
var border = new PP.Border({
Width: 1, // Толщина делений
});
// Создаём стиль для основных делений оси
var majorTickStyle = {
Border: border,
Length: 20
};
// Создаём стиль для промежуточных делений оси
var minorTickStyle = {
Border: border,
Length: 10
};
// Устанавливаем стиль для основных делений оси
axis.setMajorTickStyle(majorTickStyle);
// Устанавливаем стиль для промежуточных делений оси
axis.setMinorTickStyle(minorTickStyle);
}
// Создаёт линию тренда
var createTrendLine = function(value) {
var trendLine = new PP.Ui.CylinderTrend({
Color: new PP.Color(0, 0, 255), // Цвет линии
LabelStyle: {
Text: value.toString() // Подпись
},
Label: null,
Length: 300, // Длина линии
ParentCylinder: cylinder, // Родительский цилиндр
Value: value, // Значение, соответствующее линии тренда
Width: 1, // Толщина линии
LineStyle: PP.Ui.LineTypes.Dot // Стиль линии
});
// Рисуем линию тренда
trendLine.draw();
trendLine.redraw();
// Устанавливаем линию тренда
cylinder.setTrends([trendLine]);
// Получаем подпись
var label = cylinder.getTrends()[0].getLabel();
if (label) {
// Скорректируем расположение подписи
label.setPosition(label.getLeft() - 10, label.getTop());
}
}
// Создаёт значение цилиндра
var createGaugeValue = function(value) {
var gaugeValue = new PP.Ui.CylinderGaugeValue({
Value: value, // Координата верхнего основания цилиндра
StartValue: 0, // Координата нижнего основания цилиндра
ParentAxis: cylinder.getAxis(), // Координатная ось, проходящая вдоль цилиндра
Fill: new PP.SolidColorBrush({
Color: "#FF0000" // Цвет заливки боковой поверхности цилиндра
}),
UpFill: new PP.SolidColorBrush({
Color: "#00FF00" // Цвет заливки верхнего основания цилиндра
})
});
// Рисуем значение цилиндра
gaugeValue.draw();
gaugeValue.redraw();
// Воспроизводим анимацию линии тренда
if (cylinder.getUseAnimation()) {
objAnim = new PP.Ui.Animation({
Duration: cylinder.getAnimationDuration(),
Start: 0,
End: value
});
objAnim.animateProp(gaugeValue, "Value");
} else {
gaugeValue.setValue(value);
}
// Устанавливаем значение
cylinder.setValue(gaugeValue);
}
// Создаёт заголовок цилиндра
var createCylindHeader = function() {
var header = new PP.Ui.CylinderHeader({
ParentCylinder: cylinder, // Цилиндр, к которому принадлежит заголовок
VerticalAlign: PP.VerticalAlignment.Top,
HorizontalAlign: PP.HorizontalAlignment.Left,
Font: new PP.Font({
IsBold: true,
Size: 18
})
})
// Устанавливаем заголовок
cylinder._Header = header;
// Перерисовываем заголовок
cylinder.getHeader().redraw();
// Устанавливаем расположение заголовка
cylinder.getHeader().setPosition(30, 0);
}
// Определяет тень для заголовка
var applyShadowForHeader = function(header) {
var shadow = new PP.Shadow({
Enabled: true,
Color: new PP.Color(PP.Color.Colors.blue),
Angle: 45,
Size: 1,
EnableBlur: true,
EnableOpacity: true,
BlurSize: 20,
Distance: 10,
Opacity: 0.5
});
header.setShadow(shadow);
}
// Создаёт рамку для области построения цилиндра
var createBorder = function() {
var rectElem = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rectElem.setAttributeNS(null, "width", cylinder.getWidth());
rectElem.setAttributeNS(null, "height", cylinder.getHeight());
rectElem.setAttributeNS(null, "stroke-width", 1);
rectElem.setAttributeNS(null, "stroke", "rgb(195,195,195)");
rectElem.setAttributeNS(null, "fill-opacity", 0);
cylinder.getSVGNode().appendChild(rectElem);
}
</script>
3. В теге <body> в качестве значения атрибута «onLoad» указать имя функции для создания цилиндра:
<body onload="createCylinder()"> </body>
В результате выполнения примера на html-странице будет размещен компонент Cylinder:

Также в консоли браузера будет выведено сообщение о загрузке компонента:
Цилиндр загружен
См. также: