Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions Core/Plugins/SofaUnityAPI/BaseAPI/SofaBaseMeshAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,20 @@ public virtual void UpdateTexCoords(Mesh mesh)
}


/// <summary> Method to set the number of vertices to this Mesh Object. </summary>
/// <param name="nbr"> Number of vertices </param>
public void SetNumberOfVertices(int nbr)
{
if (!m_isReady)
return;

int res = sofaMeshAPI_setNbVertices(m_simu, m_name, nbr);

if (res < 0)
Debug.LogError("SofaBaseMeshAPI SetNumberOfVertices: " + m_name + " " + SofaDefines.msg_error[res]);
}


/// Method to set new vertices position to this mesh
public void SetPositions(Vector3[] vertices, Transform sofaTransform)
{
Expand All @@ -867,7 +881,7 @@ public void SetPositions(Vector3[] vertices, Transform sofaTransform)

int resUpdate = sofaMeshAPI_setVertices(m_simu, m_name, val);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetPositions: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand All @@ -878,7 +892,7 @@ public void SetRawPositions(float[] vertices)

int resUpdate = sofaMeshAPI_setVertices(m_simu, m_name, vertices);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetRawPositions: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand All @@ -889,7 +903,7 @@ public void SetRawVelocities(float[] values)

int resUpdate = sofaMeshAPI_setVelocities(m_simu, m_name, values);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetRawVelocities: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand All @@ -912,7 +926,7 @@ public void SetRawRestPositions(float[] vertices)

int resUpdate = sofaMeshAPI_setRestPositions(m_simu, m_name, vertices);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetRawRestPositions: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand All @@ -935,7 +949,7 @@ public void SetVelocities(Vector3[] vels)

int resUpdate = sofaMeshAPI_setVelocities(m_simu, m_name, val);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetVelocities: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand All @@ -951,7 +965,7 @@ public void SetNewPosition(Vector3 value)
val[2] = value[2];
int resUpdate = sofaMeshAPI_setVertices(m_simu, m_name, val);
if (resUpdate < 0)
Debug.LogError("SofaBaseMeshAPI updateMesh: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);
Debug.LogError("SofaBaseMeshAPI SetNewPosition: " + m_name + " return error: " + SofaDefines.msg_error[resUpdate]);

}

Expand Down
70 changes: 63 additions & 7 deletions Core/Scripts/Core/Components/SofaMesh.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,20 @@ public int GetTopologyRevision()
return m_sofaMeshAPI.GetTopologyRevision();
}

public void setNbrVertices(int _nbVertices)
{
if (m_sofaMeshAPI != null)
{
m_sofaMeshAPI.SetNumberOfVertices(_nbVertices);

// First check if topology has changed and handle it
HandleTopologyChange();

// Then update the topology and vertices positions
UpdateTopology();
}
}

/// Method to set new vertices position to this mesh
public void SetPositions(Vector3[] vertices)
{
Expand Down Expand Up @@ -508,20 +522,62 @@ public bool DrawForces
}
}


private bool drawDebugPositions = false;
public bool DrawDebugPositions
{
get { return drawDebugPositions; }
set
{
if (drawDebugPositions == value)
return;

drawDebugPositions = value;
if (drawDebugPositions)
{
m_listenerCounter++;
}
else
m_listenerCounter--;
}
}

void OnDrawGizmosSelected()
{
if (!drawForces)
return;
if (drawDebugPositions)
{
Gizmos.color = Color.green;
if (m_topology != null && m_topology.m_mesh != null)
{
for (int i = 0; i < m_topology.m_mesh.vertexCount; i++)
{
Vector3 pos = m_topology.m_mesh.vertices[i];
Gizmos.DrawSphere(pos, 0.5f);
}
}
else if (m_unityVertices != null)
{
for (int i = 0; i < m_unityVertices.Length; i++)
{
Vector3 pos = m_unityVertices[i];
Gizmos.DrawSphere(pos, 0.5f);
}
}
}


if (m_topology == null|| m_topology.m_mesh == null)
return;

Gizmos.color = Color.red;
for (int i=0; i< m_topology.m_mesh.vertexCount; i++)
if (drawForces && forces != null)
{
Vector3 startPos = m_topology.m_mesh.vertices[i];
Vector3 endPos = startPos + forces[i].normalized;
Gizmos.DrawLine(startPos, endPos);
Gizmos.color = Color.red;
for (int i = 0; i < m_topology.m_mesh.vertexCount; i++)
{
Vector3 startPos = m_topology.m_mesh.vertices[i];
Vector3 endPos = startPos + forces[i].normalized;
Gizmos.DrawLine(startPos, endPos);
}
}

}
Expand Down
15 changes: 6 additions & 9 deletions Core/Scripts/Editor/Components/SofaMeshEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,12 @@ public override void OnInspectorGUI()

