void begin_stroke(Frame3f vStartFrameL)
        {
            if (active_brush == BrushTool.SoftMove)
            {
                SculptCurveMove move = new SculptCurveMove();
                move.SmoothAlpha      = 0.1;
                move.SmoothIterations = 1;
                sculptOp = move;
            }
            else if (active_brush == BrushTool.Smooth)
            {
                SculptCurveSmooth smooth = new SculptCurveSmooth();
                smooth.SmoothAlpha      = this.SmoothAlpha;
                smooth.SmoothIterations = this.SmoothIterations;
                sculptOp = smooth;
            }

            sculptOp.Curve  = targets[0].Curve;
            sculptOp.Radius = this.Radius.SceneValue;
            sculptOp.BeginDeformation(vStartFrameL);

            if (EnableStrokeChangeTracking)
            {
                activeChange = new DCurve3VerticesEditedOp(targets[0], true);
            }
        }
        void end_stroke()
        {
            sculptOp = null;

            if (activeChange != null)
            {
                activeChange.StoreAfter();
                scene.History.PushChange(activeChange, true);
                scene.History.PushInteractionCheckpoint();
                activeChange = null;
            }
        }