1
This commit is contained in:
@@ -17,15 +17,15 @@ public class BakingMobilePlate : UnitMouseInput {
|
||||
if (!ViewCamera.ScreenToWorldObject(data.ScreenPosition, out platePrefab)) { return; }
|
||||
mousePosition = data.ScreenPosition;
|
||||
originalPosition = platePrefab.transform.localPosition;
|
||||
platePrefab.Value.bakingPosition = originalPosition;
|
||||
platePrefab.Value.dataBaking.position = originalPosition;
|
||||
ModuleCore.BakingMobilePlate(platePrefab.Value);
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
if (platePrefab == null) { return; }
|
||||
if (ViewCamera.ScreenToWorldObjectParent(data.ScreenPosition, out arrange, Arrange)) {
|
||||
platePrefab.Value.arrange = arrange;
|
||||
platePrefab.Value.bakingPosition = arrange.transform.localPosition;
|
||||
platePrefab.Value.bakingEulerAngles = arrange.transform.localEulerAngles;
|
||||
platePrefab.Value.dataBaking.position = arrange.transform.localPosition;
|
||||
platePrefab.Value.dataBaking.eulerAngles = arrange.transform.localEulerAngles;
|
||||
}
|
||||
else { Mobile(data.WorldPosition); }
|
||||
platePrefab.Value.UpdateVisual(false);
|
||||
@@ -41,6 +41,6 @@ public class BakingMobilePlate : UnitMouseInput {
|
||||
Vector3 offset = current - original;
|
||||
Vector3 up = ViewCamera.Up * offset.y;
|
||||
Vector3 right = ViewCamera.Right * offset.x;
|
||||
platePrefab.Value.bakingPosition = originalPosition - up - right;
|
||||
platePrefab.Value.dataBaking.position = originalPosition - up - right;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,10 +6,10 @@ public class DesignBezier : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询点算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
public ModuleFind<DataPlateSide> FindSide => ModuleCore.FindSide;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
|
||||
if (!FindSide.Find(data.WorldPosition, out DataPlateSide side)) { return; }
|
||||
if (side.bezier == Bezier.一阶) { side.TwoRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
if (side.bezier == Bezier.二阶) { side.ThreeRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
if (side.bezier == Bezier.三阶) { side.OneRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public class DesignMobile : UnitMouseInput {
|
||||
private DataBezier bezier;
|
||||
private Vector3 mousePosition;
|
||||
private Vector3 originalPosition;
|
||||
private ModulePrefab<DataPoint> prefabPoint;
|
||||
private ModulePrefab<DataPlatePoint> prefabPoint;
|
||||
private ModulePrefab<DataPlate> prefabPlate;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
@@ -61,10 +61,10 @@ public class DesignMobile : UnitMouseInput {
|
||||
//板片
|
||||
private void RecordPlate(Vector3 screenPosition) {
|
||||
mousePosition = screenPosition;
|
||||
originalPosition = prefabPlate.Value.designPosition;
|
||||
originalPosition = prefabPlate.Value.dataDesign.position;
|
||||
}
|
||||
private void MobilePlate(Vector3 offset) {
|
||||
prefabPlate.Value.designPosition = originalPosition + offset;
|
||||
prefabPlate.Value.dataDesign.position = originalPosition + offset;
|
||||
prefabPlate.Value.UpdateVisual(false);
|
||||
}
|
||||
//相机
|
||||
|
||||
@@ -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;
|
||||
//}
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@ public class DesignSutureReversal : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询点算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
public ModuleFind<DataPlateSide> FindSide => ModuleCore.FindSide;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
|
||||
if (side.suture.a.side == side) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataPlateSide side)) { return; }
|
||||
if (side.suture.a.plateSide == side) {
|
||||
side.suture.a.isReversal = !side.suture.a.isReversal;
|
||||
}
|
||||
if (side.suture.b.side == side) {
|
||||
if (side.suture.b.plateSide == side) {
|
||||
side.suture.b.isReversal = !side.suture.b.isReversal;
|
||||
}
|
||||
side.plate.UpdateVisual();
|
||||
|
||||
Reference in New Issue
Block a user