XAML 如何使用Xbim在WPF中制作简单的3D Ifc查看器

gzszwxb4  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(355)

我是一个C#和WPF的初学者,我尝试了几天在我的应用程序中制作一个Ifc查看器。我尝试了很多方法,但我没有成功,我转身。
我从论坛上的另一个主题中得到了灵感:"如何在WPF中使用Xbim在3D中可视化. IFC"。目前我的XAML文件看起来像这样:
xmlns:presentation="http://schemas.Xbim.com/Presentation"

<Window.Resources>
    <ObjectDataProvider x:Key="ModelProvider"  IsInitialLoadEnabled="False" />
</Window.Resources>

<Grid Name="MainFrame" DataContext="{StaticResource ModelProvider}">
    <presentation:DrawingControl3D x:Name="test3D" Model="{Binding ObjectInstance}"/>
</Grid>

还有我的C#文件:

using System.Windows;
using System.Windows.Data;
using Xbim.Ifc;
using Xbim.ModelGeometry.Scene;

namespace okokokok
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Loaded += MainWindow_Loaded;

            openFile();
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            ModelProvider.Refresh();
        }

        private ObjectDataProvider ModelProvider
        {
            get
            {
                return MainFrame.DataContext as ObjectDataProvider;
            }
        }

        public void openFile()
        {
            var model = IfcStore.Open(@"C:\Users\e.mazzone\Desktop\Mission_C#\Test_Ifc_1.ifc");
            var context = new Xbim3DModelContext(model);
            context.CreateContext();
            ModelProvider.ObjectInstance = model;
        }
    }
}

这将打开Drawing控件,但我们看不到IFC。我尝试了每种IFC类型,但都不起作用。我认为可能是xaml文件和C#文件之间存在绑定问题。
有没有人能给我建议或给我一个好的教程?
谢谢你!

aiazj4mn

aiazj4mn1#

不久前我确实创建了一个简单的IFC查看器,我的DrawingControl3D名为DrawingControl,简化后的代码如下所示:

xaml:

<xbim:DrawingControl3D
            Grid.Column="1"
            Grid.Row="1"
            x:Name="DrawingControl"
            SelectedEntity="{Binding Path=SelectedItem, ElementName=MainWindow, Mode=TwoWay}"
            Model="{Binding}"
            Focusable="True"
            MouseMove="DrawingControl_MouseMove">
            <xbim:DrawingControl3D.Background>
                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                    <GradientStop Color="#D1CBC4" Offset="1"/>
                    <GradientStop Color="#C8FCFF"/>
                </LinearGradientBrush>
            </xbim:DrawingControl3D.Background>
        </xbim:DrawingControl3D>

密码:

IfcStore ifcModel = IfcStore.Open("ifcFile.ifc");

    var context = new Xbim3DModelContext(ifcModel);
    context.CreateContext();

    DrawingControl.Model = ifcModel;
    DrawingControl.LoadGeometry(ifcModel);

对我来说,它的工作原理和预期的一样。

相关问题