opencascade c#例程解析

1.编译

将msvc.bat文件拖入vs2022的x64 native tools,即可

2.about.xaml

<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="IE_WPF_WinForms.AboutDialog"x:Name="Window"xmlns:local="clr-namespace:IE_WPF_WinForms"Title="About Import/Export Sample"Width="312" Height="285"><StackPanel Orientation="Vertical"><Label Content="Import/Export Sample," HorizontalAlignment="Center"/><Label Content="Open CASCADE Technology " HorizontalAlignment="Center"/><Image Source="res\occ_logo.bmp" Width="194" Height="100" /><Label Content="Copyright (C) 2004-2013, Open CASCADE S.A.S" HorizontalAlignment="Center"/><Label Content="http://www.opencascade.com" HorizontalAlignment="Center" FontFamily="Modern No. 20"/><Button Content="OK" HorizontalAlignment="Center" Width="75" Command="local:IECommands.AboutOk"/></StackPanel>	
</Window>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;namespace IE_WPF_WinForms
{/// <summary>/// Interaction logic for About.xaml/// </summary>public partial class AboutDialog : Window{public AboutDialog(){this.InitializeComponent();CommandBinding aBind_Ok = new CommandBinding( IECommands.AboutOk );//CommandBinding 用于将命令(例如按钮点击)与事件处理程序(例如方法)关联起来。当命令执行时,与之关联的事件处理程序将被调用,从而执行相应的逻辑。这种机制使得开发人员可以在代码中定义一次命令处理逻辑,然后在需要的地方重用该逻辑,而不必在每个界面元素上都编写事件处理程序。aBind_Ok.Executed += OkCommand_Executed;//这行代码将 OkCommand_Executed 方法添加为 aBind_Ok 对象的 Executed 事件的事件处理程序。换句话说,当 aBind_Ok 对象引发 Executed 事件时(例如,当与该命令关联的操作被触发时),OkCommand_Executed 方法将被调用来执行相应的逻辑。aBind_Ok.CanExecute += OkCommand_CanExecute;//决定aBind_Ok.Executed是否能被执行CommandBindings.Add(aBind_Ok);}private void OkCommand_Executed( object sender, ExecutedRoutedEventArgs e ){this.Close();}private void OkCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e){e.CanExecute = true;//设置为false则不可执行,如果把OkCommand_CanExecute相关的都注释掉,则默认为不可执行}}
}

