/// <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); } }
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; } } }
/// <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); }
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); }
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)); }
/// <summary> /// 更改鼠标MehcanicalObject信息 /// </summary> private unsafe void MouseMechanicalObjectInfoChange() { SofaPhysicsAPI.ChangeMechanicalObjectPosition(SofaPhysics.ToChar(mechanicalObjectName), 0, draggingMousePosition.x, draggingMousePosition.y, draggingMousePosition.z); }
private unsafe void remove1() { Debug.Log(index); SofaPhysicsAPI.RemoveTetrahedra(SofaPhysics.ToChar("TetraModifier"), index); }