- // 1. find the initial value of the color
- AttributeColorPtr aColorAttr;
- foreach(ObjectPtr anObj, theObjects) {
- ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(anObj);
- if (aResult.get() != NULL) {
- AttributePtr anAttr = aResult->data()->attribute(ModelAPI_Result::COLOR_ID());
- if (anAttr.get() != NULL)
- aColorAttr = std::dynamic_pointer_cast<ModelAPI_AttributeColor>(anAttr);
+ AttributeIntArrayPtr aColorAttr;
+ // 1. find the current color of the object. This is a color of AIS presentation
+ // The objects are iterated until a first valid color is found
+ std::vector<int> aColor;
+ foreach(ObjectPtr anObject, theObjects) {
+ if (anObject->groupName() == ModelAPI_ResultPart::group()) {
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(anObject);
+ DocumentPtr aPartDoc = aPart->partDoc();
+ // the document should be checked on null, because in opened document if the part
+ // has not been activated yet, the part document is empty
+ if (!aPartDoc.get()) {
+ emit errorOccurred(QString::fromLatin1("Color can not be changed on a part with an empty document"));
+ }
+ else {
+ if (aPartDoc->size(ModelAPI_ResultBody::group()) > 0) {
+ ObjectPtr aObject = aPartDoc->object(ModelAPI_ResultBody::group(), 0);
+ ResultBodyPtr aBody = std::dynamic_pointer_cast<ModelAPI_ResultBody>(aObject);
+ if (aBody.get()) {
+ std::string aSection, aName, aDefault;
+ aBody->colorConfigInfo(aSection, aName, aDefault);
+ if (!aSection.empty() && !aName.empty()) {
+ aColor = Config_PropManager::color(aSection, aName, aDefault);
+ }
+ }
+ }
+ }