
Thu, 04/15/2010 - 18:54
Forums:
Hello,
I'm an OCC Newbie and try to select programmatically an AIS_Shape. If I only select one shape, it works. If I try to select more than one shape, only the last selected is marked as selected in the viewer. (multiple selection with the mouse works)
loop over a list of shapes
{
AisContext->SetSelected(aAisShape);
}
How can I select multiple shapes?
Can anyone help me? Thanks in advance.
Peter
Sat, 04/17/2010 - 22:38
Hello. I have the same problem. I also would like to know the solution.
Sun, 04/18/2010 - 00:21
Hi! It's work for me when I select group.
Try next code:
void objectView::tryToSelectGroup()
{
Handle_TPrsStd_AISPresentation CurrentPrs;
if ((!CurrentHighLightedLabels.IsEmpty())&&(!nowSelectedLabels.IsEmpty())) //Ïîïûòàþñü îáëåã÷èòü âûäåëåíèå.
{
for (TDF_ListIteratorOfLabelList itneed(CurrentHighLightedLabels); itneed.More(); itneed.Next())
{
for (TDF_ListIteratorOfLabelList itnow(nowSelectedLabels); itnow.More(); itnow.Next())
{
if (itnow.Value()==itneed.Value())
{
nowSelectedLabels.Remove(itnow);
break;
}
}
}
}
if (!nowSelectedLabels.IsEmpty()) //Óæå âûäåëåííûå ìåòêè
{
for (TDF_ListIteratorOfLabelList it(nowSelectedLabels); it.More(); it.Next())
{
if (!it.Value().FindAttribute(TPrsStd_AISPresentation::GetID(),CurrentPrs)) continue;
if (myContext->IsSelected(CurrentPrs->GetAIS()))
myContext->AddOrRemoveSelected(CurrentPrs->GetAIS());
}
nowSelectedLabels.Clear();
}
if (!CurrentHighLightedLabels.IsEmpty()) //Ìåòêè, êîòîðûå íóæíî âûäåëèòü
{
for (TDF_ListIteratorOfLabelList it(CurrentHighLightedLabels); it.More(); it.Next())
{
if (!it.Value().FindAttribute(TPrsStd_AISPresentation::GetID(),CurrentPrs)) continue;
if (!myContext->IsSelected(CurrentPrs->GetAIS()))
myContext->AddOrRemoveSelected(CurrentPrs->GetAIS());
nowSelectedLabels.Append(it.Value());
}
}
else
myContext->Select(); //Åñëè íè÷åãî íåò âûäåëåííîãî, òîãäà ïðîñòî ñíèìàþ âûäåëåíèÿ
}
Sun, 04/18/2010 - 18:18
Thank you! I understand.
Sun, 04/18/2010 - 19:24
Although no. That is my problem:
//----------
cAISContext->OpenLocalContext();
cAISContext->OpenLocalContext();
cAISContext->CloseLocalContext();
Handle_AIS_Shape S1 = new AIS_Shape(BRepPrimAPI_MakeBox(gp_Pnt(0,0,0), 1,1,1));
cAISContext->Display(S1, 1);
cAISContext->AddOrRemoveSelected(S1, 1);
Standard_Boolean b = cAISContext->IsSelected(S1);
// b == 0 <- problem
// cAISContext->SetSelected(S1) works correctly in this case
//----------
 îáùåì â ëîêàëüíîì êîíòåêñòå ïîñëå îòêðûòèÿ è çàêðûòèÿ äðóãîãî êîíòåêñòà SetSelected() ðàáîòàåò ïðàâèëüíî, à ïîñëå AddOrRemoveSelected() îáúåêò âûäåëÿåòñÿ òîëüêî ïîñëå ïîäâåäåíèÿ ìûøêè ê íåìó. Íå ïîéìó ïî÷åìó òàê.
Sun, 04/18/2010 - 21:21
Âîò è îòëè÷íî. ß â OCAF ñäåëàë ìåòêó ñ äðàéâåðîì Group. íà âòîðîé óðîâåíü çàøèâàþ èìåíà âñåõ îáúåêòîâ, êîòîðûå âõîäÿò â ãðóïïó. À äëÿ îáúåêòîâ, âõîäÿùèõ â ãðóïïó íà òðåòüåì óðîâíå çàøèâàþ èìÿ ãðóïïû. Ïîëó÷èëîñü íå ïëîõî. Ó ìåíÿ íåò ïðîáëåì ñ âûäåëåíèÿìè.
P.S. Ðàä âñòðå÷å ñ ðóññêîÿçû÷íûì ïîëüçîâàòåëåì ! Óäà÷è â ðàçðàáîòêàõ.
Sun, 04/18/2010 - 22:17
int. à êàê ïðîèñõîäèò âûäåëåíèå, èç êàêîãî-òî äèàëîãîâîãî îêíà ??? ìîæåò áûòü ýòî âèäæåòû ïàðÿò. Ïîñëå âûäåëåíèÿ íóæíî îáÿçàòåëüíî îáíîâèòü âüþâåð â ýòîì ñëó÷àå.
Åñëè äîáàâèòü îáúåêòû â TDF_LabelList òî ïîòîì ìîæíî èõ âñåõ îòðàáîòàòü, âûäåëèòü èëè ñíÿòü âûäåëåíèå... íî îïÿòü æå ïîñëå ýòîãî íóæíî îáíîâèòü âüþâåð. â ìîåì ïðèìåðå âñå ýòî íàãëÿäíî ïîêàçàíî
Mon, 04/19/2010 - 01:13
Please refer to lanuage policy on the very first post on this forum
http://www.opencascade.org/org/forum/thread_1
pete
Mon, 04/19/2010 - 02:58
ok!
Mon, 04/19/2010 - 14:01
No, the problem is in the code that I showed above.
I found that if after CloseLocalContext () to add cAISContext->ClearSelected (), then AddOrRemoveSelected () will work correctly. Maybe it's a bug, but maybe my misunderstanding.
------
I never worked with OCAF.
-----
Thank you, I am glad to meet you too!