c4d.PolygonObject
¶
Definition¶

class
c4d.
PolygonObject
¶
PolygonObject.GetAllPolygons()
PolygonObject.SetPolygon()
PolygonObject.GetPolygon()
PolygonObject.GetPolygonCount()
PolygonObject.GetPolygonR()
PolygonObject.GetPolygonW()
Inheritance¶
c4d.PointObject
 c4d.PolygonObject
Members¶

PolygonObject.
__init__
(pcnt, vcnt)¶ Parameters:  pcnt (int) – Point count.
 vcnt (int) – Polygon count.
Return type: Returns: The object.

PolygonObject.
GetPolygonS
()¶ Return the selected polygons.
Return type: c4d.BaseSelect Returns: A reference to the selected polygon structure.

PolygonObject.
GetPolygonH
()¶ Return the hidden polygons.
Return type: c4d.BaseSelect Returns: A reference to the hidden polygon structure.

PolygonObject.
GetEdgeS
()¶ Get the selected edges. The edges are indexed by 4 * polygon + edge where polygon is the polygon index and edge is the edge index between 0 and 3.
Warning
If you change this selection you must make sure that its still valid, so that shared edges have a welldefined selection status. it is safer to use
SetSelectedEdges()
.Return type: c4d.BaseSelect Returns: A reference to the selection of visible edges.

PolygonObject.
GetEdgeH
()¶ Get the hidden edges. The edges are indexed by 4 * polygon + edge where polygon is the polygon index and edge is the edge index between 0 and 3.
Note
The edges are only hidden within the editor.
Warning
If you change this selection you must make sure that it is still valid, so that shared edges have a welldefined selection status. It is safer to use
SetSelectedEdges()
.Return type: c4d.BaseSelect Returns: A reference to the selection of hidden edges.

PolygonObject.
SetPolygon
(id, polygon)¶ Set a polygon.
Note
Call
obj.Message
(c4d.MSG_UPDATE) after you set all your polygons to update the object.Parameters:  id (int) – The index.
 polygon (c4d.CPolygon) – The polygon to set at index id.
Raises: IndexError – If the polygon index id is out of range : 0<=id<
GetPolygonCount()
.

PolygonObject.
GetPolygon
(id)¶ Get a polygon.
Parameters: id (int) – The index. Raises: IndexError – If the polygon index id is out of range : 0<=id< GetPolygonCount()
.Return type: c4d.CPolygon Returns: The polygon at index id.

PolygonObject.
ResizeObject
(pcnt[, vcnt=1])¶ Change the number of points and polygons in the object. If vcnt is 1 or not set, the method of
PointObject.ResizeObject()
is used.Parameters:  pcnt (int) – The new number of points.
 vcnt (int) – The new number of polygons.
Return type: bool
Returns: Success of changing the number of points and segments.

PolygonObject.
GetPhongBreak
()¶ Get the phong break edges. The edges are indexed by 4 * polygon + edge where polygon is the polygon index and edge is the edge index between 0 and 3.
Warning
If you change this selection you must make sure that its still valid, so that shared edges have a welldefined phong break status. it is safer to use
SetSelectedEdges()
.Return type: c4d.BaseSelect Returns: The phong break.

PolygonObject.
GetPolygonTranslationMap
()¶ Gets a translation map from polygon indices to Ngon indices.
Return type: tuple(int, list of int) Returns: The number of Ngons and the list of Ngon indices. (0, []) if the function failed. Changed in version R19.024: Was only returning the list of Ngon indices.
Note
With list as the Ngon indices map, if list[i] == p then polygon i is part of the Ngon p.

PolygonObject.
GetNGonTranslationMap
(ngoncnt, polymap)¶ New in version R19.024.
Gets a translation map from Ngon indices to polygon indices.
Parameters:  ngoncnt (int) – The number of Ngons. Pass the length of the list returned by
GetPolygonTranslationMap()
, not the value given byGetNgonCount()
.  polymap (list of int) – The polygon map. Pass the list returned by
GetPolygonTranslationMap()
, or a similarly formatted array.
Return type: list of (list of int)
Returns: The polygon index map if successful, otherwise None.
Note
The number of polygons in Ngon i is stored in list[i][0]. Then the polygon indices are stored in list[i][j] where j goes from 1 to list[i][0].
 ngoncnt (int) – The number of Ngons. Pass the length of the list returned by

