1 <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
3 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4 <meta name="Generator" content="Microsoft Word 97">
5 <meta name="GENERATOR" content="Mozilla/4.75 [fr] (Win98; U) [Netscape]">
6 <title>Associations par lignes</title></head>
9 <table cols="2" width="100%">
11 <td><img src="logo-cs.gif" height="84" width="145"></td>
17 <center><a name="YaccDebut"></a>
18 <br><br><big><big><b><font size="+3"><big><big>HexaBlock<br><br></big></big></font></b></big></big><b><font size="+3">Associations par lignes : précisions</font></b></center>
20 <blockquote><i><b><br></b></i></blockquote><p><a href="index.html">Retour</a>
21 </p><p><br>
23 <p><br><b><big><big></big></big></b></p><p class="western" align="justify">Ce document établit les limitations actuelles des associations par lignes.<br>
25 <p class="western" align="justify"><font size="3">L'utilisateur peut
26 définir des associations multiples au moyen de deux fonctions :</font></p>
27 <pre class="western"><br></pre><table style="width: 771px; height: 31px; text-align: left; margin-left: auto; margin-right: auto; font-family: monospace;" border="1" cellpadding="2" cellspacing="2"><tbody><tr><td><p class="western" align="justify">
28 <font size="3">int associateOpenedLine (Edge* mstart, Edges&
29 mline, Shape* gstart, </font>
31 <p class="western" align="justify"> <font size="3"> double
32 pstart, Shapes& gline, double pend);</font></p>
33 <p class="western" align="justify"> <font size="3">int
34 associateClosedLine (Vertex* mfirst, Edge* mstart, Edges&
37 <p class="western" align="justify"> <font size="3"> Shape*
38 gstart, double pstart, Shapes& gline);</font></p></td></tr></tbody></table><pre class="western"></pre>
40 <p class="western" align="justify"><font size="3"><br>Ces deux fonctions
41 appellent la même fonction interne : </font></p>
43 <table style="width: 771px; height: 31px; text-align: left; margin-left: auto; margin-right: auto; font-family: monospace;" border="1" cellpadding="2" cellspacing="2"><tbody><tr><td><p class="western" align="justify">
44 <font size="3">int associateLine
45 (Vertex* vfirst, Edge* mstart, Edges& mline,</font></p><p class="western" align="justify"><font size="3"> Shape*
46 gstart, double pstart, Shapes& gline, double pend);</font></p></td></tr></tbody></table><pre class="western"></pre>
47 <p class="western" align="justify">Cette fonction effectue
48 les contrôles généraux réalisables par le modèle, trie les edges puis passe la
49 main à une fonction d'interface avec Cascade : </p><table style="width: 771px; height: 31px; text-align: left; margin-left: auto; margin-right: auto; font-family: monospace;" border="1" cellpadding="2" cellspacing="2"><tbody><tr><td><p class="western" align="justify">
50 <font size="3">int </font><font size="3">associateCascade (Edges& mline, int msens[], Shape* gstart, </font>
52 </p><p class="western" align="justify"><font size="3"> Shapes&
53 gline, double pstart, double pend, bool clos);</font></p></td></tr></tbody></table><pre class="western"></pre><p class="western" align="justify"><font size="3">Les arguments sont : </font>
55 <ul><li><p class="western" align="justify"><font size="3">Edges& mline :
56 liste triée des edges </font>
58 </li><li><p class="western" align="justify"><font size="3">int msens[] :
59 indicateur (V_AMON ou V_AVAL) donnant le sens de chaque edge.</font></p>
60 </li><li><p class="western" align="justify"><font size="3">Shape* gstart :
61 Forme associée au premier edge. </font>
63 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Shapes&
64 gline : Formes associées aux autres edges (peut être vide).</span></font></font></p>
65 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">double
66 pstart : Paramètre indiquant le point de départ de la première
67 forme. Si la ligne est ouverte, pstart est compris entre 0 et 1. Si
68 la ligne est fermée, seules les valeurs 0 ou 1 sont acceptées. </span></font></font>
70 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">double
71 pend : Paramètre indiquant le point de départ de la dernière
72 forme. Vaut 1 si la ligne est fermée.</span></font></font></p>
73 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">bool
74 clos : indique si la ligne est ouverte ou fermée.</span></font></font></p>
76 <p class="western" style="margin-left: 1.27cm; text-indent: -0.64cm;" align="justify">
79 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Fonctionnement
80 du programme </span></font></font><font color="#000000"><font size="3"><span lang="fr-FR"><b>associateCascade</b></span></font></font><font color="#000000"><font size="3"><span lang="fr-FR">
81 : </span></font></font>
83 <ul><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Ordonner
84 les edges (fait dans associateLine)</span></font></font></p>
85 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Transformer
86 les Hexa::Shapes en lignes (TopoDS_Edge) : elles sont rangées dans
87 tabg_line [nblines].</span></font></font></p>
88 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Créer
89 des courbes (type BrepAdaptor_Curve*) à partir des lignes, c'est
90 le moyen de calculer le point situé à une certaine abscisse
91 curviligne. Les courbes sont rangées dans tabg_curve[nblines].</span></font></font></p>
92 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Mémoriser
93 le longueur réelle de chaque courbe et la mémoriser dans
94 tabg_length[nblines]. </span></font></font>
96 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Définir
97 les points extrêmes de chaque courbe (type gp_Pnt) et l'enregistrer
98 dans tabg_point [2*nblines].</span></font></font></p>
99 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Ordonner
100 (et contrôler) les lignes/coubes au moyen de la fonction
101 vertexInLine, laquelle met à jour les tableaux tabg_orig (donne le
102 sens de chaque ligne) et shape_posit (donne le classement des
103 lignes).</span></font></font></p>
105 <p class="western" style="margin-left: 1.27cm; text-indent: -0.64cm;" align="justify">
108 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR"></span></font></font></p><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Si
109 la ligne globale est continue (les courbes sont jointives deux à
110 deux), on peut procéder à l'association ligne/eddge.</span></font></font></p>
112 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Le
113 premier point (défini par tab_gcurve[0] et pstart est associé au
114 premier vertex (défini par mline[0]->getVertex (msens[0]).</span></font></font></p>
115 <p class="western" align="justify"><br><font color="#000000"><font size="3"><span lang="fr-FR">Il
116 faut ensuite définir la (les) portion(s) de courbe associée(s) à
117 chaque edge.<br>Chaque
118 portion de courbe est définie par la représentation brep de la
119 ligne associée et les paramètres de début et fin. </span></font></font>
122 <p class="western" align="justify"><br><font color="#000000"><font size="3"><span lang="fr-FR">Une
123 première tentative fut d'utiliser les <span style="font-weight: bold;">abscisses curvilignes</span>
124 relatives de chaque type de ligne. Cette tentative fut rejetée d'une
125 part car elle ne convenait pas à la bielle (voir dessin en annexe) et
126 d'autre part l'idée d'établir une abscisse curviligne sur le modèle de
127 bloc contredisait l'idée selon laquelle les coordonnées du modele de
128 bloc n'ont pas d'importance.</span></font></font></p>
130 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">On
131 se contente d'établir une relation entre les <span style="font-weight: bold;">n lignes (de la CAO)
132 et les m edges (du modèle) </span>(voir figure 1) : </span></font></font>
134 <ul><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">soit
135 sm1 la position relative du premier vertex du ième edge : on prend
136 sm1 = i/nbedges</span></font></font></p>
137 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">soit
138 sm2 la position relative du second vertex du ième edge. On a donc
139 : sm2 = (i+1) /nbedges;</span></font></font></p>
140 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">soit
141 sg1 la position relative du premier vertex de la jème ligne. On
142 prend : sg1 = j/nblignes</span></font></font></p>
143 </li><li><p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">soit
144 sg2 la position relative du second vertex de la jème ligne : sg2 =
145 (j+1)/nblignes.</span></font></font></p>
147 <p class="western" align="justify"><br>
149 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Le
150 ième edge et la jème ligne s'intersectent si : sg1 < sm2 et sg2
151 > sm1.</span></font></font></p>
152 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">On
153 doit alors déclarer qu'une portion de la ligne est associée à
154 l'edge.</span></font></font></p>
155 <p class="western" align="justify"><br>
157 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">La
158 portion de la ligne est délimitée par les paramètres normalisés (compris entre 0 et 1) :</span></font></font></p><table style="width: 771px; height: 31px; text-align: left; margin-left: auto; margin-right: auto; font-family: monospace;" border="1" cellpadding="2" cellspacing="2"><tbody><tr><td><p class="western" align="justify">
159 <font color="#000000"><font size="3"><span lang="fr-FR">para_deb = sg1 < sm1 ?
160 (sm1-sg1)/(sg2-sg1) : 0.0;</span></font></font></p>
161 <p class="western" align="justify"><font color="#000000">
162 <font size="3"><span lang="fr-FR">para_fin = sg2 > sm2 ?
163 (sm2-sg1)/(sg2-sg1) : 1.0;</span></font></font></p></td></tr></tbody></table><pre class="western"></pre>
164 <p class="western" align="justify"><font color="#000000"><font size="3"><span lang="fr-FR">Le
165 second vertex de l'edge est associé si : sg1 <= sm2 <= sg2</span></font></font></p>
166 <p class="western" align="justify"><br>
168 <div style="text-align: center;"><img style="width: 607px; height: 566px;" alt="Asso ligne" src="AssoLines.gif"><br></div><br><p><a href="#YaccDebut">Retour au début</a> </p><p></p><hr style="width: 100%; height: 2px;"><br><hr width="100%">