Search - User list
Full Version: Vector graphics
Root » Houdini Lounge » Vector graphics
berserk
Is Houdini suitable for vector graphics production?
I'm mainly interested in SVG, but other formats (such as pdf, eps, gs, etc) are good as well.

Thanks in advance for any help.

Bye, Ivano.
malbrecht
Moin,

> Is Houdini suitable for vector graphics production?

depends on what you consider “vector graphics production”, since almost everything you do in Houdini *is* vector graphics production.

> I'm mainly interested in SVG, but other formats (such as pdf, eps, gs, etc) are good as well.

Writing a postscript (for EPS or PDF) could be done as a shader, the same goes for SVG. As far as I know there is no “official” export for these formats, though. You could (easily) convert 3d object formats into SVG using an external conversion tool or, as mentioned, write your own exporter/shader.

But I *think* this is not the kind of response you are looking for. In the end, I think, what you need is some kind of render/shader output, not so much something “Houdini-internal”.

Marc
berserk
Yes, that was exactly what I meant.
So the short answer is no.
Thanks.
Konstantin Magnus
It apparently has been done and can be done in a Python SOP:
https://www.sidefx.com/forum/topic/28764/?page=1#post-131959 [sidefx.com]

GrayOlorin wrote this:

def exportSVG():
    
    geo = hou.pwd().geometry()
    node = hou.pwd()
    filename = node.evalParm("location")
    sizeMult = node.evalParm("sizeMult")
    setColor = node.evalParm("setColorFromAttr")
    colorAttr = node.evalParm("colorAttr")
    addStroke = node.evalParm("addStroke")
    strokeColorR = node.evalParm("strokeColorr")
    strokeColorG = node.evalParm("strokeColorg")
    strokeColorB = node.evalParm("strokeColorb")
    strokeThickness = node.evalParm("strokeThickness")
    
    import xml.dom.minidom as minidom
    svgFile = minidom.Document()
    svgElement = svgFile.createElement("svg")
    svgFile.appendChild(svgElement)
    # Add code to modify the contents of geo.
    for prim in geo.prims():
    
        positionString = ""
        
        for vertex in prim.vertices():
        
            position = vertex.point().position()  
            positionString =  positionString + (str(position[0]*sizeMult) + "," + str(position[1]*sizeMult*-1) + " ")
        
        #now write to SVG
        
        polygonElement = svgFile.createElement("polygon")
        polygonElement.setAttribute("points", positionString)
        #Set Fill
        
        if (setColor == 1):
            color = prim.attribValue(colorAttr)
            red = hou.expandString("`inttohex(round(" + str(color[0]*255) + "))`")
            green = hou.expandString("`inttohex(round(" + str(color[1]*255) + "))`")
            blue = hou.expandString("`inttohex(round(" + str(color[2]*255) + "))`")
            hex = "#" + red[6:8] + green[6:8] + blue[6:8]
            polygonElement.setAttribute("fill", hex)
            
        else: 
            polygonElement.setAttribute("fill", "None")
        #Set Stroke
        if (addStroke == 1):
            red = hou.expandString("`inttohex(round(" + str(strokeColorR*255) + "))`")
            green = hou.expandString("`inttohex(round(" + str(strokeColorG*255) + "))`")
            blue = hou.expandString("`inttohex(round(" + str(strokeColorB*255) + "))`")
            hex = "#" + red[6:8] + green[6:8] + blue[6:8]
            polygonElement.setAttribute("stroke", hex)
            polygonElement.setAttribute("stroke-width", str(strokeThickness))
            
        svgElement.appendChild(polygonElement)
    
    #print svgFile.toprettyxml(indent="  ")
    #print filename
    
    newFile = open(hou.expandString(str(filename)),"w")
    
    newFile.write(svgFile.toprettyxml(indent="  "))
Christopher_R
Look at that.

I've spent the past year alot of time with vector graphics, you can do so much I'm surprised web pages aren't more lavish.
FakePilot
Here is Entagma's tutorial on how to import and export SVG:



If you can figure out a way to export a sequence, let me know! :-)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB