Hello @kai.aurelien.zhu!
I’ve used QGIS several years ago and it is a really nice tool. How can users extend its functionality? From a quick google search it seems one could write a plugin in c++ or python? You’ll have to help us here since not many of us are well versed on QGIS. If one can write a plugin in python, it might be possible to run Rhino.Inside.Python.Inside.QGIS (mouthful!) or you could write some file IO with the rhino3dm.py library. My suggestion is to get started with rhino3dm.py (samples) and then take a look at Rhino.Inside.CPython.

Take all of this with a grain of salt as I’m far (very far) from a python expert. @nathanletwory has written an import_3dm plugin for Blender that you might want to take a look at.


The import_3dm plug-in I wrote doesn’t use Rhino.Inside but rather just rhino3dm.

I tried Rhino.Inside using CPython in Blender, but there is still a bug that crashes Blender when trying to load Rhino.Inside. That said, it works fine in regular Python, so it very well may work with QGIS.

1 Like

Hey Luis thanks for the speedy response! I’ll definitely check those resources out, maybe it won’t be as technically feasible compared to Rhino.Inside.ArcGIS… will give it a shot anyway.

In terms of extending its functionality, the big one in my opinion would be access to the Grasshopper plugin ecosystem, specifically related to simulation and optimisation (Urbano, Wallacei, DeCoding spaces toolbox). The GIS discipline is mature and connecting the data directly to Rhino/Grasshopper via Rhino.Inside would remove quite a large barrier for interoperability and I think have a massive impact on Urban Design at the very least.

A number of existing Grasshopper plugins exist which can work with GIS data of course… but then again it was the same situation with Grasshopper -> Revit before RiR. None are as sophisticated as a rhino.inside project could be.


Luis, Kai

I’m very, very interested to see this develop. I would try to help where possible.
@kai.aurelien.zhu have you tried the ShrimpGIS… also good for the current situation.

1 Like

Hi Luis and Kai,
I know this is somewhat of an old post but wanted to revive it. We are very interested in connecting Urbano.io with QGIS. We have some use cases in mind but It would be helpful to start a discussion here.

1 Like

QGIS could probably be now linked to Rhino thru the Hops component for CPython. Would it be possible to run the Hops libraries in QGIS?

1 Like

I am confused. Your site shows a nice integration with Grasshopper and Rhino. Is there a certain aspect of that you would like it to do more? Is Urbano.io in CPython? C#?

The Hops component allows for some really interesting connections that may work for you:

Hi Scott - thanks for your questions. We developed Urbano in C# and it integrates well with Grasshopper and can import urban data from multiple sources such as SHP files or OSM data. I know some users would like to see a more smooth link into GIS tools and I am wondering what the best approach for this would be. It would be wonderful to hear from users what workflows they would like to see. I can imagine simple ways to share data via shp or geoJSON (allowing export via Urbano), I can also imagine that users might want GIS data processing functions such as sorting, merging, clustering data spatially.

1 Like

Yes I did investigate this briefly getting Rhino running in CPython but fell by the wayside over time. I did note that the new hops component would be worth investigating when reviving Rhino.Inside.QGIS

Personally, I think a direct connection with Rhino running within QGIS would be the best possible outcome for integrating GIS. I would gladly support your project if you decide to open source it? I am able to code in python & c#


Kai -

The Hops connection to CPython library is open source:

The nice part about Hops is that the backend process can be completely outside Rhino.

To use Rhino.Inside directly in QGIS, it would have to be on a Windows operating System and it is easiest if QGIS had a .NET SDK. Rhino .Inside is also Open Source, here:

Those seem to be the best candidates to connect these platforms.

1 Like

Thanks Scott, sorry I was referring to Urbano, not hops component and rhino.inside being Open Source. Will definitely be looking deeper into this now that hops is available.

What about using the Rhino3DM.py library to work within a QGIS Python plugin? Has anyone tried this?

That was my gameplan last year. I gave it a go but didn’t make much progress. If I have some time, I’ll try and renew my efforts and see if the hops can have a role as well.

We have made some technical changes that may make it easier to connect with QGIS Python. What version of Python does QGIS run?

