<?xml version="1.0" encoding="UTF-8"?>
<shelfDocument>
  <!-- This file contains definitions of shelves, toolbars, and tools.
 It should not be hand-edited when it is being used by the application.
 Note, that two definitions of the same element are not allowed in
 a single file. -->

  <toolshelf name="jerry_MultiCurve" label="Multi Curve">
    <memberTool name="jerry_multi_curve_init_subnet"/>
    <memberTool name="jerry_multi_curve_new_curve"/>
    <memberTool name="jerry_multi_curve_curve_tool"/>
    <memberTool name="jerry_multi_curve_edit_curve"/>
    <memberTool name="jerry_multi_curve_freeze_edit"/>
    <memberTool name="jerry_multi_curve_delete_curve"/>
    <memberTool name="jerry_multi_curve_help"/>
  </toolshelf>

  <tool name="jerry_multi_curve_freeze_edit" label="Freeze Edit" icon="PLASMA_App">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer() 
subnet = view.pwd()    

merge = subnet.node('jerry_merge')
edit = subnet.node('jerry_edit')
dummy = subnet.node('jerry_display_dummy')
if not(merge and edit and dummy): 
    raise Exception("You Must in multi curve subnet.")
    
pts = edit.geometry().points()
curpt = 0
for curve in merge.inputs():
    s = ''
    for i in range(len(curve.geometry().points())):            
        pos = pts[curpt].position()
        s += "{0},{1},{2} ".format(pos.x(),pos.y(),pos.z())
        curpt += 1
    if curve.type().name()=='curve':
        curve.parm("coords").set(s)

edit.parm("clearall").pressButton()]]></script>
  </tool>

  <tool name="jerry_multi_curve_new_curve" label="New Curve" icon="PLASMA_App">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer()
view.runShelfTool('jerry_multi_curve_freeze_edit')

subnet = view.pwd()
merge = subnet.node('jerry_merge')
edit = subnet.node('jerry_edit')
dummy = subnet.node('jerry_display_dummy')
if not(merge and edit and dummy): 
    raise Exception("You Must in multi curve subnet.")
    

# make all curve select Template
for c in merge.inputs():     
    c.setSelectableTemplateFlag(True)

# create Curve Sop    
curve = subnet.createNode('curve')
merge.setNextInput(curve) # append curve to merge
curve.moveToGoodPosition(False,False,True)    
curve.setSelectableTemplateFlag(True)
curve.setSelected(True)

# enter curve tool
view.setCurrentState("curve",False,hou.stateGenerateMode.Enter)
]]></script>
  </tool>

  <tool name="jerry_multi_curve_init_subnet" label="New Subnet" icon="SOP_subnet">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer()
if view.pwd().childTypeCategory()!=hou.sopNodeTypeCategory():
    raise Exception("Must create in SOP context")    
    
parent = view.pwd()
subnet = parent.createNode("subnet","multi_curve")
subnet.moveToGoodPosition()

edit = subnet.createNode("edit",'jerry_edit')
merge = subnet.createNode("merge",'jerry_merge')
dummy = subnet.createNode('null','jerry_display_dummy')
output = subnet.createNode('output','jerry_OUTPUT')

output.setFirstInput(edit)
edit.setFirstInput(merge)  

output.moveToGoodPosition();
edit.moveToGoodPosition();
merge.moveToGoodPosition();]]></script>
  </tool>

  <tool name="jerry_multi_curve_edit_curve" label="Edit Tool" icon="SOP_edit">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer()
subnet = view.pwd()
    
merge = subnet.node('jerry_merge')
edit = subnet.node('jerry_edit')
dummy = subnet.node('jerry_display_dummy')
if not(merge and edit and dummy): 
    raise Exception("You Must in multi curve subnet.") 
    
edit.setSelected(True)
edit.setDisplayFlag(True)

for n in subnet.children():       
    n.setSelectableTemplateFlag(False)
    n.setTemplateFlag(False)

view.setCurrentState("edit")]]></script>
  </tool>

  <tool name="jerry_multi_curve_curve_tool" label="Curve Tool" icon="SOP_curve">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer()
view.runShelfTool('jerry_multi_curve_freeze_edit')
hou.clearAllSelected()

view = toolutils.sceneViewer()    
subnet = view.pwd()    
merge = subnet.node('jerry_merge')
edit = subnet.node('jerry_edit')
dummy = subnet.node('jerry_display_dummy')
if not(merge and edit and dummy): 
    raise Exception("You Must in multi curve subnet.")


dummy.setDisplayFlag(True)
dummy.setRenderFlag(True)

# make all curve select Template
for n in subnet.children():       
    n.setSelectableTemplateFlag(False)
    n.setTemplateFlag(False)
    
for c in merge.inputs():     
    c.setSelectableTemplateFlag(True)
    
    

sel = view.selectGeometry("select ONE Point/Prim/Edge",0,False,True,False)    
curve = sel.nodes()[0]
if curve.type() != hou.nodeType("Sop/curve"):
    raise Exception("Not a curve")
    
curve.setSelected(True)  
view.setCurrentState("curve",False,hou.stateGenerateMode.Enter)]]></script>
  </tool>

  <tool name="jerry_multi_curve_delete_curve" label="Delete Curve" icon="SOP_delete">
    <script scriptType="python"><![CDATA[import toolutils
view = toolutils.sceneViewer()
view.runShelfTool('jerry_multi_curve_freeze_edit')
hou.clearAllSelected()

view = toolutils.sceneViewer()    
subnet = view.pwd()    
merge = subnet.node('jerry_merge')
edit = subnet.node('jerry_edit')
dummy = subnet.node('jerry_display_dummy')
if not(merge and edit and dummy): 
    raise Exception("You Must in multi curve subnet.")


dummy.setDisplayFlag(True)
dummy.setRenderFlag(True)

# make all curve select Template
for n in subnet.children():       
    n.setSelectableTemplateFlag(False)
    n.setTemplateFlag(False)
for c in merge.inputs():     
    c.setSelectableTemplateFlag(True)
    

sel = view.selectGeometry("select ONE Point/Prim/Edge",0,False,True,False)    
curve = sel.nodes()[0]
if curve.type() != hou.nodeType("Sop/curve"):
    raise Exception("Not a curve")
    
curve.destroy() ]]></script>
  </tool>

  <tool name="jerry_multi_curve_help" label="Help" icon="PLASMA_App">
    <script scriptType="python"><![CDATA[hou.ui.displayMessage(""" 
1. Run 'New Subnet' to create multi_curve subnet in Sop Context.

2. Dive into multi_curve subnet.

3. Use shelf tools to create/edit curve.

4. Must use Edit_Tool to edit (Avoid to generate other Edit sop).

5. Don't edit nodes in multi_curve by hand.
""")]]></script>
  </tool>
</shelfDocument>
