GeomPresentablePtr aPrs = std::dynamic_pointer_cast<GeomAPI_IPresentable>(theObject);
bool isShading = false;
if (aPrs.get() != NULL) {
- anAIS = aPrs->getAISObject(AISObjectPtr());
+ anAIS = aPrs->getAISObject(anAIS);
} else {
ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
if (aResult.get() != NULL) {
}
aContext->Display(anAISIO, false);
aContext->SetDisplayMode(anAISIO, isShading? Shading : Wireframe, false);
+ if (isShading)
+ anAISIO->Attributes()->SetFaceBoundaryDraw( Standard_True );
emit objectDisplayed(theObject, theAIS);
bool isCustomized = customizeObject(theObject);
Handle(AIS_InteractiveContext) aContext = AISContext();
if (aContext.IsNull())
return;
- GetFilter()->Remove(theFilter);
+ Handle(SelectMgr_AndFilter) aCompositeFilter = GetFilter();
+ if (aCompositeFilter->IsIn(theFilter))
+ aCompositeFilter->Remove(theFilter);
}
void XGUI_Displayer::removeFilters()
if (aContext.IsNull() || theIO.IsNull())
return;
- aContext->Load(theIO, -1, true);
- aContext->Deactivate(theIO);
+ // deactivate object in all modes, which are not in the list of activation
+ TColStd_ListOfInteger aTColModes;
+ aContext->ActivatedModes(theIO, aTColModes);
+ TColStd_ListIteratorOfListOfInteger itr( aTColModes );
+ QIntList aModesActivatedForIO;
+ for (; itr.More(); itr.Next() ) {
+ Standard_Integer aMode = itr.Value();
+ if (!theModes.contains(aMode)) {
+#ifdef DEBUG_ACTIVATE
+ qDebug(QString("deactivate: %1").arg(aMode).toStdString().c_str());
+#endif
+ aContext->Deactivate(theIO, aMode);
+ }
+ else {
+ aModesActivatedForIO.append(aMode);
+#ifdef DEBUG_ACTIVATE
+ qDebug(QString(" active: %1").arg(aMode).toStdString().c_str());
+#endif
+ }
+ }
+ // loading the interactive object allowing the decomposition
+ if (aTColModes.IsEmpty())
+ aContext->Load(theIO, -1, true);
+
Handle(AIS_Trihedron) aTrihedron = Handle(AIS_Trihedron)::DownCast(theIO);
//Deactivate trihedron which can be activated in local selector
if (aTrihedron.IsNull()) {
if (theModes.size() == 0) {
//aContext->Load(anAISIO, 0, true);
aContext->Activate(theIO);
+#ifdef DEBUG_ACTIVATE
+ qDebug("activate in all modes");
+#endif
} else {
foreach(int aMode, theModes) {
//aContext->Load(anAISIO, aMode, true);
- aContext->Activate(theIO, aMode);
+ if (!aModesActivatedForIO.contains(aMode)) {
+ aContext->Activate(theIO, aMode);
+#ifdef DEBUG_ACTIVATE
+ qDebug(QString("activate: %1").arg(aMode).toStdString().c_str());
+#endif
+ }
}
}
}
}
return aCustomPrs->customisePresentation(aResult, anAISObj, myCustomPrs);
}
+
+
+QColor XGUI_Displayer::setObjectColor(ObjectPtr theObject, const QColor& theColor, bool toUpdate)
+{
+ if (!isVisible(theObject))
+ return Qt::black;
+
+ AISObjectPtr anAISObj = getAISObject(theObject);
+ int aR, aG, aB;
+ anAISObj->getColor(aR, aG, aB);
+ anAISObj->setColor(theColor.red(), theColor.green(), theColor.blue());
+ if (toUpdate)
+ updateViewer();
+ return QColor(aR, aG, aB);
+}