├── scripts
├── python
│ ├── animManager
│ │ ├── __init__.py
│ │ └── animManager.ui
│ ├── pathbrowser
│ │ └── __init__.py
│ ├── BasePythonPanel
│ │ ├── __init__.py
│ │ └── BasePanel.py
│ ├── LVProjectManager
│ │ ├── notes
│ │ └── LVProjectManager.ui
│ ├── deprecated
│ │ ├── graph
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── graph.cpython-39.pyc
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ │ ├── prefs.json
│ │ │ ├── graph.ui
│ │ │ └── graph.py
│ │ ├── PBRBuilder
│ │ │ ├── __init__.py
│ │ │ ├── prefs.json
│ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── PBRBuilder.cpython-39.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ ├── texManager
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ │ └── prefs.json
│ │ ├── HDRIManager
│ │ │ ├── __init__.py
│ │ │ ├── favs.json
│ │ │ ├── prefs.json
│ │ │ ├── icon
│ │ │ │ ├── error.png
│ │ │ │ ├── fav1.png
│ │ │ │ ├── fav2.png
│ │ │ │ ├── good.png
│ │ │ │ ├── error2.png
│ │ │ │ ├── missing.png
│ │ │ │ └── warning.png
│ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── HDRIManager.cpython-39.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ ├── RSLightLink
│ │ │ ├── __init__.py
│ │ │ ├── icon
│ │ │ │ ├── on.png
│ │ │ │ ├── off.png
│ │ │ │ └── checkmark.svg
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── RSLightLink.cpython-39.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ │ ├── item.ui
│ │ │ └── RSLightLink.ui
│ │ ├── RSLightMixer
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── texManager.cpython-39.pyc
│ │ │ │ └── RSLightMixer.cpython-39.pyc
│ │ │ ├── RSLightMixer.ui
│ │ │ ├── RSLightMixer.py
│ │ │ └── item.ui
│ │ ├── easeManager
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-310.pyc
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── easeManager.cpython-310.pyc
│ │ │ │ └── texManager.cpython-39.pyc
│ │ │ └── ease
│ │ │ │ └── ease000.json
│ │ ├── keyframeAssistant
│ │ │ ├── __init__.py
│ │ │ ├── ui.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ ├── __init__.cpython-310.pyc
│ │ │ │ ├── texManager.cpython-39.pyc
│ │ │ │ ├── keyframeAssistant.cpython-310.pyc
│ │ │ │ └── keyframeAssistant.cpython-39.pyc
│ │ │ └── prefs.json
│ │ ├── stickyController
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-39.pyc
│ │ │ │ └── stickyController.cpython-39.pyc
│ │ │ ├── stickyController.py
│ │ │ └── BasePanel.ui
│ │ └── easecontrol
│ │ │ ├── __pycache__
│ │ │ ├── flip.cpython-39.pyc
│ │ │ ├── flipX.cpython-39.pyc
│ │ │ └── flipY.cpython-39.pyc
│ │ │ ├── flipX.py
│ │ │ ├── flipY_simple Working.py
│ │ │ └── flip.py
│ ├── gradientManager
│ │ └── __init__.py
│ ├── projectFolder.py
│ ├── lvnodeutils
│ │ ├── commands.json
│ │ ├── test.py
│ │ ├── lvnodeutils.ui
│ │ └── lvnodeutils.py
│ ├── README.md
│ ├── LVTimelineUtils.py
│ ├── tex.py
│ ├── LVUpdater.py
│ ├── camutils.py
│ ├── LVPlaybarUtils.py
│ ├── stickyparent.py
│ ├── LVRender.py
│ ├── LVMatUtils.py
│ ├── LVRenderUtils.py
│ ├── LVLightUtils.py
│ ├── knotcontrol.py
│ ├── LVAI.py
│ ├── quickmarks
│ │ └── quickmarks.ui
│ ├── LVAnimTools.py
│ ├── rampSave.py
│ ├── LVRadMenu.py
│ └── HDAUtils.py
├── 123.py
└── 456.py
├── lv.png
├── default.hiplc
├── util
└── renderpaths
├── otls
├── LV.Mat.hda
├── LV.Alembic.hda
├── lv_mat.2.hdalc
├── LV.FitFloat.hdalc
├── LV.Mat.1.0.hdalc
├── LV.Slicer.hdalc
├── LV.UVCycle.hdalc
├── LV.Gnomon.1.0.hdalc
├── LV.MakeBlend.hdalc
├── LV.Roller.1.0.hdalc
├── LV.SimpleROP.hdalc
├── LV.Slicer.1.3.hdalc
├── LV.Alembic.1.0.hdalc
├── LV.Alembic.2.0.hdalc
├── LV.Backdrop.1.0.hdalc
├── LV.Balancer.1.1.hdalc
├── LV.CamGuides.1.0.hdalc
├── LV.DrawRamp.1.0.hdalc
├── LV.EasyGroup.1.0.hdalc
├── LV.GSG_Mat.1.0.hdalc
├── LV.IMResize.1.0.hdalc
├── LV.SafeBevel.1.0.hdalc
├── LV.SplitPath.1.0.hdalc
├── LV.UV2WORLD.1.0.hdalc
├── LV.Variant.1.0.hdalc
├── LV.WORLD2UV.1.0.hdalc
├── LV.WORLD2UV.2.0.hdalc
├── LV.BevelCurve.1.0.hdalc
├── LV.BlendByAtt.1.1.hdalc
├── LV.EaseManager.1.0.hdalc
├── LV.InlineChop.1.0.hdalc
├── LV.UVMatchSize.1.0.hdalc
├── LV.VDBBoolean.1.0.hdalc
├── LV.dev.Enable.1.0.hdalc
├── Clip_by_Attribute.2.0.hdalc
├── LV.3DPrintOutput.1.0.hdalc
├── LV.Clipandmirror.1.0.hdalc
├── LV.CycleAttribute.1.0.hdalc
├── LV.Deletepieces.1.0.hdalc
├── LV.DoubleResample.1.0.hdalc
├── LV.FloodAttribute.1.0.hdalc
├── LV.InfiniteBlend.1.0.hdalc
├── LV.LargestPiece.1.0.hdalc
├── LV.MoveAlongPath.1.0.hdalc
├── LV.PointsOnCurve.1.0.hdalc
├── LV.SimpleRetime.1.0.hdalc
├── LV.build_tilemap.1.0.hdalc
├── LV.dev.TimeWarp.1.0.hdalc
├── LV.dev.TimeWarp.2.0.hdalc
├── LV.dev.lv_handler.1.0.hdalc
├── LV.lv_fisheye.1.0.hdalcbak
├── LV.lv_tile_sample.1.0.hdalc
├── LV.shape_builder.1.0.hdalc
├── LV.ClipByAttribute.1.0.hdalc
├── LV.PaleteFromImage.1.0.hdalc
├── LV.Radial_Symmetry.1.0.hdalc
├── LV.Radial_Symmetry.1.1.hdalc
├── LV.RoundCornerCurve.1.0.hdalc
├── LV.lv_move_to_udim.1.0.hdalc
├── LV.lv_path_browser.1.0.hdalc
├── LV.trimcurvelength.1.0.hdalc
├── LV.dev.PointsOnCurve.1.0.hdalc
├── LV.dev.PointsOnCurve.1.1.hdalc
├── LV.dev.VellumTimeShift.1.0.hdalc
├── LV.lv_attribute_clone.1.0.hdalc
├── LV.lv_source_multi_res.1.0.hdalc
├── LV.trimcurvelengthGRAD.1.0.hdalc
├── LV.StickyNoteController.1.0.hdalc
├── LV.lv_angled_tile_sample.1.0.hdalc
├── LV.lv_quantize_attribute.1.0.hdalc
├── PIC-TWO.lv_light_target.1.0.hdalc
├── LV.lv_attribute_from_bounds.1.0.hdalc
└── rename.py
├── backup
└── default_bak2.hiplc
├── presets
├── Sop
│ ├── attribdelete.idx
│ └── blast.idx
└── Top
│ └── genericgenerator.idx
├── vex
└── include
│ └── lvutils.h
├── LVTools.json
├── python3.10libs
├── __pycache__
│ ├── extra.cpython-39.pyc
│ ├── extra.cpython-310.pyc
│ ├── nodegraphhooks.cpython-310.pyc
│ ├── nodegraphhooks.cpython-39.pyc
│ └── nodegraphtitle.cpython-39.pyc
├── nodegraphhooks.pybak
├── nodegraphtitle.pybak
└── extra.py
├── expressions
└── LVExpressions.expr
├── help
└── nodes
│ └── Sop
│ ├── LV--lv_mat.txt
│ ├── LV_WORLD2UV.txt
│ ├── LV_Roller.txt
│ ├── LV--GSG_Mat.txt
│ ├── LV_Deletepieces.txt
│ ├── LV_Gnomon.txt
│ ├── lv_variant.txt
│ ├── LV_UV2W.txt
│ ├── LV--InlineChop.txt
│ ├── LV_BevelCurve.txt
│ ├── LV_MakeBlend.txt
│ ├── LV_RoundCornerCurve.txt
│ ├── LV--trimcurvelength.txt
│ ├── LV--trimcurvelengthGRAD.txt
│ ├── LV_largestprim.txt
│ ├── LV_EaseManager.txt
│ ├── lv_mat.txt
│ ├── Clip_by_Attribute.txt
│ ├── LV_SplitPath.txt
│ ├── LV_Clipandmirror.txt
│ ├── LV_VDBBoolean.txt
│ ├── LV_EasyGroup.txt
│ ├── LV--Radial_Symmetry.txt
│ ├── LV--LV_FloodAttribute.txt
│ ├── LV_Draw_Ramp.txt
│ ├── LV--SafeBevel.txt
│ ├── LV_Double_Resample.txt
│ ├── LV_SimpleRetime.txt
│ ├── LV_movealongpath.txt
│ ├── LV_Alembic.txt
│ ├── LV_fitfloat.txt
│ ├── LV_Slicer.txt
│ ├── LV_blendbyatt.txt
│ ├── LV--LV_Backdrop.txt
│ ├── LV--PaleteFromImage.txt
│ ├── LV_3D_Print_Output.txt
│ ├── PIC_TWO--LV_StickyNoteController.txt
│ ├── LV--LV_UVMatchSize.txt
│ ├── LV_CycleAttribute.txt
│ ├── LV_Balancer.txt
│ └── LV_Path.txt
├── prefs.json
├── python3.9libs
├── nodegraphhooks.py
└── extra.py
├── .gitignore
├── PlaybarMenu.xml
├── lv.svg
├── codeswap
└── swap.txt
├── python_panels
├── deprecated
│ ├── LVGraph.pypanel
│ ├── LVHDRIManager.pypanel
│ ├── LVEaseManager.pypanel
│ ├── LVStickyController.pypanel
│ ├── LVPBRBuilder.pypanel
│ ├── LVTexManager.pypanel
│ ├── LVKeyframeAssistant.pypanel
│ ├── LVRSLightMixer.pypanel
│ ├── LVRSLightLink.pypanel
│ └── LV.pypanel
├── LVNodeShare.pypanel
├── LVAnimationManager.pypanel
├── LVRampManager.pypanel
├── LVNodeUtils.pypanel
├── LVProjectManager.pypanel
└── LVPathBrowser.pypanel
├── config
└── NodeShapes
│ ├── sideways.json
│ └── controller.json
├── README.md
├── radialmenu
└── LVNetwork.radialmenu
├── MainMenuCommon.xml
├── windows_installer.ps1
├── OPmenu.xml
├── PARMmenu.xml
└── toolbar
└── LV_Dev.shelf
/scripts/python/animManager/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/pathbrowser/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/BasePythonPanel/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/LVProjectManager/notes:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/gradientManager/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/PBRBuilder/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/texManager/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/stickyController/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/favs.json:
--------------------------------------------------------------------------------
1 | {"favs": []}
--------------------------------------------------------------------------------
/lv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/lv.png
--------------------------------------------------------------------------------
/default.hiplc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/default.hiplc
--------------------------------------------------------------------------------
/util/renderpaths:
--------------------------------------------------------------------------------
1 | $HIP/render/$HIPNAME.$F4.png
2 | $HIP/render/$HIPNAME/$HIPNAME.$F4.png
--------------------------------------------------------------------------------
/otls/LV.Mat.hda:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Mat.hda
--------------------------------------------------------------------------------
/otls/LV.Alembic.hda:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Alembic.hda
--------------------------------------------------------------------------------
/otls/lv_mat.2.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/lv_mat.2.hdalc
--------------------------------------------------------------------------------
/otls/LV.FitFloat.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.FitFloat.hdalc
--------------------------------------------------------------------------------
/otls/LV.Mat.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Mat.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Slicer.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Slicer.hdalc
--------------------------------------------------------------------------------
/otls/LV.UVCycle.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.UVCycle.hdalc
--------------------------------------------------------------------------------
/otls/LV.Gnomon.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Gnomon.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.MakeBlend.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.MakeBlend.hdalc
--------------------------------------------------------------------------------
/otls/LV.Roller.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Roller.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.SimpleROP.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.SimpleROP.hdalc
--------------------------------------------------------------------------------
/otls/LV.Slicer.1.3.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Slicer.1.3.hdalc
--------------------------------------------------------------------------------
/backup/default_bak2.hiplc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/backup/default_bak2.hiplc
--------------------------------------------------------------------------------
/otls/LV.Alembic.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Alembic.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Alembic.2.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Alembic.2.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Backdrop.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Backdrop.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Balancer.1.1.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Balancer.1.1.hdalc
--------------------------------------------------------------------------------
/otls/LV.CamGuides.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.CamGuides.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.DrawRamp.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.DrawRamp.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.EasyGroup.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.EasyGroup.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.GSG_Mat.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.GSG_Mat.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.IMResize.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.IMResize.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.SafeBevel.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.SafeBevel.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.SplitPath.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.SplitPath.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.UV2WORLD.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.UV2WORLD.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Variant.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Variant.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.WORLD2UV.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.WORLD2UV.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.WORLD2UV.2.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.WORLD2UV.2.0.hdalc
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/prefs.json:
--------------------------------------------------------------------------------
1 | {"currentIndex": "-1", "gsglib": "D:\\Assets\\GSG Library\\"}
--------------------------------------------------------------------------------
/otls/LV.BevelCurve.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.BevelCurve.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.BlendByAtt.1.1.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.BlendByAtt.1.1.hdalc
--------------------------------------------------------------------------------
/otls/LV.EaseManager.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.EaseManager.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.InlineChop.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.InlineChop.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.UVMatchSize.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.UVMatchSize.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.VDBBoolean.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.VDBBoolean.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.Enable.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.Enable.1.0.hdalc
--------------------------------------------------------------------------------
/presets/Sop/attribdelete.idx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/presets/Sop/attribdelete.idx
--------------------------------------------------------------------------------
/otls/Clip_by_Attribute.2.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/Clip_by_Attribute.2.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.3DPrintOutput.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.3DPrintOutput.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Clipandmirror.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Clipandmirror.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.CycleAttribute.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.CycleAttribute.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Deletepieces.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Deletepieces.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.DoubleResample.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.DoubleResample.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.FloodAttribute.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.FloodAttribute.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.InfiniteBlend.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.InfiniteBlend.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.LargestPiece.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.LargestPiece.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.MoveAlongPath.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.MoveAlongPath.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.PointsOnCurve.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.PointsOnCurve.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.SimpleRetime.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.SimpleRetime.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.build_tilemap.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.build_tilemap.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.TimeWarp.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.TimeWarp.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.TimeWarp.2.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.TimeWarp.2.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.lv_handler.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.lv_handler.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_fisheye.1.0.hdalcbak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_fisheye.1.0.hdalcbak
--------------------------------------------------------------------------------
/otls/LV.lv_tile_sample.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_tile_sample.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.shape_builder.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.shape_builder.1.0.hdalc
--------------------------------------------------------------------------------
/presets/Top/genericgenerator.idx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/presets/Top/genericgenerator.idx
--------------------------------------------------------------------------------
/otls/LV.ClipByAttribute.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.ClipByAttribute.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.PaleteFromImage.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.PaleteFromImage.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Radial_Symmetry.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Radial_Symmetry.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.Radial_Symmetry.1.1.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.Radial_Symmetry.1.1.hdalc
--------------------------------------------------------------------------------
/otls/LV.RoundCornerCurve.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.RoundCornerCurve.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_move_to_udim.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_move_to_udim.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_path_browser.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_path_browser.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.trimcurvelength.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.trimcurvelength.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.PointsOnCurve.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.PointsOnCurve.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.PointsOnCurve.1.1.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.PointsOnCurve.1.1.hdalc
--------------------------------------------------------------------------------
/otls/LV.dev.VellumTimeShift.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.dev.VellumTimeShift.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_attribute_clone.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_attribute_clone.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_source_multi_res.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_source_multi_res.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.trimcurvelengthGRAD.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.trimcurvelengthGRAD.1.0.hdalc
--------------------------------------------------------------------------------
/scripts/python/projectFolder.py:
--------------------------------------------------------------------------------
1 | import os
2 | import hou
3 |
4 | def openDir():
5 | hou.ui.showInFileBrowser(hou.hipFile.path())
--------------------------------------------------------------------------------
/vex/include/lvutils.h:
--------------------------------------------------------------------------------
1 | float rand_range(float arg1; float arg2; float arg3)
2 | {
3 | return fit01(rand(arg1), arg2, arg3);
4 | }
--------------------------------------------------------------------------------
/otls/LV.StickyNoteController.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.StickyNoteController.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_angled_tile_sample.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_angled_tile_sample.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_quantize_attribute.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_quantize_attribute.1.0.hdalc
--------------------------------------------------------------------------------
/otls/PIC-TWO.lv_light_target.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/PIC-TWO.lv_light_target.1.0.hdalc
--------------------------------------------------------------------------------
/otls/LV.lv_attribute_from_bounds.1.0.hdalc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/otls/LV.lv_attribute_from_bounds.1.0.hdalc
--------------------------------------------------------------------------------
/LVTools.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": [
3 | {
4 | "LV": "D:\Assets\Houdini Packages\LV Tools\Houdini Tools"
5 | }
6 | ],
7 | "path": "$LV"
8 |
9 | }
--------------------------------------------------------------------------------
/python3.10libs/__pycache__/extra.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/python3.10libs/__pycache__/extra.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/PBRBuilder/prefs.json:
--------------------------------------------------------------------------------
1 | {"diffSpace": "sRGB", "roughSpace": "Raw", "bumpSpace": "Auto)", "extraSpace": "ACEScg", "matStyle": "1"}
--------------------------------------------------------------------------------
/python3.10libs/__pycache__/extra.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/python3.10libs/__pycache__/extra.cpython-310.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/icon/on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightLink/icon/on.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/ui.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/ui.py
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/error.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/fav1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/fav1.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/fav2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/fav2.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/good.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/icon/off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightLink/icon/off.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/error2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/error2.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/missing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/missing.png
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/icon/warning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/icon/warning.png
--------------------------------------------------------------------------------
/expressions/LVExpressions.expr:
--------------------------------------------------------------------------------
1 | # New function detit
2 | detit(i){
3 | return detail(i,"iteration",0);
4 | }
5 |
6 | quant(t,i){
7 | return ceil(t/i)*i;
8 | }
9 |
--------------------------------------------------------------------------------
/python3.10libs/__pycache__/nodegraphhooks.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/python3.10libs/__pycache__/nodegraphhooks.cpython-310.pyc
--------------------------------------------------------------------------------
/python3.10libs/__pycache__/nodegraphhooks.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/python3.10libs/__pycache__/nodegraphhooks.cpython-39.pyc
--------------------------------------------------------------------------------
/python3.10libs/__pycache__/nodegraphtitle.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/python3.10libs/__pycache__/nodegraphtitle.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/__pycache__/graph.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/graph/__pycache__/graph.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/graph/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/__pycache__/flip.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easecontrol/__pycache__/flip.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/graph/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/PBRBuilder/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/PBRBuilder/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/__pycache__/flipX.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easecontrol/__pycache__/flipX.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/__pycache__/flipY.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easecontrol/__pycache__/flipY.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/texManager/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/texManager/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/PBRBuilder/__pycache__/PBRBuilder.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/PBRBuilder/__pycache__/PBRBuilder.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/PBRBuilder/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/PBRBuilder/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightLink/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightMixer/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/__pycache__/__init__.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easeManager/__pycache__/__init__.cpython-310.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easeManager/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/prefs.json:
--------------------------------------------------------------------------------
1 | {"difChecks": "color, colour, col, basecolor, diffuse, Cd, test", "difCS": "ACEScg", "rawChecks": "bump, normal, roughness, rough, ao, .exr, grade", "rawCS": "Raw"}
--------------------------------------------------------------------------------
/scripts/python/deprecated/texManager/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/texManager/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/__pycache__/HDRIManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/__pycache__/HDRIManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/HDRIManager/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/HDRIManager/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/__pycache__/RSLightLink.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightLink/__pycache__/RSLightLink.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightLink/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightMixer/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/__pycache__/easeManager.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easeManager/__pycache__/easeManager.cpython-310.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/easeManager/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/123.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import LVLightUtils
3 | from importlib import reload
4 |
5 | reload(LVLightUtils)
6 |
7 | LVLightUtils.light_listen()
8 | hou.hscript('exread "$LV/expressions/LVExpressions.expr"')
9 |
--------------------------------------------------------------------------------
/scripts/456.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import LVLightUtils
3 | from importlib import reload
4 |
5 | reload(LVLightUtils)
6 |
7 | LVLightUtils.light_listen()
8 | hou.hscript('exread "$LV/expressions/LVExpressions.expr"')
9 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/__pycache__/RSLightMixer.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/RSLightMixer/__pycache__/RSLightMixer.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/prefs.json:
--------------------------------------------------------------------------------
1 | {"difChecks": "color, colour, col, basecolor, diffuse, Cd, test", "difCS": "ACEScg", "rawChecks": "bump, normal, roughness, rough, ao, .exr, grade", "rawCS": "Raw"}
--------------------------------------------------------------------------------
/scripts/python/deprecated/stickyController/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/stickyController/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__pycache__/__init__.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/__pycache__/__init__.cpython-310.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__pycache__/texManager.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/__pycache__/texManager.cpython-39.pyc
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--lv_mat.txt:
--------------------------------------------------------------------------------
1 | = LV Mat Empty =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_WORLD2UV.txt:
--------------------------------------------------------------------------------
1 | = LV World 2 UV =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
--------------------------------------------------------------------------------
/scripts/python/deprecated/stickyController/__pycache__/stickyController.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/stickyController/__pycache__/stickyController.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__pycache__/keyframeAssistant.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/__pycache__/keyframeAssistant.cpython-310.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/keyframeAssistant/__pycache__/keyframeAssistant.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lukevanlukevan/LV-Tools/HEAD/scripts/python/deprecated/keyframeAssistant/__pycache__/keyframeAssistant.cpython-39.pyc
--------------------------------------------------------------------------------
/scripts/python/deprecated/texManager/prefs.json:
--------------------------------------------------------------------------------
1 | {"difChecks": "color, colour, col, basecolor, diffuse, Cd, test, Emissive", "difCS": "sRGB", "rawChecks": "bump, Normal, Roughness, Rough, ao, .exr, grade, _Height, _Metallic", "rawCS": "Raw"}
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Roller.txt:
--------------------------------------------------------------------------------
1 | = LV Roller =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | U:
16 | #U:
17 | float: U
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--GSG_Mat.txt:
--------------------------------------------------------------------------------
1 | = LV GSG Mat =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | matname:
16 | #matname:
17 | string: matname
--------------------------------------------------------------------------------
/scripts/python/lvnodeutils/commands.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "label": "Add Random Parm",
4 | "icon": "DATATYPES_parameter",
5 | "command": "lambda: LVParmUtils.addFloatParm(kwargs={'parms': (currentNode.parm('snippet'),)})",
6 | "node": "attribwrangle"
7 | }
8 | ]
9 |
10 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Deletepieces.txt:
--------------------------------------------------------------------------------
1 | = LV Delete Pieces =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Delete Non Selected:
16 | #negate:
17 | toggle: Delete Non Selected
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Gnomon.txt:
--------------------------------------------------------------------------------
1 | = LV Gnomon =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Type:
16 | #type:
17 | menu: Type
18 |
19 | Scale:
20 | #scale:
21 | float: Scale
--------------------------------------------------------------------------------
/help/nodes/Sop/lv_variant.txt:
--------------------------------------------------------------------------------
1 | = LV Variant =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Type:
16 | #class:
17 | menu: Type
18 |
19 | Variant:
20 | #variant:
21 | int: Variant
--------------------------------------------------------------------------------
/scripts/python/README.md:
--------------------------------------------------------------------------------
1 | # Scripts
2 |
3 | # LV AI
4 |
5 | Right now there is a simple shelf tool that adds comments to wrangles to explain what the code does. I can't vouch for anything here, but it can be fun to give it a go. Get an API key [here](https://platform.openai.com/api-keys) and then follow the prompts
6 |
--------------------------------------------------------------------------------
/prefs.json:
--------------------------------------------------------------------------------
1 | {"ramp_basis": 5, "ramp_keys": "(0.0, 0.16787439584732056, 0.5507246255874634, 1.0)", "ramp_values": "(1.0, 1.0, 0.03651685267686844, 0.0)", "plot_values": [1.0, 0.9739482402801514, 0.8458456993103027, 0.6504068970680237, 0.44933465123176575, 0.2757076621055603, 0.14910520613193512, 0.07092908024787903, 0.027220867574214935, 0.00829215906560421]}
--------------------------------------------------------------------------------
/scripts/python/LVTimelineUtils.py:
--------------------------------------------------------------------------------
1 | import hou # type: ignore
2 |
3 | def set_quickmark(kwargs):
4 | # hou.anim.newBookmark("QM 1", int(hou.frame()), int(hou.frame()))
5 | get_quickmark()
6 | # print(kwargs)
7 |
8 | def get_quickmark():
9 | marks = hou.anim.bookmarks()
10 | for mark in marks:
11 | hou.setFrame(mark.startFrame())
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_UV2W.txt:
--------------------------------------------------------------------------------
1 | = LV UV 2 World =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Freeze Input Geometry:
16 | #freeze:
17 | toggle: Freeze Input Geometry
18 |
19 | Freeze Frame:
20 | #freezeframe:
21 | int: Freeze Frame
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--InlineChop.txt:
--------------------------------------------------------------------------------
1 | = LV Inline CHOP =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Channel Scope:
16 | #chanscope:
17 | string: Channel Scope
18 |
19 | Attribute Scope:
20 | #attscope:
21 | string: Attribute Scope
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_BevelCurve.txt:
--------------------------------------------------------------------------------
1 | = LV Bevel Curve =
2 |
3 | == Overview ==
4 |
5 | NOT WORKING
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Maximum Normal Angle:
16 | #flatangle:
17 | float: Maximum Normal Angle
18 |
19 | Distance:
20 | #offset:
21 | float: Distance
22 |
23 | Divisions:
24 | #divisions:
25 | int: Divisions
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_MakeBlend.txt:
--------------------------------------------------------------------------------
1 | = LV Make Blend =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Steps:
16 | #segs:
17 | int: Steps
18 |
19 | Closed:
20 | #closedall:
21 | toggle: Closed
22 |
23 | Connectivity:
24 | #surftype:
25 | menu: Connectivity
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_RoundCornerCurve.txt:
--------------------------------------------------------------------------------
1 | = LV Round Corner Curve =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Group:
16 | #group:
17 | string: Group
18 |
19 | Distance:
20 | #offset:
21 | float: Distance
22 |
23 | Length:
24 | #length:
25 | float: Length
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--trimcurvelength.txt:
--------------------------------------------------------------------------------
1 | = PIC Trim Curve With Length =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Start Position:
16 | #dist:
17 | float: Start Position
18 |
19 | Length:
20 | #length:
21 | float: Length
22 |
23 | Flip:
24 | #flip:
25 | toggle: Flip
--------------------------------------------------------------------------------
/python3.9libs/nodegraphhooks.py:
--------------------------------------------------------------------------------
1 | import hou
2 | from canvaseventtypes import *
3 | import nodegraphdisplay as display
4 | import nodegraphview as view
5 |
6 | import extra
7 | from importlib import reload
8 |
9 |
10 | def createEventHandler(uievent, pending_actions):
11 | reload(extra)
12 | if extra.do_stuff(uievent):
13 | return None, True
14 | else:
15 | return None, False
16 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--trimcurvelengthGRAD.txt:
--------------------------------------------------------------------------------
1 | = PIC Trim Curve With Length (Grad) =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Start Position:
16 | #dist:
17 | float: Start Position
18 |
19 | Length:
20 | #length:
21 | float: Length
22 |
23 | Flip:
24 | #flip:
25 | toggle: Flip
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | LV Tools.approj
2 | .ap/*
3 | Houdini Tools.zip
4 | .gitignore
5 | hda/backup/*
6 | hda/back
7 | otls_bak/*
8 | */*/*/__pycache__/*
9 | */*/__pycache__/*
10 | python3.9libs/__pycache__/*
11 | otls/backup/*
12 | scripts/python/LVProjectManager/prefs.json
13 | python3.9libs/nodegraphtitle.py
14 | scripts/python/.env
15 | scripts/python/gpt.py
16 | scripts/python/.bak
17 | scripts/python/gradientManager/ramps/*.json
18 | prefs.json
--------------------------------------------------------------------------------
/PlaybarMenu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_largestprim.txt:
--------------------------------------------------------------------------------
1 | = LV Extract Largest =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Type:
16 | #type:
17 | menu: Type
18 |
19 | Group?:
20 | #group:
21 | toggle: Group?
22 |
23 | Group Name:
24 | #g_name:
25 | string: Group Name
26 |
27 | Message:
28 | #labelparm:
29 | label: Message
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_EaseManager.txt:
--------------------------------------------------------------------------------
1 | = LV Ease Manager =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Label:
16 | #newparameter:
17 | menu: Label
18 |
19 | Label:
20 | #newparameter2:
21 | menu: Label
22 |
23 | Label:
24 | #newparameter3min:
25 | float: Label
26 |
27 | Label:
28 | #newparameter3max:
29 | float: Label
--------------------------------------------------------------------------------
/lv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
--------------------------------------------------------------------------------
/help/nodes/Sop/lv_mat.txt:
--------------------------------------------------------------------------------
1 | = LV Mat =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Color:
16 | #base_colorr:
17 | float: Color
18 |
19 | Color:
20 | #base_colorg:
21 | float: Color
22 |
23 | Color:
24 | #base_colorb:
25 | float: Color
26 |
27 | Weight:
28 | #refl_weight:
29 | float: Weight
30 |
31 | Roughness:
32 | #refl_roughness:
33 | float: Roughness
--------------------------------------------------------------------------------
/python3.10libs/nodegraphhooks.pybak:
--------------------------------------------------------------------------------
1 | import hou
2 | from canvaseventtypes import *
3 | import nodegraphdisplay as display
4 | import nodegraphview as view
5 |
6 | import extra
7 | from importlib import reload
8 |
9 |
10 | def createEventHandler(uievent, pending_actions):
11 | reload(extra)
12 | # return None, False
13 | if extra.do_stuff(uievent):
14 | return None, True # we return True here to hijack the event and stop it getting caught by houdini naturally
15 | else:
16 | return None, False
17 |
--------------------------------------------------------------------------------
/help/nodes/Sop/Clip_by_Attribute.txt:
--------------------------------------------------------------------------------
1 | = LV Clip by Attribute =
2 |
3 | == Overview ==
4 |
5 | Clip geometry by input attribute.
6 |
7 | @parameters
8 |
9 | Clip Attribute:
10 | #clipatt:
11 | Attribute to use for clipping of geometry.
12 |
13 | Add Noise:
14 | #addnoise:
15 | Add noise to attribute.
16 |
17 | noise:
18 | #noise:
19 | Noise controls (exposed from Attribute Noise).
20 |
21 | Clip Threshold:
22 | #clipamount:
23 | Value to clip by.
24 |
25 | Keep:
26 | #clipop:
27 | Control for removing values above or below threshold.
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_SplitPath.txt:
--------------------------------------------------------------------------------
1 | = LV Path =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Split Group:
16 | #group:
17 | string: Split Group
18 |
19 | Prepend name with prim attribute:
20 | #useprimatt:
21 | toggle: Prepend name with prim attribute
22 |
23 | Attribute:
24 | #att:
25 | string: Attribute
26 |
27 | Name:
28 | #name:
29 | string: Name
30 |
31 | Group Type:
32 | #grouptype:
33 | menu: Group Type
--------------------------------------------------------------------------------
/scripts/python/tex.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 | def createAbs():
4 | nodes = hou.selectedNodes()
5 | path = nodes[0].path()
6 | path_list = path.split("/")
7 | del path_list[-1]
8 | rebuild = "/".join(path_list)
9 | rebuild_item = hou.item(rebuild)
10 |
11 | abs = rebuild_item.createNode("RSMathAbs")
12 | baseP = nodes[0].position()
13 | abs.setPosition(hou.Vector2(baseP[0]-5, baseP[1]))
14 | abs.setName("Scale_Controller")
15 | for node in nodes:
16 | if node.type().name() == "redshift::TextureSampler":
17 | node.setInput(0, abs)
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Clipandmirror.txt:
--------------------------------------------------------------------------------
1 | = LV Clip and Mirror =
2 |
3 | == Overview ==
4 |
5 | Clip geometry and mirror by the same plane.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Clip Distance:
16 | #dist:
17 | float: Clip Distance
18 |
19 | Simple Direction:
20 | #sdir:
21 | toggle: Simple Direction
22 |
23 | Direction:
24 | #dirx:
25 | float: Direction
26 |
27 | Direction:
28 | #diry:
29 | float: Direction
30 |
31 | Direction:
32 | #dirz:
33 | float: Direction
34 |
35 | Direction:
36 | #simpleDir:
37 | menu: Direction
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_VDBBoolean.txt:
--------------------------------------------------------------------------------
1 | = LV VDB Boolean =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Voxel Size:
16 | #voxelsize:
17 | float: Voxel Size
18 |
19 | Operation:
20 | #op:
21 | menu: Operation
22 |
23 | Label:
24 | #de:
25 | menu: Label
26 |
27 | :
28 | #de_amt:
29 | float:
30 |
31 | Operation:
32 | #operation:
33 | string: Operation
34 |
35 | Filter Voxel Radius:
36 | #radius:
37 | int: Filter Voxel Radius
38 |
39 | Iterations:
40 | #iterations:
41 | int: Iterations
--------------------------------------------------------------------------------
/python3.10libs/nodegraphtitle.pybak:
--------------------------------------------------------------------------------
1 | from __future__ import print_function
2 | import hou
3 | import nodegraphprefs as prefs
4 |
5 |
6 | def networkEditorTitleLeft(editor):
7 | try:
8 | title = ''
9 | pwd = editor.pwd()
10 | title = 'Follow @wobblypictures\non Twitter'
11 | # print('updated')
12 |
13 | except:
14 | title = ''
15 |
16 | return title
17 |
18 |
19 | def networkEditorTitleRight(editor):
20 | try:
21 | title = ''
22 | pwd = editor.pwd()
23 | title += pwd.childTypeCategory().label()
24 |
25 | except:
26 | title = ''
27 |
28 | return title
29 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_EasyGroup.txt:
--------------------------------------------------------------------------------
1 | = LV Easy Group =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Group Name:
16 | #groupname:
17 | string: Group Name
18 |
19 | Invert:
20 | #invert:
21 | toggle: Invert
22 |
23 | X Size:
24 | #xsize:
25 | float: X Size
26 |
27 | Y Size:
28 | #ysize:
29 | float: Y Size
30 |
31 | Z Size:
32 | #zsize:
33 | float: Z Size
34 |
35 | X Offset:
36 | #xoff:
37 | float: X Offset
38 |
39 | Y Offset:
40 | #yoff:
41 | float: Y Offset
42 |
43 | Z Offset:
44 | #zoff:
45 | float: Z Offset
--------------------------------------------------------------------------------
/codeswap/swap.txt:
--------------------------------------------------------------------------------
1 | # Script code that runs for each task in the node.
2 | #
3 | # The following variables are available:
4 | # work_item - the work item currently running
5 | # graph - the graph attributes for the current work item
6 | #
7 | # In addition to the above, in-process scripts can also access:
8 | # self - the current PDG node
9 | # parent_item - the parent work item, if it exists
10 |
11 | name = work_item.stringAttribValue("filename")
12 |
13 | wedge = int(name.split(".")[0].split("_")[-1])
14 | frame = int(name.split(".")[1])
15 |
16 | work_item.setIntAttrib("wedge", wedge, -1)
17 | work_item.setIntAttrib("frame", name, -1)
18 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--Radial_Symmetry.txt:
--------------------------------------------------------------------------------
1 | = LV Radial Symmetry =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Auto Align Slice:
16 | #aslice:
17 | toggle: Auto Align Slice
18 |
19 | Loops:
20 | #loops:
21 | int: Loops
22 |
23 | Mirror Mode:
24 | #mirmode:
25 | toggle: Mirror Mode
26 |
27 | Fuse Edges:
28 | #fuse:
29 | toggle: Fuse Edges
30 |
31 | Snap Distance:
32 | #tol3d:
33 | float: Snap Distance
34 |
35 | Preview Slice:
36 | #slice:
37 | toggle: Preview Slice
38 |
39 | Show Guides:
40 | #guides:
41 | toggle: Show Guides
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--LV_FloodAttribute.txt:
--------------------------------------------------------------------------------
1 | = LV Flood Attribute =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Original Name:
16 | #inname:
17 | string: Original Name
18 |
19 | Clamp Min:
20 | #min:
21 | float: Clamp Min
22 |
23 | Clamp Max:
24 | #max:
25 | float: Clamp Max
26 |
27 | Range Min:
28 | #outputmin:
29 | float: Range Min
30 |
31 | Range Max:
32 | #outputmax:
33 | float: Range Max
34 |
35 | Reverse Direction:
36 | #reverse:
37 | toggle: Reverse Direction
38 |
39 | Flood Slider:
40 | #flood:
41 | float: Flood Slider
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Draw_Ramp.txt:
--------------------------------------------------------------------------------
1 | = LV Draw Ramp =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Pull Shape:
16 | #pull:
17 | button: Pull Shape
18 |
19 | Ramp:
20 | #ramp:
21 | ramp: Ramp
22 |
23 | Position:
24 | #ramp1pos:
25 | float: Position
26 |
27 | Value:
28 | #ramp1value:
29 | float: Value
30 |
31 | Interpolation:
32 | #ramp1interp:
33 | menu: Interpolation
34 |
35 | Position:
36 | #ramp2pos:
37 | float: Position
38 |
39 | Value:
40 | #ramp2value:
41 | float: Value
42 |
43 | Interpolation:
44 | #ramp2interp:
45 | menu: Interpolation
--------------------------------------------------------------------------------
/scripts/python/LVUpdater.py:
--------------------------------------------------------------------------------
1 | # from git import Repo
2 | import hou
3 | import subprocess
4 | import os
5 | import shutil
6 |
7 |
8 | def update():
9 | path = hou.text.expandString("$LV")
10 | os.chdir(path)
11 | result = subprocess.run('git fetch --dry-run', shell=True, capture_output=True, text=True)
12 |
13 | if not result.stdout == "":
14 | if hou.ui.displayMessage("Update available. Download update?", buttons=("Yes", "No")) == 0:
15 | subprocess.run('git pull')
16 | hou.ui.displayMessage("Updated. Please restart Houdini.", buttons=("Okay", "Close"))
17 |
18 | else:
19 | hou.ui.displayMessage("Up to date.", buttons=("Okay", "Close"))
20 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--SafeBevel.txt:
--------------------------------------------------------------------------------
1 | = LV Safe Bevel =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Group:
16 | #group:
17 | string: Group
18 |
19 | Ignore Flat Edges (Coplanar Incident Polygons):
20 | #ignoreflatedges:
21 | toggle: Ignore Flat Edges (Coplanar Incident Polygons)
22 |
23 | Maximum Normal Angle:
24 | #flatangle:
25 | float: Maximum Normal Angle
26 |
27 | fillet:
28 | #fillet:
29 | : fillet
30 |
31 | Distance:
32 | #offset:
33 | float: Distance
34 |
35 | Divisions:
36 | #divisions:
37 | int: Divisions
38 |
39 | Stop Loops:
40 | #limit:
41 | menu: Stop Loops
--------------------------------------------------------------------------------
/scripts/python/camutils.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 | node = hou.pwd()
4 | cam = hou.pwd().parm('cam')
5 | link = hou.item(cam.eval())
6 |
7 | def enableMask():
8 | if(link == None):
9 | pass
10 | else:
11 | ptg = link.parmTemplateGroup()
12 |
13 | vm = hou.properties.parmTemplate('viewport', 'viewport_mask')
14 |
15 | vmf = hou.FolderParmTemplate('View Mask', 'View Mask', parm_templates=((vm),))
16 |
17 | ptg.append(vmf)
18 | try:
19 | link.setParmTemplateGroup(ptg)
20 | link.parm("maskoverlay").set(node.path())
21 | link.parm("maskaspect").setExpression('ch("resx")/ch("resy")')
22 | except hou.Error:
23 | print("Failed to set View Mask. Camera may already have view mask options exposed.")
24 |
25 |
--------------------------------------------------------------------------------
/scripts/python/LVPlaybarUtils.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 |
4 | def setTimeline(kwargs):
5 | playbar = hou.playbar
6 | range = playbar.frameRange()
7 | playRange = playbar.playbackRange()
8 |
9 | endmod = playRange[1]/range[1]
10 | startmod = playRange[0]/range[0]
11 |
12 |
13 | fps = hou.fps()
14 |
15 | btn_idx, values = hou.ui.readMultiInput(
16 | "Set timeline", ("FPS", "Start Frame", "End Frame"),
17 | initial_contents=(str(fps), str(range[0]), str(range[1])),
18 | title="Timeline Settings",
19 | buttons=("OK", "Cancel"),
20 | default_choice=0, close_choice=1,
21 | )
22 |
23 | playbar.setFrameRange(float(values[1]), float(values[2]))
24 | playbar.setPlaybackRange(float(values[1]) * startmod, float(values[2]) * endmod)
25 | hou.setFps(float(values[0]))
26 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Double_Resample.txt:
--------------------------------------------------------------------------------
1 | = LV Double Resample =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | pre:
16 | #pre:
17 | : pre
18 |
19 | Maximum Segment Length:
20 | #dolength:
21 | toggle: Maximum Segment Length
22 |
23 | Length:
24 | #length:
25 | float: Length
26 |
27 | Maximum Segments:
28 | #dosegs:
29 | toggle: Maximum Segments
30 |
31 | Segments:
32 | #segs:
33 | int: Segments
34 |
35 | post:
36 | #post:
37 | : post
38 |
39 | Maximum Segment Length:
40 | #dolength2:
41 | toggle: Maximum Segment Length
42 |
43 | Length:
44 | #length2:
45 | float: Length
46 |
47 | Maximum Segments:
48 | #dosegs2:
49 | toggle: Maximum Segments
50 |
51 | Segments:
52 | #segs2:
53 | int: Segments
--------------------------------------------------------------------------------
/scripts/python/BasePythonPanel/BasePanel.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import hou
4 | import json
5 |
6 | from hutil.PySide import QtCore, QtUiTools, QtWidgets, QtGui
7 | from hutil.PySide.QtWidgets import QGridLayout
8 |
9 |
10 | from texManager import texManager
11 |
12 |
13 | class TexManager(QtWidgets.QWidget):
14 | def __init__(self):
15 | super(TexManager, self).__init__()
16 |
17 | self.folderpath = os.path.dirname(os.path.realpath(__file__))
18 |
19 | ui_file_path = self.folderpath + "/BasePanel.ui"
20 |
21 | loader = QtUiTools.QUiLoader()
22 | self.ui = loader.load(ui_file_path)
23 |
24 | mainLayout = QtWidgets.QVBoxLayout()
25 |
26 | mainLayout.addWidget(self.ui)
27 | self.setLayout(mainLayout)
28 |
29 | def createInterface(self):
30 | pass
31 |
32 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVGraph.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVHDRIManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVEaseManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/python_panels/LVNodeShare.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVStickyController.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/python_panels/LVAnimationManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVPBRBuilder.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/python_panels/LVRampManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVTexManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/scripts/python/stickyparent.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 | node = hou.selectedItems()[0]
4 |
5 | sNote = hou.selectedItems()[1]
6 |
7 | diff = node.position()-sNote.position()
8 |
9 | def onNodeMoved(**kwargs):
10 | sNote.setPosition(node.position() - diff)
11 |
12 | def clearCall(**kwargs):
13 | node.removeAllEventCallbacks()
14 |
15 | def linkNodes():
16 | if len(hou.selectedItems())<2:
17 | print("Select parent node and child node.")
18 | else:
19 |
20 | #register callback
21 | if len(node.eventCallbacks()) == 0 :
22 | node.removeAllEventCallbacks()
23 | node.setComment("This node has a linked node. To unlink, reactivate the script.")
24 | node.addEventCallback((hou.nodeEventType.PositionChanged, ), onNodeMoved)
25 | node.addEventCallback((hou.nodeEventType.BeingDeleted, ), clearCall)
26 | else:
27 | node.removeAllEventCallbacks()
28 | node.setComment("")
--------------------------------------------------------------------------------
/python_panels/LVNodeUtils.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/python_panels/LVProjectManager.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_SimpleRetime.txt:
--------------------------------------------------------------------------------
1 | = LV Simple Retime =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Global Retime:
16 | #global_retime:
17 | float: Global Retime
18 |
19 | Input End Frame (Hold):
20 | #end:
21 | int: Input End Frame (Hold)
22 |
23 | Retiming Ramp:
24 | #retime_ramp:
25 | ramp: Retiming Ramp
26 |
27 | Retime Domain (Frames):
28 | #out_end:
29 | int: Retime Domain (Frames)
30 |
31 | Message:
32 | #labelparm:
33 | label: Message
34 |
35 | Position:
36 | #retime_ramp1pos:
37 | float: Position
38 |
39 | Value:
40 | #retime_ramp1value:
41 | float: Value
42 |
43 | Interpolation:
44 | #retime_ramp1interp:
45 | menu: Interpolation
46 |
47 | Position:
48 | #retime_ramp2pos:
49 | float: Position
50 |
51 | Value:
52 | #retime_ramp2value:
53 | float: Value
54 |
55 | Interpolation:
56 | #retime_ramp2interp:
57 | menu: Interpolation
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_movealongpath.txt:
--------------------------------------------------------------------------------
1 | = LV Move Along Path =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Resample Resolution:
16 | #resrez:
17 | float: Resample Resolution
18 |
19 | Progress:
20 | #progress:
21 | float: Progress
22 |
23 | Multiple Paths:
24 | #multi:
25 | toggle: Multiple Paths
26 |
27 | multimode:
28 | #multimode:
29 | : multimode
30 |
31 | Pack and Instance:
32 | #pack:
33 | toggle: Pack and Instance
34 |
35 | Piece Attribute:
36 | #useidattrib:
37 | toggle: Piece Attribute
38 |
39 | Piece Attribute:
40 | #idattrib:
41 | string: Piece Attribute
42 |
43 | Automatically apply variant attribute:
44 | #autov:
45 | toggle: Automatically apply variant attribute
46 |
47 | Seed:
48 | #randomseed:
49 | float: Seed
50 |
51 | Offset Attribute:
52 | #inname:
53 | string: Offset Attribute
54 |
55 | Offset Scale:
56 | #off_s:
57 | float: Offset Scale
--------------------------------------------------------------------------------
/python_panels/deprecated/LVKeyframeAssistant.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/python_panels/LVPathBrowser.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LVRSLightMixer.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/otls/rename.py:
--------------------------------------------------------------------------------
1 | import os
2 | import shutil
3 |
4 | root = os.path.dirname(__file__)
5 | print(root)
6 |
7 | files = os.listdir(root)
8 |
9 | for f in files:
10 | if f != "rename.py":
11 | name = f
12 | # if name.startswith("LV_"):
13 | # new_name = name.replace("LV_", "LV.")
14 | # os.rename(name, new_name)
15 | # if name.startswith("LV.LV_"):
16 | # new_name = name.replace("LV.LV_", "LV.")
17 | # extra = name[6:]
18 | # new = "LV." + extra
19 | # os.rename(name, new)
20 | # if f.startswith("."):
21 | # new_name = name.replace("LV", "LV.", 1)
22 | # os.rename(os.path.join(root, name), os.path.join(root, name[2:]))
23 | # if not name.startswith("LV"):
24 | # os.rename(os.path.join(root, name), os.path.join(root, "LV." + name))
25 | # if "_" in name:
26 | # test_str = name
27 | # res = ''.join([word.capitalize() for word in test_str.split("_")])
28 | # print(res.capitalize())
29 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Alembic.txt:
--------------------------------------------------------------------------------
1 | = LV Alembic =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Save to Disk:
16 | #execute:
17 | button: Save to Disk
18 |
19 | Controls...:
20 | #renderdialog:
21 | button: Controls...
22 |
23 | Valid Frame Range:
24 | #trange:
25 | menu: Valid Frame Range
26 |
27 | Start/End/Inc:
28 | #f1:
29 | float: Start/End/Inc
30 |
31 | Start/End/Inc:
32 | #f2:
33 | float: Start/End/Inc
34 |
35 | Start/End/Inc:
36 | #f3:
37 | float: Start/End/Inc
38 |
39 | Use File Directory:
40 | #usefilepath:
41 | toggle: Use File Directory
42 |
43 | File Directory:
44 | #dir:
45 | string: File Directory
46 |
47 | Alembic File:
48 | #filename:
49 | string: Alembic File
50 |
51 | Name:
52 | #name:
53 | string: Name
54 |
55 | Open Directory:
56 | #openDir:
57 | button: Open Directory
58 |
59 | -:
60 | #vDown:
61 | button: -
62 |
63 | +:
64 | #vUp:
65 | button: +
66 |
67 | Version:
68 | #v:
69 | int: Version
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_fitfloat.txt:
--------------------------------------------------------------------------------
1 | = LV Fit Float =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Input Attribute:
16 | #inname:
17 | string: Input Attribute
18 |
19 | Attribute Type:
20 | #attribute_type:
21 | menu: Attribute Type
22 |
23 | Auto 0-1:
24 | #auto:
25 | toggle: Auto 0-1
26 |
27 | Floatify:
28 | #floatify:
29 | toggle: Floatify
30 |
31 | Input Min:
32 | #min:
33 | float: Input Min
34 |
35 | Input Max:
36 | #max:
37 | float: Input Max
38 |
39 | Ramp:
40 | #remap:
41 | ramp: Ramp
42 |
43 | Output Attribute:
44 | #outname:
45 | string: Output Attribute
46 |
47 | Position:
48 | #remap1pos:
49 | float: Position
50 |
51 | Value:
52 | #remap1value:
53 | float: Value
54 |
55 | Interpolation:
56 | #remap1interp:
57 | menu: Interpolation
58 |
59 | Position:
60 | #remap2pos:
61 | float: Position
62 |
63 | Value:
64 | #remap2value:
65 | float: Value
66 |
67 | Interpolation:
68 | #remap2interp:
69 | menu: Interpolation
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Slicer.txt:
--------------------------------------------------------------------------------
1 | = LV Slicer =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Time:
16 | #time:
17 | float: Time
18 |
19 | Slice Amount:
20 | #sliceamount:
21 | int: Slice Amount
22 |
23 | Slice Duration:
24 | #slicedur:
25 | int: Slice Duration
26 |
27 | Slice Ease:
28 | #ease:
29 | ramp: Slice Ease
30 |
31 | Random Slice Position:
32 | #randp:
33 | toggle: Random Slice Position
34 |
35 | Random Position Amount:
36 | #p_amount:
37 | float: Random Position Amount
38 |
39 | Rotation Amount:
40 | #r_amount:
41 | float: Rotation Amount
42 |
43 | Seed:
44 | #seed:
45 | float: Seed
46 |
47 | Position:
48 | #ease1pos:
49 | float: Position
50 |
51 | Value:
52 | #ease1value:
53 | float: Value
54 |
55 | Interpolation:
56 | #ease1interp:
57 | menu: Interpolation
58 |
59 | Position:
60 | #ease2pos:
61 | float: Position
62 |
63 | Value:
64 | #ease2value:
65 | float: Value
66 |
67 | Interpolation:
68 | #ease2interp:
69 | menu: Interpolation
--------------------------------------------------------------------------------
/python_panels/deprecated/LVRSLightLink.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_blendbyatt.txt:
--------------------------------------------------------------------------------
1 | = LV Blend by Attribute =
2 |
3 | == Overview ==
4 |
5 | Simple blend between 2 pieces of geometry by an input attribute. Blendshape SOP has this feature.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Blend Attribute:
16 | #blendatt:
17 | string: Blend Attribute
18 |
19 | Remapping:
20 | #Remapping:
21 | : Remapping
22 |
23 | Compute Range:
24 | #computerange:
25 | button: Compute Range
26 |
27 | Input Min:
28 | #inputmin:
29 | float: Input Min
30 |
31 | Input Max:
32 | #inputmax:
33 | float: Input Max
34 |
35 | Shape:
36 | #shape:
37 | ramp: Shape
38 |
39 | Label:
40 | #zero:
41 | float: Label
42 |
43 | Label:
44 | #one:
45 | float: Label
46 |
47 | Position:
48 | #shape1pos:
49 | float: Position
50 |
51 | Value:
52 | #shape1value:
53 | float: Value
54 |
55 | Interpolation:
56 | #shape1interp:
57 | menu: Interpolation
58 |
59 | Position:
60 | #shape2pos:
61 | float: Position
62 |
63 | Value:
64 | #shape2value:
65 | float: Value
66 |
67 | Interpolation:
68 | #shape2interp:
69 | menu: Interpolation
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--LV_Backdrop.txt:
--------------------------------------------------------------------------------
1 | = LV Backdrop =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Roof:
16 | #roof:
17 | toggle: Roof
18 |
19 | Left Wall:
20 | #left:
21 | toggle: Left Wall
22 |
23 | Right Wall:
24 | #right:
25 | toggle: Right Wall
26 |
27 | Back Wall:
28 | #back:
29 | toggle: Back Wall
30 |
31 | Front Wall:
32 | #front:
33 | toggle: Front Wall
34 |
35 | Curve Distance:
36 | #offset:
37 | float: Curve Distance
38 |
39 | Center:
40 | #tx:
41 | float: Center
42 |
43 | Center:
44 | #ty:
45 | float: Center
46 |
47 | Center:
48 | #tz:
49 | float: Center
50 |
51 | Size:
52 | #sizex:
53 | float: Size
54 |
55 | Size:
56 | #sizey:
57 | float: Size
58 |
59 | Size:
60 | #sizez:
61 | float: Size
62 |
63 | Uniform Scale:
64 | #scale:
65 | float: Uniform Scale
66 |
67 | Rotate:
68 | #rx:
69 | float: Rotate
70 |
71 | Rotate:
72 | #ry:
73 | float: Rotate
74 |
75 | Rotate:
76 | #rz:
77 | float: Rotate
78 |
79 | Divisions:
80 | #divisions:
81 | int: Divisions
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--PaleteFromImage.txt:
--------------------------------------------------------------------------------
1 | = Palette from Image =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Texture Map:
16 | #filename:
17 | string: Texture Map
18 |
19 | Build Gradient:
20 | #build:
21 | button: Build Gradient
22 |
23 | Gradient:
24 | #Gradient:
25 | ramp: Gradient
26 |
27 | Guide Scale:
28 | #guide_scale:
29 | float: Guide Scale
30 |
31 | Pixel Resolution:
32 | #targetsize:
33 | float: Pixel Resolution
34 |
35 | Position:
36 | #Gradient1pos:
37 | float: Position
38 |
39 | Color:
40 | #Gradient1cr:
41 | float: Color
42 |
43 | Color:
44 | #Gradient1cg:
45 | float: Color
46 |
47 | Color:
48 | #Gradient1cb:
49 | float: Color
50 |
51 | Interpolation:
52 | #Gradient1interp:
53 | menu: Interpolation
54 |
55 | Position:
56 | #Gradient2pos:
57 | float: Position
58 |
59 | Color:
60 | #Gradient2cr:
61 | float: Color
62 |
63 | Color:
64 | #Gradient2cg:
65 | float: Color
66 |
67 | Color:
68 | #Gradient2cb:
69 | float: Color
70 |
71 | Interpolation:
72 | #Gradient2interp:
73 | menu: Interpolation
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_3D_Print_Output.txt:
--------------------------------------------------------------------------------
1 | = LV 3D Print Output =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Set Height:
16 | #input:
17 | toggle: Set Height
18 |
19 | Height:
20 | #height:
21 | float: Height
22 |
23 | Check Line Width:
24 | #c_width:
25 | toggle: Check Line Width
26 |
27 | Offset by:
28 | #offset_y:
29 | float: Offset by
30 |
31 | Check Line Height:
32 | #c_height:
33 | toggle: Check Line Height
34 |
35 | over:
36 | #over:
37 | : over
38 |
39 | Check Overhang:
40 | #c_over:
41 | toggle: Check Overhang
42 |
43 | Overhang Angle2:
44 | #angle:
45 | float: Overhang Angle2
46 |
47 | File Name:
48 | #name:
49 | string: File Name
50 |
51 | Save to Disk:
52 | #execute:
53 | button: Save to Disk
54 |
55 | Open In Slicer:
56 | #openSlicer:
57 | button: Open In Slicer
58 |
59 | path:
60 | #path:
61 | string: path
62 |
63 | parms:
64 | #parms:
65 | : parms
66 |
67 | Print Base Folder:
68 | #baseFolder:
69 | string: Print Base Folder
70 |
71 | Slicer Path (.exe):
72 | #slicerPath:
73 | string: Slicer Path (.exe)
--------------------------------------------------------------------------------
/help/nodes/Sop/PIC_TWO--LV_StickyNoteController.txt:
--------------------------------------------------------------------------------
1 | = LV Sticky Note Controller =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Drag Sticky Note Here:
16 | #note:
17 | string: Drag Sticky Note Here
18 |
19 | Text Size:
20 | #size:
21 | float: Text Size
22 |
23 | Text Color:
24 | #tcolorr:
25 | float: Text Color
26 |
27 | Text Color:
28 | #tcolorg:
29 | float: Text Color
30 |
31 | Text Color:
32 | #tcolorb:
33 | float: Text Color
34 |
35 | f_bg:
36 | #f_bg:
37 | : f_bg
38 |
39 | Enable Background:
40 | #bg:
41 | toggle: Enable Background
42 |
43 | Background Color:
44 | #bgcr:
45 | float: Background Color
46 |
47 | Background Color:
48 | #bgcg:
49 | float: Background Color
50 |
51 | Background Color:
52 | #bgcb:
53 | float: Background Color
54 |
55 | parent:
56 | #parent:
57 | : parent
58 |
59 | Parent:
60 | #link:
61 | string: Parent
62 |
63 | X Offset:
64 | #x:
65 | float: X Offset
66 |
67 | Y Offset:
68 | #y:
69 | float: Y Offset
70 |
71 | Add Link:
72 | #blink:
73 | button: Add Link
74 |
75 | Remove Link:
76 | #bunlink:
77 | button: Remove Link
--------------------------------------------------------------------------------
/python3.9libs/extra.py:
--------------------------------------------------------------------------------
1 | import hou
2 | from canvaseventtypes import *
3 | import nodegraphdisplay as display
4 | import nodegraphview as view
5 | from datetime import datetime
6 |
7 |
8 | def your_function():
9 | print("consistent double click")
10 |
11 | def createEventHandler(uievent, pending_actions):
12 | if isinstance(uievent, MouseEvent):
13 | if (uievent.eventtype == 'mousedown'):
14 | try:
15 | if not hou.session.first_click:
16 | if hou.session.first_click - datetime.now() > 1000:
17 | hou.session.first_click = datetime.now()
18 | else:
19 | second = datetime.now()
20 | diff = second - hou.session.first_click
21 | mil_diff = diff.total_seconds() * 1000
22 | # print(mil_diff)
23 | # if diff > 500:
24 | if not mil_diff < 200:
25 | hou.session.first_click = datetime.now()
26 |
27 | else:
28 | your_function()
29 |
30 | except:
31 | hou.session.first_click = datetime.now()
32 |
33 | return None, True
34 | return None, False
35 |
--------------------------------------------------------------------------------
/python_panels/deprecated/LV.pypanel:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/config/NodeShapes/sideways.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "LV_SideWays",
3 | "flags": {
4 | "0": { "outline": [[0.65,-0.2392],[0.65,-0.31],[0.6393,-0.3369],[0.61,-0.35],[0.39,-0.35],[0.3616,-0.3379],[0.35,-0.3094],[0.35,-0.2008]] },
5 | "1": { "outline": [[0.65,-0.0981],[0.65,-0.2392],[0.35,-0.2008],[0.35,-0.0606]] },
6 | "2": { "outline": [[0.65,0.5008],[0.65,0.3608],[0.35,0.3992],[0.35,0.5392]] },
7 | "3": { "outline": [[0.3607,0.6369],[0.39,0.65],[0.61,0.65],[0.6384,0.6379],[0.65,0.6094],[0.65,0.5008],[0.35,0.5392],[0.35,0.61]] }
8 | },
9 | "outline": [[0.39,-0.35],[0.3616,-0.3379],[0.35,-0.3094],[0.35,0.61],[0.3607,0.6369],[0.39,0.65],[0.61,0.65],[0.6384,0.6379],[0.65,0.6094],[0.65,-0.31],[0.6393,-0.3369],[0.61,-0.35]],
10 | "inputs": [[0.3552,0.75,90],[0.379333,0.75,90],[0.403467,0.75,90],[0.4276,0.75,90],[0.451733,0.75,90],[0.475867,0.75,90],[0.5,0.75,90],[0.524133,0.75,90],[0.548267,0.75,90],[0.5724,0.75,90],[0.596533,0.75,90],[0.620667,0.75,90],[0.6448,0.75,90]],
11 | "outputs": [[0.3552,-0.49,270],[0.379333,-0.49,270],[0.403467,-0.49,270],[0.4276,-0.49,270],[0.451733,-0.49,270],[0.475867,-0.49,270],[0.5,-0.49,270],[0.524133,-0.49,270],[0.548267,-0.49,270],[0.5724,-0.49,270],[0.596533,-0.49,270],[0.620667,-0.49,270],[0.6448,-0.49,270]],
12 | "icon": [[0.38,0.03],[0.62,0.27]]
13 | }
--------------------------------------------------------------------------------
/scripts/python/animManager/animManager.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 560
10 | 600
11 |
12 |
13 |
14 | MainWindow
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | 0
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 6
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV--LV_UVMatchSize.txt:
--------------------------------------------------------------------------------
1 | = LV UV Match Size =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Target Size:
16 | #sizex:
17 | float: Target Size
18 |
19 | Target Size:
20 | #sizey:
21 | float: Target Size
22 |
23 | Target Size:
24 | #sizez:
25 | float: Target Size
26 |
27 | Translate:
28 | #dotranslate:
29 | toggle: Translate
30 |
31 | Justify X:
32 | #justify_x:
33 | menu: Justify X
34 |
35 | to:
36 | #goal_x:
37 | menu: to
38 |
39 | Offset by:
40 | #offset_x:
41 | float: Offset by
42 |
43 | Justify Y:
44 | #justify_y:
45 | menu: Justify Y
46 |
47 | to:
48 | #goal_y:
49 | menu: to
50 |
51 | Offset by:
52 | #offset_y:
53 | float: Offset by
54 |
55 | Justify Z:
56 | #justify_z:
57 | menu: Justify Z
58 |
59 | to:
60 | #goal_z:
61 | menu: to
62 |
63 | Offset by:
64 | #offset_z:
65 | float: Offset by
66 |
67 | Scale to Fit:
68 | #doscale:
69 | toggle: Scale to Fit
70 |
71 | Uniform Scale:
72 | #uniformscale:
73 | toggle: Uniform Scale
74 |
75 | Scale Axis:
76 | #scale_axis:
77 | menu: Scale Axis
78 |
79 | Scale X:
80 | #scale_x:
81 | toggle: Scale X
82 |
83 | Scale Y:
84 | #scale_y:
85 | toggle: Scale Y
86 |
87 | Scale Z:
88 | #scale_z:
89 | toggle: Scale Z
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/flipX.py:
--------------------------------------------------------------------------------
1 | import hou
2 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
3 | keyframes = pane_tab.graph().selectedKeyframes()
4 |
5 | kfs = []
6 | okfs = []
7 | val = []
8 |
9 | i = -1;
10 |
11 | for parm in keyframes.keys():
12 | for key in keyframes[parm]:
13 | kfs.append(key)
14 | #okfs.append(key.value())
15 | okfs.append(key)
16 | val.append(key.value())
17 | parm.deleteAllKeyframes()
18 |
19 |
20 | kfs.reverse()
21 |
22 | for parm in keyframes.keys():
23 | for index in range(len(kfs)):
24 |
25 | #declare new vs old: in X, we want value to swap + invert slope
26 | newKey = kfs[index] #newkey created from unflipped keys
27 |
28 | accel = okfs[index].accel()
29 | inAccel = okfs[index].inAccel()
30 |
31 | slope = okfs[index].slope()
32 | inSlope = okfs[index].inSlope()
33 |
34 | print(accel)
35 |
36 | #do reversing
37 |
38 | newKey.setSlope(slope * -1)
39 | newKey.setInSlope(inSlope * -1)
40 | newKey.setAccel(accel)
41 | newKey.setInAccel(inAccel)
42 | newKey.setValue(val[index])
43 |
44 | #set keyframe
45 | parm.setKeyframe(newKey)
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_CycleAttribute.txt:
--------------------------------------------------------------------------------
1 | = LV Cycle Attribute =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Attribute to Cycle:
16 | #in_att:
17 | string: Attribute to Cycle
18 |
19 | loop:
20 | #loop:
21 | : loop
22 |
23 | Loop Mode:
24 | #loopmode:
25 | menu: Loop Mode
26 |
27 | Time:
28 | #Time:
29 | float: Time
30 |
31 | Loop Duration (Frames):
32 | #duration:
33 | float: Loop Duration (Frames)
34 |
35 | Loops Per Cycle:
36 | #loops:
37 | int: Loops Per Cycle
38 |
39 | Shape:
40 | #Shape:
41 | ramp: Shape
42 |
43 | perpiece:
44 | #perpiece:
45 | : perpiece
46 |
47 | Piece Attribute:
48 | #in_piece:
49 | string: Piece Attribute
50 |
51 | Random Per Piece:
52 | #do_rand:
53 | toggle: Random Per Piece
54 |
55 | Random Scale:
56 | #Random_Scale:
57 | float: Random Scale
58 |
59 | Reverse Direction:
60 | #flip:
61 | toggle: Reverse Direction
62 |
63 | Output Attribute:
64 | #out_att:
65 | string: Output Attribute
66 |
67 | Position:
68 | #Shape1pos:
69 | float: Position
70 |
71 | Value:
72 | #Shape1value:
73 | float: Value
74 |
75 | Interpolation:
76 | #Shape1interp:
77 | menu: Interpolation
78 |
79 | Position:
80 | #Shape2pos:
81 | float: Position
82 |
83 | Value:
84 | #Shape2value:
85 | float: Value
86 |
87 | Interpolation:
88 | #Shape2interp:
89 | menu: Interpolation
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Balancer.txt:
--------------------------------------------------------------------------------
1 | = LV Balancer =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Simple Stack:
16 | #btype:
17 | toggle: Simple Stack
18 |
19 | size:
20 | #size:
21 | : size
22 |
23 | Overall Size:
24 | #maxSize:
25 | float: Overall Size
26 |
27 | rand:
28 | #rand:
29 | : rand
30 |
31 | Random Scale Seed:
32 | #seed:
33 | int: Random Scale Seed
34 |
35 | Min Scale:
36 | #scalemin:
37 | float: Min Scale
38 |
39 | Max Scale:
40 | #scalemax:
41 | float: Max Scale
42 |
43 | Random Scale Weighting:
44 | #ramp_:
45 | ramp: Random Scale Weighting
46 |
47 | randsettings2:
48 | #randsettings2:
49 | : randsettings2
50 |
51 | Random Orientation:
52 | #randomorient:
53 | toggle: Random Orientation
54 |
55 | Random Orientation Seed:
56 | #randrotseed:
57 | float: Random Orientation Seed
58 |
59 | Position:
60 | #ramp_1pos:
61 | float: Position
62 |
63 | Value:
64 | #ramp_1value:
65 | float: Value
66 |
67 | Interpolation:
68 | #ramp_1interp:
69 | menu: Interpolation
70 |
71 | Position:
72 | #ramp_2pos:
73 | float: Position
74 |
75 | Value:
76 | #ramp_2value:
77 | float: Value
78 |
79 | Interpolation:
80 | #ramp_2interp:
81 | menu: Interpolation
82 |
83 | Position:
84 | #ramp_3pos:
85 | float: Position
86 |
87 | Value:
88 | #ramp_3value:
89 | float: Value
90 |
91 | Interpolation:
92 | #ramp_3interp:
93 | menu: Interpolation
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LV Tools for Houdini
2 |
3 | # PLEASE NOTE:
4 |
5 | # LV Tools
6 |
7 | A collection of HDAs that I use everyday to make my life easier/better/faster.
8 |
9 | This is a pay-what-you-want project! If you would like to support me, you can do so at [buy me a coffee](https://www.buymeacoffee.com/lukevan) or [PayPal](https://paypal.me/wobblypictures?country.x=ZA&locale.x=en_US).
10 |
11 | ### Installation:
12 |
13 | For those of you running Houdini 17.5 or later, you have an option for a much easier install.
14 | Simply create a folder inside your Houdini preferences directory (where the houdini.env typically is) called "packages", and place the LVTools.json file from the download into that package folder. Your preferences directory on Windows is typically in `My Documents\houdiniXX.X`. In OS X it's in `~Library/Preferences/Houdini`.
15 |
16 | Then edit LVTools.json and change the "LV" variable to match the LV Tools install path you chose in step 1 (the directory that contains "otls", "scripts", and so on).
17 |
18 | # Please note
19 |
20 | If you had this installed before, its worth redownloading and fixing the install directory as I made some changes to the structure of the git repo.
21 | If you are a git user, its worth it to clear the folder and backup any preferences you need, and then reclone it.
22 |
23 | ## Documentation:
24 |
25 | [HDAs](/otls/)
26 | [Scripts](/scripts/python/README.md)
27 | [Python Panels](/python_panels/)
28 | [Node Graph Hooks](/python3.10libs/)
29 | [Shelf Tabs](/toolbar/)
30 |
31 |
--------------------------------------------------------------------------------
/radialmenu/LVNetwork.radialmenu:
--------------------------------------------------------------------------------
1 | {
2 | "fileversion":"20.0.653",
3 | "name":"LVNetwork",
4 | "categories":"Standard",
5 | "pane":"network",
6 | "label":"LVNetwork",
7 | "type":"submenu",
8 | "items":{
9 | "0":{
10 | "label":"LV Create Named Geo",
11 | "type":"script_action",
12 | "icon":"$LV/lv.svg",
13 | "script":"radialmenu.runShelfTool(kwargs, 'LV_Create_Named_Geo')"
14 | },
15 | "2":{
16 | "label":"LV Color",
17 | "type":"script_action",
18 | "icon":"SOP_color",
19 | "script":"radialmenu.runShelfTool(kwargs, 'LV_Color')"
20 | },
21 | "3":{
22 | "label":"LV Texture Abs",
23 | "type":"script_action",
24 | "icon":"$LV/lv.svg",
25 | "script":"radialmenu.runShelfTool(kwargs, 'LV_Texture_Abs')"
26 | },
27 | "4":{
28 | "label":"Layout Tools",
29 | "type":"submenu",
30 | "items":{
31 | "2":{
32 | "label":"LV Arrange",
33 | "type":"script_action",
34 | "icon":"$LV/lv.svg",
35 | "script":"radialmenu.runShelfTool(kwargs, 'LV_Arrange')"
36 | },
37 | "6":{
38 | "label":"LV Make Space",
39 | "type":"script_action",
40 | "icon":"$LV/lv.svg",
41 | "script":"radialmenu.runShelfTool(kwargs, 'LV_Make_Space')"
42 | }
43 | }
44 | },
45 | "5":{
46 | "label":"Light Visibility Listener",
47 | "type":"script_action",
48 | "icon":"OBJ_light_area",
49 | "script":"radialmenu.runShelfTool(kwargs, 'Light_Visibility_Listener')"
50 | },
51 | "6":{
52 | "label":"add float parm",
53 | "type":"script_action",
54 | "icon":"$LV/lv.svg",
55 | "script":"radialmenu.runShelfTool(kwargs, 'add float parm')"
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/MainMenuCommon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
26 |
27 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/scripts/python/LVRender.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import subprocess
3 |
4 |
5 | def post_render(node=hou.pwd()):
6 | start = node.parm("f1").eval() # type: ignore
7 | parm = node.parm("RS_outputFileNamePrefix")
8 | wide = parm.unexpandedString() # type: ignore
9 | wide = wide.replace("$OS", node.name())
10 |
11 | if "$F4" in wide:
12 | wide = wide.replace("$F4", "%04d")
13 | elif "$F3" in wide:
14 | wide = wide.replace("$F3", "%03d")
15 | elif "$F2" in wide:
16 | wide = wide.replace("$F2", "%02d")
17 |
18 | full = hou.expandString(wide)
19 | # print("full: ", full)
20 |
21 | video = "".join(full.split(".")[:-1]) + ".mp4"
22 |
23 | video = video.replace("%04d", "")
24 | video = video.replace("%03d", "")
25 | video = video.replace("%02d", "")
26 |
27 | command = f'ffmpeg -framerate 25 -y -start_number {int(start)} -i "{full}" -c:v libx264 -crf 23 -pix_fmt yuv420p "{video}"'
28 |
29 | print(command)
30 |
31 | subprocess.Popen(command)
32 |
33 | hou.ui.showInFileBrowser(video)
34 |
35 |
36 | def pre_render(node=hou.pwd()):
37 | parm = node.parm("RS_outputFileNamePrefix")
38 | wide = parm.unexpandedString() # type: ignore
39 | import hou
40 |
41 | detects = ['$F', '$F4', '$F3', '$F2']
42 | if any(x in wide for x in detects):
43 | pass
44 | # hou.ui.displayMessage('Render output contains frame number identifier.', severity=hou.severityType.Message)
45 | else:
46 | hou.ui.displayMessage('Render output missing frame number identifier.', severity=hou.severityType.Warning)
47 | pass
48 | # hou.hscript('rkill *')
49 |
--------------------------------------------------------------------------------
/windows_installer.ps1:
--------------------------------------------------------------------------------
1 |
2 | <#
3 | .SYNOPSIS
4 | Powershell Script for Setup Package Json File
5 |
6 | .LINK
7 | https://www.sidefx.com/docs/houdini/ref/plugins.html
8 |
9 | .AUTHOR
10 | Mandrake0 (Francis Pimenta)
11 | #>
12 |
13 |
14 | # Getting the Location
15 | $currentLocation = $PSScriptRoot
16 | $UserLocation = "$env:USERPROFILE\Documents\"
17 | $jsonFile = "LVTools.json"
18 | $json = Get-Content $currentLocation\$jsonFile
19 |
20 | # Get the Houdini Folder to Write the package JSON File
21 | Set-Location $UserLocation
22 | $HoudiniFolder = Get-Item .\houdini* | Select-Object -Property Name | Out-GridView -Title "Houdini Installation Folder Selection" -PassThru
23 |
24 | if (!$HoudiniFolder) {
25 | Write-Warning "No Houdini Folder Selected, Abort Setup"
26 | Return 1
27 | }
28 |
29 | $Houdini = $HoudiniFolder.Name
30 | $fullpath = $UserLocation + $Houdini
31 |
32 | $MSG = @{}
33 | $MSG.Add("Github LV Tools Folder", $currentLocation)
34 | $MSG.Add("Houdini Version", $Houdini)
35 |
36 | # Check if Houdini Package Folder Exist
37 | if (!(Test-Path $fullpath\packages)) {
38 | $MSG.Add("Pagackes Folder Created", "YES")
39 | New-Item -ItemType Directory -Path $fullpath\packages
40 | } else {
41 | $MSG.Add("Pagackes Folder Created", "NO")
42 | }
43 |
44 | # Create JSON File | it just Overwrites when it exist :-)
45 | Write-Output $json.Replace("/path/to/folder", $currentLocation.Replace("\", "/")) | Out-File -FilePath $fullpath\packages\$jsonFile -Encoding default
46 | $MSG.Add("json File", "$fullpath\packages\$jsonFile")
47 |
48 | Write-Output "LV Tools Package Created"
49 | Write-Output $MSG
50 |
51 | Read-Host "Press ENTER to Close"
--------------------------------------------------------------------------------
/scripts/python/LVMatUtils.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 | def shader_switch_to_mat(kwargs):
4 | node = kwargs['node']
5 |
6 | parms = node.parms()
7 | for inputs in node.inputs():
8 | pass
9 | # for parm in parms:
10 | # print(parm.name())
11 | # if parm.name.startswith('shader'):
12 | # parm.set(1)
13 |
14 | def move_to_mat(kwargs):
15 | node = kwargs['node']
16 | mat_node = hou.node(node.path() + "/the_matnet/lv_mat1")
17 | new = hou.copyNodesTo([mat_node], hou.node("/mat"))
18 | node.parm("shop_materialpath1").set(new[0].path())
19 |
20 | for c in mat_node.children():
21 | c.destroy()
22 |
23 | # set parm refs
24 | new[0].setName(node.name())
25 | new[0].moveToGoodPosition()
26 | newmat = hou.node(new[0].path() + "/StandardMaterial1")
27 | newmat.parm("base_colorr").deleteAllKeyframes()
28 | newmat.parm("base_colorg").deleteAllKeyframes()
29 | newmat.parm("base_colorb").deleteAllKeyframes()
30 | newmat.parm("refl_weight").deleteAllKeyframes()
31 | newmat.parm("refl_roughness").deleteAllKeyframes()
32 | newmat.parm("base_colorr").set(node.parm("base_colorr").eval())
33 | newmat.parm("base_colorg").set(node.parm("base_colorg").eval())
34 | newmat.parm("base_colorb").set(node.parm("base_colorb").eval())
35 | newmat.parm("refl_weight").set(node.parm("refl_weight").eval())
36 | newmat.parm("refl_roughness").set(node.parm("refl_roughness").eval())
37 |
38 | oldinput = node.inputs()[0]
39 |
40 | material = node.createInputNode(0, "material")
41 | material.parm("shop_materialpath1").set(new[0].path())
42 | material.setInput(0, oldinput)
43 | node.destroy()
44 | material.moveToGoodPosition()
45 |
--------------------------------------------------------------------------------
/help/nodes/Sop/LV_Path.txt:
--------------------------------------------------------------------------------
1 | = LV Path =
2 |
3 | == Overview ==
4 |
5 | Explanation of the node's purpose and operation.
6 |
7 | @inputs
8 |
9 | Label:
10 |
11 | What the input is for.
12 |
13 | @parameters
14 |
15 | Group:
16 | #group:
17 | string: Group
18 |
19 | Group Type:
20 | #grouptype:
21 | menu: Group Type
22 |
23 | Run Over:
24 | #class:
25 | menu: Run Over
26 |
27 | Number Count:
28 | #vex_numcount:
29 | int: Number Count
30 |
31 | Thread Job Size:
32 | #vex_threadjobsize:
33 | int: Thread Job Size
34 |
35 | VEXpression:
36 | #snippet:
37 | string: VEXpression
38 |
39 | Attributes to Create:
40 | #exportlist:
41 | string: Attributes to Create
42 |
43 | Enforce Prototypes:
44 | #vex_strict:
45 | toggle: Enforce Prototypes
46 |
47 | Autobind by Name:
48 | #autobind:
49 | toggle: Autobind by Name
50 |
51 | Number of Bindings:
52 | #bindings:
53 | folder: Number of Bindings
54 |
55 | Autobind Groups by Name:
56 | #groupautobind:
57 | toggle: Autobind Groups by Name
58 |
59 | Group Bindings:
60 | #groupbindings:
61 | folder: Group Bindings
62 |
63 | Evaluation Node Path:
64 | #vex_cwdpath:
65 | string: Evaluation Node Path
66 |
67 | Export Parameters:
68 | #vex_outputmask:
69 | string: Export Parameters
70 |
71 | Update Normals If Displaced:
72 | #vex_updatenmls:
73 | toggle: Update Normals If Displaced
74 |
75 | Attribute to Match:
76 | #vex_matchattrib:
77 | string: Attribute to Match
78 |
79 | Compute Results In Place:
80 | #vex_inplace:
81 | toggle: Compute Results In Place
82 |
83 | Output Selection Group:
84 | #vex_selectiongroup:
85 | string: Output Selection Group
86 |
87 | VEX Precision:
88 | #vex_precision:
89 | string: VEX Precision
90 |
91 | Name:
92 | #name:
93 | string: Name
--------------------------------------------------------------------------------
/scripts/python/LVRenderUtils.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 |
4 | def snapshot_and_save(kwargs):
5 | from time import gmtime, strftime
6 | import shutil
7 |
8 | filename = strftime("Snapshot_%d_%b_%Y_%H_%M_%S", gmtime())
9 | path = hou.expandString('$HIP')
10 | outpath = path + "/Snapshots/" + filename
11 |
12 | # get rop
13 |
14 | rop = hou.node("/out")
15 | children = rop.children()
16 |
17 | rs_rops = list(filter(lambda x: x.type().name() == 'Redshift_ROP', children))
18 | if len(rs_rops) == 0:
19 | print("No Redshift_ROP found")
20 | return
21 | else:
22 | rop = rs_rops[0]
23 |
24 | old_range = rop.parm("trange").eval()
25 | old_output = rop.parm("RS_outputFileNamePrefix").eval()
26 | old_mplay = rop.parm("RS_renderToMPlay").eval()
27 |
28 | rop.parm("trange").set("off")
29 | rop.parm("RS_outputFileNamePrefix").set(outpath + ".png")
30 | # rop.parm("RS_renderToMPlay").set(0)
31 |
32 | rop.parm("execute").pressButton()
33 |
34 | rop.parm("trange").set(old_range)
35 | rop.parm("RS_outputFileNamePrefix").set(old_output)
36 | # rop.parm("RS_renderToMPlay").set(old_mplay)
37 |
38 | source_file = hou.hipFile.path()
39 | destination_file = outpath + ".hip"
40 |
41 | shutil.copy(source_file, destination_file)
42 | hou.ui.showInFileBrowser(destination_file)
43 |
44 |
45 | def fix_output(kwargs):
46 | rop = kwargs["node"]
47 | old_output = rop.parm("RS_outputFileNamePrefix").eval()
48 | pngname = old_output.replace(".exr", ".png")
49 | rop.parm("RS_outputFileNamePrefix").set(pngname)
50 |
51 | type_parm = rop.parm("RS_outputFileFormat")
52 | type_parm.set(".png")
53 |
--------------------------------------------------------------------------------
/OPmenu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
73 |
74 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/stickyController/stickyController.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import hou
4 | import json
5 |
6 | from hutil.PySide import QtCore, QtUiTools, QtWidgets, QtGui
7 |
8 | # from PyQt5.QtCore import *
9 | # from PyQt5.QtUiTools import *
10 | # from PyQt5.QtGui import *
11 | from hutil.PySide.QtWidgets import QGridLayout, QHBoxLayout
12 |
13 | from stickyController import stickyController
14 |
15 |
16 | class StickyController(QtWidgets.QWidget):
17 | def __init__(self):
18 | super(StickyController, self).__init__()
19 |
20 | self.folderpath = hou.getenv("LV") + "/scripts/python/stickyController"
21 |
22 | ui_file_path = self.folderpath + "/BasePanel.ui"
23 |
24 | loader = QtUiTools.QUiLoader()
25 | self.ui = loader.load(ui_file_path)
26 | self.basegrid = self.ui.findChild(QGridLayout, "baseGrid")
27 |
28 | mainLayout = QtWidgets.QVBoxLayout()
29 |
30 | self.initUI()
31 |
32 | mainLayout.addWidget(self.ui)
33 | self.setLayout(mainLayout)
34 |
35 | def initUI(self):
36 | self.c1 = hou.qt.ColorField()
37 | self.c2 = hou.qt.ColorField()
38 | self.hb1 = self.ui.findChild(QHBoxLayout, "hb1")
39 | self.hb2 = self.ui.findChild(QHBoxLayout, "hb2")
40 | self.hb1.addWidget(self.c1)
41 | self.hb2.addWidget(self.c2)
42 |
43 | # node = hou.pwd()
44 | # note = node.parm("note")
45 | # slider = node.parm("size").eval()
46 | # tc = node.parmTuple("tcolor").eval()
47 | # bgc = node.parmTuple("bgc").eval()
48 | # bg = node.parm("bg").eval()
49 |
50 | # sNote = hou.item(note.eval())
51 |
52 | # tcolor = hou.Color((tc))
53 | # bgcolor = hou.Color((bgc))
54 |
55 | # sNote.setTextSize(slider)
56 | # sNote.setTextColor(tcolor)
57 | # sNote.setColor(bgcolor)
58 | # sNote.setDrawBackground(bg)
59 |
60 |
--------------------------------------------------------------------------------
/scripts/python/lvnodeutils/test.py:
--------------------------------------------------------------------------------
1 | # from hutil.Qt import QtWidgets, QtUiTools,
2 | from hutil.PySide import QtWidgets, QtUiTools, QtCore, QtGui
3 | from hutil.PySide.QtWidgets import (
4 | QPushButton,
5 | QComboBox,
6 | QTableWidget,
7 | QTableWidgetItem,
8 | )
9 | import hou
10 | import os
11 | import json
12 | from importlib import reload
13 |
14 | import LVParmUtils
15 |
16 | reload(LVParmUtils)
17 |
18 |
19 | class lvnodeutils(QtWidgets.QWidget):
20 | def __init__(self):
21 | super().__init__()
22 | self.folderpath = hou.getenv("LV") + "/scripts/python/lvnodeutils"
23 | ui_file_path = self.folderpath + "/lvnodeutils.ui"
24 |
25 | loader = QtUiTools.QUiLoader()
26 | self.ui = loader.load(ui_file_path)
27 |
28 | # create initial
29 |
30 | global btnLayout
31 |
32 | btnLayout = self.ui.findChild(QtWidgets.QVBoxLayout, "btnLayout")
33 | btnLayout = self.ui.findChild(QtWidgets.QVBoxLayout, "btnLayout")
34 |
35 | layout = QtWidgets.QVBoxLayout()
36 | layout.setContentsMargins(0, 0, 0, 0)
37 |
38 | layout.addWidget(self.ui)
39 | self.setLayout(layout)
40 |
41 | def getNode(self, node):
42 | print(node)
43 |
44 | def buildUI(self):
45 | # create buttons
46 |
47 | btns = []
48 |
49 | addFloatParm = QPushButton("Add Float Parm")
50 | # addFloatParm.clicked.connect(LVParmUtils.addFloatParm(kwargs={"node": hou.selectedNodes()[0]}))
51 | btns.append(addFloatParm)
52 |
53 | for btn in btns:
54 | btnLayout.addWidget(btn)
55 |
56 | # end create buttons
57 |
58 | spacer = QtWidgets.QSpacerItem(
59 | 20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding
60 | )
61 | btnLayout.addItem(spacer)
62 |
--------------------------------------------------------------------------------
/presets/Sop/blast.idx:
--------------------------------------------------------------------------------
1 | INDX LV Class by Iteration 8e!P#PSI_PRESET
2 | version 2.0a
3 | opspareparmdef
4 | 0707070000010000000006660000000000000000010000001450702052000001700000002216opspareparmdef parm {
5 | name "group"
6 | baseparm
7 | label "Group"
8 | export none
9 | bindselector everything Delete
10 | "Select the geometry to delete and press Enter to complete."
11 | 0 1 0xffffffff 0 grouptype 0
12 | }
13 | parm {
14 | name "grouptype"
15 | baseparm
16 | label "Group Type"
17 | export none
18 | }
19 | parm {
20 | name "computenorms"
21 | baseparm
22 | label "Recompute Normals"
23 | export none
24 | }
25 | parm {
26 | name "negate"
27 | baseparm
28 | label "Delete Non Selected"
29 | export all
30 | }
31 | parm {
32 | name "fillhole"
33 | baseparm
34 | label "Fill Simple Holes"
35 | export all
36 | }
37 | parm {
38 | name "removegrp"
39 | baseparm
40 | label "Delete Unused Groups"
41 | export none
42 | }
43 | parm {
44 | name "spare_input0"
45 | label "Spare Input 0"
46 | type oppath
47 | default { "" }
48 | help "Refer to this in expressions as -1, such as: npoints(-1)"
49 | parmtag { "cook_dependent" "1" }
50 | parmtag { "opfilter" "!!SOP!!" }
51 | parmtag { "oprelative" "." }
52 | }
53 | opvalues
54 | {
55 | version 0.8
56 | group [ 0 locks=0 ] ( "@class==`detail(-1, \"iteration\", 0)`" )
57 | grouptype [ 0 locks=0 ] ( "guess" )
58 | computenorms [ 0 locks=0 ] ( "off" )
59 | negate [ 0 locks=0 ] ( "off" )
60 | fillhole [ 0 locks=0 ] ( "off" )
61 | removegrp [ 0 locks=0 ] ( "off" )
62 | spare_input0 [ 0 locks=0 ] ( "" )
63 | }
64 |
--------------------------------------------------------------------------------
/scripts/python/LVLightUtils.py:
--------------------------------------------------------------------------------
1 | import hou
2 | from hou import nodeEventType
3 |
4 |
5 | def listenForLight(nodes):
6 | sel = nodes
7 |
8 | types = ['rslightdome::2.0', 'rslight', 'rslightsun']
9 |
10 | def flagChanged(node, event_type, **kwargs):
11 | flag = node.isDisplayFlagSet()
12 |
13 | # node.setGenericFlag(hou.nodeFlag.DisplayComment, True)
14 |
15 | c = hou.Color()
16 |
17 | if not flag:
18 | # node.setComment('Light Off')
19 | hsv = (0, 1, 1)
20 | c.setHSV(hsv)
21 | node.setColor(c)
22 | else:
23 | # node.setComment('Light On')
24 | hsv = (0, 0, 1)
25 | c.setHSV(hsv)
26 | node.setColor(c)
27 |
28 | for node in sel:
29 | try:
30 | flag = node.isDisplayFlagSet()
31 |
32 | if any(node.type().name() == x for x in types):
33 | node.removeAllEventCallbacks()
34 | node.addEventCallback((hou.nodeEventType.FlagChanged, ), flagChanged)
35 | node.parm('light_enabled').setExpression('hou.pwd().isDisplayFlagSet()', hou.exprLanguage.Python)
36 |
37 | c = hou.Color()
38 |
39 | if not flag:
40 | hsv = (0, 1, 1)
41 | c.setHSV(hsv)
42 | node.setColor(c)
43 | else:
44 | hsv = (0, 0, 1)
45 | c.setHSV(hsv)
46 | node.setColor(c)
47 | except:
48 | pass
49 |
50 |
51 | def light_listen():
52 |
53 | def prep(event_type, **kwargs):
54 | single = kwargs['child_node']
55 | listenForLight(tuple([single]))
56 | hou.node("/obj").removeAllEventCallbacks() # type: ignore
57 | hou.node("/obj").addEventCallback((hou.nodeEventType.ChildCreated,), prep) # type: ignore
58 |
59 | objs = hou.node("/obj").children() # type: ignore
60 | for o in objs:
61 | cb = o.eventCallbacks()
62 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/graph.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 560
10 | 600
11 |
12 |
13 |
14 | MainWindow
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | 0
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 6
38 |
39 | -
40 |
41 |
42 | 0
43 |
44 |
45 | 8
46 |
47 |
-
48 |
49 |
50 | Qt::Vertical
51 |
52 |
53 |
54 | 20
55 | 40
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/scripts/python/knotcontrol.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import random
3 |
4 |
5 | def doDist(kwargs, ramp_basis):
6 | p = kwargs['parms'][0]
7 | v = p.eval()
8 | keys = v.keys()
9 | new_keys = []
10 | num_keys = len(v.basis())
11 | values = v.values()
12 |
13 | new_basis = (ramp_basis, ) * (num_keys + 1)
14 |
15 | if ramp_basis == hou.rampBasis.Constant:
16 | new_basis = (ramp_basis, ) * (num_keys + 1)
17 | for i in range(len(keys)):
18 | new_keys.append(1/(num_keys) * i)
19 | else:
20 | pass
21 |
22 | new_ramp = hou.Ramp(new_basis, list(new_keys), list(v.values()))
23 |
24 | p.set(new_ramp)
25 |
26 |
27 | def randomizeKnots(kwargs):
28 | p = kwargs['parms'][0]
29 | v = p.eval()
30 | ramp_basis = v.basis()[0]
31 | keys = v.keys()
32 | new_keys = []
33 | num_keys = len(v.basis())
34 | values = v.values()
35 |
36 | new_basis = (ramp_basis, ) * (num_keys)
37 |
38 | new_basis = (ramp_basis, ) * (num_keys + 1)
39 | for i in range(len(keys)):
40 | new_keys.append(1/(num_keys - 1) * i)
41 |
42 | val_list = list(values)
43 | random.shuffle(val_list)
44 |
45 | new_ramp = hou.Ramp(new_basis, list(new_keys), val_list)
46 |
47 | p.set(new_ramp)
48 |
49 |
50 | def sortKnots(kwargs):
51 |
52 | def huesort(val):
53 | col = hou.Color(val)
54 | return col.hsv()[0]
55 |
56 | p = kwargs['parms'][0]
57 | v = p.eval()
58 | ramp_basis = v.basis()[0]
59 | keys = v.keys()
60 | new_keys = []
61 | num_keys = len(v.basis())
62 | values = v.values()
63 |
64 | print(values)
65 |
66 | new_basis = (ramp_basis, ) * (num_keys)
67 |
68 | new_basis = (ramp_basis, ) * (num_keys + 1)
69 | for i in range(len(keys)):
70 | new_keys.append(1/(num_keys - 1) * i)
71 |
72 | val_list = list(values)
73 | val_list.sort(key=huesort)
74 |
75 | new_ramp = hou.Ramp(new_basis, list(new_keys), val_list)
76 |
77 | p.set(new_ramp)
78 |
--------------------------------------------------------------------------------
/scripts/python/LVAI.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import openai
3 | import os
4 | from dotenv import load_dotenv, find_dotenv, dotenv_values
5 |
6 |
7 | def setKey():
8 | pbase = os.getcwd()
9 | pdir = os.path.dirname(os.path.abspath(__file__))
10 | os.chdir(pdir)
11 | load_dotenv(find_dotenv())
12 | keys = dotenv_values(".env")
13 | key = list(keys.values())[0]
14 | pbase = os.getcwd()
15 | pdir = os.path.dirname(os.path.abspath(__file__))
16 | os.chdir(pbase)
17 | if key == "" or key == None:
18 | c, val = hou.ui.readInput("Please acquire OpenAI key and paste here", buttons=("Ok", "Cancel",), title="Open AI Key", close_choice=1)
19 | if c == 0:
20 | os.chdir(pdir)
21 | if not val == "":
22 | with open(".env", "w") as f:
23 | f.write("OPENAI_KEY=" + val)
24 | os.chdir(pbase)
25 | key = val
26 |
27 | return key
28 |
29 |
30 | def call():
31 | key = setKey()
32 | if (key == ""):
33 | # print("OpenAI key is not set")
34 | pass
35 | else:
36 | openai.api_key = key
37 | node = hou.selectedNodes()[0]
38 | snippet = node.parm("snippet")
39 |
40 | print("GPT-3 is running...")
41 |
42 | initial = snippet.eval()
43 |
44 | snippet.set("// Running GPT-3...\n\n" + initial)
45 |
46 | response = openai.chat.completions.create(
47 | messages=[{"role": "system", "content": "you are are a code solving robot. I return only code blocks"},
48 | {"role": "user", "content": "add comments to this houdini vex code: ```\n" + initial + "\n``` do not return anything other than code block. do not explain answer"}],
49 | model="gpt-3.5-turbo",
50 |
51 | )
52 | resp = response.choices[0].message.content.split("```")
53 | a = resp[1] if resp[0] == "" else resp[0]
54 | snippet.set(a.split("\n", 1)[1])
55 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/RSLightMixer.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 560
10 | 600
11 |
12 |
13 |
14 | MainWindow
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | 0
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 6
38 |
39 | -
40 |
41 |
42 | QLayout::SetMaximumSize
43 |
44 |
-
45 |
46 |
47 | Qt::Vertical
48 |
49 |
50 |
51 | 20
52 | 40
53 |
54 |
55 |
56 |
57 | -
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/easeManager/ease/ease000.json:
--------------------------------------------------------------------------------
1 | {"name": "", "times": [0.0, 1.12], "frames": [1.0, 29.0], "values": [1.0, 1.2615943513458083], "accels": [0.5208333333333334, 0.26286734413119967], "slopes": [0.0, 3.5573653181451053], "plot_values": [1.0, 0.9999720456230767, 0.9998871601829715, 0.9997437789466993, 0.9995402919019525, 0.9992750432063309, 0.9989463281042649, 0.9985523961237015, 0.9980914423656104, 0.9975616081034231, 0.9969609855709118, 0.9962876047516255, 0.9955394385541773, 0.9947143958489914, 0.9938103311547416, 0.9928250247946904, 0.9917561878974244, 0.9906014724586437, 0.9893584459941056, 0.9880246035433564, 0.9865973558879951, 0.9850740469920132, 0.9834519205208123, 0.9817281300387839, 0.9798997553377249, 0.9779637621860245, 0.9759170224609047, 0.9737562963259371, 0.971478258927615, 0.9690794501016087, 0.966556299819253, 0.963905106215517, 0.9611220683542191, 0.9582032245611606, 0.9551444726606598, 0.9519415985616847, 0.9485902050573921, 0.9450857479057885, 0.9414235050109189, 0.9375986213760097, 0.933606023643128, 0.9294404480515024, 0.9250964786229017, 0.9205684496733498, 0.9158504944351402, 0.9109365027090218, 0.9058201802724962, 0.9004949332726492, 0.8949539049732805, 0.8891900251032533, 0.8831958788468987, 0.8769637701217119, 0.8704856638744045, 0.8637532625040284, 0.8567578514449086, 0.8494903456196141, 0.8419413515233134, 0.8341009927170362, 0.8259589899506072, 0.8175045824663154, 0.8087266241674982, 0.7996133782526097, 0.7901525737944521, 0.7803314818556168, 0.7701366833328895, 0.7595541678692609, 0.7485692255997805, 0.7371665656509099, 0.7253300423187299, 0.7130427210237988, 0.7002869688919069, 0.6870441442944817, 0.6732947156002933, 0.659018110005695, 0.6441928561770984, 0.6287962160566115, 0.6128043147320801, 0.596191955949654, 0.5789327787729202, 0.5609988190754971, 0.5423605825882155, 0.5229871542861471, 0.5028456969998472, 0.4819015986467765, 0.4601182071905041, 0.43745701117358227, 0.4138770381564302, 0.38933492180090556, 0.36378501725103163, 0.33717871044141723, 0.30946458013484757, 0.2805880156119058, 0.25049142423227566, 0.21911340223496922, 0.18638879174960787, 0.1522488077622608, 0.1166200926599471, 0.07942491244154537, 0.040580633142817235, 0.0]}
--------------------------------------------------------------------------------
/scripts/python/quickmarks/quickmarks.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 300
11 |
12 |
13 |
14 |
15 | 1
16 | 1
17 |
18 |
19 |
20 | Form
21 |
22 |
23 | -
24 |
25 |
-
26 |
27 |
28 |
29 | 0
30 | 0
31 |
32 |
33 |
34 | Jump
35 |
36 |
37 |
38 | -
39 |
40 |
-
41 |
42 |
43 |
44 | 0
45 | 0
46 |
47 |
48 |
49 | Add
50 |
51 |
52 |
53 | -
54 |
55 |
56 |
57 | 0
58 | 0
59 |
60 |
61 |
62 | Delete
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/graph/graph.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import hou
4 | import json
5 |
6 | from hutil.Qt import QtCore, QtUiTools, QtWidgets, QtGui
7 | # from PyQt5.QtCore import *
8 | # from PyQt5.QtUiTools import *
9 | # from PyQt5.QtGui import *
10 | # from PyQt5.QtWidgets import *
11 |
12 | from graph import graph
13 |
14 | class graph(QtWidgets.QWidget):
15 |
16 | def __init__(self):
17 | super(graph, self).__init__()
18 |
19 | self.folderpath = hou.getenv("LV") + "/scripts/python/graph"
20 |
21 | ui_file_path = self.folderpath + "/graph.ui"
22 |
23 | loader = QtUiTools.QUiLoader()
24 | self.ui = loader.load(ui_file_path)
25 |
26 |
27 | self.mainGrid = self.ui.findChild(QtWidgets.QGridLayout, "mainGrid")
28 |
29 | self.y_values = [10, 30, 20, 50, 40, 30, 20, 10]
30 | self.graph = GraphView(self.y_values)
31 |
32 | self.mainGrid.addWidget(self.graph, 0, 0)
33 |
34 | self.createInterface() #run create interface
35 |
36 | mainLayout = QtWidgets.QVBoxLayout()
37 |
38 | mainLayout.addWidget(self.ui)
39 | self.setLayout(mainLayout)
40 |
41 | def createInterface(self):
42 | pass
43 |
44 | class GraphView(QtWidgets.QGraphicsView):
45 | def __init__(self, y_values):
46 | super().__init__()
47 |
48 | self.y_values = y_values
49 |
50 | # set up the scene
51 | self.scene = QtWidgets.QGraphicsScene(self)
52 | self.setScene(self.scene)
53 |
54 | self.setFixedSize(100, 100)
55 | self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
56 | self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
57 |
58 | self.setStyleSheet("border: None;")
59 |
60 |
61 | # set up the pen for drawing the lines
62 | self.pen = QtGui.QPen(QtCore.Qt.white)
63 | self.pen.setWidth(1)
64 |
65 | def resizeEvent(self, event):
66 | # resize the scene to match the view
67 |
68 | # clear any existing items from the scene
69 | self.scene.clear()
70 |
71 | # calculate the x spacing
72 | num_points = len(self.y_values)
73 | x_spacing = self.width() / (num_points - 1)
74 |
75 | # draw the lines between the points
76 | for i in range(num_points - 1):
77 | x1 = i * x_spacing
78 | y1 = self.y_values[i]
79 | x2 = (i + 1) * x_spacing
80 | y2 = self.y_values[i + 1]
81 | line = QtWidgets.QGraphicsLineItem(x1, y1, x2, y2)
82 | line.setPen(self.pen)
83 | self.scene.addItem(line)
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/RSLightMixer.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import hou
4 | import json
5 |
6 | from hutil.PySide import QtCore, QtUiTools, QtWidgets, QtGui
7 | from hutil.PySide.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QSlider, QLabel, QPushButton, QHBoxLayout, QCheckBox
8 | from hutil.PySide.QtCore import Qt
9 |
10 | from RSLightMixer import RSLightMixer
11 |
12 | loader = QtUiTools.QUiLoader()
13 |
14 | class RSLightMixer(QtWidgets.QWidget):
15 |
16 | def __init__(self):
17 | super(RSLightMixer, self).__init__()
18 |
19 | self.folderpath = os.path.dirname(os.path.realpath(__file__))
20 |
21 | ui_file_path = self.folderpath + "/RSLightMixer.ui"
22 |
23 | self.ui = loader.load(ui_file_path)
24 |
25 | self.layout = QtWidgets.QVBoxLayout()
26 | self.main = self.ui.findChild(QGridLayout, "itemBox")
27 |
28 | self.fillList()
29 |
30 | self.layout.addWidget(self.ui)
31 | self.setLayout(self.layout)
32 |
33 |
34 |
35 |
36 | def fillList(self):
37 | geo = hou.node('/obj').children()
38 |
39 | i = 0
40 | for node in geo:
41 | # if node.type().name() == 'rsLight':
42 | item = LightItem(node)
43 | self.main.addWidget(item, i, 0)
44 | i += 1
45 |
46 | class LightItem(QWidget):
47 | def __init__(self, node):
48 | super().__init__()
49 |
50 | parmDict = ['RSL_intensityMultiplier',
51 | 'Light1_exposure',
52 | 'RSL_spread']
53 |
54 | self.node = node
55 |
56 | self.folderpath = os.path.dirname(os.path.realpath(__file__))
57 |
58 | self.item = loader.load(self.folderpath + "/Item.ui")
59 |
60 | self.itemMain = self.item.findChild(QHBoxLayout)
61 | self.itemV = self.item.findChild(QVBoxLayout, "lightItem")
62 |
63 | self.enable = self.item.findChild(QCheckBox)
64 | if self.node.parm('light_enabled').eval() == 1:
65 | self.enable.setChecked(True)
66 |
67 | self.enable.setText(self.node.name())
68 |
69 | for parm in self.node.parms():
70 | if parm.name() in parmDict:
71 |
72 | holder = QHBoxLayout()
73 | label = QLabel(parm.description())
74 | label.setMinimumWidth(120)
75 | slider = QSlider(Qt.Horizontal)
76 |
77 | holder.addWidget(label)
78 | holder.addWidget(slider)
79 |
80 | self.itemV.addLayout(holder)
81 |
82 |
83 |
84 | #pass item into widget
85 | self.setLayout(self.itemMain)
86 | self.setFixedHeight(self.sizeHint().height())
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightMixer/item.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | main
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 218
11 |
12 |
13 |
14 | Form
15 |
16 |
17 |
18 |
19 |
20 |
21 | 0
22 |
23 |
24 | 0
25 |
26 |
27 | 0
28 |
29 |
30 | 0
31 |
32 | -
33 |
34 |
35 | QLayout::SetMinimumSize
36 |
37 |
38 | 0
39 |
40 |
41 | 0
42 |
43 |
-
44 |
45 |
-
46 |
47 |
48 |
49 | 0
50 | 0
51 |
52 |
53 |
54 | QFrame::StyledPanel
55 |
56 |
57 | QFrame::Raised
58 |
59 |
60 |
-
61 |
62 |
63 | 0
64 |
65 |
-
66 |
67 |
-
68 |
69 |
70 | Light Name
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/python3.10libs/extra.py:
--------------------------------------------------------------------------------
1 | import hou
2 | from canvaseventtypes import *
3 | import nodegraphdisplay as display
4 | import nodegraphview as view
5 | from datetime import datetime
6 |
7 |
8 | def do_stuff(uievent):
9 | createEventHandler(uievent)
10 | # print("consistent double click")
11 |
12 |
13 | def createEventHandler(uievent):
14 |
15 | if isinstance(uievent, MouseEvent):
16 | if (uievent.eventtype == 'mousewheel'):
17 | node_dive(uievent)
18 | if (uievent.eventtype == 'mousedown'):
19 | try:
20 |
21 | if not hou.session.first_click:
22 | if hou.session.first_click - datetime.now() > 1000:
23 | hou.session.first_click = datetime.now()
24 | else:
25 | second = datetime.now()
26 | diff = second - hou.session.first_click
27 | mil_diff = diff.total_seconds() * 1000
28 | # if diff > 500:
29 | if not mil_diff < 200:
30 | hou.session.first_click = datetime.now()
31 |
32 | else:
33 | ctrl = uievent.modifierstate.ctrl
34 | shift = uievent.modifierstate.shift
35 | if (ctrl and shift):
36 | pos = uievent.mousepos
37 | editor = uievent.editor
38 | items = editor.networkItemsInBox(pos, pos, for_select=True)
39 | node = items[-1][0]
40 |
41 | name = node.name()
42 |
43 | name = "OUT_" + name
44 |
45 | null = node.createOutputNode('null', name)
46 | null.moveToGoodPosition()
47 |
48 | except:
49 | hou.session.first_click = datetime.now()
50 |
51 | return None, True
52 | return None, False
53 |
54 | def node_dive(uievent):
55 | try:
56 | ctrl = uievent.modifierstate.ctrl
57 |
58 | if ctrl:
59 | net = hou.ui.paneTabUnderCursor()
60 | netpos = net.cursorPosition()
61 | b = net.visibleBounds()
62 | min = b.min()
63 | max = b.max()
64 | tl = hou.Vector2(min.x(), max.y())
65 | br = hou.Vector2(max.x(), min.y())
66 |
67 | visnodes = net.networkItemsInBox(net.posToScreen(tl), net.posToScreen(br), for_select=True)
68 | sorted_visnodes = sorted([node[0] for node in visnodes if node[1] == "node"], key=lambda x: (netpos - x.position()).length())
69 | hero = sorted_visnodes[0]
70 |
71 | if uievent.wheelvalue > 0:
72 | net.cd(hero.path())
73 | else:
74 | net.setCurrentNode(hero.parent())
75 | except:
76 | pass
--------------------------------------------------------------------------------
/scripts/python/LVAnimTools.py:
--------------------------------------------------------------------------------
1 | import hou
2 |
3 |
4 | # def getKeys():
5 | # """
6 | # Returns a list of keyframes for the selected nodes.
7 | # """
8 | # pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
9 | # keyframes = pane_tab.graph().selectedKeyframes()
10 |
11 | # for parm in keyframes.keys():
12 | # for key in keyframes[parm]:
13 | # # print(key)
14 | # print(key.isSlopeAuto())
15 | # print(key.asCode())
16 | # # val = key.value()
17 | # # t = key.time()
18 | # # inAccel = key.inAccel()
19 | # # outAccel = key.accel()
20 |
21 | # # inSlope = key.inSlope()
22 | # # outSlope = key.slope()
23 |
24 | # # print(val, t, inAccel, outAccel, inSlope, outSlope)
25 |
26 |
27 | def flip_y():
28 | """
29 | Returns a list of keyframes for the selected nodes.
30 | """
31 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
32 | keyframes = pane_tab.graph().selectedKeyframes()
33 |
34 | for parm in keyframes.keys():
35 |
36 | vals = []
37 | for key in keyframes[parm]:
38 | vals.append(key.value())
39 |
40 | min_val = min(vals)
41 | max_val = max(vals)
42 |
43 | for key in keyframes[parm]:
44 | val = key.value()
45 | led = lerp(val, min_val, max_val, max_val, min_val)
46 | key.setValue(led)
47 | # key.setValue(lerp(val, min_val, max_val, max_val, min_val))
48 | # inAccel = key.inAccel()
49 | # outAccel = key.accel()
50 |
51 | # inSlope = key.inSlope()
52 | # outSlope = key.slope()
53 | parm.setKeyframe(key)
54 |
55 |
56 | def flip_x():
57 | """
58 | Returns a list of keyframes for the selected nodes.
59 | """
60 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
61 | keyframes = pane_tab.graph().selectedKeyframes()
62 |
63 | for parm in keyframes.keys():
64 |
65 | flipped = keyframes[parm][::-1]
66 | print(flipped)
67 | print(keyframes[parm])
68 |
69 | for key in keyframes[parm]:
70 | code = key.asCode(function_name="key")
71 | # key = code
72 | # print(code)
73 | # print(type(code))
74 | # val = key.value()
75 | # # key.setValue(lerp(val, min_val, max_val, max_val, min_val))
76 | # # inAccel = key.inAccel()
77 | # # outAccel = key.accel()
78 |
79 | # # inSlope = key.inSlope()
80 | # # outSlope = key.slope()
81 | # parm.setKeyframe(eval(str(key)))
82 |
83 |
84 | def lerp(value, inmin, inmax, outmin, outmax):
85 | """
86 | Linearly interpolates a value from one range to another.
87 | """
88 | return (value - inmin) * (outmax - outmin) / (inmax - inmin) + outmin
89 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/flipY_simple Working.py:
--------------------------------------------------------------------------------
1 | import hou
2 | #lerps courtesy of https://gist.github.com/laundmo/b224b1f4c8ef6ca5fe47e132c8deab56
3 | def lerp(a: float, b: float, t: float) -> float:
4 | """Linear interpolate on the scale given by a to b, using t as the point on that scale.
5 | Examples
6 | --------
7 | 50 == lerp(0, 100, 0.5)
8 | 4.2 == lerp(1, 5, 0.8)
9 | """
10 | return (1 - t) * a + t * b
11 |
12 | def inv_lerp(a: float, b: float, v: float) -> float:
13 | """Inverse Linar Interpolation, get the fraction between a and b on which v resides.
14 | Examples
15 | --------
16 | 0.5 == inv_lerp(0, 100, 50)
17 | 0.8 == inv_lerp(1, 5, 4.2)
18 | """
19 | return (v - a) / (b - a)
20 |
21 | def remap(i_min: float, i_max: float, o_min: float, o_max: float, v: float) -> float:
22 | """Remap values from one linear scale to another, a combination of lerp and inv_lerp.
23 | i_min and i_max are the scale on which the original value resides,
24 | o_min and o_max are the scale to which it should be mapped.
25 | Examples
26 | --------
27 | 45 == remap(0, 100, 40, 50, 50)
28 | 6.2 == remap(1, 5, 3, 7, 4.2)
29 | """
30 | return lerp(o_min, o_max, inv_lerp(i_min, i_max, v))
31 |
32 | def doFlip():
33 | print('--------')
34 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
35 | keyframes = pane_tab.graph().selectedKeyframes()
36 |
37 | pb = hou.playbar.playbackRange()
38 | dur = pb[1]-pb[0]+1
39 |
40 | flipped = []
41 | base_keys = []
42 | val = []
43 |
44 | for parm in keyframes.keys():
45 | for key in keyframes[parm]:
46 | flipped.append(key)
47 | base_keys.append(key)
48 | val.append(key.value())
49 |
50 | parm.deleteAllKeyframes()
51 |
52 | #find min and max
53 | k_min = 0.0
54 | k_max = 0.0
55 | for test_key in base_keys:
56 | test_val = test_key.value()
57 | if test_val > k_max:
58 | k_max = test_val
59 | elif test_val < k_min:
60 | k_min = test_val
61 |
62 | print("Min: ", k_min, ". Max: ", k_max)
63 |
64 | flipped.reverse()
65 |
66 | kl = len(flipped)-1
67 |
68 | for parm in keyframes.keys():
69 |
70 | endKey = hou.Keyframe()
71 | endKey.setFrame(dur)
72 | parm.setKeyframe(endKey)
73 |
74 | for index in range(len(base_keys)):
75 |
76 | # New keyframe from unflipped set. This is BASE
77 | newKey = base_keys[index]
78 |
79 | #v = val[kl-index]
80 |
81 | # Set value
82 | #l_val = remap(k_min, k_max, k_max, k_min, newKey.value())
83 | #newKey.setValue(l_val)
84 |
85 | # Set ease
86 | newKey.setSlope(newKey.slope() * -1)
87 |
88 | parm.setKeyframe(newKey)
89 | #pass
90 |
91 | parm.deleteKeyframeAtFrame(dur)
--------------------------------------------------------------------------------
/scripts/python/rampSave.py:
--------------------------------------------------------------------------------
1 | import hou
2 | import os
3 | import json
4 |
5 | folderpath = hou.getenv("LV")
6 |
7 | def save(kwargs):
8 |
9 | p = kwargs['parms'][0]
10 | v = p.eval()
11 | keys = v.keys()
12 | ramp_basis = v.basis()[0]
13 | new_keys = []
14 | num_keys = len(v.basis())
15 | values = v.values()
16 |
17 | basis_type = 0
18 | if ramp_basis == hou.rampBasis.Linear:
19 | basis_type = 0
20 | elif ramp_basis == hou.rampBasis.Constant:
21 | basis_type = 1
22 | elif ramp_basis == hou.rampBasis.CatmullRom:
23 | basis_type = 2
24 | elif ramp_basis == hou.rampBasis.MonotoneCubic:
25 | basis_type = 3
26 | elif ramp_basis == hou.rampBasis.Bezier:
27 | basis_type = 4
28 | elif ramp_basis == hou.rampBasis.BSpline:
29 | basis_type = 5
30 | elif ramp_basis == hou.rampBasis.Hermite:
31 | basis_type = 6
32 |
33 | plot_values = [v.lookup(i*0.1) for i in range(10)]
34 | ramp = {
35 | "ramp_basis": basis_type,
36 | "ramp_keys": str(keys),
37 | "ramp_values": str(values),
38 | "plot_values": plot_values
39 | }
40 |
41 | saveJson(ramp)
42 |
43 | def saveJson(ramp):
44 | prefs = ramp
45 | with open(f"{folderpath}\prefs.json", "w") as outfile:
46 | json.dump(prefs, outfile)
47 |
48 | def load(kwargs, ramp_basis):
49 | p = kwargs['parms'][0]
50 |
51 | if os.path.isfile(f"{folderpath}\prefs.json"):
52 |
53 | with open(f"{folderpath}\prefs.json", "r") as openfile:
54 | json_object = json.load(openfile)
55 |
56 | basis_type = json_object["ramp_basis"]
57 | basis = None
58 | if basis_type == 0:
59 | basis = hou.rampBasis.Linear
60 | elif basis_type == 1:
61 | basis = hou.rampBasis.Constant
62 | elif basis_type == 2:
63 | basis = hou.rampBasis.CatmullRom
64 | elif basis_type == 3:
65 | basis = hou.rampBasis.MonotoneCubic
66 | elif basis_type == 4:
67 | basis = hou.rampBasis.Bezier
68 | elif basis_type == 5:
69 | basis = hou.rampBasis.BSpline
70 | elif basis_type == 6:
71 | basis = hou.rampBasis.Hermite
72 |
73 | keys = json_object["ramp_keys"].strip("()")
74 | keys = keys.split(", ")
75 | keys = list(dict.fromkeys(keys))
76 | new_keys = []
77 | for k in keys:
78 | new_keys.append(float(k))
79 |
80 | values = json_object["ramp_values"].strip("()")
81 | values = values.split(", ")
82 | values = list(dict.fromkeys(values))
83 | new_values = []
84 | for val in values:
85 | new_values.append(float(val))
86 |
87 | new_basis = (basis, ) * len(new_keys)
88 |
89 | new_ramp = hou.Ramp(new_basis, new_keys, new_values)
90 |
91 | p.set(new_ramp)
--------------------------------------------------------------------------------
/scripts/python/LVRadMenu.py:
--------------------------------------------------------------------------------
1 | import LVUtils
2 | import LVNodes
3 | from importlib import reload
4 | from functools import partial
5 |
6 | def build_menu(kwargs, radialmenu):
7 |
8 | def call_func(func, kwargs):
9 | reload(LVUtils)
10 | reload(LVNodes)
11 | if func == "createNamedGeo":
12 | LVUtils.createNamedGeo(kwargs)
13 | elif func == "openControls":
14 | LVUtils.openControls()
15 | elif func == "changeColor":
16 | LVUtils.colorControl()
17 | elif func == "childNull":
18 | LVUtils.createChildNull(kwargs)
19 | elif func == "createFocusTarget":
20 | LVNodes.createRSFocusTarget(kwargs)
21 | elif func == "scenefilePreview":
22 | LVUtils.scenefile_preview()
23 | elif func == "createRSMaterial":
24 | LVUtils.createRSMaterial(kwargs)
25 |
26 | pane = kwargs["pane"]
27 | ptype = pane.pwd().type().name()
28 | contextname = pane.pwd().childTypeCategory()
29 | selected = pane.pwd().selectedItems()
30 |
31 | menu = {}
32 |
33 | directions = ["n", "s", "e", "w", "ne", "nw", "se", "sw"]
34 | items = []
35 |
36 | if ptype == "obj":
37 | items.append({
38 | "type": "script_action",
39 | "label": "Named Geo",
40 | "icon": "$LV/lv.svg",
41 | "script": lambda **kwargs: call_func("createNamedGeo",kwargs),
42 | })
43 |
44 | items.append({
45 | "type": "script_action",
46 | "label": "Open Controls",
47 | "icon": "$LV/lv.svg",
48 | "script": lambda **kwargs: call_func("openControls", kwargs),
49 | })
50 | items.append({
51 | "type": "script_action",
52 | "label": "Change Color",
53 | "icon": "$LV/lv.svg",
54 | "script": lambda **kwargs: call_func("changeColor", kwargs),
55 | })
56 | if ptype == "geo":
57 | items.append({
58 | "type": "script_action",
59 | "label": "Create Ouput Null",
60 | "icon": "$LV/lv.svg",
61 | "script": lambda **kwargs: call_func("childNull", kwargs),
62 | })
63 | if any([n.type().name() == "cam" for n in selected]):
64 | items.append({
65 | "type": "script_action",
66 | "label": "Create Focus Target",
67 | "icon": "$LV/lv.svg",
68 | "script": lambda **kwargs: call_func("createFocusTarget", kwargs),
69 | })
70 |
71 | items.append({
72 | "type": "script_action",
73 | "label": "Viewport Snapshot",
74 | "icon": "$LV/lv.svg",
75 | "script": lambda **kwargs: call_func("scenefilePreview", kwargs),
76 | })
77 |
78 | if ptype == "mat":
79 | items.append({
80 | "type": "script_action",
81 | "label": "Create RS Material",
82 | "icon": "$LV/lv.svg",
83 | "script": lambda **kwargs: call_func("createRSMaterial", kwargs),
84 | })
85 |
86 | for i, item in enumerate(items):
87 |
88 | menu[directions[i]] = item
89 |
90 |
91 | radialmenu.setRadialMenu(menu)
--------------------------------------------------------------------------------
/scripts/python/LVProjectManager/LVProjectManager.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | root
4 |
5 |
6 |
7 | 0
8 | 0
9 | 762
10 | 491
11 |
12 |
13 |
14 | Form
15 |
16 |
17 | -
18 |
19 |
-
20 |
21 |
22 | Add Folder
23 |
24 |
25 |
26 | -
27 |
28 |
-
29 |
30 | Select path
31 |
32 |
33 |
34 |
35 | -
36 |
37 |
38 |
39 |
40 | -
41 |
42 |
43 | 0
44 |
45 |
-
46 |
47 |
48 | Open Explorer
49 |
50 |
51 |
52 | -
53 |
54 |
55 | Save Incremental
56 |
57 |
58 |
59 | -
60 |
61 |
62 | Set $JOB
63 |
64 |
65 |
66 |
67 |
68 | -
69 |
70 |
71 | 0
72 |
73 |
-
74 |
75 |
76 | No folder selected
77 |
78 |
79 |
80 | -
81 |
82 |
83 | No folder selected
84 |
85 |
86 |
87 |
88 |
89 | -
90 |
91 |
92 | false
93 |
94 |
95 | 0
96 |
97 |
98 |
99 | Project
100 |
101 |
102 |
103 |
104 | -
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/icon/checkmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
95 |
--------------------------------------------------------------------------------
/scripts/python/lvnodeutils/lvnodeutils.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 1099
10 | 443
11 |
12 |
13 |
14 | Project Selector
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | QLayout::SetMinimumSize
26 |
27 | -
28 |
29 |
30 | No node selected
31 |
32 |
33 |
34 | -
35 |
36 |
37 | QLayout::SetMinimumSize
38 |
39 |
40 | 0
41 |
42 |
-
43 |
44 |
45 | QLayout::SetMinimumSize
46 |
47 |
-
48 |
49 |
50 | ho
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | -
60 |
61 |
62 | true
63 |
64 |
65 |
66 |
67 | 0
68 | 0
69 | 1071
70 | 349
71 |
72 |
73 |
74 |
75 | 2
76 |
77 |
78 | QLayout::SetMinimumSize
79 |
80 |
81 | 0
82 |
83 |
84 | 0
85 |
86 |
87 | 0
88 |
89 |
90 | 0
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/item.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | main
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 300
11 |
12 |
13 |
14 | Form
15 |
16 |
17 |
18 |
19 |
20 |
21 | 0
22 |
23 |
24 | 0
25 |
26 |
27 | 0
28 |
29 |
30 | 0
31 |
32 | -
33 |
34 |
35 | 0
36 |
37 |
38 | 0
39 |
40 |
-
41 |
42 |
-
43 |
44 |
45 |
46 | 16
47 | 0
48 |
49 |
50 |
51 |
52 | 24
53 | 16777215
54 |
55 |
56 |
57 | icon
58 |
59 |
60 |
61 | -
62 |
63 |
64 |
65 | 0
66 | 0
67 |
68 |
69 |
70 |
71 | 0
72 | 0
73 |
74 |
75 |
76 | TextLabel
77 |
78 |
79 |
80 | -
81 |
82 |
83 |
84 | 150
85 | 16777215
86 |
87 |
88 |
89 | color:hsl(0,0,70%)
90 |
91 |
92 | Light Included
93 |
94 |
95 | true
96 |
97 |
98 |
99 | -
100 |
101 |
102 |
103 | 150
104 | 16777215
105 |
106 |
107 |
108 | color:hsl(0,0,70%)
109 |
110 |
111 | Shadow Included
112 |
113 |
114 | true
115 |
116 |
117 |
118 |
119 |
120 | -
121 |
122 |
123 | Qt::Horizontal
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/stickyController/BasePanel.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 560
10 | 600
11 |
12 |
13 |
14 | MainWindow
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | 0
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 6
38 |
39 | -
40 |
41 |
42 | 0
43 |
44 |
45 | 50
46 |
47 |
48 | 8
49 |
50 |
-
51 |
52 |
-
53 |
54 |
55 |
56 | 100
57 | 0
58 |
59 |
60 |
61 |
62 | 100
63 | 16777215
64 |
65 |
66 |
67 | Background Color
68 |
69 |
70 |
71 |
72 |
73 | -
74 |
75 |
-
76 |
77 |
78 | true
79 |
80 |
81 |
82 |
83 |
84 | -
85 |
86 |
87 | -
88 |
89 |
-
90 |
91 |
92 |
93 | 100
94 | 0
95 |
96 |
97 |
98 |
99 | 100
100 | 16777215
101 |
102 |
103 |
104 | Text Color
105 |
106 |
107 |
108 |
109 |
110 | -
111 |
112 |
113 | Qt::Horizontal
114 |
115 |
116 |
117 |
118 |
119 | -
120 |
121 |
122 | Qt::Vertical
123 |
124 |
125 |
126 | 20
127 | 40
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/scripts/python/deprecated/RSLightLink/RSLightLink.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 560
10 | 600
11 |
12 |
13 |
14 | MainWindow
15 |
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 |
25 | QLayout::SetMinimumSize
26 |
27 |
28 | 0
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 0
38 |
39 |
40 | 6
41 |
42 | -
43 |
44 |
45 | 6
46 |
47 |
48 | QLayout::SetMinimumSize
49 |
50 |
-
51 |
52 |
53 | RS Light
54 |
55 |
56 |
57 | -
58 |
59 |
60 | Sync Selected
61 |
62 |
63 |
64 |
65 |
66 | -
67 |
68 |
69 | Qt::Vertical
70 |
71 |
72 |
73 | 20
74 | 40
75 |
76 |
77 |
78 |
79 | -
80 |
81 |
82 | 0
83 |
84 |
85 |
86 | -
87 |
88 |
-
89 |
90 |
91 |
92 | 16777215
93 | 0
94 |
95 |
96 |
97 | color: #e5e5e5
98 |
99 |
100 | Exclude
101 |
102 |
103 | true
104 |
105 |
106 | true
107 |
108 |
109 |
110 | -
111 |
112 |
113 |
114 | 16777215
115 | 0
116 |
117 |
118 |
119 | color: #161616
120 |
121 |
122 | Include
123 |
124 |
125 | true
126 |
127 |
128 | false
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/scripts/python/HDAUtils.py:
--------------------------------------------------------------------------------
1 | import os
2 | import hou
3 |
4 |
5 | def findLoadedHDAs():
6 | '''
7 | Returns a list of loaded HDAs in Houdini scene.
8 | HDAs installed by default with Houdini are skipped.
9 | '''
10 | loadedHDAs = []
11 | # Scan all node categories
12 | for category in hou.nodeTypeCategories().values():
13 | # Scan all node types
14 | for nodeType in category.nodeTypes().values():
15 | nodeDef = nodeType.definition()
16 | # If its a valid and unique HDA
17 | if (nodeDef is not None) and \
18 | (nodeDef.libraryFilePath() not in loadedHDAs):
19 | # If not stored at "HFS" (Houdini Installation)
20 | if nodeDef.libraryFilePath().startswith(hou.getenv("LV")):
21 | loadedHDAs.append(nodeDef)
22 |
23 | return loadedHDAs
24 |
25 |
26 | def build_help():
27 | geo = hou.node("/obj/geo1")
28 | print(geo)
29 | i = 0
30 | for hda in findLoadedHDAs():
31 | if hda.nodeTypeCategory().name() == "Sop":
32 | if not "dev" in hda.nodeTypeName().lower():
33 | node = geo.createNode(hda.nodeTypeName())
34 |
35 | # node = hou.selectedNodes()[0]
36 | type_name = node.type().name()
37 | node_type = node.type().category().name()
38 |
39 | info = hou.hda.componentsFromFullNodeTypeName(type_name)
40 |
41 | namespace = f'{info[1]}--' if info[1] != '' else ''
42 | version = f'{info[3]}' if info[3] != '' else ''
43 |
44 | filename = namespace + info[2] + ".txt"
45 |
46 | path = hou.text.expandString("$LV") + "/help" + "/nodes/" + node_type
47 |
48 | combined = path + "/" + filename
49 |
50 | pretty = node.type().description()
51 |
52 | extra = f"= {pretty} =\n\n== Overview ==\n\nExplanation of the node's purpose and operation.\n\n@inputs\n\nLabel:\n\nWhat the input is for.\n\n@parameters"
53 |
54 | for parm in node.parms():
55 | if not parm.isHidden():
56 | if not parm.name().startswith("folder"):
57 | # print("folder: ", parm.containingFolders()[-1])
58 | # print(parm.description(), ", ", parm.name())
59 | filler = parm.description()
60 | ptype = parm.parmTemplate().type()
61 | tname = ""
62 | if ptype == hou.parmTemplateType.Int:
63 | tname = "int"
64 | elif ptype == hou.parmTemplateType.Float:
65 | tname = "float"
66 | elif ptype == hou.parmTemplateType.String:
67 | tname = "string"
68 | elif ptype == hou.parmTemplateType.Toggle:
69 | tname = "toggle"
70 | elif ptype == hou.parmTemplateType.Menu:
71 | tname = "menu"
72 | elif ptype == hou.parmTemplateType.Button:
73 | tname = "button"
74 | elif ptype == hou.parmTemplateType.Folder:
75 | tname = "folder"
76 | elif ptype == hou.parmTemplateType.Label:
77 | tname = "label"
78 | elif ptype == hou.parmTemplateType.Separator:
79 | tname = "separator"
80 | elif ptype == hou.parmTemplateType.Ramp:
81 | tname = "ramp"
82 | extra += "\n\n" + parm.description() + ":\n\t#" + parm.name() + ":\n\t" + tname + ": " + parm.description()
83 |
84 | if not os.path.exists(path):
85 | os.makedirs(path)
86 |
87 | f = open(combined, "w")
88 | f.write(extra)
89 | f.close()
90 |
91 | node.destroy()
92 |
93 |
94 | def change_icon():
95 | geo = hou.node("/obj/geo1")
96 | print(geo)
97 | i = 0
98 | findLoadedHDAs()
99 | for hda in findLoadedHDAs():
100 | if hda.nodeTypeCategory().name() == "Sop":
101 | if not "dev" in hda.nodeTypeName().lower():
102 | node = geo.createNode(hda.nodeTypeName())
103 | hda.setIcon("$LV/lv.svg")
104 |
105 | node.allowEditingOfContents()
106 | hda.setIcon("$LV/lv.svg")
107 | hou.ui.openTypePropertiesDialog(node)
108 | # hda.updateFromNode(node)
109 |
110 | # node.destroy()
111 |
--------------------------------------------------------------------------------
/PARMmenu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | reference_menu
6 |
7 |
8 |
9 |
10 |
11 | parm = kwargs["parms"]
12 | if parm is None:
13 | return False
14 |
15 | return parm[0].parmTemplate().type().name() == 'Ramp'
16 |
17 |
18 |
19 |
26 |
27 |
28 |
29 |
30 |
31 | parm = kwargs["parms"]
32 | if parm is None:
33 | return False
34 |
35 | return parm[0].parmTemplate().type().name() == 'Ramp'
36 |
37 |
38 |
39 |
46 |
47 |
48 |
49 |
50 |
51 | parm = kwargs["parms"]
52 | if parm is None:
53 | return False
54 |
55 | return parm[0].parmTemplate().type().name() == 'Ramp'
56 |
57 |
58 |
59 |
66 |
67 |
68 |
69 |
70 |
71 | parm = kwargs["parms"]
72 | if parm is None:
73 | return False
74 |
75 | return parm[0].parmTemplate().type().name() == 'Ramp'
76 |
77 |
78 |
79 |
86 |
87 |
88 |
89 |
90 | parm = kwargs["parms"]
91 | if parm is None:
92 | return False
93 |
94 | return parm[0].parmTemplate().type().name() == 'Ramp'
95 |
96 |
97 |
98 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | parm = kwargs["parms"]
112 | if parm is None:
113 | return False
114 |
115 | return parm[0].name() == 'snippet'
116 |
117 |
118 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | parm = kwargs["parms"]
132 | if parm is None:
133 | return False
134 |
135 | return parm[0].name() == 'snippet'
136 |
137 |
138 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | LVM1
178 |
179 |
180 |
181 |
187 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
--------------------------------------------------------------------------------
/config/NodeShapes/controller.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "LV_Controller",
3 | "flags": {
4 | "0": { "outline": [[1.01453,0.0542948],[1.0133,0.0387537],[1.00961,0.0247706],[1.00346,0.0123453],[0.994854,0.00147784],[0.983787,-0.00783169],[0.970261,-0.0155833],[0.539495,-0.219142],[0.525969,-0.224174],[0.514902,-0.225323],[0.506295,-0.222591],[0.500147,-0.215976],[0.496458,-0.205479],[0.495228,-0.1911],[0.495228,0.00223264],[0.496458,0.0177737],[0.500147,0.0317569],[0.506295,0.0441822],[0.514902,0.0550496],[0.525969,0.0643591],[0.539495,0.0721108],[0.970261,0.27567],[0.983787,0.280701],[0.994854,0.281851],[1.00346,0.279118],[1.00961,0.272504],[1.0133,0.262007],[1.01453,0.247628]] },
5 | "1": { "outline": [[0.451548,0.327226],[0.452823,0.318301],[0.456648,0.311926],[0.463023,0.308101],[0.471948,0.306826],[0.518508,0.306826],[0.527433,0.308101],[0.533808,0.311926],[0.537633,0.318301],[0.538908,0.327226],[0.538908,0.655597],[0.537633,0.664522],[0.533808,0.670897],[0.527433,0.674722],[0.518508,0.675997],[0.471948,0.675997],[0.463023,0.674722],[0.456648,0.670897],[0.452823,0.664522],[0.451548,0.655597]] },
6 | "2": { "outline": [[0.0201954,-0.0155833],[0.00666955,-0.00783169],[-0.00439703,0.00147784],[-0.0130044,0.0123453],[-0.0191525,0.0247706],[-0.0228414,0.0387537],[-0.0240709,0.0542948],[-0.0240709,0.247628],[-0.0228414,0.262007],[-0.0191525,0.272504],[-0.0130044,0.279118],[-0.00439703,0.281851],[0.00666955,0.280701],[0.0201954,0.27567],[0.450962,0.0721108],[0.464488,0.0643591],[0.475554,0.0550496],[0.484162,0.0441822],[0.49031,0.0317569],[0.493999,0.0177737],[0.495228,0.00223264],[0.495228,-0.1911],[0.493999,-0.205479],[0.49031,-0.215976],[0.484162,-0.222591],[0.475554,-0.225323],[0.464488,-0.224174],[0.450962,-0.219142]] },
7 | "3": { "outline": [[0.699228,0.806643],[0.69762,0.832211],[0.692819,0.857376],[0.684903,0.88174],[0.673995,0.904921],[0.660268,0.926551],[0.643938,0.946291],[0.625263,0.963828],[0.604537,0.978886],[0.582087,0.991228],[0.558268,1.00066],[0.533454,1.00703],[0.508038,1.01024],[0.482419,1.01024],[0.457002,1.00703],[0.432189,1.00066],[0.408369,0.991228],[0.38592,0.978886],[0.365194,0.963828],[0.346519,0.946291],[0.330189,0.926551],[0.316462,0.904921],[0.305554,0.88174],[0.297637,0.857376],[0.292837,0.832211],[0.291228,0.806643],[0.292837,0.781075],[0.297637,0.75591],[0.305554,0.731546],[0.316462,0.708365],[0.330189,0.686735],[0.346519,0.666995],[0.365194,0.649458],[0.38592,0.6344],[0.408369,0.622058],[0.432189,0.612627],[0.457003,0.606256],[0.482419,0.603046],[0.508038,0.603046],[0.533454,0.606256],[0.558268,0.612628],[0.582087,0.622058],[0.604537,0.6344],[0.625263,0.649458],[0.643938,0.666995],[0.660268,0.686735],[0.673995,0.708365],[0.684903,0.731546],[0.692819,0.75591],[0.69762,0.781075]] }
8 | },
9 | "outline": [[0.69762,0.832211],[0.699228,0.806643],[0.69762,0.781075],[0.692819,0.75591],[0.684903,0.731546],[0.673995,0.708365],[0.660268,0.686735],[0.643938,0.666995],[0.625263,0.649458],[0.604537,0.6344],[0.582087,0.622058],[0.558268,0.612628],[0.538908,0.607657],[0.538908,0.499121],[0.969768,0.295518],[0.977574,0.290934],[0.983203,0.284654],[0.988066,0.278527],[0.991418,0.269829],[0.993431,0.263678],[0.994248,0.253439],[0.994248,0.0484834],[0.993431,0.0382446],[0.991418,0.0320941],[0.988066,0.0233957],[0.983203,0.0172682],[0.977574,0.0109888],[0.969768,0.0064047],[0.519708,-0.206271],[0.512106,-0.209618],[0.503642,-0.212634],[0.495228,-0.21306],[0.491403,-0.212867],[0.49031,-0.215976],[0.484162,-0.222591],[0.475554,-0.225323],[0.464488,-0.224174],[0.450962,-0.219142],[0.0201954,-0.0155833],[0.00666955,-0.00783169],[-0.00439703,0.00147784],[-0.0130044,0.0123453],[-0.0191525,0.0247706],[-0.0228414,0.0387537],[-0.0240709,0.0542948],[-0.0240709,0.247628],[-0.0228414,0.262007],[-0.0191525,0.272504],[-0.0130044,0.279118],[-0.00439703,0.281851],[0.00431073,0.280946],[0.00725386,0.284654],[0.0128824,0.290934],[0.0206889,0.295518],[0.0822513,0.324609],[0.0864306,0.333286],[0.0923137,0.339998],[0.101672,0.349856],[0.109314,0.354562],[0.119272,0.35938],[0.126314,0.361933],[0.134514,0.363538],[0.143314,0.364086],[0.152114,0.363538],[0.160314,0.361933],[0.160835,0.361744],[0.451548,0.499121],[0.451548,0.607657],[0.432189,0.612627],[0.408369,0.622058],[0.38592,0.6344],[0.365194,0.649458],[0.346519,0.666995],[0.330189,0.686735],[0.316462,0.708365],[0.305554,0.731546],[0.297637,0.75591],[0.292837,0.781075],[0.291228,0.806643],[0.292837,0.832211],[0.297637,0.857376],[0.305554,0.88174],[0.316462,0.904921],[0.330189,0.926551],[0.346519,0.946291],[0.365194,0.963828],[0.38592,0.978886],[0.408369,0.991228],[0.432189,1.00066],[0.457002,1.00703],[0.482419,1.01024],[0.508038,1.01024],[0.533454,1.00703],[0.558268,1.00066],[0.582087,0.991228],[0.604537,0.978886],[0.625263,0.963828],[0.643938,0.946291],[0.660268,0.926551],[0.673995,0.904921],[0.684903,0.88174],[0.692819,0.857376]],
10 | "inputs": [[0.2244,0.81,172.5],[0.233791,0.88133,165],[0.261323,0.9478,150],[0.305121,1.00488,135],[0.3622,1.04868,120],[0.428669,1.07621,105],[0.5,1.0856,90],[0.571331,1.07621,75],[0.6378,1.04868,60],[0.694879,1.00488,45],[0.738677,0.9478,30],[0.766209,0.88133,15],[0.7756,0.81,7.50006]],
11 | "outputs": [[0.0168,-0.108,234.434],[0.0757422,-0.150146,237.662],[0.145403,-0.189419,243.889],[0.224675,-0.223144,250.292],[0.311794,-0.249022,256.807],[0.404461,-0.26529,263.388],[0.5,-0.270838,270],[0.595539,-0.26529,276.612],[0.688206,-0.249022,283.193],[0.775325,-0.223144,289.708],[0.854597,-0.189419,296.111],[0.924258,-0.150146,302.338],[0.9832,-0.108,305.566]],
12 | "icon": [[0.3738,0.6738],[0.6262,0.9262]]
13 | }
--------------------------------------------------------------------------------
/scripts/python/deprecated/easecontrol/flip.py:
--------------------------------------------------------------------------------
1 | import hou
2 | #lerps courtesy of https://gist.github.com/laundmo/b224b1f4c8ef6ca5fe47e132c8deab56
3 | def lerp(a: float, b: float, t: float) -> float:
4 | """Linear interpolate on the scale given by a to b, using t as the point on that scale.
5 | Examples
6 | --------
7 | 50 == lerp(0, 100, 0.5)
8 | 4.2 == lerp(1, 5, 0.8)
9 | """
10 | return (1 - t) * a + t * b
11 |
12 | def inv_lerp(a: float, b: float, v: float) -> float:
13 | """Inverse Linar Interpolation, get the fraction between a and b on which v resides.
14 | Examples
15 | --------
16 | 0.5 == inv_lerp(0, 100, 50)
17 | 0.8 == inv_lerp(1, 5, 4.2)
18 | """
19 | return (v - a) / (b - a)
20 |
21 | def remap(i_min: float, i_max: float, o_min: float, o_max: float, v: float) -> float:
22 | """Remap values from one linear scale to another, a combination of lerp and inv_lerp.
23 | i_min and i_max are the scale on which the original value resides,
24 | o_min and o_max are the scale to which it should be mapped.
25 | Examples
26 | --------
27 | 45 == remap(0, 100, 40, 50, 50)
28 | 6.2 == remap(1, 5, 3, 7, 4.2)
29 | """
30 | return lerp(o_min, o_max, inv_lerp(i_min, i_max, v))
31 |
32 | def flipX():
33 | print('--------')
34 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
35 | keyframes = pane_tab.graph().selectedKeyframes()
36 |
37 | pb = hou.playbar.playbackRange()
38 | dur = pb[1]-pb[0]+1
39 |
40 | flipped = []
41 | base_keys = []
42 | val = []
43 |
44 | for parm in keyframes.keys():
45 | for key in keyframes[parm]:
46 | flipped.append(key)
47 | base_keys.append(key)
48 | val.append(key.value())
49 |
50 | parm.deleteAllKeyframes()
51 |
52 | #find min and max
53 | k_min = 0.0
54 | k_max = 0.0
55 | for key in base_keys:
56 | test_val = key.value()
57 | if test_val > k_max:
58 | k_max = test_val
59 | elif test_val < k_min:
60 | k_min = test_val
61 |
62 | # print("Min: ", k_min, ". Max: ", k_max)
63 |
64 | kl = len(flipped)-1
65 |
66 | for parm in keyframes.keys():
67 |
68 | endKey = hou.Keyframe()
69 | endKey.setFrame(dur)
70 | parm.setKeyframe(endKey)
71 |
72 | for index in range(len(base_keys)):
73 |
74 | # New keyframe from unflipped set. This is BASE
75 | newKey = base_keys[index]
76 |
77 | #v = val[kl-index]
78 |
79 | # Set value
80 | l_val = remap(k_min, k_max, k_max, k_min, newKey.value())
81 | newKey.setValue(l_val)
82 |
83 | # Set ease
84 | newKey.setSlope(newKey.slope() * -1)
85 |
86 | parm.setKeyframe(newKey)
87 |
88 | parm.deleteKeyframeAtFrame(dur)
89 |
90 |
91 | # Y flip script starts here
92 | def flipY():
93 | print('--------')
94 | pane_tab = hou.ui.paneTabOfType(hou.paneTabType.ChannelEditor)
95 | keyframes = pane_tab.graph().selectedKeyframes()
96 |
97 | pb = hou.playbar.playbackRange()
98 | dur = pb[1]-pb[0]+1
99 |
100 | flipped = []
101 | base_keys = []
102 | val = []
103 |
104 | for parm in keyframes.keys():
105 | for key in keyframes[parm]:
106 | flipped.append(key)
107 | base_keys.append(key)
108 | val.append(key.frame())
109 |
110 | parm.deleteAllKeyframes()
111 | #find min and max
112 | k_min = 0.0
113 | k_max = 0.0
114 | for key in base_keys:
115 | test_val = key.frame()
116 | if test_val > k_max:
117 | k_max = test_val
118 | elif test_val < k_min:
119 | k_min = test_val
120 |
121 | flipped.reverse()
122 |
123 | kl = len(flipped)-1
124 |
125 | for parm in keyframes.keys():
126 |
127 | endKey = hou.Keyframe()
128 | endKey.setFrame(dur)
129 | parm.setKeyframe(endKey)
130 |
131 | for index in range(len(base_keys)):
132 |
133 | # New keyframe from unflipped set. This is BASE
134 | newKey = base_keys[index]
135 |
136 | # Remap frame number
137 | l_frame = remap(k_min, k_max, k_max, k_min, newKey.frame())
138 | l_frame += 1
139 | #print("Frame:", index, "- F:", l_frame)
140 |
141 | # Set time
142 | newKey.setFrame(l_frame)
143 |
144 | # Sort out the easeing mess
145 | if index == 0 or index == kl:
146 | print('start or end frame')
147 |
148 | else:
149 | print("middle frame")
150 | # Flip the accel
151 |
152 | in_accel = newKey.inAccel()
153 | accel = newKey.accel()
154 | newKey.setInAccel(accel)
155 | newKey.setAccel(in_accel)
156 |
157 | # Flip the slope
158 | print("auto key: ", newKey.isAccelInterpretedAsRatio())
159 | if newKey.isSlopeTied() == False:
160 | in_slope = newKey.inSlope()
161 | slope = newKey.slope()
162 | newKey.setInSlope(slope*-1)
163 | newKey.setSlope(in_slope*-1)
164 | parm.setKeyframe(newKey)
165 | else:
166 | newKey.setSlope(newKey.slope()*-1)
167 |
168 |
169 |
170 | parm.setKeyframe(newKey)
171 |
172 | parm.deleteKeyframeAtFrame(dur)
--------------------------------------------------------------------------------
/toolbar/LV_Dev.shelf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
61 |
62 |
63 |
64 |
102 |
103 |
104 |
105 |
109 |
110 |
111 |
112 |
118 |
119 |
120 |
121 |
126 |
127 |
128 |
129 |
134 |
135 |
136 |
137 |
140 |
141 |
142 |
143 |
176 |
177 |
178 |
179 |
183 |
184 |
185 |
--------------------------------------------------------------------------------
/scripts/python/lvnodeutils/lvnodeutils.py:
--------------------------------------------------------------------------------
1 | from hutil.PySide import QtWidgets, QtUiTools, QtCore, QtGui # type: ignore
2 | from hutil.PySide.QtWidgets import QPushButton, QComboBox, QTableWidget, QTableWidgetItem # type: ignore
3 | import hou
4 |
5 | import os
6 | import json
7 | from importlib import reload # type: ignore
8 |
9 | import LVParmUtils
10 | reload(LVParmUtils)
11 |
12 | global direction
13 | direction = 1
14 |
15 | global loads
16 |
17 |
18 | class lvnodeutils(QtWidgets.QWidget):
19 | def __init__(self):
20 | super().__init__()
21 | self.folderpath = hou.getenv("LV") + "/scripts/python/lvnodeutils"
22 | ui_file_path = self.folderpath + "/lvnodeutils.ui"
23 |
24 | loader = QtUiTools.QUiLoader()
25 | self.ui = loader.load(ui_file_path)
26 |
27 | # create initial
28 |
29 | global btnLayout
30 | global btnLayout2
31 | global hori
32 | global nodeLabel
33 |
34 | hori = self.ui.findChild(QtWidgets.QPushButton, "hori")
35 | hori.setIcon(hou.qt.Icon('BUTTONS_collapse_left'))
36 | hori.setText('Collapse')
37 | hori.clicked.connect(self.setDir)
38 | hori.setMinimumWidth(3)
39 |
40 | btnLayout = self.ui.findChild(QtWidgets.QWidget, "vlayout").layout()
41 | nodeLabel = self.ui.findChild(QtWidgets.QLabel, "nodeLabel")
42 | # nodeLabel.hide()
43 |
44 | layout = QtWidgets.QVBoxLayout()
45 | layout.setContentsMargins(0, 0, 0, 0)
46 |
47 | layout.addWidget(self.ui)
48 | self.setLayout(layout)
49 |
50 | self.load_json()
51 |
52 | self.initBtns()
53 |
54 | def load_json(self):
55 | global loads
56 | file_path = self.folderpath + "/commands.json"
57 | if os.path.exists(file_path):
58 | with open(file_path, 'r') as f:
59 | loads = json.load(f)
60 | else:
61 | with open(file_path, 'w') as f:
62 | loads = {}
63 | json.dump(loads, f)
64 |
65 | def initBtns(self):
66 | global btns
67 |
68 | btns = []
69 |
70 | # adding one million buttons here
71 |
72 | # attribwrangle
73 | addFloatParm = (QPushButton(hou.qt.Icon('DATATYPES_parameter'), "Add Float Parm"), "attribwrangle", "Add Float Parm")
74 | addFloatParm[0].clicked.connect(lambda: LVParmUtils.addFloatParm(kwargs={"parms": (currentNode.parm("snippet"),)}))
75 | btns.append(addFloatParm)
76 |
77 | addChramp = (QPushButton(hou.qt.Icon('COP2_ramp'), "Add Float Ramp Parm"), "attribwrangle", "Add Float Ramp Parm")
78 | addChramp[0].clicked.connect(lambda: LVParmUtils.addChramp(kwargs={"parms": (currentNode.parm("snippet"),)}))
79 | btns.append(addChramp)
80 |
81 | cleanParms = (QPushButton(hou.qt.Icon('ENGINE_clean_temp'), "Remove Unused Parms"), "attribwrangle", "Remove Unused Parms")
82 | cleanParms[0].clicked.connect(lambda: LVParmUtils.cleanParms(kwargs={"parms": (currentNode.parm("snippet"),)}))
83 | btns.append(cleanParms)
84 |
85 | # xform
86 | pivotFromSpare = (QPushButton(hou.qt.Icon('BUTTONS_chooser_node'), "Pivot From Spare Input"), "xform", "Pivot From Spare Input")
87 | pivotFromSpare[0].clicked.connect(lambda: LVParmUtils.pivotFromSpare(kwargs={"node": currentNode}))
88 | btns.append(pivotFromSpare)
89 |
90 | # timeshift
91 | # offsetByAttribute = (QPushButton(hou.qt.Icon('BUTTONS_chooser_node'), "Offset by Spare Input"), "timeshift", "Offset by Spare Input")
92 | # offsetByAttribute[0].clicked.connect(lambda: LVParmUtils.offsetByAttribute(kwargs={"node": currentNode}))
93 | # btns.append(offsetByAttribute)
94 |
95 | for btn in btns:
96 | btnLayout.addWidget(btn[0])
97 | btn[0].hide()
98 | btn[0].setToolTip(btn[2])
99 | btn[0].setStyleSheet("text-align: left;")
100 |
101 | spacer = QtWidgets.QSpacerItem(0, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
102 | btnLayout.addItem(spacer)
103 |
104 | def getFirst(self, s):
105 | return ''.join([word[0].upper() for word in s.split()])
106 |
107 | def setDir(self):
108 | global direction
109 | d = direction
110 | direction = 0 if direction else 1
111 | if direction == 0:
112 | hori.setText('')
113 | hori.setIcon(hou.qt.Icon('BUTTONS_expand_right'))
114 | else:
115 | hori.setText('Collapse')
116 | hori.setIcon(hou.qt.Icon('BUTTONS_collapse_left'))
117 | for btn in btns:
118 | if direction == 1:
119 | hide = btn[0].isHidden()
120 | btn[0].setText(btn[2])
121 | btn[0].setToolTip(btn[2])
122 | else:
123 | btn[0].setText(self.getFirst(btn[2]))
124 | btn[0].setToolTip(btn[2])
125 | # btn[0].setStyleSheet("text-align: left; padding-left: 6px; padding-right: 6px")
126 | # h = hori.height()
127 | # btn[0].setFixedSize(h, h)
128 | # hori.setFixedSize(h, h)
129 | # hori.setStyleSheet("text-align: left; padding-left: 6px; padding-right: 6px")
130 |
131 | btn[0].setToolTip(btn[0].text())
132 |
133 | def getNode(self, node):
134 | self.buildUI(node)
135 |
136 | def buildUI(self, node):
137 | global currentNode
138 |
139 | currentNode = node
140 | selector = node.type().name()
141 | for btn in btns:
142 | condition = btn[1]
143 | widget = btn[0]
144 | if not selector == condition:
145 | widget.hide()
146 | else:
147 | widget.show()
148 |
149 | nodeLabel.setText(selector)
150 |
--------------------------------------------------------------------------------