// Created on: 1998-11-12
// Created by: Robert COUBLANC
// Copyright (c) 1998-1999 Matra Datavision
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// 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.
//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-
-
-//===============================================
-// AIS Objects Creation : Datums (axis,trihedrons,lines,planes)
-//===============================================
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
#ifdef HAVE_CONFIG_H
#include <config.h>
#include <Draw_Appli.hxx>
#include <DBRep.hxx>
+#include <Font_BRepFont.hxx>
+#include <Font_FontMgr.hxx>
#include <OSD_Chronometer.hxx>
#include <TCollection_AsciiString.hxx>
#include <Visual3d_View.hxx>
#include <V3d_Viewer.hxx>
#include <V3d_View.hxx>
-#include <V3d_Plane.hxx>
#include <V3d.hxx>
#include <AIS_Shape.hxx>
#include <AIS_InteractiveContext.hxx>
#include <Geom_Plane.hxx>
#include <gp_Pln.hxx>
-#include <AIS_AngleDimension.hxx>
#include <TCollection_ExtendedString.hxx>
+#include <TCollection_HAsciiString.hxx>
#include <GC_MakePlane.hxx>
#include <gp_Circ.hxx>
#include <AIS_Axis.hxx>
#include <Graphic3d_ArrayOfQuadrangles.hxx>
#include <Graphic3d_ArrayOfQuadrangleStrips.hxx>
#include <Graphic3d_ArrayOfPolygons.hxx>
+#include <Graphic3d_AspectMarker3d.hxx>
#include <Graphic3d_Group.hxx>
#include <Standard_Real.hxx>
#include <Select3D_SensitiveTriangle.hxx>
#include <Select3D_SensitiveCurve.hxx>
+#include <Select3D_SensitivePoint.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <StdPrs_Curve.hxx>
#include <BRepExtrema_ExtPF.hxx>
#include <Prs3d_LineAspect.hxx>
+#include <Prs3d_PointAspect.hxx>
+
+#include <Image_AlienPixMap.hxx>
+#include <TColStd_HArray1OfAsciiString.hxx>
#ifdef HAVE_STRINGS_H
#include <strings.h>
extern Standard_Boolean VDisplayAISObject (const TCollection_AsciiString& theName,
const Handle(AIS_InteractiveObject)& theAISObj,
Standard_Boolean theReplaceIfExists = Standard_True);
-Standard_IMPORT int ViewerMainLoop(Standard_Integer argc, const char** argv);
+extern int ViewerMainLoop(Standard_Integer argc, const char** argv);
extern Handle(AIS_InteractiveContext)& TheAISContext();
Standard_Integer anArgIter = 2; // 1st is an IO name
if (anArgIter < theArgsNb)
{
- anOrigin.SetX (atof (theArgVec[anArgIter++]));
- anOrigin.SetY (atof (theArgVec[anArgIter++]));
- anOrigin.SetZ (atof (theArgVec[anArgIter++]));
+ anOrigin.SetX (Draw::Atof (theArgVec[anArgIter++]));
+ anOrigin.SetY (Draw::Atof (theArgVec[anArgIter++]));
+ anOrigin.SetZ (Draw::Atof (theArgVec[anArgIter++]));
if (anArgIter < theArgsNb)
{
- Standard_Real aX = atof (theArgVec[anArgIter++]);
- Standard_Real aY = atof (theArgVec[anArgIter++]);
- Standard_Real aZ = atof (theArgVec[anArgIter++]);
+ Standard_Real aX = Draw::Atof (theArgVec[anArgIter++]);
+ Standard_Real aY = Draw::Atof (theArgVec[anArgIter++]);
+ Standard_Real aZ = Draw::Atof (theArgVec[anArgIter++]);
aDirZ.SetCoord (aX, aY, aZ);
- aX = atof (theArgVec[anArgIter++]);
- aY = atof (theArgVec[anArgIter++]);
- aZ = atof (theArgVec[anArgIter++]);
+ aX = Draw::Atof (theArgVec[anArgIter++]);
+ aY = Draw::Atof (theArgVec[anArgIter++]);
+ aZ = Draw::Atof (theArgVec[anArgIter++]);
aDirX.SetCoord (aX, aY, aZ);
}
}
Standard_Boolean ThereIsCurrent;
Standard_Real value;
Standard_Boolean hascol;
-#ifdef DEB
- Quantity_NameOfColor col;
-#else
+
Quantity_NameOfColor col = Quantity_NOC_BLACK ;
-#endif
// Verification des arguments
if ( argc>3 ) {di<<argv[0]<<" Syntaxe error"<<"\n"; return 1;}
// Verification du nombre d'arguments
if (argc==1) {ThereIsName=Standard_False;value=100;}
- else if (argc==2) {ThereIsName=Standard_False;value=atof(argv[1]);}
- else {ThereIsName=Standard_True;value=atof(argv[2]);}
+ else if (argc==2) {ThereIsName=Standard_False;value=Draw::Atof(argv[1]);}
+ else {ThereIsName=Standard_True;value=Draw::Atof(argv[2]);}
// On ferme le contexte local pour travailler dans le contexte global
if(TheAISContext()->HasOpenedContext())
if (HasArg) {
Standard_Real coord[6];
for(Standard_Integer i=0;i<=5;i++){
- coord[i]=atof(argv[2+i]);
+ coord[i]=Draw::Atof(argv[2+i]);
}
gp_Pnt p1(coord[0],coord[1],coord[2]), p2(coord[3],coord[4],coord[5]) ;
if (HasArg) {
Standard_Real thecoord[3];
for(Standard_Integer i=0;i<=2;i++)
- thecoord[i]=atof(argv[2+i]);
+ thecoord[i]=Draw::Atof(argv[2+i]);
Handle(Geom_CartesianPoint ) myGeomPoint= new Geom_CartesianPoint (thecoord[0],thecoord[1],thecoord[2]);
Handle(AIS_Point) myAISPoint=new AIS_Point(myGeomPoint );
GetMapOfAIS().Bind (myAISPoint,name);
//==============================================================================
//function : VPlaneBuilder
//purpose : Build an AIS_Plane from selected entities or Named AIS components
-//Draw arg : vplane PlaneName [AxisName] [PointName]
-// [PointName] [PointName] [PointName]
-// [PlaneName] [PointName]
+//Draw arg : vplane PlaneName [AxisName] [PointName] [TypeOfSensitivity]
+// [PointName] [PointName] [PointName] [TypeOfSensitivity]
+// [PlaneName] [PointName] [TypeOfSensitivity]
//==============================================================================
-static Standard_Integer VPlaneBuilder (Draw_Interpretor& di,
+static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char** argv)
{
Standard_Integer aCurrentIndex;
// Verification
- if (argc<2 || argc>5 )
+ if (argc<2 || argc>6 )
{
std::cout<<" Syntax error\n";
return 1;
}
- if (argc==5 || argc==4)
+ if (argc == 6 || argc==5 || argc==4)
hasArg=Standard_True;
else
hasArg=Standard_False;
Handle(Geom_CartesianPoint)::DownCast( anAISPointC->Component());
// Verification that the three points are different
- if(abs(aCartPointB->X()-aCartPointA->X())<=Precision::Confusion() &&
- abs(aCartPointB->Y()-aCartPointA->Y())<=Precision::Confusion() &&
- abs(aCartPointB->Z()-aCartPointA->Z())<=Precision::Confusion())
+ if(Abs(aCartPointB->X()-aCartPointA->X())<=Precision::Confusion() &&
+ Abs(aCartPointB->Y()-aCartPointA->Y())<=Precision::Confusion() &&
+ Abs(aCartPointB->Z()-aCartPointA->Z())<=Precision::Confusion())
{
// B=A
std::cout<<"vplane error: same points"<<"\n";return 1;
}
- if(abs(aCartPointC->X()-aCartPointA->X())<=Precision::Confusion() &&
- abs(aCartPointC->Y()-aCartPointA->Y())<=Precision::Confusion() &&
- abs(aCartPointC->Z()-aCartPointA->Z())<=Precision::Confusion())
+ if(Abs(aCartPointC->X()-aCartPointA->X())<=Precision::Confusion() &&
+ Abs(aCartPointC->Y()-aCartPointA->Y())<=Precision::Confusion() &&
+ Abs(aCartPointC->Z()-aCartPointA->Z())<=Precision::Confusion())
{
// C=A
std::cout<<"vplane error: same points"<<"\n";return 1;
}
- if(abs(aCartPointC->X()-aCartPointB->X())<=Precision::Confusion() &&
- abs(aCartPointC->Y()-aCartPointB->Y())<=Precision::Confusion() &&
- abs(aCartPointC->Z()-aCartPointB->Z())<=Precision::Confusion())
+ if(Abs(aCartPointC->X()-aCartPointB->X())<=Precision::Confusion() &&
+ Abs(aCartPointC->Y()-aCartPointB->Y())<=Precision::Confusion() &&
+ Abs(aCartPointC->Z()-aCartPointB->Z())<=Precision::Confusion())
{
// C=B
std::cout<<"vplane error: same points"<<"\n";return 1;
Handle(Geom_Plane) aGeomPlane = MkPlane.Value();
Handle(AIS_Plane) anAISPlane = new AIS_Plane(aGeomPlane );
GetMapOfAIS().Bind (anAISPlane,aName );
+ if (argc == 6)
+ {
+ Standard_Integer aType = Draw::Atoi (argv[5]);
+ if (aType != 0 && aType != 1)
+ {
+ std::cout << "vplane error: wrong type of sensitivity!\n"
+ << "Should be one of the following values:\n"
+ << "0 - Interior\n"
+ << "1 - Boundary"
+ << std::endl;
+ return 1;
+ }
+ else
+ {
+ anAISPlane->SetTypeOfSensitivity (Select3D_TypeOfSensitivity (aType));
+ }
+ }
TheAISContext()->Display(anAISPlane);
}
Handle(Geom_Plane) aGeomPlane = new Geom_Plane(B,D);
Handle(AIS_Plane) anAISPlane = new AIS_Plane(aGeomPlane,B );
GetMapOfAIS().Bind (anAISPlane,aName );
+ if (argc == 5)
+ {
+ Standard_Integer aType = Draw::Atoi (argv[4]);
+ if (aType != 0 && aType != 1)
+ {
+ std::cout << "vplane error: wrong type of sensitivity!\n"
+ << "Should be one of the following values:\n"
+ << "0 - Interior\n"
+ << "1 - Boundary"
+ << std::endl;
+ return 1;
+ }
+ else
+ {
+ anAISPlane->SetTypeOfSensitivity (Select3D_TypeOfSensitivity (aType));
+ }
+ }
TheAISContext()->Display(anAISPlane);
}
// Construction of an AIS_Plane
Handle(AIS_Plane) anAISPlane = new AIS_Plane(aNewGeomPlane, B);
GetMapOfAIS().Bind (anAISPlane, aName);
+ if (argc == 5)
+ {
+ Standard_Integer aType = Draw::Atoi (argv[4]);
+ if (aType != 0 && aType != 1)
+ {
+ std::cout << "vplane error: wrong type of sensitivity!\n"
+ << "Should be one of the following values:\n"
+ << "0 - Interior\n"
+ << "1 - Boundary"
+ << std::endl;
+ return 1;
+ }
+ else
+ {
+ anAISPlane->SetTypeOfSensitivity (Select3D_TypeOfSensitivity (aType));
+ }
+ }
TheAISContext()->Display(anAISPlane);
}
// Error
return 0;
}
+//===============================================================================================
+//function : VChangePlane
+//purpose :
+//===============================================================================================
+static int VChangePlane (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb, const char** theArgVec)
+{
+ Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
+ if (aContextAIS.IsNull())
+ {
+ std::cout << theArgVec[0] << "AIS context is not available.\n";
+ return 1;
+ }
+
+ if (theArgsNb < 3 || theArgsNb > 11)
+ {
+ std::cerr << theArgVec[0]
+ << ": incorrect number of command arguments.\n"
+ << "Type help for more information.\n";
+ return 1;
+ }
+
+ TCollection_AsciiString aName (theArgVec[1]);
+
+ Handle(AIS_Plane) aPlane = GetMapOfAIS().IsBound2(aName)
+ ? Handle(AIS_Plane)::DownCast (GetMapOfAIS().Find2 (aName))
+ : NULL;
+
+ if ( aPlane.IsNull() )
+ {
+ std::cout << theArgVec[0]
+ << ": there is no interactive plane with the given name."
+ << "Type help for more information.\n";
+ return 1;
+ }
+
+ Standard_Real aCenterX = aPlane->Center().X();
+ Standard_Real aCenterY = aPlane->Center().Y();
+ Standard_Real aCenterZ = aPlane->Center().Z();
+
+ Standard_Real aDirX = aPlane->Component()->Axis().Direction().X();
+ Standard_Real aDirY = aPlane->Component()->Axis().Direction().Y();
+ Standard_Real aDirZ = aPlane->Component()->Axis().Direction().Z();
+
+ Standard_Real aSizeX = 0.0;
+ Standard_Real aSizeY = 0.0;
+ aPlane->Size (aSizeX, aSizeY);
+ Standard_Boolean isUpdate = Standard_True;
+
+ TCollection_AsciiString aPName, aPValue;
+ for (Standard_Integer anArgIt = 1; anArgIt < theArgsNb; ++anArgIt)
+ {
+ const TCollection_AsciiString anArg = theArgVec[anArgIt];
+ TCollection_AsciiString anArgCase = anArg;
+ anArgCase.UpperCase();
+ if (ViewerTest::SplitParameter (anArg, aPName, aPValue))
+ {
+ aPName.UpperCase();
+ if (aPName.IsEqual ("X"))
+ {
+ aCenterX = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("Y"))
+ {
+ aCenterY = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("Z"))
+ {
+ aCenterZ = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("DX"))
+ {
+ aDirX = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("DY"))
+ {
+ aDirY = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("DZ"))
+ {
+ aDirZ = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("SX"))
+ {
+ aSizeX = aPValue.RealValue();
+ }
+ else if (aPName.IsEqual ("SY"))
+ {
+ aSizeY = aPValue.RealValue();
+ }
+ }
+ else if (anArg.IsEqual ("NOUPDATE"))
+ {
+ isUpdate = Standard_False;
+ }
+ }
+
+ gp_Dir aDirection (aDirX, aDirY, aDirZ);
+ gp_Pnt aCenterPnt (aCenterX, aCenterY, aCenterZ);
+ aPlane->SetCenter (aCenterPnt);
+ aPlane->SetComponent (new Geom_Plane (aCenterPnt, aDirection));
+ aPlane->SetSize (aSizeX, aSizeY);
+
+ if (isUpdate)
+ {
+ aContextAIS->Update (aPlane, Standard_True);
+ }
+
+ return 0;
+}
//==============================================================================
// Fonction vline
Standard_Real coord[6];
for(Standard_Integer i=0;i<=2;i++){
- coord[i]=atof(argv[2+i]);
- coord[i+3]=atof(argv[5+i]);
+ coord[i]=Draw::Atof(argv[2+i]);
+ coord[i+3]=Draw::Atof(argv[5+i]);
}
Handle(Geom_CartesianPoint ) myCartPointA=new Geom_CartesianPoint (coord[0],coord[1],coord[2] );
return aFace;
}
-void FilledCircle::Compute(const Handle_PrsMgr_PresentationManager3d &thePresentationManager,
- const Handle_Prs3d_Presentation &thePresentation,
+void FilledCircle::Compute(const Handle(PrsMgr_PresentationManager3d) &/*thePresentationManager*/,
+ const Handle(Prs3d_Presentation) &thePresentation,
const Standard_Integer theMode)
{
thePresentation->Clear();
StdPrs_ShadedShape::Add(thePresentation, aFace, myDrawer);
}
-void FilledCircle::ComputeSelection(const Handle_SelectMgr_Selection &theSelection,
- const Standard_Integer theMode)
+void FilledCircle::ComputeSelection(const Handle(SelectMgr_Selection) &theSelection,
+ const Standard_Integer /*theMode*/)
{
Handle(SelectMgr_EntityOwner) anEntityOwner = new SelectMgr_EntityOwner(this);
Handle(Select3D_SensitiveCircle) aSensitiveCircle = new Select3D_SensitiveCircle(anEntityOwner,
else
{
aCircle = new AIS_Circle(theGeomCircle);
+ Handle(AIS_Circle)::DownCast (aCircle)->SetFilledCircleSens (Standard_False);
}
// Check if there is an object with given name
}
-static int VCircleBuilder(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
+static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const char** argv)
{
Standard_Integer myCurrentIndex;
// Verification of the arguments
{
// Get arguments
TCollection_AsciiString aName(argv[1]);
- Standard_Boolean isFilled = (Standard_Boolean)atoi(argv[5]);
+ Standard_Boolean isFilled = (Standard_Boolean)Draw::Atoi(argv[5]);
Handle(AIS_InteractiveObject) theShapeA;
Handle(AIS_InteractiveObject) theShapeB;
Handle(Geom_CartesianPoint)::DownCast(myGeomPointC);
// Test A=B
- if (abs(myCartPointA->X()-myCartPointB->X()) <= Precision::Confusion() &&
- abs(myCartPointA->Y()-myCartPointB->Y()) <= Precision::Confusion() &&
- abs(myCartPointA->Z()-myCartPointB->Z()) <= Precision::Confusion() )
+ if (Abs(myCartPointA->X()-myCartPointB->X()) <= Precision::Confusion() &&
+ Abs(myCartPointA->Y()-myCartPointB->Y()) <= Precision::Confusion() &&
+ Abs(myCartPointA->Z()-myCartPointB->Z()) <= Precision::Confusion() )
{
std::cout << "vcircle error: Same points.\n";
return 1; // TCL_ERROR
}
// Test A=C
- if (abs(myCartPointA->X()-myCartPointC->X()) <= Precision::Confusion() &&
- abs(myCartPointA->Y()-myCartPointC->Y()) <= Precision::Confusion() &&
- abs(myCartPointA->Z()-myCartPointC->Z()) <= Precision::Confusion() )
+ if (Abs(myCartPointA->X()-myCartPointC->X()) <= Precision::Confusion() &&
+ Abs(myCartPointA->Y()-myCartPointC->Y()) <= Precision::Confusion() &&
+ Abs(myCartPointA->Z()-myCartPointC->Z()) <= Precision::Confusion() )
{
std::cout << "vcircle error: Same points.\n";
return 1; // TCL_ERROR
}
// Test B=C
- if (abs(myCartPointB->X()-myCartPointC->X()) <= Precision::Confusion() &&
- abs(myCartPointB->Y()-myCartPointC->Y()) <= Precision::Confusion() &&
- abs(myCartPointB->Z()-myCartPointC->Z()) <= Precision::Confusion() )
+ if (Abs(myCartPointB->X()-myCartPointC->X()) <= Precision::Confusion() &&
+ Abs(myCartPointB->Y()-myCartPointC->Y()) <= Precision::Confusion() &&
+ Abs(myCartPointB->Z()-myCartPointC->Z()) <= Precision::Confusion() )
{
std::cout << "vcircle error: Same points.\n";
return 1;// TCL_ERROR
return 1; // TCL_ERROR
}
// Ñheck that the radius is >= 0
- if (atof(argv[4]) <= 0 )
+ if (Draw::Atof(argv[4]) <= 0 )
{
std::cout << "vcircle error: the radius must be >=0.\n";
return 1; // TCL_ERROR
gp_Ax1 thegpAxe = mygpPlane.Axis();
gp_Dir theDir = thegpAxe.Direction();
gp_Pnt theCenter = myCartPointB->Pnt();
- Standard_Real TheR = atof(argv[4]);
+ Standard_Real TheR = Draw::Atof(argv[4]);
GC_MakeCircle Cir = GC_MakeCircle (theCenter, theDir ,TheR);
Handle (Geom_Circle) theGeomCircle;
try
#include <Graphic3d_Group.hxx>
#include <Graphic3d_Structure.hxx>
#include <Graphic3d_AspectText3d.hxx>
-#include <Graphic2d_GraphicObject.hxx>
#include <Graphic3d_AspectFillArea3d.hxx>
#include <Graphic3d_StructureManager.hxx>
#include <Graphic3d_VerticalTextAlignment.hxx>
#include <Font_NameOfFont.hxx>
#include <Visual3d_ViewManager.hxx>
-#include <ViewerTest_Tool.ixx>
#include <Standard_DefineHandle.hxx>
const Handle(Prs3d_Presentation)& aPresentation,
const Standard_Integer aMode);
- void ComputeSelection ( const Handle(SelectMgr_Selection)& aSelection,
- const Standard_Integer aMode){} ;
+ void ComputeSelection ( const Handle(SelectMgr_Selection)& /*aSelection*/,
+ const Standard_Integer /*aMode*/){} ;
protected:
TCollection_ExtendedString aText;
Standard_Real aHeight;
Standard_Boolean aZoomable;
Quantity_Color aColor;
- Standard_CString aFont;
+ TCollection_AsciiString aFont;
Font_FontAspect aFontAspect;
Graphic3d_HorizontalTextAlignment aHJustification;
Graphic3d_VerticalTextAlignment aVJustification;
//////////////////////////////////////////////////////////////////////////////
-void MyTextClass::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
+void MyTextClass::Compute(const Handle(PrsMgr_PresentationManager3d)& /*aPresentationManager*/,
const Handle(Prs3d_Presentation)& aPresentation,
- const Standard_Integer aMode)
+ const Standard_Integer /*aMode*/)
{
aPresentation->Clear();
- Handle_Prs3d_TextAspect asp = myDrawer->TextAspect();
+ Handle(Prs3d_TextAspect) asp = myDrawer->TextAspect();
- asp->SetFont(aFont);
+ asp->SetFont(aFont.ToCString());
asp->SetColor(aColor);
asp->SetHeight(aHeight); // I am changing the myHeight value
}
// Text position
- const Standard_Real X = atof(argv[2]);
- const Standard_Real Y = atof(argv[3]);
- const Standard_Real Z = atof(argv[4]);
+ const Standard_Real X = Draw::Atof(argv[2]);
+ const Standard_Real Y = Draw::Atof(argv[3]);
+ const Standard_Real Z = Draw::Atof(argv[4]);
const gp_Pnt pnt(X,Y,Z);
// Text color
- const Quantity_Parameter R = atof(argv[5])/255.;
- const Quantity_Parameter G = atof(argv[6])/255.;
- const Quantity_Parameter B = atof(argv[7])/255.;
+ const Quantity_Parameter R = Draw::Atof(argv[5])/255.;
+ const Quantity_Parameter G = Draw::Atof(argv[6])/255.;
+ const Quantity_Parameter B = Draw::Atof(argv[7])/255.;
const Quantity_Color aColor( R, G, B, Quantity_TOC_RGB );
// Text alignment
- const int hor_align = atoi(argv[8]);
- const int ver_align = atoi(argv[9]);
+ const int hor_align = Draw::Atoi(argv[8]);
+ const int ver_align = Draw::Atoi(argv[9]);
// Text angle
- const Standard_Real angle = atof(argv[10]);
+ const Standard_Real angle = Draw::Atof(argv[10]);
// Text zooming
- const Standard_Boolean zoom = atoi(argv[11]);
+ const Standard_Boolean zoom = Draw::Atoi(argv[11]);
// Text height
- const Standard_Real height = atof(argv[12]);
+ const Standard_Real height = Draw::Atof(argv[12]);
// Text aspect
- const Font_FontAspect aspect = Font_FontAspect(atoi(argv[13]));
+ const Font_FontAspect aspect = Font_FontAspect(Draw::Atoi(argv[13]));
// Text font
TCollection_AsciiString font;
font.AssignCat(argv[14]);
// Text is multibyte
- const Standard_Boolean isMultibyte = (argc < 16)? Standard_False : (atoi(argv[15]) != 0);
+ const Standard_Boolean isMultibyte = (argc < 16)? Standard_False : (Draw::Atoi(argv[15]) != 0);
// Read text string
TCollection_ExtendedString name;
#include <TShort_HArray1OfShortReal.hxx>
#include <AIS_Triangulation.hxx>
-#include <Aspect_GraphicDevice.hxx>
#include <StdPrs_ToolShadedShape.hxx>
#include <Poly_Connect.hxx>
#include <TColgp_Array1OfDir.hxx>
int i, j;
int jStart, jEnd, numOffset;
- int numPts, numPolys;
double x[3], n[3], deltaPhi, deltaTheta, phi, theta, radius;
double startTheta, endTheta, startPhi, endPhi;
int base, numPoles=0, thetaResolution, phiResolution;
localStartTheta = localStartTheta + (double)(start) * deltaTheta;
localThetaResolution = end - start;
- numPts = mPhiResolution * localThetaResolution + 2;
- numPolys = mPhiResolution * 2 * localThetaResolution;
-
// Create north pole if needed
int number_point = 0;
int number_pointArray = 0;
//author : psn
//purpose : Create an AIS shape.
//===============================================================================================
-static int VDrawSphere (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
+static int VDrawSphere (Draw_Interpretor& /*di*/, Standard_Integer argc, const char** argv)
{
// check for errors
Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
else if (argc < 3)
{
std::cout << "Use: " << argv[0]
- << " shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToEnableVBO=1] [NumberOfViewerUpdate=1] [ToShowEdges=0]\n";
+ << " shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToShowEdges=0]\n";
return 1;
}
// read the arguments
TCollection_AsciiString aShapeName (argv[1]);
- Standard_Integer aResolution = atoi (argv[2]);
- Standard_Real aCenterX = (argc > 5) ? atof (argv[3]) : 0.0;
- Standard_Real aCenterY = (argc > 5) ? atof (argv[4]) : 0.0;
- Standard_Real aCenterZ = (argc > 5) ? atof (argv[5]) : 0.0;
- Standard_Real aRadius = (argc > 6) ? atof (argv[6]) : 100.0;
- Standard_Boolean toShowEdges = (argc > 7) ? atoi (argv[7]) : Standard_False;
+ Standard_Integer aResolution = Draw::Atoi (argv[2]);
+ Standard_Real aCenterX = (argc > 5) ? Draw::Atof (argv[3]) : 0.0;
+ Standard_Real aCenterY = (argc > 5) ? Draw::Atof (argv[4]) : 0.0;
+ Standard_Real aCenterZ = (argc > 5) ? Draw::Atof (argv[5]) : 0.0;
+ Standard_Real aRadius = (argc > 6) ? Draw::Atof (argv[6]) : 100.0;
+ Standard_Boolean toShowEdges = (argc > 7) ? Draw::Atoi (argv[7]) : Standard_False;
// remove AIS object with given name from map
VDisplayAISObject (aShapeName, Handle(AIS_InteractiveObject)());
return 0;
}
-//===============================================================================================
-//function : VClipPlane
-//purpose :
-//===============================================================================================
-static int VClipPlane (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
-{
- Handle(V3d_Viewer) aViewer = ViewerTest::GetViewerFromContext();
- Handle(V3d_View) aView = ViewerTest::CurrentView();
- Standard_Real coeffA, coeffB, coeffC, coeffD;
- if (aViewer.IsNull() || aView.IsNull())
- {
- std::cout << "Viewer not initialized!\n";
- return 1;
- }
-
- // count an active planes count
- Standard_Integer aNewPlaneId = 1;
- Standard_Integer anActivePlanes = 0;
- for (aViewer->InitDefinedPlanes(); aViewer->MoreDefinedPlanes(); aViewer->NextDefinedPlanes(), ++aNewPlaneId)
- {
- Handle(V3d_Plane) aPlaneV3d = aViewer->DefinedPlane();
- if (aView->IsActivePlane (aPlaneV3d))
- {
- ++anActivePlanes;
- }
- }
-
- if (argc == 1)
- {
- // just show info about existing planes
- Standard_Integer aPlaneId = 1;
- std::cout << "Active planes: " << anActivePlanes << " from maximal " << aView->View()->PlaneLimit() << "\n";
- for (aViewer->InitDefinedPlanes(); aViewer->MoreDefinedPlanes(); aViewer->NextDefinedPlanes(), ++aPlaneId)
- {
- Handle(V3d_Plane) aPlaneV3d = aViewer->DefinedPlane();
- aPlaneV3d->Plane (coeffA, coeffB, coeffC, coeffD);
- gp_Pln aPlane (coeffA, coeffB, coeffC, coeffD);
- const gp_Pnt& aLoc = aPlane.Location();
- const gp_Dir& aNor = aPlane.Axis().Direction();
- Standard_Boolean isActive = aView->IsActivePlane (aPlaneV3d);
- std::cout << "Plane #" << aPlaneId
- << " " << aLoc.X() << " " << aLoc.Y() << " " << aLoc.Z()
- << " " << aNor.X() << " " << aNor.Y() << " " << aNor.Z()
- << (isActive ? " on" : " off")
- << (aPlaneV3d->IsDisplayed() ? ", displayed" : ", hidden")
- << "\n";
- }
- if (aPlaneId == 1)
- {
- std::cout << "No defined clipping planes\n";
- }
- return 0;
- }
- else if (argc == 2 || argc == 3)
- {
- Standard_Integer aPlaneIdToOff = (argc == 3) ? atoi (argv[1]) : 1;
- Standard_Boolean toIterateAll = (argc == 2);
- TCollection_AsciiString isOnOffStr ((argc == 3) ? argv[2] : argv[1]);
- isOnOffStr.LowerCase();
- Standard_Integer aPlaneId = 1;
- for (aViewer->InitDefinedPlanes(); aViewer->MoreDefinedPlanes(); aViewer->NextDefinedPlanes(), ++aPlaneId)
- {
- if (aPlaneIdToOff == aPlaneId || toIterateAll)
- {
- Handle(V3d_Plane) aPlaneV3d = aViewer->DefinedPlane();
- if (isOnOffStr.Search ("off") >= 0)
- {
- aView->SetPlaneOff (aPlaneV3d);
- std::cout << "Clipping plane #" << aPlaneId << " was disabled\n";
- }
- else if (isOnOffStr.Search ("on") >= 0)
- {
- // avoid z-fighting glitches
- aPlaneV3d->Erase();
- if (!aView->IsActivePlane (aPlaneV3d))
- {
- if (anActivePlanes < aView->View()->PlaneLimit())
- {
- aView->SetPlaneOn (aPlaneV3d);
- std::cout << "Clipping plane #" << aPlaneId << " was enabled\n";
- }
- else
- {
- std::cout << "Maximal active planes limit exceeded (" << anActivePlanes << ")\n"
- << "You should disable or remove some existing plane to activate this one\n";
- }
- }
- else
- {
- std::cout << "Clipping plane #" << aPlaneId << " was already enabled\n";
- }
- }
- else if (isOnOffStr.Search ("del") >= 0 || isOnOffStr.Search ("rem") >= 0)
- {
- aPlaneV3d->Erase(); // not performed on destructor!!!
- aView->SetPlaneOff (aPlaneV3d);
- aViewer->DelPlane (aPlaneV3d);
- std::cout << "Clipping plane #" << aPlaneId << " was removed\n";
- if (toIterateAll)
- {
- for (aViewer->InitDefinedPlanes(); aViewer->MoreDefinedPlanes(); aViewer->InitDefinedPlanes(), ++aPlaneId)
- {
- aPlaneV3d = aViewer->DefinedPlane();
- aPlaneV3d->Erase(); // not performed on destructor!!!
- aView->SetPlaneOff (aPlaneV3d);
- aViewer->DelPlane (aPlaneV3d);
- std::cout << "Clipping plane #" << aPlaneId << " was removed\n";
- }
- break;
- }
- else
- {
- break;
- }
- }
- else if (isOnOffStr.Search ("disp") >= 0 || isOnOffStr.Search ("show") >= 0)
- {
- // avoid z-fighting glitches
- aView->SetPlaneOff (aPlaneV3d);
- aPlaneV3d->Display (aView);
- std::cout << "Clipping plane #" << aPlaneId << " was shown and disabled\n";
- }
- else if (isOnOffStr.Search ("hide") >= 0)
- {
- aPlaneV3d->Erase();
- std::cout << "Clipping plane #" << aPlaneId << " was hidden\n";
- }
- else
- {
- std::cout << "Usage: " << argv[0] << " [x y z dx dy dz] [planeId {on/off/del/display/hide}]\n";
- return 1;
- }
- }
- }
- if (aPlaneIdToOff >= aPlaneId && !toIterateAll)
- {
- std::cout << "Clipping plane with id " << aPlaneIdToOff << " not found!\n";
- return 1;
- }
- aView->Update();
- return 0;
- }
- else if (argc != 7)
- {
- std::cout << "Usage: " << argv[0] << " [x y z dx dy dz] [planeId {on/off/del/display/hide}]\n";
- return 1;
- }
-
- Standard_Real aLocX = atof (argv[1]);
- Standard_Real aLocY = atof (argv[2]);
- Standard_Real aLocZ = atof (argv[3]);
- Standard_Real aNormDX = atof (argv[4]);
- Standard_Real aNormDY = atof (argv[5]);
- Standard_Real aNormDZ = atof (argv[6]);
-
- Handle(V3d_Plane) aPlaneV3d = new V3d_Plane();
- gp_Pln aPlane (gp_Pnt (aLocX, aLocY, aLocZ), gp_Dir (aNormDX, aNormDY, aNormDZ));
- aPlane.Coefficients (coeffA, coeffB, coeffC, coeffD);
- aPlaneV3d->SetPlane(coeffA, coeffB, coeffC, coeffD);
-
- aViewer->AddPlane (aPlaneV3d); // add to defined planes list
- std::cout << "Added clipping plane #" << aNewPlaneId << "\n";
- if (anActivePlanes < aView->View()->PlaneLimit())
- {
- aView->SetPlaneOn (aPlaneV3d); // add to enabled planes list
- aView->Update();
- }
- else
- {
- std::cout << "Maximal active planes limit exceeded (" << anActivePlanes << ")\n"
- << "You should disable or remove some existing plane to activate the new one\n";
- }
- return 0;
-}
-
//=============================================================================
//function : VComputeHLR
//purpose :
{
gp_Dir anUp;
- anEye.SetCoord (atof (argv[3]), atof (argv[4]), atof (argv[5]));
- aDir.SetCoord (atof (argv[6]), atof (argv[7]), atof (argv[8]));
- anUp.SetCoord (atof (argv[9]), atof (argv[10]), atof (argv[11]));
+ anEye.SetCoord (Draw::Atof (argv[3]), Draw::Atof (argv[4]), Draw::Atof (argv[5]));
+ aDir.SetCoord (Draw::Atof (argv[6]), Draw::Atof (argv[7]), Draw::Atof (argv[8]));
+ anUp.SetCoord (Draw::Atof (argv[9]), Draw::Atof (argv[10]), Draw::Atof (argv[11]));
aProjAx.SetLocation (anEye);
aProjAx.SetDirection (aDir);
aProjAx.SetYDirection (anUp);
public:
- MyPArrayObject (const Handle(Graphic3d_ArrayOfPrimitives) theArray)
+ MyPArrayObject (Handle(TColStd_HArray1OfAsciiString) theArrayDescription,
+ Handle(Graphic3d_AspectMarker3d) theMarkerAspect = NULL)
{
- myArray = theArray;
+ myArrayDescription = theArrayDescription;
+ myMarkerAspect = theMarkerAspect;
}
DEFINE_STANDARD_RTTI(MyPArrayObject);
const Handle(Prs3d_Presentation)& aPresentation,
const Standard_Integer aMode);
- void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection,
- const Standard_Integer aMode) {};
+ void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
+ const Standard_Integer /*theMode*/);
+
+ bool CheckInputCommand (const TCollection_AsciiString theCommand,
+ const Handle(TColStd_HArray1OfAsciiString) theArgsArray,
+ Standard_Integer &theArgIndex,
+ Standard_Integer theArgCount,
+ Standard_Integer theMaxArgs);
protected:
- Handle(Graphic3d_ArrayOfPrimitives) myArray;
+ Handle(TColStd_HArray1OfAsciiString) myArrayDescription;
+ Handle(Graphic3d_AspectMarker3d) myMarkerAspect;
};
IMPLEMENT_STANDARD_HANDLE(MyPArrayObject, AIS_InteractiveObject)
IMPLEMENT_STANDARD_RTTIEXT(MyPArrayObject, AIS_InteractiveObject)
-void MyPArrayObject::Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
+void MyPArrayObject::Compute (const Handle(PrsMgr_PresentationManager3d)& /*aPresentationManager*/,
const Handle(Prs3d_Presentation)& aPresentation,
- const Standard_Integer aMode)
-{
- aPresentation->Clear();
- Prs3d_Root::CurrentGroup (aPresentation)->AddPrimitiveArray (myArray);
-}
-
-static bool CheckInputCommand (const TCollection_AsciiString theCommand,
- const char **theArgStr, int &theArgIndex,
- int theArgCount, int theMaxArgs)
-{
- // check if there is more elements than expected
- if (theArgIndex >= theMaxArgs)
- return false;
-
- TCollection_AsciiString aStrCommand(theArgStr[theArgIndex]);
- aStrCommand.LowerCase();
- if (aStrCommand.Search(theCommand) != 1 ||
- theArgIndex + (theArgCount - 1) >= theMaxArgs)
- return false;
-
- // go to the first data element
- theArgIndex++;
-
- // check data if it can be converted to numeric
- for (int aElement = 0; aElement < theArgCount; aElement++, theArgIndex++)
- {
- aStrCommand = theArgStr[theArgIndex];
- if (!aStrCommand.IsRealValue())
- return false;
- }
-
- return true;
-}
-
-//=============================================================================
-//function : VDrawPArray
-//purpose : Draws primitives array from list of vertexes, bounds, edges
-//=============================================================================
-
-static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
+ const Standard_Integer /*aMode*/)
{
- Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
- if (aContextAIS.IsNull())
- {
- di << "Call vinit before!\n";
- return 1;
- }
- else if (argc < 3)
- {
- di << "Use: " << argv[0] << " Name TypeOfArray"
- << " [vertex] ... [bounds] ... [edges]\n"
- << " TypeOfArray={ points | segments | polylines | triangles |\n"
- << " trianglefans | trianglestrips | quads |\n"
- << " quadstrips | polygons }\n"
- << " vertex={ 'v' x y z [normal={ 'n' nx ny nz }] [color={ 'c' r g b }]"
- << " [texel={ 't' tx ty }] } \n"
- << " bounds={ 'b' verticies_count [color={ 'c' r g b }] }\n"
- << " edges={ 'e' vertex_id [hidden_edge={'h'}] }\n";
- return 1;
- }
-
- // read the arguments
- Standard_Integer aArgIndex = 1;
- TCollection_AsciiString aName (argv[aArgIndex++]);
- TCollection_AsciiString anArrayType (argv[aArgIndex++]);
- const Standard_Integer anArgsFrom = aArgIndex;
- // parse number of verticies, bounds, edges
+ // Parsing array description
Standard_Integer aVertexNum = 0, aBoundNum = 0, aEdgeNum = 0;
- Standard_Boolean hasVColors, hasBColors, hasNormals, hasInfos, hasTexels;
- hasVColors = hasNormals = hasBColors = hasInfos = hasTexels = Standard_False;
+ Standard_Boolean hasVColors, hasBColors, hasNormals, hasTexels;
+ hasVColors = hasNormals = hasBColors = hasTexels = Standard_False;
+
+ Standard_Integer anArgIndex = 0;
+ Standard_Integer anArgsCount = myArrayDescription->Length();
+ TCollection_AsciiString anArrayType = myArrayDescription->Value (anArgIndex++);
TCollection_AsciiString aCommand;
- while (aArgIndex < argc)
+ while (anArgIndex < anArgsCount)
{
- aCommand = argv[aArgIndex];
+ aCommand = myArrayDescription->Value (anArgIndex);
aCommand.LowerCase();
- if (!aCommand.IsAscii())
- {
- di << "Unexpected argument: #" << aArgIndex - 1 << " , "
- << "should be an array element: 'v', 'b', 'e' \n";
- break;
- }
// vertex command
- if (CheckInputCommand ("v", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("v", myArrayDescription, anArgIndex, 3, anArgsCount))
{
// vertex has a normal or normal with color or texel
- if (CheckInputCommand ("n", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("n", myArrayDescription, anArgIndex, 3, anArgsCount))
hasNormals = Standard_True;
// vertex has a color
- if (CheckInputCommand ("c", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("c", myArrayDescription, anArgIndex, 3, anArgsCount))
hasVColors = Standard_True;
// vertex has a texel
- if (CheckInputCommand ("t", argv, aArgIndex, 2, argc))
+ if (CheckInputCommand ("t", myArrayDescription, anArgIndex, 2, anArgsCount))
hasTexels = Standard_True;
aVertexNum++;
}
// bound command
- else if (CheckInputCommand ("b", argv, aArgIndex, 1, argc))
+ else if (CheckInputCommand ("b", myArrayDescription, anArgIndex, 1, anArgsCount))
{
// bound has color
- if (CheckInputCommand ("c", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("c", myArrayDescription, anArgIndex, 3, anArgsCount))
hasBColors = Standard_True;
aBoundNum++;
}
// edge command
- else if (CheckInputCommand ("e", argv, aArgIndex, 1, argc))
+ else if (CheckInputCommand ("e", myArrayDescription, anArgIndex, 1, anArgsCount))
{
- // edge has a hide flag
- if (CheckInputCommand ("h", argv, aArgIndex, 0, argc))
- hasInfos = Standard_True;
-
aEdgeNum++;
}
// unknown command
else
- aArgIndex++;
+ anArgIndex++;
}
- if (aVertexNum == 0)
- {
- di << "You should pass any verticies in the list of array elements\n";
- return 1;
- }
-
- // create an array of primitives by types
Handle(Graphic3d_ArrayOfPrimitives) anArray;
if (anArrayType == "points")
+ {
anArray = new Graphic3d_ArrayOfPoints (aVertexNum);
+ }
else if (anArrayType == "segments")
anArray = new Graphic3d_ArrayOfSegments (aVertexNum, aEdgeNum, hasVColors);
else if (anArrayType == "polylines")
anArray = new Graphic3d_ArrayOfPolylines (aVertexNum, aBoundNum, aEdgeNum,
- hasVColors, hasBColors, hasInfos);
+ hasVColors, hasBColors);
else if (anArrayType == "triangles")
anArray = new Graphic3d_ArrayOfTriangles (aVertexNum, aEdgeNum, hasNormals,
- hasVColors, hasTexels, hasInfos);
+ hasVColors, hasTexels);
else if (anArrayType == "trianglefans")
anArray = new Graphic3d_ArrayOfTriangleFans (aVertexNum, aBoundNum,
hasNormals, hasVColors,
else if (anArrayType == "quads")
anArray = new Graphic3d_ArrayOfQuadrangles (aVertexNum, aEdgeNum,
hasNormals, hasVColors,
- hasTexels, hasInfos);
+ hasTexels);
else if (anArrayType == "quadstrips")
anArray = new Graphic3d_ArrayOfQuadrangleStrips (aVertexNum, aBoundNum,
hasNormals, hasVColors,
else if (anArrayType == "polygons")
anArray = new Graphic3d_ArrayOfPolygons (aVertexNum, aBoundNum, aEdgeNum,
hasNormals, hasVColors, hasBColors,
- hasTexels, hasInfos);
- else
- {
- di << "Unexpected type of primitiives array\n";
- return 1;
- }
+ hasTexels);
- // parse an array of primitives
- aArgIndex = anArgsFrom;
- while (aArgIndex < argc)
+ anArgIndex = 1;
+ while (anArgIndex < anArgsCount)
{
- aCommand = argv[aArgIndex];
+ aCommand = myArrayDescription->Value (anArgIndex);
aCommand.LowerCase();
if (!aCommand.IsAscii())
break;
// vertex command
- if (CheckInputCommand ("v", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("v", myArrayDescription, anArgIndex, 3, anArgsCount))
{
- anArray->AddVertex (atof (argv[aArgIndex - 3]),
- atof (argv[aArgIndex - 2]),
- atof (argv[aArgIndex - 1]));
+ anArray->AddVertex (myArrayDescription->Value (anArgIndex - 3).RealValue(),
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
+ const Standard_Integer aVertIndex = anArray->VertexNumber();
// vertex has a normal or normal with color or texel
- if (CheckInputCommand ("n", argv, aArgIndex, 3, argc))
- anArray->SetVertexNormal (anArray->VertexNumber (),
- atof (argv[aArgIndex - 3]),
- atof (argv[aArgIndex - 2]),
- atof (argv[aArgIndex - 1]));
+ if (CheckInputCommand ("n", myArrayDescription, anArgIndex, 3, anArgsCount))
+ anArray->SetVertexNormal (aVertIndex,
+ myArrayDescription->Value (anArgIndex - 3).RealValue(),
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
- if (CheckInputCommand ("c", argv, aArgIndex, 3, argc))
- anArray->SetVertexColor (anArray->VertexNumber (),
- atof (argv[aArgIndex - 3]),
- atof (argv[aArgIndex - 2]),
- atof (argv[aArgIndex - 1]));
+ if (CheckInputCommand ("c", myArrayDescription, anArgIndex, 3, anArgsCount))
+ anArray->SetVertexColor (aVertIndex,
+ myArrayDescription->Value (anArgIndex - 3).RealValue(),
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
- if (CheckInputCommand ("t", argv, aArgIndex, 2, argc))
- anArray->SetVertexTexel (anArray->VertexNumber (),
- atof (argv[aArgIndex - 2]),
- atof (argv[aArgIndex - 1]));
+ if (CheckInputCommand ("t", myArrayDescription, anArgIndex, 2, anArgsCount))
+ anArray->SetVertexTexel (aVertIndex,
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
}
// bounds command
- else if (CheckInputCommand ("b", argv, aArgIndex, 1, argc))
+ else if (CheckInputCommand ("b", myArrayDescription, anArgIndex, 1, anArgsCount))
{
- Standard_Integer aVertCount = atoi (argv[aArgIndex - 1]);
+ Standard_Integer aVertCount = myArrayDescription->Value (anArgIndex - 1).IntegerValue();
- if (CheckInputCommand ("c", argv, aArgIndex, 3, argc))
+ if (CheckInputCommand ("c", myArrayDescription, anArgIndex, 3, anArgsCount))
anArray->AddBound (aVertCount,
- atof (argv[aArgIndex - 3]),
- atof (argv[aArgIndex - 2]),
- atof (argv[aArgIndex - 1]));
+ myArrayDescription->Value (anArgIndex - 3).RealValue(),
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
else
anArray->AddBound (aVertCount);
}
// edge command
- else if (CheckInputCommand ("e", argv, aArgIndex, 1, argc))
+ else if (CheckInputCommand ("e", myArrayDescription, anArgIndex, 1, anArgsCount))
{
- Standard_Integer aVertIndex = atoi (argv[aArgIndex - 1]);
-
- // edge has/hasn't hide flag
- if (CheckInputCommand ("h", argv, aArgIndex, 0, argc))
- anArray->AddEdge (aVertIndex, Standard_False);
- else
- anArray->AddEdge (aVertIndex, Standard_True);
+ const Standard_Integer aVertIndex = myArrayDescription->Value (anArgIndex - 1).IntegerValue();
+ anArray->AddEdge (aVertIndex);
}
// unknown command
else
- aArgIndex++;
+ anArgIndex++;
}
- // create primitives array object
- Handle (MyPArrayObject) aPObject = new MyPArrayObject (anArray);
-
- // register the object in map
- VDisplayAISObject (aName, aPObject);
-
- return 0;
+ aPresentation->Clear();
+ if (!myMarkerAspect.IsNull())
+ {
+ Prs3d_Root::CurrentGroup (aPresentation)->SetGroupPrimitivesAspect (myMarkerAspect);
+ }
+ Prs3d_Root::CurrentGroup (aPresentation)->AddPrimitiveArray (anArray);
}
-//=======================================================================
-//function : VSetLocation
-//purpose : Change location of AIS interactive object
-//=======================================================================
-
-static Standard_Integer VSetLocation (Draw_Interpretor& di,
- Standard_Integer argc,
- const char ** argv)
+void MyPArrayObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
+ const Standard_Integer /*theMode*/)
{
- Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
- if (aContext.IsNull())
- {
- di << argv[0] << "ERROR : use 'vinit' command before " << "\n";
- return 1;
- }
+ Handle(SelectMgr_EntityOwner) anEntityOwner = new SelectMgr_EntityOwner (this);
- if (argc != 5)
+ Standard_Integer anArgIndex = 1;
+ while (anArgIndex < myArrayDescription->Length())
{
- di << "ERROR : Usage : " << argv[0] << " name x y z; new location" << "\n";
- return 1;
- }
+ if (CheckInputCommand ("v", myArrayDescription, anArgIndex, 3, myArrayDescription->Length()))
+ {
+ gp_Pnt aPoint (myArrayDescription->Value (anArgIndex - 3).RealValue(),
+ myArrayDescription->Value (anArgIndex - 2).RealValue(),
+ myArrayDescription->Value (anArgIndex - 1).RealValue());
+ Handle(Select3D_SensitivePoint) aSensetivePoint = new Select3D_SensitivePoint (anEntityOwner, aPoint);
+ theSelection->Add (aSensetivePoint);
+ }
+ else
+ {
+ anArgIndex++;
+ }
+ }
+}
+
+bool MyPArrayObject::CheckInputCommand (const TCollection_AsciiString theCommand,
+ const Handle(TColStd_HArray1OfAsciiString) theArgsArray,
+ Standard_Integer &theArgIndex,
+ Standard_Integer theArgCount,
+ Standard_Integer theMaxArgs)
+{
+ // check if there is more elements than expected
+ if (theArgIndex >= theMaxArgs)
+ return false;
+
+ TCollection_AsciiString aStrCommand = theArgsArray->Value (theArgIndex);
+ aStrCommand.LowerCase();
+ if (aStrCommand.Search(theCommand) != 1 ||
+ theArgIndex + (theArgCount - 1) >= theMaxArgs)
+ return false;
+
+ // go to the first data element
+ theArgIndex++;
+
+ // check data if it can be converted to numeric
+ for (int aElement = 0; aElement < theArgCount; aElement++, theArgIndex++)
+ {
+ aStrCommand = theArgsArray->Value (theArgIndex);
+ if (!aStrCommand.IsRealValue())
+ return false;
+ }
+
+ return true;
+}
+
+//=============================================================================
+//function : VDrawPArray
+//purpose : Draws primitives array from list of vertexes, bounds, edges
+//=============================================================================
+
+static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
+{
+ Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
+ if (aContextAIS.IsNull())
+ {
+ di << "Call vinit before!\n";
+ return 1;
+ }
+ else if (argc < 3)
+ {
+ di << "Use: " << argv[0] << " Name TypeOfArray"
+ << " [vertex] ... [bounds] ... [edges]\n"
+ << " TypeOfArray={ points | segments | polylines | triangles |\n"
+ << " trianglefans | trianglestrips | quads |\n"
+ << " quadstrips | polygons }\n"
+ << " vertex={ 'v' x y z [normal={ 'n' nx ny nz }] [color={ 'c' r g b }]"
+ << " [texel={ 't' tx ty }] } \n"
+ << " bounds={ 'b' verticies_count [color={ 'c' r g b }] }\n"
+ << " edges={ 'e' vertex_id }\n";
+ return 1;
+ }
+
+ // read the arguments
+ Standard_Integer aArgIndex = 1;
+ TCollection_AsciiString aName (argv[aArgIndex++]);
+ TCollection_AsciiString anArrayType (argv[aArgIndex++]);
+
+ Standard_Boolean hasVertex = Standard_False;
+
+ Handle(TColStd_HArray1OfAsciiString) anArgsArray = new TColStd_HArray1OfAsciiString (0, argc - 2);
+ anArgsArray->SetValue (0, anArrayType);
+
+ if (anArrayType != "points" &&
+ anArrayType != "segments" &&
+ anArrayType != "polylines" &&
+ anArrayType != "triangles" &&
+ anArrayType != "trianglefans" &&
+ anArrayType != "trianglestrips" &&
+ anArrayType != "quads" &&
+ anArrayType != "quadstrips" &&
+ anArrayType != "polygons")
+ {
+ di << "Unexpected type of primitives array\n";
+ return 1;
+ }
+
+ TCollection_AsciiString aCommand;
+ for (Standard_Integer anArgIndex = 3; anArgIndex < argc; anArgIndex++)
+ {
+ aCommand = argv[anArgIndex];
+ aCommand.LowerCase();
+ if (!aCommand.IsAscii())
+ {
+ di << "Unexpected argument: #" << aArgIndex - 1 << " , "
+ << "should be an array element: 'v', 'b', 'e' \n";
+ break;
+ }
+
+ if (aCommand == "v")
+ {
+ hasVertex = Standard_True;
+ }
+
+ anArgsArray->SetValue (anArgIndex - 2, aCommand);
+ }
+
+ if (!hasVertex)
+ {
+ di << "You should pass any verticies in the list of array elements\n";
+ return 1;
+ }
+
+ Handle(Graphic3d_AspectMarker3d) anAspPoints;
+ if (anArrayType == "points")
+ {
+ anAspPoints = new Graphic3d_AspectMarker3d (Aspect_TOM_POINT, Quantity_NOC_YELLOW, 1.0f);
+ }
+
+ // create primitives array object
+ Handle(MyPArrayObject) aPObject = new MyPArrayObject (anArgsArray, anAspPoints);
+
+ // register the object in map
+ VDisplayAISObject (aName, aPObject);
+
+ return 0;
+}
+
+//=======================================================================
+//function : VSetLocation
+//purpose : Change location of AIS interactive object
+//=======================================================================
+
+static Standard_Integer VSetLocation (Draw_Interpretor& di,
+ Standard_Integer argc,
+ const char ** argv)
+{
+ Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
+ if (aContext.IsNull())
+ {
+ di << argv[0] << "ERROR : use 'vinit' command before " << "\n";
+ return 1;
+ }
+
+ if (argc != 5)
+ {
+ di << "ERROR : Usage : " << argv[0] << " name x y z; new location" << "\n";
+ return 1;
+ }
TCollection_AsciiString aName (argv[1]);
- Standard_Real aX = atof (argv[2]);
- Standard_Real aY = atof (argv[3]);
- Standard_Real aZ = atof (argv[4]);
+ Standard_Real aX = Draw::Atof (argv[2]);
+ Standard_Real aY = Draw::Atof (argv[3]);
+ Standard_Real aZ = Draw::Atof (argv[4]);
// find object
ViewerTest_DoubleMapOfInteractiveAndName& aMap = GetMapOfAIS();
//Draw arg : vconnect name Xo Yo Zo Xu Xv Xw Zu Zv Zw object1 object2 ... [color=NAME]
//===============================================================================================
-static Standard_Integer VConnect(Draw_Interpretor& di,
+static Standard_Integer VConnect(Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
TCollection_AsciiString aName (argv[anArgIter++]);
Handle(AIS_InteractiveObject) anOriginObject;
TCollection_AsciiString aColorString (argv[argc-1]);
- Standard_CString aColorName;
+ Standard_CString aColorName = "";
Standard_Boolean hasColor = Standard_False;
if (aColorString.Search ("color=") != -1)
{
}
// Get location data
- Standard_Real aXo = atof (argv[anArgIter++]);
- Standard_Real aYo = atof (argv[anArgIter++]);
- Standard_Real aZo = atof (argv[anArgIter++]);
- Standard_Real aXu = atof (argv[anArgIter++]);
- Standard_Real aXv = atof (argv[anArgIter++]);
- Standard_Real aXw = atof (argv[anArgIter++]);
- Standard_Real aZu = atof (argv[anArgIter++]);
- Standard_Real aZv = atof (argv[anArgIter++]);
- Standard_Real aZw = atof (argv[anArgIter++]);
+ Standard_Real aXo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aYo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXu = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXv = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXw = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZu = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZv = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZw = Draw::Atof (argv[anArgIter++]);
// Create transformation
gp_Pnt aPoint(aXo, aYo, aZo);
//Draw arg : vconnectsh name Xo Yo Zo Xu Xv Xw Zu Zv Zw shape1 shape2 ... [color=NAME]
//===============================================================================================
-static Standard_Integer VConnectShape(Draw_Interpretor& di,
+static Standard_Integer VConnectShape(Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
TCollection_AsciiString aName (argv[anArgIter++]);
Handle(AIS_InteractiveObject) anOriginShape;
TCollection_AsciiString aColorString(argv[argc-1]);
- Standard_CString aColorName;
+ Standard_CString aColorName = "";
Standard_Boolean hasColor = Standard_False;
if (aColorString.Search ("color=") != -1)
{
}
// Get location data
- Standard_Real aXo = atof (argv[anArgIter++]);
- Standard_Real aYo = atof (argv[anArgIter++]);
- Standard_Real aZo = atof (argv[anArgIter++]);
- Standard_Real aXu = atof (argv[anArgIter++]);
- Standard_Real aXv = atof (argv[anArgIter++]);
- Standard_Real aXw = atof (argv[anArgIter++]);
- Standard_Real aZu = atof (argv[anArgIter++]);
- Standard_Real aZv = atof (argv[anArgIter++]);
- Standard_Real aZw = atof (argv[anArgIter++]);
+ Standard_Real aXo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aYo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZo = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXu = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXv = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aXw = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZu = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZv = Draw::Atof (argv[anArgIter++]);
+ Standard_Real aZw = Draw::Atof (argv[anArgIter++]);
// Create transformation
gp_Pnt aPoint(aXo, aYo, aZo);
return 0;
}
+namespace
+{
+ //! Checks if theMode is already turned on for theObj.
+ static Standard_Boolean InList (const Handle(AIS_InteractiveContext)& theAISContext,
+ const Handle(AIS_InteractiveObject)& theObj,
+ const Standard_Integer theMode)
+ {
+ TColStd_ListOfInteger anActiveModes;
+ theAISContext->ActivatedModes (theObj, anActiveModes);
+ for (TColStd_ListIteratorOfListOfInteger aModeIt (anActiveModes); aModeIt.More(); aModeIt.Next())
+ {
+ if (aModeIt.Value() == theMode)
+ {
+ return Standard_True;
+ }
+ }
+ return Standard_False;
+ }
+};
+
//===============================================================================================
//function : VSetSelectionMode
//purpose : Sets input selection mode for input object or for all displayed objects
//Draw arg : vselmode [object] mode On/Off (1/0)
//===============================================================================================
-
-// function : InList
-// purpose : checks if theMode is already turned on for theObj
-Standard_Boolean InList(Handle(AIS_InteractiveContext) theAISContext,
- Handle(AIS_InteractiveObject) theObj,
- Standard_Integer theMode)
-{
- TColStd_ListOfInteger anArray;
- theAISContext->ActivatedModes(theObj, anArray);
- TColStd_ListIteratorOfListOfInteger anIt(anArray);
- for(; anIt.More(); anIt.Next())
- {
- if(anIt.Value() == theMode)
- return Standard_True;
- }
- return Standard_False;
-}
-
-static Standard_Integer VSetSelectionMode(Draw_Interpretor& di,
- Standard_Integer argc,
- const char ** argv)
+static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
+ Standard_Integer theArgc,
+ const char** theArgv)
{
// Check errors
Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
- if(anAISContext.IsNull())
+ if (anAISContext.IsNull())
{
- std::cout << "Call vinit before!\n";
- return 1; // TCL_ERROR
+ std::cerr << "Call vinit before!\n";
+ return 1;
}
- // Check the arguments
- if(argc != 3 && argc != 4)
+ // Check the arguments
+ if (theArgc != 3 && theArgc != 4)
{
- std::cout << "vselmode error : expects at least 2 arguments\n";
- return 1; // TCL_ERROR
+ std::cerr << "vselmode error : expects at least 2 arguments.\n"
+ << "Type help "<< theArgv[0] <<" for more information.";
+ return 1;
}
- Handle(AIS_InteractiveObject) anObj;
-
- // Set new selection mode for all objects in context
- if(argc == 3)
+ // get objects to change selection mode
+ AIS_ListOfInteractive aTargetIOs;
+ if (theArgc == 3)
{
- // Get arguments
- Standard_Integer aMode = atoi(argv[1]);
- Standard_Boolean isTurnOn = atoi(argv[2]);
-
- // Get all displayed objects
- AIS_ListOfInteractive anObjList;
- anAISContext->DisplayedObjects(anObjList);
- AIS_ListIteratorOfListOfInteractive anObjIter;
-
- if(aMode == 0)
- {
- if(anAISContext->HasOpenedContext())
- anAISContext->CloseLocalContext();
- }
-
- // Turn on aMode
- if(aMode != 0 && isTurnOn)
+ anAISContext->DisplayedObjects (aTargetIOs);
+ }
+ else
+ {
+ // Check if there is an object with given name in context
+ const TCollection_AsciiString aNameIO (theArgv[1]);
+ if (GetMapOfAIS().IsBound2 (aNameIO))
{
- if(!anAISContext->HasOpenedContext())
+ Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast (GetMapOfAIS().Find2 (aNameIO));
+ if (anIO.IsNull())
{
- anAISContext->OpenLocalContext();
- for(anObjIter.Initialize(anObjList); anObjIter.More(); anObjIter.Next())
- {
- anAISContext->Activate(anObjIter.Value(), aMode);
- }
- }
- else
- {
- for(anObjIter.Initialize(anObjList); anObjIter.More(); anObjIter.Next())
- {
- anObj = anObjIter.Value();
- if(!InList(anAISContext, anObj, aMode))
- anAISContext->Activate(anObj, aMode);
- }
+ std::cerr << "vselmode error : object name is used for non AIS viewer\n";
+ return 1;
}
+ aTargetIOs.Append (anIO);
}
+ }
- // Turn off aMode
- if(aMode != 0 && !isTurnOn)
- {
- if(anAISContext->HasOpenedContext())
- {
- for(anObjIter.Initialize(anObjList); anObjIter.More(); anObjIter.Next())
- {
- anObj = anObjIter.Value();
- if(InList(anAISContext, anObj, aMode))
- anAISContext->Deactivate(anObj, aMode);
- }
- }
- }
+ const Standard_Integer aSelectionMode = Draw::Atoi (theArgc == 3 ? theArgv[1] : theArgv[2]);
+ const Standard_Boolean toTurnOn = Draw::Atoi (theArgc == 3 ? theArgv[2] : theArgv[3]);
+ if (aSelectionMode == 0 && anAISContext->HasOpenedContext())
+ {
+ anAISContext->CloseLocalContext();
}
- // Set new selection mode for named object
- else
+ if (aSelectionMode != 0 && toTurnOn) // Turn on specified mode
{
- // Get argumnets
- Standard_Integer aMode = atoi(argv[2]);
- Standard_Boolean isTurnOn = atoi(argv[3]);
- TCollection_AsciiString aName(argv[1]);
+ if (!anAISContext->HasOpenedContext())
+ {
+ anAISContext->OpenLocalContext (Standard_False);
+ }
- // Check if there is an object with given name in context
- if(GetMapOfAIS().IsBound2(aName))
+ for (AIS_ListIteratorOfListOfInteractive aTargetIt (aTargetIOs); aTargetIt.More(); aTargetIt.Next())
{
- anObj = Handle(AIS_InteractiveObject)::
- DownCast(GetMapOfAIS().Find2(aName));
- if(anObj.IsNull())
+ const Handle(AIS_InteractiveObject)& anIO = aTargetIt.Value();
+ if (!InList (anAISContext, anIO, aSelectionMode))
{
- std::cout << "vselmode error : object name is used for non AIS viewer\n";
- return 1; // TCL_ERROR
+ anAISContext->Load (anIO, -1, Standard_True);
+ anAISContext->Activate (anIO, aSelectionMode);
}
}
+ }
- if(aMode == 0)
- {
- if(anAISContext->HasOpenedContext())
- anAISContext->CloseLocalContext();
- }
- // Turn on aMode
- if(aMode != 0 && isTurnOn)
+ if (aSelectionMode != 0 && !toTurnOn) // Turn off specified mode
+ {
+ if (!anAISContext->HasOpenedContext())
{
- if(!anAISContext->HasOpenedContext())
- {
- anAISContext->OpenLocalContext();
- anAISContext->Activate(anObj, aMode);
- }
- else
- {
- if(!InList(anAISContext, anObj, aMode))
- anAISContext->Activate(anObj, aMode);
- }
+ return 0;
}
- // Turn off aMode
- if(aMode != 0 && !isTurnOn)
+ for (AIS_ListIteratorOfListOfInteractive aTargetIt (aTargetIOs); aTargetIt.More(); aTargetIt.Next())
{
- if(anAISContext->HasOpenedContext())
+ const Handle(AIS_InteractiveObject)& anIO = aTargetIt.Value();
+ if (InList (anAISContext, anIO, aSelectionMode))
{
- if(InList(anAISContext, anObj, aMode))
- anAISContext->Deactivate(anObj, aMode);
+ anAISContext->Deactivate (anIO, aSelectionMode);
}
}
}
+
return 0;
}
myPoint3 = theP3;
}
-void Triangle::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
+void Triangle::Compute(const Handle(PrsMgr_PresentationManager3d)& /*thePresentationManager*/,
const Handle(Prs3d_Presentation)& thePresentation,
- const Standard_Integer theMode)
+ const Standard_Integer /*theMode*/)
{
thePresentation->Clear();
}
void Triangle::ComputeSelection(const Handle(SelectMgr_Selection)& theSelection,
- const Standard_Integer theMode)
+ const Standard_Integer /*theMode*/)
{
Handle(SelectMgr_EntityOwner) anEntityOwner = new SelectMgr_EntityOwner(this);
Handle(Select3D_SensitiveTriangle) aSensTriangle =
Standard_Boolean IsMatch (const Handle(Geom_CartesianPoint)& thePoint1,
const Handle(Geom_CartesianPoint)& thePoint2)
{
- if(abs(thePoint1->X()-thePoint2->X()) <= Precision::Confusion() &&
- abs(thePoint1->Y()-thePoint2->Y()) <= Precision::Confusion() &&
- abs(thePoint1->Z()-thePoint2->Z()) <= Precision::Confusion())
+ if(Abs(thePoint1->X()-thePoint2->X()) <= Precision::Confusion() &&
+ Abs(thePoint1->Y()-thePoint2->Y()) <= Precision::Confusion() &&
+ Abs(thePoint1->Z()-thePoint2->Z()) <= Precision::Confusion())
{
return Standard_True;
}
return Standard_False;
}
-static Standard_Integer VTriangle (Draw_Interpretor& di,
+static Standard_Integer VTriangle (Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
myPoint2 = thePnt2;
}
-void SegmentObject::Compute (const Handle_PrsMgr_PresentationManager3d &thePresentationManager,
- const Handle_Prs3d_Presentation &thePresentation,
- const Standard_Integer theMode)
+void SegmentObject::Compute (const Handle(PrsMgr_PresentationManager3d) &/*thePresentationManager*/,
+ const Handle(Prs3d_Presentation) &thePresentation,
+ const Standard_Integer /*theMode*/)
{
thePresentation->Clear();
BRepBuilderAPI_MakeEdge anEdgeMaker(myPoint1, myPoint2);
StdPrs_Curve::Add(thePresentation, aCurveAdaptor, myDrawer);
}
-void SegmentObject::ComputeSelection (const Handle_SelectMgr_Selection &theSelection,
- const Standard_Integer theMode)
+void SegmentObject::ComputeSelection (const Handle(SelectMgr_Selection) &theSelection,
+ const Standard_Integer /*theMode*/)
{
Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner(this);
Handle(TColgp_HArray1OfPnt) anArray = new TColgp_HArray1OfPnt(1, 2);
//Draw args : vsegment Name PointName PointName
//purpose : creates and displays Segment
//=======================================================================
-static Standard_Integer VSegment (Draw_Interpretor& di,
+static Standard_Integer VSegment (Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
// process operation
if (aOperation.IsEqual ("set"))
{
- Standard_Integer aLayerId = atoi (argv [3]);
+ Standard_Integer aLayerId = Draw::Atoi (argv [3]);
aContext->SetZLayer (anInterObj, aLayerId);
}
else if (aOperation.IsEqual ("get"))
//function : VPolygonOffset
//purpose : Set or get polygon offset parameters
//=======================================================================
-static Standard_Integer VPolygonOffset(Draw_Interpretor& di,
+static Standard_Integer VPolygonOffset(Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
Standard_ShortReal aFactor, aUnits;
if (argc == 5)
{
- aMode = atoi(argv[2]);
- aFactor = (Standard_ShortReal) atof(argv[3]);
- aUnits = (Standard_ShortReal) atof(argv[4]);
+ aMode = Draw::Atoi(argv[2]);
+ aFactor = (Standard_ShortReal) Draw::Atof(argv[3]);
+ aUnits = (Standard_ShortReal) Draw::Atof(argv[4]);
anInterObj->SetPolygonOffsets(aMode, aFactor, aUnits);
aContext->UpdateCurrentViewer();
//function : VShowFaceBoundaries
//purpose : Set face boundaries drawing on/off for ais object
//=======================================================================
-static Standard_Integer VShowFaceBoundary (Draw_Interpretor& di,
+static Standard_Integer VShowFaceBoundary (Draw_Interpretor& /*di*/,
Standard_Integer argc,
const char ** argv)
{
TheAISContext ()->DefaultDrawer () : anInterObj->Attributes ();
// turn boundaries on/off
- Standard_Boolean isBoundaryDraw = (atoi (argv[2]) == 1);
+ Standard_Boolean isBoundaryDraw = (Draw::Atoi (argv[2]) == 1);
aDrawer->SetFaceBoundaryDraw (isBoundaryDraw);
// set boundary line color
if (argc >= 6)
{
// Text color
- aRed = atof (argv[3])/255.;
- aGreen = atof (argv[4])/255.;
- aBlue = atof (argv[5])/255.;
+ aRed = Draw::Atof (argv[3])/255.;
+ aGreen = Draw::Atof (argv[4])/255.;
+ aBlue = Draw::Atof (argv[5])/255.;
}
// set line width
if (argc >= 7)
{
- aWidth = (Standard_Real)atof (argv[6]);
+ aWidth = (Standard_Real)Draw::Atof (argv[6]);
}
// select appropriate line type
if (argc == 8)
{
- switch (atoi (argv[7]))
+ switch (Draw::Atoi (argv[7]))
{
case 1: aLineType = Aspect_TOL_DASH; break;
case 2: aLineType = Aspect_TOL_DOT; break;
return 0;
}
+// This class is used for testing markers.
+DEFINE_STANDARD_HANDLE(ViewerTest_MarkersArrayObject, AIS_InteractiveObject)
+class ViewerTest_MarkersArrayObject : public AIS_InteractiveObject
+{
+
+public:
+
+ ViewerTest_MarkersArrayObject (const gp_XYZ& theStartPoint,
+ const Standard_Integer& thePointsOnSide,
+ Handle(Graphic3d_AspectMarker3d) theMarkerAspect = NULL)
+ {
+ myStartPoint = theStartPoint;
+ myPointsOnSide = thePointsOnSide;
+ myMarkerAspect = theMarkerAspect;
+ }
+
+ DEFINE_STANDARD_RTTI(MyPArrayObject);
+
+private:
+
+ void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
+ const Handle(Prs3d_Presentation)& aPresentation,
+ const Standard_Integer aMode);
+
+ void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
+ const Standard_Integer /*theMode*/);
+
+protected:
+
+ gp_XYZ myStartPoint;
+ Standard_Integer myPointsOnSide;
+ Handle(Graphic3d_AspectMarker3d) myMarkerAspect;
+};
+
+IMPLEMENT_STANDARD_HANDLE(ViewerTest_MarkersArrayObject, AIS_InteractiveObject)
+IMPLEMENT_STANDARD_RTTIEXT(ViewerTest_MarkersArrayObject, AIS_InteractiveObject)
+
+void ViewerTest_MarkersArrayObject::Compute (const Handle(PrsMgr_PresentationManager3d)& /*aPresentationManager*/,
+ const Handle(Prs3d_Presentation)& aPresentation,
+ const Standard_Integer /*aMode*/)
+{
+ Handle(Graphic3d_ArrayOfPrimitives) anArray = new Graphic3d_ArrayOfPoints ((Standard_Integer )Pow (myPointsOnSide, 3), myPointsOnSide != 1);
+ if (myPointsOnSide == 1)
+ {
+ anArray->AddVertex (myStartPoint);
+ }
+ else
+ {
+ for (Standard_Real i = 1; i <= myPointsOnSide; i++)
+ {
+ for (Standard_Real j = 1; j <= myPointsOnSide; j++)
+ {
+ for (Standard_Real k = 1; k <= myPointsOnSide; k++)
+ {
+ anArray->AddVertex (myStartPoint.X() + i, myStartPoint.Y() + j, myStartPoint.Z() + k);
+ anArray->SetVertexColor (anArray->VertexNumber(),
+ i / myPointsOnSide,
+ j / myPointsOnSide,
+ k / myPointsOnSide);
+ }
+ }
+ }
+ }
+
+ aPresentation->Clear();
+ if (!myMarkerAspect.IsNull())
+ {
+ Prs3d_Root::CurrentGroup (aPresentation)->SetGroupPrimitivesAspect (myMarkerAspect);
+ }
+ Prs3d_Root::CurrentGroup (aPresentation)->AddPrimitiveArray (anArray);
+}
+
+void ViewerTest_MarkersArrayObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
+ const Standard_Integer /*theMode*/)
+{
+ Handle(SelectMgr_EntityOwner) anEntityOwner = new SelectMgr_EntityOwner (this);
+
+ if (myPointsOnSide == 1)
+ {
+ gp_Pnt aPoint (myStartPoint);
+ Handle(Select3D_SensitivePoint) aSensetivePoint = new Select3D_SensitivePoint (anEntityOwner, aPoint);
+ theSelection->Add (aSensetivePoint);
+ }
+ else
+ {
+ for (Standard_Real i = 1; i <= myPointsOnSide; i++)
+ {
+ for (Standard_Real j = 1; j <= myPointsOnSide; j++)
+ {
+ for (Standard_Real k = 1; k <= myPointsOnSide; k++)
+ {
+ gp_Pnt aPoint (myStartPoint.X() + i, myStartPoint.Y() + j, myStartPoint.Z() + k);
+ Handle(Select3D_SensitivePoint) aSensetivePoint = new Select3D_SensitivePoint (anEntityOwner, aPoint);
+ theSelection->Add (aSensetivePoint);
+ }
+ }
+ }
+ }
+}
+//=======================================================================
+//function : VMarkersTest
+//purpose : Draws an array of markers for testing purposes.
+//=======================================================================
+static Standard_Integer VMarkersTest (Draw_Interpretor&,
+ Standard_Integer theArgNb,
+ const char** theArgVec)
+{
+ Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
+ if (aContext.IsNull())
+ {
+ std::cerr << "Call 'vinit' before!\n";
+ return 1;
+ }
+
+ if (theArgNb < 5)
+ {
+ std::cerr << "Usage :\n " << theArgVec[0]
+ << "name X Y Z [PointsOnSide=10] [MarkerType=0] [Scale=1.0] [FileName=ImageFile]\n";
+ return 1;
+ }
+
+ Standard_Integer anArgIter = 1;
+
+ TCollection_AsciiString aName (theArgVec[anArgIter++]);
+ TCollection_AsciiString aFileName;
+ gp_XYZ aPnt (Atof (theArgVec[anArgIter]),
+ Atof (theArgVec[anArgIter + 1]),
+ Atof (theArgVec[anArgIter + 2]));
+ anArgIter += 3;
+
+ Standard_Integer aPointsOnSide = 10;
+ Standard_Integer aMarkerType = -1;
+ Standard_Real aScale = 1.0;
+ for (; anArgIter < theArgNb; ++anArgIter)
+ {
+ const TCollection_AsciiString anArg (theArgVec[anArgIter]);
+ if (anArg.Search ("PointsOnSide=") > -1)
+ {
+ aPointsOnSide = anArg.Token ("=", 2).IntegerValue();
+ }
+ else if (anArg.Search ("MarkerType=") > -1)
+ {
+ aMarkerType = anArg.Token ("=", 2).IntegerValue();
+ }
+ else if (anArg.Search ("Scale=") > -1)
+ {
+ aScale = anArg.Token ("=", 2).RealValue();
+ }
+ else if (anArg.Search ("FileName=") > -1)
+ {
+ aFileName = anArg.Token ("=", 2);
+ }
+ else
+ {
+ std::cerr << "Wrong argument: " << anArg << "\n";
+ return 1;
+ }
+ }
+
+ Handle(Graphic3d_AspectMarker3d) anAspect;
+ Handle(Image_AlienPixMap) anImage;
+ Quantity_Color aColor (Quantity_NOC_GREEN1);
+ if ((aMarkerType == Aspect_TOM_USERDEFINED || aMarkerType < 0)
+ && !aFileName.IsEmpty())
+ {
+ anImage = new Image_AlienPixMap();
+ if (!anImage->Load (aFileName))
+ {
+ std::cerr << "Could not load image from file '" << aFileName << "'!\n";
+ return 1;
+ }
+ anAspect = new Graphic3d_AspectMarker3d (anImage);
+ }
+ else
+ {
+ anAspect = new Graphic3d_AspectMarker3d (aMarkerType >= 0 ? (Aspect_TypeOfMarker )aMarkerType : Aspect_TOM_POINT, aColor, aScale);
+ }
+
+ Handle(ViewerTest_MarkersArrayObject) aMarkersArray = new ViewerTest_MarkersArrayObject (aPnt, aPointsOnSide, anAspect);
+ VDisplayAISObject (aName, aMarkersArray);
+
+ return 0;
+}
+
+//! Auxiliary function to parse font aspect style argument
+static Standard_Boolean parseFontStyle (const TCollection_AsciiString& theArg,
+ Font_FontAspect& theAspect)
+{
+ if (theArg == "regular"
+ || *theArg.ToCString() == 'r')
+ {
+ theAspect = Font_FA_Regular;
+ return Standard_True;
+ }
+ else if (theArg == "bolditalic")
+ {
+ theAspect = Font_FA_BoldItalic;
+ return Standard_True;
+ }
+ else if (theArg == "bold"
+ || *theArg.ToCString() == 'b')
+ {
+ theAspect = Font_FA_Bold;
+ return Standard_True;
+ }
+ else if (theArg == "italic"
+ || *theArg.ToCString() == 'i')
+ {
+ theAspect = Font_FA_Italic;
+ return Standard_True;
+ }
+ return Standard_False;
+}
+
+//! Auxiliary function
+static TCollection_AsciiString fontStyleString (const Font_FontAspect theAspect)
+{
+ switch (theAspect)
+ {
+ case Font_FA_Regular: return "regular";
+ case Font_FA_BoldItalic: return "bolditalic";
+ case Font_FA_Bold: return "bold";
+ case Font_FA_Italic: return "italic";
+ default: return "undefined";
+ }
+}
+
+//=======================================================================
+//function : TextToBrep
+//purpose : Tool for conversion text to occt-shapes
+//=======================================================================
+
+static int TextToBRep (Draw_Interpretor& /*theDI*/,
+ Standard_Integer theArgNb,
+ const char** theArgVec)
+{
+ // Check arguments
+ if (theArgNb < 5)
+ {
+ std::cerr << "Error: " << theArgVec[0] << " - invalid syntax\n";
+ return 1;
+ }
+
+ Standard_Integer anArgIter = 1;
+ Standard_CString aResName = theArgVec[anArgIter++];
+ Standard_CString aText = theArgVec[anArgIter++];
+ Standard_CString aFontName = theArgVec[anArgIter++];
+ const Standard_Real aSize = Atof (theArgVec[anArgIter++]);
+
+ Font_BRepFont aFont;
+ Font_FontAspect aFontAspect = Font_FA_Regular;
+ Standard_Boolean isCompositeCurve = Standard_False;
+ gp_Ax3 aPenAx3 (gp::XOY());
+ gp_Pnt aPenLoc;
+ while (anArgIter < theArgNb)
+ {
+ const TCollection_AsciiString anArg (theArgVec[anArgIter++]);
+ TCollection_AsciiString anArgCase (anArg);
+ anArgCase.LowerCase();
+ if (anArgCase.Search ("x=") > -1)
+ {
+ aPenLoc.SetX (anArg.Token ("=", 2).RealValue());
+ }
+ else if (anArgCase.Search ("y=") > -1)
+ {
+ aPenLoc.SetY (anArg.Token ("=", 2).RealValue());
+ }
+ else if (anArgCase.Search ("z=") > -1)
+ {
+ aPenLoc.SetZ (anArg.Token ("=", 2).RealValue());
+ }
+ else if (anArgCase.Search ("composite=") > -1)
+ {
+ isCompositeCurve = (anArg.Token ("=", 2).IntegerValue() == 1);
+ }
+ else if (parseFontStyle (anArgCase, aFontAspect))
+ {
+ //
+ }
+ else
+ {
+ std::cerr << "Warning! Unknown argument '" << anArg.ToCString() << "'\n";
+ }
+ }
+
+ aFont.SetCompositeCurveMode (isCompositeCurve);
+ if (!aFont.Init (aFontName, aFontAspect, aSize))
+ {
+ std::cerr << "Font initialization error\n";
+ return 1;
+ }
+
+ aPenAx3.SetLocation (aPenLoc);
+ DBRep::Set (aResName, aFont.RenderText (aText, aPenAx3));
+ return 0;
+}
+
+//=======================================================================
+//function : VFont
+//purpose : Font management
+//=======================================================================
+
+static int VFont (Draw_Interpretor& theDI,
+ Standard_Integer theArgNb,
+ const char** theArgVec)
+{
+ Handle(Font_FontMgr) aMgr = Font_FontMgr::GetInstance();
+ if (theArgNb < 2)
+ {
+ // just print the list of available fonts
+ Standard_Boolean isFirst = Standard_True;
+ for (Font_NListOfSystemFont::Iterator anIter (aMgr->GetAvailableFonts());
+ anIter.More(); anIter.Next())
+ {
+ const Handle(Font_SystemFont)& aFont = anIter.Value();
+ if (!isFirst)
+ {
+ theDI << "\n";
+ }
+
+ theDI << aFont->FontName()->String()
+ << " " << fontStyleString (aFont->FontAspect())
+ << " " << aFont->FontPath()->String();
+ isFirst = Standard_False;
+ }
+ return 0;
+ }
+
+ for (Standard_Integer anArgIter = 1; anArgIter < theArgNb; ++anArgIter)
+ {
+ const TCollection_AsciiString anArg (theArgVec[anArgIter]);
+ TCollection_AsciiString anArgCase (anArg);
+ anArgCase.LowerCase();
+ if (anArgCase == "find")
+ {
+ if (++anArgIter >= theArgNb)
+ {
+ std::cerr << "Wrong syntax at argument '" << anArg.ToCString() << "'!\n";
+ return 1;
+ }
+
+ Standard_CString aFontName = theArgVec[anArgIter];
+ Font_FontAspect aFontAspect = Font_FA_Undefined;
+ if (++anArgIter < theArgNb)
+ {
+ anArgCase = theArgVec[anArgIter];
+ anArgCase.LowerCase();
+ if (!parseFontStyle (anArgCase, aFontAspect))
+ {
+ --anArgIter;
+ }
+ }
+ Handle(Font_SystemFont) aFont = aMgr->FindFont (new TCollection_HAsciiString (aFontName), aFontAspect, -1);
+ if (aFont.IsNull())
+ {
+ std::cerr << "Error: font '" << aFontName << "' is not found!\n";
+ continue;
+ }
+
+ theDI << aFont->FontName()->String()
+ << " " << fontStyleString (aFont->FontAspect())
+ << " " << aFont->FontPath()->String();
+ }
+ else if (anArgCase == "add"
+ || anArgCase == "register")
+ {
+ if (++anArgIter >= theArgNb)
+ {
+ std::cerr << "Wrong syntax at argument '" << anArg.ToCString() << "'!\n";
+ return 1;
+ }
+ Standard_CString aFontPath = theArgVec[anArgIter];
+ Standard_CString aFontName = NULL;
+ Font_FontAspect aFontAspect = Font_FA_Undefined;
+ if (++anArgIter < theArgNb)
+ {
+ if (!parseFontStyle (anArgCase, aFontAspect))
+ {
+ aFontName = theArgVec[anArgIter];
+ }
+ if (++anArgIter < theArgNb)
+ {
+ anArgCase = theArgVec[anArgIter];
+ anArgCase.LowerCase();
+ if (!parseFontStyle (anArgCase, aFontAspect))
+ {
+ --anArgIter;
+ }
+ }
+ }
+
+ Handle(Font_SystemFont) aFont = aMgr->CheckFont (aFontPath);
+ if (aFont.IsNull())
+ {
+ std::cerr << "Error: font '" << aFontPath << "' is not found!\n";
+ continue;
+ }
+
+ if (aFontAspect != Font_FA_Undefined
+ || aFontName != NULL)
+ {
+ if (aFontAspect == Font_FA_Undefined)
+ {
+ aFontAspect = aFont->FontAspect();
+ }
+ Handle(TCollection_HAsciiString) aName = aFont->FontName();
+ if (aFontName != NULL)
+ {
+ aName = new TCollection_HAsciiString (aFontName);
+ }
+ aFont = new Font_SystemFont (aName, aFontAspect, new TCollection_HAsciiString (aFontPath));
+ }
+
+ aMgr->RegisterFont (aFont, Standard_True);
+ theDI << aFont->FontName()->String()
+ << " " << fontStyleString (aFont->FontAspect())
+ << " " << aFont->FontPath()->String();
+ }
+ else
+ {
+ std::cerr << "Warning! Unknown argument '" << anArg.ToCString() << "'\n";
+ }
+ }
+
+ return 0;
+}
+
//=======================================================================
//function : ObjectsCommands
//purpose :
__FILE__,VPointBuilder,group);
theCommands.Add("vplane",
- "vplane PlaneName [AxisName/PlaneName/PointName] [PointName/PointName/PointName] [Nothing/Nothing/PointName] ",
+ "vplane PlaneName [AxisName/PlaneName/PointName] [PointName/PointName/PointName] [Nothing/Nothing/PointName] [TypeOfSensitivity]",
__FILE__,VPlaneBuilder,group);
+ theCommands.Add ("vchangeplane", "vchangeplane usage: \n"
+ " vchangeplane <plane_name>"
+ " [x=center_x y=center_y z=center_z]"
+ " [dx=dir_x dy=dir_y dz=dir_z]"
+ " [sx=size_x sy=size_y]"
+ " [noupdate]\n"
+ " - changes parameters of the plane:\n"
+ " - x y z - center\n"
+ " - dx dy dz - normal\n"
+ " - sx sy - plane sizes\n"
+ " - noupdate - do not update/redisplay the plane in context\n"
+ " Please enter coordinates in format \"param=value\" in arbitrary order.",
+ __FILE__, VChangePlane, group);
+
theCommands.Add("vplanepara",
"vplanepara PlaneName ",
__FILE__,VPlaneBuilder,group);
"vdrawsphere: vdrawsphere shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToShowEdges=0]\n",
__FILE__,VDrawSphere,group);
- theCommands.Add("vclipplane",
- "vclipplane : vclipplane [x y z dx dy dz] [planeId {on/off/del/display/hide}]",
- __FILE__,VClipPlane,group);
-
theCommands.Add ("vsetlocation",
"vsetlocation : name x y z; set new location for an interactive object",
__FILE__, VSetLocation, group);
__FILE__, VComputeHLR, group);
theCommands.Add("vdrawparray",
- "vdrawparray : vdrawparray Name TypeOfArray [vertex = { 'v' x y z [vertex_normal = { 'n' x y z }] [vertex_color = { 'c' r g b }] ] ... [bound = { 'b' vertex_count [bound_color = { 'c' r g b }] ] ... [edge = { 'e' vertex_id [edge_hidden = { 'h' }] ]",
+ "vdrawparray : vdrawparray Name TypeOfArray [vertex = { 'v' x y z [vertex_normal = { 'n' x y z }] [vertex_color = { 'c' r g b }] ] ... [bound = { 'b' vertex_count [bound_color = { 'c' r g b }] ] ... [edge = { 'e' vertex_id ]",
__FILE__,VDrawPArray,group);
theCommands.Add("vconnect",
__FILE__, VConnectShape, group);
theCommands.Add("vselmode",
- "vselmode : [object] mode On/Off (1/0)",
+ "vselmode : [object] mode_number is_turned_on=(1|0)\n"
+ " switches selection mode for the determined object or\n"
+ " for all objects in context.\n"
+ " mode_number is non-negative integer that has different\n"
+ " meaning for different interactive object classes.\n"
+ " For shapes the following mode_number values are allowed:\n"
+ " 0 - shape\n"
+ " 1 - vertex\n"
+ " 2 - edge\n"
+ " 3 - wire\n"
+ " 4 - face\n"
+ " 5 - shell\n"
+ " 6 - solid\n"
+ " 7 - compsolid\n"
+ " 8 - compound\n"
+ " is_turned_on is:\n"
+ " 1 if mode is to be switched on\n"
+ " 0 if mode is to be switched off\n",
__FILE__, VSetSelectionMode, group);
theCommands.Add("vtriangle",
"- turns on/off drawing of face boundaries for ais object "
"and defines boundary line style.",
__FILE__, VShowFaceBoundary, group);
+
+ theCommands.Add ("vmarkerstest",
+ "vmarkerstest: name X Y Z [PointsOnSide=10] [MarkerType=0] [Scale=1.0] [FileName=ImageFile]\n",
+ __FILE__, VMarkersTest, group);
+
+ theCommands.Add ("text2brep",
+ "text2brep: res text fontName fontSize [x=0.0 y=0.0 z=0.0 composite=1 {regular,bold,italic,bolditalic=regular}]\n",
+ __FILE__, TextToBRep, group);
+ theCommands.Add ("vfont",
+ "vfont [add pathToFont [fontName] [regular,bold,italic,bolditalic=undefined]]"
+ "\n\t\t: [find fontName [regular,bold,italic,bolditalic=undefined]]",
+ __FILE__, VFont, group);
}