n-gones with python
-
I found that the c ++ sdk had a routine for creating n-gones, but I did not find anything in python. By importing a wavefront that contains n-gones with my plugin, the import is not done properly. Is there a python solution or should I convert my plugin to c ++?
-
hi @passion3d,
There is no actual n-gon in the underlying layer of Cinema 4D.
Adjacent polygons usehidden edge
to create n-gon-like shape(s).Following code creates a 5-side polygon object:
import c4d, math from c4d import utils #Welcome to the world of Python def main(): pointCount = 5 polygonCount = math.ceil(pointCount/4.0) # caculate minimum needed polygon number polyObj = c4d.BaseObject(c4d.Opolygon) # create an empty polygon object polyObj.ResizeObject(pcnt=pointCount, vcnt=polygonCount) # resize object to have 5 points, 2 polygons # manually set all point position polyObj.SetPoint(id=0, pos=c4d.Vector(200,0,-200)) polyObj.SetPoint(id=1, pos=c4d.Vector(-200,0,-200)) polyObj.SetPoint(id=2, pos=c4d.Vector(-200,0,200)) polyObj.SetPoint(id=3, pos=c4d.Vector(200,0,200)) polyObj.SetPoint(id=4, pos=c4d.Vector(300,0,0)) # associate points into polygons polygon0 = c4d.CPolygon(t_a=0, t_b=1, t_c=2, t_d=3) polygon1 = c4d.CPolygon(t_a=0, t_b=3, t_c=4) # set polygon in polygon object polyObj.SetPolygon(id=0, polygon=polygon0) polyObj.SetPolygon(id=1, polygon=polygon1) # set hidden edge nbr = utils.Neighbor() nbr.Init(op=polyObj, bs=None) # create Neighor counting all polygon in edge = c4d.BaseSelect() edge.Select(num=3) # set selection, which is the id of the edge to be hidden polyObj.SetSelectedEdges(e=nbr, pSel=edge, ltype=c4d.EDGESELECTIONTYPE_HIDDEN) # hide the edge polyObj.Message(c4d.MSG_UPDATE) doc.InsertObject(polyObj) c4d.EventAdd() if __name__=='__main__': main()
-
Hi @eZioPan
thank you for this example very clear