Bonjour les gens ^^

Alors j'ai un programme de création de points et de lignes, les points et lignes sont stockées dans des collections observables lors de leur création. (double clik pour les points et cliker déplacer pour les arcs)
le problème est que j'affiche les points mais je n'arrive pas a afficher le trait de la ligne sur mon espace de travail.

J'essaye également de binder ces collections pour les afficher dans des listBox afin de pouvoir lister mes points et lignes et aussi d'afficher leur paramètres d'objets dans des textbox lors de leur sélection.

Si quelqu'un a une petite idée ce serait troooop cool


Le code .cs de mes objets points et arcs stockés encapsulés dans une classe étage

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
public class Etages : INotifyPropertyChanged
    {
        private int propNo_Etage;
        public int No_Etage
        {
            get { return (this.propNo_Etage); }
            set
            {
                if (value != propNo_Etage)
                {
                    this.propNo_Etage = value;
                    RaisePropertyChanged("No_Etage");
                }
            }
        }
 
        private double propZ_Etage;
        public double Z_Etage
        {
            get { return (this.propZ_Etage); }
            set
            {
                if (value != propZ_Etage)
                {
                    this.propZ_Etage = value;
                    RaisePropertyChanged("Z_Etage");
                }
            }
        }
 
        private string propNom_Etage;
        public string Nom_Etage
        {
            get { return(this.propNom_Etage); }
            set { this.propNom_Etage = value; }
        }
        /*
        private ObservableCollection<Etages.ClassNoeuds> propCollecNoeuds;
        public ObservableCollection<Etages.ClassNoeuds> CollecNoeuds
        {
            get { return (this.propCollecNoeuds); }
            set { this.propCollecNoeuds = value; }
        }
 
        private ObservableCollection<Etages.ClassArcs> propCollecArcs;
        public ObservableCollection<Etages.ClassArcs> CollecArcs
        {
            get { return (this.propCollecArcs); }
            set { this.propCollecArcs = value; }
        }
        */
        //Evenement  de changement de propriétés 
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string propName)
        {
            PropertyChangedEventHandler h = PropertyChanged;
            if (h != null)
                h(this, new PropertyChangedEventArgs(propName));
        }
 
        //Constructeur
        public Etages()
        {
            No_Etage = 0;
            Z_Etage = 0;
            Nom_Etage = "";
            ObservableCollection<Etages.ClassNoeuds> CollecNoeuds = new ObservableCollection<Etages.ClassNoeuds>();
            ObservableCollection<Etages.ClassArcs> CollecArcs = new ObservableCollection<Etages.ClassArcs>();
        }
 
        //Constructeur Surchargé 
        public Etages(int ONo_Etage, double OZ_Etage, string ONom_Etage)
            : this()
        {
            No_Etage = ONo_Etage;
            Z_Etage = OZ_Etage;
            Nom_Etage = ONom_Etage;
            ObservableCollection<Etages.ClassNoeuds> CollecNoeuds = new ObservableCollection<Etages.ClassNoeuds>();
            ObservableCollection<Etages.ClassArcs> CollecArcs = new ObservableCollection<Etages.ClassArcs>();
        }
 
        //Constructeur Surchargé pour le chargement d'un projet  
        public Etages(int ONo_Etage, double OZ_Etage, string ONom_Etage, ObservableCollection<Etages.ClassNoeuds> OldCollecNoeuds, ObservableCollection<Etages.ClassArcs> OldCollecArcs)
            : this()
        {
            No_Etage = ONo_Etage;
            Z_Etage = OZ_Etage;
            Nom_Etage = ONom_Etage;
            ObservableCollection<Etages.ClassNoeuds> CollecNoeuds = new ObservableCollection<Etages.ClassNoeuds>(OldCollecNoeuds);
            ObservableCollection<Etages.ClassArcs> CollecArcs = new ObservableCollection<Etages.ClassArcs>(OldCollecArcs);
        }
 
 
        public class ClassNoeuds : INotifyPropertyChanged
        {
            //Constructeur
            public ClassNoeuds()
            {
                No_Etage = 0;
                Coord_P = new Point(0, 0);
                No_ID_Noeud = 00;
                Coord_Z = 0;
                TypeNoeud = 0;
            }
 
            //Constructeur Surchargé
            public ClassNoeuds(int ONo_Etage, int OID_Noeud, Point OCoordPoint, double OCoord_Z, int OTypeNoeud)
                : this()
            {
                No_Etage = ONo_Etage;
                Coord_P = OCoordPoint;
                No_ID_Noeud = OID_Noeud;
                Coord_Z = OCoord_Z;
                TypeNoeud = OTypeNoeud;
            }
 
            //Declaration des differents parametres de la classe Noeuds
            private int propNo_ID_Noeud;
            public int No_ID_Noeud
            {
                get { return (this.propNo_ID_Noeud); }
                set
                {
                    if (value != propNo_ID_Noeud)
                    {
                        this.propNo_ID_Noeud = value;
                        NotifyPropertyChanged("No_ID_Noeud");
                    }
                }
            }
 
            private int propNo_Etage;
            public int No_Etage
            {
                get { return (this.propNo_Etage); }
                set
                {
                    if (value != propNo_Etage)
                    {
                        this.propNo_Etage = value;
                        NotifyPropertyChanged("No_Etage");
                    }
                }
            }
 
            private Point propCoord_P;
            public Point Coord_P
            {
                get { return propCoord_P; }
                set
                {
                    if (value != propCoord_P)
                    {
                        propCoord_P = value;
                        NotifyPropertyChanged("Coord_P");
                    }
                }
            }
 
            private Point propCenterEllipse;
            public Point CenterEllipse
            {
                get { return propCenterEllipse; }
                set
                {
                    if (value != propCenterEllipse)
                    {
                        propCenterEllipse = value;
                        NotifyPropertyChanged("CenterEllipse");
                    }
                }
            }
 
            private double propCoord_Z;
            public double Coord_Z
            {
                get { return (this.propCoord_Z); }
                set
                {
                    if (value != propCoord_Z)
                    {
                        this.propCoord_Z = value;
                        NotifyPropertyChanged("Coord_Z");
                    }
                }
            }
 
            private int propTypeNoeud;//10 = Sans Type ; 20 = Escaliers ; 30 = Ascenseur 
            public int TypeNoeud
            {
                get { return (this.propTypeNoeud); }
                set
                {
                    if (value != propTypeNoeud)
                    {
                        this.propTypeNoeud = value;
                        NotifyPropertyChanged("TypeNoeud");
                    }
                }
            }
 
            public double Width { get; set; }
            public double Height { get; set; }
            public SolidColorBrush ColorPoint { get; set; }
            public SolidColorBrush ColorContour { get; set; }
 
            //Evenement  de changement de propriétés 
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(String propName)
            {
                PropertyChangedEventHandler h = PropertyChanged;
                if (h != null)
                    h(this, new PropertyChangedEventArgs(propName));
            }
 
            //Fonction de changement de la valeur du Z du point 
            public void Change_Z(double New_Z)
            {
                this.Coord_Z = New_Z;
            }
        }
 
        public class ClassArcs : INotifyPropertyChanged
        {
            //Constructeur
            public ClassArcs()
            {
                Node_D = new ClassNoeuds();
                Node_F = new ClassNoeuds();
                Ligne_Arc = new LineGeometry();
                Path_Arc = new System.Windows.Shapes.Path();
                No_ID_Arc = 0;
                TypeArc = 0;
            }
 
            //Constructeur Surchargé 
            public ClassArcs(ClassNoeuds ONode_D, ClassNoeuds ONode_F, LineGeometry OMyLine, System.Windows.Shapes.Path OMyPath, int ONo_ID_Arc, int OTypeArc)
                : this()
            {
                Node_D = ONode_D;
                Node_F = ONode_F;
                Ligne_Arc = OMyLine;
                Path_Arc = OMyPath;
                No_ID_Arc = ONo_ID_Arc;
                TypeArc = OTypeArc;
            }
 
            //Declaration des differents parametres de la classe Arcs
            private ClassNoeuds node_D;
            public ClassNoeuds Node_D
            {
                get { return node_D; }
                set
                {
                    if (value != node_D)
                    {
                        node_D = value;
                        NotifyPropertyChanged("Node_D");
                    }
                }
            }
 
            private ClassNoeuds node_F;
            public ClassNoeuds Node_F
            {
                get { return node_F; }
                set
                {
                    if (value != node_F)
                    {
                        node_F = value;
                        NotifyPropertyChanged("Node_F");
                    }
                }
            }
 
            private LineGeometry myline;
            public LineGeometry Ligne_Arc
            {
                get { return (this.myline); }
                set
                {
                    if (value != myline)
                    {
                        this.myline = value;
                        NotifyPropertyChanged("Ligne_Arc");
                    }
                }
            }
 
            private System.Windows.Shapes.Path mypath;
            public System.Windows.Shapes.Path Path_Arc
            {
                get { return (this.mypath); }
                set
                {
                    if (value != mypath)
                    {
                        this.mypath = value;
                        NotifyPropertyChanged("Path_Arc");
                    }
                }
            }
 
            private int propNo_ID_Arc;
            public int No_ID_Arc
            {
                get { return (this.propNo_ID_Arc); }
                set
                {
                    if (value != propNo_ID_Arc)
                    {
                        this.propNo_ID_Arc = value;
                        NotifyPropertyChanged("No_ID_Arc");
                    }
                }
            }
 
            private int propTypeArc;//10 = Sans Type ; 20 = Murs ; 30 = Portes ; 40 = Escaliers
            public int TypeArc
            {
                get { return (this.propTypeArc); }
                set
                {
                    if (value != propTypeArc)
                    {
                        this.propTypeArc = value;
                        NotifyPropertyChanged("TypeArc");
                    }
                }
            }
 
            public SolidColorBrush ColorLigne { get; set; }//Couleur du trait 
            public LineGeometry GeometryLigne { get; set; }//Type de ligne 
            public Pen Ligne { get; set; }//Largeur du trait 
 
            //Evenement de changement de propriétés 
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(String propName)
            {
                PropertyChangedEventHandler h = PropertyChanged;
                if (h != null)
                    h(this, new PropertyChangedEventArgs(propName));
            }
        }
    }
