Open Search
    GeClipMap Manual

    About

    GeClipMap is a utility class that allows to perform advanced drawing operations.

    Allocation/Deallocation

    A GeClipMap can be created with the usual tools:

    • GeClipMap::Alloc(): Creates a new GeClipMap.
    • GeClipMap::Free(): Deletes the given GeClipMap.

    The created GeClipMap can be initiated in multiple ways:

    • GeClipMap::Init(Int32 w, Int32 h, Int32 bits): Initiates the GeClipMap with the given dimensions.
    • GeClipMap::Init(BaseBitmap *bm): Initiates the GeClipMap by loading the given BaseBitmap.
    • GeClipMap::Init(BaseBitmap *bm, BaseBitmap *alpha_channel): Initiates the GeClipMap by loading the given BaseBitmap and alpha channel.
    • GeClipMap::Init(const Filename &name, Int32 frame, Bool *ismovie): Initiates the GeClipMap by loading the given image file.
    • GeClipMap::Init(const IconData &iconData): Initiates the GeClipMap by loading the IconData.
    // This example creates a new GeClipMap, fills it with a
    // color and displays the result in the Picture Viewer.
    // create GeClipMap
    AutoAlloc<GeClipMap> clipMap;
    if (clipMap == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    // init GeClipMap
    const Int32 width = 1024;
    const Int32 height = 1024;
    const Int32 depth = 32;
    const IMAGERESULT res = clipMap->Init(width, height, depth);
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    // fill ClipMap
    clipMap->BeginDraw();
    clipMap->SetColor(255, 0, 0); // red
    clipMap->FillRect(0, 0, width - 1, height - 1);
    clipMap->EndDraw();
    // show result in Picture Viewer
    BaseBitmap* const bitmap = clipMap->GetBitmap();
    if (bitmap == nullptr)
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
    ShowBitmap(bitmap);
    Py_UCS4 * res
    Definition: unicodeobject.h:1113
    OK
    User has selected a font.
    Definition: customgui_fontchooser.h:0
    IMAGERESULT
    Definition: ge_prepass.h:3947
    #define MAXON_SOURCE_LOCATION
    Definition: memoryallocationbase.h:69
    Bool ShowBitmap(const Filename &fn)
    maxon::Int32 Int32
    Definition: ge_sys_math.h:51
    unsigned long Py_ssize_t width
    Definition: pycore_traceback.h:88

    A GeClipMap is easily cleared with:

    • GeClipMap::Destroy(): Resets the clip map to its initial state.

    Read-Only Properties

    The basic settings of a GeClipMap are accessed with:

    • GeClipMap::GetDim(): Gets the dimensions of the GeClipMap.
    • GeClipMap::GetBw(): Returns the width of the GeClipMap.
    • GeClipMap::GetBh(): Returns the height of the GeClipMap.

    The bitmap data is stored internally as a BaseBitmap:

    • GeClipMap::GetBitmap(): Returns a pointer to the internal BaseBitmap.

    Drawing

    Every drawing operation performed with a GeClipMap must be encapsulated between these two functions:

    • GeClipMap::BeginDraw(): Must be called before any drawing operation.
    • GeClipMap::EndDraw(): Must be called after a sequence of drawing operations.

    The drawing operations can be modified with:

    • GeClipMap::SetDrawMode(): Sets the raw mode, see ::GE_CM_DRAWMODE.
    • GeClipMap::SetColor(): Sets the currently used color.
    • GeClipMap::SetOffset(): Sets the offset for all following drawing operations.
    // This example draws multiple elements into the given GeClipMap.
    // SetOffset() is used to define an offset for the drawing operations
    // of each element. This way these drawing operations can be defined
    // in local space.
    clipMap->BeginDraw();
    // fill background with white
    clipMap->SetColor(255, 255, 255);
    clipMap->FillRect(0, 0, width - 1, height - 1);
    // draw multiple elements
    for (Int32 i = 0; i < elementCnt; ++i)
    {
    // define offset for each drawn element
    const Int32 offsetX = 10 + (i * 100);
    const Int32 offsetY = 10;
    clipMap->SetOffset(offsetX, offsetY);
    // draw element with the defined offset
    // DrawElement() is a custom function
    DrawElement(clipMap) iferr_return;
    }
    clipMap->EndDraw();
    Py_ssize_t i
    Definition: abstract.h:645
    #define iferr_return
    Definition: resultbase.h:1531

    A clipping region defines the part of the GeClipMap which will be affected by the following drawing operations.

    • GeClipMap::SetClipRgn(): Sets the clipping region.
    • GeClipMap::ClipPoint(): Returns true if the given point is in the clipping region.
    • GeClipMap::ClipArea(): Returns true if the given area is in the clipping region.

    Single pixels of the GeClipMap can be accessed with:

    • GeClipMap::GetPixelRGBA(): Gets the RGBA values of the given coordinates.
    • GeClipMap::SetPixelRGBA(): Sets the RGBA values of the given coordinates.
    // This example fills the given GeClipMap
    // with randomly colored pixels.
    // get GeClipMap dimensions
    Int32 clipMapWidth = 0;
    Int32 clipMapHeight = 0;
    clipMap->GetDim(&clipMapWidth, &clipMapHeight);
    clipMap->BeginDraw();
    Random randomGen;
    // loop through all pixels
    for (Int32 x = 0; x < clipMapWidth; ++x)
    {
    for (Int32 y = 0; y < clipMapHeight; ++y)
    {
    // get random color
    const Int32 red = Int32(randomGen.Get01() * COLORTOINT_MULTIPLIER);
    const Int32 green = Int32(randomGen.Get01() * COLORTOINT_MULTIPLIER);
    const Int32 blue = Int32(randomGen.Get01() * COLORTOINT_MULTIPLIER);
    clipMap->SetPixelRGBA(x, y, red, green, blue);
    }
    }
    clipMap->EndDraw();
    PyObject * x
    Definition: bytesobject.h:38
    static const Float COLORTOINT_MULTIPLIER
    Constant to convert from vectors color components to integers.
    Definition: c4d_tools.h:26

    A blit operations allows to easily copy a part of a GeClipMap into another GeClipMap.

    • GeClipMap::Blit(): Copies (a part) of the source GeClipMap into the GeClipMap.
    // This example creates two GeClipMaps. A part of the content of
    // one GeClipMap is copied to the other GeClipMap using Blit().
    // get bitmap data from a given BaseBitmap
    const IMAGERESULT resSource = sourceClipMap->Init(sourceBitmap);
    // init target GeClipMap
    const IMAGERESULT resTarget = targetClipMap->Init(targetWidth, targetHeight, 32);
    const Bool sourceImageOK = resSource == IMAGERESULT::OK;
    const Bool targetImageOK = resTarget == IMAGERESULT::OK;
    if (sourceImageOK && targetImageOK)
    {
    // copy image data from source to target using Blit()
    targetClipMap->BeginDraw();
    targetClipMap->SetDrawMode(GE_CM_DRAWMODE::COPY, 256);
    targetClipMap->Blit(0, 0, *sourceClipMap, 0, 0, targetWidth, targetHeight, GE_CM_BLIT::COPY);
    targetClipMap->EndDraw();
    }
    COPY
    New pixels overwrite old ones.
    Definition: lib_clipmap.h:0
    maxon::Bool Bool
    Definition: ge_sys_math.h:46

    Drawing Operations

    These drawing operations allow to create basic shapes. The use the current color defined with GeClipMap::SetColor().

    • GeClipMap::SetPixel(): Sets the given pixel.
    • GeClipMap::Line(): Draws a line.
    • GeClipMap::PolyLine(): Draws a polygon line using ::GE_POINT2D.
    • GeClipMap::FillPolygon(): Draws a filled polygon using ::GE_POINT2D.
    • GeClipMap::Rect(): Draws a rectangle.
    • GeClipMap::FillRect(): Draws a filled rectangle.
    • GeClipMap::Arc(): Draws an arc.
    • GeClipMap::FillArc(): Draws a filled arc.
    • GeClipMap::Ellipse(): Draws an ellipse.
    • GeClipMap::FillEllipse(): Draws a filled ellipse.
    • GeClipMap::DrawBezierSegment(): Draws a Bezier segment.
    • GeClipMap::SupportsDrawBezierSegment(): Returns true if the GeClipMap supports GeClipMap::DrawBezierSegment().
    // This example draws a smiley into the given GeClipMap.
    clipMap->BeginDraw();
    // draw a smiley
    // base shape
    clipMap->SetColor(255, 255, 0); // yellow
    clipMap->FillEllipse(10, 10, 90, 90);
    // mouth
    clipMap->SetColor(0, 0, 0); // black
    clipMap->Arc(20, 60, 50, 80, GE_CM_ARCSEGMENT::LEFTBOTTOM);
    clipMap->Arc(50, 60, 80, 80, GE_CM_ARCSEGMENT::RIGHTBOTTOM);
    // eyes
    clipMap->FillEllipse(30, 30, 40, 50);
    clipMap->FillEllipse(60, 30, 70, 50);
    clipMap->EndDraw();
    LEFTBOTTOM
    (x2,y2) -> (x1,y2) -> (x1,y1)
    Definition: lib_clipmap.h:2
    RIGHTBOTTOM
    (x2,y1) -> (x2,y2) -> (x1,y2)
    Definition: lib_clipmap.h:1

    Drawing Text

    These functions are used to handle and draw text:

    • GeClipMap::TextAt(): Draws the given text at the given coordinates.
    • GeClipMap::GetTextWidth(): Returns the width of the given text using the current font.
    • GeClipMap::GetTextHeight(): Returns the text height using the current font.
    • GeClipMap::GetTextAscent(): Returns the ascent using the current font.

    The currently used font is defined with:

    • GeClipMap::GetFont(): Gets a BaseContainer with the current font description.
    • GeClipMap::SetFont(): Sets the currently used font using a BaseContainer.
    // This example creates a GeClipMap and gets the dimensions needed to
    // display the given text. The GeClipMap is then initiated with that
    // dimensions to draw the text.
    AutoAlloc<GeClipMap> clipMap;
    if (clipMap == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    // get font settings
    BaseContainer fontSettings;
    if (!GeClipMap::GetFontDescription("CourierNewPS-ItalicMT", GE_FONT_NAME_POSTSCRIPT, &fontSettings))
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
    // init
    IMAGERESULT res = clipMap->Init(1, 1, 32);
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    clipMap->BeginDraw();
    clipMap->SetFont(&fontSettings, 20.0);
    // get dimensions needed for given string
    const Int32 textWidth = clipMap->GetTextWidth(text);
    const Int32 textHeight = clipMap->GetTextHeight();
    // end
    clipMap->EndDraw();
    clipMap->Destroy();
    // re-init to draw text
    res = clipMap->Init(textWidth, textHeight, 32);
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    clipMap->BeginDraw();
    // fill background with white
    clipMap->SetColor(255, 255, 255, 255);
    clipMap->FillRect(0, 0, textWidth - 1, textHeight - 1);
    // draw black text
    clipMap->SetColor(0, 0, 0, 255);
    clipMap->SetFont(&fontSettings, 20.0);
    clipMap->TextAt(0, 0, text);
    // end drawing
    clipMap->EndDraw();
    @ GE_FONT_NAME_POSTSCRIPT
    Font postscript name (e.g. "Helvetica-Bold").
    Definition: lib_clipmap.h:111
    PyObject * text
    Definition: pycore_traceback.h:70

    These static functions are used to manage fonts:

    • GeClipMap::GetDefaultFont(): Gets a description of the default font.
    • GeClipMap::GetFontDescription(): Gets a description of the given fonts. Currently supports only ::GE_FONT_NAME_POSTSCRIPT.
    • GeClipMap::EnumerateFonts(): Gets a BaseContainer with a list of all fonts.
    • GeClipMap::GetFontName(): Gets the font name from the given font description.
    • GeClipMap::GetFontSize(): Gets the font size from the given font description.
    • GeClipMap::SetFontSize(): Sets the font size in the given font description.

    See also FontData and GeChooseFont().

    // This example gets all installed fonts and prints their names.
    // get all fonts
    BaseContainer fonts;
    GeClipMap::EnumerateFonts(&fonts, GE_CM_FONTSORT::HIERARCHICAL);
    // loop trough all fonts
    Int32 containerElement;
    GeData* fontData = nullptr;
    BrowseContainer browse(&fonts);
    // browse
    while (browse.GetNext(&containerElement, &fontData))
    {
    const BaseContainer* const font = fontData->GetContainer();
    const BaseContainer* const fontInstance = font->GetContainerInstance(0);
    // postscript
    String postScript;
    if (GeClipMap::GetFontName(fontInstance, GE_FONT_NAME_POSTSCRIPT, &postScript))
    ApplicationOutput("- PostScript: " + postScript);
    // display name
    String displayName;
    if (GeClipMap::GetFontName(fontInstance, GE_FONT_NAME_DISPLAY, &displayName))
    ApplicationOutput("- Display: " + displayName);
    // family name
    String familyName;
    if (GeClipMap::GetFontName(fontInstance, GE_FONT_NAME_FAMILY, &familyName))
    ApplicationOutput("- Family: " + familyName);
    }
    @ GE_FONT_NAME_FAMILY
    Font family name (e.g. "Helvetica").
    Definition: lib_clipmap.h:109
    @ GE_FONT_NAME_DISPLAY
    Human readable font name (e.g. "Helvetica Bold").
    Definition: lib_clipmap.h:108
    #define ApplicationOutput(formatString,...)
    Definition: debugdiagnostics.h:204
    HIERARCHICAL
    The font families are sorted alphabetically.
    Definition: lib_clipmap.h:1

    Further Reading