Your comments

Well I may have spoken a smidgen too soon. Turns out there are some rendering nuances when increasing the thickness. A broad rectangle is more appropriate, and that starts smudging with the field. So as was suggested (thank you!), orient it just a touch above the field. That approach should work, then it's a matter of arranging the geometry accordingly.
Came up with a working solution, and it was easy, and quite intuitive using Xaml nested objects.

In one of the Xaml blocks:

<h:RectangleVisual3D>
<h:LinesVisual3D Color="WhiteSmoke" />
</h:RectangleVisual3D>

And here's the example in action. Don't mind the yellow part, that's an unconfigured Goal Post. But the diagonal is from 0,0,0 to 10,10,0, and it renders quite nicely atop the rendered field.

After putzing around with resources and Uri's, I was able to get an image to tile after all.

<h:RectangleVisual3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush TileMode="Tile"
Stretch="None"
ViewportUnits="Absolute"
Viewport="0 0 0.1 0.1"
ViewboxUnits="Absolute"
Viewbox="0 0 1 1"
ImageSource="pack://application:,,,/Editor.Wpf;component/Resources/grass.png" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</h:RectangleVisual3D.Material>

Thank you, it's a great clue for me.

You don't happen to know the Xaml do you?

For example, I'd like to pick up the image (Jpg, Png, whatever) from an embedded resource, etc, etc.

Thank you...
Well... After some trial and error, and doing the DependencyProperty dance across a couple of views, view models, including several value changed listeners, I was finally able to get something more or less wired up.
This is a WPF confusion of mine.

In my Xaml/View, I am deriving from ModelVisual3D, throughout which I am making several bindings in the Xaml itself.

However, in the example, I am gather that Center, Radius (through SphereVisual3D), and plausibly Material as well (through one of its base classes), are actually dependency properties, not unlike the 'DataContext' I would need to add through the DataTemplate3D.

<MyUserControl.Resources>
    <local:DataTemplate3D x:Key="Template1">
        <h:SphereVisual3D Center="{Binding Position}" Material="{Binding Material}" Radius="{Binding Radius}"/>
    </local:DataTemplate3D>
</MyUserControl.Resources>


So I need to do a couple of things? This is where I am a bit confused.

  • First, add in the requisite DependencyProperty(ies) in my derived ModelVisual3D.
  • Next, bind some level of changeable properties to DependencyProperty(ies) in the derived model itself. Since, internally, DataContext and therefore implied data bindings don't work from ModelVisual3D, the need to be exposed differently.
  • Finally, decide how to route that data to the DataTemplate3D; simple enough, I see that much resolving as it stands.
Along the lines, I gather that when SphereVisual3D sees a changes to Center, for instance, changes are communicated through GeometryChanged, OnGeometryChanged, and finally 'Tessellate', at least in the case of something like a MeshVisual3D.

The point is, those are communicated via DependencyProperty(ies), which at some level has some comprehension of the components of the overall model, how to calculate changes to various bits, points, colors, and so on.

At this point I think I see what I am missing; instead of 'bindings' I actually need 'DependencyProperty(ies)'.
Based on the example in the MainWindow, I take it that the ItemsVisual3D acts as a container for whatever actual models are contained by the DataTemplate3D?

In the example case, the bindings are expressed in the view. In my case, I've got bindings in a separately derived ModelVisual3D View / Xaml.

Following which, we would simply be talking about appropriate binding paths, view models, and things of this nature?
I see the call:

var model = this.ItemTemplate.CreateItem(item);

The trick with this is, whereas with ItemSource being a collection (flat?) of models, I'd like to deal with a defined model Xaml/View, as a tree/hierarchy of models.

Likely still connecting with the data template... Likely...
I was able to persuade TubeVisual3D after all, with a series of calculated points along the arc.
These are compelling thoughts. I will give it some consideration.