1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-08 14:17:06 +03:00

Compare commits

..

24 Commits

Author SHA1 Message Date
nds
df3644aa35 0031197: Visualization - SetTransformPersistence for highlight, select presentations 2019-12-05 17:15:09 +03:00
tma
0252a0a4fb refs #1279: Application hangs up on update of the view
Improve performance of the storage of the transparent state of the assembly leafs
2019-11-06 16:55:52 +03:00
nds
b4baade508 0030784: Visualization - check if selectable of owner in internal container in AIS_InteractiveContext before using 2019-10-18 15:32:30 +03:00
snn
460abf4e0f groups of notes bug fix 2019-10-01 10:55:34 +03:00
snn
a9db047e5d groups of notes added to XCAFDoc_NotesTool
# Conflicts:
#	src/XCAFDoc/XCAFDoc_NotesTool.cxx
2019-10-01 10:55:20 +03:00
snn
9640291ff0 0030988: Add possibility to attach multiple files to notes
Implemented
2019-09-20 18:29:33 +03:00
tma
7b296f0230 0030957: Assembly item Id should not start with '/' symbol
(cherry picked from commit 71b4fb4b10d050440971ca12af6d25e8989ec8ba)
2019-09-09 15:02:22 +03:00
nds
bf82385599 0030728: Visualization - using one implementation of highlight/unhighlight in context - compilation correction
#correction for compilation
2019-09-05 15:40:29 +03:00
nds
41a2c46b21 Revert "0030728: Visualization - using one implementation of highlight/unhighlight in context - compilation correction"
This reverts commit 52cc62eee8.
2019-09-05 15:12:05 +03:00
nds
fd448091bf 0030728: Visualization - using one implementation of highlight/unhighlight in context
#fix regression found by DRAW tests
2019-09-04 09:47:42 +03:00
nds
280e1f1b27 0030791: Visualization - possibility to display materials by different hatching style for clipping
# move capping style from presentation into drawer
# crash in capping by setting projection as
# several hatch templates

(cherry picked from commit 3a8ba84200)
2019-09-04 00:52:36 +03:00
vro
fd8fbd466b 0030784: Visualization - check if selectable of owner in internal container in AIS_InteractiveContext before using
# Issue #1140: Click on interactive cube crashes the application.
2019-09-03 17:25:21 +03:00
nds
cdfdde3191 0029451: Information Message Alert to debug an algorithm or object functionality,
0030268: Inspectors - improvements in VInspector plugin

Dump/Init implementation in OCCT object and parsing it in MessageView (VInspector later)
2019-09-03 15:01:13 +03:00
nds
2147f85a35 0030791: Visualization - possibility to display materials by different hatching style for clipping
#compilation correction for VS2017, Debian
2019-09-03 11:57:15 +03:00
nds
502194e4fc 0030737: Visualization - implementing new selection schemes in context
(cherry picked from commit 951d93f193cdc00724586df1903ad39fc487cecd)
2019-09-02 18:46:12 +03:00
nds
d5c557436d 0030537: Visualization - wrapping text in font text formatter
Font_TextFormatter inherits Standard_Transient, now it is given as a handle in functions.
Graphic3d_Text - extended with Font_TextFormatter to be able to have it filled out of text render. If it is not defined here, the default text formatter of context is used.
OpenGl_Context - has default Font_TextFormatter for rendering OpenGl_Text.
2019-09-02 18:44:07 +03:00
nds
52cc62eee8 0030728: Visualization - using one implementation of highlight/unhighlight in context - compilation correction
#correction for compilation
2019-09-02 17:58:05 +03:00
nds
7d4472c752 0030791: Visualization - possibility to display materials by different hatching style for clipping
(cherry picked from commit fafcc26452)

# Conflicts:
#	src/Graphic3d/Graphic3d_Group.hxx
2019-09-02 17:12:03 +03:00
nds
3ca159f3ca 0030784: Visualization - check if selectable of owner in internal container in AIS_InteractiveContext before using
# todo - add similar check for other places where needed

(cherry picked from commit 9e58a20735)
2019-09-02 16:57:09 +03:00
nds
f25bebd7b3 0030728: Visualization - using one implementation of highlight/unhighlight in context
(cherry picked from commit 36b87936acf5a89d573663b5e8d086a4a4a084d3)

# Conflicts:
#	src/AIS/AIS_InteractiveContext_1.cxx
(cherry picked from commit 7fc133f086611b4f4e36b658f99c29012da921d1)

# Conflicts:
#	src/AIS/AIS_InteractiveContext_1.cxx
(cherry picked from commit a06b8e8308)
(cherry picked from commit 0d5a72ab1638e4ed3d3eb72b15430ee7337f69bc)

# Conflicts:
#	src/AIS/AIS_InteractiveContext.cxx
(cherry picked from commit 9e9c9c84bd)
2019-09-02 16:42:46 +03:00
snn
68be9e7b9c 0030392: XCAFDoc_GraphNode doesn't copy backward links
(cherry picked from commit 6131065fae)
(cherry picked from commit 713624228050b8f7db4d8b2e22c7edfd8c832471)
(cherry picked from commit b7fb7db6ae)
2019-09-02 16:17:47 +03:00
nds
7bc6dba60c refs 474:Possibility to create and play animations
(cherry picked from commit d9a231a9ce2499615952944cae1a0db6552db2e4)
(cherry picked from commit ab078490cd)
(cherry picked from commit 277ea0a15e589efd7128f915959a18a59ebdfd1c)
(cherry picked from commit 89d8a85dd8)
2019-09-02 16:11:40 +03:00
nds
37d575793d refs #355: Add possibility to hide clipping plane
(cherry picked from commit ca1f82f6c6860a2e1995d7d9a66ce8c152e9d3cc)
(cherry picked from commit 61f39b4dc7)
(cherry picked from commit 7b08ab936a5f6091651fc0311c5c255bd0dc9cb0)

# Conflicts:
#	src/XCAFDoc/XCAFDoc.hxx
(cherry picked from commit 72e4a10556)
2019-09-02 16:03:29 +03:00
nds
9f13057096 XCAFDoc/View fixes to store in the view: image, parts transparency, notes, notes positions
(cherry picked from commit b050e0a15c06403adfa545ad793555491a0b6b9f)
(cherry picked from commit 7099619e5d)
(cherry picked from commit ccd4b101f5ab18ab3518b9779e88d687e2db6ff1)

# Conflicts:
#	src/XCAFDoc/XCAFDoc.cxx
#	src/XCAFDoc/XCAFDoc.hxx
(cherry picked from commit a22653eb86)
2019-09-02 15:16:04 +03:00
598 changed files with 42463 additions and 5459 deletions

View File

@@ -1,4 +1,4 @@
TModelingData TKShapeView TModelingData TKShapeView TKMessageModel TKMessageView
TVisualization TKView TKVInspector TVisualization TKView TKVInspector
TApplicationFramework TKTreeModel TKTInspectorAPI TKDFBrowser TApplicationFramework TKTreeModel TKTInspectorAPI TKDFBrowser
TTool TKTInspector TKToolsDraw TInspectorEXE TTool TKTInspector TKToolsDraw TInspectorEXE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

BIN
data/images/hatch_1_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

BIN
data/images/hatch_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

BIN
data/images/hatch_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

BIN
data/images/hatch_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

BIN
data/images/hatch_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

BIN
data/images/hatch_6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 B

BIN
data/images/hatch_7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

BIN
data/images/hatch_8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -82,6 +82,24 @@
const Standard_Real SquareTolerance = Precision::SquareConfusion(); const Standard_Real SquareTolerance = Precision::SquareConfusion();
namespace
{
static Standard_CString AIS_Table_PrintDisplayMode[2] =
{
"WIREFRAME", "SHADING"
};
static Standard_CString AIS_Table_PrintDisplayStatus[3] =
{
"DISPLAYED", "ERASED", "NONE"
};
static Standard_CString AIS_Table_PrintKindOfInteractive[6] =
{
"NONE", "DATUM", "SHAPE", "OBJECT", "RELATION", "DIMENSION"
};
}
//======================================================================= //=======================================================================
//function : Nearest //function : Nearest
//purpose : //purpose :
@@ -1533,3 +1551,93 @@ void AIS::ComputeProjVertexPresentation (const Handle( Prs3d_Presentation )& aPr
StdPrs_WFShape::Add (aPresentation, MakEd.Edge(), aDrawer); StdPrs_WFShape::Add (aPresentation, MakEd.Edge(), aDrawer);
} }
} }
//=======================================================================
//function : DisplayModeToString
//purpose :
//=======================================================================
Standard_CString AIS::DisplayModeToString (AIS_DisplayMode theType)
{
return AIS_Table_PrintDisplayMode[theType];
}
//=======================================================================
//function : DisplayModeFromString
//purpose :
//=======================================================================
Standard_Boolean AIS::DisplayModeFromString (Standard_CString theTypeString,
AIS_DisplayMode& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= AIS_Shaded; ++aTypeIter)
{
Standard_CString aTypeName = AIS_Table_PrintDisplayMode[aTypeIter];
if (aName == aTypeName)
{
theType = AIS_DisplayMode (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : DisplayStatusToString
//purpose :
//=======================================================================
Standard_CString AIS::DisplayStatusToString (AIS_DisplayStatus theType)
{
return AIS_Table_PrintDisplayStatus[theType];
}
//=======================================================================
//function : DisplayStatusFromString
//purpose :
//=======================================================================
Standard_Boolean AIS::DisplayStatusFromString (Standard_CString theTypeString,
AIS_DisplayStatus& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= AIS_DS_None; ++aTypeIter)
{
Standard_CString aTypeName = AIS_Table_PrintDisplayStatus[aTypeIter];
if (aName == aTypeName)
{
theType = AIS_DisplayStatus (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : KindOfInteractiveToString
//purpose :
//=======================================================================
Standard_CString AIS::KindOfInteractiveToString (AIS_KindOfInteractive theType)
{
return AIS_Table_PrintKindOfInteractive[theType];
}
//=======================================================================
//function : KindOfInteractiveFromString
//purpose :
//=======================================================================
Standard_Boolean AIS::KindOfInteractiveFromString (Standard_CString theTypeString,
AIS_KindOfInteractive& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= AIS_KOI_Dimension; ++aTypeIter)
{
Standard_CString aTypeName = AIS_Table_PrintKindOfInteractive[aTypeIter];
if (aName == aTypeName)
{
theType = AIS_KindOfInteractive (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}

View File

@@ -17,6 +17,9 @@
#ifndef _AIS_HeaderFile #ifndef _AIS_HeaderFile
#define _AIS_HeaderFile #define _AIS_HeaderFile
#include <AIS_DisplayStatus.hxx>
#include <AIS_DisplayMode.hxx>
#include <AIS_KindOfInteractive.hxx>
#include <AIS_KindOfSurface.hxx> #include <AIS_KindOfSurface.hxx>
#include <Aspect_TypeOfLine.hxx> #include <Aspect_TypeOfLine.hxx>
#include <Aspect_TypeOfMarker.hxx> #include <Aspect_TypeOfMarker.hxx>
@@ -203,6 +206,72 @@ public:
Standard_EXPORT static void ComputeProjVertexPresentation (const Handle(Prs3d_Presentation)& aPres, const Handle(Prs3d_Drawer)& aDrawer, const TopoDS_Vertex& aVertex, const gp_Pnt& ProjPoint, const Quantity_NameOfColor aColor = Quantity_NOC_PURPLE, const Standard_Real aWidth = 2, const Aspect_TypeOfMarker aProjTOM = Aspect_TOM_PLUS, const Aspect_TypeOfLine aCallTOL = Aspect_TOL_DOT); Standard_EXPORT static void ComputeProjVertexPresentation (const Handle(Prs3d_Presentation)& aPres, const Handle(Prs3d_Drawer)& aDrawer, const TopoDS_Vertex& aVertex, const gp_Pnt& ProjPoint, const Quantity_NameOfColor aColor = Quantity_NOC_PURPLE, const Standard_Real aWidth = 2, const Aspect_TypeOfMarker aProjTOM = Aspect_TOM_PLUS, const Aspect_TypeOfLine aCallTOL = Aspect_TOL_DOT);
//! Returns the string name for a given enum type.
//! @param theType display mode
//! @return string identifier
Standard_EXPORT static Standard_CString DisplayModeToString (AIS_DisplayMode theType);
//! Returns the display mode from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return status type or AIS_WireFrame if string identifier is invalid
static AIS_DisplayMode DisplayModeFromString (Standard_CString theTypeString)
{
AIS_DisplayMode aType = AIS_WireFrame;
DisplayModeFromString (theTypeString, aType);
return aType;
}
//! Determines the display mode from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected display status
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean DisplayModeFromString (const Standard_CString theTypeString,
AIS_DisplayMode& theType);
//! Returns the string name for a given enum type.
//! @param theType display status
//! @return string identifier
Standard_EXPORT static Standard_CString DisplayStatusToString (AIS_DisplayStatus theType);
//! Returns the display status from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return status type or AIS_DS_None if string identifier is invalid
static AIS_DisplayStatus DisplayStatusFromString (Standard_CString theTypeString)
{
AIS_DisplayStatus aType = AIS_DS_None;
DisplayStatusFromString (theTypeString, aType);
return aType;
}
//! Determines the shape type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected display status
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean DisplayStatusFromString (const Standard_CString theTypeString,
AIS_DisplayStatus& theType);
//! Returns the string name for a given enum type.
//! @param theType display status
//! @return string identifier
Standard_EXPORT static Standard_CString KindOfInteractiveToString (AIS_KindOfInteractive theType);
//! Returns the display status from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return status type or AIS_KOI_None if string identifier is invalid
static AIS_KindOfInteractive KindOfInteractiveFromString (Standard_CString theTypeString)
{
AIS_KindOfInteractive aType = AIS_KOI_None;
KindOfInteractiveFromString (theTypeString, aType);
return aType;
}
//! Determines the shape type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected display status
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean KindOfInteractiveFromString (const Standard_CString theTypeString,
AIS_KindOfInteractive& theType);
}; };
#endif // _AIS_HeaderFile #endif // _AIS_HeaderFile

View File

@@ -633,6 +633,11 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
{ {
aShadedGroup = thePrs->NewGroup(); aShadedGroup = thePrs->NewGroup();
aShadedGroup->SetClosed (isClosed); aShadedGroup->SetClosed (isClosed);
if (isClosed)
{
if (aDrawer->HasOwnFillCappingAspect())
aShadedGroup->SetGroupPrimitivesAspect (aDrawer->FillCappingAspect());
}
} }
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect()); aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
aShadedGroup->AddPrimitiveArray (aTriangles); aShadedGroup->AddPrimitiveArray (aTriangles);

View File

@@ -1968,7 +1968,7 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
} }
const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0; const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
unhighlightOwners (theIObj); unselectOwners (theIObj);
myMainPM->SetVisibility (theIObj, aStatus->DisplayMode(), Standard_False); myMainPM->SetVisibility (theIObj, aStatus->DisplayMode(), Standard_False);
if (!myLastPicked.IsNull() if (!myLastPicked.IsNull()
@@ -2000,10 +2000,10 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
} }
//======================================================================= //=======================================================================
//function : unhighlightOwners //function : unselectOwners
//purpose : //purpose :
//======================================================================= //=======================================================================
void AIS_InteractiveContext::unhighlightOwners (const Handle(AIS_InteractiveObject)& theObject) void AIS_InteractiveContext::unselectOwners (const Handle(AIS_InteractiveObject)& theObject)
{ {
SelectMgr_SequenceOfOwner aSeq; SelectMgr_SequenceOfOwner aSeq;
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next()) for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
@@ -2037,7 +2037,7 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
return; return;
} }
unhighlightOwners (theIObj); unselectOwners (theIObj);
myMainPM->Erase (theIObj, -1); myMainPM->Erase (theIObj, -1);
theIObj->ErasePresentations (true); // make sure highlighting presentations are properly erased theIObj->ErasePresentations (true); // make sure highlighting presentations are properly erased
@@ -2538,6 +2538,15 @@ void AIS_InteractiveContext::SetTransformPersistence (const Handle(AIS_Interacti
const Handle(Graphic3d_TransformPers)& theTrsfPers) const Handle(Graphic3d_TransformPers)& theTrsfPers)
{ {
theObject->SetTransformPersistence (theTrsfPers); theObject->SetTransformPersistence (theTrsfPers);
UpdateOnTransformPersistence (theObject);
}
//=======================================================================
//function : UpdateOnTransformPersistence
//purpose :
//=======================================================================
void AIS_InteractiveContext::UpdateOnTransformPersistence (const Handle(AIS_InteractiveObject)& theObject)
{
if (!myObjects.IsBound (theObject)) if (!myObjects.IsBound (theObject))
{ {
return; return;

View File

@@ -25,6 +25,7 @@
#include <AIS_ListOfInteractive.hxx> #include <AIS_ListOfInteractive.hxx>
#include <AIS_Selection.hxx> #include <AIS_Selection.hxx>
#include <AIS_SelectionModesConcurrency.hxx> #include <AIS_SelectionModesConcurrency.hxx>
#include <AIS_SelectionScheme.hxx>
#include <AIS_StatusOfDetection.hxx> #include <AIS_StatusOfDetection.hxx>
#include <AIS_StatusOfPick.hxx> #include <AIS_StatusOfPick.hxx>
#include <AIS_TypeOfIso.hxx> #include <AIS_TypeOfIso.hxx>
@@ -344,6 +345,11 @@ public: //! @name object local transformation management
Standard_EXPORT void SetTransformPersistence (const Handle(AIS_InteractiveObject)& theObject, Standard_EXPORT void SetTransformPersistence (const Handle(AIS_InteractiveObject)& theObject,
const Handle(Graphic3d_TransformPers)& theTrsfPers); const Handle(Graphic3d_TransformPers)& theTrsfPers);
//! Updates displayed interactive object by checking and recomputing its flagged as "to be recomputed" presentation and selection structures.
//! This method does not force any recomputation on its own.
//! The method recomputes selections even if they are loaded without activation in particular selector.
Standard_EXPORT void UpdateOnTransformPersistence (const Handle(AIS_InteractiveObject)& theIObj);
Standard_DEPRECATED("This method is deprecated - SetTransformPersistence() taking Graphic3d_TransformPers should be called instead") Standard_DEPRECATED("This method is deprecated - SetTransformPersistence() taking Graphic3d_TransformPers should be called instead")
void SetTransformPersistence (const Handle(AIS_InteractiveObject)& theObj, void SetTransformPersistence (const Handle(AIS_InteractiveObject)& theObj,
const Graphic3d_TransModeFlags& theFlag, const Graphic3d_TransModeFlags& theFlag,
@@ -470,6 +476,24 @@ public: //! @name Selection management
return AddSelect (theObject->GlobalSelOwner()); return AddSelect (theObject->GlobalSelOwner());
} }
//! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view.
//! The objects detected are passed to the main viewer, which is then updated.
Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer theXPMin,
const Standard_Integer theYPMin,
const Standard_Integer theXPMax,
const Standard_Integer theYPMax,
const Handle(V3d_View)& theView,
const AIS_SelectionScheme theSelScheme);
//! polyline selection; clears the previous picked list
Standard_EXPORT AIS_StatusOfPick Select (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
const AIS_SelectionScheme theSelScheme);
//! Stores and hilights the previous detected; Unhilights the previous picked.
//! @sa MoveTo().
Standard_EXPORT AIS_StatusOfPick Select (const AIS_SelectionScheme theSelScheme);
//! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view. //! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view.
//! The objects detected are passed to the main viewer, which is then updated. //! The objects detected are passed to the main viewer, which is then updated.
Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer theXPMin, Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer theXPMin,
@@ -511,6 +535,13 @@ public: //! @name Selection management
//! Returns bounding box of selected objects. //! Returns bounding box of selected objects.
Standard_EXPORT Bnd_Box BoundingBoxOfSelection() const; Standard_EXPORT Bnd_Box BoundingBoxOfSelection() const;
//! Sets list of owner selected/deselected using selection scheme
//! It is possible that selection of other objects is changed relatively selection scheme .
//! \param theOwner owners to change selection state
//! \param theSelScheme selection scheme
Standard_EXPORT AIS_StatusOfPick Select (const AIS_NListOfEntityOwner& theOwners,
const AIS_SelectionScheme theSelScheme);
//! Fits the view correspondingly to the bounds of selected objects. //! Fits the view correspondingly to the bounds of selected objects.
//! Infinite objects are ignored if infinite state of AIS_InteractiveObject is set to true. //! Infinite objects are ignored if infinite state of AIS_InteractiveObject is set to true.
Standard_EXPORT void FitSelected (const Handle(V3d_View)& theView, Standard_EXPORT void FitSelected (const Handle(V3d_View)& theView,
@@ -1235,7 +1266,7 @@ protected: //! @name internal methods
Standard_EXPORT Standard_Integer PurgeViewer (const Handle(V3d_Viewer)& Vwr); Standard_EXPORT Standard_Integer PurgeViewer (const Handle(V3d_Viewer)& Vwr);
//! Helper function to unhighlight all entity owners currently highlighted with seleciton color. //! Helper function to unhighlight all entity owners currently highlighted with seleciton color.
Standard_EXPORT void unhighlightOwners (const Handle(AIS_InteractiveObject)& theObject); Standard_EXPORT void unselectOwners (const Handle(AIS_InteractiveObject)& theObject);
//! Helper function that highlights the owner given with <theStyle> without //! Helper function that highlights the owner given with <theStyle> without
//! performing AutoHighlight checks, e.g. is used for dynamic highlight. //! performing AutoHighlight checks, e.g. is used for dynamic highlight.
@@ -1246,12 +1277,17 @@ protected: //! @name internal methods
//! for AutoHighlight, e.g. is used for selection. //! for AutoHighlight, e.g. is used for selection.
Standard_EXPORT void highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner); Standard_EXPORT void highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner);
//! Helper function that highlights the owners given with <theStyle> with check
//! for AutoHighlight, e.g. is used for selection.
Standard_EXPORT void highlightOwners (const AIS_NListOfEntityOwner& theOwners,
const Standard_Boolean& theToUseObjectDisplayMode);
//! Helper function that highlights global owner of the object given with <theStyle> with check //! Helper function that highlights global owner of the object given with <theStyle> with check
//! for AutoHighlight, e.g. is used for selection. //! for AutoHighlight, e.g. is used for selection.
//! If global owner is null, it simply highlights the whole object //! If global owner is null, it simply highlights the whole object
Standard_EXPORT void highlightGlobal (const Handle(AIS_InteractiveObject)& theObj, Standard_EXPORT void highlightGlobal (const Handle(AIS_InteractiveObject)& theObj,
const Handle(Prs3d_Drawer)& theStyle, const Handle(Prs3d_Drawer)& theStyle,
const Standard_Integer theDispMode) const; const Standard_Integer theDispMode);
//! Helper function that unhighlights all owners that are stored in current AIS_Selection. //! Helper function that unhighlights all owners that are stored in current AIS_Selection.
//! The function updates global status and selection state of owner and interactive object. //! The function updates global status and selection state of owner and interactive object.
@@ -1259,9 +1295,14 @@ protected: //! @name internal methods
//! switched on in AIS_GlobalStatus will be highlighted with context's sub-intensity color. //! switched on in AIS_GlobalStatus will be highlighted with context's sub-intensity color.
Standard_EXPORT void unhighlightSelected (const Standard_Boolean theIsToHilightSubIntensity = Standard_False); Standard_EXPORT void unhighlightSelected (const Standard_Boolean theIsToHilightSubIntensity = Standard_False);
//! Helper function that highlights the owners given with <theStyle> with check
//! for AutoHighlight, e.g. is used for selection.
Standard_EXPORT void unhighlightOwners (const AIS_NListOfEntityOwner& theOwners,
const Standard_Boolean theIsToHilightSubIntensity = Standard_False);
//! Helper function that unhighlights global selection owner of given interactive. //! Helper function that unhighlights global selection owner of given interactive.
//! The function does not perform any updates of global or owner status //! The function does not perform any updates of global or owner status
Standard_EXPORT void unhighlightGlobal (const Handle(AIS_InteractiveObject)& theObj) const; Standard_EXPORT void unhighlightGlobal (const Handle(AIS_InteractiveObject)& theObj);
//! Helper function that turns on sub-intensity in global status and highlights //! Helper function that turns on sub-intensity in global status and highlights
//! given objects with sub-intensity color //! given objects with sub-intensity color

View File

@@ -85,6 +85,7 @@ void AIS_InteractiveContext::highlightWithColor (const Handle(SelectMgr_EntityOw
//======================================================================= //=======================================================================
void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner) void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwner)& theOwner)
{ {
AIS_NListOfEntityOwner anOwners;
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()); const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
if (anObj.IsNull()) if (anObj.IsNull())
{ {
@@ -98,17 +99,15 @@ void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwn
{ {
if (aSelIter.Value()->IsSameSelectable (anObj)) if (aSelIter.Value()->IsSameSelectable (anObj))
{ {
aSeq.Append (aSelIter.Value()); anOwners.Append (aSelIter.Value());
} }
} }
anObj->HilightSelected (myMainPM, aSeq);
} }
else else
{ {
const Handle(Prs3d_Drawer)& aStyle = getSelStyle (anObj, theOwner); anOwners.Append (theOwner);
const Standard_Integer aHiMode = getHilightMode (anObj, aStyle, -1);
theOwner->HilightWithColor (myMainPM, aStyle, aHiMode);
} }
highlightOwners (anOwners, Standard_False/*check if it is really important*/);
} }
//======================================================================= //=======================================================================
@@ -117,14 +116,19 @@ void AIS_InteractiveContext::highlightSelected (const Handle(SelectMgr_EntityOwn
//======================================================================= //=======================================================================
void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject)& theObj, void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject)& theObj,
const Handle(Prs3d_Drawer)& theStyle, const Handle(Prs3d_Drawer)& theStyle,
const Standard_Integer theDispMode) const const Standard_Integer /*theDispMode*/)
{ {
if (theObj.IsNull()) if (theObj.IsNull())
{ {
return; return;
} }
const Standard_Integer aHiMode = getHilightMode (theObj, theStyle, theDispMode); Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (theObj);
if (!aStatusPtr)
{
return;
}
const Standard_Integer aHiMode = getHilightMode (theObj, theStyle, (*aStatusPtr)->DisplayMode());
const Handle(SelectMgr_EntityOwner)& aGlobOwner = theObj->GlobalSelOwner(); const Handle(SelectMgr_EntityOwner)& aGlobOwner = theObj->GlobalSelOwner();
if (aGlobOwner.IsNull()) if (aGlobOwner.IsNull())
@@ -133,6 +137,7 @@ void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject
return; return;
} }
AIS_NListOfEntityOwner anOwners;
if (!aGlobOwner->IsAutoHilight()) if (!aGlobOwner->IsAutoHilight())
{ {
SelectMgr_SequenceOfOwner aSeq; SelectMgr_SequenceOfOwner aSeq;
@@ -140,15 +145,15 @@ void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject
{ {
if (aSelIter.Value()->IsSameSelectable (theObj)) if (aSelIter.Value()->IsSameSelectable (theObj))
{ {
aSeq.Append (aSelIter.Value()); anOwners.Append (aSelIter.Value());
} }
} }
theObj->HilightSelected (myMainPM, aSeq);
} }
else else
{ {
aGlobOwner->HilightWithColor (myMainPM, theStyle, aHiMode); anOwners.Append (aGlobOwner);
} }
highlightOwners (anOwners, Standard_True);
} }
//======================================================================= //=======================================================================
@@ -156,26 +161,32 @@ void AIS_InteractiveContext::highlightGlobal (const Handle(AIS_InteractiveObject
//purpose : //purpose :
//======================================================================= //=======================================================================
void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsToHilightSubIntensity) void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsToHilightSubIntensity)
{
unhighlightOwners (mySelection->Objects(), theIsToHilightSubIntensity);
}
//=======================================================================
//function : unhighlightOwners
//purpose :
//=======================================================================
void AIS_InteractiveContext::unhighlightOwners (const AIS_NListOfEntityOwner& theOwners,
const Standard_Boolean theIsToHilightSubIntensity)
{ {
NCollection_IndexedMap<Handle(AIS_InteractiveObject)> anObjToClear; NCollection_IndexedMap<Handle(AIS_InteractiveObject)> anObjToClear;
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next()) for (AIS_NListOfEntityOwner::Iterator aSelIter (theOwners); aSelIter.More(); aSelIter.Next())
{ {
const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value(); const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value();
const Handle(AIS_InteractiveObject) anInteractive = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable()); const Handle(AIS_InteractiveObject) anInteractive = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
Handle(AIS_GlobalStatus) aStatus; Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (anInteractive);
if (!myObjects.Find (anInteractive, aStatus))
{
continue;
}
if (anOwner->IsAutoHilight()) if (anOwner->IsAutoHilight())
{ {
anOwner->Unhilight (myMainPM); anOwner->Unhilight (myMainPM);
if (theIsToHilightSubIntensity) if (theIsToHilightSubIntensity)
{ {
if (aStatus->IsSubIntensityOn()) if (aStatusPtr && (*aStatusPtr)->IsSubIntensityOn())
{ {
const Standard_Integer aHiMode = getHilightMode (anInteractive, aStatus->HilightStyle(), aStatus->DisplayMode()); const Standard_Integer aHiMode = getHilightMode (anInteractive, (*aStatusPtr)->HilightStyle(), (*aStatusPtr)->DisplayMode());
highlightWithSubintensity (anOwner, aHiMode); highlightWithSubintensity (anOwner, aHiMode);
} }
} }
@@ -184,9 +195,9 @@ void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsTo
{ {
anObjToClear.Add (anInteractive); anObjToClear.Add (anInteractive);
} }
if (anOwner == anInteractive->GlobalSelOwner()) if (aStatusPtr && anOwner == anInteractive->GlobalSelOwner())
{ {
myObjects.ChangeFind (anInteractive)->SetHilightStatus (Standard_False); (*aStatusPtr)->SetHilightStatus (Standard_False);
} }
} }
for (NCollection_IndexedMap<Handle(AIS_InteractiveObject)>::Iterator anIter (anObjToClear); anIter.More(); anIter.Next()) for (NCollection_IndexedMap<Handle(AIS_InteractiveObject)>::Iterator anIter (anObjToClear); anIter.More(); anIter.Next())
@@ -201,7 +212,7 @@ void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsTo
//function : unhighlightGlobal //function : unhighlightGlobal
//purpose : //purpose :
//======================================================================= //=======================================================================
void AIS_InteractiveContext::unhighlightGlobal (const Handle(AIS_InteractiveObject)& theObj) const void AIS_InteractiveContext::unhighlightGlobal (const Handle(AIS_InteractiveObject)& theObj)
{ {
if (theObj.IsNull()) if (theObj.IsNull())
{ {
@@ -215,15 +226,9 @@ void AIS_InteractiveContext::unhighlightGlobal (const Handle(AIS_InteractiveObje
return; return;
} }
if (aGlobOwner->IsAutoHilight()) AIS_NListOfEntityOwner anOwners;
{ anOwners.Append (aGlobOwner);
aGlobOwner->Unhilight (myMainPM); unhighlightOwners (anOwners);
}
else
{
myMainPM->Unhighlight (theObj);
theObj->ClearSelected();
}
} }
//======================================================================= //=======================================================================
@@ -486,86 +491,14 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMi
const Standard_Integer theXPMax, const Standard_Integer theXPMax,
const Standard_Integer theYPMax, const Standard_Integer theYPMax,
const Handle(V3d_View)& theView, const Handle(V3d_View)& theView,
const Standard_Boolean toUpdateViewer) const AIS_SelectionScheme theSelScheme)
{ {
if (theView->Viewer() != myMainVwr) if (theView->Viewer() != myMainVwr)
{ {
throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument"); throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
} }
// all objects detected by the selector are taken, previous current objects are emptied,
// new objects are put...
ClearSelected (Standard_False);
myLastActiveView = theView.get(); myLastActiveView = theView.get();
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{
const Handle(SelectMgr_EntityOwner)& aCurOwner = myMainSel->Picked (aPickIter);
if (aCurOwner.IsNull() || !aCurOwner->HasSelectable() || !myFilters->IsOk (aCurOwner))
continue;
mySelection->Select (aCurOwner);
}
if (myAutoHilight)
{
HilightSelected (toUpdateViewer);
}
Standard_Integer aSelNum = NbSelected();
return (aSelNum == 0) ? AIS_SOP_NothingSelected
: (aSelNum == 1) ? AIS_SOP_OneSelected
: AIS_SOP_SeveralSelected;
}
//=======================================================================
//function : Select
//purpose : Selection by polyline
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
const Standard_Boolean toUpdateViewer)
{
if (theView->Viewer() != myMainVwr)
{
throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
}
// all objects detected by the selector are taken, previous current objects are emptied,
// new objects are put...
ClearSelected (Standard_False);
myLastActiveView = theView.get();
myMainSel->Pick (thePolyline, theView);
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{
const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter);
if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
continue;
mySelection->Select (anOwner);
}
if (myAutoHilight)
{
HilightSelected (toUpdateViewer);
}
Standard_Integer aSelNum = NbSelected();
return (aSelNum == 0) ? AIS_SOP_NothingSelected
: (aSelNum == 1) ? AIS_SOP_OneSelected
: AIS_SOP_SeveralSelected;
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdateViewer)
{
if (!myLastPicked.IsNull()) if (!myLastPicked.IsNull())
{ {
Graphic3d_Vec2i aMousePos (-1, -1); Graphic3d_Vec2i aMousePos (-1, -1);
@@ -578,54 +511,126 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdate
{ {
return AIS_SOP_NothingSelected; return AIS_SOP_NothingSelected;
} }
if (myAutoHilight)
{
clearDynamicHighlight();
}
if (!myLastPicked->IsSelected()
|| myLastPicked->IsForcedHilight()
|| NbSelected() > 1)
{
SetSelected (myLastPicked, Standard_False);
if(toUpdateViewer)
{
UpdateCurrentViewer();
}
}
} }
else
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
AIS_NListOfEntityOwner aPickedOwners;
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{ {
ClearSelected (toUpdateViewer); aPickedOwners.Append (myMainSel->Picked (aPickIter));
} }
Standard_Integer aSelNum = NbSelected(); return Select (aPickedOwners, theSelScheme);
}
return (aSelNum == 0) ? AIS_SOP_NothingSelected //=======================================================================
: (aSelNum == 1) ? AIS_SOP_OneSelected //function : Select
: AIS_SOP_SeveralSelected; //purpose : Selection by polyline
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
const AIS_SelectionScheme theSelScheme)
{
if (theView->Viewer() != myMainVwr)
{
throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
}
myMainSel->Pick (thePolyline, theView);
AIS_NListOfEntityOwner aPickedOwners;
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{
aPickedOwners.Append (myMainSel->Picked (aPickIter));
}
return Select (aPickedOwners, theSelScheme);
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_SelectionScheme theSelScheme)
{
// special case: single selection of detected owner - is it necessary ?
/*if (myWasLastMain && !myLastinMain.IsNull() && !myAutoHilight &&
(myLastinMain->IsSelected()
&& !myLastinMain->IsForcedHilight()
&& NbSelected() <= 1))
{
mySelection->selectOwner(myLastinMain, aPrevSelected, theSelScheme);
Graphic3d_Vec2i aMousePos (-1, -1);
if (myMainSel->GetManager().GetActiveSelectionType() == SelectBasics_SelectingVolumeManager::Point)
{
aMousePos.SetValues ((Standard_Integer )myMainSel->GetManager().GetMousePosition().X(),
(Standard_Integer )myMainSel->GetManager().GetMousePosition().Y());
}
if (myLastPicked->HandleMouseClick (aMousePos, Aspect_VKeyMouse_LeftButton, Aspect_VKeyFlags_NONE, false))
{
return AIS_SOP_NothingSelected;
}
return getStatusOfPick (NbSelected());
}*/
AIS_NListOfEntityOwner aPickedOwners;
if (!myLastPicked.IsNull() &&
myLastPicked->HasSelectable())
{
Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast(myLastPicked->Selectable());
if (!anIO.IsNull() &&
myObjects.IsBound(anIO))
{
aPickedOwners.Append (myLastPicked);
}
}
return Select (aPickedOwners, theSelScheme);
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMin,
const Standard_Integer theYPMin,
const Standard_Integer theXPMax,
const Standard_Integer theYPMax,
const Handle(V3d_View)& theView,
const Standard_Boolean)
{
return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_ClearAndAdd);
}
//=======================================================================
//function : Select
//purpose : Selection by polyline
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
const Standard_Boolean)
{
return Select (thePolyline, theView, AIS_SelectionScheme_ClearAndAdd);
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean)
{
return Select (AIS_SelectionScheme_ClearAndAdd);
} }
//======================================================================= //=======================================================================
//function : ShiftSelect //function : ShiftSelect
//purpose : //purpose :
//======================================================================= //=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean toUpdateViewer) AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean)
{ {
if (myAutoHilight) return Select (AIS_SelectionScheme_Switch);
{
clearDynamicHighlight();
}
if (!myLastPicked.IsNull())
{
AddOrRemoveSelected (myLastPicked, toUpdateViewer);
}
Standard_Integer aSelNum = NbSelected();
return (aSelNum == 0) ? AIS_SOP_NothingSelected
: (aSelNum == 1) ? AIS_SOP_OneSelected
: AIS_SOP_SeveralSelected;
} }
//======================================================================= //=======================================================================
@@ -637,39 +642,9 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
const Standard_Integer theXPMax, const Standard_Integer theXPMax,
const Standard_Integer theYPMax, const Standard_Integer theYPMax,
const Handle(V3d_View)& theView, const Handle(V3d_View)& theView,
const Standard_Boolean toUpdateViewer) const Standard_Boolean)
{ {
if (theView->Viewer() != myMainVwr) return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_Switch);
{
throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
}
myLastActiveView = theView.get();
if (myAutoHilight)
{
UnhilightSelected (Standard_False);
}
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{
const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter);
if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
continue;
mySelection->Select (anOwner);
}
if (myAutoHilight)
{
HilightSelected (toUpdateViewer);
}
Standard_Integer aSelNum = NbSelected();
return (aSelNum == 0) ? AIS_SOP_NothingSelected
: (aSelNum == 1) ? AIS_SOP_OneSelected
: AIS_SOP_SeveralSelected;
} }
//======================================================================= //=======================================================================
@@ -678,31 +653,31 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
//======================================================================= //=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d& thePolyline, AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView, const Handle(V3d_View)& theView,
const Standard_Boolean toUpdateViewer) const Standard_Boolean)
{ {
if (theView->Viewer() != myMainVwr) return Select (thePolyline, theView, AIS_SelectionScheme_Switch);
{ }
throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
}
myLastActiveView = theView.get(); //=======================================================================
//function : Select
//purpose :
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_NListOfEntityOwner& theOwners,
const AIS_SelectionScheme theSelScheme)
{
// all objects detected by the selector are taken, previous current objects are emptied,
// new objects are put...
if (myAutoHilight) if (myAutoHilight)
{ {
clearDynamicHighlight();
UnhilightSelected (Standard_False); UnhilightSelected (Standard_False);
} }
myMainSel->Pick (thePolyline, theView);
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
{
const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter);
if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
continue;
mySelection->Select (anOwner); mySelection->SelectOwners (theOwners, theSelScheme, myFilters);
}
if (myAutoHilight) if (myAutoHilight)
{ {
HilightSelected (toUpdateViewer); HilightSelected (Standard_False);
} }
Standard_Integer aSelNum = NbSelected(); Standard_Integer aSelNum = NbSelected();
@@ -720,17 +695,36 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate
{ {
// In case of selection without using local context // In case of selection without using local context
clearDynamicHighlight(); clearDynamicHighlight();
highlightOwners (mySelection->Objects(), Standard_True);
if (theToUpdateViewer)
UpdateCurrentViewer();
}
//=======================================================================
//function : highlightOwners
//purpose :
//=======================================================================
void AIS_InteractiveContext::highlightOwners (const AIS_NListOfEntityOwner& theOwners,
const Standard_Boolean& theToUseObjectDisplayMode)
{
AIS_MapOfObjSelectedOwners anObjOwnerMap; AIS_MapOfObjSelectedOwners anObjOwnerMap;
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next()) for (AIS_NListOfEntityOwner::Iterator aSelIter (theOwners); aSelIter.More(); aSelIter.Next())
{ {
const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value(); const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value();
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable()); const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
if (anObj.IsNull())
continue;
const Handle(Prs3d_Drawer)& anObjSelStyle = getSelStyle (anObj, anOwner); const Handle(Prs3d_Drawer)& anObjSelStyle = getSelStyle (anObj, anOwner);
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind(anObj); Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (anObj);
if (anOwner == anObj->GlobalSelOwner()) if (!aStatusPtr)
continue;
if (theToUseObjectDisplayMode && anOwner == anObj->GlobalSelOwner())
{ {
aState->SetHilightStatus (Standard_True); (*aStatusPtr)->SetHilightStatus (Standard_True);
aState->SetHilightStyle (anObjSelStyle); (*aStatusPtr)->SetHilightStyle (anObjSelStyle);
} }
if (!anOwner->IsAutoHilight()) if (!anOwner->IsAutoHilight())
{ {
@@ -748,7 +742,7 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate
} }
else else
{ {
const Standard_Integer aHiMode = getHilightMode (anObj, anObjSelStyle, aState->DisplayMode()); const Standard_Integer aHiMode = getHilightMode (anObj, anObjSelStyle, theToUseObjectDisplayMode ? (*aStatusPtr)->DisplayMode() : -1);
anOwner->HilightWithColor (myMainPM, anObjSelStyle, aHiMode); anOwner->HilightWithColor (myMainPM, anObjSelStyle, aHiMode);
} }
} }
@@ -761,9 +755,6 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate
} }
anObjOwnerMap.Clear(); anObjOwnerMap.Clear();
} }
if (theToUpdateViewer)
UpdateCurrentViewer();
} }
//======================================================================= //=======================================================================
@@ -772,17 +763,7 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate
//======================================================================= //=======================================================================
void AIS_InteractiveContext::UnhilightSelected (const Standard_Boolean theToUpdateViewer) void AIS_InteractiveContext::UnhilightSelected (const Standard_Boolean theToUpdateViewer)
{ {
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next()) unhighlightSelected();
{
const Handle(SelectMgr_EntityOwner) anOwner = aSelIter.Value();
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
if (anOwner == anObj->GlobalSelOwner())
{
myObjects.ChangeFind (anObj)->SetHilightStatus (Standard_False);
}
anOwner->Unhilight (myMainPM);
}
if (theToUpdateViewer) if (theToUpdateViewer)
UpdateCurrentViewer(); UpdateCurrentViewer();
@@ -865,7 +846,9 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t
} }
if (aSelOwner == aSelectable->GlobalSelOwner()) if (aSelOwner == aSelectable->GlobalSelOwner())
{ {
myObjects.ChangeFind (aSelectable)->SetHilightStatus (Standard_False); Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (aSelectable);
if (aStatusPtr)
(*aStatusPtr)->SetHilightStatus (Standard_False);
} }
} }
@@ -937,13 +920,6 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t
} }
} }
if (myAutoHilight && theOwner == anObject->GlobalSelOwner())
{
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (anObject);
aState->SetHilightStatus (Standard_True);
aState->SetHilightStyle (anObjSelStyle);
}
if (theToUpdateViewer) if (theToUpdateViewer)
UpdateCurrentViewer(); UpdateCurrentViewer();
} }
@@ -990,29 +966,24 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO
if (myAutoHilight) if (myAutoHilight)
{ {
const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()); const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
const Standard_Boolean isGlobal = anObj->GlobalSelOwner() == theOwner; if (!myObjects.IsBound(anObj)) // e.g. AIS_ViewCubeFlat is not displayed
Handle(AIS_GlobalStatus)& aStatus = myObjects.ChangeFind (anObj); return;
Handle(AIS_GlobalStatus)* aStatusPtr = myObjects.ChangeSeek (anObj);
if (!aStatusPtr)
return;
if (theOwner->IsSelected()) if (theOwner->IsSelected())
{ {
highlightSelected (theOwner); highlightSelected (theOwner);
if (isGlobal)
{
aStatus->SetHilightStatus (Standard_True);
aStatus->SetHilightStyle (getSelStyle (anObj, theOwner));
}
} }
else else
{ {
if (theOwner->IsAutoHilight()) AIS_NListOfEntityOwner anOwners;
{ anOwners.Append (theOwner);
theOwner->Unhilight (myMainPM); unhighlightOwners (anOwners);
}
else (*aStatusPtr)->SetHilightStyle (Handle(Prs3d_Drawer)());
{
anObj->ClearSelected();
}
aStatus->SetHilightStatus (Standard_False);
aStatus->SetHilightStyle (Handle(Prs3d_Drawer)());
} }
} }

