You’ve gotta be kidding? This isn’t a joke. The point is to bake objects to layers without having to manually set the active layer in Rhino for each one and bake objects/layers, one at a time.
This is ridiculous. Truly a tower of babel.
You’ve gotta be kidding? This isn’t a joke. The point is to bake objects to layers without having to manually set the active layer in Rhino for each one and bake objects/layers, one at a time.
This is ridiculous. Truly a tower of babel.
You didn’t say this before and I cannot read minds. Sorry. Moving this off-topic part to your other thread.
The second thread this morning that you are splitting to disrupt the continuity of a subject…?
Damn! Aggressively buried and hidden under an obscure thread title in the Scripting forum. Wow.
Can we get back to your request…? Please. You want to automatically bake to a layer. Right? What part is not working?
So, after re-reading all the questions, I managed to get the previous sample to work. It should be doing what you are after, which I think was a problem mostly about dealing with Groups
.
__author__ = "Joseph Oster, IslandCAD.com"
__version__ = "2020.01.29"
import rhinoscriptsyntax as rs
import scriptcontext
import Rhino
import System
def perform_baking(geo, layer, rM, mSrc):
if geo:
if layer is None: layer = 'Default'
if not rs.IsLayer(layer): rs.AddLayer(layer)
attributes = scriptcontext.doc.CreateDefaultAttributes()
if rM is not None:
matIndex = scriptcontext.doc.Materials.Add(rM)
attributes.MaterialIndex = matIndex
if (mSrc < 0) or (mSrc > 3): mSrc = 1 #must be 0=layer, 1=object or 2=parent
if (mSrc == 0): #from layer
if rM is not None:
layerIndex = rs.LayerNames().index(layer)
scriptcontext.doc.Layers[layerIndex].RenderMaterial = Rhino.Render.RenderMaterial.CreateBasicMaterial(rM)
attributes.MaterialSource = Rhino.DocObjects.ObjectMaterialSource.MaterialFromLayer
elif (mSrc == 1): #from object
attributes.MaterialSource = Rhino.DocObjects.ObjectMaterialSource.MaterialFromObject
else: #from parent
attributes.MaterialSource = Rhino.DocObjects.ObjectMaterialSource.MaterialFromParent
# add both the geo and the attributes to the Rhino doc
rhino_id = scriptcontext.doc.Objects.Add(geo, attributes)
print rhino_id
rs.ObjectLayer(rhino_id, layer)
return rhino_id
if active:
#we change the scriptcontext
scriptcontext.doc = Rhino.RhinoDoc.ActiveDoc
try:
if type(geo) is System.Guid:
geo = ghdoc.Objects.Find(geo)
if geo: geo = geo.Geometry
perform_baking(geo, layer, rM, mSrc)
else: #assume group
ids = []
for g in geo: ids.append(perform_baking(g, layer, rM, mSrc))
groupName = rs.AddGroup()
rs.AddObjectsToGroup(ids, groupName)
finally: #put back the original Grasshopper document as default
scriptcontext.doc = ghdoc
joseph-bake-help.gh (31.0 KB)
Have a good day.
I recommending installing EleFront, which has extensive controls for baking. The standard “bake” function in Grasshopper will simply keep on adding objects to Rhino, whereas Elefront will delete the previously baked objects, based on how you organise your elements. You can specify layer, colour, attributes… etc etc
thank you very much . very interesting tool
if you connect a manipulator, you can make an automatic bake with replacement.
How exactly do you do that?
what exactly ?
The replacement part… I want to replace for every bake and not just make more geometry.