32 static const float ElementPickerTolerance = 0.01f;
35 static const float MaillagePickingTolerance = 1.0f;
42 Q_CHECK_PTR(pModeler);
62 GLuint selectBuf[
BUFSIZE], names = 0, *ptr =
nullptr;
65 glSelectBuffer(
BUFSIZE, selectBuf);
66 (void)glRenderMode(GL_SELECT);
72 hits = glRenderMode(GL_RENDER);
77 ptr = (GLuint*)selectBuf;
79 TYElement* pElementAutreQueAltimetrie = NULL;
80 float zmin = (float)0xFFFFFFFF;
81 float zElementAutreQueAltimetrie = -1;
83 for (i = 0; i < hits; i++)
95 QString sCurrentClassName;
96 for (j = 0; j < (int)names; j++)
99 sCurrentClassName = QString(pElementCourant->
getClassName());
100 if (sCurrentClassName !=
"TYAltimetrie")
102 if (NULL == pElementAutreQueAltimetrie)
104 pElementAutreQueAltimetrie = pElementCourant;
105 zElementAutreQueAltimetrie = z1;
109 if (z1 < zElementAutreQueAltimetrie)
111 pElementAutreQueAltimetrie = pElementCourant;
112 zElementAutreQueAltimetrie = z1;
114 else if (z1 == zElementAutreQueAltimetrie)
117 if (pElementAutreQueAltimetrie == pElementCourant->
getParent())
119 pElementAutreQueAltimetrie = pElementCourant;
120 zElementAutreQueAltimetrie = z1;
137 if (pElementAutreQueAltimetrie)
182 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"))
418 for (
unsigned int i = 0; i < pMaillage->
getPtsCalcul().size(); i++)
423 if ((mapperPos[0] <= pPtCalcul->
_x + MaillagePickingTolerance) &&
424 (mapperPos[0] >= pPtCalcul->
_x - MaillagePickingTolerance) &&
425 (mapperPos[1] >= pPtCalcul->
_y - MaillagePickingTolerance) &&
426 (mapperPos[1] <= pPtCalcul->
_y + MaillagePickingTolerance))
void writeDebugMsg(QString msg)
Affiche un message de debug dans la fenetre de sortie.
pour l'application Tympan (fichier header)
#define BUFSIZE
Taille du buffer pour le picking.
gestion des elements selectionnes par picking (fichier header)
std::vector< LPTYElement > LPTYElementArray
Classe generique pour une fenetre de modeleur (fichier header)
Objet pour le picking graphique (fichier header)
Gestion de la table de correspondance indice/element pour le picking (fichier header)
double _y
y coordinate of OCoord3D
double _x
x coordinate of OCoord3D
virtual const char * getClassName() const
bool isA(const char *className) const
void highlight(bool state=true)
void courbeNiveauPicked(TYElement *pElt)
LPTYElementGraphic _pHighlightedGraphicObject
Pointeur sur le dernier objet graphique highlighte.
void etagePicked(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 acousticRectangleNodePicked(TYElement *pElt)
void updateParents(TYElement *pElt)
Parcours les parents depuis le dernier element picke et emets les signaux correcpondants.
void pointPicked(TYElement *pElt)
void linearMaillagePicked(TYElement *pElt)
bool checkType(TYElement *pElt)
Teste le type de l'element passe et emet le signal correspondant au type, avec en parametre l'element...
void maillagePicked(TYElement *pElt)
void sourcePonctuellePicked(TYElement *pElt)
void acousticLinePicked(TYElement *pElt)
void ecranPicked(TYElement *pElt)
void reset()
Retourne dans son etat initial.
void acousticSemiCylinderPicked(TYElement *pElt)
void siteNodePicked(TYElement *pElt)
int _x
Position courante en x.
TYPointCalcul * findPointCalculOnMaillage(TYMaillage *pMaillage)
Effectue un picking sur un maillage.
TYElementPicker(TYModelerFrame *pModeler)
int _y
Position courante en y.
void pointControlPicked(TYElement *pElt)
void highlightElement(TYElement *pElt)
Dessine la boite englobante de l'element passe.
TYModelerFrame * _pModeler
Le modeler dans lequel on effectue le picking.
void machinePicked(TYElement *pElt)
void topographiePicked(TYElement *pElt)
void routePicked(TYElement *pElt)
void acousticBoxPicked(TYElement *pElt)
void acousticCylinderPicked(TYElement *pElt)
void dallePicked(TYElement *pElt)
TYElement * _pLastPickedElt
Le dernier element picke.
void coursEauPicked(TYElement *pElt)
void sitePicked(TYElement *pElt)
bool pick(int x, int y)
Effectue un picking en (x, y).
void pointCalculPicked(TYElement *pElt)
void murPicked(TYElement *pElt)
void acousticFaceSetPicked(TYElement *pElt)
void acousticSemiCirclePicked(TYElement *pElt)
void reseauTransportPicked(TYElement *pElt)
void acousticRectanglePicked(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 planEauPicked(TYElement *pElt)
void batimentPicked(TYElement *pElt)
void terrainPicked(TYElement *pElt)
void acousticVolumeNodePicked(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 acousticCirclePicked(TYElement *pElt)
void rectangularMaillagePicked(TYElement *pElt)
void murElementPicked(TYElement *pElt)
TYElement * getParent() const
Classe de definition d'un maillage.
TYTabLPPointCalcul & getPtsCalcul()
Set/Get de la liste des points de calcul.
Classe generique pour une fenetre de modeleur.
TYRenderWindowInteractor * getView()
virtual void updateView(bool clipping=true, bool axesAndGrid=true)
void updateDisplayList(void)
void OpenGLRender(GLenum mode=GL_RENDER, int x=0, int y=0)
static TYElement * getElement(int index)
static void purgeElements()
Classe de definition d'un point de calcul.C'est une classe derivee a TYPoint avec en plus un spectrep...
TYOpenGLRenderer * getRenderer()