public void ClearData() { int count; count = builderNodes.Count; for (int i = 0; i < count; i++) { BuilderCore.DeleteNode(BuilderData.Data.builderNodes [0]); } count = sectionNodes.Count; for (int i = 0; i < count; i++) { GameObject o = BuilderData.Data.sectionNodes [0].gameObject; sectionNodes.RemoveAt(0); DestroyImmediate(o); } count = BuilderData.Data.bezierHandles.Count; for (int i = 0; i < count; i++) { GameObject o = BuilderData.Data.bezierHandles [0].gameObject; BuilderData.Data.bezierHandles.RemoveAt(0); DestroyImmediate(o); } }
void OnDrawGizmos() { for (int i = 0; i < linkGraph.Count; i++) { for (int j = 0; j < linkGraph [i].Count - 1; j++) { if (linkGraph [i] [j] != 999) { Gizmos.DrawLine(builderNodes [i].transform.position, builderNodes [j].transform.position); } } } Gizmos.color = Color.cyan; if (bezierSetMap.Count > 0 && sectionNodes.Count > 0) { foreach (BuilderCore.BezierSegment bs in bezierSetMap) { Gizmos.DrawLine(bs.startNode.transform.position, bs.sectionNodes [0].transform.position); for (int i = 0; i < bs.sectionNodes.Count - 1; i++) { Gizmos.DrawLine(bs.sectionNodes [i].transform.position, bs.sectionNodes [i + 1].transform.position); } Gizmos.DrawLine(bs.sectionNodes [bs.sectionNodes.Count - 1].transform.position, bs.endNode.transform.position); } BuilderCore.RefreshBezierSegment(); } }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.Slider(mergeIntersectionThresholdProp, 0.1f, 100f, new GUIContent("交叉口焊接阈值")); EditorGUILayout.Slider(removeDoubleThresholdProp, 0.1f, 100f, new GUIContent("冗余点焊接阈值")); EditorGUILayout.Slider(laneWidthProp, 0.1f, 100f, new GUIContent("车道宽度")); EditorGUILayout.Slider(sectionLengthProp, 0.1f, 100f, new GUIContent("段长度")); EditorGUILayout.ObjectField(builderNodeMeshProp, typeof(Mesh)); if (BuilderData.Data.builderNodes.Count == 0) { if (GUILayout.Button("创建根节点")) { Selection.activeGameObject = BuilderCore.CreateRootNode(Vector3.zero).gameObject; } } // if (GUILayout.Button ("刷新贝塞尔曲线")) { // BuilderCore.RefreshBezierSegment (); // } if (GUILayout.Button("整理冗余点和交叉口")) { for (int i = 0; i < BuilderData.Data.lineSetMap.Count; i++) { BuilderCore.MergeIntersection(); BuilderCore.RemoveDouble(); } BuilderCore.RefreshSectionNodes(); } if (GUILayout.Button("加载数据库文件")) { BuilderCore.Load(); } if (GUILayout.Button("保存至数据库")) { BuilderCore.Save(); } serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { serializedObject.Update(); base.OnInspectorGUI(); Transform[] selectedObjs = Selection.transforms; if (GUILayout.Button("挤出")) { Selection.activeGameObject = ((BuilderNode)serializedObject.targetObject).Extrude(); } if (GUILayout.Button("删除")) { BuilderCore.DeleteNode((BuilderNode)serializedObject.targetObject); Selection.activeObject = BuilderData.Data.gameObject; return; } if (selectedObjs.Length == 2 && selectedObjs [0].GetComponent <BuilderNode> () != null && selectedObjs [1].GetComponent <BuilderNode> () != null) { if (GUILayout.Button("连接")) { BuilderCore.LinkNode(Selection.transforms [0].GetComponent <BuilderNode> ().builderNodeId, Selection.transforms [1].GetComponent <BuilderNode> ().builderNodeId); } if (GUILayout.Button("断开")) { BuilderCore.BreakLink(Selection.transforms [0].GetComponent <BuilderNode> ().builderNodeId, Selection.transforms [1].GetComponent <BuilderNode> ().builderNodeId); } } if (GUILayout.Button("整理冗余点和交叉口")) { for (int i = 0; i < BuilderData.Data.lineSetMap.Count; i++) { BuilderCore.MergeIntersection(); BuilderCore.RemoveDouble(); } BuilderCore.RefreshSectionNodes(); } serializedObject.ApplyModifiedProperties(); }
public static void Load() { BuilderData.Data.ClearData(); string lfd = EditorUtility.OpenFilePanelWithFilters("加载数据库文件", "", new string[] { "(*.db)", "db" }); if (lfd != "") { BuilderNodeDAO.DAO.Load(lfd); LinkInfoDAO.DAO.Load(lfd); } else { return; } foreach (BuilderNodeDAO.BuilderNodeRecord r in BuilderNodeDAO.DAO.builderNodeRecords) { BuilderNode newNode = BuilderCore.CreateNode(String2Vector3(r.position)); newNode.gameObject.transform.rotation = String2Quaternion(r.rotation); newNode.builderNodeId = r.id; switch (r.type) { case 1: newNode.builderNodeType = BuilderNodeType.Section; break; case 2: newNode.builderNodeType = BuilderNodeType.Intersection; break; } } foreach (LinkInfoDAO.LinkInfoRecord l in LinkInfoDAO.DAO.linkInfoRecords) { BuilderData.Data.linkGraph [l.fromId] [l.toId] = l.distance; } RefreshLineSetGroup(); RefreshSectionNodes(); }
void OnDestroy() { BuilderCore.OnDeleteNode(this); }
public GameObject Extrude() { return(BuilderCore.Extrude(this)); }