예제 #1
0
        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);
            }
        }
예제 #2
0
 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();
     }
 }
예제 #3
0
        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();
        }
예제 #4
0
        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();
        }
예제 #5
0
        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();
        }
예제 #6
0
 void OnDestroy()
 {
     BuilderCore.OnDeleteNode(this);
 }
예제 #7
0
 public GameObject Extrude()
 {
     return(BuilderCore.Extrude(this));
 }