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); }
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); }