restore selection from edgeSelTag

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/12/2008 at 08:43, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   9.1+ 
Platform:      
Language(s) :     C++  ;

---------
Hi,

i have an edgeSelectionTag and I want to restore the edge selection on the object, that the tag belongs to.
I cannot find any info on this, but maybe im not looking in the right spot..

can somebody hint me in the right direction?

thanks,
Daniel

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/12/2008 at 08:56, xxxxxxxx wrote:

SelectionTag::GetBaseSelect() returns the selection stored in the tag.

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/12/2008 at 09:17, xxxxxxxx wrote:

thanks, but how would i use it to select the edges that are stored in the tag?

i tried it like this, but it doesnt seem to be the right way to do it:

> <code>
> // deselect all     
> ToPoly(edges->GetObject())->GetEdgeS()->DeselectAll();     
> // restore selection from tag
> BaseSelect* bs = edges->GetBaseSelect();
> LONG seg=0,a,b,i;
> while (bs->GetRange(seg++,&a;,&b;)){
>     for (i=a; i<=b; ++i){
>      bs->Select(i);
>     }
> }
> </code>

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/12/2008 at 09:34, xxxxxxxx wrote:

ok i tried it differently now, using setSelectedEdges().
It does select some edges now, but not the right ones.
Looks like its using the wrong edge indices..

> <code>
> PolygonObject* polyObj = ToPoly(edges->GetObject());
>      // deselect all
>      polyObj->GetEdgeS()->DeselectAll();     
>      // restore selection from tag
>      Neighbor* ne = new Neighbor();     
>      ne->Init(polyObj->GetPointCount(), polyObj->GetPolygon(), polyObj->GetPolygonCount(), NULL);
>      polyObj->SetSelectedEdges(ne,edges->GetBaseSelect(),EDGES_SELECTION);
>      ne->Flush();
> </code>

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/12/2008 at 10:22, xxxxxxxx wrote:

looks like sth is wrong with the baseSelect.

> <code>
> SelectionTag* edges = (SelectionTag* ) op->GetDataInstance()->GetLink(ES_EDGE_LINK,op->GetDocument());
> BaseSelect* bs = edges->GetBaseSelect();
> // restore selection from tag
> .
> .
> </code>

The link-field accepts 'Tedgeselection'.

if i create the baseselect like this it works:

> <code>
> .
> .
> bs = polyObj->GetSelectedEdges(ne,EDGES_SELECTION);
> // restore selection from tag
> .
> .
> </code>

but i dont want the current selection, i want the selection that is stored in the edgeSelectionTag..

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 23/12/2008 at 11:45, xxxxxxxx wrote:

Howdy,

For Cinema 4D's Edge Selection tag, an easy way would be to simulate clicking the "Restore Selection" button by sending a message to the tag like this:

> \> DescriptionCommand dc; \> dc.id = DescID(EDGESELECTIONTAG_COMMAND1); \> edgSelTag->Message(MSG_DESCRIPTION_COMMAND,&dc;); \>

Adios,
Cactus Dan

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 28/12/2008 at 09:49, xxxxxxxx wrote:

Thanks Dan,
thats indeed how i did it now (found a code snippet in some old post).

Still i wonder what was wrong in the code above.
If i ever find out i'll add the solution here.

greetings,
Daniel

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 06/01/2009 at 00:28, xxxxxxxx wrote:

The selected edges in the Selection tag are encoded like this:
(4*poly)+edge, where edge goes from 0-3

Here an example that prints the poly and edge indices of a Selection tag:

> \> Bool MenuTest::Execute(BaseDocument \*doc) \> { \>      BaseObject \*op = NULL; \>      op = doc->GetActiveObject(); \>      if(!op) return TRUE; \> \>      if(op->GetType() == Opolygon) \>      { \>           SelectionTag \*tag = NULL; \>           tag = (SelectionTag\* )op->GetTag(Tedgeselection, 0); \> \>           if(tag) \>           { \>                BaseSelect \*sel = NULL; \>                sel = tag->GetBaseSelect(); \>                if(sel) \>                { \>                     LONG seg=0,a,b,i; \> \>                     while (sel->GetRange(seg++,&a;,&b;)) \>                     { \>                          for (i=a; i<=b; ++i) \>                          { \>                               LONG polyindex = i/4; \>                               LONG edgeindex = Mod(i,4); \> \>                               GePrint("poly index "+LongToString(polyindex)); \>                               GePrint("edge index "+LongToString(edgeindex)); \>                          } \>                     } \>                } \>           } \>      } \> \>      return TRUE; \> } \>

cheers,
Matthias