# Regression: DrawViewportMeshes/Wires Requires Bounding Box Method

**URL:** <https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513>\
**Category:** Grasshopper Developer\
**Tags:** windows, ghpython\
**Created:** [April 3, 2025, 9:01am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513 "2025-04-03T09:01:16Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![AndersDeleuran](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/andersdeleuran/32/476683_2.png) [@AndersDeleuran](https://discourse.mcneel.com/u/AndersDeleuran)\
**Post date:** [April 3, 2025, 9:01am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/1 "2025-04-03T09:01:16Z")

</div>

Hello McNeelies,

As part of testing our BIG pipelines in Rhino 8 I’ve noticed a minor, but quite annoying, regression related to drawing stuff by implementing the `DrawViewportMeshes` and `DrawViewportWires` methods in GhPython. When drawing stuff with nothing else in the display pipeline (i.e. existing in the Rhino file or elsewhere being rendered by Grasshopper) a GhPython component will draw stuff just fint without implementing the `get_ClippingBox` method, and one can use the `ZEA` Rhino command to zoom extend all to the geometry being drawn. In Rhino 8 this is not longer the case:

 ![2025-04-03 10_47_02-Rhino 7 Commercial - Perspective](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/a/5/1/a51c04c26b99eba3914892c4146d521685da4d97.png)  
 ![2025-04-03 10_48_14-Grasshopper Python Script Editor](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/9/7/2/972b33c7273cf3a4eea57712e925c4e74c7510e3.jpeg)  
 ![2025-04-03 10_48_51-Grasshopper Python Script Editor](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/0/9/b/09bd841e4e934efeb5c1600af0e4aeaaa7685b25.jpeg)  
[00\_DrawViewportWiresMeshes.gh](https://discourse.mcneel.com/uploads/short-url/31QpQBAx3HyhBBoT40Ycet16m5e.gh) (10.6 KB)

> **System Info Rhino 7**
>
> Rhino 7 SR38 2024-12-3 (Rhino 7, 7.38.24338.17001, Git hash:master @ 97e36efa02d7f71638988290bb2d190fcf1b18c5)  
> License type: Commercial, build 2024-12-03  
> License details: Cloud Zoo
> 
> Windows 11 (10.0.26100 SR0.0) or greater (Physical RAM: 32Gb)
> 
> Computer platform: LAPTOP - Plugged in [100% battery remaining]
> 
> Hybrid graphics configuration.  
> Primary display: Intel(R) Iris(R) Xe Graphics (Intel) Memory: 2GB, Driver date: 9-13-2024 (M-D-Y).  
> \> Integrated graphics device with 4 adapter port(s)  
> - Windows Main Display is laptop’s integrated screen or built-in port  
> Primary OpenGL: NVIDIA RTX 2000 Ada Generation Laptop GPU (NVidia) Memory: 8GB, Driver date: 9-2-2024 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 553.05  
> \> Integrated accelerated graphics device (shares primary device ports)  
> - Video pass-through to primary display device
> 
> OpenGL Settings  
> Safe mode: Off  
> Use accelerated hardware modes: On  
> Redraw scene when viewports are exposed: On  
> Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)
> 
> Anti-alias mode: 8x  
> Mip Map Filtering: Linear  
> Anisotropic Filtering Mode: High
> 
> Vendor Name: NVIDIA Corporation  
> Render version: 4.6  
> Shading Language: 4.60 NVIDIA  
> Driver Date: 9-2-2024  
> Driver Version: 31.0.15.5305  
> Maximum Texture size: 32768 x 32768  
> Z-Buffer depth: 24 bits  
> Maximum Viewport size: 32768 x 32768  
> Total Video Memory: 8188 MB
> 
> Rhino plugins that do not ship with Rhino
> 
> Rhino plugins that ship with Rhino  
> C:\Program Files\Rhino 7\Plug-ins\Commands.rhp “Commands” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\rdk.rhp “Renderer Development Kit”   
> C:\Program Files\Rhino 7\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\rdk\_etoui.rhp “RDK\_EtoUI” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\rdk\_ui.rhp “Renderer Development Kit UI”   
> C:\Program Files\Rhino 7\Plug-ins\NamedSnapshots.rhp “Snapshots”   
> C:\Program Files\Rhino 7\Plug-ins\IronPython\RhinoDLR\_Python.rhp “IronPython” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\RhinoCycles.rhp “RhinoCycles” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\Grasshopper\GrasshopperPlugin.rhp “Grasshopper” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 7.38.24338.17001  
> C:\Program Files\Rhino 7\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”   
> C:\Program Files\Rhino 7\Plug-ins\Displacement.rhp “Displacement”

> **System Info Rhino 8**
>
> Rhino 8 SR18 2025-3-31 (Rhino 8, 8.18.25090.15001, Git hash:master @ 66cc90ff9a04d80914b43ff389aea604f2dc324b)  
> License type: Commercial, build 2025-03-31  
> License details: Cloud Zoo
> 
> Windows 11 (10.0.26100 SR0.0) or greater (Physical RAM: 32GB)  
> .NET Framework 4.8.9290.0
> 
> Computer platform: LAPTOP - Plugged in [100% battery remaining]
> 
> Hybrid graphics configuration.  
> Primary display: Intel(R) Iris(R) Xe Graphics (Intel) Memory: 2GB, Driver date: 9-13-2024 (M-D-Y).  
> \> Integrated graphics device with 4 adapter port(s)  
> - Windows Main Display is laptop’s integrated screen or built-in port  
> Primary OpenGL: NVIDIA RTX 2000 Ada Generation Laptop GPU (NVidia) Memory: 8GB, Driver date: 9-2-2024 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 553.05  
> \> Integrated accelerated graphics device (shares primary device ports)  
> - Video pass-through to primary display device
> 
> OpenGL Settings  
> Safe mode: Off  
> Use accelerated hardware modes: On  
> GPU Tessellation is: On  
> Redraw scene when viewports are exposed: On  
> Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)
> 
> Anti-alias mode: 8x  
> Mip Map Filtering: Linear  
> Anisotropic Filtering Mode: High
> 
> Vendor Name: NVIDIA Corporation  
> Render version: 4.6  
> Shading Language: 4.60 NVIDIA  
> Driver Date: 9-2-2024  
> Driver Version: 31.0.15.5305  
> Maximum Texture size: 32768 x 32768  
> Z-Buffer depth: 24 bits  
> Maximum Viewport size: 32768 x 32768  
> Total Video Memory: 8188 MB
> 
> Rhino plugins that do not ship with Rhino
> 
> Rhino plugins that ship with Rhino  
> C:\Program Files\Rhino 8\Plug-ins\Commands.rhp “Commands” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\rdk.rhp “Renderer Development Kit”   
> C:\Program Files\Rhino 8\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\rdk\_etoui.rhp “RDK\_EtoUI” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\NamedSnapshots.rhp “Snapshots”   
> C:\Program Files\Rhino 8\Plug-ins\MeshCommands.rhp “MeshCommands” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\IronPython\RhinoDLR\_Python.rhp “IronPython” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\RhinoCycles.rhp “RhinoCycles” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\Grasshopper\GrasshopperPlugin.rhp “Grasshopper” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 8.18.25090.15001  
> C:\Program Files\Rhino 8\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”   
> C:\Program Files\Rhino 8\Plug-ins\Displacement.rhp “Displacement”   
> C:\Program Files\Rhino 8\Plug-ins\SectionTools.rhp “SectionTools”

