if ( !theLabel.FindAttribute(TPrsStd_AISPresentation::GetID(), aPresentation) )
{
aPresentation = new TPrsStd_AISPresentation();
- aPresentation->myData = aData;
theLabel.AddAttribute(aPresentation);
}
//=======================================================================
Handle(TPrsStd_AISPresentation) TPrsStd_AISPresentation::Set(const Handle(TDF_Attribute)& theMaster)
{
- Handle(TPrsStd_AISPresentation) aPresentation;
- // create associated data (unless already there)
- Handle(TDataXtd_Presentation) aData = TDataXtd_Presentation::Set (theMaster->Label(), theMaster->ID());
- if(aData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( !theMaster->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), aPresentation) )
- {
- aPresentation = new TPrsStd_AISPresentation ();
- aPresentation->myData = aData;
- theMaster->Label().AddAttribute(aPresentation);
- }
-
- return aPresentation;
+ return TPrsStd_AISPresentation::Set(theMaster->Label(), theMaster->ID());
}
//=======================================================================
Handle(TDataXtd_Presentation) TPrsStd_AISPresentation::getData () const
{
Handle(TDataXtd_Presentation) aData;
- Label().FindAttribute(TDataXtd_Presentation::GetID(), aData);
+ if (!Label().FindAttribute(TDataXtd_Presentation::GetID(), aData))
+ Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
return aData;
}
return TPrsStd_AISPresentationID;
}
-
//=======================================================================
//function : Display
//purpose :
AISDisplay();
}
-
//=======================================================================
//function : Erase
//purpose :
if ( IsDisplayed() )
{
AISErase(theIsRemove);
- //SetDisplayed (Standard_False);
}
}
AISUpdate();
}
-
//=======================================================================
//function : IsDisplayed
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::IsDisplayed() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->IsDisplayed();
+ return getData()->IsDisplayed();
}
-
//=======================================================================
//function : SetDisplayed
//purpose :
{
// this method can be called by AISUpdate() in the process of removal,
// while data attribute may be already removed
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- myData->SetDisplayed(theIsDisplayed);
+ Backup();
+ getData()->SetDisplayed(theIsDisplayed);
}
-
//=======================================================================
//function :SetDriverGUID
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetDriverGUID(const Standard_GUID& theGUID)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- myData->SetDriverGUID (theGUID);
+ Backup();
+ getData()->SetDriverGUID (theGUID);
}
-
//=======================================================================
//function :GetDriverGUID
//purpose :
//=======================================================================
Standard_GUID TPrsStd_AISPresentation::GetDriverGUID() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->GetDriverGUID();
+ return getData()->GetDriverGUID();
}
-
//=======================================================================
//function :Material
//purpose :
//=======================================================================
Graphic3d_NameOfMaterial TPrsStd_AISPresentation::Material() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return (Graphic3d_NameOfMaterial)myData->MaterialIndex();
+ return (Graphic3d_NameOfMaterial)getData()->MaterialIndex();
}
//=======================================================================
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnMaterial() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnMaterial();
+ return getData()->HasOwnMaterial();
}
//=======================================================================
//=======================================================================
void TPrsStd_AISPresentation::UnsetMaterial()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( ! myData->HasOwnMaterial() && ! myAIS.IsNull() && !myAIS->HasMaterial() )
+ if ( !getData()->HasOwnMaterial() && !myAIS.IsNull() && !myAIS->HasMaterial() )
return;
- myData->UnsetMaterial();
+ getData()->UnsetMaterial();
if ( myAIS.IsNull() )
AISUpdate();
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetMaterial(const Graphic3d_NameOfMaterial theName)
-{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
-
- if ( myData->HasOwnMode() && myData->MaterialIndex() == theName )
+{
+ Backup();
+ if ( getData()->HasOwnMode() && getData()->MaterialIndex() == theName )
if ( !myAIS.IsNull() && myAIS->HasMaterial() && myAIS->Material() == theName )
return;
- myData->SetMaterialIndex(theName);
+ getData()->SetMaterialIndex(theName);
if ( myAIS.IsNull() )
AISUpdate();
//=======================================================================
Standard_Real TPrsStd_AISPresentation::Transparency() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->Transparency();
+ return getData()->Transparency();
}
//=======================================================================
//=======================================================================
void TPrsStd_AISPresentation::SetTransparency(const Standard_Real theValue)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if (myData->HasOwnTransparency() && myData->Transparency() == theValue)
+ Backup();
+ if (getData()->HasOwnTransparency() && getData()->Transparency() == theValue)
if ( !myAIS.IsNull() && myAIS->Transparency() == theValue )
return;
- myData->SetTransparency(theValue);
+ getData()->SetTransparency(theValue);
if ( myAIS.IsNull() )
AISUpdate();
}
}
-
//=======================================================================
//function :UnsetTransparency
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetTransparency()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if (! myData->HasOwnTransparency())
+ if (!getData()->HasOwnTransparency())
return;
- myData->UnsetTransparency();
+ getData()->UnsetTransparency();
if ( myAIS.IsNull() )
AISUpdate();
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnTransparency() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnTransparency();
+ return getData()->HasOwnTransparency();
}
-
//=======================================================================
//function : Color
//purpose :
//=======================================================================
Quantity_NameOfColor TPrsStd_AISPresentation::Color() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->Color();
+ return getData()->Color();
}
//=======================================================================
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnColor() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnColor();
+ return getData()->HasOwnColor();
}
//=======================================================================
//=======================================================================
void TPrsStd_AISPresentation::UnsetColor()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if (!myData->HasOwnColor() && ! myAIS.IsNull() && !myAIS->HasColor())
+ if (!getData()->HasOwnColor() && ! myAIS.IsNull() && !myAIS->HasColor())
return;
- myData->UnsetColor();
+ getData()->UnsetColor();
if ( myAIS.IsNull() )
AISUpdate();
//=======================================================================
void TPrsStd_AISPresentation::SetColor(const Quantity_NameOfColor theColor)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( myData->HasOwnColor() && myData->Color() == theColor )
+ Backup();
+ if ( getData()->HasOwnColor() && getData()->Color() == theColor )
if ( !myAIS.IsNull() && myAIS->HasColor() && myAIS->Color() == theColor )
return;
- myData->SetColor(theColor);
+ getData()->SetColor(theColor);
if ( myAIS.IsNull() )
AISUpdate();
}
}
-
//=======================================================================
//function :Width
//purpose :
//=======================================================================
Standard_Real TPrsStd_AISPresentation::Width() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->Width();
+ return getData()->Width();
}
//=======================================================================
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnWidth() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnWidth();
+ return getData()->HasOwnWidth();
}
//=======================================================================
//=======================================================================
void TPrsStd_AISPresentation::SetWidth(const Standard_Real theWidth)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( myData->HasOwnWidth() && myData->Width() == theWidth )
+ Backup();
+ if ( getData()->HasOwnWidth() && getData()->Width() == theWidth )
if ( !myAIS.IsNull() && myAIS->HasWidth() && myAIS->Width() == theWidth )
return;
- myData->SetWidth(theWidth);
+ getData()->SetWidth(theWidth);
if( !myAIS.IsNull() )
{
//=======================================================================
void TPrsStd_AISPresentation::UnsetWidth()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( !myData->HasOwnWidth() )
+ if ( !getData()->HasOwnWidth() )
if ( !myAIS.IsNull() && !myAIS->HasWidth() )
return;
- myData->UnsetWidth();
+ getData()->UnsetWidth();
if( myAIS.IsNull() )
AISUpdate();
}
}
-
//=======================================================================
//function : Mode
//purpose :
//=======================================================================
-
Standard_Integer TPrsStd_AISPresentation::Mode() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->Mode();
+ return getData()->Mode();
}
//=======================================================================
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnMode() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnMode();
+ return getData()->HasOwnMode();
}
-
//=======================================================================
//function : SetMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetMode(const Standard_Integer theMode)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( myData->HasOwnMode() && myData->Mode() == theMode )
+ Backup();
+ if ( getData()->HasOwnMode() && getData()->Mode() == theMode )
if ( !myAIS.IsNull() && myAIS->DisplayMode() == theMode )
return;
- myData->SetMode(theMode);
+ getData()->SetMode(theMode);
if ( myAIS.IsNull() )
AISUpdate();
}
}
-
//=======================================================================
//function : UnsetMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetMode()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- if ( !myData->HasOwnMode() )
+ if ( !getData()->HasOwnMode() )
if ( !myAIS.IsNull() && !myAIS->HasDisplayMode() )
return;
- myData->UnsetMode();
+ getData()->UnsetMode();
if ( myAIS.IsNull() )
AISUpdate();
//function : SelectionMode
//purpose :
//=======================================================================
-
Standard_Integer TPrsStd_AISPresentation::SelectionMode() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->SelectionMode();
+ return getData()->SelectionMode();
}
//=======================================================================
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnSelectionMode() const
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- return myData->HasOwnSelectionMode();
+ return getData()->HasOwnSelectionMode();
}
//=======================================================================
//=======================================================================
void TPrsStd_AISPresentation::SetSelectionMode(const Standard_Integer theSelectionMode)
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- myData->SetSelectionMode (theSelectionMode);
-
+ Backup();
+ getData()->SetSelectionMode (theSelectionMode);
AISUpdate();
}
//=======================================================================
void TPrsStd_AISPresentation::UnsetSelectionMode()
{
- if(myData.IsNull())
- Standard_NoMoreObject::Raise (NO_MORE_OBJECT);
- myData->UnsetSelectionMode ();
-
+ getData()->UnsetSelectionMode ();
AISUpdate();
}
myAIS.Nullify();
}
-
//=======================================================================
//function : Paste
//purpose :
anInto->Backup();
anInto->myAIS.Nullify();
- anInto->myData.Nullify();
}
-
//=======================================================================
//function : AfterAddition
//purpose : erase if displayed
{ // Remove AISObject from context.
AISErase(Standard_True);
myAIS.Nullify();
- myData.Nullify();
}
}
-
//=======================================================================
//function : AfterResume
//purpose : display if displayed
//=======================================================================
void TPrsStd_AISPresentation::AfterResume()
{
- myData = getData();
AISUpdate();
if ( IsDisplayed() )
AISDisplay();
//function : BeforeUndo
//purpose : le NamedShape associe doit etre present
//=======================================================================
-
Standard_Boolean TPrsStd_AISPresentation::BeforeUndo (const Handle(TDF_AttributeDelta)& AD,
- const Standard_Boolean )
+ const Standard_Boolean )
{
Handle(TPrsStd_AISPresentation) P;
AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
return Standard_True;
}
-
//=======================================================================
//function : AfterUndo
//purpose : le NamedShape associe doit etre present
//=======================================================================
-
Standard_Boolean TPrsStd_AISPresentation::AfterUndo (const Handle(TDF_AttributeDelta)& AD,
const Standard_Boolean )
{
return Standard_True;
}
-
//=======================================================================
//function : AISUpdate
//purpose :
void TPrsStd_AISPresentation::AISUpdate()
{
Backup();
- myData->Backup();
+ getData()->Backup();
Handle(AIS_InteractiveContext) aContext;
if ( !Label().IsNull() )
{
if ( aDriver->Update(Label(), aNewObj) )
{
myAIS = aNewObj;
- myData = getData();
aNewObj->SetOwner(this);
}
}
// Driver has built new AIS.
myAIS = anObj;
- myData = getData();
anObj->SetOwner(this);
}
}
aContext->Redisplay(myAIS, Standard_False);
if (HasOwnSelectionMode()) {
- //aContext = aContext.IsNull() ? myAIS->GetContext() : aContext;
if (!aContext.IsNull())
{
TColStd_ListOfInteger anActivatedModes;
aContext->ActivatedModes (myAIS, anActivatedModes);
Standard_Boolean isActivated = Standard_False;
Standard_Integer aSelectionMode = SelectionMode();
- for (TColStd_ListIteratorOfListOfInteger aModeIter (anActivatedModes); aModeIter.More(); aModeIter.Next())
+ if (aSelectionMode == -1)
{
- if (aModeIter.Value() == aSelectionMode)
+ aContext->Deactivate(myAIS);
+ }
+ else
+ {
+ for (TColStd_ListIteratorOfListOfInteger aModeIter (anActivatedModes); aModeIter.More(); aModeIter.Next())
{
- isActivated = Standard_True;
- break;
+ if (aModeIter.Value() == aSelectionMode)
+ {
+ isActivated = Standard_True;
+ break;
+ }
}
+ if (!isActivated)
+ aContext->Activate (myAIS, aSelectionMode, Standard_False);
}
-
- if (!isActivated)
- aContext->Activate (myAIS, aSelectionMode, Standard_False);
}
}
}
}
-
//=======================================================================
//function : AISErase
//purpose :
if ( !myAIS.IsNull() )
{
Backup();
- myData->Backup();
- SetDisplayed(Standard_False);
if ( !Label().IsNull() )
{
+ if (IsAttribute(TDataXtd_Presentation::GetID()))
+ SetDisplayed(Standard_False);
+
Handle(TPrsStd_AISViewer) viewer;
if( !TPrsStd_AISViewer::Find(Label(), viewer) )
return;
}
}
-
//=======================================================================
//function :GetAIS
//purpose :
return myAIS;
}
-
//=======================================================================
//function : getAISContext
//purpose :