CPython in ShapeDiver

Hi,

I’m interested in trying shapediver but am curious if there is any way to support CPython code in an app.
As I understand, most plugins (hops, GH python remote) that accomplish this do so by connecting to a separate python server. I don’t see those apps listed in the third-party list and am curious if shapediver is even capable of supporting these tools due to the fact that an outside instance of python must also be running.

Thanks,

This kind of setup can be configured for Enterprise clients. For the shared systems, this is indeed not possible at the moment, however the Python Script node is available to use inside your definition. I could maybe suggest an alternative if you explain your use case.

Mathieu,

With the release of rhino 8, I would like to revisit this question.
Rhino 8 natively supports CPython, which removes the need for any remote access to outside instances of python. Does Shapediver have plans to support rhino 8 grasshopper scripts? If yes, will CPython access be incorporated into Designer and Designer Plus licenses?

Thanks

We will soon support Rhino 8 on our servers. We are currently working with McNeel to be able to support the new scripting component (including CPython support). This will likely early next year.

However, note that we will have a mechanism that only allows a curated set of dependencies in CPython, as many of them will be incompatible with ShapeDiver or a threat to our system. If you already have a list of dependencies that you would need to use in your scripts, please let us know which ones those are, so we can add them to the requested list and review them.

Hi there,

Is there a published list of CPython dependencies that are compatible with Shapediver Apps published on the Rhino 8 system? I’ve tried looking but haven’t found anything!

Thanks

There is no official list yet, as we did not do any extensive testing for Python dependencies yet. Which one would you like to use? Could you attach an example script making use of it? If we evaluate it safe, it can be allowed in the next few days.

Understood, I’d love to be able to use PyNiteFEA to evaluate member forces in simple structures. I know that Karamba3D free version is available and pro version can be requested if you are on enterprise but for simple tasks, it would be great to have the option to do it with Python.

Thank you for providing those details. Would it be possible for you to attach a minimal script making use of this library? As our team is not familiar with it, it would help us get started on reviewing the library and its functionalities.

Hey Mathieu,

The best example of a minimal script is probably their quickstart which can be found at this link: Quickstart — Pynite 0.0.81 documentation. I’ve also pasted it below for ease of reference.

Thanks!

# Example of a simply supported beam with a uniform distributed load.
# Units used in this example are inches and kips
# This example does not use load combinations. The program will create a
# default load combindation called 'Combo 1'

# Import `FEModel3D` from `PyNite`
from PyNite import FEModel3D

# Create a new finite element model
beam = FEModel3D()

# Add nodes (14 ft = 168 inches apart)
beam.add_node('N1', 0, 0, 0)
beam.add_node('N2', 168, 0, 0)

# Define a material
E = 29000       # Modulus of elasticity (ksi)
G = 11200       # Shear modulus of elasticity (ksi)
nu = 0.3        # Poisson's ratio
rho = 2.836e-4  # Density (kci)
beam.add_material('Steel', E, G, nu, rho)

# Add a beam with the following properties:
# Iy = 100 in^4, Iz = 150 in^4, J = 250 in^4, A = 20 in^2
beam.add_member('M1', 'N1', 'N2', 'Steel', 100, 150, 250, 20)

# Provide simple supports
beam.def_support('N1', True, True, True, False, False, False)
beam.def_support('N2', True, True, True, True, False, False)

# Add a uniform load of 200 lbs/ft to the beam (from 0 in to 168 in)
beam.add_member_dist_load('M1', 'Fy', -200/1000/12, -200/1000/12, 0, 168)

# Alternatively the following line would do apply the load to the full
# length of the member as well
# beam.add_member_dist_load('M1', 'Fy', 200/1000/12, 200/1000/12)

# Analyze the beam
beam.analyze()

# Print the shear, moment, and deflection diagrams
beam.Members['M1'].plot_shear('Fy')
beam.Members['M1'].plot_moment('Mz')
beam.Members['M1'].plot_deflection('dy')

# Print reactions at each end of the beam
print('Left Support Reaction:', beam.Nodes['N1'].RxnFY, 'kip')
print('Right Support Reacton:', beam.Nodes['N2'].RxnFY, 'kip')

# Render the deformed shape of the beam magnified 100 times, with a text
# height of 5 inches
from PyNite.Visualization import Renderer
renderer = Renderer(beam)
renderer.annotation_size = 6
renderer.deformed_shape = True
renderer.deformed_scale = 100
renderer.render_loads = True
renderer.render_model()

This script looks like a good starting point for testing the library. Have you already tried adapting it for the new Rhino 8 scripting component? That would be the minimal example needed for us to investigate it.