本文整理汇总了C++中KisPaintInformation::pos方法的典型用法代码示例。如果您正苦于以下问题:C++ KisPaintInformation::pos方法的具体用法?C++ KisPaintInformation::pos怎么用?C++ KisPaintInformation::pos使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KisPaintInformation
的用法示例。
在下文中一共展示了KisPaintInformation::pos方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: paintLine
KisDistanceInformation KisCurvePaintOp::paintLine(const KisPaintInformation& pi1, const KisPaintInformation& pi2, const KisDistanceInformation& savedDist)
{
Q_UNUSED(savedDist);
if (!painter()) return KisDistanceInformation();
m_dev = painter()->device();
if (!m_dev) return KisDistanceInformation();
if (!m_dab) {
m_dab = new KisPaintDevice(painter()->device()->colorSpace());
} else {
m_dab->clear();
}
//write device, read device, position
m_curveBrush.paintLine(m_dab, m_dev, pi1, pi2);
QRect rc = m_dab->extent();
painter()->bitBlt(rc.topLeft(), m_dab, rc);
KisVector2D end = toKisVector2D(pi2.pos());
KisVector2D start = toKisVector2D(pi1.pos());
KisVector2D dragVec = end - start;
return KisDistanceInformation(0, dragVec.norm());
}
示例2: paintAt
KisSpacingInformation KisLiquifyPaintop::paintAt(const KisPaintInformation &pi)
{
static const qreal sizeToSigmaCoeff = 1.0 / 3.0;
const qreal size = sizeToSigmaCoeff *
(m_d->props.sizeHasPressure() ?
pi.pressure() * m_d->props.size():
m_d->props.size());
const qreal spacing = m_d->props.spacing() * size;
const qreal reverseCoeff =
m_d->props.mode() !=
KisLiquifyProperties::UNDO &&
m_d->props.reverseDirection() ? -1.0 : 1.0;
const qreal amount = m_d->props.amountHasPressure() ?
pi.pressure() * reverseCoeff * m_d->props.amount():
reverseCoeff * m_d->props.amount();
const bool useWashMode = m_d->props.useWashMode();
const qreal flow = m_d->props.flow();
switch (m_d->props.mode()) {
case KisLiquifyProperties::MOVE: {
const qreal offsetLength = size * amount;
m_d->worker->translatePoints(pi.pos(),
pi.drawingDirectionVector() * offsetLength,
size, useWashMode, flow);
break;
}
case KisLiquifyProperties::SCALE:
m_d->worker->scalePoints(pi.pos(),
amount,
size, useWashMode, flow);
break;
case KisLiquifyProperties::ROTATE:
m_d->worker->rotatePoints(pi.pos(),
2.0 * M_PI * amount,
size, useWashMode, flow);
break;
case KisLiquifyProperties::OFFSET: {
const qreal offsetLength = size * amount;
m_d->worker->translatePoints(pi.pos(),
KisAlgebra2D::rightUnitNormal(pi.drawingDirectionVector()) * offsetLength,
size, useWashMode, flow);
break;
}
case KisLiquifyProperties::UNDO:
m_d->worker->undoPoints(pi.pos(),
amount,
size);
break;
case KisLiquifyProperties::N_MODES:
qFatal("Not supported mode");
}
return KisSpacingInformation(spacing);
}
示例3: brushOutline
QPainterPath KisDuplicateOpSettings::brushOutline(const KisPaintInformation &info, OutlineMode mode)
{
QPainterPath path;
// clone tool should always show an outline
path = KisBrushBasedPaintOpSettings::brushOutlineImpl(info, mode, 1.0, true);
QPainterPath copy(path);
QRectF rect2 = copy.boundingRect();
if (m_isOffsetNotUptodate || !getBool(DUPLICATE_MOVE_SOURCE_POINT)) {
copy.translate(m_position - info.pos());
}
else {
copy.translate(-m_offset);
}
path.addPath(copy);
qreal dx = rect2.width() / 4.0;
qreal dy = rect2.height() / 4.0;
rect2.adjust(dx, dy, -dx, -dy);
path.moveTo(rect2.topLeft());
path.lineTo(rect2.bottomRight());
path.moveTo(rect2.topRight());
path.lineTo(rect2.bottomLeft());
return path;
}
示例4: paintAt
KisSpacingInformation KisChalkPaintOp::paintAt(const KisPaintInformation& info)
{
if (!painter()) return 1.0;
if (!m_dab) {
m_dab = source()->createCompositionSourceDevice();
} else {
m_dab->clear();
}
qreal x1, y1;
x1 = info.pos().x();
y1 = info.pos().y();
quint8 origOpacity = m_opacityOption.apply(painter(), info);
m_chalkBrush->paint(m_dab, x1, y1, painter()->paintColor());
QRect rc = m_dab->extent();
painter()->bitBlt(rc.x(), rc.y(), m_dab, rc.x(), rc.y(), rc.width(), rc.height());
painter()->renderMirrorMask(rc,m_dab);
painter()->setOpacity(origOpacity);
return 1.0;
}
示例5: paintLine
void KisCurvePaintOp::paintLine(KisPaintDeviceSP dab, const KisPaintInformation &pi1, const KisPaintInformation &pi2)
{
if (!m_painter) {
m_painter = new KisPainter(dab);
m_painter->setPaintColor(painter()->paintColor());
}
int maxPoints = m_curveProperties.curve_stroke_history_size;
m_points.append(pi2.pos());
while (m_points.length() > maxPoints) {
m_points.removeFirst();
}
const qreal additionalScale = KisLodTransform::lodToScale(painter()->device());
const qreal lineWidth = additionalScale * m_lineWidthOption.apply(pi2, m_curveProperties.curve_line_width);
QPen pen(QBrush(Qt::white), lineWidth);
QPainterPath path;
if (m_curveProperties.curve_paint_connection_line) {
path.moveTo(pi1.pos());
path.lineTo(pi2.pos());
m_painter->drawPainterPath(path, pen);
path = QPainterPath();
}
if (m_points.length() >= maxPoints) {
// alpha * 0.2;
path.moveTo(m_points.first());
if (m_curveProperties.curve_smoothing) {
path.quadTo(m_points.at(maxPoints / 2), m_points.last());
}
else {
// control point is at 1/3 of the history, 2/3 of the history and endpoint at 3/3
int step = maxPoints / 3;
path.cubicTo(m_points.at(step), m_points.at(step + step), m_points.last());
}
qreal curveOpacity = m_curvesOpacityOption.apply(pi2, m_curveProperties.curve_curves_opacity);
m_painter->setOpacity(qRound(255.0 * curveOpacity));
m_painter->drawPainterPath(path, pen);
m_painter->setOpacity(255); // full
}
}
示例6: mousePressEvent
bool KisDuplicateOpSettings::mousePressEvent(const KisPaintInformation &info, Qt::KeyboardModifiers modifiers)
{
bool ignoreEvent = true;
if (modifiers == Qt::ControlModifier) {
m_position = info.pos();
m_isOffsetNotUptodate = true;
ignoreEvent = false;
} else {
if (m_isOffsetNotUptodate) {
m_offset = info.pos() - m_position;
m_isOffsetNotUptodate = false;
}
ignoreEvent = true;
}
return ignoreEvent;
}
示例7: updateBrushMask
void KisSketchPaintOp::updateBrushMask(const KisPaintInformation& info, qreal scale, qreal rotation){
m_maskDab = m_dabCache->fetchDab(m_dab->colorSpace(), painter()->paintColor(), scale, scale,
rotation, info);
// update bounding box
m_brushBoundingBox = m_maskDab->bounds();
m_hotSpot = m_brush->hotSpot(scale,scale,rotation,info);
m_brushBoundingBox.translate(info.pos() - m_hotSpot);
}
示例8: stabilizerPollAndPaint
void KisToolFreehandHelper::stabilizerPollAndPaint()
{
KisStabilizedEventsSampler::iterator it;
KisStabilizedEventsSampler::iterator end;
std::tie(it, end) = m_d->stabilizedSampler.range();
QVector<KisPaintInformation> delayedPaintTodoItems;
for (; it != end; ++it) {
KisPaintInformation sampledInfo = *it;
bool canPaint = true;
if (m_d->smoothingOptions->useDelayDistance()) {
const qreal R = m_d->smoothingOptions->delayDistance() /
m_d->resources->effectiveZoom();
QPointF diff = sampledInfo.pos() - m_d->previousPaintInformation.pos();
qreal dx = sqrt(pow2(diff.x()) + pow2(diff.y()));
canPaint = dx > R;
}
if (canPaint) {
KisPaintInformation newInfo =
m_d->getStabilizedPaintInfo(m_d->stabilizerDeque, sampledInfo);
if (m_d->stabilizerDelayedPaintHelper.running()) {
delayedPaintTodoItems.append(newInfo);
} else {
paintLine(m_d->previousPaintInformation, newInfo);
}
m_d->previousPaintInformation = newInfo;
// Push the new entry through the queue
m_d->stabilizerDeque.dequeue();
m_d->stabilizerDeque.enqueue(sampledInfo);
} else if (m_d->stabilizerDeque.head().pos() != m_d->previousPaintInformation.pos()) {
QQueue<KisPaintInformation>::iterator it = m_d->stabilizerDeque.begin();
QQueue<KisPaintInformation>::iterator end = m_d->stabilizerDeque.end();
while (it != end) {
*it = m_d->previousPaintInformation;
++it;
}
}
}
m_d->stabilizedSampler.clear();
if (m_d->stabilizerDelayedPaintHelper.running()) {
m_d->stabilizerDelayedPaintHelper.update(delayedPaintTodoItems);
} else {
emit requestExplicitUpdateOutline();
}
}
示例9: paintBezierCurve
void KisToolFreehandHelper::paintBezierCurve(int painterInfoId,
const KisPaintInformation &pi1,
const QPointF &control1,
const QPointF &control2,
const KisPaintInformation &pi2)
{
#ifdef DEBUG_BEZIER_CURVES
KisPaintInformation tpi1;
KisPaintInformation tpi2;
tpi1 = pi1;
tpi2 = pi2;
tpi1.setPressure(0.3);
tpi2.setPressure(0.3);
paintLine(tpi1, tpi2);
tpi1.setPressure(0.6);
tpi2.setPressure(0.3);
tpi1.setPos(pi1.pos());
tpi2.setPos(control1);
paintLine(tpi1, tpi2);
tpi1.setPos(pi2.pos());
tpi2.setPos(control2);
paintLine(tpi1, tpi2);
#endif
m_d->hasPaintAtLeastOnce = true;
m_d->strokesFacade->addJob(m_d->strokeId,
new FreehandStrokeStrategy::Data(m_d->resources->currentNode(),
painterInfoId,
pi1, control1, control2, pi2));
if(m_d->recordingAdapter) {
m_d->recordingAdapter->addCurve(pi1, control1, control2, pi2);
}
}
示例10: start
void KisToolLineHelper::start(KoPointerEvent *event, KoCanvasResourceManager *resourceManager)
{
if (!m_d->enabled) return;
KisPaintInformation pi =
m_d->infoBuilder->startStroke(event, elapsedStrokeTime(), resourceManager);
if (!m_d->useSensors) {
pi = KisPaintInformation(pi.pos());
}
m_d->linePoints.append(pi);
}
示例11: mousePressEvent
bool KisDuplicateOpSettings::mousePressEvent(const KisPaintInformation &info, Qt::KeyboardModifiers modifiers, KisNodeWSP currentNode)
{
bool ignoreEvent = true;
if (modifiers & Qt::ControlModifier) {
if (!m_sourceNode || !(modifiers & Qt::AltModifier)) {
m_sourceNode = currentNode;
}
m_position = info.pos();
m_isOffsetNotUptodate = true;
ignoreEvent = false;
}
else {
if (m_isOffsetNotUptodate) {
m_offset = info.pos() - m_position;
m_isOffsetNotUptodate = false;
}
ignoreEvent = true;
}
return ignoreEvent;
}
示例12: updateBrushMask
void KisSketchPaintOp::updateBrushMask(const KisPaintInformation& info, qreal scale, qreal rotation)
{
QRect dstRect;
m_maskDab = m_dabCache->fetchDab(m_dab->colorSpace(),
painter()->paintColor(),
info.pos(),
scale, scale, rotation,
info, 1.0,
&dstRect);
m_brushBoundingBox = dstRect;
m_hotSpot = QPointF(0.5 * m_brushBoundingBox.width(),
0.5 * m_brushBoundingBox.height());
}
示例13: addPoint
void KisToolLineHelper::addPoint(KoPointerEvent *event, const QPointF &overridePos)
{
if (!m_d->enabled) return;
KisPaintInformation pi =
m_d->infoBuilder->continueStroke(event, elapsedStrokeTime());
if (!m_d->useSensors) {
pi = KisPaintInformation(pi.pos());
}
if (!overridePos.isNull()) {
pi.setPos(overridePos);
}
if (m_d->linePoints.size() > 1) {
const QPointF startPos = m_d->linePoints.first().pos();
const QPointF endPos = pi.pos();
const qreal maxDistance = kisDistance(startPos, endPos);
const QPointF unit = (endPos - startPos) / maxDistance;
QVector<KisPaintInformation>::iterator it = m_d->linePoints.begin();
++it;
while (it != m_d->linePoints.end()) {
qreal dist = kisDistance(startPos, it->pos());
if (dist < maxDistance) {
QPointF pos = startPos + unit * dist;
it->setPos(pos);
++it;
} else {
it = m_d->linePoints.erase(it);
}
}
}
m_d->linePoints.append(pi);
}
示例14: paintLine
void KisParticlePaintOp::paintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)
{
Q_UNUSED(currentDistance);
if (!painter()) return;
if (!m_dab) {
m_dab = source()->createCompositionSourceDevice();
}
else {
m_dab->clear();
}
if (m_first) {
m_particleBrush.setInitialPosition(pi1.pos());
m_first = false;
}
m_particleBrush.draw(m_dab, painter()->paintColor(), pi2.pos());
QRect rc = m_dab->extent();
painter()->bitBlt(rc.x(), rc.y(), m_dab, rc.x(), rc.y(), rc.width(), rc.height());
painter()->renderMirrorMask(rc, m_dab);
}
示例15: postProcessDab
void KisDabCache::postProcessDab(KisFixedPaintDeviceSP dab,
const KisPaintInformation& info)
{
if (m_d->mirrorOption) {
MirrorProperties mirror = m_d->mirrorOption->apply(info);
dab->mirror(mirror.horizontalMirror, mirror.verticalMirror);
}
if (m_d->sharpnessOption) {
m_d->sharpnessOption->applyThreshold(dab);
}
if (m_d->textureOption) {
m_d->textureOption->apply(dab, info.pos().toPoint(), info);
}
}