Of course one can just implement the `get_ClippingBox` method to solve the problem. But it would be great if one didn’t have to (i.e. to reduce complexity/code).

Thanks and best,

Anders

---

<div class="post-metadata">

**Author:** ![AndersDeleuran](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/andersdeleuran/32/476683_2.png) [@AndersDeleuran](https://discourse.mcneel.com/u/AndersDeleuran)\
**Post date:** [April 15, 2025, 7:30am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/2 "2025-04-15T07:30:48Z")

</div>

Bump..

---

<div class="post-metadata">

**Author:** ![Cumberland](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/cumberland/32/755683_2.png) [@Cumberland](https://discourse.mcneel.com/u/Cumberland)\
**Post date:** [April 15, 2025, 8:26am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/3 "2025-04-15T08:26:00Z")

</div>

Bumpy Bump.

---

<div class="post-metadata">

**Author:** ![Tom\_P](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/tom_p/32/766520_2.png) [@Tom\_P](https://discourse.mcneel.com/u/Tom_P)\
**Post date:** [May 29, 2025, 10:47am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/4 "2025-05-29T10:47:59Z")

</div>

> [@AndersDeleuran](#):
>
> implement the `get_ClippingBox` method to solve the problem. But it would be great if one didn’t have to

> **[Display Conduits](https://developer.rhino3d.com/guides/rhinocommon/display-conduits/)**
>
> This guide gives an overview of Display Conduits and how to use them to access Rhino's display pipeline.

 ![display-conduits-02](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/3/d/0/3d03f0ad7150e6c17b2ae007681dcf1a82eac37a.png)  
my guess:  
all the display stuff is performance sensitive and some functionality / approach relies on GPU stuff like OpenGL (windows) and /or Metal (mac).  
i think it totally makes sense to let the developer decide where and when the Boundingbox is calculated, optional needs updates and so on. it s the developer / the component that hold s all nescessary information, like boudingbox and geometry, … and wether it needs updating or not.

I think its a correct design decision from a performance point of view - to skip drawing components, that do not provide a valid Boundingbox and therefor do not implement the IGH\_PreviewObject Interface correctly.

… of course it would be nice if some magic in the background would allow more laziness and less boilerplate code…

just came across this because of the other topic:

> [@DrawViewportWires / Meshes only called when there are C# outputs](https://discourse.mcneel.com/t/drawviewportwires-meshes-only-called-when-there-are-c-outputs/205154/2):
>
> without testing but i think you need to override public override BoundingBox ClippingBox

kind regards -tom

---

<div class="post-metadata">

**Author:** ![AndersDeleuran](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/andersdeleuran/32/476683_2.png) [@AndersDeleuran](https://discourse.mcneel.com/u/AndersDeleuran)\
**Post date:** [July 3, 2025, 7:29am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/5 "2025-07-03T07:29:30Z")

</div>

> [@Tom\_P](#):
>
> I think its a correct design decision from a performance point of view - to skip drawing components, that do not provide a valid Boundingbox and therefor do not implement the IGH\_PreviewObject Interface correctly.

It’s not that drawing is being skipped per se. Here’s an example of a current project file running in V7 vs V9. Where’s the latter still draws stuff, but with “wrong” bounding boxes (excuse the horrible compression, had a hard time getting the capture below 20MB):

> [@Tom\_P](#):
>
> … of course it would be nice if some magic in the background would allow more laziness and less boilerplate code…

I’m not asking for magic. I’d just prefer if things worked like they do in Rhino 7. So I can type less code and my current/old pipelines wouldn’t need to be updated with bounding box methods all over the place to work in Rhino 8/9. That seems reasonable to me 🤷‍♂️

---

<div class="post-metadata">

**Author:** ![Tom\_P](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/tom_p/32/766520_2.png) [@Tom\_P](https://discourse.mcneel.com/u/Tom_P)\
**Post date:** [July 3, 2025, 9:03am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/6 "2025-07-03T09:03:48Z")

</div>

sorry if i can not help you with your wish.  
maybe @nathanletwory can explain the changes from v7 to v8 or at least point to the right person.

---

<div class="post-metadata">

**Author:** ![nathanletwory](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/nathanletwory/32/482880_2.png) [@nathanletwory](https://discourse.mcneel.com/u/nathanletwory)\
**Post date:** [July 3, 2025, 12:16pm UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/7 "2025-07-03T12:16:55Z")

</div>

> [@Tom\_P](#):
>
> at least point to the right person.

Probably one of @kike , @AndyPayne, @dale or @jeff

---

<div class="post-metadata">

**Author:** ![AndersDeleuran](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/andersdeleuran/32/476683_2.png) [@AndersDeleuran](https://discourse.mcneel.com/u/AndersDeleuran)\
**Post date:** [July 7, 2026, 6:51am UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/8 "2026-07-07T06:51:11Z")

</div>

> [@AndersDeleuran](#):
>
> I’m not asking for magic. I’d just prefer if things worked like they do in Rhino 7. So I can type less code and my current/old pipelines wouldn’t need to be updated with bounding box methods all over the place to work in Rhino 8/9. That seems reasonable to me 🤷‍♂️

Bump on this one 👆

---

<div class="post-metadata">

**Author:** ![AndersDeleuran](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/andersdeleuran/32/476683_2.png) [@AndersDeleuran](https://discourse.mcneel.com/u/AndersDeleuran)\
**Post date:** [October 21, 2026, 1:45pm UTC](https://discourse.mcneel.com/t/regression-drawviewportmeshes-wires-requires-bounding-box-method/202513/9 "2026-10-21T13:45:28Z")

</div>

Bump bump…