View File

@@ -18,6 +18,7 @@
#include <AIS_InteractiveContext.hxx> #include <AIS_InteractiveContext.hxx>
#include <Graphic3d_AspectFillArea3d.hxx> #include <Graphic3d_AspectFillArea3d.hxx>
#include <Graphic3d_AspectFillCapping.hxx>
#include <Graphic3d_AspectLine3d.hxx> #include <Graphic3d_AspectLine3d.hxx>
#include <Graphic3d_AspectMarker3d.hxx> #include <Graphic3d_AspectMarker3d.hxx>
#include <Graphic3d_AspectText3d.hxx> #include <Graphic3d_AspectText3d.hxx>
@@ -83,6 +84,17 @@ void AIS_InteractiveObject::SetContext (const Handle(AIS_InteractiveContext)& th
} }
} }
//-----------------------------------------------------------------------------
void AIS_InteractiveObject::SetTransformPersistence (const Handle(Graphic3d_TransformPers)& theTrsfPers)
{
SelectMgr_SelectableObject::SetTransformPersistence (theTrsfPers);
if (!GetContext().IsNull())
{
GetContext()->UpdateOnTransformPersistence (this);
}
}
//======================================================================= //=======================================================================
//function : HasPresentation //function : HasPresentation
//purpose : //purpose :
@@ -143,3 +155,26 @@ void AIS_InteractiveObject::SetAspect(const Handle(Prs3d_BasicAspect)& theAspect
aGroup->SetGroupPrimitivesAspect (aTextAspect->Aspect()); aGroup->SetGroupPrimitivesAspect (aTextAspect->Aspect());
} }
} }
const TCollection_AsciiString AIS_InteractiveObject_ClassName = "AIS_InteractiveObject";
// =======================================================================
// function : Dump
// purpose :
// =======================================================================
void AIS_InteractiveObject::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, AIS_InteractiveObject_ClassName);
{
Standard_SStream aTmpStream;
SelectMgr_SelectableObject::Dump (aTmpStream);
DUMP_VALUES (OS, "SelectMgr_SelectableObject", TCollection::ToDumpString (aTmpStream));
}
DUMP_VALUES (OS, "InteractiveContext", TCollection::GetPointerInfo (myCTXPtr));
DUMP_VALUES (OS, "Owner", TCollection::GetPointerInfo (myOwner));
DUMP_STOP_KEY (OS, AIS_InteractiveObject_ClassName);
}

View File

@@ -108,6 +108,11 @@ public:
//! Returns the context pointer to the interactive context. //! Returns the context pointer to the interactive context.
Standard_EXPORT Handle(AIS_InteractiveContext) GetContext() const; Standard_EXPORT Handle(AIS_InteractiveContext) GetContext() const;
//! Sets up Transform Persistence defining a special Local Coordinate system where this object should be located.
//! Updates the presentation in context if it is not NULL
//! @sa Graphic3d_TransformPers class description
Standard_EXPORT virtual void SetTransformPersistence (const Handle(Graphic3d_TransformPers)& theTrsfPers);
//! Returns TRUE when this object has a presentation in the current DisplayMode() //! Returns TRUE when this object has a presentation in the current DisplayMode()
Standard_EXPORT Standard_Boolean HasPresentation() const; Standard_EXPORT Standard_Boolean HasPresentation() const;
@@ -118,6 +123,9 @@ public:
Standard_DEPRECATED("Deprecated method, results might be undefined") Standard_DEPRECATED("Deprecated method, results might be undefined")
Standard_EXPORT void SetAspect (const Handle(Prs3d_BasicAspect)& anAspect); Standard_EXPORT void SetAspect (const Handle(Prs3d_BasicAspect)& anAspect);
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT virtual void Dump (Standard_OStream& OS) const Standard_OVERRIDE;
protected: protected:
//! The TypeOfPresention3d means that the interactive object //! The TypeOfPresention3d means that the interactive object

View File

