Transformer angleValueTransformer;
angleValueTransformer.setAngleRangeDegrees(CTcm_ValueRange<double>(-240, 60));
angleValueTransformer.setValueRange(CTcm_ValueRange<double>(m_ValueRange.m_Max, m_ValueRange.m_Min));
auto angle = angleValueTransformer.setCurrentValue(value);
ShapePath
{
id: trackShapeAlarm
capStyle: Qt.FlatCap
fillColor: "transparent"
strokeColor: "red"
strokeWidth: root.pelData.mainCircleBorderWidth
PathAngleArc
{
centerX: root.size / 2
centerY: root.size / 2
radiusX: (root.size / 2.0) - (root.trackWidth / 2.0)
radiusY: (root.size / 2.0) - (root.trackWidth / 2.0)
startAngle: root.pelData.startAngleAlarmShape
sweepAngle: root.pelData.sweepAngleAlarmShape
}
}
auto firstPoint = calculatePoint((m_MainCircleRadius), getShapeAngle().value(), 0); // первая точка, на окружности
points.append(firstPoint);
auto secondPoint = calculatePoint((m_MainCircleRadius + calcStep), getShapeAngle().value(), -getShapeWidth().value() / 2.0); // вторая точка, левая сторона ромба
points.append(secondPoint);
auto thirdPoint = calculatePoint(m_MainCircleRadius + getShapeLength().value(), getShapeAngle().value(), 0); // трелья точка, верхняя точка, отступ от первой в длинну ромба
points.append(thirdPoint);
auto firthPoint = calculatePoint(m_MainCircleRadius - calcStep, getShapeAngle().value(), getShapeWidth().value() / 2.0); // четвертая точка, правая сторона ромба
points.append(firthPoint);
// last point, arrow top.
auto fifthPoint = firstPoint; // последняя точка, копия первой
points.append(fifthPoint);
transformer.setAngleRangeDegrees(ValueRange<double>(60, -240));
transformer.setValueRange(ValueRange<double>(m_ValueRange.m_Max, m_ValueRange.m_Min));
transformer.setCurrentValue(m_ShapeValue);
m_AngleShape = transformer.calculateCurrentAngle();
qreal calcStep = getShapeLength().value() - m_ShapeTopStep.value(); // это я делаю отступ для боковой точки(левая и правая)
auto firstPoint = calculatePoint((m_MainCircleRadius + getShapeLength().value()), getShapeAngle().value(), 0);
points.append(firstPoint);
auto secondPoint = calculatePoint((m_MainCircleRadius + calcStep), getShapeAngle().value(), -getShapeWidth().value() / 2.0);
points.append(secondPoint);
// метод расчета точек
QPointF ShapeObject::calculatePoint(const qreal& radius, const double& angle, const qreal& offset)
{
QPointF pointF;
auto calcAngle = (std::numbers::pi_v<qreal> * angle) / 180.0;
pointF.setX((m_MainCircleRadius + (radius * qCos(calcAngle)) - offset * qSin(calcAngle)));
pointF.setY((m_MainCircleRadius + (radius * qSin(calcAngle)) + offset * qCos(calcAngle)));
return pointF;
}
m_ValueRange - это диапазон значение от и до, в моем примере это от -100 до 100
m_MainCircleRadius - это радиус внешнего кольца за которым я и хочу поместить нужные мне ромбы
Transformer angleValueTransformer;
angleValueTransformer.setAngleRangeDegrees(CTcm_ValueRange<double>(60, -240));
angleValueTransformer.setValueRange(CTcm_ValueRange<double>(m_ValueRange.m_Max, m_ValueRange.m_Min));
angleValueTransformer.setCurrentValue(m_LimitValue);
Если вариант без рейда, то как вы тогда бы стали делать?Просто по отдельности каждый диск использовать и по отдельности забивать файлами?