1 |
Imports SolidWorks.Interop
|
2 |
Imports SolidWorks.Interop.swconst
|
3 |
Imports SolidWorks.Interop.swpublished
|
4 |
|
5 |
Public Class InterPoutreCoque
|
6 |
Inherits InterAreteFace
|
7 |
|
8 |
Public sFaceCoque As SlyFaceCoque
|
9 |
|
10 |
|
11 |
Public Overrides Sub DecouperLong()
|
12 |
MyBase.DecouperLong()
|
13 |
' on peut avoir une liste de poutres...
|
14 |
'For Each poutre As SlyAretePoutre In Me.lst_sPoutre
|
15 |
Dim poutre As SlyAretePoutre = Me.lst_sPoutre.Item(1)
|
16 |
|
17 |
Dim PetitSketch As sldworks.Sketch = Nothing
|
18 |
Dim swSketchManager As sldworks.SketchManager = swModel.SketchManager
|
19 |
Dim sfaceCoq As SlyFaceCoque ' la face du volume
|
20 |
Dim swfaceCoq As sldworks.Face2
|
21 |
|
22 |
Dim segment As sldworks.Entity = poutre.swArete
|
23 |
|
24 |
swModel.ClearSelection()
|
25 |
If swModel.GetActiveSketch2() IsNot Nothing Then MsgBox("Déjà un sketch d'actif???")
|
26 |
swModel.Insert3DSketch2(False)
|
27 |
segment.Select4(False, Nothing)
|
28 |
swSketchManager.SketchUseEdge(False)
|
29 |
swModel.Insert3DSketch2(False)
|
30 |
swModel.EditRebuild3()
|
31 |
|
32 |
Dim feat As sldworks.Feature = swModel.FeatureByPositionReverse(0)
|
33 |
If Not feat.GetTypeName() = "3DProfileFeature" Then MsgBox("Problème ici")
|
34 |
PetitSketch = feat.GetSpecificFeature2() ' devrait être un sketch
|
35 |
|
36 |
' 1 - créer le sweep à partir du sketch
|
37 |
Me.GénérerSweep(PetitSketch) ' hahahaha on réutilise la sub !!
|
38 |
|
39 |
' sélectionner toutes les faces du sweep avec un mark de 16
|
40 |
Dim swFaceSweep As sldworks.Face2 = Me.BodySweep.GetFirstFace()
|
41 |
Dim swent As sldworks.Entity
|
42 |
Dim featmanager As sldworks.FeatureManager
|
43 |
Dim faces() As sldworks.Face2
|
44 |
|
45 |
|
46 |
' ***** Découpage du volume****
|
47 |
swModel.EditRebuild3()
|
48 |
featmanager = swModel.FeatureManager
|
49 |
feat = Nothing
|
50 |
|
51 |
|
52 |
sfaceCoq = Me.sFaceCoque
|
53 |
|
54 |
|
55 |
faces = sfaceCoq.GetFaces
|
56 |
|
57 |
|
58 |
For q As Integer = 0 To UBound(faces)
|
59 |
swfaceCoq = faces(q)
|
60 |
' merde, on a 3 fois la même face??? vérifier que le for each marche bien et/ou que le .ToArray du faces est corect.
|
61 |
If swModel.ClosestDistance(swfaceCoq, Me.BodySweep, Nothing, Nothing) < Epsilon Then
|
62 |
|
63 |
swModel.ClearSelection2(True)
|
64 |
Do While swFaceSweep IsNot Nothing ' les faces coupantes (celles du sweep) ont un mark de 16
|
65 |
swent = swFaceSweep : swent.Select2(True, 16)
|
66 |
swFaceSweep = swFaceSweep.GetNextFace
|
67 |
Loop
|
68 |
|
69 |
swent = swfaceCoq : swent.Select2(True, 32)
|
70 |
feat = featmanager.InsertSplitLineIntersect(7)
|
71 |
If feat IsNot Nothing Then Exit For
|
72 |
|
73 |
End If
|
74 |
Next
|
75 |
|
76 |
If feat Is Nothing Then
|
77 |
If swApp.SendMsgToUser2("Solidworks est incapable de découper la face du volume, entre " & Me.sFaceVolume.nom & " et " & Me.sFaceVolume.nom & vbCr & " La géométrie est trop compliquée pour solidworks!", swconst.swMessageBoxIcon_e.swMbWarning, swconst.swMessageBoxBtn_e.swMbRetryCancel) = swconst.swMessageBoxResult_e.swMbHitCancel Then Exit Sub
|
78 |
End If
|
79 |
|
80 |
Me.BodySweep.HideBody(True)
|
81 |
|
82 |
' ajout des nouvelles faces
|
83 |
Dim vfaces As Object = feat.GetFaces()
|
84 |
swModel.EditRebuild3()
|
85 |
|
86 |
For Each swfaceCoq In vfaces ' sélectionne les faces découpées.
|
87 |
If Not swfaceCoq.GetBody Is Me.BodySweep Then
|
88 |
sfaceCoq.AjouterFace(swfaceCoq)
|
89 |
'là on a une connerie, la face originale n'est pas dans la liste des faces de vFaces
|
90 |
'et le pointeur original semble détruit
|
91 |
' puisque ajouterface ne créé pas de doubles, on va chercher des faces que l'on mettra dans la liste
|
92 |
' la grosse face en fera automatiquement partie.
|
93 |
Dim obj As Object = swfaceCoq.GetEdges
|
94 |
Dim aretes As sldworks.Edge = obj(0)
|
95 |
Dim oBjfaces As Object = aretes.GetTwoAdjacentFaces2()
|
96 |
Dim NewFaces As sldworks.Face2 = oBjfaces(0)
|
97 |
sfaceCoq.AjouterFace(NewFaces)
|
98 |
NewFaces = oBjfaces(1)
|
99 |
sfaceCoq.AjouterFace(NewFaces)
|
100 |
aretes = obj(1)
|
101 |
NewFaces = oBjfaces(0)
|
102 |
sfaceCoq.AjouterFace(NewFaces)
|
103 |
NewFaces = oBjfaces(1)
|
104 |
sfaceCoq.AjouterFace(NewFaces)
|
105 |
End If
|
106 |
Next
|
107 |
|
108 |
' il faut trouver les faces internes et les tagger comme des faces de coque(pour les mini-poutres orientées)
|
109 |
|
110 |
'Next poutre
|
111 |
End Sub
|
112 |
|
113 |
|
114 |
End Class
|