2.iecommands

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;namespace IE_WPF_WinForms
{public class IECommands{// 定义静态属性,表示不同的命令public static RoutedUICommand New { get; private set; }public static RoutedUICommand Close { get; private set; }public static RoutedUICommand Quit { get; private set; }public static RoutedUICommand About { get; private set; }public static RoutedUICommand AboutOk { get; private set; }static IECommands(){#region menu// 创建新命令,并设置快捷键InputGestureCollection inputsNew = new InputGestureCollection();inputsNew.Add(new KeyGesture(Key.N, ModifierKeys.Control, "Ctrl + N"));New = new RoutedUICommand("New", "New", typeof(IECommands), inputsNew);// 创建关闭命令Close = new RoutedUICommand("Close", "Close", typeof(IECommands));// 创建退出命令,并设置快捷键InputGestureCollection inputsQuit = new InputGestureCollection();inputsQuit.Add(new KeyGesture(Key.F4, ModifierKeys.Alt, "Alt + F4"));Quit = new RoutedUICommand("Quit", "Quit", typeof(IECommands), inputsQuit);// 创建关于命令,并设置快捷键InputGestureCollection inputsAbout = new InputGestureCollection();inputsAbout.Add(new KeyGesture(Key.F1));About = new RoutedUICommand("About", "About", typeof(IECommands), inputsAbout);#endregion#region aboutDlg// 创建关于对话框确定命令,并设置快捷键InputGestureCollection inputsAboutOk = new InputGestureCollection();inputsAboutOk.Add(new KeyGesture(Key.Enter));AboutOk = new RoutedUICommand("AboutOk", "AboutOk", typeof(IECommands), inputsAboutOk);#endregion}}
}

这段代码定义了一个静态类 IECommands,其中包含了几个静态属性,每个属性表示一个命令。每个命令都是一个 RoutedUICommand 类型的对象,用于处理 WPF 应用程序中的命令操作。具体注释如下:

  • public static RoutedUICommand New { get; private set; }:表示新建命令。
  • public static RoutedUICommand Close { get; private set; }:表示关闭命令。
  • public static RoutedUICommand Quit { get; private set; }:表示退出命令。
  • public static RoutedUICommand About { get; private set; }:表示关于命令。
  • public static RoutedUICommand AboutOk { get; private set; }:表示关于对话框确定命令。

在静态构造函数中,每个命令对象都被实例化并初始化,其中包括命令名称、显示文本和快捷键等信息。

3.mainwindow.xaml

<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  <!-- 命名空间定义 -->xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  <!-- 命名空间定义 -->x:Class="IE_WPF_WinForms.MainWindow"  <!-- 定义窗口类 -->xmlns:local="clr-namespace:IE_WPF_WinForms"  <!-- 命名空间定义 -->Title="Sample Import/Export" Height="600" Width="900" Icon="res/MainFrame.ico">  <!-- 窗口标题、大小、图标 --><Window.Background>  <!-- 设置窗口背景 --><SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ControlDarkColorKey}}"/>  <!-- 使用动态资源设置背景颜色 --></Window.Background><Window.Resources>  <!-- 设置窗口资源 --><BooleanToVisibilityConverter x:Key="boolToVisibilityConverter"/>  <!-- 定义布尔值转换为可见性的转换器 --></Window.Resources><Grid>  <!-- 定义主体布局为网格 --><Grid.RowDefinitions>  <!-- 定义网格行 --><RowDefinition Height="auto"/>  <!-- 第一行高度自适应 --><RowDefinition Height="auto"/>  <!-- 第二行高度自适应 --><RowDefinition />  <!-- 第三行高度为剩余空间 --><RowDefinition Height="auto"/>  <!-- 第四行高度自适应 --></Grid.RowDefinitions><Menu Height="25" Grid.Row="0">  <!-- 菜单栏,位于第一行 --><MenuItem Header="File">  <!-- 文件菜单项 --><MenuItem Command="local:IECommands.New"/>  <!-- 新建命令 --><MenuItem Command="local:IECommands.Close"/>  <!-- 关闭命令 --><MenuItem Header="Import" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen}">  <!-- 导入子菜单 --><MenuItem Name="ImportBrep" Header="BRep..." Click="ImportBRep_Click"/>  <!-- BRep 导入选项 --><MenuItem Name="ImportIges" Header="Iges..." Click="ImportIges_Click"/>  <!-- Iges 导入选项 --><MenuItem Name="ImportStep" Header="Step..." Click="ImportStep_Click"/>  <!-- Step 导入选项 --在这段 XAML 代码中,最下面的 </MenuItem> 标签表示对 <MenuItem> 元素的闭合,它用于结束一个 MenuItem 的定义。></MenuItem><MenuItem Header="Export" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen}">  <!-- 导出子菜单 --><MenuItem Name="ExportBrep" Header="BRep..." Click="ExportBRep_Click"/>  <!-- BRep 导出选项 --><MenuItem Name="ExportIges" Header="Iges..." Click="ExportIges_Click"/>  <!-- Iges 导出选项 --><MenuItem Name="ExportStep" Header="Step..." Click="ExportStep_Click"/>  <!-- Step 导出选项 --><MenuItem Name="ExportStl" Header="Stl..." Click="ExportStl_Click"/>  <!-- Stl 导出选项 --><MenuItem Name="ExportVrml" Header="Vrml..." Click="ExportVrml_Click"/>  <!-- Vrml 导出选项 --><Separator/>  <!-- 分隔线 --><MenuItem Name="ExportImage" Header="Image..." Click="ExportImage_Click"/>  <!-- 图像导出选项 --></MenuItem><Separator/>  <!-- 分隔线 --><MenuItem Command="local:IECommands.Quit"/>  <!-- 退出命令 --></MenuItem><MenuItem Header="View">  <!-- 视图菜单项 --><MenuItem Name="ActivateToolbar" IsCheckable="True" IsChecked="True" Header="Toolbar"/>  <!-- 工具栏显示/隐藏选项 --><MenuItem Name="ActivateStatusbar" IsCheckable="True" IsChecked="True" Header="Statusbar"/>  <!-- 状态栏显示/隐藏选项 --></MenuItem><MenuItem Header="Help">  <!-- 帮助菜单项 --><MenuItem Header="About" Command="local:IECommands.About"/>  <!-- 关于命令 --></MenuItem></Menu><ToolBarTray Background="White" Grid.Row="1">  <!-- 工具栏托盘,位于第二行 --><ToolBar Name="ToolBar" Band="1" BandIndex="1"  <!-- 工具栏 -->Visibility="{Binding ElementName=ActivateToolbar, Path=IsChecked, Converter={StaticResource boolToVisibilityConverter}}"  <!-- 根据绑定的可见性属性显示/隐藏工具栏 -->MouseEnter="ToolBar_MouseEnter" MouseLeave="ToolBar_MouseLeave">  <!-- 鼠标进入/离开事件 --><Button ToolTip="New" Command="local:IECommands.New">  <!-- 新建按钮 --><Image Source="res/new.png" Style="{StaticResource toolbarImageStyle}"/>  <!-- 图像 --></Button><Button ToolTip="About" Command="local:IECommands.About">  <!-- 关于按钮 --><Image Source="res/help.png" Style="{StaticResource toolbarImageStyle}"/>  <!-- 图像 --></Button></ToolBar><!-- 其他工具栏按钮省略 --></ToolBarTray><TabControl Name="ViewPanel" Grid.Row="2"  <!-- 标签页控件,位于第三行 -->SelectionChanged="OnViewerChanged"  <!-- 选择改变事件 -->Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=IsDocumentOpen, Converter={StaticResource boolToVisibilityConverter}}">  <!-- 根据绑定的可见性属性显示/隐藏标签页 --><TabControl.ContextMenu>  <!-- 标签页右键菜单 --><ContextMenu><MenuItem Command="local:IECommands.New" Style="{StaticResource popupItem}"/>  <!-- 新建命令 --><MenuItem Command="local:IECommands.Close" Style="{StaticResource popupItem}"/>  <!-- 关闭命令 --></ContextMenu></TabControl.ContextMenu></TabControl><StatusBar Background="White"  Grid.Row="3" Visibility="{Binding ElementName=ActivateStatusbar, Path=IsChecked, Converter={StaticResource boolToVisibilityConverter}}">  <!-- 状态栏,位于第四行 --><TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=StatusBarText}"/>  <!-- 状态栏文本 --></StatusBar></Grid>
</Window>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前后端项目-part03

