This commit is contained in:
MuHua-123
2024-11-29 18:10:02 +08:00
parent 84243e75a8
commit 698464b9d7
81 changed files with 3073 additions and 671 deletions
@@ -3,29 +3,30 @@ using System.Collections.Generic;
using UnityEngine;
public class DesignSuture : UnitMouseInput {
/// <summary> 设计视图相机模块 </summary>
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
/// <summary> 查询点算法模块 </summary>
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
/// <summary> 计算位置到边上最近的点 </summary>
public ModuleAlgorithm<DataIntersect> AlgorithmSidePoint => ModuleCore.AlgorithmSidePoint;
/// <summary> 查询边交点 </summary>
public UnitFind<SideIntersectPoint> find = new FindSideIntersectPoint();
/// <summary> 连接可视化内容生成模块 </summary>
public ModuleVisual<DataConnector> VisualConnector => ModuleCore.VisualConnector;
private DataSide aSide;
private DataSide bSide;
private DataPlateSide aSide;
private DataPlateSide bSide;
private DataConnector connector;
public override void MouseDown(DataMouseInput data) {
if (!FindSide.Find(data.WorldPosition, out aSide)) { return; }
if (!Intersect(aSide, data.WorldPosition, out Vector3 intersectPoint)) { return; }
connector = new DataConnector();
connector.aPoint = intersectPoint;
connector.bPoint = intersectPoint;
connector.aPoint = data.WorldPosition;
if (!find.Find(data.WorldPosition, out SideIntersectPoint sip)) { return; }
connector.aPoint = sip.intersectPoint;
aSide = sip.side;
}
public override void MouseDrag(DataMouseInput data) {
if (aSide == null) { return; }
connector.bPoint = GetPosition(data);
if (connector == null) { return; }
connector.bPoint = data.WorldPosition;
if (find.Find(data.WorldPosition, out SideIntersectPoint sip)) {
connector.bPoint = sip.intersectPoint;
bSide = sip.side;
}
else { connector.bPoint = data.WorldPosition; }
VisualConnector.UpdateVisual(connector);
}
public override void MouseRelease(DataMouseInput data) {
@@ -41,16 +42,16 @@ public class DesignSuture : UnitMouseInput {
aSide.plate.UpdateVisual();
}
private Vector3 GetPosition(DataMouseInput data) {
if (!FindSide.Find(data.WorldPosition, out bSide)) { return data.WorldPosition; }
if (aSide == bSide) { return data.WorldPosition; }
if (Intersect(bSide, data.WorldPosition, out Vector3 intersectPoint)) { return intersectPoint; }
else { return data.WorldPosition; }
}
private bool Intersect(DataSide side, Vector3 position, out Vector3 intersectPoint) {
DataIntersect intersect = new DataIntersect(side, position);
AlgorithmSidePoint.Compute(intersect);
intersectPoint = intersect.intersectPoint;
return intersect.isIntersect;
}
//private Vector3 GetPosition(DataMouseInput data) {
// if (!FindSide.Find(data.WorldPosition, out bSide)) { return data.WorldPosition; }
// if (aSide == bSide) { return data.WorldPosition; }
// if (Intersect(bSide, data.WorldPosition, out Vector3 intersectPoint)) { return intersectPoint; }
// else { return data.WorldPosition; }
//}
//private bool Intersect(DataSide side, Vector3 position, out Vector3 intersectPoint) {
//DataIntersect intersect = new DataIntersect(side, position);
//AlgorithmSidePoint.Compute(intersect);
//intersectPoint = intersect.intersectPoint;
//return intersect.isIntersect;
//}
}