Message 1 of 4
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Rule1:
AddReference "Sobektech.InvCustomization.dll"
Imports Sobektech.InvCustomization.Ribbon
Public Class Test
Public Sub main()
Dim rb As RuleButton = New RuleButton(thisdoc.document, "Button", "My:Button1", "Show Form")
rb.Add("Assembly", "id_TabAssemble", "MyPanel")
End Sub
End Class
dll code:
using Autodesk.iLogic.Automation;
using Inventor;
using System.Collections.Generic;
using System.Linq;
namespace Sobektech.InvCustomization.Ribbon
{
public class RuleButton
{
public static List<RuleButton> RuleButtons = new List<RuleButton>();
public Inventor.Application InvApp { get; private set; }
public Inventor.Document Document { get; private set; }
public string DisplayName { get; set; }
public string InternalName { get; set; }
public CommandTypesEnum Classification { get; set; }
public string ToolTip { get; set; } = "";
public string Description { get; set; } = "";
public string RuleName { get; set; }
public RuleButton(Document doc, string displayName, string internalName, string ruleName,CommandTypesEnum classification=CommandTypesEnum.kNonShapeEditCmdType, string toolTip="", string description="")
{
Document = doc;
InvApp = doc.File.Application;
DisplayName = displayName;
InternalName = internalName;
Classification = classification;
ToolTip = toolTip;
Description = description;
RuleName = ruleName;
RuleButtons.Add(this);
}
public void Add(string ribbon,string tab,string pannel)
{
Inventor.ButtonDefinition bd = InvApp.CommandManager.ControlDefinitions.OfType<ButtonDefinition>().FirstOrDefault(b => b.InternalName == InternalName);
if(bd== null)
{
bd = InvApp.CommandManager.ControlDefinitions.AddButtonDefinition(DisplayName, InternalName, Classification, "{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}", DescriptionText:Description,ToolTipText:ToolTip);
bd.Enabled = true;
bd.OnExecute += ButtonDefinition_OnExecute;
InvApp.UserInterfaceManager.Ribbons[ribbon].RibbonTabs[tab].RibbonPanels.Add(pannel, InternalName + pannel, "{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}").CommandControls.AddButton(bd);
}
else
{
bd.Enabled = true;
bd.OnExecute += ButtonDefinition_OnExecute;
}
}
public void ButtonDefinition_OnExecute(NameValueMap context)
{
System.Windows.Forms.MessageBox.Show("Button Clicked!");
if (GetiLogicAutomation(InvApp, out iLogicAutomation iLogicAutomation))
System.Windows.Forms.MessageBox.Show("Got iLogic !");
iLogicAutomation.RunRule(Document, RuleName);
}
public static bool GetiLogicAutomation(Inventor.Application invApp, out Autodesk.iLogic.Automation.iLogicAutomation iLogic)
{
ApplicationAddIns addIns = invApp.ApplicationAddIns;
ApplicationAddIn addIn;
try
{
addIn = addIns.ItemById["{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}"];
addIn.Activate();
iLogic = addIn.Automation as iLogicAutomation;
return true;
}
catch
{
iLogic = null;
return false;
}
}
}
}
dll code using vb.net :
Imports Autodesk.iLogic.Automation
Imports Inventor
Imports System.Collections.Generic
Imports System.Linq
Imports System.Runtime.InteropServices
Namespace Sobektech.InvCustomization.Ribbon
Public Class RuleButton
Private _InvApp As Inventor.Application, _Document As Inventor.Document
Public Shared RuleButtons As List(Of RuleButton) = New List(Of RuleButton)()
Public Property InvApp As Application
Get
Return _InvApp
End Get
Private Set(ByVal value As Application)
_InvApp = value
End Set
End Property
Public Property Document As Document
Get
Return _Document
End Get
Private Set(ByVal value As Document)
_Document = value
End Set
End Property
Public Property DisplayName As String
Public Property InternalName As String
Public Property Classification As CommandTypesEnum
Public Property ToolTip As String = ""
Public Property Description As String = ""
Public Property RuleName As String
Public Sub New(ByVal doc As Document, ByVal displayName As String, ByVal internalName As String, ByVal ruleName As String, ByVal Optional classification As CommandTypesEnum = CommandTypesEnum.kNonShapeEditCmdType, ByVal Optional toolTip As String = "", ByVal Optional description As String = "")
Document = doc
InvApp = doc.File.Application
Me.DisplayName = displayName
Me.InternalName = internalName
Me.Classification = classification
Me.ToolTip = toolTip
Me.Description = description
Me.RuleName = ruleName
RuleButtons.Add(Me)
End Sub
Public Sub Add(ByVal ribbon As String, ByVal tab As String, ByVal pannel As String)
Dim bd As ButtonDefinition = InvApp.CommandManager.ControlDefinitions.OfType(Of ButtonDefinition)().FirstOrDefault(Function(b) Equals(b.InternalName, InternalName))
If bd Is Nothing Then
bd = InvApp.CommandManager.ControlDefinitions.AddButtonDefinition(DisplayName, InternalName, Classification, "{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}", DescriptionText:=Description, ToolTipText:=ToolTip)
bd.Enabled = True
AddHandler bd.OnExecute, AddressOf ButtonDefinition_OnExecute
InvApp.UserInterfaceManager.Ribbons(ribbon).RibbonTabs(tab).RibbonPanels.Add(pannel, InternalName & pannel, "{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}").CommandControls.AddButton(bd)
Else
bd.Enabled = True
AddHandler bd.OnExecute, AddressOf ButtonDefinition_OnExecute
End If
End Sub
Public Sub ButtonDefinition_OnExecute(ByVal context As NameValueMap)
Windows.Forms.MessageBox.Show("Button Clicked!")
Dim iLogicAutomation As iLogicAutomation = Nothing
If GetiLogicAutomation(InvApp, iLogicAutomation) Then Windows.Forms.MessageBox.Show("Got iLogic !")
iLogicAutomation.RunRule(Document, RuleName)
End Sub
Public Shared Function GetiLogicAutomation(ByVal invApp As Application, <Out> ByRef iLogic As iLogicAutomation) As Boolean
Dim addIns = invApp.ApplicationAddIns
Dim addIn As ApplicationAddIn
Try
addIn = addIns.ItemById("{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}")
addIn.Activate()
iLogic = TryCast(addIn.Automation, iLogicAutomation)
Return True
Catch
iLogic = Nothing
Return False
End Try
End Function
End Class
End Namespace
result:
Solved! Go to Solution.