c4d.BaseView¶
-
class
c4d.
BaseView
¶ - BaseView represents an editor view.In most cases the sub-class BaseDraw is used. It adds functions for drawing into the view.
See the
dbasedraw.h
description file for container IDs.Warning
This type cannot be instantiated.
Parent Class:
Child Class:
Overview¶
The dimension in pixels of the view window.
|
|
The dimension in pixels of the render lines.
|
|
Retrieves the parameters for the current projection. See
Ocamera.h for projection types. |
|
Returns the camera matrix, i.e. the global object matrix of the current camera object. |
|
Returns the inverse of the camera matrix. |
|
Gets the base matrix. |
|
Sets the base matrix. |
|
Gets the rotation of the planar views. |
|
Sets the rotation of the planar views. |
|
Returns the projection used by the view. See |
|
Returns True if the point is within the boundary returned by
GetFrame() . |
|
Tests if the point is visible in the view according to the current projection.
|
|
Tests if a bounding box is visible in the view according to the current projection. |
|
World to screen conversion.
|
|
Screen to world conversion.
|
|
World to camera conversion.
|
|
Camera to world conversion.
|
|
Screen to camera conversion.
|
|
Camera to screen conversion.
|
|
World to camera vector conversion.
|
|
Camera to world vector conversion.
|
|
Returns the size in world units for a single pixel at the given Z-depth z. |
|
Returns the size in pixels for a single world unit at the given Z-depth z. |
|
Returns the size in world units for a single pixel at screen space vector p. |
|
Returns the size in screen space pixels for a single world unit at world position p. |
|
Tests the face with center p and normal n for backface culling. |
|
Indicates if the view has Z near clipping. |
|
Returns the near clipping of Z sensitive view. |
|
Indicates if the view has Z far clipping. |
|
Returns the far clipping of Z sensitive view. |
|
Calculates the nearest point on the line defined by p and v for a given mouse coordinate. |
|
Calculates the nearest point on the plane defined by p and v for a given mouse coordinate. |
Members¶
-
BaseView.
GetFrame
(self)¶ - The dimension in pixels of the view window.The coordinates are relative to the upper left corner of the view, and specify visible pixels. (I.e. the border is not included.).
>>> bd = doc.GetActiveBaseDraw() >>> bd <c4d.BaseDraw object called Perspective with ID 110305 at 1694970435200> >>> bd.GetFrame() {'cl': 0, 'ct': 0, 'cr': 696, 'cb': 441}
- Return type
Dict[int, int, int, int]
-
BaseView.
GetSafeFrame
(self)¶ - The dimension in pixels of the render lines.The render lines show what part of the view is included in the rendered picture.
>>> bd = doc.GetActiveBaseDraw() >>> bd <c4d.BaseDraw object called Perspective with ID 110305 at 1694970435200> >>> bd.GetSafeFrame() {'cl': 0, 'ct': 25, 'cr': 696, 'cb': 417}
- Return type
Dict[int, int, int, int]
-
BaseView.
GetViewParameter
(self)¶ - Retrieves the parameters for the current projection. See
Ocamera.h
for projection types.The following is the code used internally to project points.CAMDIST = 0.05 def WorldToCamera(p, camera_matrix): return p * (~camera_matrix) def CameraToWorld(p, camera_matrix): return p * camera_matrix def CameraToScreen(pp): p = c4d.Vector(pp) if projection == c4d.Pperspective: nz = 1.0 / CAMDIST if p.z <= 0 else 1.0 / (p.z + CAMDIST) p.x = p.x * scale.x * nz+off.x p.y = p.y * scale.y * nz+off.y return p p.x = (p.x * scale.x) + off.x p.y = (p.y * scale.y) + off.y if projection in (c4d.Pmilitary, c4d.Pfrog, c4d.Pgentleman): p.x += p.z * scale.x * sclaez.x p.y -= p.z * scale.y * scalez.y return p def ScreenToCamera(pp): p = c4d.Vector(pp) if projection in (c4d.Pmilitary, c4d.Pfrog, c4d.Pgentleman): p.x -= p.z * scale.x * scalez.x p.y += p.z * scale.y * scalez.y p.x = (p.x - off.x) / scale.x p.y = (p.y - off.y) / scale.y if projection == c4d.Pperspective: nz = p.z + CAMDIST p.x *= nz p.y *= nz return p
For non-axometric projection here’s the code how to calculate off/scale.
def InitView(camera, xres, yres, pix_x, pix_y): opm = camera.GetMg() data = camera.GetDataInstance() project = data.GetInt32(c4d.CAMERA_PROJECTION, c4d.Pperspective) if projection not in (c4d.Pperspective, c4d.Pparallel): opm.v1 = c4d.Vector(1.0, 0.0, 0.0) opm.v2 = c4d.Vector(0.0, 1.0, 0.0) opm.v3 = c4d.Vector(0.0, 0.0, 1.0) off.x = xres * 0.5 off.y = yres * 0.5 if b_ab == c4d.Pperspective: ap = data.GetFloat(c4d.CAMERAOBJECT_APERTURE, 36.0) scale.x = data.GetFloat(c4d.CAMERA_FOCUS, 36.0) / ap * xres else: scale.x = xres / 1024.0 * data.GetFloat(c4d.CAMERA_ZOOM, 1.0) scale.y = -scale.x * pix_x / pix_y # ... calculated here
Example for how to use
BaseView.GetViewParameter()
:>>> bd = doc.GetActiveBaseDraw() >>> bd <c4d.BaseDraw object called Perspective with ID 110305 at 1694970435200> >>> bd.GetViewParameter() {'offset': Vector(348.5, 221, 0), 'scale': Vector(697, -697, 0), 'scale_z': Vector(0, 0, 0)}
- Return type
Dict[c4d.Vector, c4d.Vector, c4d.Vector]
- Returns
The dimension, is never None.
-
BaseView.
GetMg
(self)¶ Returns the camera matrix, i.e. the global object matrix of the current camera object.
- Return type
- Returns
The camera matrix.
-
BaseView.
GetMi
(self)¶ Returns the inverse of the camera matrix.
Equivalent to
GetMg()
, but faster.- Return type
- Returns
The inverted camera matrix.
-
BaseView.
GetBaseMatrix
(self)¶ Gets the base matrix.
New in version R14.014.
Note
The base matrix is multiplied with the camera matrix so that it is possible to have e.g. a frontal view into another direction than +Z.
- Return type
- Returns
The base matrix.
-
BaseView.
SetBaseMatrix
(self, mg)¶ Sets the base matrix.
New in version R14.014.
Note
The base matrix is multiplied with the camera matrix so that it is possible to have e.g. a frontal view into another direction than +Z.
- Parameters
mg (c4d.Matrix) – The new base matrix.
-
BaseView.
GetPlanarRotation
(self)¶ Gets the rotation of the planar views.
New in version R14.014.
- Return type
float
- Returns
The planar rotation.
-
BaseView.
SetPlanarRotation
(self, r)¶ Sets the rotation of the planar views.
New in version R14.014.
- Parameters
mg (float) – The new planar rotation.
-
BaseView.
GetProjection
(self)¶ Returns the projection used by the view. See
Ocamera.h
for values.- Return type
int
- Returns
The projection type.
-
BaseView.
TestPoint
(self, x, y)¶ - Returns True if the point is within the boundary returned by
GetFrame()
.The point coordinates must be in screen space.- Parameters
x (int) – X coordinate
y (int) – Y coordinate
- Return type
bool
- Returns
True if the point is inside, otherwise False.
-
BaseView.
TestPointZ
(self, p)¶ - Tests if the point is visible in the view according to the current projection.The point must be in camera space.
- Parameters
p (c4d.Vector) – The point to check.
- Return type
bool
- Returns
True if the point is visible in the view, otherwise False.
-
BaseView.
TestClipping3D
(self, mp, rad, mg)¶ Tests if a bounding box is visible in the view according to the current projection.
The box is defined with passed mp, rad and mg by these eight corner coordinates
p0 = c4d.Vector(mp.x + rad.x, mp.y + rad.y, mp.z + rad.z) * mg p1 = c4d.Vector(mp.x + rad.x, mp.y + rad.y, mp.z - rad.z) * mg p2 = c4d.Vector(mp.x + rad.x, mp.y - rad.y, mp.z + rad.z) * mg p3 = c4d.Vector(mp.x + rad.x, mp.y - rad.y, mp.z - rad.z) * mg p4 = c4d.Vector(mp.x - rad.x, mp.y + rad.y, mp.z + rad.z) * mg p5 = c4d.Vector(mp.x - rad.x, mp.y + rad.y, mp.z - rad.z) * mg p6 = c4d.Vector(mp.x - rad.x, mp.y - rad.y, mp.z + rad.z) * mg p7 = c4d.Vector(mp.x - rad.x, mp.y - rad.y, mp.z - rad.z) * mg
- Parameters
mp (c4d.Vector) – The center of the box.
rad (c4d.Vector) – The radius of the box.
mg (c4d.Matrix) – The transformation to world space from mp/rad space.
- Return type
Dict[bool, bool, bool]
- Returns
A dictionary with the following information:
’visible’: True if the box is visible, otherwise False.’clip2d’: True if the box needs 2D clipping, i.e. if any part of it is outside of the view boundaries. Otherwise False.’clipz’: True if the box needs Z clipping, i.e. if any part of it is too close to or behind the camera. Otherwise False.
-
BaseView.
WS
(self, p)¶ - World to screen conversion.Converts p from world space to screen space (pixels relative to the view), and returns the conversion.The orthogonal distance to the world point is stored in world units in the Z axis of the result.
- Parameters
p (c4d.Vector) – A point in world space.
- Return type
- Returns
The point in screen space.
-
BaseView.
SW
(self, p)¶ - Screen to world conversion.Converts p from screen space (pixels relative to the view) to world space.The X and Y coordinates of the point are given in screen space; the Z coordinate is the orthogonal distance in world units to the point from the view plane. The result of the conversion is returned.
- Parameters
p (c4d.Vector) – A point in screenspace.
- Return type
- Returns
The point in worldspace.
-
BaseView.
WC
(self, p)¶ - World to camera conversion.Converts p from world space to camera space and returns the result.
- Parameters
p (c4d.Vector) – A point in world space.
- Return type
- Returns
The point in camera space.
-
BaseView.
CW
(self, p)¶ - Camera to world conversion.Converts p from camera space to world space and returns the result.
- Parameters
p (c4d.Vector) – A point in camera space.
- Return type
- Returns
The point in world space.
-
BaseView.
SC
(self, p)¶ - Screen to camera conversion.Converts p from screen space (pixels relative to the view) to camera space and returns the result.The X and Y coordinates of the point are given in screen space; the Z coordinate is the orthogonal distance in world units to the point from the view plane.
- Parameters
p (c4d.Vector) – A point in screen space.
- Return type
- Returns
The point in camera space.
-
BaseView.
CS
(self, p, z_inverse)¶ - Camera to screen conversion.Converts p from camera space to screen space (pixels relative to the view) and returns the result.
- Parameters
p (c4d.Vector) – A point in camera space.
z_inverse (bool) –
If True the Z coordinate of the converted point is inverted.This is used by the Z-buffer.
- Return type
- Returns
A point in screen space.
-
BaseView.
WC_V
(self, v)¶ - World to camera vector conversion.Converts the world vector v to camera space and returns the result.
- Parameters
v (c4d.Vector) – A vector in world space.
- Return type
- Returns
The vector in camera space.
-
BaseView.
CW_V
(self, v)¶ - Camera to world vector conversion.Converts the camera vector v to world space and returns the result.
- Parameters
v (c4d.Vector) – A vector in camera space.
- Return type
- Returns
The vector in world space.
-
BaseView.
PW_S
(self, z, horizontal)¶ Returns the size in world units for a single pixel at the given Z-depth z.
- Parameters
z (float) – The Z-depth.
horizontal (bool) –
True if the size is measured horizontally, False for vertical measurement.This is useful for non-square pixel aspect ratios.
- Return type
float
- Returns
The size in world units.
-
BaseView.
WP_S
(self, z, horizontal)¶ Returns the size in pixels for a single world unit at the given Z-depth z.
- Parameters
z (float) – The Z-depth.
horizontal (bool) –
True if the size is measured horizontally, False for vertical measurement.This is useful for non-square pixel aspect ratios.
- Return type
float
- Returns
The size in pixels.
-
BaseView.
PW_W
(self, p, horizontal)¶ Returns the size in world units for a single pixel at screen space vector p.
- Parameters
p (c4d.Vector) – The pixel in screen space.
horizontal (bool) –
True if the size is measured horizontally, False for vertical measurement.This is useful for non-square pixel aspect ratios.
- Return type
float
- Returns
Size in world units.
-
BaseView.
WP_W
(self, p, horizontal)¶ Returns the size in screen space pixels for a single world unit at world position p.
- Parameters
p (c4d.Vector) – The world unit in world space.
horizontal (bool) –
True if the size is measured horizontally, False for vertical measurement.This is useful for non-square pixel aspect ratios.
- Return type
float
- Returns
Size in screen space pixels.
-
BaseView.
BackfaceCulling
(self, n, p)¶ Tests the face with center p and normal n for backface culling.
Note
Both vector must be defined in the same space coordinate.
- Parameters
n (c4d.Vector) – The face normal.
p (c4d.Vector) – The face center.
- Return type
- Returns
True if the face should be visible, otherwise False.
-
BaseView.
ZSensitiveNear
(self)¶ Indicates if the view has Z near clipping.
- Return type
bool
- Returns
True if the view has Z clipping near, otherwise False.
-
BaseView.
ZSensitiveNearClipping
(self)¶ Returns the near clipping of Z sensitive view.
-
BaseView.
ZSensitiveFar
(self)¶ Indicates if the view has Z far clipping.
- Return type
bool
- Returns
True if the view has Z clipping far, otherwise False.
-
BaseView.
ZSensitiveFarClipping
(self)¶ Returns the far clipping of Z sensitive view.
- Return type
float
- Returns
Far clipping distance.
-
BaseView.
ProjectPointOnLine
(self, p, v, mouse_x, mouse_y)¶ Calculates the nearest point on the line defined by p and v for a given mouse coordinate.
- Parameters
p (c4d.Vector) – Start position of the line in world space.
v (c4d.Vector) – Direction of the line. The length of this vector determines the scaling of the returned offset.
mouse_x (float) – Mouse X-coordinate.
mouse_y (float) – Mouse Y-coordinate.
- Return type
Tuple[c4d.Vector, float, int]
- Returns
The nearest point on the line, the distance from p scaled by the length of v (offset = distance to p / length of v) and an error code:
1 = Failed to find nearest point correctly, lines may be beyond horizon, behind camera, or ray line and line may be parallel.
2 = Point is either beyond the start or end of the described segment (but a point will still be returned for the line/ray).
-
BaseView.
ProjectPointOnPlane
(self, p, v, mouse_x, mouse_y)¶ Calculates the nearest point on the plane defined by p and v for a given mouse coordinate.
- Parameters
p (c4d.Vector) – The plane’s position in world space.
v (c4d.Vector) – The plane’s normal in world space.
mouse_x (float) – Mouse X-coordinate.
mouse_y (float) – Mouse Y-coordinate.
- Return type
Tuple[c4d.Vector, int]
- Returns
The nearest point on the plane and an error code:
1 = Failed to find nearest point correctly, lines may be beyond horizon, behind camera, or ray line and line may be parallel.
2 = Point is either beyond the start or end of the described segment (but a point will still be returned for the line/ray).