Le code XAML de la fenêtre du programme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1.Models"
        Title="MainWindow" Height="465" Width="924" Name="CreaMap" Loaded="CreaMap_Loaded">
    <!--<Window.Resources>
        <local:CollecNoeuds x:Key="CollecNoeuds" />
        <Style TargetType="listBox1">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Coord_P}">
 
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>-->
    <Grid DataContext="{Binding}" Background="#FFDBCDCD" >
 
        <ItemsControl x:Name="ItemPointSimple" 
                      Margin="12,24,375,106" BorderBrush="#FFE84747" Opacity="1" Background="White"
                      ItemsSource="{Binding CollecEtages}" DataContext="{Binding}"
                      PreviewMouseLeftButtonUp="ItemPointSimple_PreviewMouseLeftButtonUp" 
                      PreviewMouseLeftButtonDown="ItemPointSimple_PreviewMouseLeftButtonDown" 
                      PreviewMouseMove="ItemPointSimple_PreviewMouseMove" 
                      PreviewMouseDoubleClick="ItemPointSimple_PreviewMouseDoubleClick" 
                      PreviewMouseRightButtonDown="ItemPointSimple_PreviewMouseRightButtonDown" 
                      PreviewMouseRightButtonUp="ItemPointSimple_PreviewMouseRightButtonUp" >
 
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas x:Name="cnvTimeZones" Background="Transparent" ClipToBounds="True" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
 
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Canvas.Left" Value="{Binding Path=Coord_P.X, Mode=TwoWay}"/>
                    <Setter Property="Canvas.Top" Value="{Binding Path=Coord_P.Y, Mode=TwoWay}"/>
                </Style>
            </ItemsControl.ItemContainerStyle>
 
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Ellipse
                             Width="{Binding Width}" Height="{Binding Height}" 
                             Fill="{Binding ColorPoint}" Stroke="{Binding ColorContour}" >
                    </Ellipse>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
 
        </ItemsControl>
 
        <!--<ContentControl Content="{Binding Source={StaticResource MyNoeuds}}" ContentTemplate="{StaticResource DetailTemplate}"-->
        <TextBox Height="23" HorizontalAlignment="Left" Margin="659,130,0,0" Name="tb_Coord_P_Noeud" 
                 VerticalAlignment="Top" Width="120">
            <TextBox.Text>
                <Binding XPath="Coord_P" Source="listBox2" Mode="TwoWay" 
                         UpdateSourceTrigger="PropertyChanged" />
            </TextBox.Text>
        </TextBox>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="659,159,0,0" Name="tb_Coord_Z_Noeud" 
                 VerticalAlignment="Top" Width="120" >
            <TextBox.Text>
                <Binding Source="CollecNoeuds" Path="Coord_Z" Mode="TwoWay" 
                         UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="659,188,0,0" Name="tb_ID_Noeud" 
                 VerticalAlignment="Top" Width="120" >
            <TextBox.Text>
                <Binding Source="CollecNoeuds" Path="No_ID_Noeud" Mode="TwoWay" 
                         UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="659,217,0,0" Name="tb_Etage_Noeud" 
                 VerticalAlignment="Top" Width="120" >
            <TextBox.Text>
                <Binding Source="CollecNoeuds" Path="No_Etage" Mode="TwoWay" 
                         UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="659,246,0,0" Name="tb_Type_Noeud" 
                 VerticalAlignment="Top" Width="120" >
            <TextBox.Text>
                <Binding Source="CollecNoeuds" Path="TypeNoeud" Mode="TwoWay" 
                         UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
 
        <ListBox Name="listBox2" Height="100" HorizontalAlignment="Left" Margin="533,24,0,0" 
                 VerticalAlignment="Top" Width="120" Background="#FFC3D11E" 
                 MouseDoubleClick="listBox2_MouseDoubleClick" 
                 SelectedValue="{Binding Coord_P}" 
                 SelectedValuePath="Coord_P" 
 
                 ItemsSource="{Binding}" />
 
        <ListBox Height="100" HorizontalAlignment="Left" Margin="533,0,0,195" Name="listBox3" 
                 VerticalAlignment="Bottom" Width="120" BorderBrush="#FF3434B1" />
 
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="560,236,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="699,296,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
 
        <!--Gestion des outils-->
        <TabControl Height="100" HorizontalAlignment="Left" Margin="402,321,0,0" VerticalAlignment="Top" Width="377">
            <TabItem Header="Mode Filaire" Name="Mode"></TabItem>
            <TabItem Header="Mode HMM">
                <Grid>
                    <ComboBox Height="23" HorizontalAlignment="Left" Margin="0,6,0,0" VerticalAlignment="Top" Width="120" Name="HMM_Choix_Point_Arc" />
                    <ComboBox Height="23" HorizontalAlignment="Left" Margin="247,6,0,0" VerticalAlignment="Top" Width="120" Name="HMM_Choix_Type" />
                </Grid>
            </TabItem>
        </TabControl>
        <Grid Margin="402,348,124,9">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0*" />
                <ColumnDefinition Width="367*" />
            </Grid.ColumnDefinitions>
            <ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" Margin="6,6,0,0" VerticalAlignment="Top" Width="120" Name="cb_Filaire_Choix_Point_Arc" SelectionChanged="cb_Filaire_Choix_Point_Arc_SelectedChanged" />
            <ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" Margin="241,6,0,0" VerticalAlignment="Top" Width="120" Name="cb_Filaire_Choix_Type" SelectionChanged="cb_Filaire_Choix_Type_SelectedChanged" />
            <Label Content="Outils Selectionné " Grid.Column="1" Height="28" HorizontalAlignment="Left" Margin="6,34,0,0" VerticalAlignment="Top" Name="OutilsSelect" />
        </Grid>
 
        <!--Recuperation coordonnées de la souris-->
        <Label Content="Echelle en X" Height="28" HorizontalAlignment="Left" Margin="165,367,0,0" VerticalAlignment="Top" Name="EchelleX" />
        <Label Content="Echelle en Y" Height="28" HorizontalAlignment="Left" Margin="165,396,0,0" VerticalAlignment="Top" Name="EchelleY" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="44,396,0,0" VerticalAlignment="Top" Width="50" Name="PosX" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="110,396,0,0" VerticalAlignment="Top" Width="50" Name="PosY" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="44,367,0,0" VerticalAlignment="Top" Width="50" Name="PosX_M" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="110,367,0,0" VerticalAlignment="Top" Width="50" Name="PosY_M" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="236,369,0,0" VerticalAlignment="Top" Width="70" Name="PixelsScale_TextBox" />
        <CheckBox Content="X=Y" Height="18" HorizontalAlignment="Left" Margin="312,384,0,0" VerticalAlignment="Top" Name="X_prop_Y" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="236,398,0,0" VerticalAlignment="Top" Width="70" Name="PixelsScale_Y_TextBox" />
        <Label Content="Pixels/m" Height="28" HorizontalAlignment="Left" Margin="236,346,0,0" Name="PixelM" VerticalAlignment="Top" />
        <Label Content="Pixels" Height="28" HorizontalAlignment="Left" Margin="0,391,0,0" Name="lb_Pixels" VerticalAlignment="Top" Width="50" />
        <Label Content="Metres" Height="28" HorizontalAlignment="Left" Margin="-1,367,0,0" Name="lb_Metres" VerticalAlignment="Top" Width="50" />
 
 
        <ListBox Height="100" HorizontalAlignment="Left" Margin="783,130,0,0" Name="listBox4" VerticalAlignment="Top" Width="120" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="806,236,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="button3_Click" />
    </Grid>
