GEOMGUI_TextTreeWdg.h
GEOMGUI_VisualProperties.h
GEOMGUI_DimensionProperty.h
- GEOMGUI_ShapeAnnotations.h
+ GEOMGUI_AnnotationAttrs.h
)
# header files / to be processed by moc
GEOMGUI_CreationInfoWdg.cxx
GEOMGUI_TextTreeWdg.cxx
GEOMGUI_DimensionProperty.cxx
- GEOMGUI_ShapeAnnotations.cxx
+ GEOMGUI_AnnotationAttrs.cxx
${_moc_SOURCES}
${_rcc_SOURCES}
)
--- /dev/null
+// 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;\r
+ aToLCS.SetTransformation( theLCS, gp_Ax3() );\r
+\r
+ TCollection_ExtendedString aText;\r
+ for (int i = 0; i < (int)theProps.Text.length(); i++ )\r
+ aText.Insert( i + 1, theProps.Text[ i ].unicode() );\r
+ //\r
+ thePresentation->SetText( aText );\r
+ thePresentation->SetScreenFixed( theProps.IsScreenFixed );\r
+ thePresentation->SetPosition( theProps.Position );\r
+ 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 );
+}
--- /dev/null
+// 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
+++ /dev/null
-// 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() );
- }
-}
+++ /dev/null
-// 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
#include "GEOMGUI_TextTreeWdg.h"
#include "GEOMGUI_DimensionProperty.h"
-#include "GEOMGUI_ShapeAnnotations.h"
+//#include "GEOMGUI_ShapeAnnotations.h"
#include "GeometryGUI.h"
#include "GeometryGUI_Operations.h"
#include <GEOM_Constants.h>
fillBranch( Geometry, theEntry );
// annotation property branch
- fillBranch(AnnotationShape, theEntry);
+ // fillBranch(AnnotationShape, theEntry);
}
void GEOMGUI_TextTreeWdg::fillBranch( const BranchType& theBranchType, const QString& theEntry )
aProp = QSharedPointer<GEOMGUI_DimensionProperty>( new GEOMGUI_DimensionProperty() );
}
else {
- aProp = QSharedPointer<GEOMGUI_ShapeAnnotations>( new GEOMGUI_ShapeAnnotations() );
+ //aProp = QSharedPointer<GEOMGUI_ShapeAnnotations>( new GEOMGUI_ShapeAnnotations() );
}
return aProp;
#include <GEOM_VTKPropertyMaterial.hxx>
#include <GEOMGUI_DimensionProperty.h>
-#include <GEOMGUI_ShapeAnnotations.h>
+#include <GEOMGUI_AnnotationAttrs.h>
#include <GEOMUtils.hxx>
const int aLineStyle = aResMgr->integerValue( "Geometry", "shape_annotation_line_style", 0 );
const bool isAutoHide = aResMgr->booleanValue( "Geometry", "shape_annotation_autohide", false );
- QVariant aProperty = aStudy->getObjectProperty( GEOM::sharedPropertiesId(),
- theIO->getEntry(),
- GEOM::propertyName( GEOM::ShapeAnnotations ),
- QVariant() );
+ _PTR(SObject) aSObj = aStudy->studyDS()->FindObjectID( theIO->getEntry() );
- 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;\r
+ 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;
}
- Handle(GEOM_Annotation) aPresentation = new GEOM_Annotation();
-
- aAnnotationList.ToPresentation ( anI, aPresentation, theShapeLCS );
+ Handle(GEOM_Annotation) aPresentation = new GEOM_Annotation();\r
+\r
+ aShapeAnnotations->SetupPresentation( aPresentation, anI, theShapeLCS );\r
aPresentation->SetOwner( theIO );
setIsDisplayResult( true );
}
- /*if ( myIsCreation )
- {
- myAnnotation = GEOM::GEOM_Field::_nil();
+ if ( !myShape->_is_nil() ) {
+ redisplay( myShape.get() );
+ }
+
+ if ( myIsCreation ) {
+
if ( !isApplyAndClose() )
- Init();
- }*/
+ Init();
+ }
+
return true;
}
return false;
if ( myIsCreation ) {
+
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
- 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
- aStudy->setObjectProperty( GEOM::sharedPropertiesId(),
- myShape->GetStudyEntry(), GEOM::propertyName( GEOM::ShapeAnnotations ),
- aProp );
- aProp.SaveToAttribute( aStudy, myShape->GetStudyEntry() );
- myGeomGUI->emitDimensionsUpdated( QString( myShape->GetStudyEntry() ) );
+ _PTR(SObject) aSObj = aStudy->studyDS()->FindObjectID( myShape->GetStudyEntry() );
+
+ Handle(GEOMGUI_AnnotationAttrs) aShapeAnnotations =
+ GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( aSObj, aStudy );
+
+ myAnnotationProperties.Name = getNewObjectName(); // update here as we do not listen name modification
+ myAnnotationProperties.IsVisible = true; // initially created annotation is hidden
+
+ aShapeAnnotations->Append( myAnnotationProperties );
+
+ /* myGeomGUI->emitDimensionsUpdated( QString( myShape->GetStudyEntry() ) ); */
}
else {
/*SalomeApp_Study* aStudy = getStudy();
TopoDS_Shape aShape;
GEOMBase::GetShape( myShape.get(), aShape );
gp_Ax3 aShapeLCS = gp_Ax3().Transformed( aShape.Location().Transformation() );
- myAnnotationProperties.ToPresentation( aPresentation, aShapeLCS );
+ GEOMGUI_AnnotationAttrs::SetupPresentation( aPresentation, myAnnotationProperties, aShapeLCS );
// add Prs to preview
SUIT_ViewWindow* vw =
}
//=================================================================================
-// function : buildPrs
+// function : redisplayPreview
// purpose : creates annotation presentation object and corresponded SALOME presentation
//=================================================================================
void MeasureGUI_AnnotationDlg::redisplayPreview()
#include <GEOMBase_Skeleton.h>
#include <GEOM_Constants.h>
-#include <GEOMGUI_ShapeAnnotations.h>
+#include <GEOMGUI_AnnotationAttrs.h>
#include <TopAbs_ShapeEnum.hxx>
//#include <TColStd_DataMapOfIntegerInteger.hxx>
private:
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
bool myIsCreation;
GEOM::GeomObjPtr myShape;