示例#1
0
        private ConvexDecompositionEngine CreateNode(AABB region, List <Vertex3Index> objList)
        {
            if (objList.Count == 0)
            {
                return(null);
            }

            ConvexDecompositionEngine ret = new ConvexDecompositionEngine(region, objList, DecompositionValue, true);

            {
                parent = this;
            };

            return(ret);
        }
示例#2
0
        private void BuildHierachicalTree(
            ref ConcaveHierarchicalTree tree,
            ConvexDecompositionEngine decompositionTree)
        {
            tree.ChildNodes    = new List <HierarchicalTree <Vertex3Index, AABB> >();
            tree.Elements      = new List <Vertex3Index>(decompositionTree.VertexPosition);
            tree.TotalElements = new List <Vertex3Index>(BaseVertexPosition);

            for (int i = 0; i < 8; i++)
            {
                if (decompositionTree.childNode[i] != null)
                {
                    tree.ChildNodes.Add(new ConcaveHierarchicalTree {
                        Parent = tree
                    });
                    var bufTree = (ConcaveHierarchicalTree)tree.ChildNodes[tree.ChildNodes.Count - 1];
                    BuildHierachicalTree(ref bufTree, decompositionTree.childNode[i]);
                }
            }
        }
        public static List <double[][]> GetConvexShapeList(SoftShape softShape)
        {
            var baseSoftShape = (SimSoftShape)((IMapper)softShape).GetShape();

            var vertex = Array.ConvertAll(baseSoftShape.ShapePoints, item => new Vertex3Index(
                                              item.Position,
                                              item.TriangleIndex, 0));

            var shapeConvexDecomposition = new SoftBodyDecomposition.ConvexDecompositionEngine(
                baseSoftShape.AABBox,
                vertex,
                baseSoftShape.DecompositionParameter);

            var convexShapeHash = shapeConvexDecomposition.Execute().GetConvexShapeList(true)
                                  .Select(x => x.Vertex3Idx.ToArray()).ToList();

            var convexShape = convexShapeHash.Select(x => x.Select(y => y.Vector3.Array).ToArray()).ToList();

            return(convexShape);
        }