@@ -15,6 +15,8 @@
#include <AIS_Selection.hxx> #include <AIS_Selection.hxx>
#include <AIS_InteractiveObject.hxx> #include <AIS_InteractiveObject.hxx>
#include <AIS_SelectionScheme.hxx>
#include <SelectMgr_Filter.hxx>
IMPLEMENT_STANDARD_RTTIEXT(AIS_Selection, Standard_Transient) IMPLEMENT_STANDARD_RTTIEXT(AIS_Selection, Standard_Transient)
@@ -130,3 +132,71 @@ AIS_SelectStatus AIS_Selection::AddSelect (const Handle(SelectMgr_EntityOwner)&
theObject->SetSelected (Standard_True); theObject->SetSelected (Standard_True);
return AIS_SS_Added; return AIS_SS_Added;
} }
//=======================================================================
//function : SelectOwners
//purpose :
//=======================================================================
void AIS_Selection::SelectOwners (const AIS_NListOfEntityOwner& thePickedOwners,
const int theSelScheme,
const Handle(SelectMgr_Filter)& theFilter)
{
int aSelScheme = theSelScheme;
AIS_NListOfEntityOwner aPrevSelected = Objects();
if (theSelScheme & AIS_SelectionScheme_Clear)
{
Clear();
if (theSelScheme & AIS_SelectionScheme_Switch &&
theSelScheme & AIS_SelectionScheme_PickedIfEmpty &&
thePickedOwners.Size() < aPrevSelected.Size())
{
// check if all picked objects are in previous selected list, if so, all objects will be deselected,
// but in mode AIS_SelectionScheme_PickedIfEmpty new picked objects should be selected, here, after Clear, Add
Standard_Boolean anOtherFound = Standard_False;
for (AIS_NListOfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
{
anOtherFound = !aPrevSelected.Contains (aSelIter.Value());
if (anOtherFound)
break;
}
if (!anOtherFound)
aSelScheme = AIS_SelectionScheme_Add;
}
}
for (AIS_NListOfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next())
{
selectOwner(aSelIter.Value(), aPrevSelected, aSelScheme, theFilter);
}
}
//=======================================================================
//function : selectOwner
//purpose :
//=======================================================================
AIS_SelectStatus AIS_Selection::selectOwner (const Handle(SelectMgr_EntityOwner)& theOwner,
const AIS_NListOfEntityOwner& thePreviousSelected,
const int theSelScheme,
const Handle(SelectMgr_Filter)& theFilter)
{
if (theOwner.IsNull() || !theOwner->HasSelectable() || !theFilter->IsOk (theOwner))
return AIS_SS_NotDone;
if (theSelScheme & AIS_SelectionScheme_Add)
{
return AddSelect (theOwner);
}
else if (theSelScheme & AIS_SelectionScheme_Switch)
{
if (thePreviousSelected.Contains (theOwner)) // was selected, should not be now
{
if (theOwner->IsSelected())
return Select (theOwner); // deselect
}
else
return AddSelect (theOwner); // was not selected, should be now
}
return AIS_SS_NotDone;
}

View File

@@ -22,6 +22,8 @@
#include <Standard.hxx> #include <Standard.hxx>
#include <Standard_Type.hxx> #include <Standard_Type.hxx>
class SelectMgr_Filter;
//! Class holding the list of selected owners. //! Class holding the list of selected owners.
class AIS_Selection : public Standard_Transient class AIS_Selection : public Standard_Transient
{ {
@@ -75,6 +77,28 @@ public:
//! Return selected object at iterator position. //! Return selected object at iterator position.
const Handle(SelectMgr_EntityOwner)& Value() const { return myIterator.Value(); } const Handle(SelectMgr_EntityOwner)& Value() const { return myIterator.Value(); }
//! Select or deselect owners depending on the selection scheme
//! \param theOwners elements to change selection state
//! \param theSelScheme selection scheme, defines how owner is selected
//! \param theFilter context filter to skip not acceptable owners
//! \return result of selection
Standard_EXPORT virtual void SelectOwners (const AIS_NListOfEntityOwner& thePickedOwners,
const int theSelScheme,
const Handle(SelectMgr_Filter)& theFilter);
protected:
//! Select or deselect owner depending on the selection scheme
//! \param theOwner element to change selection state
//! \param thePreviousSelected previous selected objects
//! \param theSelScheme selection scheme, defines how owner is selected
//! \param theFilter context filter to skip not acceptable owners
//! \return result of selection
Standard_EXPORT virtual AIS_SelectStatus selectOwner (const Handle(SelectMgr_EntityOwner)& theOwner,
const AIS_NListOfEntityOwner& thePreviousSelected,
const int theSelScheme,
const Handle(SelectMgr_Filter)& theFilter);
private: private:
AIS_NListOfEntityOwner myresult; AIS_NListOfEntityOwner myresult;

View File

@@ -0,0 +1,34 @@
// Copyright (c) 2019 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _AIS_SelectionScheme_HeaderFile
#define _AIS_SelectionScheme_HeaderFile
//! Sets selection schemes for interactive contexts.
//! It is possible to use combination of schemes.
enum AIS_SelectionScheme
{
AIS_SelectionScheme_Empty = 0x0000, // do nothing
AIS_SelectionScheme_Clear = 0x0001, // clears current selection
AIS_SelectionScheme_Add = 0x0002, // add detected object to current selection
AIS_SelectionScheme_Switch = 0x0004, // switch selection state in values selected/deselected
AIS_SelectionScheme_PickedIfEmpty = 0x0008, // if after switch, result selection is empty, select picked objects
AIS_SelectionScheme_ClearAndSwitch = AIS_SelectionScheme_Clear | AIS_SelectionScheme_Switch,
AIS_SelectionScheme_ClearAndAdd = AIS_SelectionScheme_Clear | AIS_SelectionScheme_Add,
AIS_SelectionScheme_ClearAndSwitchAndPicked = AIS_SelectionScheme_ClearAndSwitch | AIS_SelectionScheme_PickedIfEmpty,
AIS_SelectionScheme_Custom // reserved item for custom selection scheme
};
#endif // _AIS_SelectionScheme_HeaderFile

View File

@@ -180,10 +180,7 @@ void AIS_Shape::Compute(const Handle(PrsMgr_PresentationManager3d)& /*aPresentat
try try
{ {
OCC_CATCH_SIGNALS OCC_CATCH_SIGNALS
StdPrs_ShadedShape::Add (aPrs, myshape, myDrawer, StdPrs_ShadedShape::Add (aPrs, myshape, myDrawer, myDrawer->FillCappingAspect());
myDrawer->ShadingAspect()->Aspect()->ToMapTexture()
&& !myDrawer->ShadingAspect()->Aspect()->TextureMap().IsNull(),
myUVOrigin, myUVRepeat, myUVScale);
} }
catch (Standard_Failure const& anException) catch (Standard_Failure const& anException)
{ {

View File

@@ -145,6 +145,7 @@ AIS_Selection.cxx
AIS_Selection.hxx AIS_Selection.hxx
AIS_SelectStatus.hxx AIS_SelectStatus.hxx
AIS_SelectionModesConcurrency.hxx AIS_SelectionModesConcurrency.hxx
AIS_SelectionScheme.hxx
AIS_SequenceOfDimension.hxx AIS_SequenceOfDimension.hxx
AIS_SequenceOfInteractive.hxx AIS_SequenceOfInteractive.hxx
AIS_Shape.cxx AIS_Shape.cxx

View File

@@ -37,100 +37,100 @@ static Handle(TCollection_HAsciiString) nulstr;
static Handle(Interface_HArray1OfHAsciiString) nularr; static Handle(Interface_HArray1OfHAsciiString) nularr;
APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
(const Handle(StepData_StepModel)& model) (const Handle(StepData_StepModel)& model)
{ {
done = Standard_True; done = Standard_True;
if (model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileName))) { if (model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileName))) {
fn = GetCasted(HeaderSection_FileName, fn = GetCasted(HeaderSection_FileName,
model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileName))); model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileName)));
} }
else done = Standard_False; else done = Standard_False;
if (model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileSchema))) { if (model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileSchema))) {
fs = GetCasted(HeaderSection_FileSchema, fs = GetCasted(HeaderSection_FileSchema,
model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileSchema))); model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileSchema)));
} }
else done = Standard_False; else done = Standard_False;
if (model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileDescription))) { if (model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileDescription))) {
fd = GetCasted(HeaderSection_FileDescription, fd = GetCasted(HeaderSection_FileDescription,
model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileDescription))); model->HeaderEntity(STANDARD_TYPE(HeaderSection_FileDescription)));
} }
else done = Standard_False; else done = Standard_False;
} }
APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader APIHeaderSection_MakeHeader::APIHeaderSection_MakeHeader
(const Standard_Integer shapetype) (const Standard_Integer shapetype)
{ {
switch (shapetype) { switch(shapetype) {
case 1: Init("Open CASCADE Facetted BRep Model"); break; case 1 : Init ("Open CASCADE Facetted BRep Model"); break;
case 2: Init("Open CASCADE Face Based Surface Model"); break; case 2 : Init ("Open CASCADE Face Based Surface Model"); break;
case 3: Init("Open CASCADE Shell Based Surface Model"); break; case 3 : Init ("Open CASCADE Shell Based Surface Model"); break;
case 4: Init("Open CASCADE Manifold Solid Brep Model"); break; case 4 : Init ("Open CASCADE Manifold Solid Brep Model"); break;
default: Init("Open CASCADE Shape Model"); break; default: Init ("Open CASCADE Shape Model"); break;
} }
} }
void APIHeaderSection_MakeHeader::Init(const Standard_CString nameval) void APIHeaderSection_MakeHeader::Init (const Standard_CString nameval)
{ {
done = Standard_True; done = Standard_True;
// - File Name // - File Name
char timestamp[50]; char timestamp[50];
if (fn.IsNull()) fn = new HeaderSection_FileName; if (fn.IsNull()) fn = new HeaderSection_FileName;
Handle(TCollection_HAsciiString) name = new TCollection_HAsciiString(nameval); Handle(TCollection_HAsciiString) name = new TCollection_HAsciiString(nameval);
fn->SetName(name); fn->SetName(name);
Interface_MSG::TDate(timestamp, 0, 0, 0, 0, 0, 1, "C:%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d"); // actually Interface_MSG::TDate (timestamp,0,0,0,0,0,1,"C:%4.4d-%2.2d-%2.2dT%2.2d:%2.2d:%2.2d"); // actually
Handle(TCollection_HAsciiString) tst = Handle(TCollection_HAsciiString) tst =
new TCollection_HAsciiString(timestamp); new TCollection_HAsciiString(timestamp);
fn->SetTimeStamp(tst); fn->SetTimeStamp(tst);
Handle(Interface_HArray1OfHAsciiString) authors = Handle(Interface_HArray1OfHAsciiString) authors =
new Interface_HArray1OfHAsciiString(1, 1); new Interface_HArray1OfHAsciiString(1,1);
Handle(TCollection_HAsciiString) a1 = Handle(TCollection_HAsciiString) a1 =
new TCollection_HAsciiString("Author"); new TCollection_HAsciiString("Author");
authors->SetValue(1, a1); authors->SetValue(1,a1);
fn->SetAuthor(authors); fn->SetAuthor(authors);
Handle(Interface_HArray1OfHAsciiString) org = Handle(Interface_HArray1OfHAsciiString) org =
new Interface_HArray1OfHAsciiString(1, 1); new Interface_HArray1OfHAsciiString(1,1);
Handle(TCollection_HAsciiString) org1 = Handle(TCollection_HAsciiString) org1 =
new TCollection_HAsciiString("Open CASCADE"); new TCollection_HAsciiString("Open CASCADE");
org->SetValue(1, org1); org->SetValue(1,org1);
fn->SetOrganization(org); fn->SetOrganization(org);
char procver[80]; char procver[80];
sprintf(procver, XSTEP_PROCESSOR_VERSION, "STEP"); sprintf (procver, XSTEP_PROCESSOR_VERSION, "STEP");
Handle(TCollection_HAsciiString) pv = new TCollection_HAsciiString(procver); Handle(TCollection_HAsciiString) pv = new TCollection_HAsciiString (procver);
//Handle(TCollection_HAsciiString) pv = //Handle(TCollection_HAsciiString) pv =
//new TCollection_HAsciiString(XSTEP_VERSION); //new TCollection_HAsciiString(XSTEP_VERSION);
fn->SetPreprocessorVersion(pv); fn->SetPreprocessorVersion(pv);
Handle(TCollection_HAsciiString) sys = Handle(TCollection_HAsciiString) sys =
new TCollection_HAsciiString(XSTEP_SYSTEM_VERSION);//#58 rln new TCollection_HAsciiString(XSTEP_SYSTEM_VERSION);//#58 rln
fn->SetOriginatingSystem(sys); fn->SetOriginatingSystem(sys);
Handle(TCollection_HAsciiString) auth = Handle(TCollection_HAsciiString) auth =
new TCollection_HAsciiString("Unknown"); new TCollection_HAsciiString("Unknown");
fn->SetAuthorisation(auth); fn->SetAuthorisation(auth);
// - File Description // - File Description
if (fd.IsNull()) fd = new HeaderSection_FileDescription; if (fd.IsNull()) fd = new HeaderSection_FileDescription;
Handle(Interface_HArray1OfHAsciiString) descr = Handle(Interface_HArray1OfHAsciiString) descr =
new Interface_HArray1OfHAsciiString(1, 1); new Interface_HArray1OfHAsciiString(1,1);
Handle(TCollection_HAsciiString) descr1 = Handle(TCollection_HAsciiString) descr1 =
new TCollection_HAsciiString("Open CASCADE Model"); new TCollection_HAsciiString("Open CASCADE Model");
descr->SetValue(1, descr1); descr->SetValue(1,descr1);
fd->SetDescription(descr); fd->SetDescription(descr);
Handle(TCollection_HAsciiString) il = Handle(TCollection_HAsciiString) il =
new TCollection_HAsciiString("2;1"); new TCollection_HAsciiString("2;1");
fd->SetImplementationLevel(il); fd->SetImplementationLevel(il);
// - File Schema // - File Schema
if (fs.IsNull()) fs = new HeaderSection_FileSchema; if (fs.IsNull()) fs = new HeaderSection_FileSchema;
Handle(Interface_HArray1OfHAsciiString) schid = Handle(Interface_HArray1OfHAsciiString) schid =
new Interface_HArray1OfHAsciiString(1, 1); new Interface_HArray1OfHAsciiString(1,1);
Handle(TCollection_HAsciiString) schid1 = Handle(TCollection_HAsciiString) schid1 =
new TCollection_HAsciiString(""); new TCollection_HAsciiString("");
schid->SetValue(1, schid1); schid->SetValue(1,schid1);
fs->SetSchemaIdentifiers(schid); fs->SetSchemaIdentifiers(schid);
} }
@@ -141,31 +141,30 @@ Standard_Boolean APIHeaderSection_MakeHeader::IsDone() const
} }
void APIHeaderSection_MakeHeader::Apply void APIHeaderSection_MakeHeader::Apply
(const Handle(StepData_StepModel)& model) const (const Handle(StepData_StepModel)& model) const
{ {
Interface_EntityIterator header = model->Header(); Interface_EntityIterator header = model->Header();
if (HasFd() && !model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileDescription))) if (HasFd() && !model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileDescription)))
header.AddItem(fd); header.AddItem(fd);
if (HasFn() && !model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileName))) if (HasFn() && !model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileName)))
header.AddItem(fn); header.AddItem(fn);
if (HasFs() && !model->HasHeaderEntity(STANDARD_TYPE(HeaderSection_FileSchema))) { if (HasFs() && !model->HasHeaderEntity (STANDARD_TYPE(HeaderSection_FileSchema))) {
// Schema defined? If not take it from the protocole // Schema defined? If not take it from the protocole
Handle(TCollection_HAsciiString) sch; Handle(TCollection_HAsciiString) sch;
Handle(Interface_HArray1OfHAsciiString) schid = fs->SchemaIdentifiers(); Handle(Interface_HArray1OfHAsciiString) schid = fs->SchemaIdentifiers();
if (!schid.IsNull()) sch = schid->Value(1); if (!schid.IsNull()) sch = schid->Value(1);
else { else {
schid = new Interface_HArray1OfHAsciiString(1, 1); schid = new Interface_HArray1OfHAsciiString(1,1);
fs->SetSchemaIdentifiers(schid); fs->SetSchemaIdentifiers(schid);
} }
if (!sch.IsNull()) { if (sch->Length() < 2) sch.Nullify(); } // not defined if (!sch.IsNull()) { if (sch->Length() < 2) sch.Nullify(); } // not defined
if (sch.IsNull()) { if (sch.IsNull()) {
Handle(StepData_Protocol) stepro = Handle(StepData_Protocol)::DownCast Handle(StepData_Protocol) stepro = Handle(StepData_Protocol)::DownCast
(model->Protocol()); ( model->Protocol());
Handle(Interface_Static) aParam = model->GetParam("write.step.schema"); if (!stepro.IsNull()) sch = new TCollection_HAsciiString
if (!aParam.IsNull() && !stepro.IsNull()) (stepro->SchemaName());
sch = new TCollection_HAsciiString(stepro->SchemaName(aParam->IntegerValue())); if (!sch.IsNull()) schid->SetValue (1,sch);
if (!sch.IsNull()) schid->SetValue(1, sch);
} }
header.AddItem(fs); header.AddItem(fs);
} }
@@ -180,12 +179,12 @@ void APIHeaderSection_MakeHeader::Apply
// ======== // ========
Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel
(const Handle(Interface_Protocol)& protocol) const (const Handle(Interface_Protocol)& protocol) const
{ {
Handle(StepData_StepModel) stepmodel = new StepData_StepModel; Handle(StepData_StepModel) stepmodel = new StepData_StepModel;
stepmodel->SetProtocol(protocol); stepmodel->SetProtocol (protocol);
// - Make Header information // - Make Header information
Apply(stepmodel); Apply(stepmodel);
return stepmodel; return stepmodel;
@@ -198,9 +197,7 @@ Handle(StepData_StepModel) APIHeaderSection_MakeHeader::NewModel
// ======== // ========
Standard_Boolean APIHeaderSection_MakeHeader::HasFn() const Standard_Boolean APIHeaderSection_MakeHeader::HasFn() const
{ { return (!fn.IsNull()); }
return (!fn.IsNull());
}
Handle(HeaderSection_FileName) APIHeaderSection_MakeHeader::FnValue() const Handle(HeaderSection_FileName) APIHeaderSection_MakeHeader::FnValue() const
{ {
@@ -211,23 +208,23 @@ Handle(HeaderSection_FileName) APIHeaderSection_MakeHeader::FnValue() const
void APIHeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer shapetype) void APIHeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer shapetype)
{ {
Handle(TCollection_HAsciiString) name; Handle(TCollection_HAsciiString) name;
switch(shapetype) switch(shapetype)
{ {
case 1: // face_based_surface_model case 1: // face_based_surface_model
name = new TCollection_HAsciiString name = new TCollection_HAsciiString
("Euclid Face Based Surface Model"); ("Euclid Face Based Surface Model");
break; break;
case 2: // manifold_solid_brep case 2: // manifold_solid_brep
name = new TCollection_HAsciiString name = new TCollection_HAsciiString
("Euclid Manifold Solid Brep Model"); ("Euclid Manifold Solid Brep Model");
break; break;
case 3: // facetted_brep case 3: // facetted_brep
name = new TCollection_HAsciiString name = new TCollection_HAsciiString
("Euclid Facetted Brep Model"); ("Euclid Facetted Brep Model");
break; break;
default : // others ? default : // others ?
name = new TCollection_HAsciiString name = new TCollection_HAsciiString
("Euclid Shape Model"); ("Euclid Shape Model");
break; break;
} }
SetName(aName); SetName(aName);
@@ -236,106 +233,106 @@ void APIHeaderSection_MakeHeader::SetNameFromShapeType(const Standard_Integer sh
void APIHeaderSection_MakeHeader::SetName(const Handle(TCollection_HAsciiString)& aName) void APIHeaderSection_MakeHeader::SetName(const Handle(TCollection_HAsciiString)& aName)
{ {
if (!fn.IsNull()) fn->SetName(aName); if (!fn.IsNull()) fn->SetName(aName);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Name() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Name() const
{ {
return (fn.IsNull() ? nulstr : fn->Name()); return (fn.IsNull() ? nulstr : fn->Name());
} }
void APIHeaderSection_MakeHeader::SetTimeStamp(const Handle(TCollection_HAsciiString)& aTimeStamp) void APIHeaderSection_MakeHeader::SetTimeStamp(const Handle(TCollection_HAsciiString)& aTimeStamp)
{ {
if (!fn.IsNull()) fn->SetTimeStamp(aTimeStamp); if (!fn.IsNull()) fn->SetTimeStamp(aTimeStamp);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::TimeStamp() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::TimeStamp() const
{ {
return (fn.IsNull() ? nulstr : fn->TimeStamp()); return (fn.IsNull() ? nulstr : fn->TimeStamp());
} }
void APIHeaderSection_MakeHeader::SetAuthor(const Handle(Interface_HArray1OfHAsciiString)& aAuthor) void APIHeaderSection_MakeHeader::SetAuthor(const Handle(Interface_HArray1OfHAsciiString)& aAuthor)
{ {
if (!fn.IsNull()) fn->SetAuthor(aAuthor); if (!fn.IsNull()) fn->SetAuthor(aAuthor);
} }
void APIHeaderSection_MakeHeader::SetAuthorValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aAuthor) void APIHeaderSection_MakeHeader::SetAuthorValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aAuthor)
{ {
if (fn.IsNull()) return; if (fn.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fn->Author(); Handle(Interface_HArray1OfHAsciiString) li = fn->Author();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num, aAuthor); if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aAuthor);
} }
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Author() const Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Author() const
{ {
return (fn.IsNull() ? nularr : fn->Author()); return (fn.IsNull() ? nularr : fn->Author());
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::AuthorValue(const Standard_Integer num) const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::AuthorValue(const Standard_Integer num) const
{ {
return (fn.IsNull() ? nulstr : fn->AuthorValue(num)); return (fn.IsNull() ? nulstr : fn->AuthorValue(num));
} }
Standard_Integer APIHeaderSection_MakeHeader::NbAuthor() const Standard_Integer APIHeaderSection_MakeHeader::NbAuthor () const
{ {
return (fn.IsNull() ? 0 : fn->NbAuthor()); return (fn.IsNull() ? 0 : fn->NbAuthor());
} }
void APIHeaderSection_MakeHeader::SetOrganization(const Handle(Interface_HArray1OfHAsciiString)& aOrganization) void APIHeaderSection_MakeHeader::SetOrganization(const Handle(Interface_HArray1OfHAsciiString)& aOrganization)
{ {
if (!fn.IsNull()) fn->SetOrganization(aOrganization); if (!fn.IsNull()) fn->SetOrganization(aOrganization);
} }
void APIHeaderSection_MakeHeader::SetOrganizationValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aOrgan) void APIHeaderSection_MakeHeader::SetOrganizationValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aOrgan)
{ {
if (fn.IsNull()) return; if (fn.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fn->Organization(); Handle(Interface_HArray1OfHAsciiString) li = fn->Organization();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num, aOrgan); if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aOrgan);
} }
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Organization() const Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Organization() const
{ {
return (fn.IsNull() ? nularr : fn->Organization()); return (fn.IsNull() ? nularr : fn->Organization());
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OrganizationValue(const Standard_Integer num) const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OrganizationValue(const Standard_Integer num) const
{ {
return (fn.IsNull() ? nulstr : fn->OrganizationValue(num)); return (fn.IsNull() ? nulstr : fn->OrganizationValue(num));
} }
Standard_Integer APIHeaderSection_MakeHeader::NbOrganization() const Standard_Integer APIHeaderSection_MakeHeader::NbOrganization () const
{ {
return (fn.IsNull() ? 0 : fn->NbOrganization()); return (fn.IsNull() ? 0 : fn->NbOrganization());
} }
void APIHeaderSection_MakeHeader::SetPreprocessorVersion(const Handle(TCollection_HAsciiString)& aPreprocessorVersion) void APIHeaderSection_MakeHeader::SetPreprocessorVersion(const Handle(TCollection_HAsciiString)& aPreprocessorVersion)
{ {
if (!fn.IsNull()) fn->SetPreprocessorVersion(aPreprocessorVersion); if (!fn.IsNull()) fn->SetPreprocessorVersion(aPreprocessorVersion);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::PreprocessorVersion() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::PreprocessorVersion() const
{ {
return (fn.IsNull() ? nulstr : fn->PreprocessorVersion()); return (fn.IsNull() ? nulstr : fn->PreprocessorVersion());
} }
void APIHeaderSection_MakeHeader::SetOriginatingSystem(const Handle(TCollection_HAsciiString)& aOriginatingSystem) void APIHeaderSection_MakeHeader::SetOriginatingSystem(const Handle(TCollection_HAsciiString)& aOriginatingSystem)
{ {
if (!fn.IsNull()) fn->SetOriginatingSystem(aOriginatingSystem); if (!fn.IsNull()) fn->SetOriginatingSystem(aOriginatingSystem);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OriginatingSystem() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::OriginatingSystem() const
{ {
return (fn.IsNull() ? nulstr : fn->OriginatingSystem()); return (fn.IsNull() ? nulstr : fn->OriginatingSystem());
} }
void APIHeaderSection_MakeHeader::SetAuthorisation(const Handle(TCollection_HAsciiString)& aAuthorisation) void APIHeaderSection_MakeHeader::SetAuthorisation(const Handle(TCollection_HAsciiString)& aAuthorisation)
{ {
if (!fn.IsNull()) fn->SetAuthorisation(aAuthorisation); if (!fn.IsNull()) fn->SetAuthorisation(aAuthorisation);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() const
{ {
return (fn.IsNull() ? nulstr : fn->Authorisation()); return (fn.IsNull() ? nulstr : fn->Authorisation());
} }
// =========== // ===========
@@ -343,9 +340,7 @@ Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::Authorisation() co
// =========== // ===========
Standard_Boolean APIHeaderSection_MakeHeader::HasFs() const Standard_Boolean APIHeaderSection_MakeHeader::HasFs() const
{ { return (!fs.IsNull()); }
return (!fs.IsNull());
}
Handle(HeaderSection_FileSchema) APIHeaderSection_MakeHeader::FsValue() const Handle(HeaderSection_FileSchema) APIHeaderSection_MakeHeader::FsValue() const
{ {
@@ -354,29 +349,29 @@ Handle(HeaderSection_FileSchema) APIHeaderSection_MakeHeader::FsValue() const
void APIHeaderSection_MakeHeader::SetSchemaIdentifiers(const Handle(Interface_HArray1OfHAsciiString)& aSchemaIdentifiers) void APIHeaderSection_MakeHeader::SetSchemaIdentifiers(const Handle(Interface_HArray1OfHAsciiString)& aSchemaIdentifiers)
{ {
if (!fs.IsNull()) fs->SetSchemaIdentifiers(aSchemaIdentifiers); if (!fs.IsNull()) fs->SetSchemaIdentifiers(aSchemaIdentifiers);
} }
void APIHeaderSection_MakeHeader::SetSchemaIdentifiersValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aSchem) void APIHeaderSection_MakeHeader::SetSchemaIdentifiersValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aSchem)
{ {
if (fs.IsNull()) return; if (fs.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fs->SchemaIdentifiers(); Handle(Interface_HArray1OfHAsciiString) li = fs->SchemaIdentifiers();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num, aSchem); if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aSchem);
} }
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiers() const Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiers() const
{ {
return (fs.IsNull() ? nularr : fs->SchemaIdentifiers()); return (fs.IsNull() ? nularr : fs->SchemaIdentifiers());
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiersValue(const Standard_Integer num) const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::SchemaIdentifiersValue(const Standard_Integer num) const
{ {
return (fs.IsNull() ? nulstr : fs->SchemaIdentifiersValue(num)); return (fs.IsNull() ? nulstr : fs->SchemaIdentifiersValue(num));
} }
Standard_Integer APIHeaderSection_MakeHeader::NbSchemaIdentifiers() const Standard_Integer APIHeaderSection_MakeHeader::NbSchemaIdentifiers () const
{ {
return (fs.IsNull() ? 0 : fs->NbSchemaIdentifiers()); return (fs.IsNull() ? 0 : fs->NbSchemaIdentifiers());
} }
//======================================================================= //=======================================================================
@@ -386,24 +381,24 @@ Standard_Integer APIHeaderSection_MakeHeader::NbSchemaIdentifiers() const
void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_HAsciiString)& aSchem) void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_HAsciiString)& aSchem)
{ {
if (fs.IsNull()) fs = new HeaderSection_FileSchema; if ( fs.IsNull() ) fs = new HeaderSection_FileSchema;
Handle(Interface_HArray1OfHAsciiString) idents = fs->SchemaIdentifiers(); Handle(Interface_HArray1OfHAsciiString) idents = fs->SchemaIdentifiers();
// check that requested subschema is already in the list // check that requested subschema is already in the list
Standard_Integer i; Standard_Integer i;
for (i = 1; !idents.IsNull() && i <= idents->Length(); i++) { for ( i=1; ! idents.IsNull() && i <= idents->Length(); i++ ) {
if (aSchem->IsSameString(idents->Value(i))) return; if ( aSchem->IsSameString ( idents->Value(i) ) ) return;
} }
// add a subshema // add a subshema
Handle(Interface_HArray1OfHAsciiString) ids = Handle(Interface_HArray1OfHAsciiString) ids =
new Interface_HArray1OfHAsciiString(1, (idents.IsNull() ? 1 : idents->Length() + 1)); new Interface_HArray1OfHAsciiString ( 1, ( idents.IsNull() ? 1 : idents->Length() + 1 ) );
for (i = 1; !idents.IsNull() && i <= idents->Length(); i++) { for ( i=1; ! idents.IsNull() && i <= idents->Length(); i++ ) {
ids->SetValue(i, idents->Value(i)); ids->SetValue ( i, idents->Value(i) );
} }
ids->SetValue(i, aSchem); ids->SetValue ( i, aSchem );
fs->SetSchemaIdentifiers(ids); fs->SetSchemaIdentifiers ( ids );
} }
// ================ // ================
@@ -411,9 +406,7 @@ void APIHeaderSection_MakeHeader::AddSchemaIdentifier(const Handle(TCollection_H
// ================ // ================
Standard_Boolean APIHeaderSection_MakeHeader::HasFd() const Standard_Boolean APIHeaderSection_MakeHeader::HasFd() const
{ { return (!fd.IsNull()); }
return (!fd.IsNull());
}
Handle(HeaderSection_FileDescription) APIHeaderSection_MakeHeader::FdValue() const Handle(HeaderSection_FileDescription) APIHeaderSection_MakeHeader::FdValue() const
{ {
@@ -422,37 +415,37 @@ Handle(HeaderSection_FileDescription) APIHeaderSection_MakeHeader::FdValue() con
void APIHeaderSection_MakeHeader::SetDescription(const Handle(Interface_HArray1OfHAsciiString)& aDescription) void APIHeaderSection_MakeHeader::SetDescription(const Handle(Interface_HArray1OfHAsciiString)& aDescription)
{ {
if (!fs.IsNull()) fd->SetDescription(aDescription); if (!fs.IsNull()) fd->SetDescription(aDescription);
} }
void APIHeaderSection_MakeHeader::SetDescriptionValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aDescr) void APIHeaderSection_MakeHeader::SetDescriptionValue(const Standard_Integer num, const Handle(TCollection_HAsciiString)& aDescr)
{ {
if (fd.IsNull()) return; if (fd.IsNull()) return;
Handle(Interface_HArray1OfHAsciiString) li = fd->Description(); Handle(Interface_HArray1OfHAsciiString) li = fd->Description();
if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num, aDescr); if (num >= li->Lower() && num <= li->Upper()) li->SetValue(num,aDescr);
} }
Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Description() const Handle(Interface_HArray1OfHAsciiString) APIHeaderSection_MakeHeader::Description() const
{ {
return (fd.IsNull() ? nularr : fd->Description()); return (fd.IsNull() ? nularr : fd->Description());
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::DescriptionValue(const Standard_Integer num) const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::DescriptionValue(const Standard_Integer num) const
{ {
return (fd.IsNull() ? nulstr : fd->DescriptionValue(num)); return (fd.IsNull() ? nulstr : fd->DescriptionValue(num));
} }
Standard_Integer APIHeaderSection_MakeHeader::NbDescription() const Standard_Integer APIHeaderSection_MakeHeader::NbDescription () const
{ {
return (fd.IsNull() ? 0 : fd->NbDescription()); return (fd.IsNull() ? 0 : fd->NbDescription());
} }
void APIHeaderSection_MakeHeader::SetImplementationLevel(const Handle(TCollection_HAsciiString)& aImplementationLevel) void APIHeaderSection_MakeHeader::SetImplementationLevel(const Handle(TCollection_HAsciiString)& aImplementationLevel)
{ {
if (!fd.IsNull()) fd->SetImplementationLevel(aImplementationLevel); if (!fd.IsNull()) fd->SetImplementationLevel(aImplementationLevel);
} }
Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::ImplementationLevel() const Handle(TCollection_HAsciiString) APIHeaderSection_MakeHeader::ImplementationLevel() const
{ {
return (fd.IsNull() ? nulstr : fd->ImplementationLevel()); return (fd.IsNull() ? nulstr : fd->ImplementationLevel());
} }

452
src/Aspect/Aspect.cxx Normal file
View File

@@ -0,0 +1,452 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Aspect.hxx>
#include <TCollection_AsciiString.hxx>
namespace
{
static Standard_CString Aspect_Table_PrintTypeOfDeflection[2] =
{
"RELATIVE", "ABSOLUTE"
};
static Standard_CString Aspect_Table_PrintTypeOfFacingModel[3] =
{
"BOTH", "BACK", "FRONT"
};
static Standard_CString Aspect_Table_PrintTypeOfHighlightMethod[2] =
{
"COLOR", "BOUNDBOX"
};
static Standard_CString Aspect_Table_PrintTypeOfLine[6] =
{
"EMPTY", "SOLID", "DASH", "DOT", "DOT_DASH", "USER_DEFINED"
};
static Standard_CString Aspect_Table_PrintTypeOfMarker[15] =
{
"EMPTY", "POINT", "PLUS", "STAR", "X", "O", "O_POINT", "O_PLUS", "O_STAR", "O_X",
"RING1", "RING2", "RING3", "BALL", "USER_DEFINED"
};
static Standard_CString Aspect_Table_PrintTypeOfDisplayText[6] =
{
"NORMAL", "SUBTITLE", "DEKALE", "BLEND", "DIMENSION", "SHADOW"
};
static Standard_CString Aspect_Table_PrintTypeOfStyleText[2] =
{
"NORMAL", "ANNOTATION"
};
static Standard_CString Aspect_Table_PrintInteriorStyle[6] =
{
"EMPTY", "HOLLOW", "HATCH", "SOLID", "HIDDEN_LINE", "POINT"
};
static Standard_CString Aspect_Table_PrintPolygonOffsetMode[7] =
{
"OFF", "FILL", "LINE", "POINT", "ALL", "NONE", "MASK"
};
static Standard_CString Aspect_Table_PrintHatchStyle[14] =
{
"SOLID", "HORIZONTAL", "HORIZONTAL_WIDE", "VERTICAL", "VERTICAL_WIDE",
"DIAGONAL_45", "DIAGONAL_45_WIDE", "DIAGONAL_135", "DIAGONAL_135_WIDE",
"GRID", "GRID_WIDE", "GRID_DIAGONAL", "GRID_DIAGONAL_WIDE", "NB"
};
static Standard_CString Aspect_Table_PrintTypeOfTriedronPosition[9] =
{
"CENTER", "TOP", "BOTTOM", "LEFT", "RIGHT", "LEFT_LOWER", "LEFT_UPPER", "RIGHT_LOWER", "RIGHT_UPPER"
};
}
//=======================================================================
//function : TypeOfDeflectionToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfDeflectionToString (Aspect_TypeOfDeflection theType)
{
return Aspect_Table_PrintTypeOfDeflection[theType];
}
//=======================================================================
//function : TypeOfDeflectionFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfDeflectionFromString (Standard_CString theTypeString,
Aspect_TypeOfDeflection& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= Aspect_TOD_ABSOLUTE; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfDeflection[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_TypeOfDeflection (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfFacingModelToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfFacingModelToString (Aspect_TypeOfFacingModel theType)
{
return Aspect_Table_PrintTypeOfFacingModel[theType];
}
//=======================================================================
//function : TypeOfFacingModelFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfFacingModelFromString (Standard_CString theTypeString,
Aspect_TypeOfFacingModel& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= Aspect_TOFM_FRONT_SIDE; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfFacingModel[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_TypeOfFacingModel (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfHighlightMethodToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfHighlightMethodToString (Aspect_TypeOfHighlightMethod theType)
{
return Aspect_Table_PrintTypeOfHighlightMethod[theType];
}
//=======================================================================
//function : TypeOfHighlightMethodFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfHighlightMethodFromString (Standard_CString theTypeString,
Aspect_TypeOfHighlightMethod& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= Aspect_TOHM_BOUNDBOX; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfHighlightMethod[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_TypeOfHighlightMethod (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfLineToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfLineToString (Aspect_TypeOfLine theType)
{
return Aspect_Table_PrintTypeOfLine[theType];
}
//=======================================================================
//function : TypeOfLineFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfLineFromString (Standard_CString theTypeString,
Aspect_TypeOfLine& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Aspect_TOL_EMPTY; aTypeIter <= Aspect_TOL_USERDEFINED; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfLine[aTypeIter + 1];
if (aName == aTypeName)
{
theType = Aspect_TypeOfLine (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfMarkerToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfMarkerToString (Aspect_TypeOfMarker theType)
{
return Aspect_Table_PrintTypeOfMarker[theType];
}
//=======================================================================
//function : TypeOfMarkerFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfMarkerFromString (Standard_CString theTypeString,
Aspect_TypeOfMarker& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Aspect_TOM_EMPTY; aTypeIter <= Aspect_TOM_USERDEFINED; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfMarker[aTypeIter + 1];
if (aName == aTypeName)
{
theType = Aspect_TypeOfMarker (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfDisplayTextToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfDisplayTextToString (Aspect_TypeOfDisplayText theType)
{
return Aspect_Table_PrintTypeOfDisplayText[theType];
}
//=======================================================================
//function : TypeOfDisplayTextFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfDisplayTextFromString (Standard_CString theTypeString,
Aspect_TypeOfDisplayText& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Aspect_TODT_NORMAL; aTypeIter <= Aspect_TODT_SHADOW; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfDisplayText[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_TypeOfDisplayText (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfStyleTextToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfStyleTextToString (Aspect_TypeOfStyleText theType)
{
return Aspect_Table_PrintTypeOfStyleText[theType];
}
//=======================================================================
//function : TypeOfStyleTextFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfStyleTextFromString (Standard_CString theTypeString,
Aspect_TypeOfStyleText& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Aspect_TOST_NORMAL; aTypeIter <= Aspect_TOST_ANNOTATION; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintTypeOfStyleText[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_TypeOfStyleText (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : InteriorStyleToString
//purpose :
//=======================================================================
Standard_CString Aspect::InteriorStyleToString (Aspect_InteriorStyle theType)
{
return Aspect_Table_PrintInteriorStyle[theType];
}
//=======================================================================
//function : InteriorStyleFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::InteriorStyleFromString (Standard_CString theTypeString,
Aspect_InteriorStyle& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Aspect_IS_EMPTY; aTypeIter <= Aspect_IS_POINT; ++aTypeIter)
{
Standard_CString aTypeName = Aspect_Table_PrintInteriorStyle[aTypeIter];
if (aName == aTypeName)
{
theType = Aspect_InteriorStyle (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : PolygonOffsetModeToString
//purpose :
//=======================================================================
Standard_CString Aspect::PolygonOffsetModeToString (Aspect_PolygonOffsetMode theType)
{
switch (theType)
{
case Aspect_POM_Off: return Aspect_Table_PrintPolygonOffsetMode[0];
case Aspect_POM_Fill: return Aspect_Table_PrintPolygonOffsetMode[1];
case Aspect_POM_Line: return Aspect_Table_PrintPolygonOffsetMode[2];
case Aspect_POM_Point: return Aspect_Table_PrintPolygonOffsetMode[3];
case Aspect_POM_All: return Aspect_Table_PrintPolygonOffsetMode[4];
case Aspect_POM_None: return Aspect_Table_PrintPolygonOffsetMode[5];
case Aspect_POM_Mask: return Aspect_Table_PrintPolygonOffsetMode[6];
}
return "";
}
//=======================================================================
//function : PolygonOffsetModeFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::PolygonOffsetModeFromString (Standard_CString theTypeString,
Aspect_PolygonOffsetMode& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
if (aName == Aspect_Table_PrintPolygonOffsetMode[0]) { theType = Aspect_POM_Off; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[1]) { theType = Aspect_POM_Fill; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[2]) { theType = Aspect_POM_Line; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[3]) { theType = Aspect_POM_Point; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[4]) { theType = Aspect_POM_All; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[5]) { theType = Aspect_POM_None; return Standard_True; }
else if (aName == Aspect_Table_PrintPolygonOffsetMode[6]) { theType = Aspect_POM_Mask; return Standard_True; }
return Standard_False;
}
//=======================================================================
//function : HatchStyleToString
//purpose :
//=======================================================================
Standard_CString Aspect::HatchStyleToString (Aspect_HatchStyle theType)
{
return Aspect_Table_PrintHatchStyle[theType];
switch (theType)
{
case Aspect_HS_SOLID: return Aspect_Table_PrintHatchStyle[0];
case Aspect_HS_HORIZONTAL: return Aspect_Table_PrintHatchStyle[1];
case Aspect_HS_HORIZONTAL_WIDE: return Aspect_Table_PrintHatchStyle[2];
case Aspect_HS_VERTICAL: return Aspect_Table_PrintHatchStyle[3];
case Aspect_HS_VERTICAL_WIDE: return Aspect_Table_PrintHatchStyle[4];
case Aspect_HS_DIAGONAL_45: return Aspect_Table_PrintHatchStyle[5];
case Aspect_HS_DIAGONAL_45_WIDE: return Aspect_Table_PrintHatchStyle[6];
case Aspect_HS_DIAGONAL_135: return Aspect_Table_PrintHatchStyle[7];
case Aspect_HS_DIAGONAL_135_WIDE: return Aspect_Table_PrintHatchStyle[8];
case Aspect_HS_GRID: return Aspect_Table_PrintHatchStyle[9];
case Aspect_HS_GRID_WIDE: return Aspect_Table_PrintHatchStyle[10];
case Aspect_HS_GRID_DIAGONAL: return Aspect_Table_PrintHatchStyle[11];
case Aspect_HS_GRID_DIAGONAL_WIDE: return Aspect_Table_PrintHatchStyle[12];
case Aspect_HS_NB: return Aspect_Table_PrintHatchStyle[13];
}
return "";
}
//=======================================================================
//function : HatchStyleFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::HatchStyleFromString (Standard_CString theTypeString,
Aspect_HatchStyle& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
if (aName == Aspect_Table_PrintHatchStyle[0]) { theType = Aspect_HS_SOLID; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[1]) { theType = Aspect_HS_HORIZONTAL; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[2]) { theType = Aspect_HS_HORIZONTAL_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[3]) { theType = Aspect_HS_VERTICAL; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[4]) { theType = Aspect_HS_VERTICAL_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[5]) { theType = Aspect_HS_DIAGONAL_45; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[6]) { theType = Aspect_HS_DIAGONAL_45_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[7]) { theType = Aspect_HS_DIAGONAL_135; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[8]) { theType = Aspect_HS_DIAGONAL_135_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[9]) { theType = Aspect_HS_GRID; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[10]) { theType = Aspect_HS_GRID_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[11]) { theType = Aspect_HS_GRID_DIAGONAL; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[12]) { theType = Aspect_HS_GRID_DIAGONAL_WIDE; return Standard_True; }
else if (aName == Aspect_Table_PrintHatchStyle[13]) { theType = Aspect_HS_NB; return Standard_True; }
return Standard_False;
}
//=======================================================================
//function : TypeOfTriedronPositionToString
//purpose :
//=======================================================================
Standard_CString Aspect::TypeOfTriedronPositionToString (Aspect_TypeOfTriedronPosition theType)
{
return Aspect_Table_PrintTypeOfTriedronPosition[theType];
switch (theType)
{
case Aspect_TOTP_CENTER: return Aspect_Table_PrintTypeOfTriedronPosition[0];
case Aspect_TOTP_TOP: return Aspect_Table_PrintTypeOfTriedronPosition[1];
case Aspect_TOTP_BOTTOM: return Aspect_Table_PrintTypeOfTriedronPosition[2];
case Aspect_TOTP_LEFT: return Aspect_Table_PrintTypeOfTriedronPosition[3];
case Aspect_TOTP_RIGHT: return Aspect_Table_PrintTypeOfTriedronPosition[4];
case Aspect_TOTP_LEFT_LOWER: return Aspect_Table_PrintTypeOfTriedronPosition[5];
case Aspect_TOTP_LEFT_UPPER: return Aspect_Table_PrintTypeOfTriedronPosition[6];
case Aspect_TOTP_RIGHT_LOWER: return Aspect_Table_PrintTypeOfTriedronPosition[7];
case Aspect_TOTP_RIGHT_UPPER: return Aspect_Table_PrintTypeOfTriedronPosition[8];
}
return "";
}
//=======================================================================
//function : TypeOfTriedronPositionFromString
//purpose :
//=======================================================================
Standard_Boolean Aspect::TypeOfTriedronPositionFromString (Standard_CString theTypeString,
Aspect_TypeOfTriedronPosition& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
if (aName == Aspect_Table_PrintTypeOfTriedronPosition[0]) { theType = Aspect_TOTP_CENTER; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[1]) { theType = Aspect_TOTP_TOP; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[2]) { theType = Aspect_TOTP_BOTTOM; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[3]) { theType = Aspect_TOTP_LEFT; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[4]) { theType = Aspect_TOTP_RIGHT; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[5]) { theType = Aspect_TOTP_LEFT_LOWER; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[6]) { theType = Aspect_TOTP_LEFT_UPPER; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[7]) { theType = Aspect_TOTP_RIGHT_LOWER; return Standard_True; }
else if (aName == Aspect_Table_PrintTypeOfTriedronPosition[8]) { theType = Aspect_TOTP_RIGHT_UPPER; return Standard_True; }
return Standard_False;
}

284
src/Aspect/Aspect.hxx Normal file
View File

@@ -0,0 +1,284 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Aspect_HeaderFile
#define _Aspect_HeaderFile
#include <Aspect_HatchStyle.hxx>
#include <Aspect_InteriorStyle.hxx>
#include <Aspect_PolygonOffsetMode.hxx>
#include <Aspect_TypeOfDeflection.hxx>
#include <Aspect_TypeOfDisplayText.hxx>
#include <Aspect_TypeOfFacingModel.hxx>
#include <Aspect_TypeOfHighlightMethod.hxx>
#include <Aspect_TypeOfLine.hxx>
#include <Aspect_TypeOfMarker.hxx>
#include <Aspect_TypeOfStyleText.hxx>
#include <Aspect_TypeOfTriedronPosition.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>
#include <Standard_Type.hxx>
//! Provides methods to cast enumerations of package to string value
class Aspect
{
public:
DEFINE_STANDARD_ALLOC
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfDeflectionToString (Aspect_TypeOfDeflection theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOFM_BOTH_SIDE if string identifier is invalid
static Aspect_TypeOfDeflection TypeOfDeflectionFromString (Standard_CString theTypeString)
{
Aspect_TypeOfDeflection aType = Aspect_TOD_RELATIVE;
TypeOfDeflectionFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfDeflectionFromString (const Standard_CString theTypeString,
Aspect_TypeOfDeflection& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfFacingModelToString (Aspect_TypeOfFacingModel theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOFM_BOTH_SIDE if string identifier is invalid
static Aspect_TypeOfFacingModel TypeOfFacingModelFromString (Standard_CString theTypeString)
{
Aspect_TypeOfFacingModel aType = Aspect_TOFM_BOTH_SIDE;
TypeOfFacingModelFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfFacingModelFromString (const Standard_CString theTypeString,
Aspect_TypeOfFacingModel& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfHighlightMethodToString (Aspect_TypeOfHighlightMethod theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOHM_COLOR if string identifier is invalid
static Aspect_TypeOfHighlightMethod TypeOfHighlightMethodFromString (Standard_CString theTypeString)
{
Aspect_TypeOfHighlightMethod aType = Aspect_TOHM_COLOR;
TypeOfHighlightMethodFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfHighlightMethodFromString (const Standard_CString theTypeString,
Aspect_TypeOfHighlightMethod& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfLineToString (Aspect_TypeOfLine theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOL_EMPTY if string identifier is invalid
static Aspect_TypeOfLine TypeOfLineFromString (Standard_CString theTypeString)
{
Aspect_TypeOfLine aType = Aspect_TOL_EMPTY;
TypeOfLineFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfLineFromString (const Standard_CString theTypeString,
Aspect_TypeOfLine& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfMarkerToString (Aspect_TypeOfMarker theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOM_EMPTY if string identifier is invalid
static Aspect_TypeOfMarker TypeOfMarkerFromString (Standard_CString theTypeString)
{
Aspect_TypeOfMarker aType = Aspect_TOM_EMPTY;
TypeOfMarkerFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfMarkerFromString (const Standard_CString theTypeString,
Aspect_TypeOfMarker& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfDisplayTextToString (Aspect_TypeOfDisplayText theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TODT_NORMAL if string identifier is invalid
static Aspect_TypeOfDisplayText TypeOfDisplayTextFromString (Standard_CString theTypeString)
{
Aspect_TypeOfDisplayText aType = Aspect_TODT_NORMAL;
TypeOfDisplayTextFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfDisplayTextFromString (const Standard_CString theTypeString,
Aspect_TypeOfDisplayText& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfStyleTextToString (Aspect_TypeOfStyleText theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TODT_NORMAL if string identifier is invalid
static Aspect_TypeOfStyleText TypeOfStyleTextFromString (Standard_CString theTypeString)
{
Aspect_TypeOfStyleText aType = Aspect_TOST_NORMAL;
TypeOfStyleTextFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfStyleTextFromString (const Standard_CString theTypeString,
Aspect_TypeOfStyleText& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString InteriorStyleToString (Aspect_InteriorStyle theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_IS_EMPTY if string identifier is invalid
static Aspect_InteriorStyle InteriorStyleFromString (Standard_CString theTypeString)
{
Aspect_InteriorStyle aType = Aspect_IS_EMPTY;
InteriorStyleFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean InteriorStyleFromString (const Standard_CString theTypeString,
Aspect_InteriorStyle& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString PolygonOffsetModeToString (Aspect_PolygonOffsetMode theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_POM_Off if string identifier is invalid
static Aspect_PolygonOffsetMode PolygonOffsetModeFromString (Standard_CString theTypeString)
{
Aspect_PolygonOffsetMode aType = Aspect_POM_Off;
PolygonOffsetModeFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean PolygonOffsetModeFromString (const Standard_CString theTypeString,
Aspect_PolygonOffsetMode& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString HatchStyleToString (Aspect_HatchStyle theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_POM_Off if string identifier is invalid
static Aspect_HatchStyle HatchStyleFromString (Standard_CString theTypeString)
{
Aspect_HatchStyle aType = Aspect_HS_SOLID;
HatchStyleFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean HatchStyleFromString (const Standard_CString theTypeString,
Aspect_HatchStyle& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfTriedronPositionToString (Aspect_TypeOfTriedronPosition theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOTP_CENTER if string identifier is invalid
static Aspect_TypeOfTriedronPosition TypeOfTriedronPositionFromString (Standard_CString theTypeString)
{
Aspect_TypeOfTriedronPosition aType = Aspect_TOTP_CENTER;
TypeOfTriedronPositionFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfTriedronPositionFromString (const Standard_CString theTypeString,
Aspect_TypeOfTriedronPosition& theType);
};
#endif // _Aspect_HeaderFile

View File

@@ -1,3 +1,5 @@
Aspect.cxx
Aspect.hxx
Aspect_AspectFillAreaDefinitionError.hxx Aspect_AspectFillAreaDefinitionError.hxx
Aspect_AspectLineDefinitionError.hxx Aspect_AspectLineDefinitionError.hxx
Aspect_AspectMarkerDefinitionError.hxx Aspect_AspectMarkerDefinitionError.hxx

View File

@@ -18,7 +18,9 @@
#include <BVH_Constants.hxx> #include <BVH_Constants.hxx>
#include <BVH_Types.hxx> #include <BVH_Types.hxx>
#include <Message_Alerts.hxx>
#include <Standard_ShortReal.hxx> #include <Standard_ShortReal.hxx>
#include <TCollection.hxx>
#include <limits> #include <limits>
@@ -108,6 +110,17 @@ public:
//! Returns center of bounding box along the given axis. //! Returns center of bounding box along the given axis.
T Center (const Standard_Integer theAxis) const; T Center (const Standard_Integer theAxis) const;
//! Dumps the content of me on the stream <OS>.
void Dump (Standard_OStream& OS) const
{
DUMP_VALUES (OS, "BVH_Box", 2);
DUMP_VALUES (OS, "IsValid", IsValid());
OS << "Bnd_Box" << TCollection::DumpSeparator();
BVH::ToBndBox (CornerMin(), CornerMax()).Dump (OS);
OS << TCollection::DumpSeparator();
}
public: public:
//! Checks if the Box is out of the other box. //! Checks if the Box is out of the other box.

View File

@@ -18,6 +18,11 @@
#include <BVH_Box.hxx> #include <BVH_Box.hxx>
#include <Message_Alerts.hxx>
#include <Standard_Macro.hxx>
#include <Standard_OStream.hxx>
template<class T, int N> class BVH_Builder; template<class T, int N> class BVH_Builder;
//! A non-template class for using as base for BVH_TreeBase //! A non-template class for using as base for BVH_TreeBase
@@ -27,6 +32,13 @@ class BVH_TreeBaseTransient : public Standard_Transient
DEFINE_STANDARD_RTTIEXT(BVH_TreeBaseTransient, Standard_Transient) DEFINE_STANDARD_RTTIEXT(BVH_TreeBaseTransient, Standard_Transient)
protected: protected:
BVH_TreeBaseTransient() {} BVH_TreeBaseTransient() {}
//! Dumps the content of me on the stream <OS>.
virtual void Dump (Standard_OStream& OS) const { (void)OS; }
//! Dumps the content of the given node on the stream <OS>.
virtual void DumpNode (const int theNodeIndex, Standard_OStream& OS) const
{ (void)theNodeIndex; (void)OS; }
}; };
//! Stores parameters of bounding volume hierarchy (BVH). //! Stores parameters of bounding volume hierarchy (BVH).
@@ -178,6 +190,37 @@ public: //! @name methods for accessing serialized tree data
return myMaxPointBuffer; return myMaxPointBuffer;
} }
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT virtual void Dump (Standard_OStream& OS) const Standard_OVERRIDE
{
DUMP_VALUES (OS, "BVH_Tree", 2);
DUMP_VALUES (OS, "Depth", Depth());
DUMP_VALUES (OS, "Length", Length());
for (Standard_Integer aNodeIdx = 0; aNodeIdx < Length(); ++aNodeIdx)
{
DumpNode (aNodeIdx, OS);
}
}
//! Dumps the content of the given node on the stream <OS>.
Standard_EXPORT virtual void DumpNode (const int theNodeIndex, Standard_OStream& OS) const Standard_OVERRIDE
{
DUMP_VALUES (OS, "BVH_TreeNode", 2);
DUMP_VALUES (OS, "NodeIndex", theNodeIndex);
OS << "Bnd_Box" << TCollection::DumpSeparator();
BVH::ToBndBox (MinPoint (theNodeIndex), MaxPoint (theNodeIndex)).Dump (OS);
OS << TCollection::DumpSeparator();
DUMP_VALUES (OS, "BegPrimitive", BegPrimitive (theNodeIndex));
DUMP_VALUES (OS, "EndPrimitive", EndPrimitive (theNodeIndex));
DUMP_VALUES (OS, "Level", Level (theNodeIndex));
DUMP_VALUES (OS, "IsOuter", IsOuter (theNodeIndex));
}
public: //! @name protected fields public: //! @name protected fields
//! Array of node data records. //! Array of node data records.

View File

@@ -21,10 +21,12 @@
#include <vector> #include <vector>
#include <Bnd_Box.hxx>
#include <NCollection_Mat4.hxx> #include <NCollection_Mat4.hxx>
#include <NCollection_Vec2.hxx> #include <NCollection_Vec2.hxx>
#include <NCollection_Vec3.hxx> #include <NCollection_Vec3.hxx>
#include <NCollection_Vector.hxx> #include <NCollection_Vector.hxx>
#include <Standard_OStream.hxx>
#include <Standard_Type.hxx> #include <Standard_Type.hxx>
// GCC supports shrink function only in C++11 mode // GCC supports shrink function only in C++11 mode
@@ -57,6 +59,32 @@ namespace BVH
typedef NCollection_Vec3<T> Type; typedef NCollection_Vec3<T> Type;
}; };
template<class T> Bnd_Box ToBndBox (const T& theType1, const T& theType2)
{
return Bnd_Box (theType1, 0., 0., theType2, 0., 0.);
}
template<class T> Bnd_Box ToBndBox (const NCollection_Vec2<T>& theType1,
const NCollection_Vec2<T>& theType2)
{
return Bnd_Box (theType1.x(), theType1.y(), 0.,
theType2.x(), theType2.y(), 0.);
}
template<class T> Bnd_Box ToBndBox (const NCollection_Vec3<T>& theType1,
const NCollection_Vec3<T>& theType2)
{
return Bnd_Box (theType1.x(), theType1.y(), theType1.z(),
theType2.x(), theType2.y(), theType2.z());
}
template<class T> Bnd_Box ToBndBox (const NCollection_Vec4<T>& theType1,
const NCollection_Vec4<T>& theType2)
{
return Bnd_Box (theType1.x(), theType1.y(), theType1.z(),
theType2.x(), theType2.y(), theType2.z());
}
template<class T> struct VectorType<T, 4> template<class T> struct VectorType<T, 4>
{ {
typedef NCollection_Vec4<T> Type; typedef NCollection_Vec4<T> Type;

View File

@@ -35,8 +35,6 @@
#include <BinMXCAFDoc_MaterialToolDriver.hxx> #include <BinMXCAFDoc_MaterialToolDriver.hxx>
#include <BinMXCAFDoc_NoteDriver.hxx> #include <BinMXCAFDoc_NoteDriver.hxx>
#include <BinMXCAFDoc_NoteBalloonDriver.hxx> #include <BinMXCAFDoc_NoteBalloonDriver.hxx>
#include <BinMXCAFDoc_NoteBinDataDriver.hxx>
#include <BinMXCAFDoc_NoteCommentDriver.hxx>
#include <BinMXCAFDoc_NotesToolDriver.hxx> #include <BinMXCAFDoc_NotesToolDriver.hxx>
#include <BinMXCAFDoc_ShapeToolDriver.hxx> #include <BinMXCAFDoc_ShapeToolDriver.hxx>
#include <BinMXCAFDoc_ViewDriver.hxx> #include <BinMXCAFDoc_ViewDriver.hxx>
@@ -78,8 +76,7 @@ void BinMXCAFDoc::AddDrivers(const Handle(BinMDF_ADriverTable)& theDriverTable,
theDriverTable->AddDriver( new BinMXCAFDoc_DimTolDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_DimTolDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_MaterialDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_MaterialDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_NoteBalloonDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_NoteBalloonDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_NoteBinDataDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_NoteDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_NoteCommentDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_ViewDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_ViewDriver (theMsgDrv));
theDriverTable->AddDriver( new BinMXCAFDoc_ColorToolDriver (theMsgDrv)); theDriverTable->AddDriver( new BinMXCAFDoc_ColorToolDriver (theMsgDrv));

View File

@@ -42,6 +42,9 @@ class BinMXCAFDoc_DimTolToolDriver;
class BinMXCAFDoc_MaterialToolDriver; class BinMXCAFDoc_MaterialToolDriver;
class BinMXCAFDoc_ViewDriver; class BinMXCAFDoc_ViewDriver;
class BinMXCAFDoc_ViewToolDriver; class BinMXCAFDoc_ViewToolDriver;
class BinMXCAFDoc_AnimationDriver;
class BinMXCAFDoc_AnimationToolDriver;
@@ -89,6 +92,9 @@ friend class BinMXCAFDoc_DimTolToolDriver;
friend class BinMXCAFDoc_MaterialToolDriver; friend class BinMXCAFDoc_MaterialToolDriver;
friend class BinMXCAFDoc_ViewDriver; friend class BinMXCAFDoc_ViewDriver;
friend class BinMXCAFDoc_ViewToolDriver; friend class BinMXCAFDoc_ViewToolDriver;
friend class BinMXCAFDoc_AnimationDriver;
friend class BinMXCAFDoc_AnimationToolDriver;
}; };

View File

@@ -0,0 +1,112 @@
// Created on: 2017-10-02
// Created by: Elena MOZOKHINA
// Copyright (c) 2016 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BinMXCAFDoc_AnimationDriver.hxx>
#include <BinObjMgt_Persistent.hxx>
#include <Message_Messenger.hxx>
#include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx>
#include <TDF_Attribute.hxx>
#include <XCAFDoc_Animation.hxx>
# include <TColStd_HArray1OfByte.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_AnimationDriver,BinMDF_ADriver)
static Standard_Boolean getByteArray(const BinObjMgt_Persistent& theSource, Handle(TColStd_HArray1OfByte)& theArray)
{
Standard_Integer aFirstInd, aLastInd;
if (!(theSource >> aFirstInd >> aLastInd))
return Standard_False;
if (aLastInd < aFirstInd)
return Standard_False;
theArray.reset(new TColStd_HArray1OfByte(aFirstInd, aLastInd - aFirstInd + 1));
theSource.GetByteArray(&theArray->ChangeFirst(), aLastInd - aFirstInd + 1);
return Standard_True;
}
static void putByteArray(BinObjMgt_Persistent& theTarget, const Handle(TColStd_HArray1OfByte)& theArray)
{
if (theArray.IsNull())
return;
const Standard_Integer aFirstInd = theArray->Lower();
const Standard_Integer aLastInd = theArray->Upper();
if (aLastInd < aFirstInd)
return;
theTarget << aFirstInd << aLastInd;
theTarget.PutByteArray(&theArray->ChangeFirst(), aLastInd - aFirstInd + 1);
}
//=======================================================================
//function : Constructor
//purpose :
//=======================================================================
BinMXCAFDoc_AnimationDriver::BinMXCAFDoc_AnimationDriver
(const Handle(Message_Messenger)& theMsgDriver)
: BinMDF_ADriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_Animation)->Name())
{
}
//=======================================================================
//function : NewEmpty
//purpose :
//=======================================================================
Handle(TDF_Attribute) BinMXCAFDoc_AnimationDriver::NewEmpty() const
{
return new XCAFDoc_Animation();
}
//=======================================================================
//function : Paste
//purpose :
//=======================================================================
Standard_Boolean BinMXCAFDoc_AnimationDriver::Paste(const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& /*theRelocTable*/) const
{
Handle(XCAFDoc_Animation) anAtt = Handle(XCAFDoc_Animation)::DownCast(theTarget);
Standard_Real aDensity;
TCollection_AsciiString aName;
if (!(theSource >> aName))
return Standard_False;
Handle(TColStd_HArray1OfByte) anImage, anAnimation;
if (!getByteArray(theSource, anImage) || anImage.IsNull())
return Standard_False;
if (!getByteArray(theSource, anAnimation) || anAnimation.IsNull())
return Standard_False;
anAtt->Set(new TCollection_HAsciiString(aName), anImage, anAnimation);
return Standard_True;
}
//=======================================================================
//function : Paste
//purpose :
//=======================================================================
void BinMXCAFDoc_AnimationDriver::Paste(const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& /*theRelocTable*/) const
{
Handle(XCAFDoc_Animation) anAtt = Handle(XCAFDoc_Animation)::DownCast(theSource);
Handle(TCollection_HAsciiString) aName = anAtt->GetName();
if (!aName.IsNull())
theTarget << aName->String();
putByteArray(theTarget, anAtt->GetImage());
putByteArray(theTarget, anAtt->GetAnimation());
}

View File

@@ -0,0 +1,72 @@
// Created on: 2017-10-02
// Created by: Elena MOZOKHINA
// Copyright (c) 2016 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BinMXCAFDoc_AnimationDriver_HeaderFile
#define _BinMXCAFDoc_AnimationDriver_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <BinMDF_ADriver.hxx>
#include <Standard_Boolean.hxx>
#include <BinObjMgt_RRelocationTable.hxx>
#include <BinObjMgt_SRelocationTable.hxx>
class Message_Messenger;
class TDF_Attribute;
class BinObjMgt_Persistent;
class BinMXCAFDoc_AnimationDriver;
DEFINE_STANDARD_HANDLE(BinMXCAFDoc_AnimationDriver, BinMDF_ADriver)
class BinMXCAFDoc_AnimationDriver : public BinMDF_ADriver
{
public:
Standard_EXPORT BinMXCAFDoc_AnimationDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT virtual Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_Boolean Paste (const BinObjMgt_Persistent& theSource, const Handle(TDF_Attribute)& theTarget, BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;
Standard_EXPORT virtual void Paste (const Handle(TDF_Attribute)& theSource, BinObjMgt_Persistent& theTarget, BinObjMgt_SRelocationTable& theRelocTable) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_AnimationDriver,BinMDF_ADriver)
protected:
private:
};
#endif // _BinMXCAFDoc_AnimationDriver_HeaderFile

View File

@@ -0,0 +1,65 @@
// Created on: 2017-10-02
// Created by: Elena MOZOKHINA
// Copyright (c) 2016 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BinMXCAFDoc_AnimationToolDriver.hxx>
#include <BinObjMgt_Persistent.hxx>
#include <Message_Messenger.hxx>
#include <Standard_Type.hxx>
#include <TDF_Attribute.hxx>
#include <XCAFDoc_AnimationTool.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_AnimationToolDriver, BinMDF_ADriver)
//=======================================================================
//function :
//purpose :
//=======================================================================
BinMXCAFDoc_AnimationToolDriver::BinMXCAFDoc_AnimationToolDriver
(const Handle(Message_Messenger)& theMsgDriver)
: BinMDF_ADriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_AnimationTool)->Name())
{
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(TDF_Attribute) BinMXCAFDoc_AnimationToolDriver::NewEmpty() const
{
return new XCAFDoc_AnimationTool();
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Standard_Boolean BinMXCAFDoc_AnimationToolDriver::Paste
(const BinObjMgt_Persistent& /*theSource*/,
const Handle(TDF_Attribute)& /*theTarget*/,
BinObjMgt_RRelocationTable& /*theRelocTable*/) const
{
return Standard_True;
}
//=======================================================================
//function :
//purpose :
//=======================================================================
void BinMXCAFDoc_AnimationToolDriver::Paste
(const Handle(TDF_Attribute)& /*theSource*/,
BinObjMgt_Persistent& /*theTarget*/,
BinObjMgt_SRelocationTable& /*theRelocTable*/) const {
}

View File

@@ -0,0 +1,50 @@
// Created on: 2017-10-02
// Created by: Elena MOZOKHINA
// Copyright (c) 2016 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BinMXCAFDoc_AnimationToolDriver_HeaderFile
#define _BinMXCAFDoc_AnimationToolDriver_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <BinMDF_ADriver.hxx>
#include <Standard_Boolean.hxx>
#include <BinObjMgt_RRelocationTable.hxx>
#include <BinObjMgt_SRelocationTable.hxx>
class Message_Messenger;
class TDF_Attribute;
class BinObjMgt_Persistent;
class BinMXCAFDoc_AnimationToolDriver;
DEFINE_STANDARD_HANDLE(BinMXCAFDoc_AnimationToolDriver, BinMDF_ADriver)
class BinMXCAFDoc_AnimationToolDriver : public BinMDF_ADriver
{
public:
Standard_EXPORT BinMXCAFDoc_AnimationToolDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT virtual Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_Boolean Paste(const BinObjMgt_Persistent& theSource, const Handle(TDF_Attribute)& theTarget, BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;
Standard_EXPORT virtual void Paste(const Handle(TDF_Attribute)& theSource, BinObjMgt_Persistent& theTarget, BinObjMgt_SRelocationTable& theRelocTable) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_AnimationToolDriver, BinMDF_ADriver)
};
#endif // _BinMXCAFDoc_AnimationToolDriver_HeaderFile

View File

@@ -20,14 +20,14 @@
#include <BinMXCAFDoc_NoteBalloonDriver.hxx> #include <BinMXCAFDoc_NoteBalloonDriver.hxx>
#include <XCAFDoc_NoteBalloon.hxx> #include <XCAFDoc_NoteBalloon.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteCommentDriver) IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteDriver)
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BinMXCAFDoc_NoteBalloonDriver::BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver) BinMXCAFDoc_NoteBalloonDriver::BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver)
: BinMXCAFDoc_NoteCommentDriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_NoteBalloon)->Name()) : BinMXCAFDoc_NoteDriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_NoteBalloon)->Name())
{ {
} }
@@ -40,13 +40,52 @@ Handle(TDF_Attribute) BinMXCAFDoc_NoteBalloonDriver::NewEmpty() const
return new XCAFDoc_NoteBalloon(); return new XCAFDoc_NoteBalloon();
} }
//=======================================================================
//function :
//purpose :
//=======================================================================
Standard_Boolean BinMXCAFDoc_NoteBalloonDriver::Paste(const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const
{
if (!BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable))
return Standard_False;
Handle(XCAFDoc_NoteBalloon) aNote = Handle(XCAFDoc_NoteBalloon)::DownCast(theTarget);
if (aNote.IsNull())
return Standard_False;
TCollection_ExtendedString aComment;
if (!(theSource >> aComment))
return Standard_False;
aNote->Set(aComment);
return Standard_True;
}
//=======================================================================
//function :
//purpose :
//=======================================================================
void BinMXCAFDoc_NoteBalloonDriver::Paste(const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const
{
BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable);
Handle(XCAFDoc_NoteBalloon) aNote = Handle(XCAFDoc_NoteBalloon)::DownCast(theSource);
if (!aNote.IsNull())
theTarget << aNote->Get();
}
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BinMXCAFDoc_NoteBalloonDriver::BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver, BinMXCAFDoc_NoteBalloonDriver::BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver,
Standard_CString theName) Standard_CString theName)
: BinMXCAFDoc_NoteCommentDriver(theMsgDriver, theName) : BinMXCAFDoc_NoteDriver(theMsgDriver, theName)
{ {
} }

