//---------------------------------------------------------- void ofGLRenderer::draw(ofPath & shape){ ofColor prevColor; if(shape.getUseShapeColor()){ prevColor = ofGetStyle().color; } if(shape.isFilled()){ ofMesh & mesh = shape.getTessellation(); if(shape.getUseShapeColor()){ setColor( shape.getFillColor() * ofGetStyle().color,shape.getFillColor().a/255. * ofGetStyle().color.a); } draw(mesh); } if(shape.hasOutline()){ float lineWidth = ofGetStyle().lineWidth; if(shape.getUseShapeColor()){ setColor( shape.getStrokeColor() * ofGetStyle().color, shape.getStrokeColor().a/255. * ofGetStyle().color.a); } setLineWidth( shape.getStrokeWidth() ); vector<ofPolyline> & outlines = shape.getOutline(); for(int i=0; i<(int)outlines.size(); i++) draw(outlines[i]); setLineWidth(lineWidth); } if(shape.getUseShapeColor()){ setColor(prevColor); } }
//---------------------------------------------------------- void ofGLRenderer::draw(const ofPath & shape) const{ ofColor prevColor; if(shape.getUseShapeColor()){ prevColor = ofGetStyle().color; } ofGLRenderer * mut_this = const_cast<ofGLRenderer*>(this); if(shape.isFilled()){ const ofMesh & mesh = shape.getTessellation(); if(shape.getUseShapeColor()){ mut_this->setColor( shape.getFillColor(),shape.getFillColor().a); } draw(mesh,OF_MESH_FILL); } if(shape.hasOutline()){ float lineWidth = ofGetStyle().lineWidth; if(shape.getUseShapeColor()){ mut_this->setColor( shape.getStrokeColor(), shape.getStrokeColor().a); } mut_this->setLineWidth( shape.getStrokeWidth() ); const vector<ofPolyline> & outlines = shape.getOutline(); for(int i=0; i<(int)outlines.size(); i++) draw(outlines[i]); mut_this->setLineWidth(lineWidth); } if(shape.getUseShapeColor()){ mut_this->setColor(prevColor); } }
void ofCairoRenderer::draw(ofPath & shape){ cairo_new_path(cr); vector<ofSubPath> & paths = shape.getSubPaths(); for(int i=0;i<(int)paths.size();i++){ draw(paths[i]); } cairo_fill_rule_t cairo_poly_mode; if(shape.getWindingMode()==OF_POLY_WINDING_ODD) cairo_poly_mode=CAIRO_FILL_RULE_EVEN_ODD; else cairo_poly_mode=CAIRO_FILL_RULE_WINDING; cairo_set_fill_rule(cr,cairo_poly_mode); ofColor prevColor; if(shape.getUseShapeColor()){ prevColor = ofGetStyle().color; } if(shape.isFilled()){ if(shape.getUseShapeColor()){ ofColor c = shape.getFillColor() * ofGetStyle().color; c.a = shape.getFillColor().a/255. * ofGetStyle().color.a; cairo_set_source_rgba(cr, (float)c.r/255.0, (float)c.g/255.0, (float)c.b/255.0, (float)c.a/255.0); } if(shape.hasOutline()){ cairo_fill_preserve( cr ); }else{ cairo_fill(cr); } } if(shape.hasOutline()){ float lineWidth = ofGetStyle().lineWidth; if(shape.getUseShapeColor()){ ofColor c = shape.getStrokeColor() * ofGetStyle().color; c.a = shape.getStrokeColor().a/255. * ofGetStyle().color.a; cairo_set_source_rgba(cr, (float)c.r/255.0, (float)c.g/255.0, (float)c.b/255.0, (float)c.a/255.0); } cairo_set_line_width( cr, shape.getStrokeWidth() ); cairo_stroke( cr ); cairo_set_line_width( cr, lineWidth ); } if(shape.getUseShapeColor()){ setColor(prevColor); } ofPopStyle(); }
void ofCairoRenderer::draw(const ofPath & shape) const{ cairo_new_path(cr); const vector<ofPath::Command> & commands = shape.getCommands(); for(int i=0;i<(int)commands.size();i++){ draw(commands[i]); } cairo_fill_rule_t cairo_poly_mode; if(shape.getWindingMode()==OF_POLY_WINDING_ODD) cairo_poly_mode=CAIRO_FILL_RULE_EVEN_ODD; else cairo_poly_mode=CAIRO_FILL_RULE_WINDING; cairo_set_fill_rule(cr,cairo_poly_mode); ofColor prevColor; if(shape.getUseShapeColor()){ prevColor = currentStyle.color; } if(shape.isFilled()){ if(shape.getUseShapeColor()){ ofColor c = shape.getFillColor(); c.a = shape.getFillColor().a; cairo_set_source_rgba(cr, (float)c.r/255.0, (float)c.g/255.0, (float)c.b/255.0, (float)c.a/255.0); } if(shape.hasOutline()){ cairo_fill_preserve( cr ); }else{ cairo_fill(cr); } } if(shape.hasOutline()){ float lineWidth = currentStyle.lineWidth; if(shape.getUseShapeColor()){ ofColor c = shape.getStrokeColor(); c.a = shape.getStrokeColor().a; cairo_set_source_rgba(cr, (float)c.r/255.0, (float)c.g/255.0, (float)c.b/255.0, (float)c.a/255.0); } cairo_set_line_width( cr, shape.getStrokeWidth() ); cairo_stroke( cr ); cairo_set_line_width( cr, lineWidth ); } if(shape.getUseShapeColor()){ const_cast<ofCairoRenderer*>(this)->setColor(prevColor); } }
void ShapeContentStroke::pop(ofPath& path) { ofPushStyle(); path.setFilled(false); ofColor prev = path.getStrokeColor(); float opacity = prev.a/255.f*opacity_; path.setStrokeColor(ofColor(color_, opacity*255)); path.setStrokeWidth(stroke_width_); ofEnableBlendMode(blend_mode_); path.draw(); path.setStrokeColor(prev); ofPopStyle(); }
void ShapeContentGroup::pop(ofPath& path) { if(transform_.isDirty()) { transform_.refreshMatrix(); } transform_.pushMatrix(); ofColor prev_st = path.getStrokeColor(); ofColor prev_fi = path.getFillColor(); float opacity_st = prev_st.a/255.f*opacity_; float opacity_fi = prev_fi.a/255.f*opacity_; path.setStrokeColor(ofColor(prev_st, opacity_st*255)); path.setFillColor(ofColor(prev_fi, opacity_fi*255)); for(vector<ShapeContent*>::reverse_iterator it = content_.rbegin(); it != content_.rend(); ++it) { (*it)->pop(path); } path.setStrokeColor(prev_st); path.setFillColor(prev_fi); transform_.popMatrix(); }