#include <Prs3d_Presentation.hxx>
#include <Prs3d_Root.hxx>
#include <Prs3d_ShadingAspect.hxx>
-#include <PrsMgr_ModedPresentation.hxx>
#include <PrsMgr_Presentations.hxx>
#include <Select3D_SensitiveBox.hxx>
#include <Select3D_SensitivePrimitiveArray.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Selection.hxx>
-#include <StdPrs_BndBox.hxx>
+#include <Prs3d_BndBox.hxx>
IMPLEMENT_STANDARD_RTTIEXT(AIS_PointCloudOwner, SelectMgr_EntityOwner)
IMPLEMENT_STANDARD_RTTIEXT(AIS_PointCloud, AIS_InteractiveObject)
//==================================================
AIS_PointCloud::AIS_PointCloud()
{
- // override default point style to Aspect_TOM_POINT
- myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, Quantity_NOC_YELLOW, 1.0));
+ myDrawer->SetupOwnShadingAspect();
+ myDrawer->ShadingAspect()->Aspect()->SetMarkerType (Aspect_TOM_POINT);
SetDisplayMode (AIS_PointCloud::DM_Points);
SetHilightMode (AIS_PointCloud::DM_BndBox);
{
AIS_InteractiveObject::SetColor(theColor);
- if (!myDrawer->HasOwnPointAspect())
- {
- myDrawer->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, theColor, 1.0));
- if (myDrawer->HasLink())
- {
- *myDrawer->PointAspect()->Aspect() = *myDrawer->Link()->PointAspect()->Aspect();
- }
- }
- if (!myDrawer->HasOwnShadingAspect())
- {
- myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
- if (myDrawer->HasLink())
- {
- *myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
- }
- }
-
- // Override color
myDrawer->ShadingAspect()->SetColor (theColor);
- myDrawer->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);
- }
- }
- }
+ SynchronizeAspects();
}
//=======================================================================
}
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())
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)());
-
- // 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);
- }
- }
- }
+ SynchronizeAspects();
}
//=======================================================================
//=======================================================================
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);
myDrawer->ShadingAspect()->SetColor (myDrawer->Color(), myCurrentFacingModel);
}
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
-
- // 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);
- }
- }
- }
+ SynchronizeAspects();
}
//=======================================================================
return;
}
- if (HasColor()
- || IsTransparent())
{
Graphic3d_MaterialAspect aDefaultMat (Graphic3d_NOM_BRASS);
myDrawer->ShadingAspect()->SetMaterial (myDrawer->HasLink() ?
myDrawer->ShadingAspect()->SetTransparency (myDrawer->Transparency(), myCurrentFacingModel);
}
}
- else
- {
- myDrawer->SetShadingAspect (Handle(Prs3d_ShadingAspect)());
- }
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_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);
- }
- }
- }
+ SynchronizeAspects();
}
//=======================================================================
return;
}
- Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs);
- aGroup->SetGroupPrimitivesAspect (myDrawer->PointAspect()->Aspect());
+ Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
aGroup->AddPrimitiveArray (aPoints);
break;
return;
}
- StdPrs_BndBox::Add (thePrs, aBndBox, myDrawer);
+ Prs3d_BndBox::Add (thePrs, aBndBox, myDrawer);
break;
}
}