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

# Content
1 Imports SolidWorks.Interop
2 Imports SolidWorks.Interop.swconst
3 Imports SolidWorks.Interop.swpublished
4
5 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 Public Sub New(ByRef arete As SldWorks.Edge, Optional ByVal tip As Integer = 0)
26 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 swArete.Display(Largeur, Rouge, Vert, Bleu, True)
286 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 attr = Intersections.DefAttrDoublon.CreateInstance5(swModel, swArete, nom, 0, 2) ' 0 = swThisconfig
316 If attr Is Nothing Then Numero += 1
317 Loop
318
319 ParamMaitre = attr.GetParameter("Maitre")
320 paramSens = attr.GetParameter("Sens")
321 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 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 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 swArete.GetCurve()
469 vp = swArete.GetCurveParams2()
470 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 swArete.GetCurve()
482 vp = swArete.GetCurveParams2()
483 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 ' le pointmilieu est identique
620 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 sommet = swArete.GetStartVertex()
639
640 If sommet IsNot Nothing Then
641 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 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