Couple of cone-y questions

Just in general, why are scripted/RhinoCommon cones created “upside-down”? I can understand that they are created from a revolve of a line passing through the base plane origin, but for practical purposes, most people create cones in the inverse way, starting from a circle at the base plane origin and going “upward” to the apex…

And, a Rhino.Geometry.Cone() object is also always created “solid”… Again, why? I know you can get just the cone part by using cone.ToBrep(False) or .ToSurface() or .ToRevSurface(), but it would seem more logical (to me) if the cone object was created open and then cap created later if desired…

Lastly, as a corrolary to the above, Rhino.Geometry.Mesh.CreateFromCone(cone) always produces a closed mesh cone. There is no easy way I can see to create an open mesh cone; creating a mesh from a RevSrf is not the same as you can’t specify the number of “around” and “vertical” divisions as you can with a normal mesh cone…

Hi Mitch,

I’d say this is te same as to why a box is solid and a sphere and a torus and a …
they are volume describing shapes, as such they are solid in basis.

I took up the challenge. :wink:
My take would be an implicit one, where I assume the CreateFromCone code to be always creating the mesh parts in the same order:

import Rhino
import scriptcontext as sc

plane = Rhino.Geometry.Plane.WorldXY
cone = Rhino.Geometry.Cone(plane,100,50)
mesh = Rhino.Geometry.Mesh.CreateFromCone(cone,1,10)
meshes = list(mesh.ExplodeAtUnweldedEdges())
#assume first mesh to be the conical surface

#check if indeed apex in meshes[0]
apex = cone.ApexPoint # this point we want to test for in the mesh
for i,mesh in enumerate(meshes):
    for vertex in mesh.Vertices:
        if apex.CompareTo(vertex) == 0:
            print 'apex in explodedmeshes index {}'.format(i)


I don’t necessarily agree here, to me a cone is a revolved line and as such, like other revolved profiles, it can be open… Let’s just say a difference of philosophy… :wink:

Yes, a more “explicit” test might be to figure out which of the two meshes are planar and discard that one. I was simply hoping for a more elegant way to get there rather than exploding and discarding, and again, the question was more of a philosophical nature rather than anything else.

Cheers, --Mitch

1 Like

Hi @Helvetosaur,

No reason in particular. Clearly, the UI presents the construction of a cone different than the API that actually constructs the cone.

A Rhino.Geometry.Cone is not solid. It is simply a structure that holds a base plane, radius, and height values.

Seems like a reasonable request.

– Dale