给Revit中的Button添加动画和图片
2017-09-08 21:19
387 查看
测试环境Revit2016;
引用Revit的DLL有RevitAPI.dll,RevitAPIUI.dll,AdWindows.dll,UIFramework.dll.
如何实现像Revit自带的命令一样,当鼠标长停在button上,出现动画或者图片(如图1)。
查看RevitAPIUI.dll中的 Autodesk.Revit.UI.PushButtonData,发现revit提供了ToolTipImage属性,但是它只能添加图片,无法添加动画,所以我们要使用AdWindows.dll提供的Autodesk.Windows.RibbonItem,来给ToolTip属性赋值。
这个方法的关键是找到Autodesk.Windows命名空间下的RibbonItem,本文将提供两种方式,一种是遍历Autodesk.Windows.RibbonControl,第二种是通过Autodesk.Revit.UI.RibbonItem反射查找Autodesk.Windows.RibbonItem。
使用C:/Program Files/Autodesk/Revit 2016/videos/目录下的视频文件(根据Revit安装目录查找文件),最后实现效果如图2。
图1 图2
using Autodesk.Revit.UI;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
using UIFramework;
using RibbonItem = Autodesk.Revit.UI.RibbonItem;
namespace ButtonVideo
{
public class App : IExternalApplication
{
private const string tabName = "VButton";
private const string panelName = "Video tooltip";
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application)
{
RibbonControl ribbonControl = RevitRibbonControl.RibbonControl;
var ribbonTab = ribbonControl.FindTab(tabName);
if (ribbonTab == null)
{
application.CreateRibbonTab(tabName);
}
var ribbonPanel = application.CreateRibbonPanel(tabName, panelName);
var button1Data = new PushButtonData("Button1",
"Button1",
typeof(App).Assembly.Location,
"ButtonVideo.Button");
//图片地址
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = Path.Combine(Path.GetDirectoryName(path), "weather_sun.png");
button1Data.LargeImage = GetBitmapImage(path);
var button1 = ribbonPanel.AddItem(button1Data);
RibbonToolTip toolTip1 = new RibbonToolTip()
{
Title = "这是Button1",
Content = "这是命令简要内容",
ExpandedContent = "这是命令的扩展内容!",
//字符串不要换行,否则读不出来
//ExpandedVideo = new Uri(@"C:\Program Files\Autodesk\Revit 2016\videos\GUID-4D816758-AF71-455E-9FAE-A1D5ED237EC6-low.swf"),
ExpandedVideo = new Uri("C:/Program Files/Autodesk/Revit 2016/videos/GUID-4D816758-AF71-455E-9FAE-A1D5ED237EC6-low.swf"),
ExpandedImage = GetBitmapImage(path),
//IsHelpEnabled = true,
//IsProgressive = true
};
SetRibbonItemToolTip(button1, toolTip1);
return Result.Succeeded;
}
public BitmapImage GetBitmapImage(string imagePath)
{
if (File.Exists(imagePath))
return new BitmapImage(new Uri(imagePath));
else
return null;
}
void SetRibbonItemToolTip(RibbonItem item, RibbonToolTip toolTip)
{
//var ribbonItem = GetRibbonItem1(item);
var ribbonItem = GetRibbonItem2(item);
if (ribbonItem == null)
return;
ribbonItem.ToolTip = toolTip;
}
private Autodesk.Windows.RibbonItem GetRibbonItem1(
RibbonItem item)
{
Type itemType = item.GetType();
var mi = itemType.GetMethod("getRibbonItem",
BindingFlags.NonPublic | BindingFlags.Instance);
var windowRibbonItem = mi.Invoke(item, null);
return windowRibbonItem
as Autodesk.Windows.RibbonItem;
}
private Autodesk.Windows.RibbonItem GetRibbonItem2(
RibbonItem item)
{
RibbonControl ribbonControl
= RevitRibbonControl.RibbonControl;
//第二种方式获得RibbonControl
//RibbonControl ribbonControl = Autodesk.Windows.ComponentManager.Ribbon;
foreach (var tab in ribbonControl.Tabs)
{
if (tab.Id == App.tabName)
{
foreach (var panel in tab.Panels)
{
//panel.Source.Id------CustomCtrl_%VButton%Video tooltip
if (panel.Source.AutomationName == App.panelName)
{
foreach (var ribbonItem
in panel.Source.Items)
{
//ribbonItem.Id------------CustomCtrl_%CustomCtrl_%VButton%Video tooltip%Button1
if (ribbonItem.AutomationName
== item.Name)
{
return ribbonItem as
Autodesk.Windows.RibbonItem;
}
}
}
}
}
}
return null;
}
}
}
更详细的代码见:http://download.csdn.net/download/mye918/9970716
引用Revit的DLL有RevitAPI.dll,RevitAPIUI.dll,AdWindows.dll,UIFramework.dll.
如何实现像Revit自带的命令一样,当鼠标长停在button上,出现动画或者图片(如图1)。
查看RevitAPIUI.dll中的 Autodesk.Revit.UI.PushButtonData,发现revit提供了ToolTipImage属性,但是它只能添加图片,无法添加动画,所以我们要使用AdWindows.dll提供的Autodesk.Windows.RibbonItem,来给ToolTip属性赋值。
这个方法的关键是找到Autodesk.Windows命名空间下的RibbonItem,本文将提供两种方式,一种是遍历Autodesk.Windows.RibbonControl,第二种是通过Autodesk.Revit.UI.RibbonItem反射查找Autodesk.Windows.RibbonItem。
使用C:/Program Files/Autodesk/Revit 2016/videos/目录下的视频文件(根据Revit安装目录查找文件),最后实现效果如图2。
图1 图2
using Autodesk.Revit.UI;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
using UIFramework;
using RibbonItem = Autodesk.Revit.UI.RibbonItem;
namespace ButtonVideo
{
public class App : IExternalApplication
{
private const string tabName = "VButton";
private const string panelName = "Video tooltip";
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application)
{
RibbonControl ribbonControl = RevitRibbonControl.RibbonControl;
var ribbonTab = ribbonControl.FindTab(tabName);
if (ribbonTab == null)
{
application.CreateRibbonTab(tabName);
}
var ribbonPanel = application.CreateRibbonPanel(tabName, panelName);
var button1Data = new PushButtonData("Button1",
"Button1",
typeof(App).Assembly.Location,
"ButtonVideo.Button");
//图片地址
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = Path.Combine(Path.GetDirectoryName(path), "weather_sun.png");
button1Data.LargeImage = GetBitmapImage(path);
var button1 = ribbonPanel.AddItem(button1Data);
RibbonToolTip toolTip1 = new RibbonToolTip()
{
Title = "这是Button1",
Content = "这是命令简要内容",
ExpandedContent = "这是命令的扩展内容!",
//字符串不要换行,否则读不出来
//ExpandedVideo = new Uri(@"C:\Program Files\Autodesk\Revit 2016\videos\GUID-4D816758-AF71-455E-9FAE-A1D5ED237EC6-low.swf"),
ExpandedVideo = new Uri("C:/Program Files/Autodesk/Revit 2016/videos/GUID-4D816758-AF71-455E-9FAE-A1D5ED237EC6-low.swf"),
ExpandedImage = GetBitmapImage(path),
//IsHelpEnabled = true,
//IsProgressive = true
};
SetRibbonItemToolTip(button1, toolTip1);
return Result.Succeeded;
}
public BitmapImage GetBitmapImage(string imagePath)
{
if (File.Exists(imagePath))
return new BitmapImage(new Uri(imagePath));
else
return null;
}
void SetRibbonItemToolTip(RibbonItem item, RibbonToolTip toolTip)
{
//var ribbonItem = GetRibbonItem1(item);
var ribbonItem = GetRibbonItem2(item);
if (ribbonItem == null)
return;
ribbonItem.ToolTip = toolTip;
}
private Autodesk.Windows.RibbonItem GetRibbonItem1(
RibbonItem item)
{
Type itemType = item.GetType();
var mi = itemType.GetMethod("getRibbonItem",
BindingFlags.NonPublic | BindingFlags.Instance);
var windowRibbonItem = mi.Invoke(item, null);
return windowRibbonItem
as Autodesk.Windows.RibbonItem;
}
private Autodesk.Windows.RibbonItem GetRibbonItem2(
RibbonItem item)
{
RibbonControl ribbonControl
= RevitRibbonControl.RibbonControl;
//第二种方式获得RibbonControl
//RibbonControl ribbonControl = Autodesk.Windows.ComponentManager.Ribbon;
foreach (var tab in ribbonControl.Tabs)
{
if (tab.Id == App.tabName)
{
foreach (var panel in tab.Panels)
{
//panel.Source.Id------CustomCtrl_%VButton%Video tooltip
if (panel.Source.AutomationName == App.panelName)
{
foreach (var ribbonItem
in panel.Source.Items)
{
//ribbonItem.Id------------CustomCtrl_%CustomCtrl_%VButton%Video tooltip%Button1
if (ribbonItem.AutomationName
== item.Name)
{
return ribbonItem as
Autodesk.Windows.RibbonItem;
}
}
}
}
}
}
return null;
}
}
}
更详细的代码见:http://download.csdn.net/download/mye918/9970716
相关文章推荐
- 在Button上、下、左、右位置添加图片和文字
- android如何做iphone那种图片抖动动画的效果(包括button和EditText)
- iOS查看多张图片,并且添加双击手势,转场动画
- android button 上添加图片
- ios UIImageView添加图片动画效果,添加了手势之后,依然没有反应的解决方法
- Android: TextView添加图片(drawable)及动画实例
- C#(winform)为button添加背景图片,并去掉各种边框
- 添加动画、单张图片
- 创建图片抖动效果动画,为一个动画添加多个值
- 使用CSS给ASP.NET中的Button按钮添加一个指定位置的图片
- WPF——给button添加背景图片
- 【Sencha Toucha】Sencha Touch ExtJs 给 Button 添加图片
- Android中在Button文本上添加图片
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- iOS为imageView添加图片实现动画
- iOS 特定图片的button的旋转动画
- Android Button上添加图片
- iPhone 如何使用UIImageView播放动画,并停留在之后一张图片并添加播放结束时的事件
- 为imageView添加图片实现动画
- UCGUI中如何使用BUTTON_SetBMPEx()函数在按钮中添加图片问题