AIS_ColoredDrawer (const Handle(Prs3d_Drawer)& theLink)
: myIsHidden (false),
myHasOwnColor (false),
+ myHasOwnTransp(false),
myHasOwnWidth (false)
{
Link (theLink);
bool IsHidden() const { return myIsHidden; }
void SetHidden (const bool theToHide) { myIsHidden = theToHide;}
+
bool HasOwnColor() const { return myHasOwnColor; }
void UnsetOwnColor() { myHasOwnColor = false; }
void SetOwnColor (const Quantity_Color& /*theColor*/) { myHasOwnColor = true; }
+
+ bool HasOwnTransparency() const { return myHasOwnTransp; }
+ void UnsetOwnTransparency() { myHasOwnTransp = false; }
+ void SetOwnTransparency (Standard_Real /*theTransp*/) { myHasOwnTransp = true; }
+
bool HasOwnWidth() const { return myHasOwnWidth; }
void UnsetOwnWidth() { myHasOwnWidth = false; }
void SetOwnWidth (const Standard_Real /*theWidth*/) { myHasOwnWidth = true; }
bool myIsHidden;
bool myHasOwnColor;
+ bool myHasOwnTransp;
bool myHasOwnWidth;
};
LoadRecomputable (AIS_Shaded);
}
+//=======================================================================
+//function : SetCustomTransparency
+//purpose :
+//=======================================================================
+void AIS_ColoredShape::SetCustomTransparency (const TopoDS_Shape& theShape,
+ Standard_Real theTransparency)
+{
+ if (theShape.IsNull())
+ {
+ return;
+ }
+
+ const Handle(AIS_ColoredDrawer)& aDrawer = CustomAspects (theShape);
+ setTransparency (aDrawer, theTransparency);
+ aDrawer->SetOwnTransparency (theTransparency);
+ LoadRecomputable (AIS_WireFrame);
+ LoadRecomputable (AIS_Shaded);
+}
+
//=======================================================================
//function : SetCustomWidth
//purpose :
}
const Handle(AIS_ColoredDrawer)& aDrawer = CustomAspects (theShape);
- setWidth (CustomAspects (theShape), theLineWidth);
+ setWidth (aDrawer, theLineWidth);
aDrawer->SetOwnWidth (theLineWidth);
LoadRecomputable (AIS_WireFrame);
LoadRecomputable (AIS_Shaded);
LoadRecomputable (AIS_Shaded);
for (AIS_DataMapOfShapeDrawer::Iterator anIter (myShapeColors); anIter.More(); anIter.Next())
{
- const Handle(Prs3d_Drawer)& aDrawer = anIter.Value();
+ const Handle(AIS_ColoredDrawer)& aDrawer = anIter.Value();
+ if (aDrawer->HasOwnTransparency())
+ {
+ continue;
+ }
+
if (aDrawer->HasOwnShadingAspect())
{
aDrawer->ShadingAspect()->SetTransparency (theValue, myCurrentFacingModel);
//if (aDrawer->HasOwnMaterial()) continue;
if (aDrawer->HasOwnShadingAspect())
{
- setMaterial (aDrawer, theMaterial, aDrawer->HasOwnColor(), Standard_False); // aDrawer->IsTransparent()
+ setMaterial (aDrawer, theMaterial, aDrawer->HasOwnColor(), aDrawer->HasOwnTransparency());
}
}
}
{
const TopoDS_Shape& aFace = aFaceIter.Value();
Handle(AIS_ColoredDrawer) aFaceDrawer;
- if (aFace.ShapeType() == TopAbs_FACE
- && theShapeDrawerMap.Find (aFace, aFaceDrawer)
- && aFaceDrawer->IsHidden())
+ if (aFace.ShapeType() != TopAbs_FACE
+ || !theShapeDrawerMap.Find (aFace, aFaceDrawer))
+ {
+ continue;
+ }
+
+ if (aFaceDrawer->IsHidden())
{
isClosedShell = Standard_False;
break;
}
+ else if (aFaceDrawer->HasOwnShadingAspect()
+ && aFaceDrawer->ShadingAspect()->Aspect()->AlphaMode() != Graphic3d_AlphaMode_Opaque)
+ {
+ if (aFaceDrawer->ShadingAspect()->Aspect()->AlphaMode() != Graphic3d_AlphaMode_BlendAuto
+ || aFaceDrawer->ShadingAspect()->Aspect()->FrontMaterial().Alpha() < 1.0f
+ || (aFaceDrawer->ShadingAspect()->Aspect()->Distinguish()
+ && aFaceDrawer->ShadingAspect()->Aspect()->BackMaterial().Alpha() < 1.0f))
+ {
+ isClosedShell = Standard_False;
+ break;
+ }
+ }
}
}
}
//! @return true if properties are valid
- Standard_Boolean Validate (const Standard_Boolean theIsSubPart) const
+ Standard_Boolean Validate() const
{
Standard_Boolean isOk = Standard_True;
if (Visibility != 0 && Visibility != 1)
std::cout << "Error: the transparency should be within [0; 1] range (specified " << Transparency << ")\n";
isOk = Standard_False;
}
- if (theIsSubPart
- && ToSetTransparency != 0)
- {
- std::cout << "Error: the transparency can not be defined for sub-part of object!\n";
- isOk = Standard_False;
- }
if (ToSetAlphaMode == 1
&& (AlphaCutoff <= 0.0f || AlphaCutoff >= 1.0f))
{
}
}
- Standard_Boolean isFirst = Standard_True;
for (NCollection_Sequence<ViewerTest_AspectsChangeSet>::Iterator aChangesIter (aChanges);
aChangesIter.More(); aChangesIter.Next())
{
- if (!aChangesIter.Value().Validate (!isFirst))
+ if (!aChangesIter.Value().Validate())
{
return 1;
}
- isFirst = Standard_False;
}
// special case for -defaults parameter.
{
aColoredPrs->SetCustomColor (aSubShape, aChangeSet->Color);
}
+ if (aChangeSet->ToSetTransparency == 1)
+ {
+ aColoredPrs->SetCustomTransparency (aSubShape, aChangeSet->Transparency);
+ }
if (aChangeSet->ToSetLineWidth == 1)
{
aColoredPrs->SetCustomWidth (aSubShape, aChangeSet->LineWidth);