ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magicsld/InterAreteFace.vb
(Generate patch)

Comparing magicsld/InterAreteFace.vb (file contents):
Revision 130 by bournival, Wed Jul 30 21:26:03 2008 UTC vs.
Revision 205 by bournival, Thu Jul 23 20:53:57 2009 UTC

# Line 15 | Line 15 | Public MustInherit Class InterAreteFace
15      Public z As Double
16  
17      Public sFaceVolume As SlyFaceVolume
18 <    Private BodySweep As sldworks.Body2
18 >    Friend BodySweep As sldworks.Body2
19  
20  
21 <    Public Sub DecouperLong()
22 <        ' on peut avoir une liste de poutres...
23 <        'For Each poutre As SlyAretePoutre In Me.lst_sPoutre
24 <        Dim poutre As SlyAretePoutre = Me.lst_sPoutre.Item(1)
25 <
26 <        Dim PetitSketch As sldworks.Sketch = Nothing
27 <        Dim swSketchManager As sldworks.SketchManager = swModel.SketchManager
28 <        Dim sfaceVol As SlyFaceVolume   ' la face du volume
29 <        Dim swfaceVol As sldworks.Face2
30 <
31 <        Dim segment As sldworks.Entity = poutre.swArete
32 <
33 <        swModel.ClearSelection()
34 <        If swModel.GetActiveSketch2() IsNot Nothing Then MsgBox("Déjà un sketch d'actif???")
35 <        swModel.Insert3DSketch2(False)
36 <        segment.Select4(False, Nothing)
37 <        swSketchManager.SketchUseEdge(False)
38 <        swModel.Insert3DSketch2(False)
39 <        swModel.EditRebuild3()
40 <
41 <        Dim feat As sldworks.Feature = swModel.FeatureByPositionReverse(0)
42 <        If Not feat.GetTypeName() = "3DProfileFeature" Then MsgBox("Problème ici")
43 <        PetitSketch = feat.GetSpecificFeature2() ' devrait être un sketch
44 <
45 <        ' 1 - créer le sweep à partir du sketch
46 <        Me.GénérerSweep(PetitSketch) ' hahahaha on réutilise la sub !!
47 <
48 <        ' sélectionner toutes les faces du sweep avec un mark de 16
49 <        Dim swFaceSweep As sldworks.Face2 = Me.BodySweep.GetFirstFace()
50 <        Dim swent As sldworks.Entity
51 <        Dim featmanager As sldworks.FeatureManager
52 <        Dim faces() As sldworks.Face2
53 <
54 <
55 <        '  ***** Découpage du volume****
56 <        swModel.EditRebuild3()
57 <        featmanager = swModel.FeatureManager
58 <        feat = Nothing
59 <        sfaceVol = Me.sFaceVolume
60 <        faces = sfaceVol.GetFaces
61 <
62 <
63 <        For q As Integer = 0 To UBound(faces)
64 <            swfaceVol = faces(q)
65 <            ' 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.
66 <            If swModel.ClosestDistance(swfaceVol, Me.BodySweep, Nothing, Nothing) < Epsilon Then
67 <
68 <                swModel.ClearSelection2(True)
69 <                Do While swFaceSweep IsNot Nothing  ' les faces coupantes (celles du sweep) ont un mark de 16
70 <                    swent = swFaceSweep : swent.Select2(True, 16)
71 <                    swFaceSweep = swFaceSweep.GetNextFace
72 <                Loop
73 <
74 <                swent = swfaceVol : swent.Select2(True, 32)
75 <                feat = featmanager.InsertSplitLineIntersect(7)
76 <                If feat IsNot Nothing Then Exit For
21 >    Public Overridable Sub DecouperLong()
22 >        ' dans les classes dérivées.
23  
78            End If
79        Next
24  
25 <        If feat Is Nothing Then
26 <            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
27 <        End If
25 >        'MyBase.DecouperLong()
26 >        '' on peut avoir une liste de poutres...
27 >        ''For Each poutre As SlyAretePoutre In Me.lst_sPoutre
28 >        'Dim poutre As SlyAretePoutre = Me.lst_sPoutre.Item(1)
29 >
30 >        'Dim PetitSketch As sldworks.Sketch = Nothing
31 >        'Dim swSketchManager As sldworks.SketchManager = swModel.SketchManager
32 >        'Dim sfaceVol As SlyFaceVolume   ' la face du volume
33 >        'Dim swfaceVol As sldworks.Face2
34 >
35 >        'Dim segment As sldworks.Entity = poutre.swArete
36 >
37 >        'swModel.ClearSelection()
38 >        'If swModel.GetActiveSketch2() IsNot Nothing Then MsgBox("Déjà un sketch d'actif???")
39 >        'swModel.Insert3DSketch2(False)
40 >        'segment.Select4(False, Nothing)
41 >        'swSketchManager.SketchUseEdge(False)
42 >        'swModel.Insert3DSketch2(False)
43 >        'swModel.EditRebuild3()
44 >
45 >        'Dim feat As sldworks.Feature = swModel.FeatureByPositionReverse(0)
46 >        'If Not feat.GetTypeName() = "3DProfileFeature" Then MsgBox("Problème ici")
47 >        'PetitSketch = feat.GetSpecificFeature2() ' devrait être un sketch
48 >
49 >        '' 1 - créer le sweep à partir du sketch
50 >        'Me.GénérerSweep(PetitSketch) ' hahahaha on réutilise la sub !!
51 >
52 >        '' sélectionner toutes les faces du sweep avec un mark de 16
53 >        'Dim swFaceSweep As sldworks.Face2 = Me.BodySweep.GetFirstFace()
54 >        'Dim swent As sldworks.Entity
55 >        'Dim featmanager As sldworks.FeatureManager
56 >        'Dim faces() As sldworks.Face2
57 >
58 >
59 >        ''  ***** Découpage du volume****
60 >        'swModel.EditRebuild3()
61 >        'featmanager = swModel.FeatureManager
62 >        'feat = Nothing
63 >
64 >
65 >        'sfaceVol = Me.sFaceVolume
66  
85        Me.BodySweep.HideBody(True)
67  
68 <        ' ajout des nouvelles faces
88 <        Dim vfaces As Object = feat.GetFaces()
89 <        swModel.EditRebuild3()
90 <
91 <        For Each swfaceVol In vfaces  ' sélectionne les faces découpées.
92 <            If Not swfaceVol.GetBody Is Me.BodySweep Then
93 <                sfaceVol.AjouterFace(swfaceVol)
94 <                'là on a une connerie, la face originale n'est pas dans la liste des faces de vFaces
95 <                'et le pointeur original semble détruit
96 <                ' puisque ajouterface ne créé pas de doubles, on va chercher des faces que l'on mettra dans la liste
97 <                ' la grosse face en fera automatiquement partie.
98 <                Dim obj As Object = swfaceVol.GetEdges
99 <                Dim aretes As sldworks.Edge = obj(0)
100 <                Dim oBjfaces As Object = aretes.GetTwoAdjacentFaces2()
101 <                Dim NewFaces As sldworks.Face2 = oBjfaces(0)
102 <                sfaceVol.AjouterFace(NewFaces)
103 <                NewFaces = oBjfaces(1)
104 <                sfaceVol.AjouterFace(NewFaces)
105 <                aretes = obj(1)
106 <                NewFaces = oBjfaces(0)
107 <                sfaceVol.AjouterFace(NewFaces)
108 <                NewFaces = oBjfaces(1)
109 <                sfaceVol.AjouterFace(NewFaces)
110 <            End If
111 <        Next
68 >        'faces = sfaceVol.GetFaces
69  
113        ' il faut trouver les faces internes et les tagger comme des faces de coque(pour les mini-poutres orientées)
70  
71 <        'Next poutre
71 >        'For q As Integer = 0 To UBound(faces)
72 >        '    swfaceVol = faces(q)
73 >        '    ' 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.
74 >        '    If swModel.ClosestDistance(swfaceVol, Me.BodySweep, Nothing, Nothing) < Epsilon Then
75 >
76 >        '        swModel.ClearSelection2(True)
77 >        '        Do While swFaceSweep IsNot Nothing  ' les faces coupantes (celles du sweep) ont un mark de 16
78 >        '            swent = swFaceSweep : swent.Select2(True, 16)
79 >        '            swFaceSweep = swFaceSweep.GetNextFace
80 >        '        Loop
81 >
82 >        '        swent = swfaceVol : swent.Select2(True, 32)
83 >        '        feat = featmanager.InsertSplitLineIntersect(7)
84 >        '        If feat IsNot Nothing Then Exit For
85 >
86 >        '    End If
87 >        'Next
88 >
89 >        'If feat Is Nothing Then
90 >        '    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
91 >        'End If
92 >
93 >        'Me.BodySweep.HideBody(True)
94 >
95 >        '' ajout des nouvelles faces
96 >        'Dim vfaces As Object = feat.GetFaces()
97 >        'swModel.EditRebuild3()
98 >
99 >        'For Each swfaceVol In vfaces  ' sélectionne les faces découpées.
100 >        '    If Not swfaceVol.GetBody Is Me.BodySweep Then
101 >        '        sfaceVol.AjouterFace(swfaceVol)
102 >        '        'là on a une connerie, la face originale n'est pas dans la liste des faces de vFaces
103 >        '        'et le pointeur original semble détruit
104 >        '        ' puisque ajouterface ne créé pas de doubles, on va chercher des faces que l'on mettra dans la liste
105 >        '        ' la grosse face en fera automatiquement partie.
106 >        '        Dim obj As Object = swfaceVol.GetEdges
107 >        '        Dim aretes As sldworks.Edge = obj(0)
108 >        '        Dim oBjfaces As Object = aretes.GetTwoAdjacentFaces2()
109 >        '        Dim NewFaces As sldworks.Face2 = oBjfaces(0)
110 >        '        sfaceVol.AjouterFace(NewFaces)
111 >        '        NewFaces = oBjfaces(1)
112 >        '        sfaceVol.AjouterFace(NewFaces)
113 >        '        aretes = obj(1)
114 >        '        NewFaces = oBjfaces(0)
115 >        '        sfaceVol.AjouterFace(NewFaces)
116 >        '        NewFaces = oBjfaces(1)
117 >        '        sfaceVol.AjouterFace(NewFaces)
118 >        '    End If
119 >        'Next
120 >
121 >        '' il faut trouver les faces internes et les tagger comme des faces de coque(pour les mini-poutres orientées)
122 >
123 >        ''Next poutre
124      End Sub
125  
126      Public Sub GénérerSweep(Optional ByRef sketch As sldworks.Sketch = Nothing)
# Line 174 | Line 182 | Public MustInherit Class InterAreteFace
182          swEnt = Plan : swEnt.Select4(False, Nothing)
183  
184          swModel.InsertSketch2(False)
185 <        swModel.CreateCircle2(rayon / 2, 0, 0, 0, 0, 0)
185 >        ' faut faire attention où on place le point...
186 >        Dim NormaleFace() As Double = Me.sFaceVolume.GetNormaleSurface(Me.x, Me.y, Me.z)
187 >        Dim P(2) As Double : P(1) = 1
188 >        Dim VecteurX() As Double = Commun.TransfertSketchToModel(swModel.GetActiveSketch2(), P)
189 >        If (Outils_Math.Angle2Vecteurs(NormaleFace, VecteurX) < (1000 * Epsilon)) Or (Math.Abs(Outils_Math.Angle2Vecteurs(NormaleFace, VecteurX) - Math.PI / 2) < (1000 * Epsilon)) Then
190 >            swModel.CreateCircle2(0, rayon / 2, 0, 0, 0, 0)
191 >        Else
192 >            swModel.CreateCircle2(rayon / 2, 0, 0, 0, 0, 0)
193 >        End If
194 >
195 >
196          swModel.InsertSketch2(True)
197  
198          feat = swModel.FeatureByPositionReverse(0)
199          sketchCercle = feat.GetSpecificFeature2()
200  
201          ' 4 - Sweep
202 <        Dim swFeatManager As SldWorks.FeatureManager = swModel.FeatureManager
202 >        Dim swFeatManager As sldworks.FeatureManager = swModel.FeatureManager
203  
204          Dim merge As Boolean = False
205  
206          swEnt = sketchCercle : swEnt.Select2(False, 1)
207          swEnt = sketch : swEnt.Select2(True, 4)
208  
209 <        feat = swFeatManager.InsertProtrusionSwept3(False, False, 0, False, False, 1, 1, False, 0, 0, 0, 0, merge, 1, 1, 0, 1) ' merge fait additionner le bnouveau corps...  Pas certain du false qui suit.
209 >        feat = swFeatManager.InsertProtrusionSwept3(False, False, 0, False, False, swTangencyType_e.swTangencyNone, swTangencyType_e.swTangencyNone, False, 0, 0, 0, 0, 0, 1, 1, 0, 1)
210  
211          If feat Is Nothing Then
212              swEnt = sketchCercle : swEnt.Select2(False, 1)
213              swEnt = sketch : swEnt.Select2(True, 4)
214 <            feat = swFeatManager.InsertProtrusionSwept3(False, False, 0, False, False, 0, 0, False, 0, 0, 0, 0, 0, 1, 1, 0, 1)
214 >            feat = swFeatManager.InsertProtrusionSwept3(False, False, 0, False, False, swTangencyType_e.swTangencyNone, swTangencyType_e.swTangencyNone, False, 0, 0, 0, 0, 0, 1, 1, 0, 1)
215          End If
216  
217          If feat Is Nothing Then
# Line 204 | Line 222 | Public MustInherit Class InterAreteFace
222          End If
223  
224          Dim vfaces As Object = feat.GetFaces
225 <        Dim swface As SldWorks.Face2 = vfaces(0)
225 >        Dim swface As sldworks.Face2 = vfaces(0)
226          Me.BodySweep = swface.GetBody
227  
228  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines