mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-15 04:30:42 +05:00
Store annotation data on AttributeParameter.
This commit is contained in:
parent
dd80de5b8c
commit
96407303b7
@ -77,7 +77,7 @@ SET(GEOMGUI_HEADERS
|
|||||||
GEOMGUI_TextTreeWdg.h
|
GEOMGUI_TextTreeWdg.h
|
||||||
GEOMGUI_VisualProperties.h
|
GEOMGUI_VisualProperties.h
|
||||||
GEOMGUI_DimensionProperty.h
|
GEOMGUI_DimensionProperty.h
|
||||||
GEOMGUI_ShapeAnnotations.h
|
GEOMGUI_AnnotationAttrs.h
|
||||||
)
|
)
|
||||||
|
|
||||||
# header files / to be processed by moc
|
# header files / to be processed by moc
|
||||||
@ -118,7 +118,7 @@ SET(GEOMGUI_SOURCES
|
|||||||
GEOMGUI_CreationInfoWdg.cxx
|
GEOMGUI_CreationInfoWdg.cxx
|
||||||
GEOMGUI_TextTreeWdg.cxx
|
GEOMGUI_TextTreeWdg.cxx
|
||||||
GEOMGUI_DimensionProperty.cxx
|
GEOMGUI_DimensionProperty.cxx
|
||||||
GEOMGUI_ShapeAnnotations.cxx
|
GEOMGUI_AnnotationAttrs.cxx
|
||||||
${_moc_SOURCES}
|
${_moc_SOURCES}
|
||||||
${_rcc_SOURCES}
|
${_rcc_SOURCES}
|
||||||
)
|
)
|
||||||
|
425
src/GEOMGUI/GEOMGUI_AnnotationAttrs.cxx
Executable file
425
src/GEOMGUI/GEOMGUI_AnnotationAttrs.cxx
Executable file
@ -0,0 +1,425 @@
|
|||||||
|
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
|
||||||
|
//
|
||||||
|
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
||||||
|
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
|
||||||
|
// File : GEOMGUI_AnnotationAttr.cxx
|
||||||
|
// Author : Anton POLETAEV, Open CASCADE S.A.S.
|
||||||
|
//
|
||||||
|
|
||||||
|
// SALOME includes
|
||||||
|
#include <GEOMGUI_AnnotationAttrs.h>
|
||||||
|
#include <GEOM_Annotation.hxx>
|
||||||
|
#include <SALOMEDSImpl_AttributeParameter.hxx>
|
||||||
|
|
||||||
|
// OCCT includes
|
||||||
|
#include <gp_Ax3.hxx>
|
||||||
|
|
||||||
|
// STL includes
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
IMPLEMENT_STANDARD_RTTIEXT( GEOMGUI_AnnotationAttrs, Standard_Transient )
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
static const std::string PARAMETER_COUNT = "GEOMGUI_AnnotationAttrs_Count";
|
||||||
|
|
||||||
|
std::string PARAMETER_I( const std::string& s, const int i ) {
|
||||||
|
return std::string( s ) + std::to_string( i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_IS_VISIBLE( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_IsVisible", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_IS_2D( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Is2D", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_NAME( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Name", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_TEXT( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Text", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_POSITION( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Position", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_ATTACH( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Attach", i );
|
||||||
|
}
|
||||||
|
std::string PARAMETER_SHAPE( const int i ) {
|
||||||
|
return PARAMETER_I( "GEOMGUI_AnnotationAttrs_Shape", i );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : FindAttributes
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
Handle(GEOMGUI_AnnotationAttrs) GEOMGUI_AnnotationAttrs::FindAttributes( const _PTR(SObject)& theObject )
|
||||||
|
{
|
||||||
|
_PTR(GenericAttribute) aGenericAttr;
|
||||||
|
_PTR(AttributeParameter) aParameterMap;
|
||||||
|
|
||||||
|
if ( !theObject->FindAttribute( aGenericAttr, "AttributeParameter" ) )
|
||||||
|
{
|
||||||
|
return Handle(GEOMGUI_AnnotationAttrs)();
|
||||||
|
}
|
||||||
|
|
||||||
|
aParameterMap = aGenericAttr;
|
||||||
|
|
||||||
|
if ( !aParameterMap->IsSet( PARAMETER_COUNT, PT_INTEGER ) )
|
||||||
|
{
|
||||||
|
return Handle(GEOMGUI_AnnotationAttrs)();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new GEOMGUI_AnnotationAttrs( theObject, aParameterMap );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : FindOrCreateAttributes
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
Handle(GEOMGUI_AnnotationAttrs) GEOMGUI_AnnotationAttrs::FindOrCreateAttributes(
|
||||||
|
const _PTR(SObject)& theObject, SalomeApp_Study* theStudy )
|
||||||
|
{
|
||||||
|
_PTR(StudyBuilder) aBuilder = theStudy->studyDS()->NewBuilder();
|
||||||
|
_PTR(AttributeParameter) aParameterMap = aBuilder->FindOrCreateAttribute( theObject, "AttributeParameter" );
|
||||||
|
if ( !aParameterMap->IsSet( PARAMETER_COUNT, PT_INTEGER ) )
|
||||||
|
{
|
||||||
|
aParameterMap->SetInt( PARAMETER_COUNT, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return new GEOMGUI_AnnotationAttrs( theObject, aParameterMap );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : Remove
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::Remove( const _PTR(SObject)& theObject )
|
||||||
|
{
|
||||||
|
_PTR(GenericAttribute) aGenericAttr;
|
||||||
|
_PTR(AttributeParameter) aParameterMap;
|
||||||
|
|
||||||
|
if ( !theObject->FindAttribute( aGenericAttr, "AttributeParameter" ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aParameterMap = aGenericAttr;
|
||||||
|
|
||||||
|
if ( !aParameterMap->IsSet( PARAMETER_COUNT, PT_INTEGER ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int aParamCount = aParameterMap->GetInt( PARAMETER_COUNT );
|
||||||
|
|
||||||
|
for ( int anI = 0; anI < aParamCount; ++anI )
|
||||||
|
{
|
||||||
|
aParameterMap->RemoveID( PARAMETER_IS_VISIBLE( anI ), PT_BOOLEAN );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_IS_2D( anI ), PT_BOOLEAN );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_NAME( anI ), PT_STRING );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_TEXT( anI ), PT_STRING );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_POSITION( anI ), PT_REALARRAY );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_ATTACH( anI ), PT_REALARRAY );
|
||||||
|
aParameterMap->RemoveID( PARAMETER_SHAPE( anI ), PT_INTARRAY );
|
||||||
|
}
|
||||||
|
|
||||||
|
aParameterMap->RemoveID( PARAMETER_COUNT, PT_INTEGER );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetCount
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetCount( const int theCount ) const
|
||||||
|
{
|
||||||
|
const int aCount = this->GetCount();
|
||||||
|
|
||||||
|
if ( aCount < theCount )
|
||||||
|
{
|
||||||
|
// set default values
|
||||||
|
for ( int anI = aCount; anI < theCount; ++anI )
|
||||||
|
{
|
||||||
|
myParameterMap->SetBool( PARAMETER_IS_VISIBLE( anI ), true );
|
||||||
|
myParameterMap->SetBool( PARAMETER_IS_2D( anI ), false );
|
||||||
|
myParameterMap->SetString( PARAMETER_NAME( anI ), std::string() );
|
||||||
|
myParameterMap->SetString( PARAMETER_TEXT( anI ), std::string() );
|
||||||
|
myParameterMap->SetRealArray( PARAMETER_POSITION( anI ), std::vector<double>(3, 0.0) );
|
||||||
|
myParameterMap->SetRealArray( PARAMETER_ATTACH( anI ), std::vector<double>(3, 0.0) );
|
||||||
|
myParameterMap->SetIntArray( PARAMETER_SHAPE( anI ), std::vector<int>(2, 0) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// remove exceeding values
|
||||||
|
for ( int anI = theCount; anI < aCount; ++anI )
|
||||||
|
{
|
||||||
|
myParameterMap->RemoveID( PARAMETER_IS_VISIBLE( anI ), PT_BOOLEAN );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_IS_2D( anI ), PT_BOOLEAN );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_NAME( anI ), PT_STRING );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_TEXT( anI ), PT_STRING );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_POSITION( anI ), PT_REALARRAY );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_ATTACH( anI ), PT_REALARRAY );
|
||||||
|
myParameterMap->RemoveID( PARAMETER_SHAPE( anI ), PT_INTARRAY );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myParameterMap->SetInt( PARAMETER_COUNT, theCount );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetCount
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
int GEOMGUI_AnnotationAttrs::GetCount() const
|
||||||
|
{
|
||||||
|
return myParameterMap->GetInt( PARAMETER_COUNT );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetName
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetName( const int theIndex, const QString& theName )
|
||||||
|
{
|
||||||
|
myParameterMap->SetString( PARAMETER_NAME( theIndex ), theName.toStdString() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetName
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
QString GEOMGUI_AnnotationAttrs::GetName( const int theIndex ) const
|
||||||
|
{
|
||||||
|
return QString::fromStdString( myParameterMap->GetString( PARAMETER_NAME( theIndex ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetVisible
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetIsVisible( const int theIndex, const bool theIsVisible )
|
||||||
|
{
|
||||||
|
myParameterMap->SetBool( PARAMETER_IS_VISIBLE( theIndex ), theIsVisible );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetIsVisible
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool GEOMGUI_AnnotationAttrs::GetIsVisible( const int theIndex ) const
|
||||||
|
{
|
||||||
|
return myParameterMap->GetBool( PARAMETER_IS_VISIBLE( theIndex ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetText
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetText( const int theIndex, const QString& theText )
|
||||||
|
{
|
||||||
|
myParameterMap->SetString( PARAMETER_TEXT( theIndex ), theText.toStdString() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetText
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
QString GEOMGUI_AnnotationAttrs::GetText( const int theIndex ) const
|
||||||
|
{
|
||||||
|
return QString::fromStdString( myParameterMap->GetString( PARAMETER_TEXT( theIndex ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetIsScreenFixed
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetIsScreenFixed( const int theIndex, const bool theIsScreenFixed )
|
||||||
|
{
|
||||||
|
myParameterMap->SetBool( PARAMETER_IS_2D( theIndex ), theIsScreenFixed );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetIsScreenFixed
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool GEOMGUI_AnnotationAttrs::GetIsScreenFixed( const int theIndex ) const
|
||||||
|
{
|
||||||
|
return myParameterMap->GetBool( PARAMETER_IS_2D( theIndex ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetPosition
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetPosition( const int theIndex, const gp_Pnt& thePosition )
|
||||||
|
{
|
||||||
|
std::vector<double> aCoords( 3 );
|
||||||
|
|
||||||
|
aCoords[0] = thePosition.X();
|
||||||
|
aCoords[1] = thePosition.Y();
|
||||||
|
aCoords[2] = thePosition.Z();
|
||||||
|
|
||||||
|
myParameterMap->SetRealArray( PARAMETER_POSITION( theIndex ), aCoords );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetPosition
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
gp_Pnt GEOMGUI_AnnotationAttrs::GetPosition( const int theIndex ) const
|
||||||
|
{
|
||||||
|
std::vector<double> aCoords =
|
||||||
|
myParameterMap->GetRealArray( PARAMETER_POSITION( theIndex ) );
|
||||||
|
|
||||||
|
return gp_Pnt( aCoords[0], aCoords[1], aCoords[2] );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetAttach
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetAttach( const int theIndex, const gp_Pnt& theAttach )
|
||||||
|
{
|
||||||
|
std::vector<double> aCoords( 3 );
|
||||||
|
|
||||||
|
aCoords[0] = theAttach.X();
|
||||||
|
aCoords[1] = theAttach.Y();
|
||||||
|
aCoords[2] = theAttach.Z();
|
||||||
|
|
||||||
|
myParameterMap->SetRealArray( PARAMETER_ATTACH( theIndex ), aCoords );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetAttach
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
gp_Pnt GEOMGUI_AnnotationAttrs::GetAttach( const int theIndex ) const
|
||||||
|
{
|
||||||
|
std::vector<double> aCoords =
|
||||||
|
myParameterMap->GetRealArray( PARAMETER_ATTACH( theIndex ) );
|
||||||
|
|
||||||
|
return gp_Pnt( aCoords[0], aCoords[1], aCoords[2] );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetShapeSel
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetShapeSel( const int theIndex, const int theShapeType, const int theSubIdx )
|
||||||
|
{
|
||||||
|
std::vector<int> aSelection( 2 );
|
||||||
|
|
||||||
|
aSelection[0] = theShapeType;
|
||||||
|
aSelection[1] = theSubIdx;
|
||||||
|
|
||||||
|
myParameterMap->SetIntArray( PARAMETER_SHAPE( theIndex ), aSelection );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetShapeSel
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::GetShapeSel( const int theIndex, int& theShapeType, int& theSubIdx ) const
|
||||||
|
{
|
||||||
|
std::vector<int> aSelection =
|
||||||
|
myParameterMap->GetIntArray( PARAMETER_SHAPE( theIndex ) );
|
||||||
|
|
||||||
|
theShapeType = aSelection[0];
|
||||||
|
theSubIdx = aSelection[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : Append
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::Append( const Properties& theProps )
|
||||||
|
{
|
||||||
|
const int aCount = this->GetCount();
|
||||||
|
this->SetCount( aCount + 1 );
|
||||||
|
this->SetProperties( aCount, theProps );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetProperties
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetProperties( const int theIndex, const Properties& theProps )
|
||||||
|
{
|
||||||
|
this->SetName( theIndex, theProps.Name );
|
||||||
|
this->SetText( theIndex, theProps.Text );
|
||||||
|
this->SetIsVisible( theIndex, theProps.IsVisible );
|
||||||
|
this->SetIsScreenFixed( theIndex, theProps.IsScreenFixed );
|
||||||
|
this->SetPosition( theIndex, theProps.Position );
|
||||||
|
this->SetAttach( theIndex, theProps.Attach );
|
||||||
|
this->SetShapeSel( theIndex, theProps.ShapeType, theProps.ShapeIndex );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : GetProperties
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::GetProperties( const int theIndex, Properties& theProps ) const
|
||||||
|
{
|
||||||
|
theProps.Name = this->GetName( theIndex );
|
||||||
|
theProps.Text = this->GetText( theIndex );
|
||||||
|
theProps.IsVisible = this->GetIsVisible( theIndex );
|
||||||
|
theProps.IsScreenFixed = this->GetIsScreenFixed( theIndex );
|
||||||
|
theProps.Position = this->GetPosition( theIndex );
|
||||||
|
theProps.Attach = this->GetAttach( theIndex );
|
||||||
|
|
||||||
|
this->GetShapeSel( theIndex, theProps.ShapeType, theProps.ShapeIndex );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetupPresentation
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetupPresentation( const Handle(GEOM_Annotation)& thePresentation,
|
||||||
|
const Properties& theProps,
|
||||||
|
const gp_Ax3& theLCS )
|
||||||
|
{
|
||||||
|
gp_Trsf aToLCS;
|
||||||
|
aToLCS.SetTransformation( theLCS, gp_Ax3() );
|
||||||
|
|
||||||
|
TCollection_ExtendedString aText;
|
||||||
|
for (int i = 0; i < (int)theProps.Text.length(); i++ )
|
||||||
|
aText.Insert( i + 1, theProps.Text[ i ].unicode() );
|
||||||
|
//
|
||||||
|
thePresentation->SetText( aText );
|
||||||
|
thePresentation->SetScreenFixed( theProps.IsScreenFixed );
|
||||||
|
thePresentation->SetPosition( theProps.Position );
|
||||||
|
thePresentation->SetAttachPoint( theProps.Attach.Transformed( aToLCS ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetupPresentation
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void GEOMGUI_AnnotationAttrs::SetupPresentation( const Handle(GEOM_Annotation)& thePresentation,
|
||||||
|
const int theIndex,
|
||||||
|
const gp_Ax3& theLCS )
|
||||||
|
{
|
||||||
|
Properties aProps;
|
||||||
|
this->GetProperties( theIndex, aProps );
|
||||||
|
this->SetupPresentation( thePresentation, aProps, theLCS );
|
||||||
|
}
|
199
src/GEOMGUI/GEOMGUI_AnnotationAttrs.h
Executable file
199
src/GEOMGUI/GEOMGUI_AnnotationAttrs.h
Executable file
@ -0,0 +1,199 @@
|
|||||||
|
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
|
||||||
|
//
|
||||||
|
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
||||||
|
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
|
||||||
|
// File : GEOMGUI_AnnotationAttrs.h
|
||||||
|
// Author : Anton POLETAEV, Open CASCADE S.A.S.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef GEOMGUI_ANNOTATIONATTRS_H
|
||||||
|
#define GEOMGUI_ANNOTATIONATTRS_H
|
||||||
|
|
||||||
|
// SALOME GUI includes
|
||||||
|
#include <SalomeApp_Study.h>
|
||||||
|
|
||||||
|
// OCCT includes
|
||||||
|
#include <gp_Pnt.hxx>
|
||||||
|
#include <Standard_Transient.hxx>
|
||||||
|
|
||||||
|
// Qt, STL includes
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class GEOM_Annotation;
|
||||||
|
class gp_Ax3;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Attribute-style helper tool to manage shape annotation data of an object.
|
||||||
|
*/
|
||||||
|
class GEOMGUI_AnnotationAttrs : public Standard_Transient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
DEFINE_STANDARD_RTTIEXT( GEOMGUI_AnnotationAttrs, Standard_Transient )
|
||||||
|
|
||||||
|
//! Find annotation data defined for an object.
|
||||||
|
Standard_EXPORT static Handle(GEOMGUI_AnnotationAttrs) FindAttributes( const _PTR(SObject)& theObject );
|
||||||
|
|
||||||
|
//! Find or create annotation data fields for an object.
|
||||||
|
Standard_EXPORT static Handle(GEOMGUI_AnnotationAttrs) FindOrCreateAttributes( const _PTR(SObject)& theObject,
|
||||||
|
SalomeApp_Study* theStudy );
|
||||||
|
|
||||||
|
//! Remove annotation data fields for an object.
|
||||||
|
Standard_EXPORT static void Remove( const _PTR(SObject)& theObject );
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \ brief Structure representing visual properties of the shape annotation.
|
||||||
|
*/
|
||||||
|
struct Properties
|
||||||
|
{
|
||||||
|
QString Name; //!< Application name of annotation.
|
||||||
|
QString Text; //!< Displayed annotation text.
|
||||||
|
bool IsVisible; //!< Application visibility flag of annotation.
|
||||||
|
bool IsScreenFixed; //!< Fixed screen mode flag.
|
||||||
|
gp_Pnt Position; //!< Position of the annotation.
|
||||||
|
gp_Pnt Attach; //!< Attachment point of the annotation.
|
||||||
|
int ShapeIndex; //!< Index of the annotated subshape.
|
||||||
|
int ShapeType; //!< Type of the annotated subshape.
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Setup parameters of the annotation presentation with the properties given.
|
||||||
|
//! @param thePresentation [in] the presentation to setup.
|
||||||
|
//! @param theProps [in] the set of properties.
|
||||||
|
//! @param theLCS [in] the local coordinate system of the shape.
|
||||||
|
Standard_EXPORT static void SetupPresentation( const Handle(GEOM_Annotation)& thePresentation,
|
||||||
|
const Properties& theProps,
|
||||||
|
const gp_Ax3& theLCS );
|
||||||
|
|
||||||
|
//! Setup parameters of the annotation presentation with the properties of a definition.
|
||||||
|
//! @param thePresentation [in] the presentation to setup.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theLCS [in] the local coordinate system of the shape.
|
||||||
|
Standard_EXPORT void SetupPresentation( const Handle(GEOM_Annotation)& thePresentation,
|
||||||
|
const int theIndex,
|
||||||
|
const gp_Ax3& theLCS );
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Changes count of annotation definitions stored on the object.
|
||||||
|
//! If the count is decreased the extra annotation definitions are
|
||||||
|
//! cleared out from the attribute.
|
||||||
|
//! @param theNumber [in] the new number of annotation definitions.
|
||||||
|
Standard_EXPORT void SetCount( const int theCount ) const;
|
||||||
|
|
||||||
|
//! Returns number of annotation definitions stored on the object.
|
||||||
|
Standard_EXPORT int GetCount() const;
|
||||||
|
|
||||||
|
//! Sets application name property of an annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theName [in] the new application name.
|
||||||
|
Standard_EXPORT void SetName( const int theIndex, const QString& theName );
|
||||||
|
|
||||||
|
//! Returns application name of an annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
Standard_EXPORT QString GetName( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets application visibility state of an annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theIsVisible [in] the visibility state.
|
||||||
|
Standard_EXPORT void SetIsVisible( const int theIndex, const bool theIsVisible );
|
||||||
|
|
||||||
|
//! Returns applicationb visibility state of an annotaion definition.
|
||||||
|
Standard_EXPORT bool GetIsVisible( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets annotation label's text.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theText [in] the text string.
|
||||||
|
Standard_EXPORT void SetText( const int theIndex, const QString& theText );
|
||||||
|
|
||||||
|
//! Returns annotation label's text.
|
||||||
|
Standard_EXPORT QString GetText( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets screen fixed flag of the annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theIsScreenFixed [in] the presentation flag.
|
||||||
|
Standard_EXPORT void SetIsScreenFixed( const int theIndex, const bool theIsScreenFixed );
|
||||||
|
|
||||||
|
//! Returns screen fixed flag of the annotation definition.
|
||||||
|
Standard_EXPORT bool GetIsScreenFixed( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets position of the annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param thePosition [in] the position of the annotation label.
|
||||||
|
Standard_EXPORT void SetPosition( const int theIndex, const gp_Pnt& thePosition );
|
||||||
|
|
||||||
|
//! Returns position of the annotation definition.
|
||||||
|
Standard_EXPORT gp_Pnt GetPosition( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets attach point of the annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theAttach [in] the attach point of the annotation.
|
||||||
|
Standard_EXPORT void SetAttach( const int theIndex, const gp_Pnt& theAttach );
|
||||||
|
|
||||||
|
//! Returns attach point of the annotation definition.
|
||||||
|
Standard_EXPORT gp_Pnt GetAttach( const int theIndex ) const;
|
||||||
|
|
||||||
|
//! Sets shape selection arguments.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theShapeType, theSubIdx [in] the type of the selected shape and the sub-shape index.
|
||||||
|
Standard_EXPORT void SetShapeSel( const int theIndex, const int theShapeType, const int theSubIdx );
|
||||||
|
|
||||||
|
//! Returns shape selection arguments.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theShapeType, theSubIdx [out] the type of the selected shape and the sub-shape index.
|
||||||
|
Standard_EXPORT void GetShapeSel( const int theIndex, int& theShapeType, int& theSubIdx ) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Appends new annotation definition with the given properties.
|
||||||
|
Standard_EXPORT void Append( const Properties& theProps );
|
||||||
|
|
||||||
|
//! Sets complete properties of an annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theProps [in] the structure containing the properties.
|
||||||
|
Standard_EXPORT void SetProperties( const int theIndex, const Properties& theProps );
|
||||||
|
|
||||||
|
//! Returns complete properties of an annotation definition.
|
||||||
|
//! @param theIndex [in] the index of the annotation definition.
|
||||||
|
//! @param theProps [out] the structure containing the properties.
|
||||||
|
Standard_EXPORT void GetProperties( const int theIndex, Properties& theProps ) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
GEOMGUI_AnnotationAttrs( const _PTR(SObject)& theObject,
|
||||||
|
const _PTR(AttributeParameter)& theParameter )
|
||||||
|
: myObj( theObject ),
|
||||||
|
myParameterMap( theParameter ) {}
|
||||||
|
|
||||||
|
GEOMGUI_AnnotationAttrs( const GEOMGUI_AnnotationAttrs& theOther ) {}
|
||||||
|
|
||||||
|
void operator=( const GEOMGUI_AnnotationAttrs& theOther ) {}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
_PTR(SObject) myObj;
|
||||||
|
_PTR(AttributeParameter) myParameterMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
DEFINE_STANDARD_HANDLE( GEOMGUI_AnnotationAttrs, Standard_Transient )
|
||||||
|
|
||||||
|
#endif
|
@ -1,352 +0,0 @@
|
|||||||
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
|
|
||||||
//
|
|
||||||
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
|
||||||
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
|
||||||
//
|
|
||||||
// This library is free software; you can redistribute it and/or
|
|
||||||
// modify it under the terms of the GNU Lesser General Public
|
|
||||||
// License as published by the Free Software Foundation; either
|
|
||||||
// version 2.1 of the License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
// Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public
|
|
||||||
// License along with this library; if not, write to the Free Software
|
|
||||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
//
|
|
||||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
|
||||||
//
|
|
||||||
|
|
||||||
// File : GEOMGUI_ShapeAnnotations.cxx
|
|
||||||
// Author : Anton POLETAEV, Open CASCADE S.A.S.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <GEOMGUI_ShapeAnnotations.h>
|
|
||||||
#include <GEOM_Annotation.hxx>
|
|
||||||
|
|
||||||
// OCCT includes
|
|
||||||
#include <Standard_ProgramError.hxx>
|
|
||||||
#include <gp_Trsf.hxx>
|
|
||||||
|
|
||||||
#include <SalomeApp_Study.h>
|
|
||||||
|
|
||||||
// REGEXP pattern for converting array of entries into plain text string.
|
|
||||||
// The pattern has the following structure:
|
|
||||||
// ENTRY: { text[string] : visibility[bool] : screen fixed[bool] : position[xyz] : attach[xyz] }
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
static const QString PATTERN_ITEM_GROUP = "\\{ (Text=(?::{2,}|.)*:(?!:)Visible=.*:Screen=.*:Position=\\{(.*):(.*):(.*)\\}:Attach=\\{(.*):(.*):(.*)\\}:ShapeIdx=.*:ShapeType=.*) \\}";
|
|
||||||
static const QString PATTERN_ITEM = "Text=((?::{2,}|.)*):(?!:)Visible=(\\d{1}):Screen=(\\d{1}):Position=\\{(.*):(.*):(.*)\\}:Attach=\\{(.*):(.*):(.*)\\}:ShapeIdx=(\\d{1,*}):ShapeType=(\\d{1})";
|
|
||||||
static QString toPattern (const QString& theText,
|
|
||||||
const bool theIsVisible,
|
|
||||||
const bool theIsFixed,
|
|
||||||
const gp_Pnt& thePosition,
|
|
||||||
const gp_Pnt& theAttach,
|
|
||||||
const int theShapeIndex,
|
|
||||||
const int theShapeType)
|
|
||||||
{
|
|
||||||
return QString( "{ Text=" ) + theText +
|
|
||||||
QString( ":" ) + QString( "Visible=" ) + QString::number( theIsVisible ? 1 : 0 ) +
|
|
||||||
QString( ":" ) + QString( "Screen=" ) + QString::number( theIsFixed ? 1 : 0 ) +
|
|
||||||
QString( ":" ) + QString( "Position={" ) +
|
|
||||||
QString::number( thePosition.X() ) + QString( ":" ) +
|
|
||||||
QString::number( thePosition.Y() ) + QString( ":" ) +
|
|
||||||
QString::number( thePosition.Z() ) + QString( "}" ) +
|
|
||||||
QString( ":" ) + QString( "Attach={" ) +
|
|
||||||
QString::number( theAttach.X() ) + QString( ":" ) +
|
|
||||||
QString::number( theAttach.Y() ) + QString( ":" ) +
|
|
||||||
QString::number( theAttach.Z() ) + QString( "}" ) +
|
|
||||||
QString( ":" ) + QString( "ShapeIdx=" ) + QString::number( theShapeIndex ) +
|
|
||||||
QString( ":" ) + QString( "ShapeType=" ) + QString::number( theShapeType ) +
|
|
||||||
QString( " }" );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : ToPresentation
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
void GEOMGUI_ShapeAnnotations::ShapeAnnotation::ToPresentation(
|
|
||||||
const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS ) const
|
|
||||||
{
|
|
||||||
gp_Trsf aToLCS;
|
|
||||||
aToLCS.SetTransformation( theLCS, gp_Ax3() );
|
|
||||||
|
|
||||||
//
|
|
||||||
TCollection_ExtendedString aText;
|
|
||||||
for (int i = 0; i < (int)Text.length(); i++ )
|
|
||||||
aText.Insert( i + 1, Text[ i ].unicode() );
|
|
||||||
//
|
|
||||||
theShapeAnnotation->SetScreenFixed( IsScreenFixed );
|
|
||||||
theShapeAnnotation->SetText( aText );
|
|
||||||
theShapeAnnotation->SetPosition( Position );
|
|
||||||
theShapeAnnotation->SetAttachPoint( Attach.Transformed( aToLCS ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : Constructor
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::GEOMGUI_ShapeAnnotations()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : Copy constructor
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::GEOMGUI_ShapeAnnotations( const GEOMGUI_ShapeAnnotations& theOther )
|
|
||||||
{
|
|
||||||
myAnnotations = theOther.myAnnotations;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : Init constructor
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::GEOMGUI_ShapeAnnotations( SalomeApp_Study* theStudy, const std::string& theEntry )
|
|
||||||
{
|
|
||||||
LoadFromAttribute( theStudy, theEntry );
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : Init constructor
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::GEOMGUI_ShapeAnnotations( const QString& theProperty )
|
|
||||||
{
|
|
||||||
QRegExp aRegExpItemGroups( PATTERN_ITEM_GROUP );
|
|
||||||
QRegExp aRegExpItem( "^" + PATTERN_ITEM + "$" );
|
|
||||||
aRegExpItemGroups.setMinimal( true );
|
|
||||||
aRegExpItem.setMinimal( true );
|
|
||||||
|
|
||||||
int aPos = 0;
|
|
||||||
while ( ( aPos = aRegExpItemGroups.indexIn( theProperty, aPos ) ) != -1 )
|
|
||||||
{
|
|
||||||
aPos += aRegExpItemGroups.matchedLength();
|
|
||||||
|
|
||||||
QString aStrItem = aRegExpItemGroups.cap(1);
|
|
||||||
|
|
||||||
if ( aRegExpItem.indexIn( aStrItem ) < 0 )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString aStrName = "Annotation_X"; // TODO
|
|
||||||
QString aStrText = aRegExpItem.cap( 1 );
|
|
||||||
QString aStrVisible = aRegExpItem.cap( 2 );
|
|
||||||
QString aStrFixed = aRegExpItem.cap( 3 );
|
|
||||||
QString aStrPosX = aRegExpItem.cap( 4 );
|
|
||||||
QString aStrPosY = aRegExpItem.cap( 5 );
|
|
||||||
QString aStrPosZ = aRegExpItem.cap( 6 );
|
|
||||||
QString aStrAttX = aRegExpItem.cap( 7 );
|
|
||||||
QString aStrAttY = aRegExpItem.cap( 8 );
|
|
||||||
QString aStrAttZ = aRegExpItem.cap( 9 );
|
|
||||||
QString aStrShapeIdx = aRegExpItem.cap( 10 );
|
|
||||||
QString aStrShapeType = aRegExpItem.cap( 11 );
|
|
||||||
aStrText.replace( "::", ":" );
|
|
||||||
|
|
||||||
ShapeAnnotation aEntry;
|
|
||||||
aEntry.Name = aStrName;
|
|
||||||
aEntry.Text = aStrText;
|
|
||||||
aEntry.IsVisible = aStrVisible.toInt() != 0;
|
|
||||||
aEntry.IsScreenFixed = aStrFixed.toInt() != 0;
|
|
||||||
aEntry.Position.SetX( aStrPosX.toDouble() );
|
|
||||||
aEntry.Position.SetY( aStrPosY.toDouble() );
|
|
||||||
aEntry.Position.SetZ( aStrPosZ.toDouble() );
|
|
||||||
aEntry.Attach.SetX( aStrAttX.toDouble() );
|
|
||||||
aEntry.Attach.SetY( aStrAttY.toDouble() );
|
|
||||||
aEntry.Attach.SetZ( aStrAttZ.toDouble() );
|
|
||||||
aEntry.ShapeIndex = aStrShapeIdx.toInt();
|
|
||||||
aEntry.ShapeType = aStrShapeType.toInt();
|
|
||||||
|
|
||||||
myAnnotations.append( aEntry );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : Destructor
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::~GEOMGUI_ShapeAnnotations()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : operator QVariant()
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::operator QVariant() const
|
|
||||||
{
|
|
||||||
QVariant aQVariant;
|
|
||||||
aQVariant.setValue( *this );
|
|
||||||
return aQVariant;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : operator QString()
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
GEOMGUI_ShapeAnnotations::operator QString() const
|
|
||||||
{
|
|
||||||
QStringList anItems;
|
|
||||||
|
|
||||||
for ( int i = 0; i < myAnnotations.size(); ++i )
|
|
||||||
{
|
|
||||||
const ShapeAnnotation& aEntry = myAnnotations[i];
|
|
||||||
//
|
|
||||||
anItems.append( toPattern( aEntry.Text,
|
|
||||||
aEntry.IsVisible,
|
|
||||||
aEntry.IsScreenFixed,
|
|
||||||
aEntry.Position,
|
|
||||||
aEntry.Attach,
|
|
||||||
aEntry.ShapeIndex,
|
|
||||||
aEntry.ShapeType ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return anItems.join( ":" );
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : operator ==
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
bool GEOMGUI_ShapeAnnotations::operator == (const GEOMGUI_ShapeAnnotations& theOther) const
|
|
||||||
{
|
|
||||||
if ( myAnnotations.size() != theOther.myAnnotations.size() )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( int i = 0; i < myAnnotations.size(); ++i )
|
|
||||||
{
|
|
||||||
if ( myAnnotations[i] != theOther.myAnnotations[i] )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : FromPresentation
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
void GEOMGUI_ShapeAnnotations::FromPresentation( const int theIndex,
|
|
||||||
const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS )
|
|
||||||
{
|
|
||||||
gp_Trsf aFromLCS;
|
|
||||||
aFromLCS.SetTransformation( gp_Ax3(), theLCS );
|
|
||||||
//
|
|
||||||
ShapeAnnotation& aChangeEntry = myAnnotations[theIndex];
|
|
||||||
aChangeEntry.IsScreenFixed = theShapeAnnotation->GetIsScreenFixed();
|
|
||||||
aChangeEntry.Name = "Annotation_X"; /// TODO
|
|
||||||
aChangeEntry.Text = QString( (QChar*) theShapeAnnotation->GetText().ToExtString(), theShapeAnnotation->GetText().Length() );
|
|
||||||
aChangeEntry.Attach = theShapeAnnotation->GetAttachPoint().Transformed( aFromLCS );
|
|
||||||
aChangeEntry.Position = theShapeAnnotation->GetPosition();
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : ToPresentation
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
void GEOMGUI_ShapeAnnotations::ToPresentation( const int theIndex,
|
|
||||||
const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS )
|
|
||||||
{
|
|
||||||
myAnnotations[theIndex].ToPresentation(theShapeAnnotation, theLCS);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : LoadFromAttribute
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
void GEOMGUI_ShapeAnnotations::LoadFromAttribute( SalomeApp_Study* theStudy, const std::string& theEntry )
|
|
||||||
{
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
_PTR(SObject) aSObj = theStudy->studyDS()->FindObjectID( theEntry );
|
|
||||||
if ( !aSObj )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_PTR(StudyBuilder) aBuilder = theStudy->studyDS()->NewBuilder();
|
|
||||||
|
|
||||||
_PTR(GenericAttribute) aSeekAtt;
|
|
||||||
_PTR(AttributeTableOfReal) aDataAtt;
|
|
||||||
|
|
||||||
if ( !aSObj->FindAttribute( aSeekAtt, "AttributeTableOfReal" ) )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aDataAtt = aSeekAtt;
|
|
||||||
|
|
||||||
for ( int i = 1; i <= aDataAtt->GetNbColumns(); ++i )
|
|
||||||
{
|
|
||||||
std::vector<double> aPropertyArray = aDataAtt->GetColumn( i );
|
|
||||||
|
|
||||||
ShapeAnnotation aEntry;
|
|
||||||
aEntry.Text = aDataAtt->GetColumnTitle( i ).c_str();
|
|
||||||
aEntry.IsVisible = static_cast<bool>( aPropertyArray[i++] );
|
|
||||||
aEntry.IsScreenFixed = static_cast<bool>( aPropertyArray[i++] );
|
|
||||||
aEntry.Position.SetX( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.Position.SetY( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.Position.SetZ( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.Attach.SetX( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.Attach.SetY( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.Attach.SetZ( static_cast<double>( aPropertyArray[i++] ) );
|
|
||||||
aEntry.ShapeIndex = static_cast<int>( aPropertyArray[i++] );
|
|
||||||
aEntry.ShapeType = static_cast<int>( aPropertyArray[i++] );
|
|
||||||
|
|
||||||
myAnnotations.append( aEntry );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : SaveToAttribute
|
|
||||||
// purpose :
|
|
||||||
//=================================================================================
|
|
||||||
void GEOMGUI_ShapeAnnotations::SaveToAttribute( SalomeApp_Study *theStudy, const std::string &theEntry )
|
|
||||||
{
|
|
||||||
_PTR(SObject) aSObj = theStudy->studyDS()->FindObjectID( theEntry );
|
|
||||||
if ( !aSObj )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_PTR(StudyBuilder) aBuilder = theStudy->studyDS()->NewBuilder();
|
|
||||||
|
|
||||||
_PTR(AttributeTableOfReal) aDataAtt;
|
|
||||||
|
|
||||||
aDataAtt = aBuilder->FindOrCreateAttribute( aSObj, "AttributeTableOfReal" );
|
|
||||||
aDataAtt->SetNbColumns( 0 );
|
|
||||||
|
|
||||||
for ( int i = 0; i < myAnnotations.size(); ++i )
|
|
||||||
{
|
|
||||||
const ShapeAnnotation& aEntry = myAnnotations[i];
|
|
||||||
|
|
||||||
std::vector<double> aPropertyArray;
|
|
||||||
aPropertyArray.push_back( static_cast<double>(aEntry.IsVisible) );
|
|
||||||
aPropertyArray.push_back( static_cast<double>(aEntry.IsScreenFixed) );
|
|
||||||
aPropertyArray.push_back( aEntry.Position.X() );
|
|
||||||
aPropertyArray.push_back( aEntry.Position.Y() );
|
|
||||||
aPropertyArray.push_back( aEntry.Position.Z() );
|
|
||||||
aPropertyArray.push_back( aEntry.Attach.X() );
|
|
||||||
aPropertyArray.push_back( aEntry.Attach.Y() );
|
|
||||||
aPropertyArray.push_back( aEntry.Attach.Z() );
|
|
||||||
aPropertyArray.push_back( static_cast<double>( aEntry.ShapeIndex ) );
|
|
||||||
aPropertyArray.push_back( static_cast<double>( aEntry.ShapeType ) );
|
|
||||||
|
|
||||||
aDataAtt->AddColumn( aPropertyArray );
|
|
||||||
aDataAtt->SetColumnTitle( i + 1, aEntry.Text.toStdString() );
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,282 +0,0 @@
|
|||||||
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
|
|
||||||
//
|
|
||||||
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
|
||||||
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
|
||||||
//
|
|
||||||
// This library is free software; you can redistribute it and/or
|
|
||||||
// modify it under the terms of the GNU Lesser General Public
|
|
||||||
// License as published by the Free Software Foundation; either
|
|
||||||
// version 2.1 of the License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
// Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public
|
|
||||||
// License along with this library; if not, write to the Free Software
|
|
||||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
//
|
|
||||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
|
||||||
//
|
|
||||||
|
|
||||||
// File : GEOMGUI_ShapeAnnotations.h
|
|
||||||
// Author : Anton POLETAEV, Open CASCADE S.A.S.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef GEOMGUI_SHAPEANNOTATIONS_H
|
|
||||||
#define GEOMGUI_SHAPEANNOTATIONS_H
|
|
||||||
|
|
||||||
#include <GEOMGUI_VisualProperties.h>
|
|
||||||
|
|
||||||
// OCCT includes
|
|
||||||
#include <gp_Ax3.hxx>
|
|
||||||
#include <QVariant>
|
|
||||||
#include <QVector>
|
|
||||||
#include <QSharedPointer>
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
class SalomeApp_Study;
|
|
||||||
class GEOM_Annotation;
|
|
||||||
|
|
||||||
class GEOMGUI_ShapeAnnotations;
|
|
||||||
typedef QSharedPointer<GEOMGUI_ShapeAnnotations> ShapeAnnotationsPtr;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Algorithms to translate and manitain list of shape annotation properties.
|
|
||||||
*
|
|
||||||
* Shape annotation presentations are store in relative coordinate system (LCS).
|
|
||||||
* To ensure that dimension is bound to the equal shape irrespectively of its location
|
|
||||||
* transformation.
|
|
||||||
*/
|
|
||||||
class Standard_EXPORT GEOMGUI_ShapeAnnotations : public GEOMGUI_VisualProperties
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \ brief Structure representing properties of the shape annotation entry.
|
|
||||||
*/
|
|
||||||
struct ShapeAnnotation
|
|
||||||
{
|
|
||||||
QString Name; // annotation name label
|
|
||||||
QString Text; // annotation text label
|
|
||||||
bool IsVisible; // visibility of annotation
|
|
||||||
bool IsScreenFixed; // fixed screen mode flag
|
|
||||||
gp_Pnt Position; // position of the annotation
|
|
||||||
gp_Pnt Attach; // attachment point of the annotation
|
|
||||||
int ShapeIndex; // index of the annotated subshape
|
|
||||||
int ShapeType; // type of the annotated subshape
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Update presentation properties using the annotation record definition.
|
|
||||||
* \param theShapeAnnotation [in] the explicit definition of the annotation.
|
|
||||||
*/
|
|
||||||
void ToPresentation( const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS ) const;
|
|
||||||
|
|
||||||
bool operator == (const ShapeAnnotation& theOther) const
|
|
||||||
{
|
|
||||||
return Name == theOther.Name
|
|
||||||
&& Text == theOther.Text
|
|
||||||
&& IsVisible == theOther.IsVisible
|
|
||||||
&& IsScreenFixed == theOther.IsScreenFixed
|
|
||||||
&& Position.IsEqual (theOther.Position, 0.0)
|
|
||||||
&& Attach.IsEqual (theOther.Attach, 0.0)
|
|
||||||
&& ShapeIndex == theOther.ShapeIndex
|
|
||||||
&& ShapeType == theOther.ShapeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator != (const ShapeAnnotation& theOther) const
|
|
||||||
{
|
|
||||||
return !(operator == (theOther));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Constructor. Inits empty property.
|
|
||||||
*/
|
|
||||||
GEOMGUI_ShapeAnnotations();
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Copy constructor.
|
|
||||||
*/
|
|
||||||
GEOMGUI_ShapeAnnotations( const GEOMGUI_ShapeAnnotations& theOther );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Constructor. Inits property from attribute.
|
|
||||||
*/
|
|
||||||
GEOMGUI_ShapeAnnotations( SalomeApp_Study* theStudy, const std::string& theEntry );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Constructor. Inits property from formatted QString.
|
|
||||||
*/
|
|
||||||
GEOMGUI_ShapeAnnotations( const QString& theProperty );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Destructor.
|
|
||||||
*/
|
|
||||||
~GEOMGUI_ShapeAnnotations();
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Overload QVariant cast operator.
|
|
||||||
*/
|
|
||||||
operator QVariant() const;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Overload QString cast operator.
|
|
||||||
*/
|
|
||||||
operator QString() const;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Overload comparsion.
|
|
||||||
*/
|
|
||||||
bool operator == (const GEOMGUI_ShapeAnnotations &theOther) const;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Overload comparsion.
|
|
||||||
*/
|
|
||||||
bool operator != (const GEOMGUI_ShapeAnnotations &theOther) const
|
|
||||||
{
|
|
||||||
return !(operator == (theOther));
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Adds new shape annotation entry using explicit definition.
|
|
||||||
* \param theShapeAnnotation [in] the explicit definition of the annotation.
|
|
||||||
* \param theLCS [in] the local coordinate system of parent object.
|
|
||||||
*/
|
|
||||||
void Add( const ShapeAnnotation& theShapeAnnotation )
|
|
||||||
{
|
|
||||||
myAnnotations.append( theShapeAnnotation );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Update entry data using the explicit definition.
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
* \param theShapeAnnotation [in] the explicit definition of the annotation.
|
|
||||||
*/
|
|
||||||
void SetValues( const int theIndex, const ShapeAnnotation& theShapeAnnotation )
|
|
||||||
{
|
|
||||||
myAnnotations[theIndex] = theShapeAnnotation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Sets annotation's entry data using the properties of interactive presentation.
|
|
||||||
* \param theIndex [in] the index of the record.
|
|
||||||
* \param theShapeAnnotation [in] the interactive presnetation.
|
|
||||||
* \param theLCS [in] the local coordinate system of parent object.
|
|
||||||
*/
|
|
||||||
void FromPresentation( const int theIndex,
|
|
||||||
const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Update presentation properties using the annotation record definition.
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
* \param theShapeAnnotation [in] the explicit definition of the annotation.
|
|
||||||
*/
|
|
||||||
void ToPresentation( const int theIndex,
|
|
||||||
const Handle(GEOM_Annotation)& theShapeAnnotation,
|
|
||||||
const gp_Ax3& theLCS );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Get explicit definition of an annotation by index.
|
|
||||||
* \param theIndex [in] the index of the entry.
|
|
||||||
*/
|
|
||||||
const ShapeAnnotation& Get( const int theIndex ) const { return myAnnotations[theIndex]; }
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Returns mutable reference on the annotation entry.
|
|
||||||
* \param theIndex [in] the index of annotation entry.
|
|
||||||
*/
|
|
||||||
ShapeAnnotation& Change( const int theIndex ) { return myAnnotations[theIndex]; }
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Removes entry by its index.
|
|
||||||
* \param theIndex [in] the index of annotation entry.
|
|
||||||
*/
|
|
||||||
void Remove( const int theIndex ) { myAnnotations.remove( theIndex ); }
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Clears property data.
|
|
||||||
*/
|
|
||||||
void Clear() { myAnnotations.clear(); }
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Returns number of shape annotation records.
|
|
||||||
*/
|
|
||||||
virtual int GetNumber() const { return myAnnotations.size(); };
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Returns visibility state of dimension record by its index.
|
|
||||||
*
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
*/
|
|
||||||
virtual bool IsVisible( const int theIndex ) const
|
|
||||||
{
|
|
||||||
return myAnnotations[theIndex].IsVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Changes visibility state of the dimension record.
|
|
||||||
*
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
* \param theIsVisible [in] the new visibility state.
|
|
||||||
*/
|
|
||||||
virtual void SetVisible( const int theIndex, const bool theIsVisible )
|
|
||||||
{
|
|
||||||
myAnnotations[theIndex].IsVisible = theIsVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Returns name of dimension record by its index.
|
|
||||||
*
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
*/
|
|
||||||
virtual QString GetName( const int theIndex ) const
|
|
||||||
{
|
|
||||||
return myAnnotations[theIndex].Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Changes name of dimension record.
|
|
||||||
*
|
|
||||||
* \param theIndex [in] the index of the dimension record.
|
|
||||||
* \param theName [in] the new name.
|
|
||||||
*/
|
|
||||||
virtual void SetName( const int theIndex, const QString& theName )
|
|
||||||
{
|
|
||||||
myAnnotations[theIndex].Name = theName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Loads properties data from attribute.
|
|
||||||
* \param theStudy [in] the study.
|
|
||||||
* \param theEntry [in] the entry of GEOM object to operate with.
|
|
||||||
*/
|
|
||||||
virtual void LoadFromAttribute( SalomeApp_Study* theStudy, const std::string& theEntry );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Saves properties data to attribute.
|
|
||||||
* \param theStudy [in] the study.
|
|
||||||
* \param theEntry [in] the entry of GEOM object to operate with.
|
|
||||||
*/
|
|
||||||
virtual void SaveToAttribute( SalomeApp_Study* theStudy, const std::string& theEntry );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
QVector<ShapeAnnotation> myAnnotations;
|
|
||||||
};
|
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(GEOMGUI_ShapeAnnotations);
|
|
||||||
|
|
||||||
#endif
|
|
6
src/GEOMGUI/GEOMGUI_TextTreeWdg.cxx
Normal file → Executable file
6
src/GEOMGUI/GEOMGUI_TextTreeWdg.cxx
Normal file → Executable file
@ -22,7 +22,7 @@
|
|||||||
#include "GEOMGUI_TextTreeWdg.h"
|
#include "GEOMGUI_TextTreeWdg.h"
|
||||||
|
|
||||||
#include "GEOMGUI_DimensionProperty.h"
|
#include "GEOMGUI_DimensionProperty.h"
|
||||||
#include "GEOMGUI_ShapeAnnotations.h"
|
//#include "GEOMGUI_ShapeAnnotations.h"
|
||||||
#include "GeometryGUI.h"
|
#include "GeometryGUI.h"
|
||||||
#include "GeometryGUI_Operations.h"
|
#include "GeometryGUI_Operations.h"
|
||||||
#include <GEOM_Constants.h>
|
#include <GEOM_Constants.h>
|
||||||
@ -179,7 +179,7 @@ void GEOMGUI_TextTreeWdg::updateBranch( const QString& theEntry )
|
|||||||
fillBranch( Geometry, theEntry );
|
fillBranch( Geometry, theEntry );
|
||||||
|
|
||||||
// annotation property branch
|
// annotation property branch
|
||||||
fillBranch(AnnotationShape, theEntry);
|
// fillBranch(AnnotationShape, theEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GEOMGUI_TextTreeWdg::fillBranch( const BranchType& theBranchType, const QString& theEntry )
|
void GEOMGUI_TextTreeWdg::fillBranch( const BranchType& theBranchType, const QString& theEntry )
|
||||||
@ -252,7 +252,7 @@ VisualPropertiesPtr GEOMGUI_TextTreeWdg::getVisualProperty( const BranchType& th
|
|||||||
aProp = QSharedPointer<GEOMGUI_DimensionProperty>( new GEOMGUI_DimensionProperty() );
|
aProp = QSharedPointer<GEOMGUI_DimensionProperty>( new GEOMGUI_DimensionProperty() );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aProp = QSharedPointer<GEOMGUI_ShapeAnnotations>( new GEOMGUI_ShapeAnnotations() );
|
//aProp = QSharedPointer<GEOMGUI_ShapeAnnotations>( new GEOMGUI_ShapeAnnotations() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return aProp;
|
return aProp;
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
#include <GEOM_VTKPropertyMaterial.hxx>
|
#include <GEOM_VTKPropertyMaterial.hxx>
|
||||||
|
|
||||||
#include <GEOMGUI_DimensionProperty.h>
|
#include <GEOMGUI_DimensionProperty.h>
|
||||||
#include <GEOMGUI_ShapeAnnotations.h>
|
#include <GEOMGUI_AnnotationAttrs.h>
|
||||||
|
|
||||||
#include <GEOMUtils.hxx>
|
#include <GEOMUtils.hxx>
|
||||||
|
|
||||||
@ -1411,27 +1411,25 @@ void GEOM_Displayer::updateShapeAnnotations( const Handle(SALOME_InteractiveObje
|
|||||||
const int aLineStyle = aResMgr->integerValue( "Geometry", "shape_annotation_line_style", 0 );
|
const int aLineStyle = aResMgr->integerValue( "Geometry", "shape_annotation_line_style", 0 );
|
||||||
const bool isAutoHide = aResMgr->booleanValue( "Geometry", "shape_annotation_autohide", false );
|
const bool isAutoHide = aResMgr->booleanValue( "Geometry", "shape_annotation_autohide", false );
|
||||||
|
|
||||||
QVariant aProperty = aStudy->getObjectProperty( GEOM::sharedPropertiesId(),
|
_PTR(SObject) aSObj = aStudy->studyDS()->FindObjectID( theIO->getEntry() );
|
||||||
theIO->getEntry(),
|
|
||||||
GEOM::propertyName( GEOM::ShapeAnnotations ),
|
|
||||||
QVariant() );
|
|
||||||
|
|
||||||
GEOMGUI_ShapeAnnotations aAnnotationList;
|
const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnotations = GEOMGUI_AnnotationAttrs::FindAttributes( aSObj );
|
||||||
|
|
||||||
if ( aProperty.isValid() && aProperty.canConvert<GEOMGUI_ShapeAnnotations>() )
|
if ( !aShapeAnnotations.IsNull() )
|
||||||
{
|
{
|
||||||
aAnnotationList = aProperty.value<GEOMGUI_ShapeAnnotations>();
|
gp_Trsf aToLCS;
|
||||||
|
aToLCS.SetTransformation( theShapeLCS, gp_Ax3() );
|
||||||
|
|
||||||
for ( int anI = 0; anI < aAnnotationList.GetNumber(); ++anI )
|
for ( int anI = 0; anI < aShapeAnnotations->GetCount(); ++anI )
|
||||||
{
|
{
|
||||||
if ( !aAnnotationList.Get( anI ).IsVisible )
|
if ( !aShapeAnnotations->GetIsVisible( anI ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(GEOM_Annotation) aPresentation = new GEOM_Annotation();
|
Handle(GEOM_Annotation) aPresentation = new GEOM_Annotation();
|
||||||
|
|
||||||
aAnnotationList.ToPresentation ( anI, aPresentation, theShapeLCS );
|
aShapeAnnotations->SetupPresentation( aPresentation, anI, theShapeLCS );
|
||||||
|
|
||||||
aPresentation->SetOwner( theIO );
|
aPresentation->SetOwner( theIO );
|
||||||
|
|
||||||
|
46
src/MeasureGUI/MeasureGUI_AnnotationDlg.cxx
Normal file → Executable file
46
src/MeasureGUI/MeasureGUI_AnnotationDlg.cxx
Normal file → Executable file
@ -351,12 +351,16 @@ bool MeasureGUI_AnnotationDlg::ClickOnApply()
|
|||||||
setIsDisplayResult( true );
|
setIsDisplayResult( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if ( myIsCreation )
|
if ( !myShape->_is_nil() ) {
|
||||||
{
|
redisplay( myShape.get() );
|
||||||
myAnnotation = GEOM::GEOM_Field::_nil();
|
}
|
||||||
|
|
||||||
|
if ( myIsCreation ) {
|
||||||
|
|
||||||
if ( !isApplyAndClose() )
|
if ( !isApplyAndClose() )
|
||||||
Init();
|
Init();
|
||||||
}*/
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,26 +583,20 @@ bool MeasureGUI_AnnotationDlg::execute()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( myIsCreation ) {
|
if ( myIsCreation ) {
|
||||||
|
|
||||||
SalomeApp_Study* aStudy = getStudy();
|
SalomeApp_Study* aStudy = getStudy();
|
||||||
GEOMGUI_ShapeAnnotations aProp =
|
|
||||||
aStudy->getObjectProperty( GEOM::sharedPropertiesId(),
|
|
||||||
myShape->GetStudyEntry(),
|
|
||||||
GEOM::propertyName( GEOM::ShapeAnnotations ),
|
|
||||||
QVariant() )
|
|
||||||
.value<GEOMGUI_ShapeAnnotations>();
|
|
||||||
|
|
||||||
// append new dimension record to data
|
_PTR(SObject) aSObj = aStudy->studyDS()->FindObjectID( myShape->GetStudyEntry() );
|
||||||
int aPropId = aProp.GetNumber() - 1;
|
|
||||||
myAnnotationProperties.Name = getNewObjectName(); // update here as we do not listen name modification
|
|
||||||
myAnnotationProperties.IsVisible = true; // initially created annotation is hidden
|
|
||||||
aProp.Add( myAnnotationProperties );
|
|
||||||
|
|
||||||
// store modified property data
|
Handle(GEOMGUI_AnnotationAttrs) aShapeAnnotations =
|
||||||
aStudy->setObjectProperty( GEOM::sharedPropertiesId(),
|
GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( aSObj, aStudy );
|
||||||
myShape->GetStudyEntry(), GEOM::propertyName( GEOM::ShapeAnnotations ),
|
|
||||||
aProp );
|
myAnnotationProperties.Name = getNewObjectName(); // update here as we do not listen name modification
|
||||||
aProp.SaveToAttribute( aStudy, myShape->GetStudyEntry() );
|
myAnnotationProperties.IsVisible = true; // initially created annotation is hidden
|
||||||
myGeomGUI->emitDimensionsUpdated( QString( myShape->GetStudyEntry() ) );
|
|
||||||
|
aShapeAnnotations->Append( myAnnotationProperties );
|
||||||
|
|
||||||
|
/* myGeomGUI->emitDimensionsUpdated( QString( myShape->GetStudyEntry() ) ); */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/*SalomeApp_Study* aStudy = getStudy();
|
/*SalomeApp_Study* aStudy = getStudy();
|
||||||
@ -644,7 +642,7 @@ SALOME_Prs* MeasureGUI_AnnotationDlg::buildPrs()
|
|||||||
TopoDS_Shape aShape;
|
TopoDS_Shape aShape;
|
||||||
GEOMBase::GetShape( myShape.get(), aShape );
|
GEOMBase::GetShape( myShape.get(), aShape );
|
||||||
gp_Ax3 aShapeLCS = gp_Ax3().Transformed( aShape.Location().Transformation() );
|
gp_Ax3 aShapeLCS = gp_Ax3().Transformed( aShape.Location().Transformation() );
|
||||||
myAnnotationProperties.ToPresentation( aPresentation, aShapeLCS );
|
GEOMGUI_AnnotationAttrs::SetupPresentation( aPresentation, myAnnotationProperties, aShapeLCS );
|
||||||
|
|
||||||
// add Prs to preview
|
// add Prs to preview
|
||||||
SUIT_ViewWindow* vw =
|
SUIT_ViewWindow* vw =
|
||||||
@ -672,7 +670,7 @@ void MeasureGUI_AnnotationDlg::updateSubShapeEnableState()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : buildPrs
|
// function : redisplayPreview
|
||||||
// purpose : creates annotation presentation object and corresponded SALOME presentation
|
// purpose : creates annotation presentation object and corresponded SALOME presentation
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_AnnotationDlg::redisplayPreview()
|
void MeasureGUI_AnnotationDlg::redisplayPreview()
|
||||||
|
4
src/MeasureGUI/MeasureGUI_AnnotationDlg.h
Normal file → Executable file
4
src/MeasureGUI/MeasureGUI_AnnotationDlg.h
Normal file → Executable file
@ -29,7 +29,7 @@
|
|||||||
#include <GEOMBase_Skeleton.h>
|
#include <GEOMBase_Skeleton.h>
|
||||||
|
|
||||||
#include <GEOM_Constants.h>
|
#include <GEOM_Constants.h>
|
||||||
#include <GEOMGUI_ShapeAnnotations.h>
|
#include <GEOMGUI_AnnotationAttrs.h>
|
||||||
|
|
||||||
#include <TopAbs_ShapeEnum.hxx>
|
#include <TopAbs_ShapeEnum.hxx>
|
||||||
//#include <TColStd_DataMapOfIntegerInteger.hxx>
|
//#include <TColStd_DataMapOfIntegerInteger.hxx>
|
||||||
@ -94,7 +94,7 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TopAbs_ShapeEnum mySelectionMode;
|
TopAbs_ShapeEnum mySelectionMode;
|
||||||
GEOMGUI_ShapeAnnotations::ShapeAnnotation myAnnotationProperties;
|
GEOMGUI_AnnotationAttrs::Properties myAnnotationProperties;
|
||||||
/// an index of edited annotation in the list shape annotations, -1 in create operation
|
/// an index of edited annotation in the list shape annotations, -1 in create operation
|
||||||
bool myIsCreation;
|
bool myIsCreation;
|
||||||
GEOM::GeomObjPtr myShape;
|
GEOM::GeomObjPtr myShape;
|
||||||
|
Loading…
Reference in New Issue
Block a user