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,28 +3,33 @@ using System.Collections.Generic;
using UnityEngine;
public class DesignInsert : UnitMouseInput {
/// <summary> 板片资产 </summary>
public ModuleAssets<DataPlate> AssetsPlate => ModuleCore.AssetsPlate;
/// <summary> 查询边算法模块 </summary>
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
/// <summary> 计算位置到边上最近的点 </summary>
public ModuleAlgorithm<DataIntersect> AlgorithmSidePoint => ModuleCore.AlgorithmSidePoint;
/// <summary> 插入点数据转换板片上的点 </summary>
public ModuleBuilder<DataInsertPoint, DataPoint> InsertPointToPoint => ModuleCore.InsertPointToPoint;
/// <summary> 查询边交点 </summary>
public UnitFind<SideIntersectPoint> find = new FindSideIntersectPoint();
public override void MouseDown(DataMouseInput data) {
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
if (!find.Find(data.WorldPosition, out SideIntersectPoint sip)) { return; }
Insert(sip.side, sip.side.plate, sip.side.aPoint, sip.side.bPoint, sip.intersectPoint);
}
DataIntersect intersect = new DataIntersect(side, data.WorldPosition);
AlgorithmSidePoint.Compute(intersect);
if (!intersect.isIntersect) { return; }
DataInsertPoint insertPoint = new DataInsertPoint();
insertPoint.position = intersect.intersectPoint - side.plate.designPosition;
insertPoint.plate = side.plate;
insertPoint.aPoint = side.aPoint;
insertPoint.bPoint = side.bPoint;
insertPoint.side = side;
InsertPointToPoint.To(insertPoint);
private void Insert(DataPlateSide side, DataPlate plate, DataPlatePoint aPoint, DataPlatePoint bPoint, Vector3 position) {
//创建新的点
DataPlatePoint newPoint = new DataPlatePoint(plate);
newPoint.position = position - plate.dataDesign.position;
//改变关联的边B点,重置贝塞尔曲线
side.bPoint = newPoint;
side.OneRankBezier();
//创建新的边
DataPlateSide newSide = new DataPlateSide(plate);
newSide.aPoint = newPoint;
newSide.bPoint = bPoint;
newSide.OneRankBezier();
//插入边
int sideIndex = plate.plateSides.IndexOf(side);
plate.plateSides.Insert(sideIndex + 1, newSide);
//插入点
int pointIndex = plate.platePoints.IndexOf(aPoint);
plate.platePoints.Insert(pointIndex + 1, newPoint);
//更新数据
plate.UpdateVisual();
}
}