从另外一个窗体程序中控制naviswork中的视图
来源:互联网 发布:重生进军网络主播 编辑:程序博客网 时间:2024/05/20 16:00
近期收到一个朋友的开发需求,要求从一个窗体程序中控制naviswork中的视图,当naviswork为打开时打开naviswork,当naviswork打开时,不再重新打开,并且要实现更换文件的功能。本以为这个需求是需要跨进程方面的技术才能完成的,就想着用sendmessage之类的方法去做,做着做着发现naviswork插件不知道怎么样接受消息。
于是我又重新翻阅了naviswork的开发文档,最终发现了可以使用的api函数,不得不佩服naviswork的强大之处!!!
下面贴一下代码:
发送器部分:::
/// <summary> /// The NavisWorks Application /// </summary> Autodesk.Navisworks.Api.Automation.NavisworksApplication navisworksApplication= Autodesk.Navisworks.Api.Automation.NavisworksApplication.TryGetRunningInstance(); /// <summary> /// The ID Prefix, or developer friendly name for the plugin we want to call /// </summary> const string pluginIDPrefix = "MessageSenderReceiver.MessageReceiver"; /// <summary> /// The unique GUID for the plugin /// </summary> const string pluginGUID = "ADSK"; public MessageSender() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog openDlg = new OpenFileDialog(); if (openDlg.ShowDialog() == DialogResult.OK) { textBox1.Text = openDlg.FileName; string[] msg = new string[] { "file", textBox1.Text }; if (navisworksApplication != null) { int retval = navisworksApplication.ExecuteAddInPlugin(pluginIDPrefix + "." + pluginGUID, msg); } else { navisworksApplication = new NavisworksApplication(); //使程序可见 navisworksApplication.Visible = true; //打开naviswork文档 navisworksApplication.OpenFile(textBox1.Text); } } } private void button2_Click(object sender, EventArgs e) { string[] msg = new string[] { "view", "视图" }; if (navisworksApplication != null) { int retval = navisworksApplication.ExecuteAddInPlugin(pluginIDPrefix + "." + pluginGUID, msg); } else { MessageBox.Show("Naviswork未启动"); } } private void button3_Click(object sender, EventArgs e) { string[] msg = new string[] { "view", "视图 (1)" }; if (navisworksApplication != null) { int retval = navisworksApplication.ExecuteAddInPlugin(pluginIDPrefix + "." + pluginGUID, msg); } else { MessageBox.Show("Naviswork未启动"); } } private void MessageSender_FormClosed(object sender, FormClosedEventArgs e) { if (navisworksApplication != null) { navisworksApplication.Dispose(); } }接受器部分:用于naviswork的插件中
#region MessageSenderReceiver_MessageReceiver [PluginAttribute("MessageSenderReceiver.MessageReceiver", //Plugin name "ADSK")] //4 character Developer ID or GUID [AddInPluginAttribute(AddInLocation.None)] //Identifies this as an Addin Plugin, that will not display in the ribbon public class MessageReceiver : AddInPlugin //Derives from AddInPlugin { public override int Execute(params string[] parameters) { //获取当前的document Document oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument; if (parameters[0]== "file") { if (oDoc.FileName != parameters[1]) { oDoc.OpenFile(parameters[1]); } } else if(parameters[0]=="view") { SavedViewpoint selectedSavedViewPoint = new SavedViewpoint(); DocumentSavedViewpoints saVP = oDoc.SavedViewpoints; SavedItemCollection savedviewpointCollection = saVP.ToSavedItemCollection(); foreach(SavedItem si in savedviewpointCollection) { SavedViewpoint savedViewPoint = si as SavedViewpoint; if (savedViewPoint.DisplayName == parameters[1]) { selectedSavedViewPoint = savedViewPoint; break; } } if (selectedSavedViewPoint != null) { Viewpoint oSeclectVP = selectedSavedViewPoint.Viewpoint; oDoc.CurrentViewpoint.CopyFrom(oSeclectVP); } } return 1; } } #endregion
0 0
- 从另外一个窗体程序中控制naviswork中的视图
- 实现从一个包中的action跳到另外一个包中的action中
- ubuntu 下从一个python文件中调用另外的一个python文件中的类!
- 从一个APK调用另外一个APK中的一个ACTIVITY
- 在MFC对话框中显示另外一个应用程序窗体
- 从一个表中读取的数据插入到另外一张表中的sql语句
- DELPHI在一个窗体中打开另外一个窗体的问题
- C#程序如何把窗体文件从从一个项目中复制到另一个项目
- 在一个Android程序中启动另外一个Android程序
- C#从一个类中调用控制主窗体的控件
- 代码实现从我的主窗体里打开另外一个应用程序,并且让该程序像自己的MDI子窗体那样在父窗体的范围内显示
- informix 把数据从一个表倒到另外一个表中
- android 中从一个activity 跳转到另外一个activity
- 从一个应用中启动另外一个应用
- Android 如何从一个APP中打开另外一个APP
- ios 从一个app中打开另外一个app
- Android 如何从一个APP中打开另外一个APP
- update数据从一个表到另外一个表中
- 实现App跳转到应用商店
- 一款高质的棋牌游戏具有哪些特点
- ubuntu下mysql的常用命令
- 《懒人Shell脚本》之七——格式化处理数据存入数据库实现
- 抽奖demo
- 从另外一个窗体程序中控制naviswork中的视图
- Tomcat部署无乱码,换成glassfish就发生乱码的解决方法
- Android中使用开源框架EventBus3.0实现Fragment之间的通信交互
- block内存管理
- java并发编程实践学习(16)Java存储模型
- 高并发量网站解决方案
- Vulkan编程指南翻译 第四章 队列和命令 第1节 管理资源的状态
- PAT-A 1005. Spell It Right (20)
- C++String类的实现