Example #1
0
void PD_2DXYPS::SetAxesLocals()
{
    xAxis.GetAxisLimits(convXaxisMin, convXaxisMax);
    yAxis.GetAxisLimits(convYaxisMin, convYaxisMax);
    convXaxisMin = TransformX(convXaxisMin);
    convYaxisMin = TransformY(convYaxisMin);
    convXaxisMax = TransformX(convXaxisMax);
    convYaxisMax = TransformY(convYaxisMax);
}
Example #2
0
BRect TCuePosition::Enclosure(bool transformed) const
{
	BRect r(m_corners[0], m_corners[0]);

	for (int i = 1; i < 4; i++) {
		if (m_corners[i].x < r.left)
			r.left = m_corners[i].x;
		if (m_corners[i].x > r.right)
			r.right = m_corners[i].x;
		if (m_corners[i].y < r.top)
			r.top = m_corners[i].y;
		if (m_corners[i].y > r.bottom)
			r.bottom = m_corners[i].y;
	}
	
	if (transformed) {
		r.left = TransformX(r.left);
		r.right = TransformX(r.right);
		r.top = TransformY(r.top);
		r.bottom = TransformY(r.bottom);
	}
	
	return r;
}
Example #3
0
void PD_2DXYPS::DrawYTic(const double& xVal,
                              const double& yVal,
                              const double& xaxOffset,
                              const double& ticLen,
                               const double& ticOffset)

