Open Search
    BaseSelect Class Reference

    #include <c4d_baseselect.h>

    Inheritance diagram for BaseSelect:

    Detailed Description

    This class is used to keep track of point and polygon selections, it may also be used to track other types of element selections.

    Note
    Has to be created with Alloc() and destroyed with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.

    Private Member Functions

     BaseSelect ()
     
     ~BaseSelect ()
     

    Alloc/Free

    static BaseSelectAlloc ()
     
    static void Free (BaseSelect *&bs)
     

    Selection/Segment Count

    Int32 GetCount () const
     
    Int32 GetSegments () const
     

    Select/Deselect/Toggle

    Bool Select (Int32 num)
     
    Bool SelectAll (Int32 min, Int32 max, Bool deselectAll=true)
     
    Bool Deselect (Int32 num)
     
    Bool DeselectAll ()
     
    Bool Toggle (Int32 num)
     
    Bool ToggleAll (Int32 min, Int32 max)
     

    Get/Check Selection

    Bool GetRange (Int32 seg, Int32 maxElements, Int32 *a, Int32 *b) const
     
    Bool IsSelected (Int32 num) const
     

    Copy/Clone

    Bool CopyTo (BaseSelect *dest, Bool alwaysDirty=true) const
     
    BaseSelectGetClone () const
     

    Merge/Deselect/cross

    Bool Merge (const BaseSelect *src)
     
    Bool Deselect (const BaseSelect *src)
     
    Bool Cross (const BaseSelect *src)
     

    Conversion from/to Array

    Bool FromArray (UChar *selection, Int32 count)
     
    UCharToArray (Int32 count) const
     
    Bool ToBitSet (Int32 count, maxon::BaseBitSet< maxon::DefaultAllocator, UInt > &bitSet) const
     
    Bool FromBitSet (const maxon::BaseBitSet< maxon::DefaultAllocator, UInt > &bitSet)
     

    Read/Write

    Bool Read (HyperFile *hf)
     
    void Write (HyperFile *hf) const
     

    Miscellaneous

    Bool FindSegment (Int32 num, Int32 *segment) const
     
    Int32 GetDirty () const
     
    maxon::HashInt GetHashCode () const
     
    Int32 GetLastElement () const
     
    Bool IsAllSelected (Int32 num) const
     
    Bool IsNothingSelected () const
     
    Bool IsEqual (const BaseSelect &other) const
     

    Private

    const maxon::Block< const BaseSelectDataGetData () const
     
    Bool Set (const maxon::Block< const BaseSelectData > &data)
     
    Bool MoveSet (maxon::BaseArray< BaseSelectData > &&values)
     

    Constructor & Destructor Documentation

    ◆ BaseSelect()

    BaseSelect ( )
    private

    ◆ ~BaseSelect()

    ~BaseSelect ( )
    private

    Member Function Documentation

    ◆ Alloc()

    static BaseSelect* Alloc ( )
    static

    Allocates a base selection. Destroy the allocated base selection with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.

    Returns
    The allocated base selection, or nullptr if the allocation failed.

    ◆ Free()

    static void Free ( BaseSelect *&  bs)
    static

    Destructs base selections allocated with Alloc(). Use AutoAlloc to automate the allocation and destruction based on scope.

    Parameters
    [in,out]bsThe base selection to destruct. If the pointer is nullptr nothing happens. The pointer is assigned nullptr afterwards.

    ◆ GetCount()

    Int32 GetCount ( ) const

    Gets the number of selected elements.

    Returns
    The number of selected elements.

    ◆ GetSegments()

    Int32 GetSegments ( ) const

    Gets the number of segments that contain elements.

    Note
    For example: with the selections 0..4, 6..7, 9..12, GetSegments() would return 3 and GetCount() would return 11.
    Returns
    The number of segments with selected elements.

    ◆ Select()

    Bool Select ( Int32  num)

    Selects an element.

    Parameters
    [in]numThe element index to select.
    Returns
    true if the element was already selected, otherwise false.

    ◆ SelectAll()

    Bool SelectAll ( Int32  min,
    Int32  max,
    Bool  deselectAll = true 
    )

    Selects all elements in the given range.

    Parameters
    [in]minThe first element to select.
    [in]maxThe last element in the range to select.
    [in]deselectAllSince R17. Deselects all previously selected elements before creating the new selection (equivalent to SELECTION_NEW).
    Returns
    Success of selecting the elements.

    ◆ Deselect() [1/2]

    Bool Deselect ( Int32  num)

    Deselects an element.

    Parameters
    [in]numThe element index to deselect.
    Returns
    true if the element was already deselected, otherwise false.

    ◆ DeselectAll()

    Bool DeselectAll ( )

    Deselects all elements.

    Returns
    Success of deselecting all elements.

    ◆ Toggle()

    Bool Toggle ( Int32  num)

    Toggles the selection state of an element.

    Parameters
    [in]numThe element index to toggle.
    Returns
    Success of changing the selection state of the element.

    ◆ ToggleAll()

    Bool ToggleAll ( Int32  min,
    Int32  max 
    )

    Toggles the selection state of all elements in the given range.

    Parameters
    [in]minThe first element to toggle.
    [in]maxThe last element to toggle in the range.
    Returns
    Success of changing the selection state.

    ◆ GetRange()

    Bool GetRange ( Int32  seg,
    Int32  maxElements,
    Int32 a,
    Int32 b 
    ) const

    Gets the selected elements contained in a segment.

    Parameters
    [in]segThe segment to get the elements for. 0 <= seg < GetSegments()
    [in]maxElementsThe maximum value for a and b. Makes sure a and b are < maxElements. Pass LIMIT<Int32>::MAX for no additional checks.
    [out]aAssigned the index of the first selected element.
    [out]bAssigned the index of the last selected element.
    Returns
    true if if the range was successfully retrieved, otherwise false. Only false if seg is not 0 <= seg < GetSegments()
    The spans are always sorted (spans with higher index have higher numbers for a/b), also b is always >= a.

    ◆ IsSelected()

    Bool IsSelected ( Int32  num) const

    Checks the selection state of an element.
    To efficiently go through selections use the following code:

    Int32 seg = 0, a, b, i;
    while (bs->GetRange(seg++, LIMIT<Int32>::MAX, &a, &b))
    {
    for (i=a; i<=b; ++i)
    {
    // Do something. 'i' is the selected element
    }
    }
    Py_ssize_t i
    Definition: abstract.h:645
    Definition: apibasemath.h:34
    maxon::Int32 Int32
    Definition: ge_sys_math.h:60

    This is faster than:

    for (i=0; i<maxelements; i++)
    {
    if (bs->IsSelected(i))
    {
    // Do something
    }
    }
    Parameters
    [in]numThe element index to get the state for.
    Returns
    true if the element num is selected, otherwise false.

    ◆ CopyTo()

    Bool CopyTo ( BaseSelect dest,
    Bool  alwaysDirty = true 
    ) const

    Copies the selection elements to another BaseSelect.

    Parameters
    [out]destThe destination selection. The caller owns the pointed selection. @paran[in] alwaysDirty If true, the destination BaseSelect is always made dirty. Otherwise it is only made dirty when it is different than the source.
    Returns
    true if selection elements were copied successfully, otherwise false.

    ◆ GetClone()

    BaseSelect* GetClone ( ) const

    Makes a duplicate of the selection with its elements.

    Returns
    The cloned BaseSelect or nullptr if failed. The caller owns the pointed BaseSelect.

    ◆ Merge()

    Bool Merge ( const BaseSelect src)

    Selects all elements that are in src.

    Parameters
    [in]srcThe source selection. The caller owns the pointed selection.
    Returns
    true if the selection elements were merged successfully, otherwise false.

    ◆ Deselect() [2/2]

    Bool Deselect ( const BaseSelect src)

    Deselects all elements that are in src.

    Parameters
    [in]srcThe source selection. The caller owns the pointed selection.
    Returns
    true if the selection elements were deselected successfully, otherwise false.

    ◆ Cross()

    Bool Cross ( const BaseSelect src)

    Intersects all elements in src.

    Parameters
    [in]srcThe source selection. The caller owns the pointed selection.
    Returns
    true if the selection elements were crossed successfully, otherwise false.

    ◆ FromArray()

    Bool FromArray ( UChar selection,
    Int32  count 
    )

    Gets a number of selected elements from an array. The elements in the array are interpreted as Bool: 0 means the element is unselected, and 1 means it is selected.

    Warning
    The old selection will completely be overridden.
    Parameters
    [in]selectionAn array of elements to select. The caller owns the pointed array.
    [in]countThe number of elements in the array.
    Returns
    true if the elements from the array were selected successfully, otherwise false.

    ◆ ToArray()

    UChar* ToArray ( Int32  count) const

    Gets an array of selected elements. The elements in the array are interpreted as Bool: 0 means the element is unselected, and 1 means it is selected.

    Warning
    The array is created with NewMemClear() and must be freed with DeleteMem() afterward.
    Parameters
    [in]countThe number of elements to place into the array.
    Returns
    The array containing the selected elements or nullptr if failed. The caller owns the pointed array.

    ◆ ToBitSet()

    Bool ToBitSet ( Int32  count,
    maxon::BaseBitSet< maxon::DefaultAllocator, UInt > &  bitSet 
    ) const
    Returns
    true if the elements from the array were selected successfully, otherwise false.

    ◆ FromBitSet()

    Bool FromBitSet ( const maxon::BaseBitSet< maxon::DefaultAllocator, UInt > &  bitSet)
    Returns
    true if the elements from the array were selected successfully, otherwise false.

    ◆ Read()

    Bool Read ( HyperFile hf)

    Reads a selection from a file.

    Parameters
    [in]hfThe file to read a selection from. The caller owns the pointed hyper file.
    Returns
    true if a selection was successfully read, otherwise false.

    ◆ Write()

    void Write ( HyperFile hf) const

    Writes the selection to a file.

    Parameters
    [in]hfThe file to write the selection to. The caller owns the pointed hyper file.

    ◆ FindSegment()

    Bool FindSegment ( Int32  num,
    Int32 segment 
    ) const

    Calculates which segment contains the element num and returns it in segment.

    Parameters
    [in]numAn element number.
    [out]segmentAssigned the found segment index.
    Returns
    true if the segment was found, otherwise false.

    ◆ GetDirty()

    Int32 GetDirty ( ) const

    Gets the dirty counter of the selection.

    Note
    The dirty counter is increased every time a function that changes the selection is called.
    Returns
    The dirty counter.

    ◆ GetHashCode()

    maxon::HashInt GetHashCode ( ) const

    Gets the hash code of the selection.

    Returns
    The hash code.

    ◆ GetLastElement()

    Int32 GetLastElement ( ) const

    Gets the last selected element, e.g. the last element selected through Select().

    Returns
    The last selected element.

    ◆ IsAllSelected()

    Bool IsAllSelected ( Int32  num) const

    Checks if all elements from zero to num-1 are selected.

    Parameters
    [in]numNumber of elements to check.
    Returns
    True, if all elements are selected.

    ◆ IsNothingSelected()

    Bool IsNothingSelected ( ) const

    Checks if nothing is selected.

    Returns
    True, if nothing is selected.

    ◆ IsEqual()

    Bool IsEqual ( const BaseSelect other) const

    Checks if two BaseSelect are equal.

    Parameters
    [in]otherThe BaseSelect to compare with.
    Returns
    True, if both BaseSelects are equal.

    ◆ GetData()

    const maxon::Block<const BaseSelectData> GetData ( ) const

    Private.

    ◆ Set()

    Bool Set ( const maxon::Block< const BaseSelectData > &  data)

    Private.

    ◆ MoveSet()

    Bool MoveSet ( maxon::BaseArray< BaseSelectData > &&  values)

    Private.