SofaMesh compo = (SofaMesh)this.target;

EditorGUILayout.IntField("Nb Points", compo.NbVertices());

if (!compo.HasTopology())
return;

EditorGUILayout.Separator();

EditorGUI.BeginDisabledGroup(true);
TopologyObjectType type = compo.TopologyType();
EditorGUILayout.EnumPopup("MeshTopology Type", type);

EditorGUILayout.IntField("Nb Points", compo.NbVertices());

if (type == TopologyObjectType.HEXAHEDRON)
{
EditorGUILayout.IntField("Nb Hexahedra", compo.NbHexahedra());
Expand All @@ -48,10 +43,12 @@ public override void OnInspectorGUI()
{
EditorGUILayout.IntField("Nb Edges", compo.NbEdges());
}
EditorGUI.EndDisabledGroup();

compo.DrawForces = EditorGUILayout.Toggle("DrawGizmoForces", compo.DrawForces);

EditorGUI.EndDisabledGroup();
EditorGUILayout.Separator();
compo.DrawForces = EditorGUILayout.Toggle("DrawGizmoForces", compo.DrawForces);
compo.DrawDebugPositions = EditorGUILayout.Toggle("DrawDebugPositions", compo.DrawDebugPositions);
}
}
}
21 changes: 13 additions & 8 deletions Core/Scripts/Editor/Objects/SofaSphereCollisionObjectEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,23 @@ public class SofaSphereCollisionObjectEditor : SofaMeshObjectEditor

public override void OnInspectorGUI()
{
SofaSphereCollisionObject model = (SofaSphereCollisionObject)this.target;

model.m_sofaMesh = (SofaMesh)EditorGUILayout.ObjectField("Hand SOFA mesh",
model.m_sofaMesh, typeof(SofaMesh), true);

SofaSphereCollisionObject model = (SofaSphereCollisionObject)this.target;
model.parentT = (GameObject)EditorGUILayout.ObjectField("Parent Gameobject to mirror position", model.parentT, typeof(GameObject), true);
model.UsePositionOnly = EditorGUILayout.Toggle("Use Object Position Only (1 dof)", model.UsePositionOnly);
model.m_sphereModel = (SofaCollisionModel)EditorGUILayout.ObjectField("Hand SOFA collision spheres",
model.m_sphereModel, typeof(SofaCollisionModel), true);


model.SofaSphereCollision.ParentT = (GameObject)EditorGUILayout.ObjectField("Parent Gameobject to mirror position", model.SofaSphereCollision.ParentT, typeof(GameObject), true);
model.Factor = EditorGUILayout.Slider("Interpolation factor", model.Factor, 1, 100);
model.Radius = EditorGUILayout.Slider("Sphere radius", model.Radius, 0.001f, 10);
model.Activated = EditorGUILayout.Toggle("Activate collision", model.Activated);
model.Stiffness = EditorGUILayout.Slider("Contact stiffness", model.Stiffness, 1, 5000);
model.m_startOnPlay = EditorGUILayout.Toggle("Start on Play", model.m_startOnPlay);
model.SofaSphereCollision.Radius = EditorGUILayout.Slider("Sphere radius", model.SofaSphereCollision.Radius, 0.001f, 10);
model.SofaSphereCollision.Activated = EditorGUILayout.Toggle("Activate collision", model.SofaSphereCollision.Activated);
model.SofaSphereCollision.Stiffness = EditorGUILayout.Slider("Contact stiffness", model.SofaSphereCollision.Stiffness, 1, 5000);
model.SofaSphereCollision.StartOnPlay = EditorGUILayout.Toggle("Start on Play", model.SofaSphereCollision.StartOnPlay);

EditorGUILayout.LabelField("Number of spheres", model.NbrSpheres.ToString());
EditorGUILayout.LabelField("Number of spheres", model.SofaSphereCollision.NbrSpheres.ToString());
}
}
}
Loading
Loading