34 static const float ElementPickerTolerance = 0.01f;
37 static const float MaillagePickingTolerance = 1.0f;
45 Q_CHECK_PTR(pModeler);
67 GLuint selectBuf[
BUFSIZE], names, *ptr;
70 glSelectBuffer(
BUFSIZE, selectBuf);
71 (void) glRenderMode(GL_SELECT);
77 hits = glRenderMode(GL_RENDER);
82 ptr = (GLuint*) selectBuf;
84 TYElement* pElementAutreQueAltimetrie = NULL;
85 float zmin = (float)0xFFFFFFFF;
86 float zElementAutreQueAltimetrie = -1;
88 for (i = 0; i < hits; i++)
93 float z1 = *ptr; ptr++;
98 QString sCurrentClassName;
99 for (j = 0; j < (int)names; j++)
102 sCurrentClassName = QString(pElementCourant->
getClassName());
103 if (sCurrentClassName !=
"TYAltimetrie")
105 if (NULL == pElementAutreQueAltimetrie)
107 pElementAutreQueAltimetrie = pElementCourant;
108 zElementAutreQueAltimetrie = z1;
112 if (z1 < zElementAutreQueAltimetrie)
114 pElementAutreQueAltimetrie = pElementCourant;
115 zElementAutreQueAltimetrie = z1;
117 else if (z1 == zElementAutreQueAltimetrie)
120 if (pElementAutreQueAltimetrie == pElementCourant->
getParent())
122 pElementAutreQueAltimetrie = pElementCourant;
123 zElementAutreQueAltimetrie = z1;
140 if (pElementAutreQueAltimetrie)
185 if (!pElt->
isA(
"TYPoint"))
221 while (pTmpElt != NULL)
225 if (pMail !=
nullptr)
234 pElts->push_back(pPtCalcul);
242 pElts->push_back(pTmpElt);
249 if (pElts->size() > 1)
267 if (pElt->
isA(
"TYPoint"))
271 else if (pElt->
isA(
"TYPointCalcul"))
275 else if (pElt->
isA(
"TYPointControl"))
279 else if (pElt->
isA(
"TYTerrain"))
283 else if (pElt->
isA(
"TYPlanEau"))
287 else if (pElt->
isA(
"TYCourbeNiveau"))
291 else if (pElt->
isA(
"TYUserSourcePonctuelle"))
295 else if (pElt->
isA(
"TYAcousticLine"))
299 else if (pElt->
isA(
"TYReseauTransport"))
304 else if (pElt->
isA(
"TYRoute"))
309 else if (pElt->
isA(
"TYCoursEau"))
313 else if (pElt->
isA(
"TYAcousticRectangle"))
317 else if (pElt->
isA(
"TYMurElement"))
321 else if (pElt->
isA(
"TYDalle"))
325 else if (pElt->
isA(
"TYAcousticCircle"))
329 else if (pElt->
isA(
"TYAcousticSemiCircle"))
333 else if (pElt->
isA(
"TYAcousticCylinder"))
337 else if (pElt->
isA(
"TYAcousticSemiCylinder"))
341 else if (pElt->
isA(
"TYMaillage"))
345 else if (pElt->
isA(
"TYRectangularMaillage"))
349 else if (pElt->
isA(
"TYLinearMaillage"))
353 else if (pElt->
isA(
"TYAcousticRectangleNode"))
357 else if (pElt->
isA(
"TYMur"))
361 else if (pElt->
isA(
"TYAcousticBox"))
365 else if (pElt->
isA(
"TYAcousticVolumeNode"))
369 else if (pElt->
isA(
"TYEtage"))
373 else if (pElt->
isA(
"TYMachine"))
377 else if (pElt->
isA(
"TYBatiment"))
381 else if (pElt->
isA(
"TYTopographie"))
385 else if (pElt->
isA(
"TYSiteNode"))
389 else if (pElt->
isA(
"TYSiteNode"))
393 else if (pElt->
isA(
"TYEcran"))
397 else if (pElt->
isA(
"TYAcousticFaceSet"))
415 mapperPos[0] =
_x; mapperPos[1] =
_y;
417 for (
unsigned int i = 0; i < pMaillage->
getPtsCalcul().size(); i++)
422 if ((mapperPos[0] <= pPtCalcul->
_x + MaillagePickingTolerance) && (mapperPos[0] >= pPtCalcul->
_x - MaillagePickingTolerance) &&
423 (mapperPos[1] >= pPtCalcul->
_y - MaillagePickingTolerance) && (mapperPos[1] <= pPtCalcul->
_y + MaillagePickingTolerance))
void sourcePonctuellePicked(TYElement *pElt)
void ecranPicked(TYElement *pElt)
void courbeNiveauPicked(TYElement *pElt)
#define BUFSIZE
Taille du buffer pour le picking.
gestion des elements selectionnes par picking (fichier header)
void pointPicked(TYElement *pElt)
TYElement * _pLastPickedElt
Le dernier element picke.
bool checkType(TYElement *pElt)
Teste le type de l'element passe et emet le signal correspondant au type, avec en parametre l'element...
bool pick(int x, int y)
Effectue un picking en (x, y).
void acousticCirclePicked(TYElement *pElt)
void machinePicked(TYElement *pElt)
void etagePicked(TYElement *pElt)
std::vector< LPTYElement > LPTYElementArray
void pointControlPicked(TYElement *pElt)
virtual void updateView(bool clipping=true, bool axesAndGrid=true)
void topographiePicked(TYElement *pElt)
Classe generique pour une fenetre de modeleur.
void acousticSemiCirclePicked(TYElement *pElt)
void acousticBoxPicked(TYElement *pElt)
void acousticLinePicked(TYElement *pElt)
pour l'application Tympan (fichier header)
void sitePicked(TYElement *pElt)
void updateDisplayList(void)
void acousticRectanglePicked(TYElement *pElt)
void acousticRectangleNodePicked(TYElement *pElt)
void planEauPicked(TYElement *pElt)
bool isA(const char *className) const
Classe generique pour une fenetre de modeleur (fichier header)
TYPointCalcul * findPointCalculOnMaillage(TYMaillage *pMaillage)
Effectue un picking sur un maillage.
void rectangularMaillagePicked(TYElement *pElt)
void maillagePicked(TYElement *pElt)
TYElement * getParent() const
void acousticVolumeNodePicked(TYElement *pElt)
TYElementPicker(TYModelerFrame *pModeler)
TYOpenGLRenderer * getRenderer()
double _y
y coordinate of OCoord3D
static TYElement * getElement(int index)
double _x
x coordinate of OCoord3D
void reset()
Retourne dans son etat initial.
static void purgeElements()
void reseauTransportPicked(TYElement *pElt)
void highestParentPicked(TYElement *pElt)
Indique qu'un element parent a ete picke, ce sera le dernier parent de l'element de base picke...
void acousticSemiCylinderPicked(TYElement *pElt)
void writeDebugMsg(QString msg)
Affiche un message de debug dans la fenetre de sortie.
int _y
Position courante en y.
void batimentPicked(TYElement *pElt)
virtual const char * getClassName() const
void murElementPicked(TYElement *pElt)
Gestion de la table de correspondance indice/element pour le picking (fichier header) ...
void acousticFaceSetPicked(TYElement *pElt)
void pointCalculPicked(TYElement *pElt)
void elementPicked(TYElement *pElt)
Indique qu'un element a ete picke, sans connaitre son type. Celui-ci sera de type "bas niveau"...
void linearMaillagePicked(TYElement *pElt)
Objet pour le picking graphique (fichier header)
void routePicked(TYElement *pElt)
void highlightElement(TYElement *pElt)
Dessine la boite englobante de l'element passe.
void dallePicked(TYElement *pElt)
TYRenderWindowInteractor * getView()
TYModelerFrame * _pModeler
Le modeler dans lequel on effectue le picking.
LPTYElementGraphic _pHighlightedGraphicObject
Pointeur sur le dernier objet graphique highlighte.
Classe de definition d'un maillage.
void acousticCylinderPicked(TYElement *pElt)
Classe de definition d'un point de calcul.C'est une classe derivee a TYPoint avec en plus un spectrep...
void terrainPicked(TYElement *pElt)
TYTabLPPointCalcul & getPtsCalcul()
Set/Get de la liste des points de calcul.
void murPicked(TYElement *pElt)
void siteNodePicked(TYElement *pElt)
void coursEauPicked(TYElement *pElt)
void elementCollectionPicked(std::shared_ptr< LPTYElementArray > pElts)
Indique qu'un element a ete picke, sans connaitre son type. La collection d'elements pickes est compo...
void OpenGLRender(GLenum mode=GL_RENDER, int x=0, int y=0)
void updateParents(TYElement *pElt)
Parcours les parents depuis le dernier element picke et emets les signaux correcpondants.
void highlight(bool state=true)
int _x
Position courante en x.