PolygonObject.
GetAllPolygons
()¶ Returns all polygons.
Return type: list of CPolygon
Returns: A list of copied polygons.

PolygonObject.
CreatePhongNormals
()¶ Returns a list with the stored phong normals of the object.
Return type: list of Vectors or None Returns: The list or None if the object has no Phong Tag.

PolygonObject.
GetPolygonCount
()¶ Returns the count of polygons. Is the fastest way to get the count of polygons.
Return type: int Returns: The count.

PolygonObject.
GetPolygonR
()¶ New in version R18.011.
Gets the start of the readonly array of polygons.
Note
While this function may sound trivial and cheap, internally it is not. For performance reasons, it is not recommended to use this function inside a loop or inside a loop condition.
Return type: PyCObject Returns: The start of the readonly polygon array.

PolygonObject.
GetPolygonW
()¶ New in version R18.011.
Gets the start of the writable array of polygons.
Note
While this function may sound trivial and cheap, internally it is not. For performance reasons, it is not recommended to use this function inside a loop or inside a loop condition.
Return type: PyCObject Returns: The start of the writable polygon array.

PolygonObject.
GetSelectedEdges
(e, ltype)¶ Get the selected, hidden or phong break edges. The edges are indexed uniquely by a
Neighbor
object, so each edge has a single index.Note
This is a convenience wrapper around
GetEdgeS()
,GetEdgeH()
andGetPhongBreak()
.Parameters:  e (c4d.utils.Neighbor) – The neighbor object with information about the edge topology. Must be initialized with all polygons, i.e. with
Neighbor.Init()
.  ltype (int) –
The type of selection to get:
EDGESELECTIONTYPE_SELECTION Selected edges. EDGESELECTIONTYPE_HIDDEN Hidden edges. EDGESELECTIONTYPE_PHONG Phong edges.
Return type: Returns: The selected edges.
 e (c4d.utils.Neighbor) – The neighbor object with information about the edge topology. Must be initialized with all polygons, i.e. with

PolygonObject.
SetSelectedEdges
(e, pSel, ltype)¶ Set the selected, hidden or phong break edges. The edges are indexed uniquely by a
Neighbor
object, so each edge has a single index.Note
This is a convenience wrapper around
GetEdgeS()
,GetEdgeH()
andGetPhongBreak()
.Parameters:  e (c4d.utils.Neighbor) – The neighbor object with information about the edge topology. Must be initialized with all polygons, i.e. with
Neighbor.Init()
.  pSel (c4d.BaseSelect) – The edge to select.
 ltype (int) –
The type of selection to get:
EDGESELECTIONTYPE_SELECTION Selected edges. EDGESELECTIONTYPE_HIDDEN Hidden edges. EDGESELECTIONTYPE_PHONG Phong edges.
Return type: bool
Returns: True if the selection succeeded, otherwise False.
 e (c4d.utils.Neighbor) – The neighbor object with information about the edge topology. Must be initialized with all polygons, i.e. with

PolygonObject.
GetNgonCount
()¶ Get the number of Ngons in the object, i.e. the number of polygons with more points than 4.
Return type: int Returns: The number of Ngons for this object.

PolygonObject.
GetSelectedNgons
(sel)¶ Copies the current Ngon selection into sel.
Parameters: sel (c4d.BaseSelect) – Assigned the current Ngon selection.

PolygonObject.
GetHiddenNgons
(sel)¶ Copies the current hidden Ngon selection into sel.
Parameters: sel (c4d.BaseSelect) – Assigned the current hidden Ngon selection.

PolygonObject.
ValidateEdgeSelection
(sel)¶ Deselects all selected edges in sel that are Ngon edges.
Parameters: sel (c4d.BaseSelect) – The selection to check for Ngon edges. Return type: bool Returns: True if successful, otherwise False.