{
    double yTran = TransformY(yVal);
    if (Limit::WithinOneLimit(convYaxisMin, convYaxisMax, yTran))
    {
        double xpt = xVal + xaxOffset - ticOffset;
        Point2D stPoint(xpt, yTran);
        Point2D endPoint(xpt + ticLen, yTran);
        DrawLine(stPoint, endPoint);
    }
}
Example #4
0
void PD_2DXYPS::DrawYGrid(const double& yVal,
                               const double& xminOffset,
                               const double& xmaxOffset,
                               const double& ticOffset)
{
    double yTran = TransformY(yVal);
    if (plotAnnotation.DoXAxis() && (yTran == convYaxisMin))
        return;
    if (plotAnnotation.DoXAxis() && plotAnnotation.framePlot && (yTran == convYaxisMax))
        return;

    if (Limit::WithinOneLimit(convYaxisMin, convYaxisMax, yTran))
    {
        Point2D stPoint(convXaxisMin + xminOffset - ticOffset, yTran);
        Point2D endPoint(convXaxisMax + xmaxOffset + ticOffset, yTran);
        DrawLine(stPoint, endPoint);
    }
}
Example #5
0
void PD_2DXYPS::DrawPlotAxes()
{

    if (!plotAnnotation.DoAnno())
    {
        SetClipPlanes();
        return;
    }

    SetIncrFont();

    ClearClipPlanes();

    SetAxesLocals();
    SetLineSolid();

    xAxis.SetMajorIncs();
    xAxis.SetMinorIncs();
    yAxis.SetMajorIncs();
    yAxis.SetMinorIncs();

    SC_DoubleArray xMajorIncs, xMinorIncs, yMajorIncs, yMinorIncs;
    xAxis.GetAxesMajorIncs(xMajorIncs);
    xAxis.GetAxesMinorIncs(xMinorIncs);
    yAxis.GetAxesMajorIncs(yMajorIncs);
    yAxis.GetAxesMinorIncs(yMinorIncs);

    Point2D axesOffComp, labelOffComp;
    bool dummy;
    GetAxesOffsets(axesOffComp, labelOffComp, dummy);

    Point2D majorTicLength = GetPixelComponents(plotAnnotation.majorTicLength);
    Point2D minorTicLength = GetPixelComponents(plotAnnotation.minorTicLength);
    Point2D majorTicOffset = GetPixelComponents(plotAnnotation.majorTicOffset);
    Point2D minorTicOffset = GetPixelComponents(plotAnnotation.minorTicOffset);

    // set Z val
    SetAnnoLow();

    if (plotAnnotation.drawAxesLines)
    {
        AxesDrawSetup();
        HardCopyBlockStart(24);         // 4 axes + 2 caps per axes * 2

        // x axis
        if (plotAnnotation.DoXAxis())
        {
            DrawXAxes(convYaxisMin, -axesOffComp.pY);
            if (plotAnnotation.framePlot)
                DrawXAxes(convYaxisMax, axesOffComp.pY);
        }

        // y axis
        if (plotAnnotation.DoYAxis())
        {
            DrawYAxes(convXaxisMin, -axesOffComp.pX);
            if (plotAnnotation.framePlot)
                DrawYAxes(convXaxisMax, axesOffComp.pX);
        }

        if (plotAnnotation.axesOffset > 0)
        {
            // slight kluge -- tic routines require untransformed X&Ys
            double xmin, xmax, ymin, ymax;
            xAxis.GetAxisLimits(xmin, xmax);
            yAxis.GetAxisLimits(ymin, ymax);

            // draw caps on axes

            if (plotAnnotation.DoXAxis())
            {
                DrawXTic(xmin, convYaxisMin, -axesOffComp.pY, axesOffComp.pY, 0.0);
                DrawXTic(xmax, convYaxisMin, -axesOffComp.pY, axesOffComp.pY, 0.0);

                if (plotAnnotation.framePlot)
                {
                    DrawXTic(xmin, convYaxisMax, axesOffComp.pY, -axesOffComp.pY, 0.0);
                    DrawXTic(xmax, convYaxisMax, axesOffComp.pY, -axesOffComp.pY, 0.0);
                }
            }

            if (plotAnnotation.DoYAxis())
            {
                DrawYTic(convXaxisMin, ymin, -axesOffComp.pX, axesOffComp.pX, 0.0);
                DrawYTic(convXaxisMin, ymax, -axesOffComp.pX, axesOffComp.pX, 0.0);

                if (plotAnnotation.framePlot)
                {
                    DrawYTic(convXaxisMax, ymin, axesOffComp.pX, -axesOffComp.pX, 0.0);
                    DrawYTic(convXaxisMax, ymax, axesOffComp.pX, -axesOffComp.pX, 0.0);
                }
            }
        }
        HardCopyBlockEnd();
        SetAnnoLow();
    }

    double axmaxOffset = 0.0;

    if (plotAnnotation.DoXAxis() && (xAxis.axisMajorIncs != PC_Axes::aitNone))
        if (xAxis.axisMajorIncs == PC_Axes::aitGrid)
        {
            MajorGridDrawSetup();
            HardCopyBlockStart(xMajorIncs.Size() * 2);

            if (plotAnnotation.framePlot)
                axmaxOffset = axesOffComp.pY;

            for (int i = 0; i < xMajorIncs.Size(); i++)
                DrawXGrid(xMajorIncs[i], -axesOffComp.pY, axmaxOffset, majorTicOffset.pY);

            HardCopyBlockEnd();
            SetAnnoLow();
        }
        else
        {
            MajorTicDrawSetup();
            HardCopyBlockStart(xMajorIncs.Size() * 4);
            int i;
            for (i = 0; i < xMajorIncs.Size(); i++)
            {
                DrawXTic(xMajorIncs[i], convYaxisMin, -axesOffComp.pY, majorTicLength.pY, majorTicOffset.pY);
                if (plotAnnotation.framePlot)
                    DrawXTic(xMajorIncs[i], convYaxisMax, axesOffComp.pY, -majorTicLength.pY, -majorTicOffset.pY);
            }
            HardCopyBlockEnd();
        }

    if (plotAnnotation.DoYAxis() && (yAxis.axisMajorIncs != PC_Axes::aitNone))
        if (yAxis.axisMajorIncs == PC_Axes::aitGrid)
        {
            MajorGridDrawSetup();

            if (plotAnnotation.framePlot)
                axmaxOffset = axesOffComp.pX;
            HardCopyBlockStart(yMajorIncs.Size() * 2);

            for (int i = 0; i < yMajorIncs.Size(); i++)
            {

                DrawYGrid(yMajorIncs[i], -axesOffComp.pX, axmaxOffset, majorTicOffset.pX);
            }

            HardCopyBlockEnd();
            SetAnnoLow();
        }
        else
        {
            MajorTicDrawSetup();
            HardCopyBlockStart(yMajorIncs.Size() * 4);
            for (int i = 0; i < yMajorIncs.Size(); i++)
            {
                DrawYTic(convXaxisMin, yMajorIncs[i], -axesOffComp.pX, majorTicLength.pX, majorTicOffset.pX);
                if (plotAnnotation.framePlot)
                    DrawYTic(convXaxisMax, yMajorIncs[i],  axesOffComp.pX, -majorTicLength.pX, -majorTicOffset.pX);
            }
            HardCopyBlockEnd();
        }


    if (plotAnnotation.DoXAxis() && (xAxis.axisMinorIncs != PC_Axes::aitNone))
        if (xAxis.axisMinorIncs == PC_Axes::aitGrid)
        {
            MinorGridDrawSetup();

            if (plotAnnotation.framePlot)
                axmaxOffset = axesOffComp.pY;

            HardCopyBlockStart((xMajorIncs.Size() + 1) * xMinorIncs.Size() * 2);

            for (int i = -1; i < xMajorIncs.Size(); i++)
                for (int j = 0; j < xMinorIncs.Size(); j++)
                    DrawXGrid(GetMinorIncVal(xMajorIncs, xMinorIncs, i, j, doLogX, convXaxisMax < convXaxisMin),
                                            -axesOffComp.pY, axmaxOffset, minorTicOffset.pX);

            HardCopyBlockEnd();
            SetAnnoLow();
        }
        else
        {
            MinorTicDrawSetup();
            HardCopyBlockStart((xMajorIncs.Size() + 1) * xMinorIncs.Size() * 4);
            for (int i = -1; i < xMajorIncs.Size(); i++)
                for (int j = 0; j < xMinorIncs.Size(); j++)
                {
                    double incVal = GetMinorIncVal(xMajorIncs, xMinorIncs, i, j, doLogX, convXaxisMax < convXaxisMin);
                    DrawXTic(incVal, convYaxisMin, -axesOffComp.pY, minorTicLength.pY, minorTicOffset.pY);
                    if (plotAnnotation.framePlot)
                        DrawXTic(incVal, convYaxisMax, axesOffComp.pY, -minorTicLength.pY, -minorTicOffset.pY);
                }
            HardCopyBlockEnd();
        }


    if (plotAnnotation.DoYAxis() && (yAxis.axisMinorIncs != PC_Axes::aitNone))
        if (yAxis.axisMinorIncs == PC_Axes::aitGrid)
        {
            MinorGridDrawSetup();

            if (plotAnnotation.framePlot)
                axmaxOffset = axesOffComp.pX;
            HardCopyBlockStart((yMajorIncs.Size() + 1) * yMinorIncs.Size() * 2);

            for (int i = -1; i < yMajorIncs.Size(); i++)
                for (int j = 0; j < yMinorIncs.Size(); j++)
                    DrawYGrid(GetMinorIncVal(yMajorIncs, yMinorIncs, i, j, doLogY, convYaxisMax < convYaxisMin),
                                    -axesOffComp.pX, axmaxOffset, minorTicOffset.pX);

            HardCopyBlockEnd();
            SetAnnoLow();
        }
        else
        {
            MinorTicDrawSetup();
            HardCopyBlockStart((yMajorIncs.Size() + 1) * yMinorIncs.Size() * 4);
            for (int i = -1; i < yMajorIncs.Size(); i++)
                for (int j = 0; j < yMinorIncs.Size(); j++)
                {
                    double incVal = GetMinorIncVal(yMajorIncs, yMinorIncs, i, j, doLogY, convYaxisMax < convYaxisMin);
                    DrawYTic(convXaxisMin, incVal,  -axesOffComp.pX, minorTicLength.pX, minorTicOffset.pX);
                    if (plotAnnotation.framePlot)
                        DrawYTic(convXaxisMax, incVal,  axesOffComp.pX, -minorTicLength.pX, -minorTicOffset.pX);
                }
            HardCopyBlockEnd();
        }

    double maxHeight = 0.0;
    double xaxYpos = convYaxisMin - axesOffComp.pY - labelOffComp.pY - majorTicOffset.pY;
    double maxWidth = 0.0;
    double yaxXpos = convXaxisMin - axesOffComp.pX - labelOffComp.pX - majorTicOffset.pX;

    if (plotAnnotation.labelIncrements)
    {
        SetDrawColor(defaultPenSet->GetColor(plotAnnotation.axesDataPen));

        char labStr[80];
        ExtendedLabelData labInfo;

        if (plotAnnotation.DoXAxis())
        {
            // need to go through all labels once to calc over top on exponents if horiz
            double exponentShift = 0.0;
            for (int i = 0; i < xMajorIncs.Size(); i++)
            {
                double xTran = TransformX(xMajorIncs[i]);
                if (Limit::WithinOneLimit(convXaxisMin, convXaxisMax, xTran))
                {
                    xAxis.axisIncFormat.RealToString(xMajorIncs[i], labStr, 80);

                    if (xAxis.incrFont.fontRotation == PSC_Font::fr_Horiz)
                    {
                        if (GetExtendedStringSizeInfo(xAxis.incrFont, labStr, labInfo))
                        {
                            if (labInfo.aboveTop > exponentShift)
                                exponentShift = labInfo.aboveTop;
                            double totHeight = labInfo.height + labInfo.aboveTop;
                            if ((fabs(totHeight) > fabs(maxHeight)))
                                maxHeight = totHeight;
                        }
                    }
                    else
                    {
                        double w, h;
                        if (GetStringSizeInfo(xAxis.incrFont, labStr, w, h))
                        {
                            if (fabs(w) > fabs(maxHeight))
                                maxHeight = w;
                        }
                    }
                }
            }

            //set alignment for printing
            HorizontalTextAlignment halign;
            VerticalTextAlignment valign;
            if (xAxis.incrFont.fontRotation == PSC_Font::fr_Horiz)
            {
                halign = hta_Center;
                valign = vta_Top;
            }
            else
            {
                valign = vta_Center;
                if (xAxis.incrFont.fontRotation == PSC_Font::fr_VertLeft)
                    halign = hta_Right;
                else
                    halign = hta_Left;
            }

            // now print label
            double xincLabYPos = xaxYpos - exponentShift;
            for (int i = 0; i < xMajorIncs.Size(); i++)
            {
                double xTran = TransformX(xMajorIncs[i]);
                if (Limit::WithinOneLimit(convXaxisMin, convXaxisMax, xTran))
                {
                    xAxis.axisIncFormat.RealToString(xMajorIncs[i], labStr, 80);

                    PrintString(xAxis.incrFont, labStr, halign, valign,
                                xTran, xincLabYPos);
                }
            }
        }

        if (plotAnnotation.DoYAxis())
        {
            // need to go through all labels once to calc over top on exponents if not horiz
            double exponentShift = 0.0;
            for (int i = 0; i < yMajorIncs.Size(); i++)
            {
                double yTran = TransformY(yMajorIncs[i]);
                if (Limit::WithinOneLimit(convYaxisMin, convYaxisMax, yTran))
                {
                    yAxis.axisIncFormat.RealToString(yMajorIncs[i], labStr, 80);

                    if (yAxis.incrFont.fontRotation != PSC_Font::fr_Horiz)
                    {
                        if (GetExtendedStringSizeInfo(yAxis.incrFont, labStr, labInfo))
                        {
                            if (labInfo.aboveTop > exponentShift)
                                exponentShift = labInfo.aboveTop;
                            double totHeight = labInfo.height + labInfo.aboveTop;
                            if ((fabs(totHeight) > fabs(maxWidth)))
                                maxWidth = totHeight;
                        }
                    }
                    else
                    {
                        double w, h;
                        if ((GetStringSizeInfo(yAxis.incrFont, labStr, w, h))
                            && (fabs(w) > fabs(maxWidth)))
                                maxWidth = w;
                    }
                }
            }

            //set alignment for printing
            HorizontalTextAlignment halign;
            VerticalTextAlignment valign;
            if (yAxis.incrFont.fontRotation == PSC_Font::fr_Horiz)
            {
                halign = hta_Right;
                valign = vta_Center;
            }
            else
            {
                halign = hta_Center;
                if (yAxis.incrFont.fontRotation == PSC_Font::fr_VertLeft)
                    valign = vta_Bottom;
                else
                    valign = vta_Top;
            }

            for (int i = 0; i < yMajorIncs.Size(); i++)
            {
                double yTran = TransformY(yMajorIncs[i]);
                if (Limit::WithinOneLimit(convYaxisMin, convYaxisMax, yTran))
                {
                    yAxis.axisIncFormat.RealToString(yMajorIncs[i], labStr, 80);
                    PrintString(yAxis.incrFont, labStr, halign, valign,
                                yaxXpos, yTran);
                }
            }
        }
    }

    plotAnnotation.xaxesLabelPos.pX = (convXaxisMin + convXaxisMax) / 2.0;
    plotAnnotation.xaxesLabelPos.pY = xaxYpos - maxHeight - labelOffComp.pY;
    plotAnnotation.yaxesLabelPos.pX = yaxXpos - maxWidth - labelOffComp.pX * 2.0;
    plotAnnotation.yaxesLabelPos.pY = (convYaxisMin + convYaxisMax) / 2.0;

    if (plotAnnotation.labelAxes)
    {
        if (plotAnnotation.DoXAxis() && IsNotNull(plotAnnotation.xaxesLabel))
        {
            PrintString(plotAnnotation.labelFont, plotAnnotation.xaxesLabel,
                hta_Center, vta_Top,
                plotAnnotation.xaxesLabelPos.pX, plotAnnotation.xaxesLabelPos.pY);
        }

        if (plotAnnotation.DoYAxis() && IsNotNull(plotAnnotation.yaxesLabel))
        {
            PSC_Font yLabFont(plotAnnotation.labelFont);
            yLabFont.fontRotation = PSC_Font::fr_VertLeft;

            PrintString(yLabFont, plotAnnotation.yaxesLabel, hta_Center, vta_Bottom,
                plotAnnotation.yaxesLabelPos.pX, plotAnnotation.yaxesLabelPos.pY);
        }
    }

    SetClipPlanes();
}
Example #6
0
double FastArc::GetYatU(double u)
{
	double angle = a1 + u*da;
	return TransformY(rad * sin(angle) + C.Y());
}