Spline linked to Polygon points?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/08/2012 at 17:10, xxxxxxxx wrote:

Could anyone help me work out this simple problem I have. I'm obviously not getting something right?

import c4d
#Welcome to the world of Python
  
  
def main() :
    ob = op.GetObject()    #Polygon Child
    spline = ob.GetUp()    #Spline Parent
  
    for i in xrange(spline.GetPointCount()) :
        polypoints = ob.GetPoint(i)
        point = c4d.Vector(polypoints.x, polypoints.y, polypoints.z)
        spline.SetPoint(i, point)
  
        ob.Message(c4d.MSG_UPDATE)
        c4d.EventAdd() 

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 01:43, xxxxxxxx wrote:

Do you call the main function with

if __name__=='__main__':
    main()

?

Why do you do

ob = op.GetObject()

?

Before the loop, you should resize the spline calling

spline.ResizeObject(ob.GetPointCount())

Also, you should loop over the polygon points

for i in xrange(ob.GetPointCount())

The c4d.MSG_UPDATE message has to be sent to the modified spline

spline.Message(c4d.MSG_UPDATE)

The update message sent to the spline and the global C4D event added should be sent once (not for each polygon point) after the loop.

And to get a good result you can use c4d.utils.Neighbor class to get more information on the polygon points order, connections etc.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 13:08, xxxxxxxx wrote:

Thank you for your reply Yannick.
The script was on a python tag so thats why I did:

ob = op.GetObject()

Is that not right?

I dont understand how once I looped through the polygon points I then go back and fix the spline points to them?
I also tried the spline.Message(c4d.MSG_UPDATE) and just lost the spline out of the scene completely.

This is the xpresso setup I am trying to convert into python basically as a 'learning from' exercise, but I am getting very lost.
http://dl.dropbox.com/u/2802779/Xpresso_Setup.png

This is where up to at the moment

import c4d
#Welcome to the world of Python
#Python Tag on Polygon Child
  
def main() :
    polygon = op.GetObject()    #Polygon Child with 17 points
    spline = polygon.GetUp()    #Spline Parent with 8 points
    spline.ResizeObject(spline.GetPointCount())
  
    for i in xrange(polygon.GetPointCount()) : #Get the 17 points of the polygon
        polygonpoint = polygon.GetPoint(i)
        point = c4d.Vector(polygonpoint.x, polygonpoint.y, polygonpoint.z)
        
    for s in xrange(spline.GetPointCount()) : #Get the 8 points of the Spline
        spline.SetPoint(s, point)
  
    spline.Message(c4d.MSG_UPDATE)
    c4d.EventAdd() 
  
if __name__=='__main__':
    main()

Would appreciate any further help.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 14:52, xxxxxxxx wrote:

Hello hypoly,
_
spline.ResizeObject(spline.GetPointCount())_
This doesn't make any sense and has no effect. Try to translate it into normal language and you'll understand why. "We will make the spline have as many points as it currently has." Huh?

for i in xrange(polygon.GetPointCount()) : #Get the 17 points of the polygon
You don't actually get all 17 points, you just iterate from 0 to 16.
_
for i in xrange(polygon.GetPointCount()) : #Get the 17 points of the polygon
  polygonpoint = polygon.GetPoint(i)
  point = c4d.Vector(polygonpoint.x, polygonpoint.y, polygonpoint.z)_
The last line is redundant. The value returned by GetPoint() is a vector.

The correct version would be

    pcount = polygon.GetPointCount()  
  spline.ResizeObject(pcount)  
  for i in xrange(pcount) :  
      point = polygon.GetPoint(i)         
      spline.SetPoint(i, point)

I suggest you to read some introduction to programming or specifically to Python. The official Python tutorial is a good start.

-Niklas

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 15:34, xxxxxxxx wrote:

Hello Niklas,

Thank you for your reply. I am well aware my programming knowledge is thin side to say the least, and will continue to read up on it. I think I was just getting overly confused with what was what and got tripped up. I find it easier learning form actually trying, and in doing so, making mistakes along the way, so thank you for correcting my silly errors.
I have amended the script.

import c4d
#Python Tag on Polygon Child
  
def main() :
    polygon =    op.GetObject()
    spline =     polygon.GetUp()
    pcount =     polygon.GetPointCount()
    
    spline.ResizeObject(pcount)
    
    for i in xrange(pcount) :
        point = polygon.GetPoint(i)       
        spline.SetPoint(i, point)
        
    spline.Message(c4d.MSG_UPDATE)
    c4d.EventAdd()

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 16:33, xxxxxxxx wrote:

When I first used that script it seemed to work fine, I then copy and paste the same script to another scene with similar set up and get unexpected results? The scene file is here : http://dl.dropbox.com/u/2802779/SplineAttachedToPolygon.c4d.zip
I don't understand why it worked on that one situation and not others?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 16:41, xxxxxxxx wrote:

It does work. But you have rotated the polygon-object. The position of the points is stored relative to the object's axis. You either have to multiply each point you obtain from the polygon-object with the matrix of the polygon-object, or change the matrix of the spline-object to match exactly the matrix of the polygon-object.

-Niklas

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 16:49, xxxxxxxx wrote:

I just noticed that, sorry. Thanks again Niklas.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/08/2012 at 17:03, xxxxxxxx wrote:

Np. 😉