1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-06-30 12:14:08 +03:00

Refactor code. Change test case.

This commit is contained in:
mgn 2014-08-28 13:22:46 +04:00
parent 0d16d59134
commit 75ed43d05d
3 changed files with 74 additions and 58 deletions

View File

@ -36,7 +36,6 @@ IMPLEMENT_STANDARD_RTTIEXT(AIS_PointCloud, AIS_InteractiveObject)
AIS_PointCloud::AIS_PointCloud() AIS_PointCloud::AIS_PointCloud()
: AIS_InteractiveObject() : AIS_InteractiveObject()
{ {
SetHilightMode (0);
} }
//======================================================================= //=======================================================================
@ -89,7 +88,7 @@ void AIS_PointCloud::SetPoints (const Handle(TColgp_HArray1OfPnt)& theCoords
//function : GetPoints //function : GetPoints
//purpose : //purpose :
//======================================================================= //=======================================================================
const Handle(Graphic3d_ArrayOfPoints)& AIS_PointCloud::GetPoints() const const Handle(Graphic3d_ArrayOfPoints) AIS_PointCloud::GetPoints() const
{ {
return myPoints; return myPoints;
} }
@ -130,7 +129,7 @@ void AIS_PointCloud::Compute(const Handle(PrsMgr_PresentationManager3d)& /*thePr
{ {
thePresentation->Clear(); thePresentation->Clear();
const Handle(Graphic3d_ArrayOfPoints)& aPoints = GetPoints(); const Handle(Graphic3d_ArrayOfPoints) aPoints = GetPoints();
if (aPoints.IsNull() || !aPoints->IsValid()) if (aPoints.IsNull() || !aPoints->IsValid())
return; return;

View File

@ -55,7 +55,7 @@ public:
//! Get the points. //! Get the points.
//! @return the array of points. //! @return the array of points.
Standard_EXPORT virtual const Handle(Graphic3d_ArrayOfPoints)& GetPoints () const; Standard_EXPORT virtual const Handle(Graphic3d_ArrayOfPoints) GetPoints() const;
//! Redefined method implemets the standard behavior. //! Redefined method implemets the standard behavior.
Standard_EXPORT virtual void SetColor (const Quantity_NameOfColor theColor); Standard_EXPORT virtual void SetColor (const Quantity_NameOfColor theColor);

View File

@ -5060,16 +5060,19 @@ static Standard_Integer VPointCloud (Draw_Interpretor& /*theDI*/,
Standard_Integer anArgIter = 1; Standard_Integer anArgIter = 1;
// Get point cloud object name // Point cloud name
TCollection_AsciiString aName (theArgs[anArgIter++]); TCollection_AsciiString aName (theArgs[anArgIter++]);
// Sets default value // Default value
Standard_Integer aMode = 0; Standard_Integer aMode = 0;
Standard_Integer aMarkerType = -1; Standard_Integer aMarkerType = -1;
Quantity_NameOfColor aColorName = Quantity_NOC_YELLOW; Quantity_NameOfColor aColorName = Quantity_NOC_YELLOW;
Standard_Real aScale = 1.0; Standard_Real aScale = 1.0;
Standard_Integer aPointsOnSide = 100;
gp_Pnt aStartPonit (0., 0., 0.);
Standard_Boolean aHasColor = Standard_True; Standard_Boolean aHasColor = Standard_True;
Standard_Integer aNumberOfPoints = 100; Standard_Boolean aHasAspect = Standard_False;
// Parses arguments // Parses arguments
for (; anArgIter < theArgNum; ++anArgIter) for (; anArgIter < theArgNum; ++anArgIter)
@ -5087,19 +5090,22 @@ static Standard_Integer VPointCloud (Draw_Interpretor& /*theDI*/,
else if (anArg.Search ("MarkerType=") > -1) else if (anArg.Search ("MarkerType=") > -1)
{ {
aMarkerType = anArg.Token ("=", 2).IntegerValue(); aMarkerType = anArg.Token ("=", 2).IntegerValue();
aHasAspect = Standard_True;
} }
else if (anArg.Search ("ColorName=") > -1) else if (anArg.Search ("ColorName=") > -1)
{ {
aColorName = ViewerTest::GetColorFromName (anArg.Token ("=", 2).ToCString()); aColorName = ViewerTest::GetColorFromName (anArg.Token ("=", 2).ToCString());
aHasColor = Standard_False; aHasColor = Standard_False;
aHasAspect = Standard_True;
} }
else if (anArg.Search ("Scale=") > -1) else if (anArg.Search ("Scale=") > -1)
{ {
aScale = anArg.Token ("=", 2).RealValue(); aScale = anArg.Token ("=", 2).RealValue();
aHasAspect = Standard_True;
} }
else if (anArg.Search ("NumPoints=") > -1) else if (anArg.Search ("PointsOnSide=") > -1)
{ {
aNumberOfPoints = anArg.Token ("=", 2).IntegerValue(); aPointsOnSide = anArg.Token ("=", 2).IntegerValue();
} }
else else
{ {
@ -5108,59 +5114,66 @@ static Standard_Integer VPointCloud (Draw_Interpretor& /*theDI*/,
} }
} }
Standard_Integer aNumberOfPoints = (Standard_Integer )Pow (aPointsOnSide, 3);
std::cout << "Number of points: " << aNumberOfPoints;
// Point cloud initialization // Point cloud initialization
Handle(AIS_PointCloud) aPointCloud = new AIS_PointCloud(); Handle(AIS_PointCloud) aPointCloud = new AIS_PointCloud();
if (aMode == 0) if (aMode == 0)
{ {
Handle(Graphic3d_ArrayOfPoints) anArrayPoints = new Graphic3d_ArrayOfPoints (aNumberOfPoints, aHasColor); Handle(Graphic3d_ArrayOfPoints) anArrayPoints = new Graphic3d_ArrayOfPoints (aNumberOfPoints,
for (Standard_Integer anIter = 1; anIter < aNumberOfPoints; anIter++) aNumberOfPoints != 1 && aHasColor);
if (aNumberOfPoints == 1)
{ {
// Create random point anArrayPoints->AddVertex (aStartPonit, Quantity_NOC_YELLOW);
gp_Pnt aPoint (randomReal (0., 5000.), }
randomReal (0., 5000.), else
randomReal (0., 5000.)); {
for (Standard_Real i = 1; i <= aPointsOnSide; i++)
// Create random color {
Quantity_Color aColor (randomReal (0., 1.), for (Standard_Real j = 1; j <= aPointsOnSide; j++)
randomReal (0., 1.), {
randomReal (0., 1.), for (Standard_Real k = 1; k <= aPointsOnSide; k++)
Quantity_TOC_RGB); {
anArrayPoints->AddVertex (aStartPonit.X() + i,
// Add point with color in array aStartPonit.Y() + j,
anArrayPoints->AddVertex (aPoint, aColor); aStartPonit.Z() + k);
anArrayPoints->SetVertexColor (anArrayPoints->VertexNumber(),
i / aPointsOnSide,
j / aPointsOnSide,
k / aPointsOnSide);
}
}
} }
// Set array of points in point cloud object
aPointCloud->SetPoints (anArrayPoints);
} }
else if (aMode == 1)
{
Handle(TColgp_HArray1OfPnt) aCoords = new TColgp_HArray1OfPnt (1, aNumberOfPoints);
Handle(Quantity_HArray1OfColor) aColors = new Quantity_HArray1OfColor (1, aNumberOfPoints);
if (aCoords->Length() != aColors->Length()) if (anArrayPoints.IsNull() || !anArrayPoints->IsValid())
{ {
std::cerr << "Wrong length of arrays" << std::endl; std::cerr << "No points found." << std::endl;
return 1; return 1;
} }
for (Standard_Integer aPntIt = aCoords->Lower(); aPntIt <= aCoords->Upper(); aPntIt++) // Set array of points in point cloud object
aPointCloud->SetPoints (anArrayPoints);
}
else if (aMode = 1)
{
Handle(TColgp_HArray1OfPnt) aCoords = new TColgp_HArray1OfPnt (1, aNumberOfPoints);
for (Standard_Integer i = 1; i <= aNumberOfPoints; i++)
{ {
gp_Pnt aPoint (randomReal (0., 5000.), gp_Pnt aPoint (randomReal (0., 5000.),
randomReal (0., 5000.), randomReal (0., 5000.),
randomReal (0., 5000.)); randomReal (0., 5000.));
aCoords->SetValue (aPntIt, aPoint); aCoords->SetValue (i, aPoint);
} }
Handle(Quantity_HArray1OfColor) aColors = new Quantity_HArray1OfColor (1, aNumberOfPoints);
if (aHasColor) if (aHasColor)
{ {
for (Standard_Integer aColorIt = aColors->Lower(); aColorIt <= aColors->Upper(); aColorIt++) for (Standard_Integer i = 1; i <= aNumberOfPoints; i++)
{ {
Quantity_Color aColor (randomReal (0., 1.), Quantity_Color aColor (360. * i / aNumberOfPoints, 1.0, 0.5, Quantity_TOC_HLS);
randomReal (0., 1.), aColors->SetValue (i, aColor);
randomReal (0., 1.),
Quantity_TOC_RGB);
aColors->SetValue (aColorIt, aColor);
} }
} }
else else
@ -5171,11 +5184,14 @@ static Standard_Integer VPointCloud (Draw_Interpretor& /*theDI*/,
aPointCloud->SetPoints (aCoords, aColors); aPointCloud->SetPoints (aCoords, aColors);
} }
if (aHasAspect)
{
// Set point aspect for attributes of interactive object // Set point aspect for attributes of interactive object
aPointCloud->Attributes()->SetPointAspect ( aPointCloud->Attributes()->SetPointAspect (
new Prs3d_PointAspect (aMarkerType >= 0 ? (Aspect_TypeOfMarker )aMarkerType : Aspect_TOM_POINT, new Prs3d_PointAspect (aMarkerType >= 0 ? (Aspect_TypeOfMarker )aMarkerType : Aspect_TOM_POINT,
aColorName, aColorName,
aScale)); aScale));
}
VDisplayAISObject (aName, aPointCloud); VDisplayAISObject (aName, aPointCloud);
@ -5341,10 +5357,11 @@ void ViewerTest::ObjectCommands(Draw_Interpretor& theCommands)
__FILE__, VFont, group); __FILE__, VFont, group);
theCommands.Add ("vpointcloud", theCommands.Add ("vpointcloud",
"vpointcloud usage:\n" "Create an interactive object for arbitary set of points.\n"
"vpointcloud ObjectName [Mode=1]\n" "\t\t: vpointcloud usage: \n"
" [NumPoints=100]\n" "\t\t vpointcloud ObjectName\n"
" [MarkerType=0] [ColorName=GREEN] [Scale=1.0]" "\t\t [Mode=1]\n"
"\n\t\t: Create an interactive object for arbitary set of points.", "\t\t [PointsOnSide=100]\n"
"\t\t [MarkerType=0] [ColorName=GREEN] [Scale=1.0]",
__FILE__, VPointCloud, group); __FILE__, VPointCloud, group);
} }