Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

Search the Community: Showing results for tags 'python'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • General
    • Lounge/General chat
    • Education
    • Jobs
  • Houdini
    • General Houdini Questions
    • Effects
    • Modeling
    • Animation & Rigging
    • Lighting & Rendering
    • Compositing
    • Games
  • Coders Corner
    • HDK : Houdini Development Kit
    • Scripting
    • Shaders
  • Art and Challenges
    • Finished Work
    • Work in Progress
    • VFX Challenge
    • Effects Challenge Archive
  • Systems and Other Applications
    • Other 3d Packages
    • Operating Systems
    • Hardware
    • Pipeline
  • od|force
    • Feedback, Suggestions, Bugs

Found 149 results

  1. When I start Houdini I recently get this error message in the Python console. Python 2.7.6 (default, Oct 26 2016, 20:33:43) [GCC 4.8.4] on linux2 Houdini 16.0.557 hou module imported. Type "help", "copyright", "credits" or "license" for more information. >>> ---------------------------------------- Exception happened during processing of request from ('', 40274) Traceback (most recent call last): File "/usr/lib/python2.7/SocketServer.py", line 593, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__ self.finish() File "/usr/lib/python2.7/SocketServer.py", line 710, in finish self.wfile.close() File "/usr/lib/python2.7/socket.py", line 279, in close self.flush() File "/usr/lib/python2.7/socket.py", line 303, in flush self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe ---------------------------------------- How can this be fixed?
  2. Hi, I am a very beginner of coding and looking for a custom save shell by python. This time, especially I'd like to ask for how to replace ".comment." part. Example file is "fx_dest_vocity_v051.04.comment.hip" and a procedure is : 1 - click shelf dock 2 - show a popUpWindow and type a comment 3 - click the popUpWindow, close it, and a script replaces "comment" part and new file name is saved, for example, "fx_dest_vocity_v051.04.vel2xfaster.hip" my best guess is; fileName = hou.hipFile.basename() ## for instance, file name is "fx_dest_vocity_v051.04.comment.hip" hou.ui.displayMessage("type comments", variable ) ## save comment hou.ui.displayMessage.close result = re.search( "([0-9]{2})\.???????\.hip", fileName ) ## get comment part newFileName = fileName.replace( result.group(1), variable ) hou.hipFile.save(newFileName) ## new file name "fx_dest_vocity_v051.04.vel2xfaster.hip" I know it's so many broken lines, so if someone helps to rewrite it, it would be great, thanks!
  3. Hi Everyone, Hope you are all well. We have not been using houdini long. We are long time soft users and we are testing out software to move too and see the strengths of them. Houdini is our first choice for the sheer scope of it, so we have started looking at this first. Anyways, explaination of the problem below. I am trying to script a "simple" saving function through a HDA via Python (I dont know if this is a correct way of doing it, so please If I am going in the wrong direction, shout) it will create a few folders based on some parameters in the HDA interface and save the file with the name specified. I am setting environment variables through this and using that to generate the path for the file save and also will hopefully re-use the Environment variables later for ROP output ETC for the scene. I am running into an error with what I believe is to do with the hou.hipFile.save function. I have not been coding for very long either so please bare with me if my Termanology is off also. I have attached some code snippets. I am basically trying to save the files to a structured job folder system. something like below. $JOB/scene/[WORKCATAGORY]/[SHOTFOLDER]/SHOTNAME.hipnc I have defined some functions in the Python Module in the HDA, and these are being called by the callback script on each parameter. It is really weird, It has worked once or twice. But then I try to save again and it does not work again. I did some debugging and the Error that houdini generates, it definately works when I take out the SHOTFOLDER in the string for the path to save to. If my file path is just saved in the WORKCATAGORY section it saves. My defined functions (sorry code is messy) def shotName(parm): hou.putenv("SHOTNAME", parm) test = parm print test def folderName(parm): fname = "NN_" + parm hou.putenv("FOLDERNAME", fname) test = fname print test def workCatagory(node, parm): a = hou.parm(parm.path()).eval() labelName = hou.parm(parm.path()).menuLabels()[a] testA = parm hou.putenv("WORKCATAGORY", labelName) print labelName def customSave(): #Pull in Enviroment Variables work = hou.getenv("WORKCATAGORY") shot = hou.getenv("SHOTNAME") folder = hou.getenv("FOLDERNAME") # Houdini save path FULL savePath = "$JOB/scene/" + work + "/" + folder + "/" + shot + ".hipnc" # Houdini save path with a job catagory but not job name folder #savePath = "$JOB/scene/" + work + "/" + shot + ".hipnc" exSavePath = hou.expandString(savePath) exSavePath = exSavePath.replace('//', '/') #hou.putenv("SAVEPATH", exSavePath ) hou.hipFile.save(exSavePath, False) print exSavePath the error it generates is Traceback (most recent call last): File "<stdin>", line 1, in <module> File "opdef:/Object/Northforge3_testa?PythonModule", line 40, in customSave File "C:/PROGRA~1/SIDEEF~1/HOUDIN~1.600/houdini/python2.7libs\houpythonportion.py", line 1287, in decorator return func(*args, **kwargs) File "C:/PROGRA~1/SIDEEF~1/HOUDIN~1.600/houdini/python2.7libs\hou.py", line 28330, in save return _hou.hipFile_save(*args, **kwargs) OperationFailed: The attempted operation failed. Error creating file: W:/Work/Development/D00026_Houdini_test/3.3d/D00026_Houdini_test_HOUDINI/scene/rend/NN_test/test.hipnc working enviroment is. Windows 10 Houdini Apprentice 16.0 saving to a NAS drive I hope some of that makes sense. Cheers
  4. Hi guys! Just want to share with you some of my experiments. huilib - is a simple python wrapper around houdini .ui language. It was written "just for fun", so no warranty if it works for you. But i think it's pretty usable for simple ui, in situation, when PyQt is not an option Maybe someday we'll see something similar from sesi Feel free to use it. https://bitbucket.org/alexxbb/huilib/overview
  5. Heya, I've written a little python expression to scale geo dependent on through which camera is being viewed. It works but does not recognise when the viewport has changed - is there an event trigger I can use to get it to recognise this change? import hou desktop = hou.ui.curDesktop() scene_viewer = desktop.paneTabOfType(hou.paneTabType.SceneViewer) viewport = scene_viewer.curViewport() camera = hou.GeometryViewport.camera(viewport) if 'preview' in str(camera): return 0.01 print 'preview cam' else: return 1
  6. Hello, one question please: What expression can I write to use the @ptnum attribute to drive the @P.y attribute using VEX or Python expressions. What if I want to drive @P.y with @P.x ?? thanks in advance.......
  7. Hi! I'm trying to find a way to read a config when a button is pressed, and update the available items in a menu parameter. I've tried a couple of methods, but haven't managed to get anything to work yet. First Attempt: target_menu_items = ["a", "b", "c"] menu_parm = node.parm("menu_parm") template = menu_parm.parmTemplate() template.setMenuItems(target_menu_items) The interface remains unchanged. Reading the docs that is understandable: So I tried what the docs recommended without any luck: ptg = node.parmTemplateGroup() menu_parm = node.parm("menu_parm") template = menu_parm.parmTemplate() template.setMenuItems(target_menu_items) ptg.replace("menu_parm", template) node.setParmTemplateGroup(ptg) I had some success by adding a line, but this isn't really a solution. template.setName("bahhumbug") I assume it's failing to replace the template if the name of the replacement template matches that of the existing one. I don't understand why that would be a problem though. I've had a thorough Google and can't find any examples of this... so I'm worried I'm approaching it the wrong way. Can anyone explain where I'm going wrong? Many many thanks in advance, Dan
  8. In the current tool I'm building for H16, I have a UI in which I would like to have different options available to the user depending on their selection. It would be ideal if these options can change without the user having to close and relaunch the UI every time. In short, I need a way to capture a signal emitted when the user selects node(s). I looked around the HOM and didn't see anything that looks like it gets called whenever a node is selected, just queries for currently selected nodes. Does anyone know how I could trigger something in my UI whenever the user selects different nodes? Thanks! Chris
  9. Hey guys, I'm very interested in anything with crypto currencies like Bitcoin. I've coded something together that grabs the current Bitcoin price from the web and throws it into Houdini as a 3d text. I've also managed to get the Bitcoin price history and graph it inside Houdini. Don't know tho whom it may be useful but look around or maybe even improve it. Maybe it might create new ideas. Python code and example available in the attachment or at github. The Batchman Bitcoin.hipnc
  10. Hi everyone, I'm trying to have my Python Module in my HDA place another node right below my asset on creation. So my OnCreation script runs my python module from disk, which has the following code: pos = first_node.position() second_pos = (pos[0], pos[1] - 2) second_node.setPosition(second_pos) This does nothing. The second node is always created near (0, 0) in the network editor. But if i run those lines in the Python shell in Houdini, it works just fine. So that tells me that the OnCreated scripts don't wait for the HDA to actually be placed into the scene before running, despite what the docs say (a problem I've run into before). My solution to this was to use hdefereval to wait to run the code until the event loop was idle. This shows promises of working, but I'm running into issues now. The code I'm trying is: pos = first_node.position() second_pos = (pos[0], pos[1] - 2) hdefereval.executeDeferred("second_node.setPosition(second_pos)") but the problem here is that when it goes to execute the code, the variables no longer exist, and the code fails because "Name 'second_node' is not defined". But I use a custom 123.py script every day that has the exact line hdefereval.executeDeferred("hou.hscript(code)") where "code" is a pre-defined variable, and hdefereval has no problem using that variable when it goes to execute. So I'm not really sure what the problem is here. What is the best way to move a node using Python? (and if you know how to get my hdefereval call to work, that'd be even better!) Thanks, ~Chris
  11. So i need to modify file path in all file and filecache nodes. I made python script and it works, but the problem is it works only for selected nodes. I cant find how to loop through all nodes in houdini script to find specific ones and make changes more automatically. Thanks!
  12. Came across the above solution when trying to enable OpenCL globally. This is my exact implementation import hou; def set_opencl(parent_node, parm_value): for node in parent_node.allSubChildren(): for p in node.parms(): if p.name()=='opencl': try: p.set(parm_value) except hou.PermissionError: #this handles the case that the parm is inside of a locked .otl pass hou.session.set_opencl(hou.node('/obj/dopnet1'), 1); But get the following error message. have googled but no solution so far. Can any Python experts help?
  13. Hey, I am trying to do some stuff in python with viewport selections. I want to query whether or not the user has anything selected, not necessarily get what is already selected. As far as I can tell the only way to do anything with the viewport is through toolutils. If I use "toolutils.sceneViewer().selectGeometry()" and nothing is selected, it waits until the user hits enter over the viewport before continuing. Is there any way to simply return whether or not any geometry has been selected without having to wait for the user to hit enter? import toolutils sv = toolutils.sceneViewer() geo = sv.selectGeometry() if geo: print "There is a selection" else: print "No geo selected" Thanks! James C
  14. I've been trying to write an expression which will hold a value and change every specified number of frames. I have a point jitter, and an animated seed so the point will change position every timestep, my goal is to have an expression where the the point will stay in the same position for 8 frames and then change position, and remain in that position for another 8 frames and so on. I've attached a very basic scene file if its any easier for you to use that, any help is greatly appreciated, Thanks! PointJitter.hip
  15. Hey everyone, I recently set up a website and a stream for Houdini people or everyone else who is interested in Houdini. I am going to start streaming Houdini every day, starting today. After each stream I will upload results and depending on time a timelapse, a tutorial, a .hip(nc) file or documentation of sorts for everybody to view and examine. Where can you find all this? Website: http://shadesoforange.de/ Stream: https://www.twitch.tv/shadesoforange Who am I? I am studying Animation & Game in Darmstadt, Germany and am 23 years old. I recently finished my internship at RISE FX and am crazy about all Houdini, procedural and CG stuff. More about me here. My first stream is going to start at 15:00 CET. So if you want to hang out and have a chat, come by and say hello! See you!
  16. I'm developing a setup using a Python SOP and came across some behavior that I cannot account for. In my example scene, you'll see that I just have a cube appended with a Python SOP. Enable the Python SOP to see what happens. Inside the Python SOP I'm just getting the parent node (the cube), then trying two different things: 1) append a transform node to the Python SOP, and 2) append a transform node to the cube. The first succeeds, the second fails due to "invalid node type name", and it spawns multiple transform nodes. Here's the code: node = hou.pwd() parent = node.parent() # This works just fine: node.createOutputNode("xform") # This fails due to "Invalid Node Type": parent.createOutputNode("xform") So the first issue is why does createOutputNode from a parent node fail? The error raised is "Invalid node type name", but that doesn't make sense because the same node type name is valid when using createOutputNode from the current node. The second issue is why do multiple transform nodes get spawned from a single createOutputNode? EDIT: Only a single transform node spawns when the parent.createOutputNode line is removed, so I believe the second issue is due to the Python SOP re-evaluating the failing code multiple times, each time spawning another successful transform node from the Python SOP. createOutputNode_example.hip
  17. Would it be too much of a hustle to implement ability to "tear out" sub menus like one is able to do in Maya? It would be beneficial in learning when studying the nodes. Especially in the node area when using the TAB.
  18. How does the pivot work when using the make transform Vop node? I am trying break down and figure out the function of the Make Transform node using python (Outside of any 3d software). The Translate is pretty basic as I can just place them into a matrix as they are x = m[3][0], y = m[3][1] and z = m[3][2]. For rotation I am using the following: def EulerToMatrix(Rotation): x, y, z = Rotation XM = M3([[ 1, 0, 0], [0, math.cos(x), -math.sin(x)], [0, math.sin(x), math.cos(x)]]) YM = M3([[math.cos(y), 0, math.sin(y)], [0, 1, 0], [-math.sin(y), 0, math.cos(y)]]) ZM = M3([[math.cos(z), -math.sin(z), 0], [math.sin(z), math.cos(z), 0], [0, 0, 1]]) return (ZM * YM * XM) I can then just pipe this information into the Matrix4. The problem I have now is that I cannot find any information that I can understand on how to apply the pivot to the matrix4. It's not as simple as just adding. I have attached a file that has the make transform that I am using to test against. The pivot seems to be linked to the rotation and so I am guessing it is related to the scale as well. Is there any way to break down how this pivot transforming works? MakeTransPiv.hip
  19. Hi everyone, Are you a big fan of the Houdini Tricks website? We are - that's why we invited the man behind Houdini Tricks, motion designer and developer Erwin Santacruz, to be our featured Houdini Artist. He's not only a tireless contributor to the Houdini community, he is also a great teacher. Here, he walks us through building Python shelf tools in Houdini. We hope you enjoy his tutorial as much as we did, Patricia and the GridMarkets team
  20. Hi, I´m trying to create a custom panel editor. Still in the early stages, but I would like to have my QToolBox has the same size of his parent widget the QScrollArea. I was thinking about implement resizeEvent() to resize the QToolBox (horizontally) when the QScrollArea changes size. But I´m always getting the wrong sizes from QScrollArea, even changing the size of the panel I´m receiving the (1,1,638,478) size from the viewport().geometry() or sizeHint(). I´m puzzled!! Thanks for helping!
  21. Currently I wanted to change some rops´s image path parameters with python. I have the problem that python converts my strings with e.g. "$F4" or "$JOB" expressions in it to absolute paths. Can I avoid that? e.g. : c.parm("vm_picture").set("//testDirectory/teststring_$F4.v001.exr") turns to: //testDirectory/teststring_0079.v001.exr How can I set this up with keeping the $JOB or $F expressions in it? is this possible?
  22. Hi all, I have a small question about the best behavior when one wants to keep the track of the source scenes for a specific task/asset. Let's say you want to cache a sim. Usually you will make several versions of it. I think it is important to have the source file for each sim/cache version that is saved at the caching time (maybe in the sim/cache folder). Houdini has a 'post-render script' capabilities but my knowledge of hscript or python is very limited. Any ideas how to do that? Thank you! Cheers, Cristian
  23. Hi Everyone, I was wondering if there is anyway in Python to run a function only when the left mouse bottom being held down? Thanks,
  24. Hi guys, I am working on a python script that bakes the hand movement of geometry with mouse in the viewport over the time and creates keys on each frame. In other word, I want to move my object with mouse in the view port and get the Transform/Rotation/Scale keyed on each frame. Currently I am using hou.selectedNode() and the hou.parm() to access the specific parameters that I want to bake. Then I use a for loop to generate keyframe on each frame. Immediately after pushing the bake button it bakes the parameters value on the first frame for entire time line. I have tried using while loop with time.sleep() to wait for a bit after setting key on each frame, but it freeze the view port and I cant move my geometry. Is there anyway to make my code somehow that constantly check the new values of object parameters on each frame and allow me to work on the view port while it does its job in the background? Is this related to multi threading? Here is my for loop for f in timeline: setKey = hou.Keyframe() setKey.setFrame(f) setKey.setValue( keyValue[f] ) ParmList.setKeyframe(setKey) hou.setFrame(f) Thanks,
  25. There are various event handlers you can use with HDA's (like onCreated, onInputChanged etc.) but I can't seem to find one that can be used as a callback for when the output connection of the HDA changes.. Basically i'm trying to create a custom version of the gas disturbance, part of which has the option to visualise the block size of the disturbance (just with coloured points on a grid). So I was thinking I would use an event handler on the HDA to know when it was connected and then in python traverse down the children to find the solver then traverse back up to find the smoke object so I can get the size and center to position the grid correctly. Is this possible? Is this a stupid idea?