Jump to content

Help with Python hierarchy syntax

Recommended Posts

Hello! Python & programming newbie here having problems with syntax and hierarchy. I want to use... not sure what the right description is but: full function calls / paths with the complete path from root (hom module) to leaf (a method inside a class which is inside the hom module) In order to better visualize the hom module structure. The default Python SOP with the 2 starting lines "node = hou.pwd()"  and "geo = node.geometry()" creates some kind of typing shortcut and this hiding method might be good for seasoned programmers but for someone new like me it's confusing!

Sorry about the rant! Here is the basic task I'm trying to accomplish in the Python SOP.

1: Create a vector 3 variable

2: Create a point

3: Set new position of point with the created vector 3 variable

Here are the 3 terrible lines I tried to write:

position = hou.Vector3((5.0, 5.0, 5.0))

newpoint = hou.pwd().geometry().createPoint()

newpos = hou.pwd().point().setPosition(position)


Result: Python error: Traceback (most recent call last):
File "<stdin>", line 7, in <module>
AttributeError: 'SopNode' object has no attribute 'point'"


Q1: How do I fix the syntax here? 

Q2: Is there a better method of accomplishing the same thing in the Python SOP? (I'm aware VEX is better for data manipulation but this part of the process requires Python)  


**EDIT** Discovered the 2 problems (both in line 3). 1:Missing a self argument '0" in the point class's "setPosition" method/function. The Doc doesn't mention anything about this  argument requirement.

                                                                                    2:The full path of the point class is inside the geometry class but the Doc help has them listed side by side "hou.point" & "hou.geometry" without hierarchy consideration.

Here is the working 3 line code with full paths. Please let me know if there's any improvements or better methods 

position = hou.Vector3((5.0, 5.0, 5.0))

newpoint = hou.pwd().geometry().createPoint()

newpos = hou.pwd().geometry().point(0).setPosition(position)


Edited by BlackPariah
problem solved

Share this post

Link to post
Share on other sites

Your last line could be simplified to newpoint.setPosition(position). Since you are storing the newly created point in a variable you can go straight and use all the hou.Point() functions. Print the newpoint variable and you'll see that it is a hou.Point() object. In this way you don't need the index of the point since this is stored in the newpoint variable already. 

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now