ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magicsld/SuperArete.vb
Revision: 48
Committed: Wed Aug 22 21:18:12 2007 UTC (17 years, 9 months ago) by bournival
File size: 26509 byte(s)
Log Message:
On passe aux nouveaux .dll

File Contents

# User Rev Content
1 bournival 48 Imports SolidWorks.Interop
2     Imports SolidWorks.Interop.swconst
3     Imports SolidWorks.Interop.swpublished
4    
5 bournival 40 Public Class SuperArete
6     Inherits SuperEntite
7     Public swArete As SldWorks.Edge
8     Private Shared compteur As Long
9     Private Shared no As Long
10    
11     Protected swCourbe As SldWorks.Curve
12    
13    
14     ''' <summary>
15     ''' Le new pour un encapsulateur de l'arète
16     ''' </summary>
17     ''' <param name="swArete"></param>
18     ''' <param name="encapsulateur"></param>
19     ''' <remarks></remarks>
20     Public Sub New(ByRef swArete As SldWorks.Edge, ByRef encapsulateur As Boolean)
21     Me.swArete = swArete
22     Me.swCourbe = swArete.GetCurve
23     End Sub
24    
25 bournival 48 Public Sub New(ByRef arete As SldWorks.Edge, Optional ByVal tip As Integer = 0)
26 bournival 40 Me.swArete = arete
27     Me.swCourbe = swArete.GetCurve
28     Select Case tip
29     Case Commun.tipe_e.Volume
30     nom = "Arete" & compteur
31     Case Commun.tipe_e.coque
32     nom = "AreteCoque" & compteur
33     Case Commun.tipe_e.poutre
34     nom = "AretePoutre" & compteur
35     Case Commun.tipe_e.MiniPoutre
36     nom = "Mini-Poutre" & compteur
37     End Select
38     nomOrig = nom
39     compteur = compteur + 1
40     End Sub
41    
42    
43     Public Overrides Sub SaveNom()
44     ' procédure qui enregistre le nom et qui , pour l'instant ne tient pas compte des conditions aux limites
45     Dim ent As SldWorks.Entity
46     ent = swArete
47     Dim retval As Boolean
48    
49     Try
50     retval = swPart.SetEntityName(ent, nom)
51     Catch
52     Debug.Write("Le prog ne veut pas mettre le nom sur une entité.." & vbCr & "Le nom devrait être: " & nom) ' MsgBox("Le prog ne veut pas mettre le nom sur une entité.." & vbCr & "Le nom devrait être: " & nom)
53     End Try
54    
55     Dim i As Integer
56     If retval = False Then
57     Do Until retval = True
58     i += 1
59     retval = swPart.SetEntityName(ent, nom & Chr(96 + i))
60     Loop
61     Me.nom = nom & Chr(96 + i)
62     Debug.Write("Impossibilité d'écrire le nom de l'entité... il y a déjà un nom." & Chr(13) & nom) ' MsgBox("Impossibilité d'écrire le nom de l'entité... il y a déjà un nom." & Chr(13) & nom, MsgBoxStyle.Critical, "Problème dans le setID de l'arrète")
63     End If
64     End Sub
65    
66     Shared Sub reinitialiser()
67     compteur = 0
68     End Sub
69    
70     Public Function GetOrientation(ByRef T As Double) As Double()
71     'retval = Edge.Evaluate ( Parameter) retval est un tableau, 4,5 et 6 sont les tangentes au point...
72    
73     Dim temp(2) As Double
74     Dim retval As Object
75    
76     retval = Me.swArete.Evaluate(T)
77    
78     temp(0) = retval(3)
79     temp(1) = retval(4)
80     temp(2) = retval(5)
81    
82     Return temp
83    
84     End Function
85    
86     Public Function GetOrientation(ByRef x As Double, ByRef y As Double, ByRef z As Double) As Double()
87     Dim retval As Object
88     retval = Me.swArete.GetClosestPointOn(x, y, z)
89     Return GetOrientation(retval(3))
90     End Function
91    
92    
93    
94     Public Sub MettreAttributPourConditionLimite()
95     Dim swent As SldWorks.Entity
96     Dim nom As String
97     Dim cond As String
98    
99     cond = Me.condition
100     If cond = "" Then Exit Sub
101    
102     swent = Me.swArete
103    
104     nom = "CL" & CStr(no) & "_" & cond
105     Dim Attr As SldWorks.Attribute = Nothing
106    
107     Try
108     Attr = swent.FindAttribute(Intersections.DefAttrConditionLimite, 0) ' si l'attribut existe déjà on pointe dessus.
109     Catch ex As Exception
110     MsgBox("N'arrive pas à se lier à l'attribut, erreur: " & ex.Message, MsgBoxStyle.Critical)
111     End Try
112    
113     ' si nothing c'est que l'attribut n'existe pas
114     If Attr Is Nothing Then Attr = Intersections.DefAttrConditionLimite.CreateInstance5(swModel, Me.swArete, nom, 0, 2) ' 0 = swThisconfig, 2 = allconfig
115    
116     While Attr Is Nothing
117     no += 1
118     nom = "CL" & CStr(no) & "_" & cond
119     Attr = Intersections.DefAttrConditionLimite.CreateInstance5(swModel, Me.swArete, nom, 0, 2)
120     End While
121    
122     Dim ParamCL As SldWorks.Parameter
123     ParamCL = Attr.GetParameter("CL")
124    
125     ParamCL.SetStringValue2(cond, 2, "") ' swAllConfiguration = 2
126    
127     GererDossiers("Conditions Aux Limites", nom)
128     no = no + 1
129    
130     End Sub
131    
132    
133     ' une fonction qui transforme un attribut en condition aux limites
134     Public Sub AttributVersConditionLimite()
135     Dim p As SldWorks.Parameter
136     Dim ent As SldWorks.Entity
137     Dim attr As SldWorks.Attribute
138    
139     ent = Me.swArete
140     attr = ent.FindAttribute(Intersections.DefAttrConditionLimite, 0)
141     If Not attr Is Nothing Then
142     p = attr.GetParameter("CL")
143     nom = nomOrig & "@" & p.GetStringValue
144     End If
145    
146     End Sub
147    
148    
149     Public Function GetSwSommets() As SldWorks.Vertex()
150     Dim swsommet(1) As SldWorks.Vertex
151     swsommet(0) = Me.swArete.GetStartVertex()
152     If swsommet(0) Is Nothing Then Return Nothing
153     swsommet(1) = Me.swArete.GetEndVertex
154     Return swsommet
155     End Function
156    
157     Public Overrides Sub Selectionner(Optional ByVal Mark As Integer = 0, Optional ByRef Append As Boolean = True)
158     Dim swent As SldWorks.Entity
159     swent = swArete
160     swent.Select2(Append, Mark)
161     End Sub
162    
163    
164    
165     ''' <summary>
166     ''' Renvoie les coordonnées du point milieu
167     ''' </summary>
168     ''' <returns></returns>
169     ''' <remarks></remarks>
170     Public Function GetPointMilieu() As Double()
171     Dim T As Double
172     Dim xyz(2) As Double
173     T = Me.GetTMilieu
174     Me.Evaluer(T, xyz)
175     Return xyz
176     End Function
177    
178     ''' <summary>
179     ''' Renvoie les coordonnées du point milieu
180     ''' </summary>
181     ''' <returns>Faux si le sommet n'esiste pas</returns>
182     ''' <remarks></remarks>
183     Public Function GetPointMilieu(ByRef x As Double, ByRef y As Double, ByRef z As Double) As Boolean
184     Dim T As Double
185     T = Me.GetTMilieu
186     Me.Evaluer(T, x, y, z)
187     Return True
188     End Function
189    
190    
191    
192    
193     ''' <summary>
194     ''' Détermine si une courbe est une ligne
195     ''' </summary>
196     ''' <returns>Vrai si la courbe est une ligne</returns>
197     ''' <remarks></remarks>
198     Public Function IsLine() As Boolean
199     Try
200     Dim swCourbe As SldWorks.Curve = Me.swArete.GetCurve
201     Return swCourbe.IsLine()
202     Catch
203     Dim fault As SldWorks.FaultEntity = Me.swArete.Check
204     Debug.WriteLine("N'arrive pas à déterminer si la courbe est une ligne" & vbCr & "FaultEntity.Count = " & IIf(fault Is Nothing, "0", fault.Count) & vbCr & Me.nom)
205     Return True
206     End Try
207    
208     End Function
209    
210     ''' <summary>
211     ''' Détermine si la courbe est un cercle
212     ''' </summary>
213     ''' <returns>Vrai si la courbe est un cercle</returns>
214     ''' <remarks></remarks>
215     Public Function IsCircle() As Boolean
216     Try
217    
218     Dim swCourbe As SldWorks.Curve = Me.swArete.GetCurve
219     If swCourbe.IsLine Then Return False
220     Return Me.swCourbe.IsCircle
221     Catch ex As Exception
222     Dim fault As SldWorks.FaultEntity = Me.swArete.Check
223     Debug.WriteLine("N'arrive pas à déterminer si la courbe est un cercle" & vbCr & "FaultEntity.Count = " & IIf(fault Is Nothing, "0", fault.Count) & vbCr & Me.nom)
224     Return False
225     End Try
226    
227     End Function
228    
229     ''' <summary>
230     ''' Détermine si la courbe est une B-Spline
231     ''' </summary>
232     ''' <returns></returns>
233     ''' <remarks>Vrai si la courbe est une b-spline</remarks>
234     Public Function IsBcurve() As Boolean
235     Try
236     Dim swCourbe As SldWorks.Curve = Me.swArete.GetCurve
237     If swCourbe.IsLine Then Return False
238     If swCourbe.IsCircle Then Return False ' le manuel dit de vérifier ça avant de demander pour une Spline...
239     Return swCourbe.IsBcurve()
240     Catch
241     Dim fault As SldWorks.FaultEntity = Me.swArete.Check
242     Debug.WriteLine("N'arrive pas à déterminer si la courbe est une spline" & vbCr & "FaultEntity.Count = " & IIf(fault Is Nothing, "0", fault.Count) & vbCr & Me.nom)
243     Return False
244     End Try
245     End Function
246    
247     ''' <summary>
248     ''' Détermine si la courbe est une ellipse
249     ''' </summary>
250     ''' <returns></returns>
251     ''' <remarks>Vrai si ellipse</remarks>
252     Public Function IsEllipse() As Boolean
253     Try
254     Dim swCourbe As SldWorks.Curve = Me.swArete.GetCurve
255     If swCourbe.IsLine Then Return False
256     Return swCourbe.IsEllipse
257     Catch
258     Dim fault As SldWorks.FaultEntity = Me.swArete.Check
259     Debug.WriteLine("N'arrive pas à déterminer si la courbe est une ellipse" & vbCr & "FaultEntity.Count = " & IIf(fault Is Nothing, "0", fault.Count) & vbCr & Me.nom)
260     End Try
261    
262     End Function
263    
264    
265     ''' <summary>
266     ''' Sub pour sélectionner l'arète dans la fenètre de solidworks
267     ''' </summary>
268     ''' <param name="Append"></param>
269     ''' <remarks></remarks>
270     Public Sub sélectionner(Optional ByVal Append As Boolean = False)
271     Dim swent As SldWorks.Entity
272     swent = Me.SwArete
273     swent.Select2(Append, 0)
274     End Sub
275    
276     ''' <summary>
277     ''' Sub qui colore une arète
278     ''' </summary>
279     ''' <param name="Largeur">La largeur de la ligne</param>
280     ''' <param name="Rouge">Le ton de rouge, entre 0 et 1</param>
281     ''' <param name="Vert">Le ton de vert, entre 0 et 1</param>
282     ''' <param name="Bleu">Le ton de bleu, entre 0 et 1</param>
283     ''' <remarks></remarks>
284     Public Sub Colorer(Optional ByVal Largeur As Integer = 2, Optional ByRef Rouge As Double = 1, Optional ByRef Vert As Double = 0, Optional ByRef Bleu As Double = 0)
285 bournival 48 swArete.Display(Largeur, Rouge, Vert, Bleu, True)
286 bournival 40 End Sub
287    
288    
289     ''' <summary>
290     ''' Sub qui met ou Update les paramètres des doublons des arètes
291     ''' </summary>
292     ''' <param name="Numero">Le numéro que l'on veut attribuer</param>
293     ''' <param name="Maitre">Si ce,st un maitre on met true</param>
294     ''' <param name="NomMaitre">Le nom du maitre si on le connait.</param>
295     ''' <remarks>Il faut toujours effacer l'attribut du maitreé... ou s'assurer que dans MAGiC on ignore "Inconnu"... De plus, si l'attribut existe déjà, le numéro devient innutile.</remarks>
296     Public Sub MettreAttributDoublon(Optional ByRef Numero As Integer = 0, Optional ByRef Maitre As Boolean = False, Optional ByRef NomMaitre As String = Nothing)
297     Dim attr As SldWorks.Attribute
298     Dim swent As SldWorks.Entity
299     Dim nom As String
300     Dim ParamMaitre As SldWorks.Parameter
301     Dim paramSens As SldWorks.Parameter
302     Dim sens As Double = -5
303    
304     'mettre un attribut et l'updater...
305     swent = Me.SwArete
306    
307     nom = "DoublonA_" & Format(Numero, "000")
308     If Maitre Then nom &= "Maitre" Else nom &= "Esclave"
309    
310     attr = swent.FindAttribute(Intersections.DefAttrDoublon, 0)
311    
312     Do While attr Is Nothing
313     nom = "DoublonA_" & Format(Numero, "000")
314     If Maitre Then nom &= "Maitre" Else nom &= "Esclave"
315 bournival 48 attr = Intersections.DefAttrDoublon.CreateInstance5(swModel, swArete, nom, 0, 2) ' 0 = swThisconfig
316 bournival 40 If attr Is Nothing Then Numero += 1
317     Loop
318    
319     ParamMaitre = attr.GetParameter("Maitre")
320 bournival 48 paramSens = attr.GetParameter("Sens")
321 bournival 40 If NomMaitre = Nothing Then
322     NomMaitre = "Inconnu"
323    
324     Else ' il faut mettre les attribut de doublons sur les sommets.
325     Dim swSommet1 As SldWorks.Vertex
326     Dim swSommet2 As SldWorks.Vertex
327    
328     swSommet1 = Me.SwArete.GetStartVertex()
329     If swSommet1 IsNot Nothing Then
330     swSommet2 = Me.SwArete.GetEndVertex
331     Dim esom1 As New SuperSommet(swSommet1, True)
332     Dim esom2 As New SuperSommet(swSommet2, True)
333     Dim premier As Boolean = False
334     Dim second As Boolean = False
335    
336     Dim SlySommetTest As SlySommetVolume
337    
338     For Each SlySommetTest In Commun.lst_SommetVolume
339     If Not premier AndAlso Distance(esom1.GetSommet, SlySommetTest.swSommet) < Epsilon Then ' on vient de trouver le sommet du volume
340     esom1.MettreAttributDoublonSommet(SlySommetTest.nom, SlySommetTest.swSommet)
341     premier = True
342     ElseIf Distance(esom2.GetSommet, SlySommetTest.swSommet) < Epsilon Then
343     esom2.MettreAttributDoublonSommet(SlySommetTest.nom, SlySommetTest.swSommet)
344     second = True
345     End If
346     If premier AndAlso second Then Exit For
347     Next
348    
349     End If
350    
351     ' trouver si le sens est le même, mettre 1 si oui, et -1 si non.
352     ' on met 1 si les 2 startvertex sont au même endroit, -1 si ce n'est pas le cas
353    
354     Dim a As SlyAreteVol = Nothing
355     Dim som1 As SldWorks.Vertex, som2 As SldWorks.Vertex
356     For Each a In Commun.lst_AreteVolume
357     If a.nom = NomMaitre Then Exit For
358     Next
359     som1 = Me.SwArete.GetStartVertex
360     If som1 IsNot Nothing Then
361     som2 = a.swArete.GetStartVertex
362     If Distance(som1, som2) < Epsilon Then sens = 1 Else sens = -1
363     Else ' wouch!, si on a une courbe fermée, comment on trouve le sens de l'arête maitre comparé à l'arète esclave.
364     ' si les 2 arètes sont une par-dessus l'autre, alors je prend le point à t=0 et le T du point équivalent sur l'arète esclave
365     ' si T+ deltaT = le même point sur l'arète esclave alors Bingo, même sens
366    
367     ' a est la Slyarete du maitre, Me est l'arète esclave
368     Dim x, y, z, T2, T3 As Double
369     Dim ret As Boolean = Me.Evaluer(0, x, y, z)
370     T2 = a.GetT(x, y, z)
371    
372     Me.Evaluer(0.1, x, y, z)
373     T3 = a.GetT(x, y, z)
374     If T3 = (T2 + 0.1) Then sens = 1 Else sens = -1
375     End If
376    
377    
378    
379     End If
380    
381     paramSens.SetDoubleValue2(sens, 2, "")
382     ParamMaitre.SetStringValue2(NomMaitre, 2, "") ' swAllConfiguration = 2
383     GererDossiers("Doublons", nom)
384    
385     'Me.Colorer(2, 1, 1, 0)
386    
387     End Sub
388    
389    
390     ''' <summary>
391     ''' sub qui efface l'attribut du doublon sur l'arète maitre.
392     ''' </summary>
393     ''' <remarks></remarks>
394     Public Sub EffacerAttributDoublon()
395     Dim attr As SldWorks.Attribute
396     Dim swent As SldWorks.Entity
397     swent = Me.SwArete
398     attr = swent.FindAttribute(Intersections.DefAttrDoublon, 0)
399     attr.Delete(True)
400     End Sub
401    
402     ''' <summary>
403     ''' Function qui retourne le nom qui est sur une arète
404     ''' </summary>
405     ''' <returns></returns>
406     ''' <remarks></remarks>
407     Public Function getNom() As String
408     Dim swEnt As SldWorks.Entity
409     swEnt = swArete
410     getNom = swPart.GetEntityName(swEnt)
411     End Function
412    
413    
414     ''' <summary>
415     ''' Calcule et retourne le T au milieu de l'arète
416     ''' </summary>
417     ''' <returns>Le T du milieu</returns>
418     ''' <remarks></remarks>
419     Public Function GetTMilieu() As Double
420     Dim swCourbe As SldWorks.Curve
421     Dim temp As Object
422     Dim T1 As Double, T2 As Double
423     Dim sommet As SldWorks.Vertex
424     Dim point As Object
425    
426     swCourbe = Me.SwArete.GetCurve
427    
428     sommet = Me.SwArete.GetStartVertex()
429    
430     If sommet IsNot Nothing Then
431 bournival 48 point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T1 = temp(0)
432     sommet = swArete.GetEndVertex() : point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T2 = temp(0)
433 bournival 40 Return (T1 + T2) / 2
434    
435     Else
436     'l'arète est fermée.
437     Return 0.5 ' c'est un cercle... tous les points sont au milieu!
438     MsgBox("On demande la longueur d'une courbe fermée qui n'est pas un cercle... ce n'est pas encore programmé car ça ne devrait pas arriver.")
439     End If
440    
441     End Function
442    
443    
444     ''' <summary>
445     ''' Calcule et retourne la valeur de T à un certain endroit
446     ''' </summary>
447     ''' <param name="x"></param>
448     ''' <param name="y"></param>
449     ''' <param name="z"></param>
450     ''' <returns></returns>
451     ''' <remarks></remarks>
452     Public Function GetT(ByRef x As Double, ByRef y As Double, ByRef z As Double) As Double
453     Dim retval As Object
454     Dim retour(1) As Double
455     retval = Me.SwArete.GetParameter(x, y, z)
456     retour = retval
457     If Not retour(1) Then MsgBox("GetT n'a pas fonctionné pour cette arête.", MsgBoxStyle.Critical)
458     Return retour(0)
459     End Function
460    
461     ''' <summary>
462     ''' Fonction qui retourne le Tmin de l'arète
463     ''' </summary>
464     ''' <returns>Tmax</returns>
465     ''' <remarks></remarks>
466     Public Function GetTMin() As Double
467     Dim vp As Object
468 bournival 48 swArete.GetCurve()
469     vp = swArete.GetCurveParams2()
470 bournival 40 Return vp(6)
471     End Function
472    
473    
474     ''' <summary>
475     ''' Fonction qui retourne le Tmax de l'arète
476     ''' </summary>
477     ''' <returns>Tmax</returns>
478     ''' <remarks></remarks>
479     Public Function GetTMax() As Double
480     Dim vp As Object
481 bournival 48 swArete.GetCurve()
482     vp = swArete.GetCurveParams2()
483 bournival 40 Return vp(7)
484     End Function
485    
486    
487     ''' <summary>
488     ''' Détermine si la valeur de T est sur la courbe, si oui ça retourne les coordonnées XYZ
489     ''' </summary>
490     ''' <param name="T"></param>
491     ''' <param name="xyz"></param>
492     ''' <returns></returns>
493     ''' <remarks></remarks>
494     Public Function Evaluer(ByRef T As Double, Optional ByRef xyz() As Double = Nothing) As Boolean
495    
496     Dim temp(2) As Double
497     Dim retval As Object
498     Dim retour() As Double
499     Dim T1 As Double
500     Dim T2 As Double
501    
502     retval = Me.SwArete.GetCurveParams2()
503     retour = retval
504     T1 = retour(6)
505     T2 = retour(7)
506    
507     If Not ((T >= T1) And (T <= T2)) Then Return False
508    
509     retval = Me.SwArete.Evaluate(T)
510    
511     temp(0) = retval(0)
512     temp(1) = retval(1)
513     temp(2) = retval(2)
514    
515     xyz = temp
516    
517     Return True
518    
519     End Function
520    
521    
522     ''' <summary>
523     ''' Détermine si la valeur de T est sur la courbe, si oui ça retourne les coordonnées XYZ
524     ''' </summary>
525     ''' <param name="T"></param>
526     ''' <param name="x"></param>
527     ''' <param name="y"></param>
528     ''' <param name="z"></param>
529     ''' <returns></returns>
530     ''' <remarks></remarks>
531     Public Function Evaluer(ByRef T As Double, ByRef x As Double, ByRef y As Double, ByRef z As Double) As Boolean
532     'si XYZ est omis alors on veut juste savoir si le paramètre est sur la courbe
533    
534     Dim temp(2) As Double
535     Dim retval As Object
536     Dim retour() As Double
537     Dim T1 As Double
538     Dim T2 As Double
539    
540     retval = Me.SwArete.GetCurveParams2()
541     retour = retval
542     T1 = retour(6)
543     T2 = retour(7)
544    
545     If Not ((T >= T1) And (T <= T2)) Then Return False
546    
547     retval = Me.SwArete.Evaluate(T)
548    
549     x = retval(0)
550     y = retval(1)
551     z = retval(2)
552    
553     Return True
554     End Function
555    
556     ''' <summary>
557     ''' Fonction qui compare la superarete avec une autre arète de solidworks
558     ''' </summary>
559     ''' <param name="swArete"></param>
560     ''' <returns></returns>
561     ''' <remarks></remarks>
562     Public Function comparer(ByRef swArete As SldWorks.Edge) As Boolean
563     Dim e As New SuperArete(swArete, True)
564     Return comparer(e)
565     End Function
566    
567    
568    
569    
570     ''' <summary>
571     ''' Fonction qui compare 2 superaretes. Retourne vrai si les 2 arêtes sont identiques
572     ''' </summary>
573     ''' <param name="sAreteTest">L'arète avec laquelle comparer</param>
574     ''' <returns>Vrais si les 2 arêtes peuvent être fusionnées. Faux sinon</returns>
575     ''' <remarks></remarks>
576     Public Function Comparer(ByRef sAreteTest As SuperArete) As Boolean
577     'on a 2 arètes, et on ne peut comparer directement les pointeurs...
578    
579     If swArete Is sAreteTest Then Return True
580    
581     ' les conditions suivantes doivent toutes être vrai pour retourner oui..
582     ' 1 - les types sont les mêmes (lignes, cercles, bsplines...)
583     If Not Me.IsLine = sAreteTest.IsLine Then Return False
584    
585    
586    
587     ' 2 - les 2 points d'extrémités sont identiques.
588     Dim debut1() As Double = Me.GetStartPoint
589     Dim debut2() As Double = sAreteTest.GetStartPoint
590     Dim fin1() As Double = Me.GetEndPoint
591     Dim fin2() As Double = sAreteTest.GetEndPoint
592    
593     If debut1 Is Nothing Xor debut2 Is Nothing Then Return False
594     If debut1 Is Nothing And debut2 Is Nothing Then ' peut-être un cercle
595     If Not swModel.ClosestDistance(sAreteTest.swArete, Me.swArete, Nothing, Nothing) < Epsilon Then Return False
596     ' bon, on a 2 cercles (ou courbe fermées) qui se touchent à au moins un point...
597     Dim courbe1 As SldWorks.Curve = Me.swArete.GetCurve
598     Dim courbe2 As SldWorks.Curve = sAreteTest.swArete.GetCurve
599    
600     If courbe1.IsCircle AndAlso courbe2.IsCircle Then
601     Dim vparam1 As Object = courbe1.CircleParams()
602     Dim vparam2 As Object = courbe2.CircleParams()
603     If Math.Abs(vparam1(0) - vparam2(0)) < Epsilon AndAlso Math.Abs(vparam1(1) - vparam2(1)) < Epsilon AndAlso Math.Abs(vparam1(2) - vparam2(2)) < Epsilon AndAlso Math.Abs(vparam1(6) - vparam2(6)) < Epsilon Then Return True Else Return False ' centreX , y , z , Radius(6)
604     ElseIf courbe1.IsEllipse AndAlso courbe1.IsEllipse Then
605     Dim vparam1 As Object = courbe1.GetEllipseParams()
606     Dim vparam2 As Object = courbe2.GetEllipseParams()
607     For i As Integer = 0 To 10
608     If Math.Abs(vparam1(i) - vparam2(i)) > Epsilon Then Return False
609     Next
610     Return True
611     Else
612     Return False
613     End If
614     End If
615    
616     If Distance(debut1, debut2) > Epsilon AndAlso Distance(debut1, fin2) > Epsilon Then Return False
617     If Distance(fin1, debut2) > Epsilon AndAlso Distance(fin1, fin2) > Epsilon Then Return False
618    
619 bournival 48 ' le pointmilieu est identique
620 bournival 40 Dim Milieu1() As Double = Me.GetPointMilieu()
621     Dim milieu2() As Double = sAreteTest.GetPointMilieu
622     If Distance(Milieu1, milieu2) > Epsilon Then Return False
623    
624     Return True ' pourrait ne pas marcher dans certains cas fucké...
625     End Function
626    
627     ''' <summary>
628     ''' Function qui calcule la longueur de l'arète
629     ''' </summary>
630     ''' <returns>La longueur de l'arrète</returns>
631     ''' <remarks></remarks>
632     Public Function Longueur() As Double
633     Dim temp As Object
634     Dim T1 As Double, T2 As Double
635     Dim sommet As SldWorks.Vertex
636     Dim point As Object
637    
638 bournival 48 sommet = swArete.GetStartVertex()
639 bournival 40
640     If sommet IsNot Nothing Then
641 bournival 48 point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T1 = temp(0)
642     sommet = swArete.GetEndVertex() : point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T2 = temp(0)
643 bournival 40 Return swCourbe.GetLength2(T1, T2)
644    
645     Else
646     'l'arète est fermée.
647     Dim params() As Double
648     If swCourbe.IsCircle Then
649     params = swCourbe.CircleParams
650     Return params(7) * Pi * 2
651     End If
652     MsgBox("On demande la longueur d'une courbe fermée qui n'est pas un cercle... ce n'est pas encore programmé car ça ne devrait pas arriver.")
653     End If
654     End Function
655    
656     ''' <summary>
657     ''' Renvoie les coordonnées du point de départ
658     ''' </summary>
659     ''' <returns></returns>
660     ''' <remarks></remarks>
661     Public Function GetStartPoint() As Double()
662     Dim swSommet As SldWorks.Vertex
663     Dim retval As Object
664     Dim xyz(2) As Double
665     swSommet = Me.SwArete.GetStartVertex()
666     If swSommet Is Nothing Then Return Nothing
667     retval = swSommet.GetPoint()
668     xyz = retval
669     Return xyz
670     End Function
671    
672     ''' <summary>
673     ''' Renvoie les coordonnées du point de départ
674     ''' </summary>
675     ''' <returns>Faux si le sommet n'esiste pas</returns>
676     ''' <remarks></remarks>
677     Public Function GetStartPoint(ByRef x As Double, ByRef y As Double, ByRef z As Double) As Boolean
678     Dim swSommet As SldWorks.Vertex
679     Dim retval As Object
680     Dim xyz(2) As Double
681     swSommet = Me.SwArete.GetStartVertex()
682     If swSommet Is Nothing Then Return False
683     retval = swSommet.GetPoint()
684     x = retval(0)
685     y = retval(1)
686     z = retval(2)
687     Return True
688     End Function
689    
690     Public Function GetEndPoint() As Double()
691     Dim swSommet As SldWorks.Vertex
692     Dim retval As Object
693     Dim xyz(2) As Double
694     swSommet = Me.SwArete.GetEndVertex()
695     If swSommet Is Nothing Then Return Nothing
696     retval = swSommet.GetPoint()
697     xyz = retval
698     Return xyz
699     End Function
700    
701     ''' <summary>
702     ''' Renvoie les coordonnées du point de fin
703     ''' </summary>
704     ''' <returns>Faux si le sommet n'esiste pas</returns>
705     ''' <remarks></remarks>
706     Public Function GetEndPoint(ByRef x As Double, ByRef y As Double, ByRef z As Double) As Boolean
707     Dim swSommet As SldWorks.Vertex
708     Dim retval As Object
709     Dim xyz(2) As Double
710     swSommet = Me.SwArete.GetEndVertex()
711     If swSommet Is Nothing Then Return False
712     retval = swSommet.GetPoint()
713     x = retval(0)
714     y = retval(1)
715     z = retval(2)
716     Return True
717     End Function
718    
719    
720    
721    
722    
723    
724    
725    
726    
727    
728    
729    
730    
731     End Class