HexaBlock

Associations par lignes : précisions

Retour   




Ce document établit les limitations actuelles des associations par lignes.

L'utilisateur peut définir des associations multiples au moyen de deux fonctions :


int associateOpenedLine (Edge* mstart, Edges& mline, Shape* gstart,

                         double pstart, Shapes& gline, double pend);

int associateClosedLine (Vertex* mfirst, Edge* mstart, Edges& mline,

                         Shape* gstart, double pstart, Shapes& gline);




Ces deux fonctions appellent la même fonction interne : 

int associateLine (Vertex* vfirst, Edge* mstart, Edges& mline,

                   Shape* gstart, double pstart, Shapes& gline, double pend);


Cette fonction effectue les contrôles généraux réalisables par le modèle, trie les edges puis passe la main à une fonction d'interface avec Cascade :

int associateCascade (Edges& mline, int msens[], Shape* gstart,

Shapes& gline, double pstart, double pend, bool clos);

Les arguments sont :


Fonctionnement du programme associateCascade :


Si la ligne globale est continue (les courbes sont jointives deux à deux), on peut procéder à l'association ligne/eddge.

Le premier point (défini par tab_gcurve[0] et pstart est associé au premier vertex (défini par mline[0]->getVertex (msens[0]).


Il faut ensuite définir la (les) portion(s) de courbe associée(s) à chaque edge.
Chaque portion de courbe est définie par la représentation brep de la ligne associée et les paramètres de début et fin.


Une première tentative fut d'utiliser les abscisses curvilignes relatives de chaque type de ligne. Cette tentative fut rejetée d'une part car elle ne convenait pas à la bielle (voir dessin en annexe) et d'autre part l'idée d'établir une abscisse curviligne sur le modèle de bloc contredisait l'idée selon laquelle les coordonnées du modele de bloc n'ont pas d'importance.

On se contente d'établir une relation entre les n lignes (de la CAO) et les m edges (du modèle) (voir figure 1) :


Le ième edge et la jème ligne s'intersectent si : sg1 < sm2 et sg2 > sm1.

On doit alors déclarer qu'une portion de la ligne est associée à l'edge.


La portion de la ligne est délimitée par les paramètres  normalisés (compris entre 0 et 1) :

para_deb = sg1 < sm1 ? (sm1-sg1)/(sg2-sg1) : 0.0;

para_fin = sg2 > sm2 ? (sm2-sg1)/(sg2-sg1) : 1.0;


Le second vertex de l'edge est associé si : sg1 <= sm2 <= sg2


Asso ligne

Retour au début