文章目录 5.4.4 机构名称5.4.4.1 创建实体类Company5.4.4.2 创建实体类CompanyMapper5.4.4.3 创建实体类CompanyService5.4.4.4 创建实体类CompanyController5.4.4.5 后端测试5.4.4.6 修改basic.js5.4.4.7 修改course.vue5.4.4.8 测试5.4.5 课程标签5.4.5.1 效果5.4.5.2 修改co…

后台管理系统: 权限管理

权限管理 角色:一家企业而言&#xff1a;BOSS、运维、销售、程序员 权限:超级管理员&#xff08;BOSS&#xff09;&#xff0c;是有权利操作整个项目的所有的模块 test&#xff08;新媒体&#xff09;&#xff0c;只能首页、商品管理者一部分菜单数据 admin&#xff1a;…

ClickHouse 指南(三)最佳实践 -- 主键稀疏索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中&#xff0c;我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…

nginx平滑升级,信号使用,分割日志

信号 kill -l 看信号大全 nginx -h 中可以看到的信号较少 s signal : send signal to a master process: stop, quit, reopen, reload 可以使用man手册来查看详细的信号 如果没安装&#xff0c;去源码包里找到man文件 man 路径/nginx.8 不加路径打不开man帮助 st…

docker小知识:linux环境安装docker

安装必要软件包&#xff0c;执行如下命令 yum install -y yum-utils device-mapper-persistent-data lvm2目的是确保在安装 Docker 之前&#xff0c;系统已经安装了必要的软件包和服务&#xff0c;以支持 Docker 的正常运行。设置yum源&#xff0c;添加Docker官方的CentOS存储…

对Redis锁延期的一些讨论与思考

