32 static const float MaillagePickingTolerance = 1.0f;
39 Q_CHECK_PTR(pModeler);
59 GLuint selectBuf[
BUFSIZE], names = 0, *ptr =
nullptr;
62 glSelectBuffer(
BUFSIZE, selectBuf);
63 (void)glRenderMode(GL_SELECT);
67 glViewport(viewport.x(), viewport.y(), viewport.width(), viewport.height());
73 hits = glRenderMode(GL_RENDER);
78 ptr = (GLuint*)selectBuf;
80 TYElement* pElementAutreQueAltimetrie = NULL;
81 float zmin = (float)0xFFFFFFFF;
82 float zElementAutreQueAltimetrie = -1;
84 for (i = 0; i < hits; i++)
96 QString sCurrentClassName;
97 for (j = 0; j < (int)names; j++)
100 sCurrentClassName = QString(pElementCourant->
getClassName());
101 if (sCurrentClassName !=
"TYAltimetrie")
103 if (NULL == pElementAutreQueAltimetrie)
105 pElementAutreQueAltimetrie = pElementCourant;
106 zElementAutreQueAltimetrie = z1;
110 if (z1 < zElementAutreQueAltimetrie)
112 pElementAutreQueAltimetrie = pElementCourant;
113 zElementAutreQueAltimetrie = z1;
115 else if (z1 == zElementAutreQueAltimetrie)
118 if (pElementAutreQueAltimetrie == pElementCourant->
getParent())
120 pElementAutreQueAltimetrie = pElementCourant;
121 zElementAutreQueAltimetrie = z1;
138 if (pElementAutreQueAltimetrie)
183 if (!pElt->
isA(
"TYPoint"))
222 while (pTmpElt != NULL)
226 if (pMail !=
nullptr)
235 pElts->push_back(pPtCalcul);
243 pElts->push_back(pTmpElt);
250 if (pElts->size() > 1)
268 if (pElt->
isA(
"TYPoint"))
272 else if (pElt->
isA(
"TYPointCalcul"))
276 else if (pElt->
isA(
"TYPointControl"))
280 else if (pElt->
isA(
"TYTerrain"))
284 else if (pElt->
isA(
"TYPlanEau"))
288 else if (pElt->
isA(
"TYCourbeNiveau"))
292 else if (pElt->
isA(
"TYUserSourcePonctuelle"))
296 else if (pElt->
isA(
"TYAcousticLine"))
300 else if (pElt->
isA(
"TYReseauTransport"))
305 else if (pElt->
isA(
"TYRoute"))
310 else if (pElt->
isA(
"TYCoursEau"))
314 else if (pElt->
isA(
"TYAcousticRectangle"))
318 else if (pElt->
isA(
"TYMurElement"))
322 else if (pElt->
isA(
"TYDalle"))
326 else if (pElt->
isA(
"TYAcousticCircle"))
330 else if (pElt->
isA(
"TYAcousticSemiCircle"))
334 else if (pElt->
isA(
"TYAcousticCylinder"))
338 else if (pElt->
isA(
"TYAcousticSemiCylinder"))
342 else if (pElt->
isA(
"TYMaillage"))
346 else if (pElt->
isA(
"TYRectangularMaillage"))
350 else if (pElt->
isA(
"TYLinearMaillage"))
354 else if (pElt->
isA(
"TYAcousticRectangleNode"))
358 else if (pElt->
isA(
"TYMur"))
362 else if (pElt->
isA(
"TYAcousticBox"))
366 else if (pElt->
isA(
"TYAcousticVolumeNode"))
370 else if (pElt->
isA(
"TYEtage"))
374 else if (pElt->
isA(
"TYMachine"))
378 else if (pElt->
isA(
"TYBatiment"))
382 else if (pElt->
isA(
"TYTopographie"))
386 else if (pElt->
isA(
"TYSiteNode"))
390 else if (pElt->
isA(
"TYSiteNode"))
394 else if (pElt->
isA(
"TYEcran"))
398 else if (pElt->
isA(
"TYAcousticFaceSet"))
419 for (
unsigned int i = 0; i < pMaillage->
getPtsCalcul().size(); i++)
424 if ((mapperPos[0] <= pPtCalcul->
_x + MaillagePickingTolerance) &&
425 (mapperPos[0] >= pPtCalcul->
_x - MaillagePickingTolerance) &&
426 (mapperPos[1] >= pPtCalcul->
_y - MaillagePickingTolerance) &&
427 (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)
Contexte de rendu utilisé par les fonctions d'affichage.
@ Picking
The current render is only done for picking purpose.
double _y
y coordinate of OCoord3D
double _x
x coordinate of OCoord3D
virtual const char * getClassName() const
bool isA(const char *className) const
void setBoundingBoxVisible(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.
Generic class for a modeler window.
TYRenderWindowInteractor * getView()
virtual TYRenderContext createRenderContext()
virtual void updateView(bool clipping=true, bool axesAndGrid=true)
void invalidateScene(void)
void OpenGLRender(TYRenderContext &renderContext, 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...
const TYRenderViewport & getViewport() const
TYOpenGLRenderer * getRenderer()