1 |
Imports SolidWorks.Interop
|
2 |
Imports SolidWorks.Interop.swconst
|
3 |
Imports SolidWorks.Interop.swpublished
|
4 |
|
5 |
Module Commun
|
6 |
|
7 |
Public Const Pi As Double = 3.1415926535897931
|
8 |
Public Epsilon As Double = 0.000000001 'à changer en fonction du type d'unité utilisé
|
9 |
|
10 |
Public Imax As Double = 1 ' valeur maximale de l'inertie.
|
11 |
Public Amax As Double = 1000 ' et de l'aire
|
12 |
|
13 |
Public NBAreteDoublon As Integer ' sais pas où d'autre ne peut mémoriser ce nombre...
|
14 |
|
15 |
Public swApp As SldWorks.SldWorks
|
16 |
Public swPart As SldWorks.PartDoc
|
17 |
Public swModel As SldWorks.ModelDoc2
|
18 |
|
19 |
Public lst_AreteVolume As New Collections.ObjectModel.Collection(Of SlyAreteVol) ' liste de courbes appartenant au volume
|
20 |
Public lst_AreteCoque As New Collections.ObjectModel.Collection(Of SlyAreteCoque) ' liste de courbes appartenant aux coques
|
21 |
Public lst_AretePoutre As New Collections.ObjectModel.Collection(Of SlyAretePoutre) ' liste de courbe libres
|
22 |
Public lst_FaceVolume As New Collections.Generic.List(Of SlyFaceVolume) ' liste de faces appartenant au volume
|
23 |
Public lst_FaceCoque As New Collections.ObjectModel.Collection(Of SlyFaceCoque) ' liste de face libres
|
24 |
Public lst_SommetVolume As New Collections.ObjectModel.Collection(Of SlySommetVolume)
|
25 |
Public lst_SommetCoque As New Collections.ObjectModel.Collection(Of SlySommetCoque)
|
26 |
Public lst_sommetPoutre As New Collections.ObjectModel.Collection(Of SlySommetPoutre)
|
27 |
|
28 |
Public ENG As Double
|
29 |
Private NameFichierPog As String
|
30 |
|
31 |
Public lst_AreteDoublon As New Collection
|
32 |
|
33 |
Public OptionMettreNoteIntersection As Boolean = False
|
34 |
|
35 |
|
36 |
Public Structure sectionPoutre
|
37 |
Dim nom As String
|
38 |
Dim I1 As Double
|
39 |
Dim I2 As Double
|
40 |
Dim D1 As Double
|
41 |
Dim D2 As Double
|
42 |
Dim D3 As Double
|
43 |
Dim D4 As Double
|
44 |
Dim D5 As Double
|
45 |
Dim D6 As Double
|
46 |
Dim Aire As Double
|
47 |
End Structure
|
48 |
|
49 |
|
50 |
|
51 |
Public Enum tipe_e
|
52 |
Volume = 0
|
53 |
coque = 1
|
54 |
poutre = 2
|
55 |
MiniPoutre = 3
|
56 |
End Enum
|
57 |
|
58 |
''' <summary>
|
59 |
''' L'écart nodal Global (ENG).
|
60 |
''' </summary>
|
61 |
''' <value></value>
|
62 |
''' <returns></returns>
|
63 |
''' <remarks>Doit être mémorisé ici pour pouvoir l'utiliser partout...</remarks>
|
64 |
Public Property ÉcartNodal() As Double
|
65 |
Get
|
66 |
Return ENG
|
67 |
End Get
|
68 |
Set(ByVal value As Double)
|
69 |
ENG = value
|
70 |
End Set
|
71 |
End Property
|
72 |
|
73 |
Public Property NomFichierPog() As String
|
74 |
Get
|
75 |
Return NameFichierPog
|
76 |
End Get
|
77 |
Set(ByVal value As String)
|
78 |
NameFichierPog = value
|
79 |
End Set
|
80 |
End Property
|
81 |
|
82 |
|
83 |
Public Sub GenererListes(Optional ByVal ChercheAttribut As Boolean = True)
|
84 |
' sub qui créé les entités Sly... et le met dans les listes
|
85 |
|
86 |
Dim vBodies As Object
|
87 |
Dim swBody As SldWorks.Body2
|
88 |
Dim v As Integer
|
89 |
Dim swFace As SldWorks.Face2
|
90 |
Dim swLoop As SldWorks.Loop2
|
91 |
Dim swCoArete As SldWorks.CoEdge
|
92 |
Dim swArete As SldWorks.Edge
|
93 |
Dim swSommet1 As SldWorks.Vertex
|
94 |
Dim swSommet2 As SldWorks.Vertex
|
95 |
'Dim nouveau As Boolean ' bit qui dit si on est entrain d'updater (false) ou si on recommence du début (true)
|
96 |
|
97 |
' on doit commencer par vider les listes, sinon on peut travailler sur les listes d'un autre fichier...
|
98 |
' ne vérifie plus si on update ou si on recommence, ce n'est plus nécessaire.
|
99 |
Intersections.RegisterAttribut()
|
100 |
|
101 |
videliste()
|
102 |
Call SuperFace.reinitialiser() ' remet les compteurs à 0
|
103 |
Call SuperArete.reinitialiser()
|
104 |
Call SuperSommet.reinitialiser()
|
105 |
|
106 |
vBodies = swPart.GetBodies2(swconst.swBodyType_e.swSolidBody, True)
|
107 |
If Not vBodies Is Nothing Then
|
108 |
For v = 0 To UBound(vBodies)
|
109 |
swBody = vBodies(v)
|
110 |
swFace = swBody.GetFirstFace
|
111 |
|
112 |
Do While Not swFace Is Nothing
|
113 |
If trouver(swFace, tipe_e.Volume) Is Nothing Then
|
114 |
Dim slyface As New SlyFaceVolume(swFace)
|
115 |
lst_FaceVolume.Add(slyface)
|
116 |
End If
|
117 |
|
118 |
|
119 |
swLoop = swFace.GetFirstLoop
|
120 |
Do While Not swLoop Is Nothing
|
121 |
|
122 |
swCoArete = swLoop.GetFirstCoEdge
|
123 |
Dim coa As Integer
|
124 |
For coa = 0 To swLoop.GetEdgeCount - 1
|
125 |
|
126 |
swArete = swCoArete.GetEdge
|
127 |
If (Not Ignorer(swArete)) Then
|
128 |
If trouver(swArete, tipe_e.Volume, True) Is Nothing Then
|
129 |
Dim slyArete As New SlyAreteVol(swArete)
|
130 |
lst_AreteVolume.Add(slyArete)
|
131 |
End If
|
132 |
|
133 |
swSommet1 = swArete.GetStartVertex
|
134 |
If IsNothing(swSommet1) Then
|
135 |
'MsgBox("On a une courbe sans sommet")
|
136 |
Else
|
137 |
If (trouver(swSommet1, tipe_e.Volume) Is Nothing) Then
|
138 |
Dim slySommet As New SlySommetVolume(swSommet1)
|
139 |
lst_SommetVolume.Add(slySommet)
|
140 |
End If
|
141 |
|
142 |
swSommet2 = swArete.GetEndVertex
|
143 |
If (trouver(swSommet2, tipe_e.Volume) Is Nothing) Then
|
144 |
Dim slySommet As New SlySommetVolume(swSommet2)
|
145 |
lst_SommetVolume.Add(slySommet)
|
146 |
End If
|
147 |
End If
|
148 |
|
149 |
swCoArete = swCoArete.GetNext
|
150 |
End If
|
151 |
Next coa ' fin de loop sur les coaretes
|
152 |
|
153 |
swLoop = swLoop.GetNext
|
154 |
Loop ' fin loop sur loop
|
155 |
|
156 |
swFace = swFace.GetNextFace()
|
157 |
Loop ' fin loop sur faces
|
158 |
Next v ' next volume
|
159 |
End If ' s'il y a un corps (ou plus) on entre dans la boucle, sinon on continue sur les coques et poutres
|
160 |
|
161 |
|
162 |
|
163 |
' on fait le tour des features pour avoir les poutres et les coques
|
164 |
Dim feat As SldWorks.Feature
|
165 |
Dim vSupprime As Object
|
166 |
Dim bSupprime As Boolean
|
167 |
Dim ent As SldWorks.Entity
|
168 |
Dim attr As SldWorks.Attribute
|
169 |
|
170 |
|
171 |
feat = swPart.FirstFeature
|
172 |
|
173 |
Do While Not feat Is Nothing
|
174 |
|
175 |
vSupprime = feat.IsSuppressed
|
176 |
bSupprime = CBool(vSupprime)
|
177 |
If Not bSupprime Then ' on vérifie que l'entité est pas supprimée
|
178 |
Try
|
179 |
Select Case feat.GetTypeName
|
180 |
Case "CompositeCurve", "3DSplineCurve" ', "Helix" 'le feature est une courbe libre
|
181 |
|
182 |
Dim refCourbe As sldworks.ReferenceCurve
|
183 |
|
184 |
refCourbe = feat.GetSpecificFeature2
|
185 |
swArete = refCourbe.GetFirstSegment
|
186 |
Do While Not swArete Is Nothing
|
187 |
|
188 |
If (Not Ignorer(swArete)) Then
|
189 |
Dim slyArete As SlyAretePoutre
|
190 |
slyArete = trouver(swArete, tipe_e.poutre)
|
191 |
|
192 |
If slyArete Is Nothing Then
|
193 |
slyArete = New SlyAretePoutre(swArete)
|
194 |
lst_AretePoutre.Add(slyArete)
|
195 |
End If
|
196 |
|
197 |
swSommet1 = swArete.GetStartVertex
|
198 |
If IsNothing(swSommet1) Then
|
199 |
'MsgBox("On a une courbe sans sommet")
|
200 |
Else
|
201 |
If trouver(swSommet1, tipe_e.poutre) Is Nothing Then
|
202 |
Dim slySommet As New SlySommetPoutre(swSommet1)
|
203 |
lst_sommetPoutre.Add(slySommet)
|
204 |
End If
|
205 |
|
206 |
swSommet2 = swArete.GetEndVertex
|
207 |
If trouver(swSommet2, tipe_e.poutre) Is Nothing Then
|
208 |
Dim slySommet As New SlySommetPoutre(swSommet2)
|
209 |
lst_sommetPoutre.Add(slySommet)
|
210 |
End If
|
211 |
End If
|
212 |
|
213 |
' on cherche s'il n'y aurait pas un attribut sur la poutre
|
214 |
'If ChercheAttribut Then
|
215 |
Try
|
216 |
ent = swArete
|
217 |
attr = ent.FindAttribute(Intersections.DefAttrRCP1, 0)
|
218 |
slyArete.swAttribute = attr
|
219 |
If Left(attr.GetName, 4) = "Mini" Then swArete.Display(2, 1, 0, 1, True) Else swArete.Display(2, 0, 1, 0, True)
|
220 |
'Dim xyz() As Double
|
221 |
'xyz = slyarete.GetPoint3
|
222 |
'slyarete.X3 = xyz(0)
|
223 |
'slyarete.y3 = xyz(1)
|
224 |
'slyarete.z3 = xyz(2)
|
225 |
Catch ex As Exception
|
226 |
MsgBox("Une poutre sans attributs est détectée dans le modèle!")
|
227 |
End Try
|
228 |
|
229 |
End If
|
230 |
|
231 |
swArete = Nothing
|
232 |
swArete = refCourbe.GetNextSegment
|
233 |
|
234 |
Loop
|
235 |
|
236 |
|
237 |
Case "PLine", "ExtruRefSurface", "RevolvRefSurf", "SweepRefSurface", "BlendRefSurface", "OffsetRefSurface", "ExtendRefSurface", "PlanarSurface", "RadiateRefSurface", "MidRefSurface", "FillRefSurface", "RefSurface"
|
238 |
|
239 |
' le feature est une surface libre, certains types de surface n'ont pas été gardés car
|
240 |
' leur face appartient à un autre feature ou parce qu'il sont impossible à retrouver dans un multimodèle
|
241 |
|
242 |
|
243 |
' Attention, si c'est une PLine ça peut prendre un volume
|
244 |
|
245 |
Dim body As sldworks.Body2
|
246 |
Dim vFaces As Object
|
247 |
Dim vf As Object
|
248 |
Dim slyFace As SlyFaceCoque
|
249 |
Dim ShellBody As sldworks.Body2
|
250 |
|
251 |
vFaces = feat.GetFaces
|
252 |
If Not vFaces Is Nothing Then
|
253 |
For Each vf In vFaces
|
254 |
swFace = vf
|
255 |
ShellBody = swFace.GetBody : If ShellBody.Visible = False Then Continue For
|
256 |
body = swFace.GetBody
|
257 |
|
258 |
|
259 |
If Not (body.GetType = swconst.swBodyType_e.swSolidBody) Then ' si le body est quelquechose de solide alors on a le feature Pline d'un solide....
|
260 |
|
261 |
slyFace = trouver(swFace, tipe_e.coque)
|
262 |
If slyFace Is Nothing Then
|
263 |
|
264 |
slyFace = New SlyFaceCoque(swFace)
|
265 |
lst_FaceCoque.Add(slyFace)
|
266 |
End If
|
267 |
|
268 |
|
269 |
' ***** détection des attributs des coques
|
270 |
attr = Nothing
|
271 |
If ChercheAttribut Then
|
272 |
Try
|
273 |
ent = swFace
|
274 |
attr = ent.FindAttribute(Intersections.DefAttrRCCoque, 0)
|
275 |
slyFace.swAttribute = attr
|
276 |
Catch ex As Exception
|
277 |
MsgBox("Une coque sans attributs est détectée dans le modèle!")
|
278 |
End Try
|
279 |
|
280 |
If IsNothing(attr) Then ' on a trouvé un attribut de coque
|
281 |
'il n'y a pas encore d'attributs sur cette coque.
|
282 |
'MsgBox("Le putain d'attribut n'a pas été détecté!")
|
283 |
End If
|
284 |
End If
|
285 |
|
286 |
swLoop = swFace.GetFirstLoop
|
287 |
Do While Not swLoop Is Nothing
|
288 |
swCoArete = swLoop.GetFirstCoEdge
|
289 |
Dim coa As Integer
|
290 |
For coa = 0 To swLoop.GetEdgeCount - 1
|
291 |
|
292 |
swArete = swCoArete.GetEdge
|
293 |
|
294 |
If (Not Ignorer(swArete)) Then
|
295 |
If trouver(swArete, tipe_e.coque) Is Nothing Then
|
296 |
Dim slyArete As New SlyAreteCoque(swArete)
|
297 |
lst_AreteCoque.Add(slyArete)
|
298 |
End If
|
299 |
|
300 |
swSommet1 = swArete.GetStartVertex
|
301 |
If IsNothing(swSommet1) Then
|
302 |
'MsgBox("On a une courbe sans sommet")
|
303 |
Else
|
304 |
If trouver(swSommet1, tipe_e.coque) Is Nothing Then
|
305 |
Dim slySommet As New SlySommetCoque(swSommet1)
|
306 |
lst_SommetCoque.Add(slySommet)
|
307 |
End If
|
308 |
|
309 |
swSommet2 = swArete.GetEndVertex
|
310 |
If trouver(swSommet2, tipe_e.coque) Is Nothing Then
|
311 |
Dim slySommet As New SlySommetCoque(swSommet2)
|
312 |
lst_SommetCoque.Add(slySommet)
|
313 |
End If
|
314 |
End If
|
315 |
|
316 |
swCoArete = swCoArete.GetNext
|
317 |
End If
|
318 |
Next coa ' fin de loop sur les coaretes
|
319 |
|
320 |
swLoop = swLoop.GetNext
|
321 |
Loop ' fin loop sur loop
|
322 |
Else
|
323 |
'MsgBox("On vient de retirer une PLine appartenant à un volume!", MsgBoxStyle.Exclamation)
|
324 |
End If
|
325 |
Next vf
|
326 |
End If
|
327 |
|
328 |
Case Else ' n'est pas un feature intéressant...
|
329 |
' rien
|
330 |
End Select
|
331 |
Catch
|
332 |
MsgBox("Générer liste n'a pas marché sur le feature: " & feat.Name)
|
333 |
End Try
|
334 |
|
335 |
End If ' fin du if sur la suppression du feature
|
336 |
feat = feat.GetNextFeature
|
337 |
Loop
|
338 |
|
339 |
End Sub
|
340 |
|
341 |
Public Sub MettreNoms()
|
342 |
' place les noms des SlyClasses sur les entités puis sauvegarde
|
343 |
|
344 |
'Debug.Write(" Title = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoTitle))
|
345 |
'Debug.Write(" Subject = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoSubject))
|
346 |
'Debug.Write(" Author = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoAuthor))
|
347 |
'Debug.Write(" Keywords = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoKeywords))
|
348 |
'Debug.Write(" Comment = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoComment))
|
349 |
'Debug.Write(" SavedBy = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoSavedBy))
|
350 |
'Debug.Write(" CreateDate = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoCreateDate))
|
351 |
'Debug.Write(" SaveDate = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoSaveDate))
|
352 |
'Debug.Write(" CreateDate2 = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoCreateDate2))
|
353 |
'Debug.Write(" SaveDate2 = " + swModel.SummaryInfo(SwConst.swSummInfoField_e.swSumInfoSaveDate2))
|
354 |
Static saveModel As SldWorks.ModelDoc2
|
355 |
Static passe As Boolean = False
|
356 |
|
357 |
If (swModel Is saveModel) And (passe = True) Then
|
358 |
Exit Sub ' faudrait pas passer 2 fois dans le mettrenoms...
|
359 |
Else
|
360 |
saveModel = swModel
|
361 |
End If
|
362 |
passe = True
|
363 |
|
364 |
|
365 |
'VideNom() ' on commence par enlever les noms (on suppose qu'il n'y en a pas déjà...)
|
366 |
|
367 |
Dim s1 As SlyAreteVol
|
368 |
For Each s1 In lst_AreteVolume
|
369 |
s1.SaveNom()
|
370 |
Next
|
371 |
|
372 |
Dim s2 As SlyAreteCoque
|
373 |
For Each s2 In lst_AreteCoque
|
374 |
s2.SaveNom()
|
375 |
Next
|
376 |
|
377 |
Dim s3 As SlyAretePoutre
|
378 |
For Each s3 In lst_AretePoutre
|
379 |
s3.SaveNom()
|
380 |
Next
|
381 |
|
382 |
Dim s4 As SlyFaceVolume
|
383 |
For Each s4 In lst_FaceVolume
|
384 |
s4.SaveNom()
|
385 |
Next
|
386 |
|
387 |
Dim s5 As SlyFaceCoque
|
388 |
For Each s5 In lst_FaceCoque
|
389 |
s5.SaveNom()
|
390 |
Next
|
391 |
|
392 |
Dim s6 As SlySommetVolume
|
393 |
For Each s6 In lst_SommetVolume
|
394 |
s6.SaveNom()
|
395 |
Next
|
396 |
|
397 |
Dim s7 As SlySommetCoque
|
398 |
For Each s7 In lst_SommetCoque
|
399 |
s7.SaveNom()
|
400 |
Next
|
401 |
|
402 |
Dim s8 As SlySommetPoutre
|
403 |
For Each s8 In lst_sommetPoutre
|
404 |
s8.SaveNom()
|
405 |
Next
|
406 |
|
407 |
End Sub
|
408 |
|
409 |
Public Sub videliste(Of T)(ByRef liste As Collections.Generic.List(Of T))
|
410 |
liste.Clear()
|
411 |
End Sub
|
412 |
|
413 |
|
414 |
Public Sub videliste()
|
415 |
lst_AreteVolume.Clear()
|
416 |
lst_AreteCoque.Clear()
|
417 |
lst_AretePoutre.Clear()
|
418 |
lst_FaceVolume.Clear()
|
419 |
lst_FaceCoque.Clear()
|
420 |
lst_SommetVolume.Clear()
|
421 |
lst_SommetCoque.Clear()
|
422 |
lst_SommetCoque.Clear()
|
423 |
lst_sommetPoutre.Clear()
|
424 |
|
425 |
End Sub
|
426 |
|
427 |
Public Overloads Function getNom(ByRef swEnt As sldworks.Entity) As String
|
428 |
getNom = swPart.GetEntityName(swEnt)
|
429 |
End Function
|
430 |
|
431 |
Public Overloads Function getNom(ByRef swFace As sldworks.Face2) As String
|
432 |
Dim swEnt As sldworks.Entity
|
433 |
swEnt = swFace
|
434 |
getNom = swPart.GetEntityName(swEnt)
|
435 |
End Function
|
436 |
|
437 |
Public Overloads Function getNom(ByRef swArete As sldworks.Edge) As String
|
438 |
Dim swEnt As sldworks.Entity
|
439 |
swEnt = swArete
|
440 |
getNom = swPart.GetEntityName(swEnt)
|
441 |
End Function
|
442 |
|
443 |
Public Overloads Function getNom(ByRef swSommet As sldworks.Vertex) As String
|
444 |
Dim swEnt As sldworks.Entity
|
445 |
swEnt = swSommet
|
446 |
getNom = swPart.GetEntityName(swEnt)
|
447 |
End Function
|
448 |
|
449 |
Public Sub GererDossiers(ByRef nomDossier As String, ByRef NomFeature As String)
|
450 |
' déplace un feature dans un dossier ( et créé le dossier si ce n'est pas déjà fait)
|
451 |
|
452 |
Static copienom As String
|
453 |
Dim swFeat As SldWorks.Feature
|
454 |
Dim ok As Boolean
|
455 |
Dim j As Integer
|
456 |
|
457 |
If Not StrComp(nomDossier, copienom) Then
|
458 |
' on commence par vérifier qu'il n'est pas déjà créé
|
459 |
|
460 |
swFeat = swModel.FirstFeature
|
461 |
|
462 |
Do While Not swFeat Is Nothing
|
463 |
If swFeat.GetTypeName = "FtrFolder" And swFeat.Name = nomDossier Then GoTo suite
|
464 |
swFeat = swFeat.GetNextFeature
|
465 |
Loop
|
466 |
|
467 |
'on mémorise tout ce qui est sélectionné
|
468 |
Dim lst_selection As New Collection
|
469 |
Dim selMgr As sldworks.SelectionMgr
|
470 |
selMgr = swModel.SelectionManager
|
471 |
|
472 |
For j = 1 To selMgr.GetSelectedObjectCount
|
473 |
lst_selection.Add(selMgr.GetSelectedObject5(j))
|
474 |
Next j
|
475 |
swModel.ClearSelection2(True)
|
476 |
|
477 |
|
478 |
Dim folder As SldWorks.Feature
|
479 |
Dim featMgr As SldWorks.FeatureManager
|
480 |
featMgr = swModel.FeatureManager
|
481 |
swModel.ClearSelection2(True)
|
482 |
|
483 |
' on doit mettre le folder à la fin sinon le feature risque d'être avant un parent
|
484 |
j = 0
|
485 |
swFeat = swModel.FeatureByPositionReverse(0)
|
486 |
While Not ok
|
487 |
j = j + 1
|
488 |
If swFeat.GetTypeName = "ProfileFeature" Or swFeat.GetTypeName = "3DProfileFeature" Then swFeat = swModel.FeatureByPositionReverse(j) Else ok = True
|
489 |
End While
|
490 |
|
491 |
swFeat.Select(False)
|
492 |
folder = featMgr.InsertFeatureTreeFolder2(1)
|
493 |
If Not folder Is Nothing Then folder.Name = nomDossier
|
494 |
folder = Nothing
|
495 |
swPart.ReorderFeature(nomDossier, swFeat.Name)
|
496 |
|
497 |
folder = Nothing
|
498 |
|
499 |
' on resélectionne les objets
|
500 |
swModel.ClearSelection2(True)
|
501 |
For j = 1 To lst_selection.Count
|
502 |
lst_selection.Item(j).select(True)
|
503 |
Next j
|
504 |
|
505 |
swPart.ReorderFeature(NomFeature, nomDossier)
|
506 |
End If
|
507 |
|
508 |
'1 - le dossier est créé ou a déjà été créé.
|
509 |
'2 - on redéplace le dossier à la fin.
|
510 |
suite:
|
511 |
swFeat = swModel.FeatureByPositionReverse(0)
|
512 |
swFeat.Select(False)
|
513 |
j = 0
|
514 |
While Not ok
|
515 |
j = j + 1
|
516 |
If swFeat.GetTypeName = "ProfileFeature" Or swFeat.GetTypeName = "3DProfileFeature" Then swFeat = swModel.FeatureByPositionReverse(j) Else ok = True
|
517 |
End While
|
518 |
swPart.ReorderFeature(nomDossier, swFeat.Name)
|
519 |
' 3- on déplace le feature dans le dossier
|
520 |
|
521 |
swPart.ReorderFeature(NomFeature, nomDossier)
|
522 |
'swModel.EditRebuild3()
|
523 |
|
524 |
|
525 |
End Sub
|
526 |
|
527 |
Public Overloads Function trouver(ByRef swface As sldworks.Face2, ByRef tipe As Commun.tipe_e) As Object
|
528 |
Dim face As sldworks.Face2
|
529 |
|
530 |
Select Case tipe
|
531 |
Case tipe_e.Volume
|
532 |
Dim sface As SlyFaceVolume
|
533 |
For Each sface In lst_FaceVolume
|
534 |
'If swface Is sface.swFace Then trouver = sface : Exit Function
|
535 |
|
536 |
For Each face In sface.lst_Faces
|
537 |
If face Is swface Then Return sface
|
538 |
Next
|
539 |
|
540 |
Next sface
|
541 |
|
542 |
Case tipe_e.coque
|
543 |
Dim sface As SlyFaceCoque
|
544 |
For Each sface In lst_FaceCoque
|
545 |
'If swface Is sface.swFace Then trouver = sface : Exit Function
|
546 |
For Each face In sface.lst_Faces
|
547 |
If face Is swface Then Return sface
|
548 |
Next
|
549 |
Next sface
|
550 |
End Select
|
551 |
Return Nothing ' devrait pas passer par ici...
|
552 |
End Function
|
553 |
|
554 |
Public Overloads Function trouver(ByRef swEnt As sldworks.Entity) As Object
|
555 |
Dim face As sldworks.Face2
|
556 |
Select Case swEnt.GetType()
|
557 |
Case swconst.swSelectType_e.swSelFACES
|
558 |
Dim swface As sldworks.Face2
|
559 |
Dim f As SlyFaceVolume
|
560 |
swface = swEnt
|
561 |
For Each f In lst_FaceVolume
|
562 |
'If f.SwFace Is swface Then Return f
|
563 |
For Each face In f.lst_Faces
|
564 |
If face Is swface Then Return f
|
565 |
Next
|
566 |
Next
|
567 |
Dim f2 As SlyFaceCoque
|
568 |
For Each f2 In lst_FaceCoque
|
569 |
'If f2.swFace Is swface Then Return f2
|
570 |
For Each face In f2.lst_Faces
|
571 |
If face Is swface Then Return f2
|
572 |
Next
|
573 |
Next
|
574 |
|
575 |
|
576 |
Case swconst.swSelectType_e.swSelEDGES
|
577 |
Dim swArete As sldworks.Edge
|
578 |
swArete = swEnt
|
579 |
Dim test As Object
|
580 |
test = Commun.trouver(swArete, tipe_e.Volume)
|
581 |
If Not test Is Nothing Then Return test
|
582 |
test = Commun.trouver(swArete, tipe_e.coque)
|
583 |
If Not test Is Nothing Then Return test
|
584 |
test = Commun.trouver(swArete, tipe_e.poutre)
|
585 |
If Not test Is Nothing Then Return test
|
586 |
|
587 |
|
588 |
|
589 |
Case swconst.swSelectType_e.swSelVERTICES
|
590 |
Dim swSommet As sldworks.Vertex
|
591 |
swSommet = swEnt
|
592 |
|
593 |
Dim s1 As SlySommetVolume
|
594 |
For Each s1 In lst_SommetVolume
|
595 |
If s1.swSommet Is swSommet Then Return s1
|
596 |
Next
|
597 |
|
598 |
Dim s2 As SlySommetCoque
|
599 |
For Each s2 In lst_SommetCoque
|
600 |
If s2.swSommet Is swSommet Then Return s2
|
601 |
Next
|
602 |
|
603 |
Dim s3 As SlySommetPoutre
|
604 |
For Each s3 In lst_sommetPoutre
|
605 |
If s3.swSommet Is swSommet Then Return s3
|
606 |
Next
|
607 |
|
608 |
End Select
|
609 |
|
610 |
MsgBox("Entité non trouvée, dans commun.trouver")
|
611 |
Return Nothing
|
612 |
End Function
|
613 |
|
614 |
''' <summary>
|
615 |
''' Function qui trouve et retourne le pointeur d'une SlyArete arète si elle existe déjà
|
616 |
''' </summary>
|
617 |
''' <param name="swArete">L'arète à retrouver</param>
|
618 |
''' <param name="tipe">De quel type d'arrète il sagit</param>
|
619 |
''' <param name="Genlist">Une option pour accélérer le calcul dans certaines circonstances</param>
|
620 |
''' <returns>Le pointeur sur l'entité ou Nothing si elle est pas trouvée</returns>
|
621 |
''' <remarks></remarks>
|
622 |
Public Overloads Function trouver(ByRef swArete As sldworks.Edge, ByRef tipe As Commun.tipe_e, Optional ByRef Genlist As Boolean = False) As Object
|
623 |
|
624 |
Select Case tipe
|
625 |
Case tipe_e.Volume
|
626 |
Dim s As SlyAreteVol
|
627 |
For Each s In lst_AreteVolume
|
628 |
If swArete Is s.swArete Then Return s
|
629 |
Next s
|
630 |
|
631 |
' ok, si on est ici c'est que l'on a pas trouvé l'arètequi nous intéresse, le pointeur a changé un peu...
|
632 |
If Not Genlist Then
|
633 |
Dim Testarete As New SuperArete(swArete, True)
|
634 |
For Each s In lst_AreteVolume
|
635 |
If Testarete.comparer(s.swArete) Then Return s
|
636 |
Next s
|
637 |
End If
|
638 |
|
639 |
Case tipe_e.coque
|
640 |
Dim sArete As SlyAreteCoque
|
641 |
For Each sArete In lst_AreteCoque
|
642 |
If swArete Is sArete.swArete Then trouver = sArete : Exit Function
|
643 |
Next sArete
|
644 |
|
645 |
Case tipe_e.poutre
|
646 |
For Each sa As SlyAretePoutre In lst_AretePoutre
|
647 |
If sa.swArete Is swArete Then Return sa
|
648 |
Next
|
649 |
|
650 |
|
651 |
Case tipe_e.MiniPoutre
|
652 |
MsgBox("Erreur, on ne devrait plus passer par ici!")
|
653 |
'Dim sArete As SlyAretePoutre
|
654 |
'Dim i As Integer
|
655 |
'For i = 1 To lst_MiniPoutre.Count
|
656 |
' sArete = lst_MiniPoutre.Item(i)
|
657 |
' If swArete Is sArete.swArete Then trouver = sArete : Exit Function
|
658 |
'Next i
|
659 |
End Select
|
660 |
Return Nothing
|
661 |
End Function
|
662 |
|
663 |
Public Overloads Function trouver(ByRef Arete As SuperArete, ByRef tipe As Commun.tipe_e, Optional ByRef Genlist As Boolean = False) As Object
|
664 |
|
665 |
Select Case tipe
|
666 |
Case tipe_e.Volume
|
667 |
' ok, si on est ici c'est que l'on a pas trouvé l'arètequi nous intéresse, le pointeur a changé un peu...
|
668 |
If Not Genlist Then
|
669 |
Dim s As SlyAreteVol
|
670 |
For Each s In lst_AreteVolume
|
671 |
If Arete.comparer(s.swArete) Then Return s
|
672 |
Next s
|
673 |
End If
|
674 |
|
675 |
Case tipe_e.coque
|
676 |
Dim s As SlyAreteCoque
|
677 |
For Each s In lst_AreteCoque
|
678 |
If Arete.comparer(s.swArete) Then Return s
|
679 |
Next s
|
680 |
End Select
|
681 |
|
682 |
Return Nothing
|
683 |
End Function
|
684 |
|
685 |
Public Overloads Function trouver(ByRef swSommet As sldworks.Vertex, ByRef tipe As Commun.tipe_e) As Object
|
686 |
|
687 |
Select Case tipe
|
688 |
Case tipe_e.Volume
|
689 |
Dim sSommet As SlySommetVolume
|
690 |
For Each sSommet In lst_SommetVolume
|
691 |
If swSommet Is sSommet.swSommet Then trouver = sSommet : Exit Function
|
692 |
Next sSommet
|
693 |
|
694 |
Case tipe_e.coque
|
695 |
Dim sSommet As SlySommetCoque
|
696 |
For Each sSommet In lst_SommetCoque
|
697 |
If swSommet Is sSommet.swSommet Then trouver = sSommet : Exit Function
|
698 |
Next sSommet
|
699 |
|
700 |
Case tipe_e.poutre
|
701 |
Dim sSommet As SlySommetPoutre
|
702 |
For Each sSommet In lst_sommetPoutre
|
703 |
If swSommet Is sSommet.swSommet Then trouver = sSommet : Exit Function
|
704 |
Next sSommet
|
705 |
|
706 |
End Select
|
707 |
Return Nothing
|
708 |
End Function
|
709 |
|
710 |
Public Sub VideNom()
|
711 |
' procédure qui retire le nom écrit sur les entités de solidworks
|
712 |
|
713 |
Dim vNamedEntity As Object = Nothing
|
714 |
Dim swEnt As SldWorks.Entity
|
715 |
Dim retval As Boolean
|
716 |
Dim i As Integer
|
717 |
|
718 |
'If MsgBox("Essayer de vider les noms?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub
|
719 |
|
720 |
Try
|
721 |
'MsgBox(swPart.MaterialIdName)
|
722 |
vNamedEntity = swPart.GetNamedEntities
|
723 |
Catch
|
724 |
Dim nb As String
|
725 |
Try
|
726 |
nb = CStr(swPart.GetNamedEntitiesCount())
|
727 |
Catch
|
728 |
nb = "??"
|
729 |
End Try
|
730 |
|
731 |
MsgBox("Impossibilité d'obtenir la liste des entités déjà nomées. On continue pareil..." & vbCr & "Il y a " & "??" & " entités qui ont un nom", MsgBoxStyle.Exclamation, "Sérieux problème!")
|
732 |
End Try
|
733 |
|
734 |
|
735 |
If IsNothing(vNamedEntity) Then Exit Sub
|
736 |
For i = 0 To UBound(vNamedEntity)
|
737 |
swEnt = vNamedEntity(i)
|
738 |
Debug.Write(swPart.GetEntityName(swEnt))
|
739 |
retval = swPart.DeleteEntityName(swEnt)
|
740 |
If retval = False Then Debug.Write("Incapable d'effacer l'entité: " & swPart.GetEntityName(swEnt)) ' MsgBox(" Incapable d'effacer l'entité: " & swPart.GetEntityName(swEnt), vbCritical, "Problème dans VideNom()")
|
741 |
Next i
|
742 |
End Sub
|
743 |
|
744 |
'function qui transfert les coordonnées du modèle en coodronnées pour le sketch
|
745 |
Public Function TransfertModelSketch(ByRef sketch As SldWorks.Sketch, ByRef p() As Double) As Double()
|
746 |
Dim MathUtil As SldWorks.MathUtility
|
747 |
Dim MathP As SldWorks.MathPoint
|
748 |
Dim MathTrans As SldWorks.MathTransform
|
749 |
Dim p2() As Double
|
750 |
MathUtil = swApp.GetMathUtility
|
751 |
MathP = MathUtil.CreatePoint(p)
|
752 |
|
753 |
MathTrans = sketch.ModelToSketchTransform
|
754 |
MathP = MathP.MultiplyTransform(MathTrans)
|
755 |
p2 = MathP.ArrayData
|
756 |
Return p2
|
757 |
End Function
|
758 |
|
759 |
|
760 |
Public Function TransfertSketchToModel(ByRef sketch As SldWorks.Sketch, ByRef p() As Double) As Double()
|
761 |
Dim MathUtil As SldWorks.MathUtility
|
762 |
Dim MathP As SldWorks.MathPoint
|
763 |
Dim MathTrans As SldWorks.MathTransform
|
764 |
Dim p2() As Double
|
765 |
Dim point(2) As Double
|
766 |
Dim vPoint As Object
|
767 |
MathUtil = swApp.GetMathUtility
|
768 |
point(0) = p(0)
|
769 |
point(1) = p(1)
|
770 |
If UBound(p) = 1 Then point(2) = 0 Else point(2) = p(2)
|
771 |
vPoint = point
|
772 |
MathP = MathUtil.CreatePoint(vPoint)
|
773 |
|
774 |
MathTrans = sketch.ModelToSketchTransform
|
775 |
MathTrans = MathTrans.Inverse
|
776 |
MathP = MathP.MultiplyTransform(MathTrans)
|
777 |
vPoint = MathP.ArrayData
|
778 |
p2 = vPoint
|
779 |
Return p2
|
780 |
End Function
|
781 |
|
782 |
|
783 |
Public Function DistanceMin(ByRef sCoque As SlyFaceCoque, ByRef sVolume As SlyFaceVolume) As Double
|
784 |
Dim swFC As SldWorks.Face2
|
785 |
Dim swFV As SldWorks.Face2
|
786 |
Dim min As Double = 99999999999999
|
787 |
Dim temp As Double
|
788 |
|
789 |
For Each swFC In sCoque.lst_Faces
|
790 |
For Each swFV In sVolume.lst_Faces
|
791 |
temp = swModel.ClosestDistance(swFC, swFV, Nothing, Nothing)
|
792 |
If temp < min Then min = temp
|
793 |
Next
|
794 |
Next
|
795 |
Return min
|
796 |
End Function
|
797 |
|
798 |
|
799 |
|
800 |
|
801 |
Public Overloads Function Distance(ByRef somm As sldworks.Vertex, ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
|
802 |
Dim vpoints As Object
|
803 |
Dim dPoint() As Double
|
804 |
Dim temp As Double
|
805 |
vpoints = somm.GetPoint()
|
806 |
dPoint = vpoints
|
807 |
|
808 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
809 |
Return Math.Sqrt(temp)
|
810 |
|
811 |
End Function
|
812 |
|
813 |
Public Overloads Function Distance(ByRef Arete As sldworks.Edge, ByRef x As Double, ByRef y As Double, ByRef z As Double) As Double
|
814 |
Dim vpoints As Object
|
815 |
Dim dPoint() As Double
|
816 |
Dim temp As Double
|
817 |
vpoints = Arete.GetClosestPointOn(x, y, z)
|
818 |
dPoint = vpoints
|
819 |
|
820 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
821 |
|
822 |
Return Math.Sqrt(temp)
|
823 |
|
824 |
End Function
|
825 |
|
826 |
Public Overloads Function Distance(ByRef Arete As sldworks.Edge, ByRef P() As Double) As Double
|
827 |
Dim vpoints As Object
|
828 |
Dim dPoint() As Double
|
829 |
Dim temp As Double
|
830 |
vpoints = Arete.GetClosestPointOn(P(0), P(1), P(2))
|
831 |
dPoint = vpoints
|
832 |
|
833 |
temp = (dPoint(0) - P(0)) * (dPoint(0) - P(0)) + (dPoint(1) - P(1)) * (dPoint(1) - P(1)) + (dPoint(2) - P(2)) * (dPoint(2) - P(2))
|
834 |
|
835 |
Return Math.Sqrt(temp)
|
836 |
|
837 |
End Function
|
838 |
|
839 |
|
840 |
Public Overloads Function Distance(ByRef Courbe As sldworks.Curve, ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
|
841 |
Dim vpoints As Object
|
842 |
Dim dPoint() As Double
|
843 |
Dim temp As Double
|
844 |
vpoints = Courbe.GetClosestPointOn(x, y, z)
|
845 |
dPoint = vpoints
|
846 |
|
847 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
848 |
|
849 |
Return Math.Sqrt(temp)
|
850 |
End Function
|
851 |
|
852 |
Public Overloads Function Distance(ByRef Face As sldworks.Face2, ByVal xyz() As Double) As Double
|
853 |
Return Distance(Face, xyz(0), xyz(1), xyz(2))
|
854 |
End Function
|
855 |
|
856 |
Public Overloads Function Distance(ByRef Face As sldworks.Face2, ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
|
857 |
Dim vpoints As Object
|
858 |
Dim dPoint() As Double
|
859 |
Dim temp As Double
|
860 |
vpoints = Face.GetClosestPointOn(x, y, z)
|
861 |
dPoint = vpoints
|
862 |
|
863 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
864 |
|
865 |
Return Math.Sqrt(temp)
|
866 |
|
867 |
End Function
|
868 |
|
869 |
Public Overloads Function Distance(ByRef Face As SuperFace, ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double
|
870 |
Dim vpoints As Object
|
871 |
Dim dPoint() As Double
|
872 |
Dim temp As Double
|
873 |
vpoints = Face.SwFace.GetClosestPointOn(x, y, z)
|
874 |
dPoint = vpoints
|
875 |
|
876 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
877 |
|
878 |
Return Math.Sqrt(temp)
|
879 |
|
880 |
End Function
|
881 |
|
882 |
|
883 |
Public Overloads Function Distance(ByRef Face As sldworks.Face2, ByRef sommet As sldworks.Vertex) As Double
|
884 |
Dim vpoints As Object
|
885 |
Dim dPoint() As Double
|
886 |
Dim temp As Double
|
887 |
Dim x As Double, y As Double, z As Double
|
888 |
|
889 |
|
890 |
vpoints = sommet.GetPoint()
|
891 |
dPoint = vpoints
|
892 |
x = dPoint(0) : y = dPoint(1) : z = dPoint(2)
|
893 |
|
894 |
vpoints = Face.GetClosestPointOn(x, y, z)
|
895 |
dPoint = vpoints
|
896 |
|
897 |
temp = (dPoint(0) - x) * (dPoint(0) - x) + (dPoint(1) - y) * (dPoint(1) - y) + (dPoint(2) - z) * (dPoint(2) - z)
|
898 |
|
899 |
Return Math.Sqrt(temp)
|
900 |
|
901 |
End Function
|
902 |
|
903 |
|
904 |
Public Overloads Function distance(ByRef s1 As sldworks.Vertex, ByRef s2 As sldworks.Vertex) As Double
|
905 |
|
906 |
Dim vpoints As Object
|
907 |
Dim dPoint() As Double
|
908 |
Dim dPoint2() As Double
|
909 |
Dim temp As Double
|
910 |
|
911 |
vpoints = s1.GetPoint()
|
912 |
dPoint = vpoints
|
913 |
|
914 |
vpoints = s2.GetPoint()
|
915 |
dPoint2 = vpoints
|
916 |
|
917 |
temp = (dPoint(0) - dPoint2(0)) * (dPoint(0) - dPoint2(0)) + (dPoint(1) - dPoint2(1)) * (dPoint(1) - dPoint2(1)) + (dPoint(2) - dPoint2(2)) * (dPoint(2) - dPoint2(2))
|
918 |
Return Math.Sqrt(temp)
|
919 |
|
920 |
End Function
|
921 |
|
922 |
Public Overloads Function Distance(ByRef X1 As Double, ByRef Y1 As Double, ByRef Z1 As Double, ByRef X2 As Double, ByRef Y2 As Double, ByRef Z2 As Double) As Double
|
923 |
Return Math.Sqrt((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2 + (Z2 - Z1) ^ 2)
|
924 |
End Function
|
925 |
|
926 |
|
927 |
Public Overloads Function distance(ByRef P1() As Double, ByRef P2() As Double) As Double
|
928 |
If Not UBound(P1) = 2 And Not UBound(P2) = 2 Then MsgBox("Cette fonction de distance ne marche qu'en 3D pour l'instant")
|
929 |
Return Math.Sqrt((P1(0) - P2(0)) ^ 2 + (P1(1) - P2(1)) ^ 2 + (P1(2) - P2(2)) ^ 2)
|
930 |
End Function
|
931 |
|
932 |
|
933 |
Public Overloads Function distance(ByRef P1() As Double, ByRef s2 As sldworks.Vertex) As Double
|
934 |
|
935 |
Dim vpoints As Object
|
936 |
Dim dPoint() As Double
|
937 |
Dim dPoint2() As Double
|
938 |
Dim temp As Double
|
939 |
|
940 |
|
941 |
dPoint = P1
|
942 |
|
943 |
vpoints = s2.GetPoint()
|
944 |
dPoint2 = vpoints
|
945 |
|
946 |
temp = (dPoint(0) - dPoint2(0)) * (dPoint(0) - dPoint2(0)) + (dPoint(1) - dPoint2(1)) * (dPoint(1) - dPoint2(1)) + (dPoint(2) - dPoint2(2)) * (dPoint(2) - dPoint2(2))
|
947 |
Return Math.Sqrt(temp)
|
948 |
|
949 |
End Function
|
950 |
|
951 |
Public Overloads Function Distance(ByRef s1 As SlySommetPoutre, ByRef s2 As SlySommetCoque) As Double
|
952 |
Return Distance(s1.swSommet, s2.swSommet)
|
953 |
End Function
|
954 |
|
955 |
Public Overloads Function Distance(ByRef s1 As SlySommetPoutre, ByRef s2 As SlySommetVolume) As Double
|
956 |
Return Distance(s1.swSommet, s2.swSommet)
|
957 |
End Function
|
958 |
|
959 |
''' <summary>
|
960 |
''' Distance entre un point d'esquisse et un sommet
|
961 |
''' </summary>
|
962 |
''' <param name="swPoint"></param>
|
963 |
''' <param name="SwSommet"></param>
|
964 |
''' <returns></returns>
|
965 |
''' <remarks></remarks>
|
966 |
Public Overloads Function Distance(ByRef swPoint As sldworks.SketchPoint, ByRef SwSommet As sldworks.Vertex) As Double
|
967 |
Dim P(2) As Double
|
968 |
P(0) = swPoint.X : P(1) = swPoint.Y : P(2) = swPoint.Z
|
969 |
P = Commun.TransfertModelSketch(swPoint.GetSketch, P)
|
970 |
Dim esom As New SuperSommet(SwSommet, True)
|
971 |
Return Math.Sqrt((esom.X - P(0)) ^ 2 + (esom.Y - P(1)) ^ 2 + (esom.Z - P(2)) ^ 2)
|
972 |
|
973 |
End Function
|
974 |
|
975 |
|
976 |
Public Overloads Function Distance(ByRef s1 As SlySommetPoutre, ByRef s2 As SlySommetPoutre) As Double
|
977 |
Return Distance(s1.swSommet, s2.swSommet)
|
978 |
End Function
|
979 |
|
980 |
Public Function GetLongueurArete(ByRef swArete As SldWorks.Edge) As Double
|
981 |
Dim swCourbe As SldWorks.Curve
|
982 |
Dim temp As Object
|
983 |
Dim T1 As Double, T2 As Double
|
984 |
Dim sommet As SldWorks.Vertex
|
985 |
Dim point As Object
|
986 |
|
987 |
swCourbe = swArete.GetCurve
|
988 |
|
989 |
sommet = swArete.GetStartVertex()
|
990 |
|
991 |
If sommet IsNot Nothing Then
|
992 |
point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T1 = temp(0)
|
993 |
sommet = swArete.GetEndVertex() : point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T2 = temp(0)
|
994 |
Return swCourbe.GetLength2(T1, T2)
|
995 |
|
996 |
Else
|
997 |
'l'arète est fermée.
|
998 |
Dim params() As Double
|
999 |
If swCourbe.IsCircle Then
|
1000 |
params = swCourbe.CircleParams
|
1001 |
Return params(7) * Pi * 2
|
1002 |
End If
|
1003 |
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.")
|
1004 |
End If
|
1005 |
|
1006 |
End Function
|
1007 |
|
1008 |
|
1009 |
''' <summary>
|
1010 |
''' Function qui retourne le paramètreT du milieu de l'arète
|
1011 |
''' </summary>
|
1012 |
''' <param name="swSrete">L'arète en question</param>
|
1013 |
''' <returns>Le paramètre T de l acourbe</returns>
|
1014 |
''' <remarks>Si la courbe est fermée, la fonction retourne auqnd ême le T milieu. i.e. T = pi</remarks>
|
1015 |
Public Function GetTMilieu(ByRef swArete As SldWorks.Edge) As Double
|
1016 |
Dim swCourbe As SldWorks.Curve
|
1017 |
Dim temp As Object
|
1018 |
Dim T1 As Double, T2 As Double
|
1019 |
Dim sommet As SldWorks.Vertex
|
1020 |
Dim point As Object
|
1021 |
|
1022 |
swCourbe = swArete.GetCurve
|
1023 |
|
1024 |
sommet = swArete.GetStartVertex()
|
1025 |
|
1026 |
If sommet IsNot Nothing Then
|
1027 |
point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T1 = temp(0)
|
1028 |
sommet = swArete.GetEndVertex() : point = sommet.GetPoint() : temp = swArete.GetParameter(point(0), point(1), point(2)) : T2 = temp(0)
|
1029 |
Return (T1 + T2) / 2
|
1030 |
|
1031 |
Else
|
1032 |
'l'arète est fermée.
|
1033 |
If swCourbe.IsCircle Then
|
1034 |
Return Pi
|
1035 |
End If
|
1036 |
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.")
|
1037 |
End If
|
1038 |
|
1039 |
|
1040 |
|
1041 |
End Function
|
1042 |
|
1043 |
'Procédure qui repère les arètes avec des atributs et leur met une couleur
|
1044 |
Public Sub ColorerAretes()
|
1045 |
' on fait le tour des features pour avoir les poutres et les coques
|
1046 |
Dim feat As SldWorks.Feature
|
1047 |
Dim vSupprime As Object
|
1048 |
Dim bSupprime As Boolean
|
1049 |
Dim ent As SldWorks.Entity
|
1050 |
Dim attr As SldWorks.Attribute
|
1051 |
Dim swArete As SldWorks.Edge
|
1052 |
'RealConstant.RegisterAttribut()
|
1053 |
'RealConstant.RCCode.RegisterAttribut()
|
1054 |
|
1055 |
swModel.EditRebuild3()
|
1056 |
|
1057 |
feat = swPart.FirstFeature
|
1058 |
|
1059 |
Do While Not feat Is Nothing
|
1060 |
|
1061 |
vSupprime = feat.IsSuppressed
|
1062 |
bSupprime = CBool(vSupprime)
|
1063 |
If Not bSupprime Then ' on vérifie que l'entité est pas supprimée
|
1064 |
|
1065 |
Select Case feat.GetTypeName
|
1066 |
Case "CompositeCurve", "3DSplineCurve", "Helix" 'le feature est une courbe libre
|
1067 |
|
1068 |
Dim refCourbe As SldWorks.ReferenceCurve
|
1069 |
|
1070 |
refCourbe = feat.GetSpecificFeature2
|
1071 |
swArete = refCourbe.GetFirstSegment
|
1072 |
Do While Not swArete Is Nothing
|
1073 |
Try
|
1074 |
ent = swArete
|
1075 |
attr = ent.FindAttribute(Intersections.DefAttrRCP1, 0)
|
1076 |
If Left(attr.GetName, 4) = "Mini" Then swArete.Display(2, 1, 0, 1, True) Else swArete.Display(2, 0, 1, 0, True)
|
1077 |
Catch ex As Exception
|
1078 |
|
1079 |
End Try
|
1080 |
|
1081 |
swArete = Nothing
|
1082 |
swArete = refCourbe.GetNextSegment
|
1083 |
Loop
|
1084 |
End Select
|
1085 |
|
1086 |
End If ' fin du if sur la suppression du feature
|
1087 |
feat = feat.GetNextFeature
|
1088 |
Loop
|
1089 |
End Sub
|
1090 |
|
1091 |
' procédure de débuggage qui place un point là où on le demande. (avec un sketch3D)
|
1092 |
Public Overloads Sub MettreUnPoint(ByRef x As Double, ByRef y As Double, ByRef z As Double, Optional ByVal Selection As Boolean = False)
|
1093 |
Dim point As sldworks.SketchPoint
|
1094 |
swModel.Insert3DSketch2(True)
|
1095 |
point = swModel.CreatePoint2(x, y, z)
|
1096 |
swModel.Insert3DSketch2(False)
|
1097 |
'swModel.EditRebuild3()
|
1098 |
If Selection Then
|
1099 |
point.Select2(False, 0)
|
1100 |
End If
|
1101 |
End Sub
|
1102 |
|
1103 |
Public Overloads Function MettreUnPoint(ByRef Plan As sldworks.RefPlane, ByRef x As Double, ByRef y As Double, ByRef z As Double) As sldworks.SketchPoint
|
1104 |
Dim swent As sldworks.Entity
|
1105 |
Dim p(2) As Double
|
1106 |
p(0) = x
|
1107 |
p(1) = y
|
1108 |
p(2) = z
|
1109 |
swent = Plan
|
1110 |
swent.Select4(False, Nothing)
|
1111 |
swModel.InsertSketch2(True)
|
1112 |
p = Commun.TransfertModelSketch(swModel.GetActiveSketch2(), p)
|
1113 |
MettreUnPoint = swModel.CreatePoint2(p(0), p(1), p(2))
|
1114 |
swModel.InsertSketch2(False)
|
1115 |
swModel.EditRebuild3()
|
1116 |
End Function
|
1117 |
|
1118 |
Public Overloads Function MettreUneLigne(ByRef Plan As sldworks.RefPlane, ByRef x1 As Double, ByRef y1 As Double, ByRef z1 As Double, ByRef x2 As Double, ByRef y2 As Double, ByRef z2 As Double) As sldworks.SketchSegment
|
1119 |
Dim swent As sldworks.Entity
|
1120 |
Dim p(2) As Double, p2(2) As Double
|
1121 |
p(0) = x1 : p(1) = y1 : p(2) = z1
|
1122 |
p2(0) = x2 : p2(1) = y2 : p2(2) = z2
|
1123 |
swent = Plan
|
1124 |
swent.Select4(False, Nothing)
|
1125 |
swModel.InsertSketch2(True)
|
1126 |
p = Commun.TransfertModelSketch(swModel.GetActiveSketch2(), p)
|
1127 |
p2 = Commun.TransfertModelSketch(swModel.GetActiveSketch2(), p2)
|
1128 |
MettreUneLigne = swModel.CreateLine2(p(0), p(1), p(2), p2(0), p2(1), p2(2))
|
1129 |
swModel.InsertSketch2(False)
|
1130 |
swModel.EditRebuild3()
|
1131 |
End Function
|
1132 |
|
1133 |
Public Overloads Function MettreUneLigne(ByRef face As sldworks.Face2, ByRef x1 As Double, ByRef y1 As Double, ByRef z1 As Double, ByRef x2 As Double, ByRef y2 As Double, ByRef z2 As Double) As sldworks.SketchSegment
|
1134 |
Dim swent As sldworks.Entity
|
1135 |
Dim p(2) As Double, p2(2) As Double
|
1136 |
p(0) = x1 : p(1) = y1 : p(2) = z1
|
1137 |
p2(0) = x2 : p2(1) = y2 : p2(2) = z2
|
1138 |
swent = face
|
1139 |
swent.Select4(False, Nothing)
|
1140 |
swModel.InsertSketch2(True)
|
1141 |
p = Commun.TransfertModelSketch(swModel.GetActiveSketch2(), p)
|
1142 |
p2 = Commun.TransfertModelSketch(swModel.GetActiveSketch2(), p2)
|
1143 |
MettreUneLigne = swModel.CreateLine2(p(0), p(1), p(2), p2(0), p2(1), p2(2))
|
1144 |
swModel.InsertSketch2(False)
|
1145 |
swModel.EditRebuild3()
|
1146 |
End Function
|
1147 |
|
1148 |
''' <summary>
|
1149 |
''' Créé une ligne dans un sketch selon ses 2 points d'extrémités
|
1150 |
''' </summary>
|
1151 |
''' <param name="P"></param>
|
1152 |
''' <param name="P2"></param>
|
1153 |
''' <remarks></remarks>
|
1154 |
Public Overloads Sub MettreUneLigne(ByRef P() As Double, ByRef P2() As Double)
|
1155 |
swModel.Insert3DSketch2(False)
|
1156 |
swModel.CreateLine2(P(0), P(1), P(2), P2(0), P2(1), P2(2))
|
1157 |
swModel.Insert3DSketch2(False)
|
1158 |
swModel.EditRebuild3()
|
1159 |
End Sub
|
1160 |
|
1161 |
|
1162 |
|
1163 |
|
1164 |
Public Sub EffacerAnnoEtCoord()
|
1165 |
Dim anno As sldworks.Annotation
|
1166 |
Dim ent As sldworks.Entity
|
1167 |
Dim prochainAnno As sldworks.Annotation
|
1168 |
|
1169 |
anno = swModel.GetFirstAnnotation2
|
1170 |
|
1171 |
Do While Not anno Is Nothing
|
1172 |
anno.Select(False)
|
1173 |
prochainAnno = anno.GetNext3()
|
1174 |
swModel.EditDelete()
|
1175 |
anno = prochainAnno
|
1176 |
Loop
|
1177 |
|
1178 |
|
1179 |
' parcours des features pour éliminer les Points3
|
1180 |
Dim feat As sldworks.Feature
|
1181 |
Dim nextfeat As sldworks.Feature
|
1182 |
feat = swPart.FirstFeature
|
1183 |
|
1184 |
Do While Not feat Is Nothing
|
1185 |
If feat.GetTypeName = "CoordSys" Then
|
1186 |
nextfeat = feat.GetNextFeature
|
1187 |
ent = feat
|
1188 |
ent.Select2(False, Nothing)
|
1189 |
swModel.EditDelete()
|
1190 |
feat = nextfeat
|
1191 |
Else
|
1192 |
feat = feat.GetNextFeature()
|
1193 |
End If
|
1194 |
Loop
|
1195 |
|
1196 |
|
1197 |
End Sub
|
1198 |
|
1199 |
Sub MettreAttributPourFaceInterne(ByRef swFaceInterne As sldworks.Face2)
|
1200 |
' Sub qui place l'attribut de faceinterne sur une face
|
1201 |
Dim attr As sldworks.Attribute
|
1202 |
Dim swent As sldworks.Entity
|
1203 |
Static no As Integer = 1
|
1204 |
Dim nom2 As String
|
1205 |
|
1206 |
nom2 = "FaceInterne #" & no
|
1207 |
swent = swFaceInterne
|
1208 |
attr = swent.FindAttribute(Intersections.DefAttrFaceInterne, 0) ' si l'attribut existe déjà on pointe dessus.
|
1209 |
|
1210 |
If attr Is Nothing Then attr = Intersections.DefAttrFaceInterne.CreateInstance5(swModel, swFaceInterne, nom2, 0, 2) ' 0 = swThisconfig
|
1211 |
|
1212 |
While attr Is Nothing
|
1213 |
nom2 = "FaceInterne" & CStr(no)
|
1214 |
attr = Intersections.DefAttrFaceInterne.CreateInstance5(swModel, swFaceInterne, nom2, 0, 0)
|
1215 |
no += 1
|
1216 |
End While
|
1217 |
GererDossiers("FaceInternes", nom2)
|
1218 |
no += 1
|
1219 |
End Sub
|
1220 |
|
1221 |
Private Function Ignorer(ByRef swArete As sldworks.Edge) As Boolean
|
1222 |
Dim attr As sldworks.Attribute
|
1223 |
Dim SwEnt As sldworks.Entity
|
1224 |
Dim p As sldworks.Parameter
|
1225 |
SwEnt = swArete
|
1226 |
attr = SwEnt.FindAttribute(Intersections.DefAttrIgnorer, 0)
|
1227 |
If attr Is Nothing Then Return False Else Return True
|
1228 |
End Function
|
1229 |
|
1230 |
Public Sub GetMidPointSegment(ByVal seg As sldworks.SketchSegment, ByRef x As Double, ByRef y As Double, ByRef z As Double)
|
1231 |
Dim curve As sldworks.Curve
|
1232 |
Dim start As Double
|
1233 |
Dim pend As Double
|
1234 |
Dim isClosed As Boolean
|
1235 |
Dim isPeriodic As Boolean
|
1236 |
Dim milieu As Double
|
1237 |
Dim vXYZ As Object
|
1238 |
Dim xyz(2) As Double
|
1239 |
|
1240 |
curve = seg.GetCurve
|
1241 |
curve.GetEndParams(start, pend, isClosed, isPeriodic)
|
1242 |
|
1243 |
milieu = (pend + start) / 2
|
1244 |
|
1245 |
vXYZ = curve.Evaluate(milieu)
|
1246 |
|
1247 |
xyz = vXYZ
|
1248 |
|
1249 |
x = xyz(0) : y = xyz(1) : z = xyz(2)
|
1250 |
|
1251 |
End Sub
|
1252 |
|
1253 |
Public Sub SelectFaceByName(ByVal Nom As String, Optional ByVal append As Boolean = False)
|
1254 |
Dim swent As sldworks.Entity
|
1255 |
swent = swPart.GetEntityByName(Nom, swconst.swSelectType_e.swSelFACES)
|
1256 |
swent.Select4(append, Nothing)
|
1257 |
End Sub
|
1258 |
|
1259 |
Public Sub SelectAreteByName(ByVal Nom As String, Optional ByVal append As Boolean = False)
|
1260 |
Dim swent As sldworks.Entity
|
1261 |
swent = swPart.GetEntityByName(Nom, swconst.swSelectType_e.swSelEDGES)
|
1262 |
swent.Select4(append, Nothing)
|
1263 |
End Sub
|
1264 |
|
1265 |
Public Sub SelectSommetByName(ByVal Nom As String, Optional ByVal append As Boolean = False)
|
1266 |
Dim swent As sldworks.Entity
|
1267 |
swent = swPart.GetEntityByName(Nom, swconst.swSelectType_e.swSelVERTICES)
|
1268 |
swent.Select4(append, Nothing)
|
1269 |
End Sub
|
1270 |
|
1271 |
Public Function DessineCourbe(ByRef curve As sldworks.Curve) As sldworks.SketchSegment
|
1272 |
Dim modeler As sldworks.Modeler
|
1273 |
Dim vp1 As Object : Dim P1() As Double
|
1274 |
Dim vp2 As Object : Dim P2() As Double
|
1275 |
Dim dir(2) As Double
|
1276 |
Dim sketchseg As sldworks.SketchSegment = Nothing
|
1277 |
Dim i As Integer
|
1278 |
Dim Tmax As Double, Tmin As Double
|
1279 |
Dim ajout As Double
|
1280 |
|
1281 |
Dim isPeriodic As Boolean : Dim isClosed As Boolean
|
1282 |
|
1283 |
If curve.IsTrimmedCurve Then
|
1284 |
If curve.IsLine Then
|
1285 |
swModel.Insert3DSketch2(False)
|
1286 |
curve.GetEndParams(Tmin, Tmax, isClosed, isPeriodic)
|
1287 |
vp1 = curve.Evaluate(Tmin)
|
1288 |
vp2 = curve.Evaluate(Tmax)
|
1289 |
sketchseg = swModel.CreateLine2(vp1(0), vp1(1), vp1(2), vp2(0), vp2(1), vp2(2))
|
1290 |
swModel.Insert3DSketch2(False)
|
1291 |
Return sketchseg
|
1292 |
End If
|
1293 |
|
1294 |
Else
|
1295 |
curve.GetEndParams(Tmin, Tmax, isClosed, isPeriodic)
|
1296 |
modeler = swApp.GetModeler
|
1297 |
swModel.Insert3DSketch2(False)
|
1298 |
ajout = (Tmax - Tmin) / 100
|
1299 |
vp1 = curve.Evaluate(Tmin) : P1 = vp1
|
1300 |
For i = 1 To 100
|
1301 |
vp2 = curve.Evaluate(Tmin + i * ajout) : P2 = vp2
|
1302 |
sketchseg = swModel.CreateLine2(P1(0), P1(1), P1(2), P2(0), P2(1), P2(2))
|
1303 |
P1 = P2
|
1304 |
Next i
|
1305 |
swModel.Insert3DSketch2(False)
|
1306 |
|
1307 |
'modeler = swApp.GetModeler
|
1308 |
'For i = 1 To 100
|
1309 |
' vp2 = curve.Evaluate(Tmin + i * ajout)
|
1310 |
' modeler.CreateLine(vp1, vp2)
|
1311 |
' vp1 = vp2
|
1312 |
'Next i
|
1313 |
Return sketchseg
|
1314 |
End If
|
1315 |
Return Nothing
|
1316 |
End Function
|
1317 |
|
1318 |
Function AngleEntre2Faces(ByRef swface1 As sldworks.Face2, ByRef swface2 As sldworks.Face2, ByRef P() As Double) As Double
|
1319 |
' function qui trouve l'angle entre 2 faces au point spécifié...
|
1320 |
Return AngleEntre2Faces(swface1, swface2, P(0), P(1), P(2))
|
1321 |
End Function
|
1322 |
|
1323 |
Function AngleEntre2Faces(ByRef swface1 As sldworks.Face2, ByRef swface2 As sldworks.Face2, ByRef x As Double, ByRef y As Double, ByRef z As Double) As Double
|
1324 |
' function qui trouve l'angle entre 2 faces au point spécifié...
|
1325 |
Dim swSurf As sldworks.Surface
|
1326 |
Dim retval As Object
|
1327 |
Dim Normale1(2) As Double
|
1328 |
Dim Normale2(2) As Double
|
1329 |
|
1330 |
swSurf = swface1.GetSurface
|
1331 |
retval = swSurf.EvaluateAtPoint(x, y, z)
|
1332 |
Normale1(0) = retval(0) : Normale1(1) = retval(1) : Normale1(2) = retval(2)
|
1333 |
|
1334 |
swSurf = swface2.GetSurface
|
1335 |
retval = swSurf.EvaluateAtPoint(x, y, z)
|
1336 |
Normale2(0) = retval(0) : Normale2(1) = retval(1) : Normale2(2) = retval(2)
|
1337 |
|
1338 |
Return Outils_Math.Angle2Vecteurs(Normale1, Normale2)
|
1339 |
End Function
|
1340 |
|
1341 |
|
1342 |
|
1343 |
|
1344 |
|
1345 |
Public Sub Test()
|
1346 |
' se déclenche quand on apuie sur le bouton 4
|
1347 |
|
1348 |
Dim lst As New Collections.ObjectModel.Collection(Of sldworks.Vertex)
|
1349 |
|
1350 |
Intersections.RegisterAttribut()
|
1351 |
|
1352 |
swModel.EditRebuild3()
|
1353 |
' on fait le tour des features pour avoir les poutres et les coques
|
1354 |
Dim feat As sldworks.Feature
|
1355 |
Dim vSupprime As Object
|
1356 |
Dim bSupprime As Boolean
|
1357 |
Dim attr As sldworks.Attribute
|
1358 |
Dim swArete As sldworks.Edge
|
1359 |
Dim swSommet1 As sldworks.Vertex
|
1360 |
Dim swSommet2 As sldworks.Vertex
|
1361 |
|
1362 |
feat = swPart.FirstFeature
|
1363 |
|
1364 |
Do While Not feat Is Nothing
|
1365 |
|
1366 |
vSupprime = feat.IsSuppressed
|
1367 |
bSupprime = CBool(vSupprime)
|
1368 |
If Not bSupprime Then ' on vérifie que l'entité est pas supprimée
|
1369 |
|
1370 |
Select Case feat.GetTypeName
|
1371 |
Case "CompositeCurve", "3DSplineCurve", "Helix" 'le feature est une courbe libre
|
1372 |
|
1373 |
Dim refCourbe As sldworks.ReferenceCurve
|
1374 |
refCourbe = feat.GetSpecificFeature2
|
1375 |
swArete = refCourbe.GetFirstSegment
|
1376 |
Do While Not swArete Is Nothing
|
1377 |
|
1378 |
If (Not Ignorer(swArete)) Then
|
1379 |
|
1380 |
swSommet1 = swArete.GetStartVertex
|
1381 |
lst.Add(swSommet1)
|
1382 |
|
1383 |
If IsNothing(swSommet1) Then
|
1384 |
'MsgBox("On a une courbe sans sommet")
|
1385 |
Else
|
1386 |
swSommet2 = swArete.GetEndVertex
|
1387 |
lst.Add(swSommet2)
|
1388 |
End If
|
1389 |
End If
|
1390 |
|
1391 |
swArete = Nothing
|
1392 |
swArete = refCourbe.GetNextSegment
|
1393 |
|
1394 |
Loop
|
1395 |
|
1396 |
Case Else ' n'est pas un feature intéressant...
|
1397 |
' rien
|
1398 |
End Select
|
1399 |
End If ' fin du if sur la suppression du feature
|
1400 |
feat = feat.GetNextFeature
|
1401 |
Loop
|
1402 |
|
1403 |
|
1404 |
Dim swEnt As sldworks.Entity
|
1405 |
For Each s As sldworks.Vertex In lst
|
1406 |
swEnt = s
|
1407 |
attr = swEnt.FindAttribute(DefAttrDoublon, 0)
|
1408 |
If Not attr Is Nothing Then
|
1409 |
Dim p As sldworks.Parameter = attr.GetParameter("Maitre")
|
1410 |
MsgBox(p.GetStringValue)
|
1411 |
End If
|
1412 |
Next
|
1413 |
|
1414 |
End Sub
|
1415 |
|
1416 |
|
1417 |
''' <summary>
|
1418 |
''' Sub qui dessine avec des corps temporaires le sens des arètes et la normale des faces.
|
1419 |
''' </summary>
|
1420 |
''' <remarks></remarks>
|
1421 |
Public Sub DessinerSensAretesEtNormaleFace()
|
1422 |
|
1423 |
Try
|
1424 |
Dim lst_fleches_Face As New Collections.Generic.List(Of sldworks.Body2)
|
1425 |
Dim lst_fleches_Arete As New Collections.Generic.List(Of sldworks.Body2)
|
1426 |
Dim lst_fleches_CoArete As New Collections.Generic.List(Of sldworks.Body2)
|
1427 |
Dim selmgr As sldworks.SelectionMgr = swModel.SelectionManager
|
1428 |
Dim ext As sldworks.ModelDocExtension = swModel.Extension
|
1429 |
Dim normale(2) As Double
|
1430 |
|
1431 |
Dim swMprop As sldworks.MassProperty = swModel.Extension.CreateMassProperty
|
1432 |
Dim volume As Double = swMprop.Volume
|
1433 |
Dim surface As Double = swMprop.SurfaceArea
|
1434 |
Dim Grosseur As Double = (volume / surface) / 4
|
1435 |
Dim centreX, centreY, centreZ As Double
|
1436 |
Dim Dx, Dy, Dz As Double
|
1437 |
Dim D(2) As Double
|
1438 |
Dim bod As sldworks.Body2
|
1439 |
|
1440 |
' pour dessiner les normales
|
1441 |
Dim swFace As sldworks.Face2
|
1442 |
Dim swEnt As sldworks.Entity
|
1443 |
|
1444 |
For ff As Integer = 1 To selmgr.GetSelectedObjectCount
|
1445 |
If selmgr.GetSelectedObjectType3(ff, -1) = swconst.swSelectType_e.swSelFACES Then
|
1446 |
swEnt = selmgr.GetSelectedObject6(ff, -1)
|
1447 |
swFace = swEnt
|
1448 |
Else
|
1449 |
Continue For
|
1450 |
End If
|
1451 |
|
1452 |
Dim F As New SuperFace(swFace, True)
|
1453 |
Dim Umin As Double, Umax As Double, Vmin As Double, Vmax As Double, U As Double, V As Double
|
1454 |
Dim i As Integer, j As Integer, Uinc As Double, Vinc As Double
|
1455 |
|
1456 |
|
1457 |
F.UVMinMax(Umin, Umax, Vmin, Vmax)
|
1458 |
V = Vmin
|
1459 |
U = Umin
|
1460 |
Uinc = (Umax - Umin) / 5
|
1461 |
Vinc = (Vmax - Vmin) / 5
|
1462 |
|
1463 |
For i = 1 To 4
|
1464 |
U += Uinc
|
1465 |
V = Vmin
|
1466 |
For j = 1 To 4
|
1467 |
V += Vinc
|
1468 |
|
1469 |
If F.Evaluer(U, V, centreX, centreY, centreZ) Then
|
1470 |
normale = F.Normale(centreX, centreY, centreZ)
|
1471 |
Dx = normale(0) : Dy = normale(1) : Dz = normale(2)
|
1472 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, Dx, Dy, Dz, 255, 0, 0, Grosseur)
|
1473 |
lst_fleches_Face.Add(bod)
|
1474 |
End If
|
1475 |
Next j
|
1476 |
Next i
|
1477 |
|
1478 |
|
1479 |
|
1480 |
' mémoriser les points des aretes
|
1481 |
'Dim vEdge As Object = swFace.GetEdges
|
1482 |
Dim loope As sldworks.Loop2 = swFace.GetFirstLoop
|
1483 |
|
1484 |
While loope IsNot Nothing
|
1485 |
|
1486 |
Dim CoArete As sldworks.CoEdge = loope.GetFirstCoEdge
|
1487 |
|
1488 |
For coa As Integer = 0 To loope.GetEdgeCount - 1
|
1489 |
|
1490 |
Dim swArete As sldworks.Edge
|
1491 |
swArete = CoArete.GetEdge
|
1492 |
'For Each swArete As sldworks.Edge In vEdge
|
1493 |
Dim a As New SuperArete(swArete, True)
|
1494 |
Dim Tmin As Double, Tmax As Double
|
1495 |
Dim incT As Double, T As Double
|
1496 |
|
1497 |
Tmax = a.GetTMax()
|
1498 |
Tmin = a.GetTMin
|
1499 |
incT = (Tmax - Tmin) / 5
|
1500 |
|
1501 |
T = Tmin
|
1502 |
a.Evaluer(T, centreX, centreY, centreZ)
|
1503 |
D = a.GetTangence(T)
|
1504 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, D(0), D(1), D(2), 125, 0, 0, Grosseur / 2)
|
1505 |
lst_fleches_Arete.Add(bod)
|
1506 |
|
1507 |
T = Tmin + 1 * incT
|
1508 |
a.Evaluer(T, centreX, centreY, centreZ)
|
1509 |
D = a.GetTangence(T)
|
1510 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, D(0), D(1), D(2), 125, 0, 0, Grosseur / 2)
|
1511 |
lst_fleches_Arete.Add(bod)
|
1512 |
|
1513 |
T = Tmin + 2 * incT
|
1514 |
a.Evaluer(T, centreX, centreY, centreZ)
|
1515 |
D = a.GetTangence(T)
|
1516 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, D(0), D(1), D(2), 125, 0, 0, Grosseur / 2)
|
1517 |
lst_fleches_Arete.Add(bod)
|
1518 |
|
1519 |
|
1520 |
T = Tmin + 3 * incT
|
1521 |
a.Evaluer(T, centreX, centreY, centreZ)
|
1522 |
D = a.GetTangence(T)
|
1523 |
If Not CoArete.GetSense() Then D = Outils_Math.InverserVecteur(D)
|
1524 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, D(0), D(1), D(2), 125, 0, 0, Grosseur / 4)
|
1525 |
lst_fleches_CoArete.Add(bod)
|
1526 |
|
1527 |
T = Tmin + 4 * incT
|
1528 |
a.Evaluer(T, centreX, centreY, centreZ)
|
1529 |
D = a.GetTangence(T)
|
1530 |
If Not CoArete.GetSense() Then D = Outils_Math.InverserVecteur(D)
|
1531 |
bod = Commun.FlecheTemporaire(centreX, centreY, centreZ, D(0), D(1), D(2), 125, 0, 0, Grosseur / 4)
|
1532 |
lst_fleches_CoArete.Add(bod)
|
1533 |
|
1534 |
CoArete = CoArete.GetNext
|
1535 |
Next coa ' coarete
|
1536 |
loope = loope.GetNext
|
1537 |
End While ' loope
|
1538 |
|
1539 |
Next ff
|
1540 |
|
1541 |
|
1542 |
For Each body As sldworks.Body2 In lst_fleches_Face
|
1543 |
body.Display3(swPart, 1, 0)
|
1544 |
Next
|
1545 |
|
1546 |
For Each body As sldworks.Body2 In lst_fleches_Arete
|
1547 |
body.Display3(swPart, RGB(255, 0, 0), 0)
|
1548 |
Next
|
1549 |
|
1550 |
For Each body As sldworks.Body2 In lst_fleches_CoArete
|
1551 |
body.Display3(swPart, RGB(200, 0, 200), 0)
|
1552 |
Next
|
1553 |
|
1554 |
Catch ex As Exception
|
1555 |
swApp.SendMsgToUser2("Ça n'a pas marché!", swconst.swMessageBoxIcon_e.swMbInformation, swconst.swMessageBoxBtn_e.swMbOk)
|
1556 |
End Try
|
1557 |
|
1558 |
|
1559 |
|
1560 |
End Sub
|
1561 |
|
1562 |
|
1563 |
''' <summary>
|
1564 |
''' Dessine une flèche temporaire (temp. Body)
|
1565 |
''' </summary>
|
1566 |
''' <param name="CentreX"></param>
|
1567 |
''' <param name="centreY"></param>
|
1568 |
''' <param name="centreZ"></param>
|
1569 |
''' <param name="Dx"></param>
|
1570 |
''' <param name="Dy"></param>
|
1571 |
''' <param name="Dz"></param>
|
1572 |
''' <param name="Rouge"></param>
|
1573 |
''' <param name="Vert"></param>
|
1574 |
''' <param name="Bleu"></param>
|
1575 |
''' <param name="Grosseur"></param>
|
1576 |
''' <returns>Le Body2 représentant la flèche</returns>
|
1577 |
''' <remarks></remarks>
|
1578 |
Public Function FlecheTemporaire(ByVal CentreX As Double, ByVal centreY As Double, ByVal centreZ As Double, ByVal Dx As Double, ByVal Dy As Double, ByVal Dz As Double, Optional ByVal Rouge As Integer = 255, Optional ByVal Vert As Integer = 0, Optional ByVal Bleu As Integer = 0, Optional ByVal Longueur As Double = 1) As sldworks.Body2
|
1579 |
Dim P(2) As Double
|
1580 |
Dim Bod1, bod2 As sldworks.Body2
|
1581 |
Dim vBod As Object
|
1582 |
Dim errcode As Integer
|
1583 |
|
1584 |
Bod1 = CylindreTemporaire(CentreX, centreY, centreZ, Dx, Dy, Dz, Longueur, RGB(Rouge, Vert, Bleu))
|
1585 |
|
1586 |
P(0) = Dx : P(1) = Dy : P(2) = Dz
|
1587 |
P = Outils_Math.unitaire(P)
|
1588 |
bod2 = ConeTemporaire(CentreX + P(0) * Longueur, centreY + P(1) * Longueur, centreZ + P(2) * Longueur, Dx, Dy, Dz, Longueur, RGB(Rouge, Vert, Bleu))
|
1589 |
vBod = Bod1.Operations2(swconst.swBodyOperationType_e.SWBODYADD, bod2, errcode)
|
1590 |
Return vBod(0)
|
1591 |
|
1592 |
End Function
|
1593 |
|
1594 |
|
1595 |
|
1596 |
''' <summary>
|
1597 |
''' Dessine un cylindre avec un temporary body
|
1598 |
''' </summary>
|
1599 |
''' <param name="CentreX"></param>
|
1600 |
''' <param name="centreY"></param>
|
1601 |
''' <param name="centreZ"></param>
|
1602 |
''' <param name="Dx"></param>
|
1603 |
''' <param name="Dy"></param>
|
1604 |
''' <param name="Dz"></param>
|
1605 |
''' <param name="longueur"></param>
|
1606 |
''' <param name="couleur"></param>
|
1607 |
''' <remarks></remarks>
|
1608 |
Public Function CylindreTemporaire(ByVal CentreX As Double, ByVal centreY As Double, ByVal centreZ As Double, ByVal Dx As Double, ByVal Dy As Double, ByVal Dz As Double, ByVal longueur As Double, ByVal couleur As Integer) As sldworks.Body2
|
1609 |
Dim View As sldworks.ModelView = swModel.ActiveView()
|
1610 |
Dim swModeler As sldworks.Modeler = swApp.GetModeler
|
1611 |
Dim NewBod As sldworks.Body2
|
1612 |
Dim liste(7) As Double, vListe As Object
|
1613 |
|
1614 |
liste(0) = CentreX ' les 3 points de centre
|
1615 |
liste(1) = centreY
|
1616 |
liste(2) = centreZ
|
1617 |
liste(3) = Dx ' l'axe du cone
|
1618 |
liste(4) = Dy
|
1619 |
liste(5) = Dz
|
1620 |
liste(6) = longueur / 6 ' radius, le 1/6 de la longueur
|
1621 |
liste(7) = longueur ' hauteur
|
1622 |
|
1623 |
vListe = liste
|
1624 |
NewBod = swModeler.CreateBodyFromCyl(vListe)
|
1625 |
NewBod.Display2(swPart, couleur, 0)
|
1626 |
Return NewBod
|
1627 |
End Function
|
1628 |
|
1629 |
''' <summary>
|
1630 |
''' Dessine un cone avec un temporary body
|
1631 |
''' </summary>
|
1632 |
''' <param name="CentreX"></param>
|
1633 |
''' <param name="centreY"></param>
|
1634 |
''' <param name="centreZ"></param>
|
1635 |
''' <param name="Dx"></param>
|
1636 |
''' <param name="Dy"></param>
|
1637 |
''' <param name="Dz"></param>
|
1638 |
''' <param name="longueur"></param>
|
1639 |
''' <param name="couleur"></param>
|
1640 |
''' <remarks></remarks>
|
1641 |
Public Function ConeTemporaire(ByVal CentreX As Double, ByVal centreY As Double, ByVal centreZ As Double, ByVal Dx As Double, ByVal Dy As Double, ByVal Dz As Double, ByVal longueur As Double, ByVal couleur As Integer) As sldworks.Body2
|
1642 |
Dim View As sldworks.ModelView = swModel.ActiveView()
|
1643 |
Dim swModeler As sldworks.Modeler = swApp.GetModeler
|
1644 |
Dim liste(8) As Double, vListe As Object
|
1645 |
Dim NewBod As sldworks.Body2
|
1646 |
|
1647 |
liste(0) = CentreX ' les 3 points de centre
|
1648 |
liste(1) = centreY
|
1649 |
liste(2) = centreZ
|
1650 |
liste(3) = Dx ' l'axe du cone
|
1651 |
liste(4) = Dy
|
1652 |
liste(5) = Dz
|
1653 |
liste(6) = longueur / 2 ' base radius
|
1654 |
liste(7) = 0 'top radius
|
1655 |
liste(8) = longueur ' hauteur
|
1656 |
vListe = liste
|
1657 |
NewBod = swModeler.CreateBodyFromCone(vListe)
|
1658 |
NewBod.Display2(swPart, couleur, 0)
|
1659 |
Return NewBod
|
1660 |
End Function
|
1661 |
|
1662 |
|
1663 |
|
1664 |
''' <summary>
|
1665 |
''' Créer une annotation qui pointe sur les coordonnées spécifiées
|
1666 |
''' </summary>
|
1667 |
''' <param name="x">La flèche de l'annotation pointera dessu.</param>
|
1668 |
''' <param name="y"></param>
|
1669 |
''' <param name="z"></param>
|
1670 |
''' <param name="Texte">Le texte à y écrire</param>
|
1671 |
''' <remarks></remarks>
|
1672 |
Public Sub CreerAnnotation(ByVal x As Double, ByVal y As Double, ByVal z As Double, Optional ByVal Texte As String = " NT ")
|
1673 |
Commun.MettreUnPoint(x, y, z, True)
|
1674 |
Dim swNote As sldworks.Note
|
1675 |
swNote = swModel.InsertNote(Texte)
|
1676 |
End Sub
|
1677 |
|
1678 |
|
1679 |
|
1680 |
|
1681 |
|
1682 |
Public Class Point
|
1683 |
Public X As Double
|
1684 |
Public Y As Double
|
1685 |
Public Z As Double
|
1686 |
|
1687 |
''' <summary>
|
1688 |
''' Attention de ne pas oublier de fixer les valeurs de x,y et z plus tard.
|
1689 |
''' </summary>
|
1690 |
''' <remarks></remarks>
|
1691 |
Public Sub New()
|
1692 |
|
1693 |
End Sub
|
1694 |
|
1695 |
Public Sub New(ByVal x As Double, ByVal y As Double, ByVal z As Double)
|
1696 |
Me.X = x : Me.Y = y : Me.Z = z
|
1697 |
End Sub
|
1698 |
|
1699 |
Public Shared Operator =(ByVal P1 As Point, ByVal P2 As Point) As Boolean
|
1700 |
If Math.Abs(P1.X - P2.X) < Epsilon AndAlso Math.Abs(P1.Y - P2.Y) < Epsilon AndAlso Math.Abs(P1.Z - P2.Z) < Epsilon Then Return True Else Return False
|
1701 |
End Operator
|
1702 |
|
1703 |
Public Shared Operator <>(ByVal P1 As Point, ByVal P2 As Point) As Boolean
|
1704 |
If Math.Abs(P1.X - P2.X) < Epsilon AndAlso Math.Abs(P1.Y - P2.Y) < Epsilon AndAlso Math.Abs(P1.Z - P2.Z) < Epsilon Then Return False Else Return True
|
1705 |
End Operator
|
1706 |
|
1707 |
Public Shared Narrowing Operator CType(ByVal P As Point) As String
|
1708 |
Return (Replace(CStr(P.X), ",", ".") & " " & Replace(CStr(P.Y), ",", ".") & " " & Replace(CStr(P.Z), ",", "."))
|
1709 |
End Operator
|
1710 |
|
1711 |
|
1712 |
End Class
|
1713 |
|
1714 |
|
1715 |
|
1716 |
|
1717 |
End Module
|