C#与WPF

时间:2016-05-25 14:05:47

标签: c# wpf 3d helix-3d-toolkit

嘿我正在使用WPF 3D场景并成功加载了几个.stl模型。 我是basicall使用一种方法来选择和取消选择这些对象,基于我的鼠标在窗口中的位置:

 private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            var viewport = (HelixViewport3D)sender;
            var firstHit = viewport.Viewport.FindHits(e.GetPosition(viewport)).FirstOrDefault();
            if (firstHit != null)
            {
                this.viewModel.Select(firstHit.Visual);

            }
            else
            {
                this.viewModel.Select(null);

            }
        }

所以我有选择的ModelVisual3D并且可以存储它。然而,这是主要问题:

我的模型是基于某些数据和相关的.stl模型生成的。 Basicall我导入.stl模型并在我的3D场景中显示它,但问题是我不知道如何将我的其他数据连接到模型。

例如,当我选择视觉效果时,我想要显示另一个窗口,其中包含以下信息:材料,尺寸,公司。

但我无法弄清楚如何确定,目前选择了哪个独特的ModelVisual3D对象。似乎没有任何属性可以用来做我喜欢的事情:

ModelImporter tr = new ModelImporter();
            var model = tr.Load("C:\\Users\\...\\Pictures\\a.stl");
            ModelVisual3D test = new ModelVisual3D();

            test.Content = model;

//Here I would like to save the id of my visual model to identify and
//associate it with my other data later

            int myUniqueModelID=test.Properties.UNIQUEID

1 个答案:

答案 0 :(得分:0)

如何使用字典来保持数据引用与ModelVisual3D引用之间的映射。

    Dictionary<ModelVisual3D, StlDataObject> modelDataMap = new Dictionary<ModelVisual3D, StlDataObject>();
    public void LoadModelWithData(string dataFilePath, string stlModelPath)
    {
        ModelImporter tr = new ModelImporter();
        var model = tr.Load("C:\\Users\\...\\Pictures\\a.stl");
        ModelVisual3D test = new ModelVisual3D();

        test.Content = model;

        //Load the datafile from file (or pass it this method)
        StlDataObject IdForOurStlModel = GetStlDataFromFile(dataFilePath);
        modelDataMap.Add(test, IdForOurStlModel);
    }

然后,当您需要在视口中的命中测试中查找数据时,只需检查此字典是否包含按下的ModelVisual3d的键,并返回与该键相关的值(如果有)。