It's pretty straightforward. You just add new shell in houdini and save it to a new file.When you adding new tools, just save them to a newly created shelf file, NOT the default.shelf.
That's it. Now you can share this file. It must be either in $HOME/houdiniXX/toolbar or somewhere in HOUDINI_PATH.
Found 180 posts.
Search results Show results as topic list.
Technical Discussion » Sharing a single Shelf ?
- Stalkerx777
- 183 posts
- Offline
Houdini Lounge » Saving and loading keyframe animation
- Stalkerx777
- 183 posts
- Offline
Transferring keyframe animation is very easy, but requires you to write a little bit of python.
Basically you need to loop over your parameters, and if it has a keyframe, call hou.Parm.asCode() on it.
http://www.sidefx.com/docs/houdini13.0/hom/hou/Parm#asCode [sidefx.com]
You can write more sophisticated import/export logic with this function, as it provide you a couple of handful arguments (such as function_name argument)
Basically you need to loop over your parameters, and if it has a keyframe, call hou.Parm.asCode() on it.
http://www.sidefx.com/docs/houdini13.0/hom/hou/Parm#asCode [sidefx.com]
You can write more sophisticated import/export logic with this function, as it provide you a couple of handful arguments (such as function_name argument)
Technical Discussion » houdini to unreal engine 4. how to export vertex colors
- Stalkerx777
- 183 posts
- Offline
OBJ format specification doesn't support vertex colors. Zbrush uses some hacks in their exporter (they write vertex colors in comment strings)
Some packages can read this data, some don't
Some packages can read this data, some don't
Technical Discussion » Python Panel - how to catch application close event.
- Stalkerx777
- 183 posts
- Offline
rvinluan
Hello,
Starting in tomorrow's build, the __del__ function will get called when the Python Panel is closed/destroyed.
We are still looking into hooking up __del__ so that it also gets called when the Houdini application exits/quits.
Cheers,
Rob
Hi Rob,
Currently, hideEvent is working like it should, why not make closeEvent working? __del__ should be good for now, but closeEvent should also work.
Anyway, thanks, at least we'll be able to save data
Technical Discussion » Python Panel - how to catch application close event.
- Stalkerx777
- 183 posts
- Offline
Hi Edward,
Yes, atexit works if registering a function from python shell or hou.session.
Doing so in python panel didn't work.
from PySide.QtGui import *
import logging
import atexit
class My(QFrame):
def __init__(self, logger):
super(My, self).__init__()
self.logger = logger
@atexit.register
def _exit(self):
self.logger.debug('In _exit')
def createInterface():
h = logging.FileHandler(filename=r'c:\temp\testhoudini_event.log')
logger = logging.getLogger('test')
logger.addHandler(h)
logger.setLevel(logging.DEBUG)
widget = My(logger)
return widget
I'll try to install my custom event to QApplication, but this this a dirty hack…
Yes, atexit works if registering a function from python shell or hou.session.
Doing so in python panel didn't work.
from PySide.QtGui import *
import logging
import atexit
class My(QFrame):
def __init__(self, logger):
super(My, self).__init__()
self.logger = logger
@atexit.register
def _exit(self):
self.logger.debug('In _exit')
def createInterface():
h = logging.FileHandler(filename=r'c:\temp\testhoudini_event.log')
logger = logging.getLogger('test')
logger.addHandler(h)
logger.setLevel(logging.DEBUG)
widget = My(logger)
return widget
I'll try to install my custom event to QApplication, but this this a dirty hack…
Technical Discussion » Python Panel - how to catch application close event.
- Stalkerx777
- 183 posts
- Offline
Hi. I need to perform some actions in my Python Panel when houdini is exiting, and i can't catch this event.
1. closeEvent() is not called.
2. __del__() method is not called.
3. QApplication aboutToQuit signal is not emited.
Could you please tell me, how can i catch this event ?
from PySide.QtGui import *
import logging
class My(QFrame):
def __init__(self, logger):
super(My, self).__init__()
self.logger = logger
QApplication.instance().aboutToQuit.connect(self._app_quit)
def __del__(self):
self.logger.debug('In __del__')
def closeEvent(self, event):
self.logger.debug('In closeEvent')
self.close()
def _app_quit(self):
self.logger.debug('aboutToQuit signal')
def createInterface():
h = logging.FileHandler(filename=r'c:\temp\testhoudini_event.log')
logger = logging.getLogger('test')
logger.addHandler(h)
logger.setLevel(logging.DEBUG)
widget = My(logger)
return widget
1. closeEvent() is not called.
2. __del__() method is not called.
3. QApplication aboutToQuit signal is not emited.
Could you please tell me, how can i catch this event ?
from PySide.QtGui import *
import logging
class My(QFrame):
def __init__(self, logger):
super(My, self).__init__()
self.logger = logger
QApplication.instance().aboutToQuit.connect(self._app_quit)
def __del__(self):
self.logger.debug('In __del__')
def closeEvent(self, event):
self.logger.debug('In closeEvent')
self.close()
def _app_quit(self):
self.logger.debug('aboutToQuit signal')
def createInterface():
h = logging.FileHandler(filename=r'c:\temp\testhoudini_event.log')
logger = logging.getLogger('test')
logger.addHandler(h)
logger.setLevel(logging.DEBUG)
widget = My(logger)
return widget
Houdini Lounge » Why SESI doing this?
- Stalkerx777
- 183 posts
- Offline
Thx for replies guys. I understand your point of view. Assuming this tool is a proof of concepts, it's good to have implemented in nodes, it's very good source of knowledge inside I hope it will get more attention in future release.
Houdini Lounge » Why SESI doing this?
- Stalkerx777
- 183 posts
- Offline
Many years ago i was sure that making HDA is the only right way of doing tools and “black box” operators is evil and should be avoided. I thought: “Oh, this thing is definitely should be HDA, because one may want to unlock it and tweak!”. Guess what? They don't.
HDA is amazing, we have a tons of hda-based tools, but not for interactive work.
Simple scene with torus and a couple of shelf tools click (Draw Hair->Plant Guides->Draw Hair->Clump Hair) will result in 1500+ nodes and almost unusable performance!
len(hou.node('/obj/torus_object1_hair/guides').recursiveGlob('*'))
Hair grooming is such a creative work, and unfortunately current implementation is very very slow.
An example of interactive grooming is maya yetti plugin [youtu.be]
HDA is amazing, we have a tons of hda-based tools, but not for interactive work.
Simple scene with torus and a couple of shelf tools click (Draw Hair->Plant Guides->Draw Hair->Clump Hair) will result in 1500+ nodes and almost unusable performance!
len(hou.node('/obj/torus_object1_hair/guides').recursiveGlob('*'))
Hair grooming is such a creative work, and unfortunately current implementation is very very slow.
An example of interactive grooming is maya yetti plugin [youtu.be]
Stalkerx777: Can you post some like-for-like comparison stats please. fps, amount of hair groomed - better yet - a screen recording SmileI'm not promising, but i'l try to make a little screencast.
Edited by - Feb. 17, 2015 15:05:18
Houdini Lounge » Why SESI doing this?
- Stalkerx777
- 183 posts
- Offline
Ok, here is a deal. We all love procedural approach of doing things, we love openness and flexibility of houdini tools. But there are class of tools that shouldn't be build this way. I'm talking about H14 new grooming tools, Curve Groom sop in particular. This asset contains 200+ operators, including foreach sop! It slow as hell on production level character. My question is - why? I doubt that this asset intended to be modified, especially by artist, they really don't care whats inside. From my point of view - this tool is solely for artists, and it should be reliable and fast. At my studio we wrote this kind of tool in HDK and it's blazing fast on thousands of curves!
So, how decisions are made at SESI? Why such a performance critical tool is made of 200+ nodes? :roll:
So, how decisions are made at SESI? Why such a performance critical tool is made of 200+ nodes? :roll:
Technical Discussion » Stretch Tool
- Stalkerx777
- 183 posts
- Offline
Houdini Lounge » Introducing sQuery - a jQuery-like library for Houdini
- Stalkerx777
- 183 posts
- Offline
Technical Discussion » How to copy geometry in python?
- Stalkerx777
- 183 posts
- Offline
Technical Discussion » Pixel Based Shading?
- Stalkerx777
- 183 posts
- Offline
Renderman has Image Shader [renderman.pixar.com], witch can manipulate pixels value, but Mantra doesn't. Mantra have fog shader, where some sort “post-processing” is possible, but it's not the same as PRman Image Shader.
You could try to do this in COPS.
You could try to do this in COPS.
Technical Discussion » How to copy geometry in python?
- Stalkerx777
- 183 posts
- Offline
In Python SOP:
this_geo = node.geometry()
source_geo = get_geometry_somewhere()
for i in range(10):
new_geo = hou.Geometry()
new_geo.merge(source_geo)
# Do something with new_geo
this_geo.merge(new_geo)
this_geo = node.geometry()
source_geo = get_geometry_somewhere()
for i in range(10):
new_geo = hou.Geometry()
new_geo.merge(source_geo)
# Do something with new_geo
this_geo.merge(new_geo)
Technical Discussion » Some Qt questions
- Stalkerx777
- 183 posts
- Offline
tpetrick
Alexey,
Can you try adding the following method to your Python Panel script:
def dragEnterEvent(self, event):
event.acceptProposedAction()
That block of code was needed to make the example work on my machine. Also, which platform are you currently using? I'm working through some drag and drop bugs on OS X so if you're on the platform drag and drop may not work as expected.
Yes, it works! Although there are some problems:
1. There are drop areas in python panel, where “Drop Actions” popup occurs (occasionally)
2. How one knows what was dropped(node, parm, text)? Currently, mimeType of any drops from houdini is ‘text-plain’
I'll submit #1 as a bug.
Cheers,
Alexey.
Technical Discussion » [H14 PySide] Simple custom UI not showing.
- Stalkerx777
- 183 posts
- Offline
koen
Could it be that one the pressButton is done, ui falls out of scope and is deleted?
Can you try this:
ui = None
def pressButton():
global ui = HelloWorld()
ui.show()
pressButton()
Cheers,
Koen
You can't use global in assignment operation, only in declaration.
This should work:
ui = None
def pressButton():
global ui
ui = HelloWorld()
ui.show()
Technical Discussion » Some Qt questions
- Stalkerx777
- 183 posts
- Offline
Hello Rob,
According to journals, drag&drop was fixed, but i can't get it to work in 220 build.
from PySide.QtGui import *
class My(QWidget):
def __init__(self):
super(My, self).__init__()
self.setAcceptDrops(True)
def dropEvent(self, event):
print event
urls = event.mimeData().urls()
file = urls.toLocalFile()
event.acceptProposedAction()
def wheelEvent(self, event):
print event.delta()
event.accept()
def createInterface():
return My()
Also problem with colors from my previous post, still exists.
Thanks for your effort and quick response, you guys doing amazing job!
Alexey.
According to journals, drag&drop was fixed, but i can't get it to work in 220 build.
from PySide.QtGui import *
class My(QWidget):
def __init__(self):
super(My, self).__init__()
self.setAcceptDrops(True)
def dropEvent(self, event):
print event
urls = event.mimeData().urls()
file = urls.toLocalFile()
event.acceptProposedAction()
def wheelEvent(self, event):
print event.delta()
event.accept()
def createInterface():
return My()
Also problem with colors from my previous post, still exists.
Thanks for your effort and quick response, you guys doing amazing job!
Alexey.
Technical Discussion » Some Qt questions
- Stalkerx777
- 183 posts
- Offline
rvinluan
Hello,Stalkerx777
- Colors of widgets look weird (problem with QStyle?)
Hmm. I don't think I'm seeing this.
Which widgets look weird? Can you attach a screenshot? Or post a script example?
Rob
Hello Rob, please take a look at those screenshot and simple code example. Background color is wrong, also QTextEdit is black. And QGroupBox title is invisible:
from PySide.QtGui import *
class Grp(QGroupBox):
def __init__(self, n):
super(Grp, self).__init__()
self.setTitle(“Group_%d” % n)
vl = QVBoxLayout()
vl.addWidget(QPushButton(“Button_%d” % n))
vl.addWidget(QComboBox())
vl.addWidget(QTextEdit())
self.setLayout(vl)
def createInterface():
w = QWidget()
l = QGridLayout()
for i in range(2):
for j in range(2):
l.addWidget(Grp(i*2), i, j)
w.setLayout(l)
return w
Technical Discussion » Some Qt questions
- Stalkerx777
- 183 posts
- Offline
SESI, please give us some details on Qt implementation.
- QFont not working.Can't change font size on widgets. setStyleSheet not working.
- Colors of widgets look weird (problem with QStyle?)
- dropEvent for houdini operators doesn't work.
- QFont not working.Can't change font size on widgets. setStyleSheet not working.
- Colors of widgets look weird (problem with QStyle?)
- dropEvent for houdini operators doesn't work.
Technical Discussion » Retina support in H14?
- Stalkerx777
- 183 posts
- Offline
It seems like it's not working as it should, although H14 looks much better on Macbook Pro Retina than H13.
-
- Quick Links