Exemple #1
0
        public void EndDraw()
        {
            if (preview.Curve.ArcLength > 2 * SamplingRate)
            {
                if (EmitNewCurveF == null)
                {
                    // store undo/redo record for new primitive
                    SOMaterial  mat     = (CurveMaterialF == null) ? scene.DefaultCurveSOMaterial : CurveMaterialF();
                    PolyCurveSO CurveSO = preview.BuildSO(mat, 1.0f);
                    scene.History.PushChange(
                        new AddSOChange()
                    {
                        scene = scene, so = CurveSO, bKeepWorldPosition = false
                    });

                    // link ?
                    if (AttachCurveToSurface)
                    {
                        scene.History.PushChange(
                            new SOAddFrameLinkChangeOp(CurveSO, Target as TransformableSO));
                    }

                    scene.History.PushInteractionCheckpoint();
                }
                else
                {
                    EmitNewCurveF(preview);
                }
            }

            preview.Destroy();
            preview = null;

            //SavedSettings.Save("DrawSurfaceCurveTool_width", width);
        }
Exemple #2
0
        public virtual void EndDraw()
        {
            in_draw = false;
            if (preview == null)
            {
                return;
            }
            if (preview.Curve.VertexCount > 2 && preview.Curve.ArcLength > 2 * SamplingRateScene)
            {
                // update Closed state because in some cases we change this during drawing
                // (ie when drawing multi-point curve, but closing at end)
                preview.Closed = this.Closed;

                if (EmitNewCurveF == null)
                {
                    // store undo/redo record for new primitive
                    SOMaterial  mat     = (CurveMaterialF == null) ? Scene.DefaultCurveSOMaterial : CurveMaterialF();
                    PolyCurveSO CurveSO = preview.BuildSO(mat, 1.0f);
                    Scene.History.PushChange(
                        new AddSOChange()
                    {
                        scene = Scene, so = CurveSO, bKeepWorldPosition = false
                    });

                    // link ?
                    if (AttachCurveToSurface)
                    {
                        Scene.History.PushChange(
                            new SOAddFrameLinkChangeOp(CurveSO, Target));
                    }

                    Scene.History.PushInteractionCheckpoint();
                }
                else
                {
                    EmitNewCurveF(preview);
                }
            }

            preview.Destroy();
            preview = null;

            //SavedSettings.Save("DrawSurfaceCurveTool_width", width);
        }