2009-12-11 2 views
2

Veuillez trouver ci-dessous mon code. J'ai essayé mais n'ai pas réussi. De l'aide?Comment fusionner deux objets créés dynamiquement se chevauchant?

Path e1 = new Path(); 
Path e2 = new Path(); 

e1.Data = new EllipseGeometry(new Rect(new Size(100, 100))); 
e1.RenderTransform = new TranslateTransform(100, 100); 
e1.Fill = Brushes.Transparent; 
e1.Stroke = Brushes.Black; 

e2.Data = new EllipseGeometry(new Rect(new Size(120, 120))); 
e2.RenderTransform = new TranslateTransform(140, 140); 
e2.Fill = Brushes.Transparent; 
e2.Stroke = Brushes.Black; 

Path p = new Path(); 

CombinedGeometry c1 = new CombinedGeometry(); 
Geometry g1 = e1.Data.Clone(); 
Geometry g2 = e2.Data.Clone(); 
c1.GeometryCombineMode = GeometryCombineMode.Union; 

p.Stroke = Brushes.Black; 
p.StrokeThickness = 1; 
p.Data = c1; 

canvasMain.Children.Add(p); 

Cordialement/subho100

Répondre

2

Vous avez fait deux erreurs:

Le premier a été en supposant que les transformations changeraient l'emplacement de la géométrie combinée - mes tests montre qu'ils sont ignorés si j'ai utilisé l'autre constructeur Rect qui prend Point pour l'emplacement. La seconde était une erreur plus fondamentale qu'Anurag a corrigée - vous n'avez pas réellement mis votre géométrie dans le CombinedGeometry. Je l'ai résolu d'une manière différente en utilisant le constructeur comme indiqué ci-dessous.

Path e1 = new Path(); 
Path e2 = new Path(); 

e1.Data = new EllipseGeometry(new Rect(new Point(100,100), new Size(100, 100))); 
e1.Fill = Brushes.Transparent; 
e1.Stroke = Brushes.Black; 

e2.Data = new EllipseGeometry(new Rect(new Point(140, 140), new Size(120, 120))); 
e2.Fill = Brushes.Transparent; 
e2.Stroke = Brushes.Black; 

Path p = new Path(); 

CombinedGeometry c1 = new CombinedGeometry(GeometryCombineMode.Union, e1.Data, e2.Data); 

p.Stroke = Brushes.Black; 
p.StrokeThickness = 1; 
p.Data = c1; 

canvasMain.Children.Add(p); 
+0

Merci! C'était une solution parfaite. – subho

0

Ajouter cette avant la dernière ligne dans votre code

c1.Geometry1 = g1; 
c1.Geometry2 = g2; 

Hope this helps !!

+0

Merci Anurag. Cela m'a aidé à obtenir un cercle sur la toile mais pas l'intention. Je voulais quelque chose comme, http://i.msdn.microsoft.com/ms746682.mil_task_combined_geometry_union%28en-us,VS.90%29.png – subho

Questions connexes