首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Xbim在WPF中制作一个简单的三维Ifc查看器

如何用Xbim在WPF中制作一个简单的三维Ifc查看器
EN

Stack Overflow用户
提问于 2022-04-21 10:29:08
回答 1查看 277关注 0票数 0

我是一个C#和WPF初学者,我一直在尝试在我的应用程序中制作一个Ifc查看器。我尝试了很多方法去做,但我没有成功,我转过身来。

我受到论坛上另一个话题的启发:“如何在WPF中使用Xbim来在3D中可视化.IFC”。目前,我的xaml文件看起来如下:

xmlns:presentation="http://schemas.Xbim.com/Presentation

代码语言:javascript
复制
<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#文件:

代码语言:javascript
复制
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;
        }
    }
}

这打开了绘图控件,但我们看不到IFC。我试过国际金融公司的每一种类型,但都没用。我认为xaml文件和C#文件之间可能存在绑定问题。

有没有人能给我建议,或者给我指点一个好的教程?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 11:05:42

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

xaml:

代码语言:javascript
复制
<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>

cs:

代码语言:javascript
复制
    IfcStore ifcModel = IfcStore.Open("ifcFile.ifc");

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

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

对我来说,它就像预期的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71952927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档