mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-02-10 04:13:09 +05:00
Improve GEOM_AISShape::computeMassCenter() on edges and faces
which is used to show field values
This commit is contained in:
parent
e8236fd00f
commit
accebb2c2b
@ -34,55 +34,50 @@
|
|||||||
|
|
||||||
// Open CASCADE Includes
|
// Open CASCADE Includes
|
||||||
#include <AIS_InteractiveContext.hxx>
|
#include <AIS_InteractiveContext.hxx>
|
||||||
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
#include <GCPnts_AbscissaPoint.hxx>
|
#include <GCPnts_AbscissaPoint.hxx>
|
||||||
#include <GeomAdaptor_Curve.hxx>
|
#include <GeomAdaptor_Curve.hxx>
|
||||||
#include <gp_Pnt.hxx>
|
#include <Graphic3d_ArrayOfPoints.hxx>
|
||||||
#include <gp_Dir.hxx>
|
|
||||||
#include <gp_Vec.hxx>
|
|
||||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
#include <Graphic3d_AspectFillArea3d.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>
|
||||||
#include <Graphic3d_ArrayOfPoints.hxx>
|
|
||||||
|
|
||||||
#include <Prs3d_ShadingAspect.hxx>
|
|
||||||
#include <Prs3d_Arrow.hxx>
|
#include <Prs3d_Arrow.hxx>
|
||||||
#include <Prs3d_IsoAspect.hxx>
|
#include <Prs3d_IsoAspect.hxx>
|
||||||
|
#include <Prs3d_ShadingAspect.hxx>
|
||||||
|
#include <SelectBasics_SensitiveEntity.hxx>
|
||||||
|
#include <SelectMgr_EntityOwner.hxx>
|
||||||
|
#include <SelectMgr_IndexedMapOfOwner.hxx>
|
||||||
|
#include <SelectMgr_Selection.hxx>
|
||||||
|
#include <StdPrs_ShadedShape.hxx>
|
||||||
|
#include <StdSelect_BRepOwner.hxx>
|
||||||
|
#include <StdSelect_DisplayMode.hxx>
|
||||||
|
#include <TColStd_IndexedMapOfInteger.hxx>
|
||||||
|
#include <TColStd_ListIteratorOfListOfInteger.hxx>
|
||||||
|
#include <TColStd_ListOfInteger.hxx>
|
||||||
|
#include <TopExp.hxx>
|
||||||
|
#include <TopExp_Explorer.hxx>
|
||||||
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
|
#include <TopoDS.hxx>
|
||||||
|
#include <TopoDS_Edge.hxx>
|
||||||
|
#include <TopoDS_Shape.hxx>
|
||||||
|
#include <TopoDS_Vertex.hxx>
|
||||||
|
#include <V3d_View.hxx>
|
||||||
|
#include <gp_Dir.hxx>
|
||||||
|
#include <gp_Pnt.hxx>
|
||||||
|
#include <gp_Vec.hxx>
|
||||||
|
|
||||||
#if OCC_VERSION_LARGE > 0x06070200
|
#if OCC_VERSION_LARGE > 0x06070200
|
||||||
#include <Prs3d_VertexDrawMode.hxx>
|
#include <Prs3d_VertexDrawMode.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <SelectBasics_SensitiveEntity.hxx>
|
|
||||||
#include <SelectMgr_EntityOwner.hxx>
|
|
||||||
#include <StdSelect_BRepOwner.hxx>
|
|
||||||
#include <SelectMgr_IndexedMapOfOwner.hxx>
|
|
||||||
#include <SelectMgr_Selection.hxx>
|
|
||||||
#include <StdSelect_DisplayMode.hxx>
|
|
||||||
#include <StdPrs_ShadedShape.hxx>
|
|
||||||
#if OCC_VERSION_MAJOR < 7
|
#if OCC_VERSION_MAJOR < 7
|
||||||
#include <StdPrs_WFDeflectionShape.hxx>
|
#include <StdPrs_WFDeflectionShape.hxx>
|
||||||
#else
|
#else
|
||||||
#include <StdPrs_WFShape.hxx>
|
#include <StdPrs_WFShape.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <TColStd_IndexedMapOfInteger.hxx>
|
|
||||||
#include <TColStd_ListIteratorOfListOfInteger.hxx>
|
|
||||||
#include <TColStd_ListOfInteger.hxx>
|
|
||||||
#include <TopExp.hxx>
|
|
||||||
#include <TopoDS_Shape.hxx>
|
|
||||||
#include <TopTools_IndexedMapOfShape.hxx>
|
|
||||||
#include <TopExp.hxx>
|
|
||||||
#include <TopExp_Explorer.hxx>
|
|
||||||
#include <TopoDS.hxx>
|
|
||||||
#include <TopoDS_Edge.hxx>
|
|
||||||
#include <TopoDS_Shape.hxx>
|
|
||||||
#include <TopoDS_Vertex.hxx>
|
|
||||||
|
|
||||||
#include <TColStd_SequenceOfInteger.hxx>
|
|
||||||
|
|
||||||
#include <V3d_View.hxx>
|
|
||||||
|
|
||||||
#include <SalomeApp_Tools.h>
|
#include <SalomeApp_Tools.h>
|
||||||
#include <SUIT_Session.h>
|
#include <SUIT_Session.h>
|
||||||
#include <SUIT_ResourceMgr.h>
|
#include <SUIT_ResourceMgr.h>
|
||||||
@ -659,9 +654,29 @@ void GEOM_AISShape::drawName( const Handle(Prs3d_Presentation)& thePrs )
|
|||||||
Standard_Boolean GEOM_AISShape::computeMassCenter( const TopoDS_Shape& theShape,
|
Standard_Boolean GEOM_AISShape::computeMassCenter( const TopoDS_Shape& theShape,
|
||||||
gp_Pnt& theCenter )
|
gp_Pnt& theCenter )
|
||||||
{
|
{
|
||||||
Standard_Real aX = 0, aY = 0, aZ = 0;
|
theCenter.SetCoord( 0,0,0 );
|
||||||
Standard_Integer aNbPoints = 0;
|
Standard_Integer aNbPoints = 0;
|
||||||
|
|
||||||
|
if ( theShape.ShapeType() == TopAbs_EDGE )
|
||||||
|
{
|
||||||
|
double f,l;
|
||||||
|
Handle(Geom_Curve) curve = BRep_Tool::Curve( TopoDS::Edge( theShape ), f, l );
|
||||||
|
if ( !curve.IsNull() )
|
||||||
|
{
|
||||||
|
theCenter = curve->Value( 0.5 * ( f + l ));
|
||||||
|
aNbPoints = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( theShape.ShapeType() == TopAbs_FACE )
|
||||||
|
{
|
||||||
|
BRepAdaptor_Surface surface( TopoDS::Face( theShape ));
|
||||||
|
theCenter = surface.Value( 0.5 * ( surface.FirstUParameter() + surface.LastUParameter() ),
|
||||||
|
0.5 * ( surface.FirstVParameter() + surface.LastVParameter() ));
|
||||||
|
aNbPoints = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( aNbPoints == 0 )
|
||||||
|
{
|
||||||
TopExp_Explorer anExp;
|
TopExp_Explorer anExp;
|
||||||
for( anExp.Init( theShape, TopAbs_VERTEX ); anExp.More(); anExp.Next() )
|
for( anExp.Init( theShape, TopAbs_VERTEX ); anExp.More(); anExp.Next() )
|
||||||
{
|
{
|
||||||
@ -669,18 +684,14 @@ Standard_Boolean GEOM_AISShape::computeMassCenter( const TopoDS_Shape& theShape,
|
|||||||
if( !aVertex.IsNull() )
|
if( !aVertex.IsNull() )
|
||||||
{
|
{
|
||||||
gp_Pnt aPnt = BRep_Tool::Pnt( aVertex );
|
gp_Pnt aPnt = BRep_Tool::Pnt( aVertex );
|
||||||
aX += aPnt.X();
|
theCenter.ChangeCoord() += aPnt.XYZ();
|
||||||
aY += aPnt.Y();
|
|
||||||
aZ += aPnt.Z();
|
|
||||||
aNbPoints++;
|
aNbPoints++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( aNbPoints == 0 )
|
if ( aNbPoints > 0 )
|
||||||
return Standard_False;
|
theCenter.ChangeCoord() /= (Standard_Real) aNbPoints;
|
||||||
|
|
||||||
theCenter.SetCoord( aX / (Standard_Real)aNbPoints,
|
return aNbPoints;
|
||||||
aY / (Standard_Real)aNbPoints,
|
|
||||||
aZ / (Standard_Real)aNbPoints );
|
|
||||||
return Standard_True;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user