本文整理汇总了C++中FloatPoint类的典型用法代码示例。如果您正苦于以下问题:C++ FloatPoint类的具体用法?C++ FloatPoint怎么用?C++ FloatPoint使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了FloatPoint类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: moveTo
void Path::moveTo(const FloatPoint& point)
{
CGPathMoveToPoint(m_path, 0, point.x(), point.y());
}
示例2: addQuadCurveTo
void Path::addQuadCurveTo(const FloatPoint& cp, const FloatPoint& p)
{
CGPathAddQuadCurveToPoint(m_path, 0, cp.x(), cp.y(), p.x(), p.y());
}
示例3: FloatPoint
void SVGDocument::startPan(const FloatPoint& start)
{
if (rootElement())
m_translate = FloatPoint(start.x() - rootElement()->currentTranslate().x(), rootElement()->currentTranslate().y() + start.y());
}
示例4: createEllipseShape
static PassOwnPtr<Shape> createEllipseShape(const FloatPoint& center, const FloatSize& radii)
{
ASSERT(radii.width() >= 0 && radii.height() >= 0);
return adoptPtr(new RectangleShape(FloatRect(center.x() - radii.width(), center.y() - radii.height(), radii.width()*2, radii.height()*2), radii));
}
示例5: addArc
void Path::addArc(const FloatPoint& p, float r, float sa, float ea, bool clockwise)
{
// Workaround for <rdar://problem/5189233> CGPathAddArc hangs or crashes when passed inf as start or end angle
if (isfinite(sa) && isfinite(ea))
CGPathAddArc(m_path, 0, p.x(), p.y(), r, sa, ea, clockwise);
}
示例6: addLineTo
void Path::addLineTo(const FloatPoint& p)
{
m_path->lineTo(SkFloatToScalar(p.x()), SkFloatToScalar(p.y()));
}
示例7: addQuadCurveTo
void Path::addQuadCurveTo(const FloatPoint& cp, const FloatPoint& ep)
{
m_path->quadTo( SkFloatToScalar(cp.x()), SkFloatToScalar(cp.y()),
SkFloatToScalar(ep.x()), SkFloatToScalar(ep.y()));
}
示例8: moveTo
void Path::moveTo(const FloatPoint& point)
{
m_path->moveTo(SkFloatToScalar(point.x()), SkFloatToScalar(point.y()));
}
示例9: drawTextWithSpacing
void drawTextWithSpacing(GraphicsContext* graphicsContext, const SimpleFontData* font, const wxColour& color, const GlyphBuffer& glyphBuffer, int from, int numGlyphs, const FloatPoint& point)
{
graphicsContext->save();
wxGCDC* dc = static_cast<wxGCDC*>(graphicsContext->platformContext());
wxFont* wxfont = font->getWxFont();
graphicsContext->setFillColor(graphicsContext->fillColor());
CGContextRef cgContext = static_cast<CGContextRef>(dc->GetGraphicsContext()->GetNativeContext());
CGFontRef cgFont;
#ifdef wxOSX_USE_CORE_TEXT && wxOSX_USE_CORE_TEXT
cgFont = CTFontCopyGraphicsFont((CTFontRef)font->OSXGetCTFont(), NULL);
#else
ATSFontRef fontRef;
fontRef = FMGetATSFontRefFromFont(wxfont->MacGetATSUFontID());
if (fontRef)
cgFont = CGFontCreateWithPlatformFont((void*)&fontRef);
#endif
CGContextSetFont(cgContext, cgFont);
CGContextSetFontSize(cgContext, wxfont->GetPointSize());
CGFloat red, green, blue, alpha;
graphicsContext->fillColor().getRGBA(red, green, blue, alpha);
CGContextSetRGBFillColor(cgContext, red, green, blue, alpha);
CGAffineTransform matrix = CGAffineTransformIdentity;
matrix.b = -matrix.b;
matrix.d = -matrix.d;
CGContextSetTextMatrix(cgContext, matrix);
CGContextSetTextPosition(cgContext, point.x(), point.y());
const FloatSize* advanceSizes = static_cast<const FloatSize*>(glyphBuffer.advances(from));
int size = glyphBuffer.size() - from;
CGSize sizes[size];
CGGlyph glyphs[numGlyphs];
// if the function doesn't exist, we're probably on tiger and need to grab the
// function under its old name, CGFontGetGlyphsForUnicodes
if (!CGFontGetGlyphsForUnichars)
CGFontGetGlyphsForUnichars = (CGFontGetGlyphsForUnicharsPtr)dlsym(RTLD_DEFAULT, "CGFontGetGlyphsForUnicodes");
// Let's make sure we got the function under one name or another!
ASSERT(CGFontGetGlyphsForUnichars);
CGFontGetGlyphsForUnichars(cgFont, glyphBuffer.glyphs(from), glyphs, numGlyphs);
for (int i = 0; i < size; i++) {
FloatSize fsize = advanceSizes[i];
sizes[i] = CGSizeMake(fsize.width(), fsize.height());
}
CGContextShowGlyphsWithAdvances(cgContext, glyphs, sizes, numGlyphs);
if (cgFont)
CGFontRelease(cgFont);
graphicsContext->restore();
}
示例10: platformPath
void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)
{
if (isEmpty())
return;
cairo_t* cr = platformPath()->context();
double x0, y0;
cairo_get_current_point(cr, &x0, &y0);
FloatPoint p0(x0, y0);
// Draw only a straight line to p1 if any of the points are equal or the radius is zero
// or the points are collinear (triangle that the points form has area of zero value).
if ((p1.x() == p0.x() && p1.y() == p0.y()) || (p1.x() == p2.x() && p1.y() == p2.y()) || !radius
|| !areaOfTriangleFormedByPoints(p0, p1, p2)) {
cairo_line_to(cr, p1.x(), p1.y());
return;
}
FloatPoint p1p0((p0.x() - p1.x()),(p0.y() - p1.y()));
FloatPoint p1p2((p2.x() - p1.x()),(p2.y() - p1.y()));
float p1p0_length = sqrtf(p1p0.x() * p1p0.x() + p1p0.y() * p1p0.y());
float p1p2_length = sqrtf(p1p2.x() * p1p2.x() + p1p2.y() * p1p2.y());
double cos_phi = (p1p0.x() * p1p2.x() + p1p0.y() * p1p2.y()) / (p1p0_length * p1p2_length);
// all points on a line logic
if (cos_phi == -1) {
cairo_line_to(cr, p1.x(), p1.y());
return;
}
if (cos_phi == 1) {
// add infinite far away point
unsigned int max_length = 65535;
double factor_max = max_length / p1p0_length;
FloatPoint ep((p0.x() + factor_max * p1p0.x()), (p0.y() + factor_max * p1p0.y()));
cairo_line_to(cr, ep.x(), ep.y());
return;
}
float tangent = radius / tan(acos(cos_phi) / 2);
float factor_p1p0 = tangent / p1p0_length;
FloatPoint t_p1p0((p1.x() + factor_p1p0 * p1p0.x()), (p1.y() + factor_p1p0 * p1p0.y()));
FloatPoint orth_p1p0(p1p0.y(), -p1p0.x());
float orth_p1p0_length = sqrt(orth_p1p0.x() * orth_p1p0.x() + orth_p1p0.y() * orth_p1p0.y());
float factor_ra = radius / orth_p1p0_length;
// angle between orth_p1p0 and p1p2 to get the right vector orthographic to p1p0
double cos_alpha = (orth_p1p0.x() * p1p2.x() + orth_p1p0.y() * p1p2.y()) / (orth_p1p0_length * p1p2_length);
if (cos_alpha < 0.f)
orth_p1p0 = FloatPoint(-orth_p1p0.x(), -orth_p1p0.y());
FloatPoint p((t_p1p0.x() + factor_ra * orth_p1p0.x()), (t_p1p0.y() + factor_ra * orth_p1p0.y()));
// calculate angles for addArc
orth_p1p0 = FloatPoint(-orth_p1p0.x(), -orth_p1p0.y());
float sa = acos(orth_p1p0.x() / orth_p1p0_length);
if (orth_p1p0.y() < 0.f)
sa = 2 * piDouble - sa;
// anticlockwise logic
bool anticlockwise = false;
float factor_p1p2 = tangent / p1p2_length;
FloatPoint t_p1p2((p1.x() + factor_p1p2 * p1p2.x()), (p1.y() + factor_p1p2 * p1p2.y()));
FloatPoint orth_p1p2((t_p1p2.x() - p.x()),(t_p1p2.y() - p.y()));
float orth_p1p2_length = sqrtf(orth_p1p2.x() * orth_p1p2.x() + orth_p1p2.y() * orth_p1p2.y());
float ea = acos(orth_p1p2.x() / orth_p1p2_length);
if (orth_p1p2.y() < 0)
ea = 2 * piDouble - ea;
if ((sa > ea) && ((sa - ea) < piDouble))
anticlockwise = true;
if ((sa < ea) && ((ea - sa) > piDouble))
anticlockwise = true;
cairo_line_to(cr, t_p1p0.x(), t_p1p0.y());
addArc(p, radius, sa, ea, anticlockwise);
}
示例11: addBezierCurveTo
void Path::addBezierCurveTo(const FloatPoint& p1, const FloatPoint& p2, const FloatPoint& ep)
{
m_path->cubicTo(SkFloatToScalar(p1.x()), SkFloatToScalar(p1.y()),
SkFloatToScalar(p2.x()), SkFloatToScalar(p2.y()),
SkFloatToScalar(ep.x()), SkFloatToScalar(ep.y()));
}
示例12: createCircleShape
static PassOwnPtr<Shape> createCircleShape(const FloatPoint& center, float radius)
{
ASSERT(radius >= 0);
return adoptPtr(new RectangleShape(FloatRect(center.x() - radius, center.y() - radius, radius*2, radius*2), FloatSize(radius, radius)));
}
示例13: addArcTo
void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)
{
m_path->arcTo(SkFloatToScalar(p1.x()), SkFloatToScalar(p1.y()),
SkFloatToScalar(p2.x()), SkFloatToScalar(p2.y()),
SkFloatToScalar(radius));
}
示例14: addArcTo
void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)
{
CGPathAddArcToPoint(m_path, 0, p1.x(), p1.y(), p2.x(), p2.y(), radius);
}
示例15: findIntersection
bool findIntersection(const FloatPoint& p1, const FloatPoint& p2, const FloatPoint& d1, const FloatPoint& d2, FloatPoint& intersection)
{
float pOffset = 0;
float pSlope = findSlope(p1, p2, pOffset);
float dOffset = 0;
float dSlope = findSlope(d1, d2, dOffset);
if (dSlope == pSlope)
return false;
if (pSlope == std::numeric_limits<float>::infinity()) {
intersection.setX(p1.x());
intersection.setY(dSlope * intersection.x() + dOffset);
return true;
}
if (dSlope == std::numeric_limits<float>::infinity()) {
intersection.setX(d1.x());
intersection.setY(pSlope * intersection.x() + pOffset);
return true;
}
// Find x at intersection, where ys overlap; x = (c' - c) / (m - m')
intersection.setX((dOffset - pOffset) / (pSlope - dSlope));
intersection.setY(pSlope * intersection.x() + pOffset);
return true;
}