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 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
|
||||
|
||||
* *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
|
||||
MACRO_EXPANSION = 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_LATEX = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
|
@@ -277,6 +277,7 @@ blend result _model 2 _model_161
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay -dispMode 1 result
|
||||
vdisplay result
|
||||
vfit
|
||||
vaspects result -setFaceBoundaryDraw 1 -mostContinuity c2
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary result 1
|
||||
|
@@ -263,6 +263,7 @@ unifysamedom result p_1
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay -dispMode 1 result
|
||||
vdisplay result
|
||||
vfit
|
||||
vaspects result -setFaceBoundaryDraw 1
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary result 1
|
||||
|
@@ -57,7 +57,9 @@ bcommon res b9 c2
|
||||
# show result
|
||||
donly res
|
||||
trotate res 0 0 0 0 0 1 90
|
||||
vinit View1
|
||||
vdisplay -dispMode 1 res
|
||||
vaspects res -setFaceBoundaryDraw 1 -setFaceBoundaryColor WHITE -isoontriangulation 1
|
||||
vinit
|
||||
vdisplay res
|
||||
vsetdispmode 1
|
||||
vshowfaceboundary res 1 255 255 255
|
||||
vaspects -isoontriangulation 1
|
||||
vfit
|
||||
|
@@ -236,18 +236,17 @@ void AIS_CameraFrustum::Compute (const Handle(PrsMgr_PresentationManager3d)& ,
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
switch (theMode)
|
||||
{
|
||||
case AIS_Shaded:
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myTriangles);
|
||||
}
|
||||
Standard_FALLTHROUGH
|
||||
case AIS_WireFrame:
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myBorders);
|
||||
break;
|
||||
|
@@ -232,6 +232,11 @@ void AIS_ColoredShape::SetCustomWidth (const TopoDS_Shape& theShape,
|
||||
|
||||
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())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -257,7 +262,6 @@ void AIS_ColoredShape::SetColor (const Quantity_Color& 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)
|
||||
{
|
||||
setWidth (myDrawer, theLineWidth);
|
||||
myOwnWidth = theLineWidth;
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -288,16 +296,6 @@ void AIS_ColoredShape::SetWidth (const Standard_Real 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)
|
||||
{
|
||||
setTransparency (myDrawer, theValue);
|
||||
myDrawer->SetTransparency ((Standard_ShortReal )theValue);
|
||||
LoadRecomputable (AIS_WireFrame);
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
|
||||
@@ -320,7 +322,6 @@ void AIS_ColoredShape::SetTransparency (const Standard_Real theValue)
|
||||
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()
|
||||
{
|
||||
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)
|
||||
{
|
||||
setMaterial (myDrawer, theMaterial, HasColor(), IsTransparent());
|
||||
//myOwnMaterial = theMaterial;
|
||||
hasOwnMaterial = Standard_True;
|
||||
LoadRecomputable (AIS_Shaded);
|
||||
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
|
||||
{
|
||||
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());
|
||||
}
|
||||
}
|
||||
AIS_Shape::SetMaterial (theMaterial);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -586,7 +610,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
const DataMapOfDrawerCompd& theDrawerClosedFaces,
|
||||
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)
|
||||
{
|
||||
const Standard_Boolean isClosed = aShType == TopAbs_SHAPE;
|
||||
@@ -640,7 +664,7 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
{
|
||||
if (aShadedGroup.IsNull())
|
||||
{
|
||||
aShadedGroup = thePrs->NewGroup();
|
||||
aShadedGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aShadedGroup->SetClosed (isClosed);
|
||||
}
|
||||
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
|
||||
@@ -649,15 +673,18 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
|
||||
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());
|
||||
anEdgesGroup->AddPrimitiveArray (aBndSegments);
|
||||
Handle(Graphic3d_AspectLine3d) aBoundaryAspect = aDrawer->FaceBoundaryAspect()->Aspect();
|
||||
aShadedGroup->SetPrimitivesAspect (aBoundaryAspect);
|
||||
aShadedGroup->AddPrimitiveArray (aBndSegments);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -81,16 +81,11 @@ public: //! @name global aspects
|
||||
//! Sets transparency value.
|
||||
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.
|
||||
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
|
||||
|
||||
//! Setup line width of entire shape.
|
||||
Standard_EXPORT virtual void UnsetWidth() Standard_OVERRIDE;
|
||||
//! Sets the material aspect.
|
||||
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theAspect) Standard_OVERRIDE;
|
||||
|
||||
protected: //! @name override presentation computation
|
||||
|
||||
|
@@ -431,7 +431,6 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
const TCollection_ExtendedString& theText,
|
||||
const Standard_Integer theLabelPosition)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
if (myDrawer->DimensionAspect()->IsText3d())
|
||||
{
|
||||
// getting font parameters
|
||||
@@ -518,7 +517,7 @@ void AIS_Dimension::drawText (const Handle(Prs3d_Presentation)& thePresentation,
|
||||
aCenterOfLabel.Transform (aTextPlaneTrsf);
|
||||
|
||||
gp_Ax2 aFlippingAxes (aCenterOfLabel, GetPlane().Axis().Direction(), aTextDir);
|
||||
aGroup->SetFlippingOptions (Standard_True, aFlippingAxes);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetFlippingOptions (Standard_True, aFlippingAxes);
|
||||
|
||||
// draw text
|
||||
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->FreeBoundaryAspect()->Aspect()->SetColor (aColor);
|
||||
|
||||
// drawing text
|
||||
if (Handle(Graphic3d_ArrayOfPrimitives) anEdges = StdPrs_WFShape::AddAllEdges (aTextShape, myDrawer))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->FreeBoundaryAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anEdges);
|
||||
}
|
||||
StdPrs_WFShape::Add (thePresentation, aTextShape, myDrawer);
|
||||
}
|
||||
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
|
||||
myDrawer->DimensionAspect()->TextAspect()->Aspect()->SetDisplayType (Aspect_TODT_DIMENSION);
|
||||
|
||||
Prs3d_Text::Draw (aGroup,
|
||||
Prs3d_Text::Draw (Prs3d_Root::CurrentGroup (thePresentation),
|
||||
myDrawer->DimensionAspect()->TextAspect(),
|
||||
theText,
|
||||
theTextPos);
|
||||
@@ -603,7 +599,6 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
||||
gp_Pnt aTextPos = ElCLib::Value (theExtensionSize, anExtensionLine);
|
||||
gp_Dir aTextDir = theExtensionDir;
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
drawText (thePresentation,
|
||||
aTextPos,
|
||||
aTextDir,
|
||||
@@ -635,17 +630,16 @@ void AIS_Dimension::DrawExtension (const Handle(Prs3d_Presentation)& thePresenta
|
||||
aSensitiveCurve.Append (anExtStart);
|
||||
aSensitiveCurve.Append (anExtEnd);
|
||||
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
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();
|
||||
aGroup->SetPrimitivesAspect (aDimensionLineStyle);
|
||||
aGroup->AddPrimitiveArray (anExtPrimitive);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionLineStyle);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (anExtPrimitive);
|
||||
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:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
gp_Pnt aTextPos = IsTextPositionCustom() ? myFixedTextPosition
|
||||
: (aCenterLineBegin.XYZ() + aCenterLineEnd.XYZ()) * 0.5;
|
||||
gp_Dir aTextDir = aDimensionLine.Direction();
|
||||
@@ -746,7 +742,6 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
// add text primitives
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Text)
|
||||
{
|
||||
thePresentation->NewGroup();
|
||||
drawText (thePresentation,
|
||||
aTextPos,
|
||||
aTextDir,
|
||||
@@ -804,28 +799,24 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
aDimensionAspect->TextAspect()->SetVerticalJustification (aTextJustificaton);
|
||||
|
||||
// main dimension line, short extension
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
aGroup->SetStencilTestOptions (Standard_True);
|
||||
}
|
||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
aGroup->SetStencilTestOptions (Standard_False);
|
||||
}
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_True);
|
||||
}
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
if (!aDimensionAspect->IsText3d() && theMode == ComputeMode_All)
|
||||
{
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetStencilTestOptions (Standard_False);
|
||||
}
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
|
||||
if (!isArrowsExternal)
|
||||
@@ -834,18 +825,19 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// 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(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
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;
|
||||
}
|
||||
// ------------------------------------------------------------------------ //
|
||||
@@ -855,48 +847,45 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
case LabelPosition_Left:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
{
|
||||
// Left extension with the text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
isArrowsExternal
|
||||
? aFirstArrowEnd
|
||||
: aFirstArrowBegin,
|
||||
aFirstExtensionDir,
|
||||
aLabelString,
|
||||
aLabelWidth,
|
||||
theMode,
|
||||
aLabelPosition);
|
||||
}
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// Left extension with the text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
isArrowsExternal
|
||||
? aFirstArrowEnd
|
||||
: aFirstArrowBegin,
|
||||
aFirstExtensionDir,
|
||||
aLabelString,
|
||||
aLabelWidth,
|
||||
theMode,
|
||||
aLabelPosition);
|
||||
|
||||
// add dimension line primitives
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||
{
|
||||
// add central dimension line
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
|
||||
aGroup->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
}
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
}
|
||||
|
||||
if (!isArrowsExternal || theIsOneSide)
|
||||
@@ -905,11 +894,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// add extension lines for external arrows
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aSecondArrowEnd, aSecondExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -921,6 +910,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
case LabelPosition_Right:
|
||||
{
|
||||
// add label on dimension or extension line to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// Right extension with text
|
||||
DrawExtension (thePresentation, anExtensionSize,
|
||||
@@ -935,30 +925,27 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
if (theMode == ComputeMode_All || theMode == ComputeMode_Line)
|
||||
{
|
||||
// add central dimension line
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
// add graphical primitives
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments (2);
|
||||
aPrimSegments->AddVertex (aCenterLineBegin);
|
||||
aPrimSegments->AddVertex (aCenterLineEnd);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
}
|
||||
// add selection primitives
|
||||
SelectionGeometry::Curve& aSensitiveCurve = mySelectionGeom.NewCurve();
|
||||
aSensitiveCurve.Append (aCenterLineBegin);
|
||||
aSensitiveCurve.Append (aCenterLineEnd);
|
||||
|
||||
// add arrows to presentation
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
thePresentation->NewGroup();
|
||||
DrawArrow (thePresentation, aSecondArrowBegin, aSecondArrowDir);
|
||||
if (!theIsOneSide)
|
||||
{
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
}
|
||||
DrawArrow (thePresentation, aFirstArrowBegin, aFirstArrowDir);
|
||||
}
|
||||
|
||||
if (!isArrowsExternal || theIsOneSide)
|
||||
@@ -967,11 +954,11 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
}
|
||||
|
||||
// add extension lines for external arrows
|
||||
{
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
DrawExtension (thePresentation, aDimensionAspect->ArrowTailSize(),
|
||||
aFirstArrowEnd, aFirstExtensionDir,
|
||||
THE_EMPTY_LABEL, 0.0, theMode, LabelPosition_None);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -981,7 +968,7 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
// add flyout lines to presentation
|
||||
if (theMode == ComputeMode_All)
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = thePresentation->NewGroup();
|
||||
Prs3d_Root::NewGroup (thePresentation);
|
||||
|
||||
Handle(Graphic3d_ArrayOfSegments) aPrimSegments = new Graphic3d_ArrayOfSegments(4);
|
||||
aPrimSegments->AddVertex (theFirstPoint);
|
||||
@@ -990,8 +977,8 @@ void AIS_Dimension::DrawLinearDimension (const Handle(Prs3d_Presentation)& thePr
|
||||
aPrimSegments->AddVertex (theSecondPoint);
|
||||
aPrimSegments->AddVertex (aLineEndPoint);
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (aPrimSegments);
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->SetPrimitivesAspect (aDimensionAspect->LineAspect()->Aspect());
|
||||
Prs3d_Root::CurrentGroup (thePresentation)->AddPrimitiveArray (aPrimSegments);
|
||||
}
|
||||
|
||||
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]; }
|
||||
|
||||
//! 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,
|
||||
const Handle(Prs3d_Drawer)& theStyle) { myStyles[theStyleType] = theStyle; }
|
||||
|
||||
@@ -227,14 +212,6 @@ public: //! @name highlighting management
|
||||
}
|
||||
|
||||
//! 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; }
|
||||
|
||||
//! 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 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:
|
||||
//! if custom style is defined via object's highlight drawer, it will be used. Otherwise,
|
||||
//! 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);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//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
|
||||
//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.
|
||||
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
clearDynamicHighlight();
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -408,11 +387,6 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
&& (!myLastPicked->IsSelected()
|
||||
|| myToHilightSelected))
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
highlightWithColor (myLastPicked, theView->Viewer());
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -431,11 +405,6 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
&& !myLastPicked.IsNull()
|
||||
&& myLastPicked->HasSelectable())
|
||||
{
|
||||
if (isSlowHiStyle (myLastPicked, theView->Viewer()))
|
||||
{
|
||||
theView->Viewer()->Invalidate();
|
||||
}
|
||||
|
||||
clearDynamicHighlight();
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
@@ -453,14 +422,7 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
}
|
||||
else
|
||||
{
|
||||
if (theView->IsInvalidated())
|
||||
{
|
||||
theView->Viewer()->Redraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
theView->Viewer()->RedrawImmediate();
|
||||
}
|
||||
theView->Viewer()->RedrawImmediate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -472,7 +472,33 @@ void AIS_InteractiveObject::SetPolygonOffsets(const Standard_Integer aMode,
|
||||
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
||||
|
||||
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).
|
||||
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:
|
||||
|
||||
Standard_EXPORT virtual Standard_Boolean RecomputeEveryPrs() const;
|
||||
|
@@ -26,7 +26,6 @@
|
||||
#include <Prs3d_Root.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <Prs3d_ToolDisk.hxx>
|
||||
#include <Prs3d_ToolSector.hxx>
|
||||
#include <Prs3d_ToolSphere.hxx>
|
||||
#include <Select3D_SensitiveCircle.hxx>
|
||||
#include <Select3D_SensitivePoint.hxx>
|
||||
@@ -152,19 +151,6 @@ void AIS_Manipulator::init()
|
||||
myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||
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);
|
||||
SetZLayer (Graphic3d_ZLayerId_Topmost);
|
||||
}
|
||||
@@ -184,11 +170,10 @@ Handle(Prs3d_Presentation) AIS_Manipulator::getHighlightPresentation (const Hand
|
||||
|
||||
switch (anOwner->Mode())
|
||||
{
|
||||
case AIS_MM_Translation : return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||
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_Translation: return myAxes[anOwner->Index()].TranslatorHighlightPrs();
|
||||
case AIS_MM_Rotation : return myAxes[anOwner->Index()].RotatorHighlightPrs();
|
||||
case AIS_MM_Scaling : return myAxes[anOwner->Index()].ScalerHighlightPrs();
|
||||
case AIS_MM_None : break;
|
||||
}
|
||||
|
||||
return aDummyPrs;
|
||||
@@ -209,11 +194,10 @@ Handle(Graphic3d_Group) AIS_Manipulator::getGroup (const Standard_Integer theInd
|
||||
|
||||
switch (theMode)
|
||||
{
|
||||
case AIS_MM_Translation : return myAxes[theIndex].TranslatorGroup();
|
||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||
case AIS_MM_TranslationPlane: return myAxes[theIndex].DraggerGroup();
|
||||
case AIS_MM_None : break;
|
||||
case AIS_MM_Translation: return myAxes[theIndex].TranslatorGroup();
|
||||
case AIS_MM_Rotation : return myAxes[theIndex].RotatorGroup();
|
||||
case AIS_MM_Scaling : return myAxes[theIndex].ScalerGroup();
|
||||
case AIS_MM_None : break;
|
||||
}
|
||||
|
||||
return aDummyGroup;
|
||||
@@ -282,10 +266,6 @@ void AIS_Manipulator::SetPart (const Standard_Integer theAxisIndex, const AIS_Ma
|
||||
myAxes[theAxisIndex].SetScaling (theIsEnabled);
|
||||
break;
|
||||
|
||||
case AIS_MM_TranslationPlane:
|
||||
myAxes[theAxisIndex].SetDragging(theIsEnabled);
|
||||
break;
|
||||
|
||||
case AIS_MM_None:
|
||||
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)
|
||||
{
|
||||
for (Standard_Integer anIt = 0; anIt < 4; ++anIt)
|
||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||
{
|
||||
SetPart (anIt, theMode, theIsEnabled);
|
||||
}
|
||||
@@ -420,7 +400,6 @@ void AIS_Manipulator::Attach (const Handle(AIS_ManipulatorObjectSequence)& theOb
|
||||
EnableMode (AIS_MM_Rotation);
|
||||
EnableMode (AIS_MM_Translation);
|
||||
EnableMode (AIS_MM_Scaling);
|
||||
EnableMode (AIS_MM_TranslationPlane);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -607,34 +586,6 @@ Standard_Boolean AIS_Manipulator::ObjectTransformation (const Standard_Integer t
|
||||
myPrevState = anAngle;
|
||||
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:
|
||||
{
|
||||
return Standard_False;
|
||||
@@ -706,9 +657,8 @@ void AIS_Manipulator::Transform (const gp_Trsf& theTrsf)
|
||||
}
|
||||
}
|
||||
|
||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation)
|
||||
|| (myCurrentMode == AIS_MM_TranslationPlane && myBehaviorOnTransform.FollowDragging))
|
||||
if ((myCurrentMode == AIS_MM_Translation && myBehaviorOnTransform.FollowTranslation)
|
||||
|| (myCurrentMode == AIS_MM_Rotation && myBehaviorOnTransform.FollowRotation))
|
||||
{
|
||||
gp_Pnt aPos = myStartPosition.Location().Transformed (theTrsf);
|
||||
gp_Dir aVDir = myStartPosition.Direction().Transformed (theTrsf);
|
||||
@@ -836,13 +786,8 @@ void AIS_Manipulator::DeactivateCurrentMode()
|
||||
Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
|
||||
anAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID);
|
||||
anAspect->SetMaterial (myDrawer->ShadingAspect()->Material());
|
||||
if (myCurrentMode == AIS_MM_TranslationPlane)
|
||||
anAspect->SetTransparency(1.0);
|
||||
else
|
||||
{
|
||||
anAspect->SetTransparency(myDrawer->ShadingAspect()->Transparency());
|
||||
anAspect->SetColor(myAxes[myCurrentIndex].Color());
|
||||
}
|
||||
anAspect->SetTransparency (myDrawer->ShadingAspect()->Transparency());
|
||||
anAspect->SetColor (myAxes[myCurrentIndex].Color());
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (anAspect->Aspect());
|
||||
}
|
||||
@@ -937,14 +882,14 @@ void AIS_Manipulator::Compute (const Handle(PrsMgr_PresentationManager3d)& thePr
|
||||
|
||||
// Display center
|
||||
myCenter.Init (myAxes[0].AxisRadius() * 2.0f, gp::Origin());
|
||||
aGroup = thePrs->NewGroup ();
|
||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
aGroup->SetPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myCenter.Array());
|
||||
|
||||
for (Standard_Integer anIt = 0; anIt < 3; ++anIt)
|
||||
{
|
||||
// Display axes
|
||||
aGroup = thePrs->NewGroup ();
|
||||
aGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
|
||||
Handle(Prs3d_ShadingAspect) anAspectAx = new Prs3d_ShadingAspect (new Graphic3d_AspectFillArea3d(*anAspect->Aspect()));
|
||||
anAspectAx->SetColor (myAxes[anIt].Color());
|
||||
@@ -987,13 +932,7 @@ void AIS_Manipulator::HilightSelected (const Handle(PrsMgr_PresentationManager3d
|
||||
return;
|
||||
}
|
||||
|
||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||
{
|
||||
myDraggerHighlight->SetColor(myAxes[anOwner->Index()].Color());
|
||||
aGroup->SetGroupPrimitivesAspect(myDraggerHighlight->Aspect());
|
||||
}
|
||||
else
|
||||
aGroup->SetGroupPrimitivesAspect(myHighlightAspect->Aspect());
|
||||
aGroup->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||
|
||||
myCurrentIndex = anOwner->Index();
|
||||
myCurrentMode = anOwner->Mode();
|
||||
@@ -1022,20 +961,13 @@ void AIS_Manipulator::HilightOwnerWithColor (const Handle(PrsMgr_PresentationMan
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (anOwner->Mode() == AIS_MM_TranslationPlane)
|
||||
{
|
||||
Handle(Prs3d_Drawer) aStyle = new Prs3d_Drawer();
|
||||
aStyle->SetColor(myAxes[anOwner->Index()].Color());
|
||||
aStyle->SetTransparency(0.5);
|
||||
aPresentation->Highlight(aStyle);
|
||||
}
|
||||
else
|
||||
aPresentation->Highlight(theStyle);
|
||||
aPresentation->Highlight (theStyle);
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPresentation->Groups());
|
||||
aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||
if (!aGrp.IsNull())
|
||||
if (!aGrp.IsNull()
|
||||
&& aGrp->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
aGrp->SetGroupPrimitivesAspect (myHighlightAspect->Aspect());
|
||||
}
|
||||
@@ -1144,38 +1076,6 @@ void AIS_Manipulator::ComputeSelection (const Handle(SelectMgr_Selection)& theSe
|
||||
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);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//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
|
||||
//function : Constructor
|
||||
@@ -1329,7 +1211,6 @@ AIS_Manipulator::Axis::Axis (const gp_Ax1& theAxis,
|
||||
myInnerRadius (myLength + myBoxSize),
|
||||
myDiskThickness (myBoxSize * 0.5f),
|
||||
myIndent (0.2f),
|
||||
myHasDragging(Standard_True),
|
||||
myFacettesNumber (20),
|
||||
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,
|
||||
anArrowLength,
|
||||
myFacettesNumber);
|
||||
myTranslatorGroup = thePrs->NewGroup ();
|
||||
myTranslatorGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
myTranslatorGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||
myTranslatorGroup->AddPrimitiveArray (myTriangleArray);
|
||||
|
||||
@@ -1382,7 +1263,7 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
myCubePos = myReferenceAxis.Direction().XYZ() * (myLength + myIndent);
|
||||
myCube.Init (gp_Ax1 (myCubePos, myReferenceAxis.Direction()), myBoxSize);
|
||||
|
||||
myScalerGroup = thePrs->NewGroup ();
|
||||
myScalerGroup = Prs3d_Root::NewGroup (thePrs);
|
||||
myScalerGroup->SetGroupPrimitivesAspect (theAspect->Aspect());
|
||||
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;
|
||||
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->AddPrimitiveArray (myCircle.Array());
|
||||
|
||||
@@ -1423,36 +1304,4 @@ void AIS_Manipulator::Axis::Compute (const Handle(PrsMgr_PresentationManager)& t
|
||||
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.
|
||||
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& SetFollowRotation (const Standard_Boolean theApply) { FollowRotation = theApply; return *this; }
|
||||
BehaviorOnTransform& SetFollowDragging (const Standard_Boolean theApply) { FollowDragging = theApply; return *this; }
|
||||
|
||||
Standard_Boolean FollowTranslation;
|
||||
Standard_Boolean FollowRotation;
|
||||
Standard_Boolean FollowDragging;
|
||||
};
|
||||
|
||||
//! 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;
|
||||
};
|
||||
|
||||
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.
|
||||
//! It includes sub-objects itself:
|
||||
//! -rotator
|
||||
@@ -510,11 +485,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
{
|
||||
myHighlightRotator->SetTransformPersistence (theTrsfPers);
|
||||
}
|
||||
|
||||
if (!myHighlightDragger.IsNull())
|
||||
{
|
||||
myHighlightDragger->SetTransformPersistence(theTrsfPers);
|
||||
}
|
||||
}
|
||||
|
||||
void Transform (const Handle(Geom_Transformation)& theTransformation)
|
||||
@@ -533,11 +503,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
{
|
||||
myHighlightRotator->SetTransformation (theTransformation);
|
||||
}
|
||||
|
||||
if (!myHighlightDragger.IsNull())
|
||||
{
|
||||
myHighlightDragger->SetTransformation(theTransformation);
|
||||
}
|
||||
}
|
||||
|
||||
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 HasDragging() const { return myHasDragging; }
|
||||
|
||||
void SetTranslation (const Standard_Boolean theIsEnabled) { myHasTranslation = theIsEnabled; }
|
||||
|
||||
void SetRotation (const Standard_Boolean theIsEnabled) { myHasRotation = theIsEnabled; }
|
||||
|
||||
void SetScaling (const Standard_Boolean theIsEnabled) { myHasScaling = theIsEnabled; }
|
||||
|
||||
void SetDragging(const Standard_Boolean theIsEnabled) { myHasDragging = theIsEnabled; }
|
||||
|
||||
Quantity_Color Color() const { return myColor; }
|
||||
|
||||
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)& DraggerHighlightPrs() const { return myHighlightDragger; }
|
||||
|
||||
const Handle(Graphic3d_Group)& TranslatorGroup() const { return myTranslatorGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& RotatorGroup() const { return myRotatorGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& ScalerGroup() const { return myScalerGroup; }
|
||||
|
||||
const Handle(Graphic3d_Group)& DraggerGroup() const { return myDraggerGroup; }
|
||||
|
||||
const Handle(Graphic3d_ArrayOfTriangles)& TriangleArray() const { return myTriangleArray; }
|
||||
|
||||
void SetIndent (const Standard_ShortReal theValue) { myIndent = theValue; }
|
||||
@@ -613,7 +570,6 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
public:
|
||||
|
||||
const gp_Pnt& TranslatorTipPosition() const { return myArrowTipPos; }
|
||||
const Sector& DraggerSector() const { return mySector; }
|
||||
const Disk& RotatorDisk() const { return myCircle; }
|
||||
float RotatorDiskRadius() const { return myCircleRadius; }
|
||||
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 myIndent; //!< Gap between visual part of the manipulator.
|
||||
|
||||
Standard_Boolean myHasDragging;
|
||||
|
||||
protected:
|
||||
|
||||
Standard_Integer myFacettesNumber;
|
||||
|
||||
gp_Pnt myArrowTipPos;
|
||||
Sector mySector;
|
||||
Disk myCircle;
|
||||
float myCircleRadius;
|
||||
Cube myCube;
|
||||
@@ -653,12 +606,10 @@ protected: //! @name Auxiliary classes to fill presentation with proper primitiv
|
||||
Handle(Graphic3d_Group) myTranslatorGroup;
|
||||
Handle(Graphic3d_Group) myScalerGroup;
|
||||
Handle(Graphic3d_Group) myRotatorGroup;
|
||||
Handle(Graphic3d_Group) myDraggerGroup;
|
||||
|
||||
Handle(Prs3d_Presentation) myHighlightTranslator;
|
||||
Handle(Prs3d_Presentation) myHighlightScaler;
|
||||
Handle(Prs3d_Presentation) myHighlightRotator;
|
||||
Handle(Prs3d_Presentation) myHighlightDragger;
|
||||
|
||||
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.
|
||||
Handle(Prs3d_ShadingAspect) myHighlightAspect;
|
||||
|
||||
//! Aspect used to color sector part when it's selected.
|
||||
Handle(Prs3d_ShadingAspect) myDraggerHighlight;
|
||||
public:
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Manipulator, AIS_InteractiveObject)
|
||||
|
@@ -22,8 +22,7 @@ enum AIS_ManipulatorMode
|
||||
AIS_MM_None = 0,
|
||||
AIS_MM_Translation = 1,
|
||||
AIS_MM_Rotation,
|
||||
AIS_MM_Scaling,
|
||||
AIS_MM_TranslationPlane
|
||||
AIS_MM_Scaling
|
||||
};
|
||||
|
||||
#endif
|
@@ -173,8 +173,8 @@ void AIS_PointCloudOwner::Clear (const Handle(PrsMgr_PresentationManager)& thePr
|
||||
//==================================================
|
||||
AIS_PointCloud::AIS_PointCloud()
|
||||
{
|
||||
myDrawer->SetupOwnShadingAspect();
|
||||
myDrawer->ShadingAspect()->Aspect()->SetMarkerType (Aspect_TOM_POINT);
|
||||
// override default point style to Aspect_TOM_POINT
|
||||
myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, Quantity_NOC_YELLOW, 1.0));
|
||||
|
||||
SetDisplayMode (AIS_PointCloud::DM_Points);
|
||||
SetHilightMode (AIS_PointCloud::DM_BndBox);
|
||||
@@ -282,8 +282,52 @@ void AIS_PointCloud::SetColor (const Quantity_Color& 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);
|
||||
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();
|
||||
|
||||
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 aMat = aDefaultMat;
|
||||
Quantity_Color aColor = aDefaultMat.Color();
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
||||
}
|
||||
if (HasMaterial() || myDrawer->HasLink())
|
||||
{
|
||||
aMat = AIS_GraphicTool::GetMaterial (HasMaterial() ? myDrawer : myDrawer->Link());
|
||||
}
|
||||
if (HasMaterial())
|
||||
{
|
||||
Quantity_Color aColor = aDefaultMat.AmbientColor();
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
aColor = myDrawer->Link()->ShadingAspect()->Color (myCurrentFacingModel);
|
||||
}
|
||||
aMat.SetColor (aColor);
|
||||
}
|
||||
if (IsTransparent())
|
||||
@@ -320,10 +378,43 @@ void AIS_PointCloud::UnsetColor()
|
||||
aMat.SetTransparency (Standard_ShortReal(aTransp));
|
||||
}
|
||||
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)
|
||||
{
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
hasOwnMaterial = Standard_True;
|
||||
|
||||
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()->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;
|
||||
}
|
||||
|
||||
if (HasColor()
|
||||
|| IsTransparent())
|
||||
{
|
||||
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
|
||||
myDrawer->ShadingAspect()->SetMaterial (myDrawer->HasLink() ?
|
||||
@@ -366,8 +488,33 @@ void AIS_PointCloud::UnsetMaterial()
|
||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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->AddPrimitiveArray (aPoints);
|
||||
break;
|
||||
|
@@ -28,7 +28,6 @@
|
||||
#include <Geom_Line.hxx>
|
||||
#include <Geom_Plane.hxx>
|
||||
#include <Geom_Surface.hxx>
|
||||
#include <Graphic3d_ArrayOfSegments.hxx>
|
||||
#include <gp_Circ.hxx>
|
||||
#include <gp_Lin.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
@@ -185,13 +184,8 @@ void AIS_Relation::ComputeProjVertexPresentation(const Handle(Prs3d_Presentation
|
||||
pa->SetTypeOfMarker(aProjTOM);
|
||||
}
|
||||
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (ProjPoint);
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||
}
|
||||
// calcul du projete
|
||||
StdPrs_Point::Add(aPrs, new Geom_CartesianPoint(ProjPoint), myDrawer);
|
||||
|
||||
if (!myDrawer->HasOwnWireAspect()){
|
||||
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...
|
||||
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion()))
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
||||
Handle(Graphic3d_ArrayOfSegments) anArrayOfLines = new Graphic3d_ArrayOfSegments (2);
|
||||
anArrayOfLines->AddVertex (ProjPoint);
|
||||
anArrayOfLines->AddVertex (BRep_Tool::Pnt(aVertex));
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->WireAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (anArrayOfLines);
|
||||
if (!ProjPoint.IsEqual (BRep_Tool::Pnt(aVertex),Precision::Confusion())) {
|
||||
// calcul des lignes de rappel
|
||||
BRepBuilderAPI_MakeEdge MakEd (ProjPoint,BRep_Tool::Pnt(aVertex));
|
||||
StdPrs_WFShape::Add (aPrs, MakEd.Edge(), myDrawer);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -392,12 +392,13 @@ void AIS_RubberBand::Compute (const Handle(PrsMgr_PresentationManager3d)& /*theP
|
||||
const Handle(Prs3d_Presentation)& thePresentation,
|
||||
const Standard_Integer /*theMode*/)
|
||||
{
|
||||
Handle (Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
|
||||
|
||||
// Draw filling
|
||||
if (IsFilling() && fillTriangles())
|
||||
{
|
||||
Handle(Graphic3d_Group) aGroup1 = thePresentation->NewGroup();
|
||||
aGroup1->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup1->AddPrimitiveArray (myTriangles);
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->AddPrimitiveArray (myTriangles);
|
||||
}
|
||||
|
||||
// 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->AddPrimitiveArray (myBorders);
|
||||
}
|
||||
|
@@ -77,40 +77,6 @@ static Standard_Boolean IsInList(const TColStd_ListOfInteger& LL, const Standard
|
||||
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
|
||||
// Purpose :
|
||||
@@ -386,7 +352,11 @@ bool AIS_Shape::setColor (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
bool toRecompute = false;
|
||||
toRecompute = theDrawer->SetupOwnShadingAspect() || toRecompute;
|
||||
toRecompute = theDrawer->SetOwnLineAspects() || toRecompute;
|
||||
toRecompute = theDrawer->SetupOwnPointAspect() || toRecompute;
|
||||
|
||||
if (theDrawer->SetupOwnPointAspect())
|
||||
{
|
||||
toRecompute = true;
|
||||
}
|
||||
|
||||
// override color
|
||||
theDrawer->ShadingAspect()->SetColor (theColor, myCurrentFacingModel);
|
||||
@@ -410,19 +380,52 @@ void AIS_Shape::SetColor (const Quantity_Color& theColor)
|
||||
const bool toRecompute = setColor (myDrawer, theColor);
|
||||
myDrawer->SetColor (theColor);
|
||||
hasOwnColor = Standard_True;
|
||||
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
if (!toRecompute)
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
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()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!HasColor())
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
return;
|
||||
}
|
||||
|
||||
hasOwnColor = Standard_False;
|
||||
myDrawer->SetColor (myDrawer->HasLink() ? myDrawer->Link()->Color() : Quantity_Color (Quantity_NOC_WHITE));
|
||||
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
if (!HasWidth())
|
||||
{
|
||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
||||
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)());
|
||||
Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||
myDrawer->SetLineAspect (anEmptyAsp);
|
||||
myDrawer->SetWireAspect (anEmptyAsp);
|
||||
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -538,17 +535,10 @@ void AIS_Shape::UnsetColor()
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceAspectWithDef (aReplaceMap, ShadingAspect);
|
||||
myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
|
||||
}
|
||||
if (myDrawer->HasOwnPointAspect())
|
||||
{
|
||||
replaceAspectWithDef (aReplaceMap, PointAspect);
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
}
|
||||
replaceAspects (aReplaceMap);
|
||||
SynchronizeAspects();
|
||||
recomputeComputed();
|
||||
myDrawer->SetPointAspect (Handle(Prs3d_PointAspect)());
|
||||
myRecomputeEveryPrs = true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -579,19 +569,16 @@ bool AIS_Shape::setWidth (const Handle(Prs3d_Drawer)& theDrawer,
|
||||
void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
||||
{
|
||||
myOwnWidth = theLineWidth;
|
||||
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!setWidth (myDrawer, theLineWidth)
|
||||
|| !myDrawer->HasLink())
|
||||
if (setWidth (myDrawer, theLineWidth))
|
||||
{
|
||||
SynchronizeAspects();
|
||||
myRecomputeEveryPrs = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceWithNewOwnAspects();
|
||||
myRecomputeEveryPrs = false;
|
||||
myToRecomputeModes.Clear();
|
||||
SynchronizeAspects();
|
||||
}
|
||||
recomputeComputed();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -601,30 +588,24 @@ void AIS_Shape::SetWidth (const Standard_Real theLineWidth)
|
||||
|
||||
void AIS_Shape::UnsetWidth()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (myOwnWidth == 0.0)
|
||||
{
|
||||
myToRecomputeModes.Clear();
|
||||
myRecomputeEveryPrs = false;
|
||||
return;
|
||||
}
|
||||
|
||||
myOwnWidth = 0.0;
|
||||
if (!HasColor())
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, LineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, WireAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, UnFreeBoundaryAspect);
|
||||
replaceAspectWithDef (aReplaceMap, SeenLineAspect);
|
||||
replaceAspectWithDef (aReplaceMap, FaceBoundaryAspect);
|
||||
myDrawer->SetLineAspect (Handle(Prs3d_LineAspect)());
|
||||
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);
|
||||
const Handle(Prs3d_LineAspect) anEmptyAsp;
|
||||
myDrawer->SetLineAspect (anEmptyAsp);
|
||||
myDrawer->SetWireAspect (anEmptyAsp);
|
||||
myDrawer->SetFreeBoundaryAspect (anEmptyAsp);
|
||||
myDrawer->SetUnFreeBoundaryAspect(anEmptyAsp);
|
||||
myDrawer->SetSeenLineAspect (anEmptyAsp);
|
||||
myDrawer->SetFaceBoundaryAspect (anEmptyAsp);
|
||||
myRecomputeEveryPrs = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -641,8 +622,9 @@ void AIS_Shape::UnsetWidth()
|
||||
myDrawer->FaceBoundaryAspect() ->SetWidth (myDrawer->HasLink() ?
|
||||
AIS_GraphicTool::GetLineWidth (myDrawer->Link(), AIS_TOA_FaceBoundary) : 1.);
|
||||
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)
|
||||
{
|
||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
||||
setMaterial (myDrawer, theMat, HasColor(), IsTransparent());
|
||||
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();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -701,8 +699,6 @@ void AIS_Shape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
|
||||
void AIS_Shape::UnsetMaterial()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
if (!HasMaterial())
|
||||
{
|
||||
return;
|
||||
@@ -726,15 +722,37 @@ void AIS_Shape::UnsetMaterial()
|
||||
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
|
||||
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
|
||||
}
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, 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)
|
||||
{
|
||||
const bool toRecompute = !myDrawer->HasOwnShadingAspect();
|
||||
setTransparency (myDrawer, 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();
|
||||
if (!toRecompute
|
||||
|| !myDrawer->HasLink())
|
||||
{
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
replaceWithNewOwnAspects();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -781,9 +811,6 @@ void AIS_Shape::SetTransparency (const Standard_Real theValue)
|
||||
|
||||
void AIS_Shape::UnsetTransparency()
|
||||
{
|
||||
myRecomputeEveryPrs = false; // no mode to recalculate, only viewer update
|
||||
myToRecomputeModes.Clear();
|
||||
|
||||
myDrawer->SetTransparency (0.0f);
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
@@ -794,15 +821,36 @@ void AIS_Shape::UnsetTransparency()
|
||||
|| myDrawer->ShadingAspect()->Aspect()->ToMapTexture())
|
||||
{
|
||||
myDrawer->ShadingAspect()->SetTransparency (0.0, myCurrentFacingModel);
|
||||
SynchronizeAspects();
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphic3d_MapOfAspectsToAspects aReplaceMap;
|
||||
replaceAspectWithDef (aReplaceMap, 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;
|
||||
|
||||
//! Replace aspects of already computed groups from drawer link by the new own value.
|
||||
Standard_EXPORT void replaceWithNewOwnAspects();
|
||||
|
||||
public:
|
||||
|
||||
//! Compute HLR presentation for specified shape.
|
||||
|
@@ -218,6 +218,36 @@ void AIS_TexturedShape::SetColor (const Quantity_Color& theColor)
|
||||
void AIS_TexturedShape::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())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
if (!aGroup->IsGroupPrimitivesAspectSet (Graphic3d_ASPECT_FILL_AREA))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
aGroup->SetGroupPrimitivesAspect (myAspect);
|
||||
}
|
||||
}
|
||||
|
@@ -108,7 +108,10 @@ void AIS_Triangulation::updatePresentation()
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//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
|
||||
//purpose : Returns the 3d point.
|
||||
|
@@ -242,9 +242,6 @@ public:
|
||||
//! Returns True if the edge has regularity on some
|
||||
//! two surfaces
|
||||
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.
|
||||
Standard_EXPORT static gp_Pnt Pnt (const TopoDS_Vertex& V);
|
||||
|
@@ -682,7 +682,7 @@ void BRepMesh_Delaun::cleanupMesh()
|
||||
if ( anEdges[aCurEdgeIdx] != aFreeEdgeId )
|
||||
continue;
|
||||
|
||||
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2 && isCanNotBeRemoved; ++anOtherEdgeIt )
|
||||
for ( Standard_Integer anOtherEdgeIt = 1; anOtherEdgeIt <= 2; ++anOtherEdgeIt )
|
||||
{
|
||||
Standard_Integer anOtherEdgeId = ( aCurEdgeIdx + anOtherEdgeIt ) % 3;
|
||||
const BRepMesh_PairOfIndex& anOtherEdgePair =
|
||||
@@ -691,27 +691,7 @@ void BRepMesh_Delaun::cleanupMesh()
|
||||
if ( anOtherEdgePair.Extent() < 2 )
|
||||
{
|
||||
isCanNotBeRemoved = Standard_False;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -57,11 +57,8 @@ BRepMesh_ShapeVisitor::~BRepMesh_ShapeVisitor ()
|
||||
//=======================================================================
|
||||
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& theMFHoles,
|
||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
TopTools_ListOfShape& theInvFaces,
|
||||
TopTools_ListOfShape& theInvertedFaces);
|
||||
TopTools_ListOfShape& theInvFaces);
|
||||
|
||||
static
|
||||
void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
|
||||
@@ -239,8 +238,6 @@ static
|
||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
const TopTools_ListOfShape& theInvertedFaces,
|
||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
const TopoDS_Shape& theFHoles,
|
||||
@@ -261,7 +258,6 @@ static
|
||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||
const TopTools_IndexedMapOfShape& theMFInv,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
TopTools_MapOfShape& theMFToRem);
|
||||
|
||||
static
|
||||
@@ -600,21 +596,6 @@ static
|
||||
void AppendToList(TopTools_ListOfShape& theL,
|
||||
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
|
||||
//purpose : Building splits of already trimmed faces
|
||||
@@ -1007,12 +988,6 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
}
|
||||
#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
|
||||
// may potentially lead to creation of the holes in the faces
|
||||
// preventing from obtaining closed volume in the result
|
||||
@@ -1022,12 +997,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape itLFIm(theFImages(i));
|
||||
for (; itLFIm.More(); itLFIm.Next())
|
||||
{
|
||||
TopExp::MapShapesAndAncestors(itLFIm.Value(), TopAbs_EDGE, TopAbs_FACE, anEFMap);
|
||||
#ifdef OFFSET_DEBUG
|
||||
BRep_Builder().Add(aCFIm1, itLFIm.Value());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
TopTools_ListOfShape anEmptyList;
|
||||
@@ -1036,8 +1006,6 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
// all hole faces
|
||||
TopoDS_Compound aFHoles;
|
||||
aBB.MakeCompound(aFHoles);
|
||||
// Find the faces containing only the inverted edges and the invalid ones
|
||||
TopTools_ListOfShape anInvertedFaces;
|
||||
// find invalid faces
|
||||
// considering faces containing only invalid edges as invalid
|
||||
aItLF.Initialize(aLFDone);
|
||||
@@ -1076,7 +1044,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
// find invalid faces
|
||||
FindInvalidFaces(aLFImages, theInvEdges, theValidEdges, aDMFLVE, aDMFLIE,
|
||||
*pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex,
|
||||
aMFHoles, aMFInvInHole, aLFInv, anInvertedFaces);
|
||||
aMFHoles, aMFInvInHole, aLFInv);
|
||||
}
|
||||
//
|
||||
if (aLFInv.Extent()) {
|
||||
@@ -1127,8 +1095,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
|
||||
//
|
||||
// remove inside faces
|
||||
TopTools_IndexedMapOfShape aMEInside;
|
||||
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges, theInvertedEdges,
|
||||
anInvertedFaces, aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
||||
RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges,
|
||||
aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
|
||||
aMERemoved, aMEInside, theSolids);
|
||||
//
|
||||
// make compound of valid splits
|
||||
@@ -1851,8 +1819,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
const TopTools_MapOfShape& theEdgesInvalidByVertex,
|
||||
const TopTools_MapOfShape& theMFHoles,
|
||||
TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
TopTools_ListOfShape& theInvFaces,
|
||||
TopTools_ListOfShape& theInvertedFaces)
|
||||
TopTools_ListOfShape& theInvFaces)
|
||||
{
|
||||
// The face should be considered as invalid in the following cases:
|
||||
// 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:
|
||||
// 1. Some of the edges are valid for this face.
|
||||
Standard_Boolean bHasValid, bAllValid, bAllInvalid, bHasReallyInvalid, bAllInvNeutral;
|
||||
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral, bInverted;
|
||||
Standard_Boolean bIsInvalidByInverted;
|
||||
Standard_Boolean bValid, bValidLoc, bInvalid, bInvalidLoc, bNeutral;
|
||||
Standard_Integer i, aNbChecked;
|
||||
//
|
||||
// neutral edges
|
||||
@@ -1883,7 +1849,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
aMEValInverted.Add(aItLE.Value());
|
||||
}
|
||||
//
|
||||
Standard_Boolean bTreatInvertedAsInvalid = (theLFImages.Extent() == 1);
|
||||
Standard_Boolean bCheckInverted = (theLFImages.Extent() == 1);
|
||||
//
|
||||
// neutral edges to remove
|
||||
TopTools_IndexedMapOfShape aMENRem;
|
||||
@@ -1917,7 +1883,6 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bAllInvalid = Standard_True;
|
||||
bHasReallyInvalid = Standard_False;
|
||||
bAllInvNeutral = Standard_True;
|
||||
bIsInvalidByInverted = Standard_True;
|
||||
aNbChecked = 0;
|
||||
//
|
||||
const TopoDS_Wire& aWIm = BRepTools::OuterWire(aFIm);
|
||||
@@ -1944,19 +1909,17 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bNeutral = aMEN.Contains(aEIm);
|
||||
bValidLoc = aMVE.Contains(aEIm);
|
||||
//
|
||||
bInverted = theMEInverted.Contains(aEIm);
|
||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
||||
bInvalid = bInverted;
|
||||
if (!bInvalid && bCheckInverted) {
|
||||
bInvalid = theMEInverted.Contains(aEIm);
|
||||
}
|
||||
//
|
||||
if (bValidLoc && (bNeutral || aMEValInverted.Contains(aEIm))) {
|
||||
bHasValid = Standard_True;
|
||||
}
|
||||
//
|
||||
bAllValid &= bValidLoc;
|
||||
bAllInvalid &= bInvalid;
|
||||
bAllInvNeutral &= (bAllInvalid && bNeutral);
|
||||
bIsInvalidByInverted &= (bInvalidLoc || bInverted);
|
||||
bAllValid = bAllValid && bValidLoc;
|
||||
bAllInvalid = bAllInvalid && bInvalid;
|
||||
bAllInvNeutral = bAllInvNeutral && bAllInvalid && bNeutral;
|
||||
}
|
||||
//
|
||||
if (!aNbChecked) {
|
||||
@@ -1991,12 +1954,6 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
continue;
|
||||
}
|
||||
//
|
||||
if (bIsInvalidByInverted && !(bHasValid || bAllValid))
|
||||
{
|
||||
// The face contains only the inverted and locally invalid edges
|
||||
theInvertedFaces.Append(aFIm);
|
||||
}
|
||||
|
||||
if (!bAllInvNeutral) {
|
||||
aLFPT.Append(aFIm);
|
||||
}
|
||||
@@ -2046,7 +2003,7 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
|
||||
bNeutral = aMEN.Contains(aEIm);
|
||||
bValidLoc = aMVE.Contains(aEIm);
|
||||
//
|
||||
if (!bInvalid && bTreatInvertedAsInvalid) {
|
||||
if (!bInvalid && bCheckInverted) {
|
||||
bInvalid = theMEInverted.Contains(aEIm);
|
||||
}
|
||||
//
|
||||
@@ -2916,8 +2873,6 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
|
||||
const TopTools_DataMapOfShapeShape& theArtInvFaces,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
const TopTools_ListOfShape& theInvertedFaces,
|
||||
const TopTools_IndexedMapOfShape& theMFToCheckInt,
|
||||
const TopTools_IndexedMapOfShape& theMFInvInHole,
|
||||
const TopoDS_Shape& theFHoles,
|
||||
@@ -2977,9 +2932,6 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
aMV.SetArguments(aLS);
|
||||
aMV.SetIntersect(Standard_True);
|
||||
aMV.Perform();
|
||||
if (aMV.HasErrors())
|
||||
return;
|
||||
|
||||
//
|
||||
// get shapes connection for using in the rebuilding process
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
// Tool for getting the splits of faces
|
||||
const TopTools_DataMapOfShapeListOfShape& aMVIms = aMV.Images();
|
||||
|
||||
//
|
||||
// update invalid faces with images
|
||||
aNb = aMFInv.Extent();
|
||||
for (i = 1; i <= aNb; ++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 its normal direction - if it has changed relatively the
|
||||
// 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) {
|
||||
aMFToRem.Add(aFS);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aMFToRem.Contains(aFS))
|
||||
continue;
|
||||
|
||||
bAllRemoved = false;
|
||||
bAllInv &= aMFInv.Contains(aFS);
|
||||
//
|
||||
bAllRemoved = bAllRemoved && aMFToRem.Contains(aFS);
|
||||
bAllInv = bAllInv && (aMFToRem.Contains(aFS) || aMFInv.Contains(aFS));
|
||||
}
|
||||
//
|
||||
if (bAllInv && !bAllRemoved) {
|
||||
@@ -3170,7 +3116,7 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
|
||||
}
|
||||
|
||||
// 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
|
||||
RemoveValidSplits(aMFToRem, theFImages, aMV, theMERemoved);
|
||||
@@ -3356,7 +3302,6 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
const TopTools_DataMapOfShapeShape& theDMFImF,
|
||||
const TopTools_IndexedMapOfShape& theMFInv,
|
||||
const TopTools_IndexedMapOfShape& theInvEdges,
|
||||
const TopTools_MapOfShape& theInvertedEdges,
|
||||
TopTools_MapOfShape& theMFToRem)
|
||||
{
|
||||
// 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())
|
||||
{
|
||||
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
|
||||
TopTools_MapOfShape aMEInv;
|
||||
Standard_Integer i, aNbE = theInvEdges.Extent();
|
||||
for (i = 1; i <= aNbE; ++i)
|
||||
TakeModified(theInvEdges(i), aMVIms, aMEInv);
|
||||
|
||||
// Update inverted edges with intersection results
|
||||
TopTools_MapOfShape aMEInverted;
|
||||
for (TopTools_MapIteratorOfMapOfShape itM(theInvertedEdges); itM.More(); itM.Next())
|
||||
TakeModified(itM.Value(), aMVIms, aMEInverted);
|
||||
for (i = 1; i <= aNbE; ++i) {
|
||||
const TopoDS_Shape& aEInv = theInvEdges(i);
|
||||
const TopTools_ListOfShape *pLEIm = aMVIms.Seek(aEInv);
|
||||
if (pLEIm)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLEIm(*pLEIm);
|
||||
for (; aItLEIm.More(); aItLEIm.Next())
|
||||
aMEInv.Add(aItLEIm.Value());
|
||||
}
|
||||
else
|
||||
aMEInv.Add(aEInv);
|
||||
}
|
||||
|
||||
// Tool for getting the origins of the splits
|
||||
const TopTools_DataMapOfShapeListOfShape& aMVOrs = theMV.Origins();
|
||||
|
||||
// Find hanging blocks to remove
|
||||
TopTools_ListOfShape aBlocksToRemove;
|
||||
|
||||
TopTools_ListIteratorOfListOfShape aItLCBH(aLCBHangs);
|
||||
for (; aItLCBH.More(); aItLCBH.Next())
|
||||
{
|
||||
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
|
||||
Standard_Boolean bHasInvalidFace = Standard_False;
|
||||
// Check connectivity to invalid parts
|
||||
@@ -3460,7 +3406,7 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
if (!bIsConnected)
|
||||
{
|
||||
// check edges
|
||||
anExpE.Init(aF, TopAbs_EDGE);
|
||||
TopExp_Explorer anExpE(aF, TopAbs_EDGE);
|
||||
for (; anExpE.More() && !bIsConnected; anExpE.Next())
|
||||
{
|
||||
const TopoDS_Shape& aE = anExpE.Current();
|
||||
@@ -3473,20 +3419,17 @@ void RemoveHangingParts(const BOPAlgo_MakerVolume& theMV,
|
||||
}
|
||||
}
|
||||
// check vertices
|
||||
if (!bIsConnected)
|
||||
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
||||
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
||||
{
|
||||
TopExp_Explorer anExpV(aF, TopAbs_VERTEX);
|
||||
for (; anExpV.More() && !bIsConnected; anExpV.Next())
|
||||
const TopoDS_Shape& aV = anExpV.Current();
|
||||
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
||||
if (pLE)
|
||||
{
|
||||
const TopoDS_Shape& aV = anExpV.Current();
|
||||
const TopTools_ListOfShape *pLE = aDMVE.Seek(aV);
|
||||
if (pLE)
|
||||
{
|
||||
TopTools_ListIteratorOfListOfShape aItLE(*pLE);
|
||||
for (; aItLE.More() && !bIsConnected; aItLE.Next())
|
||||
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);
|
||||
|
||||
if (bRemove)
|
||||
aBlocksToRemove.Append(aCBH);
|
||||
}
|
||||
|
||||
// remove the invalidated blocks
|
||||
aItLCBH.Initialize(aBlocksToRemove);
|
||||
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());
|
||||
{
|
||||
// remove the block
|
||||
anExpF.Init(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_ListIteratorOfListOfShape aIt(theLA);
|
||||
for (; aIt.More(); aIt.Next())
|
||||
{
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
const TopoDS_Shape& aS = aIt.Value();
|
||||
//
|
||||
TopTools_ListOfShape* pLSIm = theImages.ChangeSeek(aS);
|
||||
if (!pLSIm)
|
||||
{
|
||||
if (!pLSIm) {
|
||||
const TopTools_ListOfShape& aLSIm = theGF.Modified(aS);
|
||||
if (aLSIm.Extent())
|
||||
{
|
||||
if (aLSIm.Extent()) {
|
||||
theImages.Bind(aS, aLSIm);
|
||||
theModified.Add(aS);
|
||||
}
|
||||
@@ -7009,14 +6944,27 @@ void UpdateImages(const TopTools_ListOfShape& theLA,
|
||||
//
|
||||
// check modifications of the images
|
||||
TopTools_ListIteratorOfListOfShape aIt1(*pLSIm);
|
||||
for (; aIt1.More(); aIt1.Next())
|
||||
{
|
||||
for (; aIt1.More(); aIt1.Next()) {
|
||||
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;
|
||||
theModified.Add(aS);
|
||||
}
|
||||
@@ -7151,61 +7099,3 @@ void AppendToList(TopTools_ListOfShape& theList,
|
||||
}
|
||||
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.
|
||||
//! 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.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! 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.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! 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.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -85,7 +85,7 @@ public:
|
||||
|
||||
//! Transform the bounding box with the given transformation.
|
||||
//! 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.
|
||||
//! Returns True if the point is outside.
|
||||
|
@@ -213,7 +213,7 @@ public:
|
||||
//! Applying a geometric transformation (for example, a
|
||||
//! rotation) to a bounding box generally increases its
|
||||
//! 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>.
|
||||
Standard_EXPORT void Add (const Bnd_Box& Other);
|
||||
|
@@ -160,7 +160,7 @@ public:
|
||||
//! Applying a geometric transformation (for example, a
|
||||
//! rotation) to a bounding box generally increases its
|
||||
//! 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>.
|
||||
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);
|
||||
// There are ponts on the border, and internal points are found
|
||||
if (derive.Magnitude() > Precision::PConfusion()) {
|
||||
derive.Normalize();
|
||||
derive.Normalized();
|
||||
derive.Rotate(M_PI/2);
|
||||
AS.Initialize(f1);
|
||||
ResU = AS.UResolution(TolE);
|
||||
|
@@ -128,7 +128,7 @@ Standard_Boolean Contap_ArcFunction::Derivative (const Standard_Real U,
|
||||
dnorm = d2uv.Crossed(d1v) + d1u.Crossed(d2v);
|
||||
dfv = (dnorm.Dot(myDir)-myCosAng*dnorm.Dot(norm))/myMean;
|
||||
*/
|
||||
norm.Normalize();
|
||||
norm.Normalized();
|
||||
dfu = (dnu.Dot(myDir)-myCosAng*dnu.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);
|
||||
}
|
||||
//=======================================================================
|
||||
//function : getShape
|
||||
//purpose :
|
||||
//function : Get
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TopoDS_Shape DBRep::getShape (Standard_CString& theName,
|
||||
TopAbs_ShapeEnum theType,
|
||||
Standard_Boolean theToComplain)
|
||||
TopoDS_Shape DBRep::Get(Standard_CString& name,
|
||||
const TopAbs_ShapeEnum typ,
|
||||
const Standard_Boolean complain)
|
||||
{
|
||||
const Standard_Boolean toPick = theName[0] == '.';
|
||||
Handle(DBRep_DrawableShape) aDrawable = Handle(DBRep_DrawableShape)::DownCast (Draw::Get (theName));
|
||||
if (aDrawable.IsNull())
|
||||
{
|
||||
return TopoDS_Shape();
|
||||
}
|
||||
|
||||
TopoDS_Shape aShape = aDrawable->Shape();
|
||||
if (theType != TopAbs_SHAPE
|
||||
&& theType != aShape.ShapeType()
|
||||
&& toPick)
|
||||
{
|
||||
// try to find prom pick
|
||||
Standard_Real u, v;
|
||||
DBRep_DrawableShape::LastPick (aShape, u, v);
|
||||
}
|
||||
if (theType != TopAbs_SHAPE
|
||||
&& theType != aShape.ShapeType())
|
||||
{
|
||||
if (theToComplain)
|
||||
{
|
||||
std::cout << theName << " is not a ";
|
||||
TopAbs::Print (theType, std::cout);
|
||||
std::cout << " but a ";
|
||||
TopAbs::Print (aShape.ShapeType(), std::cout);
|
||||
std::cout << std::endl;
|
||||
Standard_Boolean pick = name[0] == '.';
|
||||
TopoDS_Shape S;
|
||||
Handle(DBRep_DrawableShape) D;
|
||||
Handle(Draw_Drawable3D) DD = Draw::Get(name,complain);
|
||||
if (!DD.IsNull())
|
||||
D = Handle(DBRep_DrawableShape)::DownCast(DD);
|
||||
if (!D.IsNull()) {
|
||||
S = D->Shape();
|
||||
if (typ != TopAbs_SHAPE) {
|
||||
if (typ != S.ShapeType()) {
|
||||
// try to find prom pick
|
||||
if (pick) {
|
||||
Standard_Real u,v;
|
||||
DBRep_DrawableShape::LastPick(S,u,v);
|
||||
}
|
||||
}
|
||||
if (typ != S.ShapeType()) {
|
||||
if (complain) {
|
||||
cout << name << " is not a ";
|
||||
TopAbs::Print(typ,cout);
|
||||
cout << " but a ";
|
||||
TopAbs::Print(S.ShapeType(),cout);
|
||||
cout << endl;
|
||||
}
|
||||
S = TopoDS_Shape();
|
||||
}
|
||||
}
|
||||
return TopoDS_Shape();
|
||||
}
|
||||
return aShape;
|
||||
return S;
|
||||
}
|
||||
|
||||
static Standard_Integer XProgress (Draw_Interpretor& di, Standard_Integer argc, const char **argv)
|
||||
|
@@ -17,10 +17,23 @@
|
||||
#ifndef _DBRep_HeaderFile
|
||||
#define _DBRep_HeaderFile
|
||||
|
||||
#include <Draw_Interpretor.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_DefineAlloc.hxx>
|
||||
#include <Standard_Handle.hxx>
|
||||
|
||||
#include <Standard_CString.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
|
||||
//! package.
|
||||
@@ -41,46 +54,12 @@ public:
|
||||
//! variable if already set.
|
||||
Standard_EXPORT static void Set (const Standard_CString Name, const TopoDS_Shape& S);
|
||||
|
||||
//! 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 (Standard_CString& theName, TopAbs_ShapeEnum theType = TopAbs_SHAPE, Standard_Boolean theToComplain = 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);
|
||||
}
|
||||
|
||||
//! Returns the shape in the variable <Name>. Returns
|
||||
//! a null shape if the variable is not set or not of
|
||||
//! the given <Typ>. If <Complain> is True a message
|
||||
//! is printed on cout if the variable is not set.
|
||||
Standard_EXPORT static TopoDS_Shape Get (Standard_CString& Name, const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, const Standard_Boolean Complain = Standard_False);
|
||||
|
||||
//! Defines the basic commands.
|
||||
Standard_EXPORT static void BasicCommands (Draw_Interpretor& theCommands);
|
||||
|
||||
@@ -107,16 +86,32 @@ public:
|
||||
//! get progress indicator
|
||||
Standard_EXPORT static Standard_Integer Discretisation();
|
||||
|
||||
|
||||
|
||||
|
||||
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,
|
||||
TopAbs_ShapeEnum theType,
|
||||
Standard_Boolean theToComplain);
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
|
||||
friend class DBRep_Edge;
|
||||
friend class DBRep_Face;
|
||||
friend class DBRep_HideData;
|
||||
friend class DBRep_DrawableShape;
|
||||
friend class DBRep_IsoBuilder;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _DBRep_HeaderFile
|
||||
|
@@ -75,7 +75,7 @@ Standard_Boolean DDF::GetDF (Standard_CString& Name,
|
||||
Handle(TDF_Data)& DF,
|
||||
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 (Draw::Get(Name, Complain));
|
||||
if (!DDF.IsNull()) {
|
||||
|
@@ -103,12 +103,8 @@ static Standard_Integer DFOpenLabel (Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 2) return 1;
|
||||
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
|
||||
TDF_Label 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;
|
||||
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
|
||||
TDF_Label 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;
|
||||
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
Handle(DDF_Browser) browser =
|
||||
Handle(DDF_Browser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
|
||||
const Standard_Integer index = Draw::Atoi(a[2]);
|
||||
TCollection_AsciiString list = browser->OpenAttribute(index);
|
||||
|
@@ -86,26 +86,18 @@ static Standard_Integer DDataStd_PNT (Draw_Interpretor& di,
|
||||
//purpose : Rmdraw (name)
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& ,
|
||||
static Standard_Integer DDataStd_Rmdraw (Draw_Interpretor& di,
|
||||
Standard_Integer nb,
|
||||
const char** arg)
|
||||
{
|
||||
if (nb != 2)
|
||||
{
|
||||
std::cout << "Syntax error: wrong number of arguments\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (Handle(Draw_Drawable3D) D3D = Draw::Get (arg[1]))
|
||||
{
|
||||
dout.RemoveDrawable (D3D);
|
||||
if (nb == 2) {
|
||||
Handle(Draw_Drawable3D) D3D;
|
||||
D3D = Draw::Get(arg[1],Standard_True);
|
||||
if (!D3D.IsNull()) dout.RemoveDrawable(D3D);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Syntax error: variable '" << arg[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
di << "DDataStd_Rmdraw : Error : not done\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -347,12 +347,8 @@ static Standard_Integer DDataStd_OpenNode (Draw_Interpretor& di,
|
||||
{
|
||||
if (n < 2) return 1;
|
||||
|
||||
Handle(DDataStd_TreeBrowser) browser = Handle(DDataStd_TreeBrowser)::DownCast (Draw::GetExisting (a[1]));
|
||||
if (browser.IsNull())
|
||||
{
|
||||
std::cout << "Syntax error: browser '" << a[1] << "' not found\n";
|
||||
return 1;
|
||||
}
|
||||
Handle(DDataStd_TreeBrowser) browser =
|
||||
Handle(DDataStd_TreeBrowser)::DownCast (Draw::Get(a[1], Standard_True));
|
||||
|
||||
TDF_Label 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,
|
||||
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 (Complain) cout << Name << " is not a Document" << endl;
|
||||
return Standard_False;
|
||||
|
@@ -348,10 +348,8 @@ static Standard_Integer DDocStd_Close (Draw_Interpretor& /*theDI*/,
|
||||
|
||||
aDocApp->Close (aDoc);
|
||||
|
||||
if (Handle(Draw_Drawable3D) aDrawable = Draw::GetExisting (aDocName))
|
||||
{
|
||||
dout.RemoveDrawable (aDrawable);
|
||||
}
|
||||
Handle(Draw_Drawable3D) aDrawable = Draw::Get (aDocName, Standard_False);
|
||||
dout.RemoveDrawable (aDrawable);
|
||||
Draw::Set (theArgVec[1], Handle(Draw_Drawable3D)());
|
||||
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)
|
||||
{
|
||||
if ( argc < 4 ) { di << "ERROR: Too few args\n"; return 1; }
|
||||
Handle(DDF_Browser) browser = Handle(DDF_Browser)::DownCast (Draw::GetExisting (argv[1]));
|
||||
if ( browser.IsNull() ) { std::cout << "Syntax error: Not a browser: " << argv[1] << "\n"; return 1; }
|
||||
if ( argc <4 ) { di << "ERROR: Too few args\n"; return 0; }
|
||||
Handle(DDF_Browser) browser =
|
||||
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_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] );
|
||||
TDF_AttributeIterator itr(lab,Standard_False);
|
||||
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();
|
||||
if ( att->IsKind(STANDARD_TYPE(TDataStd_TreeNode)) )
|
||||
|
@@ -132,7 +132,7 @@ static Standard_Integer DNaming_TCopyShape (Draw_Interpretor& di,
|
||||
DNaming_DataMapIteratorOfDataMapOfShapeOfName itrn(aDMapOfShapeOfName);
|
||||
for(;itrn.More();itrn.Next()) {
|
||||
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);
|
||||
di.AppendElement(name.ToCString());
|
||||
}
|
||||
|
@@ -73,18 +73,16 @@ public:
|
||||
|
||||
//! Returns main DRAW interpretor.
|
||||
Standard_EXPORT static Draw_Interpretor& GetInterpretor();
|
||||
|
||||
//! Returns a variable value.
|
||||
//! The name "." does a graphic selection; in this case theName will be is overwritten with the name of the variable.
|
||||
static Handle(Draw_Drawable3D) Get (Standard_CString& theName) { return getDrawable (theName, Standard_True); }
|
||||
|
||||
//! Returns a variable value.
|
||||
static Handle(Draw_Drawable3D) GetExisting (const Standard_CString& theName)
|
||||
{
|
||||
Standard_CString aName = theName;
|
||||
return getDrawable (aName, Standard_False);
|
||||
}
|
||||
|
||||
|
||||
//! Returns a variable value. Null if the variable
|
||||
//! does not exist, a warning is printed if Complain
|
||||
//! is True.
|
||||
//!
|
||||
//! The name "." does a graphic selection. If the
|
||||
//! selection is a variable <Name> is overwritten with
|
||||
//! the name of the variable.
|
||||
Standard_EXPORT static Handle(Draw_Drawable3D) Get (Standard_CString& Name, const Standard_Boolean Complain = Standard_True);
|
||||
|
||||
//! Gets a numeric variable. Returns True if the
|
||||
//! variable exist.
|
||||
Standard_EXPORT static Standard_Boolean Get (const Standard_CString Name, Standard_Real& val);
|
||||
@@ -131,16 +129,20 @@ public:
|
||||
//! Defines Draw unit commands
|
||||
Standard_EXPORT static void UnitCommands (Draw_Interpretor& I);
|
||||
|
||||
|
||||
|
||||
|
||||
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:
|
||||
|
||||
|
||||
|
||||
|
||||
friend class Draw_Drawable3D;
|
||||
friend class Draw_Drawable2D;
|
||||
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)
|
||||
{
|
||||
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())
|
||||
di << "0";
|
||||
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)
|
||||
{
|
||||
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())
|
||||
di << "0";
|
||||
else {
|
||||
@@ -814,63 +814,75 @@ void Draw::Set(const Standard_CString name,
|
||||
//function : Set
|
||||
//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)))
|
||||
{
|
||||
aNumber->Value (theValue);
|
||||
if ((Name[0] == '.') && (Name[1] == '\0')) return;
|
||||
Standard_CString aName = Name;
|
||||
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
|
||||
{
|
||||
aNumber = new Draw_Number (theValue);
|
||||
Draw::Set (theName, aNumber, Standard_False);
|
||||
}
|
||||
N->Value(val);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : getDrawable
|
||||
//purpose :
|
||||
//function : Get
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Handle(Draw_Drawable3D) Draw::getDrawable (Standard_CString& theName,
|
||||
Standard_Boolean theToAllowPick)
|
||||
Handle(Draw_Drawable3D) Draw::Get(Standard_CString& name,
|
||||
const Standard_Boolean )
|
||||
{
|
||||
const Standard_Boolean toPick = ((theName[0] == '.') && (theName[1] == '\0'));
|
||||
if (!toPick)
|
||||
{
|
||||
ClientData aCD = Tcl_VarTraceInfo (Draw::GetInterpretor().Interp(), theName, TCL_TRACE_UNSETS | TCL_TRACE_WRITES, tracevar, NULL);
|
||||
Handle(Draw_Drawable3D) aDrawable = reinterpret_cast<Draw_Drawable3D*>(aCD);
|
||||
return theVariables.Contains (aDrawable)
|
||||
? aDrawable
|
||||
: Handle(Draw_Drawable3D)();
|
||||
Standard_Boolean pick = ((name[0] == '.') && (name[1] == '\0'));
|
||||
Handle(Draw_Drawable3D) D;
|
||||
if (pick) {
|
||||
cout << "Pick an object" << endl;
|
||||
dout.Select(p_id,p_X,p_Y,p_b);
|
||||
dout.Pick(p_id,p_X,p_Y,5,D,0);
|
||||
if (!D.IsNull()) {
|
||||
if (D->Name()) {
|
||||
name = p_Name = D->Name();
|
||||
//p_Name = (char *)D->Name();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!theToAllowPick)
|
||||
{
|
||||
return Handle(Draw_Drawable3D)();
|
||||
else {
|
||||
ClientData aCD =
|
||||
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
|
||||
}
|
||||
|
||||
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;
|
||||
return D;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean Draw::Get (const Standard_CString theName,
|
||||
Standard_Real& theValue)
|
||||
Standard_Boolean Draw::Get(const Standard_CString name,
|
||||
Standard_Real& val)
|
||||
{
|
||||
if (Handle(Draw_Number) aNumber = Handle(Draw_Number)::DownCast (Draw::GetExisting (theName)))
|
||||
{
|
||||
theValue = aNumber->Value();
|
||||
return Standard_True;
|
||||
if ((name[0] == '.') && (name[1] == '\0')) {
|
||||
return Standard_False;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@@ -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.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
proc checktrend {listval delta tolerance message} {
|
||||
set nbval [llength $listval]
|
||||
if { $nbval < 3} {
|
||||
if { $nbval < 5} {
|
||||
return 0
|
||||
}
|
||||
|
||||
|
@@ -55,11 +55,12 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
const DsgPrs_ArrowSide ArrowSide,
|
||||
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();
|
||||
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) {
|
||||
case DsgPrs_AS_NONE:
|
||||
@@ -68,7 +69,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
}
|
||||
case DsgPrs_AS_FIRSTAR:
|
||||
{
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw(Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -78,7 +79,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
case DsgPrs_AS_LASTAR:
|
||||
{
|
||||
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -88,12 +89,12 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
|
||||
case DsgPrs_AS_BOTHAR:
|
||||
{
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
LA->ArrowAspect()->Length());
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -126,11 +127,15 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
{
|
||||
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 (pt2.X(), pt2.Y(), pt2.Z());
|
||||
aGroup->SetGroupPrimitivesAspect (aMarkerAsp);
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints1);
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->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;
|
||||
}
|
||||
@@ -138,7 +143,7 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
case DsgPrs_AS_FIRSTAR_LASTPT:
|
||||
{
|
||||
// an Arrow
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt1,
|
||||
dir1,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
@@ -146,28 +151,25 @@ void DsgPrs::ComputeSymbol (const Handle(Prs3d_Presentation)& aPresentation,
|
||||
// a Round
|
||||
Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
|
||||
anArrayOfPoints->AddVertex (pt2.X(), pt2.Y(), pt2.Z());
|
||||
aGroup->SetPrimitivesAspect (aMarkerAsp);
|
||||
aGroup->AddPrimitiveArray (anArrayOfPoints);
|
||||
Prs3d_Root::CurrentGroup(aPresentation)->AddPrimitiveArray (anArrayOfPoints);
|
||||
break;
|
||||
}
|
||||
|
||||
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
|
||||
Prs3d_Arrow::Draw (aGroup,
|
||||
Prs3d_Arrow::Draw (Prs3d_Root::CurrentGroup (aPresentation),
|
||||
pt2,
|
||||
dir2,
|
||||
LA->ArrowAspect()->Angle(),
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@@ -162,14 +162,13 @@ void Extrema_ExtPElS::Perform(const gp_Pnt& P,
|
||||
myDone = Standard_True;
|
||||
return;
|
||||
}
|
||||
gp_Vec DirZ;
|
||||
if (M.SquareDistance(O) < Tol * Tol)
|
||||
{
|
||||
DirZ = (A < 0 ? -OZ : OZ);
|
||||
}
|
||||
else
|
||||
DirZ = gp_Vec(M, O);
|
||||
|
||||
gp_Vec DirZ;
|
||||
if (M.SquareDistance(O)<Tol * Tol)
|
||||
{ DirZ=OZ;
|
||||
if( A<0) DirZ.Multiplied(-1.);
|
||||
}
|
||||
else
|
||||
DirZ=gp_Vec(M,O);
|
||||
// Projection of P in the reference plane of the cone ...
|
||||
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());
|
||||
x--;
|
||||
const Standard_Real * b = &B(B.Lower());
|
||||
Standard_Real * b = &B(B.Lower());
|
||||
b--;
|
||||
const Standard_Real * SMA = &SMatrix->Value(1);
|
||||
SMA --;
|
||||
@@ -207,7 +207,7 @@ FEmTool_ProfileMatrix::FEmTool_ProfileMatrix(const TColStd_Array1OfInteger& Firs
|
||||
Standard_Integer i, j, jj, DiagAddr, CurrAddr;
|
||||
Standard_Real * m = &MX(MX.Lower());
|
||||
m--;
|
||||
const Standard_Real * x = &X(X.Lower());
|
||||
Standard_Real * x = &X(X.Lower());
|
||||
x--;
|
||||
const Standard_Real * PM = &ProfileMatrix->Value(1);
|
||||
PM--;
|
||||
|
@@ -65,7 +65,7 @@ public:
|
||||
Standard_EXPORT void Reverse();
|
||||
|
||||
//! 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.
|
||||
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;
|
||||
|
||||
//! 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.
|
||||
//! Warnings :
|
||||
|
@@ -99,21 +99,21 @@ public:
|
||||
//! (see class Transformation of the package Geom).
|
||||
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.
|
||||
Standard_EXPORT virtual Handle(Geom_Geometry) Copy() const = 0;
|
||||
|
@@ -79,7 +79,7 @@ public:
|
||||
//! Reverses the U direction of parametrization of <me>.
|
||||
//! The bounds of the surface are not modified.
|
||||
//! 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
|
||||
//! the point of parameter U on <me>.
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
//! Reverses the V direction of parametrization of <me>.
|
||||
//! The bounds of the surface are not modified.
|
||||
//! 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
|
||||
//! the point of parameter V on <me>.
|
||||
|
@@ -160,12 +160,12 @@ public:
|
||||
//! Raised if the the transformation is singular. This means that
|
||||
//! the ScaleFactor is lower or equal to Resolution from
|
||||
//! 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>.
|
||||
//! <me> * Other.
|
||||
//! 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> .
|
||||
//! <me> = <me> * Other.
|
||||
|
@@ -47,7 +47,7 @@ public:
|
||||
|
||||
|
||||
//! 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
|
||||
//! vector and vector Other. The result is a value between 0 and Pi.
|
||||
|
@@ -80,7 +80,7 @@ public:
|
||||
|
||||
|
||||
//! 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
|
||||
@@ -106,12 +106,12 @@ public:
|
||||
|
||||
|
||||
//! 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.
|
||||
//! 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.
|
||||
@@ -127,15 +127,14 @@ public:
|
||||
//!
|
||||
//! Raised if the magnitude of the vector is lower or equal to
|
||||
//! 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>.
|
||||
Standard_EXPORT void Subtract (const Handle(Geom_Vector)& Other);
|
||||
|
||||
|
||||
//! Subtracts the vector Other to <me>. A new vector is returned.
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
||||
Standard_EXPORT Handle(Geom_VectorWithMagnitude) Subtracted (const Handle(Geom_Vector)& Other) const;
|
||||
|
||||
//! Applies the transformation T to this vector.
|
||||
Standard_EXPORT void Transform (const gp_Trsf& T) Standard_OVERRIDE;
|
||||
|
@@ -64,7 +64,7 @@ public:
|
||||
//! Note:
|
||||
//! - Reverse assigns the result to this axis, while
|
||||
//! - 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.
|
||||
Standard_EXPORT void SetAxis (const gp_Ax2d& A);
|
||||
|
@@ -110,7 +110,7 @@ public:
|
||||
//! - the end point of the initial curve becomes the start
|
||||
//! point of the reversed 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.
|
||||
//! Warnings :
|
||||
|
@@ -94,19 +94,19 @@ public:
|
||||
//! itself. A copy of the object is returned.
|
||||
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;
|
||||
|
||||
|
@@ -170,15 +170,14 @@ public:
|
||||
//! Computes the inverse of this transformation and creates a new one.
|
||||
//! Raises ConstructionError if the the transformation is singular. This means that
|
||||
//! 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>.
|
||||
//! <me> * Other.
|
||||
//! Returns a new transformation
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
||||
Standard_EXPORT Handle(Geom2d_Transformation) Multiplied (const Handle(Geom2d_Transformation)& Other) const;
|
||||
Handle(Geom2d_Transformation) operator * (const Handle(Geom2d_Transformation)& Other) const
|
||||
{
|
||||
return Multiplied(Other);
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@ public:
|
||||
Standard_EXPORT void Reverse();
|
||||
|
||||
//! 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
|
||||
//! 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 {
|
||||
|
||||
gp_Vec2d V = gpVec2d.Normalized();
|
||||
gp_Vec2d V = gpVec2d;
|
||||
V.Normalized ();
|
||||
return new VectorWithMagnitude (V);
|
||||
}
|
||||
|
||||
|
@@ -80,9 +80,8 @@ void operator += (const Handle(Geom2d_Vector)& Other)
|
||||
|
||||
|
||||
//! Adds the vector Other to <me>.
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Added (const Handle(Geom2d_Vector)& Other) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator + (const Handle(Geom2d_Vector)& Other) const
|
||||
{
|
||||
return Added(Other);
|
||||
}
|
||||
@@ -105,8 +104,8 @@ void operator /= (const Standard_Real Scalar)
|
||||
|
||||
|
||||
//! Divides <me> by a scalar. A new vector is returned.
|
||||
Standard_EXPORT Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Divided (const Standard_Real Scalar) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator / (const Standard_Real Scalar) const
|
||||
{
|
||||
return Divided(Scalar);
|
||||
}
|
||||
@@ -117,7 +116,7 @@ Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator / (const Standard
|
||||
//!
|
||||
//! -C++: alias operator *
|
||||
//! 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.
|
||||
@@ -137,7 +136,7 @@ void operator *= (const Standard_Real Scalar)
|
||||
//!
|
||||
//! Raised if the magnitude of the vector is lower or equal to
|
||||
//! 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>.
|
||||
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.
|
||||
Standard_EXPORT Standard_NODISCARD
|
||||
Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
||||
Standard_NODISCARD Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
||||
Standard_EXPORT Handle(Geom2d_VectorWithMagnitude) Subtracted (const Handle(Geom2d_Vector)& Other) const;
|
||||
Handle(Geom2d_VectorWithMagnitude) operator - (const Handle(Geom2d_Vector)& Other) const
|
||||
{
|
||||
return Subtracted(Other);
|
||||
}
|
||||
|
@@ -252,7 +252,7 @@ void GeomFill_GuideTrihedronPlan::SetCurve(const Handle(Adaptor3d_HCurve)& C)
|
||||
|
||||
Normal = n.Normalized();
|
||||
BiNormal = Tangent.Crossed(Normal);
|
||||
BiNormal.Normalize();
|
||||
BiNormal.Normalized();
|
||||
}
|
||||
else { // Erreur...
|
||||
#ifdef OCCT_DEBUG
|
||||
|
@@ -1381,7 +1381,7 @@ void GeomFill_LocationGuide::Resolution (const Standard_Integer ,
|
||||
//Function : InitX
|
||||
//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;
|
||||
|
@@ -186,7 +186,7 @@ private:
|
||||
|
||||
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_SectionLaw) mySec;
|
||||
|
@@ -124,7 +124,7 @@ gp_Vec GeomFill_TgtOnCoons::D1(const Standard_Real W) const
|
||||
|
||||
Standard_Real scal = tgsc.Dot(n);
|
||||
gp_Vec scaln = n.Multiplied(-scal);
|
||||
tgsc.Add(scaln);
|
||||
tgsc.Added(scaln);
|
||||
|
||||
gp_Vec scaldn = dn.Multiplied(-scal);
|
||||
|
||||
|
@@ -11,8 +11,6 @@ Graphic3d_ArrayOfSegments.hxx
|
||||
Graphic3d_ArrayOfTriangleFans.hxx
|
||||
Graphic3d_ArrayOfTriangles.hxx
|
||||
Graphic3d_ArrayOfTriangleStrips.hxx
|
||||
Graphic3d_Aspects.cxx
|
||||
Graphic3d_Aspects.hxx
|
||||
Graphic3d_AspectFillArea3d.cxx
|
||||
Graphic3d_AspectFillArea3d.hxx
|
||||
Graphic3d_AspectLine3d.cxx
|
||||
@@ -21,6 +19,7 @@ Graphic3d_AspectMarker3d.cxx
|
||||
Graphic3d_AspectMarker3d.hxx
|
||||
Graphic3d_AspectText3d.cxx
|
||||
Graphic3d_AspectText3d.hxx
|
||||
Graphic3d_AspectTextDefinitionError.hxx
|
||||
Graphic3d_AttribBuffer.cxx
|
||||
Graphic3d_AttribBuffer.hxx
|
||||
Graphic3d_BndBox3d.hxx
|
||||
@@ -74,7 +73,6 @@ Graphic3d_IndexedMapOfAddress.hxx
|
||||
Graphic3d_LevelOfTextureAnisotropy.hxx
|
||||
Graphic3d_LightSet.cxx
|
||||
Graphic3d_LightSet.hxx
|
||||
Graphic3d_MapOfAspectsToAspects.hxx
|
||||
Graphic3d_MapIteratorOfMapOfStructure.hxx
|
||||
Graphic3d_MapOfObject.hxx
|
||||
Graphic3d_MapOfStructure.hxx
|
||||
|
@@ -15,15 +15,30 @@
|
||||
|
||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Graphic3d_Aspects)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectFillArea3d, Standard_Transient)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectFillArea3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
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 Graphic3d_MaterialAspect& theFrontMaterial,
|
||||
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;
|
||||
myBackMaterial = theBackMaterial;
|
||||
myInteriorColor.SetRGB (theInteriorColor);
|
||||
myBackInteriorColor.SetRGB (theInteriorColor);
|
||||
myEdgeColor.SetRGB (theEdgeColor);
|
||||
myInteriorStyle = theInteriorStyle;
|
||||
myLineType = theEdgeLineType;
|
||||
SetEdgeWidth ((float )theEdgeLineWidth);
|
||||
if (theEdgeLineWidth <= 0.0)
|
||||
{
|
||||
throw Aspect_AspectFillAreaDefinitionError("Bad value for EdgeLineWidth");
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// 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
|
||||
#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).
|
||||
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:
|
||||
|
||||
//! 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& 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:
|
||||
|
||||
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(); }
|
||||
|
||||
//! 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
|
||||
|
@@ -15,30 +15,33 @@
|
||||
|
||||
#include <Graphic3d_AspectLine3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Graphic3d_Aspects)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectLine3d, Standard_Transient)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectLine3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
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
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
Aspect_TypeOfLine theType,
|
||||
Standard_Real theWidth)
|
||||
Graphic3d_AspectLine3d::Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
const Aspect_TypeOfLine theType,
|
||||
const Standard_Real theWidth)
|
||||
: myColor (theColor),
|
||||
myType (theType),
|
||||
myWidth ((float )theWidth)
|
||||
{
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myLineType = theType;
|
||||
SetLineWidth ((float)theWidth);
|
||||
if (myWidth <= 0.0f)
|
||||
{
|
||||
throw Aspect_AspectLineDefinitionError("Graphic3d_AspectLine3d, Bad value for LineWidth");
|
||||
}
|
||||
}
|
||||
|
@@ -16,13 +16,19 @@
|
||||
#ifndef _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.
|
||||
//! 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:
|
||||
|
||||
//! Creates a context table for line primitives
|
||||
@@ -38,32 +44,85 @@ public:
|
||||
//! 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 supported line widths vary by 1-pixel units.
|
||||
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
Aspect_TypeOfLine theType,
|
||||
Standard_Real theWidth);
|
||||
Standard_EXPORT Graphic3d_AspectLine3d (const Quantity_Color& theColor,
|
||||
const Aspect_TypeOfLine theType,
|
||||
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.
|
||||
Aspect_TypeOfLine Type() const { return myLineType; }
|
||||
Aspect_TypeOfLine Type() const { return myType; }
|
||||
|
||||
//! Modifies the type of line.
|
||||
void SetType (const Aspect_TypeOfLine theType) { myLineType = theType; }
|
||||
void SetType (const Aspect_TypeOfLine theType) { myType = theType; }
|
||||
|
||||
//! Return line width.
|
||||
Standard_ShortReal Width() const { return myLineWidth; }
|
||||
Standard_ShortReal Width() const { return myWidth; }
|
||||
|
||||
//! 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); }
|
||||
|
||||
//! Modifies the line thickness.
|
||||
//! Warning: Raises Standard_OutOfRange if the width is a negative value.
|
||||
void SetWidth (Standard_ShortReal theWidth)
|
||||
//! Warning: Raises AspectLineDefinitionError if the width is a negative value.
|
||||
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
|
||||
|
@@ -15,18 +15,18 @@
|
||||
|
||||
#include <Graphic3d_AspectMarker3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Graphic3d_Aspects)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectMarker3d, Standard_Transient)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectMarker3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
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,
|
||||
const Quantity_Color& theColor,
|
||||
const Standard_Real theScale)
|
||||
: myColor (theColor),
|
||||
myType (theType),
|
||||
myScale ((float )theScale)
|
||||
{
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myMarkerType = theType;
|
||||
SetMarkerScale ((float )theScale);
|
||||
if (theScale <= 0.0)
|
||||
{
|
||||
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
@@ -51,12 +54,12 @@ Graphic3d_AspectMarker3d::Graphic3d_AspectMarker3d (const Quantity_Color& theCo
|
||||
const Standard_Integer theWidth,
|
||||
const Standard_Integer theHeight,
|
||||
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 :
|
||||
// =======================================================================
|
||||
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
|
||||
#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.
|
||||
//! 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:
|
||||
|
||||
//! Creates a context table for marker primitives
|
||||
@@ -43,26 +53,39 @@ public:
|
||||
//! defined with the specified values.
|
||||
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.
|
||||
Standard_ShortReal Scale() const { return myMarkerScale; }
|
||||
Standard_ShortReal Scale() const { return myScale; }
|
||||
|
||||
//! 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.
|
||||
//! Warning: Raises AspectMarkerDefinitionError if the scale is a negative value.
|
||||
void SetScale (const Standard_ShortReal theScale)
|
||||
{
|
||||
SetMarkerScale (theScale);
|
||||
if (theScale <= 0.0f)
|
||||
{
|
||||
throw Aspect_AspectMarkerDefinitionError("Bad value for MarkerScale");
|
||||
}
|
||||
myScale = theScale;
|
||||
}
|
||||
|
||||
//! Assign scale factor.
|
||||
void SetScale (const Standard_Real theScale) { SetScale ((float )theScale); }
|
||||
|
||||
//! Return marker type.
|
||||
Aspect_TypeOfMarker Type() const { return myMarkerType; }
|
||||
Aspect_TypeOfMarker Type() const { return myType; }
|
||||
|
||||
//! 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.
|
||||
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.
|
||||
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);
|
||||
|
||||
//! 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
|
||||
|
@@ -15,43 +15,55 @@
|
||||
|
||||
#include <Graphic3d_AspectText3d.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Graphic3d_Aspects)
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_AspectText3d, Standard_Transient)
|
||||
|
||||
// =======================================================================
|
||||
// function : Graphic3d_AspectText3d
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
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
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
Standard_CString theFont,
|
||||
Standard_Real ,
|
||||
Standard_Real ,
|
||||
Aspect_TypeOfStyleText theStyle,
|
||||
Aspect_TypeOfDisplayText theDisplayType)
|
||||
Graphic3d_AspectText3d::Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
const Standard_CString theFont,
|
||||
const Standard_Real theExpansionFactor,
|
||||
const Standard_Real theSpace,
|
||||
const Aspect_TypeOfStyleText theStyle,
|
||||
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);
|
||||
myShadingModel = Graphic3d_TOSM_UNLIT;
|
||||
myTextStyle = theStyle;
|
||||
myTextDisplayType = theDisplayType;
|
||||
myInteriorColor.SetRGB (theColor);
|
||||
myEdgeColor.SetRGB (Quantity_NOC_WHITE);
|
||||
if (theFont != NULL
|
||||
&& *theFont != '\0')
|
||||
if (myFont.IsEmpty())
|
||||
{
|
||||
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
|
||||
#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.
|
||||
class Graphic3d_AspectText3d : public Graphic3d_Aspects
|
||||
//! Creates and updates a group of attributes for
|
||||
//! 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:
|
||||
|
||||
//! Creates a context table for text primitives defined with the following default values:
|
||||
//! Color : Quantity_NOC_YELLOW
|
||||
//! Font : Font_NOF_ASCII_MONO
|
||||
//! The style : Aspect_TOST_NORMAL
|
||||
//! The display type : Aspect_TODT_NORMAL
|
||||
//! Creates a context table for text primitives
|
||||
//! defined with the following default values:
|
||||
//!
|
||||
//! Color : NOC_YELLOW
|
||||
//! Font : NOF_ASCII_MONO
|
||||
//! Expansion factor : 1.
|
||||
//! Space between characters : 0.
|
||||
//! The style : TOST_NORMAL
|
||||
//! The display type : TODT_NORMAL
|
||||
Standard_EXPORT Graphic3d_AspectText3d();
|
||||
|
||||
//! Creates a context table for text primitives defined with the specified values.
|
||||
//! @param theColor [in] text color
|
||||
//! @param theFont [in] font family name or alias like Font_NOF_ASCII_MONO
|
||||
//! @param theExpansionFactor [in] deprecated parameter, has no effect
|
||||
//! @param theSpace [in] deprecated parameter, has no effect
|
||||
//! @param theStyle [in] font style
|
||||
//! @param theDisplayType [in] display mode
|
||||
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
Standard_CString theFont,
|
||||
Standard_Real theExpansionFactor,
|
||||
Standard_Real theSpace,
|
||||
Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
||||
Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
||||
//! Creates a context table for text primitives
|
||||
//! defined with the specified values.
|
||||
//! AFont may be to take means from User(example "Courier New")
|
||||
//! or Font name defined in Font_NameOfFont(example Font_NOF_ASCII_MONO)
|
||||
//! or use default font("Courier")
|
||||
Standard_EXPORT Graphic3d_AspectText3d (const Quantity_Color& theColor,
|
||||
const Standard_CString theFont,
|
||||
const Standard_Real theExpansionFactor,
|
||||
const Standard_Real theSpace,
|
||||
const Aspect_TypeOfStyleText theStyle = Aspect_TOST_NORMAL,
|
||||
const Aspect_TypeOfDisplayText theDisplayType = Aspect_TODT_NORMAL);
|
||||
|
||||
//! Return the text color.
|
||||
const Quantity_Color& Color() const { return myInteriorColor.GetRGB(); }
|
||||
const Quantity_Color& Color() const { return myColor.GetRGB(); }
|
||||
|
||||
//! Return the text color.
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myInteriorColor; }
|
||||
const Quantity_ColorRGBA& ColorRGBA() const { return myColor; }
|
||||
|
||||
//! Modifies the color.
|
||||
void SetColor (const Quantity_Color& theColor) { myInteriorColor.SetRGB (theColor); }
|
||||
void SetColor (const Quantity_Color& theColor) { myColor.SetRGB (theColor); }
|
||||
|
||||
//! 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.
|
||||
const TCollection_AsciiString& Font() const
|
||||
{
|
||||
if (myTextFont.IsNull())
|
||||
{
|
||||
static const TCollection_AsciiString anEmpty;
|
||||
return anEmpty;
|
||||
}
|
||||
return myTextFont->String();
|
||||
}
|
||||
const TCollection_AsciiString& Font() const { return myFont; }
|
||||
|
||||
//! Modifies the font.
|
||||
void SetFont (const TCollection_AsciiString& theFont)
|
||||
{
|
||||
if (!theFont.IsEmpty())
|
||||
{
|
||||
myTextFont = new TCollection_HAsciiString (theFont);
|
||||
}
|
||||
else
|
||||
{
|
||||
myTextFont.Nullify();
|
||||
}
|
||||
myFont = !theFont.IsEmpty() ? theFont : TCollection_AsciiString (Font_NOF_ASCII_MONO);
|
||||
}
|
||||
|
||||
//! Modifies the font.
|
||||
@@ -87,32 +107,174 @@ public:
|
||||
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.
|
||||
Aspect_TypeOfStyleText Style() const { return myTextStyle; }
|
||||
Aspect_TypeOfStyleText Style() const { return myStyle; }
|
||||
|
||||
//! 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.
|
||||
Aspect_TypeOfDisplayText DisplayType() const { return myTextDisplayType; }
|
||||
Aspect_TypeOfDisplayText DisplayType() const { return myDisplayType; }
|
||||
|
||||
//! 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.
|
||||
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
|
||||
Standard_ShortReal GetTextAngle() const { return myTextAngle; }
|
||||
Standard_Real GetTextAngle() const { return myTextAngle; }
|
||||
|
||||
//! 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
|
||||
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
|
||||
|
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();
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// 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
|
||||
// purpose :
|
||||
|
@@ -17,12 +17,17 @@
|
||||
#ifndef _Graphic3d_Group_HeaderFile
|
||||
#define _Graphic3d_Group_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <Graphic3d_BndBox4f.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Graphic3d_AspectLine3d.hxx>
|
||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||
#include <Graphic3d_AspectText3d.hxx>
|
||||
#include <Graphic3d_AspectMarker3d.hxx>
|
||||
#include <Graphic3d_MapOfAspectsToAspects.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_CString.hxx>
|
||||
#include <Graphic3d_Vertex.hxx>
|
||||
#include <Graphic3d_TextPath.hxx>
|
||||
@@ -32,6 +37,8 @@
|
||||
#include <Graphic3d_IndexBuffer.hxx>
|
||||
#include <Graphic3d_Buffer.hxx>
|
||||
#include <Graphic3d_BoundBuffer.hxx>
|
||||
#include <Standard_Address.hxx>
|
||||
#include <Graphic3d_GroupAspect.hxx>
|
||||
#include <gp_Ax2.hxx>
|
||||
#include <TCollection_ExtendedString.hxx>
|
||||
|
||||
@@ -95,20 +102,70 @@ 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.
|
||||
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.
|
||||
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.
|
||||
virtual void SetPrimitivesAspect (const Handle(Graphic3d_Aspects)& theAspect) = 0;
|
||||
//! Return text aspect.
|
||||
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.
|
||||
virtual void SynchronizeAspects() = 0;
|
||||
|
||||
//! Replace aspects specified in the replacement map.
|
||||
virtual void ReplaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap) = 0;
|
||||
//! Returns TRUE if aspect is set for the group.
|
||||
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:
|
||||
|
||||
|
@@ -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.
|
||||
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
|
||||
|
@@ -60,11 +60,6 @@ public:
|
||||
//! Returns unique ID used to manage resource in graphic driver.
|
||||
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).
|
||||
const TCollection_AsciiString& Header() const { return myHeader; }
|
||||
|
||||
|
@@ -127,14 +127,12 @@ static void AddCompositeShape (const Handle(XCAFDoc_ShapeTool)& theSTool,
|
||||
if( nbSimple && aHasCompositeSubShape)
|
||||
{
|
||||
theSTool->AddShape( aSimpleShape, Standard_False, Standard_False );
|
||||
|
||||
TopoDS_Compound aNewShape;
|
||||
aB.MakeCompound(aNewShape);
|
||||
aB.Add(aNewShape, aSimpleShape);
|
||||
aB.Add(aNewShape,aCompShape);
|
||||
|
||||
if (!aLoc.IsIdentity())
|
||||
aNewShape.Location(aLoc );
|
||||
//if (!aLoc.IsIdentity())
|
||||
// aNewShape.Location(aLoc );
|
||||
aNewShape.Orientation(theShape.Orientation());
|
||||
theSTool->AddShape( aNewShape, aHasCompositeSubShape, Standard_False );
|
||||
}
|
||||
|
@@ -25,32 +25,6 @@
|
||||
#include <TopTools_MapOfShape.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
|
||||
// Purpose :
|
||||
@@ -76,15 +50,28 @@ IMeshTools_ShapeExplorer::~IMeshTools_ShapeExplorer ()
|
||||
void IMeshTools_ShapeExplorer::Accept (
|
||||
const Handle (IMeshTools_ShapeVisitor)& theVisitor)
|
||||
{
|
||||
// Explore all free edges in shape.
|
||||
visitEdges (theVisitor, GetShape (), TopAbs_EDGE, TopAbs_FACE);
|
||||
// Explore all edges in shape - either free or related to some face.
|
||||
TopTools_IndexedMapOfShape aEdges;
|
||||
TopExp::MapShapes (GetShape (), TopAbs_EDGE, aEdges);
|
||||
|
||||
// Explore all related to some face edges in shape.
|
||||
// make array of faces suitable for processing (excluding faces without surface)
|
||||
TopTools_IndexedMapOfShape::Iterator aEdgeIt (aEdges);
|
||||
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;
|
||||
BRepLib::ReverseSortFaces (GetShape (), aFaceList);
|
||||
TopTools_MapOfShape aFaceMap;
|
||||
|
||||
// make array of faces suitable for processing (excluding faces without surface)
|
||||
TopLoc_Location aDummyLoc;
|
||||
const TopLoc_Location aEmptyLoc;
|
||||
TopTools_ListIteratorOfListOfShape aFaceIter (aFaceList);
|
||||
@@ -97,16 +84,13 @@ void IMeshTools_ShapeExplorer::Accept (
|
||||
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);
|
||||
if (aSurf.IsNull())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Explore all edges in face.
|
||||
visitEdges (theVisitor, aFace, TopAbs_EDGE);
|
||||
|
||||
// Store only forward faces in order to prevent inverse issue.
|
||||
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;
|
||||
GetInteractor()->MoveTo (atoi (theArgs[1]), anY);
|
||||
|
||||
gp_XYZ aPickPnt;
|
||||
GetInteractor()->Selector()->GetPickPosition (aPickPnt.ChangeData());
|
||||
theDI << aPickPnt.X() << " " << aPickPnt.Y() << " " << aPickPnt.Z();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -58,7 +58,6 @@ public:
|
||||
virtual void Enable();
|
||||
virtual void Start() { }
|
||||
|
||||
const PSelector& Selector() const { return mySelector; }
|
||||
void SetShapePicker (const PSelector& theSelector);
|
||||
void SetPipelines (const Handle(ShapePipelineMap)& thePipelines);
|
||||
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()
|
||||
{
|
||||
myTopPickedPoint.SetCoord (RealLast(), RealLast(), RealLast());
|
||||
myShapesPicked.Clear();
|
||||
mySubShapesPicked.Clear();
|
||||
}
|
||||
@@ -290,11 +289,9 @@ int IVtkOCC_ShapePickerAlgo::NbPicked()
|
||||
bool IVtkOCC_ShapePickerAlgo::processPicked()
|
||||
{
|
||||
Standard_Integer aNbPicked = myViewerSelector->NbPicked();
|
||||
|
||||
Handle(StdSelect_BRepOwner) anEntityOwner;
|
||||
Handle(Message_Messenger) anOutput = Message::DefaultMessenger();
|
||||
|
||||
bool isTop = true;
|
||||
for (Standard_Integer aDetectIt = 1; aDetectIt <= aNbPicked; aDetectIt++)
|
||||
{
|
||||
// ViewerSelector detects sensitive entities under the mouse
|
||||
@@ -323,11 +320,6 @@ bool IVtkOCC_ShapePickerAlgo::processPicked()
|
||||
|
||||
IVtk_IdType aTopLevelId = aSelShape->GetId();
|
||||
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
|
||||
TopoDS_Shape aTopLevelShape = aSelShape->GetShape();
|
||||
|
@@ -100,9 +100,6 @@ public: //! @name Obtain picking results
|
||||
//! @param [in] theShape the selectable shape
|
||||
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:
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(IVtkOCC_ShapePickerAlgo,IVtk_IShapePickerAlgo)
|
||||
@@ -124,7 +121,6 @@ private:
|
||||
IVtk_IView::Handle myView;
|
||||
IVtk_ShapeIdList myShapesPicked;
|
||||
IVtk_SubShapeMap mySubShapesPicked;
|
||||
gp_Pnt myTopPickedPoint;
|
||||
Handle(IVtkOCC_ViewerSelector) myViewerSelector;
|
||||
};
|
||||
|
||||
|
@@ -193,10 +193,6 @@ void IVtkTools_ShapePicker::doPickImpl (double* thePos,
|
||||
{
|
||||
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 <Message.hxx>
|
||||
#include <Message_Messenger.hxx>
|
||||
#include <NCollection_Array1.hxx>
|
||||
#include <Standard_ArrayStreamBuffer.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <TCollection_ExtendedString.hxx>
|
||||
#include <OSD_OpenFile.hxx>
|
||||
@@ -112,109 +110,6 @@ namespace
|
||||
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)
|
||||
|
||||
//! Return a zero GUID
|
||||
@@ -489,50 +384,21 @@ void Image_AlienPixMap::Clear()
|
||||
#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
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
#ifdef HAVE_FREEIMAGE
|
||||
bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
Standard_Size theLength,
|
||||
const TCollection_AsciiString& theImagePath)
|
||||
bool Image_AlienPixMap::Load (const TCollection_AsciiString& theImagePath)
|
||||
{
|
||||
Clear();
|
||||
|
||||
#ifdef _WIN32
|
||||
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
|
||||
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)
|
||||
{
|
||||
// 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))
|
||||
{
|
||||
::Message::DefaultMessenger()->Send (TCollection_AsciiString ("Error: image '") + theImagePath + "' has unsupported file format.",
|
||||
Message_Fail);
|
||||
if (aFiMem != NULL)
|
||||
{
|
||||
FreeImage_CloseMemory (aFiMem);
|
||||
}
|
||||
TCollection_AsciiString aMessage = "Error: image file '";
|
||||
aMessage.AssignCat (theImagePath);
|
||||
aMessage.AssignCat ("' has unsupported file format.");
|
||||
::Message::DefaultMessenger()->Send (aMessage, Message_Fail);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -561,21 +425,11 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
aLoadFlags = ICO_MAKEALPHA;
|
||||
}
|
||||
|
||||
FIBITMAP* anImage = NULL;
|
||||
if (theData != NULL)
|
||||
{
|
||||
anImage = FreeImage_LoadFromMemory (aFIF, aFiMem, aLoadFlags);
|
||||
FreeImage_CloseMemory (aFiMem);
|
||||
aFiMem = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef _WIN32
|
||||
anImage = FreeImage_LoadU (aFIF, aFileNameW.ToWideString(), aLoadFlags);
|
||||
#else
|
||||
anImage = FreeImage_Load (aFIF, theImagePath.ToCString(), aLoadFlags);
|
||||
#endif
|
||||
}
|
||||
#ifdef _WIN32
|
||||
FIBITMAP* anImage = FreeImage_LoadU (aFIF, aFileNameW.ToWideString(), aLoadFlags);
|
||||
#else
|
||||
FIBITMAP* anImage = FreeImage_Load (aFIF, theImagePath.ToCString(), aLoadFlags);
|
||||
#endif
|
||||
if (anImage == NULL)
|
||||
{
|
||||
TCollection_AsciiString aMessage = "Error: image file '";
|
||||
@@ -591,8 +445,10 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
if (aFormat == Image_Format_UNKNOWN)
|
||||
{
|
||||
//anImage = FreeImage_ConvertTo24Bits (anImage);
|
||||
::Message::DefaultMessenger()->Send ( TCollection_AsciiString ("Error: image '") + theImagePath + "' has unsupported pixel format.",
|
||||
Message_Fail);
|
||||
TCollection_AsciiString aMessage = "Error: image file '";
|
||||
aMessage.AssignCat (theImagePath);
|
||||
aMessage.AssignCat ("' has unsupported pixel format.");
|
||||
::Message::DefaultMessenger()->Send (aMessage, Message_Fail);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -604,106 +460,25 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
myLibImage = anImage;
|
||||
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)
|
||||
bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
Standard_Size theLength,
|
||||
const TCollection_AsciiString& theFileName)
|
||||
bool Image_AlienPixMap::Load (const TCollection_AsciiString& theImagePath)
|
||||
{
|
||||
Clear();
|
||||
|
||||
Image_ComPtr<IWICImagingFactory> aWicImgFactory;
|
||||
IWICImagingFactory* aWicImgFactory = NULL;
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
||||
Image_ComPtr<IWICBitmapDecoder> aWicDecoder;
|
||||
Image_ComPtr<IWICStream> aWicStream;
|
||||
if (theData != NULL)
|
||||
const TCollection_ExtendedString aFileNameW (theImagePath);
|
||||
if (aWicImgFactory->CreateDecoderFromFilename (aFileNameW.ToWideString(), NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &aWicDecoder.ChangePtr()) != S_OK)
|
||||
{
|
||||
if (aWicImgFactory->CreateStream (&aWicStream.ChangePtr()) != S_OK
|
||||
|| aWicStream->InitializeFromMemory ((BYTE* )theData, (DWORD )theLength) != S_OK)
|
||||
{
|
||||
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;
|
||||
}
|
||||
Message::DefaultMessenger()->Send ("Error: cannot create WIC Image Decoder", Message_Fail);
|
||||
return false;
|
||||
}
|
||||
|
||||
UINT aFrameCount = 0, aFrameSizeX = 0, aFrameSizeY = 0;
|
||||
@@ -752,45 +527,10 @@ bool Image_AlienPixMap::Load (const Standard_Byte* theData,
|
||||
SetTopDown (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
|
||||
bool Image_AlienPixMap::Load (std::istream& ,
|
||||
const TCollection_AsciiString& )
|
||||
bool Image_AlienPixMap::Load (const TCollection_AsciiString&)
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
@@ -1034,9 +774,9 @@ bool Image_AlienPixMap::Save (const TCollection_AsciiString& theFileName)
|
||||
return false;
|
||||
}
|
||||
|
||||
Image_ComPtr<IWICImagingFactory> aWicImgFactory;
|
||||
IWICImagingFactory* aWicImgFactory = NULL;
|
||||
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);
|
||||
return false;
|
||||
|
@@ -36,10 +36,6 @@ class Image_AlienPixMap : public Image_PixMap
|
||||
DEFINE_STANDARD_RTTIEXT(Image_AlienPixMap, Image_PixMap)
|
||||
public:
|
||||
|
||||
//! Return default rows order used by underlying image library.
|
||||
Standard_EXPORT static bool IsTopDownDefault();
|
||||
public:
|
||||
|
||||
//! Empty constructor.
|
||||
Standard_EXPORT Image_AlienPixMap();
|
||||
|
||||
@@ -47,23 +43,7 @@ public:
|
||||
Standard_EXPORT virtual ~Image_AlienPixMap();
|
||||
|
||||
//! Read image data from file.
|
||||
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);
|
||||
Standard_EXPORT bool Load (const TCollection_AsciiString& theFileName);
|
||||
|
||||
//! Write image data to file using file extension to determine compression format.
|
||||
Standard_EXPORT bool Save (const TCollection_AsciiString& theFileName);
|
||||
|
@@ -125,6 +125,7 @@ void IntImpParGen::DetermineTransition(const IntRes2d_Position Pos1,
|
||||
}
|
||||
else {
|
||||
gp_Vec2d Norm;
|
||||
Tan1.Normalized();
|
||||
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
||||
Standard_Real Val1,Val2;
|
||||
if (!courbure1) {
|
||||
|
@@ -116,6 +116,7 @@ void Determine_Transition(const IntRes2d_Position Pos1,
|
||||
}
|
||||
else {
|
||||
gp_Vec2d Norm;
|
||||
Tan1.Normalized();
|
||||
Norm.SetCoord(-Tan1.Y(),Tan1.X());
|
||||
Standard_Real Val1,Val2;
|
||||
if (!courbure1) {
|
||||
|
@@ -159,10 +159,15 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
||||
!aDrawer->GetDouble ( MeshVS_DA_TextHeight, aHeight ) )
|
||||
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;
|
||||
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 ASpace = 0.0;
|
||||
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,
|
||||
ATextStyle, ADisplayType );
|
||||
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));
|
||||
TColStd_Array1OfReal aCoords (aCoordsBuf, 1, 3*aMaxFaceNodes);
|
||||
@@ -213,8 +221,8 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
||||
}
|
||||
anIDs.Subtract( IDsToExclude );
|
||||
|
||||
NCollection_Sequence<Graphic3d_Vec3> aPnts;
|
||||
for (TColStd_MapIteratorOfPackedMapOfInteger it (anIDs); it.More(); it.Next())
|
||||
TColStd_MapIteratorOfPackedMapOfInteger it (anIDs);
|
||||
for( ; it.More(); it.Next() )
|
||||
{
|
||||
Standard_Integer aKey = it.Key();
|
||||
if( GetText ( IsElement, aKey, aStr ) )
|
||||
@@ -250,27 +258,15 @@ void MeshVS_TextPrsBuilder::Build ( const Handle(Prs3d_Presentation)& Prs,
|
||||
continue;
|
||||
}
|
||||
|
||||
aPnts.Append (Graphic3d_Vec3 ((float )X, (float )Y, (float )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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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())
|
||||
CustomBuild ( Prs, aCustomElements, IDsToExclude, theDisplayMode );
|
||||
}
|
||||
|
@@ -59,32 +59,6 @@ public:
|
||||
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:
|
||||
|
||||
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