Handle(SALOMEDSImpl_StudyBuilder) builder = NewBuilder();
Handle(SALOMEDSImpl_SObject) so = FindComponent((char*)theID);
if(so.IsNull()) so = builder->NewComponent((char*)theID);
- Handle(SALOMEDSImpl_SObject) newSO;
+ Handle(SALOMEDSImpl_AttributeParameter) attParam;
if(theSavePoint == 0) //Get an attribute that is placed on the component itself.
- newSO = so;
- else
- newSO = builder->NewObjectToTag(so, theSavePoint);
- return Handle(SALOMEDSImpl_AttributeParameter)::DownCast(builder->FindOrCreateAttribute(newSO, "AttributeParameter"));
+ builder->FindAttribute(so, attParam, "AttributeParameter");
+ else { // Try to find SObject that contains attribute parameter ...
+ TDF_Label savePointLabel = so->GetLabel().FindChild( theSavePoint, /*create=*/0 );
+ if ( !savePointLabel.IsNull() ) {
+ so = GetSObject( savePointLabel );
+ builder->FindAttribute(so, attParam, "AttributeParameter");
+ } // ... if it does not exist - create a new one
+ else {
+ so = builder->NewObjectToTag( so, theSavePoint );
+ Handle(TDF_Attribute) att = builder->FindOrCreateAttribute(so, "AttributeParameter");
+ attParam = Handle(SALOMEDSImpl_AttributeParameter)::DownCast( att );
+ }
+ }
+ return attParam;
}
//============================================================================