void rspfImageViewTransform::getImageToViewScale(rspfDpt& resultScale,
						  const rspfDpt& imagePoint,
						  const rspfDpt& deltaImagePointXY)const
{
  rspfDpt p1 = imagePoint;
  rspfDpt p2(imagePoint.x + deltaImagePointXY.x,
	      imagePoint.y);
  rspfDpt p3(imagePoint.x,
	      imagePoint.y + deltaImagePointXY.y);
  
  rspfDpt transformedP1;
  rspfDpt transformedP2;
  rspfDpt transformedP3;
  imageToView(p1, transformedP1);
  imageToView(p2, transformedP2);
  imageToView(p3, transformedP3);
  rspfDpt deltaP1P2 = transformedP1 - transformedP2;
  rspfDpt deltaP1P3 = transformedP1 - transformedP3;
 
  double sumSquaredSqrtP1P2 = sqrt((deltaP1P2.x*deltaP1P2.x) +
			       (deltaP1P2.y*deltaP1P2.y));
  double sumSquaredSqrtP1P3 = sqrt((deltaP1P3.x*deltaP1P3.x) +
			       (deltaP1P3.y*deltaP1P3.y));
  resultScale.x = 0;
  resultScale.y = 0;
  if(sumSquaredSqrtP1P2 > FLT_EPSILON)
    {
      resultScale.x = sumSquaredSqrtP1P2/deltaImagePointXY.x;
    }
  if(sumSquaredSqrtP1P3 > FLT_EPSILON)
    {
      resultScale.y = sumSquaredSqrtP1P3/deltaImagePointXY.y;
    }
}
void rspfImageViewTransform::getScaleChangeImageToView(rspfDpt& result,
                                                        const rspfDrect& imageRect)
{
   result.makeNan();
   if(!imageRect.hasNans())
   {
      rspfDpt vul;
      rspfDpt vur;
      rspfDpt vlr;
      rspfDpt vll;
      imageToView(imageRect.ul(),
                  vul);
      imageToView(imageRect.ur(),
                  vur);
      imageToView(imageRect.lr(),
                  vlr);
      imageToView(imageRect.ll(),
                  vll);
      if(!vul.hasNans()&&
         !vur.hasNans()&&
         !vlr.hasNans()&&
         !vll.hasNans())
      {
         
         double deltaTop    = (vul - vur).length();
         double deltaBottom = (vll - vlr).length();
         double deltaRight  = (vur - vlr).length();
         
         double w = imageRect.width();
         double h = imageRect.height();
         result.x = (deltaTop/w + deltaBottom/w)*.5;
         result.y = (deltaRight/h + deltaRight/h)*.5;
      }
   }
}
void rspfImageViewTransform::getScaleChangeViewToImage(rspfDpt& result,
                                                        const rspfDrect& viewRect)
{
   result.makeNan();
   if(!viewRect.hasNans())
   {
      rspfDpt iul;
      rspfDpt iur;
      rspfDpt ilr;
      rspfDpt ill;
      imageToView(viewRect.ul(),
                  iul);
      imageToView(viewRect.ur(),
                  iur);
      imageToView(viewRect.lr(),
                  ilr);
      imageToView(viewRect.ll(),
                  ill);
      if(!iul.hasNans()&&
         !iur.hasNans()&&
         !ilr.hasNans()&&
         !ill.hasNans())
      {
         
         double deltaTop    = (iul - iur).length();
         double deltaBottom = (ill - ilr).length();
         double deltaRight  = (iur - ilr).length();
         
         double w = viewRect.width();
         double h = viewRect.height();
         result.x = (deltaTop/w + deltaBottom/w)*.5;
         result.y = (deltaRight/h + deltaRight/h)*.5;
      }
   }
}
rspfDrect rspfImageViewTransform::getImageToViewBounds(const rspfDrect& imageRect)const
{
   rspfDpt p1;
   rspfDpt p2;
   rspfDpt p3;
   rspfDpt p4;
   imageToView(imageRect.ul(), p1);
   imageToView(imageRect.ur(), p2);
   imageToView(imageRect.lr(), p3);
   imageToView(imageRect.ll(), p4);
   return rspfDrect(p1, p2, p3, p4);
}
ossimDrect ossimImageViewTransform::getImageToViewBounds(const ossimDrect& imageRect)const
{
    ossimDpt p1;
    ossimDpt p2;
    ossimDpt p3;
    ossimDpt p4;

    imageToView(imageRect.ul(), p1);
    imageToView(imageRect.ur(), p2);
    imageToView(imageRect.lr(), p3);
    imageToView(imageRect.ll(), p4);

    return ossimDrect(p1, p2, p3, p4);
}
rspfDpt rspfImageViewTransform::imageToView(const rspfDpt& imagePoint)const
{
   rspfDpt tempPt;
   
   imageToView(imagePoint, tempPt);
   
   return tempPt;
}
ossimDpt ossimImageViewTransform::imageToView(const ossimDpt& imagePoint)const
{
    ossimDpt tempPt;

    imageToView(imagePoint, tempPt);

    return tempPt;
}
示例#8
0
void ossimIvtGeomXform::groundToView(const ossimGpt& gpt, ossimDpt& viewPt)
{
  ossimDpt ipt;
  viewPt.makeNan();

  groundToImage(gpt, ipt);
  if(!ipt.hasNans())
  {
    imageToView(ipt, viewPt);
  }
}
void ossimImageViewTransform::getImageToViewScale(ossimDpt& resultScale,
        const ossimDpt& imagePoint,
        const ossimDpt& deltaImagePointXY)const
{
    ossimDpt p1 = imagePoint;
    ossimDpt p2(imagePoint.x + deltaImagePointXY.x,
                imagePoint.y);
    ossimDpt p3(imagePoint.x,
                imagePoint.y + deltaImagePointXY.y);

    ossimDpt transformedP1;
    ossimDpt transformedP2;
    ossimDpt transformedP3;

    imageToView(p1, transformedP1);
    imageToView(p2, transformedP2);
    imageToView(p3, transformedP3);

    ossimDpt deltaP1P2 = transformedP1 - transformedP2;
    ossimDpt deltaP1P3 = transformedP1 - transformedP3;

    // now compute the distances.
    double sumSquaredSqrtP1P2 = sqrt((deltaP1P2.x*deltaP1P2.x) +
                                     (deltaP1P2.y*deltaP1P2.y));
    double sumSquaredSqrtP1P3 = sqrt((deltaP1P3.x*deltaP1P3.x) +
                                     (deltaP1P3.y*deltaP1P3.y));

    resultScale.x = 0;
    resultScale.y = 0;

    if(sumSquaredSqrtP1P2 > FLT_EPSILON)
    {
        resultScale.x = sumSquaredSqrtP1P2/deltaImagePointXY.x;
    }
    if(sumSquaredSqrtP1P3 > FLT_EPSILON)
    {
        resultScale.y = sumSquaredSqrtP1P3/deltaImagePointXY.y;
    }
}
KisPaintInformation KisPaintingInformationBuilder::hover(const QPointF &imagePoint,
                                                         const KoPointerEvent *event)
{
    qreal perspective = calculatePerspective(imagePoint);
    qreal speed = m_speedSmoother->getNextSpeed(imageToView(imagePoint));

    if (event) {
        return KisPaintInformation::createHoveringModeInfo(imagePoint,
                                                           PRESSURE_DEFAULT,
                                                           event->xTilt(), event->yTilt(),
                                                           event->rotation(),
                                                           event->tangentialPressure(),
                                                           perspective,
                                                           speed);
    } else {
        return KisPaintInformation::createHoveringModeInfo(imagePoint);
    }
}
KisPaintInformation KisPaintingInformationBuilder::createPaintingInformation(KoPointerEvent *event,
                                                                             int timeElapsed)
{

    QPointF adjusted = adjustDocumentPoint(event->point, m_startPoint);
    QPointF imagePoint = documentToImage(adjusted);
    qreal perspective = calculatePerspective(adjusted);
    qreal speed = m_speedSmoother->getNextSpeed(imageToView(imagePoint));

    return KisPaintInformation(imagePoint,
                               !m_pressureDisabled ? 1.0 : pressureToCurve(event->pressure()),
                               event->xTilt(), event->yTilt(),
                               event->rotation(),
                               event->tangentialPressure(),
                               perspective,
                               timeElapsed,
                               speed);
}
void rspfImageViewTransform::forward(const rspfDpt& input,
                                      rspfDpt& output) const
{
   imageToView(input, output);
}
void ossimImageViewTransform::forward(const ossimDpt& input,
                                      ossimDpt& output) const
{
    imageToView(input, output);
}