def lineset_post(cls, scene, layer, lineset): if not cls.poll(scene, lineset.linestyle): return # reset the stroke selection (but don't delete the already generated strokes) Operators.reset(delete_strokes=False) # Unary Predicates: visible and correct edge nature upred = AndUP1D( QuantitativeInvisibilityUP1D(0), OrUP1D(ExternalContourUP1D(), pyNatureUP1D(Nature.BORDER)), ) # select the new edges Operators.select(upred) # Binary Predicates bpred = AndBP1D( MaterialBP1D(), NotBP1D(pyZDiscontinuityBP1D()), ) bpred = OrBP1D(bpred, AndBP1D(NotBP1D(bpred), AndBP1D(SameShapeIdBP1D(), MaterialBP1D()))) # chain the edges Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred)) # export SVG collector = StrokeCollector() Operators.create(TrueUP1D(), [collector]) builder = SVGFillBuilder(create_path(scene), render_height(scene), layer.name + '_' + lineset.name) builder.write(collector.strokes) # make strokes used for filling invisible for stroke in collector.strokes: for svert in stroke: svert.attribute.visible = False
def lineset_post(cls, scene, layer, lineset): if not cls.poll(scene, lineset.linestyle): return # reset the stroke selection (but don't delete the already generated strokes) Operators.reset(delete_strokes=False) # Unary Predicates: visible and correct edge nature upred = AndUP1D( QuantitativeInvisibilityUP1D(0), OrUP1D(ExternalContourUP1D(), pyNatureUP1D(Nature.BORDER)), ) # select the new edges Operators.select(upred) # Binary Predicates bpred = AndBP1D( MaterialBP1D(), NotBP1D(pyZDiscontinuityBP1D()), ) bpred = OrBP1D(bpred, AndBP1D(NotBP1D(bpred), AndBP1D(SameShapeIdBP1D(), MaterialBP1D()))) # chain the edges Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred)) # export SVG collector = StrokeCollector() Operators.create(TrueUP1D(), [collector]) builder = SVGFillBuilder(create_path(scene), render_height(scene), layer.name + '_' + lineset.name) builder.write(collector.strokes) # make strokes used for filling invisible for stroke in collector.strokes: for svert in stroke: svert.attribute.visible = False
def lineset_post(scene, layer, lineset): if not (scene.render.use_freestyle and scene.svg_export.use_svg_export and scene.svg_export.object_fill): return if RenderState.is_fill_written: return # reset the stroke selection (but don't delete the already generated strokes) Operators.reset(delete_strokes=False) # shape detection upred = AndUP1D(QuantitativeInvisibilityUP1D(0), ContourUP1D()) Operators.select(upred) # chain when the same shape and visible bpred = SameShapeIdBP1D() Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(QuantitativeInvisibilityUP1D(0))) # sort according to the distance from camera Operators.sort(pyZBP1D()) # render and write fills shader = SVGFillShader(create_path(scene), render_height(scene), lineset.name) Operators.create(TrueUP1D(), [ shader, ]) shader.write() RenderState.is_fill_written = True
def lineset_post(scene, layer, lineset): if not (scene.render.use_freestyle and scene.svg_export.use_svg_export and scene.svg_export.object_fill): return # reset the stroke selection (but don't delete the already generated strokes) Operators.reset(delete_strokes=False) # shape detection upred = AndUP1D(QuantitativeInvisibilityUP1D(0), ContourUP1D()) Operators.select(upred) # chain when the same shape and visible bpred = SameShapeIdBP1D() Operators.bidirectional_chain(ChainPredicateIterator(upred, bpred), NotUP1D(QuantitativeInvisibilityUP1D(0))) # sort according to the distance from camera Operators.sort(pyZBP1D()) # render and write fills shader = SVGFillShader(create_path(scene), render_height(scene), lineset.name) Operators.create(TrueUP1D(), [shader, ]) shader.write()