Example #1
0
        public override void PushDataToSolver(ObiBatchedConstraints constraints)
        {
            if (constraints == null || constraints.Actor == null || !constraints.Actor.InSolver)
            {
                return;
            }

            ObiShapeMatchingConstraints sc = (ObiShapeMatchingConstraints)constraints;

            restComs     = new AlignedVector4Array(ConstraintCount);
            coms         = new AlignedVector4Array(ConstraintCount);
            orientations = new AlignedQuaternionArray(ConstraintCount, constraints.Actor.ActorLocalToSolverMatrix.rotation);

            for (int i = 0; i < shapeMaterialParameters.Count; i++)
            {
                shapeMaterialParameters[i] = new Oni.ElastoplasticMaterial(sc.stiffness, sc.plasticYield, sc.plasticCreep, sc.plasticRecovery, sc.maxDeform);
            }

            Oni.SetShapeMatchingConstraints(batch,
                                            solverIndices,
                                            firstIndex.ToArray(),
                                            numIndices.ToArray(),
                                            explicitGroup.ToArray(),
                                            shapeMaterialParameters.ToArray(),
                                            restComs.GetIntPtr(),
                                            coms.GetIntPtr(),
                                            orientations.GetIntPtr(),
                                            ConstraintCount);

            Oni.CalculateRestShapeMatching(constraints.Actor.Solver.OniSolver, batch);
        }
Example #2
0
 public void OnEnable()
 {
     constraints = (ObiShapeMatchingConstraints)target;
 }