About
A BaseView object represents a viewport window. Such a BaseView can be obtained from the active BaseDocument to get information on the viewport window. The class BaseDraw is based on BaseView . It can be used to draw something in a viewport window via a "Draw" function.
Warning It is only allowed to draw into the viewport inside a "Draw" function. See Draw Manual .
Access
The BaseDraw windows used to display the active BaseDocument can be accessed with:
See BaseDocument Editor Windows .
Such a BaseDraw can be used to access the scene camera.
if (baseDraw == nullptr )
targetPosition.
off = cameraMatrix.
off + (900.0 * cameraMatrix.
sqmat .
v3 );
activeObject->
SetMg (targetPosition);
Update
The viewport windows are redrawn if something in the active document changed:
EventAdd() : Informs Cinema 4D that something in the active document changed. DrawViews() will be called.
DrawViews() : Manually triggers the scene execution and a viewport redraw. Typically only used directly in ToolData based tools.
See also Core Messages Manual and Cinema 4D Threads Manual .
Properties
The parameters of a given BaseDraw are accessed as usual with C4DAtom::GetParameter() and C4DAtom::SetParameter() . The parameter IDs are defined in dbasedraw.h
const Float newScale = oldScale * 2.0;
A BaseDraw defines also certain display filters that decide what element types are displayed in the viewport windows.
Note To edit the filter settings use the parameters defined in dbasedraw.h
if (bd == nullptr )
if (displayFilter && editorVisibiliy)
{
}
else
{
}
Rotation
A viewport window with planar projection can be rotated:
for (
Int32 i = 0; i < count; ++i)
{
if (baseDraw == nullptr )
}
Camera
A viewport window with a perspective projection displays the scene from the point of view of a camera. This camera is defined using an object. This can be a scene camera, a scene object or the editor camera.
See also CameraObject Manual .
if (bd == nullptr )
{
if (cam != nullptr )
}
else
{
if (camera == nullptr )
}
Scene Elements
The viewport also displays a background and some global light settings. Both the background and the global seetings are defines using scene elements.
if (envObject)
{
}
if (skyObject)
{
if (tag)
{
if (material)
}
}
GPU Renderer
The GPU renderer of Cinema 4D can render inside a given BaseDraw window.
Drawing
Inside a "Draw" function one can use the following functions to draw into the viewport windows. See Draw Manual .
Warning It is not allowed to draw in any other context.
While drawing one should check if the drawing thread has been aborted:
{
{
err.DiagOutput();
err.DbgStop();
return false ;
};
if (node == nullptr || doc == nullptr || bd == nullptr || bh == nullptr )
return true ;
Drawing Pass
The viewport is drawn in several passes. One should check if the drawing operation is needed in the current pass. This is especially important for ObjectData::Draw() .
Parameters
Several parameters configure the drawing operations that follow.
The parameters are:
Note At the end of the drawing operation these parameters have to be restored.
Settings
The draw settings configure the drawing operations that follow.
Note The color used with BaseDraw::SetPen() may be obtained with GetViewColor() . See also Colors .
for (
Int32 i = 0; i < 100; ++i)
{
const Vector color { r, g, b };
const Vector pos { i* 10.0, 0.0, 0.0 };
}
The light list defines what lights should influence the shading on 3D drawing operations. Typically used to disable lights.
Transparency settings for polygon drawing are defined with:
See also DRAW_PARAMETER_ALPHA_THRESHOLD above.
Matrix
A drawing operation may be performed in screen, camera or world space. Before any drawing operation the operation space must be defined.
const Vector screenPos { 100, 100.0, 0.0 };
const Vector worldPos { 100.0, 100.0, 100.0 };
2D Drawing Operations
These functions perform drawing operations in 2D space:
Note To calculate screen space coordinates see Transformation .
const Vector center { 100, 100, 0 };
const Vector tangentPoint { 150, 100, 0 };
Text can easily be drawn with:
Note These functions are typically used with a scene hook.
{
entryA.
_txt =
"This is the first entry" ;
entryB.
_txt =
"This is the second entry" ;
}
General Drawing Operations
Depending on the current transformation matrix these operations can draw in 2D or 3D space.
The z-buffer is configured with:
These clipping flags used with 3D drawing operations:
NOCLIP_D : Clip against the viewport window.
NOCLIP_Z : Clip against near and far plane.
The drawing operations are:
if (clipMap)
{
clipMap->
Init (100, 50, 32);
clipMap->
TextAt (0, 11,
"Hello World" );
if (bitmap)
{
bd->
DrawTexture (bitmap, positions.GetFirst(), colors.GetFirst(), normals.GetFirst(), uvcoords.GetFirst(), 4, alpha, texture);
}
}
Each BaseDraw::DrawPolygon() puts the polygon into an internal array. The drawing of this array can be triggered with:
A simple shading value is often used with BaseDraw::DrawPoly() and BaseDraw::DrawPolygon() :
const Vector color { 1.0, 0.0, 0.0 };
colors[0] = color * bd->
SimpleShade (vertice[0], normals[0]);
colors[1] = color * bd->
SimpleShade (vertice[1], normals[1]);
colors[2] = color * bd->
SimpleShade (vertice[2], normals[2]);
colors[3] = color * bd->
SimpleShade (vertice[3], normals[3]);
Objects
Complete polygon objects can be drawn with:
const Bool docSet = doc !=
nullptr ;
if (docSet && isObjectPass)
{
const Bool activeObjectSet = activeObject !=
nullptr ;
const Bool activeObjectIsNotOp = activeObject != op;
if (activeObjectSet && activeObjectIsNotOp)
{
{
}
}
}
Line Strip
The line strip functions allow to easily draw line paths:
for (
Int32 i = 0; i < 100; ++i)
{
const Vector color { r, g, b };
}
XOR Lines
XOR lines are used with selection tools in the viewport. Typically one should use the LassoSelection class instead.
Warning These functions have been marked as deprecated.
See also EditorWindow::DrawXORLine() .
Colors
Colors can be obtained and converted with:
Frame
The dimensions of a viewport window are accessed with:
PrintFrameSize(cl, ct, cr, cb);
PrintFrameSize(cl, ct, cr, cb);
Stereo
These functions get and change the stereo settings for the given viewport window:
Projection
A viewport window can display the scene using orthogonal or perspective projection:
Transformation
The following functions allow to transform a given point between world, screen and camera space:
if (object )
{
const Vector worldSpacePos =
object ->GetMg().off;
const Vector screenSpacePos = bd->
WS (worldSpacePos);
}
if (res && (list->GetCount() > 0))
{
const Float distance = list->GetZ(0);
}
Also sizes can be transformed:
BaseView::PW_S() : Returns the size in world units for a single pixel at the given Z-depth.
BaseView::WP_S() : Returns the size in pixels for a single world unit at the given Z-depth.
BaseView::PW_W() : Returns the size in world units for a single pixel at the given screen space position.
BaseView::WP_W() : Returns the size in screen space pixels for a single world unit at world position.
These 3D projection functions are typically used to handle mouse input in tools:
if (err == 0)
{
object ->SetMg(mg);
}
Testing and Clipping
The following tests can be performed:
{
for (
Int32 i = 0; i < pointCount; ++i)
{
const Vector point = mg * points[i];
const Vector screenSpacePos = bd->
WS (point);
{
}
}
}
A given line define by two points can be clipped:
A view can use near- and far-clipping:
Undo
A BaseDraw has its own undo buffer that stores changes:
for (
Int32 i = 0; i < count; ++i)
{
if (baseDraw == nullptr )
}
Miscellaneous
Further functions are:
maxon::DataDictionary stats;
for (const auto & data : stats)
{
}
BaseDrawHelp
BaseDrawHelp is a utility class that contains useful information. It is mostly used in the context of ObjectData::Draw() . An instance is typically handed over as an argument but can also be created on demand:
The BaseDrawHelp object provides access to these properties:
Information on the BaseObject that is supposed to be drawn:
A BaseObject may be drawn with a specific display mode as defined in Tdisplay.h
.
if (bhelp == nullptr )
bhelp->
SetMg (originalMatrix);
Further Reading
#define Opolygon
Polygon - PolygonObject.
Definition: ge_prepass.h:982
void SetMatrix_Camera()
Definition: c4d_basedraw.h:1089
void DrawPoint2D(const Vector &p)
Definition: c4d_basedraw.h:1144
@ BASEDRAW_DATA_NORMALS_SCALE
Definition: dbasedraw.h:69
Definition: c4d_baselist.h:2173
Vector SW(const Vector &p) const
Definition: c4d_basedraw.h:417
C4DAtomGoal * GetLinkAtom(const BaseDocument *doc, Int32 instanceof=0) const
void InsertObject(BaseObject *op, BaseObject *parent, BaseObject *pred, Bool checknames=false)
GeData GetDrawParam(Int32 id) const
Definition: c4d_basedraw.h:1505
Bool GetDrawStatistics(maxon::DataDictionary &statistics) const
Definition: c4d_basedraw.h:1621
Bool IsGPURenderer()
Definition: c4d_basedraw.h:1800
IMAGERESULT Init(Int32 w, Int32 h, Int32 bits)
void LineStripEnd()
Finishes line strips started with LineStripBegin().
Definition: c4d_basedraw.h:1376
V v3
The Z axis.
Definition: matrix.h:31
maxon::Mat3< maxon::Vector64 > Matrix
Definition: ge_math.h:167
Bool CheckDisplayFilter(BaseObject *op, DISPLAYFILTER filter)
Definition: c4d_basedraw.h:39
BaseObject * GetEnvironmentObject() const
Definition: c4d_basedraw.h:843
Bool CheckEditorVisibility(BaseObject *op)
void GetFrame(Int32 *cl, Int32 *ct, Int32 *cr, Int32 *cb)
@ NO_THREAD
Synchronous call.
#define iferr_throw(ERR)
Definition: resultbase.h:1528
@ FROM_IMAGE
Generates the alpha channel from the RGB image information.
Definition: c4d_baseobject.h:224
Definition: datatypebase.h:735
Definition: lib_description.h:328
void GetSafeFrame(Int32 *cl, Int32 *ct, Int32 *cr, Int32 *cb)
String _txt
The text to draw to the HUD.
Definition: c4d_basedraw.h:251
void SetInt32(Int32 id, Int32 l)
Definition: c4d_basecontainer.h:505
void SetMg(const Matrix &mg)
Definition: c4d_basedraw.h:97
void EndDrawXORPolyLine(Bool blit)
Definition: c4d_basedraw.h:1450
#define NOCLIP_Z
Z clipping.
Definition: c4d_basedraw.h:1131
Bool InitDrawXORPolyLine()
Definition: c4d_basedraw.h:1398
void SetDisplay(BaseContainer *bc)
Definition: c4d_basedraw.h:109
@ BASEDRAW_SDISPLAY_HIDDENLINE
Definition: dbasedraw.h:226
maxon::Float Float
Definition: ge_sys_math.h:66
DRAWOBJECT
Definition: ge_prepass.h:4426
Int32 GetPointCount(void) const
Definition: c4d_baseobject.h:1460
V v1
The X axis.
Definition: matrix.h:25
DRAWFLAGS
Definition: ge_prepass.h:2611
void SetMg(const Matrix &m)
Definition: c4d_baseobject.h:488
static BaseDrawHelp * Alloc(BaseDraw *bd, BaseDocument *doc)
DISPLAYFILTER
Definition: ge_prepass.h:4318
@ HYPERNURBS
Subdivision Surface.
Bool TestPoint(Float x, Float y)
Definition: c4d_basedraw.h:348
@ XRAY_OFF
Disables X-Ray mode.
void DrawMultipleHUDText(const maxon::BaseArray< HUDTextEntry > &texts)
Definition: c4d_basedraw.h:1763
@ BASEDRAW_DISPLAYFILTER_HYPERNURBS
Definition: dbasedraw.h:184
void DrawCircle(const Matrix &m)
Definition: c4d_basedraw.h:1253
Definition: datatypebase.h:1147
void DrawHandle(const Vector &vp, DRAWHANDLE type, Int32 flags)
Definition: c4d_basedraw.h:1182
Definition: c4d_thread.h:27
Matrix GetMg() const
Definition: c4d_baseobject.h:482
@ BASEDRAW_DATA_SDISPLAYACTIVE
Definition: dbasedraw.h:26
Definition: c4d_basetag.h:46
void SetDrawParam(Int32 id, const GeData &data)
Definition: c4d_basedraw.h:1497
Int32 SAFEINT32(Float32 x)
Definition: apibasemath.h:266
@ USE_CUSTOM_COLOR
Use a custom color.
DRAW_ALPHA
Definition: ge_prepass.h:2760
DRAWPASS GetDrawPass() const
Definition: c4d_basedraw.h:1613
@ NO_EOGL
No Extended OpenGL.
BaseObject * GetSceneCamera(const BaseDocument *doc)
Definition: c4d_basedraw.h:829
#define iferr_return
Definition: resultbase.h:1465
Bool IsMarkedAsGPURenderer()
Definition: c4d_basedraw.h:1793
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:66
void DrawXORLine(Int32 x1, Int32 y1, Int32 x2, Int32 y2)
void LineStripBegin()
Definition: c4d_basedraw.h:1371
Bool DrawViews(DRAWFLAGS flags, BaseDraw *bd=nullptr)
Class structure to hold HUD Text for BaseDraw::DrawMultipleHUDText().
Definition: c4d_basedraw.h:246
@ BASEDRAW_PROJECTION_FRONT
Definition: dbasedraw.h:242
Definition: basearray.h:366
#define Ocamera
Camera - CameraObject.
Definition: ge_prepass.h:986
@ ENVIRONMENT_AMBIENT
Definition: oenvironment.h:6
Bool GeSyncMessage(Int32 messageid, Int32 destid=0, UInt p1=0, UInt p2=0)
SCENEHOOKDRAW
Definition: ge_prepass.h:3094
DRAWRESULT DrawObject(BaseDrawHelp *bh, BaseObject *op, DRAWOBJECT flags, DRAWPASS drawpass, BaseObject *parent=nullptr, const Vector &col=Vector(.5))
Definition: c4d_basedraw.h:1339
Bool TestBreak()
Definition: c4d_basedraw.h:1721
#define EVMSG_ASYNCEDITORMOVE
The user moved something in the editor window. Managers should update things like position fields.
Definition: ge_prepass.h:2576
BaseDraw * GetActiveBaseDraw(void)
void DrawTexture(const BaseBitmap *bmp, const Vector *padr4, const Vector *cadr, const Vector *vnadr, const Vector *uvadr, Int32 pntcnt, DRAW_ALPHA alphamode, DRAW_TEXTUREFLAGS flags)
Definition: c4d_basedraw.h:1247
void SetPlanarRotation(Float r)
Definition: c4d_basedraw.h:335
#define NOCLIP_D
Clip against the view border.
Definition: c4d_basedraw.h:1130
BaseDraw * GetBaseDraw(Int32 num)
BaseContainer GetDisplay(void)
Definition: c4d_basedraw.h:103
Definition: c4d_basedraw.h:747
void BeginDraw()
Must be called before any drawing functions.
void TextAt(Int32 x, Int32 y, const String &txt)
Vector _position
The screen space position for the text.
Definition: c4d_basedraw.h:252
void FreeDrawXORPolyLine()
Definition: c4d_basedraw.h:1405
void SetPen(const Vector &col, Int32 flags=0)
Definition: c4d_basedraw.h:981
@ TEXTURETAG_MATERIAL
Definition: ttexture.h:29
GeData GetParameterData(Int32 id)
DRAWPASS
Definition: ge_prepass.h:3290
void SetColor(Int32 r, Int32 g, Int32 b, Int32 a=255)
static void Free(BaseDrawHelp *&p)
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Append()
Definition: basearray.h:569
BaseDocument * GetDocument(void)
Definition: c4d_basedraw.h:73
Definition: matrix4d.h:12
Vector ProjectPointOnPlane(const Vector &p, const Vector &v, Float mouse_x, Float mouse_y, Int32 *err=nullptr)
SqrMat3< V > sqmat
The 3×3 matrix for rotation, scale and shear.
Definition: matrix.h:282
void InitUndo(BaseDocument *doc)
Definition: c4d_basedraw.h:1478
void DrawCircle2D(Int32 mx, Int32 my, Float rad)
Definition: c4d_basedraw.h:1169
@ NO_ANIMATION
Ignore all animation.
Vector WS(const Vector &p) const
Definition: c4d_basedraw.h:409
@ BASEDRAW_DATA_SELECTED_NORMALS
Definition: dbasedraw.h:44
Definition: c4d_basedocument.h:43
@ HIGHLIGHT_PASS_INV
Inverted highlight pass.
BaseObject * GetEditorCamera(void)
Definition: c4d_basedraw.h:868
void DrawLine2D(const Vector &p1, const Vector &p2)
Definition: c4d_basedraw.h:1152
void DrawLine(const Vector &p1, const Vector &p2, Int32 flags)
Definition: c4d_basedraw.h:1209
Definition: c4d_gedata.h:82
const DataType & GetType() const
Definition: datatypebase.h:1224
void SetPointSize(Float pointsize)
Definition: c4d_basedraw.h:987
#define iferr_scope_handler
Definition: resultbase.h:1392
@ BIG
Handle used by object generators and deformers.
Definition: c4d_baselist.h:1360
#define DRAW_PARAMETER_LINEWIDTH
Float Line width in pixels. (OpenGL only.)
Definition: c4d_basedraw.h:1510
DRAW_TEXTUREFLAGS
Definition: ge_prepass.h:2773
maxon::Int32 Int32
Definition: ge_sys_math.h:60
void DrawXORPolyLine(const Float32 *p, Int32 cnt)
Definition: c4d_basedraw.h:1435
BaseDocument * GetDocument()
Definition: c4d_baselist.h:1944
void LineStrip(const Vector &vp, const Vector &vc, Int32 flags)
Definition: c4d_basedraw.h:1385
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:208
void SetLightList(Int32 mode)
Definition: c4d_basedraw.h:1001
void BeginDrawXORPolyLine()
Definition: c4d_basedraw.h:1442
@ DISPLAYTAG_SDISPLAYMODE
Definition: tdisplay.h:6
void DrawPolygon(const Vector *p, const Vector *f, Bool quad)
Definition: c4d_basedraw.h:1292
void FillRect(Int32 x1, Int32 y1, Int32 x2, Int32 y2)
#define Ttexture
Texture - TextureTag.
Definition: ge_prepass.h:1245
void SetSceneCamera(BaseObject *op, Bool animate=false)
Definition: c4d_basedraw.h:836
BaseTag * GetTag(Int32 type, Int32 nr=0)
Definition: c4d_baseobject.h:674
const Matrix & GetMg(void)
Definition: c4d_basedraw.h:85
@ BASEDRAW_DATA_PROJECTION
Definition: dbasedraw.h:40
void SetMatrix_Screen()
Definition: c4d_basedraw.h:1067
void SetMatrix_Matrix(BaseObject *op, const Matrix &mg)
Definition: c4d_basedraw.h:1101
Vector GetMp(void)
Definition: c4d_baseobject.h:524
const Vector * GetPointR(void) const
Definition: c4d_baseobject.h:1446
maxon::Vec3< maxon::Float64, 1 > Vector
Definition: ge_math.h:145
BaseObject * GetSkyObject() const
Definition: c4d_basedraw.h:850
static BaseObject * Alloc(Int32 type)
Definition: c4d_basebitmap.h:413
static Bool PickObject(BaseDraw *bd, BaseDocument *doc, Int32 x, Int32 y, Int32 rad, VIEWPORT_PICK_FLAGS flags, LassoSelection *ls, C4DObjectList *list, maxon::SquareMatrix4d *m=nullptr, Int32 *sampleLocation=nullptr)
V off
The translation vector.
Definition: matrix.h:279
Definition: ge_autoptr.h:36
@ FAILURE
There was an error while drawing.
#define BDRAW_SETLIGHTLIST_NOLIGHTS
No lights.
Definition: c4d_basedraw.h:1005
Bool HasCameraLink(void)
Definition: c4d_basedraw.h:822
maxon::Bool Bool
Definition: ge_sys_math.h:55
void EndDraw()
Must be called after a sequence of drawing functions to free the memory allocated by BeginDraw().
BaseObject * GetActiveObject(void)
Definition: c4d_tools.h:811
Bool IsInstanceOf(Int32 id) const
Definition: c4d_baselist.h:1402
Vector GetRad(void)
Definition: c4d_baseobject.h:531
String GetName() const
Definition: c4d_baselist.h:2347
Bool TestClipping3D(const Vector &mp, const Vector &rad, const Matrix &mg, Bool *clip2d, Bool *clipz)
static String VectorToString(const Vector32 &v, Int32 nnk=-1)
Definition: c4d_string.h:571
Float SimpleShade(const Vector &p, const Vector &n)
Definition: c4d_basedraw.h:1715
V v2
The Y axis.
Definition: matrix.h:28
@ ONLY_ACTIVE_VIEW
Only redraw the active view.
Bool GetParameter(const DescID &id, GeData &t_data, DESCFLAGS_GET flags)
Definition: c4d_basedocument.h:490
const Vector & GetVector(void) const
Definition: c4d_gedata.h:451
DISPLAYFILTER GetDisplayFilter() const
Definition: c4d_basedraw.h:1588
Definition: c4d_basecontainer.h:46
@ BASEDRAW_DATA_SHOWNORMALS
Definition: dbasedraw.h:30
Vector GetObjectColor(const BaseDrawHelp *bh, BaseObject *op, Bool lines=false, Bool usedInBaseDraw=true, Int instanceIndex=0) const
Definition: c4d_basedraw.h:948
void SetTransparency(Int32 trans)
Definition: c4d_basedraw.h:962
Float GetFloat(void) const
Definition: c4d_gedata.h:439
Vector CheckColor(const Vector &col)
Definition: c4d_basedraw.h:955