protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < stiffnesses.count; i++) { particleIndices[i * 2] = constraints.GetActor().solverIndices[source.particleIndices[i * 2]]; particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]]; } // pass constraint data arrays to the solver: Oni.SetTetherConstraints(batch, particleIndices.GetIntPtr(), maxLengthsScales.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < restBends.count; i++) { particleIndices[i * 3] = constraints.GetActor().solverIndices[source.particleIndices[i * 3]]; particleIndices[i * 3 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 3 + 1]]; particleIndices[i * 3 + 2] = constraints.GetActor().solverIndices[source.particleIndices[i * 3 + 2]]; } // pass constraint data arrays to the solver: Oni.SetBendingConstraints(batch, particleIndices.GetIntPtr(), restBends.GetIntPtr(), bendingStiffnesses.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < restLengths.count; i++) { particleIndices[i * 2] = constraints.GetActor().solverIndices[source.particleIndices[i * 2]]; particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]]; orientationIndices[i] = constraints.GetActor().solverIndices[((ObiStretchShearConstraintsBatch)source).orientationIndices[i]]; } // pass constraint data arrays to the solver: Oni.SetStretchShearConstraints(batch, particleIndices.GetIntPtr(), orientationIndices.GetIntPtr(), restLengths.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < restLengths.count; i++) { particleIndices[i * 2] = constraints.GetActor().solverIndices[source.particleIndices[i * 2]]; particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]]; stiffnesses[i] = new Vector2(0, restLengths[i]); } // pass constraint data arrays to the solver: Oni.SetDistanceConstraints(batch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
public void AddToSolver(IObiConstraints constraints) { // create a constraint batch: batch = Oni.CreateBatch((int)constraintType); Oni.AddBatch(constraints.GetActor().solver.OniSolver, batch); OnAddToSolver(constraints); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < particleIndices.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; } for (int i = 0; i < orientations.count; i++) { orientations[i] = constraints.GetActor().actorLocalToSolverMatrix.rotation; } // pass constraint data arrays to the solver: Oni.SetShapeMatchingConstraints(batch, particleIndices.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), explicitGroup.GetIntPtr(), materialParameters.GetIntPtr(), restComs.GetIntPtr(), coms.GetIntPtr(), orientations.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); Oni.CalculateRestShapeMatching(constraints.GetActor().solver.OniSolver, batch); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < particleIndices.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; } // pass constraint data arrays to the solver: Oni.SetChainConstraints(batch, particleIndices.GetIntPtr(), lengths.GetIntPtr(), firstParticle.GetIntPtr(), numParticles.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
public void RemoveFromSolver(IObiConstraints constraints) { OnRemoveFromSolver(constraints); // remove the constraint batch from the solver // (no need to destroy it as its destruction is managed by the solver) Oni.RemoveBatch(constraints.GetActor().solver.OniSolver, batch); // important: set the batch pointer to null, as it could be destroyed by the solver. batch = IntPtr.Zero; }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < skinCompliance.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; } // pass constraint data arrays to the solver: Oni.SetSkinConstraints(batch, particleIndices.GetIntPtr(), skinPoints.GetIntPtr(), skinNormals.GetIntPtr(), skinRadiiBackstop.GetIntPtr(), skinCompliance.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < particleIndices.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; } // pass constraint data arrays to the solver: Oni.SetAerodynamicConstraints(batch, particleIndices.GetIntPtr(), aerodynamicCoeffs.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { for (int i = 0; i < particleIndices.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; } // pass constraint data arrays to the solver: Oni.SetVolumeConstraints(batch, particleIndices.GetIntPtr(), firstTriangle.GetIntPtr(), restVolumes.GetIntPtr(), pressureStiffness.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }
protected override void OnAddToSolver(IObiConstraints constraints) { if (source != null) { for (int i = 0; i < particleIndices.count; i++) { particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]]; stiffnesses[i * 2] = 0; stiffnesses[i * 2 + 1] = 0; } } // pass constraint data arrays to the solver: Oni.SetPinConstraints(batch, particleIndices.GetIntPtr(), offsets.GetIntPtr(), restDarbouxVectors.GetIntPtr(), pinBodies.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount); Oni.SetActiveConstraints(batch, m_ActiveConstraintCount); }