void PD_2DXYPS::SetAxesLocals() { xAxis.GetAxisLimits(convXaxisMin, convXaxisMax); yAxis.GetAxisLimits(convYaxisMin, convYaxisMax); convXaxisMin = TransformX(convXaxisMin); convYaxisMin = TransformY(convYaxisMin); convXaxisMax = TransformX(convXaxisMax); convYaxisMax = TransformY(convYaxisMax); }
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; }
void PD_2DXYPS::DrawXTic(const double& xVal, const double& yVal, const double& yaxOffset, const double& ticLen, const double& ticOffset) { double xTran = TransformX(xVal); if (Limit::WithinOneLimit(convXaxisMin, convXaxisMax, xTran)) { double ypt = yVal + yaxOffset - ticOffset; Point2D stPoint(xTran, ypt); Point2D endPoint(xTran, ypt + ticLen); DrawLine(stPoint, endPoint); } }
void PD_2DXYPS::DrawXGrid(const double& xVal, const double& yminOffset, const double& ymaxOffset, const double& ticOffset) { double xTran = TransformX(xVal); if (plotAnnotation.DoYAxis() && (xTran == convXaxisMin)) return; if (plotAnnotation.DoYAxis() && plotAnnotation.framePlot && (xTran == convXaxisMax)) return; if (Limit::WithinOneLimit(convXaxisMin, convXaxisMax, xTran)) { Point2D stPoint(xTran, convYaxisMin + yminOffset - ticOffset); Point2D endPoint(xTran, convYaxisMax + ymaxOffset + ticOffset); DrawLine(stPoint, endPoint); } }
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(); }
double FastArc::GetXatU(double u) { double angle = a1 + u*da; return TransformX(rad * cos(angle) + C.X()); }