1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00
occt/src/TPrsStd/TPrsStd_AISPresentation.cxx
bugmster 973c2be1e1 0024428: Implementation of LGPL license
The copying permission statements at the beginning of source files updated to refer to LGPL.
Copyright dates extended till 2014 in advance.
2013-12-17 12:42:41 +04:00

1077 lines
31 KiB
C++

// Created on: 1998-09-30
// Created by: Sergey RUIN
// Copyright (c) 1998-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and / or modify it
// under the terms of the GNU Lesser General Public version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
// Lastly modified by :
// +---------------------------------------------------------------------------+
// ! ivan ! SetMode ! 5-04-2001! 3.0-00-1!
// +---------------------------------------------------------------------------+
#include <TPrsStd_AISPresentation.ixx>
#include <TDF_DefaultDeltaOnRemoval.hxx>
#include <TDF_DefaultDeltaOnModification.hxx>
#include <TDF_DeltaOnAddition.hxx>
#include <TDF_Tool.hxx>
#include <TCollection_ExtendedString.hxx>
#include <TPrsStd_AISViewer.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_InteractiveObject.hxx>
#include <TPrsStd_Driver.hxx>
#include <TPrsStd_DriverTable.hxx>
#define BUC60917
#define BUC61050
#define OCC1029
#define OCC1030
#define OCC1031
#define OCC1032
#define OCC1033
#define OCC1034
//=======================================================================
//function : Set
//purpose :
//=======================================================================
Handle(TPrsStd_AISPresentation) TPrsStd_AISPresentation::Set(const TDF_Label& L,const Standard_GUID& driver)
{
Handle(TPrsStd_AISPresentation) P;
if (!L.FindAttribute(TPrsStd_AISPresentation::GetID(),P)) {
P = new TPrsStd_AISPresentation ();
L.AddAttribute(P);
}
P->SetDriverGUID(driver);
return P;
}
//=======================================================================
//function : Unset
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Unset (const TDF_Label& L)
{
Handle(TPrsStd_AISPresentation) P;
if (L.FindAttribute(TPrsStd_AISPresentation::GetID(),P)) {
L.ForgetAttribute(P);
}
}
//=======================================================================
//function : Set
//purpose :
//=======================================================================
Handle(TPrsStd_AISPresentation) TPrsStd_AISPresentation::Set (const Handle(TDF_Attribute)& master)
{
Handle(TPrsStd_AISPresentation) P;
if (!master->Label().FindAttribute(TPrsStd_AISPresentation::GetID(),P)) {
P = new TPrsStd_AISPresentation ();
master->Label().AddAttribute(P);
}
P->SetDriverGUID( master->ID() );
return P;
}
//=======================================================================
//function : GetID
//purpose :
//=======================================================================
const Standard_GUID& TPrsStd_AISPresentation::GetID()
{
static Standard_GUID TPrsStd_AISPresentationID("04fb4d00-5690-11d1-8940-080009dc3333");
return TPrsStd_AISPresentationID;
}
//=======================================================================
//function : TPrsStd_AISPresentation
//purpose :
//=======================================================================
TPrsStd_AISPresentation::TPrsStd_AISPresentation () :
myDriverGUID("00000000-0000-0000-0000-000000000000"),
myTransparency(0.),
myColor(Quantity_NOC_WHITE),
myMaterial(Graphic3d_NOM_BRASS),
myWidth(0.),
#ifdef BUC61050
myMode(0),
mySelectionMode(0),
#endif
isDisplayed(Standard_False),
hasOwnColor(Standard_False),
hasOwnMaterial(Standard_False),
hasOwnTransparency(Standard_False),
hasOwnWidth(Standard_False)
#ifdef BUC61050
,hasOwnMode(Standard_False),
hasOwnSelectionMode(Standard_False)
#endif
{}
//=======================================================================
//function : Display
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Display (const Standard_Boolean update)
{
if( update || myAIS.IsNull() ) {
AISUpdate();
}
AISDisplay();
}
//=======================================================================
//function : Erase
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Erase (const Standard_Boolean remove)
{
if( isDisplayed ) AISErase(remove);
}
//=======================================================================
//function : Update
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Update ()
{
AISUpdate();
}
//=======================================================================
//function : IsDisplayed
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::IsDisplayed () const
{
return isDisplayed;
}
//=======================================================================
//function :SetDriverGUID
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetDriverGUID(const Standard_GUID& guid)
{
// OCC2932 correction
if(myDriverGUID == guid) return;
Backup();
myDriverGUID = guid;
}
//=======================================================================
//function :GetDriverGUID
//purpose :
//=======================================================================
Standard_GUID TPrsStd_AISPresentation::GetDriverGUID() const
{
return myDriverGUID;
}
//=======================================================================
//function :Material
//purpose :
//=======================================================================
Graphic3d_NameOfMaterial TPrsStd_AISPresentation::Material() const
{
return myMaterial;
}
//=======================================================================
//function :HasMaterial
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnMaterial() const
{
return hasOwnMaterial;
}
//=======================================================================
//function :UnsetMaterial
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetMaterial()
{
// OCC2932 correction
if(hasOwnMaterial == Standard_False && !myAIS.IsNull()) {
if(!myAIS->HasMaterial())
return;
}
Backup();
hasOwnMaterial = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasMaterial() ) {
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->UnsetMaterial(myAIS, Standard_False);
else
myAIS->UnsetMaterial();
}
}
//=======================================================================
//function :SetMaterial
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetMaterial(const Graphic3d_NameOfMaterial aName)
{
// OCC2932 correction
if(myMaterial == aName && hasOwnMaterial == Standard_True && !myAIS.IsNull()) {
if(myAIS->HasMaterial() && myAIS->Material() == aName)
return;
}
Backup();
myMaterial = aName;
hasOwnMaterial = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->HasMaterial() && myAIS->Material() == aName ) return; // AIS has already had that material
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->SetMaterial(myAIS, aName, Standard_False);
else
myAIS->SetMaterial(aName);
}
}
//=======================================================================
//function :SetTransparency
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetTransparency(const Standard_Real aValue)
{
// OCC2932 correction
if(hasOwnTransparency == Standard_True && myTransparency == aValue && !myAIS.IsNull())
if(myAIS->Transparency() == aValue)
return;
Backup();
myTransparency = aValue;
hasOwnTransparency = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->Transparency() == aValue ) return; // AIS has already had that transparency
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->SetTransparency(myAIS, aValue, Standard_False);
else
myAIS->SetTransparency(aValue);
}
}
//=======================================================================
//function :Transparency
//purpose :
//=======================================================================
Standard_Real TPrsStd_AISPresentation::Transparency() const
{
return myTransparency;
}
//=======================================================================
//function :UnsetTransparency
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetTransparency()
{
// OCC2932 correction
if(!hasOwnTransparency)
return;
Backup();
hasOwnTransparency = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->UnsetTransparency(myAIS, Standard_False);
else
myAIS->UnsetTransparency();
}
}
//=======================================================================
//function :HasTransparency
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnTransparency() const
{
return hasOwnTransparency;
}
//=======================================================================
//function :Color
//purpose :
//=======================================================================
Quantity_NameOfColor TPrsStd_AISPresentation::Color() const
{
return myColor;
}
//=======================================================================
//function :HasColor
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnColor() const
{
return hasOwnColor;
}
//=======================================================================
//function :UnsetColor
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetColor()
{
// OCC2932 correction
if(!hasOwnColor && !myAIS.IsNull())
if(!myAIS->HasColor())
return;
Backup();
hasOwnColor = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasColor() ) {
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->UnsetColor(myAIS, Standard_False);
else
myAIS->UnsetColor();
}
}
//=======================================================================
//function :SetColor
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetColor(const Quantity_NameOfColor aColor)
{
// OCC2932 correction
if(hasOwnColor && myColor == aColor && ! myAIS.IsNull())
if(myAIS->HasColor() && myAIS->Color() == aColor )
return;
Backup();
myColor = aColor;
hasOwnColor = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->HasColor() && myAIS->Color() == aColor ) return; // AIS has already had that color
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->SetColor(myAIS, aColor, Standard_False);
else
myAIS->SetColor(aColor);
}
}
//=======================================================================
//function :Width
//purpose :
//=======================================================================
Standard_Real TPrsStd_AISPresentation::Width() const
{
return myWidth;
}
//=======================================================================
//function :HasWidth
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnWidth() const
{
return hasOwnWidth;
}
//=======================================================================
//function :SetWidth
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetWidth(const Standard_Real aWidth)
{
// OCC2932 correction
if(hasOwnWidth && myWidth == aWidth && myAIS.IsNull())
if(myAIS->HasWidth() && myAIS->Width() == aWidth )
return;
Backup();
myWidth = aWidth;
hasOwnWidth = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->HasWidth() && myAIS->Width() == aWidth ) return; // AIS has already had that width
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->SetWidth(myAIS, aWidth, Standard_False);
else
myAIS->SetWidth(aWidth);
}
}
//=======================================================================
//function :UnsetWidth
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetWidth()
{
// OCC2932 correction
if(!hasOwnWidth && !myAIS.IsNull())
if(!myAIS->HasWidth())
return;
Backup();
hasOwnWidth = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasWidth() ) {
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->UnsetWidth(myAIS, Standard_False);
else
myAIS->UnsetWidth();
}
}
//=======================================================================
//function : Mode
//purpose :
//=======================================================================
Standard_Integer TPrsStd_AISPresentation::Mode() const
{
return myMode;
}
//=======================================================================
//function :HasOwnMode
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnMode() const
{
return hasOwnMode;
}
//=======================================================================
//function :SetMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetMode(const Standard_Integer theMode)
{
// OCC2932 correction
if(hasOwnMode && myMode == theMode && !myAIS.IsNull())
if(myAIS->DisplayMode() == theMode )
return;
Backup();
myMode = theMode;
hasOwnMode = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->DisplayMode() == theMode ) return; // AIS has already had that mode
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) )
ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->SetDisplayMode(myAIS, theMode, Standard_False);
else
myAIS->SetDisplayMode(theMode);
}
}
//=======================================================================
//function :UnsetMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetMode()
{
// OCC2932 correction
if(HasOwnMode() == Standard_False && myAIS.IsNull() == Standard_False)
if(!myAIS->HasDisplayMode())
return;
Backup();
hasOwnMode = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasDisplayMode() ) {
Handle(AIS_InteractiveContext) ctx;
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) )
ctx = viewer->GetInteractiveContext();
if( !ctx.IsNull() )
ctx->UnsetDisplayMode(myAIS, Standard_False);
else
myAIS->UnsetDisplayMode();
}
}
#ifdef BUC61050
//=======================================================================
//function : SelectionMode
//purpose :
//=======================================================================
Standard_Integer TPrsStd_AISPresentation::SelectionMode() const
{
return mySelectionMode;
}
//=======================================================================
//function :HasOwnSelectionMode
//purpose :
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::HasOwnSelectionMode() const
{
return hasOwnSelectionMode;
}
//=======================================================================
//function :SetSelectionMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetSelectionMode(const Standard_Integer theSelectionMode)
{
// OCC2932 correction
if(hasOwnSelectionMode && mySelectionMode == theSelectionMode && !myAIS.IsNull())
if(myAIS->SelectionMode() == theSelectionMode )
return;
Backup();
mySelectionMode = theSelectionMode;
hasOwnSelectionMode = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->SelectionMode() == theSelectionMode ) return;
myAIS->SetSelectionMode(theSelectionMode);
}
}
//=======================================================================
//function :UnsetSelectionMode
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::UnsetSelectionMode()
{
if(!hasOwnSelectionMode && !myAIS.IsNull())
if(!myAIS->HasSelectionMode())
return;
Backup();
hasOwnSelectionMode = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasSelectionMode() ) {
myAIS->UnsetSelectionMode();
}
}
#endif
//=======================================================================
//function : ID
//purpose :
//=======================================================================
const Standard_GUID& TPrsStd_AISPresentation::ID() const { return GetID(); }
//=======================================================================
//function : BackupCopy
//purpose :
//=======================================================================
Handle(TDF_Attribute) TPrsStd_AISPresentation::BackupCopy() const
{
Handle(TPrsStd_AISPresentation) copy = new TPrsStd_AISPresentation;
copy->myTransparency = myTransparency;
copy->myColor = myColor;
copy->myMode= myMode;
#ifdef BUC60917
copy->myWidth= myWidth;
#endif
copy->myMaterial = myMaterial;
copy->hasOwnColor = hasOwnColor;
copy->hasOwnMaterial = hasOwnMaterial;
copy->hasOwnWidth = hasOwnWidth;
copy->hasOwnMode=hasOwnMode;
copy->hasOwnTransparency = hasOwnTransparency;
copy->myAIS.Nullify();
copy->isDisplayed = isDisplayed;
copy->myDriverGUID = myDriverGUID;
#ifdef BUC61050
copy->mySelectionMode= mySelectionMode;
copy->hasOwnSelectionMode = hasOwnSelectionMode;
#endif
return copy;
}
//=======================================================================
//function : NewEmpty
//purpose :
//=======================================================================
Handle(TDF_Attribute) TPrsStd_AISPresentation::NewEmpty() const
{
return new TPrsStd_AISPresentation ();
}
//=======================================================================
//function : Restore
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Restore (const Handle(TDF_Attribute)& With)
{
Handle(TPrsStd_AISPresentation) with = Handle(TPrsStd_AISPresentation)::DownCast(With);
myAIS.Nullify();
if(!with->HasOwnMaterial()) hasOwnMaterial = Standard_False;
else {
#ifndef OCC1031
myMaterial = with->Material();
#endif
hasOwnMaterial = Standard_True;
}
#ifdef OCC1031
myMaterial = with->Material();
#endif
if(!with->HasOwnColor()) hasOwnColor = Standard_False;
else {
#ifndef OCC1030
myColor = with->Color();
#endif
hasOwnColor = Standard_True;
}
#ifdef OCC1030
myColor = with->Color();
#endif
if(!with->HasOwnWidth()) hasOwnWidth = Standard_False;
else {
#ifndef OCC1032
myWidth = with->Width();
#endif
hasOwnWidth = Standard_True;
}
#ifdef OCC1032
myWidth = with->Width();
#endif
if(!with->HasOwnMode()) hasOwnMode = Standard_False;
else {
#ifndef OCC1033
myMode = with->Mode();
#endif
hasOwnMode = Standard_True;
}
#ifdef OCC1033
myMode = with->Mode();
#endif
#ifdef BUC61050
if(!with->HasOwnSelectionMode()) hasOwnSelectionMode = Standard_False;
else {
#ifndef OCC1034
mySelectionMode = with->SelectionMode();
#endif
hasOwnSelectionMode = Standard_True;
}
#ifdef OCC1034
mySelectionMode = with->SelectionMode();
#endif
#endif
if(!with->HasOwnTransparency()) hasOwnTransparency = Standard_False;
else {
#ifndef OCC1029
myTransparency = with->Transparency();
#endif
hasOwnTransparency = Standard_True;
}
#ifdef OCC1029
myTransparency = with->Transparency();
#endif
isDisplayed = with->IsDisplayed();
myDriverGUID = with->GetDriverGUID();
}
//=======================================================================
//function : Paste
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::Paste (const Handle(TDF_Attribute)& Into,
const Handle(TDF_RelocationTable)& ) const
{
Handle(TPrsStd_AISPresentation) into = Handle(TPrsStd_AISPresentation)::DownCast(Into);
into->Backup();
if(!hasOwnMaterial) into->hasOwnMaterial = Standard_False;
else {
into->myMaterial = myMaterial;
into->hasOwnMaterial = Standard_True;
}
if(!hasOwnColor) into->hasOwnColor = Standard_False;
else {
into->myColor = myColor;
into->hasOwnColor = Standard_True;
}
if(!hasOwnWidth) into->hasOwnWidth = Standard_False;
else {
into->myWidth = myWidth;
into->hasOwnWidth = Standard_True;
}
if(!hasOwnMode) into->hasOwnMode = Standard_False;
else {
into->myMode = myMode;
into->hasOwnMode = Standard_True;
}
#ifdef BUC61050
if(!hasOwnSelectionMode) into->hasOwnSelectionMode = Standard_False;
else {
into->mySelectionMode = mySelectionMode;
into->hasOwnSelectionMode = Standard_True;
}
#endif
if(!hasOwnTransparency) into->hasOwnTransparency = Standard_False;
else {
into->myTransparency = myTransparency;
into->hasOwnTransparency = Standard_True;
}
if (into->isDisplayed)
into->AISErase(Standard_True);
into->isDisplayed = isDisplayed;
into->myDriverGUID = myDriverGUID;
into->myAIS.Nullify();
}
//=======================================================================
//function : AfterAddition
//purpose : erase if displayed
//=======================================================================
void TPrsStd_AISPresentation::AfterAddition()
{
AfterResume();
}
//=======================================================================
//function : BeforeRemoval
//purpose : erase if displayed
//=======================================================================
void TPrsStd_AISPresentation::BeforeRemoval()
{
BeforeForget();
}
//=======================================================================
//function : BeforeForget
//purpose : erase if displayed
//=======================================================================
void TPrsStd_AISPresentation::BeforeForget()
{
if( !myAIS.IsNull() ) {
AISErase(Standard_True); //Remove AISObject from context
myAIS.Nullify();
}
}
//=======================================================================
//function : AfterResume
//purpose : display if displayed
//=======================================================================
void TPrsStd_AISPresentation::AfterResume()
{
AISUpdate();
if( IsDisplayed() ) AISDisplay();
else AISErase();
}
//=======================================================================
//function : BeforeUndo
//purpose : le NamedShape associe doit etre present
//=======================================================================
Standard_Boolean TPrsStd_AISPresentation::BeforeUndo (const Handle(TDF_AttributeDelta)& AD,
const Standard_Boolean )
{
Handle(TPrsStd_AISPresentation) P;
AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition))) {
if( !P.IsNull() ) P->BeforeForget();
}
else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval))) {
}
else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification))) {
if( !P.IsNull() ) P->BeforeForget();
}
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 )
{
Handle(TPrsStd_AISPresentation) P;
AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition))) {
}
else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval))) {
if( !P.IsNull() ) P->AfterAddition();
}
else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification))) {
if( !P.IsNull() ) P->AfterResume();
}
return Standard_True;
}
//=======================================================================
//function : AISUpdate
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::AISUpdate ()
{
Backup();
Handle(AIS_InteractiveContext) ctx;
if(!Label().IsNull()) {
Handle(TPrsStd_AISViewer) viewer;
if( TPrsStd_AISViewer::Find(Label(), viewer) ) ctx = viewer->GetInteractiveContext();
Handle(TPrsStd_Driver) driver;
if (TPrsStd_DriverTable::Get()->FindDriver(GetDriverGUID(), driver)) {
if (myAIS.IsNull()) { // build a new AIS
Handle(AIS_InteractiveObject) newais;
if (driver->Update (Label(), newais)) {
myAIS = newais;
newais->SetOwner(this);
}
}
else {
Handle(AIS_InteractiveObject) theais = myAIS;
if (driver->Update (Label(), theais)) {
if (! (theais == myAIS)) {
if(!ctx.IsNull()) ctx->Remove(myAIS);
myAIS = theais; //Driver has built new AIS
theais->SetOwner(this);
}
}
}
}
}
else return;
//Apply the visualization settings
if( !myAIS.IsNull() ) {
if( hasOwnColor ) {
if( !(myAIS->HasColor()) || (myAIS->HasColor() && myAIS->Color() != myColor) ) {
if(!ctx.IsNull()) ctx->SetColor(myAIS, myColor, Standard_False);
else myAIS->SetColor(myColor);
}
}
if( hasOwnMaterial ) {
if( !(myAIS->HasMaterial()) || (myAIS->HasMaterial() && myAIS->Material() != myMaterial) ) {
if(!ctx.IsNull()) ctx->SetMaterial(myAIS, myMaterial, Standard_False );
else myAIS->SetMaterial(myMaterial);
}
}
if( hasOwnTransparency ) {
if( myAIS->Transparency() != myTransparency ) {
if(!ctx.IsNull()) ctx->SetTransparency(myAIS, myTransparency, Standard_False);
else myAIS->SetTransparency(myTransparency);
}
}
if( hasOwnWidth ) {
if( !(myAIS->HasWidth()) || (myAIS->HasWidth() && myAIS->Width() != myWidth) ) {
if(!ctx.IsNull()) ctx->SetWidth(myAIS, myWidth, Standard_False);
else myAIS->SetWidth(myWidth);
}
}
if( hasOwnMode) {
if( myAIS->DisplayMode() != myMode ) {
myAIS->SetDisplayMode(myMode);
}
}
#ifdef BUC61050
if (hasOwnSelectionMode) {
if (myAIS->SelectionMode() != mySelectionMode ) {
myAIS->SetSelectionMode(mySelectionMode);
}
}
#endif
}
if( isDisplayed && !ctx.IsNull() ) ctx->Redisplay(myAIS, Standard_False);
return;
}
//=======================================================================
//function : AISDisplay
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::AISDisplay ()
{
if (!Label().IsNull()) {
Handle(TPrsStd_AISViewer) viewer;
if( !TPrsStd_AISViewer::Find(Label(), viewer) ) return;
Handle(AIS_InteractiveContext) ctx = viewer->GetInteractiveContext();
if( ctx.IsNull() ) return;
if (!myAIS.IsNull()) {
if( !(myAIS->GetContext()).IsNull() && (myAIS->GetContext()) != ctx ) myAIS->GetContext()->Remove(myAIS);
if( isDisplayed && ctx->IsDisplayed(myAIS) ) return;
ctx->Display(myAIS, Standard_False);
if( ctx->IsDisplayed(myAIS) ) SetDisplayed(Standard_True);
}
}
}
//=======================================================================
//function : AISErase
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::AISErase (const Standard_Boolean remove)
{
SetDisplayed(Standard_False);
Handle(AIS_InteractiveContext) ctx, ownctx;
if ( !myAIS.IsNull() ) {
if ( !Label().IsNull()) {
Handle(TPrsStd_AISViewer) viewer;
if( !TPrsStd_AISViewer::Find(Label(), viewer) ) return;
ownctx = myAIS->GetContext();
ctx = viewer->GetInteractiveContext();
if( remove ) {
if( !ctx.IsNull() ) ctx->Remove (myAIS,Standard_False);
if( !ownctx.IsNull() && ownctx != ctx ) ownctx->Remove (myAIS,Standard_False);
myAIS->SetToUpdate();
}
else {
if( !ctx.IsNull() ) ctx->Erase (myAIS,Standard_False);
if( !ownctx.IsNull() && ownctx != ctx ) ownctx->Erase (myAIS,Standard_False);
}
}
else {
if( remove ) {
if( !ownctx.IsNull() ) {
ownctx->Remove (myAIS,Standard_False);
myAIS->SetToUpdate();
}
} else
if( !ownctx.IsNull() ) ownctx->Erase (myAIS,Standard_False);
}
}
}
//=======================================================================
//function :GetAIS
//purpose :
//=======================================================================
Handle(AIS_InteractiveObject) TPrsStd_AISPresentation::GetAIS() const
{
return myAIS;
}
//=======================================================================
//function :SetDisplayed
//purpose :
//=======================================================================
void TPrsStd_AISPresentation::SetDisplayed(const Standard_Boolean B)
{
Backup();
isDisplayed = B;
}