2017-07-20 4 views
0

verwiesen ich von diesem Rendering the same model in multiple WPF Viewports Mehrere Ansichtsfenster mit dem gleichen Modell in wpf

ich ein Wpf Anfänger bin und haben die ähnliche Frage mit diesem Link. Ich möchte drei Modelle zeigen, die sich relativ bewegen und in unterschiedlichen Ansichtsfenstern mit unterschiedlichen Kameraeinstellungen zeigen.

Zuerst habe ich versucht, ModelVisual3D zu verschiedenen Ansichtsfenstern hinzuzufügen, und es hat offensichtlich nicht funktioniert. So

Ich versuchte dies unten zu tun, hier ist der Code:

Model3DGroup model1 = read(path1); 
Model3DGroup model2 = read(path2); 
Model3DGroup model3 = read(path3); 

modelVisual1.Content = model1 ; 
modelVisual2.Content = model2 ; 
modelVisual3.Content = model3 ; 

mainModelVisual.Children.Add(modelVisual1); 
mainModelVisual.Children.Add(modelVisual2); 
mainModelVisual.Children.Add(modelVisual3); 

Viewport1.Children.Add(mainModelVisual); 

Der Grund, warum ich nicht nur ein Model3DGroup ist, dass ich vergeben haben unterschiedliche Transform3D und ich werde fügen Sie den hittest in . Zukunft (Ist das eine angemessene Grund?)

Und nun möchte ich das Modell in verschiedenen Ansichtsfenster wie folgt hinzuzufügen:

otherMainModelVisual2.Content = mainModelVisual.Content; 
otherMainModelVisual3.Content = mainModelVisual.Content; 

Viewport2.Children.Add(otherMainModelVisual2); 
Viewport3.Children.Add(otherMainModelVisual3); 

Th e viewport1 zeigt das Modell normal, aber ein anderes Ansichtsfenster zeigte nichts.

Die Frage ist, warum ich das nicht wie der Link tun kann? Oder muss ich zwei Modelle kopieren und zu verschiedenen Modelvisual wie das Viewport1 hinzufügen?

Ich bin ein Anfänger, hoffe, dass jemand mir in einfachem Code zeigen konnte.

Antwort

0

Wie im ersten Kommentar im Code der von Ihnen referenzierten Frage erwähnt, muss jeder Viewport3D eine eigene ModelVisual3D haben. Um jedoch klarer zu sein:

In WPF kann eine Visual, einschließlich einer Visual3D, nur an einer Stelle in der Visual Tree existieren. Um es anders auszudrücken, ein Visual kann nur ein Elternteil haben. Dein Fenster (oder was auch immer) ist die Wurzel des Baumes. So haben Sie etwas davon haben:

Window 
| 
|--Grid 
    | 
    |--ViewPort1 
     | 
     |--mainModelVisual 
     | 
     |--modelVisual1 
     |--modelVisual2 
     |--modelVisual3 
    | 
    |--ViewPort2 
    |--ViewPort3 

Der Grund Sie nur das Modell im ersten Ansichtsfenster zu sehen ist, dass die modelVisual1, modelVisual2 und modelVisual3, die sind alle Visual3D Objekte wurden als (Gross- zugeordnet) Kinder von ViewPort1. Sie als Kinder von mehr als einer Sache zuzuteilen, wird einfach nicht funktionieren. Wenn Sie sie dem Kind von mainModelVisual zuweisen, sperren Sie ihren Platz in der visuellen Struktur, bis Sie sie entfernen.

Beachten Sie jedoch, dass die Elemente model1, model2 und model3 nicht im Baum angezeigt werden. Dies ist, weil sie nicht Visual3D Objekte sind, sondern ModelGroup3D Objekte, die eine Art von Inhalt ist, im Wesentlichen Daten, die die Visual Objekte auf, wie man sich selbst zeichnet. Sie können den Modellen beliebig viele ModelVisual3D Objekte zuweisen. Dies geschieht in der verknüpften Frage. Derselbe Inhalt wird mehrmals verwendet, aber jedem ViewPort3D ist ein eindeutiger Satz von Visual Objekten zugewiesen.

Sie hätten das gleiche Problem, wenn Sie zum Beispiel ein Button erstellt und versucht haben, es zu zwei verschiedenen StackPanel Objekten hinzuzufügen. Nur eine StackPanel würde die Schaltfläche rendern.Sie könnten jedoch zwei verschiedene Schaltflächen erstellen, und sie könnten beide den gleichen Text haben, der von der gleichen string Variable zugewiesen wurde.

+0

Danke für Ihre klare Erklärung! Jetzt teile ich die Model3DGroup mit den drei Viewports und es funktioniert! – user7990701

Verwandte Themen