View File

@@ -16,20 +16,28 @@
#ifndef _BinMXCAFDoc_NoteBalloonDriver_HeaderFile #ifndef _BinMXCAFDoc_NoteBalloonDriver_HeaderFile
#define _BinMXCAFDoc_NoteBalloonDriver_HeaderFile #define _BinMXCAFDoc_NoteBalloonDriver_HeaderFile
#include <BinMXCAFDoc_NoteCommentDriver.hxx> #include <BinMXCAFDoc_NoteDriver.hxx>
class BinMXCAFDoc_NoteBalloonDriver; class BinMXCAFDoc_NoteBalloonDriver;
DEFINE_STANDARD_HANDLE(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteCommentDriver) DEFINE_STANDARD_HANDLE(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteDriver)
class BinMXCAFDoc_NoteBalloonDriver : public BinMXCAFDoc_NoteCommentDriver class BinMXCAFDoc_NoteBalloonDriver : public BinMXCAFDoc_NoteDriver
{ {
public: public:
Standard_EXPORT BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver); Standard_EXPORT BinMXCAFDoc_NoteBalloonDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE; Standard_EXPORT Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteCommentDriver) Standard_EXPORT Standard_Boolean Paste(const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;
Standard_EXPORT void Paste(const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBalloonDriver, BinMXCAFDoc_NoteDriver)
protected: protected:

View File

@@ -1,96 +0,0 @@
// Created on: 2017-02-13
// Created by: Eugeny NIKONOV
// Copyright (c) 2005-2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BinObjMgt_Persistent.hxx>
#include <Message_Messenger.hxx>
#include <Standard_Type.hxx>
#include <TDF_Attribute.hxx>
#include <TColStd_HArray1OfByte.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_ExtendedString.hxx>
#include <BinMXCAFDoc_NoteBinDataDriver.hxx>
#include <XCAFDoc_NoteBinData.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBinDataDriver, BinMXCAFDoc_NoteDriver)
//=======================================================================
//function :
//purpose :
//=======================================================================
BinMXCAFDoc_NoteBinDataDriver::BinMXCAFDoc_NoteBinDataDriver(const Handle(Message_Messenger)& theMsgDriver)
: BinMXCAFDoc_NoteDriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_NoteBinData)->Name())
{
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(TDF_Attribute) BinMXCAFDoc_NoteBinDataDriver::NewEmpty() const
{
return new XCAFDoc_NoteBinData();
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Standard_Boolean BinMXCAFDoc_NoteBinDataDriver::Paste(const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const
{
if (!BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable))
return Standard_False;
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theTarget);
if (aNote.IsNull())
return Standard_False;
TCollection_ExtendedString aTitle;
TCollection_AsciiString aMIMEtype;
Standard_Integer nbSize;
if (!(theSource >> aTitle >> aMIMEtype >> nbSize))
return Standard_False;
Handle(TColStd_HArray1OfByte) aData;
if (nbSize > 0)
{
aData.reset(new TColStd_HArray1OfByte(1, nbSize));
theSource.GetByteArray(&aData->ChangeFirst(), nbSize);
}
aNote->Set(aTitle, aMIMEtype, aData);
return Standard_True;
}
//=======================================================================
//function :
//purpose :
//=======================================================================
void BinMXCAFDoc_NoteBinDataDriver::Paste(const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const
{
BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable);
Handle(XCAFDoc_NoteBinData) aNote = Handle(XCAFDoc_NoteBinData)::DownCast(theSource);
if (!aNote.IsNull())
{
theTarget << aNote->Title() << aNote->MIMEtype() << aNote->Size();
if (aNote->Size() > 0)
theTarget.PutByteArray(&aNote->Data()->ChangeFirst(), aNote->Size());
}
}

View File

@@ -1,44 +0,0 @@
// Created on: 2017-02-13
// Created by: Sergey NIKONOV
// Copyright (c) 2005-2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BinMXCAFDoc_NoteBinDataDriver_HeaderFile
#define _BinMXCAFDoc_NoteBinDataDriver_HeaderFile
#include <BinMXCAFDoc_NoteDriver.hxx>
class BinMXCAFDoc_NoteBinDataDriver;
DEFINE_STANDARD_HANDLE(BinMXCAFDoc_NoteBinDataDriver, BinMXCAFDoc_NoteDriver)
class BinMXCAFDoc_NoteBinDataDriver : public BinMXCAFDoc_NoteDriver
{
public:
Standard_EXPORT BinMXCAFDoc_NoteBinDataDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Paste (const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;
Standard_EXPORT void Paste (const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_NoteBinDataDriver, BinMXCAFDoc_NoteDriver)
};
#endif // _BinMXCAFDoc_NoteBinDataDriver_HeaderFile

View File

@@ -1,91 +0,0 @@
// Created on: 2017-02-13
// Created by: Eugeny NIKONOV
// Copyright (c) 2005-2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BinObjMgt_Persistent.hxx>
#include <Message_Messenger.hxx>
#include <Standard_Type.hxx>
#include <TDF_Attribute.hxx>
#include <BinMXCAFDoc_NoteCommentDriver.hxx>
#include <XCAFDoc_NoteComment.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteCommentDriver, BinMXCAFDoc_NoteDriver)
//=======================================================================
//function :
//purpose :
//=======================================================================
BinMXCAFDoc_NoteCommentDriver::BinMXCAFDoc_NoteCommentDriver(const Handle(Message_Messenger)& theMsgDriver)
: BinMXCAFDoc_NoteDriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_NoteComment)->Name())
{
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(TDF_Attribute) BinMXCAFDoc_NoteCommentDriver::NewEmpty() const
{
return new XCAFDoc_NoteComment();
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Standard_Boolean BinMXCAFDoc_NoteCommentDriver::Paste(const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const
{
if (!BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable))
return Standard_False;
Handle(XCAFDoc_NoteComment) aNote = Handle(XCAFDoc_NoteComment)::DownCast(theTarget);
if (aNote.IsNull())
return Standard_False;
TCollection_ExtendedString aComment;
if (!(theSource >> aComment))
return Standard_False;
aNote->Set(aComment);
return Standard_True;
}
//=======================================================================
//function :
//purpose :
//=======================================================================
void BinMXCAFDoc_NoteCommentDriver::Paste(const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const
{
BinMXCAFDoc_NoteDriver::Paste(theSource, theTarget, theRelocTable);
Handle(XCAFDoc_NoteComment) aNote = Handle(XCAFDoc_NoteComment)::DownCast(theSource);
if (!aNote.IsNull())
theTarget << aNote->Comment();
}
//=======================================================================
//function :
//purpose :
//=======================================================================
BinMXCAFDoc_NoteCommentDriver::BinMXCAFDoc_NoteCommentDriver(const Handle(Message_Messenger)& theMsgDriver,
Standard_CString theName)
: BinMXCAFDoc_NoteDriver(theMsgDriver, theName)
{
}

View File

@@ -1,49 +0,0 @@
// Created on: 2017-02-13
// Created by: Sergey NIKONOV
// Copyright (c) 2005-2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BinMXCAFDoc_NoteCommentDriver_HeaderFile
#define _BinMXCAFDoc_NoteCommentDriver_HeaderFile
#include <BinMXCAFDoc_NoteDriver.hxx>
class BinMXCAFDoc_NoteCommentDriver;
DEFINE_STANDARD_HANDLE(BinMXCAFDoc_NoteCommentDriver, BinMXCAFDoc_NoteDriver)
class BinMXCAFDoc_NoteCommentDriver : public BinMXCAFDoc_NoteDriver
{
public:
Standard_EXPORT BinMXCAFDoc_NoteCommentDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Paste (const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;
Standard_EXPORT void Paste (const Handle(TDF_Attribute)& theSource,
BinObjMgt_Persistent& theTarget,
BinObjMgt_SRelocationTable& theRelocTable) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(BinMXCAFDoc_NoteCommentDriver, BinMXCAFDoc_NoteDriver)
protected:
BinMXCAFDoc_NoteCommentDriver(const Handle(Message_Messenger)& theMsgDriver,
Standard_CString theName);
};
#endif // _BinMXCAFDoc_NoteCommentDriver_HeaderFile

View File

@@ -22,6 +22,24 @@
IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteDriver, BinMDF_ADriver) IMPLEMENT_STANDARD_RTTIEXT(BinMXCAFDoc_NoteDriver, BinMDF_ADriver)
//=======================================================================
//function :
//purpose :
//=======================================================================
BinMXCAFDoc_NoteDriver::BinMXCAFDoc_NoteDriver(const Handle(Message_Messenger)& theMsgDriver)
: BinMDF_ADriver(theMsgDriver, STANDARD_TYPE(XCAFDoc_Note)->Name())
{
}
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(TDF_Attribute) BinMXCAFDoc_NoteDriver::NewEmpty() const
{
return new XCAFDoc_Note();
}
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :

View File

@@ -35,6 +35,10 @@ class BinMXCAFDoc_NoteDriver : public BinMDF_ADriver
{ {
public: public:
Standard_EXPORT BinMXCAFDoc_NoteDriver(const Handle(Message_Messenger)& theMsgDriver);
Standard_EXPORT Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
Standard_EXPORT Standard_Boolean Paste (const BinObjMgt_Persistent& theSource, Standard_EXPORT Standard_Boolean Paste (const BinObjMgt_Persistent& theSource,
const Handle(TDF_Attribute)& theTarget, const Handle(TDF_Attribute)& theTarget,
BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE; BinObjMgt_RRelocationTable& theRelocTable) const Standard_OVERRIDE;

View File

@@ -39,10 +39,6 @@ BinMXCAFDoc_NoteDriver.cxx
BinMXCAFDoc_NoteDriver.hxx BinMXCAFDoc_NoteDriver.hxx
BinMXCAFDoc_NoteBalloonDriver.cxx BinMXCAFDoc_NoteBalloonDriver.cxx
BinMXCAFDoc_NoteBalloonDriver.hxx BinMXCAFDoc_NoteBalloonDriver.hxx
BinMXCAFDoc_NoteCommentDriver.cxx
BinMXCAFDoc_NoteCommentDriver.hxx
BinMXCAFDoc_NoteBinDataDriver.cxx
BinMXCAFDoc_NoteBinDataDriver.hxx
BinMXCAFDoc_NotesToolDriver.cxx BinMXCAFDoc_NotesToolDriver.cxx
BinMXCAFDoc_NotesToolDriver.hxx BinMXCAFDoc_NotesToolDriver.hxx
BinMXCAFDoc_ShapeToolDriver.cxx BinMXCAFDoc_ShapeToolDriver.cxx
@@ -53,3 +49,7 @@ BinMXCAFDoc_ViewToolDriver.cxx
BinMXCAFDoc_ViewToolDriver.hxx BinMXCAFDoc_ViewToolDriver.hxx
BinMXCAFDoc_VolumeDriver.cxx BinMXCAFDoc_VolumeDriver.cxx
BinMXCAFDoc_VolumeDriver.hxx BinMXCAFDoc_VolumeDriver.hxx
BinMXCAFDoc_AnimationDriver.cxx
BinMXCAFDoc_AnimationDriver.hxx
BinMXCAFDoc_AnimationToolDriver.cxx
BinMXCAFDoc_AnimationToolDriver.hxx

View File

@@ -20,7 +20,10 @@
#include <gp_Pln.hxx> #include <gp_Pln.hxx>
#include <gp_Pnt.hxx> #include <gp_Pnt.hxx>
#include <gp_Trsf.hxx> #include <gp_Trsf.hxx>
#include <NCollection_List.hxx>
#include <Standard_ConstructionError.hxx> #include <Standard_ConstructionError.hxx>
#include <TCollection.hxx>
#include <TCollection_AsciiString.hxx>
// set the flag to one // set the flag to one
#define ClearVoidFlag() ( Flags &= ~VoidMask ) #define ClearVoidFlag() ( Flags &= ~VoidMask )
@@ -43,6 +46,19 @@ Bnd_Box::Bnd_Box()
SetVoid(); SetVoid();
} }
//=======================================================================
//function : Bnd_Box
//purpose :
//=======================================================================
Bnd_Box::Bnd_Box (const Standard_Real theXmin, const Standard_Real theYmin, const Standard_Real theZmin,
const Standard_Real theXmax, const Standard_Real theYmax, const Standard_Real theZmax)
: Gap (0.0)
{
SetVoid();
Update (theXmin, theYmin, theZmin, theXmax, theYmax, theZmax);
}
//======================================================================= //=======================================================================
//function : Set //function : Set
//purpose : //purpose :
@@ -957,3 +973,71 @@ void Bnd_Box::Dump () const
std::cout << "\n Gap : " << Gap; std::cout << "\n Gap : " << Gap;
std::cout << "\n"; std::cout << "\n";
} }
//=======================================================================
//function : PointsSeparator
//purpose :
//=======================================================================
TCollection_AsciiString PointsSeparator()
{
return " - ";
}
const TCollection_AsciiString Bnd_Box_ClassName = "Bnd_Box";
//=======================================================================
//function : Dump
//purpose :
//=======================================================================
void Bnd_Box::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, Bnd_Box_ClassName);
DUMP_VALUES (OS, "Xmin", Xmin);
DUMP_VALUES (OS, "Ymin", Ymin);
DUMP_VALUES (OS, "Zmin", Zmin);
DUMP_VALUES (OS, "Xmax", Xmax);
DUMP_VALUES (OS, "Ymax", Ymax);
DUMP_VALUES (OS, "Zmax", Zmax);
DUMP_VALUES (OS, "Gap", Gap);
DUMP_VALUES (OS, "Flags", Flags);
DUMP_STOP_KEY (OS, Bnd_Box_ClassName);
}
//=======================================================================
//function : Init
//purpose :
//=======================================================================
Standard_Boolean Bnd_Box::Init (const Standard_SStream& OS)
{
NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString> aStreamValues;
TCollection_AsciiString aKey;
TCollection::Split (OS, aStreamValues, aKey);
TCollection_AsciiString aXmin, anYmin, aZmin, aXmax, anYmax, aZmax, aGap, aFlags;
if (!aStreamValues.FindFromKey ("Xmin", aXmin) ||
!aStreamValues.FindFromKey ("Ymin", anYmin) ||
!aStreamValues.FindFromKey ("Zmin", aZmin) ||
!aStreamValues.FindFromKey ("Xmax", aXmax) ||
!aStreamValues.FindFromKey ("Ymax", anYmax) ||
!aStreamValues.FindFromKey ("Zmax", aZmax) ||
!aStreamValues.FindFromKey ("Gap", aGap) ||
!aStreamValues.FindFromKey ("Flags", aFlags))
return Standard_False;
Xmin = aXmin.RealValue();
Ymin = anYmin.RealValue();
Zmin = aZmin.RealValue();
Xmax = aXmax.RealValue();
Ymax = anYmax.RealValue();
Zmax = aZmax.RealValue();
Gap = aGap.RealValue();
Flags = aFlags.IntegerValue();
return Standard_True;
}

View File

@@ -24,6 +24,10 @@
#include <Standard_Real.hxx> #include <Standard_Real.hxx>
#include <Standard_Integer.hxx> #include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx> #include <Standard_Boolean.hxx>
#include <TCollection_AsciiString.hxx>
#include <gp_XYZ.hxx>
class Standard_ConstructionError; class Standard_ConstructionError;
class gp_Pnt; class gp_Pnt;
class gp_Dir; class gp_Dir;
@@ -69,6 +73,14 @@ public:
//! The constructed box is qualified Void. Its gap is null. //! The constructed box is qualified Void. Its gap is null.
Standard_EXPORT Bnd_Box(); Standard_EXPORT Bnd_Box();
//! Creates a bounding box, it contains:
//! - interval [ aXmin,aXmax ] in the "X Direction",
//! - interval [ aYmin,aYmax ] in the "Y Direction",
//! - interval [ aZmin,aZmax ] in the "Z Direction";
//! The constructed box is qualified Void. Its gap is null.
Standard_EXPORT Bnd_Box (const Standard_Real aXmin, const Standard_Real aYmin, const Standard_Real aZmin,
const Standard_Real aXmax, const Standard_Real aYmax, const Standard_Real aZmax);
//! Sets this bounding box so that it covers the whole of 3D space. //! Sets this bounding box so that it covers the whole of 3D space.
//! It is infinitely long in all directions. //! It is infinitely long in all directions.
void SetWhole() { Flags = WholeMask; } void SetWhole() { Flags = WholeMask; }
@@ -296,6 +308,20 @@ public:
&& Xmax >= Xmin; && Xmax >= Xmin;
} }
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT void Dump (Standard_OStream& OS) const;
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT Standard_Boolean Init (const Standard_SStream& OS);
//! Covers bounding box into string in format: (Xmin, Ymin, Zmin) - (Xmax, Ymax, Zmax)
//! \return the string value
Standard_EXPORT TCollection_AsciiString ToString() const { return ""; }
//! Converts text value into parameters if possible, the string format is: (Xmin, Ymin, Zmin) - (Xmax, Ymax, Zmax)
//! \return true if conversion is done
Standard_EXPORT Standard_Boolean FromString (const TCollection_AsciiString& theValue) { (void)theValue; return Standard_False; }
protected: protected:
//! Bit flags. //! Bit flags.

View File

@@ -24,6 +24,7 @@
#include <NCollection_Array1.hxx> #include <NCollection_Array1.hxx>
#include <Precision.hxx> #include <Precision.hxx>
#include <TCollection.hxx>
#include <TColStd_Array1OfReal.hxx> #include <TColStd_Array1OfReal.hxx>
//! Auxiliary class to select from the points stored in //! Auxiliary class to select from the points stored in
@@ -992,3 +993,78 @@ void Bnd_OBB::Add(const Bnd_OBB& theOther)
ReBuild(TColgp_Array1OfPnt(aList[0], 0, 15)); ReBuild(TColgp_Array1OfPnt(aList[0], 0, 15));
} }
const TCollection_AsciiString Bnd_OBB_ClassName = "Bnd_OBB";
//=======================================================================
//function : Dump
//purpose :
//=======================================================================
void Bnd_OBB::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, Bnd_OBB_ClassName);
{
Standard_SStream aTmpStream;
myCenter.Dump (aTmpStream);
DUMP_VALUES (OS, "Center", TCollection::ToDumpString (aTmpStream));
}
{
Standard_SStream aTmpStream;
myAxes[0].Dump (aTmpStream);
DUMP_VALUES (OS, "XAxis", TCollection::ToDumpString (aTmpStream));
}
{
Standard_SStream aTmpStream;
myAxes[1].Dump (aTmpStream);
DUMP_VALUES (OS, "YAxis", TCollection::ToDumpString (aTmpStream));
}
{
Standard_SStream aTmpStream;
myAxes[2].Dump (aTmpStream);
DUMP_VALUES (OS, "ZAxis", TCollection::ToDumpString (aTmpStream));
}
DUMP_VALUES (OS, "XHSize", XHSize());
DUMP_VALUES (OS, "YHSize", YHSize());
DUMP_VALUES (OS, "ZHSize", ZHSize());
DUMP_VALUES (OS, "IsAABox", myIsAABox);
DUMP_STOP_KEY (OS, Bnd_OBB_ClassName);
}
//=======================================================================
//function : Init
//purpose :
//=======================================================================
Standard_Boolean Bnd_OBB::Init (const Standard_SStream& /*OS*/)
{
//NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString> aStreamValues;
//TCollection::Split (OS, aStreamValues, aKey);
//TCollection_AsciiString anXYZValue;
//if (aStreamValues.Size() == 1)
//{
// NCollection_DataMap<TCollection_AsciiString, TCollection_AsciiString>::Iterator anIterator (aStreamValues);
// TCollection_AsciiString aValueStr = anIterator.Value();
// Standard_Integer aPosition = aValueStr.Search (Bnd_Box_ClassName + TCollection::ClassNameSeparator());
// if (aPosition < 1)
// return Standard_False;
// anXYZValue = aValueStr.Split (aPosition);
//}
//NCollection_Vector<Standard_Real> aValues;
//if (!TCollection::SplitReal (anXYZValue, TCollection::VectorSeparator(), aValues))
// return Standard_False;
//if (aValues.Size() != 8)
// return Standard_False;
//Update (aValues.Value (1), aValues.Value (2), aValues.Value (3), aValues.Value (4), aValues.Value (5), aValues.Value (6));
//Gap = aValues.Value (7);
//Flags = (Standard_Integer)aValues.Value (8);
//return Standard_True;
return Standard_False;
}

View File

@@ -20,6 +20,7 @@
#include <Standard_Handle.hxx> #include <Standard_Handle.hxx>
#include <Standard_Real.hxx> #include <Standard_Real.hxx>
#include <Standard_Boolean.hxx> #include <Standard_Boolean.hxx>
#include <Standard_OStream.hxx>
#include <Bnd_Box.hxx> #include <Bnd_Box.hxx>
#include <gp_Ax3.hxx> #include <gp_Ax3.hxx>
@@ -281,6 +282,20 @@ public:
//! (which it was created from) and theP. //! (which it was created from) and theP.
Standard_EXPORT void Add(const gp_Pnt& theP); Standard_EXPORT void Add(const gp_Pnt& theP);
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT Standard_Boolean Init (const Standard_SStream& OS);
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT void Dump (Standard_OStream& OS) const;
//! Covers bounding box into string in format: (Xmin, Ymin, Zmin) - (Xmax, Ymax, Zmax)
//! \return the string value
Standard_EXPORT TCollection_AsciiString ToString() const { return ""; }
//! Converts text value into parameters if possible, the string format is: (Xmin, Ymin, Zmin) - (Xmax, Ymax, Zmax)
//! \return true if conversion is done
Standard_EXPORT Standard_Boolean FromString (const TCollection_AsciiString& theValue) { (void)theValue; return Standard_False; }
protected: protected:
void ProcessOnePoint(const gp_Pnt& theP) void ProcessOnePoint(const gp_Pnt& theP)

View File

@@ -174,4 +174,13 @@ void Bnd_Range::Split(const Standard_Real theVal,
{ {
theList.Append(Bnd_Range(aValPrev, myLast)); theList.Append(Bnd_Range(aValPrev, myLast));
} }
} }
//=======================================================================
//function : ToString
//purpose :
//=======================================================================
TCollection_AsciiString Bnd_Range::ToString() const
{
return TCollection_AsciiString ("[") + myFirst + ", " + myLast + "]";
}

View File

@@ -18,6 +18,7 @@
#include <Standard_Real.hxx> #include <Standard_Real.hxx>
#include <Standard_ConstructionError.hxx> #include <Standard_ConstructionError.hxx>
#include <TCollection_AsciiString.hxx>
#include <NCollection_List.hxx> #include <NCollection_List.hxx>
@@ -256,6 +257,10 @@ public:
return ((myFirst == theOther.myFirst) && (myLast == theOther.myLast)); return ((myFirst == theOther.myFirst) && (myLast == theOther.myLast));
} }
//! Covers point into string in format: [myFirst, myLast]
//! \return the string value
Standard_EXPORT TCollection_AsciiString ToString() const;
private: private:
Standard_Real myFirst; //!< Start of range Standard_Real myFirst; //!< Start of range

View File

@@ -1,3 +1,5 @@
Font.cxx
Font.hxx
Font_BRepFont.cxx Font_BRepFont.cxx
Font_BRepFont.hxx Font_BRepFont.hxx
Font_BRepTextBuilder.cxx Font_BRepTextBuilder.cxx

56
src/Font/Font.cxx Normal file
View File

