c4d.PolygonObject

Inheritance

Members

PolygonObject.__init__(pcnt, vcnt)
Parameters:
  • pcnt (int) – Point count.
  • vcnt (int) – Polygon count.
Return type:

PolygonObject

Returns:

The object.

PolygonObject.GetPolygonS()

Return the selected polygons.

Return type: BaseSelect
Returns: A reference to the selected polygon structure.
PolygonObject.GetPolygonH()

Return the hidden polygons.

Return type: 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 well-defined selection status. It’s safer to use SetSelectedEdges().

Return type: 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 well-defined selection status. It is safer to use SetSelectedEdges().

Return type: 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 (CPolygon) – The polygon to set at index id.
Raises IndexError:
 

If the polygon index id is out of range : 0GetPolygonCount().

PolygonObject.GetPolygon(id)

New in version R13.016.

Get a polygon.

Parameters: id (int) – The index.
Raises IndexError:
  If the polygon index id is out of range : 0GetPolygonCount().
Return type: 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 well-defined phong break status. It’s safer to use SetSelectedEdges().

Return type: BaseSelect
Returns: The phong break.
PolygonObject.GetPolygonTranslationMap()

Gets a translation map from polygon indices to N-gon indices.

Return type: list of int
Returns: A list of index map or None.
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.GetSelectedEdges(e, ltype)

New in version R13.016.

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() and GetPhongBreak().

Parameters:
  • e (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 Edge selection.
    EDGESELECTIONTYPE_HIDDEN Hidden edges.
    EDGESELECTIONTYPE_PHONG Phong edges.
Return type:

BaseSelect

Returns:

The selected edges.

PolygonObject.SetSelectedEdges(e, pSel, ltype)

New in version R13.016.

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() and GetPhongBreak().

Parameters:
  • e (Neighbor) – The neighbor object with information about the edge topology. Must be initialized with all polygons, i.e. with Neighbor.Init().
  • pSel (BaseSelect) – The edge to select.
  • ltype (int) –

    The type of selection to get:

    EDGESELECTIONTYPE_SELECTION Edge selection.
    EDGESELECTIONTYPE_HIDDEN Hidden edges.
    EDGESELECTIONTYPE_PHONG Phong edges.
Return type:

bool

Returns:

True if the selection succeeded, otherwise False.

PolygonObject.GetNgonCount()

Get the number of N-gons in the object, i.e. the number of polygons with more points than 4.

Return type: int
Returns: The number of N-gons for this object.
PolygonObject.GetSelectedNgons(sel)

New in version R13.016.

Copies the current N-gon selection into sel.

Parameters: sel (BaseSelect) – Assigned the current N-gon selection.
PolygonObject.GetHiddenNgons(sel)

New in version R13.016.

Copies the current hidden N-gon selection into sel.

Parameters: sel (BaseSelect) – Assigned the current hidden N-gon selection.
PolygonObject.ValidateEdgeSelection(sel)

New in version R13.016.

Deselects all selected edges in sel that are N-gon edges.

Parameters: sel (BaseSelect) – The selection to check for N-gon edges.
Return type: bool
Returns: True if successful, otherwise False.
PolygonObject.GetEdgeSelection(sel, type)

New in version R13.016.

Deselects all edges in ‘sel’ that are N-gon edges as specified by type.

Parameters:
  • sel (BaseSelect) – The selection to check for N-gon edges.
  • type (int) –

    The type of selection to check:

    EDGESELECTIONTYPE_SELECTION Edge selection.
    EDGESELECTIONTYPE_HIDDEN Hidden edges.
    EDGESELECTIONTYPE_PHONG Phong edges.
Return type:

bool

Returns:

True if successful, otherwise False.

PolygonObject.GetNgonEdgesCompact()

New in version R13.016.

Retrieves a list that contains N-gon information for each polygon. If edges[poly_index] & (1 the edge is a hidden N-gon edge, where edge_index may be 0-3 for quads and 0, 1 or 3 for tris.

Return type: list
Returns: N-gon edges list.

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 non-planaer. 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, non-planaer polygons can occasionally lead to unexepected effects and are generally best avoided.

For planaer 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 centre 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.

N-gons

An n-gon (pronounced en-gon) is simply a polygon that has more than four courner points. N-gons can help to simplify the polygon modeling process.

Before n-gons 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 n-gons.

Table Of Contents