上一篇文章提到使用针对不同的业务场景如何合理使用Redis分布式锁&#xff0c;并引入了一个新的问题 若定义锁的过期时间是10s&#xff0c;此时A线程获取了锁然后执行业务代码&#xff0c;但是业务代码消耗时间花费了15s。这就会导致A线程还没有执行完业务代码&#xff0c;A线程…

vscode与vue/react环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理)&#xff0c;此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号&#xff1a; 配置系统变量 因为在执…

机器学习:朴素贝叶斯算法(Python)

一、朴素贝叶斯算法的实现 naive_bayes_classifier.py import numpy as np import collections as cc # 集合的计数功能 from scipy.stats import norm # 极大似然估计样本的均值和标准方差 from data_bin_wrapper import DataBinsWrapperclass NaiveBayesClassifier:"…

Python分支和循环结构及其应用(文末送书)

一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行&#xff0c;这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中&#xff0c;要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…

SpringCloud(17)之SpringCloud Stream

一、Spring Cloud Stream介绍 Spring Cloud Stream是一个框架&#xff0c;用于构建与共享消息系统连接的高度可扩展的事件驱动微服务。该框架提供了一个灵活的编程模型&#xff0c;该模型建立在已经建立和熟悉的Spring习惯用法和最佳实践之上&#xff0c;包括对持久发布/子语义…

腾讯云4核8G服务器优惠价格表(轻量+CVM)

腾讯云4核8G服务器多少钱&#xff1f;轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细配置和精准报价…

ChatGPT带火的HBM是什么?

“ChatGPT是人工智能领域的iPhone时刻&#xff0c;也是计算领域有史以来最伟大的技术之一。” 英伟达创始人兼CEO黄仁勋此前这样盛赞ChatGPT。 ChatGPT突然爆火&#xff0c;对大算力芯片提出了更高更多的要求。近日&#xff0c;据韩国经济日报报道&#xff0c;受惠于ChatGPT&am…

[rust] 10 project, crate, mod, pub, use: 项目目录层级组织, 概念和实战

文章目录 一 项目目录层级组织概念1.1 cargo new 创建同名 的 Project 和 crate1.2 多 crate 的 package1.3 mod 模块1.3.1 创建嵌套 mod1.3.2 mod 树1.3.3 用路径引用 mod1.3.3.1 使用绝对还是相对? 1.3.4 代码可见性1.3.4.1 pub 关键字1.3.4.2 用 super 引用 mod1.3.4.3 用 …

Linux之安装jdk,tomcat,mysql,部署项目

目录 一、操作流程 1.1安装jdk 1.2安装tomcat&#xff08;加创建自启动脚本&#xff09; 1.3 安装mysql 1.4部署项目 一、操作流程 首先把需要用的包放进opt文件下 1.1安装jdk 把jdk解压到/usr/local/java里 在刚刚放解压包的文件夹打开vim /etc/profile编辑器&#xff0c…

普中51单片机学习(8*8LED点阵)

8*8LED点阵 实验代码 #include "reg52.h" #include "intrins.h"typedef unsigned int u16; typedef unsigned char u8; u8 lednum0x80;sbit SHCPP3^6; sbit SERP3^4; sbit STCPP3^5;void HC595SENDBYTE(u8 dat) {u8 a;SHCP1;STCP1;for(a0;a<8;a){SERd…

【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a;…

MATLAB_ESP32有限脉冲响应FIR无限脉冲响应IIR滤波器

要点 ESP32闪烁LED&#xff0c;计时LEDESP32基础控制&#xff1a;温控输出串口监控&#xff0c;LCD事件计数器&#xff0c;SD卡读写&#xff0c;扫描WiFi网络&#xff0c;手机控制LED&#xff0c;经典蓝牙、数字麦克风捕捉音频、使用放大器和喇叭、播放SD卡和闪存MP3文件、立体…

如何多环境切换?如何在微服务配置多环境?

问题本质: nacos配置中心的配置是如何被项目读取到的&#xff1f;(nacos的配置中心和项目是如何联系的&#xff1f;) 注意&#xff1a;nacos有配置管理和服务管理&#xff0c;别弄混。自动注册的是服务管理&#xff01;&#xff01;&#xff01; 1. 如何注册到nacos服务管理中心…

蓝桥杯备战刷题one(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…