mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-19 13:40:49 +03:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
baa6e38e70 |
@@ -1679,43 +1679,6 @@ Some public methods of the class BRepFilletAPI_MakeChamfer are released from exc
|
|||||||
- method Add for symmetric chamfer now takes only 2 arguments: distance and edge;
|
- method Add for symmetric chamfer now takes only 2 arguments: distance and edge;
|
||||||
- method GetDistAngle now takes only 3 arguments: index of contour, distance and angle.
|
- method GetDistAngle now takes only 3 arguments: index of contour, distance and angle.
|
||||||
|
|
||||||
@subsection upgrade_740_aspects Aspects unification
|
|
||||||
|
|
||||||
Fill Area, Line and Marker aspects (classes *Graphic3d_AspectFillArea3d*, *Graphic3d_AspectLine3d*, *Graphic3d_AspectMarker3d* and *Graphic3d_AspectText3d*)
|
|
||||||
have been merged into new class *Graphic3d_Aspects* providing a single state for rendering primitives of any type.
|
|
||||||
The old per-primitive type aspect classes have been preserved as sub-classes of *Graphic3d_Aspects* with default values close to the previous behavior.
|
|
||||||
All aspects except Graphic3d_AspectFillArea3d define Graphic3d_TOSM_UNLIT shading model.
|
|
||||||
|
|
||||||
The previous approach with dedicated aspects per primitive type was handy in simplified case, but lead to confusion otherwise.
|
|
||||||
In fact, drawing points or lines with lighting applied is a valid use case, but only *Graphic3d_AspectFillArea3d* previously defined necessary material properties.
|
|
||||||
|
|
||||||
As aspects for different primitive types have been merged, Graphic3d_Group does no more provide per-type aspect properties.
|
|
||||||
Existing code relying on old behavior and putting interleaved per-type aspects into single Graphic3d_Group should be updated.
|
|
||||||
For example, the following pseudo-code will not work anymore, because all *SetGroupPrimitivesAspect* calls will setup the same property:
|
|
||||||
~~~~
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect()); //!< overrides previous aspect
|
|
||||||
|
|
||||||
Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments (2);
|
|
||||||
Handle(Graphic3d_ArrayOfTriangles) aTris = new Graphic3d_ArrayOfTriangles (3);
|
|
||||||
aGroup->AddPrimitiveArray (aLines); //!< both arrays will use the same aspect
|
|
||||||
aGroup->AddPrimitiveArray (aTris);
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
To solve the problem, the code should be modified to either put primitives into dedicated groups (preferred approach), or using *SetPrimitivesAspect* in proper order:
|
|
||||||
~~~~
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
|
||||||
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
|
||||||
Handle(Graphic3d_ArrayOfTriangles) aTris = new Graphic3d_ArrayOfTriangles (3);
|
|
||||||
aGroup->AddPrimitiveArray (aTris);
|
|
||||||
|
|
||||||
Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments (2);
|
|
||||||
aGroup->SetPrimitivesAspect (myDrawer->LineAspect()->Aspect()); //!< next array will use the new aspect
|
|
||||||
aGroup->AddPrimitiveArray (aLines);
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
@subsection upgrade_740_interiorstyles Interior styles
|
@subsection upgrade_740_interiorstyles Interior styles
|
||||||
|
|
||||||
* *Aspect_IS_HOLLOW* is now an alias to *Aspect_IS_EMPTY* and does not implicitly enables drawing mesh edges anymore.
|
* *Aspect_IS_HOLLOW* is now an alias to *Aspect_IS_EMPTY* and does not implicitly enables drawing mesh edges anymore.
|
||||||
|
@@ -23,7 +23,7 @@ WARNINGS = NO
|
|||||||
ENABLE_PREPROCESSING = YES
|
ENABLE_PREPROCESSING = YES
|
||||||
MACRO_EXPANSION = YES
|
MACRO_EXPANSION = YES
|
||||||
EXPAND_ONLY_PREDEF = YES
|
EXPAND_ONLY_PREDEF = YES
|
||||||
PREDEFINED = Standard_EXPORT Standard_NODISCARD Standard_OVERRIDE:=override __Standard_API __Draw_API Handle(a):=Handle<a> DEFINE_STANDARD_ALLOC DEFINE_NCOLLECTION_ALLOC
|
PREDEFINED = Standard_EXPORT Standard_OVERRIDE:=override __Standard_API __Draw_API Handle(a):=Handle<a> DEFINE_STANDARD_ALLOC DEFINE_NCOLLECTION_ALLOC
|
||||||
GENERATE_HTML = YES
|
GENERATE_HTML = YES
|
||||||
GENERATE_LATEX = NO
|
GENERATE_LATEX = NO
|
||||||
SEARCH_INCLUDES = YES
|
SEARCH_INCLUDES = YES
|
||||||
|
@@ -277,6 +277,7 @@ blend result _model 2 _model_161
|
|||||||
pload VISUALIZATION
|
pload VISUALIZATION
|
||||||
vinit Driver1/Viewer1/View1
|
vinit Driver1/Viewer1/View1
|
||||||
vsetcolorbg 200 200 255
|
vsetcolorbg 200 200 255
|
||||||
vdisplay -dispMode 1 result
|
vdisplay result
|
||||||
vfit
|
vfit
|
||||||
vaspects result -setFaceBoundaryDraw 1 -mostContinuity c2
|
vsetdispmode 1
|
||||||
|
vshowfaceboundary result 1
|
||||||
|
@@ -263,6 +263,7 @@ unifysamedom result p_1
|
|||||||
pload VISUALIZATION
|
pload VISUALIZATION
|
||||||
vinit Driver1/Viewer1/View1
|
vinit Driver1/Viewer1/View1
|
||||||
vsetcolorbg 200 200 255
|
vsetcolorbg 200 200 255
|
||||||
vdisplay -dispMode 1 result
|
vdisplay result
|
||||||
vfit
|
vfit
|
||||||
vaspects result -setFaceBoundaryDraw 1
|
vsetdispmode 1
|
||||||
|
vshowfaceboundary result 1
|
||||||
|
@@ -57,7 +57,9 @@ bcommon res b9 c2
|
|||||||
# show result
|
# show result
|
||||||
donly res
|
donly res
|
||||||
trotate res 0 0 0 0 0 1 90
|
trotate res 0 0 0 0 0 1 90
|
||||||
vinit View1
|
vinit
|
||||||
vdisplay -dispMode 1 res
|
vdisplay res
|
||||||
vaspects res -setFaceBoundaryDraw 1 -setFaceBoundaryColor WHITE -isoontriangulation 1
|
vsetdispmode 1
|
||||||
|
vshowfaceboundary res 1 255 255 255
|
||||||
|
vaspects -isoontriangulation 1
|
||||||
vfit
|
vfit
|
||||||
|
@@ -236,18 +236,17 @@ void AIS_CameraFrustum::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||||
switch (theMode)
|
switch (theMode)
|
||||||
{
|
{
|
||||||
case AIS_Shaded:
|
case AIS_Shaded:
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (myTriangles);
|
aGroup->AddPrimitiveArray (myTriangles);
|
||||||
}
|
}
|
||||||
Standard_FALLTHROUGH
|
Standard_FALLTHROUGH
|
||||||
case AIS_WireFrame:
|
case AIS_WireFrame:
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (myBorders);
|
aGroup->AddPrimitiveArray (myBorders);
|
||||||
break;
|
break;
|
||||||
|
@@ -232,6 +232,11 @@ void AIS_ColoredShape::SetCustomWidth (const TopoDS_Shape& theShape,
|
|||||||
|
|
||||||
void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
||||||
{
|
{
|
||||||
|
setColor (myDrawer, theColor);
|
||||||
|
myDrawer->SetColor (theColor);
|
||||||
|
hasOwnColor = Standard_True;
|
||||||
|
LoadRecomputable (AIS_WireFrame);
|
||||||
|
LoadRecomputable (AIS_Shaded);
|
||||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||||
{
|
{
|
||||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||||
@@ -257,7 +262,6 @@ void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
|||||||
aDrawer->FaceBoundaryAspect()->SetColor (theColor);
|
aDrawer->FaceBoundaryAspect()->SetColor (theColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AIS_Shape::SetColor (theColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -267,6 +271,10 @@ void AIS_ColoredShape::SetColor (const Quantity_Color& theColor)
|
|||||||
|
|
||||||
void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
||||||
{
|
{
|
||||||
|
setWidth (myDrawer, theLineWidth);
|
||||||
|
myOwnWidth = theLineWidth;
|
||||||
|
LoadRecomputable (AIS_WireFrame);
|
||||||
|
LoadRecomputable (AIS_Shaded);
|
||||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||||
{
|
{
|
||||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||||
@@ -288,16 +296,6 @@ void AIS_ColoredShape::SetWidth (const Standard_Real theLineWidth)
|
|||||||
aDrawer->FaceBoundaryAspect()->SetWidth (theLineWidth);
|
aDrawer->FaceBoundaryAspect()->SetWidth (theLineWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AIS_Shape::SetWidth (theLineWidth);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : UnsetWidth
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void AIS_ColoredShape::UnsetWidth()
|
|
||||||
{
|
|
||||||
SetWidth (1.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -307,6 +305,10 @@ void AIS_ColoredShape::UnsetWidth()
|
|||||||
|
|
||||||
void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
||||||
{
|
{
|
||||||
|
setTransparency (myDrawer, theValue);
|
||||||
|
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
||||||
|
LoadRecomputable (AIS_WireFrame);
|
||||||
|
LoadRecomputable (AIS_Shaded);
|
||||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||||
{
|
{
|
||||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||||
@@ -320,7 +322,6 @@ void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
|||||||
aDrawer->ShadingAspect()->SetTransparency (theValue, myCurrentFacingModel);
|
aDrawer->ShadingAspect()->SetTransparency (theValue, myCurrentFacingModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AIS_Shape::SetTransparency (theValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -329,7 +330,27 @@ void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void AIS_ColoredShape::UnsetTransparency()
|
void AIS_ColoredShape::UnsetTransparency()
|
||||||
{
|
{
|
||||||
SetTransparency (0.0f);
|
myDrawer->SetTransparency (0.0f);
|
||||||
|
if (myDrawer->HasOwnShadingAspect())
|
||||||
|
{
|
||||||
|
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||||
|
if (!HasColor()
|
||||||
|
&& !HasMaterial()
|
||||||
|
&& !myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
||||||
|
{
|
||||||
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||||
|
{
|
||||||
|
const Handle(Prs3d_Drawer)& aDrawer = anIter.Value();
|
||||||
|
if (aDrawer->HasOwnShadingAspect())
|
||||||
|
{
|
||||||
|
aDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SynchronizeAspects();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -339,6 +360,10 @@ void AIS_ColoredShape::UnsetTransparency()
|
|||||||
|
|
||||||
void AIS_ColoredShape::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
void AIS_ColoredShape::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
||||||
{
|
{
|
||||||
|
setMaterial (myDrawer, theMaterial, HasColor(), IsTransparent());
|
||||||
|
//myOwnMaterial = theMaterial;
|
||||||
|
hasOwnMaterial = Standard_True;
|
||||||
|
LoadRecomputable (AIS_Shaded);
|
||||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||||
{
|
{
|
||||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||||
@@ -348,7 +373,6 @@ void AIS_ColoredShape::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
|||||||
setMaterial (aDrawer, theMaterial, aDrawer->HasOwnColor(), aDrawer->HasOwnTransparency());
|
setMaterial (aDrawer, theMaterial, aDrawer->HasOwnColor(), aDrawer->HasOwnTransparency());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AIS_Shape::SetMaterial (theMaterial);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -586,7 +610,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
|||||||
const DataMapOfDrawerCompd& theDrawerClosedFaces,
|
const DataMapOfDrawerCompd& theDrawerClosedFaces,
|
||||||
const Standard_Integer theMode)
|
const Standard_Integer theMode)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) anOpenGroup, aClosedGroup, anEdgesGroup;
|
Handle(Graphic3d_Group) anOpenGroup, aClosedGroup;
|
||||||
for (size_t aShType = 0; aShType <= (size_t )TopAbs_SHAPE; ++aShType)
|
for (size_t aShType = 0; aShType <= (size_t )TopAbs_SHAPE; ++aShType)
|
||||||
{
|
{
|
||||||
const Standard_Boolean isClosed = aShType == TopAbs_SHAPE;
|
const Standard_Boolean isClosed = aShType == TopAbs_SHAPE;
|
||||||
@@ -640,7 +664,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
|||||||
{
|
{
|
||||||
if (aShadedGroup.IsNull())
|
if (aShadedGroup.IsNull())
|
||||||
{
|
{
|
||||||
aShadedGroup = thePrs->NewGroup();
|
aShadedGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
aShadedGroup->SetClosed (isClosed);
|
aShadedGroup->SetClosed (isClosed);
|
||||||
}
|
}
|
||||||
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
|
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
|
||||||
@@ -649,15 +673,18 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
|||||||
|
|
||||||
if (aDrawer->FaceBoundaryDraw())
|
if (aDrawer->FaceBoundaryDraw())
|
||||||
{
|
{
|
||||||
if (Handle(Graphic3d_ArrayOfSegments) aBndSegments = StdPrs_ShadedShape::FillFaceBoundaries (aShapeDraw, aDrawer->FaceBoundaryUpperContinuity()))
|
Handle(Graphic3d_ArrayOfSegments) aBndSegments = StdPrs_ShadedShape::FillFaceBoundaries (aShapeDraw);
|
||||||
|
if (!aBndSegments.IsNull())
|
||||||
{
|
{
|
||||||
if (anEdgesGroup.IsNull())
|
if (aShadedGroup.IsNull())
|
||||||
{
|
{
|
||||||
anEdgesGroup = thePrs->NewGroup();
|
aShadedGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
|
aShadedGroup->SetClosed (isClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
anEdgesGroup->SetPrimitivesAspect (aDrawer->FaceBoundaryAspect()->Aspect());
|
Handle(Graphic3d_AspectLine3d) aBoundaryAspect = aDrawer->FaceBoundaryAspect()->Aspect();
|
||||||
anEdgesGroup->AddPrimitiveArray (aBndSegments);
|
aShadedGroup->SetPrimitivesAspect (aBoundaryAspect);
|
||||||
|
aShadedGroup->AddPrimitiveArray (aBndSegments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -81,16 +81,11 @@ public: //! @name global aspects
|
|||||||
//! Sets transparency value.
|
//! Sets transparency value.
|
||||||
Standard_EXPORT virtual void SetTransparency (const Standard_Real theValue) Standard_OVERRIDE;
|
Standard_EXPORT virtual void SetTransparency (const Standard_Real theValue) Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Sets the material aspect.
|
|
||||||
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Removes the setting for transparency in the reconstructed compound shape.
|
//! Removes the setting for transparency in the reconstructed compound shape.
|
||||||
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
|
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
|
||||||
|
|
||||||
//! Setup line width of entire shape.
|
//! Sets the material aspect.
|
||||||
Standard_EXPORT virtual void UnsetWidth() Standard_OVERRIDE;
|
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE;
|
||||||
|
|
||||||
protected: //! @name override presentation computation
|
protected: //! @name override presentation computation
|
||||||
|
|
||||||
|
@@ -431,7 +431,6 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
|||||||
const TCollection_ExtendedString& theText,
|
const TCollection_ExtendedString& theText,
|
||||||
const Standard_Integer theLabelPosition)
|
const Standard_Integer theLabelPosition)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
if (myDrawer->DimensionAspect()->IsText3d())
|
if (myDrawer->DimensionAspect()->IsText3d())
|
||||||
{
|
{
|
||||||
// getting font parameters
|
// getting font parameters
|
||||||
@@ -518,7 +517,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
|||||||
aCenterOfLabel.Transform (aTextPlaneTrsf);
|
aCenterOfLabel.Transform (aTextPlaneTrsf);
|
||||||
|
|
||||||
gp_Ax2 aFlippingAxes (aCenterOfLabel, GetPlane().Axis().Direction(), aTextDir);
|
gp_Ax2 aFlippingAxes (aCenterOfLabel, GetPlane().Axis().Direction(), aTextDir);
|
||||||
aGroup->SetFlippingOptions (Standard_True, aFlippingAxes);
|
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_True, aFlippingAxes);
|
||||||
|
|
||||||
// draw text
|
// draw text
|
||||||
if (myDrawer->DimensionAspect()->IsTextShaded())
|
if (myDrawer->DimensionAspect()->IsTextShaded())
|
||||||
@@ -547,14 +546,11 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
|||||||
{
|
{
|
||||||
myDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (aColor, Aspect_TOL_SOLID, 1.0));
|
myDrawer->SetFreeBoundaryAspect (new Prs3d_LineAspect (aColor, Aspect_TOL_SOLID, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
myDrawer->FreeBoundaryAspect()->Aspect()->SetColor (aColor);
|
myDrawer->FreeBoundaryAspect()->Aspect()->SetColor (aColor);
|
||||||
|
|
||||||
// drawing text
|
// drawing text
|
||||||
if (Handle(Graphic3d_ArrayOfPrimitives) anEdges = StdPrs_WFShape::AddAllEdges (aTextShape, myDrawer))
|
StdPrs_WFShape::Add (thePresentation, aTextShape, myDrawer);
|
||||||
{
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->FreeBoundaryAspect()->Aspect());
|
|
||||||
aGroup->AddPrimitiveArray (anEdges);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_False, gp_Ax2());
|
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_False, gp_Ax2());
|
||||||
|
|
||||||
@@ -569,7 +565,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
|||||||
// generate primitives for 2D text
|
// generate primitives for 2D text
|
||||||
myDrawer->DimensionAspect()->TextAspect()->Aspect()->SetDisplayType (Aspect_TODT_DIMENSION);
|
myDrawer->DimensionAspect()->TextAspect()->Aspect()->SetDisplayType (Aspect_TODT_DIMENSION);
|
||||||
|
|
||||||
Prs3d_Text::Draw (aGroup,
|
Prs3d_Text::Draw (Prs3d_Root::CurrentGroup (thePresentation),
|
||||||
myDrawer->DimensionAspect()->TextAspect(),
|
myDrawer->DimensionAspect()->TextAspect(),
|
||||||
theText,
|
theText,
|
||||||
theTextPos);
|
theTextPos);
|
||||||
@@ -603,7 +599,6 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
|||||||
gp_Pnt aTextPos = ElCLib::Value (theExtensionSize, anExtensionLine);
|
gp_Pnt aTextPos = ElCLib::Value (theExtensionSize, anExtensionLine);
|
||||||
gp_Dir aTextDir = theExtensionDir;
|
gp_Dir aTextDir = theExtensionDir;
|
||||||
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
drawText (thePresentation,
|
drawText (thePresentation,
|
||||||
aTextPos,
|
aTextPos,
|
||||||
aTextDir,
|
aTextDir,
|
||||||
@@ -635,17 +630,16 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
|||||||
aSensitiveCurve.Append (anExtStart);
|
aSensitiveCurve.Append (anExtStart);
|
||||||
aSensitiveCurve.Append (anExtEnd);
|
aSensitiveCurve.Append (anExtEnd);
|
||||||
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
||||||
{
|
{
|
||||||
aGroup->SetStencilTestOptions (Standard_True);
|
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
|
||||||
}
|
}
|
||||||
Handle(Graphic3d_AspectLine3d) aDimensionLineStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
|
Handle(Graphic3d_AspectLine3d) aDimensionLineStyle = myDrawer->DimensionAspect()->LineAspect()->Aspect();
|
||||||
aGroup->SetPrimitivesAspect (aDimensionLineStyle);
|
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionLineStyle);
|
||||||
aGroup->AddPrimitiveArray (anExtPrimitive);
|
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (anExtPrimitive);
|
||||||
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
if (!myDrawer->DimensionAspect()->IsText3d() && theMode == ComputeMode_All)
|
||||||
{
|
{
|
||||||
aGroup->SetStencilTestOptions (Standard_False);
|
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -739,6 +733,8 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
case LabelPosition_HCenter:
|
case LabelPosition_HCenter:
|
||||||
{
|
{
|
||||||
// add label on dimension or extension line to presentation
|
// add label on dimension or extension line to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
|
gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
|
||||||
: (aCenterLineBegin.XYZ() + aCenterLineEnd.XYZ()) * 0.5;
|
: (aCenterLineBegin.XYZ() + aCenterLineEnd.XYZ()) * 0.5;
|
||||||
gp_Dir aTextDir = aDimensionLine.Direction();
|
gp_Dir aTextDir = aDimensionLine.Direction();
|
||||||
@@ -746,7 +742,6 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
// add text primitives
|
// add text primitives
|
||||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
|
if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
|
||||||
{
|
{
|
||||||
thePresentation->NewGroup();
|
|
||||||
drawText (thePresentation,
|
drawText (thePresentation,
|
||||||
aTextPos,
|
aTextPos,
|
||||||
aTextDir,
|
aTextDir,
|
||||||
@@ -804,28 +799,24 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
aDimensionAspect->TextAspect()->SetVerticalJustification (aTextJustificaton);
|
aDimensionAspect->TextAspect()->SetVerticalJustification (aTextJustificaton);
|
||||||
|
|
||||||
// main dimension line, short extension
|
// main dimension line, short extension
|
||||||
|
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
|
||||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
}
|
||||||
{
|
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||||
aGroup->SetStencilTestOptions (Standard_True);
|
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||||
}
|
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
{
|
||||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
|
||||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
|
||||||
{
|
|
||||||
aGroup->SetStencilTestOptions (Standard_False);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add arrows to presentation
|
// add arrows to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
|
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||||
|
if (!theIsOneSide)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
|
||||||
if (!theIsOneSide)
|
|
||||||
{
|
|
||||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isArrowsExternal)
|
if (!isArrowsExternal)
|
||||||
@@ -834,18 +825,19 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add arrow extension lines to presentation
|
// add arrow extension lines to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
|
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||||
|
aFirstArrowEnd, aFirstExtensionDir,
|
||||||
|
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||||
|
if (!theIsOneSide)
|
||||||
{
|
{
|
||||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||||
aFirstArrowEnd, aFirstExtensionDir,
|
aSecondArrowEnd, aSecondExtensionDir,
|
||||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||||
if (!theIsOneSide)
|
|
||||||
{
|
|
||||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
|
||||||
aSecondArrowEnd, aSecondExtensionDir,
|
|
||||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------ //
|
// ------------------------------------------------------------------------ //
|
||||||
@@ -855,48 +847,45 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
case LabelPosition_Left:
|
case LabelPosition_Left:
|
||||||
{
|
{
|
||||||
// add label on dimension or extension line to presentation
|
// add label on dimension or extension line to presentation
|
||||||
{
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
// Left extension with the text
|
|
||||||
DrawExtension (thePresentation, anExtensionSize,
|
// Left extension with the text
|
||||||
isArrowsExternal
|
DrawExtension (thePresentation, anExtensionSize,
|
||||||
? aFirstArrowEnd
|
isArrowsExternal
|
||||||
: aFirstArrowBegin,
|
? aFirstArrowEnd
|
||||||
aFirstExtensionDir,
|
: aFirstArrowBegin,
|
||||||
aLabelString,
|
aFirstExtensionDir,
|
||||||
aLabelWidth,
|
aLabelString,
|
||||||
theMode,
|
aLabelWidth,
|
||||||
aLabelPosition);
|
theMode,
|
||||||
}
|
aLabelPosition);
|
||||||
|
|
||||||
// add dimension line primitives
|
// add dimension line primitives
|
||||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||||
{
|
{
|
||||||
// add central dimension line
|
// add central dimension line
|
||||||
{
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
|
|
||||||
// add graphical primitives
|
// add graphical primitives
|
||||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||||
|
|
||||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||||
|
|
||||||
// add selection primitives
|
// add selection primitives
|
||||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||||
aSensitiveCurve.Append (aCenterLineBegin);
|
aSensitiveCurve.Append (aCenterLineBegin);
|
||||||
aSensitiveCurve.Append (aCenterLineEnd);
|
aSensitiveCurve.Append (aCenterLineEnd);
|
||||||
}
|
|
||||||
|
|
||||||
// add arrows to presentation
|
// add arrows to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
|
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||||
|
if (!theIsOneSide)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
|
||||||
if (!theIsOneSide)
|
|
||||||
{
|
|
||||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isArrowsExternal || theIsOneSide)
|
if (!isArrowsExternal || theIsOneSide)
|
||||||
@@ -905,11 +894,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add extension lines for external arrows
|
// add extension lines for external arrows
|
||||||
{
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
|
||||||
aSecondArrowEnd, aSecondExtensionDir,
|
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
aSecondArrowEnd, aSecondExtensionDir,
|
||||||
}
|
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -921,6 +910,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
case LabelPosition_Right:
|
case LabelPosition_Right:
|
||||||
{
|
{
|
||||||
// add label on dimension or extension line to presentation
|
// add label on dimension or extension line to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
// Right extension with text
|
// Right extension with text
|
||||||
DrawExtension (thePresentation, anExtensionSize,
|
DrawExtension (thePresentation, anExtensionSize,
|
||||||
@@ -935,30 +925,27 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||||
{
|
{
|
||||||
// add central dimension line
|
// add central dimension line
|
||||||
{
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
|
|
||||||
// add graphical primitives
|
// add graphical primitives
|
||||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||||
|
|
||||||
// add selection primitives
|
// add selection primitives
|
||||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||||
aSensitiveCurve.Append (aCenterLineBegin);
|
aSensitiveCurve.Append (aCenterLineBegin);
|
||||||
aSensitiveCurve.Append (aCenterLineEnd);
|
aSensitiveCurve.Append (aCenterLineEnd);
|
||||||
}
|
|
||||||
|
|
||||||
// add arrows to presentation
|
// add arrows to presentation
|
||||||
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
|
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||||
|
if (!theIsOneSide)
|
||||||
{
|
{
|
||||||
thePresentation->NewGroup();
|
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
|
||||||
if (!theIsOneSide)
|
|
||||||
{
|
|
||||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isArrowsExternal || theIsOneSide)
|
if (!isArrowsExternal || theIsOneSide)
|
||||||
@@ -967,11 +954,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add extension lines for external arrows
|
// add extension lines for external arrows
|
||||||
{
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
|
||||||
aFirstArrowEnd, aFirstExtensionDir,
|
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
aFirstArrowEnd, aFirstExtensionDir,
|
||||||
}
|
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -981,7 +968,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
// add flyout lines to presentation
|
// add flyout lines to presentation
|
||||||
if (theMode == ComputeMode_All)
|
if (theMode == ComputeMode_All)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
Prs3d_Root::NewGroup (thePresentation);
|
||||||
|
|
||||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments(4);
|
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments(4);
|
||||||
aPrimSegments->AddVertex (theFirstPoint);
|
aPrimSegments->AddVertex (theFirstPoint);
|
||||||
@@ -990,8 +977,8 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
|||||||
aPrimSegments->AddVertex (theSecondPoint);
|
aPrimSegments->AddVertex (theSecondPoint);
|
||||||
aPrimSegments->AddVertex (aLineEndPoint);
|
aPrimSegments->AddVertex (aLineEndPoint);
|
||||||
|
|
||||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||||
}
|
}
|
||||||
|
|
||||||
mySelectionGeom.IsComputed = Standard_True;
|
mySelectionGeom.IsComputed = Standard_True;
|
||||||
|
@@ -198,21 +198,6 @@ public: //! @name highlighting management
|
|||||||
const Handle(Prs3d_Drawer)& HighlightStyle (const Prs3d_TypeOfHighlight theStyleType) const { return myStyles[theStyleType]; }
|
const Handle(Prs3d_Drawer)& HighlightStyle (const Prs3d_TypeOfHighlight theStyleType) const { return myStyles[theStyleType]; }
|
||||||
|
|
||||||
//! Setup highlight style settings.
|
//! Setup highlight style settings.
|
||||||
//! It is preferred modifying existing style returned by method HighlightStyle()
|
|
||||||
//! instead of creating a new drawer.
|
|
||||||
//!
|
|
||||||
//! If a new highlight style is created, its presentation Zlayer should be checked,
|
|
||||||
//! otherwise highlighting might not work as expected.
|
|
||||||
//! Default values are:
|
|
||||||
//! - Prs3d_TypeOfHighlight_Dynamic: Graphic3d_ZLayerId_Top,
|
|
||||||
//! object highlighting is drawn on top of main scene within Immediate Layers,
|
|
||||||
//! so that V3d_View::RedrawImmediate() will be enough to see update;
|
|
||||||
//! - Prs3d_TypeOfHighlight_LocalDynamic: Graphic3d_ZLayerId_Topmost,
|
|
||||||
//! object parts highlighting is drawn on top of main scene within Immediate Layers
|
|
||||||
//! with depth cleared (even overlapped geometry will be revealed);
|
|
||||||
//! - Prs3d_TypeOfHighlight_Selected: Graphic3d_ZLayerId_UNKNOWN,
|
|
||||||
//! object highlighting is drawn on top of main scene within the same layer
|
|
||||||
//! as object itself (e.g. Graphic3d_ZLayerId_Default by default) and increased priority.
|
|
||||||
void SetHighlightStyle (const Prs3d_TypeOfHighlight theStyleType,
|
void SetHighlightStyle (const Prs3d_TypeOfHighlight theStyleType,
|
||||||
const Handle(Prs3d_Drawer)& theStyle) { myStyles[theStyleType] = theStyle; }
|
const Handle(Prs3d_Drawer)& theStyle) { myStyles[theStyleType] = theStyle; }
|
||||||
|
|
||||||
@@ -227,14 +212,6 @@ public: //! @name highlighting management
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Setup the style of dynamic highlighting.
|
//! Setup the style of dynamic highlighting.
|
||||||
//! It is preferred modifying existing style returned by method HighlightStyle()
|
|
||||||
//! instead of creating a new drawer.
|
|
||||||
//!
|
|
||||||
//! If a new highlight style is created, its presentation Zlayer should be checked,
|
|
||||||
//! otherwise highlighting might not work as expected.
|
|
||||||
//! Default value is Graphic3d_ZLayerId_Top,
|
|
||||||
//! object highlighting is drawn on top of main scene within Immediate Layers,
|
|
||||||
//! so that V3d_View::RedrawImmediate() will be enough to see update;
|
|
||||||
void SetHighlightStyle (const Handle(Prs3d_Drawer)& theStyle) { myStyles[Prs3d_TypeOfHighlight_Dynamic] = theStyle; }
|
void SetHighlightStyle (const Handle(Prs3d_Drawer)& theStyle) { myStyles[Prs3d_TypeOfHighlight_Dynamic] = theStyle; }
|
||||||
|
|
||||||
//! Returns current selection style settings.
|
//! Returns current selection style settings.
|
||||||
@@ -1285,10 +1262,6 @@ protected: //! @name internal methods
|
|||||||
return myStyles[!theOwner.IsNull() && theOwner->ComesFromDecomposition() ? Prs3d_TypeOfHighlight_LocalDynamic : Prs3d_TypeOfHighlight_Dynamic];
|
return myStyles[!theOwner.IsNull() && theOwner->ComesFromDecomposition() ? Prs3d_TypeOfHighlight_LocalDynamic : Prs3d_TypeOfHighlight_Dynamic];
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Return TRUE if highlight style of owner requires full viewer redraw.
|
|
||||||
Standard_EXPORT Standard_Boolean isSlowHiStyle (const Handle(SelectMgr_EntityOwner)& theOwner,
|
|
||||||
const Handle(V3d_Viewer)& theViewer) const;
|
|
||||||
|
|
||||||
//! Helper function that returns correct selection style for the object:
|
//! Helper function that returns correct selection style for the object:
|
||||||
//! if custom style is defined via object's highlight drawer, it will be used. Otherwise,
|
//! if custom style is defined via object's highlight drawer, it will be used. Otherwise,
|
||||||
//! selection style of interactive context will be returned.
|
//! selection style of interactive context will be returned.
|
||||||
|
@@ -293,22 +293,6 @@ void AIS_InteractiveContext::highlightWithSubintensity (const Handle(SelectMgr_E
|
|||||||
theOwner->HilightWithColor (myMainPM, myStyles[Prs3d_TypeOfHighlight_SubIntensity], theMode);
|
theOwner->HilightWithColor (myMainPM, myStyles[Prs3d_TypeOfHighlight_SubIntensity], theMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : isSlowHiStyle
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
Standard_Boolean AIS_InteractiveContext::isSlowHiStyle (const Handle(SelectMgr_EntityOwner)& theOwner,
|
|
||||||
const Handle(V3d_Viewer)& theViewer) const
|
|
||||||
{
|
|
||||||
if (const Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()))
|
|
||||||
{
|
|
||||||
const Handle(Prs3d_Drawer)& aHiStyle = getHiStyle (anObj, myLastPicked);
|
|
||||||
return aHiStyle->ZLayer() == Graphic3d_ZLayerId_UNKNOWN
|
|
||||||
|| !theViewer->ZLayerSettings (aHiStyle->ZLayer()).IsImmediate();
|
|
||||||
}
|
|
||||||
return Standard_False;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : MoveTo
|
//function : MoveTo
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -388,11 +372,6 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
|||||||
// method call. As result it is necessary to rehighligt it with mySelectionColor.
|
// method call. As result it is necessary to rehighligt it with mySelectionColor.
|
||||||
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
|
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
|
||||||
{
|
{
|
||||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
|
||||||
{
|
|
||||||
theView->Viewer()->Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
clearDynamicHighlight();
|
clearDynamicHighlight();
|
||||||
toUpdateViewer = Standard_True;
|
toUpdateViewer = Standard_True;
|
||||||
}
|
}
|
||||||
@@ -408,11 +387,6 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
|||||||
&& (!myLastPicked->IsSelected()
|
&& (!myLastPicked->IsSelected()
|
||||||
|| myToHilightSelected))
|
|| myToHilightSelected))
|
||||||
{
|
{
|
||||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
|
||||||
{
|
|
||||||
theView->Viewer()->Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
highlightWithColor (myLastPicked, theView->Viewer());
|
highlightWithColor (myLastPicked, theView->Viewer());
|
||||||
toUpdateViewer = Standard_True;
|
toUpdateViewer = Standard_True;
|
||||||
}
|
}
|
||||||
@@ -431,11 +405,6 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
|||||||
&& !myLastPicked.IsNull()
|
&& !myLastPicked.IsNull()
|
||||||
&& myLastPicked->HasSelectable())
|
&& myLastPicked->HasSelectable())
|
||||||
{
|
{
|
||||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
|
||||||
{
|
|
||||||
theView->Viewer()->Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
clearDynamicHighlight();
|
clearDynamicHighlight();
|
||||||
toUpdateViewer = Standard_True;
|
toUpdateViewer = Standard_True;
|
||||||
}
|
}
|
||||||
@@ -453,14 +422,7 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (theView->IsInvalidated())
|
theView->Viewer()->RedrawImmediate();
|
||||||
{
|
|
||||||
theView->Viewer()->Redraw();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
theView->Viewer()->RedrawImmediate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -472,7 +472,33 @@ void AIS_InteractiveObject::SetPolygonOffsets(const Standard_Integer aMode,
|
|||||||
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
||||||
|
|
||||||
myDrawer->ShadingAspect()->Aspect()->SetPolygonOffsets( aMode, aFactor, aUnits );
|
myDrawer->ShadingAspect()->Aspect()->SetPolygonOffsets( aMode, aFactor, aUnits );
|
||||||
SynchronizeAspects();
|
|
||||||
|
// Modify existing presentations
|
||||||
|
for (Standard_Integer aPrsIter = 1, n = myPresentations.Length(); aPrsIter <= n; ++aPrsIter)
|
||||||
|
{
|
||||||
|
const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations (aPrsIter).Presentation();
|
||||||
|
if ( !aPrs3d.IsNull() ) {
|
||||||
|
const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
|
||||||
|
if( !aStruct.IsNull() ) {
|
||||||
|
// Workaround for issue 23115: Need to update also groups, because their
|
||||||
|
// face aspect ALWAYS overrides the structure's.
|
||||||
|
const Graphic3d_SequenceOfGroup& aGroups = aStruct->Groups();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aGroups); aGroupIter.More(); aGroupIter.Next())
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||||
|
if (aGrp.IsNull()
|
||||||
|
|| !aGrp->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) aFaceAsp = aGrp->FillAreaAspect();
|
||||||
|
aFaceAsp->SetPolygonOffsets(aMode, aFactor, aUnits);
|
||||||
|
aGrp->SetGroupPrimitivesAspect(aFaceAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -596,33 +622,3 @@ void AIS_InteractiveObject::SynchronizeAspects()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : replaceAspects
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void AIS_InteractiveObject::replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap)
|
|
||||||
{
|
|
||||||
if (theMap.IsEmpty())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (PrsMgr_Presentations::Iterator aPrsIter (myPresentations); aPrsIter.More(); aPrsIter.Next())
|
|
||||||
{
|
|
||||||
const Handle(PrsMgr_Presentation)& aPrs3d = aPrsIter.ChangeValue().Presentation();
|
|
||||||
if (aPrs3d.IsNull()
|
|
||||||
|| aPrs3d->Presentation().IsNull())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPrs3d->Presentation()->Groups()); aGroupIter.More(); aGroupIter.Next())
|
|
||||||
{
|
|
||||||
if (!aGroupIter.Value().IsNull())
|
|
||||||
{
|
|
||||||
aGroupIter.ChangeValue()->ReplaceAspects (theMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -386,15 +386,6 @@ public:
|
|||||||
//! so that modifications will take effect on already computed presentation groups (thus avoiding re-displaying the object).
|
//! so that modifications will take effect on already computed presentation groups (thus avoiding re-displaying the object).
|
||||||
Standard_EXPORT void SynchronizeAspects();
|
Standard_EXPORT void SynchronizeAspects();
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
//! Replace aspects of existing (computed) presentation groups,
|
|
||||||
//! so that the new aspects can be applied without recomputing presentation.
|
|
||||||
//! It is NOT recommended approach, because user has to fill such map and then search for each occurrence in computed groups.
|
|
||||||
//! The recommended approach is computing presentation with necessary customized aspects,
|
|
||||||
//! and then modify them directly followed by SynchronizeAspects() call.
|
|
||||||
Standard_EXPORT void replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Standard_EXPORT virtual Standard_Boolean RecomputeEveryPrs() const;
|
Standard_EXPORT virtual Standard_Boolean RecomputeEveryPrs() const;
|
||||||
|
@@ -26,7 +26,6 @@
|
|||||||
#include <Prs3d_Root.hxx>
|
#include <Prs3d_Root.hxx>
|
||||||
#include <Prs3d_ShadingAspect.hxx>
|
#include <Prs3d_ShadingAspect.hxx>
|
||||||
#include <Prs3d_ToolDisk.hxx>
|
#include <Prs3d_ToolDisk.hxx>
|
||||||
#include <Prs3d_ToolSector.hxx>
|
|
||||||
#include <Prs3d_ToolSphere.hxx>
|
#include <Prs3d_ToolSphere.hxx>
|
||||||
#include <Select3D_SensitiveCircle.hxx>
|
#include <Select3D_SensitiveCircle.hxx>
|
||||||
#include <Select3D_SensitivePoint.hxx>
|
#include <Select3D_SensitivePoint.hxx>
|
||||||
@@ -152,19 +151,6 @@ void AIS_Manipulator::init()
|
|||||||
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
myHighlightAspect->SetMaterial (aHilightMaterial);
|
myHighlightAspect->SetMaterial (aHilightMaterial);
|
||||||
|
|
||||||
Graphic3d_MaterialAspect aDraggerMaterial;
|
|
||||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_DIFFUSE);
|
|
||||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_SPECULAR);
|
|
||||||
aDraggerMaterial.SetReflectionModeOff(Graphic3d_TOR_EMISSION);
|
|
||||||
aDraggerMaterial.SetMaterialType(Graphic3d_MATERIAL_ASPECT);
|
|
||||||
aDraggerMaterial.SetAmbient(1.0);
|
|
||||||
|
|
||||||
myDraggerHighlight = new Prs3d_ShadingAspect();
|
|
||||||
myDraggerHighlight->Aspect()->SetInteriorStyle(Aspect_IS_SOLID);
|
|
||||||
myDraggerHighlight->SetMaterial(aDraggerMaterial);
|
|
||||||
|
|
||||||
myDraggerHighlight->SetTransparency(0.5);
|
|
||||||
|
|
||||||
SetSize (100);
|
SetSize (100);
|
||||||
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
||||||
}
|
}
|
||||||
@@ -184,11 +170,10 @@ Handle(Prs3d_Presentation) AIS_Manipulator::getHighlightPresentation (const Hand
|
|||||||
|
|
||||||
switch (anOwner->Mode())
|
switch (anOwner->Mode())
|
||||||
{
|
{
|
||||||
case AIS_MM_Translation : return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
case AIS_MM_Translation: return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||||
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
||||||
case AIS_MM_TranslationPlane: return myAxes[anOwner->Index()].DraggerHighlightPrs();
|
case AIS_MM_None : break;
|
||||||
case AIS_MM_None : break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return aDummyPrs;
|
return aDummyPrs;
|
||||||
@@ -209,11 +194,10 @@ Handle(Graphic3d_Group) AIS_Manipulator::getGroup (const Standard_Integer theInd
|
|||||||
|
|
||||||
switch (theMode)
|
switch (theMode)
|
||||||
{
|
{
|
||||||
case AIS_MM_Translation : return myAxes[theIndex].TranslatorGroup();
|
case AIS_MM_Translation: return myAxes[theIndex].TranslatorGroup();
|
||||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||||
case AIS_MM_TranslationPlane: return myAxes[theIndex].DraggerGroup();
|
case AIS_MM_None : break;
|
||||||
case AIS_MM_None : break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return aDummyGroup;
|
return aDummyGroup;
|
||||||
@@ -282,10 +266,6 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
|||||||
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AIS_MM_TranslationPlane:
|
|
||||||
myAxes[theAxisIndex].SetDragging(theIsEnabled);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AIS_MM_None:
|
case AIS_MM_None:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -297,7 +277,7 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void AIS_Manipulator::SetPart (const AIS_ManipulatorMode theMode, const Standard_Boolean theIsEnabled)
|
void AIS_Manipulator::SetPart (const AIS_ManipulatorMode theMode, const Standard_Boolean theIsEnabled)
|
||||||
{
|
{
|
||||||
for (Standard_Integer anIt = 0; anIt < 4; ++anIt)
|
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||||
{
|
{
|
||||||
SetPart (anIt, theMode, theIsEnabled);
|
SetPart (anIt, theMode, theIsEnabled);
|
||||||
}
|
}
|
||||||
@@ -420,7 +400,6 @@ void AIS_Manipulator::Attach (const Handle(AIS_ManipulatorObjectSequence)& theOb
|
|||||||
EnableMode (AIS_MM_Rotation);
|
EnableMode (AIS_MM_Rotation);
|
||||||
EnableMode (AIS_MM_Translation);
|
EnableMode (AIS_MM_Translation);
|
||||||
EnableMode (AIS_MM_Scaling);
|
EnableMode (AIS_MM_Scaling);
|
||||||
EnableMode (AIS_MM_TranslationPlane);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -607,34 +586,6 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
|||||||
myPrevState = anAngle;
|
myPrevState = anAngle;
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
case AIS_MM_TranslationPlane:
|
|
||||||
{
|
|
||||||
const gp_Pnt aPosLoc = myStartPosition.Location();
|
|
||||||
const gp_Ax1 aCurrAxis = getAx1FromAx2Dir(myStartPosition, myCurrentIndex);
|
|
||||||
IntAna_IntConicQuad aIntersector(anInputLine, gp_Pln(aPosLoc, aCurrAxis.Direction()), Precision::Angular(), Precision::Intersection());
|
|
||||||
if (!aIntersector.IsDone() || aIntersector.NbPoints() < 1)
|
|
||||||
{
|
|
||||||
return Standard_False;
|
|
||||||
}
|
|
||||||
|
|
||||||
const gp_Pnt aNewPosition = aIntersector.Point(1);
|
|
||||||
if (!myHasStartedTransformation)
|
|
||||||
{
|
|
||||||
myStartPick = aNewPosition;
|
|
||||||
myHasStartedTransformation = Standard_True;
|
|
||||||
return Standard_True;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aNewPosition.Distance(myStartPick) < Precision::Confusion())
|
|
||||||
{
|
|
||||||
return Standard_False;
|
|
||||||
}
|
|
||||||
|
|
||||||
gp_Trsf aNewTrsf;
|
|
||||||
aNewTrsf.SetTranslation(gp_Vec(myStartPick, aNewPosition));
|
|
||||||
theTrsf *= aNewTrsf;
|
|
||||||
return Standard_True;
|
|
||||||
}
|
|
||||||
case AIS_MM_None:
|
case AIS_MM_None:
|
||||||
{
|
{
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
@@ -706,9 +657,8 @@ void AIS_Manipulator::Transform (const gp_Trsf& theTrsf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation)
|
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation))
|
||||||
|| (myCurrentMode == AIS_MM_TranslationPlane && myBehaviorOnTransform.FollowDragging))
|
|
||||||
{
|
{
|
||||||
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
||||||
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
||||||
@@ -836,13 +786,8 @@ void AIS_Manipulator::DeactivateCurrentMode()
|
|||||||
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
||||||
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||||
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
||||||
if (myCurrentMode == AIS_MM_TranslationPlane)
|
anAspect->SetTransparency (myDrawer->ShadingAspect()->Transparency());
|
||||||
anAspect->SetTransparency(1.0);
|
anAspect->SetColor (myAxes[myCurrentIndex].Color());
|
||||||
else
|
|
||||||
{
|
|
||||||
anAspect->SetTransparency(myDrawer->ShadingAspect()->Transparency());
|
|
||||||
anAspect->SetColor(myAxes[myCurrentIndex].Color());
|
|
||||||
}
|
|
||||||
|
|
||||||
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
||||||
}
|
}
|
||||||
@@ -937,14 +882,14 @@ void AIS_Manipulator::Compute (const Handle(PrsMgr_PresentationManager3d)& thePr
|
|||||||
|
|
||||||
// Display center
|
// Display center
|
||||||
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
||||||
aGroup = thePrs->NewGroup ();
|
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (myCenter.Array());
|
aGroup->AddPrimitiveArray (myCenter.Array());
|
||||||
|
|
||||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||||
{
|
{
|
||||||
// Display axes
|
// Display axes
|
||||||
aGroup = thePrs->NewGroup ();
|
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
|
|
||||||
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
||||||
anAspectAx->SetColor (myAxes[anIt].Color());
|
anAspectAx->SetColor (myAxes[anIt].Color());
|
||||||
@@ -987,13 +932,7 @@ void AIS_Manipulator::HilightSelected (const Handle(PrsMgr_PresentationManager3d
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
aGroup->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||||
{
|
|
||||||
myDraggerHighlight->SetColor(myAxes[anOwner->Index()].Color());
|
|
||||||
aGroup->SetGroupPrimitivesAspect(myDraggerHighlight->Aspect());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
aGroup->SetGroupPrimitivesAspect(myHighlightAspect->Aspect());
|
|
||||||
|
|
||||||
myCurrentIndex = anOwner->Index();
|
myCurrentIndex = anOwner->Index();
|
||||||
myCurrentMode = anOwner->Mode();
|
myCurrentMode = anOwner->Mode();
|
||||||
@@ -1022,20 +961,13 @@ void AIS_Manipulator::HilightOwnerWithColor (const Handle(PrsMgr_PresentationMan
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
aPresentation->Highlight (theStyle);
|
||||||
{
|
|
||||||
Handle(Prs3d_Drawer) aStyle = new Prs3d_Drawer();
|
|
||||||
aStyle->SetColor(myAxes[anOwner->Index()].Color());
|
|
||||||
aStyle->SetTransparency(0.5);
|
|
||||||
aPresentation->Highlight(aStyle);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
aPresentation->Highlight(theStyle);
|
|
||||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
||||||
aGroupIter.More(); aGroupIter.Next())
|
aGroupIter.More(); aGroupIter.Next())
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||||
if (!aGrp.IsNull())
|
if (!aGrp.IsNull()
|
||||||
|
&& aGrp->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
{
|
{
|
||||||
aGrp->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
aGrp->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||||
}
|
}
|
||||||
@@ -1144,38 +1076,6 @@ void AIS_Manipulator::ComputeSelection (const Handle(SelectMgr_Selection)& theSe
|
|||||||
theSelection->Add (aTri);
|
theSelection->Add (aTri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aMode == AIS_MM_TranslationPlane || aMode == AIS_MM_None)
|
|
||||||
{
|
|
||||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
|
||||||
{
|
|
||||||
if (!myAxes[anIt].HasDragging())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (aMode != AIS_MM_None)
|
|
||||||
{
|
|
||||||
anOwner = new AIS_ManipulatorOwner(this, anIt, AIS_MM_TranslationPlane, 9);
|
|
||||||
}
|
|
||||||
|
|
||||||
// define sensitivity by two crossed lines
|
|
||||||
gp_Pnt aP1, aP2;
|
|
||||||
aP1 = myAxes[((anIt + 1) % 3)].TranslatorTipPosition();
|
|
||||||
aP2 = myAxes[((anIt + 2) % 3)].TranslatorTipPosition();
|
|
||||||
gp_XYZ aMidP = (aP1.XYZ() + aP2.XYZ()) / 2.0;
|
|
||||||
|
|
||||||
Handle(Select3D_SensitiveSegment) aLine1 = new Select3D_SensitiveSegment(anOwner, aP1, aP2);
|
|
||||||
aLine1->SetSensitivityFactor(10);
|
|
||||||
theSelection->Add(aLine1);
|
|
||||||
Handle(Select3D_SensitiveSegment) aLine2 = new Select3D_SensitiveSegment(anOwner, gp::Origin(), aMidP);
|
|
||||||
aLine2->SetSensitivityFactor(10);
|
|
||||||
theSelection->Add(aLine2);
|
|
||||||
|
|
||||||
// enlarge sensitivity by triangulation
|
|
||||||
Handle(Select3D_SensitiveTriangulation) aTri = new Select3D_SensitiveTriangulation(anOwner, myAxes[anIt].DraggerSector().Triangulation(), TopLoc_Location(), Standard_True);
|
|
||||||
theSelection->Add(aTri);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -1291,24 +1191,6 @@ void AIS_Manipulator::Cube::addTriangle (const Standard_Integer theIndex,
|
|||||||
myArray->AddVertex (theP3, theNormal);
|
myArray->AddVertex (theP3, theNormal);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//class : Sector
|
|
||||||
//function : Init
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void AIS_Manipulator::Sector::Init (const Standard_ShortReal theRadius,
|
|
||||||
const gp_Ax1& thePosition,
|
|
||||||
const gp_Dir& theXDirection,
|
|
||||||
const Standard_Integer theSlicesNb,
|
|
||||||
const Standard_Integer theStacksNb)
|
|
||||||
{
|
|
||||||
Prs3d_ToolSector aTool(theRadius, theSlicesNb, theStacksNb);
|
|
||||||
gp_Ax3 aSystem(thePosition.Location(), thePosition.Direction(), theXDirection);
|
|
||||||
gp_Trsf aTrsf;
|
|
||||||
aTrsf.SetTransformation(aSystem, gp_Ax3());
|
|
||||||
aTool.FillArray(myArray, myTriangulation, aTrsf);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//class : Axis
|
//class : Axis
|
||||||
//function : Constructor
|
//function : Constructor
|
||||||
@@ -1329,7 +1211,6 @@ AIS_Manipulator::Axis::Axis (const gp_Ax1& theAxis,
|
|||||||
myInnerRadius (myLength + myBoxSize),
|
myInnerRadius (myLength + myBoxSize),
|
||||||
myDiskThickness (myBoxSize * 0.5f),
|
myDiskThickness (myBoxSize * 0.5f),
|
||||||
myIndent (0.2f),
|
myIndent (0.2f),
|
||||||
myHasDragging(Standard_True),
|
|
||||||
myFacettesNumber (20),
|
myFacettesNumber (20),
|
||||||
myCircleRadius (myLength + myBoxSize + myBoxSize * 0.5f * 0.5f)
|
myCircleRadius (myLength + myBoxSize + myBoxSize * 0.5f * 0.5f)
|
||||||
{
|
{
|
||||||
@@ -1358,7 +1239,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
myAxisRadius * 1.5,
|
myAxisRadius * 1.5,
|
||||||
anArrowLength,
|
anArrowLength,
|
||||||
myFacettesNumber);
|
myFacettesNumber);
|
||||||
myTranslatorGroup = thePrs->NewGroup ();
|
myTranslatorGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
||||||
|
|
||||||
@@ -1382,7 +1263,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
||||||
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
||||||
|
|
||||||
myScalerGroup = thePrs->NewGroup ();
|
myScalerGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myScalerGroup->AddPrimitiveArray (myCube.Array());
|
myScalerGroup->AddPrimitiveArray (myCube.Array());
|
||||||
|
|
||||||
@@ -1405,7 +1286,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
{
|
{
|
||||||
myCircleRadius = myInnerRadius + myIndent * 2 + myDiskThickness * 0.5f;
|
myCircleRadius = myInnerRadius + myIndent * 2 + myDiskThickness * 0.5f;
|
||||||
myCircle.Init (myInnerRadius + myIndent * 2, myInnerRadius + myDiskThickness + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), myFacettesNumber * 2);
|
myCircle.Init (myInnerRadius + myIndent * 2, myInnerRadius + myDiskThickness + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), myFacettesNumber * 2);
|
||||||
myRotatorGroup = thePrs->NewGroup ();
|
myRotatorGroup = Prs3d_Root::NewGroup (thePrs);
|
||||||
myRotatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
myRotatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||||
myRotatorGroup->AddPrimitiveArray (myCircle.Array());
|
myRotatorGroup->AddPrimitiveArray (myCircle.Array());
|
||||||
|
|
||||||
@@ -1423,36 +1304,4 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
|||||||
aGroup->AddPrimitiveArray (myCircle.Array());
|
aGroup->AddPrimitiveArray (myCircle.Array());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (myHasDragging)
|
|
||||||
{
|
|
||||||
gp_Dir aXDirection;
|
|
||||||
if (myReferenceAxis.Direction().X() > 0)
|
|
||||||
aXDirection = gp::DY();
|
|
||||||
else if (myReferenceAxis.Direction().Y() > 0)
|
|
||||||
aXDirection = gp::DZ();
|
|
||||||
else
|
|
||||||
aXDirection = gp::DX();
|
|
||||||
|
|
||||||
mySector.Init(myInnerRadius + myIndent * 2, gp_Ax1(gp::Origin(), myReferenceAxis.Direction()), aXDirection, myFacettesNumber * 2);
|
|
||||||
myDraggerGroup = thePrs->NewGroup();
|
|
||||||
|
|
||||||
Handle(Graphic3d_AspectFillArea3d) aFillArea = new Graphic3d_AspectFillArea3d();
|
|
||||||
myDraggerGroup->SetGroupPrimitivesAspect(aFillArea);
|
|
||||||
myDraggerGroup->AddPrimitiveArray(mySector.Array());
|
|
||||||
|
|
||||||
if (myHighlightDragger.IsNull())
|
|
||||||
{
|
|
||||||
myHighlightDragger = new Prs3d_Presentation(thePrsMgr->StructureManager());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myHighlightDragger->Clear();
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(myHighlightDragger);
|
|
||||||
aGroup->SetGroupPrimitivesAspect(aFillArea);
|
|
||||||
aGroup->AddPrimitiveArray(mySector.Array());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -280,14 +280,12 @@ public:
|
|||||||
//! - FollowRotation - whether the manipulator will be rotated together with an object.
|
//! - FollowRotation - whether the manipulator will be rotated together with an object.
|
||||||
struct BehaviorOnTransform {
|
struct BehaviorOnTransform {
|
||||||
|
|
||||||
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True), FollowDragging (Standard_True) {}
|
BehaviorOnTransform() : FollowTranslation (Standard_True), FollowRotation (Standard_True) {}
|
||||||
BehaviorOnTransform& SetFollowTranslation (const Standard_Boolean theApply) { FollowTranslation = theApply; return *this; }
|
BehaviorOnTransform& SetFollowTranslation (const Standard_Boolean theApply) { FollowTranslation = theApply; return *this; }
|
||||||
BehaviorOnTransform& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
BehaviorOnTransform& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
||||||
BehaviorOnTransform& SetFollowDragging (const Standard_Boolean theApply) { FollowDragging = theApply; return *this; }
|
|
||||||
|
|
||||||
Standard_Boolean FollowTranslation;
|
Standard_Boolean FollowTranslation;
|
||||||
Standard_Boolean FollowRotation;
|
Standard_Boolean FollowRotation;
|
||||||
Standard_Boolean FollowDragging;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Sets behavior settings for transformation action carried on the manipulator,
|
//! Sets behavior settings for transformation action carried on the manipulator,
|
||||||
@@ -448,29 +446,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Handle(Graphic3d_ArrayOfTriangles) myArray;
|
Handle(Graphic3d_ArrayOfTriangles) myArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sector : public Quadric
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
Sector()
|
|
||||||
: Quadric(),
|
|
||||||
myRadius(0.0f)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
~Sector() { }
|
|
||||||
|
|
||||||
void Init(const Standard_ShortReal theRadius,
|
|
||||||
const gp_Ax1& thePosition,
|
|
||||||
const gp_Dir& theXDirection,
|
|
||||||
const Standard_Integer theSlicesNb = 5,
|
|
||||||
const Standard_Integer theStacksNb = 5);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
gp_Ax1 myPosition;
|
|
||||||
Standard_ShortReal myRadius;
|
|
||||||
};
|
|
||||||
|
|
||||||
//! The class describes on axis sub-object.
|
//! The class describes on axis sub-object.
|
||||||
//! It includes sub-objects itself:
|
//! It includes sub-objects itself:
|
||||||
//! -rotator
|
//! -rotator
|
||||||
@@ -510,11 +485,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
{
|
{
|
||||||
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!myHighlightDragger.IsNull())
|
|
||||||
{
|
|
||||||
myHighlightDragger->SetTransformPersistence(theTrsfPers);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
||||||
@@ -533,11 +503,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
{
|
{
|
||||||
myHighlightRotator->SetTransformation (theTransformation);
|
myHighlightRotator->SetTransformation (theTransformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!myHighlightDragger.IsNull())
|
|
||||||
{
|
|
||||||
myHighlightDragger->SetTransformation(theTransformation);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Standard_Boolean HasTranslation() const { return myHasTranslation; }
|
Standard_Boolean HasTranslation() const { return myHasTranslation; }
|
||||||
@@ -546,16 +511,12 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
|
|
||||||
Standard_Boolean HasScaling() const { return myHasScaling; }
|
Standard_Boolean HasScaling() const { return myHasScaling; }
|
||||||
|
|
||||||
Standard_Boolean HasDragging() const { return myHasDragging; }
|
|
||||||
|
|
||||||
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
||||||
|
|
||||||
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
||||||
|
|
||||||
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
||||||
|
|
||||||
void SetDragging(const Standard_Boolean theIsEnabled) { myHasDragging = theIsEnabled; }
|
|
||||||
|
|
||||||
Quantity_Color Color() const { return myColor; }
|
Quantity_Color Color() const { return myColor; }
|
||||||
|
|
||||||
Standard_ShortReal AxisLength() const { return myLength; }
|
Standard_ShortReal AxisLength() const { return myLength; }
|
||||||
@@ -570,16 +531,12 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
|
|
||||||
const Handle(Prs3d_Presentation)& ScalerHighlightPrs() const { return myHighlightScaler; }
|
const Handle(Prs3d_Presentation)& ScalerHighlightPrs() const { return myHighlightScaler; }
|
||||||
|
|
||||||
const Handle(Prs3d_Presentation)& DraggerHighlightPrs() const { return myHighlightDragger; }
|
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
||||||
|
|
||||||
const Handle(Graphic3d_Group)& DraggerGroup() const { return myDraggerGroup; }
|
|
||||||
|
|
||||||
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
||||||
|
|
||||||
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
||||||
@@ -613,7 +570,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
||||||
const Sector& DraggerSector() const { return mySector; }
|
|
||||||
const Disk& RotatorDisk() const { return myCircle; }
|
const Disk& RotatorDisk() const { return myCircle; }
|
||||||
float RotatorDiskRadius() const { return myCircleRadius; }
|
float RotatorDiskRadius() const { return myCircleRadius; }
|
||||||
const Cube& ScalerCube() const { return myCube; }
|
const Cube& ScalerCube() const { return myCube; }
|
||||||
@@ -637,14 +593,11 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Standard_ShortReal myDiskThickness;
|
Standard_ShortReal myDiskThickness;
|
||||||
Standard_ShortReal myIndent; //!< Gap between visual part of the manipulator.
|
Standard_ShortReal myIndent; //!< Gap between visual part of the manipulator.
|
||||||
|
|
||||||
Standard_Boolean myHasDragging;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Standard_Integer myFacettesNumber;
|
Standard_Integer myFacettesNumber;
|
||||||
|
|
||||||
gp_Pnt myArrowTipPos;
|
gp_Pnt myArrowTipPos;
|
||||||
Sector mySector;
|
|
||||||
Disk myCircle;
|
Disk myCircle;
|
||||||
float myCircleRadius;
|
float myCircleRadius;
|
||||||
Cube myCube;
|
Cube myCube;
|
||||||
@@ -653,12 +606,10 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
|||||||
Handle(Graphic3d_Group) myTranslatorGroup;
|
Handle(Graphic3d_Group) myTranslatorGroup;
|
||||||
Handle(Graphic3d_Group) myScalerGroup;
|
Handle(Graphic3d_Group) myScalerGroup;
|
||||||
Handle(Graphic3d_Group) myRotatorGroup;
|
Handle(Graphic3d_Group) myRotatorGroup;
|
||||||
Handle(Graphic3d_Group) myDraggerGroup;
|
|
||||||
|
|
||||||
Handle(Prs3d_Presentation) myHighlightTranslator;
|
Handle(Prs3d_Presentation) myHighlightTranslator;
|
||||||
Handle(Prs3d_Presentation) myHighlightScaler;
|
Handle(Prs3d_Presentation) myHighlightScaler;
|
||||||
Handle(Prs3d_Presentation) myHighlightRotator;
|
Handle(Prs3d_Presentation) myHighlightRotator;
|
||||||
Handle(Prs3d_Presentation) myHighlightDragger;
|
|
||||||
|
|
||||||
Handle(Graphic3d_ArrayOfTriangles) myTriangleArray;
|
Handle(Graphic3d_ArrayOfTriangles) myTriangleArray;
|
||||||
|
|
||||||
@@ -687,9 +638,6 @@ protected: //! @name Fields for interactive transformation. Fields only for inte
|
|||||||
|
|
||||||
//! Aspect used to color current detected part and current selected part.
|
//! Aspect used to color current detected part and current selected part.
|
||||||
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
||||||
|
|
||||||
//! Aspect used to color sector part when it's selected.
|
|
||||||
Handle(Prs3d_ShadingAspect) myDraggerHighlight;
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
||||||
|
@@ -22,8 +22,7 @@ enum AIS_ManipulatorMode
|
|||||||
AIS_MM_None = 0,
|
AIS_MM_None = 0,
|
||||||
AIS_MM_Translation = 1,
|
AIS_MM_Translation = 1,
|
||||||
AIS_MM_Rotation,
|
AIS_MM_Rotation,
|
||||||
AIS_MM_Scaling,
|
AIS_MM_Scaling
|
||||||
AIS_MM_TranslationPlane
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@@ -173,8 +173,8 @@ void AIS_PointCloudOwner::Clear (const Handle(PrsMgr_PresentationManager)& thePr
|
|||||||
//==================================================
|
//==================================================
|
||||||
AIS_PointCloud::AIS_PointCloud()
|
AIS_PointCloud::AIS_PointCloud()
|
||||||
{
|
{
|
||||||
myDrawer->SetupOwnShadingAspect();
|
// override default point style to Aspect_TOM_POINT
|
||||||
myDrawer->ShadingAspect()->Aspect()->SetMarkerType (Aspect_TOM_POINT);
|
myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, Quantity_NOC_YELLOW, 1.0));
|
||||||
|
|
||||||
SetDisplayMode (AIS_PointCloud::DM_Points);
|
SetDisplayMode (AIS_PointCloud::DM_Points);
|
||||||
SetHilightMode (AIS_PointCloud::DM_BndBox);
|
SetHilightMode (AIS_PointCloud::DM_BndBox);
|
||||||
@@ -282,8 +282,52 @@ void AIS_PointCloud::SetColor (const Quantity_Color& theColor)
|
|||||||
{
|
{
|
||||||
AIS_InteractiveObject::SetColor(theColor);
|
AIS_InteractiveObject::SetColor(theColor);
|
||||||
|
|
||||||
|
if (!myDrawer->HasOwnPointAspect())
|
||||||
|
{
|
||||||
|
myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, theColor, 1.0));
|
||||||
|
if (myDrawer->HasLink())
|
||||||
|
{
|
||||||
|
*myDrawer->PointAspect()->Aspect() = *myDrawer->Link()->PointAspect()->Aspect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!myDrawer->HasOwnShadingAspect())
|
||||||
|
{
|
||||||
|
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||||
|
if (myDrawer->HasLink())
|
||||||
|
{
|
||||||
|
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override color
|
||||||
myDrawer->ShadingAspect()->SetColor (theColor);
|
myDrawer->ShadingAspect()->SetColor (theColor);
|
||||||
SynchronizeAspects();
|
myDrawer->PointAspect() ->SetColor (theColor);
|
||||||
|
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectMarker3d) aPointAspect = myDrawer->PointAspect()->Aspect();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAspect = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (aPointAspect);
|
||||||
|
}
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAspect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -298,20 +342,34 @@ void AIS_PointCloud::UnsetColor()
|
|||||||
}
|
}
|
||||||
|
|
||||||
AIS_InteractiveObject::UnsetColor();
|
AIS_InteractiveObject::UnsetColor();
|
||||||
|
|
||||||
|
if (!HasWidth())
|
||||||
|
{
|
||||||
|
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myDrawer->PointAspect()->SetColor (myDrawer->HasLink()
|
||||||
|
? myDrawer->Link()->PointAspect()->Aspect()->Color()
|
||||||
|
: Quantity_Color (Quantity_NOC_YELLOW));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HasMaterial()
|
||||||
|
|| IsTransparent())
|
||||||
{
|
{
|
||||||
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
||||||
Graphic3d_MaterialAspect aMat = aDefaultMat;
|
Graphic3d_MaterialAspect aMat = aDefaultMat;
|
||||||
Quantity_Color aColor = aDefaultMat.Color();
|
|
||||||
if (myDrawer->HasLink())
|
|
||||||
{
|
|
||||||
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
|
||||||
}
|
|
||||||
if (HasMaterial() || myDrawer->HasLink())
|
if (HasMaterial() || myDrawer->HasLink())
|
||||||
{
|
{
|
||||||
aMat = AIS_GraphicTool::GetMaterial (HasMaterial() ? myDrawer : myDrawer->Link());
|
aMat = AIS_GraphicTool::GetMaterial (HasMaterial() ? myDrawer : myDrawer->Link());
|
||||||
}
|
}
|
||||||
if (HasMaterial())
|
if (HasMaterial())
|
||||||
{
|
{
|
||||||
|
Quantity_Color aColor = aDefaultMat.AmbientColor();
|
||||||
|
if (myDrawer->HasLink())
|
||||||
|
{
|
||||||
|
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
||||||
|
}
|
||||||
aMat.SetColor (aColor);
|
aMat.SetColor (aColor);
|
||||||
}
|
}
|
||||||
if (IsTransparent())
|
if (IsTransparent())
|
||||||
@@ -320,10 +378,43 @@ void AIS_PointCloud::UnsetColor()
|
|||||||
aMat.SetTransparency (Standard_ShortReal(aTransp));
|
aMat.SetTransparency (Standard_ShortReal(aTransp));
|
||||||
}
|
}
|
||||||
myDrawer->ShadingAspect()->SetMaterial (aMat, myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetMaterial (aMat, myCurrentFacingModel);
|
||||||
myDrawer->ShadingAspect()->Aspect()->SetInteriorColor (aColor);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
|
}
|
||||||
|
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||||
|
|
||||||
SynchronizeAspects();
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->Link()->ShadingAspect()->Aspect();
|
||||||
|
Handle(Graphic3d_AspectMarker3d) aMarkerAsp = myDrawer->Link()->PointAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
|
||||||
|
// Check if aspect of given type is set for the group,
|
||||||
|
// because setting aspect for group with no already set aspect
|
||||||
|
// can lead to loss of presentation data
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (aMarkerAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -332,6 +423,14 @@ void AIS_PointCloud::UnsetColor()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void AIS_PointCloud::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
void AIS_PointCloud::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||||
{
|
{
|
||||||
|
if (!myDrawer->HasOwnShadingAspect())
|
||||||
|
{
|
||||||
|
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||||
|
if (myDrawer->HasLink())
|
||||||
|
{
|
||||||
|
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||||
|
}
|
||||||
|
}
|
||||||
hasOwnMaterial = Standard_True;
|
hasOwnMaterial = Standard_True;
|
||||||
|
|
||||||
myDrawer->ShadingAspect()->SetMaterial (theMat, myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetMaterial (theMat, myCurrentFacingModel);
|
||||||
@@ -340,7 +439,28 @@ void AIS_PointCloud::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
|||||||
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
||||||
}
|
}
|
||||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||||
SynchronizeAspects();
|
|
||||||
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -354,6 +474,8 @@ void AIS_PointCloud::UnsetMaterial()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HasColor()
|
||||||
|
|| IsTransparent())
|
||||||
{
|
{
|
||||||
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
||||||
myDrawer->ShadingAspect()->SetMaterial (myDrawer->HasLink() ?
|
myDrawer->ShadingAspect()->SetMaterial (myDrawer->HasLink() ?
|
||||||
@@ -366,8 +488,33 @@ void AIS_PointCloud::UnsetMaterial()
|
|||||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
|
}
|
||||||
hasOwnMaterial = Standard_False;
|
hasOwnMaterial = Standard_False;
|
||||||
SynchronizeAspects();
|
|
||||||
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_PointCloud::DM_Points)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -388,7 +535,8 @@ void AIS_PointCloud::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs);
|
||||||
|
aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (aPoints);
|
aGroup->AddPrimitiveArray (aPoints);
|
||||||
break;
|
break;
|
||||||
|
@@ -28,7 +28,6 @@
|
|||||||
#include <Geom_Line.hxx>
|
#include <Geom_Line.hxx>
|
||||||
#include <Geom_Plane.hxx>
|
#include <Geom_Plane.hxx>
|
||||||
#include <Geom_Surface.hxx>
|
#include <Geom_Surface.hxx>
|
||||||
#include <Graphic3d_ArrayOfSegments.hxx>
|
|
||||||
#include <gp_Circ.hxx>
|
#include <gp_Circ.hxx>
|
||||||
#include <gp_Lin.hxx>
|
#include <gp_Lin.hxx>
|
||||||
#include <gp_Pnt.hxx>
|
#include <gp_Pnt.hxx>
|
||||||
@@ -185,13 +184,8 @@ void AIS_Relation::ComputeProjVertexPresentation(const Handle(Prs3d_Presentation
|
|||||||
pa->SetTypeOfMarker(aProjTOM);
|
pa->SetTypeOfMarker(aProjTOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
// calcul du projete
|
||||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
StdPrs_Point::Add(aPrs, new Geom_CartesianPoint(ProjPoint), myDrawer);
|
||||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
|
||||||
anArrayOfPoints->AddVertex (ProjPoint);
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
|
|
||||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!myDrawer->HasOwnWireAspect()){
|
if (!myDrawer->HasOwnWireAspect()){
|
||||||
myDrawer->SetWireAspect(new Prs3d_LineAspect(aColor,aCallTOL,2.));}
|
myDrawer->SetWireAspect(new Prs3d_LineAspect(aColor,aCallTOL,2.));}
|
||||||
@@ -203,14 +197,10 @@ void AIS_Relation::ComputeProjVertexPresentation(const Handle(Prs3d_Presentation
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Si les points ne sont pas confondus...
|
// Si les points ne sont pas confondus...
|
||||||
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion()))
|
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion())) {
|
||||||
{
|
// calcul des lignes de rappel
|
||||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
BRepBuilderAPI_MakeEdge MakEd (ProjPoint,BRep_Tool::Pnt(aVertex));
|
||||||
Handle(Graphic3d_ArrayOfSegments) anArrayOfLines = new Graphic3d_ArrayOfSegments (2);
|
StdPrs_WFShape::Add (aPrs, MakEd.Edge(), myDrawer);
|
||||||
anArrayOfLines->AddVertex (ProjPoint);
|
|
||||||
anArrayOfLines->AddVertex (BRep_Tool::Pnt(aVertex));
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->WireAspect()->Aspect());
|
|
||||||
aGroup->AddPrimitiveArray (anArrayOfLines);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -392,12 +392,13 @@ void AIS_RubberBand::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
|||||||
const Handle(Prs3d_Presentation)& thePresentation,
|
const Handle(Prs3d_Presentation)& thePresentation,
|
||||||
const Standard_Integer /*theMode*/)
|
const Standard_Integer /*theMode*/)
|
||||||
{
|
{
|
||||||
|
Handle (Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
|
||||||
|
|
||||||
// Draw filling
|
// Draw filling
|
||||||
if (IsFilling() && fillTriangles())
|
if (IsFilling() && fillTriangles())
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup1 = thePresentation->NewGroup();
|
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||||
aGroup1->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
aGroup->AddPrimitiveArray (myTriangles);
|
||||||
aGroup1->AddPrimitiveArray (myTriangles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw frame
|
// Draw frame
|
||||||
@@ -432,7 +433,6 @@ void AIS_RubberBand::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
|
||||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
||||||
aGroup->AddPrimitiveArray (myBorders);
|
aGroup->AddPrimitiveArray (myBorders);
|
||||||
}
|
}
|
||||||
|
@@ -77,40 +77,6 @@ static Standard_Boolean IsInList(const TColStd_ListOfInteger& LL, const Standard
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auxiliary macros
|
|
||||||
#define replaceAspectWithDef(theMap, theAspect) \
|
|
||||||
if (myDrawer->Link()->theAspect()->Aspect() != myDrawer->theAspect()->Aspect()) \
|
|
||||||
{ \
|
|
||||||
theMap.Bind (myDrawer->theAspect()->Aspect(), myDrawer->Link()->theAspect()->Aspect()); \
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auxiliary macros for replaceWithNewOwnAspects()
|
|
||||||
#define replaceAspectWithOwn(theMap, theAspect) \
|
|
||||||
if (myDrawer->Link()->theAspect()->Aspect() != myDrawer->theAspect()->Aspect()) \
|
|
||||||
{ \
|
|
||||||
theMap.Bind (myDrawer->Link()->theAspect()->Aspect(), myDrawer->theAspect()->Aspect()); \
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : replaceWithNewOwnAspects
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void AIS_Shape::replaceWithNewOwnAspects()
|
|
||||||
{
|
|
||||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
|
||||||
|
|
||||||
replaceAspectWithOwn (aReplaceMap, ShadingAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, LineAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, WireAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, FreeBoundaryAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, UnFreeBoundaryAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, SeenLineAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, FaceBoundaryAspect);
|
|
||||||
replaceAspectWithOwn (aReplaceMap, PointAspect);
|
|
||||||
|
|
||||||
replaceAspects (aReplaceMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
//==================================================
|
//==================================================
|
||||||
// Function: AIS_Shape
|
// Function: AIS_Shape
|
||||||
// Purpose :
|
// Purpose :
|
||||||
@@ -386,7 +352,11 @@ bool AIS_Shape::setColor (const Handle(Prs3d_Drawer)& theDrawer,
|
|||||||
bool toRecompute = false;
|
bool toRecompute = false;
|
||||||
toRecompute = theDrawer->SetupOwnShadingAspect() || toRecompute;
|
toRecompute = theDrawer->SetupOwnShadingAspect() || toRecompute;
|
||||||
toRecompute = theDrawer->SetOwnLineAspects() || toRecompute;
|
toRecompute = theDrawer->SetOwnLineAspects() || toRecompute;
|
||||||
toRecompute = theDrawer->SetupOwnPointAspect() || toRecompute;
|
|
||||||
|
if (theDrawer->SetupOwnPointAspect())
|
||||||
|
{
|
||||||
|
toRecompute = true;
|
||||||
|
}
|
||||||
|
|
||||||
// override color
|
// override color
|
||||||
theDrawer->ShadingAspect()->SetColor (theColor, myCurrentFacingModel);
|
theDrawer->ShadingAspect()->SetColor (theColor, myCurrentFacingModel);
|
||||||
@@ -410,19 +380,52 @@ void AIS_Shape::SetColor (const Quantity_Color& theColor)
|
|||||||
const bool toRecompute = setColor (myDrawer, theColor);
|
const bool toRecompute = setColor (myDrawer, theColor);
|
||||||
myDrawer->SetColor (theColor);
|
myDrawer->SetColor (theColor);
|
||||||
hasOwnColor = Standard_True;
|
hasOwnColor = Standard_True;
|
||||||
|
if (!toRecompute)
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
if (!toRecompute
|
|
||||||
|| !myDrawer->HasLink())
|
|
||||||
{
|
{
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
|
myRecomputeEveryPrs = false;
|
||||||
SynchronizeAspects();
|
SynchronizeAspects();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAspect = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
Handle(Graphic3d_AspectLine3d) aLineAspect = myDrawer->LineAspect()->Aspect();
|
||||||
|
Handle(Graphic3d_AspectMarker3d) aPointAspect = myDrawer->PointAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
{
|
{
|
||||||
replaceWithNewOwnAspects();
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_Shaded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
|
||||||
|
// Check if aspect of given type is set for the group,
|
||||||
|
// because setting aspect for group with no already set aspect
|
||||||
|
// can lead to loss of presentation data
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAspect);
|
||||||
|
}
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_LINE))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (aLineAspect);
|
||||||
|
}
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_MARKER))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (aPointAspect);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
recomputeComputed();
|
|
||||||
|
LoadRecomputable (AIS_WireFrame);
|
||||||
|
LoadRecomputable (2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -432,31 +435,25 @@ void AIS_Shape::SetColor (const Quantity_Color& theColor)
|
|||||||
|
|
||||||
void AIS_Shape::UnsetColor()
|
void AIS_Shape::UnsetColor()
|
||||||
{
|
{
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
if (!HasColor())
|
if (!HasColor())
|
||||||
{
|
{
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
|
myRecomputeEveryPrs = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hasOwnColor = Standard_False;
|
hasOwnColor = Standard_False;
|
||||||
myDrawer->SetColor (myDrawer->HasLink() ? myDrawer->Link()->Color() : Quantity_Color (Quantity_NOC_WHITE));
|
myDrawer->SetColor (myDrawer->HasLink() ? myDrawer->Link()->Color() : Quantity_Color (Quantity_NOC_WHITE));
|
||||||
|
|
||||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
|
||||||
if (!HasWidth())
|
if (!HasWidth())
|
||||||
{
|
{
|
||||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
myDrawer->SetLineAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
myDrawer->SetWireAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||||
myDrawer->SetWireAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetFreeBoundaryAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetUnFreeBoundaryAspect(Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetSeenLineAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetFaceBoundaryAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -538,17 +535,10 @@ void AIS_Shape::UnsetColor()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
|
||||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
}
|
}
|
||||||
if (myDrawer->HasOwnPointAspect())
|
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||||
{
|
myRecomputeEveryPrs = true;
|
||||||
replaceAspectWithDef (aReplaceMap, PointAspect);
|
|
||||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
|
||||||
}
|
|
||||||
replaceAspects (aReplaceMap);
|
|
||||||
SynchronizeAspects();
|
|
||||||
recomputeComputed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -579,19 +569,16 @@ bool AIS_Shape::setWidth (const Handle(Prs3d_Drawer)& theDrawer,
|
|||||||
void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
||||||
{
|
{
|
||||||
myOwnWidth = theLineWidth;
|
myOwnWidth = theLineWidth;
|
||||||
|
if (setWidth (myDrawer, theLineWidth))
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
if (!setWidth (myDrawer, theLineWidth)
|
|
||||||
|| !myDrawer->HasLink())
|
|
||||||
{
|
{
|
||||||
SynchronizeAspects();
|
myRecomputeEveryPrs = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
replaceWithNewOwnAspects();
|
myRecomputeEveryPrs = false;
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
|
SynchronizeAspects();
|
||||||
}
|
}
|
||||||
recomputeComputed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -601,30 +588,24 @@ void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
|||||||
|
|
||||||
void AIS_Shape::UnsetWidth()
|
void AIS_Shape::UnsetWidth()
|
||||||
{
|
{
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
if (myOwnWidth == 0.0)
|
if (myOwnWidth == 0.0)
|
||||||
{
|
{
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
|
myRecomputeEveryPrs = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
myOwnWidth = 0.0;
|
myOwnWidth = 0.0;
|
||||||
if (!HasColor())
|
if (!HasColor())
|
||||||
{
|
{
|
||||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
const Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
myDrawer->SetLineAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
myDrawer->SetWireAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
myRecomputeEveryPrs = true;
|
||||||
myDrawer->SetWireAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetFreeBoundaryAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetUnFreeBoundaryAspect(Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetSeenLineAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
myDrawer->SetFaceBoundaryAspect (Handle(Prs3d_LineAspect)());
|
|
||||||
replaceAspects (aReplaceMap);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -641,8 +622,9 @@ void AIS_Shape::UnsetWidth()
|
|||||||
myDrawer->FaceBoundaryAspect() ->SetWidth (myDrawer->HasLink() ?
|
myDrawer->FaceBoundaryAspect() ->SetWidth (myDrawer->HasLink() ?
|
||||||
AIS_GraphicTool::GetLineWidth (myDrawer->Link(), AIS_TOA_FaceBoundary) : 1.);
|
AIS_GraphicTool::GetLineWidth (myDrawer->Link(), AIS_TOA_FaceBoundary) : 1.);
|
||||||
SynchronizeAspects();
|
SynchronizeAspects();
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
|
myRecomputeEveryPrs = false;
|
||||||
}
|
}
|
||||||
recomputeComputed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -677,21 +659,37 @@ void AIS_Shape::setMaterial (const Handle(Prs3d_Drawer)& theDrawer,
|
|||||||
|
|
||||||
void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||||
{
|
{
|
||||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
|
||||||
setMaterial (myDrawer, theMat, HasColor(), IsTransparent());
|
setMaterial (myDrawer, theMat, HasColor(), IsTransparent());
|
||||||
hasOwnMaterial = Standard_True;
|
hasOwnMaterial = Standard_True;
|
||||||
|
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_Shaded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
|
||||||
|
// Check if aspect of given type is set for the group,
|
||||||
|
// because setting aspect for group with no already set aspect
|
||||||
|
// can lead to loss of presentation data
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||||
myToRecomputeModes.Clear();
|
myToRecomputeModes.Clear();
|
||||||
if (!toRecompute
|
|
||||||
|| !myDrawer->HasLink())
|
|
||||||
{
|
|
||||||
SynchronizeAspects();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
replaceWithNewOwnAspects();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -701,8 +699,6 @@ void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
|||||||
|
|
||||||
void AIS_Shape::UnsetMaterial()
|
void AIS_Shape::UnsetMaterial()
|
||||||
{
|
{
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
if (!HasMaterial())
|
if (!HasMaterial())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -726,15 +722,37 @@ void AIS_Shape::UnsetMaterial()
|
|||||||
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
||||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||||
}
|
}
|
||||||
SynchronizeAspects();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
|
||||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
|
||||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
replaceAspects (aReplaceMap);
|
|
||||||
}
|
}
|
||||||
|
hasOwnMaterial = Standard_False;
|
||||||
|
|
||||||
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_Shaded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -757,21 +775,33 @@ void AIS_Shape::setTransparency (const Handle(Prs3d_Drawer)& theDrawer,
|
|||||||
|
|
||||||
void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
||||||
{
|
{
|
||||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
|
||||||
setTransparency (myDrawer, theValue);
|
setTransparency (myDrawer, theValue);
|
||||||
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
||||||
|
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_Shaded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myRecomputeEveryPrs = Standard_False; // no mode to recalculate - only viewer update
|
||||||
myToRecomputeModes.Clear();
|
myToRecomputeModes.Clear();
|
||||||
if (!toRecompute
|
|
||||||
|| !myDrawer->HasLink())
|
|
||||||
{
|
|
||||||
SynchronizeAspects();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
replaceWithNewOwnAspects();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -781,9 +811,6 @@ void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
|||||||
|
|
||||||
void AIS_Shape::UnsetTransparency()
|
void AIS_Shape::UnsetTransparency()
|
||||||
{
|
{
|
||||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
|
||||||
myToRecomputeModes.Clear();
|
|
||||||
|
|
||||||
myDrawer->SetTransparency (0.0f);
|
myDrawer->SetTransparency (0.0f);
|
||||||
if (!myDrawer->HasOwnShadingAspect())
|
if (!myDrawer->HasOwnShadingAspect())
|
||||||
{
|
{
|
||||||
@@ -794,15 +821,36 @@ void AIS_Shape::UnsetTransparency()
|
|||||||
|| myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
|| myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
||||||
{
|
{
|
||||||
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||||
SynchronizeAspects();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
|
||||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
|
||||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||||
replaceAspects (aReplaceMap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// modify shading presentation without re-computation
|
||||||
|
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||||
|
if (aPrsModed.Mode() != AIS_Shaded)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
|
{
|
||||||
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myRecomputeEveryPrs = Standard_False; // no mode to recalculate :only viewer update
|
||||||
|
myToRecomputeModes.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@@ -316,9 +316,6 @@ protected:
|
|||||||
|
|
||||||
Standard_EXPORT void setMaterial (const Handle(Prs3d_Drawer)& theDrawer, const Graphic3d_MaterialAspect& theMaterial, const Standard_Boolean theToKeepColor, const Standard_Boolean theToKeepTransp) const;
|
Standard_EXPORT void setMaterial (const Handle(Prs3d_Drawer)& theDrawer, const Graphic3d_MaterialAspect& theMaterial, const Standard_Boolean theToKeepColor, const Standard_Boolean theToKeepTransp) const;
|
||||||
|
|
||||||
//! Replace aspects of already computed groups from drawer link by the new own value.
|
|
||||||
Standard_EXPORT void replaceWithNewOwnAspects();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Compute HLR presentation for specified shape.
|
//! Compute HLR presentation for specified shape.
|
||||||
|
@@ -218,6 +218,36 @@ void AIS_TexturedShape::SetColor (const Quantity_Color& theColor)
|
|||||||
void AIS_TexturedShape::UnsetColor()
|
void AIS_TexturedShape::UnsetColor()
|
||||||
{
|
{
|
||||||
AIS_Shape::UnsetColor();
|
AIS_Shape::UnsetColor();
|
||||||
|
|
||||||
|
for (Standard_Integer aPrsIt = 1; aPrsIt <= Presentations().Length(); ++aPrsIt)
|
||||||
|
{
|
||||||
|
const PrsMgr_ModedPresentation& aPrsModed = Presentations().Value (aPrsIt);
|
||||||
|
|
||||||
|
if (aPrsModed.Mode() != 3)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Handle(Prs3d_Presentation) aPrs = aPrsModed.Presentation()->Presentation();
|
||||||
|
Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (aPrs);
|
||||||
|
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->Link()->ShadingAspect()->Aspect();
|
||||||
|
Handle(Graphic3d_AspectLine3d) aLineAsp = myDrawer->Link()->LineAspect()->Aspect();
|
||||||
|
Quantity_Color aColor;
|
||||||
|
AIS_GraphicTool::GetInteriorColor (myDrawer->Link(), aColor);
|
||||||
|
anAreaAsp->SetInteriorColor (aColor);
|
||||||
|
// Check if aspect of given type is set for the group,
|
||||||
|
// because setting aspect for group with no already set aspect
|
||||||
|
// can lead to loss of presentation data
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_LINE))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (aLineAsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateAttributes (aPrs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@@ -347,6 +377,10 @@ void AIS_TexturedShape::updateAttributes (const Handle(Prs3d_Presentation)& theP
|
|||||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (thePrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (thePrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
{
|
{
|
||||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
|
if (!aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
aGroup->SetGroupPrimitivesAspect (myAspect);
|
aGroup->SetGroupPrimitivesAspect (myAspect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -108,7 +108,10 @@ void AIS_Triangulation::updatePresentation()
|
|||||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||||
{
|
{
|
||||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||||
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
if (aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||||
|
{
|
||||||
|
aGroup->SetGroupPrimitivesAspect (anAreaAsp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1182,29 +1182,6 @@ Standard_Boolean BRep_Tool::HasContinuity(const TopoDS_Edge& E)
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : MaxContinuity
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
GeomAbs_Shape BRep_Tool::MaxContinuity (const TopoDS_Edge& theEdge)
|
|
||||||
{
|
|
||||||
GeomAbs_Shape aMaxCont = GeomAbs_C0;
|
|
||||||
for (BRep_ListIteratorOfListOfCurveRepresentation aReprIter ((*((Handle(BRep_TEdge)*)&theEdge.TShape()))->ChangeCurves());
|
|
||||||
aReprIter.More(); aReprIter.Next())
|
|
||||||
{
|
|
||||||
const Handle(BRep_CurveRepresentation)& aRepr = aReprIter.Value();
|
|
||||||
if (aRepr->IsRegularity())
|
|
||||||
{
|
|
||||||
const GeomAbs_Shape aCont = aRepr->Continuity();
|
|
||||||
if ((Standard_Integer )aCont > (Standard_Integer )aMaxCont)
|
|
||||||
{
|
|
||||||
aMaxCont = aCont;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return aMaxCont;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Pnt
|
//function : Pnt
|
||||||
//purpose : Returns the 3d point.
|
//purpose : Returns the 3d point.
|
||||||
|
@@ -242,9 +242,6 @@ public:
|
|||||||
//! Returns True if the edge has regularity on some
|
//! Returns True if the edge has regularity on some
|
||||||
//! two surfaces
|
//! two surfaces
|
||||||
Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E);
|
Standard_EXPORT static Standard_Boolean HasContinuity (const TopoDS_Edge& E);
|
||||||
|
|
||||||
//! Returns the max continuity of edge between some surfaces or GeomAbs_C0 if there no such surfaces.
|
|
||||||
Standard_EXPORT static GeomAbs_Shape MaxContinuity (const TopoDS_Edge& theEdge);
|
|
||||||
|
|
||||||
//! Returns the 3d point.
|
//! Returns the 3d point.
|
||||||
Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
|
Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
|
||||||
|
@@ -682,7 +682,7 @@ void BRepMesh_Delaun::cleanupMesh()
|
|||||||
if ( anEdges[aCurEdgeIdx] != aFreeEdgeId )
|
if ( anEdges[aCurEdgeIdx] != aFreeEdgeId )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2 && isCanNotBeRemoved; ++anOtherEdgeIt )
|
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2; ++anOtherEdgeIt )
|
||||||
{
|
{
|
||||||
Standard_Integer anOtherEdgeId = ( aCurEdgeIdx + anOtherEdgeIt ) % 3;
|
Standard_Integer anOtherEdgeId = ( aCurEdgeIdx + anOtherEdgeIt ) % 3;
|
||||||
const BRepMesh_PairOfIndex& anOtherEdgePair =
|
const BRepMesh_PairOfIndex& anOtherEdgePair =
|
||||||
@@ -691,27 +691,7 @@ void BRepMesh_Delaun::cleanupMesh()
|
|||||||
if ( anOtherEdgePair.Extent() < 2 )
|
if ( anOtherEdgePair.Extent() < 2 )
|
||||||
{
|
{
|
||||||
isCanNotBeRemoved = Standard_False;
|
isCanNotBeRemoved = Standard_False;
|
||||||
}
|
break;
|
||||||
else
|
|
||||||
{
|
|
||||||
for (int aTriIdx = 1; aTriIdx <= anOtherEdgePair.Extent () && isCanNotBeRemoved; ++aTriIdx)
|
|
||||||
{
|
|
||||||
if (anOtherEdgePair.Index (aTriIdx) == aTriId)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
Standard_Integer v[3];
|
|
||||||
const BRepMesh_Triangle& aCurTriangle = GetTriangle (anOtherEdgePair.Index (aTriIdx));
|
|
||||||
myMeshData->ElementNodes (aCurTriangle, v);
|
|
||||||
for (int aNodeIdx = 0; aNodeIdx < 3 && isCanNotBeRemoved; ++aNodeIdx)
|
|
||||||
{
|
|
||||||
if (v[aNodeIdx] == mySupVert[0] ||
|
|
||||||
v[aNodeIdx] == mySupVert[1] ||
|
|
||||||
v[aNodeIdx] == mySupVert[2])
|
|
||||||
{
|
|
||||||
isCanNotBeRemoved = Standard_False;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,11 +57,8 @@ BRepMesh_ShapeVisitor::~BRepMesh_ShapeVisitor ()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BRepMesh_ShapeVisitor::Visit(const TopoDS_Edge& theEdge)
|
void BRepMesh_ShapeVisitor::Visit(const TopoDS_Edge& theEdge)
|
||||||
{
|
{
|
||||||
if (!myDEdgeMap.IsBound (theEdge))
|
myModel->AddEdge(theEdge);
|
||||||
{
|
myDEdgeMap.Bind(theEdge, myModel->EdgesNb() - 1);
|
||||||
myModel->AddEdge (theEdge);
|
|
||||||
myDEdgeMap.Bind (theEdge, myModel->EdgesNb () - 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@@ -179,8 +179,7 @@ static
|
|||||||
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
||||||
const TopTools_MapOfShape& theMFHoles,
|
const TopTools_MapOfShape& theMFHoles,
|
||||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||||
TopTools_ListOfShape& theInvFaces,
|
TopTools_ListOfShape& theInvFaces);
|
||||||
TopTools_ListOfShape& theInvertedFaces);
|
|
||||||
|
|
||||||
static
|
static
|
||||||
void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
|
void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
|
||||||
@@ -239,8 +238,6 @@ static
|
|||||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||||
const TopTools_MapOfShape& theInvertedEdges,
|
|
||||||
const TopTools_ListOfShape& theInvertedFaces,
|
|
||||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||||
const TopoDS_Shape& theFHoles,
|
const TopoDS_Shape& theFHoles,
|
||||||
@@ -261,7 +258,6 @@ static
|
|||||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||||
const TopTools_IndexedMapOfShape& theMFInv,
|
const TopTools_IndexedMapOfShape& theMFInv,
|
||||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||||
const TopTools_MapOfShape& theInvertedEdges,
|
|
||||||
TopTools_MapOfShape& theMFToRem);
|
TopTools_MapOfShape& theMFToRem);
|
||||||
|
|
||||||
static
|
static
|
||||||
@@ -600,21 +596,6 @@ static
|
|||||||
void AppendToList(TopTools_ListOfShape& theL,
|
void AppendToList(TopTools_ListOfShape& theL,
|
||||||
const TopoDS_Shape& theS);
|
const TopoDS_Shape& theS);
|
||||||
|
|
||||||
template <class ContainerType, class FenceMapType>
|
|
||||||
static Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
|
||||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
|
||||||
ContainerType& theMapOut,
|
|
||||||
FenceMapType* theMFence);
|
|
||||||
|
|
||||||
template <class ContainerType>
|
|
||||||
static Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
|
||||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
|
||||||
ContainerType& theMapOut)
|
|
||||||
{
|
|
||||||
TopTools_MapOfShape* aDummy = NULL;
|
|
||||||
return TakeModified (theS, theImages, theMapOut, aDummy);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : BuildSplitsOfTrimmedFaces
|
//function : BuildSplitsOfTrimmedFaces
|
||||||
//purpose : Building splits of already trimmed faces
|
//purpose : Building splits of already trimmed faces
|
||||||
@@ -1007,12 +988,6 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OFFSET_DEBUG
|
|
||||||
// Show all obtained splits of faces
|
|
||||||
TopoDS_Compound aCFIm1;
|
|
||||||
BRep_Builder().MakeCompound(aCFIm1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Build Edge-Face connectivity map to find faces which removal
|
// Build Edge-Face connectivity map to find faces which removal
|
||||||
// may potentially lead to creation of the holes in the faces
|
// may potentially lead to creation of the holes in the faces
|
||||||
// preventing from obtaining closed volume in the result
|
// preventing from obtaining closed volume in the result
|
||||||
@@ -1022,12 +997,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
|||||||
{
|
{
|
||||||
TopTools_ListIteratorOfListOfShape itLFIm(theFImages(i));
|
TopTools_ListIteratorOfListOfShape itLFIm(theFImages(i));
|
||||||
for (; itLFIm.More(); itLFIm.Next())
|
for (; itLFIm.More(); itLFIm.Next())
|
||||||
{
|
|
||||||
TopExp::MapShapesAndAncestors(itLFIm.Value(), TopAbs_EDGE, TopAbs_FACE, anEFMap);
|
TopExp::MapShapesAndAncestors(itLFIm.Value(), TopAbs_EDGE, TopAbs_FACE, anEFMap);
|
||||||
#ifdef OFFSET_DEBUG
|
|
||||||
BRep_Builder().Add(aCFIm1, itLFIm.Value());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TopTools_ListOfShape anEmptyList;
|
TopTools_ListOfShape anEmptyList;
|
||||||
@@ -1036,8 +1006,6 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
|||||||
// all hole faces
|
// all hole faces
|
||||||
TopoDS_Compound aFHoles;
|
TopoDS_Compound aFHoles;
|
||||||
aBB.MakeCompound(aFHoles);
|
aBB.MakeCompound(aFHoles);
|
||||||
// Find the faces containing only the inverted edges and the invalid ones
|
|
||||||
TopTools_ListOfShape anInvertedFaces;
|
|
||||||
// find invalid faces
|
// find invalid faces
|
||||||
// considering faces containing only invalid edges as invalid
|
// considering faces containing only invalid edges as invalid
|
||||||
aItLF.Initialize(aLFDone);
|
aItLF.Initialize(aLFDone);
|
||||||
@@ -1076,7 +1044,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
|||||||
// find invalid faces
|
// find invalid faces
|
||||||
FindInvalidFaces(aLFImages, theInvEdges, theValidEdges, aDMFLVE, aDMFLIE,
|
FindInvalidFaces(aLFImages, theInvEdges, theValidEdges, aDMFLVE, aDMFLIE,
|
||||||
*pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex,
|
*pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex,
|
||||||
aMFHoles, aMFInvInHole, aLFInv, anInvertedFaces);
|
aMFHoles, aMFInvInHole, aLFInv);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (aLFInv.Extent()) {
|
if (aLFInv.Extent()) {
|
||||||
@@ -1127,8 +1095,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
|||||||
//
|
//
|
||||||
// remove inside faces
|
// remove inside faces
|
||||||
TopTools_IndexedMapOfShape aMEInside;
|
TopTools_IndexedMapOfShape aMEInside;
|
||||||
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges, theInvertedEdges,
|
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges,
|
||||||
anInvertedFaces, aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
||||||
aMERemoved, aMEInside, theSolids);
|
aMERemoved, aMEInside, theSolids);
|
||||||
//
|
//
|
||||||
// make compound of valid splits
|
// make compound of valid splits
|
||||||
@@ -1851,8 +1819,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
||||||
const TopTools_MapOfShape& theMFHoles,
|
const TopTools_MapOfShape& theMFHoles,
|
||||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||||
TopTools_ListOfShape& theInvFaces,
|
TopTools_ListOfShape& theInvFaces)
|
||||||
TopTools_ListOfShape& theInvertedFaces)
|
|
||||||
{
|
{
|
||||||
// The face should be considered as invalid in the following cases:
|
// The face should be considered as invalid in the following cases:
|
||||||
// 1. It has been reverted, i.e. at least two not connected edges
|
// 1. It has been reverted, i.e. at least two not connected edges
|
||||||
@@ -1865,8 +1832,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
// The face will be kept in the following cases:
|
// The face will be kept in the following cases:
|
||||||
// 1. Some of the edges are valid for this face.
|
// 1. Some of the edges are valid for this face.
|
||||||
Standard_Boolean bHasValid, bAllValid, bAllInvalid, bHasReallyInvalid, bAllInvNeutral;
|
Standard_Boolean bHasValid, bAllValid, bAllInvalid, bHasReallyInvalid, bAllInvNeutral;
|
||||||
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral, bInverted;
|
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral;
|
||||||
Standard_Boolean bIsInvalidByInverted;
|
|
||||||
Standard_Integer i, aNbChecked;
|
Standard_Integer i, aNbChecked;
|
||||||
//
|
//
|
||||||
// neutral edges
|
// neutral edges
|
||||||
@@ -1883,7 +1849,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
aMEValInverted.Add(aItLE.Value());
|
aMEValInverted.Add(aItLE.Value());
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
Standard_Boolean bTreatInvertedAsInvalid = (theLFImages.Extent() == 1);
|
Standard_Boolean bCheckInverted = (theLFImages.Extent() == 1);
|
||||||
//
|
//
|
||||||
// neutral edges to remove
|
// neutral edges to remove
|
||||||
TopTools_IndexedMapOfShape aMENRem;
|
TopTools_IndexedMapOfShape aMENRem;
|
||||||
@@ -1917,7 +1883,6 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
bAllInvalid = Standard_True;
|
bAllInvalid = Standard_True;
|
||||||
bHasReallyInvalid = Standard_False;
|
bHasReallyInvalid = Standard_False;
|
||||||
bAllInvNeutral = Standard_True;
|
bAllInvNeutral = Standard_True;
|
||||||
bIsInvalidByInverted = Standard_True;
|
|
||||||
aNbChecked = 0;
|
aNbChecked = 0;
|
||||||
//
|
//
|
||||||
const TopoDS_Wire& aWIm = BRepTools::OuterWire(aFIm);
|
const TopoDS_Wire& aWIm = BRepTools::OuterWire(aFIm);
|
||||||
@@ -1944,19 +1909,17 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
bNeutral = aMEN.Contains(aEIm);
|
bNeutral = aMEN.Contains(aEIm);
|
||||||
bValidLoc = aMVE.Contains(aEIm);
|
bValidLoc = aMVE.Contains(aEIm);
|
||||||
//
|
//
|
||||||
bInverted = theMEInverted.Contains(aEIm);
|
if (!bInvalid && bCheckInverted) {
|
||||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
bInvalid = theMEInverted.Contains(aEIm);
|
||||||
bInvalid = bInverted;
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (bValidLoc && (bNeutral || aMEValInverted.Contains(aEIm))) {
|
if (bValidLoc && (bNeutral || aMEValInverted.Contains(aEIm))) {
|
||||||
bHasValid = Standard_True;
|
bHasValid = Standard_True;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
bAllValid &= bValidLoc;
|
bAllValid = bAllValid && bValidLoc;
|
||||||
bAllInvalid &= bInvalid;
|
bAllInvalid = bAllInvalid && bInvalid;
|
||||||
bAllInvNeutral &= (bAllInvalid && bNeutral);
|
bAllInvNeutral = bAllInvNeutral && bAllInvalid && bNeutral;
|
||||||
bIsInvalidByInverted &= (bInvalidLoc || bInverted);
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (!aNbChecked) {
|
if (!aNbChecked) {
|
||||||
@@ -1991,12 +1954,6 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (bIsInvalidByInverted && !(bHasValid || bAllValid))
|
|
||||||
{
|
|
||||||
// The face contains only the inverted and locally invalid edges
|
|
||||||
theInvertedFaces.Append(aFIm);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bAllInvNeutral) {
|
if (!bAllInvNeutral) {
|
||||||
aLFPT.Append(aFIm);
|
aLFPT.Append(aFIm);
|
||||||
}
|
}
|
||||||
@@ -2046,7 +2003,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
|||||||
bNeutral = aMEN.Contains(aEIm);
|
bNeutral = aMEN.Contains(aEIm);
|
||||||
bValidLoc = aMVE.Contains(aEIm);
|
bValidLoc = aMVE.Contains(aEIm);
|
||||||
//
|
//
|
||||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
if (!bInvalid && bCheckInverted) {
|
||||||
bInvalid = theMEInverted.Contains(aEIm);
|
bInvalid = theMEInverted.Contains(aEIm);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -2916,8 +2873,6 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
|||||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||||
const TopTools_MapOfShape& theInvertedEdges,
|
|
||||||
const TopTools_ListOfShape& theInvertedFaces,
|
|
||||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||||
const TopoDS_Shape& theFHoles,
|
const TopoDS_Shape& theFHoles,
|
||||||
@@ -2977,9 +2932,6 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
|||||||
aMV.SetArguments(aLS);
|
aMV.SetArguments(aLS);
|
||||||
aMV.SetIntersect(Standard_True);
|
aMV.SetIntersect(Standard_True);
|
||||||
aMV.Perform();
|
aMV.Perform();
|
||||||
if (aMV.HasErrors())
|
|
||||||
return;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get shapes connection for using in the rebuilding process
|
// get shapes connection for using in the rebuilding process
|
||||||
// for the cases in which some of the intersection left undetected
|
// for the cases in which some of the intersection left undetected
|
||||||
@@ -3064,21 +3016,19 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
|||||||
TopExp::MapShapes(aFIm, TopAbs_EDGE, aMEBoundary);
|
TopExp::MapShapes(aFIm, TopAbs_EDGE, aMEBoundary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
// Tool for getting the splits of faces
|
|
||||||
const TopTools_DataMapOfShapeListOfShape& aMVIms = aMV.Images();
|
|
||||||
|
|
||||||
// update invalid faces with images
|
// update invalid faces with images
|
||||||
aNb = aMFInv.Extent();
|
aNb = aMFInv.Extent();
|
||||||
for (i = 1; i <= aNb; ++i) {
|
for (i = 1; i <= aNb; ++i) {
|
||||||
const TopoDS_Shape& aFInv = aMFInv(i);
|
const TopoDS_Shape& aFInv = aMFInv(i);
|
||||||
TakeModified(aFInv, aMVIms, aMFInv);
|
const TopTools_ListOfShape& aLFInvIm = aMV.Modified(aFInv);
|
||||||
|
TopTools_ListIteratorOfListOfShape aItLFInvIm(aLFInvIm);
|
||||||
|
for (; aItLFInvIm.More(); aItLFInvIm.Next()) {
|
||||||
|
const TopoDS_Shape& aFInvIm = aItLFInvIm.Value();
|
||||||
|
aMFInv.Add(aFInvIm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
// Take into account the faces invalid by inverted edges
|
|
||||||
for (TopTools_ListOfShape::Iterator itLF(theInvertedFaces); itLF.More(); itLF.Next())
|
|
||||||
TakeModified(itLF.Value(), aMVIms, aMFInv);
|
|
||||||
|
|
||||||
// check if the invalid faces inside the holes are really invalid:
|
// check if the invalid faces inside the holes are really invalid:
|
||||||
// check its normal direction - if it has changed relatively the
|
// check its normal direction - if it has changed relatively the
|
||||||
// original face the offset face is invalid and should be kept for rebuilding
|
// original face the offset face is invalid and should be kept for rebuilding
|
||||||
@@ -3132,14 +3082,10 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
|||||||
//
|
//
|
||||||
if (aFS.Orientation() == TopAbs_INTERNAL) {
|
if (aFS.Orientation() == TopAbs_INTERNAL) {
|
||||||
aMFToRem.Add(aFS);
|
aMFToRem.Add(aFS);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if (aMFToRem.Contains(aFS))
|
bAllRemoved = bAllRemoved && aMFToRem.Contains(aFS);
|
||||||
continue;
|
bAllInv = bAllInv && (aMFToRem.Contains(aFS) || aMFInv.Contains(aFS));
|
||||||
|
|
||||||
bAllRemoved = false;
|
|
||||||
bAllInv &= aMFInv.Contains(aFS);
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (bAllInv && !bAllRemoved) {
|
if (bAllInv && !bAllRemoved) {
|
||||||
@@ -3170,7 +3116,7 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove the invalid hanging parts external to the solids
|
// Remove the invalid hanging parts external to the solids
|
||||||
RemoveHangingParts(aMV, aDMFImF, aMFInv, theInvEdges, theInvertedEdges, aMFToRem);
|
RemoveHangingParts(aMV, aDMFImF, aMFInv, theInvEdges, aMFToRem);
|
||||||
|
|
||||||
// Remove newly found internal and hanging faces
|
// Remove newly found internal and hanging faces
|
||||||
RemoveValidSplits(aMFToRem, theFImages, aMV, theMERemoved);
|
RemoveValidSplits(aMFToRem, theFImages, aMV, theMERemoved);
|
||||||
@@ -3356,7 +3302,6 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||||
const TopTools_IndexedMapOfShape& theMFInv,
|
const TopTools_IndexedMapOfShape& theMFInv,
|
||||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||||
const TopTools_MapOfShape& theInvertedEdges,
|
|
||||||
TopTools_MapOfShape& theMFToRem)
|
TopTools_MapOfShape& theMFToRem)
|
||||||
{
|
{
|
||||||
// Map the faces of the result solids to filter them from avoided faces
|
// Map the faces of the result solids to filter them from avoided faces
|
||||||
@@ -3378,7 +3323,22 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
for (; anExpF.More(); anExpF.Next())
|
for (; anExpF.More(); anExpF.Next())
|
||||||
{
|
{
|
||||||
const TopoDS_Shape& aF = anExpF.Current();
|
const TopoDS_Shape& aF = anExpF.Current();
|
||||||
TakeModified(aF, aMVIms, aCFHangs, &aMFS);
|
const TopTools_ListOfShape* pLFIm = aMVIms.Seek(aF);
|
||||||
|
if (pLFIm)
|
||||||
|
{
|
||||||
|
TopTools_ListIteratorOfListOfShape aItLFIm(*pLFIm);
|
||||||
|
for (; aItLFIm.More(); aItLFIm.Next())
|
||||||
|
{
|
||||||
|
const TopoDS_Shape& aFIm = aItLFIm.Value();
|
||||||
|
if (!aMFS.Contains(aFIm))
|
||||||
|
aBB.Add(aCFHangs, aFIm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!aMFS.Contains(aF))
|
||||||
|
aBB.Add(aCFHangs, aF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3404,41 +3364,27 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
// Update invalid edges with intersection results
|
// Update invalid edges with intersection results
|
||||||
TopTools_MapOfShape aMEInv;
|
TopTools_MapOfShape aMEInv;
|
||||||
Standard_Integer i, aNbE = theInvEdges.Extent();
|
Standard_Integer i, aNbE = theInvEdges.Extent();
|
||||||
for (i = 1; i <= aNbE; ++i)
|
for (i = 1; i <= aNbE; ++i) {
|
||||||
TakeModified(theInvEdges(i), aMVIms, aMEInv);
|
const TopoDS_Shape& aEInv = theInvEdges(i);
|
||||||
|
const TopTools_ListOfShape *pLEIm = aMVIms.Seek(aEInv);
|
||||||
// Update inverted edges with intersection results
|
if (pLEIm)
|
||||||
TopTools_MapOfShape aMEInverted;
|
{
|
||||||
for (TopTools_MapIteratorOfMapOfShape itM(theInvertedEdges); itM.More(); itM.Next())
|
TopTools_ListIteratorOfListOfShape aItLEIm(*pLEIm);
|
||||||
TakeModified(itM.Value(), aMVIms, aMEInverted);
|
for (; aItLEIm.More(); aItLEIm.Next())
|
||||||
|
aMEInv.Add(aItLEIm.Value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
aMEInv.Add(aEInv);
|
||||||
|
}
|
||||||
|
|
||||||
// Tool for getting the origins of the splits
|
// Tool for getting the origins of the splits
|
||||||
const TopTools_DataMapOfShapeListOfShape& aMVOrs = theMV.Origins();
|
const TopTools_DataMapOfShapeListOfShape& aMVOrs = theMV.Origins();
|
||||||
|
|
||||||
// Find hanging blocks to remove
|
|
||||||
TopTools_ListOfShape aBlocksToRemove;
|
|
||||||
|
|
||||||
TopTools_ListIteratorOfListOfShape aItLCBH(aLCBHangs);
|
TopTools_ListIteratorOfListOfShape aItLCBH(aLCBHangs);
|
||||||
for (; aItLCBH.More(); aItLCBH.Next())
|
for (; aItLCBH.More(); aItLCBH.Next())
|
||||||
{
|
{
|
||||||
const TopoDS_Shape& aCBH = aItLCBH.Value();
|
const TopoDS_Shape& aCBH = aItLCBH.Value();
|
||||||
|
|
||||||
// Remove the block containing the inverted edges
|
|
||||||
Standard_Boolean bHasInverted = Standard_False;
|
|
||||||
TopExp_Explorer anExpE(aCBH, TopAbs_EDGE);
|
|
||||||
for (; anExpE.More() && !bHasInverted; anExpE.Next())
|
|
||||||
{
|
|
||||||
const TopoDS_Shape& aE = anExpE.Current();
|
|
||||||
bHasInverted = !aDMEF .Contains(aE) &&
|
|
||||||
aMEInverted.Contains(aE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bHasInverted)
|
|
||||||
{
|
|
||||||
aBlocksToRemove.Append(aCBH);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the block to contain invalid split
|
// Check the block to contain invalid split
|
||||||
Standard_Boolean bHasInvalidFace = Standard_False;
|
Standard_Boolean bHasInvalidFace = Standard_False;
|
||||||
// Check connectivity to invalid parts
|
// Check connectivity to invalid parts
|
||||||
@@ -3460,7 +3406,7 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
if (!bIsConnected)
|
if (!bIsConnected)
|
||||||
{
|
{
|
||||||
// check edges
|
// check edges
|
||||||
anExpE.Init(aF, TopAbs_EDGE);
|
TopExp_Explorer anExpE(aF, TopAbs_EDGE);
|
||||||
for (; anExpE.More() && !bIsConnected; anExpE.Next())
|
for (; anExpE.More() && !bIsConnected; anExpE.Next())
|
||||||
{
|
{
|
||||||
const TopoDS_Shape& aE = anExpE.Current();
|
const TopoDS_Shape& aE = anExpE.Current();
|
||||||
@@ -3473,20 +3419,17 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// check vertices
|
// check vertices
|
||||||
if (!bIsConnected)
|
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
||||||
|
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
||||||
{
|
{
|
||||||
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
const TopoDS_Shape& aV = anExpV.Current();
|
||||||
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
||||||
|
if (pLE)
|
||||||
{
|
{
|
||||||
const TopoDS_Shape& aV = anExpV.Current();
|
TopTools_ListIteratorOfListOfShape aItLE(*pLE);
|
||||||
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
for (; aItLE.More() && !bIsConnected; aItLE.Next())
|
||||||
if (pLE)
|
bIsConnected = !aBlockME.Contains(aItLE.Value()) &&
|
||||||
{
|
aMEInv .Contains(aItLE.Value());
|
||||||
TopTools_ListIteratorOfListOfShape aItLE(*pLE);
|
|
||||||
for (; aItLE.More() && !bIsConnected; aItLE.Next())
|
|
||||||
bIsConnected = !aBlockME.Contains(aItLE.Value()) &&
|
|
||||||
aMEInv .Contains(aItLE.Value());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3515,17 +3458,12 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
|||||||
(!bIsConnected || aMOffsetF.Extent() == 1);
|
(!bIsConnected || aMOffsetF.Extent() == 1);
|
||||||
|
|
||||||
if (bRemove)
|
if (bRemove)
|
||||||
aBlocksToRemove.Append(aCBH);
|
{
|
||||||
}
|
// remove the block
|
||||||
|
anExpF.Init(aCBH, TopAbs_FACE);
|
||||||
// remove the invalidated blocks
|
for (; anExpF.More(); anExpF.Next())
|
||||||
aItLCBH.Initialize(aBlocksToRemove);
|
theMFToRem.Add(anExpF.Current());
|
||||||
for (; aItLCBH.More(); aItLCBH.Next())
|
}
|
||||||
{
|
|
||||||
const TopoDS_Shape& aCBH = aItLCBH.Value();
|
|
||||||
TopExp_Explorer anExpF(aCBH, TopAbs_FACE);
|
|
||||||
for (; anExpF.More(); anExpF.Next())
|
|
||||||
theMFToRem.Add(anExpF.Current());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6986,16 +6924,13 @@ void UpdateImages(const TopTools_ListOfShape& theLA,
|
|||||||
TopTools_MapOfShape& theModified)
|
TopTools_MapOfShape& theModified)
|
||||||
{
|
{
|
||||||
TopTools_ListIteratorOfListOfShape aIt(theLA);
|
TopTools_ListIteratorOfListOfShape aIt(theLA);
|
||||||
for (; aIt.More(); aIt.Next())
|
for (; aIt.More(); aIt.Next()) {
|
||||||
{
|
|
||||||
const TopoDS_Shape& aS = aIt.Value();
|
const TopoDS_Shape& aS = aIt.Value();
|
||||||
//
|
//
|
||||||
TopTools_ListOfShape* pLSIm = theImages.ChangeSeek(aS);
|
TopTools_ListOfShape* pLSIm = theImages.ChangeSeek(aS);
|
||||||
if (!pLSIm)
|
if (!pLSIm) {
|
||||||
{
|
|
||||||
const TopTools_ListOfShape& aLSIm = theGF.Modified(aS);
|
const TopTools_ListOfShape& aLSIm = theGF.Modified(aS);
|
||||||
if (aLSIm.Extent())
|
if (aLSIm.Extent()) {
|
||||||
{
|
|
||||||
theImages.Bind(aS, aLSIm);
|
theImages.Bind(aS, aLSIm);
|
||||||
theModified.Add(aS);
|
theModified.Add(aS);
|
||||||
}
|
}
|
||||||
@@ -7009,14 +6944,27 @@ void UpdateImages(const TopTools_ListOfShape& theLA,
|
|||||||
//
|
//
|
||||||
// check modifications of the images
|
// check modifications of the images
|
||||||
TopTools_ListIteratorOfListOfShape aIt1(*pLSIm);
|
TopTools_ListIteratorOfListOfShape aIt1(*pLSIm);
|
||||||
for (; aIt1.More(); aIt1.Next())
|
for (; aIt1.More(); aIt1.Next()) {
|
||||||
{
|
|
||||||
const TopoDS_Shape& aSIm = aIt1.Value();
|
const TopoDS_Shape& aSIm = aIt1.Value();
|
||||||
bModified |= TakeModified(aSIm, theGF.Images(), aLSImNew, &aMFence);
|
const TopTools_ListOfShape& aLSIm1 = theGF.Modified(aSIm);
|
||||||
|
if (aLSIm1.IsEmpty()) {
|
||||||
|
if (aMFence.Add(aSIm)) {
|
||||||
|
aLSImNew.Append(aSIm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TopTools_ListIteratorOfListOfShape aIt2(aLSIm1);
|
||||||
|
for (; aIt2.More(); aIt2.Next()) {
|
||||||
|
const TopoDS_Shape& aSImIm = aIt2.Value();
|
||||||
|
if (aMFence.Add(aSImIm)) {
|
||||||
|
aLSImNew.Append(aSImIm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bModified = Standard_True;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (bModified)
|
if (bModified) {
|
||||||
{
|
|
||||||
*pLSIm = aLSImNew;
|
*pLSIm = aLSImNew;
|
||||||
theModified.Add(aS);
|
theModified.Add(aS);
|
||||||
}
|
}
|
||||||
@@ -7151,61 +7099,3 @@ void AppendToList(TopTools_ListOfShape& theList,
|
|||||||
}
|
}
|
||||||
theList.Append(theShape);
|
theList.Append(theShape);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : AddToContainer
|
|
||||||
//purpose : Set of methods to add a shape into container
|
|
||||||
//=======================================================================
|
|
||||||
static void AddToContainer(const TopoDS_Shape& theS,
|
|
||||||
TopTools_ListOfShape& theList)
|
|
||||||
{
|
|
||||||
theList.Append(theS);
|
|
||||||
}
|
|
||||||
static Standard_Boolean AddToContainer(const TopoDS_Shape& theS,
|
|
||||||
TopTools_MapOfShape& theMap)
|
|
||||||
{
|
|
||||||
return theMap.Add(theS);
|
|
||||||
}
|
|
||||||
static Standard_Boolean AddToContainer(const TopoDS_Shape& theS,
|
|
||||||
TopTools_IndexedMapOfShape& theMap)
|
|
||||||
{
|
|
||||||
const Standard_Integer aNb = theMap.Extent();
|
|
||||||
const Standard_Integer anInd = theMap.Add(theS);
|
|
||||||
return anInd > aNb;
|
|
||||||
}
|
|
||||||
static void AddToContainer(const TopoDS_Shape& theS,
|
|
||||||
TopoDS_Shape& theSOut)
|
|
||||||
{
|
|
||||||
BRep_Builder().Add(theSOut, theS);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : TakeModified
|
|
||||||
//purpose : Check if the shape has images in the given images map.
|
|
||||||
// Puts in the output map either the images or the shape itself.
|
|
||||||
//=======================================================================
|
|
||||||
template <class ContainerType, class FenceMapType>
|
|
||||||
Standard_Boolean TakeModified(const TopoDS_Shape& theS,
|
|
||||||
const TopTools_DataMapOfShapeListOfShape& theImages,
|
|
||||||
ContainerType& theContainer,
|
|
||||||
FenceMapType* theMFence)
|
|
||||||
{
|
|
||||||
const TopTools_ListOfShape *pLSIm = theImages.Seek(theS);
|
|
||||||
if (pLSIm)
|
|
||||||
{
|
|
||||||
TopTools_ListIteratorOfListOfShape itLSIm(*pLSIm);
|
|
||||||
for (; itLSIm.More(); itLSIm.Next())
|
|
||||||
{
|
|
||||||
const TopoDS_Shape& aSIm = itLSIm.Value();
|
|
||||||
if (!theMFence || AddToContainer(aSIm, *theMFence))
|
|
||||||
AddToContainer(aSIm, theContainer);
|
|
||||||
}
|
|
||||||
return Standard_True;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!theMFence || AddToContainer(theS, *theMFence))
|
|
||||||
AddToContainer(theS, theContainer);
|
|
||||||
return Standard_False;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -83,7 +83,7 @@ public:
|
|||||||
|
|
||||||
//! Transform the bounding box with the given transformation.
|
//! Transform the bounding box with the given transformation.
|
||||||
//! The resulting box will be larger if theTrsf contains rotation.
|
//! The resulting box will be larger if theTrsf contains rotation.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_B2d Transformed (const gp_Trsf2d& theTrsf) const;
|
Standard_EXPORT Bnd_B2d Transformed (const gp_Trsf2d& theTrsf) const;
|
||||||
|
|
||||||
//! Check the given point for the inclusion in the Box.
|
//! Check the given point for the inclusion in the Box.
|
||||||
//! Returns True if the point is outside.
|
//! Returns True if the point is outside.
|
||||||
|
@@ -84,7 +84,7 @@ public:
|
|||||||
|
|
||||||
//! Transform the bounding box with the given transformation.
|
//! Transform the bounding box with the given transformation.
|
||||||
//! The resulting box will be larger if theTrsf contains rotation.
|
//! The resulting box will be larger if theTrsf contains rotation.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_B2f Transformed (const gp_Trsf2d& theTrsf) const;
|
Standard_EXPORT Bnd_B2f Transformed (const gp_Trsf2d& theTrsf) const;
|
||||||
|
|
||||||
//! Check the given point for the inclusion in the Box.
|
//! Check the given point for the inclusion in the Box.
|
||||||
//! Returns True if the point is outside.
|
//! Returns True if the point is outside.
|
||||||
|
@@ -84,7 +84,7 @@ public:
|
|||||||
|
|
||||||
//! Transform the bounding box with the given transformation.
|
//! Transform the bounding box with the given transformation.
|
||||||
//! The resulting box will be larger if theTrsf contains rotation.
|
//! The resulting box will be larger if theTrsf contains rotation.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_B3d Transformed (const gp_Trsf& theTrsf) const;
|
Standard_EXPORT Bnd_B3d Transformed (const gp_Trsf& theTrsf) const;
|
||||||
|
|
||||||
//! Check the given point for the inclusion in the Box.
|
//! Check the given point for the inclusion in the Box.
|
||||||
//! Returns True if the point is outside.
|
//! Returns True if the point is outside.
|
||||||
|
@@ -85,7 +85,7 @@ public:
|
|||||||
|
|
||||||
//! Transform the bounding box with the given transformation.
|
//! Transform the bounding box with the given transformation.
|
||||||
//! The resulting box will be larger if theTrsf contains rotation.
|
//! The resulting box will be larger if theTrsf contains rotation.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_B3f Transformed (const gp_Trsf& theTrsf) const;
|
Standard_EXPORT Bnd_B3f Transformed (const gp_Trsf& theTrsf) const;
|
||||||
|
|
||||||
//! Check the given point for the inclusion in the Box.
|
//! Check the given point for the inclusion in the Box.
|
||||||
//! Returns True if the point is outside.
|
//! Returns True if the point is outside.
|
||||||
|
@@ -213,7 +213,7 @@ public:
|
|||||||
//! Applying a geometric transformation (for example, a
|
//! Applying a geometric transformation (for example, a
|
||||||
//! rotation) to a bounding box generally increases its
|
//! rotation) to a bounding box generally increases its
|
||||||
//! dimensions. This is not optimal for algorithms which use it.
|
//! dimensions. This is not optimal for algorithms which use it.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_Box Transformed (const gp_Trsf& T) const;
|
Standard_EXPORT Bnd_Box Transformed (const gp_Trsf& T) const;
|
||||||
|
|
||||||
//! Adds the box <Other> to <me>.
|
//! Adds the box <Other> to <me>.
|
||||||
Standard_EXPORT void Add (const Bnd_Box& Other);
|
Standard_EXPORT void Add (const Bnd_Box& Other);
|
||||||
|
@@ -160,7 +160,7 @@ public:
|
|||||||
//! Applying a geometric transformation (for example, a
|
//! Applying a geometric transformation (for example, a
|
||||||
//! rotation) to a bounding box generally increases its
|
//! rotation) to a bounding box generally increases its
|
||||||
//! dimensions. This is not optimal for algorithms which use it.
|
//! dimensions. This is not optimal for algorithms which use it.
|
||||||
Standard_EXPORT Standard_NODISCARD Bnd_Box2d Transformed (const gp_Trsf2d& T) const;
|
Standard_EXPORT Bnd_Box2d Transformed (const gp_Trsf2d& T) const;
|
||||||
|
|
||||||
//! Adds the 2d box <Other> to <me>.
|
//! Adds the 2d box <Other> to <me>.
|
||||||
Standard_EXPORT void Add (const Bnd_Box2d& Other);
|
Standard_EXPORT void Add (const Bnd_Box2d& Other);
|
||||||
|
@@ -851,7 +851,7 @@ void ChFi3d_Builder::StartSol(const Handle(ChFiDS_Stripe)& Stripe,
|
|||||||
PC->D1(woned, P1, derive);
|
PC->D1(woned, P1, derive);
|
||||||
// There are ponts on the border, and internal points are found
|
// There are ponts on the border, and internal points are found
|
||||||
if (derive.Magnitude() > Precision::PConfusion()) {
|
if (derive.Magnitude() > Precision::PConfusion()) {
|
||||||
derive.Normalize();
|
derive.Normalized();
|
||||||
derive.Rotate(M_PI/2);
|
derive.Rotate(M_PI/2);
|
||||||
AS.Initialize(f1);
|
AS.Initialize(f1);
|
||||||
ResU = AS.UResolution(TolE);
|
ResU = AS.UResolution(TolE);
|
||||||
|
@@ -128,7 +128,7 @@ Standard_Boolean Contap_ArcFunction::Derivative (const Standard_Real U,
|
|||||||
dnorm = d2uv.Crossed(d1v) + d1u.Crossed(d2v);
|
dnorm = d2uv.Crossed(d1v) + d1u.Crossed(d2v);
|
||||||
dfv = (dnorm.Dot(myDir)-myCosAng*dnorm.Dot(norm))/myMean;
|
dfv = (dnorm.Dot(myDir)-myCosAng*dnorm.Dot(norm))/myMean;
|
||||||
*/
|
*/
|
||||||
norm.Normalize();
|
norm.Normalized();
|
||||||
dfu = (dnu.Dot(myDir)-myCosAng*dnu.Dot(norm))/myMean;
|
dfu = (dnu.Dot(myDir)-myCosAng*dnu.Dot(norm))/myMean;
|
||||||
dfv = (dnv.Dot(myDir)-myCosAng*dnv.Dot(norm))/myMean;
|
dfv = (dnv.Dot(myDir)-myCosAng*dnv.Dot(norm))/myMean;
|
||||||
}
|
}
|
||||||
|
@@ -1291,43 +1291,42 @@ void DBRep::Set(const Standard_CString Name, const TopoDS_Shape& S)
|
|||||||
Draw::Set(Name,D);
|
Draw::Set(Name,D);
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : getShape
|
//function : Get
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
TopoDS_Shape DBRep::getShape (Standard_CString& theName,
|
TopoDS_Shape DBRep::Get(Standard_CString& name,
|
||||||
TopAbs_ShapeEnum theType,
|
const TopAbs_ShapeEnum typ,
|
||||||
Standard_Boolean theToComplain)
|
const Standard_Boolean complain)
|
||||||
{
|
{
|
||||||
const Standard_Boolean toPick = theName[0] == '.';
|
Standard_Boolean pick = name[0] == '.';
|
||||||
Handle(DBRep_DrawableShape) aDrawable = Handle(DBRep_DrawableShape)::DownCast (Draw::Get (theName));
|
TopoDS_Shape S;
|
||||||
if (aDrawable.IsNull())
|
Handle(DBRep_DrawableShape) D;
|
||||||
{
|
Handle(Draw_Drawable3D) DD = Draw::Get(name,complain);
|
||||||
return TopoDS_Shape();
|
if (!DD.IsNull())
|
||||||
}
|
D = Handle(DBRep_DrawableShape)::DownCast(DD);
|
||||||
|
if (!D.IsNull()) {
|
||||||
TopoDS_Shape aShape = aDrawable->Shape();
|
S = D->Shape();
|
||||||
if (theType != TopAbs_SHAPE
|
if (typ != TopAbs_SHAPE) {
|
||||||
&& theType != aShape.ShapeType()
|
if (typ != S.ShapeType()) {
|
||||||
&& toPick)
|
// try to find prom pick
|
||||||
{
|
if (pick) {
|
||||||
// try to find prom pick
|
Standard_Real u,v;
|
||||||
Standard_Real u, v;
|
DBRep_DrawableShape::LastPick(S,u,v);
|
||||||
DBRep_DrawableShape::LastPick (aShape, u, v);
|
}
|
||||||
}
|
}
|
||||||
if (theType != TopAbs_SHAPE
|
if (typ != S.ShapeType()) {
|
||||||
&& theType != aShape.ShapeType())
|
if (complain) {
|
||||||
{
|
cout << name << " is not a ";
|
||||||
if (theToComplain)
|
TopAbs::Print(typ,cout);
|
||||||
{
|
cout << " but a ";
|
||||||
std::cout << theName << " is not a ";
|
TopAbs::Print(S.ShapeType(),cout);
|
||||||
TopAbs::Print (theType, std::cout);
|
cout << endl;
|
||||||
std::cout << " but a ";
|
}
|
||||||
TopAbs::Print (aShape.ShapeType(), std::cout);
|
S = TopoDS_Shape();
|
||||||
std::cout << std::endl;
|
}
|
||||||
}
|
}
|
||||||
return TopoDS_Shape();
|
|
||||||
}
|
}
|
||||||
return aShape;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc, const char **argv)
|
static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc, const char **argv)
|
||||||
|
@@ -17,10 +17,23 @@
|
|||||||
#ifndef _DBRep_HeaderFile
|
#ifndef _DBRep_HeaderFile
|
||||||
#define _DBRep_HeaderFile
|
#define _DBRep_HeaderFile
|
||||||
|
|
||||||
#include <Draw_Interpretor.hxx>
|
#include <Standard.hxx>
|
||||||
#include <TCollection_AsciiString.hxx>
|
#include <Standard_DefineAlloc.hxx>
|
||||||
|
#include <Standard_Handle.hxx>
|
||||||
|
|
||||||
|
#include <Standard_CString.hxx>
|
||||||
#include <TopAbs_ShapeEnum.hxx>
|
#include <TopAbs_ShapeEnum.hxx>
|
||||||
#include <TopoDS_Shape.hxx>
|
#include <Standard_Boolean.hxx>
|
||||||
|
#include <Draw_Interpretor.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
|
#include <Standard_Integer.hxx>
|
||||||
|
class TopoDS_Shape;
|
||||||
|
class DBRep_Edge;
|
||||||
|
class DBRep_Face;
|
||||||
|
class DBRep_HideData;
|
||||||
|
class DBRep_DrawableShape;
|
||||||
|
class DBRep_IsoBuilder;
|
||||||
|
|
||||||
|
|
||||||
//! Used to display BRep objects using the DrawTrSurf
|
//! Used to display BRep objects using the DrawTrSurf
|
||||||
//! package.
|
//! package.
|
||||||
@@ -41,46 +54,12 @@ public:
|
|||||||
//! variable if already set.
|
//! variable if already set.
|
||||||
Standard_EXPORT static void Set (const Standard_CString Name, const TopoDS_Shape& S);
|
Standard_EXPORT static void Set (const Standard_CString Name, const TopoDS_Shape& S);
|
||||||
|
|
||||||
//! Returns the shape in the variable.
|
//! Returns the shape in the variable <Name>. Returns
|
||||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
//! a null shape if the variable is not set or not of
|
||||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
//! the given <Typ>. If <Complain> is True a message
|
||||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
//! is printed on cout if the variable is not set.
|
||||||
static TopoDS_Shape Get (Standard_CString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
Standard_EXPORT static TopoDS_Shape Get (Standard_CString& Name, const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, const Standard_Boolean Complain = Standard_False);
|
||||||
{
|
|
||||||
return getShape (theName, theType, theToComplain);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns the shape in the variable.
|
|
||||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
|
||||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
|
||||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
|
||||||
static TopoDS_Shape Get (TCollection_AsciiString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
|
||||||
{
|
|
||||||
Standard_CString aNamePtr = theName.ToCString();
|
|
||||||
TopoDS_Shape aShape = getShape (aNamePtr, theType, theToComplain);
|
|
||||||
if (aNamePtr != theName.ToCString())
|
|
||||||
{
|
|
||||||
theName = aNamePtr;
|
|
||||||
}
|
|
||||||
return aShape;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns the shape in the variable.
|
|
||||||
//! @param theName [in] variable name
|
|
||||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
|
||||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
|
||||||
static TopoDS_Shape GetExisting (const TCollection_AsciiString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = Standard_False)
|
|
||||||
{
|
|
||||||
if (theName.Length() == 1
|
|
||||||
&& theName.Value (1) == '.')
|
|
||||||
{
|
|
||||||
return TopoDS_Shape();
|
|
||||||
}
|
|
||||||
|
|
||||||
Standard_CString aNamePtr = theName.ToCString();
|
|
||||||
return getShape (aNamePtr, theType, theToComplain);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Defines the basic commands.
|
//! Defines the basic commands.
|
||||||
Standard_EXPORT static void BasicCommands (Draw_Interpretor& theCommands);
|
Standard_EXPORT static void BasicCommands (Draw_Interpretor& theCommands);
|
||||||
|
|
||||||
@@ -107,16 +86,32 @@ public:
|
|||||||
//! get progress indicator
|
//! get progress indicator
|
||||||
Standard_EXPORT static Standard_Integer Discretisation();
|
Standard_EXPORT static Standard_Integer Discretisation();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Returns the shape in the variable.
|
|
||||||
//! @param theName [in] [out] variable name, or "." to pick up shape interactively (the picked name will be returned then)
|
|
||||||
//! @param theType [in] shape type filter; function will return NULL if shape has different type
|
|
||||||
//! @param theToComplain [in] when TRUE, prints a message on cout if the variable is not set
|
|
||||||
Standard_EXPORT static TopoDS_Shape getShape (Standard_CString& theName,
|
private:
|
||||||
TopAbs_ShapeEnum theType,
|
|
||||||
Standard_Boolean theToComplain);
|
|
||||||
|
|
||||||
|
|
||||||
|
friend class DBRep_Edge;
|
||||||
|
friend class DBRep_Face;
|
||||||
|
friend class DBRep_HideData;
|
||||||
|
friend class DBRep_DrawableShape;
|
||||||
|
friend class DBRep_IsoBuilder;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _DBRep_HeaderFile
|
#endif // _DBRep_HeaderFile
|
||||||
|
@@ -75,7 +75,7 @@ Standard_Boolean DDF::GetDF (Standard_CString& Name,
|
|||||||
Handle(TDF_Data)& DF,
|
Handle(TDF_Data)& DF,
|
||||||
const Standard_Boolean Complain)
|
const Standard_Boolean Complain)
|
||||||
{
|
{
|
||||||
Handle(Standard_Transient) t = Draw::Get (Name);
|
Handle(Standard_Transient) t = Draw::Get(Name, Complain);
|
||||||
Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (t);
|
Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (t);
|
||||||
//Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (Draw::Get(Name, Complain));
|
//Handle(DDF_Data) DDF = Handle(DDF_Data)::DownCast (Draw::Get(Name, Complain));
|
||||||
if (!DDF.IsNull()) {
|
if (!DDF.IsNull()) {
|
||||||
|
@@ -103,12 +103,8 @@ static Standard_Integer DFOpenLabel (Draw_Interpretor& di,
|
|||||||
{
|
{
|
||||||
if (n < 2) return 1;
|
if (n < 2) return 1;
|
||||||
|
|
||||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
Handle(DDF_Browser) browser =
|
||||||
if (browser.IsNull())
|
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||||
{
|
|
||||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
TDF_Label lab;
|
TDF_Label lab;
|
||||||
if (n == 3) TDF_Tool::Label(browser->Data(),a[2],lab);
|
if (n == 3) TDF_Tool::Label(browser->Data(),a[2],lab);
|
||||||
@@ -132,12 +128,8 @@ static Standard_Integer DFOpenAttributeList(Draw_Interpretor& di,
|
|||||||
{
|
{
|
||||||
if (n < 3) return 1;
|
if (n < 3) return 1;
|
||||||
|
|
||||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
Handle(DDF_Browser) browser =
|
||||||
if (browser.IsNull())
|
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||||
{
|
|
||||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
TDF_Label lab;
|
TDF_Label lab;
|
||||||
TDF_Tool::Label(browser->Data(),a[2],lab);
|
TDF_Tool::Label(browser->Data(),a[2],lab);
|
||||||
@@ -165,12 +157,8 @@ static Standard_Integer DFOpenAttribute (Draw_Interpretor& di,
|
|||||||
{
|
{
|
||||||
if (n < 3) return 1;
|
if (n < 3) return 1;
|
||||||
|
|
||||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
Handle(DDF_Browser) browser =
|
||||||
if (browser.IsNull())
|
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||||
{
|
|
||||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Standard_Integer index = Draw::Atoi(a[2]);
|
const Standard_Integer index = Draw::Atoi(a[2]);
|
||||||
TCollection_AsciiString list = browser->OpenAttribute(index);
|
TCollection_AsciiString list = browser->OpenAttribute(index);
|
||||||
|
@@ -86,26 +86,18 @@ static Standard_Integer DDataStd_PNT (Draw_Interpretor& di,
|
|||||||
//purpose : Rmdraw (name)
|
//purpose : Rmdraw (name)
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& ,
|
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& di,
|
||||||
Standard_Integer nb,
|
Standard_Integer nb,
|
||||||
const char** arg)
|
const char** arg)
|
||||||
{
|
{
|
||||||
if (nb != 2)
|
if (nb == 2) {
|
||||||
{
|
Handle(Draw_Drawable3D) D3D;
|
||||||
std::cout << "Syntax error: wrong number of arguments\n";
|
D3D = Draw::Get(arg[1],Standard_True);
|
||||||
return 1;
|
if (!D3D.IsNull()) dout.RemoveDrawable(D3D);
|
||||||
}
|
|
||||||
|
|
||||||
if (Handle(Draw_Drawable3D) D3D = Draw::Get (arg[1]))
|
|
||||||
{
|
|
||||||
dout.RemoveDrawable (D3D);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
di << "DDataStd_Rmdraw : Error : not done\n";
|
||||||
{
|
return 1;
|
||||||
std::cout << "Syntax error: variable '" << arg[1] << "' not found\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@@ -347,12 +347,8 @@ static Standard_Integer DDataStd_OpenNode (Draw_Interpretor& di,
|
|||||||
{
|
{
|
||||||
if (n < 2) return 1;
|
if (n < 2) return 1;
|
||||||
|
|
||||||
Handle(DDataStd_TreeBrowser) browser = Handle(DDataStd_TreeBrowser)::DownCast (Draw::GetExisting (a[1]));
|
Handle(DDataStd_TreeBrowser) browser =
|
||||||
if (browser.IsNull())
|
Handle(DDataStd_TreeBrowser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||||
{
|
|
||||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
TDF_Label lab;
|
TDF_Label lab;
|
||||||
if (n == 3) TDF_Tool::Label(browser->Label().Data(),a[2],lab);
|
if (n == 3) TDF_Tool::Label(browser->Label().Data(),a[2],lab);
|
||||||
|
@@ -71,7 +71,10 @@ Standard_Boolean DDocStd::GetDocument (Standard_CString& Name,
|
|||||||
Handle(TDocStd_Document)& DOC,
|
Handle(TDocStd_Document)& DOC,
|
||||||
const Standard_Boolean Complain)
|
const Standard_Boolean Complain)
|
||||||
{
|
{
|
||||||
Handle(DDocStd_DrawDocument) DD = Handle(DDocStd_DrawDocument)::DownCast (Draw::GetExisting (Name));
|
|
||||||
|
Handle(Draw_Drawable3D) D = Draw::Get(Name,Standard_False);
|
||||||
|
|
||||||
|
Handle(DDocStd_DrawDocument) DD = Handle(DDocStd_DrawDocument)::DownCast (D);
|
||||||
if (DD.IsNull()) {
|
if (DD.IsNull()) {
|
||||||
if (Complain) cout << Name << " is not a Document" << endl;
|
if (Complain) cout << Name << " is not a Document" << endl;
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
|
@@ -348,10 +348,8 @@ static Standard_Integer DDocStd_Close (Draw_Interpretor& /*theDI*/,
|
|||||||
|
|
||||||
aDocApp->Close (aDoc);
|
aDocApp->Close (aDoc);
|
||||||
|
|
||||||
if (Handle(Draw_Drawable3D) aDrawable = Draw::GetExisting (aDocName))
|
Handle(Draw_Drawable3D) aDrawable = Draw::Get (aDocName, Standard_False);
|
||||||
{
|
dout.RemoveDrawable (aDrawable);
|
||||||
dout.RemoveDrawable (aDrawable);
|
|
||||||
}
|
|
||||||
Draw::Set (theArgVec[1], Handle(Draw_Drawable3D)());
|
Draw::Set (theArgVec[1], Handle(Draw_Drawable3D)());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -206,19 +206,20 @@ static int mtmNestedMode (Draw_Interpretor& di, int n, const char** a)
|
|||||||
|
|
||||||
static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
|
||||||
{
|
{
|
||||||
if ( argc < 4 ) { di << "ERROR: Too few args\n"; return 1; }
|
if ( argc <4 ) { di << "ERROR: Too few args\n"; return 0; }
|
||||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (argv[1]));
|
Handle(DDF_Browser) browser =
|
||||||
if ( browser.IsNull() ) { std::cout << "Syntax error: Not a browser: " << argv[1] << "\n"; return 1; }
|
Handle(DDF_Browser)::DownCast (Draw::Get(argv[1], Standard_True));
|
||||||
|
if ( browser.IsNull() ) { di << "ERROR: Not a browser: " << argv[1] << "\n"; return 0; }
|
||||||
|
|
||||||
TDF_Label lab;
|
TDF_Label lab;
|
||||||
TDF_Tool::Label(browser->Data(),argv[2],lab);
|
TDF_Tool::Label(browser->Data(),argv[2],lab);
|
||||||
if ( lab.IsNull() ) { di << "Syntax error: label is Null: " << argv[2] << "\n"; return 1; }
|
if ( lab.IsNull() ) { di << "ERROR: label is Null: " << argv[2] << "\n"; return 0; }
|
||||||
|
|
||||||
Standard_Integer num = Draw::Atoi ( argv[3] );
|
Standard_Integer num = Draw::Atoi ( argv[3] );
|
||||||
TDF_AttributeIterator itr(lab,Standard_False);
|
TDF_AttributeIterator itr(lab,Standard_False);
|
||||||
for (Standard_Integer i=1; itr.More() && i < num; i++) itr.Next();
|
for (Standard_Integer i=1; itr.More() && i < num; i++) itr.Next();
|
||||||
|
|
||||||
if ( ! itr.More() ) { di << "Syntax error: Attribute #" << num << " not found\n"; return 1; }
|
if ( ! itr.More() ) { di << "ERROR: Attribute #" << num << " not found\n"; return 0; }
|
||||||
|
|
||||||
const Handle(TDF_Attribute)& att = itr.Value();
|
const Handle(TDF_Attribute)& att = itr.Value();
|
||||||
if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
|
if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
|
||||||
|
@@ -132,7 +132,7 @@ static Standard_Integer DNaming_TCopyShape (Draw_Interpretor& di,
|
|||||||
DNaming_DataMapIteratorOfDataMapOfShapeOfName itrn(aDMapOfShapeOfName);
|
DNaming_DataMapIteratorOfDataMapOfShapeOfName itrn(aDMapOfShapeOfName);
|
||||||
for(;itrn.More();itrn.Next()) {
|
for(;itrn.More();itrn.Next()) {
|
||||||
TCollection_AsciiString name = itrn.Value();
|
TCollection_AsciiString name = itrn.Value();
|
||||||
const TopoDS_Shape Result = TR.Copied(itrn.Key());
|
const TopoDS_Shape& Result = TR.Copied(itrn.Key());
|
||||||
DBRep::Set(name.ToCString(), Result);
|
DBRep::Set(name.ToCString(), Result);
|
||||||
di.AppendElement(name.ToCString());
|
di.AppendElement(name.ToCString());
|
||||||
}
|
}
|
||||||
|
@@ -73,18 +73,16 @@ public:
|
|||||||
|
|
||||||
//! Returns main DRAW interpretor.
|
//! Returns main DRAW interpretor.
|
||||||
Standard_EXPORT static Draw_Interpretor& GetInterpretor();
|
Standard_EXPORT static Draw_Interpretor& GetInterpretor();
|
||||||
|
|
||||||
//! Returns a variable value.
|
//! Returns a variable value. Null if the variable
|
||||||
//! The name "." does a graphic selection; in this case theName will be is overwritten with the name of the variable.
|
//! does not exist, a warning is printed if Complain
|
||||||
static Handle(Draw_Drawable3D) Get (Standard_CString& theName) { return getDrawable (theName, Standard_True); }
|
//! is True.
|
||||||
|
//!
|
||||||
//! Returns a variable value.
|
//! The name "." does a graphic selection. If the
|
||||||
static Handle(Draw_Drawable3D) GetExisting (const Standard_CString& theName)
|
//! selection is a variable <Name> is overwritten with
|
||||||
{
|
//! the name of the variable.
|
||||||
Standard_CString aName = theName;
|
Standard_EXPORT static Handle(Draw_Drawable3D) Get (Standard_CString& Name, const Standard_Boolean Complain = Standard_True);
|
||||||
return getDrawable (aName, Standard_False);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Gets a numeric variable. Returns True if the
|
//! Gets a numeric variable. Returns True if the
|
||||||
//! variable exist.
|
//! variable exist.
|
||||||
Standard_EXPORT static Standard_Boolean Get (const Standard_CString Name, Standard_Real& val);
|
Standard_EXPORT static Standard_Boolean Get (const Standard_CString Name, Standard_Real& val);
|
||||||
@@ -131,16 +129,20 @@ public:
|
|||||||
//! Defines Draw unit commands
|
//! Defines Draw unit commands
|
||||||
Standard_EXPORT static void UnitCommands (Draw_Interpretor& I);
|
Standard_EXPORT static void UnitCommands (Draw_Interpretor& I);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Returns a variable value.
|
|
||||||
//! @param theName [in] [out] variable name, or "." to activate picking
|
|
||||||
//! @param theToAllowPick [in] when TRUE, "." name will activate picking
|
|
||||||
Standard_EXPORT static Handle(Draw_Drawable3D) getDrawable (Standard_CString& theName,
|
|
||||||
Standard_Boolean theToAllowPick);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
friend class Draw_Drawable3D;
|
friend class Draw_Drawable3D;
|
||||||
friend class Draw_Drawable2D;
|
friend class Draw_Drawable2D;
|
||||||
friend class Draw_Color;
|
friend class Draw_Color;
|
||||||
|
@@ -627,7 +627,7 @@ static Standard_Integer dgetenv(Draw_Interpretor& di, Standard_Integer argc, con
|
|||||||
static Standard_Integer isdraw(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
static Standard_Integer isdraw(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||||
{
|
{
|
||||||
if (n != 2) return 1;
|
if (n != 2) return 1;
|
||||||
Handle(Draw_Drawable3D) D = Draw::Get (a[1]);
|
Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
|
||||||
if (D.IsNull())
|
if (D.IsNull())
|
||||||
di << "0";
|
di << "0";
|
||||||
else
|
else
|
||||||
@@ -643,7 +643,7 @@ static Standard_Integer isdraw(Draw_Interpretor& di, Standard_Integer n, const c
|
|||||||
Standard_Integer isprot(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
Standard_Integer isprot(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||||
{
|
{
|
||||||
if (n != 2) return 1;
|
if (n != 2) return 1;
|
||||||
Handle(Draw_Drawable3D) D = Draw::Get(a[1]);
|
Handle(Draw_Drawable3D) D = Draw::Get(a[1],Standard_False);
|
||||||
if (D.IsNull())
|
if (D.IsNull())
|
||||||
di << "0";
|
di << "0";
|
||||||
else {
|
else {
|
||||||
@@ -814,63 +814,75 @@ void Draw::Set(const Standard_CString name,
|
|||||||
//function : Set
|
//function : Set
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void Draw::Set(const Standard_CString theName, const Standard_Real theValue)
|
void Draw::Set(const Standard_CString Name, const Standard_Real val)
|
||||||
{
|
{
|
||||||
if (Handle(Draw_Number) aNumber = Handle(Draw_Number)::DownCast (Draw::GetExisting (theName)))
|
if ((Name[0] == '.') && (Name[1] == '\0')) return;
|
||||||
{
|
Standard_CString aName = Name;
|
||||||
aNumber->Value (theValue);
|
Handle(Draw_Drawable3D) D = Draw::Get(aName,Standard_False);
|
||||||
|
Handle(Draw_Number) N;
|
||||||
|
if (!D.IsNull()) {
|
||||||
|
N = Handle(Draw_Number)::DownCast(D);
|
||||||
|
}
|
||||||
|
if (N.IsNull()) {
|
||||||
|
N = new Draw_Number(val);
|
||||||
|
Draw::Set(aName,N,Standard_False);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
N->Value(val);
|
||||||
aNumber = new Draw_Number (theValue);
|
|
||||||
Draw::Set (theName, aNumber, Standard_False);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : getDrawable
|
//function : Get
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Draw_Drawable3D) Draw::getDrawable (Standard_CString& theName,
|
Handle(Draw_Drawable3D) Draw::Get(Standard_CString& name,
|
||||||
Standard_Boolean theToAllowPick)
|
const Standard_Boolean )
|
||||||
{
|
{
|
||||||
const Standard_Boolean toPick = ((theName[0] == '.') && (theName[1] == '\0'));
|
Standard_Boolean pick = ((name[0] == '.') && (name[1] == '\0'));
|
||||||
if (!toPick)
|
Handle(Draw_Drawable3D) D;
|
||||||
{
|
if (pick) {
|
||||||
ClientData aCD = Tcl_VarTraceInfo (Draw::GetInterpretor().Interp(), theName, TCL_TRACE_UNSETS | TCL_TRACE_WRITES, tracevar, NULL);
|
cout << "Pick an object" << endl;
|
||||||
Handle(Draw_Drawable3D) aDrawable = reinterpret_cast<Draw_Drawable3D*>(aCD);
|
dout.Select(p_id,p_X,p_Y,p_b);
|
||||||
return theVariables.Contains (aDrawable)
|
dout.Pick(p_id,p_X,p_Y,5,D,0);
|
||||||
? aDrawable
|
if (!D.IsNull()) {
|
||||||
: Handle(Draw_Drawable3D)();
|
if (D->Name()) {
|
||||||
|
name = p_Name = D->Name();
|
||||||
|
//p_Name = (char *)D->Name();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!theToAllowPick)
|
else {
|
||||||
{
|
ClientData aCD =
|
||||||
return Handle(Draw_Drawable3D)();
|
Tcl_VarTraceInfo(Draw::GetInterpretor().Interp(),name,TCL_TRACE_UNSETS | TCL_TRACE_WRITES,
|
||||||
|
tracevar, NULL);
|
||||||
|
D = reinterpret_cast<Draw_Drawable3D*>(aCD);
|
||||||
|
if (!theVariables.Contains(D))
|
||||||
|
D.Nullify();
|
||||||
|
#if 0
|
||||||
|
if (D.IsNull() && complain)
|
||||||
|
cout <<name<<" does not exist"<<endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
return D;
|
||||||
std::cout << "Pick an object" << std::endl;
|
|
||||||
Handle(Draw_Drawable3D) aDrawable;
|
|
||||||
dout.Select (p_id, p_X, p_Y, p_b);
|
|
||||||
dout.Pick (p_id, p_X, p_Y, 5, aDrawable, 0);
|
|
||||||
if (!aDrawable.IsNull()
|
|
||||||
&& aDrawable->Name() != NULL)
|
|
||||||
{
|
|
||||||
theName = p_Name = aDrawable->Name();
|
|
||||||
}
|
|
||||||
return aDrawable;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Get
|
//function : Get
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean Draw::Get (const Standard_CString theName,
|
Standard_Boolean Draw::Get(const Standard_CString name,
|
||||||
Standard_Real& theValue)
|
Standard_Real& val)
|
||||||
{
|
{
|
||||||
if (Handle(Draw_Number) aNumber = Handle(Draw_Number)::DownCast (Draw::GetExisting (theName)))
|
if ((name[0] == '.') && (name[1] == '\0')) {
|
||||||
{
|
return Standard_False;
|
||||||
theValue = aNumber->Value();
|
}
|
||||||
return Standard_True;
|
Standard_CString aName = name;
|
||||||
|
Handle(Draw_Drawable3D) D = Draw::Get(aName,Standard_False);
|
||||||
|
if (!D.IsNull()) {
|
||||||
|
Handle(Draw_Number) N = Handle(Draw_Number)::DownCast(D);
|
||||||
|
if (!N.IsNull()) {
|
||||||
|
val = N->Value();
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
@@ -2731,13 +2731,14 @@ proc _checkpoint {coord_x coord_y rd_ch gr_ch bl_ch} {
|
|||||||
# the check fails and procedure raises error with specified message.
|
# the check fails and procedure raises error with specified message.
|
||||||
#
|
#
|
||||||
# Otherwise the procedure returns false meaning that more iterations are needed.
|
# Otherwise the procedure returns false meaning that more iterations are needed.
|
||||||
# Note that false is returned in any case if length of listval is less than 3.
|
# Note that analysis is peformed only if listval contains at least 5 values,
|
||||||
|
# thus false is returned unconditionally for shorter lists.
|
||||||
#
|
#
|
||||||
# See example of use to check memory leaks in bugs/caf/bug23489
|
# See example of use to check memory leaks in bugs/caf/bug23489
|
||||||
#
|
#
|
||||||
proc checktrend {listval delta tolerance message} {
|
proc checktrend {listval delta tolerance message} {
|
||||||
set nbval [llength $listval]
|
set nbval [llength $listval]
|
||||||
if { $nbval < 3} {
|
if { $nbval < 5} {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -55,11 +55,12 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
const DsgPrs_ArrowSide ArrowSide,
|
const DsgPrs_ArrowSide ArrowSide,
|
||||||
const Standard_Boolean drawFromCenter)
|
const Standard_Boolean drawFromCenter)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_Group) aGroup = aPresentation->NewGroup();
|
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect(LA->LineAspect()->Aspect());
|
||||||
|
|
||||||
Quantity_Color aColor = LA->LineAspect()->Aspect()->Color();
|
Quantity_Color aColor = LA->LineAspect()->Aspect()->Color();
|
||||||
Handle(Graphic3d_AspectMarker3d) aMarkerAsp = new Graphic3d_AspectMarker3d (Aspect_TOM_O, aColor, 1.0);
|
Handle(Graphic3d_AspectMarker3d) aMarkerAsp = new Graphic3d_AspectMarker3d (Aspect_TOM_O, aColor, 1.0);
|
||||||
aGroup->SetGroupPrimitivesAspect (LA->LineAspect()->Aspect());
|
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect (aMarkerAsp);
|
||||||
|
Prs3d_Root::CurrentGroup(aPresentation)->SetPrimitivesAspect(LA->LineAspect()->Aspect());
|
||||||
|
|
||||||
switch(ArrowSide) {
|
switch(ArrowSide) {
|
||||||
case DsgPrs_AS_NONE:
|
case DsgPrs_AS_NONE:
|
||||||
@@ -68,7 +69,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
}
|
}
|
||||||
case DsgPrs_AS_FIRSTAR:
|
case DsgPrs_AS_FIRSTAR:
|
||||||
{
|
{
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw(Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt1,
|
pt1,
|
||||||
dir1,
|
dir1,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
@@ -78,7 +79,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
case DsgPrs_AS_LASTAR:
|
case DsgPrs_AS_LASTAR:
|
||||||
{
|
{
|
||||||
|
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt2,
|
pt2,
|
||||||
dir2,
|
dir2,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
@@ -88,12 +89,12 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
|
|
||||||
case DsgPrs_AS_BOTHAR:
|
case DsgPrs_AS_BOTHAR:
|
||||||
{
|
{
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt1,
|
pt1,
|
||||||
dir1,
|
dir1,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
LA->ArrowAspect()->Length());
|
LA->ArrowAspect()->Length());
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt2,
|
pt2,
|
||||||
dir2,
|
dir2,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
@@ -126,11 +127,15 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
{
|
{
|
||||||
if(drawFromCenter)
|
if(drawFromCenter)
|
||||||
{
|
{
|
||||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints1 = new Graphic3d_ArrayOfPoints (2);
|
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints1 = new Graphic3d_ArrayOfPoints (1);
|
||||||
anArrayOfPoints1->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
anArrayOfPoints1->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
||||||
anArrayOfPoints1->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints1);
|
||||||
aGroup->SetGroupPrimitivesAspect (aMarkerAsp);
|
}
|
||||||
aGroup->AddPrimitiveArray (anArrayOfPoints1);
|
if(drawFromCenter)
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints2 = new Graphic3d_ArrayOfPoints (1);
|
||||||
|
anArrayOfPoints2->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||||
|
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -138,7 +143,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
case DsgPrs_AS_FIRSTAR_LASTPT:
|
case DsgPrs_AS_FIRSTAR_LASTPT:
|
||||||
{
|
{
|
||||||
// an Arrow
|
// an Arrow
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt1,
|
pt1,
|
||||||
dir1,
|
dir1,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
@@ -146,28 +151,25 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
|||||||
// a Round
|
// a Round
|
||||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||||
anArrayOfPoints->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
anArrayOfPoints->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||||
aGroup->SetPrimitivesAspect (aMarkerAsp);
|
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints);
|
||||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case DsgPrs_AS_FIRSTPT_LASTAR:
|
case DsgPrs_AS_FIRSTPT_LASTAR:
|
||||||
{
|
{
|
||||||
|
// a Round
|
||||||
|
if(drawFromCenter)
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||||
|
anArrayOfPoints->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
||||||
|
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints);
|
||||||
|
}
|
||||||
// an Arrow
|
// an Arrow
|
||||||
Prs3d_Arrow::Draw (aGroup,
|
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||||
pt2,
|
pt2,
|
||||||
dir2,
|
dir2,
|
||||||
LA->ArrowAspect()->Angle(),
|
LA->ArrowAspect()->Angle(),
|
||||||
LA->ArrowAspect()->Length());
|
LA->ArrowAspect()->Length());
|
||||||
|
|
||||||
// a Round
|
|
||||||
if (drawFromCenter)
|
|
||||||
{
|
|
||||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
|
||||||
anArrayOfPoints->AddVertex (pt1.X(), pt1.Y(), pt1.Z());
|
|
||||||
aGroup->SetPrimitivesAspect (aMarkerAsp);
|
|
||||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -162,14 +162,13 @@ void Extrema_ExtPElS::Perform(const gp_Pnt& P,
|
|||||||
myDone = Standard_True;
|
myDone = Standard_True;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gp_Vec DirZ;
|
gp_Vec DirZ;
|
||||||
if (M.SquareDistance(O) < Tol * Tol)
|
if (M.SquareDistance(O)<Tol * Tol)
|
||||||
{
|
{ DirZ=OZ;
|
||||||
DirZ = (A < 0 ? -OZ : OZ);
|
if( A<0) DirZ.Multiplied(-1.);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DirZ = gp_Vec(M, O);
|
DirZ=gp_Vec(M,O);
|
||||||
|
|
||||||
// Projection of P in the reference plane of the cone ...
|
// Projection of P in the reference plane of the cone ...
|
||||||
Standard_Real Zp = gp_Vec(O, P).Dot(OZ);
|
Standard_Real Zp = gp_Vec(O, P).Dot(OZ);
|
||||||
|
|
||||||
|
@@ -155,7 +155,7 @@ FEmTool_ProfileMatrix::FEmTool_ProfileMatrix(const TColStd_Array1OfInteger& Firs
|
|||||||
|
|
||||||
Standard_Real * x = &X(X.Lower());
|
Standard_Real * x = &X(X.Lower());
|
||||||
x--;
|
x--;
|
||||||
const Standard_Real * b = &B(B.Lower());
|
Standard_Real * b = &B(B.Lower());
|
||||||
b--;
|
b--;
|
||||||
const Standard_Real * SMA = &SMatrix->Value(1);
|
const Standard_Real * SMA = &SMatrix->Value(1);
|
||||||
SMA --;
|
SMA --;
|
||||||
@@ -207,7 +207,7 @@ FEmTool_ProfileMatrix::FEmTool_ProfileMatrix(const TColStd_Array1OfInteger& Firs
|
|||||||
Standard_Integer i, j, jj, DiagAddr, CurrAddr;
|
Standard_Integer i, j, jj, DiagAddr, CurrAddr;
|
||||||
Standard_Real * m = &MX(MX.Lower());
|
Standard_Real * m = &MX(MX.Lower());
|
||||||
m--;
|
m--;
|
||||||
const Standard_Real * x = &X(X.Lower());
|
Standard_Real * x = &X(X.Lower());
|
||||||
x--;
|
x--;
|
||||||
const Standard_Real * PM = &ProfileMatrix->Value(1);
|
const Standard_Real * PM = &ProfileMatrix->Value(1);
|
||||||
PM--;
|
PM--;
|
||||||
|
@@ -65,7 +65,7 @@ public:
|
|||||||
Standard_EXPORT void Reverse();
|
Standard_EXPORT void Reverse();
|
||||||
|
|
||||||
//! Returns a copy of <me> reversed.
|
//! Returns a copy of <me> reversed.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Axis1Placement) Reversed() const;
|
Standard_EXPORT Handle(Geom_Axis1Placement) Reversed() const;
|
||||||
|
|
||||||
//! Assigns V to the unit vector of this axis.
|
//! Assigns V to the unit vector of this axis.
|
||||||
Standard_EXPORT void SetDirection (const gp_Dir& V) Standard_OVERRIDE;
|
Standard_EXPORT void SetDirection (const gp_Dir& V) Standard_OVERRIDE;
|
||||||
|
@@ -117,7 +117,7 @@ public:
|
|||||||
Standard_EXPORT virtual Standard_Real ParametricTransformation (const gp_Trsf& T) const;
|
Standard_EXPORT virtual Standard_Real ParametricTransformation (const gp_Trsf& T) const;
|
||||||
|
|
||||||
//! Returns a copy of <me> reversed.
|
//! Returns a copy of <me> reversed.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Curve) Reversed() const;
|
Standard_EXPORT Handle(Geom_Curve) Reversed() const;
|
||||||
|
|
||||||
//! Returns the value of the first parameter.
|
//! Returns the value of the first parameter.
|
||||||
//! Warnings :
|
//! Warnings :
|
||||||
|
@@ -99,21 +99,21 @@ public:
|
|||||||
//! (see class Transformation of the package Geom).
|
//! (see class Transformation of the package Geom).
|
||||||
Standard_EXPORT virtual void Transform (const gp_Trsf& T) = 0;
|
Standard_EXPORT virtual void Transform (const gp_Trsf& T) = 0;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Pnt& P) const;
|
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Pnt& P) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Ax1& A1) const;
|
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Ax1& A1) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Mirrored (const gp_Ax2& A2) const;
|
Standard_EXPORT Handle(Geom_Geometry) Mirrored (const gp_Ax2& A2) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
|
Standard_EXPORT Handle(Geom_Geometry) Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Scaled (const gp_Pnt& P, const Standard_Real S) const;
|
Standard_EXPORT Handle(Geom_Geometry) Scaled (const gp_Pnt& P, const Standard_Real S) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Transformed (const gp_Trsf& T) const;
|
Standard_EXPORT Handle(Geom_Geometry) Transformed (const gp_Trsf& T) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Translated (const gp_Vec& V) const;
|
Standard_EXPORT Handle(Geom_Geometry) Translated (const gp_Vec& V) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Geometry) Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
|
Standard_EXPORT Handle(Geom_Geometry) Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
|
||||||
|
|
||||||
//! Creates a new object which is a copy of this geometric object.
|
//! Creates a new object which is a copy of this geometric object.
|
||||||
Standard_EXPORT virtual Handle(Geom_Geometry) Copy() const = 0;
|
Standard_EXPORT virtual Handle(Geom_Geometry) Copy() const = 0;
|
||||||
|
@@ -79,7 +79,7 @@ public:
|
|||||||
//! Reverses the U direction of parametrization of <me>.
|
//! Reverses the U direction of parametrization of <me>.
|
||||||
//! The bounds of the surface are not modified.
|
//! The bounds of the surface are not modified.
|
||||||
//! A copy of <me> is returned.
|
//! A copy of <me> is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Surface) UReversed() const;
|
Standard_EXPORT Handle(Geom_Surface) UReversed() const;
|
||||||
|
|
||||||
//! Returns the parameter on the Ureversed surface for
|
//! Returns the parameter on the Ureversed surface for
|
||||||
//! the point of parameter U on <me>.
|
//! the point of parameter U on <me>.
|
||||||
@@ -100,7 +100,7 @@ public:
|
|||||||
//! Reverses the V direction of parametrization of <me>.
|
//! Reverses the V direction of parametrization of <me>.
|
||||||
//! The bounds of the surface are not modified.
|
//! The bounds of the surface are not modified.
|
||||||
//! A copy of <me> is returned.
|
//! A copy of <me> is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Surface) VReversed() const;
|
Standard_EXPORT Handle(Geom_Surface) VReversed() const;
|
||||||
|
|
||||||
//! Returns the parameter on the Vreversed surface for
|
//! Returns the parameter on the Vreversed surface for
|
||||||
//! the point of parameter V on <me>.
|
//! the point of parameter V on <me>.
|
||||||
|
@@ -160,12 +160,12 @@ public:
|
|||||||
//! Raised if the the transformation is singular. This means that
|
//! Raised if the the transformation is singular. This means that
|
||||||
//! the ScaleFactor is lower or equal to Resolution from
|
//! the ScaleFactor is lower or equal to Resolution from
|
||||||
//! package gp.
|
//! package gp.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Transformation) Inverted() const;
|
Standard_EXPORT Handle(Geom_Transformation) Inverted() const;
|
||||||
|
|
||||||
//! Computes the transformation composed with Other and <me>.
|
//! Computes the transformation composed with Other and <me>.
|
||||||
//! <me> * Other.
|
//! <me> * Other.
|
||||||
//! Returns a new transformation
|
//! Returns a new transformation
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Transformation) Multiplied (const Handle(Geom_Transformation)& Other) const;
|
Standard_EXPORT Handle(Geom_Transformation) Multiplied (const Handle(Geom_Transformation)& Other) const;
|
||||||
|
|
||||||
//! Computes the transformation composed with Other and <me> .
|
//! Computes the transformation composed with Other and <me> .
|
||||||
//! <me> = <me> * Other.
|
//! <me> = <me> * Other.
|
||||||
|
@@ -47,7 +47,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Returns a copy of <me> reversed.
|
//! Returns a copy of <me> reversed.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_Vector) Reversed() const;
|
Standard_EXPORT Handle(Geom_Vector) Reversed() const;
|
||||||
|
|
||||||
//! Computes the angular value, in radians, between this
|
//! Computes the angular value, in radians, between this
|
||||||
//! vector and vector Other. The result is a value between 0 and Pi.
|
//! vector and vector Other. The result is a value between 0 and Pi.
|
||||||
|
@@ -80,7 +80,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Adds the vector Other to <me>.
|
//! Adds the vector Other to <me>.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Added (const Handle(Geom_Vector)& Other) const;
|
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Added (const Handle(Geom_Vector)& Other) const;
|
||||||
|
|
||||||
|
|
||||||
//! Computes the cross product between <me> and Other
|
//! Computes the cross product between <me> and Other
|
||||||
@@ -106,12 +106,12 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Divides <me> by a scalar. A new vector is returned.
|
//! Divides <me> by a scalar. A new vector is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||||
|
|
||||||
|
|
||||||
//! Computes the product of the vector <me> by a scalar.
|
//! Computes the product of the vector <me> by a scalar.
|
||||||
//! A new vector is returned.
|
//! A new vector is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||||
|
|
||||||
|
|
||||||
//! Computes the product of the vector <me> by a scalar.
|
//! Computes the product of the vector <me> by a scalar.
|
||||||
@@ -127,15 +127,14 @@ public:
|
|||||||
//!
|
//!
|
||||||
//! Raised if the magnitude of the vector is lower or equal to
|
//! Raised if the magnitude of the vector is lower or equal to
|
||||||
//! Resolution from package gp.
|
//! Resolution from package gp.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom_VectorWithMagnitude) Normalized() const;
|
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Normalized() const;
|
||||||
|
|
||||||
//! Subtracts the Vector Other to <me>.
|
//! Subtracts the Vector Other to <me>.
|
||||||
Standard_EXPORT void Subtract (const Handle(Geom_Vector)& Other);
|
Standard_EXPORT void Subtract (const Handle(Geom_Vector)& Other);
|
||||||
|
|
||||||
|
|
||||||
//! Subtracts the vector Other to <me>. A new vector is returned.
|
//! Subtracts the vector Other to <me>. A new vector is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD
|
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
||||||
Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
|
||||||
|
|
||||||
//! Applies the transformation T to this vector.
|
//! Applies the transformation T to this vector.
|
||||||
Standard_EXPORT void Transform (const gp_Trsf& T) Standard_OVERRIDE;
|
Standard_EXPORT void Transform (const gp_Trsf& T) Standard_OVERRIDE;
|
||||||
|
@@ -64,7 +64,7 @@ public:
|
|||||||
//! Note:
|
//! Note:
|
||||||
//! - Reverse assigns the result to this axis, while
|
//! - Reverse assigns the result to this axis, while
|
||||||
//! - Reversed creates a new one.
|
//! - Reversed creates a new one.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_AxisPlacement) Reversed() const;
|
Standard_EXPORT Handle(Geom2d_AxisPlacement) Reversed() const;
|
||||||
|
|
||||||
//! Changes the complete definition of the axis placement.
|
//! Changes the complete definition of the axis placement.
|
||||||
Standard_EXPORT void SetAxis (const gp_Ax2d& A);
|
Standard_EXPORT void SetAxis (const gp_Ax2d& A);
|
||||||
|
@@ -110,7 +110,7 @@ public:
|
|||||||
//! - the end point of the initial curve becomes the start
|
//! - the end point of the initial curve becomes the start
|
||||||
//! point of the reversed curve.
|
//! point of the reversed curve.
|
||||||
//! - Reversed creates a new curve.
|
//! - Reversed creates a new curve.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Curve) Reversed() const;
|
Standard_EXPORT Handle(Geom2d_Curve) Reversed() const;
|
||||||
|
|
||||||
//! Returns the value of the first parameter.
|
//! Returns the value of the first parameter.
|
||||||
//! Warnings :
|
//! Warnings :
|
||||||
|
@@ -94,19 +94,19 @@ public:
|
|||||||
//! itself. A copy of the object is returned.
|
//! itself. A copy of the object is returned.
|
||||||
Standard_EXPORT virtual void Transform (const gp_Trsf2d& T) = 0;
|
Standard_EXPORT virtual void Transform (const gp_Trsf2d& T) = 0;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Mirrored (const gp_Pnt2d& P) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Mirrored (const gp_Pnt2d& P) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Mirrored (const gp_Ax2d& A) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Mirrored (const gp_Ax2d& A) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Rotated (const gp_Pnt2d& P, const Standard_Real Ang) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Scaled (const gp_Pnt2d& P, const Standard_Real S) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Scaled (const gp_Pnt2d& P, const Standard_Real S) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Transformed (const gp_Trsf2d& T) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Transformed (const gp_Trsf2d& T) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Translated (const gp_Vec2d& V) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Translated (const gp_Vec2d& V) const;
|
||||||
|
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Geometry) Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const;
|
Standard_EXPORT Handle(Geom2d_Geometry) Translated (const gp_Pnt2d& P1, const gp_Pnt2d& P2) const;
|
||||||
|
|
||||||
Standard_EXPORT virtual Handle(Geom2d_Geometry) Copy() const = 0;
|
Standard_EXPORT virtual Handle(Geom2d_Geometry) Copy() const = 0;
|
||||||
|
|
||||||
|
@@ -170,15 +170,14 @@ public:
|
|||||||
//! Computes the inverse of this transformation and creates a new one.
|
//! Computes the inverse of this transformation and creates a new one.
|
||||||
//! Raises ConstructionError if the the transformation is singular. This means that
|
//! Raises ConstructionError if the the transformation is singular. This means that
|
||||||
//! the ScaleFactor is lower or equal to Resolution from package gp.
|
//! the ScaleFactor is lower or equal to Resolution from package gp.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Transformation) Inverted() const;
|
Standard_EXPORT Handle(Geom2d_Transformation) Inverted() const;
|
||||||
|
|
||||||
|
|
||||||
//! Computes the transformation composed with Other and <me>.
|
//! Computes the transformation composed with Other and <me>.
|
||||||
//! <me> * Other.
|
//! <me> * Other.
|
||||||
//! Returns a new transformation
|
//! Returns a new transformation
|
||||||
Standard_EXPORT Standard_NODISCARD
|
Standard_EXPORT Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
||||||
Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
||||||
Standard_NODISCARD Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
|
||||||
{
|
{
|
||||||
return Multiplied(Other);
|
return Multiplied(Other);
|
||||||
}
|
}
|
||||||
|
@@ -46,7 +46,7 @@ public:
|
|||||||
Standard_EXPORT void Reverse();
|
Standard_EXPORT void Reverse();
|
||||||
|
|
||||||
//! Returns a copy of <me> reversed.
|
//! Returns a copy of <me> reversed.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_Vector) Reversed() const;
|
Standard_EXPORT Handle(Geom2d_Vector) Reversed() const;
|
||||||
|
|
||||||
//! Computes the angular value, in radians, between this
|
//! Computes the angular value, in radians, between this
|
||||||
//! vector and vector Other. The result is a value
|
//! vector and vector Other. The result is a value
|
||||||
|
@@ -135,7 +135,8 @@ void Geom2d_VectorWithMagnitude::Normalize () { gpVec2d.Normalize (); }
|
|||||||
|
|
||||||
Handle(Geom2d_VectorWithMagnitude) Geom2d_VectorWithMagnitude::Normalized () const {
|
Handle(Geom2d_VectorWithMagnitude) Geom2d_VectorWithMagnitude::Normalized () const {
|
||||||
|
|
||||||
gp_Vec2d V = gpVec2d.Normalized();
|
gp_Vec2d V = gpVec2d;
|
||||||
|
V.Normalized ();
|
||||||
return new VectorWithMagnitude (V);
|
return new VectorWithMagnitude (V);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -80,9 +80,8 @@ void operator += (const Handle(Geom2d_Vector)& Other)
|
|||||||
|
|
||||||
|
|
||||||
//! Adds the vector Other to <me>.
|
//! Adds the vector Other to <me>.
|
||||||
Standard_EXPORT Standard_NODISCARD
|
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
||||||
Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
||||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
|
||||||
{
|
{
|
||||||
return Added(Other);
|
return Added(Other);
|
||||||
}
|
}
|
||||||
@@ -105,8 +104,8 @@ void operator /= (const Standard_Real Scalar)
|
|||||||
|
|
||||||
|
|
||||||
//! Divides <me> by a scalar. A new vector is returned.
|
//! Divides <me> by a scalar. A new vector is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||||
{
|
{
|
||||||
return Divided(Scalar);
|
return Divided(Scalar);
|
||||||
}
|
}
|
||||||
@@ -117,7 +116,7 @@ Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator / (const Standard
|
|||||||
//!
|
//!
|
||||||
//! -C++: alias operator *
|
//! -C++: alias operator *
|
||||||
//! Collision with same operator defined for the class Vector!
|
//! Collision with same operator defined for the class Vector!
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Multiplied (const Standard_Real Scalar) const;
|
||||||
|
|
||||||
|
|
||||||
//! Computes the product of the vector <me> by a scalar.
|
//! Computes the product of the vector <me> by a scalar.
|
||||||
@@ -137,7 +136,7 @@ void operator *= (const Standard_Real Scalar)
|
|||||||
//!
|
//!
|
||||||
//! Raised if the magnitude of the vector is lower or equal to
|
//! Raised if the magnitude of the vector is lower or equal to
|
||||||
//! Resolution from package gp.
|
//! Resolution from package gp.
|
||||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Normalized() const;
|
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Normalized() const;
|
||||||
|
|
||||||
//! Subtracts the Vector Other to <me>.
|
//! Subtracts the Vector Other to <me>.
|
||||||
Standard_EXPORT void Subtract (const Handle(Geom2d_Vector)& Other);
|
Standard_EXPORT void Subtract (const Handle(Geom2d_Vector)& Other);
|
||||||
@@ -148,9 +147,8 @@ void operator -= (const Handle(Geom2d_Vector)& Other)
|
|||||||
|
|
||||||
|
|
||||||
//! Subtracts the vector Other to <me>. A new vector is returned.
|
//! Subtracts the vector Other to <me>. A new vector is returned.
|
||||||
Standard_EXPORT Standard_NODISCARD
|
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
||||||
Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
||||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
|
||||||
{
|
{
|
||||||
return Subtracted(Other);
|
return Subtracted(Other);
|
||||||
}
|
}
|
||||||
|
@@ -252,7 +252,7 @@ void GeomFill_GuideTrihedronPlan::SetCurve(const Handle(Adaptor3d_HCurve)& C)
|
|||||||
|
|
||||||
Normal = n.Normalized();
|
Normal = n.Normalized();
|
||||||
BiNormal = Tangent.Crossed(Normal);
|
BiNormal = Tangent.Crossed(Normal);
|
||||||
BiNormal.Normalize();
|
BiNormal.Normalized();
|
||||||
}
|
}
|
||||||
else { // Erreur...
|
else { // Erreur...
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
|
@@ -1381,7 +1381,7 @@ void GeomFill_LocationGuide::Resolution (const Standard_Integer ,
|
|||||||
//Function : InitX
|
//Function : InitX
|
||||||
//Purpose : recherche par interpolation d'une valeur initiale
|
//Purpose : recherche par interpolation d'une valeur initiale
|
||||||
//==================================================================
|
//==================================================================
|
||||||
void GeomFill_LocationGuide::InitX(const Standard_Real Param)
|
void GeomFill_LocationGuide::InitX(const Standard_Real Param) const
|
||||||
{
|
{
|
||||||
|
|
||||||
Standard_Integer Ideb = 1, Ifin = myPoles2d->RowLength(), Idemi;
|
Standard_Integer Ideb = 1, Ifin = myPoles2d->RowLength(), Idemi;
|
||||||
|
@@ -186,7 +186,7 @@ private:
|
|||||||
|
|
||||||
Standard_EXPORT void SetRotation (const Standard_Real PrecAngle, Standard_Real& LastAngle);
|
Standard_EXPORT void SetRotation (const Standard_Real PrecAngle, Standard_Real& LastAngle);
|
||||||
|
|
||||||
Standard_EXPORT void InitX (const Standard_Real Param);
|
Standard_EXPORT void InitX (const Standard_Real Param) const;
|
||||||
|
|
||||||
Handle(GeomFill_TrihedronWithGuide) myLaw;
|
Handle(GeomFill_TrihedronWithGuide) myLaw;
|
||||||
Handle(GeomFill_SectionLaw) mySec;
|
Handle(GeomFill_SectionLaw) mySec;
|
||||||
|
@@ -124,7 +124,7 @@ gp_Vec GeomFill_TgtOnCoons::D1(const Standard_Real W) const
|
|||||||
|
|
||||||
Standard_Real scal = tgsc.Dot(n);
|
Standard_Real scal = tgsc.Dot(n);
|
||||||
gp_Vec scaln = n.Multiplied(-scal);
|
gp_Vec scaln = n.Multiplied(-scal);
|
||||||
tgsc.Add(scaln);
|
tgsc.Added(scaln);
|
||||||
|
|
||||||
gp_Vec scaldn = dn.Multiplied(-scal);
|
gp_Vec scaldn = dn.Multiplied(-scal);
|
||||||
|
|
||||||
|
@@ -11,8 +11,6 @@ Graphic3d_ArrayOfSegments.hxx
|
|||||||
Graphic3d_ArrayOfTriangleFans.hxx
|
Graphic3d_ArrayOfTriangleFans.hxx
|
||||||
Graphic3d_ArrayOfTriangles.hxx
|
Graphic3d_ArrayOfTriangles.hxx
|
||||||
Graphic3d_ArrayOfTriangleStrips.hxx
|
Graphic3d_ArrayOfTriangleStrips.hxx
|
||||||
Graphic3d_Aspects.cxx
|
|
||||||
Graphic3d_Aspects.hxx
|
|
||||||
Graphic3d_AspectFillArea3d.cxx
|
Graphic3d_AspectFillArea3d.cxx
|
||||||
Graphic3d_AspectFillArea3d.hxx
|
Graphic3d_AspectFillArea3d.hxx
|
||||||
Graphic3d_AspectLine3d.cxx
|
Graphic3d_AspectLine3d.cxx
|
||||||
@@ -21,6 +19,7 @@ Graphic3d_AspectMarker3d.cxx
|
|||||||
Graphic3d_AspectMarker3d.hxx
|
Graphic3d_AspectMarker3d.hxx
|
||||||
Graphic3d_AspectText3d.cxx
|
Graphic3d_AspectText3d.cxx
|
||||||
Graphic3d_AspectText3d.hxx
|
Graphic3d_AspectText3d.hxx
|
||||||
|
Graphic3d_AspectTextDefinitionError.hxx
|
||||||
Graphic3d_AttribBuffer.cxx
|
Graphic3d_AttribBuffer.cxx
|
||||||
Graphic3d_AttribBuffer.hxx
|
Graphic3d_AttribBuffer.hxx
|
||||||
Graphic3d_BndBox3d.hxx
|
Graphic3d_BndBox3d.hxx
|
||||||
@@ -74,7 +73,6 @@ Graphic3d_IndexedMapOfAddress.hxx
|
|||||||
Graphic3d_LevelOfTextureAnisotropy.hxx
|
Graphic3d_LevelOfTextureAnisotropy.hxx
|
||||||
Graphic3d_LightSet.cxx
|
Graphic3d_LightSet.cxx
|
||||||
Graphic3d_LightSet.hxx
|
Graphic3d_LightSet.hxx
|
||||||
Graphic3d_MapOfAspectsToAspects.hxx
|
|
||||||
Graphic3d_MapIteratorOfMapOfStructure.hxx
|
Graphic3d_MapIteratorOfMapOfStructure.hxx
|
||||||
Graphic3d_MapOfObject.hxx
|
Graphic3d_MapOfObject.hxx
|
||||||
Graphic3d_MapOfStructure.hxx
|
Graphic3d_MapOfStructure.hxx
|
||||||
|
@@ -15,15 +15,30 @@
|
|||||||
|
|
||||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectFillArea3d
|
// function : Graphic3d_AspectFillArea3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectFillArea3d::Graphic3d_AspectFillArea3d()
|
Graphic3d_AspectFillArea3d::Graphic3d_AspectFillArea3d()
|
||||||
|
: myInteriorColor (Quantity_NOC_CYAN1),
|
||||||
|
myBackInteriorColor (Quantity_NOC_CYAN1),
|
||||||
|
myEdgeColor (Quantity_NOC_WHITE),
|
||||||
|
myInteriorStyle (Aspect_IS_EMPTY),
|
||||||
|
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
||||||
|
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
||||||
|
myAlphaCutoff (0.5f),
|
||||||
|
myEdgeType (Aspect_TOL_SOLID),
|
||||||
|
myEdgeWidth (1.0f),
|
||||||
|
myHatchStyle (Handle(Graphic3d_HatchStyle)()),
|
||||||
|
myToSkipFirstEdge (false),
|
||||||
|
myToDistinguishMaterials (false),
|
||||||
|
myToDrawEdges (false),
|
||||||
|
myToSuppressBackFaces (true),
|
||||||
|
myToMapTexture (false)
|
||||||
{
|
{
|
||||||
myInteriorStyle = Aspect_IS_EMPTY;
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
@@ -37,13 +52,41 @@ Graphic3d_AspectFillArea3d::Graphic3d_AspectFillArea3d (const Aspect_InteriorSty
|
|||||||
const Standard_Real theEdgeLineWidth,
|
const Standard_Real theEdgeLineWidth,
|
||||||
const Graphic3d_MaterialAspect& theFrontMaterial,
|
const Graphic3d_MaterialAspect& theFrontMaterial,
|
||||||
const Graphic3d_MaterialAspect& theBackMaterial)
|
const Graphic3d_MaterialAspect& theBackMaterial)
|
||||||
|
: myFrontMaterial (theFrontMaterial),
|
||||||
|
myBackMaterial (theBackMaterial),
|
||||||
|
myInteriorColor (theInteriorColor),
|
||||||
|
myBackInteriorColor (theInteriorColor),
|
||||||
|
myEdgeColor (theEdgeColor),
|
||||||
|
myInteriorStyle (theInteriorStyle),
|
||||||
|
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
||||||
|
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
||||||
|
myAlphaCutoff (0.5f),
|
||||||
|
myEdgeType (theEdgeLineType),
|
||||||
|
myEdgeWidth ((float )theEdgeLineWidth),
|
||||||
|
myHatchStyle (Handle(Graphic3d_HatchStyle)()),
|
||||||
|
myToSkipFirstEdge (false),
|
||||||
|
myToDistinguishMaterials (false),
|
||||||
|
myToDrawEdges (false),
|
||||||
|
myToSuppressBackFaces (true),
|
||||||
|
myToMapTexture (false)
|
||||||
{
|
{
|
||||||
myFrontMaterial = theFrontMaterial;
|
if (theEdgeLineWidth <= 0.0)
|
||||||
myBackMaterial = theBackMaterial;
|
{
|
||||||
myInteriorColor.SetRGB (theInteriorColor);
|
throw Aspect_AspectFillAreaDefinitionError("Bad value for EdgeLineWidth");
|
||||||
myBackInteriorColor.SetRGB (theInteriorColor);
|
}
|
||||||
myEdgeColor.SetRGB (theEdgeColor);
|
}
|
||||||
myInteriorStyle = theInteriorStyle;
|
|
||||||
myLineType = theEdgeLineType;
|
// =======================================================================
|
||||||
SetEdgeWidth ((float )theEdgeLineWidth);
|
// function : Graphic3d_AspectFillArea3d
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
void Graphic3d_AspectFillArea3d::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture)
|
||||||
|
{
|
||||||
|
if (theTexture.IsNull())
|
||||||
|
{
|
||||||
|
myTextureSet.Nullify();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
myTextureSet = new Graphic3d_TextureSet (theTexture);
|
||||||
}
|
}
|
||||||
|
@@ -17,12 +17,30 @@
|
|||||||
#ifndef _Graphic3d_AspectFillArea3d_HeaderFile
|
#ifndef _Graphic3d_AspectFillArea3d_HeaderFile
|
||||||
#define _Graphic3d_AspectFillArea3d_HeaderFile
|
#define _Graphic3d_AspectFillArea3d_HeaderFile
|
||||||
|
|
||||||
#include <Graphic3d_Aspects.hxx>
|
#include <Aspect_AspectFillAreaDefinitionError.hxx>
|
||||||
|
#include <Aspect_PolygonOffsetMode.hxx>
|
||||||
|
#include <Aspect_InteriorStyle.hxx>
|
||||||
|
#include <Aspect_TypeOfLine.hxx>
|
||||||
|
#include <Graphic3d_AlphaMode.hxx>
|
||||||
|
#include <Graphic3d_HatchStyle.hxx>
|
||||||
|
#include <Graphic3d_MaterialAspect.hxx>
|
||||||
|
#include <Graphic3d_PolygonOffset.hxx>
|
||||||
|
#include <Graphic3d_ShaderProgram.hxx>
|
||||||
|
#include <Graphic3d_TextureMap.hxx>
|
||||||
|
#include <Graphic3d_TextureSet.hxx>
|
||||||
|
#include <Graphic3d_TypeOfShadingModel.hxx>
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_Boolean.hxx>
|
||||||
|
#include <Standard_Integer.hxx>
|
||||||
|
#include <Standard_ShortReal.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
#include <Quantity_ColorRGBA.hxx>
|
||||||
|
|
||||||
//! This class defines graphic attributes for opaque 3d primitives (polygons, triangles, quadrilaterals).
|
//! This class defines graphic attributes for opaque 3d primitives (polygons, triangles, quadrilaterals).
|
||||||
class Graphic3d_AspectFillArea3d : public Graphic3d_Aspects
|
class Graphic3d_AspectFillArea3d : public Standard_Transient
|
||||||
{
|
{
|
||||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Creates a context table for fill area primitives defined with the following default values:
|
//! Creates a context table for fill area primitives defined with the following default values:
|
||||||
@@ -55,13 +73,333 @@ public:
|
|||||||
const Graphic3d_MaterialAspect& theFrontMaterial,
|
const Graphic3d_MaterialAspect& theFrontMaterial,
|
||||||
const Graphic3d_MaterialAspect& theBackMaterial);
|
const Graphic3d_MaterialAspect& theBackMaterial);
|
||||||
|
|
||||||
|
//! Return interior rendering style (Aspect_IS_EMPTY by default, which means nothing will be rendered!).
|
||||||
|
Aspect_InteriorStyle InteriorStyle() const { return myInteriorStyle; }
|
||||||
|
|
||||||
|
//! Modifies the interior type used for rendering
|
||||||
|
void SetInteriorStyle (const Aspect_InteriorStyle theStyle) { myInteriorStyle = theStyle; }
|
||||||
|
|
||||||
|
//! Returns shading model (Graphic3d_TOSM_DEFAULT by default, which means that Shading Model set as default for entire Viewer will be used)
|
||||||
|
Graphic3d_TypeOfShadingModel ShadingModel() const { return myShadingModel; }
|
||||||
|
|
||||||
|
//! Sets shading model
|
||||||
|
void SetShadingModel (const Graphic3d_TypeOfShadingModel theShadingModel) { myShadingModel = theShadingModel; }
|
||||||
|
|
||||||
|
//! Returns the way how alpha value should be treated (Graphic3d_AlphaMode_BlendAuto by default, for backward compatibility).
|
||||||
|
Graphic3d_AlphaMode AlphaMode() const { return myAlphaMode; }
|
||||||
|
|
||||||
|
//! Returns alpha cutoff threshold, for discarding fragments within Graphic3d_AlphaMode_Mask mode (0.5 by default).
|
||||||
|
//! If the alpha value is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent.
|
||||||
|
Standard_ShortReal AlphaCutoff() const { return myAlphaCutoff; }
|
||||||
|
|
||||||
|
//! Defines the way how alpha value should be treated.
|
||||||
|
void SetAlphaMode (Graphic3d_AlphaMode theMode, Standard_ShortReal theAlphaCutoff = 0.5f)
|
||||||
|
{
|
||||||
|
myAlphaMode = theMode;
|
||||||
|
myAlphaCutoff = theAlphaCutoff;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Return interior color.
|
||||||
|
const Quantity_Color& InteriorColor() const { return myInteriorColor.GetRGB(); }
|
||||||
|
|
||||||
|
//! Return interior color.
|
||||||
|
const Quantity_ColorRGBA& InteriorColorRGBA() const { return myInteriorColor; }
|
||||||
|
|
||||||
|
//! Modifies the color of the interior of the face
|
||||||
|
void SetInteriorColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
||||||
|
|
||||||
|
//! Modifies the color of the interior of the face
|
||||||
|
void SetInteriorColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
||||||
|
|
||||||
|
//! Return back interior color.
|
||||||
|
const Quantity_Color& BackInteriorColor() const { return myBackInteriorColor.GetRGB(); }
|
||||||
|
|
||||||
|
//! Return back interior color.
|
||||||
|
const Quantity_ColorRGBA& BackInteriorColorRGBA() const { return myBackInteriorColor; }
|
||||||
|
|
||||||
|
//! Modifies the color of the interior of the back face
|
||||||
|
void SetBackInteriorColor (const Quantity_Color& theColor) { myBackInteriorColor.SetRGB (theColor); }
|
||||||
|
|
||||||
|
//! Modifies the color of the interior of the back face
|
||||||
|
void SetBackInteriorColor (const Quantity_ColorRGBA& theColor) { myBackInteriorColor = theColor; }
|
||||||
|
|
||||||
|
//! Returns the surface material of external faces
|
||||||
|
const Graphic3d_MaterialAspect& FrontMaterial() const { return myFrontMaterial; }
|
||||||
|
|
||||||
|
//! Returns the surface material of external faces
|
||||||
|
Graphic3d_MaterialAspect& ChangeFrontMaterial() { return myFrontMaterial; }
|
||||||
|
|
||||||
|
//! Modifies the surface material of external faces
|
||||||
|
void SetFrontMaterial (const Graphic3d_MaterialAspect& theMaterial) { myFrontMaterial = theMaterial; }
|
||||||
|
|
||||||
|
//! Returns the surface material of internal faces
|
||||||
|
const Graphic3d_MaterialAspect& BackMaterial() const { return myBackMaterial; }
|
||||||
|
|
||||||
|
//! Returns the surface material of internal faces
|
||||||
|
Graphic3d_MaterialAspect& ChangeBackMaterial() { return myBackMaterial; }
|
||||||
|
|
||||||
|
//! Modifies the surface material of internal faces
|
||||||
|
void SetBackMaterial (const Graphic3d_MaterialAspect& theMaterial) { myBackMaterial = theMaterial; }
|
||||||
|
|
||||||
|
//! Returns true if back faces should be suppressed (true by default).
|
||||||
|
bool ToSuppressBackFaces() const { return myToSuppressBackFaces; }
|
||||||
|
|
||||||
|
//! Assign back faces culling flag.
|
||||||
|
void SetSuppressBackFaces (bool theToSuppress) { myToSuppressBackFaces = theToSuppress; }
|
||||||
|
|
||||||
|
//! Returns true if back faces should be suppressed (true by default).
|
||||||
|
bool BackFace() const { return myToSuppressBackFaces; }
|
||||||
|
|
||||||
|
//! Allows the display of back-facing filled polygons.
|
||||||
|
void AllowBackFace() { myToSuppressBackFaces = false; }
|
||||||
|
|
||||||
|
//! Suppress the display of back-facing filled polygons.
|
||||||
|
//! A back-facing polygon is defined as a polygon whose
|
||||||
|
//! vertices are in a clockwise order with respect to screen coordinates.
|
||||||
|
void SuppressBackFace() { myToSuppressBackFaces = true; }
|
||||||
|
|
||||||
|
//! Returns true if material properties should be distinguished for back and front faces (false by default).
|
||||||
|
bool Distinguish() const { return myToDistinguishMaterials; }
|
||||||
|
|
||||||
|
//! Set material distinction between front and back faces.
|
||||||
|
void SetDistinguish (bool toDistinguish) { myToDistinguishMaterials = toDistinguish; }
|
||||||
|
|
||||||
|
//! Allows material distinction between front and back faces.
|
||||||
|
void SetDistinguishOn() { myToDistinguishMaterials = true; }
|
||||||
|
|
||||||
|
//! Forbids material distinction between front and back faces.
|
||||||
|
void SetDistinguishOff() { myToDistinguishMaterials = false; }
|
||||||
|
|
||||||
|
//! Return shader program.
|
||||||
|
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||||
|
|
||||||
|
//! Sets up OpenGL/GLSL shader program.
|
||||||
|
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||||
|
|
||||||
|
//! Return texture array to be mapped.
|
||||||
|
const Handle(Graphic3d_TextureSet)& TextureSet() const { return myTextureSet; }
|
||||||
|
|
||||||
|
//! Setup texture array to be mapped.
|
||||||
|
void SetTextureSet (const Handle(Graphic3d_TextureSet)& theTextures) { myTextureSet = theTextures; }
|
||||||
|
|
||||||
|
//! Return texture to be mapped.
|
||||||
|
//Standard_DEPRECATED("Deprecated method, TextureSet() should be used instead")
|
||||||
|
Handle(Graphic3d_TextureMap) TextureMap() const
|
||||||
|
{
|
||||||
|
return !myTextureSet.IsNull() && !myTextureSet->IsEmpty()
|
||||||
|
? myTextureSet->First()
|
||||||
|
: Handle(Graphic3d_TextureMap)();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Assign texture to be mapped.
|
||||||
|
//! See also SetTextureMapOn() to actually activate texture mapping.
|
||||||
|
//Standard_DEPRECATED("Deprecated method, SetTextureSet() should be used instead")
|
||||||
|
Standard_EXPORT void SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture);
|
||||||
|
|
||||||
|
//! Return true if texture mapping is enabled (false by default).
|
||||||
|
bool ToMapTexture() const { return myToMapTexture; }
|
||||||
|
|
||||||
|
//! Return true if texture mapping is enabled (false by default).
|
||||||
|
bool TextureMapState() const { return myToMapTexture; }
|
||||||
|
|
||||||
|
//! Enable or disable texture mapping (has no effect if texture is not set).
|
||||||
|
void SetTextureMapOn (bool theToMap) { myToMapTexture = theToMap; }
|
||||||
|
|
||||||
|
//! Enable texture mapping (has no effect if texture is not set).
|
||||||
|
void SetTextureMapOn() { myToMapTexture = true; }
|
||||||
|
|
||||||
|
//! Disable texture mapping.
|
||||||
|
void SetTextureMapOff() { myToMapTexture = false; }
|
||||||
|
|
||||||
|
//! Returns current polygon offsets settings.
|
||||||
|
const Graphic3d_PolygonOffset& PolygonOffset() const { return myPolygonOffset; }
|
||||||
|
|
||||||
|
//! Sets polygon offsets settings.
|
||||||
|
void SetPolygonOffset (const Graphic3d_PolygonOffset& theOffset) { myPolygonOffset = theOffset; }
|
||||||
|
|
||||||
|
//! Returns current polygon offsets settings.
|
||||||
|
void PolygonOffsets (Standard_Integer& theMode,
|
||||||
|
Standard_ShortReal& theFactor,
|
||||||
|
Standard_ShortReal& theUnits) const
|
||||||
|
{
|
||||||
|
theMode = myPolygonOffset.Mode;
|
||||||
|
theFactor = myPolygonOffset.Factor;
|
||||||
|
theUnits = myPolygonOffset.Units;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Sets up OpenGL polygon offsets mechanism.
|
||||||
|
//! <aMode> parameter can contain various combinations of
|
||||||
|
//! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
|
||||||
|
//! that polygon offsets are not changed).
|
||||||
|
//! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
|
||||||
|
//! arguments are used by graphic renderer to calculate a depth offset value:
|
||||||
|
//!
|
||||||
|
//! offset = <aFactor> * m + <aUnits> * r, where
|
||||||
|
//! m - maximum depth slope for the polygon currently being displayed,
|
||||||
|
//! r - minimum window coordinates depth resolution (implementation-specific)
|
||||||
|
//!
|
||||||
|
//! Default settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
|
||||||
|
//!
|
||||||
|
//! Negative offset values move polygons closer to the viewport,
|
||||||
|
//! while positive values shift polygons away.
|
||||||
|
//! Consult OpenGL reference for details (glPolygonOffset function description).
|
||||||
|
void SetPolygonOffsets (const Standard_Integer theMode,
|
||||||
|
const Standard_ShortReal theFactor = 1.0f,
|
||||||
|
const Standard_ShortReal theUnits = 0.0f)
|
||||||
|
{
|
||||||
|
myPolygonOffset.Mode = (Aspect_PolygonOffsetMode )(theMode & Aspect_POM_Mask);
|
||||||
|
myPolygonOffset.Factor = theFactor;
|
||||||
|
myPolygonOffset.Units = theUnits;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Standard_DEPRECATED("Deprecated method, ToDrawEdges() should be used instead")
|
//! Returns true if edges should be drawn (false by default).
|
||||||
|
bool ToDrawEdges() const { return myToDrawEdges && myEdgeType != Aspect_TOL_EMPTY; }
|
||||||
|
|
||||||
|
//! Set if edges should be drawn or not.
|
||||||
|
void SetDrawEdges (bool theToDraw)
|
||||||
|
{
|
||||||
|
myToDrawEdges = theToDraw;
|
||||||
|
if (myEdgeType == Aspect_TOL_EMPTY)
|
||||||
|
{
|
||||||
|
myEdgeType = Aspect_TOL_SOLID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns true if edges should be drawn.
|
||||||
bool Edge() const { return ToDrawEdges(); }
|
bool Edge() const { return ToDrawEdges(); }
|
||||||
|
|
||||||
|
//! The edges of FillAreas are drawn.
|
||||||
|
void SetEdgeOn() { SetDrawEdges (true); }
|
||||||
|
|
||||||
|
//! The edges of FillAreas are not drawn.
|
||||||
|
void SetEdgeOff() { SetDrawEdges (false); }
|
||||||
|
|
||||||
|
//! Return color of edges.
|
||||||
|
const Quantity_Color& EdgeColor() const { return myEdgeColor.GetRGB(); }
|
||||||
|
|
||||||
|
//! Return color of edges.
|
||||||
|
const Quantity_ColorRGBA& EdgeColorRGBA() const { return myEdgeColor; }
|
||||||
|
|
||||||
|
//! Modifies the color of the edge of the face
|
||||||
|
void SetEdgeColor (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
||||||
|
|
||||||
|
//! Modifies the color of the edge of the face
|
||||||
|
void SetEdgeColor (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
|
||||||
|
|
||||||
|
//! Return edges line type.
|
||||||
|
Aspect_TypeOfLine EdgeLineType() const { return myEdgeType; }
|
||||||
|
|
||||||
|
//! Modifies the edge line type
|
||||||
|
void SetEdgeLineType (const Aspect_TypeOfLine theType) { myEdgeType = theType; }
|
||||||
|
|
||||||
|
//! Return width for edges in pixels.
|
||||||
|
Standard_ShortReal EdgeWidth() const { return myEdgeWidth; }
|
||||||
|
|
||||||
|
//! Modifies the edge thickness
|
||||||
|
//! Warning: Raises AspectFillAreaDefinitionError if the width is a negative value.
|
||||||
|
void SetEdgeWidth (const Standard_Real theWidth)
|
||||||
|
{
|
||||||
|
if (theWidth <= 0.0)
|
||||||
|
{
|
||||||
|
throw Aspect_AspectFillAreaDefinitionError("Bad value for EdgeLineWidth");
|
||||||
|
}
|
||||||
|
myEdgeWidth = (float )theWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns TRUE if drawing element edges should discard first edge in triangle; FALSE by default.
|
||||||
|
//! Graphics hardware works mostly with triangles, so that wireframe presentation will draw triangle edges by default.
|
||||||
|
//! This flag allows rendering wireframe presentation of quad-only array split into triangles.
|
||||||
|
//! For this, quads should be split in specific order, so that the quad diagonal (to be NOT rendered) goes first:
|
||||||
|
//! 1------2
|
||||||
|
//! / / Triangle #1: 2-0-1; Triangle #2: 0-2-3
|
||||||
|
//! 0------3
|
||||||
|
bool ToSkipFirstEdge() const { return myToSkipFirstEdge; }
|
||||||
|
|
||||||
|
//! Set skip first triangle edge flag for drawing wireframe presentation of quads array split into triangles.
|
||||||
|
void SetSkipFirstEdge (bool theToSkipFirstEdge) { myToSkipFirstEdge = theToSkipFirstEdge; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Returns the hatch type used when InteriorStyle is IS_HATCH
|
||||||
|
const Handle(Graphic3d_HatchStyle)& HatchStyle() const { return myHatchStyle; }
|
||||||
|
|
||||||
|
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||||
|
void SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle) { myHatchStyle = theStyle; }
|
||||||
|
|
||||||
|
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
||||||
|
//! @warning This method always creates a new handle for a given hatch style
|
||||||
|
void SetHatchStyle (const Aspect_HatchStyle theStyle)
|
||||||
|
{
|
||||||
|
if (theStyle == Aspect_HS_SOLID)
|
||||||
|
{
|
||||||
|
myHatchStyle.Nullify();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
myHatchStyle = new Graphic3d_HatchStyle (theStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns the current values.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Aspect_InteriorStyle& theStyle,
|
||||||
|
Quantity_Color& theIntColor,
|
||||||
|
Quantity_Color& theEdgeColor,
|
||||||
|
Aspect_TypeOfLine& theType,
|
||||||
|
Standard_Real& theWidth) const
|
||||||
|
{
|
||||||
|
theStyle = myInteriorStyle;
|
||||||
|
theIntColor = myInteriorColor.GetRGB();
|
||||||
|
theEdgeColor= myEdgeColor.GetRGB();
|
||||||
|
theType = myEdgeType;
|
||||||
|
theWidth = myEdgeWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns the current values.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Aspect_InteriorStyle& theStyle,
|
||||||
|
Quantity_Color& theIntColor,
|
||||||
|
Quantity_Color& theBackIntColor,
|
||||||
|
Quantity_Color& theEdgeColor,
|
||||||
|
Aspect_TypeOfLine& theType,
|
||||||
|
Standard_Real& theWidth) const
|
||||||
|
{
|
||||||
|
theStyle = myInteriorStyle;
|
||||||
|
theIntColor = myInteriorColor.GetRGB();
|
||||||
|
theBackIntColor= myBackInteriorColor.GetRGB();
|
||||||
|
theEdgeColor = myEdgeColor.GetRGB();
|
||||||
|
theType = myEdgeType;
|
||||||
|
theWidth = myEdgeWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||||
|
Handle(Graphic3d_TextureSet) myTextureSet;
|
||||||
|
Graphic3d_MaterialAspect myFrontMaterial;
|
||||||
|
Graphic3d_MaterialAspect myBackMaterial;
|
||||||
|
|
||||||
|
Quantity_ColorRGBA myInteriorColor;
|
||||||
|
Quantity_ColorRGBA myBackInteriorColor;
|
||||||
|
Quantity_ColorRGBA myEdgeColor;
|
||||||
|
Aspect_InteriorStyle myInteriorStyle;
|
||||||
|
Graphic3d_TypeOfShadingModel myShadingModel;
|
||||||
|
Graphic3d_AlphaMode myAlphaMode;
|
||||||
|
Standard_ShortReal myAlphaCutoff;
|
||||||
|
Aspect_TypeOfLine myEdgeType;
|
||||||
|
Standard_ShortReal myEdgeWidth;
|
||||||
|
Handle(Graphic3d_HatchStyle) myHatchStyle;
|
||||||
|
|
||||||
|
Graphic3d_PolygonOffset myPolygonOffset;
|
||||||
|
bool myToSkipFirstEdge;
|
||||||
|
bool myToDistinguishMaterials;
|
||||||
|
bool myToDrawEdges;
|
||||||
|
bool myToSuppressBackFaces;
|
||||||
|
bool myToMapTexture;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_HANDLE(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||||
|
|
||||||
#endif // _Graphic3d_AspectFillArea3d_HeaderFile
|
#endif // _Graphic3d_AspectFillArea3d_HeaderFile
|
||||||
|
@@ -15,30 +15,33 @@
|
|||||||
|
|
||||||
#include <Graphic3d_AspectLine3d.hxx>
|
#include <Graphic3d_AspectLine3d.hxx>
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectLine3d
|
// function : Graphic3d_AspectLine3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d()
|
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d()
|
||||||
|
: myColor (Quantity_NOC_YELLOW),
|
||||||
|
myType (Aspect_TOL_SOLID),
|
||||||
|
myWidth (1.0f)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
//
|
||||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
|
||||||
myLineType = Aspect_TOL_SOLID;
|
|
||||||
myLineWidth = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectLine3d
|
// function : Graphic3d_AspectLine3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||||
Aspect_TypeOfLine theType,
|
const Aspect_TypeOfLine theType,
|
||||||
Standard_Real theWidth)
|
const Standard_Real theWidth)
|
||||||
|
: myColor (theColor),
|
||||||
|
myType (theType),
|
||||||
|
myWidth ((float )theWidth)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
if (myWidth <= 0.0f)
|
||||||
myInteriorColor.SetRGB (theColor);
|
{
|
||||||
myLineType = theType;
|
throw Aspect_AspectLineDefinitionError("Graphic3d_AspectLine3d, Bad value for LineWidth");
|
||||||
SetLineWidth ((float)theWidth);
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,13 +16,19 @@
|
|||||||
#ifndef _Graphic3d_AspectLine3d_HeaderFile
|
#ifndef _Graphic3d_AspectLine3d_HeaderFile
|
||||||
#define _Graphic3d_AspectLine3d_HeaderFile
|
#define _Graphic3d_AspectLine3d_HeaderFile
|
||||||
|
|
||||||
#include <Graphic3d_Aspects.hxx>
|
#include <Aspect_AspectLineDefinitionError.hxx>
|
||||||
|
#include <Aspect_TypeOfLine.hxx>
|
||||||
|
#include <Graphic3d_ShaderProgram.hxx>
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
#include <Quantity_ColorRGBA.hxx>
|
||||||
|
|
||||||
//! Creates and updates a group of attributes for 3d line primitives.
|
//! Creates and updates a group of attributes for 3d line primitives.
|
||||||
//! This group contains the color, the type of line, and its thickness.
|
//! This group contains the color, the type of line, and its thickness.
|
||||||
class Graphic3d_AspectLine3d : public Graphic3d_Aspects
|
class Graphic3d_AspectLine3d : public Standard_Transient
|
||||||
{
|
{
|
||||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Creates a context table for line primitives
|
//! Creates a context table for line primitives
|
||||||
@@ -38,32 +44,85 @@ public:
|
|||||||
//! The nominal line width is 1 pixel.
|
//! The nominal line width is 1 pixel.
|
||||||
//! The width of the line is determined by applying the line width scale factor to this nominal line width.
|
//! The width of the line is determined by applying the line width scale factor to this nominal line width.
|
||||||
//! The supported line widths vary by 1-pixel units.
|
//! The supported line widths vary by 1-pixel units.
|
||||||
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||||
Aspect_TypeOfLine theType,
|
const Aspect_TypeOfLine theType,
|
||||||
Standard_Real theWidth);
|
const Standard_Real theWidth);
|
||||||
|
|
||||||
|
//! Return color.
|
||||||
|
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||||
|
|
||||||
|
//! Return color.
|
||||||
|
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||||
|
|
||||||
|
//! Modifies the color.
|
||||||
|
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||||
|
|
||||||
//! Return line type.
|
//! Return line type.
|
||||||
Aspect_TypeOfLine Type() const { return myLineType; }
|
Aspect_TypeOfLine Type() const { return myType; }
|
||||||
|
|
||||||
//! Modifies the type of line.
|
//! Modifies the type of line.
|
||||||
void SetType (const Aspect_TypeOfLine theType) { myLineType = theType; }
|
void SetType (const Aspect_TypeOfLine theType) { myType = theType; }
|
||||||
|
|
||||||
//! Return line width.
|
//! Return line width.
|
||||||
Standard_ShortReal Width() const { return myLineWidth; }
|
Standard_ShortReal Width() const { return myWidth; }
|
||||||
|
|
||||||
//! Modifies the line thickness.
|
//! Modifies the line thickness.
|
||||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
//! Warning: Raises AspectLineDefinitionError if the width is a negative value.
|
||||||
void SetWidth (const Standard_Real theWidth) { SetWidth ((float )theWidth); }
|
void SetWidth (const Standard_Real theWidth) { SetWidth ((float )theWidth); }
|
||||||
|
|
||||||
//! Modifies the line thickness.
|
//! Modifies the line thickness.
|
||||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
//! Warning: Raises AspectLineDefinitionError if the width is a negative value.
|
||||||
void SetWidth (Standard_ShortReal theWidth)
|
void SetWidth (const Standard_ShortReal theWidth)
|
||||||
{
|
{
|
||||||
SetLineWidth (theWidth);
|
if (theWidth <= 0.0f)
|
||||||
|
{
|
||||||
|
throw Aspect_AspectLineDefinitionError("Graphic3d_AspectLine3d, Bad value for LineWidth");
|
||||||
|
}
|
||||||
|
myWidth = theWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Return shader program.
|
||||||
|
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||||
|
|
||||||
|
//! Sets up OpenGL/GLSL shader program.
|
||||||
|
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||||
|
|
||||||
|
//! Check for equality with another line aspect.
|
||||||
|
bool IsEqual (const Graphic3d_AspectLine3d& theOther)
|
||||||
|
{
|
||||||
|
if (this == &theOther)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return myProgram == theOther.myProgram
|
||||||
|
&& myType == theOther.myType
|
||||||
|
&& myColor == theOther.myColor
|
||||||
|
&& myWidth == theOther.myWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Aspect_TypeOfLine& theType,
|
||||||
|
Standard_Real& theWidth) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theType = myType;
|
||||||
|
theWidth = myWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||||
|
Quantity_ColorRGBA myColor;
|
||||||
|
Aspect_TypeOfLine myType;
|
||||||
|
Standard_ShortReal myWidth;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_HANDLE(Graphic3d_AspectLine3d, Standard_Transient)
|
||||||
|
|
||||||
#endif // _Graphic3d_AspectLine3d_HeaderFile
|
#endif // _Graphic3d_AspectLine3d_HeaderFile
|
||||||
|
@@ -15,18 +15,18 @@
|
|||||||
|
|
||||||
#include <Graphic3d_AspectMarker3d.hxx>
|
#include <Graphic3d_AspectMarker3d.hxx>
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectMarker3d
|
// function : Graphic3d_AspectMarker3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d()
|
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d()
|
||||||
|
: myColor (Quantity_NOC_YELLOW),
|
||||||
|
myType (Aspect_TOM_X),
|
||||||
|
myScale (1.0f)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
//
|
||||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
|
||||||
myMarkerType = Aspect_TOM_X;
|
|
||||||
myMarkerScale = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
@@ -36,11 +36,14 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d()
|
|||||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Aspect_TypeOfMarker theType,
|
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Aspect_TypeOfMarker theType,
|
||||||
const Quantity_Color& theColor,
|
const Quantity_Color& theColor,
|
||||||
const Standard_Real theScale)
|
const Standard_Real theScale)
|
||||||
|
: myColor (theColor),
|
||||||
|
myType (theType),
|
||||||
|
myScale ((float )theScale)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
if (theScale <= 0.0)
|
||||||
myInteriorColor.SetRGB (theColor);
|
{
|
||||||
myMarkerType = theType;
|
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||||
SetMarkerScale ((float )theScale);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
@@ -51,12 +54,12 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Quantity_Color& theCo
|
|||||||
const Standard_Integer theWidth,
|
const Standard_Integer theWidth,
|
||||||
const Standard_Integer theHeight,
|
const Standard_Integer theHeight,
|
||||||
const Handle(TColStd_HArray1OfByte)& theTextureBitMap)
|
const Handle(TColStd_HArray1OfByte)& theTextureBitMap)
|
||||||
|
: myMarkerImage (new Graphic3d_MarkerImage (theTextureBitMap, theWidth, theHeight)),
|
||||||
|
myColor (theColor),
|
||||||
|
myType (Aspect_TOM_USERDEFINED),
|
||||||
|
myScale (1.0f)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
//
|
||||||
myMarkerImage = new Graphic3d_MarkerImage(theTextureBitMap, theWidth, theHeight);
|
|
||||||
myInteriorColor.SetRGB (theColor),
|
|
||||||
myMarkerType = Aspect_TOM_USERDEFINED;
|
|
||||||
myMarkerScale = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
@@ -64,12 +67,12 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Quantity_Color& theCo
|
|||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Handle(Image_PixMap)& theTextureImage)
|
Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Handle(Image_PixMap)& theTextureImage)
|
||||||
|
: myMarkerImage (new Graphic3d_MarkerImage (theTextureImage)),
|
||||||
|
myColor (Quantity_NOC_YELLOW),
|
||||||
|
myType (Aspect_TOM_USERDEFINED),
|
||||||
|
myScale (1.0f)
|
||||||
{
|
{
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
//
|
||||||
myMarkerImage = new Graphic3d_MarkerImage (theTextureImage);
|
|
||||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
|
||||||
myMarkerType = Aspect_TOM_USERDEFINED;
|
|
||||||
myMarkerScale = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
|
@@ -16,13 +16,23 @@
|
|||||||
#ifndef _Graphic3d_AspectMarker3d_HeaderFile
|
#ifndef _Graphic3d_AspectMarker3d_HeaderFile
|
||||||
#define _Graphic3d_AspectMarker3d_HeaderFile
|
#define _Graphic3d_AspectMarker3d_HeaderFile
|
||||||
|
|
||||||
#include <Graphic3d_Aspects.hxx>
|
#include <Aspect_AspectMarkerDefinitionError.hxx>
|
||||||
|
#include <Aspect_TypeOfMarker.hxx>
|
||||||
|
#include <Graphic3d_MarkerImage.hxx>
|
||||||
|
#include <Graphic3d_ShaderProgram.hxx>
|
||||||
|
#include <Image_PixMap.hxx>
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_Integer.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
#include <TColStd_HArray1OfByte.hxx>
|
||||||
|
#include <Quantity_ColorRGBA.hxx>
|
||||||
|
|
||||||
//! Creates and updates an attribute group for marker type primitives.
|
//! Creates and updates an attribute group for marker type primitives.
|
||||||
//! This group contains the type of marker, its color, and its scale factor.
|
//! This group contains the type of marker, its color, and its scale factor.
|
||||||
class Graphic3d_AspectMarker3d : public Graphic3d_Aspects
|
class Graphic3d_AspectMarker3d : public Standard_Transient
|
||||||
{
|
{
|
||||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Creates a context table for marker primitives
|
//! Creates a context table for marker primitives
|
||||||
@@ -43,26 +53,39 @@ public:
|
|||||||
//! defined with the specified values.
|
//! defined with the specified values.
|
||||||
Standard_EXPORT Graphic3d_AspectMarker3d(const Handle(Image_PixMap)& theTextureImage);
|
Standard_EXPORT Graphic3d_AspectMarker3d(const Handle(Image_PixMap)& theTextureImage);
|
||||||
|
|
||||||
|
//! Return color.
|
||||||
|
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||||
|
|
||||||
|
//! Return the color.
|
||||||
|
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||||
|
|
||||||
|
//! Modifies the color.
|
||||||
|
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||||
|
|
||||||
//! Return scale factor.
|
//! Return scale factor.
|
||||||
Standard_ShortReal Scale() const { return myMarkerScale; }
|
Standard_ShortReal Scale() const { return myScale; }
|
||||||
|
|
||||||
//! Modifies the scale factor.
|
//! Modifies the scale factor.
|
||||||
//! Marker type Aspect_TOM_POINT is not affected by the marker size scale factor.
|
//! Marker type Aspect_TOM_POINT is not affected by the marker size scale factor.
|
||||||
//! It is always the smallest displayable dot.
|
//! It is always the smallest displayable dot.
|
||||||
//! Warning: Raises Standard_OutOfRange if the scale is a negative value.
|
//! Warning: Raises AspectMarkerDefinitionError if the scale is a negative value.
|
||||||
void SetScale (const Standard_ShortReal theScale)
|
void SetScale (const Standard_ShortReal theScale)
|
||||||
{
|
{
|
||||||
SetMarkerScale (theScale);
|
if (theScale <= 0.0f)
|
||||||
|
{
|
||||||
|
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||||
|
}
|
||||||
|
myScale = theScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Assign scale factor.
|
//! Assign scale factor.
|
||||||
void SetScale (const Standard_Real theScale) { SetScale ((float )theScale); }
|
void SetScale (const Standard_Real theScale) { SetScale ((float )theScale); }
|
||||||
|
|
||||||
//! Return marker type.
|
//! Return marker type.
|
||||||
Aspect_TypeOfMarker Type() const { return myMarkerType; }
|
Aspect_TypeOfMarker Type() const { return myType; }
|
||||||
|
|
||||||
//! Modifies the type of marker.
|
//! Modifies the type of marker.
|
||||||
void SetType (const Aspect_TypeOfMarker theType) { myMarkerType = theType; }
|
void SetType (const Aspect_TypeOfMarker theType) { myType = theType; }
|
||||||
|
|
||||||
//! Returns marker's texture size.
|
//! Returns marker's texture size.
|
||||||
Standard_EXPORT void GetTextureSize (Standard_Integer& theWidth, Standard_Integer& theHeight) const;
|
Standard_EXPORT void GetTextureSize (Standard_Integer& theWidth, Standard_Integer& theHeight) const;
|
||||||
@@ -71,10 +94,40 @@ public:
|
|||||||
//! Could be null handle if marker aspect has been initialized as default type of marker.
|
//! Could be null handle if marker aspect has been initialized as default type of marker.
|
||||||
const Handle(Graphic3d_MarkerImage)& GetMarkerImage() const { return myMarkerImage; }
|
const Handle(Graphic3d_MarkerImage)& GetMarkerImage() const { return myMarkerImage; }
|
||||||
|
|
||||||
|
//! Set marker's image texture.
|
||||||
|
void SetMarkerImage (const Handle(Graphic3d_MarkerImage)& theImage) { myMarkerImage = theImage; }
|
||||||
|
|
||||||
Standard_EXPORT void SetBitMap (const Standard_Integer theWidth, const Standard_Integer theHeight, const Handle(TColStd_HArray1OfByte)& theTexture);
|
Standard_EXPORT void SetBitMap (const Standard_Integer theWidth, const Standard_Integer theHeight, const Handle(TColStd_HArray1OfByte)& theTexture);
|
||||||
|
|
||||||
|
//! Return the program.
|
||||||
|
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||||
|
|
||||||
|
//! Sets up OpenGL/GLSL shader program.
|
||||||
|
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Aspect_TypeOfMarker& theType,
|
||||||
|
Standard_Real& theScale) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theType = myType;
|
||||||
|
theScale = myScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||||
|
Handle(Graphic3d_MarkerImage) myMarkerImage;
|
||||||
|
Quantity_ColorRGBA myColor;
|
||||||
|
Aspect_TypeOfMarker myType;
|
||||||
|
Standard_ShortReal myScale;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_HANDLE(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||||
|
|
||||||
#endif // _Graphic3d_AspectMarker3d_HeaderFile
|
#endif // _Graphic3d_AspectMarker3d_HeaderFile
|
||||||
|
@@ -15,43 +15,55 @@
|
|||||||
|
|
||||||
#include <Graphic3d_AspectText3d.hxx>
|
#include <Graphic3d_AspectText3d.hxx>
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Standard_Transient)
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectText3d
|
// function : Graphic3d_AspectText3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d()
|
Graphic3d_AspectText3d::Graphic3d_AspectText3d()
|
||||||
|
: myFont (Font_NOF_ASCII_MONO),
|
||||||
|
myColor (Quantity_NOC_YELLOW),
|
||||||
|
myFactor (1.0),
|
||||||
|
mySpace (0.0),
|
||||||
|
myStyle (Aspect_TOST_NORMAL),
|
||||||
|
myDisplayType (Aspect_TODT_NORMAL),
|
||||||
|
myColorSubTitle (Quantity_NOC_WHITE),
|
||||||
|
myTextZoomable (false),
|
||||||
|
myTextAngle (0.0),
|
||||||
|
myTextFontAspect(Font_FA_Regular)
|
||||||
{
|
{
|
||||||
// actually this should be a special state Graphic3d_AlphaMode_MaskBlend
|
//
|
||||||
// since text is drawn in usual order with normal opaque objects (thanks to alpha test),
|
|
||||||
// but blending is also enabled to smoothen boundaries
|
|
||||||
SetAlphaMode (Graphic3d_AlphaMode_Mask, 0.285f);
|
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
|
||||||
myInteriorColor.SetRGB (Quantity_NOC_YELLOW);
|
|
||||||
myEdgeColor.SetRGB (Quantity_NOC_WHITE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Graphic3d_AspectText3d
|
// function : Graphic3d_AspectText3d
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||||
Standard_CString theFont,
|
const Standard_CString theFont,
|
||||||
Standard_Real ,
|
const Standard_Real theExpansionFactor,
|
||||||
Standard_Real ,
|
const Standard_Real theSpace,
|
||||||
Aspect_TypeOfStyleText theStyle,
|
const Aspect_TypeOfStyleText theStyle,
|
||||||
Aspect_TypeOfDisplayText theDisplayType)
|
const Aspect_TypeOfDisplayText theDisplayType)
|
||||||
|
: myFont (theFont),
|
||||||
|
myColor (theColor),
|
||||||
|
myFactor (theExpansionFactor),
|
||||||
|
mySpace (theSpace),
|
||||||
|
myStyle (theStyle),
|
||||||
|
myDisplayType (theDisplayType),
|
||||||
|
myColorSubTitle (Quantity_NOC_WHITE),
|
||||||
|
myTextZoomable (false),
|
||||||
|
myTextAngle (0.0),
|
||||||
|
myTextFontAspect(Font_FA_Regular)
|
||||||
{
|
{
|
||||||
SetAlphaMode (Graphic3d_AlphaMode_Mask, 0.285f);
|
if (myFont.IsEmpty())
|
||||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
|
||||||
myTextStyle = theStyle;
|
|
||||||
myTextDisplayType = theDisplayType;
|
|
||||||
myInteriorColor.SetRGB (theColor);
|
|
||||||
myEdgeColor.SetRGB (Quantity_NOC_WHITE);
|
|
||||||
if (theFont != NULL
|
|
||||||
&& *theFont != '\0')
|
|
||||||
{
|
{
|
||||||
myTextFont = new TCollection_HAsciiString (theFont);
|
myFont = Font_NOF_ASCII_MONO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (theExpansionFactor <= 0.0)
|
||||||
|
{
|
||||||
|
throw Graphic3d_AspectTextDefinitionError("Bad value for TextScaleFactor");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,69 +16,89 @@
|
|||||||
#ifndef _Graphic3d_AspectText3d_HeaderFile
|
#ifndef _Graphic3d_AspectText3d_HeaderFile
|
||||||
#define _Graphic3d_AspectText3d_HeaderFile
|
#define _Graphic3d_AspectText3d_HeaderFile
|
||||||
|
|
||||||
#include <Graphic3d_Aspects.hxx>
|
#include <Aspect_TypeOfStyleText.hxx>
|
||||||
|
#include <Aspect_TypeOfDisplayText.hxx>
|
||||||
|
#include <Graphic3d_AspectTextDefinitionError.hxx>
|
||||||
|
#include <Graphic3d_ShaderProgram.hxx>
|
||||||
|
#include <Font_FontAspect.hxx>
|
||||||
|
#include <Font_NameOfFont.hxx>
|
||||||
|
#include <Standard_Transient.hxx>
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_Boolean.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
#include <TCollection_AsciiString.hxx>
|
||||||
|
#include <Quantity_ColorRGBA.hxx>
|
||||||
|
|
||||||
//! Creates and updates a group of attributes for text primitives.
|
//! Creates and updates a group of attributes for
|
||||||
class Graphic3d_AspectText3d : public Graphic3d_Aspects
|
//! text primitives. This group contains the color,
|
||||||
|
//! font, expansion factor (height/width ratio), and
|
||||||
|
//! inter-character space.
|
||||||
|
//!
|
||||||
|
//! NOTE: The font name is stored in the aspect instance
|
||||||
|
//! so it is safe to pass it as const char* to OpenGl package
|
||||||
|
//! without copying the string. However, the aspect should not
|
||||||
|
//! be deleted until the text drawn using this aspect is no longer
|
||||||
|
//! visible. The best practice is to keep the aspect in the object's drawer.
|
||||||
|
class Graphic3d_AspectText3d : public Standard_Transient
|
||||||
{
|
{
|
||||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Standard_Transient)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Creates a context table for text primitives defined with the following default values:
|
//! Creates a context table for text primitives
|
||||||
//! Color : Quantity_NOC_YELLOW
|
//! defined with the following default values:
|
||||||
//! Font : Font_NOF_ASCII_MONO
|
//!
|
||||||
//! The style : Aspect_TOST_NORMAL
|
//! Color : NOC_YELLOW
|
||||||
//! The display type : Aspect_TODT_NORMAL
|
//! Font : NOF_ASCII_MONO
|
||||||
|
//! Expansion factor : 1.
|
||||||
|
//! Space between characters : 0.
|
||||||
|
//! The style : TOST_NORMAL
|
||||||
|
//! The display type : TODT_NORMAL
|
||||||
Standard_EXPORT Graphic3d_AspectText3d();
|
Standard_EXPORT Graphic3d_AspectText3d();
|
||||||
|
|
||||||
//! Creates a context table for text primitives defined with the specified values.
|
//! Creates a context table for text primitives
|
||||||
//! @param theColor [in] text color
|
//! defined with the specified values.
|
||||||
//! @param theFont [in] font family name or alias like Font_NOF_ASCII_MONO
|
//! AFont may be to take means from User(example "Courier New")
|
||||||
//! @param theExpansionFactor [in] deprecated parameter, has no effect
|
//! or Font name defined in Font_NameOfFont(example Font_NOF_ASCII_MONO)
|
||||||
//! @param theSpace [in] deprecated parameter, has no effect
|
//! or use default font("Courier")
|
||||||
//! @param theStyle [in] font style
|
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||||
//! @param theDisplayType [in] display mode
|
const Standard_CString theFont,
|
||||||
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
const Standard_Real theExpansionFactor,
|
||||||
Standard_CString theFont,
|
const Standard_Real theSpace,
|
||||||
Standard_Real theExpansionFactor,
|
const Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
||||||
Standard_Real theSpace,
|
const Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
||||||
Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
|
||||||
Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
|
||||||
|
|
||||||
//! Return the text color.
|
//! Return the text color.
|
||||||
const Quantity_Color& Color() const { return myInteriorColor.GetRGB(); }
|
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||||
|
|
||||||
//! Return the text color.
|
//! Return the text color.
|
||||||
const Quantity_ColorRGBA& ColorRGBA() const { return myInteriorColor; }
|
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||||
|
|
||||||
//! Modifies the color.
|
//! Modifies the color.
|
||||||
void SetColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||||
|
|
||||||
//! Modifies the color.
|
//! Modifies the color.
|
||||||
void SetColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
void SetColor (const Quantity_ColorRGBA& theColor) { myColor = theColor; }
|
||||||
|
|
||||||
|
//! Modifies the expansion factor (height/width ratio)
|
||||||
|
//! If the factor is less than 1, the characters will
|
||||||
|
//! be higher than they are wide.
|
||||||
|
void SetExpansionFactor (const Standard_Real theFactor)
|
||||||
|
{
|
||||||
|
if (theFactor <= 0.0)
|
||||||
|
{
|
||||||
|
throw Graphic3d_AspectTextDefinitionError("Bad value for TextScaleFactor");
|
||||||
|
}
|
||||||
|
myFactor = theFactor;
|
||||||
|
}
|
||||||
|
|
||||||
//! Return the font.
|
//! Return the font.
|
||||||
const TCollection_AsciiString& Font() const
|
const TCollection_AsciiString& Font() const { return myFont; }
|
||||||
{
|
|
||||||
if (myTextFont.IsNull())
|
|
||||||
{
|
|
||||||
static const TCollection_AsciiString anEmpty;
|
|
||||||
return anEmpty;
|
|
||||||
}
|
|
||||||
return myTextFont->String();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Modifies the font.
|
//! Modifies the font.
|
||||||
void SetFont (const TCollection_AsciiString& theFont)
|
void SetFont (const TCollection_AsciiString& theFont)
|
||||||
{
|
{
|
||||||
if (!theFont.IsEmpty())
|
myFont = !theFont.IsEmpty() ? theFont : TCollection_AsciiString (Font_NOF_ASCII_MONO);
|
||||||
{
|
|
||||||
myTextFont = new TCollection_HAsciiString (theFont);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myTextFont.Nullify();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Modifies the font.
|
//! Modifies the font.
|
||||||
@@ -87,32 +107,174 @@ public:
|
|||||||
SetFont (TCollection_AsciiString (theFont));
|
SetFont (TCollection_AsciiString (theFont));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Return the space between characters.
|
||||||
|
Standard_Real Space() const { return mySpace; }
|
||||||
|
|
||||||
|
//! Modifies the space between the characters.
|
||||||
|
void SetSpace (const Standard_Real theSpace) { mySpace = theSpace; }
|
||||||
|
|
||||||
//! Return the text style.
|
//! Return the text style.
|
||||||
Aspect_TypeOfStyleText Style() const { return myTextStyle; }
|
Aspect_TypeOfStyleText Style() const { return myStyle; }
|
||||||
|
|
||||||
//! Modifies the style of the text.
|
//! Modifies the style of the text.
|
||||||
void SetStyle (Aspect_TypeOfStyleText theStyle) { myTextStyle = theStyle; }
|
//! * TOST_NORMAL
|
||||||
|
//! Default text. The text is displayed like any other graphic object.
|
||||||
|
//! This text can be hidden by another object that is nearest from the point of view.
|
||||||
|
//! * TOST_ANNOTATION
|
||||||
|
//! The text is always visible.
|
||||||
|
//! The text is displayed over the other object according to the priority.
|
||||||
|
void SetStyle (const Aspect_TypeOfStyleText theStyle) { myStyle = theStyle; }
|
||||||
|
|
||||||
//! Return display type.
|
//! Return display type.
|
||||||
Aspect_TypeOfDisplayText DisplayType() const { return myTextDisplayType; }
|
Aspect_TypeOfDisplayText DisplayType() const { return myDisplayType; }
|
||||||
|
|
||||||
//! Define the display type of the text.
|
//! Define the display type of the text.
|
||||||
void SetDisplayType (Aspect_TypeOfDisplayText theDisplayType) { myTextDisplayType = theDisplayType; }
|
//!
|
||||||
|
//! TODT_NORMAL Default display. Text only.
|
||||||
|
//! TODT_SUBTITLE There is a subtitle under the text.
|
||||||
|
//! TODT_DEKALE The text is displayed with a 3D style.
|
||||||
|
//! TODT_BLEND The text is displayed in XOR.
|
||||||
|
//! TODT_DIMENSION Dimension line under text will be invisible.
|
||||||
|
void SetDisplayType (const Aspect_TypeOfDisplayText theDisplayType) { myDisplayType = theDisplayType; }
|
||||||
|
|
||||||
|
//! Return subtitle color.
|
||||||
|
const Quantity_ColorRGBA& ColorSubTitleRGBA() const { return myColorSubTitle; }
|
||||||
|
|
||||||
|
//! Return subtitle color.
|
||||||
|
const Quantity_Color& ColorSubTitle() const { return myColorSubTitle.GetRGB(); }
|
||||||
|
|
||||||
|
//! Modifies the color of the subtitle for the TODT_SUBTITLE TextDisplayType
|
||||||
|
//! and the color of background for the TODT_DEKALE TextDisplayType.
|
||||||
|
void SetColorSubTitle (const Quantity_Color& theColor) { myColorSubTitle.SetRGB (theColor); }
|
||||||
|
|
||||||
|
//! Modifies the color of the subtitle for the TODT_SUBTITLE TextDisplayType
|
||||||
|
//! and the color of background for the TODT_DEKALE TextDisplayType.
|
||||||
|
void SetColorSubTitle (const Quantity_ColorRGBA& theColor) { myColorSubTitle = theColor; }
|
||||||
|
|
||||||
//! Returns TRUE when the Text Zoomable is on.
|
//! Returns TRUE when the Text Zoomable is on.
|
||||||
bool GetTextZoomable() const { return myIsTextZoomable; }
|
bool GetTextZoomable() const { return myTextZoomable; }
|
||||||
|
|
||||||
|
//! Turns usage of text zoomable on/off
|
||||||
|
void SetTextZoomable (const bool theFlag) { myTextZoomable = theFlag; }
|
||||||
|
|
||||||
//! Returns Angle of degree
|
//! Returns Angle of degree
|
||||||
Standard_ShortReal GetTextAngle() const { return myTextAngle; }
|
Standard_Real GetTextAngle() const { return myTextAngle; }
|
||||||
|
|
||||||
//! Turns usage of text rotated
|
//! Turns usage of text rotated
|
||||||
void SetTextAngle (const Standard_Real theAngle) { myTextAngle = (Standard_ShortReal )theAngle; }
|
void SetTextAngle (const Standard_Real theAngle) { myTextAngle = theAngle; }
|
||||||
|
|
||||||
//! Returns text FontAspect
|
//! Returns text FontAspect
|
||||||
Font_FontAspect GetTextFontAspect() const { return myTextFontAspect; }
|
Font_FontAspect GetTextFontAspect() const { return myTextFontAspect; }
|
||||||
|
|
||||||
|
//! Turns usage of Aspect text
|
||||||
|
void SetTextFontAspect (const Font_FontAspect theFontAspect) { myTextFontAspect = theFontAspect; }
|
||||||
|
|
||||||
|
//! Return the shader program.
|
||||||
|
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
||||||
|
|
||||||
|
//! Sets up OpenGL/GLSL shader program.
|
||||||
|
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Standard_CString& theFont,
|
||||||
|
Standard_Real& theExpansionFactor,
|
||||||
|
Standard_Real& theSpace) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theFont = myFont.ToCString();
|
||||||
|
theExpansionFactor = myFactor;
|
||||||
|
theSpace = mySpace;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Standard_CString& theFont,
|
||||||
|
Standard_Real& theExpansionFactor,
|
||||||
|
Standard_Real& theSpace,
|
||||||
|
Aspect_TypeOfStyleText& theStyle,
|
||||||
|
Aspect_TypeOfDisplayText& theDisplayType,
|
||||||
|
Quantity_Color& theColorSubTitle) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theFont = myFont.ToCString();
|
||||||
|
theExpansionFactor= myFactor;
|
||||||
|
theSpace = mySpace;
|
||||||
|
theStyle = myStyle;
|
||||||
|
theDisplayType = myDisplayType;
|
||||||
|
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Standard_CString& theFont,
|
||||||
|
Standard_Real& theExpansionFactor,
|
||||||
|
Standard_Real& theSpace,
|
||||||
|
Aspect_TypeOfStyleText& theStyle,
|
||||||
|
Aspect_TypeOfDisplayText& theDisplayType,
|
||||||
|
Quantity_Color& theColorSubTitle,
|
||||||
|
Standard_Boolean& theTextZoomable,
|
||||||
|
Standard_Real& theTextAngle) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theFont = myFont.ToCString();
|
||||||
|
theExpansionFactor= myFactor;
|
||||||
|
theSpace = mySpace;
|
||||||
|
theStyle = myStyle;
|
||||||
|
theDisplayType = myDisplayType;
|
||||||
|
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||||
|
|
||||||
|
theTextZoomable = myTextZoomable;
|
||||||
|
theTextAngle = myTextAngle;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns the current values of the group.
|
||||||
|
Standard_DEPRECATED("Deprecated method Values() should be replaced by individual property getters")
|
||||||
|
void Values (Quantity_Color& theColor,
|
||||||
|
Standard_CString& theFont,
|
||||||
|
Standard_Real& theExpansionFactor,
|
||||||
|
Standard_Real& theSpace,
|
||||||
|
Aspect_TypeOfStyleText& theStyle,
|
||||||
|
Aspect_TypeOfDisplayText& theDisplayType,
|
||||||
|
Quantity_Color& theColorSubTitle,
|
||||||
|
Standard_Boolean& theTextZoomable,
|
||||||
|
Standard_Real& theTextAngle,
|
||||||
|
Font_FontAspect& theTextFontAspect) const
|
||||||
|
{
|
||||||
|
theColor = myColor.GetRGB();
|
||||||
|
theFont = myFont.ToCString();
|
||||||
|
theExpansionFactor= myFactor;
|
||||||
|
theSpace = mySpace;
|
||||||
|
theStyle = myStyle;
|
||||||
|
theDisplayType = myDisplayType;
|
||||||
|
theColorSubTitle = myColorSubTitle.GetRGB();
|
||||||
|
|
||||||
|
theTextZoomable = myTextZoomable;
|
||||||
|
theTextAngle = myTextAngle;
|
||||||
|
theTextFontAspect = myTextFontAspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
TCollection_AsciiString myFont;
|
||||||
|
Quantity_ColorRGBA myColor;
|
||||||
|
Standard_Real myFactor;
|
||||||
|
Standard_Real mySpace;
|
||||||
|
Aspect_TypeOfStyleText myStyle;
|
||||||
|
Aspect_TypeOfDisplayText myDisplayType;
|
||||||
|
Quantity_ColorRGBA myColorSubTitle;
|
||||||
|
bool myTextZoomable;
|
||||||
|
Standard_Real myTextAngle;
|
||||||
|
Font_FontAspect myTextFontAspect;
|
||||||
|
Handle(Graphic3d_ShaderProgram) myProgram;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STANDARD_HANDLE(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
DEFINE_STANDARD_HANDLE(Graphic3d_AspectText3d, Standard_Transient)
|
||||||
|
|
||||||
#endif // _Graphic3d_AspectText3d_HeaderFile
|
#endif // _Graphic3d_AspectText3d_HeaderFile
|
||||||
|
37
src/Graphic3d/Graphic3d_AspectTextDefinitionError.hxx
Normal file
37
src/Graphic3d/Graphic3d_AspectTextDefinitionError.hxx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// Created on: 1993-03-31
|
||||||
|
// Created by: NW,JPB,CAL
|
||||||
|
// Copyright (c) 1993-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 _Graphic3d_AspectTextDefinitionError_HeaderFile
|
||||||
|
#define _Graphic3d_AspectTextDefinitionError_HeaderFile
|
||||||
|
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
#include <Standard_DefineException.hxx>
|
||||||
|
#include <Standard_SStream.hxx>
|
||||||
|
#include <Standard_OutOfRange.hxx>
|
||||||
|
|
||||||
|
class Graphic3d_AspectTextDefinitionError;
|
||||||
|
DEFINE_STANDARD_HANDLE(Graphic3d_AspectTextDefinitionError, Standard_OutOfRange)
|
||||||
|
|
||||||
|
#if !defined No_Exception && !defined No_Graphic3d_AspectTextDefinitionError
|
||||||
|
#define Graphic3d_AspectTextDefinitionError_Raise_if(CONDITION, MESSAGE) \
|
||||||
|
if (CONDITION) throw Graphic3d_AspectTextDefinitionError(MESSAGE);
|
||||||
|
#else
|
||||||
|
#define Graphic3d_AspectTextDefinitionError_Raise_if(CONDITION, MESSAGE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DEFINE_STANDARD_EXCEPTION(Graphic3d_AspectTextDefinitionError, Standard_OutOfRange)
|
||||||
|
|
||||||
|
#endif // _Graphic3d_AspectTextDefinitionError_HeaderFile
|
@@ -1,62 +0,0 @@
|
|||||||
// 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.
|
|
||||||
|
|
||||||
#include <Graphic3d_Aspects.hxx>
|
|
||||||
|
|
||||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
|
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : Graphic3d_Aspects
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
Graphic3d_Aspects::Graphic3d_Aspects()
|
|
||||||
: myInteriorColor (Quantity_NOC_CYAN1),
|
|
||||||
myBackInteriorColor (Quantity_NOC_CYAN1),
|
|
||||||
myEdgeColor (Quantity_NOC_WHITE),
|
|
||||||
myInteriorStyle (Aspect_IS_SOLID),
|
|
||||||
myShadingModel (Graphic3d_TOSM_DEFAULT),
|
|
||||||
myAlphaMode (Graphic3d_AlphaMode_BlendAuto),
|
|
||||||
myAlphaCutoff (0.5f),
|
|
||||||
myLineType (Aspect_TOL_SOLID),
|
|
||||||
myLineWidth (1.0f),
|
|
||||||
myMarkerType (Aspect_TOM_POINT),
|
|
||||||
myMarkerScale (1.0f),
|
|
||||||
myTextStyle (Aspect_TOST_NORMAL),
|
|
||||||
myTextDisplayType (Aspect_TODT_NORMAL),
|
|
||||||
myTextFontAspect (Font_FontAspect_Regular),
|
|
||||||
myTextAngle (0.0f),
|
|
||||||
myToSkipFirstEdge (false),
|
|
||||||
myToDistinguishMaterials (false),
|
|
||||||
myToDrawEdges (false),
|
|
||||||
myToDrawSilhouette (false),
|
|
||||||
myToSuppressBackFaces (true),
|
|
||||||
myToMapTexture (false),
|
|
||||||
myIsTextZoomable (false)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : SetTextureMap
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
void Graphic3d_Aspects::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture)
|
|
||||||
{
|
|
||||||
if (theTexture.IsNull())
|
|
||||||
{
|
|
||||||
myTextureSet.Nullify();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
myTextureSet = new Graphic3d_TextureSet (theTexture);
|
|
||||||
}
|
|
@@ -1,510 +0,0 @@
|
|||||||
// 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 _Graphic3d_Aspects_HeaderFile
|
|
||||||
#define _Graphic3d_Aspects_HeaderFile
|
|
||||||
|
|
||||||
#include <Aspect_PolygonOffsetMode.hxx>
|
|
||||||
#include <Aspect_InteriorStyle.hxx>
|
|
||||||
#include <Aspect_TypeOfDisplayText.hxx>
|
|
||||||
#include <Aspect_TypeOfLine.hxx>
|
|
||||||
#include <Aspect_TypeOfMarker.hxx>
|
|
||||||
#include <Aspect_TypeOfStyleText.hxx>
|
|
||||||
#include <Font_FontAspect.hxx>
|
|
||||||
#include <Font_NameOfFont.hxx>
|
|
||||||
#include <Graphic3d_AlphaMode.hxx>
|
|
||||||
#include <Graphic3d_MarkerImage.hxx>
|
|
||||||
#include <Graphic3d_HatchStyle.hxx>
|
|
||||||
#include <Graphic3d_MaterialAspect.hxx>
|
|
||||||
#include <Graphic3d_PolygonOffset.hxx>
|
|
||||||
#include <Graphic3d_ShaderProgram.hxx>
|
|
||||||
#include <Graphic3d_TextureMap.hxx>
|
|
||||||
#include <Graphic3d_TextureSet.hxx>
|
|
||||||
#include <Graphic3d_TypeOfShadingModel.hxx>
|
|
||||||
#include <TCollection_HAsciiString.hxx>
|
|
||||||
|
|
||||||
//! This class defines graphic attributes.
|
|
||||||
class Graphic3d_Aspects : public Standard_Transient
|
|
||||||
{
|
|
||||||
DEFINE_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Creates a context table for drawing primitives defined with the following default values:
|
|
||||||
Standard_EXPORT Graphic3d_Aspects();
|
|
||||||
|
|
||||||
//! Return interior rendering style; Aspect_IS_SOLID by default.
|
|
||||||
Aspect_InteriorStyle InteriorStyle() const { return myInteriorStyle; }
|
|
||||||
|
|
||||||
//! Modifies the interior type used for rendering
|
|
||||||
void SetInteriorStyle (const Aspect_InteriorStyle theStyle) { myInteriorStyle = theStyle; }
|
|
||||||
|
|
||||||
//! Returns shading model; Graphic3d_TOSM_DEFAULT by default.
|
|
||||||
//! Graphic3d_TOSM_DEFAULT means that Shading Model set as default for entire Viewer will be used.
|
|
||||||
Graphic3d_TypeOfShadingModel ShadingModel() const { return myShadingModel; }
|
|
||||||
|
|
||||||
//! Sets shading model
|
|
||||||
void SetShadingModel (const Graphic3d_TypeOfShadingModel theShadingModel) { myShadingModel = theShadingModel; }
|
|
||||||
|
|
||||||
//! Returns the way how alpha value should be treated (Graphic3d_AlphaMode_BlendAuto by default, for backward compatibility).
|
|
||||||
Graphic3d_AlphaMode AlphaMode() const { return myAlphaMode; }
|
|
||||||
|
|
||||||
//! Returns alpha cutoff threshold, for discarding fragments within Graphic3d_AlphaMode_Mask mode (0.5 by default).
|
|
||||||
//! If the alpha value is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent.
|
|
||||||
Standard_ShortReal AlphaCutoff() const { return myAlphaCutoff; }
|
|
||||||
|
|
||||||
//! Defines the way how alpha value should be treated.
|
|
||||||
void SetAlphaMode (Graphic3d_AlphaMode theMode, Standard_ShortReal theAlphaCutoff = 0.5f)
|
|
||||||
{
|
|
||||||
myAlphaMode = theMode;
|
|
||||||
myAlphaCutoff = theAlphaCutoff;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Return color
|
|
||||||
const Quantity_ColorRGBA& ColorRGBA() const { return myInteriorColor; }
|
|
||||||
|
|
||||||
//! Return the color.
|
|
||||||
const Quantity_Color& Color() const { return myInteriorColor.GetRGB(); }
|
|
||||||
|
|
||||||
//! Modifies the color.
|
|
||||||
void SetColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB(theColor); }
|
|
||||||
|
|
||||||
//! Return interior color.
|
|
||||||
const Quantity_Color& InteriorColor() const { return myInteriorColor.GetRGB(); }
|
|
||||||
|
|
||||||
//! Return interior color.
|
|
||||||
const Quantity_ColorRGBA& InteriorColorRGBA() const { return myInteriorColor; }
|
|
||||||
|
|
||||||
//! Modifies the color of the interior of the face
|
|
||||||
void SetInteriorColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
|
||||||
|
|
||||||
//! Modifies the color of the interior of the face
|
|
||||||
void SetInteriorColor (const Quantity_ColorRGBA& theColor) { myInteriorColor = theColor; }
|
|
||||||
|
|
||||||
//! Return back interior color.
|
|
||||||
const Quantity_Color& BackInteriorColor() const { return myBackInteriorColor.GetRGB(); }
|
|
||||||
|
|
||||||
//! Return back interior color.
|
|
||||||
const Quantity_ColorRGBA& BackInteriorColorRGBA() const { return myBackInteriorColor; }
|
|
||||||
|
|
||||||
//! Modifies the color of the interior of the back face
|
|
||||||
void SetBackInteriorColor (const Quantity_Color& theColor) { myBackInteriorColor.SetRGB (theColor); }
|
|
||||||
|
|
||||||
//! Modifies the color of the interior of the back face
|
|
||||||
void SetBackInteriorColor (const Quantity_ColorRGBA& theColor) { myBackInteriorColor = theColor; }
|
|
||||||
|
|
||||||
//! Returns the surface material of external faces
|
|
||||||
const Graphic3d_MaterialAspect& FrontMaterial() const { return myFrontMaterial; }
|
|
||||||
|
|
||||||
//! Returns the surface material of external faces
|
|
||||||
Graphic3d_MaterialAspect& ChangeFrontMaterial() { return myFrontMaterial; }
|
|
||||||
|
|
||||||
//! Modifies the surface material of external faces
|
|
||||||
void SetFrontMaterial (const Graphic3d_MaterialAspect& theMaterial) { myFrontMaterial = theMaterial; }
|
|
||||||
|
|
||||||
//! Returns the surface material of internal faces
|
|
||||||
const Graphic3d_MaterialAspect& BackMaterial() const { return myBackMaterial; }
|
|
||||||
|
|
||||||
//! Returns the surface material of internal faces
|
|
||||||
Graphic3d_MaterialAspect& ChangeBackMaterial() { return myBackMaterial; }
|
|
||||||
|
|
||||||
//! Modifies the surface material of internal faces
|
|
||||||
void SetBackMaterial (const Graphic3d_MaterialAspect& theMaterial) { myBackMaterial = theMaterial; }
|
|
||||||
|
|
||||||
//! Returns true if back faces should be suppressed (true by default).
|
|
||||||
bool ToSuppressBackFaces() const { return myToSuppressBackFaces; }
|
|
||||||
|
|
||||||
//! Assign back faces culling flag.
|
|
||||||
void SetSuppressBackFaces (bool theToSuppress) { myToSuppressBackFaces = theToSuppress; }
|
|
||||||
|
|
||||||
//! Returns true if back faces should be suppressed (true by default).
|
|
||||||
bool BackFace() const { return myToSuppressBackFaces; }
|
|
||||||
|
|
||||||
//! Allows the display of back-facing filled polygons.
|
|
||||||
void AllowBackFace() { myToSuppressBackFaces = false; }
|
|
||||||
|
|
||||||
//! Suppress the display of back-facing filled polygons.
|
|
||||||
//! A back-facing polygon is defined as a polygon whose
|
|
||||||
//! vertices are in a clockwise order with respect to screen coordinates.
|
|
||||||
void SuppressBackFace() { myToSuppressBackFaces = true; }
|
|
||||||
|
|
||||||
//! Returns true if material properties should be distinguished for back and front faces (false by default).
|
|
||||||
bool Distinguish() const { return myToDistinguishMaterials; }
|
|
||||||
|
|
||||||
//! Set material distinction between front and back faces.
|
|
||||||
void SetDistinguish (bool toDistinguish) { myToDistinguishMaterials = toDistinguish; }
|
|
||||||
|
|
||||||
//! Allows material distinction between front and back faces.
|
|
||||||
void SetDistinguishOn() { myToDistinguishMaterials = true; }
|
|
||||||
|
|
||||||
//! Forbids material distinction between front and back faces.
|
|
||||||
void SetDistinguishOff() { myToDistinguishMaterials = false; }
|
|
||||||
|
|
||||||
//! Return shader program.
|
|
||||||
const Handle(Graphic3d_ShaderProgram)& ShaderProgram() const { return myProgram; }
|
|
||||||
|
|
||||||
//! Sets up OpenGL/GLSL shader program.
|
|
||||||
void SetShaderProgram (const Handle(Graphic3d_ShaderProgram)& theProgram) { myProgram = theProgram; }
|
|
||||||
|
|
||||||
//! Return texture array to be mapped.
|
|
||||||
const Handle(Graphic3d_TextureSet)& TextureSet() const { return myTextureSet; }
|
|
||||||
|
|
||||||
//! Setup texture array to be mapped.
|
|
||||||
void SetTextureSet (const Handle(Graphic3d_TextureSet)& theTextures) { myTextureSet = theTextures; }
|
|
||||||
|
|
||||||
//! Return texture to be mapped.
|
|
||||||
//Standard_DEPRECATED("Deprecated method, TextureSet() should be used instead")
|
|
||||||
Handle(Graphic3d_TextureMap) TextureMap() const
|
|
||||||
{
|
|
||||||
return !myTextureSet.IsNull() && !myTextureSet->IsEmpty()
|
|
||||||
? myTextureSet->First()
|
|
||||||
: Handle(Graphic3d_TextureMap)();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Assign texture to be mapped.
|
|
||||||
//! See also SetTextureMapOn() to actually activate texture mapping.
|
|
||||||
//Standard_DEPRECATED("Deprecated method, SetTextureSet() should be used instead")
|
|
||||||
Standard_EXPORT void SetTextureMap (const Handle(Graphic3d_TextureMap)& theTexture);
|
|
||||||
|
|
||||||
//! Return true if texture mapping is enabled (false by default).
|
|
||||||
bool ToMapTexture() const { return myToMapTexture; }
|
|
||||||
|
|
||||||
//! Return true if texture mapping is enabled (false by default).
|
|
||||||
bool TextureMapState() const { return myToMapTexture; }
|
|
||||||
|
|
||||||
//! Enable or disable texture mapping (has no effect if texture is not set).
|
|
||||||
void SetTextureMapOn (bool theToMap) { myToMapTexture = theToMap; }
|
|
||||||
|
|
||||||
//! Enable texture mapping (has no effect if texture is not set).
|
|
||||||
void SetTextureMapOn() { myToMapTexture = true; }
|
|
||||||
|
|
||||||
//! Disable texture mapping.
|
|
||||||
void SetTextureMapOff() { myToMapTexture = false; }
|
|
||||||
|
|
||||||
//! Returns current polygon offsets settings.
|
|
||||||
const Graphic3d_PolygonOffset& PolygonOffset() const { return myPolygonOffset; }
|
|
||||||
|
|
||||||
//! Sets polygon offsets settings.
|
|
||||||
void SetPolygonOffset (const Graphic3d_PolygonOffset& theOffset) { myPolygonOffset = theOffset; }
|
|
||||||
|
|
||||||
//! Returns current polygon offsets settings.
|
|
||||||
void PolygonOffsets (Standard_Integer& theMode,
|
|
||||||
Standard_ShortReal& theFactor,
|
|
||||||
Standard_ShortReal& theUnits) const
|
|
||||||
{
|
|
||||||
theMode = myPolygonOffset.Mode;
|
|
||||||
theFactor = myPolygonOffset.Factor;
|
|
||||||
theUnits = myPolygonOffset.Units;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Sets up OpenGL polygon offsets mechanism.
|
|
||||||
//! <aMode> parameter can contain various combinations of
|
|
||||||
//! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
|
|
||||||
//! that polygon offsets are not changed).
|
|
||||||
//! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
|
|
||||||
//! arguments are used by graphic renderer to calculate a depth offset value:
|
|
||||||
//!
|
|
||||||
//! offset = <aFactor> * m + <aUnits> * r, where
|
|
||||||
//! m - maximum depth slope for the polygon currently being displayed,
|
|
||||||
//! r - minimum window coordinates depth resolution (implementation-specific)
|
|
||||||
//!
|
|
||||||
//! Default settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
|
|
||||||
//!
|
|
||||||
//! Negative offset values move polygons closer to the viewport,
|
|
||||||
//! while positive values shift polygons away.
|
|
||||||
//! Consult OpenGL reference for details (glPolygonOffset function description).
|
|
||||||
void SetPolygonOffsets (const Standard_Integer theMode,
|
|
||||||
const Standard_ShortReal theFactor = 1.0f,
|
|
||||||
const Standard_ShortReal theUnits = 0.0f)
|
|
||||||
{
|
|
||||||
myPolygonOffset.Mode = (Aspect_PolygonOffsetMode )(theMode & Aspect_POM_Mask);
|
|
||||||
myPolygonOffset.Factor = theFactor;
|
|
||||||
myPolygonOffset.Units = theUnits;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! @name parameters specific to Line primitive rendering
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Return line type; Aspect_TOL_SOLID by default.
|
|
||||||
Aspect_TypeOfLine LineType() const { return myLineType; }
|
|
||||||
|
|
||||||
//! Modifies the line type
|
|
||||||
void SetLineType (Aspect_TypeOfLine theType) { myLineType = theType; }
|
|
||||||
|
|
||||||
//! Return width for edges in pixels; 1.0 by default.
|
|
||||||
Standard_ShortReal LineWidth() const { return myLineWidth; }
|
|
||||||
|
|
||||||
//! Modifies the line thickness
|
|
||||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
|
||||||
void SetLineWidth (Standard_ShortReal theWidth)
|
|
||||||
{
|
|
||||||
if (theWidth <= 0.0f)
|
|
||||||
{
|
|
||||||
throw Standard_OutOfRange ("Bad value for EdgeLineWidth");
|
|
||||||
}
|
|
||||||
myLineWidth = theWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! @name parameters specific to Point (Marker) primitive rendering
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Return marker type; Aspect_TOM_POINT by default.
|
|
||||||
Aspect_TypeOfMarker MarkerType() const { return myMarkerType; }
|
|
||||||
|
|
||||||
//! Modifies the type of marker.
|
|
||||||
void SetMarkerType (Aspect_TypeOfMarker theType) { myMarkerType = theType; }
|
|
||||||
|
|
||||||
//! Return marker scale factor; 1.0 by default.
|
|
||||||
Standard_ShortReal MarkerScale() const { return myMarkerScale; }
|
|
||||||
|
|
||||||
//! Modifies the scale factor.
|
|
||||||
//! Marker type Aspect_TOM_POINT is not affected by the marker size scale factor.
|
|
||||||
//! It is always the smallest displayable dot.
|
|
||||||
//! Warning: Raises Standard_OutOfRange if the scale is a negative value.
|
|
||||||
void SetMarkerScale (const Standard_ShortReal theScale)
|
|
||||||
{
|
|
||||||
if (theScale <= 0.0f)
|
|
||||||
{
|
|
||||||
throw Standard_OutOfRange ("Bad value for MarkerScale");
|
|
||||||
}
|
|
||||||
myMarkerScale = theScale;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Returns marker's image texture.
|
|
||||||
//! Could be null handle if marker aspect has been initialized as default type of marker.
|
|
||||||
const Handle(Graphic3d_MarkerImage)& MarkerImage() const { return myMarkerImage; }
|
|
||||||
|
|
||||||
//! Set marker's image texture.
|
|
||||||
void SetMarkerImage (const Handle(Graphic3d_MarkerImage)& theImage) { myMarkerImage = theImage; }
|
|
||||||
|
|
||||||
//! @name parameters specific to text rendering
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Returns the font; NULL string by default.
|
|
||||||
const Handle(TCollection_HAsciiString)& TextFont() const { return myTextFont; }
|
|
||||||
|
|
||||||
//! Modifies the font.
|
|
||||||
void SetTextFont (const Handle(TCollection_HAsciiString)& theFont) { myTextFont = theFont; }
|
|
||||||
|
|
||||||
//! Returns text FontAspect
|
|
||||||
Font_FontAspect TextFontAspect() const { return myTextFontAspect; }
|
|
||||||
|
|
||||||
//! Turns usage of Aspect text
|
|
||||||
void SetTextFontAspect (Font_FontAspect theFontAspect) { myTextFontAspect = theFontAspect; }
|
|
||||||
|
|
||||||
//! Returns display type; Aspect_TODT_NORMAL by default.
|
|
||||||
Aspect_TypeOfDisplayText TextDisplayType() const { return myTextDisplayType; }
|
|
||||||
|
|
||||||
//! Sets display type.
|
|
||||||
void SetTextDisplayType (Aspect_TypeOfDisplayText theType) { myTextDisplayType = theType; }
|
|
||||||
|
|
||||||
//! Returns text background/shadow color; equals to EdgeColor() property.
|
|
||||||
const Quantity_ColorRGBA& ColorSubTitleRGBA() const { return myEdgeColor; }
|
|
||||||
|
|
||||||
//! Return text background/shadow color; equals to EdgeColor() property.
|
|
||||||
const Quantity_Color& ColorSubTitle() const { return myEdgeColor.GetRGB(); }
|
|
||||||
|
|
||||||
//! Modifies text background/shadow color; equals to EdgeColor() property.
|
|
||||||
void SetColorSubTitle (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
|
||||||
|
|
||||||
//! Modifies text background/shadow color; equals to EdgeColor() property.
|
|
||||||
void SetColorSubTitle (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
|
|
||||||
|
|
||||||
//! Returns TRUE when the Text Zoomable is on.
|
|
||||||
bool IsTextZoomable() const { return myIsTextZoomable; }
|
|
||||||
|
|
||||||
//! Turns usage of text zoomable on/off
|
|
||||||
void SetTextZoomable (bool theFlag) { myIsTextZoomable = theFlag; }
|
|
||||||
|
|
||||||
//! Returns the text style; Aspect_TOST_NORMAL by default.
|
|
||||||
Aspect_TypeOfStyleText TextStyle() const { return myTextStyle; }
|
|
||||||
|
|
||||||
//! Modifies the style of the text.
|
|
||||||
void SetTextStyle (Aspect_TypeOfStyleText theStyle) { myTextStyle = theStyle; }
|
|
||||||
|
|
||||||
//! Returns Angle of degree
|
|
||||||
Standard_ShortReal TextAngle() const { return myTextAngle; }
|
|
||||||
|
|
||||||
//! Turns usage of text rotated
|
|
||||||
void SetTextAngle (Standard_ShortReal theAngle) { myTextAngle = (Standard_ShortReal )theAngle; }
|
|
||||||
|
|
||||||
//! @name parameters specific to Mesh Edges (of triangulation primitive) rendering
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Returns true if mesh edges should be drawn (false by default).
|
|
||||||
bool ToDrawEdges() const { return myToDrawEdges && myLineType != Aspect_TOL_EMPTY; }
|
|
||||||
|
|
||||||
//! Set if mesh edges should be drawn or not.
|
|
||||||
void SetDrawEdges (bool theToDraw)
|
|
||||||
{
|
|
||||||
myToDrawEdges = theToDraw;
|
|
||||||
if (myLineType == Aspect_TOL_EMPTY)
|
|
||||||
{
|
|
||||||
myLineType = Aspect_TOL_SOLID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! The edges of FillAreas are drawn.
|
|
||||||
void SetEdgeOn() { SetDrawEdges (true); }
|
|
||||||
|
|
||||||
//! The edges of FillAreas are not drawn.
|
|
||||||
void SetEdgeOff() { SetDrawEdges (false); }
|
|
||||||
|
|
||||||
//! Return color of edges.
|
|
||||||
const Quantity_Color& EdgeColor() const { return myEdgeColor.GetRGB(); }
|
|
||||||
|
|
||||||
//! Return color of edges.
|
|
||||||
const Quantity_ColorRGBA& EdgeColorRGBA() const { return myEdgeColor; }
|
|
||||||
|
|
||||||
//! Modifies the color of the edge of the face
|
|
||||||
void SetEdgeColor (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
|
|
||||||
|
|
||||||
//! Modifies the color of the edge of the face
|
|
||||||
void SetEdgeColor (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
|
|
||||||
|
|
||||||
//! Return edges line type (same as LineType()).
|
|
||||||
Aspect_TypeOfLine EdgeLineType() const { return myLineType; }
|
|
||||||
|
|
||||||
//! Modifies the edge line type (same as SetLineType())
|
|
||||||
void SetEdgeLineType (Aspect_TypeOfLine theType) { myLineType = theType; }
|
|
||||||
|
|
||||||
//! Return width for edges in pixels (same as LineWidth()).
|
|
||||||
Standard_ShortReal EdgeWidth() const { return myLineWidth; }
|
|
||||||
|
|
||||||
//! Modifies the edge thickness (same as SetLineWidth())
|
|
||||||
void SetEdgeWidth (Standard_Real theWidth) { SetLineWidth ((Standard_ShortReal )theWidth); }
|
|
||||||
|
|
||||||
//! Returns TRUE if drawing element edges should discard first edge in triangle; FALSE by default.
|
|
||||||
//! Graphics hardware works mostly with triangles, so that wireframe presentation will draw triangle edges by default.
|
|
||||||
//! This flag allows rendering wireframe presentation of quad-only array split into triangles.
|
|
||||||
//! For this, quads should be split in specific order, so that the quad diagonal (to be NOT rendered) goes first:
|
|
||||||
//! 1------2
|
|
||||||
//! / / Triangle #1: 2-0-1; Triangle #2: 0-2-3
|
|
||||||
//! 0------3
|
|
||||||
bool ToSkipFirstEdge() const { return myToSkipFirstEdge; }
|
|
||||||
|
|
||||||
//! Set skip first triangle edge flag for drawing wireframe presentation of quads array split into triangles.
|
|
||||||
void SetSkipFirstEdge (bool theToSkipFirstEdge) { myToSkipFirstEdge = theToSkipFirstEdge; }
|
|
||||||
|
|
||||||
//! Returns TRUE if silhouette (outline) should be drawn (with edge color and width); FALSE by default.
|
|
||||||
bool ToDrawSilhouette() const { return myToDrawSilhouette; }
|
|
||||||
|
|
||||||
//! Enables/disables drawing silhouette (outline).
|
|
||||||
void SetDrawSilhouette (bool theToDraw) { myToDrawSilhouette = theToDraw; }
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Returns the hatch type used when InteriorStyle is IS_HATCH
|
|
||||||
const Handle(Graphic3d_HatchStyle)& HatchStyle() const { return myHatchStyle; }
|
|
||||||
|
|
||||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
|
||||||
void SetHatchStyle (const Handle(Graphic3d_HatchStyle)& theStyle) { myHatchStyle = theStyle; }
|
|
||||||
|
|
||||||
//! Modifies the hatch type used when InteriorStyle is IS_HATCH
|
|
||||||
//! @warning This method always creates a new handle for a given hatch style
|
|
||||||
void SetHatchStyle (const Aspect_HatchStyle theStyle)
|
|
||||||
{
|
|
||||||
if (theStyle == Aspect_HS_SOLID)
|
|
||||||
{
|
|
||||||
myHatchStyle.Nullify();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
myHatchStyle = new Graphic3d_HatchStyle (theStyle);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Check for equality with another aspects.
|
|
||||||
bool IsEqual (const Graphic3d_Aspects& theOther)
|
|
||||||
{
|
|
||||||
if (this == &theOther)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return myProgram == theOther.myProgram
|
|
||||||
&& myTextureSet == theOther.myTextureSet
|
|
||||||
&& myMarkerImage == theOther.myMarkerImage
|
|
||||||
&& myInteriorColor == theOther.myInteriorColor
|
|
||||||
&& myBackInteriorColor == theOther.myBackInteriorColor
|
|
||||||
&& myFrontMaterial == theOther.myFrontMaterial
|
|
||||||
&& myBackMaterial == theOther.myBackMaterial
|
|
||||||
&& myInteriorStyle == theOther.myInteriorStyle
|
|
||||||
&& myShadingModel == theOther.myShadingModel
|
|
||||||
&& myAlphaMode == theOther.myAlphaMode
|
|
||||||
&& myAlphaCutoff == theOther.myAlphaCutoff
|
|
||||||
&& myLineType == theOther.myLineType
|
|
||||||
&& myEdgeColor == theOther.myEdgeColor
|
|
||||||
&& myLineWidth == theOther.myLineWidth
|
|
||||||
&& myMarkerType == theOther.myMarkerType
|
|
||||||
&& myMarkerScale == theOther.myMarkerScale
|
|
||||||
&& myHatchStyle == theOther.myHatchStyle
|
|
||||||
&& myTextFont == theOther.myTextFont
|
|
||||||
&& myPolygonOffset == theOther.myPolygonOffset
|
|
||||||
&& myTextStyle == theOther.myTextStyle
|
|
||||||
&& myTextDisplayType == theOther.myTextDisplayType
|
|
||||||
&& myTextFontAspect == theOther.myTextFontAspect
|
|
||||||
&& myTextAngle == theOther.myTextAngle
|
|
||||||
&& myToSkipFirstEdge == theOther.myToSkipFirstEdge
|
|
||||||
&& myToDistinguishMaterials == theOther.myToDistinguishMaterials
|
|
||||||
&& myToDrawEdges == theOther.myToDrawEdges
|
|
||||||
&& myToDrawSilhouette == theOther.myToDrawSilhouette
|
|
||||||
&& myToSuppressBackFaces == theOther.myToSuppressBackFaces
|
|
||||||
&& myToMapTexture == theOther.myToMapTexture
|
|
||||||
&& myIsTextZoomable == theOther.myIsTextZoomable;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
Quantity_ColorRGBA myInteriorColor;
|
|
||||||
Quantity_ColorRGBA myBackInteriorColor;
|
|
||||||
Quantity_ColorRGBA myEdgeColor;
|
|
||||||
|
|
||||||
Graphic3d_PolygonOffset myPolygonOffset;
|
|
||||||
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;
|
|
||||||
|
|
||||||
bool myToSkipFirstEdge;
|
|
||||||
bool myToDistinguishMaterials;
|
|
||||||
bool myToDrawEdges;
|
|
||||||
bool myToDrawSilhouette;
|
|
||||||
bool myToSuppressBackFaces;
|
|
||||||
bool myToMapTexture;
|
|
||||||
bool myIsTextZoomable;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
DEFINE_STANDARD_HANDLE(Graphic3d_Aspects, Standard_Transient)
|
|
||||||
|
|
||||||
#endif // _Graphic3d_Aspects_HeaderFile
|
|
@@ -211,6 +211,68 @@ void Graphic3d_Group::Update() const
|
|||||||
myStructure->StructureManager()->Update();
|
myStructure->StructureManager()->Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : IsGroupPrimitivesAspectSet
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
Standard_Boolean Graphic3d_Group::IsGroupPrimitivesAspectSet (const Graphic3d_GroupAspect theAspect) const
|
||||||
|
{
|
||||||
|
switch (theAspect)
|
||||||
|
{
|
||||||
|
case Graphic3d_ASPECT_LINE: return !LineAspect().IsNull();
|
||||||
|
case Graphic3d_ASPECT_TEXT: return !TextAspect().IsNull();
|
||||||
|
case Graphic3d_ASPECT_MARKER: return !MarkerAspect().IsNull();
|
||||||
|
case Graphic3d_ASPECT_FILL_AREA: return !FillAreaAspect().IsNull();
|
||||||
|
default: return Standard_False;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : GroupPrimitivesAspect
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspLine,
|
||||||
|
const Handle(Graphic3d_AspectText3d)& theAspText,
|
||||||
|
const Handle(Graphic3d_AspectMarker3d)& theAspMarker,
|
||||||
|
const Handle(Graphic3d_AspectFillArea3d)& theAspFill) const
|
||||||
|
{
|
||||||
|
if (!theAspLine.IsNull())
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_AspectLine3d) aLineAspect = LineAspect();
|
||||||
|
if (!aLineAspect.IsNull())
|
||||||
|
{
|
||||||
|
*theAspLine.operator->() = *aLineAspect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!theAspText.IsNull())
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_AspectText3d) aTextAspect = TextAspect();
|
||||||
|
if (!aTextAspect.IsNull())
|
||||||
|
{
|
||||||
|
*theAspText.operator->() = *aTextAspect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!theAspMarker.IsNull())
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_AspectMarker3d) aMarkerAspect = MarkerAspect();
|
||||||
|
if (!aMarkerAspect.IsNull())
|
||||||
|
{
|
||||||
|
*theAspMarker.operator->() = *aMarkerAspect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!theAspFill.IsNull())
|
||||||
|
{
|
||||||
|
Handle(Graphic3d_AspectFillArea3d) aFillAspect = FillAreaAspect();
|
||||||
|
if (!aFillAspect.IsNull())
|
||||||
|
{
|
||||||
|
*theAspFill.operator->() = *aFillAspect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : AddPrimitiveArray
|
// function : AddPrimitiveArray
|
||||||
// purpose :
|
// purpose :
|
||||||
|
@@ -17,12 +17,17 @@
|
|||||||
#ifndef _Graphic3d_Group_HeaderFile
|
#ifndef _Graphic3d_Group_HeaderFile
|
||||||
#define _Graphic3d_Group_HeaderFile
|
#define _Graphic3d_Group_HeaderFile
|
||||||
|
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_Type.hxx>
|
||||||
|
|
||||||
#include <Graphic3d_BndBox4f.hxx>
|
#include <Graphic3d_BndBox4f.hxx>
|
||||||
|
#include <Standard_Boolean.hxx>
|
||||||
#include <Graphic3d_AspectLine3d.hxx>
|
#include <Graphic3d_AspectLine3d.hxx>
|
||||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||||
#include <Graphic3d_AspectText3d.hxx>
|
#include <Graphic3d_AspectText3d.hxx>
|
||||||
#include <Graphic3d_AspectMarker3d.hxx>
|
#include <Graphic3d_AspectMarker3d.hxx>
|
||||||
#include <Graphic3d_MapOfAspectsToAspects.hxx>
|
#include <Standard_Transient.hxx>
|
||||||
|
#include <Standard_Real.hxx>
|
||||||
#include <Standard_CString.hxx>
|
#include <Standard_CString.hxx>
|
||||||
#include <Graphic3d_Vertex.hxx>
|
#include <Graphic3d_Vertex.hxx>
|
||||||
#include <Graphic3d_TextPath.hxx>
|
#include <Graphic3d_TextPath.hxx>
|
||||||
@@ -32,6 +37,8 @@
|
|||||||
#include <Graphic3d_IndexBuffer.hxx>
|
#include <Graphic3d_IndexBuffer.hxx>
|
||||||
#include <Graphic3d_Buffer.hxx>
|
#include <Graphic3d_Buffer.hxx>
|
||||||
#include <Graphic3d_BoundBuffer.hxx>
|
#include <Graphic3d_BoundBuffer.hxx>
|
||||||
|
#include <Standard_Address.hxx>
|
||||||
|
#include <Graphic3d_GroupAspect.hxx>
|
||||||
#include <gp_Ax2.hxx>
|
#include <gp_Ax2.hxx>
|
||||||
#include <TCollection_ExtendedString.hxx>
|
#include <TCollection_ExtendedString.hxx>
|
||||||
|
|
||||||
@@ -95,20 +102,70 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
//! Return line aspect.
|
||||||
|
virtual Handle(Graphic3d_AspectLine3d) LineAspect() const = 0;
|
||||||
|
|
||||||
|
//! Assign line aspect to the group.
|
||||||
|
virtual void SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspect) = 0;
|
||||||
|
|
||||||
//! Return fill area aspect.
|
//! Return fill area aspect.
|
||||||
virtual Handle(Graphic3d_Aspects) Aspects() const = 0;
|
virtual Handle(Graphic3d_AspectFillArea3d) FillAreaAspect() const = 0;
|
||||||
|
|
||||||
//! Modifies the context for all the face primitives of the group.
|
//! Modifies the context for all the face primitives of the group.
|
||||||
virtual void SetGroupPrimitivesAspect (const Handle(Graphic3d_Aspects)& theAspect) = 0;
|
virtual void SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& theAspect) = 0;
|
||||||
|
|
||||||
//! Modifies the current context of the group to give another aspect for all the primitives created after this call in the group.
|
//! Return text aspect.
|
||||||
virtual void SetPrimitivesAspect (const Handle(Graphic3d_Aspects)& theAspect) = 0;
|
virtual Handle(Graphic3d_AspectText3d) TextAspect() const = 0;
|
||||||
|
|
||||||
|
//! Modifies the context for all the text primitives of the group.
|
||||||
|
virtual void SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& theAspect) = 0;
|
||||||
|
|
||||||
|
//! Return marker aspect.
|
||||||
|
virtual Handle(Graphic3d_AspectMarker3d) MarkerAspect() const = 0;
|
||||||
|
|
||||||
|
//! Modifies the context for all the marker primitives of the group.
|
||||||
|
virtual void SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& theAspect) = 0;
|
||||||
|
|
||||||
|
//! Modifies the current context of the group to give
|
||||||
|
//! another aspect for all the line primitives created
|
||||||
|
//! after this call in the group.
|
||||||
|
virtual void SetPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspect) = 0;
|
||||||
|
|
||||||
|
//! Modifies the current context of the group to give
|
||||||
|
//! another aspect for all the face primitives created
|
||||||
|
//! after this call in the group.
|
||||||
|
virtual void SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& theAspect) = 0;
|
||||||
|
|
||||||
|
//! Modifies the current context of the group to give
|
||||||
|
//! another aspect for all the text primitives created
|
||||||
|
//! after this call in the group.
|
||||||
|
virtual void SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& theAspect) = 0;
|
||||||
|
|
||||||
|
//! Modifies the current context of the group to give
|
||||||
|
//! another aspect for all the marker primitives created
|
||||||
|
//! after this call in the group.
|
||||||
|
virtual void SetPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& theAspect) = 0;
|
||||||
|
|
||||||
//! Update presentation aspects after their modification.
|
//! Update presentation aspects after their modification.
|
||||||
virtual void SynchronizeAspects() = 0;
|
virtual void SynchronizeAspects() = 0;
|
||||||
|
|
||||||
//! Replace aspects specified in the replacement map.
|
//! Returns TRUE if aspect is set for the group.
|
||||||
virtual void ReplaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap) = 0;
|
Standard_EXPORT Standard_Boolean IsGroupPrimitivesAspectSet (const Graphic3d_GroupAspect theAspect) const;
|
||||||
|
|
||||||
|
//! Returns the context of all the primitives of the group.
|
||||||
|
Standard_EXPORT void GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspLine,
|
||||||
|
const Handle(Graphic3d_AspectText3d)& theAspText,
|
||||||
|
const Handle(Graphic3d_AspectMarker3d)& theAspMarker,
|
||||||
|
const Handle(Graphic3d_AspectFillArea3d)& theAspFill) const;
|
||||||
|
|
||||||
|
//! Returns the last inserted context in the group for each kind of primitives.
|
||||||
|
void PrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& theAspLine,
|
||||||
|
const Handle(Graphic3d_AspectText3d)& theAspText,
|
||||||
|
const Handle(Graphic3d_AspectMarker3d)& theAspMarker,
|
||||||
|
const Handle(Graphic3d_AspectFillArea3d)& theAspFill) const
|
||||||
|
{
|
||||||
|
GroupPrimitivesAspect (theAspLine, theAspText, theAspMarker, theAspFill);
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
// 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 _Graphic3d_MapOfAspectsToAspects_Header
|
|
||||||
#define _Graphic3d_MapOfAspectsToAspects_Header
|
|
||||||
|
|
||||||
#include <NCollection_DataMap.hxx>
|
|
||||||
#include <Standard_Transient.hxx>
|
|
||||||
|
|
||||||
class Graphic3d_Aspects;
|
|
||||||
typedef NCollection_DataMap<Handle(Graphic3d_Aspects), Handle(Graphic3d_Aspects)> Graphic3d_MapOfAspectsToAspects;
|
|
||||||
|
|
||||||
#endif // _Graphic3d_MapOfAspectsToAspects_Header
|
|
@@ -25,14 +25,6 @@ struct Graphic3d_PolygonOffset
|
|||||||
|
|
||||||
//! Empty constructor.
|
//! Empty constructor.
|
||||||
Graphic3d_PolygonOffset() : Mode(Aspect_POM_Fill), Factor (1.0f), Units (0.0f) {}
|
Graphic3d_PolygonOffset() : Mode(Aspect_POM_Fill), Factor (1.0f), Units (0.0f) {}
|
||||||
|
|
||||||
//! Equality comparison.
|
|
||||||
bool operator== (const Graphic3d_PolygonOffset& theOther) const
|
|
||||||
{
|
|
||||||
return Mode == theOther.Mode
|
|
||||||
&& Factor == theOther.Factor
|
|
||||||
&& Units == theOther.Units;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _Graphic3d_PolygonOffset_HeaderFile
|
#endif // _Graphic3d_PolygonOffset_HeaderFile
|
||||||
|
@@ -60,11 +60,6 @@ public:
|
|||||||
//! Returns unique ID used to manage resource in graphic driver.
|
//! Returns unique ID used to manage resource in graphic driver.
|
||||||
const TCollection_AsciiString& GetId() const { return myID; }
|
const TCollection_AsciiString& GetId() const { return myID; }
|
||||||
|
|
||||||
//! Sets unique ID used to manage resource in graphic driver.
|
|
||||||
//! WARNING! Graphic3d_ShaderProgram constructor generates a unique id for proper resource management;
|
|
||||||
//! however if application overrides it, it is responsibility of application to avoid name collisions.
|
|
||||||
void SetId (const TCollection_AsciiString& theId) { myID = theId; }
|
|
||||||
|
|
||||||
//! Returns GLSL header (version code and extensions).
|
//! Returns GLSL header (version code and extensions).
|
||||||
const TCollection_AsciiString& Header() const { return myHeader; }
|
const TCollection_AsciiString& Header() const { return myHeader; }
|
||||||
|
|
||||||
|
@@ -127,14 +127,12 @@ static void AddCompositeShape (const Handle(XCAFDoc_ShapeTool)& theSTool,
|
|||||||
if( nbSimple && aHasCompositeSubShape)
|
if( nbSimple && aHasCompositeSubShape)
|
||||||
{
|
{
|
||||||
theSTool->AddShape( aSimpleShape, Standard_False, Standard_False );
|
theSTool->AddShape( aSimpleShape, Standard_False, Standard_False );
|
||||||
|
|
||||||
TopoDS_Compound aNewShape;
|
TopoDS_Compound aNewShape;
|
||||||
aB.MakeCompound(aNewShape);
|
aB.MakeCompound(aNewShape);
|
||||||
aB.Add(aNewShape, aSimpleShape);
|
aB.Add(aNewShape, aSimpleShape);
|
||||||
aB.Add(aNewShape,aCompShape);
|
aB.Add(aNewShape,aCompShape);
|
||||||
|
//if (!aLoc.IsIdentity())
|
||||||
if (!aLoc.IsIdentity())
|
// aNewShape.Location(aLoc );
|
||||||
aNewShape.Location(aLoc );
|
|
||||||
aNewShape.Orientation(theShape.Orientation());
|
aNewShape.Orientation(theShape.Orientation());
|
||||||
theSTool->AddShape( aNewShape, aHasCompositeSubShape, Standard_False );
|
theSTool->AddShape( aNewShape, aHasCompositeSubShape, Standard_False );
|
||||||
}
|
}
|
||||||
|
@@ -25,32 +25,6 @@
|
|||||||
#include <TopTools_MapOfShape.hxx>
|
#include <TopTools_MapOfShape.hxx>
|
||||||
#include <Geom_Surface.hxx>
|
#include <Geom_Surface.hxx>
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
//=======================================================================
|
|
||||||
// Function: visitEdges
|
|
||||||
// Purpose : Explodes the given shape on edges according to the specified
|
|
||||||
// criteria and visits each one in order to add it to data model.
|
|
||||||
//=======================================================================
|
|
||||||
void visitEdges (const Handle (IMeshTools_ShapeVisitor)& theVisitor,
|
|
||||||
const TopoDS_Shape& theShape,
|
|
||||||
const TopAbs_ShapeEnum theToFind,
|
|
||||||
const TopAbs_ShapeEnum theToAvoid = TopAbs_SHAPE)
|
|
||||||
{
|
|
||||||
TopExp_Explorer aEdgesIt (theShape, theToFind, theToAvoid);
|
|
||||||
for (; aEdgesIt.More (); aEdgesIt.Next ())
|
|
||||||
{
|
|
||||||
const TopoDS_Edge& aEdge = TopoDS::Edge (aEdgesIt.Current ());
|
|
||||||
if (!BRep_Tool::IsGeometric (aEdge))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
theVisitor->Visit (aEdge);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// Function: Constructor
|
// Function: Constructor
|
||||||
// Purpose :
|
// Purpose :
|
||||||
@@ -76,15 +50,28 @@ IMeshTools_ShapeExplorer::~IMeshTools_ShapeExplorer ()
|
|||||||
void IMeshTools_ShapeExplorer::Accept (
|
void IMeshTools_ShapeExplorer::Accept (
|
||||||
const Handle (IMeshTools_ShapeVisitor)& theVisitor)
|
const Handle (IMeshTools_ShapeVisitor)& theVisitor)
|
||||||
{
|
{
|
||||||
// Explore all free edges in shape.
|
// Explore all edges in shape - either free or related to some face.
|
||||||
visitEdges (theVisitor, GetShape (), TopAbs_EDGE, TopAbs_FACE);
|
TopTools_IndexedMapOfShape aEdges;
|
||||||
|
TopExp::MapShapes (GetShape (), TopAbs_EDGE, aEdges);
|
||||||
|
|
||||||
// Explore all related to some face edges in shape.
|
TopTools_IndexedMapOfShape::Iterator aEdgeIt (aEdges);
|
||||||
// make array of faces suitable for processing (excluding faces without surface)
|
for (; aEdgeIt.More (); aEdgeIt.Next ())
|
||||||
|
{
|
||||||
|
const TopoDS_Edge& aEdge = TopoDS::Edge (aEdgeIt.Value ());
|
||||||
|
if (!BRep_Tool::IsGeometric(aEdge))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
theVisitor->Visit (aEdge);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Explore faces
|
||||||
TopTools_ListOfShape aFaceList;
|
TopTools_ListOfShape aFaceList;
|
||||||
BRepLib::ReverseSortFaces (GetShape (), aFaceList);
|
BRepLib::ReverseSortFaces (GetShape (), aFaceList);
|
||||||
TopTools_MapOfShape aFaceMap;
|
TopTools_MapOfShape aFaceMap;
|
||||||
|
|
||||||
|
// make array of faces suitable for processing (excluding faces without surface)
|
||||||
TopLoc_Location aDummyLoc;
|
TopLoc_Location aDummyLoc;
|
||||||
const TopLoc_Location aEmptyLoc;
|
const TopLoc_Location aEmptyLoc;
|
||||||
TopTools_ListIteratorOfListOfShape aFaceIter (aFaceList);
|
TopTools_ListIteratorOfListOfShape aFaceIter (aFaceList);
|
||||||
@@ -97,16 +84,13 @@ void IMeshTools_ShapeExplorer::Accept (
|
|||||||
continue; // already processed
|
continue; // already processed
|
||||||
}
|
}
|
||||||
|
|
||||||
const TopoDS_Face& aFace = TopoDS::Face (aFaceIter.Value ());
|
TopoDS_Face aFace = TopoDS::Face (aFaceIter.Value ());
|
||||||
const Handle (Geom_Surface)& aSurf = BRep_Tool::Surface (aFace, aDummyLoc);
|
const Handle (Geom_Surface)& aSurf = BRep_Tool::Surface (aFace, aDummyLoc);
|
||||||
if (aSurf.IsNull())
|
if (aSurf.IsNull())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explore all edges in face.
|
|
||||||
visitEdges (theVisitor, aFace, TopAbs_EDGE);
|
|
||||||
|
|
||||||
// Store only forward faces in order to prevent inverse issue.
|
// Store only forward faces in order to prevent inverse issue.
|
||||||
theVisitor->Visit (TopoDS::Face (aFace.Oriented (TopAbs_FORWARD)));
|
theVisitor->Visit (TopoDS::Face (aFace.Oriented (TopAbs_FORWARD)));
|
||||||
}
|
}
|
||||||
|
@@ -899,10 +899,6 @@ static Standard_Integer VtkMoveTo(Draw_Interpretor& theDI,
|
|||||||
|
|
||||||
Standard_Integer anY = GetInteractor()->GetRenderWindow()->GetSize()[1] - atoi (theArgs[2]) - 1;
|
Standard_Integer anY = GetInteractor()->GetRenderWindow()->GetSize()[1] - atoi (theArgs[2]) - 1;
|
||||||
GetInteractor()->MoveTo (atoi (theArgs[1]), anY);
|
GetInteractor()->MoveTo (atoi (theArgs[1]), anY);
|
||||||
|
|
||||||
gp_XYZ aPickPnt;
|
|
||||||
GetInteractor()->Selector()->GetPickPosition (aPickPnt.ChangeData());
|
|
||||||
theDI << aPickPnt.X() << " " << aPickPnt.Y() << " " << aPickPnt.Z();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,7 +58,6 @@ public:
|
|||||||
virtual void Enable();
|
virtual void Enable();
|
||||||
virtual void Start() { }
|
virtual void Start() { }
|
||||||
|
|
||||||
const PSelector& Selector() const { return mySelector; }
|
|
||||||
void SetShapePicker (const PSelector& theSelector);
|
void SetShapePicker (const PSelector& theSelector);
|
||||||
void SetPipelines (const Handle(ShapePipelineMap)& thePipelines);
|
void SetPipelines (const Handle(ShapePipelineMap)& thePipelines);
|
||||||
void SetOCCWindow (const Handle(Aspect_Window)& theWindow);
|
void SetOCCWindow (const Handle(Aspect_Window)& theWindow);
|
||||||
|
@@ -269,7 +269,6 @@ void IVtkOCC_ShapePickerAlgo::SubShapesPicked (const IVtk_IdType theId, IVtk_Sha
|
|||||||
//================================================================
|
//================================================================
|
||||||
void IVtkOCC_ShapePickerAlgo::clearPicked()
|
void IVtkOCC_ShapePickerAlgo::clearPicked()
|
||||||
{
|
{
|
||||||
myTopPickedPoint.SetCoord (RealLast(), RealLast(), RealLast());
|
|
||||||
myShapesPicked.Clear();
|
myShapesPicked.Clear();
|
||||||
mySubShapesPicked.Clear();
|
mySubShapesPicked.Clear();
|
||||||
}
|
}
|
||||||
@@ -290,11 +289,9 @@ int IVtkOCC_ShapePickerAlgo::NbPicked()
|
|||||||
bool IVtkOCC_ShapePickerAlgo::processPicked()
|
bool IVtkOCC_ShapePickerAlgo::processPicked()
|
||||||
{
|
{
|
||||||
Standard_Integer aNbPicked = myViewerSelector->NbPicked();
|
Standard_Integer aNbPicked = myViewerSelector->NbPicked();
|
||||||
|
|
||||||
Handle(StdSelect_BRepOwner) anEntityOwner;
|
Handle(StdSelect_BRepOwner) anEntityOwner;
|
||||||
Handle(Message_Messenger) anOutput = Message::DefaultMessenger();
|
Handle(Message_Messenger) anOutput = Message::DefaultMessenger();
|
||||||
|
|
||||||
bool isTop = true;
|
|
||||||
for (Standard_Integer aDetectIt = 1; aDetectIt <= aNbPicked; aDetectIt++)
|
for (Standard_Integer aDetectIt = 1; aDetectIt <= aNbPicked; aDetectIt++)
|
||||||
{
|
{
|
||||||
// ViewerSelector detects sensitive entities under the mouse
|
// ViewerSelector detects sensitive entities under the mouse
|
||||||
@@ -323,11 +320,6 @@ bool IVtkOCC_ShapePickerAlgo::processPicked()
|
|||||||
|
|
||||||
IVtk_IdType aTopLevelId = aSelShape->GetId();
|
IVtk_IdType aTopLevelId = aSelShape->GetId();
|
||||||
myShapesPicked.Append (aTopLevelId);
|
myShapesPicked.Append (aTopLevelId);
|
||||||
if (isTop)
|
|
||||||
{
|
|
||||||
isTop = false;
|
|
||||||
myTopPickedPoint = myViewerSelector->PickedPoint (aDetectIt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now try to guess if it's the top-level shape itself or just a sub-shape picked
|
// Now try to guess if it's the top-level shape itself or just a sub-shape picked
|
||||||
TopoDS_Shape aTopLevelShape = aSelShape->GetShape();
|
TopoDS_Shape aTopLevelShape = aSelShape->GetShape();
|
||||||
|
@@ -100,9 +100,6 @@ public: //! @name Obtain picking results
|
|||||||
//! @param [in] theShape the selectable shape
|
//! @param [in] theShape the selectable shape
|
||||||
Standard_EXPORT virtual void RemoveSelectableObject(const IVtk_IShape::Handle& theShape);
|
Standard_EXPORT virtual void RemoveSelectableObject(const IVtk_IShape::Handle& theShape);
|
||||||
|
|
||||||
//! Return topmost picked 3D point or (Inf, Inf, Inf) if undefined.
|
|
||||||
const gp_Pnt& TopPickedPoint() const { return myTopPickedPoint; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DEFINE_STANDARD_RTTIEXT(IVtkOCC_ShapePickerAlgo,IVtk_IShapePickerAlgo)
|
DEFINE_STANDARD_RTTIEXT(IVtkOCC_ShapePickerAlgo,IVtk_IShapePickerAlgo)
|
||||||
@@ -124,7 +121,6 @@ private:
|
|||||||
IVtk_IView::Handle myView;
|
IVtk_IView::Handle myView;
|
||||||
IVtk_ShapeIdList myShapesPicked;
|
IVtk_ShapeIdList myShapesPicked;
|
||||||
IVtk_SubShapeMap mySubShapesPicked;
|
IVtk_SubShapeMap mySubShapesPicked;
|
||||||
gp_Pnt myTopPickedPoint;
|
|
||||||
Handle(IVtkOCC_ViewerSelector) myViewerSelector;
|
Handle(IVtkOCC_ViewerSelector) myViewerSelector;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -193,10 +193,6 @@ void IVtkTools_ShapePicker::doPickImpl (double* thePos,
|
|||||||
{
|
{
|
||||||
myOccPickerAlgo->Pick (thePos[0], thePos[1]);
|
myOccPickerAlgo->Pick (thePos[0], thePos[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
PickPosition[0] = myOccPickerAlgo->TopPickedPoint().X();
|
|
||||||
PickPosition[1] = myOccPickerAlgo->TopPickedPoint().Y();
|
|
||||||
PickPosition[2] = myOccPickerAlgo->TopPickedPoint().Z();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
@@ -34,8 +34,6 @@
|
|||||||
#include <gp.hxx>
|
#include <gp.hxx>
|
||||||
#include <Message.hxx>
|
#include <Message.hxx>
|
||||||
#include <Message_Messenger.hxx>
|
#include <Message_Messenger.hxx>
|
||||||
#include <NCollection_Array1.hxx>
|
|
||||||
#include <Standard_ArrayStreamBuffer.hxx>
|
|
||||||
#include <TCollection_AsciiString.hxx>
|
#include <TCollection_AsciiString.hxx>
|
||||||
#include <TCollection_ExtendedString.hxx>
|
#include <TCollection_ExtendedString.hxx>
|
||||||
#include <OSD_OpenFile.hxx>
|
#include <OSD_OpenFile.hxx>
|
||||||
@@ -112,109 +110,6 @@ namespace
|
|||||||
return FIT_UNKNOWN;
|
return FIT_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Wrapper for accessing C++ stream from FreeImage.
|
|
||||||
class Image_FreeImageStream
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
//! Construct wrapper over input stream.
|
|
||||||
Image_FreeImageStream (std::istream& theStream)
|
|
||||||
: myIStream (&theStream), myOStream (NULL), myInitPos (theStream.tellg()) {}
|
|
||||||
|
|
||||||
//! Get io object.
|
|
||||||
FreeImageIO GetFiIO() const
|
|
||||||
{
|
|
||||||
FreeImageIO anIo;
|
|
||||||
memset (&anIo, 0, sizeof(anIo));
|
|
||||||
if (myIStream != NULL)
|
|
||||||
{
|
|
||||||
anIo.read_proc = readProc;
|
|
||||||
anIo.seek_proc = seekProc;
|
|
||||||
anIo.tell_proc = tellProc;
|
|
||||||
}
|
|
||||||
if (myOStream != NULL)
|
|
||||||
{
|
|
||||||
anIo.write_proc = writeProc;
|
|
||||||
}
|
|
||||||
return anIo;
|
|
||||||
}
|
|
||||||
public:
|
|
||||||
//! Simulate fread().
|
|
||||||
static unsigned int DLL_CALLCONV readProc (void* theBuffer, unsigned int theSize, unsigned int theCount, fi_handle theHandle)
|
|
||||||
{
|
|
||||||
Image_FreeImageStream* aThis = (Image_FreeImageStream* )theHandle;
|
|
||||||
if (aThis->myIStream == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!aThis->myIStream->read ((char* )theBuffer, std::streamsize(theSize) * std::streamsize(theCount)))
|
|
||||||
{
|
|
||||||
//aThis->myIStream->clear();
|
|
||||||
}
|
|
||||||
const std::streamsize aNbRead = aThis->myIStream->gcount();
|
|
||||||
return (unsigned int )(aNbRead / theSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Simulate fwrite().
|
|
||||||
static unsigned int DLL_CALLCONV writeProc (void* theBuffer, unsigned int theSize, unsigned int theCount, fi_handle theHandle)
|
|
||||||
{
|
|
||||||
Image_FreeImageStream* aThis = (Image_FreeImageStream* )theHandle;
|
|
||||||
if (aThis->myOStream != NULL
|
|
||||||
&& aThis->myOStream->write ((const char* )theBuffer, std::streamsize(theSize) * std::streamsize(theCount)))
|
|
||||||
{
|
|
||||||
return theCount;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Simulate fseek().
|
|
||||||
static int DLL_CALLCONV seekProc (fi_handle theHandle, long theOffset, int theOrigin)
|
|
||||||
{
|
|
||||||
Image_FreeImageStream* aThis = (Image_FreeImageStream* )theHandle;
|
|
||||||
if (aThis->myIStream == NULL)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isSeekDone = false;
|
|
||||||
switch (theOrigin)
|
|
||||||
{
|
|
||||||
case SEEK_SET:
|
|
||||||
if (aThis->myIStream->seekg ((std::streamoff )aThis->myInitPos + theOffset, std::ios::beg))
|
|
||||||
{
|
|
||||||
isSeekDone = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SEEK_CUR:
|
|
||||||
if (aThis->myIStream->seekg (theOffset, std::ios::cur))
|
|
||||||
{
|
|
||||||
isSeekDone = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SEEK_END:
|
|
||||||
if (aThis->myIStream->seekg (theOffset, std::ios::end))
|
|
||||||
{
|
|
||||||
isSeekDone = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return isSeekDone ? 0 : -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Simulate ftell().
|
|
||||||
static long DLL_CALLCONV tellProc (fi_handle theHandle)
|
|
||||||
{
|
|
||||||
Image_FreeImageStream* aThis = (Image_FreeImageStream* )theHandle;
|
|
||||||
const long aPos = aThis->myIStream != NULL ? (long )(aThis->myIStream->tellg() - aThis->myInitPos) : 0;
|
|
||||||
return aPos;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
std::istream* myIStream;
|
|
||||||
std::ostream* myOStream;
|
|
||||||
std::streampos myInitPos;
|
|
||||||
};
|
|
||||||
|
|
||||||
#elif defined(HAVE_WINCODEC)
|
#elif defined(HAVE_WINCODEC)
|
||||||
|
|
||||||
//! Return a zero GUID
|
//! Return a zero GUID
|
||||||
@@ -489,50 +384,21 @@ void Image_AlienPixMap::Clear()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
|
||||||
// function : IsTopDownDefault
|
|
||||||
// purpose :
|
|
||||||
// =======================================================================
|
|
||||||
bool Image_AlienPixMap::IsTopDownDefault()
|
|
||||||
{
|
|
||||||
#ifdef HAVE_FREEIMAGE
|
|
||||||
return false;
|
|
||||||
#elif defined(HAVE_WINCODEC)
|
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// function : Load
|
// function : Load
|
||||||
// purpose :
|
// purpose :
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
#ifdef HAVE_FREEIMAGE
|
#ifdef HAVE_FREEIMAGE
|
||||||
bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
bool Image_AlienPixMap::Load (const TCollection_AsciiString& theImagePath)
|
||||||
Standard_Size theLength,
|
|
||||||
const TCollection_AsciiString& theImagePath)
|
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
const TCollection_ExtendedString aFileNameW (theImagePath);
|
const TCollection_ExtendedString aFileNameW (theImagePath);
|
||||||
|
FREE_IMAGE_FORMAT aFIF = FreeImage_GetFileTypeU (aFileNameW.ToWideString(), 0);
|
||||||
|
#else
|
||||||
|
FREE_IMAGE_FORMAT aFIF = FreeImage_GetFileType (theImagePath.ToCString(), 0);
|
||||||
#endif
|
#endif
|
||||||
FREE_IMAGE_FORMAT aFIF = FIF_UNKNOWN;
|
|
||||||
FIMEMORY* aFiMem = NULL;
|
|
||||||
if (theData != NULL)
|
|
||||||
{
|
|
||||||
aFiMem = FreeImage_OpenMemory ((BYTE* )theData, (DWORD )theLength);
|
|
||||||
aFIF = FreeImage_GetFileTypeFromMemory (aFiMem, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
aFIF = FreeImage_GetFileTypeU (aFileNameW.ToWideString(), 0);
|
|
||||||
#else
|
|
||||||
aFIF = FreeImage_GetFileType (theImagePath.ToCString(), 0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (aFIF == FIF_UNKNOWN)
|
if (aFIF == FIF_UNKNOWN)
|
||||||
{
|
{
|
||||||
// no signature? try to guess the file format from the file extension
|
// no signature? try to guess the file format from the file extension
|
||||||
@@ -540,12 +406,10 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
|||||||
}
|
}
|
||||||
if ((aFIF == FIF_UNKNOWN) || !FreeImage_FIFSupportsReading (aFIF))
|
if ((aFIF == FIF_UNKNOWN) || !FreeImage_FIFSupportsReading (aFIF))
|
||||||
{
|
{
|
||||||
::Message::DefaultMessenger()->Send (TCollection_AsciiString ("Error: image '") + theImagePath + "' has unsupported file format.",
|
TCollection_AsciiString aMessage = "Error: image file '";
|
||||||
Message_Fail);
|
aMessage.AssignCat (theImagePath);
|
||||||
if (aFiMem != NULL)
|
aMessage.AssignCat ("' has unsupported file format.");
|
||||||
{
|
::Message::DefaultMessenger()->Send (aMessage, Message_Fail);
|
||||||
FreeImage_CloseMemory (aFiMem);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,21 +425,11 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
|||||||
aLoadFlags = ICO_MAKEALPHA;
|
aLoadFlags = ICO_MAKEALPHA;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIBITMAP* anImage = NULL;
|
#ifdef _WIN32
|
||||||
if (theData != NULL)
|
FIBITMAP* anImage = FreeImage_LoadU (aFIF, aFileNameW.ToWideString(), aLoadFlags);
|
||||||
{
|
#else
|
||||||
anImage = FreeImage_LoadFromMemory (aFIF, aFiMem, aLoadFlags);
|
FIBITMAP* anImage = FreeImage_Load (aFIF, theImagePath.ToCString(), aLoadFlags);
|
||||||
FreeImage_CloseMemory (aFiMem);
|
#endif
|
||||||
aFiMem = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
anImage = FreeImage_LoadU (aFIF, aFileNameW.ToWideString(), aLoadFlags);
|
|
||||||
#else
|
|
||||||
anImage = FreeImage_Load (aFIF, theImagePath.ToCString(), aLoadFlags);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (anImage == NULL)
|
if (anImage == NULL)
|
||||||
{
|
{
|
||||||
TCollection_AsciiString aMessage = "Error: image file '";
|
TCollection_AsciiString aMessage = "Error: image file '";
|
||||||
@@ -591,8 +445,10 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
|||||||
if (aFormat == Image_Format_UNKNOWN)
|
if (aFormat == Image_Format_UNKNOWN)
|
||||||
{
|
{
|
||||||
//anImage = FreeImage_ConvertTo24Bits (anImage);
|
//anImage = FreeImage_ConvertTo24Bits (anImage);
|
||||||
::Message::DefaultMessenger()->Send ( TCollection_AsciiString ("Error: image '") + theImagePath + "' has unsupported pixel format.",
|
TCollection_AsciiString aMessage = "Error: image file '";
|
||||||
Message_Fail);
|
aMessage.AssignCat (theImagePath);
|
||||||
|
aMessage.AssignCat ("' has unsupported pixel format.");
|
||||||
|
::Message::DefaultMessenger()->Send (aMessage, Message_Fail);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -604,106 +460,25 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
|||||||
myLibImage = anImage;
|
myLibImage = anImage;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Image_AlienPixMap::Load (std::istream& theStream,
|
|
||||||
const TCollection_AsciiString& theFileName)
|
|
||||||
{
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
Image_FreeImageStream aStream (theStream);
|
|
||||||
FreeImageIO aFiIO = aStream.GetFiIO();
|
|
||||||
|
|
||||||
FREE_IMAGE_FORMAT aFIF = FreeImage_GetFileTypeFromHandle (&aFiIO, &aStream, 0);
|
|
||||||
if (aFIF == FIF_UNKNOWN)
|
|
||||||
{
|
|
||||||
// no signature? try to guess the file format from the file extension
|
|
||||||
aFIF = FreeImage_GetFIFFromFilename (theFileName.ToCString());
|
|
||||||
}
|
|
||||||
if ((aFIF == FIF_UNKNOWN) || !FreeImage_FIFSupportsReading (aFIF))
|
|
||||||
{
|
|
||||||
::Message::DefaultMessenger()->Send (TCollection_AsciiString ("Error: image stream '") + theFileName + "' has unsupported file format.",
|
|
||||||
Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int aLoadFlags = 0;
|
|
||||||
if (aFIF == FIF_GIF)
|
|
||||||
{
|
|
||||||
// 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading
|
|
||||||
aLoadFlags = GIF_PLAYBACK;
|
|
||||||
}
|
|
||||||
else if (aFIF == FIF_ICO)
|
|
||||||
{
|
|
||||||
// convert to 32bpp and create an alpha channel from the AND-mask when loading
|
|
||||||
aLoadFlags = ICO_MAKEALPHA;
|
|
||||||
}
|
|
||||||
|
|
||||||
FIBITMAP* anImage = FreeImage_LoadFromHandle (aFIF, &aFiIO, &aStream, aLoadFlags);
|
|
||||||
if (anImage == NULL)
|
|
||||||
{
|
|
||||||
::Message::DefaultMessenger()->Send (TCollection_AsciiString ("Error: image stream '") + theFileName + "' is missing or invalid.",
|
|
||||||
Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Image_Format aFormat = convertFromFreeFormat (FreeImage_GetImageType(anImage),
|
|
||||||
FreeImage_GetColorType(anImage),
|
|
||||||
FreeImage_GetBPP (anImage));
|
|
||||||
if (aFormat == Image_Format_UNKNOWN)
|
|
||||||
{
|
|
||||||
::Message::DefaultMessenger()->Send (TCollection_AsciiString ("Error: image stream '") + theFileName + "' has unsupported pixel format.",
|
|
||||||
Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Image_PixMap::InitWrapper (aFormat, FreeImage_GetBits (anImage),
|
|
||||||
FreeImage_GetWidth (anImage), FreeImage_GetHeight (anImage), FreeImage_GetPitch (anImage));
|
|
||||||
SetTopDown (false);
|
|
||||||
|
|
||||||
// assign image after wrapper initialization (virtual Clear() called inside)
|
|
||||||
myLibImage = anImage;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(HAVE_WINCODEC)
|
#elif defined(HAVE_WINCODEC)
|
||||||
bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
bool Image_AlienPixMap::Load (const TCollection_AsciiString& theImagePath)
|
||||||
Standard_Size theLength,
|
|
||||||
const TCollection_AsciiString& theFileName)
|
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
Image_ComPtr<IWICImagingFactory> aWicImgFactory;
|
IWICImagingFactory* aWicImgFactory = NULL;
|
||||||
CoInitializeEx (NULL, COINIT_MULTITHREADED);
|
CoInitializeEx (NULL, COINIT_MULTITHREADED);
|
||||||
if (CoCreateInstance (CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&aWicImgFactory.ChangePtr())) != S_OK)
|
if (CoCreateInstance (CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&aWicImgFactory)) != S_OK)
|
||||||
{
|
{
|
||||||
Message::DefaultMessenger()->Send ("Error: cannot initialize WIC Imaging Factory", Message_Fail);
|
Message::DefaultMessenger()->Send ("Error: cannot initialize WIC Imaging Factory", Message_Fail);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image_ComPtr<IWICBitmapDecoder> aWicDecoder;
|
Image_ComPtr<IWICBitmapDecoder> aWicDecoder;
|
||||||
Image_ComPtr<IWICStream> aWicStream;
|
const TCollection_ExtendedString aFileNameW (theImagePath);
|
||||||
if (theData != NULL)
|
if (aWicImgFactory->CreateDecoderFromFilename (aFileNameW.ToWideString(), NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &aWicDecoder.ChangePtr()) != S_OK)
|
||||||
{
|
{
|
||||||
if (aWicImgFactory->CreateStream (&aWicStream.ChangePtr()) != S_OK
|
Message::DefaultMessenger()->Send ("Error: cannot create WIC Image Decoder", Message_Fail);
|
||||||
|| aWicStream->InitializeFromMemory ((BYTE* )theData, (DWORD )theLength) != S_OK)
|
return false;
|
||||||
{
|
|
||||||
Message::DefaultMessenger()->Send ("Error: cannot initialize WIC Stream", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (aWicImgFactory->CreateDecoderFromStream (aWicStream.get(), NULL, WICDecodeMetadataCacheOnDemand, &aWicDecoder.ChangePtr()) != S_OK)
|
|
||||||
{
|
|
||||||
Message::DefaultMessenger()->Send ("Error: cannot create WIC Image Decoder", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const TCollection_ExtendedString aFileNameW (theFileName);
|
|
||||||
if (aWicImgFactory->CreateDecoderFromFilename (aFileNameW.ToWideString(), NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &aWicDecoder.ChangePtr()) != S_OK)
|
|
||||||
{
|
|
||||||
Message::DefaultMessenger()->Send ("Error: cannot create WIC Image Decoder", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT aFrameCount = 0, aFrameSizeX = 0, aFrameSizeY = 0;
|
UINT aFrameCount = 0, aFrameSizeX = 0, aFrameSizeY = 0;
|
||||||
@@ -752,45 +527,10 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
|||||||
SetTopDown (true);
|
SetTopDown (true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool Image_AlienPixMap::Load (std::istream& theStream,
|
|
||||||
const TCollection_AsciiString& theFilePath)
|
|
||||||
{
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
// fallback copying stream data into transient buffer
|
|
||||||
const std::streamoff aStart = theStream.tellg();
|
|
||||||
theStream.seekg (0, std::ios::end);
|
|
||||||
const Standard_Integer aLen = Standard_Integer(theStream.tellg() - aStart);
|
|
||||||
theStream.seekg (aStart);
|
|
||||||
if (aLen <= 0)
|
|
||||||
{
|
|
||||||
Message::DefaultMessenger()->Send ("Error: empty stream", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
NCollection_Array1<Standard_Byte> aBuff (1, aLen);
|
|
||||||
if (!theStream.read ((char* )&aBuff.ChangeFirst(), aBuff.Size()))
|
|
||||||
{
|
|
||||||
Message::DefaultMessenger()->Send ("Error: unable to read stream", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Load (&aBuff.ChangeFirst(), aBuff.Size(), theFilePath);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
bool Image_AlienPixMap::Load (std::istream& ,
|
bool Image_AlienPixMap::Load (const TCollection_AsciiString&)
|
||||||
const TCollection_AsciiString& )
|
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
Message::DefaultMessenger()->Send ("Error: no image library available", Message_Fail);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
bool Image_AlienPixMap::Load (const Standard_Byte* ,
|
|
||||||
Standard_Size ,
|
|
||||||
const TCollection_AsciiString& )
|
|
||||||
{
|
|
||||||
Clear();
|
|
||||||
Message::DefaultMessenger()->Send ("Error: no image library available", Message_Fail);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1034,9 +774,9 @@ bool Image_AlienPixMap::Save (const TCollection_AsciiString& theFileName)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image_ComPtr<IWICImagingFactory> aWicImgFactory;
|
IWICImagingFactory* aWicImgFactory = NULL;
|
||||||
CoInitializeEx (NULL, COINIT_MULTITHREADED);
|
CoInitializeEx (NULL, COINIT_MULTITHREADED);
|
||||||
if (CoCreateInstance (CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&aWicImgFactory.ChangePtr())) != S_OK)
|
if (CoCreateInstance (CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&aWicImgFactory)) != S_OK)
|
||||||
{
|
{
|
||||||
Message::DefaultMessenger()->Send ("Error: cannot initialize WIC Imaging Factory", Message_Fail);
|
Message::DefaultMessenger()->Send ("Error: cannot initialize WIC Imaging Factory", Message_Fail);
|
||||||
return false;
|
return false;
|
||||||
|
@@ -36,10 +36,6 @@ class Image_AlienPixMap : public Image_PixMap
|
|||||||
DEFINE_STANDARD_RTTIEXT(Image_AlienPixMap, Image_PixMap)
|
DEFINE_STANDARD_RTTIEXT(Image_AlienPixMap, Image_PixMap)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! Return default rows order used by underlying image library.
|
|
||||||
Standard_EXPORT static bool IsTopDownDefault();
|
|
||||||
public:
|
|
||||||
|
|
||||||
//! Empty constructor.
|
//! Empty constructor.
|
||||||
Standard_EXPORT Image_AlienPixMap();
|
Standard_EXPORT Image_AlienPixMap();
|
||||||
|
|
||||||
@@ -47,23 +43,7 @@ public:
|
|||||||
Standard_EXPORT virtual ~Image_AlienPixMap();
|
Standard_EXPORT virtual ~Image_AlienPixMap();
|
||||||
|
|
||||||
//! Read image data from file.
|
//! Read image data from file.
|
||||||
bool Load (const TCollection_AsciiString& theFileName)
|
Standard_EXPORT bool Load (const TCollection_AsciiString& theFileName);
|
||||||
{
|
|
||||||
return Load (NULL, 0, theFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Read image data from stream.
|
|
||||||
Standard_EXPORT bool Load (std::istream& theStream,
|
|
||||||
const TCollection_AsciiString& theFileName);
|
|
||||||
|
|
||||||
//! Read image data from memory buffer.
|
|
||||||
//! @param theData memory pointer to read from;
|
|
||||||
//! when NULL, function will attempt to open theFileName file
|
|
||||||
//! @param theLength memory buffer length
|
|
||||||
//! @param theFileName optional file name
|
|
||||||
Standard_EXPORT bool Load (const Standard_Byte* theData,
|
|
||||||
Standard_Size theLength,
|
|
||||||
const TCollection_AsciiString& theFileName);
|
|
||||||
|
|
||||||
//! Write image data to file using file extension to determine compression format.
|
//! Write image data to file using file extension to determine compression format.
|
||||||
Standard_EXPORT bool Save (const TCollection_AsciiString& theFileName);
|
Standard_EXPORT bool Save (const TCollection_AsciiString& theFileName);
|
||||||
|
@@ -125,6 +125,7 @@ void IntImpParGen::DetermineTransition(const IntRes2d_Position Pos1,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
gp_Vec2d Norm;
|
gp_Vec2d Norm;
|
||||||
|
Tan1.Normalized();
|
||||||
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
||||||
Standard_Real Val1,Val2;
|
Standard_Real Val1,Val2;
|
||||||
if (!courbure1) {
|
if (!courbure1) {
|
||||||
|
@@ -116,6 +116,7 @@ void Determine_Transition(const IntRes2d_Position Pos1,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
gp_Vec2d Norm;
|
gp_Vec2d Norm;
|
||||||
|
Tan1.Normalized();
|
||||||
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
||||||
Standard_Real Val1,Val2;
|
Standard_Real Val1,Val2;
|
||||||
if (!courbure1) {
|
if (!courbure1) {
|
||||||
|
@@ -159,10 +159,15 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
|||||||
!aDrawer->GetDouble ( MeshVS_DA_TextHeight, aHeight ) )
|
!aDrawer->GetDouble ( MeshVS_DA_TextHeight, aHeight ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Handle(Graphic3d_Group) aTextGroup = Prs->NewGroup();
|
Prs3d_Root::NewGroup ( Prs );
|
||||||
|
Handle (Graphic3d_Group) aTextGroup = Prs3d_Root::CurrentGroup ( Prs );
|
||||||
|
|
||||||
Quantity_Color AColor = Quantity_NOC_YELLOW;
|
Quantity_Color AColor = Quantity_NOC_YELLOW;
|
||||||
Standard_CString AFont = Font_NOF_ASCII_MONO;
|
#ifdef _WIN32
|
||||||
|
Standard_CString AFont = "Courier New";
|
||||||
|
#else
|
||||||
|
Standard_CString AFont = "Courier";
|
||||||
|
#endif
|
||||||
Standard_Real AExpansionFactor = 1.0;
|
Standard_Real AExpansionFactor = 1.0;
|
||||||
Standard_Real ASpace = 0.0;
|
Standard_Real ASpace = 0.0;
|
||||||
Aspect_TypeOfStyleText ATextStyle = Aspect_TOST_ANNOTATION;
|
Aspect_TypeOfStyleText ATextStyle = Aspect_TOST_ANNOTATION;
|
||||||
@@ -191,7 +196,10 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
|||||||
Handle (Graphic3d_AspectText3d) aTextAspect = new Graphic3d_AspectText3d ( AColor, AFont, AExpansionFactor, ASpace,
|
Handle (Graphic3d_AspectText3d) aTextAspect = new Graphic3d_AspectText3d ( AColor, AFont, AExpansionFactor, ASpace,
|
||||||
ATextStyle, ADisplayType );
|
ATextStyle, ADisplayType );
|
||||||
aTextAspect->SetTextFontAspect( AFontAspectType );
|
aTextAspect->SetTextFontAspect( AFontAspectType );
|
||||||
aTextGroup->SetGroupPrimitivesAspect( aTextAspect );
|
Handle (Graphic3d_AspectMarker3d) anAspectMarker3d =
|
||||||
|
new Graphic3d_AspectMarker3d( Aspect_TOM_POINT, Quantity_NOC_GRAY, 1. );
|
||||||
|
aTextGroup->SetPrimitivesAspect( aTextAspect );
|
||||||
|
aTextGroup->SetPrimitivesAspect( anAspectMarker3d );
|
||||||
|
|
||||||
MeshVS_Buffer aCoordsBuf (3*aMaxFaceNodes*sizeof(Standard_Real));
|
MeshVS_Buffer aCoordsBuf (3*aMaxFaceNodes*sizeof(Standard_Real));
|
||||||
TColStd_Array1OfReal aCoords (aCoordsBuf, 1, 3*aMaxFaceNodes);
|
TColStd_Array1OfReal aCoords (aCoordsBuf, 1, 3*aMaxFaceNodes);
|
||||||
@@ -213,8 +221,8 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
|||||||
}
|
}
|
||||||
anIDs.Subtract( IDsToExclude );
|
anIDs.Subtract( IDsToExclude );
|
||||||
|
|
||||||
NCollection_Sequence<Graphic3d_Vec3> aPnts;
|
TColStd_MapIteratorOfPackedMapOfInteger it (anIDs);
|
||||||
for (TColStd_MapIteratorOfPackedMapOfInteger it (anIDs); it.More(); it.Next())
|
for( ; it.More(); it.Next() )
|
||||||
{
|
{
|
||||||
Standard_Integer aKey = it.Key();
|
Standard_Integer aKey = it.Key();
|
||||||
if( GetText ( IsElement, aKey, aStr ) )
|
if( GetText ( IsElement, aKey, aStr ) )
|
||||||
@@ -250,27 +258,15 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
aPnts.Append (Graphic3d_Vec3 ((float )X, (float )Y, (float )Z));
|
|
||||||
Graphic3d_Vertex aPoint (X, Y, Z);
|
Graphic3d_Vertex aPoint (X, Y, Z);
|
||||||
|
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||||
|
anArrayOfPoints->AddVertex (X, Y, Z);
|
||||||
|
aTextGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||||
aTextGroup->Text (aStr.ToCString(), aPoint, aHeight);
|
aTextGroup->Text (aStr.ToCString(), aPoint, aHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!aPnts.IsEmpty())
|
|
||||||
{
|
|
||||||
Handle(Graphic3d_Group) aMarkerGroup = Prs->NewGroup();
|
|
||||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (aPnts.Size());
|
|
||||||
for (NCollection_Sequence<Graphic3d_Vec3>::Iterator aPntIter (aPnts); aPntIter.More(); aPntIter.Next())
|
|
||||||
{
|
|
||||||
const Graphic3d_Vec3& aPnt = aPntIter.Value();
|
|
||||||
anArrayOfPoints->AddVertex (aPnt.x(), aPnt.y(), aPnt.z());
|
|
||||||
}
|
|
||||||
Handle (Graphic3d_AspectMarker3d) anAspectMarker3d = new Graphic3d_AspectMarker3d (Aspect_TOM_POINT, Quantity_NOC_GRAY, 1.0);
|
|
||||||
aMarkerGroup->SetGroupPrimitivesAspect (anAspectMarker3d);
|
|
||||||
aMarkerGroup->AddPrimitiveArray (anArrayOfPoints);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!aCustomElements.IsEmpty())
|
if (!aCustomElements.IsEmpty())
|
||||||
CustomBuild ( Prs, aCustomElements, IDsToExclude, theDisplayMode );
|
CustomBuild ( Prs, aCustomElements, IDsToExclude, theDisplayMode );
|
||||||
}
|
}
|
||||||
|
@@ -59,32 +59,6 @@ public:
|
|||||||
return myPtr;
|
return myPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Move assignment.
|
|
||||||
//! This array will borrow all the data from theOther.
|
|
||||||
NCollection_LocalArray& Move (NCollection_LocalArray& theOther)
|
|
||||||
{
|
|
||||||
if (&theOther == this)
|
|
||||||
{
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
Deallocate();
|
|
||||||
mySize = theOther.mySize;
|
|
||||||
if (theOther.myPtr == theOther.myBuffer)
|
|
||||||
{
|
|
||||||
// deep copy
|
|
||||||
myPtr = myBuffer;
|
|
||||||
memcpy (myPtr, theOther.myPtr, sizeof(theItem) * theOther.mySize);
|
|
||||||
memset (theOther.myPtr, 0, sizeof(theItem) * theOther.mySize);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myPtr = theOther.myPtr;
|
|
||||||
theOther.myPtr = theOther.myBuffer;
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
NCollection_LocalArray (const NCollection_LocalArray& );
|
NCollection_LocalArray (const NCollection_LocalArray& );
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user