@ferdinand Thank you for letting me know that switching between modes is irreversible! My initial thought was that when I generate an empty object in edit mode, if I undo the action, I could return to edit mode. Thanks again for your explanation
Best posts made by kangddan
-
RE: How to Undo Switching Between Modes?
Latest posts made by kangddan
-
RE: How to Undo Switching Between Modes?
@ferdinand My English isn't very good, sorry about that. What I mean is that when I am in edit mode and select points/edges/polygons, create a null object, and then switch back to object mode, if I want to undo, it would be more 'user-friendly' if I could return to the previous edit mode instead of object mode
It's good to know that calling doc.SetMode(c4d.Mmodel) is non-undoable; I struggled with this for a while -
RE: How to Undo Switching Between Modes?
@ferdinand Thank you for letting me know that switching between modes is irreversible! My initial thought was that when I generate an empty object in edit mode, if I undo the action, I could return to edit mode. Thanks again for your explanation
-
How to Undo Switching Between Modes?
Hello all, my script needs to work in point, edge, and polygon modes (edit modes). At the end of the script, I will switch it back to model mode, but I'm not sure how to undo the mode switching. When I run the code in point mode, I can't return to point mode when undoing
import c4d def main(): sel = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN) if not sel or not doc.IsEditMode(): return # edit mode doc.StartUndo() for obj in sel: doc.SetSelection(obj, c4d.SELECTION_SUB) joint = c4d.BaseObject(c4d.Ojoint) doc.AddUndo( c4d.UNDOTYPE_NEWOBJ, joint) doc.InsertObject(joint, None, obj, True) doc.SetSelection(joint, c4d.SELECTION_ADD) ... doc.SetMode(c4d.Mmodel) # set model mode doc.EndUndo() c4d.EventAdd() if __name__ == '__main__': main()
-
How to Use Button Properties in an XPresso Python Node?
I hope to do something by clicking the update button on the Python node. I’m not sure if this is possible
-
RE: Calling the button to create an object cannot add it to the undo queue
Thank you @m_adam It seems that the best approach is to manually create a null object and calculate its correct rotation matrix through certain methods to achieve the same effect. Once again, thank you for your code; it has been very useful to me!
-
Calling the button to create an object cannot add it to the undo queue
Hello everyone, when creating a splineIK tag, I dynamically call c4d.CallButton to create an IkHandle. At this point, an empty object is generated. I am now able to correctly retrieve it, but I can't add it to the undo queue. Since c4d.CallButton has no return value, I retrieve the empty object from the current scene each time I create an IkHandle. I'm not sure if there's a more proper way to do this
import c4d def createJoints(jointCount): jntList = [] for i in range(jointCount): jnt = c4d.BaseObject(c4d.Ojoint) jnt.SetName('splineIK_{}'.format(i)) doc.InsertObject(jnt) doc.AddUndo(c4d.UNDOTYPE_NEW, jnt) jntList.append(jnt) if i > 0: jnt.InsertUnder(jntList[i-1]) return jntList def getAllNulls(): return [obj for obj in doc.GetObjects() if obj.GetType() == c4d.Onull] def addSplineTag(startJnt, endJnt, spline): tag = c4d.BaseTag(1019862) doc.AddUndo(c4d.UNDOTYPE_NEW, tag) startJnt.InsertTag(tag) tag[c4d.ID_CA_IKSPLINE_TAG_TYPE] = 2 tag[c4d.ID_CA_IKSPLINE_TAG_TWIST_TYPE] = 1 tag[c4d.ID_CA_IKSPLINE_TAG_SPLINE] = spline tag[c4d.ID_CA_IKSPLINE_TAG_END] = endJnt splineIkHandles = [] for i in range(spline.GetPointCount()): c4d.CallButton(tag, c4d.ID_CA_IKSPLINE_HANDLE_ADD) c4d.CallButton(tag, c4d.ID_CA_IKSPLINE_HANDLE_CREATE) null = getAllNulls()[0] doc.AddUndo(c4d.UNDOTYPE_NEW, null) # add undo splineIkHandles.append(null) return splineIkHandles def createSplineIK(jointCount=10): sel = doc.GetSelection() if not sel: return spline = sel[0] if sel[0].CheckType(c4d.Ospline) else None if spline is None: return doc.StartUndo() # --------------------------------- jnts = createJoints(jointCount) splineIkHandles = addSplineTag(jnts[0], jnts[-1], spline) for i in splineIkHandles: print(i.GetName()) # --------------------------------- doc.EndUndo() c4d.EventAdd() if __name__ == '__main__': createSplineIK(jointCount=10)
-
RE: Adding a Morph Deformer Causes Pose Morph Tag to Stop Working
Thank u @i_mazlov
I appreciate you pointing me in the right direction. I will try to understand the workings behind the posemorph tag! -
RE: Adding a Morph Deformer Causes Pose Morph Tag to Stop Working
Hello everyone, I seem to have found a solution. You just need to go to the Falloff option in Morph and add a default parameter
data = c4d.FieldList() morph[c4d.FIELDS] = data
This way, the PoseMorph tag becomes effective. I still don't understand why this is necessary, as I can't find any python related content about the Morph deformer:(