Inventor Customization

Inventor Customization

Reply
Mentor
bsee1
Posts: 212
Registered: ‎11-14-2011
Message 1 of 6 (1,062 Views)
Accepted Solution

Inventor 2013 addin Icons displays too large

1062 Views, 5 Replies
10-03-2012 01:54 PM

I have an addin which has an icon for a button.  In Inventor 2012 it displays fine.  In Inventor 2013 the icon appears to be enlarged by about 4x, and only the top left corner of the icon is visible.  The api clearly states that Inventor will scale the image to size.

 

Does anyone else have this problem?  

 

This is the C# code I'm using to load the icon.  The icon is in my resources file.

 

object LookupIcon = Microsoft.VisualBasic.Compatibility.VB6.Support.IconToIPicture( InvAddIn.Properties.Resources.Lookup_Icon);

 

Edit: See attached pics.

*****************************
Win7 x64 - 16gb ram
i7 3610qm
FirePro M4000

Inventor 2013
ETO 6.1

Hi,

 

I'm not sure why the change in behaviour appeared in this area, but it is logged in our system.

Even if it turns out to be an issue that needs fixing, you'd need a workaround in the meantime.

 

If your icon files contain the specific size you want then the solution should be quite easy - as pointed out in the previous reply. 

 

E.g. in case of the SimpleAddIn VB.NET sample, you'd need to change this line:

Dim addSlotOptionIcon As Icon = New Icon(addSlotOptionImageStream)

to this:

Dim addSlotOptionIcon As Icon = New Icon(addSlotOptionImageStream, 16, 16)

 

It seemed to work fine when I tested it.

 

ADN Support Specialist
xiaodong.liang
Posts: 1,301
Registered: ‎06-12-2011
Message 2 of 6 (986 Views)

Re: Inventor 2013 addin Icons displays too large

10-17-2012 07:13 PM in reply to: bsee1

Hi,

 

I am not sure what the problem is, could you take a look at this post if it helps? The 6th message of the post provides another way to convert icon to iPicture. 

http://forums.autodesk.com/t5/Autodesk-Inventor-Customization/Convert-IPictureDisp-To-System-Drawing...

 

If it is still no helpful. Please share an icon file for diagnose.

 



Xiaodong Liang
Developer Technical Services
Autodesk Developer Network

Mentor
GVDB
Posts: 215
Registered: ‎01-16-2006
Message 3 of 6 (930 Views)

Re: Inventor 2013 addin Icons displays too large

11-09-2012 02:43 AM in reply to: bsee1

Same problem here!

We switched our addin from framework 3.5 (2012) to framework 4.0 (2013)

When using Ribbon appearance :Compact in 2013 -> all our icons are enlarged by about 4x

Our icons contains 16x16, 32x32, 48x48

of course we could change all of our icons to only 16x16 but that's not a proper solotion.

 

Is this problem solved yet?

 

regards,

 

Geert

Remark: Attachment DataLINK.ico renamed to DataLINK.ico.txt

 

Code used:

               

Dim objNaarDataLINKCmdPicture AsIPictureDisp = clsPictureConverter.IconToIPictureDisp(My.Resources.DataLINK)

 

Class clsPictureConverter:

Option Strict Off

Option Explicit On

Imports System.Runtime.InteropServices

 

Public ClassclsPictureConverter

 Inherits System.Windows.Forms.AxHost

   

SubNew()

       

MyBase.New(Nothing)

   

EndSub

   

PublicSharedFunction ImageToIPictureDisp(ByVal image As System.Drawing.Image) As stdole.IPictureDisp

       

ReturnAxHost.GetIPictureDispFromPicture(image)

   

EndFunction

   

PublicSharedFunction IPictureDisptoImage(ByVal ipicturedisp As stdole.IPictureDisp) As System.Drawing.Image

       

ReturnAxHost.GetPictureFromIPicture(ipicturedisp)

   

EndFunction

 

 

   

'*** icon and bitmap through OLE ***********************************************************************************************

   

PublicSharedFunction IconToIPictureDisp(ByVal icon As System.Drawing.Icon) As stdole.IPictureDisp

       

Dim pictIcon AsNewPICTDESC.Icon(icon)

       

Return OleCreatePictureIndirect(pictIcon, iPictureDispGuid, True)

   

EndFunction

   

PublicSharedFunction BitmapToIPictureDisp(ByVal bmp As System.Drawing.Bitmap) As stdole.IPictureDisp

       

Dim pictBmp AsNewPICTDESC.Bitmap(bmp)

       

Return OleCreatePictureIndirect(pictBmp, iPictureDispGuid, True)

   

EndFunction

 

   

'Definitions

    <

DllImport("OleAut32.dll", EntryPoint:="OleCreatePictureIndirect", ExactSpelling:=True, PreserveSig:=False)> _

   

PrivateSharedFunction OleCreatePictureIndirect(<MarshalAs(UnmanagedType.AsAny)> _

               

ByVal picdesc AsObject, ByRef iid AsGuid, <MarshalAs(UnmanagedType.Bool)> ByVal fOwn AsBoolean) As stdole.IPictureDisp

   

EndFunction

   

PrivateShared iPictureDispGuid AsGuid = GetType(stdole.IPictureDisp).GUID

 

   

PrivateNotInheritableClassPICTDESC

       

PrivateSubNew()

       

EndSub

       

'Picture Types

       

PublicConst PICTYPE_UNINITIALIZED AsShort = -1

       

PublicConst PICTYPE_NONE AsShort = 0

       

