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
+1 -1
View File
@@ -6,7 +6,7 @@ public class DataBezier {
/// <summary> 是否是a </summary>
public bool isA;
/// <summary> 关联的边 </summary>
public DataSide side;
public DataPlateSide side;
/// <summary> 位置 </summary>
public Vector3 position => isA ? side.aBezier : side.bBezier;
+16 -3
View File
@@ -2,21 +2,34 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary> 2D边界数据 </summary>
/// <summary> 边界数据 </summary>
public class DataBorder {
/// <summary> 网格细分 </summary>
public readonly float smooth = 0.01f;
/// <summary> minX </summary>
public readonly float minX = 0;
/// <summary> maxX </summary>
public readonly float maxX = 0;
/// <summary> minY </summary>
public readonly float minY = 0;
/// <summary> maxY </summary>
public readonly float maxY = 0;
/// <summary> 2D边界数据 </summary>
public DataBorder(float minX, float maxX, float minY, float maxY) {
/// <summary> 多边形边缘点 </summary>
public readonly Vector3[] points;
/// <summary> 边界数据 </summary>
public DataBorder(float minX, float maxX, float minY, float maxY, Vector3[] points) {
this.minX = minX; this.maxX = maxX;
this.minY = minY; this.maxY = maxY;
this.points = points;
}
/// <summary> 边界宽 </summary>
public float Wide => maxX - minX;
/// <summary> 边界高 </summary>
public float High => maxY - minY;
/// <summary> 网格宽 </summary>
public int GridWide => Mathf.FloorToInt(Wide / smooth) + 1;
/// <summary> 网格高 </summary>
public int GridHigh => Mathf.FloorToInt(High / smooth) + 1;
/// <summary> 最小点 </summary>
public Vector3 MinPoint => new Vector3(minX, minY, 0);
/// <summary> 最大点 </summary>
+44 -27
View File
@@ -7,18 +7,22 @@ public class DataPlate {
/// <summary> 核心模块 </summary>
private ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 设计可视化模块 </summary>
private ModuleVisual<DataPlate> VisualDesign => ModuleCore.VisualDesign;
private ModuleVisual<DataPlate> VisualDesign => ModuleCore.VisualPlateDesign;
/// <summary> 烘焙可视化模块 </summary>
private ModuleVisual<DataPlate> VisualBaking => ModuleCore.VisualBaking;
private ModuleVisual<DataPlate> VisualBaking => ModuleCore.VisualPlateBaking;
/// <summary> 简单多边形算法模块 </summary>
private ModuleAlgorithm<DataPlate> AlgorithmSimplePolygon => ModuleCore.AlgorithmSimplePolygon;
/// <summary> 细分多边形算法模块 </summary>
private ModuleAlgorithm<DataPlate> AlgorithmSubdivisionPolygon => ModuleCore.AlgorithmSubdivisionPolygon;
public DataPlate() {
dataDesign = new DataPlateDesign(this);
}
public void UpdateVisual(bool recalculate = true) {
if (recalculate) {
//简单多边形计算
//AlgorithmSimplePolygon.Compute(this);
AlgorithmSimplePolygon.Compute(this);
//细分多边形计算
AlgorithmSubdivisionPolygon.Compute(this);
}
@@ -29,42 +33,55 @@ public class DataPlate {
}
#region
/// <summary> 边缘平滑度 </summary>
public float smooth = 0.01f;
/// <summary> 板片设计视图的位置(本地坐标系) </summary>
public Vector3 designPosition;
/// <summary> 板片烘焙视图的位置(本地坐标系) </summary>
public Vector3 bakingPosition;
/// <summary> 板片烘焙视图的旋转(本地坐标系) </summary>
public Vector3 bakingEulerAngles;
/// <summary> 点 </summary>
public List<DataPoint> points = new List<DataPoint>();
public List<DataPlatePoint> platePoints = new List<DataPlatePoint>();
/// <summary> 边 </summary>
public List<DataSide> sides = new List<DataSide>();
public List<DataPlateSide> plateSides = new List<DataPlateSide>();
#endregion
#region
/// <summary> 边界数据 </summary>
public DataBorder border;
/// <summary> 边缘点 </summary>
public List<Vector3> edgePoints;
/// <summary> 设计网格 </summary>
public Mesh designMesh;
/// <summary> 三角形数据 </summary>
public List<DataTriangle> triangles;
/// <summary> 顶点网格 </summary>
public GridTool<DataVertex> vertexGrid;
/// <summary> 设计缓存数据 </summary>
public DataPlateDesign dataDesign;
/// <summary> 烘焙缓存数据 </summary>
public DataPlateBaking dataBaking = new DataPlateBaking();
#endregion
#region
/// <summary> 可视化对象 </summary>
public ModulePrefab<DataPlate> design;
public ModulePrefab<DataPlate> designPrefab;
/// <summary> 可视化对象 </summary>
public ModulePrefab<DataPlate> baking;
public ModulePrefab<DataPlate> bakingPrefab;
/// <summary> 安排点 </summary>
public FixedArrange arrange;
#endregion
}
/// <summary> 设计缓存数据 </summary>
public class DataPlateDesign {
/// <summary> 板片 </summary>
public readonly DataPlate plate;
/// <summary> 设计缓存数据 </summary>
public DataPlateDesign(DataPlate plate) => this.plate = plate;
/// <summary> 板片的位置 </summary>
public Vector3 position;
/// <summary> 网格 </summary>
public Mesh mesh;
/// <summary> 边缘点 </summary>
public Vector3[] points;
/// <summary> 三角形数据 </summary>
public List<DataTriangle> triangles;
}
/// <summary> 烘焙缓存数据 </summary>
public class DataPlateBaking {
/// <summary> 网格 </summary>
public Mesh mesh;
/// <summary> 板片的位置 </summary>
public Vector3 position;
/// <summary> 板片的旋转 </summary>
public Vector3 eulerAngles;
/// <summary> 边界数据 </summary>
public DataBorder border;
/// <summary> 全部顶点 </summary>
public DataPlateVertex[] vertexs;
}
@@ -0,0 +1,17 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary> 线段 </summary>
public class DataPlateLine {
/// <summary> 线段起点a </summary>
public Vector3 a;
/// <summary> 线段终点b </summary>
public Vector3 b;
/// <summary> 原始距离 </summary>
public float origin;
/// <summary> 线段距离 </summary>
public float Distance => Vector3.Distance(a, b);
/// <summary> 线段方向 </summary>
public Vector3 Direction => b - a;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c7e8d3e741e703d49b33431b75a3a001
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,21 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataPlatePoint {
/// <summary> 绑定的板片 </summary>
public readonly DataPlate plate;
/// <summary> 初始化 </summary>
public DataPlatePoint(DataPlate plate) => this.plate = plate;
#region
/// <summary> 设计点位置(本地坐标系) </summary>
public Vector3 position;
#endregion
#region
/// <summary> 可视化对象 </summary>
public ModulePrefab<DataPlatePoint> visual;
#endregion
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6c2af0d32eea37f408900226b81e8e8a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,62 @@
using System.Collections;
using System.Collections.Generic;
using Unity.Collections;
using UnityEngine;
public enum Bezier {
= 0, = 1, = 2
}
/// <summary> 边 </summary>
public class DataPlateSide {
/// <summary> 绑定的板片 </summary>
public readonly DataPlate plate;
/// <summary> 初始化 </summary>
public DataPlateSide(DataPlate plate) => this.plate = plate;
#region
/// <summary> 贝塞尔曲线阶数 </summary>
public Bezier bezier;
/// <summary> 起点 </summary>
public DataPlatePoint aPoint;
/// <summary> 终点 </summary>
public DataPlatePoint bPoint;
/// <summary> 贝塞尔曲线前(-) </summary>
public Vector3 aBezier;
/// <summary> 贝塞尔曲线后(+) </summary>
public Vector3 bBezier;
#endregion
#region
/// <summary> 缝合数据 </summary>
public DataSuture suture;
/// <summary> 设计缓存数据 </summary>
public DataPlateSideDesign dataDesign = new DataPlateSideDesign();
/// <summary> 烘焙缓存数据 </summary>
public DataPlateSideBaking dataBaking = new DataPlateSideBaking();
#endregion
#region
/// <summary> 可视化边缘线 </summary>
public ModulePrefab<DataPlateSide> designPrefab;
#endregion
}
/// <summary> 设计缓存数据 </summary>
public class DataPlateSideDesign {
/// <summary> 总长度 </summary>
public float length;
/// <summary> 点 </summary>
public Vector3[] positions = new Vector3[0];
/// <summary> 线 </summary>
public DataPlateLine[] lines = new DataPlateLine[0];
}
/// <summary> 烘焙缓存数据 </summary>
public class DataPlateSideBaking {
/// <summary> 总长度 </summary>
public float length;
/// <summary> 点 </summary>
public Vector3[] positions = new Vector3[0];
/// <summary> 线 </summary>
public DataPlateLine[] lines = new DataPlateLine[0];
/// <summary> 关联的网格顶点 </summary>
public DataPlateVertex[] vertexs = new DataPlateVertex[0];
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d0a57f0098d07ca4da0ca6e08c25662c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,28 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataPlateVertex {
/// <summary> 是否是有效顶点 </summary>
public bool isValid;
/// <summary> 设计视图中位置 </summary>
public Vector3 position;
/// <summary> 上 </summary>
public DataPlateVertex above;
/// <summary> 下 </summary>
public DataPlateVertex below;
/// <summary> 左 </summary>
public DataPlateVertex left;
/// <summary> 右 </summary>
public DataPlateVertex right;
/// <summary> 左上 </summary>
public DataPlateVertex leftAbove;
/// <summary> 左下 </summary>
public DataPlateVertex leftBelow;
/// <summary> 右上 </summary>
public DataPlateVertex rightAbove;
/// <summary> 右下 </summary>
public DataPlateVertex rightBelow;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9842037a7f0169b4bb8a4b70047f7739
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+3 -3
View File
@@ -2,9 +2,9 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum Bezier {
= 0, = 1, = 2
}
//public enum Bezier {
// 一阶 = 0, 二阶 = 1, 三阶 = 2
//}
public class DataSide {
/// <summary> 绑定的板片 </summary>
public readonly DataPlate plate;
+17 -8
View File
@@ -5,24 +5,33 @@ using UnityEngine;
public class DataSuture {
/// <summary> 核心模块 </summary>
private ModuleCore ModuleCore => ModuleCore.I;
/// <summary> 简单多边形算法模块 </summary>
private ModuleAlgorithm<DataSutureSide> AlgorithmSutureSide => ModuleCore.AlgorithmSutureSide;
/// <summary> 设计可视化模块 </summary>
private ModuleVisual<DataSuture> VisualDesign => ModuleCore.VisualSutureDesign;
/// <summary> 烘焙可视化模块 </summary>
private ModuleVisual<DataSuture> VisualBaking => ModuleCore.VisualSutureBaking;
/// <summary> 缝合线算法模块 </summary>
private ModuleAlgorithm<DataSuture> AlgorithmSuture => ModuleCore.AlgorithmSuture;
public readonly DataSutureSide a;
public readonly DataSutureSide b;
public DataSuture(DataSide aSide, DataSide bSide) {
public DataSuture(DataPlateSide aSide, DataPlateSide bSide) {
a = new DataSutureSide(aSide, this);
b = new DataSutureSide(bSide, this);
Update();
UpdateVisual();
}
public void Update() {
AlgorithmSutureSide.Compute(a);
AlgorithmSutureSide.Compute(b);
public void UpdateVisual() {
AlgorithmSuture.Compute(this);
VisualDesign.UpdateVisual(this);
VisualBaking.UpdateVisual(this);
}
#region
/// <summary> 缝合长度 </summary>
public float length => this.SutureLength();
public float length;
/// <summary> 缝合点 </summary>
public List<DataSuturePoint> points;
#endregion
#region
/// <summary> 可视化内容 </summary>
@@ -0,0 +1,14 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataSuturePoint {
/// <summary> aAnchor到vertex的距离 </summary>
public float distance;
/// <summary> 绑定的顶点 </summary>
public DataPlateVertex vertex;
/// <summary> 锚点a </summary>
public DataPlateVertex aAnchor;
/// <summary> 锚点b </summary>
public DataPlateVertex bAnchor;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fab08a6f4689d1c4b94d2fd7f05fedbe
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+47 -29
View File
@@ -7,12 +7,12 @@ using UnityEngine;
/// </summary>
public class DataSutureSide {
/// <summary> 关联的边 </summary>
public readonly DataSide side;
public readonly DataPlateSide plateSide;
/// <summary> 关联的缝合数据 </summary>
public readonly DataSuture suture;
/// <summary> 缝合边 </summary>
public DataSutureSide(DataSide side, DataSuture suture) {
this.side = side;
public DataSutureSide(DataPlateSide side, DataSuture suture) {
this.plateSide = side;
this.suture = suture;
}
@@ -22,32 +22,10 @@ public class DataSutureSide {
#endregion
#region
/// <summary> 边最大长度 </summary>
public float MaxLength => side.length;
/// <summary> 边缘顶点数据 </summary>
public DataVertex[] Vertices => side.vertices;
/// <summary> 设计视图板片位置 </summary>
public Vector3 PlateDesignPosition => side.plate.designPosition;
/// <summary> 烘焙视图板片位置 </summary>
public Vector3 PlateBakingPosition => side.plate.bakingPosition;
/// <summary> 烘焙视图板片位置 </summary>
public Vector3 PlateBakingEulerAngles => side.plate.bakingEulerAngles;
/// <summary> 设计视图顶点位置 </summary>
public Vector3[] designPositions;
/// <summary> 设计视图A点位置 </summary>
public Vector3 DesignPosintA => designPositions[0];
/// <summary> 设计视图B点位置 </summary>
public Vector3 DesignPosintB => designPositions[designPositions.Length - 1];
/// <summary> 烘焙视图顶点位置 </summary>
public Vector3[] bakingPositions;
/// <summary> 烘焙视图A点位置 </summary>
public Vector3 BakingPosintA => bakingPositions[0];
/// <summary> 烘焙视图B点位置 </summary>
public Vector3 BakingPosintB => bakingPositions[bakingPositions.Length - 1];
/// <summary> 设计缓存数据 </summary>
public DataSutureSideDesign dataDesign = new DataSutureSideDesign();
/// <summary> 烘焙缓存数据 </summary>
public DataSutureSideBaking dataBaking = new DataSutureSideBaking();
#endregion
#region
@@ -57,3 +35,43 @@ public class DataSutureSide {
public ModulePrefab<DataSutureSide> baking;
#endregion
}
/// <summary> 设计缓存数据 </summary>
public class DataSutureSideDesign {
/// <summary> 位置列表 </summary>
public Vector3[] positions;
/// <summary> A点位置 </summary>
public Vector3 PointA => positions[0];
/// <summary> B点位置 </summary>
public Vector3 PointB => positions[positions.Length - 1];
}
/// <summary> 烘焙缓存数据 </summary>
public class DataSutureSideBaking {
/// <summary> 位置列表 </summary>
public Vector3[] positions;
/// <summary> 全部顶点列表 </summary>
public DataSutureSideVertex[] allVertexs;
/// <summary> 关联的顶点列表 </summary>
public DataSutureSideVertex[] vertexs;
/// <summary> A点位置 </summary>
public Vector3 PointA => positions[0];
/// <summary> B点位置 </summary>
public Vector3 PointB => positions[positions.Length - 1];
}
public class DataSutureSideVertex {
/// <summary> 边起点到a点的距离 </summary>
public float origin;
/// <summary> a点 </summary>
public DataPlateVertex a;
/// <summary> a点的下一个点 </summary>
public DataPlateVertex b;
/// <summary> 缝合边顶点 </summary>
public DataSutureSideVertex(float origin, DataPlateVertex a, DataPlateVertex b) {
this.origin = origin;
this.a = a;
this.b = b;
}
/// <summary> 最大距离 origin + a - b </summary>
public float MaxDistance => origin + Distance;
/// <summary> 分段距离 a-b </summary>
public float Distance => Vector3.Distance(a.position, b.position);
}
+1
View File
@@ -6,6 +6,7 @@ public struct DataTriangle {
public Vector3 a;
public Vector3 b;
public Vector3 c;
public override string ToString() {
return $"{a} , {b} , {c}";
}