static OfxStatus interactPenDown(OfxImageEffectHandle pluginInstance, OfxInteractHandle interactInstance, OfxPropertySetHandle inArgs) { // get my data handle MyInteractData *data = getInteractData(interactInstance); // get the point param's value double x, y; gParamHost->paramGetValue(data->pointParam, &x, &y); // get the size of a pixel on screen double pixelScale[2]; ofxuGetInteractPixelScale(inArgs, pixelScale); // see if the pen is within 5 screen pixels of the point, in which case, select it double penPos[2]; gPropHost->propGetDoubleN(inArgs, kOfxInteractPropPenPosition, 2, penPos); if(fabs(x - penPos[0]) < 5 * pixelScale[0] && fabs(y - penPos[1]) < 5 * pixelScale[1]) { data->selected = true; return kOfxStatOK; } return kOfxStatReplyDefault; }
static OfxStatus interactPenDown(OfxImageEffectHandle pluginInstance, OfxInteractHandle interactInstance, OfxPropertySetHandle inArgs) { // get my data handle MyInteractData *data = getInteractData(interactInstance); // get the project size as we are normalising to this OfxPointD projSize, projOffset; ofxuGetProjectSetup(pluginInstance, projSize, projOffset); // get the point param's value double x, y; gParamHost->paramGetValue(data->pointParam, &x, &y); // scale it up to the project size as it is a normalised spatial parameter x = projOffset.x + x * projSize.x; y = projOffset.y + y * projSize.y; // get the size of a pixel on screen double pixelScale[2]; ofxuGetInteractPixelScale(inArgs, pixelScale); // see if the pen is within 5 screen pixels of the point, in which case, select it double penPos[2]; gPropHost->propGetDoubleN(inArgs, kOfxInteractPropPenPosition, 2, penPos); if(fabs(x - penPos[0]) < 5 * pixelScale[0] && fabs(y - penPos[1]) < 5 * pixelScale[1]) { data->selected = true; return kOfxStatOK; } return kOfxStatReplyDefault; }
// draw an interact instance static OfxStatus interactDraw(OfxImageEffectHandle pluginInstance, OfxInteractHandle interactInstance, OfxPropertySetHandle drawArgs) { OfxStatus err; // get my private interact data MyInteractData *data = getInteractData(interactInstance); // get the project size OfxPointD projSize, projOffset; ofxuGetProjectSetup(pluginInstance, projSize, projOffset); // get the size of a pixel in the current projection double pixelScale[2]; ofxuGetInteractPixelScale(drawArgs, pixelScale); // get my param's value double x, y; if((err = getCustomParam(pluginInstance, x, y)) != kOfxStatOK) return err; // scale it up to the project size as it is normalised x = projOffset.x + x * projSize.x; y = projOffset.y + y * projSize.y; // make the xhair a constant size on screen by scaling by the pixel scale float dx = kXHairSize * pixelScale[0]; float dy = kXHairSize * pixelScale[1]; // if the we have selected the Xhair, draw it highlit if(data->selected) glColor3f(1, 1, 1); else glColor3f(1, 0, 0); // Draw a cross hair, the current coordinate system aligns with the image plane. glPushMatrix(); glTranslated(x, y, 0); glBegin(GL_LINES); glVertex2f(-dx, 0); glVertex2f(dx, 0); glVertex2f(0, -dy); glVertex2f(0, dy); glEnd(); glPopMatrix(); return kOfxStatOK; }
// draw an interact instance static OfxStatus interactDraw(OfxImageEffectHandle pluginInstance, OfxInteractHandle interactInstance, OfxPropertySetHandle drawArgs) { // get my private interact data MyInteractData *data = getInteractData(interactInstance); // get the size of a pixel in the current projection double pixelScale[2]; ofxuGetInteractPixelScale(drawArgs, pixelScale); // get my param's value double x, y; gParamHost->paramGetValue(data->pointParam, &x, &y); // make the xhair a constant size on screen by scaling by the pixel scale float dx = kXHairSize * pixelScale[0]; float dy = kXHairSize * pixelScale[1]; // if the we have selected the Xhair, draw it highlit if(data->selected) glColor3f(1, 1, 1); else glColor3f(1, 0, 0); // Draw a cross hair, the current coordinate system aligns with the image plane. glPushMatrix(); glTranslated(x, y, 0); glBegin(GL_LINES); glVertex2f(-dx, 0); glVertex2f(dx, 0); glVertex2f(0, -dy); glVertex2f(0, dy); glEnd(); glPopMatrix(); return kOfxStatOK; }