Calling Bevel tool and setting parametrs
-
Just when I thought I might be getting the hang of python in C4D I ran into a challenge of trying to bevel an edge selection. I've been able to piece together most of what I think I need but I've run into two problems. The first being that I can't set the offset of the tool and second I must be missing some sort of command to have the polygons show up after the resulting bevel takes place. I've been scouring the forums and trying a bunch of things for the last few hours and I've come to the point where I have to throw in the towel and seek professional help.
Any and all help is appreciated.
Here's what I have so far -
tags = op.GetTags() for tag in tags: if tag.GetType()==5701: #edge selection doc.SetMode(c4d.Medges) selection = tag.GetBaseSelect() edgeSelected = op.GetEdgeS() selection.CopyTo(edgeSelected) c4d.CallCommand(431000015,431000015) # xll bevel tool tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) bcBevel = doc.GetActiveToolData() bcBevel.SetData(c4d.MDATA_BEVEL_OFFSET_MODE, 0) bcBevel.SetData(c4d.MDATA_BEVEL_RADIUS, 1) bcBevel.SetData(c4d.MDATA_BEVEL_SUB, 2) bcBevel.SetData(c4d.MDATA_BEVEL_DEPTH, 1) bcBevel.SetData(c4d.MDATA_BEVEL_SELECTION_PHONG_BREAK, False) c4d.CallButton(tool, c4d.MDATA_APPLY) op.Message(c4d.MSG_UPDATE) c4d.EventAdd()
-
Hi @del thanks for reaching us,
As you figured the new bevel tool is c4d.ID_XBEVELTOOL (431000015) (I will update the python documentation) but in order to make it work the recommended way is to use SendModelingCommand like soimport c4d doc.StartUndo() # Settings settings = c4d.BaseContainer() settings[c4d.MDATA_BEVEL_MASTER_MODE] = c4d.MDATA_BEVEL_MASTER_MODE_SOLID settings[c4d.MDATA_BEVEL_RADIUS] = 5 settings[c4d.MDATA_BEVEL_SELECTION_PHONG_BREAK] = False doc.AddUndo(c4d.UNDOTYPE_CHANGE, op) res = c4d.utils.SendModelingCommand(command = c4d.ID_XBEVELTOOL, list = [op], mode = c4d.MODELINGCOMMANDMODE_EDGESELECTION, bc = settings, doc = doc) doc.EndUndo() c4d.EventAdd()
You can find a list of all symbols in the cpp documentation of xbeveltool.h.
Cheers,
Maxime. -
Hi and thanks for the help.
I tried the script but I don't get any results. No error message and no change to the model. Please keep in mind that I'm in R19 if that makes a difference. I tried it in R20 and it creates a bevel. Not the bevel I expected but it was at least promising that it did something.
Here is what I have based on your info.
import c4d from c4d import utils def main(): bcBevel = c4d.BaseContainer() bcBevel[c4d.MDATA_BEVEL_MASTER_MODE] = c4d.MDATA_BEVEL_MASTER_MODE_CHAMFER bcBevel[c4d.MDATA_BEVEL_OFFSET_MODE] = c4d.MDATA_BEVEL_OFFSET_MODE_FIXED bcBevel[c4d.MDATA_BEVEL_RADIUS] = 1 bcBevel[c4d.MDATA_BEVEL_SUB] = 2 bcBevel[c4d.MDATA_BEVEL_DEPTH] = 1 bcBevel[c4d.MDATA_BEVEL_SELECTION_PHONG_BREAK] = False tags = op.GetTags() for tag in tags: if tag.GetType()==5701: doc.StartUndo() doc.SetMode(c4d.Medges) selection = tag.GetBaseSelect() edgeSelected = op.GetEdgeS() selection.CopyTo(edgeSelected) doc.AddUndo(c4d.UNDOTYPE_CHANGE, op) res = c4d.utils.SendModelingCommand( c4d.ID_XBEVELTOOL, [op], c4d.MODELINGCOMMANDMODE_EDGESELECTION, bcBevel, doc) doc.EndUndo() c4d.EventAdd() if __name__=='__main__': main()
-
C4D might have been 'messed up' based on my prior attempts. I've restarted it and may be making progress.
-
Here in R19 it's working nicely. Let me know if you are able to reproduce the issue.
Cheers,
Maxime. -
Restarting c4d fixed it! Now I just have to get the hidden polys produced by the bevel to appear. I'm pretty sure I need a message update or something like that as they appear once I move the model.
Thanks for your help.
.del -
Does anybody know what format I'm supposed to use to send a number to the Bevel tool for the radius? I'm currently only able to get it to work with whole numbers like 1 or 2. I'd like to set it to .5.
I've tried float(.5) and int(.5) but both end up giving me no bevel. I can't find any documentation for this.
thanks,
.del -
found it!!! I had to float('0.5')
-
settings[c4d.MDATA_BEVEL_RADIUS] = 0.5
Works fine here.