本文整理汇总了C++中GeoPositions3fPtr::size方法的典型用法代码示例。如果您正苦于以下问题:C++ GeoPositions3fPtr::size方法的具体用法?C++ GeoPositions3fPtr::size怎么用?C++ GeoPositions3fPtr::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GeoPositions3fPtr
的用法示例。
在下文中一共展示了GeoPositions3fPtr::size方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createMetrics
// Create the metrics
NodePtr createMetrics(TextFace *face, Real32 scale, const TextLayoutParam &layoutParam,
const TextLayoutResult &layoutResult)
{
GeometryPtr geoPtr = Geometry::create();
beginEditCP(geoPtr);
{
GeoPTypesUI8Ptr typesPtr = GeoPTypesUI8::create();
geoPtr->setTypes(typesPtr);
GeoPLengthsUI32Ptr lensPtr = GeoPLengthsUI32::create();
geoPtr->setLengths(lensPtr);
GeoPositions3fPtr posPtr = GeoPositions3f::create();
geoPtr->setPositions(posPtr);
GeoColors3fPtr colorsPtr = GeoColors3f::create();
colorsPtr->push_back(Color3f(0.f, 0.f, 1.f));
colorsPtr->push_back(Color3f(1.f, 0.f, 0.f));
colorsPtr->push_back(Color3f(0.f, 1.f, 0.f));
colorsPtr->push_back(Color3f(1.f, 1.f, 0.f));
geoPtr->setColors(colorsPtr);
GeoIndicesUI32Ptr indicesPtr = GeoIndicesUI32::create();
geoPtr->setIndices(indicesPtr);
UInt32 i, numGlyphs = layoutResult.getNumGlyphs();
for (i = 0; i < numGlyphs; ++i)
{
const TextGlyph &glyph = face->getGlyph(layoutResult.indices[i]);
typesPtr->push_back(GL_LINE_LOOP);
lensPtr->push_back(4);
const Vec2f &pos = layoutResult.positions[i];
Real32 left = pos.x() * scale;
Real32 right = (pos.x() + glyph.getWidth()) * scale;
Real32 top = pos.y() * scale;
Real32 bottom = (pos.y() - glyph.getHeight()) * scale;
UInt32 posOffset = posPtr->size();
posPtr->push_back(Vec3f(left, bottom, 0.f));
posPtr->push_back(Vec3f(right, bottom, 0.f));
posPtr->push_back(Vec3f(right, top, 0.f));
posPtr->push_back(Vec3f(left, top, 0.f));
indicesPtr->push_back(posOffset);
indicesPtr->push_back(0);
indicesPtr->push_back(posOffset + 1);
indicesPtr->push_back(0);
indicesPtr->push_back(posOffset + 2);
indicesPtr->push_back(0);
indicesPtr->push_back(posOffset + 3);
indicesPtr->push_back(0);
}
// Bounding box
Vec2f lowerLeft, upperRight;
face->calculateBoundingBox(layoutResult, lowerLeft, upperRight);
typesPtr->push_back(GL_LINE_LOOP);
lensPtr->push_back(4);
Real32 left = lowerLeft.x() * scale;
Real32 right = upperRight.x() * scale;
Real32 top = upperRight.y() * scale;
Real32 bottom = lowerLeft.y() * scale;
UInt32 posOffset = posPtr->size();
posPtr->push_back(Vec3f(left, bottom, 0.f));
posPtr->push_back(Vec3f(right, bottom, 0.f));
posPtr->push_back(Vec3f(right, top, 0.f));
posPtr->push_back(Vec3f(left, top, 0.f));
indicesPtr->push_back(posOffset);
indicesPtr->push_back(1);
indicesPtr->push_back(posOffset + 1);
indicesPtr->push_back(1);
indicesPtr->push_back(posOffset + 2);
indicesPtr->push_back(1);
indicesPtr->push_back(posOffset + 3);
indicesPtr->push_back(1);
// Text bounds & Line bounds
Vec2f pos, textPos, offset;
if (layoutParam.horizontal == true)
{
Real32 lineHeight = face->getHoriAscent() - face->getHoriDescent();
Real32 spacing = layoutParam.spacing * lineHeight;
if (layoutParam.topToBottom == true)
{
switch (layoutParam.minorAlignment)
{
case TextLayoutParam::ALIGN_BEGIN:
break;
case TextLayoutParam::ALIGN_FIRST:
pos[1] = textPos[1] = face->getHoriAscent();
break;
case TextLayoutParam::ALIGN_MIDDLE:
pos[1] = textPos[1] = (spacing * (layoutResult.lineBounds.size() - 1) + lineHeight) / 2.f;
break;
case TextLayoutParam::ALIGN_END:
pos[1] = textPos[1] = spacing * (layoutResult.lineBounds.size() - 1) + lineHeight;
break;
}
offset.setValues(0.f, -spacing);
}
else
//.........这里部分代码省略.........