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-3Here 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