Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by asnowcappedromance

  1. Mixing animations from Mixamo.com

    Hey man, Thanks a lot for the detailed screenshot, I'll have a play first thing tomorrow! Kinda off topic, how are you liking those Ryzens? Better than Xeon or I7? Cheers!!! Edit: I rebuilt your setup and it works like a charm, thanks a lot for pointing me towards the right direction!!
  2. Mixing animations from Mixamo.com

    Hey what's up guys? I discovered this amazing website https://www.mixamo.com/ where you can download free animated characters as .fbx files. Because the animations clips in Mixamo are pretty short, I'd like to combine several animations in order to get a longer sequence, but I have no idea how to approach this. The FBX comes in with a bone hierarchy, as well as a Geometry OBJ which contains a locked file SOP connected to a locked Bone Capture SOP, which is then connected to a Capture Override SOP which again is connected to a Bone Deform SOP. I assume that this is pretty standard. So if I now import a second animation, I get a new OBJ containing the same Bone OBJ hierarchy but with a different animation. What is the approach to blend the 2 different animations together? And how would I offset such an animation? In CHOPs? Again, this is not my comfort zone in Houdini, I'd appreciate some pointers on how to get this done! Thanks, Manu
  3. Houdini, Algorithms and Python

    Haven't posted my work here in a long time, but here's a hip file in which I used Python to implement the divide and conquer closest pair of points algorithm. Obviously not nearly as fast as a pcopen lookup, but I wanted to learn about the divide and conquer paradigm and had a lot of fun figuring it out! Code runs in O(n*log(n)) time, as explained in the following video: Enjoy! Comments are always welcome And no, I don't script in C++, no need to tell me that it's faster divide_conquer_find_closest.hipnc
  4. Houdini, Algorithms and Python

    Hey what's up community? In order to keep this thread alive, although I'm hardly ever posting, here's my latest and greatest Python project! Would be awesome to get some feedback on this, cheers!
  5. OTL hotkey problem, help?

    Hi guys, I'm trying to assign a hotkey to the tool section of a script OTL and can't get it to work. Script is located in 'Type properties > Tools'. parameters on the Options Tab are defaults: Name - $HDA_DEFAULT_TOOL LABEL - $HDA_LABEL Then I go to the Hotkeys tab, hit 'Edit' (Global), then the Hotkey Manager pops up and the 'Action' column is selecting 'HDA_LABEL' by default. Now when I assing a hotkey to this, I'm getting the following error pop-up on execution of the hotkey: 'Cannot find the tool $HDA_DEFAULT_TOOL.' Does anybody know how to fix this / what's going on? Thanks a lot, Manu
  6. Houdini, Algorithms and Python

    No Of course Linux does have copy/paste What I wanted to do is store strings that are created by Python into the clipboard, that's not possible without using modules in Python. Using PySide/PyQt, not only can you store strings, you can also store images as well as Mime data, which can be quite helpful!
  7. Houdini, Algorithms and Python

    Here's an interesting snippet I came up with the other day. If you want to copy/paste stuff with Python, but you're working on Linux and 'xsel' is not installed on your system, you can abuse PySide to access the clipboard. Following code takes the path of a selected node and copies it into the clipboard, so you can paste it with ctrl-v: if hou.selectedNodes(): import PySide.QtGui as qtg app = qtg.QApplication.instance() clipboard = app.clipboard() string = hou.selectedNodes()[0].path() clipboard.setText(string)
  8. Hi guys, This has boggled my mind for a while now. I have a OTL that has a tool script attached to it (Type Properties > Tool section), that evokes a PySide interface. The problem is that when I run the tool a few times, every single time a new instance of the interface is being opened, while the old one is still alive. So I'm ending up with lots of open windows of the same tool after a while which is super annoying. How can I prevent this from happening? I want to have only one single instance running at a time, basically close the old window if the tool is run again. Here's a really simple example that we could use as a test case. (Same problem if I run it as a shelf tool) from PySide import QtGui, QtCore class Window(QtGui.QWidget): """Simple Test""" def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("test") self.home() def home(self): btn = QtGui.QPushButton("Test Button") a_label = QtGui.QLabel("Test Label") qvbox = QtGui.QVBoxLayout() qvbox.addWidget(btn) qvbox.addWidget(a_label) qvbox.insertStretch(2) self.setLayout(qvbox) def run(self): self.show() main = Window() main.run() Some where I read that using the QEventLoop might help to detect running instances with hou.ui.eventLoopCallbacks(), but after trying some stuff for a few hours, I'm at my wits end. Help here would be much appreciated Thanks!!!
  9. Pyside - Prevent multiple instances of application from running

    To answer my own question: for entry in QtGui.qApp.allWidgets(): if type(entry).__name__ == 'Window': entry.close()
  10. Can a Null Contain Attributes?

    You can look up the incoming geometry the following way: hou.node('/obj/geo1/null1').inputs()[0].geometry()
  11. Houdini, Algorithms and Python

    No problem. Go to a houdini shelf, right click and click "new tool". Give your new tool a name, i.e. colorLab. Paste the following code in the script section: import os #Add dynamic path to houdini home folder BASE_PATH = hou.hscriptExpression("$HOME").replace("/", "\\") PY_PATH = "".join([BASE_PATH,"\houdini14.0", "\scripts\ColorLab_v1.0.py"]) execfile(PY_PATH) If you're using Houdini 15, change the 14 to 15 in the above code. Then go to your Documents/houdini folder and create a 'scripts' folder. Place the following files in that scripts folder: color_config.json ColorLab_v1.0.py OnCreated.py That's it You can add an icon too if you want. (Options tab of the shelf tool)
  12. Rename label in multiparm list.

    >>> n = hou.node('/obj/geo2/null2') >>> ptg = n.parmTemplateGroup() >>> for i in ptg.entries(): ... print i ... <hou.ToggleParmTemplate name='copyinput' label='Copy Input' default_value=True> <hou.ToggleParmTemplate name='cacheinput' label='Cache Input' default_value=False> <hou.FolderParmTemplate name='folder0' label='Folder Name' folder_type=MultiparmBlock> >>> ptg.find("folder0") <hou.FolderParmTemplate name='folder0' label='Folder Name' folder_type=MultiparmBlock> >>> f = ptg.find("folder0") >>> f.parmTemplates()[0] <hou.FloatParmTemplate name='parm#' label='Label' length=1 naming_scheme=Base1 look=Regular default_value=(0,)> >>> me = f.parmTemplates()[0] >>> me.setName("newTest#") >>> me <hou.FloatParmTemplate name='newTest#' label='Label' length=1 naming_scheme=Base1 look=Regular default_value=(0,)> >>> f.setParmTemplates((me,)) >>> ptg.replace("folder0", f) >>> n.setParmTemplateGroup(ptg) >>> In order to change the name of the parm using Python, you'll have to use parmTemplates. This is a way to do it. For some reason, a Multiparmblock can't be found via parmTemplateGroup().findFolder(), but you can access it with just find().
  13. Rename label in multiparm list.

    All you have to do is open the Edit Parameter Interface, select the parameter inside your Multiparm Block and rename the label with a '#' suffix, which will result in appending a number starting from 1 to your parm labels. Cheers, Manu
  14. Pyside Houdini Freeze

    Hi guys, I started to play around a bit with pyside in Houdini, but when I put the following script in a shelf tool, my Houdini just freezes. import sys import PySide from PySide import QtGui from PySide import QtCore from PySide.QtGui import QApplication, QPushButton from PySide.QtGui import QMessageBox app = QtGui.QApplication.instance() #wid = QtGui.QWidget() wid = QtGui.QLabel() wid.resize(250, 150) wid.setWindowTitle('Simple') wid.setText("hello Manu") wid.show() wid.activateWindow() app.exec_() #sys.exit( app.exec_() ) Any idea how to fix this? Thanks, Manu
  15. Pyside Houdini Freeze

    Hi Alexey, Thanks for the reply. The problem is that I think by default QWidgets in PySide Houdini already use the hou.ui.qtStyleSheet() because when I apply this in Houdini 15 to my QWidget, the look doesn't change either, there is no difference at all to the jpg that I posted before. Is your GUI look changing when you set the Style Sheet like that? Setting it to something like 'setStyleSheet("background-color: #00FF00; color: #FFFFFF")' makes a big difference on the other hand. Cheers!
  16. Pyside Houdini Freeze

    so I ran into another PySide problem ... Maybe one of you can enlighten me on what I'm doing wrong with this one? I'm trying to use the QtGui.setStyle() function in order to change the style of my GUI. Turns out, no matter what preset I use, it all looks the same. (Using Windows7). (Attached a screenshot) Here's the code I'm running in a shelf tool: from PySide import QtGui, QtCore class Window(QtGui.QWidget): """A setStyle() test""" def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQT tuts!") self.home() def customHandler(self, ErrorType, ErrorContext ): #print "Type:", ErrorType #print "error:", type(ErrorContext) pass def home(self): btn = QtGui.QPushButton("Test Button") styleChoice = QtGui.QLabel("Windows Vista") comboBox = QtGui.QComboBox() comboBox.addItem("motif") comboBox.addItem("Windows") comboBox.addItem("cde") comboBox.addItem("Plastique") comboBox.addItem("Cleanlooks") comboBox.addItem("windowsvista") comboBox.activated.connect(lambda: self.style_choice(comboBox, styleChoice)) QtCore.qInstallMsgHandler(self.customHandler) qvbox = QtGui.QVBoxLayout() qvbox.addWidget(btn) qvbox.addWidget(comboBox) qvbox.addWidget(styleChoice) self.setLayout(qvbox) def style_choice(self, comboBox, widget): cur_str = comboBox.currentText() widget.setText(cur_str) QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(cur_str)) def run(self): self.show() main = Window() main.run() Thanks a bunch! Cheers!
  17. Launch Houdini (with UI) and create geo nodes from Python script

    Have you had a look at Hython? Comes installed with Houdini. Example: in the shell: hython script.py script.py contents: import shutil #copy hip template into another directory newfile = ‘/path/to/my/hip/file/newhipfile.hip’ shutil.copy('/dir/file.hip', newfile) hou.hipFile.load(newfile) hou.node("/path/to/driver").pressButton()
  18. Houdini, Algorithms and Python

    Hi guys, Thanks for the feedback and glad you like it. I didn't use qtdesigner on purpose since I wanted to learn Pyside from scratch, as it helped me a lot to understand how it works. It's awesome that the tool works on Mac, too. As for linux, I tested the tool at work yesterday and it turns out I had to change the following: #Add dynamic path to houdini home folder BASE_PATH = hou.hscriptExpression("$HOME").replace("/", "\\") JSON_PATH = os.path.normpath("".join([BASE_PATH,"\houdini14.0", "\scripts\color_config.json"])) #Add dynamic path to houdini home folder BASE_PATH = hou.hscriptExpression("$HOME") JSON_PATH = os.path.normpath("".join([BASE_PATH,"/houdini14.0", "/scripts/color_config.json"])) One major issue that I ran into (and I'd be interested if somebody found a fix for this) is that the drag & drop ONLY works if I have a python panel open (not to be confused with the Python shell) and if I drag the node over this panel and then onto my tool. That's quite strange and I haven't found a foolproof way to do this yet. Suggestions are most welcome! Paul - See you soon in Vancouver!
  19. Houdini, Algorithms and Python

    I wanted to share my new project with the community, it's called the 'Node Color Laboratory'. Intended to be used as a shelf tool, this tool has been written in Python and PySide. I've seen a bunch of people using various ways to enforce color coding, however none of the approaches was using an interface, so I decided to build one to make organizing colors most intuitive. Here's the link to the vimeo file: Attached are the files you're going to need to run the tool, to be placed in the $HOME/houdini14.0/scripts folder. You will have to create a new shelf tool and paste the script found in the 'ColorLab_v1.0.py' file in there. This tool has been developed in Windows, I haven't had a chance yet to check if the same directory structures work in Linux/Max. Feedback always appreciated, cheers! colorLab.rar
  20. Pyside Houdini Freeze

    Nice!! Thanks for the reply!
  21. Pyside Houdini Freeze

    Good stuff Alexey! Starting to get a lot of things to work now with Pyside! Another issue I had was that I wasn't able to resize my fonts when running Pyside in Houdini/ Consider the following test: import PySide.QtGui as qtg import PySide.QtCore as qtc class myClassTest(qtg.QWidget): """A test class for a widget""" def __init__(self): app = qtg.QApplication.instance() cursor_pos = qtg.QCursor().pos() parent = app.topLevelAt(cursor_pos) qtg.QWidget.__init__(self, parent) self.setMinimumSize(500,500) self.setWindowTitle("this is a test") self.setWindowFlags(qtc.Qt.Window) self.header = qtg.QLabel("Hello World what's up:", self) self.header.move(10, 10) self.header.setFont( qtg.QFont( "Georgia", 140) ) def run(self): self.show() test =myClassTest() test.run() Any idea why the text is still displayed super small? No matter which value I put in there, the size always stays the same. Does this have anything to do with the Global Ui Size in the Houdini preferences? Thanks for you help!
  22. Houdini, Algorithms and Python

    Thanks guys! I actually didn't bother to try this in VEX since I would use a point cloud lookup for this anyway, limiting the search to only 2 points. The speed is hard to beat, since point clouds in Houdini are highly optimized. I did this in Python because I wanted to learn the concept of divide and conquer, which you then can apply to any programming language really! Since VEX has arrays, this would be totally doable, why don't you give it a go?
  23. Pyside Houdini Freeze

    Thanks, that totally works now!! I'm using H14 right now by the way. I also could get this cookbook example to work, where they don't use the QGuiApplication 'toplevelat' function, but instead wrap the code in a class: http://www.sidefx.com/docs/houdini14.0/hom/cookbook/qt/
  24. Pyside Houdini Freeze

    Hi Alexey, Thanks for your reply! If I remove app.exec_() and activateWindow() then the widget doesn't pop up anymore, my simple code looks like this now: ------------------------------------- import PySide from PySide import QtGui wid = QtGui.QLabel() wid.resize(250, 150) wid.setWindowTitle('Simple') wid.setText("hello Manu") wid.show() --------------------------------- Cheers, Manu
  25. pyro banding issue

    Hi guys, I thought maybe one of you can help me out here. I'm simulating some mid-scale fire and am getting these banding issues, both in the viewport and in the render (picture and .mp4 attached.) It looks like the fire is being cut into thin slices, which are static and DON'T move with the flames. Unfortunately I can't post the scene file, but I'll try to describe my setup as best as I can. First of all, source is static. Nothing to worry about. No crazy velocities go into the sim, in fact, this problem persists even if I set my fluid_source velocities to None. Bounding box scale is rather big, 166, 105, 210, voxel grid is [333, 210, 421] which is already quite a bit of resolution IMO. I'm using the pyro solver, max substeps set to 2 (I thought this would help get rid of this problem, but it didn't) and under Projection my Multigrid iterations are set to 3. Shape settings don't seem to be important regarding my banding problem, if I switch them all off, I still get the same artefacts. Advection type is Modiefied MacCormack, Advection Method is Trace. Buoyancy Lift is quite high, 120, but as you can see in the video the banding appears to be static, it's not moving with the fluid, so I don't think this is the problem. Any ideas? This is driving me nuts! Thanks, Manu pyro_flame_banding.mp4.rar