Problems with c4d.utils.Neighbor
On 08/02/2013 at 08:57, xxxxxxxx wrote:
I want to convert an edge to a point selection and then get the corresponding neighboring polys.
If I want to use the neighbor class it doesn't seem to work properly. If I try to initialize it the following way
obj = doc.GetActiveObject() nb = c4d.utils.Neighbor nb.Init(obj,None) poly_a, poly_b = nb.GetEdgePolys(point_a,point_b)
the console says:
TypeError: descriptor 'Init' requires a 'c4d.utils.Neighbor' object but received a 'c4d.PolygonObject'
Though the SDK clearly states that Init requires a PolygonObject and optionally a BaseSelect.
What am I doing wrong here? Might be a stupid question, but I didn't use python for a long time in Cinema and the SDK always gives me headaches...
On 08/02/2013 at 08:59, xxxxxxxx wrote:
You did not instantiate the Neighbor class. You just assigned the class itself to a new variable.
nb = c4d.utils.Neighbor()
The reason for the error message is, that you can call the Init() function the procedural way, too:
nb = c4d.utils.Neighbor() nb.Init(obj, None) # same as c4d.utils.Neighbor.Init(nb, obj, None)
On 08/02/2013 at 10:50, xxxxxxxx wrote:
you can also compute the indices for yourself.
subindex = edge_index%4 cpoly = obj.GetPolygon((edge_index - subindex )/4) if subindex == 0: a, b = cpoly.a, cpoly.b if subindex == 1: a, b = cpoly.b, cpoly.c if subindex == 2: a, b = cpoly.c, cpoly.d if subindex == 3: a, b = cpoly.d, cpoly.a
you will have to do half the work with the neighbour class anyway :)
edit: assuming that cpoly.c != cpoly.d, if not 2 is a,b = cpoly.c, cpoly.a
On 09/02/2013 at 04:34, xxxxxxxx wrote:
Works fine now. Thank you. The small mistakes...