algorithmic modeling for Rhino
Hello again,
I'm trying to change the appearance of a gh component/capsule on the canvas. In particular, I am not trying to specify a new layout altogether but only to add a few extra items to the layout automatically created by gh. For instance, in the example below, I am simply trying to draw a circle around a component.
First, I am creating custom attributes:
public class CustomParameterAttributes : GH_Attributes<MyComponent>
{
public CustomParameterAttributes (SbpOpt owner) : base(owner) { }
public override void ExpireLayout()
{
base.ExpireLayout();
}
protected override void Layout()
{
base.Layout();
}
protected override void Render(GH_Canvas canvas, Graphics graphics, GH_CanvasChannel channel)
{
base.Render(canvas, graphics, channel);
if (channel == GH_CanvasChannel.Objects)
{
PointF p = this.Pivot;
System.Drawing.Pen pen = new System.Drawing.Pen(Brushes.AliceBlue);
graphics.DrawEllipse(pen, (int)p.X, (int)p.Y, 200, 200);
}
}
public override GH_ObjectResponse RespondToMouseDown(GH_Canvas sender, GH_CanvasMouseEvent e)
{
return base.RespondToMouseDown(sender, e);
}
}
In my component, I am overriding the CreateAttributes() method:
public class MyComponent: GH_Component
{
//this doesn't draw my added information:
public override void CreateAttributes()
{
base.CreateAttributes();
List<IGH_Attributes> atts = new List<IGH_Attributes>() { new CustomParameterAttributes(this) };
base.Attributes.AppendToAttributeTree(atts);
}
//or, the following replaces base attributes with mine, but doesn't draw the default layout.
public override void CreateAttributes()
{
m_attributes = new CustomParameterAttributes(this);
}
}
Is there a way I can create the initial layout in the default way (populating inputs, outputs, nick name etc) and add extra objects later on? I would have thought calling base.Layout() and base.Render() in my attribute would do just that, this doesn't seem to do the job.
For reference, the code shown above is derived from the custom attributes chapter in the SDK and a few posts on this forum, including
http://www.grasshopper3d.com/forum/topics/create-radio-button-on-gr...
http://www.grasshopper3d.com/forum/topics/sdk-tutorial-custom-attri...
Thanks for any help!
Daniel
Tags:
Hi Daniel,
I think you are doing things correctly i.e. the second option
//or, the following replaces base attributes with mine, but doesn't draw the default layout.
public override void CreateAttributes()
{
m_attributes = new CustomParameterAttributes(this);
}
I think the mistake you made is you used the wrong base class for the custom attributes. Instead of GH_Attributes use Grasshopper.Kernel.Attributes.GH_ComponentAttributes
I have attached an example based on yours. Hope this helps you out.
Jason, thanks very much! Works like a treat!
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by