SoMFField Documentation

Díky chybě v Doxigen (generátor dokumentace ze zdrojáků) není vygenerována dokumentace pro všechny funkce ze tříd odvozených od SoMFField (fieldy s více hodnotami. Protože jsou tyto funkce často potřeba například pro co nejrychlejší modifikaci pole vektorů, uvádím je zde.

Protože všechny tyto funkce jsou generovány pomocí maker, opravdový typ zde zastupuje slovo _type_. Nejsou to naprosto přesné deklarace, ale pro orientaci to bohatě stačí.

 


 

const _type_& operator[](const int i) const;

Vrací i-tou hodnotu. Přesněji řečeno, referenci na její konstantní hodnotu.

 

const _type_* getValues(const int start) const;

Vrací ukazatel na prvek o indexu v proměnné start.

 

int find(const _type_& value, SbBool addifnotfound = FALSE);

Najdi prvek o hodnotě value a vrať jeho index.

 

void setValues(const int start, const int num, const _type_* newvals);

Nastaví prvky od indexu start na hodnoty specifikované v poli newvals, počet měněných prvků je udán v num.

 

void set1Value(const int i, const _type_& value);

Nastav i-tý prvek na hodnotu value. Pokud je i větší než počet prvků ve fieldu, je jejich počet automaticky zvětšen.

 

void setValue(const _type_& value);

Nastaví počet prvků na jedničku a hodnotu tohoto jediného prvku na value.

 

const _type_& operator=(const _type_& val);

Přiřazení je ekvivalentní volání funkce setValue(val).

 

SbBool operator==(const _fieldclass_ & field) const;

Porovnání obsahu dvou fieldů.

 

SbBool operator!=(const _fieldclass_ & field) const;

Porovnání obsahu dvou fieldů.

 

_type_ * startEditing(void);

Toto je jednem z nejrychlejších způsobů editování vícehodnotových fieldů. Funkce vrátí ukazatel na vnitřní pole hodnot, které my pak můžeme přímo editovat. Během editace není možné měnit počet prvků fieldu (například voláním funkce setNum). Po skončení editování musí následovat volání finishEditing().

 

void finishEditing(void);

Ukončí editování fieldu (po předchozím volání startEditing().

 

void setValuesPointer(const int num, const _type_ * userdata);
void setValuesPointer(const int num, _type_ * userdata);

Umožňuje programátorovi nastavit přímo ukazatel do paměti, kde jsou uložena data tohoto fieldu. Použití může být trochu komplikované, především pokud pole není statické. Především bychom při každé modifikaci těchto dat to měli oznámit fieldu zavoláním jeho metody touch().