void RemoveInsertedPoints(SPCRJointDynamicsController controller)
    {
        var OriginalPoints = controller._SubDivOriginalPoints;
        var InsertedPoints = controller._SubDivInsertedPoints;

        if (OriginalPoints.Count == 0)
        {
            return;
        }

        controller.DeleteJointConnection();

        var originalPoints = new Dictionary <int, SPCRJointDynamicsPoint>(OriginalPoints.Count);

        foreach (var op in OriginalPoints)
        {
            int key = op.GetInstanceID();
            if (!originalPoints.ContainsKey(key))
            {
                originalPoints.Add(key, op);
            }
        }

        var rootList = new List <SPCRJointDynamicsPoint>();

        foreach (var root in controller._RootPointTbl)
        {
            if (!originalPoints.ContainsKey(root.GetInstanceID()))
            {
                continue;
            }

            rootList.Add(root);

            var parentPoint = root;
            var chainPoint  = root;
            while (chainPoint != null)
            {
                var children = chainPoint.GetComponentsInChildren <SPCRJointDynamicsPoint>();
                if (children.Length < 2)
                {
                    break;
                }
                var childPoint = children[1];
                if (originalPoints.ContainsKey(childPoint.GetInstanceID()))
                {
                    childPoint.transform.SetParent(parentPoint.transform);
                    parentPoint = childPoint;
                }
                chainPoint = childPoint;
            }
        }

        foreach (var point in InsertedPoints)
        {
            point._RefChildPoint = null;
            point.transform.SetParent(null);
        }

        foreach (var point in InsertedPoints)
        {
            DestroyImmediate(point.gameObject);
        }

        controller._RootPointTbl = rootList.ToArray();
        controller._SubDivOriginalPoints.Clear();
        controller._SubDivInsertedPoints.Clear();
    }