PolygonObject.
GetEdgeSelection
(sel, type)¶ Deselects all edges in ‘sel’ that are Ngon edges as specified by type.
Parameters:  sel (c4d.BaseSelect) – The selection to check for Ngon edges.
 type (int) –
The type of selection to check:
EDGESELECTIONTYPE_SELECTION Selected edges. EDGESELECTIONTYPE_HIDDEN Hidden edges. EDGESELECTIONTYPE_PHONG Phong edges.
Return type: bool
Returns: True if successful, otherwise False.

PolygonObject.
GetNgonEdgesCompact
()¶  Retrieves a list that contains Ngon edges information for each polygon.The edge compact value is based on the mask 1 << edgeIndex with edgeIndex between 0  3 for quads, and 0, 1, 3 for triangles.If the value for a polygon is zero then it has no Ngon edge.Otherwise check each edge of the polygon with edges[polyIndex] & (1 << edgeIndex) == 0 (with edges the list of Ngon edges compact values). If the condition is True then the edge is a Ngon edge.
Return type: list Returns: Ngon edges information list.

PolygonObject.
GetShadingBreak
(includeBorderEdges, includeUserBreak, includeUserNormals[, userNormalsAngle=DegToRad(5.0), autoNormalsAngle=DegToRad(180.0)])¶ New in version R19.
Gets the shading break edges based on neighbor polygons shading edges and a specified angle limit.Border edges can optionally be marked as break edges.Current break edges can optionally be included (merged) in the resulting break edges.Finally, user normal vectors can optionally be considered using a separate angle limit for this purpose.Note
The edges are indexed by 4 * polygon + edge where polygon is the polygon index and edge is the edge index between 0 and 3.
Parameters:  includeBorderEdges (bool) – True to mark border edges as break edges, otherwise False.
 includeUserBreak (bool) – True to include the user break edges (same as obtained with
GetPhongBreak()
), otherwise False.  includeUserNormals (bool) – True to consider user normals using the userNormalAngle parameter, otherwise False.
 userNormalsAngle (float) – Optional angle limit, in radians, beyond which polygon vertex normals sharing edge vertices create a break edge.
 autoNormalsAngle (float) – Optional angle limit, in radians, beyond which polygon normals sharing an edge create a break edge.
Return type: Returns: The shading break edges.
Polygon Object in Detail¶
A polygon is a triangle or a quadrangle. A triangle has the points A, B and C, a quadrangle has the points A, B, C, and D.
Perfect polygons, like the one in the image above, are not that common, since the points may lie anywhere in 3D space. This is not a problem if the points are planar  i.e. if they all lie on the same plane as in the next image.
If the quadrangle’s points are not on the same plane, the quadrangle is said to be nonplanar. In the next image, point B has been moved into the depth plane. Now, Cinema 4D must render this polygon as two triangles. This happens internally and usually has no negative effects. However, nonplanar polygons can occasionally lead to unexpected effects and are generally best avoided.
For planar quadrangles, if the interior angle at points B or D is greater than 180°, problems can occur when rendering  this is because the polygon overlaps itself as in the next image.
Another problem arises if all the polygon’s points are on the same line. In this case, a surface normal cannot exist and the polygon is called a degenerated polygon, illustrated in the next image:
Polygon coordinate system¶
Polygons in Cinema 4D have their own coordinate system. You cannot see this system in the viewports, but it is important to be aware of it when using modeling tools.
The origin of the polygon coordinate system is located at the center of the polygons. The X axis is along the line between A and B. The Z axis is the normal. The Y axis is perpendicular to the XZ plane.
Ngons¶
An Ngon (pronounced engon) is simply a polygon that has more than four corner points. Ngons can help to simplify the polygon modeling process.
Before ngons were implemented in Cinema 4D, almost every time you cut a polygon, new edges would be created automatically on the neighboring polygons. These extra edges could make the object difficult to work with and slow down your workflow, because a manual rebuilding would often be required in order to cleanup the mesh.
The following example demonstrates the advantage of using ngons.