ActionRetCodeEnum RotoShapeRenderNode::isIdentity(TimeValue time, const RenderScale & scale, const RectI & roi, ViewIdx view, const ImagePlaneDesc& /*plane*/, TimeValue* inputTime, ViewIdx* inputView, int* inputNb, ImagePlaneDesc* /*inputPlane*/) { *inputView = view; NodePtr node = getNode(); *inputNb = -1; RotoDrawableItemPtr rotoItem = getAttachedRotoItem(); if (!rotoItem) { return eActionStatusFailed; } Bezier* isBezier = dynamic_cast<Bezier*>(rotoItem.get()); if (!rotoItem || !rotoItem->isActivated(time, view) || (isBezier && ((!isBezier->isCurveFinished(view) && !isBezier->isOpenBezier()) || isBezier->getControlPointsCount(view) <= 1))) { *inputTime = time; *inputNb = 0; return eActionStatusOK; } bool isPainting = isDuringPaintStrokeCreation(); RectD maskRod; getRoDFromItem(rotoItem, time, view, isPainting, &maskRod); RectI maskPixelRod; maskRod.toPixelEnclosing(scale, getAspectRatio(-1), &maskPixelRod); if ( !maskPixelRod.intersects(roi) ) { *inputTime = time; *inputNb = 0; } return eActionStatusOK; } // isIdentity