algorithmic modeling for Rhino
Hi,
I am developing a plugin where I make use of custom parameters. Since I would like to keep my own parameters independent of the Rhino/ Grasshopper libraries, I made use of tuples to store my own class along with the rhino representation, like:
public class GH_InterfaceData : GH_Goo<Tuple<Interface,Brep>>, IGH_PreviewData
{public BoundingBox ClippingBox { get { return new BoundingBox(); } }
public void DrawViewportMeshes(GH_PreviewMeshArgs args)
{
System.Drawing.Color col = System.Drawing.Color.Orange;
args.Pipeline.DrawBrepShaded(Value.Item2, new
DisplayMaterial(col,0.5));}
public void DrawViewportWires(GH_PreviewWireArgs args)
{}
}
Now this data is represented as a custom parameter in the input and output of components by another class that inherits from GH_Param. So that I can register them in the GH_OutputParamManager and GH_InputParamManager.
In this particular example I would like to display a Brep. However I want it to react like any standard grasshopper component would, when it outputs brep geometry, so:
Thanks!
Dion
Tags:
Hi Dion,
the args parameter provided in DrawPreviewMeshes contains the display material you should use to draw your meshes.
If you want to draw things from your IGH_Param, then implement IGH_PreviewObject.
--
David Rutten
david@mcneel.com
Tirol, Austria
Hi David - I can see how to get the correct colour from IGH_PreviewArgs, however I can't seem to find a flag that states whether the component is selected so I can toggle my colours appropriately - could you point me to where that information is hiding please?
Is this code in an IGH_PreviewAwareData or IGH_PreviewAwareObject?
If it's in data, then you should already be given the correct preview data for the selected state of the containing object. If it's in object, then you need to look at your attributes to see if you're selected. You may have to look at the attributes of the top-level object, there's no guarantee that input/output parameter attributes get selected when the component gets selected.
It's a component that inherits from GH_Component. I am creating my preview using DrawViewportWires (maybe this is not the best way to achieve what I am trying to do). The output I am trying to display in the conventional Grasshopper way is a DataTree of curves that are the only output of the component.
Ok, when you're in GH_Component and you're overriding DrawViewportWires, then you can just look at the attributes:
if (Attributes.Selected)
...selected colours here
else
...unselected colours here.
That worked, thanks!
Hi Hugh
I am also trying to do a similar thing where text is either green or red depending on whether the component is selected or not. What I cant work out is how to actually obtain Attributes.Selected... Would you be able to share your code so I am work this out? Im new to visual studio and C#
You should be doing this under DrawViewportWires or DrawViewportMesh. You can use Grasshopper.Kernel.GH_DocumentObject.Attributes, then just switch on it when it's true.
So my example code for this part simply looks like:
System.Drawing.Color boundaryColour = args.WireColour;
if (Attributes.Selected == true)
boundaryColour = args.WireColour_Selected;
Hi David. I have a similar problem but I would like to override the default preview colors for a custom data type GH_GeometricGoo that implements the IGH_PreviewData interface. Where would one typically do that ? I couldn't find the IGH_PreviewAwareData in the SDK.
Thanks.
Andrei.
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