21 Replies Latest reply on Jan 8, 2015 10:42 AM by Deepak Gupta

    Hole color

    Mark Bradford

      Is there way to have solidworks render the features of holes a certain color upon creation?

       

      ie.

       

      "dowel" holes to be RED

      "screw clearance" holes to be Green

      "tapped" holes to be Orange

       

      etc.

       

       

      Thanks,

      Mark

        • Re: Hole color
          Keith Rice

          Mark,

           

          Edit: Attached a VBA macro and re-wrote the explanation.

           

          See attached for a VBA macro that will change newly added hole wizard features to red. You will see in the commenting where I show you how to use Case statements to modify the color depending on the type of hole wizard hole. There's a tremendous number of hole types, so please look in the swWzdHoleTypes_e enumeration to find exactly what you want.

           

          Explanation: To get the feature colors to change automatically upon feature creation then you need to use event notifications. As Artem points out below, it is not enough to use AddItemNotify, since this fires before the rebuild, but also OnIdleNotify, which fires once SolidWorks is "idle" again. The itemName argument in AddItemNotify is used to get the name of the newly added feature. Finally, IFeature::SetMaterialPropertyValues2 is used to actually change the color. Note that the first three arguments of the array in correspond to RGB (on a scale of 0-1) so you need only change them to change the color.

           

          The disadvantage of event-triggered macros is that you already need the macro to be running. Consequently, to ensure that its always on, you can change your SolidWorks shortcut to run the macro when SolidWorks is launched. I show you how to do that in this blog post: 4 Ways to Run A Macro Without the Run Button. To see more examples of notification macros, check out our Macro Library.

           

          Alternatively, you could just write a macro that you run manually, which searches the feature tree for hole wizard features, determines their hole wizard type, and colors them accordingly.

           

          Keith

          Video Tutorials for the SolidWorks API

            • Re: Hole color
              Mike Pacillo

              Hey Keith,

               

              I tried your version and it works fine. When I try to make cases though it gets too complicated for me. I would like to have all tapped bores in red, all the others in pink. Could you please take a look at my code and tell me whats wrong? What do the 9 stand for? I thought the first 3 where enough, but maybe they aren´t? ^^

               

              I was able to make one bore green, but unfortunately dont remember how, or maybe I am doing something wrong now.

               

              Anyways, have a good weekend!

              Mike

               

              [code]

              Private Function swApp_OnIdleNotify() As Long

                  Dim swFeat As SldWorks.Feature

                  Dim swHoleWizFeatData As SldWorks.WizardHoleFeatureData2

                  Dim vProps As Variant

                 

                  If blnFeatAdded = True Then

                      Set swFeat = swPart.FeatureByName(strNewItemName)

                      If swFeat.GetTypeName2 = "HoleWzd" Then

                          Set swHoleWizFeatData = swFeat.GetDefinition

                          vProps = swFeat.GetMaterialPropertyValues2(swAllConfiguration, Empty)

                         

                          'Modify / add to the following case statements if you want to control the colors _

                              for various types of hole wizard holes

                          Select Case swHoleWizFeatData.Type

                              Case swTapBlind

                          vProps(0) = 1: vProps(1) = 0: vProps(2) = 0

                          vProps(3) = 1: vProps(4) = 0: vProps(5) = 0

                          vProps(6) = 1: vProps(7) = 0: vProps(8) = 0

                              Case swHoleBlind

                          vProps(0) = 0: vProps(1) = 0.752941: vProps(2) = 0.796078

                          End Select

                         

                          'Delete this next line if you decide to use the case logic above

                          'vProps(0) = 1: vProps(1) = 0: vProps(2) = 0

                          'vProps(3) = 1: vProps(4) = 1: vProps(5) = 0.8

                          'vProps(6) = 0.3125: vProps(7) = 0: vProps(8) = 0

                          swFeat.SetMaterialPropertyValues2 vProps, swAllConfiguration, Empty

                          swModel.ActiveView.GraphicsRedraw

                          strNewItemName = Empty

                          blnFeatAdded = False

                      End If

                  End If

              End Function

              [/code]

              • Re: Hole color
                JOHN GEORGE

                Keith,

                I tried to modify your macro with different numbers for the color and it doesn't work.

                I am getting the same color everytime

                Am I doing something wrong?

                See the screen shot of the code

                Thanks for your help

                change-color-macro.png

                  • Re: Hole color
                    Keith Rice

                    Are you adding a blind hole? Because that's the only type of hole that's affected by the highlighted code.

                     

                    I would recommend that you put a breakpoint on IFeature::SetMaterialPropertyValues2 and see what vProps is by the time you reach that line. Look at the locals window to see the values in vProps, make sure they're correct.

                     

                    Does the macro work with its original code?

                      • Re: Hole color
                        JOHN GEORGE

                        Keith,

                        I am not an expert in VB or macros. I was trying to modify your code to work with "case logic" conditions

                        I don't know how and where to place the breakpoint.

                         

                        Can you please modify the code to work with

                        Case swCounterBoreThru  and

                        Case swTapBlind

                        Thanks

                         

                  • Re: Hole color
                    Artem Taturevych

                    I'm afraid the AddItemNotify is not enough in this case. At this moment feature is not completely created (this is not post notification). Changing the feature in this state may be risky. For example on my end it changes the whole body because separated entities are not yet generated for feature.

                     

                    It is better to use some post notification.

                     

                    Furthermore I would not suggest to use VBA macros because you need to have some User Form or something like that to keep them 'alive' after it ends. The best choice is to use add-in however the VSTA macro should also work because you can toggle the SolidWorks settings to not close the debugger when macro ends (added to macro directly).

                     

                    You also need to keep track of the documents change and attach to active document every time.

                     

                    I have implemented this in C# VSTA macro, please find this in the attachment.

                     

                    Try to run it and to create a "Through all counterbore" in hole wizard and it will be colored to red. You may change the list of colors and features in the block in 'main' procedure:

                     

                                //TODO: add your types here

                                m_Palette.Add((int)swWzdHoleTypes_e.swCounterBoreThru, Color.Red);

                                m_Palette.Add((int)swWzdHoleTypes_e.swTapered, Color.Green);

                                m_Palette.Add((int)swWzdHoleTypes_e.swCounterDrilled, Color.Blue);

                     

                    You may also change the features itself's slightly modifying the macro. but I would finally suggest to switch to add-in and forget about running the macro at all because you can run the add-in on startup automatically,

                     

                    Hope it helps.

                    __________________________

                    Regards,

                    Artem Taturevych

                    Application Engineer at Intercad

                    http://intercad.com.au/

                    Tel: +61 2 9454 4444

                      • Re: Hole color
                        Keith Rice

                        Thanks for those insights, Artem. It's too bad that AddItemNotify isn't a post-event notification. What is interesting is that in my testing, RegenPostNotifty2 actually fires before AddItemNotify. Doesn't make much sense.

                         

                        I completely understand the elegance of addins but here are some points I want to make:

                         

                        1. A class module can be used in place of a user form, and these are very easy to implement.

                        2. Macros can run on startup as well as long as the user is launching from a shortcut. An addin seems like overkill just to make up for that small lack of flexibility.

                         

                        Nevertheless if you think I am overlooking something, please share

                         

                        Keith

                        Video Tutorials for the SolidWorks API

                          • Re: Hole color
                            Artem Taturevych

                            Yes, you are right about the macros. Just checked and the behaviour is changed in new versions of SolidWorks. Previously the macro terminates once the main function ends so it was only possible to keep it run via DoEvents in infinite loop or dummy form display. Now it seems to be controlled by 'Stop VSTA Debugger on macro exit' toggle despite it says that this is only for VSTA.

                             

                            Anyways both VBA and VSTA macros may be run via /m switch. Anyways all it look like a workaround because this toggle will 'hang' all macros run on this session in memory. Sure it is not a case if no macros are usually run by user.

                            __________________________

                            Regards,

                            Artem Taturevych

                            Application Engineer at Intercad

                            http://intercad.com.au/

                            Tel: +61 2 9454 4444

                              • Re: Hole color
                                Mark Bradford

                                Thanks very much guys.   I will look at both solutions today.

                                 

                                Artem .. I'm not sure how to activate your solution?

                                 

                                Also ... I do have another thought .... TAS has helped me out with a custom properties macro that traverses all of the parts in my assembly and assigns custom properties based on inputs from a dialog box.

                                Would it be a better idea to have the macro also look at each of the hole wizard features, and assign the hole color based on this while it is already traversing the assembly for the custom properties?

                                 

                                Please share your thoughts.

                                Thanks

                                Mark

                                  • Re: Hole color
                                    Artem Taturevych

                                    The solution I have attached is VSTA macro - just open it in edit mode in VSTA Editor (Tools->Macro->Edit. Specify the filter for VSTA macros) and run it.

                                     

                                    If you like to color all existing features than it makes sense to combine the macros. Sample I have created monitors the hole wizard add notification and colors it in 'real' time.

                                     

                                    __________________________

                                    Regards,

                                    Artem Taturevych

                                    Application Engineer at Intercad

                                    http://intercad.com.au/

                                    Tel: +61 2 9454 4444

                                      • Re: Hole color
                                        Mark Bradford

                                        Hi Artem,

                                             Excellent.   I can see that it works.   I have only ever seen the VBA macros.  The VSTA has a very clean interface.

                                         

                                        I love that this happens upon creation.   Just makes sense.  Not sure why Solidworks doesn't already include this as an option.

                                         

                                        Looking thru the Hole Wizard features ... I don't see what the "swWzdHoleTypes_e" would be for the new hole "dowel" feature.

                                         

                                        Also is there a way to specify RGB value for the assigned colors?

                                         

                                        Ideally, I would use the middle row of the Solidworks feature pallette, but not sure how to specify this.

                                         

                                        IE. regardless of size, and depth, and based only by feature name

                                         

                                        All dowel holes = Red

                                        All tapped holes = Orange

                                        All screw clearance holes = Green

                                        All Counterbored holes = Blue

                                        All Countersunk holes = Yellow

                                         

                                        Does this make sense?

                                        Thanks for your help with this.   I appreciate it

                                        Mark

                                          • Re: Hole color
                                            Mark Bradford

                                            Found this in another post from Keith.   That takes care of my RGB question.    Thanks Keith.

                                             

                                             

                                            vProps(0) = 0

                                            vProps(1) = 1

                                            vProps(2) = 0

                                             

                                            If you would prefer to use a 0-255 scale then you will need to do some math. For example, if you know you need RGB colors = 182, 4, 67 then you would need to do this:

                                             

                                            vProps(0) = 182/255

                                            vProps(1) = 4/255

                                            vProps(2) = 67/255

                                              • Re: Hole color
                                                Mark Bradford

                                                Since Solidworks API does not allow for Hole Colors based on Feature name.  ie .. dowel holes = red

                                                 

                                                is there a way to set hole color based on hole favorites?   Where the hole color is assigned based on the Hole favorite name?

                                                 

                                                Thanks

                                                Mark

                                            • Re: Hole color
                                              Mike Pacillo

                                              Hi Artem,

                                               

                                              edit: I got it to open with "SW Visual studio tools for applications". But how do I run it?^^

                                               

                                              I am having trouble opening this macro as well. When I click Tools->Macro->Edit there are two specifuv filters for VSTA macros: SW VSTA VB MACRO (*.vbproj) and SW VSTA C# MACRO (*.csproj). But both don´t seem to include your macro.

                                               

                                              Any idea why this doesnt work or any suggestion for a workaround?

                                               

                                              Greetings

                                              Mike

                                        • Re: Hole color
                                          Danny Bradford

                                          Greetings,

                                           

                                          This post has been quite helpful as I am trying to manage hole wizard face colors as well. I have utilized the information provided and have the following:

                                           

                                          A macro with a listener that sets the color of the hole according to the hole type on wizard create. (Thanks to this forum)

                                           

                                          An Addin which launches the macro on Solidworks launch. (Thanks to several forums including this one)

                                           

                                          Everything is great except I need the macro to update the colors on edit. I have read in this forum there was some challenge in this. What is the final verdict on feature change / edit and the colors update?

                                           

                                          In reviewing options it seems there is the possibility to detect a part rebuild and run the macro on all features at that point. This is more intriging because it would take care of even older holes created without the macro available at the time. If someone could point me in the correct direction I would greatly appreciate it.

                                           

                                          Once I am done I can post all of my code here for the world to use. At this time it is incomplete due to the lack of ability to keep up with feature edits. Not that my code is new but all of it brought together in one place could be of help to some.

                                           

                                          Thanks,

                                           

                                          Danny B

                                           

                                          Message was edited by: Danny Bradford