#include "CurveCreator_Curve.hxx"
-
-
#include <AIS_Point.hxx>
-
#include <AIS_Line.hxx>
#include <gp_Pnt.hxx>
-
#include <gp_Lin.hxx>
#include <Geom_CartesianPoint.hxx>
-
-
HYDROGUI_AISCurveSection::HYDROGUI_AISCurveSection( Handle_AIS_InteractiveContext theContext,
-
CurveCreator_Curve* theCurve, int theSection) :
-
myCurve(theCurve), mySection(theSection), myContext(theContext), myIsHL(false)
-
{
-
buildSection();
-
}
-
-
HYDROGUI_AISCurveSection::~HYDROGUI_AISCurveSection()
-
{
-
Erase();
-
for( int i = 0 ; i < myObjects.size() ; i++ ){
-
myObjects[i].Nullify();
-
}
-
myObjects.clear();
-
}
-
-
Quantity_Color HYDROGUI_AISCurveSection::getActiveColor()
-
{
-
if( myIsHL ){
-
return Quantity_Color( 1., 0., 0., Quantity_TOC_RGB );
-
}
-
return Quantity_Color( 0., 1., 0., Quantity_TOC_RGB );
-
}
-
-
void HYDROGUI_AISCurveSection::highlight( bool isHL )
-
{
-
myIsHL = isHL;
-
Quantity_Color aColor = getActiveColor();
-
for( int i = 0 ; i < myObjects.size() ; i++ ){
-
myObjects[i]->SetColor(aColor);
-
myContext->Display(myObjects[i]);
-
}
-
}
-
-
void HYDROGUI_AISCurveSection::Display()
-
{
-
for( int i = 0 ; i < myObjects.size() ; i++ ){
-
myContext->Display(myObjects[i]);
-
}
-
}
-
-
void HYDROGUI_AISCurveSection::Erase()
-
{
-
for( int i = 0 ; i < myObjects.size() ; i++ ){
-
myContext->Erase(myObjects[i]);
-
}
-
}
-
-
void HYDROGUI_AISCurveSection::buildSection()
-
{
-
int aSectSize = myCurve->getNbPoints( mySection );
-
double anX;
-
double anY;
-
double aZ;
-
int i = 0;
-
for( ; i < ( aSectSize - 1 ) ; i++ ){
-
Handle_AIS_Point anAISPnt = getAISPoint(i);
-
myObjects.push_back( anAISPnt );
-
Handle_AIS_Line aLine = getAISLine( i, i+1 );
-
myObjects.push_back( aLine );
-
}
-
if( aSectSize != 0 ){
-
Handle_AIS_Point anAISPnt = getAISPoint(i);
-
myObjects.push_back( anAISPnt );
-
if( myCurve->isClosed(mySection) && ( aSectSize > 1 ) ){
-
Handle_AIS_Line aLine = getAISLine( i, 0 );
-
myObjects.push_back( aLine );
-
}
-
}
-
}
-
-
Handle_AIS_Point HYDROGUI_AISCurveSection::getAISPoint( int theIndx )
-
{
-
double anX;
-
double anY;
-
double aZ;
-
getPoint( theIndx, anX, anY, aZ );
-
gp_Pnt aPoint( anX, anY, aZ);
AIS_Point* aPnt = new AIS_Point( new Geom_CartesianPoint(aPoint));
-
return aPnt;
-
}
-
-
Handle_AIS_Line HYDROGUI_AISCurveSection::getAISLine( int theIndx1, int theIndx2 )
-
{
-
double anX;
-
double anY;
-
double aZ;
-
getPoint( theIndx1, anX, anY, aZ );
-
gp_Pnt aPoint1( anX, anY, aZ);
double anX2;
-
double anY2;
-
double aZ2;
-
getPoint( theIndx2, anX2, anY2, aZ2 );
-
//MTN to avoid crash during line construction
-
if( ( anX == anX2 ) && ( anY == anY2 ) && (aZ == aZ2 ) ){
-
aZ2 += 1e-7;
-
}
gp_Pnt aPoint2( anX2, anY2, aZ2 );
AIS_Line* aLine = new AIS_Line( new Geom_CartesianPoint(aPoint1), new Geom_CartesianPoint(aPoint2) );
-
return aLine;
-
}
-
-
void HYDROGUI_AISCurveSection::getPoint( int theIndx, double& theX, double& theY, double& theZ )
-
{
-
CurveCreator::Dimension aDim = myCurve->getDimension();
-
CurveCreator::Coordinates aCoords = myCurve->getCoordinates( mySection, theIndx );
-
theX = aCoords[0];
-
theY = aCoords[1];
-
theZ = 0.;
-
if( aDim == CurveCreator::Dim3d ){
-
theZ = aCoords[2];
-
}
-
}
-
-
/******************************* HYDROGUI_AISCurve ********************************************/
-
HYDROGUI_AISCurve::HYDROGUI_AISCurve( CurveCreator_Curve* theCurve, Handle_AIS_InteractiveContext theContext ) :
-
CurveCreator_Listener(), myCurve(theCurve), myContext( theContext )
-
{
-
myCurve->setListener(this);
-
buildCurve();
-
}
-
-
HYDROGUI_AISCurve::~HYDROGUI_AISCurve(void)
-
{
-
}
-
-
void HYDROGUI_AISCurve::setCurve( CurveCreator_Curve* theCurve )
-
{
-
myCurve = theCurve;
-
buildCurve();
-
}
-
-
void HYDROGUI_AISCurve::Display()
-
{
-
for( int i = 0 ; i < myCurveRepresentation.size() ; i++ ){
-
myCurveRepresentation[i]->Display();
-
}
-
}
-
-
void HYDROGUI_AISCurve::buildCurve()
-
{
-
for( int i = 0 ; i < myCurveRepresentation.size() ; i++ ){
-
myCurveRepresentation[i]->Erase();
-
delete myCurveRepresentation[i];
-
}
-
myCurveRepresentation.clear();
for( int i = 0 ; i < myCurve->getNbSections() ; i++ ){
-
HYDROGUI_AISCurveSection* aSection = new HYDROGUI_AISCurveSection( myContext, myCurve, i);
-
myCurveRepresentation.push_back( aSection );
-
myCurveRepresentation[i]->Display();
-
}
-
}
-
-
void HYDROGUI_AISCurve::pointInserted( int theSection, int theIndx )
-
{
-
buildCurve();
-
}
-
-
void HYDROGUI_AISCurve::highlightSection( int theSection, bool isHL )
-
{
-
if( theSection >= myCurveRepresentation.size() )
-
return;
-
myCurveRepresentation[theSection]->highlight(isHL);
-
}
-
#ifndef HYDROGUI_AIS_CURVE_H
-
#define HYDROGUI_AIS_CURVE_H
-
-
#include <vector>
-
#include <list>
-
-
#include <AIS_InteractiveContext.hxx>
-
#include <AIS_Point.hxx>
-
#include <AIS_Line.hxx>
#include <CurveCreator_Listener.hxx>
-
-
class CurveCreator_Curve;
class AIS_InteractiveObject;
-
class AIS_Point;
-
class AIS_Line;
-
-
class HYDROGUI_AISCurveSection
-
{
-
public:
-
HYDROGUI_AISCurveSection( Handle_AIS_InteractiveContext theContext,
-
CurveCreator_Curve* theCurve, int theSection );
-
virtual ~HYDROGUI_AISCurveSection();
-
-
void Display();
-
void Erase();
-
-
void highlight( bool isHL );
protected:
-
virtual void buildSection();
void getPoint( int theIndx, double& theX, double& theY, double& theZ );
Handle_AIS_Point getAISPoint( int theIndx );
-
Handle_AIS_Line getAISLine( int theIndx1, int theIndx2 );
Quantity_Color getActiveColor();
-
-
private:
-
CurveCreator_Curve* myCurve;
-
int mySection;
-
std::vector< Handle_AIS_InteractiveObject > myObjects;
-
Handle_AIS_InteractiveContext myContext;
-
bool myIsHighlight;
-
bool myIsHL;
-
};
-
-
class HYDROGUI_AISCurve : public CurveCreator_Listener
-
{
-
public:
-
HYDROGUI_AISCurve(CurveCreator_Curve* theCurve, Handle_AIS_InteractiveContext theContext );
-
~HYDROGUI_AISCurve(void);
-
-
void setCurve( CurveCreator_Curve* theCurve );
-
-
void Display();
-
-
virtual void pointInserted( int theSection, int theIndx );
-
-
void highlightSection( int theSection, bool isHL );
void clearSelection();
-
-
protected:
-
virtual void buildCurve();
-
Quantity_Color getActiveColor();
-
-
private:
-
CurveCreator_Curve* myCurve;
-
Handle_AIS_InteractiveContext myContext;
-
std::vector< HYDROGUI_AISCurveSection* > myCurveRepresentation;
-
};
-
-
-#endif
\ No newline at end of file
+#endif