</Window>
le Main du programme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Reflection;
 
using System.Collections.ObjectModel;
 
using WpfApplication1.Models;
 
using WpfApplication1.Projets;
 
 
namespace WpfApplication1
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    /// 
    public partial class MainWindow : Window
    {
        //Variables des collections de points et d'arcs
        //public ObservableCollection<EventItems> RectItemsSimple { get; set; }
        public ObservableCollection<Etages> CollecEtages { get; set; }
        public ObservableCollection<Etages.ClassArcs> CollecArcs { get; set; }
        public ObservableCollection<Etages.ClassNoeuds> CollecNoeuds { get; set; }
        public Etages Etage { get; set; }
 
        //Variables de l'objet compteur contenant les compteurs d'arcs et de points
        Compteur CompteurProjet = new Compteur();
 
        //Variables des arcs 
        Etages.ClassNoeuds Node_F;
        Etages.ClassNoeuds Node_D;
        Etages.ClassArcs MyArcs;
 
        //Objet ClassNoeuds pour le deplacement 
        private Etages.ClassNoeuds _draggedObjectFind = null;
        private Etages.ClassNoeuds _draggedObjectFind2 = null;
 
        //Variables de deplacement 
        bool IsDrag = false;
        bool ArcIsDrag = false;
 
        public MainWindow()
        {
            InitializeComponent();
 
            //RectItemsSimple = new ObservableCollection<EventItems>();
            CollecEtages = new ObservableCollection<Etages>();
            Etage = new Etages(1, 4, "rdc");
            CollecEtages.Add(Etage);
            CollecArcs = new ObservableCollection<Etages.ClassArcs>();
            CollecNoeuds = new ObservableCollection<Etages.ClassNoeuds>();
 
 
            //RectItemsSimple.Add(new EventItems { X = 10, Y = 10, ColorPoint = Brushes.Black, Height = 5, Width = 5 });
            //RectItemsSimple.Add(new EventItems { X = 20, Y = 10, ColorPoint = Brushes.Red, Height = 5, Width = 5 });
            //RectItemsSimple.Add(new EventItems { X = 10, Y = 40, ColorPoint = Brushes.Green, Height = 5, Width = 5 });
            //RectItemsSimple.Add(new EventItems { X = 50, Y = 40, ColorPoint = Brushes.Yellow, Height = 15, Width = 15 });
 
            ItemPointSimple.ItemsSource = CollecNoeuds;
            ItemPointSimple.DataContext = CollecNoeuds;
 
            //ItemPointSimple.ItemsSource = RectItemsSimple;
            //ItemPointSimple.DataContext = RectItemsSimple;
        }
 
        private void CreaMap_Loaded(object sender, RoutedEventArgs e)
        {
            //ComboBox Choix Outils 
            cb_Filaire_Choix_Point_Arc.Items.Add("Points");
            cb_Filaire_Choix_Point_Arc.Items.Add("Arcs");
            HMM_Choix_Point_Arc.Items.Add("Murs");
            HMM_Choix_Point_Arc.Items.Add("Portes");
        }
 
        #region Fonctions Click 
        private void ItemPointSimple_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            try
            {
                //En mode Point 
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
                {
                    ItemsControl _sourceItemsControl = new ItemsControl();
                    object _draggedObject;
 
                    if (sender is ItemsControl)
                        _sourceItemsControl = (ItemsControl)(sender);
                    else
                        return;
 
                    FrameworkElement sourceItemsContainer = _sourceItemsControl.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
 
                    if (sourceItemsContainer == null)
                        _draggedObject = _sourceItemsControl.DataContext;
                    else if (sourceItemsContainer == e.Source)
                        _draggedObject = e.Source;
                    else
                        _draggedObject = sourceItemsContainer.DataContext;
 
                    if (_draggedObject is Etages.ClassNoeuds)
                        _draggedObjectFind = _draggedObject as Etages.ClassNoeuds;
                    else
                        _draggedObjectFind = null;
 
                    IsDrag = true;
                }
 
                //================PARTIE AJOUT DES POINTS DES ARCS=========================================//   
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs"))
                {
                    //En mode Arc      
                    ArcIsDrag = true;
 
                    //On verifie si le point de départ est un noeud existant ..
                    ItemsControl _sourceItemsControl = new ItemsControl();
                    object _draggedObject;
 
                    if (sender is ItemsControl)
                        _sourceItemsControl = (ItemsControl)(sender);
                    else
                        return;
 
                    FrameworkElement sourceItemsContainer = _sourceItemsControl.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
 
                    if (sourceItemsContainer == null)
                        _draggedObject = _sourceItemsControl.DataContext;
                    else if (sourceItemsContainer == e.Source)
                        _draggedObject = e.Source;
                    else
                        _draggedObject = sourceItemsContainer.DataContext;
 
                    if (_draggedObject is Etages.ClassNoeuds)
                        _draggedObjectFind = _draggedObject as Etages.ClassNoeuds;
                    else
                        _draggedObjectFind = null;
                    //..Jusqu'ici ..
 
                    if (ArcIsDrag == true)
                    {
                        if (_draggedObjectFind is Etages.ClassNoeuds)
                        {
                            Node_D = _draggedObjectFind;//.. Si c'est le cas, le point de départ est égal au point cliqué 
                        }
                        else
                        {
                            Point MousePos = Mouse.GetPosition(ItemPointSimple);
                            double z = Etage.Z_Etage;//Z_Etage courant 
                            int ValCpt = CompteurProjet.ComptePoint;//Récupération de la valeur du compteur de points 
                            int ID = ValCpt + 1;//ID à la valeur + 1 car on part de 0 
                            int etage = Etage.No_Etage;//N_Etage courant
                            int type = 10;//Sans type 
 
                            //Création du noeud de départ avec les parametres d'entrée
                            Node_D = new Etages.ClassNoeuds();
                            MousePos.X = MousePos.X - 5;
                            MousePos.Y = MousePos.Y - 5;
                            Node_D.Coord_P = MousePos;
                            Node_D.Coord_Z = z;
                            Node_D.No_Etage = etage;
                            Node_D.No_ID_Noeud = ID;
                            Node_D.TypeNoeud = type;
                            Node_D.ColorPoint = Brushes.Red;
                            Node_D.ColorContour = Brushes.Black;
                            Node_D.Height = 10;
                            Node_D.Width = 10;
                            //Node_D.Ellipse = new EllipseGeometry();
                            //Node_D.Path = new System.Windows.Shapes.Path();
                            //Node_D.Ellipse.RadiusX = 5;
                            //Node_D.Ellipse.RadiusY = 5;
                            //Node_D.Ellipse.Center = MousePos;
                            //Node_D.Path.Stroke = Brushes.Black;
                            //Node_D.Path.Fill = Brushes.Red;
                            //Comptage du nombre d'éléments de la collection
                            int c = CollecNoeuds.Count();
                            //Ajout du noeud à l'index égal au total d'objets de la collection
                            CollecNoeuds.Insert(c, Node_D);
                            //Ajout a la listBox des noeuds 
                            listBox2.Items.Add("Noeud : " + Node_D.No_ID_Noeud);
                            //Increment Compteur Points 
                            CompteurProjet.IncCompteurPoint();
                        }
                    }
                ArcIsDrag = false;
                }
            }
            catch (NullReferenceException)
            { }
        }
 
        private void ItemPointSimple_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            try
            {
                //En mode Point 
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
                {
                    IsDrag = false;
                }
                //En mode Arc 
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs"))
                {
                    ArcIsDrag = false;
                    //On verifie si le point de d'arrivée est un noeud existant ..
                    ItemsControl _sourceItemsControl2 = new ItemsControl();
                    object _draggedObject2;
 
                    if (sender is ItemsControl)
                        _sourceItemsControl2 = (ItemsControl)(sender);
                    else
                        return;
 
                    FrameworkElement sourceItemsContainer2 = _sourceItemsControl2.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
 
                    if (sourceItemsContainer2 == null)
                        _draggedObject2 = _sourceItemsControl2.DataContext;
                    else if (sourceItemsContainer2 == e.Source)
                        _draggedObject2 = e.Source;
                    else
                        _draggedObject2 = sourceItemsContainer2.DataContext;
 
                    if (_draggedObject2 is Etages.ClassNoeuds)
                        _draggedObjectFind2 = _draggedObject2 as Etages.ClassNoeuds;
                    else
                        _draggedObjectFind2 = null;
                    //..Jusqu'ici ..
 
                    if (ArcIsDrag == false)
                    {
                        if (_draggedObjectFind2 is Etages.ClassNoeuds)
                        {
                            Node_F = _draggedObjectFind2;//.. Si c'est le cas, le point de départ est égal au point cliqué 
                        }
                        else
                        {
                            Point MousePos = Mouse.GetPosition(ItemPointSimple);
                            double z = Etage.Z_Etage;//Z_Etage courant 
                            int ValCpt = CompteurProjet.ComptePoint;
                            int ID = ValCpt + 1;
                            int etage = Etage.No_Etage;//N_Etage courant
                            int type = 10;//Sans type 
 
                            //Création du noeud de fin de l'arc avec les parametres d'entrée
                            Node_F = new Etages.ClassNoeuds();
                            MousePos.X = MousePos.X - 5;
                            MousePos.Y = MousePos.Y - 5;
                            Node_F.Coord_P = MousePos;
                            Node_F.Coord_Z = z;
                            Node_F.No_Etage = etage;
                            Node_F.No_ID_Noeud = ID;
                            Node_F.TypeNoeud = type;
                            Node_F.ColorPoint = Brushes.Red;
                            Node_F.ColorContour = Brushes.Black;
                            Node_F.Height = 10;
                            Node_F.Width = 10;
 
                            //Comptage du nombre d'éléments de la collection
                            int c = CollecNoeuds.Count();
                            //Ajout du noeud à l'index égal au total d'objets de la collection
                            CollecNoeuds.Insert(c, Node_F);
                            //Ajout a la listBox des noeuds 
                            listBox2.Items.Add("Noeud : " + Node_F.No_ID_Noeud);
                            //Increment Compteur Points 
                            CompteurProjet.IncCompteurPoint();
                        }
 
                            //Parametres pour la creation de l'arc 
                            int ValCpt2 = CompteurProjet.CompteArc;
                            int ID2 = ValCpt2 + 1;
                            int type2 = 0;
                            try
                            {
                                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Sans Type"))
                                { type2 = 10; }
                                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Murs"))
                                { type2 = 20; }
                                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Portes"))
                                { type2 = 30; }
                                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Escaliers"))
                                { type2 = 40; }
                                else
                                { MessageBox.Show("Veuillez selectionner un type d'arc"); }
 
                                //Création de l'arc avec les parametres en entrée 
                                LineGeometry MyLine = new LineGeometry();
                                MyLine.StartPoint = Node_D.Coord_P;
                                MyLine.EndPoint = Node_F.Coord_P;
 
                                System.Windows.Shapes.Path MyPath = new System.Windows.Shapes.Path();
                                MyPath.Stroke = Brushes.Blue;
                                MyPath.StrokeThickness = 2;
                                MyPath.Width = 2;
                                MyPath.Data = MyLine;
                                MyPath.Fill = Brushes.Blue;
 
                                MyArcs = new Etages.ClassArcs();
                                MyArcs.Node_D = Node_D;
                                MyArcs.Node_F = Node_F;
                                MyArcs.No_ID_Arc = ID2;
                                MyArcs.TypeArc = type2;
 
                                //MyArcs.Ligne_Arc = MyLine;
                                MyArcs.Path_Arc = MyPath;
 
                                //Comptage du nombre d'objets dans la collection
                                int c2 = CollecArcs.Count();
                                //Ajout de l'arc à la collection d'arc
                                CollecArcs.Insert(c2, MyArcs);
                                //Incrementation du compteur d'arcs
                                CompteurProjet.IncCompteurArc();
 
                                //ItemsControl cnv = sender as ItemsControl;
                                //cnv.CaptureMouse();
 
                                //UIElement elem = e.OriginalSource as UIElement; //note la difference avec SampleArc
                                //if (elem.GetType() == typeof(System.Windows.Shapes.Path))
                                //{
                                //    selectedPath = (System.Windows.Shapes.Path)elem;
                                //    prevFill = selectedPath.Fill;
                                //    selectedEllipseNode = selectedPath.Data as EllipseGeometry;
 
                                //    if (selectedEllipseNode == null) return;
 
                                //    selectedPath.Fill = Brushes.Blue;
                                //    cnv.CaptureMouse();
                                //}
                                ArcIsDrag = false;
                            }
                            catch (NullReferenceException)
                            {
                                MessageBox.Show("Veuillez selectionner un outil");
                            }
 
                    }
                }
            }
            catch (NullReferenceException)
            { }
        }
 
        private void ItemPointSimple_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            Point ptMove = Mouse.GetPosition(ItemPointSimple);
            try
            {
                //En mode Point 
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
                {
                    //Point MouseMovePositionRecord = Mouse.GetPosition(ItemPointSimple);
                    ptMove.X = ptMove.X - 5;
                    ptMove.Y = ptMove.Y - 5;
                    if (IsDrag & _draggedObjectFind != null) _draggedObjectFind.Coord_P = (ptMove);
                    return;
                }
                //En mode Arc 
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && ArcIsDrag == true)
                {
                    ptMove.X = ptMove.X - 5;
                    ptMove.Y = ptMove.Y - 5;
                    if (MyArcs != null) MyArcs.Node_F.Coord_P = (ptMove);
                    return;
                }
            }
            catch (NullReferenceException)
            { }
 
            #region Position Souris
            //Recuperation position souris
            Point position = e.GetPosition(ItemPointSimple);
            //Recuperation position souris pour conversion en metres 
            Point Position_X = e.GetPosition(ItemPointSimple);
            Point Position_Y = e.GetPosition(ItemPointSimple);
            //Affichage dans les textBox's de la position de la souris en pixels 
            PosX.Text = "X : " + position.X.ToString();
            PosY.Text = "Y : " + position.Y.ToString();
            //Cas où l'echelle de X et Y est identique 
            if (X_prop_Y.IsChecked == true)
            {
                //Recuperation de valeur d'echelle entrée par l'user 
                double PixelsScale;
                double.TryParse(PixelsScale_TextBox.Text, out PixelsScale);
                //Calcul position souris rapport à l'echelle 
                double position_X_M = (Position_X.X) / PixelsScale;
                double position_Y_M = (Position_Y.Y) / PixelsScale;
                //Affichage dans les textBox's de la position de la souris en metres avec l'echelle entrée par l'user
                PosX_M.Text = "X : " + position_X_M.ToString();
                PosY_M.Text = "Y : " + position_Y_M.ToString();
            }
            //Cas où l'echelle de X et Y est differente 
            else
            {
                //Recuperation de valeur d'echelle X entrée par l'user 
                double PixelsScale_X;
                double.TryParse(PixelsScale_TextBox.Text, out PixelsScale_X);
                //Recuperation de valeur d'echelle Y entrée par l'user 
                double PixelsScale_Y;
                double.TryParse(PixelsScale_Y_TextBox.Text, out PixelsScale_Y);
                //Calcul position souris rapport à l'echelle 
                double position_X_M = (Position_X.X) / PixelsScale_X;
                double position_Y_M = (Position_Y.Y) / PixelsScale_Y;
                //Affichage dans les textBox's de la position de la souris en metres avec l'echelle entrée par l'user
                PosX_M.Text = "X(Metres): " + position_X_M.ToString();
                PosY_M.Text = "Y(Metres): " + position_Y_M.ToString();
            }
            #endregion
 
        }
 
        private void ItemPointSimple_PreviewMouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                //================PARTIE AJOUT DES POINTS=========================================//
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
                {
                    Point MousePos = Mouse.GetPosition(ItemPointSimple);
                    double z = Etage.Z_Etage;//Z_Etage courant 
                    int ValCpt = CompteurProjet.ComptePoint;
                    int ID = ValCpt + 1;
                    int etage = Etage.No_Etage;//N_Etage courant
                    int type = 0;
                    try
                    {
                        if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Sans Type"))
                        { type = 10; }
                        else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Escaliers"))
                        { type = 20; }
                        else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Ascenseur"))
                        { type = 30; }
                        else
                        { MessageBox.Show("Veuillez selectionner un type de point"); }
 
                        AjoutNoeudsCollec(MousePos, z, etage, ID, type);
                    }
                    catch (NullReferenceException)
                    {
                        MessageBox.Show("Veuillez selectionner un outil de point");
                    }
                }
 
                else
                {
                    MessageBox.Show("Veuillez selectionner un outil 1");
                }
            }
            catch(NullReferenceException)
            {
                MessageBox.Show("Veuillez selectionner un outil 2");
            }
 
        }
 
        private void ItemPointSimple_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
                {
                    ItemsControl _sourceItemsControl = new ItemsControl();
                    object _draggedObject;
 
                    if (sender is ItemsControl)
                        _sourceItemsControl = (ItemsControl)(sender);
                    else
                        return;
 
                    FrameworkElement sourceItemsContainer = _sourceItemsControl.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
 
                    if (sourceItemsContainer == null)
                        _draggedObject = _sourceItemsControl.DataContext;
                    else if (sourceItemsContainer == e.Source)
                        _draggedObject = e.Source;
                    else
                        _draggedObject = sourceItemsContainer.DataContext;
 
                    if (_draggedObject is Etages.ClassNoeuds)
                    {
                        _draggedObjectFind = _draggedObject as Etages.ClassNoeuds;
                        SupprimeNoeudsCollec(_draggedObjectFind);//Suppression du noeud selectionné 
                    }
                    else
                        _draggedObjectFind = null;
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs"))
                {
                    SupprimeNoeudsCollec(Node_D);//Si click durant un tracage d'arc, le noeud de départ est supprimé
                    SupprimeNoeudsCollec(Node_F);//Si click durant un tracage d'arc, le noeud de fin est supprimé
 
                }
            }
            catch (NullReferenceException)
            { }
        }
 
        #endregion
 
        #region Fonctions Ajout/Suppression Arcs & Points
        public void AjoutArcsCollec(Etages.ClassNoeuds _node_D, Etages.ClassNoeuds _node_F, LineGeometry _Ligne_Arc, System.Windows.Shapes.Path _Path_Arc, int _no_ID_Arc, int _TypeArc)
        {
            //Création de l'arc avec les parametres en entrée 
            Etages.ClassArcs MyArcs = new Etages.ClassArcs();
            MyArcs.Node_D = _node_D;
            MyArcs.Node_F = _node_F;
            MyArcs.Ligne_Arc = _Ligne_Arc;
            MyArcs.Path_Arc = _Path_Arc;
            MyArcs.No_ID_Arc = _no_ID_Arc;
            MyArcs.TypeArc = _TypeArc;
 
            //LineGeometry MyLine = new LineGeometry();
            //MyLine.StartPoint = _node_D.Coord_P;
            //MyLine.EndPoint = _node_F.Coord_P;
 
            //System.Windows.Shapes.Path MyPath = new System.Windows.Shapes.Path();
            //MyPath.Stroke = Brushes.Blue;
            //MyPath.StrokeThickness = 2;
            //MyPath.Data = MyLine;
 
 
 
            //Comptage du nombre d'objets dans la collection
            int c = CollecArcs.Count();
 
            //Ajout de l'arc à la collection d'arc
            CollecArcs.Insert(c, MyArcs);
 
            //Incrementation du compteur d'arcs
            CompteurProjet.IncCompteurArc();
        }
 
        public void SupprimeArcsCollec(Etages.ClassArcs _Arcs)
        {
            if (MessageBox.Show("Etes vous sûr de vouloir supprimer l'arc No " + _Arcs.No_ID_Arc + " ?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                //Récupération de l'index de l'arc choisi 
                int MyIndex = CollecArcs.IndexOf(_Arcs);
 
                //Suppression de l'arc à l'index choisi
                CollecArcs.RemoveAt(MyIndex);
 
                //Comptage du nombre d'éléments de la collection
                int c = CollecArcs.Count();
            }
            else { }
        }
 
        public void AjoutNoeudsCollec(Point _Coord_P, double _Coord_Z, int _no_Etage, int _no_ID_Noeuds, int _TypeNoeud)
        {
            //Création du nouveau noeud avec les parametres d'entrée
            Etages.ClassNoeuds MyNoeuds = new Etages.ClassNoeuds();
            _Coord_P.X = _Coord_P.X - 5;//Afin de centrer le point sur le click 
            _Coord_P.Y = _Coord_P.Y - 5;
            MyNoeuds.Coord_P = _Coord_P;
            MyNoeuds.Coord_Z = _Coord_Z;
            MyNoeuds.No_Etage = _no_Etage;
            MyNoeuds.No_ID_Noeud = _no_ID_Noeuds;
            MyNoeuds.TypeNoeud = _TypeNoeud;
            MyNoeuds.ColorPoint = Brushes.Red;
            MyNoeuds.ColorContour = Brushes.Black;
            MyNoeuds.Height = 10;//Dimensions du point 
            MyNoeuds.Width = 10;
 
            //Comptage du nombre d'éléments de la collection
            int c = CollecNoeuds.Count();
 
            //Ajout du noeud à l'index égal au total d'objets de la collection
            CollecNoeuds.Insert(c, MyNoeuds);
 
            //Ajout a la listBox des noeuds 
            listBox2.Items.Add("Noeud : " + MyNoeuds.No_ID_Noeud);
 
            //Increment Compteur Points 
            CompteurProjet.IncCompteurPoint();
        }
 
        public void SupprimeNoeudsCollec(Etages.ClassNoeuds _Noeuds)
        {
            if (MessageBox.Show("Etes vous sûr de vouloir supprimer le point No " + _Noeuds.No_ID_Noeud + " ?", "Confirmation", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                //Récupération de l'index du noeud choisi 
                int MyIndex = CollecNoeuds.IndexOf(_Noeuds);
 
                if (MyIndex >= 0 && MyIndex <= CollecNoeuds.Count())
                {
                    //Suppression du noeud à l'index choisi
                    CollecNoeuds.RemoveAt(MyIndex);
                }
                else { }
 
                //Parcours de la collection d'arcs et suppression des arcs ayant en point_D ou Point_F le Noeuds d'entrée 
                foreach (Etages.ClassArcs ClassArcs in CollecArcs)
                {
                    if (ClassArcs.Node_D == _Noeuds)
                    {
                        SupprimeArcsCollec(ClassArcs);
                        return;
                    }
                    else if (ClassArcs.Node_F == _Noeuds)
                    {
                        SupprimeArcsCollec(ClassArcs);
                        return;
                    }
                    else { }
                }
 
                //Compte du nombre d'objets dans la collection 
                int c = CollecNoeuds.Count();
 
                //Suppression du neoud de la listBox des noeuds 
                listBox2.Items.Remove(_Noeuds);
 
                //Mise a jour de l'affichage de la listBox 
                listBox2.Items.Refresh();
            }
            else
            {
                return;
            }
 
 
        }
        #endregion
 
        #region Choix d'outils
        //ComboBox avec choix des differents type d'outils    
        private void cb_Filaire_Choix_Point_Arc_SelectedChanged(object sender, EventArgs e)
        {
            cb_Filaire_Choix_Type.Items.Clear();
            //Mode Filaire Points
            if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points"))
            {
                cb_Filaire_Choix_Type.Items.Add("Sans Type");
                cb_Filaire_Choix_Type.Items.Add("Escaliers");
                cb_Filaire_Choix_Type.Items.Add("Ascenseur");
                OutilsSelect.Content = ("Veuillez selectionner un type d'outil ...");
            }
            //Mode Filaire Arcs 
            else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs"))
            {
                cb_Filaire_Choix_Type.Items.Add("Sans Type");
                cb_Filaire_Choix_Type.Items.Add("Murs");
                cb_Filaire_Choix_Type.Items.Add("Portes");
                cb_Filaire_Choix_Type.Items.Add("Escaliers");
                OutilsSelect.Content = ("Veuillez selectionner un type d'outil ...");
            }
        }
 
        private void cb_Filaire_Choix_Type_SelectedChanged(object sender, EventArgs e)
        {
            try
            {
                if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Sans Type"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Point Sans Type");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Escaliers"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Point Escaliers");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Points") && cb_Filaire_Choix_Type.SelectedItem.Equals("Ascenseur"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Point Ascenseur");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Sans Type"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Arcs Sans Type");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Escaliers"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Arcs Escaliers");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Murs"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Arcs Murs");
                }
                else if (cb_Filaire_Choix_Point_Arc.SelectedItem.Equals("Arcs") && cb_Filaire_Choix_Type.SelectedItem.Equals("Portes"))
                {
                    OutilsSelect.Content = ("Outil Selectionné : Arcs Portes");
                }
            }
            catch (NullReferenceException)
            { }
        }
        #endregion
 
        #region Listes et Boutons
 
 
 
 
        private void RemplirList1()
        {
            listBox3.Items.Clear();
            foreach (Etages.ClassNoeuds MyNoeuds in CollecNoeuds)
            {
                ListBoxItem item = new ListBoxItem();
                item.Tag = MyNoeuds;
                item.Content = MyNoeuds.No_ID_Noeud;//.InnerText
                listBox3.Items.Add(item);
            }
        }
 
        private void RemplirTextBox()
        {
            foreach (object o in listBox2.SelectedItems)
            {
                try
                {
                    tb_Coord_P_Noeud.Text = ((o as Etages.ClassNoeuds).Coord_P).ToString();
                }
                catch (NullReferenceException)
                { }
            }
        }
 
        private void RemplirList2()
        {
            listBox4.Items.Clear();
            foreach (Etages.ClassArcs MyArcs in CollecArcs)
            {
                ListBoxItem item = new ListBoxItem();
                item.Tag = MyArcs;
                item.Content = MyArcs.No_ID_Arc;//.InnerText
                listBox4.Items.Add(item);
            }
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            RemplirList1();
        }
 
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            RemplirTextBox();
        }
 
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            RemplirList2();
        }
        #endregion
 
 
    }
}