Hi @DavidRutten
Basically, as stated in the Title - I would like to change the main color of my Custom components (non-editable)
It would be easier to navigate inside the Canvas.
See below:
Hi @DavidRutten
Basically, as stated in the Title - I would like to change the main color of my Custom components (non-editable)
It would be easier to navigate inside the Canvas.
See below:
The easiest way to do this is a bit hacky, but involves the following:
GH_ComponentAttributes
CreateAttributes
method of your GH_Component
and assign it to the m_attributes
field.Render()
method of the attributes, special case the Objects
channel. In here, change the palette style in the GH_Skin
class, then let the attributes render themselves, then undo your changes. public class CustomAttributes : GH_ComponentAttributes
{
public CustomAttributes(IGH_Component component)
: base(component)
{ }
protected override void Render(GH_Canvas canvas, Graphics graphics, GH_CanvasChannel channel)
{
if (channel == GH_CanvasChannel.Objects)
{
// Cache the existing style.
GH_PaletteStyle style = GH_Skin.palette_normal_standard;
// Swap out palette for normal, unselected components.
GH_Skin.palette_normal_standard = new GH_PaletteStyle(Color.DeepPink, Color.Teal, Color.PapayaWhip);
base.Render(canvas, graphics, channel);
// Put the original style back.
GH_Skin.palette_normal_standard = style;
}
else
base.Render(canvas, graphics, channel);
}
}
Thanks, @DavidRutten
Works perfectly.
Hi @DavidRutten
It seems a bit strange but I cannot repeat same behavior for all components. Some of them change color and some not. I am overriding CreateAttributes
in every component though.
What can be the problem?
Thanks.
Are some components using a different palette? Disabled and Hidden components use palettes that are stored in parallel with the palette_normal_standard
. Also warnings and errors cause components to switch to different palettes.
No, in all components I am referring to the same Class which inherits GH_ComponentAttributes
. So, it should be same color for all my components.
I understand that disabled and Hidden as well as Error containing components are displayed differently.
Hm…
Hi, I was wondering if this script works with c# script component, or if iit works for the grasshopper templates with in visual studio?. Thanks
You cannot affect the display of the script components, only custom components that you create and can assign your own attributes to.
For reference, this works in your component class:
public override void CreateAttributes()
{
base.CreateAttributes();
m_attributes = new GH_LinkajouAttributes(this);
}
this doesnt
public override void CreateAttributes()
{
m_attributes = new GH_LinkajouAttributes(this);
base.CreateAttributes();
}
This is not right because you are creating the default attributes and then creating others. In the next one the same thing happens but in reverse, base.CreateAttributes() creates the default attributes.
You don’t need to, nor should you, create them twice. you just need to do this:
public override void CreateAttributes()
{
m_attributes = new GH_LinkajouAttributes(this);
}
Gotcha, thanks!