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.pngThis 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.