1 |
bournival |
48 |
Imports SolidWorks.Interop
|
2 |
|
|
Imports SolidWorks.Interop.swconst
|
3 |
|
|
Imports SolidWorks.Interop.swpublished
|
4 |
bournival |
40 |
|
5 |
|
|
' la classe des propriétés
|
6 |
|
|
|
7 |
|
|
Namespace Enregistrement
|
8 |
|
|
Public Class Enregistrement
|
9 |
|
|
Dim iSwApp As SldWorks.SldWorks
|
10 |
|
|
Dim userAddin As MAGIC.Magic
|
11 |
|
|
Dim handler As EnregistrementPageHandler
|
12 |
bournival |
48 |
Dim ppage As sldworks.PropertyManagerPage2
|
13 |
bournival |
40 |
|
14 |
|
|
#Region "Déclaration des controles"
|
15 |
|
|
'Groupes
|
16 |
|
|
|
17 |
|
|
' les groupes pour l'enregistrement sont ici. On fait (pour l'instant) 2 groupes, le premier demande si l'on veut
|
18 |
|
|
' voir la fenêtre originale lors de la sauvegarde et/ou la fenêtre modifiée.
|
19 |
|
|
' le deuxième groupe sert à la pré-optimisation de maillage
|
20 |
|
|
|
21 |
|
|
|
22 |
bournival |
48 |
Private group1 As sldworks.PropertyManagerPageGroup
|
23 |
|
|
Private group2 As sldworks.PropertyManagerPageGroup ' préoptimisation manuelle
|
24 |
|
|
Private group3 As sldworks.PropertyManagerPageGroup
|
25 |
|
|
Private group4 As sldworks.PropertyManagerPageGroup ' pre-optimisation automatique
|
26 |
bournival |
40 |
|
27 |
|
|
''Controles
|
28 |
|
|
|
29 |
bournival |
48 |
Private check1 As sldworks.PropertyManagerPageCheckbox
|
30 |
|
|
Private Label1 As sldworks.PropertyManagerPageLabel
|
31 |
|
|
Private Label2 As sldworks.PropertyManagerPageLabel
|
32 |
|
|
Private Numberbox1 As sldworks.PropertyManagerPageNumberbox
|
33 |
|
|
Private Numberbox2 As sldworks.PropertyManagerPageNumberbox
|
34 |
|
|
Private labelRemi1 As sldworks.PropertyManagerPageLabel
|
35 |
|
|
Private labelRemi2 As sldworks.PropertyManagerPageLabel
|
36 |
bournival |
40 |
|
37 |
|
|
|
38 |
bournival |
48 |
Private checkOriginal As sldworks.PropertyManagerPageCheckbox
|
39 |
|
|
Private checkModifie As sldworks.PropertyManagerPageCheckbox
|
40 |
|
|
Private checkMultimodele As sldworks.PropertyManagerPageCheckbox
|
41 |
bournival |
40 |
|
42 |
bournival |
48 |
Private checkArrondi As sldworks.PropertyManagerPageCheckbox
|
43 |
|
|
Private checkRentrant As sldworks.PropertyManagerPageCheckbox
|
44 |
|
|
Private checkMatiere As sldworks.PropertyManagerPageCheckbox
|
45 |
bournival |
40 |
|
46 |
bournival |
48 |
Private NumberArrondi As sldworks.PropertyManagerPageNumberbox
|
47 |
|
|
Private NumberRentrant As sldworks.PropertyManagerPageNumberbox
|
48 |
|
|
Private NumberMatiere As sldworks.PropertyManagerPageNumberbox
|
49 |
bournival |
40 |
|
50 |
bournival |
48 |
Private curseur As sldworks.PropertyManagerPageSlider
|
51 |
|
|
Private limiteur As sldworks.PropertyManagerPageNumberbox
|
52 |
bournival |
40 |
|
53 |
bournival |
46 |
|
54 |
bournival |
40 |
''Controles
|
55 |
|
|
|
56 |
bournival |
48 |
Private label11 As sldworks.PropertyManagerPageLabel
|
57 |
|
|
Private checkentite As sldworks.PropertyManagerPageCheckbox
|
58 |
|
|
Private CheckEnt As sldworks.PropertyManagerPageCheckbox
|
59 |
bournival |
40 |
|
60 |
bournival |
48 |
Private Gilles1 As sldworks.PropertyManagerPageCheckbox
|
61 |
|
|
Private Gilles2 As sldworks.PropertyManagerPageCheckbox
|
62 |
bournival |
40 |
|
63 |
|
|
#End Region
|
64 |
|
|
|
65 |
|
|
Function Init(ByVal sw As SldWorks.SldWorks, ByVal addin As MAGIC.Magic) As Object
|
66 |
|
|
iSwApp = sw
|
67 |
|
|
userAddin = addin
|
68 |
|
|
CreatePage()
|
69 |
|
|
AddControls()
|
70 |
|
|
Return Nothing
|
71 |
|
|
End Function
|
72 |
|
|
|
73 |
|
|
Sub Show()
|
74 |
|
|
ppage.Show()
|
75 |
|
|
End Sub
|
76 |
|
|
|
77 |
|
|
Sub CreatePage()
|
78 |
|
|
handler = New EnregistrementPageHandler
|
79 |
|
|
handler.Init(iSwApp, userAddin)
|
80 |
|
|
Dim options As Integer
|
81 |
|
|
Dim errors As Integer
|
82 |
|
|
options = swPropertyManagerPageOptions_e.swPropertyManagerOptions_OkayButton + swPropertyManagerPageOptions_e.swPropertyManagerOptions_CancelButton
|
83 |
|
|
ppage = iSwApp.CreatePropertyManagerPage("Enregistrement", options, handler, errors)
|
84 |
|
|
End Sub
|
85 |
|
|
|
86 |
|
|
Sub AddControls()
|
87 |
|
|
Dim options As Integer
|
88 |
|
|
Dim leftAlign As Integer
|
89 |
|
|
Dim controlType As Integer
|
90 |
|
|
|
91 |
|
|
|
92 |
|
|
' premier groupe
|
93 |
|
|
options = swAddGroupBoxOptions_e.swGroupBoxOptions_Visible + swAddGroupBoxOptions_e.swGroupBoxOptions_Expanded
|
94 |
|
|
group1 = ppage.AddGroupBox(0, "Exportation vers MAGiC", options)
|
95 |
|
|
|
96 |
|
|
' checkOriginal
|
97 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
98 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
99 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
100 |
|
|
checkOriginal = group1.AddControl(1, controlType, "Afficher le modèle original", leftAlign, options, "Conserve la fenêtre du modèle original (non modifié)")
|
101 |
|
|
checkOriginal.Checked = True
|
102 |
|
|
EnregistrementCode.checkboxOriginal = checkOriginal
|
103 |
|
|
|
104 |
|
|
|
105 |
|
|
' checkmodifie
|
106 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
107 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
108 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
109 |
|
|
checkModifie = group1.AddControl(2, controlType, "Afficher le modèle exporté", leftAlign, options, "Conserve la fenêtre du modèle ayant subit des modifications")
|
110 |
|
|
checkModifie.Checked = True
|
111 |
|
|
EnregistrementCode.checkboxModifie = checkModifie
|
112 |
|
|
|
113 |
|
|
|
114 |
|
|
|
115 |
|
|
|
116 |
|
|
|
117 |
|
|
' deuxième groupe, pré-optimisation. par défaut cliqué...
|
118 |
|
|
options = swAddGroupBoxOptions_e.swGroupBoxOptions_Visible + swAddGroupBoxOptions_e.swGroupBoxOptions_Checkbox ' + swAddGroupBoxOptions_e.swGroupBoxOptions_Checked
|
119 |
bournival |
46 |
group2 = ppage.AddGroupBox(3, "Pre-optimisation Manuelle", options)
|
120 |
bournival |
40 |
EnregistrementCode.Groupe2 = group2
|
121 |
|
|
|
122 |
|
|
' le label
|
123 |
|
|
Label2 = group2.AddControl(4, swPropertyManagerPageControlType_e.swControlType_Label, "Donnez l'Écart Nodal Global", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_Enabled, "Il faut spécifier l'Écart Nodal Global à utiliser")
|
124 |
|
|
|
125 |
|
|
'Numberbox2
|
126 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
127 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
128 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
129 |
|
|
Numberbox2 = group2.AddControl(5, controlType, "Écart Nodal Global", leftAlign, options, "Entrez la valeur de l'Écart Nodal Global")
|
130 |
|
|
Numberbox2.Value = 0.015
|
131 |
|
|
Numberbox2.SetRange(SwConst.swNumberboxUnitType_e.swNumberBox_Length, 0.000000001, 100000000, 0.001, True)
|
132 |
|
|
EnregistrementCode.NumberENG = Numberbox2
|
133 |
|
|
|
134 |
|
|
' le label
|
135 |
|
|
Label1 = group2.AddControl(6, swPropertyManagerPageControlType_e.swControlType_Label, "Creer des points dans le volume : Donnez la valeur de la zone de transition", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_Enabled, "Cette option permet de faire varier le coefficient de raffinement de maillage dans le volume")
|
136 |
|
|
|
137 |
|
|
'Numberbox1
|
138 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
139 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
140 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
141 |
|
|
Numberbox1 = group2.AddControl(7, controlType, "zone de transition", leftAlign, options, "Entrez la valeur de la zone de transition")
|
142 |
|
|
Numberbox1.Value = 0
|
143 |
|
|
Numberbox1.SetRange(2, 0, 10, 1, True)
|
144 |
|
|
EnregistrementCode.numberbox1 = Numberbox1
|
145 |
|
|
|
146 |
|
|
' le premier checkbox, valeurs au points pour arrondis
|
147 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
148 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
149 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
150 |
|
|
checkArrondi = group2.AddControl(8, controlType, "Coefficient de raffinement pour les arrondis", leftAlign, options, "Trouver les congés du modèle")
|
151 |
|
|
EnregistrementCode.checkArrondi = checkArrondi
|
152 |
|
|
|
153 |
|
|
' le numberbox pour les arrondis
|
154 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
155 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
156 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
157 |
|
|
NumberArrondi = group2.AddControl(9, controlType, "Coefficient de raffinement sur les arrondis", leftAlign, options, "Entrez la valeur du coefficient de raffinement de maillage aux points d'échantillonnage pour les arrondis")
|
158 |
|
|
NumberArrondi.Value = 0.2
|
159 |
|
|
NumberArrondi.SetRange(2, 0.000000000001, 0.999999999999, 0.1, True)
|
160 |
|
|
EnregistrementCode.NumberArrondi = NumberArrondi
|
161 |
|
|
|
162 |
|
|
|
163 |
|
|
' le second checkbox, valeurs pour les arêtes rentrantes
|
164 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
165 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
166 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
167 |
|
|
checkRentrant = group2.AddControl(10, controlType, "Coefficient de raffinement pour les arêtes rentrantes", leftAlign, options, "trouver les arêtes rentrantes")
|
168 |
|
|
EnregistrementCode.checkRentrant = checkRentrant
|
169 |
|
|
|
170 |
|
|
' le numberbox
|
171 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
172 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
173 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
174 |
|
|
NumberRentrant = group2.AddControl(11, controlType, "Coefficient de raffinement sur les arêtes rentrantes", leftAlign, options, "Entrez la valeur du coefficient de raffinement de maillage aux points d'échantillonnage pour les arêtes rentrantes")
|
175 |
|
|
NumberRentrant.Value = 0.1
|
176 |
|
|
NumberRentrant.SetRange(2, 0.000000000001, 0.9999999999999, 0.1, True)
|
177 |
|
|
EnregistrementCode.NumberRentrant = NumberRentrant
|
178 |
|
|
|
179 |
|
|
' le troisième checkbox, valeurs pour les retrait matière
|
180 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
181 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
182 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
183 |
|
|
checkMatiere = group2.AddControl(12, controlType, "Coefficient de raffinement pour les retraits matières", leftAlign, options, "Trouver les retraits matière")
|
184 |
|
|
EnregistrementCode.checkMatiere = checkMatiere
|
185 |
|
|
|
186 |
|
|
' le numberbox pour les retrait matière
|
187 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
188 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
189 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
190 |
|
|
NumberMatiere = group2.AddControl(13, controlType, "Coefficient de raffinement pour les retraits matières", leftAlign, options, "Entrez la valeur du coefficient de raffinement de maillage aux points d'échantillonnage pour les retraits matière")
|
191 |
|
|
NumberMatiere.Value = 0.25
|
192 |
|
|
NumberMatiere.SetRange(2, 0.000000000001, 0.9999999999999, 0.1, True)
|
193 |
|
|
EnregistrementCode.NumberMatiere = NumberMatiere
|
194 |
|
|
|
195 |
|
|
'checkbox selectionner des entité a raffiner
|
196 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
197 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
198 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
199 |
|
|
checkentite = group2.AddControl(14, controlType, "selectionner des entités à raffiner : ", leftAlign, options, "selectionner des entités")
|
200 |
|
|
EnregistrementCode.checkEntites = checkentite
|
201 |
|
|
|
202 |
|
|
'Selectionpog, qui contiendra les entités sélectionnées
|
203 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Selectionbox
|
204 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
205 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
206 |
|
|
selectionpog = group2.AddControl(15, controlType, "sélectionnées des entités", leftAlign, options, "Montre les entités qui ont été sélectionnées")
|
207 |
|
|
If Not selectionpog Is Nothing Then
|
208 |
|
|
Dim filter() As Integer = New Integer() {swSelectType_e.swSelVERTICES, swSelectType_e.swSelEDGES, swSelectType_e.swSelFACES} ' pour sélectionner juste les faces, aretes et sommets
|
209 |
|
|
selectionpog.Height = 50
|
210 |
|
|
selectionpog.SetSelectionFilters(filter)
|
211 |
|
|
End If
|
212 |
|
|
EnregistrementCode.selectionpog = selectionpog
|
213 |
|
|
|
214 |
|
|
'numberbox pour les entités
|
215 |
|
|
label11 = group2.AddControl(16, swPropertyManagerPageControlType_e.swControlType_Label, "Coefficient de raffinement des entités selectionnées", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_Enabled, "Entrer la valeur aux points des entités selectionnées")
|
216 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Numberbox
|
217 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
218 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove
|
219 |
|
|
Numberentités = group2.AddControl(17, controlType, "Coefficient de raffinement global pour les entités selectionnées", leftAlign, options, "Entrer la valeur du coefficient de raffinement aux points d'échantillonnage pour les entités selectionnées")
|
220 |
|
|
Numberentités.Value = 0.25
|
221 |
|
|
Numberentités.SetRange(2, 0.000000000001, 0.9999999999999, 0.1, True)
|
222 |
|
|
EnregistrementCode.Numberentités = Numberentités
|
223 |
|
|
|
224 |
|
|
'raffinner individuellement les entité selectionnées
|
225 |
|
|
controlType = swPropertyManagerPageControlType_e.swControlType_Checkbox
|
226 |
|
|
leftAlign = swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge
|
227 |
|
|
options = swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible
|
228 |
|
|
CheckEnt = group2.AddControl(18, controlType, "raffiner les entités selectionnées individuellement", leftAlign, options, "selectionner des entités")
|
229 |
|
|
EnregistrementCode.CheckEnt = CheckEnt
|
230 |
|
|
|
231 |
bournival |
46 |
|
232 |
|
|
|
233 |
|
|
options = swAddGroupBoxOptions_e.swGroupBoxOptions_Visible + swAddGroupBoxOptions_e.swGroupBoxOptions_Checkbox
|
234 |
|
|
group4 = ppage.AddGroupBox(40, "Pré-Optimisation Automatique", options)
|
235 |
|
|
EnregistrementCode.Groupe4 = group4
|
236 |
bournival |
48 |
Dim labelCommentaire As sldworks.PropertyManagerPageLabel = group4.AddControl(47, swPropertyManagerPageControlType_e.swControlType_Label, "Valable uniquement pour les retraits de matière pour l'instant", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible, "")
|
237 |
|
|
|
238 |
bournival |
46 |
' le label
|
239 |
|
|
labelRemi1 = group4.AddControl(45, swPropertyManagerPageControlType_e.swControlType_Label, "Précision d'analyse", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_Enabled, "Précision d'analyse souhaitée")
|
240 |
|
|
|
241 |
|
|
curseur = group4.AddControl(41, swPropertyManagerPageControlType_e.swControlType_Slider, "Précision d'analyse", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove, "Mettre du texte ici")
|
242 |
|
|
curseur.setrange(1, 99)
|
243 |
bournival |
48 |
curseur.Position = 95
|
244 |
|
|
curseur.Style = swPropMgrPageSliderStyle_e.swPropMgrPageSliderStyle_NotifyWhileTracking + swPropMgrPageSliderStyle_e.swPropMgrPageSliderStyle_AutoTicks
|
245 |
|
|
curseur.TickFrequency = 5
|
246 |
|
|
curseur.LineSize = 3
|
247 |
bournival |
46 |
EnregistrementCode.curseur = curseur
|
248 |
|
|
|
249 |
|
|
' le label
|
250 |
|
|
labelRemi2 = group4.AddControl(46, swPropertyManagerPageControlType_e.swControlType_Label, "Limiteur de pente d'écart nodal", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_Enabled, "Limiteur de pente d'évolution d'écart nodal")
|
251 |
|
|
|
252 |
|
|
limiteur = group4.AddControl(42, swPropertyManagerPageControlType_e.swControlType_Numberbox, "Limiteur de pente d'écart nodal", swPropertyManagerPageControlLeftAlign_e.swControlAlign_LeftEdge, swAddControlOptions_e.swControlOptions_Enabled + swAddControlOptions_e.swControlOptions_Visible + swAddControlOptions_e.swControlOptions_SmallGapAbove, "Encore du texte")
|
253 |
|
|
limiteur.Value = 0.25
|
254 |
|
|
limiteur.SetRange(SwConst.swNumberboxUnitType_e.swNumberBox_UnitlessDouble, 0.01, 1, 0.05, True)
|
255 |
|
|
EnregistrementCode.limiteur = limiteur
|
256 |
|
|
|
257 |
bournival |
40 |
' le troisième groupe pour les études multi-dimensionnelles
|
258 |
|
|
options = swAddGroupBoxOptions_e.swGroupBoxOptions_Visible + swAddGroupBoxOptions_e.swGroupBoxOptions_Checkbox ' + swAddGroupBoxOptions_e.swGroupBoxOptions_Checked
|
259 |
|
|
group3 = ppage.AddGroupBox(19, "Étude multi-dimensionnelle", options)
|
260 |
|
|
EnregistrementCode.Groupe3 = group3
|
261 |
|
|
|
262 |
|
|
|
263 |
|
|
End Sub
|
264 |
|
|
|
265 |
|
|
End Class
|
266 |
|
|
|
267 |
|
|
End Namespace |