By using the Cpython link to Grasshopper thru Hops might work well. Here are a couple threads that may help:

  1. Linking Blender Python to Hops: Rhino Inside in Blender - #3 by ivelin.peychev
  2. Specifically, here is the Blender geometry being shared: Create CPython components using Hops in Grasshopper - #53 by tom_svilans
  3. Here are the basics of a Cpython service: Create CPython components using Hops in Grasshopper

Will those libraries load in QGIS?

1 Like

Thise webinar also may shed some light on how to connect to other applications:


QGIS ships with python 3.7, I don’t think that is compatible with the hops component as it requires 3.8.

I am trying to figure out if it’s possible to upgrade the python version in QGIS but haven’t been able to so far.

pyqgis - update python for QGIS - Geographic Information Systems Stack Exchange.

@kai.aurelien.zhu, I’m starting to think that it’s maybe smarter to test making a Python connector for Speckle to stream data (geometry + attributes) from QGIS to Speckle / Rhino. This is the guide for creating a new connector since I don’t think they’ve created a QGIS or ArcGIS connector yet. They even give the example of the Blender connector on Github for writing a new Python connector.

1 Like

Thanks Darrel, that’s a great idea I didn’t think of that. I will do my best to scrape some time to investigate this (am very busy atm working on my registration).

@timkado (cc: @scottd) Have you gone any further with this integration. I was again spending time this morning thinking about GIS / Rhino integration. I think this is still a huge missed opportunity for Rhino in general.

I scanned all the current GIS plugins for Grasshopper this morning, and the vast majority are dead projects. Only ShrimpGIS, Urbano, Meerkat and GHopperGIS really continue development. In addition, there are lots of overlaps but every plugin is incomplete.

Native Rhino / Grasshopper Wishlist

  • better support for geo-location within Rhino. The current obscure and poorly documented EarthAnchorPoint is the only function at the moment.
  • Direct reading and writing of both Geometry and Properties for: Geopackage, GeoJSON, Shape (and connected files) and CityJSON. The properties can be written to the Rhino geometry Archivable Dictionary making Rhino work like a database.
  • 3D Tiles support
  • GDAL library support
  • CPython 3.6+ support for Python GIS libraries

Rhino/Grasshopper Plugin Wishlist
A lot of the normal GIS functionality / processing is easily replicated, or already current functionality of Rhino/Grasshopper. But it would be good to have:

  • The multiple plugin authors collaborate more on open source. An example would be combine: ShrimpGIS, Bison GIS and Urbano.
  • universal API reader for only geodata. The standard OGC data services could be accessible (from the 1000s of different national services) by an API component where we feed it options. Then a user could access open data from different services, such as: OGC API (new standard), WMS, WMTS, etc.
  • custom API readers, for specific data sources…
1 Like


So far nobody mentioned the option to run Rhino.Inside.CPython. This has access to the full RhinoCommon API/SDK due to the headless Rhino/GH. It is different from the Rhino3DM.py which has estimated 200 functions, far less than the (estimated) 2000+ of full RhinoCommon. So in theory, this could be run from within a QGIS Python script. Surprisingly, I never hear about this option since it launched and I see that it hasn’t been updated since October 2019.

The problem of course (with this route) is that you then are stuck using the QGIS interface / plugin for operations. Whereas the goal is to use Rhino / Grasshopper interface to control and create native QGIS data.

I also still think that:

  1. Using Rhino.Inside.QGIS would be amazing and the best option
  2. The seamless merger of GIS and CAD is one of the most exciting challenges today

The other thing I was just reading about is the PyQGIS Cookbook from the QGIS developer docs. In section 1.4 about Python Applications it appears that you can run QGIS in headless (or GUI) mode. You can trigger QGIS to run from an external Python script. See the follow-up sections 1.4.1 to 1.4.3. We would need to know PyQGIS API and map RhinoCommon commands to the PyQGIS commands. But what is exciting is being able to run QGIS from Python.

The caveat of course is that QGIS needs to be installed on the machine. I assume you could also run a remote QGIS server, but I have no experience with this.