GeomAdaptor_Curve curv(myComponent);
StdPrs_Curve::Add(aPresentation,curv,myDrawer);
}
- else {
- DsgPrs_XYZAxisPresentation::Add(aPresentation,myLineAspect,myDir,myVal,myText,myPfirst,myPlast);
+ else
+ {
+ DsgPrs_XYZAxisPresentation::Add (aPresentation,myLineAspect,myDir,myVal,
+ myDrawer->DatumAspect()->ToDrawLabels() ? myText : "",
+ myPfirst, myPlast);
}
}
//purpose :
//=======================================================================
AIS_Trihedron::AIS_Trihedron(const Handle(Geom_Axis2Placement)& aComponent):
-myComponent(aComponent),
-myHasOwnSize(Standard_False),
-myHasOwnTextColor(Standard_False),
-myHasOwnArrowColor(Standard_False)
-
-{ LoadSubObjects();}
-
-
+myComponent (aComponent),
+myHasOwnSize (Standard_False),
+myHasOwnTextColor (Standard_False),
+myHasOwnArrowColor (Standard_False)
+{
+ LoadSubObjects();
+}
//=======================================================================
//function : SetComponent
Handle(AIS_Axis) AIS_Trihedron::XAxis() const
{
Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[1]);
- if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_XAxis);
+ if (anAxis.IsNull())
+ {
+ anAxis = new AIS_Axis (myComponent,AIS_TOAX_XAxis);
+ }
return anAxis;
}
Handle(AIS_Axis) AIS_Trihedron::YAxis() const
{
Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[2]);
- if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_YAxis);
+ if (anAxis.IsNull())
+ {
+ anAxis = new AIS_Axis (myComponent,AIS_TOAX_YAxis);
+ }
+
return anAxis;
}
Handle(AIS_Axis) AIS_Trihedron::Axis() const
{
Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[3]);
- if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_ZAxis);
+ if (anAxis.IsNull())
+ {
+ anAxis = new AIS_Axis (myComponent,AIS_TOAX_ZAxis);
+ }
return anAxis;
}
Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[anIdx]);
Handle(Prs3d_Drawer) aDrawer = anAxis->Attributes();
Handle(Prs3d_DatumAspect) aDatum = myDrawer->DatumAspect();
- aDrawer->DatumAspect()->SetAxisLength (aDatum->FirstAxisLength(),
- aDatum->SecondAxisLength(),
- aDatum->ThirdAxisLength());
+ aDrawer->SetDatumAspect (aDatum);
anAxisType = anAxis->TypeOfAxis();
anAxis->SetAxis2Placement (myComponent, anAxisType);
//! Removes the non-default settings for width set in SetWidth.
Standard_EXPORT void UnsetWidth() Standard_OVERRIDE;
-
-
-
DEFINE_STANDARD_RTTI(AIS_Trihedron,AIS_InteractiveObject)
protected:
Standard_EXPORT void LoadSubObjects();
+protected:
+
Handle(Geom_Axis2Placement) myComponent;
Handle(AIS_InteractiveObject) myShapes[7];
Standard_Boolean myHasOwnSize;
Quantity_NameOfColor myOwnTextColor;
Standard_Boolean myHasOwnArrowColor;
Quantity_NameOfColor myOwnArrowColor;
-
-
};
Quantity_Length anAxisLength;
Quantity_Length anArrowAngle = theDrawer->ArrowAspect()->Angle();
+ const Standard_Boolean toDrawLabels = theDrawer->DatumAspect()->ToDrawLabels();
+
Handle(Graphic3d_ArrayOfSegments) aPrims;
if (aDatumAspect->DrawFirstAndSecondAxis())
{
Prs3d_Arrow::Draw(thePresentation,aPoint1,aXDir,anArrowAngle,anAxisLength/10.);
aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect());
Graphic3d_Vertex aVertex1(aPoint1.X(),aPoint1.Y(),aPoint1.Z());
- aGroup->Text(Standard_CString("X"), aVertex1,16.);
+ if (toDrawLabels)
+ {
+ aGroup->Text (Standard_CString ("X"), aVertex1, 16.0);
+ }
anAxisLength = aDatumAspect->SecondAxisLength();
const gp_Pnt aPoint2(anOrigin.XYZ() + aYDir.XYZ()*anAxisLength);
Prs3d_Arrow::Draw(thePresentation,aPoint2,aYDir,anArrowAngle,anAxisLength/10.);
aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect());
Graphic3d_Vertex aVertex2(aPoint2.X(),aPoint2.Y(),aPoint2.Z());
- aGroup->Text(Standard_CString("Y"), aVertex2,16.);
+ if (toDrawLabels)
+ {
+ aGroup->Text (Standard_CString ("Y"), aVertex2, 16.0);
+ }
}
if (aDatumAspect->DrawThirdAxis())
{
Prs3d_Arrow::Draw(thePresentation,aPoint3,aZDir,anArrowAngle,anAxisLength/10.);
aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect());
Graphic3d_Vertex aVertex3(aPoint3.X(),aPoint3.Y(),aPoint3.Z());
- aGroup->Text(Standard_CString("Z"), aVertex3,16.);
+ if (toDrawLabels)
+ {
+ aGroup->Text (Standard_CString ("Z"), aVertex3, 16.0);
+ }
}
}
-
#include <Prs3d_LineAspect.hxx>
#include <Standard_Type.hxx>
-Prs3d_DatumAspect::Prs3d_DatumAspect () {
-
- myFirstAxisAspect = new Prs3d_LineAspect
- (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID,1.);
- mySecondAxisAspect = new Prs3d_LineAspect
- (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID,1.);
- myThirdAxisAspect = new Prs3d_LineAspect
- (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID,1.);
- myDrawFirstAndSecondAxis = Standard_True;
- myDrawThirdAxis = Standard_True;
- myFirstAxisLength = 10.;
- mySecondAxisLength = 10.;
- myThirdAxisLength = 10.;
+Prs3d_DatumAspect::Prs3d_DatumAspect()
+: myDrawFirstAndSecondAxis (Standard_True),
+ myDrawThirdAxis (Standard_True),
+ myToDrawLabels (Standard_True),
+ myFirstAxisLength (10.0),
+ mySecondAxisLength (10.0),
+ myThirdAxisLength (10.0)
+{
+ myFirstAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
+ mySecondAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
+ myThirdAxisAspect = new Prs3d_LineAspect (Quantity_NOC_PEACHPUFF,Aspect_TOL_SOLID, 1.0);
}
Handle(Prs3d_LineAspect) Prs3d_DatumAspect::FirstAxisAspect() const {
return myThirdAxisLength;
}
+
+//=======================================================================
+//function : SetToDrawLabels
+//purpose :
+//=======================================================================
+void Prs3d_DatumAspect::SetToDrawLabels (const Standard_Boolean theToDraw)
+{
+ myToDrawLabels = theToDraw;
+}
+
+//=======================================================================
+//function : ToDrawLabels
+//purpose :
+//=======================================================================
+Standard_Boolean Prs3d_DatumAspect::ToDrawLabels() const
+{
+ return myToDrawLabels;
+}
public:
-
//! An empty framework to define the display of datums.
Standard_EXPORT Prs3d_DatumAspect();
//! Returns the length of the displayed third axis.
Standard_EXPORT Quantity_Length ThirdAxisLength() const;
+ //! Sets option to draw or not to draw text labels for axes
+ Standard_EXPORT void SetToDrawLabels (const Standard_Boolean theToDraw);
-
+ //! @return true if axes labels are drawn
+ Standard_EXPORT Standard_Boolean ToDrawLabels() const;
DEFINE_STANDARD_RTTI(Prs3d_DatumAspect,Prs3d_BasicAspect)
-protected:
-
-
-
-
private:
-
Handle(Prs3d_LineAspect) myFirstAxisAspect;
Handle(Prs3d_LineAspect) mySecondAxisAspect;
Handle(Prs3d_LineAspect) myThirdAxisAspect;
Standard_Boolean myDrawFirstAndSecondAxis;
Standard_Boolean myDrawThirdAxis;
+ Standard_Boolean myToDrawLabels;
Quantity_Length myFirstAxisLength;
Quantity_Length mySecondAxisLength;
Quantity_Length myThirdAxisLength;
-
};
#include <BRepExtrema_ExtPC.hxx>
#include <BRepExtrema_ExtPF.hxx>
+#include <Prs3d_DatumAspect.hxx>
#include <Prs3d_Drawer.hxx>
#include <Prs3d_VertexDrawMode.hxx>
#include <Prs3d_LineAspect.hxx>
#include <Image_AlienPixMap.hxx>
#include <TColStd_HArray1OfAsciiString.hxx>
+#include <TColStd_HSequenceOfAsciiString.hxx>
#ifdef _WIN32
# define _CRT_SECURE_NO_DEPRECATE
//Draw arg : vtrihedron name [Xo] [Yo] [Zo] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw]
//==============================================================================
-static int VTrihedron (Draw_Interpretor& theDi,
+static int VTrihedron (Draw_Interpretor& /*theDi*/,
Standard_Integer theArgsNb,
const char** theArgVec)
{
- if (theArgsNb != 2 && theArgsNb != 5 && theArgsNb != 11)
+ if (theArgsNb < 2 || theArgsNb > 11)
{
- theDi << theArgVec[0] << " Syntax error\n";
+ std::cout << theArgVec[0] << " syntax error\n";
return 1;
}
+ // Parse parameters
+ NCollection_DataMap<TCollection_AsciiString, Handle(TColStd_HSequenceOfAsciiString)> aMapOfArgs;
+ TCollection_AsciiString aParseKey;
+ for (Standard_Integer anArgIt = 1; anArgIt < theArgsNb; ++anArgIt)
+ {
+ TCollection_AsciiString anArg (theArgVec [anArgIt]);
+
+ if (anArg.Value (1) == '-' && !anArg.IsRealValue())
+ {
+ aParseKey = anArg;
+ aParseKey.Remove (1);
+ aParseKey.LowerCase();
+ aMapOfArgs.Bind (aParseKey, new TColStd_HSequenceOfAsciiString);
+ continue;
+ }
+
+ if (aParseKey.IsEmpty())
+ {
+ continue;
+ }
+
+ aMapOfArgs(aParseKey)->Append (anArg);
+ }
+
+ // Check parameters
+ if ( (aMapOfArgs.IsBound ("xaxis") && !aMapOfArgs.IsBound ("zaxis"))
+ || (!aMapOfArgs.IsBound ("xaxis") && aMapOfArgs.IsBound ("zaxis")) )
+ {
+ std::cout << theArgVec[0] << " error: -xaxis and -yaxis parameters are to set together.\n";
+ return 1;
+ }
+
+ for (NCollection_DataMap<TCollection_AsciiString, Handle(TColStd_HSequenceOfAsciiString)>::Iterator aMapIt (aMapOfArgs);
+ aMapIt.More(); aMapIt.Next())
+ {
+ const TCollection_AsciiString& aKey = aMapIt.Key();
+ const Handle(TColStd_HSequenceOfAsciiString)& anArgs = aMapIt.Value();
+
+ // Bool key, without arguments
+ if (aKey.IsEqual ("hidelabels") && anArgs->IsEmpty())
+ {
+ continue;
+ }
+
+ if ( (aKey.IsEqual ("xaxis") || aKey.IsEqual ("zaxis") || aKey.IsEqual ("origin")) && anArgs->Length() == 3
+ && anArgs->Value(1).IsRealValue() && anArgs->Value(2).IsRealValue() && anArgs->Value(3).IsRealValue() )
+ {
+ continue;
+ }
+ }
+
+ // Process parameters
gp_Pnt anOrigin (0.0, 0.0, 0.0);
gp_Dir aDirZ = gp::DZ();
gp_Dir aDirX = gp::DX();
- Standard_Integer anArgIter = 2; // 1st is an IO name
- if (anArgIter < theArgsNb)
+
+ Handle(TColStd_HSequenceOfAsciiString) aValues;
+
+ if (aMapOfArgs.Find ("origin", aValues))
{
- anOrigin.SetX (Draw::Atof (theArgVec[anArgIter++]));
- anOrigin.SetY (Draw::Atof (theArgVec[anArgIter++]));
- anOrigin.SetZ (Draw::Atof (theArgVec[anArgIter++]));
- if (anArgIter < theArgsNb)
- {
- 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);
+ anOrigin.SetX (aValues->Value(1).RealValue());
+ anOrigin.SetY (aValues->Value(2).RealValue());
+ anOrigin.SetZ (aValues->Value(3).RealValue());
+ }
- aX = Draw::Atof (theArgVec[anArgIter++]);
- aY = Draw::Atof (theArgVec[anArgIter++]);
- aZ = Draw::Atof (theArgVec[anArgIter++]);
- aDirX.SetCoord (aX, aY, aZ);
- }
+ Handle(TColStd_HSequenceOfAsciiString) aValues2;
+ if (aMapOfArgs.Find ("xaxis", aValues) && aMapOfArgs.Find ("zaxis", aValues2))
+ {
+ Standard_Real aX = aValues->Value(1).RealValue();
+ Standard_Real aY = aValues->Value(2).RealValue();
+ Standard_Real aZ = aValues->Value(3).RealValue();
+ aDirX.SetCoord (aX, aY, aZ);
+
+ aX = aValues->Value(1).RealValue();
+ aY = aValues->Value(2).RealValue();
+ aZ = aValues->Value(3).RealValue();
+ aDirZ.SetCoord (aX, aY, aZ);
}
if (!aDirZ.IsNormal (aDirX, M_PI / 180.0))
{
- theDi << theArgVec[0] << " - VectorX is not normal to VectorZ\n";
+ std::cout << theArgVec[0] << " error - VectorX is not normal to VectorZ\n";
return 1;
}
Handle(Geom_Axis2Placement) aPlacement = new Geom_Axis2Placement (anOrigin, aDirZ, aDirX);
Handle(AIS_Trihedron) aShape = new AIS_Trihedron (aPlacement);
+
+ if (aMapOfArgs.Find ("hidelabels", aValues))
+ {
+ const Handle(Prs3d_Drawer)& aDrawer = aShape->Attributes();
+
+ if(!aDrawer->HasOwnDatumAspect())
+ {
+ Handle(Prs3d_DatumAspect) aDefAspect = ViewerTest::GetAISContext()->DefaultDrawer()->DatumAspect();
+
+ Handle(Prs3d_DatumAspect) aDatumAspect = new Prs3d_DatumAspect();
+ aDatumAspect->FirstAxisAspect()->SetAspect (aDefAspect->FirstAxisAspect()->Aspect());
+ aDatumAspect->SecondAxisAspect()->SetAspect (aDefAspect->SecondAxisAspect()->Aspect());
+ aDatumAspect->ThirdAxisAspect()->SetAspect (aDefAspect->ThirdAxisAspect()->Aspect());
+ aDatumAspect->SetAxisLength (aDefAspect->FirstAxisLength(),
+ aDefAspect->SecondAxisLength(),
+ aDefAspect->ThirdAxisLength());
+
+ aDrawer->SetDatumAspect (aDatumAspect);
+ }
+
+ aDrawer->DatumAspect()->SetToDrawLabels (Standard_False);
+ }
+
VDisplayAISObject (theArgVec[1], aShape);
return 0;
}
{
const char *group ="AISObjects";
theCommands.Add("vtrihedron",
- "vtrihedron : vtrihedron name [Xo] [Yo] [Zo] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw] "
- "\n\t\t: Creates a new *AIS_Trihedron* object. If no argument is set, the default trihedron (0XYZ) is created.",
+ "vtrihedron : vtrihedron name [ -origin x y z ] [ -zaxis u v w -xaxis u v w ] [ -hidelabels ]"
+ "\n\t\t: Creates a new *AIS_Trihedron* object. If no argument is set, the default trihedron (0XYZ) is created."
+ "\n\t\t: -hidelabels allows to draw trihedron without axes labels. By default, they are displayed.",
__FILE__,VTrihedron,group);
theCommands.Add("vtri2d",
--- /dev/null
+puts "================================================================"
+puts "CR26754"
+puts "Visualization - provide API to display AIS_Trihedron presentation without axes labels"
+puts "================================================================"
+puts ""
+
+set anImage1 $imagedir/${casename}_1.png
+set anImage2 $imagedir/${casename}_2.png
+set anImage3 $imagedir/${casename}_3.png
+
+vinit
+vclear
+vaxo
+
+vtrihedron t -hidelabels
+vzoom 4
+
+vdump $anImage1
+
+set anX 204
+set anY 100
+
+vselect $anX $anY
+
+vdump $anImage2
+
+vselmode 2 1
+
+vselect $anX $anY
+
+vdump $anImage3
\ No newline at end of file