Example #1
0
 /// <summary>
 /// 动态添加鼠标的MehcanicalObject组件至root节点,生成其信息。添加StiffSpringForceField组件,连接目标物体和鼠标MechanicalObject
 /// </summary>
 private unsafe void MouseDragAdd()
 {
     if (!SofaPhysics.unityMechanicalObjectInfoDic.ContainsKey(mechanicalObjectName) && !SofaPhysics.sofaMechanicalObjectInfoDic.ContainsKey(mechanicalObjectName))
     {
         //加入mechanicalObject组件及相关info
         double[] dou = new double[3] {
             draggingMousePosition.x, draggingMousePosition.y, draggingMousePosition.z
         };
         SofaPhysicsAPI.AddMechanicalObjectArray(SofaPhysics.ToChar("root"), SofaPhysics.ToChar(mechanicalObjectName), dou, 1);
         for (int i = 0; i < SofaPhysics.nodes.Length; i++)
         {
             if (SofaPhysics.nodes[i].gameObject.name == "root")
             {
                 UnityMechanicalObjectInfo unityMechanicalObjectInfo = new UnityMechanicalObjectInfo(SofaPhysics.nodes[i], mechanicalObjectName);
                 SofaPhysics.unityMechanicalObjectInfoDic.Add(unityMechanicalObjectInfo.componentName, unityMechanicalObjectInfo);
             }
         }
         foreach (string componentName in SofaPhysics.unityMechanicalObjectInfoDic.Keys)
         {
             if (mechanicalObjectName == componentName)
             {
                 SofaMechanicalObjectInfo sofaMechanicalObjectInfo = new SofaMechanicalObjectInfo(componentName);
                 SofaPhysics.sofaMechanicalObjectInfoDic.Add(sofaMechanicalObjectInfo.componentName, sofaMechanicalObjectInfo);
             }
         }
         //加入stiffSpringForceField组件及其Spring
         SofaPhysicsAPI.AddStiffSpringForceField(SofaPhysics.ToChar("root"), SofaPhysics.ToChar(stiffSpringForceFieldName), SofaPhysics.ToChar("@./"), SofaPhysics.ToChar(GetSrcPathToRoot()), dragSpringKs, 0.1, 1);
         SofaPhysicsAPI.SpringAddToStiffSpringForceField(SofaPhysics.ToChar(stiffSpringForceFieldName), 0, draggingMechanicalObjectPointIndex, dragSpringKs, dragSpringKd, 0);
     }
 }
Example #2
0
    private unsafe void remove()
    {
        Debug.Log(index);
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out raycastHit))
        {
            switch (raycastHit.transform.gameObject.name)
            {
            case "TriangleTopologyVisual":
                break;

            case "QuadTopologyVisual":
                break;

            case "TetrahedraTopologyVisual":
                Debug.Log("triangle index:" + raycastHit.triangleIndex);
                int tetrahedraIndex = Mathf.FloorToInt(raycastHit.triangleIndex / 4);
                Debug.Log("remove:" + tetrahedraIndex);
                SofaPhysicsAPI.RemoveTetrahedra(SofaPhysics.ToChar("TetraModifier"), tetrahedraIndex);
                break;

            default:
                break;
            }
        }
    }
Example #3
0
 /// <summary>
 /// 清除鼠标MechanicalObject、StiffSpringForceField组件及其字典中储存的信息,将临时变量归零
 /// </summary>
 private unsafe void MouseDragRemove()
 {
     //移除StiffSpringForceFiled组件
     SofaPhysicsAPI.RemoveStiffSpringForceField(SofaPhysics.ToChar("root"), SofaPhysics.ToChar(stiffSpringForceFieldName));
     //移除MechanicalObject组件及字典中储存的信息
     SofaPhysicsAPI.RemoveMechanicalObject(SofaPhysics.ToChar("root"), SofaPhysics.ToChar(mechanicalObjectName));
     SofaPhysics.unityMechanicalObjectInfoDic.Remove(mechanicalObjectName);
     SofaPhysics.sofaMechanicalObjectInfoDic.Remove(mechanicalObjectName);
 }
Example #4
0
 public void Update()
 {
     componentName    = SofaPhysics.ToStr(SofaPhysicsAPI.GetMeshName(meshIndex));
     verticesAmount   = SofaPhysicsAPI.GetMeshVerticesAmount(meshIndex);
     verticesPosition = SofaPhysicsAPI.GetMeshVerticesPositions(meshIndex);
     triangleAmount   = SofaPhysicsAPI.GetMeshTriangleAmount(meshIndex);
     triangleTopology = SofaPhysicsAPI.GetMeshTriangleTopology(meshIndex);
     quadAmount       = SofaPhysicsAPI.GetMeshQuadAmount(meshIndex);
     quadTopology     = SofaPhysicsAPI.GetMeshQuadTopology(meshIndex);
 }
Example #5
0
 public void Update()
 {
     verticesAmount     = SofaPhysicsAPI.GetMechanicalObjectVerticesAmount(SofaPhysics.ToChar(componentName));
     verticesPosition   = SofaPhysicsAPI.GetMechanicalObjectVerticesPositions(SofaPhysics.ToChar(componentName));
     triangleAmount     = SofaPhysicsAPI.GetMechanicalObjectTriangleAmount(SofaPhysics.ToChar(componentName));
     triangleTopology   = SofaPhysicsAPI.GetMechanicalObjectTriangleTopology(SofaPhysics.ToChar(componentName));
     quadAmount         = SofaPhysicsAPI.GetMechanicalObjectQuadAmount(SofaPhysics.ToChar(componentName));
     quadTopology       = SofaPhysicsAPI.GetMechanicalObjectQuadTopology(SofaPhysics.ToChar(componentName));
     tetrahedraAmount   = SofaPhysicsAPI.GetMechanicalObjectTetrahedraAmount(SofaPhysics.ToChar(componentName));
     tetrahedraTopology = SofaPhysicsAPI.GetMechanicalObjectTetrahedraTopology(SofaPhysics.ToChar(componentName));
 }
Example #6
0
 /// <summary>
 /// 更改鼠标MehcanicalObject信息
 /// </summary>
 private unsafe void MouseMechanicalObjectInfoChange()
 {
     SofaPhysicsAPI.ChangeMechanicalObjectPosition(SofaPhysics.ToChar(mechanicalObjectName), 0, draggingMousePosition.x, draggingMousePosition.y, draggingMousePosition.z);
 }
Example #7
0
 private unsafe void remove1()
 {
     Debug.Log(index);
     SofaPhysicsAPI.RemoveTetrahedra(SofaPhysics.ToChar("TetraModifier"), index);
 }