PublicConst PICTYPE_BITMAP AsShort = 1

       

PublicConst PICTYPE_METAFILE AsShort = 2

       

PublicConst PICTYPE_ICON AsShort = 3

       

PublicConst PICTYPE_ENHMETAFILE AsShort = 4

        <

StructLayout(LayoutKind.Sequential)> _

       

PublicClassIcon

           

Friend cbSizeOfStruct AsInteger = Marshal.SizeOf(GetType(PICTDESC.Icon))

           

Friend picType AsInteger = PICTDESC.PICTYPE_ICON

           

Friend hicon AsIntPtr = IntPtr.Zero

           

Friend unused1 AsInteger

           

Friend unused2 AsInteger

           

FriendSubNew(ByVal icon As System.Drawing.Icon)

               

Me.hicon = icon.ToBitmap().GetHicon()

           

EndSub

       

EndClass

        <

StructLayout(LayoutKind.Sequential)> _

       

PublicClassBitmap

           

Friend cbSizeOfStruct AsInteger = Marshal.SizeOf(GetType(PICTDESC.Bitmap))

           

Friend picType AsInteger = PICTDESC.PICTYPE_BITMAP

           

Friend hbitmap AsIntPtr = IntPtr.Zero

           

Friend hpal AsIntPtr = IntPtr.Zero

           

Friend unused AsInteger

           

FriendSubNew(ByVal bitmap As System.Drawing.Bitmap)

               

Me.hbitmap = bitmap.GetHbitmap()

           

EndSub

       

EndClass

   

EndClass

End

Class

 

 

Mentor
bsee1
Posts: 212
Registered: ‎11-14-2011
Message 4 of 6 (921 Views)

Re: Inventor 2013 addin Icons displays too large

11-09-2012 06:59 AM in reply to: GVDB

I didn't realize Autodesk had given an answer here.  In short, they claimed the previous automatic scaling of pictures(which I found very convenient) was an accidental feature, and was not intended to work that way.  

 

For icon files that contain multiple sizes, this was their recommendation: 

"I think you should be able to get the correct size from a multi-size icon like this, and then convert that to IPictureDisp:http://stackoverflow.com/questions/616500/windows-chooses-wrong-icon-from-multi-icon-file-and-self-r..."

 

I have not tested the above method. I chose to make 2 separate icons, one small and one large for each button used in my addins.  It seemed like a simpler approach to the problem.

 

In short, I see it as a bug, Autodesk does not.  

*****************************
Win7 x64 - 16gb ram
i7 3610qm
FirePro M4000

Inventor 2013
ETO 6.1
ADN Support Specialist
adam.nagy
Posts: 587
Registered: ‎03-26-2007
Message 5 of 6 (869 Views)

Re: Inventor 2013 addin Icons displays too large

11-21-2012 02:24 AM in reply to: bsee1

Hi,

 

I'm not sure why the change in behaviour appeared in this area, but it is logged in our system.

Even if it turns out to be an issue that needs fixing, you'd need a workaround in the meantime.

 

If your icon files contain the specific size you want then the solution should be quite easy - as pointed out in the previous reply. 

 

E.g. in case of the SimpleAddIn VB.NET sample, you'd need to change this line:

Dim addSlotOptionIcon As Icon = New Icon(addSlotOptionImageStream)

to this:

Dim addSlotOptionIcon As Icon = New Icon(addSlotOptionImageStream, 16, 16)

 

It seemed to work fine when I tested it.

 



Adam Nagy
Developer Technical Services
Autodesk Developer Network
Mentor
GVDB
Posts: 215
Registered: ‎01-16-2006
Message 6 of 6 (849 Views)

Re: Inventor 2013 addin Icons displays too large

11-22-2012 12:46 AM in reply to: adam.nagy

 

Hi,

 

First we could use 1 IPictureDisp with 1 icon with multiple formats:

 

Dim objNaarDataLINKCmdPicture As IPictureDisp = clsPictureConverter.IconToIPictureDisp(My.Resources.DataLINK)

 

Private WithEvents mobjNaarDataLINKCmd As Inventor.ButtonDefinition

mobjNaarDataLINKCmd = objControlDefs.AddButtonDefinition("", "NaarDataLINKCmd", Inventor.CommandTypesEnum.kQueryOnlyCmdType, m_ClientID, , "Ga naar DataLINK", objNaarDataLINKCmdPicture, objNaarDataLINKCmdPicture, ButtonDisplayEnum.kNoTextWithIcon)

 

 

The workaround I use now is to define 2 IPictureDisp with 2 seperate icons: (a lot more of work!)

               

Dim objNaarDataLINKCmdPicture_16 AsIPictureDisp = clsPictureConverter.IconToIPictureDisp(My.Resources.DataLINK_16)

Dim objNaarDataLINKCmdPicture_32 AsIPictureDisp = clsPictureConverter.IconToIPictureDisp(My.Resources.DataLINK_32)

 

Private WithEvents mobjNaarDataLINKCmd As Inventor.ButtonDefinition

mobjNaarDataLINKCmd = objControlDefs.AddButtonDefinition("", "NaarDataLINKCmd", Inventor.CommandTypesEnum.kQueryOnlyCmdType, m_ClientID, , "Ga naar DataLINK", objNaarDataLINKCmdPicture_16, objNaarDataLINKCmdPicture_32, ButtonDisplayEnum.kNoTextWithIcon)

 

 

It works, but is not so smart!

 

Glad it is logged.

 

Geert

 

Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.