@@ -0,0 +1,56 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Font.hxx>
#include <TCollection_AsciiString.hxx>
namespace
{
static Standard_CString Font_Table_PrintFontAspect[5] =
{
"UNDEFINED", "REGULAR", "BOLD", "ITALIC", "BOLD_ITALIC"
};
}
//=======================================================================
//function : FontAspectToString
//purpose :
//=======================================================================
Standard_CString Font::FontAspectToString (Font_FontAspect theType)
{
return Font_Table_PrintFontAspect[theType];
}
//=======================================================================
//function : FontAspectFromString
//purpose :
//=======================================================================
Standard_Boolean Font::FontAspectFromString (Standard_CString theTypeString,
Font_FontAspect& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= Font_FA_BoldItalic; ++aTypeIter)
{
Standard_CString aTypeName = Font_Table_PrintFontAspect[aTypeIter];
if (aName == aTypeName)
{
theType = Font_FontAspect (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}

54
src/Font/Font.hxx Normal file
View File

@@ -0,0 +1,54 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Font_HeaderFile
#define _Font_HeaderFile
#include <Font_FontAspect.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>
#include <Standard_Type.hxx>
//! Provides methods to cast enumerations of package to string value
class Font
{
public:
DEFINE_STANDARD_ALLOC
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString FontAspectToString (Font_FontAspect theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Aspect_TOFM_BOTH_SIDE if string identifier is invalid
static Font_FontAspect FontAspectFromString (Standard_CString theTypeString)
{
Font_FontAspect aType = Font_FA_Undefined;
FontAspectFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean FontAspectFromString (const Standard_CString theTypeString,
Font_FontAspect& theType);
};
#endif // _Font_HeaderFile

View File

@@ -15,12 +15,14 @@
#include <Font_BRepTextBuilder.hxx> #include <Font_BRepTextBuilder.hxx>
#include <Font_TextFormatter.hxx>
// ======================================================================= // =======================================================================
// Function : Perfrom // Function : Perfrom
// Purpose : // Purpose :
// ======================================================================= // =======================================================================
TopoDS_Shape Font_BRepTextBuilder::Perform (Font_BRepFont& theFont, TopoDS_Shape Font_BRepTextBuilder::Perform (Font_BRepFont& theFont,
const Font_TextFormatter& theFormatter, const Handle(Font_TextFormatter)& theFormatter,
const gp_Ax3& thePenLoc) const gp_Ax3& thePenLoc)
{ {
gp_Trsf aTrsf; gp_Trsf aTrsf;
@@ -31,34 +33,20 @@ TopoDS_Shape Font_BRepTextBuilder::Perform (Font_BRepFont& theFont,
myBuilder.MakeCompound (aResult); myBuilder.MakeCompound (aResult);
Standard_Integer aSymbolCounter = 0; Standard_Real aScaleUnits = theFont.Scale();
Standard_Real aScaleUnits = theFont.Scale(); for (Font_TextFormatter::Iterator aFormatterIt (*theFormatter, Font_TextFormatter::IterationFilter_ExcludeInvisible);
for (NCollection_Utf8Iter anIter = theFormatter.String().Iterator(); *anIter != 0; ++anIter) aFormatterIt .More(); aFormatterIt .Next())
{ {
const Standard_Utf32Char aCharCurr = *anIter; const NCollection_Vec2<Standard_ShortReal>& aCorner = theFormatter->BottomLeft (aFormatterIt.SymbolPosition());
if (aCharCurr == '\x0D' // CR (carriage return)
|| aCharCurr == '\a' // BEL (alarm)
|| aCharCurr == '\f' // FF (form feed) NP (new page)
|| aCharCurr == '\b' // BS (backspace)
|| aCharCurr == '\v' // VT (vertical tab)
|| aCharCurr == ' '
|| aCharCurr == '\t'
|| aCharCurr == '\n')
{
continue; // skip unsupported carriage control codes
}
const NCollection_Vec2<Standard_ShortReal>& aCorner = theFormatter.TopLeft (aSymbolCounter);
aPen.SetCoord (aCorner.x() * aScaleUnits, aCorner.y() * aScaleUnits, 0.0); aPen.SetCoord (aCorner.x() * aScaleUnits, aCorner.y() * aScaleUnits, 0.0);
aGlyphShape = theFont.RenderGlyph (aCharCurr); aGlyphShape = theFont.RenderGlyph (aFormatterIt.Symbol());
if (!aGlyphShape.IsNull()) if (!aGlyphShape.IsNull())
{ {
aTrsf.SetTranslation (gp_Vec (aPen)); aTrsf.SetTranslation (gp_Vec (aPen));
aGlyphShape.Move (aTrsf); aGlyphShape.Move (aTrsf);
myBuilder.Add (aResult, aGlyphShape); myBuilder.Add (aResult, aGlyphShape);
} }
++aSymbolCounter;
} }
aTrsf.SetTransformation (thePenLoc, gp_Ax3 (gp::XOY())); aTrsf.SetTransformation (thePenLoc, gp_Ax3 (gp::XOY()));
@@ -77,13 +65,13 @@ TopoDS_Shape Font_BRepTextBuilder::Perform (Font_BRepFont&
const Graphic3d_HorizontalTextAlignment theHAlign, const Graphic3d_HorizontalTextAlignment theHAlign,
const Graphic3d_VerticalTextAlignment theVAlign) const Graphic3d_VerticalTextAlignment theVAlign)
{ {
Font_TextFormatter aFormatter; Handle(Font_TextFormatter) aFormatter = new Font_TextFormatter();
aFormatter.Reset(); aFormatter->Reset();
aFormatter.SetupAlignment (theHAlign, theVAlign); aFormatter->SetupAlignment (theHAlign, theVAlign);
aFormatter.Append (theString, *(reinterpret_cast<Font_FTFont*> (&theFont))); aFormatter->Append (theString, *(reinterpret_cast<Font_FTFont*> (&theFont)));
aFormatter.Format(); aFormatter->Format();
return Perform (theFont, aFormatter, thePenLoc); return Perform (theFont, aFormatter, thePenLoc);
} }

View File

@@ -17,9 +17,10 @@
#define Font_BRepTextBuilder_Header #define Font_BRepTextBuilder_Header
#include <Font_BRepFont.hxx> #include <Font_BRepFont.hxx>
#include <Font_TextFormatter.hxx>
#include <gp_Ax3.hxx> #include <gp_Ax3.hxx>
class Font_TextFormatter;
//! Represents class for applying text formatting. //! Represents class for applying text formatting.
class Font_BRepTextBuilder class Font_BRepTextBuilder
{ {
@@ -30,7 +31,7 @@ public:
//! @param theFormatter formatter which defines alignment for the text //! @param theFormatter formatter which defines alignment for the text
//! @return result shape with pen transformation applied as shape location //! @return result shape with pen transformation applied as shape location
Standard_EXPORT TopoDS_Shape Perform (Font_BRepFont& theFont, Standard_EXPORT TopoDS_Shape Perform (Font_BRepFont& theFont,
const Font_TextFormatter& theFormatter, const Handle(Font_TextFormatter)& theFormatter,
const gp_Ax3& thePenLoc = gp_Ax3()); const gp_Ax3& thePenLoc = gp_Ax3());
//! Render text as BRep shape. //! Render text as BRep shape.
//! @param theString text in UTF-8 encoding //! @param theString text in UTF-8 encoding

View File

@@ -17,6 +17,10 @@
#include <Font_FTFont.hxx> #include <Font_FTFont.hxx>
#include <Precision.hxx>
IMPLEMENT_STANDARD_RTTIEXT (Font_TextFormatter, Standard_Transient)
namespace namespace
{ {
typedef NCollection_Vec2<Standard_ShortReal> Vec2f; typedef NCollection_Vec2<Standard_ShortReal> Vec2f;
@@ -55,16 +59,17 @@ Font_TextFormatter::Font_TextFormatter()
: myAlignX (Graphic3d_HTA_LEFT), : myAlignX (Graphic3d_HTA_LEFT),
myAlignY (Graphic3d_VTA_TOP), myAlignY (Graphic3d_VTA_TOP),
myTabSize (8), myTabSize (8),
myWrappingWidth (0.0f),
myLastSymbolWidth (0.0f),
myMaxSymbolWidth (0.0f),
// //
myPen (0.0f, 0.0f), myPen (0.0f, 0.0f),
myRectsNb (0),
myLineSpacing (0.0f), myLineSpacing (0.0f),
myAscender (0.0f), myAscender (0.0f),
myIsFormatted (false), myIsFormatted (false),
// //
myLinesNb (0), myLinesNb (0),
myRectLineStart (0), myRectLineStart (0),
myRectWordStart (0),
myNewLineNb(0), myNewLineNb(0),
myPenCurrLine (0.0f), myPenCurrLine (0.0f),
myBndTop (0.0f), myBndTop (0.0f),
@@ -94,10 +99,12 @@ void Font_TextFormatter::Reset()
myIsFormatted = false; myIsFormatted = false;
myString.Clear(); myString.Clear();
myPen.x() = myPen.y() = 0.0f; myPen.x() = myPen.y() = 0.0f;
myRectsNb = 0;
myLineSpacing = myAscender = 0.0f; myLineSpacing = myAscender = 0.0f;
myCorners.Clear(); myCorners.Clear();
myNewLines.Clear(); myNewLines.Clear();
myLastSymbolWidth = 0.0f;
myMaxSymbolWidth = 0.0f;
} }
// ======================================================================= // =======================================================================
@@ -119,16 +126,14 @@ void Font_TextFormatter::Append (const NCollection_String& theString,
int aSymbolsCounter = 0; // special counter to process tabulation symbols int aSymbolsCounter = 0; // special counter to process tabulation symbols
// first pass - render all symbols using associated font on single ZERO baseline // first pass - render all symbols using associated font on single ZERO baseline
for (NCollection_Utf8Iter anIter = theString.Iterator(); *anIter != 0;) Standard_Utf32Char aCharThis;
for (Font_TextFormatter::Iterator aFormatterIt (*this); aFormatterIt .More(); aFormatterIt .Next())
{ {
const Standard_Utf32Char aCharThis = *anIter; aCharThis = aFormatterIt.Symbol();
const Standard_Utf32Char aCharNext = *++anIter; const Standard_Utf32Char aCharNext = aFormatterIt.SymbolNext();
if (aCharThis == '\x0D' // CR (carriage return) Standard_ShortReal anAdvanceX = 0;
|| aCharThis == '\a' // BEL (alarm) if (IsCommandSymbol (aCharThis))
|| aCharThis == '\f' // FF (form feed) NP (new page)
|| aCharThis == '\b' // BS (backspace)
|| aCharThis == '\v') // VT (vertical tab)
{ {
continue; // skip unsupported carriage control codes continue; // skip unsupported carriage control codes
} }
@@ -136,79 +141,66 @@ void Font_TextFormatter::Append (const NCollection_String& theString,
{ {
aSymbolsCounter = 0; aSymbolsCounter = 0;
myNewLines.Append (myPen.x()); myNewLines.Append (myPen.x());
continue; // will be processed on second pass anAdvanceX = 0; // the symbol has null width
} }
else if (aCharThis == ' ') else if (aCharThis == ' ')
{ {
++aSymbolsCounter; ++aSymbolsCounter;
myPen.x() += theFont.AdvanceX (' ', aCharNext); anAdvanceX = theFont.AdvanceX (' ', aCharNext);
continue;
} }
else if (aCharThis == '\t') else if (aCharThis == '\t')
{ {
const Standard_Integer aSpacesNum = (myTabSize - (aSymbolsCounter - 1) % myTabSize); const Standard_Integer aSpacesNum = (myTabSize - (aSymbolsCounter - 1) % myTabSize);
myPen.x() += theFont.AdvanceX (' ', aCharNext) * Standard_ShortReal(aSpacesNum); anAdvanceX = theFont.AdvanceX (' ', aCharNext) * Standard_ShortReal(aSpacesNum);
aSymbolsCounter += aSpacesNum; aSymbolsCounter += aSpacesNum;
continue;
} }
else
anAdvanceX = theFont.AdvanceX (aCharThis, aCharNext);
++aSymbolsCounter; ++aSymbolsCounter;
myCorners.Append (myPen); myCorners.Append (myPen);
myPen.x() += anAdvanceX;
myPen.x() += theFont.AdvanceX (aCharThis, aCharNext); myMaxSymbolWidth = Max (myMaxSymbolWidth, anAdvanceX);
++myRectsNb;
} }
myLastSymbolWidth = myPen.x() - myCorners.Last().x();
} }
// ======================================================================= // =======================================================================
// function : newLine // function : newLine
// purpose : // purpose :
// ======================================================================= // =======================================================================
void Font_TextFormatter::newLine (const Standard_Integer theLastRect) void Font_TextFormatter::newLine (const Standard_Integer theLastRect,
const Standard_ShortReal theMaxLineWidth)
{ {
if (myRectLineStart >= myRectsNb) Standard_Integer aFirstCornerId = myRectLineStart;
Standard_Integer aLastCornerId = theLastRect;
if (aFirstCornerId >= myCorners.Length())
{ {
++myLinesNb; ++myLinesNb;
myPenCurrLine -= myLineSpacing; myPenCurrLine -= myLineSpacing;
return; return;
} }
Standard_ShortReal aXMin = BottomLeft (aFirstCornerId).x();
Font_Rect aBndBox;
BndBox (aLastCornerId, aBndBox);
Standard_ShortReal aXMax = aBndBox.Right;
myMoveVec.y() = myPenCurrLine; myMoveVec.y() = myPenCurrLine;
switch (myAlignX) switch (myAlignX)
{ {
default: default:
case Graphic3d_HTA_LEFT: case Graphic3d_HTA_LEFT: myMoveVec.x() = -aXMin; break;
{ case Graphic3d_HTA_RIGHT: myMoveVec.x() = -aXMin + (theMaxLineWidth - (aXMax - aXMin)) - theMaxLineWidth; break;
myMoveVec.x() = (myNewLineNb > 0) ? -myNewLines.Value (myNewLineNb - 1) : 0.0f; case Graphic3d_HTA_CENTER: myMoveVec.x() = -aXMin + 0.5f * (theMaxLineWidth - (aXMax - aXMin)) - 0.5f * theMaxLineWidth; break;
break;
}
case Graphic3d_HTA_RIGHT:
{
myMoveVec.x() = (myNewLineNb < myNewLines.Length())
? -myNewLines.Value (myNewLineNb)
: -myPen.x();
break;
}
case Graphic3d_HTA_CENTER:
{
const Standard_ShortReal aFrom = (myNewLineNb > 0)
? myNewLines.Value (myNewLineNb - 1)
: 0.0f;
const Standard_ShortReal aTo = (myNewLineNb < myNewLines.Length())
? myNewLines.Value (myNewLineNb)
: myPen.x();
myMoveVec.x() = -0.5f * (aFrom + aTo);
break;
}
} }
move (myCorners, myMoveVec, myRectLineStart, theLastRect); move (myCorners, myMoveVec, myRectLineStart, theLastRect);
++myLinesNb; ++myLinesNb;
myPenCurrLine -= myLineSpacing; myPenCurrLine -= myLineSpacing;
myRectLineStart = myRectWordStart = theLastRect + 1; myRectLineStart = theLastRect + 1;
} }
// ======================================================================= // =======================================================================
@@ -217,13 +209,13 @@ void Font_TextFormatter::newLine (const Standard_Integer theLastRect)
// ======================================================================= // =======================================================================
void Font_TextFormatter::Format() void Font_TextFormatter::Format()
{ {
if (myRectsNb == 0 || myIsFormatted) if (myCorners.Length() == 0 || myIsFormatted)
{ {
return; return;
} }
myIsFormatted = true; myIsFormatted = true;
myLinesNb = myRectLineStart = myRectWordStart = 0; myLinesNb = myRectLineStart = 0;
myBndTop = 0.0f; myBndTop = 0.0f;
myBndWidth = 0.0f; myBndWidth = 0.0f;
myMoveVec.x() = myMoveVec.y() = 0.0f; myMoveVec.x() = myMoveVec.y() = 0.0f;
@@ -232,59 +224,56 @@ void Font_TextFormatter::Format()
myPenCurrLine = -myAscender; myPenCurrLine = -myAscender;
Standard_Integer aRectIter = 0; Standard_Integer aRectIter = 0;
myNewLineNb = 0; myNewLineNb = 0;
Standard_ShortReal aMaxLineWidth = -1.0f;
for (NCollection_Utf8Iter anIter = myString.Iterator(); *anIter != 0; ++anIter)
{
const Standard_Utf32Char aCharThis = *anIter;
if (aCharThis == '\x0D' // CR (carriage return)
|| aCharThis == '\a' // BEL (alarm)
|| aCharThis == '\f' // FF (form feed) NP (new page)
|| aCharThis == '\b' // BS (backspace)
|| aCharThis == '\v') // VT (vertical tab)
{
continue; // skip unsupported carriage control codes
}
else if (aCharThis == '\x0A') // LF (line feed, new line)
{
// calculate max line width
if (myNewLineNb == 0)
{
aMaxLineWidth = myNewLines.Value(0);
}
else
{
aMaxLineWidth = Max (aMaxLineWidth, myNewLines.Value (myNewLineNb) - myNewLines.Value (myNewLineNb - 1));
}
const Standard_Integer aLastRect = aRectIter - 1; // last rect on current line Standard_ShortReal aMaxLineWidth = Wrapping();
newLine (aLastRect); if (HasWrapping())
{
aMaxLineWidth = Max (aMaxLineWidth, MaximumSymbolWidth()); // it is not possible to wrap less than symbol width
}
else
{
if (myNewLines.IsEmpty()) // If only one line
aMaxLineWidth = myPen.x();
else
{
for (int aLineIt = 0; aLineIt < myNewLines.Size(); aLineIt++)
aMaxLineWidth = Max (aMaxLineWidth, LineWidth (aLineIt));
aMaxLineWidth = Max (aMaxLineWidth, LineWidth (myNewLines.Size())); // processing the last line also
}
}
for (Font_TextFormatter::Iterator aFormatterIt (*this);
aFormatterIt .More(); aFormatterIt .Next())
{
const Standard_Utf32Char aCharThis = aFormatterIt.Symbol();
aRectIter = aFormatterIt.SymbolPosition();
if (aCharThis == '\x0A') // LF (line feed, new line)
{
const Standard_Integer aLastRect = aRectIter; // last rect on current line
newLine (aLastRect, aMaxLineWidth);
++myNewLineNb; ++myNewLineNb;
continue; continue;
} }
else if (aCharThis == ' ' else if (HasWrapping()) // wrap lines longer than maximum width
|| aCharThis == '\t')
{ {
myRectWordStart = aRectIter; Standard_Integer aFirstCornerId = myRectLineStart;
continue;
Font_Rect aBndBox;
BndBox (aRectIter, aBndBox);
const Standard_ShortReal aNextXPos = aBndBox.Right - BottomLeft (aFirstCornerId).x();
if (aNextXPos > aMaxLineWidth) // wrap the line and do processing of the symbol
{
const Standard_Integer aLastRect = aRectIter - 1; // last rect on current line
newLine (aLastRect, aMaxLineWidth);
}
} }
++aRectIter;
}
// If only one line
if (aMaxLineWidth < 0.0f)
{
aMaxLineWidth = myPen.x();
}
else // Consider last line
{
aMaxLineWidth = Max (aMaxLineWidth, myPen.x() - myNewLines.Value (myNewLineNb - 1));
} }
myBndWidth = aMaxLineWidth; myBndWidth = aMaxLineWidth;
// move last line // move last line
newLine (myRectsNb - 1); newLine (myCorners.Length() - 1, aMaxLineWidth);
// apply vertical alignment style // apply vertical alignment style
if (myAlignY == Graphic3d_VTA_BOTTOM) if (myAlignY == Graphic3d_VTA_BOTTOM)
@@ -302,6 +291,126 @@ void Font_TextFormatter::Format()
if (myAlignY != Graphic3d_VTA_TOP) if (myAlignY != Graphic3d_VTA_TOP)
{ {
moveY (myCorners, myBndTop, 0, myRectsNb - 1); moveY (myCorners, myBndTop, 0, myCorners.Length() - 1);
} }
} }
// =======================================================================
// function : BndBox
// purpose :
// =======================================================================
Standard_Boolean Font_TextFormatter::BndBox (const Standard_Integer theIndex, Font_Rect& theBndBox) const
{
if (theIndex < 0 || theIndex >= Corners().Size())
return Standard_False;
const NCollection_Vec2<Standard_ShortReal>& aLeftCorner = BottomLeft (theIndex);
if (theIndex + 1 < myCorners.Length()) // not the last symbol
{
const NCollection_Vec2<Standard_ShortReal>& aNextLeftCorner = BottomLeft (theIndex + 1);
theBndBox.Left = aLeftCorner.x();
theBndBox.Bottom = aLeftCorner.y();
theBndBox.Top = theBndBox.Bottom + myLineSpacing;
if (Abs (aLeftCorner.y() - aNextLeftCorner.y()) < Precision::Confusion()) // in the same row
{
theBndBox.Right = aNextLeftCorner.x();
}
else
{
// the next symbol is on the next row either by '\n' or by wrapping
Standard_ShortReal aLineWidth = LineWidth (LineIndex (theIndex));
theBndBox.Left = aLeftCorner.x();
switch (myAlignX)
{
case Graphic3d_HTA_LEFT: theBndBox.Right = aLineWidth; break;
case Graphic3d_HTA_RIGHT: theBndBox.Right = myBndWidth; break;
case Graphic3d_HTA_CENTER: theBndBox.Right = 0.5f * (myBndWidth + aLineWidth); break;
}
}
}
else // the last symbol
{
theBndBox.Left = aLeftCorner.x();
theBndBox.Right = aLeftCorner.x() + myLastSymbolWidth;
theBndBox.Bottom = aLeftCorner.y();
theBndBox.Top = theBndBox.Bottom + myLineSpacing;
}
return Standard_True;
}
// =======================================================================
// function : IsLFSymbol
// purpose :
// =======================================================================
Standard_Boolean Font_TextFormatter::IsLFSymbol (const Standard_Integer theIndex) const
{
Font_Rect aBndBox;
if (!BndBox (theIndex, aBndBox))
return Standard_False;
return Abs (aBndBox.Right - aBndBox.Left) < Precision::Confusion();
}
// =======================================================================
// function : FirstPosition
// purpose :
// =======================================================================
Standard_ShortReal Font_TextFormatter::FirstPosition() const
{
switch (myAlignX)
{
default:
case Graphic3d_HTA_LEFT: return 0; break;
case Graphic3d_HTA_RIGHT: return myBndWidth; break;
case Graphic3d_HTA_CENTER: return 0.5f * myBndWidth; break;
}
}
// =======================================================================
// function : LinePositionIndex
// purpose :
// =======================================================================
Standard_Integer Font_TextFormatter::LinePositionIndex (const Standard_Integer theIndex) const
{
Standard_Integer anIndex = 0;
Standard_ShortReal anIndexHeight = BottomLeft (theIndex).y();
for (Standard_Integer aPrevIndex = theIndex-1; aPrevIndex >= 0; aPrevIndex--)
{
if (BottomLeft (aPrevIndex).y() > anIndexHeight)
break;
anIndex++;
}
return anIndex;
}
// =======================================================================
// function : LineIndex
// purpose :
// =======================================================================
Standard_Integer Font_TextFormatter::LineIndex (const Standard_Integer theIndex) const
{
if (myLineSpacing < 0.0f)
return 0;
return (Standard_Integer)Abs((BottomLeft (theIndex).y() + myAscender) / myLineSpacing);
}
// =======================================================================
// function : LineWidth
// purpose :
// =======================================================================
Standard_ShortReal Font_TextFormatter::LineWidth (const Standard_Integer theIndex) const
{
if (theIndex < 0)
return 0;
if (theIndex < myNewLines.Length())
return theIndex == 0 ? myNewLines[0] : myNewLines[theIndex] - myNewLines[theIndex -1];
if (theIndex == myNewLines.Length()) // the last line
return theIndex == 0 ? myPen.x() : myPen.x() - myNewLines[theIndex -1];
return 0;
}

View File

@@ -25,10 +25,111 @@
class Font_FTFont; class Font_FTFont;
DEFINE_STANDARD_HANDLE(Font_TextFormatter, Standard_Transient)
//! This class intended to prepare formatted text. //! This class intended to prepare formatted text.
class Font_TextFormatter //! Case of the formatter using:
//! Handle(Font_TextFormatter) aFormatter = new Font_TextFormatter();
//! aFormatter->Append(text_1, aFont1);
//! aFormatter->Append(text_2, aFont2);
//! aFormatter->Format();
//!
//! Example of corners indices for the text:
//! "row_1\n" - 0-5
//! "\n" - 6
//! "\n" - 7
//! "row_2\n" - 8-13
//! Processing of \n symbol:
//! - it is placed on the row where it appears
//! - BndBox for \n has zero width
//! - if the last symbol is \n, use LastBndBox() to get position on the next row
//!
//! Pay attention that fonts should have the same LineSpacing value
//!
class Font_TextFormatter : public Standard_Transient
{ {
public: public:
//! Iteration filter flags. Command symbols are skipped with any filter.
enum IterationFilter
{
IterationFilter_None = 0x0000, //!< no filter
IterationFilter_ExcludeInvisible = 0x0002, //!< exclude ' ', '\t', '\n'
};
//! Iterator through light sources.
class Iterator
{
public:
//! Constructor with initialization.
Iterator (const Font_TextFormatter& theFormatter,
IterationFilter theFilter = IterationFilter_None)
: myFilter (theFilter), myIter (theFormatter.myString.Iterator())
{
mySymbolPosition = readNextSymbol (-1, mySymbolChar);
mySymbolNext = readNextSymbol (mySymbolPosition, mySymbolCharNext);
}
//! Returns TRUE if iterator points to a valid item.
Standard_Boolean More() const { return mySymbolPosition >= 0; }
//! Returns TRUE if next item exists
Standard_Boolean HasNext() const { return mySymbolNext >= 0; }
//! Returns current symbol.
Standard_Utf32Char Symbol() const { return mySymbolChar; }
//! Returns the next symbol if exists.
Standard_Utf32Char SymbolNext() const { return mySymbolCharNext; }
//! Returns current symbol position.
Standard_Integer SymbolPosition() const { return mySymbolPosition; }
//! Returns the next symbol position.
Standard_Integer SymbolPositionNext() const { return mySymbolNext; }
//! Moves to the next item.
void Next()
{
mySymbolPosition = mySymbolNext;
mySymbolChar = mySymbolCharNext;
mySymbolNext = readNextSymbol (mySymbolPosition, mySymbolCharNext);
}
protected:
Standard_Integer readNextSymbol (const Standard_Integer aSymbolStartingFrom, Standard_Utf32Char& theSymbolChar)
{
Standard_Integer aNextSymbol = aSymbolStartingFrom;
for (; *myIter != 0; ++myIter)
{
const Standard_Utf32Char aCharCurr = *myIter;
if (Font_TextFormatter::IsCommandSymbol (aCharCurr))
{
continue; // skip unsupported carriage control codes
}
aNextSymbol++;
if ((myFilter & IterationFilter_ExcludeInvisible) != 0)
{
if (aCharCurr == '\x0A'|| // LF (line feed, new line)
aCharCurr == ' ' ||
aCharCurr == '\t')
continue;
}
++myIter;
theSymbolChar = aCharCurr;
return aNextSymbol; // found the first next, not command and not filtered symbol
}
return -1; // the next symbol is not found
}
protected:
IterationFilter myFilter; //!< possibility to filter not-necessary symbols
NCollection_Utf8Iter myIter; //!< the next symbol iterator value over the text formatter string
Standard_Integer mySymbolPosition; //!< the current position
Standard_Utf32Char mySymbolChar; //!< the current symbol
Standard_Integer mySymbolNext; //!< position of the next symbol in iterator, if zero, the iterator is finished
Standard_Utf32Char mySymbolCharNext; //!< the current symbol
};
//! Default constructor. //! Default constructor.
Standard_EXPORT Font_TextFormatter(); Standard_EXPORT Font_TextFormatter();
@@ -49,16 +150,32 @@ public:
Standard_EXPORT void Format(); Standard_EXPORT void Format();
//! Returns specific glyph rectangle. //! Returns specific glyph rectangle.
inline const NCollection_Vec2<Standard_ShortReal>& TopLeft (const Standard_Integer theIndex) const inline const NCollection_Vec2<Standard_ShortReal>& BottomLeft (const Standard_Integer theIndex) const
{ { return myCorners.Value (theIndex); }
return myCorners.Value (theIndex);
}
//! Returns current rendering string. //! Returns symbol bounding box
inline const NCollection_String& String() const //! @param bounding box.
{ Standard_EXPORT Standard_Boolean BndBox (const Standard_Integer theIndex, Font_Rect& theBndBox) const;
return myString;
} //! Returns the line height
//! \param theIndex a line index, obtained by LineIndex()
Standard_ShortReal LineHeight (const Standard_Integer theIndex) const
{ return theIndex == 0 ? myAscender : myLineSpacing; }
//!< Returns width of a line
Standard_EXPORT Standard_ShortReal LineWidth (const Standard_Integer theIndex) const;
//! Returns true if the symbol by the index is '\n'. The width of the symbol is zero.
Standard_EXPORT Standard_Boolean IsLFSymbol (const Standard_Integer theIndex) const;
//! Returns position of the first symbol in a line using alignment
Standard_EXPORT Standard_ShortReal FirstPosition() const;
//! Returns column index of the corner index in the current line
Standard_EXPORT Standard_Integer LinePositionIndex (const Standard_Integer theIndex) const;
//! Returns row index of the corner index among text lines
Standard_EXPORT Standard_Integer LineIndex (const Standard_Integer theIndex) const;
//! Returns tab size. //! Returns tab size.
inline Standard_Integer TabSize() const inline Standard_Integer TabSize() const
@@ -66,6 +183,21 @@ public:
return myTabSize; return myTabSize;
} }
//!< Returns horizontal alignment style
Graphic3d_HorizontalTextAlignment HorizontalTextAlignment() const { return myAlignX; }
//!< Returns vertical alignment style
Graphic3d_VerticalTextAlignment VerticalTextAlignment() const { return myAlignY; }
//!< Sets text wrapping width, zero means that the text is not bounded by width
void SetWrapping (const Standard_ShortReal theWidth) { myWrappingWidth = theWidth; }
//!< Returns text maximum width, zero means that the text is not bounded by width
Standard_Boolean HasWrapping() const { return myWrappingWidth > 0; }
//!< Returns text maximum width, zero means that the text is not bounded by width
Standard_ShortReal Wrapping() const { return myWrappingWidth; }
//! @return width of formatted text. //! @return width of formatted text.
inline Standard_ShortReal ResultWidth() const inline Standard_ShortReal ResultWidth() const
{ {
@@ -78,6 +210,9 @@ public:
return myLineSpacing * Standard_ShortReal(myLinesNb); return myLineSpacing * Standard_ShortReal(myLinesNb);
} }
//!< @return maximum width of the text symbol
inline Standard_ShortReal MaximumSymbolWidth() const { return myMaxSymbolWidth; }
//! @param bounding box. //! @param bounding box.
inline void BndBox (Font_Rect& theBndBox) const inline void BndBox (Font_Rect& theBndBox) const
{ {
@@ -98,16 +233,40 @@ public:
theBndBox.Bottom = theBndBox.Top - myLineSpacing * Standard_ShortReal(myLinesNb); theBndBox.Bottom = theBndBox.Top - myLineSpacing * Standard_ShortReal(myLinesNb);
} }
//!< Returns internal container of the top left corners of a formatted rectangles.
const NCollection_Vector < NCollection_Vec2<Standard_ShortReal> >& Corners() const { return myCorners; }
const NCollection_Vector<Standard_ShortReal>& NewLines() const { return myNewLines; }
//!< Returns true if the symbol is CR, BEL, FF, NP, BS or VT
static inline Standard_Boolean IsCommandSymbol (const Standard_Utf32Char& theSymbol)
{
if (theSymbol == '\x0D' // CR (carriage return)
|| theSymbol == '\a' // BEL (alarm)
|| theSymbol == '\f' // FF (form feed) NP (new page)
|| theSymbol == '\b' // BS (backspace)
|| theSymbol == '\v') // VT (vertical tab)
return Standard_True;
return Standard_False;
}
DEFINE_STANDARD_RTTIEXT (Font_TextFormatter, Standard_Transient)
protected: //! @name class auxiliary methods protected: //! @name class auxiliary methods
//! Move glyphs on the current line to correct position. //! Move glyphs on the current line to correct position.
Standard_EXPORT void newLine (const Standard_Integer theLastRect); Standard_EXPORT void newLine (const Standard_Integer theLastRect,
const Standard_ShortReal theMaxLineWidth);
protected: //! @name configuration protected: //! @name configuration
Graphic3d_HorizontalTextAlignment myAlignX; //!< horizontal alignment style Graphic3d_HorizontalTextAlignment myAlignX; //!< horizontal alignment style
Graphic3d_VerticalTextAlignment myAlignY; //!< vertical alignment style Graphic3d_VerticalTextAlignment myAlignY; //!< vertical alignment style
Standard_Integer myTabSize; //!< horizontal tabulation width (number of space symbols) Standard_Integer myTabSize; //!< horizontal tabulation width (number of space symbols)
Standard_ShortReal myWrappingWidth; //!< text is wrapped by the width if it is defined (more 0)
Standard_ShortReal myLastSymbolWidth; //!< width of the last symbol
Standard_ShortReal myMaxSymbolWidth; //!< maximum symbol width of the formatter string
protected: //! @name input data protected: //! @name input data
@@ -116,18 +275,16 @@ protected: //! @name input data
myPen; //!< current pen position myPen; //!< current pen position
NCollection_Vector < NCollection_Vec2<Standard_ShortReal> > NCollection_Vector < NCollection_Vec2<Standard_ShortReal> >
myCorners; //!< The top left corners of a formatted rectangles. myCorners; //!< The top left corners of a formatted rectangles.
Standard_Integer myRectsNb; //!< rectangles number
NCollection_Vector<Standard_ShortReal> NCollection_Vector<Standard_ShortReal>
myNewLines; //!< position at LF myNewLines; //!< position at LF
Standard_ShortReal myLineSpacing; //!< line spacing (computed as maximum of all fonts involved in text formatting) Standard_ShortReal myLineSpacing; //!< line spacing (computed as maximum of all fonts involved in text formatting)
Standard_ShortReal myAscender; //!< Standard_ShortReal myAscender; //!< line spacing for the first line
bool myIsFormatted; //!< formatting state bool myIsFormatted; //!< formatting state
protected: //! @name temporary variables for formatting routines protected: //! @name temporary variables for formatting routines
Standard_Integer myLinesNb; //!< overall (new)lines number (including splitting by width limit) Standard_Integer myLinesNb; //!< overall (new)lines number (including splitting by width limit)
Standard_Integer myRectLineStart; //!< id of first rectangle on the current line Standard_Integer myRectLineStart; //!< id of first rectangle on the current line
Standard_Integer myRectWordStart; //!< id of first rectangle in the current word
Standard_Integer myNewLineNb; Standard_Integer myNewLineNb;
Standard_ShortReal myPenCurrLine; //!< current baseline position Standard_ShortReal myPenCurrLine; //!< current baseline position
@@ -135,6 +292,8 @@ protected: //! @name temporary variables for formatting routines
Standard_ShortReal myBndWidth; Standard_ShortReal myBndWidth;
NCollection_Vec2<Standard_ShortReal> NCollection_Vec2<Standard_ShortReal>
myMoveVec; //!< local variable myMoveVec; //!< local variable
friend Iterator;
}; };
#endif // Font_TextFormatter_Header #endif // Font_TextFormatter_Header

View File

@@ -1,3 +1,5 @@
Graphic3d.cxx
Graphic3d.hxx
Graphic3d_AlphaMode.hxx Graphic3d_AlphaMode.hxx
Graphic3d_ArrayFlags.hxx Graphic3d_ArrayFlags.hxx
Graphic3d_ArrayOfPoints.hxx Graphic3d_ArrayOfPoints.hxx
@@ -15,6 +17,8 @@ Graphic3d_Aspects.cxx
Graphic3d_Aspects.hxx Graphic3d_Aspects.hxx
Graphic3d_AspectFillArea3d.cxx Graphic3d_AspectFillArea3d.cxx
Graphic3d_AspectFillArea3d.hxx Graphic3d_AspectFillArea3d.hxx
Graphic3d_AspectFillCapping.cxx
Graphic3d_AspectFillCapping.hxx
Graphic3d_AspectLine3d.cxx Graphic3d_AspectLine3d.cxx
Graphic3d_AspectLine3d.hxx Graphic3d_AspectLine3d.hxx
Graphic3d_AspectMarker3d.cxx Graphic3d_AspectMarker3d.cxx
@@ -110,6 +114,7 @@ Graphic3d_NameOfTexture2D.hxx
Graphic3d_NameOfTextureEnv.hxx Graphic3d_NameOfTextureEnv.hxx
Graphic3d_NameOfTexturePlane.hxx Graphic3d_NameOfTexturePlane.hxx
Graphic3d_NMapOfTransient.hxx Graphic3d_NMapOfTransient.hxx
Graphic3d_PolygonOffset.cxx
Graphic3d_PolygonOffset.hxx Graphic3d_PolygonOffset.hxx
Graphic3d_PriorityDefinitionError.hxx Graphic3d_PriorityDefinitionError.hxx
Graphic3d_RenderingMode.hxx Graphic3d_RenderingMode.hxx

521
src/Graphic3d/Graphic3d.cxx Normal file
View File

@@ -0,0 +1,521 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Graphic3d.hxx>
#include <TCollection_AsciiString.hxx>
namespace
{
static Standard_CString Graphic3d_Table_PrintZLayerId[6] =
{
"UNKNOWN", "DEFAULT", "TOP", "TOPMOST", "TOP_OSD", "BOT_OSD"
};
static Standard_CString Graphic3d_Table_PrintHorizontalTextAlignment[3] =
{
"LEFT", "CENTER", "RIGHT"
};
static Standard_CString Graphic3d_Table_PrintVerticalTextAlignment[4] =
{
"BOTTOM", "CENTER", "TOP", "TOP_FIRST_LINE"
};
static Standard_CString Graphic3d_Table_PrintTextPath[4] =
{
"UP", "DOWN", "LEFT", "RIGHT"
};
static Standard_CString Graphic3d_Table_PrintAlphaMode[4] =
{
"BLEND_AUTO", "OPAQUE", "MASK", "BLEND"
};
static Standard_CString Graphic3d_Table_PrintTypeOfShadingModel[5] =
{
"DEFAULT", "UNLIT", "FACET", "VERTEX", "FRAGMENT"
};
static Standard_CString Graphic3d_Table_PrintTypeOfAttribute[5] =
{
"POS", "NORM", "UV", "COLOR", "CUSTOM"
};
static Standard_CString Graphic3d_Table_PrintTypeOfData[7] =
{
"USHORT", "UINT", "VEC2", "VEC3", "VEC4", "VEC4UB", "FLOAT"
};
static Standard_CString Graphic3d_Table_PrintTransModeFlags[6] =
{
"NONE", "ZOOM_PERS", "ROTATE_PERS", "TRIEDRON_PERS", "2d", "ZOOM_ROTATE_PERS"
};
static Standard_CString Graphic3d_Table_PrintCameraProjection[5] =
{
"ORTHOGRAPHIC", "PERSPECTIVE", "STEREO", "MONOLEFTEYE", "MONORIGHTEYE"
};
static Standard_CString Graphic3d_Table_PrintFocusType[2] =
{
"ABSOLUTE", "RELATIVE"
};
static Standard_CString Graphic3d_Table_PrintIODType[2] =
{
"ABSOLUTE", "RELATIVE"
};
static Standard_CString Graphic3d_Table_PrintNameOfMaterial[26] =
{
"BRASS", "BRONZE", "COPPER", "GOLD", "PEWTER", "PLASTER", "PLASTIC", "SILVER", // 8
"STEEL", "STONE", "SHINY_PLASTIC", "SATIN", "METALIZED", "NEON_GNC", "CHROME", // 7
"ALUMINIUM", "OBSIDIAN", "NEON_PHC", "JADE", "CHARCOAL", "WATER", "GLASS", // 7
"DIAMOND", "TRANSPARENT", "DEFAULT", "UserDefined" // 4
};
}
//=======================================================================
//function : ZLayerIdToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::ZLayerIdToString (Graphic3d_ZLayerId theType)
{
switch (theType)
{
case Graphic3d_ZLayerId_UNKNOWN: return Graphic3d_Table_PrintZLayerId[0]; break;
case Graphic3d_ZLayerId_Default: return Graphic3d_Table_PrintZLayerId[1]; break;
case Graphic3d_ZLayerId_Top: return Graphic3d_Table_PrintZLayerId[2]; break;
case Graphic3d_ZLayerId_Topmost: return Graphic3d_Table_PrintZLayerId[3]; break;
case Graphic3d_ZLayerId_TopOSD: return Graphic3d_Table_PrintZLayerId[4]; break;
case Graphic3d_ZLayerId_BotOSD: return Graphic3d_Table_PrintZLayerId[5]; break;
}
return "";
}
//=======================================================================
//function : ZLayerIdFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::ZLayerIdFromString (Standard_CString theTypeString,
Graphic3d_ZLayerId& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= 5; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintZLayerId[aTypeIter];
if (aName == aTypeName)
{
switch (aTypeIter)
{
case 0: theType = Graphic3d_ZLayerId_UNKNOWN; break;
case 1: theType = Graphic3d_ZLayerId_Default; break;
case 2: theType = Graphic3d_ZLayerId_Top; break;
case 3: theType = Graphic3d_ZLayerId_Topmost; break;
case 4: theType = Graphic3d_ZLayerId_TopOSD; break;
case 5: theType = Graphic3d_ZLayerId_BotOSD; break;
}
return Standard_True;
}
}
if (aName.IsIntegerValue())
{
theType = aName.IntegerValue();
return Standard_True;
}
return Standard_False;
}
//=======================================================================
//function : HorizontalTextAlignmentToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::HorizontalTextAlignmentToString (Graphic3d_HorizontalTextAlignment theType)
{
return Graphic3d_Table_PrintHorizontalTextAlignment[theType];
}
//=======================================================================
//function : HorizontalTextAlignmentFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::HorizontalTextAlignmentFromString (Standard_CString theTypeString,
Graphic3d_HorizontalTextAlignment& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_HTA_LEFT; aTypeIter <= Graphic3d_HTA_RIGHT; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintHorizontalTextAlignment[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_HorizontalTextAlignment (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : VerticalTextAlignmentToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::VerticalTextAlignmentToString (Graphic3d_VerticalTextAlignment theType)
{
return Graphic3d_Table_PrintVerticalTextAlignment[theType];
}
//=======================================================================
//function : VerticalTextAlignmentFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::VerticalTextAlignmentFromString (Standard_CString theTypeString,
Graphic3d_VerticalTextAlignment& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_VTA_BOTTOM; aTypeIter <= Graphic3d_VTA_TOPFIRSTLINE; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintVerticalTextAlignment[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_VerticalTextAlignment (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TextPathToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::TextPathToString (Graphic3d_TextPath theType)
{
return Graphic3d_Table_PrintTextPath[theType];
}
//=======================================================================
//function : TextPathFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::TextPathFromString (Standard_CString theTypeString,
Graphic3d_TextPath& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_TP_UP; aTypeIter <= Graphic3d_TP_RIGHT; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintTextPath[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_TextPath (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : AlphaModeToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::AlphaModeToString (Graphic3d_AlphaMode theType)
{
return Graphic3d_Table_PrintAlphaMode[theType + 1];
}
//=======================================================================
//function : AlphaModeFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::AlphaModeFromString (Standard_CString theTypeString,
Graphic3d_AlphaMode& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_AlphaMode_BlendAuto; aTypeIter <= Graphic3d_AlphaMode_Blend; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintAlphaMode[aTypeIter + 1];
if (aName == aTypeName)
{
theType = Graphic3d_AlphaMode (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfShadingModelToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::TypeOfShadingModelToString (Graphic3d_TypeOfShadingModel theType)
{
return Graphic3d_Table_PrintTypeOfShadingModel[theType + 1];
}
//=======================================================================
//function : TypeOfShadingModelFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::TypeOfShadingModelFromString (Standard_CString theTypeString,
Graphic3d_TypeOfShadingModel& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_TOSM_DEFAULT; aTypeIter <= Graphic3d_TOSM_FRAGMENT; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintTypeOfShadingModel[aTypeIter + 1];
if (aName == aTypeName)
{
theType = Graphic3d_TypeOfShadingModel (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfAttributeToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::TypeOfAttributeToString (Graphic3d_TypeOfAttribute theType)
{
return Graphic3d_Table_PrintTypeOfAttribute[theType];
}
//=======================================================================
//function : TypeOfAttributeFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::TypeOfAttributeFromString (Standard_CString theTypeString,
Graphic3d_TypeOfAttribute& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_TOA_POS; aTypeIter <= Graphic3d_TOA_CUSTOM; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintTypeOfAttribute[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_TypeOfAttribute (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TypeOfDataToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::TypeOfDataToString (Graphic3d_TypeOfData theType)
{
return Graphic3d_Table_PrintTypeOfData[theType];
}
//=======================================================================
//function : TypeOfDataFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::TypeOfDataFromString (Standard_CString theTypeString,
Graphic3d_TypeOfData& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_TOD_USHORT; aTypeIter <= Graphic3d_TOD_FLOAT; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintTypeOfData[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_TypeOfData (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : TransModeFlagsToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::TransModeFlagsToString (Graphic3d_TransModeFlags theType)
{
switch (theType)
{
case Graphic3d_TMF_None: return Graphic3d_Table_PrintTransModeFlags[0]; break;
case Graphic3d_TMF_ZoomPers: return Graphic3d_Table_PrintTransModeFlags[1]; break;
case Graphic3d_TMF_RotatePers: return Graphic3d_Table_PrintTransModeFlags[2]; break;
case Graphic3d_TMF_TriedronPers: return Graphic3d_Table_PrintTransModeFlags[3]; break;
case Graphic3d_TMF_2d: return Graphic3d_Table_PrintTransModeFlags[4]; break;
case Graphic3d_TMF_ZoomRotatePers: return Graphic3d_Table_PrintTransModeFlags[5]; break;
}
return "";
}
//=======================================================================
//function : ZLayerIdFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::TransModeFlagsFromString (Standard_CString theTypeString,
Graphic3d_TransModeFlags& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = 0; aTypeIter <= 5; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintTransModeFlags[aTypeIter];
if (aName == aTypeName)
{
switch (aTypeIter)
{
case 0: theType = Graphic3d_TMF_None; break;
case 1: theType = Graphic3d_TMF_ZoomPers; break;
case 2: theType = Graphic3d_TMF_RotatePers; break;
case 3: theType = Graphic3d_TMF_TriedronPers; break;
case 4: theType = Graphic3d_TMF_2d; break;
case 5: theType = Graphic3d_TMF_ZoomRotatePers; break;
}
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : CameraProjectionToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::CameraProjectionToString (Graphic3d_Camera::Projection theType)
{
return Graphic3d_Table_PrintCameraProjection[theType];
}
//=======================================================================
//function : CameraProjectionFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::CameraProjectionFromString (Standard_CString theTypeString,
Graphic3d_Camera::Projection& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_Camera::Projection_Orthographic;
aTypeIter <= Graphic3d_Camera::Projection_MonoRightEye; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintCameraProjection[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_Camera::Projection (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : CameraFocusTypeToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::CameraFocusTypeToString (Graphic3d_Camera::FocusType theType)
{
return Graphic3d_Table_PrintFocusType[theType];
}
//=======================================================================
//function : FocusTypeFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::CameraFocusTypeFromString (Standard_CString theTypeString,
Graphic3d_Camera::FocusType& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_Camera::FocusType_Absolute;
aTypeIter <= Graphic3d_Camera::FocusType_Relative; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintFocusType[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_Camera::FocusType (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : CameraIODTypeToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::CameraIODTypeToString (Graphic3d_Camera::IODType theType)
{
return Graphic3d_Table_PrintIODType[theType];
}
//=======================================================================
//function : IODTypeFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::CameraIODTypeFromString (Standard_CString theTypeString,
Graphic3d_Camera::IODType& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_Camera::IODType_Absolute;
aTypeIter <= Graphic3d_Camera::IODType_Relative; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintIODType[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_Camera::IODType (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : NameOfMaterialToString
//purpose :
//=======================================================================
Standard_CString Graphic3d::NameOfMaterialToString (Graphic3d_NameOfMaterial theType)
{
return Graphic3d_Table_PrintNameOfMaterial[theType];
}
//=======================================================================
//function : NameOfMaterialFromString
//purpose :
//=======================================================================
Standard_Boolean Graphic3d::NameOfMaterialFromString (Standard_CString theTypeString,
Graphic3d_NameOfMaterial& theType)
{
TCollection_AsciiString aName (theTypeString);
aName.UpperCase();
for (Standard_Integer aTypeIter = Graphic3d_TOD_USHORT; aTypeIter <= Graphic3d_TOD_FLOAT; ++aTypeIter)
{
Standard_CString aTypeName = Graphic3d_Table_PrintNameOfMaterial[aTypeIter];
if (aName == aTypeName)
{
theType = Graphic3d_NameOfMaterial (aTypeIter);
return Standard_True;
}
}
return Standard_False;
}

327
src/Graphic3d/Graphic3d.hxx Normal file
View File

@@ -0,0 +1,327 @@
// Copyright (c) 2018 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Graphic3d_HeaderFile
#define _Graphic3d_HeaderFile
#include <Graphic3d_AlphaMode.hxx>
#include <Graphic3d_Buffer.hxx>
#include <Graphic3d_Camera.hxx>
#include <Graphic3d_HorizontalTextAlignment.hxx>
#include <Graphic3d_VerticalTextAlignment.hxx>
#include <Graphic3d_TextPath.hxx>
#include <Graphic3d_TransModeFlags.hxx>
#include <Graphic3d_TypeOfShadingModel.hxx>
#include <Graphic3d_NameOfMaterial.hxx>
#include <Graphic3d_ZLayerId.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>
#include <Standard_Type.hxx>
//! Provides methods to cast enumerations of package to string value
class Graphic3d
{
public:
DEFINE_STANDARD_ALLOC
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString ZLayerIdToString (Graphic3d_ZLayerId theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_ZLayerId_UNKNOWN if string identifier is invalid
static Graphic3d_ZLayerId ZLayerIdFromString (Standard_CString theTypeString)
{
Graphic3d_ZLayerId aType = Graphic3d_ZLayerId_UNKNOWN;
ZLayerIdFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean ZLayerIdFromString (const Standard_CString theTypeString,
Graphic3d_ZLayerId& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString HorizontalTextAlignmentToString (Graphic3d_HorizontalTextAlignment theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_HTA_LEFT if string identifier is invalid
static Graphic3d_HorizontalTextAlignment HorizontalTextAlignmentFromString (Standard_CString theTypeString)
{
Graphic3d_HorizontalTextAlignment aType = Graphic3d_HTA_LEFT;
HorizontalTextAlignmentFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean HorizontalTextAlignmentFromString (const Standard_CString theTypeString,
Graphic3d_HorizontalTextAlignment& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString VerticalTextAlignmentToString (Graphic3d_VerticalTextAlignment theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_VTA_BOTTOM if string identifier is invalid
static Graphic3d_VerticalTextAlignment VerticalTextAlignmentFromString (Standard_CString theTypeString)
{
Graphic3d_VerticalTextAlignment aType = Graphic3d_VTA_BOTTOM;
VerticalTextAlignmentFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean VerticalTextAlignmentFromString (const Standard_CString theTypeString,
Graphic3d_VerticalTextAlignment& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TextPathToString (Graphic3d_TextPath theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_TP_UP if string identifier is invalid
static Graphic3d_TextPath TextPathFromString (Standard_CString theTypeString)
{
Graphic3d_TextPath aType = Graphic3d_TP_UP;
TextPathFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TextPathFromString (const Standard_CString theTypeString,
Graphic3d_TextPath& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString AlphaModeToString (Graphic3d_AlphaMode theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_AlphaMode_Opaque if string identifier is invalid
static Graphic3d_AlphaMode AlphaModeFromString (Standard_CString theTypeString)
{
Graphic3d_AlphaMode aType = Graphic3d_AlphaMode_Opaque;
AlphaModeFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean AlphaModeFromString (const Standard_CString theTypeString,
Graphic3d_AlphaMode& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfShadingModelToString (Graphic3d_TypeOfShadingModel theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_TOSM_DEFAULT if string identifier is invalid
static Graphic3d_TypeOfShadingModel TypeOfShadingModelFromString (Standard_CString theTypeString)
{
Graphic3d_TypeOfShadingModel aType = Graphic3d_TOSM_DEFAULT;
TypeOfShadingModelFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfShadingModelFromString (const Standard_CString theTypeString,
Graphic3d_TypeOfShadingModel& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfAttributeToString (Graphic3d_TypeOfAttribute theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_TOA_POS if string identifier is invalid
static Graphic3d_TypeOfAttribute TypeOfAttributeFromString (Standard_CString theTypeString)
{
Graphic3d_TypeOfAttribute aType = Graphic3d_TOA_POS;
TypeOfAttributeFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfAttributeFromString (const Standard_CString theTypeString,
Graphic3d_TypeOfAttribute& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TypeOfDataToString (Graphic3d_TypeOfData theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_TOSM_DEFAULT if string identifier is invalid
static Graphic3d_TypeOfData TypeOfDataFromString (Standard_CString theTypeString)
{
Graphic3d_TypeOfData aType = Graphic3d_TOD_USHORT;
TypeOfDataFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TypeOfDataFromString (const Standard_CString theTypeString,
Graphic3d_TypeOfData& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString TransModeFlagsToString (Graphic3d_TransModeFlags theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Graphic3d_TOSM_DEFAULT if string identifier is invalid
static Graphic3d_TransModeFlags TransModeFlagsFromString (Standard_CString theTypeString)
{
Graphic3d_TransModeFlags aType = Graphic3d_TMF_None;
TransModeFlagsFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean TransModeFlagsFromString (const Standard_CString theTypeString,
Graphic3d_TransModeFlags& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString CameraProjectionToString (Graphic3d_Camera::Projection theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or Projection_Orthographic if string identifier is invalid
static Graphic3d_Camera::Projection CameraProjectionFromString (Standard_CString theTypeString)
{
Graphic3d_Camera::Projection aType = Graphic3d_Camera::Projection_Orthographic;
CameraProjectionFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean CameraProjectionFromString (const Standard_CString theTypeString,
Graphic3d_Camera::Projection& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString CameraFocusTypeToString (Graphic3d_Camera::FocusType theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or FocusType_Absolute if string identifier is invalid
static Graphic3d_Camera::FocusType CameraFocusTypeFromString (Standard_CString theTypeString)
{
Graphic3d_Camera::FocusType aType = Graphic3d_Camera::FocusType_Absolute;
CameraFocusTypeFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean CameraFocusTypeFromString (const Standard_CString theTypeString,
Graphic3d_Camera::FocusType& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString CameraIODTypeToString (Graphic3d_Camera::IODType theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or IODType_Absolute if string identifier is invalid
static Graphic3d_Camera::IODType CameraIODTypeFromString (Standard_CString theTypeString)
{
Graphic3d_Camera::IODType aType = Graphic3d_Camera::IODType_Absolute;
CameraIODTypeFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean CameraIODTypeFromString (const Standard_CString theTypeString,
Graphic3d_Camera::IODType& theType);
//! Returns the string name for a given type.
//! @param theType an enumeration type
//! @return string identifier from the enumeration list
Standard_EXPORT static Standard_CString NameOfMaterialToString (Graphic3d_NameOfMaterial theType);
//! Returns the orientation type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @return enumeration type or IODType_Absolute if string identifier is invalid
static Graphic3d_NameOfMaterial NameOfMaterialFromString (Standard_CString theTypeString)
{
Graphic3d_NameOfMaterial aType = Graphic3d_NOM_BRASS;
NameOfMaterialFromString (theTypeString, aType);
return aType;
}
//! Determines the type from the given string identifier (using case-insensitive comparison).
//! @param theTypeString string identifier
//! @param theType detected type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean NameOfMaterialFromString (const Standard_CString theTypeString,
Graphic3d_NameOfMaterial& theType);
};
#endif // _Graphic3d_HeaderFile

View File

@@ -0,0 +1,110 @@
// Created on: 2017-04-14
// Created by: Anton POLETAEV
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Graphic3d_AspectFillCapping.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillCapping, Standard_Transient)
// =======================================================================
// function : Graphic3d_AspectFillCapping
// purpose :
// =======================================================================
Graphic3d_AspectFillCapping::Graphic3d_AspectFillCapping()
: myFlags (Flags_None),
myHatchingState (0)
{
Graphic3d_MaterialAspect aMaterial;
aMaterial.SetColor (Quantity_NOC_BLACK);
aMaterial.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
aMaterial.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
aMaterial.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
aMaterial.SetReflectionModeOff (Graphic3d_TOR_EMISSION);
aMaterial.SetMaterialType (Graphic3d_MATERIAL_ASPECT);
SetHatchStyle (Aspect_HS_HORIZONTAL);
SetHatchMaterial (aMaterial);
}
// =======================================================================
// function : SetHatchStyle
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchStyle (const Aspect_HatchStyle theStyle)
{
myStippleHatch = new Graphic3d_HatchStyle (theStyle);
myTextureHatch.Nullify();
myHatchingState++;
}
// =======================================================================
// function : SetHatchStyle
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle)
{
myStippleHatch = theStyle;
myTextureHatch.Nullify();
myHatchingState++;
}
// =======================================================================
// function : SetHatchStyle
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchStyle (const Handle(Graphic3d_TextureMap)& theTexture)
{
myStippleHatch.Nullify();
myTextureHatch = theTexture;
myHatchingState++;
}
// =======================================================================
// function : SetHatchMaterial
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchMaterial (const Graphic3d_MaterialAspect& theMaterial)
{
myHatchMaterial = theMaterial;
myHatchingState++;
}
// =======================================================================
// function : SetToDrawHatch
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetToDrawHatch (const Standard_Boolean theToDraw)
{
setFlag (theToDraw, Flags_DrawHatching);
myHatchingState++;
}
// =======================================================================
// function : SetHatchZoomPeristent
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchZoomPeristent (const Standard_Boolean theToSet)
{
setFlag (theToSet, Flags_HatchZoomPersistent);
myHatchingState++;
}
// =======================================================================
// function : SetHatchRotationPeristent
// purpose :
// =======================================================================
void Graphic3d_AspectFillCapping::SetHatchRotationPeristent (const Standard_Boolean theToSet)
{
setFlag (theToSet, Flags_HatchRotationPersistent);
myHatchingState++;
}

View File

@@ -0,0 +1,164 @@
// Created on: 2017-04-14
// Created by: Anton POLETAEV
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Graphic3d_AspectFillCapping_HeaderFile
#define _Graphic3d_AspectFillCapping_HeaderFile
#include <Aspect_HatchStyle.hxx>
#include <Graphic3d_Aspects.hxx>
#include <Graphic3d_HatchStyle.hxx>
#include <Graphic3d_MaterialAspect.hxx>
#include <Graphic3d_ShaderProgram.hxx>
#include <Graphic3d_TextureMap.hxx>
#include <Standard_Transient.hxx>
//! Defines graphical attributes for drawing section planes on solids resulted from clipping (cutting) planes.
class Graphic3d_AspectFillCapping : public Graphic3d_Aspects
{
public:
//! Default constructor.
Standard_EXPORT Graphic3d_AspectFillCapping();
public:
//! Sets material for filling section created by clipping.
void SetMaterial (const Graphic3d_MaterialAspect& theMaterial) { myMaterial = theMaterial; }
//! Returns material for filling section created by clipping.
const Graphic3d_MaterialAspect& Material() const { return myMaterial; }
//! Sets flag indicating whether object's material (instead of defined by this aspect) should be used for filling section.
void SetUseObjectMaterial (const Standard_Boolean theToUse) { setFlag (theToUse, Flags_UseObjectMaterial); }
//! Returns flag indicating whether object's material (instead of defined by this aspect) should be used for filling section.
Standard_Boolean ToUseObjectMaterial() const { return (myFlags & Flags_UseObjectMaterial) != 0; }
//! Sets texture for filling section created by clipping.
void SetTexture (const Handle(Graphic3d_TextureMap)& theTexture) { myTexture = theTexture; }
//! Returns texture for filling section created by clipping.
const Handle(Graphic3d_TextureMap)& Texture() const { return myTexture; }
//! Sets flag indicating whether object's texture (instead of defined by this aspect) should be used for filling section.
void SetUseObjectTexture (const Standard_Boolean theToUse) { setFlag (theToUse, Flags_UseObjectTexture); }
//! Returns flag indicating whether object's texture (instead of defined by this aspect) should be used for filling section.
Standard_Boolean ToUseObjectTexture() const { return (myFlags & Flags_UseObjectTexture) != 0; }
//! Sets OpenGL/GLSL shader program.
void SetShader (const Handle(Graphic3d_ShaderProgram)& theShader) { myShader = theShader; }
//! Returns OpenGL/GLSL shader program.
const Handle(Graphic3d_ShaderProgram)& Shader() const { return myShader; }
//! Sets flag indicating whether object's shader (instead of defined by this aspect) should be used for filling section.
void SetUseObjectShader (const Standard_Boolean theToUse) { setFlag (theToUse, Flags_UseObjectShader); }
//! Returns flag indicating whether object's shader (instead of defined by this aspect) should be used for filling section.
Standard_Boolean ToUseObjectShader() const { return (myFlags & Flags_UseObjectShader) != 0; }
public:
//! Sets style of hatch defined by predefined stipple mask.
Standard_EXPORT void SetHatchStyle (const Aspect_HatchStyle theStyle);
//! Sets style of hatch defined by custom stipple mask.
Standard_EXPORT void SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle);
//! Sets style of hatch defined by texture map (decal texture with alpha channel should be used).
Standard_EXPORT void SetHatchStyle (const Handle(Graphic3d_TextureMap)& theTexture);
//! Sets material style for hatch lines (texture).
Standard_EXPORT void SetHatchMaterial (const Graphic3d_MaterialAspect& theMaterial);
//! Returns material style for hatch lines (texture).
const Graphic3d_MaterialAspect& HatchMaterial() const { return myHatchMaterial; }
//! Sets boolean flag indicating whether the hatch layer should be drawn or not.
Standard_EXPORT void SetToDrawHatch (const Standard_Boolean theToDraw);
//! Returns boolean flag indicating whether the hatch layer should be drawn or not.
Standard_Boolean ToDrawHatch() const { return (myFlags & Flags_DrawHatching) != 0; }
//! Sets flag controlling behavior of hatch texture mapping on zooming.
//! @param theToSet [in] if passed TRUE the texture will keep constant screen-scale independent of zooming.
Standard_EXPORT void SetHatchZoomPeristent (const Standard_Boolean theToSet);
//! Returns value of flag controlling behavior of hatch texture mapping on zooming.
Standard_Boolean IsHatchZoomPersistent() { return (myFlags & Flags_HatchZoomPersistent) != 0; }
//! Sets flag controlling behavior of hatch texture mapping on camera rotation around heading vector.
Standard_EXPORT void SetHatchRotationPeristent (const Standard_Boolean theToSet);
//! Returns value of flag controlling behavior of hatch texture mapping on camera rotation around heading vector.
Standard_Boolean IsHatchRotationPersistent() { return (myFlags & Flags_HatchRotationPersistent) != 0; }
//! Returns true if hatch is defined by texture.
Standard_Boolean IsTextureHatch() const { return !myTextureHatch.IsNull(); }
//! Returns texture map defining the hatch.
const Handle(Graphic3d_TextureMap)& TextureHatch() const { return myTextureHatch; }
//! Returns true if hatch is defined by stipple mask.
Standard_Boolean IsStippleHatch() const { return !myStippleHatch.IsNull(); }
//! Returns the stipple mask.
const Handle(Graphic3d_HatchStyle)& StippleHatch() const { return myStippleHatch; }
//! Returns modification counter for hatching state.
Standard_Size HatchingState() const { return myHatchingState; }
private:
enum Flags
{
Flags_None = 0x00, //!< no flags
Flags_UseObjectMaterial = 0x01, //!< use object material
Flags_UseObjectTexture = 0x02, //!< use object texture
Flags_UseObjectShader = 0x04, //!< use object GLSL program
Flags_HatchZoomPersistent = 0x08, //!< zoom-persistent texturing
Flags_HatchRotationPersistent = 0x10, //!< rotation-persistent texturing
Flags_DrawHatching = 0x20, //!< draw hatching
Flags_UseObjectProperties = //!< use entire fill area aspect from object
Flags_UseObjectMaterial
| Flags_UseObjectTexture
| Flags_UseObjectShader
};
void setFlag (const Standard_Boolean theToUse, const unsigned int theFlag)
{
myFlags = theToUse ? myFlags | theFlag : myFlags & ~theFlag;
}
private:
Graphic3d_MaterialAspect myMaterial;
Handle(Graphic3d_TextureMap) myTexture;
Handle(Graphic3d_ShaderProgram) myShader;
Handle(Graphic3d_HatchStyle) myStippleHatch;
Handle(Graphic3d_TextureMap) myTextureHatch;
Graphic3d_MaterialAspect myHatchMaterial;
unsigned int myFlags;
Standard_Size myHatchingState;
public:
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillCapping, Graphic3d_Aspects)
};
DEFINE_STANDARD_HANDLE (Graphic3d_AspectFillCapping, Graphic3d_Aspects)
#endif // _Graphic3d_AspectFillCapping_HeaderFile

View File

@@ -12,6 +12,7 @@
// commercial license or contractual agreement. // commercial license or contractual agreement.
#include <Graphic3d_Aspects.hxx> #include <Graphic3d_Aspects.hxx>
#include <TCollection.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient) IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
@@ -60,3 +61,69 @@ void Graphic3d_Aspects::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTe
myTextureSet = new Graphic3d_TextureSet (theTexture); myTextureSet = new Graphic3d_TextureSet (theTexture);
} }
const TCollection_AsciiString Graphic3d_Aspects_ClassName = "Graphic3d_Aspects";
//=======================================================================
//function : Dump
//purpose :
//=======================================================================
void Graphic3d_Aspects::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, Graphic3d_Aspects_ClassName);
/*Handle(Graphic3d_ShaderProgram) myProgram;
Handle(Graphic3d_TextureSet) myTextureSet;
Handle(Graphic3d_MarkerImage) myMarkerImage;
Handle(Graphic3d_HatchStyle) myHatchStyle;
Handle(TCollection_HAsciiString) myTextFont;
Graphic3d_MaterialAspect myFrontMaterial;
Graphic3d_MaterialAspect myBackMaterial;
*/
Standard_SStream aTmpStream;
myInteriorColor.Dump (aTmpStream);
DUMP_VALUES (OS, "InteriorColor", TCollection::ToDumpString (aTmpStream));
aTmpStream.str ("");
myBackInteriorColor.Dump (aTmpStream);
DUMP_VALUES (OS, "BackInteriorColor", TCollection::ToDumpString (aTmpStream));
aTmpStream.str ("");
myEdgeColor.Dump (aTmpStream);
DUMP_VALUES (OS, "EdgeColor", TCollection::ToDumpString (aTmpStream));
aTmpStream.str ("");
myPolygonOffset.Dump (aTmpStream);
DUMP_VALUES (OS, "PolygonOffset", TCollection::ToDumpString (aTmpStream));
/*Aspect_InteriorStyle myInteriorStyle;
Graphic3d_TypeOfShadingModel myShadingModel;
Graphic3d_AlphaMode myAlphaMode;
Standard_ShortReal myAlphaCutoff;
Aspect_TypeOfLine myLineType;
Standard_ShortReal myLineWidth;
Aspect_TypeOfMarker myMarkerType;
Standard_ShortReal myMarkerScale;
Aspect_TypeOfStyleText myTextStyle;
Aspect_TypeOfDisplayText myTextDisplayType;
Font_FontAspect myTextFontAspect;
Standard_ShortReal myTextAngle;
*/
DUMP_VALUES (OS, "ToSkipFirstEdge", myToSkipFirstEdge);
DUMP_VALUES (OS, "ToDistinguishMaterials", myToDistinguishMaterials);
DUMP_VALUES (OS, "ToDrawEdges", myToDrawEdges);
DUMP_VALUES (OS, "ToDrawSilhouette", myToDrawSilhouette);
DUMP_VALUES (OS, "ToSuppressBackFaces", myToSuppressBackFaces);
DUMP_VALUES (OS, "ToMapTexture", myToMapTexture);
DUMP_VALUES (OS, "IsTextZoomable", myIsTextZoomable);
DUMP_STOP_KEY (OS, Graphic3d_Aspects_ClassName);
}

View File

@@ -477,6 +477,9 @@ public:
&& myIsTextZoomable == theOther.myIsTextZoomable; && myIsTextZoomable == theOther.myIsTextZoomable;
} }
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT void Dump (Standard_OStream& OS) const;
protected: protected:
Handle(Graphic3d_ShaderProgram) myProgram; Handle(Graphic3d_ShaderProgram) myProgram;

View File

@@ -24,19 +24,6 @@ IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_ClipPlane,Standard_Transient)
namespace namespace
{ {
static volatile Standard_Integer THE_CLIP_PLANE_COUNTER = 0; static volatile Standard_Integer THE_CLIP_PLANE_COUNTER = 0;
static Handle(Graphic3d_AspectFillArea3d) defaultAspect()
{
const Graphic3d_MaterialAspect aMaterial (Graphic3d_NOM_DEFAULT);
Handle(Graphic3d_AspectFillArea3d) anAspect = new Graphic3d_AspectFillArea3d();
anAspect->SetDistinguishOff();
anAspect->SetFrontMaterial (aMaterial);
anAspect->SetHatchStyle (Aspect_HS_HORIZONTAL);
anAspect->SetInteriorStyle (Aspect_IS_SOLID);
anAspect->SetInteriorColor (aMaterial.Color());
anAspect->SetSuppressBackFaces (false);
return anAspect;
}
} }
// ======================================================================= // =======================================================================
@@ -44,19 +31,8 @@ namespace
// purpose : // purpose :
// ======================================================================= // =======================================================================
Graphic3d_ClipPlane::Graphic3d_ClipPlane() Graphic3d_ClipPlane::Graphic3d_ClipPlane()
: myAspect (defaultAspect()),
myPrevInChain(NULL),
myPlane (0.0, 0.0, 1.0, 0.0),
myEquation (0.0, 0.0, 1.0, 0.0),
myEquationRev(0.0, 0.0,-1.0, 0.0),
myChainLenFwd(1),
myFlags (Graphic3d_CappingFlags_None),
myEquationMod(0),
myAspectMod (0),
myIsOn (Standard_True),
myIsCapping (Standard_False)
{ {
makeId(); init();
} }
// ======================================================================= // =======================================================================
@@ -64,19 +40,8 @@ Graphic3d_ClipPlane::Graphic3d_ClipPlane()
// purpose : // purpose :
// ======================================================================= // =======================================================================
Graphic3d_ClipPlane::Graphic3d_ClipPlane (const Graphic3d_Vec4d& theEquation) Graphic3d_ClipPlane::Graphic3d_ClipPlane (const Graphic3d_Vec4d& theEquation)
: myAspect (defaultAspect()),
myPrevInChain(NULL),
myPlane (theEquation.x(), theEquation.y(), theEquation.z(), theEquation.w()),
myEquation (theEquation),
myEquationRev(0.0, 0.0,-1.0, 0.0),
myChainLenFwd(1),
myFlags (Graphic3d_CappingFlags_None),
myEquationMod(0),
myAspectMod (0),
myIsOn (Standard_True),
myIsCapping (Standard_False)
{ {
makeId(); init (gp_Pln (theEquation.x(), theEquation.y(), theEquation.z(), theEquation.a()));
updateInversedPlane(); updateInversedPlane();
} }
@@ -84,42 +49,27 @@ Graphic3d_ClipPlane::Graphic3d_ClipPlane (const Graphic3d_Vec4d& theEquation)
// function : Graphic3d_ClipPlane // function : Graphic3d_ClipPlane
// purpose : // purpose :
// ======================================================================= // =======================================================================
Graphic3d_ClipPlane::Graphic3d_ClipPlane(const Graphic3d_ClipPlane& theOther) Graphic3d_ClipPlane::Graphic3d_ClipPlane (const Graphic3d_ClipPlane& theOther)
: Standard_Transient(theOther), : Standard_Transient (theOther)
myAspect (defaultAspect()),
myPrevInChain(NULL),
myPlane (theOther.myPlane),
myEquation (theOther.myEquation),
myEquationRev(theOther.myEquationRev),
myChainLenFwd(1),
myFlags (theOther.myFlags),
myEquationMod(0),
myAspectMod (0),
myIsOn (theOther.myIsOn),
myIsCapping (theOther.myIsCapping)
{ {
makeId(); *mySectionStyle = *theOther.CappingSectionStyle();
*myAspect = *theOther.CappingAspect(); init (theOther.myPlane,
theOther.myEquationRev,
theOther.myIsOn,
theOther.myIsCapping,
theOther.ToOverrideCappingAspect(),
theOther.CappingSectionStyle());
updateInversedPlane();
} }
// ======================================================================= // =======================================================================
// function : Graphic3d_ClipPlane // function : Graphic3d_ClipPlane
// purpose : // purpose :
// ======================================================================= // =======================================================================
Graphic3d_ClipPlane::Graphic3d_ClipPlane(const gp_Pln& thePlane) Graphic3d_ClipPlane::Graphic3d_ClipPlane (const gp_Pln& thePlane)
: myAspect (defaultAspect()),
myPrevInChain(NULL),
myPlane (thePlane),
myChainLenFwd(1),
myFlags (Graphic3d_CappingFlags_None),
myEquationMod(0),
myAspectMod (0),
myIsOn (Standard_True),
myIsCapping (Standard_False)
{ {
thePlane.Coefficients (myEquation[0], myEquation[1], myEquation[2], myEquation[3]); init (thePlane);
updateInversedPlane(); updateInversedPlane();
makeId();
} }
// ======================================================================= // =======================================================================
@@ -131,7 +81,7 @@ void Graphic3d_ClipPlane::SetEquation (const Graphic3d_Vec4d& theEquation)
myPlane = gp_Pln (theEquation.x(), theEquation.y(), theEquation.z(), theEquation.w()); myPlane = gp_Pln (theEquation.x(), theEquation.y(), theEquation.z(), theEquation.w());
myEquation = theEquation; myEquation = theEquation;
updateInversedPlane(); updateInversedPlane();
myEquationMod++; myOrientationDirty = Standard_True;
} }
// ======================================================================= // =======================================================================
@@ -143,7 +93,7 @@ void Graphic3d_ClipPlane::SetEquation (const gp_Pln& thePlane)
myPlane = thePlane; myPlane = thePlane;
thePlane.Coefficients (myEquation[0], myEquation[1], myEquation[2], myEquation[3]); thePlane.Coefficients (myEquation[0], myEquation[1], myEquation[2], myEquation[3]);
updateInversedPlane(); updateInversedPlane();
myEquationMod++; myOrientationDirty = Standard_True;
} }
// ======================================================================= // =======================================================================
@@ -178,119 +128,106 @@ Handle(Graphic3d_ClipPlane) Graphic3d_ClipPlane::Clone() const
} }
// ======================================================================= // =======================================================================
// function : SetCappingMaterial // function : SetCappingSectionStyle
// purpose : // purpose :
// ======================================================================= // =======================================================================
void Graphic3d_ClipPlane::SetCappingMaterial (const Graphic3d_MaterialAspect& theMat) void Graphic3d_ClipPlane::SetCappingSectionStyle (const Handle(Graphic3d_AspectFillCapping)& theStyle)
{ {
myAspect->SetFrontMaterial (theMat); mySectionStyle = theStyle;
myAspect->SetInteriorColor (theMat.Color());
++myAspectMod;
} }
// ======================================================================= // =======================================================================
// function : SetCappingTexture // function : OrientationMatrix
// purpose : // purpose :
// ======================================================================= // =======================================================================
void Graphic3d_ClipPlane::SetCappingTexture (const Handle(Graphic3d_TextureMap)& theTexture) const Graphic3d_Mat4& Graphic3d_ClipPlane::OrientationMatrix() const
{ {
if (!theTexture.IsNull()) if (myOrientationDirty)
{ {
myAspect->SetTextureMapOn(); const Standard_ShortReal aDirection[] = {
Handle(Graphic3d_TextureSet) aTextureSet = myAspect->TextureSet(); static_cast<Standard_ShortReal> (myEquation[0]),
if (aTextureSet.IsNull() || aTextureSet->Size() != 1) static_cast<Standard_ShortReal> (myEquation[1]),
static_cast<Standard_ShortReal> (myEquation[2])
};
const Standard_ShortReal aTranslate[] = {
static_cast<Standard_ShortReal> (myEquation[0] * -myEquation[3]),
static_cast<Standard_ShortReal> (myEquation[1] * -myEquation[3]),
static_cast<Standard_ShortReal> (myEquation[2] * -myEquation[3])
};
Standard_ShortReal aSide1[] = { 0.0f, 0.0f, 0.0f };
Standard_ShortReal aSide2[] = { 0.0f, 0.0f, 0.0f };
const Standard_ShortReal aMagintude = static_cast<Standard_ShortReal> (Sqrt (myEquation[0] * myEquation[0] + myEquation[2] * myEquation[2]));
if (aMagintude < ShortRealSmall())
{ {
aTextureSet = new Graphic3d_TextureSet (theTexture); aSide1[0] = 1.0f;
} }
else else
{ {
aTextureSet->SetFirst (theTexture); aSide1[0] = aDirection[2] / aMagintude;
aSide1[2] = -aDirection[0] / aMagintude;
} }
myAspect->SetTextureSet (aTextureSet);
aSide2[0] = (-aSide1[1] * aDirection[2]) - (-aSide1[2] * aDirection[1]);
aSide2[1] = (-aSide1[2] * aDirection[0]) - (-aSide1[0] * aDirection[2]);
aSide2[2] = (-aSide1[0] * aDirection[1]) - (-aSide1[1] * aDirection[0]);
myOrientationMat.SetValue (0, 0, aSide1[0]);
myOrientationMat.SetValue (1, 0, aSide1[1]);
myOrientationMat.SetValue (2, 0, aSide1[2]);
myOrientationMat.SetValue (3, 0, 0.0F);
myOrientationMat.SetValue (0, 1, aDirection[0]);
myOrientationMat.SetValue (1, 1, aDirection[1]);
myOrientationMat.SetValue (2, 1, aDirection[2]);
myOrientationMat.SetValue (3, 1, 0.0F);
myOrientationMat.SetValue (0, 2, aSide2[0]);
myOrientationMat.SetValue (1, 2, aSide2[1]);
myOrientationMat.SetValue (2, 2, aSide2[2]);
myOrientationMat.SetValue (3, 2, 0.0F);
myOrientationMat.SetValue (0, 3, aTranslate[0]);
myOrientationMat.SetValue (1, 3, aTranslate[1]);
myOrientationMat.SetValue (2, 3, aTranslate[2]);
myOrientationMat.SetValue (3, 3, 1.0F);
myOrientationDirty = Standard_False;
} }
else
return myOrientationMat;
}
// =======================================================================
// function : init
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::init (const gp_Pln& thePlane,
const Graphic3d_Vec4d& theEquationRev,
const Standard_Boolean theIsOn,
const Standard_Boolean theIsCapping,
const Standard_Boolean theOverrideStyle,
const Handle(Graphic3d_AspectFillCapping)& theStyle)
{
if (myEntityUID.IsEmpty())
{ {
myAspect->SetTextureMapOff(); myEntityUID = TCollection_AsciiString ("Graphic3d_ClipPlane_") //DynamicType()->Name()
myAspect->SetTextureSet (Handle(Graphic3d_TextureSet)()); + TCollection_AsciiString (Standard_Atomic_Increment (&THE_CLIP_PLANE_COUNTER));
} }
++myAspectMod;
}
// ======================================================================= myPrevInChain = NULL;
// function : SetCappingHatch myEquationRev = theEquationRev;
// purpose : myChainLenFwd = 1;
// ======================================================================= myPlane = thePlane;
void Graphic3d_ClipPlane::SetCappingHatch (const Aspect_HatchStyle theStyle) myPlane.Coefficients (myEquation[0], myEquation[1], myEquation[2], myEquation[3]);
{ myIsOn = theIsOn;
myAspect->SetHatchStyle (theStyle); myIsCapping = theIsCapping;
++myAspectMod; myOverrideObjectStyle = theOverrideStyle;
} mySectionStyle = theStyle.IsNull() ? new Graphic3d_AspectFillCapping() : theStyle;
myOrientationDirty = Standard_True;
// =======================================================================
// function : SetCappingCustomHatch
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::SetCappingCustomHatch (const Handle(Graphic3d_HatchStyle)& theStyle)
{
myAspect->SetHatchStyle (theStyle);
++myAspectMod;
}
// =======================================================================
// function : SetCappingHatchOn
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::SetCappingHatchOn()
{
myAspect->SetInteriorStyle (Aspect_IS_HATCH);
++myAspectMod;
}
// =======================================================================
// function : SetCappingHatchOff
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::SetCappingHatchOff()
{
myAspect->SetInteriorStyle (Aspect_IS_SOLID);
++myAspectMod;
}
// =======================================================================
// function : SetCappingAspect
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::SetCappingAspect (const Handle(Graphic3d_AspectFillArea3d)& theAspect)
{
myAspect = theAspect;
++myAspectMod;
}
// =======================================================================
// function : setCappingFlag
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::setCappingFlag (bool theToUse, int theFlag)
{
if (theToUse)
{
myFlags |= theFlag;
}
else
{
myFlags &= ~(theFlag);
}
++myAspectMod;
}
// =======================================================================
// function : makeId
// purpose :
// =======================================================================
void Graphic3d_ClipPlane::makeId()
{
myId = TCollection_AsciiString ("Graphic3d_ClipPlane_") //DynamicType()->Name()
+ TCollection_AsciiString (Standard_Atomic_Increment (&THE_CLIP_PLANE_COUNTER));
} }
// ======================================================================= // =======================================================================
@@ -312,7 +249,7 @@ void Graphic3d_ClipPlane::updateChainLen()
// ======================================================================= // =======================================================================
void Graphic3d_ClipPlane::SetChainNextPlane (const Handle(Graphic3d_ClipPlane)& thePlane) void Graphic3d_ClipPlane::SetChainNextPlane (const Handle(Graphic3d_ClipPlane)& thePlane)
{ {
++myEquationMod; myOrientationDirty = Standard_True;
if (!myNextInChain.IsNull()) if (!myNextInChain.IsNull())
{ {
myNextInChain->myPrevInChain = NULL; myNextInChain->myPrevInChain = NULL;

View File

@@ -19,9 +19,12 @@
#include <Aspect_HatchStyle.hxx> #include <Aspect_HatchStyle.hxx>
#include <gp_Pln.hxx> #include <gp_Pln.hxx>
#include <Graphic3d_AspectFillArea3d.hxx> #include <Graphic3d_AspectFillArea3d.hxx>
#include <Graphic3d_AspectFillCapping.hxx>
#include <Graphic3d_BndBox3d.hxx> #include <Graphic3d_BndBox3d.hxx>
#include <Graphic3d_CappingFlags.hxx> #include <Graphic3d_CappingFlags.hxx>
#include <Graphic3d_Mat4.hxx>
#include <Graphic3d_TextureMap.hxx> #include <Graphic3d_TextureMap.hxx>
#include <NCollection_Handle.hxx>
#include <NCollection_Vec4.hxx> #include <NCollection_Vec4.hxx>
#include <Standard_Macro.hxx> #include <Standard_Macro.hxx>
#include <Standard_TypeDef.hxx> #include <Standard_TypeDef.hxx>
@@ -166,44 +169,6 @@ public:
public: // @name user-defined graphical attributes public: // @name user-defined graphical attributes
//! Set material for rendering capping surface.
//! @param theMat [in] the material.
Standard_EXPORT void SetCappingMaterial (const Graphic3d_MaterialAspect& theMat);
//! @return capping material.
const Graphic3d_MaterialAspect& CappingMaterial() const { return myAspect->FrontMaterial(); }
//! Set texture to be applied on capping surface.
//! @param theTexture [in] the texture.
Standard_EXPORT void SetCappingTexture (const Handle(Graphic3d_TextureMap)& theTexture);
//! @return capping texture map.
Handle(Graphic3d_TextureMap) CappingTexture() const { return !myAspect->TextureSet().IsNull() && !myAspect->TextureSet()->IsEmpty()
? myAspect->TextureSet()->First()
: Handle(Graphic3d_TextureMap)(); }
//! Set hatch style (stipple) and turn hatching on.
//! @param theStyle [in] the hatch style.
Standard_EXPORT void SetCappingHatch (const Aspect_HatchStyle theStyle);
//! @return hatching style.
Aspect_HatchStyle CappingHatch() const { return (Aspect_HatchStyle)myAspect->HatchStyle()->HatchType(); }
//! Set custom hatch style (stipple) and turn hatching on.
//! @param theStyle [in] the hatch pattern.
Standard_EXPORT void SetCappingCustomHatch (const Handle(Graphic3d_HatchStyle)& theStyle);
//! @return hatching style.
const Handle(Graphic3d_HatchStyle)& CappingCustomHatch() const { return myAspect->HatchStyle(); }
//! Turn on hatching.
Standard_EXPORT void SetCappingHatchOn();
//! Turn off hatching.
Standard_EXPORT void SetCappingHatchOff();
//! @return True if hatching mask is turned on.
Standard_Boolean IsHatchOn() const { return myAspect->InteriorStyle() == Aspect_IS_HATCH; }
//! This ID is used for managing associated resources in graphical driver. //! This ID is used for managing associated resources in graphical driver.
//! The clip plane can be assigned within a range of IO which can be //! The clip plane can be assigned within a range of IO which can be
@@ -214,41 +179,18 @@ public: // @name user-defined graphical attributes
//! @return clip plane resource identifier string. //! @return clip plane resource identifier string.
const TCollection_AsciiString& GetId() const const TCollection_AsciiString& GetId() const
{ {
return myId; return myEntityUID;
} }
public: public:
//! Return capping aspect. //! Returns style used for drawing capping section.
//! @return capping surface rendering aspect. //! @return capping surface rendering aspect.
const Handle(Graphic3d_AspectFillArea3d)& CappingAspect() const { return myAspect; } const Handle(Graphic3d_AspectFillCapping)& CappingSectionStyle() const { return mySectionStyle; }
//! Assign capping aspect. //! Sets clipping section filling aspect.
Standard_EXPORT void SetCappingAspect (const Handle(Graphic3d_AspectFillArea3d)& theAspect); Standard_EXPORT void SetCappingSectionStyle (const Handle(Graphic3d_AspectFillCapping)& theStyle);
//! Flag indicating whether material for capping plane should be taken from object.
//! Default value: FALSE (use dedicated capping plane material).
bool ToUseObjectMaterial() const { return (myFlags & Graphic3d_CappingFlags_ObjectMaterial) != 0; }
//! Set flag for controlling the source of capping plane material.
void SetUseObjectMaterial (bool theToUse) { setCappingFlag (theToUse, Graphic3d_CappingFlags_ObjectMaterial); }
//! Flag indicating whether texture for capping plane should be taken from object.
//! Default value: FALSE.
bool ToUseObjectTexture() const { return (myFlags & Graphic3d_CappingFlags_ObjectTexture) != 0; }
//! Set flag for controlling the source of capping plane texture.
void SetUseObjectTexture (bool theToUse) { setCappingFlag (theToUse, Graphic3d_CappingFlags_ObjectTexture); }
//! Flag indicating whether shader program for capping plane should be taken from object.
//! Default value: FALSE.
bool ToUseObjectShader() const { return (myFlags & Graphic3d_CappingFlags_ObjectShader) != 0; }
//! Set flag for controlling the source of capping plane shader program.
void SetUseObjectShader(bool theToUse) { setCappingFlag (theToUse, Graphic3d_CappingFlags_ObjectShader); }
//! Return true if some fill area aspect properties should be taken from object.
bool ToUseObjectProperties() const { return myFlags != Graphic3d_CappingFlags_None; }
public: public:
@@ -384,14 +326,25 @@ public: // @name modification counters
{ {
return myAspectMod; return myAspectMod;
} }
//! Flag indicating whether section style of the plane should overrides similar property of object presentation.
//! Default value: FALSE (use dedicated presentation aspect style).
bool ToOverrideCappingAspect() const { return myOverrideObjectStyle; }
//! Sets flag for controlling the preference of using section style between clip plane and object.
void SetToOverrideCappingAspect (const bool theToOverride) { myOverrideObjectStyle = theToOverride; }
//! Returns plane's orientation matrix.
Standard_EXPORT const Graphic3d_Mat4& OrientationMatrix() const;
private: private:
//! Generate unique object id for OpenGL graphic resource manager. //! Initializes plane and makes unique identifier (UID) to differentiate clipping plane entities.
void makeId(); void init (const gp_Pln& thePlane = gp_Pln(),
const Graphic3d_Vec4d& theEquationRev = Graphic3d_Vec4d(0.0, 0.0,-1.0, 0.0),
//! Set capping flag. const Standard_Boolean theIsOn = Standard_True,
Standard_EXPORT void setCappingFlag (bool theToUse, int theFlag); const Standard_Boolean theIsCapping = Standard_False,
const Standard_Boolean theOverrideStyle = Standard_False,
const Handle(Graphic3d_AspectFillCapping)& theStyle = Handle(Graphic3d_AspectFillCapping)());
//! Update chain length in backward direction. //! Update chain length in backward direction.
void updateChainLen(); void updateChainLen();
@@ -406,10 +359,10 @@ private:
private: private:
Handle(Graphic3d_AspectFillArea3d) myAspect; //!< fill area aspect Handle(Graphic3d_AspectFillCapping) mySectionStyle; //!< Style set for drawing capped solid section.
Handle(Graphic3d_ClipPlane) myNextInChain; //!< next plane in a chain of planes defining logical AND operation Handle(Graphic3d_ClipPlane) myNextInChain; //!< next plane in a chain of planes defining logical AND operation
Graphic3d_ClipPlane* myPrevInChain; //!< previous plane in a chain of planes defining logical AND operation Graphic3d_ClipPlane* myPrevInChain; //!< previous plane in a chain of planes defining logical AND operation
TCollection_AsciiString myId; //!< resource id TCollection_AsciiString myEntityUID; //!< Unique identifier for the plane
gp_Pln myPlane; //!< plane definition gp_Pln myPlane; //!< plane definition
Graphic3d_Vec4d myEquation; //!< plane equation vector Graphic3d_Vec4d myEquation; //!< plane equation vector
Graphic3d_Vec4d myEquationRev; //!< reversed plane equation Graphic3d_Vec4d myEquationRev; //!< reversed plane equation
@@ -419,6 +372,9 @@ private:
unsigned int myAspectMod; //!< modification counter of aspect unsigned int myAspectMod; //!< modification counter of aspect
Standard_Boolean myIsOn; //!< state of the clipping plane Standard_Boolean myIsOn; //!< state of the clipping plane
Standard_Boolean myIsCapping; //!< state of graphic driver capping Standard_Boolean myIsCapping; //!< state of graphic driver capping
Standard_Boolean myOverrideObjectStyle; //!< Flag forcing to use plane's section style rather than section style defined for object
mutable Standard_Boolean myOrientationDirty; //!< Boolean flag indicating whether orientation matrix is dirty or not.
mutable Graphic3d_Mat4 myOrientationMat; //!< Plane orientation matrix (for visualization purposes).
}; };

View File

@@ -447,3 +447,22 @@ void Graphic3d_Group::AddText (const Handle(Graphic3d_Text)& theTextParams,
Update(); Update();
} }
const TCollection_AsciiString Graphic3d_Group_ClassName = "Graphic3d_Group";
// =======================================================================
// function : Dump
// purpose :
// =======================================================================
void Graphic3d_Group::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, Graphic3d_Group_ClassName);
//Graphic3d_Structure* myStructure; //!< pointer to the parent structure
//Graphic3d_BndBox4f myBounds; //!< bounding box
DUMP_VALUES (OS, "IsClosed", myIsClosed);
DUMP_VALUES (OS, "ContainsFacet", myContainsFacet);
DUMP_STOP_KEY (OS, Graphic3d_Group_ClassName);
}

View File

@@ -37,6 +37,7 @@
class Graphic3d_Structure; class Graphic3d_Structure;
class Graphic3d_ArrayOfPrimitives; class Graphic3d_ArrayOfPrimitives;
class Graphic3d_AspectFillCapping;
class Graphic3d_Text; class Graphic3d_Text;
//! This class allows the definition of groups //! This class allows the definition of groups
@@ -105,6 +106,9 @@ public:
//! Modifies the current context of the group to give another aspect for all the primitives created after this call in the group. //! Modifies the current context of the group to give another aspect for all the primitives created after this call in the group.
virtual void SetPrimitivesAspect (const Handle(Graphic3d_Aspects)& theAspect) = 0; virtual void SetPrimitivesAspect (const Handle(Graphic3d_Aspects)& theAspect) = 0;
//! Returns style of filling clipping sections on closed shell primitives.
virtual Handle(Graphic3d_AspectFillCapping) FillCappingAspect() const = 0;
//! Update presentation aspects after their modification. //! Update presentation aspects after their modification.
virtual void SynchronizeAspects() = 0; virtual void SynchronizeAspects() = 0;
@@ -276,6 +280,9 @@ public:
const Standard_Boolean theHasOwnAnchor = Standard_True); const Standard_Boolean theHasOwnAnchor = Standard_True);
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT virtual void Dump (Standard_OStream& OS) const;
protected: protected:
//! Creates a group in the structure <AStructure>. //! Creates a group in the structure <AStructure>.

View File

@@ -21,13 +21,15 @@
//! - ASPECT_LINE: aspect for line primitives; //! - ASPECT_LINE: aspect for line primitives;
//! - ASPECT_TEXT: aspect for text primitives; //! - ASPECT_TEXT: aspect for text primitives;
//! - ASPECT_MARKER: aspect for marker primitives; //! - ASPECT_MARKER: aspect for marker primitives;
//! - ASPECT_FILL_AREA: aspect for face primitives. //! - ASPECT_FILL_AREA: aspect for face primitives;
//! - Graphic3d_ASPECT_FILL_CAPPING: aspect for filling clipping sections.
enum Graphic3d_GroupAspect enum Graphic3d_GroupAspect
{ {
Graphic3d_ASPECT_LINE, Graphic3d_ASPECT_LINE,
Graphic3d_ASPECT_TEXT, Graphic3d_ASPECT_TEXT,
Graphic3d_ASPECT_MARKER, Graphic3d_ASPECT_MARKER,
Graphic3d_ASPECT_FILL_AREA Graphic3d_ASPECT_FILL_AREA,
Graphic3d_ASPECT_FILL_CAPPING
}; };
#endif // _Graphic3d_GroupAspect_HeaderFile #endif // _Graphic3d_GroupAspect_HeaderFile

View File

@@ -0,0 +1,35 @@
// Copyright (c) 2016 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Graphic3d_PolygonOffset.hxx>
#include <Aspect.hxx>
#include <TCollection.hxx>
const TCollection_AsciiString Graphic3d_PolygonOffset_ClassName = "Graphic3d_PolygonOffset";
//=======================================================================
//function : Dump
//purpose :
//=======================================================================
void Graphic3d_PolygonOffset::Dump (Standard_OStream& OS) const
{
DUMP_START_KEY (OS, Graphic3d_PolygonOffset_ClassName);
DUMP_VALUES (OS, "Mode", Aspect::PolygonOffsetModeToString (Mode));
DUMP_VALUES (OS, "Factor", Factor);
DUMP_VALUES (OS, "Units", Units);
DUMP_STOP_KEY (OS, Graphic3d_PolygonOffset_ClassName);
}

View File

@@ -15,6 +15,7 @@
#define _Graphic3d_PolygonOffset_HeaderFile #define _Graphic3d_PolygonOffset_HeaderFile
#include <Aspect_PolygonOffsetMode.hxx> #include <Aspect_PolygonOffsetMode.hxx>
#include <Standard_OStream.hxx>
//! Polygon offset parameters. //! Polygon offset parameters.
struct Graphic3d_PolygonOffset struct Graphic3d_PolygonOffset
@@ -33,6 +34,10 @@ struct Graphic3d_PolygonOffset
&& Factor == theOther.Factor && Factor == theOther.Factor
&& Units == theOther.Units; && Units == theOther.Units;
} }
//! Dumps the content of me on the stream <OS>.
Standard_EXPORT void Dump (Standard_OStream& OS) const;
}; };
#endif // _Graphic3d_PolygonOffset_HeaderFile #endif // _Graphic3d_PolygonOffset_HeaderFile

View File

@@ -17,6 +17,7 @@
#include <gp_Ax2.hxx> #include <gp_Ax2.hxx>
#include <Graphic3d_Vertex.hxx> #include <Graphic3d_Vertex.hxx>
#include <Font_TextFormatter.hxx>
#include <Graphic3d_HorizontalTextAlignment.hxx> #include <Graphic3d_HorizontalTextAlignment.hxx>
#include <Graphic3d_VerticalTextAlignment.hxx> #include <Graphic3d_VerticalTextAlignment.hxx>
#include <NCollection_String.hxx> #include <NCollection_String.hxx>
@@ -31,6 +32,7 @@
//! - text formatter. Formatter contains text, height and alignment parameter. //! - text formatter. Formatter contains text, height and alignment parameter.
//! //!
//! This class also has parameters of the text height and H/V alignments. //! This class also has parameters of the text height and H/V alignments.
//! More compilated formatting is available using Font_TextFormatter.
class Graphic3d_Text : public Standard_Transient class Graphic3d_Text : public Standard_Transient
{ {
DEFINE_STANDARD_RTTIEXT(Graphic3d_Text, Standard_Transient) DEFINE_STANDARD_RTTIEXT(Graphic3d_Text, Standard_Transient)
@@ -55,6 +57,12 @@ public:
//! Sets text value. //! Sets text value.
void SetText (Standard_CString theText) { myText = theText; } void SetText (Standard_CString theText) { myText = theText; }
//! @return text formatter
const Handle(Font_TextFormatter)& TextFormatter() const { return myFormatter; }
//! @return default formatter of text withing this context
void SetTextFormatter (const Handle(Font_TextFormatter)& theFormatter) { myFormatter = theFormatter; }
//! The 3D point of attachment is projected. //! The 3D point of attachment is projected.
//! If the orientation is defined, the text is written in the plane of projection. //! If the orientation is defined, the text is written in the plane of projection.
const gp_Pnt& Position() const { return myOrientation.Location(); } const gp_Pnt& Position() const { return myOrientation.Location(); }
@@ -99,6 +107,8 @@ public:
void SetVerticalAlignment (const Graphic3d_VerticalTextAlignment theJustification) { myVAlign = theJustification; } void SetVerticalAlignment (const Graphic3d_VerticalTextAlignment theJustification) { myVAlign = theJustification; }
protected: protected:
Handle(Font_TextFormatter) myFormatter; //!< text formatter
NCollection_String myText; //!< text value NCollection_String myText; //!< text value
gp_Ax2 myOrientation; //!< Text orientation in 3D space. gp_Ax2 myOrientation; //!< Text orientation in 3D space.

View File

@@ -6,5 +6,7 @@ HeaderSection_FileName.cxx
HeaderSection_FileName.hxx HeaderSection_FileName.hxx
HeaderSection_FileSchema.cxx HeaderSection_FileSchema.cxx
HeaderSection_FileSchema.hxx HeaderSection_FileSchema.hxx
HeaderSection_HeaderRecognizer.cxx
HeaderSection_HeaderRecognizer.hxx
HeaderSection_Protocol.cxx HeaderSection_Protocol.cxx
HeaderSection_Protocol.hxx HeaderSection_Protocol.hxx

View File

@@ -16,12 +16,12 @@
#include <HeaderSection_Protocol.hxx> #include <HeaderSection_Protocol.hxx>
#include <Interface_Statics.hxx> #include <Interface_Statics.hxx>
//StaticHandle(HeaderSection_Protocol, proto); StaticHandle(HeaderSection_Protocol, proto);
Handle(HeaderSection_Protocol) HeaderSection::Protocol() Handle(HeaderSection_Protocol) HeaderSection::Protocol()
{ {
//InitHandleVoid(HeaderSection_Protocol, proto); InitHandleVoid(HeaderSection_Protocol, proto);
return new HeaderSection_Protocol; return proto;
} }

View File

@@ -0,0 +1,51 @@
// Created on: 1994-06-27
// Created by: Frederic MAUPAS
// Copyright (c) 1994-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <HeaderSection_FileDescription.hxx>
#include <HeaderSection_FileName.hxx>
#include <HeaderSection_FileSchema.hxx>
#include <HeaderSection_HeaderRecognizer.hxx>
#include <Standard_Type.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(HeaderSection_HeaderRecognizer,StepData_FileRecognizer)
static TCollection_AsciiString reco_FileName ("FILE_NAME");
static TCollection_AsciiString reco_FileSchema ("FILE_SCHEMA");
static TCollection_AsciiString reco_FileDescription ("FILE_DESCRIPTION");
HeaderSection_HeaderRecognizer::HeaderSection_HeaderRecognizer ()
{ }
void HeaderSection_HeaderRecognizer::Eval
(const TCollection_AsciiString& key)
{
if (key.IsEqual(reco_FileName)) {
SetOK(new HeaderSection_FileName);
return;
}
if (key.IsEqual(reco_FileSchema)) {
SetOK(new HeaderSection_FileSchema);
return;
}
if (key.IsEqual(reco_FileDescription)) {
SetOK(new HeaderSection_FileDescription);
return;
}
}

View File

@@ -0,0 +1,66 @@
// Created on: 1994-06-27
// Created by: Frederic MAUPAS
// Copyright (c) 1994-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _HeaderSection_HeaderRecognizer_HeaderFile
#define _HeaderSection_HeaderRecognizer_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <StepData_FileRecognizer.hxx>
class TCollection_AsciiString;
class HeaderSection_HeaderRecognizer;
DEFINE_STANDARD_HANDLE(HeaderSection_HeaderRecognizer, StepData_FileRecognizer)
//! Recognizes STEP Standard Header Entities
//! (FileName, FileDescription, FileSchema)
class HeaderSection_HeaderRecognizer : public StepData_FileRecognizer
{
public:
Standard_EXPORT HeaderSection_HeaderRecognizer();
DEFINE_STANDARD_RTTIEXT(HeaderSection_HeaderRecognizer,StepData_FileRecognizer)
protected:
//! Recognizes data types of Header STEP Standard
Standard_EXPORT void Eval (const TCollection_AsciiString& key) Standard_OVERRIDE;
private:
};
#endif // _HeaderSection_HeaderRecognizer_HeaderFile

View File

@@ -21,7 +21,7 @@
IMPLEMENT_STANDARD_RTTIEXT(HeaderSection_Protocol,StepData_Protocol) IMPLEMENT_STANDARD_RTTIEXT(HeaderSection_Protocol,StepData_Protocol)
//static Standard_CString schemaName = "header_section"; static Standard_CString schemaName = "header_section";
HeaderSection_Protocol::HeaderSection_Protocol () { } HeaderSection_Protocol::HeaderSection_Protocol () { }
@@ -35,5 +35,5 @@ Handle(Standard_Type)& atype) const
else return 0; else return 0;
} }
Standard_CString HeaderSection_Protocol::SchemaName(Standard_Integer /*theShematype*/) Standard_CString HeaderSection_Protocol::SchemaName() const
{ return "header_section"; } { return schemaName; }

View File

@@ -42,7 +42,7 @@ public:
//! Returns a Case Number for each of the HeaderSection Entities //! Returns a Case Number for each of the HeaderSection Entities
Standard_EXPORT virtual Standard_Integer TypeNumber (const Handle(Standard_Type)& atype) const Standard_OVERRIDE; Standard_EXPORT virtual Standard_Integer TypeNumber (const Handle(Standard_Type)& atype) const Standard_OVERRIDE;
Standard_EXPORT virtual Standard_CString SchemaName(Standard_Integer theShematype) Standard_OVERRIDE; Standard_EXPORT virtual Standard_CString SchemaName() const Standard_OVERRIDE;

View File

@@ -877,6 +877,62 @@ static IFSelect_ReturnStatus fun27
return IFSelect_RetVoid; return IFSelect_RetVoid;
} }
static IFSelect_ReturnStatus fun28
(const Handle(IFSelect_SessionPilot)& pilot)
{
Standard_Integer argc = pilot->NbWords();
const Standard_CString arg1 = pilot->Arg(1);
const Standard_CString arg2 = pilot->Arg(2);
const Standard_CString arg3 = pilot->Arg(3);
// **** DefParam ****
Handle(Message_Messenger) sout = Message::DefaultMessenger();
if (argc < 2) {
Handle(TColStd_HSequenceOfHAsciiString) li = Interface_Static::Items();
Standard_Integer i,nb = li->Length();
sout<<" List of parameters : "<<nb<<" items :"<<Message_EndLine;
for (i = 1; i <= nb; i ++) sout<<" "<<li->Value(i)->ToCString();
sout<<Message_EndLine<<" defparam name_param to known more about one"<<Message_EndLine;
sout<<" defparam nom_param e options to edit a definition"<<Message_EndLine;
} else if (argc == 2) {
sout<<" Definition of Parameter : "<<arg1<<Message_EndLine;
Handle(Interface_Static) unst = Interface_Static::Static (arg1);
if (unst.IsNull()) sout<<" undefined"<<Message_EndLine;
else unst->Print(sout);
return IFSelect_RetVoid;
} else if (arg2[0] == 'i') {
// initialisation : arg1=nompar a2='i' a3=family a4=type [a5=val]
if (argc < 5) { sout<<" name init family type [valinit]"<<Message_EndLine; return IFSelect_RetVoid; }
char typ = (pilot->Arg(4))[0];
Standard_Boolean ok= (argc==5 ? Interface_Static::Init(arg3,arg1,typ) :
Interface_Static::Init(arg3,arg1,typ,pilot->Arg(5)));
return (ok ? IFSelect_RetDone : IFSelect_RetFail);
} else if (arg2[0] == 'e') {
// edition : arg1=nompar arg2='e' arg3=option arg4...=parametres option
char comm[100];
if (argc < 4) {
sout<<" give name and options ! Options (according type), 1 a time\n"
<<" imin ival / imax ival / rmin rval / rmax rval /\n"
<<" enum stnum / enum stnum match / eval e1 e2 e3 ... (maxi 10)\n"
<<Message_EndLine;
return IFSelect_RetVoid;
}
if (argc > 4) sout<<"Only the command and ONE more arg are considered"<<Message_EndLine;
sprintf(comm,"%s %s",pilot->Arg(3),pilot->Arg(4));
sout<<"Editing parameter : "<<arg1<<" , by command : "<<comm<<Message_EndLine;
Handle(Interface_Static) unst = Interface_Static::Static (arg1);
if (unst.IsNull()) { sout<<arg1<<" undefined"<<Message_EndLine; return IFSelect_RetError; }
if (Interface_Static::Init(unst->Family(),arg1,'&',comm))
{ sout<<"Editing done"<<Message_EndLine; return IFSelect_RetDone; }
else { sout<<"Command not processed : "<<comm<<Message_EndLine; return IFSelect_RetFail; }
}
sout<<"Unknown Option : "<<arg2<<Message_EndLine;
return IFSelect_RetVoid;
}
static IFSelect_ReturnStatus fun29 static IFSelect_ReturnStatus fun29
(const Handle(IFSelect_SessionPilot)& pilot) (const Handle(IFSelect_SessionPilot)& pilot)
{ {
@@ -2438,6 +2494,7 @@ void IFSelect_Functions::Init()
IFSelect_Act::AddFunc("xsave","filename:string : sauve items-session",fun25); IFSelect_Act::AddFunc("xsave","filename:string : sauve items-session",fun25);
IFSelect_Act::AddFunc("xrestore","filename:string : restaure items-session",fun26); IFSelect_Act::AddFunc("xrestore","filename:string : restaure items-session",fun26);
IFSelect_Act::AddFunc("param","nompar:string : displays parameter value; + nompar val : changes it",fun27); IFSelect_Act::AddFunc("param","nompar:string : displays parameter value; + nompar val : changes it",fun27);
IFSelect_Act::AddFunc("defparam","nompar:string : display def. param; also : nompar edit, nompar init",fun28);
IFSelect_Act::AddFunc("sentfiles","Lists files sent from last Load",fun29); IFSelect_Act::AddFunc("sentfiles","Lists files sent from last Load",fun29);
IFSelect_Act::AddFunc("fileprefix","prefix:string : definit File Prefix",fun30); IFSelect_Act::AddFunc("fileprefix","prefix:string : definit File Prefix",fun30);

View File

@@ -264,8 +264,8 @@ IFSelect_ModelCopier::IFSelect_ModelCopier () { }
{ {
Interface_CheckIterator checks; Interface_CheckIterator checks;
checks.SetName ("X-STEP WorkSession : Send All"); checks.SetName ("X-STEP WorkSession : Send All");
//Message::DefaultMessenger() << Message::DefaultMessenger() <<
// "** WorkSession : Sending all data"<<Message_EndLine; "** WorkSession : Sending all data"<<Message_EndLine;
Handle(Interface_InterfaceModel) model = G.Model(); Handle(Interface_InterfaceModel) model = G.Model();
if (model.IsNull() || protocol.IsNull() || WL.IsNull()) return checks; if (model.IsNull() || protocol.IsNull() || WL.IsNull()) return checks;

View File

@@ -71,6 +71,7 @@
#include <Interface_ReportEntity.hxx> #include <Interface_ReportEntity.hxx>
#include <Interface_ShareFlags.hxx> #include <Interface_ShareFlags.hxx>
#include <Interface_ShareTool.hxx> #include <Interface_ShareTool.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx> #include <Message.hxx>
#include <Message_Messenger.hxx> #include <Message_Messenger.hxx>
#include <OSD_Path.hxx> #include <OSD_Path.hxx>
@@ -211,7 +212,7 @@ IFSelect_ReturnStatus IFSelect_WorkSession::ReadFile
{ {
if (thelibrary.IsNull()) return IFSelect_RetVoid; if (thelibrary.IsNull()) return IFSelect_RetVoid;
if (theprotocol.IsNull()) return IFSelect_RetVoid; if (theprotocol.IsNull()) return IFSelect_RetVoid;
Handle(Interface_InterfaceModel) model =myModel; Handle(Interface_InterfaceModel) model;
IFSelect_ReturnStatus status = IFSelect_RetVoid; IFSelect_ReturnStatus status = IFSelect_RetVoid;
try { try {
OCC_CATCH_SIGNALS OCC_CATCH_SIGNALS
@@ -1075,6 +1076,30 @@ Standard_Integer IFSelect_WorkSession::NextIdentForLabel
// ################################################################# // #################################################################
// .... Parametres (Int et Text) .... // .... Parametres (Int et Text) ....
//=======================================================================
//function :
//purpose :
//=======================================================================
Handle(Standard_Transient) IFSelect_WorkSession::NewParamFromStatic
(const Standard_CString statname, const Standard_CString name)
{
Handle(Standard_Transient) param;
Handle(Interface_Static) stat = Interface_Static::Static(statname);
if (stat.IsNull()) return param;
if (stat->Type() == Interface_ParamInteger) {
Handle(IFSelect_IntParam) intpar = new IFSelect_IntParam;
intpar->SetStaticName (statname);
param = intpar;
} else {
param = stat->HStringValue();
}
if (param.IsNull()) return param;
if ( AddNamedItem (name, param) == 0 ) param.Nullify();
return param;
}
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :
@@ -1676,12 +1701,11 @@ Standard_Integer IFSelect_WorkSession::RunTransformer
{ {
Standard_Integer effect = 0; Standard_Integer effect = 0;
if (transf.IsNull() || !IsLoaded()) return effect; if (transf.IsNull() || !IsLoaded()) return effect;
Handle(Interface_InterfaceModel) newmod; // Null au depart Handle(Interface_InterfaceModel) newmod; // Null au depart
Interface_CheckIterator checks; Interface_CheckIterator checks;
checks.SetName("X-STEP WorkSession : RunTransformer"); checks.SetName("X-STEP WorkSession : RunTransformer");
Standard_Boolean res = transf->Perform Standard_Boolean res = transf->Perform
(thegraph->Graph(),theprotocol,checks,myModel); (thegraph->Graph(),theprotocol,checks,newmod);
if (!checks.IsEmpty(Standard_False)) { if (!checks.IsEmpty(Standard_False)) {
Handle(Message_Messenger) sout = Message::DefaultMessenger(); Handle(Message_Messenger) sout = Message::DefaultMessenger();
@@ -3031,7 +3055,7 @@ Handle(IFSelect_Selection) IFSelect_WorkSession::GiveSelection
} }
Handle(IFSelect_Selection) sel; Handle(IFSelect_Selection) sel;
if (np >= 0) if (np >= 0)
{ {
nomsel[np] = 0; nomsel[np] = 0;
} }

View File

@@ -407,6 +407,13 @@ public:
//! - other values are ignored //! - other values are ignored
Standard_EXPORT Standard_Integer NextIdentForLabel (const Standard_CString label, const Standard_Integer id, const Standard_Integer mode = 0) const; Standard_EXPORT Standard_Integer NextIdentForLabel (const Standard_CString label, const Standard_Integer id, const Standard_Integer mode = 0) const;
//! Creates a parameter as being bound to a Static
//! If the Static is Integer, this creates an IntParam bound to
//! it by its name. Else this creates a String which is the value
//! of the Static.
//! Returns a null handle if <statname> is unknown as a Static
Standard_EXPORT Handle(Standard_Transient) NewParamFromStatic (const Standard_CString statname, const Standard_CString name = "");
//! Returns an IntParam, given its Ident in the Session //! Returns an IntParam, given its Ident in the Session
//! Null result if <id> is not suitable for an IntParam //! Null result if <id> is not suitable for an IntParam
//! (undefined, or defined for another kind of variable) //! (undefined, or defined for another kind of variable)

View File

@@ -39,8 +39,10 @@
#endif #endif
#include <stdio.h> #include <stdio.h>
static int errh = 1;
void Interface_CheckTool::raisecheck (Standard_Failure& theException,Handle(Interface_Check)& ach)
static void raisecheck (Standard_Failure& theException,Handle(Interface_Check)& ach)
{ {
char mess[100]; char mess[100];
sprintf (mess,"** Exception Raised during Check : %s **", sprintf (mess,"** Exception Raised during Check : %s **",
@@ -73,7 +75,6 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
theshare (model,protocol) theshare (model,protocol)
{ {
thestat = 0; thestat = 0;
errh = 1;
} }
@@ -87,7 +88,6 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
{ {
thestat = 0; thestat = 0;
thegtool->Reservate(model->NbEntities()); thegtool->Reservate(model->NbEntities());
errh = 1;
} }
@@ -99,7 +99,6 @@ Interface_CheckTool::Interface_CheckTool(const Handle(Interface_InterfaceModel)&
Interface_CheckTool::Interface_CheckTool(const Interface_Graph& graph) Interface_CheckTool::Interface_CheckTool(const Interface_Graph& graph)
: thegtool(graph.Model()->GTool()) , theshare (graph) : thegtool(graph.Model()->GTool()) , theshare (graph)
{ {
errh = 1;
} }
@@ -111,7 +110,6 @@ Interface_CheckTool::Interface_CheckTool(const Interface_Graph& graph)
Interface_CheckTool::Interface_CheckTool(const Handle(Interface_HGraph)& hgraph) Interface_CheckTool::Interface_CheckTool(const Handle(Interface_HGraph)& hgraph)
: thegtool(hgraph->Graph().Model()->GTool()) , theshare (hgraph) : thegtool(hgraph->Graph().Model()->GTool()) , theshare (hgraph)
{ {
errh = 1;
} }
@@ -128,10 +126,10 @@ void Interface_CheckTool::FillCheck(const Handle(Standard_Transient)& ent,
Standard_Integer CN; Standard_Integer CN;
if (thegtool->Select(ent,module,CN)) { if (thegtool->Select(ent,module,CN)) {
// Sans try/catch (fait par l appelant, evite try/catch en boucle) // Sans try/catch (fait par l appelant, evite try/catch en boucle)
//if (!errh) { if (!errh) {
// module->CheckCase(CN,ent,sh,ach); module->CheckCase(CN,ent,sh,ach);
// return; return;
//} }
// Avec try/catch // Avec try/catch
try { try {
OCC_CATCH_SIGNALS OCC_CATCH_SIGNALS
@@ -202,7 +200,7 @@ Handle(Interface_Check) Interface_CheckTool::Check(const Standard_Integer num)
Handle(Interface_InterfaceModel) model = theshare.Model(); Handle(Interface_InterfaceModel) model = theshare.Model();
Handle(Standard_Transient) ent = model->Value(num); Handle(Standard_Transient) ent = model->Value(num);
Handle(Interface_Check) ach = new Interface_Check(ent); // non filtre par "Warning" : tel quel Handle(Interface_Check) ach = new Interface_Check(ent); // non filtre par "Warning" : tel quel
//errh = 1; errh = 1;
FillCheck(ent,theshare,ach); FillCheck(ent,theshare,ach);
return ach; return ach;
} }
@@ -223,13 +221,13 @@ void Interface_CheckTool::CheckSuccess (const Standard_Boolean reset)
("Interface Model : Global Check"); ("Interface Model : Global Check");
Handle(Interface_InterfaceModel) model = theshare.Model(); Handle(Interface_InterfaceModel) model = theshare.Model();
if (model->GlobalCheck()->NbFails() > 0) throw Interface_CheckFailure("Interface Model : Global Check"); if (model->GlobalCheck()->NbFails() > 0) throw Interface_CheckFailure("Interface Model : Global Check");
//Handle(Interface_Check) modchk = new Interface_Check; Handle(Interface_Check) modchk = new Interface_Check;
//model->VerifyCheck(modchk); model->VerifyCheck(modchk);
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),modchk); if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),modchk);
//if (modchk->HasFailed()) throw Interface_CheckFailure("Interface Model : Verify Check"); if (modchk->HasFailed()) throw Interface_CheckFailure("Interface Model : Verify Check");
//if (thestat == 3) return; // tout teste et ca passe if (thestat == 3) return; // tout teste et ca passe
//errh = 0; // Pas de try/catch, car justement on raise errh = 0; // Pas de try/catch, car justement on raise
Standard_Integer nb = model->NbEntities(); Standard_Integer nb = model->NbEntities();
for (Standard_Integer i = 1; i <= nb; i ++) { for (Standard_Integer i = 1; i <= nb; i ++) {
if (model->IsErrorEntity(i)) throw Interface_CheckFailure("Interface Model : an Entity is recorded as Erroneous"); if (model->IsErrorEntity(i)) throw Interface_CheckFailure("Interface Model : an Entity is recorded as Erroneous");
@@ -264,13 +262,13 @@ Interface_CheckIterator Interface_CheckTool::CompleteCheckList ()
Interface_CheckIterator res; Interface_CheckIterator res;
res.SetModel(model); res.SetModel(model);
Handle(Interface_Check) globch = model->GlobalCheck(); // GlobalCheck Statique Handle(Interface_Check) globch = model->GlobalCheck(); // GlobalCheck Statique
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch); if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
//model->VerifyCheck(globch); // GlobalCheck Dynamique model->VerifyCheck(globch); // GlobalCheck Dynamique
//if (globch->HasFailed() || globch->HasWarnings()) res.Add(globch,0); if (globch->HasFailed() || globch->HasWarnings()) res.Add(globch,0);
//if (globch->HasFailed()) thestat |= 12; if (globch->HasFailed()) thestat |= 12;
Standard_Integer i=0,n0 = 1, nb = model->NbEntities(); Standard_Integer i=0,n0 = 1, nb = model->NbEntities();
//errh = 0; errh = 0;
while (n0 <= nb) { while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check; Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent; Handle(Standard_Transient) ent;
@@ -318,11 +316,11 @@ Interface_CheckIterator Interface_CheckTool::CheckList ()
res.SetModel(model); res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities(); Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
Handle(Interface_Check) globch = model->GlobalCheck(); Handle(Interface_Check) globch = model->GlobalCheck();
//if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch); if (!model->Protocol().IsNull()) model->Protocol()->GlobalCheck (theshare.Graph(),globch);
//model->VerifyCheck(globch); model->VerifyCheck(globch);
//if (globch->HasFailed()) { thestat |= 12; res.Add(globch,0); } if (globch->HasFailed()) { thestat |= 12; res.Add(globch,0); }
//errh = 0; errh = 0;
while (n0 <= nb) { while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check; Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent; Handle(Standard_Transient) ent;
@@ -370,7 +368,7 @@ Interface_CheckIterator Interface_CheckTool::AnalyseCheckList ()
res.SetModel(model); res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities(); Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
//errh = 0; errh = 0;
while (n0 <= nb) { while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check; Handle(Interface_Check) ach = new Interface_Check;
try { try {
@@ -410,7 +408,7 @@ Interface_CheckIterator Interface_CheckTool::VerifyCheckList ()
res.SetModel(model); res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities(); Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
//errh = 0; errh = 0;
while (n0 <= nb) { while (n0 <= nb) {
Handle(Standard_Transient) ent; Handle(Standard_Transient) ent;
Handle(Interface_Check) ach = new Interface_Check; Handle(Interface_Check) ach = new Interface_Check;
@@ -454,7 +452,7 @@ Interface_CheckIterator Interface_CheckTool::WarningCheckList ()
res.SetModel(model); res.SetModel(model);
Standard_Integer i=0, n0 = 1, nb = model->NbEntities(); Standard_Integer i=0, n0 = 1, nb = model->NbEntities();
//errh = 0; errh = 0;
while (n0 <= nb) { while (n0 <= nb) {
Handle(Interface_Check) ach = new Interface_Check; Handle(Interface_Check) ach = new Interface_Check;
Handle(Standard_Transient) ent; Handle(Standard_Transient) ent;

View File

@@ -131,12 +131,10 @@ protected:
private: private:
Standard_EXPORT void raisecheck(Standard_Failure& theException, Handle(Interface_Check)& ach);
Handle(Interface_GTool) thegtool; Handle(Interface_GTool) thegtool;
Interface_ShareTool theshare; Interface_ShareTool theshare;
Standard_Integer thestat; Standard_Integer thestat;
Standard_Integer errh;
}; };

View File

@@ -66,7 +66,7 @@ Interface_FileReaderTool::Interface_FileReaderTool ()
{ {
themessenger = Message::DefaultMessenger(); themessenger = Message::DefaultMessenger();
theerrhand = Standard_True; theerrhand = Standard_True;
thetrace = 0; thetrace = 1;
thenbrep0 = thenbreps = 0; thenbrep0 = thenbreps = 0;
} }
@@ -334,11 +334,8 @@ void Interface_FileReaderTool::LoadModel
} }
catch (Standard_Failure const&) { catch (Standard_Failure const&) {
// Sendinf of message : Internal error during the header reading // Sendinf of message : Internal error during the header reading
if (!TF.IsNull()) Message_Msg Msg11("XSTEP_11");
{ TF->Send (Msg11, Message_Info);
Message_Msg Msg11("XSTEP_11");
TF->Send(Msg11, Message_Info);
}
} }
} }
else else
@@ -370,12 +367,9 @@ void Interface_FileReaderTool::LoadModel
// .. Fin Lecture .. // .. Fin Lecture ..
if (anent.IsNull()) { if (anent.IsNull()) {
// Sending of message : Number of ignored Null Entities // Sending of message : Number of ignored Null Entities
if (!TF.IsNull()) Message_Msg Msg21("XSTEP_21");
{ Msg21.Arg(amodel->NbEntities());
Message_Msg Msg21("XSTEP_21"); TF->Send (Msg21, Message_Info);
Msg21.Arg(amodel->NbEntities());
TF->Send(Msg21, Message_Info);
}
continue; continue;
} }
// LoadedEntity fait AddEntity MAIS PAS SetReport (en bloc a la fin) // LoadedEntity fait AddEntity MAIS PAS SetReport (en bloc a la fin)
@@ -398,18 +392,13 @@ void Interface_FileReaderTool::LoadModel
//:abv 03Apr00: anent is actually a previous one: if (anent.IsNull()) //:abv 03Apr00: anent is actually a previous one: if (anent.IsNull())
anent = thereader->BoundEntity(num); anent = thereader->BoundEntity(num);
if (anent.IsNull()) { if (anent.IsNull()) {
if (thetrace > 0) if (thetrace > 0)
{ {
// Sending of message : Number of ignored Null Entities // Sending of message : Number of ignored Null Entities
if (!TF.IsNull()) Message_Msg Msg21("XSTEP_21");
{ Msg21.Arg(amodel->NbEntities()+1);
TF->Send (Msg21, Message_Info);
Message_Msg Msg21("XSTEP_21"); continue;
Msg21.Arg(amodel->NbEntities() + 1);
TF->Send(Msg21, Message_Info);
}
continue;
} }
} }
/*Handle(Interface_Check)*/ ach = new Interface_Check(anent); /*Handle(Interface_Check)*/ ach = new Interface_Check(anent);
@@ -419,13 +408,10 @@ void Interface_FileReaderTool::LoadModel
ach->SendFail (Msg278); ach->SendFail (Msg278);
if (ierr == 2) { if (ierr == 2) {
// Sending of message : reading of entity failed // Sending of message : reading of entity failed
if (!TF.IsNull()) Message_Msg Msg22("XSTEP_22");
{ Msg22.Arg(amodel->StringLabel(anent));
Message_Msg Msg22("XSTEP_22"); TF->Send (Msg22, Message_Info);
Msg22.Arg(amodel->StringLabel(anent));
TF->Send(Msg22, Message_Info);
}
return; return;
} }
@@ -434,13 +420,10 @@ void Interface_FileReaderTool::LoadModel
ierr = 1; ierr = 1;
// ce qui serait bien ici serait de recuperer le texte de l erreur pour ach ... // ce qui serait bien ici serait de recuperer le texte de l erreur pour ach ...
if (thetrace > 0) { if (thetrace > 0) {
// Sending of message : recovered entity // Sending of message : recovered entity
if (!TF.IsNull()) Message_Msg Msg23("XSTEP_23");
{ Msg23.Arg(num);
Message_Msg Msg23("XSTEP_23"); TF->Send (Msg23, Message_Info);
Msg23.Arg(num);
TF->Send(Msg23, Message_Info);
}
} }
// Finalement, on charge une Entite Inconnue // Finalement, on charge une Entite Inconnue
@@ -461,12 +444,9 @@ void Interface_FileReaderTool::LoadModel
else { else {
if (thetrace > 0) { if (thetrace > 0) {
// Sending of message : reading of entity failed // Sending of message : reading of entity failed
if (!TF.IsNull()) Message_Msg Msg22("XSTEP_22");
{ Msg22.Arg(amodel->StringLabel(anent));
Message_Msg Msg22("XSTEP_22"); TF->Send (Msg22, Message_Info);
Msg22.Arg(amodel->StringLabel(anent));
TF->Send(Msg22, Message_Info);
}
} }
// On garde <rep> telle quelle : pas d analyse fichier supplementaire, // On garde <rep> telle quelle : pas d analyse fichier supplementaire,
// Mais la phase preliminaire eventuelle est conservee // Mais la phase preliminaire eventuelle est conservee
@@ -480,12 +460,9 @@ void Interface_FileReaderTool::LoadModel
if (thetrace > 0) if (thetrace > 0)
{ {
// Sending of message : report // Sending of message : report
if (!TF.IsNull()) Message_Msg Msg24("XSTEP_24");
{ Msg24.Arg(thenbreps);
Message_Msg Msg24("XSTEP_24"); TF->Send (Msg24, Message_Info);
Msg24.Arg(thenbreps);
TF->Send(Msg24, Message_Info);
}
} }
amodel->Reservate (-thenbreps-10); amodel->Reservate (-thenbreps-10);
thenbreps = thereports->Upper(); thenbreps = thereports->Upper();
@@ -506,11 +483,8 @@ void Interface_FileReaderTool::LoadModel
} }
catch (Standard_Failure const&) { catch (Standard_Failure const&) {
// Sendinf of message : Internal error during the header reading // Sendinf of message : Internal error during the header reading
if (!TF.IsNull()) Message_Msg Msg11("XSTEP_11");
{ TF->Send (Msg11, Message_Info);
Message_Msg Msg11("XSTEP_11");
TF->Send(Msg11, Message_Info);
}
} }
} }
else else
@@ -539,13 +513,10 @@ Handle(Standard_Transient) Interface_FileReaderTool::LoadedEntity
// Trace Entite Inconnue // Trace Entite Inconnue
if (thetrace >= 2 && theproto->IsUnknownEntity(anent)) { if (thetrace >= 2 && theproto->IsUnknownEntity(anent)) {
Handle(Message_Messenger) TF = Messenger(); Handle(Message_Messenger) TF = Messenger();
if (!TF.IsNull()) Message_Msg Msg22("XSTEP_22");
{ // Sending of message : reading of entity failed
Message_Msg Msg22("XSTEP_22"); Msg22.Arg(themodel->StringLabel(anent)->String());
// Sending of message : reading of entity failed TF->Send (Msg22, Message_Info);
Msg22.Arg(themodel->StringLabel(anent)->String());
TF->Send(Msg22, Message_Info);
}
} }
// .. Chargement proprement dit : Specifique de la Norme .. // .. Chargement proprement dit : Specifique de la Norme ..
AnalyseRecord(num,anent,ach); AnalyseRecord(num,anent,ach);
@@ -574,7 +545,7 @@ Handle(Standard_Transient) Interface_FileReaderTool::LoadedEntity
} }
thereports->SetValue(irep,rep); thereports->SetValue(irep,rep);
if ( thetrace >= 2 && !Messenger().IsNull()) if ( thetrace >= 2)
ach->Print (Messenger(),2); ach->Print (Messenger(),2);
} }

View File

@@ -1040,75 +1040,3 @@ Handle(TColStd_HSequenceOfHAsciiString) Interface_InterfaceModel::ListTemplates
} }
return list; return list;
} }
//=======================================================================
//function : GetParam
//purpose :
//=======================================================================
Handle(Interface_Static) Interface_InterfaceModel::GetParam
(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam;
if (myParamMap.IsBound(theParamName))
{
Handle(Standard_Transient) result;
myParamMap.Find(theParamName, result);
if (!result.IsNull())
aParam = Handle(Interface_Static)::DownCast(result);
}
if (aParam.IsNull())
{
#ifdef OCCT_DEBUG
cout << "Warning: Incorrect parameter :" << name << endl;
#endif
}
return aParam;
}
//=======================================================================
//function : GetParam
//purpose :
//=======================================================================
void Interface_InterfaceModel::AddParam
(const Standard_CString theParamName, Handle(Interface_Static)& theParam)
{
myParamMap.Bind(theParamName, theParam);
}
//=======================================================================
//function : AllParameters
//purpose :
//=======================================================================
const NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>& Interface_InterfaceModel::AllParameters()
{
return myParamMap;
}
//=======================================================================
//function : IVal
//purpose :
//=======================================================================
Standard_Integer Interface_InterfaceModel::IVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? 0 : aParam->IntegerValue());
}
//=======================================================================
//function : RVal
//purpose :
//=======================================================================
Standard_Real Interface_InterfaceModel::RVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? 0.0 : aParam->RealValue());
}
//=======================================================================
//function : CVal
//purpose :
//=======================================================================
Standard_CString Interface_InterfaceModel::CVal(const Standard_CString theParamName) const
{
Handle(Interface_Static) aParam = GetParam(theParamName);
return (aParam.IsNull() ? "" : aParam->CStringValue());
}

View File

@@ -27,7 +27,6 @@
#include <Standard_Type.hxx> #include <Standard_Type.hxx>
#include <Standard_CString.hxx> #include <Standard_CString.hxx>
#include <Interface_DataState.hxx> #include <Interface_DataState.hxx>
#include <Interface_Static.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx> #include <TColStd_HSequenceOfHAsciiString.hxx>
class Interface_Check; class Interface_Check;
class TCollection_HAsciiString; class TCollection_HAsciiString;
@@ -399,27 +398,17 @@ public:
//! Returns the complete list of names attached to template models //! Returns the complete list of names attached to template models
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) ListTemplates(); Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) ListTemplates();
//! Returns parameter for translation by its name
Standard_EXPORT Handle(Interface_Static) GetParam(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Integer IVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_Real RVal(const Standard_CString theParamName) const;
Standard_EXPORT Standard_CString CVal(const Standard_CString theParamName) const;
//! Adds parameters in the mopdel
Standard_EXPORT void AddParam(const Standard_CString theParamName, Handle(Interface_Static)& theParam);
//! Returns all available parameters for translation
Standard_EXPORT const NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)>& AllParameters();
DEFINE_STANDARD_RTTIEXT(Interface_InterfaceModel,Standard_Transient) DEFINE_STANDARD_RTTIEXT(Interface_InterfaceModel,Standard_Transient)
protected: protected:
//! Defines empty InterfaceModel, ready to be filled //! Defines empty InterfaceModel, ready to be filled
Standard_EXPORT Interface_InterfaceModel(); Standard_EXPORT Interface_InterfaceModel();
NCollection_DataMap<TCollection_AsciiString, Handle(Standard_Transient)> myParamMap;
private: private:

View File

@@ -19,7 +19,6 @@
#include <Standard_Transient.hxx> #include <Standard_Transient.hxx>
#include <Standard_Type.hxx> #include <Standard_Type.hxx>
#include <TCollection_HAsciiString.hxx> #include <TCollection_HAsciiString.hxx>
#include <Standard_Mutex.hxx>
#include <stdio.h> #include <stdio.h>
IMPLEMENT_STANDARD_RTTIEXT(Interface_Static,Interface_TypedValue) IMPLEMENT_STANDARD_RTTIEXT(Interface_Static,Interface_TypedValue)
@@ -130,6 +129,8 @@ Standard_Boolean Interface_Static::UpdatedStatus () const
return theupdate; return theupdate;
} }
// ####################################################################### // #######################################################################
// ######### DICTIONNAIRE DES STATICS (static sur Static) ########## // ######### DICTIONNAIRE DES STATICS (static sur Static) ##########
@@ -152,6 +153,7 @@ Standard_Boolean Interface_Static::Init
return Standard_True; return Standard_True;
} }
Standard_Boolean Interface_Static::Init Standard_Boolean Interface_Static::Init
(const Standard_CString family, const Standard_CString name, (const Standard_CString family, const Standard_CString name,
const Standard_Character type, const Standard_CString init) const Standard_Character type, const Standard_CString init)
@@ -168,7 +170,30 @@ Standard_Boolean Interface_Static::Init
case '&' : { case '&' : {
Handle(Interface_Static) unstat = Interface_Static::Static(name); Handle(Interface_Static) unstat = Interface_Static::Static(name);
if (unstat.IsNull()) return Standard_False; if (unstat.IsNull()) return Standard_False;
return Interface_Static::InitValues(unstat, init); // Editions : init donne un petit texte d edition, en 2 termes "cmd var" :
// imin <ival> imax <ival> rmin <rval> rmax <rval> unit <def>
// enum <from> ematch <from> eval <cval>
Standard_Integer i,iblc = 0;
for (i = 0; init[i] != '\0'; i ++) if (init[i] == ' ') iblc = i+1;
// Reconnaissance du sous-cas et aiguillage
if (init[0] == 'i' && init[2] == 'i')
unstat->SetIntegerLimit (Standard_False,atoi(&init[iblc]));
else if (init[0] == 'i' && init[2] == 'a')
unstat->SetIntegerLimit (Standard_True ,atoi(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'i')
unstat->SetRealLimit (Standard_False,Atof(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'a')
unstat->SetRealLimit (Standard_True ,Atof(&init[iblc]));
else if (init[0] == 'u')
unstat->SetUnitDef (&init[iblc]);
else if (init[0] == 'e' && init[1] == 'm')
unstat->StartEnum (atoi(&init[iblc]),Standard_True);
else if (init[0] == 'e' && init[1] == 'n')
unstat->StartEnum (atoi(&init[iblc]),Standard_False);
else if (init[0] == 'e' && init[1] == 'v')
unstat->AddEnum (&init[iblc]);
else return Standard_False;
return Standard_True;
} }
default : return Standard_False; default : return Standard_False;
} }
@@ -180,44 +205,13 @@ Standard_Boolean Interface_Static::Init
return Standard_True; return Standard_True;
} }
Standard_Boolean Interface_Static::InitValues(Handle(Interface_Static)& theStatic, const Standard_CString init)
{
// Editions : init donne un petit texte d edition, en 2 termes "cmd var" :
// imin <ival> imax <ival> rmin <rval> rmax <rval> unit <def>
// enum <from> ematch <from> eval <cval>
Standard_Integer i, iblc = 0;
for (i = 0; init[i] != '\0'; i++) if (init[i] == ' ') iblc = i + 1;
// Reconnaissance du sous-cas et aiguillage
if (init[0] == 'i' && init[2] == 'i')
theStatic->SetIntegerLimit(Standard_False, atoi(&init[iblc]));
else if (init[0] == 'i' && init[2] == 'a')
theStatic->SetIntegerLimit(Standard_True, atoi(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'i')
theStatic->SetRealLimit(Standard_False, Atof(&init[iblc]));
else if (init[0] == 'r' && init[2] == 'a')
theStatic->SetRealLimit(Standard_True, Atof(&init[iblc]));
else if (init[0] == 'u')
theStatic->SetUnitDef(&init[iblc]);
else if (init[0] == 'e' && init[1] == 'm')
theStatic->StartEnum(atoi(&init[iblc]), Standard_True);
else if (init[0] == 'e' && init[1] == 'n')
theStatic->StartEnum(atoi(&init[iblc]), Standard_False);
else if (init[0] == 'e' && init[1] == 'v')
theStatic->AddEnum(&init[iblc]);
else return Standard_False;
return Standard_True;
}
Handle(Interface_Static) Interface_Static::Static Handle(Interface_Static) Interface_Static::Static
(const Standard_CString name) (const Standard_CString name)
{ {
static Standard_Mutex aPars; Handle(Standard_Transient) result;
{ MoniTool_TypedValue::Stats().Find(name, result);
Standard_Mutex::Sentry aLock(aPars); return Handle(Interface_Static)::DownCast(result);
Handle(Standard_Transient) result;
MoniTool_TypedValue::Stats().Find(name, result);
return Handle(Interface_Static)::DownCast(result);
}
} }

View File

@@ -130,9 +130,6 @@ public:
//! Returns False if <type> does not match this list //! Returns False if <type> does not match this list
Standard_EXPORT static Standard_Boolean Init (const Standard_CString family, const Standard_CString name, const Standard_Character type, const Standard_CString init = ""); Standard_EXPORT static Standard_Boolean Init (const Standard_CString family, const Standard_CString name, const Standard_Character type, const Standard_CString init = "");
//! Edit current <theStatic> with some parameter <init>
Standard_EXPORT static Standard_Boolean InitValues(Handle(Interface_Static)& theStatic, const Standard_CString init);
//! Returns a Static from its name. Null Handle if not present //! Returns a Static from its name. Null Handle if not present
Standard_EXPORT static Handle(Interface_Static) Static (const Standard_CString name); Standard_EXPORT static Handle(Interface_Static) Static (const Standard_CString name);
@@ -238,7 +235,7 @@ public:
//! Returns False if <name> is not present //! Returns False if <name> is not present
Standard_EXPORT static Standard_Boolean IsUpdated (const Standard_CString name); Standard_EXPORT static Standard_Boolean IsUpdated (const Standard_CString name);
//! Returns a list of names of statics: //! Returns a list of names of statics :
//! <mode> = 0 (D) : criter is for family //! <mode> = 0 (D) : criter is for family
//! <mode> = 1 : criter is regexp on names, takes final items //! <mode> = 1 : criter is regexp on names, takes final items
//! (ignore wild cards) //! (ignore wild cards)
@@ -253,8 +250,7 @@ public:
//! //!
//! This allows for instance to set new values after having loaded //! This allows for instance to set new values after having loaded
//! or reloaded a resource, then to update them as required //! or reloaded a resource, then to update them as required
Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) Items (const Standard_Integer mode = 0, Standard_EXPORT static Handle(TColStd_HSequenceOfHAsciiString) Items (const Standard_Integer mode = 0, const Standard_CString criter = "");
const Standard_CString criter = "");
//! Initializes all standard static parameters, which can be used //! Initializes all standard static parameters, which can be used
//! by every function. statics specific of a norm or a function //! by every function. statics specific of a norm or a function

View File

@@ -1,8 +1,21 @@
Message.cxx Message.cxx
Message.hxx Message.hxx
Message_Alert.cxx
Message_Alert.hxx
Message_AlertExtended.cxx
Message_AlertExtended.hxx
Message_Alerts.hxx
Message_Algorithm.cxx Message_Algorithm.cxx
Message_Algorithm.hxx Message_Algorithm.hxx
Message_Algorithm.lxx Message_Algorithm.lxx
Message_Attribute.cxx
Message_Attribute.hxx
Message_AttributeObject.cxx
Message_AttributeObject.hxx
Message_AttributeStream.cxx
Message_AttributeStream.hxx
Message_CompositeAlerts.cxx
Message_CompositeAlerts.hxx
Message_ExecStatus.hxx Message_ExecStatus.hxx
Message_Gravity.hxx Message_Gravity.hxx
Message_HArrayOfMsg.hxx Message_HArrayOfMsg.hxx
@@ -15,6 +28,9 @@ Message_Msg.hxx
Message_Msg.lxx Message_Msg.lxx
Message_MsgFile.cxx Message_MsgFile.cxx
Message_MsgFile.hxx Message_MsgFile.hxx
Message_PerfMeter.cxx
Message_PerfMeter.hxx
Message_PerfMeterMode.hxx
Message_Printer.cxx Message_Printer.cxx
Message_Printer.hxx Message_Printer.hxx
Message_PrinterOStream.cxx Message_PrinterOStream.cxx
@@ -32,8 +48,8 @@ Message_SequenceOfPrinters.hxx
Message_SequenceOfProgressScale.hxx Message_SequenceOfProgressScale.hxx
Message_Status.hxx Message_Status.hxx
Message_StatusType.hxx Message_StatusType.hxx
Message_Alert.cxx
Message_Alert.hxx
Message_ListOfAlert.hxx Message_ListOfAlert.hxx
Message_Report.cxx Message_Report.cxx
Message_Report.hxx Message_Report.hxx
Message_ReportCallBack.cxx
Message_ReportCallBack.hxx

View File

@@ -18,7 +18,6 @@
#include <Message.hxx> #include <Message.hxx>
#include <Message_Messenger.hxx> #include <Message_Messenger.hxx>
#include <TCollection_AsciiString.hxx> #include <TCollection_AsciiString.hxx>
#include <Standard_Mutex.hxx>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -28,8 +27,6 @@
//======================================================================= //=======================================================================
const Handle(Message_Messenger)& Message::DefaultMessenger () const Handle(Message_Messenger)& Message::DefaultMessenger ()
{ {
static Standard_Mutex aMutex;
Standard_Mutex::Sentry aLock(aMutex);
static Handle(Message_Messenger) aMessenger = new Message_Messenger; static Handle(Message_Messenger) aMessenger = new Message_Messenger;
return aMessenger; return aMessenger;
} }
@@ -52,3 +49,342 @@ TCollection_AsciiString Message::FillTime (const Standard_Integer hour,
Sprintf (t, "%.2fs", second); Sprintf (t, "%.2fs", second);
return TCollection_AsciiString (t); return TCollection_AsciiString (t);
} }
namespace
{
static Standard_CString Message_Table_PrintGravityEnum[5] =
{
"TRACE", "INFO", "WARNING", "ALARM", "FAIL"
};
static Standard_CString Message_Table_PrintPerfMeterModeEnum[10] =
{
"NONE", "USER_TIME_CPU", "SYSTEM_TIME_CPU", "MEM_PRIVATE", "MEM_VIRTUAL",
"MEM_WORKING_SET", "MEM_WORKING_SET_PEAK", "MEM_SWAP_USAGE", "MEM_SWAP_USAGE_PEAK", "MEM_HEAP_USAGE"
};
}
//=======================================================================
//function : GravityToString
//purpose :
//=======================================================================
Standard_CString Message::GravityToString (const Message_Gravity theGravity)
{
return Message_Table_PrintGravityEnum[theGravity];
}
//=======================================================================
//function : GravityFromString
//purpose :
//=======================================================================
Standard_Boolean Message::GravityFromString (const Standard_CString theGravityString,
Message_Gravity& theGravity)
{
TCollection_AsciiString aName (theGravityString);
aName.UpperCase();
for (Standard_Integer aGravityIter = 0; aGravityIter <= Message_Fail; ++aGravityIter)
{
Standard_CString aGravityName = Message_Table_PrintGravityEnum[aGravityIter];
if (aName == aGravityName)
{
theGravity = Message_Gravity (aGravityIter);
return Standard_True;
}
}
return Standard_False;
}
//=======================================================================
//function : PerfMeterModeToString
//purpose :
//=======================================================================
Standard_CString Message::PerfMeterModeToString (const Message_PerfMeterMode theValue)
{
return Message_Table_PrintPerfMeterModeEnum[theValue];
}
//=======================================================================
//function : PerfMeterModeFromString
//purpose :
//=======================================================================
Standard_Boolean Message::PerfMeterModeFromString (const Standard_CString theString,
Message_PerfMeterMode& theValue)
{
TCollection_AsciiString aName (theString);
aName.UpperCase();
for (Standard_Integer aModeIter = 0; aModeIter <= Message_PerfMeterMode_MemHeapUsage; ++aModeIter)
{
Standard_CString aModeName = Message_Table_PrintPerfMeterModeEnum[aModeIter];
if (aName == aModeName)
{
theValue = Message_PerfMeterMode (aModeIter);
return Standard_True;
}
}
return Standard_False;
}
// =======================================================================
// function : GetPointerInfo
// purpose :
// =======================================================================
TCollection_AsciiString Message::TransientToString (const Handle(Standard_Transient)& thePointer, const bool isShortInfo)
{
if (thePointer.IsNull())
return TCollection_AsciiString();
return PointerToString(thePointer.operator->(), isShortInfo);
}
// =======================================================================
// function : GetPointerInfo
// purpose :
// =======================================================================
TCollection_AsciiString Message::PointerToString (const void* thePointer, const bool isShortInfo)
{
std::ostringstream aPtrStr;
aPtrStr << thePointer;
if (!isShortInfo)
return aPtrStr.str().c_str();
TCollection_AsciiString anInfoPtr (aPtrStr.str().c_str());
for (int aSymbolId = 1; aSymbolId < anInfoPtr.Length(); aSymbolId++)
{
if (anInfoPtr.Value(aSymbolId) != '0')
{
anInfoPtr = anInfoPtr.SubString(aSymbolId, anInfoPtr.Length());
anInfoPtr.Prepend("0x");
return anInfoPtr;
}
}
return aPtrStr.str().c_str();
}
// =======================================================================
// function : StrVectorToString
// purpose :
// =======================================================================
TCollection_AsciiString Message::StrVectorToString
(const NCollection_Vector<TCollection_AsciiString>& theValues)
{
TCollection_AsciiString aValue;
for (NCollection_Vector<TCollection_AsciiString>::Iterator aValuesIt (theValues); aValuesIt.More(); aValuesIt.Next())
{
aValue += aValuesIt.Value();
if (aValuesIt.More())
aValue += VectorSeparator();
}
return aValue;
}
// =======================================================================
// function : StrVectorFromString
// purpose :
// =======================================================================
Standard_Boolean Message::StrVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<TCollection_AsciiString>& theValues)
{
TCollection_AsciiString aCurrentString = theValue, aValueString;
while (!aCurrentString.IsEmpty())
{
Standard_Integer aPosition = aCurrentString.Search (", ");
aValueString = aCurrentString;
if (aPosition > 0)
aCurrentString = aValueString.Split (aPosition - 1);
theValues.Append (aValueString.RealValue());
if (aPosition > 0)
aCurrentString = aCurrentString.Split (2);
}
return Standard_True;
}
// =======================================================================
// function : RealVectorToString
// purpose :
// =======================================================================
TCollection_AsciiString Message::RealVectorToString
(const NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aValue = ("(");
for (NCollection_Vector<Standard_Real>::Iterator aValuesIt (theValues); aValuesIt.More(); aValuesIt.Next())
{
aValue += aValuesIt.Value();
if (aValuesIt.More())
aValue += VectorSeparator();
}
aValue += ")";
return aValue;
}
// =======================================================================
// function : RealVectorFromString
// purpose :
// =======================================================================
Standard_Boolean Message::RealVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aCurrentString = theValue, aValueString;
Standard_Integer aPosition = aCurrentString.Search ("(");
if (aPosition != 1)
return Standard_False;
aCurrentString = aCurrentString.Split (aPosition);
aPosition = aCurrentString.Search (")");
if (aPosition != 1)
return Standard_False;
aValueString = aCurrentString.Split (aPosition);
while (!aCurrentString.IsEmpty())
{
// x value
aPosition = aCurrentString.Search (", ");
aValueString = aCurrentString;
if (aPosition > 0)
aCurrentString = aValueString.Split (aPosition - 1);
theValues.Append (aValueString.RealValue());
if (aPosition > 0)
aCurrentString = aCurrentString.Split (2);
}
return Standard_True;
}
// =======================================================================
// function : CoordVectorToString
// purpose :
// =======================================================================
TCollection_AsciiString Message::CoordVectorToString
(const NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aValue = ("(");
aValue += RealVectorToString (theValues);
aValue += ")";
return aValue;
}
// =======================================================================
// function : CoordVectorFromString
// purpose :
// =======================================================================
Standard_Boolean Message::CoordVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aCurrentString = theValue, aValueString;
Standard_Integer aPosition = aCurrentString.Search ("(");
if (aPosition != 1)
return Standard_False;
aCurrentString = aCurrentString.Split (aPosition);
aPosition = aCurrentString.Search (")");
if (aPosition != 1)
return Standard_False;
aValueString = aCurrentString.Split (aPosition);
return RealVectorFromString (aCurrentString, theValues);
}
// =======================================================================
// function : ColorVectorToString
// purpose :
// =======================================================================
TCollection_AsciiString Message::ColorVectorToString
(const NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aValue = ("[");
aValue += RealVectorToString (theValues);
aValue += "]";
return aValue;
}
// =======================================================================
// function : ColorVectorFromString
// purpose :
// =======================================================================
Standard_Boolean Message::ColorVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues)
{
TCollection_AsciiString aCurrentString = theValue, aValueString;
Standard_Integer aPosition = aCurrentString.Search ("[");
if (aPosition != 1)
return Standard_False;
aCurrentString = aCurrentString.Split (aPosition);
aPosition = aCurrentString.Search ("]");
if (aPosition != 1)
return Standard_False;
aValueString = aCurrentString.Split (aPosition);
return RealVectorFromString (aCurrentString, theValues);
}
// =======================================================================
// function : ConvertStream
// purpose :
// =======================================================================
void Message::ConvertStream (const Standard_SStream& theStream,
Standard_Integer& theColumnCount,
NCollection_Vector<TCollection_AsciiString>& theValues)
{
TCollection_AsciiString aStream (theStream.str().c_str());
Standard_Character aSeparator = Message::DumpSeparator();
Standard_Integer aColumnCount = 0;
TCollection_AsciiString aCurrentString = aStream;
Standard_Integer aPosition = aCurrentString.Search (aSeparator);
if (aPosition >= 1)
{
TCollection_AsciiString aTailString = aCurrentString.Split (aPosition);
Standard_Boolean aClassNameFound = Standard_False;
while (!aCurrentString.IsEmpty())
{
TCollection_AsciiString aValueString = aCurrentString;
aPosition = aValueString.Search (aSeparator);
if (aPosition < 0 )
break;
aCurrentString = aValueString.Split (aPosition - 1);
if (!aColumnCount)
{
if (!aClassNameFound)
aClassNameFound = Standard_True;
else
{
if (!aValueString.IsIntegerValue())
break; // not correct Dump, in correct the first value is number of property columns
aColumnCount = aValueString.IntegerValue();
}
}
else
theValues.Append (aValueString);
if (aTailString.IsEmpty())
break;
aCurrentString = aTailString;
aPosition = aCurrentString.Search (aSeparator);
if (aPosition < 0 )
{
aCurrentString = aTailString;
aTailString = TCollection_AsciiString();
}
else
aTailString = aCurrentString.Split (aPosition);
}
}
theColumnCount = aColumnCount;
}

View File

@@ -17,14 +17,19 @@
#ifndef _Message_HeaderFile #ifndef _Message_HeaderFile
#define _Message_HeaderFile #define _Message_HeaderFile
#include <Message_Gravity.hxx>
#include <Message_PerfMeterMode.hxx>
#include <NCollection_Vector.hxx>
#include <Standard.hxx> #include <Standard.hxx>
#include <Standard_DefineAlloc.hxx> #include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx> #include <Standard_Handle.hxx>
#include <Standard_Integer.hxx> #include <Standard_Integer.hxx>
#include <Standard_Real.hxx> #include <Standard_Real.hxx>
#include <TCollection_AsciiString.hxx>
class Message_Messenger; class Message_Messenger;
class TCollection_AsciiString;
class Message_Msg; class Message_Msg;
class Message_MsgFile; class Message_MsgFile;
class Message_Messenger; class Message_Messenger;
@@ -59,8 +64,129 @@ public:
//! 3. (0, 0, 4.5 ) returns "4.50s" //! 3. (0, 0, 4.5 ) returns "4.50s"
Standard_EXPORT static TCollection_AsciiString FillTime (const Standard_Integer Hour, const Standard_Integer Minute, const Standard_Real Second); Standard_EXPORT static TCollection_AsciiString FillTime (const Standard_Integer Hour, const Standard_Integer Minute, const Standard_Real Second);
//! Returns the string name for a given gravity.
//! @param Gravity gravity type
//! @return string identifier from the list Message_Trace, Message_Info, Message_Warning, Message_Alarm and Message_Fail
Standard_EXPORT static Standard_CString GravityToString (const Message_Gravity theGravity);
//! Returns the gravity type from the given string identifier (using case-insensitive comparison).
//! @param theGravityString string identifier
//! @return gravity or Message_Trace if string identifier is invalid
static Message_Gravity GravityFromString (const Standard_CString theGravityString)
{
Message_Gravity aGravity = Message_Trace;
GravityFromString (theGravityString, aGravity);
return aGravity;
}
//! Determines the gravity from the given string identifier (using case-insensitive comparison).
//! @param theGravityString string identifier
//! @param theGravity detected shape type
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean GravityFromString (const Standard_CString theGravityString,
Message_Gravity& theGravity);
//! Returns the string name for a perf meter mode.
//! @param theValue mode
//! @return string identifier
Standard_EXPORT static Standard_CString PerfMeterModeToString (const Message_PerfMeterMode theValue);
//! Returns the enum value from the given string identifier (using case-insensitive comparison).
//! @param theString string identifier
//! @return enum or Message_PerfMeterMode_None if string identifier is invalid
static Message_PerfMeterMode PerfMeterModeFromString (const Standard_CString theString)
{
Message_PerfMeterMode aValue = Message_PerfMeterMode_None;
PerfMeterModeFromString (theString, aValue);
return aValue;
}
//! Returns the enum value from the given string identifier (using case-insensitive comparison).
//! @param theString string identifier
//! @return enum or Message_PerfMeterMode_None if string identifier is invalid
//! @return TRUE if string identifier is known
Standard_EXPORT static Standard_Boolean PerfMeterModeFromString (const Standard_CString theString,
Message_PerfMeterMode& theValue);
//! Returns separator symbol of Dump information
static Standard_Character DumpSeparator() { return '\\'; }
//! Returns separator symbol of values vector union
static TCollection_AsciiString VectorSeparator() { return " ,"; }
//! Convert handle pointer to string value
//! \param thePointer a pointer
//! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
//! \return the string value
Standard_EXPORT static TCollection_AsciiString TransientToString (const Handle(Standard_Transient)& thePointer,
const bool isShortInfo = true);
//! Convert pointer to string value
//! \param thePointer a pointer
//! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
//! \return the string value
Standard_EXPORT static TCollection_AsciiString PointerToString (const void* thePointer,
const bool isShortInfo = true);
//! Convert vector of real values to string, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static TCollection_AsciiString StrVectorToString
(const NCollection_Vector<TCollection_AsciiString>& theValues);
//! Convert string to vector of real values, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static Standard_Boolean StrVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<TCollection_AsciiString>& theValues);
//! Convert vector of real values to string, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static TCollection_AsciiString RealVectorToString
(const NCollection_Vector<Standard_Real>& theValues);
//! Convert string to vector of real values, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static Standard_Boolean RealVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues);
//! Convert vector of real values to string, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static TCollection_AsciiString CoordVectorToString
(const NCollection_Vector<Standard_Real>& theValues);
//! Convert string to vector of real values, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static Standard_Boolean CoordVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues);
//! Convert vector of real values to string, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static TCollection_AsciiString ColorVectorToString
(const NCollection_Vector<Standard_Real>& theValues);
//! Convert string to vector of real values, separator is vector separator
//! \param thePointer a container of real values
//! \return the string value
Standard_EXPORT static Standard_Boolean ColorVectorFromString
(const TCollection_AsciiString& theValue,
NCollection_Vector<Standard_Real>& theValues);
//! Converts stream to vector of values and column count
//! \param theStream stream value
//! \param theColumnCount [out] number of columns
//! \param theValues [out] container of split values
static Standard_EXPORT void ConvertStream (const Standard_SStream& theStream,
Standard_Integer& theColumnCount,
NCollection_Vector<TCollection_AsciiString>& theValues);
protected: protected:

View File

@@ -0,0 +1,81 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Message_AlertExtended.hxx>
#include <Message_Attribute.hxx>
#include <Message_CompositeAlerts.hxx>
#include <Message_Report.hxx>
#include <Precision.hxx>
#include <Standard_Assert.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Message_AlertExtended,Message_Alert)
//=======================================================================
//function : GetMessageKey
//purpose :
//=======================================================================
Standard_CString Message_AlertExtended::GetMessageKey () const
{
if (myAttribute.IsNull())
return Message_Alert::GetMessageKey();
return myAttribute->GetMessageKey();
}
//=======================================================================
//function : GetCompositeAlerts
//purpose :
//=======================================================================
Handle (Message_CompositeAlerts) Message_AlertExtended::GetCompositeAlerts (const Standard_Boolean isCreate)
{
if (myCompositAlerts.IsNull() && isCreate)
myCompositAlerts = new Message_CompositeAlerts();
return myCompositAlerts;
}
//=======================================================================
//function : IsMetricValid
//purpose :
//=======================================================================
Standard_Boolean Message_AlertExtended::IsMetricValid() const
{
return fabs (myMetricStart - GetUndefinedMetric()) > Precision::Confusion() &&
fabs (myMetricStop - GetUndefinedMetric()) > Precision::Confusion();
}
//=======================================================================
//function : AddAlert
//purpose :
//=======================================================================
Handle(Message_Alert) Message_AlertExtended::AddAlert (const Handle(Message_Report)& theReport,
const Handle(Message_Attribute)& theAttribute,
Message_PerfMeter* thePerfMeter,
const Handle(Message_Alert)& theParentAlert)
{
if (!theReport->IsActive (Message_Info))
return Handle(Message_Alert)();
Handle(Message_AlertExtended) anAlert = new Message_AlertExtended();
anAlert->SetAttribute (theAttribute);
theReport->AddAlert (Message_Info, anAlert, thePerfMeter, theParentAlert);
return anAlert;
}

View File

@@ -0,0 +1,133 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Message_AlertExtended_HeaderFile
#define _Message_AlertExtended_HeaderFile
#include <Message_Alert.hxx>
#include <TCollection_AsciiString.hxx>
class Message_Attribute;
class Message_PerfMeter;
class Message_Report;
DEFINE_STANDARD_HANDLE(Message_AlertExtended, Message_Alert)
class Message_CompositeAlerts;
//! Inherited class of Message_Alert with some additional information.
//!
//! It has Message_Attributes to provide the alert name, description and
//! other custom information
//!
//! It is possible to set performance meter into alert to store time/memory metric information
//! spent between the next alert adding. Also time of child alerts are collected
//!
//! It has a container of composite alerts, if the alert might provide
//! sub-alerts collecting.
//!
class Message_AlertExtended : public Message_Alert
{
public:
//! Empty constructor
Standard_EXPORT Message_AlertExtended()
: Message_Alert(), myMetricStart (GetUndefinedMetric()), myMetricStop (GetUndefinedMetric()) {}
//! Return a C string to be used as a key for generating text user
//! messages describing this alert.
//! The messages are generated with help of Message_Msg class, in
//! Message_Report::Dump().
//! Base implementation returns dynamic type name of the instance.
virtual Standard_EXPORT Standard_CString GetMessageKey () const;
//! Sets container of the alert attributes
//! \param theAttributes an attribute values
void SetAttribute (const Handle(Message_Attribute)& theAttribute) { myAttribute = theAttribute; }
//! Returns container of the alert attributes
//! \param theAttributes an attribute values
const Handle(Message_Attribute)& Attribute () const { return myAttribute; }
//! Returns class provided hierarchy of alerts if created or create if the parameter is true
//! \param isCreate if composite alert has not been created for this alert, it should be created
//! \return instance or NULL
Standard_EXPORT Handle (Message_CompositeAlerts) GetCompositeAlerts (const Standard_Boolean isCreate = Standard_False);
//! Returns performance meter
//! \return instance or NULL
Message_PerfMeter* GetPerfMeter() { return myPerfMeter; }
//! Returns true if metric is computed
//! @return value
Standard_EXPORT Standard_Boolean IsMetricValid() const;
//! Returns the alert cumulative metric. It includes time/mem of sub alerts
//! @return value
Standard_Real MetricStart() const { return myMetricStart; }
//! Returns the alert cumulative metric. It includes time/mem of sub alerts
//! @return value
Standard_Real MetricStop() const { return myMetricStop; }
//! Sets cumulative time/mem of alert
//! \param theCumulativeMetric time/mem of the alert
void SetMetricValues (const Standard_Real theStartValue, const Standard_Real theStopValue)
{ myMetricStart = theStartValue; myMetricStop = theStopValue; }
//! Return true if this type of alert can be merged with other
//! of the same type to avoid duplication.
//! Basis implementation returns true.
virtual Standard_EXPORT Standard_Boolean SupportsMerge () const { return Standard_False; }
//! Returns default value of the time/mem when it is not defined
//! \return integer value
static Standard_Real GetUndefinedMetric() { return -1.0; }
//! Creates new instance of the alert and put it into report with Message_Info gravity.
//! It does nothing if such kind of gravity is not active in the report
//! @param theReport the message report where new alert is placed
//! @param theAttribute container of additional values of the alert
//! @param thePerfMeter performance meter calculates the alert spent time and participate in searching the last alert if needed
//! @param theParentAlert parent for the new alert, or alert is placed under the report
//! @return created alert or NULL if Message_Info is not active in report
static Standard_EXPORT Handle(Message_Alert) AddAlert (const Handle(Message_Report)& theReport,
const Handle(Message_Attribute)& theAttribute,
Message_PerfMeter* thePerfMeter,
const Handle(Message_Alert)& theParentAlert = Handle(Message_Alert)());
// OCCT RTTI
DEFINE_STANDARD_RTTIEXT(Message_AlertExtended, Message_Alert)
protected:
//! Sets performance meter
//! \param theMeter instance pointer or NULL
void SetPerfMeter (Message_PerfMeter* theMeter) { myPerfMeter = theMeter; }
protected:
Handle(Message_CompositeAlerts) myCompositAlerts; //!< class provided hierarchical structure of alerts
//!< It should be created by an attempt of a child alert creation
Handle(Message_Attribute) myAttribute; //!< container of the alert attributes
Message_PerfMeter* myPerfMeter; //!< performance meter
Standard_Real myMetricStart; //!< value on start metric computation
Standard_Real myMetricStop; //!< value on stop metric computation
friend Message_PerfMeter;
};
#endif // _Message_Alert_HeaderFile

View File

@@ -0,0 +1,102 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Message_Alerts_HeaderFile
#define _Message_Alerts_HeaderFile
#include <Message.hxx>
#include <Message_AlertExtended.hxx>
#include <Message_AttributeObject.hxx>
#include <Message_AttributeStream.hxx>
#include <Message_Gravity.hxx>
#include <Message_Report.hxx>
#include <NCollection_Vector.hxx>
#include <TCollection_AsciiString.hxx>
static Handle(Message_Alert) OCCT_Message_Alert;
#define MESSAGE_INFO(Name, Description, PerfMeter, ParentAlert) \
{ \
if (!Message_Report::CurrentReport().IsNull() && \
Message_Report::CurrentReport()->IsActive (Message_Info)) \
{ \
OCCT_Message_Alert = Message_AlertExtended::AddAlert (Message_Report::CurrentReport(), \
new Message_Attribute (Name, Description), PerfMeter, ParentAlert); \
} \
}
#define MESSAGE_INFO_OBJECT(Object, StreamValues, Name, Description, PerfMeter, ParentAlert) \
{ \
if (!Message_Report::CurrentReport().IsNull() && \
Message_Report::CurrentReport()->IsActive (Message_Info)) \
{ \
OCCT_Message_Alert = Message_AlertExtended::AddAlert (Message_Report::CurrentReport(), \
new Message_AttributeObject (Object, StreamValues, Name, Description), PerfMeter, ParentAlert ); \
} \
}
#define MESSAGE_INFO_STREAM(StreamValues, Name, Description, PerfMeter, ParentAlert) \
{ \
if (!Message_Report::CurrentReport().IsNull() && \
Message_Report::CurrentReport()->IsActive (Message_Info)) \
{ \
OCCT_Message_Alert = Message_AlertExtended::AddAlert (Message_Report::CurrentReport(), \
new Message_AttributeStream (StreamValues, Name, Description), PerfMeter, ParentAlert ); \
} \
}
//#define DUMP_VALUE(OS, Value) \
// { \
// OS << Value << Message::DumpSeparator(); \
// }
//
//#define DUMP_VALUES_COLUMNS(OS, ObjectName, ColumnCount) \
// { \
// OS << ObjectName << Message::DumpSeparator() << ColumnCount << Message::DumpSeparator(); \
// }
//
//#define DUMP_VALUES(OS, Value1, Value2) \
// { \
// OS << Value1 << Message::DumpSeparator() << Value2 << Message::DumpSeparator(); \
// }
//
//#define DUMP_VEC_COLOR(Values, Value) \
// { \
// Value = Message::ColorVectorToString (aValues); \
// }
//
//#define DUMP_VEC_COLOR_SPLIT(Value, Values) \
// { \
// Message::ColorVectorFromString (Value, Values); \
// }
//
//#define DUMP_VEC_COORD(Values, Value) \
// { \
// Value = Message::CoordVectorToString (aValues); \
// }
//
//#define DUMP_VEC_COORD_SPLIT(Value, Values) \
// { \
// Message::CoordVectorFromString (Value, Values); \
// }
//
//
//#define DUMP_VALUES_SPLIT(OS, ColumnCount, Values) \
// { \
// Message::ConvertStream (OS, aColumnCount, aValues); \
// }
#endif // _Message_Alerts_HeaderFile

View File

@@ -0,0 +1,30 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Message_Attribute.hxx>
#include <Standard_Assert.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Message_Attribute, Standard_Transient)
//=======================================================================
//function : GetMessageKey
//purpose :
//=======================================================================
Standard_CString Message_Attribute::GetMessageKey () const
{
return !myName.IsEmpty() ? myName.ToCString() : "";
}

View File

@@ -0,0 +1,67 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Message_Attribute_HeaderFile
#define _Message_Attribute_HeaderFile
#include <Standard_Transient.hxx>
#include <TCollection_AsciiString.hxx>
DEFINE_STANDARD_HANDLE(Message_Attribute, Standard_Transient)
//! Additional information of extended alert attribute
//! To provide other custom attribute container, it might be redefined.
class Message_Attribute : public Standard_Transient
{
public:
//! Empty constructor
Standard_EXPORT Message_Attribute (const TCollection_AsciiString& theName = TCollection_AsciiString(),
const TCollection_AsciiString& theDescription = TCollection_AsciiString())
: myName (theName), myDescription (theDescription) {}
//! Return a C string to be used as a key for generating text user
//! messages describing this alert.
//! The messages are generated with help of Message_Msg class, in
//! Message_Report::Dump().
//! Base implementation returns dynamic type name of the instance.
virtual Standard_EXPORT Standard_CString GetMessageKey () const;
//! Returns custom name of alert if it is set
//! @return alert name
const TCollection_AsciiString& GetName() const { return myName; }
//! Sets the custom name of alert
//! @param theName a name for the alert
void SetName (const TCollection_AsciiString& theName) { myName = theName; }
//! Sets desription of alert
//! @param theName a name for the alert
void SetDescription (const TCollection_AsciiString& theDescription) { myDescription = theDescription; }
//! Returns description of alert if it is set
//! @return alert description
virtual const TCollection_AsciiString& GetDescription() const { return myDescription; }
// OCCT RTTI
DEFINE_STANDARD_RTTIEXT(Message_Attribute, Standard_Transient)
private:
TCollection_AsciiString myName; //!< alert name, if defined is used in GetMessageKey
TCollection_AsciiString myDescription; //!< alert description if defined
};
#endif // _Message_Attribute_HeaderFile

View File

@@ -0,0 +1,32 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Message_AttributeObject.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Message_AttributeObject, Message_AttributeStream)
//=======================================================================
//function : Message_AttributeObject
//purpose :
//=======================================================================
Message_AttributeObject::Message_AttributeObject (const Handle(Standard_Transient)& theObject,
const Standard_SStream& theStream,
const TCollection_AsciiString& theName,
const TCollection_AsciiString& theDescription)
: Message_AttributeStream (theStream, theName, theDescription)
{
myObject = theObject;
}

View File

@@ -0,0 +1,46 @@
// Created on: 2018-06-10
// Created by: Natalia Ermolaeva
// Copyright (c) 2017 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Message_AttributeObject_HeaderFile
#define _Message_AttributeObject_HeaderFile
#include <Message_AttributeStream.hxx>
#include <TCollection_AsciiString.hxx>
//! Alert object storing Transient object in its field
class Message_AttributeObject : public Message_AttributeStream
{
public:
//! Constructor with string argument
Standard_EXPORT Message_AttributeObject (const Handle(Standard_Transient)& theObject,
const Standard_SStream& theStream,
const TCollection_AsciiString& theName = TCollection_AsciiString(),
const TCollection_AsciiString& theDescription = TCollection_AsciiString());
//! Sets the object
//! @param theObject an instance
void SetObject (const Handle(Standard_Transient)& theObject) { myObject = theObject; }
//! Returns object
Handle(Standard_Transient) GetObject() const { return myObject; }
// OCCT RTTI
DEFINE_STANDARD_RTTIEXT(Message_AttributeObject, Message_AttributeStream)
private:
Handle(Standard_Transient) myObject;
};
#endif // _Message_AttributeObject_HeaderFile

Some files were not shown because too many files have changed in this diff Show More