Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

Segment Class Reference

#include <segment.h>

Inheritance diagram for Segment:

Primitive List of all members.

Public Member Functions

 Segment ()
 Segment (Point3D *pA, Point3D *pB)
 Segment (const Segment &seg)
 ~Segment ()
virtual void display (QPainter &paint)
virtual void toXML (QDomElement &elem)
virtual void setPrimitive (QPoint &refPoint, QPoint &modifPoint)
Point3DgetPointA ()
Point3DgetPointB ()
void setPointA (Point3D *pA)
void setPointB (Point3D *pB)
int nbPoints ()
double getNbSamples ()
void setNbSamples (double sample)

Public Attributes

vector< Point3D * > pointsList
vector< Point3D * > samplesPointsList
double nbSamples
int type

Detailed Description

La classe Segment permet de spécifier et de dessiner des segments.

Author:
Guitteny Fabrice

Idiart Baptiste

Le Goff Erwan


Constructor & Destructor Documentation

Segment::Segment  ) 
 

constructeur par défaut

00006 { 00007 type = SEGMENT; 00008 nbSamples = NORMAL_SAMPLE; 00009 }

Segment::Segment Point3D pA,
Point3D pB
 

constructeur : points extrémités du segment

Parameters:
pA 1ère extrémité
pB 2ème extrémité

00012 { 00013 pointsList.push_back(pA); 00014 pointsList.push_back(pB); 00015 type = SEGMENT; 00016 nbSamples = NORMAL_SAMPLE; 00017 }

Segment::Segment const Segment seg  ) 
 

constructeur par copie

Parameters:
seg segment

00019 : Primitive(seg) 00020 { 00021 Point3D * pA = seg.pointsList[0]; 00022 Point3D * pB = seg.pointsList[1]; 00023 Segment(pA, pB); 00024 }

Segment::~Segment  )  [inline]
 

00057 {};


Member Function Documentation

void Segment::display QPainter &  paint  )  [virtual]
 

méthode d'affichage d'un segment (Bresenham)

Parameters:
paint affichage dans un QPainter

Implements Primitive.

00075 { 00076 // on récupère les coordonnées des extrêmités du segment 00077 int x1 = (int)(pointsList[0]->getCoordinate(0)); 00078 int y1 = (int)(pointsList[0]->getCoordinate(1)); 00079 int x2 = (int)(pointsList[1]->getCoordinate(0)); 00080 int y2 = (int)(pointsList[1]->getCoordinate(1)); 00081 00082 int x = x1; 00083 int y = y1; 00084 00085 int dx = abs(x2 - x1); 00086 int dy = abs(y2 - y1); 00087 00088 int s1 = sign(x2 - x1); 00089 int s2 = sign(y2 - y1); 00090 00091 bool a_change = false; 00092 00093 if (dy > dx) 00094 { 00095 int temp = dx; 00096 dx = dy; 00097 dy = temp; 00098 a_change = true; 00099 } 00100 00101 int e = 2 * dy - dx; 00102 00103 int temp = 0; 00104 00105 samplesPointsList.clear(); 00106 00107 for (int i = 0; i < dx - 1; i++) 00108 { 00109 if (temp >= nbSamples) 00110 { 00111 samplesPointsList.push_back(new Point3D(x,y,0)); 00112 00113 temp = 0; 00114 } 00115 temp++; 00116 00117 paint.drawPoint(x, y); 00118 while (e > 0) 00119 { 00120 if (a_change) 00121 x += s1; 00122 else 00123 y += s2; 00124 e -= 2 * dx; 00125 } 00126 if (a_change) 00127 y += s2; 00128 else 00129 x += s1; 00130 e += 2 * dy; 00131 } 00132 00133 samplesPointsList.push_back(new Point3D(*pointsList[1])); 00134 00135 }

double Primitive::getNbSamples  )  [inline, inherited]
 

accesseur : valeur de l'échantillonage

Returns:
nombre d'échantillons

00081 {return nbSamples;}

Point3D * Segment::getPointA  ) 
 

accesseur : 1ère extrémité

Returns:
1ère extrémité

00030 { 00031 return pointsList[0]; 00032 }

Point3D * Segment::getPointB  ) 
 

accesseur : 2ème extrémité

Returns:
2ème extrémité

00036 { 00037 return pointsList[1]; 00038 }

int Primitive::nbPoints  )  [inline, inherited]
 

nombre de points définissant la primitive

00073 {return pointsList.size();}

void Primitive::setNbSamples double  sample  )  [inline, inherited]
 

modificateur : valeur de l'échantillonage

Parameters:
sample nouvelle valeur de l'échantillonage

00087 { 00088 if (type == CIRCLE) 00089 nbSamples = sample / 3; 00090 else 00091 nbSamples = sample; 00092 }

void Segment::setPointA Point3D pA  ) 
 

modificateur : 1ère extrémité

Parameters:
pA 1ère extrémité

00046 { 00047 pointsList[0] = pA; 00048 }

void Segment::setPointB Point3D pB  ) 
 

modificateur : 2ème extrémité

Parameters:
pB 2ème extrémité

00052 { 00053 pointsList[1] = pB; 00054 }

void Segment::setPrimitive QPoint &  refPoint,
QPoint &  modifPoint
[virtual]
 

changement des points définissant un segment

Parameters:
refPoint point à modifier
modifPoint nouvelle valeur du point

Implements Primitive.

00141 { 00142 Point3D * p = qPointToPoint3D(refPoint); 00143 if (*p == *getPointA()) 00144 setPointA(qPointToPoint3D(modifPoint)); 00145 if (*p == *getPointB()) 00146 setPointB(qPointToPoint3D(modifPoint)); 00147 }

void Segment::toXML QDomElement &  elem  )  [virtual]
 

ecrit la primitive dans un fichier xml

Parameters:
elem balise courante dans le fichier XML

Implements Primitive.

00154 { 00155 elem.setAttribute( "Ax", (*getPointA())[0] ); 00156 elem.setAttribute( "Ay", (*getPointA())[1] ); 00157 elem.setAttribute( "Bx", (*getPointB())[0] ); 00158 elem.setAttribute( "By", (*getPointB())[1] ); 00159 00160 }


Member Data Documentation

double Primitive::nbSamples [inherited]
 

nombre d'échantillons

vector<Point3D*> Primitive::pointsList [inherited]
 

liste des points définissant la primitive

vector<Point3D*> Primitive::samplesPointsList [inherited]
 

liste des points pour l'échantillonage

int Primitive::type [inherited]
 

type de la primitive SEGMENT, CERCLE, BEZIER ou BSPLINE


The documentation for this class was generated from the following files:
Generated on Tue Nov 29 21:59:00 2005 for CylinderGenerator by doxygen 1.3.7