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.
Methods Signatures
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. |
Inheritance
Parent Class:
Child Class:
Methods Documentation
-
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).