DisplayPipeline Requests

Hi @stevebaer, great ! thanks for this offer :wink:

It would be very nice to have the ability to apply line styles to curves and to have a special method to draw curves with a 2 color gradient from start to end. Preferably using transparency for one end. This would allow to draw funny furry balls, carpets, hair, grass etc.

Please add more 2d drawing methods, eg. for drawing closed, filled shapes or arbitrary curves in screenspace. Additionally it would be helpful if the DrawObject method gets an overload to draw geometry with a transform which has not been added to the document.

Last but not least, could you please add the ability to use a virtual Bitmap (one that has not been saved to disk) for DisplayMaterial.SetBitmapTexture ?

thank you,
c.

1 Like

This is going off topic and we should probably split this off… I wrote an OpenGL component for grasshopper that we can use to prototype different ways to draw geometry. I think the component could be improved by providing some easier to use precanned solutions like what you are describing.

Hi @stevebaer, sorry for that and yes, please split this.I am sure others want to express wishes for Rhino.Display.DisplayPipeline based conduits which are available using RhinoCommon.

_
c.

I haven’t gotten a whole lot of documentation in place yet, but I need a little push to get this project into a spot where we can talk about it… I created some Grasshopper components that allow editing and displaying OpenGL shaders (GhGL).

Here’s a video of the components being edited

I made some samples that show how gradient fills can be implemented at

The nice thing about these components is we can display just about anything we want and prototype what we need for inclusion in the SDK as new functions on the DisplayPipeline

7 Likes

Hi @stevebaer, gradient fills for hatches inside Rhino would be very welcome for display and printing. I see many users creating their Make2d layout in Rhino and then switch to Illustrator or Corel to handle fills in the traditional way. Imho, all this could be done in Rhino.

I have no idea how hard this would be to implement as it would require a different interface compared to the existing one. If all current hatches could be decribed of beeing of type “pattern” new “styles” could be implemented, eg. “linear gradient” or “radial gradient”. Each of these new styles would require a different layout of UI elements in the hatch properties dialog. Maybe you could start with a simple UI which lets the user define the hatch outline as before and 2 additional points to set a linear gradient start and end position along with 2 color swatches to change the colors used for the linear gradient.

An analogous UI could be implemented for printable line styles to use dash patterns (what we have currently) and maybe a new type called linear gradient. This gradient would then happen along the curve and offers 2 color swatches or a list of colors to blend. Maybe patterns, linetypes, linewidths and gradient fills are all combineable ? This would be awesome.

_
c.

Did you try the samples that I posted? I understand that this is not the desired ultimate goal for gradient fills on hatches, but it is something that you can use today in Rhino 6.

The display pipeline part of this issue isn’t very hard as I’ve already written the prototype in GhGL. The hard part are all of the other pieces that you mentioned as well as adding the data to the 3dm, PDF, AI, and SVG file formats. I can also imagine that experimenting to get the user interface correct for allowing multiple color stops as well as nice working grips would take some effort too.

Yes. Which brings up a few questions on how to later get this into Rhino (bake as mesh ?) and have it independantly from GH, for printing, exporting and other purposes. Will RH6 support transparency for mesh vertex colors or show the mesh wireframe interpolated as GH does it ?

I did my gradient hatch fills using meshes since RH5 by creating a surface from the hatch border, extracting the rendermesh, adding the gradient as vertexcolors and setting the material to unlit diffuse, but this is a workaround. Unfortunately i have no experience in GL yet.

I was just trying to push this into the regular Rhino environment or RhinoCommon as the next step since you asked for it :wink:

_
c.

This component is purely for Grasshopper preview. It would work in printing to raster, but not for any of the other cases that you mentioned. I think the component has a ton of potential for usefulness, but maybe I led you down the wrong path of what this is for.

Maybe i was just giddy with pleasure. I imagined an interconnection towards RhinoCommon as it appeared in the Developer category.

_
c.

GhGL can be used without knowledge of OpenGL, but it’s real power is that you can write shader code with this component. That’s why I placed it under the “Rhino Developer” category. It is also loosely related to RhinoCommon because this is the tool we can use to prototype and get new display features working.

Hi @stevebaer, i know this topic is 4 years old but would like to bring it up again to your attention in regards to 2 unresolved wishes:

Draw a bitmap (using DisplayMaterial) which has not been saved to disc
Draw geometry (not RhinoObject) with Transform (like using DrawObject)

is there a chance to get this in Rhino 8 ?

thanks,
c.

Hey Clement,

You can create a DisplayBitmap from a System.Drawing.Bitmap and then draw it using

DrawObject with a transform has been there since Rhino 5

Hi @stevebaer,

I want to apply a bitmap which has not been saved to disk to a DisplayMaterial using SetBitmapTexture. I do not want to draw this bitmap in screen coordinates but applied to some geometry of my conduit.

I know, but what i actually want to do is to draw some geometry or multiple geometries with a transform. These geometries do not exist in the document. Something like this for brep(s), mesh(es) or subd(s):

DrawGeometry(brep, display_material, transform)

and something like this for geometries which do not use a material:

DrawGeometry(curves, transform)
_
c.